<?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>140496</bug_id>
          
          <creation_ts>2015-01-15 07:34:11 -0800</creation_ts>
          <short_desc>Rename SimpleFontData to Font</short_desc>
          <delta_ts>2015-01-23 00:25:13 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>140814</dependson>
          <blocked>135290</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>hyatt</cc>
    
    <cc>mitz</cc>
    
    <cc>mmaxfield</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1061545</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-01-15 07:34:11 -0800</bug_when>
    <thetext>That&apos;s what it represents.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061584</commentid>
    <comment_count>1</comment_count>
      <attachid>244701</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-01-15 10:55:31 -0800</bug_when>
    <thetext>Created attachment 244701
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061587</commentid>
    <comment_count>2</comment_count>
      <attachid>244703</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-01-15 11:14:29 -0800</bug_when>
    <thetext>Created attachment 244703
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061589</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-15 11:16:21 -0800</bug_when>
    <thetext>Attachment 244703 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/mac/FontMac.mm:49:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/platform/graphics/mac/FontMac.mm:142:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/graphics/mac/FontMac.mm:256:  Missing spaces around /  [whitespace/operators] [3]
ERROR: Source/WebCore/platform/graphics/mac/FontMac.mm:336:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebCore/platform/graphics/mac/FontMac.mm:337:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebCore/platform/graphics/mac/FontMac.mm:337:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/graphics/mac/FontMac.mm:338:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebCore/platform/graphics/mac/FontMac.mm:338:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/graphics/mac/FontMac.mm:339:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/graphics/ios/FontIOS.mm:53:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/graphics/ios/FontIOS.mm:54:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/graphics/Font.h:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/platform/graphics/Font.h:143:  The parameter name &quot;glyph&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/graphics/Font.h:235:  The parameter name &quot;glyph&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/graphics/Font.h:236:  The parameter name &quot;glyph&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/graphics/Font.h:240:  The parameter name &quot;glyph&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/graphics/Font.h:258:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/graphics/Font.cpp:139:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/graphics/Font.cpp:193:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebCore/platform/graphics/Font.cpp:253:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebCore/platform/graphics/mac/FontCascadeComplexTextMac.cpp:85:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/graphics/mac/FontCascadeMac.mm:209:  Missing space before ( in switch(  [whitespace/parens] [5]
Total errors found: 22 in 90 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1062775</commentid>
    <comment_count>4</comment_count>
      <attachid>244703</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-01-20 09:29:23 -0800</bug_when>
    <thetext>Comment on attachment 244703
patch

I approve of the idea, but since EWS is all red, seems like you should upload a rebased one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1063224</commentid>
    <comment_count>5</comment_count>
      <attachid>245097</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-01-21 16:08:21 -0800</bug_when>
    <thetext>Created attachment 245097
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1063225</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-21 16:10:53 -0800</bug_when>
    <thetext>Attachment 245097 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/Font.h:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/platform/graphics/Font.h:143:  The parameter name &quot;glyph&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/graphics/Font.h:235:  The parameter name &quot;glyph&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/graphics/Font.h:236:  The parameter name &quot;glyph&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/graphics/Font.h:240:  The parameter name &quot;glyph&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/graphics/Font.h:258:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/graphics/Font.cpp:139:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/graphics/Font.cpp:193:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebCore/platform/graphics/Font.cpp:253:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 9 in 82 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1063280</commentid>
    <comment_count>7</comment_count>
      <attachid>245118</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-01-21 21:04:56 -0800</bug_when>
    <thetext>Created attachment 245118
another</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1063281</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-21 21:07:54 -0800</bug_when>
    <thetext>Attachment 245118 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/Font.h:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/platform/graphics/Font.h:143:  The parameter name &quot;glyph&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/graphics/Font.h:235:  The parameter name &quot;glyph&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/graphics/Font.h:236:  The parameter name &quot;glyph&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/graphics/Font.h:240:  The parameter name &quot;glyph&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/graphics/Font.h:258:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/graphics/Font.cpp:139:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/graphics/Font.cpp:193:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebCore/platform/graphics/Font.cpp:253:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 9 in 88 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1063285</commentid>
    <comment_count>9</comment_count>
      <attachid>245119</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-01-21 21:20:12 -0800</bug_when>
    <thetext>Created attachment 245119
another</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1063389</commentid>
    <comment_count>10</comment_count>
      <attachid>245147</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-01-22 10:40:54 -0800</bug_when>
    <thetext>Created attachment 245147
another</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1063390</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-22 10:42:27 -0800</bug_when>
    <thetext>Attachment 245147 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/win/UniscribeController.h:59:  The parameter name &quot;item&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/graphics/cairo/FontCairoHarfbuzzNG.cpp:30:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WebCore/platform/graphics/win/FontWin.cpp:29:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WebCore/platform/graphics/cairo/FontCairo.cpp:36:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WebCore/platform/graphics/win/FontCGWin.cpp:31:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WebCore/platform/graphics/win/FontCacheWin.cpp:31:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 6 in 118 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1063394</commentid>
    <comment_count>12</comment_count>
      <attachid>245148</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-01-22 10:58:19 -0800</bug_when>
    <thetext>Created attachment 245148
another</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1063395</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-22 11:02:09 -0800</bug_when>
    <thetext>Attachment 245148 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/cairo/FontCairoHarfbuzzNG.cpp:30:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WebCore/platform/graphics/win/FontWin.cpp:29:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WebCore/platform/graphics/cairo/FontCairo.cpp:36:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WebCore/platform/graphics/win/FontCGWin.cpp:31:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WebCore/platform/graphics/win/FontCacheWin.cpp:31:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 5 in 119 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1063399</commentid>
    <comment_count>14</comment_count>
      <attachid>245149</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-01-22 11:13:57 -0800</bug_when>
    <thetext>Created attachment 245149
another</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1063400</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-22 11:17:54 -0800</bug_when>
    <thetext>Attachment 245149 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/cairo/FontCairoHarfbuzzNG.cpp:30:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WebCore/platform/graphics/win/FontWin.cpp:29:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WebCore/platform/graphics/cairo/FontCairo.cpp:36:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WebCore/platform/graphics/win/FontCGWin.cpp:31:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WebCore/platform/graphics/win/FontCacheWin.cpp:31:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 5 in 119 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1063408</commentid>
    <comment_count>16</comment_count>
      <attachid>245151</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-01-22 11:30:39 -0800</bug_when>
    <thetext>Created attachment 245151
another</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1063409</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-22 11:33:40 -0800</bug_when>
    <thetext>Attachment 245151 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/cairo/FontCairoHarfbuzzNG.cpp:30:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WebCore/platform/graphics/win/FontWin.cpp:29:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WebCore/platform/graphics/cairo/FontCairo.cpp:36:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WebCore/platform/graphics/win/FontCGWin.cpp:31:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WebCore/platform/graphics/win/FontCacheWin.cpp:31:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 5 in 119 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1063429</commentid>
    <comment_count>18</comment_count>
      <attachid>245156</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-01-22 13:10:00 -0800</bug_when>
    <thetext>Created attachment 245156
another</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1063430</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-22 13:12:38 -0800</bug_when>
    <thetext>Attachment 245156 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/cairo/FontCairoHarfbuzzNG.cpp:30:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WebCore/platform/graphics/win/FontWin.cpp:29:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WebCore/platform/graphics/cairo/FontCairo.cpp:36:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WebCore/platform/graphics/win/FontCGWin.cpp:31:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WebCore/platform/graphics/win/FontCacheWin.cpp:31:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 5 in 119 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1063450</commentid>
    <comment_count>20</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-01-22 13:57:47 -0800</bug_when>
    <thetext>https://trac.webkit.org/r178940</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>244701</attachid>
            <date>2015-01-15 10:55:31 -0800</date>
            <delta_ts>2015-01-15 11:14:29 -0800</delta_ts>
            <desc>patch</desc>
            <filename>simplefontdata-rename-2.patch</filename>
            <type>text/plain</type>
            <size>404311</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3ODUxNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDE1LTAxLTE1ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgU2ltcGxlRm9udERh
dGEgdG8gRm9udAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTQwNDk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhlIGZhbGxiYWNrIHN1cHBvcnRpbmcgRm9udCB0eXBlIHdhcyByZW5hbWVkIEZvbnRDYXNj
YWRlLgorICAgICAgICBXZSBjYW4gbm93IHJlbmFtZSBTaW1wbGVGb250RGF0YSB0byBqdXN0IEZv
bnQgbWF0Y2hpbmcgdGhlIHVzdWFsIGRlZmluaXRpb24uCisKIDIwMTUtMDEtMTUgIE15bGVzIEMu
IE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAgICBodHRwL3Rlc3RzL21p
c2MvYWNpZDMuaHRtbCBpcyBmbGFrZXkgb24gTWF2ZXJpY2tzCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4
cC5pbgkocmV2aXNpb24gMTc4NTEwKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4J
KHdvcmtpbmcgY29weSkKQEAgLTQ2Nyw3ICs0NjcsNiBAQCBfX1pON1dlYkNvcmUxNFNlY3VyaXR5
UG9saWN5MjJnZW5lcmF0ZVJlCiBfX1pON1dlYkNvcmUxNFNlY3VyaXR5UG9saWN5MjdyZXNldE9y
aWdpbkFjY2Vzc1doaXRlbGlzdHNFdgogX19aTjdXZWJDb3JlMTRTZWN1cml0eVBvbGljeTI5YWRk
T3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnlFUktOU18xNFNlY3VyaXR5T3JpZ2luRVJLTjNXVEY2
U3RyaW5nRVM3X2IKIF9fWk43V2ViQ29yZTE0U2VjdXJpdHlQb2xpY3kzMnJlbW92ZU9yaWdpbkFj
Y2Vzc1doaXRlbGlzdEVudHJ5RVJLTlNfMTRTZWN1cml0eU9yaWdpbkVSS04zV1RGNlN0cmluZ0VT
N19iCi1fX1pON1dlYkNvcmUxNFNpbXBsZUZvbnREYXRhRDFFdgogX19aTjdXZWJDb3JlMTRTdWJm
cmFtZUxvYWRlcjEyYWxsb3dQbHVnaW5zRU5TXzI4UmVhc29uRm9yQ2FsbGluZ0FsbG93UGx1Z2lu
c0UKIF9fWk43V2ViQ29yZTE0VGlsZUNvbnRyb2xsZXIxNHNldFRpbGVzT3BhcXVlRWIKIF9fWk43
V2ViQ29yZTE0VGlsZUNvbnRyb2xsZXIxNWNvbnRhaW5lckxheWVyc0V2CkBAIC0xMTM0LDYgKzEx
MzMsNyBAQCBfX1pON1dlYkNvcmU0MGRlZmF1bHRUZXh0RW5jb2RpbmdOYW1lRm9yCiBfX1pON1dl
YkNvcmU0MHJlc3RyaWN0TWluaW11bVNjYWxlRmFjdG9yVG9WaWV3cG9ydFNpemVFUk5TXzE4Vmll
d3BvcnRBdHRyaWJ1dGVzRU5TXzdJbnRTaXplRWYKIF9fWk43V2ViQ29yZTQyVVJMQnlUcnVuY2F0
aW5nT25lQ2hhcmFjdGVyQmVmb3JlQ29tcG9uZW50RVA1TlNVUkwxOENGVVJMQ29tcG9uZW50VHlw
ZQogX19aTjdXZWJDb3JlNDdhdHRyaWJ1dGVkU3RyaW5nQnlTdHJpcHBpbmdBdHRhY2htZW50Q2hh
cmFjdGVyc0VQMThOU0F0dHJpYnV0ZWRTdHJpbmcKK19fWk43V2ViQ29yZTRGb250RDFFdgogX19a
TjdXZWJDb3JlNEljb24xOGNyZWF0ZUljb25Gb3JGaWxlc0VSS04zV1RGNlZlY3RvcklOUzFfNlN0
cmluZ0VMbTBFTlMxXzE1Q3Jhc2hPbk92ZXJmbG93RUVFCiBfX1pON1dlYkNvcmU0SWNvbkQxRXYK
IF9fWk43V2ViQ29yZTROb2RlMTByZW5kZXJSZWN0RVBiCkBAIC0xNDQ0LDExICsxNDQ0LDExIEBA
IF9fWk43V2ViQ29yZTlGbG9hdFJlY3RDMUVSS05TXzdJbnRSZWN0RQogX19aTjdXZWJDb3JlOUZs
b2F0U2l6ZUMxRVJLNkNHU2l6ZQogX19aTjdXZWJDb3JlOUZsb2F0U2l6ZUMxRVJLTlNfN0ludFNp
emVFCiBfX1pON1dlYkNvcmU5Rm9udENhY2hlMTBpbnZhbGlkYXRlRXYKLV9fWk43V2ViQ29yZTlG
b250Q2FjaGUxM2ZvbnREYXRhQ291bnRFdgogX19aTjdXZWJDb3JlOUZvbnRDYWNoZTEzZm9udEZv
ckZhbWlseUVSS05TXzE1Rm9udERlc2NyaXB0aW9uRVJLTjNXVEYxMkF0b21pY1N0cmluZ0ViCi1f
X1pON1dlYkNvcmU5Rm9udENhY2hlMjFpbmFjdGl2ZUZvbnREYXRhQ291bnRFdgorX19aTjdXZWJD
b3JlOUZvbnRDYWNoZTE3aW5hY3RpdmVGb250Q291bnRFdgogX19aTjdXZWJDb3JlOUZvbnRDYWNo
ZTIxcHVyZ2VJbmFjdGl2ZUZvbnREYXRhRWkKIF9fWk43V2ViQ29yZTlGb250Q2FjaGUyOXB1cmdl
SW5hY3RpdmVGb250RGF0YUlmTmVlZGVkRXYKK19fWk43V2ViQ29yZTlGb250Q2FjaGU5Zm9udENv
dW50RXYKIF9fWk43V2ViQ29yZTlGcmFtZVRyZWUxMWFwcGVuZENoaWxkRU4zV1RGMTBQYXNzUmVm
UHRySU5TXzVGcmFtZUVFRQogX19aTjdXZWJDb3JlOUZyYW1lVHJlZTdzZXROYW1lRVJLTjNXVEYx
MkF0b21pY1N0cmluZ0UKIF9fWk43V2ViQ29yZTlGcmFtZVRyZWU5Y2xlYXJOYW1lRXYKQEAgLTE1
ODcsOCArMTU4Nyw4IEBAIF9fWk5LM1dURjZTdHJpbmcxNGNyZWF0ZUNGU3RyaW5nRXYKIF9fWk5L
N1dlYkNvcmUxMENyZWRlbnRpYWwxMm5zQ3JlZGVudGlhbEV2CiBfX1pOSzdXZWJDb3JlMTBDcmVk
ZW50aWFsN2lzRW1wdHlFdgogX19aTks3V2ViQ29yZTEwRmxvYXRQb2ludGN2N0NHUG9pbnRFdgot
X19aTks3V2ViQ29yZTEwRm9udFJhbmdlczIwZm9udERhdGFGb3JDaGFyYWN0ZXJFaQotX19aTks3
V2ViQ29yZTEwRm9udFJhbmdlczIxZm9udERhdGFGb3JGaXJzdFJhbmdlRXYKK19fWk5LN1dlYkNv
cmUxMEZvbnRSYW5nZXMxNmZvbnRGb3JDaGFyYWN0ZXJFaQorX19aTks3V2ViQ29yZTEwRm9udFJh
bmdlczE3Zm9udEZvckZpcnN0UmFuZ2VFdgogX19aTks3V2ViQ29yZTEwTGF5b3V0UmVjdDhjb250
YWluc0VSS1MwXwogX19aTks3V2ViQ29yZTEwUGx1Z2luRGF0YTE2c3VwcG9ydHNNaW1lVHlwZUVS
S04zV1RGNlN0cmluZ0VOUzBfMThBbGxvd2VkUGx1Z2luVHlwZXNFCiBfX1pOSzdXZWJDb3JlMTBS
ZW5kZXJUZXh0MTZmaXJzdFJ1bkxvY2F0aW9uRXYKQEAgLTE2MTgsNyArMTYxOCw3IEBAIF9fWk5L
N1dlYkNvcmUxMFRpbWVSYW5nZXMzZW5kRWpSaQogX19aTks3V2ViQ29yZTEwVGltZVJhbmdlczRj
b3B5RXYKIF9fWk5LN1dlYkNvcmUxMFRpbWVSYW5nZXM1c3RhcnRFalJpCiBfX1pOSzdXZWJDb3Jl
MTBUaW1lUmFuZ2VzNmxlbmd0aEV2Ci1fX1pOSzdXZWJDb3JlMTFGb250Q2FzY2FkZTV3aWR0aEVS
S05TXzdUZXh0UnVuRVBOM1dURjdIYXNoU2V0SVBLTlNfMTRTaW1wbGVGb250RGF0YUVOUzRfN1B0
ckhhc2hJUzhfRUVOUzRfMTBIYXNoVHJhaXRzSVM4X0VFRUVQTlNfMTNHbHlwaE92ZXJmbG93RQor
X19aTks3V2ViQ29yZTExRm9udENhc2NhZGU1d2lkdGhFUktOU183VGV4dFJ1bkVQTjNXVEY3SGFz
aFNldElQS05TXzRGb250RU5TNF83UHRySGFzaElTOF9FRU5TNF8xMEhhc2hUcmFpdHNJUzhfRUVF
RVBOU18xM0dseXBoT3ZlcmZsb3dFCiBfX1pOSzdXZWJDb3JlMTFGb250Q2FzY2FkZThkcmF3VGV4
dEVQTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU183VGV4dFJ1bkVSS05TXzEwRmxvYXRQb2ludEVp
aU5TMF8yNEN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbkUKIF9fWk5LN1dlYkNvcmUxMUZvbnRDYXNj
YWRlZXFFUktTMF8KIF9fWk5LN1dlYkNvcmUxMUZyYW1lTG9hZGVyMTBpc0NvbXBsZXRlRXYKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDE3ODUxMCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNjYwLDcgKzY2MCw3IEBACiAJCTE1
Qzc3MDk0MTAwRDNDQTgwMDVCQTI2NyAvKiBKU1ZhbGlkaXR5U3RhdGUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTVDNzcwOTIxMDBEM0NBODAwNUJB
MjY3IC8qIEpTVmFsaWRpdHlTdGF0ZS5jcHAgKi87IH07CiAJCTE1Qzc3MEE1MTAwRDQxQ0QwMDVC
QTI2NyAvKiBET01WYWxpZGl0eVN0YXRlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMTVDNzcwQTMxMDBENDFDRDAwNUJBMjY3IC8qIERPTVZhbGlkaXR5
U3RhdGUubW0gKi87IH07CiAJCTE1Qzc3MEE2MTAwRDQxQ0QwMDVCQTI2NyAvKiBET01WYWxpZGl0
eVN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
NUM3NzBBNDEwMEQ0MUNEMDA1QkEyNjcgLyogRE9NVmFsaWRpdHlTdGF0ZS5oICovOyB9OwotCQkx
NjNFODhGNzExOEEzOUQyMDBFRDkyMzEgLyogU2ltcGxlRm9udERhdGFDb3JlVGV4dC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNjNFODhGNTExOEEz
OUQyMDBFRDkyMzEgLyogU2ltcGxlRm9udERhdGFDb3JlVGV4dC5jcHAgKi87IH07CisJCTE2M0U4
OEY3MTE4QTM5RDIwMEVEOTIzMSAvKiBGb250Q29yZVRleHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTYzRTg4RjUxMThBMzlEMjAwRUQ5MjMxIC8q
IEZvbnRDb3JlVGV4dC5jcHAgKi87IH07CiAJCTE4NUJDRjI4MEYzMjc5Q0UwMDBFQTI2MiAvKiBU
aHJlYWRUaW1lcnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMTg1QkNGMjYwRjMyNzlDRTAwMEVBMjYyIC8qIFRocmVhZFRpbWVycy5jcHAgKi87IH07
CiAJCTE4NUJDRjI5MEYzMjc5Q0UwMDBFQTI2MiAvKiBUaHJlYWRUaW1lcnMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE4NUJDRjI3MEYzMjc5Q0UwMDBF
QTI2MiAvKiBUaHJlYWRUaW1lcnMuaCAqLzsgfTsKIAkJMTg4NjA0QjMwRjJFNjU0QTAwMEI2NDQz
IC8qIERPTVRpbWVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDE4ODYwNEIxMEYyRTY1NEEwMDBCNjQ0MyAvKiBET01UaW1lci5jcHAgKi87IH07CkBA
IC0xMzg4LDcgKzEzODgsNyBAQAogCQkzN0FDQ0U0MjBEQTI5ODBGMDA4OUU2MDIgLyogRm9udFJl
bmRlcmluZ01vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDM3QUNDRTQxMERBMjk4MEYwMDg5RTYwMiAvKiBGb250UmVuZGVyaW5nTW9kZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTM3QUNDRjY5MERB
NDE0RTcwMDg5RTYwMiAvKiBGb250RGVzY3JpcHRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzdBQ0NFNjIwREEyQUE5NjAwODlFNjAyIC8qIEZv
bnREZXNjcmlwdGlvbi5jcHAgKi87IH07CiAJCTM3QkFBRTU4MTk4MEQxREQwMDVERkU3MSAvKiBQ
cm90ZWN0aW9uU3BhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDM3QkFBRTU3MTk4MEQxREQwMDVERkU3MSAvKiBQcm90ZWN0aW9uU3BhY2UuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkzN0MyMzYwQjEw
OTdFREVEMDBFRjlGNzIgLyogRm9udENvbXBsZXhUZXh0TWFjLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3QzIzNjBBMTA5N0VERUQwMEVGOUY3MiAv
KiBGb250Q29tcGxleFRleHRNYWMuY3BwICovOyB9OworCQkzN0MyMzYwQjEwOTdFREVEMDBFRjlG
NzIgLyogRm9udENhc2NhZGVDb21wbGV4VGV4dE1hYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0MyMzYwQTEwOTdFREVEMDBFRjlGNzIgLyogRm9u
dENhc2NhZGVDb21wbGV4VGV4dE1hYy5jcHAgKi87IH07CiAJCTM3QzIzNjEwMTA5N0VFNzcwMEVG
OUY3MiAvKiBDb21wbGV4VGV4dENvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzdDMjM2MEUxMDk3RUU3NzAwRUY5RjcyIC8qIENvbXBs
ZXhUZXh0Q29udHJvbGxlci5jcHAgKi87IH07CiAJCTM3QzIzNjExMTA5N0VFNzcwMEVGOUY3MiAv
KiBDb21wbGV4VGV4dENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDM3QzIzNjBGMTA5N0VFNzcwMEVGOUY3MiAvKiBDb21wbGV4VGV4dENv
bnRyb2xsZXIuaCAqLzsgfTsKIAkJMzdDMjM4MjIxMDk4Qzg0MjAwRUY5RjcyIC8qIENvbXBsZXhU
ZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMzdDMjM4MjAxMDk4Qzg0MjAwRUY5RjcyIC8qIENvbXBsZXhUZXh0Q29u
dHJvbGxlckNvcmVUZXh0Lm1tICovOyB9OwpAQCAtMTQwMSw3ICsxNDAxLDcgQEAKIAkJMzdERENE
QTcxMzg0NTAxQzAwMDhCNzkzIC8qIE1IVE1MUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0REQ0RBMzEzODQ1MDFDMDAwOEI3OTMgLyogTUhU
TUxQYXJzZXIuaCAqLzsgfTsKIAkJMzdFMzUyNEIxMjQ1MEM1MjAwQkFGNUQ5IC8qIElucHV0VHlw
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0Uz
NTI0QTEyNDUwQzUyMDBCQUY1RDkgLyogSW5wdXRUeXBlLmNwcCAqLzsgfTsKIAkJMzdFMzUyNEQx
MjQ1MEM2NjAwQkFGNUQ5IC8qIElucHV0VHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMzdFMzUyNEMxMjQ1MEM2NjAwQkFGNUQ5IC8qIElucHV0VHlw
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTM3
RTY1OTUwMTYzQjEwQzIwMEVCNDU3NCAvKiBTaW1wbGVGb250RGF0YUlPUy5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3RTY1OTRGMTYzQjEwQzIwMEVC
NDU3NCAvKiBTaW1wbGVGb250RGF0YUlPUy5tbSAqLzsgfTsKKwkJMzdFNjU5NTAxNjNCMTBDMjAw
RUI0NTc0IC8qIEZvbnRJT1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAzN0U2NTk0RjE2M0IxMEMyMDBFQjQ1NzQgLyogRm9udElPUy5tbSAqLzsgfTsK
IAkJMzdGNTY3Q0UxNjUzNThGNDAwRERFOTJCIC8qIFBvcHVwT3BlbmluZ09ic2VydmVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzcyQjA5NTE2NTM1
ODU2MDAwQTQ5Q0EgLyogUG9wdXBPcGVuaW5nT2JzZXJ2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkzN0Y1N0FCOTFBNTA3MjY5MDA4NzZGOTgg
LyogQWNjZXNzaWJpbGl0eUFSSUFHcmlkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDI5ODFDQTlEMTMxODIyRUMwMEQxMkYyQSAvKiBBY2Nlc3NpYmls
aXR5QVJJQUdyaWQuY3BwICovOyB9OwogCQkzN0Y1N0FCQTFBNTA3MjZGMDA4NzZGOTggLyogQWNj
ZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyOTgxQ0E5RTEzMTgyMkVDMDBEMTJGMkEgLyogQWNjZXNzaWJpbGl0
eUFSSUFHcmlkQ2VsbC5jcHAgKi87IH07CkBAIC0yMzQwLDcgKzIzNDAsNyBAQAogCQk3MjRFRDMy
QzFBM0E3RTU0MDBGNUYxM0MgLyogRVhUQmxlbmRNaW5NYXguY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI0RUQzMjkxQTNBN0U1NDAwRjVGMTNDIC8q
IEVYVEJsZW5kTWluTWF4LmNwcCAqLzsgfTsKIAkJNzI0RUQzMzExQTNBOEIyMzAwRjVGMTNDIC8q
IEpTRVhUQmxlbmRNaW5NYXguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzI0RUQzMkYxQTNBOEIyMzAwRjVGMTNDIC8qIEpTRVhUQmxlbmRNaW5NYXgu
Y3BwICovOyB9OwogCQk3MjRFRDMzMjFBM0E4QjIzMDBGNUYxM0MgLyogSlNFWFRCbGVuZE1pbk1h
eC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI0RUQz
MzAxQTNBOEIyMzAwRjVGMTNDIC8qIEpTRVhUQmxlbmRNaW5NYXguaCAqLzsgfTsKLQkJNzI2MjZF
MDIwRUYwMjJGRTAwQTA3RTIwIC8qIEZvbnRGYXN0UGF0aC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjYyNkUwMTBFRjAyMkZFMDBBMDdFMjAgLyog
Rm9udEZhc3RQYXRoLmNwcCAqLzsgfTsKKwkJNzI2MjZFMDIwRUYwMjJGRTAwQTA3RTIwIC8qIEZv
bnRDYXNjYWRlRmFzdFBhdGguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzI2MjZFMDEwRUYwMjJGRTAwQTA3RTIwIC8qIEZvbnRDYXNjYWRlRmFzdFBh
dGguY3BwICovOyB9OwogCQk3MjdBRkVENDFBMkVBNkFFMDAwNDQyRTggLyogRVhUc1JHQi5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjdBRkVEMTFB
MkVBNkEwMDAwNDQyRTggLyogRVhUc1JHQi5jcHAgKi87IH07CiAJCTcyRTQxNzYzMUEyRThEMkYw
MDRDNTYyQSAvKiBKU0VYVHNSR0IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNzJFNDE3NjExQTJFOEQyRjAwNEM1NjJBIC8qIEpTRVhUc1JHQi5jcHAg
Ki87IH07CiAJCTcyRjFBREEyMUEzOTA0REMwMDAxNEUxOCAvKiBFWFRGcmFnRGVwdGguY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJGMUFEOUYxQTM5
MDRDMzAwMDE0RTE4IC8qIEVYVEZyYWdEZXB0aC5jcHAgKi87IH07CkBAIC00NjY5LDggKzQ2Njks
OCBAQAogCQlCMkFGRkM3QzBEMDBBNUMxMDAzMDA3NEQgLyogRm9udENhY2hlTWFjLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJBRkZDNzQwRDAwQTVD
MTAwMzAwNzREIC8qIEZvbnRDYWNoZU1hYy5tbSAqLzsgfTsKIAkJQjJBRkZDN0QwRDAwQTVDMTAw
MzAwNzREIC8qIEZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJBRkZDNzUwRDAwQTVDMTAwMzAwNzREIC8qIEZv
bnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwICovOyB9OwogCQlCMkFGRkM3RTBEMDBBNUMxMDAzMDA3
NEQgLyogRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQjJBRkZDNzYwRDAwQTVDMTAwMzAwNzREIC8qIEZvbnRDdXN0
b21QbGF0Zm9ybURhdGEuaCAqLzsgfTsKLQkJQjJBRkZDN0YwRDAwQTVDMTAwMzAwNzREIC8qIFNp
bXBsZUZvbnREYXRhTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQjJBRkZDNzcwRDAwQTVDMTAwMzAwNzREIC8qIFNpbXBsZUZvbnREYXRhTWFjLm1t
ICovOyB9OwotCQlCMkFGRkM4MDBEMDBBNUMxMDAzMDA3NEQgLyogRm9udE1hYy5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQUZGQzc4MEQwMEE1QzEw
MDMwMDc0RCAvKiBGb250TWFjLm1tICovOyB9OworCQlCMkFGRkM3RjBEMDBBNUMxMDAzMDA3NEQg
LyogRm9udE1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEIyQUZGQzc3MEQwMEE1QzEwMDMwMDc0RCAvKiBGb250TWFjLm1tICovOyB9OworCQlCMkFG
RkM4MDBEMDBBNUMxMDAzMDA3NEQgLyogRm9udENhc2NhZGVNYWMubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkFGRkM3ODBEMDBBNUMxMDAzMDA3NEQg
LyogRm9udENhc2NhZGVNYWMubW0gKi87IH07CiAJCUIyQUZGQzgzMEQwMEE1QzEwMDMwMDc0RCAv
KiBHbHlwaFBhZ2VNYWMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQjJBRkZDN0IwRDAwQTVDMTAwMzAwNzREIC8qIEdseXBoUGFnZU1hYy5jcHAgKi87
IH07CiAJCUIyQUZGQzk3MEQwMEE1REYwMDMwMDc0RCAvKiBUZXh0Qm91bmRhcmllcy5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQUZGQzhDMEQwMEE1
REYwMDMwMDc0RCAvKiBUZXh0Qm91bmRhcmllcy5tbSAqLzsgfTsKIAkJQjJBRkZDOTgwRDAwQTVE
RjAwMzAwNzREIC8qIFRleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VNYWMubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkFGRkM4RDBEMDBBNURGMDAz
MDA3NEQgLyogVGV4dEJyZWFrSXRlcmF0b3JJbnRlcm5hbElDVU1hYy5tbSAqLzsgfTsKQEAgLTQ3
MDgsOCArNDcwOCw4IEBACiAJCUIyQzNEQTYxMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FzY2Fk
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RB
NTAwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYXNjYWRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjJDM0RBNjIwRDAwNkNENjAwRUY2RjI2IC8q
IEZvbnRDYWNoZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCMkMzREE1MTBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhY2hlLmNwcCAqLzsgfTsKIAkJ
QjJDM0RBNjMwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBNTIwRDAwNkNENjAwRUY2RjI2IC8q
IEZvbnRDYWNoZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07Ci0JCUIyQzNEQTY0MEQwMDZDRDYwMEVGNkYyNiAvKiBTaW1wbGVGb250RGF0YS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkMzREE1MzBEMDA2
Q0Q2MDBFRjZGMjYgLyogU2ltcGxlRm9udERhdGEuY3BwICovOyB9OwotCQlCMkMzREE2NTBEMDA2
Q0Q2MDBFRjZGMjYgLyogU2ltcGxlRm9udERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNEQTU0MEQwMDZDRDYwMEVGNkYyNiAvKiBTaW1wbGVG
b250RGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCUIyQzNEQTY0MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNEQTUzMEQwMDZDRDYwMEVGNkYyNiAv
KiBGb250LmNwcCAqLzsgfTsKKwkJQjJDM0RBNjUwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNEQTU0MEQw
MDZDRDYwMEVGNkYyNiAvKiBGb250LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJQjJDM0RBNjYwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnREZXNjcmlw
dGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJD
M0RBNTUwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnREZXNjcmlwdGlvbi5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIyQzNEQTY3MEQwMDZDRDYwMEVG
NkYyNiAvKiBGb250R2x5cGhzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEIyQzNEQTU2MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250R2x5cGhzLmNwcCAq
LzsgfTsKIAkJQjJDM0RBNjgwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRHbHlwaHMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNEQTU3MEQwMDZDRDYw
MEVGNkYyNiAvKiBGb250R2x5cGhzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKQEAgLTc2MzEsNyArNzYzMSw3IEBACiAJCTE1Qzc3MDkyMTAwRDNDQTgw
MDVCQTI2NyAvKiBKU1ZhbGlkaXR5U3RhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNWYWxpZGl0eVN0YXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMTVDNzcwQTMxMDBENDFDRDAwNUJBMjY3IC8qIERPTVZhbGlkaXR5U3RhdGUubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBET01WYWxpZGl0eVN0YXRlLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNUM3NzBBNDEwMEQ0MUNEMDA1QkEyNjcg
LyogRE9NVmFsaWRpdHlTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBE
T01WYWxpZGl0eVN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTE2M0U4OEY1
MTE4QTM5RDIwMEVEOTIzMSAvKiBTaW1wbGVGb250RGF0YUNvcmVUZXh0LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpbXBsZUZvbnREYXRhQ29yZVRleHQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNjNFODhGNTExOEEzOUQyMDBFRDkyMzEgLyog
Rm9udENvcmVUZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZv
bnRDb3JlVGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE4NUJDRjI2MEYz
Mjc5Q0UwMDBFQTI2MiAvKiBUaHJlYWRUaW1lcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gVGhyZWFkVGltZXJzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMTg1QkNGMjcwRjMyNzlDRTAwMEVBMjYyIC8qIFRocmVhZFRpbWVycy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJlYWRUaW1lcnMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMTg4NjA0QjEwRjJFNjU0QTAwMEI2NDQzIC8qIERPTVRpbWVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERPTVRpbWVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTg0MzEsNyArODQzMSw3IEBACiAJCTM3QUNDRTQxMERB
Mjk4MEYwMDg5RTYwMiAvKiBGb250UmVuZGVyaW5nTW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBGb250UmVuZGVyaW5nTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkzN0FDQ0U2MjBEQTJBQTk2MDA4OUU2MDIgLyogRm9udERlc2NyaXB0aW9uLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnREZXNjcmlwdGlvbi5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3QkFBRTU3MTk4MEQxREQwMDVERkU3MSAv
KiBQcm90ZWN0aW9uU3BhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJv
dGVjdGlvblNwYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTM3QzIzNjBBMTA5
N0VERUQwMEVGOUY3MiAvKiBGb250Q29tcGxleFRleHRNYWMuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRm9udENvbXBsZXhUZXh0TWFjLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMzdDMjM2MEExMDk3RURFRDAwRUY5RjcyIC8qIEZvbnRDYXNjYWRl
Q29tcGxleFRleHRNYWMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Rm9udENhc2NhZGVDb21wbGV4VGV4dE1hYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTM3QzIzNjBFMTA5N0VFNzcwMEVGOUY3MiAvKiBDb21wbGV4VGV4dENvbnRyb2xsZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29tcGxleFRleHRDb250cm9s
bGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzdDMjM2MEYxMDk3RUU3NzAw
RUY5RjcyIC8qIENvbXBsZXhUZXh0Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBDb21wbGV4VGV4dENvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMzdDMjM4MjAxMDk4Qzg0MjAwRUY5RjcyIC8qIENvbXBsZXhUZXh0Q29udHJvbGxl
ckNvcmVUZXh0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQ29t
cGxleFRleHRDb250cm9sbGVyQ29yZVRleHQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHhj
TGFuZ3VhZ2VTcGVjaWZpY2F0aW9uSWRlbnRpZmllciA9IHhjb2RlLmxhbmcub2JqY3BwOyB9OwpA
QCAtODQ0NCw3ICs4NDQ0LDcgQEAKIAkJMzdERENEQTMxMzg0NTAxQzAwMDhCNzkzIC8qIE1IVE1M
UGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1IVE1MUGFyc2VyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3RTM1MjRBMTI0NTBDNTIwMEJBRjVEOSAv
KiBJbnB1dFR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5w
dXRUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzdFMzUyNEMxMjQ1MEM2
NjAwQkFGNUQ5IC8qIElucHV0VHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJbnB1dFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMzdFNjU5NEYxNjNC
MTBDMjAwRUI0NTc0IC8qIFNpbXBsZUZvbnREYXRhSU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gU2ltcGxlRm9udERhdGFJT1MubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTM3RTY1OTRGMTYzQjEwQzIwMEVCNDU3NCAvKiBGb250SU9TLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRm9udElPUy5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzdGODE4RkIwRDY1NzYwNjAwNUUxRjA1IC8qIFdlYkNv
cmVVUkxSZXNwb25zZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb3Jl
VVJMUmVzcG9uc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzdGODE4RkMwRDY1
NzYwNjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxSZXNwb25zZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkNvcmVVUkxSZXNwb25zZS5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMzdGQzk2REExMTA0RUQ3MTAwM0UxRkFEIC8qIFRyYWlsaW5nRmxv
YXRzUm9vdElubGluZUJveC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmFp
bGluZ0Zsb2F0c1Jvb3RJbmxpbmVCb3guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTk0NzgsNyArOTQ3OCw3IEBACiAJCTcyNEVEMzJCMUEzQTdFNTQwMEY1RjEzQyAvKiBFWFRCbGVu
ZE1pbk1heC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gRVhUQmxlbmRNaW5NYXguaWRsOyBw
YXRoID0gY2FudmFzL0VYVEJsZW5kTWluTWF4LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNzI0RUQzMkYxQTNBOEIyMzAwRjVGMTNDIC8qIEpTRVhUQmxlbmRNaW5NYXguY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNFWFRCbGVuZE1pbk1heC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNEVEMzMwMUEzQThCMjMwMEY1RjEzQyAv
KiBKU0VYVEJsZW5kTWluTWF4LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
RVhUQmxlbmRNaW5NYXguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNzI2MjZFMDEw
RUYwMjJGRTAwQTA3RTIwIC8qIEZvbnRGYXN0UGF0aC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBGb250RmFzdFBhdGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3MjYyNkUwMTBFRjAyMkZFMDBBMDdFMjAgLyogRm9udENhc2NhZGVGYXN0UGF0aC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb250Q2FzY2FkZUZhc3RQ
YXRoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI3QUZFRDExQTJFQTZBMDAw
MDQ0MkU4IC8qIEVYVHNSR0IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gRVhUc1JHQi5jcHA7IHBhdGggPSBjYW52YXMvRVhUc1JHQi5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTcyN0FGRUQyMUEyRUE2QTAwMDA0NDJFOCAvKiBFWFRzUkdCLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEVYVHNSR0IuaDsgcGF0aCA9IGNhbnZhcy9F
WFRzUkdCLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyN0FGRUQzMUEyRUE2QTAw
MDA0NDJFOCAvKiBFWFRzUkdCLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBFWFRzUkdCLmlk
bDsgcGF0aCA9IGNhbnZhcy9FWFRzUkdCLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTEyMDQzLDggKzEyMDQzLDggQEAKIAkJQjJBRkZDNzQwRDAwQTVDMTAwMzAwNzREIC8qIEZv
bnRDYWNoZU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBG
b250Q2FjaGVNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQUZGQzc1MEQw
MEE1QzEwMDMwMDc0RCAvKiBGb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJBRkZDNzYwRDAwQTVDMTAwMzAwNzREIC8qIEZv
bnRDdXN0b21QbGF0Zm9ybURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
QjJBRkZDNzcwRDAwQTVDMTAwMzAwNzREIC8qIFNpbXBsZUZvbnREYXRhTWFjLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNpbXBsZUZvbnREYXRhTWFjLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCMkFGRkM3ODBEMDBBNUMxMDAzMDA3NEQgLyog
Rm9udE1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBGb250
TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCMkFGRkM3NzBEMDBBNUMxMDAz
MDA3NEQgLyogRm9udE1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBGb250TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCMkFGRkM3ODBE
MDBBNUMxMDAzMDA3NEQgLyogRm9udENhc2NhZGVNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gRm9udENhc2NhZGVNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUIyQUZGQzdCMEQwMEE1QzEwMDMwMDc0RCAvKiBHbHlwaFBhZ2VNYWMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdseXBoUGFnZU1hYy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQUZGQzg1MEQwMEE1REYwMDMwMDc0RCAv
KiBjaGFyYWN0ZXItc2V0cy50eHQgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9ICJjaGFyYWN0ZXIt
c2V0cy50eHQiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkFGRkM4NjBEMDBBNURG
MDAzMDA3NEQgLyogbWFjLWVuY29kaW5ncy50eHQgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9ICJt
YWMtZW5jb2RpbmdzLnR4dCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjA4NSw4
ICsxMjA4NSw4IEBACiAJCUIyQzNEQTUwMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FzY2FkZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9udENhc2NhZGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJDM0RBNTEwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRD
YWNoZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udENhY2hl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJDM0RBNTIwRDAwNkNENjAwRUY2
RjI2IC8qIEZvbnRDYWNoZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9u
dENhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyQzNEQTUzMEQwMDZDRDYw
MEVGNkYyNiAvKiBTaW1wbGVGb250RGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gU2ltcGxlRm9udERhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlCMkMzREE1NDBEMDA2Q0Q2MDBFRjZGMjYgLyogU2ltcGxlRm9udERhdGEuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpbXBsZUZvbnREYXRhLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUIyQzNEQTUzMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb250LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjJDM0RBNTQwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQjJDM0RBNTUwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnREZXNjcmlwdGlv
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9udERlc2NyaXB0aW9uLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQzNEQTU2MEQwMDZDRDYwMEVGNkYyNiAv
KiBGb250R2x5cGhzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBG
b250R2x5cGhzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJDM0RBNTcwRDAw
NkNENjAwRUY2RjI2IC8qIEZvbnRHbHlwaHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEZvbnRHbHlwaHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1Njc4
LDExICsxNTY3OCwxMSBAQAogCQkJCTJEMjlFQ0M5MTkyRjFGMUQwMDk4NEI3OCAvKiBEaXNwbGF5
UmVmcmVzaE1vbml0b3JJT1MuaCAqLywKIAkJCQkwRjk3QTY1NzE1NURBODFFMDBGQURENEMgLyog
RGlzcGxheVJlZnJlc2hNb25pdG9ySU9TLm1tICovLAogCQkJCTM3MjdERkQ0MTQyQUFFNDUwMEQ0
NDlDQiAvKiBGb250Q2FjaGVJT1MubW0gKi8sCisJCQkJMzdFNjU5NEYxNjNCMTBDMjAwRUI0NTc0
IC8qIEZvbnRJT1MubW0gKi8sCiAJCQkJQzU4MzYxQTcxNzQ0NTIzRjAwMTczNTExIC8qIEZvbnRT
ZXJ2aWNlc0lPUy5oICovLAogCQkJCUM1ODM2MUE4MTc0NDUyM0YwMDE3MzUxMSAvKiBGb250U2Vy
dmljZXNJT1MubW0gKi8sCiAJCQkJMzFBQjRGRkYxMjI4NzhBMjAwMUE3REIwIC8qIEdyYXBoaWNz
Q29udGV4dDNESU9TLmggKi8sCiAJCQkJRkVEMTNEM0YwQ0VBOTM5NDAwRDg5NDY2IC8qIEljb25J
T1MubW0gKi8sCi0JCQkJMzdFNjU5NEYxNjNCMTBDMjAwRUI0NTc0IC8qIFNpbXBsZUZvbnREYXRh
SU9TLm1tICovLAogCQkJCUNFRUM2MDM0MTg3REQ5NjIwMDNFNDNCQiAvKiBUZXh0VHJhY2tSZXBy
ZXNlbnRhdGlvbklPUy5oICovLAogCQkJCUNEQ0E4Mjk0MTY3OTEwMEYwMDg3NTcxNCAvKiBUZXh0
VHJhY2tSZXByZXNlbnRhdGlvbklPUy5tbSAqLywKIAkJCSk7CkBAIC0yMDM2MiwxMCArMjAzNjIs
MTIgQEAKIAkJCQlCMjc1MzU0QzBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRSZWN0TWFjLm1tICov
LAogCQkJCUIyNzUzNTREMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFNpemVNYWMubW0gKi8sCiAJ
CQkJQjJBRkZDNzQwRDAwQTVDMTAwMzAwNzREIC8qIEZvbnRDYWNoZU1hYy5tbSAqLywKLQkJCQkz
N0MyMzYwQTEwOTdFREVEMDBFRjlGNzIgLyogRm9udENvbXBsZXhUZXh0TWFjLmNwcCAqLywKKwkJ
CQkzN0MyMzYwQTEwOTdFREVEMDBFRjlGNzIgLyogRm9udENhc2NhZGVDb21wbGV4VGV4dE1hYy5j
cHAgKi8sCisJCQkJMTYzRTg4RjUxMThBMzlEMjAwRUQ5MjMxIC8qIEZvbnRDb3JlVGV4dC5jcHAg
Ki8sCiAJCQkJQjJBRkZDNzUwRDAwQTVDMTAwMzAwNzREIC8qIEZvbnRDdXN0b21QbGF0Zm9ybURh
dGEuY3BwICovLAogCQkJCUIyQUZGQzc2MEQwMEE1QzEwMDMwMDc0RCAvKiBGb250Q3VzdG9tUGxh
dGZvcm1EYXRhLmggKi8sCi0JCQkJQjJBRkZDNzgwRDAwQTVDMTAwMzAwNzREIC8qIEZvbnRNYWMu
bW0gKi8sCisJCQkJQjJBRkZDNzgwRDAwQTVDMTAwMzAwNzREIC8qIEZvbnRDYXNjYWRlTWFjLm1t
ICovLAorCQkJCUIyQUZGQzc3MEQwMEE1QzEwMDMwMDc0RCAvKiBGb250TWFjLm1tICovLAogCQkJ
CUIyQUZGQzdCMEQwMEE1QzEwMDMwMDc0RCAvKiBHbHlwaFBhZ2VNYWMuY3BwICovLAogCQkJCTQ5
RkZCRjFDMTFDODU1MEUwMDZBNzExOCAvKiBHcmFwaGljc0NvbnRleHQzRE1hYy5tbSAqLywKIAkJ
CQlCMjc3QjQwMzBCMjJGMzdDMDAwNEJFQzYgLyogR3JhcGhpY3NDb250ZXh0TWFjLm1tICovLApA
QCAtMjAzODAsOCArMjAzODIsNiBAQAogCQkJCUNENjBDMEM1MTkzRTg3QzcwMDNDNjU2QiAvKiBN
ZWRpYVRpbWVRVEtpdC5oICovLAogCQkJCUNENjBDMEM0MTkzRTg3QzcwMDNDNjU2QiAvKiBNZWRp
YVRpbWVRVEtpdC5tbSAqLywKIAkJCQkyRDZFNDY4MjE3RDY2MEY1MDBFQ0Y4QkIgLyogUERGRG9j
dW1lbnRJbWFnZU1hYy5tbSAqLywKLQkJCQkxNjNFODhGNTExOEEzOUQyMDBFRDkyMzEgLyogU2lt
cGxlRm9udERhdGFDb3JlVGV4dC5jcHAgKi8sCi0JCQkJQjJBRkZDNzcwRDAwQTVDMTAwMzAwNzRE
IC8qIFNpbXBsZUZvbnREYXRhTWFjLm1tICovLAogCQkJCTQ5RkZCRjNEMTFDOTNFRTMwMDZBNzEx
OCAvKiBXZWJHTExheWVyLmggKi8sCiAJCQkJNDlGRkJGM0UxMUM5M0VFMzAwNkE3MTE4IC8qIFdl
YkdMTGF5ZXIubW0gKi8sCiAJCQkJMEZDRjMzMkIwRjJCOUEyNTAwNEI2Nzk1IC8qIFdlYkxheWVy
LmggKi8sCkBAIC0yMDQ0MiwxMSArMjA0NDIsMTMgQEAKIAkJCQlCMjc1MzUzRjBCMDUzODE0MDAy
Q0U2NEYgLyogRmxvYXRTaXplLmggKi8sCiAJCQkJNThDRDM1Q0ExOEVCNEMzOTAwQjlGM0FDIC8q
IEZsb2F0U2l6ZUhhc2guaCAqLywKIAkJCQlCQ0I5MkQ0RTEyOTM1NTBCMDBDODM4N0YgLyogRm9u
dEJhc2VsaW5lLmggKi8sCisJCQkJQjJDM0RBNTMwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnQuY3Bw
ICovLAorCQkJCUIyQzNEQTU0MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250LmggKi8sCiAJCQkJQjJD
M0RBNTEwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYWNoZS5jcHAgKi8sCiAJCQkJQjJDM0RBNTIw
RDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYWNoZS5oICovLAorCQkJCTcyNjI2RTAxMEVGMDIyRkUw
MEEwN0UyMCAvKiBGb250Q2FzY2FkZUZhc3RQYXRoLmNwcCAqLywKIAkJCQkzN0FDQ0U2MjBEQTJB
QTk2MDA4OUU2MDIgLyogRm9udERlc2NyaXB0aW9uLmNwcCAqLywKIAkJCQlCMkMzREE1NTBEMDA2
Q0Q2MDBFRjZGMjYgLyogRm9udERlc2NyaXB0aW9uLmggKi8sCi0JCQkJNzI2MjZFMDEwRUYwMjJG
RTAwQTA3RTIwIC8qIEZvbnRGYXN0UGF0aC5jcHAgKi8sCiAJCQkJNEE2RTlGQzUxM0MxN0Q1NzAw
NDZBN0Y4IC8qIEZvbnRGZWF0dXJlU2V0dGluZ3MuY3BwICovLAogCQkJCTRBNkU5RkM2MTNDMTdE
NTcwMDQ2QTdGOCAvKiBGb250RmVhdHVyZVNldHRpbmdzLmggKi8sCiAJCQkJRTQ0RUUzQTYxNzU3
NkU1NTAwRUVFOENGIC8qIEZvbnRHZW5lcmljRmFtaWxpZXMuY3BwICovLApAQCAtMjA0NTcsNiAr
MjA0NTksOCBAQAogCQkJCUY3QTAzNEMzMTI2QkY2QkUwMDdEQzE5RSAvKiBGb250T3JpZW50YXRp
b24uaCAqLywKIAkJCQk4NEI2MjY4NDEzMzEzOEY5MDA5NUE0ODkgLyogRm9udFBsYXRmb3JtRGF0
YS5jcHAgKi8sCiAJCQkJQjUzMjBENjkxMjJBMjRFOTAwMkQxNDQwIC8qIEZvbnRQbGF0Zm9ybURh
dGEuaCAqLywKKwkJCQkzNzFGNEZGQjBEMjVFN0YzMDBFQ0UwRDUgLyogRm9udFJhbmdlcy5jcHAg
Ki8sCisJCQkJMzcxRjRGRkEwRDI1RTdGMzAwRUNFMEQ1IC8qIEZvbnRSYW5nZXMuaCAqLywKIAkJ
CQkzN0FDQ0U0MTBEQTI5ODBGMDA4OUU2MDIgLyogRm9udFJlbmRlcmluZ01vZGUuaCAqLywKIAkJ
CQlCMkMzREE1QTBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udFNlbGVjdG9yLmggKi8sCiAJCQkJMzcy
MDIxOTgxMDYyMTNDNjAwRjI1QzRCIC8qIEZvbnRTbW9vdGhpbmdNb2RlLmggKi8sCkBAIC0yMDU0
NiwxMiArMjA1NTAsOCBAQAogCQkJCUJDQUI0MTgwMTNFMzU2RTgwMEQ4QUFGMyAvKiBSZWdpb24u
aCAqLywKIAkJCQlBNzNGOTVGQzEyQzk3QkZFMDAzMUFBRjkgLyogUm91bmRlZFJlY3QuY3BwICov
LAogCQkJCUE3M0Y5NUZEMTJDOTdCRkUwMDMxQUFGOSAvKiBSb3VuZGVkUmVjdC5oICovLAotCQkJ
CTM3MUY0RkZCMEQyNUU3RjMwMEVDRTBENSAvKiBGb250UmFuZ2VzLmNwcCAqLywKLQkJCQkzNzFG
NEZGQTBEMjVFN0YzMDBFQ0UwRDUgLyogRm9udFJhbmdlcy5oICovLAogCQkJCTBGM0RENDREMTJG
NUVBMUIwMDBEOTE5MCAvKiBTaGFkb3dCbHVyLmNwcCAqLywKIAkJCQkwRjNERDQ0RTEyRjVFQTFC
MDAwRDkxOTAgLyogU2hhZG93Qmx1ci5oICovLAotCQkJCUIyQzNEQTUzMEQwMDZDRDYwMEVGNkYy
NiAvKiBTaW1wbGVGb250RGF0YS5jcHAgKi8sCi0JCQkJQjJDM0RBNTQwRDAwNkNENjAwRUY2RjI2
IC8qIFNpbXBsZUZvbnREYXRhLmggKi8sCiAJCQkJQ0Q2NDFFQjIxODE4RjVFRDAwRUU0QzQxIC8q
IFNvdXJjZUJ1ZmZlclByaXZhdGUuaCAqLywKIAkJCQlDREM4QjVBQzE4MDRBRTVEMDAxNkU2ODUg
LyogU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudC5oICovLAogCQkJCUIyMzU0MEYwMEQwMDc4MkUw
MDIzODJGQSAvKiBTdHJpbmdUcnVuY2F0b3IuY3BwICovLApAQCAtMjYwMDIsNyArMjYwMDIsNyBA
QAogCQkJCTFBNEE5NTRFMEI0RURDQ0IwMDJEOEMzQyAvKiBTaGFyZWRCdWZmZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTk3QjFGMDJGMTNCMDI1RDIwMEY1MTAzRiAvKiBTaGFyZWRCdWZmZXJDaHVu
a1JlYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlFQTMwOTlFQjc4QzAwNTZFNTgxIC8q
IFNoYXJlZFRpbWVyLmggaW4gSGVhZGVycyAqLywKLQkJCQlCMkMzREE2NTBEMDA2Q0Q2MDBFRjZG
MjYgLyogU2ltcGxlRm9udERhdGEuaCBpbiBIZWFkZXJzICovLAorCQkJCUIyQzNEQTY1MEQwMDZD
RDYwMEVGNkYyNiAvKiBGb250LmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDg5NDRBMzE4MEI1N0Q4
MDBGMTY1RDggLyogU2ltcGxlTGluZUxheW91dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTRFOUIx
MUQxODE0NTY5QzAwM0FDQ0RGIC8qIFNpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUU0RTlCMTE5MTgxMDkxNkYwMDNBQ0NERiAvKiBTaW1wbGVMaW5lTGF5b3V0
UmVzb2x2ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMjc4MTksMTUgKzI3ODE5LDE1IEBACiAJCQkJ
QjJDM0RBNjIwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYWNoZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkzNzI3REZENTE0MkFBRTQ1MDBENDQ5Q0IgLyogRm9udENhY2hlSU9TLm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQjJBRkZDN0MwRDAwQTVDMTAwMzAwNzREIC8qIEZvbnRDYWNoZU1hYy5tbSBp
biBTb3VyY2VzICovLAotCQkJCTM3QzIzNjBCMTA5N0VERUQwMEVGOUY3MiAvKiBGb250Q29tcGxl
eFRleHRNYWMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzdDMjM2MEIxMDk3RURFRDAwRUY5Rjcy
IC8qIEZvbnRDYXNjYWRlQ29tcGxleFRleHRNYWMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJB
RkZDN0QwRDAwQTVDMTAwMzAwNzREIC8qIEZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMzdBQ0NGNjkwREE0MTRFNzAwODlFNjAyIC8qIEZvbnREZXNjcmlwdGlv
bi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk3MjYyNkUwMjBFRjAyMkZFMDBBMDdFMjAgLyogRm9u
dEZhc3RQYXRoLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTcyNjI2RTAyMEVGMDIyRkUwMEEwN0Uy
MCAvKiBGb250Q2FzY2FkZUZhc3RQYXRoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTRBNkU5RkM3
MTNDMTdENTcwMDQ2QTdGOCAvKiBGb250RmVhdHVyZVNldHRpbmdzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUU0NEVFM0E4MTc1NzdFQkQwMEVFRThDRiAvKiBGb250R2VuZXJpY0ZhbWlsaWVzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUIyQzNEQTY3MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250R2x5
cGhzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZEOTZDOTk3MTk4MkZCREYwMDg2RTE1NiAvKiBG
b250TG9hZGVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUIyQUZGQzgwMEQwMEE1QzEwMDMwMDc0
RCAvKiBGb250TWFjLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJQjJBRkZDODAwRDAwQTVDMTAwMzAw
NzREIC8qIEZvbnRDYXNjYWRlTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJODRCNjI2ODUxMzMx
MzhGOTAwOTVBNDg5IC8qIEZvbnRQbGF0Zm9ybURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QjUzMjBENkMxMjJBMjRFOTAwMkQxNDQwIC8qIEZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbSBpbiBT
b3VyY2VzICovLAogCQkJCUM1ODM2MUFBMTc0NDUyM0YwMDE3MzUxMSAvKiBGb250U2VydmljZXNJ
T1MubW0gaW4gU291cmNlcyAqLywKQEAgLTI5NDMyLDEwICsyOTQzMiwxMCBAQAogCQkJCTFBNEE5
NTUyMEI0RURDRkYwMDJEOEMzQyAvKiBTaGFyZWRCdWZmZXJNYWMubW0gaW4gU291cmNlcyAqLywK
IAkJCQlFNDUzOTA0NjBFQUZENjM3MDAzNjk1QzggLyogU2hhcmVkVGltZXJJT1MubW0gaW4gU291
cmNlcyAqLywKIAkJCQk5MzMwOUVBMjA5OUVCNzhDMDA1NkU1ODEgLyogU2hhcmVkVGltZXJNYWMu
bW0gaW4gU291cmNlcyAqLywKLQkJCQlCMkMzREE2NDBEMDA2Q0Q2MDBFRjZGMjYgLyogU2ltcGxl
Rm9udERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMTYzRTg4RjcxMThBMzlEMjAwRUQ5MjMx
IC8qIFNpbXBsZUZvbnREYXRhQ29yZVRleHQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMzdFNjU5
NTAxNjNCMTBDMjAwRUI0NTc0IC8qIFNpbXBsZUZvbnREYXRhSU9TLm1tIGluIFNvdXJjZXMgKi8s
Ci0JCQkJQjJBRkZDN0YwRDAwQTVDMTAwMzAwNzREIC8qIFNpbXBsZUZvbnREYXRhTWFjLm1tIGlu
IFNvdXJjZXMgKi8sCisJCQkJQjJDM0RBNjQwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnQuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMTYzRTg4RjcxMThBMzlEMjAwRUQ5MjMxIC8qIEZvbnRDb3JlVGV4
dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzN0U2NTk1MDE2M0IxMEMyMDBFQjQ1NzQgLyogRm9u
dElPUy5tbSBpbiBTb3VyY2VzICovLAorCQkJCUIyQUZGQzdGMEQwMEE1QzEwMDMwMDc0RCAvKiBG
b250TWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRTQ4OTQ0QTIxODBCNTdEODAwRjE2NUQ4IC8q
IFNpbXBsZUxpbmVMYXlvdXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTRFOUIxMUIxODE0NTY5
MjAwM0FDQ0RGIC8qIFNpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQzVBMUVBN0MxNTJCQ0YwNDAwNEQwMEI2IC8qIFNpbXBsaWZ5TWFya3VwQ29tbWFuZC5j
cHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9z
L1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
SU9TLm1tCShyZXZpc2lvbiAxNzg1MTApCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQkod29ya2luZyBjb3B5KQpA
QCAtMTc1OCw3ICsxNzU4LDcgQEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVTdHJpbmdTZXRTdHls
ZShOUwogICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwogICAgIAog
ICAgIC8vIHNldCBiYXNpYyBmb250IGluZm8KLSAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldEZvbnQo
YXR0clN0cmluZywgc3R5bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXRDVEZv
bnQoKSwgcmFuZ2UpOworICAgIEFYQXR0cmlidXRlU3RyaW5nU2V0Rm9udChhdHRyU3RyaW5nLCBz
dHlsZS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCkuZ2V0Q1RGb250KCksIHJhbmdlKTsKICAg
ICAgICAgICAgICAgICAKICAgICBpbnQgZGVjb3IgPSBzdHlsZS50ZXh0RGVjb3JhdGlvbnNJbkVm
ZmVjdCgpOwogICAgIGlmICgoZGVjb3IgJiAoVGV4dERlY29yYXRpb25VbmRlcmxpbmUgfCBUZXh0
RGVjb3JhdGlvbkxpbmVUaHJvdWdoKSkgIT0gMCkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyQmFzZS5tbQkocmV2aXNpb24gMTc4NTEwKQorKysgU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0Niw3IEBACiAjaW1wb3J0ICJDaHJvbWVDbGllbnQu
aCIKICNpbXBvcnQgIkNvbG9yTWFjLmgiCiAjaW1wb3J0ICJDb250ZXh0TWVudUNvbnRyb2xsZXIu
aCIKKyNpbXBvcnQgIkZvbnQuaCIKICNpbXBvcnQgIkZvbnRDYXNjYWRlLmgiCiAjaW1wb3J0ICJG
cmFtZS5oIgogI2ltcG9ydCAiRnJhbWVMb2FkZXJDbGllbnQuaCIKQEAgLTYzLDcgKzY0LDYgQEAK
ICNpbXBvcnQgIlJlbmRlclZpZXcuaCIKICNpbXBvcnQgIlJlbmRlcldpZGdldC5oIgogI2ltcG9y
dCAiU2Nyb2xsVmlldy5oIgotI2ltcG9ydCAiU2ltcGxlRm9udERhdGEuaCIKICNpbXBvcnQgIlRl
eHRDaGVja2VyQ2xpZW50LmgiCiAjaW1wb3J0ICJUZXh0Q2hlY2tpbmdIZWxwZXIuaCIKICNpbXBv
cnQgIlZpc2libGVVbml0cy5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9t
YWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJNYWMubW0JKHJldmlzaW9uIDE3ODUxMCkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC00Nyw2ICs0Nyw3IEBACiAjaW1wb3J0ICJDb2xvck1hYy5oIgogI2ltcG9ydCAiQ29udGV4
dE1lbnVDb250cm9sbGVyLmgiCiAjaW1wb3J0ICJFZGl0b3IuaCIKKyNpbXBvcnQgIkZvbnQuaCIK
ICNpbXBvcnQgIkZvbnRDYXNjYWRlLmgiCiAjaW1wb3J0ICJGcmFtZUxvYWRlckNsaWVudC5oIgog
I2ltcG9ydCAiRnJhbWVTZWxlY3Rpb24uaCIKQEAgLTY0LDcgKzY1LDYgQEAKICNpbXBvcnQgIlJl
bmRlclZpZXcuaCIKICNpbXBvcnQgIlJlbmRlcldpZGdldC5oIgogI2ltcG9ydCAiU2Nyb2xsVmll
dy5oIgotI2ltcG9ydCAiU2ltcGxlRm9udERhdGEuaCIKICNpbXBvcnQgIlRleHRDaGVja2VyQ2xp
ZW50LmgiCiAjaW1wb3J0ICJUZXh0Q2hlY2tpbmdIZWxwZXIuaCIKICNpbXBvcnQgIlRleHRJdGVy
YXRvci5oIgpAQCAtODQ4LDcgKzg0OCw3IEBAIHN0YXRpYyB2b2lkIEFYQXR0cmlidXRlU3RyaW5n
U2V0U3R5bGUoTlMKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUgPSByZW5kZXJlci0+c3R5
bGUoKTsKICAgICAKICAgICAvLyBzZXQgYmFzaWMgZm9udCBpbmZvCi0gICAgQVhBdHRyaWJ1dGVT
dHJpbmdTZXRGb250KGF0dHJTdHJpbmcsIE5TQWNjZXNzaWJpbGl0eUZvbnRUZXh0QXR0cmlidXRl
LCBzdHlsZS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmdldE5TRm9udCgpLCByYW5n
ZSk7CisgICAgQVhBdHRyaWJ1dGVTdHJpbmdTZXRGb250KGF0dHJTdHJpbmcsIE5TQWNjZXNzaWJp
bGl0eUZvbnRUZXh0QXR0cmlidXRlLCBzdHlsZS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCku
Z2V0TlNGb250KCksIHJhbmdlKTsKICAgICAKICAgICAvLyBzZXQgYmFzaWMgY29sb3JzCiAgICAg
QVhBdHRyaWJ1dGVTdHJpbmdTZXRDb2xvcihhdHRyU3RyaW5nLCBOU0FjY2Vzc2liaWxpdHlGb3Jl
Z3JvdW5kQ29sb3JUZXh0QXR0cmlidXRlLCBuc0NvbG9yKHN0eWxlLnZpc2l0ZWREZXBlbmRlbnRD
b2xvcihDU1NQcm9wZXJ0eUNvbG9yKSksIHJhbmdlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL29iamMvRE9NLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L29iamMvRE9NLm1tCShyZXZpc2lvbiAxNzg1MTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9vYmpjL0RPTS5tbQkod29ya2luZyBjb3B5KQpAQCAtNjY5LDcgKzY2OSw3IEBAIC0gKE5TRm9u
dCAqKV9mb250CiAgICAgYXV0byByZW5kZXJlciA9IGNvcmUoc2VsZiktPnJlbmRlcmVyKCk7CiAg
ICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4gcmVuZGVy
ZXItPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXROU0ZvbnQoKTsK
KyAgICByZXR1cm4gcmVuZGVyZXItPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgp
LmdldE5TRm9udCgpOwogfQogI2Vsc2UKIC0gKENURm9udFJlZilfZm9udApAQCAtNjc3LDcgKzY3
Nyw3IEBAIC0gKENURm9udFJlZilfZm9udAogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBj
b3JlKHNlbGYpLT5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVy
biBuaWw7Ci0gICAgcmV0dXJuIHJlbmRlcmVyLT5zdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFy
eUZvbnREYXRhKCkuZ2V0Q1RGb250KCk7CisgICAgcmV0dXJuIHJlbmRlcmVyLT5zdHlsZSgpLmZv
bnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKS5nZXRDVEZvbnQoKTsKIH0KICNlbmRpZgogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEwICsz
MCwxMCBAQAogI2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1NlZ21l
bnRlZEZvbnRGYWNlLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGb250Lmgi
CiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiRm9udExvYWRlci5oIgog
I2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKLSNpbmNsdWRlICJTaW1wbGVGb250
RGF0YS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTEwOCw3ICsxMDgsNyBAQCB2b2lk
IENTU0ZvbnRGYWNlOjpmb250TG9hZGVkKENTU0ZvbnRGYWNlCiAjZW5kaWYKIH0KIAotUGFzc1Jl
ZlB0cjxTaW1wbGVGb250RGF0YT4gQ1NTRm9udEZhY2U6OmdldEZvbnREYXRhKGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3lu
dGhldGljSXRhbGljKQorUmVmUHRyPEZvbnQ+IENTU0ZvbnRGYWNlOjpmb250KGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3lu
dGhldGljSXRhbGljKQogewogICAgIG1fYWN0aXZlU291cmNlID0gMDsKICAgICBpZiAoIWlzVmFs
aWQoKSkKQEAgLTEyNCw3ICsxMjQsNyBAQCBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBDU1NG
b250RmFjZTo6CiAKICAgICBzaXplX3Qgc2l6ZSA9IG1fc291cmNlcy5zaXplKCk7CiAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgaWYgKFJlZlB0cjxTaW1w
bGVGb250RGF0YT4gcmVzdWx0ID0gbV9zb3VyY2VzW2ldLT5nZXRGb250RGF0YShmb250RGVzY3Jp
cHRpb24sIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYywgZm9udFNlbGVjdG9yKSkgewor
ICAgICAgICBpZiAoUmVmUHRyPEZvbnQ+IHJlc3VsdCA9IG1fc291cmNlc1tpXS0+Zm9udChmb250
RGVzY3JpcHRpb24sIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYywgZm9udFNlbGVjdG9y
KSkgewogICAgICAgICAgICAgbV9hY3RpdmVTb3VyY2UgPSBtX3NvdXJjZXNbaV0uZ2V0KCk7CiAj
aWYgRU5BQkxFKEZPTlRfTE9BRF9FVkVOVFMpCiAgICAgICAgICAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5mb250TG9hZEV2ZW50c0VuYWJsZWQoKSAmJiBt
X2xvYWRTdGF0ZSA9PSBMb2FkaW5nICYmIG1fc291cmNlc1tpXS0+aXNMb2FkZWQoKSkgewpJbmRl
eDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmgJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ1NTU2VnbWVudGVkRm9udEZhY2U7CiBjbGFz
cyBGb250RGVzY3JpcHRpb247Ci1jbGFzcyBTaW1wbGVGb250RGF0YTsKK2NsYXNzIEZvbnQ7CiAK
IGNsYXNzIENTU0ZvbnRGYWNlIDogcHVibGljIFJlZkNvdW50ZWQ8Q1NTRm9udEZhY2U+IHsKIHB1
YmxpYzoKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBmb250TG9hZGVkKENT
U0ZvbnRGYWNlU291cmNlKik7CiAKLSAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBnZXRG
b250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wg
c3ludGhldGljSXRhbGljKTsKKyAgICBSZWZQdHI8Rm9udD4gZm9udChjb25zdCBGb250RGVzY3Jp
cHRpb24mLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljKTsKIAogICAg
IHN0cnVjdCBVbmljb2RlUmFuZ2UgewogICAgICAgICBVbmljb2RlUmFuZ2UoVUNoYXIzMiBmcm9t
LCBVQ2hhcjMyIHRvKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291cmNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2Uu
Y3BwCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VT
b3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw5ICszMiw5IEBACiAjaW5jbHVkZSAiQ2Fj
aGVkUmVzb3VyY2VMb2FkZXIuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkVs
ZW1lbnRJdGVyYXRvci5oIgorI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGb250Q2FjaGUu
aCIKICNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0
YS5oIgogCiAjaWYgRU5BQkxFKFNWR19PVEZfQ09OVkVSVEVSKQogI2luY2x1ZGUgIkZvbnRDdXN0
b21QbGF0Zm9ybURhdGEuaCIKQEAgLTc0LDEwICs3NCwxMCBAQCBDU1NGb250RmFjZVNvdXJjZTo6
fkNTU0ZvbnRGYWNlU291cmNlKCkKIAogdm9pZCBDU1NGb250RmFjZVNvdXJjZTo6cHJ1bmVUYWJs
ZSgpCiB7Ci0gICAgaWYgKG1fZm9udERhdGFUYWJsZS5pc0VtcHR5KCkpCisgICAgaWYgKG1fZm9u
dFRhYmxlLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9mb250RGF0YVRhYmxl
LmNsZWFyKCk7CisgICAgbV9mb250VGFibGUuY2xlYXIoKTsKIH0KIAogYm9vbCBDU1NGb250RmFj
ZVNvdXJjZTo6aXNMb2FkZWQoKSBjb25zdApAQCAtMTAxLDcgKzEwMSw3IEBAIHZvaWQgQ1NTRm9u
dEZhY2VTb3VyY2U6OmZvbnRMb2FkZWQoQ2FjaGUKICAgICAgICAgbV9mYWNlLT5mb250TG9hZGVk
KHRoaXMpOwogfQogCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBDU1NGb250RmFjZVNvdXJj
ZTo6Z2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGJv
b2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMsIENTU0ZvbnRTZWxlY3Rvciog
Zm9udFNlbGVjdG9yKQorUmVmUHRyPEZvbnQ+IENTU0ZvbnRGYWNlU291cmNlOjpmb250KGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBib29sIHN5bnRoZXRpY0JvbGQsIGJv
b2wgc3ludGhldGljSXRhbGljLCBDU1NGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvcikKIHsKICAg
ICAvLyBJZiB0aGUgZm9udCBoYXNuJ3QgbG9hZGVkIG9yIGFuIGVycm9yIG9jY3VycmVkLCB0aGVu
IHdlJ3ZlIGdvdCBub3RoaW5nLgogICAgIGlmICghaXNWYWxpZCgpKQpAQCAtMTEyLDE4ICsxMTIs
MTcgQEAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gQ1NTRm9udEZhY2VTbwogICAgICAgICAg
ICAgJiYgIW1fc3ZnRm9udEZhY2VFbGVtZW50CiAjZW5kaWYKICAgICApIHsKLSAgICAgICAgLy8g
V2UncmUgbG9jYWwuIEp1c3QgcmV0dXJuIGEgU2ltcGxlRm9udERhdGEgZnJvbSB0aGUgbm9ybWFs
IGNhY2hlLgorICAgICAgICAvLyBXZSdyZSBsb2NhbC4gSnVzdCByZXR1cm4gYSBGb250IGZyb20g
dGhlIG5vcm1hbCBjYWNoZS4KICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBjaGVjayBhbHRl
cm5hdGUgZm9udCBmYW1pbHkgbmFtZXMgaGVyZSwgc28gcGFzcyB0cnVlIGFzIHRoZSBjaGVja2lu
Z0FsdGVybmF0ZU5hbWUgcGFyYW1ldGVyLgogICAgICAgICByZXR1cm4gZm9udENhY2hlKCkuZm9u
dEZvckZhbWlseShmb250RGVzY3JpcHRpb24sIG1fc3RyaW5nLCB0cnVlKTsKICAgICB9CiAKLSAg
ICAvLyBTZWUgaWYgd2UgaGF2ZSBhIG1hcHBpbmcgaW4gb3VyIEZvbnREYXRhIGNhY2hlLgogICAg
IHVuc2lnbmVkIGhhc2hLZXkgPSAoZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCkg
KyAxKSA8PCA1IHwgZm9udERlc2NyaXB0aW9uLndpZHRoVmFyaWFudCgpIDw8IDMKICAgICAgICAg
ICAgICAgICAgICAgICAgfCAoZm9udERlc2NyaXB0aW9uLm9yaWVudGF0aW9uKCkgPT0gVmVydGlj
YWwgPyA0IDogMCkgfCAoc3ludGhldGljQm9sZCA/IDIgOiAwKSB8IChzeW50aGV0aWNJdGFsaWMg
PyAxIDogMCk7CiAKLSAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IGZvbnREYXRhID0gbV9mb250
RGF0YVRhYmxlLmFkZChoYXNoS2V5LCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7Ci0gICAgaWYg
KGZvbnREYXRhKQotICAgICAgICByZXR1cm4gZm9udERhdGEucmVsZWFzZSgpOworICAgIFJlZlB0
cjxGb250PiBmb250ID0gbV9mb250VGFibGUuYWRkKGhhc2hLZXksIG51bGxwdHIpLml0ZXJhdG9y
LT52YWx1ZTsKKyAgICBpZiAoZm9udCkKKyAgICAgICAgcmV0dXJuIGZvbnQucmVsZWFzZSgpOwog
CiAgICAgLy8gSWYgd2UgYXJlIHN0aWxsIGxvYWRpbmcsIHRoZW4gd2UgbGV0IHRoZSBzeXN0ZW0g
cGljayBhIGZvbnQuCiAgICAgaWYgKGlzTG9hZGVkKCkpIHsKQEAgLTEzNiw3ICsxMzUsNyBAQCBQ
YXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBDU1NGb250RmFjZVNvCiAgICAgICAgICAgICBpZiAo
IW1fZm9udC0+ZW5zdXJlQ3VzdG9tRm9udERhdGEoaGFzRXh0ZXJuYWxTVkdGb250LCBtX3N0cmlu
ZykpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgICAgIGZvbnRE
YXRhID0gbV9mb250LT5nZXRGb250RGF0YShmb250RGVzY3JpcHRpb24sIG1fc3RyaW5nLCBzeW50
aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMsIGhhc0V4dGVybmFsU1ZHRm9udCk7CisgICAgICAg
ICAgICBmb250ID0gbV9mb250LT5jcmVhdGVGb250KGZvbnREZXNjcmlwdGlvbiwgbV9zdHJpbmcs
IHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYywgaGFzRXh0ZXJuYWxTVkdGb250KTsKICAg
ICAgICAgfSBlbHNlIHsKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQogICAgICAgICAgICAgLy8gSW4t
RG9jdW1lbnQgU1ZHIEZvbnRzCkBAIC0xNTIsOSArMTUxLDkgQEAgUGFzc1JlZlB0cjxTaW1wbGVG
b250RGF0YT4gQ1NTRm9udEZhY2VTbwogICAgICAgICAgICAgICAgIGlmICghbV9nZW5lcmF0ZWRP
VEZCdWZmZXIpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAg
ICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxGb250Q3VzdG9tUGxhdGZvcm1EYXRhPiBjdXN0b21QbGF0
Zm9ybURhdGEgPSBjcmVhdGVGb250Q3VzdG9tUGxhdGZvcm1EYXRhKCptX2dlbmVyYXRlZE9URkJ1
ZmZlcik7Ci0gICAgICAgICAgICAgICAgZm9udERhdGEgPSBTaW1wbGVGb250RGF0YTo6Y3JlYXRl
KGN1c3RvbVBsYXRmb3JtRGF0YS0+Zm9udFBsYXRmb3JtRGF0YShzdGF0aWNfY2FzdDxpbnQ+KGZv
bnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpKSwgc3ludGhldGljQm9sZCwgc3ludGhl
dGljSXRhbGljLCBmb250RGVzY3JpcHRpb24ub3JpZW50YXRpb24oKSwgZm9udERlc2NyaXB0aW9u
LndpZHRoVmFyaWFudCgpLCBmb250RGVzY3JpcHRpb24ucmVuZGVyaW5nTW9kZSgpKSwgdHJ1ZSwg
ZmFsc2UpOworICAgICAgICAgICAgICAgIGZvbnQgPSBGb250OjpjcmVhdGUoY3VzdG9tUGxhdGZv
cm1EYXRhLT5mb250UGxhdGZvcm1EYXRhKHN0YXRpY19jYXN0PGludD4oZm9udERlc2NyaXB0aW9u
LmNvbXB1dGVkUGl4ZWxTaXplKCkpLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMsIGZv
bnREZXNjcmlwdGlvbi5vcmllbnRhdGlvbigpLCBmb250RGVzY3JpcHRpb24ud2lkdGhWYXJpYW50
KCksIGZvbnREZXNjcmlwdGlvbi5yZW5kZXJpbmdNb2RlKCkpLCB0cnVlLCBmYWxzZSk7CiAjZWxz
ZQotICAgICAgICAgICAgICAgIGZvbnREYXRhID0gU2ltcGxlRm9udERhdGE6OmNyZWF0ZShzdGQ6
Om1ha2VfdW5pcXVlPFNWR0ZvbnREYXRhPihtX3N2Z0ZvbnRGYWNlRWxlbWVudC5nZXQoKSksIGZv
bnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0
aWNJdGFsaWMpOworICAgICAgICAgICAgICAgIGZvbnQgPSBGb250OjpjcmVhdGUoc3RkOjptYWtl
X3VuaXF1ZTxTVkdGb250RGF0YT4obV9zdmdGb250RmFjZUVsZW1lbnQuZ2V0KCkpLCBmb250RGVz
Y3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSwgc3ludGhldGljQm9sZCwgc3ludGhldGljSXRh
bGljKTsKICNlbmRpZgogICAgICAgICAgICAgfQogI2VuZGlmCkBAIC0xNjQsMTIgKzE2MywxMiBA
QCBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBDU1NGb250RmFjZVNvCiAgICAgICAgIC8vIGFu
ZCB0aGUgbG9hZGVyIG1heSBpbnZva2UgYXJiaXRyYXJ5IGRlbGVnYXRlIG9yIGV2ZW50IGhhbmRs
ZXIgY29kZS4KICAgICAgICAgZm9udFNlbGVjdG9yLT5iZWdpbkxvYWRpbmdGb250U29vbihtX2Zv
bnQuZ2V0KCkpOwogCi0gICAgICAgIFJlZjxTaW1wbGVGb250RGF0YT4gcGxhY2Vob2xkZXJGb250
ID0gZm9udENhY2hlKCkubGFzdFJlc29ydEZhbGxiYWNrRm9udChmb250RGVzY3JpcHRpb24pOwot
ICAgICAgICBSZWY8U2ltcGxlRm9udERhdGE+IHBsYWNlaG9sZGVyRm9udENvcHlJbkxvYWRpbmdT
dGF0ZSA9IFNpbXBsZUZvbnREYXRhOjpjcmVhdGUocGxhY2Vob2xkZXJGb250LT5wbGF0Zm9ybURh
dGEoKSwgdHJ1ZSwgdHJ1ZSk7CisgICAgICAgIFJlZjxGb250PiBwbGFjZWhvbGRlckZvbnQgPSBm
b250Q2FjaGUoKS5sYXN0UmVzb3J0RmFsbGJhY2tGb250KGZvbnREZXNjcmlwdGlvbik7CisgICAg
ICAgIFJlZjxGb250PiBwbGFjZWhvbGRlckZvbnRDb3B5SW5Mb2FkaW5nU3RhdGUgPSBGb250Ojpj
cmVhdGUocGxhY2Vob2xkZXJGb250LT5wbGF0Zm9ybURhdGEoKSwgdHJ1ZSwgdHJ1ZSk7CiAgICAg
ICAgIHJldHVybiBXVEY6Om1vdmUocGxhY2Vob2xkZXJGb250Q29weUluTG9hZGluZ1N0YXRlKTsK
ICAgICB9CiAKLSAgICByZXR1cm4gZm9udERhdGEucmVsZWFzZSgpOworICAgIHJldHVybiBmb250
LnJlbGVhc2UoKTsKIH0KIAogI2lmIEVOQUJMRShGT05UX0xPQURfRVZFTlRTKQpJbmRleDogU291
cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291cmNlLmgJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
Miw4ICs0Miw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENhY2hlZEZvbnQ7CiBjbGFz
cyBDU1NGb250RmFjZTsKIGNsYXNzIENTU0ZvbnRTZWxlY3RvcjsKK2NsYXNzIEZvbnQ7CiBjbGFz
cyBGb250RGVzY3JpcHRpb247Ci1jbGFzcyBTaW1wbGVGb250RGF0YTsKIAogY2xhc3MgQ1NTRm9u
dEZhY2VTb3VyY2UgZmluYWwgOiBwdWJsaWMgQ2FjaGVkRm9udENsaWVudCB7CiBwdWJsaWM6CkBA
IC01OSw3ICs1OSw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBmb250TG9hZGVkKENh
Y2hlZEZvbnQqKSBvdmVycmlkZTsKIAotICAgIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IGdl
dEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGJvb2wgc3ludGhldGljQm9sZCwgYm9v
bCBzeW50aGV0aWNJdGFsaWMsIENTU0ZvbnRTZWxlY3RvciopOworICAgIFJlZlB0cjxGb250PiBm
b250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50
aGV0aWNJdGFsaWMsIENTU0ZvbnRTZWxlY3RvciopOwogCiAgICAgdm9pZCBwcnVuZVRhYmxlKCk7
CiAKQEAgLTgxLDcgKzgxLDcgQEAgcHJpdmF0ZToKICAgICBBdG9taWNTdHJpbmcgbV9zdHJpbmc7
IC8vIFVSSSBmb3IgcmVtb3RlLCBidWlsdC1pbiBmb250IG5hbWUgZm9yIGxvY2FsLgogICAgIENh
Y2hlZFJlc291cmNlSGFuZGxlPENhY2hlZEZvbnQ+IG1fZm9udDsgLy8gRm9yIHJlbW90ZSBmb250
cywgYSBwb2ludGVyIHRvIG91ciBjYWNoZWQgcmVzb3VyY2UuCiAgICAgQ1NTRm9udEZhY2UqIG1f
ZmFjZTsgLy8gT3VyIG93bmluZyBmb250IGZhY2UuCi0gICAgSGFzaE1hcDx1bnNpZ25lZCwgUmVm
UHRyPFNpbXBsZUZvbnREYXRhPj4gbV9mb250RGF0YVRhYmxlOyAvLyBUaGUgaGFzaCBrZXkgaXMg
Y29tcG9zZWQgb2Ygc2l6ZSBzeW50aGV0aWMgc3R5bGVzLgorICAgIEhhc2hNYXA8dW5zaWduZWQs
IFJlZlB0cjxGb250Pj4gbV9mb250VGFibGU7IC8vIFRoZSBoYXNoIGtleSBpcyBjb21wb3NlZCBv
ZiBzaXplIHN5bnRoZXRpYyBzdHlsZXMuCiAKICNpZiBFTkFCTEUoU1ZHX09URl9DT05WRVJURVIp
CiAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9nZW5lcmF0ZWRPVEZCdWZmZXI7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysg
U291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQwLDEzICs0MCwxMyBAQAogI2luY2x1ZGUgIkNTU1ZhbHVlTGlzdC5oIgogI2luY2x1ZGUgIkNh
Y2hlZFJlc291cmNlTG9hZGVyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJG
b250LmgiCiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNs
dWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIlNWR0ZvbnRGYWNlRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJTaW1w
bGVGb250RGF0YS5oIgogI2luY2x1ZGUgIlN0eWxlUHJvcGVydGllcy5oIgogI2luY2x1ZGUgIlN0
eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJTdHlsZVJ1bGUuaCIKQEAgLTYxMiw3ICs2MTIsNyBA
QCBib29sIENTU0ZvbnRTZWxlY3Rvcjo6cmVzb2x2ZXNGYW1pbHlGb3IoCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1zaXplX3QgQ1NTRm9udFNlbGVjdG9yOjpmYWxsYmFja0ZvbnREYXRhQ291bnQo
KQorc2l6ZV90IENTU0ZvbnRTZWxlY3Rvcjo6ZmFsbGJhY2tGb250Q291bnQoKQogewogICAgIGlm
ICghbV9kb2N1bWVudCkKICAgICAgICAgcmV0dXJuIDA7CkBAIC02MjMsNyArNjIzLDcgQEAgc2l6
ZV90IENTU0ZvbnRTZWxlY3Rvcjo6ZmFsbGJhY2tGb250RGF0YQogICAgIHJldHVybiAwOwogfQog
Ci1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBDU1NGb250U2VsZWN0b3I6OmZhbGxiYWNrRm9u
dERhdGFBdChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgc2l6ZV90IGlu
ZGV4KQorUGFzc1JlZlB0cjxGb250PiBDU1NGb250U2VsZWN0b3I6OmZhbGxiYWNrRm9udEF0KGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBzaXplX3QgaW5kZXgpCiB7CiAg
ICAgQVNTRVJUX1VOVVNFRChpbmRleCwgIWluZGV4KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0ZvbnRTZWxlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NGb250U2VsZWN0b3IuaAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0ZvbnRTZWxlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw4ICsyNyw4IEBACiAjZGVm
aW5lIENTU0ZvbnRTZWxlY3Rvcl9oCiAKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUhhbmRsZS5o
IgorI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGb250U2VsZWN0b3IuaCIKLSNpbmNsdWRl
ICJTaW1wbGVGb250RGF0YS5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8bWVtb3J5
PgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CkBAIC01OSw4ICs1OSw4IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIHVuc2lnbmVkIHVuaXF1ZUlkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV91
bmlxdWVJZDsgfQogCiAgICAgdmlydHVhbCBGb250UmFuZ2VzIGZvbnRSYW5nZXNGb3JGYW1pbHko
Y29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbWljU3RyaW5nJikgb3ZlcnJpZGU7Ci0g
ICAgdmlydHVhbCBzaXplX3QgZmFsbGJhY2tGb250RGF0YUNvdW50KCkgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBmYWxsYmFja0ZvbnREYXRhQXQoY29u
c3QgRm9udERlc2NyaXB0aW9uJiwgc2l6ZV90KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHNpemVf
dCBmYWxsYmFja0ZvbnRDb3VudCgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxG
b250PiBmYWxsYmFja0ZvbnRBdChjb25zdCBGb250RGVzY3JpcHRpb24mLCBzaXplX3QpIG92ZXJy
aWRlOwogICAgIENTU1NlZ21lbnRlZEZvbnRGYWNlKiBnZXRGb250RmFjZShjb25zdCBGb250RGVz
Y3JpcHRpb24mLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSk7CiAKICAgICB2aXJ0dWFsIGJv
b2wgcmVzb2x2ZXNGYW1pbHlGb3IoY29uc3QgRm9udERlc2NyaXB0aW9uJikgY29uc3Qgb3ZlcnJp
ZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5jcHAJ
KHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWdtZW50ZWRGb250
RmFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDkgKzMwLDkgQEAKICNpbmNsdWRlICJDU1NG
b250RmFjZVNvdXJjZS5oIgogI2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgogI2luY2x1ZGUg
IkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlv
bi5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKLSNpbmNsdWRlICJTaW1w
bGVGb250RGF0YS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTkwLDIxICs5MCwyMSBA
QCB2b2lkIENTU1NlZ21lbnRlZEZvbnRGYWNlOjphcHBlbmRGb250RmFjCiAgICAgbV9mb250RmFj
ZXMuYXBwZW5kKGZvbnRGYWNlKTsKIH0KIAotc3RhdGljIHZvaWQgYXBwZW5kRm9udERhdGFXaXRo
SW52YWxpZFVuaWNvZGVSYW5nZUlmTG9hZGluZyhGb250UmFuZ2VzJiByYW5nZXMsIFJlZjxTaW1w
bGVGb250RGF0YT4mJiBmb250RGF0YSwgY29uc3QgVmVjdG9yPENTU0ZvbnRGYWNlOjpVbmljb2Rl
UmFuZ2U+JiB1bmljb2RlUmFuZ2VzKQorc3RhdGljIHZvaWQgYXBwZW5kRm9udFdpdGhJbnZhbGlk
VW5pY29kZVJhbmdlSWZMb2FkaW5nKEZvbnRSYW5nZXMmIHJhbmdlcywgUmVmPEZvbnQ+JiYgZm9u
dCwgY29uc3QgVmVjdG9yPENTU0ZvbnRGYWNlOjpVbmljb2RlUmFuZ2U+JiB1bmljb2RlUmFuZ2Vz
KQogewotICAgIGlmIChmb250RGF0YS0+aXNMb2FkaW5nKCkpIHsKLSAgICAgICAgcmFuZ2VzLmFw
cGVuZFJhbmdlKEZvbnRSYW5nZXM6OlJhbmdlKDAsIDAsIFdURjo6bW92ZShmb250RGF0YSkpKTsK
KyAgICBpZiAoZm9udC0+aXNMb2FkaW5nKCkpIHsKKyAgICAgICAgcmFuZ2VzLmFwcGVuZFJhbmdl
KEZvbnRSYW5nZXM6OlJhbmdlKDAsIDAsIFdURjo6bW92ZShmb250KSkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCiAgICAgdW5zaWduZWQgbnVtUmFuZ2VzID0gdW5pY29kZVJhbmdlcy5zaXpl
KCk7CiAgICAgaWYgKCFudW1SYW5nZXMpIHsKLSAgICAgICAgcmFuZ2VzLmFwcGVuZFJhbmdlKEZv
bnRSYW5nZXM6OlJhbmdlKDAsIDB4N0ZGRkZGRkYsIFdURjo6bW92ZShmb250RGF0YSkpKTsKKyAg
ICAgICAgcmFuZ2VzLmFwcGVuZFJhbmdlKEZvbnRSYW5nZXM6OlJhbmdlKDAsIDB4N0ZGRkZGRkYs
IFdURjo6bW92ZShmb250KSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgZm9yICh1
bnNpZ25lZCBqID0gMDsgaiA8IG51bVJhbmdlczsgKytqKQotICAgICAgICByYW5nZXMuYXBwZW5k
UmFuZ2UoRm9udFJhbmdlczo6UmFuZ2UodW5pY29kZVJhbmdlc1tqXS5mcm9tKCksIHVuaWNvZGVS
YW5nZXNbal0udG8oKSwgZm9udERhdGEuY29weVJlZigpKSk7CisgICAgICAgIHJhbmdlcy5hcHBl
bmRSYW5nZShGb250UmFuZ2VzOjpSYW5nZSh1bmljb2RlUmFuZ2VzW2pdLmZyb20oKSwgdW5pY29k
ZVJhbmdlc1tqXS50bygpLCBmb250LmNvcHlSZWYoKSkpOwogfQogCiBGb250UmFuZ2VzIENTU1Nl
Z21lbnRlZEZvbnRGYWNlOjpmb250UmFuZ2VzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERl
c2NyaXB0aW9uKQpAQCAtMTI4LDggKzEyOCw4IEBAIEZvbnRSYW5nZXMgQ1NTU2VnbWVudGVkRm9u
dEZhY2U6OmZvbnRSYW4KICAgICAgICAgICAgIEZvbnRUcmFpdHNNYXNrIHRyYWl0c01hc2sgPSBm
YWNlLT50cmFpdHNNYXNrKCk7CiAgICAgICAgICAgICBib29sIHN5bnRoZXRpY0JvbGQgPSAhKHRy
YWl0c01hc2sgJiAoRm9udFdlaWdodDYwME1hc2sgfCBGb250V2VpZ2h0NzAwTWFzayB8IEZvbnRX
ZWlnaHQ4MDBNYXNrIHwgRm9udFdlaWdodDkwME1hc2spKSAmJiAoZGVzaXJlZFRyYWl0c01hc2sg
JiAoRm9udFdlaWdodDYwME1hc2sgfCBGb250V2VpZ2h0NzAwTWFzayB8IEZvbnRXZWlnaHQ4MDBN
YXNrIHwgRm9udFdlaWdodDkwME1hc2spKTsKICAgICAgICAgICAgIGJvb2wgc3ludGhldGljSXRh
bGljID0gISh0cmFpdHNNYXNrICYgRm9udFN0eWxlSXRhbGljTWFzaykgJiYgKGRlc2lyZWRUcmFp
dHNNYXNrICYgRm9udFN0eWxlSXRhbGljTWFzayk7Ci0gICAgICAgICAgICBpZiAoUmVmUHRyPFNp
bXBsZUZvbnREYXRhPiBmYWNlRm9udERhdGEgPSBmYWNlLT5nZXRGb250RGF0YShmb250RGVzY3Jp
cHRpb24sIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYykpCi0gICAgICAgICAgICAgICAg
YXBwZW5kRm9udERhdGFXaXRoSW52YWxpZFVuaWNvZGVSYW5nZUlmTG9hZGluZyhmb250UmFuZ2Vz
LCBmYWNlRm9udERhdGEucmVsZWFzZU5vbk51bGwoKSwgZmFjZS0+cmFuZ2VzKCkpOworICAgICAg
ICAgICAgaWYgKFJlZlB0cjxGb250PiBmYWNlRm9udCA9IGZhY2UtPmZvbnQoZm9udERlc2NyaXB0
aW9uLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMpKQorICAgICAgICAgICAgICAgIGFw
cGVuZEZvbnRXaXRoSW52YWxpZFVuaWNvZGVSYW5nZUlmTG9hZGluZyhmb250UmFuZ2VzLCBmYWNl
Rm9udC5yZWxlYXNlTm9uTnVsbCgpLCBmYWNlLT5yYW5nZXMoKSk7CiAgICAgICAgIH0KICAgICB9
CiAgICAgcmV0dXJuIGZvbnRSYW5nZXM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgJKHJl
dmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAgY2xhc3MgSGl0VGVzdFJlc3VsdDsKIGNsYXNzIEtp
bGxSaW5nOwogY2xhc3MgUGFzdGVib2FyZDsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKLWNsYXNzIFNp
bXBsZUZvbnREYXRhOworY2xhc3MgRm9udDsKIGNsYXNzIFNwZWxsQ2hlY2tSZXF1ZXN0OwogY2xh
c3MgU3BlbGxDaGVja2VyOwogY2xhc3MgU3R5bGVQcm9wZXJ0aWVzOwpAQCAtNDIyLDcgKzQyMiw3
IEBAIHB1YmxpYzoKICNpZiBQTEFURk9STShDT0NPQSkKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0
aWMgUmVuZGVyU3R5bGUqIHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQoRnJhbWUqICwgTm9kZSAqJm5v
ZGVUb1JlbW92ZSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpbnNlcnRQYXJhZ3JhcGhTZXBh
cmF0b3JJblF1b3RlZENvbnRlbnQoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBTaW1wbGVG
b250RGF0YSogZm9udEZvclNlbGVjdGlvbihib29sJikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBP
UlQgY29uc3QgRm9udCogZm9udEZvclNlbGVjdGlvbihib29sJikgY29uc3Q7CiAgICAgV0VCQ09S
RV9FWFBPUlQgTlNEaWN0aW9uYXJ5ICpmb250QXR0cmlidXRlc0ZvclNlbGVjdGlvblN0YXJ0KCkg
Y29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHN0cmluZ1NlbGVjdGlvbkZvclBhc3Rl
Ym9hcmQoKTsKICAgICBTdHJpbmcgc3RyaW5nU2VsZWN0aW9uRm9yUGFzdGVib2FyZFdpdGhJbWFn
ZUFsdFRleHQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZl
cnRlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0hUTUxD
b252ZXJ0ZXIubW0JKHJldmlzaW9uIDE3ODUxMCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
Y29jb2EvSFRNTENvbnZlcnRlci5tbQkod29ya2luZyBjb3B5KQpAQCAtMTExNCw3ICsxMTE0LDcg
QEAgc3RhdGljIFBsYXRmb3JtRm9udCAqX2ZvbnQoRWxlbWVudCYgZWxlbQogICAgIGF1dG8gcmVu
ZGVyZXIgPSBlbGVtZW50LnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAg
cmV0dXJuIG5pbDsKLSAgICByZXR1cm4gcmVuZGVyZXItPnN0eWxlKCkuZm9udENhc2NhZGUoKS5w
cmltYXJ5Rm9udERhdGEoKS5nZXROU0ZvbnQoKTsKKyAgICByZXR1cm4gcmVuZGVyZXItPnN0eWxl
KCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpLmdldE5TRm9udCgpOwogfQogI2Vsc2UKIHN0
YXRpYyBQbGF0Zm9ybUZvbnQgKl9mb250KEVsZW1lbnQmIGVsZW1lbnQpCkBAIC0xMTIyLDcgKzEx
MjIsNyBAQCBzdGF0aWMgUGxhdGZvcm1Gb250ICpfZm9udChFbGVtZW50JiBlbGVtCiAgICAgYXV0
byByZW5kZXJlciA9IGVsZW1lbnQucmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQogICAg
ICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiAoUGxhdGZvcm1Gb250ICopcmVuZGVyZXItPnN0
eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXRDVEZvbnQoKTsKKyAgICBy
ZXR1cm4gKFBsYXRmb3JtRm9udCAqKXJlbmRlcmVyLT5zdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJp
bWFyeUZvbnQoKS5nZXRDVEZvbnQoKTsKIH0KICNlbmRpZgogCkBAIC0yNTk0LDEwICsyNTk0LDEw
IEBAIE5TQXR0cmlidXRlZFN0cmluZyAqZWRpdGluZ0F0dHJpYnV0ZWRTdHIKICAgICAgICAgICAg
IFthdHRycy5nZXQoKSBzZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhJbnRlZ2VyOk5TVW5k
ZXJsaW5lU3R5bGVTaW5nbGVdIGZvcktleTpOU1VuZGVybGluZVN0eWxlQXR0cmlidXRlTmFtZV07
CiAgICAgICAgIGlmIChzdHlsZS50ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgpICYgVGV4dERlY29y
YXRpb25MaW5lVGhyb3VnaCkKICAgICAgICAgICAgIFthdHRycy5nZXQoKSBzZXRPYmplY3Q6W05T
TnVtYmVyIG51bWJlcldpdGhJbnRlZ2VyOk5TVW5kZXJsaW5lU3R5bGVTaW5nbGVdIGZvcktleTpO
U1N0cmlrZXRocm91Z2hTdHlsZUF0dHJpYnV0ZU5hbWVdOwotICAgICAgICBpZiAoTlNGb250ICpm
b250ID0gc3R5bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXROU0ZvbnQoKSkK
KyAgICAgICAgaWYgKE5TRm9udCAqZm9udCA9IHN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZv
bnQoKS5nZXROU0ZvbnQoKSkKICAgICAgICAgICAgIFthdHRycy5nZXQoKSBzZXRPYmplY3Q6Zm9u
dCBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IFthdHRycy5nZXQoKSBzZXRPYmplY3Q6W2ZvbnRNYW5hZ2VyIGNvbnZlcnRGb250OldlYkRlZmF1
bHRGb250KCkgdG9TaXplOnN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkucGxh
dGZvcm1EYXRhKCkuc2l6ZSgpXSBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CisgICAgICAg
ICAgICBbYXR0cnMuZ2V0KCkgc2V0T2JqZWN0Oltmb250TWFuYWdlciBjb252ZXJ0Rm9udDpXZWJE
ZWZhdWx0Rm9udCgpIHRvU2l6ZTpzdHlsZS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCkucGxh
dGZvcm1EYXRhKCkuc2l6ZSgpXSBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CiAgICAgICAg
IGlmIChzdHlsZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikuYWxwaGEo
KSkKICAgICAgICAgICAgIFthdHRycy5nZXQoKSBzZXRPYmplY3Q6bnNDb2xvcihzdHlsZS52aXNp
dGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikpIGZvcktleTpOU0ZvcmVncm91bmRD
b2xvckF0dHJpYnV0ZU5hbWVdOwogICAgICAgICBlbHNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRp
dGluZy9pb3MvRWRpdG9ySU9TLm1tCShyZXZpc2lvbiAxNzg1MTApCisrKyBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTIwMyw3ICsyMDMs
NyBAQCBib29sIEVkaXRvcjo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLWNvbnN0IFNpbXBsZUZvbnREYXRhKiBFZGl0b3I6OmZvbnRGb3JTZWxlY3Rp
b24oYm9vbCYgaGFzTXVsdGlwbGVGb250cykgY29uc3QKK2NvbnN0IEZvbnQqIEVkaXRvcjo6Zm9u
dEZvclNlbGVjdGlvbihib29sJiBoYXNNdWx0aXBsZUZvbnRzKSBjb25zdAogewogICAgIGhhc011
bHRpcGxlRm9udHMgPSBmYWxzZTsKIApAQCAtMjExLDkgKzIxMSw5IEBAIGNvbnN0IFNpbXBsZUZv
bnREYXRhKiBFZGl0b3I6OmZvbnRGb3JTZWwKICAgICAgICAgTm9kZSogbm9kZVRvUmVtb3ZlOwog
ICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBzdHlsZUZvclNlbGVjdGlvblN0YXJ0KCZtX2Zy
YW1lLCBub2RlVG9SZW1vdmUpOyAvLyBzZXRzIG5vZGVUb1JlbW92ZQogCi0gICAgICAgIGNvbnN0
IFNpbXBsZUZvbnREYXRhKiByZXN1bHQgPSBudWxscHRyOworICAgICAgICBjb25zdCBGb250KiBy
ZXN1bHQgPSBudWxscHRyOwogICAgICAgICBpZiAoc3R5bGUpCi0gICAgICAgICAgICByZXN1bHQg
PSAmc3R5bGUtPmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCk7CisgICAgICAgICAgICBy
ZXN1bHQgPSAmc3R5bGUtPmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKTsKIAogICAgICAgICBp
ZiAobm9kZVRvUmVtb3ZlKSB7CiAgICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVjOwpAQCAtMjI0
LDcgKzIyNCw3IEBAIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBFZGl0b3I6OmZvbnRGb3JTZWwKICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBjb25zdCBTaW1wbGVGb250RGF0YSog
Zm9udCA9IDA7CisgICAgY29uc3QgRm9udCogZm9udCA9IDA7CiAgICAgUmVmUHRyPFJhbmdlPiBy
YW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAo
Tm9kZSogc3RhcnROb2RlID0gYWRqdXN0ZWRTZWxlY3Rpb25TdGFydEZvclN0eWxlQ29tcHV0YXRp
b24obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSkuZGVwcmVjYXRlZE5vZGUoKSkgewog
ICAgICAgICBOb2RlKiBwYXN0RW5kID0gcmFuZ2UtPnBhc3RMYXN0Tm9kZSgpOwpAQCAtMjM1LDcg
KzIzNSw3IEBAIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBFZGl0b3I6OmZvbnRGb3JTZWwKICAgICAg
ICAgICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICAvLyBGSVhNRTogQXJlIHRoZXJlIGFueSBub2RlIHR5cGVzIHRoYXQgaGF2ZSByZW5kZXJl
cnMsIGJ1dCB0aGF0IHdlIHNob3VsZCBiZSBza2lwcGluZz8KLSAgICAgICAgICAgIGNvbnN0IFNp
bXBsZUZvbnREYXRhJiBwcmltYXJ5Rm9udCA9IHJlbmRlcmVyLT5zdHlsZSgpLmZvbnRDYXNjYWRl
KCkucHJpbWFyeUZvbnREYXRhKCk7CisgICAgICAgICAgICBjb25zdCBGb250JiBwcmltYXJ5Rm9u
dCA9IHJlbmRlcmVyLT5zdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKTsKICAgICAg
ICAgICAgIGlmICghZm9udCkKICAgICAgICAgICAgICAgICBmb250ID0gJnByaW1hcnlGb250Owog
ICAgICAgICAgICAgZWxzZSBpZiAoZm9udCAhPSAmcHJpbWFyeUZvbnQpIHsKQEAgLTI1Nyw3ICsy
NTcsNyBAQCBOU0RpY3Rpb25hcnkqIEVkaXRvcjo6Zm9udEF0dHJpYnV0ZXNGb3JTCiAKICAgICBO
U011dGFibGVEaWN0aW9uYXJ5KiByZXN1bHQgPSBbTlNNdXRhYmxlRGljdGlvbmFyeSBkaWN0aW9u
YXJ5XTsKICAgICAKLSAgICBDVEZvbnRSZWYgZm9udCA9IHN0eWxlLT5mb250Q2FzY2FkZSgpLnBy
aW1hcnlGb250RGF0YSgpLmdldENURm9udCgpOworICAgIENURm9udFJlZiBmb250ID0gc3R5bGUt
PmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKS5nZXRDVEZvbnQoKTsKICAgICBpZiAoZm9udCkK
ICAgICAgICAgW3Jlc3VsdCBzZXRPYmplY3Q6KGlkKWZvbnQgZm9yS2V5Ok5TRm9udEF0dHJpYnV0
ZU5hbWVdOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCShy
ZXZpc2lvbiAxNzg1MTApCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTEwNSw3ICsxMDUsNyBAQCBib29sIEVkaXRvcjo6aW5zZXJ0
UGFyYWdyYXBoU2VwYXJhdG9ySW5RCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWNvbnN0IFNpbXBs
ZUZvbnREYXRhKiBFZGl0b3I6OmZvbnRGb3JTZWxlY3Rpb24oYm9vbCYgaGFzTXVsdGlwbGVGb250
cykgY29uc3QKK2NvbnN0IEZvbnQqIEVkaXRvcjo6Zm9udEZvclNlbGVjdGlvbihib29sJiBoYXNN
dWx0aXBsZUZvbnRzKSBjb25zdAogewogICAgIGhhc011bHRpcGxlRm9udHMgPSBmYWxzZTsKIApA
QCAtMTEzLDkgKzExMyw5IEBAIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBFZGl0b3I6OmZvbnRGb3JT
ZWwKICAgICAgICAgTm9kZSogbm9kZVRvUmVtb3ZlOwogICAgICAgICBSZW5kZXJTdHlsZSogc3R5
bGUgPSBzdHlsZUZvclNlbGVjdGlvblN0YXJ0KCZtX2ZyYW1lLCBub2RlVG9SZW1vdmUpOyAvLyBz
ZXRzIG5vZGVUb1JlbW92ZQogCi0gICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiByZXN1bHQg
PSBudWxscHRyOworICAgICAgICBjb25zdCBGb250KiByZXN1bHQgPSBudWxscHRyOwogICAgICAg
ICBpZiAoc3R5bGUpCi0gICAgICAgICAgICByZXN1bHQgPSAmc3R5bGUtPmZvbnRDYXNjYWRlKCku
cHJpbWFyeUZvbnREYXRhKCk7CisgICAgICAgICAgICByZXN1bHQgPSAmc3R5bGUtPmZvbnRDYXNj
YWRlKCkucHJpbWFyeUZvbnQoKTsKIAogICAgICAgICBpZiAobm9kZVRvUmVtb3ZlKQogICAgICAg
ICAgICAgbm9kZVRvUmVtb3ZlLT5yZW1vdmUoQVNTRVJUX05PX0VYQ0VQVElPTik7CkBAIC0xMjMs
NyArMTIzLDcgQEAgY29uc3QgU2ltcGxlRm9udERhdGEqIEVkaXRvcjo6Zm9udEZvclNlbAogICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBm
b250ID0gMDsKKyAgICBjb25zdCBGb250KiBmb250ID0gMDsKICAgICBSZWZQdHI8UmFuZ2U+IHJh
bmdlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIE5vZGUq
IHN0YXJ0Tm9kZSA9IGFkanVzdGVkU2VsZWN0aW9uU3RhcnRGb3JTdHlsZUNvbXB1dGF0aW9uKG1f
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgaWYg
KHJhbmdlICYmIHN0YXJ0Tm9kZSkgewpAQCAtMTM1LDcgKzEzNSw3IEBAIGNvbnN0IFNpbXBsZUZv
bnREYXRhKiBFZGl0b3I6OmZvbnRGb3JTZWwKICAgICAgICAgICAgIGlmICghcmVuZGVyZXIpCiAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAvLyBGSVhNRTogQXJlIHRoZXJl
IGFueSBub2RlIHR5cGVzIHRoYXQgaGF2ZSByZW5kZXJlcnMsIGJ1dCB0aGF0IHdlIHNob3VsZCBi
ZSBza2lwcGluZz8KLSAgICAgICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhJiBwcmltYXJ5Rm9u
dCA9IHJlbmRlcmVyLT5zdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCk7Cisg
ICAgICAgICAgICBjb25zdCBGb250JiBwcmltYXJ5Rm9udCA9IHJlbmRlcmVyLT5zdHlsZSgpLmZv
bnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKTsKICAgICAgICAgICAgIGlmICghZm9udCkKICAgICAg
ICAgICAgICAgICBmb250ID0gJnByaW1hcnlGb250OwogICAgICAgICAgICAgZWxzZSBpZiAoZm9u
dCAhPSAmcHJpbWFyeUZvbnQpIHsKQEAgLTE2MCw4ICsxNjAsOCBAQCBOU0RpY3Rpb25hcnkqIEVk
aXRvcjo6Zm9udEF0dHJpYnV0ZXNGb3JTCiAgICAgaWYgKHN0eWxlLT52aXNpdGVkRGVwZW5kZW50
Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpLmlzVmFsaWQoKSAmJiBzdHlsZS0+dmlz
aXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKS5hbHBoYSgpICE9
IDApCiAgICAgICAgIFtyZXN1bHQgc2V0T2JqZWN0Om5zQ29sb3Ioc3R5bGUtPnZpc2l0ZWREZXBl
bmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikpIGZvcktleTpOU0JhY2tncm91
bmRDb2xvckF0dHJpYnV0ZU5hbWVdOwogCi0gICAgaWYgKHN0eWxlLT5mb250Q2FzY2FkZSgpLnBy
aW1hcnlGb250RGF0YSgpLmdldE5TRm9udCgpKQotICAgICAgICBbcmVzdWx0IHNldE9iamVjdDpz
dHlsZS0+Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXROU0ZvbnQoKSBmb3JLZXk6
TlNGb250QXR0cmlidXRlTmFtZV07CisgICAgaWYgKHN0eWxlLT5mb250Q2FzY2FkZSgpLnByaW1h
cnlGb250KCkuZ2V0TlNGb250KCkpCisgICAgICAgIFtyZXN1bHQgc2V0T2JqZWN0OnN0eWxlLT5m
b250Q2FzY2FkZSgpLnByaW1hcnlGb250KCkuZ2V0TlNGb250KCkgZm9yS2V5Ok5TRm9udEF0dHJp
YnV0ZU5hbWVdOwogCiAgICAgaWYgKHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJv
cGVydHlDb2xvcikuaXNWYWxpZCgpICYmIHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NT
UHJvcGVydHlDb2xvcikgIT0gQ29sb3I6OmJsYWNrKQogICAgICAgICBbcmVzdWx0IHNldE9iamVj
dDpuc0NvbG9yKHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikp
IGZvcktleTpOU0ZvcmVncm91bmRDb2xvckF0dHJpYnV0ZU5hbWVdOwpJbmRleDogU291cmNlL1dl
YkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRGb250LmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysg
U291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05OSw3ICs5OSw3IEBAIGJvb2wgQ2FjaGVkRm9udDo6ZW5zdXJlQ3VzdG9tRm9udERhdGEo
Ym8KIAogYm9vbCBDYWNoZWRGb250OjplbnN1cmVDdXN0b21Gb250RGF0YShSZWZQdHI8U2hhcmVk
QnVmZmVyPiYmIGRhdGEpCiB7Ci0gICAgaWYgKCFtX2ZvbnREYXRhICYmICFlcnJvck9jY3VycmVk
KCkgJiYgIWlzTG9hZGluZygpICYmIGRhdGEpIHsKKyAgICBpZiAoIW1fZm9udEN1c3RvbVBsYXRm
b3JtRGF0YSAmJiAhZXJyb3JPY2N1cnJlZCgpICYmICFpc0xvYWRpbmcoKSAmJiBkYXRhKSB7CiAg
ICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciA9IGRhdGE7CiAKICNpZiAoIVBMQVRG
T1JNKE1BQykgfHwgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA8PSAxMDkwKSAmJiAo
IVBMQVRGT1JNKElPUykgfHwgX19JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPCA4MDAw
MCkKQEAgLTExMiwzMCArMTEyLDMwIEBAIGJvb2wgQ2FjaGVkRm9udDo6ZW5zdXJlQ3VzdG9tRm9u
dERhdGEoUmUKICAgICAgICAgfQogI2VuZGlmCiAKLSAgICAgICAgbV9mb250RGF0YSA9IGJ1ZmZl
ciA/IGNyZWF0ZUZvbnRDdXN0b21QbGF0Zm9ybURhdGEoKmJ1ZmZlcikgOiBudWxscHRyOwotICAg
ICAgICBtX2hhc0NyZWF0ZWRGb250RGF0YVdyYXBwaW5nUmVzb3VyY2UgPSBtX2ZvbnREYXRhICYm
IChidWZmZXIgPT0gbV9kYXRhKTsKLSAgICAgICAgaWYgKCFtX2ZvbnREYXRhKQorICAgICAgICBt
X2ZvbnRDdXN0b21QbGF0Zm9ybURhdGEgPSBidWZmZXIgPyBjcmVhdGVGb250Q3VzdG9tUGxhdGZv
cm1EYXRhKCpidWZmZXIpIDogbnVsbHB0cjsKKyAgICAgICAgbV9oYXNDcmVhdGVkRm9udERhdGFX
cmFwcGluZ1Jlc291cmNlID0gbV9mb250Q3VzdG9tUGxhdGZvcm1EYXRhICYmIChidWZmZXIgPT0g
bV9kYXRhKTsKKyAgICAgICAgaWYgKCFtX2ZvbnRDdXN0b21QbGF0Zm9ybURhdGEpCiAgICAgICAg
ICAgICBzZXRTdGF0dXMoRGVjb2RlRXJyb3IpOwogICAgIH0KIAotICAgIHJldHVybiBtX2ZvbnRE
YXRhLmdldCgpOworICAgIHJldHVybiBtX2ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuZ2V0KCk7CiB9
CiAKLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IENhY2hlZEZvbnQ6OmdldEZvbnREYXRhKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcm
LCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljLCBib29sKQorUmVmUHRy
PEZvbnQ+IENhY2hlZEZvbnQ6OmNyZWF0ZUZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYsIGJvb2wgc3ludGhldGljQm9sZCwgYm9v
bCBzeW50aGV0aWNJdGFsaWMsIGJvb2wpCiB7Ci0gICAgcmV0dXJuIFNpbXBsZUZvbnREYXRhOjpj
cmVhdGUocGxhdGZvcm1EYXRhRnJvbUN1c3RvbURhdGEoZm9udERlc2NyaXB0aW9uLmNvbXB1dGVk
UGl4ZWxTaXplKCksIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYywKKyAgICByZXR1cm4g
Rm9udDo6Y3JlYXRlKHBsYXRmb3JtRGF0YUZyb21DdXN0b21EYXRhKGZvbnREZXNjcmlwdGlvbi5j
b21wdXRlZFBpeGVsU2l6ZSgpLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMsCiAgICAg
ICAgIGZvbnREZXNjcmlwdGlvbi5vcmllbnRhdGlvbigpLCBmb250RGVzY3JpcHRpb24ud2lkdGhW
YXJpYW50KCksIGZvbnREZXNjcmlwdGlvbi5yZW5kZXJpbmdNb2RlKCkpLCB0cnVlLCBmYWxzZSk7
CiB9CiAKIEZvbnRQbGF0Zm9ybURhdGEgQ2FjaGVkRm9udDo6cGxhdGZvcm1EYXRhRnJvbUN1c3Rv
bURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0YWxpYywgRm9udE9yaWVudGF0aW9u
IG9yaWVudGF0aW9uLCBGb250V2lkdGhWYXJpYW50IHdpZHRoVmFyaWFudCwgRm9udFJlbmRlcmlu
Z01vZGUgcmVuZGVyaW5nTW9kZSkKIHsKLSAgICBBU1NFUlQobV9mb250RGF0YSk7Ci0gICAgcmV0
dXJuIG1fZm9udERhdGEtPmZvbnRQbGF0Zm9ybURhdGEoc3RhdGljX2Nhc3Q8aW50PihzaXplKSwg
Ym9sZCwgaXRhbGljLCBvcmllbnRhdGlvbiwgd2lkdGhWYXJpYW50LCByZW5kZXJpbmdNb2RlKTsK
KyAgICBBU1NFUlQobV9mb250Q3VzdG9tUGxhdGZvcm1EYXRhKTsKKyAgICByZXR1cm4gbV9mb250
Q3VzdG9tUGxhdGZvcm1EYXRhLT5mb250UGxhdGZvcm1EYXRhKHN0YXRpY19jYXN0PGludD4oc2l6
ZSksIGJvbGQsIGl0YWxpYywgb3JpZW50YXRpb24sIHdpZHRoVmFyaWFudCwgcmVuZGVyaW5nTW9k
ZSk7CiB9CiAKIHZvaWQgQ2FjaGVkRm9udDo6YWxsQ2xpZW50c1JlbW92ZWQoKQogewotICAgIG1f
Zm9udERhdGEgPSBudWxscHRyOworICAgIG1fZm9udEN1c3RvbVBsYXRmb3JtRGF0YSA9IG51bGxw
dHI7CiB9CiAKIHZvaWQgQ2FjaGVkRm9udDo6Y2hlY2tOb3RpZnkoKQpJbmRleDogU291cmNlL1dl
YkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkRm9udC5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkRm9udC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCwxMCArMjgsMTAgQEAKIAogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlLmgiCiAjaW5jbHVkZSAi
Q2FjaGVkUmVzb3VyY2VDbGllbnQuaCIKKyNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9u
dE9yaWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiRm9udFJlbmRlcmluZ01vZGUuaCIKICNpbmNsdWRl
ICJGb250V2lkdGhWYXJpYW50LmgiCi0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCkBAIC01Miw3ICs1Miw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1
YWwgYm9vbCBlbnN1cmVDdXN0b21Gb250RGF0YShib29sIGV4dGVybmFsU1ZHLCBjb25zdCBBdG9t
aWNTdHJpbmcmIHJlbW90ZVVSSSk7CiAKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U2ltcGxlRm9u
dERhdGE+IGdldEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0
cmluZyYgcmVtb3RlVVJJLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGlj
LCBib29sIGV4dGVybmFsU1ZHKTsKKyAgICB2aXJ0dWFsIFJlZlB0cjxGb250PiBjcmVhdGVGb250
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYgcmVtb3RlVVJJLCBi
b29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljLCBib29sIGV4dGVybmFsU1ZH
KTsKIAogcHJvdGVjdGVkOgogICAgIEZvbnRQbGF0Zm9ybURhdGEgcGxhdGZvcm1EYXRhRnJvbUN1
c3RvbURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0YWxpYywgRm9udE9yaWVudGF0
aW9uID0gSG9yaXpvbnRhbCwgRm9udFdpZHRoVmFyaWFudCA9IFJlZ3VsYXJXaWR0aCwgRm9udFJl
bmRlcmluZ01vZGUgPSBOb3JtYWxSZW5kZXJpbmdNb2RlKTsKQEAgLTcwLDcgKzcwLDcgQEAgcHJp
dmF0ZToKIAogICAgIHZpcnR1YWwgdm9pZCBhbGxDbGllbnRzUmVtb3ZlZCgpIG92ZXJyaWRlOwog
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEZvbnRDdXN0b21QbGF0Zm9ybURhdGE+IG1fZm9udERhdGE7
CisgICAgc3RkOjp1bmlxdWVfcHRyPEZvbnRDdXN0b21QbGF0Zm9ybURhdGE+IG1fZm9udEN1c3Rv
bVBsYXRmb3JtRGF0YTsKICAgICBib29sIG1fbG9hZEluaXRpYXRlZDsKICAgICBib29sIG1faGFz
Q3JlYXRlZEZvbnREYXRhV3JhcHBpbmdSZXNvdXJjZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
bG9hZGVyL2NhY2hlL0NhY2hlZFNWR0ZvbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTVkdGb250LmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysg
U291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFNWR0ZvbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01MSwxNSArNTEsMTUgQEAgQ2FjaGVkU1ZHRm9udDo6Q2FjaGVkU1ZHRm9udChjb25z
dCBSZXNvdQogewogfQogCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBDYWNoZWRTVkdGb250
OjpnZXRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29u
c3QgQXRvbWljU3RyaW5nJiByZW1vdGVVUkksIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50
aGV0aWNJdGFsaWMsIGJvb2wgZXh0ZXJuYWxTVkcpCitSZWZQdHI8Rm9udD4gQ2FjaGVkU1ZHRm9u
dDo6Y3JlYXRlRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29u
c3QgQXRvbWljU3RyaW5nJiByZW1vdGVVUkksIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50
aGV0aWNJdGFsaWMsIGJvb2wgZXh0ZXJuYWxTVkcpCiB7CiAjaWYgIUVOQUJMRShTVkdfT1RGX0NP
TlZFUlRFUikKICAgICBpZiAoIWV4dGVybmFsU1ZHKQogI2VuZGlmCi0gICAgICAgIHJldHVybiBD
YWNoZWRGb250OjpnZXRGb250RGF0YShmb250RGVzY3JpcHRpb24sIHJlbW90ZVVSSSwgc3ludGhl
dGljQm9sZCwgc3ludGhldGljSXRhbGljLCBleHRlcm5hbFNWRyk7CisgICAgICAgIHJldHVybiBD
YWNoZWRGb250OjpjcmVhdGVGb250KGZvbnREZXNjcmlwdGlvbiwgcmVtb3RlVVJJLCBzeW50aGV0
aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMsIGV4dGVybmFsU1ZHKTsKIAogICAgIGlmIChTVkdGb250
RmFjZUVsZW1lbnQqIGZpcnN0Rm9udEZhY2UgPSB0aGlzLT5maXJzdEZvbnRGYWNlKHJlbW90ZVVS
SSkpCi0gICAgICAgIHJldHVybiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlKHN0ZDo6bWFrZV91bmlx
dWU8U1ZHRm9udERhdGE+KGZpcnN0Rm9udEZhY2UpLCBmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQ
aXhlbFNpemUoKSwgc3ludGhldGljQm9sZCwgc3ludGhldGljSXRhbGljKTsKKyAgICAgICAgcmV0
dXJuIEZvbnQ6OmNyZWF0ZShzdGQ6Om1ha2VfdW5pcXVlPFNWR0ZvbnREYXRhPihmaXJzdEZvbnRG
YWNlKSwgZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCksIHN5bnRoZXRpY0JvbGQs
IHN5bnRoZXRpY0l0YWxpYyk7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTVkdGb250LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFNWR0ZvbnQuaAkocmV2aXNpb24gMTc4NDk2
KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFNWR0ZvbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgZW5z
dXJlQ3VzdG9tRm9udERhdGEoYm9vbCBleHRlcm5hbFNWRywgY29uc3QgQXRvbWljU3RyaW5nJiBy
ZW1vdGVVUkkpIG92ZXJyaWRlOwogICAgIAotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTaW1wbGVG
b250RGF0YT4gZ2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbWlj
U3RyaW5nJiByZW1vdGVVUkksIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFs
aWMsIGJvb2wgZXh0ZXJuYWxTVkcpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgUmVmUHRyPEZvbnQ+
IGNyZWF0ZUZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbWljU3RyaW5nJiBy
ZW1vdGVVUkksIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMsIGJvb2wg
ZXh0ZXJuYWxTVkcpIG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIEZvbnRQbGF0Zm9ybURhdGEg
cGxhdGZvcm1EYXRhRnJvbUN1c3RvbURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0
YWxpYywgRm9udE9yaWVudGF0aW9uID0gSG9yaXpvbnRhbCwgRm9udFdpZHRoVmFyaWFudCA9IFJl
Z3VsYXJXaWR0aCwgRm9udFJlbmRlcmluZ01vZGUgPSBOb3JtYWxSZW5kZXJpbmdNb2RlKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAko
cmV2aXNpb24gMTc4NTEwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsMTQgKzUyLDE0IEBACiAjaW5jbHVkZSA8
d3RmL05vbmNvcHlhYmxlLmg+CiAKIC8vIEZJWE1FOiBXZSBtYXkgYmUgYWJsZSB0byBzaW1wbGlm
eSB0aGlzIGNvZGUgdXNpbmcgQysrMTEgdGhyZWFkaW5nIHByaW1pdGl2ZXMsIGluY2x1ZGluZyBz
dGQ6OmNhbGxfb25jZSgpLgotc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBmb250RGF0YUxvY2s7Citz
dGF0aWMgcHRocmVhZF9tdXRleF90IGZvbnRMb2NrOwogCiBzdGF0aWMgdm9pZCBpbml0Rm9udENh
Y2hlTG9ja09uY2UoKQogewogICAgIHB0aHJlYWRfbXV0ZXhhdHRyX3QgbXV0ZXhBdHRyaWJ1dGU7
CiAgICAgcHRocmVhZF9tdXRleGF0dHJfaW5pdCgmbXV0ZXhBdHRyaWJ1dGUpOwogICAgIHB0aHJl
YWRfbXV0ZXhhdHRyX3NldHR5cGUoJm11dGV4QXR0cmlidXRlLCBQVEhSRUFEX01VVEVYX1JFQ1VS
U0lWRSk7Ci0gICAgcHRocmVhZF9tdXRleF9pbml0KCZmb250RGF0YUxvY2ssICZtdXRleEF0dHJp
YnV0ZSk7CisgICAgcHRocmVhZF9tdXRleF9pbml0KCZmb250TG9jaywgJm11dGV4QXR0cmlidXRl
KTsKICAgICBwdGhyZWFkX211dGV4YXR0cl9kZXN0cm95KCZtdXRleEF0dHJpYnV0ZSk7CiB9CiAK
QEAgLTcxLDEzICs3MSwxMyBAQCBwdWJsaWM6CiAgICAgRm9udExvY2tlcigpCiAgICAgewogICAg
ICAgICBwdGhyZWFkX29uY2UoJmluaXRGb250TG9ja0NvbnRyb2wsIGluaXRGb250Q2FjaGVMb2Nr
T25jZSk7Ci0gICAgICAgIGludCBsb2NrY29kZSA9IHB0aHJlYWRfbXV0ZXhfbG9jaygmZm9udERh
dGFMb2NrKTsKLSAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRV9VTlVTRUQobG9ja2NvZGUsICFs
b2NrY29kZSwgImZvbnREYXRhTG9jayBsb2NrIGZhaWxlZCB3aXRoIGNvZGU6JWQiLCBsb2NrY29k
ZSk7ICAgIAorICAgICAgICBpbnQgbG9ja2NvZGUgPSBwdGhyZWFkX211dGV4X2xvY2soJmZvbnRM
b2NrKTsKKyAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRV9VTlVTRUQobG9ja2NvZGUsICFsb2Nr
Y29kZSwgImZvbnRMb2NrIGxvY2sgZmFpbGVkIHdpdGggY29kZTolZCIsIGxvY2tjb2RlKTsgICAg
CiAgICAgfQogICAgIH5Gb250TG9ja2VyKCkKICAgICB7Ci0gICAgICAgIGludCBsb2NrY29kZSA9
IHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZmb250RGF0YUxvY2spOwotICAgICAgICBBU1NFUlRfV0lU
SF9NRVNTQUdFX1VOVVNFRChsb2NrY29kZSwgIWxvY2tjb2RlLCAiZm9udERhdGFMb2NrIHVubG9j
ayBmYWlsZWQgd2l0aCBjb2RlOiVkIiwgbG9ja2NvZGUpOworICAgICAgICBpbnQgbG9ja2NvZGUg
PSBwdGhyZWFkX211dGV4X3VubG9jaygmZm9udExvY2spOworICAgICAgICBBU1NFUlRfV0lUSF9N
RVNTQUdFX1VOVVNFRChsb2NrY29kZSwgIWxvY2tjb2RlLCAiZm9udExvY2sgdW5sb2NrIGZhaWxl
ZCB3aXRoIGNvZGU6JWQiLCBsb2NrY29kZSk7CiAgICAgfQogfTsKICNlbmRpZiAvLyBQTEFURk9S
TShJT1MpCkBAIC0zNTksNyArMzU5LDcgQEAgc3RydWN0IEZvbnREYXRhQ2FjaGVLZXlUcmFpdHMg
OiBXVEY6OkdlbgogICAgIH0KIH07CiAKLXR5cGVkZWYgSGFzaE1hcDxGb250UGxhdGZvcm1EYXRh
LCBSZWZQdHI8U2ltcGxlRm9udERhdGE+LCBGb250RGF0YUNhY2hlS2V5SGFzaCwgRm9udERhdGFD
YWNoZUtleVRyYWl0cz4gRm9udERhdGFDYWNoZTsKK3R5cGVkZWYgSGFzaE1hcDxGb250UGxhdGZv
cm1EYXRhLCBSZWZQdHI8Rm9udD4sIEZvbnREYXRhQ2FjaGVLZXlIYXNoLCBGb250RGF0YUNhY2hl
S2V5VHJhaXRzPiBGb250RGF0YUNhY2hlOwogCiBzdGF0aWMgRm9udERhdGFDYWNoZSYgY2FjaGVk
Rm9udHMoKQogewpAQCAtMzc5LDcgKzM3OSw3IEBAIGNvbnN0IGludCBjVGFyZ2V0SW5hY3RpdmVG
b250RGF0YSA9IDIwMDsKIGNvbnN0IGludCBjTWF4VW5kZXJNZW1vcnlQcmVzc3VyZUluYWN0aXZl
Rm9udERhdGEgPSA1MDsKIGNvbnN0IGludCBjVGFyZ2V0VW5kZXJNZW1vcnlQcmVzc3VyZUluYWN0
aXZlRm9udERhdGEgPSAzMDsKIAotUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmZv
bnRGb3JGYW1pbHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0
IEF0b21pY1N0cmluZyYgZmFtaWx5LCBib29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSkKK1JlZlB0
cjxGb250PiBGb250Q2FjaGU6OmZvbnRGb3JGYW1pbHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiBm
b250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5LCBib29sIGNoZWNraW5n
QWx0ZXJuYXRlTmFtZSkKIHsKICAgICBpZiAoIW1fcHVyZ2VUaW1lci5pc0FjdGl2ZSgpKQogICAg
ICAgICBtX3B1cmdlVGltZXIuc3RhcnRPbmVTaG90KHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM6
Onplcm8oKSk7CkBAIC0zOTEsNyArMzkxLDcgQEAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250
Q2FjaGU6OmZvbnRGbwogICAgIHJldHVybiBmb250Rm9yUGxhdGZvcm1EYXRhKCpwbGF0Zm9ybURh
dGEpOwogfQogCi1SZWY8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Zm9udEZvclBsYXRmb3Jt
RGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEpCitSZWY8Rm9udD4gRm9u
dENhY2hlOjpmb250Rm9yUGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRm
b3JtRGF0YSkKIHsKICNpZiBQTEFURk9STShJT1MpCiAgICAgRm9udExvY2tlciBmb250TG9ja2Vy
OwpAQCAtMzk5LDcgKzM5OSw3IEBAIFJlZjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpmb250
Rm9yUGwKICAgICAKICAgICBhdXRvIGFkZFJlc3VsdCA9IGNhY2hlZEZvbnRzKCkuYWRkKHBsYXRm
b3JtRGF0YSwgbnVsbHB0cik7CiAgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQotICAgICAg
ICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gU2ltcGxlRm9udERhdGE6OmNyZWF0ZShwbGF0
Zm9ybURhdGEpOworICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gRm9udDo6Y3Jl
YXRlKHBsYXRmb3JtRGF0YSk7CiAKICAgICByZXR1cm4gKmFkZFJlc3VsdC5pdGVyYXRvci0+dmFs
dWU7CiB9CkBAIC00MTYsNyArNDE2LDcgQEAgdm9pZCBGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVG
b250RGF0YUlmTgogCiAgICAgaWYgKGNhY2hlZEZvbnRzKCkuc2l6ZSgpIDwgaW5hY3RpdmVGb250
RGF0YUxpbWl0KQogICAgICAgICByZXR1cm47Ci0gICAgaW50IGluYWN0aXZlQ291bnQgPSBpbmFj
dGl2ZUZvbnREYXRhQ291bnQoKTsKKyAgICBpbnQgaW5hY3RpdmVDb3VudCA9IGluYWN0aXZlRm9u
dENvdW50KCk7CiAgICAgaWYgKGluYWN0aXZlQ291bnQgPD0gaW5hY3RpdmVGb250RGF0YUxpbWl0
KQogICAgICAgICByZXR1cm47CiAKQEAgLTQzMiw3ICs0MzIsNyBAQCB2b2lkIEZvbnRDYWNoZTo6
cHVyZ2VJbmFjdGl2ZUZvbnREYXRhKGluCiAgICAgRm9udExvY2tlciBmb250TG9ja2VyOwogI2Vu
ZGlmCiAKLSAgICBWZWN0b3I8UmVmUHRyPFNpbXBsZUZvbnREYXRhPiwgMjA+IGZvbnRzVG9EZWxl
dGU7CisgICAgVmVjdG9yPFJlZlB0cjxGb250PiwgMjA+IGZvbnRzVG9EZWxldGU7CiAgICAgZm9y
IChhdXRvJiBmb250IDogY2FjaGVkRm9udHMoKS52YWx1ZXMoKSkgewogICAgICAgICBpZiAoIWZv
bnQtPmhhc09uZVJlZigpKQogICAgICAgICAgICAgY29udGludWU7CkBAIC00NjAsOCArNDYwLDgg
QEAgdm9pZCBGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YShpbgogICAgICAgICAgICAg
aWYgKHZlcnRpY2FsRGF0YSkKICAgICAgICAgICAgICAgICB2ZXJ0aWNhbERhdGEtPm1faW5Gb250
Q2FjaGUgPSBmYWxzZTsKICAgICAgICAgfQotICAgICAgICBmb3IgKGF1dG8mIGZvbnREYXRhIDog
Y2FjaGVkRm9udHMoKS52YWx1ZXMoKSkgewotICAgICAgICAgICAgYXV0byogdmVydGljYWxEYXRh
ID0gY29uc3RfY2FzdDxPcGVuVHlwZVZlcnRpY2FsRGF0YSo+KGZvbnREYXRhLT52ZXJ0aWNhbERh
dGEoKSk7CisgICAgICAgIGZvciAoYXV0byYgZm9udCA6IGNhY2hlZEZvbnRzKCkudmFsdWVzKCkp
IHsKKyAgICAgICAgICAgIGF1dG8qIHZlcnRpY2FsRGF0YSA9IGNvbnN0X2Nhc3Q8T3BlblR5cGVW
ZXJ0aWNhbERhdGEqPihmb250LT52ZXJ0aWNhbERhdGEoKSk7CiAgICAgICAgICAgICBpZiAodmVy
dGljYWxEYXRhKQogICAgICAgICAgICAgICAgIHZlcnRpY2FsRGF0YS0+bV9pbkZvbnRDYWNoZSA9
IHRydWU7CiAgICAgICAgIH0KQEAgLTQ3NywxMiArNDc3LDEyIEBAIHZvaWQgRm9udENhY2hlOjpw
dXJnZUluYWN0aXZlRm9udERhdGEoaW4KICNlbmRpZgogfQogCi1zaXplX3QgRm9udENhY2hlOjpm
b250RGF0YUNvdW50KCkKK3NpemVfdCBGb250Q2FjaGU6OmZvbnRDb3VudCgpCiB7CiAgICAgcmV0
dXJuIGNhY2hlZEZvbnRzKCkuc2l6ZSgpOwogfQogCi1zaXplX3QgRm9udENhY2hlOjppbmFjdGl2
ZUZvbnREYXRhQ291bnQoKQorc2l6ZV90IEZvbnRDYWNoZTo6aW5hY3RpdmVGb250Q291bnQoKQog
ewogI2lmIFBMQVRGT1JNKElPUykKICAgICBGb250TG9ja2VyIGZvbnRMb2NrZXI7CkBAIC01NDUs
NyArNTQ1LDcgQEAgdm9pZCBGb250Q2FjaGU6OmludmFsaWRhdGUoKQogfQogCiAjaWYgIVBMQVRG
T1JNKENPQ09BKQotUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OnNpbWlsYXJGb250
UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpCitSZWZQdHI8Rm9udD4gRm9udENh
Y2hlOjpzaW1pbGFyRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mKQogewogICAgIHJldHVybiBu
dWxscHRyOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
Y2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhY2hlLmgJKHJldmlzaW9uIDE3ODUxMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIGNsYXNz
IEZvbnRDYXNjYWRlOwogY2xhc3MgRm9udFBsYXRmb3JtRGF0YTsKIGNsYXNzIEZvbnRTZWxlY3Rv
cjsKIGNsYXNzIE9wZW5UeXBlVmVydGljYWxEYXRhOwotY2xhc3MgU2ltcGxlRm9udERhdGE7Citj
bGFzcyBGb250OwogCiAjaWYgUExBVEZPUk0oV0lOKQogI2lmIFVTRShJTUxBTkdfRk9OVF9MSU5L
MikKQEAgLTExMSw3ICsxMTEsNyBAQCBwdWJsaWM6CiAgICAgZnJpZW5kIEZvbnRDYWNoZSYgZm9u
dENhY2hlKCk7CiAKICAgICAvLyBUaGlzIG1ldGhvZCBpcyBpbXBsZW1lbnRlZCBieSB0aGUgcGxh
dGZvcm0uCi0gICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBzeXN0ZW1GYWxsYmFja0ZvckNoYXJh
Y3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgU2ltcGxlRm9udERhdGEqIG9yaWdp
bmFsRm9udERhdGEsIGJvb2wgaXNQbGF0Zm9ybUZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
LCBpbnQgbGVuZ3RoKTsKKyAgICBSZWZQdHI8Rm9udD4gc3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0
ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEZvbnQqIG9yaWdpbmFsRm9udERhdGEs
IGJvb2wgaXNQbGF0Zm9ybUZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3Ro
KTsKIAogICAgIC8vIEFsc28gaW1wbGVtZW50ZWQgYnkgdGhlIHBsYXRmb3JtLgogICAgIHZvaWQg
cGxhdGZvcm1Jbml0KCk7CkBAIC0xMjgsMTAgKzEyOCwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IGdldFRyYWl0c0luRmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYsIFZlY3Rvcjx1bnNpZ25lZD4m
KTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gZm9udEZvckZh
bWlseShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9taWNTdHJpbmcmLCBib29sIGNo
ZWNraW5nQWx0ZXJuYXRlTmFtZSA9IGZhbHNlKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWY8U2lt
cGxlRm9udERhdGE+IGxhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9u
Jik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgUmVmPFNpbXBsZUZvbnREYXRhPiBmb250Rm9yUGxhdGZv
cm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsKLSAgICBSZWZQdHI8U2ltcGxlRm9udERh
dGE+IHNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpOworICAg
IFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxGb250PiBmb250Rm9yRmFtaWx5KGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYsIGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1l
ID0gZmFsc2UpOworICAgIFdFQkNPUkVfRVhQT1JUIFJlZjxGb250PiBsYXN0UmVzb3J0RmFsbGJh
Y2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpOworICAgIFdFQkNPUkVfRVhQT1JUIFJlZjxG
b250PiBmb250Rm9yUGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsKKyAgICBS
ZWZQdHI8Rm9udD4gc2ltaWxhckZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJik7CiAKICAgICB2
b2lkIGFkZENsaWVudChGb250U2VsZWN0b3IqKTsKICAgICB2b2lkIHJlbW92ZUNsaWVudChGb250
U2VsZWN0b3IqKTsKQEAgLTEzOSwxMiArMTM5LDEyIEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBz
aG9ydCBnZW5lcmF0aW9uKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBpbnZhbGlkYXRlKCk7
CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBzaXplX3QgZm9udERhdGFDb3VudCgpOwotICAgIFdFQkNP
UkVfRVhQT1JUIHNpemVfdCBpbmFjdGl2ZUZvbnREYXRhQ291bnQoKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCBzaXplX3QgZm9udENvdW50KCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc2l6ZV90IGluYWN0
aXZlRm9udENvdW50KCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwdXJnZUluYWN0aXZlRm9u
dERhdGEoaW50IGNvdW50ID0gSU5UX01BWCk7CiAKICNpZiBQTEFURk9STShXSU4pCi0gICAgUmVm
UHRyPFNpbXBsZUZvbnREYXRhPiBmb250RGF0YUZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoY29u
c3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgTE9HRk9OVCYsIEF0b21pY1N0cmluZyYgb3V0Rm9u
dEZhbWlseU5hbWUpOworICAgIFJlZlB0cjxGb250PiBmb250RnJvbURlc2NyaXB0aW9uQW5kTG9n
Rm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBMT0dGT05UJiwgQXRvbWljU3RyaW5n
JiBvdXRGb250RmFtaWx5TmFtZSk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJU
SUNBTCkKQEAgLTE3Myw3ICsxNzMsNyBAQCBwcml2YXRlOgogICAgIC8vIFRoZXNlIG1ldGhvZHMg
YXJlIGltcGxlbWVudGVkIGJ5IGVhY2ggcGxhdGZvcm0uCiAjaWYgUExBVEZPUk0oSU9TKQogICAg
IEZvbnRQbGF0Zm9ybURhdGEqIGdldEN1c3RvbUZhbGxiYWNrRm9udChjb25zdCBVSW50MzIsIGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYpOwotICAgIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IGdl
dFN5c3RlbUZvbnRGYWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9uJiwg
Y29uc3QgU2ltcGxlRm9udERhdGEqLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0
aCk7CisgICAgUGFzc1JlZlB0cjxGb250PiBnZXRTeXN0ZW1Gb250RmFsbGJhY2tGb3JDaGFyYWN0
ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEZvbnQqLCBjb25zdCBVQ2hhciogY2hh
cmFjdGVycywgaW50IGxlbmd0aCk7CiAjZW5kaWYKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBs
YXRmb3JtRGF0YT4gY3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24m
LCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSk7CiAKQEAgLTE4Miw3ICsxODIsNyBAQCBwcml2
YXRlOgogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIGZyaWVuZCBjbGFzcyBDb21wbGV4VGV4dENv
bnRyb2xsZXI7CiAjZW5kaWYKLSAgICBmcmllbmQgY2xhc3MgU2ltcGxlRm9udERhdGE7CisgICAg
ZnJpZW5kIGNsYXNzIEZvbnQ7CiB9OwogCiAvLyBHZXQgdGhlIGdsb2JhbCBmb250Q2FjaGUuCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUu
Y3BwCShyZXZpc2lvbiAxNzg1MTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250Q2FzY2FkZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNCw4ICsxMjQsOCBAQCBGb250
Q2FzY2FkZTo6Rm9udENhc2NhZGUoY29uc3QgRm9udERlc2NyCiB9CiAKIC8vIEZJWE1FOiBXZSBz
aG91bGQgbWFrZSB0aGlzIGNvbnN0cnVjdG9yIHBsYXRmb3JtLWluZGVwZW5kZW50LgotRm9udENh
c2NhZGU6OkZvbnRDYXNjYWRlKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnREYXRhLCBib29s
IGlzUHJpbnRlckZvbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmdNb2RlKQotICAg
IDogbV9nbHlwaHMoRm9udEdseXBoczo6Y3JlYXRlRm9yUGxhdGZvcm1Gb250KGZvbnREYXRhKSkK
K0ZvbnRDYXNjYWRlOjpGb250Q2FzY2FkZShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBmb250LCBi
b29sIGlzUHJpbnRlckZvbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmdNb2RlKQor
ICAgIDogbV9nbHlwaHMoRm9udEdseXBoczo6Y3JlYXRlRm9yUGxhdGZvcm1Gb250KGZvbnQpKQog
ICAgICwgbV9sZXR0ZXJTcGFjaW5nKDApCiAgICAgLCBtX3dvcmRTcGFjaW5nKDApCiAgICAgLCBt
X3VzZUJhY2tzbGFzaEFzWWVuU3ltYm9sKGZhbHNlKQpAQCAtMTM0LDI3ICsxMzQsMjcgQEAgRm9u
dENhc2NhZGU6OkZvbnRDYXNjYWRlKGNvbnN0IEZvbnRQbGF0ZgogICAgIG1fZm9udERlc2NyaXB0
aW9uLnNldFVzZVByaW50ZXJGb250KGlzUHJpbnRlckZvbnQpOwogICAgIG1fZm9udERlc2NyaXB0
aW9uLnNldEZvbnRTbW9vdGhpbmcoZm9udFNtb290aGluZ01vZGUpOwogI2lmIFBMQVRGT1JNKElP
UykKLSAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKENURm9udEdldFNpemUo
Zm9udERhdGEuZm9udCgpKSk7Ci0gICAgbV9mb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXpl
KENURm9udEdldFNpemUoZm9udERhdGEuZm9udCgpKSk7Ci0gICAgbV9mb250RGVzY3JpcHRpb24u
c2V0SXNJdGFsaWMoQ1RGb250R2V0U3ltYm9saWNUcmFpdHMoZm9udERhdGEuZm9udCgpKSAmIGtD
VEZvbnRUcmFpdEl0YWxpYyk7Ci0gICAgbV9mb250RGVzY3JpcHRpb24uc2V0V2VpZ2h0KChDVEZv
bnRHZXRTeW1ib2xpY1RyYWl0cyhmb250RGF0YS5mb250KCkpICYga0NURm9udFRyYWl0Qm9sZCkg
PyBGb250V2VpZ2h0Qm9sZCA6IEZvbnRXZWlnaHROb3JtYWwpOworICAgIG1fZm9udERlc2NyaXB0
aW9uLnNldFNwZWNpZmllZFNpemUoQ1RGb250R2V0U2l6ZShmb250LmZvbnQoKSkpOworICAgIG1f
Zm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShDVEZvbnRHZXRTaXplKGZvbnQuZm9udCgp
KSk7CisgICAgbV9mb250RGVzY3JpcHRpb24uc2V0SXNJdGFsaWMoQ1RGb250R2V0U3ltYm9saWNU
cmFpdHMoZm9udC5mb250KCkpICYga0NURm9udFRyYWl0SXRhbGljKTsKKyAgICBtX2ZvbnREZXNj
cmlwdGlvbi5zZXRXZWlnaHQoKENURm9udEdldFN5bWJvbGljVHJhaXRzKGZvbnQuZm9udCgpKSAm
IGtDVEZvbnRUcmFpdEJvbGQpID8gRm9udFdlaWdodEJvbGQgOiBGb250V2VpZ2h0Tm9ybWFsKTsK
ICNlbmRpZgogfQogCiAvLyBGSVhNRTogV2Ugc2hvdWxkIG1ha2UgdGhpcyBjb25zdHJ1Y3RvciBw
bGF0Zm9ybS1pbmRlcGVuZGVudC4KICNpZiBQTEFURk9STShJT1MpCi1Gb250Q2FzY2FkZTo6Rm9u
dENhc2NhZGUoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZm9udERhdGEsIFBhc3NSZWZQdHI8Rm9u
dFNlbGVjdG9yPiBmb250U2VsZWN0b3IpCi0gICAgOiBtX2dseXBocyhGb250R2x5cGhzOjpjcmVh
dGVGb3JQbGF0Zm9ybUZvbnQoZm9udERhdGEpKQorRm9udENhc2NhZGU6OkZvbnRDYXNjYWRlKGNv
bnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnQsIFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPiBmb250
U2VsZWN0b3IpCisgICAgOiBtX2dseXBocyhGb250R2x5cGhzOjpjcmVhdGVGb3JQbGF0Zm9ybUZv
bnQoZm9udCkpCiAgICAgLCBtX2xldHRlclNwYWNpbmcoMCkKICAgICAsIG1fd29yZFNwYWNpbmco
MCkKICAgICAsIG1fdHlwZXNldHRpbmdGZWF0dXJlcyhjb21wdXRlVHlwZXNldHRpbmdGZWF0dXJl
cygpKQogewotICAgIENURm9udFJlZiBwcmltYXJ5Rm9udCA9IGZvbnREYXRhLmZvbnQoKTsKKyAg
ICBDVEZvbnRSZWYgcHJpbWFyeUZvbnQgPSBmb250LmZvbnQoKTsKICAgICBtX2ZvbnREZXNjcmlw
dGlvbi5zZXRTcGVjaWZpZWRTaXplKENURm9udEdldFNpemUocHJpbWFyeUZvbnQpKTsKICAgICBt
X2ZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoQ1RGb250R2V0U2l6ZShwcmltYXJ5Rm9u
dCkpOwogICAgIG1fZm9udERlc2NyaXB0aW9uLnNldElzSXRhbGljKENURm9udEdldFN5bWJvbGlj
VHJhaXRzKHByaW1hcnlGb250KSAmIGtDVEZvbnRUcmFpdEl0YWxpYyk7CiAgICAgbV9mb250RGVz
Y3JpcHRpb24uc2V0V2VpZ2h0KChDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhwcmltYXJ5Rm9udCkg
JiBrQ1RGb250VHJhaXRCb2xkKSA/IEZvbnRXZWlnaHRCb2xkIDogRm9udFdlaWdodE5vcm1hbCk7
Ci0gICAgbV9mb250RGVzY3JpcHRpb24uc2V0VXNlUHJpbnRlckZvbnQoZm9udERhdGEuaXNQcmlu
dGVyRm9udCgpKTsKKyAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRVc2VQcmludGVyRm9udChmb250
LmlzUHJpbnRlckZvbnQoKSk7CiAgICAgbV9nbHlwaHMgPSByZXRyaWV2ZU9yQWRkQ2FjaGVkRm9u
dEdseXBocyhtX2ZvbnREZXNjcmlwdGlvbiwgZm9udFNlbGVjdG9yLmdldCgpKTsKIH0KICNlbmRp
ZgpAQCAtMzcwLDcgKzM3MCw3IEBAIHZvaWQgRm9udENhc2NhZGU6OmRyYXdFbXBoYXNpc01hcmtz
KEdyYXAKICAgICAgICAgZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChjb250ZXh0LCBy
dW4sIG1hcmssIHBvaW50LCBmcm9tLCB0byk7CiB9CiAKLWZsb2F0IEZvbnRDYXNjYWRlOjp3aWR0
aChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFs
bGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKK2Zsb2F0IEZv
bnRDYXNjYWRlOjp3aWR0aChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgRm9udCo+
KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAogewog
ICAgIENvZGVQYXRoIGNvZGVQYXRoVG9Vc2UgPSBjb2RlUGF0aChydW4pOwogICAgIGlmIChjb2Rl
UGF0aFRvVXNlICE9IENvbXBsZXgpIHsKQEAgLTM4OCw3ICszODgsNyBAQCBmbG9hdCBGb250Q2Fz
Y2FkZTo6d2lkdGgoY29uc3QgVGV4dFJ1biYgCiAgICAgaWYgKGNhY2hlRW50cnkgJiYgIXN0ZDo6
aXNuYW4oKmNhY2hlRW50cnkpKQogICAgICAgICByZXR1cm4gKmNhY2hlRW50cnk7CiAKLSAgICBI
YXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4gbG9jYWxGYWxsYmFja0ZvbnRzOworICAgIEhh
c2hTZXQ8Y29uc3QgRm9udCo+IGxvY2FsRmFsbGJhY2tGb250czsKICAgICBpZiAoIWZhbGxiYWNr
Rm9udHMpCiAgICAgICAgIGZhbGxiYWNrRm9udHMgPSAmbG9jYWxGYWxsYmFja0ZvbnRzOwogCkBA
IC00MTUsMTAgKzQxNSwxMCBAQCBmbG9hdCBGb250Q2FzY2FkZTo6d2lkdGgoY29uc3QgVGV4dFJ1
biYgCiAgICAgcmV0dXJuIHdpZHRoKHJ1bik7CiB9CiAKLUdseXBoRGF0YSBGb250Q2FzY2FkZTo6
Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYywgYm9vbCBtaXJyb3IsIEZvbnREYXRhVmFy
aWFudCB2YXJpYW50KSBjb25zdAorR2x5cGhEYXRhIEZvbnRDYXNjYWRlOjpnbHlwaERhdGFGb3JD
aGFyYWN0ZXIoVUNoYXIzMiBjLCBib29sIG1pcnJvciwgRm9udFZhcmlhbnQgdmFyaWFudCkgY29u
c3QKIHsKICAgICBpZiAodmFyaWFudCA9PSBBdXRvVmFyaWFudCkgewotICAgICAgICBpZiAobV9m
b250RGVzY3JpcHRpb24uc21hbGxDYXBzKCkgJiYgIXByaW1hcnlGb250RGF0YSgpLmlzU1ZHRm9u
dCgpKSB7CisgICAgICAgIGlmIChtX2ZvbnREZXNjcmlwdGlvbi5zbWFsbENhcHMoKSAmJiAhcHJp
bWFyeUZvbnQoKS5pc1NWR0ZvbnQoKSkgewogICAgICAgICAgICAgVUNoYXIzMiB1cHBlckMgPSB1
X3RvdXBwZXIoYyk7CiAgICAgICAgICAgICBpZiAodXBwZXJDICE9IGMpIHsKICAgICAgICAgICAg
ICAgICBjID0gdXBwZXJDOwpAQCAtNDQ1LDcgKzQ0NSw3IEBAIHZvaWQgRm9udENhc2NhZGU6OmRl
bGV0ZUxheW91dChUZXh0TGF5b3UKIHsKIH0KIAotZmxvYXQgRm9udENhc2NhZGU6OndpZHRoKFRl
eHRMYXlvdXQmLCB1bnNpZ25lZCwgdW5zaWduZWQsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERh
dGEqPiopCitmbG9hdCBGb250Q2FzY2FkZTo6d2lkdGgoVGV4dExheW91dCYsIHVuc2lnbmVkLCB1
bnNpZ25lZCwgSGFzaFNldDxjb25zdCBGb250Kj4qKQogewogICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgIHJldHVybiAwOwpAQCAtNTA0LDcgKzUwNCw3IEBAIGJvb2wgRm9udENhc2NhZGU6
Omhhc1ZhbGlkQXZlcmFnZUNoYXJXaWQKIAogI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0o
SU9TKQogICAgIC8vIEludGVybmFsIGZvbnRzIG9uIE9TIFggYW5kIGlPUyBhbHNvIGhhdmUgYW4g
aW52YWxpZCBlbnRyeSBpbiB0aGUgdGFibGUgZm9yIGF2Z0NoYXJXaWR0aC4KLSAgICBpZiAocHJp
bWFyeUZvbnREYXRhSXNTeXN0ZW1Gb250KCkpCisgICAgaWYgKHByaW1hcnlGb250SXNTeXN0ZW1G
b250KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgogCkBAIC01MjQsNyArNTI0LDcg
QEAgYm9vbCBGb250Q2FzY2FkZTo6ZmFzdEF2ZXJhZ2VDaGFyV2lkdGhJZgogewogICAgIGJvb2wg
c3VjY2VzcyA9IGhhc1ZhbGlkQXZlcmFnZUNoYXJXaWR0aCgpOwogICAgIGlmIChzdWNjZXNzKQot
ICAgICAgICB3aWR0aCA9IHJvdW5kZihwcmltYXJ5Rm9udERhdGEoKS5hdmdDaGFyV2lkdGgoKSk7
IC8vIEZJWE1FOiBwcmltYXJ5Rm9udERhdGEoKSBtaWdodCBub3QgY29ycmVzcG9uZCB0byBmaXJz
dEZhbWlseSgpLgorICAgICAgICB3aWR0aCA9IHJvdW5kZihwcmltYXJ5Rm9udCgpLmF2Z0NoYXJX
aWR0aCgpKTsgLy8gRklYTUU6IHByaW1hcnlGb250KCkgbWlnaHQgbm90IGNvcnJlc3BvbmQgdG8g
Zmlyc3RGYW1pbHkoKS4KICAgICByZXR1cm4gc3VjY2VzczsKIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oCShyZXZpc2lvbiAxNzg1
MTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNiwxMCArMjYsMTAgQEAKICNkZWZpbmUgRm9udENhc2NhZGVfaAog
CiAjaW5jbHVkZSAiRGFzaEFycmF5LmgiCisjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkZv
bnREZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgIkZvbnRHbHlwaHMuaCIKICNpbmNsdWRlICJQYXRo
LmgiCi0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKICNpbmNsdWRlICJUZXh0RGlyZWN0aW9u
LmgiCiAjaW5jbHVkZSAiVHlwZXNldHRpbmdGZWF0dXJlcy5oIgogI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CkBAIC0xMzQsMTcgKzEzNCwxNyBAQCBwdWJsaWM6CiAKICAgICBlbnVtIEN1c3RvbUZv
bnROb3RSZWFkeUFjdGlvbiB7IERvTm90UGFpbnRJZkZvbnROb3RSZWFkeSwgVXNlRmFsbGJhY2tJ
ZkZvbnROb3RSZWFkeSB9OwogICAgIFdFQkNPUkVfRVhQT1JUIGZsb2F0IGRyYXdUZXh0KEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20g
PSAwLCBpbnQgdG8gPSAtMSwgQ3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID0gRG9Ob3RQYWludElm
Rm9udE5vdFJlYWR5KSBjb25zdDsKLSAgICB2b2lkIGRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgU2ltcGxlRm9udERhdGEqLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBmcm9tLCBp
bnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CisgICAgdm9pZCBkcmF3R2x5
cGhzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZvbnQqLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGlu
dCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CiAgICAgdm9p
ZCBkcmF3RW1waGFzaXNNYXJrcyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29u
c3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20gPSAwLCBp
bnQgdG8gPSAtMSkgY29uc3Q7CiAKICAgICBEYXNoQXJyYXkgZGFzaGVzRm9ySW50ZXJzZWN0aW9u
c1dpdGhSZWN0KGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLCBj
b25zdCBGbG9hdFJlY3QmIGxpbmVFeHRlbnRzKSBjb25zdDsKIAotICAgIFdFQkNPUkVfRVhQT1JU
IGZsb2F0IHdpZHRoKGNvbnN0IFRleHRSdW4mLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRh
Kj4qIGZhbGxiYWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93KiA9IDApIGNvbnN0OworICAgIFdF
QkNPUkVfRVhQT1JUIGZsb2F0IHdpZHRoKGNvbnN0IFRleHRSdW4mLCBIYXNoU2V0PGNvbnN0IEZv
bnQqPiogZmFsbGJhY2tGb250cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29uc3Q7CiAgICAg
ZmxvYXQgd2lkdGgoY29uc3QgVGV4dFJ1biYsIGludCYgY2hhcnNDb25zdW1lZCwgU3RyaW5nJiBn
bHlwaE5hbWUpIGNvbnN0OwogCiAgICAgUGFzc093blB0cjxUZXh0TGF5b3V0PiBjcmVhdGVMYXlv
dXQoUmVuZGVyVGV4dCosIGZsb2F0IHhQb3MsIGJvb2wgY29sbGFwc2VXaGl0ZVNwYWNlKSBjb25z
dDsKICAgICBzdGF0aWMgdm9pZCBkZWxldGVMYXlvdXQoVGV4dExheW91dCopOwotICAgIHN0YXRp
YyBmbG9hdCB3aWR0aChUZXh0TGF5b3V0JiwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBI
YXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwKTsKKyAgICBz
dGF0aWMgZmxvYXQgd2lkdGgoVGV4dExheW91dCYsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxl
biwgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMgPSAwKTsKIAogICAgIGludCBv
ZmZzZXRGb3JQb3NpdGlvbihjb25zdCBUZXh0UnVuJiwgZmxvYXQgcG9zaXRpb24sIGJvb2wgaW5j
bHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0OwogICAgIHZvaWQgYWRqdXN0U2VsZWN0aW9uUmVjdEZv
clRleHQoY29uc3QgVGV4dFJ1biYsIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9t
ID0gMCwgaW50IHRvID0gLTEpIGNvbnN0OwpAQCAtMTcyLDEwICsxNzIsMTAgQEAgcHVibGljOgog
CiAgICAgYm9vbCBpc1BsYXRmb3JtRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fZ2x5cGhzLT5pc0Zv
clBsYXRmb3JtRm9udCgpOyB9CiAKLSAgICBjb25zdCBGb250TWV0cmljcyYgZm9udE1ldHJpY3Mo
KSBjb25zdCB7IHJldHVybiBwcmltYXJ5Rm9udERhdGEoKS5mb250TWV0cmljcygpOyB9Ci0gICAg
ZmxvYXQgc3BhY2VXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIHByaW1hcnlGb250RGF0YSgpLnNwYWNl
V2lkdGgoKSArIG1fbGV0dGVyU3BhY2luZzsgfQotICAgIGZsb2F0IHRhYldpZHRoKGNvbnN0IFNp
bXBsZUZvbnREYXRhJiwgdW5zaWduZWQgdGFiU2l6ZSwgZmxvYXQgcG9zaXRpb24pIGNvbnN0Owot
ICAgIGZsb2F0IHRhYldpZHRoKHVuc2lnbmVkIHRhYlNpemUsIGZsb2F0IHBvc2l0aW9uKSBjb25z
dCB7IHJldHVybiB0YWJXaWR0aChwcmltYXJ5Rm9udERhdGEoKSwgdGFiU2l6ZSwgcG9zaXRpb24p
OyB9CisgICAgY29uc3QgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzKCkgY29uc3QgeyByZXR1cm4g
cHJpbWFyeUZvbnQoKS5mb250TWV0cmljcygpOyB9CisgICAgZmxvYXQgc3BhY2VXaWR0aCgpIGNv
bnN0IHsgcmV0dXJuIHByaW1hcnlGb250KCkuc3BhY2VXaWR0aCgpICsgbV9sZXR0ZXJTcGFjaW5n
OyB9CisgICAgZmxvYXQgdGFiV2lkdGgoY29uc3QgRm9udCYsIHVuc2lnbmVkIHRhYlNpemUsIGZs
b2F0IHBvc2l0aW9uKSBjb25zdDsKKyAgICBmbG9hdCB0YWJXaWR0aCh1bnNpZ25lZCB0YWJTaXpl
LCBmbG9hdCBwb3NpdGlvbikgY29uc3QgeyByZXR1cm4gdGFiV2lkdGgocHJpbWFyeUZvbnQoKSwg
dGFiU2l6ZSwgcG9zaXRpb24pOyB9CiAgICAgYm9vbCBoYXNWYWxpZEF2ZXJhZ2VDaGFyV2lkdGgo
KSBjb25zdDsKICAgICBib29sIGZhc3RBdmVyYWdlQ2hhcldpZHRoSWZBdmFpbGFibGUoZmxvYXQg
JndpZHRoKSBjb25zdDsgLy8gcmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MKIApAQCAtMTgzLDEyICsx
ODMsMTIgQEAgcHVibGljOgogICAgIGludCBlbXBoYXNpc01hcmtEZXNjZW50KGNvbnN0IEF0b21p
Y1N0cmluZyYpIGNvbnN0OwogICAgIGludCBlbXBoYXNpc01hcmtIZWlnaHQoY29uc3QgQXRvbWlj
U3RyaW5nJikgY29uc3Q7CiAKLSAgICBjb25zdCBTaW1wbGVGb250RGF0YSYgcHJpbWFyeUZvbnRE
YXRhKCkgY29uc3Q7CisgICAgY29uc3QgRm9udCYgcHJpbWFyeUZvbnQoKSBjb25zdDsKICAgICBj
b25zdCBGb250UmFuZ2VzJiBmYWxsYmFja1Jhbmdlc0F0KHVuc2lnbmVkKSBjb25zdDsKLSAgICBH
bHlwaERhdGEgZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIsIGJvb2wgbWlycm9yLCBGb250
RGF0YVZhcmlhbnQgPSBBdXRvVmFyaWFudCkgY29uc3Q7CisgICAgR2x5cGhEYXRhIGdseXBoRGF0
YUZvckNoYXJhY3RlcihVQ2hhcjMyLCBib29sIG1pcnJvciwgRm9udFZhcmlhbnQgPSBBdXRvVmFy
aWFudCkgY29uc3Q7CiAgICAgCiAjaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgY29uc3QgU2ltcGxl
Rm9udERhdGEqIGZvbnREYXRhRm9yQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY29uc3QgVUNo
YXIqLCBzaXplX3QgbGVuZ3RoLCBGb250RGF0YVZhcmlhbnQpIGNvbnN0OworICAgIGNvbnN0IEZv
bnQqIGZvbnRGb3JDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBVQ2hhciosIHNpemVf
dCBsZW5ndGgsIEZvbnRWYXJpYW50KSBjb25zdDsKICNlbmRpZgogCiAgICAgc3RhdGljIGJvb2wg
aXNDSktJZGVvZ3JhcGgoVUNoYXIzMik7CkBAIC0yMDcsNyArMjA3LDcgQEAgcHVibGljOgogICAg
IHN0YXRpYyBDb2RlUGF0aCBjaGFyYWN0ZXJSYW5nZUNvZGVQYXRoKGNvbnN0IExDaGFyKiwgdW5z
aWduZWQpIHsgcmV0dXJuIFNpbXBsZTsgfQogICAgIHN0YXRpYyBDb2RlUGF0aCBjaGFyYWN0ZXJS
YW5nZUNvZGVQYXRoKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgbGVuKTsKIAotICAgIGJvb2wgcHJp
bWFyeUZvbnREYXRhSXNTeXN0ZW1Gb250KCkgY29uc3Q7CisgICAgYm9vbCBwcmltYXJ5Rm9udElz
U3lzdGVtRm9udCgpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIGVudW0gRm9yVGV4dEVtcGhhc2lz
T3JOb3QgeyBOb3RGb3JUZXh0RW1waGFzaXMsIEZvclRleHRFbXBoYXNpcyB9OwpAQCAtMjE4LDcg
KzIxOCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrc0ZvclNpbXBsZVRl
eHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21pY1N0cmluZyYg
bWFyaywgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0OwogICAgIHZv
aWQgZHJhd0dseXBoQnVmZmVyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25z
dCBHbHlwaEJ1ZmZlciYsIEZsb2F0UG9pbnQmKSBjb25zdDsKICAgICB2b2lkIGRyYXdFbXBoYXNp
c01hcmtzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBHbHlwaEJ1ZmZl
ciYsIGNvbnN0IEF0b21pY1N0cmluZyYsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKLSAgICBm
bG9hdCBmbG9hdFdpZHRoRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiwgSGFzaFNldDxjb25z
dCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAw
KSBjb25zdDsKKyAgICBmbG9hdCBmbG9hdFdpZHRoRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVu
JiwgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93
KiA9IDApIGNvbnN0OwogICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbkZvclNpbXBsZVRleHQoY29u
c3QgVGV4dFJ1biYsIGZsb2F0IHBvc2l0aW9uLCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBj
b25zdDsKICAgICB2b2lkIGFkanVzdFNlbGVjdGlvblJlY3RGb3JTaW1wbGVUZXh0KGNvbnN0IFRl
eHRSdW4mLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBpbnQgZnJvbSwgaW50IHRvKSBjb25z
dDsKIApAQCAtMjMxLDcgKzIzMSw3IEBAIHByaXZhdGU6CiAgICAgZmxvYXQgZ2V0R2x5cGhzQW5k
QWR2YW5jZXNGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwgaW50IGZyb20sIGludCB0bywg
R2x5cGhCdWZmZXImLCBGb3JUZXh0RW1waGFzaXNPck5vdCA9IE5vdEZvclRleHRFbXBoYXNpcykg
Y29uc3Q7CiAgICAgZmxvYXQgZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0
IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20sIGludCB0bykgY29uc3Q7CiAg
ICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCos
IGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9p
bnQmLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdDsKLSAgICBmbG9hdCBmbG9hdFdpZHRoRm9yQ29t
cGxleFRleHQoY29uc3QgVGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiog
ZmFsbGJhY2tGb250cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29uc3Q7CisgICAgZmxvYXQg
ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBIYXNoU2V0PGNvbnN0IEZv
bnQqPiogZmFsbGJhY2tGb250cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29uc3Q7CiAgICAg
aW50IG9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYsIGZsb2F0
IHBvc2l0aW9uLCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdDsKICAgICB2b2lkIGFk
anVzdFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwgTGF5b3V0UmVj
dCYgc2VsZWN0aW9uUmVjdCwgaW50IGZyb20sIGludCB0bykgY29uc3Q7CiAKQEAgLTM1MSwxMCAr
MzUxLDEwIEBAIGlubGluZSBGb250Q2FzY2FkZTo6fkZvbnRDYXNjYWRlKCkKIHsKIH0KIAotaW5s
aW5lIGNvbnN0IFNpbXBsZUZvbnREYXRhJiBGb250Q2FzY2FkZTo6cHJpbWFyeUZvbnREYXRhKCkg
Y29uc3QKK2lubGluZSBjb25zdCBGb250JiBGb250Q2FzY2FkZTo6cHJpbWFyeUZvbnQoKSBjb25z
dAogewogICAgIEFTU0VSVChtX2dseXBocyk7Ci0gICAgcmV0dXJuIG1fZ2x5cGhzLT5wcmltYXJ5
U2ltcGxlRm9udERhdGEobV9mb250RGVzY3JpcHRpb24pOworICAgIHJldHVybiBtX2dseXBocy0+
cHJpbWFyeUZvbnQobV9mb250RGVzY3JpcHRpb24pOwogfQogCiBpbmxpbmUgY29uc3QgRm9udFJh
bmdlcyYgRm9udENhc2NhZGU6OmZhbGxiYWNrUmFuZ2VzQXQodW5zaWduZWQgaW5kZXgpIGNvbnN0
CkBAIC0zNzQsMTMgKzM3NCwxMyBAQCBpbmxpbmUgRm9udFNlbGVjdG9yKiBGb250Q2FzY2FkZTo6
Zm9udFNlCiAgICAgcmV0dXJuIG1fZ2x5cGhzID8gbV9nbHlwaHMtPmZvbnRTZWxlY3RvcigpIDog
MDsKIH0KIAotaW5saW5lIGZsb2F0IEZvbnRDYXNjYWRlOjp0YWJXaWR0aChjb25zdCBTaW1wbGVG
b250RGF0YSYgZm9udERhdGEsIHVuc2lnbmVkIHRhYlNpemUsIGZsb2F0IHBvc2l0aW9uKSBjb25z
dAoraW5saW5lIGZsb2F0IEZvbnRDYXNjYWRlOjp0YWJXaWR0aChjb25zdCBGb250JiBmb250LCB1
bnNpZ25lZCB0YWJTaXplLCBmbG9hdCBwb3NpdGlvbikgY29uc3QKIHsKICAgICBpZiAoIXRhYlNp
emUpCiAgICAgICAgIHJldHVybiBsZXR0ZXJTcGFjaW5nKCk7Ci0gICAgZmxvYXQgdGFiV2lkdGgg
PSB0YWJTaXplICogZm9udERhdGEuc3BhY2VXaWR0aCgpICsgbGV0dGVyU3BhY2luZygpOworICAg
IGZsb2F0IHRhYldpZHRoID0gdGFiU2l6ZSAqIGZvbnQuc3BhY2VXaWR0aCgpICsgbGV0dGVyU3Bh
Y2luZygpOwogICAgIGZsb2F0IHRhYkRlbHRhV2lkdGggPSB0YWJXaWR0aCAtIGZtb2RmKHBvc2l0
aW9uLCB0YWJXaWR0aCk7Ci0gICAgcmV0dXJuICh0YWJEZWx0YVdpZHRoIDwgZm9udERhdGEuc3Bh
Y2VXaWR0aCgpIC8gMikgPyB0YWJXaWR0aCA6IHRhYkRlbHRhV2lkdGg7CisgICAgcmV0dXJuICh0
YWJEZWx0YVdpZHRoIDwgZm9udC5zcGFjZVdpZHRoKCkgLyAyKSA/IHRhYldpZHRoIDogdGFiRGVs
dGFXaWR0aDsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udENhc2NhZGVGYXN0UGF0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGYXN0UGF0aC5jcHAJKHJldmlzaW9uIDE3ODUxMCkJ
KGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhc3RQYXRoLmNwcDox
Nzg1MTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZh
c3RQYXRoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM0MSBAQAorLyoqCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDMsIDIwMDYsIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA4IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKKworI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgor
I2luY2x1ZGUgIkZvbnRHbHlwaHMuaCIKKyNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgorI2luY2x1
ZGUgIkxheW91dFJlY3QuaCIKKyNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgorI2luY2x1ZGUg
IlRleHRSdW4uaCIKKyNpbmNsdWRlICJXaWR0aEl0ZXJhdG9yLmgiCisjaW5jbHVkZSA8d3RmL01h
aW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi91
bmljb2RlL0NoYXJhY3Rlck5hbWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXVEY7Cit1c2luZyBu
YW1lc3BhY2UgVW5pY29kZTsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBGSVhNRTogVGhp
cyBmdW5jdGlvbiBtYXkgbm90IHdvcmsgaWYgdGhlIGVtcGhhc2lzIG1hcmsgdXNlcyBhIGNvbXBs
ZXggc2NyaXB0LCBidXQgbm9uZSBvZiB0aGUKKy8vIHN0YW5kYXJkIGVtcGhhc2lzIG1hcmtzIGRv
IHNvLgorYm9vbCBGb250Q2FzY2FkZTo6Z2V0RW1waGFzaXNNYXJrR2x5cGhEYXRhKGNvbnN0IEF0
b21pY1N0cmluZyYgbWFyaywgR2x5cGhEYXRhJiBnbHlwaERhdGEpIGNvbnN0Cit7CisgICAgaWYg
KG1hcmsuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBVQ2hhcjMyIGNo
YXJhY3RlciA9IG1hcmtbMF07CisKKyAgICBpZiAoVTE2X0lTX1NVUlJPR0FURShjaGFyYWN0ZXIp
KSB7CisgICAgICAgIGlmICghVTE2X0lTX1NVUlJPR0FURV9MRUFEKGNoYXJhY3RlcikpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKG1hcmsubGVuZ3RoKCkgPCAyKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIFVDaGFyIGxvdyA9IG1hcmtbMV07
CisgICAgICAgIGlmICghVTE2X0lTX1RSQUlMKGxvdykpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAgICAgY2hhcmFjdGVyID0gVTE2X0dFVF9TVVBQTEVNRU5UQVJZKGNoYXJhY3Rl
ciwgbG93KTsKKyAgICB9CisKKyAgICBnbHlwaERhdGEgPSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIo
Y2hhcmFjdGVyLCBmYWxzZSwgRW1waGFzaXNNYXJrVmFyaWFudCk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2ludCBGb250Q2FzY2FkZTo6ZW1waGFzaXNNYXJrQXNjZW50KGNvbnN0IEF0b21pY1N0
cmluZyYgbWFyaykgY29uc3QKK3sKKyAgICBHbHlwaERhdGEgbWFya0dseXBoRGF0YTsKKyAgICBp
ZiAoIWdldEVtcGhhc2lzTWFya0dseXBoRGF0YShtYXJrLCBtYXJrR2x5cGhEYXRhKSkKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICBjb25zdCBTaW1wbGVGb250RGF0YSogbWFya0ZvbnREYXRhID0g
bWFya0dseXBoRGF0YS5mb250RGF0YTsKKyAgICBBU1NFUlQobWFya0ZvbnREYXRhKTsKKyAgICBp
ZiAoIW1hcmtGb250RGF0YSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gbWFya0Zv
bnREYXRhLT5mb250TWV0cmljcygpLmFzY2VudCgpOworfQorCitpbnQgRm9udENhc2NhZGU6OmVt
cGhhc2lzTWFya0Rlc2NlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrKSBjb25zdAoreworICAg
IEdseXBoRGF0YSBtYXJrR2x5cGhEYXRhOworICAgIGlmICghZ2V0RW1waGFzaXNNYXJrR2x5cGhE
YXRhKG1hcmssIG1hcmtHbHlwaERhdGEpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGNvbnN0
IFNpbXBsZUZvbnREYXRhKiBtYXJrRm9udERhdGEgPSBtYXJrR2x5cGhEYXRhLmZvbnREYXRhOwor
ICAgIEFTU0VSVChtYXJrRm9udERhdGEpOworICAgIGlmICghbWFya0ZvbnREYXRhKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIHJldHVybiBtYXJrRm9udERhdGEtPmZvbnRNZXRyaWNzKCkuZGVz
Y2VudCgpOworfQorCitpbnQgRm9udENhc2NhZGU6OmVtcGhhc2lzTWFya0hlaWdodChjb25zdCBB
dG9taWNTdHJpbmcmIG1hcmspIGNvbnN0Cit7CisgICAgR2x5cGhEYXRhIG1hcmtHbHlwaERhdGE7
CisgICAgaWYgKCFnZXRFbXBoYXNpc01hcmtHbHlwaERhdGEobWFyaywgbWFya0dseXBoRGF0YSkp
CisgICAgICAgIHJldHVybiAwOworCisgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIG1hcmtGb250
RGF0YSA9IG1hcmtHbHlwaERhdGEuZm9udERhdGE7CisgICAgQVNTRVJUKG1hcmtGb250RGF0YSk7
CisgICAgaWYgKCFtYXJrRm9udERhdGEpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJu
IG1hcmtGb250RGF0YS0+Zm9udE1ldHJpY3MoKS5oZWlnaHQoKTsKK30KKworZmxvYXQgRm9udENh
c2NhZGU6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBy
dW4sIGludCBmcm9tLCBpbnQgdG8sIEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgRm9yVGV4dEVt
cGhhc2lzT3JOb3QgZm9yVGV4dEVtcGhhc2lzKSBjb25zdAoreworICAgIGZsb2F0IGluaXRpYWxB
ZHZhbmNlOworCisgICAgV2lkdGhJdGVyYXRvciBpdCh0aGlzLCBydW4sIDAsIGZhbHNlLCBmb3JU
ZXh0RW1waGFzaXMpOworICAgIC8vIEZJWE1FOiBVc2luZyBzZXBhcmF0ZSBnbHlwaCBidWZmZXJz
IGZvciB0aGUgcHJlZml4IGFuZCB0aGUgc3VmZml4IGlzIGluY29ycmVjdCB3aGVuIGtlcm5pbmcg
b3IKKyAgICAvLyBsaWdhdHVyZXMgYXJlIGVuYWJsZWQuCisgICAgR2x5cGhCdWZmZXIgbG9jYWxH
bHlwaEJ1ZmZlcjsKKyAgICBpdC5hZHZhbmNlKGZyb20sICZsb2NhbEdseXBoQnVmZmVyKTsKKyAg
ICBmbG9hdCBiZWZvcmVXaWR0aCA9IGl0Lm1fcnVuV2lkdGhTb0ZhcjsKKyAgICBpdC5hZHZhbmNl
KHRvLCAmZ2x5cGhCdWZmZXIpOworCisgICAgaWYgKGdseXBoQnVmZmVyLmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICBmbG9hdCBhZnRlcldpZHRoID0gaXQubV9ydW5XaWR0aFNv
RmFyOworCisgICAgaWYgKHJ1bi5ydGwoKSkgeworICAgICAgICBmbG9hdCBmaW5hbFJvdW5kaW5n
V2lkdGggPSBpdC5tX2ZpbmFsUm91bmRpbmdXaWR0aDsKKyAgICAgICAgaXQuYWR2YW5jZShydW4u
bGVuZ3RoKCksICZsb2NhbEdseXBoQnVmZmVyKTsKKyAgICAgICAgaW5pdGlhbEFkdmFuY2UgPSBm
aW5hbFJvdW5kaW5nV2lkdGggKyBpdC5tX3J1bldpZHRoU29GYXIgLSBhZnRlcldpZHRoOworICAg
IH0gZWxzZQorICAgICAgICBpbml0aWFsQWR2YW5jZSA9IGJlZm9yZVdpZHRoOworCisgICAgaWYg
KHJ1bi5ydGwoKSkKKyAgICAgICAgZ2x5cGhCdWZmZXIucmV2ZXJzZSgwLCBnbHlwaEJ1ZmZlci5z
aXplKCkpOworCisgICAgcmV0dXJuIGluaXRpYWxBZHZhbmNlOworfQorCitmbG9hdCBGb250Q2Fz
Y2FkZTo6ZHJhd1NpbXBsZVRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0
UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25z
dAoreworICAgIC8vIFRoaXMgZ2x5cGggYnVmZmVyIGhvbGRzIG91ciBnbHlwaHMrYWR2YW5jZXMr
Zm9udCBkYXRhIGZvciBlYWNoIGdseXBoLgorICAgIEdseXBoQnVmZmVyIGdseXBoQnVmZmVyOwor
CisgICAgZmxvYXQgc3RhcnRYID0gcG9pbnQueCgpICsgZ2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JT
aW1wbGVUZXh0KHJ1biwgZnJvbSwgdG8sIGdseXBoQnVmZmVyKTsKKworICAgIGlmIChnbHlwaEJ1
ZmZlci5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgRmxvYXRQb2ludCBzdGFy
dFBvaW50KHN0YXJ0WCwgcG9pbnQueSgpKTsKKyAgICBkcmF3R2x5cGhCdWZmZXIoY29udGV4dCwg
cnVuLCBnbHlwaEJ1ZmZlciwgc3RhcnRQb2ludCk7CisKKyAgICByZXR1cm4gc3RhcnRQb2ludC54
KCkgLSBzdGFydFg7Cit9CisKK3ZvaWQgRm9udENhc2NhZGU6OmRyYXdFbXBoYXNpc01hcmtzRm9y
U2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwg
Y29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZy
b20sIGludCB0bykgY29uc3QKK3sKKyAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKKyAgICBm
bG9hdCBpbml0aWFsQWR2YW5jZSA9IGdldEdseXBoc0FuZEFkdmFuY2VzRm9yU2ltcGxlVGV4dChy
dW4sIGZyb20sIHRvLCBnbHlwaEJ1ZmZlciwgRm9yVGV4dEVtcGhhc2lzKTsKKworICAgIGlmIChn
bHlwaEJ1ZmZlci5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGRyYXdFbXBoYXNp
c01hcmtzKGNvbnRleHQsIHJ1biwgZ2x5cGhCdWZmZXIsIG1hcmssIEZsb2F0UG9pbnQocG9pbnQu
eCgpICsgaW5pdGlhbEFkdmFuY2UsIHBvaW50LnkoKSkpOworfQorCit2b2lkIEZvbnRDYXNjYWRl
OjpkcmF3R2x5cGhCdWZmZXIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVu
JiBydW4sIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgRmxvYXRQb2ludCYgcG9pbnQp
IGNvbnN0Cit7CisjaWYgIUVOQUJMRShTVkdfRk9OVFMpCisgICAgVU5VU0VEX1BBUkFNKHJ1bik7
CisjZW5kaWYKKworICAgIC8vIERyYXcgZWFjaCBjb250aWd1b3VzIHJ1biBvZiBnbHlwaHMgdGhh
dCB1c2UgdGhlIHNhbWUgZm9udCBkYXRhLgorICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250
RGF0YSA9IGdseXBoQnVmZmVyLmZvbnREYXRhQXQoMCk7CisgICAgRmxvYXRTaXplIG9mZnNldCA9
IGdseXBoQnVmZmVyLm9mZnNldEF0KDApOworICAgIEZsb2F0UG9pbnQgc3RhcnRQb2ludChwb2lu
dC54KCksIHBvaW50LnkoKSAtIGdseXBoQnVmZmVyLmluaXRpYWxBZHZhbmNlKCkuaGVpZ2h0KCkp
OworICAgIGZsb2F0IG5leHRYID0gc3RhcnRQb2ludC54KCkgKyBnbHlwaEJ1ZmZlci5hZHZhbmNl
QXQoMCkud2lkdGgoKTsKKyAgICBmbG9hdCBuZXh0WSA9IHN0YXJ0UG9pbnQueSgpICsgZ2x5cGhC
dWZmZXIuYWR2YW5jZUF0KDApLmhlaWdodCgpOworICAgIGludCBsYXN0RnJvbSA9IDA7CisgICAg
aW50IG5leHRHbHlwaCA9IDE7CisjaWYgRU5BQkxFKFNWR19GT05UUykKKyAgICBUZXh0UnVuOjpS
ZW5kZXJpbmdDb250ZXh0KiByZW5kZXJpbmdDb250ZXh0ID0gcnVuLnJlbmRlcmluZ0NvbnRleHQo
KTsKKyNlbmRpZgorICAgIHdoaWxlIChuZXh0R2x5cGggPCBnbHlwaEJ1ZmZlci5zaXplKCkpIHsK
KyAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIG5leHRGb250RGF0YSA9IGdseXBoQnVmZmVy
LmZvbnREYXRhQXQobmV4dEdseXBoKTsKKyAgICAgICAgRmxvYXRTaXplIG5leHRPZmZzZXQgPSBn
bHlwaEJ1ZmZlci5vZmZzZXRBdChuZXh0R2x5cGgpOworCisgICAgICAgIGlmIChuZXh0Rm9udERh
dGEgIT0gZm9udERhdGEgfHwgbmV4dE9mZnNldCAhPSBvZmZzZXQpIHsKKyNpZiBFTkFCTEUoU1ZH
X0ZPTlRTKQorICAgICAgICAgICAgaWYgKHJlbmRlcmluZ0NvbnRleHQgJiYgZm9udERhdGEtPmlz
U1ZHRm9udCgpKQorICAgICAgICAgICAgICAgIHJlbmRlcmluZ0NvbnRleHQtPmRyYXdTVkdHbHlw
aHMoY29udGV4dCwgZm9udERhdGEsIGdseXBoQnVmZmVyLCBsYXN0RnJvbSwgbmV4dEdseXBoIC0g
bGFzdEZyb20sIHN0YXJ0UG9pbnQpOworICAgICAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAg
ICAgICAgICAgZHJhd0dseXBocyhjb250ZXh0LCBmb250RGF0YSwgZ2x5cGhCdWZmZXIsIGxhc3RG
cm9tLCBuZXh0R2x5cGggLSBsYXN0RnJvbSwgc3RhcnRQb2ludCk7CisKKyAgICAgICAgICAgIGxh
c3RGcm9tID0gbmV4dEdseXBoOworICAgICAgICAgICAgZm9udERhdGEgPSBuZXh0Rm9udERhdGE7
CisgICAgICAgICAgICBvZmZzZXQgPSBuZXh0T2Zmc2V0OworICAgICAgICAgICAgc3RhcnRQb2lu
dC5zZXRYKG5leHRYKTsKKyAgICAgICAgICAgIHN0YXJ0UG9pbnQuc2V0WShuZXh0WSk7CisgICAg
ICAgIH0KKyAgICAgICAgbmV4dFggKz0gZ2x5cGhCdWZmZXIuYWR2YW5jZUF0KG5leHRHbHlwaCku
d2lkdGgoKTsKKyAgICAgICAgbmV4dFkgKz0gZ2x5cGhCdWZmZXIuYWR2YW5jZUF0KG5leHRHbHlw
aCkuaGVpZ2h0KCk7CisgICAgICAgIG5leHRHbHlwaCsrOworICAgIH0KKworI2lmIEVOQUJMRShT
VkdfRk9OVFMpCisgICAgaWYgKHJlbmRlcmluZ0NvbnRleHQgJiYgZm9udERhdGEtPmlzU1ZHRm9u
dCgpKQorICAgICAgICByZW5kZXJpbmdDb250ZXh0LT5kcmF3U1ZHR2x5cGhzKGNvbnRleHQsIGZv
bnREYXRhLCBnbHlwaEJ1ZmZlciwgbGFzdEZyb20sIG5leHRHbHlwaCAtIGxhc3RGcm9tLCBzdGFy
dFBvaW50KTsKKyAgICBlbHNlCisjZW5kaWYKKyAgICB7CisgICAgICAgIGRyYXdHbHlwaHMoY29u
dGV4dCwgZm9udERhdGEsIGdseXBoQnVmZmVyLCBsYXN0RnJvbSwgbmV4dEdseXBoIC0gbGFzdEZy
b20sIHN0YXJ0UG9pbnQpOworICAgICAgICBwb2ludC5zZXRYKG5leHRYKTsKKyAgICB9Cit9CisK
K2lubGluZSBzdGF0aWMgZmxvYXQgb2Zmc2V0VG9NaWRkbGVPZkdseXBoKGNvbnN0IFNpbXBsZUZv
bnREYXRhKiBmb250RGF0YSwgR2x5cGggZ2x5cGgpCit7CisgICAgaWYgKGZvbnREYXRhLT5wbGF0
Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IEhvcml6b250YWwpIHsKKyAgICAgICAgRmxvYXRS
ZWN0IGJvdW5kcyA9IGZvbnREYXRhLT5ib3VuZHNGb3JHbHlwaChnbHlwaCk7CisgICAgICAgIHJl
dHVybiBib3VuZHMueCgpICsgYm91bmRzLndpZHRoKCkgLyAyOworICAgIH0KKyAgICAvLyBGSVhN
RTogVXNlIGdseXBoIGJvdW5kcyBvbmNlIHRoZXkgbWFrZSBzZW5zZSBmb3IgdmVydGljYWwgZm9u
dHMuCisgICAgcmV0dXJuIGZvbnREYXRhLT53aWR0aEZvckdseXBoKGdseXBoKSAvIDI7Cit9CisK
K2lubGluZSBzdGF0aWMgZmxvYXQgb2Zmc2V0VG9NaWRkbGVPZkdseXBoQXRJbmRleChjb25zdCBH
bHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIHNpemVfdCBpKQoreworICAgIHJldHVybiBvZmZzZXRU
b01pZGRsZU9mR2x5cGgoZ2x5cGhCdWZmZXIuZm9udERhdGFBdChpKSwgZ2x5cGhCdWZmZXIuZ2x5
cGhBdChpKSk7Cit9CisKK3ZvaWQgRm9udENhc2NhZGU6OmRyYXdFbXBoYXNpc01hcmtzKEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBHbHlwaEJ1ZmZl
ciYgZ2x5cGhCdWZmZXIsIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQpIGNvbnN0Cit7CisgICAgR2x5cGhEYXRhIG1hcmtHbHlwaERhdGE7CisgICAgaWYg
KCFnZXRFbXBoYXNpc01hcmtHbHlwaERhdGEobWFyaywgbWFya0dseXBoRGF0YSkpCisgICAgICAg
IHJldHVybjsKKworICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBtYXJrRm9udERhdGEgPSBtYXJr
R2x5cGhEYXRhLmZvbnREYXRhOworICAgIEFTU0VSVChtYXJrRm9udERhdGEpOworICAgIGlmICgh
bWFya0ZvbnREYXRhKQorICAgICAgICByZXR1cm47CisKKyAgICBHbHlwaCBtYXJrR2x5cGggPSBt
YXJrR2x5cGhEYXRhLmdseXBoOworICAgIEdseXBoIHNwYWNlR2x5cGggPSBtYXJrRm9udERhdGEt
PnNwYWNlR2x5cGgoKTsKKworICAgIGZsb2F0IG1pZGRsZU9mTGFzdEdseXBoID0gb2Zmc2V0VG9N
aWRkbGVPZkdseXBoQXRJbmRleChnbHlwaEJ1ZmZlciwgMCk7CisgICAgRmxvYXRQb2ludCBzdGFy
dFBvaW50KHBvaW50LngoKSArIG1pZGRsZU9mTGFzdEdseXBoIC0gb2Zmc2V0VG9NaWRkbGVPZkds
eXBoKG1hcmtGb250RGF0YSwgbWFya0dseXBoKSwgcG9pbnQueSgpKTsKKworICAgIEdseXBoQnVm
ZmVyIG1hcmtCdWZmZXI7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgKyAxIDwgZ2x5cGhCdWZmZXIu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgZmxvYXQgbWlkZGxlT2ZOZXh0R2x5cGggPSBvZmZzZXRU
b01pZGRsZU9mR2x5cGhBdEluZGV4KGdseXBoQnVmZmVyLCBpICsgMSk7CisgICAgICAgIGZsb2F0
IGFkdmFuY2UgPSBnbHlwaEJ1ZmZlci5hZHZhbmNlQXQoaSkud2lkdGgoKSAtIG1pZGRsZU9mTGFz
dEdseXBoICsgbWlkZGxlT2ZOZXh0R2x5cGg7CisgICAgICAgIG1hcmtCdWZmZXIuYWRkKGdseXBo
QnVmZmVyLmdseXBoQXQoaSkgPyBtYXJrR2x5cGggOiBzcGFjZUdseXBoLCBtYXJrRm9udERhdGEs
IGFkdmFuY2UpOworICAgICAgICBtaWRkbGVPZkxhc3RHbHlwaCA9IG1pZGRsZU9mTmV4dEdseXBo
OworICAgIH0KKyAgICBtYXJrQnVmZmVyLmFkZChnbHlwaEJ1ZmZlci5nbHlwaEF0KGdseXBoQnVm
ZmVyLnNpemUoKSAtIDEpID8gbWFya0dseXBoIDogc3BhY2VHbHlwaCwgbWFya0ZvbnREYXRhLCAw
KTsKKworICAgIGRyYXdHbHlwaEJ1ZmZlcihjb250ZXh0LCBydW4sIG1hcmtCdWZmZXIsIHN0YXJ0
UG9pbnQpOworfQorCitmbG9hdCBGb250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZvclNpbXBsZVRleHQo
Y29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxi
YWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0Cit7CisgICAgV2lk
dGhJdGVyYXRvciBpdCh0aGlzLCBydW4sIGZhbGxiYWNrRm9udHMsIGdseXBoT3ZlcmZsb3cpOwor
ICAgIEdseXBoQnVmZmVyIGdseXBoQnVmZmVyOworICAgIGl0LmFkdmFuY2UocnVuLmxlbmd0aCgp
LCAodHlwZXNldHRpbmdGZWF0dXJlcygpICYgKEtlcm5pbmcgfCBMaWdhdHVyZXMpKSA/ICZnbHlw
aEJ1ZmZlciA6IDApOworCisgICAgaWYgKGdseXBoT3ZlcmZsb3cpIHsKKyAgICAgICAgZ2x5cGhP
dmVyZmxvdy0+dG9wID0gc3RkOjptYXg8aW50PihnbHlwaE92ZXJmbG93LT50b3AsIGNlaWxmKC1p
dC5taW5HbHlwaEJvdW5kaW5nQm94WSgpKSAtIChnbHlwaE92ZXJmbG93LT5jb21wdXRlQm91bmRz
ID8gMCA6IGZvbnRNZXRyaWNzKCkuYXNjZW50KCkpKTsKKyAgICAgICAgZ2x5cGhPdmVyZmxvdy0+
Ym90dG9tID0gc3RkOjptYXg8aW50PihnbHlwaE92ZXJmbG93LT5ib3R0b20sIGNlaWxmKGl0Lm1h
eEdseXBoQm91bmRpbmdCb3hZKCkpIC0gKGdseXBoT3ZlcmZsb3ctPmNvbXB1dGVCb3VuZHMgPyAw
IDogZm9udE1ldHJpY3MoKS5kZXNjZW50KCkpKTsKKyAgICAgICAgZ2x5cGhPdmVyZmxvdy0+bGVm
dCA9IGNlaWxmKGl0LmZpcnN0R2x5cGhPdmVyZmxvdygpKTsKKyAgICAgICAgZ2x5cGhPdmVyZmxv
dy0+cmlnaHQgPSBjZWlsZihpdC5sYXN0R2x5cGhPdmVyZmxvdygpKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gaXQubV9ydW5XaWR0aFNvRmFyOworfQorCit2b2lkIEZvbnRDYXNjYWRlOjphZGp1c3RT
ZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIExheW91dFJlY3Qm
IHNlbGVjdGlvblJlY3QsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit7CisgICAgR2x5cGhCdWZm
ZXIgZ2x5cGhCdWZmZXI7CisgICAgV2lkdGhJdGVyYXRvciBpdCh0aGlzLCBydW4pOworICAgIGl0
LmFkdmFuY2UoZnJvbSwgJmdseXBoQnVmZmVyKTsKKyAgICBmbG9hdCBiZWZvcmVXaWR0aCA9IGl0
Lm1fcnVuV2lkdGhTb0ZhcjsKKyAgICBpdC5hZHZhbmNlKHRvLCAmZ2x5cGhCdWZmZXIpOworICAg
IGZsb2F0IGFmdGVyV2lkdGggPSBpdC5tX3J1bldpZHRoU29GYXI7CisgICAgZmxvYXQgdG90YWxX
aWR0aCA9IC0xOworCisgICAgaWYgKHJ1bi5ydGwoKSkgeworICAgICAgICBpdC5hZHZhbmNlKHJ1
bi5sZW5ndGgoKSwgJmdseXBoQnVmZmVyKTsKKyAgICAgICAgdG90YWxXaWR0aCA9IGl0Lm1fcnVu
V2lkdGhTb0ZhcjsKKyAgICAgICAgc2VsZWN0aW9uUmVjdC5tb3ZlKHRvdGFsV2lkdGggLSBhZnRl
cldpZHRoLCAwKTsKKyAgICB9IGVsc2UKKyAgICAgICAgc2VsZWN0aW9uUmVjdC5tb3ZlKGJlZm9y
ZVdpZHRoLCAwKTsKKyAgICBzZWxlY3Rpb25SZWN0LnNldFdpZHRoKGFmdGVyV2lkdGggLSBiZWZv
cmVXaWR0aCk7Cit9CisKK2ludCBGb250Q2FzY2FkZTo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JTaW1w
bGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgZmxvYXQgeCwgYm9vbCBpbmNsdWRlUGFydGlhbEds
eXBocykgY29uc3QKK3sKKyAgICBmbG9hdCBkZWx0YSA9IHg7CisKKyAgICBXaWR0aEl0ZXJhdG9y
IGl0KHRoaXMsIHJ1bik7CisgICAgR2x5cGhCdWZmZXIgbG9jYWxHbHlwaEJ1ZmZlcjsKKyAgICB1
bnNpZ25lZCBvZmZzZXQ7CisgICAgaWYgKHJ1bi5ydGwoKSkgeworICAgICAgICBkZWx0YSAtPSBm
bG9hdFdpZHRoRm9yU2ltcGxlVGV4dChydW4pOworICAgICAgICB3aGlsZSAoMSkgeworICAgICAg
ICAgICAgb2Zmc2V0ID0gaXQubV9jdXJyZW50Q2hhcmFjdGVyOworICAgICAgICAgICAgZmxvYXQg
dzsKKyAgICAgICAgICAgIGlmICghaXQuYWR2YW5jZU9uZUNoYXJhY3Rlcih3LCBsb2NhbEdseXBo
QnVmZmVyKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlbHRhICs9IHc7
CisgICAgICAgICAgICBpZiAoaW5jbHVkZVBhcnRpYWxHbHlwaHMpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoZGVsdGEgLSB3IC8gMiA+PSAwKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGRlbHRhID49IDApCisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSBl
bHNlIHsKKyAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgIG9mZnNldCA9IGl0Lm1fY3Vy
cmVudENoYXJhY3RlcjsKKyAgICAgICAgICAgIGZsb2F0IHc7CisgICAgICAgICAgICBpZiAoIWl0
LmFkdmFuY2VPbmVDaGFyYWN0ZXIodywgbG9jYWxHbHlwaEJ1ZmZlcikpCisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBkZWx0YSAtPSB3OworICAgICAgICAgICAgaWYgKGluY2x1
ZGVQYXJ0aWFsR2x5cGhzKSB7CisgICAgICAgICAgICAgICAgaWYgKGRlbHRhICsgdyAvIDIgPD0g
MCkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIGlmIChkZWx0YSA8PSAwKQorICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBvZmZzZXQ7Cit9
CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRl
RmFzdFBhdGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRDYXNjYWRlRmFzdFBhdGguY3BwCSh3b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZhc3RQYXRoLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjQsMTAgKzI0LDEwIEBACiAjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKIAogI2lu
Y2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGb250R2x5
cGhzLmgiCiAjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKICNpbmNsdWRlICJMYXlvdXRSZWN0Lmgi
Ci0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKICNpbmNsdWRlICJUZXh0UnVuLmgiCiAjaW5j
bHVkZSAiV2lkdGhJdGVyYXRvci5oIgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CkBAIC03
Miw3ICs3Miw3IEBAIGludCBGb250Q2FzY2FkZTo6ZW1waGFzaXNNYXJrQXNjZW50KGNvbnMKICAg
ICBpZiAoIWdldEVtcGhhc2lzTWFya0dseXBoRGF0YShtYXJrLCBtYXJrR2x5cGhEYXRhKSkKICAg
ICAgICAgcmV0dXJuIDA7CiAKLSAgICBjb25zdCBTaW1wbGVGb250RGF0YSogbWFya0ZvbnREYXRh
ID0gbWFya0dseXBoRGF0YS5mb250RGF0YTsKKyAgICBjb25zdCBGb250KiBtYXJrRm9udERhdGEg
PSBtYXJrR2x5cGhEYXRhLmZvbnQ7CiAgICAgQVNTRVJUKG1hcmtGb250RGF0YSk7CiAgICAgaWYg
KCFtYXJrRm9udERhdGEpCiAgICAgICAgIHJldHVybiAwOwpAQCAtODYsNyArODYsNyBAQCBpbnQg
Rm9udENhc2NhZGU6OmVtcGhhc2lzTWFya0Rlc2NlbnQoY29uCiAgICAgaWYgKCFnZXRFbXBoYXNp
c01hcmtHbHlwaERhdGEobWFyaywgbWFya0dseXBoRGF0YSkpCiAgICAgICAgIHJldHVybiAwOwog
Ci0gICAgY29uc3QgU2ltcGxlRm9udERhdGEqIG1hcmtGb250RGF0YSA9IG1hcmtHbHlwaERhdGEu
Zm9udERhdGE7CisgICAgY29uc3QgRm9udCogbWFya0ZvbnREYXRhID0gbWFya0dseXBoRGF0YS5m
b250OwogICAgIEFTU0VSVChtYXJrRm9udERhdGEpOwogICAgIGlmICghbWFya0ZvbnREYXRhKQog
ICAgICAgICByZXR1cm4gMDsKQEAgLTEwMCw3ICsxMDAsNyBAQCBpbnQgRm9udENhc2NhZGU6OmVt
cGhhc2lzTWFya0hlaWdodChjb25zCiAgICAgaWYgKCFnZXRFbXBoYXNpc01hcmtHbHlwaERhdGEo
bWFyaywgbWFya0dseXBoRGF0YSkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgY29uc3QgU2lt
cGxlRm9udERhdGEqIG1hcmtGb250RGF0YSA9IG1hcmtHbHlwaERhdGEuZm9udERhdGE7CisgICAg
Y29uc3QgRm9udCogbWFya0ZvbnREYXRhID0gbWFya0dseXBoRGF0YS5mb250OwogICAgIEFTU0VS
VChtYXJrRm9udERhdGEpOwogICAgIGlmICghbWFya0ZvbnREYXRhKQogICAgICAgICByZXR1cm4g
MDsKQEAgLTE3Miw3ICsxNzIsNyBAQCB2b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhCdWZmZXIo
R3JhcGhpCiAjZW5kaWYKIAogICAgIC8vIERyYXcgZWFjaCBjb250aWd1b3VzIHJ1biBvZiBnbHlw
aHMgdGhhdCB1c2UgdGhlIHNhbWUgZm9udCBkYXRhLgotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRh
KiBmb250RGF0YSA9IGdseXBoQnVmZmVyLmZvbnREYXRhQXQoMCk7CisgICAgY29uc3QgRm9udCog
Zm9udCA9IGdseXBoQnVmZmVyLmZvbnRBdCgwKTsKICAgICBGbG9hdFNpemUgb2Zmc2V0ID0gZ2x5
cGhCdWZmZXIub2Zmc2V0QXQoMCk7CiAgICAgRmxvYXRQb2ludCBzdGFydFBvaW50KHBvaW50Lngo
KSwgcG9pbnQueSgpIC0gZ2x5cGhCdWZmZXIuaW5pdGlhbEFkdmFuY2UoKS5oZWlnaHQoKSk7CiAg
ICAgZmxvYXQgbmV4dFggPSBzdGFydFBvaW50LngoKSArIGdseXBoQnVmZmVyLmFkdmFuY2VBdCgw
KS53aWR0aCgpOwpAQCAtMTgzLDE5ICsxODMsMTkgQEAgdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0ds
eXBoQnVmZmVyKEdyYXBoaQogICAgIFRleHRSdW46OlJlbmRlcmluZ0NvbnRleHQqIHJlbmRlcmlu
Z0NvbnRleHQgPSBydW4ucmVuZGVyaW5nQ29udGV4dCgpOwogI2VuZGlmCiAgICAgd2hpbGUgKG5l
eHRHbHlwaCA8IGdseXBoQnVmZmVyLnNpemUoKSkgewotICAgICAgICBjb25zdCBTaW1wbGVGb250
RGF0YSogbmV4dEZvbnREYXRhID0gZ2x5cGhCdWZmZXIuZm9udERhdGFBdChuZXh0R2x5cGgpOwor
ICAgICAgICBjb25zdCBGb250KiBuZXh0Rm9udERhdGEgPSBnbHlwaEJ1ZmZlci5mb250QXQobmV4
dEdseXBoKTsKICAgICAgICAgRmxvYXRTaXplIG5leHRPZmZzZXQgPSBnbHlwaEJ1ZmZlci5vZmZz
ZXRBdChuZXh0R2x5cGgpOwogCi0gICAgICAgIGlmIChuZXh0Rm9udERhdGEgIT0gZm9udERhdGEg
fHwgbmV4dE9mZnNldCAhPSBvZmZzZXQpIHsKKyAgICAgICAgaWYgKG5leHRGb250RGF0YSAhPSBm
b250IHx8IG5leHRPZmZzZXQgIT0gb2Zmc2V0KSB7CiAjaWYgRU5BQkxFKFNWR19GT05UUykKLSAg
ICAgICAgICAgIGlmIChyZW5kZXJpbmdDb250ZXh0ICYmIGZvbnREYXRhLT5pc1NWR0ZvbnQoKSkK
LSAgICAgICAgICAgICAgICByZW5kZXJpbmdDb250ZXh0LT5kcmF3U1ZHR2x5cGhzKGNvbnRleHQs
IGZvbnREYXRhLCBnbHlwaEJ1ZmZlciwgbGFzdEZyb20sIG5leHRHbHlwaCAtIGxhc3RGcm9tLCBz
dGFydFBvaW50KTsKKyAgICAgICAgICAgIGlmIChyZW5kZXJpbmdDb250ZXh0ICYmIGZvbnQtPmlz
U1ZHRm9udCgpKQorICAgICAgICAgICAgICAgIHJlbmRlcmluZ0NvbnRleHQtPmRyYXdTVkdHbHlw
aHMoY29udGV4dCwgZm9udCwgZ2x5cGhCdWZmZXIsIGxhc3RGcm9tLCBuZXh0R2x5cGggLSBsYXN0
RnJvbSwgc3RhcnRQb2ludCk7CiAgICAgICAgICAgICBlbHNlCiAjZW5kaWYKLSAgICAgICAgICAg
ICAgICBkcmF3R2x5cGhzKGNvbnRleHQsIGZvbnREYXRhLCBnbHlwaEJ1ZmZlciwgbGFzdEZyb20s
IG5leHRHbHlwaCAtIGxhc3RGcm9tLCBzdGFydFBvaW50KTsKKyAgICAgICAgICAgICAgICBkcmF3
R2x5cGhzKGNvbnRleHQsIGZvbnQsIGdseXBoQnVmZmVyLCBsYXN0RnJvbSwgbmV4dEdseXBoIC0g
bGFzdEZyb20sIHN0YXJ0UG9pbnQpOwogCiAgICAgICAgICAgICBsYXN0RnJvbSA9IG5leHRHbHlw
aDsKLSAgICAgICAgICAgIGZvbnREYXRhID0gbmV4dEZvbnREYXRhOworICAgICAgICAgICAgZm9u
dCA9IG5leHRGb250RGF0YTsKICAgICAgICAgICAgIG9mZnNldCA9IG5leHRPZmZzZXQ7CiAgICAg
ICAgICAgICBzdGFydFBvaW50LnNldFgobmV4dFgpOwogICAgICAgICAgICAgc3RhcnRQb2ludC5z
ZXRZKG5leHRZKTsKQEAgLTIwNiwyOSArMjA2LDI5IEBAIHZvaWQgRm9udENhc2NhZGU6OmRyYXdH
bHlwaEJ1ZmZlcihHcmFwaGkKICAgICB9CiAKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotICAgIGlm
IChyZW5kZXJpbmdDb250ZXh0ICYmIGZvbnREYXRhLT5pc1NWR0ZvbnQoKSkKLSAgICAgICAgcmVu
ZGVyaW5nQ29udGV4dC0+ZHJhd1NWR0dseXBocyhjb250ZXh0LCBmb250RGF0YSwgZ2x5cGhCdWZm
ZXIsIGxhc3RGcm9tLCBuZXh0R2x5cGggLSBsYXN0RnJvbSwgc3RhcnRQb2ludCk7CisgICAgaWYg
KHJlbmRlcmluZ0NvbnRleHQgJiYgZm9udC0+aXNTVkdGb250KCkpCisgICAgICAgIHJlbmRlcmlu
Z0NvbnRleHQtPmRyYXdTVkdHbHlwaHMoY29udGV4dCwgZm9udCwgZ2x5cGhCdWZmZXIsIGxhc3RG
cm9tLCBuZXh0R2x5cGggLSBsYXN0RnJvbSwgc3RhcnRQb2ludCk7CiAgICAgZWxzZQogI2VuZGlm
CiAgICAgewotICAgICAgICBkcmF3R2x5cGhzKGNvbnRleHQsIGZvbnREYXRhLCBnbHlwaEJ1ZmZl
ciwgbGFzdEZyb20sIG5leHRHbHlwaCAtIGxhc3RGcm9tLCBzdGFydFBvaW50KTsKKyAgICAgICAg
ZHJhd0dseXBocyhjb250ZXh0LCBmb250LCBnbHlwaEJ1ZmZlciwgbGFzdEZyb20sIG5leHRHbHlw
aCAtIGxhc3RGcm9tLCBzdGFydFBvaW50KTsKICAgICAgICAgcG9pbnQuc2V0WChuZXh0WCk7CiAg
ICAgfQogfQogCi1pbmxpbmUgc3RhdGljIGZsb2F0IG9mZnNldFRvTWlkZGxlT2ZHbHlwaChjb25z
dCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsIEdseXBoIGdseXBoKQoraW5saW5lIHN0YXRpYyBm
bG9hdCBvZmZzZXRUb01pZGRsZU9mR2x5cGgoY29uc3QgRm9udCogZm9udCwgR2x5cGggZ2x5cGgp
CiB7Ci0gICAgaWYgKGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IEhv
cml6b250YWwpIHsKLSAgICAgICAgRmxvYXRSZWN0IGJvdW5kcyA9IGZvbnREYXRhLT5ib3VuZHNG
b3JHbHlwaChnbHlwaCk7CisgICAgaWYgKGZvbnQtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9u
KCkgPT0gSG9yaXpvbnRhbCkgeworICAgICAgICBGbG9hdFJlY3QgYm91bmRzID0gZm9udC0+Ym91
bmRzRm9yR2x5cGgoZ2x5cGgpOwogICAgICAgICByZXR1cm4gYm91bmRzLngoKSArIGJvdW5kcy53
aWR0aCgpIC8gMjsKICAgICB9CiAgICAgLy8gRklYTUU6IFVzZSBnbHlwaCBib3VuZHMgb25jZSB0
aGV5IG1ha2Ugc2Vuc2UgZm9yIHZlcnRpY2FsIGZvbnRzLgotICAgIHJldHVybiBmb250RGF0YS0+
d2lkdGhGb3JHbHlwaChnbHlwaCkgLyAyOworICAgIHJldHVybiBmb250LT53aWR0aEZvckdseXBo
KGdseXBoKSAvIDI7CiB9CiAKIGlubGluZSBzdGF0aWMgZmxvYXQgb2Zmc2V0VG9NaWRkbGVPZkds
eXBoQXRJbmRleChjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIHNpemVfdCBpKQogewot
ICAgIHJldHVybiBvZmZzZXRUb01pZGRsZU9mR2x5cGgoZ2x5cGhCdWZmZXIuZm9udERhdGFBdChp
KSwgZ2x5cGhCdWZmZXIuZ2x5cGhBdChpKSk7CisgICAgcmV0dXJuIG9mZnNldFRvTWlkZGxlT2ZH
bHlwaChnbHlwaEJ1ZmZlci5mb250QXQoaSksIGdseXBoQnVmZmVyLmdseXBoQXQoaSkpOwogfQog
CiB2b2lkIEZvbnRDYXNjYWRlOjpkcmF3RW1waGFzaXNNYXJrcyhHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVy
LCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25z
dApAQCAtMjM3LDcgKzIzNyw3IEBAIHZvaWQgRm9udENhc2NhZGU6OmRyYXdFbXBoYXNpc01hcmtz
KEdyYXAKICAgICBpZiAoIWdldEVtcGhhc2lzTWFya0dseXBoRGF0YShtYXJrLCBtYXJrR2x5cGhE
YXRhKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY29uc3QgU2ltcGxlRm9udERhdGEqIG1hcmtG
b250RGF0YSA9IG1hcmtHbHlwaERhdGEuZm9udERhdGE7CisgICAgY29uc3QgRm9udCogbWFya0Zv
bnREYXRhID0gbWFya0dseXBoRGF0YS5mb250OwogICAgIEFTU0VSVChtYXJrRm9udERhdGEpOwog
ICAgIGlmICghbWFya0ZvbnREYXRhKQogICAgICAgICByZXR1cm47CkBAIC0yNjAsNyArMjYwLDcg
QEAgdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0VtcGhhc2lzTWFya3MoR3JhcAogICAgIGRyYXdHbHlw
aEJ1ZmZlcihjb250ZXh0LCBydW4sIG1hcmtCdWZmZXIsIHN0YXJ0UG9pbnQpOwogfQogCi1mbG9h
dCBGb250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVu
LCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3Zl
cmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0CitmbG9hdCBGb250Q2FzY2FkZTo6ZmxvYXRXaWR0
aEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiog
ZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKIHsKICAg
ICBXaWR0aEl0ZXJhdG9yIGl0KHRoaXMsIHJ1biwgZmFsbGJhY2tGb250cywgZ2x5cGhPdmVyZmxv
dyk7CiAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250RmFzdFBhdGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYXN0UGF0aC5jcHAJKHJldmlzaW9uIDE3ODUx
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYXN0UGF0aC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMzQxICswLDAgQEAKLS8qKgotICogQ29weXJpZ2h0IChDKSAy
MDAzLCAyMDA2LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAwOCBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgotICogQ29weXJpZ2h0IChD
KSAyMDA5IFRvcmNoIE1vYmlsZSwgSW5jLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIkZvbnRDYXNjYWRlLmgiCi0KLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJG
b250R2x5cGhzLmgiCi0jaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKLSNpbmNsdWRlICJMYXlvdXRS
ZWN0LmgiCi0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKLSNpbmNsdWRlICJUZXh0UnVuLmgi
Ci0jaW5jbHVkZSAiV2lkdGhJdGVyYXRvci5oIgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+
Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvdW5pY29kZS9DaGFy
YWN0ZXJOYW1lcy5oPgotCi11c2luZyBuYW1lc3BhY2UgV1RGOwotdXNpbmcgbmFtZXNwYWNlIFVu
aWNvZGU7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24g
bWF5IG5vdCB3b3JrIGlmIHRoZSBlbXBoYXNpcyBtYXJrIHVzZXMgYSBjb21wbGV4IHNjcmlwdCwg
YnV0IG5vbmUgb2YgdGhlCi0vLyBzdGFuZGFyZCBlbXBoYXNpcyBtYXJrcyBkbyBzby4KLWJvb2wg
Rm9udENhc2NhZGU6OmdldEVtcGhhc2lzTWFya0dseXBoRGF0YShjb25zdCBBdG9taWNTdHJpbmcm
IG1hcmssIEdseXBoRGF0YSYgZ2x5cGhEYXRhKSBjb25zdAotewotICAgIGlmIChtYXJrLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgVUNoYXIzMiBjaGFyYWN0ZXIgPSBt
YXJrWzBdOwotCi0gICAgaWYgKFUxNl9JU19TVVJST0dBVEUoY2hhcmFjdGVyKSkgewotICAgICAg
ICBpZiAoIVUxNl9JU19TVVJST0dBVEVfTEVBRChjaGFyYWN0ZXIpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgICAgIGlmIChtYXJrLmxlbmd0aCgpIDwgMikKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgICAgICBVQ2hhciBsb3cgPSBtYXJrWzFdOwotICAgICAgICBp
ZiAoIVUxNl9JU19UUkFJTChsb3cpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
ICAgIGNoYXJhY3RlciA9IFUxNl9HRVRfU1VQUExFTUVOVEFSWShjaGFyYWN0ZXIsIGxvdyk7Ci0g
ICAgfQotCi0gICAgZ2x5cGhEYXRhID0gZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3Rlciwg
ZmFsc2UsIEVtcGhhc2lzTWFya1ZhcmlhbnQpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1pbnQg
Rm9udENhc2NhZGU6OmVtcGhhc2lzTWFya0FzY2VudChjb25zdCBBdG9taWNTdHJpbmcmIG1hcmsp
IGNvbnN0Ci17Ci0gICAgR2x5cGhEYXRhIG1hcmtHbHlwaERhdGE7Ci0gICAgaWYgKCFnZXRFbXBo
YXNpc01hcmtHbHlwaERhdGEobWFyaywgbWFya0dseXBoRGF0YSkpCi0gICAgICAgIHJldHVybiAw
OwotCi0gICAgY29uc3QgU2ltcGxlRm9udERhdGEqIG1hcmtGb250RGF0YSA9IG1hcmtHbHlwaERh
dGEuZm9udERhdGE7Ci0gICAgQVNTRVJUKG1hcmtGb250RGF0YSk7Ci0gICAgaWYgKCFtYXJrRm9u
dERhdGEpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIG1hcmtGb250RGF0YS0+Zm9u
dE1ldHJpY3MoKS5hc2NlbnQoKTsKLX0KLQotaW50IEZvbnRDYXNjYWRlOjplbXBoYXNpc01hcmtE
ZXNjZW50KGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaykgY29uc3QKLXsKLSAgICBHbHlwaERhdGEg
bWFya0dseXBoRGF0YTsKLSAgICBpZiAoIWdldEVtcGhhc2lzTWFya0dseXBoRGF0YShtYXJrLCBt
YXJrR2x5cGhEYXRhKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBjb25zdCBTaW1wbGVGb250
RGF0YSogbWFya0ZvbnREYXRhID0gbWFya0dseXBoRGF0YS5mb250RGF0YTsKLSAgICBBU1NFUlQo
bWFya0ZvbnREYXRhKTsKLSAgICBpZiAoIW1hcmtGb250RGF0YSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICByZXR1cm4gbWFya0ZvbnREYXRhLT5mb250TWV0cmljcygpLmRlc2NlbnQoKTsKLX0K
LQotaW50IEZvbnRDYXNjYWRlOjplbXBoYXNpc01hcmtIZWlnaHQoY29uc3QgQXRvbWljU3RyaW5n
JiBtYXJrKSBjb25zdAotewotICAgIEdseXBoRGF0YSBtYXJrR2x5cGhEYXRhOwotICAgIGlmICgh
Z2V0RW1waGFzaXNNYXJrR2x5cGhEYXRhKG1hcmssIG1hcmtHbHlwaERhdGEpKQotICAgICAgICBy
ZXR1cm4gMDsKLQotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBtYXJrRm9udERhdGEgPSBtYXJr
R2x5cGhEYXRhLmZvbnREYXRhOwotICAgIEFTU0VSVChtYXJrRm9udERhdGEpOwotICAgIGlmICgh
bWFya0ZvbnREYXRhKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBtYXJrRm9udERh
dGEtPmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCk7Ci19Ci0KLWZsb2F0IEZvbnRDYXNjYWRlOjpnZXRH
bHlwaHNBbmRBZHZhbmNlc0ZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBpbnQgZnJv
bSwgaW50IHRvLCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIEZvclRleHRFbXBoYXNpc09yTm90
IGZvclRleHRFbXBoYXNpcykgY29uc3QKLXsKLSAgICBmbG9hdCBpbml0aWFsQWR2YW5jZTsKLQot
ICAgIFdpZHRoSXRlcmF0b3IgaXQodGhpcywgcnVuLCAwLCBmYWxzZSwgZm9yVGV4dEVtcGhhc2lz
KTsKLSAgICAvLyBGSVhNRTogVXNpbmcgc2VwYXJhdGUgZ2x5cGggYnVmZmVycyBmb3IgdGhlIHBy
ZWZpeCBhbmQgdGhlIHN1ZmZpeCBpcyBpbmNvcnJlY3Qgd2hlbiBrZXJuaW5nIG9yCi0gICAgLy8g
bGlnYXR1cmVzIGFyZSBlbmFibGVkLgotICAgIEdseXBoQnVmZmVyIGxvY2FsR2x5cGhCdWZmZXI7
Ci0gICAgaXQuYWR2YW5jZShmcm9tLCAmbG9jYWxHbHlwaEJ1ZmZlcik7Ci0gICAgZmxvYXQgYmVm
b3JlV2lkdGggPSBpdC5tX3J1bldpZHRoU29GYXI7Ci0gICAgaXQuYWR2YW5jZSh0bywgJmdseXBo
QnVmZmVyKTsKLQotICAgIGlmIChnbHlwaEJ1ZmZlci5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgZmxvYXQgYWZ0ZXJXaWR0aCA9IGl0Lm1fcnVuV2lkdGhTb0ZhcjsKLQotICAg
IGlmIChydW4ucnRsKCkpIHsKLSAgICAgICAgZmxvYXQgZmluYWxSb3VuZGluZ1dpZHRoID0gaXQu
bV9maW5hbFJvdW5kaW5nV2lkdGg7Ci0gICAgICAgIGl0LmFkdmFuY2UocnVuLmxlbmd0aCgpLCAm
bG9jYWxHbHlwaEJ1ZmZlcik7Ci0gICAgICAgIGluaXRpYWxBZHZhbmNlID0gZmluYWxSb3VuZGlu
Z1dpZHRoICsgaXQubV9ydW5XaWR0aFNvRmFyIC0gYWZ0ZXJXaWR0aDsKLSAgICB9IGVsc2UKLSAg
ICAgICAgaW5pdGlhbEFkdmFuY2UgPSBiZWZvcmVXaWR0aDsKLQotICAgIGlmIChydW4ucnRsKCkp
Ci0gICAgICAgIGdseXBoQnVmZmVyLnJldmVyc2UoMCwgZ2x5cGhCdWZmZXIuc2l6ZSgpKTsKLQot
ICAgIHJldHVybiBpbml0aWFsQWR2YW5jZTsKLX0KLQotZmxvYXQgRm9udENhc2NhZGU6OmRyYXdT
aW1wbGVUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBj
b25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKLXsKLSAgICAv
LyBUaGlzIGdseXBoIGJ1ZmZlciBob2xkcyBvdXIgZ2x5cGhzK2FkdmFuY2VzK2ZvbnQgZGF0YSBm
b3IgZWFjaCBnbHlwaC4KLSAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKLQotICAgIGZsb2F0
IHN0YXJ0WCA9IHBvaW50LngoKSArIGdldEdseXBoc0FuZEFkdmFuY2VzRm9yU2ltcGxlVGV4dChy
dW4sIGZyb20sIHRvLCBnbHlwaEJ1ZmZlcik7Ci0KLSAgICBpZiAoZ2x5cGhCdWZmZXIuaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEZsb2F0UG9pbnQgc3RhcnRQb2ludChzdGFy
dFgsIHBvaW50LnkoKSk7Ci0gICAgZHJhd0dseXBoQnVmZmVyKGNvbnRleHQsIHJ1biwgZ2x5cGhC
dWZmZXIsIHN0YXJ0UG9pbnQpOwotCi0gICAgcmV0dXJuIHN0YXJ0UG9pbnQueCgpIC0gc3RhcnRY
OwotfQotCi12b2lkIEZvbnRDYXNjYWRlOjpkcmF3RW1waGFzaXNNYXJrc0ZvclNpbXBsZVRleHQo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21p
Y1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8p
IGNvbnN0Ci17Ci0gICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7Ci0gICAgZmxvYXQgaW5pdGlh
bEFkdmFuY2UgPSBnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvclNpbXBsZVRleHQocnVuLCBmcm9tLCB0
bywgZ2x5cGhCdWZmZXIsIEZvclRleHRFbXBoYXNpcyk7Ci0KLSAgICBpZiAoZ2x5cGhCdWZmZXIu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBkcmF3RW1waGFzaXNNYXJrcyhjb250
ZXh0LCBydW4sIGdseXBoQnVmZmVyLCBtYXJrLCBGbG9hdFBvaW50KHBvaW50LngoKSArIGluaXRp
YWxBZHZhbmNlLCBwb2ludC55KCkpKTsKLX0KLQotdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBo
QnVmZmVyKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25z
dCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAotewot
I2lmICFFTkFCTEUoU1ZHX0ZPTlRTKQotICAgIFVOVVNFRF9QQVJBTShydW4pOwotI2VuZGlmCi0K
LSAgICAvLyBEcmF3IGVhY2ggY29udGlndW91cyBydW4gb2YgZ2x5cGhzIHRoYXQgdXNlIHRoZSBz
YW1lIGZvbnQgZGF0YS4KLSAgICBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEgPSBnbHlw
aEJ1ZmZlci5mb250RGF0YUF0KDApOwotICAgIEZsb2F0U2l6ZSBvZmZzZXQgPSBnbHlwaEJ1ZmZl
ci5vZmZzZXRBdCgwKTsKLSAgICBGbG9hdFBvaW50IHN0YXJ0UG9pbnQocG9pbnQueCgpLCBwb2lu
dC55KCkgLSBnbHlwaEJ1ZmZlci5pbml0aWFsQWR2YW5jZSgpLmhlaWdodCgpKTsKLSAgICBmbG9h
dCBuZXh0WCA9IHN0YXJ0UG9pbnQueCgpICsgZ2x5cGhCdWZmZXIuYWR2YW5jZUF0KDApLndpZHRo
KCk7Ci0gICAgZmxvYXQgbmV4dFkgPSBzdGFydFBvaW50LnkoKSArIGdseXBoQnVmZmVyLmFkdmFu
Y2VBdCgwKS5oZWlnaHQoKTsKLSAgICBpbnQgbGFzdEZyb20gPSAwOwotICAgIGludCBuZXh0R2x5
cGggPSAxOwotI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0gICAgVGV4dFJ1bjo6UmVuZGVyaW5nQ29u
dGV4dCogcmVuZGVyaW5nQ29udGV4dCA9IHJ1bi5yZW5kZXJpbmdDb250ZXh0KCk7Ci0jZW5kaWYK
LSAgICB3aGlsZSAobmV4dEdseXBoIDwgZ2x5cGhCdWZmZXIuc2l6ZSgpKSB7Ci0gICAgICAgIGNv
bnN0IFNpbXBsZUZvbnREYXRhKiBuZXh0Rm9udERhdGEgPSBnbHlwaEJ1ZmZlci5mb250RGF0YUF0
KG5leHRHbHlwaCk7Ci0gICAgICAgIEZsb2F0U2l6ZSBuZXh0T2Zmc2V0ID0gZ2x5cGhCdWZmZXIu
b2Zmc2V0QXQobmV4dEdseXBoKTsKLQotICAgICAgICBpZiAobmV4dEZvbnREYXRhICE9IGZvbnRE
YXRhIHx8IG5leHRPZmZzZXQgIT0gb2Zmc2V0KSB7Ci0jaWYgRU5BQkxFKFNWR19GT05UUykKLSAg
ICAgICAgICAgIGlmIChyZW5kZXJpbmdDb250ZXh0ICYmIGZvbnREYXRhLT5pc1NWR0ZvbnQoKSkK
LSAgICAgICAgICAgICAgICByZW5kZXJpbmdDb250ZXh0LT5kcmF3U1ZHR2x5cGhzKGNvbnRleHQs
IGZvbnREYXRhLCBnbHlwaEJ1ZmZlciwgbGFzdEZyb20sIG5leHRHbHlwaCAtIGxhc3RGcm9tLCBz
dGFydFBvaW50KTsKLSAgICAgICAgICAgIGVsc2UKLSNlbmRpZgotICAgICAgICAgICAgICAgIGRy
YXdHbHlwaHMoY29udGV4dCwgZm9udERhdGEsIGdseXBoQnVmZmVyLCBsYXN0RnJvbSwgbmV4dEds
eXBoIC0gbGFzdEZyb20sIHN0YXJ0UG9pbnQpOwotCi0gICAgICAgICAgICBsYXN0RnJvbSA9IG5l
eHRHbHlwaDsKLSAgICAgICAgICAgIGZvbnREYXRhID0gbmV4dEZvbnREYXRhOwotICAgICAgICAg
ICAgb2Zmc2V0ID0gbmV4dE9mZnNldDsKLSAgICAgICAgICAgIHN0YXJ0UG9pbnQuc2V0WChuZXh0
WCk7Ci0gICAgICAgICAgICBzdGFydFBvaW50LnNldFkobmV4dFkpOwotICAgICAgICB9Ci0gICAg
ICAgIG5leHRYICs9IGdseXBoQnVmZmVyLmFkdmFuY2VBdChuZXh0R2x5cGgpLndpZHRoKCk7Ci0g
ICAgICAgIG5leHRZICs9IGdseXBoQnVmZmVyLmFkdmFuY2VBdChuZXh0R2x5cGgpLmhlaWdodCgp
OwotICAgICAgICBuZXh0R2x5cGgrKzsKLSAgICB9Ci0KLSNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQot
ICAgIGlmIChyZW5kZXJpbmdDb250ZXh0ICYmIGZvbnREYXRhLT5pc1NWR0ZvbnQoKSkKLSAgICAg
ICAgcmVuZGVyaW5nQ29udGV4dC0+ZHJhd1NWR0dseXBocyhjb250ZXh0LCBmb250RGF0YSwgZ2x5
cGhCdWZmZXIsIGxhc3RGcm9tLCBuZXh0R2x5cGggLSBsYXN0RnJvbSwgc3RhcnRQb2ludCk7Ci0g
ICAgZWxzZQotI2VuZGlmCi0gICAgewotICAgICAgICBkcmF3R2x5cGhzKGNvbnRleHQsIGZvbnRE
YXRhLCBnbHlwaEJ1ZmZlciwgbGFzdEZyb20sIG5leHRHbHlwaCAtIGxhc3RGcm9tLCBzdGFydFBv
aW50KTsKLSAgICAgICAgcG9pbnQuc2V0WChuZXh0WCk7Ci0gICAgfQotfQotCi1pbmxpbmUgc3Rh
dGljIGZsb2F0IG9mZnNldFRvTWlkZGxlT2ZHbHlwaChjb25zdCBTaW1wbGVGb250RGF0YSogZm9u
dERhdGEsIEdseXBoIGdseXBoKQotewotICAgIGlmIChmb250RGF0YS0+cGxhdGZvcm1EYXRhKCku
b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsKSB7Ci0gICAgICAgIEZsb2F0UmVjdCBib3VuZHMg
PSBmb250RGF0YS0+Ym91bmRzRm9yR2x5cGgoZ2x5cGgpOwotICAgICAgICByZXR1cm4gYm91bmRz
LngoKSArIGJvdW5kcy53aWR0aCgpIC8gMjsKLSAgICB9Ci0gICAgLy8gRklYTUU6IFVzZSBnbHlw
aCBib3VuZHMgb25jZSB0aGV5IG1ha2Ugc2Vuc2UgZm9yIHZlcnRpY2FsIGZvbnRzLgotICAgIHJl
dHVybiBmb250RGF0YS0+d2lkdGhGb3JHbHlwaChnbHlwaCkgLyAyOwotfQotCi1pbmxpbmUgc3Rh
dGljIGZsb2F0IG9mZnNldFRvTWlkZGxlT2ZHbHlwaEF0SW5kZXgoY29uc3QgR2x5cGhCdWZmZXIm
IGdseXBoQnVmZmVyLCBzaXplX3QgaSkKLXsKLSAgICByZXR1cm4gb2Zmc2V0VG9NaWRkbGVPZkds
eXBoKGdseXBoQnVmZmVyLmZvbnREYXRhQXQoaSksIGdseXBoQnVmZmVyLmdseXBoQXQoaSkpOwot
fQotCi12b2lkIEZvbnRDYXNjYWRlOjpkcmF3RW1waGFzaXNNYXJrcyhHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVm
ZmVyLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBj
b25zdAotewotICAgIEdseXBoRGF0YSBtYXJrR2x5cGhEYXRhOwotICAgIGlmICghZ2V0RW1waGFz
aXNNYXJrR2x5cGhEYXRhKG1hcmssIG1hcmtHbHlwaERhdGEpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBjb25zdCBTaW1wbGVGb250RGF0YSogbWFya0ZvbnREYXRhID0gbWFya0dseXBoRGF0YS5m
b250RGF0YTsKLSAgICBBU1NFUlQobWFya0ZvbnREYXRhKTsKLSAgICBpZiAoIW1hcmtGb250RGF0
YSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR2x5cGggbWFya0dseXBoID0gbWFya0dseXBoRGF0
YS5nbHlwaDsKLSAgICBHbHlwaCBzcGFjZUdseXBoID0gbWFya0ZvbnREYXRhLT5zcGFjZUdseXBo
KCk7Ci0KLSAgICBmbG9hdCBtaWRkbGVPZkxhc3RHbHlwaCA9IG9mZnNldFRvTWlkZGxlT2ZHbHlw
aEF0SW5kZXgoZ2x5cGhCdWZmZXIsIDApOwotICAgIEZsb2F0UG9pbnQgc3RhcnRQb2ludChwb2lu
dC54KCkgKyBtaWRkbGVPZkxhc3RHbHlwaCAtIG9mZnNldFRvTWlkZGxlT2ZHbHlwaChtYXJrRm9u
dERhdGEsIG1hcmtHbHlwaCksIHBvaW50LnkoKSk7Ci0KLSAgICBHbHlwaEJ1ZmZlciBtYXJrQnVm
ZmVyOwotICAgIGZvciAoaW50IGkgPSAwOyBpICsgMSA8IGdseXBoQnVmZmVyLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgIGZsb2F0IG1pZGRsZU9mTmV4dEdseXBoID0gb2Zmc2V0VG9NaWRkbGVPZkds
eXBoQXRJbmRleChnbHlwaEJ1ZmZlciwgaSArIDEpOwotICAgICAgICBmbG9hdCBhZHZhbmNlID0g
Z2x5cGhCdWZmZXIuYWR2YW5jZUF0KGkpLndpZHRoKCkgLSBtaWRkbGVPZkxhc3RHbHlwaCArIG1p
ZGRsZU9mTmV4dEdseXBoOwotICAgICAgICBtYXJrQnVmZmVyLmFkZChnbHlwaEJ1ZmZlci5nbHlw
aEF0KGkpID8gbWFya0dseXBoIDogc3BhY2VHbHlwaCwgbWFya0ZvbnREYXRhLCBhZHZhbmNlKTsK
LSAgICAgICAgbWlkZGxlT2ZMYXN0R2x5cGggPSBtaWRkbGVPZk5leHRHbHlwaDsKLSAgICB9Ci0g
ICAgbWFya0J1ZmZlci5hZGQoZ2x5cGhCdWZmZXIuZ2x5cGhBdChnbHlwaEJ1ZmZlci5zaXplKCkg
LSAxKSA/IG1hcmtHbHlwaCA6IHNwYWNlR2x5cGgsIG1hcmtGb250RGF0YSwgMCk7Ci0KLSAgICBk
cmF3R2x5cGhCdWZmZXIoY29udGV4dCwgcnVuLCBtYXJrQnVmZmVyLCBzdGFydFBvaW50KTsKLX0K
LQotZmxvYXQgRm9udENhc2NhZGU6OmZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRS
dW4mIHJ1biwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBH
bHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAotewotICAgIFdpZHRoSXRlcmF0b3Ig
aXQodGhpcywgcnVuLCBmYWxsYmFja0ZvbnRzLCBnbHlwaE92ZXJmbG93KTsKLSAgICBHbHlwaEJ1
ZmZlciBnbHlwaEJ1ZmZlcjsKLSAgICBpdC5hZHZhbmNlKHJ1bi5sZW5ndGgoKSwgKHR5cGVzZXR0
aW5nRmVhdHVyZXMoKSAmIChLZXJuaW5nIHwgTGlnYXR1cmVzKSkgPyAmZ2x5cGhCdWZmZXIgOiAw
KTsKLQotICAgIGlmIChnbHlwaE92ZXJmbG93KSB7Ci0gICAgICAgIGdseXBoT3ZlcmZsb3ctPnRv
cCA9IHN0ZDo6bWF4PGludD4oZ2x5cGhPdmVyZmxvdy0+dG9wLCBjZWlsZigtaXQubWluR2x5cGhC
b3VuZGluZ0JveFkoKSkgLSAoZ2x5cGhPdmVyZmxvdy0+Y29tcHV0ZUJvdW5kcyA/IDAgOiBmb250
TWV0cmljcygpLmFzY2VudCgpKSk7Ci0gICAgICAgIGdseXBoT3ZlcmZsb3ctPmJvdHRvbSA9IHN0
ZDo6bWF4PGludD4oZ2x5cGhPdmVyZmxvdy0+Ym90dG9tLCBjZWlsZihpdC5tYXhHbHlwaEJvdW5k
aW5nQm94WSgpKSAtIChnbHlwaE92ZXJmbG93LT5jb21wdXRlQm91bmRzID8gMCA6IGZvbnRNZXRy
aWNzKCkuZGVzY2VudCgpKSk7Ci0gICAgICAgIGdseXBoT3ZlcmZsb3ctPmxlZnQgPSBjZWlsZihp
dC5maXJzdEdseXBoT3ZlcmZsb3coKSk7Ci0gICAgICAgIGdseXBoT3ZlcmZsb3ctPnJpZ2h0ID0g
Y2VpbGYoaXQubGFzdEdseXBoT3ZlcmZsb3coKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGl0Lm1f
cnVuV2lkdGhTb0ZhcjsKLX0KLQotdm9pZCBGb250Q2FzY2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVj
dEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25S
ZWN0LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAotewotICAgIEdseXBoQnVmZmVyIGdseXBoQnVm
ZmVyOwotICAgIFdpZHRoSXRlcmF0b3IgaXQodGhpcywgcnVuKTsKLSAgICBpdC5hZHZhbmNlKGZy
b20sICZnbHlwaEJ1ZmZlcik7Ci0gICAgZmxvYXQgYmVmb3JlV2lkdGggPSBpdC5tX3J1bldpZHRo
U29GYXI7Ci0gICAgaXQuYWR2YW5jZSh0bywgJmdseXBoQnVmZmVyKTsKLSAgICBmbG9hdCBhZnRl
cldpZHRoID0gaXQubV9ydW5XaWR0aFNvRmFyOwotICAgIGZsb2F0IHRvdGFsV2lkdGggPSAtMTsK
LQotICAgIGlmIChydW4ucnRsKCkpIHsKLSAgICAgICAgaXQuYWR2YW5jZShydW4ubGVuZ3RoKCks
ICZnbHlwaEJ1ZmZlcik7Ci0gICAgICAgIHRvdGFsV2lkdGggPSBpdC5tX3J1bldpZHRoU29GYXI7
Ci0gICAgICAgIHNlbGVjdGlvblJlY3QubW92ZSh0b3RhbFdpZHRoIC0gYWZ0ZXJXaWR0aCwgMCk7
Ci0gICAgfSBlbHNlCi0gICAgICAgIHNlbGVjdGlvblJlY3QubW92ZShiZWZvcmVXaWR0aCwgMCk7
Ci0gICAgc2VsZWN0aW9uUmVjdC5zZXRXaWR0aChhZnRlcldpZHRoIC0gYmVmb3JlV2lkdGgpOwot
fQotCi1pbnQgRm9udENhc2NhZGU6Om9mZnNldEZvclBvc2l0aW9uRm9yU2ltcGxlVGV4dChjb25z
dCBUZXh0UnVuJiBydW4sIGZsb2F0IHgsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0
Ci17Ci0gICAgZmxvYXQgZGVsdGEgPSB4OwotCi0gICAgV2lkdGhJdGVyYXRvciBpdCh0aGlzLCBy
dW4pOwotICAgIEdseXBoQnVmZmVyIGxvY2FsR2x5cGhCdWZmZXI7Ci0gICAgdW5zaWduZWQgb2Zm
c2V0OwotICAgIGlmIChydW4ucnRsKCkpIHsKLSAgICAgICAgZGVsdGEgLT0gZmxvYXRXaWR0aEZv
clNpbXBsZVRleHQocnVuKTsKLSAgICAgICAgd2hpbGUgKDEpIHsKLSAgICAgICAgICAgIG9mZnNl
dCA9IGl0Lm1fY3VycmVudENoYXJhY3RlcjsKLSAgICAgICAgICAgIGZsb2F0IHc7Ci0gICAgICAg
ICAgICBpZiAoIWl0LmFkdmFuY2VPbmVDaGFyYWN0ZXIodywgbG9jYWxHbHlwaEJ1ZmZlcikpCi0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWx0YSArPSB3OwotICAgICAgICAg
ICAgaWYgKGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGRlbHRh
IC0gdyAvIDIgPj0gMCkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChkZWx0YSA+PSAwKQotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIHdoaWxlICgxKSB7Ci0gICAgICAgICAgICBvZmZzZXQgPSBpdC5tX2N1cnJlbnRDaGFyYWN0
ZXI7Ci0gICAgICAgICAgICBmbG9hdCB3OwotICAgICAgICAgICAgaWYgKCFpdC5hZHZhbmNlT25l
Q2hhcmFjdGVyKHcsIGxvY2FsR2x5cGhCdWZmZXIpKQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgZGVsdGEgLT0gdzsKLSAgICAgICAgICAgIGlmIChpbmNsdWRlUGFydGlhbEds
eXBocykgewotICAgICAgICAgICAgICAgIGlmIChkZWx0YSArIHcgLyAyIDw9IDApCi0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICBpZiAoZGVsdGEgPD0gMCkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gb2Zmc2V0OwotfQotCi19CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250R2x5cGhzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250R2x5cGhzLmNwcAko
cmV2aXNpb24gMTc4NTEwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dEdseXBocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiAKIEZvbnRHbHlwaHM6OkZvbnRHbHlwaHMoUGFzc1JlZlB0cjxGb250U2VsZWN0
b3I+IGZvbnRTZWxlY3RvcikKLSAgICA6IG1fY2FjaGVkUHJpbWFyeVNpbXBsZUZvbnREYXRhKDAp
CisgICAgOiBtX2NhY2hlZFByaW1hcnlGb250KDApCiAgICAgLCBtX2ZvbnRTZWxlY3Rvcihmb250
U2VsZWN0b3IpCiAgICAgLCBtX2ZvbnRTZWxlY3RvclZlcnNpb24obV9mb250U2VsZWN0b3IgPyBt
X2ZvbnRTZWxlY3Rvci0+dmVyc2lvbigpIDogMCkKICAgICAsIG1fZ2VuZXJhdGlvbihmb250Q2Fj
aGUoKS5nZW5lcmF0aW9uKCkpCkBAIC00NSw3ICs0NSw3IEBAIEZvbnRHbHlwaHM6OkZvbnRHbHlw
aHMoUGFzc1JlZlB0cjxGb250U2UKIH0KIAogRm9udEdseXBoczo6Rm9udEdseXBocyhjb25zdCBG
b250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEpCi0gICAgOiBtX2NhY2hlZFByaW1hcnlTaW1w
bGVGb250RGF0YSgwKQorICAgIDogbV9jYWNoZWRQcmltYXJ5Rm9udCgwKQogICAgICwgbV9mb250
U2VsZWN0b3IoMCkKICAgICAsIG1fZm9udFNlbGVjdG9yVmVyc2lvbigwKQogICAgICwgbV9nZW5l
cmF0aW9uKGZvbnRDYWNoZSgpLmdlbmVyYXRpb24oKSkKQEAgLTYzLDcgKzYzLDcgQEAgdm9pZCBG
b250R2x5cGhzOjpkZXRlcm1pbmVQaXRjaChjb25zdCBGbwogICAgIGF1dG8mIHByaW1hcnlSYW5n
ZXMgPSByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChkZXNjcmlwdGlvbiwgMCk7CiAgICAgdW5zaWdu
ZWQgbnVtUmFuZ2VzID0gcHJpbWFyeVJhbmdlcy5zaXplKCk7CiAgICAgaWYgKG51bVJhbmdlcyA9
PSAxKQotICAgICAgICBtX3BpdGNoID0gcHJpbWFyeVJhbmdlcy5yYW5nZUF0KDApLmZvbnREYXRh
KCkucGl0Y2goKTsKKyAgICAgICAgbV9waXRjaCA9IHByaW1hcnlSYW5nZXMucmFuZ2VBdCgwKS5m
b250KCkucGl0Y2goKTsKICAgICBlbHNlCiAgICAgICAgIG1fcGl0Y2ggPSBWYXJpYWJsZVBpdGNo
OwogfQpAQCAtOTYsNyArOTYsNyBAQCBzdGF0aWMgRm9udFJhbmdlcyByZWFsaXplTmV4dEZhbGxi
YWNrKGNvCiAgICAgLy8gV2UgZGlkbid0IGZpbmQgYSBmb250LiBUcnkgdG8gZmluZCBhIHNpbWls
YXIgZm9udCB1c2luZyBvdXIgb3duIHNwZWNpZmljIGtub3dsZWRnZSBhYm91dCBvdXIgcGxhdGZv
cm0uCiAgICAgLy8gRm9yIGV4YW1wbGUgb24gT1MgWCwgd2Uga25vdyB0byBtYXAgYW55IGZhbWls
aWVzIGNvbnRhaW5pbmcgdGhlIHdvcmRzIEFyYWJpYywgUGFzaHRvLCBvciBVcmR1IHRvIHRoZQog
ICAgIC8vIEdlZXphIFBybyBmb250LgotICAgIHJldHVybiBGb250UmFuZ2VzKGZvbnRDYWNoZSgp
LnNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGRlc2NyaXB0aW9uKSk7CisgICAgcmV0dXJuIEZvbnRS
YW5nZXMoZm9udENhY2hlKCkuc2ltaWxhckZvbnQoZGVzY3JpcHRpb24pKTsKIH0KIAogY29uc3Qg
Rm9udFJhbmdlcyYgRm9udEdseXBoczo6cmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgdW5zaWduZWQgaW5kZXgpCkBAIC0xMjYsMTAgKzEy
NiwxMCBAQCBjb25zdCBGb250UmFuZ2VzJiBGb250R2x5cGhzOjpyZWFsaXplRmFsCiAgICAgICAg
IEFTU0VSVChtX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXggPj0gZGVzY3JpcHRpb24uZmFtaWx5
Q291bnQoKSk7CiAKICAgICAgICAgdW5zaWduZWQgZm9udFNlbGVjdG9yRmFsbGJhY2tJbmRleCA9
IG1fbGFzdFJlYWxpemVkRmFsbGJhY2tJbmRleCAtIGRlc2NyaXB0aW9uLmZhbWlseUNvdW50KCk7
Ci0gICAgICAgIGlmIChmb250U2VsZWN0b3JGYWxsYmFja0luZGV4ID09IG1fZm9udFNlbGVjdG9y
LT5mYWxsYmFja0ZvbnREYXRhQ291bnQoKSkKKyAgICAgICAgaWYgKGZvbnRTZWxlY3RvckZhbGxi
YWNrSW5kZXggPT0gbV9mb250U2VsZWN0b3ItPmZhbGxiYWNrRm9udENvdW50KCkpCiAgICAgICAg
ICAgICByZXR1cm4gZm9udFJhbmdlczsKICAgICAgICAgKyttX2xhc3RSZWFsaXplZEZhbGxiYWNr
SW5kZXg7Ci0gICAgICAgIGZvbnRSYW5nZXMgPSBGb250UmFuZ2VzKG1fZm9udFNlbGVjdG9yLT5m
YWxsYmFja0ZvbnREYXRhQXQoZGVzY3JpcHRpb24sIGZvbnRTZWxlY3RvckZhbGxiYWNrSW5kZXgp
KTsKKyAgICAgICAgZm9udFJhbmdlcyA9IEZvbnRSYW5nZXMobV9mb250U2VsZWN0b3ItPmZhbGxi
YWNrRm9udEF0KGRlc2NyaXB0aW9uLCBmb250U2VsZWN0b3JGYWxsYmFja0luZGV4KSk7CiAgICAg
fQogCiAgICAgcmV0dXJuIGZvbnRSYW5nZXM7CkBAIC0yMjEsOCArMjIxLDggQEAgc3RhdGljIGJv
b2wgc2hvdWxkSWdub3JlUm90YXRpb24oVUNoYXIzMgogI2lmIFBMQVRGT1JNKENPQ09BKQogc3Rh
dGljIEdseXBoRGF0YSBnbHlwaERhdGFGb3JDSktDaGFyYWN0ZXJXaXRob3V0U3ludGhldGljSXRh
bGljKFVDaGFyMzIgY2hhcmFjdGVyLCBHbHlwaERhdGEmIGRhdGEpCiB7Ci0gICAgR2x5cGhEYXRh
IG5vbkl0YWxpY0RhdGEgPSBkYXRhLmZvbnREYXRhLT5ub25TeW50aGV0aWNJdGFsaWNGb250RGF0
YSgpLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyKTsKLSAgICBpZiAobm9uSXRhbGlj
RGF0YS5mb250RGF0YSkKKyAgICBHbHlwaERhdGEgbm9uSXRhbGljRGF0YSA9IGRhdGEuZm9udC0+
bm9uU3ludGhldGljSXRhbGljRm9udCgpLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVy
KTsKKyAgICBpZiAobm9uSXRhbGljRGF0YS5mb250KQogICAgICAgICByZXR1cm4gbm9uSXRhbGlj
RGF0YTsKICAgICByZXR1cm4gZGF0YTsKIH0KQEAgLTIzMSw3NiArMjMxLDc2IEBAIHN0YXRpYyBH
bHlwaERhdGEgZ2x5cGhEYXRhRm9yQ0pLQ2hhcmFjdGUKIHN0YXRpYyBHbHlwaERhdGEgZ2x5cGhE
YXRhRm9yTm9uQ0pLQ2hhcmFjdGVyV2l0aEdseXBoT3JpZW50YXRpb24oVUNoYXIzMiBjaGFyYWN0
ZXIsIE5vbkNKS0dseXBoT3JpZW50YXRpb24gb3JpZW50YXRpb24sIGNvbnN0IEdseXBoRGF0YSYg
ZGF0YSkKIHsKICAgICBpZiAob3JpZW50YXRpb24gPT0gTm9uQ0pLR2x5cGhPcmllbnRhdGlvblVw
cmlnaHQgfHwgc2hvdWxkSWdub3JlUm90YXRpb24oY2hhcmFjdGVyKSkgewotICAgICAgICBHbHlw
aERhdGEgdXByaWdodERhdGEgPSBkYXRhLmZvbnREYXRhLT51cHJpZ2h0T3JpZW50YXRpb25Gb250
RGF0YSgpLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyKTsKKyAgICAgICAgR2x5cGhE
YXRhIHVwcmlnaHREYXRhID0gZGF0YS5mb250LT51cHJpZ2h0T3JpZW50YXRpb25Gb250KCktPmds
eXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIpOwogICAgICAgICAvLyBJZiB0aGUgZ2x5cGhz
IGFyZSB0aGUgc2FtZSwgdGhlbiB3ZSBrbm93IHdlIGNhbiBqdXN0IHVzZSB0aGUgaG9yaXpvbnRh
bCBnbHlwaCByb3RhdGVkIHZlcnRpY2FsbHkgdG8gYmUgdXByaWdodC4KICAgICAgICAgaWYgKGRh
dGEuZ2x5cGggPT0gdXByaWdodERhdGEuZ2x5cGgpCiAgICAgICAgICAgICByZXR1cm4gZGF0YTsK
ICAgICAgICAgLy8gVGhlIGdseXBocyBhcmUgZGlzdGluY3QsIG1lYW5pbmcgdGhhdCB0aGUgZm9u
dCBoYXMgYSB2ZXJ0aWNhbC1yaWdodCBnbHlwaCBiYWtlZCBpbnRvIGl0LiBXZSBjYW4ndCB1c2Ug
dGhhdAogICAgICAgICAvLyBnbHlwaCwgc28gd2UgZmFsbCBiYWNrIHRvIHRoZSB1cHJpZ2h0IGRh
dGEgYW5kIHVzZSB0aGUgaG9yaXpvbnRhbCBnbHlwaC4KLSAgICAgICAgaWYgKHVwcmlnaHREYXRh
LmZvbnREYXRhKQorICAgICAgICBpZiAodXByaWdodERhdGEuZm9udCkKICAgICAgICAgICAgIHJl
dHVybiB1cHJpZ2h0RGF0YTsKICAgICB9IGVsc2UgaWYgKG9yaWVudGF0aW9uID09IE5vbkNKS0ds
eXBoT3JpZW50YXRpb25WZXJ0aWNhbFJpZ2h0KSB7Ci0gICAgICAgIEdseXBoRGF0YSB2ZXJ0aWNh
bFJpZ2h0RGF0YSA9IGRhdGEuZm9udERhdGEtPnZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbkZvbnRE
YXRhKCktPmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIpOworICAgICAgICBHbHlwaERh
dGEgdmVydGljYWxSaWdodERhdGEgPSBkYXRhLmZvbnQtPnZlcnRpY2FsUmlnaHRPcmllbnRhdGlv
bkZvbnQoKS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3Rlcik7CiAgICAgICAgIC8vIElm
IHRoZSBnbHlwaHMgYXJlIGRpc3RpbmN0LCB3ZSB3aWxsIG1ha2UgdGhlIGFzc3VtcHRpb24gdGhh
dCB0aGUgZm9udCBoYXMgYSB2ZXJ0aWNhbC1yaWdodCBnbHlwaCBiYWtlZAogICAgICAgICAvLyBp
bnRvIGl0LgogICAgICAgICBpZiAoZGF0YS5nbHlwaCAhPSB2ZXJ0aWNhbFJpZ2h0RGF0YS5nbHlw
aCkKICAgICAgICAgICAgIHJldHVybiBkYXRhOwogICAgICAgICAvLyBUaGUgZ2x5cGhzIGFyZSBp
ZGVudGljYWwsIG1lYW5pbmcgdGhhdCB3ZSBzaG91bGQganVzdCB1c2UgdGhlIGhvcml6b250YWwg
Z2x5cGguCi0gICAgICAgIGlmICh2ZXJ0aWNhbFJpZ2h0RGF0YS5mb250RGF0YSkKKyAgICAgICAg
aWYgKHZlcnRpY2FsUmlnaHREYXRhLmZvbnQpCiAgICAgICAgICAgICByZXR1cm4gdmVydGljYWxS
aWdodERhdGE7CiAgICAgfQogICAgIHJldHVybiBkYXRhOwogfQogCi1HbHlwaERhdGEgRm9udEds
eXBoczo6Z2x5cGhEYXRhRm9yU3lzdGVtRmFsbGJhY2soVUNoYXIzMiBjLCBjb25zdCBGb250RGVz
Y3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250RGF0YVZhcmlhbnQgdmFyaWFudCkKK0dseXBoRGF0
YSBGb250R2x5cGhzOjpnbHlwaERhdGFGb3JTeXN0ZW1GYWxsYmFjayhVQ2hhcjMyIGMsIGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIEZvbnRWYXJpYW50IHZhcmlhbnQpCiB7CiAg
ICAgLy8gU3lzdGVtIGZhbGxiYWNrIGlzIGNoYXJhY3Rlci1kZXBlbmRlbnQuCiAgICAgYXV0byYg
cHJpbWFyeVJhbmdlcyA9IHJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGRlc2NyaXB0aW9uLCAwKTsK
LSAgICBhdXRvKiBvcmlnaW5hbEZvbnREYXRhID0gcHJpbWFyeVJhbmdlcy5mb250RGF0YUZvckNo
YXJhY3RlcihjKTsKLSAgICBpZiAoIW9yaWdpbmFsRm9udERhdGEpCi0gICAgICAgIG9yaWdpbmFs
Rm9udERhdGEgPSAmcHJpbWFyeVJhbmdlcy5mb250RGF0YUZvckZpcnN0UmFuZ2UoKTsKKyAgICBh
dXRvKiBvcmlnaW5hbEZvbnQgPSBwcmltYXJ5UmFuZ2VzLmZvbnRGb3JDaGFyYWN0ZXIoYyk7Cisg
ICAgaWYgKCFvcmlnaW5hbEZvbnQpCisgICAgICAgIG9yaWdpbmFsRm9udCA9ICZwcmltYXJ5UmFu
Z2VzLmZvbnRGb3JGaXJzdFJhbmdlKCk7CiAKLSAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IHN5
c3RlbUZhbGxiYWNrRm9udERhdGEgPSBvcmlnaW5hbEZvbnREYXRhLT5zeXN0ZW1GYWxsYmFja0Zv
bnREYXRhRm9yQ2hhcmFjdGVyKGMsIGRlc2NyaXB0aW9uLCBtX2lzRm9yUGxhdGZvcm1Gb250KTsK
LSAgICBpZiAoIXN5c3RlbUZhbGxiYWNrRm9udERhdGEpCisgICAgUmVmUHRyPEZvbnQ+IHN5c3Rl
bUZhbGxiYWNrRm9udCA9IG9yaWdpbmFsRm9udC0+c3lzdGVtRmFsbGJhY2tGb250Rm9yQ2hhcmFj
dGVyKGMsIGRlc2NyaXB0aW9uLCBtX2lzRm9yUGxhdGZvcm1Gb250KTsKKyAgICBpZiAoIXN5c3Rl
bUZhbGxiYWNrRm9udCkKICAgICAgICAgcmV0dXJuIEdseXBoRGF0YSgpOwogCi0gICAgaWYgKHN5
c3RlbUZhbGxiYWNrRm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gVmVy
dGljYWwgJiYgIXN5c3RlbUZhbGxiYWNrRm9udERhdGEtPmhhc1ZlcnRpY2FsR2x5cGhzKCkgJiYg
Rm9udENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woYykpCisgICAgaWYgKHN5c3RlbUZh
bGxiYWNrRm9udC0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCAmJiAh
c3lzdGVtRmFsbGJhY2tGb250LT5oYXNWZXJ0aWNhbEdseXBocygpICYmIEZvbnRDYXNjYWRlOjpp
c0NKS0lkZW9ncmFwaE9yU3ltYm9sKGMpKQogICAgICAgICB2YXJpYW50ID0gQnJva2VuSWRlb2dy
YXBoVmFyaWFudDsKIAogICAgIEdseXBoRGF0YSBmYWxsYmFja0dseXBoRGF0YTsKICAgICBpZiAo
dmFyaWFudCA9PSBOb3JtYWxWYXJpYW50KQotICAgICAgICBmYWxsYmFja0dseXBoRGF0YSA9IHN5
c3RlbUZhbGxiYWNrRm9udERhdGEtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjKTsKKyAgICAgICAg
ZmFsbGJhY2tHbHlwaERhdGEgPSBzeXN0ZW1GYWxsYmFja0ZvbnQtPmdseXBoRGF0YUZvckNoYXJh
Y3RlcihjKTsKICAgICBlbHNlCi0gICAgICAgIGZhbGxiYWNrR2x5cGhEYXRhID0gc3lzdGVtRmFs
bGJhY2tGb250RGF0YS0+dmFyaWFudEZvbnREYXRhKGRlc2NyaXB0aW9uLCB2YXJpYW50KS0+Z2x5
cGhEYXRhRm9yQ2hhcmFjdGVyKGMpOworICAgICAgICBmYWxsYmFja0dseXBoRGF0YSA9IHN5c3Rl
bUZhbGxiYWNrRm9udC0+dmFyaWFudEZvbnQoZGVzY3JpcHRpb24sIHZhcmlhbnQpLT5nbHlwaERh
dGFGb3JDaGFyYWN0ZXIoYyk7CiAKLSAgICBpZiAodmFyaWFudCA9PSBOb3JtYWxWYXJpYW50ICYm
IGZhbGxiYWNrR2x5cGhEYXRhLmZvbnREYXRhKSB7Ci0gICAgICAgIGlmICghRm9udENhc2NhZGU6
OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woYykgJiYgZmFsbGJhY2tHbHlwaERhdGEuZm9udERhdGEt
PnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwgJiYgIWZhbGxiYWNrR2x5
cGhEYXRhLmZvbnREYXRhLT5pc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKCkpCisgICAgaWYgKHZh
cmlhbnQgPT0gTm9ybWFsVmFyaWFudCAmJiBmYWxsYmFja0dseXBoRGF0YS5mb250KSB7CisgICAg
ICAgIGlmICghRm9udENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woYykgJiYgZmFsbGJh
Y2tHbHlwaERhdGEuZm9udC0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNh
bCAmJiAhZmFsbGJhY2tHbHlwaERhdGEuZm9udC0+aXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaygp
KQogICAgICAgICAgICAgZmFsbGJhY2tHbHlwaERhdGEgPSBnbHlwaERhdGFGb3JOb25DSktDaGFy
YWN0ZXJXaXRoR2x5cGhPcmllbnRhdGlvbihjLCBkZXNjcmlwdGlvbi5ub25DSktHbHlwaE9yaWVu
dGF0aW9uKCksIGZhbGxiYWNrR2x5cGhEYXRhKTsKICAgICB9CiAKICAgICAvLyBLZWVwIHRoZSBz
eXN0ZW0gZmFsbGJhY2sgZm9udHMgd2UgdXNlIGFsaXZlLgogICAgIGlmIChmYWxsYmFja0dseXBo
RGF0YS5nbHlwaCkKLSAgICAgICAgbV9zeXN0ZW1GYWxsYmFja0ZvbnREYXRhU2V0LmFkZChzeXN0
ZW1GYWxsYmFja0ZvbnREYXRhLnJlbGVhc2UoKSk7CisgICAgICAgIG1fc3lzdGVtRmFsbGJhY2tG
b250U2V0LmFkZChzeXN0ZW1GYWxsYmFja0ZvbnQucmVsZWFzZSgpKTsKIAogICAgIHJldHVybiBm
YWxsYmFja0dseXBoRGF0YTsKIH0KIAotR2x5cGhEYXRhIEZvbnRHbHlwaHM6OmdseXBoRGF0YUZv
clZhcmlhbnQoVUNoYXIzMiBjLCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBG
b250RGF0YVZhcmlhbnQgdmFyaWFudCwgdW5zaWduZWQgZmFsbGJhY2tJbmRleCkKK0dseXBoRGF0
YSBGb250R2x5cGhzOjpnbHlwaERhdGFGb3JWYXJpYW50KFVDaGFyMzIgYywgY29uc3QgRm9udERl
c2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udFZhcmlhbnQgdmFyaWFudCwgdW5zaWduZWQgZmFs
bGJhY2tJbmRleCkKIHsKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICBhdXRvJiBmb250UmFu
Z2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIGZhbGxiYWNrSW5kZXgr
Kyk7CiAgICAgICAgIGlmIChmb250UmFuZ2VzLmlzTnVsbCgpKQogICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGF1dG8qIGZvbnREYXRhID0gZm9udFJhbmdlcy5mb250RGF0YUZvckNoYXJhY3Rl
cihjKTsKLSAgICAgICAgR2x5cGhEYXRhIGRhdGEgPSBmb250RGF0YSA/IGZvbnREYXRhLT5nbHlw
aERhdGFGb3JDaGFyYWN0ZXIoYykgOiBHbHlwaERhdGEoKTsKLSAgICAgICAgaWYgKGRhdGEuZm9u
dERhdGEpIHsKLSAgICAgICAgICAgIC8vIFRoZSB2YXJpYW50Rm9udERhdGEgZnVuY3Rpb24gc2hv
dWxkIG5vdCBub3JtYWxseSByZXR1cm4gMC4KKyAgICAgICAgYXV0byogZm9udCA9IGZvbnRSYW5n
ZXMuZm9udEZvckNoYXJhY3RlcihjKTsKKyAgICAgICAgR2x5cGhEYXRhIGRhdGEgPSBmb250ID8g
Zm9udC0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMpIDogR2x5cGhEYXRhKCk7CisgICAgICAgIGlm
IChkYXRhLmZvbnQpIHsKKyAgICAgICAgICAgIC8vIFRoZSB2YXJpYW50Rm9udCBmdW5jdGlvbiBz
aG91bGQgbm90IG5vcm1hbGx5IHJldHVybiAwLgogICAgICAgICAgICAgLy8gQnV0IGlmIGl0IGRv
ZXMsIHdlIHdpbGwganVzdCByZW5kZXIgdGhlIGNhcGl0YWwgbGV0dGVyIGJpZy4KLSAgICAgICAg
ICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gdmFyaWFudEZvbnREYXRhID0gZGF0YS5mb250RGF0
YS0+dmFyaWFudEZvbnREYXRhKGRlc2NyaXB0aW9uLCB2YXJpYW50KTsKLSAgICAgICAgICAgIGlm
ICghdmFyaWFudEZvbnREYXRhKQorICAgICAgICAgICAgUmVmUHRyPEZvbnQ+IHZhcmlhbnRGb250
ID0gZGF0YS5mb250LT52YXJpYW50Rm9udChkZXNjcmlwdGlvbiwgdmFyaWFudCk7CisgICAgICAg
ICAgICBpZiAoIXZhcmlhbnRGb250KQogICAgICAgICAgICAgICAgIHJldHVybiBkYXRhOwogCi0g
ICAgICAgICAgICByZXR1cm4gdmFyaWFudEZvbnREYXRhLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIo
Yyk7CisgICAgICAgICAgICByZXR1cm4gdmFyaWFudEZvbnQtPmdseXBoRGF0YUZvckNoYXJhY3Rl
cihjKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzE1LDIzICszMTUsMjMgQEAgR2x5cGhEYXRh
IEZvbnRHbHlwaHM6OmdseXBoRGF0YUZvck5vcm1hbAogICAgICAgICBhdXRvJiBmb250UmFuZ2Vz
ID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIGZhbGxiYWNrSW5kZXgpOwog
ICAgICAgICBpZiAoZm9udFJhbmdlcy5pc051bGwoKSkKICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBhdXRvKiBzaW1wbGVGb250RGF0YSA9IGZvbnRSYW5nZXMuZm9udERhdGFGb3JDaGFyYWN0
ZXIoYyk7Ci0gICAgICAgIGF1dG8qIHBhZ2UgPSBzaW1wbGVGb250RGF0YSA/IHNpbXBsZUZvbnRE
YXRhLT5nbHlwaFBhZ2UocGFnZU51bWJlcikgOiBudWxscHRyOworICAgICAgICBhdXRvKiBmb250
ID0gZm9udFJhbmdlcy5mb250Rm9yQ2hhcmFjdGVyKGMpOworICAgICAgICBhdXRvKiBwYWdlID0g
Zm9udCA/IGZvbnQtPmdseXBoUGFnZShwYWdlTnVtYmVyKSA6IG51bGxwdHI7CiAgICAgICAgIGlm
ICghcGFnZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBHbHlwaERhdGEgZGF0YSA9
IHBhZ2UtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjKTsKLSAgICAgICAgaWYgKGRhdGEuZm9udERh
dGEpIHsKLSAgICAgICAgICAgIGlmIChkYXRhLmZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5vcmll
bnRhdGlvbigpID09IFZlcnRpY2FsICYmICFkYXRhLmZvbnREYXRhLT5pc1RleHRPcmllbnRhdGlv
bkZhbGxiYWNrKCkpIHsKKyAgICAgICAgaWYgKGRhdGEuZm9udCkgeworICAgICAgICAgICAgaWYg
KGRhdGEuZm9udC0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCAmJiAh
ZGF0YS5mb250LT5pc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKCkpIHsKICAgICAgICAgICAgICAg
ICBpZiAoIUZvbnRDYXNjYWRlOjppc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGMpKQogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZ2x5cGhEYXRhRm9yTm9uQ0pLQ2hhcmFjdGVyV2l0aEdseXBoT3Jp
ZW50YXRpb24oYywgZGVzY3JpcHRpb24ubm9uQ0pLR2x5cGhPcmllbnRhdGlvbigpLCBkYXRhKTsK
IAotICAgICAgICAgICAgICAgIGlmICghZGF0YS5mb250RGF0YS0+aGFzVmVydGljYWxHbHlwaHMo
KSkgeworICAgICAgICAgICAgICAgIGlmICghZGF0YS5mb250LT5oYXNWZXJ0aWNhbEdseXBocygp
KSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFVzZSB0aGUgYnJva2VuIGlkZW9ncmFwaCBmb250
IGRhdGEuIFRoZSBicm9rZW4gaWRlb2dyYXBoIGZvbnQgd2lsbCB1c2UgdGhlIGhvcml6b250YWwg
d2lkdGggb2YgZ2x5cGhzCiAgICAgICAgICAgICAgICAgICAgIC8vIHRvIG1ha2Ugc3VyZSB5b3Ug
Z2V0IGEgc3F1YXJlIChldmVuIGZvciBicm9rZW4gZ2x5cGhzIGxpa2Ugc3ltYm9scyB1c2VkIGZv
ciBwdW5jdHVhdGlvbikuCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbHlwaERhdGFGb3JW
YXJpYW50KGMsIGRlc2NyaXB0aW9uLCBCcm9rZW5JZGVvZ3JhcGhWYXJpYW50LCBmYWxsYmFja0lu
ZGV4KTsKICAgICAgICAgICAgICAgICB9CiAjaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgICAgICAg
ICAgICAgaWYgKGRhdGEuZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLnN5bnRoZXRpY09ibGlxdWUo
KSkKKyAgICAgICAgICAgICAgICBpZiAoZGF0YS5mb250LT5wbGF0Zm9ybURhdGEoKS5zeW50aGV0
aWNPYmxpcXVlKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbHlwaERhdGFGb3JDSktD
aGFyYWN0ZXJXaXRob3V0U3ludGhldGljSXRhbGljKGMsIGRhdGEpOwogI2VuZGlmCiAgICAgICAg
ICAgICB9CkBAIC0zNDUsMjcgKzM0NSwyNyBAQCBHbHlwaERhdGEgRm9udEdseXBoczo6Z2x5cGhE
YXRhRm9yTm9ybWFsCiAKIHN0YXRpYyBSZWZQdHI8R2x5cGhQYWdlPiBnbHlwaFBhZ2VGcm9tRm9u
dFJhbmdlcyh1bnNpZ25lZCBwYWdlTnVtYmVyLCBjb25zdCBGb250UmFuZ2VzJiBmb250UmFuZ2Vz
KQogewotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBzaW1wbGVGb250RGF0YSA9IG51bGxwdHI7
CisgICAgY29uc3QgRm9udCogZm9udCA9IG51bGxwdHI7CiAgICAgVUNoYXIzMiBwYWdlUmFuZ2VG
cm9tID0gcGFnZU51bWJlciAqIEdseXBoUGFnZTo6c2l6ZTsKICAgICBVQ2hhcjMyIHBhZ2VSYW5n
ZVRvID0gcGFnZVJhbmdlRnJvbSArIEdseXBoUGFnZTo6c2l6ZSAtIDE7CiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGZvbnRSYW5nZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgYXV0byYg
cmFuZ2UgPSBmb250UmFuZ2VzLnJhbmdlQXQoaSk7CiAgICAgICAgIGlmIChyYW5nZS50bygpKSB7
CiAgICAgICAgICAgICBpZiAocmFuZ2UuZnJvbSgpIDw9IHBhZ2VSYW5nZUZyb20gJiYgcGFnZVJh
bmdlVG8gPD0gcmFuZ2UudG8oKSkKLSAgICAgICAgICAgICAgICBzaW1wbGVGb250RGF0YSA9ICZy
YW5nZS5mb250RGF0YSgpOworICAgICAgICAgICAgICAgIGZvbnQgPSAmcmFuZ2UuZm9udCgpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKCFzaW1wbGVGb250
RGF0YSkKKyAgICBpZiAoIWZvbnQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgaWYg
KHNpbXBsZUZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IFZlcnRpY2Fs
KQorICAgIGlmIChmb250LT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IFZlcnRpY2Fs
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBjb25zdF9jYXN0PEdseXBo
UGFnZSo+KHNpbXBsZUZvbnREYXRhLT5nbHlwaFBhZ2UocGFnZU51bWJlcikpOworICAgIHJldHVy
biBjb25zdF9jYXN0PEdseXBoUGFnZSo+KGZvbnQtPmdseXBoUGFnZShwYWdlTnVtYmVyKSk7CiB9
CiAKLUdseXBoRGF0YSBGb250R2x5cGhzOjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBj
LCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250RGF0YVZhcmlhbnQgdmFy
aWFudCkKK0dseXBoRGF0YSBGb250R2x5cGhzOjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIz
MiBjLCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250VmFyaWFudCB2YXJp
YW50KQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgQVNTRVJUKHZhcmlhbnQg
IT0gQXV0b1ZhcmlhbnQpOwpAQCAtMzgyLDEyICszODIsMTIgQEAgR2x5cGhEYXRhIEZvbnRHbHlw
aHM6OmdseXBoRGF0YUZvckNoYXJhYwogICAgIEdseXBoRGF0YSBnbHlwaERhdGEgPSBjYWNoZWRQ
YWdlID8gY2FjaGVkUGFnZS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMpIDogR2x5cGhEYXRhKCk7
CiAgICAgaWYgKCFnbHlwaERhdGEuZ2x5cGgpIHsKICAgICAgICAgaWYgKCFjYWNoZWRQYWdlKQot
ICAgICAgICAgICAgY2FjaGVkUGFnZSA9IEdseXBoUGFnZTo6Y3JlYXRlRm9yTWl4ZWRGb250RGF0
YSgpOworICAgICAgICAgICAgY2FjaGVkUGFnZSA9IEdseXBoUGFnZTo6Y3JlYXRlRm9yTWl4ZWRG
b250cygpOwogICAgICAgICBlbHNlIGlmIChjYWNoZWRQYWdlLT5pc0ltbXV0YWJsZSgpKQotICAg
ICAgICAgICAgY2FjaGVkUGFnZSA9IEdseXBoUGFnZTo6Y3JlYXRlQ29weUZvck1peGVkRm9udERh
dGEoKmNhY2hlZFBhZ2UpOworICAgICAgICAgICAgY2FjaGVkUGFnZSA9IEdseXBoUGFnZTo6Y3Jl
YXRlQ29weUZvck1peGVkRm9udHMoKmNhY2hlZFBhZ2UpOwogCiAgICAgICAgIGdseXBoRGF0YSA9
IGdseXBoRGF0YUZvck5vcm1hbFZhcmlhbnQoYywgZGVzY3JpcHRpb24pOwotICAgICAgICBjYWNo
ZWRQYWdlLT5zZXRHbHlwaERhdGFGb3JDaGFyYWN0ZXIoYywgZ2x5cGhEYXRhLmdseXBoLCBnbHlw
aERhdGEuZm9udERhdGEpOworICAgICAgICBjYWNoZWRQYWdlLT5zZXRHbHlwaERhdGFGb3JDaGFy
YWN0ZXIoYywgZ2x5cGhEYXRhLmdseXBoLCBnbHlwaERhdGEuZm9udCk7CiAgICAgfQogICAgIHJl
dHVybiBnbHlwaERhdGE7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250R2x5cGhzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udEdseXBocy5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250R2x5cGhzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDEwICsy
MSwxMCBAQAogI2lmbmRlZiBGb250R2x5cGhzX2gKICNkZWZpbmUgRm9udEdseXBoc19oCiAKKyNp
bmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9udFJhbmdlcy5oIgogI2luY2x1ZGUgIkZvbnRT
ZWxlY3Rvci5oIgogI2luY2x1ZGUgIkdseXBoUGFnZS5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnRE
YXRhLmgiCiAjaW5jbHVkZSAiV2lkdGhDYWNoZS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KQEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgog
CiAgICAgYm9vbCBpc0ZvclBsYXRmb3JtRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1faXNGb3JQbGF0
Zm9ybUZvbnQ7IH0KIAotICAgIEdseXBoRGF0YSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIz
MiwgY29uc3QgRm9udERlc2NyaXB0aW9uJiwgRm9udERhdGFWYXJpYW50KTsKKyAgICBHbHlwaERh
dGEgZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYs
IEZvbnRWYXJpYW50KTsKIAogICAgIGJvb2wgaXNGaXhlZFBpdGNoKGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYpOwogICAgIHZvaWQgZGV0ZXJtaW5lUGl0Y2goY29uc3QgRm9udERlc2NyaXB0aW9uJik7
CkBAIC02NiwxNiArNjYsMTYgQEAgcHVibGljOgogICAgIFdpZHRoQ2FjaGUmIHdpZHRoQ2FjaGUo
KSB7IHJldHVybiBtX3dpZHRoQ2FjaGU7IH0KICAgICBjb25zdCBXaWR0aENhY2hlJiB3aWR0aENh
Y2hlKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aENhY2hlOyB9CiAKLSAgICBjb25zdCBTaW1wbGVG
b250RGF0YSYgcHJpbWFyeVNpbXBsZUZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpOwor
ICAgIGNvbnN0IEZvbnQmIHByaW1hcnlGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpOwogICAg
IFdFQkNPUkVfRVhQT1JUIGNvbnN0IEZvbnRSYW5nZXMmIHJlYWxpemVGYWxsYmFja1Jhbmdlc0F0
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIHVuc2lnbmVkIGZhbGxiYWNrSW5kZXgpOwogCiBwcml2
YXRlOgogICAgIEZvbnRHbHlwaHMoUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+KTsKICAgICBGb250
R2x5cGhzKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsKIAotICAgIEdseXBoRGF0YSBnbHlwaERh
dGFGb3JTeXN0ZW1GYWxsYmFjayhVQ2hhcjMyLCBjb25zdCBGb250RGVzY3JpcHRpb24mLCBGb250
RGF0YVZhcmlhbnQpOworICAgIEdseXBoRGF0YSBnbHlwaERhdGFGb3JTeXN0ZW1GYWxsYmFjayhV
Q2hhcjMyLCBjb25zdCBGb250RGVzY3JpcHRpb24mLCBGb250VmFyaWFudCk7CiAgICAgR2x5cGhE
YXRhIGdseXBoRGF0YUZvck5vcm1hbFZhcmlhbnQoVUNoYXIzMiwgY29uc3QgRm9udERlc2NyaXB0
aW9uJik7Ci0gICAgR2x5cGhEYXRhIGdseXBoRGF0YUZvclZhcmlhbnQoVUNoYXIzMiwgY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiwgRm9udERhdGFWYXJpYW50LCB1bnNpZ25lZCBmYWxsYmFja0luZGV4
KTsKKyAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yVmFyaWFudChVQ2hhcjMyLCBjb25zdCBGb250
RGVzY3JpcHRpb24mLCBGb250VmFyaWFudCwgdW5zaWduZWQgZmFsbGJhY2tJbmRleCk7CiAKICAg
ICBWZWN0b3I8Rm9udFJhbmdlcywgMT4gbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzOwogICAgIHVu
c2lnbmVkIG1fbGFzdFJlYWxpemVkRmFsbGJhY2tJbmRleCB7IDAgfTsKQEAgLTgzLDkgKzgzLDkg
QEAgcHJpdmF0ZToKICAgICBSZWZQdHI8R2x5cGhQYWdlPiBtX2NhY2hlZFBhZ2VaZXJvOwogICAg
IEhhc2hNYXA8aW50LCBSZWZQdHI8R2x5cGhQYWdlPj4gbV9jYWNoZWRQYWdlczsKIAotICAgIEhh
c2hTZXQ8UmVmUHRyPFNpbXBsZUZvbnREYXRhPj4gbV9zeXN0ZW1GYWxsYmFja0ZvbnREYXRhU2V0
OworICAgIEhhc2hTZXQ8UmVmUHRyPEZvbnQ+PiBtX3N5c3RlbUZhbGxiYWNrRm9udFNldDsKIAot
ICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBtX2NhY2hlZFByaW1hcnlTaW1wbGVGb250RGF0YTsK
KyAgICBjb25zdCBGb250KiBtX2NhY2hlZFByaW1hcnlGb250OwogICAgIFJlZlB0cjxGb250U2Vs
ZWN0b3I+IG1fZm9udFNlbGVjdG9yOwogCiAgICAgV2lkdGhDYWNoZSBtX3dpZHRoQ2FjaGU7CkBA
IC0xMDMsMTYgKzEwMywxNiBAQCBpbmxpbmUgYm9vbCBGb250R2x5cGhzOjppc0ZpeGVkUGl0Y2go
Y29uCiAgICAgcmV0dXJuIG1fcGl0Y2ggPT0gRml4ZWRQaXRjaDsKIH07CiAKLWlubGluZSBjb25z
dCBTaW1wbGVGb250RGF0YSYgRm9udEdseXBoczo6cHJpbWFyeVNpbXBsZUZvbnREYXRhKGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCitpbmxpbmUgY29uc3QgRm9udCYgRm9udEds
eXBoczo6cHJpbWFyeUZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKIHsK
ICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGlmICghbV9jYWNoZWRQcmltYXJ5U2lt
cGxlRm9udERhdGEpIHsKKyAgICBpZiAoIW1fY2FjaGVkUHJpbWFyeUZvbnQpIHsKICAgICAgICAg
YXV0byYgcHJpbWFyeVJhbmdlcyA9IHJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGRlc2NyaXB0aW9u
LCAwKTsKLSAgICAgICAgbV9jYWNoZWRQcmltYXJ5U2ltcGxlRm9udERhdGEgPSBwcmltYXJ5UmFu
Z2VzLmZvbnREYXRhRm9yQ2hhcmFjdGVyKCcgJyk7Ci0gICAgICAgIGlmICghbV9jYWNoZWRQcmlt
YXJ5U2ltcGxlRm9udERhdGEpCi0gICAgICAgICAgICBtX2NhY2hlZFByaW1hcnlTaW1wbGVGb250
RGF0YSA9ICZwcmltYXJ5UmFuZ2VzLmZvbnREYXRhRm9yRmlyc3RSYW5nZSgpOworICAgICAgICBt
X2NhY2hlZFByaW1hcnlGb250ID0gcHJpbWFyeVJhbmdlcy5mb250Rm9yQ2hhcmFjdGVyKCcgJyk7
CisgICAgICAgIGlmICghbV9jYWNoZWRQcmltYXJ5Rm9udCkKKyAgICAgICAgICAgIG1fY2FjaGVk
UHJpbWFyeUZvbnQgPSAmcHJpbWFyeVJhbmdlcy5mb250Rm9yRmlyc3RSYW5nZSgpOwogICAgIH0K
LSAgICByZXR1cm4gKm1fY2FjaGVkUHJpbWFyeVNpbXBsZUZvbnREYXRhOworICAgIHJldHVybiAq
bV9jYWNoZWRQcmltYXJ5Rm9udDsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udE1ldHJpY3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250TWV0cmljcy5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250TWV0cmljcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzMsNyArMTMzLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0SGFzWmVyb1dpZHRoKGJv
b2wgaGFzWmVyb1dpZHRoKSB7IG1faGFzWmVyb1dpZHRoID0gaGFzWmVyb1dpZHRoOyB9CiAKIHBy
aXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIFNpbXBsZUZvbnREYXRhOworICAgIGZyaWVuZCBjbGFz
cyBGb250OwogCiAgICAgdm9pZCByZXNldCgpCiAgICAgewpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udFJhbmdlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFJhbmdlcy5jcHAJKHJldmlzaW9uIDE3ODQ5NikK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRSYW5nZXMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiRm9udFJhbmdlcy5oIgogCi0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKKyNpbmNsdWRl
ICJGb250LmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KIApAQCAtMzYsMzQgKzM2LDM0IEBAIEZvbnRSYW5nZXM6OkZvbnRSYW5n
ZXMoKQogewogfQogCi1Gb250UmFuZ2VzOjpGb250UmFuZ2VzKFJlZlB0cjxTaW1wbGVGb250RGF0
YT4mJiBmb250RGF0YSkKK0ZvbnRSYW5nZXM6OkZvbnRSYW5nZXMoUmVmUHRyPEZvbnQ+JiYgZm9u
dCkKIHsKLSAgICBpZiAoZm9udERhdGEpCi0gICAgICAgIG1fcmFuZ2VzLmFwcGVuZChSYW5nZSB7
IDAsIDB4N0ZGRkZGRkYsIGZvbnREYXRhLnJlbGVhc2VOb25OdWxsKCkgfSk7CisgICAgaWYgKGZv
bnQpCisgICAgICAgIG1fcmFuZ2VzLmFwcGVuZChSYW5nZSB7IDAsIDB4N0ZGRkZGRkYsIGZvbnQu
cmVsZWFzZU5vbk51bGwoKSB9KTsKIH0KIAogRm9udFJhbmdlczo6fkZvbnRSYW5nZXMoKQogewog
fQogCi1jb25zdCBTaW1wbGVGb250RGF0YSogRm9udFJhbmdlczo6Zm9udERhdGFGb3JDaGFyYWN0
ZXIoVUNoYXIzMiBjKSBjb25zdAorY29uc3QgRm9udCogRm9udFJhbmdlczo6Zm9udEZvckNoYXJh
Y3RlcihVQ2hhcjMyIGMpIGNvbnN0CiB7CiAgICAgZm9yIChhdXRvJiByYW5nZSA6IG1fcmFuZ2Vz
KSB7CiAgICAgICAgIGlmIChyYW5nZS5mcm9tKCkgPD0gYyAmJiBjIDw9IHJhbmdlLnRvKCkpCi0g
ICAgICAgICAgICByZXR1cm4gJnJhbmdlLmZvbnREYXRhKCk7CisgICAgICAgICAgICByZXR1cm4g
JnJhbmdlLmZvbnQoKTsKICAgICB9CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLWNvbnN0IFNp
bXBsZUZvbnREYXRhJiBGb250UmFuZ2VzOjpmb250RGF0YUZvckZpcnN0UmFuZ2UoKSBjb25zdAor
Y29uc3QgRm9udCYgRm9udFJhbmdlczo6Zm9udEZvckZpcnN0UmFuZ2UoKSBjb25zdAogewotICAg
IHJldHVybiBtX3Jhbmdlc1swXS5mb250RGF0YSgpOworICAgIHJldHVybiBtX3Jhbmdlc1swXS5m
b250KCk7CiB9CiAKIGJvb2wgRm9udFJhbmdlczo6aXNMb2FkaW5nKCkgY29uc3QKIHsKICAgICBm
b3IgKGF1dG8mIHJhbmdlIDogbV9yYW5nZXMpIHsKLSAgICAgICAgaWYgKHJhbmdlLmZvbnREYXRh
KCkuaXNMb2FkaW5nKCkpCisgICAgICAgIGlmIChyYW5nZS5mb250KCkuaXNMb2FkaW5nKCkpCiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFJhbmdlcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRSYW5nZXMuaAkocmV2aXNp
b24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFJhbmdl
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIEZvbnRSYW5nZXNf
aAogI2RlZmluZSBGb250UmFuZ2VzX2gKIAotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisj
aW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgPHd0Zi9UeXBlQ2FzdHMuaD4KICNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CiAKQEAgLTM1LDI1ICszNSwyNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBj
bGFzcyBGb250UmFuZ2VzIHsKIHB1YmxpYzoKICAgICBzdHJ1Y3QgUmFuZ2UgewotICAgICAgICBS
YW5nZShVQ2hhcjMyIGZyb20sIFVDaGFyMzIgdG8sIFJlZjxTaW1wbGVGb250RGF0YT4mJiBmb250
RGF0YSkKKyAgICAgICAgUmFuZ2UoVUNoYXIzMiBmcm9tLCBVQ2hhcjMyIHRvLCBSZWY8Rm9udD4m
JiBmb250KQogICAgICAgICAgICAgOiBtX2Zyb20oZnJvbSkKICAgICAgICAgICAgICwgbV90byh0
bykKLSAgICAgICAgICAgICwgbV9mb250RGF0YShXVEY6Om1vdmUoZm9udERhdGEpKQorICAgICAg
ICAgICAgLCBtX2ZvbnQoV1RGOjptb3ZlKGZvbnQpKQogICAgICAgICB7CiAgICAgICAgIH0KIAog
ICAgICAgICBVQ2hhcjMyIGZyb20oKSBjb25zdCB7IHJldHVybiBtX2Zyb207IH0KICAgICAgICAg
VUNoYXIzMiB0bygpIGNvbnN0IHsgcmV0dXJuIG1fdG87IH0KLSAgICAgICAgY29uc3QgU2ltcGxl
Rm9udERhdGEmIGZvbnREYXRhKCkgY29uc3QgeyByZXR1cm4gKm1fZm9udERhdGE7IH0KKyAgICAg
ICAgY29uc3QgRm9udCYgZm9udCgpIGNvbnN0IHsgcmV0dXJuICptX2ZvbnQ7IH0KIAogICAgIHBy
aXZhdGU6CiAgICAgICAgIFVDaGFyMzIgbV9mcm9tOwogICAgICAgICBVQ2hhcjMyIG1fdG87Ci0g
ICAgICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gbV9mb250RGF0YTsKKyAgICAgICAgUmVmUHRy
PEZvbnQ+IG1fZm9udDsKICAgICB9OwogCiAgICAgRm9udFJhbmdlcygpOwotICAgIGV4cGxpY2l0
IEZvbnRSYW5nZXMoUmVmUHRyPFNpbXBsZUZvbnREYXRhPiYmKTsKKyAgICBleHBsaWNpdCBGb250
UmFuZ2VzKFJlZlB0cjxGb250PiYmKTsKICAgICB+Rm9udFJhbmdlcygpOwogCiAgICAgYm9vbCBp
c051bGwoKSBjb25zdCB7IHJldHVybiBtX3Jhbmdlcy5pc0VtcHR5KCk7IH0KQEAgLTYyLDggKzYy
LDggQEAgcHVibGljOgogICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3Jhbmdl
cy5zaXplKCk7IH0KICAgICBjb25zdCBSYW5nZSYgcmFuZ2VBdCh1bnNpZ25lZCBpKSBjb25zdCB7
IHJldHVybiBtX3Jhbmdlc1tpXTsgfQogCi0gICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnRE
YXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIpIGNvbnN0OwotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRh
JiBmb250RGF0YUZvckZpcnN0UmFuZ2UoKSBjb25zdDsKKyAgICBjb25zdCBGb250KiBmb250Rm9y
Q2hhcmFjdGVyKFVDaGFyMzIpIGNvbnN0OworICAgIGNvbnN0IEZvbnQmIGZvbnRGb3JGaXJzdFJh
bmdlKCkgY29uc3Q7CiAgICAgYm9vbCBpc0xvYWRpbmcoKSBjb25zdDsKIAogcHJpdmF0ZToKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRTZWxlY3Rvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRTZWxlY3Rvci5o
CShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250U2VsZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsOSArNDEsOSBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB+Rm9udFNlbGVjdG9yKCkgeyB9CiAKICAgICB2aXJ0dWFsIEZvbnRSYW5nZXMg
Zm9udFJhbmdlc0ZvckZhbWlseShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9taWNT
dHJpbmcmKSA9IDA7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBmYWxs
YmFja0ZvbnREYXRhQXQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgc2l6ZV90KSA9IDA7CisgICAg
dmlydHVhbCBQYXNzUmVmUHRyPEZvbnQ+IGZhbGxiYWNrRm9udEF0KGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYsIHNpemVfdCkgPSAwOwogCi0gICAgdmlydHVhbCBzaXplX3QgZmFsbGJhY2tGb250RGF0
YUNvdW50KCkgPSAwOworICAgIHZpcnR1YWwgc2l6ZV90IGZhbGxiYWNrRm9udENvdW50KCkgPSAw
OwogICAgIHZpcnR1YWwgYm9vbCByZXNvbHZlc0ZhbWlseUZvcihjb25zdCBGb250RGVzY3JpcHRp
b24mKSBjb25zdCA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgZm9udENhY2hlSW52YWxpZGF0ZWQo
KSB7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoQnVmZmVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhC
dWZmZXIuaAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR2x5cGhCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFNpbXBsZUZvbnREYXRhOworY2xhc3MgRm9udDsK
IAogI2lmIFVTRShDQUlSTykKIC8vIEZJWE1FOiBXaHkgZG9lcyBDYWlybyB1c2Ugc3VjaCBhIGh1
Z2Ugc3RydWN0IGluc3RlYWQgb2YganVzdCBhbiBvZmZzZXQgaW50byBhbiBhcnJheT8KQEAgLTc2
LDEyICs3NiwxMiBAQCB0eXBlZGVmIEZsb2F0U2l6ZSBHbHlwaEJ1ZmZlckFkdmFuY2U7CiAKIGNs
YXNzIEdseXBoQnVmZmVyIHsKIHB1YmxpYzoKLSAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJl
dHVybiBtX2ZvbnREYXRhLmlzRW1wdHkoKTsgfQotICAgIGludCBzaXplKCkgY29uc3QgeyByZXR1
cm4gbV9mb250RGF0YS5zaXplKCk7IH0KKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVy
biBtX2ZvbnQuaXNFbXB0eSgpOyB9CisgICAgaW50IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2Zv
bnQuc2l6ZSgpOyB9CiAgICAgCiAgICAgdm9pZCBjbGVhcigpCiAgICAgewotICAgICAgICBtX2Zv
bnREYXRhLmNsZWFyKCk7CisgICAgICAgIG1fZm9udC5jbGVhcigpOwogICAgICAgICBtX2dseXBo
cy5jbGVhcigpOwogICAgICAgICBtX2FkdmFuY2VzLmNsZWFyKCk7CiAgICAgICAgIGlmIChtX29m
ZnNldHNJblN0cmluZykKQEAgLTk2LDcgKzk2LDcgQEAgcHVibGljOgogICAgIGNvbnN0IEdseXBo
QnVmZmVyR2x5cGgqIGdseXBocyhpbnQgZnJvbSkgY29uc3QgeyByZXR1cm4gbV9nbHlwaHMuZGF0
YSgpICsgZnJvbTsgfQogICAgIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMoaW50
IGZyb20pIGNvbnN0IHsgcmV0dXJuIG1fYWR2YW5jZXMuZGF0YSgpICsgZnJvbTsgfQogCi0gICAg
Y29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhQXQoaW50IGluZGV4KSBjb25zdCB7IHJldHVy
biBtX2ZvbnREYXRhW2luZGV4XTsgfQorICAgIGNvbnN0IEZvbnQqIGZvbnRBdChpbnQgaW5kZXgp
IGNvbnN0IHsgcmV0dXJuIG1fZm9udFtpbmRleF07IH0KIAogICAgIHZvaWQgc2V0SW5pdGlhbEFk
dmFuY2UoR2x5cGhCdWZmZXJBZHZhbmNlIGluaXRpYWxBZHZhbmNlKSB7IG1faW5pdGlhbEFkdmFu
Y2UgPSBpbml0aWFsQWR2YW5jZTsgfQogICAgIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSYgaW5p
dGlhbEFkdmFuY2UoKSBjb25zdCB7IHJldHVybiBtX2luaXRpYWxBZHZhbmNlOyB9CkBAIC0xMjYs
OSArMTI2LDkgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgbm9PZmZzZXQgPSBVSU5UX01BWDsKLSAgICB2b2lkIGFkZChHbHlwaCBnbHlwaCwgY29uc3Qg
U2ltcGxlRm9udERhdGEqIGZvbnQsIGZsb2F0IHdpZHRoLCB1bnNpZ25lZCBvZmZzZXRJblN0cmlu
ZyA9IG5vT2Zmc2V0LCBjb25zdCBGbG9hdFNpemUqIG9mZnNldCA9IDApCisgICAgdm9pZCBhZGQo
R2x5cGggZ2x5cGgsIGNvbnN0IEZvbnQqIGZvbnQsIGZsb2F0IHdpZHRoLCB1bnNpZ25lZCBvZmZz
ZXRJblN0cmluZyA9IG5vT2Zmc2V0LCBjb25zdCBGbG9hdFNpemUqIG9mZnNldCA9IDApCiAgICAg
ewotICAgICAgICBtX2ZvbnREYXRhLmFwcGVuZChmb250KTsKKyAgICAgICAgbV9mb250LmFwcGVu
ZChmb250KTsKIAogI2lmIFVTRShDQUlSTykKICAgICAgICAgY2Fpcm9fZ2x5cGhfdCBjYWlyb0ds
eXBoOwpAQCAtMTU5LDkgKzE1OSw5IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAjaWYgIVVTRShX
SU5HREkpCi0gICAgdm9pZCBhZGQoR2x5cGggZ2x5cGgsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBm
b250LCBHbHlwaEJ1ZmZlckFkdmFuY2UgYWR2YW5jZSwgdW5zaWduZWQgb2Zmc2V0SW5TdHJpbmcg
PSBub09mZnNldCkKKyAgICB2b2lkIGFkZChHbHlwaCBnbHlwaCwgY29uc3QgRm9udCogZm9udCwg
R2x5cGhCdWZmZXJBZHZhbmNlIGFkdmFuY2UsIHVuc2lnbmVkIG9mZnNldEluU3RyaW5nID0gbm9P
ZmZzZXQpCiAgICAgewotICAgICAgICBtX2ZvbnREYXRhLmFwcGVuZChmb250KTsKKyAgICAgICAg
bV9mb250LmFwcGVuZChmb250KTsKICNpZiBVU0UoQ0FJUk8pCiAgICAgICAgIGNhaXJvX2dseXBo
X3QgY2Fpcm9HbHlwaDsKICAgICAgICAgY2Fpcm9HbHlwaC5pbmRleCA9IGdseXBoOwpAQCAtMjA1
LDkgKzIwNSw5IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgdm9pZCBzd2FwKGludCBpbmRleDEs
IGludCBpbmRleDIpCiAgICAgewotICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogZiA9IG1f
Zm9udERhdGFbaW5kZXgxXTsKLSAgICAgICAgbV9mb250RGF0YVtpbmRleDFdID0gbV9mb250RGF0
YVtpbmRleDJdOwotICAgICAgICBtX2ZvbnREYXRhW2luZGV4Ml0gPSBmOworICAgICAgICBjb25z
dCBGb250KiBmID0gbV9mb250W2luZGV4MV07CisgICAgICAgIG1fZm9udFtpbmRleDFdID0gbV9m
b250W2luZGV4Ml07CisgICAgICAgIG1fZm9udFtpbmRleDJdID0gZjsKIAogICAgICAgICBHbHlw
aEJ1ZmZlckdseXBoIGcgPSBtX2dseXBoc1tpbmRleDFdOwogICAgICAgICBtX2dseXBoc1tpbmRl
eDFdID0gbV9nbHlwaHNbaW5kZXgyXTsKQEAgLTIyNCw3ICsyMjQsNyBAQCBwcml2YXRlOgogI2Vu
ZGlmCiAgICAgfQogCi0gICAgVmVjdG9yPGNvbnN0IFNpbXBsZUZvbnREYXRhKiwgMjA0OD4gbV9m
b250RGF0YTsKKyAgICBWZWN0b3I8Y29uc3QgRm9udCosIDIwNDg+IG1fZm9udDsKICAgICBWZWN0
b3I8R2x5cGhCdWZmZXJHbHlwaCwgMjA0OD4gbV9nbHlwaHM7CiAgICAgVmVjdG9yPEdseXBoQnVm
ZmVyQWR2YW5jZSwgMjA0OD4gbV9hZHZhbmNlczsKICAgICBHbHlwaEJ1ZmZlckFkdmFuY2UgbV9p
bml0aWFsQWR2YW5jZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ds
eXBoUGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dseXBoUGFnZS5oCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HbHlwaFBhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzksMTggKzM5LDE4IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgU2ltcGxlRm9udERhdGE7CitjbGFzcyBG
b250OwogCi0vLyBIb2xkcyB0aGUgZ2x5cGggaW5kZXggYW5kIHRoZSBjb3JyZXNwb25kaW5nIFNp
bXBsZUZvbnREYXRhIGluZm9ybWF0aW9uIGZvciBhIGdpdmVuCisvLyBIb2xkcyB0aGUgZ2x5cGgg
aW5kZXggYW5kIHRoZSBjb3JyZXNwb25kaW5nIEZvbnQgaW5mb3JtYXRpb24gZm9yIGEgZ2l2ZW4K
IC8vIGNoYXJhY3Rlci4KIHN0cnVjdCBHbHlwaERhdGEgewotICAgIEdseXBoRGF0YShHbHlwaCBn
ID0gMCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGYgPSAwKQorICAgIEdseXBoRGF0YShHbHlwaCBn
ID0gMCwgY29uc3QgRm9udCogZiA9IDApCiAgICAgICAgIDogZ2x5cGgoZykKLSAgICAgICAgLCBm
b250RGF0YShmKQorICAgICAgICAsIGZvbnQoZikKICAgICB7CiAgICAgfQogICAgIEdseXBoIGds
eXBoOwotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YTsKKyAgICBjb25zdCBGb250
KiBmb250OwogfTsKIAogI2lmIENPTVBJTEVSKE1TVkMpCkBAIC02NiwyNCArNjYsMjQgQEAgc3Ry
dWN0IEdseXBoRGF0YSB7CiAvLyBtaXNzaW5nIGluIHRoZSBwcmltYXJ5IGZvbnQuCiBjbGFzcyBH
bHlwaFBhZ2UgOiBwdWJsaWMgUmVmQ291bnRlZDxHbHlwaFBhZ2U+IHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxHbHlwaFBhZ2U+IGNyZWF0ZUZvck1peGVkRm9udERhdGEoKQorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEdseXBoUGFnZT4gY3JlYXRlRm9yTWl4ZWRGb250cygpCiAgICAg
ewotICAgICAgICB2b2lkKiBzbG90ID0gZmFzdE1hbGxvYyhzaXplb2YoR2x5cGhQYWdlKSArIHNp
emVvZihTaW1wbGVGb250RGF0YSopICogR2x5cGhQYWdlOjpzaXplKTsKKyAgICAgICAgdm9pZCog
c2xvdCA9IGZhc3RNYWxsb2Moc2l6ZW9mKEdseXBoUGFnZSkgKyBzaXplb2YoRm9udCopICogR2x5
cGhQYWdlOjpzaXplKTsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyAoTm90TnVsbCwgc2xv
dCkgR2x5cGhQYWdlKG51bGxwdHIpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxH
bHlwaFBhZ2U+IGNyZWF0ZUNvcHlGb3JNaXhlZEZvbnREYXRhKGNvbnN0IEdseXBoUGFnZSYgb3Jp
Z2luYWwpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8R2x5cGhQYWdlPiBjcmVhdGVDb3B5Rm9yTWl4
ZWRGb250cyhjb25zdCBHbHlwaFBhZ2UmIG9yaWdpbmFsKQogICAgIHsKLSAgICAgICAgUmVmUHRy
PEdseXBoUGFnZT4gcGFnZSA9IGNyZWF0ZUZvck1peGVkRm9udERhdGEoKTsKKyAgICAgICAgUmVm
UHRyPEdseXBoUGFnZT4gcGFnZSA9IGNyZWF0ZUZvck1peGVkRm9udHMoKTsKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IEdseXBoUGFnZTo6c2l6ZTsgKytpKQogICAgICAgICAgICAg
cGFnZS0+c2V0R2x5cGhEYXRhRm9ySW5kZXgoaSwgb3JpZ2luYWwuZ2x5cGhEYXRhRm9ySW5kZXgo
aSkpOwogICAgICAgICByZXR1cm4gcGFnZS5yZWxlYXNlKCk7CiAgICAgfQogCi0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8R2x5cGhQYWdlPiBjcmVhdGVGb3JTaW5nbGVGb250RGF0YShjb25zdCBTaW1w
bGVGb250RGF0YSogZm9udERhdGEpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8R2x5cGhQYWdlPiBj
cmVhdGVGb3JTaW5nbGVGb250KGNvbnN0IEZvbnQqIGZvbnQpCiAgICAgewotICAgICAgICBBU1NF
UlQoZm9udERhdGEpOwotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdseXBoUGFnZShmb250
RGF0YSkpOworICAgICAgICBBU1NFUlQoZm9udCk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgR2x5cGhQYWdlKGZvbnQpKTsKICAgICB9CiAKICAgICB+R2x5cGhQYWdlKCkKQEAgLTExMSw3
ICsxMTEsNyBAQCBwdWJsaWM6CiAgICAgICAgIEdseXBoIGdseXBoID0gbV9nbHlwaHNbaW5kZXhd
OwogICAgICAgICBpZiAoaGFzUGVyR2x5cGhGb250RGF0YSgpKQogICAgICAgICAgICAgcmV0dXJu
IEdseXBoRGF0YShnbHlwaCwgbV9wZXJHbHlwaEZvbnREYXRhW2luZGV4XSk7Ci0gICAgICAgIHJl
dHVybiBHbHlwaERhdGEoZ2x5cGgsIGdseXBoID8gbV9mb250RGF0YUZvckFsbEdseXBocyA6IDAp
OworICAgICAgICByZXR1cm4gR2x5cGhEYXRhKGdseXBoLCBnbHlwaCA/IG1fZm9udEZvckFsbEds
eXBocyA6IDApOwogICAgIH0KIAogICAgIEFMV0FZU19JTkxJTkUgR2x5cGggZ2x5cGhBdCh1bnNp
Z25lZCBpbmRleCkgY29uc3QKQEAgLTEyMCw2NyArMTIwLDY3IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIG1fZ2x5cGhzW2luZGV4XTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIGNvbnN0
IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMpIGNvbnN0Cisg
ICAgQUxXQVlTX0lOTElORSBjb25zdCBGb250KiBmb250Rm9yQ2hhcmFjdGVyKFVDaGFyMzIgYykg
Y29uc3QKICAgICB7CiAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gaW5kZXhGb3JDaGFyYWN0ZXIo
Yyk7CiAgICAgICAgIGlmIChoYXNQZXJHbHlwaEZvbnREYXRhKCkpCiAgICAgICAgICAgICByZXR1
cm4gbV9wZXJHbHlwaEZvbnREYXRhW2luZGV4XTsKLSAgICAgICAgcmV0dXJuIG1fZ2x5cGhzW2lu
ZGV4XSA/IG1fZm9udERhdGFGb3JBbGxHbHlwaHMgOiAwOworICAgICAgICByZXR1cm4gbV9nbHlw
aHNbaW5kZXhdID8gbV9mb250Rm9yQWxsR2x5cGhzIDogMDsKICAgICB9CiAKLSAgICB2b2lkIHNl
dEdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMsIEdseXBoIGcsIGNvbnN0IFNpbXBsZUZv
bnREYXRhKiBmKQorICAgIHZvaWQgc2V0R2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYywg
R2x5cGggZywgY29uc3QgRm9udCogZikKICAgICB7CiAgICAgICAgIHNldEdseXBoRGF0YUZvcklu
ZGV4KGluZGV4Rm9yQ2hhcmFjdGVyKGMpLCBnLCBmKTsKICAgICB9CiAKLSAgICB2b2lkIHNldEds
eXBoRGF0YUZvckluZGV4KHVuc2lnbmVkIGluZGV4LCBHbHlwaCBnbHlwaCwgY29uc3QgU2ltcGxl
Rm9udERhdGEqIGZvbnREYXRhKQorICAgIHZvaWQgc2V0R2x5cGhEYXRhRm9ySW5kZXgodW5zaWdu
ZWQgaW5kZXgsIEdseXBoIGdseXBoLCBjb25zdCBGb250KiBmb250KQogICAgIHsKICAgICAgICAg
QVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaW5kZXggPCBzaXplKTsKICAgICAgICAg
QVNTRVJUKCFtX2lzSW1tdXRhYmxlKTsKICAgICAgICAgCiAgICAgICAgIG1fZ2x5cGhzW2luZGV4
XSA9IGdseXBoOwogCi0gICAgICAgIC8vIEdseXBoUGFnZSBnZXR0ZXJzIHdpbGwgYWx3YXlzIHJl
dHVybiBhIG51bGwgU2ltcGxlRm9udERhdGEqIGZvciBnbHlwaCAjMCBpZiB0aGVyZSdzIG5vIHBl
ci1nbHlwaCBmb250IGFycmF5LgorICAgICAgICAvLyBHbHlwaFBhZ2UgZ2V0dGVycyB3aWxsIGFs
d2F5cyByZXR1cm4gYSBudWxsIEZvbnQqIGZvciBnbHlwaCAjMCBpZiB0aGVyZSdzIG5vIHBlci1n
bHlwaCBmb250IGFycmF5LgogICAgICAgICBpZiAoaGFzUGVyR2x5cGhGb250RGF0YSgpKSB7Ci0g
ICAgICAgICAgICBtX3BlckdseXBoRm9udERhdGFbaW5kZXhdID0gZ2x5cGggPyBmb250RGF0YSA6
IDA7CisgICAgICAgICAgICBtX3BlckdseXBoRm9udERhdGFbaW5kZXhdID0gZ2x5cGggPyBmb250
IDogMDsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIC8vIEEgc2lu
Z2xlLWZvbnQgR2x5cGhQYWdlIGFscmVhZHkgYXNzaWduZWQgbV9mb250RGF0YUZvckFsbEdseXBo
cyBpbiB0aGUgY29uc3RydWN0b3IuCi0gICAgICAgIEFTU0VSVCghZ2x5cGggfHwgZm9udERhdGEg
PT0gbV9mb250RGF0YUZvckFsbEdseXBocyk7CisgICAgICAgIC8vIEEgc2luZ2xlLWZvbnQgR2x5
cGhQYWdlIGFscmVhZHkgYXNzaWduZWQgbV9mb250Rm9yQWxsR2x5cGhzIGluIHRoZSBjb25zdHJ1
Y3Rvci4KKyAgICAgICAgQVNTRVJUKCFnbHlwaCB8fCBmb250ID09IG1fZm9udEZvckFsbEdseXBo
cyk7CiAgICAgfQogCiAgICAgdm9pZCBzZXRHbHlwaERhdGFGb3JJbmRleCh1bnNpZ25lZCBpbmRl
eCwgY29uc3QgR2x5cGhEYXRhJiBnbHlwaERhdGEpCiAgICAgewotICAgICAgICBzZXRHbHlwaERh
dGFGb3JJbmRleChpbmRleCwgZ2x5cGhEYXRhLmdseXBoLCBnbHlwaERhdGEuZm9udERhdGEpOwor
ICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChpbmRleCwgZ2x5cGhEYXRhLmdseXBoLCBnbHlw
aERhdGEuZm9udCk7CiAgICAgfQogCiAgICAgLy8gSW1wbGVtZW50ZWQgYnkgdGhlIHBsYXRmb3Jt
LgotICAgIGJvb2wgZmlsbCh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIq
IGNoYXJhY3RlckJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBTaW1wbGVGb250
RGF0YSopOworICAgIGJvb2wgZmlsbCh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwg
VUNoYXIqIGNoYXJhY3RlckJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBGb250
Kik7CiAjaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgc3RhdGljIGJvb2wgbWF5VXNlTWl4ZWRGb250
RGF0YVdoZW5GaWxsaW5nKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJCdWZmZXIsIHVuc2lnbmVkIGJ1
ZmZlckxlbmd0aCwgY29uc3QgU2ltcGxlRm9udERhdGEqKTsKKyAgICBzdGF0aWMgYm9vbCBtYXlV
c2VNaXhlZEZvbnRzV2hlbkZpbGxpbmcoY29uc3QgVUNoYXIqIGNoYXJhY3RlckJ1ZmZlciwgdW5z
aWduZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBGb250Kik7CiAjZWxzZQotICAgIHN0YXRpYyBib29s
IG1heVVzZU1peGVkRm9udERhdGFXaGVuRmlsbGluZyhjb25zdCBVQ2hhciosIHVuc2lnbmVkLCBj
b25zdCBTaW1wbGVGb250RGF0YSopIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgc3RhdGljIGJvb2wg
bWF5VXNlTWl4ZWRGb250c1doZW5GaWxsaW5nKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQsIGNvbnN0
IEZvbnQqKSB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCiAKIHByaXZhdGU6Ci0gICAgZXhwbGlj
aXQgR2x5cGhQYWdlKGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YUZvckFsbEdseXBocykK
LSAgICAgICAgOiBtX2ZvbnREYXRhRm9yQWxsR2x5cGhzKGZvbnREYXRhRm9yQWxsR2x5cGhzKQor
ICAgIGV4cGxpY2l0IEdseXBoUGFnZShjb25zdCBGb250KiBmb250Rm9yQWxsR2x5cGhzKQorICAg
ICAgICA6IG1fZm9udEZvckFsbEdseXBocyhmb250Rm9yQWxsR2x5cGhzKQogICAgIHsKICAgICAg
ICAgbWVtc2V0KG1fZ2x5cGhzLCAwLCBzaXplb2YobV9nbHlwaHMpKTsKICAgICAgICAgaWYgKGhh
c1BlckdseXBoRm9udERhdGEoKSkKLSAgICAgICAgICAgIG1lbXNldChtX3BlckdseXBoRm9udERh
dGEsIDAsIHNpemVvZihTaW1wbGVGb250RGF0YSopICogR2x5cGhQYWdlOjpzaXplKTsKKyAgICAg
ICAgICAgIG1lbXNldChtX3BlckdseXBoRm9udERhdGEsIDAsIHNpemVvZihGb250KikgKiBHbHlw
aFBhZ2U6OnNpemUpOwogICAgICAgICArK3NfY291bnQ7CiAgICAgfQogCi0gICAgYm9vbCBoYXNQ
ZXJHbHlwaEZvbnREYXRhKCkgY29uc3QgeyByZXR1cm4gIW1fZm9udERhdGFGb3JBbGxHbHlwaHM7
IH0KKyAgICBib29sIGhhc1BlckdseXBoRm9udERhdGEoKSBjb25zdCB7IHJldHVybiAhbV9mb250
Rm9yQWxsR2x5cGhzOyB9CiAKLSAgICBjb25zdCBTaW1wbGVGb250RGF0YSogbV9mb250RGF0YUZv
ckFsbEdseXBoczsKKyAgICBjb25zdCBGb250KiBtX2ZvbnRGb3JBbGxHbHlwaHM7CiAgICAgR2x5
cGggbV9nbHlwaHNbc2l6ZV07CiAKICAgICBib29sIG1faXNJbW11dGFibGUgeyBmYWxzZSB9Owot
ICAgIC8vIE5PVEU6IFRoaXMgYXJyYXkgaGFzIChHbHlwaFBhZ2U6OnNpemUpIGVsZW1lbnRzIGlm
IG1fZm9udERhdGFGb3JBbGxHbHlwaHMgaXMgbnVsbC4KLSAgICBjb25zdCBTaW1wbGVGb250RGF0
YSogbV9wZXJHbHlwaEZvbnREYXRhWzBdOworICAgIC8vIE5PVEU6IFRoaXMgYXJyYXkgaGFzIChH
bHlwaFBhZ2U6OnNpemUpIGVsZW1lbnRzIGlmIG1fZm9udEZvckFsbEdseXBocyBpcyBudWxsLgor
ICAgIGNvbnN0IEZvbnQqIG1fcGVyR2x5cGhGb250RGF0YVswXTsKIAogICAgIHN0YXRpYyB1bnNp
Z25lZCBzX2NvdW50OwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAkocmV2aXNpb24gMTc4NTEwKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDQ4LDEyICs0NDgsMTIgQEAgZmxvYXQgR3JhcGhpY3NDb250ZXh0OjpkcmF3
VGV4dChjb25zdCBGbwogfQogI2VuZGlmIC8vICFQTEFURk9STShJT1MpCiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3R2x5cGhzKGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBTaW1w
bGVGb250RGF0YSYgZm9udERhdGEsIGNvbnN0IEdseXBoQnVmZmVyJiBidWZmZXIsIGludCBmcm9t
LCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3R2x5cGhzKGNvbnN0IEZvbnRDYXNjYWRlJiBmb250Q2FzY2FkZSwgY29uc3Qg
Rm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGJ1ZmZlciwgaW50IGZyb20sIGludCBudW1H
bHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQogewogICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGZvbnQuZHJhd0dseXBocyh0aGlzLCAmZm9u
dERhdGEsIGJ1ZmZlciwgZnJvbSwgbnVtR2x5cGhzLCBwb2ludCk7CisgICAgZm9udENhc2NhZGUu
ZHJhd0dseXBocyh0aGlzLCAmZm9udCwgYnVmZmVyLCBmcm9tLCBudW1HbHlwaHMsIHBvaW50KTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnRD
YXNjYWRlJiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbWFy
aywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAko
cmV2aXNpb24gMTc4NTEwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiAjaWYgVVNFKFdJTkdESSkKICAgICBjbGFzcyBTaGFyZWRCaXRtYXA7Ci0g
ICAgY2xhc3MgU2ltcGxlRm9udERhdGE7CisgICAgY2xhc3MgRm9udDsKICAgICBjbGFzcyBHbHlw
aEJ1ZmZlcjsKICNlbmRpZgogCkBAIC0zNjAsNyArMzYwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogI2Vsc2UKICAgICAgICAgZmxvYXQgZHJhd1RleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25z
dCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tID0gMCwgaW50IHRvID0gLTEp
OwogI2VuZGlmCi0gICAgICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250Q2FzY2FkZSYsIGNv
bnN0IFNpbXBsZUZvbnREYXRhJiwgY29uc3QgR2x5cGhCdWZmZXImLCBpbnQgZnJvbSwgaW50IG51
bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYpOworICAgICAgICB2b2lkIGRyYXdHbHlwaHMoY29u
c3QgRm9udENhc2NhZGUmLCBjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXImLCBpbnQgZnJv
bSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYpOwogICAgICAgICB2b2lkIGRyYXdF
bXBoYXNpc01hcmtzKGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYgLCBjb25zdCBB
dG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGludCB0
byA9IC0xKTsKICNpZiAhUExBVEZPUk0oSU9TKQogICAgICAgICB2b2lkIGRyYXdCaWRpVGV4dChj
b25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgRm9u
dENhc2NhZGU6OkN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiA9IEZvbnRDYXNjYWRlOjpEb05vdFBh
aW50SWZGb250Tm90UmVhZHkpOwpAQCAtNDc5LDcgKzQ3OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgQWZmaW5lVHJhbnNmb3JtJiBhZmZpbmVUcmFuc2Zvcm0oKTsKICAgICAgICAg
dm9pZCByZXNldEFmZmluZVRyYW5zZm9ybSgpOwogICAgICAgICB2b2lkIGZpbGxSZWN0KGNvbnN0
IEZsb2F0UmVjdCYsIGNvbnN0IEdyYWRpZW50Kik7Ci0gICAgICAgIHZvaWQgZHJhd1RleHQoY29u
c3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhLCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZm
ZXIsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCk7Cisg
ICAgICAgIHZvaWQgZHJhd1RleHQoY29uc3QgRm9udCosIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50
IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmKTsKICAgICAgICAgdm9pZCBk
cmF3RnJhbWVDb250cm9sKGNvbnN0IEludFJlY3QmIHJlY3QsIHVuc2lnbmVkIHR5cGUsIHVuc2ln
bmVkIHN0YXRlKTsKICAgICAgICAgdm9pZCBkcmF3Rm9jdXNSZWN0KGNvbnN0IEludFJlY3QmIHJl
Y3QpOwogICAgICAgICB2b2lkIHBhaW50VGV4dEZpZWxkKGNvbnN0IEludFJlY3QmIHJlY3QsIHVu
c2lnbmVkIHN0YXRlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Rl
eHRSdW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9U
ZXh0UnVuLmgJKHJldmlzaW9uIDE3ODUxMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1RleHRSdW4uaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBjbGFzcyBG
b250Q2FzY2FkZTsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIGNsYXNzIEdseXBoQnVmZmVyOwog
Y2xhc3MgR2x5cGhUb1BhdGhUcmFuc2xhdG9yOwotY2xhc3MgU2ltcGxlRm9udERhdGE7CitjbGFz
cyBGb250OwogCiBzdHJ1Y3QgR2x5cGhEYXRhOwogc3RydWN0IFdpZHRoSXRlcmF0b3I7CkBAIC0x
OTgsMTAgKzE5OCwxMCBAQCBwdWJsaWM6CiAKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQogICAgICAg
ICB2aXJ0dWFsIEdseXBoRGF0YSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIoY29uc3QgRm9udENhc2Nh
ZGUmLCBXaWR0aEl0ZXJhdG9yJiwgVUNoYXIzMiBjaGFyYWN0ZXIsIGJvb2wgbWlycm9yLCBpbnQg
Y3VycmVudENoYXJhY3RlciwgdW5zaWduZWQmIGFkdmFuY2VMZW5ndGgsIFN0cmluZyYgbm9ybWFs
aXplZFNwYWNlc1N0cmluZ0NhY2hlKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkcmF3U1ZH
R2x5cGhzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFNpbXBsZUZvbnREYXRhKiwgY29uc3QgR2x5
cGhCdWZmZXImLCBpbnQgZnJvbSwgaW50IHRvLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3QgPSAw
OworICAgICAgICB2aXJ0dWFsIHZvaWQgZHJhd1NWR0dseXBocyhHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBGb250KiwgY29uc3QgR2x5cGhCdWZmZXImLCBpbnQgZnJvbSwgaW50IHRvLCBjb25zdCBG
bG9hdFBvaW50JikgY29uc3QgPSAwOwogICAgICAgICB2aXJ0dWFsIGZsb2F0IGZsb2F0V2lkdGhV
c2luZ1NWR0ZvbnQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgaW50JiBjaGFy
c0NvbnN1bWVkLCBTdHJpbmcmIGdseXBoTmFtZSkgY29uc3QgPSAwOwotICAgICAgICB2aXJ0dWFs
IGJvb2wgYXBwbHlTVkdLZXJuaW5nKGNvbnN0IFNpbXBsZUZvbnREYXRhKiwgV2lkdGhJdGVyYXRv
ciYsIEdseXBoQnVmZmVyKiwgaW50IGZyb20pIGNvbnN0ID0gMDsKLSAgICAgICAgdmlydHVhbCBz
dGQ6OnVuaXF1ZV9wdHI8R2x5cGhUb1BhdGhUcmFuc2xhdG9yPiBjcmVhdGVHbHlwaFRvUGF0aFRy
YW5zbGF0b3IoY29uc3QgU2ltcGxlRm9udERhdGEmLCBjb25zdCBUZXh0UnVuKiwgY29uc3QgR2x5
cGhCdWZmZXImLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYpIGNv
bnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCBib29sIGFwcGx5U1ZHS2VybmluZyhjb25zdCBGb250
KiwgV2lkdGhJdGVyYXRvciYsIEdseXBoQnVmZmVyKiwgaW50IGZyb20pIGNvbnN0ID0gMDsKKyAg
ICAgICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8R2x5cGhUb1BhdGhUcmFuc2xhdG9yPiBjcmVh
dGVHbHlwaFRvUGF0aFRyYW5zbGF0b3IoY29uc3QgRm9udCYsIGNvbnN0IFRleHRSdW4qLCBjb25z
dCBHbHlwaEJ1ZmZlciYsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50
JikgY29uc3QgPSAwOwogI2VuZGlmCiAgICAgfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5jcHAJKHJldmlzaW9uIDE3ODUx
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMiwxMCArMjIsMTAgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJXaWR0aEl0ZXJhdG9yLmgiCiAKKyNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVk
ZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgogI2luY2x1ZGUgIkxh
dGluMVRleHRJdGVyYXRvci5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5jbHVk
ZSAiU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSA8d3RmL01hdGhF
eHRyYXMuaD4KIApAQCAtMzQsNyArMzQsNyBAQCB1c2luZyBuYW1lc3BhY2UgVW5pY29kZTsKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1XaWR0aEl0ZXJhdG9yOjpXaWR0aEl0ZXJhdG9yKGNvbnN0
IEZvbnRDYXNjYWRlKiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2lt
cGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cywgYm9vbCBhY2NvdW50Rm9yR2x5cGhCb3VuZHMs
IGJvb2wgZm9yVGV4dEVtcGhhc2lzKQorV2lkdGhJdGVyYXRvcjo6V2lkdGhJdGVyYXRvcihjb25z
dCBGb250Q2FzY2FkZSogZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IEZv
bnQqPiogZmFsbGJhY2tGb250cywgYm9vbCBhY2NvdW50Rm9yR2x5cGhCb3VuZHMsIGJvb2wgZm9y
VGV4dEVtcGhhc2lzKQogICAgIDogbV9mb250KGZvbnQpCiAgICAgLCBtX3J1bihydW4pCiAgICAg
LCBtX2N1cnJlbnRDaGFyYWN0ZXIoMCkKQEAgLTEwMCw3ICsxMDAsNyBAQCBwdWJsaWM6CiAKIHR5
cGVkZWYgVmVjdG9yPHN0ZDo6cGFpcjxpbnQsIE9yaWdpbmFsQWR2YW5jZXNGb3JDaGFyYWN0ZXJU
cmVhdGVkQXNTcGFjZT4sIDY0PiBDaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2U7CiAKLXN0YXRpYyBp
bmxpbmUgZmxvYXQgYXBwbHlGb250VHJhbnNmb3JtcyhHbHlwaEJ1ZmZlciogZ2x5cGhCdWZmZXIs
IGJvb2wgbHRyLCBpbnQmIGxhc3RHbHlwaENvdW50LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9u
dERhdGEsIFdpZHRoSXRlcmF0b3ImIGl0ZXJhdG9yLCBUeXBlc2V0dGluZ0ZlYXR1cmVzIHR5cGVz
ZXR0aW5nRmVhdHVyZXMsIENoYXJhY3RlcnNUcmVhdGVkQXNTcGFjZSYgY2hhcmFjdGVyc1RyZWF0
ZWRBc1NwYWNlKQorc3RhdGljIGlubGluZSBmbG9hdCBhcHBseUZvbnRUcmFuc2Zvcm1zKEdseXBo
QnVmZmVyKiBnbHlwaEJ1ZmZlciwgYm9vbCBsdHIsIGludCYgbGFzdEdseXBoQ291bnQsIGNvbnN0
IEZvbnQqIGZvbnQsIFdpZHRoSXRlcmF0b3ImIGl0ZXJhdG9yLCBUeXBlc2V0dGluZ0ZlYXR1cmVz
IHR5cGVzZXR0aW5nRmVhdHVyZXMsIENoYXJhY3RlcnNUcmVhdGVkQXNTcGFjZSYgY2hhcmFjdGVy
c1RyZWF0ZWRBc1NwYWNlKQogewogICAgIEFTU0VSVCh0eXBlc2V0dGluZ0ZlYXR1cmVzICYgKEtl
cm5pbmcgfCBMaWdhdHVyZXMpKTsKIApAQCAtMTIzLDE2ICsxMjMsMTYgQEAgc3RhdGljIGlubGlu
ZSBmbG9hdCBhcHBseUZvbnRUcmFuc2Zvcm1zKAogICAgIFVOVVNFRF9QQVJBTShpdGVyYXRvcik7
CiAjZWxzZQogICAgIC8vIFdlIG5lZWQgdG8gaGFuZGxlIHRyYW5zZm9ybXMgb24gU1ZHIGZvbnRz
IGludGVybmFsbHksIHNpbmNlIHRoZXkgYXJlIHJlbmRlcmVkIGludGVybmFsbHkuCi0gICAgaWYg
KGZvbnREYXRhLT5pc1NWR0ZvbnQoKSkgeworICAgIGlmIChmb250LT5pc1NWR0ZvbnQoKSkgewog
ICAgICAgICAvLyBTVkcgZm9udCBsaWdhdHVyZXMgYXJlIGhhbmRsZWQgZHVyaW5nIGdseXBoIHNl
bGVjdGlvbiwgb25seSBrZXJuaW5nIHJlbWFpbmluZy4KICAgICAgICAgaWYgKGl0ZXJhdG9yLnJ1
bigpLnJlbmRlcmluZ0NvbnRleHQoKSAmJiAodHlwZXNldHRpbmdGZWF0dXJlcyAmIEtlcm5pbmcp
KSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgcGFzcyB0aGUgbmVjZXNzYXJ5IGNv
bnRleHQgZG93biB0byB0aGlzIGxldmVsIHNvIHdlIGNhbiBsYXppbHkgY3JlYXRlIHJlbmRlcmlu
ZyBjb250ZXh0cyBhdCB0aGlzIHBvaW50LgogICAgICAgICAgICAgLy8gSG93ZXZlciwgYSBsYXJn
ZXIgcmVmYWN0b3Jpbmcgb2YgU1ZHIGZvbnRzIG1pZ2h0IG5lY2Vzc2FyeSB0byBzaWRlc3RlcCB0
aGlzIHByb2JsZW0gY29tcGxldGVseS4KLSAgICAgICAgICAgIGl0ZXJhdG9yLnJ1bigpLnJlbmRl
cmluZ0NvbnRleHQoKS0+YXBwbHlTVkdLZXJuaW5nKGZvbnREYXRhLCBpdGVyYXRvciwgZ2x5cGhC
dWZmZXIsIGxhc3RHbHlwaENvdW50KTsKKyAgICAgICAgICAgIGl0ZXJhdG9yLnJ1bigpLnJlbmRl
cmluZ0NvbnRleHQoKS0+YXBwbHlTVkdLZXJuaW5nKGZvbnQsIGl0ZXJhdG9yLCBnbHlwaEJ1ZmZl
ciwgbGFzdEdseXBoQ291bnQpOwogICAgICAgICB9CiAgICAgfSBlbHNlCiAjZW5kaWYKLSAgICAg
ICAgZm9udERhdGEtPmFwcGx5VHJhbnNmb3JtcyhnbHlwaEJ1ZmZlci0+Z2x5cGhzKGxhc3RHbHlw
aENvdW50KSwgYWR2YW5jZXMgKyBsYXN0R2x5cGhDb3VudCwgZ2x5cGhCdWZmZXJTaXplIC0gbGFz
dEdseXBoQ291bnQsIHR5cGVzZXR0aW5nRmVhdHVyZXMpOworICAgICAgICBmb250LT5hcHBseVRy
YW5zZm9ybXMoZ2x5cGhCdWZmZXItPmdseXBocyhsYXN0R2x5cGhDb3VudCksIGFkdmFuY2VzICsg
bGFzdEdseXBoQ291bnQsIGdseXBoQnVmZmVyU2l6ZSAtIGxhc3RHbHlwaENvdW50LCB0eXBlc2V0
dGluZ0ZlYXR1cmVzKTsKIAogICAgIGlmICghbHRyKQogICAgICAgICBnbHlwaEJ1ZmZlci0+cmV2
ZXJzZShsYXN0R2x5cGhDb3VudCwgZ2x5cGhCdWZmZXJTaXplIC0gbGFzdEdseXBoQ291bnQpOwpA
QCAtMTY2LDggKzE2Niw4IEBAIGlubGluZSB1bnNpZ25lZCBXaWR0aEl0ZXJhdG9yOjphZHZhbmNl
SW4KICAgICBmbG9hdCBsYXN0Um91bmRpbmdXaWR0aCA9IG1fZmluYWxSb3VuZGluZ1dpZHRoOwog
ICAgIEZsb2F0UmVjdCBib3VuZHM7CiAKLSAgICBjb25zdCBTaW1wbGVGb250RGF0YSYgcHJpbWFy
eUZvbnREYXRhID0gbV9mb250LT5wcmltYXJ5Rm9udERhdGEoKTsKLSAgICBjb25zdCBTaW1wbGVG
b250RGF0YSogbGFzdEZvbnREYXRhID0gJnByaW1hcnlGb250RGF0YTsKKyAgICBjb25zdCBGb250
JiBwcmltYXJ5Rm9udCA9IG1fZm9udC0+cHJpbWFyeUZvbnQoKTsKKyAgICBjb25zdCBGb250KiBs
YXN0Rm9udERhdGEgPSAmcHJpbWFyeUZvbnQ7CiAgICAgaW50IGxhc3RHbHlwaENvdW50ID0gZ2x5
cGhCdWZmZXIgPyBnbHlwaEJ1ZmZlci0+c2l6ZSgpIDogMDsKIAogICAgIFVDaGFyMzIgY2hhcmFj
dGVyID0gMDsKQEAgLTE4MywxNSArMTgzLDE1IEBAIGlubGluZSB1bnNpZ25lZCBXaWR0aEl0ZXJh
dG9yOjphZHZhbmNlSW4KICAgICAgICAgICAgIHRleHRJdGVyYXRvci5hZHZhbmNlKGFkdmFuY2VM
ZW5ndGgpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgY29uc3Qg
U2ltcGxlRm9udERhdGEqIGZvbnREYXRhID0gZ2x5cGhEYXRhLmZvbnREYXRhOwotICAgICAgICBB
U1NFUlQoZm9udERhdGEpOworICAgICAgICBjb25zdCBGb250KiBmb250ID0gZ2x5cGhEYXRhLmZv
bnQ7CisgICAgICAgIEFTU0VSVChmb250KTsKIAogICAgICAgICAvLyBOb3cgdGhhdCB3ZSBoYXZl
IGEgZ2x5cGggYW5kIGZvbnQgZGF0YSwgZ2V0IGl0cyB3aWR0aC4KICAgICAgICAgZmxvYXQgd2lk
dGg7CiAgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gJ1x0JyAmJiBtX3J1bi5hbGxvd1RhYnMoKSkK
LSAgICAgICAgICAgIHdpZHRoID0gbV9mb250LT50YWJXaWR0aCgqZm9udERhdGEsIG1fcnVuLnRh
YlNpemUoKSwgbV9ydW4ueFBvcygpICsgbV9ydW5XaWR0aFNvRmFyICsgd2lkdGhTaW5jZUxhc3RS
b3VuZGluZyk7CisgICAgICAgICAgICB3aWR0aCA9IG1fZm9udC0+dGFiV2lkdGgoKmZvbnQsIG1f
cnVuLnRhYlNpemUoKSwgbV9ydW4ueFBvcygpICsgbV9ydW5XaWR0aFNvRmFyICsgd2lkdGhTaW5j
ZUxhc3RSb3VuZGluZyk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgd2lkdGggPSBmb250
RGF0YS0+d2lkdGhGb3JHbHlwaChnbHlwaCk7CisgICAgICAgICAgICB3aWR0aCA9IGZvbnQtPndp
ZHRoRm9yR2x5cGgoZ2x5cGgpOwogCiAgICAgICAgICAgICAvLyBTVkcgdXNlcyBob3Jpem9udGFs
R2x5cGhTdHJldGNoKCksIHdoZW4gdGV4dExlbmd0aCBpcyB1c2VkIHRvIHN0cmV0Y2gvc3F1ZWV6
ZSB0ZXh0LgogICAgICAgICAgICAgd2lkdGggKj0gbV9ydW4uaG9yaXpvbnRhbEdseXBoU3RyZXRj
aCgpOwpAQCAtMjAwLDI2ICsyMDAsMjYgQEAgaW5saW5lIHVuc2lnbmVkIFdpZHRoSXRlcmF0b3I6
OmFkdmFuY2VJbgogICAgICAgICAgICAgLy8gRmlyc3QsIHdlIHJvdW5kIHNwYWNlcyB0byBhbiBh
ZGp1c3RlZCB3aWR0aCBpbiBhbGwgZm9udHMuCiAgICAgICAgICAgICAvLyBTZWNvbmQsIGluIGZp
eGVkLXBpdGNoIGZvbnRzIHdlIGVuc3VyZSB0aGF0IGFsbCBjaGFyYWN0ZXJzIHRoYXQKICAgICAg
ICAgICAgIC8vIG1hdGNoIHRoZSB3aWR0aCBvZiB0aGUgc3BhY2UgY2hhcmFjdGVyIGhhdmUgdGhl
IHNhbWUgd2lkdGggYXMgdGhlIHNwYWNlIGNoYXJhY3Rlci4KLSAgICAgICAgICAgIGlmIChtX3J1
bi5hcHBseVdvcmRSb3VuZGluZygpICYmIHdpZHRoID09IGZvbnREYXRhLT5zcGFjZVdpZHRoKCkg
JiYgKGZvbnREYXRhLT5waXRjaCgpID09IEZpeGVkUGl0Y2ggfHwgZ2x5cGggPT0gZm9udERhdGEt
PnNwYWNlR2x5cGgoKSkpCi0gICAgICAgICAgICAgICAgd2lkdGggPSBmb250RGF0YS0+YWRqdXN0
ZWRTcGFjZVdpZHRoKCk7CisgICAgICAgICAgICBpZiAobV9ydW4uYXBwbHlXb3JkUm91bmRpbmco
KSAmJiB3aWR0aCA9PSBmb250LT5zcGFjZVdpZHRoKCkgJiYgKGZvbnQtPnBpdGNoKCkgPT0gRml4
ZWRQaXRjaCB8fCBnbHlwaCA9PSBmb250LT5zcGFjZUdseXBoKCkpKQorICAgICAgICAgICAgICAg
IHdpZHRoID0gZm9udC0+YWRqdXN0ZWRTcGFjZVdpZHRoKCk7CiAgICAgICAgIH0KIAotICAgICAg
ICBpZiAoZm9udERhdGEgIT0gbGFzdEZvbnREYXRhICYmIHdpZHRoKSB7CisgICAgICAgIGlmIChm
b250ICE9IGxhc3RGb250RGF0YSAmJiB3aWR0aCkgewogICAgICAgICAgICAgaWYgKHNob3VsZEFw
cGx5Rm9udFRyYW5zZm9ybXMoKSkgewogICAgICAgICAgICAgICAgIG1fcnVuV2lkdGhTb0ZhciAr
PSBhcHBseUZvbnRUcmFuc2Zvcm1zKGdseXBoQnVmZmVyLCBtX3J1bi5sdHIoKSwgbGFzdEdseXBo
Q291bnQsIGxhc3RGb250RGF0YSwgKnRoaXMsIG1fdHlwZXNldHRpbmdGZWF0dXJlcywgY2hhcmFj
dGVyc1RyZWF0ZWRBc1NwYWNlKTsKICAgICAgICAgICAgICAgICBsYXN0R2x5cGhDb3VudCA9IGds
eXBoQnVmZmVyLT5zaXplKCk7IC8vIGFwcGx5Rm9udFRyYW5zZm9ybXMgZG9lc24ndCB1cGRhdGUg
d2hlbiB0aGVyZSBoYWQgYmVlbiBvbmx5IG9uZSBnbHlwaC4KICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgbGFzdEZvbnREYXRhID0gZm9udERhdGE7Ci0gICAgICAgICAgICBpZiAobV9mYWxs
YmFja0ZvbnRzICYmIGZvbnREYXRhICE9ICZwcmltYXJ5Rm9udERhdGEpIHsKKyAgICAgICAgICAg
IGxhc3RGb250RGF0YSA9IGZvbnQ7CisgICAgICAgICAgICBpZiAobV9mYWxsYmFja0ZvbnRzICYm
IGZvbnQgIT0gJnByaW1hcnlGb250KSB7CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMg
ZG9lcyBhIGxpdHRsZSBleHRyYSB3b3JrIHRoYXQgY291bGQgYmUgYXZvaWRlZCBpZgogICAgICAg
ICAgICAgICAgIC8vIGdseXBoRGF0YUZvckNoYXJhY3RlcigpIHJldHVybmVkIHdoZXRoZXIgaXQg
Y2hvc2UgdG8gdXNlIGEgc21hbGwgY2FwcyBmb250LgogICAgICAgICAgICAgICAgIGlmICghbV9m
b250LT5pc1NtYWxsQ2FwcygpIHx8IGNoYXJhY3RlciA9PSB1X3RvdXBwZXIoY2hhcmFjdGVyKSkK
LSAgICAgICAgICAgICAgICAgICAgbV9mYWxsYmFja0ZvbnRzLT5hZGQoZm9udERhdGEpOworICAg
ICAgICAgICAgICAgICAgICBtX2ZhbGxiYWNrRm9udHMtPmFkZChmb250KTsKICAgICAgICAgICAg
ICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgY29uc3QgR2x5cGhEYXRhJiB1cHBlcmNh
c2VHbHlwaERhdGEgPSBtX2ZvbnQtPmdseXBoRGF0YUZvckNoYXJhY3Rlcih1X3RvdXBwZXIoY2hh
cmFjdGVyKSwgcnRsKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHVwcGVyY2FzZUdseXBoRGF0
YS5mb250RGF0YSAhPSAmcHJpbWFyeUZvbnREYXRhKQotICAgICAgICAgICAgICAgICAgICAgICAg
bV9mYWxsYmFja0ZvbnRzLT5hZGQodXBwZXJjYXNlR2x5cGhEYXRhLmZvbnREYXRhKTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHVwcGVyY2FzZUdseXBoRGF0YS5mb250ICE9ICZwcmltYXJ5Rm9u
dCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZmFsbGJhY2tGb250cy0+YWRkKHVwcGVyY2Fz
ZUdseXBoRGF0YS5mb250KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KQEAgLTI0Myw5ICsyNDMsOSBAQCBpbmxpbmUgdW5zaWduZWQgV2lkdGhJdGVyYXRvcjo6
YWR2YW5jZUluCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2x5cGhCdWZmZXIpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2x5cGhCdWZmZXItPmlzRW1wdHkoKSkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9mb3JUZXh0RW1waGFzaXMpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+YWRkKGZvbnRE
YXRhLT56ZXJvV2lkdGhTcGFjZUdseXBoKCksIGZvbnREYXRhLCBtX2V4cGFuc2lvblBlck9wcG9y
dHVuaXR5LCBjdXJyZW50Q2hhcmFjdGVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdseXBoQnVmZmVyLT5hZGQoZm9udC0+emVyb1dpZHRoU3BhY2VHbHlwaCgpLCBmb250
LCBtX2V4cGFuc2lvblBlck9wcG9ydHVuaXR5LCBjdXJyZW50Q2hhcmFjdGVyKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ2x5cGhCdWZmZXItPmFkZChmb250RGF0YS0+c3BhY2VHbHlwaCgpLCBmb250RGF0
YSwgZXhwYW5zaW9uQXRUaGlzT3Bwb3J0dW5pdHksIGN1cnJlbnRDaGFyYWN0ZXIpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhCdWZmZXItPmFkZChmb250LT5zcGFj
ZUdseXBoKCksIGZvbnQsIGV4cGFuc2lvbkF0VGhpc09wcG9ydHVuaXR5LCBjdXJyZW50Q2hhcmFj
dGVyKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2x5cGhCdWZmZXItPmV4cGFuZExhc3RBZHZhbmNlKGV4cGFuc2lv
bkF0VGhpc09wcG9ydHVuaXR5KTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTI3NCw3
ICsyNzQsNyBAQCBpbmxpbmUgdW5zaWduZWQgV2lkdGhJdGVyYXRvcjo6YWR2YW5jZUluCiAgICAg
ICAgIH0KIAogICAgICAgICBpZiAobV9hY2NvdW50Rm9yR2x5cGhCb3VuZHMpIHsKLSAgICAgICAg
ICAgIGJvdW5kcyA9IGZvbnREYXRhLT5ib3VuZHNGb3JHbHlwaChnbHlwaCk7CisgICAgICAgICAg
ICBib3VuZHMgPSBmb250LT5ib3VuZHNGb3JHbHlwaChnbHlwaCk7CiAgICAgICAgICAgICBpZiAo
IWN1cnJlbnRDaGFyYWN0ZXIpCiAgICAgICAgICAgICAgICAgbV9maXJzdEdseXBoT3ZlcmZsb3cg
PSBzdGQ6Om1heDxmbG9hdD4oMCwgLWJvdW5kcy54KCkpOwogICAgICAgICB9CkBAIC0zMTQsNyAr
MzE0LDcgQEAgaW5saW5lIHVuc2lnbmVkIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2VJbgogICAgICAg
ICB9CiAKICAgICAgICAgaWYgKGdseXBoQnVmZmVyKQotICAgICAgICAgICAgZ2x5cGhCdWZmZXIt
PmFkZChnbHlwaCwgZm9udERhdGEsIChydGwgPyBvbGRXaWR0aCArIGxhc3RSb3VuZGluZ1dpZHRo
IDogd2lkdGgpLCBjdXJyZW50Q2hhcmFjdGVyKTsKKyAgICAgICAgICAgIGdseXBoQnVmZmVyLT5h
ZGQoZ2x5cGgsIGZvbnQsIChydGwgPyBvbGRXaWR0aCArIGxhc3RSb3VuZGluZ1dpZHRoIDogd2lk
dGgpLCBjdXJyZW50Q2hhcmFjdGVyKTsKIAogICAgICAgICBsYXN0Um91bmRpbmdXaWR0aCA9IHdp
ZHRoIC0gb2xkV2lkdGg7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1dpZHRoSXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9XaWR0aEl0ZXJhdG9yLmgJKHJldmlzaW9uIDE3ODUxMCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MzIsMTQgKzMyLDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRm9udENhc2NhZGU7
CiBjbGFzcyBHbHlwaEJ1ZmZlcjsKLWNsYXNzIFNpbXBsZUZvbnREYXRhOworY2xhc3MgRm9udDsK
IGNsYXNzIFRleHRSdW47CiBzdHJ1Y3QgR2x5cGhEYXRhOwogCiBzdHJ1Y3QgV2lkdGhJdGVyYXRv
ciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgV2lkdGhJdGVy
YXRvcihjb25zdCBGb250Q2FzY2FkZSosIGNvbnN0IFRleHRSdW4mLCBIYXNoU2V0PGNvbnN0IFNp
bXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwLCBib29sIGFjY291bnRGb3JHbHlwaEJv
dW5kcyA9IGZhbHNlLCBib29sIGZvclRleHRFbXBoYXNpcyA9IGZhbHNlKTsKKyAgICBXaWR0aEl0
ZXJhdG9yKGNvbnN0IEZvbnRDYXNjYWRlKiwgY29uc3QgVGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3Qg
Rm9udCo+KiBmYWxsYmFja0ZvbnRzID0gMCwgYm9vbCBhY2NvdW50Rm9yR2x5cGhCb3VuZHMgPSBm
YWxzZSwgYm9vbCBmb3JUZXh0RW1waGFzaXMgPSBmYWxzZSk7CiAKICAgICB1bnNpZ25lZCBhZHZh
bmNlKGludCB0bywgR2x5cGhCdWZmZXIqKTsKICAgICBib29sIGFkdmFuY2VPbmVDaGFyYWN0ZXIo
ZmxvYXQmIHdpZHRoLCBHbHlwaEJ1ZmZlciYpOwpAQCAtOTQsNyArOTQsNyBAQCBwcml2YXRlOgog
ICAgIGJvb2wgc2hvdWxkQXBwbHlGb250VHJhbnNmb3JtcygpIGNvbnN0IHsgcmV0dXJuIG1fcnVu
Lmxlbmd0aCgpID4gMSAmJiAobV90eXBlc2V0dGluZ0ZlYXR1cmVzICYgKEtlcm5pbmcgfCBMaWdh
dHVyZXMpKTsgfQogCiAgICAgVHlwZXNldHRpbmdGZWF0dXJlcyBtX3R5cGVzZXR0aW5nRmVhdHVy
ZXM7Ci0gICAgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBtX2ZhbGxiYWNrRm9udHM7
CisgICAgSGFzaFNldDxjb25zdCBGb250Kj4qIG1fZmFsbGJhY2tGb250czsKICAgICBib29sIG1f
YWNjb3VudEZvckdseXBoQm91bmRzOwogICAgIGZsb2F0IG1fbWF4R2x5cGhCb3VuZGluZ0JveFk7
CiAgICAgZmxvYXQgbV9taW5HbHlwaEJvdW5kaW5nQm94WTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9Gb250Q2FjaGVJT1MubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0ZvbnRDYWNoZUlPUy5tbQkocmV2aXNp
b24gMTc4NTEwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0ZvbnRD
YWNoZUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQCBzdGF0aWMgQ0ZDaGFy
YWN0ZXJTZXRSZWYgcGhvbmVGYWxsYmFja0NoCiAgICAgcmV0dXJuIGNoYXJhY3RlclNldDsKIH0K
IAotUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpnZXRTeXN0ZW1Gb250RmFs
bGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGNv
bnN0IFNpbXBsZUZvbnREYXRhKiBvcmlnaW5hbEZvbnREYXRhLCBjb25zdCBVQ2hhciogY2hhcmFj
dGVycywgaW50IGxlbmd0aCkKK1Bhc3NSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpnZXRTeXN0ZW1G
b250RmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRp
b24sIGNvbnN0IEZvbnQqIG9yaWdpbmFsRm9udERhdGEsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
LCBpbnQgbGVuZ3RoKQogewogICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0
YSA9IG9yaWdpbmFsRm9udERhdGEtPnBsYXRmb3JtRGF0YSgpOwogICAgIENURm9udFJlZiBjdEZv
bnQgPSBwbGF0Zm9ybURhdGEuZm9udCgpOwpAQCAtMTk0LDcgKzE5NCw3IEBAIHN0YXRpYyBMYW5n
dWFnZVNwZWNpZmljRm9udCBsYW5ndWFnZVNwZWMKICAgICByZXR1cm4gTGFuZ3VhZ2VTcGVjaWZp
Y0ZvbnQ6Ok5vbmU7CiB9CiAKLVJlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpzeXN0
ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlv
biwgY29uc3QgU2ltcGxlRm9udERhdGEqIG9yaWdpbmFsRm9udERhdGEsIGJvb2wsIGNvbnN0IFVD
aGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQorUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6c3lz
dGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRp
b24sIGNvbnN0IEZvbnQqIG9yaWdpbmFsRm9udERhdGEsIGJvb2wsIGNvbnN0IFVDaGFyKiBjaGFy
YWN0ZXJzLCBpbnQgbGVuZ3RoKQogewogICAgIC8vIFVubGlrZSBPUyBYLCBvdXIgZmFsbGJhY2sg
Zm9udCBvbiBpUGhvbmUgaXMgQXJpYWwgVW5pY29kZSwgd2hpY2ggZG9lc24ndCBoYXZlIHNvbWUg
YXBwbGUtc3BlY2lmaWMgZ2x5cGhzIGxpa2UgRjhGRi4KICAgICAvLyBGYWxsIGJhY2sgdG8gdGhl
IEFwcGxlIEZhbGxiYWNrIGZvbnQgaW4gdGhpcyBjYXNlLgpAQCAtMjIwLDcgKzIyMCw3IEBAIFJl
ZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpzeXN0ZW0KICAgICBpZiAobGVuZ3RoID4g
MCkKICAgICAgICAgbGFuZ3VhZ2VTcGVjaWZpY0ZvbnQgPSBsYW5ndWFnZVNwZWNpZmljRmFsbGJh
Y2tGb250KGMpOwogCi0gICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBzaW1wbGVGb250RGF0YTsK
KyAgICBSZWZQdHI8Rm9udD4gZm9udDsKIAogICAgIHN3aXRjaCAobGFuZ3VhZ2VTcGVjaWZpY0Zv
bnQpIHsKICAgICBjYXNlIExhbmd1YWdlU3BlY2lmaWNGb250OjpDaGluZXNlSmFwYW5lc2U6IHsK
QEAgLTI5OCw0MyArMjk4LDQzIEBAIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpz
eXN0ZW0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIHNpbXBsZUZvbnREYXRh
ID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlv
bi53ZWlnaHQoKSkgPyAqY2prQm9sZFtwcmVmZXJyZWRDSktGb250XSA6ICpjamtQbGFpbltwcmVm
ZXJyZWRDSktGb250XSwgZmFsc2UpOworICAgICAgICBmb250ID0gZm9udEZvckZhbWlseShkZXNj
cmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyAqY2prQm9s
ZFtwcmVmZXJyZWRDSktGb250XSA6ICpjamtQbGFpbltwcmVmZXJyZWRDSktGb250XSwgZmFsc2Up
OwogICAgICAgICBib29sIHVzZVNlY29uZGFyeUZvbnQgPSB0cnVlOwotICAgICAgICBpZiAoc2lt
cGxlRm9udERhdGEpIHsKKyAgICAgICAgaWYgKGZvbnQpIHsKICAgICAgICAgICAgIENHR2x5cGgg
Z2x5cGhzWzJdOwogICAgICAgICAgICAgLy8gQ0dGb250R2V0R2x5cGhzRm9yVW5pY2hhcnMgdGFr
ZXMgVVRGLTE2IGJ1ZmZlci4gU2hvdWxkIG9ubHkgYmUgMSBjb2RlcG9pbnQgYnV0IHNpbmNlIHdl
IG1heSBwYXNzIGluIHR3byBVVEYtMTYgY2hhcmFjdGVycywKICAgICAgICAgICAgIC8vIG1ha2Ug
cm9vbSBmb3IgMiBnbHlwaHMganVzdCB0byBiZSBzYWZlLgotICAgICAgICAgICAgQ0dGb250R2V0
R2x5cGhzRm9yVW5pY2hhcnMoc2ltcGxlRm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLmNnRm9udCgp
LCBjaGFyYWN0ZXJzLCBnbHlwaHMsIGxlbmd0aCk7CisgICAgICAgICAgICBDR0ZvbnRHZXRHbHlw
aHNGb3JVbmljaGFycyhmb250LT5wbGF0Zm9ybURhdGEoKS5jZ0ZvbnQoKSwgY2hhcmFjdGVycywg
Z2x5cGhzLCBsZW5ndGgpOwogCiAgICAgICAgICAgICB1c2VTZWNvbmRhcnlGb250ID0gKGdseXBo
c1swXSA9PSAwKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICh1c2VTZWNvbmRhcnlGb250KQot
ICAgICAgICAgICAgc2ltcGxlRm9udERhdGEgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBp
c0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/ICpjamtCb2xkW3NlY29uZGFy
eUNKS0ZvbnRdIDogKmNqa1BsYWluW3NlY29uZGFyeUNKS0ZvbnRdLCBmYWxzZSk7CisgICAgICAg
ICAgICBmb250ID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChk
ZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyAqY2prQm9sZFtzZWNvbmRhcnlDSktGb250XSA6ICpjamtQ
bGFpbltzZWNvbmRhcnlDSktGb250XSwgZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgY2FzZSBMYW5ndWFnZVNwZWNpZmljRm9udDo6S29yZWFuOiB7CiAgICAgICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGtvcmVhblBsYWluKCJBcHBsZVNER290aGljTmVv
LU1lZGl1bSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwogICAgICAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBrb3JlYW5Cb2xkKCJBcHBsZVNER290
aGljTmVvLUJvbGQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAg
ICAgc2ltcGxlRm9udERhdGEgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWln
aHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/IGtvcmVhbkJvbGQgOiBrb3JlYW5QbGFpbiwg
ZmFsc2UpOworICAgICAgICBmb250ID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgaXNGb250
V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBrb3JlYW5Cb2xkIDoga29yZWFuUGxh
aW4sIGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgTGFuZ3VhZ2VTcGVj
aWZpY0ZvbnQ6OkN5cmlsbGljOiB7CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9t
aWNTdHJpbmc+IGN5cmlsbGljUGxhaW4oIkhlbHZldGljYU5ldWUiLCBBdG9taWNTdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsKTsKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21p
Y1N0cmluZz4gY3lyaWxsaWNCb2xkKCJIZWx2ZXRpY2FOZXVlLUJvbGQiLCBBdG9taWNTdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAgc2ltcGxlRm9udERhdGEgPSBmb250Rm9y
RmFtaWx5KGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgp
KSA/IGN5cmlsbGljQm9sZCA6IGN5cmlsbGljUGxhaW4sIGZhbHNlKTsKKyAgICAgICAgZm9udCA9
IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24u
d2VpZ2h0KCkpID8gY3lyaWxsaWNCb2xkIDogY3lyaWxsaWNQbGFpbiwgZmFsc2UpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgY2FzZSBMYW5ndWFnZVNwZWNpZmljRm9udDo6QXJhYmljOiB7
CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGFyYWJpY1BsYWlu
KCJHZWV6YVBybyIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwogICAgICAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBhcmFiaWNCb2xkKCJHZWV6YVBy
by1Cb2xkIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgICAgIHNp
bXBsZUZvbnREYXRhID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9s
ZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBhcmFiaWNCb2xkIDogYXJhYmljUGxhaW4sIGZhbHNl
KTsKKyAgICAgICAgZm9udCA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGlzRm9udFdlaWdo
dEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gYXJhYmljQm9sZCA6IGFyYWJpY1BsYWluLCBm
YWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIExhbmd1YWdlU3BlY2lmaWNG
b250OjpIZWJyZXc6IHsKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmlu
Zz4gaGVicmV3UGxhaW4oIkFyaWFsSGVicmV3IiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCk7CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGhl
YnJld0JvbGQoIkFyaWFsSGVicmV3LUJvbGQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKTsKLSAgICAgICAgc2ltcGxlRm9udERhdGEgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0
aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/IGhlYnJld0JvbGQg
OiBoZWJyZXdQbGFpbiwgZmFsc2UpOworICAgICAgICBmb250ID0gZm9udEZvckZhbWlseShkZXNj
cmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBoZWJyZXdC
b2xkIDogaGVicmV3UGxhaW4sIGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNh
c2UgTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6OkluZGljOiB7CkBAIC0zOTAsMzYgKzM5MCwzNiBAQCBS
ZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6c3lzdGVtCiAgICAgICAgIGlmIChpbmRp
Y1BhZ2VPcmRlckluZGV4IDwgKHNpemVvZihpbmRpY1VuaWNvZGVQYWdlRm9udHMpIC8gc2l6ZW9m
KEF0b21pY1N0cmluZyopKSkgewogICAgICAgICAgICAgQXRvbWljU3RyaW5nKiBpbmRpY0ZvbnRT
dHJpbmcgPSBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/IGluZGljVW5p
Y29kZVBhZ2VGb250c0JvbGRbaW5kaWNQYWdlT3JkZXJJbmRleF0gOiBpbmRpY1VuaWNvZGVQYWdl
Rm9udHNbaW5kaWNQYWdlT3JkZXJJbmRleF07CiAgICAgICAgICAgICBpZiAoaW5kaWNGb250U3Ry
aW5nKQotICAgICAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gZm9udEZvckZhbWlseShkZXNj
cmlwdGlvbiwgKmluZGljRm9udFN0cmluZywgZmFsc2UpOworICAgICAgICAgICAgICAgIGZvbnQg
PSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCAqaW5kaWNGb250U3RyaW5nLCBmYWxzZSk7CiAg
ICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgTGFuZ3VhZ2VTcGVjaWZp
Y0ZvbnQ6OlRoYWk6IHsKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmlu
Zz4gdGhhaVBsYWluKCJUaG9uYnVyaSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVy
YWwpOwogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiB0aGFpQm9s
ZCgiVGhvbmJ1cmktQm9sZCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwot
ICAgICAgICBzaW1wbGVGb250RGF0YSA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGlzRm9u
dFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gdGhhaUJvbGQgOiB0aGFpUGxhaW4s
IGZhbHNlKTsKKyAgICAgICAgZm9udCA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGlzRm9u
dFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gdGhhaUJvbGQgOiB0aGFpUGxhaW4s
IGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgTGFuZ3VhZ2VTcGVjaWZp
Y0ZvbnQ6OlRpYmV0YW46IHsKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0
cmluZz4gdGliZXRhblBsYWluKCJLYWlsYXNhIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCk7CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHRp
YmV0YW5Cb2xkKCJLYWlsYXNhLUJvbGQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRl
cmFsKTsKLSAgICAgICAgc2ltcGxlRm9udERhdGEgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9u
LCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/IHRpYmV0YW5Cb2xkIDog
dGliZXRhblBsYWluLCBmYWxzZSk7CisgICAgICAgIGZvbnQgPSBmb250Rm9yRmFtaWx5KGRlc2Ny
aXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/IHRpYmV0YW5C
b2xkIDogdGliZXRhblBsYWluLCBmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBj
YXNlIExhbmd1YWdlU3BlY2lmaWNGb250OjpDYW5hZGlhbkFib3JpZ2luYWxTeWxsYWJpYzogewog
ICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBjYXNQbGFpbigiRXVw
aGVtaWFVQ0FTIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CiAgICAgICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGNhc0JvbGQoIkV1cGhlbWlhVUNB
Uy1Cb2xkIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgICAgIHNp
bXBsZUZvbnREYXRhID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9s
ZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBjYXNCb2xkIDogY2FzUGxhaW4sIGZhbHNlKTsKKyAg
ICAgICAgZm9udCA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQo
ZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gY2FzQm9sZCA6IGNhc1BsYWluLCBmYWxzZSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIExhbmd1YWdlU3BlY2lmaWNGb250OjpLaG1lcjog
ewogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBraG1lcigiS2ht
ZXJTYW5nYW1NTiIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgICAg
ICBzaW1wbGVGb250RGF0YSA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGtobWVyLCBmYWxz
ZSk7CisgICAgICAgIGZvbnQgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBraG1lciwgZmFs
c2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBMYW5ndWFnZVNwZWNpZmljRm9u
dDo6TGFvOiB7CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGxh
bygiTGFvU2FuZ2FtTU4iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAg
ICAgICAgc2ltcGxlRm9udERhdGEgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBsYW8sIGZh
bHNlKTsKKyAgICAgICAgZm9udCA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGxhbywgZmFs
c2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgZGVmYXVsdDogewpAQCAtNDMwLDI3ICs0
MzAsMjcgQEAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OnN5c3RlbQogICAgICAg
ICAgICAgICAgIHVzZUVtb2ppRm9udCA9IENGQ2hhcmFjdGVyU2V0SXNMb25nQ2hhcmFjdGVyTWVt
YmVyKGFwcGxlQ29sb3JFbW9qaUNoYXJhY3RlclNldCgpLCBjKTsKICAgICAgICAgfQogICAgICAg
ICBpZiAodXNlRW1vamlGb250KQotICAgICAgICAgICAgc2ltcGxlRm9udERhdGEgPSBmb250Rm9y
RmFtaWx5KGRlc2NyaXB0aW9uLCBhcHBsZUNvbG9yRW1vamksIGZhbHNlKTsKKyAgICAgICAgICAg
IGZvbnQgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBhcHBsZUNvbG9yRW1vamksIGZhbHNl
KTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBSZXRhaW5QdHI8Q1RGb250UmVmPiBmYWxs
YmFja0ZvbnQgPSBhZG9wdENGKENURm9udENyZWF0ZUZvckNoYXJhY3RlcnMob3JpZ2luYWxGb250
RGF0YS0+Z2V0Q1RGb250KCksIGNoYXJhY3RlcnMsIGxlbmd0aCwgbnVsbHB0cikpOwogICAgICAg
ICAgICAgaWYgKFJldGFpblB0cjxDRlN0cmluZ1JlZj4gZm91bmRGb250TmFtZSA9IGFkb3B0Q0Yo
Q1RGb250Q29weVBvc3RTY3JpcHROYW1lKGZhbGxiYWNrRm9udC5nZXQoKSkpKQotICAgICAgICAg
ICAgICAgIHNpbXBsZUZvbnREYXRhID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgZm91bmRG
b250TmFtZS5nZXQoKSwgZmFsc2UpOworICAgICAgICAgICAgICAgIGZvbnQgPSBmb250Rm9yRmFt
aWx5KGRlc2NyaXB0aW9uLCBmb3VuZEZvbnROYW1lLmdldCgpLCBmYWxzZSk7CiAgICAgICAgIH0K
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIH0KIAotICAgIGlmIChzaW1wbGVGb250RGF0YSkK
LSAgICAgICAgcmV0dXJuIHNpbXBsZUZvbnREYXRhLnJlbGVhc2UoKTsKKyAgICBpZiAoZm9udCkK
KyAgICAgICAgcmV0dXJuIGZvbnQucmVsZWFzZSgpOwogCiAgICAgcmV0dXJuIGxhc3RSZXNvcnRG
YWxsYmFja0ZvbnQoZGVzY3JpcHRpb24pOwogfQogCi1SZWZQdHI8U2ltcGxlRm9udERhdGE+IEZv
bnRDYWNoZTo6c2ltaWxhckZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBk
ZXNjcmlwdGlvbikKK1JlZlB0cjxGb250PiBGb250Q2FjaGU6OnNpbWlsYXJGb250KGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCiB7CiAgICAgLy8gQXR0ZW1wdCB0byBmaW5kIGFu
IGFwcHJvcHJpYXRlIGZvbnQgdXNpbmcgYSBtYXRjaCBiYXNlZCBvbiB0aGUgcHJlc2VuY2Ugb2Yg
a2V5d29yZHMgaW4KICAgICAvLyB0aGUgcmVxdWVzdGVkIG5hbWVzLiBGb3IgZXhhbXBsZSwgd2Un
bGwgbWF0Y2ggYW55IG5hbWUgdGhhdCBjb250YWlucyAiQXJhYmljIiB0byBHZWV6YSBQcm8uCi0g
ICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBzaW1wbGVGb250RGF0YTsKKyAgICBSZWZQdHI8Rm9u
dD4gZm9udDsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVzY3JpcHRpb24uZmFtaWx5
Q291bnQoKTsgKytpKSB7CiAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5ID0gZGVz
Y3JpcHRpb24uZmFtaWx5QXQoaSk7CiAgICAgICAgIGlmIChmYW1pbHkuaXNFbXB0eSgpKQpAQCAt
NDYxLDcgKzQ2MSw3IEBAIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpzaW1pbGEK
ICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gbWVubG8oIm1lbmxv
IiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CiAgICAgICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGNvdXJpZXIoImNvdXJpZXIiLCBBdG9taWNTdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNl
KGZhbWlseSwgbW9uYWNvKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShmYW1pbHksIG1lbmxvKSkgewot
ICAgICAgICAgICAgc2ltcGxlRm9udERhdGEgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBj
b3VyaWVyKTsKKyAgICAgICAgICAgIGZvbnQgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBj
b3VyaWVyKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKQEAgLTQ2OSw3ICs0
NjksNyBAQCBSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6c2ltaWxhCiAgICAgICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGx1Y2lkYUdyYW5kZSgibHVjaWRh
IGdyYW5kZSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwogICAgICAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiB2ZXJkYW5hKCJ2ZXJkYW5hIiwgQXRv
bWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CiAgICAgICAgIGlmIChlcXVhbElnbm9y
aW5nQ2FzZShmYW1pbHksIGx1Y2lkYUdyYW5kZSkpIHsKLSAgICAgICAgICAgIHNpbXBsZUZvbnRE
YXRhID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgdmVyZGFuYSk7CisgICAgICAgICAgICBm
b250ID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgdmVyZGFuYSk7CiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgfQogCkBAIC00NzksMTUgKzQ3OSwxNiBAQCBSZWZQdHI8U2ltcGxl
Rm9udERhdGE+IEZvbnRDYWNoZTo6c2ltaWxhCiAgICAgICAgIHN0YXRpYyBTdHJpbmcqIG1hdGNo
V29yZHNbM10gPSB7ICZhcmFiaWMuZ2V0KCksICZwYXNodG8uZ2V0KCksICZ1cmR1LmdldCgpIH07
CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGdlZXphUGxhaW4o
IkdlZXphUHJvIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CiAgICAgICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGdlZXphQm9sZCgiR2VlemFQcm8t
Qm9sZCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgICAgICBmb3Ig
KGludCBqID0gMDsgaiA8IDMgJiYgIXNpbXBsZUZvbnREYXRhOyArK2opCisgICAgICAgIGZvciAo
aW50IGogPSAwOyBqIDwgMyAmJiAhZm9udDsgKytqKSB7CiAgICAgICAgICAgICBpZiAoZmFtaWx5
LmNvbnRhaW5zKCptYXRjaFdvcmRzW2pdLCBmYWxzZSkpCi0gICAgICAgICAgICAgICAgc2ltcGxl
Rm9udERhdGEgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRl
c2NyaXB0aW9uLndlaWdodCgpKSA/IGdlZXphQm9sZCA6IGdlZXphUGxhaW4pOworICAgICAgICAg
ICAgICAgIGZvbnQgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xk
KGRlc2NyaXB0aW9uLndlaWdodCgpKSA/IGdlZXphQm9sZCA6IGdlZXphUGxhaW4pOworICAgICAg
ICB9CiAgICAgfQogCi0gICAgcmV0dXJuIHNpbXBsZUZvbnREYXRhLnJlbGVhc2UoKTsKKyAgICBy
ZXR1cm4gZm9udC5yZWxlYXNlKCk7CiB9CiAKLVJlZjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hl
OjpsYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2Ny
aXB0aW9uKQorUmVmPEZvbnQ+IEZvbnRDYWNoZTo6bGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25z
dCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikKIHsKICAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBmYWxsYmFja0ZvbnRGYW1pbHkoIi5QaG9uZUZhbGxiYWNr
IiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CiAgICAgcmV0dXJuICpmb250
Rm9yRmFtaWx5KGZvbnREZXNjcmlwdGlvbiwgZmFsbGJhY2tGb250RmFtaWx5LCBmYWxzZSk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvRm9udElPUy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvRm9udElPUy5t
bQkocmV2aXNpb24gMTc4NTEwKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9pb3MvU2ltcGxlRm9udERhdGFJT1MubW06MTc4NTEwKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvaW9zL0ZvbnRJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
OTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMTAsIDIwMTEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQ
cm9za3VyeWFrb3YKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJTaW1w
bGVGb250RGF0YS5oIgorCisjaW1wb3J0ICJCbG9ja0V4Y2VwdGlvbnMuaCIKKyNpbXBvcnQgIkNv
cmVHcmFwaGljc1NQSS5oIgorI2ltcG9ydCAiRm9udENhY2hlLmgiCisjaW1wb3J0ICJGb250Q2Fz
Y2FkZS5oIgorI2ltcG9ydCAiRm9udERlc2NyaXB0aW9uLmgiCisjaW1wb3J0ICJGb250U2Vydmlj
ZXNJT1MuaCIKKyNpbXBvcnQgPENvcmVUZXh0L0NvcmVUZXh0Lmg+CisjaW1wb3J0IDxmbG9hdC5o
PgorI2ltcG9ydCA8dW5pY29kZS91Y2hhci5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4K
KyNpbXBvcnQgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitz
dGF0aWMgYm9vbCBmb250RmFtaWx5U2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKENGU3RyaW5nUmVm
IGZvbnRGYW1pbHlOYW1lKQoreworICAgIGlmICghZm9udEZhbWlseU5hbWUpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIC8vIFRpbWVzIE5ldyBSb21hbiBjb250YWlucyBBcmFiaWMgZ2x5
cGhzLCBidXQgQ29yZSBUZXh0IGRvZXNuJ3Qga25vdyBob3cgdG8gc2hhcGUgdGhlbS4gPHJkYXI6
Ly9wcm9ibGVtLzk4MjM5NzU+CisgICAgLy8gRklYTUUgPHJkYXI6Ly9wcm9ibGVtLzEyMDk2ODM1
PiByZW1vdmUgdGhpcyBmdW5jdGlvbiBvbmNlIHRoZSBhYm92ZSBidWcgaXMgZml4ZWQuCisgICAg
Ly8gQXJpYWwgYW5kIFRhaG9tYSBhcmUgaGF2ZSBwZXJmb3JtYW5jZSBpc3N1ZXMgc28gZG9uJ3Qg
dXNlIHRoZW0gYXMgd2VsbC4KKyAgICByZXR1cm4gKENGU3RyaW5nQ29tcGFyZShDRlNUUigiVGlt
ZXMgTmV3IFJvbWFuIiksIGZvbnRGYW1pbHlOYW1lLCAwKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbykK
KyAgICAgICAgICAgfHwgKENGU3RyaW5nQ29tcGFyZShDRlNUUigiQXJpYWwiKSwgZm9udEZhbWls
eU5hbWUsIDApID09IGtDRkNvbXBhcmVFcXVhbFRvKQorICAgICAgICAgICB8fCAoQ0ZTdHJpbmdD
b21wYXJlKENGU1RSKCJUYWhvbWEiKSwgZm9udEZhbWlseU5hbWUsIDApID09IGtDRkNvbXBhcmVF
cXVhbFRvKTsKK30KKworc3RhdGljIGJvb2wgZm9udEhhc1ZlcnRpY2FsR2x5cGhzKENURm9udFJl
ZiBjdEZvbnQpCit7CisgICAgLy8gVGhlIGNoZWNrIGRvZXNuJ3QgbG9vayBuZWF0IGJ1dCB0aGlz
IGlzIHdoYXQgQXBwS2l0IGRvZXMgZm9yIHZlcnRpY2FsIHdyaXRpbmcuLi4KKyAgICBSZXRhaW5Q
dHI8Q0ZBcnJheVJlZj4gdGFibGVUYWdzID0gYWRvcHRDRihDVEZvbnRDb3B5QXZhaWxhYmxlVGFi
bGVzKGN0Rm9udCwga0NURm9udFRhYmxlT3B0aW9uTm9PcHRpb25zKSk7CisgICAgQ0ZJbmRleCBu
dW1UYWJsZXMgPSBDRkFycmF5R2V0Q291bnQodGFibGVUYWdzLmdldCgpKTsKKyAgICBmb3IgKENG
SW5kZXggaW5kZXggPSAwOyBpbmRleCA8IG51bVRhYmxlczsgKytpbmRleCkgeworICAgICAgICBD
VEZvbnRUYWJsZVRhZyB0YWcgPSAoQ1RGb250VGFibGVUYWcpKHVpbnRwdHJfdClDRkFycmF5R2V0
VmFsdWVBdEluZGV4KHRhYmxlVGFncy5nZXQoKSwgaW5kZXgpOworICAgICAgICBpZiAodGFnID09
IGtDVEZvbnRUYWJsZVZoZWEgfHwgdGFnID09IGtDVEZvbnRUYWJsZVZPUkcpCisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFNpbXBs
ZUZvbnREYXRhOjpwbGF0Zm9ybUluaXQoKQoreworICAgIG1fc3ludGhldGljQm9sZE9mZnNldCA9
IG1fcGxhdGZvcm1EYXRhLm1fc3ludGhldGljQm9sZCA/IGNlaWxmKG1fcGxhdGZvcm1EYXRhLnNp
emUoKSAgLyAyNC4wZikgOiAwLmY7CisgICAgbV9zcGFjZUdseXBoID0gMDsKKyAgICBtX3NwYWNl
V2lkdGggPSAwOworICAgIHVuc2lnbmVkIHVuaXRzUGVyRW07CisgICAgZmxvYXQgYXNjZW50Owor
ICAgIGZsb2F0IGRlc2NlbnQ7CisgICAgZmxvYXQgY2FwSGVpZ2h0OworICAgIGZsb2F0IGxpbmVH
YXA7CisgICAgZmxvYXQgbGluZVNwYWNpbmc7CisgICAgZmxvYXQgeEhlaWdodDsKKyAgICBSZXRh
aW5QdHI8Q0ZTdHJpbmdSZWY+IGZhbWlseU5hbWU7CisgICAgaWYgKENURm9udFJlZiBjdEZvbnQg
PSBtX3BsYXRmb3JtRGF0YS5mb250KCkpIHsKKyAgICAgICAgRm9udFNlcnZpY2VzSU9TIGZvbnRT
ZXJ2aWNlKGN0Rm9udCk7CisgICAgICAgIGFzY2VudCA9IGNlaWxmKGZvbnRTZXJ2aWNlLmFzY2Vu
dCgpKTsKKyAgICAgICAgZGVzY2VudCA9IGNlaWxmKGZvbnRTZXJ2aWNlLmRlc2NlbnQoKSk7Cisg
ICAgICAgIGxpbmVTcGFjaW5nID0gZm9udFNlcnZpY2UubGluZVNwYWNpbmcoKTsKKyAgICAgICAg
bGluZUdhcCA9IGZvbnRTZXJ2aWNlLmxpbmVHYXAoKTsKKyAgICAgICAgeEhlaWdodCA9IGZvbnRT
ZXJ2aWNlLnhIZWlnaHQoKTsKKyAgICAgICAgY2FwSGVpZ2h0ID0gZm9udFNlcnZpY2UuY2FwSGVp
Z2h0KCk7CisgICAgICAgIHVuaXRzUGVyRW0gPSBmb250U2VydmljZS51bml0c1BlckVtKCk7Cisg
ICAgICAgIGZhbWlseU5hbWUgPSBhZG9wdENGKENURm9udENvcHlGYW1pbHlOYW1lKGN0Rm9udCkp
OworICAgIH0gZWxzZSB7CisgICAgICAgIENHRm9udFJlZiBjZ0ZvbnQgPSBtX3BsYXRmb3JtRGF0
YS5jZ0ZvbnQoKTsKKworICAgICAgICB1bml0c1BlckVtID0gQ0dGb250R2V0VW5pdHNQZXJFbShj
Z0ZvbnQpOworCisgICAgICAgIGZsb2F0IHBvaW50U2l6ZSA9IG1fcGxhdGZvcm1EYXRhLnNpemUo
KTsKKyAgICAgICAgYXNjZW50ID0gbHJvdW5kZihzY2FsZUVtVG9Vbml0cyhDR0ZvbnRHZXRBc2Nl
bnQoY2dGb250KSwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemUpOworICAgICAgICBkZXNjZW50ID0g
bHJvdW5kZigtc2NhbGVFbVRvVW5pdHMoLWFicyhDR0ZvbnRHZXREZXNjZW50KGNnRm9udCkpLCB1
bml0c1BlckVtKSAqIHBvaW50U2l6ZSk7CisgICAgICAgIGxpbmVHYXAgPSBscm91bmRmKHNjYWxl
RW1Ub1VuaXRzKENHRm9udEdldExlYWRpbmcoY2dGb250KSwgdW5pdHNQZXJFbSkgKiBwb2ludFNp
emUpOworICAgICAgICB4SGVpZ2h0ID0gc2NhbGVFbVRvVW5pdHMoQ0dGb250R2V0WEhlaWdodChj
Z0ZvbnQpLCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZTsKKyAgICAgICAgY2FwSGVpZ2h0ID0gc2Nh
bGVFbVRvVW5pdHMoQ0dGb250R2V0Q2FwSGVpZ2h0KGNnRm9udCksIHVuaXRzUGVyRW0pICogcG9p
bnRTaXplOworCisgICAgICAgIGxpbmVTcGFjaW5nID0gYXNjZW50ICsgZGVzY2VudCArIGxpbmVH
YXA7CisgICAgICAgIGZhbWlseU5hbWUgPSBhZG9wdENGKENHRm9udENvcHlGYW1pbHlOYW1lKGNn
Rm9udCkpOworICAgIH0KKworICAgIG1fZm9udE1ldHJpY3Muc2V0VW5pdHNQZXJFbSh1bml0c1Bl
ckVtKTsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldEFzY2VudChhc2NlbnQpOworICAgIG1fZm9udE1l
dHJpY3Muc2V0RGVzY2VudChkZXNjZW50KTsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldExpbmVHYXAo
bGluZUdhcCk7CisgICAgbV9mb250TWV0cmljcy5zZXRMaW5lU3BhY2luZyhsaW5lU3BhY2luZyk7
CisgICAgbV9mb250TWV0cmljcy5zZXRYSGVpZ2h0KHhIZWlnaHQpOworICAgIG1fZm9udE1ldHJp
Y3Muc2V0Q2FwSGVpZ2h0KGNhcEhlaWdodCk7CisgICAgbV9zaG91bGROb3RCZVVzZWRGb3JBcmFi
aWMgPSBmb250RmFtaWx5U2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKGZhbWlseU5hbWUuZ2V0KCkp
OworCisgICAgaWYgKHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwgJiYg
IWlzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2soKSkKKyAgICAgICAgbV9oYXNWZXJ0aWNhbEdseXBo
cyA9IGZvbnRIYXNWZXJ0aWNhbEdseXBocyhtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSk7CisKKyAg
ICBpZiAoIW1fcGxhdGZvcm1EYXRhLm1faXNFbW9qaSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aW50IHRoaXJkT2ZTaXplID0gbV9wbGF0Zm9ybURhdGEuc2l6ZSgpIC8gMzsKKyAgICBtX2ZvbnRN
ZXRyaWNzLnNldEFzY2VudCh0aGlyZE9mU2l6ZSk7CisgICAgbV9mb250TWV0cmljcy5zZXREZXNj
ZW50KHRoaXJkT2ZTaXplKTsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldExpbmVHYXAodGhpcmRPZlNp
emUpOworICAgIG1fZm9udE1ldHJpY3Muc2V0TGluZVNwYWNpbmcoMCk7Cit9CisKK3ZvaWQgU2lt
cGxlRm9udERhdGE6OnBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpCit7CisgICAgbV9hdmdDaGFyV2lk
dGggPSAwOworICAgIG1fbWF4Q2hhcldpZHRoID0gMDsKKworICAgIC8vIEZhbGxiYWNrIHRvIGEg
Y3Jvc3MtcGxhdGZvcm0gZXN0aW1hdGUsIHdoaWNoIHdpbGwgcG9wdWxhdGUgdGhlc2UgdmFsdWVz
IGlmIHRoZXkgYXJlIG5vbi1wb3NpdGl2ZS4KKyAgICBpbml0Q2hhcldpZHRocygpOworfQorCitQ
YXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1DcmVhdGVT
Y2FsZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBzY2FsZUZhY3Rvcikg
Y29uc3QKK3sKKyAgICBpZiAoaXNDdXN0b21Gb250KCkpIHsKKyAgICAgICAgRm9udFBsYXRmb3Jt
RGF0YSBzY2FsZWRGb250RGF0YShtX3BsYXRmb3JtRGF0YSk7CisgICAgICAgIHNjYWxlZEZvbnRE
YXRhLm1fc2l6ZSA9IHNjYWxlZEZvbnREYXRhLm1fc2l6ZSAqIHNjYWxlRmFjdG9yOworICAgICAg
ICByZXR1cm4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZShzY2FsZWRGb250RGF0YSwgdHJ1ZSwgZmFs
c2UpOworICAgIH0KKworICAgIGZsb2F0IHNpemUgPSBtX3BsYXRmb3JtRGF0YS5zaXplKCkgKiBz
Y2FsZUZhY3RvcjsKKyAgICBDVEZvbnRTeW1ib2xpY1RyYWl0cyBmb250VHJhaXRzID0gQ1RGb250
R2V0U3ltYm9saWNUcmFpdHMobV9wbGF0Zm9ybURhdGEuZm9udCgpKTsKKyAgICBSZXRhaW5QdHI8
Q1RGb250RGVzY3JpcHRvclJlZj4gZm9udERlc2NyaXB0b3IgPSBhZG9wdENGKENURm9udENvcHlG
b250RGVzY3JpcHRvcihtX3BsYXRmb3JtRGF0YS5mb250KCkpKTsKKyAgICBSZXRhaW5QdHI8Q1RG
b250UmVmPiBzY2FsZWRGb250ID0gYWRvcHRDRihDVEZvbnRDcmVhdGVXaXRoRm9udERlc2NyaXB0
b3IoZm9udERlc2NyaXB0b3IuZ2V0KCksIHNpemUsIG51bGxwdHIpKTsKKyAgICBGb250UGxhdGZv
cm1EYXRhIHNjYWxlZEZvbnREYXRhKHNjYWxlZEZvbnQuZ2V0KCksIHNpemUsIG1fcGxhdGZvcm1E
YXRhLmlzUHJpbnRlckZvbnQoKSwgZmFsc2UsIGZhbHNlLCBtX3BsYXRmb3JtRGF0YS5vcmllbnRh
dGlvbigpKTsKKworICAgIGlmIChzY2FsZWRGb250RGF0YS5mb250KCkpIHsKKyAgICAgICAgaWYg
KG1fcGxhdGZvcm1EYXRhLm1fc3ludGhldGljQm9sZCkKKyAgICAgICAgICAgIGZvbnRUcmFpdHMg
fD0ga0NURm9udEJvbGRUcmFpdDsKKyAgICAgICAgaWYgKG1fcGxhdGZvcm1EYXRhLm1fc3ludGhl
dGljT2JsaXF1ZSkKKyAgICAgICAgICAgIGZvbnRUcmFpdHMgfD0ga0NURm9udEl0YWxpY1RyYWl0
OworCisgICAgICAgIENURm9udFN5bWJvbGljVHJhaXRzIHNjYWxlZEZvbnRUcmFpdHMgPSBDVEZv
bnRHZXRTeW1ib2xpY1RyYWl0cyhzY2FsZWRGb250RGF0YS5mb250KCkpOworICAgICAgICBzY2Fs
ZWRGb250RGF0YS5tX3N5bnRoZXRpY0JvbGQgPSAoZm9udFRyYWl0cyAmIGtDVEZvbnRCb2xkVHJh
aXQpICYmICEoc2NhbGVkRm9udFRyYWl0cyAmIGtDVEZvbnRUcmFpdEJvbGQpOworICAgICAgICBz
Y2FsZWRGb250RGF0YS5tX3N5bnRoZXRpY09ibGlxdWUgPSAoZm9udFRyYWl0cyAmIGtDVEZvbnRJ
dGFsaWNUcmFpdCkgJiYgIShzY2FsZWRGb250VHJhaXRzICYga0NURm9udFRyYWl0SXRhbGljKTsK
KworICAgICAgICByZXR1cm4gZm9udENhY2hlKCkuZm9udEZvclBsYXRmb3JtRGF0YShzY2FsZWRG
b250RGF0YSk7CisgICAgfQorCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3ZvaWQgU2ltcGxl
Rm9udERhdGE6OmRldGVybWluZVBpdGNoKCkKK3sKKyAgICBDVEZvbnRSZWYgY3RGb250ID0gbV9w
bGF0Zm9ybURhdGEuZm9udCgpOworICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSBmYWxzZTsKKyAg
ICBpZiAoIWN0Rm9udCkKKyAgICAgICAgcmV0dXJuOyAvLyBDVEZvbnQgaXMgbnVsbCBpbiB0aGUg
Y2FzZSBvZiBTVkcgZm9udHMgZm9yIGV4YW1wbGUuCisKKyAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdS
ZWY+IGZ1bGxOYW1lID0gYWRvcHRDRihDVEZvbnRDb3B5RnVsbE5hbWUoY3RGb250KSk7CisgICAg
UmV0YWluUHRyPENGU3RyaW5nUmVmPiBmYW1pbHlOYW1lID0gYWRvcHRDRihDVEZvbnRDb3B5RmFt
aWx5TmFtZShjdEZvbnQpKTsKKworICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSBDR0ZvbnRJc0Zp
eGVkUGl0Y2gobV9wbGF0Zm9ybURhdGEuY2dGb250KCkpIHx8IChmdWxsTmFtZSAmJiAoQ0ZTdHJp
bmdDb21wYXJlKGZ1bGxOYW1lLmdldCgpLCBDRlNUUigiT3Nha2EtTW9ubyIpLCBrQ0ZDb21wYXJl
Q2FzZUluc2Vuc2l0aXZlKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbyB8fCBDRlN0cmluZ0NvbXBhcmUo
ZnVsbE5hbWUuZ2V0KCksIENGU1RSKCJNUy1QR290aGljIiksIGtDRkNvbXBhcmVDYXNlSW5zZW5z
aXRpdmUpID09IGtDRkNvbXBhcmVFcXVhbFRvKSk7CisgICAgaWYgKGZhbWlseU5hbWUgJiYgQ0ZT
dHJpbmdDb21wYXJlKGZhbWlseU5hbWUuZ2V0KCksIENGU1RSKCJDb3VyaWVyIE5ldyIpLCBrQ0ZD
b21wYXJlQ2FzZUluc2Vuc2l0aXZlKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbykgeworICAgICAgICAv
LyBTcGVjaWFsIGNhc2UgQ291cmllciBOZXcgdG8gbm90IGJlIHRyZWF0ZWQgYXMgZml4ZWQgcGl0
Y2gsIGFzIHRoaXMgd2lsbCBtYWtlIHVzZSBvZiBhIGhhY2tlZCBzcGFjZSB3aWR0aCB3aGljaCBp
cyB1bmRlc2lyZWFibGUgZm9yIGlQaG9uZSAoc2VlIHJkYXI6Ly82MjY5NzgzKS4KKyAgICAgICAg
bV90cmVhdEFzRml4ZWRQaXRjaCA9IGZhbHNlOworICAgIH0KK30KKworQ0dGb250UmVuZGVyaW5n
U3R5bGUgU2ltcGxlRm9udERhdGE6OnJlbmRlcmluZ1N0eWxlKCkgY29uc3QKK3sKKyAgICByZXR1
cm4ga0NHRm9udFJlbmRlcmluZ1N0eWxlQW50aWFsaWFzaW5nIHwga0NHRm9udFJlbmRlcmluZ1N0
eWxlU3VicGl4ZWxQb3NpdGlvbmluZyB8IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZVN1YnBpeGVsUXVh
bnRpemF0aW9uIHwga0NHRm9udEFudGlhbGlhc2luZ1N0eWxlVW5maWx0ZXJlZDsKK30KKworYm9v
bCBTaW1wbGVGb250RGF0YTo6YWR2YW5jZUZvckNvbG9yQml0bWFwRm9udChHbHlwaCwgQ0dTaXpl
JikgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9Gb250SU9TLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9Gb250
SU9TLm1tCSh3b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9pb3MvRm9udElPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAogICovCiAK
ICNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiU2ltcGxlRm9udERhdGEuaCIKKyNpbXBvcnQg
IkZvbnQuaCIKIAogI2ltcG9ydCAiQmxvY2tFeGNlcHRpb25zLmgiCiAjaW1wb3J0ICJDb3JlR3Jh
cGhpY3NTUEkuaCIKQEAgLTY3LDcgKzY3LDcgQEAgc3RhdGljIGJvb2wgZm9udEhhc1ZlcnRpY2Fs
R2x5cGhzKENURm9udAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBTaW1wbGVGb250RGF0
YTo6cGxhdGZvcm1Jbml0KCkKK3ZvaWQgRm9udDo6cGxhdGZvcm1Jbml0KCkKIHsKICAgICBtX3N5
bnRoZXRpY0JvbGRPZmZzZXQgPSBtX3BsYXRmb3JtRGF0YS5tX3N5bnRoZXRpY0JvbGQgPyBjZWls
ZihtX3BsYXRmb3JtRGF0YS5zaXplKCkgIC8gMjQuMGYpIDogMC5mOwogICAgIG1fc3BhY2VHbHlw
aCA9IDA7CkBAIC0xMjgsNyArMTI4LDcgQEAgdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1J
bml0KCkKICAgICBtX2ZvbnRNZXRyaWNzLnNldExpbmVTcGFjaW5nKDApOwogfQogCi12b2lkIFNp
bXBsZUZvbnREYXRhOjpwbGF0Zm9ybUNoYXJXaWR0aEluaXQoKQordm9pZCBGb250OjpwbGF0Zm9y
bUNoYXJXaWR0aEluaXQoKQogewogICAgIG1fYXZnQ2hhcldpZHRoID0gMDsKICAgICBtX21heENo
YXJXaWR0aCA9IDA7CkBAIC0xMzcsMTIgKzEzNywxMiBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpw
bGF0Zm9ybUNoYXJXaWR0aEluCiAgICAgaW5pdENoYXJXaWR0aHMoKTsKIH0KIAotUGFzc1JlZlB0
cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQ3JlYXRlU2NhbGVkRm9u
dERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0CitQ
YXNzUmVmUHRyPEZvbnQ+IEZvbnQ6OnBsYXRmb3JtQ3JlYXRlU2NhbGVkRm9udChjb25zdCBGb250
RGVzY3JpcHRpb24mLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3QKIHsKICAgICBpZiAoaXNDdXN0
b21Gb250KCkpIHsKICAgICAgICAgRm9udFBsYXRmb3JtRGF0YSBzY2FsZWRGb250RGF0YShtX3Bs
YXRmb3JtRGF0YSk7CiAgICAgICAgIHNjYWxlZEZvbnREYXRhLm1fc2l6ZSA9IHNjYWxlZEZvbnRE
YXRhLm1fc2l6ZSAqIHNjYWxlRmFjdG9yOwotICAgICAgICByZXR1cm4gU2ltcGxlRm9udERhdGE6
OmNyZWF0ZShzY2FsZWRGb250RGF0YSwgdHJ1ZSwgZmFsc2UpOworICAgICAgICByZXR1cm4gRm9u
dDo6Y3JlYXRlKHNjYWxlZEZvbnREYXRhLCB0cnVlLCBmYWxzZSk7CiAgICAgfQogCiAgICAgZmxv
YXQgc2l6ZSA9IG1fcGxhdGZvcm1EYXRhLnNpemUoKSAqIHNjYWxlRmFjdG9yOwpAQCAtMTY3LDcg
KzE2Nyw3IEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXQKICAgICBy
ZXR1cm4gbnVsbHB0cjsKIH0KIAotdm9pZCBTaW1wbGVGb250RGF0YTo6ZGV0ZXJtaW5lUGl0Y2go
KQordm9pZCBGb250OjpkZXRlcm1pbmVQaXRjaCgpCiB7CiAgICAgQ1RGb250UmVmIGN0Rm9udCA9
IG1fcGxhdGZvcm1EYXRhLmZvbnQoKTsKICAgICBtX3RyZWF0QXNGaXhlZFBpdGNoID0gZmFsc2U7
CkBAIC0xODQsMTIgKzE4NCwxMiBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpkZXRlcm1pbmVQaXRj
aCgpCiAgICAgfQogfQogCi1DR0ZvbnRSZW5kZXJpbmdTdHlsZSBTaW1wbGVGb250RGF0YTo6cmVu
ZGVyaW5nU3R5bGUoKSBjb25zdAorQ0dGb250UmVuZGVyaW5nU3R5bGUgRm9udDo6cmVuZGVyaW5n
U3R5bGUoKSBjb25zdAogewogICAgIHJldHVybiBrQ0dGb250UmVuZGVyaW5nU3R5bGVBbnRpYWxp
YXNpbmcgfCBrQ0dGb250UmVuZGVyaW5nU3R5bGVTdWJwaXhlbFBvc2l0aW9uaW5nIHwga0NHRm9u
dFJlbmRlcmluZ1N0eWxlU3VicGl4ZWxRdWFudGl6YXRpb24gfCBrQ0dGb250QW50aWFsaWFzaW5n
U3R5bGVVbmZpbHRlcmVkOwogfQogCi1ib29sIFNpbXBsZUZvbnREYXRhOjphZHZhbmNlRm9yQ29s
b3JCaXRtYXBGb250KEdseXBoLCBDR1NpemUmKSBjb25zdAorYm9vbCBGb250OjphZHZhbmNlRm9y
Q29sb3JCaXRtYXBGb250KEdseXBoLCBDR1NpemUmKSBjb25zdAogewogICAgIHJldHVybiBmYWxz
ZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9TaW1wbGVG
b250RGF0YUlPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9pb3MvU2ltcGxlRm9udERhdGFJT1MubW0JKHJldmlzaW9uIDE3ODUxMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9TaW1wbGVGb250RGF0YUlPUy5tbQkod29y
a2luZyBjb3B5KQpAQCAtMSwxOTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSwg
MjAwNiwgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJj
b25maWcuaCIKLSNpbXBvcnQgIlNpbXBsZUZvbnREYXRhLmgiCi0KLSNpbXBvcnQgIkJsb2NrRXhj
ZXB0aW9ucy5oIgotI2ltcG9ydCAiQ29yZUdyYXBoaWNzU1BJLmgiCi0jaW1wb3J0ICJGb250Q2Fj
aGUuaCIKLSNpbXBvcnQgIkZvbnRDYXNjYWRlLmgiCi0jaW1wb3J0ICJGb250RGVzY3JpcHRpb24u
aCIKLSNpbXBvcnQgIkZvbnRTZXJ2aWNlc0lPUy5oIgotI2ltcG9ydCA8Q29yZVRleHQvQ29yZVRl
eHQuaD4KLSNpbXBvcnQgPGZsb2F0Lmg+Ci0jaW1wb3J0IDx1bmljb2RlL3VjaGFyLmg+Ci0jaW1w
b3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL1N0ZExpYkV4dHJhcy5oPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBib29sIGZvbnRGYW1pbHlTaG91bGROb3RCZVVz
ZWRGb3JBcmFiaWMoQ0ZTdHJpbmdSZWYgZm9udEZhbWlseU5hbWUpCi17Ci0gICAgaWYgKCFmb250
RmFtaWx5TmFtZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gVGltZXMgTmV3IFJv
bWFuIGNvbnRhaW5zIEFyYWJpYyBnbHlwaHMsIGJ1dCBDb3JlIFRleHQgZG9lc24ndCBrbm93IGhv
dyB0byBzaGFwZSB0aGVtLiA8cmRhcjovL3Byb2JsZW0vOTgyMzk3NT4KLSAgICAvLyBGSVhNRSA8
cmRhcjovL3Byb2JsZW0vMTIwOTY4MzU+IHJlbW92ZSB0aGlzIGZ1bmN0aW9uIG9uY2UgdGhlIGFi
b3ZlIGJ1ZyBpcyBmaXhlZC4KLSAgICAvLyBBcmlhbCBhbmQgVGFob21hIGFyZSBoYXZlIHBlcmZv
cm1hbmNlIGlzc3VlcyBzbyBkb24ndCB1c2UgdGhlbSBhcyB3ZWxsLgotICAgIHJldHVybiAoQ0ZT
dHJpbmdDb21wYXJlKENGU1RSKCJUaW1lcyBOZXcgUm9tYW4iKSwgZm9udEZhbWlseU5hbWUsIDAp
ID09IGtDRkNvbXBhcmVFcXVhbFRvKQotICAgICAgICAgICB8fCAoQ0ZTdHJpbmdDb21wYXJlKENG
U1RSKCJBcmlhbCIpLCBmb250RmFtaWx5TmFtZSwgMCkgPT0ga0NGQ29tcGFyZUVxdWFsVG8pCi0g
ICAgICAgICAgIHx8IChDRlN0cmluZ0NvbXBhcmUoQ0ZTVFIoIlRhaG9tYSIpLCBmb250RmFtaWx5
TmFtZSwgMCkgPT0ga0NGQ29tcGFyZUVxdWFsVG8pOwotfQotCi1zdGF0aWMgYm9vbCBmb250SGFz
VmVydGljYWxHbHlwaHMoQ1RGb250UmVmIGN0Rm9udCkKLXsKLSAgICAvLyBUaGUgY2hlY2sgZG9l
c24ndCBsb29rIG5lYXQgYnV0IHRoaXMgaXMgd2hhdCBBcHBLaXQgZG9lcyBmb3IgdmVydGljYWwg
d3JpdGluZy4uLgotICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiB0YWJsZVRhZ3MgPSBhZG9wdENG
KENURm9udENvcHlBdmFpbGFibGVUYWJsZXMoY3RGb250LCBrQ1RGb250VGFibGVPcHRpb25Ob09w
dGlvbnMpKTsKLSAgICBDRkluZGV4IG51bVRhYmxlcyA9IENGQXJyYXlHZXRDb3VudCh0YWJsZVRh
Z3MuZ2V0KCkpOwotICAgIGZvciAoQ0ZJbmRleCBpbmRleCA9IDA7IGluZGV4IDwgbnVtVGFibGVz
OyArK2luZGV4KSB7Ci0gICAgICAgIENURm9udFRhYmxlVGFnIHRhZyA9IChDVEZvbnRUYWJsZVRh
ZykodWludHB0cl90KUNGQXJyYXlHZXRWYWx1ZUF0SW5kZXgodGFibGVUYWdzLmdldCgpLCBpbmRl
eCk7Ci0gICAgICAgIGlmICh0YWcgPT0ga0NURm9udFRhYmxlVmhlYSB8fCB0YWcgPT0ga0NURm9u
dFRhYmxlVk9SRykKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLXZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtSW5pdCgpCi17Ci0gICAg
bV9zeW50aGV0aWNCb2xkT2Zmc2V0ID0gbV9wbGF0Zm9ybURhdGEubV9zeW50aGV0aWNCb2xkID8g
Y2VpbGYobV9wbGF0Zm9ybURhdGEuc2l6ZSgpICAvIDI0LjBmKSA6IDAuZjsKLSAgICBtX3NwYWNl
R2x5cGggPSAwOwotICAgIG1fc3BhY2VXaWR0aCA9IDA7Ci0gICAgdW5zaWduZWQgdW5pdHNQZXJF
bTsKLSAgICBmbG9hdCBhc2NlbnQ7Ci0gICAgZmxvYXQgZGVzY2VudDsKLSAgICBmbG9hdCBjYXBI
ZWlnaHQ7Ci0gICAgZmxvYXQgbGluZUdhcDsKLSAgICBmbG9hdCBsaW5lU3BhY2luZzsKLSAgICBm
bG9hdCB4SGVpZ2h0OwotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gZmFtaWx5TmFtZTsKLSAg
ICBpZiAoQ1RGb250UmVmIGN0Rm9udCA9IG1fcGxhdGZvcm1EYXRhLmZvbnQoKSkgewotICAgICAg
ICBGb250U2VydmljZXNJT1MgZm9udFNlcnZpY2UoY3RGb250KTsKLSAgICAgICAgYXNjZW50ID0g
Y2VpbGYoZm9udFNlcnZpY2UuYXNjZW50KCkpOwotICAgICAgICBkZXNjZW50ID0gY2VpbGYoZm9u
dFNlcnZpY2UuZGVzY2VudCgpKTsKLSAgICAgICAgbGluZVNwYWNpbmcgPSBmb250U2VydmljZS5s
aW5lU3BhY2luZygpOwotICAgICAgICBsaW5lR2FwID0gZm9udFNlcnZpY2UubGluZUdhcCgpOwot
ICAgICAgICB4SGVpZ2h0ID0gZm9udFNlcnZpY2UueEhlaWdodCgpOwotICAgICAgICBjYXBIZWln
aHQgPSBmb250U2VydmljZS5jYXBIZWlnaHQoKTsKLSAgICAgICAgdW5pdHNQZXJFbSA9IGZvbnRT
ZXJ2aWNlLnVuaXRzUGVyRW0oKTsKLSAgICAgICAgZmFtaWx5TmFtZSA9IGFkb3B0Q0YoQ1RGb250
Q29weUZhbWlseU5hbWUoY3RGb250KSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQ0dGb250UmVm
IGNnRm9udCA9IG1fcGxhdGZvcm1EYXRhLmNnRm9udCgpOwotCi0gICAgICAgIHVuaXRzUGVyRW0g
PSBDR0ZvbnRHZXRVbml0c1BlckVtKGNnRm9udCk7Ci0KLSAgICAgICAgZmxvYXQgcG9pbnRTaXpl
ID0gbV9wbGF0Zm9ybURhdGEuc2l6ZSgpOwotICAgICAgICBhc2NlbnQgPSBscm91bmRmKHNjYWxl
RW1Ub1VuaXRzKENHRm9udEdldEFzY2VudChjZ0ZvbnQpLCB1bml0c1BlckVtKSAqIHBvaW50U2l6
ZSk7Ci0gICAgICAgIGRlc2NlbnQgPSBscm91bmRmKC1zY2FsZUVtVG9Vbml0cygtYWJzKENHRm9u
dEdldERlc2NlbnQoY2dGb250KSksIHVuaXRzUGVyRW0pICogcG9pbnRTaXplKTsKLSAgICAgICAg
bGluZUdhcCA9IGxyb3VuZGYoc2NhbGVFbVRvVW5pdHMoQ0dGb250R2V0TGVhZGluZyhjZ0ZvbnQp
LCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZSk7Ci0gICAgICAgIHhIZWlnaHQgPSBzY2FsZUVtVG9V
bml0cyhDR0ZvbnRHZXRYSGVpZ2h0KGNnRm9udCksIHVuaXRzUGVyRW0pICogcG9pbnRTaXplOwot
ICAgICAgICBjYXBIZWlnaHQgPSBzY2FsZUVtVG9Vbml0cyhDR0ZvbnRHZXRDYXBIZWlnaHQoY2dG
b250KSwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemU7Ci0KLSAgICAgICAgbGluZVNwYWNpbmcgPSBh
c2NlbnQgKyBkZXNjZW50ICsgbGluZUdhcDsKLSAgICAgICAgZmFtaWx5TmFtZSA9IGFkb3B0Q0Yo
Q0dGb250Q29weUZhbWlseU5hbWUoY2dGb250KSk7Ci0gICAgfQotCi0gICAgbV9mb250TWV0cmlj
cy5zZXRVbml0c1BlckVtKHVuaXRzUGVyRW0pOwotICAgIG1fZm9udE1ldHJpY3Muc2V0QXNjZW50
KGFzY2VudCk7Ci0gICAgbV9mb250TWV0cmljcy5zZXREZXNjZW50KGRlc2NlbnQpOwotICAgIG1f
Zm9udE1ldHJpY3Muc2V0TGluZUdhcChsaW5lR2FwKTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldExp
bmVTcGFjaW5nKGxpbmVTcGFjaW5nKTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldFhIZWlnaHQoeEhl
aWdodCk7Ci0gICAgbV9mb250TWV0cmljcy5zZXRDYXBIZWlnaHQoY2FwSGVpZ2h0KTsKLSAgICBt
X3Nob3VsZE5vdEJlVXNlZEZvckFyYWJpYyA9IGZvbnRGYW1pbHlTaG91bGROb3RCZVVzZWRGb3JB
cmFiaWMoZmFtaWx5TmFtZS5nZXQoKSk7Ci0KLSAgICBpZiAocGxhdGZvcm1EYXRhKCkub3JpZW50
YXRpb24oKSA9PSBWZXJ0aWNhbCAmJiAhaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaygpKQotICAg
ICAgICBtX2hhc1ZlcnRpY2FsR2x5cGhzID0gZm9udEhhc1ZlcnRpY2FsR2x5cGhzKG1fcGxhdGZv
cm1EYXRhLmN0Rm9udCgpKTsKLQotICAgIGlmICghbV9wbGF0Zm9ybURhdGEubV9pc0Vtb2ppKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpbnQgdGhpcmRPZlNpemUgPSBtX3BsYXRmb3JtRGF0YS5z
aXplKCkgLyAzOwotICAgIG1fZm9udE1ldHJpY3Muc2V0QXNjZW50KHRoaXJkT2ZTaXplKTsKLSAg
ICBtX2ZvbnRNZXRyaWNzLnNldERlc2NlbnQodGhpcmRPZlNpemUpOwotICAgIG1fZm9udE1ldHJp
Y3Muc2V0TGluZUdhcCh0aGlyZE9mU2l6ZSk7Ci0gICAgbV9mb250TWV0cmljcy5zZXRMaW5lU3Bh
Y2luZygwKTsKLX0KLQotdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1DaGFyV2lkdGhJbml0
KCkKLXsKLSAgICBtX2F2Z0NoYXJXaWR0aCA9IDA7Ci0gICAgbV9tYXhDaGFyV2lkdGggPSAwOwot
Ci0gICAgLy8gRmFsbGJhY2sgdG8gYSBjcm9zcy1wbGF0Zm9ybSBlc3RpbWF0ZSwgd2hpY2ggd2ls
bCBwb3B1bGF0ZSB0aGVzZSB2YWx1ZXMgaWYgdGhleSBhcmUgbm9uLXBvc2l0aXZlLgotICAgIGlu
aXRDaGFyV2lkdGhzKCk7Ci19Ci0KLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZv
bnREYXRhOjpwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlv
biYsIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAotewotICAgIGlmIChpc0N1c3RvbUZvbnQoKSkg
ewotICAgICAgICBGb250UGxhdGZvcm1EYXRhIHNjYWxlZEZvbnREYXRhKG1fcGxhdGZvcm1EYXRh
KTsKLSAgICAgICAgc2NhbGVkRm9udERhdGEubV9zaXplID0gc2NhbGVkRm9udERhdGEubV9zaXpl
ICogc2NhbGVGYWN0b3I7Ci0gICAgICAgIHJldHVybiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlKHNj
YWxlZEZvbnREYXRhLCB0cnVlLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgZmxvYXQgc2l6ZSA9IG1f
cGxhdGZvcm1EYXRhLnNpemUoKSAqIHNjYWxlRmFjdG9yOwotICAgIENURm9udFN5bWJvbGljVHJh
aXRzIGZvbnRUcmFpdHMgPSBDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhtX3BsYXRmb3JtRGF0YS5m
b250KCkpOwotICAgIFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPiBmb250RGVzY3JpcHRv
ciA9IGFkb3B0Q0YoQ1RGb250Q29weUZvbnREZXNjcmlwdG9yKG1fcGxhdGZvcm1EYXRhLmZvbnQo
KSkpOwotICAgIFJldGFpblB0cjxDVEZvbnRSZWY+IHNjYWxlZEZvbnQgPSBhZG9wdENGKENURm9u
dENyZWF0ZVdpdGhGb250RGVzY3JpcHRvcihmb250RGVzY3JpcHRvci5nZXQoKSwgc2l6ZSwgbnVs
bHB0cikpOwotICAgIEZvbnRQbGF0Zm9ybURhdGEgc2NhbGVkRm9udERhdGEoc2NhbGVkRm9udC5n
ZXQoKSwgc2l6ZSwgbV9wbGF0Zm9ybURhdGEuaXNQcmludGVyRm9udCgpLCBmYWxzZSwgZmFsc2Us
IG1fcGxhdGZvcm1EYXRhLm9yaWVudGF0aW9uKCkpOwotCi0gICAgaWYgKHNjYWxlZEZvbnREYXRh
LmZvbnQoKSkgewotICAgICAgICBpZiAobV9wbGF0Zm9ybURhdGEubV9zeW50aGV0aWNCb2xkKQot
ICAgICAgICAgICAgZm9udFRyYWl0cyB8PSBrQ1RGb250Qm9sZFRyYWl0OwotICAgICAgICBpZiAo
bV9wbGF0Zm9ybURhdGEubV9zeW50aGV0aWNPYmxpcXVlKQotICAgICAgICAgICAgZm9udFRyYWl0
cyB8PSBrQ1RGb250SXRhbGljVHJhaXQ7Ci0KLSAgICAgICAgQ1RGb250U3ltYm9saWNUcmFpdHMg
c2NhbGVkRm9udFRyYWl0cyA9IENURm9udEdldFN5bWJvbGljVHJhaXRzKHNjYWxlZEZvbnREYXRh
LmZvbnQoKSk7Ci0gICAgICAgIHNjYWxlZEZvbnREYXRhLm1fc3ludGhldGljQm9sZCA9IChmb250
VHJhaXRzICYga0NURm9udEJvbGRUcmFpdCkgJiYgIShzY2FsZWRGb250VHJhaXRzICYga0NURm9u
dFRyYWl0Qm9sZCk7Ci0gICAgICAgIHNjYWxlZEZvbnREYXRhLm1fc3ludGhldGljT2JsaXF1ZSA9
IChmb250VHJhaXRzICYga0NURm9udEl0YWxpY1RyYWl0KSAmJiAhKHNjYWxlZEZvbnRUcmFpdHMg
JiBrQ1RGb250VHJhaXRJdGFsaWMpOwotCi0gICAgICAgIHJldHVybiBmb250Q2FjaGUoKS5mb250
Rm9yUGxhdGZvcm1EYXRhKHNjYWxlZEZvbnREYXRhKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbnVs
bHB0cjsKLX0KLQotdm9pZCBTaW1wbGVGb250RGF0YTo6ZGV0ZXJtaW5lUGl0Y2goKQotewotICAg
IENURm9udFJlZiBjdEZvbnQgPSBtX3BsYXRmb3JtRGF0YS5mb250KCk7Ci0gICAgbV90cmVhdEFz
Rml4ZWRQaXRjaCA9IGZhbHNlOwotICAgIGlmICghY3RGb250KQotICAgICAgICByZXR1cm47IC8v
IENURm9udCBpcyBudWxsIGluIHRoZSBjYXNlIG9mIFNWRyBmb250cyBmb3IgZXhhbXBsZS4KLQot
ICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gZnVsbE5hbWUgPSBhZG9wdENGKENURm9udENvcHlG
dWxsTmFtZShjdEZvbnQpKTsKLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGZhbWlseU5hbWUg
PSBhZG9wdENGKENURm9udENvcHlGYW1pbHlOYW1lKGN0Rm9udCkpOwotCi0gICAgbV90cmVhdEFz
Rml4ZWRQaXRjaCA9IENHRm9udElzRml4ZWRQaXRjaChtX3BsYXRmb3JtRGF0YS5jZ0ZvbnQoKSkg
fHwgKGZ1bGxOYW1lICYmIChDRlN0cmluZ0NvbXBhcmUoZnVsbE5hbWUuZ2V0KCksIENGU1RSKCJP
c2FrYS1Nb25vIiksIGtDRkNvbXBhcmVDYXNlSW5zZW5zaXRpdmUpID09IGtDRkNvbXBhcmVFcXVh
bFRvIHx8IENGU3RyaW5nQ29tcGFyZShmdWxsTmFtZS5nZXQoKSwgQ0ZTVFIoIk1TLVBHb3RoaWMi
KSwga0NGQ29tcGFyZUNhc2VJbnNlbnNpdGl2ZSkgPT0ga0NGQ29tcGFyZUVxdWFsVG8pKTsKLSAg
ICBpZiAoZmFtaWx5TmFtZSAmJiBDRlN0cmluZ0NvbXBhcmUoZmFtaWx5TmFtZS5nZXQoKSwgQ0ZT
VFIoIkNvdXJpZXIgTmV3IiksIGtDRkNvbXBhcmVDYXNlSW5zZW5zaXRpdmUpID09IGtDRkNvbXBh
cmVFcXVhbFRvKSB7Ci0gICAgICAgIC8vIFNwZWNpYWwgY2FzZSBDb3VyaWVyIE5ldyB0byBub3Qg
YmUgdHJlYXRlZCBhcyBmaXhlZCBwaXRjaCwgYXMgdGhpcyB3aWxsIG1ha2UgdXNlIG9mIGEgaGFj
a2VkIHNwYWNlIHdpZHRoIHdoaWNoIGlzIHVuZGVzaXJlYWJsZSBmb3IgaVBob25lIChzZWUgcmRh
cjovLzYyNjk3ODMpLgotICAgICAgICBtX3RyZWF0QXNGaXhlZFBpdGNoID0gZmFsc2U7Ci0gICAg
fQotfQotCi1DR0ZvbnRSZW5kZXJpbmdTdHlsZSBTaW1wbGVGb250RGF0YTo6cmVuZGVyaW5nU3R5
bGUoKSBjb25zdAotewotICAgIHJldHVybiBrQ0dGb250UmVuZGVyaW5nU3R5bGVBbnRpYWxpYXNp
bmcgfCBrQ0dGb250UmVuZGVyaW5nU3R5bGVTdWJwaXhlbFBvc2l0aW9uaW5nIHwga0NHRm9udFJl
bmRlcmluZ1N0eWxlU3VicGl4ZWxRdWFudGl6YXRpb24gfCBrQ0dGb250QW50aWFsaWFzaW5nU3R5
bGVVbmZpbHRlcmVkOwotfQotCi1ib29sIFNpbXBsZUZvbnREYXRhOjphZHZhbmNlRm9yQ29sb3JC
aXRtYXBGb250KEdseXBoLCBDR1NpemUmKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5j
cHAJKHJldmlzaW9uIDE3ODUxMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1
Niw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgZmxvYXQgd2lkdGgodW5zaWduZWQg
ZnJvbSwgdW5zaWduZWQgbGVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxi
YWNrRm9udHMpCisgICAgZmxvYXQgd2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBI
YXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cykKICAgICB7CiAgICAgICAgIG1fY29u
dHJvbGxlci0+YWR2YW5jZShmcm9tLCAwLCBCeVdob2xlR2x5cGhzLCBmYWxsYmFja0ZvbnRzKTsK
ICAgICAgICAgZmxvYXQgYmVmb3JlV2lkdGggPSBtX2NvbnRyb2xsZXItPnJ1bldpZHRoU29GYXIo
KTsKQEAgLTk2LDcgKzk2LDcgQEAgdm9pZCBGb250Q2FzY2FkZTo6ZGVsZXRlTGF5b3V0KFRleHRM
YXlvdQogICAgIGRlbGV0ZSBsYXlvdXQ7CiB9CiAKLWZsb2F0IEZvbnRDYXNjYWRlOjp3aWR0aChU
ZXh0TGF5b3V0JiBsYXlvdXQsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgSGFzaFNldDxj
b25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzKQorZmxvYXQgRm9udENhc2NhZGU6
OndpZHRoKFRleHRMYXlvdXQmIGxheW91dCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBI
YXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cykKIHsKICAgICByZXR1cm4gbGF5b3V0
LndpZHRoKGZyb20sIGxlbiwgZmFsbGJhY2tGb250cyk7CiB9CkBAIC0xMTUsNyArMTE1LDcgQEAg
c3RhdGljIGlubGluZSBDR0Zsb2F0IGNlaWxDR0Zsb2F0KENHRmxvYQogICAgIHJldHVybiBzdGF0
aWNfY2FzdDxDR0Zsb2F0PihjZWlsKGYpKTsKIH0KIAotQ29tcGxleFRleHRDb250cm9sbGVyOjpD
b21wbGV4VGV4dENvbnRyb2xsZXIoY29uc3QgRm9udENhc2NhZGUqIGZvbnQsIGNvbnN0IFRleHRS
dW4mIHJ1biwgYm9vbCBtYXlVc2VOYXR1cmFsV3JpdGluZ0RpcmVjdGlvbiwgSGFzaFNldDxjb25z
dCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBib29sIGZvclRleHRFbXBoYXNpcykK
K0NvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRDb250cm9sbGVyKGNvbnN0IEZvbnRD
YXNjYWRlKiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGJvb2wgbWF5VXNlTmF0dXJhbFdyaXRp
bmdEaXJlY3Rpb24sIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzLCBib29sIGZv
clRleHRFbXBoYXNpcykKICAgICA6IG1fZm9udCgqZm9udCkKICAgICAsIG1fcnVuKHJ1bikKICAg
ICAsIG1faXNMVFJPbmx5KHRydWUpCkBAIC0yOTEsNyArMjkxLDcgQEAgdm9pZCBDb21wbGV4VGV4
dENvbnRyb2xsZXI6OmNvbGxlY3RDb21wbAogICAgIGlmICghbV9lbmQpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIC8vIFdlIGJyZWFrIHVwIGdseXBoIHJ1biBnZW5lcmF0aW9uIGZvciB0aGUgc3Ry
aW5nIGJ5IEZvbnREYXRhLgorICAgIC8vIFdlIGJyZWFrIHVwIGdseXBoIHJ1biBnZW5lcmF0aW9u
IGZvciB0aGUgc3RyaW5nIGJ5IEZvbnQuCiAgICAgY29uc3QgVUNoYXIqIGNwOwogCiAgICAgaWYg
KG1fcnVuLmlzOEJpdCgpKSB7CkBAIC0zMDgsOSArMzA4LDkgQEAgdm9pZCBDb21wbGV4VGV4dENv
bnRyb2xsZXI6OmNvbGxlY3RDb21wbAogICAgIGNvbnN0IFVDaGFyKiBjdXJyID0gY3A7CiAgICAg
Y29uc3QgVUNoYXIqIGVuZCA9IGNwICsgbV9lbmQ7CiAKLSAgICBjb25zdCBTaW1wbGVGb250RGF0
YSogZm9udERhdGE7CisgICAgY29uc3QgRm9udCogZm9udDsKICAgICBib29sIGlzTWlzc2luZ0ds
eXBoOwotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBuZXh0Rm9udERhdGE7CisgICAgY29uc3Qg
Rm9udCogbmV4dEZvbnQ7CiAgICAgYm9vbCBuZXh0SXNNaXNzaW5nR2x5cGg7CiAKICAgICB1bnNp
Z25lZCBtYXJrQ291bnQ7CkBAIC0zMzIsMTIgKzMzMiwxMiBAQCB2b2lkIENvbXBsZXhUZXh0Q29u
dHJvbGxlcjo6Y29sbGVjdENvbXBsCiAgICAgfQogCiAgICAgbmV4dElzTWlzc2luZ0dseXBoID0g
ZmFsc2U7Ci0gICAgbmV4dEZvbnREYXRhID0gbV9mb250LmZvbnREYXRhRm9yQ29tYmluaW5nQ2hh
cmFjdGVyU2VxdWVuY2Uoc2VxdWVuY2VTdGFydCwgY3VyciAtIHNlcXVlbmNlU3RhcnQsIG5leHRJ
c1NtYWxsQ2FwcyA/IFNtYWxsQ2Fwc1ZhcmlhbnQgOiBOb3JtYWxWYXJpYW50KTsKLSAgICBpZiAo
IW5leHRGb250RGF0YSkKKyAgICBuZXh0Rm9udCA9IG1fZm9udC5mb250Rm9yQ29tYmluaW5nQ2hh
cmFjdGVyU2VxdWVuY2Uoc2VxdWVuY2VTdGFydCwgY3VyciAtIHNlcXVlbmNlU3RhcnQsIG5leHRJ
c1NtYWxsQ2FwcyA/IFNtYWxsQ2Fwc1ZhcmlhbnQgOiBOb3JtYWxWYXJpYW50KTsKKyAgICBpZiAo
IW5leHRGb250KQogICAgICAgICBuZXh0SXNNaXNzaW5nR2x5cGggPSB0cnVlOwogCiAgICAgd2hp
bGUgKGN1cnIgPCBlbmQpIHsKLSAgICAgICAgZm9udERhdGEgPSBuZXh0Rm9udERhdGE7CisgICAg
ICAgIGZvbnQgPSBuZXh0Rm9udDsKICAgICAgICAgaXNNaXNzaW5nR2x5cGggPSBuZXh0SXNNaXNz
aW5nR2x5cGg7CiAgICAgICAgIGlzU21hbGxDYXBzID0gbmV4dElzU21hbGxDYXBzOwogICAgICAg
ICBpbnQgaW5kZXggPSBjdXJyIC0gY3A7CkBAIC0zNTgsMTcgKzM1OCwxNyBAQCB2b2lkIENvbXBs
ZXhUZXh0Q29udHJvbGxlcjo6Y29sbGVjdENvbXBsCiAKICAgICAgICAgbmV4dElzTWlzc2luZ0ds
eXBoID0gZmFsc2U7CiAgICAgICAgIGlmIChiYXNlQ2hhcmFjdGVyID09IHplcm9XaWR0aEpvaW5l
cikKLSAgICAgICAgICAgIG5leHRGb250RGF0YSA9IGZvbnREYXRhOworICAgICAgICAgICAgbmV4
dEZvbnQgPSBmb250OwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIG5leHRGb250RGF0YSA9
IG1fZm9udC5mb250RGF0YUZvckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNwICsgaW5kZXgs
IGN1cnIgLSBjcCAtIGluZGV4LCBuZXh0SXNTbWFsbENhcHMgPyBTbWFsbENhcHNWYXJpYW50IDog
Tm9ybWFsVmFyaWFudCk7Ci0gICAgICAgICAgICBpZiAoIW5leHRGb250RGF0YSkKKyAgICAgICAg
ICAgIG5leHRGb250ID0gbV9mb250LmZvbnRGb3JDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShj
cCArIGluZGV4LCBjdXJyIC0gY3AgLSBpbmRleCwgbmV4dElzU21hbGxDYXBzID8gU21hbGxDYXBz
VmFyaWFudCA6IE5vcm1hbFZhcmlhbnQpOworICAgICAgICAgICAgaWYgKCFuZXh0Rm9udCkKICAg
ICAgICAgICAgICAgICBuZXh0SXNNaXNzaW5nR2x5cGggPSB0cnVlOwogICAgICAgICB9CiAKLSAg
ICAgICAgaWYgKG5leHRGb250RGF0YSAhPSBmb250RGF0YSB8fCBuZXh0SXNNaXNzaW5nR2x5cGgg
IT0gaXNNaXNzaW5nR2x5cGgpIHsKKyAgICAgICAgaWYgKG5leHRGb250ICE9IGZvbnQgfHwgbmV4
dElzTWlzc2luZ0dseXBoICE9IGlzTWlzc2luZ0dseXBoKSB7CiAgICAgICAgICAgICBpbnQgaXRl
bVN0YXJ0ID0gc3RhdGljX2Nhc3Q8aW50PihpbmRleE9mRm9udFRyYW5zaXRpb24pOwogICAgICAg
ICAgICAgaW50IGl0ZW1MZW5ndGggPSBpbmRleCAtIGluZGV4T2ZGb250VHJhbnNpdGlvbjsKLSAg
ICAgICAgICAgIGNvbGxlY3RDb21wbGV4VGV4dFJ1bnNGb3JDaGFyYWN0ZXJzKChpc1NtYWxsQ2Fw
cyA/IG1fc21hbGxDYXBzQnVmZmVyLmRhdGEoKSA6IGNwKSArIGl0ZW1TdGFydCwgaXRlbUxlbmd0
aCwgaXRlbVN0YXJ0LCAhaXNNaXNzaW5nR2x5cGggPyBmb250RGF0YSA6IDApOworICAgICAgICAg
ICAgY29sbGVjdENvbXBsZXhUZXh0UnVuc0ZvckNoYXJhY3RlcnMoKGlzU21hbGxDYXBzID8gbV9z
bWFsbENhcHNCdWZmZXIuZGF0YSgpIDogY3ApICsgaXRlbVN0YXJ0LCBpdGVtTGVuZ3RoLCBpdGVt
U3RhcnQsICFpc01pc3NpbmdHbHlwaCA/IGZvbnQgOiAwKTsKICAgICAgICAgICAgIGluZGV4T2ZG
b250VHJhbnNpdGlvbiA9IGluZGV4OwogICAgICAgICB9CiAgICAgfQpAQCAtMzc2LDcgKzM3Niw3
IEBAIHZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpjb2xsZWN0Q29tcGwKICAgICBpbnQgaXRl
bUxlbmd0aCA9IG1fZW5kIC0gaW5kZXhPZkZvbnRUcmFuc2l0aW9uOwogICAgIGlmIChpdGVtTGVu
Z3RoKSB7CiAgICAgICAgIGludCBpdGVtU3RhcnQgPSBpbmRleE9mRm9udFRyYW5zaXRpb247Ci0g
ICAgICAgIGNvbGxlY3RDb21wbGV4VGV4dFJ1bnNGb3JDaGFyYWN0ZXJzKChuZXh0SXNTbWFsbENh
cHMgPyBtX3NtYWxsQ2Fwc0J1ZmZlci5kYXRhKCkgOiBjcCkgKyBpdGVtU3RhcnQsIGl0ZW1MZW5n
dGgsIGl0ZW1TdGFydCwgIW5leHRJc01pc3NpbmdHbHlwaCA/IG5leHRGb250RGF0YSA6IDApOwor
ICAgICAgICBjb2xsZWN0Q29tcGxleFRleHRSdW5zRm9yQ2hhcmFjdGVycygobmV4dElzU21hbGxD
YXBzID8gbV9zbWFsbENhcHNCdWZmZXIuZGF0YSgpIDogY3ApICsgaXRlbVN0YXJ0LCBpdGVtTGVu
Z3RoLCBpdGVtU3RhcnQsICFuZXh0SXNNaXNzaW5nR2x5cGggPyBuZXh0Rm9udCA6IDApOwogICAg
IH0KIAogICAgIGlmICghbV9ydW4ubHRyKCkpCkBAIC00NjksNyArNDY5LDcgQEAgdW5zaWduZWQg
Q29tcGxleFRleHRDb250cm9sbGVyOjppbmNyZW1lbgogICAgIHJldHVybiBpbmRleE9mQ3VycmVu
dFJ1bihsZWZ0bW9zdEdseXBoKTsKIH0KIAotdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmFk
dmFuY2UodW5zaWduZWQgb2Zmc2V0LCBHbHlwaEJ1ZmZlciogZ2x5cGhCdWZmZXIsIEdseXBoSXRl
cmF0aW9uU3R5bGUgaXRlcmF0aW9uU3R5bGUsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEq
PiogZmFsbGJhY2tGb250cykKK3ZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjphZHZhbmNlKHVu
c2lnbmVkIG9mZnNldCwgR2x5cGhCdWZmZXIqIGdseXBoQnVmZmVyLCBHbHlwaEl0ZXJhdGlvblN0
eWxlIGl0ZXJhdGlvblN0eWxlLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cykK
IHsKICAgICBpZiAoc3RhdGljX2Nhc3Q8aW50PihvZmZzZXQpID4gbV9lbmQpCiAgICAgICAgIG9m
ZnNldCA9IG1fZW5kOwpAQCAtNDk0LDggKzQ5NCw4IEBAIHZvaWQgQ29tcGxleFRleHRDb250cm9s
bGVyOjphZHZhbmNlKHVuc2kKICAgICAgICAgc2l6ZV90IGdseXBoQ291bnQgPSBjb21wbGV4VGV4
dFJ1bi5nbHlwaENvdW50KCk7CiAgICAgICAgIHVuc2lnbmVkIGcgPSBsdHIgPyBtX2dseXBoSW5D
dXJyZW50UnVuIDogZ2x5cGhDb3VudCAtIDEgLSBtX2dseXBoSW5DdXJyZW50UnVuOwogICAgICAg
ICB1bnNpZ25lZCBrID0gbGVmdG1vc3RHbHlwaCArIGc7Ci0gICAgICAgIGlmIChmYWxsYmFja0Zv
bnRzICYmICZjb21wbGV4VGV4dFJ1bi5mb250RGF0YSgpICE9ICZtX2ZvbnQucHJpbWFyeUZvbnRE
YXRhKCkpCi0gICAgICAgICAgICBmYWxsYmFja0ZvbnRzLT5hZGQoJmNvbXBsZXhUZXh0UnVuLmZv
bnREYXRhKCkpOworICAgICAgICBpZiAoZmFsbGJhY2tGb250cyAmJiAmY29tcGxleFRleHRSdW4u
Zm9udCgpICE9ICZtX2ZvbnQucHJpbWFyeUZvbnQoKSkKKyAgICAgICAgICAgIGZhbGxiYWNrRm9u
dHMtPmFkZCgmY29tcGxleFRleHRSdW4uZm9udCgpKTsKIAogICAgICAgICAvLyBXZSBtdXN0IHN0
b3JlIHRoZSBpbml0aWFsIGFkdmFuY2UgZm9yIHRoZSBmaXJzdCBnbHlwaCB3ZSBhcmUgZ29pbmcg
dG8gZHJhdy4KICAgICAgICAgLy8gV2hlbiBsZWZ0bW9zdEdseXBoIGlzIDAsIGl0IHJlcHJlc2Vu
dHMgdGhlIGZpcnN0IGdseXBoIHRvIGRyYXcsIHRha2luZyBpbnRvCkBAIC01MjAsNyArNTIwLDcg
QEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmFkdmFuY2UodW5zaQogICAgICAgICAgICAg
ICAgIHJldHVybjsKIAogICAgICAgICAgICAgaWYgKGdseXBoQnVmZmVyICYmICFtX2NoYXJhY3Rl
ckluQ3VycmVudEdseXBoKQotICAgICAgICAgICAgICAgIGdseXBoQnVmZmVyLT5hZGQobV9hZGp1
c3RlZEdseXBoc1trXSwgJmNvbXBsZXhUZXh0UnVuLmZvbnREYXRhKCksIGFkanVzdGVkQWR2YW5j
ZSwgY29tcGxleFRleHRSdW4uaW5kZXhBdChtX2dseXBoSW5DdXJyZW50UnVuKSk7CisgICAgICAg
ICAgICAgICAgZ2x5cGhCdWZmZXItPmFkZChtX2FkanVzdGVkR2x5cGhzW2tdLCAmY29tcGxleFRl
eHRSdW4uZm9udCgpLCBhZGp1c3RlZEFkdmFuY2UsIGNvbXBsZXhUZXh0UnVuLmluZGV4QXQobV9n
bHlwaEluQ3VycmVudFJ1bikpOwogCiAgICAgICAgICAgICB1bnNpZ25lZCBvbGRDaGFyYWN0ZXJJ
bkN1cnJlbnRHbHlwaCA9IG1fY2hhcmFjdGVySW5DdXJyZW50R2x5cGg7CiAgICAgICAgICAgICBt
X2NoYXJhY3RlckluQ3VycmVudEdseXBoID0gc3RkOjptaW4obV9jdXJyZW50Q2hhcmFjdGVyIC0g
Y29tcGxleFRleHRSdW4uc3RyaW5nTG9jYXRpb24oKSwgZ2x5cGhFbmRPZmZzZXQpIC0gZ2x5cGhT
dGFydE9mZnNldDsKQEAgLTU2Niw5ICs1NjYsOSBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxl
cjo6YWRqdXN0R2x5cGhzCiAgICAgZm9yIChzaXplX3QgciA9IDA7IHIgPCBydW5Db3VudDsgKyty
KSB7CiAgICAgICAgIENvbXBsZXhUZXh0UnVuJiBjb21wbGV4VGV4dFJ1biA9ICptX2NvbXBsZXhU
ZXh0UnVuc1tyXTsKICAgICAgICAgdW5zaWduZWQgZ2x5cGhDb3VudCA9IGNvbXBsZXhUZXh0UnVu
LmdseXBoQ291bnQoKTsKLSAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEmIGZvbnREYXRhID0g
Y29tcGxleFRleHRSdW4uZm9udERhdGEoKTsKKyAgICAgICAgY29uc3QgRm9udCYgZm9udCA9IGNv
bXBsZXhUZXh0UnVuLmZvbnQoKTsKICNpZiBQTEFURk9STShJT1MpCi0gICAgICAgIGJvb2wgaXNF
bW9qaSA9IGZvbnREYXRhLnBsYXRmb3JtRGF0YSgpLm1faXNFbW9qaTsKKyAgICAgICAgYm9vbCBp
c0Vtb2ppID0gZm9udC5wbGF0Zm9ybURhdGEoKS5tX2lzRW1vamk7CiAjZW5kaWYKIAogICAgICAg
ICAvLyBSZXByZXNlbnQgdGhlIGluaXRpYWwgYWR2YW5jZSBmb3IgYSB0ZXh0IHJ1biBieSBhZGp1
c3RpbmcgdGhlIGFkdmFuY2UKQEAgLTU4OCw4ICs1ODgsOCBAQCB2b2lkIENvbXBsZXhUZXh0Q29u
dHJvbGxlcjo6YWRqdXN0R2x5cGhzCiAgICAgICAgIGNvbnN0IENHU2l6ZSogYWR2YW5jZXMgPSBj
b21wbGV4VGV4dFJ1bi5hZHZhbmNlcygpOwogCiAgICAgICAgIGJvb2wgbGFzdFJ1biA9IHIgKyAx
ID09IHJ1bkNvdW50OwotICAgICAgICBib29sIHJvdW5kc0FkdmFuY2VzID0gIW1fZm9udC5pc1By
aW50ZXJGb250KCkgJiYgZm9udERhdGEucGxhdGZvcm1EYXRhKCkucm91bmRzR2x5cGhBZHZhbmNl
cygpOwotICAgICAgICBmbG9hdCBzcGFjZVdpZHRoID0gZm9udERhdGEuc3BhY2VXaWR0aCgpIC0g
Zm9udERhdGEuc3ludGhldGljQm9sZE9mZnNldCgpOworICAgICAgICBib29sIHJvdW5kc0FkdmFu
Y2VzID0gIW1fZm9udC5pc1ByaW50ZXJGb250KCkgJiYgZm9udC5wbGF0Zm9ybURhdGEoKS5yb3Vu
ZHNHbHlwaEFkdmFuY2VzKCk7CisgICAgICAgIGZsb2F0IHNwYWNlV2lkdGggPSBmb250LnNwYWNl
V2lkdGgoKSAtIGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpOwogICAgICAgICBDR0Zsb2F0IHJv
dW5kZWRTcGFjZVdpZHRoID0gcm91bmRDR0Zsb2F0KHNwYWNlV2lkdGgpOwogICAgICAgICBjb25z
dCBVQ2hhciogY3AgPSBjb21wbGV4VGV4dFJ1bi5jaGFyYWN0ZXJzKCk7CiAgICAgICAgIENHUG9p
bnQgZ2x5cGhPcmlnaW4gPSBDR1BvaW50WmVybzsKQEAgLTYxNiwzMyArNjE2LDMzIEBAIHZvaWQg
Q29tcGxleFRleHRDb250cm9sbGVyOjphZGp1c3RHbHlwaHMKICAgICAgICAgICAgICAgICBuZXh0
Q2ggPSAqKG1fY29tcGxleFRleHRSdW5zW3IgKyAxXS0+Y2hhcmFjdGVycygpICsgbV9jb21wbGV4
VGV4dFJ1bnNbciArIDFdLT5pbmRleEF0KDApKTsKIAogICAgICAgICAgICAgYm9vbCB0cmVhdEFz
U3BhY2UgPSBGb250Q2FzY2FkZTo6dHJlYXRBc1NwYWNlKGNoKTsKLSAgICAgICAgICAgIENHR2x5
cGggZ2x5cGggPSB0cmVhdEFzU3BhY2UgPyBmb250RGF0YS5zcGFjZUdseXBoKCkgOiBnbHlwaHNb
aV07CisgICAgICAgICAgICBDR0dseXBoIGdseXBoID0gdHJlYXRBc1NwYWNlID8gZm9udC5zcGFj
ZUdseXBoKCkgOiBnbHlwaHNbaV07CiAgICAgICAgICAgICBDR1NpemUgYWR2YW5jZSA9IHRyZWF0
QXNTcGFjZSA/IENHU2l6ZU1ha2Uoc3BhY2VXaWR0aCwgYWR2YW5jZXNbaV0uaGVpZ2h0KSA6IGFk
dmFuY2VzW2ldOwogI2lmIFBMQVRGT1JNKElPUykKICAgICAgICAgICAgIGlmIChpc0Vtb2ppICYm
IGFkdmFuY2Uud2lkdGgpCi0gICAgICAgICAgICAgICAgYWR2YW5jZS53aWR0aCA9IGZvbnREYXRh
LndpZHRoRm9yR2x5cGgoZ2x5cGgpOworICAgICAgICAgICAgICAgIGFkdmFuY2Uud2lkdGggPSBm
b250LndpZHRoRm9yR2x5cGgoZ2x5cGgpOwogI2VuZGlmCiAKICAgICAgICAgICAgIGlmIChjaCA9
PSAnXHQnICYmIG1fcnVuLmFsbG93VGFicygpKQotICAgICAgICAgICAgICAgIGFkdmFuY2Uud2lk
dGggPSBtX2ZvbnQudGFiV2lkdGgoZm9udERhdGEsIG1fcnVuLnRhYlNpemUoKSwgbV9ydW4ueFBv
cygpICsgbV90b3RhbFdpZHRoICsgd2lkdGhTaW5jZUxhc3RDb21taXQpOworICAgICAgICAgICAg
ICAgIGFkdmFuY2Uud2lkdGggPSBtX2ZvbnQudGFiV2lkdGgoZm9udCwgbV9ydW4udGFiU2l6ZSgp
LCBtX3J1bi54UG9zKCkgKyBtX3RvdGFsV2lkdGggKyB3aWR0aFNpbmNlTGFzdENvbW1pdCk7CiAg
ICAgICAgICAgICBlbHNlIGlmIChGb250Q2FzY2FkZTo6dHJlYXRBc1plcm9XaWR0aFNwYWNlKGNo
KSAmJiAhdHJlYXRBc1NwYWNlKSB7CiAgICAgICAgICAgICAgICAgYWR2YW5jZS53aWR0aCA9IDA7
Ci0gICAgICAgICAgICAgICAgZ2x5cGggPSBmb250RGF0YS5zcGFjZUdseXBoKCk7CisgICAgICAg
ICAgICAgICAgZ2x5cGggPSBmb250LnNwYWNlR2x5cGgoKTsKICAgICAgICAgICAgIH0KIAogICAg
ICAgICAgICAgZmxvYXQgcm91bmRlZEFkdmFuY2VXaWR0aCA9IHJvdW5kZihhZHZhbmNlLndpZHRo
KTsKICAgICAgICAgICAgIGlmIChyb3VuZHNBZHZhbmNlcykKICAgICAgICAgICAgICAgICBhZHZh
bmNlLndpZHRoID0gcm91bmRlZEFkdmFuY2VXaWR0aDsKIAotICAgICAgICAgICAgYWR2YW5jZS53
aWR0aCArPSBmb250RGF0YS5zeW50aGV0aWNCb2xkT2Zmc2V0KCk7CisgICAgICAgICAgICBhZHZh
bmNlLndpZHRoICs9IGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpOwogCiAgCiAgICAgICAgICAg
ICAvLyBXZSBzcGVjaWFsIGNhc2Ugc3BhY2VzIGluIHR3byB3YXlzIHdoZW4gYXBwbHlpbmcgd29y
ZCByb3VuZGluZy4gCiAgICAgICAgICAgICAvLyBGaXJzdCwgd2Ugcm91bmQgc3BhY2VzIHRvIGFu
IGFkanVzdGVkIHdpZHRoIGluIGFsbCBmb250cy4gCiAgICAgICAgICAgICAvLyBTZWNvbmQsIGlu
IGZpeGVkLXBpdGNoIGZvbnRzIHdlIGVuc3VyZSB0aGF0IGFsbCBnbHlwaHMgdGhhdCAKICAgICAg
ICAgICAgIC8vIG1hdGNoIHRoZSB3aWR0aCBvZiB0aGUgc3BhY2UgZ2x5cGggaGF2ZSB0aGUgc2Ft
ZSB3aWR0aCBhcyB0aGUgc3BhY2UgZ2x5cGguIAotICAgICAgICAgICAgaWYgKG1fcnVuLmFwcGx5
V29yZFJvdW5kaW5nKCkgJiYgcm91bmRlZEFkdmFuY2VXaWR0aCA9PSByb3VuZGVkU3BhY2VXaWR0
aCAmJiAoZm9udERhdGEucGl0Y2goKSA9PSBGaXhlZFBpdGNoIHx8IGdseXBoID09IGZvbnREYXRh
LnNwYWNlR2x5cGgoKSkpCi0gICAgICAgICAgICAgICAgYWR2YW5jZS53aWR0aCA9IGZvbnREYXRh
LmFkanVzdGVkU3BhY2VXaWR0aCgpOworICAgICAgICAgICAgaWYgKG1fcnVuLmFwcGx5V29yZFJv
dW5kaW5nKCkgJiYgcm91bmRlZEFkdmFuY2VXaWR0aCA9PSByb3VuZGVkU3BhY2VXaWR0aCAmJiAo
Zm9udC5waXRjaCgpID09IEZpeGVkUGl0Y2ggfHwgZ2x5cGggPT0gZm9udC5zcGFjZUdseXBoKCkp
KQorICAgICAgICAgICAgICAgIGFkdmFuY2Uud2lkdGggPSBmb250LmFkanVzdGVkU3BhY2VXaWR0
aCgpOwogCiAgICAgICAgICAgICBpZiAoaGFzRXh0cmFTcGFjaW5nKSB7CiAgICAgICAgICAgICAg
ICAgLy8gSWYgd2UncmUgYSBnbHlwaCB3aXRoIGFuIGFkdmFuY2UsIGdvIGFoZWFkIGFuZCBhZGQg
aW4gbGV0dGVyLXNwYWNpbmcuCkBAIC03MTcsNyArNzE3LDcgQEAgdm9pZCBDb21wbGV4VGV4dENv
bnRyb2xsZXI6OmFkanVzdEdseXBocwogICAgICAgICAgICAgbV9hZGp1c3RlZEFkdmFuY2VzLmFw
cGVuZChhZHZhbmNlKTsKICAgICAgICAgICAgIG1fYWRqdXN0ZWRHbHlwaHMuYXBwZW5kKGdseXBo
KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgRmxvYXRSZWN0IGdseXBoQm91bmRzID0gZm9u
dERhdGEuYm91bmRzRm9yR2x5cGgoZ2x5cGgpOworICAgICAgICAgICAgRmxvYXRSZWN0IGdseXBo
Qm91bmRzID0gZm9udC5ib3VuZHNGb3JHbHlwaChnbHlwaCk7CiAgICAgICAgICAgICBnbHlwaEJv
dW5kcy5tb3ZlKGdseXBoT3JpZ2luLngsIGdseXBoT3JpZ2luLnkpOwogICAgICAgICAgICAgbV9t
aW5HbHlwaEJvdW5kaW5nQm94WCA9IHN0ZDo6bWluKG1fbWluR2x5cGhCb3VuZGluZ0JveFgsIGds
eXBoQm91bmRzLngoKSk7CiAgICAgICAgICAgICBtX21heEdseXBoQm91bmRpbmdCb3hYID0gc3Rk
OjptYXgobV9tYXhHbHlwaEJvdW5kaW5nQm94WCwgZ2x5cGhCb3VuZHMubWF4WCgpKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xs
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMv
Q29tcGxleFRleHRDb250cm9sbGVyLmgJKHJldmlzaW9uIDE3ODUxMCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCB0eXBlZGVmIGNvbnN0IHN0cnVjdCBfX0NUTGluZSAq
IENUTGluZVJlCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZvbnRDYXNjYWRlOwotY2xh
c3MgU2ltcGxlRm9udERhdGE7CitjbGFzcyBGb250OwogY2xhc3MgVGV4dFJ1bjsKIAogZW51bSBH
bHlwaEl0ZXJhdGlvblN0eWxlIHsgSW5jbHVkZVBhcnRpYWxHbHlwaHMsIEJ5V2hvbGVHbHlwaHMg
fTsKQEAgLTUwLDEwICs1MCwxMCBAQCBlbnVtIEdseXBoSXRlcmF0aW9uU3R5bGUgeyBJbmNsdWRl
UGFydGlhCiAvLyBjb21wbGV4IHNjcmlwdHMgb24gT1MgWC4KIGNsYXNzIENvbXBsZXhUZXh0Q29u
dHJvbGxlciB7CiBwdWJsaWM6Ci0gICAgQ29tcGxleFRleHRDb250cm9sbGVyKGNvbnN0IEZvbnRD
YXNjYWRlKiwgY29uc3QgVGV4dFJ1biYsIGJvb2wgbWF5VXNlTmF0dXJhbFdyaXRpbmdEaXJlY3Rp
b24gPSBmYWxzZSwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRz
ID0gMCwgYm9vbCBmb3JUZXh0RW1waGFzaXMgPSBmYWxzZSk7CisgICAgQ29tcGxleFRleHRDb250
cm9sbGVyKGNvbnN0IEZvbnRDYXNjYWRlKiwgY29uc3QgVGV4dFJ1biYsIGJvb2wgbWF5VXNlTmF0
dXJhbFdyaXRpbmdEaXJlY3Rpb24gPSBmYWxzZSwgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxi
YWNrRm9udHMgPSAwLCBib29sIGZvclRleHRFbXBoYXNpcyA9IGZhbHNlKTsKIAogICAgIC8vIEFk
dmFuY2UgYW5kIGVtaXQgZ2x5cGhzIHVwIHRvIHRoZSBzcGVjaWZpZWQgY2hhcmFjdGVyLgotICAg
IHZvaWQgYWR2YW5jZSh1bnNpZ25lZCB0bywgR2x5cGhCdWZmZXIqID0gMCwgR2x5cGhJdGVyYXRp
b25TdHlsZSA9IEluY2x1ZGVQYXJ0aWFsR2x5cGhzLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnRE
YXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwKTsKKyAgICB2b2lkIGFkdmFuY2UodW5zaWduZWQgdG8s
IEdseXBoQnVmZmVyKiA9IDAsIEdseXBoSXRlcmF0aW9uU3R5bGUgPSBJbmNsdWRlUGFydGlhbEds
eXBocywgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMgPSAwKTsKIAogICAgIC8v
IENvbXB1dGUgdGhlIGNoYXJhY3RlciBvZmZzZXQgZm9yIGEgZ2l2ZW4geCBjb29yZGluYXRlLgog
ICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbihmbG9hdCB4LCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5
cGhzKTsKQEAgLTczLDE4ICs3MywxOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGNsYXNzIENv
bXBsZXhUZXh0UnVuIDogcHVibGljIFJlZkNvdW50ZWQ8Q29tcGxleFRleHRSdW4+IHsKICAgICBw
dWJsaWM6Ci0gICAgICAgIHN0YXRpYyBSZWY8Q29tcGxleFRleHRSdW4+IGNyZWF0ZShDVFJ1blJl
ZiBjdFJ1biwgY29uc3QgU2ltcGxlRm9udERhdGEmIGZvbnREYXRhLCBjb25zdCBVQ2hhciogY2hh
cmFjdGVycywgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24sIHNpemVfdCBzdHJpbmdMZW5ndGgsIENG
UmFuZ2UgcnVuUmFuZ2UpCisgICAgICAgIHN0YXRpYyBSZWY8Q29tcGxleFRleHRSdW4+IGNyZWF0
ZShDVFJ1blJlZiBjdFJ1biwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3Rl
cnMsIHVuc2lnbmVkIHN0cmluZ0xvY2F0aW9uLCBzaXplX3Qgc3RyaW5nTGVuZ3RoLCBDRlJhbmdl
IHJ1blJhbmdlKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBD
b21wbGV4VGV4dFJ1bihjdFJ1biwgZm9udERhdGEsIGNoYXJhY3RlcnMsIHN0cmluZ0xvY2F0aW9u
LCBzdHJpbmdMZW5ndGgsIHJ1blJhbmdlKSk7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBDb21wbGV4VGV4dFJ1bihjdFJ1biwgZm9udCwgY2hhcmFjdGVycywgc3RyaW5nTG9jYXRp
b24sIHN0cmluZ0xlbmd0aCwgcnVuUmFuZ2UpKTsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRp
YyBSZWY8Q29tcGxleFRleHRSdW4+IGNyZWF0ZShjb25zdCBTaW1wbGVGb250RGF0YSYgZm9udERh
dGEsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBzdHJpbmdMb2NhdGlvbiwgc2l6
ZV90IHN0cmluZ0xlbmd0aCwgYm9vbCBsdHIpCisgICAgICAgIHN0YXRpYyBSZWY8Q29tcGxleFRl
eHRSdW4+IGNyZWF0ZShjb25zdCBGb250JiBmb250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywg
dW5zaWduZWQgc3RyaW5nTG9jYXRpb24sIHNpemVfdCBzdHJpbmdMZW5ndGgsIGJvb2wgbHRyKQog
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDb21wbGV4VGV4dFJ1
bihmb250RGF0YSwgY2hhcmFjdGVycywgc3RyaW5nTG9jYXRpb24sIHN0cmluZ0xlbmd0aCwgbHRy
KSk7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDb21wbGV4VGV4dFJ1bihmb250
LCBjaGFyYWN0ZXJzLCBzdHJpbmdMb2NhdGlvbiwgc3RyaW5nTGVuZ3RoLCBsdHIpKTsKICAgICAg
ICAgfQogCiAgICAgICAgIHVuc2lnbmVkIGdseXBoQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2ds
eXBoQ291bnQ7IH0KLSAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEmIGZvbnREYXRhKCkgY29u
c3QgeyByZXR1cm4gbV9mb250RGF0YTsgfQorICAgICAgICBjb25zdCBGb250JiBmb250KCkgY29u
c3QgeyByZXR1cm4gbV9mb250OyB9CiAgICAgICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzKCkg
Y29uc3QgeyByZXR1cm4gbV9jaGFyYWN0ZXJzOyB9CiAgICAgICAgIHVuc2lnbmVkIHN0cmluZ0xv
Y2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmdMb2NhdGlvbjsgfQogICAgICAgICBzaXpl
X3Qgc3RyaW5nTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmdMZW5ndGg7IH0KQEAgLTEw
MCwxMSArMTAwLDExIEBAIHByaXZhdGU6CiAgICAgICAgIHZvaWQgc2V0SXNOb25Nb25vdG9uaWMo
KTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIENvbXBsZXhUZXh0UnVuKENUUnVuUmVmLCBjb25z
dCBTaW1wbGVGb250RGF0YSYsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBzdHJp
bmdMb2NhdGlvbiwgc2l6ZV90IHN0cmluZ0xlbmd0aCwgQ0ZSYW5nZSBydW5SYW5nZSk7Ci0gICAg
ICAgIENvbXBsZXhUZXh0UnVuKGNvbnN0IFNpbXBsZUZvbnREYXRhJiwgY29uc3QgVUNoYXIqIGNo
YXJhY3RlcnMsIHVuc2lnbmVkIHN0cmluZ0xvY2F0aW9uLCBzaXplX3Qgc3RyaW5nTGVuZ3RoLCBi
b29sIGx0cik7CisgICAgICAgIENvbXBsZXhUZXh0UnVuKENUUnVuUmVmLCBjb25zdCBGb250Jiwg
Y29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIHN0cmluZ0xvY2F0aW9uLCBzaXplX3Qg
c3RyaW5nTGVuZ3RoLCBDRlJhbmdlIHJ1blJhbmdlKTsKKyAgICAgICAgQ29tcGxleFRleHRSdW4o
Y29uc3QgRm9udCYsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBzdHJpbmdMb2Nh
dGlvbiwgc2l6ZV90IHN0cmluZ0xlbmd0aCwgYm9vbCBsdHIpOwogCiAgICAgICAgIHVuc2lnbmVk
IG1fZ2x5cGhDb3VudDsKLSAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEmIG1fZm9udERhdGE7
CisgICAgICAgIGNvbnN0IEZvbnQmIG1fZm9udDsKICAgICAgICAgY29uc3QgVUNoYXIqIG1fY2hh
cmFjdGVyczsKICAgICAgICAgdW5zaWduZWQgbV9zdHJpbmdMb2NhdGlvbjsKICAgICAgICAgc2l6
ZV90IG1fc3RyaW5nTGVuZ3RoOwpAQCAtMTI3LDcgKzEyNyw3IEBAIHByaXZhdGU6CiAKICAgICB2
b2lkIGNvbGxlY3RDb21wbGV4VGV4dFJ1bnMoKTsKIAotICAgIHZvaWQgY29sbGVjdENvbXBsZXhU
ZXh0UnVuc0ZvckNoYXJhY3RlcnMoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2ln
bmVkIHN0cmluZ0xvY2F0aW9uLCBjb25zdCBTaW1wbGVGb250RGF0YSopOworICAgIHZvaWQgY29s
bGVjdENvbXBsZXhUZXh0UnVuc0ZvckNoYXJhY3RlcnMoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBs
ZW5ndGgsIHVuc2lnbmVkIHN0cmluZ0xvY2F0aW9uLCBjb25zdCBGb250Kik7CiAgICAgdm9pZCBh
ZGp1c3RHbHlwaHNBbmRBZHZhbmNlcygpOwogCiAgICAgdW5zaWduZWQgaW5kZXhPZkN1cnJlbnRS
dW4odW5zaWduZWQmIGxlZnRtb3N0R2x5cGgpOwpAQCAtMTY5LDcgKzE2OSw3IEBAIHByaXZhdGU6
CiAgICAgZmxvYXQgbV9sZWFkaW5nRXhwYW5zaW9uOwogICAgIGJvb2wgbV9hZnRlckV4cGFuc2lv
bjsKIAotICAgIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogbV9mYWxsYmFja0ZvbnRz
OworICAgIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBtX2ZhbGxiYWNrRm9udHM7CiAKICAgICBmbG9h
dCBtX21pbkdseXBoQm91bmRpbmdCb3hYOwogICAgIGZsb2F0IG1fbWF4R2x5cGhCb3VuZGluZ0Jv
eFg7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRl
eHRDb250cm9sbGVyQ29yZVRleHQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tCShyZXZp
c2lvbiAxNzg1MTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29t
cGxleFRleHRDb250cm9sbGVyQ29yZVRleHQubW0JKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYx
LDcgQEAgLSAoaWQpaW5pdFdpdGhGb250Oihjb25zdCBXZWJDb3JlOjpGb250QwogICAgIF9jaGFy
YWN0ZXIgPSBjaGFyYWN0ZXI7CiAKICAgICAvLyBCeSB0aGUgdGltZSBhIFdlYkNhc2NhZGVMaXN0
IGlzIHVzZWQsIHRoZSBGb250Q2FzY2FkZSBoYXMgYWxyZWFkeSBiZWVuIGFza2VkIHRvIHJlYWxp
emUgYWxsIG9mIGl0cwotICAgIC8vIEZvbnREYXRhLCBzbyB0aGlzIGxvb3AgZG9lcyBub3QgaGl0
IHRoZSBGb250Q2FjaGUuCisgICAgLy8gRm9udHMsIHNvIHRoaXMgbG9vcCBkb2VzIG5vdCBoaXQg
dGhlIEZvbnRDYWNoZS4KICAgICB3aGlsZSAoIV9mb250LT5mYWxsYmFja1Jhbmdlc0F0KF9jb3Vu
dCkuaXNOdWxsKCkpCiAgICAgICAgIF9jb3VudCsrOwogCkBAIC04MiwxMCArODIsMTAgQEAgLSAo
aWQpb2JqZWN0QXRJbmRleDooTlNVSW50ZWdlcilpbmRleAogICAgIH0gZWxzZQogICAgICAgICBf
Zm9udERlc2NyaXB0b3JzLmdyb3coaW5kZXggKyAxKTsKIAotICAgIGNvbnN0IFdlYkNvcmU6OlNp
bXBsZUZvbnREYXRhKiBzaW1wbGVGb250RGF0YSA9IF9mb250LT5mYWxsYmFja1Jhbmdlc0F0KGlu
ZGV4KS5mb250RGF0YUZvckNoYXJhY3RlcihfY2hhcmFjdGVyKTsKLSAgICBpZiAoIXNpbXBsZUZv
bnREYXRhKQotICAgICAgICBzaW1wbGVGb250RGF0YSA9ICZfZm9udC0+ZmFsbGJhY2tSYW5nZXNB
dChpbmRleCkuZm9udERhdGFGb3JGaXJzdFJhbmdlKCk7Ci0gICAgZm9udERlc2NyaXB0b3IgPSBD
VEZvbnRDb3B5Rm9udERlc2NyaXB0b3Ioc2ltcGxlRm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLmN0
Rm9udCgpKTsKKyAgICBjb25zdCBXZWJDb3JlOjpGb250KiBmb250ID0gX2ZvbnQtPmZhbGxiYWNr
UmFuZ2VzQXQoaW5kZXgpLmZvbnRGb3JDaGFyYWN0ZXIoX2NoYXJhY3Rlcik7CisgICAgaWYgKCFm
b250KQorICAgICAgICBmb250ID0gJl9mb250LT5mYWxsYmFja1Jhbmdlc0F0KGluZGV4KS5mb250
Rm9yRmlyc3RSYW5nZSgpOworICAgIGZvbnREZXNjcmlwdG9yID0gQ1RGb250Q29weUZvbnREZXNj
cmlwdG9yKGZvbnQtPnBsYXRmb3JtRGF0YSgpLmN0Rm9udCgpKTsKICAgICBfZm9udERlc2NyaXB0
b3JzW2luZGV4XSA9IGFkb3B0Q0YoZm9udERlc2NyaXB0b3IpOwogICAgIHJldHVybiAoaWQpZm9u
dERlc2NyaXB0b3I7CiB9CkBAIC05NCw4ICs5NCw4IEBAIC0gKGlkKW9iamVjdEF0SW5kZXg6KE5T
VUludGVnZXIpaW5kZXgKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1Db21wbGV4VGV4dENvbnRy
b2xsZXI6OkNvbXBsZXhUZXh0UnVuOjpDb21wbGV4VGV4dFJ1bihDVFJ1blJlZiBjdFJ1biwgY29u
c3QgU2ltcGxlRm9udERhdGEmIGZvbnREYXRhLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5z
aWduZWQgc3RyaW5nTG9jYXRpb24sIHNpemVfdCBzdHJpbmdMZW5ndGgsIENGUmFuZ2UgcnVuUmFu
Z2UpCi0gICAgOiBtX2ZvbnREYXRhKGZvbnREYXRhKQorQ29tcGxleFRleHRDb250cm9sbGVyOjpD
b21wbGV4VGV4dFJ1bjo6Q29tcGxleFRleHRSdW4oQ1RSdW5SZWYgY3RSdW4sIGNvbnN0IEZvbnQm
IGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBzdHJpbmdMb2NhdGlvbiwg
c2l6ZV90IHN0cmluZ0xlbmd0aCwgQ0ZSYW5nZSBydW5SYW5nZSkKKyAgICA6IG1fZm9udChmb250
KQogICAgICwgbV9jaGFyYWN0ZXJzKGNoYXJhY3RlcnMpCiAgICAgLCBtX3N0cmluZ0xvY2F0aW9u
KHN0cmluZ0xvY2F0aW9uKQogICAgICwgbV9zdHJpbmdMZW5ndGgoc3RyaW5nTGVuZ3RoKQpAQCAt
MTMwLDggKzEzMCw4IEBAIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRSdW46OkMK
IAogLy8gTWlzc2luZyBnbHlwaHMgcnVuIGNvbnN0cnVjdG9yLiBDb3JlIFRleHQgd2lsbCBub3Qg
Z2VuZXJhdGUgYSBydW4gb2YgbWlzc2luZyBnbHlwaHMsIGluc3RlYWQgZmFsbGluZyBiYWNrIG9u
CiAvLyBnbHlwaHMgZnJvbSBMYXN0UmVzb3J0LiBXZSB3YW50IHRvIHVzZSB0aGUgcHJpbWFyeSBm
b250J3MgbWlzc2luZyBnbHlwaCBpbiBvcmRlciB0byBtYXRjaCB0aGUgZmFzdCB0ZXh0IGNvZGUg
cGF0aC4KLUNvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRSdW46OkNvbXBsZXhUZXh0
UnVuKGNvbnN0IFNpbXBsZUZvbnREYXRhJiBmb250RGF0YSwgY29uc3QgVUNoYXIqIGNoYXJhY3Rl
cnMsIHVuc2lnbmVkIHN0cmluZ0xvY2F0aW9uLCBzaXplX3Qgc3RyaW5nTGVuZ3RoLCBib29sIGx0
cikKLSAgICA6IG1fZm9udERhdGEoZm9udERhdGEpCitDb21wbGV4VGV4dENvbnRyb2xsZXI6OkNv
bXBsZXhUZXh0UnVuOjpDb21wbGV4VGV4dFJ1bihjb25zdCBGb250JiBmb250LCBjb25zdCBVQ2hh
ciogY2hhcmFjdGVycywgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24sIHNpemVfdCBzdHJpbmdMZW5n
dGgsIGJvb2wgbHRyKQorICAgIDogbV9mb250KGZvbnQpCiAgICAgLCBtX2NoYXJhY3RlcnMoY2hh
cmFjdGVycykKICAgICAsIG1fc3RyaW5nTG9jYXRpb24oc3RyaW5nTG9jYXRpb24pCiAgICAgLCBt
X3N0cmluZ0xlbmd0aChzdHJpbmdMZW5ndGgpCkBAIC0xNjMsNyArMTYzLDcgQEAgQ29tcGxleFRl
eHRDb250cm9sbGVyOjpDb21wbGV4VGV4dFJ1bjo6QwogICAgIC8vIFN5bnRoZXNpemUgYSBydW4g
b2YgbWlzc2luZyBnbHlwaHMuCiAgICAgbV9nbHlwaHNWZWN0b3IuZmlsbCgwLCBtX2dseXBoQ291
bnQpOwogICAgIG1fZ2x5cGhzID0gbV9nbHlwaHNWZWN0b3IuZGF0YSgpOwotICAgIG1fYWR2YW5j
ZXNWZWN0b3IuZmlsbChDR1NpemVNYWtlKG1fZm9udERhdGEud2lkdGhGb3JHbHlwaCgwKSwgMCks
IG1fZ2x5cGhDb3VudCk7CisgICAgbV9hZHZhbmNlc1ZlY3Rvci5maWxsKENHU2l6ZU1ha2UobV9m
b250LndpZHRoRm9yR2x5cGgoMCksIDApLCBtX2dseXBoQ291bnQpOwogICAgIG1fYWR2YW5jZXMg
PSBtX2FkdmFuY2VzVmVjdG9yLmRhdGEoKTsKIH0KIApAQCAtMTg0LDExICsxODQsMTEgQEAgc3Rh
dGljIGNvbnN0IFVuaUNoYXIqIHByb3ZpZGVTdHJpbmdBbmRBdAogICAgIHJldHVybiBpbmZvLT5j
cCArIHN0cmluZ0luZGV4OwogfQogCi12b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Y29sbGVj
dENvbXBsZXhUZXh0UnVuc0ZvckNoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNwLCB1bnNpZ25lZCBs
ZW5ndGgsIHVuc2lnbmVkIHN0cmluZ0xvY2F0aW9uLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9u
dERhdGEpCit2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Y29sbGVjdENvbXBsZXhUZXh0UnVu
c0ZvckNoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNwLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVk
IHN0cmluZ0xvY2F0aW9uLCBjb25zdCBGb250KiBmb250KQogewotICAgIGlmICghZm9udERhdGEp
IHsKKyAgICBpZiAoIWZvbnQpIHsKICAgICAgICAgLy8gQ3JlYXRlIGEgcnVuIG9mIG1pc3Npbmcg
Z2x5cGhzIGZyb20gdGhlIHByaW1hcnkgZm9udC4KLSAgICAgICAgbV9jb21wbGV4VGV4dFJ1bnMu
YXBwZW5kKENvbXBsZXhUZXh0UnVuOjpjcmVhdGUobV9mb250LnByaW1hcnlGb250RGF0YSgpLCBj
cCwgc3RyaW5nTG9jYXRpb24sIGxlbmd0aCwgbV9ydW4ubHRyKCkpKTsKKyAgICAgICAgbV9jb21w
bGV4VGV4dFJ1bnMuYXBwZW5kKENvbXBsZXhUZXh0UnVuOjpjcmVhdGUobV9mb250LnByaW1hcnlG
b250KCksIGNwLCBzdHJpbmdMb2NhdGlvbiwgbGVuZ3RoLCBtX3J1bi5sdHIoKSkpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCkBAIC0xOTYsMjYgKzE5NiwyNiBAQCB2b2lkIENvbXBsZXhUZXh0
Q29udHJvbGxlcjo6Y29sbGVjdENvbXBsCiAKICAgICBVQ2hhcjMyIGJhc2VDaGFyYWN0ZXIgPSAw
OwogICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHN0cmluZ0F0dHJpYnV0ZXM7Ci0gICAg
aWYgKGZvbnREYXRhID09IFNpbXBsZUZvbnREYXRhOjpzeXN0ZW1GYWxsYmFjaygpKSB7CisgICAg
aWYgKGZvbnQgPT0gRm9udDo6c3lzdGVtRmFsbGJhY2soKSkgewogICAgICAgICAvLyBGSVhNRTog
VGhpcyBjb2RlIHBhdGggZG9lcyBub3Qgc3VwcG9ydCBzbWFsbCBjYXBzLgogICAgICAgICBpc1N5
c3RlbUZhbGxiYWNrID0gdHJ1ZTsKIAogICAgICAgICBVMTZfR0VUKGNwLCAwLCAwLCBsZW5ndGgs
IGJhc2VDaGFyYWN0ZXIpOwotICAgICAgICBmb250RGF0YSA9IG1fZm9udC5mYWxsYmFja1Jhbmdl
c0F0KDApLmZvbnREYXRhRm9yQ2hhcmFjdGVyKGJhc2VDaGFyYWN0ZXIpOwotICAgICAgICBpZiAo
IWZvbnREYXRhKQotICAgICAgICAgICAgZm9udERhdGEgPSAmbV9mb250LmZhbGxiYWNrUmFuZ2Vz
QXQoMCkuZm9udERhdGFGb3JGaXJzdFJhbmdlKCk7CisgICAgICAgIGZvbnQgPSBtX2ZvbnQuZmFs
bGJhY2tSYW5nZXNBdCgwKS5mb250Rm9yQ2hhcmFjdGVyKGJhc2VDaGFyYWN0ZXIpOworICAgICAg
ICBpZiAoIWZvbnQpCisgICAgICAgICAgICBmb250ID0gJm1fZm9udC5mYWxsYmFja1Jhbmdlc0F0
KDApLmZvbnRGb3JGaXJzdFJhbmdlKCk7CiAKICAgICAgICAgUmV0YWluUHRyPFdlYkNhc2NhZGVM
aXN0PiBjYXNjYWRlTGlzdCA9IGFkb3B0TlMoW1tXZWJDYXNjYWRlTGlzdCBhbGxvY10gaW5pdFdp
dGhGb250OiZtX2ZvbnQgY2hhcmFjdGVyOmJhc2VDaGFyYWN0ZXJdKTsKIAotICAgICAgICBzdHJp
bmdBdHRyaWJ1dGVzID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxlQ29weShrQ0ZB
bGxvY2F0b3JEZWZhdWx0LCAwLCBmb250RGF0YS0+Z2V0Q0ZTdHJpbmdBdHRyaWJ1dGVzKG1fZm9u
dC50eXBlc2V0dGluZ0ZlYXR1cmVzKCksIGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5vcmllbnRh
dGlvbigpKSkpOworICAgICAgICBzdHJpbmdBdHRyaWJ1dGVzID0gYWRvcHRDRihDRkRpY3Rpb25h
cnlDcmVhdGVNdXRhYmxlQ29weShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwLCBmb250LT5nZXRDRlN0
cmluZ0F0dHJpYnV0ZXMobV9mb250LnR5cGVzZXR0aW5nRmVhdHVyZXMoKSwgZm9udC0+cGxhdGZv
cm1EYXRhKCkub3JpZW50YXRpb24oKSkpKTsKICAgICAgICAgc3RhdGljIGNvbnN0IHZvaWQqIGF0
dHJpYnV0ZUtleXNbXSA9IHsga0NURm9udENhc2NhZGVMaXN0QXR0cmlidXRlIH07CiAgICAgICAg
IGNvbnN0IHZvaWQqIHZhbHVlc1tdID0geyBjYXNjYWRlTGlzdC5nZXQoKSB9OwogICAgICAgICBS
ZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBhdHRyaWJ1dGVzID0gYWRvcHRDRihDRkRpY3Rpb25h
cnlDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgYXR0cmlidXRlS2V5cywgdmFsdWVzLCBzaXpl
b2YoYXR0cmlidXRlS2V5cykgLyBzaXplb2YoKmF0dHJpYnV0ZUtleXMpLCAma0NGVHlwZURpY3Rp
b25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CiAg
ICAgICAgIFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPiBmb250RGVzY3JpcHRvciA9IGFk
b3B0Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0ZVdpdGhBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMuZ2V0
KCkpKTsKLSAgICAgICAgUmV0YWluUHRyPENURm9udFJlZj4gZm9udFdpdGhDYXNjYWRlTGlzdCA9
IGFkb3B0Q0YoQ1RGb250Q3JlYXRlQ29weVdpdGhBdHRyaWJ1dGVzKGZvbnREYXRhLT5wbGF0Zm9y
bURhdGEoKS5jdEZvbnQoKSwgbV9mb250LnBpeGVsU2l6ZSgpLCAwLCBmb250RGVzY3JpcHRvci5n
ZXQoKSkpOworICAgICAgICBSZXRhaW5QdHI8Q1RGb250UmVmPiBmb250V2l0aENhc2NhZGVMaXN0
ID0gYWRvcHRDRihDVEZvbnRDcmVhdGVDb3B5V2l0aEF0dHJpYnV0ZXMoZm9udC0+cGxhdGZvcm1E
YXRhKCkuY3RGb250KCksIG1fZm9udC5waXhlbFNpemUoKSwgMCwgZm9udERlc2NyaXB0b3IuZ2V0
KCkpKTsKICAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUoY29uc3RfY2FzdDxDRk11dGFibGVE
aWN0aW9uYXJ5UmVmPihzdHJpbmdBdHRyaWJ1dGVzLmdldCgpKSwga0NURm9udEF0dHJpYnV0ZU5h
bWUsIGZvbnRXaXRoQ2FzY2FkZUxpc3QuZ2V0KCkpOwogICAgIH0gZWxzZQotICAgICAgICBzdHJp
bmdBdHRyaWJ1dGVzID0gZm9udERhdGEtPmdldENGU3RyaW5nQXR0cmlidXRlcyhtX2ZvbnQudHlw
ZXNldHRpbmdGZWF0dXJlcygpLCBmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24o
KSk7CisgICAgICAgIHN0cmluZ0F0dHJpYnV0ZXMgPSBmb250LT5nZXRDRlN0cmluZ0F0dHJpYnV0
ZXMobV9mb250LnR5cGVzZXR0aW5nRmVhdHVyZXMoKSwgZm9udC0+cGxhdGZvcm1EYXRhKCkub3Jp
ZW50YXRpb24oKSk7CiAKICAgICBSZXRhaW5QdHI8Q1RMaW5lUmVmPiBsaW5lOwogCkBAIC0yNDgs
NTUgKzI0OCw1NSBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Y29sbGVjdENvbXBsCiAg
ICAgICAgIENUUnVuUmVmIGN0UnVuID0gc3RhdGljX2Nhc3Q8Q1RSdW5SZWY+KENGQXJyYXlHZXRW
YWx1ZUF0SW5kZXgocnVuQXJyYXksIG1fcnVuLmx0cigpID8gciA6IHJ1bkNvdW50IC0gMSAtIHIp
KTsKICAgICAgICAgQVNTRVJUKENGR2V0VHlwZUlEKGN0UnVuKSA9PSBDVFJ1bkdldFR5cGVJRCgp
KTsKICAgICAgICAgQ0ZSYW5nZSBydW5SYW5nZSA9IENUUnVuR2V0U3RyaW5nUmFuZ2UoY3RSdW4p
OwotICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogcnVuRm9udERhdGEgPSBmb250RGF0YTsK
KyAgICAgICAgY29uc3QgRm9udCogcnVuRm9udCA9IGZvbnQ7CiAgICAgICAgIGlmIChpc1N5c3Rl
bUZhbGxiYWNrKSB7CiAgICAgICAgICAgICBDRkRpY3Rpb25hcnlSZWYgcnVuQXR0cmlidXRlcyA9
IENUUnVuR2V0QXR0cmlidXRlcyhjdFJ1bik7Ci0gICAgICAgICAgICBDVEZvbnRSZWYgcnVuRm9u
dCA9IHN0YXRpY19jYXN0PENURm9udFJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocnVuQXR0cmli
dXRlcywga0NURm9udEF0dHJpYnV0ZU5hbWUpKTsKLSAgICAgICAgICAgIEFTU0VSVChDRkdldFR5
cGVJRChydW5Gb250KSA9PSBDVEZvbnRHZXRUeXBlSUQoKSk7Ci0gICAgICAgICAgICBSZXRhaW5Q
dHI8Q0ZUeXBlUmVmPiBydW5Gb250RXF1YWxpdHlPYmplY3QgPSBGb250UGxhdGZvcm1EYXRhOjpv
YmplY3RGb3JFcXVhbGl0eUNoZWNrKHJ1bkZvbnQpOwotICAgICAgICAgICAgaWYgKCFDRkVxdWFs
KHJ1bkZvbnRFcXVhbGl0eU9iamVjdC5nZXQoKSwgZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm9i
amVjdEZvckVxdWFsaXR5Q2hlY2soKS5nZXQoKSkpIHsKKyAgICAgICAgICAgIENURm9udFJlZiBy
dW5DVEZvbnQgPSBzdGF0aWNfY2FzdDxDVEZvbnRSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKHJ1
bkF0dHJpYnV0ZXMsIGtDVEZvbnRBdHRyaWJ1dGVOYW1lKSk7CisgICAgICAgICAgICBBU1NFUlQo
Q0ZHZXRUeXBlSUQocnVuQ1RGb250KSA9PSBDVEZvbnRHZXRUeXBlSUQoKSk7CisgICAgICAgICAg
ICBSZXRhaW5QdHI8Q0ZUeXBlUmVmPiBydW5Gb250RXF1YWxpdHlPYmplY3QgPSBGb250UGxhdGZv
cm1EYXRhOjpvYmplY3RGb3JFcXVhbGl0eUNoZWNrKHJ1bkNURm9udCk7CisgICAgICAgICAgICBp
ZiAoIUNGRXF1YWwocnVuRm9udEVxdWFsaXR5T2JqZWN0LmdldCgpLCBmb250LT5wbGF0Zm9ybURh
dGEoKS5vYmplY3RGb3JFcXVhbGl0eUNoZWNrKCkuZ2V0KCkpKSB7CiAgICAgICAgICAgICAgICAg
Ly8gQmVnaW4gdHJ5aW5nIHRvIHNlZSBpZiBydW5Gb250IG1hdGNoZXMgYW55IG9mIHRoZSBmb250
cyBpbiB0aGUgZmFsbGJhY2sgbGlzdC4KIAogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7ICFtX2ZvbnQuZmFsbGJhY2tSYW5nZXNBdChpKS5pc051bGwoKTsgKytpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJ1bkZvbnREYXRhID0gbV9mb250LmZhbGxiYWNrUmFuZ2VzQXQoaSku
Zm9udERhdGFGb3JDaGFyYWN0ZXIoYmFzZUNoYXJhY3Rlcik7Ci0gICAgICAgICAgICAgICAgICAg
IGlmICghcnVuRm9udERhdGEpCisgICAgICAgICAgICAgICAgICAgIHJ1bkZvbnQgPSBtX2ZvbnQu
ZmFsbGJhY2tSYW5nZXNBdChpKS5mb250Rm9yQ2hhcmFjdGVyKGJhc2VDaGFyYWN0ZXIpOworICAg
ICAgICAgICAgICAgICAgICBpZiAoIXJ1bkZvbnQpCiAgICAgICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgUmV0YWluUHRyPENGVHlwZVJlZj4gcnVuRm9u
dEVxdWFsaXR5T2JqZWN0ID0gcnVuRm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm9iamVjdEZvckVx
dWFsaXR5Q2hlY2soKTsKKyAgICAgICAgICAgICAgICAgICAgUmV0YWluUHRyPENGVHlwZVJlZj4g
cnVuRm9udEVxdWFsaXR5T2JqZWN0ID0gcnVuRm9udC0+cGxhdGZvcm1EYXRhKCkub2JqZWN0Rm9y
RXF1YWxpdHlDaGVjaygpOwogICAgICAgICAgICAgICAgICAgICBpZiAoQ0ZFcXVhbChydW5Gb250
RXF1YWxpdHlPYmplY3QuZ2V0KCksIHJ1bkZvbnRFcXVhbGl0eU9iamVjdC5nZXQoKSkpCiAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgcnVuRm9udERh
dGEgPSAwOworICAgICAgICAgICAgICAgICAgICBydW5Gb250ID0gbnVsbHB0cjsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gbWF0Y2hpbmcgZm9u
dCwgbG9vayB1cCBieSBuYW1lIGluIHRoZSBmb250IGNhY2hlLgotICAgICAgICAgICAgICAgIGlm
ICghcnVuRm9udERhdGEpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXJ1bkZvbnQpIHsKICAgICAg
ICAgICAgICAgICAgICAgLy8gUmF0aGVyIHRoYW4gdXNpbmcgcnVuRm9udCBhcyBhbiBOU0ZvbnQg
YW5kIHdyYXBwaW5nIGl0IGluIGEgRm9udFBsYXRmb3JtRGF0YSwgZ28gdGhyb3VnaAogICAgICAg
ICAgICAgICAgICAgICAvLyB0aGUgZm9udCBjYWNoZSBhbmQgdWx0aW1hdGVseSB0aHJvdWdoIE5T
Rm9udE1hbmFnZXIgaW4gb3JkZXIgdG8gZ2V0IGFuIE5TRm9udCB3aXRoIHRoZSByaWdodAogICAg
ICAgICAgICAgICAgICAgICAvLyBOU0ZvbnRSZW5kZXJpbmdNb2RlLgotICAgICAgICAgICAgICAg
ICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGZvbnROYW1lID0gYWRvcHRDRihDVEZvbnRDb3B5
UG9zdFNjcmlwdE5hbWUocnVuRm9udCkpOworICAgICAgICAgICAgICAgICAgICBSZXRhaW5QdHI8
Q0ZTdHJpbmdSZWY+IGZvbnROYW1lID0gYWRvcHRDRihDVEZvbnRDb3B5UG9zdFNjcmlwdE5hbWUo
cnVuQ1RGb250KSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChDRkVxdWFsKGZvbnROYW1lLmdl
dCgpLCBDRlNUUigiTGFzdFJlc29ydCIpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbV9j
b21wbGV4VGV4dFJ1bnMuYXBwZW5kKENvbXBsZXhUZXh0UnVuOjpjcmVhdGUobV9mb250LnByaW1h
cnlGb250RGF0YSgpLCBjcCwgc3RyaW5nTG9jYXRpb24gKyBydW5SYW5nZS5sb2NhdGlvbiwgcnVu
UmFuZ2UubGVuZ3RoLCBtX3J1bi5sdHIoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9j
b21wbGV4VGV4dFJ1bnMuYXBwZW5kKENvbXBsZXhUZXh0UnVuOjpjcmVhdGUobV9mb250LnByaW1h
cnlGb250KCksIGNwLCBzdHJpbmdMb2NhdGlvbiArIHJ1blJhbmdlLmxvY2F0aW9uLCBydW5SYW5n
ZS5sZW5ndGgsIG1fcnVuLmx0cigpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBydW5Gb250RGF0
YSA9IGZvbnRDYWNoZSgpLmZvbnRGb3JGYW1pbHkobV9mb250LmZvbnREZXNjcmlwdGlvbigpLCBm
b250TmFtZS5nZXQoKSwgZmFsc2UpLmdldCgpOworICAgICAgICAgICAgICAgICAgICBydW5Gb250
ID0gZm9udENhY2hlKCkuZm9udEZvckZhbWlseShtX2ZvbnQuZm9udERlc2NyaXB0aW9uKCksIGZv
bnROYW1lLmdldCgpLCBmYWxzZSkuZ2V0KCk7CiAjaWYgIVBMQVRGT1JNKElPUykKICAgICAgICAg
ICAgICAgICAgICAgLy8gQ29yZSBUZXh0IG1heSBoYXZlIHVzZWQgYSBmb250IHRoYXQgaXMgbm90
IGtub3duIHRvIE5TRm9udE1hbmFnZXIuIEluIHRoYXQgY2FzZSwgZmFsbCBiYWNrIG9uCiAgICAg
ICAgICAgICAgICAgICAgIC8vIHVzaW5nIHRoZSBmb250IGFzIHJldHVybmVkLCBldmVuIHRob3Vn
aCBpdCBtYXkgbm90IGhhdmUgdGhlIGJlc3QgTlNGb250UmVuZGVyaW5nTW9kZS4KLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCFydW5Gb250RGF0YSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
Rm9udFBsYXRmb3JtRGF0YSBydW5Gb250UGxhdGZvcm1EYXRhKChOU0ZvbnQgKilydW5Gb250LCBD
VEZvbnRHZXRTaXplKHJ1bkZvbnQpLCBtX2ZvbnQuZm9udERlc2NyaXB0aW9uKCkudXNlUHJpbnRl
ckZvbnQoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBydW5Gb250RGF0YSA9ICZmb250Q2Fj
aGUoKS5mb250Rm9yUGxhdGZvcm1EYXRhKHJ1bkZvbnRQbGF0Zm9ybURhdGEpLmdldCgpOworICAg
ICAgICAgICAgICAgICAgICBpZiAoIXJ1bkZvbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IEZvbnRQbGF0Zm9ybURhdGEgcnVuRm9udFBsYXRmb3JtRGF0YSgoTlNGb250ICopcnVuQ1RGb250
LCBDVEZvbnRHZXRTaXplKHJ1bkNURm9udCksIG1fZm9udC5mb250RGVzY3JpcHRpb24oKS51c2VQ
cmludGVyRm9udCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJ1bkZvbnQgPSAmZm9udENh
Y2hlKCkuZm9udEZvclBsYXRmb3JtRGF0YShydW5Gb250UGxhdGZvcm1EYXRhKS5nZXQoKTsKICAg
ICAgICAgICAgICAgICAgICAgfQogI2Vsc2UKICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6
IEp1c3QgYXNzZXJ0IGZvciBub3csIHVudGlsIHdlIGNhbiBkZXZpc2UgYSBiZXR0ZXIgZml4IHRo
YXQgd29ya3Mgd2l0aCBpT1MuCi0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChydW5Gb250RGF0
YSk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChydW5Gb250KTsKICNlbmRpZgogICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAobV9mYWxsYmFja0ZvbnRzICYmIHJ1bkZv
bnREYXRhICE9ICZtX2ZvbnQucHJpbWFyeUZvbnREYXRhKCkpCi0gICAgICAgICAgICAgICAgICAg
IG1fZmFsbGJhY2tGb250cy0+YWRkKHJ1bkZvbnREYXRhKTsKKyAgICAgICAgICAgICAgICBpZiAo
bV9mYWxsYmFja0ZvbnRzICYmIHJ1bkZvbnQgIT0gJm1fZm9udC5wcmltYXJ5Rm9udCgpKQorICAg
ICAgICAgICAgICAgICAgICBtX2ZhbGxiYWNrRm9udHMtPmFkZChydW5Gb250KTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQotICAgICAgICBpZiAobV9mYWxsYmFja0ZvbnRzICYmIHJ1bkZvbnRE
YXRhICE9ICZtX2ZvbnQucHJpbWFyeUZvbnREYXRhKCkpCi0gICAgICAgICAgICBtX2ZhbGxiYWNr
Rm9udHMtPmFkZChmb250RGF0YSk7CisgICAgICAgIGlmIChtX2ZhbGxiYWNrRm9udHMgJiYgcnVu
Rm9udCAhPSAmbV9mb250LnByaW1hcnlGb250KCkpCisgICAgICAgICAgICBtX2ZhbGxiYWNrRm9u
dHMtPmFkZChmb250KTsKIAotICAgICAgICBtX2NvbXBsZXhUZXh0UnVucy5hcHBlbmQoQ29tcGxl
eFRleHRSdW46OmNyZWF0ZShjdFJ1biwgKnJ1bkZvbnREYXRhLCBjcCwgc3RyaW5nTG9jYXRpb24s
IGxlbmd0aCwgcnVuUmFuZ2UpKTsKKyAgICAgICAgbV9jb21wbGV4VGV4dFJ1bnMuYXBwZW5kKENv
bXBsZXhUZXh0UnVuOjpjcmVhdGUoY3RSdW4sICpydW5Gb250LCBjcCwgc3RyaW5nTG9jYXRpb24s
IGxlbmd0aCwgcnVuUmFuZ2UpKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q2FjaGVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDYWNoZU1hYy5tbQkocmV2aXNpb24g
MTc4NTEwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDYWNo
ZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzMsOCArMzMsOCBAQAogI2lmICFQTEFURk9STShJ
T1MpCiAKICNpbXBvcnQgIkNvcmVHcmFwaGljc1NQSS5oIgorI2ltcG9ydCAiRm9udC5oIgogI2lt
cG9ydCAiRm9udENhc2NhZGUuaCIKLSNpbXBvcnQgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW1wb3J0
ICJGb250UGxhdGZvcm1EYXRhLmgiCiAjaW1wb3J0ICJOU0ZvbnRTUEkuaCIKICNpbXBvcnQgIldl
YkNvcmVOU1N0cmluZ0V4dHJhcy5oIgpAQCAtMzM3LDcgKzMzNyw3IEBAIHN0YXRpYyBib29sIHNo
b3VsZEF1dG9BY3RpdmF0ZUZvbnRJZk5lZWQKICAgICByZXR1cm4ga25vd25GYW1pbGllcy5nZXQo
KS5hZGQoZmFtaWx5KS5pc05ld0VudHJ5OwogfQogCi1SZWZQdHI8U2ltcGxlRm9udERhdGE+IEZv
bnRDYWNoZTo6c3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlv
biYgZGVzY3JpcHRpb24sIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBvcmlnaW5hbEZvbnREYXRhLCBi
b29sIGlzUGxhdGZvcm1Gb250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkK
K1JlZlB0cjxGb250PiBGb250Q2FjaGU6OnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhjb25z
dCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBGb250KiBvcmlnaW5hbEZvbnRE
YXRhLCBib29sIGlzUGxhdGZvcm1Gb250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxl
bmd0aCkKIHsKICAgICBVQ2hhcjMyIGNoYXJhY3RlcjsKICAgICBVMTZfR0VUKGNoYXJhY3RlcnMs
IDAsIDAsIGxlbmd0aCwgY2hhcmFjdGVyKTsKQEAgLTQwNSwzNCArNDA1LDM1IEBAIFJlZlB0cjxT
aW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpzeXN0ZW0KICAgICByZXR1cm4gZm9udEZvclBsYXRm
b3JtRGF0YShhbHRlcm5hdGVGb250KTsKIH0KIAotUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250
Q2FjaGU6OnNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVz
Y3JpcHRpb24pCitSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpzaW1pbGFyRm9udChjb25zdCBGb250
RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQogewogICAgIC8vIEF0dGVtcHQgdG8gZmluZCBhbiBh
cHByb3ByaWF0ZSBmb250IHVzaW5nIGEgbWF0Y2ggYmFzZWQgb24gCiAgICAgLy8gdGhlIHByZXNl
bmNlIG9mIGtleXdvcmRzIGluIHRoZSB0aGUgcmVxdWVzdGVkIG5hbWVzLiAgRm9yIGV4YW1wbGUs
IHdlJ2xsCiAgICAgLy8gbWF0Y2ggYW55IG5hbWUgdGhhdCBjb250YWlucyAiQXJhYmljIiB0byBH
ZWV6YSBQcm8uCi0gICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBzaW1wbGVGb250RGF0YTsKKyAg
ICBSZWZQdHI8Rm9udD4gZm9udDsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVzY3Jp
cHRpb24uZmFtaWx5Q291bnQoKTsgKytpKSB7CiAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
ZmFtaWx5ID0gZGVzY3JpcHRpb24uZmFtaWx5QXQoaSk7CiAgICAgICAgIGlmIChmYW1pbHkuaXNF
bXB0eSgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIHN0YXRpYyBTdHJpbmcqIG1h
dGNoV29yZHNbM10gPSB7IG5ldyBTdHJpbmcoIkFyYWJpYyIpLCBuZXcgU3RyaW5nKCJQYXNodG8i
KSwgbmV3IFN0cmluZygiVXJkdSIpIH07CiAgICAgICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJ
Q19MT0NBTChBdG9taWNTdHJpbmcsIGdlZXphU3RyLCAoIkdlZXphIFBybyIsIEF0b21pY1N0cmlu
Zzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLSAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCAz
ICYmICFzaW1wbGVGb250RGF0YTsgKytqKQorICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDMg
JiYgIWZvbnQ7ICsraikgewogICAgICAgICAgICAgaWYgKGZhbWlseS5jb250YWlucygqbWF0Y2hX
b3Jkc1tqXSwgZmFsc2UpKQotICAgICAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gZm9udEZv
ckZhbWlseShkZXNjcmlwdGlvbiwgZ2VlemFTdHIpOworICAgICAgICAgICAgICAgIGZvbnQgPSBm
b250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBnZWV6YVN0cik7CisgICAgICAgIH0KICAgICB9Ci0g
ICAgcmV0dXJuIHNpbXBsZUZvbnREYXRhLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gZm9udC5yZWxl
YXNlKCk7CiB9CiAKLVJlZjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpsYXN0UmVzb3J0RmFs
bGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKQorUmVmPEZv
bnQ+IEZvbnRDYWNoZTo6bGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRp
b24mIGZvbnREZXNjcmlwdGlvbikKIHsKICAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9D
QUwoQXRvbWljU3RyaW5nLCB0aW1lc1N0ciwgKCJUaW1lcyIsIEF0b21pY1N0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpKTsKIAogICAgIC8vIEZJWE1FOiBXb3VsZCBiZSBldmVuIGJldHRlciB0
byBzb21laG93IGdldCB0aGUgdXNlcidzIGRlZmF1bHQgZm9udCBoZXJlLiAgRm9yIG5vdyB3ZSds
bCBwaWNrCiAgICAgLy8gdGhlIGRlZmF1bHQgdGhhdCB0aGUgdXNlciB3b3VsZCBnZXQgd2l0aG91
dCBjaGFuZ2luZyBhbnkgcHJlZnMuCi0gICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBzaW1wbGVG
b250RGF0YSA9IGZvbnRGb3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCB0aW1lc1N0ciwgZmFsc2Up
OwotICAgIGlmIChzaW1wbGVGb250RGF0YSkKLSAgICAgICAgcmV0dXJuICpzaW1wbGVGb250RGF0
YTsKKyAgICBSZWZQdHI8Rm9udD4gZm9udCA9IGZvbnRGb3JGYW1pbHkoZm9udERlc2NyaXB0aW9u
LCB0aW1lc1N0ciwgZmFsc2UpOworICAgIGlmIChmb250KQorICAgICAgICByZXR1cm4gKmZvbnQ7
CiAKICAgICAvLyBUaGUgVGltZXMgZmFsbGJhY2sgd2lsbCBhbG1vc3QgYWx3YXlzIHdvcmssIGJ1
dCBpbiB0aGUgaGlnaGx5IHVudXN1YWwgY2FzZSB3aGVyZQogICAgIC8vIHRoZSB1c2VyIGRvZXNu
J3QgaGF2ZSBpdCwgd2UgZmFsbCBiYWNrIG9uIEx1Y2lkYSBHcmFuZGUgYmVjYXVzZSB0aGF0J3MK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q2FzY2FkZUNv
bXBsZXhUZXh0TWFjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9tYWMvRm9udENhc2NhZGVDb21wbGV4VGV4dE1hYy5jcHAJKHJldmlzaW9uIDE3ODUx
MCkJKGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDb21wbGV4
VGV4dE1hYy5jcHA6MTc4NTEwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0ZvbnRDYXNjYWRlQ29tcGxleFRleHRNYWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKKworI2luY2x1ZGUgIkNvbXBsZXhUZXh0Q29udHJv
bGxlci5oIgorI2luY2x1ZGUgIkZvbnRHbHlwaHMuaCIKKyNpbmNsdWRlICJHbHlwaEJ1ZmZlci5o
IgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNp
bmNsdWRlICJMYXlvdXRSZWN0LmgiCisjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKKyNpbmNs
dWRlICJUZXh0UnVuLmgiCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCit2b2lkIEZvbnRDYXNjYWRlOjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29t
cGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBp
bnQgZnJvbSwgaW50IHRvKSBjb25zdAoreworICAgIENvbXBsZXhUZXh0Q29udHJvbGxlciBjb250
cm9sbGVyKHRoaXMsIHJ1bik7CisgICAgY29udHJvbGxlci5hZHZhbmNlKGZyb20pOworICAgIGZs
b2F0IGJlZm9yZVdpZHRoID0gY29udHJvbGxlci5ydW5XaWR0aFNvRmFyKCk7CisgICAgY29udHJv
bGxlci5hZHZhbmNlKHRvKTsKKyAgICBmbG9hdCBhZnRlcldpZHRoID0gY29udHJvbGxlci5ydW5X
aWR0aFNvRmFyKCk7CisKKyAgICBpZiAocnVuLnJ0bCgpKQorICAgICAgICBzZWxlY3Rpb25SZWN0
Lm1vdmUoY29udHJvbGxlci50b3RhbFdpZHRoKCkgLSBhZnRlcldpZHRoLCAwKTsKKyAgICBlbHNl
CisgICAgICAgIHNlbGVjdGlvblJlY3QubW92ZShiZWZvcmVXaWR0aCwgMCk7CisgICAgc2VsZWN0
aW9uUmVjdC5zZXRXaWR0aChhZnRlcldpZHRoIC0gYmVmb3JlV2lkdGgpOworfQorCitmbG9hdCBG
b250Q2FzY2FkZTo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0
UnVuJiBydW4sIGludCBmcm9tLCBpbnQgdG8sIEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgRm9y
VGV4dEVtcGhhc2lzT3JOb3QgZm9yVGV4dEVtcGhhc2lzKSBjb25zdAoreworICAgIGZsb2F0IGlu
aXRpYWxBZHZhbmNlOworCisgICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRyb2xsZXIodGhp
cywgcnVuLCBmYWxzZSwgMCwgZm9yVGV4dEVtcGhhc2lzKTsKKyAgICBjb250cm9sbGVyLmFkdmFu
Y2UoZnJvbSk7CisgICAgZmxvYXQgYmVmb3JlV2lkdGggPSBjb250cm9sbGVyLnJ1bldpZHRoU29G
YXIoKTsKKyAgICBjb250cm9sbGVyLmFkdmFuY2UodG8sICZnbHlwaEJ1ZmZlcik7CisKKyAgICBp
ZiAoZ2x5cGhCdWZmZXIuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGZsb2F0
IGFmdGVyV2lkdGggPSBjb250cm9sbGVyLnJ1bldpZHRoU29GYXIoKTsKKworICAgIGlmIChydW4u
cnRsKCkpIHsKKyAgICAgICAgaW5pdGlhbEFkdmFuY2UgPSBjb250cm9sbGVyLnRvdGFsV2lkdGgo
KSArIGNvbnRyb2xsZXIuZmluYWxSb3VuZGluZ1dpZHRoKCkgLSBhZnRlcldpZHRoOworICAgICAg
ICBnbHlwaEJ1ZmZlci5yZXZlcnNlKDAsIGdseXBoQnVmZmVyLnNpemUoKSk7CisgICAgfSBlbHNl
CisgICAgICAgIGluaXRpYWxBZHZhbmNlID0gYmVmb3JlV2lkdGg7CisKKyAgICByZXR1cm4gaW5p
dGlhbEFkdmFuY2U7Cit9CisKK2Zsb2F0IEZvbnRDYXNjYWRlOjpkcmF3Q29tcGxleFRleHQoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAoreworICAgIC8vIFRoaXMgZ2x5cGgg
YnVmZmVyIGhvbGRzIG91ciBnbHlwaHMgKyBhZHZhbmNlcyArIGZvbnQgZGF0YSBmb3IgZWFjaCBn
bHlwaC4KKyAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKKworICAgIGZsb2F0IHN0YXJ0WCA9
IHBvaW50LngoKSArIGdldEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQocnVuLCBmcm9t
LCB0bywgZ2x5cGhCdWZmZXIpOworCisgICAgLy8gV2UgY291bGRuJ3QgZ2VuZXJhdGUgYW55IGds
eXBocyBmb3IgdGhlIHJ1bi4gIEdpdmUgdXAuCisgICAgaWYgKGdseXBoQnVmZmVyLmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBEcmF3IHRoZSBnbHlwaCBidWZmZXIgbm93
IGF0IHRoZSBzdGFydGluZyBwb2ludCByZXR1cm5lZCBpbiBzdGFydFguCisgICAgRmxvYXRQb2lu
dCBzdGFydFBvaW50KHN0YXJ0WCwgcG9pbnQueSgpKTsKKyAgICBkcmF3R2x5cGhCdWZmZXIoY29u
dGV4dCwgcnVuLCBnbHlwaEJ1ZmZlciwgc3RhcnRQb2ludCk7CisKKyAgICByZXR1cm4gc3RhcnRQ
b2ludC54KCkgLSBzdGFydFg7Cit9CisKK3ZvaWQgRm9udENhc2NhZGU6OmRyYXdFbXBoYXNpc01h
cmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVu
JiBydW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQs
IGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit7CisgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7
CisgICAgZmxvYXQgaW5pdGlhbEFkdmFuY2UgPSBnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBs
ZXhUZXh0KHJ1biwgZnJvbSwgdG8sIGdseXBoQnVmZmVyLCBGb3JUZXh0RW1waGFzaXMpOworCisg
ICAgaWYgKGdseXBoQnVmZmVyLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZHJh
d0VtcGhhc2lzTWFya3MoY29udGV4dCwgcnVuLCBnbHlwaEJ1ZmZlciwgbWFyaywgRmxvYXRQb2lu
dChwb2ludC54KCkgKyBpbml0aWFsQWR2YW5jZSwgcG9pbnQueSgpKSk7Cit9CisKK2Zsb2F0IEZv
bnRDYXNjYWRlOjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBI
YXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZs
b3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0Cit7CisgICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNv
bnRyb2xsZXIodGhpcywgcnVuLCB0cnVlLCBmYWxsYmFja0ZvbnRzKTsKKyAgICBpZiAoZ2x5cGhP
dmVyZmxvdykgeworICAgICAgICBnbHlwaE92ZXJmbG93LT50b3AgPSBzdGQ6Om1heDxpbnQ+KGds
eXBoT3ZlcmZsb3ctPnRvcCwgY2VpbGYoLWNvbnRyb2xsZXIubWluR2x5cGhCb3VuZGluZ0JveFko
KSkgLSAoZ2x5cGhPdmVyZmxvdy0+Y29tcHV0ZUJvdW5kcyA/IDAgOiBmb250TWV0cmljcygpLmFz
Y2VudCgpKSk7CisgICAgICAgIGdseXBoT3ZlcmZsb3ctPmJvdHRvbSA9IHN0ZDo6bWF4PGludD4o
Z2x5cGhPdmVyZmxvdy0+Ym90dG9tLCBjZWlsZihjb250cm9sbGVyLm1heEdseXBoQm91bmRpbmdC
b3hZKCkpIC0gKGdseXBoT3ZlcmZsb3ctPmNvbXB1dGVCb3VuZHMgPyAwIDogZm9udE1ldHJpY3Mo
KS5kZXNjZW50KCkpKTsKKyAgICAgICAgZ2x5cGhPdmVyZmxvdy0+bGVmdCA9IHN0ZDo6bWF4PGlu
dD4oMCwgY2VpbGYoLWNvbnRyb2xsZXIubWluR2x5cGhCb3VuZGluZ0JveFgoKSkpOworICAgICAg
ICBnbHlwaE92ZXJmbG93LT5yaWdodCA9IHN0ZDo6bWF4PGludD4oMCwgY2VpbGYoY29udHJvbGxl
ci5tYXhHbHlwaEJvdW5kaW5nQm94WCgpIC0gY29udHJvbGxlci50b3RhbFdpZHRoKCkpKTsKKyAg
ICB9CisgICAgcmV0dXJuIGNvbnRyb2xsZXIudG90YWxXaWR0aCgpOworfQorCitpbnQgRm9udENh
c2NhZGU6Om9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVu
LCBmbG9hdCB4LCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdAoreworICAgIENvbXBs
ZXhUZXh0Q29udHJvbGxlciBjb250cm9sbGVyKHRoaXMsIHJ1bik7CisgICAgcmV0dXJuIGNvbnRy
b2xsZXIub2Zmc2V0Rm9yUG9zaXRpb24oeCwgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOworfQorCitj
b25zdCBTaW1wbGVGb250RGF0YSogRm9udENhc2NhZGU6OmZvbnREYXRhRm9yQ29tYmluaW5nQ2hh
cmFjdGVyU2VxdWVuY2UoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIEZv
bnREYXRhVmFyaWFudCB2YXJpYW50KSBjb25zdAoreworICAgIFVDaGFyMzIgYmFzZUNoYXJhY3Rl
cjsKKyAgICBzaXplX3QgYmFzZUNoYXJhY3Rlckxlbmd0aCA9IDA7CisgICAgVTE2X05FWFQoY2hh
cmFjdGVycywgYmFzZUNoYXJhY3Rlckxlbmd0aCwgbGVuZ3RoLCBiYXNlQ2hhcmFjdGVyKTsKKwor
ICAgIEdseXBoRGF0YSBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhID0gZ2x5cGhEYXRhRm9yQ2hhcmFj
dGVyKGJhc2VDaGFyYWN0ZXIsIGZhbHNlLCB2YXJpYW50KTsKKworICAgIGlmICghYmFzZUNoYXJh
Y3RlckdseXBoRGF0YS5nbHlwaCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAobGVuZ3Ro
ID09IGJhc2VDaGFyYWN0ZXJMZW5ndGgpCisgICAgICAgIHJldHVybiBiYXNlQ2hhcmFjdGVyR2x5
cGhEYXRhLmZvbnREYXRhOworCisgICAgYm9vbCB0cmllZEJhc2VDaGFyYWN0ZXJGb250RGF0YSA9
IGZhbHNlOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgIWZhbGxiYWNrUmFuZ2VzQXQoaSku
aXNOdWxsKCk7ICsraSkgeworICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogc2ltcGxlRm9u
dERhdGEgPSBmYWxsYmFja1Jhbmdlc0F0KGkpLmZvbnREYXRhRm9yQ2hhcmFjdGVyKGJhc2VDaGFy
YWN0ZXIpOworICAgICAgICBpZiAoIXNpbXBsZUZvbnREYXRhKQorICAgICAgICAgICAgY29udGlu
dWU7CisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICBpZiAoYmFzZUNoYXJhY3RlciA+PSAweDA2
MDAgJiYgYmFzZUNoYXJhY3RlciA8PSAweDA2ZmYgJiYgc2ltcGxlRm9udERhdGEtPnNob3VsZE5v
dEJlVXNlZEZvckFyYWJpYygpKQorICAgICAgICAgICAgY29udGludWU7CisjZW5kaWYKKyAgICAg
ICAgaWYgKHZhcmlhbnQgPT0gTm9ybWFsVmFyaWFudCkgeworICAgICAgICAgICAgaWYgKHNpbXBs
ZUZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woYmFzZUNoYXJhY3Rlcikg
JiYgIXNpbXBsZUZvbnREYXRhLT5oYXNWZXJ0aWNhbEdseXBocygpKSB7CisgICAgICAgICAgICAg
ICAgICAgIHZhcmlhbnQgPSBCcm9rZW5JZGVvZ3JhcGhWYXJpYW50OworICAgICAgICAgICAgICAg
ICAgICBzaW1wbGVGb250RGF0YSA9IHNpbXBsZUZvbnREYXRhLT5icm9rZW5JZGVvZ3JhcGhGb250
RGF0YSgpLmdldCgpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobV9mb250RGVzY3JpcHRp
b24ubm9uQ0pLR2x5cGhPcmllbnRhdGlvbigpID09IE5vbkNKS0dseXBoT3JpZW50YXRpb25WZXJ0
aWNhbFJpZ2h0KSB7CisgICAgICAgICAgICAgICAgICAgIFNpbXBsZUZvbnREYXRhKiB2ZXJ0aWNh
bFJpZ2h0Rm9udERhdGEgPSBzaW1wbGVGb250RGF0YS0+dmVydGljYWxSaWdodE9yaWVudGF0aW9u
Rm9udERhdGEoKS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgR2x5cGggdmVydGljYWxSaWdo
dEdseXBoID0gdmVydGljYWxSaWdodEZvbnREYXRhLT5nbHlwaEZvckNoYXJhY3RlcihiYXNlQ2hh
cmFjdGVyKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcnRpY2FsUmlnaHRHbHlwaCA9PSBi
YXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmdseXBoKQorICAgICAgICAgICAgICAgICAgICAgICAgc2lt
cGxlRm9udERhdGEgPSB2ZXJ0aWNhbFJpZ2h0Rm9udERhdGE7CisgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgU2ltcGxlRm9udERhdGEqIHVwcmlnaHRGb250RGF0
YSA9IHNpbXBsZUZvbnREYXRhLT51cHJpZ2h0T3JpZW50YXRpb25Gb250RGF0YSgpLmdldCgpOwor
ICAgICAgICAgICAgICAgICAgICBHbHlwaCB1cHJpZ2h0R2x5cGggPSB1cHJpZ2h0Rm9udERhdGEt
PmdseXBoRm9yQ2hhcmFjdGVyKGJhc2VDaGFyYWN0ZXIpOworICAgICAgICAgICAgICAgICAgICBp
ZiAodXByaWdodEdseXBoICE9IGJhc2VDaGFyYWN0ZXJHbHlwaERhdGEuZ2x5cGgpCisgICAgICAg
ICAgICAgICAgICAgICAgICBzaW1wbGVGb250RGF0YSA9IHVwcmlnaHRGb250RGF0YTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBpZiAoY29uc3QgU2ltcGxlRm9udERhdGEqIHZhcmlhbnRGb250RGF0YSA9IHNpbXBsZUZvbnRE
YXRhLT52YXJpYW50Rm9udERhdGEobV9mb250RGVzY3JpcHRpb24sIHZhcmlhbnQpLmdldCgpKQor
ICAgICAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gdmFyaWFudEZvbnREYXRhOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKHNpbXBsZUZvbnREYXRhID09IGJhc2VDaGFyYWN0ZXJHbHlwaERh
dGEuZm9udERhdGEpCisgICAgICAgICAgICB0cmllZEJhc2VDaGFyYWN0ZXJGb250RGF0YSA9IHRy
dWU7CisKKyAgICAgICAgaWYgKHNpbXBsZUZvbnREYXRhLT5jYW5SZW5kZXJDb21iaW5pbmdDaGFy
YWN0ZXJTZXF1ZW5jZShjaGFyYWN0ZXJzLCBsZW5ndGgpKQorICAgICAgICAgICAgcmV0dXJuIHNp
bXBsZUZvbnREYXRhOworICAgIH0KKworICAgIGlmICghdHJpZWRCYXNlQ2hhcmFjdGVyRm9udERh
dGEgJiYgYmFzZUNoYXJhY3RlckdseXBoRGF0YS5mb250RGF0YSAmJiBiYXNlQ2hhcmFjdGVyR2x5
cGhEYXRhLmZvbnREYXRhLT5jYW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjaGFy
YWN0ZXJzLCBsZW5ndGgpKQorICAgICAgICByZXR1cm4gYmFzZUNoYXJhY3RlckdseXBoRGF0YS5m
b250RGF0YTsKKworICAgIHJldHVybiBTaW1wbGVGb250RGF0YTo6c3lzdGVtRmFsbGJhY2soKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL0ZvbnRDYXNjYWRlQ29tcGxleFRleHRNYWMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q2FzY2FkZUNvbXBs
ZXhUZXh0TWFjLmNwcAkod29ya2luZyBjb3B5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL0ZvbnRDYXNjYWRlQ29tcGxleFRleHRNYWMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiwxMiArMjYsMTIgQEAKICNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogCiAjaW5jbHVk
ZSAiQ29tcGxleFRleHRDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUg
IkZvbnRHbHlwaHMuaCIKICNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJMYXlvdXRSZWN0
LmgiCi0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKICNpbmNsdWRlICJUZXh0UnVuLmgiCiAj
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIApAQCAtMTA0LDcgKzEwNCw3IEBAIHZvaWQgRm9u
dENhc2NhZGU6OmRyYXdFbXBoYXNpc01hcmtzRm9yQ28KICAgICBkcmF3RW1waGFzaXNNYXJrcyhj
b250ZXh0LCBydW4sIGdseXBoQnVmZmVyLCBtYXJrLCBGbG9hdFBvaW50KHBvaW50LngoKSArIGlu
aXRpYWxBZHZhbmNlLCBwb2ludC55KCkpKTsKIH0KIAotZmxvYXQgRm9udENhc2NhZGU6OmZsb2F0
V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2lt
cGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxv
dykgY29uc3QKK2Zsb2F0IEZvbnRDYXNjYWRlOjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29u
c3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cywgR2x5
cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKIHsKICAgICBDb21wbGV4VGV4dENvbnRy
b2xsZXIgY29udHJvbGxlcih0aGlzLCBydW4sIHRydWUsIGZhbGxiYWNrRm9udHMpOwogICAgIGlm
IChnbHlwaE92ZXJmbG93KSB7CkBAIC0xMjIsNyArMTIyLDcgQEAgaW50IEZvbnRDYXNjYWRlOjpv
ZmZzZXRGb3JQb3NpdGlvbkZvckNvbQogICAgIHJldHVybiBjb250cm9sbGVyLm9mZnNldEZvclBv
c2l0aW9uKHgsIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKTsKIH0KIAotY29uc3QgU2ltcGxlRm9udERh
dGEqIEZvbnRDYXNjYWRlOjpmb250RGF0YUZvckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNv
bnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBGb250RGF0YVZhcmlhbnQgdmFy
aWFudCkgY29uc3QKK2NvbnN0IEZvbnQqIEZvbnRDYXNjYWRlOjpmb250Rm9yQ29tYmluaW5nQ2hh
cmFjdGVyU2VxdWVuY2UoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIEZv
bnRWYXJpYW50IHZhcmlhbnQpIGNvbnN0CiB7CiAgICAgVUNoYXIzMiBiYXNlQ2hhcmFjdGVyOwog
ICAgIHNpemVfdCBiYXNlQ2hhcmFjdGVyTGVuZ3RoID0gMDsKQEAgLTEzNCw1MSArMTM0LDUxIEBA
IGNvbnN0IFNpbXBsZUZvbnREYXRhKiBGb250Q2FzY2FkZTo6Zm9udEQKICAgICAgICAgcmV0dXJu
IDA7CiAKICAgICBpZiAobGVuZ3RoID09IGJhc2VDaGFyYWN0ZXJMZW5ndGgpCi0gICAgICAgIHJl
dHVybiBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmZvbnREYXRhOworICAgICAgICByZXR1cm4gYmFz
ZUNoYXJhY3RlckdseXBoRGF0YS5mb250OwogCiAgICAgYm9vbCB0cmllZEJhc2VDaGFyYWN0ZXJG
b250RGF0YSA9IGZhbHNlOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgIWZhbGxiYWNrUmFu
Z2VzQXQoaSkuaXNOdWxsKCk7ICsraSkgewotICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSog
c2ltcGxlRm9udERhdGEgPSBmYWxsYmFja1Jhbmdlc0F0KGkpLmZvbnREYXRhRm9yQ2hhcmFjdGVy
KGJhc2VDaGFyYWN0ZXIpOwotICAgICAgICBpZiAoIXNpbXBsZUZvbnREYXRhKQorICAgICAgICBj
b25zdCBGb250KiBmb250ID0gZmFsbGJhY2tSYW5nZXNBdChpKS5mb250Rm9yQ2hhcmFjdGVyKGJh
c2VDaGFyYWN0ZXIpOworICAgICAgICBpZiAoIWZvbnQpCiAgICAgICAgICAgICBjb250aW51ZTsK
ICNpZiBQTEFURk9STShJT1MpCi0gICAgICAgIGlmIChiYXNlQ2hhcmFjdGVyID49IDB4MDYwMCAm
JiBiYXNlQ2hhcmFjdGVyIDw9IDB4MDZmZiAmJiBzaW1wbGVGb250RGF0YS0+c2hvdWxkTm90QmVV
c2VkRm9yQXJhYmljKCkpCisgICAgICAgIGlmIChiYXNlQ2hhcmFjdGVyID49IDB4MDYwMCAmJiBi
YXNlQ2hhcmFjdGVyIDw9IDB4MDZmZiAmJiBmb250LT5zaG91bGROb3RCZVVzZWRGb3JBcmFiaWMo
KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogI2VuZGlmCiAgICAgICAgIGlmICh2YXJpYW50ID09
IE5vcm1hbFZhcmlhbnQpIHsKLSAgICAgICAgICAgIGlmIChzaW1wbGVGb250RGF0YS0+cGxhdGZv
cm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCkgewotICAgICAgICAgICAgICAgIGlm
IChpc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGJhc2VDaGFyYWN0ZXIpICYmICFzaW1wbGVGb250RGF0
YS0+aGFzVmVydGljYWxHbHlwaHMoKSkgeworICAgICAgICAgICAgaWYgKGZvbnQtPnBsYXRmb3Jt
RGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwpIHsKKyAgICAgICAgICAgICAgICBpZiAo
aXNDSktJZGVvZ3JhcGhPclN5bWJvbChiYXNlQ2hhcmFjdGVyKSAmJiAhZm9udC0+aGFzVmVydGlj
YWxHbHlwaHMoKSkgewogICAgICAgICAgICAgICAgICAgICB2YXJpYW50ID0gQnJva2VuSWRlb2dy
YXBoVmFyaWFudDsKLSAgICAgICAgICAgICAgICAgICAgc2ltcGxlRm9udERhdGEgPSBzaW1wbGVG
b250RGF0YS0+YnJva2VuSWRlb2dyYXBoRm9udERhdGEoKS5nZXQoKTsKKyAgICAgICAgICAgICAg
ICAgICAgZm9udCA9IGZvbnQtPmJyb2tlbklkZW9ncmFwaEZvbnQoKS5nZXQoKTsKICAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKG1fZm9udERlc2NyaXB0aW9uLm5vbkNKS0dseXBoT3JpZW50YXRp
b24oKSA9PSBOb25DSktHbHlwaE9yaWVudGF0aW9uVmVydGljYWxSaWdodCkgewotICAgICAgICAg
ICAgICAgICAgICBTaW1wbGVGb250RGF0YSogdmVydGljYWxSaWdodEZvbnREYXRhID0gc2ltcGxl
Rm9udERhdGEtPnZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbkZvbnREYXRhKCkuZ2V0KCk7Ci0gICAg
ICAgICAgICAgICAgICAgIEdseXBoIHZlcnRpY2FsUmlnaHRHbHlwaCA9IHZlcnRpY2FsUmlnaHRG
b250RGF0YS0+Z2x5cGhGb3JDaGFyYWN0ZXIoYmFzZUNoYXJhY3Rlcik7CisgICAgICAgICAgICAg
ICAgICAgIEZvbnQqIHZlcnRpY2FsUmlnaHRGb250ID0gZm9udC0+dmVydGljYWxSaWdodE9yaWVu
dGF0aW9uRm9udCgpLmdldCgpOworICAgICAgICAgICAgICAgICAgICBHbHlwaCB2ZXJ0aWNhbFJp
Z2h0R2x5cGggPSB2ZXJ0aWNhbFJpZ2h0Rm9udC0+Z2x5cGhGb3JDaGFyYWN0ZXIoYmFzZUNoYXJh
Y3Rlcik7CiAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJ0aWNhbFJpZ2h0R2x5cGggPT0gYmFz
ZUNoYXJhY3RlckdseXBoRGF0YS5nbHlwaCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNpbXBs
ZUZvbnREYXRhID0gdmVydGljYWxSaWdodEZvbnREYXRhOworICAgICAgICAgICAgICAgICAgICAg
ICAgZm9udCA9IHZlcnRpY2FsUmlnaHRGb250OwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgIFNpbXBsZUZvbnREYXRhKiB1cHJpZ2h0Rm9udERhdGEgPSBzaW1w
bGVGb250RGF0YS0+dXByaWdodE9yaWVudGF0aW9uRm9udERhdGEoKS5nZXQoKTsKKyAgICAgICAg
ICAgICAgICAgICAgRm9udCogdXByaWdodEZvbnREYXRhID0gZm9udC0+dXByaWdodE9yaWVudGF0
aW9uRm9udCgpLmdldCgpOwogICAgICAgICAgICAgICAgICAgICBHbHlwaCB1cHJpZ2h0R2x5cGgg
PSB1cHJpZ2h0Rm9udERhdGEtPmdseXBoRm9yQ2hhcmFjdGVyKGJhc2VDaGFyYWN0ZXIpOwogICAg
ICAgICAgICAgICAgICAgICBpZiAodXByaWdodEdseXBoICE9IGJhc2VDaGFyYWN0ZXJHbHlwaERh
dGEuZ2x5cGgpCi0gICAgICAgICAgICAgICAgICAgICAgICBzaW1wbGVGb250RGF0YSA9IHVwcmln
aHRGb250RGF0YTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQgPSB1cHJpZ2h0Rm9udERh
dGE7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgaWYgKGNvbnN0IFNpbXBsZUZvbnREYXRhKiB2YXJpYW50Rm9udERhdGEgPSBz
aW1wbGVGb250RGF0YS0+dmFyaWFudEZvbnREYXRhKG1fZm9udERlc2NyaXB0aW9uLCB2YXJpYW50
KS5nZXQoKSkKLSAgICAgICAgICAgICAgICBzaW1wbGVGb250RGF0YSA9IHZhcmlhbnRGb250RGF0
YTsKKyAgICAgICAgICAgIGlmIChjb25zdCBGb250KiB2YXJpYW50Rm9udCA9IGZvbnQtPnZhcmlh
bnRGb250KG1fZm9udERlc2NyaXB0aW9uLCB2YXJpYW50KS5nZXQoKSkKKyAgICAgICAgICAgICAg
ICBmb250ID0gdmFyaWFudEZvbnQ7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoc2ltcGxlRm9u
dERhdGEgPT0gYmFzZUNoYXJhY3RlckdseXBoRGF0YS5mb250RGF0YSkKKyAgICAgICAgaWYgKGZv
bnQgPT0gYmFzZUNoYXJhY3RlckdseXBoRGF0YS5mb250KQogICAgICAgICAgICAgdHJpZWRCYXNl
Q2hhcmFjdGVyRm9udERhdGEgPSB0cnVlOwogCi0gICAgICAgIGlmIChzaW1wbGVGb250RGF0YS0+
Y2FuUmVuZGVyQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY2hhcmFjdGVycywgbGVuZ3RoKSkK
LSAgICAgICAgICAgIHJldHVybiBzaW1wbGVGb250RGF0YTsKKyAgICAgICAgaWYgKGZvbnQtPmNh
blJlbmRlckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNoYXJhY3RlcnMsIGxlbmd0aCkpCisg
ICAgICAgICAgICByZXR1cm4gZm9udDsKICAgICB9CiAKLSAgICBpZiAoIXRyaWVkQmFzZUNoYXJh
Y3RlckZvbnREYXRhICYmIGJhc2VDaGFyYWN0ZXJHbHlwaERhdGEuZm9udERhdGEgJiYgYmFzZUNo
YXJhY3RlckdseXBoRGF0YS5mb250RGF0YS0+Y2FuUmVuZGVyQ29tYmluaW5nQ2hhcmFjdGVyU2Vx
dWVuY2UoY2hhcmFjdGVycywgbGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuIGJhc2VDaGFyYWN0ZXJH
bHlwaERhdGEuZm9udERhdGE7CisgICAgaWYgKCF0cmllZEJhc2VDaGFyYWN0ZXJGb250RGF0YSAm
JiBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmZvbnQgJiYgYmFzZUNoYXJhY3RlckdseXBoRGF0YS5m
b250LT5jYW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjaGFyYWN0ZXJzLCBsZW5n
dGgpKQorICAgICAgICByZXR1cm4gYmFzZUNoYXJhY3RlckdseXBoRGF0YS5mb250OwogCi0gICAg
cmV0dXJuIFNpbXBsZUZvbnREYXRhOjpzeXN0ZW1GYWxsYmFjaygpOworICAgIHJldHVybiBGb250
OjpzeXN0ZW1GYWxsYmFjaygpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENhc2NhZGVNYWMubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDYXNj
YWRlTWFjLm1tCShyZXZpc2lvbiAxNzg1MTApCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9Gb250TWFjLm1tOjE3ODUxMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL21hYy9Gb250Q2FzY2FkZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQ3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAxMCwgMjAxMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxl
eGV5IFByb3NrdXJ5YWtvdgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQg
IlNpbXBsZUZvbnREYXRhLmgiCisKKyNpbXBvcnQgIkJsb2NrRXhjZXB0aW9ucy5oIgorI2ltcG9y
dCAiQ29sb3IuaCIKKyNpbXBvcnQgIkNvcmVHcmFwaGljc1NQSS5oIgorI2ltcG9ydCAiQ29yZVRl
eHRTUEkuaCIKKyNpbXBvcnQgIkZsb2F0UmVjdC5oIgorI2ltcG9ydCAiRm9udENhY2hlLmgiCisj
aW1wb3J0ICJGb250Q2FzY2FkZS5oIgorI2ltcG9ydCAiRm9udERlc2NyaXB0aW9uLmgiCisjaW1w
b3J0ICJTaGFyZWRCdWZmZXIuaCIKKyNpbXBvcnQgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIK
KyNpZiBVU0UoQVBQS0lUKQorI2ltcG9ydCA8QXBwS2l0L0FwcEtpdC5oPgorI2ltcG9ydCA8QXBw
bGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CisjZWxzZQorI2ltcG9ydCA8
Q29yZVRleHQvQ29yZVRleHQuaD4KKyNlbmRpZgorI2ltcG9ydCA8ZmxvYXQuaD4KKyNpbXBvcnQg
PHVuaWNvZGUvdWNoYXIuaD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW1wb3J0IDx3
dGYvU3RkTGliRXh0cmFzLmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisKKyNpZiAhUExB
VEZPUk0oSU9TKQorQGludGVyZmFjZSBOU0ZvbnQgKFdlYkFwcEtpdFNlY3JldEFQSSkKKy0gKEJP
T0wpX2lzRmFrZUZpeGVkUGl0Y2g7CitAZW5kCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCisjaWYgVVNFKEFQUEtJVCkKK3N0YXRpYyBib29sIGZvbnRIYXNWZXJ0aWNhbEdseXBocyhD
VEZvbnRSZWYgY3RGb250KQoreworICAgIC8vIFRoZSBjaGVjayBkb2Vzbid0IGxvb2sgbmVhdCBi
dXQgdGhpcyBpcyB3aGF0IEFwcEtpdCBkb2VzIGZvciB2ZXJ0aWNhbCB3cml0aW5nLi4uCisgICAg
UmV0YWluUHRyPENGQXJyYXlSZWY+IHRhYmxlVGFncyA9IGFkb3B0Q0YoQ1RGb250Q29weUF2YWls
YWJsZVRhYmxlcyhjdEZvbnQsIGtDVEZvbnRUYWJsZU9wdGlvbk5vT3B0aW9ucykpOworICAgIENG
SW5kZXggbnVtVGFibGVzID0gQ0ZBcnJheUdldENvdW50KHRhYmxlVGFncy5nZXQoKSk7CisgICAg
Zm9yIChDRkluZGV4IGluZGV4ID0gMDsgaW5kZXggPCBudW1UYWJsZXM7ICsraW5kZXgpIHsKKyAg
ICAgICAgQ1RGb250VGFibGVUYWcgdGFnID0gKENURm9udFRhYmxlVGFnKSh1aW50cHRyX3QpQ0ZB
cnJheUdldFZhbHVlQXRJbmRleCh0YWJsZVRhZ3MuZ2V0KCksIGluZGV4KTsKKyAgICAgICAgaWYg
KHRhZyA9PSBrQ1RGb250VGFibGVWaGVhIHx8IHRhZyA9PSBrQ1RGb250VGFibGVWT1JHKQorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworc3Rh
dGljIGJvb2wgaW5pdEZvbnREYXRhKFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSkKK3sKKyAgICBp
ZiAoIWZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5jZ0ZvbnQoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBOU1N0cmluZyAqd2ViRmFsbGJh
Y2tGb250RmFtaWx5KHZvaWQpCit7CisgICAgc3RhdGljIE5TU3RyaW5nICp3ZWJGYWxsYmFja0Zv
bnRGYW1pbHkgPSBbW1tOU0ZvbnQgc3lzdGVtRm9udE9mU2l6ZToxNi4wZl0gZmFtaWx5TmFtZV0g
cmV0YWluXTsKKyAgICByZXR1cm4gd2ViRmFsbGJhY2tGb250RmFtaWx5OworfQorCitjb25zdCBT
aW1wbGVGb250RGF0YSogU2ltcGxlRm9udERhdGE6OmNvbXBvc2l0ZUZvbnRSZWZlcmVuY2VGb250
RGF0YShOU0ZvbnQgKmtleSkgY29uc3QKK3sKKyAgICBpZiAoIWtleSB8fCBDRkVxdWFsKGFkb3B0
Q0YoQ1RGb250Q29weVBvc3RTY3JpcHROYW1lKENURm9udFJlZihrZXkpKSkuZ2V0KCksIENGU1RS
KCJMYXN0UmVzb3J0IikpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGlmICghbV9k
ZXJpdmVkRm9udERhdGEpCisgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gc3RkOjptYWtlX3Vu
aXF1ZTxEZXJpdmVkRm9udERhdGE+KGlzQ3VzdG9tRm9udCgpKTsKKworICAgIGF1dG8gYWRkUmVz
dWx0ID0gbV9kZXJpdmVkRm9udERhdGEtPmNvbXBvc2l0ZUZvbnRSZWZlcmVuY2VzLmFkZChrZXks
IG51bGxwdHIpOworICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkgeworICAgICAgICBib29s
IGlzVXNpbmdQcmludGVyRm9udCA9IHBsYXRmb3JtRGF0YSgpLmlzUHJpbnRlckZvbnQoKTsKKyAg
ICAgICAgTlNGb250ICpzdWJzdGl0dXRlRm9udCA9IGlzVXNpbmdQcmludGVyRm9udCA/IFtrZXkg
cHJpbnRlckZvbnRdIDogW2tleSBzY3JlZW5Gb250XTsKKworICAgICAgICBDVEZvbnRTeW1ib2xp
Y1RyYWl0cyB0cmFpdHMgPSBDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cygoQ1RGb250UmVmKXN1YnN0
aXR1dGVGb250KTsKKyAgICAgICAgYm9vbCBzeW50aGV0aWNCb2xkID0gcGxhdGZvcm1EYXRhKCku
c3ludGhldGljQm9sZCgpICYmICEodHJhaXRzICYga0NURm9udEJvbGRUcmFpdCk7CisgICAgICAg
IGJvb2wgc3ludGhldGljT2JsaXF1ZSA9IHBsYXRmb3JtRGF0YSgpLnN5bnRoZXRpY09ibGlxdWUo
KSAmJiAhKHRyYWl0cyAmIGtDVEZvbnRJdGFsaWNUcmFpdCk7CisKKyAgICAgICAgRm9udFBsYXRm
b3JtRGF0YSBzdWJzdGl0dXRlUGxhdGZvcm0oc3Vic3RpdHV0ZUZvbnQsIHBsYXRmb3JtRGF0YSgp
LnNpemUoKSwgaXNVc2luZ1ByaW50ZXJGb250LCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNPYmxp
cXVlLCBwbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpLCBwbGF0Zm9ybURhdGEoKS53aWR0aFZh
cmlhbnQoKSk7CisgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBTaW1wbGVGb250
RGF0YTo6Y3JlYXRlKHN1YnN0aXR1dGVQbGF0Zm9ybSwgaXNDdXN0b21Gb250KCkpOworICAgIH0K
KyAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKK30KKwordm9pZCBT
aW1wbGVGb250RGF0YTo6cGxhdGZvcm1Jbml0KCkKK3sKKyAgICBtX3N5bnRoZXRpY0JvbGRPZmZz
ZXQgPSBtX3BsYXRmb3JtRGF0YS5tX3N5bnRoZXRpY0JvbGQgPyAxLjBmIDogMC5mOworCisgICAg
Ym9vbCBmYWlsZWRTZXR1cCA9IGZhbHNlOworICAgIGlmICghaW5pdEZvbnREYXRhKHRoaXMpKSB7
CisgICAgICAgIC8vIEFjayEgU29tZXRoaW5nIHZlcnkgYmFkIGhhcHBlbmVkLCBsaWtlIGEgY29y
cnVwdCBmb250LgorICAgICAgICAvLyBUcnkgbG9va2luZyBmb3IgYW4gYWx0ZXJuYXRlICdiYXNl
JyBmb250IGZvciB0aGlzIHJlbmRlcmVyLgorCisgICAgICAgIC8vIFNwZWNpYWwgY2FzZSBoYWNr
IHRvIHVzZSAiVGltZXMgTmV3IFJvbWFuIiBpbiBwbGFjZSBvZiAiVGltZXMiLgorICAgICAgICAv
LyAiVGltZXMgUk8iIGlzIGEgY29tbW9uIGZvbnQgd2hvc2UgZmFtaWx5IG5hbWUgaXMgIlRpbWVz
Ii4KKyAgICAgICAgLy8gSXQgb3ZlcnJpZGVzIHRoZSBub3JtYWwgIlRpbWVzIiBmYW1pbHkgZm9u
dC4KKyAgICAgICAgLy8gSXQgYWxzbyBhcHBlYXJzIHRvIGhhdmUgYSBjb3JydXB0IHJlZ3VsYXIg
dmFyaWFudC4KKyAgICAgICAgTlNTdHJpbmcgKmZhbGxiYWNrRm9udEZhbWlseTsKKyAgICAgICAg
aWYgKFtbbV9wbGF0Zm9ybURhdGEubnNGb250KCkgZmFtaWx5TmFtZV0gaXNFcXVhbDpAIlRpbWVz
Il0pCisgICAgICAgICAgICBmYWxsYmFja0ZvbnRGYW1pbHkgPSBAIlRpbWVzIE5ldyBSb21hbiI7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGZhbGxiYWNrRm9udEZhbWlseSA9IHdlYkZhbGxi
YWNrRm9udEZhbWlseSgpOworICAgICAgICAKKyAgICAgICAgLy8gVHJ5IHNldHRpbmcgdXAgdGhl
IGFsdGVybmF0ZSBmb250LgorICAgICAgICAvLyBUaGlzIGlzIGEgbGFzdCBkaXRjaCBlZmZvcnQg
dG8gdXNlIGEgc3Vic3RpdHV0ZSBmb250IHdoZW4gc29tZXRoaW5nIGhhcyBnb25lIHdyb25nLgor
I2lmICFFUlJPUl9ESVNBQkxFRAorICAgICAgICBSZXRhaW5QdHI8TlNGb250PiBpbml0aWFsRm9u
dCA9IG1fcGxhdGZvcm1EYXRhLm5zRm9udCgpOworI2VuZGlmCisgICAgICAgIGlmIChtX3BsYXRm
b3JtRGF0YS5mb250KCkpCisgICAgICAgICAgICBtX3BsYXRmb3JtRGF0YS5zZXROU0ZvbnQoW1tO
U0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2VyXSBjb252ZXJ0Rm9udDptX3BsYXRmb3JtRGF0
YS5uc0ZvbnQoKSB0b0ZhbWlseTpmYWxsYmFja0ZvbnRGYW1pbHldKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgbV9wbGF0Zm9ybURhdGEuc2V0TlNGb250KFtOU0ZvbnQgZm9udFdpdGhOYW1l
OmZhbGxiYWNrRm9udEZhbWlseSBzaXplOm1fcGxhdGZvcm1EYXRhLnNpemUoKV0pOworICAgICAg
ICBpZiAoIWluaXRGb250RGF0YSh0aGlzKSkgeworICAgICAgICAgICAgaWYgKFtmYWxsYmFja0Zv
bnRGYW1pbHkgaXNFcXVhbDpAIlRpbWVzIE5ldyBSb21hbiJdKSB7CisgICAgICAgICAgICAgICAg
Ly8gT0ssIGNvdWxkbid0IHNldHVwIFRpbWVzIE5ldyBSb21hbiBhcyBhbiBhbHRlcm5hdGUgdG8g
VGltZXMsIGZhbGxiYWNrCisgICAgICAgICAgICAgICAgLy8gb24gdGhlIHN5c3RlbSBmb250LiAg
SWYgdGhpcyBmYWlscyB3ZSBoYXZlIG5vIGFsdGVybmF0aXZlIGxlZnQuCisgICAgICAgICAgICAg
ICAgbV9wbGF0Zm9ybURhdGEuc2V0TlNGb250KFtbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFu
YWdlcl0gY29udmVydEZvbnQ6bV9wbGF0Zm9ybURhdGEubnNGb250KCkgdG9GYW1pbHk6d2ViRmFs
bGJhY2tGb250RmFtaWx5KCldKTsKKyAgICAgICAgICAgICAgICBpZiAoIWluaXRGb250RGF0YSh0
aGlzKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBXZSB0cmllZCwgVGltZXMsIFRpbWVzIE5l
dyBSb21hbiwgYW5kIHRoZSBzeXN0ZW0gZm9udC4gTm8gam95LiBXZSBoYXZlIHRvIGdpdmUgdXAu
CisgICAgICAgICAgICAgICAgICAgIExPR19FUlJPUigidW5hYmxlIHRvIGluaXRpYWxpemUgd2l0
aCBmb250ICVAIiwgaW5pdGlhbEZvbnQuZ2V0KCkpOworICAgICAgICAgICAgICAgICAgICBmYWls
ZWRTZXR1cCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAvLyBXZSB0cmllZCB0aGUgcmVxdWVzdGVkIGZvbnQgYW5kIHRoZSBz
eXN0ZW0gZm9udC4gTm8gam95LiBXZSBoYXZlIHRvIGdpdmUgdXAuCisgICAgICAgICAgICAgICAg
TE9HX0VSUk9SKCJ1bmFibGUgdG8gaW5pdGlhbGl6ZSB3aXRoIGZvbnQgJUAiLCBpbml0aWFsRm9u
dC5nZXQoKSk7CisgICAgICAgICAgICAgICAgZmFpbGVkU2V0dXAgPSB0cnVlOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gUmVwb3J0IHRoZSBwcm9ibGVtLgorICAgICAg
ICBMT0dfRVJST1IoIkNvcnJ1cHQgZm9udCBkZXRlY3RlZCwgdXNpbmcgJUAgaW4gcGxhY2Ugb2Yg
JUAuIiwKKyAgICAgICAgICAgIFttX3BsYXRmb3JtRGF0YS5uc0ZvbnQoKSBmYW1pbHlOYW1lXSwg
W2luaXRpYWxGb250LmdldCgpIGZhbWlseU5hbWVdKTsKKyAgICB9CisKKyAgICAvLyBJZiBhbGwg
ZWxzZSBmYWlscywgdHJ5IHRvIHNldCB1cCB1c2luZyB0aGUgc3lzdGVtIGZvbnQuCisgICAgLy8g
VGhpcyBpcyBwcm9iYWJseSBiZWNhdXNlIFRpbWVzIGFuZCBUaW1lcyBOZXcgUm9tYW4gYXJlIGJv
dGggdW5hdmFpbGFibGUuCisgICAgaWYgKGZhaWxlZFNldHVwKSB7CisgICAgICAgIG1fcGxhdGZv
cm1EYXRhLnNldE5TRm9udChbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6W21fcGxhdGZvcm1EYXRh
Lm5zRm9udCgpIHBvaW50U2l6ZV1dKTsKKyAgICAgICAgTE9HX0VSUk9SKCJmYWlsZWQgdG8gc2V0
IHVwIGZvbnQsIHVzaW5nIHN5c3RlbSBmb250ICVzIiwgbV9wbGF0Zm9ybURhdGEuZm9udCgpKTsK
KyAgICAgICAgaW5pdEZvbnREYXRhKHRoaXMpOworICAgIH0KKyAgICAKKyAgICBpbnQgaUFzY2Vu
dDsKKyAgICBpbnQgaURlc2NlbnQ7CisgICAgaW50IGlDYXBIZWlnaHQ7CisgICAgaW50IGlMaW5l
R2FwOworICAgIHVuc2lnbmVkIHVuaXRzUGVyRW07CisgICAgaUFzY2VudCA9IENHRm9udEdldEFz
Y2VudChtX3BsYXRmb3JtRGF0YS5jZ0ZvbnQoKSk7CisgICAgLy8gU29tZSBmb250cyBlcnJvbmVv
dXNseSBzcGVjaWZ5IGEgcG9zaXRpdmUgZGVzY2VuZGVyIHZhbHVlLiBXZSBmb2xsb3cgQ29yZSBU
ZXh0IGluIGFzc3VtaW5nIHRoYXQKKyAgICAvLyBzdWNoIGZvbnRzIG1lYW50IHRoZSBzYW1lIGRp
c3RhbmNlLCBidXQgaW4gdGhlIHJldmVyc2UgZGlyZWN0aW9uLgorICAgIGlEZXNjZW50ID0gLWFi
cyhDR0ZvbnRHZXREZXNjZW50KG1fcGxhdGZvcm1EYXRhLmNnRm9udCgpKSk7CisgICAgaUNhcEhl
aWdodCA9IENHRm9udEdldENhcEhlaWdodChtX3BsYXRmb3JtRGF0YS5jZ0ZvbnQoKSk7CisgICAg
aUxpbmVHYXAgPSBDR0ZvbnRHZXRMZWFkaW5nKG1fcGxhdGZvcm1EYXRhLmNnRm9udCgpKTsKKyAg
ICB1bml0c1BlckVtID0gQ0dGb250R2V0VW5pdHNQZXJFbShtX3BsYXRmb3JtRGF0YS5jZ0ZvbnQo
KSk7CisKKyAgICBmbG9hdCBwb2ludFNpemUgPSBtX3BsYXRmb3JtRGF0YS5tX3NpemU7CisgICAg
ZmxvYXQgYXNjZW50ID0gc2NhbGVFbVRvVW5pdHMoaUFzY2VudCwgdW5pdHNQZXJFbSkgKiBwb2lu
dFNpemU7CisgICAgZmxvYXQgZGVzY2VudCA9IC1zY2FsZUVtVG9Vbml0cyhpRGVzY2VudCwgdW5p
dHNQZXJFbSkgKiBwb2ludFNpemU7CisgICAgZmxvYXQgY2FwSGVpZ2h0ID0gc2NhbGVFbVRvVW5p
dHMoaUNhcEhlaWdodCwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemU7CisgICAgCisgICAgZmxvYXQg
bGluZUdhcCA9IHNjYWxlRW1Ub1VuaXRzKGlMaW5lR2FwLCB1bml0c1BlckVtKSAqIHBvaW50U2l6
ZTsKKworICAgIC8vIFdlIG5lZWQgdG8gYWRqdXN0IFRpbWVzLCBIZWx2ZXRpY2EsIGFuZCBDb3Vy
aWVyIHRvIGNsb3NlbHkgbWF0Y2ggdGhlCisgICAgLy8gdmVydGljYWwgbWV0cmljcyBvZiB0aGVp
ciBNaWNyb3NvZnQgY291bnRlcnBhcnRzIHRoYXQgYXJlIHRoZSBkZSBmYWN0bworICAgIC8vIHdl
YiBzdGFuZGFyZC4gVGhlIEFwcEtpdCBhZGp1c3RtZW50IG9mIDIwJSBpcyB0b28gYmlnIGFuZCBp
cworICAgIC8vIGluY29ycmVjdGx5IGFkZGVkIHRvIGxpbmUgc3BhY2luZywgc28gd2UgdXNlIGEg
MTUlIGFkanVzdG1lbnQgaW5zdGVhZAorICAgIC8vIGFuZCBhZGQgaXQgdG8gdGhlIGFzY2VudC4K
KyAgICBOU1N0cmluZyAqZmFtaWx5TmFtZSA9IFttX3BsYXRmb3JtRGF0YS5uc0ZvbnQoKSBmYW1p
bHlOYW1lXTsKKyAgICBpZiAoW2ZhbWlseU5hbWUgaXNFcXVhbFRvU3RyaW5nOkAiVGltZXMiXSB8
fCBbZmFtaWx5TmFtZSBpc0VxdWFsVG9TdHJpbmc6QCJIZWx2ZXRpY2EiXSB8fCBbZmFtaWx5TmFt
ZSBpc0VxdWFsVG9TdHJpbmc6QCJDb3VyaWVyIl0pCisgICAgICAgIGFzY2VudCArPSBmbG9vcmYo
KChhc2NlbnQgKyBkZXNjZW50KSAqIDAuMTVmKSArIDAuNWYpOworCisgICAgLy8gQ29tcHV0ZSBh
bmQgc3RvcmUgbGluZSBzcGFjaW5nLCBiZWZvcmUgdGhlIGxpbmUgbWV0cmljcyBoYWNrcyBhcmUg
YXBwbGllZC4KKyAgICBtX2ZvbnRNZXRyaWNzLnNldExpbmVTcGFjaW5nKGxyb3VuZGYoYXNjZW50
KSArIGxyb3VuZGYoZGVzY2VudCkgKyBscm91bmRmKGxpbmVHYXApKTsKKworICAgIC8vIEhhY2sg
SGlyYWdpbm8gbGluZSBtZXRyaWNzIHRvIGFsbG93IHJvb20gZm9yIG1hcmtlZCB0ZXh0IHVuZGVy
bGluZXMuCisgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzUzODYxODM+CisgICAgaWYgKGRlc2NlbnQg
PCAzICYmIGxpbmVHYXAgPj0gMyAmJiBbZmFtaWx5TmFtZSBoYXNQcmVmaXg6QCJIaXJhZ2lubyJd
KSB7CisgICAgICAgIGxpbmVHYXAgLT0gMyAtIGRlc2NlbnQ7CisgICAgICAgIGRlc2NlbnQgPSAz
OworICAgIH0KKyAgICAKKyAgICBpZiAocGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBW
ZXJ0aWNhbCAmJiAhaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaygpKQorICAgICAgICBtX2hhc1Zl
cnRpY2FsR2x5cGhzID0gZm9udEhhc1ZlcnRpY2FsR2x5cGhzKG1fcGxhdGZvcm1EYXRhLmN0Rm9u
dCgpKTsKKworICAgIGZsb2F0IHhIZWlnaHQ7CisKKyAgICBpZiAocGxhdGZvcm1EYXRhKCkub3Jp
ZW50YXRpb24oKSA9PSBIb3Jpem9udGFsKSB7CisgICAgICAgIC8vIE1lYXN1cmUgdGhlIGFjdHVh
bCBjaGFyYWN0ZXIgIngiLCBzaW5jZSBpdCdzIHBvc3NpYmxlIGZvciBpdCB0byBleHRlbmQgYmVs
b3cgdGhlIGJhc2VsaW5lLCBhbmQgd2UgbmVlZCB0aGUKKyAgICAgICAgLy8gcmVwb3J0ZWQgeC1o
ZWlnaHQgdG8gb25seSBpbmNsdWRlIHRoZSBwb3J0aW9uIG9mIHRoZSBnbHlwaCB0aGF0IGlzIGFi
b3ZlIHRoZSBiYXNlbGluZS4KKyAgICAgICAgTlNHbHlwaCB4R2x5cGggPSBnbHlwaEZvckNoYXJh
Y3RlcigneCcpOworICAgICAgICBpZiAoeEdseXBoKQorICAgICAgICAgICAgeEhlaWdodCA9IC1D
R1JlY3RHZXRNaW5ZKHBsYXRmb3JtQm91bmRzRm9yR2x5cGgoeEdseXBoKSk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHhIZWlnaHQgPSBzY2FsZUVtVG9Vbml0cyhDR0ZvbnRHZXRYSGVpZ2h0
KG1fcGxhdGZvcm1EYXRhLmNnRm9udCgpKSwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemU7CisgICAg
fSBlbHNlCisgICAgICAgIHhIZWlnaHQgPSB2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250RGF0
YSgpLT5mb250TWV0cmljcygpLnhIZWlnaHQoKTsKKworICAgIG1fZm9udE1ldHJpY3Muc2V0VW5p
dHNQZXJFbSh1bml0c1BlckVtKTsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldEFzY2VudChhc2NlbnQp
OworICAgIG1fZm9udE1ldHJpY3Muc2V0RGVzY2VudChkZXNjZW50KTsKKyAgICBtX2ZvbnRNZXRy
aWNzLnNldENhcEhlaWdodChjYXBIZWlnaHQpOworICAgIG1fZm9udE1ldHJpY3Muc2V0TGluZUdh
cChsaW5lR2FwKTsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldFhIZWlnaHQoeEhlaWdodCk7Cit9CisK
K3N0YXRpYyBDRkRhdGFSZWYgY29weUZvbnRUYWJsZUZvclRhZyhGb250UGxhdGZvcm1EYXRhJiBw
bGF0Zm9ybURhdGEsIEZvdXJDaGFyQ29kZSB0YWJsZU5hbWUpCit7CisgICAgcmV0dXJuIENHRm9u
dENvcHlUYWJsZUZvclRhZyhwbGF0Zm9ybURhdGEuY2dGb250KCksIHRhYmxlTmFtZSk7Cit9CisK
K3ZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpCit7CisgICAgbV9h
dmdDaGFyV2lkdGggPSAwOworICAgIG1fbWF4Q2hhcldpZHRoID0gMDsKKyAgICAKKyAgICBSZXRh
aW5QdHI8Q0ZEYXRhUmVmPiBvczJUYWJsZSA9IGFkb3B0Q0YoY29weUZvbnRUYWJsZUZvclRhZyht
X3BsYXRmb3JtRGF0YSwgJ09TLzInKSk7CisgICAgaWYgKG9zMlRhYmxlICYmIENGRGF0YUdldExl
bmd0aChvczJUYWJsZS5nZXQoKSkgPj0gNCkgeworICAgICAgICBjb25zdCBVSW50OCogb3MyID0g
Q0ZEYXRhR2V0Qnl0ZVB0cihvczJUYWJsZS5nZXQoKSk7CisgICAgICAgIFNJbnQxNiBvczJBdmdD
aGFyV2lkdGggPSBvczJbMl0gKiAyNTYgKyBvczJbM107CisgICAgICAgIG1fYXZnQ2hhcldpZHRo
ID0gc2NhbGVFbVRvVW5pdHMob3MyQXZnQ2hhcldpZHRoLCBtX2ZvbnRNZXRyaWNzLnVuaXRzUGVy
RW0oKSkgKiBtX3BsYXRmb3JtRGF0YS5tX3NpemU7CisgICAgfQorCisgICAgUmV0YWluUHRyPENG
RGF0YVJlZj4gaGVhZFRhYmxlID0gYWRvcHRDRihjb3B5Rm9udFRhYmxlRm9yVGFnKG1fcGxhdGZv
cm1EYXRhLCAnaGVhZCcpKTsKKyAgICBpZiAoaGVhZFRhYmxlICYmIENGRGF0YUdldExlbmd0aCho
ZWFkVGFibGUuZ2V0KCkpID49IDQyKSB7CisgICAgICAgIGNvbnN0IFVJbnQ4KiBoZWFkID0gQ0ZE
YXRhR2V0Qnl0ZVB0cihoZWFkVGFibGUuZ2V0KCkpOworICAgICAgICB1c2hvcnQgdXhNaW4gPSBo
ZWFkWzM2XSAqIDI1NiArIGhlYWRbMzddOworICAgICAgICB1c2hvcnQgdXhNYXggPSBoZWFkWzQw
XSAqIDI1NiArIGhlYWRbNDFdOworICAgICAgICBTSW50MTYgeE1pbiA9IHN0YXRpY19jYXN0PFNJ
bnQxNj4odXhNaW4pOworICAgICAgICBTSW50MTYgeE1heCA9IHN0YXRpY19jYXN0PFNJbnQxNj4o
dXhNYXgpOworICAgICAgICBmbG9hdCBkaWZmID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHhNYXggLSB4
TWluKTsKKyAgICAgICAgbV9tYXhDaGFyV2lkdGggPSBzY2FsZUVtVG9Vbml0cyhkaWZmLCBtX2Zv
bnRNZXRyaWNzLnVuaXRzUGVyRW0oKSkgKiBtX3BsYXRmb3JtRGF0YS5tX3NpemU7CisgICAgfQor
CisgICAgLy8gRmFsbGJhY2sgdG8gYSBjcm9zcy1wbGF0Zm9ybSBlc3RpbWF0ZSwgd2hpY2ggd2ls
bCBwb3B1bGF0ZSB0aGVzZSB2YWx1ZXMgaWYgdGhleSBhcmUgbm9uLXBvc2l0aXZlLgorICAgIGlu
aXRDaGFyV2lkdGhzKCk7Cit9CisjZW5kaWYgLy8gVVNFKEFQUEtJVCkKKwordm9pZCBTaW1wbGVG
b250RGF0YTo6cGxhdGZvcm1EZXN0cm95KCkKK3sKK30KKworI2lmICFQTEFURk9STShJT1MpCitQ
YXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1DcmVhdGVT
Y2FsZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxv
YXQgc2NhbGVGYWN0b3IpIGNvbnN0Cit7CisgICAgaWYgKGlzQ3VzdG9tRm9udCgpKSB7CisgICAg
ICAgIEZvbnRQbGF0Zm9ybURhdGEgc2NhbGVkRm9udERhdGEobV9wbGF0Zm9ybURhdGEpOworICAg
ICAgICBzY2FsZWRGb250RGF0YS5tX3NpemUgPSBzY2FsZWRGb250RGF0YS5tX3NpemUgKiBzY2Fs
ZUZhY3RvcjsKKyAgICAgICAgcmV0dXJuIFNpbXBsZUZvbnREYXRhOjpjcmVhdGUoc2NhbGVkRm9u
dERhdGEsIHRydWUsIGZhbHNlKTsKKyAgICB9CisKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQ
VElPTlM7CisgICAgZmxvYXQgc2l6ZSA9IG1fcGxhdGZvcm1EYXRhLnNpemUoKSAqIHNjYWxlRmFj
dG9yOworICAgIEZvbnRQbGF0Zm9ybURhdGEgc2NhbGVkRm9udERhdGEoW1tOU0ZvbnRNYW5hZ2Vy
IHNoYXJlZEZvbnRNYW5hZ2VyXSBjb252ZXJ0Rm9udDptX3BsYXRmb3JtRGF0YS5uc0ZvbnQoKSB0
b1NpemU6c2l6ZV0sIHNpemUsIG1fcGxhdGZvcm1EYXRhLmlzUHJpbnRlckZvbnQoKSwgZmFsc2Us
IGZhbHNlLCBtX3BsYXRmb3JtRGF0YS5vcmllbnRhdGlvbigpKTsKKworICAgIC8vIEFwcEtpdCBy
ZXNldHMgdGhlIHR5cGUgaW5mb3JtYXRpb24gKHNjcmVlbi9wcmludGVyKSB3aGVuIHlvdSBjb252
ZXJ0IGEgZm9udCB0byBhIGRpZmZlcmVudCBzaXplLgorICAgIC8vIFdlIGhhdmUgdG8gZml4IHVw
IHRoZSBmb250IHRoYXQgd2UncmUgaGFuZGVkIGJhY2suCisgICAgc2NhbGVkRm9udERhdGEuc2V0
TlNGb250KGZvbnREZXNjcmlwdGlvbi51c2VQcmludGVyRm9udCgpID8gW3NjYWxlZEZvbnREYXRh
Lm5zRm9udCgpIHByaW50ZXJGb250XSA6IFtzY2FsZWRGb250RGF0YS5uc0ZvbnQoKSBzY3JlZW5G
b250XSk7CisKKyAgICBpZiAoc2NhbGVkRm9udERhdGEuZm9udCgpKSB7CisgICAgICAgIE5TRm9u
dE1hbmFnZXIgKmZvbnRNYW5hZ2VyID0gW05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJd
OworICAgICAgICBOU0ZvbnRUcmFpdE1hc2sgZm9udFRyYWl0cyA9IFtmb250TWFuYWdlciB0cmFp
dHNPZkZvbnQ6bV9wbGF0Zm9ybURhdGEubnNGb250KCldOworCisgICAgICAgIGlmIChtX3BsYXRm
b3JtRGF0YS5tX3N5bnRoZXRpY0JvbGQpCisgICAgICAgICAgICBmb250VHJhaXRzIHw9IE5TQm9s
ZEZvbnRNYXNrOworICAgICAgICBpZiAobV9wbGF0Zm9ybURhdGEubV9zeW50aGV0aWNPYmxpcXVl
KQorICAgICAgICAgICAgZm9udFRyYWl0cyB8PSBOU0l0YWxpY0ZvbnRNYXNrOworCisgICAgICAg
IE5TRm9udFRyYWl0TWFzayBzY2FsZWRGb250VHJhaXRzID0gW2ZvbnRNYW5hZ2VyIHRyYWl0c09m
Rm9udDpzY2FsZWRGb250RGF0YS5uc0ZvbnQoKV07CisgICAgICAgIHNjYWxlZEZvbnREYXRhLm1f
c3ludGhldGljQm9sZCA9IChmb250VHJhaXRzICYgTlNCb2xkRm9udE1hc2spICYmICEoc2NhbGVk
Rm9udFRyYWl0cyAmIE5TQm9sZEZvbnRNYXNrKTsKKyAgICAgICAgc2NhbGVkRm9udERhdGEubV9z
eW50aGV0aWNPYmxpcXVlID0gKGZvbnRUcmFpdHMgJiBOU0l0YWxpY0ZvbnRNYXNrKSAmJiAhKHNj
YWxlZEZvbnRUcmFpdHMgJiBOU0l0YWxpY0ZvbnRNYXNrKTsKKworICAgICAgICByZXR1cm4gZm9u
dENhY2hlKCkuZm9udEZvclBsYXRmb3JtRGF0YShzY2FsZWRGb250RGF0YSk7CisgICAgfQorICAg
IEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBT
aW1wbGVGb250RGF0YTo6ZGV0ZXJtaW5lUGl0Y2goKQoreworICAgIE5TRm9udCogZiA9IG1fcGxh
dGZvcm1EYXRhLm5zRm9udCgpOworICAgIC8vIFNwZWNpYWwgY2FzZSBPc2FrYS1Nb25vLgorICAg
IC8vIEFjY29yZGluZyB0byA8cmRhcjovL3Byb2JsZW0vMzk5OTQ2Nz4sIHdlIHNob3VsZCB0cmVh
dCBPc2FrYS1Nb25vIGFzIGZpeGVkIHBpdGNoLgorICAgIC8vIE5vdGUgdGhhdCB0aGUgQXBwS2l0
IGRvZXMgbm90IHJlcG9ydCBPc2FrYS1Nb25vIGFzIGZpeGVkIHBpdGNoLgorCisgICAgLy8gU3Bl
Y2lhbCBjYXNlIE1TLVBHb3RoaWMuCisgICAgLy8gQWNjb3JkaW5nIHRvIDxyZGFyOi8vcHJvYmxl
bS80MDMyOTM4Piwgd2Ugc2hvdWxkIG5vdCB0cmVhdCBNUy1QR290aGljIGFzIGZpeGVkIHBpdGNo
LgorICAgIC8vIE5vdGUgdGhhdCBBcHBLaXQgZG9lcyByZXBvcnQgTVMtUEdvdGhpYyBhcyBmaXhl
ZCBwaXRjaC4KKworICAgIC8vIFNwZWNpYWwgY2FzZSBNb25vdHlwZUNvcnNpdmEKKyAgICAvLyBB
Y2NvcmRpbmcgdG8gPHJkYXI6Ly9wcm9ibGVtLzU0NTQ3MDQ+LCB3ZSBzaG91bGQgbm90IHRyZWF0
IE1vbm90eXBlQ29yc2l2YSBhcyBmaXhlZCBwaXRjaC4KKyAgICAvLyBOb3RlIHRoYXQgQXBwS2l0
IGRvZXMgcmVwb3J0IE1vbm90eXBlQ29yc2l2YSBhcyBmaXhlZCBwaXRjaC4KKworICAgIE5TU3Ry
aW5nICpuYW1lID0gW2YgZm9udE5hbWVdOworICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSAoW2Yg
aXNGaXhlZFBpdGNoXSB8fCBbZiBfaXNGYWtlRml4ZWRQaXRjaF0gfHwKKyAgICAgICAgICAgW25h
bWUgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZTpAIk9zYWthLU1vbm8iXSA9PSBOU09yZGVyZWRTYW1l
KSAmJgorICAgICAgICAgICBbbmFtZSBjYXNlSW5zZW5zaXRpdmVDb21wYXJlOkAiTVMtUEdvdGhp
YyJdICE9IE5TT3JkZXJlZFNhbWUgJiYKKyAgICAgICAgICAgW25hbWUgY2FzZUluc2Vuc2l0aXZl
Q29tcGFyZTpAIk1vbm90eXBlQ29yc2l2YSJdICE9IE5TT3JkZXJlZFNhbWU7Cit9CisjZW5kaWYg
Ly8gIVBMQVRGT1JNKElPUykKKworRmxvYXRSZWN0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUJv
dW5kc0ZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAoreworICAgIEZsb2F0UmVjdCBib3VuZGlu
Z0JveDsKKyAgICBib3VuZGluZ0JveCA9IENURm9udEdldEJvdW5kaW5nUmVjdHNGb3JHbHlwaHMo
bV9wbGF0Zm9ybURhdGEuY3RGb250KCksIHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0g
VmVydGljYWwgPyBrQ1RGb250VmVydGljYWxPcmllbnRhdGlvbiA6IGtDVEZvbnRIb3Jpem9udGFs
T3JpZW50YXRpb24sICZnbHlwaCwgMCwgMSk7CisgICAgYm91bmRpbmdCb3guc2V0WSgtYm91bmRp
bmdCb3gubWF4WSgpKTsKKyAgICBpZiAobV9zeW50aGV0aWNCb2xkT2Zmc2V0KQorICAgICAgICBi
b3VuZGluZ0JveC5zZXRXaWR0aChib3VuZGluZ0JveC53aWR0aCgpICsgbV9zeW50aGV0aWNCb2xk
T2Zmc2V0KTsKKworICAgIHJldHVybiBib3VuZGluZ0JveDsKK30KKworI2lmIFBMQVRGT1JNKE1B
QykKK2lubGluZSBDR0ZvbnRSZW5kZXJpbmdTdHlsZSBTaW1wbGVGb250RGF0YTo6cmVuZGVyaW5n
U3R5bGUoKSBjb25zdAoreworICAgIENHRm9udFJlbmRlcmluZ1N0eWxlIHN0eWxlID0ga0NHRm9u
dFJlbmRlcmluZ1N0eWxlQW50aWFsaWFzaW5nIHwga0NHRm9udFJlbmRlcmluZ1N0eWxlU3VicGl4
ZWxQb3NpdGlvbmluZyB8IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZVN1YnBpeGVsUXVhbnRpemF0aW9u
OworICAgIE5TRm9udCAqZm9udCA9IHBsYXRmb3JtRGF0YSgpLm5zRm9udCgpOworICAgIGlmIChm
b250KSB7CisgICAgICAgIHN3aXRjaCAoW2ZvbnQgcmVuZGVyaW5nTW9kZV0pIHsKKyAgICAgICAg
Y2FzZSBOU0ZvbnRJbnRlZ2VyQWR2YW5jZW1lbnRzUmVuZGVyaW5nTW9kZToKKyAgICAgICAgICAg
IHN0eWxlID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE5TRm9udEFudGlh
bGlhc2VkSW50ZWdlckFkdmFuY2VtZW50c1JlbmRlcmluZ01vZGU6CisgICAgICAgICAgICBzdHls
ZSA9IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZUFudGlhbGlhc2luZzsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9
CisgICAgcmV0dXJuIHN0eWxlOworfQorCitpbmxpbmUgYm9vbCBTaW1wbGVGb250RGF0YTo6YWR2
YW5jZUZvckNvbG9yQml0bWFwRm9udChHbHlwaCBnbHlwaCwgQ0dTaXplJiBhZHZhbmNlKSBjb25z
dAoreworICAgIE5TRm9udCAqZm9udCA9IHBsYXRmb3JtRGF0YSgpLm5zRm9udCgpOworICAgIGlm
ICghZm9udCB8fCAhcGxhdGZvcm1EYXRhKCkuaXNDb2xvckJpdG1hcEZvbnQoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGFkdmFuY2UgPSBOU1NpemVUb0NHU2l6ZShbZm9udCBhZHZhbmNl
bWVudEZvckdseXBoOmdseXBoXSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisjZW5kaWYKKworc3Rh
dGljIGJvb2wgaGFzQ3VzdG9tVHJhY2tpbmcoQ1RGb250UmVmIGZvbnQpCit7CisjaWYgUExBVEZP
Uk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEIDwgMTA5MAorICAgIFVO
VVNFRF9QQVJBTShmb250KTsKKyAgICByZXR1cm4gZmFsc2U7CisjZWxzZQorICAgIHJldHVybiBD
VEZvbnREZXNjcmlwdG9ySXNTeXN0ZW1VSUZvbnQoYWRvcHRDRihDVEZvbnRDb3B5Rm9udERlc2Ny
aXB0b3IoZm9udCkpLmdldCgpKTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNF
bW9qaShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEpCit7CisjaWYgUExBVEZP
Uk0oSU9TKQorICAgIHJldHVybiBwbGF0Zm9ybURhdGEubV9pc0Vtb2ppOworI2Vsc2UKKyAgICBV
TlVTRURfUEFSQU0ocGxhdGZvcm1EYXRhKTsKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30K
KworaW5saW5lIGJvb2wgU2ltcGxlRm9udERhdGE6OmNhblVzZUZhc3RHbHlwaEFkdmFuY2VHZXR0
ZXIoR2x5cGggZ2x5cGgsIENHU2l6ZSYgYWR2YW5jZSwgYm9vbCYgcG9wdWxhdGVkQWR2YW5jZSkg
Y29uc3QKK3sKKyAgICAvLyBGYXN0IGdldHRlciBkb2Vzbid0IHRha2UgY3VzdG9tIHRyYWNraW5n
IGludG8gYWNjb3VudAorICAgIGlmIChoYXNDdXN0b21UcmFja2luZyhwbGF0Zm9ybURhdGEoKS5j
dEZvbnQoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAvLyBGYXN0IGdldHRlciBkb2Vz
bid0IHdvcmsgZm9yIGVtb2ppCisgICAgaWYgKGlzRW1vamkocGxhdGZvcm1EYXRhKCkpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gLi4uIG9yIGZvciBhbnkgYml0bWFwIGZvbnRzIGlu
IGdlbmVyYWwKKyAgICBpZiAoYWR2YW5jZUZvckNvbG9yQml0bWFwRm9udChnbHlwaCwgYWR2YW5j
ZSkpIHsKKyAgICAgICAgcG9wdWxhdGVkQWR2YW5jZSA9IHRydWU7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Zsb2F0IFNpbXBsZUZvbnREYXRh
OjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0Cit7CisgICAgQ0dTaXpl
IGFkdmFuY2UgPSBDR1NpemVaZXJvOworICAgIGJvb2wgaG9yaXpvbnRhbCA9IHBsYXRmb3JtRGF0
YSgpLm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbDsKKyAgICBib29sIHBvcHVsYXRlZEFkdmFu
Y2UgPSBmYWxzZTsKKyAgICBpZiAoKGhvcml6b250YWwgfHwgbV9pc0Jyb2tlbklkZW9ncmFwaEZh
bGxiYWNrKSAmJiBjYW5Vc2VGYXN0R2x5cGhBZHZhbmNlR2V0dGVyKGdseXBoLCBhZHZhbmNlLCBw
b3B1bGF0ZWRBZHZhbmNlKSkgeworICAgICAgICBmbG9hdCBwb2ludFNpemUgPSBwbGF0Zm9ybURh
dGEoKS5tX3NpemU7CisgICAgICAgIENHQWZmaW5lVHJhbnNmb3JtIG0gPSBDR0FmZmluZVRyYW5z
Zm9ybU1ha2VTY2FsZShwb2ludFNpemUsIHBvaW50U2l6ZSk7CisgICAgICAgIGlmICghQ0dGb250
R2V0R2x5cGhBZHZhbmNlc0ZvclN0eWxlKHBsYXRmb3JtRGF0YSgpLmNnRm9udCgpLCAmbSwgcmVu
ZGVyaW5nU3R5bGUoKSwgJmdseXBoLCAxLCAmYWR2YW5jZSkpIHsKKyAgICAgICAgICAgIFJldGFp
blB0cjxDRlN0cmluZ1JlZj4gZnVsbE5hbWUgPSBhZG9wdENGKENHRm9udENvcHlGdWxsTmFtZShw
bGF0Zm9ybURhdGEoKS5jZ0ZvbnQoKSkpOworICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUg
dG8gY2FjaGUgZ2x5cGggd2lkdGhzIGZvciAlQCAlZiIsIGZ1bGxOYW1lLmdldCgpLCBwb2ludFNp
emUpOworICAgICAgICAgICAgYWR2YW5jZS53aWR0aCA9IDA7CisgICAgICAgIH0KKyAgICB9IGVs
c2UgaWYgKCFwb3B1bGF0ZWRBZHZhbmNlKQorICAgICAgICBDVEZvbnRHZXRBZHZhbmNlc0Zvckds
eXBocyhtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSwgaG9yaXpvbnRhbCA/IGtDVEZvbnRIb3Jpem9u
dGFsT3JpZW50YXRpb24gOiBrQ1RGb250VmVydGljYWxPcmllbnRhdGlvbiwgJmdseXBoLCAmYWR2
YW5jZSwgMSk7CisKKyAgICByZXR1cm4gYWR2YW5jZS53aWR0aCArIG1fc3ludGhldGljQm9sZE9m
ZnNldDsKK30KKworc3RydWN0IFByb3ZpZGVySW5mbyB7CisgICAgY29uc3QgVUNoYXIqIGNoYXJh
Y3RlcnM7CisgICAgc2l6ZV90IGxlbmd0aDsKKyAgICBDRkRpY3Rpb25hcnlSZWYgYXR0cmlidXRl
czsKK307CisKK3N0YXRpYyBjb25zdCBVbmlDaGFyKiBwcm92aWRlU3RyaW5nQW5kQXR0cmlidXRl
cyhDRkluZGV4IHN0cmluZ0luZGV4LCBDRkluZGV4KiBjb3VudCwgQ0ZEaWN0aW9uYXJ5UmVmKiBh
dHRyaWJ1dGVzLCB2b2lkKiBjb250ZXh0KQoreworICAgIFByb3ZpZGVySW5mbyogaW5mbyA9IHN0
YXRpY19jYXN0PHN0cnVjdCBQcm92aWRlckluZm8qPihjb250ZXh0KTsKKyAgICBpZiAoc3RyaW5n
SW5kZXggPCAwIHx8IHN0YXRpY19jYXN0PHNpemVfdD4oc3RyaW5nSW5kZXgpID49IGluZm8tPmxl
bmd0aCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAqY291bnQgPSBpbmZvLT5sZW5ndGggLSBz
dHJpbmdJbmRleDsKKyAgICAqYXR0cmlidXRlcyA9IGluZm8tPmF0dHJpYnV0ZXM7CisgICAgcmV0
dXJuIGluZm8tPmNoYXJhY3RlcnMgKyBzdHJpbmdJbmRleDsKK30KKworYm9vbCBTaW1wbGVGb250
RGF0YTo6Y2FuUmVuZGVyQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY29uc3QgVUNoYXIqIGNo
YXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKKworICAgIGlmICghbV9jb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZVN1cHBvcnQpCisg
ICAgICAgIG1fY29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2VTdXBwb3J0ID0gc3RkOjptYWtlX3Vu
aXF1ZTxIYXNoTWFwPFN0cmluZywgYm9vbD4+KCk7CisKKyAgICBXVEY6Okhhc2hNYXA8U3RyaW5n
LCBib29sPjo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IG1fY29tYmluaW5nQ2hhcmFjdGVyU2VxdWVu
Y2VTdXBwb3J0LT5hZGQoU3RyaW5nKGNoYXJhY3RlcnMsIGxlbmd0aCksIGZhbHNlKTsKKyAgICBp
ZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZTsKKworICAgIFJldGFpblB0cjxDRlR5cGVSZWY+IGZvbnRFcXVhbGl0eU9iamVj
dCA9IHBsYXRmb3JtRGF0YSgpLm9iamVjdEZvckVxdWFsaXR5Q2hlY2soKTsKKworICAgIFByb3Zp
ZGVySW5mbyBpbmZvID0geyBjaGFyYWN0ZXJzLCBsZW5ndGgsIGdldENGU3RyaW5nQXR0cmlidXRl
cygwLCBwbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpKSB9OworICAgIFJldGFpblB0cjxDVExp
bmVSZWY+IGxpbmUgPSBhZG9wdENGKENUTGluZUNyZWF0ZVdpdGhVbmlDaGFyUHJvdmlkZXIoJnBy
b3ZpZGVTdHJpbmdBbmRBdHRyaWJ1dGVzLCAwLCAmaW5mbykpOworCisgICAgQ0ZBcnJheVJlZiBy
dW5BcnJheSA9IENUTGluZUdldEdseXBoUnVucyhsaW5lLmdldCgpKTsKKyAgICBDRkluZGV4IHJ1
bkNvdW50ID0gQ0ZBcnJheUdldENvdW50KHJ1bkFycmF5KTsKKworICAgIGZvciAoQ0ZJbmRleCBy
ID0gMDsgciA8IHJ1bkNvdW50OyByKyspIHsKKyAgICAgICAgQ1RSdW5SZWYgY3RSdW4gPSBzdGF0
aWNfY2FzdDxDVFJ1blJlZj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChydW5BcnJheSwgcikpOwor
ICAgICAgICBBU1NFUlQoQ0ZHZXRUeXBlSUQoY3RSdW4pID09IENUUnVuR2V0VHlwZUlEKCkpOwor
ICAgICAgICBDRkRpY3Rpb25hcnlSZWYgcnVuQXR0cmlidXRlcyA9IENUUnVuR2V0QXR0cmlidXRl
cyhjdFJ1bik7CisgICAgICAgIENURm9udFJlZiBydW5Gb250ID0gc3RhdGljX2Nhc3Q8Q1RGb250
UmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShydW5BdHRyaWJ1dGVzLCBrQ1RGb250QXR0cmlidXRl
TmFtZSkpOworICAgICAgICBpZiAoIUNGRXF1YWwoZm9udEVxdWFsaXR5T2JqZWN0LmdldCgpLCBG
b250UGxhdGZvcm1EYXRhOjpvYmplY3RGb3JFcXVhbGl0eUNoZWNrKHJ1bkZvbnQpLmdldCgpKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBhZGRSZXN1bHQuaXRlcmF0
b3ItPnZhbHVlID0gdHJ1ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRD
YXNjYWRlTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9Gb250Q2FzY2FkZU1hYy5tbQkod29ya2luZyBjb3B5KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDYXNjYWRlTWFjLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiwxMCArMjYsMTAgQEAKICNpbXBvcnQgIkNvcmVHcmFwaGljc1NQSS5oIgogI2ltcG9y
dCAiQ29yZVRleHRTUEkuaCIKICNpbXBvcnQgIkRhc2hBcnJheS5oIgorI2ltcG9ydCAiRm9udC5o
IgogI2ltcG9ydCAiR2x5cGhCdWZmZXIuaCIKICNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dC5oIgog
I2ltcG9ydCAiTG9nZ2luZy5oIgotI2ltcG9ydCAiU2ltcGxlRm9udERhdGEuaCIKICNpbXBvcnQg
IldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKICNpZiBVU0UoQVBQS0lUKQogI2ltcG9ydCA8QXBw
S2l0L0FwcEtpdC5oPgpAQCAtODksNyArODksNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxk
VXNlTGV0dGVycHJlc3NFCiAjZW5kaWYKIH0KIAotc3RhdGljIHZvaWQgc2hvd0xldHRlcnByZXNz
ZWRHbHlwaHNXaXRoQWR2YW5jZXMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IFNpbXBs
ZUZvbnREYXRhKiBmb250LCBDR0NvbnRleHRSZWYgY29udGV4dCwgY29uc3QgQ0dHbHlwaCogZ2x5
cGhzLCBjb25zdCBDR1NpemUqIGFkdmFuY2VzLCBzaXplX3QgY291bnQpCitzdGF0aWMgdm9pZCBz
aG93TGV0dGVycHJlc3NlZEdseXBoc1dpdGhBZHZhbmNlcyhjb25zdCBGbG9hdFBvaW50JiBwb2lu
dCwgY29uc3QgRm9udCogZm9udCwgQ0dDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IENHR2x5cGgq
IGdseXBocywgY29uc3QgQ0dTaXplKiBhZHZhbmNlcywgc2l6ZV90IGNvdW50KQogewogI2lmIEVO
QUJMRShMRVRURVJQUkVTUykKICAgICBpZiAoIWNvdW50KQpAQCAtMTI5LDcgKzEyOSw3IEBAIHN0
YXRpYyB2b2lkIHNob3dMZXR0ZXJwcmVzc2VkR2x5cGhzV2l0aEEKICNlbmRpZgogfQogCi1zdGF0
aWMgdm9pZCBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBj
b25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgQ0dDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IENH
R2x5cGgqIGdseXBocywgY29uc3QgQ0dTaXplKiBhZHZhbmNlcywgc2l6ZV90IGNvdW50KQorc3Rh
dGljIHZvaWQgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwg
Y29uc3QgRm9udCogZm9udCwgQ0dDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IENHR2x5cGgqIGds
eXBocywgY29uc3QgQ0dTaXplKiBhZHZhbmNlcywgc2l6ZV90IGNvdW50KQogewogICAgIGlmICgh
Y291bnQpCiAgICAgICAgIHJldHVybjsKQEAgLTE5NSw3ICsxOTUsNyBAQCBzdGF0aWMgdm9pZCBz
ZXRDR0ZvbnRSZW5kZXJpbmdNb2RlKENHQ29uCiB9CiAjZW5kaWYKIAotdm9pZCBGb250Q2FzY2Fk
ZTo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFNpbXBsZUZvbnRE
YXRhKiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGludCBmcm9tLCBpbnQg
bnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCkgY29uc3QKK3ZvaWQgRm9u
dENhc2NhZGU6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGb250
KiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGludCBmcm9tLCBpbnQgbnVt
R2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCkgY29uc3QKIHsKICAgICBjb25z
dCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEgPSBmb250LT5wbGF0Zm9ybURhdGEoKTsK
ICAgICBpZiAoIXBsYXRmb3JtRGF0YS5zaXplKCkpCkBAIC00NjYsNyArNDY2LDcgQEAgcHVibGlj
OgogICAgICAgICA6IG1faW5kZXgoMCkKICAgICAgICAgLCBtX3RleHRSdW4odGV4dFJ1bikKICAg
ICAgICAgLCBtX2dseXBoQnVmZmVyKGdseXBoQnVmZmVyKQotICAgICAgICAsIG1fZm9udERhdGEo
Z2x5cGhCdWZmZXIuZm9udERhdGFBdChtX2luZGV4KSkKKyAgICAgICAgLCBtX2ZvbnQoZ2x5cGhC
dWZmZXIuZm9udEF0KG1faW5kZXgpKQogICAgICAgICAsIG1fdHJhbnNsYXRpb24oQ0dBZmZpbmVU
cmFuc2Zvcm1TY2FsZShDR0FmZmluZVRyYW5zZm9ybU1ha2VUcmFuc2xhdGlvbih0ZXh0T3JpZ2lu
LngoKSwgdGV4dE9yaWdpbi55KCkpLCAxLCAtMSkpCiAgICAgewogICAgICAgICBtb3ZlVG9OZXh0
VmFsaWRHbHlwaCgpOwpAQCAtNDg1LDEzICs0ODUsMTMgQEAgcHJpdmF0ZToKICAgICBpbnQgbV9p
bmRleDsKICAgICBjb25zdCBUZXh0UnVuJiBtX3RleHRSdW47CiAgICAgY29uc3QgR2x5cGhCdWZm
ZXImIG1fZ2x5cGhCdWZmZXI7Ci0gICAgY29uc3QgU2ltcGxlRm9udERhdGEqIG1fZm9udERhdGE7
CisgICAgY29uc3QgRm9udCogbV9mb250OwogICAgIENHQWZmaW5lVHJhbnNmb3JtIG1fdHJhbnNs
YXRpb247CiB9OwogCiBQYXRoIE1hY0dseXBoVG9QYXRoVHJhbnNsYXRvcjo6cGF0aCgpCiB7Ci0g
ICAgUmV0YWluUHRyPENHUGF0aFJlZj4gcmVzdWx0ID0gYWRvcHRDRihDVEZvbnRDcmVhdGVQYXRo
Rm9yR2x5cGgobV9mb250RGF0YS0+cGxhdGZvcm1EYXRhKCkuY3RGb250KCksIG1fZ2x5cGhCdWZm
ZXIuZ2x5cGhBdChtX2luZGV4KSwgJm1fdHJhbnNsYXRpb24pKTsKKyAgICBSZXRhaW5QdHI8Q0dQ
YXRoUmVmPiByZXN1bHQgPSBhZG9wdENGKENURm9udENyZWF0ZVBhdGhGb3JHbHlwaChtX2ZvbnQt
PnBsYXRmb3JtRGF0YSgpLmN0Rm9udCgpLCBtX2dseXBoQnVmZmVyLmdseXBoQXQobV9pbmRleCks
ICZtX3RyYW5zbGF0aW9uKSk7CiAgICAgcmV0dXJuIGFkb3B0Q0YoQ0dQYXRoQ3JlYXRlTXV0YWJs
ZUNvcHkocmVzdWx0LmdldCgpKSk7CiB9CiAKQEAgLTUwOSw3ICs1MDksNyBAQCBhdXRvIE1hY0ds
eXBoVG9QYXRoVHJhbnNsYXRvcjo6dW5kZXJsaW5lCiAKIHZvaWQgTWFjR2x5cGhUb1BhdGhUcmFu
c2xhdG9yOjptb3ZlVG9OZXh0VmFsaWRHbHlwaCgpCiB7Ci0gICAgaWYgKCFtX2ZvbnREYXRhLT5p
c1NWR0ZvbnQoKSkKKyAgICBpZiAoIW1fZm9udC0+aXNTVkdGb250KCkpCiAgICAgICAgIHJldHVy
bjsKICAgICBhZHZhbmNlKCk7CiB9CkBAIC01MjIsOCArNTIyLDggQEAgdm9pZCBNYWNHbHlwaFRv
UGF0aFRyYW5zbGF0b3I6OmFkdmFuY2UoKQogICAgICAgICArK21faW5kZXg7CiAgICAgICAgIGlm
IChtX2luZGV4ID49IG1fZ2x5cGhCdWZmZXIuc2l6ZSgpKQogICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIG1fZm9udERhdGEgPSBtX2dseXBoQnVmZmVyLmZvbnREYXRhQXQobV9pbmRleCk7Ci0g
ICAgfSB3aGlsZSAobV9mb250RGF0YS0+aXNTVkdGb250KCkgJiYgbV9pbmRleCA8IG1fZ2x5cGhC
dWZmZXIuc2l6ZSgpKTsKKyAgICAgICAgbV9mb250ID0gbV9nbHlwaEJ1ZmZlci5mb250QXQobV9p
bmRleCk7CisgICAgfSB3aGlsZSAobV9mb250LT5pc1NWR0ZvbnQoKSAmJiBtX2luZGV4IDwgbV9n
bHlwaEJ1ZmZlci5zaXplKCkpOwogfQogCiBEYXNoQXJyYXkgRm9udENhc2NhZGU6OmRhc2hlc0Zv
ckludGVyc2VjdGlvbnNXaXRoUmVjdChjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9p
bnQmIHRleHRPcmlnaW4sIGNvbnN0IEZsb2F0UmVjdCYgbGluZUV4dGVudHMpIGNvbnN0CkBAIC01
NDMsMjQgKzU0MywyNCBAQCBEYXNoQXJyYXkgRm9udENhc2NhZGU6OmRhc2hlc0ZvckludGVyc2Vj
CiAgICAgICAgIHJldHVybiBEYXNoQXJyYXkoKTsKICAgICAKICAgICAvLyBGSVhNRTogSGFuZGxl
IFNWRyArIG5vbi1TVkcgaW50ZXJsZWF2ZWQgcnVucy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEzMzc3OAotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0
YSA9IGdseXBoQnVmZmVyLmZvbnREYXRhQXQoMCk7CisgICAgY29uc3QgRm9udCogZm9udCA9IGds
eXBoQnVmZmVyLmZvbnRBdCgwKTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8R2x5cGhUb1BhdGhUcmFu
c2xhdG9yPiB0cmFuc2xhdG9yOwogICAgIGJvb2wgaXNTVkcgPSBmYWxzZTsKICAgICBGbG9hdFBv
aW50IG9yaWdpbiA9IEZsb2F0UG9pbnQodGV4dE9yaWdpbi54KCkgKyBkZWx0YVgsIHRleHRPcmln
aW4ueSgpKTsKLSAgICBpZiAoIWZvbnREYXRhLT5pc1NWR0ZvbnQoKSkKKyAgICBpZiAoIWZvbnQt
PmlzU1ZHRm9udCgpKQogICAgICAgICB0cmFuc2xhdG9yID0gc3RkOjptYWtlX3VuaXF1ZTxNYWNH
bHlwaFRvUGF0aFRyYW5zbGF0b3I+KHJ1biwgZ2x5cGhCdWZmZXIsIG9yaWdpbik7CiAgICAgZWxz
ZSB7CiAgICAgICAgIFRleHRSdW46OlJlbmRlcmluZ0NvbnRleHQqIHJlbmRlcmluZ0NvbnRleHQg
PSBydW4ucmVuZGVyaW5nQ29udGV4dCgpOwogICAgICAgICBpZiAoIXJlbmRlcmluZ0NvbnRleHQp
CiAgICAgICAgICAgICByZXR1cm4gRGFzaEFycmF5KCk7Ci0gICAgICAgIHRyYW5zbGF0b3IgPSBy
ZW5kZXJpbmdDb250ZXh0LT5jcmVhdGVHbHlwaFRvUGF0aFRyYW5zbGF0b3IoKmZvbnREYXRhLCAm
cnVuLCBnbHlwaEJ1ZmZlciwgMCwgZ2x5cGhCdWZmZXIuc2l6ZSgpLCBvcmlnaW4pOworICAgICAg
ICB0cmFuc2xhdG9yID0gcmVuZGVyaW5nQ29udGV4dC0+Y3JlYXRlR2x5cGhUb1BhdGhUcmFuc2xh
dG9yKCpmb250LCAmcnVuLCBnbHlwaEJ1ZmZlciwgMCwgZ2x5cGhCdWZmZXIuc2l6ZSgpLCBvcmln
aW4pOwogICAgICAgICBpc1NWRyA9IHRydWU7CiAgICAgfQogICAgIERhc2hBcnJheSByZXN1bHQ7
CiAgICAgZm9yIChpbnQgaW5kZXggPSAwOyB0cmFuc2xhdG9yLT5jb250YWluc01vcmVQYXRocygp
OyArK2luZGV4LCB0cmFuc2xhdG9yLT5hZHZhbmNlKCkpIHsKICAgICAgICAgR2x5cGhJdGVyYXRp
b25TdGF0ZSBpbmZvID0gR2x5cGhJdGVyYXRpb25TdGF0ZShDR1BvaW50TWFrZSgwLCAwKSwgQ0dQ
b2ludE1ha2UoMCwgMCksIGxpbmVFeHRlbnRzLnkoKSwgbGluZUV4dGVudHMueSgpICsgbGluZUV4
dGVudHMuaGVpZ2h0KCksIGxpbmVFeHRlbnRzLngoKSArIGxpbmVFeHRlbnRzLndpZHRoKCksIGxp
bmVFeHRlbnRzLngoKSk7Ci0gICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBsb2NhbEZvbnRE
YXRhID0gZ2x5cGhCdWZmZXIuZm9udERhdGFBdChpbmRleCk7Ci0gICAgICAgIGlmICghbG9jYWxG
b250RGF0YSB8fCAoIWlzU1ZHICYmIGxvY2FsRm9udERhdGEtPmlzU1ZHRm9udCgpKSB8fCAoaXNT
VkcgJiYgbG9jYWxGb250RGF0YSAhPSBmb250RGF0YSkpIHsKKyAgICAgICAgY29uc3QgRm9udCog
bG9jYWxGb250RGF0YSA9IGdseXBoQnVmZmVyLmZvbnRBdChpbmRleCk7CisgICAgICAgIGlmICgh
bG9jYWxGb250RGF0YSB8fCAoIWlzU1ZHICYmIGxvY2FsRm9udERhdGEtPmlzU1ZHRm9udCgpKSB8
fCAoaXNTVkcgJiYgbG9jYWxGb250RGF0YSAhPSBmb250KSkgewogICAgICAgICAgICAgLy8gVGhl
IGFkdmFuY2VzIHdpbGwgZ2V0IGFsbCBtZXNzZWQgdXAgaWYgd2UgZG8gYW55dGhpbmcgb3RoZXIg
dGhhbiBiYWlsIGhlcmUuCiAgICAgICAgICAgICByZXN1bHQuY2xlYXIoKTsKICAgICAgICAgICAg
IGJyZWFrOwpAQCAtNTkwLDExICs1OTAsMTEgQEAgRGFzaEFycmF5IEZvbnRDYXNjYWRlOjpkYXNo
ZXNGb3JJbnRlcnNlYwogfQogI2VuZGlmCiAKLWJvb2wgRm9udENhc2NhZGU6OnByaW1hcnlGb250
RGF0YUlzU3lzdGVtRm9udCgpIGNvbnN0Citib29sIEZvbnRDYXNjYWRlOjpwcmltYXJ5Rm9udElz
U3lzdGVtRm9udCgpIGNvbnN0CiB7CiAjaWYgUExBVEZPUk0oSU9TKSB8fCBfX01BQ19PU19YX1ZF
UlNJT05fTUlOX1JFUVVJUkVEID4gMTA5MAotICAgIGNvbnN0IGF1dG8mIGZvbnREYXRhID0gcHJp
bWFyeUZvbnREYXRhKCk7Ci0gICAgcmV0dXJuICFmb250RGF0YS5pc1NWR0ZvbnQoKSAmJiBDVEZv
bnREZXNjcmlwdG9ySXNTeXN0ZW1VSUZvbnQoYWRvcHRDRihDVEZvbnRDb3B5Rm9udERlc2NyaXB0
b3IoZm9udERhdGEucGxhdGZvcm1EYXRhKCkuY3RGb250KCkpKS5nZXQoKSk7CisgICAgY29uc3Qg
YXV0byYgZm9udCA9IHByaW1hcnlGb250KCk7CisgICAgcmV0dXJuICFmb250LmlzU1ZHRm9udCgp
ICYmIENURm9udERlc2NyaXB0b3JJc1N5c3RlbVVJRm9udChhZG9wdENGKENURm9udENvcHlGb250
RGVzY3JpcHRvcihmb250LnBsYXRmb3JtRGF0YSgpLmN0Rm9udCgpKSkuZ2V0KCkpOwogI2Vsc2UK
ICAgICAvLyBTeXN0ZW0gZm9udHMgYXJlIGhpZGRlbiBieSBoYXZpbmcgYSBuYW1lIHRoYXQgYmVn
aW5zIHdpdGggYSBwZXJpb2QsIHNvIHNpbXBseSBzZWFyY2gKICAgICAvLyBmb3IgdGhhdCBoZXJl
IHJhdGhlciB0aGFuIHRyeSB0byBrZWVwIHRoZSBsaXN0IHVwIHRvIGRhdGUuCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENvbXBsZXhUZXh0TWFjLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENv
bXBsZXhUZXh0TWFjLmNwcAkocmV2aXNpb24gMTc4NTEwKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDb21wbGV4VGV4dE1hYy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsMTg0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgs
IDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgotCi0jaW5jbHVkZSAiQ29tcGxleFRl
eHRDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiRm9udEdseXBocy5oIgotI2luY2x1ZGUgIkdseXBo
QnVmZmVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW50UmVj
dC5oIgotI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5o
IgotI2luY2x1ZGUgIlRleHRSdW4uaCIKLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgRm9udENhc2NhZGU6OmFkanVzdFNlbGVjdGlvblJl
Y3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIExheW91dFJlY3QmIHNlbGVjdGlv
blJlY3QsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Ci17Ci0gICAgQ29tcGxleFRleHRDb250cm9s
bGVyIGNvbnRyb2xsZXIodGhpcywgcnVuKTsKLSAgICBjb250cm9sbGVyLmFkdmFuY2UoZnJvbSk7
Ci0gICAgZmxvYXQgYmVmb3JlV2lkdGggPSBjb250cm9sbGVyLnJ1bldpZHRoU29GYXIoKTsKLSAg
ICBjb250cm9sbGVyLmFkdmFuY2UodG8pOwotICAgIGZsb2F0IGFmdGVyV2lkdGggPSBjb250cm9s
bGVyLnJ1bldpZHRoU29GYXIoKTsKLQotICAgIGlmIChydW4ucnRsKCkpCi0gICAgICAgIHNlbGVj
dGlvblJlY3QubW92ZShjb250cm9sbGVyLnRvdGFsV2lkdGgoKSAtIGFmdGVyV2lkdGgsIDApOwot
ICAgIGVsc2UKLSAgICAgICAgc2VsZWN0aW9uUmVjdC5tb3ZlKGJlZm9yZVdpZHRoLCAwKTsKLSAg
ICBzZWxlY3Rpb25SZWN0LnNldFdpZHRoKGFmdGVyV2lkdGggLSBiZWZvcmVXaWR0aCk7Ci19Ci0K
LWZsb2F0IEZvbnRDYXNjYWRlOjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0KGNv
bnN0IFRleHRSdW4mIHJ1biwgaW50IGZyb20sIGludCB0bywgR2x5cGhCdWZmZXImIGdseXBoQnVm
ZmVyLCBGb3JUZXh0RW1waGFzaXNPck5vdCBmb3JUZXh0RW1waGFzaXMpIGNvbnN0Ci17Ci0gICAg
ZmxvYXQgaW5pdGlhbEFkdmFuY2U7Ci0KLSAgICBDb21wbGV4VGV4dENvbnRyb2xsZXIgY29udHJv
bGxlcih0aGlzLCBydW4sIGZhbHNlLCAwLCBmb3JUZXh0RW1waGFzaXMpOwotICAgIGNvbnRyb2xs
ZXIuYWR2YW5jZShmcm9tKTsKLSAgICBmbG9hdCBiZWZvcmVXaWR0aCA9IGNvbnRyb2xsZXIucnVu
V2lkdGhTb0ZhcigpOwotICAgIGNvbnRyb2xsZXIuYWR2YW5jZSh0bywgJmdseXBoQnVmZmVyKTsK
LQotICAgIGlmIChnbHlwaEJ1ZmZlci5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0g
ICAgZmxvYXQgYWZ0ZXJXaWR0aCA9IGNvbnRyb2xsZXIucnVuV2lkdGhTb0ZhcigpOwotCi0gICAg
aWYgKHJ1bi5ydGwoKSkgewotICAgICAgICBpbml0aWFsQWR2YW5jZSA9IGNvbnRyb2xsZXIudG90
YWxXaWR0aCgpICsgY29udHJvbGxlci5maW5hbFJvdW5kaW5nV2lkdGgoKSAtIGFmdGVyV2lkdGg7
Ci0gICAgICAgIGdseXBoQnVmZmVyLnJldmVyc2UoMCwgZ2x5cGhCdWZmZXIuc2l6ZSgpKTsKLSAg
ICB9IGVsc2UKLSAgICAgICAgaW5pdGlhbEFkdmFuY2UgPSBiZWZvcmVXaWR0aDsKLQotICAgIHJl
dHVybiBpbml0aWFsQWR2YW5jZTsKLX0KLQotZmxvYXQgRm9udENhc2NhZGU6OmRyYXdDb21wbGV4
VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Ci17Ci0gICAgLy8gVGhp
cyBnbHlwaCBidWZmZXIgaG9sZHMgb3VyIGdseXBocyArIGFkdmFuY2VzICsgZm9udCBkYXRhIGZv
ciBlYWNoIGdseXBoLgotICAgIEdseXBoQnVmZmVyIGdseXBoQnVmZmVyOwotCi0gICAgZmxvYXQg
c3RhcnRYID0gcG9pbnQueCgpICsgZ2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChy
dW4sIGZyb20sIHRvLCBnbHlwaEJ1ZmZlcik7Ci0KLSAgICAvLyBXZSBjb3VsZG4ndCBnZW5lcmF0
ZSBhbnkgZ2x5cGhzIGZvciB0aGUgcnVuLiAgR2l2ZSB1cC4KLSAgICBpZiAoZ2x5cGhCdWZmZXIu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8vIERyYXcgdGhlIGdseXBoIGJ1
ZmZlciBub3cgYXQgdGhlIHN0YXJ0aW5nIHBvaW50IHJldHVybmVkIGluIHN0YXJ0WC4KLSAgICBG
bG9hdFBvaW50IHN0YXJ0UG9pbnQoc3RhcnRYLCBwb2ludC55KCkpOwotICAgIGRyYXdHbHlwaEJ1
ZmZlcihjb250ZXh0LCBydW4sIGdseXBoQnVmZmVyLCBzdGFydFBvaW50KTsKLQotICAgIHJldHVy
biBzdGFydFBvaW50LngoKSAtIHN0YXJ0WDsKLX0KLQotdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0Vt
cGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0
IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKLXsKLSAgICBHbHlwaEJ1ZmZlciBnbHlw
aEJ1ZmZlcjsKLSAgICBmbG9hdCBpbml0aWFsQWR2YW5jZSA9IGdldEdseXBoc0FuZEFkdmFuY2Vz
Rm9yQ29tcGxleFRleHQocnVuLCBmcm9tLCB0bywgZ2x5cGhCdWZmZXIsIEZvclRleHRFbXBoYXNp
cyk7Ci0KLSAgICBpZiAoZ2x5cGhCdWZmZXIuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBkcmF3RW1waGFzaXNNYXJrcyhjb250ZXh0LCBydW4sIGdseXBoQnVmZmVyLCBtYXJrLCBG
bG9hdFBvaW50KHBvaW50LngoKSArIGluaXRpYWxBZHZhbmNlLCBwb2ludC55KCkpKTsKLX0KLQot
ZmxvYXQgRm9udENhc2NhZGU6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVu
JiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cywgR2x5
cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKLXsKLSAgICBDb21wbGV4VGV4dENvbnRy
b2xsZXIgY29udHJvbGxlcih0aGlzLCBydW4sIHRydWUsIGZhbGxiYWNrRm9udHMpOwotICAgIGlm
IChnbHlwaE92ZXJmbG93KSB7Ci0gICAgICAgIGdseXBoT3ZlcmZsb3ctPnRvcCA9IHN0ZDo6bWF4
PGludD4oZ2x5cGhPdmVyZmxvdy0+dG9wLCBjZWlsZigtY29udHJvbGxlci5taW5HbHlwaEJvdW5k
aW5nQm94WSgpKSAtIChnbHlwaE92ZXJmbG93LT5jb21wdXRlQm91bmRzID8gMCA6IGZvbnRNZXRy
aWNzKCkuYXNjZW50KCkpKTsKLSAgICAgICAgZ2x5cGhPdmVyZmxvdy0+Ym90dG9tID0gc3RkOjpt
YXg8aW50PihnbHlwaE92ZXJmbG93LT5ib3R0b20sIGNlaWxmKGNvbnRyb2xsZXIubWF4R2x5cGhC
b3VuZGluZ0JveFkoKSkgLSAoZ2x5cGhPdmVyZmxvdy0+Y29tcHV0ZUJvdW5kcyA/IDAgOiBmb250
TWV0cmljcygpLmRlc2NlbnQoKSkpOwotICAgICAgICBnbHlwaE92ZXJmbG93LT5sZWZ0ID0gc3Rk
OjptYXg8aW50PigwLCBjZWlsZigtY29udHJvbGxlci5taW5HbHlwaEJvdW5kaW5nQm94WCgpKSk7
Ci0gICAgICAgIGdseXBoT3ZlcmZsb3ctPnJpZ2h0ID0gc3RkOjptYXg8aW50PigwLCBjZWlsZihj
b250cm9sbGVyLm1heEdseXBoQm91bmRpbmdCb3hYKCkgLSBjb250cm9sbGVyLnRvdGFsV2lkdGgo
KSkpOwotICAgIH0KLSAgICByZXR1cm4gY29udHJvbGxlci50b3RhbFdpZHRoKCk7Ci19Ci0KLWlu
dCBGb250Q2FzY2FkZTo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dChjb25zdCBUZXh0
UnVuJiBydW4sIGZsb2F0IHgsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0Ci17Ci0g
ICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRyb2xsZXIodGhpcywgcnVuKTsKLSAgICByZXR1
cm4gY29udHJvbGxlci5vZmZzZXRGb3JQb3NpdGlvbih4LCBpbmNsdWRlUGFydGlhbEdseXBocyk7
Ci19Ci0KLWNvbnN0IFNpbXBsZUZvbnREYXRhKiBGb250Q2FzY2FkZTo6Zm9udERhdGFGb3JDb21i
aW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxl
bmd0aCwgRm9udERhdGFWYXJpYW50IHZhcmlhbnQpIGNvbnN0Ci17Ci0gICAgVUNoYXIzMiBiYXNl
Q2hhcmFjdGVyOwotICAgIHNpemVfdCBiYXNlQ2hhcmFjdGVyTGVuZ3RoID0gMDsKLSAgICBVMTZf
TkVYVChjaGFyYWN0ZXJzLCBiYXNlQ2hhcmFjdGVyTGVuZ3RoLCBsZW5ndGgsIGJhc2VDaGFyYWN0
ZXIpOwotCi0gICAgR2x5cGhEYXRhIGJhc2VDaGFyYWN0ZXJHbHlwaERhdGEgPSBnbHlwaERhdGFG
b3JDaGFyYWN0ZXIoYmFzZUNoYXJhY3RlciwgZmFsc2UsIHZhcmlhbnQpOwotCi0gICAgaWYgKCFi
YXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmdseXBoKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlm
IChsZW5ndGggPT0gYmFzZUNoYXJhY3Rlckxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGJhc2VDaGFy
YWN0ZXJHbHlwaERhdGEuZm9udERhdGE7Ci0KLSAgICBib29sIHRyaWVkQmFzZUNoYXJhY3RlckZv
bnREYXRhID0gZmFsc2U7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyAhZmFsbGJhY2tSYW5n
ZXNBdChpKS5pc051bGwoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBz
aW1wbGVGb250RGF0YSA9IGZhbGxiYWNrUmFuZ2VzQXQoaSkuZm9udERhdGFGb3JDaGFyYWN0ZXIo
YmFzZUNoYXJhY3Rlcik7Ci0gICAgICAgIGlmICghc2ltcGxlRm9udERhdGEpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLSNpZiBQTEFURk9STShJT1MpCi0gICAgICAgIGlmIChiYXNlQ2hhcmFjdGVy
ID49IDB4MDYwMCAmJiBiYXNlQ2hhcmFjdGVyIDw9IDB4MDZmZiAmJiBzaW1wbGVGb250RGF0YS0+
c2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSNlbmRp
ZgotICAgICAgICBpZiAodmFyaWFudCA9PSBOb3JtYWxWYXJpYW50KSB7Ci0gICAgICAgICAgICBp
ZiAoc2ltcGxlRm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gVmVydGlj
YWwpIHsKLSAgICAgICAgICAgICAgICBpZiAoaXNDSktJZGVvZ3JhcGhPclN5bWJvbChiYXNlQ2hh
cmFjdGVyKSAmJiAhc2ltcGxlRm9udERhdGEtPmhhc1ZlcnRpY2FsR2x5cGhzKCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgdmFyaWFudCA9IEJyb2tlbklkZW9ncmFwaFZhcmlhbnQ7Ci0gICAgICAg
ICAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gc2ltcGxlRm9udERhdGEtPmJyb2tlbklkZW9n
cmFwaEZvbnREYXRhKCkuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtX2ZvbnRE
ZXNjcmlwdGlvbi5ub25DSktHbHlwaE9yaWVudGF0aW9uKCkgPT0gTm9uQ0pLR2x5cGhPcmllbnRh
dGlvblZlcnRpY2FsUmlnaHQpIHsKLSAgICAgICAgICAgICAgICAgICAgU2ltcGxlRm9udERhdGEq
IHZlcnRpY2FsUmlnaHRGb250RGF0YSA9IHNpbXBsZUZvbnREYXRhLT52ZXJ0aWNhbFJpZ2h0T3Jp
ZW50YXRpb25Gb250RGF0YSgpLmdldCgpOwotICAgICAgICAgICAgICAgICAgICBHbHlwaCB2ZXJ0
aWNhbFJpZ2h0R2x5cGggPSB2ZXJ0aWNhbFJpZ2h0Rm9udERhdGEtPmdseXBoRm9yQ2hhcmFjdGVy
KGJhc2VDaGFyYWN0ZXIpOwotICAgICAgICAgICAgICAgICAgICBpZiAodmVydGljYWxSaWdodEds
eXBoID09IGJhc2VDaGFyYWN0ZXJHbHlwaERhdGEuZ2x5cGgpCi0gICAgICAgICAgICAgICAgICAg
ICAgICBzaW1wbGVGb250RGF0YSA9IHZlcnRpY2FsUmlnaHRGb250RGF0YTsKLSAgICAgICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBTaW1wbGVGb250RGF0YSogdXByaWdo
dEZvbnREYXRhID0gc2ltcGxlRm9udERhdGEtPnVwcmlnaHRPcmllbnRhdGlvbkZvbnREYXRhKCku
Z2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIEdseXBoIHVwcmlnaHRHbHlwaCA9IHVwcmlnaHRG
b250RGF0YS0+Z2x5cGhGb3JDaGFyYWN0ZXIoYmFzZUNoYXJhY3Rlcik7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmICh1cHJpZ2h0R2x5cGggIT0gYmFzZUNoYXJhY3RlckdseXBoRGF0YS5nbHlwaCkK
LSAgICAgICAgICAgICAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gdXByaWdodEZvbnREYXRh
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIGlmIChjb25zdCBTaW1wbGVGb250RGF0YSogdmFyaWFudEZvbnREYXRhID0gc2lt
cGxlRm9udERhdGEtPnZhcmlhbnRGb250RGF0YShtX2ZvbnREZXNjcmlwdGlvbiwgdmFyaWFudCku
Z2V0KCkpCi0gICAgICAgICAgICAgICAgc2ltcGxlRm9udERhdGEgPSB2YXJpYW50Rm9udERhdGE7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc2ltcGxlRm9udERhdGEgPT0gYmFzZUNoYXJhY3Rl
ckdseXBoRGF0YS5mb250RGF0YSkKLSAgICAgICAgICAgIHRyaWVkQmFzZUNoYXJhY3RlckZvbnRE
YXRhID0gdHJ1ZTsKLQotICAgICAgICBpZiAoc2ltcGxlRm9udERhdGEtPmNhblJlbmRlckNvbWJp
bmluZ0NoYXJhY3RlclNlcXVlbmNlKGNoYXJhY3RlcnMsIGxlbmd0aCkpCi0gICAgICAgICAgICBy
ZXR1cm4gc2ltcGxlRm9udERhdGE7Ci0gICAgfQotCi0gICAgaWYgKCF0cmllZEJhc2VDaGFyYWN0
ZXJGb250RGF0YSAmJiBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmZvbnREYXRhICYmIGJhc2VDaGFy
YWN0ZXJHbHlwaERhdGEuZm9udERhdGEtPmNhblJlbmRlckNvbWJpbmluZ0NoYXJhY3RlclNlcXVl
bmNlKGNoYXJhY3RlcnMsIGxlbmd0aCkpCi0gICAgICAgIHJldHVybiBiYXNlQ2hhcmFjdGVyR2x5
cGhEYXRhLmZvbnREYXRhOwotCi0gICAgcmV0dXJuIFNpbXBsZUZvbnREYXRhOjpzeXN0ZW1GYWxs
YmFjaygpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENvcmVUZXh0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENvcmVUZXh0LmNwcAkocmV2
aXNpb24gMTc4NDk2KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMv
U2ltcGxlRm9udERhdGFDb3JlVGV4dC5jcHA6MTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDb3JlVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFBy
b3NrdXJ5YWtvdgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2lt
cGxlRm9udERhdGEuaCIKKworI2lmICFQTEFURk9STShJT1MpCisjaW5jbHVkZSA8QXBwbGljYXRp
b25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CisjZWxzZQorI2luY2x1ZGUgPENvcmVU
ZXh0L0NvcmVUZXh0Lmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDRkRpY3Rp
b25hcnlSZWYgU2ltcGxlRm9udERhdGE6OmdldENGU3RyaW5nQXR0cmlidXRlcyhUeXBlc2V0dGlu
Z0ZlYXR1cmVzIHR5cGVzZXR0aW5nRmVhdHVyZXMsIEZvbnRPcmllbnRhdGlvbiBvcmllbnRhdGlv
bikgY29uc3QKK3sKKyAgICB1bnNpZ25lZCBrZXkgPSB0eXBlc2V0dGluZ0ZlYXR1cmVzICsgMTsK
KyAgICBIYXNoTWFwPHVuc2lnbmVkLCBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPj46OkFkZFJl
c3VsdCBhZGRSZXN1bHQgPSBtX0NGU3RyaW5nQXR0cmlidXRlcy5hZGQoa2V5LCBSZXRhaW5QdHI8
Q0ZEaWN0aW9uYXJ5UmVmPigpKTsKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiYgYXR0
cmlidXRlc0RpY3Rpb25hcnkgPSBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOworICAgIGlmICgh
YWRkUmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgIHJldHVybiBhdHRyaWJ1dGVzRGljdGlvbmFy
eS5nZXQoKTsKKworICAgIGF0dHJpYnV0ZXNEaWN0aW9uYXJ5ID0gYWRvcHRDRihDRkRpY3Rpb25h
cnlDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDQsICZrQ0ZDb3B5U3RyaW5nRGlj
dGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsK
KyAgICBDRk11dGFibGVEaWN0aW9uYXJ5UmVmIG11dGFibGVBdHRyaWJ1dGVzID0gKENGTXV0YWJs
ZURpY3Rpb25hcnlSZWYpYXR0cmlidXRlc0RpY3Rpb25hcnkuZ2V0KCk7CisKKyAgICBDRkRpY3Rp
b25hcnlTZXRWYWx1ZShtdXRhYmxlQXR0cmlidXRlcywga0NURm9udEF0dHJpYnV0ZU5hbWUsIHBs
YXRmb3JtRGF0YSgpLmN0Rm9udCgpKTsKKworICAgIGlmICghKHR5cGVzZXR0aW5nRmVhdHVyZXMg
JiBLZXJuaW5nKSkgeworICAgICAgICBjb25zdCBmbG9hdCB6ZXJvID0gMDsKKyAgICAgICAgc3Rh
dGljIENGTnVtYmVyUmVmIHplcm9LZXJuaW5nVmFsdWUgPSBDRk51bWJlckNyZWF0ZShrQ0ZBbGxv
Y2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJGbG9hdFR5cGUsICZ6ZXJvKTsKKyAgICAgICAgQ0ZEaWN0
aW9uYXJ5U2V0VmFsdWUobXV0YWJsZUF0dHJpYnV0ZXMsIGtDVEtlcm5BdHRyaWJ1dGVOYW1lLCB6
ZXJvS2VybmluZ1ZhbHVlKTsKKyAgICB9CisKKyAgICBib29sIGFsbG93TGlnYXR1cmVzID0gKG9y
aWVudGF0aW9uID09IEhvcml6b250YWwgJiYgcGxhdGZvcm1EYXRhKCkuYWxsb3dzTGlnYXR1cmVz
KCkpIHx8ICh0eXBlc2V0dGluZ0ZlYXR1cmVzICYgTGlnYXR1cmVzKTsKKyAgICBpZiAoIWFsbG93
TGlnYXR1cmVzKSB7CisgICAgICAgIGNvbnN0IGludCB6ZXJvID0gMDsKKyAgICAgICAgc3RhdGlj
IENGTnVtYmVyUmVmIGVzc2VudGlhbExpZ2F0dXJlc1ZhbHVlID0gQ0ZOdW1iZXJDcmVhdGUoa0NG
QWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVySW50VHlwZSwgJnplcm8pOworICAgICAgICBDRkRp
Y3Rpb25hcnlTZXRWYWx1ZShtdXRhYmxlQXR0cmlidXRlcywga0NUTGlnYXR1cmVBdHRyaWJ1dGVO
YW1lLCBlc3NlbnRpYWxMaWdhdHVyZXNWYWx1ZSk7CisgICAgfQorCisgICAgaWYgKG9yaWVudGF0
aW9uID09IFZlcnRpY2FsKQorICAgICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShtdXRhYmxlQXR0
cmlidXRlcywga0NUVmVydGljYWxGb3Jtc0F0dHJpYnV0ZU5hbWUsIGtDRkJvb2xlYW5UcnVlKTsK
KworICAgIHJldHVybiBhdHRyaWJ1dGVzRGljdGlvbmFyeS5nZXQoKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0ZvbnRDb3JlVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL0ZvbnRDb3JlVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q29yZVRleHQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNSw3ICsyNSw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisjaW5jbHVkZSAiRm9udC5oIgogCiAjaWYgIVBMQVRGT1JN
KElPUykKICNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMu
aD4KQEAgLTM1LDcgKzM1LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1DRkRpY3Rpb25h
cnlSZWYgU2ltcGxlRm9udERhdGE6OmdldENGU3RyaW5nQXR0cmlidXRlcyhUeXBlc2V0dGluZ0Zl
YXR1cmVzIHR5cGVzZXR0aW5nRmVhdHVyZXMsIEZvbnRPcmllbnRhdGlvbiBvcmllbnRhdGlvbikg
Y29uc3QKK0NGRGljdGlvbmFyeVJlZiBGb250OjpnZXRDRlN0cmluZ0F0dHJpYnV0ZXMoVHlwZXNl
dHRpbmdGZWF0dXJlcyB0eXBlc2V0dGluZ0ZlYXR1cmVzLCBGb250T3JpZW50YXRpb24gb3JpZW50
YXRpb24pIGNvbnN0CiB7CiAgICAgdW5zaWduZWQga2V5ID0gdHlwZXNldHRpbmdGZWF0dXJlcyAr
IDE7CiAgICAgSGFzaE1hcDx1bnNpZ25lZCwgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4+OjpB
ZGRSZXN1bHQgYWRkUmVzdWx0ID0gbV9DRlN0cmluZ0F0dHJpYnV0ZXMuYWRkKGtleSwgUmV0YWlu
UHRyPENGRGljdGlvbmFyeVJlZj4oKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9tYWMvRm9udE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvRm9udE1hYy5tbQkocmV2aXNpb24gMTc4NTEwKQkoZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW06MTc4
NTEwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRNYWMubW0J
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDUsIDIwMDYsIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YKKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9y
dCAiY29uZmlnLmgiCisjaW1wb3J0ICJTaW1wbGVGb250RGF0YS5oIgorCisjaW1wb3J0ICJCbG9j
a0V4Y2VwdGlvbnMuaCIKKyNpbXBvcnQgIkNvbG9yLmgiCisjaW1wb3J0ICJDb3JlR3JhcGhpY3NT
UEkuaCIKKyNpbXBvcnQgIkNvcmVUZXh0U1BJLmgiCisjaW1wb3J0ICJGbG9hdFJlY3QuaCIKKyNp
bXBvcnQgIkZvbnRDYWNoZS5oIgorI2ltcG9ydCAiRm9udENhc2NhZGUuaCIKKyNpbXBvcnQgIkZv
bnREZXNjcmlwdGlvbi5oIgorI2ltcG9ydCAiU2hhcmVkQnVmZmVyLmgiCisjaW1wb3J0ICJXZWJD
b3JlU3lzdGVtSW50ZXJmYWNlLmgiCisjaWYgVVNFKEFQUEtJVCkKKyNpbXBvcnQgPEFwcEtpdC9B
cHBLaXQuaD4KKyNpbXBvcnQgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNl
cy5oPgorI2Vsc2UKKyNpbXBvcnQgPENvcmVUZXh0L0NvcmVUZXh0Lmg+CisjZW5kaWYKKyNpbXBv
cnQgPGZsb2F0Lmg+CisjaW1wb3J0IDx1bmljb2RlL3VjaGFyLmg+CisjaW1wb3J0IDx3dGYvQXNz
ZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2ltcG9ydCA8d3RmL1Jl
dGFpblB0ci5oPgorCisjaWYgIVBMQVRGT1JNKElPUykKK0BpbnRlcmZhY2UgTlNGb250IChXZWJB
cHBLaXRTZWNyZXRBUEkpCistIChCT09MKV9pc0Zha2VGaXhlZFBpdGNoOworQGVuZAorI2VuZGlm
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmIFVTRShBUFBLSVQpCitzdGF0aWMgYm9vbCBm
b250SGFzVmVydGljYWxHbHlwaHMoQ1RGb250UmVmIGN0Rm9udCkKK3sKKyAgICAvLyBUaGUgY2hl
Y2sgZG9lc24ndCBsb29rIG5lYXQgYnV0IHRoaXMgaXMgd2hhdCBBcHBLaXQgZG9lcyBmb3IgdmVy
dGljYWwgd3JpdGluZy4uLgorICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiB0YWJsZVRhZ3MgPSBh
ZG9wdENGKENURm9udENvcHlBdmFpbGFibGVUYWJsZXMoY3RGb250LCBrQ1RGb250VGFibGVPcHRp
b25Ob09wdGlvbnMpKTsKKyAgICBDRkluZGV4IG51bVRhYmxlcyA9IENGQXJyYXlHZXRDb3VudCh0
YWJsZVRhZ3MuZ2V0KCkpOworICAgIGZvciAoQ0ZJbmRleCBpbmRleCA9IDA7IGluZGV4IDwgbnVt
VGFibGVzOyArK2luZGV4KSB7CisgICAgICAgIENURm9udFRhYmxlVGFnIHRhZyA9IChDVEZvbnRU
YWJsZVRhZykodWludHB0cl90KUNGQXJyYXlHZXRWYWx1ZUF0SW5kZXgodGFibGVUYWdzLmdldCgp
LCBpbmRleCk7CisgICAgICAgIGlmICh0YWcgPT0ga0NURm9udFRhYmxlVmhlYSB8fCB0YWcgPT0g
a0NURm9udFRhYmxlVk9SRykKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBib29sIGluaXRGb250RGF0YShTaW1wbGVGb250RGF0
YSogZm9udERhdGEpCit7CisgICAgaWYgKCFmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkuY2dGb250
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0
aWMgTlNTdHJpbmcgKndlYkZhbGxiYWNrRm9udEZhbWlseSh2b2lkKQoreworICAgIHN0YXRpYyBO
U1N0cmluZyAqd2ViRmFsbGJhY2tGb250RmFtaWx5ID0gW1tbTlNGb250IHN5c3RlbUZvbnRPZlNp
emU6MTYuMGZdIGZhbWlseU5hbWVdIHJldGFpbl07CisgICAgcmV0dXJuIHdlYkZhbGxiYWNrRm9u
dEZhbWlseTsKK30KKworY29uc3QgU2ltcGxlRm9udERhdGEqIFNpbXBsZUZvbnREYXRhOjpjb21w
b3NpdGVGb250UmVmZXJlbmNlRm9udERhdGEoTlNGb250ICprZXkpIGNvbnN0Cit7CisgICAgaWYg
KCFrZXkgfHwgQ0ZFcXVhbChhZG9wdENGKENURm9udENvcHlQb3N0U2NyaXB0TmFtZShDVEZvbnRS
ZWYoa2V5KSkpLmdldCgpLCBDRlNUUigiTGFzdFJlc29ydCIpKSkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQorICAgICAgICBtX2Rlcml2ZWRG
b250RGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8RGVyaXZlZEZvbnREYXRhPihpc0N1c3RvbUZvbnQo
KSk7CisKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fZGVyaXZlZEZvbnREYXRhLT5jb21wb3NpdGVG
b250UmVmZXJlbmNlcy5hZGQoa2V5LCBudWxscHRyKTsKKyAgICBpZiAoYWRkUmVzdWx0LmlzTmV3
RW50cnkpIHsKKyAgICAgICAgYm9vbCBpc1VzaW5nUHJpbnRlckZvbnQgPSBwbGF0Zm9ybURhdGEo
KS5pc1ByaW50ZXJGb250KCk7CisgICAgICAgIE5TRm9udCAqc3Vic3RpdHV0ZUZvbnQgPSBpc1Vz
aW5nUHJpbnRlckZvbnQgPyBba2V5IHByaW50ZXJGb250XSA6IFtrZXkgc2NyZWVuRm9udF07CisK
KyAgICAgICAgQ1RGb250U3ltYm9saWNUcmFpdHMgdHJhaXRzID0gQ1RGb250R2V0U3ltYm9saWNU
cmFpdHMoKENURm9udFJlZilzdWJzdGl0dXRlRm9udCk7CisgICAgICAgIGJvb2wgc3ludGhldGlj
Qm9sZCA9IHBsYXRmb3JtRGF0YSgpLnN5bnRoZXRpY0JvbGQoKSAmJiAhKHRyYWl0cyAmIGtDVEZv
bnRCb2xkVHJhaXQpOworICAgICAgICBib29sIHN5bnRoZXRpY09ibGlxdWUgPSBwbGF0Zm9ybURh
dGEoKS5zeW50aGV0aWNPYmxpcXVlKCkgJiYgISh0cmFpdHMgJiBrQ1RGb250SXRhbGljVHJhaXQp
OworCisgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEgc3Vic3RpdHV0ZVBsYXRmb3JtKHN1YnN0aXR1
dGVGb250LCBwbGF0Zm9ybURhdGEoKS5zaXplKCksIGlzVXNpbmdQcmludGVyRm9udCwgc3ludGhl
dGljQm9sZCwgc3ludGhldGljT2JsaXF1ZSwgcGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSwg
cGxhdGZvcm1EYXRhKCkud2lkdGhWYXJpYW50KCkpOworICAgICAgICBhZGRSZXN1bHQuaXRlcmF0
b3ItPnZhbHVlID0gU2ltcGxlRm9udERhdGE6OmNyZWF0ZShzdWJzdGl0dXRlUGxhdGZvcm0sIGlz
Q3VzdG9tRm9udCgpKTsKKyAgICB9CisgICAgcmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFs
dWUuZ2V0KCk7Cit9CisKK3ZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtSW5pdCgpCit7Cisg
ICAgbV9zeW50aGV0aWNCb2xkT2Zmc2V0ID0gbV9wbGF0Zm9ybURhdGEubV9zeW50aGV0aWNCb2xk
ID8gMS4wZiA6IDAuZjsKKworICAgIGJvb2wgZmFpbGVkU2V0dXAgPSBmYWxzZTsKKyAgICBpZiAo
IWluaXRGb250RGF0YSh0aGlzKSkgeworICAgICAgICAvLyBBY2shIFNvbWV0aGluZyB2ZXJ5IGJh
ZCBoYXBwZW5lZCwgbGlrZSBhIGNvcnJ1cHQgZm9udC4KKyAgICAgICAgLy8gVHJ5IGxvb2tpbmcg
Zm9yIGFuIGFsdGVybmF0ZSAnYmFzZScgZm9udCBmb3IgdGhpcyByZW5kZXJlci4KKworICAgICAg
ICAvLyBTcGVjaWFsIGNhc2UgaGFjayB0byB1c2UgIlRpbWVzIE5ldyBSb21hbiIgaW4gcGxhY2Ug
b2YgIlRpbWVzIi4KKyAgICAgICAgLy8gIlRpbWVzIFJPIiBpcyBhIGNvbW1vbiBmb250IHdob3Nl
IGZhbWlseSBuYW1lIGlzICJUaW1lcyIuCisgICAgICAgIC8vIEl0IG92ZXJyaWRlcyB0aGUgbm9y
bWFsICJUaW1lcyIgZmFtaWx5IGZvbnQuCisgICAgICAgIC8vIEl0IGFsc28gYXBwZWFycyB0byBo
YXZlIGEgY29ycnVwdCByZWd1bGFyIHZhcmlhbnQuCisgICAgICAgIE5TU3RyaW5nICpmYWxsYmFj
a0ZvbnRGYW1pbHk7CisgICAgICAgIGlmIChbW21fcGxhdGZvcm1EYXRhLm5zRm9udCgpIGZhbWls
eU5hbWVdIGlzRXF1YWw6QCJUaW1lcyJdKQorICAgICAgICAgICAgZmFsbGJhY2tGb250RmFtaWx5
ID0gQCJUaW1lcyBOZXcgUm9tYW4iOworICAgICAgICBlbHNlCisgICAgICAgICAgICBmYWxsYmFj
a0ZvbnRGYW1pbHkgPSB3ZWJGYWxsYmFja0ZvbnRGYW1pbHkoKTsKKyAgICAgICAgCisgICAgICAg
IC8vIFRyeSBzZXR0aW5nIHVwIHRoZSBhbHRlcm5hdGUgZm9udC4KKyAgICAgICAgLy8gVGhpcyBp
cyBhIGxhc3QgZGl0Y2ggZWZmb3J0IHRvIHVzZSBhIHN1YnN0aXR1dGUgZm9udCB3aGVuIHNvbWV0
aGluZyBoYXMgZ29uZSB3cm9uZy4KKyNpZiAhRVJST1JfRElTQUJMRUQKKyAgICAgICAgUmV0YWlu
UHRyPE5TRm9udD4gaW5pdGlhbEZvbnQgPSBtX3BsYXRmb3JtRGF0YS5uc0ZvbnQoKTsKKyNlbmRp
ZgorICAgICAgICBpZiAobV9wbGF0Zm9ybURhdGEuZm9udCgpKQorICAgICAgICAgICAgbV9wbGF0
Zm9ybURhdGEuc2V0TlNGb250KFtbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl0gY29u
dmVydEZvbnQ6bV9wbGF0Zm9ybURhdGEubnNGb250KCkgdG9GYW1pbHk6ZmFsbGJhY2tGb250RmFt
aWx5XSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fcGxhdGZvcm1EYXRhLnNldE5TRm9u
dChbTlNGb250IGZvbnRXaXRoTmFtZTpmYWxsYmFja0ZvbnRGYW1pbHkgc2l6ZTptX3BsYXRmb3Jt
RGF0YS5zaXplKCldKTsKKyAgICAgICAgaWYgKCFpbml0Rm9udERhdGEodGhpcykpIHsKKyAgICAg
ICAgICAgIGlmIChbZmFsbGJhY2tGb250RmFtaWx5IGlzRXF1YWw6QCJUaW1lcyBOZXcgUm9tYW4i
XSkgeworICAgICAgICAgICAgICAgIC8vIE9LLCBjb3VsZG4ndCBzZXR1cCBUaW1lcyBOZXcgUm9t
YW4gYXMgYW4gYWx0ZXJuYXRlIHRvIFRpbWVzLCBmYWxsYmFjaworICAgICAgICAgICAgICAgIC8v
IG9uIHRoZSBzeXN0ZW0gZm9udC4gIElmIHRoaXMgZmFpbHMgd2UgaGF2ZSBubyBhbHRlcm5hdGl2
ZSBsZWZ0LgorICAgICAgICAgICAgICAgIG1fcGxhdGZvcm1EYXRhLnNldE5TRm9udChbW05TRm9u
dE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJdIGNvbnZlcnRGb250Om1fcGxhdGZvcm1EYXRhLm5z
Rm9udCgpIHRvRmFtaWx5OndlYkZhbGxiYWNrRm9udEZhbWlseSgpXSk7CisgICAgICAgICAgICAg
ICAgaWYgKCFpbml0Rm9udERhdGEodGhpcykpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gV2Ug
dHJpZWQsIFRpbWVzLCBUaW1lcyBOZXcgUm9tYW4sIGFuZCB0aGUgc3lzdGVtIGZvbnQuIE5vIGpv
eS4gV2UgaGF2ZSB0byBnaXZlIHVwLgorICAgICAgICAgICAgICAgICAgICBMT0dfRVJST1IoInVu
YWJsZSB0byBpbml0aWFsaXplIHdpdGggZm9udCAlQCIsIGluaXRpYWxGb250LmdldCgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgZmFpbGVkU2V0dXAgPSB0cnVlOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gV2UgdHJpZWQgdGhlIHJl
cXVlc3RlZCBmb250IGFuZCB0aGUgc3lzdGVtIGZvbnQuIE5vIGpveS4gV2UgaGF2ZSB0byBnaXZl
IHVwLgorICAgICAgICAgICAgICAgIExPR19FUlJPUigidW5hYmxlIHRvIGluaXRpYWxpemUgd2l0
aCBmb250ICVAIiwgaW5pdGlhbEZvbnQuZ2V0KCkpOworICAgICAgICAgICAgICAgIGZhaWxlZFNl
dHVwID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIFJlcG9y
dCB0aGUgcHJvYmxlbS4KKyAgICAgICAgTE9HX0VSUk9SKCJDb3JydXB0IGZvbnQgZGV0ZWN0ZWQs
IHVzaW5nICVAIGluIHBsYWNlIG9mICVALiIsCisgICAgICAgICAgICBbbV9wbGF0Zm9ybURhdGEu
bnNGb250KCkgZmFtaWx5TmFtZV0sIFtpbml0aWFsRm9udC5nZXQoKSBmYW1pbHlOYW1lXSk7Cisg
ICAgfQorCisgICAgLy8gSWYgYWxsIGVsc2UgZmFpbHMsIHRyeSB0byBzZXQgdXAgdXNpbmcgdGhl
IHN5c3RlbSBmb250LgorICAgIC8vIFRoaXMgaXMgcHJvYmFibHkgYmVjYXVzZSBUaW1lcyBhbmQg
VGltZXMgTmV3IFJvbWFuIGFyZSBib3RoIHVuYXZhaWxhYmxlLgorICAgIGlmIChmYWlsZWRTZXR1
cCkgeworICAgICAgICBtX3BsYXRmb3JtRGF0YS5zZXROU0ZvbnQoW05TRm9udCBzeXN0ZW1Gb250
T2ZTaXplOlttX3BsYXRmb3JtRGF0YS5uc0ZvbnQoKSBwb2ludFNpemVdXSk7CisgICAgICAgIExP
R19FUlJPUigiZmFpbGVkIHRvIHNldCB1cCBmb250LCB1c2luZyBzeXN0ZW0gZm9udCAlcyIsIG1f
cGxhdGZvcm1EYXRhLmZvbnQoKSk7CisgICAgICAgIGluaXRGb250RGF0YSh0aGlzKTsKKyAgICB9
CisgICAgCisgICAgaW50IGlBc2NlbnQ7CisgICAgaW50IGlEZXNjZW50OworICAgIGludCBpQ2Fw
SGVpZ2h0OworICAgIGludCBpTGluZUdhcDsKKyAgICB1bnNpZ25lZCB1bml0c1BlckVtOworICAg
IGlBc2NlbnQgPSBDR0ZvbnRHZXRBc2NlbnQobV9wbGF0Zm9ybURhdGEuY2dGb250KCkpOworICAg
IC8vIFNvbWUgZm9udHMgZXJyb25lb3VzbHkgc3BlY2lmeSBhIHBvc2l0aXZlIGRlc2NlbmRlciB2
YWx1ZS4gV2UgZm9sbG93IENvcmUgVGV4dCBpbiBhc3N1bWluZyB0aGF0CisgICAgLy8gc3VjaCBm
b250cyBtZWFudCB0aGUgc2FtZSBkaXN0YW5jZSwgYnV0IGluIHRoZSByZXZlcnNlIGRpcmVjdGlv
bi4KKyAgICBpRGVzY2VudCA9IC1hYnMoQ0dGb250R2V0RGVzY2VudChtX3BsYXRmb3JtRGF0YS5j
Z0ZvbnQoKSkpOworICAgIGlDYXBIZWlnaHQgPSBDR0ZvbnRHZXRDYXBIZWlnaHQobV9wbGF0Zm9y
bURhdGEuY2dGb250KCkpOworICAgIGlMaW5lR2FwID0gQ0dGb250R2V0TGVhZGluZyhtX3BsYXRm
b3JtRGF0YS5jZ0ZvbnQoKSk7CisgICAgdW5pdHNQZXJFbSA9IENHRm9udEdldFVuaXRzUGVyRW0o
bV9wbGF0Zm9ybURhdGEuY2dGb250KCkpOworCisgICAgZmxvYXQgcG9pbnRTaXplID0gbV9wbGF0
Zm9ybURhdGEubV9zaXplOworICAgIGZsb2F0IGFzY2VudCA9IHNjYWxlRW1Ub1VuaXRzKGlBc2Nl
bnQsIHVuaXRzUGVyRW0pICogcG9pbnRTaXplOworICAgIGZsb2F0IGRlc2NlbnQgPSAtc2NhbGVF
bVRvVW5pdHMoaURlc2NlbnQsIHVuaXRzUGVyRW0pICogcG9pbnRTaXplOworICAgIGZsb2F0IGNh
cEhlaWdodCA9IHNjYWxlRW1Ub1VuaXRzKGlDYXBIZWlnaHQsIHVuaXRzUGVyRW0pICogcG9pbnRT
aXplOworICAgIAorICAgIGZsb2F0IGxpbmVHYXAgPSBzY2FsZUVtVG9Vbml0cyhpTGluZUdhcCwg
dW5pdHNQZXJFbSkgKiBwb2ludFNpemU7CisKKyAgICAvLyBXZSBuZWVkIHRvIGFkanVzdCBUaW1l
cywgSGVsdmV0aWNhLCBhbmQgQ291cmllciB0byBjbG9zZWx5IG1hdGNoIHRoZQorICAgIC8vIHZl
cnRpY2FsIG1ldHJpY3Mgb2YgdGhlaXIgTWljcm9zb2Z0IGNvdW50ZXJwYXJ0cyB0aGF0IGFyZSB0
aGUgZGUgZmFjdG8KKyAgICAvLyB3ZWIgc3RhbmRhcmQuIFRoZSBBcHBLaXQgYWRqdXN0bWVudCBv
ZiAyMCUgaXMgdG9vIGJpZyBhbmQgaXMKKyAgICAvLyBpbmNvcnJlY3RseSBhZGRlZCB0byBsaW5l
IHNwYWNpbmcsIHNvIHdlIHVzZSBhIDE1JSBhZGp1c3RtZW50IGluc3RlYWQKKyAgICAvLyBhbmQg
YWRkIGl0IHRvIHRoZSBhc2NlbnQuCisgICAgTlNTdHJpbmcgKmZhbWlseU5hbWUgPSBbbV9wbGF0
Zm9ybURhdGEubnNGb250KCkgZmFtaWx5TmFtZV07CisgICAgaWYgKFtmYW1pbHlOYW1lIGlzRXF1
YWxUb1N0cmluZzpAIlRpbWVzIl0gfHwgW2ZhbWlseU5hbWUgaXNFcXVhbFRvU3RyaW5nOkAiSGVs
dmV0aWNhIl0gfHwgW2ZhbWlseU5hbWUgaXNFcXVhbFRvU3RyaW5nOkAiQ291cmllciJdKQorICAg
ICAgICBhc2NlbnQgKz0gZmxvb3JmKCgoYXNjZW50ICsgZGVzY2VudCkgKiAwLjE1ZikgKyAwLjVm
KTsKKworICAgIC8vIENvbXB1dGUgYW5kIHN0b3JlIGxpbmUgc3BhY2luZywgYmVmb3JlIHRoZSBs
aW5lIG1ldHJpY3MgaGFja3MgYXJlIGFwcGxpZWQuCisgICAgbV9mb250TWV0cmljcy5zZXRMaW5l
U3BhY2luZyhscm91bmRmKGFzY2VudCkgKyBscm91bmRmKGRlc2NlbnQpICsgbHJvdW5kZihsaW5l
R2FwKSk7CisKKyAgICAvLyBIYWNrIEhpcmFnaW5vIGxpbmUgbWV0cmljcyB0byBhbGxvdyByb29t
IGZvciBtYXJrZWQgdGV4dCB1bmRlcmxpbmVzLgorICAgIC8vIDxyZGFyOi8vcHJvYmxlbS81Mzg2
MTgzPgorICAgIGlmIChkZXNjZW50IDwgMyAmJiBsaW5lR2FwID49IDMgJiYgW2ZhbWlseU5hbWUg
aGFzUHJlZml4OkAiSGlyYWdpbm8iXSkgeworICAgICAgICBsaW5lR2FwIC09IDMgLSBkZXNjZW50
OworICAgICAgICBkZXNjZW50ID0gMzsKKyAgICB9CisgICAgCisgICAgaWYgKHBsYXRmb3JtRGF0
YSgpLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwgJiYgIWlzVGV4dE9yaWVudGF0aW9uRmFsbGJh
Y2soKSkKKyAgICAgICAgbV9oYXNWZXJ0aWNhbEdseXBocyA9IGZvbnRIYXNWZXJ0aWNhbEdseXBo
cyhtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSk7CisKKyAgICBmbG9hdCB4SGVpZ2h0OworCisgICAg
aWYgKHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbCkgeworICAgICAg
ICAvLyBNZWFzdXJlIHRoZSBhY3R1YWwgY2hhcmFjdGVyICJ4Iiwgc2luY2UgaXQncyBwb3NzaWJs
ZSBmb3IgaXQgdG8gZXh0ZW5kIGJlbG93IHRoZSBiYXNlbGluZSwgYW5kIHdlIG5lZWQgdGhlCisg
ICAgICAgIC8vIHJlcG9ydGVkIHgtaGVpZ2h0IHRvIG9ubHkgaW5jbHVkZSB0aGUgcG9ydGlvbiBv
ZiB0aGUgZ2x5cGggdGhhdCBpcyBhYm92ZSB0aGUgYmFzZWxpbmUuCisgICAgICAgIE5TR2x5cGgg
eEdseXBoID0gZ2x5cGhGb3JDaGFyYWN0ZXIoJ3gnKTsKKyAgICAgICAgaWYgKHhHbHlwaCkKKyAg
ICAgICAgICAgIHhIZWlnaHQgPSAtQ0dSZWN0R2V0TWluWShwbGF0Zm9ybUJvdW5kc0ZvckdseXBo
KHhHbHlwaCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB4SGVpZ2h0ID0gc2NhbGVFbVRv
VW5pdHMoQ0dGb250R2V0WEhlaWdodChtX3BsYXRmb3JtRGF0YS5jZ0ZvbnQoKSksIHVuaXRzUGVy
RW0pICogcG9pbnRTaXplOworICAgIH0gZWxzZQorICAgICAgICB4SGVpZ2h0ID0gdmVydGljYWxS
aWdodE9yaWVudGF0aW9uRm9udERhdGEoKS0+Zm9udE1ldHJpY3MoKS54SGVpZ2h0KCk7CisKKyAg
ICBtX2ZvbnRNZXRyaWNzLnNldFVuaXRzUGVyRW0odW5pdHNQZXJFbSk7CisgICAgbV9mb250TWV0
cmljcy5zZXRBc2NlbnQoYXNjZW50KTsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldERlc2NlbnQoZGVz
Y2VudCk7CisgICAgbV9mb250TWV0cmljcy5zZXRDYXBIZWlnaHQoY2FwSGVpZ2h0KTsKKyAgICBt
X2ZvbnRNZXRyaWNzLnNldExpbmVHYXAobGluZUdhcCk7CisgICAgbV9mb250TWV0cmljcy5zZXRY
SGVpZ2h0KHhIZWlnaHQpOworfQorCitzdGF0aWMgQ0ZEYXRhUmVmIGNvcHlGb250VGFibGVGb3JU
YWcoRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhLCBGb3VyQ2hhckNvZGUgdGFibGVOYW1l
KQoreworICAgIHJldHVybiBDR0ZvbnRDb3B5VGFibGVGb3JUYWcocGxhdGZvcm1EYXRhLmNnRm9u
dCgpLCB0YWJsZU5hbWUpOworfQorCit2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUNoYXJX
aWR0aEluaXQoKQoreworICAgIG1fYXZnQ2hhcldpZHRoID0gMDsKKyAgICBtX21heENoYXJXaWR0
aCA9IDA7CisgICAgCisgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gb3MyVGFibGUgPSBhZG9wdENG
KGNvcHlGb250VGFibGVGb3JUYWcobV9wbGF0Zm9ybURhdGEsICdPUy8yJykpOworICAgIGlmIChv
czJUYWJsZSAmJiBDRkRhdGFHZXRMZW5ndGgob3MyVGFibGUuZ2V0KCkpID49IDQpIHsKKyAgICAg
ICAgY29uc3QgVUludDgqIG9zMiA9IENGRGF0YUdldEJ5dGVQdHIob3MyVGFibGUuZ2V0KCkpOwor
ICAgICAgICBTSW50MTYgb3MyQXZnQ2hhcldpZHRoID0gb3MyWzJdICogMjU2ICsgb3MyWzNdOwor
ICAgICAgICBtX2F2Z0NoYXJXaWR0aCA9IHNjYWxlRW1Ub1VuaXRzKG9zMkF2Z0NoYXJXaWR0aCwg
bV9mb250TWV0cmljcy51bml0c1BlckVtKCkpICogbV9wbGF0Zm9ybURhdGEubV9zaXplOworICAg
IH0KKworICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGhlYWRUYWJsZSA9IGFkb3B0Q0YoY29weUZv
bnRUYWJsZUZvclRhZyhtX3BsYXRmb3JtRGF0YSwgJ2hlYWQnKSk7CisgICAgaWYgKGhlYWRUYWJs
ZSAmJiBDRkRhdGFHZXRMZW5ndGgoaGVhZFRhYmxlLmdldCgpKSA+PSA0MikgeworICAgICAgICBj
b25zdCBVSW50OCogaGVhZCA9IENGRGF0YUdldEJ5dGVQdHIoaGVhZFRhYmxlLmdldCgpKTsKKyAg
ICAgICAgdXNob3J0IHV4TWluID0gaGVhZFszNl0gKiAyNTYgKyBoZWFkWzM3XTsKKyAgICAgICAg
dXNob3J0IHV4TWF4ID0gaGVhZFs0MF0gKiAyNTYgKyBoZWFkWzQxXTsKKyAgICAgICAgU0ludDE2
IHhNaW4gPSBzdGF0aWNfY2FzdDxTSW50MTY+KHV4TWluKTsKKyAgICAgICAgU0ludDE2IHhNYXgg
PSBzdGF0aWNfY2FzdDxTSW50MTY+KHV4TWF4KTsKKyAgICAgICAgZmxvYXQgZGlmZiA9IHN0YXRp
Y19jYXN0PGZsb2F0Pih4TWF4IC0geE1pbik7CisgICAgICAgIG1fbWF4Q2hhcldpZHRoID0gc2Nh
bGVFbVRvVW5pdHMoZGlmZiwgbV9mb250TWV0cmljcy51bml0c1BlckVtKCkpICogbV9wbGF0Zm9y
bURhdGEubV9zaXplOworICAgIH0KKworICAgIC8vIEZhbGxiYWNrIHRvIGEgY3Jvc3MtcGxhdGZv
cm0gZXN0aW1hdGUsIHdoaWNoIHdpbGwgcG9wdWxhdGUgdGhlc2UgdmFsdWVzIGlmIHRoZXkgYXJl
IG5vbi1wb3NpdGl2ZS4KKyAgICBpbml0Q2hhcldpZHRocygpOworfQorI2VuZGlmIC8vIFVTRShB
UFBLSVQpCisKK3ZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtRGVzdHJveSgpCit7Cit9CisK
KyNpZiAhUExBVEZPUk0oSU9TKQorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9u
dERhdGE6OnBsYXRmb3JtQ3JlYXRlU2NhbGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAoreworICAgIGlmIChp
c0N1c3RvbUZvbnQoKSkgeworICAgICAgICBGb250UGxhdGZvcm1EYXRhIHNjYWxlZEZvbnREYXRh
KG1fcGxhdGZvcm1EYXRhKTsKKyAgICAgICAgc2NhbGVkRm9udERhdGEubV9zaXplID0gc2NhbGVk
Rm9udERhdGEubV9zaXplICogc2NhbGVGYWN0b3I7CisgICAgICAgIHJldHVybiBTaW1wbGVGb250
RGF0YTo6Y3JlYXRlKHNjYWxlZEZvbnREYXRhLCB0cnVlLCBmYWxzZSk7CisgICAgfQorCisgICAg
QkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIGZsb2F0IHNpemUgPSBtX3BsYXRmb3Jt
RGF0YS5zaXplKCkgKiBzY2FsZUZhY3RvcjsKKyAgICBGb250UGxhdGZvcm1EYXRhIHNjYWxlZEZv
bnREYXRhKFtbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl0gY29udmVydEZvbnQ6bV9w
bGF0Zm9ybURhdGEubnNGb250KCkgdG9TaXplOnNpemVdLCBzaXplLCBtX3BsYXRmb3JtRGF0YS5p
c1ByaW50ZXJGb250KCksIGZhbHNlLCBmYWxzZSwgbV9wbGF0Zm9ybURhdGEub3JpZW50YXRpb24o
KSk7CisKKyAgICAvLyBBcHBLaXQgcmVzZXRzIHRoZSB0eXBlIGluZm9ybWF0aW9uIChzY3JlZW4v
cHJpbnRlcikgd2hlbiB5b3UgY29udmVydCBhIGZvbnQgdG8gYSBkaWZmZXJlbnQgc2l6ZS4KKyAg
ICAvLyBXZSBoYXZlIHRvIGZpeCB1cCB0aGUgZm9udCB0aGF0IHdlJ3JlIGhhbmRlZCBiYWNrLgor
ICAgIHNjYWxlZEZvbnREYXRhLnNldE5TRm9udChmb250RGVzY3JpcHRpb24udXNlUHJpbnRlckZv
bnQoKSA/IFtzY2FsZWRGb250RGF0YS5uc0ZvbnQoKSBwcmludGVyRm9udF0gOiBbc2NhbGVkRm9u
dERhdGEubnNGb250KCkgc2NyZWVuRm9udF0pOworCisgICAgaWYgKHNjYWxlZEZvbnREYXRhLmZv
bnQoKSkgeworICAgICAgICBOU0ZvbnRNYW5hZ2VyICpmb250TWFuYWdlciA9IFtOU0ZvbnRNYW5h
Z2VyIHNoYXJlZEZvbnRNYW5hZ2VyXTsKKyAgICAgICAgTlNGb250VHJhaXRNYXNrIGZvbnRUcmFp
dHMgPSBbZm9udE1hbmFnZXIgdHJhaXRzT2ZGb250Om1fcGxhdGZvcm1EYXRhLm5zRm9udCgpXTsK
KworICAgICAgICBpZiAobV9wbGF0Zm9ybURhdGEubV9zeW50aGV0aWNCb2xkKQorICAgICAgICAg
ICAgZm9udFRyYWl0cyB8PSBOU0JvbGRGb250TWFzazsKKyAgICAgICAgaWYgKG1fcGxhdGZvcm1E
YXRhLm1fc3ludGhldGljT2JsaXF1ZSkKKyAgICAgICAgICAgIGZvbnRUcmFpdHMgfD0gTlNJdGFs
aWNGb250TWFzazsKKworICAgICAgICBOU0ZvbnRUcmFpdE1hc2sgc2NhbGVkRm9udFRyYWl0cyA9
IFtmb250TWFuYWdlciB0cmFpdHNPZkZvbnQ6c2NhbGVkRm9udERhdGEubnNGb250KCldOworICAg
ICAgICBzY2FsZWRGb250RGF0YS5tX3N5bnRoZXRpY0JvbGQgPSAoZm9udFRyYWl0cyAmIE5TQm9s
ZEZvbnRNYXNrKSAmJiAhKHNjYWxlZEZvbnRUcmFpdHMgJiBOU0JvbGRGb250TWFzayk7CisgICAg
ICAgIHNjYWxlZEZvbnREYXRhLm1fc3ludGhldGljT2JsaXF1ZSA9IChmb250VHJhaXRzICYgTlNJ
dGFsaWNGb250TWFzaykgJiYgIShzY2FsZWRGb250VHJhaXRzICYgTlNJdGFsaWNGb250TWFzayk7
CisKKyAgICAgICAgcmV0dXJuIGZvbnRDYWNoZSgpLmZvbnRGb3JQbGF0Zm9ybURhdGEoc2NhbGVk
Rm9udERhdGEpOworICAgIH0KKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworCisgICAg
cmV0dXJuIDA7Cit9CisKK3ZvaWQgU2ltcGxlRm9udERhdGE6OmRldGVybWluZVBpdGNoKCkKK3sK
KyAgICBOU0ZvbnQqIGYgPSBtX3BsYXRmb3JtRGF0YS5uc0ZvbnQoKTsKKyAgICAvLyBTcGVjaWFs
IGNhc2UgT3Nha2EtTW9uby4KKyAgICAvLyBBY2NvcmRpbmcgdG8gPHJkYXI6Ly9wcm9ibGVtLzM5
OTk0Njc+LCB3ZSBzaG91bGQgdHJlYXQgT3Nha2EtTW9ubyBhcyBmaXhlZCBwaXRjaC4KKyAgICAv
LyBOb3RlIHRoYXQgdGhlIEFwcEtpdCBkb2VzIG5vdCByZXBvcnQgT3Nha2EtTW9ubyBhcyBmaXhl
ZCBwaXRjaC4KKworICAgIC8vIFNwZWNpYWwgY2FzZSBNUy1QR290aGljLgorICAgIC8vIEFjY29y
ZGluZyB0byA8cmRhcjovL3Byb2JsZW0vNDAzMjkzOD4sIHdlIHNob3VsZCBub3QgdHJlYXQgTVMt
UEdvdGhpYyBhcyBmaXhlZCBwaXRjaC4KKyAgICAvLyBOb3RlIHRoYXQgQXBwS2l0IGRvZXMgcmVw
b3J0IE1TLVBHb3RoaWMgYXMgZml4ZWQgcGl0Y2guCisKKyAgICAvLyBTcGVjaWFsIGNhc2UgTW9u
b3R5cGVDb3JzaXZhCisgICAgLy8gQWNjb3JkaW5nIHRvIDxyZGFyOi8vcHJvYmxlbS81NDU0NzA0
Piwgd2Ugc2hvdWxkIG5vdCB0cmVhdCBNb25vdHlwZUNvcnNpdmEgYXMgZml4ZWQgcGl0Y2guCisg
ICAgLy8gTm90ZSB0aGF0IEFwcEtpdCBkb2VzIHJlcG9ydCBNb25vdHlwZUNvcnNpdmEgYXMgZml4
ZWQgcGl0Y2guCisKKyAgICBOU1N0cmluZyAqbmFtZSA9IFtmIGZvbnROYW1lXTsKKyAgICBtX3Ry
ZWF0QXNGaXhlZFBpdGNoID0gKFtmIGlzRml4ZWRQaXRjaF0gfHwgW2YgX2lzRmFrZUZpeGVkUGl0
Y2hdIHx8CisgICAgICAgICAgIFtuYW1lIGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmU6QCJPc2FrYS1N
b25vIl0gPT0gTlNPcmRlcmVkU2FtZSkgJiYKKyAgICAgICAgICAgW25hbWUgY2FzZUluc2Vuc2l0
aXZlQ29tcGFyZTpAIk1TLVBHb3RoaWMiXSAhPSBOU09yZGVyZWRTYW1lICYmCisgICAgICAgICAg
IFtuYW1lIGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmU6QCJNb25vdHlwZUNvcnNpdmEiXSAhPSBOU09y
ZGVyZWRTYW1lOworfQorI2VuZGlmIC8vICFQTEFURk9STShJT1MpCisKK0Zsb2F0UmVjdCBTaW1w
bGVGb250RGF0YTo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKK3sK
KyAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3g7CisgICAgYm91bmRpbmdCb3ggPSBDVEZvbnRHZXRC
b3VuZGluZ1JlY3RzRm9yR2x5cGhzKG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBwbGF0Zm9ybURh
dGEoKS5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsID8ga0NURm9udFZlcnRpY2FsT3JpZW50YXRp
b24gOiBrQ1RGb250SG9yaXpvbnRhbE9yaWVudGF0aW9uLCAmZ2x5cGgsIDAsIDEpOworICAgIGJv
dW5kaW5nQm94LnNldFkoLWJvdW5kaW5nQm94Lm1heFkoKSk7CisgICAgaWYgKG1fc3ludGhldGlj
Qm9sZE9mZnNldCkKKyAgICAgICAgYm91bmRpbmdCb3guc2V0V2lkdGgoYm91bmRpbmdCb3gud2lk
dGgoKSArIG1fc3ludGhldGljQm9sZE9mZnNldCk7CisKKyAgICByZXR1cm4gYm91bmRpbmdCb3g7
Cit9CisKKyNpZiBQTEFURk9STShNQUMpCitpbmxpbmUgQ0dGb250UmVuZGVyaW5nU3R5bGUgU2lt
cGxlRm9udERhdGE6OnJlbmRlcmluZ1N0eWxlKCkgY29uc3QKK3sKKyAgICBDR0ZvbnRSZW5kZXJp
bmdTdHlsZSBzdHlsZSA9IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZUFudGlhbGlhc2luZyB8IGtDR0Zv
bnRSZW5kZXJpbmdTdHlsZVN1YnBpeGVsUG9zaXRpb25pbmcgfCBrQ0dGb250UmVuZGVyaW5nU3R5
bGVTdWJwaXhlbFF1YW50aXphdGlvbjsKKyAgICBOU0ZvbnQgKmZvbnQgPSBwbGF0Zm9ybURhdGEo
KS5uc0ZvbnQoKTsKKyAgICBpZiAoZm9udCkgeworICAgICAgICBzd2l0Y2ggKFtmb250IHJlbmRl
cmluZ01vZGVdKSB7CisgICAgICAgIGNhc2UgTlNGb250SW50ZWdlckFkdmFuY2VtZW50c1JlbmRl
cmluZ01vZGU6CisgICAgICAgICAgICBzdHlsZSA9IDA7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBOU0ZvbnRBbnRpYWxpYXNlZEludGVnZXJBZHZhbmNlbWVudHNSZW5kZXJpbmdN
b2RlOgorICAgICAgICAgICAgc3R5bGUgPSBrQ0dGb250UmVuZGVyaW5nU3R5bGVBbnRpYWxpYXNp
bmc7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBzdHlsZTsKK30KKworaW5saW5lIGJv
b2wgU2ltcGxlRm9udERhdGE6OmFkdmFuY2VGb3JDb2xvckJpdG1hcEZvbnQoR2x5cGggZ2x5cGgs
IENHU2l6ZSYgYWR2YW5jZSkgY29uc3QKK3sKKyAgICBOU0ZvbnQgKmZvbnQgPSBwbGF0Zm9ybURh
dGEoKS5uc0ZvbnQoKTsKKyAgICBpZiAoIWZvbnQgfHwgIXBsYXRmb3JtRGF0YSgpLmlzQ29sb3JC
aXRtYXBGb250KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhZHZhbmNlID0gTlNTaXpl
VG9DR1NpemUoW2ZvbnQgYWR2YW5jZW1lbnRGb3JHbHlwaDpnbHlwaF0pOworICAgIHJldHVybiB0
cnVlOworfQorI2VuZGlmCisKK3N0YXRpYyBib29sIGhhc0N1c3RvbVRyYWNraW5nKENURm9udFJl
ZiBmb250KQoreworI2lmIFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9S
RVFVSVJFRCA8IDEwOTAKKyAgICBVTlVTRURfUEFSQU0oZm9udCk7CisgICAgcmV0dXJuIGZhbHNl
OworI2Vsc2UKKyAgICByZXR1cm4gQ1RGb250RGVzY3JpcHRvcklzU3lzdGVtVUlGb250KGFkb3B0
Q0YoQ1RGb250Q29weUZvbnREZXNjcmlwdG9yKGZvbnQpKS5nZXQoKSk7CisjZW5kaWYKK30KKwor
c3RhdGljIGlubGluZSBib29sIGlzRW1vamkoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZv
cm1EYXRhKQoreworI2lmIFBMQVRGT1JNKElPUykKKyAgICByZXR1cm4gcGxhdGZvcm1EYXRhLm1f
aXNFbW9qaTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHBsYXRmb3JtRGF0YSk7CisgICAgcmV0
dXJuIGZhbHNlOworI2VuZGlmCit9CisKK2lubGluZSBib29sIFNpbXBsZUZvbnREYXRhOjpjYW5V
c2VGYXN0R2x5cGhBZHZhbmNlR2V0dGVyKEdseXBoIGdseXBoLCBDR1NpemUmIGFkdmFuY2UsIGJv
b2wmIHBvcHVsYXRlZEFkdmFuY2UpIGNvbnN0Cit7CisgICAgLy8gRmFzdCBnZXR0ZXIgZG9lc24n
dCB0YWtlIGN1c3RvbSB0cmFja2luZyBpbnRvIGFjY291bnQKKyAgICBpZiAoaGFzQ3VzdG9tVHJh
Y2tpbmcocGxhdGZvcm1EYXRhKCkuY3RGb250KCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgLy8gRmFzdCBnZXR0ZXIgZG9lc24ndCB3b3JrIGZvciBlbW9qaQorICAgIGlmIChpc0Vtb2pp
KHBsYXRmb3JtRGF0YSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIC8vIC4uLiBvciBm
b3IgYW55IGJpdG1hcCBmb250cyBpbiBnZW5lcmFsCisgICAgaWYgKGFkdmFuY2VGb3JDb2xvckJp
dG1hcEZvbnQoZ2x5cGgsIGFkdmFuY2UpKSB7CisgICAgICAgIHBvcHVsYXRlZEFkdmFuY2UgPSB0
cnVlOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQor
CitmbG9hdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBo
KSBjb25zdAoreworICAgIENHU2l6ZSBhZHZhbmNlID0gQ0dTaXplWmVybzsKKyAgICBib29sIGhv
cml6b250YWwgPSBwbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IEhvcml6b250YWw7Cisg
ICAgYm9vbCBwb3B1bGF0ZWRBZHZhbmNlID0gZmFsc2U7CisgICAgaWYgKChob3Jpem9udGFsIHx8
IG1faXNCcm9rZW5JZGVvZ3JhcGhGYWxsYmFjaykgJiYgY2FuVXNlRmFzdEdseXBoQWR2YW5jZUdl
dHRlcihnbHlwaCwgYWR2YW5jZSwgcG9wdWxhdGVkQWR2YW5jZSkpIHsKKyAgICAgICAgZmxvYXQg
cG9pbnRTaXplID0gcGxhdGZvcm1EYXRhKCkubV9zaXplOworICAgICAgICBDR0FmZmluZVRyYW5z
Zm9ybSBtID0gQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlU2NhbGUocG9pbnRTaXplLCBwb2ludFNpemUp
OworICAgICAgICBpZiAoIUNHRm9udEdldEdseXBoQWR2YW5jZXNGb3JTdHlsZShwbGF0Zm9ybURh
dGEoKS5jZ0ZvbnQoKSwgJm0sIHJlbmRlcmluZ1N0eWxlKCksICZnbHlwaCwgMSwgJmFkdmFuY2Up
KSB7CisgICAgICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGZ1bGxOYW1lID0gYWRvcHRD
RihDR0ZvbnRDb3B5RnVsbE5hbWUocGxhdGZvcm1EYXRhKCkuY2dGb250KCkpKTsKKyAgICAgICAg
ICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGNhY2hlIGdseXBoIHdpZHRocyBmb3IgJUAgJWYiLCBm
dWxsTmFtZS5nZXQoKSwgcG9pbnRTaXplKTsKKyAgICAgICAgICAgIGFkdmFuY2Uud2lkdGggPSAw
OworICAgICAgICB9CisgICAgfSBlbHNlIGlmICghcG9wdWxhdGVkQWR2YW5jZSkKKyAgICAgICAg
Q1RGb250R2V0QWR2YW5jZXNGb3JHbHlwaHMobV9wbGF0Zm9ybURhdGEuY3RGb250KCksIGhvcml6
b250YWwgPyBrQ1RGb250SG9yaXpvbnRhbE9yaWVudGF0aW9uIDoga0NURm9udFZlcnRpY2FsT3Jp
ZW50YXRpb24sICZnbHlwaCwgJmFkdmFuY2UsIDEpOworCisgICAgcmV0dXJuIGFkdmFuY2Uud2lk
dGggKyBtX3N5bnRoZXRpY0JvbGRPZmZzZXQ7Cit9CisKK3N0cnVjdCBQcm92aWRlckluZm8gewor
ICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzOworICAgIHNpemVfdCBsZW5ndGg7CisgICAgQ0ZE
aWN0aW9uYXJ5UmVmIGF0dHJpYnV0ZXM7Cit9OworCitzdGF0aWMgY29uc3QgVW5pQ2hhciogcHJv
dmlkZVN0cmluZ0FuZEF0dHJpYnV0ZXMoQ0ZJbmRleCBzdHJpbmdJbmRleCwgQ0ZJbmRleCogY291
bnQsIENGRGljdGlvbmFyeVJlZiogYXR0cmlidXRlcywgdm9pZCogY29udGV4dCkKK3sKKyAgICBQ
cm92aWRlckluZm8qIGluZm8gPSBzdGF0aWNfY2FzdDxzdHJ1Y3QgUHJvdmlkZXJJbmZvKj4oY29u
dGV4dCk7CisgICAgaWYgKHN0cmluZ0luZGV4IDwgMCB8fCBzdGF0aWNfY2FzdDxzaXplX3Q+KHN0
cmluZ0luZGV4KSA+PSBpbmZvLT5sZW5ndGgpCisgICAgICAgIHJldHVybiAwOworCisgICAgKmNv
dW50ID0gaW5mby0+bGVuZ3RoIC0gc3RyaW5nSW5kZXg7CisgICAgKmF0dHJpYnV0ZXMgPSBpbmZv
LT5hdHRyaWJ1dGVzOworICAgIHJldHVybiBpbmZvLT5jaGFyYWN0ZXJzICsgc3RyaW5nSW5kZXg7
Cit9CisKK2Jvb2wgU2ltcGxlRm9udERhdGE6OmNhblJlbmRlckNvbWJpbmluZ0NoYXJhY3RlclNl
cXVlbmNlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKSBjb25zdAorewor
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICBpZiAoIW1fY29tYmluaW5nQ2hhcmFj
dGVyU2VxdWVuY2VTdXBwb3J0KQorICAgICAgICBtX2NvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNl
U3VwcG9ydCA9IHN0ZDo6bWFrZV91bmlxdWU8SGFzaE1hcDxTdHJpbmcsIGJvb2w+PigpOworCisg
ICAgV1RGOjpIYXNoTWFwPFN0cmluZywgYm9vbD46OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSBtX2Nv
bWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlU3VwcG9ydC0+YWRkKFN0cmluZyhjaGFyYWN0ZXJzLCBs
ZW5ndGgpLCBmYWxzZSk7CisgICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAg
cmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CisKKyAgICBSZXRhaW5QdHI8Q0ZUeXBl
UmVmPiBmb250RXF1YWxpdHlPYmplY3QgPSBwbGF0Zm9ybURhdGEoKS5vYmplY3RGb3JFcXVhbGl0
eUNoZWNrKCk7CisKKyAgICBQcm92aWRlckluZm8gaW5mbyA9IHsgY2hhcmFjdGVycywgbGVuZ3Ro
LCBnZXRDRlN0cmluZ0F0dHJpYnV0ZXMoMCwgcGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSkg
fTsKKyAgICBSZXRhaW5QdHI8Q1RMaW5lUmVmPiBsaW5lID0gYWRvcHRDRihDVExpbmVDcmVhdGVX
aXRoVW5pQ2hhclByb3ZpZGVyKCZwcm92aWRlU3RyaW5nQW5kQXR0cmlidXRlcywgMCwgJmluZm8p
KTsKKworICAgIENGQXJyYXlSZWYgcnVuQXJyYXkgPSBDVExpbmVHZXRHbHlwaFJ1bnMobGluZS5n
ZXQoKSk7CisgICAgQ0ZJbmRleCBydW5Db3VudCA9IENGQXJyYXlHZXRDb3VudChydW5BcnJheSk7
CisKKyAgICBmb3IgKENGSW5kZXggciA9IDA7IHIgPCBydW5Db3VudDsgcisrKSB7CisgICAgICAg
IENUUnVuUmVmIGN0UnVuID0gc3RhdGljX2Nhc3Q8Q1RSdW5SZWY+KENGQXJyYXlHZXRWYWx1ZUF0
SW5kZXgocnVuQXJyYXksIHIpKTsKKyAgICAgICAgQVNTRVJUKENGR2V0VHlwZUlEKGN0UnVuKSA9
PSBDVFJ1bkdldFR5cGVJRCgpKTsKKyAgICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIHJ1bkF0dHJpYnV0
ZXMgPSBDVFJ1bkdldEF0dHJpYnV0ZXMoY3RSdW4pOworICAgICAgICBDVEZvbnRSZWYgcnVuRm9u
dCA9IHN0YXRpY19jYXN0PENURm9udFJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocnVuQXR0cmli
dXRlcywga0NURm9udEF0dHJpYnV0ZU5hbWUpKTsKKyAgICAgICAgaWYgKCFDRkVxdWFsKGZvbnRF
cXVhbGl0eU9iamVjdC5nZXQoKSwgRm9udFBsYXRmb3JtRGF0YTo6b2JqZWN0Rm9yRXF1YWxpdHlD
aGVjayhydW5Gb250KS5nZXQoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IHRydWU7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL21hYy9Gb250TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250TWFjLm1tCSh3b3JraW5nIGNvcHkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udE1hYy5tbQkod29ya2luZyBjb3B5
KQpAQCAtMjUsNyArMjUsNyBAQAogICovCiAKICNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAi
U2ltcGxlRm9udERhdGEuaCIKKyNpbXBvcnQgIkZvbnQuaCIKIAogI2ltcG9ydCAiQmxvY2tFeGNl
cHRpb25zLmgiCiAjaW1wb3J0ICJDb2xvci5oIgpAQCAtNzEsOSArNzEsOSBAQCBzdGF0aWMgYm9v
bCBmb250SGFzVmVydGljYWxHbHlwaHMoQ1RGb250CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1z
dGF0aWMgYm9vbCBpbml0Rm9udERhdGEoU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQorc3RhdGlj
IGJvb2wgaW5pdEZvbnREYXRhKEZvbnQqIGZvbnQpCiB7Ci0gICAgaWYgKCFmb250RGF0YS0+cGxh
dGZvcm1EYXRhKCkuY2dGb250KCkpCisgICAgaWYgKCFmb250LT5wbGF0Zm9ybURhdGEoKS5jZ0Zv
bnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIHRydWU7CkBAIC04NSw3
ICs4NSw3IEBAIHN0YXRpYyBOU1N0cmluZyAqd2ViRmFsbGJhY2tGb250RmFtaWx5KHYKICAgICBy
ZXR1cm4gd2ViRmFsbGJhY2tGb250RmFtaWx5OwogfQogCi1jb25zdCBTaW1wbGVGb250RGF0YSog
U2ltcGxlRm9udERhdGE6OmNvbXBvc2l0ZUZvbnRSZWZlcmVuY2VGb250RGF0YShOU0ZvbnQgKmtl
eSkgY29uc3QKK2NvbnN0IEZvbnQqIEZvbnQ6OmNvbXBvc2l0ZUZvbnRSZWZlcmVuY2VGb250KE5T
Rm9udCAqa2V5KSBjb25zdAogewogICAgIGlmICgha2V5IHx8IENGRXF1YWwoYWRvcHRDRihDVEZv
bnRDb3B5UG9zdFNjcmlwdE5hbWUoQ1RGb250UmVmKGtleSkpKS5nZXQoKSwgQ0ZTVFIoIkxhc3RS
ZXNvcnQiKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMTAzLDEyICsxMDMsMTIgQEAg
Y29uc3QgU2ltcGxlRm9udERhdGEqIFNpbXBsZUZvbnREYXRhOjpjbwogICAgICAgICBib29sIHN5
bnRoZXRpY09ibGlxdWUgPSBwbGF0Zm9ybURhdGEoKS5zeW50aGV0aWNPYmxpcXVlKCkgJiYgISh0
cmFpdHMgJiBrQ1RGb250SXRhbGljVHJhaXQpOwogCiAgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEg
c3Vic3RpdHV0ZVBsYXRmb3JtKHN1YnN0aXR1dGVGb250LCBwbGF0Zm9ybURhdGEoKS5zaXplKCks
IGlzVXNpbmdQcmludGVyRm9udCwgc3ludGhldGljQm9sZCwgc3ludGhldGljT2JsaXF1ZSwgcGxh
dGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSwgcGxhdGZvcm1EYXRhKCkud2lkdGhWYXJpYW50KCkp
OwotICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gU2ltcGxlRm9udERhdGE6OmNy
ZWF0ZShzdWJzdGl0dXRlUGxhdGZvcm0sIGlzQ3VzdG9tRm9udCgpKTsKKyAgICAgICAgYWRkUmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZSA9IEZvbnQ6OmNyZWF0ZShzdWJzdGl0dXRlUGxhdGZvcm0sIGlz
Q3VzdG9tRm9udCgpKTsKICAgICB9CiAgICAgcmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFs
dWUuZ2V0KCk7CiB9CiAKLXZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtSW5pdCgpCit2b2lk
IEZvbnQ6OnBsYXRmb3JtSW5pdCgpCiB7CiAgICAgbV9zeW50aGV0aWNCb2xkT2Zmc2V0ID0gbV9w
bGF0Zm9ybURhdGEubV9zeW50aGV0aWNCb2xkID8gMS4wZiA6IDAuZjsKIApAQCAtMjE5LDcgKzIx
OSw3IEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtSW5pdCgpCiAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgIHhIZWlnaHQgPSBzY2FsZUVtVG9Vbml0cyhDR0ZvbnRHZXRYSGVpZ2h0KG1f
cGxhdGZvcm1EYXRhLmNnRm9udCgpKSwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemU7CiAgICAgfSBl
bHNlCi0gICAgICAgIHhIZWlnaHQgPSB2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250RGF0YSgp
LT5mb250TWV0cmljcygpLnhIZWlnaHQoKTsKKyAgICAgICAgeEhlaWdodCA9IHZlcnRpY2FsUmln
aHRPcmllbnRhdGlvbkZvbnQoKS0+Zm9udE1ldHJpY3MoKS54SGVpZ2h0KCk7CiAKICAgICBtX2Zv
bnRNZXRyaWNzLnNldFVuaXRzUGVyRW0odW5pdHNQZXJFbSk7CiAgICAgbV9mb250TWV0cmljcy5z
ZXRBc2NlbnQoYXNjZW50KTsKQEAgLTIzNCw3ICsyMzQsNyBAQCBzdGF0aWMgQ0ZEYXRhUmVmIGNv
cHlGb250VGFibGVGb3JUYWcoRm9uCiAgICAgcmV0dXJuIENHRm9udENvcHlUYWJsZUZvclRhZyhw
bGF0Zm9ybURhdGEuY2dGb250KCksIHRhYmxlTmFtZSk7CiB9CiAKLXZvaWQgU2ltcGxlRm9udERh
dGE6OnBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpCit2b2lkIEZvbnQ6OnBsYXRmb3JtQ2hhcldpZHRo
SW5pdCgpCiB7CiAgICAgbV9hdmdDaGFyV2lkdGggPSAwOwogICAgIG1fbWF4Q2hhcldpZHRoID0g
MDsKQEAgLTI2MiwxNyArMjYyLDE3IEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQ2hh
cldpZHRoSW4KIH0KICNlbmRpZiAvLyBVU0UoQVBQS0lUKQogCi12b2lkIFNpbXBsZUZvbnREYXRh
OjpwbGF0Zm9ybURlc3Ryb3koKQordm9pZCBGb250OjpwbGF0Zm9ybURlc3Ryb3koKQogewogfQog
CiAjaWYgIVBMQVRGT1JNKElPUykKLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZv
bnREYXRhOjpwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlv
biYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3QKK1Bhc3NSZWZQdHI8
Rm9udD4gRm9udDo6cGxhdGZvcm1DcmVhdGVTY2FsZWRGb250KGNvbnN0IEZvbnREZXNjcmlwdGlv
biYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3QKIHsKICAgICBpZiAo
aXNDdXN0b21Gb250KCkpIHsKICAgICAgICAgRm9udFBsYXRmb3JtRGF0YSBzY2FsZWRGb250RGF0
YShtX3BsYXRmb3JtRGF0YSk7CiAgICAgICAgIHNjYWxlZEZvbnREYXRhLm1fc2l6ZSA9IHNjYWxl
ZEZvbnREYXRhLm1fc2l6ZSAqIHNjYWxlRmFjdG9yOwotICAgICAgICByZXR1cm4gU2ltcGxlRm9u
dERhdGE6OmNyZWF0ZShzY2FsZWRGb250RGF0YSwgdHJ1ZSwgZmFsc2UpOworICAgICAgICByZXR1
cm4gRm9udDo6Y3JlYXRlKHNjYWxlZEZvbnREYXRhLCB0cnVlLCBmYWxzZSk7CiAgICAgfQogCiAg
ICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwpAQCAtMzAzLDcgKzMwMyw3IEBAIFBhc3NS
ZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXQKICAgICByZXR1cm4gMDsKIH0KIAot
dm9pZCBTaW1wbGVGb250RGF0YTo6ZGV0ZXJtaW5lUGl0Y2goKQordm9pZCBGb250OjpkZXRlcm1p
bmVQaXRjaCgpCiB7CiAgICAgTlNGb250KiBmID0gbV9wbGF0Zm9ybURhdGEubnNGb250KCk7CiAg
ICAgLy8gU3BlY2lhbCBjYXNlIE9zYWthLU1vbm8uCkBAIC0zMjYsNyArMzI2LDcgQEAgdm9pZCBT
aW1wbGVGb250RGF0YTo6ZGV0ZXJtaW5lUGl0Y2goKQogfQogI2VuZGlmIC8vICFQTEFURk9STShJ
T1MpCiAKLUZsb2F0UmVjdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChH
bHlwaCBnbHlwaCkgY29uc3QKK0Zsb2F0UmVjdCBGb250OjpwbGF0Zm9ybUJvdW5kc0ZvckdseXBo
KEdseXBoIGdseXBoKSBjb25zdAogewogICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveDsKICAgICBi
b3VuZGluZ0JveCA9IENURm9udEdldEJvdW5kaW5nUmVjdHNGb3JHbHlwaHMobV9wbGF0Zm9ybURh
dGEuY3RGb250KCksIHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwgPyBr
Q1RGb250VmVydGljYWxPcmllbnRhdGlvbiA6IGtDVEZvbnRIb3Jpem9udGFsT3JpZW50YXRpb24s
ICZnbHlwaCwgMCwgMSk7CkBAIC0zMzgsNyArMzM4LDcgQEAgRmxvYXRSZWN0IFNpbXBsZUZvbnRE
YXRhOjpwbGF0Zm9ybUJvdW5kcwogfQogCiAjaWYgUExBVEZPUk0oTUFDKQotaW5saW5lIENHRm9u
dFJlbmRlcmluZ1N0eWxlIFNpbXBsZUZvbnREYXRhOjpyZW5kZXJpbmdTdHlsZSgpIGNvbnN0Citp
bmxpbmUgQ0dGb250UmVuZGVyaW5nU3R5bGUgRm9udDo6cmVuZGVyaW5nU3R5bGUoKSBjb25zdAog
ewogICAgIENHRm9udFJlbmRlcmluZ1N0eWxlIHN0eWxlID0ga0NHRm9udFJlbmRlcmluZ1N0eWxl
QW50aWFsaWFzaW5nIHwga0NHRm9udFJlbmRlcmluZ1N0eWxlU3VicGl4ZWxQb3NpdGlvbmluZyB8
IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZVN1YnBpeGVsUXVhbnRpemF0aW9uOwogICAgIE5TRm9udCAq
Zm9udCA9IHBsYXRmb3JtRGF0YSgpLm5zRm9udCgpOwpAQCAtMzU3LDcgKzM1Nyw3IEBAIGlubGlu
ZSBDR0ZvbnRSZW5kZXJpbmdTdHlsZSBTaW1wbGVGb250RGEKICAgICByZXR1cm4gc3R5bGU7CiB9
CiAKLWlubGluZSBib29sIFNpbXBsZUZvbnREYXRhOjphZHZhbmNlRm9yQ29sb3JCaXRtYXBGb250
KEdseXBoIGdseXBoLCBDR1NpemUmIGFkdmFuY2UpIGNvbnN0CitpbmxpbmUgYm9vbCBGb250Ojph
ZHZhbmNlRm9yQ29sb3JCaXRtYXBGb250KEdseXBoIGdseXBoLCBDR1NpemUmIGFkdmFuY2UpIGNv
bnN0CiB7CiAgICAgTlNGb250ICpmb250ID0gcGxhdGZvcm1EYXRhKCkubnNGb250KCk7CiAgICAg
aWYgKCFmb250IHx8ICFwbGF0Zm9ybURhdGEoKS5pc0NvbG9yQml0bWFwRm9udCgpKQpAQCAtMzg3
LDcgKzM4Nyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0Vtb2ppKGNvbnN0IEZvbnRQbGEKICNl
bmRpZgogfQogCi1pbmxpbmUgYm9vbCBTaW1wbGVGb250RGF0YTo6Y2FuVXNlRmFzdEdseXBoQWR2
YW5jZUdldHRlcihHbHlwaCBnbHlwaCwgQ0dTaXplJiBhZHZhbmNlLCBib29sJiBwb3B1bGF0ZWRB
ZHZhbmNlKSBjb25zdAoraW5saW5lIGJvb2wgRm9udDo6Y2FuVXNlRmFzdEdseXBoQWR2YW5jZUdl
dHRlcihHbHlwaCBnbHlwaCwgQ0dTaXplJiBhZHZhbmNlLCBib29sJiBwb3B1bGF0ZWRBZHZhbmNl
KSBjb25zdAogewogICAgIC8vIEZhc3QgZ2V0dGVyIGRvZXNuJ3QgdGFrZSBjdXN0b20gdHJhY2tp
bmcgaW50byBhY2NvdW50CiAgICAgaWYgKGhhc0N1c3RvbVRyYWNraW5nKHBsYXRmb3JtRGF0YSgp
LmN0Rm9udCgpKSkKQEAgLTQwMyw3ICs0MDMsNyBAQCBpbmxpbmUgYm9vbCBTaW1wbGVGb250RGF0
YTo6Y2FuVXNlRmFzdEdsCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWZsb2F0IFNpbXBsZUZvbnRE
YXRhOjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CitmbG9hdCBGb250
OjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CiB7CiAgICAgQ0dTaXpl
IGFkdmFuY2UgPSBDR1NpemVaZXJvOwogICAgIGJvb2wgaG9yaXpvbnRhbCA9IHBsYXRmb3JtRGF0
YSgpLm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbDsKQEAgLTQzOSw3ICs0MzksNyBAQCBzdGF0
aWMgY29uc3QgVW5pQ2hhciogcHJvdmlkZVN0cmluZ0FuZEF0CiAgICAgcmV0dXJuIGluZm8tPmNo
YXJhY3RlcnMgKyBzdHJpbmdJbmRleDsKIH0KIAotYm9vbCBTaW1wbGVGb250RGF0YTo6Y2FuUmVu
ZGVyQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNp
emVfdCBsZW5ndGgpIGNvbnN0Citib29sIEZvbnQ6OmNhblJlbmRlckNvbWJpbmluZ0NoYXJhY3Rl
clNlcXVlbmNlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKSBjb25zdAog
ewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL21hYy9HbHlwaFBhZ2VNYWMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HbHlwaFBhZ2VNYWMuY3BwCShyZXZpc2lv
biAxNzg1MTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR2x5cGhQ
YWdlTWFjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsOCArMzEsOCBAQAogCiAjaW5jbHVkZSAi
Q29yZUdyYXBoaWNzU1BJLmgiCiAjaW5jbHVkZSAiQ29yZVRleHRTUEkuaCIKKyNpbmNsdWRlICJG
b250LmgiCiAjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0
YS5oIgogI2luY2x1ZGUgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKICNpZiAhUExBVEZPUk0o
SU9TKQogI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5o
PgpAQCAtNDAsMTEgKzQwLDExIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGJv
b2wgc2hvdWxkVXNlQ29yZVRleHQoY29uc3QgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVy
TGVuZ3RoLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEpCitzdGF0aWMgYm9vbCBzaG91
bGRVc2VDb3JlVGV4dChjb25zdCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgs
IGNvbnN0IEZvbnQqIGZvbnQpCiB7Ci0gICAgaWYgKGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5p
c0NvbXBvc2l0ZUZvbnRSZWZlcmVuY2UoKSkKKyAgICBpZiAoZm9udC0+cGxhdGZvcm1EYXRhKCku
aXNDb21wb3NpdGVGb250UmVmZXJlbmNlKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIGlm
IChmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkud2lkdGhWYXJpYW50KCkgIT0gUmVndWxhcldpZHRo
IHx8IGZvbnREYXRhLT5oYXNWZXJ0aWNhbEdseXBocygpKSB7CisgICAgaWYgKGZvbnQtPnBsYXRm
b3JtRGF0YSgpLndpZHRoVmFyaWFudCgpICE9IFJlZ3VsYXJXaWR0aCB8fCBmb250LT5oYXNWZXJ0
aWNhbEdseXBocygpKSB7CiAgICAgICAgIC8vIElkZW9ncmFwaHMgZG9uJ3QgaGF2ZSBhIHZlcnRp
Y2FsIHZhcmlhbnQgb3Igd2lkdGggdmFyaWFudHMuCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBidWZmZXJMZW5ndGg7ICsraSkgewogICAgICAgICAgICAgaWYgKCFGb250Q2FzY2Fk
ZTo6aXNDSktJZGVvZ3JhcGgoYnVmZmVyW2ldKSkKQEAgLTU1LDQxICs1NSw0MSBAQCBzdGF0aWMg
Ym9vbCBzaG91bGRVc2VDb3JlVGV4dChjb25zdCBVQ2hhCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1ib29sIEdseXBoUGFnZTo6bWF5VXNlTWl4ZWRGb250RGF0YVdoZW5GaWxsaW5nKGNvbnN0IFVD
aGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgU2ltcGxlRm9udERhdGEq
IGZvbnREYXRhKQorYm9vbCBHbHlwaFBhZ2U6Om1heVVzZU1peGVkRm9udHNXaGVuRmlsbGluZyhj
b25zdCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IEZvbnQqIGZv
bnQpCiB7CiAjaWYgVVNFKEFQUEtJVCkKICAgICAvLyBGSVhNRTogVGhpcyBpcyBvbmx5IHJlYWxs
eSBuZWVkZWQgZm9yIGNvbXBvc2l0ZSBmb250IHJlZmVyZW5jZXMuCi0gICAgcmV0dXJuIHNob3Vs
ZFVzZUNvcmVUZXh0KGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCBmb250RGF0YSk7CisgICAgcmV0dXJu
IHNob3VsZFVzZUNvcmVUZXh0KGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCBmb250KTsKICNlbHNlCiAg
ICAgVU5VU0VEX1BBUkFNKGJ1ZmZlcik7CiAgICAgVU5VU0VEX1BBUkFNKGJ1ZmZlckxlbmd0aCk7
Ci0gICAgVU5VU0VEX1BBUkFNKGZvbnREYXRhKTsKKyAgICBVTlVTRURfUEFSQU0oZm9udCk7CiAg
ICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCiB9CiAKLWJvb2wgR2x5cGhQYWdlOjpmaWxsKHVuc2ln
bmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZm
ZXJMZW5ndGgsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSkKK2Jvb2wgR2x5cGhQYWdl
OjpmaWxsKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1
bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IEZvbnQqIGZvbnQpCiB7CiAgICAgYm9vbCBoYXZl
R2x5cGhzID0gZmFsc2U7CiAKICAgICBWZWN0b3I8Q0dHbHlwaCwgNTEyPiBnbHlwaHMoYnVmZmVy
TGVuZ3RoKTsKLSAgICBpZiAoIXNob3VsZFVzZUNvcmVUZXh0KGJ1ZmZlciwgYnVmZmVyTGVuZ3Ro
LCBmb250RGF0YSkpIHsKKyAgICBpZiAoIXNob3VsZFVzZUNvcmVUZXh0KGJ1ZmZlciwgYnVmZmVy
TGVuZ3RoLCBmb250KSkgewogICAgICAgICAvLyBXZSBwYXNzIGluIGVpdGhlciAyNTYgb3IgNTEy
IFVURi0xNiBjaGFyYWN0ZXJzOiAyNTYgZm9yIFUrRkZGRiBhbmQgbGVzcywgNTEyIChkb3VibGUg
Y2hhcmFjdGVyIHN1cnJvZ2F0ZXMpCiAgICAgICAgIC8vIGZvciBVKzEwMDAwIGFuZCBhYm92ZS4g
SXQgaXMgaW5kZWVkIHBvc3NpYmxlIHRvIGdldCBiYWNrIDUxMiBnbHlwaHMgYmFjayBmcm9tIHRo
ZSBBUEksIHNvIHRoZSBnbHlwaCBidWZmZXIKICAgICAgICAgLy8gd2UgcGFzcyBpbiBtdXN0IGJl
IDUxMi4gSWYgd2UgZ2V0IGJhY2sgbW9yZSB0aGFuIDI1NiBnbHlwaHMgdGhvdWdoIHdlJ2xsIGln
bm9yZSBhbGwgdGhlIG9uZXMgYWZ0ZXIgMjU2LAogICAgICAgICAvLyB0aGlzIHNob3VsZCBub3Qg
aGFwcGVuIGFzIHRoZSBvbmx5IHRpbWUgd2UgcGFzcyBpbiA1MTIgY2hhcmFjdGVycyBpcyB3aGVu
IHRoZXkgYXJlIHN1cnJvZ2F0ZXMuCi0gICAgICAgIENHRm9udEdldEdseXBoc0ZvclVuaWNoYXJz
KGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5jZ0ZvbnQoKSwgYnVmZmVyLCBnbHlwaHMuZGF0YSgp
LCBidWZmZXJMZW5ndGgpOworICAgICAgICBDR0ZvbnRHZXRHbHlwaHNGb3JVbmljaGFycyhmb250
LT5wbGF0Zm9ybURhdGEoKS5jZ0ZvbnQoKSwgYnVmZmVyLCBnbHlwaHMuZGF0YSgpLCBidWZmZXJM
ZW5ndGgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsK
ICAgICAgICAgICAgIGlmICghZ2x5cGhzW2ldKQogICAgICAgICAgICAgICAgIHNldEdseXBoRGF0
YUZvckluZGV4KG9mZnNldCArIGksIDAsIDApOwogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgob2Zmc2V0ICsgaSwgZ2x5cGhzW2ldLCBmb250
RGF0YSk7CisgICAgICAgICAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgob2Zmc2V0ICsgaSwg
Z2x5cGhzW2ldLCBmb250KTsKICAgICAgICAgICAgICAgICBoYXZlR2x5cGhzID0gdHJ1ZTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoIWZvbnREYXRhLT5wbGF0Zm9y
bURhdGEoKS5pc0NvbXBvc2l0ZUZvbnRSZWZlcmVuY2UoKSAmJiAoKGZvbnREYXRhLT5wbGF0Zm9y
bURhdGEoKS53aWR0aFZhcmlhbnQoKSA9PSBSZWd1bGFyV2lkdGgpCi0gICAgICAgID8gQ1RGb250
R2V0VmVydGljYWxHbHlwaHNGb3JDaGFyYWN0ZXJzKGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5j
dEZvbnQoKSwgYnVmZmVyLCBnbHlwaHMuZGF0YSgpLCBidWZmZXJMZW5ndGgpCi0gICAgICAgIDog
Q1RGb250R2V0R2x5cGhzRm9yQ2hhcmFjdGVycyhmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkuY3RG
b250KCksIGJ1ZmZlciwgZ2x5cGhzLmRhdGEoKSwgYnVmZmVyTGVuZ3RoKSkpIHsKKyAgICB9IGVs
c2UgaWYgKCFmb250LT5wbGF0Zm9ybURhdGEoKS5pc0NvbXBvc2l0ZUZvbnRSZWZlcmVuY2UoKSAm
JiAoKGZvbnQtPnBsYXRmb3JtRGF0YSgpLndpZHRoVmFyaWFudCgpID09IFJlZ3VsYXJXaWR0aCkK
KyAgICAgICAgPyBDVEZvbnRHZXRWZXJ0aWNhbEdseXBoc0ZvckNoYXJhY3RlcnMoZm9udC0+cGxh
dGZvcm1EYXRhKCkuY3RGb250KCksIGJ1ZmZlciwgZ2x5cGhzLmRhdGEoKSwgYnVmZmVyTGVuZ3Ro
KQorICAgICAgICA6IENURm9udEdldEdseXBoc0ZvckNoYXJhY3RlcnMoZm9udC0+cGxhdGZvcm1E
YXRhKCkuY3RGb250KCksIGJ1ZmZlciwgZ2x5cGhzLmRhdGEoKSwgYnVmZmVyTGVuZ3RoKSkpIHsK
ICAgICAgICAgLy8gV2hlbiBidWZmZXIgY29uc2lzdHMgb2Ygc3Vycm9nYXRlIHBhaXJzLCBDVEZv
bnRHZXRWZXJ0aWNhbEdseXBoc0ZvckNoYXJhY3RlcnMgYW5kIENURm9udEdldEdseXBoc0ZvckNo
YXJhY3RlcnMKICAgICAgICAgLy8gcGxhY2UgdGhlIGdseXBocyBhdCBpbmRpY2VzIGNvcnJlc3Bv
bmRpbmcgdG8gdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBlYWNoIHBhaXIuCiAgICAgICAgIEFTU0VS
VCghKGJ1ZmZlckxlbmd0aCAlIGxlbmd0aCkgJiYgKGJ1ZmZlckxlbmd0aCAvIGxlbmd0aCA9PSAx
IHx8IGJ1ZmZlckxlbmd0aCAvIGxlbmd0aCA9PSAyKSk7CkBAIC05OCwxNCArOTgsMTQgQEAgYm9v
bCBHbHlwaFBhZ2U6OmZpbGwodW5zaWduZWQgb2Zmc2V0LCB1bgogICAgICAgICAgICAgaWYgKCFn
bHlwaHNbaSAqIGdseXBoU3RlcF0pCiAgICAgICAgICAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5k
ZXgob2Zmc2V0ICsgaSwgMCwgMCk7CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAg
ICBzZXRHbHlwaERhdGFGb3JJbmRleChvZmZzZXQgKyBpLCBnbHlwaHNbaSAqIGdseXBoU3RlcF0s
IGZvbnREYXRhKTsKKyAgICAgICAgICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChvZmZzZXQg
KyBpLCBnbHlwaHNbaSAqIGdseXBoU3RlcF0sIGZvbnQpOwogICAgICAgICAgICAgICAgIGhhdmVH
bHlwaHMgPSB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgLy8gV2UgYXNrIENvcmVUZXh0IGZvciBwb3NzaWJsZSB2ZXJ0aWNhbCB2YXJpYW50IGds
eXBocwogICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHN0cmluZyA9IGFkb3B0Q0YoQ0ZT
dHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVyc05vQ29weShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBidWZm
ZXIsIGJ1ZmZlckxlbmd0aCwga0NGQWxsb2NhdG9yTnVsbCkpOwotICAgICAgICBSZXRhaW5QdHI8
Q0ZBdHRyaWJ1dGVkU3RyaW5nUmVmPiBhdHRyaWJ1dGVkU3RyaW5nID0gYWRvcHRDRihDRkF0dHJp
YnV0ZWRTdHJpbmdDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgc3RyaW5nLmdldCgpLCBmb250
RGF0YS0+Z2V0Q0ZTdHJpbmdBdHRyaWJ1dGVzKDAsIGZvbnREYXRhLT5oYXNWZXJ0aWNhbEdseXBo
cygpID8gVmVydGljYWwgOiBIb3Jpem9udGFsKSkpOworICAgICAgICBSZXRhaW5QdHI8Q0ZBdHRy
aWJ1dGVkU3RyaW5nUmVmPiBhdHRyaWJ1dGVkU3RyaW5nID0gYWRvcHRDRihDRkF0dHJpYnV0ZWRT
dHJpbmdDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgc3RyaW5nLmdldCgpLCBmb250LT5nZXRD
RlN0cmluZ0F0dHJpYnV0ZXMoMCwgZm9udC0+aGFzVmVydGljYWxHbHlwaHMoKSA/IFZlcnRpY2Fs
IDogSG9yaXpvbnRhbCkpKTsKICAgICAgICAgUmV0YWluUHRyPENUTGluZVJlZj4gbGluZSA9IGFk
b3B0Q0YoQ1RMaW5lQ3JlYXRlV2l0aEF0dHJpYnV0ZWRTdHJpbmcoYXR0cmlidXRlZFN0cmluZy5n
ZXQoKSkpOwogCiAgICAgICAgIENGQXJyYXlSZWYgcnVuQXJyYXkgPSBDVExpbmVHZXRHbHlwaFJ1
bnMobGluZS5nZXQoKSk7CkBAIC0xMTksMTggKzExOSwxOCBAQCBib29sIEdseXBoUGFnZTo6Zmls
bCh1bnNpZ25lZCBvZmZzZXQsIHVuCiAgICAgICAgIFZlY3RvcjxDRkluZGV4LCA1MTI+IGluZGV4
VmVjdG9yOwogICAgICAgICBib29sIGRvbmUgPSBmYWxzZTsKIAotICAgICAgICBSZXRhaW5QdHI8
Q0ZUeXBlUmVmPiBmb250RXF1YWxpdHlPYmplY3QgPSBmb250RGF0YS0+cGxhdGZvcm1EYXRhKCku
b2JqZWN0Rm9yRXF1YWxpdHlDaGVjaygpOworICAgICAgICBSZXRhaW5QdHI8Q0ZUeXBlUmVmPiBm
b250RXF1YWxpdHlPYmplY3QgPSBmb250LT5wbGF0Zm9ybURhdGEoKS5vYmplY3RGb3JFcXVhbGl0
eUNoZWNrKCk7CiAKICAgICAgICAgZm9yIChDRkluZGV4IHIgPSAwOyByIDwgcnVuQ291bnQgJiYg
IWRvbmUgOyArK3IpIHsKICAgICAgICAgICAgIC8vIENUTGluZSBjb3VsZCBtYXAgY2hhcmFjdGVy
cyBvdmVyIG11bHRpcGxlIGZvbnRzIHVzaW5nIGl0cyBvd24gZm9udCBmYWxsYmFjayBsaXN0Lgot
ICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBwaWNrIHJ1bnMgdGhhdCB1c2UgdGhlIGV4YWN0IGZv
bnQgd2UgbmVlZCwgaS5lLiwgZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLmN0Rm9udCgpLgorICAg
ICAgICAgICAgLy8gV2UgbmVlZCB0byBwaWNrIHJ1bnMgdGhhdCB1c2UgdGhlIGV4YWN0IGZvbnQg
d2UgbmVlZCwgaS5lLiwgZm9udC0+cGxhdGZvcm1EYXRhKCkuY3RGb250KCkuCiAgICAgICAgICAg
ICBDVFJ1blJlZiBjdFJ1biA9IHN0YXRpY19jYXN0PENUUnVuUmVmPihDRkFycmF5R2V0VmFsdWVB
dEluZGV4KHJ1bkFycmF5LCByKSk7CiAgICAgICAgICAgICBBU1NFUlQoQ0ZHZXRUeXBlSUQoY3RS
dW4pID09IENUUnVuR2V0VHlwZUlEKCkpOwogCiAgICAgICAgICAgICBDRkRpY3Rpb25hcnlSZWYg
YXR0cmlidXRlcyA9IENUUnVuR2V0QXR0cmlidXRlcyhjdFJ1bik7CiAgICAgICAgICAgICBDVEZv
bnRSZWYgcnVuRm9udCA9IHN0YXRpY19jYXN0PENURm9udFJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFs
dWUoYXR0cmlidXRlcywga0NURm9udEF0dHJpYnV0ZU5hbWUpKTsKICAgICAgICAgICAgIGJvb2wg
Z290QmFzZUZvbnQgPSBDRkVxdWFsKGZvbnRFcXVhbGl0eU9iamVjdC5nZXQoKSwgRm9udFBsYXRm
b3JtRGF0YTo6b2JqZWN0Rm9yRXF1YWxpdHlDaGVjayhydW5Gb250KS5nZXQoKSk7Ci0gICAgICAg
ICAgICBpZiAoZ290QmFzZUZvbnQgfHwgZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLmlzQ29tcG9z
aXRlRm9udFJlZmVyZW5jZSgpKSB7CisgICAgICAgICAgICBpZiAoZ290QmFzZUZvbnQgfHwgZm9u
dC0+cGxhdGZvcm1EYXRhKCkuaXNDb21wb3NpdGVGb250UmVmZXJlbmNlKCkpIHsKICAgICAgICAg
ICAgICAgICAvLyBUaGlzIHJ1biB1c2VzIHRoZSBmb250IHdlIHdhbnQuIEV4dHJhY3QgZ2x5cGhz
LgogICAgICAgICAgICAgICAgIENGSW5kZXggZ2x5cGhDb3VudCA9IENUUnVuR2V0R2x5cGhDb3Vu
dChjdFJ1bik7CiAgICAgICAgICAgICAgICAgY29uc3QgQ0dHbHlwaCogZ2x5cGhzID0gQ1RSdW5H
ZXRHbHlwaHNQdHIoY3RSdW4pOwpAQCAtMTU3LDEzICsxNTcsMTMgQEAgYm9vbCBHbHlwaFBhZ2U6
OmZpbGwodW5zaWduZWQgb2Zmc2V0LCB1bgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGdseXBoc1tpXSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEdseXBoRGF0
YUZvckluZGV4KG9mZnNldCArIChzdHJpbmdJbmRpY2VzW2ldIC8gZ2x5cGhTdGVwKSwgZ2x5cGhz
W2ldLCBmb250RGF0YSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0R2x5cGhEYXRh
Rm9ySW5kZXgob2Zmc2V0ICsgKHN0cmluZ0luZGljZXNbaV0gLyBnbHlwaFN0ZXApLCBnbHlwaHNb
aV0sIGZvbnQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVHbHlwaHMgPSB0cnVl
OwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAjaWYg
VVNFKEFQUEtJVCkKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICBjb25zdCBTaW1wbGVGb250RGF0YSogcnVuU2ltcGxlID0gZm9udERhdGEtPmNvbXBvc2l0ZUZv
bnRSZWZlcmVuY2VGb250RGF0YSgoTlNGb250ICopcnVuRm9udCk7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEZvbnQqIHJ1blNpbXBsZSA9IGZvbnQtPmNvbXBvc2l0ZUZvbnRSZWZlcmVuY2VG
b250KChOU0ZvbnQgKilydW5Gb250KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHJ1blNpbXBs
ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgZ2x5
cGhDb3VudDsgKytpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmluZ0lu
ZGljZXNbaV0gPj0gc3RhdGljX2Nhc3Q8Q0ZJbmRleD4oYnVmZmVyTGVuZ3RoKSkgewpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhQ29yZVRl
eHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9TaW1wbGVGb250RGF0YUNvcmVUZXh0LmNwcAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhQ29yZVRleHQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDcwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDUsIDIwMDYsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCi0KLSNpZiAhUExBVEZPUk0oSU9T
KQotI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgot
I2Vsc2UKLSNpbmNsdWRlIDxDb3JlVGV4dC9Db3JlVGV4dC5oPgotI2VuZGlmCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotQ0ZEaWN0aW9uYXJ5UmVmIFNpbXBsZUZvbnREYXRhOjpnZXRDRlN0cmlu
Z0F0dHJpYnV0ZXMoVHlwZXNldHRpbmdGZWF0dXJlcyB0eXBlc2V0dGluZ0ZlYXR1cmVzLCBGb250
T3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0Ci17Ci0gICAgdW5zaWduZWQga2V5ID0gdHlw
ZXNldHRpbmdGZWF0dXJlcyArIDE7Ci0gICAgSGFzaE1hcDx1bnNpZ25lZCwgUmV0YWluUHRyPENG
RGljdGlvbmFyeVJlZj4+OjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gbV9DRlN0cmluZ0F0dHJpYnV0
ZXMuYWRkKGtleSwgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4oKSk7Ci0gICAgUmV0YWluUHRy
PENGRGljdGlvbmFyeVJlZj4mIGF0dHJpYnV0ZXNEaWN0aW9uYXJ5ID0gYWRkUmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZTsKLSAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXR1
cm4gYXR0cmlidXRlc0RpY3Rpb25hcnkuZ2V0KCk7Ci0KLSAgICBhdHRyaWJ1dGVzRGljdGlvbmFy
eSA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCA0LCAma0NGQ29weVN0cmluZ0RpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlv
bmFyeVZhbHVlQ2FsbEJhY2tzKSk7Ci0gICAgQ0ZNdXRhYmxlRGljdGlvbmFyeVJlZiBtdXRhYmxl
QXR0cmlidXRlcyA9IChDRk11dGFibGVEaWN0aW9uYXJ5UmVmKWF0dHJpYnV0ZXNEaWN0aW9uYXJ5
LmdldCgpOwotCi0gICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUobXV0YWJsZUF0dHJpYnV0ZXMsIGtD
VEZvbnRBdHRyaWJ1dGVOYW1lLCBwbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSk7Ci0KLSAgICBpZiAo
ISh0eXBlc2V0dGluZ0ZlYXR1cmVzICYgS2VybmluZykpIHsKLSAgICAgICAgY29uc3QgZmxvYXQg
emVybyA9IDA7Ci0gICAgICAgIHN0YXRpYyBDRk51bWJlclJlZiB6ZXJvS2VybmluZ1ZhbHVlID0g
Q0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVyRmxvYXRUeXBlLCAm
emVybyk7Ci0gICAgICAgIENGRGljdGlvbmFyeVNldFZhbHVlKG11dGFibGVBdHRyaWJ1dGVzLCBr
Q1RLZXJuQXR0cmlidXRlTmFtZSwgemVyb0tlcm5pbmdWYWx1ZSk7Ci0gICAgfQotCi0gICAgYm9v
bCBhbGxvd0xpZ2F0dXJlcyA9IChvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsICYmIHBsYXRmb3Jt
RGF0YSgpLmFsbG93c0xpZ2F0dXJlcygpKSB8fCAodHlwZXNldHRpbmdGZWF0dXJlcyAmIExpZ2F0
dXJlcyk7Ci0gICAgaWYgKCFhbGxvd0xpZ2F0dXJlcykgewotICAgICAgICBjb25zdCBpbnQgemVy
byA9IDA7Ci0gICAgICAgIHN0YXRpYyBDRk51bWJlclJlZiBlc3NlbnRpYWxMaWdhdHVyZXNWYWx1
ZSA9IENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlckludFR5cGUs
ICZ6ZXJvKTsKLSAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUobXV0YWJsZUF0dHJpYnV0ZXMs
IGtDVExpZ2F0dXJlQXR0cmlidXRlTmFtZSwgZXNzZW50aWFsTGlnYXR1cmVzVmFsdWUpOwotICAg
IH0KLQotICAgIGlmIChvcmllbnRhdGlvbiA9PSBWZXJ0aWNhbCkKLSAgICAgICAgQ0ZEaWN0aW9u
YXJ5U2V0VmFsdWUobXV0YWJsZUF0dHJpYnV0ZXMsIGtDVFZlcnRpY2FsRm9ybXNBdHRyaWJ1dGVO
YW1lLCBrQ0ZCb29sZWFuVHJ1ZSk7Ci0KLSAgICByZXR1cm4gYXR0cmlidXRlc0RpY3Rpb25hcnku
Z2V0KCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YU1hYy5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMu
bW0JKHJldmlzaW9uIDE3ODUxMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9TaW1wbGVGb250RGF0YU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw0NzQgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAxMCwgMjAxMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3Nr
dXJ5YWtvdgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlNpbXBsZUZv
bnREYXRhLmgiCi0KLSNpbXBvcnQgIkJsb2NrRXhjZXB0aW9ucy5oIgotI2ltcG9ydCAiQ29sb3Iu
aCIKLSNpbXBvcnQgIkNvcmVHcmFwaGljc1NQSS5oIgotI2ltcG9ydCAiQ29yZVRleHRTUEkuaCIK
LSNpbXBvcnQgIkZsb2F0UmVjdC5oIgotI2ltcG9ydCAiRm9udENhY2hlLmgiCi0jaW1wb3J0ICJG
b250Q2FzY2FkZS5oIgotI2ltcG9ydCAiRm9udERlc2NyaXB0aW9uLmgiCi0jaW1wb3J0ICJTaGFy
ZWRCdWZmZXIuaCIKLSNpbXBvcnQgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKLSNpZiBVU0Uo
QVBQS0lUKQotI2ltcG9ydCA8QXBwS2l0L0FwcEtpdC5oPgotI2ltcG9ydCA8QXBwbGljYXRpb25T
ZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+Ci0jZWxzZQotI2ltcG9ydCA8Q29yZVRleHQv
Q29yZVRleHQuaD4KLSNlbmRpZgotI2ltcG9ydCA8ZmxvYXQuaD4KLSNpbXBvcnQgPHVuaWNvZGUv
dWNoYXIuaD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvU3RkTGli
RXh0cmFzLmg+Ci0jaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+Ci0KLSNpZiAhUExBVEZPUk0oSU9T
KQotQGludGVyZmFjZSBOU0ZvbnQgKFdlYkFwcEtpdFNlY3JldEFQSSkKLS0gKEJPT0wpX2lzRmFr
ZUZpeGVkUGl0Y2g7Ci1AZW5kCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0jaWYg
VVNFKEFQUEtJVCkKLXN0YXRpYyBib29sIGZvbnRIYXNWZXJ0aWNhbEdseXBocyhDVEZvbnRSZWYg
Y3RGb250KQotewotICAgIC8vIFRoZSBjaGVjayBkb2Vzbid0IGxvb2sgbmVhdCBidXQgdGhpcyBp
cyB3aGF0IEFwcEtpdCBkb2VzIGZvciB2ZXJ0aWNhbCB3cml0aW5nLi4uCi0gICAgUmV0YWluUHRy
PENGQXJyYXlSZWY+IHRhYmxlVGFncyA9IGFkb3B0Q0YoQ1RGb250Q29weUF2YWlsYWJsZVRhYmxl
cyhjdEZvbnQsIGtDVEZvbnRUYWJsZU9wdGlvbk5vT3B0aW9ucykpOwotICAgIENGSW5kZXggbnVt
VGFibGVzID0gQ0ZBcnJheUdldENvdW50KHRhYmxlVGFncy5nZXQoKSk7Ci0gICAgZm9yIChDRklu
ZGV4IGluZGV4ID0gMDsgaW5kZXggPCBudW1UYWJsZXM7ICsraW5kZXgpIHsKLSAgICAgICAgQ1RG
b250VGFibGVUYWcgdGFnID0gKENURm9udFRhYmxlVGFnKSh1aW50cHRyX3QpQ0ZBcnJheUdldFZh
bHVlQXRJbmRleCh0YWJsZVRhZ3MuZ2V0KCksIGluZGV4KTsKLSAgICAgICAgaWYgKHRhZyA9PSBr
Q1RGb250VGFibGVWaGVhIHx8IHRhZyA9PSBrQ1RGb250VGFibGVWT1JHKQotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGJvb2wg
aW5pdEZvbnREYXRhKFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSkKLXsKLSAgICBpZiAoIWZvbnRE
YXRhLT5wbGF0Zm9ybURhdGEoKS5jZ0ZvbnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBOU1N0cmluZyAqd2ViRmFsbGJhY2tGb250RmFt
aWx5KHZvaWQpCi17Ci0gICAgc3RhdGljIE5TU3RyaW5nICp3ZWJGYWxsYmFja0ZvbnRGYW1pbHkg
PSBbW1tOU0ZvbnQgc3lzdGVtRm9udE9mU2l6ZToxNi4wZl0gZmFtaWx5TmFtZV0gcmV0YWluXTsK
LSAgICByZXR1cm4gd2ViRmFsbGJhY2tGb250RmFtaWx5OwotfQotCi1jb25zdCBTaW1wbGVGb250
RGF0YSogU2ltcGxlRm9udERhdGE6OmNvbXBvc2l0ZUZvbnRSZWZlcmVuY2VGb250RGF0YShOU0Zv
bnQgKmtleSkgY29uc3QKLXsKLSAgICBpZiAoIWtleSB8fCBDRkVxdWFsKGFkb3B0Q0YoQ1RGb250
Q29weVBvc3RTY3JpcHROYW1lKENURm9udFJlZihrZXkpKSkuZ2V0KCksIENGU1RSKCJMYXN0UmVz
b3J0IikpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmICghbV9kZXJpdmVkRm9u
dERhdGEpCi0gICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxEZXJp
dmVkRm9udERhdGE+KGlzQ3VzdG9tRm9udCgpKTsKLQotICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9k
ZXJpdmVkRm9udERhdGEtPmNvbXBvc2l0ZUZvbnRSZWZlcmVuY2VzLmFkZChrZXksIG51bGxwdHIp
OwotICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICBib29sIGlzVXNpbmdQ
cmludGVyRm9udCA9IHBsYXRmb3JtRGF0YSgpLmlzUHJpbnRlckZvbnQoKTsKLSAgICAgICAgTlNG
b250ICpzdWJzdGl0dXRlRm9udCA9IGlzVXNpbmdQcmludGVyRm9udCA/IFtrZXkgcHJpbnRlckZv
bnRdIDogW2tleSBzY3JlZW5Gb250XTsKLQotICAgICAgICBDVEZvbnRTeW1ib2xpY1RyYWl0cyB0
cmFpdHMgPSBDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cygoQ1RGb250UmVmKXN1YnN0aXR1dGVGb250
KTsKLSAgICAgICAgYm9vbCBzeW50aGV0aWNCb2xkID0gcGxhdGZvcm1EYXRhKCkuc3ludGhldGlj
Qm9sZCgpICYmICEodHJhaXRzICYga0NURm9udEJvbGRUcmFpdCk7Ci0gICAgICAgIGJvb2wgc3lu
dGhldGljT2JsaXF1ZSA9IHBsYXRmb3JtRGF0YSgpLnN5bnRoZXRpY09ibGlxdWUoKSAmJiAhKHRy
YWl0cyAmIGtDVEZvbnRJdGFsaWNUcmFpdCk7Ci0KLSAgICAgICAgRm9udFBsYXRmb3JtRGF0YSBz
dWJzdGl0dXRlUGxhdGZvcm0oc3Vic3RpdHV0ZUZvbnQsIHBsYXRmb3JtRGF0YSgpLnNpemUoKSwg
aXNVc2luZ1ByaW50ZXJGb250LCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNPYmxpcXVlLCBwbGF0
Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpLCBwbGF0Zm9ybURhdGEoKS53aWR0aFZhcmlhbnQoKSk7
Ci0gICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBTaW1wbGVGb250RGF0YTo6Y3Jl
YXRlKHN1YnN0aXR1dGVQbGF0Zm9ybSwgaXNDdXN0b21Gb250KCkpOwotICAgIH0KLSAgICByZXR1
cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKLX0KLQotdm9pZCBTaW1wbGVGb250
RGF0YTo6cGxhdGZvcm1Jbml0KCkKLXsKLSAgICBtX3N5bnRoZXRpY0JvbGRPZmZzZXQgPSBtX3Bs
YXRmb3JtRGF0YS5tX3N5bnRoZXRpY0JvbGQgPyAxLjBmIDogMC5mOwotCi0gICAgYm9vbCBmYWls
ZWRTZXR1cCA9IGZhbHNlOwotICAgIGlmICghaW5pdEZvbnREYXRhKHRoaXMpKSB7Ci0gICAgICAg
IC8vIEFjayEgU29tZXRoaW5nIHZlcnkgYmFkIGhhcHBlbmVkLCBsaWtlIGEgY29ycnVwdCBmb250
LgotICAgICAgICAvLyBUcnkgbG9va2luZyBmb3IgYW4gYWx0ZXJuYXRlICdiYXNlJyBmb250IGZv
ciB0aGlzIHJlbmRlcmVyLgotCi0gICAgICAgIC8vIFNwZWNpYWwgY2FzZSBoYWNrIHRvIHVzZSAi
VGltZXMgTmV3IFJvbWFuIiBpbiBwbGFjZSBvZiAiVGltZXMiLgotICAgICAgICAvLyAiVGltZXMg
Uk8iIGlzIGEgY29tbW9uIGZvbnQgd2hvc2UgZmFtaWx5IG5hbWUgaXMgIlRpbWVzIi4KLSAgICAg
ICAgLy8gSXQgb3ZlcnJpZGVzIHRoZSBub3JtYWwgIlRpbWVzIiBmYW1pbHkgZm9udC4KLSAgICAg
ICAgLy8gSXQgYWxzbyBhcHBlYXJzIHRvIGhhdmUgYSBjb3JydXB0IHJlZ3VsYXIgdmFyaWFudC4K
LSAgICAgICAgTlNTdHJpbmcgKmZhbGxiYWNrRm9udEZhbWlseTsKLSAgICAgICAgaWYgKFtbbV9w
bGF0Zm9ybURhdGEubnNGb250KCkgZmFtaWx5TmFtZV0gaXNFcXVhbDpAIlRpbWVzIl0pCi0gICAg
ICAgICAgICBmYWxsYmFja0ZvbnRGYW1pbHkgPSBAIlRpbWVzIE5ldyBSb21hbiI7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGZhbGxiYWNrRm9udEZhbWlseSA9IHdlYkZhbGxiYWNrRm9udEZh
bWlseSgpOwotICAgICAgICAKLSAgICAgICAgLy8gVHJ5IHNldHRpbmcgdXAgdGhlIGFsdGVybmF0
ZSBmb250LgotICAgICAgICAvLyBUaGlzIGlzIGEgbGFzdCBkaXRjaCBlZmZvcnQgdG8gdXNlIGEg
c3Vic3RpdHV0ZSBmb250IHdoZW4gc29tZXRoaW5nIGhhcyBnb25lIHdyb25nLgotI2lmICFFUlJP
Ul9ESVNBQkxFRAotICAgICAgICBSZXRhaW5QdHI8TlNGb250PiBpbml0aWFsRm9udCA9IG1fcGxh
dGZvcm1EYXRhLm5zRm9udCgpOwotI2VuZGlmCi0gICAgICAgIGlmIChtX3BsYXRmb3JtRGF0YS5m
b250KCkpCi0gICAgICAgICAgICBtX3BsYXRmb3JtRGF0YS5zZXROU0ZvbnQoW1tOU0ZvbnRNYW5h
Z2VyIHNoYXJlZEZvbnRNYW5hZ2VyXSBjb252ZXJ0Rm9udDptX3BsYXRmb3JtRGF0YS5uc0ZvbnQo
KSB0b0ZhbWlseTpmYWxsYmFja0ZvbnRGYW1pbHldKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgbV9wbGF0Zm9ybURhdGEuc2V0TlNGb250KFtOU0ZvbnQgZm9udFdpdGhOYW1lOmZhbGxiYWNr
Rm9udEZhbWlseSBzaXplOm1fcGxhdGZvcm1EYXRhLnNpemUoKV0pOwotICAgICAgICBpZiAoIWlu
aXRGb250RGF0YSh0aGlzKSkgewotICAgICAgICAgICAgaWYgKFtmYWxsYmFja0ZvbnRGYW1pbHkg
aXNFcXVhbDpAIlRpbWVzIE5ldyBSb21hbiJdKSB7Ci0gICAgICAgICAgICAgICAgLy8gT0ssIGNv
dWxkbid0IHNldHVwIFRpbWVzIE5ldyBSb21hbiBhcyBhbiBhbHRlcm5hdGUgdG8gVGltZXMsIGZh
bGxiYWNrCi0gICAgICAgICAgICAgICAgLy8gb24gdGhlIHN5c3RlbSBmb250LiAgSWYgdGhpcyBm
YWlscyB3ZSBoYXZlIG5vIGFsdGVybmF0aXZlIGxlZnQuCi0gICAgICAgICAgICAgICAgbV9wbGF0
Zm9ybURhdGEuc2V0TlNGb250KFtbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl0gY29u
dmVydEZvbnQ6bV9wbGF0Zm9ybURhdGEubnNGb250KCkgdG9GYW1pbHk6d2ViRmFsbGJhY2tGb250
RmFtaWx5KCldKTsKLSAgICAgICAgICAgICAgICBpZiAoIWluaXRGb250RGF0YSh0aGlzKSkgewot
ICAgICAgICAgICAgICAgICAgICAvLyBXZSB0cmllZCwgVGltZXMsIFRpbWVzIE5ldyBSb21hbiwg
YW5kIHRoZSBzeXN0ZW0gZm9udC4gTm8gam95LiBXZSBoYXZlIHRvIGdpdmUgdXAuCi0gICAgICAg
ICAgICAgICAgICAgIExPR19FUlJPUigidW5hYmxlIHRvIGluaXRpYWxpemUgd2l0aCBmb250ICVA
IiwgaW5pdGlhbEZvbnQuZ2V0KCkpOwotICAgICAgICAgICAgICAgICAgICBmYWlsZWRTZXR1cCA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAvLyBXZSB0cmllZCB0aGUgcmVxdWVzdGVkIGZvbnQgYW5kIHRoZSBzeXN0ZW0gZm9u
dC4gTm8gam95LiBXZSBoYXZlIHRvIGdpdmUgdXAuCi0gICAgICAgICAgICAgICAgTE9HX0VSUk9S
KCJ1bmFibGUgdG8gaW5pdGlhbGl6ZSB3aXRoIGZvbnQgJUAiLCBpbml0aWFsRm9udC5nZXQoKSk7
Ci0gICAgICAgICAgICAgICAgZmFpbGVkU2V0dXAgPSB0cnVlOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgLy8gUmVwb3J0IHRoZSBwcm9ibGVtLgotICAgICAgICBMT0dfRVJS
T1IoIkNvcnJ1cHQgZm9udCBkZXRlY3RlZCwgdXNpbmcgJUAgaW4gcGxhY2Ugb2YgJUAuIiwKLSAg
ICAgICAgICAgIFttX3BsYXRmb3JtRGF0YS5uc0ZvbnQoKSBmYW1pbHlOYW1lXSwgW2luaXRpYWxG
b250LmdldCgpIGZhbWlseU5hbWVdKTsKLSAgICB9Ci0KLSAgICAvLyBJZiBhbGwgZWxzZSBmYWls
cywgdHJ5IHRvIHNldCB1cCB1c2luZyB0aGUgc3lzdGVtIGZvbnQuCi0gICAgLy8gVGhpcyBpcyBw
cm9iYWJseSBiZWNhdXNlIFRpbWVzIGFuZCBUaW1lcyBOZXcgUm9tYW4gYXJlIGJvdGggdW5hdmFp
bGFibGUuCi0gICAgaWYgKGZhaWxlZFNldHVwKSB7Ci0gICAgICAgIG1fcGxhdGZvcm1EYXRhLnNl
dE5TRm9udChbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6W21fcGxhdGZvcm1EYXRhLm5zRm9udCgp
IHBvaW50U2l6ZV1dKTsKLSAgICAgICAgTE9HX0VSUk9SKCJmYWlsZWQgdG8gc2V0IHVwIGZvbnQs
IHVzaW5nIHN5c3RlbSBmb250ICVzIiwgbV9wbGF0Zm9ybURhdGEuZm9udCgpKTsKLSAgICAgICAg
aW5pdEZvbnREYXRhKHRoaXMpOwotICAgIH0KLSAgICAKLSAgICBpbnQgaUFzY2VudDsKLSAgICBp
bnQgaURlc2NlbnQ7Ci0gICAgaW50IGlDYXBIZWlnaHQ7Ci0gICAgaW50IGlMaW5lR2FwOwotICAg
IHVuc2lnbmVkIHVuaXRzUGVyRW07Ci0gICAgaUFzY2VudCA9IENHRm9udEdldEFzY2VudChtX3Bs
YXRmb3JtRGF0YS5jZ0ZvbnQoKSk7Ci0gICAgLy8gU29tZSBmb250cyBlcnJvbmVvdXNseSBzcGVj
aWZ5IGEgcG9zaXRpdmUgZGVzY2VuZGVyIHZhbHVlLiBXZSBmb2xsb3cgQ29yZSBUZXh0IGluIGFz
c3VtaW5nIHRoYXQKLSAgICAvLyBzdWNoIGZvbnRzIG1lYW50IHRoZSBzYW1lIGRpc3RhbmNlLCBi
dXQgaW4gdGhlIHJldmVyc2UgZGlyZWN0aW9uLgotICAgIGlEZXNjZW50ID0gLWFicyhDR0ZvbnRH
ZXREZXNjZW50KG1fcGxhdGZvcm1EYXRhLmNnRm9udCgpKSk7Ci0gICAgaUNhcEhlaWdodCA9IENH
Rm9udEdldENhcEhlaWdodChtX3BsYXRmb3JtRGF0YS5jZ0ZvbnQoKSk7Ci0gICAgaUxpbmVHYXAg
PSBDR0ZvbnRHZXRMZWFkaW5nKG1fcGxhdGZvcm1EYXRhLmNnRm9udCgpKTsKLSAgICB1bml0c1Bl
ckVtID0gQ0dGb250R2V0VW5pdHNQZXJFbShtX3BsYXRmb3JtRGF0YS5jZ0ZvbnQoKSk7Ci0KLSAg
ICBmbG9hdCBwb2ludFNpemUgPSBtX3BsYXRmb3JtRGF0YS5tX3NpemU7Ci0gICAgZmxvYXQgYXNj
ZW50ID0gc2NhbGVFbVRvVW5pdHMoaUFzY2VudCwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemU7Ci0g
ICAgZmxvYXQgZGVzY2VudCA9IC1zY2FsZUVtVG9Vbml0cyhpRGVzY2VudCwgdW5pdHNQZXJFbSkg
KiBwb2ludFNpemU7Ci0gICAgZmxvYXQgY2FwSGVpZ2h0ID0gc2NhbGVFbVRvVW5pdHMoaUNhcEhl
aWdodCwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemU7Ci0gICAgCi0gICAgZmxvYXQgbGluZUdhcCA9
IHNjYWxlRW1Ub1VuaXRzKGlMaW5lR2FwLCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZTsKLQotICAg
IC8vIFdlIG5lZWQgdG8gYWRqdXN0IFRpbWVzLCBIZWx2ZXRpY2EsIGFuZCBDb3VyaWVyIHRvIGNs
b3NlbHkgbWF0Y2ggdGhlCi0gICAgLy8gdmVydGljYWwgbWV0cmljcyBvZiB0aGVpciBNaWNyb3Nv
ZnQgY291bnRlcnBhcnRzIHRoYXQgYXJlIHRoZSBkZSBmYWN0bwotICAgIC8vIHdlYiBzdGFuZGFy
ZC4gVGhlIEFwcEtpdCBhZGp1c3RtZW50IG9mIDIwJSBpcyB0b28gYmlnIGFuZCBpcwotICAgIC8v
IGluY29ycmVjdGx5IGFkZGVkIHRvIGxpbmUgc3BhY2luZywgc28gd2UgdXNlIGEgMTUlIGFkanVz
dG1lbnQgaW5zdGVhZAotICAgIC8vIGFuZCBhZGQgaXQgdG8gdGhlIGFzY2VudC4KLSAgICBOU1N0
cmluZyAqZmFtaWx5TmFtZSA9IFttX3BsYXRmb3JtRGF0YS5uc0ZvbnQoKSBmYW1pbHlOYW1lXTsK
LSAgICBpZiAoW2ZhbWlseU5hbWUgaXNFcXVhbFRvU3RyaW5nOkAiVGltZXMiXSB8fCBbZmFtaWx5
TmFtZSBpc0VxdWFsVG9TdHJpbmc6QCJIZWx2ZXRpY2EiXSB8fCBbZmFtaWx5TmFtZSBpc0VxdWFs
VG9TdHJpbmc6QCJDb3VyaWVyIl0pCi0gICAgICAgIGFzY2VudCArPSBmbG9vcmYoKChhc2NlbnQg
KyBkZXNjZW50KSAqIDAuMTVmKSArIDAuNWYpOwotCi0gICAgLy8gQ29tcHV0ZSBhbmQgc3RvcmUg
bGluZSBzcGFjaW5nLCBiZWZvcmUgdGhlIGxpbmUgbWV0cmljcyBoYWNrcyBhcmUgYXBwbGllZC4K
LSAgICBtX2ZvbnRNZXRyaWNzLnNldExpbmVTcGFjaW5nKGxyb3VuZGYoYXNjZW50KSArIGxyb3Vu
ZGYoZGVzY2VudCkgKyBscm91bmRmKGxpbmVHYXApKTsKLQotICAgIC8vIEhhY2sgSGlyYWdpbm8g
bGluZSBtZXRyaWNzIHRvIGFsbG93IHJvb20gZm9yIG1hcmtlZCB0ZXh0IHVuZGVybGluZXMuCi0g
ICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzUzODYxODM+Ci0gICAgaWYgKGRlc2NlbnQgPCAzICYmIGxp
bmVHYXAgPj0gMyAmJiBbZmFtaWx5TmFtZSBoYXNQcmVmaXg6QCJIaXJhZ2lubyJdKSB7Ci0gICAg
ICAgIGxpbmVHYXAgLT0gMyAtIGRlc2NlbnQ7Ci0gICAgICAgIGRlc2NlbnQgPSAzOwotICAgIH0K
LSAgICAKLSAgICBpZiAocGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCAm
JiAhaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaygpKQotICAgICAgICBtX2hhc1ZlcnRpY2FsR2x5
cGhzID0gZm9udEhhc1ZlcnRpY2FsR2x5cGhzKG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpKTsKLQot
ICAgIGZsb2F0IHhIZWlnaHQ7Ci0KLSAgICBpZiAocGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24o
KSA9PSBIb3Jpem9udGFsKSB7Ci0gICAgICAgIC8vIE1lYXN1cmUgdGhlIGFjdHVhbCBjaGFyYWN0
ZXIgIngiLCBzaW5jZSBpdCdzIHBvc3NpYmxlIGZvciBpdCB0byBleHRlbmQgYmVsb3cgdGhlIGJh
c2VsaW5lLCBhbmQgd2UgbmVlZCB0aGUKLSAgICAgICAgLy8gcmVwb3J0ZWQgeC1oZWlnaHQgdG8g
b25seSBpbmNsdWRlIHRoZSBwb3J0aW9uIG9mIHRoZSBnbHlwaCB0aGF0IGlzIGFib3ZlIHRoZSBi
YXNlbGluZS4KLSAgICAgICAgTlNHbHlwaCB4R2x5cGggPSBnbHlwaEZvckNoYXJhY3RlcigneCcp
OwotICAgICAgICBpZiAoeEdseXBoKQotICAgICAgICAgICAgeEhlaWdodCA9IC1DR1JlY3RHZXRN
aW5ZKHBsYXRmb3JtQm91bmRzRm9yR2x5cGgoeEdseXBoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHhIZWlnaHQgPSBzY2FsZUVtVG9Vbml0cyhDR0ZvbnRHZXRYSGVpZ2h0KG1fcGxhdGZv
cm1EYXRhLmNnRm9udCgpKSwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemU7Ci0gICAgfSBlbHNlCi0g
ICAgICAgIHhIZWlnaHQgPSB2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250RGF0YSgpLT5mb250
TWV0cmljcygpLnhIZWlnaHQoKTsKLQotICAgIG1fZm9udE1ldHJpY3Muc2V0VW5pdHNQZXJFbSh1
bml0c1BlckVtKTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldEFzY2VudChhc2NlbnQpOwotICAgIG1f
Zm9udE1ldHJpY3Muc2V0RGVzY2VudChkZXNjZW50KTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldENh
cEhlaWdodChjYXBIZWlnaHQpOwotICAgIG1fZm9udE1ldHJpY3Muc2V0TGluZUdhcChsaW5lR2Fw
KTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldFhIZWlnaHQoeEhlaWdodCk7Ci19Ci0KLXN0YXRpYyBD
RkRhdGFSZWYgY29weUZvbnRUYWJsZUZvclRhZyhGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURh
dGEsIEZvdXJDaGFyQ29kZSB0YWJsZU5hbWUpCi17Ci0gICAgcmV0dXJuIENHRm9udENvcHlUYWJs
ZUZvclRhZyhwbGF0Zm9ybURhdGEuY2dGb250KCksIHRhYmxlTmFtZSk7Ci19Ci0KLXZvaWQgU2lt
cGxlRm9udERhdGE6OnBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpCi17Ci0gICAgbV9hdmdDaGFyV2lk
dGggPSAwOwotICAgIG1fbWF4Q2hhcldpZHRoID0gMDsKLSAgICAKLSAgICBSZXRhaW5QdHI8Q0ZE
YXRhUmVmPiBvczJUYWJsZSA9IGFkb3B0Q0YoY29weUZvbnRUYWJsZUZvclRhZyhtX3BsYXRmb3Jt
RGF0YSwgJ09TLzInKSk7Ci0gICAgaWYgKG9zMlRhYmxlICYmIENGRGF0YUdldExlbmd0aChvczJU
YWJsZS5nZXQoKSkgPj0gNCkgewotICAgICAgICBjb25zdCBVSW50OCogb3MyID0gQ0ZEYXRhR2V0
Qnl0ZVB0cihvczJUYWJsZS5nZXQoKSk7Ci0gICAgICAgIFNJbnQxNiBvczJBdmdDaGFyV2lkdGgg
PSBvczJbMl0gKiAyNTYgKyBvczJbM107Ci0gICAgICAgIG1fYXZnQ2hhcldpZHRoID0gc2NhbGVF
bVRvVW5pdHMob3MyQXZnQ2hhcldpZHRoLCBtX2ZvbnRNZXRyaWNzLnVuaXRzUGVyRW0oKSkgKiBt
X3BsYXRmb3JtRGF0YS5tX3NpemU7Ci0gICAgfQotCi0gICAgUmV0YWluUHRyPENGRGF0YVJlZj4g
aGVhZFRhYmxlID0gYWRvcHRDRihjb3B5Rm9udFRhYmxlRm9yVGFnKG1fcGxhdGZvcm1EYXRhLCAn
aGVhZCcpKTsKLSAgICBpZiAoaGVhZFRhYmxlICYmIENGRGF0YUdldExlbmd0aChoZWFkVGFibGUu
Z2V0KCkpID49IDQyKSB7Ci0gICAgICAgIGNvbnN0IFVJbnQ4KiBoZWFkID0gQ0ZEYXRhR2V0Qnl0
ZVB0cihoZWFkVGFibGUuZ2V0KCkpOwotICAgICAgICB1c2hvcnQgdXhNaW4gPSBoZWFkWzM2XSAq
IDI1NiArIGhlYWRbMzddOwotICAgICAgICB1c2hvcnQgdXhNYXggPSBoZWFkWzQwXSAqIDI1NiAr
IGhlYWRbNDFdOwotICAgICAgICBTSW50MTYgeE1pbiA9IHN0YXRpY19jYXN0PFNJbnQxNj4odXhN
aW4pOwotICAgICAgICBTSW50MTYgeE1heCA9IHN0YXRpY19jYXN0PFNJbnQxNj4odXhNYXgpOwot
ICAgICAgICBmbG9hdCBkaWZmID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHhNYXggLSB4TWluKTsKLSAg
ICAgICAgbV9tYXhDaGFyV2lkdGggPSBzY2FsZUVtVG9Vbml0cyhkaWZmLCBtX2ZvbnRNZXRyaWNz
LnVuaXRzUGVyRW0oKSkgKiBtX3BsYXRmb3JtRGF0YS5tX3NpemU7Ci0gICAgfQotCi0gICAgLy8g
RmFsbGJhY2sgdG8gYSBjcm9zcy1wbGF0Zm9ybSBlc3RpbWF0ZSwgd2hpY2ggd2lsbCBwb3B1bGF0
ZSB0aGVzZSB2YWx1ZXMgaWYgdGhleSBhcmUgbm9uLXBvc2l0aXZlLgotICAgIGluaXRDaGFyV2lk
dGhzKCk7Ci19Ci0jZW5kaWYgLy8gVVNFKEFQUEtJVCkKLQotdm9pZCBTaW1wbGVGb250RGF0YTo6
cGxhdGZvcm1EZXN0cm95KCkKLXsKLX0KLQotI2lmICFQTEFURk9STShJT1MpCi1QYXNzUmVmUHRy
PFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1DcmVhdGVTY2FsZWRGb250
RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2NhbGVG
YWN0b3IpIGNvbnN0Ci17Ci0gICAgaWYgKGlzQ3VzdG9tRm9udCgpKSB7Ci0gICAgICAgIEZvbnRQ
bGF0Zm9ybURhdGEgc2NhbGVkRm9udERhdGEobV9wbGF0Zm9ybURhdGEpOwotICAgICAgICBzY2Fs
ZWRGb250RGF0YS5tX3NpemUgPSBzY2FsZWRGb250RGF0YS5tX3NpemUgKiBzY2FsZUZhY3RvcjsK
LSAgICAgICAgcmV0dXJuIFNpbXBsZUZvbnREYXRhOjpjcmVhdGUoc2NhbGVkRm9udERhdGEsIHRy
dWUsIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0g
ICAgZmxvYXQgc2l6ZSA9IG1fcGxhdGZvcm1EYXRhLnNpemUoKSAqIHNjYWxlRmFjdG9yOwotICAg
IEZvbnRQbGF0Zm9ybURhdGEgc2NhbGVkRm9udERhdGEoW1tOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZv
bnRNYW5hZ2VyXSBjb252ZXJ0Rm9udDptX3BsYXRmb3JtRGF0YS5uc0ZvbnQoKSB0b1NpemU6c2l6
ZV0sIHNpemUsIG1fcGxhdGZvcm1EYXRhLmlzUHJpbnRlckZvbnQoKSwgZmFsc2UsIGZhbHNlLCBt
X3BsYXRmb3JtRGF0YS5vcmllbnRhdGlvbigpKTsKLQotICAgIC8vIEFwcEtpdCByZXNldHMgdGhl
IHR5cGUgaW5mb3JtYXRpb24gKHNjcmVlbi9wcmludGVyKSB3aGVuIHlvdSBjb252ZXJ0IGEgZm9u
dCB0byBhIGRpZmZlcmVudCBzaXplLgotICAgIC8vIFdlIGhhdmUgdG8gZml4IHVwIHRoZSBmb250
IHRoYXQgd2UncmUgaGFuZGVkIGJhY2suCi0gICAgc2NhbGVkRm9udERhdGEuc2V0TlNGb250KGZv
bnREZXNjcmlwdGlvbi51c2VQcmludGVyRm9udCgpID8gW3NjYWxlZEZvbnREYXRhLm5zRm9udCgp
IHByaW50ZXJGb250XSA6IFtzY2FsZWRGb250RGF0YS5uc0ZvbnQoKSBzY3JlZW5Gb250XSk7Ci0K
LSAgICBpZiAoc2NhbGVkRm9udERhdGEuZm9udCgpKSB7Ci0gICAgICAgIE5TRm9udE1hbmFnZXIg
KmZvbnRNYW5hZ2VyID0gW05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJdOwotICAgICAg
ICBOU0ZvbnRUcmFpdE1hc2sgZm9udFRyYWl0cyA9IFtmb250TWFuYWdlciB0cmFpdHNPZkZvbnQ6
bV9wbGF0Zm9ybURhdGEubnNGb250KCldOwotCi0gICAgICAgIGlmIChtX3BsYXRmb3JtRGF0YS5t
X3N5bnRoZXRpY0JvbGQpCi0gICAgICAgICAgICBmb250VHJhaXRzIHw9IE5TQm9sZEZvbnRNYXNr
OwotICAgICAgICBpZiAobV9wbGF0Zm9ybURhdGEubV9zeW50aGV0aWNPYmxpcXVlKQotICAgICAg
ICAgICAgZm9udFRyYWl0cyB8PSBOU0l0YWxpY0ZvbnRNYXNrOwotCi0gICAgICAgIE5TRm9udFRy
YWl0TWFzayBzY2FsZWRGb250VHJhaXRzID0gW2ZvbnRNYW5hZ2VyIHRyYWl0c09mRm9udDpzY2Fs
ZWRGb250RGF0YS5uc0ZvbnQoKV07Ci0gICAgICAgIHNjYWxlZEZvbnREYXRhLm1fc3ludGhldGlj
Qm9sZCA9IChmb250VHJhaXRzICYgTlNCb2xkRm9udE1hc2spICYmICEoc2NhbGVkRm9udFRyYWl0
cyAmIE5TQm9sZEZvbnRNYXNrKTsKLSAgICAgICAgc2NhbGVkRm9udERhdGEubV9zeW50aGV0aWNP
YmxpcXVlID0gKGZvbnRUcmFpdHMgJiBOU0l0YWxpY0ZvbnRNYXNrKSAmJiAhKHNjYWxlZEZvbnRU
cmFpdHMgJiBOU0l0YWxpY0ZvbnRNYXNrKTsKLQotICAgICAgICByZXR1cm4gZm9udENhY2hlKCku
Zm9udEZvclBsYXRmb3JtRGF0YShzY2FsZWRGb250RGF0YSk7Ci0gICAgfQotICAgIEVORF9CTE9D
S19PQkpDX0VYQ0VQVElPTlM7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBTaW1wbGVGb250
RGF0YTo6ZGV0ZXJtaW5lUGl0Y2goKQotewotICAgIE5TRm9udCogZiA9IG1fcGxhdGZvcm1EYXRh
Lm5zRm9udCgpOwotICAgIC8vIFNwZWNpYWwgY2FzZSBPc2FrYS1Nb25vLgotICAgIC8vIEFjY29y
ZGluZyB0byA8cmRhcjovL3Byb2JsZW0vMzk5OTQ2Nz4sIHdlIHNob3VsZCB0cmVhdCBPc2FrYS1N
b25vIGFzIGZpeGVkIHBpdGNoLgotICAgIC8vIE5vdGUgdGhhdCB0aGUgQXBwS2l0IGRvZXMgbm90
IHJlcG9ydCBPc2FrYS1Nb25vIGFzIGZpeGVkIHBpdGNoLgotCi0gICAgLy8gU3BlY2lhbCBjYXNl
IE1TLVBHb3RoaWMuCi0gICAgLy8gQWNjb3JkaW5nIHRvIDxyZGFyOi8vcHJvYmxlbS80MDMyOTM4
Piwgd2Ugc2hvdWxkIG5vdCB0cmVhdCBNUy1QR290aGljIGFzIGZpeGVkIHBpdGNoLgotICAgIC8v
IE5vdGUgdGhhdCBBcHBLaXQgZG9lcyByZXBvcnQgTVMtUEdvdGhpYyBhcyBmaXhlZCBwaXRjaC4K
LQotICAgIC8vIFNwZWNpYWwgY2FzZSBNb25vdHlwZUNvcnNpdmEKLSAgICAvLyBBY2NvcmRpbmcg
dG8gPHJkYXI6Ly9wcm9ibGVtLzU0NTQ3MDQ+LCB3ZSBzaG91bGQgbm90IHRyZWF0IE1vbm90eXBl
Q29yc2l2YSBhcyBmaXhlZCBwaXRjaC4KLSAgICAvLyBOb3RlIHRoYXQgQXBwS2l0IGRvZXMgcmVw
b3J0IE1vbm90eXBlQ29yc2l2YSBhcyBmaXhlZCBwaXRjaC4KLQotICAgIE5TU3RyaW5nICpuYW1l
ID0gW2YgZm9udE5hbWVdOwotICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSAoW2YgaXNGaXhlZFBp
dGNoXSB8fCBbZiBfaXNGYWtlRml4ZWRQaXRjaF0gfHwKLSAgICAgICAgICAgW25hbWUgY2FzZUlu
c2Vuc2l0aXZlQ29tcGFyZTpAIk9zYWthLU1vbm8iXSA9PSBOU09yZGVyZWRTYW1lKSAmJgotICAg
ICAgICAgICBbbmFtZSBjYXNlSW5zZW5zaXRpdmVDb21wYXJlOkAiTVMtUEdvdGhpYyJdICE9IE5T
T3JkZXJlZFNhbWUgJiYKLSAgICAgICAgICAgW25hbWUgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZTpA
Ik1vbm90eXBlQ29yc2l2YSJdICE9IE5TT3JkZXJlZFNhbWU7Ci19Ci0jZW5kaWYgLy8gIVBMQVRG
T1JNKElPUykKLQotRmxvYXRSZWN0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUJvdW5kc0Zvckds
eXBoKEdseXBoIGdseXBoKSBjb25zdAotewotICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveDsKLSAg
ICBib3VuZGluZ0JveCA9IENURm9udEdldEJvdW5kaW5nUmVjdHNGb3JHbHlwaHMobV9wbGF0Zm9y
bURhdGEuY3RGb250KCksIHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwg
PyBrQ1RGb250VmVydGljYWxPcmllbnRhdGlvbiA6IGtDVEZvbnRIb3Jpem9udGFsT3JpZW50YXRp
b24sICZnbHlwaCwgMCwgMSk7Ci0gICAgYm91bmRpbmdCb3guc2V0WSgtYm91bmRpbmdCb3gubWF4
WSgpKTsKLSAgICBpZiAobV9zeW50aGV0aWNCb2xkT2Zmc2V0KQotICAgICAgICBib3VuZGluZ0Jv
eC5zZXRXaWR0aChib3VuZGluZ0JveC53aWR0aCgpICsgbV9zeW50aGV0aWNCb2xkT2Zmc2V0KTsK
LQotICAgIHJldHVybiBib3VuZGluZ0JveDsKLX0KLQotI2lmIFBMQVRGT1JNKE1BQykKLWlubGlu
ZSBDR0ZvbnRSZW5kZXJpbmdTdHlsZSBTaW1wbGVGb250RGF0YTo6cmVuZGVyaW5nU3R5bGUoKSBj
b25zdAotewotICAgIENHRm9udFJlbmRlcmluZ1N0eWxlIHN0eWxlID0ga0NHRm9udFJlbmRlcmlu
Z1N0eWxlQW50aWFsaWFzaW5nIHwga0NHRm9udFJlbmRlcmluZ1N0eWxlU3VicGl4ZWxQb3NpdGlv
bmluZyB8IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZVN1YnBpeGVsUXVhbnRpemF0aW9uOwotICAgIE5T
Rm9udCAqZm9udCA9IHBsYXRmb3JtRGF0YSgpLm5zRm9udCgpOwotICAgIGlmIChmb250KSB7Ci0g
ICAgICAgIHN3aXRjaCAoW2ZvbnQgcmVuZGVyaW5nTW9kZV0pIHsKLSAgICAgICAgY2FzZSBOU0Zv
bnRJbnRlZ2VyQWR2YW5jZW1lbnRzUmVuZGVyaW5nTW9kZToKLSAgICAgICAgICAgIHN0eWxlID0g
MDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE5TRm9udEFudGlhbGlhc2VkSW50
ZWdlckFkdmFuY2VtZW50c1JlbmRlcmluZ01vZGU6Ci0gICAgICAgICAgICBzdHlsZSA9IGtDR0Zv
bnRSZW5kZXJpbmdTdHlsZUFudGlhbGlhc2luZzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0
dXJuIHN0eWxlOwotfQotCi1pbmxpbmUgYm9vbCBTaW1wbGVGb250RGF0YTo6YWR2YW5jZUZvckNv
bG9yQml0bWFwRm9udChHbHlwaCBnbHlwaCwgQ0dTaXplJiBhZHZhbmNlKSBjb25zdAotewotICAg
IE5TRm9udCAqZm9udCA9IHBsYXRmb3JtRGF0YSgpLm5zRm9udCgpOwotICAgIGlmICghZm9udCB8
fCAhcGxhdGZvcm1EYXRhKCkuaXNDb2xvckJpdG1hcEZvbnQoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGFkdmFuY2UgPSBOU1NpemVUb0NHU2l6ZShbZm9udCBhZHZhbmNlbWVudEZvckds
eXBoOmdseXBoXSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0jZW5kaWYKLQotc3RhdGljIGJvb2wg
aGFzQ3VzdG9tVHJhY2tpbmcoQ1RGb250UmVmIGZvbnQpCi17Ci0jaWYgUExBVEZPUk0oTUFDKSAm
JiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEIDwgMTA5MAotICAgIFVOVVNFRF9QQVJB
TShmb250KTsKLSAgICByZXR1cm4gZmFsc2U7Ci0jZWxzZQotICAgIHJldHVybiBDVEZvbnREZXNj
cmlwdG9ySXNTeXN0ZW1VSUZvbnQoYWRvcHRDRihDVEZvbnRDb3B5Rm9udERlc2NyaXB0b3IoZm9u
dCkpLmdldCgpKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNFbW9qaShjb25z
dCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEpCi17Ci0jaWYgUExBVEZPUk0oSU9TKQot
ICAgIHJldHVybiBwbGF0Zm9ybURhdGEubV9pc0Vtb2ppOwotI2Vsc2UKLSAgICBVTlVTRURfUEFS
QU0ocGxhdGZvcm1EYXRhKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQotaW5saW5l
IGJvb2wgU2ltcGxlRm9udERhdGE6OmNhblVzZUZhc3RHbHlwaEFkdmFuY2VHZXR0ZXIoR2x5cGgg
Z2x5cGgsIENHU2l6ZSYgYWR2YW5jZSwgYm9vbCYgcG9wdWxhdGVkQWR2YW5jZSkgY29uc3QKLXsK
LSAgICAvLyBGYXN0IGdldHRlciBkb2Vzbid0IHRha2UgY3VzdG9tIHRyYWNraW5nIGludG8gYWNj
b3VudAotICAgIGlmIChoYXNDdXN0b21UcmFja2luZyhwbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAvLyBGYXN0IGdldHRlciBkb2Vzbid0IHdvcmsg
Zm9yIGVtb2ppCi0gICAgaWYgKGlzRW1vamkocGxhdGZvcm1EYXRhKCkpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgLy8gLi4uIG9yIGZvciBhbnkgYml0bWFwIGZvbnRzIGluIGdlbmVyYWwK
LSAgICBpZiAoYWR2YW5jZUZvckNvbG9yQml0bWFwRm9udChnbHlwaCwgYWR2YW5jZSkpIHsKLSAg
ICAgICAgcG9wdWxhdGVkQWR2YW5jZSA9IHRydWU7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWZsb2F0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9y
bVdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0Ci17Ci0gICAgQ0dTaXplIGFkdmFuY2Ug
PSBDR1NpemVaZXJvOwotICAgIGJvb2wgaG9yaXpvbnRhbCA9IHBsYXRmb3JtRGF0YSgpLm9yaWVu
dGF0aW9uKCkgPT0gSG9yaXpvbnRhbDsKLSAgICBib29sIHBvcHVsYXRlZEFkdmFuY2UgPSBmYWxz
ZTsKLSAgICBpZiAoKGhvcml6b250YWwgfHwgbV9pc0Jyb2tlbklkZW9ncmFwaEZhbGxiYWNrKSAm
JiBjYW5Vc2VGYXN0R2x5cGhBZHZhbmNlR2V0dGVyKGdseXBoLCBhZHZhbmNlLCBwb3B1bGF0ZWRB
ZHZhbmNlKSkgewotICAgICAgICBmbG9hdCBwb2ludFNpemUgPSBwbGF0Zm9ybURhdGEoKS5tX3Np
emU7Ci0gICAgICAgIENHQWZmaW5lVHJhbnNmb3JtIG0gPSBDR0FmZmluZVRyYW5zZm9ybU1ha2VT
Y2FsZShwb2ludFNpemUsIHBvaW50U2l6ZSk7Ci0gICAgICAgIGlmICghQ0dGb250R2V0R2x5cGhB
ZHZhbmNlc0ZvclN0eWxlKHBsYXRmb3JtRGF0YSgpLmNnRm9udCgpLCAmbSwgcmVuZGVyaW5nU3R5
bGUoKSwgJmdseXBoLCAxLCAmYWR2YW5jZSkpIHsKLSAgICAgICAgICAgIFJldGFpblB0cjxDRlN0
cmluZ1JlZj4gZnVsbE5hbWUgPSBhZG9wdENGKENHRm9udENvcHlGdWxsTmFtZShwbGF0Zm9ybURh
dGEoKS5jZ0ZvbnQoKSkpOwotICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gY2FjaGUg
Z2x5cGggd2lkdGhzIGZvciAlQCAlZiIsIGZ1bGxOYW1lLmdldCgpLCBwb2ludFNpemUpOwotICAg
ICAgICAgICAgYWR2YW5jZS53aWR0aCA9IDA7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKCFw
b3B1bGF0ZWRBZHZhbmNlKQotICAgICAgICBDVEZvbnRHZXRBZHZhbmNlc0ZvckdseXBocyhtX3Bs
YXRmb3JtRGF0YS5jdEZvbnQoKSwgaG9yaXpvbnRhbCA/IGtDVEZvbnRIb3Jpem9udGFsT3JpZW50
YXRpb24gOiBrQ1RGb250VmVydGljYWxPcmllbnRhdGlvbiwgJmdseXBoLCAmYWR2YW5jZSwgMSk7
Ci0KLSAgICByZXR1cm4gYWR2YW5jZS53aWR0aCArIG1fc3ludGhldGljQm9sZE9mZnNldDsKLX0K
LQotc3RydWN0IFByb3ZpZGVySW5mbyB7Ci0gICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnM7Ci0g
ICAgc2l6ZV90IGxlbmd0aDsKLSAgICBDRkRpY3Rpb25hcnlSZWYgYXR0cmlidXRlczsKLX07Ci0K
LXN0YXRpYyBjb25zdCBVbmlDaGFyKiBwcm92aWRlU3RyaW5nQW5kQXR0cmlidXRlcyhDRkluZGV4
IHN0cmluZ0luZGV4LCBDRkluZGV4KiBjb3VudCwgQ0ZEaWN0aW9uYXJ5UmVmKiBhdHRyaWJ1dGVz
LCB2b2lkKiBjb250ZXh0KQotewotICAgIFByb3ZpZGVySW5mbyogaW5mbyA9IHN0YXRpY19jYXN0
PHN0cnVjdCBQcm92aWRlckluZm8qPihjb250ZXh0KTsKLSAgICBpZiAoc3RyaW5nSW5kZXggPCAw
IHx8IHN0YXRpY19jYXN0PHNpemVfdD4oc3RyaW5nSW5kZXgpID49IGluZm8tPmxlbmd0aCkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICAqY291bnQgPSBpbmZvLT5sZW5ndGggLSBzdHJpbmdJbmRl
eDsKLSAgICAqYXR0cmlidXRlcyA9IGluZm8tPmF0dHJpYnV0ZXM7Ci0gICAgcmV0dXJuIGluZm8t
PmNoYXJhY3RlcnMgKyBzdHJpbmdJbmRleDsKLX0KLQotYm9vbCBTaW1wbGVGb250RGF0YTo6Y2Fu
UmVuZGVyQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMs
IHNpemVfdCBsZW5ndGgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQot
ICAgIGlmICghbV9jb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZVN1cHBvcnQpCi0gICAgICAgIG1f
Y29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2VTdXBwb3J0ID0gc3RkOjptYWtlX3VuaXF1ZTxIYXNo
TWFwPFN0cmluZywgYm9vbD4+KCk7Ci0KLSAgICBXVEY6Okhhc2hNYXA8U3RyaW5nLCBib29sPjo6
QWRkUmVzdWx0IGFkZFJlc3VsdCA9IG1fY29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2VTdXBwb3J0
LT5hZGQoU3RyaW5nKGNoYXJhY3RlcnMsIGxlbmd0aCksIGZhbHNlKTsKLSAgICBpZiAoIWFkZFJl
c3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZTsKLQotICAgIFJldGFpblB0cjxDRlR5cGVSZWY+IGZvbnRFcXVhbGl0eU9iamVjdCA9IHBsYXRm
b3JtRGF0YSgpLm9iamVjdEZvckVxdWFsaXR5Q2hlY2soKTsKLQotICAgIFByb3ZpZGVySW5mbyBp
bmZvID0geyBjaGFyYWN0ZXJzLCBsZW5ndGgsIGdldENGU3RyaW5nQXR0cmlidXRlcygwLCBwbGF0
Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpKSB9OwotICAgIFJldGFpblB0cjxDVExpbmVSZWY+IGxp
bmUgPSBhZG9wdENGKENUTGluZUNyZWF0ZVdpdGhVbmlDaGFyUHJvdmlkZXIoJnByb3ZpZGVTdHJp
bmdBbmRBdHRyaWJ1dGVzLCAwLCAmaW5mbykpOwotCi0gICAgQ0ZBcnJheVJlZiBydW5BcnJheSA9
IENUTGluZUdldEdseXBoUnVucyhsaW5lLmdldCgpKTsKLSAgICBDRkluZGV4IHJ1bkNvdW50ID0g
Q0ZBcnJheUdldENvdW50KHJ1bkFycmF5KTsKLQotICAgIGZvciAoQ0ZJbmRleCByID0gMDsgciA8
IHJ1bkNvdW50OyByKyspIHsKLSAgICAgICAgQ1RSdW5SZWYgY3RSdW4gPSBzdGF0aWNfY2FzdDxD
VFJ1blJlZj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChydW5BcnJheSwgcikpOwotICAgICAgICBB
U1NFUlQoQ0ZHZXRUeXBlSUQoY3RSdW4pID09IENUUnVuR2V0VHlwZUlEKCkpOwotICAgICAgICBD
RkRpY3Rpb25hcnlSZWYgcnVuQXR0cmlidXRlcyA9IENUUnVuR2V0QXR0cmlidXRlcyhjdFJ1bik7
Ci0gICAgICAgIENURm9udFJlZiBydW5Gb250ID0gc3RhdGljX2Nhc3Q8Q1RGb250UmVmPihDRkRp
Y3Rpb25hcnlHZXRWYWx1ZShydW5BdHRyaWJ1dGVzLCBrQ1RGb250QXR0cmlidXRlTmFtZSkpOwot
ICAgICAgICBpZiAoIUNGRXF1YWwoZm9udEVxdWFsaXR5T2JqZWN0LmdldCgpLCBGb250UGxhdGZv
cm1EYXRhOjpvYmplY3RGb3JFcXVhbGl0eUNoZWNrKHJ1bkZvbnQpLmdldCgpKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVl
ID0gdHJ1ZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVN
YXRoRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbnR5cGUvT3BlblR5cGVNYXRoRGF0YS5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlTWF0aERhdGEu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMiArMjYsMTIgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJPcGVuVHlwZU1hdGhEYXRhLmgiCiAKKyNpbmNsdWRlICJGb250LmgiCiAj
aW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgogI2lmIEVOQUJMRShPUEVOVFlQRV9NQVRIKQog
I2luY2x1ZGUgIk9wZW5UeXBlVHlwZXMuaCIKICNlbmRpZgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZl
ci5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7
CiAKQEAgLTIzNSw5ICsyMzUsOSBAQCBzdHJ1Y3QgTUFUSFRhYmxlIDogVGFibGVCYXNlIHsKICNl
bmRpZiAvLyBFTkFCTEUoT1BFTlRZUEVfTUFUSCkKIAogI2lmIEVOQUJMRShPUEVOVFlQRV9NQVRI
KQotT3BlblR5cGVNYXRoRGF0YTo6T3BlblR5cGVNYXRoRGF0YShjb25zdCBGb250UGxhdGZvcm1E
YXRhJiBmb250RGF0YSkKK09wZW5UeXBlTWF0aERhdGE6Ok9wZW5UeXBlTWF0aERhdGEoY29uc3Qg
Rm9udFBsYXRmb3JtRGF0YSYgZm9udCkKIHsKLSAgICBtX21hdGhCdWZmZXIgPSBmb250RGF0YS5v
cGVuVHlwZVRhYmxlKE9wZW5UeXBlOjpNQVRIVGFnKTsKKyAgICBtX21hdGhCdWZmZXIgPSBmb250
Lm9wZW5UeXBlVGFibGUoT3BlblR5cGU6Ok1BVEhUYWcpOwogICAgIGNvbnN0IE9wZW5UeXBlOjpN
QVRIVGFibGUqIG1hdGggPSBPcGVuVHlwZTo6dmFsaWRhdGVUYWJsZTxPcGVuVHlwZTo6TUFUSFRh
YmxlPihtX21hdGhCdWZmZXIpOwogICAgIGlmICghbWF0aCkgewogICAgICAgICBtX21hdGhCdWZm
ZXIgPSBudWxscHRyOwpAQCAtMjY1LDcgKzI2NSw3IEBAIE9wZW5UeXBlTWF0aERhdGE6On5PcGVu
VHlwZU1hdGhEYXRhKCkKIH0KIAogI2lmIEVOQUJMRShPUEVOVFlQRV9NQVRIKQotZmxvYXQgT3Bl
blR5cGVNYXRoRGF0YTo6Z2V0TWF0aENvbnN0YW50KGNvbnN0IFNpbXBsZUZvbnREYXRhJiBmb250
LCBNYXRoQ29uc3RhbnQgY29uc3RhbnQpIGNvbnN0CitmbG9hdCBPcGVuVHlwZU1hdGhEYXRhOjpn
ZXRNYXRoQ29uc3RhbnQoY29uc3QgRm9udCYgZm9udCwgTWF0aENvbnN0YW50IGNvbnN0YW50KSBj
b25zdAogewogICAgIGludDMyX3QgdmFsdWUgPSAwOwogCkBAIC0yODgsNyArMjg4LDcgQEAgZmxv
YXQgT3BlblR5cGVNYXRoRGF0YTo6Z2V0TWF0aENvbnN0YW50KAogCiAgICAgcmV0dXJuIHZhbHVl
ICogZm9udC5zaXplUGVyVW5pdCgpOwogI2Vsc2UKLWZsb2F0IE9wZW5UeXBlTWF0aERhdGE6Omdl
dE1hdGhDb25zdGFudChjb25zdCBTaW1wbGVGb250RGF0YSYsIE1hdGhDb25zdGFudCkgY29uc3QK
K2Zsb2F0IE9wZW5UeXBlTWF0aERhdGE6OmdldE1hdGhDb25zdGFudChjb25zdCBGb250JiwgTWF0
aENvbnN0YW50KSBjb25zdAogewogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVy
biAwOwpAQCAtMjk2LDcgKzI5Niw3IEBAIGZsb2F0IE9wZW5UeXBlTWF0aERhdGE6OmdldE1hdGhD
b25zdGFudCgKIH0KIAogI2lmIEVOQUJMRShPUEVOVFlQRV9NQVRIKQotZmxvYXQgT3BlblR5cGVN
YXRoRGF0YTo6Z2V0SXRhbGljQ29ycmVjdGlvbihjb25zdCBTaW1wbGVGb250RGF0YSYgZm9udCwg
R2x5cGggZ2x5cGgpIGNvbnN0CitmbG9hdCBPcGVuVHlwZU1hdGhEYXRhOjpnZXRJdGFsaWNDb3Jy
ZWN0aW9uKGNvbnN0IEZvbnQmIGZvbnQsIEdseXBoIGdseXBoKSBjb25zdAogewogICAgIGNvbnN0
IE9wZW5UeXBlOjpNQVRIVGFibGUqIG1hdGggPSBPcGVuVHlwZTo6dmFsaWRhdGVUYWJsZTxPcGVu
VHlwZTo6TUFUSFRhYmxlPihtX21hdGhCdWZmZXIpOwogICAgIEFTU0VSVChtYXRoKTsKQEAgLTMx
MCw3ICszMTAsNyBAQCBmbG9hdCBPcGVuVHlwZU1hdGhEYXRhOjpnZXRJdGFsaWNDb3JyZWN0CiAK
ICAgICByZXR1cm4gbWF0aEl0YWxpY3NDb3JyZWN0aW9uSW5mby0+Z2V0SXRhbGljQ29ycmVjdGlv
bigqbV9tYXRoQnVmZmVyLCBnbHlwaCkgKiBmb250LnNpemVQZXJVbml0KCk7CiAjZWxzZQotZmxv
YXQgT3BlblR5cGVNYXRoRGF0YTo6Z2V0SXRhbGljQ29ycmVjdGlvbihjb25zdCBTaW1wbGVGb250
RGF0YSYsIEdseXBoKSBjb25zdAorZmxvYXQgT3BlblR5cGVNYXRoRGF0YTo6Z2V0SXRhbGljQ29y
cmVjdGlvbihjb25zdCBGb250JiwgR2x5cGgpIGNvbnN0CiB7CiAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVudHlwZS9PcGVuVHlwZU1hdGhEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVNYXRoRGF0YS5oCShyZXZp
c2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlw
ZS9PcGVuVHlwZU1hdGhEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEzICszNSwxMyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZvbnRQbGF0Zm9ybURhdGE7CiBjbGFzcyBTaGFy
ZWRCdWZmZXI7Ci1jbGFzcyBTaW1wbGVGb250RGF0YTsKK2NsYXNzIEZvbnQ7CiAKIGNsYXNzIE9w
ZW5UeXBlTWF0aERhdGEgOiBwdWJsaWMgUmVmQ291bnRlZDxPcGVuVHlwZU1hdGhEYXRhPiB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8T3BlblR5cGVNYXRoRGF0YT4gY3JlYXRlKGNv
bnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnREYXRhKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPE9w
ZW5UeXBlTWF0aERhdGE+IGNyZWF0ZShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBmb250KQogICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBPcGVuVHlwZU1hdGhEYXRhKGZvbnREYXRh
KSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgT3BlblR5cGVNYXRoRGF0YShmb250KSk7
CiAgICAgfQogICAgIH5PcGVuVHlwZU1hdGhEYXRhKCk7CiAKQEAgLTExMyw4ICsxMTMsOCBAQCBw
dWJsaWM6CiAgICAgICAgIGJvb2wgaXNFeHRlbmRlcjsKICAgICB9OwogCi0gICAgZmxvYXQgZ2V0
TWF0aENvbnN0YW50KGNvbnN0IFNpbXBsZUZvbnREYXRhJiwgTWF0aENvbnN0YW50KSBjb25zdDsK
LSAgICBmbG9hdCBnZXRJdGFsaWNDb3JyZWN0aW9uKGNvbnN0IFNpbXBsZUZvbnREYXRhJiwgR2x5
cGgpIGNvbnN0OworICAgIGZsb2F0IGdldE1hdGhDb25zdGFudChjb25zdCBGb250JiwgTWF0aENv
bnN0YW50KSBjb25zdDsKKyAgICBmbG9hdCBnZXRJdGFsaWNDb3JyZWN0aW9uKGNvbnN0IEZvbnQm
LCBHbHlwaCkgY29uc3Q7CiAgICAgdm9pZCBnZXRNYXRoVmFyaWFudHMoR2x5cGgsIGJvb2wgaXNW
ZXJ0aWNhbCwgVmVjdG9yPEdseXBoPiYgc2l6ZVZhcmlhbnRzLCBWZWN0b3I8QXNzZW1ibHlQYXJ0
PiYgYXNzZW1ibHlQYXJ0cykgY29uc3Q7CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCShyZXZpc2lvbiAxNzg1MTApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ0OSw3ICs0NDksNyBAQCBib29sIElubGluZUZsb3dCb3g6OnJlcXVpcmVzSWRlb2dyYXBoaWNC
CiAKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgbGluZVN0eWxlID0gdGhpcy0+bGluZVN0eWxlKCk7
CiAgICAgaWYgKGxpbmVTdHlsZS5mb250RGVzY3JpcHRpb24oKS5ub25DSktHbHlwaE9yaWVudGF0
aW9uKCkgPT0gTm9uQ0pLR2x5cGhPcmllbnRhdGlvblVwcmlnaHQKLSAgICAgICAgfHwgbGluZVN0
eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkuaGFzVmVydGljYWxHbHlwaHMoKSkK
KyAgICAgICAgfHwgbGluZVN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKS5oYXNWZXJ0
aWNhbEdseXBocygpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGZvciAoSW5saW5lQm94
KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRPbkxpbmUo
KSkgewpAQCAtNDYwLDE4ICs0NjAsMTggQEAgYm9vbCBJbmxpbmVGbG93Qm94OjpyZXF1aXJlc0lk
ZW9ncmFwaGljQgogICAgICAgICAgICAgaWYgKGRvd25jYXN0PElubGluZUZsb3dCb3g+KCpjaGls
ZCkucmVxdWlyZXNJZGVvZ3JhcGhpY0Jhc2VsaW5lKHRleHRCb3hEYXRhTWFwKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChj
aGlsZC0+bGluZVN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5oYXNWZXJ0
aWNhbEdseXBocygpKQorICAgICAgICAgICAgaWYgKGNoaWxkLT5saW5lU3R5bGUoKS5mb250Q2Fz
Y2FkZSgpLnByaW1hcnlGb250KCkuaGFzVmVydGljYWxHbHlwaHMoKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgY29uc3QgVmVjdG9yPGNv
bnN0IFNpbXBsZUZvbnREYXRhKj4qIHVzZWRGb250cyA9IG51bGxwdHI7CisgICAgICAgICAgICBj
b25zdCBWZWN0b3I8Y29uc3QgRm9udCo+KiB1c2VkRm9udHMgPSBudWxscHRyOwogICAgICAgICAg
ICAgaWYgKGlzPElubGluZVRleHRCb3g+KCpjaGlsZCkpIHsKICAgICAgICAgICAgICAgICBHbHlw
aE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0ZXh0Qm94
RGF0YU1hcC5maW5kKGRvd25jYXN0PElubGluZVRleHRCb3g+KGNoaWxkKSk7CiAgICAgICAgICAg
ICAgICAgdXNlZEZvbnRzID0gaXQgPT0gdGV4dEJveERhdGFNYXAuZW5kKCkgPyBudWxscHRyIDog
Jml0LT52YWx1ZS5maXJzdDsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKHVzZWRG
b250cykgewotICAgICAgICAgICAgICAgIGZvciAoY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnRE
YXRhIDogKnVzZWRGb250cykgewotICAgICAgICAgICAgICAgICAgICBpZiAoZm9udERhdGEtPmhh
c1ZlcnRpY2FsR2x5cGhzKCkpCisgICAgICAgICAgICAgICAgZm9yIChjb25zdCBGb250KiBmb250
IDogKnVzZWRGb250cykgeworICAgICAgICAgICAgICAgICAgICBpZiAoZm9udC0+aGFzVmVydGlj
YWxHbHlwaHMoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9JbmxpbmVGbG93Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0lubGluZUZsb3dCb3guaAkocmV2aXNpb24gMTc4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0lubGluZUZsb3dCb3guaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTIgKzMxLDEyIEBA
IGNsYXNzIEhpdFRlc3RSZXF1ZXN0OwogY2xhc3MgSGl0VGVzdFJlc3VsdDsKIGNsYXNzIElubGlu
ZVRleHRCb3g7CiBjbGFzcyBSZW5kZXJMaW5lQm94TGlzdDsKLWNsYXNzIFNpbXBsZUZvbnREYXRh
OworY2xhc3MgRm9udDsKIGNsYXNzIFZlcnRpY2FsUG9zaXRpb25DYWNoZTsKIAogc3RydWN0IEds
eXBoT3ZlcmZsb3c7CiAKLXR5cGVkZWYgSGFzaE1hcDxjb25zdCBJbmxpbmVUZXh0Qm94Kiwgc3Rk
OjpwYWlyPFZlY3Rvcjxjb25zdCBTaW1wbGVGb250RGF0YSo+LCBHbHlwaE92ZXJmbG93Pj4gR2x5
cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXA7Cit0eXBlZGVmIEhhc2hNYXA8Y29uc3QgSW5s
aW5lVGV4dEJveCosIHN0ZDo6cGFpcjxWZWN0b3I8Y29uc3QgRm9udCo+LCBHbHlwaE92ZXJmbG93
Pj4gR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXA7CiAKIGNsYXNzIElubGluZUZsb3dC
b3ggOiBwdWJsaWMgSW5saW5lQm94IHsKIHB1YmxpYzoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHJldmlzaW9uIDE3ODUxMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM4
MSw3ICsxMzgxLDcgQEAgVGV4dFJ1biBJbmxpbmVUZXh0Qm94Ojpjb25zdHJ1Y3RUZXh0UnVuKAog
CiAgICAgVGV4dFJ1biBydW4oc3RyaW5nLCB0ZXh0UG9zKCksIGV4cGFuc2lvbigpLCBleHBhbnNp
b25CZWhhdmlvcigpLCBkaXJlY3Rpb24oKSwgZGlyT3ZlcnJpZGUoKSB8fCBzdHlsZS5ydGxPcmRl
cmluZygpID09IFZpc3VhbE9yZGVyLCAhcmVuZGVyZXIoKS5jYW5Vc2VTaW1wbGVGb250Q29kZVBh
dGgoKSk7CiAgICAgcnVuLnNldFRhYlNpemUoIXN0eWxlLmNvbGxhcHNlV2hpdGVTcGFjZSgpLCBz
dHlsZS50YWJTaXplKCkpOwotICAgIGlmIChmb250LnByaW1hcnlGb250RGF0YSgpLmlzU1ZHRm9u
dCgpKQorICAgIGlmIChmb250LnByaW1hcnlGb250KCkuaXNTVkdGb250KCkpCiAgICAgICAgIHJ1
bi5zZXRSZW5kZXJpbmdDb250ZXh0KFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUo
cmVuZGVyZXIoKSkpOwogCiAgICAgLy8gUHJvcGFnYXRlIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiB0
aGUgY2hhcmFjdGVycyBidWZmZXIgdG8gdGhlIFRleHRSdW4sIGV2ZW4gd2hlbiB3ZSdyZSBvbmx5
IHByb2Nlc3NpbmcgYSBzdWJzdHJpbmcuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9jay5jcHAJKHJldmlzaW9uIDE3ODUxMCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMjUsNyArMjMyNSw3IEBA
IExheW91dFVuaXQgUmVuZGVyQmxvY2s6OmFkanVzdExvZ2ljYWxMZWYKICAgICAgICAgcmV0dXJu
IGxlZnQ7CiAKICAgICAvLyBGSVhNRTogU2hvdWxkIGxldHRlci1zcGFjaW5nIGFwcGx5PyBUaGlz
IGlzIGNvbXBsaWNhdGVkIHNpbmNlIGl0IGRvZXNuJ3QgYXBwbHkgYXQgdGhlIGVkZ2U/Ci0gICAg
ZmxvYXQgbWF4Q2hhcldpZHRoID0gbGluZUdyaWQtPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmlt
YXJ5Rm9udERhdGEoKS5tYXhDaGFyV2lkdGgoKTsKKyAgICBmbG9hdCBtYXhDaGFyV2lkdGggPSBs
aW5lR3JpZC0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCkubWF4Q2hhcldpZHRo
KCk7CiAgICAgaWYgKCFtYXhDaGFyV2lkdGgpCiAgICAgICAgIHJldHVybiBsZWZ0OwogCkBAIC0y
MzY1LDcgKzIzNjUsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjphZGp1c3RMb2dpY2FsUmln
CiAgICAgICAgIHJldHVybiByaWdodDsKIAogICAgIC8vIEZJWE1FOiBTaG91bGQgbGV0dGVyLXNw
YWNpbmcgYXBwbHk/IFRoaXMgaXMgY29tcGxpY2F0ZWQgc2luY2UgaXQgZG9lc24ndCBhcHBseSBh
dCB0aGUgZWRnZT8KLSAgICBmbG9hdCBtYXhDaGFyV2lkdGggPSBsaW5lR3JpZC0+c3R5bGUoKS5m
b250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLm1heENoYXJXaWR0aCgpOworICAgIGZsb2F0
IG1heENoYXJXaWR0aCA9IGxpbmVHcmlkLT5zdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZv
bnQoKS5tYXhDaGFyV2lkdGgoKTsKICAgICBpZiAoIW1heENoYXJXaWR0aCkKICAgICAgICAgcmV0
dXJuIHJpZ2h0OwogCkBAIC0zNjk5LDcgKzM2OTksNyBAQCBzdGF0aWMgaW5saW5lIFRleHRSdW4g
Y29uc3RydWN0VGV4dFJ1bkluCiAgICAgYm9vbCBkaXJlY3Rpb25hbE92ZXJyaWRlID0gc3R5bGUu
cnRsT3JkZXJpbmcoKSA9PSBWaXN1YWxPcmRlcjsKIAogICAgIFRleHRSdW4gcnVuKGNoYXJhY3Rl
cnMsIGxlbmd0aCwgMCwgMCwgZXhwYW5zaW9uLCB0ZXh0RGlyZWN0aW9uLCBkaXJlY3Rpb25hbE92
ZXJyaWRlKTsKLSAgICBpZiAoZm9udC5wcmltYXJ5Rm9udERhdGEoKS5pc1NWR0ZvbnQoKSkgewor
ICAgIGlmIChmb250LnByaW1hcnlGb250KCkuaXNTVkdGb250KCkpIHsKICAgICAgICAgQVNTRVJU
KGNvbnRleHQpOyAvLyBGSVhNRTogVGhyZWFkIGEgUmVuZGVyT2JqZWN0JiB0byB0aGlzIHBvaW50
IHNvIHdlIGRvbid0IGhhdmUgdG8gZGVyZWZlcmVuY2UgYW55dGhpbmcuCiAgICAgICAgIHJ1bi5z
ZXRSZW5kZXJpbmdDb250ZXh0KFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUoKmNv
bnRleHQpKTsKICAgICB9CkBAIC0zNzE5LDcgKzM3MTksNyBAQCBzdGF0aWMgaW5saW5lIFRleHRS
dW4gY29uc3RydWN0VGV4dFJ1bkluCiAgICAgICAgICAgICBkaXJlY3Rpb25hbE92ZXJyaWRlIHw9
IGlzT3ZlcnJpZGUoc3R5bGUudW5pY29kZUJpZGkoKSk7CiAgICAgfQogICAgIFRleHRSdW4gcnVu
KGNoYXJhY3RlcnMsIGxlbmd0aCwgMCwgMCwgZXhwYW5zaW9uLCB0ZXh0RGlyZWN0aW9uLCBkaXJl
Y3Rpb25hbE92ZXJyaWRlKTsKLSAgICBpZiAoZm9udC5wcmltYXJ5Rm9udERhdGEoKS5pc1NWR0Zv
bnQoKSkgeworICAgIGlmIChmb250LnByaW1hcnlGb250KCkuaXNTVkdGb250KCkpIHsKICAgICAg
ICAgQVNTRVJUKGNvbnRleHQpOyAvLyBGSVhNRTogVGhyZWFkIGEgUmVuZGVyT2JqZWN0JiB0byB0
aGlzIHBvaW50IHNvIHdlIGRvbid0IGhhdmUgdG8gZGVyZWZlcmVuY2UgYW55dGhpbmcuCiAgICAg
ICAgIHJ1bi5zZXRSZW5kZXJpbmdDb250ZXh0KFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0Ojpj
cmVhdGUoKmNvbnRleHQpKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAkocmV2aXNpb24gMTc4NTEwKQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ1OCw3ICs0NTgsNyBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6c2V0TWFy
Z2luc0ZvclJ1YnlSCiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0TG9naWNhbFdpZHRoRm9yVGV4dFJ1
bihSb290SW5saW5lQm94KiBsaW5lQm94LCBCaWRpUnVuKiBydW4sIFJlbmRlclRleHQqIHJlbmRl
cmVyLCBmbG9hdCB4UG9zLCBjb25zdCBMaW5lSW5mbyYgbGluZUluZm8sCiAgICAgR2x5cGhPdmVy
Zmxvd0FuZEZhbGxiYWNrRm9udHNNYXAmIHRleHRCb3hEYXRhTWFwLCBWZXJ0aWNhbFBvc2l0aW9u
Q2FjaGUmIHZlcnRpY2FsUG9zaXRpb25DYWNoZSwgV29yZE1lYXN1cmVtZW50cyYgd29yZE1lYXN1
cmVtZW50cykKIHsKLSAgICBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4gZmFsbGJhY2tG
b250czsKKyAgICBIYXNoU2V0PGNvbnN0IEZvbnQqPiBmYWxsYmFja0ZvbnRzOwogICAgIEdseXBo
T3ZlcmZsb3cgZ2x5cGhPdmVyZmxvdzsKIAogICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0g
bGluZVN0eWxlKCpyZW5kZXJlci0+cGFyZW50KCksIGxpbmVJbmZvKS5mb250Q2FzY2FkZSgpOwpA
QCAtNTA5LDggKzUwOSw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRMb2dpY2FsV2lkdGhGb3JU
ZXgKICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIG1lYXN1cmVkV2lkdGggKz0g
d29yZE1lYXN1cmVtZW50LndpZHRoOwogICAgICAgICAgICAgaWYgKCF3b3JkTWVhc3VyZW1lbnQu
ZmFsbGJhY2tGb250cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBIYXNoU2V0PGNvbnN0
IFNpbXBsZUZvbnREYXRhKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHdvcmRNZWFzdXJlbWVudC5m
YWxsYmFja0ZvbnRzLmVuZCgpOwotICAgICAgICAgICAgICAgIGZvciAoSGFzaFNldDxjb25zdCBT
aW1wbGVGb250RGF0YSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHdvcmRNZWFzdXJlbWVudC5mYWxs
YmFja0ZvbnRzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgICAgICBIYXNo
U2V0PGNvbnN0IEZvbnQqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gd29yZE1lYXN1cmVtZW50LmZh
bGxiYWNrRm9udHMuZW5kKCk7CisgICAgICAgICAgICAgICAgZm9yIChIYXNoU2V0PGNvbnN0IEZv
bnQqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSB3b3JkTWVhc3VyZW1lbnQuZmFsbGJhY2tGb250cy5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCiAgICAgICAgICAgICAgICAgICAgIGZhbGxiYWNrRm9u
dHMuYWRkKCppdCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTUyNyw3ICs1MjcsNyBA
QCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0TG9naWNhbFdpZHRoRm9yVGV4CiAgICAgcnVuLT5ib3go
KS0+c2V0TG9naWNhbFdpZHRoKG1lYXN1cmVkV2lkdGggKyBoeXBoZW5XaWR0aCk7CiAgICAgaWYg
KCFmYWxsYmFja0ZvbnRzLmlzRW1wdHkoKSkgewogICAgICAgICBBU1NFUlQocnVuLT5ib3goKS0+
YmVoYXZlc0xpa2VUZXh0KCkpOwotICAgICAgICBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250
c01hcDo6aXRlcmF0b3IgaXQgPSB0ZXh0Qm94RGF0YU1hcC5hZGQoZG93bmNhc3Q8SW5saW5lVGV4
dEJveD4ocnVuLT5ib3goKSksIHN0ZDo6bWFrZV9wYWlyKFZlY3Rvcjxjb25zdCBTaW1wbGVGb250
RGF0YSo+KCksIEdseXBoT3ZlcmZsb3coKSkpLml0ZXJhdG9yOworICAgICAgICBHbHlwaE92ZXJm
bG93QW5kRmFsbGJhY2tGb250c01hcDo6aXRlcmF0b3IgaXQgPSB0ZXh0Qm94RGF0YU1hcC5hZGQo
ZG93bmNhc3Q8SW5saW5lVGV4dEJveD4ocnVuLT5ib3goKSksIHN0ZDo6bWFrZV9wYWlyKFZlY3Rv
cjxjb25zdCBGb250Kj4oKSwgR2x5cGhPdmVyZmxvdygpKSkuaXRlcmF0b3I7CiAgICAgICAgIEFT
U0VSVChpdC0+dmFsdWUuZmlyc3QuaXNFbXB0eSgpKTsKICAgICAgICAgY29weVRvVmVjdG9yKGZh
bGxiYWNrRm9udHMsIGl0LT52YWx1ZS5maXJzdCk7CiAgICAgICAgIHJ1bi0+Ym94KCktPnBhcmVu
dCgpLT5jbGVhckRlc2NlbmRhbnRzSGF2ZVNhbWVMaW5lSGVpZ2h0QW5kQmFzZWxpbmUoKTsKQEAg
LTUzOSw3ICs1MzksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0TG9naWNhbFdpZHRoRm9yVGV4
CiAKICAgICBpZiAoIWdseXBoT3ZlcmZsb3cuaXNFbXB0eSgpKSB7CiAgICAgICAgIEFTU0VSVChy
dW4tPmJveCgpLT5iZWhhdmVzTGlrZVRleHQoKSk7Ci0gICAgICAgIEdseXBoT3ZlcmZsb3dBbmRG
YWxsYmFja0ZvbnRzTWFwOjppdGVyYXRvciBpdCA9IHRleHRCb3hEYXRhTWFwLmFkZChkb3duY2Fz
dDxJbmxpbmVUZXh0Qm94PihydW4tPmJveCgpKSwgc3RkOjptYWtlX3BhaXIoVmVjdG9yPGNvbnN0
IFNpbXBsZUZvbnREYXRhKj4oKSwgR2x5cGhPdmVyZmxvdygpKSkuaXRlcmF0b3I7CisgICAgICAg
IEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwOjppdGVyYXRvciBpdCA9IHRleHRCb3hE
YXRhTWFwLmFkZChkb3duY2FzdDxJbmxpbmVUZXh0Qm94PihydW4tPmJveCgpKSwgc3RkOjptYWtl
X3BhaXIoVmVjdG9yPGNvbnN0IEZvbnQqPigpLCBHbHlwaE92ZXJmbG93KCkpKS5pdGVyYXRvcjsK
ICAgICAgICAgaXQtPnZhbHVlLnNlY29uZCA9IGdseXBoT3ZlcmZsb3c7CiAgICAgICAgIHJ1bi0+
Ym94KCktPmNsZWFyS25vd25Ub0hhdmVOb092ZXJmbG93KCk7CiAgICAgfQpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuY3BwCShyZXZpc2lvbiAx
Nzg1MTApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIHZvaWQgUmVuZGVyQ29tYmluZVRleHQ6
OnNldFJlbmRlcmVkVGV4dCgKICAgICBtX25lZWRzRm9udFVwZGF0ZSA9IHRydWU7CiB9CiAKLWZs
b2F0IFJlbmRlckNvbWJpbmVUZXh0Ojp3aWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW5n
dGgsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBmbG9hdCB4UG9zaXRpb24sIEhhc2hTZXQ8Y29u
c3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhP
dmVyZmxvdykgY29uc3QKK2Zsb2F0IFJlbmRlckNvbWJpbmVUZXh0Ojp3aWR0aCh1bnNpZ25lZCBm
cm9tLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBmbG9hdCB4UG9z
aXRpb24sIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93
KiBnbHlwaE92ZXJmbG93KSBjb25zdAogewogICAgIGlmIChtX2lzQ29tYmluZWQpCiAgICAgICAg
IHJldHVybiBmb250LnNpemUoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJDb21iaW5lVGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJDb21iaW5lVGV4dC5oCShyZXZpc2lvbiAxNzg1MTApCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYs
NyBAQCBwcml2YXRlOgogICAgIHZvaWQgbm9kZSgpIGNvbnN0ID0gZGVsZXRlOwogCiAgICAgdmly
dHVhbCBib29sIGlzQ29tYmluZVRleHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9
Ci0gICAgdmlydHVhbCBmbG9hdCB3aWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW5ndGgs
IGNvbnN0IEZvbnRDYXNjYWRlJiwgZmxvYXQgeFBvc2l0aW9uLCBIYXNoU2V0PGNvbnN0IFNpbXBs
ZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93KiA9IDApIGNvbnN0
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgZmxvYXQgd2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWdu
ZWQgbGVuZ3RoLCBjb25zdCBGb250Q2FzY2FkZSYsIGZsb2F0IHhQb3NpdGlvbiwgSGFzaFNldDxj
b25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93KiA9IDApIGNvbnN0
IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuICJSZW5kZXJDb21iaW5lVGV4dCI7IH0KICAgICB2aXJ0dWFsIHZvaWQg
c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5
bGUpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBzZXRSZW5kZXJlZFRleHQoY29uc3QgU3Ry
aW5nJikgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2Vh
cmNoRmllbGQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTZWFyY2hGaWVsZC5jcHAJKHJldmlzaW9uIDE3ODUxMCkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3
LDcgQEAKICNpbmNsdWRlICJDU1NGb250U2VsZWN0b3IuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUtl
eXdvcmRzLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCisjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1
ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKICNpbmNsdWRlICJGcmFt
ZVZpZXcuaCIKQEAgLTQyLDcgKzQzLDYgQEAKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5j
bHVkZSAiU2VhcmNoUG9wdXBNZW51LmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRl
ICJTaW1wbGVGb250RGF0YS5oIgogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRl
ICJUZXh0Q29udHJvbElubmVyRWxlbWVudHMuaCIKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0LmNwcAkocmV2aXNpb24gMTc4NTEwKQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTEsNyArNDUxLDcg
QEAgTGF5b3V0UmVjdCBSZW5kZXJUZXh0Ojpsb2NhbENhcmV0UmVjdChJbgogICAgIHJldHVybiBi
b3gucm9vdCgpLmNvbXB1dGVDYXJldFJlY3QobGVmdCwgY2FyZXRXaWR0aCwgZXh0cmFXaWR0aFRv
RW5kT2ZMaW5lKTsKIH0KIAotQUxXQVlTX0lOTElORSBmbG9hdCBSZW5kZXJUZXh0Ojp3aWR0aEZy
b21DYWNoZShjb25zdCBGb250Q2FzY2FkZSYgZiwgaW50IHN0YXJ0LCBpbnQgbGVuLCBmbG9hdCB4
UG9zLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBo
T3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3csIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QK
K0FMV0FZU19JTkxJTkUgZmxvYXQgUmVuZGVyVGV4dDo6d2lkdGhGcm9tQ2FjaGUoY29uc3QgRm9u
dENhc2NhZGUmIGYsIGludCBzdGFydCwgaW50IGxlbiwgZmxvYXQgeFBvcywgSGFzaFNldDxjb25z
dCBGb250Kj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3csIGNv
bnN0IFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKIHsKICAgICBpZiAoc3R5bGUuaGFzVGV4dENv
bWJpbmUoKSAmJiBpczxSZW5kZXJDb21iaW5lVGV4dD4oKnRoaXMpKSB7CiAgICAgICAgIGNvbnN0
IFJlbmRlckNvbWJpbmVUZXh0JiBjb21iaW5lVGV4dCA9IGRvd25jYXN0PFJlbmRlckNvbWJpbmVU
ZXh0PigqdGhpcyk7CkBAIC02MzAsNyArNjMwLDcgQEAgTGluZUJyZWFrSXRlcmF0b3JNb2RlIG1h
cExpbmVCcmVha1RvSXRlcgogCiB2b2lkIFJlbmRlclRleHQ6OmNvbXB1dGVQcmVmZXJyZWRMb2dp
Y2FsV2lkdGhzKGZsb2F0IGxlYWRXaWR0aCkKIHsKLSAgICBIYXNoU2V0PGNvbnN0IFNpbXBsZUZv
bnREYXRhKj4gZmFsbGJhY2tGb250czsKKyAgICBIYXNoU2V0PGNvbnN0IEZvbnQqPiBmYWxsYmFj
a0ZvbnRzOwogICAgIEdseXBoT3ZlcmZsb3cgZ2x5cGhPdmVyZmxvdzsKICAgICBjb21wdXRlUHJl
ZmVycmVkTG9naWNhbFdpZHRocyhsZWFkV2lkdGgsIGZhbGxiYWNrRm9udHMsIGdseXBoT3ZlcmZs
b3cpOwogICAgIGlmIChmYWxsYmFja0ZvbnRzLmlzRW1wdHkoKSAmJiAhZ2x5cGhPdmVyZmxvdy5s
ZWZ0ICYmICFnbHlwaE92ZXJmbG93LnJpZ2h0ICYmICFnbHlwaE92ZXJmbG93LnRvcCAmJiAhZ2x5
cGhPdmVyZmxvdy5ib3R0b20pCkBAIC02NDMsNyArNjQzLDcgQEAgc3RhdGljIGlubGluZSBmbG9h
dCBoeXBoZW5XaWR0aChSZW5kZXJUZQogICAgIHJldHVybiBmb250LndpZHRoKFJlbmRlckJsb2Nr
Ojpjb25zdHJ1Y3RUZXh0UnVuKHJlbmRlcmVyLCBmb250LCBzdHlsZS5oeXBoZW5TdHJpbmcoKS5z
dHJpbmcoKSwgc3R5bGUpKTsKIH0KIAotc3RhdGljIGZsb2F0IG1heFdvcmRGcmFnbWVudFdpZHRo
KFJlbmRlclRleHQqIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZv
bnRDYXNjYWRlJiBmb250LCBTdHJpbmdWaWV3IHdvcmQsIGludCBtaW5pbXVtUHJlZml4TGVuZ3Ro
LCB1bnNpZ25lZCBtaW5pbXVtU3VmZml4TGVuZ3RoLCBpbnQmIHN1ZmZpeFN0YXJ0LCBIYXNoU2V0
PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4mIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cmIGds
eXBoT3ZlcmZsb3cpCitzdGF0aWMgZmxvYXQgbWF4V29yZEZyYWdtZW50V2lkdGgoUmVuZGVyVGV4
dCogcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRm9udENhc2NhZGUm
IGZvbnQsIFN0cmluZ1ZpZXcgd29yZCwgaW50IG1pbmltdW1QcmVmaXhMZW5ndGgsIHVuc2lnbmVk
IG1pbmltdW1TdWZmaXhMZW5ndGgsIGludCYgc3VmZml4U3RhcnQsIEhhc2hTZXQ8Y29uc3QgRm9u
dCo+JiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93JiBnbHlwaE92ZXJmbG93KQogewogICAg
IHN1ZmZpeFN0YXJ0ID0gMDsKICAgICBpZiAod29yZC5sZW5ndGgoKSA8PSBtaW5pbXVtU3VmZml4
TGVuZ3RoKQpAQCAtNjgzLDcgKzY4Myw3IEBAIHN0YXRpYyBmbG9hdCBtYXhXb3JkRnJhZ21lbnRX
aWR0aChSZW5kZXIKICAgICByZXR1cm4gbWF4RnJhZ21lbnRXaWR0aDsKIH0KIAotdm9pZCBSZW5k
ZXJUZXh0Ojpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyhmbG9hdCBsZWFkV2lkdGgsIEhh
c2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiYgZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxv
dyYgZ2x5cGhPdmVyZmxvdykKK3ZvaWQgUmVuZGVyVGV4dDo6Y29tcHV0ZVByZWZlcnJlZExvZ2lj
YWxXaWR0aHMoZmxvYXQgbGVhZFdpZHRoLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiYgZmFsbGJhY2tG
b250cywgR2x5cGhPdmVyZmxvdyYgZ2x5cGhPdmVyZmxvdykKIHsKICAgICBBU1NFUlQobV9oYXNU
YWIgfHwgcHJlZmVycmVkTG9naWNhbFdpZHRoc0RpcnR5KCkgfHwgIW1fa25vd25Ub0hhdmVOb092
ZXJmbG93QW5kTm9GYWxsYmFja0ZvbnRzKTsKIApAQCAtMTIwNiw3ICsxMjA2LDcgQEAgY29uc3Qg
U2ltcGxlTGluZUxheW91dDo6TGF5b3V0KiBSZW5kZXJUZQogICAgIHJldHVybiBkb3duY2FzdDxS
ZW5kZXJCbG9ja0Zsb3c+KCpwYXJlbnQoKSkuc2ltcGxlTGluZUxheW91dCgpOwogfQogCi1mbG9h
dCBSZW5kZXJUZXh0Ojp3aWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIGZsb2F0IHhQ
b3MsIGJvb2wgZmlyc3RMaW5lLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxi
YWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0CitmbG9hdCBSZW5k
ZXJUZXh0Ojp3aWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIGZsb2F0IHhQb3MsIGJv
b2wgZmlyc3RMaW5lLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cywgR2x5cGhP
dmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKIHsKICAgICBpZiAoZnJvbSA+PSB0ZXh0TGVu
Z3RoKCkpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMTIxOCw3ICsxMjE4LDcgQEAgZmxvYXQgUmVu
ZGVyVGV4dDo6d2lkdGgodW5zaWduZWQgZnJvbSwgdQogICAgIHJldHVybiB3aWR0aChmcm9tLCBs
ZW4sIGxpbmVTdHlsZS5mb250Q2FzY2FkZSgpLCB4UG9zLCBmYWxsYmFja0ZvbnRzLCBnbHlwaE92
ZXJmbG93KTsKIH0KIAotZmxvYXQgUmVuZGVyVGV4dDo6d2lkdGgodW5zaWduZWQgZnJvbSwgdW5z
aWduZWQgbGVuLCBjb25zdCBGb250Q2FzY2FkZSYgZiwgZmxvYXQgeFBvcywgSGFzaFNldDxjb25z
dCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92
ZXJmbG93KSBjb25zdAorZmxvYXQgUmVuZGVyVGV4dDo6d2lkdGgodW5zaWduZWQgZnJvbSwgdW5z
aWduZWQgbGVuLCBjb25zdCBGb250Q2FzY2FkZSYgZiwgZmxvYXQgeFBvcywgSGFzaFNldDxjb25z
dCBGb250Kj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNv
bnN0CiB7CiAgICAgQVNTRVJUKGZyb20gKyBsZW4gPD0gdGV4dExlbmd0aCgpKTsKICAgICBpZiAo
IXRleHRMZW5ndGgoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAko
cmV2aXNpb24gMTc4NTEwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQu
aAkod29ya2luZyBjb3B5KQpAQCAtODksOCArODksOCBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQg
dGV4dExlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dC5pbXBsKCktPmxlbmd0aCgpOyB9IC8v
IG5vbiB2aXJ0dWFsIGltcGxlbWVudGF0aW9uIG9mIGxlbmd0aCgpCiAgICAgdm9pZCBwb3NpdGlv
bkxpbmVCb3goSW5saW5lVGV4dEJveCYpOwogCi0gICAgdmlydHVhbCBmbG9hdCB3aWR0aCh1bnNp
Z25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIGNvbnN0IEZvbnRDYXNjYWRlJiwgZmxvYXQgeFBvcywg
SGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5cGhP
dmVyZmxvdyogPSAwKSBjb25zdDsKLSAgICB2aXJ0dWFsIGZsb2F0IHdpZHRoKHVuc2lnbmVkIGZy
b20sIHVuc2lnbmVkIGxlbiwgZmxvYXQgeFBvcywgYm9vbCBmaXJzdExpbmUgPSBmYWxzZSwgSGFz
aFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5cGhPdmVy
ZmxvdyogPSAwKSBjb25zdDsKKyAgICB2aXJ0dWFsIGZsb2F0IHdpZHRoKHVuc2lnbmVkIGZyb20s
IHVuc2lnbmVkIGxlbiwgY29uc3QgRm9udENhc2NhZGUmLCBmbG9hdCB4UG9zLCBIYXNoU2V0PGNv
bnN0IEZvbnQqPiogZmFsbGJhY2tGb250cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29uc3Q7
CisgICAgdmlydHVhbCBmbG9hdCB3aWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIGZs
b2F0IHhQb3MsIGJvb2wgZmlyc3RMaW5lID0gZmFsc2UsIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBm
YWxsYmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsKIAogICAgIGZsb2F0
IG1pbkxvZ2ljYWxXaWR0aCgpIGNvbnN0OwogICAgIGZsb2F0IG1heExvZ2ljYWxXaWR0aCgpIGNv
bnN0OwpAQCAtMTgwLDcgKzE4MCw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIGJvb2wgY2Fu
SGF2ZUNoaWxkcmVuKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KIAot
ICAgIHZvaWQgY29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoZmxvYXQgbGVhZFdpZHRoLCBI
YXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4mIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZs
b3cmKTsKKyAgICB2b2lkIGNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKGZsb2F0IGxlYWRX
aWR0aCwgSGFzaFNldDxjb25zdCBGb250Kj4mIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cm
KTsKIAogICAgIGJvb2wgY29tcHV0ZUNhblVzZVNpbXBsZUZvbnRDb2RlUGF0aCgpIGNvbnN0Owog
ICAgIApAQCAtMTkyLDcgKzE5Miw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIG5vZGVB
dFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRl
c3RMb2NhdGlvbiYsIGNvbnN0IExheW91dFBvaW50JiwgSGl0VGVzdEFjdGlvbikgb3ZlcnJpZGUg
ZmluYWwgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICBib29s
IGNvbnRhaW5zT25seVdoaXRlc3BhY2UodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuKSBjb25z
dDsKLSAgICBmbG9hdCB3aWR0aEZyb21DYWNoZShjb25zdCBGb250Q2FzY2FkZSYsIGludCBzdGFy
dCwgaW50IGxlbiwgZmxvYXQgeFBvcywgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBm
YWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiwgY29uc3QgUmVuZGVyU3R5bGUmKSBjb25zdDsK
KyAgICBmbG9hdCB3aWR0aEZyb21DYWNoZShjb25zdCBGb250Q2FzY2FkZSYsIGludCBzdGFydCwg
aW50IGxlbiwgZmxvYXQgeFBvcywgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMs
IEdseXBoT3ZlcmZsb3cqLCBjb25zdCBSZW5kZXJTdHlsZSYpIGNvbnN0OwogICAgIGJvb2wgaXNB
bGxBU0NJSSgpIGNvbnN0IHsgcmV0dXJuIG1faXNBbGxBU0NJSTsgfQogICAgIGJvb2wgY29tcHV0
ZVVzZUJhY2tzbGFzaEFzWWVuU3ltYm9sKCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3Bw
CShyZXZpc2lvbiAxNzg1MTApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAog
I2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMu
aCIKICNpbmNsdWRlICJDaHJvbWUuaCIKKyNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRnJh
bWUuaCIKICNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5o
IgpAQCAtNDAsNyArNDEsNiBAQAogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAi
UmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiU2ltcGxlRm9u
dERhdGEuaCIKICNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiVGV4dENvbnRy
b2xJbm5lckVsZW1lbnRzLmgiCiAjaW5jbHVkZSA8d3RmL1N0YWNrU3RhdHMuaD4KQEAgLTM0Niw3
ICszNDYsNyBAQCBMYXlvdXRVbml0IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6CiAgICAg
aWYgKGZhbWlseSA9PSAiTHVjaWRhIEdyYW5kZSIpCiAgICAgICAgIG1heENoYXJXaWR0aCA9IHNj
YWxlRW1Ub1VuaXRzKDQwMjcpOwogICAgIGVsc2UgaWYgKHN0eWxlKCkuZm9udENhc2NhZGUoKS5o
YXNWYWxpZEF2ZXJhZ2VDaGFyV2lkdGgoKSkKLSAgICAgICAgbWF4Q2hhcldpZHRoID0gcm91bmRm
KHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5tYXhDaGFyV2lkdGgoKSk7
CisgICAgICAgIG1heENoYXJXaWR0aCA9IHJvdW5kZihzdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJp
bWFyeUZvbnQoKS5tYXhDaGFyV2lkdGgoKSk7CiAjZW5kaWYKIAogICAgIC8vIEZvciB0ZXh0IGlu
cHV0cywgSUUgYWRkcyBzb21lIGV4dHJhIHdpZHRoLgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQkocmV2aXNpb24gMTc4NTEwKQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01ODAs
NyArNTgwLDcgQEAgc3RhdGljIHZvaWQgYWRqdXN0SW5wdXRFbGVtZW50QnV0dG9uU3R5bAogICAg
IEZvbnRDYXNjYWRlIGZvbnQgPSBzdHlsZS5mb250Q2FzY2FkZSgpOwogICAgIAogICAgIFJlbmRl
ck9iamVjdCogcmVuZGVyZXIgPSBpbnB1dEVsZW1lbnQucmVuZGVyZXIoKTsKLSAgICBpZiAoZm9u
dC5wcmltYXJ5Rm9udERhdGEoKS5pc1NWR0ZvbnQoKSAmJiAhcmVuZGVyZXIpCisgICAgaWYgKGZv
bnQucHJpbWFyeUZvbnQoKS5pc1NWR0ZvbnQoKSAmJiAhcmVuZGVyZXIpCiAgICAgICAgIHJldHVy
bjsKICAgICAKICAgICBmbG9hdCBtYXhpbXVtV2lkdGggPSBsb2NhbGl6ZWREYXRlQ2FjaGUoKS5t
YXhpbXVtV2lkdGhGb3JEYXRlVHlwZShkYXRlVHlwZSwgZm9udCwgUmVuZGVyVGhlbWVNZWFzdXJl
VGV4dENsaWVudChmb250LCAqcmVuZGVyZXIsIHN0eWxlKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCShyZXZpc2lvbiAxNzg1MTApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTg4NSw3ICs4ODUsNyBAQCB2b2lkIFJvb3RJbmxpbmVCb3g6OmFzY2VudEFuZERlc2NlbnRGb3JC
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBWZWN0b3I8Y29uc3QgU2ltcGxlRm9udERh
dGEqPiogdXNlZEZvbnRzID0gbnVsbHB0cjsKKyAgICBWZWN0b3I8Y29uc3QgRm9udCo+KiB1c2Vk
Rm9udHMgPSBudWxscHRyOwogICAgIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cgPSBudWxs
cHRyOwogICAgIGlmIChpczxJbmxpbmVUZXh0Qm94Pihib3gpKSB7CiAgICAgICAgIEdseXBoT3Zl
cmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwOjppdGVyYXRvciBpdCA9IHRleHRCb3hEYXRhTWFwLmZp
bmQoJmRvd25jYXN0PElubGluZVRleHRCb3g+KGJveCkpOwpAQCAtOTAxLDcgKzkwMSw3IEBAIHZv
aWQgUm9vdElubGluZUJveDo6YXNjZW50QW5kRGVzY2VudEZvckIKIAogICAgIGNvbnN0IFJlbmRl
clN0eWxlJiBib3hMaW5lU3R5bGUgPSBib3gubGluZVN0eWxlKCk7CiAgICAgaWYgKHVzZWRGb250
cyAmJiAhdXNlZEZvbnRzLT5pc0VtcHR5KCkgJiYgKGluY2x1ZGVGb250IHx8IChib3hMaW5lU3R5
bGUubGluZUhlaWdodCgpLmlzTmVnYXRpdmUoKSAmJiBpbmNsdWRlTGVhZGluZykpKSB7Ci0gICAg
ICAgIHVzZWRGb250cy0+YXBwZW5kKCZib3hMaW5lU3R5bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5
Rm9udERhdGEoKSk7CisgICAgICAgIHVzZWRGb250cy0+YXBwZW5kKCZib3hMaW5lU3R5bGUuZm9u
dENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCB1c2VkRm9udHMtPnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBjb25zdCBGb250TWV0cmlj
cyYgZm9udE1ldHJpY3MgPSB1c2VkRm9udHMtPmF0KGkpLT5mb250TWV0cmljcygpOwogICAgICAg
ICAgICAgaW50IHVzZWRGb250QXNjZW50ID0gZm9udE1ldHJpY3MuYXNjZW50KGJhc2VsaW5lVHlw
ZSgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91
dC5jcHAJKHJldmlzaW9uIDE3ODUxMCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1w
bGVMaW5lTGF5b3V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgU2ltcGxlTGluZUxheW91dCB7CiAKIHRlbXBsYXRlIDx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIGJvb2wgY2FuVXNlRm9yVGV4dChjb25zdCBD
aGFyYWN0ZXJUeXBlKiB0ZXh0LCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFNpbXBsZUZvbnREYXRh
JiBmb250RGF0YSkKK3N0YXRpYyBib29sIGNhblVzZUZvclRleHQoY29uc3QgQ2hhcmFjdGVyVHlw
ZSogdGV4dCwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBGb250JiBmb250KQogewogICAgIC8vIEZJ
WE1FOiA8dGV4dGFyZWEgbWF4bGVuZ3RoPTA+IGdlbmVyYXRlcyBlbXB0eSB0ZXh0IG5vZGUuCiAg
ICAgaWYgKCFsZW5ndGgpCkBAIC03NSwxNyArNzUsMTcgQEAgc3RhdGljIGJvb2wgY2FuVXNlRm9y
VGV4dChjb25zdCBDaGFyYWN0ZQogICAgICAgICAgICAgfHwgZGlyZWN0aW9uID09IFVfUE9QX0RJ
UkVDVElPTkFMX0ZPUk1BVCB8fCBkaXJlY3Rpb24gPT0gVV9CT1VOREFSWV9ORVVUUkFMKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGlmICghZm9udERhdGEuZ2x5cGhGb3JD
aGFyYWN0ZXIoY2hhcmFjdGVyKSkKKyAgICAgICAgaWYgKCFmb250LmdseXBoRm9yQ2hhcmFjdGVy
KGNoYXJhY3RlcikpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHJldHVy
biB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCBjYW5Vc2VGb3JUZXh0KGNvbnN0IFJlbmRlclRleHQm
IHRleHRSZW5kZXJlciwgY29uc3QgU2ltcGxlRm9udERhdGEmIGZvbnREYXRhKQorc3RhdGljIGJv
b2wgY2FuVXNlRm9yVGV4dChjb25zdCBSZW5kZXJUZXh0JiB0ZXh0UmVuZGVyZXIsIGNvbnN0IEZv
bnQmIGZvbnQpCiB7CiAgICAgaWYgKHRleHRSZW5kZXJlci5pczhCaXQoKSkKLSAgICAgICAgcmV0
dXJuIGNhblVzZUZvclRleHQodGV4dFJlbmRlcmVyLmNoYXJhY3RlcnM4KCksIHRleHRSZW5kZXJl
ci50ZXh0TGVuZ3RoKCksIGZvbnREYXRhKTsKLSAgICByZXR1cm4gY2FuVXNlRm9yVGV4dCh0ZXh0
UmVuZGVyZXIuY2hhcmFjdGVyczE2KCksIHRleHRSZW5kZXJlci50ZXh0TGVuZ3RoKCksIGZvbnRE
YXRhKTsKKyAgICAgICAgcmV0dXJuIGNhblVzZUZvclRleHQodGV4dFJlbmRlcmVyLmNoYXJhY3Rl
cnM4KCksIHRleHRSZW5kZXJlci50ZXh0TGVuZ3RoKCksIGZvbnQpOworICAgIHJldHVybiBjYW5V
c2VGb3JUZXh0KHRleHRSZW5kZXJlci5jaGFyYWN0ZXJzMTYoKSwgdGV4dFJlbmRlcmVyLnRleHRM
ZW5ndGgoKSwgZm9udCk7CiB9CiAKIGJvb2wgY2FuVXNlRm9yKGNvbnN0IFJlbmRlckJsb2NrRmxv
dyYgZmxvdykKQEAgLTE4NCwxMSArMTg0LDExIEBAIGJvb2wgY2FuVXNlRm9yKGNvbnN0IFJlbmRl
ckJsb2NrRmxvdyYgZmwKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICBpZiAo
c3R5bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5pc1NWR0ZvbnQoKSkKKyAgICBp
ZiAoc3R5bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpLmlzU1ZHRm9udCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgLy8gV2UgYXNzdW1lIHRoYXQgYWxsIGxpbmVzIGhhdmUgbWV0
cmljcyBiYXNlZCBwdXJlbHkgb24gdGhlIHByaW1hcnkgZm9udC4KLSAgICBhdXRvJiBwcmltYXJ5
Rm9udERhdGEgPSBzdHlsZS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpOwotICAgIGlm
IChwcmltYXJ5Rm9udERhdGEuaXNMb2FkaW5nKCkpCisgICAgYXV0byYgcHJpbWFyeUZvbnQgPSBz
dHlsZS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCk7CisgICAgaWYgKHByaW1hcnlGb250Lmlz
TG9hZGluZygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgZm9yIChjb25zdCBhdXRvJiB0
ZXh0UmVuZGVyZXIgOiBjaGlsZHJlbk9mVHlwZTxSZW5kZXJUZXh0PihmbG93KSkgewogICAgICAg
ICBpZiAodGV4dFJlbmRlcmVyLmlzQ29tYmluZVRleHQoKSB8fCB0ZXh0UmVuZGVyZXIuaXNDb3Vu
dGVyKCkgfHwgdGV4dFJlbmRlcmVyLmlzUXVvdGUoKSB8fCB0ZXh0UmVuZGVyZXIuaXNUZXh0RnJh
Z21lbnQoKQpAQCAtMTk2LDcgKzE5Niw3IEBAIGJvb2wgY2FuVXNlRm9yKGNvbnN0IFJlbmRlckJs
b2NrRmxvdyYgZmwKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKHN0eWxl
LmZvbnRDYXNjYWRlKCkuY29kZVBhdGgoVGV4dFJ1bih0ZXh0UmVuZGVyZXIudGV4dCgpKSkgIT0g
Rm9udENhc2NhZGU6OlNpbXBsZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
aWYgKCFjYW5Vc2VGb3JUZXh0KHRleHRSZW5kZXJlciwgcHJpbWFyeUZvbnREYXRhKSkKKyAgICAg
ICAgaWYgKCFjYW5Vc2VGb3JUZXh0KHRleHRSZW5kZXJlciwgcHJpbWFyeUZvbnQpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0JyZWFraW5nQ29udGV4dElubGluZUhlYWRlcnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9CcmVha2luZ0NvbnRl
eHRJbmxpbmVIZWFkZXJzLmgJKHJldmlzaW9uIDE3ODUxMCkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9saW5lL0JyZWFraW5nQ29udGV4dElubGluZUhlYWRlcnMuaAkod29ya2luZyBjb3B5
KQpAQCAtNTksNyArNTksNyBAQCBzdHJ1Y3QgV29yZE1lYXN1cmVtZW50IHsKICAgICBmbG9hdCB3
aWR0aDsKICAgICBpbnQgc3RhcnRPZmZzZXQ7CiAgICAgaW50IGVuZE9mZnNldDsKLSAgICBIYXNo
U2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4gZmFsbGJhY2tGb250czsKKyAgICBIYXNoU2V0PGNv
bnN0IEZvbnQqPiBmYWxsYmFja0ZvbnRzOwogfTsKIAogY2xhc3MgQnJlYWtpbmdDb250ZXh0IHsK
QEAgLTQ4NiwxMyArNDg2LDEzIEBAIGlubGluZSB2b2lkIHVwZGF0ZUNvdW50ZXJJZk5lZWRlZChS
ZW5kZXIKICAgICBkb3duY2FzdDxSZW5kZXJDb3VudGVyPihyZW5kZXJUZXh0KS51cGRhdGVDb3Vu
dGVyKCk7CiB9CiAKLWlubGluZSBmbG9hdCBtZWFzdXJlSHlwaGVuV2lkdGgoUmVuZGVyVGV4dCog
cmVuZGVyZXIsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZv
bnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwKQoraW5saW5lIGZsb2F0IG1lYXN1cmVIeXBoZW5X
aWR0aChSZW5kZXJUZXh0KiByZW5kZXJlciwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIEhhc2hT
ZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzID0gMCkKIHsKICAgICBjb25zdCBSZW5kZXJT
dHlsZSYgc3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKTsKICAgICByZXR1cm4gZm9udC53aWR0aChS
ZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bihyZW5kZXJlciwgZm9udCwgc3R5bGUuaHlwaGVu
U3RyaW5nKCkuc3RyaW5nKCksIHN0eWxlKSwgZmFsbGJhY2tGb250cyk7CiB9CiAKLUFMV0FZU19J
TkxJTkUgZmxvYXQgdGV4dFdpZHRoKFJlbmRlclRleHQqIHRleHQsIHVuc2lnbmVkIGZyb20sIHVu
c2lnbmVkIGxlbiwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGZsb2F0IHhQb3MsIGJvb2wgaXNG
aXhlZFBpdGNoLCBib29sIGNvbGxhcHNlV2hpdGVTcGFjZSwgSGFzaFNldDxjb25zdCBTaW1wbGVG
b250RGF0YSo+JiBmYWxsYmFja0ZvbnRzLCBUZXh0TGF5b3V0KiBsYXlvdXQgPSAwKQorQUxXQVlT
X0lOTElORSBmbG9hdCB0ZXh0V2lkdGgoUmVuZGVyVGV4dCogdGV4dCwgdW5zaWduZWQgZnJvbSwg
dW5zaWduZWQgbGVuLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgZmxvYXQgeFBvcywgYm9vbCBp
c0ZpeGVkUGl0Y2gsIGJvb2wgY29sbGFwc2VXaGl0ZVNwYWNlLCBIYXNoU2V0PGNvbnN0IEZvbnQq
PiYgZmFsbGJhY2tGb250cywgVGV4dExheW91dCogbGF5b3V0ID0gMCkKIHsKICAgICBjb25zdCBS
ZW5kZXJTdHlsZSYgc3R5bGUgPSB0ZXh0LT5zdHlsZSgpOwogCkBAIC01NzgsNyArNTc4LDcgQEAg
aW5saW5lIHZvaWQgdHJ5SHlwaGVuYXRpbmcoUmVuZGVyVGV4dCogdAogICAgIEFTU0VSVChwb3Mg
LSBsYXN0U3BhY2UgLSBwcmVmaXhMZW5ndGggPj0gbWluaW11bVN1ZmZpeExlbmd0aCk7CiAKICNp
ZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+IGZh
bGxiYWNrRm9udHM7CisgICAgSGFzaFNldDxjb25zdCBGb250Kj4gZmFsbGJhY2tGb250czsKICAg
ICBmbG9hdCBwcmVmaXhXaWR0aCA9IGh5cGhlbldpZHRoICsgdGV4dFdpZHRoKHRleHQsIGxhc3RT
cGFjZSwgcHJlZml4TGVuZ3RoLCBmb250LCB4UG9zLCBpc0ZpeGVkUGl0Y2gsIGNvbGxhcHNlV2hp
dGVTcGFjZSwgZmFsbGJhY2tGb250cykgKyBsYXN0U3BhY2VXb3JkU3BhY2luZzsKICAgICBBU1NF
UlQoeFBvcyArIHByZWZpeFdpZHRoIDw9IGF2YWlsYWJsZVdpZHRoKTsKICNlbHNlCkBAIC02NTYs
NyArNjU2LDcgQEAgaW5saW5lIGJvb2wgQnJlYWtpbmdDb250ZXh0OjpoYW5kbGVUZXh0KAogCiAg
ICAgLy8gTm9uLXplcm8gb25seSB3aGVuIGtlcm5pbmcgaXMgZW5hYmxlZCBhbmQgVGV4dExheW91
dCBpc24ndCB1c2VkLCBpbiB3aGljaCBjYXNlIHdlIG1lYXN1cmUKICAgICAvLyB3b3JkcyB3aXRo
IHRoZWlyIHRyYWlsaW5nIHNwYWNlLCB0aGVuIHN1YnRyYWN0IGl0cyB3aWR0aC4KLSAgICBIYXNo
U2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4gZmFsbGJhY2tGb250czsKKyAgICBIYXNoU2V0PGNv
bnN0IEZvbnQqPiBmYWxsYmFja0ZvbnRzOwogICAgIGZsb2F0IHdvcmRUcmFpbGluZ1NwYWNlV2lk
dGggPSAoZm9udC50eXBlc2V0dGluZ0ZlYXR1cmVzKCkgJiBLZXJuaW5nKSAmJiAhdGV4dExheW91
dCA/IGZvbnQud2lkdGgoUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4oJnJlbmRlclRleHQs
IGZvbnQsICZzcGFjZSwgMSwgc3R5bGUpLCAmZmFsbGJhY2tGb250cykgKyB3b3JkU3BhY2luZyA6
IDA7CiAKICAgICBVQ2hhciBsYXN0Q2hhcmFjdGVyID0gbV9yZW5kZXJUZXh0SW5mby5tX2xpbmVC
cmVha0l0ZXJhdG9yLmxhc3RDaGFyYWN0ZXIoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwCShyZXZp
c2lvbiAxNzg1MTApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1h
dGhNTE9wZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMzMyw3ICsxMzMzLDcgQEAgdm9p
ZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6cmVzZXRTdHJldGNoUwogCiBGbG9hdFJlY3QgUmVuZGVy
TWF0aE1MT3BlcmF0b3I6OmJvdW5kc0ZvckdseXBoKGNvbnN0IEdseXBoRGF0YSYgZGF0YSkgY29u
c3QKIHsKLSAgICByZXR1cm4gZGF0YS5mb250RGF0YS0+Ym91bmRzRm9yR2x5cGgoZGF0YS5nbHlw
aCk7CisgICAgcmV0dXJuIGRhdGEuZm9udC0+Ym91bmRzRm9yR2x5cGgoZGF0YS5nbHlwaCk7CiB9
CiAKIGZsb2F0IFJlbmRlck1hdGhNTE9wZXJhdG9yOjpoZWlnaHRGb3JHbHlwaChjb25zdCBHbHlw
aERhdGEmIGRhdGEpIGNvbnN0CkBAIC0xMzQzLDcgKzEzNDMsNyBAQCBmbG9hdCBSZW5kZXJNYXRo
TUxPcGVyYXRvcjo6aGVpZ2h0Rm9yR2x5CiAKIGZsb2F0IFJlbmRlck1hdGhNTE9wZXJhdG9yOjph
ZHZhbmNlRm9yR2x5cGgoY29uc3QgR2x5cGhEYXRhJiBkYXRhKSBjb25zdAogewotICAgIHJldHVy
biBkYXRhLmZvbnREYXRhLT53aWR0aEZvckdseXBoKGRhdGEuZ2x5cGgpOworICAgIHJldHVybiBk
YXRhLmZvbnQtPndpZHRoRm9yR2x5cGgoZGF0YS5nbHlwaCk7CiB9CiAKIHZvaWQgUmVuZGVyTWF0
aE1MT3BlcmF0b3I6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCkKQEAgLTE1MjEsMTEg
KzE1MjEsMTEgQEAgYm9vbCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Z2V0R2x5cGhBc3NlbQogICAg
IGlmICghYm90dG9tLmdseXBoKQogICAgICAgICBib3R0b20uZ2x5cGggPSBleHRlbnNpb24uZ2x5
cGg7CiAKLSAgICB0b3AuZm9udERhdGEgPSAmc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlG
b250RGF0YSgpOwotICAgIGV4dGVuc2lvbi5mb250RGF0YSA9IHRvcC5mb250RGF0YTsKLSAgICBi
b3R0b20uZm9udERhdGEgPSB0b3AuZm9udERhdGE7CisgICAgdG9wLmZvbnQgPSAmc3R5bGUoKS5m
b250Q2FzY2FkZSgpLnByaW1hcnlGb250KCk7CisgICAgZXh0ZW5zaW9uLmZvbnQgPSB0b3AuZm9u
dDsKKyAgICBib3R0b20uZm9udCA9IHRvcC5mb250OwogICAgIGlmIChtaWRkbGUuZ2x5cGgpCi0g
ICAgICAgIG1pZGRsZS5mb250RGF0YSA9IHRvcC5mb250RGF0YTsKKyAgICAgICAgbWlkZGxlLmZv
bnQgPSB0b3AuZm9udDsKIAogICAgIHN0cmV0Y2h5RGF0YS5zZXRHbHlwaEFzc2VtYmx5TW9kZSh0
b3AsIGV4dGVuc2lvbiwgYm90dG9tLCBtaWRkbGUpOwogCkBAIC0xNTM4LDI0ICsxNTM4LDI0IEBA
IFJlbmRlck1hdGhNTE9wZXJhdG9yOjpTdHJldGNoeURhdGEgUmVuZGUKIAogICAgIEFTU0VSVCht
X2lzVmVydGljYWwgJiYgaXNMYXJnZU9wZXJhdG9ySW5EaXNwbGF5U3R5bGUoKSk7CiAKLSAgICBj
b25zdCBhdXRvJiBwcmltYXJ5Rm9udERhdGEgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFy
eUZvbnREYXRhKCk7CisgICAgY29uc3QgYXV0byYgcHJpbWFyeUZvbnQgPSBzdHlsZSgpLmZvbnRD
YXNjYWRlKCkucHJpbWFyeUZvbnQoKTsKICAgICBHbHlwaERhdGEgYmFzZUdseXBoID0gc3R5bGUo
KS5mb250Q2FzY2FkZSgpLmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIsICFzdHlsZSgp
LmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSk7Ci0gICAgaWYgKCFwcmltYXJ5Rm9udERhdGEubWF0
aERhdGEoKSB8fCBiYXNlR2x5cGguZm9udERhdGEgIT0gJnByaW1hcnlGb250RGF0YSkKKyAgICBp
ZiAoIXByaW1hcnlGb250Lm1hdGhEYXRhKCkgfHwgYmFzZUdseXBoLmZvbnQgIT0gJnByaW1hcnlG
b250KQogICAgICAgICByZXR1cm4gZGF0YTsKIAogICAgIFZlY3RvcjxHbHlwaD4gc2l6ZVZhcmlh
bnRzOwogICAgIFZlY3RvcjxPcGVuVHlwZU1hdGhEYXRhOjpBc3NlbWJseVBhcnQ+IGFzc2VtYmx5
UGFydHM7CiAKICAgICAvLyBUaGUgdmFsdWUgb2YgZGlzcGxheU9wZXJhdG9yTWluSGVpZ2h0IGlz
IHNvbWV0aW1lcyB0b28gc21hbGwsIHNvIHdlIGVuc3VyZSB0aGF0IGl0IGlzIGF0IGxlYXN0IFxz
cXJ0ezJ9IHRpbWVzIHRoZSBzaXplIG9mIHRoZSBiYXNlIGdseXBoLgotICAgIGZsb2F0IGRpc3Bs
YXlPcGVyYXRvck1pbkhlaWdodCA9IHN0ZDo6bWF4KGJhc2VHbHlwaC5mb250RGF0YS0+Ym91bmRz
Rm9yR2x5cGgoYmFzZUdseXBoLmdseXBoKS5oZWlnaHQoKSAqIHNxcnRPZlR3b0Zsb2F0LCBwcmlt
YXJ5Rm9udERhdGEubWF0aERhdGEoKS0+Z2V0TWF0aENvbnN0YW50KHByaW1hcnlGb250RGF0YSwg
T3BlblR5cGVNYXRoRGF0YTo6RGlzcGxheU9wZXJhdG9yTWluSGVpZ2h0KSk7CisgICAgZmxvYXQg
ZGlzcGxheU9wZXJhdG9yTWluSGVpZ2h0ID0gc3RkOjptYXgoYmFzZUdseXBoLmZvbnQtPmJvdW5k
c0ZvckdseXBoKGJhc2VHbHlwaC5nbHlwaCkuaGVpZ2h0KCkgKiBzcXJ0T2ZUd29GbG9hdCwgcHJp
bWFyeUZvbnQubWF0aERhdGEoKS0+Z2V0TWF0aENvbnN0YW50KHByaW1hcnlGb250LCBPcGVuVHlw
ZU1hdGhEYXRhOjpEaXNwbGF5T3BlcmF0b3JNaW5IZWlnaHQpKTsKIAotICAgIHByaW1hcnlGb250
RGF0YS5tYXRoRGF0YSgpLT5nZXRNYXRoVmFyaWFudHMoYmFzZUdseXBoLmdseXBoLCB0cnVlLCBz
aXplVmFyaWFudHMsIGFzc2VtYmx5UGFydHMpOworICAgIHByaW1hcnlGb250Lm1hdGhEYXRhKCkt
PmdldE1hdGhWYXJpYW50cyhiYXNlR2x5cGguZ2x5cGgsIHRydWUsIHNpemVWYXJpYW50cywgYXNz
ZW1ibHlQYXJ0cyk7CiAKICAgICAvLyBXZSBjaG9vc2UgdGhlIGZpcnN0IHNpemUgdmFyaWFudCB0
aGF0IGlzIGxhcmdlciB0aGFuIHRoZSBleHBlY3RlZCBkaXNwbGF5T3BlcmF0b3JNaW5IZWlnaHQg
YW5kIG90aGVyd2lzZSBmYWxsYmFjayB0byB0aGUgbGFyZ2VzdCB2YXJpYW50LgogICAgIGZvciAo
YXV0byYgdmFyaWFudCA6IHNpemVWYXJpYW50cykgewogICAgICAgICBHbHlwaERhdGEgc2l6ZVZh
cmlhbnQ7CiAgICAgICAgIHNpemVWYXJpYW50LmdseXBoID0gdmFyaWFudDsKLSAgICAgICAgc2l6
ZVZhcmlhbnQuZm9udERhdGEgPSAmcHJpbWFyeUZvbnREYXRhOworICAgICAgICBzaXplVmFyaWFu
dC5mb250ID0gJnByaW1hcnlGb250OwogICAgICAgICBkYXRhLnNldFNpemVWYXJpYW50TW9kZShz
aXplVmFyaWFudCk7CiAgICAgICAgIGlmIChib3VuZHNGb3JHbHlwaChzaXplVmFyaWFudCkuaGVp
Z2h0KCkgPj0gZGlzcGxheU9wZXJhdG9yTWluSGVpZ2h0KQogICAgICAgICAgICAgcmV0dXJuIGRh
dGE7CkBAIC0xNTcwLDE4ICsxNTcwLDE4IEBAIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpTdHJldGNo
eURhdGEgUmVuZGUKICAgICBTdHJldGNoeURhdGEgZGF0YTsKICAgICBTdHJldGNoeURhdGEgYXNz
ZW1ibHlEYXRhOwogCi0gICAgY29uc3QgYXV0byYgcHJpbWFyeUZvbnREYXRhID0gc3R5bGUoKS5m
b250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpOworICAgIGNvbnN0IGF1dG8mIHByaW1hcnlG
b250ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCk7CiAgICAgR2x5cGhEYXRh
IGJhc2VHbHlwaCA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIo
Y2hhcmFjdGVyLCAhc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpOwogICAgIAotICAg
IGlmIChwcmltYXJ5Rm9udERhdGEubWF0aERhdGEoKSAmJiBiYXNlR2x5cGguZm9udERhdGEgPT0g
JnByaW1hcnlGb250RGF0YSkgeworICAgIGlmIChwcmltYXJ5Rm9udC5tYXRoRGF0YSgpICYmIGJh
c2VHbHlwaC5mb250ID09ICZwcmltYXJ5Rm9udCkgewogICAgICAgICBWZWN0b3I8R2x5cGg+IHNp
emVWYXJpYW50czsKICAgICAgICAgVmVjdG9yPE9wZW5UeXBlTWF0aERhdGE6OkFzc2VtYmx5UGFy
dD4gYXNzZW1ibHlQYXJ0czsKLSAgICAgICAgcHJpbWFyeUZvbnREYXRhLm1hdGhEYXRhKCktPmdl
dE1hdGhWYXJpYW50cyhiYXNlR2x5cGguZ2x5cGgsIG1faXNWZXJ0aWNhbCwgc2l6ZVZhcmlhbnRz
LCBhc3NlbWJseVBhcnRzKTsKKyAgICAgICAgcHJpbWFyeUZvbnQubWF0aERhdGEoKS0+Z2V0TWF0
aFZhcmlhbnRzKGJhc2VHbHlwaC5nbHlwaCwgbV9pc1ZlcnRpY2FsLCBzaXplVmFyaWFudHMsIGFz
c2VtYmx5UGFydHMpOwogICAgICAgICAvLyBXZSB2ZXJpZnkgdGhlIHNpemUgdmFyaWFudHMuCiAg
ICAgICAgIGZvciAoYXV0byYgdmFyaWFudCA6IHNpemVWYXJpYW50cykgewogICAgICAgICAgICAg
R2x5cGhEYXRhIHNpemVWYXJpYW50OwogICAgICAgICAgICAgc2l6ZVZhcmlhbnQuZ2x5cGggPSB2
YXJpYW50OwotICAgICAgICAgICAgc2l6ZVZhcmlhbnQuZm9udERhdGEgPSAmcHJpbWFyeUZvbnRE
YXRhOworICAgICAgICAgICAgc2l6ZVZhcmlhbnQuZm9udCA9ICZwcmltYXJ5Rm9udDsKICAgICAg
ICAgICAgIGlmIChtYXhpbXVtR2x5cGhXaWR0aCkKICAgICAgICAgICAgICAgICAqbWF4aW11bUds
eXBoV2lkdGggPSBzdGQ6Om1heCgqbWF4aW11bUdseXBoV2lkdGgsIGFkdmFuY2VGb3JHbHlwaChz
aXplVmFyaWFudCkpOwogICAgICAgICAgICAgZWxzZSB7CkBAIC0xODAxLDggKzE4MDEsOCBAQCBM
YXlvdXRSZWN0IFJlbmRlck1hdGhNTE9wZXJhdG9yOjpwYWludEdsCiAgICAgaW5mby5jb250ZXh0
LT5jbGlwKGNsaXBCb3VuZHMpOwogCiAgICAgR2x5cGhCdWZmZXIgYnVmZmVyOwotICAgIGJ1ZmZl
ci5hZGQoZGF0YS5nbHlwaCwgZGF0YS5mb250RGF0YSwgYWR2YW5jZUZvckdseXBoKGRhdGEpKTsK
LSAgICBpbmZvLmNvbnRleHQtPmRyYXdHbHlwaHMoc3R5bGUoKS5mb250Q2FzY2FkZSgpLCAqZGF0
YS5mb250RGF0YSwgYnVmZmVyLCAwLCAxLCBvcmlnaW4pOworICAgIGJ1ZmZlci5hZGQoZGF0YS5n
bHlwaCwgZGF0YS5mb250LCBhZHZhbmNlRm9yR2x5cGgoZGF0YSkpOworICAgIGluZm8uY29udGV4
dC0+ZHJhd0dseXBocyhzdHlsZSgpLmZvbnRDYXNjYWRlKCksICpkYXRhLmZvbnQsIGJ1ZmZlciwg
MCwgMSwgb3JpZ2luKTsKIAogICAgIHJldHVybiBnbHlwaFBhaW50UmVjdDsKIH0KQEAgLTE4OTQs
MTEgKzE4OTQsMTEgQEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6cGFpbnQoUGFpbnRJbgog
ICAgIGlmIChtX3N0cmV0Y2h5RGF0YS5tb2RlKCkgPT0gRHJhd1NpemVWYXJpYW50KSB7CiAgICAg
ICAgIEFTU0VSVChtX3N0cmV0Y2h5RGF0YS52YXJpYW50KCkuZ2x5cGgpOwogICAgICAgICBHbHlw
aEJ1ZmZlciBidWZmZXI7Ci0gICAgICAgIGJ1ZmZlci5hZGQobV9zdHJldGNoeURhdGEudmFyaWFu
dCgpLmdseXBoLCBtX3N0cmV0Y2h5RGF0YS52YXJpYW50KCkuZm9udERhdGEsIGFkdmFuY2VGb3JH
bHlwaChtX3N0cmV0Y2h5RGF0YS52YXJpYW50KCkpKTsKKyAgICAgICAgYnVmZmVyLmFkZChtX3N0
cmV0Y2h5RGF0YS52YXJpYW50KCkuZ2x5cGgsIG1fc3RyZXRjaHlEYXRhLnZhcmlhbnQoKS5mb250
LCBhZHZhbmNlRm9yR2x5cGgobV9zdHJldGNoeURhdGEudmFyaWFudCgpKSk7CiAgICAgICAgIExh
eW91dFBvaW50IG9wZXJhdG9yVG9wTGVmdCA9IGNlaWxlZEludFBvaW50KHBhaW50T2Zmc2V0ICsg
bG9jYXRpb24oKSk7CiAgICAgICAgIEZsb2F0UmVjdCBnbHlwaEJvdW5kcyA9IGJvdW5kc0Zvckds
eXBoKG1fc3RyZXRjaHlEYXRhLnZhcmlhbnQoKSk7CiAgICAgICAgIExheW91dFBvaW50IG9wZXJh
dG9yT3JpZ2luKG9wZXJhdG9yVG9wTGVmdC54KCksIG9wZXJhdG9yVG9wTGVmdC55KCkgLSBnbHlw
aEJvdW5kcy55KCkpOwotICAgICAgICBpbmZvLmNvbnRleHQtPmRyYXdHbHlwaHMoc3R5bGUoKS5m
b250Q2FzY2FkZSgpLCAqbV9zdHJldGNoeURhdGEudmFyaWFudCgpLmZvbnREYXRhLCBidWZmZXIs
IDAsIDEsIG9wZXJhdG9yT3JpZ2luKTsKKyAgICAgICAgaW5mby5jb250ZXh0LT5kcmF3R2x5cGhz
KHN0eWxlKCkuZm9udENhc2NhZGUoKSwgKm1fc3RyZXRjaHlEYXRhLnZhcmlhbnQoKS5mb250LCBi
dWZmZXIsIDAsIDEsIG9wZXJhdG9yT3JpZ2luKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApA
QCAtMTk4MCw4ICsxOTgwLDggQEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6cGFpbnRDaGls
ZHJlbgogCiBMYXlvdXRVbml0IFJlbmRlck1hdGhNTE9wZXJhdG9yOjp0cmFpbGluZ1NwYWNlRXJy
b3IoKQogewotICAgIGNvbnN0IGF1dG8mIHByaW1hcnlGb250RGF0YSA9IHN0eWxlKCkuZm9udENh
c2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKTsKLSAgICBpZiAoIXByaW1hcnlGb250RGF0YS5tYXRo
RGF0YSgpKQorICAgIGNvbnN0IGF1dG8mIHByaW1hcnlGb250ID0gc3R5bGUoKS5mb250Q2FzY2Fk
ZSgpLnByaW1hcnlGb250KCk7CisgICAgaWYgKCFwcmltYXJ5Rm9udC5tYXRoRGF0YSgpKQogICAg
ICAgICByZXR1cm4gMDsKIAogICAgIC8vIEZvciBPcGVuVHlwZSBNQVRIIGZvbnQsIHRoZSBsYXlv
dXQgaXMgYmFzZWQgb24gUmVuZGVyTWF0aE9wZXJhdG9yIGZvciB3aGljaCB0aGUgcHJlZmVycmVk
IHdpZHRoIGlzIHNvbWV0aW1lcyBvdmVyZXN0aW1hdGVkIChidWcgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMDMyNikuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5oCShyZXZpc2lv
biAxNzg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhN
TE9wZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDExICsyOCwxMSBAQAogCiAjaWYgRU5B
QkxFKE1BVEhNTCkKIAorI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJHbHlwaFBhZ2UuaCIK
ICNpbmNsdWRlICJNYXRoTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiT3BlblR5cGVNYXRoRGF0YS5o
IgogI2luY2x1ZGUgIlJlbmRlck1hdGhNTFRva2VuLmgiCi0jaW5jbHVkZSAiU2ltcGxlRm9udERh
dGEuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJhZGljYWxPcGVyYXRvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSYWRpY2FsT3Bl
cmF0b3IuY3BwCShyZXZpc2lvbiAxNzg1MTApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
bWF0aG1sL1JlbmRlck1hdGhNTFJhZGljYWxPcGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTYzLDcgKzYzLDcgQEAgUmVuZGVyTWF0aE1MUmFkaWNhbE9wZXJhdG9yOjpSZW5kZXJNYXRoTQog
CiB2b2lkIFJlbmRlck1hdGhNTFJhZGljYWxPcGVyYXRvcjo6c3RyZXRjaFRvKExheW91dFVuaXQg
aGVpZ2h0QWJvdmVCYXNlbGluZSwgTGF5b3V0VW5pdCBkZXB0aEJlbG93QmFzZWxpbmUpCiB7Ci0g
ICAgaWYgKCFzdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkubWF0aERhdGEo
KSkgeworICAgIGlmICghc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCkubWF0aERh
dGEoKSkgewogICAgICAgICAvLyBJZiB3ZSBkbyBub3QgaGF2ZSBhbiBPcGVuVHlwZSBNQVRIIGZv
bnQsIHdlIGFsd2F5cyBtYWtlIHRoZSByYWRpY2FsIGRlcHRoIGEgYml0IGxhcmdlciB0aGFuIHRo
ZSB0YXJnZXQuCiAgICAgICAgIGRlcHRoQmVsb3dCYXNlbGluZSArPSBnUmFkaWNhbEJvdHRvbVBv
aW50TG93ZXI7CiAgICAgfQpAQCAtODMsNyArODMsNyBAQCB2b2lkIFJlbmRlck1hdGhNTFJhZGlj
YWxPcGVyYXRvcjo6Y29tcHV0CiB7CiAgICAgQVNTRVJUKHByZWZlcnJlZExvZ2ljYWxXaWR0aHNE
aXJ0eSgpKTsKIAotICAgIGlmIChzdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRh
KCkubWF0aERhdGEoKSkgeworICAgIGlmIChzdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZv
bnQoKS5tYXRoRGF0YSgpKSB7CiAgICAgICAgIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpjb21wdXRl
UHJlZmVycmVkTG9naWNhbFdpZHRocygpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtOTYs
NyArOTYsNyBAQCB2b2lkIFJlbmRlck1hdGhNTFJhZGljYWxPcGVyYXRvcjo6Y29tcHV0CiAKIHZv
aWQgUmVuZGVyTWF0aE1MUmFkaWNhbE9wZXJhdG9yOjpjb21wdXRlTG9naWNhbEhlaWdodChMYXlv
dXRVbml0IGxvZ2ljYWxIZWlnaHQsIExheW91dFVuaXQgbG9naWNhbFRvcCwgTG9naWNhbEV4dGVu
dENvbXB1dGVkVmFsdWVzJiBjb21wdXRlZFZhbHVlcykgY29uc3QKIHsKLSAgICBpZiAoc3R5bGUo
KS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLm1hdGhEYXRhKCkpIHsKKyAgICBpZiAo
c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCkubWF0aERhdGEoKSkgewogICAgICAg
ICBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Y29tcHV0ZUxvZ2ljYWxIZWlnaHQobG9naWNhbEhlaWdo
dCwgbG9naWNhbFRvcCwgY29tcHV0ZWRWYWx1ZXMpOwogICAgICAgICByZXR1cm47CiAgICAgfQpA
QCAtMTExLDcgKzExMSw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MUmFkaWNhbE9wZXJhdG9yOjpwYWlu
dCgKICAgICBpZiAoaW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkgfHwgaW5mby5waGFz
ZSAhPSBQYWludFBoYXNlRm9yZWdyb3VuZCB8fCBzdHlsZSgpLnZpc2liaWxpdHkoKSAhPSBWSVNJ
QkxFKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoc3R5bGUoKS5mb250Q2FzY2FkZSgpLnBy
aW1hcnlGb250RGF0YSgpLm1hdGhEYXRhKCkpIHsKKyAgICBpZiAoc3R5bGUoKS5mb250Q2FzY2Fk
ZSgpLnByaW1hcnlGb250KCkubWF0aERhdGEoKSkgewogICAgICAgICBSZW5kZXJNYXRoTUxPcGVy
YXRvcjo6cGFpbnQoaW5mbywgcGFpbnRPZmZzZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1h
dGhNTFJvb3QuY3BwCShyZXZpc2lvbiAxNzg1MTApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDgsMTcg
KzIwOCwxNyBAQCB2b2lkIFJlbmRlck1hdGhNTFJvb3Q6OnVwZGF0ZVN0eWxlKCkKICAgICBMYXlv
dXRVbml0IGtlcm5BZnRlckRlZ3JlZSA9IC0xMCAqIHN0eWxlKCkuZm9udENhc2NhZGUoKS5zaXpl
KCkgLyAxODsKICAgICBtX2RlZ3JlZUJvdHRvbVJhaXNlUGVyY2VudCA9IDAuNmY7CiAKLSAgICBj
b25zdCBhdXRvJiBwcmltYXJ5Rm9udERhdGEgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFy
eUZvbnREYXRhKCk7Ci0gICAgaWYgKGF1dG8qIG1hdGhEYXRhID0gc3R5bGUoKS5mb250Q2FzY2Fk
ZSgpLnByaW1hcnlGb250RGF0YSgpLm1hdGhEYXRhKCkpIHsKKyAgICBjb25zdCBhdXRvJiBwcmlt
YXJ5Rm9udCA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpOworICAgIGlmIChh
dXRvKiBtYXRoRGF0YSA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpLm1hdGhE
YXRhKCkpIHsKICAgICAgICAgLy8gRklYTUU6IG1fdmVydGljYWxHYXAgc2hvdWxkIHVzZSBSYWRp
Y2FsRGlzcGxheVN0eWxlVmVydGljYWwgaW4gZGlzcGxheSBtb2RlIChodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE4NzM3KS4KLSAgICAgICAgbV92ZXJ0aWNhbEdhcCA9
IG1hdGhEYXRhLT5nZXRNYXRoQ29uc3RhbnQocHJpbWFyeUZvbnREYXRhLCBPcGVuVHlwZU1hdGhE
YXRhOjpSYWRpY2FsVmVydGljYWxHYXApOwotICAgICAgICBtX3J1bGVUaGlja25lc3MgPSBtYXRo
RGF0YS0+Z2V0TWF0aENvbnN0YW50KHByaW1hcnlGb250RGF0YSwgT3BlblR5cGVNYXRoRGF0YTo6
UmFkaWNhbFJ1bGVUaGlja25lc3MpOwotICAgICAgICBtX2V4dHJhQXNjZW5kZXIgPSBtYXRoRGF0
YS0+Z2V0TWF0aENvbnN0YW50KHByaW1hcnlGb250RGF0YSwgT3BlblR5cGVNYXRoRGF0YTo6UmFk
aWNhbEV4dHJhQXNjZW5kZXIpOworICAgICAgICBtX3ZlcnRpY2FsR2FwID0gbWF0aERhdGEtPmdl
dE1hdGhDb25zdGFudChwcmltYXJ5Rm9udCwgT3BlblR5cGVNYXRoRGF0YTo6UmFkaWNhbFZlcnRp
Y2FsR2FwKTsKKyAgICAgICAgbV9ydWxlVGhpY2tuZXNzID0gbWF0aERhdGEtPmdldE1hdGhDb25z
dGFudChwcmltYXJ5Rm9udCwgT3BlblR5cGVNYXRoRGF0YTo6UmFkaWNhbFJ1bGVUaGlja25lc3Mp
OworICAgICAgICBtX2V4dHJhQXNjZW5kZXIgPSBtYXRoRGF0YS0+Z2V0TWF0aENvbnN0YW50KHBy
aW1hcnlGb250LCBPcGVuVHlwZU1hdGhEYXRhOjpSYWRpY2FsRXh0cmFBc2NlbmRlcik7CiAKICAg
ICAgICAgaWYgKCFpc1JlbmRlck1hdGhNTFNxdWFyZVJvb3QoKSkgewotICAgICAgICAgICAga2Vy
bkJlZm9yZURlZ3JlZSA9IG1hdGhEYXRhLT5nZXRNYXRoQ29uc3RhbnQocHJpbWFyeUZvbnREYXRh
LCBPcGVuVHlwZU1hdGhEYXRhOjpSYWRpY2FsS2VybkJlZm9yZURlZ3JlZSk7Ci0gICAgICAgICAg
ICBrZXJuQWZ0ZXJEZWdyZWUgPSBtYXRoRGF0YS0+Z2V0TWF0aENvbnN0YW50KHByaW1hcnlGb250
RGF0YSwgT3BlblR5cGVNYXRoRGF0YTo6UmFkaWNhbEtlcm5BZnRlckRlZ3JlZSk7Ci0gICAgICAg
ICAgICBtX2RlZ3JlZUJvdHRvbVJhaXNlUGVyY2VudCA9IG1hdGhEYXRhLT5nZXRNYXRoQ29uc3Rh
bnQocHJpbWFyeUZvbnREYXRhLCBPcGVuVHlwZU1hdGhEYXRhOjpSYWRpY2FsRGVncmVlQm90dG9t
UmFpc2VQZXJjZW50KTsKKyAgICAgICAgICAgIGtlcm5CZWZvcmVEZWdyZWUgPSBtYXRoRGF0YS0+
Z2V0TWF0aENvbnN0YW50KHByaW1hcnlGb250LCBPcGVuVHlwZU1hdGhEYXRhOjpSYWRpY2FsS2Vy
bkJlZm9yZURlZ3JlZSk7CisgICAgICAgICAgICBrZXJuQWZ0ZXJEZWdyZWUgPSBtYXRoRGF0YS0+
Z2V0TWF0aENvbnN0YW50KHByaW1hcnlGb250LCBPcGVuVHlwZU1hdGhEYXRhOjpSYWRpY2FsS2Vy
bkFmdGVyRGVncmVlKTsKKyAgICAgICAgICAgIG1fZGVncmVlQm90dG9tUmFpc2VQZXJjZW50ID0g
bWF0aERhdGEtPmdldE1hdGhDb25zdGFudChwcmltYXJ5Rm9udCwgT3BlblR5cGVNYXRoRGF0YTo6
UmFkaWNhbERlZ3JlZUJvdHRvbVJhaXNlUGVyY2VudCk7CiAgICAgICAgIH0KICAgICB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAko
cmV2aXNpb24gMTc4NTEwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRl
clN0eWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4NCw3ICsxMTg0LDcgQEAgY29uc3QgQXRv
bWljU3RyaW5nJiBSZW5kZXJTdHlsZTo6aHlwaGVuUwogICAgIC8vIEZJWE1FOiBUaGlzIHNob3Vs
ZCBkZXBlbmQgb24gbG9jYWxlLgogICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChB
dG9taWNTdHJpbmcsIGh5cGhlbk1pbnVzU3RyaW5nLCAoJmh5cGhlbk1pbnVzLCAxKSk7CiAgICAg
REVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgaHlwaGVuU3RyaW5n
LCAoJmh5cGhlbiwgMSkpOwotICAgIHJldHVybiBmb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0
YSgpLmdseXBoRm9yQ2hhcmFjdGVyKGh5cGhlbikgPyBoeXBoZW5TdHJpbmcgOiBoeXBoZW5NaW51
c1N0cmluZzsKKyAgICByZXR1cm4gZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpLmdseXBoRm9y
Q2hhcmFjdGVyKGh5cGhlbikgPyBoeXBoZW5TdHJpbmcgOiBoeXBoZW5NaW51c1N0cmluZzsKIH0K
IAogY29uc3QgQXRvbWljU3RyaW5nJiBSZW5kZXJTdHlsZTo6dGV4dEVtcGhhc2lzTWFya1N0cmlu
ZygpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Rl
eHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHVGV4dC5jcHAJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAK
ICNpbmNsdWRlICJSZW5kZXJTVkdUZXh0LmgiCiAKICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNp
bmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAi
SGl0VGVzdFJlcXVlc3QuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCkBAIC00NSw3ICs0
Niw2IEBACiAjaW5jbHVkZSAiU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuaCIKICNpbmNsdWRl
ICJTVkdUcmFuc2Zvcm1MaXN0LmgiCiAjaW5jbHVkZSAiU1ZHVVJJUmVmZXJlbmNlLmgiCi0jaW5j
bHVkZSAiU2ltcGxlRm9udERhdGEuaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1TdGF0ZS5oIgogI2lu
Y2x1ZGUgIlZpc2libGVQb3NpdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9TdGFja1N0YXRzLmg+Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJv
eC5jcHAJKHJldmlzaW9uIDE3ODUxMCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHSW5saW5lVGV4dEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxOSw3ICs0MTksNyBAQCBU
ZXh0UnVuIFNWR0lubGluZVRleHRCb3g6OmNvbnN0cnVjdFRleHRSCiAgICAgICAgICAgICAgICAg
LCBkaXJlY3Rpb24oKQogICAgICAgICAgICAgICAgICwgZGlyT3ZlcnJpZGUoKSB8fCBzdHlsZS0+
cnRsT3JkZXJpbmcoKSA9PSBWaXN1YWxPcmRlciAvKiBkaXJlY3Rpb25hbE92ZXJyaWRlICovKTsK
IAotICAgIGlmIChzdHlsZS0+Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5pc1NWR0Zv
bnQoKSkKKyAgICBpZiAoc3R5bGUtPmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKS5pc1NWR0Zv
bnQoKSkKICAgICAgICAgcnVuLnNldFJlbmRlcmluZ0NvbnRleHQoU1ZHVGV4dFJ1blJlbmRlcmlu
Z0NvbnRleHQ6OmNyZWF0ZShyZW5kZXJlcigpKSk7CiAKICAgICBydW4uZGlzYWJsZVJvdW5kaW5n
SGFja3MoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91
dEVuZ2luZVNwYWNpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcuY3BwCShyZXZpc2lvbiAxNzg1MTApCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5n
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTYgKzQxLDE2IEBAIFNWR1RleHRMYXlvdXRFbmdp
bmVTcGFjaW5nOjpTVkdUZXh0TGF5b3UKIGZsb2F0IFNWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5n
OjpjYWxjdWxhdGVTVkdLZXJuaW5nKGJvb2wgaXNWZXJ0aWNhbFRleHQsIGNvbnN0IFNWR1RleHRN
ZXRyaWNzOjpHbHlwaCYgY3VycmVudEdseXBoKQogewogI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0g
ICAgY29uc3QgU2ltcGxlRm9udERhdGEmIGZvbnREYXRhID0gbV9mb250LnByaW1hcnlGb250RGF0
YSgpOwotICAgIGlmICghZm9udERhdGEuaXNTVkdGb250KCkpIHsKKyAgICBjb25zdCBGb250JiBm
b250ID0gbV9mb250LnByaW1hcnlGb250KCk7CisgICAgaWYgKCFmb250LmlzU1ZHRm9udCgpKSB7
CiAgICAgICAgIG1fbGFzdEdseXBoLmlzVmFsaWQgPSBmYWxzZTsKICAgICAgICAgcmV0dXJuIDA7
CiAgICAgfQogCi0gICAgQVNTRVJUKGZvbnREYXRhLmlzQ3VzdG9tRm9udCgpKTsKLSAgICBBU1NF
UlQoZm9udERhdGEuaXNTVkdGb250KCkpOworICAgIEFTU0VSVChmb250LmlzQ3VzdG9tRm9udCgp
KTsKKyAgICBBU1NFUlQoZm9udC5pc1NWR0ZvbnQoKSk7CiAKLSAgICBhdXRvKiBzdmdGb250RGF0
YSA9IHN0YXRpY19jYXN0PGNvbnN0IFNWR0ZvbnREYXRhKj4oZm9udERhdGEuc3ZnRGF0YSgpKTsK
KyAgICBhdXRvKiBzdmdGb250RGF0YSA9IHN0YXRpY19jYXN0PGNvbnN0IFNWR0ZvbnREYXRhKj4o
Zm9udC5zdmdEYXRhKCkpOwogICAgIFNWR0ZvbnRGYWNlRWxlbWVudCogc3ZnRm9udEZhY2UgPSBz
dmdGb250RGF0YS0+c3ZnRm9udEZhY2VFbGVtZW50KCk7CiAgICAgQVNTRVJUKHN2Z0ZvbnRGYWNl
KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0
cmljcy5jcHAJKHJldmlzaW9uIDE3ODUxMCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHVGV4dE1ldHJpY3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCw3ICs3MCw3IEBAIFRl
eHRSdW4gU1ZHVGV4dE1ldHJpY3M6OmNvbnN0cnVjdFRleHRSdW4KICAgICAgICAgICAgICAgICAs
IHN0eWxlLmRpcmVjdGlvbigpCiAgICAgICAgICAgICAgICAgLCBpc092ZXJyaWRlKHN0eWxlLnVu
aWNvZGVCaWRpKCkpIC8qIGRpcmVjdGlvbmFsT3ZlcnJpZGUgKi8pOwogCi0gICAgaWYgKHN0eWxl
LmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkuaXNTVkdGb250KCkpCisgICAgaWYgKHN0
eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKS5pc1NWR0ZvbnQoKSkKICAgICAgICAgcnVu
LnNldFJlbmRlcmluZ0NvbnRleHQoU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZSh0
ZXh0KSk7CiAKICAgICBydW4uZGlzYWJsZVJvdW5kaW5nSGFja3MoKTsKQEAgLTkxLDcgKzkxLDcg
QEAgU1ZHVGV4dE1ldHJpY3MgU1ZHVGV4dE1ldHJpY3M6Om1lYXN1cmVDaAogCiBTVkdUZXh0TWV0
cmljczo6U1ZHVGV4dE1ldHJpY3MoUmVuZGVyU1ZHSW5saW5lVGV4dCYgdGV4dCwgdW5zaWduZWQg
cG9zaXRpb24sIHVuc2lnbmVkIGxlbmd0aCwgZmxvYXQgd2lkdGgsIGNvbnN0IFN0cmluZyYgZ2x5
cGhOYW1lKQogewotICAgIGJvb2wgbmVlZHNDb250ZXh0ID0gdGV4dC5zdHlsZSgpLmZvbnRDYXNj
YWRlKCkucHJpbWFyeUZvbnREYXRhKCkuaXNTVkdGb250KCk7CisgICAgYm9vbCBuZWVkc0NvbnRl
eHQgPSB0ZXh0LnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpLmlzU1ZHRm9udCgp
OwogICAgIGZsb2F0IHNjYWxpbmdGYWN0b3IgPSB0ZXh0LnNjYWxpbmdGYWN0b3IoKTsKICAgICBB
U1NFUlQoc2NhbGluZ0ZhY3Rvcik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuY3BwCShyZXZp
c2lvbiAxNzg1MTApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5S
ZW5kZXJpbmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTggKzM3LDE4IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGlubGluZSBjb25zdCBTVkdGb250RGF0YSog
c3ZnRm9udEFuZEZvbnRGYWNlRWxlbWVudEZvckZvbnREYXRhKGNvbnN0IFNpbXBsZUZvbnREYXRh
KiBmb250RGF0YSwgU1ZHRm9udEZhY2VFbGVtZW50KiYgZm9udEZhY2UsIFNWR0ZvbnRFbGVtZW50
KiYgZm9udCkKK3N0YXRpYyBpbmxpbmUgY29uc3QgU1ZHRm9udERhdGEqIHN2Z0ZvbnRBbmRGb250
RmFjZUVsZW1lbnRGb3JGb250RGF0YShjb25zdCBGb250KiBmb250LCBTVkdGb250RmFjZUVsZW1l
bnQqJiBzdmdGb250RmFjZUVsZW1lbnQsIFNWR0ZvbnRFbGVtZW50KiYgc3ZnRm9udEVsZW1lbnQp
CiB7Ci0gICAgQVNTRVJUKGZvbnREYXRhKTsKLSAgICBBU1NFUlQoZm9udERhdGEtPmlzQ3VzdG9t
Rm9udCgpKTsKLSAgICBBU1NFUlQoZm9udERhdGEtPmlzU1ZHRm9udCgpKTsKKyAgICBBU1NFUlQo
Zm9udCk7CisgICAgQVNTRVJUKGZvbnQtPmlzQ3VzdG9tRm9udCgpKTsKKyAgICBBU1NFUlQoZm9u
dC0+aXNTVkdGb250KCkpOwogCi0gICAgYXV0byogc3ZnRm9udERhdGEgPSBzdGF0aWNfY2FzdDxj
b25zdCBTVkdGb250RGF0YSo+KGZvbnREYXRhLT5zdmdEYXRhKCkpOworICAgIGF1dG8qIHN2Z0Zv
bnREYXRhID0gc3RhdGljX2Nhc3Q8Y29uc3QgU1ZHRm9udERhdGEqPihmb250LT5zdmdEYXRhKCkp
OwogCi0gICAgZm9udEZhY2UgPSBzdmdGb250RGF0YS0+c3ZnRm9udEZhY2VFbGVtZW50KCk7Ci0g
ICAgQVNTRVJUKGZvbnRGYWNlKTsKKyAgICBzdmdGb250RmFjZUVsZW1lbnQgPSBzdmdGb250RGF0
YS0+c3ZnRm9udEZhY2VFbGVtZW50KCk7CisgICAgQVNTRVJUKHN2Z0ZvbnRGYWNlRWxlbWVudCk7
CiAKLSAgICBmb250ID0gZm9udEZhY2UtPmFzc29jaWF0ZWRGb250RWxlbWVudCgpOworICAgIHN2
Z0ZvbnRFbGVtZW50ID0gc3ZnRm9udEZhY2VFbGVtZW50LT5hc3NvY2lhdGVkRm9udEVsZW1lbnQo
KTsKICAgICByZXR1cm4gc3ZnRm9udERhdGE7CiB9CiAKQEAgLTYxLDIxICs2MSwyMSBAQCBmbG9h
dCBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6ZmxvYXRXCiAgICAgcmV0dXJuIGl0LnJ1bldp
ZHRoU29GYXIoKTsKIH0KIAotYm9vbCBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6YXBwbHlT
VkdLZXJuaW5nKGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwgV2lkdGhJdGVyYXRvciYg
aXRlcmF0b3IsIEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZlciwgaW50IGZyb20pIGNvbnN0Citib29s
IFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0OjphcHBseVNWR0tlcm5pbmcoY29uc3QgRm9udCog
Zm9udCwgV2lkdGhJdGVyYXRvciYgaXRlcmF0b3IsIEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZlciwg
aW50IGZyb20pIGNvbnN0CiB7CiAgICAgQVNTRVJUKGdseXBoQnVmZmVyKTsKICAgICBBU1NFUlQo
Z2x5cGhCdWZmZXItPnNpemUoKSA+IDEpOwogICAgIFNWR0ZvbnRFbGVtZW50KiBmb250RWxlbWVu
dCA9IDA7CiAgICAgU1ZHRm9udEZhY2VFbGVtZW50KiBmb250RmFjZUVsZW1lbnQgPSAwOwogCi0g
ICAgc3ZnRm9udEFuZEZvbnRGYWNlRWxlbWVudEZvckZvbnREYXRhKGZvbnREYXRhLCBmb250RmFj
ZUVsZW1lbnQsIGZvbnRFbGVtZW50KTsKKyAgICBzdmdGb250QW5kRm9udEZhY2VFbGVtZW50Rm9y
Rm9udERhdGEoZm9udCwgZm9udEZhY2VFbGVtZW50LCBmb250RWxlbWVudCk7CiAgICAgaWYgKCFm
b250RWxlbWVudCB8fCAhZm9udEZhY2VFbGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICBpZiAoZm9udEVsZW1lbnQtPmhvcml6b250YWxLZXJuaW5nTWFwSXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGZsb2F0IHNjYWxlID0gc2NhbGVFbVRvVW5pdHMoZm9u
dERhdGEtPnBsYXRmb3JtRGF0YSgpLnNpemUoKSwgZm9udEZhY2VFbGVtZW50LT51bml0c1BlckVt
KCkpOworICAgIGZsb2F0IHNjYWxlID0gc2NhbGVFbVRvVW5pdHMoZm9udC0+cGxhdGZvcm1EYXRh
KCkuc2l6ZSgpLCBmb250RmFjZUVsZW1lbnQtPnVuaXRzUGVyRW0oKSk7CiAKICAgICBTdHJpbmcg
bGFzdEdseXBoTmFtZTsKICAgICBTdHJpbmcgbGFzdFVuaWNvZGVTdHJpbmc7CkBAIC0yMDUsNyAr
MjA1LDcgQEAgdm9pZCBTVkdHbHlwaFRvUGF0aFRyYW5zbGF0b3I6OmFkdmFuY2UoKQogICAgICAg
ICB9CiAKICAgICAgICAgKyttX2luZGV4OwotICAgICAgICBpZiAobV9pbmRleCA+PSBtX3N0b3Bw
aW5nUG9pbnQgfHwgIW1fZ2x5cGhCdWZmZXIuZm9udERhdGFBdChtX2luZGV4KS0+aXNTVkdGb250
KCkpCisgICAgICAgIGlmIChtX2luZGV4ID49IG1fc3RvcHBpbmdQb2ludCB8fCAhbV9nbHlwaEJ1
ZmZlci5mb250QXQobV9pbmRleCktPmlzU1ZHRm9udCgpKQogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIG1fZ2x5cGggPSBtX2dseXBoQnVmZmVyLmdseXBoQXQobV9pbmRleCk7CiAgICAgICAg
IGlmICghbV9nbHlwaCkKQEAgLTI0NCwxMiArMjQ0LDEyIEBAIGNsYXNzIER1bW15R2x5cGhUb1Bh
dGhUcmFuc2xhdG9yIGZpbmFsIDoKICAgICB9CiB9OwogCi1zdGQ6OnVuaXF1ZV9wdHI8R2x5cGhU
b1BhdGhUcmFuc2xhdG9yPiBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlR2x5cGhU
b1BhdGhUcmFuc2xhdG9yKGNvbnN0IFNpbXBsZUZvbnREYXRhJiBmb250RGF0YSwgY29uc3QgVGV4
dFJ1biogdGV4dFJ1biwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBpbnQgZnJvbSwg
aW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0CitzdGQ6OnVuaXF1
ZV9wdHI8R2x5cGhUb1BhdGhUcmFuc2xhdG9yPiBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6
Y3JlYXRlR2x5cGhUb1BhdGhUcmFuc2xhdG9yKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFRleHRS
dW4qIHRleHRSdW4sIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgaW50IGZyb20sIGlu
dCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAogewogICAgIFNWR0Zv
bnRFbGVtZW50KiBmb250RWxlbWVudCA9IG51bGxwdHI7CiAgICAgU1ZHRm9udEZhY2VFbGVtZW50
KiBmb250RmFjZUVsZW1lbnQgPSBudWxscHRyOwogCi0gICAgY29uc3QgU1ZHRm9udERhdGEqIHN2
Z0ZvbnREYXRhID0gc3ZnRm9udEFuZEZvbnRGYWNlRWxlbWVudEZvckZvbnREYXRhKCZmb250RGF0
YSwgZm9udEZhY2VFbGVtZW50LCBmb250RWxlbWVudCk7CisgICAgY29uc3QgU1ZHRm9udERhdGEq
IHN2Z0ZvbnREYXRhID0gc3ZnRm9udEFuZEZvbnRGYWNlRWxlbWVudEZvckZvbnREYXRhKCZmb250
LCBmb250RmFjZUVsZW1lbnQsIGZvbnRFbGVtZW50KTsKICAgICBpZiAoIWZvbnRFbGVtZW50IHx8
ICFmb250RmFjZUVsZW1lbnQpCiAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPER1bW15
R2x5cGhUb1BhdGhUcmFuc2xhdG9yPigpOwogCkBAIC0yNTcsMTIgKzI1NywxMiBAQCBzdGQ6OnVu
aXF1ZV9wdHI8R2x5cGhUb1BhdGhUcmFuc2xhdG9yPiBTCiAgICAgUmVuZGVyU3R5bGUmIHN0eWxl
ID0gZWxlbWVudFJlbmRlcmVyLnN0eWxlKCk7CiAgICAgYm9vbCBpc1ZlcnRpY2FsVGV4dCA9IHN0
eWxlLnN2Z1N0eWxlKCkuaXNWZXJ0aWNhbFdyaXRpbmdNb2RlKCk7CiAKLSAgICBmbG9hdCBzY2Fs
ZSA9IHNjYWxlRW1Ub1VuaXRzKGZvbnREYXRhLnBsYXRmb3JtRGF0YSgpLnNpemUoKSwgZm9udEZh
Y2VFbGVtZW50LT51bml0c1BlckVtKCkpOworICAgIGZsb2F0IHNjYWxlID0gc2NhbGVFbVRvVW5p
dHMoZm9udC5wbGF0Zm9ybURhdGEoKS5zaXplKCksIGZvbnRGYWNlRWxlbWVudC0+dW5pdHNQZXJF
bSgpKTsKIAogICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFNWR0dseXBoVG9QYXRoVHJhbnNs
YXRvcj4odGV4dFJ1biwgZ2x5cGhCdWZmZXIsIHBvaW50LCAqc3ZnRm9udERhdGEsICpmb250RWxl
bWVudCwgZnJvbSwgbnVtR2x5cGhzLCBzY2FsZSwgaXNWZXJ0aWNhbFRleHQpOwogfQogCi12b2lk
IFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0OjpkcmF3U1ZHR2x5cGhzKEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhLCBjb25zdCBHbHlwaEJ1
ZmZlciYgZ2x5cGhCdWZmZXIsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBv
aW50JiBwb2ludCkgY29uc3QKK3ZvaWQgU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmRyYXdT
VkdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGb250KiBmb250LCBjb25z
dCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25z
dCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKIHsKICAgICBhdXRvIGFjdGl2ZVBhaW50aW5nUmVz
b3VyY2UgPSB0aGlzLT5hY3RpdmVQYWludGluZ1Jlc291cmNlKCk7CiAgICAgaWYgKCFhY3RpdmVQ
YWludGluZ1Jlc291cmNlKSB7CkBAIC0yNzgsNyArMjc4LDcgQEAgdm9pZCBTVkdUZXh0UnVuUmVu
ZGVyaW5nQ29udGV4dDo6ZHJhd1NWRwogICAgIEFTU0VSVChhY3RpdmVQYWludGluZ1Jlc291cmNl
KTsKIAogICAgIFJlbmRlclNWR1Jlc291cmNlTW9kZSByZXNvdXJjZU1vZGUgPSBjb250ZXh0LT50
ZXh0RHJhd2luZ01vZGUoKSA9PSBUZXh0TW9kZVN0cm9rZSA/IEFwcGx5VG9TdHJva2VNb2RlIDog
QXBwbHlUb0ZpbGxNb2RlOwotICAgIGZvciAoYXV0byB0cmFuc2xhdG9yID0gY3JlYXRlR2x5cGhU
b1BhdGhUcmFuc2xhdG9yKCpmb250RGF0YSwgbnVsbHB0ciwgZ2x5cGhCdWZmZXIsIGZyb20sIG51
bUdseXBocywgcG9pbnQpOyB0cmFuc2xhdG9yLT5jb250YWluc01vcmVQYXRocygpOyB0cmFuc2xh
dG9yLT5hZHZhbmNlKCkpIHsKKyAgICBmb3IgKGF1dG8gdHJhbnNsYXRvciA9IGNyZWF0ZUdseXBo
VG9QYXRoVHJhbnNsYXRvcigqZm9udCwgbnVsbHB0ciwgZ2x5cGhCdWZmZXIsIGZyb20sIG51bUds
eXBocywgcG9pbnQpOyB0cmFuc2xhdG9yLT5jb250YWluc01vcmVQYXRocygpOyB0cmFuc2xhdG9y
LT5hZHZhbmNlKCkpIHsKICAgICAgICAgUGF0aCBnbHlwaFBhdGggPSB0cmFuc2xhdG9yLT5wYXRo
KCk7CiAgICAgICAgIGlmIChhY3RpdmVQYWludGluZ1Jlc291cmNlLT5hcHBseVJlc291cmNlKGVs
ZW1lbnRSZW5kZXJlciwgc3R5bGUsIGNvbnRleHQsIHJlc291cmNlTW9kZSkpIHsKICAgICAgICAg
ICAgIGZsb2F0IHN0cm9rZVRoaWNrbmVzcyA9IGNvbnRleHQtPnN0cm9rZVRoaWNrbmVzcygpOwpA
QCAtMjkyLDEzICsyOTIsMTMgQEAgdm9pZCBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6ZHJh
d1NWRwogCiBzdGF0aWMgR2x5cGhEYXRhIG1pc3NpbmdHbHlwaEZvckZvbnQoY29uc3QgRm9udENh
c2NhZGUmIGZvbnQpCiB7Ci0gICAgY29uc3QgU2ltcGxlRm9udERhdGEmIHByaW1hcnlGb250RGF0
YSA9IGZvbnQucHJpbWFyeUZvbnREYXRhKCk7Ci0gICAgaWYgKCFwcmltYXJ5Rm9udERhdGEuaXNT
VkdGb250KCkpCisgICAgY29uc3QgRm9udCYgcHJpbWFyeUZvbnQgPSBmb250LnByaW1hcnlGb250
KCk7CisgICAgaWYgKCFwcmltYXJ5Rm9udC5pc1NWR0ZvbnQoKSkKICAgICAgICAgcmV0dXJuIEds
eXBoRGF0YSgpOwogICAgIFNWR0ZvbnRFbGVtZW50KiBmb250RWxlbWVudDsKICAgICBTVkdGb250
RmFjZUVsZW1lbnQqIGZvbnRGYWNlRWxlbWVudDsKLSAgICBzdmdGb250QW5kRm9udEZhY2VFbGVt
ZW50Rm9yRm9udERhdGEoJnByaW1hcnlGb250RGF0YSwgZm9udEZhY2VFbGVtZW50LCBmb250RWxl
bWVudCk7Ci0gICAgcmV0dXJuIEdseXBoRGF0YShmb250RWxlbWVudC0+bWlzc2luZ0dseXBoKCks
ICZwcmltYXJ5Rm9udERhdGEpOworICAgIHN2Z0ZvbnRBbmRGb250RmFjZUVsZW1lbnRGb3JGb250
RGF0YSgmcHJpbWFyeUZvbnQsIGZvbnRGYWNlRWxlbWVudCwgZm9udEVsZW1lbnQpOworICAgIHJl
dHVybiBHbHlwaERhdGEoZm9udEVsZW1lbnQtPm1pc3NpbmdHbHlwaCgpLCAmcHJpbWFyeUZvbnQp
OwogfQogCiBHbHlwaERhdGEgU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmdseXBoRGF0YUZv
ckNoYXJhY3Rlcihjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgV2lkdGhJdGVyYXRvciYgaXRlcmF0
b3IsIFVDaGFyMzIgY2hhcmFjdGVyLCBib29sIG1pcnJvciwgaW50IGN1cnJlbnRDaGFyYWN0ZXIs
IHVuc2lnbmVkJiBhZHZhbmNlTGVuZ3RoLCBTdHJpbmcmIG5vcm1hbGl6ZWRTcGFjZXNTdHJpbmdD
YWNoZSkKQEAgLTMwNywyMyArMzA3LDIzIEBAIEdseXBoRGF0YSBTVkdUZXh0UnVuUmVuZGVyaW5n
Q29udGV4dDo6Z2wKICAgICBpZiAoIWdseXBoRGF0YS5nbHlwaCkKICAgICAgICAgcmV0dXJuIG1p
c3NpbmdHbHlwaEZvckZvbnQoZm9udCk7CiAKLSAgICBBU1NFUlQoZ2x5cGhEYXRhLmZvbnREYXRh
KTsKKyAgICBBU1NFUlQoZ2x5cGhEYXRhLmZvbnQpOwogCiAgICAgLy8gQ2hhcmFjdGVycyBlbmNs
b3NlZCBieSBhbiA8YWx0R2x5cGg+IGVsZW1lbnQsIG1heSBub3QgYmUgcmVnaXN0ZXJlZCBpbiB0
aGUgR2x5cGhQYWdlLgotICAgIGlmICghZ2x5cGhEYXRhLmZvbnREYXRhLT5pc1NWR0ZvbnQoKSkg
eworICAgIGlmICghZ2x5cGhEYXRhLmZvbnQtPmlzU1ZHRm9udCgpKSB7CiAgICAgICAgIGF1dG8m
IGVsZW1lbnRSZW5kZXJlciA9IGlzPFJlbmRlckVsZW1lbnQ+KHJlbmRlcmVyKCkpID8gZG93bmNh
c3Q8UmVuZGVyRWxlbWVudD4ocmVuZGVyZXIoKSkgOiAqcmVuZGVyZXIoKS5wYXJlbnQoKTsKICAg
ICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudFJlbmRlcmVyRWxlbWVudCA9IGVsZW1lbnRSZW5kZXJl
ci5lbGVtZW50KCkpIHsKICAgICAgICAgICAgIGlmIChpczxTVkdBbHRHbHlwaEVsZW1lbnQ+KCpw
YXJlbnRSZW5kZXJlckVsZW1lbnQpKQotICAgICAgICAgICAgICAgIGdseXBoRGF0YS5mb250RGF0
YSA9ICZmb250LnByaW1hcnlGb250RGF0YSgpOworICAgICAgICAgICAgICAgIGdseXBoRGF0YS5m
b250ID0gJmZvbnQucHJpbWFyeUZvbnQoKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmICgh
Z2x5cGhEYXRhLmZvbnREYXRhLT5pc1NWR0ZvbnQoKSkKKyAgICBpZiAoIWdseXBoRGF0YS5mb250
LT5pc1NWR0ZvbnQoKSkKICAgICAgICAgcmV0dXJuIGdseXBoRGF0YTsKIAogICAgIFNWR0ZvbnRF
bGVtZW50KiBmb250RWxlbWVudCA9IG51bGxwdHI7CiAgICAgU1ZHRm9udEZhY2VFbGVtZW50KiBm
b250RmFjZUVsZW1lbnQgPSBudWxscHRyOwotICAgIGNvbnN0IFNWR0ZvbnREYXRhKiBzdmdGb250
RGF0YSA9IHN2Z0ZvbnRBbmRGb250RmFjZUVsZW1lbnRGb3JGb250RGF0YShnbHlwaERhdGEuZm9u
dERhdGEsIGZvbnRGYWNlRWxlbWVudCwgZm9udEVsZW1lbnQpOworICAgIGNvbnN0IFNWR0ZvbnRE
YXRhKiBzdmdGb250RGF0YSA9IHN2Z0ZvbnRBbmRGb250RmFjZUVsZW1lbnRGb3JGb250RGF0YShn
bHlwaERhdGEuZm9udCwgZm9udEZhY2VFbGVtZW50LCBmb250RWxlbWVudCk7CiAgICAgaWYgKCFz
dmdGb250RGF0YSkKICAgICAgICAgcmV0dXJuIGdseXBoRGF0YTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0Nv
bnRleHQuaAkocmV2aXNpb24gMTc4NTEwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw5ICs0
Myw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEFjdGl2ZVBhaW50aW5nUmVzb3VyY2UoUmVuZGVy
U1ZHUmVzb3VyY2UqIG9iamVjdCkgeyBtX2FjdGl2ZVBhaW50aW5nUmVzb3VyY2UgPSBvYmplY3Q7
IH0KIAogICAgIHZpcnR1YWwgR2x5cGhEYXRhIGdseXBoRGF0YUZvckNoYXJhY3Rlcihjb25zdCBG
b250Q2FzY2FkZSYsIFdpZHRoSXRlcmF0b3ImLCBVQ2hhcjMyIGNoYXJhY3RlciwgYm9vbCBtaXJy
b3IsIGludCBjdXJyZW50Q2hhcmFjdGVyLCB1bnNpZ25lZCYgYWR2YW5jZUxlbmd0aCwgU3RyaW5n
JiBub3JtYWxpemVkU3BhY2VzU3RyaW5nQ2FjaGUpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9p
ZCBkcmF3U1ZHR2x5cGhzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFNpbXBsZUZvbnREYXRhKiwg
Y29uc3QgR2x5cGhCdWZmZXImLCBpbnQgZnJvbSwgaW50IHRvLCBjb25zdCBGbG9hdFBvaW50Jikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRyYXdTVkdHbHlwaHMoR3JhcGhpY3ND
b250ZXh0KiwgY29uc3QgRm9udCosIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCB0
bywgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgZmxvYXQg
ZmxvYXRXaWR0aFVzaW5nU1ZHRm9udChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4m
LCBpbnQmIGNoYXJzQ29uc3VtZWQsIFN0cmluZyYgZ2x5cGhOYW1lKSBjb25zdCBvdmVycmlkZTsK
LSAgICB2aXJ0dWFsIGJvb2wgYXBwbHlTVkdLZXJuaW5nKGNvbnN0IFNpbXBsZUZvbnREYXRhKiwg
V2lkdGhJdGVyYXRvciYsIEdseXBoQnVmZmVyKiwgaW50IGZyb20pIGNvbnN0IG92ZXJyaWRlOwor
ICAgIHZpcnR1YWwgYm9vbCBhcHBseVNWR0tlcm5pbmcoY29uc3QgRm9udCosIFdpZHRoSXRlcmF0
b3ImLCBHbHlwaEJ1ZmZlciosIGludCBmcm9tKSBjb25zdCBvdmVycmlkZTsKICNlbmRpZgogCiBw
cml2YXRlOgpAQCAtNjAsNyArNjAsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgflNWR1RleHRS
dW5SZW5kZXJpbmdDb250ZXh0KCkgeyB9CiAKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotICAgIHZp
cnR1YWwgc3RkOjp1bmlxdWVfcHRyPEdseXBoVG9QYXRoVHJhbnNsYXRvcj4gY3JlYXRlR2x5cGhU
b1BhdGhUcmFuc2xhdG9yKGNvbnN0IFNpbXBsZUZvbnREYXRhJiwgY29uc3QgVGV4dFJ1biosIGNv
bnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9p
bnQmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxHbHlwaFRv
UGF0aFRyYW5zbGF0b3I+IGNyZWF0ZUdseXBoVG9QYXRoVHJhbnNsYXRvcihjb25zdCBGb250Jiwg
Y29uc3QgVGV4dFJ1biosIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCBudW1HbHlw
aHMsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdCBvdmVycmlkZTsKICNlbmRpZgogCiAgICAgUmVu
ZGVyT2JqZWN0JiBtX3JlbmRlcmVyOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRE
YXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udERhdGEuY3Bw
CShyZXZpc2lvbiAxNzg1MTApCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udERhdGEuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01NywxNSArNTcsMTUgQEAgU1ZHRm9udERhdGE6OlNWR0ZvbnRE
YXRhKFNWR0ZvbnRGYWNlRWxlbQogICAgIEFTU0VSVF9BUkcoZm9udEZhY2VFbGVtZW50LCBmb250
RmFjZUVsZW1lbnQpOwogfQogCi12b2lkIFNWR0ZvbnREYXRhOjppbml0aWFsaXplRm9udERhdGEo
U2ltcGxlRm9udERhdGEqIGZvbnREYXRhLCBmbG9hdCBmb250U2l6ZSkKK3ZvaWQgU1ZHRm9udERh
dGE6OmluaXRpYWxpemVGb250KEZvbnQqIGZvbnQsIGZsb2F0IGZvbnRTaXplKQogewotICAgIEFT
U0VSVChmb250RGF0YSk7CisgICAgQVNTRVJUKGZvbnQpOwogCiAgICAgU1ZHRm9udEZhY2VFbGVt
ZW50KiBzdmdGb250RmFjZUVsZW1lbnQgPSB0aGlzLT5zdmdGb250RmFjZUVsZW1lbnQoKTsKICAg
ICBBU1NFUlQoc3ZnRm9udEZhY2VFbGVtZW50KTsKIAotICAgIGZvbnREYXRhLT5zZXRaZXJvV2lk
dGhTcGFjZUdseXBoKDApOwotICAgIGZvbnREYXRhLT5kZXRlcm1pbmVQaXRjaCgpOworICAgIGZv
bnQtPnNldFplcm9XaWR0aFNwYWNlR2x5cGgoMCk7CisgICAgZm9udC0+ZGV0ZXJtaW5lUGl0Y2go
KTsKIAogICAgIHVuc2lnbmVkIHVuaXRzUGVyRW0gPSBzdmdGb250RmFjZUVsZW1lbnQtPnVuaXRz
UGVyRW0oKTsKICAgICBmbG9hdCBzY2FsZSA9IHNjYWxlRW1Ub1VuaXRzKGZvbnRTaXplLCB1bml0
c1BlckVtKTsKQEAgLTc0LDE1ICs3NCwxNSBAQCB2b2lkIFNWR0ZvbnREYXRhOjppbml0aWFsaXpl
Rm9udERhdGEoU2ltCiAgICAgZmxvYXQgZGVzY2VudCA9IHN2Z0ZvbnRGYWNlRWxlbWVudC0+ZGVz
Y2VudCgpICogc2NhbGU7CiAgICAgZmxvYXQgbGluZUdhcCA9IDAuMWYgKiBmb250U2l6ZTsKIAot
ICAgIGNvbnN0IEdseXBoUGFnZSogZ2x5cGhQYWdlWmVybyA9IGZvbnREYXRhLT5nbHlwaFBhZ2Uo
MCk7CisgICAgY29uc3QgR2x5cGhQYWdlKiBnbHlwaFBhZ2VaZXJvID0gZm9udC0+Z2x5cGhQYWdl
KDApOwogCiAgICAgaWYgKCF4SGVpZ2h0ICYmIGdseXBoUGFnZVplcm8pIHsKICAgICAgICAgLy8g
RmFsbGJhY2sgaWYgeF9oZWlnaHRBdHRyIGlzIG5vdCBzcGVjaWZpZWQgZm9yIHRoZSBmb250IGVs
ZW1lbnQuCiAgICAgICAgIEdseXBoIGxldHRlclhHbHlwaCA9IGdseXBoUGFnZVplcm8tPmdseXBo
RGF0YUZvckNoYXJhY3RlcigneCcpLmdseXBoOwotICAgICAgICB4SGVpZ2h0ID0gbGV0dGVyWEds
eXBoID8gZm9udERhdGEtPndpZHRoRm9yR2x5cGgobGV0dGVyWEdseXBoKSA6IDIgKiBhc2NlbnQg
LyAzOworICAgICAgICB4SGVpZ2h0ID0gbGV0dGVyWEdseXBoID8gZm9udC0+d2lkdGhGb3JHbHlw
aChsZXR0ZXJYR2x5cGgpIDogMiAqIGFzY2VudCAvIDM7CiAgICAgfQogCi0gICAgRm9udE1ldHJp
Y3MmIGZvbnRNZXRyaWNzID0gZm9udERhdGEtPmZvbnRNZXRyaWNzKCk7CisgICAgRm9udE1ldHJp
Y3MmIGZvbnRNZXRyaWNzID0gZm9udC0+Zm9udE1ldHJpY3MoKTsKICAgICBmb250TWV0cmljcy5z
ZXRVbml0c1BlckVtKHVuaXRzUGVyRW0pOwogICAgIGZvbnRNZXRyaWNzLnNldEFzY2VudChhc2Nl
bnQpOwogICAgIGZvbnRNZXRyaWNzLnNldERlc2NlbnQoZGVzY2VudCk7CkBAIC05MSwyNSArOTEs
MjUgQEAgdm9pZCBTVkdGb250RGF0YTo6aW5pdGlhbGl6ZUZvbnREYXRhKFNpbQogICAgIGZvbnRN
ZXRyaWNzLnNldFhIZWlnaHQoeEhlaWdodCk7CiAKICAgICBpZiAoIWdseXBoUGFnZVplcm8pIHsK
LSAgICAgICAgZm9udERhdGEtPnNldFNwYWNlR2x5cGgoMCk7Ci0gICAgICAgIGZvbnREYXRhLT5z
ZXRTcGFjZVdpZHRocygwKTsKLSAgICAgICAgZm9udERhdGEtPnNldEF2Z0NoYXJXaWR0aCgwKTsK
LSAgICAgICAgZm9udERhdGEtPnNldE1heENoYXJXaWR0aChhc2NlbnQpOworICAgICAgICBmb250
LT5zZXRTcGFjZUdseXBoKDApOworICAgICAgICBmb250LT5zZXRTcGFjZVdpZHRocygwKTsKKyAg
ICAgICAgZm9udC0+c2V0QXZnQ2hhcldpZHRoKDApOworICAgICAgICBmb250LT5zZXRNYXhDaGFy
V2lkdGgoYXNjZW50KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8vIENhbGN1bGF0
ZSBzcGFjZSB3aWR0aC4KICAgICBHbHlwaCBzcGFjZUdseXBoID0gZ2x5cGhQYWdlWmVyby0+Z2x5
cGhEYXRhRm9yQ2hhcmFjdGVyKCcgJykuZ2x5cGg7Ci0gICAgZm9udERhdGEtPnNldFNwYWNlR2x5
cGgoc3BhY2VHbHlwaCk7Ci0gICAgZm9udERhdGEtPnNldFNwYWNlV2lkdGhzKGZvbnREYXRhLT53
aWR0aEZvckdseXBoKHNwYWNlR2x5cGgpKTsKKyAgICBmb250LT5zZXRTcGFjZUdseXBoKHNwYWNl
R2x5cGgpOworICAgIGZvbnQtPnNldFNwYWNlV2lkdGhzKGZvbnQtPndpZHRoRm9yR2x5cGgoc3Bh
Y2VHbHlwaCkpOwogCiAgICAgLy8gRXN0aW1hdGUgYXZlcmFnZSBjaGFyYWN0ZXIgd2lkdGguCiAg
ICAgR2x5cGggbnVtZXJhbFplcm9HbHlwaCA9IGdseXBoUGFnZVplcm8tPmdseXBoRGF0YUZvckNo
YXJhY3RlcignMCcpLmdseXBoOwotICAgIGZvbnREYXRhLT5zZXRBdmdDaGFyV2lkdGgobnVtZXJh
bFplcm9HbHlwaCA/IGZvbnREYXRhLT53aWR0aEZvckdseXBoKG51bWVyYWxaZXJvR2x5cGgpIDog
Zm9udERhdGEtPnNwYWNlV2lkdGgoKSk7CisgICAgZm9udC0+c2V0QXZnQ2hhcldpZHRoKG51bWVy
YWxaZXJvR2x5cGggPyBmb250LT53aWR0aEZvckdseXBoKG51bWVyYWxaZXJvR2x5cGgpIDogZm9u
dC0+c3BhY2VXaWR0aCgpKTsKIAogICAgIC8vIEVzdGltYXRlIG1heGltdW0gY2hhcmFjdGVyIHdp
ZHRoLgogICAgIEdseXBoIGxldHRlcldHbHlwaCA9IGdseXBoUGFnZVplcm8tPmdseXBoRGF0YUZv
ckNoYXJhY3RlcignVycpLmdseXBoOwotICAgIGZvbnREYXRhLT5zZXRNYXhDaGFyV2lkdGgobGV0
dGVyV0dseXBoID8gZm9udERhdGEtPndpZHRoRm9yR2x5cGgobGV0dGVyV0dseXBoKSA6IGFzY2Vu
dCk7CisgICAgZm9udC0+c2V0TWF4Q2hhcldpZHRoKGxldHRlcldHbHlwaCA/IGZvbnQtPndpZHRo
Rm9yR2x5cGgobGV0dGVyV0dseXBoKSA6IGFzY2VudCk7CiB9CiAKIGZsb2F0IFNWR0ZvbnREYXRh
Ojp3aWR0aEZvclNWR0dseXBoKEdseXBoIGdseXBoLCBmbG9hdCBmb250U2l6ZSkgY29uc3QKQEAg
LTIwOCwxMCArMjA4LDEwIEBAIGJvb2wgU1ZHRm9udERhdGE6OmFwcGx5U1ZHR2x5cGhTZWxlY3Rp
b24KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgU1ZHRm9udERhdGE6OmZpbGxTVkdHbHlw
aFBhZ2UoR2x5cGhQYWdlKiBwYWdlVG9GaWxsLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxl
bmd0aCwgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBTaW1wbGVG
b250RGF0YSogZm9udERhdGEpIGNvbnN0Citib29sIFNWR0ZvbnREYXRhOjpmaWxsU1ZHR2x5cGhQ
YWdlKEdseXBoUGFnZSogcGFnZVRvRmlsbCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgsIFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgRm9udCogZm9u
dCkgY29uc3QKIHsKLSAgICBBU1NFUlQoZm9udERhdGEtPmlzQ3VzdG9tRm9udCgpKTsKLSAgICBB
U1NFUlQoZm9udERhdGEtPmlzU1ZHRm9udCgpKTsKKyAgICBBU1NFUlQoZm9udC0+aXNDdXN0b21G
b250KCkpOworICAgIEFTU0VSVChmb250LT5pc1NWR0ZvbnQoKSk7CiAKICAgICBTVkdGb250RmFj
ZUVsZW1lbnQqIGZvbnRGYWNlRWxlbWVudCA9IHRoaXMtPnN2Z0ZvbnRGYWNlRWxlbWVudCgpOwog
ICAgIEFTU0VSVChmb250RmFjZUVsZW1lbnQpOwpAQCAtMjIwLDEzICsyMjAsMTMgQEAgYm9vbCBT
VkdGb250RGF0YTo6ZmlsbFNWR0dseXBoUGFnZShHbHlwaAogICAgIEFTU0VSVChmb250RWxlbWVu
dCk7CiAKICAgICBpZiAoYnVmZmVyTGVuZ3RoID09IGxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGZp
bGxCTVBHbHlwaHMoZm9udEVsZW1lbnQsIHBhZ2VUb0ZpbGwsIG9mZnNldCwgbGVuZ3RoLCBidWZm
ZXIsIGZvbnREYXRhKTsKKyAgICAgICAgcmV0dXJuIGZpbGxCTVBHbHlwaHMoZm9udEVsZW1lbnQs
IHBhZ2VUb0ZpbGwsIG9mZnNldCwgbGVuZ3RoLCBidWZmZXIsIGZvbnQpOwogCiAgICAgQVNTRVJU
KGJ1ZmZlckxlbmd0aCA9PSAyICogbGVuZ3RoKTsKLSAgICByZXR1cm4gZmlsbE5vbkJNUEdseXBo
cyhmb250RWxlbWVudCwgcGFnZVRvRmlsbCwgb2Zmc2V0LCBsZW5ndGgsIGJ1ZmZlciwgZm9udERh
dGEpOworICAgIHJldHVybiBmaWxsTm9uQk1QR2x5cGhzKGZvbnRFbGVtZW50LCBwYWdlVG9GaWxs
LCBvZmZzZXQsIGxlbmd0aCwgYnVmZmVyLCBmb250KTsKIH0KIAotYm9vbCBTVkdGb250RGF0YTo6
ZmlsbEJNUEdseXBocyhTVkdGb250RWxlbWVudCogZm9udEVsZW1lbnQsIEdseXBoUGFnZSogcGFn
ZVRvRmlsbCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIs
IGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSkgY29uc3QKK2Jvb2wgU1ZHRm9udERhdGE6
OmZpbGxCTVBHbHlwaHMoU1ZHRm9udEVsZW1lbnQqIGZvbnRFbGVtZW50LCBHbHlwaFBhZ2UqIHBh
Z2VUb0ZpbGwsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVy
LCBjb25zdCBGb250KiBmb250KSBjb25zdAogewogICAgIGJvb2wgaGF2ZUdseXBocyA9IGZhbHNl
OwogICAgIFZlY3RvcjxTVkdHbHlwaD4gZ2x5cGhzOwpAQCAtMjQzLDE0ICsyNDMsMTQgQEAgYm9v
bCBTVkdGb250RGF0YTo6ZmlsbEJNUEdseXBocyhTVkdGb250RQogICAgICAgICAvLyBjYXJlIG9m
IG1hdGNoaW5nIHRvIHRoZSBjb3JyZWN0IGdseXBoLCBpZiBtdWx0aXBsZSBvbmVzIGFyZSBhdmFp
bGFibGUsIGFzIHRoYXQncwogICAgICAgICAvLyBvbmx5IHBvc3NpYmxlIHdpdGhpbiB0aGUgY29u
dGV4dCBvZiBhIHN0cmluZyAoZWcuIGFyYWJpYyBmb3JtIG1hdGNoaW5nKS4KICAgICAgICAgaGF2
ZUdseXBocyA9IHRydWU7Ci0gICAgICAgIHBhZ2VUb0ZpbGwtPnNldEdseXBoRGF0YUZvckluZGV4
KG9mZnNldCArIGksIGdseXBocy5maXJzdCgpLnRhYmxlRW50cnksIGZvbnREYXRhKTsKKyAgICAg
ICAgcGFnZVRvRmlsbC0+c2V0R2x5cGhEYXRhRm9ySW5kZXgob2Zmc2V0ICsgaSwgZ2x5cGhzLmZp
cnN0KCkudGFibGVFbnRyeSwgZm9udCk7CiAgICAgICAgIGdseXBocy5jbGVhcigpOwogICAgIH0K
IAogICAgIHJldHVybiBoYXZlR2x5cGhzOwogfQogCi1ib29sIFNWR0ZvbnREYXRhOjpmaWxsTm9u
Qk1QR2x5cGhzKFNWR0ZvbnRFbGVtZW50KiBmb250RWxlbWVudCwgR2x5cGhQYWdlKiBwYWdlVG9G
aWxsLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgY29u
c3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKSBjb25zdAorYm9vbCBTVkdGb250RGF0YTo6Zmls
bE5vbkJNUEdseXBocyhTVkdGb250RWxlbWVudCogZm9udEVsZW1lbnQsIEdseXBoUGFnZSogcGFn
ZVRvRmlsbCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIs
IGNvbnN0IEZvbnQqIGZvbnQpIGNvbnN0CiB7CiAgICAgYm9vbCBoYXZlR2x5cGhzID0gZmFsc2U7
CiAgICAgVmVjdG9yPFNWR0dseXBoPiBnbHlwaHM7CkBAIC0yNjgsNyArMjY4LDcgQEAgYm9vbCBT
VkdGb250RGF0YTo6ZmlsbE5vbkJNUEdseXBocyhTVkdGbwogICAgICAgICAvLyBjYXJlIG9mIG1h
dGNoaW5nIHRvIHRoZSBjb3JyZWN0IGdseXBoLCBpZiBtdWx0aXBsZSBvbmVzIGFyZSBhdmFpbGFi
bGUsIGFzIHRoYXQncwogICAgICAgICAvLyBvbmx5IHBvc3NpYmxlIHdpdGhpbiB0aGUgY29udGV4
dCBvZiBhIHN0cmluZyAoZWcuIGFyYWJpYyBmb3JtIG1hdGNoaW5nKS4KICAgICAgICAgaGF2ZUds
eXBocyA9IHRydWU7Ci0gICAgICAgIHBhZ2VUb0ZpbGwtPnNldEdseXBoRGF0YUZvckluZGV4KG9m
ZnNldCArIGksIGdseXBocy5maXJzdCgpLnRhYmxlRW50cnksIGZvbnREYXRhKTsKKyAgICAgICAg
cGFnZVRvRmlsbC0+c2V0R2x5cGhEYXRhRm9ySW5kZXgob2Zmc2V0ICsgaSwgZ2x5cGhzLmZpcnN0
KCkudGFibGVFbnRyeSwgZm9udCk7CiAgICAgICAgIGdseXBocy5jbGVhcigpOwogICAgIH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnREYXRhLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnREYXRhLmgJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGb250RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSwyMSArMjEs
MjEgQEAKICNkZWZpbmUgU1ZHRm9udERhdGFfaAogCiAjaWYgRU5BQkxFKFNWR19GT05UUykKLSNp
bmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgorI2luY2x1ZGUgIkZvbnQuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBTVkdGb250RWxlbWVudDsKIGNsYXNzIFNWR0ZvbnRGYWNlRWxl
bWVudDsKIAotY2xhc3MgU1ZHRm9udERhdGEgOiBwdWJsaWMgU2ltcGxlRm9udERhdGE6OlNWR0Rh
dGEgeworY2xhc3MgU1ZHRm9udERhdGEgOiBwdWJsaWMgRm9udDo6U1ZHRGF0YSB7CiBwdWJsaWM6
CiAgICAgZXhwbGljaXQgU1ZHRm9udERhdGEoU1ZHRm9udEZhY2VFbGVtZW50Kik7CiAgICAgdmly
dHVhbCB+U1ZHRm9udERhdGEoKSB7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplRm9u
dERhdGEoU2ltcGxlRm9udERhdGEqLCBmbG9hdCBmb250U2l6ZSkgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCB2b2lkIGluaXRpYWxpemVGb250KEZvbnQqLCBmbG9hdCBmb250U2l6ZSkgb3ZlcnJpZGU7
CiAgICAgdmlydHVhbCBmbG9hdCB3aWR0aEZvclNWR0dseXBoKEdseXBoLCBmbG9hdCBmb250U2l6
ZSkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIGZpbGxTVkdHbHlwaFBhZ2UoR2x5
cGhQYWdlKiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIs
IHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgU2ltcGxlRm9udERhdGEqKSBjb25zdCBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgZmlsbFNWR0dseXBoUGFnZShHbHlwaFBhZ2UqLCB1bnNp
Z25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVm
ZmVyTGVuZ3RoLCBjb25zdCBGb250KikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBib29sIGFwcGx5
U1ZHR2x5cGhTZWxlY3Rpb24oV2lkdGhJdGVyYXRvciYsIEdseXBoRGF0YSYsIGJvb2wgbWlycm9y
LCBpbnQgY3VycmVudENoYXJhY3RlciwgdW5zaWduZWQmIGFkdmFuY2VMZW5ndGgsIFN0cmluZyYg
bm9ybWFsaXplZFNwYWNlc1N0cmluZ0NhY2hlKSBjb25zdDsKIApAQCAtNTAsOCArNTAsOCBAQCBw
dWJsaWM6CiAgICAgZmxvYXQgdmVydGljYWxBZHZhbmNlWSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVy
dGljYWxBZHZhbmNlWTsgfQogCiBwcml2YXRlOgotICAgIGJvb2wgZmlsbEJNUEdseXBocyhTVkdG
b250RWxlbWVudCosIEdseXBoUGFnZSogLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCwgVUNoYXIqIGJ1ZmZlciwgY29uc3QgU2ltcGxlRm9udERhdGEqKSBjb25zdDsKLSAgICBib29s
IGZpbGxOb25CTVBHbHlwaHMoU1ZHRm9udEVsZW1lbnQqLCBHbHlwaFBhZ2UqICwgdW5zaWduZWQg
b2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIsIGNvbnN0IFNpbXBsZUZvbnRE
YXRhKikgY29uc3Q7CisgICAgYm9vbCBmaWxsQk1QR2x5cGhzKFNWR0ZvbnRFbGVtZW50KiwgR2x5
cGhQYWdlKiAsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVy
LCBjb25zdCBGb250KikgY29uc3Q7CisgICAgYm9vbCBmaWxsTm9uQk1QR2x5cGhzKFNWR0ZvbnRF
bGVtZW50KiwgR2x5cGhQYWdlKiAsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBV
Q2hhciogYnVmZmVyLCBjb25zdCBGb250KikgY29uc3Q7CiAKICAgICBib29sIGFwcGx5VHJhbnNm
b3JtcyhHbHlwaEJ1ZmZlckdseXBoKiwgR2x5cGhCdWZmZXJBZHZhbmNlKiwgc2l6ZV90LCBUeXBl
c2V0dGluZ0ZlYXR1cmVzKSBjb25zdCA9IGRlbGV0ZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZvbnRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZvbnRFbGVtZW50LmgJKHJldmlzaW9uIDE3ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGb250RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Niw3ICs3Niw3IEBAIHB1YmxpYzoK
ICAgICBmbG9hdCBob3Jpem9udGFsS2VybmluZ0ZvclBhaXJPZlN0cmluZ3NBbmRHbHlwaHMoY29u
c3QgU3RyaW5nJiB1MSwgY29uc3QgU3RyaW5nJiBnMSwgY29uc3QgU3RyaW5nJiB1MiwgY29uc3Qg
U3RyaW5nJiBnMikgY29uc3Q7CiAgICAgZmxvYXQgdmVydGljYWxLZXJuaW5nRm9yUGFpck9mU3Ry
aW5nc0FuZEdseXBocyhjb25zdCBTdHJpbmcmIHUxLCBjb25zdCBTdHJpbmcmIGcxLCBjb25zdCBT
dHJpbmcmIHUyLCBjb25zdCBTdHJpbmcmIGcyKSBjb25zdDsKIAotICAgIC8vIFVzZWQgYnkgU2lt
cGxlRm9udERhdGEvV2lkdGhJdGVyYXRvci4KKyAgICAvLyBVc2VkIGJ5IEZvbnQvV2lkdGhJdGVy
YXRvci4KICAgICBTVkdHbHlwaCBzdmdHbHlwaEZvckdseXBoKEdseXBoKTsKICAgICBHbHlwaCBt
aXNzaW5nR2x5cGgoKTsKIApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9j
ZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nl
c3MuY3BwCShyZXZpc2lvbiAxNzg1MTApCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlByb2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MzEsOCArOTMxLDggQEAgdm9pZCBXZWJQ
cm9jZXNzOjpnZXRXZWJDb3JlU3RhdGlzdGljcyh1aQogICAgIGRhdGEuc3RhdGlzdGljc051bWJl
cnMuc2V0KEFTQ0lJTGl0ZXJhbCgiSWNvbnNXaXRoRGF0YUNvdW50IiksIGljb25EYXRhYmFzZSgp
Lmljb25SZWNvcmRDb3VudFdpdGhEYXRhKCkpOwogICAgIAogICAgIC8vIEdhdGhlciBmb250IHN0
YXRpc3RpY3MuCi0gICAgZGF0YS5zdGF0aXN0aWNzTnVtYmVycy5zZXQoQVNDSUlMaXRlcmFsKCJD
YWNoZWRGb250RGF0YUNvdW50IiksIGZvbnRDYWNoZSgpLmZvbnREYXRhQ291bnQoKSk7Ci0gICAg
ZGF0YS5zdGF0aXN0aWNzTnVtYmVycy5zZXQoQVNDSUlMaXRlcmFsKCJDYWNoZWRGb250RGF0YUlu
YWN0aXZlQ291bnQiKSwgZm9udENhY2hlKCkuaW5hY3RpdmVGb250RGF0YUNvdW50KCkpOworICAg
IGRhdGEuc3RhdGlzdGljc051bWJlcnMuc2V0KEFTQ0lJTGl0ZXJhbCgiQ2FjaGVkRm9udERhdGFD
b3VudCIpLCBmb250Q2FjaGUoKS5mb250Q291bnQoKSk7CisgICAgZGF0YS5zdGF0aXN0aWNzTnVt
YmVycy5zZXQoQVNDSUlMaXRlcmFsKCJDYWNoZWRGb250RGF0YUluYWN0aXZlQ291bnQiKSwgZm9u
dENhY2hlKCkuaW5hY3RpdmVGb250Q291bnQoKSk7CiAgICAgCiAgICAgLy8gR2F0aGVyIGdseXBo
IHBhZ2Ugc3RhdGlzdGljcy4KICAgICBkYXRhLnN0YXRpc3RpY3NOdW1iZXJzLnNldChBU0NJSUxp
dGVyYWwoIkdseXBoUGFnZUNvdW50IiksIEdseXBoUGFnZTo6Y291bnQoKSk7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJQb3B1cE1lbnVNYWMu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9tYWMvV2ViUG9wdXBNZW51TWFjLm1tCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJQb3B1cE1lbnVNYWMubW0JKHdv
cmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgdm9pZCBXZWJQb3B1cE1lbnU6OnNldFVwUGxh
dGZvcm1EYXRhKGNvbgogewogI2lmIFVTRShBUFBLSVQpCiAgICAgLy8gRklYTUU6IGZvbnQgd2ls
bCBiZSBuaWwgaGVyZSBmb3IgY3VzdG9tIGZvbnRzLCB3ZSBzaG91bGQgZml4IHRoYXQuCi0gICAg
TlNGb250ICpmb250ID0gbV9wb3B1cENsaWVudC0+bWVudVN0eWxlKCkuZm9udCgpLnByaW1hcnlG
b250RGF0YSgpLmdldE5TRm9udCgpOworICAgIE5TRm9udCAqZm9udCA9IG1fcG9wdXBDbGllbnQt
Pm1lbnVTdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udCgpLmdldE5TRm9udCgpOwogICAgIGlmICgh
Zm9udCkKICAgICAgICAgcmV0dXJuOwogICAgIApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQkocmV2aXNpb24gMTc4NDk2
KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xNzkyLDggKzE3OTIsOCBAQCB2b2lkIFdlYlBhZ2U6OnJlcXVl
c3RBdXRvY29ycmVjdGlvbkRhdGEoCiAKICAgICBib29sIG11bHRpcGxlRm9udHMgPSBmYWxzZTsK
ICAgICBDVEZvbnRSZWYgZm9udCA9IG5pbDsKLSAgICBpZiAoY29uc3QgU2ltcGxlRm9udERhdGEq
IGZvbnREYXRhID0gZnJhbWUuZWRpdG9yKCkuZm9udEZvclNlbGVjdGlvbihtdWx0aXBsZUZvbnRz
KSkKLSAgICAgICAgZm9udCA9IGZvbnREYXRhLT5nZXRDVEZvbnQoKTsKKyAgICBpZiAoYXV0byog
Y29yZUZvbnQgPSBmcmFtZS5lZGl0b3IoKS5mb250Rm9yU2VsZWN0aW9uKG11bHRpcGxlRm9udHMp
KQorICAgICAgICBmb250ID0gY29yZUZvbnQtPmdldENURm9udCgpOwogCiAgICAgQ0dGbG9hdCBm
b250U2l6ZSA9IENURm9udEdldFNpemUoZm9udCk7CiAgICAgdWludDY0X3QgZm9udFRyYWl0cyA9
IENURm9udEdldFN5bWJvbGljVHJhaXRzKGZvbnQpOwpJbmRleDogU291cmNlL1dlYktpdC9tYWMv
TWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21h
Yy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2Uv
V2ViS2l0L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDcsMTIgKzE0NywxMiBAQCArIChzaXplX3QpaWNvbnNXaXRoRGF0YUNvdW50CiAKICsgKHNpemVf
dCljYWNoZWRGb250RGF0YUNvdW50CiB7Ci0gICAgcmV0dXJuIGZvbnRDYWNoZSgpLmZvbnREYXRh
Q291bnQoKTsKKyAgICByZXR1cm4gZm9udENhY2hlKCkuZm9udENvdW50KCk7CiB9CiAKICsgKHNp
emVfdCljYWNoZWRGb250RGF0YUluYWN0aXZlQ291bnQKIHsKLSAgICByZXR1cm4gZm9udENhY2hl
KCkuaW5hY3RpdmVGb250RGF0YUNvdW50KCk7CisgICAgcmV0dXJuIGZvbnRDYWNoZSgpLmluYWN0
aXZlRm9udENvdW50KCk7CiB9CiAKICsgKHZvaWQpcHVyZ2VJbmFjdGl2ZUZvbnREYXRhCkluZGV4
OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9Qb3B1cE1lbnVNYWMubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvUG9wdXBNZW51TWFjLm1t
CShyZXZpc2lvbiAxNzg1MTApCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9Q
b3B1cE1lbnVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI4LDExICsyOCwxMSBAQAogI2ltcG9y
dCA8V2ViQ29yZS9DaHJvbWUuaD4KICNpbXBvcnQgPFdlYkNvcmUvQ2hyb21lQ2xpZW50Lmg+CiAj
aW1wb3J0IDxXZWJDb3JlL0V2ZW50SGFuZGxlci5oPgorI2ltcG9ydCA8V2ViQ29yZS9Gb250Lmg+
CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVmlldy5o
PgogI2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BvcHVwTWVudUNs
aWVudC5oPgotI2ltcG9ydCA8V2ViQ29yZS9TaW1wbGVGb250RGF0YS5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9XZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwpAQCAtODEsOSArODEsOSBAQCB2b2lkIFBvcHVwTWVudU1hYzo6cG9wdWxhdGUoKQogICAgICAg
ICBQb3B1cE1lbnVTdHlsZSBzdHlsZSA9IG1fY2xpZW50LT5pdGVtU3R5bGUoaSk7CiAgICAgICAg
IFJldGFpblB0cjxOU011dGFibGVEaWN0aW9uYXJ5PiBhdHRyaWJ1dGVzID0gYWRvcHROUyhbW05T
TXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdKTsKICAgICAgICAgaWYgKHN0eWxlLmZvbnQo
KSAhPSBGb250Q2FzY2FkZSgpKSB7Ci0gICAgICAgICAgICBOU0ZvbnQgKmZvbnQgPSBzdHlsZS5m
b250KCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0TlNGb250KCk7CisgICAgICAgICAgICBOU0ZvbnQg
KmZvbnQgPSBzdHlsZS5mb250KCkucHJpbWFyeUZvbnQoKS5nZXROU0ZvbnQoKTsKICAgICAgICAg
ICAgIGlmICghZm9udCkgewotICAgICAgICAgICAgICAgIENHRmxvYXQgc2l6ZSA9IHN0eWxlLmZv
bnQoKS5wcmltYXJ5Rm9udERhdGEoKS5wbGF0Zm9ybURhdGEoKS5zaXplKCk7CisgICAgICAgICAg
ICAgICAgQ0dGbG9hdCBzaXplID0gc3R5bGUuZm9udCgpLnByaW1hcnlGb250KCkucGxhdGZvcm1E
YXRhKCkuc2l6ZSgpOwogICAgICAgICAgICAgICAgIGZvbnQgPSBzdHlsZS5mb250KCkud2VpZ2h0
KCkgPCBGb250V2VpZ2h0Qm9sZCA/IFtOU0ZvbnQgc3lzdGVtRm9udE9mU2l6ZTpzaXplXSA6IFtO
U0ZvbnQgYm9sZFN5c3RlbUZvbnRPZlNpemU6c2l6ZV07CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBbYXR0cmlidXRlcyBzZXRPYmplY3Q6Zm9udCBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFt
ZV07CkBAIC0xNDgsNyArMTQ4LDcgQEAgdm9pZCBQb3B1cE1lbnVNYWM6OnNob3coY29uc3QgSW50
UmVjdCYgcgogICAgIE5TTWVudSogbWVudSA9IFttX3BvcHVwIG1lbnVdOwogICAgIAogICAgIE5T
UG9pbnQgbG9jYXRpb247Ci0gICAgTlNGb250KiBmb250ID0gbV9jbGllbnQtPm1lbnVTdHlsZSgp
LmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXROU0ZvbnQoKTsKKyAgICBOU0ZvbnQqIGZvbnQg
PSBtX2NsaWVudC0+bWVudVN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250KCkuZ2V0TlNGb250KCk7
CiAKICAgICAvLyBUaGVzZSB2YWx1ZXMgd2VyZSBib3Jyb3dlZCBmcm9tIEFwcEtpdCB0byBtYXRj
aCB0aGVpciBwbGFjZW1lbnQgb2YgdGhlIG1lbnUuCiAgICAgY29uc3QgaW50IHBvcE92ZXJIb3Jp
em9udGFsQWRqdXN0ID0gLTEwOwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJI
VE1MVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhU
TUxWaWV3Lm1tCShyZXZpc2lvbiAxNzg0OTYpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3
L1dlYkhUTUxWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC05Miw2ICs5Miw3IEBACiAjaW1wb3J0
IDxXZWJDb3JlL0V4Y2VwdGlvbkhhbmRsZXJzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0Zsb2F0UmVj
dC5oPgogI2ltcG9ydCA8V2ViQ29yZS9Gb2N1c0NvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPFdlYkNv
cmUvRm9udC5oPgogI2ltcG9ydCA8V2ViQ29yZS9Gb250Q2FjaGUuaD4KICNpbXBvcnQgPFdlYkNv
cmUvRnJhbWUuaD4KICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVMb2FkZXIuaD4KQEAgLTExMiw3ICsx
MTMsNiBAQAogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJXaWRnZXQuaD4KICNpbXBvcnQgPFdlYkNv
cmUvUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1NoYXJlZEJ1
ZmZlci5oPgotI2ltcG9ydCA8V2ViQ29yZS9TaW1wbGVGb250RGF0YS5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9TdHlsZVByb3BlcnRpZXMuaD4KICNpbXBvcnQgPFdlYkNvcmUvVGV4dC5oPgogI2ltcG9y
dCA8V2ViQ29yZS9UZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UuaD4KQEAgLTQ4NzgsOCArNDg3OCw4
IEBAIHN0YXRpYyBOU1N0cmluZyAqZm9udE5hbWVGb3JEZXNjcmlwdGlvbigKICAgICBmb250RGVz
Y3JpcHRpb24uc2V0SXNJdGFsaWMoaXRhbGljKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0V2Vp
Z2h0KGJvbGQgPyBGb250V2VpZ2h0OTAwIDogRm9udFdlaWdodDUwMCk7CiAgICAgZm9udERlc2Ny
aXB0aW9uLnNldFNwZWNpZmllZFNpemUocG9pbnRTaXplKTsKLSAgICBSZWZQdHI8U2ltcGxlRm9u
dERhdGE+IHNpbXBsZUZvbnREYXRhID0gZm9udENhY2hlKCkuZm9udEZvckZhbWlseShmb250RGVz
Y3JpcHRpb24sIGZhbWlseU5hbWUpOwotICAgIHJldHVybiBbc2ltcGxlRm9udERhdGEtPnBsYXRm
b3JtRGF0YSgpLm5zRm9udCgpIGZvbnROYW1lXTsKKyAgICBSZWZQdHI8Rm9udD4gZm9udCA9IGZv
bnRDYWNoZSgpLmZvbnRGb3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCBmYW1pbHlOYW1lKTsKKyAg
ICByZXR1cm4gW2ZvbnQtPnBsYXRmb3JtRGF0YSgpLm5zRm9udCgpIGZvbnROYW1lXTsKIH0KIAog
LSAodm9pZClfYWRkVG9TdHlsZTooRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqKXN0eWxlIGZvbnRB
OihOU0ZvbnQgKilhIGZvbnRCOihOU0ZvbnQgKiliCkBAIC01NDQyLDcgKzU0NDIsNyBAQCAtICh2
b2lkKV91cGRhdGVGb250UGFuZWwKICAgICBib29sIG11bHRpcGxlRm9udHMgPSBmYWxzZTsKICAg
ICBOU0ZvbnQgKmZvbnQgPSBuaWw7CiAgICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtz
ZWxmIF9mcmFtZV0pKSB7Ci0gICAgICAgIGlmIChjb25zdCBTaW1wbGVGb250RGF0YSogZmQgPSBj
b3JlRnJhbWUtPmVkaXRvcigpLmZvbnRGb3JTZWxlY3Rpb24obXVsdGlwbGVGb250cykpCisgICAg
ICAgIGlmIChjb25zdCBGb250KiBmZCA9IGNvcmVGcmFtZS0+ZWRpdG9yKCkuZm9udEZvclNlbGVj
dGlvbihtdWx0aXBsZUZvbnRzKSkKICAgICAgICAgICAgIGZvbnQgPSBmZC0+Z2V0TlNGb250KCk7
CiAgICAgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>244703</attachid>
            <date>2015-01-15 11:14:29 -0800</date>
            <delta_ts>2015-01-21 16:08:21 -0800</delta_ts>
            <desc>patch</desc>
            <filename>simplefontdata-rename-3.patch</filename>
            <type>text/plain</type>
            <size>490127</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3ODUxNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDE1LTAxLTE1ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgU2ltcGxlRm9udERh
dGEgdG8gRm9udAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTQwNDk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhlIGZhbGxiYWNrIHN1cHBvcnRpbmcgRm9udCB0eXBlIHdhcyByZW5hbWVkIEZvbnRDYXNj
YWRlLgorICAgICAgICBXZSBjYW4gbm93IHJlbmFtZSBTaW1wbGVGb250RGF0YSB0byBqdXN0IEZv
bnQgbWF0Y2hpbmcgdGhlIHVzdWFsIGRlZmluaXRpb24uCisKIDIwMTUtMDEtMTUgIE15bGVzIEMu
IE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAgICBodHRwL3Rlc3RzL21p
c2MvYWNpZDMuaHRtbCBpcyBmbGFrZXkgb24gTWF2ZXJpY2tzCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4
cC5pbgkocmV2aXNpb24gMTc4NTE1KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4J
KHdvcmtpbmcgY29weSkKQEAgLTQ2Nyw3ICs0NjcsNiBAQCBfX1pON1dlYkNvcmUxNFNlY3VyaXR5
UG9saWN5MjJnZW5lcmF0ZVJlCiBfX1pON1dlYkNvcmUxNFNlY3VyaXR5UG9saWN5MjdyZXNldE9y
aWdpbkFjY2Vzc1doaXRlbGlzdHNFdgogX19aTjdXZWJDb3JlMTRTZWN1cml0eVBvbGljeTI5YWRk
T3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnlFUktOU18xNFNlY3VyaXR5T3JpZ2luRVJLTjNXVEY2
U3RyaW5nRVM3X2IKIF9fWk43V2ViQ29yZTE0U2VjdXJpdHlQb2xpY3kzMnJlbW92ZU9yaWdpbkFj
Y2Vzc1doaXRlbGlzdEVudHJ5RVJLTlNfMTRTZWN1cml0eU9yaWdpbkVSS04zV1RGNlN0cmluZ0VT
N19iCi1fX1pON1dlYkNvcmUxNFNpbXBsZUZvbnREYXRhRDFFdgogX19aTjdXZWJDb3JlMTRTdWJm
cmFtZUxvYWRlcjEyYWxsb3dQbHVnaW5zRU5TXzI4UmVhc29uRm9yQ2FsbGluZ0FsbG93UGx1Z2lu
c0UKIF9fWk43V2ViQ29yZTE0VGlsZUNvbnRyb2xsZXIxNHNldFRpbGVzT3BhcXVlRWIKIF9fWk43
V2ViQ29yZTE0VGlsZUNvbnRyb2xsZXIxNWNvbnRhaW5lckxheWVyc0V2CkBAIC0xMTM0LDYgKzEx
MzMsNyBAQCBfX1pON1dlYkNvcmU0MGRlZmF1bHRUZXh0RW5jb2RpbmdOYW1lRm9yCiBfX1pON1dl
YkNvcmU0MHJlc3RyaWN0TWluaW11bVNjYWxlRmFjdG9yVG9WaWV3cG9ydFNpemVFUk5TXzE4Vmll
d3BvcnRBdHRyaWJ1dGVzRU5TXzdJbnRTaXplRWYKIF9fWk43V2ViQ29yZTQyVVJMQnlUcnVuY2F0
aW5nT25lQ2hhcmFjdGVyQmVmb3JlQ29tcG9uZW50RVA1TlNVUkwxOENGVVJMQ29tcG9uZW50VHlw
ZQogX19aTjdXZWJDb3JlNDdhdHRyaWJ1dGVkU3RyaW5nQnlTdHJpcHBpbmdBdHRhY2htZW50Q2hh
cmFjdGVyc0VQMThOU0F0dHJpYnV0ZWRTdHJpbmcKK19fWk43V2ViQ29yZTRGb250RDFFdgogX19a
TjdXZWJDb3JlNEljb24xOGNyZWF0ZUljb25Gb3JGaWxlc0VSS04zV1RGNlZlY3RvcklOUzFfNlN0
cmluZ0VMbTBFTlMxXzE1Q3Jhc2hPbk92ZXJmbG93RUVFCiBfX1pON1dlYkNvcmU0SWNvbkQxRXYK
IF9fWk43V2ViQ29yZTROb2RlMTByZW5kZXJSZWN0RVBiCkBAIC0xNDQ0LDExICsxNDQ0LDExIEBA
IF9fWk43V2ViQ29yZTlGbG9hdFJlY3RDMUVSS05TXzdJbnRSZWN0RQogX19aTjdXZWJDb3JlOUZs
b2F0U2l6ZUMxRVJLNkNHU2l6ZQogX19aTjdXZWJDb3JlOUZsb2F0U2l6ZUMxRVJLTlNfN0ludFNp
emVFCiBfX1pON1dlYkNvcmU5Rm9udENhY2hlMTBpbnZhbGlkYXRlRXYKLV9fWk43V2ViQ29yZTlG
b250Q2FjaGUxM2ZvbnREYXRhQ291bnRFdgogX19aTjdXZWJDb3JlOUZvbnRDYWNoZTEzZm9udEZv
ckZhbWlseUVSS05TXzE1Rm9udERlc2NyaXB0aW9uRVJLTjNXVEYxMkF0b21pY1N0cmluZ0ViCi1f
X1pON1dlYkNvcmU5Rm9udENhY2hlMjFpbmFjdGl2ZUZvbnREYXRhQ291bnRFdgorX19aTjdXZWJD
b3JlOUZvbnRDYWNoZTE3aW5hY3RpdmVGb250Q291bnRFdgogX19aTjdXZWJDb3JlOUZvbnRDYWNo
ZTIxcHVyZ2VJbmFjdGl2ZUZvbnREYXRhRWkKIF9fWk43V2ViQ29yZTlGb250Q2FjaGUyOXB1cmdl
SW5hY3RpdmVGb250RGF0YUlmTmVlZGVkRXYKK19fWk43V2ViQ29yZTlGb250Q2FjaGU5Zm9udENv
dW50RXYKIF9fWk43V2ViQ29yZTlGcmFtZVRyZWUxMWFwcGVuZENoaWxkRU4zV1RGMTBQYXNzUmVm
UHRySU5TXzVGcmFtZUVFRQogX19aTjdXZWJDb3JlOUZyYW1lVHJlZTdzZXROYW1lRVJLTjNXVEYx
MkF0b21pY1N0cmluZ0UKIF9fWk43V2ViQ29yZTlGcmFtZVRyZWU5Y2xlYXJOYW1lRXYKQEAgLTE1
ODcsOCArMTU4Nyw4IEBAIF9fWk5LM1dURjZTdHJpbmcxNGNyZWF0ZUNGU3RyaW5nRXYKIF9fWk5L
N1dlYkNvcmUxMENyZWRlbnRpYWwxMm5zQ3JlZGVudGlhbEV2CiBfX1pOSzdXZWJDb3JlMTBDcmVk
ZW50aWFsN2lzRW1wdHlFdgogX19aTks3V2ViQ29yZTEwRmxvYXRQb2ludGN2N0NHUG9pbnRFdgot
X19aTks3V2ViQ29yZTEwRm9udFJhbmdlczIwZm9udERhdGFGb3JDaGFyYWN0ZXJFaQotX19aTks3
V2ViQ29yZTEwRm9udFJhbmdlczIxZm9udERhdGFGb3JGaXJzdFJhbmdlRXYKK19fWk5LN1dlYkNv
cmUxMEZvbnRSYW5nZXMxNmZvbnRGb3JDaGFyYWN0ZXJFaQorX19aTks3V2ViQ29yZTEwRm9udFJh
bmdlczE3Zm9udEZvckZpcnN0UmFuZ2VFdgogX19aTks3V2ViQ29yZTEwTGF5b3V0UmVjdDhjb250
YWluc0VSS1MwXwogX19aTks3V2ViQ29yZTEwUGx1Z2luRGF0YTE2c3VwcG9ydHNNaW1lVHlwZUVS
S04zV1RGNlN0cmluZ0VOUzBfMThBbGxvd2VkUGx1Z2luVHlwZXNFCiBfX1pOSzdXZWJDb3JlMTBS
ZW5kZXJUZXh0MTZmaXJzdFJ1bkxvY2F0aW9uRXYKQEAgLTE2MTgsNyArMTYxOCw3IEBAIF9fWk5L
N1dlYkNvcmUxMFRpbWVSYW5nZXMzZW5kRWpSaQogX19aTks3V2ViQ29yZTEwVGltZVJhbmdlczRj
b3B5RXYKIF9fWk5LN1dlYkNvcmUxMFRpbWVSYW5nZXM1c3RhcnRFalJpCiBfX1pOSzdXZWJDb3Jl
MTBUaW1lUmFuZ2VzNmxlbmd0aEV2Ci1fX1pOSzdXZWJDb3JlMTFGb250Q2FzY2FkZTV3aWR0aEVS
S05TXzdUZXh0UnVuRVBOM1dURjdIYXNoU2V0SVBLTlNfMTRTaW1wbGVGb250RGF0YUVOUzRfN1B0
ckhhc2hJUzhfRUVOUzRfMTBIYXNoVHJhaXRzSVM4X0VFRUVQTlNfMTNHbHlwaE92ZXJmbG93RQor
X19aTks3V2ViQ29yZTExRm9udENhc2NhZGU1d2lkdGhFUktOU183VGV4dFJ1bkVQTjNXVEY3SGFz
aFNldElQS05TXzRGb250RU5TNF83UHRySGFzaElTOF9FRU5TNF8xMEhhc2hUcmFpdHNJUzhfRUVF
RVBOU18xM0dseXBoT3ZlcmZsb3dFCiBfX1pOSzdXZWJDb3JlMTFGb250Q2FzY2FkZThkcmF3VGV4
dEVQTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU183VGV4dFJ1bkVSS05TXzEwRmxvYXRQb2ludEVp
aU5TMF8yNEN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbkUKIF9fWk5LN1dlYkNvcmUxMUZvbnRDYXNj
YWRlZXFFUktTMF8KIF9fWk5LN1dlYkNvcmUxMUZyYW1lTG9hZGVyMTBpc0NvbXBsZXRlRXYKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDE3ODUxNSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNjYwLDcgKzY2MCw3IEBACiAJCTE1
Qzc3MDk0MTAwRDNDQTgwMDVCQTI2NyAvKiBKU1ZhbGlkaXR5U3RhdGUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTVDNzcwOTIxMDBEM0NBODAwNUJB
MjY3IC8qIEpTVmFsaWRpdHlTdGF0ZS5jcHAgKi87IH07CiAJCTE1Qzc3MEE1MTAwRDQxQ0QwMDVC
QTI2NyAvKiBET01WYWxpZGl0eVN0YXRlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMTVDNzcwQTMxMDBENDFDRDAwNUJBMjY3IC8qIERPTVZhbGlkaXR5
U3RhdGUubW0gKi87IH07CiAJCTE1Qzc3MEE2MTAwRDQxQ0QwMDVCQTI2NyAvKiBET01WYWxpZGl0
eVN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
NUM3NzBBNDEwMEQ0MUNEMDA1QkEyNjcgLyogRE9NVmFsaWRpdHlTdGF0ZS5oICovOyB9OwotCQkx
NjNFODhGNzExOEEzOUQyMDBFRDkyMzEgLyogU2ltcGxlRm9udERhdGFDb3JlVGV4dC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNjNFODhGNTExOEEz
OUQyMDBFRDkyMzEgLyogU2ltcGxlRm9udERhdGFDb3JlVGV4dC5jcHAgKi87IH07CisJCTE2M0U4
OEY3MTE4QTM5RDIwMEVEOTIzMSAvKiBGb250Q29yZVRleHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTYzRTg4RjUxMThBMzlEMjAwRUQ5MjMxIC8q
IEZvbnRDb3JlVGV4dC5jcHAgKi87IH07CiAJCTE4NUJDRjI4MEYzMjc5Q0UwMDBFQTI2MiAvKiBU
aHJlYWRUaW1lcnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMTg1QkNGMjYwRjMyNzlDRTAwMEVBMjYyIC8qIFRocmVhZFRpbWVycy5jcHAgKi87IH07
CiAJCTE4NUJDRjI5MEYzMjc5Q0UwMDBFQTI2MiAvKiBUaHJlYWRUaW1lcnMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE4NUJDRjI3MEYzMjc5Q0UwMDBF
QTI2MiAvKiBUaHJlYWRUaW1lcnMuaCAqLzsgfTsKIAkJMTg4NjA0QjMwRjJFNjU0QTAwMEI2NDQz
IC8qIERPTVRpbWVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDE4ODYwNEIxMEYyRTY1NEEwMDBCNjQ0MyAvKiBET01UaW1lci5jcHAgKi87IH07CkBA
IC0xMzg4LDcgKzEzODgsNyBAQAogCQkzN0FDQ0U0MjBEQTI5ODBGMDA4OUU2MDIgLyogRm9udFJl
bmRlcmluZ01vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDM3QUNDRTQxMERBMjk4MEYwMDg5RTYwMiAvKiBGb250UmVuZGVyaW5nTW9kZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTM3QUNDRjY5MERB
NDE0RTcwMDg5RTYwMiAvKiBGb250RGVzY3JpcHRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzdBQ0NFNjIwREEyQUE5NjAwODlFNjAyIC8qIEZv
bnREZXNjcmlwdGlvbi5jcHAgKi87IH07CiAJCTM3QkFBRTU4MTk4MEQxREQwMDVERkU3MSAvKiBQ
cm90ZWN0aW9uU3BhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDM3QkFBRTU3MTk4MEQxREQwMDVERkU3MSAvKiBQcm90ZWN0aW9uU3BhY2UuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkzN0MyMzYwQjEw
OTdFREVEMDBFRjlGNzIgLyogRm9udENvbXBsZXhUZXh0TWFjLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3QzIzNjBBMTA5N0VERUQwMEVGOUY3MiAv
KiBGb250Q29tcGxleFRleHRNYWMuY3BwICovOyB9OworCQkzN0MyMzYwQjEwOTdFREVEMDBFRjlG
NzIgLyogRm9udENhc2NhZGVDb21wbGV4VGV4dE1hYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0MyMzYwQTEwOTdFREVEMDBFRjlGNzIgLyogRm9u
dENhc2NhZGVDb21wbGV4VGV4dE1hYy5jcHAgKi87IH07CiAJCTM3QzIzNjEwMTA5N0VFNzcwMEVG
OUY3MiAvKiBDb21wbGV4VGV4dENvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzdDMjM2MEUxMDk3RUU3NzAwRUY5RjcyIC8qIENvbXBs
ZXhUZXh0Q29udHJvbGxlci5jcHAgKi87IH07CiAJCTM3QzIzNjExMTA5N0VFNzcwMEVGOUY3MiAv
KiBDb21wbGV4VGV4dENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDM3QzIzNjBGMTA5N0VFNzcwMEVGOUY3MiAvKiBDb21wbGV4VGV4dENv
bnRyb2xsZXIuaCAqLzsgfTsKIAkJMzdDMjM4MjIxMDk4Qzg0MjAwRUY5RjcyIC8qIENvbXBsZXhU
ZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMzdDMjM4MjAxMDk4Qzg0MjAwRUY5RjcyIC8qIENvbXBsZXhUZXh0Q29u
dHJvbGxlckNvcmVUZXh0Lm1tICovOyB9OwpAQCAtMTQwMSw3ICsxNDAxLDcgQEAKIAkJMzdERENE
QTcxMzg0NTAxQzAwMDhCNzkzIC8qIE1IVE1MUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0REQ0RBMzEzODQ1MDFDMDAwOEI3OTMgLyogTUhU
TUxQYXJzZXIuaCAqLzsgfTsKIAkJMzdFMzUyNEIxMjQ1MEM1MjAwQkFGNUQ5IC8qIElucHV0VHlw
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0Uz
NTI0QTEyNDUwQzUyMDBCQUY1RDkgLyogSW5wdXRUeXBlLmNwcCAqLzsgfTsKIAkJMzdFMzUyNEQx
MjQ1MEM2NjAwQkFGNUQ5IC8qIElucHV0VHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMzdFMzUyNEMxMjQ1MEM2NjAwQkFGNUQ5IC8qIElucHV0VHlw
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTM3
RTY1OTUwMTYzQjEwQzIwMEVCNDU3NCAvKiBTaW1wbGVGb250RGF0YUlPUy5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3RTY1OTRGMTYzQjEwQzIwMEVC
NDU3NCAvKiBTaW1wbGVGb250RGF0YUlPUy5tbSAqLzsgfTsKKwkJMzdFNjU5NTAxNjNCMTBDMjAw
RUI0NTc0IC8qIEZvbnRJT1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAzN0U2NTk0RjE2M0IxMEMyMDBFQjQ1NzQgLyogRm9udElPUy5tbSAqLzsgfTsK
IAkJMzdGNTY3Q0UxNjUzNThGNDAwRERFOTJCIC8qIFBvcHVwT3BlbmluZ09ic2VydmVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzcyQjA5NTE2NTM1
ODU2MDAwQTQ5Q0EgLyogUG9wdXBPcGVuaW5nT2JzZXJ2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkzN0Y1N0FCOTFBNTA3MjY5MDA4NzZGOTgg
LyogQWNjZXNzaWJpbGl0eUFSSUFHcmlkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDI5ODFDQTlEMTMxODIyRUMwMEQxMkYyQSAvKiBBY2Nlc3NpYmls
aXR5QVJJQUdyaWQuY3BwICovOyB9OwogCQkzN0Y1N0FCQTFBNTA3MjZGMDA4NzZGOTggLyogQWNj
ZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyOTgxQ0E5RTEzMTgyMkVDMDBEMTJGMkEgLyogQWNjZXNzaWJpbGl0
eUFSSUFHcmlkQ2VsbC5jcHAgKi87IH07CkBAIC0yMzQwLDcgKzIzNDAsNyBAQAogCQk3MjRFRDMy
QzFBM0E3RTU0MDBGNUYxM0MgLyogRVhUQmxlbmRNaW5NYXguY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI0RUQzMjkxQTNBN0U1NDAwRjVGMTNDIC8q
IEVYVEJsZW5kTWluTWF4LmNwcCAqLzsgfTsKIAkJNzI0RUQzMzExQTNBOEIyMzAwRjVGMTNDIC8q
IEpTRVhUQmxlbmRNaW5NYXguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzI0RUQzMkYxQTNBOEIyMzAwRjVGMTNDIC8qIEpTRVhUQmxlbmRNaW5NYXgu
Y3BwICovOyB9OwogCQk3MjRFRDMzMjFBM0E4QjIzMDBGNUYxM0MgLyogSlNFWFRCbGVuZE1pbk1h
eC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI0RUQz
MzAxQTNBOEIyMzAwRjVGMTNDIC8qIEpTRVhUQmxlbmRNaW5NYXguaCAqLzsgfTsKLQkJNzI2MjZF
MDIwRUYwMjJGRTAwQTA3RTIwIC8qIEZvbnRGYXN0UGF0aC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjYyNkUwMTBFRjAyMkZFMDBBMDdFMjAgLyog
Rm9udEZhc3RQYXRoLmNwcCAqLzsgfTsKKwkJNzI2MjZFMDIwRUYwMjJGRTAwQTA3RTIwIC8qIEZv
bnRDYXNjYWRlRmFzdFBhdGguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzI2MjZFMDEwRUYwMjJGRTAwQTA3RTIwIC8qIEZvbnRDYXNjYWRlRmFzdFBh
dGguY3BwICovOyB9OwogCQk3MjdBRkVENDFBMkVBNkFFMDAwNDQyRTggLyogRVhUc1JHQi5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjdBRkVEMTFB
MkVBNkEwMDAwNDQyRTggLyogRVhUc1JHQi5jcHAgKi87IH07CiAJCTcyRTQxNzYzMUEyRThEMkYw
MDRDNTYyQSAvKiBKU0VYVHNSR0IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNzJFNDE3NjExQTJFOEQyRjAwNEM1NjJBIC8qIEpTRVhUc1JHQi5jcHAg
Ki87IH07CiAJCTcyRjFBREEyMUEzOTA0REMwMDAxNEUxOCAvKiBFWFRGcmFnRGVwdGguY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJGMUFEOUYxQTM5
MDRDMzAwMDE0RTE4IC8qIEVYVEZyYWdEZXB0aC5jcHAgKi87IH07CkBAIC00NjY5LDggKzQ2Njks
OCBAQAogCQlCMkFGRkM3QzBEMDBBNUMxMDAzMDA3NEQgLyogRm9udENhY2hlTWFjLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJBRkZDNzQwRDAwQTVD
MTAwMzAwNzREIC8qIEZvbnRDYWNoZU1hYy5tbSAqLzsgfTsKIAkJQjJBRkZDN0QwRDAwQTVDMTAw
MzAwNzREIC8qIEZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJBRkZDNzUwRDAwQTVDMTAwMzAwNzREIC8qIEZv
bnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwICovOyB9OwogCQlCMkFGRkM3RTBEMDBBNUMxMDAzMDA3
NEQgLyogRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQjJBRkZDNzYwRDAwQTVDMTAwMzAwNzREIC8qIEZvbnRDdXN0
b21QbGF0Zm9ybURhdGEuaCAqLzsgfTsKLQkJQjJBRkZDN0YwRDAwQTVDMTAwMzAwNzREIC8qIFNp
bXBsZUZvbnREYXRhTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQjJBRkZDNzcwRDAwQTVDMTAwMzAwNzREIC8qIFNpbXBsZUZvbnREYXRhTWFjLm1t
ICovOyB9OwotCQlCMkFGRkM4MDBEMDBBNUMxMDAzMDA3NEQgLyogRm9udE1hYy5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQUZGQzc4MEQwMEE1QzEw
MDMwMDc0RCAvKiBGb250TWFjLm1tICovOyB9OworCQlCMkFGRkM3RjBEMDBBNUMxMDAzMDA3NEQg
LyogRm9udE1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEIyQUZGQzc3MEQwMEE1QzEwMDMwMDc0RCAvKiBGb250TWFjLm1tICovOyB9OworCQlCMkFG
RkM4MDBEMDBBNUMxMDAzMDA3NEQgLyogRm9udENhc2NhZGVNYWMubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkFGRkM3ODBEMDBBNUMxMDAzMDA3NEQg
LyogRm9udENhc2NhZGVNYWMubW0gKi87IH07CiAJCUIyQUZGQzgzMEQwMEE1QzEwMDMwMDc0RCAv
KiBHbHlwaFBhZ2VNYWMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQjJBRkZDN0IwRDAwQTVDMTAwMzAwNzREIC8qIEdseXBoUGFnZU1hYy5jcHAgKi87
IH07CiAJCUIyQUZGQzk3MEQwMEE1REYwMDMwMDc0RCAvKiBUZXh0Qm91bmRhcmllcy5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQUZGQzhDMEQwMEE1
REYwMDMwMDc0RCAvKiBUZXh0Qm91bmRhcmllcy5tbSAqLzsgfTsKIAkJQjJBRkZDOTgwRDAwQTVE
RjAwMzAwNzREIC8qIFRleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VNYWMubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkFGRkM4RDBEMDBBNURGMDAz
MDA3NEQgLyogVGV4dEJyZWFrSXRlcmF0b3JJbnRlcm5hbElDVU1hYy5tbSAqLzsgfTsKQEAgLTQ3
MDgsOCArNDcwOCw4IEBACiAJCUIyQzNEQTYxMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FzY2Fk
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RB
NTAwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYXNjYWRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjJDM0RBNjIwRDAwNkNENjAwRUY2RjI2IC8q
IEZvbnRDYWNoZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCMkMzREE1MTBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhY2hlLmNwcCAqLzsgfTsKIAkJ
QjJDM0RBNjMwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBNTIwRDAwNkNENjAwRUY2RjI2IC8q
IEZvbnRDYWNoZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07Ci0JCUIyQzNEQTY0MEQwMDZDRDYwMEVGNkYyNiAvKiBTaW1wbGVGb250RGF0YS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkMzREE1MzBEMDA2
Q0Q2MDBFRjZGMjYgLyogU2ltcGxlRm9udERhdGEuY3BwICovOyB9OwotCQlCMkMzREE2NTBEMDA2
Q0Q2MDBFRjZGMjYgLyogU2ltcGxlRm9udERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNEQTU0MEQwMDZDRDYwMEVGNkYyNiAvKiBTaW1wbGVG
b250RGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCUIyQzNEQTY0MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNEQTUzMEQwMDZDRDYwMEVGNkYyNiAv
KiBGb250LmNwcCAqLzsgfTsKKwkJQjJDM0RBNjUwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNEQTU0MEQw
MDZDRDYwMEVGNkYyNiAvKiBGb250LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJQjJDM0RBNjYwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnREZXNjcmlw
dGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJD
M0RBNTUwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnREZXNjcmlwdGlvbi5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIyQzNEQTY3MEQwMDZDRDYwMEVG
NkYyNiAvKiBGb250R2x5cGhzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEIyQzNEQTU2MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250R2x5cGhzLmNwcCAq
LzsgfTsKIAkJQjJDM0RBNjgwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRHbHlwaHMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNEQTU3MEQwMDZDRDYw
MEVGNkYyNiAvKiBGb250R2x5cGhzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKQEAgLTc2MzEsNyArNzYzMSw3IEBACiAJCTE1Qzc3MDkyMTAwRDNDQTgw
MDVCQTI2NyAvKiBKU1ZhbGlkaXR5U3RhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNWYWxpZGl0eVN0YXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMTVDNzcwQTMxMDBENDFDRDAwNUJBMjY3IC8qIERPTVZhbGlkaXR5U3RhdGUubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBET01WYWxpZGl0eVN0YXRlLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNUM3NzBBNDEwMEQ0MUNEMDA1QkEyNjcg
LyogRE9NVmFsaWRpdHlTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBE
T01WYWxpZGl0eVN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTE2M0U4OEY1
MTE4QTM5RDIwMEVEOTIzMSAvKiBTaW1wbGVGb250RGF0YUNvcmVUZXh0LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpbXBsZUZvbnREYXRhQ29yZVRleHQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNjNFODhGNTExOEEzOUQyMDBFRDkyMzEgLyog
Rm9udENvcmVUZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZv
bnRDb3JlVGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE4NUJDRjI2MEYz
Mjc5Q0UwMDBFQTI2MiAvKiBUaHJlYWRUaW1lcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gVGhyZWFkVGltZXJzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMTg1QkNGMjcwRjMyNzlDRTAwMEVBMjYyIC8qIFRocmVhZFRpbWVycy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJlYWRUaW1lcnMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMTg4NjA0QjEwRjJFNjU0QTAwMEI2NDQzIC8qIERPTVRpbWVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERPTVRpbWVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTg0MzEsNyArODQzMSw3IEBACiAJCTM3QUNDRTQxMERB
Mjk4MEYwMDg5RTYwMiAvKiBGb250UmVuZGVyaW5nTW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBGb250UmVuZGVyaW5nTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkzN0FDQ0U2MjBEQTJBQTk2MDA4OUU2MDIgLyogRm9udERlc2NyaXB0aW9uLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnREZXNjcmlwdGlvbi5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3QkFBRTU3MTk4MEQxREQwMDVERkU3MSAv
KiBQcm90ZWN0aW9uU3BhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJv
dGVjdGlvblNwYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTM3QzIzNjBBMTA5
N0VERUQwMEVGOUY3MiAvKiBGb250Q29tcGxleFRleHRNYWMuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRm9udENvbXBsZXhUZXh0TWFjLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMzdDMjM2MEExMDk3RURFRDAwRUY5RjcyIC8qIEZvbnRDYXNjYWRl
Q29tcGxleFRleHRNYWMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Rm9udENhc2NhZGVDb21wbGV4VGV4dE1hYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTM3QzIzNjBFMTA5N0VFNzcwMEVGOUY3MiAvKiBDb21wbGV4VGV4dENvbnRyb2xsZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29tcGxleFRleHRDb250cm9s
bGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzdDMjM2MEYxMDk3RUU3NzAw
RUY5RjcyIC8qIENvbXBsZXhUZXh0Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBDb21wbGV4VGV4dENvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMzdDMjM4MjAxMDk4Qzg0MjAwRUY5RjcyIC8qIENvbXBsZXhUZXh0Q29udHJvbGxl
ckNvcmVUZXh0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQ29t
cGxleFRleHRDb250cm9sbGVyQ29yZVRleHQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHhj
TGFuZ3VhZ2VTcGVjaWZpY2F0aW9uSWRlbnRpZmllciA9IHhjb2RlLmxhbmcub2JqY3BwOyB9OwpA
QCAtODQ0NCw3ICs4NDQ0LDcgQEAKIAkJMzdERENEQTMxMzg0NTAxQzAwMDhCNzkzIC8qIE1IVE1M
UGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1IVE1MUGFyc2VyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3RTM1MjRBMTI0NTBDNTIwMEJBRjVEOSAv
KiBJbnB1dFR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5w
dXRUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzdFMzUyNEMxMjQ1MEM2
NjAwQkFGNUQ5IC8qIElucHV0VHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJbnB1dFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMzdFNjU5NEYxNjNC
MTBDMjAwRUI0NTc0IC8qIFNpbXBsZUZvbnREYXRhSU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gU2ltcGxlRm9udERhdGFJT1MubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTM3RTY1OTRGMTYzQjEwQzIwMEVCNDU3NCAvKiBGb250SU9TLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRm9udElPUy5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzdGODE4RkIwRDY1NzYwNjAwNUUxRjA1IC8qIFdlYkNv
cmVVUkxSZXNwb25zZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb3Jl
VVJMUmVzcG9uc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzdGODE4RkMwRDY1
NzYwNjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxSZXNwb25zZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkNvcmVVUkxSZXNwb25zZS5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMzdGQzk2REExMTA0RUQ3MTAwM0UxRkFEIC8qIFRyYWlsaW5nRmxv
YXRzUm9vdElubGluZUJveC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmFp
bGluZ0Zsb2F0c1Jvb3RJbmxpbmVCb3guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTk0NzgsNyArOTQ3OCw3IEBACiAJCTcyNEVEMzJCMUEzQTdFNTQwMEY1RjEzQyAvKiBFWFRCbGVu
ZE1pbk1heC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gRVhUQmxlbmRNaW5NYXguaWRsOyBw
YXRoID0gY2FudmFzL0VYVEJsZW5kTWluTWF4LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNzI0RUQzMkYxQTNBOEIyMzAwRjVGMTNDIC8qIEpTRVhUQmxlbmRNaW5NYXguY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNFWFRCbGVuZE1pbk1heC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNEVEMzMwMUEzQThCMjMwMEY1RjEzQyAv
KiBKU0VYVEJsZW5kTWluTWF4LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
RVhUQmxlbmRNaW5NYXguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNzI2MjZFMDEw
RUYwMjJGRTAwQTA3RTIwIC8qIEZvbnRGYXN0UGF0aC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBGb250RmFzdFBhdGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3MjYyNkUwMTBFRjAyMkZFMDBBMDdFMjAgLyogRm9udENhc2NhZGVGYXN0UGF0aC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb250Q2FzY2FkZUZhc3RQ
YXRoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI3QUZFRDExQTJFQTZBMDAw
MDQ0MkU4IC8qIEVYVHNSR0IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gRVhUc1JHQi5jcHA7IHBhdGggPSBjYW52YXMvRVhUc1JHQi5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTcyN0FGRUQyMUEyRUE2QTAwMDA0NDJFOCAvKiBFWFRzUkdCLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEVYVHNSR0IuaDsgcGF0aCA9IGNhbnZhcy9F
WFRzUkdCLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyN0FGRUQzMUEyRUE2QTAw
MDA0NDJFOCAvKiBFWFRzUkdCLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBFWFRzUkdCLmlk
bDsgcGF0aCA9IGNhbnZhcy9FWFRzUkdCLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTEyMDQzLDggKzEyMDQzLDggQEAKIAkJQjJBRkZDNzQwRDAwQTVDMTAwMzAwNzREIC8qIEZv
bnRDYWNoZU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBG
b250Q2FjaGVNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQUZGQzc1MEQw
MEE1QzEwMDMwMDc0RCAvKiBGb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJBRkZDNzYwRDAwQTVDMTAwMzAwNzREIC8qIEZv
bnRDdXN0b21QbGF0Zm9ybURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
QjJBRkZDNzcwRDAwQTVDMTAwMzAwNzREIC8qIFNpbXBsZUZvbnREYXRhTWFjLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNpbXBsZUZvbnREYXRhTWFjLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCMkFGRkM3ODBEMDBBNUMxMDAzMDA3NEQgLyog
Rm9udE1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBGb250
TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCMkFGRkM3NzBEMDBBNUMxMDAz
MDA3NEQgLyogRm9udE1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBGb250TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCMkFGRkM3ODBE
MDBBNUMxMDAzMDA3NEQgLyogRm9udENhc2NhZGVNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gRm9udENhc2NhZGVNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUIyQUZGQzdCMEQwMEE1QzEwMDMwMDc0RCAvKiBHbHlwaFBhZ2VNYWMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdseXBoUGFnZU1hYy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQUZGQzg1MEQwMEE1REYwMDMwMDc0RCAv
KiBjaGFyYWN0ZXItc2V0cy50eHQgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9ICJjaGFyYWN0ZXIt
c2V0cy50eHQiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkFGRkM4NjBEMDBBNURG
MDAzMDA3NEQgLyogbWFjLWVuY29kaW5ncy50eHQgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9ICJt
YWMtZW5jb2RpbmdzLnR4dCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjA4NSw4
ICsxMjA4NSw4IEBACiAJCUIyQzNEQTUwMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FzY2FkZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9udENhc2NhZGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJDM0RBNTEwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRD
YWNoZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udENhY2hl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJDM0RBNTIwRDAwNkNENjAwRUY2
RjI2IC8qIEZvbnRDYWNoZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9u
dENhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyQzNEQTUzMEQwMDZDRDYw
MEVGNkYyNiAvKiBTaW1wbGVGb250RGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gU2ltcGxlRm9udERhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlCMkMzREE1NDBEMDA2Q0Q2MDBFRjZGMjYgLyogU2ltcGxlRm9udERhdGEuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpbXBsZUZvbnREYXRhLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUIyQzNEQTUzMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb250LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjJDM0RBNTQwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQjJDM0RBNTUwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnREZXNjcmlwdGlv
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9udERlc2NyaXB0aW9uLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQzNEQTU2MEQwMDZDRDYwMEVGNkYyNiAv
KiBGb250R2x5cGhzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBG
b250R2x5cGhzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJDM0RBNTcwRDAw
NkNENjAwRUY2RjI2IC8qIEZvbnRHbHlwaHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEZvbnRHbHlwaHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1Njc4
LDExICsxNTY3OCwxMSBAQAogCQkJCTJEMjlFQ0M5MTkyRjFGMUQwMDk4NEI3OCAvKiBEaXNwbGF5
UmVmcmVzaE1vbml0b3JJT1MuaCAqLywKIAkJCQkwRjk3QTY1NzE1NURBODFFMDBGQURENEMgLyog
RGlzcGxheVJlZnJlc2hNb25pdG9ySU9TLm1tICovLAogCQkJCTM3MjdERkQ0MTQyQUFFNDUwMEQ0
NDlDQiAvKiBGb250Q2FjaGVJT1MubW0gKi8sCisJCQkJMzdFNjU5NEYxNjNCMTBDMjAwRUI0NTc0
IC8qIEZvbnRJT1MubW0gKi8sCiAJCQkJQzU4MzYxQTcxNzQ0NTIzRjAwMTczNTExIC8qIEZvbnRT
ZXJ2aWNlc0lPUy5oICovLAogCQkJCUM1ODM2MUE4MTc0NDUyM0YwMDE3MzUxMSAvKiBGb250U2Vy
dmljZXNJT1MubW0gKi8sCiAJCQkJMzFBQjRGRkYxMjI4NzhBMjAwMUE3REIwIC8qIEdyYXBoaWNz
Q29udGV4dDNESU9TLmggKi8sCiAJCQkJRkVEMTNEM0YwQ0VBOTM5NDAwRDg5NDY2IC8qIEljb25J
T1MubW0gKi8sCi0JCQkJMzdFNjU5NEYxNjNCMTBDMjAwRUI0NTc0IC8qIFNpbXBsZUZvbnREYXRh
SU9TLm1tICovLAogCQkJCUNFRUM2MDM0MTg3REQ5NjIwMDNFNDNCQiAvKiBUZXh0VHJhY2tSZXBy
ZXNlbnRhdGlvbklPUy5oICovLAogCQkJCUNEQ0E4Mjk0MTY3OTEwMEYwMDg3NTcxNCAvKiBUZXh0
VHJhY2tSZXByZXNlbnRhdGlvbklPUy5tbSAqLywKIAkJCSk7CkBAIC0yMDM2MiwxMCArMjAzNjIs
MTIgQEAKIAkJCQlCMjc1MzU0QzBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRSZWN0TWFjLm1tICov
LAogCQkJCUIyNzUzNTREMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFNpemVNYWMubW0gKi8sCiAJ
CQkJQjJBRkZDNzQwRDAwQTVDMTAwMzAwNzREIC8qIEZvbnRDYWNoZU1hYy5tbSAqLywKLQkJCQkz
N0MyMzYwQTEwOTdFREVEMDBFRjlGNzIgLyogRm9udENvbXBsZXhUZXh0TWFjLmNwcCAqLywKKwkJ
CQkzN0MyMzYwQTEwOTdFREVEMDBFRjlGNzIgLyogRm9udENhc2NhZGVDb21wbGV4VGV4dE1hYy5j
cHAgKi8sCisJCQkJMTYzRTg4RjUxMThBMzlEMjAwRUQ5MjMxIC8qIEZvbnRDb3JlVGV4dC5jcHAg
Ki8sCiAJCQkJQjJBRkZDNzUwRDAwQTVDMTAwMzAwNzREIC8qIEZvbnRDdXN0b21QbGF0Zm9ybURh
dGEuY3BwICovLAogCQkJCUIyQUZGQzc2MEQwMEE1QzEwMDMwMDc0RCAvKiBGb250Q3VzdG9tUGxh
dGZvcm1EYXRhLmggKi8sCi0JCQkJQjJBRkZDNzgwRDAwQTVDMTAwMzAwNzREIC8qIEZvbnRNYWMu
bW0gKi8sCisJCQkJQjJBRkZDNzgwRDAwQTVDMTAwMzAwNzREIC8qIEZvbnRDYXNjYWRlTWFjLm1t
ICovLAorCQkJCUIyQUZGQzc3MEQwMEE1QzEwMDMwMDc0RCAvKiBGb250TWFjLm1tICovLAogCQkJ
CUIyQUZGQzdCMEQwMEE1QzEwMDMwMDc0RCAvKiBHbHlwaFBhZ2VNYWMuY3BwICovLAogCQkJCTQ5
RkZCRjFDMTFDODU1MEUwMDZBNzExOCAvKiBHcmFwaGljc0NvbnRleHQzRE1hYy5tbSAqLywKIAkJ
CQlCMjc3QjQwMzBCMjJGMzdDMDAwNEJFQzYgLyogR3JhcGhpY3NDb250ZXh0TWFjLm1tICovLApA
QCAtMjAzODAsOCArMjAzODIsNiBAQAogCQkJCUNENjBDMEM1MTkzRTg3QzcwMDNDNjU2QiAvKiBN
ZWRpYVRpbWVRVEtpdC5oICovLAogCQkJCUNENjBDMEM0MTkzRTg3QzcwMDNDNjU2QiAvKiBNZWRp
YVRpbWVRVEtpdC5tbSAqLywKIAkJCQkyRDZFNDY4MjE3RDY2MEY1MDBFQ0Y4QkIgLyogUERGRG9j
dW1lbnRJbWFnZU1hYy5tbSAqLywKLQkJCQkxNjNFODhGNTExOEEzOUQyMDBFRDkyMzEgLyogU2lt
cGxlRm9udERhdGFDb3JlVGV4dC5jcHAgKi8sCi0JCQkJQjJBRkZDNzcwRDAwQTVDMTAwMzAwNzRE
IC8qIFNpbXBsZUZvbnREYXRhTWFjLm1tICovLAogCQkJCTQ5RkZCRjNEMTFDOTNFRTMwMDZBNzEx
OCAvKiBXZWJHTExheWVyLmggKi8sCiAJCQkJNDlGRkJGM0UxMUM5M0VFMzAwNkE3MTE4IC8qIFdl
YkdMTGF5ZXIubW0gKi8sCiAJCQkJMEZDRjMzMkIwRjJCOUEyNTAwNEI2Nzk1IC8qIFdlYkxheWVy
LmggKi8sCkBAIC0yMDQ0MiwxMSArMjA0NDIsMTMgQEAKIAkJCQlCMjc1MzUzRjBCMDUzODE0MDAy
Q0U2NEYgLyogRmxvYXRTaXplLmggKi8sCiAJCQkJNThDRDM1Q0ExOEVCNEMzOTAwQjlGM0FDIC8q
IEZsb2F0U2l6ZUhhc2guaCAqLywKIAkJCQlCQ0I5MkQ0RTEyOTM1NTBCMDBDODM4N0YgLyogRm9u
dEJhc2VsaW5lLmggKi8sCisJCQkJQjJDM0RBNTMwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnQuY3Bw
ICovLAorCQkJCUIyQzNEQTU0MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250LmggKi8sCiAJCQkJQjJD
M0RBNTEwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYWNoZS5jcHAgKi8sCiAJCQkJQjJDM0RBNTIw
RDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYWNoZS5oICovLAorCQkJCTcyNjI2RTAxMEVGMDIyRkUw
MEEwN0UyMCAvKiBGb250Q2FzY2FkZUZhc3RQYXRoLmNwcCAqLywKIAkJCQkzN0FDQ0U2MjBEQTJB
QTk2MDA4OUU2MDIgLyogRm9udERlc2NyaXB0aW9uLmNwcCAqLywKIAkJCQlCMkMzREE1NTBEMDA2
Q0Q2MDBFRjZGMjYgLyogRm9udERlc2NyaXB0aW9uLmggKi8sCi0JCQkJNzI2MjZFMDEwRUYwMjJG
RTAwQTA3RTIwIC8qIEZvbnRGYXN0UGF0aC5jcHAgKi8sCiAJCQkJNEE2RTlGQzUxM0MxN0Q1NzAw
NDZBN0Y4IC8qIEZvbnRGZWF0dXJlU2V0dGluZ3MuY3BwICovLAogCQkJCTRBNkU5RkM2MTNDMTdE
NTcwMDQ2QTdGOCAvKiBGb250RmVhdHVyZVNldHRpbmdzLmggKi8sCiAJCQkJRTQ0RUUzQTYxNzU3
NkU1NTAwRUVFOENGIC8qIEZvbnRHZW5lcmljRmFtaWxpZXMuY3BwICovLApAQCAtMjA0NTcsNiAr
MjA0NTksOCBAQAogCQkJCUY3QTAzNEMzMTI2QkY2QkUwMDdEQzE5RSAvKiBGb250T3JpZW50YXRp
b24uaCAqLywKIAkJCQk4NEI2MjY4NDEzMzEzOEY5MDA5NUE0ODkgLyogRm9udFBsYXRmb3JtRGF0
YS5jcHAgKi8sCiAJCQkJQjUzMjBENjkxMjJBMjRFOTAwMkQxNDQwIC8qIEZvbnRQbGF0Zm9ybURh
dGEuaCAqLywKKwkJCQkzNzFGNEZGQjBEMjVFN0YzMDBFQ0UwRDUgLyogRm9udFJhbmdlcy5jcHAg
Ki8sCisJCQkJMzcxRjRGRkEwRDI1RTdGMzAwRUNFMEQ1IC8qIEZvbnRSYW5nZXMuaCAqLywKIAkJ
CQkzN0FDQ0U0MTBEQTI5ODBGMDA4OUU2MDIgLyogRm9udFJlbmRlcmluZ01vZGUuaCAqLywKIAkJ
CQlCMkMzREE1QTBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udFNlbGVjdG9yLmggKi8sCiAJCQkJMzcy
MDIxOTgxMDYyMTNDNjAwRjI1QzRCIC8qIEZvbnRTbW9vdGhpbmdNb2RlLmggKi8sCkBAIC0yMDU0
NiwxMiArMjA1NTAsOCBAQAogCQkJCUJDQUI0MTgwMTNFMzU2RTgwMEQ4QUFGMyAvKiBSZWdpb24u
aCAqLywKIAkJCQlBNzNGOTVGQzEyQzk3QkZFMDAzMUFBRjkgLyogUm91bmRlZFJlY3QuY3BwICov
LAogCQkJCUE3M0Y5NUZEMTJDOTdCRkUwMDMxQUFGOSAvKiBSb3VuZGVkUmVjdC5oICovLAotCQkJ
CTM3MUY0RkZCMEQyNUU3RjMwMEVDRTBENSAvKiBGb250UmFuZ2VzLmNwcCAqLywKLQkJCQkzNzFG
NEZGQTBEMjVFN0YzMDBFQ0UwRDUgLyogRm9udFJhbmdlcy5oICovLAogCQkJCTBGM0RENDREMTJG
NUVBMUIwMDBEOTE5MCAvKiBTaGFkb3dCbHVyLmNwcCAqLywKIAkJCQkwRjNERDQ0RTEyRjVFQTFC
MDAwRDkxOTAgLyogU2hhZG93Qmx1ci5oICovLAotCQkJCUIyQzNEQTUzMEQwMDZDRDYwMEVGNkYy
NiAvKiBTaW1wbGVGb250RGF0YS5jcHAgKi8sCi0JCQkJQjJDM0RBNTQwRDAwNkNENjAwRUY2RjI2
IC8qIFNpbXBsZUZvbnREYXRhLmggKi8sCiAJCQkJQ0Q2NDFFQjIxODE4RjVFRDAwRUU0QzQxIC8q
IFNvdXJjZUJ1ZmZlclByaXZhdGUuaCAqLywKIAkJCQlDREM4QjVBQzE4MDRBRTVEMDAxNkU2ODUg
LyogU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudC5oICovLAogCQkJCUIyMzU0MEYwMEQwMDc4MkUw
MDIzODJGQSAvKiBTdHJpbmdUcnVuY2F0b3IuY3BwICovLApAQCAtMjYwMDIsNyArMjYwMDIsNyBA
QAogCQkJCTFBNEE5NTRFMEI0RURDQ0IwMDJEOEMzQyAvKiBTaGFyZWRCdWZmZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTk3QjFGMDJGMTNCMDI1RDIwMEY1MTAzRiAvKiBTaGFyZWRCdWZmZXJDaHVu
a1JlYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlFQTMwOTlFQjc4QzAwNTZFNTgxIC8q
IFNoYXJlZFRpbWVyLmggaW4gSGVhZGVycyAqLywKLQkJCQlCMkMzREE2NTBEMDA2Q0Q2MDBFRjZG
MjYgLyogU2ltcGxlRm9udERhdGEuaCBpbiBIZWFkZXJzICovLAorCQkJCUIyQzNEQTY1MEQwMDZD
RDYwMEVGNkYyNiAvKiBGb250LmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDg5NDRBMzE4MEI1N0Q4
MDBGMTY1RDggLyogU2ltcGxlTGluZUxheW91dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTRFOUIx
MUQxODE0NTY5QzAwM0FDQ0RGIC8qIFNpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUU0RTlCMTE5MTgxMDkxNkYwMDNBQ0NERiAvKiBTaW1wbGVMaW5lTGF5b3V0
UmVzb2x2ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMjc4MTksMTUgKzI3ODE5LDE1IEBACiAJCQkJ
QjJDM0RBNjIwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYWNoZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkzNzI3REZENTE0MkFBRTQ1MDBENDQ5Q0IgLyogRm9udENhY2hlSU9TLm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQjJBRkZDN0MwRDAwQTVDMTAwMzAwNzREIC8qIEZvbnRDYWNoZU1hYy5tbSBp
biBTb3VyY2VzICovLAotCQkJCTM3QzIzNjBCMTA5N0VERUQwMEVGOUY3MiAvKiBGb250Q29tcGxl
eFRleHRNYWMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzdDMjM2MEIxMDk3RURFRDAwRUY5Rjcy
IC8qIEZvbnRDYXNjYWRlQ29tcGxleFRleHRNYWMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJB
RkZDN0QwRDAwQTVDMTAwMzAwNzREIC8qIEZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMzdBQ0NGNjkwREE0MTRFNzAwODlFNjAyIC8qIEZvbnREZXNjcmlwdGlv
bi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk3MjYyNkUwMjBFRjAyMkZFMDBBMDdFMjAgLyogRm9u
dEZhc3RQYXRoLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTcyNjI2RTAyMEVGMDIyRkUwMEEwN0Uy
MCAvKiBGb250Q2FzY2FkZUZhc3RQYXRoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTRBNkU5RkM3
MTNDMTdENTcwMDQ2QTdGOCAvKiBGb250RmVhdHVyZVNldHRpbmdzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUU0NEVFM0E4MTc1NzdFQkQwMEVFRThDRiAvKiBGb250R2VuZXJpY0ZhbWlsaWVzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUIyQzNEQTY3MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250R2x5
cGhzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZEOTZDOTk3MTk4MkZCREYwMDg2RTE1NiAvKiBG
b250TG9hZGVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUIyQUZGQzgwMEQwMEE1QzEwMDMwMDc0
RCAvKiBGb250TWFjLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJQjJBRkZDODAwRDAwQTVDMTAwMzAw
NzREIC8qIEZvbnRDYXNjYWRlTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJODRCNjI2ODUxMzMx
MzhGOTAwOTVBNDg5IC8qIEZvbnRQbGF0Zm9ybURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QjUzMjBENkMxMjJBMjRFOTAwMkQxNDQwIC8qIEZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbSBpbiBT
b3VyY2VzICovLAogCQkJCUM1ODM2MUFBMTc0NDUyM0YwMDE3MzUxMSAvKiBGb250U2VydmljZXNJ
T1MubW0gaW4gU291cmNlcyAqLywKQEAgLTI5NDMyLDEwICsyOTQzMiwxMCBAQAogCQkJCTFBNEE5
NTUyMEI0RURDRkYwMDJEOEMzQyAvKiBTaGFyZWRCdWZmZXJNYWMubW0gaW4gU291cmNlcyAqLywK
IAkJCQlFNDUzOTA0NjBFQUZENjM3MDAzNjk1QzggLyogU2hhcmVkVGltZXJJT1MubW0gaW4gU291
cmNlcyAqLywKIAkJCQk5MzMwOUVBMjA5OUVCNzhDMDA1NkU1ODEgLyogU2hhcmVkVGltZXJNYWMu
bW0gaW4gU291cmNlcyAqLywKLQkJCQlCMkMzREE2NDBEMDA2Q0Q2MDBFRjZGMjYgLyogU2ltcGxl
Rm9udERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMTYzRTg4RjcxMThBMzlEMjAwRUQ5MjMx
IC8qIFNpbXBsZUZvbnREYXRhQ29yZVRleHQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMzdFNjU5
NTAxNjNCMTBDMjAwRUI0NTc0IC8qIFNpbXBsZUZvbnREYXRhSU9TLm1tIGluIFNvdXJjZXMgKi8s
Ci0JCQkJQjJBRkZDN0YwRDAwQTVDMTAwMzAwNzREIC8qIFNpbXBsZUZvbnREYXRhTWFjLm1tIGlu
IFNvdXJjZXMgKi8sCisJCQkJQjJDM0RBNjQwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnQuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMTYzRTg4RjcxMThBMzlEMjAwRUQ5MjMxIC8qIEZvbnRDb3JlVGV4
dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzN0U2NTk1MDE2M0IxMEMyMDBFQjQ1NzQgLyogRm9u
dElPUy5tbSBpbiBTb3VyY2VzICovLAorCQkJCUIyQUZGQzdGMEQwMEE1QzEwMDMwMDc0RCAvKiBG
b250TWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRTQ4OTQ0QTIxODBCNTdEODAwRjE2NUQ4IC8q
IFNpbXBsZUxpbmVMYXlvdXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTRFOUIxMUIxODE0NTY5
MjAwM0FDQ0RGIC8qIFNpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQzVBMUVBN0MxNTJCQ0YwNDAwNEQwMEI2IC8qIFNpbXBsaWZ5TWFya3VwQ29tbWFuZC5j
cHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9z
L1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
SU9TLm1tCShyZXZpc2lvbiAxNzg1MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQkod29ya2luZyBjb3B5KQpA
QCAtMTc1OCw3ICsxNzU4LDcgQEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVTdHJpbmdTZXRTdHls
ZShOUwogICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwogICAgIAog
ICAgIC8vIHNldCBiYXNpYyBmb250IGluZm8KLSAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldEZvbnQo
YXR0clN0cmluZywgc3R5bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXRDVEZv
bnQoKSwgcmFuZ2UpOworICAgIEFYQXR0cmlidXRlU3RyaW5nU2V0Rm9udChhdHRyU3RyaW5nLCBz
dHlsZS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCkuZ2V0Q1RGb250KCksIHJhbmdlKTsKICAg
ICAgICAgICAgICAgICAKICAgICBpbnQgZGVjb3IgPSBzdHlsZS50ZXh0RGVjb3JhdGlvbnNJbkVm
ZmVjdCgpOwogICAgIGlmICgoZGVjb3IgJiAoVGV4dERlY29yYXRpb25VbmRlcmxpbmUgfCBUZXh0
RGVjb3JhdGlvbkxpbmVUaHJvdWdoKSkgIT0gMCkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyQmFzZS5tbQkocmV2aXNpb24gMTc4NTE1KQorKysgU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0Niw3IEBACiAjaW1wb3J0ICJDaHJvbWVDbGllbnQu
aCIKICNpbXBvcnQgIkNvbG9yTWFjLmgiCiAjaW1wb3J0ICJDb250ZXh0TWVudUNvbnRyb2xsZXIu
aCIKKyNpbXBvcnQgIkZvbnQuaCIKICNpbXBvcnQgIkZvbnRDYXNjYWRlLmgiCiAjaW1wb3J0ICJG
cmFtZS5oIgogI2ltcG9ydCAiRnJhbWVMb2FkZXJDbGllbnQuaCIKQEAgLTYzLDcgKzY0LDYgQEAK
ICNpbXBvcnQgIlJlbmRlclZpZXcuaCIKICNpbXBvcnQgIlJlbmRlcldpZGdldC5oIgogI2ltcG9y
dCAiU2Nyb2xsVmlldy5oIgotI2ltcG9ydCAiU2ltcGxlRm9udERhdGEuaCIKICNpbXBvcnQgIlRl
eHRDaGVja2VyQ2xpZW50LmgiCiAjaW1wb3J0ICJUZXh0Q2hlY2tpbmdIZWxwZXIuaCIKICNpbXBv
cnQgIlZpc2libGVVbml0cy5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9t
YWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJNYWMubW0JKHJldmlzaW9uIDE3ODUxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC00Nyw2ICs0Nyw3IEBACiAjaW1wb3J0ICJDb2xvck1hYy5oIgogI2ltcG9ydCAiQ29udGV4
dE1lbnVDb250cm9sbGVyLmgiCiAjaW1wb3J0ICJFZGl0b3IuaCIKKyNpbXBvcnQgIkZvbnQuaCIK
ICNpbXBvcnQgIkZvbnRDYXNjYWRlLmgiCiAjaW1wb3J0ICJGcmFtZUxvYWRlckNsaWVudC5oIgog
I2ltcG9ydCAiRnJhbWVTZWxlY3Rpb24uaCIKQEAgLTY0LDcgKzY1LDYgQEAKICNpbXBvcnQgIlJl
bmRlclZpZXcuaCIKICNpbXBvcnQgIlJlbmRlcldpZGdldC5oIgogI2ltcG9ydCAiU2Nyb2xsVmll
dy5oIgotI2ltcG9ydCAiU2ltcGxlRm9udERhdGEuaCIKICNpbXBvcnQgIlRleHRDaGVja2VyQ2xp
ZW50LmgiCiAjaW1wb3J0ICJUZXh0Q2hlY2tpbmdIZWxwZXIuaCIKICNpbXBvcnQgIlRleHRJdGVy
YXRvci5oIgpAQCAtODQ4LDcgKzg0OCw3IEBAIHN0YXRpYyB2b2lkIEFYQXR0cmlidXRlU3RyaW5n
U2V0U3R5bGUoTlMKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUgPSByZW5kZXJlci0+c3R5
bGUoKTsKICAgICAKICAgICAvLyBzZXQgYmFzaWMgZm9udCBpbmZvCi0gICAgQVhBdHRyaWJ1dGVT
dHJpbmdTZXRGb250KGF0dHJTdHJpbmcsIE5TQWNjZXNzaWJpbGl0eUZvbnRUZXh0QXR0cmlidXRl
LCBzdHlsZS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmdldE5TRm9udCgpLCByYW5n
ZSk7CisgICAgQVhBdHRyaWJ1dGVTdHJpbmdTZXRGb250KGF0dHJTdHJpbmcsIE5TQWNjZXNzaWJp
bGl0eUZvbnRUZXh0QXR0cmlidXRlLCBzdHlsZS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCku
Z2V0TlNGb250KCksIHJhbmdlKTsKICAgICAKICAgICAvLyBzZXQgYmFzaWMgY29sb3JzCiAgICAg
QVhBdHRyaWJ1dGVTdHJpbmdTZXRDb2xvcihhdHRyU3RyaW5nLCBOU0FjY2Vzc2liaWxpdHlGb3Jl
Z3JvdW5kQ29sb3JUZXh0QXR0cmlidXRlLCBuc0NvbG9yKHN0eWxlLnZpc2l0ZWREZXBlbmRlbnRD
b2xvcihDU1NQcm9wZXJ0eUNvbG9yKSksIHJhbmdlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL29iamMvRE9NLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L29iamMvRE9NLm1tCShyZXZpc2lvbiAxNzg1MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9vYmpjL0RPTS5tbQkod29ya2luZyBjb3B5KQpAQCAtNjY5LDcgKzY2OSw3IEBAIC0gKE5TRm9u
dCAqKV9mb250CiAgICAgYXV0byByZW5kZXJlciA9IGNvcmUoc2VsZiktPnJlbmRlcmVyKCk7CiAg
ICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4gcmVuZGVy
ZXItPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXROU0ZvbnQoKTsK
KyAgICByZXR1cm4gcmVuZGVyZXItPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgp
LmdldE5TRm9udCgpOwogfQogI2Vsc2UKIC0gKENURm9udFJlZilfZm9udApAQCAtNjc3LDcgKzY3
Nyw3IEBAIC0gKENURm9udFJlZilfZm9udAogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBj
b3JlKHNlbGYpLT5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVy
biBuaWw7Ci0gICAgcmV0dXJuIHJlbmRlcmVyLT5zdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFy
eUZvbnREYXRhKCkuZ2V0Q1RGb250KCk7CisgICAgcmV0dXJuIHJlbmRlcmVyLT5zdHlsZSgpLmZv
bnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKS5nZXRDVEZvbnQoKTsKIH0KICNlbmRpZgogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5jcHAJKHJldmlzaW9uIDE3ODUxNSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEwICsz
MCwxMCBAQAogI2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1NlZ21l
bnRlZEZvbnRGYWNlLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGb250Lmgi
CiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiRm9udExvYWRlci5oIgog
I2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKLSNpbmNsdWRlICJTaW1wbGVGb250
RGF0YS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTEwOCw3ICsxMDgsNyBAQCB2b2lk
IENTU0ZvbnRGYWNlOjpmb250TG9hZGVkKENTU0ZvbnRGYWNlCiAjZW5kaWYKIH0KIAotUGFzc1Jl
ZlB0cjxTaW1wbGVGb250RGF0YT4gQ1NTRm9udEZhY2U6OmdldEZvbnREYXRhKGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3lu
dGhldGljSXRhbGljKQorUmVmUHRyPEZvbnQ+IENTU0ZvbnRGYWNlOjpmb250KGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3lu
dGhldGljSXRhbGljKQogewogICAgIG1fYWN0aXZlU291cmNlID0gMDsKICAgICBpZiAoIWlzVmFs
aWQoKSkKQEAgLTEyNCw3ICsxMjQsNyBAQCBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBDU1NG
b250RmFjZTo6CiAKICAgICBzaXplX3Qgc2l6ZSA9IG1fc291cmNlcy5zaXplKCk7CiAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgaWYgKFJlZlB0cjxTaW1w
bGVGb250RGF0YT4gcmVzdWx0ID0gbV9zb3VyY2VzW2ldLT5nZXRGb250RGF0YShmb250RGVzY3Jp
cHRpb24sIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYywgZm9udFNlbGVjdG9yKSkgewor
ICAgICAgICBpZiAoUmVmUHRyPEZvbnQ+IHJlc3VsdCA9IG1fc291cmNlc1tpXS0+Zm9udChmb250
RGVzY3JpcHRpb24sIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYywgZm9udFNlbGVjdG9y
KSkgewogICAgICAgICAgICAgbV9hY3RpdmVTb3VyY2UgPSBtX3NvdXJjZXNbaV0uZ2V0KCk7CiAj
aWYgRU5BQkxFKEZPTlRfTE9BRF9FVkVOVFMpCiAgICAgICAgICAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5mb250TG9hZEV2ZW50c0VuYWJsZWQoKSAmJiBt
X2xvYWRTdGF0ZSA9PSBMb2FkaW5nICYmIG1fc291cmNlc1tpXS0+aXNMb2FkZWQoKSkgewpJbmRl
eDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmgJKHJldmlzaW9uIDE3ODUxNSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ1NTU2VnbWVudGVkRm9udEZhY2U7CiBjbGFz
cyBGb250RGVzY3JpcHRpb247Ci1jbGFzcyBTaW1wbGVGb250RGF0YTsKK2NsYXNzIEZvbnQ7CiAK
IGNsYXNzIENTU0ZvbnRGYWNlIDogcHVibGljIFJlZkNvdW50ZWQ8Q1NTRm9udEZhY2U+IHsKIHB1
YmxpYzoKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBmb250TG9hZGVkKENT
U0ZvbnRGYWNlU291cmNlKik7CiAKLSAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBnZXRG
b250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wg
c3ludGhldGljSXRhbGljKTsKKyAgICBSZWZQdHI8Rm9udD4gZm9udChjb25zdCBGb250RGVzY3Jp
cHRpb24mLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljKTsKIAogICAg
IHN0cnVjdCBVbmljb2RlUmFuZ2UgewogICAgICAgICBVbmljb2RlUmFuZ2UoVUNoYXIzMiBmcm9t
LCBVQ2hhcjMyIHRvKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291cmNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2Uu
Y3BwCShyZXZpc2lvbiAxNzg1MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VT
b3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw5ICszMiw5IEBACiAjaW5jbHVkZSAiQ2Fj
aGVkUmVzb3VyY2VMb2FkZXIuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkVs
ZW1lbnRJdGVyYXRvci5oIgorI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGb250Q2FjaGUu
aCIKICNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0
YS5oIgogCiAjaWYgRU5BQkxFKFNWR19PVEZfQ09OVkVSVEVSKQogI2luY2x1ZGUgIkZvbnRDdXN0
b21QbGF0Zm9ybURhdGEuaCIKQEAgLTc0LDEwICs3NCwxMCBAQCBDU1NGb250RmFjZVNvdXJjZTo6
fkNTU0ZvbnRGYWNlU291cmNlKCkKIAogdm9pZCBDU1NGb250RmFjZVNvdXJjZTo6cHJ1bmVUYWJs
ZSgpCiB7Ci0gICAgaWYgKG1fZm9udERhdGFUYWJsZS5pc0VtcHR5KCkpCisgICAgaWYgKG1fZm9u
dFRhYmxlLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9mb250RGF0YVRhYmxl
LmNsZWFyKCk7CisgICAgbV9mb250VGFibGUuY2xlYXIoKTsKIH0KIAogYm9vbCBDU1NGb250RmFj
ZVNvdXJjZTo6aXNMb2FkZWQoKSBjb25zdApAQCAtMTAxLDcgKzEwMSw3IEBAIHZvaWQgQ1NTRm9u
dEZhY2VTb3VyY2U6OmZvbnRMb2FkZWQoQ2FjaGUKICAgICAgICAgbV9mYWNlLT5mb250TG9hZGVk
KHRoaXMpOwogfQogCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBDU1NGb250RmFjZVNvdXJj
ZTo6Z2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGJv
b2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMsIENTU0ZvbnRTZWxlY3Rvciog
Zm9udFNlbGVjdG9yKQorUmVmUHRyPEZvbnQ+IENTU0ZvbnRGYWNlU291cmNlOjpmb250KGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBib29sIHN5bnRoZXRpY0JvbGQsIGJv
b2wgc3ludGhldGljSXRhbGljLCBDU1NGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvcikKIHsKICAg
ICAvLyBJZiB0aGUgZm9udCBoYXNuJ3QgbG9hZGVkIG9yIGFuIGVycm9yIG9jY3VycmVkLCB0aGVu
IHdlJ3ZlIGdvdCBub3RoaW5nLgogICAgIGlmICghaXNWYWxpZCgpKQpAQCAtMTEyLDE4ICsxMTIs
MTcgQEAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gQ1NTRm9udEZhY2VTbwogICAgICAgICAg
ICAgJiYgIW1fc3ZnRm9udEZhY2VFbGVtZW50CiAjZW5kaWYKICAgICApIHsKLSAgICAgICAgLy8g
V2UncmUgbG9jYWwuIEp1c3QgcmV0dXJuIGEgU2ltcGxlRm9udERhdGEgZnJvbSB0aGUgbm9ybWFs
IGNhY2hlLgorICAgICAgICAvLyBXZSdyZSBsb2NhbC4gSnVzdCByZXR1cm4gYSBGb250IGZyb20g
dGhlIG5vcm1hbCBjYWNoZS4KICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBjaGVjayBhbHRl
cm5hdGUgZm9udCBmYW1pbHkgbmFtZXMgaGVyZSwgc28gcGFzcyB0cnVlIGFzIHRoZSBjaGVja2lu
Z0FsdGVybmF0ZU5hbWUgcGFyYW1ldGVyLgogICAgICAgICByZXR1cm4gZm9udENhY2hlKCkuZm9u
dEZvckZhbWlseShmb250RGVzY3JpcHRpb24sIG1fc3RyaW5nLCB0cnVlKTsKICAgICB9CiAKLSAg
ICAvLyBTZWUgaWYgd2UgaGF2ZSBhIG1hcHBpbmcgaW4gb3VyIEZvbnREYXRhIGNhY2hlLgogICAg
IHVuc2lnbmVkIGhhc2hLZXkgPSAoZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCkg
KyAxKSA8PCA1IHwgZm9udERlc2NyaXB0aW9uLndpZHRoVmFyaWFudCgpIDw8IDMKICAgICAgICAg
ICAgICAgICAgICAgICAgfCAoZm9udERlc2NyaXB0aW9uLm9yaWVudGF0aW9uKCkgPT0gVmVydGlj
YWwgPyA0IDogMCkgfCAoc3ludGhldGljQm9sZCA/IDIgOiAwKSB8IChzeW50aGV0aWNJdGFsaWMg
PyAxIDogMCk7CiAKLSAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IGZvbnREYXRhID0gbV9mb250
RGF0YVRhYmxlLmFkZChoYXNoS2V5LCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7Ci0gICAgaWYg
KGZvbnREYXRhKQotICAgICAgICByZXR1cm4gZm9udERhdGEucmVsZWFzZSgpOworICAgIFJlZlB0
cjxGb250PiBmb250ID0gbV9mb250VGFibGUuYWRkKGhhc2hLZXksIG51bGxwdHIpLml0ZXJhdG9y
LT52YWx1ZTsKKyAgICBpZiAoZm9udCkKKyAgICAgICAgcmV0dXJuIGZvbnQucmVsZWFzZSgpOwog
CiAgICAgLy8gSWYgd2UgYXJlIHN0aWxsIGxvYWRpbmcsIHRoZW4gd2UgbGV0IHRoZSBzeXN0ZW0g
cGljayBhIGZvbnQuCiAgICAgaWYgKGlzTG9hZGVkKCkpIHsKQEAgLTEzNiw3ICsxMzUsNyBAQCBQ
YXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBDU1NGb250RmFjZVNvCiAgICAgICAgICAgICBpZiAo
IW1fZm9udC0+ZW5zdXJlQ3VzdG9tRm9udERhdGEoaGFzRXh0ZXJuYWxTVkdGb250LCBtX3N0cmlu
ZykpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgICAgIGZvbnRE
YXRhID0gbV9mb250LT5nZXRGb250RGF0YShmb250RGVzY3JpcHRpb24sIG1fc3RyaW5nLCBzeW50
aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMsIGhhc0V4dGVybmFsU1ZHRm9udCk7CisgICAgICAg
ICAgICBmb250ID0gbV9mb250LT5jcmVhdGVGb250KGZvbnREZXNjcmlwdGlvbiwgbV9zdHJpbmcs
IHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYywgaGFzRXh0ZXJuYWxTVkdGb250KTsKICAg
ICAgICAgfSBlbHNlIHsKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQogICAgICAgICAgICAgLy8gSW4t
RG9jdW1lbnQgU1ZHIEZvbnRzCkBAIC0xNTIsOSArMTUxLDkgQEAgUGFzc1JlZlB0cjxTaW1wbGVG
b250RGF0YT4gQ1NTRm9udEZhY2VTbwogICAgICAgICAgICAgICAgIGlmICghbV9nZW5lcmF0ZWRP
VEZCdWZmZXIpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAg
ICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxGb250Q3VzdG9tUGxhdGZvcm1EYXRhPiBjdXN0b21QbGF0
Zm9ybURhdGEgPSBjcmVhdGVGb250Q3VzdG9tUGxhdGZvcm1EYXRhKCptX2dlbmVyYXRlZE9URkJ1
ZmZlcik7Ci0gICAgICAgICAgICAgICAgZm9udERhdGEgPSBTaW1wbGVGb250RGF0YTo6Y3JlYXRl
KGN1c3RvbVBsYXRmb3JtRGF0YS0+Zm9udFBsYXRmb3JtRGF0YShzdGF0aWNfY2FzdDxpbnQ+KGZv
bnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpKSwgc3ludGhldGljQm9sZCwgc3ludGhl
dGljSXRhbGljLCBmb250RGVzY3JpcHRpb24ub3JpZW50YXRpb24oKSwgZm9udERlc2NyaXB0aW9u
LndpZHRoVmFyaWFudCgpLCBmb250RGVzY3JpcHRpb24ucmVuZGVyaW5nTW9kZSgpKSwgdHJ1ZSwg
ZmFsc2UpOworICAgICAgICAgICAgICAgIGZvbnQgPSBGb250OjpjcmVhdGUoY3VzdG9tUGxhdGZv
cm1EYXRhLT5mb250UGxhdGZvcm1EYXRhKHN0YXRpY19jYXN0PGludD4oZm9udERlc2NyaXB0aW9u
LmNvbXB1dGVkUGl4ZWxTaXplKCkpLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMsIGZv
bnREZXNjcmlwdGlvbi5vcmllbnRhdGlvbigpLCBmb250RGVzY3JpcHRpb24ud2lkdGhWYXJpYW50
KCksIGZvbnREZXNjcmlwdGlvbi5yZW5kZXJpbmdNb2RlKCkpLCB0cnVlLCBmYWxzZSk7CiAjZWxz
ZQotICAgICAgICAgICAgICAgIGZvbnREYXRhID0gU2ltcGxlRm9udERhdGE6OmNyZWF0ZShzdGQ6
Om1ha2VfdW5pcXVlPFNWR0ZvbnREYXRhPihtX3N2Z0ZvbnRGYWNlRWxlbWVudC5nZXQoKSksIGZv
bnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0
aWNJdGFsaWMpOworICAgICAgICAgICAgICAgIGZvbnQgPSBGb250OjpjcmVhdGUoc3RkOjptYWtl
X3VuaXF1ZTxTVkdGb250RGF0YT4obV9zdmdGb250RmFjZUVsZW1lbnQuZ2V0KCkpLCBmb250RGVz
Y3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSwgc3ludGhldGljQm9sZCwgc3ludGhldGljSXRh
bGljKTsKICNlbmRpZgogICAgICAgICAgICAgfQogI2VuZGlmCkBAIC0xNjQsMTIgKzE2MywxMiBA
QCBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBDU1NGb250RmFjZVNvCiAgICAgICAgIC8vIGFu
ZCB0aGUgbG9hZGVyIG1heSBpbnZva2UgYXJiaXRyYXJ5IGRlbGVnYXRlIG9yIGV2ZW50IGhhbmRs
ZXIgY29kZS4KICAgICAgICAgZm9udFNlbGVjdG9yLT5iZWdpbkxvYWRpbmdGb250U29vbihtX2Zv
bnQuZ2V0KCkpOwogCi0gICAgICAgIFJlZjxTaW1wbGVGb250RGF0YT4gcGxhY2Vob2xkZXJGb250
ID0gZm9udENhY2hlKCkubGFzdFJlc29ydEZhbGxiYWNrRm9udChmb250RGVzY3JpcHRpb24pOwot
ICAgICAgICBSZWY8U2ltcGxlRm9udERhdGE+IHBsYWNlaG9sZGVyRm9udENvcHlJbkxvYWRpbmdT
dGF0ZSA9IFNpbXBsZUZvbnREYXRhOjpjcmVhdGUocGxhY2Vob2xkZXJGb250LT5wbGF0Zm9ybURh
dGEoKSwgdHJ1ZSwgdHJ1ZSk7CisgICAgICAgIFJlZjxGb250PiBwbGFjZWhvbGRlckZvbnQgPSBm
b250Q2FjaGUoKS5sYXN0UmVzb3J0RmFsbGJhY2tGb250KGZvbnREZXNjcmlwdGlvbik7CisgICAg
ICAgIFJlZjxGb250PiBwbGFjZWhvbGRlckZvbnRDb3B5SW5Mb2FkaW5nU3RhdGUgPSBGb250Ojpj
cmVhdGUocGxhY2Vob2xkZXJGb250LT5wbGF0Zm9ybURhdGEoKSwgdHJ1ZSwgdHJ1ZSk7CiAgICAg
ICAgIHJldHVybiBXVEY6Om1vdmUocGxhY2Vob2xkZXJGb250Q29weUluTG9hZGluZ1N0YXRlKTsK
ICAgICB9CiAKLSAgICByZXR1cm4gZm9udERhdGEucmVsZWFzZSgpOworICAgIHJldHVybiBmb250
LnJlbGVhc2UoKTsKIH0KIAogI2lmIEVOQUJMRShGT05UX0xPQURfRVZFTlRTKQpJbmRleDogU291
cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291cmNlLmgJKHJldmlzaW9uIDE3ODUxNSkKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
Miw4ICs0Miw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENhY2hlZEZvbnQ7CiBjbGFz
cyBDU1NGb250RmFjZTsKIGNsYXNzIENTU0ZvbnRTZWxlY3RvcjsKK2NsYXNzIEZvbnQ7CiBjbGFz
cyBGb250RGVzY3JpcHRpb247Ci1jbGFzcyBTaW1wbGVGb250RGF0YTsKIAogY2xhc3MgQ1NTRm9u
dEZhY2VTb3VyY2UgZmluYWwgOiBwdWJsaWMgQ2FjaGVkRm9udENsaWVudCB7CiBwdWJsaWM6CkBA
IC01OSw3ICs1OSw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBmb250TG9hZGVkKENh
Y2hlZEZvbnQqKSBvdmVycmlkZTsKIAotICAgIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IGdl
dEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGJvb2wgc3ludGhldGljQm9sZCwgYm9v
bCBzeW50aGV0aWNJdGFsaWMsIENTU0ZvbnRTZWxlY3RvciopOworICAgIFJlZlB0cjxGb250PiBm
b250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50
aGV0aWNJdGFsaWMsIENTU0ZvbnRTZWxlY3RvciopOwogCiAgICAgdm9pZCBwcnVuZVRhYmxlKCk7
CiAKQEAgLTgxLDcgKzgxLDcgQEAgcHJpdmF0ZToKICAgICBBdG9taWNTdHJpbmcgbV9zdHJpbmc7
IC8vIFVSSSBmb3IgcmVtb3RlLCBidWlsdC1pbiBmb250IG5hbWUgZm9yIGxvY2FsLgogICAgIENh
Y2hlZFJlc291cmNlSGFuZGxlPENhY2hlZEZvbnQ+IG1fZm9udDsgLy8gRm9yIHJlbW90ZSBmb250
cywgYSBwb2ludGVyIHRvIG91ciBjYWNoZWQgcmVzb3VyY2UuCiAgICAgQ1NTRm9udEZhY2UqIG1f
ZmFjZTsgLy8gT3VyIG93bmluZyBmb250IGZhY2UuCi0gICAgSGFzaE1hcDx1bnNpZ25lZCwgUmVm
UHRyPFNpbXBsZUZvbnREYXRhPj4gbV9mb250RGF0YVRhYmxlOyAvLyBUaGUgaGFzaCBrZXkgaXMg
Y29tcG9zZWQgb2Ygc2l6ZSBzeW50aGV0aWMgc3R5bGVzLgorICAgIEhhc2hNYXA8dW5zaWduZWQs
IFJlZlB0cjxGb250Pj4gbV9mb250VGFibGU7IC8vIFRoZSBoYXNoIGtleSBpcyBjb21wb3NlZCBv
ZiBzaXplIHN5bnRoZXRpYyBzdHlsZXMuCiAKICNpZiBFTkFCTEUoU1ZHX09URl9DT05WRVJURVIp
CiAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9nZW5lcmF0ZWRPVEZCdWZmZXI7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNwcAkocmV2aXNpb24gMTc4NTE1KQorKysg
U291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQwLDEzICs0MCwxMyBAQAogI2luY2x1ZGUgIkNTU1ZhbHVlTGlzdC5oIgogI2luY2x1ZGUgIkNh
Y2hlZFJlc291cmNlTG9hZGVyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJG
b250LmgiCiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNs
dWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIlNWR0ZvbnRGYWNlRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJTaW1w
bGVGb250RGF0YS5oIgogI2luY2x1ZGUgIlN0eWxlUHJvcGVydGllcy5oIgogI2luY2x1ZGUgIlN0
eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJTdHlsZVJ1bGUuaCIKQEAgLTYxMiw3ICs2MTIsNyBA
QCBib29sIENTU0ZvbnRTZWxlY3Rvcjo6cmVzb2x2ZXNGYW1pbHlGb3IoCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1zaXplX3QgQ1NTRm9udFNlbGVjdG9yOjpmYWxsYmFja0ZvbnREYXRhQ291bnQo
KQorc2l6ZV90IENTU0ZvbnRTZWxlY3Rvcjo6ZmFsbGJhY2tGb250Q291bnQoKQogewogICAgIGlm
ICghbV9kb2N1bWVudCkKICAgICAgICAgcmV0dXJuIDA7CkBAIC02MjMsNyArNjIzLDcgQEAgc2l6
ZV90IENTU0ZvbnRTZWxlY3Rvcjo6ZmFsbGJhY2tGb250RGF0YQogICAgIHJldHVybiAwOwogfQog
Ci1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBDU1NGb250U2VsZWN0b3I6OmZhbGxiYWNrRm9u
dERhdGFBdChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgc2l6ZV90IGlu
ZGV4KQorUGFzc1JlZlB0cjxGb250PiBDU1NGb250U2VsZWN0b3I6OmZhbGxiYWNrRm9udEF0KGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBzaXplX3QgaW5kZXgpCiB7CiAg
ICAgQVNTRVJUX1VOVVNFRChpbmRleCwgIWluZGV4KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0ZvbnRTZWxlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NGb250U2VsZWN0b3IuaAkocmV2aXNpb24gMTc4NTE1KQorKysgU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0ZvbnRTZWxlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw4ICsyNyw4IEBACiAjZGVm
aW5lIENTU0ZvbnRTZWxlY3Rvcl9oCiAKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUhhbmRsZS5o
IgorI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGb250U2VsZWN0b3IuaCIKLSNpbmNsdWRl
ICJTaW1wbGVGb250RGF0YS5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8bWVtb3J5
PgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CkBAIC01OSw4ICs1OSw4IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIHVuc2lnbmVkIHVuaXF1ZUlkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV91
bmlxdWVJZDsgfQogCiAgICAgdmlydHVhbCBGb250UmFuZ2VzIGZvbnRSYW5nZXNGb3JGYW1pbHko
Y29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbWljU3RyaW5nJikgb3ZlcnJpZGU7Ci0g
ICAgdmlydHVhbCBzaXplX3QgZmFsbGJhY2tGb250RGF0YUNvdW50KCkgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBmYWxsYmFja0ZvbnREYXRhQXQoY29u
c3QgRm9udERlc2NyaXB0aW9uJiwgc2l6ZV90KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHNpemVf
dCBmYWxsYmFja0ZvbnRDb3VudCgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxG
b250PiBmYWxsYmFja0ZvbnRBdChjb25zdCBGb250RGVzY3JpcHRpb24mLCBzaXplX3QpIG92ZXJy
aWRlOwogICAgIENTU1NlZ21lbnRlZEZvbnRGYWNlKiBnZXRGb250RmFjZShjb25zdCBGb250RGVz
Y3JpcHRpb24mLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSk7CiAKICAgICB2aXJ0dWFsIGJv
b2wgcmVzb2x2ZXNGYW1pbHlGb3IoY29uc3QgRm9udERlc2NyaXB0aW9uJikgY29uc3Qgb3ZlcnJp
ZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5jcHAJ
KHJldmlzaW9uIDE3ODUxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWdtZW50ZWRGb250
RmFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDkgKzMwLDkgQEAKICNpbmNsdWRlICJDU1NG
b250RmFjZVNvdXJjZS5oIgogI2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgogI2luY2x1ZGUg
IkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlv
bi5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKLSNpbmNsdWRlICJTaW1w
bGVGb250RGF0YS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTkwLDIxICs5MCwyMSBA
QCB2b2lkIENTU1NlZ21lbnRlZEZvbnRGYWNlOjphcHBlbmRGb250RmFjCiAgICAgbV9mb250RmFj
ZXMuYXBwZW5kKGZvbnRGYWNlKTsKIH0KIAotc3RhdGljIHZvaWQgYXBwZW5kRm9udERhdGFXaXRo
SW52YWxpZFVuaWNvZGVSYW5nZUlmTG9hZGluZyhGb250UmFuZ2VzJiByYW5nZXMsIFJlZjxTaW1w
bGVGb250RGF0YT4mJiBmb250RGF0YSwgY29uc3QgVmVjdG9yPENTU0ZvbnRGYWNlOjpVbmljb2Rl
UmFuZ2U+JiB1bmljb2RlUmFuZ2VzKQorc3RhdGljIHZvaWQgYXBwZW5kRm9udFdpdGhJbnZhbGlk
VW5pY29kZVJhbmdlSWZMb2FkaW5nKEZvbnRSYW5nZXMmIHJhbmdlcywgUmVmPEZvbnQ+JiYgZm9u
dCwgY29uc3QgVmVjdG9yPENTU0ZvbnRGYWNlOjpVbmljb2RlUmFuZ2U+JiB1bmljb2RlUmFuZ2Vz
KQogewotICAgIGlmIChmb250RGF0YS0+aXNMb2FkaW5nKCkpIHsKLSAgICAgICAgcmFuZ2VzLmFw
cGVuZFJhbmdlKEZvbnRSYW5nZXM6OlJhbmdlKDAsIDAsIFdURjo6bW92ZShmb250RGF0YSkpKTsK
KyAgICBpZiAoZm9udC0+aXNMb2FkaW5nKCkpIHsKKyAgICAgICAgcmFuZ2VzLmFwcGVuZFJhbmdl
KEZvbnRSYW5nZXM6OlJhbmdlKDAsIDAsIFdURjo6bW92ZShmb250KSkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCiAgICAgdW5zaWduZWQgbnVtUmFuZ2VzID0gdW5pY29kZVJhbmdlcy5zaXpl
KCk7CiAgICAgaWYgKCFudW1SYW5nZXMpIHsKLSAgICAgICAgcmFuZ2VzLmFwcGVuZFJhbmdlKEZv
bnRSYW5nZXM6OlJhbmdlKDAsIDB4N0ZGRkZGRkYsIFdURjo6bW92ZShmb250RGF0YSkpKTsKKyAg
ICAgICAgcmFuZ2VzLmFwcGVuZFJhbmdlKEZvbnRSYW5nZXM6OlJhbmdlKDAsIDB4N0ZGRkZGRkYs
IFdURjo6bW92ZShmb250KSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgZm9yICh1
bnNpZ25lZCBqID0gMDsgaiA8IG51bVJhbmdlczsgKytqKQotICAgICAgICByYW5nZXMuYXBwZW5k
UmFuZ2UoRm9udFJhbmdlczo6UmFuZ2UodW5pY29kZVJhbmdlc1tqXS5mcm9tKCksIHVuaWNvZGVS
YW5nZXNbal0udG8oKSwgZm9udERhdGEuY29weVJlZigpKSk7CisgICAgICAgIHJhbmdlcy5hcHBl
bmRSYW5nZShGb250UmFuZ2VzOjpSYW5nZSh1bmljb2RlUmFuZ2VzW2pdLmZyb20oKSwgdW5pY29k
ZVJhbmdlc1tqXS50bygpLCBmb250LmNvcHlSZWYoKSkpOwogfQogCiBGb250UmFuZ2VzIENTU1Nl
Z21lbnRlZEZvbnRGYWNlOjpmb250UmFuZ2VzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERl
c2NyaXB0aW9uKQpAQCAtMTI4LDggKzEyOCw4IEBAIEZvbnRSYW5nZXMgQ1NTU2VnbWVudGVkRm9u
dEZhY2U6OmZvbnRSYW4KICAgICAgICAgICAgIEZvbnRUcmFpdHNNYXNrIHRyYWl0c01hc2sgPSBm
YWNlLT50cmFpdHNNYXNrKCk7CiAgICAgICAgICAgICBib29sIHN5bnRoZXRpY0JvbGQgPSAhKHRy
YWl0c01hc2sgJiAoRm9udFdlaWdodDYwME1hc2sgfCBGb250V2VpZ2h0NzAwTWFzayB8IEZvbnRX
ZWlnaHQ4MDBNYXNrIHwgRm9udFdlaWdodDkwME1hc2spKSAmJiAoZGVzaXJlZFRyYWl0c01hc2sg
JiAoRm9udFdlaWdodDYwME1hc2sgfCBGb250V2VpZ2h0NzAwTWFzayB8IEZvbnRXZWlnaHQ4MDBN
YXNrIHwgRm9udFdlaWdodDkwME1hc2spKTsKICAgICAgICAgICAgIGJvb2wgc3ludGhldGljSXRh
bGljID0gISh0cmFpdHNNYXNrICYgRm9udFN0eWxlSXRhbGljTWFzaykgJiYgKGRlc2lyZWRUcmFp
dHNNYXNrICYgRm9udFN0eWxlSXRhbGljTWFzayk7Ci0gICAgICAgICAgICBpZiAoUmVmUHRyPFNp
bXBsZUZvbnREYXRhPiBmYWNlRm9udERhdGEgPSBmYWNlLT5nZXRGb250RGF0YShmb250RGVzY3Jp
cHRpb24sIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYykpCi0gICAgICAgICAgICAgICAg
YXBwZW5kRm9udERhdGFXaXRoSW52YWxpZFVuaWNvZGVSYW5nZUlmTG9hZGluZyhmb250UmFuZ2Vz
LCBmYWNlRm9udERhdGEucmVsZWFzZU5vbk51bGwoKSwgZmFjZS0+cmFuZ2VzKCkpOworICAgICAg
ICAgICAgaWYgKFJlZlB0cjxGb250PiBmYWNlRm9udCA9IGZhY2UtPmZvbnQoZm9udERlc2NyaXB0
aW9uLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMpKQorICAgICAgICAgICAgICAgIGFw
cGVuZEZvbnRXaXRoSW52YWxpZFVuaWNvZGVSYW5nZUlmTG9hZGluZyhmb250UmFuZ2VzLCBmYWNl
Rm9udC5yZWxlYXNlTm9uTnVsbCgpLCBmYWNlLT5yYW5nZXMoKSk7CiAgICAgICAgIH0KICAgICB9
CiAgICAgcmV0dXJuIGZvbnRSYW5nZXM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgJKHJl
dmlzaW9uIDE3ODUxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAgY2xhc3MgSGl0VGVzdFJlc3VsdDsKIGNsYXNzIEtp
bGxSaW5nOwogY2xhc3MgUGFzdGVib2FyZDsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKLWNsYXNzIFNp
bXBsZUZvbnREYXRhOworY2xhc3MgRm9udDsKIGNsYXNzIFNwZWxsQ2hlY2tSZXF1ZXN0OwogY2xh
c3MgU3BlbGxDaGVja2VyOwogY2xhc3MgU3R5bGVQcm9wZXJ0aWVzOwpAQCAtNDIyLDcgKzQyMiw3
IEBAIHB1YmxpYzoKICNpZiBQTEFURk9STShDT0NPQSkKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0
aWMgUmVuZGVyU3R5bGUqIHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQoRnJhbWUqICwgTm9kZSAqJm5v
ZGVUb1JlbW92ZSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpbnNlcnRQYXJhZ3JhcGhTZXBh
cmF0b3JJblF1b3RlZENvbnRlbnQoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBTaW1wbGVG
b250RGF0YSogZm9udEZvclNlbGVjdGlvbihib29sJikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBP
UlQgY29uc3QgRm9udCogZm9udEZvclNlbGVjdGlvbihib29sJikgY29uc3Q7CiAgICAgV0VCQ09S
RV9FWFBPUlQgTlNEaWN0aW9uYXJ5ICpmb250QXR0cmlidXRlc0ZvclNlbGVjdGlvblN0YXJ0KCkg
Y29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHN0cmluZ1NlbGVjdGlvbkZvclBhc3Rl
Ym9hcmQoKTsKICAgICBTdHJpbmcgc3RyaW5nU2VsZWN0aW9uRm9yUGFzdGVib2FyZFdpdGhJbWFn
ZUFsdFRleHQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZl
cnRlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0hUTUxD
b252ZXJ0ZXIubW0JKHJldmlzaW9uIDE3ODUxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
Y29jb2EvSFRNTENvbnZlcnRlci5tbQkod29ya2luZyBjb3B5KQpAQCAtMTExNCw3ICsxMTE0LDcg
QEAgc3RhdGljIFBsYXRmb3JtRm9udCAqX2ZvbnQoRWxlbWVudCYgZWxlbQogICAgIGF1dG8gcmVu
ZGVyZXIgPSBlbGVtZW50LnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAg
cmV0dXJuIG5pbDsKLSAgICByZXR1cm4gcmVuZGVyZXItPnN0eWxlKCkuZm9udENhc2NhZGUoKS5w
cmltYXJ5Rm9udERhdGEoKS5nZXROU0ZvbnQoKTsKKyAgICByZXR1cm4gcmVuZGVyZXItPnN0eWxl
KCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpLmdldE5TRm9udCgpOwogfQogI2Vsc2UKIHN0
YXRpYyBQbGF0Zm9ybUZvbnQgKl9mb250KEVsZW1lbnQmIGVsZW1lbnQpCkBAIC0xMTIyLDcgKzEx
MjIsNyBAQCBzdGF0aWMgUGxhdGZvcm1Gb250ICpfZm9udChFbGVtZW50JiBlbGVtCiAgICAgYXV0
byByZW5kZXJlciA9IGVsZW1lbnQucmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQogICAg
ICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiAoUGxhdGZvcm1Gb250ICopcmVuZGVyZXItPnN0
eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXRDVEZvbnQoKTsKKyAgICBy
ZXR1cm4gKFBsYXRmb3JtRm9udCAqKXJlbmRlcmVyLT5zdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJp
bWFyeUZvbnQoKS5nZXRDVEZvbnQoKTsKIH0KICNlbmRpZgogCkBAIC0yNTk0LDEwICsyNTk0LDEw
IEBAIE5TQXR0cmlidXRlZFN0cmluZyAqZWRpdGluZ0F0dHJpYnV0ZWRTdHIKICAgICAgICAgICAg
IFthdHRycy5nZXQoKSBzZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhJbnRlZ2VyOk5TVW5k
ZXJsaW5lU3R5bGVTaW5nbGVdIGZvcktleTpOU1VuZGVybGluZVN0eWxlQXR0cmlidXRlTmFtZV07
CiAgICAgICAgIGlmIChzdHlsZS50ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgpICYgVGV4dERlY29y
YXRpb25MaW5lVGhyb3VnaCkKICAgICAgICAgICAgIFthdHRycy5nZXQoKSBzZXRPYmplY3Q6W05T
TnVtYmVyIG51bWJlcldpdGhJbnRlZ2VyOk5TVW5kZXJsaW5lU3R5bGVTaW5nbGVdIGZvcktleTpO
U1N0cmlrZXRocm91Z2hTdHlsZUF0dHJpYnV0ZU5hbWVdOwotICAgICAgICBpZiAoTlNGb250ICpm
b250ID0gc3R5bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXROU0ZvbnQoKSkK
KyAgICAgICAgaWYgKE5TRm9udCAqZm9udCA9IHN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZv
bnQoKS5nZXROU0ZvbnQoKSkKICAgICAgICAgICAgIFthdHRycy5nZXQoKSBzZXRPYmplY3Q6Zm9u
dCBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IFthdHRycy5nZXQoKSBzZXRPYmplY3Q6W2ZvbnRNYW5hZ2VyIGNvbnZlcnRGb250OldlYkRlZmF1
bHRGb250KCkgdG9TaXplOnN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkucGxh
dGZvcm1EYXRhKCkuc2l6ZSgpXSBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CisgICAgICAg
ICAgICBbYXR0cnMuZ2V0KCkgc2V0T2JqZWN0Oltmb250TWFuYWdlciBjb252ZXJ0Rm9udDpXZWJE
ZWZhdWx0Rm9udCgpIHRvU2l6ZTpzdHlsZS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCkucGxh
dGZvcm1EYXRhKCkuc2l6ZSgpXSBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CiAgICAgICAg
IGlmIChzdHlsZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikuYWxwaGEo
KSkKICAgICAgICAgICAgIFthdHRycy5nZXQoKSBzZXRPYmplY3Q6bnNDb2xvcihzdHlsZS52aXNp
dGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikpIGZvcktleTpOU0ZvcmVncm91bmRD
b2xvckF0dHJpYnV0ZU5hbWVdOwogICAgICAgICBlbHNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRp
dGluZy9pb3MvRWRpdG9ySU9TLm1tCShyZXZpc2lvbiAxNzg1MTUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTIwMyw3ICsyMDMs
NyBAQCBib29sIEVkaXRvcjo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLWNvbnN0IFNpbXBsZUZvbnREYXRhKiBFZGl0b3I6OmZvbnRGb3JTZWxlY3Rp
b24oYm9vbCYgaGFzTXVsdGlwbGVGb250cykgY29uc3QKK2NvbnN0IEZvbnQqIEVkaXRvcjo6Zm9u
dEZvclNlbGVjdGlvbihib29sJiBoYXNNdWx0aXBsZUZvbnRzKSBjb25zdAogewogICAgIGhhc011
bHRpcGxlRm9udHMgPSBmYWxzZTsKIApAQCAtMjExLDkgKzIxMSw5IEBAIGNvbnN0IFNpbXBsZUZv
bnREYXRhKiBFZGl0b3I6OmZvbnRGb3JTZWwKICAgICAgICAgTm9kZSogbm9kZVRvUmVtb3ZlOwog
ICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBzdHlsZUZvclNlbGVjdGlvblN0YXJ0KCZtX2Zy
YW1lLCBub2RlVG9SZW1vdmUpOyAvLyBzZXRzIG5vZGVUb1JlbW92ZQogCi0gICAgICAgIGNvbnN0
IFNpbXBsZUZvbnREYXRhKiByZXN1bHQgPSBudWxscHRyOworICAgICAgICBjb25zdCBGb250KiBy
ZXN1bHQgPSBudWxscHRyOwogICAgICAgICBpZiAoc3R5bGUpCi0gICAgICAgICAgICByZXN1bHQg
PSAmc3R5bGUtPmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCk7CisgICAgICAgICAgICBy
ZXN1bHQgPSAmc3R5bGUtPmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKTsKIAogICAgICAgICBp
ZiAobm9kZVRvUmVtb3ZlKSB7CiAgICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVjOwpAQCAtMjI0
LDcgKzIyNCw3IEBAIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBFZGl0b3I6OmZvbnRGb3JTZWwKICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBjb25zdCBTaW1wbGVGb250RGF0YSog
Zm9udCA9IDA7CisgICAgY29uc3QgRm9udCogZm9udCA9IDA7CiAgICAgUmVmUHRyPFJhbmdlPiBy
YW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAo
Tm9kZSogc3RhcnROb2RlID0gYWRqdXN0ZWRTZWxlY3Rpb25TdGFydEZvclN0eWxlQ29tcHV0YXRp
b24obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSkuZGVwcmVjYXRlZE5vZGUoKSkgewog
ICAgICAgICBOb2RlKiBwYXN0RW5kID0gcmFuZ2UtPnBhc3RMYXN0Tm9kZSgpOwpAQCAtMjM1LDcg
KzIzNSw3IEBAIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBFZGl0b3I6OmZvbnRGb3JTZWwKICAgICAg
ICAgICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICAvLyBGSVhNRTogQXJlIHRoZXJlIGFueSBub2RlIHR5cGVzIHRoYXQgaGF2ZSByZW5kZXJl
cnMsIGJ1dCB0aGF0IHdlIHNob3VsZCBiZSBza2lwcGluZz8KLSAgICAgICAgICAgIGNvbnN0IFNp
bXBsZUZvbnREYXRhJiBwcmltYXJ5Rm9udCA9IHJlbmRlcmVyLT5zdHlsZSgpLmZvbnRDYXNjYWRl
KCkucHJpbWFyeUZvbnREYXRhKCk7CisgICAgICAgICAgICBjb25zdCBGb250JiBwcmltYXJ5Rm9u
dCA9IHJlbmRlcmVyLT5zdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKTsKICAgICAg
ICAgICAgIGlmICghZm9udCkKICAgICAgICAgICAgICAgICBmb250ID0gJnByaW1hcnlGb250Owog
ICAgICAgICAgICAgZWxzZSBpZiAoZm9udCAhPSAmcHJpbWFyeUZvbnQpIHsKQEAgLTI1Nyw3ICsy
NTcsNyBAQCBOU0RpY3Rpb25hcnkqIEVkaXRvcjo6Zm9udEF0dHJpYnV0ZXNGb3JTCiAKICAgICBO
U011dGFibGVEaWN0aW9uYXJ5KiByZXN1bHQgPSBbTlNNdXRhYmxlRGljdGlvbmFyeSBkaWN0aW9u
YXJ5XTsKICAgICAKLSAgICBDVEZvbnRSZWYgZm9udCA9IHN0eWxlLT5mb250Q2FzY2FkZSgpLnBy
aW1hcnlGb250RGF0YSgpLmdldENURm9udCgpOworICAgIENURm9udFJlZiBmb250ID0gc3R5bGUt
PmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKS5nZXRDVEZvbnQoKTsKICAgICBpZiAoZm9udCkK
ICAgICAgICAgW3Jlc3VsdCBzZXRPYmplY3Q6KGlkKWZvbnQgZm9yS2V5Ok5TRm9udEF0dHJpYnV0
ZU5hbWVdOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCShy
ZXZpc2lvbiAxNzg1MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTEwNSw3ICsxMDUsNyBAQCBib29sIEVkaXRvcjo6aW5zZXJ0
UGFyYWdyYXBoU2VwYXJhdG9ySW5RCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWNvbnN0IFNpbXBs
ZUZvbnREYXRhKiBFZGl0b3I6OmZvbnRGb3JTZWxlY3Rpb24oYm9vbCYgaGFzTXVsdGlwbGVGb250
cykgY29uc3QKK2NvbnN0IEZvbnQqIEVkaXRvcjo6Zm9udEZvclNlbGVjdGlvbihib29sJiBoYXNN
dWx0aXBsZUZvbnRzKSBjb25zdAogewogICAgIGhhc011bHRpcGxlRm9udHMgPSBmYWxzZTsKIApA
QCAtMTEzLDkgKzExMyw5IEBAIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBFZGl0b3I6OmZvbnRGb3JT
ZWwKICAgICAgICAgTm9kZSogbm9kZVRvUmVtb3ZlOwogICAgICAgICBSZW5kZXJTdHlsZSogc3R5
bGUgPSBzdHlsZUZvclNlbGVjdGlvblN0YXJ0KCZtX2ZyYW1lLCBub2RlVG9SZW1vdmUpOyAvLyBz
ZXRzIG5vZGVUb1JlbW92ZQogCi0gICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiByZXN1bHQg
PSBudWxscHRyOworICAgICAgICBjb25zdCBGb250KiByZXN1bHQgPSBudWxscHRyOwogICAgICAg
ICBpZiAoc3R5bGUpCi0gICAgICAgICAgICByZXN1bHQgPSAmc3R5bGUtPmZvbnRDYXNjYWRlKCku
cHJpbWFyeUZvbnREYXRhKCk7CisgICAgICAgICAgICByZXN1bHQgPSAmc3R5bGUtPmZvbnRDYXNj
YWRlKCkucHJpbWFyeUZvbnQoKTsKIAogICAgICAgICBpZiAobm9kZVRvUmVtb3ZlKQogICAgICAg
ICAgICAgbm9kZVRvUmVtb3ZlLT5yZW1vdmUoQVNTRVJUX05PX0VYQ0VQVElPTik7CkBAIC0xMjMs
NyArMTIzLDcgQEAgY29uc3QgU2ltcGxlRm9udERhdGEqIEVkaXRvcjo6Zm9udEZvclNlbAogICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBm
b250ID0gMDsKKyAgICBjb25zdCBGb250KiBmb250ID0gMDsKICAgICBSZWZQdHI8UmFuZ2U+IHJh
bmdlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIE5vZGUq
IHN0YXJ0Tm9kZSA9IGFkanVzdGVkU2VsZWN0aW9uU3RhcnRGb3JTdHlsZUNvbXB1dGF0aW9uKG1f
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgaWYg
KHJhbmdlICYmIHN0YXJ0Tm9kZSkgewpAQCAtMTM1LDcgKzEzNSw3IEBAIGNvbnN0IFNpbXBsZUZv
bnREYXRhKiBFZGl0b3I6OmZvbnRGb3JTZWwKICAgICAgICAgICAgIGlmICghcmVuZGVyZXIpCiAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAvLyBGSVhNRTogQXJlIHRoZXJl
IGFueSBub2RlIHR5cGVzIHRoYXQgaGF2ZSByZW5kZXJlcnMsIGJ1dCB0aGF0IHdlIHNob3VsZCBi
ZSBza2lwcGluZz8KLSAgICAgICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhJiBwcmltYXJ5Rm9u
dCA9IHJlbmRlcmVyLT5zdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCk7Cisg
ICAgICAgICAgICBjb25zdCBGb250JiBwcmltYXJ5Rm9udCA9IHJlbmRlcmVyLT5zdHlsZSgpLmZv
bnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKTsKICAgICAgICAgICAgIGlmICghZm9udCkKICAgICAg
ICAgICAgICAgICBmb250ID0gJnByaW1hcnlGb250OwogICAgICAgICAgICAgZWxzZSBpZiAoZm9u
dCAhPSAmcHJpbWFyeUZvbnQpIHsKQEAgLTE2MCw4ICsxNjAsOCBAQCBOU0RpY3Rpb25hcnkqIEVk
aXRvcjo6Zm9udEF0dHJpYnV0ZXNGb3JTCiAgICAgaWYgKHN0eWxlLT52aXNpdGVkRGVwZW5kZW50
Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpLmlzVmFsaWQoKSAmJiBzdHlsZS0+dmlz
aXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKS5hbHBoYSgpICE9
IDApCiAgICAgICAgIFtyZXN1bHQgc2V0T2JqZWN0Om5zQ29sb3Ioc3R5bGUtPnZpc2l0ZWREZXBl
bmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikpIGZvcktleTpOU0JhY2tncm91
bmRDb2xvckF0dHJpYnV0ZU5hbWVdOwogCi0gICAgaWYgKHN0eWxlLT5mb250Q2FzY2FkZSgpLnBy
aW1hcnlGb250RGF0YSgpLmdldE5TRm9udCgpKQotICAgICAgICBbcmVzdWx0IHNldE9iamVjdDpz
dHlsZS0+Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXROU0ZvbnQoKSBmb3JLZXk6
TlNGb250QXR0cmlidXRlTmFtZV07CisgICAgaWYgKHN0eWxlLT5mb250Q2FzY2FkZSgpLnByaW1h
cnlGb250KCkuZ2V0TlNGb250KCkpCisgICAgICAgIFtyZXN1bHQgc2V0T2JqZWN0OnN0eWxlLT5m
b250Q2FzY2FkZSgpLnByaW1hcnlGb250KCkuZ2V0TlNGb250KCkgZm9yS2V5Ok5TRm9udEF0dHJp
YnV0ZU5hbWVdOwogCiAgICAgaWYgKHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJv
cGVydHlDb2xvcikuaXNWYWxpZCgpICYmIHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NT
UHJvcGVydHlDb2xvcikgIT0gQ29sb3I6OmJsYWNrKQogICAgICAgICBbcmVzdWx0IHNldE9iamVj
dDpuc0NvbG9yKHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikp
IGZvcktleTpOU0ZvcmVncm91bmRDb2xvckF0dHJpYnV0ZU5hbWVdOwpJbmRleDogU291cmNlL1dl
YkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRGb250LmNwcAkocmV2aXNpb24gMTc4NTE1KQorKysg
U291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05OSw3ICs5OSw3IEBAIGJvb2wgQ2FjaGVkRm9udDo6ZW5zdXJlQ3VzdG9tRm9udERhdGEo
Ym8KIAogYm9vbCBDYWNoZWRGb250OjplbnN1cmVDdXN0b21Gb250RGF0YShSZWZQdHI8U2hhcmVk
QnVmZmVyPiYmIGRhdGEpCiB7Ci0gICAgaWYgKCFtX2ZvbnREYXRhICYmICFlcnJvck9jY3VycmVk
KCkgJiYgIWlzTG9hZGluZygpICYmIGRhdGEpIHsKKyAgICBpZiAoIW1fZm9udEN1c3RvbVBsYXRm
b3JtRGF0YSAmJiAhZXJyb3JPY2N1cnJlZCgpICYmICFpc0xvYWRpbmcoKSAmJiBkYXRhKSB7CiAg
ICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciA9IGRhdGE7CiAKICNpZiAoIVBMQVRG
T1JNKE1BQykgfHwgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA8PSAxMDkwKSAmJiAo
IVBMQVRGT1JNKElPUykgfHwgX19JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPCA4MDAw
MCkKQEAgLTExMiwzMCArMTEyLDMwIEBAIGJvb2wgQ2FjaGVkRm9udDo6ZW5zdXJlQ3VzdG9tRm9u
dERhdGEoUmUKICAgICAgICAgfQogI2VuZGlmCiAKLSAgICAgICAgbV9mb250RGF0YSA9IGJ1ZmZl
ciA/IGNyZWF0ZUZvbnRDdXN0b21QbGF0Zm9ybURhdGEoKmJ1ZmZlcikgOiBudWxscHRyOwotICAg
ICAgICBtX2hhc0NyZWF0ZWRGb250RGF0YVdyYXBwaW5nUmVzb3VyY2UgPSBtX2ZvbnREYXRhICYm
IChidWZmZXIgPT0gbV9kYXRhKTsKLSAgICAgICAgaWYgKCFtX2ZvbnREYXRhKQorICAgICAgICBt
X2ZvbnRDdXN0b21QbGF0Zm9ybURhdGEgPSBidWZmZXIgPyBjcmVhdGVGb250Q3VzdG9tUGxhdGZv
cm1EYXRhKCpidWZmZXIpIDogbnVsbHB0cjsKKyAgICAgICAgbV9oYXNDcmVhdGVkRm9udERhdGFX
cmFwcGluZ1Jlc291cmNlID0gbV9mb250Q3VzdG9tUGxhdGZvcm1EYXRhICYmIChidWZmZXIgPT0g
bV9kYXRhKTsKKyAgICAgICAgaWYgKCFtX2ZvbnRDdXN0b21QbGF0Zm9ybURhdGEpCiAgICAgICAg
ICAgICBzZXRTdGF0dXMoRGVjb2RlRXJyb3IpOwogICAgIH0KIAotICAgIHJldHVybiBtX2ZvbnRE
YXRhLmdldCgpOworICAgIHJldHVybiBtX2ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuZ2V0KCk7CiB9
CiAKLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IENhY2hlZEZvbnQ6OmdldEZvbnREYXRhKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcm
LCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljLCBib29sKQorUmVmUHRy
PEZvbnQ+IENhY2hlZEZvbnQ6OmNyZWF0ZUZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYsIGJvb2wgc3ludGhldGljQm9sZCwgYm9v
bCBzeW50aGV0aWNJdGFsaWMsIGJvb2wpCiB7Ci0gICAgcmV0dXJuIFNpbXBsZUZvbnREYXRhOjpj
cmVhdGUocGxhdGZvcm1EYXRhRnJvbUN1c3RvbURhdGEoZm9udERlc2NyaXB0aW9uLmNvbXB1dGVk
UGl4ZWxTaXplKCksIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYywKKyAgICByZXR1cm4g
Rm9udDo6Y3JlYXRlKHBsYXRmb3JtRGF0YUZyb21DdXN0b21EYXRhKGZvbnREZXNjcmlwdGlvbi5j
b21wdXRlZFBpeGVsU2l6ZSgpLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMsCiAgICAg
ICAgIGZvbnREZXNjcmlwdGlvbi5vcmllbnRhdGlvbigpLCBmb250RGVzY3JpcHRpb24ud2lkdGhW
YXJpYW50KCksIGZvbnREZXNjcmlwdGlvbi5yZW5kZXJpbmdNb2RlKCkpLCB0cnVlLCBmYWxzZSk7
CiB9CiAKIEZvbnRQbGF0Zm9ybURhdGEgQ2FjaGVkRm9udDo6cGxhdGZvcm1EYXRhRnJvbUN1c3Rv
bURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0YWxpYywgRm9udE9yaWVudGF0aW9u
IG9yaWVudGF0aW9uLCBGb250V2lkdGhWYXJpYW50IHdpZHRoVmFyaWFudCwgRm9udFJlbmRlcmlu
Z01vZGUgcmVuZGVyaW5nTW9kZSkKIHsKLSAgICBBU1NFUlQobV9mb250RGF0YSk7Ci0gICAgcmV0
dXJuIG1fZm9udERhdGEtPmZvbnRQbGF0Zm9ybURhdGEoc3RhdGljX2Nhc3Q8aW50PihzaXplKSwg
Ym9sZCwgaXRhbGljLCBvcmllbnRhdGlvbiwgd2lkdGhWYXJpYW50LCByZW5kZXJpbmdNb2RlKTsK
KyAgICBBU1NFUlQobV9mb250Q3VzdG9tUGxhdGZvcm1EYXRhKTsKKyAgICByZXR1cm4gbV9mb250
Q3VzdG9tUGxhdGZvcm1EYXRhLT5mb250UGxhdGZvcm1EYXRhKHN0YXRpY19jYXN0PGludD4oc2l6
ZSksIGJvbGQsIGl0YWxpYywgb3JpZW50YXRpb24sIHdpZHRoVmFyaWFudCwgcmVuZGVyaW5nTW9k
ZSk7CiB9CiAKIHZvaWQgQ2FjaGVkRm9udDo6YWxsQ2xpZW50c1JlbW92ZWQoKQogewotICAgIG1f
Zm9udERhdGEgPSBudWxscHRyOworICAgIG1fZm9udEN1c3RvbVBsYXRmb3JtRGF0YSA9IG51bGxw
dHI7CiB9CiAKIHZvaWQgQ2FjaGVkRm9udDo6Y2hlY2tOb3RpZnkoKQpJbmRleDogU291cmNlL1dl
YkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkRm9udC5oCShyZXZpc2lvbiAxNzg1MTUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkRm9udC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCwxMCArMjgsMTAgQEAKIAogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlLmgiCiAjaW5jbHVkZSAi
Q2FjaGVkUmVzb3VyY2VDbGllbnQuaCIKKyNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9u
dE9yaWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiRm9udFJlbmRlcmluZ01vZGUuaCIKICNpbmNsdWRl
ICJGb250V2lkdGhWYXJpYW50LmgiCi0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCkBAIC01Miw3ICs1Miw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1
YWwgYm9vbCBlbnN1cmVDdXN0b21Gb250RGF0YShib29sIGV4dGVybmFsU1ZHLCBjb25zdCBBdG9t
aWNTdHJpbmcmIHJlbW90ZVVSSSk7CiAKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U2ltcGxlRm9u
dERhdGE+IGdldEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0
cmluZyYgcmVtb3RlVVJJLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGlj
LCBib29sIGV4dGVybmFsU1ZHKTsKKyAgICB2aXJ0dWFsIFJlZlB0cjxGb250PiBjcmVhdGVGb250
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYgcmVtb3RlVVJJLCBi
b29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljLCBib29sIGV4dGVybmFsU1ZH
KTsKIAogcHJvdGVjdGVkOgogICAgIEZvbnRQbGF0Zm9ybURhdGEgcGxhdGZvcm1EYXRhRnJvbUN1
c3RvbURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0YWxpYywgRm9udE9yaWVudGF0
aW9uID0gSG9yaXpvbnRhbCwgRm9udFdpZHRoVmFyaWFudCA9IFJlZ3VsYXJXaWR0aCwgRm9udFJl
bmRlcmluZ01vZGUgPSBOb3JtYWxSZW5kZXJpbmdNb2RlKTsKQEAgLTcwLDcgKzcwLDcgQEAgcHJp
dmF0ZToKIAogICAgIHZpcnR1YWwgdm9pZCBhbGxDbGllbnRzUmVtb3ZlZCgpIG92ZXJyaWRlOwog
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEZvbnRDdXN0b21QbGF0Zm9ybURhdGE+IG1fZm9udERhdGE7
CisgICAgc3RkOjp1bmlxdWVfcHRyPEZvbnRDdXN0b21QbGF0Zm9ybURhdGE+IG1fZm9udEN1c3Rv
bVBsYXRmb3JtRGF0YTsKICAgICBib29sIG1fbG9hZEluaXRpYXRlZDsKICAgICBib29sIG1faGFz
Q3JlYXRlZEZvbnREYXRhV3JhcHBpbmdSZXNvdXJjZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
bG9hZGVyL2NhY2hlL0NhY2hlZFNWR0ZvbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTVkdGb250LmNwcAkocmV2aXNpb24gMTc4NTE1KQorKysg
U291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFNWR0ZvbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01MSwxNSArNTEsMTUgQEAgQ2FjaGVkU1ZHRm9udDo6Q2FjaGVkU1ZHRm9udChjb25z
dCBSZXNvdQogewogfQogCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBDYWNoZWRTVkdGb250
OjpnZXRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29u
c3QgQXRvbWljU3RyaW5nJiByZW1vdGVVUkksIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50
aGV0aWNJdGFsaWMsIGJvb2wgZXh0ZXJuYWxTVkcpCitSZWZQdHI8Rm9udD4gQ2FjaGVkU1ZHRm9u
dDo6Y3JlYXRlRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29u
c3QgQXRvbWljU3RyaW5nJiByZW1vdGVVUkksIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50
aGV0aWNJdGFsaWMsIGJvb2wgZXh0ZXJuYWxTVkcpCiB7CiAjaWYgIUVOQUJMRShTVkdfT1RGX0NP
TlZFUlRFUikKICAgICBpZiAoIWV4dGVybmFsU1ZHKQogI2VuZGlmCi0gICAgICAgIHJldHVybiBD
YWNoZWRGb250OjpnZXRGb250RGF0YShmb250RGVzY3JpcHRpb24sIHJlbW90ZVVSSSwgc3ludGhl
dGljQm9sZCwgc3ludGhldGljSXRhbGljLCBleHRlcm5hbFNWRyk7CisgICAgICAgIHJldHVybiBD
YWNoZWRGb250OjpjcmVhdGVGb250KGZvbnREZXNjcmlwdGlvbiwgcmVtb3RlVVJJLCBzeW50aGV0
aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMsIGV4dGVybmFsU1ZHKTsKIAogICAgIGlmIChTVkdGb250
RmFjZUVsZW1lbnQqIGZpcnN0Rm9udEZhY2UgPSB0aGlzLT5maXJzdEZvbnRGYWNlKHJlbW90ZVVS
SSkpCi0gICAgICAgIHJldHVybiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlKHN0ZDo6bWFrZV91bmlx
dWU8U1ZHRm9udERhdGE+KGZpcnN0Rm9udEZhY2UpLCBmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQ
aXhlbFNpemUoKSwgc3ludGhldGljQm9sZCwgc3ludGhldGljSXRhbGljKTsKKyAgICAgICAgcmV0
dXJuIEZvbnQ6OmNyZWF0ZShzdGQ6Om1ha2VfdW5pcXVlPFNWR0ZvbnREYXRhPihmaXJzdEZvbnRG
YWNlKSwgZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCksIHN5bnRoZXRpY0JvbGQs
IHN5bnRoZXRpY0l0YWxpYyk7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTVkdGb250LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFNWR0ZvbnQuaAkocmV2aXNpb24gMTc4NTE1
KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFNWR0ZvbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgZW5z
dXJlQ3VzdG9tRm9udERhdGEoYm9vbCBleHRlcm5hbFNWRywgY29uc3QgQXRvbWljU3RyaW5nJiBy
ZW1vdGVVUkkpIG92ZXJyaWRlOwogICAgIAotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTaW1wbGVG
b250RGF0YT4gZ2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbWlj
U3RyaW5nJiByZW1vdGVVUkksIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFs
aWMsIGJvb2wgZXh0ZXJuYWxTVkcpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgUmVmUHRyPEZvbnQ+
IGNyZWF0ZUZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbWljU3RyaW5nJiBy
ZW1vdGVVUkksIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMsIGJvb2wg
ZXh0ZXJuYWxTVkcpIG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIEZvbnRQbGF0Zm9ybURhdGEg
cGxhdGZvcm1EYXRhRnJvbUN1c3RvbURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0
YWxpYywgRm9udE9yaWVudGF0aW9uID0gSG9yaXpvbnRhbCwgRm9udFdpZHRoVmFyaWFudCA9IFJl
Z3VsYXJXaWR0aCwgRm9udFJlbmRlcmluZ01vZGUgPSBOb3JtYWxSZW5kZXJpbmdNb2RlKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCShyZXZpc2lvbiAx
Nzg1MTUpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnRE
YXRhLmNwcDoxNzg1MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ1NiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNSwgMjAwOCwgMjAxMCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBu
b3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisKKyNpZiBQTEFURk9STShJT1MpIHx8IChQTEFU
Rk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPiAxMDgwKQorI2lu
Y2x1ZGUgIkNvcmVUZXh0U1BJLmgiCisjZW5kaWYKKyNpbmNsdWRlICJGb250Q2FjaGUuaCIKKyNp
bmNsdWRlICJGb250Q2FzY2FkZS5oIgorI2luY2x1ZGUgIk9wZW5UeXBlTWF0aERhdGEuaCIKKyNp
bmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5o
PgorCisjaWYgRU5BQkxFKE9QRU5UWVBFX1ZFUlRJQ0FMKQorI2luY2x1ZGUgIk9wZW5UeXBlVmVy
dGljYWxEYXRhLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1bnNpZ25lZCBH
bHlwaFBhZ2U6OnNfY291bnQgPSAwOworCitjb25zdCBmbG9hdCBzbWFsbENhcHNGb250U2l6ZU11
bHRpcGxpZXIgPSAwLjdmOworY29uc3QgZmxvYXQgZW1waGFzaXNNYXJrRm9udFNpemVNdWx0aXBs
aWVyID0gMC41ZjsKKworU2ltcGxlRm9udERhdGE6OlNpbXBsZUZvbnREYXRhKGNvbnN0IEZvbnRQ
bGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSwgYm9vbCBpc0N1c3RvbUZvbnQsIGJvb2wgaXNMb2Fk
aW5nLCBib29sIGlzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2spCisgICAgOiBtX21heENoYXJXaWR0
aCgtMSkKKyAgICAsIG1fYXZnQ2hhcldpZHRoKC0xKQorICAgICwgbV9wbGF0Zm9ybURhdGEocGxh
dGZvcm1EYXRhKQorICAgICwgbV90cmVhdEFzRml4ZWRQaXRjaChmYWxzZSkKKyAgICAsIG1faXND
dXN0b21Gb250KGlzQ3VzdG9tRm9udCkKKyAgICAsIG1faXNMb2FkaW5nKGlzTG9hZGluZykKKyAg
ICAsIG1faXNUZXh0T3JpZW50YXRpb25GYWxsYmFjayhpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNr
KQorICAgICwgbV9pc0Jyb2tlbklkZW9ncmFwaEZhbGxiYWNrKGZhbHNlKQorICAgICwgbV9tYXRo
RGF0YShudWxscHRyKQorI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKKyAgICAsIG1fdmVy
dGljYWxEYXRhKDApCisjZW5kaWYKKyAgICAsIG1faGFzVmVydGljYWxHbHlwaHMoZmFsc2UpCit7
CisgICAgcGxhdGZvcm1Jbml0KCk7CisgICAgcGxhdGZvcm1HbHlwaEluaXQoKTsKKyAgICBwbGF0
Zm9ybUNoYXJXaWR0aEluaXQoKTsKKyNpZiBFTkFCTEUoT1BFTlRZUEVfVkVSVElDQUwpCisgICAg
aWYgKHBsYXRmb3JtRGF0YS5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsICYmICFpc1RleHRPcmll
bnRhdGlvbkZhbGxiYWNrKSB7CisgICAgICAgIG1fdmVydGljYWxEYXRhID0gcGxhdGZvcm1EYXRh
LnZlcnRpY2FsRGF0YSgpOworICAgICAgICBtX2hhc1ZlcnRpY2FsR2x5cGhzID0gbV92ZXJ0aWNh
bERhdGEuZ2V0KCkgJiYgbV92ZXJ0aWNhbERhdGEtPmhhc1ZlcnRpY2FsTWV0cmljcygpOworICAg
IH0KKyNlbmRpZgorfQorCitTaW1wbGVGb250RGF0YTo6U2ltcGxlRm9udERhdGEoc3RkOjp1bmlx
dWVfcHRyPFNWR0RhdGE+IHN2Z0RhdGEsIGZsb2F0IGZvbnRTaXplLCBib29sIHN5bnRoZXRpY0Jv
bGQsIGJvb2wgc3ludGhldGljSXRhbGljKQorICAgIDogbV9wbGF0Zm9ybURhdGEoRm9udFBsYXRm
b3JtRGF0YShmb250U2l6ZSwgc3ludGhldGljQm9sZCwgc3ludGhldGljSXRhbGljKSkKKyAgICAs
IG1fc3ZnRGF0YShXVEY6Om1vdmUoc3ZnRGF0YSkpCisgICAgLCBtX3RyZWF0QXNGaXhlZFBpdGNo
KGZhbHNlKQorICAgICwgbV9pc0N1c3RvbUZvbnQodHJ1ZSkKKyAgICAsIG1faXNMb2FkaW5nKGZh
bHNlKQorICAgICwgbV9pc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKGZhbHNlKQorICAgICwgbV9p
c0Jyb2tlbklkZW9ncmFwaEZhbGxiYWNrKGZhbHNlKQorICAgICwgbV9tYXRoRGF0YShudWxscHRy
KQorI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKKyAgICAsIG1fdmVydGljYWxEYXRhKDAp
CisjZW5kaWYKKyAgICAsIG1faGFzVmVydGljYWxHbHlwaHMoZmFsc2UpCisjaWYgUExBVEZPUk0o
SU9TKQorICAgICwgbV9zaG91bGROb3RCZVVzZWRGb3JBcmFiaWMoZmFsc2UpCisjZW5kaWYKK3sK
KyAgICBtX3N2Z0RhdGEtPmluaXRpYWxpemVGb250RGF0YSh0aGlzLCBmb250U2l6ZSk7Cit9CisK
Ky8vIEVzdGltYXRlcyBvZiBhdmdDaGFyV2lkdGggYW5kIG1heENoYXJXaWR0aCBmb3IgcGxhdGZv
cm1zIHRoYXQgZG9uJ3Qgc3VwcG9ydCBhY2Nlc3NpbmcgdGhlc2UgdmFsdWVzIGZyb20gdGhlIGZv
bnQuCit2b2lkIFNpbXBsZUZvbnREYXRhOjppbml0Q2hhcldpZHRocygpCit7CisgICAgYXV0byog
Z2x5cGhQYWdlWmVybyA9IGdseXBoUGFnZSgwKTsKKworICAgIC8vIFRyZWF0IHRoZSB3aWR0aCBv
ZiBhICcwJyBhcyB0aGUgYXZnQ2hhcldpZHRoLgorICAgIGlmIChtX2F2Z0NoYXJXaWR0aCA8PSAw
LmYgJiYgZ2x5cGhQYWdlWmVybykgeworICAgICAgICBzdGF0aWMgY29uc3QgVUNoYXIzMiBkaWdp
dFplcm9DaGFyID0gJzAnOworICAgICAgICBHbHlwaCBkaWdpdFplcm9HbHlwaCA9IGdseXBoUGFn
ZVplcm8tPmdseXBoRGF0YUZvckNoYXJhY3RlcihkaWdpdFplcm9DaGFyKS5nbHlwaDsKKyAgICAg
ICAgaWYgKGRpZ2l0WmVyb0dseXBoKQorICAgICAgICAgICAgbV9hdmdDaGFyV2lkdGggPSB3aWR0
aEZvckdseXBoKGRpZ2l0WmVyb0dseXBoKTsKKyAgICB9CisKKyAgICAvLyBJZiB3ZSBjYW4ndCBy
ZXRyaWV2ZSB0aGUgd2lkdGggb2YgYSAnMCcsIGZhbGwgYmFjayB0byB0aGUgeCBoZWlnaHQuCisg
ICAgaWYgKG1fYXZnQ2hhcldpZHRoIDw9IDAuZikKKyAgICAgICAgbV9hdmdDaGFyV2lkdGggPSBt
X2ZvbnRNZXRyaWNzLnhIZWlnaHQoKTsKKworICAgIGlmIChtX21heENoYXJXaWR0aCA8PSAwLmYp
CisgICAgICAgIG1fbWF4Q2hhcldpZHRoID0gc3RkOjptYXgobV9hdmdDaGFyV2lkdGgsIG1fZm9u
dE1ldHJpY3MuZmxvYXRBc2NlbnQoKSk7Cit9CisKK3ZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRm
b3JtR2x5cGhJbml0KCkKK3sKKyAgICBhdXRvKiBnbHlwaFBhZ2VaZXJvID0gZ2x5cGhQYWdlKDAp
OworICAgIGlmICghZ2x5cGhQYWdlWmVybykgeworICAgICAgICBtX3NwYWNlR2x5cGggPSAwOwor
ICAgICAgICBtX3NwYWNlV2lkdGggPSAwOworICAgICAgICBtX3plcm9HbHlwaCA9IDA7CisgICAg
ICAgIG1fYWRqdXN0ZWRTcGFjZVdpZHRoID0gMDsKKyAgICAgICAgZGV0ZXJtaW5lUGl0Y2goKTsK
KyAgICAgICAgbV96ZXJvV2lkdGhTcGFjZUdseXBoID0gMDsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIC8vIEFzayBmb3IgdGhlIGdseXBoIGZvciAwIHRvIGF2b2lkIHBhZ2luZyBpbiBa
RVJPIFdJRFRIIFNQQUNFLiBDb250cm9sIGNoYXJhY3RlcnMsIGluY2x1ZGluZyAwLAorICAgIC8v
IGFyZSBtYXBwZWQgdG8gdGhlIFpFUk8gV0lEVEggU1BBQ0UgZ2x5cGguCisgICAgbV96ZXJvV2lk
dGhTcGFjZUdseXBoID0gZ2x5cGhQYWdlWmVyby0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKDApLmds
eXBoOworCisgICAgLy8gTmFzdHkgaGFjayB0byBkZXRlcm1pbmUgaWYgd2Ugc2hvdWxkIHJvdW5k
IG9yIGNlaWwgc3BhY2Ugd2lkdGhzLgorICAgIC8vIElmIHRoZSBmb250IGlzIG1vbm9zcGFjZSBv
ciBmYWtlIG1vbm9zcGFjZSB3ZSBjZWlsIHRvIGVuc3VyZSB0aGF0IAorICAgIC8vIGV2ZXJ5IGNo
YXJhY3RlciBhbmQgdGhlIHNwYWNlIGFyZSB0aGUgc2FtZSB3aWR0aC4gIE90aGVyd2lzZSB3ZSBy
b3VuZC4KKyAgICBtX3NwYWNlR2x5cGggPSBnbHlwaFBhZ2VaZXJvLT5nbHlwaERhdGFGb3JDaGFy
YWN0ZXIoJyAnKS5nbHlwaDsKKyAgICBmbG9hdCB3aWR0aCA9IHdpZHRoRm9yR2x5cGgobV9zcGFj
ZUdseXBoKTsKKyAgICBtX3NwYWNlV2lkdGggPSB3aWR0aDsKKyAgICBtX3plcm9HbHlwaCA9IGds
eXBoUGFnZVplcm8tPmdseXBoRGF0YUZvckNoYXJhY3RlcignMCcpLmdseXBoOworICAgIG1fZm9u
dE1ldHJpY3Muc2V0WmVyb1dpZHRoKHdpZHRoRm9yR2x5cGgobV96ZXJvR2x5cGgpKTsKKyAgICBk
ZXRlcm1pbmVQaXRjaCgpOworICAgIG1fYWRqdXN0ZWRTcGFjZVdpZHRoID0gbV90cmVhdEFzRml4
ZWRQaXRjaCA/IGNlaWxmKHdpZHRoKSA6IHJvdW5kZih3aWR0aCk7CisKKyAgICAvLyBGb3JjZSB0
aGUgZ2x5cGggZm9yIFpFUk8gV0lEVEggU1BBQ0UgdG8gaGF2ZSB6ZXJvIHdpZHRoLCB1bmxlc3Mg
aXQgaXMgc2hhcmVkIHdpdGggU1BBQ0UuCisgICAgLy8gSGVsdmV0aWNhIGlzIGFuIGV4YW1wbGUg
b2YgYSBub24temVybyB3aWR0aCBaRVJPIFdJRFRIIFNQQUNFIGdseXBoLgorICAgIC8vIFNlZSA8
aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMxNzg+IGFuZCBTaW1wbGVG
b250RGF0YTo6aXNaZXJvV2lkdGhTcGFjZUdseXBoKCkKKyAgICBpZiAobV96ZXJvV2lkdGhTcGFj
ZUdseXBoID09IG1fc3BhY2VHbHlwaCkKKyAgICAgICAgbV96ZXJvV2lkdGhTcGFjZUdseXBoID0g
MDsKK30KKworU2ltcGxlRm9udERhdGE6On5TaW1wbGVGb250RGF0YSgpCit7CisgICAgcmVtb3Zl
RnJvbVN5c3RlbUZhbGxiYWNrQ2FjaGUoKTsKK30KKworc3RhdGljIGJvb2wgZmlsbEdseXBoUGFn
ZShHbHlwaFBhZ2UmIHBhZ2VUb0ZpbGwsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3Ro
LCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IFNpbXBsZUZvbnRE
YXRhKiBmb250RGF0YSkKK3sKKyNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQorICAgIGlmIChhdXRvKiBz
dmdEYXRhID0gZm9udERhdGEtPnN2Z0RhdGEoKSkKKyAgICAgICAgcmV0dXJuIHN2Z0RhdGEtPmZp
bGxTVkdHbHlwaFBhZ2UoJnBhZ2VUb0ZpbGwsIG9mZnNldCwgbGVuZ3RoLCBidWZmZXIsIGJ1ZmZl
ckxlbmd0aCwgZm9udERhdGEpOworI2VuZGlmCisgICAgYm9vbCBoYXNHbHlwaHMgPSBwYWdlVG9G
aWxsLmZpbGwob2Zmc2V0LCBsZW5ndGgsIGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCBmb250RGF0YSk7
CisjaWYgRU5BQkxFKE9QRU5UWVBFX1ZFUlRJQ0FMKQorICAgIGlmIChoYXNHbHlwaHMgJiYgZm9u
dERhdGEtPnZlcnRpY2FsRGF0YSgpKQorICAgICAgICBmb250RGF0YS0+dmVydGljYWxEYXRhKCkt
PnN1YnN0aXR1dGVXaXRoVmVydGljYWxHbHlwaHMoZm9udERhdGEsICZwYWdlVG9GaWxsLCBvZmZz
ZXQsIGxlbmd0aCk7CisjZW5kaWYKKyAgICByZXR1cm4gaGFzR2x5cGhzOworfQorCitzdGF0aWMg
UmVmUHRyPEdseXBoUGFnZT4gY3JlYXRlQW5kRmlsbEdseXBoUGFnZSh1bnNpZ25lZCBwYWdlTnVt
YmVyLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEpCit7CisjaWYgUExBVEZPUk0oSU9T
KQorICAgIC8vIEZJWE1FOiBUaW1lcyBOZXcgUm9tYW4gY29udGFpbnMgQXJhYmljIGdseXBocywg
YnV0IENvcmUgVGV4dCBkb2Vzbid0IGtub3cgaG93IHRvIHNoYXBlIHRoZW0uIFNlZSA8cmRhcjov
L3Byb2JsZW0vOTgyMzk3NT4uCisgICAgLy8gT25jZSB3ZSBoYXZlIHRoZSBmaXggZm9yIDxyZGFy
Oi8vcHJvYmxlbS85ODIzOTc1PiB0aGVuIHJlbW92ZSB0aGlzIGNvZGUgdG9nZXRoZXIgd2l0aCBT
aW1wbGVGb250RGF0YTo6c2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKCkKKyAgICAvLyBpbiA8cmRh
cjovL3Byb2JsZW0vMTIwOTY4MzU+LgorICAgIGlmIChwYWdlTnVtYmVyID09IDYgJiYgZm9udERh
dGEtPnNob3VsZE5vdEJlVXNlZEZvckFyYWJpYygpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyNlbmRpZgorCisgICAgdW5zaWduZWQgc3RhcnQgPSBwYWdlTnVtYmVyICogR2x5cGhQYWdlOjpz
aXplOworICAgIFVDaGFyIGJ1ZmZlcltHbHlwaFBhZ2U6OnNpemUgKiAyICsgMl07CisgICAgdW5z
aWduZWQgYnVmZmVyTGVuZ3RoOworICAgIC8vIEZpbGwgaW4gYSBidWZmZXIgd2l0aCB0aGUgZW50
aXJlICJwYWdlIiBvZiBjaGFyYWN0ZXJzIHRoYXQgd2Ugd2FudCB0byBsb29rIHVwIGdseXBocyBm
b3IuCisgICAgaWYgKFVfSVNfQk1QKHN0YXJ0KSkgeworICAgICAgICBidWZmZXJMZW5ndGggPSBH
bHlwaFBhZ2U6OnNpemU7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHbHlwaFBh
Z2U6OnNpemU7IGkrKykKKyAgICAgICAgICAgIGJ1ZmZlcltpXSA9IHN0YXJ0ICsgaTsKKworICAg
ICAgICBpZiAoc3RhcnQgPT0gMCkgeworICAgICAgICAgICAgLy8gQ29udHJvbCBjaGFyYWN0ZXJz
IG11c3Qgbm90IHJlbmRlciBhdCBhbGwuCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgMHgyMDsgKytpKQorICAgICAgICAgICAgICAgIGJ1ZmZlcltpXSA9IHplcm9XaWR0aFNw
YWNlOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMHg3RjsgaSA8IDB4QTA7IGkrKykK
KyAgICAgICAgICAgICAgICBidWZmZXJbaV0gPSB6ZXJvV2lkdGhTcGFjZTsKKyAgICAgICAgICAg
IGJ1ZmZlcltzb2Z0SHlwaGVuXSA9IHplcm9XaWR0aFNwYWNlOworCisgICAgICAgICAgICAvLyBc
biwgXHQsIGFuZCBub25icmVha2luZyBzcGFjZSBtdXN0IHJlbmRlciBhcyBhIHNwYWNlLgorICAg
ICAgICAgICAgYnVmZmVyWyhpbnQpJ1xuJ10gPSAnICc7CisgICAgICAgICAgICBidWZmZXJbKGlu
dCknXHQnXSA9ICcgJzsKKyAgICAgICAgICAgIGJ1ZmZlcltub0JyZWFrU3BhY2VdID0gJyAnOwor
ICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0ID09IChsZWZ0VG9SaWdodE1hcmsgJiB+KEdseXBoUGFn
ZTo6c2l6ZSAtIDEpKSkgeworICAgICAgICAgICAgLy8gTFJNLCBSTE0sIExSRSwgUkxFLCBaV05K
LCBaV0osIGFuZCBQREYgbXVzdCBub3QgcmVuZGVyIGF0IGFsbC4KKyAgICAgICAgICAgIGJ1ZmZl
cltsZWZ0VG9SaWdodE1hcmsgLSBzdGFydF0gPSB6ZXJvV2lkdGhTcGFjZTsKKyAgICAgICAgICAg
IGJ1ZmZlcltyaWdodFRvTGVmdE1hcmsgLSBzdGFydF0gPSB6ZXJvV2lkdGhTcGFjZTsKKyAgICAg
ICAgICAgIGJ1ZmZlcltsZWZ0VG9SaWdodEVtYmVkIC0gc3RhcnRdID0gemVyb1dpZHRoU3BhY2U7
CisgICAgICAgICAgICBidWZmZXJbcmlnaHRUb0xlZnRFbWJlZCAtIHN0YXJ0XSA9IHplcm9XaWR0
aFNwYWNlOworICAgICAgICAgICAgYnVmZmVyW2xlZnRUb1JpZ2h0T3ZlcnJpZGUgLSBzdGFydF0g
PSB6ZXJvV2lkdGhTcGFjZTsKKyAgICAgICAgICAgIGJ1ZmZlcltyaWdodFRvTGVmdE92ZXJyaWRl
IC0gc3RhcnRdID0gemVyb1dpZHRoU3BhY2U7CisgICAgICAgICAgICBidWZmZXJbemVyb1dpZHRo
Tm9uSm9pbmVyIC0gc3RhcnRdID0gemVyb1dpZHRoU3BhY2U7CisgICAgICAgICAgICBidWZmZXJb
emVyb1dpZHRoSm9pbmVyIC0gc3RhcnRdID0gemVyb1dpZHRoU3BhY2U7CisgICAgICAgICAgICBi
dWZmZXJbcG9wRGlyZWN0aW9uYWxGb3JtYXR0aW5nIC0gc3RhcnRdID0gemVyb1dpZHRoU3BhY2U7
CisgICAgICAgIH0gZWxzZSBpZiAoc3RhcnQgPT0gKG9iamVjdFJlcGxhY2VtZW50Q2hhcmFjdGVy
ICYgfihHbHlwaFBhZ2U6OnNpemUgLSAxKSkpIHsKKyAgICAgICAgICAgIC8vIE9iamVjdCByZXBs
YWNlbWVudCBjaGFyYWN0ZXIgbXVzdCBub3QgcmVuZGVyIGF0IGFsbC4KKyAgICAgICAgICAgIGJ1
ZmZlcltvYmplY3RSZXBsYWNlbWVudENoYXJhY3RlciAtIHN0YXJ0XSA9IHplcm9XaWR0aFNwYWNl
OworICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0ID09ICh6ZXJvV2lkdGhOb0JyZWFrU3BhY2UgJiB+
KEdseXBoUGFnZTo6c2l6ZSAtIDEpKSkgeworICAgICAgICAgICAgLy8gWldOQlMvQk9NIG11c3Qg
bm90IHJlbmRlciBhdCBhbGwuCisgICAgICAgICAgICBidWZmZXJbemVyb1dpZHRoTm9CcmVha1Nw
YWNlIC0gc3RhcnRdID0gemVyb1dpZHRoU3BhY2U7CisgICAgICAgIH0KKyAgICB9IGVsc2Ugewor
ICAgICAgICBidWZmZXJMZW5ndGggPSBHbHlwaFBhZ2U6OnNpemUgKiAyOworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgR2x5cGhQYWdlOjpzaXplOyBpKyspIHsKKyAgICAgICAgICAg
IGludCBjID0gaSArIHN0YXJ0OworICAgICAgICAgICAgYnVmZmVyW2kgKiAyXSA9IFUxNl9MRUFE
KGMpOworICAgICAgICAgICAgYnVmZmVyW2kgKiAyICsgMV0gPSBVMTZfVFJBSUwoYyk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICAvLyBOb3cgdGhhdCB3ZSBoYXZlIGEgYnVmZmVyIGZ1bGwgb2Yg
Y2hhcmFjdGVycywgd2Ugd2FudCB0byBnZXQgYmFjayBhbiBhcnJheQorICAgIC8vIG9mIGdseXBo
IGluZGljZXMuIFRoaXMgcGFydCBpbnZvbHZlcyBjYWxsaW5nIGludG8gdGhlIHBsYXRmb3JtLXNw
ZWNpZmljCisgICAgLy8gcm91dGluZSBvZiBvdXIgZ2x5cGggbWFwIGZvciBhY3R1YWxseSBmaWxs
aW5nIGluIHRoZSBwYWdlIHdpdGggdGhlIGdseXBocy4KKyAgICAvLyBTdWNjZXNzIGlzIG5vdCBn
dWFyYW50ZWVkLiBGb3IgZXhhbXBsZSwgVGltZXMgZmFpbHMgdG8gZmlsbCBwYWdlIDI2MCwgZ2l2
aW5nIGdseXBoIGRhdGEKKyAgICAvLyBmb3Igb25seSAxMjggb3V0IG9mIDI1NiBjaGFyYWN0ZXJz
LgorICAgIFJlZlB0cjxHbHlwaFBhZ2U+IGdseXBoUGFnZTsKKyAgICBpZiAoR2x5cGhQYWdlOjpt
YXlVc2VNaXhlZEZvbnREYXRhV2hlbkZpbGxpbmcoYnVmZmVyLCBidWZmZXJMZW5ndGgsIGZvbnRE
YXRhKSkKKyAgICAgICAgZ2x5cGhQYWdlID0gR2x5cGhQYWdlOjpjcmVhdGVGb3JNaXhlZEZvbnRE
YXRhKCk7CisgICAgZWxzZQorICAgICAgICBnbHlwaFBhZ2UgPSBHbHlwaFBhZ2U6OmNyZWF0ZUZv
clNpbmdsZUZvbnREYXRhKGZvbnREYXRhKTsKKworICAgIGJvb2wgaGF2ZUdseXBocyA9IGZpbGxH
bHlwaFBhZ2UoKmdseXBoUGFnZSwgMCwgR2x5cGhQYWdlOjpzaXplLCBidWZmZXIsIGJ1ZmZlckxl
bmd0aCwgZm9udERhdGEpOworICAgIGlmICghaGF2ZUdseXBocykKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICBnbHlwaFBhZ2UtPnNldEltbXV0YWJsZSgpOworICAgIHJldHVybiBnbHlw
aFBhZ2U7Cit9CisKK2NvbnN0IEdseXBoUGFnZSogU2ltcGxlRm9udERhdGE6OmdseXBoUGFnZSh1
bnNpZ25lZCBwYWdlTnVtYmVyKSBjb25zdAoreworICAgIGlmIChwYWdlTnVtYmVyID09IDApIHsK
KyAgICAgICAgaWYgKCFtX2dseXBoUGFnZVplcm8pCisgICAgICAgICAgICBtX2dseXBoUGFnZVpl
cm8gPSBjcmVhdGVBbmRGaWxsR2x5cGhQYWdlKDAsIHRoaXMpOworICAgICAgICByZXR1cm4gbV9n
bHlwaFBhZ2VaZXJvLmdldCgpOworICAgIH0KKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fZ2x5cGhQ
YWdlcy5hZGQocGFnZU51bWJlciwgbnVsbHB0cik7CisgICAgaWYgKGFkZFJlc3VsdC5pc05ld0Vu
dHJ5KQorICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gY3JlYXRlQW5kRmlsbEds
eXBoUGFnZShwYWdlTnVtYmVyLCB0aGlzKTsKKworICAgIHJldHVybiBhZGRSZXN1bHQuaXRlcmF0
b3ItPnZhbHVlLmdldCgpOworfQorCitHbHlwaCBTaW1wbGVGb250RGF0YTo6Z2x5cGhGb3JDaGFy
YWN0ZXIoVUNoYXIzMiBjaGFyYWN0ZXIpIGNvbnN0Cit7CisgICAgYXV0byogcGFnZSA9IGdseXBo
UGFnZShjaGFyYWN0ZXIgLyBHbHlwaFBhZ2U6OnNpemUpOworICAgIGlmICghcGFnZSkKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHBhZ2UtPmdseXBoQXQoY2hhcmFjdGVyICUgR2x5cGhQ
YWdlOjpzaXplKTsKK30KKworR2x5cGhEYXRhIFNpbXBsZUZvbnREYXRhOjpnbHlwaERhdGFGb3JD
aGFyYWN0ZXIoVUNoYXIzMiBjaGFyYWN0ZXIpIGNvbnN0Cit7CisgICAgYXV0byogcGFnZSA9IGds
eXBoUGFnZShjaGFyYWN0ZXIgLyBHbHlwaFBhZ2U6OnNpemUpOworICAgIGlmICghcGFnZSkKKyAg
ICAgICAgcmV0dXJuIEdseXBoRGF0YSgpOworICAgIHJldHVybiBwYWdlLT5nbHlwaERhdGFGb3JD
aGFyYWN0ZXIoY2hhcmFjdGVyKTsKK30KKworUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2lt
cGxlRm9udERhdGE6OnZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbkZvbnREYXRhKCkgY29uc3QKK3sK
KyAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQorICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9
IHN0ZDo6bWFrZV91bmlxdWU8RGVyaXZlZEZvbnREYXRhPihpc0N1c3RvbUZvbnQoKSk7CisgICAg
aWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+dmVydGljYWxSaWdodE9yaWVudGF0aW9uKSB7CisgICAg
ICAgIEZvbnRQbGF0Zm9ybURhdGEgdmVydGljYWxSaWdodFBsYXRmb3JtRGF0YShtX3BsYXRmb3Jt
RGF0YSk7CisgICAgICAgIHZlcnRpY2FsUmlnaHRQbGF0Zm9ybURhdGEuc2V0T3JpZW50YXRpb24o
SG9yaXpvbnRhbCk7CisgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT52ZXJ0aWNhbFJpZ2h0T3Jp
ZW50YXRpb24gPSBjcmVhdGUodmVydGljYWxSaWdodFBsYXRmb3JtRGF0YSwgaXNDdXN0b21Gb250
KCksIGZhbHNlLCB0cnVlKTsKKyAgICB9CisgICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT52
ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb247Cit9CisKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+
IFNpbXBsZUZvbnREYXRhOjp1cHJpZ2h0T3JpZW50YXRpb25Gb250RGF0YSgpIGNvbnN0Cit7Cisg
ICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKKyAgICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBz
dGQ6Om1ha2VfdW5pcXVlPERlcml2ZWRGb250RGF0YT4oaXNDdXN0b21Gb250KCkpOworICAgIGlm
ICghbV9kZXJpdmVkRm9udERhdGEtPnVwcmlnaHRPcmllbnRhdGlvbikKKyAgICAgICAgbV9kZXJp
dmVkRm9udERhdGEtPnVwcmlnaHRPcmllbnRhdGlvbiA9IGNyZWF0ZShtX3BsYXRmb3JtRGF0YSwg
aXNDdXN0b21Gb250KCksIGZhbHNlLCB0cnVlKTsKKyAgICByZXR1cm4gbV9kZXJpdmVkRm9udERh
dGEtPnVwcmlnaHRPcmllbnRhdGlvbjsKK30KKworUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4g
U2ltcGxlRm9udERhdGE6OnNtYWxsQ2Fwc0ZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
Zm9udERlc2NyaXB0aW9uKSBjb25zdAoreworICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEpCisg
ICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxEZXJpdmVkRm9udERh
dGE+KGlzQ3VzdG9tRm9udCgpKTsKKyAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENh
cHMpCisgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMgPSBjcmVhdGVTY2FsZWRG
b250RGF0YShmb250RGVzY3JpcHRpb24sIHNtYWxsQ2Fwc0ZvbnRTaXplTXVsdGlwbGllcik7CisK
KyAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2FwczsKK30KKworUGFzc1JlZlB0
cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OmVtcGhhc2lzTWFya0ZvbnREYXRhKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAoreworICAgIGlmICgh
bV9kZXJpdmVkRm9udERhdGEpCisgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gc3RkOjptYWtl
X3VuaXF1ZTxEZXJpdmVkRm9udERhdGE+KGlzQ3VzdG9tRm9udCgpKTsKKyAgICBpZiAoIW1fZGVy
aXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcmspCisgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT5l
bXBoYXNpc01hcmsgPSBjcmVhdGVTY2FsZWRGb250RGF0YShmb250RGVzY3JpcHRpb24sIGVtcGhh
c2lzTWFya0ZvbnRTaXplTXVsdGlwbGllcik7CisKKyAgICByZXR1cm4gbV9kZXJpdmVkRm9udERh
dGEtPmVtcGhhc2lzTWFyazsKK30KKworUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxl
Rm9udERhdGE6OmJyb2tlbklkZW9ncmFwaEZvbnREYXRhKCkgY29uc3QKK3sKKyAgICBpZiAoIW1f
ZGVyaXZlZEZvbnREYXRhKQorICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IHN0ZDo6bWFrZV91
bmlxdWU8RGVyaXZlZEZvbnREYXRhPihpc0N1c3RvbUZvbnQoKSk7CisgICAgaWYgKCFtX2Rlcml2
ZWRGb250RGF0YS0+YnJva2VuSWRlb2dyYXBoKSB7CisgICAgICAgIG1fZGVyaXZlZEZvbnREYXRh
LT5icm9rZW5JZGVvZ3JhcGggPSBjcmVhdGUobV9wbGF0Zm9ybURhdGEsIGlzQ3VzdG9tRm9udCgp
LCBmYWxzZSk7CisgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT5icm9rZW5JZGVvZ3JhcGgtPm1f
aXNCcm9rZW5JZGVvZ3JhcGhGYWxsYmFjayA9IHRydWU7CisgICAgfQorICAgIHJldHVybiBtX2Rl
cml2ZWRGb250RGF0YS0+YnJva2VuSWRlb2dyYXBoOworfQorCitQYXNzUmVmUHRyPFNpbXBsZUZv
bnREYXRhPiBTaW1wbGVGb250RGF0YTo6bm9uU3ludGhldGljSXRhbGljRm9udERhdGEoKSBjb25z
dAoreworICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEpCisgICAgICAgIG1fZGVyaXZlZEZvbnRE
YXRhID0gc3RkOjptYWtlX3VuaXF1ZTxEZXJpdmVkRm9udERhdGE+KGlzQ3VzdG9tRm9udCgpKTsK
KyAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhLT5ub25TeW50aGV0aWNJdGFsaWMpIHsKKyAgICAg
ICAgRm9udFBsYXRmb3JtRGF0YSBub25TeW50aGV0aWNJdGFsaWNGb250UGxhdGZvcm1EYXRhKG1f
cGxhdGZvcm1EYXRhKTsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICAgICAgbm9uU3ludGhldGlj
SXRhbGljRm9udFBsYXRmb3JtRGF0YS5tX3N5bnRoZXRpY09ibGlxdWUgPSBmYWxzZTsKKyNlbmRp
ZgorICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+bm9uU3ludGhldGljSXRhbGljID0gY3JlYXRl
KG5vblN5bnRoZXRpY0l0YWxpY0ZvbnRQbGF0Zm9ybURhdGEsIGlzQ3VzdG9tRm9udCgpKTsKKyAg
ICB9CisgICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5ub25TeW50aGV0aWNJdGFsaWM7Cit9
CisKKyNpZm5kZWYgTkRFQlVHCitTdHJpbmcgU2ltcGxlRm9udERhdGE6OmRlc2NyaXB0aW9uKCkg
Y29uc3QKK3sKKyAgICBpZiAoaXNTVkdGb250KCkpCisgICAgICAgIHJldHVybiAiW1NWRyBmb250
XSI7CisgICAgaWYgKGlzQ3VzdG9tRm9udCgpKQorICAgICAgICByZXR1cm4gIltjdXN0b20gZm9u
dF0iOworCisgICAgcmV0dXJuIHBsYXRmb3JtRGF0YSgpLmRlc2NyaXB0aW9uKCk7Cit9CisjZW5k
aWYKKworY29uc3QgT3BlblR5cGVNYXRoRGF0YSogU2ltcGxlRm9udERhdGE6Om1hdGhEYXRhKCkg
Y29uc3QKK3sKKyAgICBpZiAobV9pc0xvYWRpbmcpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIGlmICghbV9tYXRoRGF0YSkgeworICAgICAgICBtX21hdGhEYXRhID0gT3BlblR5cGVNYXRo
RGF0YTo6Y3JlYXRlKG1fcGxhdGZvcm1EYXRhKTsKKyAgICAgICAgaWYgKCFtX21hdGhEYXRhLT5o
YXNNYXRoRGF0YSgpKQorICAgICAgICAgICAgbV9tYXRoRGF0YS5jbGVhcigpOworICAgIH0KKyAg
ICByZXR1cm4gbV9tYXRoRGF0YS5nZXQoKTsKK30KKworU2ltcGxlRm9udERhdGE6OkRlcml2ZWRG
b250RGF0YTo6fkRlcml2ZWRGb250RGF0YSgpCit7Cit9CisKK1Bhc3NSZWZQdHI8U2ltcGxlRm9u
dERhdGE+IFNpbXBsZUZvbnREYXRhOjpjcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGb250RGVz
Y3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0Cit7Cisg
ICAgaWYgKGlzU1ZHRm9udCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVy
biBwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgc2NhbGVGYWN0
b3IpOworfQorCitib29sIFNpbXBsZUZvbnREYXRhOjphcHBseVRyYW5zZm9ybXMoR2x5cGhCdWZm
ZXJHbHlwaCogZ2x5cGhzLCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCBzaXplX3QgZ2x5
cGhDb3VudCwgVHlwZXNldHRpbmdGZWF0dXJlcyB0eXBlc2V0dGluZ0ZlYXR1cmVzKSBjb25zdAor
eworICAgIC8vIFdlIG5lZWQgdG8gaGFuZGxlIHRyYW5zZm9ybXMgb24gU1ZHIGZvbnRzIGludGVy
bmFsbHksIHNpbmNlIHRoZXkgYXJlIHJlbmRlcmVkIGludGVybmFsbHkuCisgICAgQVNTRVJUKCFp
c1NWR0ZvbnQoKSk7CisjaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBfX01B
Q19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID4gMTA4MCkKKyAgICBDVEZvbnRUcmFuc2Zvcm1P
cHRpb25zIG9wdGlvbnMgPSAodHlwZXNldHRpbmdGZWF0dXJlcyAmIEtlcm5pbmcgPyBrQ1RGb250
VHJhbnNmb3JtQXBwbHlQb3NpdGlvbmluZyA6IDApIHwgKHR5cGVzZXR0aW5nRmVhdHVyZXMgJiBM
aWdhdHVyZXMgPyBrQ1RGb250VHJhbnNmb3JtQXBwbHlTaGFwaW5nIDogMCk7CisgICAgcmV0dXJu
IENURm9udFRyYW5zZm9ybUdseXBocyhtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSwgZ2x5cGhzLCBy
ZWludGVycHJldF9jYXN0PENHU2l6ZSo+KGFkdmFuY2VzKSwgZ2x5cGhDb3VudCwgb3B0aW9ucyk7
CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShnbHlwaHMpOworICAgIFVOVVNFRF9QQVJBTShhZHZh
bmNlcyk7CisgICAgVU5VU0VEX1BBUkFNKGdseXBoQ291bnQpOworICAgIFVOVVNFRF9QQVJBTSh0
eXBlc2V0dGluZ0ZlYXR1cmVzKTsKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKworLy8g
Rm9udERhdGFzIGFyZSBub3QgcmVmY291bnRlZCB0byBhdm9pZCBjeWNsZXMuCit0eXBlZGVmIEhh
c2hNYXA8c3RkOjpwYWlyPFVDaGFyMzIsIHVuc2lnbmVkPiwgU2ltcGxlRm9udERhdGEqPiBDaGFy
YWN0ZXJGYWxsYmFja01hcDsKK3R5cGVkZWYgSGFzaE1hcDxjb25zdCBTaW1wbGVGb250RGF0YSos
IENoYXJhY3RlckZhbGxiYWNrTWFwPiBTeXN0ZW1GYWxsYmFja0NhY2hlOworCitzdGF0aWMgU3lz
dGVtRmFsbGJhY2tDYWNoZSYgc3lzdGVtRmFsbGJhY2tDYWNoZSgpCit7CisgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPFN5c3RlbUZhbGxiYWNrQ2FjaGU+IG1hcDsKKyAgICByZXR1cm4gbWFwLmdl
dCgpOworfQorCitSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpzeXN0ZW1G
YWxsYmFja0ZvbnREYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgY2hhcmFjdGVyLCBjb25zdCBGb250
RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBib29sIGlzRm9yUGxhdGZvcm1Gb250KSBjb25zdAor
eworICAgIGF1dG8gZm9udEFkZFJlc3VsdCA9IHN5c3RlbUZhbGxiYWNrQ2FjaGUoKS5hZGQodGhp
cywgQ2hhcmFjdGVyRmFsbGJhY2tNYXAoKSk7CisKKyAgICBhdXRvIGtleSA9IHN0ZDo6bWFrZV9w
YWlyKGNoYXJhY3RlciwgaXNGb3JQbGF0Zm9ybUZvbnQpOworICAgIGF1dG8gY2hhcmFjdGVyQWRk
UmVzdWx0ID0gZm9udEFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYWRkKGtleSwgbnVsbHB0cik7
CisKKyAgICBTaW1wbGVGb250RGF0YSomIGZhbGxiYWNrRm9udERhdGEgPSBjaGFyYWN0ZXJBZGRS
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlOworCisgICAgaWYgKCFmYWxsYmFja0ZvbnREYXRhKSB7Cisg
ICAgICAgIFVDaGFyIGNvZGVVbml0c1syXTsKKyAgICAgICAgaW50IGNvZGVVbml0c0xlbmd0aDsK
KyAgICAgICAgaWYgKFVfSVNfQk1QKGNoYXJhY3RlcikpIHsKKyAgICAgICAgICAgIGNvZGVVbml0
c1swXSA9IEZvbnRDYXNjYWRlOjpub3JtYWxpemVTcGFjZXMoY2hhcmFjdGVyKTsKKyAgICAgICAg
ICAgIGNvZGVVbml0c0xlbmd0aCA9IDE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBj
b2RlVW5pdHNbMF0gPSBVMTZfTEVBRChjaGFyYWN0ZXIpOworICAgICAgICAgICAgY29kZVVuaXRz
WzFdID0gVTE2X1RSQUlMKGNoYXJhY3Rlcik7CisgICAgICAgICAgICBjb2RlVW5pdHNMZW5ndGgg
PSAyOworICAgICAgICB9CisKKyAgICAgICAgZmFsbGJhY2tGb250RGF0YSA9IGZvbnRDYWNoZSgp
LnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhkZXNjcmlwdGlvbiwgdGhpcywgaXNGb3JQbGF0
Zm9ybUZvbnQsIGNvZGVVbml0cywgY29kZVVuaXRzTGVuZ3RoKS5nZXQoKTsKKyAgICAgICAgaWYg
KGZhbGxiYWNrRm9udERhdGEpCisgICAgICAgICAgICBmYWxsYmFja0ZvbnREYXRhLT5tX2lzVXNl
ZEluU3lzdGVtRmFsbGJhY2tDYWNoZSA9IHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbGxi
YWNrRm9udERhdGE7Cit9CisKK3ZvaWQgU2ltcGxlRm9udERhdGE6OnJlbW92ZUZyb21TeXN0ZW1G
YWxsYmFja0NhY2hlKCkKK3sKKyAgICBzeXN0ZW1GYWxsYmFja0NhY2hlKCkucmVtb3ZlKHRoaXMp
OworCisgICAgaWYgKCFtX2lzVXNlZEluU3lzdGVtRmFsbGJhY2tDYWNoZSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgZm9yIChhdXRvJiBjaGFyYWN0ZXJNYXAgOiBzeXN0ZW1GYWxsYmFja0NhY2hl
KCkudmFsdWVzKCkpIHsKKyAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxVQ2hhcjMyLCB1bnNpZ25l
ZD4sIDUxMj4gdG9SZW1vdmU7CisgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBjaGFyYWN0ZXJN
YXApIHsKKyAgICAgICAgICAgIGlmIChlbnRyeS52YWx1ZSA9PSB0aGlzKQorICAgICAgICAgICAg
ICAgIHRvUmVtb3ZlLmFwcGVuZChlbnRyeS5rZXkpOworICAgICAgICB9CisgICAgICAgIGZvciAo
YXV0byYga2V5IDogdG9SZW1vdmUpCisgICAgICAgICAgICBjaGFyYWN0ZXJNYXAucmVtb3ZlKGtl
eSk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAkod29ya2luZyBjb3B5KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDcgKzI4LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2ltcGxl
Rm9udERhdGEuaCIKKyNpbmNsdWRlICJGb250LmgiCiAKICNpZiBQTEFURk9STShJT1MpIHx8IChQ
TEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPiAxMDgwKQog
I2luY2x1ZGUgIkNvcmVUZXh0U1BJLmgiCkBAIC01MCw3ICs1MCw3IEBAIHVuc2lnbmVkIEdseXBo
UGFnZTo6c19jb3VudCA9IDA7CiBjb25zdCBmbG9hdCBzbWFsbENhcHNGb250U2l6ZU11bHRpcGxp
ZXIgPSAwLjdmOwogY29uc3QgZmxvYXQgZW1waGFzaXNNYXJrRm9udFNpemVNdWx0aXBsaWVyID0g
MC41ZjsKIAotU2ltcGxlRm9udERhdGE6OlNpbXBsZUZvbnREYXRhKGNvbnN0IEZvbnRQbGF0Zm9y
bURhdGEmIHBsYXRmb3JtRGF0YSwgYm9vbCBpc0N1c3RvbUZvbnQsIGJvb2wgaXNMb2FkaW5nLCBi
b29sIGlzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2spCitGb250OjpGb250KGNvbnN0IEZvbnRQbGF0
Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSwgYm9vbCBpc0N1c3RvbUZvbnQsIGJvb2wgaXNMb2FkaW5n
LCBib29sIGlzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2spCiAgICAgOiBtX21heENoYXJXaWR0aCgt
MSkKICAgICAsIG1fYXZnQ2hhcldpZHRoKC0xKQogICAgICwgbV9wbGF0Zm9ybURhdGEocGxhdGZv
cm1EYXRhKQpAQCAtNzYsNyArNzYsNyBAQCBTaW1wbGVGb250RGF0YTo6U2ltcGxlRm9udERhdGEo
Y29uc3QgRm9uCiAjZW5kaWYKIH0KIAotU2ltcGxlRm9udERhdGE6OlNpbXBsZUZvbnREYXRhKHN0
ZDo6dW5pcXVlX3B0cjxTVkdEYXRhPiBzdmdEYXRhLCBmbG9hdCBmb250U2l6ZSwgYm9vbCBzeW50
aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYykKK0ZvbnQ6OkZvbnQoc3RkOjp1bmlxdWVf
cHRyPFNWR0RhdGE+IHN2Z0RhdGEsIGZsb2F0IGZvbnRTaXplLCBib29sIHN5bnRoZXRpY0JvbGQs
IGJvb2wgc3ludGhldGljSXRhbGljKQogICAgIDogbV9wbGF0Zm9ybURhdGEoRm9udFBsYXRmb3Jt
RGF0YShmb250U2l6ZSwgc3ludGhldGljQm9sZCwgc3ludGhldGljSXRhbGljKSkKICAgICAsIG1f
c3ZnRGF0YShXVEY6Om1vdmUoc3ZnRGF0YSkpCiAgICAgLCBtX3RyZWF0QXNGaXhlZFBpdGNoKGZh
bHNlKQpAQCAtOTMsMTEgKzkzLDExIEBAIFNpbXBsZUZvbnREYXRhOjpTaW1wbGVGb250RGF0YShz
dGQ6OnVuaXEKICAgICAsIG1fc2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKGZhbHNlKQogI2VuZGlm
CiB7Ci0gICAgbV9zdmdEYXRhLT5pbml0aWFsaXplRm9udERhdGEodGhpcywgZm9udFNpemUpOwor
ICAgIG1fc3ZnRGF0YS0+aW5pdGlhbGl6ZUZvbnQodGhpcywgZm9udFNpemUpOwogfQogCiAvLyBF
c3RpbWF0ZXMgb2YgYXZnQ2hhcldpZHRoIGFuZCBtYXhDaGFyV2lkdGggZm9yIHBsYXRmb3JtcyB0
aGF0IGRvbid0IHN1cHBvcnQgYWNjZXNzaW5nIHRoZXNlIHZhbHVlcyBmcm9tIHRoZSBmb250Lgot
dm9pZCBTaW1wbGVGb250RGF0YTo6aW5pdENoYXJXaWR0aHMoKQordm9pZCBGb250Ojppbml0Q2hh
cldpZHRocygpCiB7CiAgICAgYXV0byogZ2x5cGhQYWdlWmVybyA9IGdseXBoUGFnZSgwKTsKIApA
QCAtMTE3LDcgKzExNyw3IEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OmluaXRDaGFyV2lkdGhzKCkK
ICAgICAgICAgbV9tYXhDaGFyV2lkdGggPSBzdGQ6Om1heChtX2F2Z0NoYXJXaWR0aCwgbV9mb250
TWV0cmljcy5mbG9hdEFzY2VudCgpKTsKIH0KIAotdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZv
cm1HbHlwaEluaXQoKQordm9pZCBGb250OjpwbGF0Zm9ybUdseXBoSW5pdCgpCiB7CiAgICAgYXV0
byogZ2x5cGhQYWdlWmVybyA9IGdseXBoUGFnZSgwKTsKICAgICBpZiAoIWdseXBoUGFnZVplcm8p
IHsKQEAgLTE0NywzNyArMTQ3LDM3IEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtR2x5
cGhJbml0KCkKIAogICAgIC8vIEZvcmNlIHRoZSBnbHlwaCBmb3IgWkVSTyBXSURUSCBTUEFDRSB0
byBoYXZlIHplcm8gd2lkdGgsIHVubGVzcyBpdCBpcyBzaGFyZWQgd2l0aCBTUEFDRS4KICAgICAv
LyBIZWx2ZXRpY2EgaXMgYW4gZXhhbXBsZSBvZiBhIG5vbi16ZXJvIHdpZHRoIFpFUk8gV0lEVEgg
U1BBQ0UgZ2x5cGguCi0gICAgLy8gU2VlIDxodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMzE3OD4gYW5kIFNpbXBsZUZvbnREYXRhOjppc1plcm9XaWR0aFNwYWNlR2x5cGgo
KQorICAgIC8vIFNlZSA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMx
Nzg+IGFuZCBGb250Ojppc1plcm9XaWR0aFNwYWNlR2x5cGgoKQogICAgIGlmIChtX3plcm9XaWR0
aFNwYWNlR2x5cGggPT0gbV9zcGFjZUdseXBoKQogICAgICAgICBtX3plcm9XaWR0aFNwYWNlR2x5
cGggPSAwOwogfQogCi1TaW1wbGVGb250RGF0YTo6flNpbXBsZUZvbnREYXRhKCkKK0ZvbnQ6On5G
b250KCkKIHsKICAgICByZW1vdmVGcm9tU3lzdGVtRmFsbGJhY2tDYWNoZSgpOwogfQogCi1zdGF0
aWMgYm9vbCBmaWxsR2x5cGhQYWdlKEdseXBoUGFnZSYgcGFnZVRvRmlsbCwgdW5zaWduZWQgb2Zm
c2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0
aCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQorc3RhdGljIGJvb2wgZmlsbEdseXBo
UGFnZShHbHlwaFBhZ2UmIHBhZ2VUb0ZpbGwsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVu
Z3RoLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IEZvbnQqIGZv
bnQpCiB7CiAjaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICBpZiAoYXV0byogc3ZnRGF0YSA9IGZv
bnREYXRhLT5zdmdEYXRhKCkpCi0gICAgICAgIHJldHVybiBzdmdEYXRhLT5maWxsU1ZHR2x5cGhQ
YWdlKCZwYWdlVG9GaWxsLCBvZmZzZXQsIGxlbmd0aCwgYnVmZmVyLCBidWZmZXJMZW5ndGgsIGZv
bnREYXRhKTsKKyAgICBpZiAoYXV0byogc3ZnRGF0YSA9IGZvbnQtPnN2Z0RhdGEoKSkKKyAgICAg
ICAgcmV0dXJuIHN2Z0RhdGEtPmZpbGxTVkdHbHlwaFBhZ2UoJnBhZ2VUb0ZpbGwsIG9mZnNldCwg
bGVuZ3RoLCBidWZmZXIsIGJ1ZmZlckxlbmd0aCwgZm9udCk7CiAjZW5kaWYKLSAgICBib29sIGhh
c0dseXBocyA9IHBhZ2VUb0ZpbGwuZmlsbChvZmZzZXQsIGxlbmd0aCwgYnVmZmVyLCBidWZmZXJM
ZW5ndGgsIGZvbnREYXRhKTsKKyAgICBib29sIGhhc0dseXBocyA9IHBhZ2VUb0ZpbGwuZmlsbChv
ZmZzZXQsIGxlbmd0aCwgYnVmZmVyLCBidWZmZXJMZW5ndGgsIGZvbnQpOwogI2lmIEVOQUJMRShP
UEVOVFlQRV9WRVJUSUNBTCkKLSAgICBpZiAoaGFzR2x5cGhzICYmIGZvbnREYXRhLT52ZXJ0aWNh
bERhdGEoKSkKLSAgICAgICAgZm9udERhdGEtPnZlcnRpY2FsRGF0YSgpLT5zdWJzdGl0dXRlV2l0
aFZlcnRpY2FsR2x5cGhzKGZvbnREYXRhLCAmcGFnZVRvRmlsbCwgb2Zmc2V0LCBsZW5ndGgpOwor
ICAgIGlmIChoYXNHbHlwaHMgJiYgZm9udC0+dmVydGljYWxEYXRhKCkpCisgICAgICAgIGZvbnQt
PnZlcnRpY2FsRGF0YSgpLT5zdWJzdGl0dXRlV2l0aFZlcnRpY2FsR2x5cGhzKGZvbnQsICZwYWdl
VG9GaWxsLCBvZmZzZXQsIGxlbmd0aCk7CiAjZW5kaWYKICAgICByZXR1cm4gaGFzR2x5cGhzOwog
fQogCi1zdGF0aWMgUmVmUHRyPEdseXBoUGFnZT4gY3JlYXRlQW5kRmlsbEdseXBoUGFnZSh1bnNp
Z25lZCBwYWdlTnVtYmVyLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEpCitzdGF0aWMg
UmVmUHRyPEdseXBoUGFnZT4gY3JlYXRlQW5kRmlsbEdseXBoUGFnZSh1bnNpZ25lZCBwYWdlTnVt
YmVyLCBjb25zdCBGb250KiBmb250KQogewogI2lmIFBMQVRGT1JNKElPUykKICAgICAvLyBGSVhN
RTogVGltZXMgTmV3IFJvbWFuIGNvbnRhaW5zIEFyYWJpYyBnbHlwaHMsIGJ1dCBDb3JlIFRleHQg
ZG9lc24ndCBrbm93IGhvdyB0byBzaGFwZSB0aGVtLiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzk4MjM5
NzU+LgotICAgIC8vIE9uY2Ugd2UgaGF2ZSB0aGUgZml4IGZvciA8cmRhcjovL3Byb2JsZW0vOTgy
Mzk3NT4gdGhlbiByZW1vdmUgdGhpcyBjb2RlIHRvZ2V0aGVyIHdpdGggU2ltcGxlRm9udERhdGE6
OnNob3VsZE5vdEJlVXNlZEZvckFyYWJpYygpCisgICAgLy8gT25jZSB3ZSBoYXZlIHRoZSBmaXgg
Zm9yIDxyZGFyOi8vcHJvYmxlbS85ODIzOTc1PiB0aGVuIHJlbW92ZSB0aGlzIGNvZGUgdG9nZXRo
ZXIgd2l0aCBGb250OjpzaG91bGROb3RCZVVzZWRGb3JBcmFiaWMoKQogICAgIC8vIGluIDxyZGFy
Oi8vcHJvYmxlbS8xMjA5NjgzNT4uCi0gICAgaWYgKHBhZ2VOdW1iZXIgPT0gNiAmJiBmb250RGF0
YS0+c2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKCkpCisgICAgaWYgKHBhZ2VOdW1iZXIgPT0gNiAm
JiBmb250LT5zaG91bGROb3RCZVVzZWRGb3JBcmFiaWMoKSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAjZW5kaWYKIApAQCAtMjM1LDEyICsyMzUsMTIgQEAgc3RhdGljIFJlZlB0cjxHbHlwaFBh
Z2U+IGNyZWF0ZUFuZEZpbGxHbAogICAgIC8vIFN1Y2Nlc3MgaXMgbm90IGd1YXJhbnRlZWQuIEZv
ciBleGFtcGxlLCBUaW1lcyBmYWlscyB0byBmaWxsIHBhZ2UgMjYwLCBnaXZpbmcgZ2x5cGggZGF0
YQogICAgIC8vIGZvciBvbmx5IDEyOCBvdXQgb2YgMjU2IGNoYXJhY3RlcnMuCiAgICAgUmVmUHRy
PEdseXBoUGFnZT4gZ2x5cGhQYWdlOwotICAgIGlmIChHbHlwaFBhZ2U6Om1heVVzZU1peGVkRm9u
dERhdGFXaGVuRmlsbGluZyhidWZmZXIsIGJ1ZmZlckxlbmd0aCwgZm9udERhdGEpKQotICAgICAg
ICBnbHlwaFBhZ2UgPSBHbHlwaFBhZ2U6OmNyZWF0ZUZvck1peGVkRm9udERhdGEoKTsKKyAgICBp
ZiAoR2x5cGhQYWdlOjptYXlVc2VNaXhlZEZvbnRzV2hlbkZpbGxpbmcoYnVmZmVyLCBidWZmZXJM
ZW5ndGgsIGZvbnQpKQorICAgICAgICBnbHlwaFBhZ2UgPSBHbHlwaFBhZ2U6OmNyZWF0ZUZvck1p
eGVkRm9udHMoKTsKICAgICBlbHNlCi0gICAgICAgIGdseXBoUGFnZSA9IEdseXBoUGFnZTo6Y3Jl
YXRlRm9yU2luZ2xlRm9udERhdGEoZm9udERhdGEpOworICAgICAgICBnbHlwaFBhZ2UgPSBHbHlw
aFBhZ2U6OmNyZWF0ZUZvclNpbmdsZUZvbnQoZm9udCk7CiAKLSAgICBib29sIGhhdmVHbHlwaHMg
PSBmaWxsR2x5cGhQYWdlKCpnbHlwaFBhZ2UsIDAsIEdseXBoUGFnZTo6c2l6ZSwgYnVmZmVyLCBi
dWZmZXJMZW5ndGgsIGZvbnREYXRhKTsKKyAgICBib29sIGhhdmVHbHlwaHMgPSBmaWxsR2x5cGhQ
YWdlKCpnbHlwaFBhZ2UsIDAsIEdseXBoUGFnZTo6c2l6ZSwgYnVmZmVyLCBidWZmZXJMZW5ndGgs
IGZvbnQpOwogICAgIGlmICghaGF2ZUdseXBocykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
QEAgLTI0OCw3ICsyNDgsNyBAQCBzdGF0aWMgUmVmUHRyPEdseXBoUGFnZT4gY3JlYXRlQW5kRmls
bEdsCiAgICAgcmV0dXJuIGdseXBoUGFnZTsKIH0KIAotY29uc3QgR2x5cGhQYWdlKiBTaW1wbGVG
b250RGF0YTo6Z2x5cGhQYWdlKHVuc2lnbmVkIHBhZ2VOdW1iZXIpIGNvbnN0Citjb25zdCBHbHlw
aFBhZ2UqIEZvbnQ6OmdseXBoUGFnZSh1bnNpZ25lZCBwYWdlTnVtYmVyKSBjb25zdAogewogICAg
IGlmIChwYWdlTnVtYmVyID09IDApIHsKICAgICAgICAgaWYgKCFtX2dseXBoUGFnZVplcm8pCkBA
IC0yNjIsNyArMjYyLDcgQEAgY29uc3QgR2x5cGhQYWdlKiBTaW1wbGVGb250RGF0YTo6Z2x5cGhQ
YQogICAgIHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOwogfQogCi1HbHlw
aCBTaW1wbGVGb250RGF0YTo6Z2x5cGhGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjaGFyYWN0ZXIpIGNv
bnN0CitHbHlwaCBGb250OjpnbHlwaEZvckNoYXJhY3RlcihVQ2hhcjMyIGNoYXJhY3RlcikgY29u
c3QKIHsKICAgICBhdXRvKiBwYWdlID0gZ2x5cGhQYWdlKGNoYXJhY3RlciAvIEdseXBoUGFnZTo6
c2l6ZSk7CiAgICAgaWYgKCFwYWdlKQpAQCAtMjcwLDcgKzI3MCw3IEBAIEdseXBoIFNpbXBsZUZv
bnREYXRhOjpnbHlwaEZvckNoYXJhY3RlcigKICAgICByZXR1cm4gcGFnZS0+Z2x5cGhBdChjaGFy
YWN0ZXIgJSBHbHlwaFBhZ2U6OnNpemUpOwogfQogCi1HbHlwaERhdGEgU2ltcGxlRm9udERhdGE6
OmdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGNoYXJhY3RlcikgY29uc3QKK0dseXBoRGF0
YSBGb250OjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjaGFyYWN0ZXIpIGNvbnN0CiB7
CiAgICAgYXV0byogcGFnZSA9IGdseXBoUGFnZShjaGFyYWN0ZXIgLyBHbHlwaFBhZ2U6OnNpemUp
OwogICAgIGlmICghcGFnZSkKQEAgLTI3OCw3ICsyNzgsNyBAQCBHbHlwaERhdGEgU2ltcGxlRm9u
dERhdGE6OmdseXBoRGF0YUZvckNoCiAgICAgcmV0dXJuIHBhZ2UtPmdseXBoRGF0YUZvckNoYXJh
Y3RlcihjaGFyYWN0ZXIpOwogfQogCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVG
b250RGF0YTo6dmVydGljYWxSaWdodE9yaWVudGF0aW9uRm9udERhdGEoKSBjb25zdAorUGFzc1Jl
ZlB0cjxGb250PiBGb250Ojp2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250KCkgY29uc3QKIHsK
ICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQogICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9
IHN0ZDo6bWFrZV91bmlxdWU8RGVyaXZlZEZvbnREYXRhPihpc0N1c3RvbUZvbnQoKSk7CkBAIC0y
OTAsNyArMjkwLDcgQEAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdAog
ICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+dmVydGljYWxSaWdodE9yaWVudGF0aW9uOwog
fQogCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6dXByaWdodE9y
aWVudGF0aW9uRm9udERhdGEoKSBjb25zdAorUGFzc1JlZlB0cjxGb250PiBGb250Ojp1cHJpZ2h0
T3JpZW50YXRpb25Gb250KCkgY29uc3QKIHsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQog
ICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8RGVyaXZlZEZvbnRE
YXRhPihpc0N1c3RvbUZvbnQoKSk7CkBAIC0yOTksMjcgKzI5OSwyNyBAQCBQYXNzUmVmUHRyPFNp
bXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0CiAgICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRh
LT51cHJpZ2h0T3JpZW50YXRpb247CiB9CiAKLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNp
bXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZv
bnREZXNjcmlwdGlvbikgY29uc3QKK1Bhc3NSZWZQdHI8Rm9udD4gRm9udDo6c21hbGxDYXBzRm9u
dChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKIHsKICAgICBp
ZiAoIW1fZGVyaXZlZEZvbnREYXRhKQogICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IHN0ZDo6
bWFrZV91bmlxdWU8RGVyaXZlZEZvbnREYXRhPihpc0N1c3RvbUZvbnQoKSk7CiAgICAgaWYgKCFt
X2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzKQotICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+
c21hbGxDYXBzID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9uLCBzbWFsbENh
cHNGb250U2l6ZU11bHRpcGxpZXIpOworICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxD
YXBzID0gY3JlYXRlU2NhbGVkRm9udChmb250RGVzY3JpcHRpb24sIHNtYWxsQ2Fwc0ZvbnRTaXpl
TXVsdGlwbGllcik7CiAKICAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2FwczsK
IH0KIAotUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OmVtcGhhc2lz
TWFya0ZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25z
dAorUGFzc1JlZlB0cjxGb250PiBGb250OjplbXBoYXNpc01hcmtGb250KGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAogewogICAgIGlmICghbV9kZXJpdmVkRm9u
dERhdGEpCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxEZXJp
dmVkRm9udERhdGE+KGlzQ3VzdG9tRm9udCgpKTsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRh
LT5lbXBoYXNpc01hcmspCi0gICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcmsg
PSBjcmVhdGVTY2FsZWRGb250RGF0YShmb250RGVzY3JpcHRpb24sIGVtcGhhc2lzTWFya0ZvbnRT
aXplTXVsdGlwbGllcik7CisgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcmsg
PSBjcmVhdGVTY2FsZWRGb250KGZvbnREZXNjcmlwdGlvbiwgZW1waGFzaXNNYXJrRm9udFNpemVN
dWx0aXBsaWVyKTsKIAogICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJr
OwogfQogCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6YnJva2Vu
SWRlb2dyYXBoRm9udERhdGEoKSBjb25zdAorUGFzc1JlZlB0cjxGb250PiBGb250Ojpicm9rZW5J
ZGVvZ3JhcGhGb250KCkgY29uc3QKIHsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQogICAg
ICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8RGVyaXZlZEZvbnREYXRh
Pihpc0N1c3RvbUZvbnQoKSk7CkBAIC0zMzAsNyArMzMwLDcgQEAgUGFzc1JlZlB0cjxTaW1wbGVG
b250RGF0YT4gU2ltcGxlRm9udERhdAogICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+YnJv
a2VuSWRlb2dyYXBoOwogfQogCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250
RGF0YTo6bm9uU3ludGhldGljSXRhbGljRm9udERhdGEoKSBjb25zdAorUGFzc1JlZlB0cjxGb250
PiBGb250Ojpub25TeW50aGV0aWNJdGFsaWNGb250KCkgY29uc3QKIHsKICAgICBpZiAoIW1fZGVy
aXZlZEZvbnREYXRhKQogICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IHN0ZDo6bWFrZV91bmlx
dWU8RGVyaXZlZEZvbnREYXRhPihpc0N1c3RvbUZvbnQoKSk7CkBAIC0zNDUsNyArMzQ1LDcgQEAg
UGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdAogfQogCiAjaWZuZGVmIE5E
RUJVRwotU3RyaW5nIFNpbXBsZUZvbnREYXRhOjpkZXNjcmlwdGlvbigpIGNvbnN0CitTdHJpbmcg
Rm9udDo6ZGVzY3JpcHRpb24oKSBjb25zdAogewogICAgIGlmIChpc1NWR0ZvbnQoKSkKICAgICAg
ICAgcmV0dXJuICJbU1ZHIGZvbnRdIjsKQEAgLTM1Niw3ICszNTYsNyBAQCBTdHJpbmcgU2ltcGxl
Rm9udERhdGE6OmRlc2NyaXB0aW9uKCkgY29uCiB9CiAjZW5kaWYKIAotY29uc3QgT3BlblR5cGVN
YXRoRGF0YSogU2ltcGxlRm9udERhdGE6Om1hdGhEYXRhKCkgY29uc3QKK2NvbnN0IE9wZW5UeXBl
TWF0aERhdGEqIEZvbnQ6Om1hdGhEYXRhKCkgY29uc3QKIHsKICAgICBpZiAobV9pc0xvYWRpbmcp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMzY4LDE5ICszNjgsMTkgQEAgY29uc3QgT3Bl
blR5cGVNYXRoRGF0YSogU2ltcGxlRm9udERhdGE6OgogICAgIHJldHVybiBtX21hdGhEYXRhLmdl
dCgpOwogfQogCi1TaW1wbGVGb250RGF0YTo6RGVyaXZlZEZvbnREYXRhOjp+RGVyaXZlZEZvbnRE
YXRhKCkKK0ZvbnQ6OkRlcml2ZWRGb250RGF0YTo6fkRlcml2ZWRGb250RGF0YSgpCiB7CiB9CiAK
LVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpjcmVhdGVTY2FsZWRG
b250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2Nh
bGVGYWN0b3IpIGNvbnN0CitQYXNzUmVmUHRyPEZvbnQ+IEZvbnQ6OmNyZWF0ZVNjYWxlZEZvbnQo
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNjYWxlRmFjdG9y
KSBjb25zdAogewogICAgIGlmIChpc1NWR0ZvbnQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKLSAgICByZXR1cm4gcGxhdGZvcm1DcmVhdGVTY2FsZWRGb250RGF0YShmb250RGVzY3JpcHRp
b24sIHNjYWxlRmFjdG9yKTsKKyAgICByZXR1cm4gcGxhdGZvcm1DcmVhdGVTY2FsZWRGb250KGZv
bnREZXNjcmlwdGlvbiwgc2NhbGVGYWN0b3IpOwogfQogCi1ib29sIFNpbXBsZUZvbnREYXRhOjph
cHBseVRyYW5zZm9ybXMoR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBHbHlwaEJ1ZmZlckFkdmFu
Y2UqIGFkdmFuY2VzLCBzaXplX3QgZ2x5cGhDb3VudCwgVHlwZXNldHRpbmdGZWF0dXJlcyB0eXBl
c2V0dGluZ0ZlYXR1cmVzKSBjb25zdAorYm9vbCBGb250OjphcHBseVRyYW5zZm9ybXMoR2x5cGhC
dWZmZXJHbHlwaCogZ2x5cGhzLCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCBzaXplX3Qg
Z2x5cGhDb3VudCwgVHlwZXNldHRpbmdGZWF0dXJlcyB0eXBlc2V0dGluZ0ZlYXR1cmVzKSBjb25z
dAogewogICAgIC8vIFdlIG5lZWQgdG8gaGFuZGxlIHRyYW5zZm9ybXMgb24gU1ZHIGZvbnRzIGlu
dGVybmFsbHksIHNpbmNlIHRoZXkgYXJlIHJlbmRlcmVkIGludGVybmFsbHkuCiAgICAgQVNTRVJU
KCFpc1NWR0ZvbnQoKSk7CkBAIC0zOTYsOSArMzk2LDkgQEAgYm9vbCBTaW1wbGVGb250RGF0YTo6
YXBwbHlUcmFuc2Zvcm1zKEdseQogI2VuZGlmCiB9CiAKLS8vIEZvbnREYXRhcyBhcmUgbm90IHJl
ZmNvdW50ZWQgdG8gYXZvaWQgY3ljbGVzLgotdHlwZWRlZiBIYXNoTWFwPHN0ZDo6cGFpcjxVQ2hh
cjMyLCB1bnNpZ25lZD4sIFNpbXBsZUZvbnREYXRhKj4gQ2hhcmFjdGVyRmFsbGJhY2tNYXA7Ci10
eXBlZGVmIEhhc2hNYXA8Y29uc3QgU2ltcGxlRm9udERhdGEqLCBDaGFyYWN0ZXJGYWxsYmFja01h
cD4gU3lzdGVtRmFsbGJhY2tDYWNoZTsKKy8vIEZvbnRzIGFyZSBub3QgcmVmJ2QgdG8gYXZvaWQg
Y3ljbGVzLgordHlwZWRlZiBIYXNoTWFwPHN0ZDo6cGFpcjxVQ2hhcjMyLCB1bnNpZ25lZD4sIEZv
bnQqPiBDaGFyYWN0ZXJGYWxsYmFja01hcDsKK3R5cGVkZWYgSGFzaE1hcDxjb25zdCBGb250Kiwg
Q2hhcmFjdGVyRmFsbGJhY2tNYXA+IFN5c3RlbUZhbGxiYWNrQ2FjaGU7CiAKIHN0YXRpYyBTeXN0
ZW1GYWxsYmFja0NhY2hlJiBzeXN0ZW1GYWxsYmFja0NhY2hlKCkKIHsKQEAgLTQwNiwxNiArNDA2
LDE2IEBAIHN0YXRpYyBTeXN0ZW1GYWxsYmFja0NhY2hlJiBzeXN0ZW1GYWxsYmEKICAgICByZXR1
cm4gbWFwLmdldCgpOwogfQogCi1SZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRh
OjpzeXN0ZW1GYWxsYmFja0ZvbnREYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgY2hhcmFjdGVyLCBj
b25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBib29sIGlzRm9yUGxhdGZvcm1Gb250
KSBjb25zdAorUmVmUHRyPEZvbnQ+IEZvbnQ6OnN5c3RlbUZhbGxiYWNrRm9udEZvckNoYXJhY3Rl
cihVQ2hhcjMyIGNoYXJhY3RlciwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwg
Ym9vbCBpc0ZvclBsYXRmb3JtRm9udCkgY29uc3QKIHsKICAgICBhdXRvIGZvbnRBZGRSZXN1bHQg
PSBzeXN0ZW1GYWxsYmFja0NhY2hlKCkuYWRkKHRoaXMsIENoYXJhY3RlckZhbGxiYWNrTWFwKCkp
OwogCiAgICAgYXV0byBrZXkgPSBzdGQ6Om1ha2VfcGFpcihjaGFyYWN0ZXIsIGlzRm9yUGxhdGZv
cm1Gb250KTsKICAgICBhdXRvIGNoYXJhY3RlckFkZFJlc3VsdCA9IGZvbnRBZGRSZXN1bHQuaXRl
cmF0b3ItPnZhbHVlLmFkZChrZXksIG51bGxwdHIpOwogCi0gICAgU2ltcGxlRm9udERhdGEqJiBm
YWxsYmFja0ZvbnREYXRhID0gY2hhcmFjdGVyQWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKKyAg
ICBGb250KiYgZmFsbGJhY2tGb250ID0gY2hhcmFjdGVyQWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZTsKIAotICAgIGlmICghZmFsbGJhY2tGb250RGF0YSkgeworICAgIGlmICghZmFsbGJhY2tGb250
KSB7CiAgICAgICAgIFVDaGFyIGNvZGVVbml0c1syXTsKICAgICAgICAgaW50IGNvZGVVbml0c0xl
bmd0aDsKICAgICAgICAgaWYgKFVfSVNfQk1QKGNoYXJhY3RlcikpIHsKQEAgLTQyNywxNSArNDI3
LDE1IEBAIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OnMKICAgICAgICAg
ICAgIGNvZGVVbml0c0xlbmd0aCA9IDI7CiAgICAgICAgIH0KIAotICAgICAgICBmYWxsYmFja0Zv
bnREYXRhID0gZm9udENhY2hlKCkuc3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGRlc2NyaXB0
aW9uLCB0aGlzLCBpc0ZvclBsYXRmb3JtRm9udCwgY29kZVVuaXRzLCBjb2RlVW5pdHNMZW5ndGgp
LmdldCgpOwotICAgICAgICBpZiAoZmFsbGJhY2tGb250RGF0YSkKLSAgICAgICAgICAgIGZhbGxi
YWNrRm9udERhdGEtPm1faXNVc2VkSW5TeXN0ZW1GYWxsYmFja0NhY2hlID0gdHJ1ZTsKKyAgICAg
ICAgZmFsbGJhY2tGb250ID0gZm9udENhY2hlKCkuc3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJz
KGRlc2NyaXB0aW9uLCB0aGlzLCBpc0ZvclBsYXRmb3JtRm9udCwgY29kZVVuaXRzLCBjb2RlVW5p
dHNMZW5ndGgpLmdldCgpOworICAgICAgICBpZiAoZmFsbGJhY2tGb250KQorICAgICAgICAgICAg
ZmFsbGJhY2tGb250LT5tX2lzVXNlZEluU3lzdGVtRmFsbGJhY2tDYWNoZSA9IHRydWU7CiAgICAg
fQogCi0gICAgcmV0dXJuIGZhbGxiYWNrRm9udERhdGE7CisgICAgcmV0dXJuIGZhbGxiYWNrRm9u
dDsKIH0KIAotdm9pZCBTaW1wbGVGb250RGF0YTo6cmVtb3ZlRnJvbVN5c3RlbUZhbGxiYWNrQ2Fj
aGUoKQordm9pZCBGb250OjpyZW1vdmVGcm9tU3lzdGVtRmFsbGJhY2tDYWNoZSgpCiB7CiAgICAg
c3lzdGVtRmFsbGJhY2tDYWNoZSgpLnJlbW92ZSh0aGlzKTsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAkocmV2aXNpb24gMTc4NTE1KQkoZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oOjE3ODUxNSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDM2OSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBpbnRlcm5hbCBm
b250IGltcGxlbWVudGF0aW9uLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCwgMjAx
MCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDctMjAwOCBUb3JjaCBNb2JpbGUsIEluYy4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgU2ltcGxlRm9udERhdGFf
aAorI2RlZmluZSBTaW1wbGVGb250RGF0YV9oCisKKyNpbmNsdWRlICJGb250QmFzZWxpbmUuaCIK
KyNpbmNsdWRlICJGb250TWV0cmljcy5oIgorI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIK
KyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgorI2luY2x1
ZGUgIkdseXBoTWV0cmljc01hcC5oIgorI2luY2x1ZGUgIkdseXBoUGFnZS5oIgorI2luY2x1ZGUg
Ik9wZW5UeXBlTWF0aERhdGEuaCIKKyNpZiBFTkFCTEUoT1BFTlRZUEVfVkVSVElDQUwpCisjaW5j
bHVkZSAiT3BlblR5cGVWZXJ0aWNhbERhdGEuaCIKKyNlbmRpZgorI2luY2x1ZGUgIlR5cGVzZXR0
aW5nRmVhdHVyZXMuaCIKKyNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nSGFzaC5oPgorCisjaWYgUExBVEZPUk0oQ09DT0EpCisjaW5jbHVkZSAiV2Vi
Q29yZVN5c3RlbUludGVyZmFjZS5oIgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNlbmRp
ZgorCisjaWYgUExBVEZPUk0oV0lOKQorI2luY2x1ZGUgPHVzcDEwLmg+CisjZW5kaWYKKworI2lm
IFVTRShDQUlSTykKKyNpbmNsdWRlIDxjYWlyby5oPgorI2VuZGlmCisKKyNpZiBVU0UoQ0cpCisj
aW5jbHVkZSA8V2ViQ29yZS9Db3JlR3JhcGhpY3NTUEkuaD4KKyNlbmRpZgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEdseXBoUGFnZTsKK2NsYXNzIEZvbnREZXNjcmlwdGlvbjsKK2Ns
YXNzIFNoYXJlZEJ1ZmZlcjsKK3N0cnVjdCBHbHlwaERhdGE7CitzdHJ1Y3QgV2lkdGhJdGVyYXRv
cjsKKworZW51bSBGb250RGF0YVZhcmlhbnQgeyBBdXRvVmFyaWFudCwgTm9ybWFsVmFyaWFudCwg
U21hbGxDYXBzVmFyaWFudCwgRW1waGFzaXNNYXJrVmFyaWFudCwgQnJva2VuSWRlb2dyYXBoVmFy
aWFudCB9OworZW51bSBQaXRjaCB7IFVua25vd25QaXRjaCwgRml4ZWRQaXRjaCwgVmFyaWFibGVQ
aXRjaCB9OworCitjbGFzcyBTaW1wbGVGb250RGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPFNpbXBs
ZUZvbnREYXRhPiB7CitwdWJsaWM6CisgICAgY2xhc3MgU1ZHRGF0YSB7CisgICAgICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB+U1ZHRGF0
YSgpIHsgfQorCisgICAgICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplRm9udERhdGEoU2ltcGxl
Rm9udERhdGEqLCBmbG9hdCBmb250U2l6ZSkgPSAwOworICAgICAgICB2aXJ0dWFsIGZsb2F0IHdp
ZHRoRm9yU1ZHR2x5cGgoR2x5cGgsIGZsb2F0IGZvbnRTaXplKSBjb25zdCA9IDA7CisgICAgICAg
IHZpcnR1YWwgYm9vbCBmaWxsU1ZHR2x5cGhQYWdlKEdseXBoUGFnZSosIHVuc2lnbmVkIG9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgs
IGNvbnN0IFNpbXBsZUZvbnREYXRhKikgY29uc3QgPSAwOworICAgIH07CisKKyAgICAvLyBVc2Vk
IHRvIGNyZWF0ZSBwbGF0Zm9ybSBmb250cy4KKyAgICBzdGF0aWMgUmVmPFNpbXBsZUZvbnREYXRh
PiBjcmVhdGUoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhLCBib29sIGlzQ3Vz
dG9tRm9udCA9IGZhbHNlLCBib29sIGlzTG9hZGluZyA9IGZhbHNlLCBib29sIGlzVGV4dE9yaWVu
dGF0aW9uRmFsbGJhY2sgPSBmYWxzZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IFNpbXBsZUZvbnREYXRhKHBsYXRmb3JtRGF0YSwgaXNDdXN0b21Gb250LCBpc0xvYWRpbmcs
IGlzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2spKTsKKyAgICB9CisKKyAgICAvLyBVc2VkIHRvIGNy
ZWF0ZSBTVkcgRm9udHMuCisgICAgc3RhdGljIFJlZjxTaW1wbGVGb250RGF0YT4gY3JlYXRlKHN0
ZDo6dW5pcXVlX3B0cjxTVkdEYXRhPiBzdmdEYXRhLCBmbG9hdCBmb250U2l6ZSwgYm9vbCBzeW50
aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYykKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IFNpbXBsZUZvbnREYXRhKFdURjo6bW92ZShzdmdEYXRhKSwgZm9udFNpemUs
IHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYykpOworICAgIH0KKworICAgIH5TaW1wbGVG
b250RGF0YSgpOworCisgICAgc3RhdGljIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBzeXN0ZW1GYWxs
YmFjaygpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgU2ltcGxlRm9udERhdGEqPigt
MSk7IH0KKworICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSgpIGNvbnN0
IHsgcmV0dXJuIG1fcGxhdGZvcm1EYXRhOyB9CisgICAgY29uc3QgT3BlblR5cGVNYXRoRGF0YSog
bWF0aERhdGEoKSBjb25zdDsKKyNpZiBFTkFCTEUoT1BFTlRZUEVfVkVSVElDQUwpCisgICAgY29u
c3QgT3BlblR5cGVWZXJ0aWNhbERhdGEqIHZlcnRpY2FsRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1f
dmVydGljYWxEYXRhLmdldCgpOyB9CisjZW5kaWYKKworICAgIFBhc3NSZWZQdHI8U2ltcGxlRm9u
dERhdGE+IHNtYWxsQ2Fwc0ZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0Owor
ICAgIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IGVtcGhhc2lzTWFya0ZvbnREYXRhKGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+
IGJyb2tlbklkZW9ncmFwaEZvbnREYXRhKCkgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxTaW1wbGVG
b250RGF0YT4gbm9uU3ludGhldGljSXRhbGljRm9udERhdGEoKSBjb25zdDsKKworICAgIFBhc3NS
ZWZQdHI8U2ltcGxlRm9udERhdGE+IHZhcmlhbnRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRp
b24mIGRlc2NyaXB0aW9uLCBGb250RGF0YVZhcmlhbnQgdmFyaWFudCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHN3aXRjaCAodmFyaWFudCkgeworICAgICAgICBjYXNlIFNtYWxsQ2Fwc1ZhcmlhbnQ6
CisgICAgICAgICAgICByZXR1cm4gc21hbGxDYXBzRm9udERhdGEoZGVzY3JpcHRpb24pOworICAg
ICAgICBjYXNlIEVtcGhhc2lzTWFya1ZhcmlhbnQ6CisgICAgICAgICAgICByZXR1cm4gZW1waGFz
aXNNYXJrRm9udERhdGEoZGVzY3JpcHRpb24pOworICAgICAgICBjYXNlIEJyb2tlbklkZW9ncmFw
aFZhcmlhbnQ6CisgICAgICAgICAgICByZXR1cm4gYnJva2VuSWRlb2dyYXBoRm9udERhdGEoKTsK
KyAgICAgICAgY2FzZSBBdXRvVmFyaWFudDoKKyAgICAgICAgY2FzZSBOb3JtYWxWYXJpYW50Ogor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIHJldHVybiBjb25zdF9jYXN0PFNpbXBsZUZvbnREYXRhKj4odGhpcyk7Cisg
ICAgfQorCisgICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gdmVydGljYWxSaWdodE9yaWVu
dGF0aW9uRm9udERhdGEoKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiB1
cHJpZ2h0T3JpZW50YXRpb25Gb250RGF0YSgpIGNvbnN0OworCisgICAgYm9vbCBoYXNWZXJ0aWNh
bEdseXBocygpIGNvbnN0IHsgcmV0dXJuIG1faGFzVmVydGljYWxHbHlwaHM7IH0KKyAgICBib29s
IGlzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2soKSBjb25zdCB7IHJldHVybiBtX2lzVGV4dE9yaWVu
dGF0aW9uRmFsbGJhY2s7IH0KKworICAgIEZvbnRNZXRyaWNzJiBmb250TWV0cmljcygpIHsgcmV0
dXJuIG1fZm9udE1ldHJpY3M7IH0KKyAgICBjb25zdCBGb250TWV0cmljcyYgZm9udE1ldHJpY3Mo
KSBjb25zdCB7IHJldHVybiBtX2ZvbnRNZXRyaWNzOyB9CisgICAgZmxvYXQgc2l6ZVBlclVuaXQo
KSBjb25zdCB7IHJldHVybiBwbGF0Zm9ybURhdGEoKS5zaXplKCkgLyAoZm9udE1ldHJpY3MoKS51
bml0c1BlckVtKCkgPyBmb250TWV0cmljcygpLnVuaXRzUGVyRW0oKSA6IDEpOyB9CisKKyAgICBm
bG9hdCBtYXhDaGFyV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX21heENoYXJXaWR0aDsgfQorICAg
IHZvaWQgc2V0TWF4Q2hhcldpZHRoKGZsb2F0IG1heENoYXJXaWR0aCkgeyBtX21heENoYXJXaWR0
aCA9IG1heENoYXJXaWR0aDsgfQorCisgICAgZmxvYXQgYXZnQ2hhcldpZHRoKCkgY29uc3QgeyBy
ZXR1cm4gbV9hdmdDaGFyV2lkdGg7IH0KKyAgICB2b2lkIHNldEF2Z0NoYXJXaWR0aChmbG9hdCBh
dmdDaGFyV2lkdGgpIHsgbV9hdmdDaGFyV2lkdGggPSBhdmdDaGFyV2lkdGg7IH0KKworICAgIEZs
b2F0UmVjdCBib3VuZHNGb3JHbHlwaChHbHlwaCkgY29uc3Q7CisgICAgZmxvYXQgd2lkdGhGb3JH
bHlwaChHbHlwaCBnbHlwaCkgY29uc3Q7CisgICAgRmxvYXRSZWN0IHBsYXRmb3JtQm91bmRzRm9y
R2x5cGgoR2x5cGgpIGNvbnN0OworICAgIGZsb2F0IHBsYXRmb3JtV2lkdGhGb3JHbHlwaChHbHlw
aCkgY29uc3Q7CisKKyAgICBmbG9hdCBzcGFjZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9zcGFj
ZVdpZHRoOyB9CisgICAgZmxvYXQgYWRqdXN0ZWRTcGFjZVdpZHRoKCkgY29uc3QgeyByZXR1cm4g
bV9hZGp1c3RlZFNwYWNlV2lkdGg7IH0KKyAgICB2b2lkIHNldFNwYWNlV2lkdGhzKGZsb2F0IHNw
YWNlV2lkdGgpCisgICAgeworICAgICAgICBtX3NwYWNlV2lkdGggPSBzcGFjZVdpZHRoOworICAg
ICAgICBtX2FkanVzdGVkU3BhY2VXaWR0aCA9IHNwYWNlV2lkdGg7CisgICAgfQorCisjaWYgVVNF
KENHKSB8fCBVU0UoQ0FJUk8pCisgICAgZmxvYXQgc3ludGhldGljQm9sZE9mZnNldCgpIGNvbnN0
IHsgcmV0dXJuIG1fc3ludGhldGljQm9sZE9mZnNldDsgfQorI2VuZGlmCisKKyAgICBHbHlwaCBz
cGFjZUdseXBoKCkgY29uc3QgeyByZXR1cm4gbV9zcGFjZUdseXBoOyB9CisgICAgdm9pZCBzZXRT
cGFjZUdseXBoKEdseXBoIHNwYWNlR2x5cGgpIHsgbV9zcGFjZUdseXBoID0gc3BhY2VHbHlwaDsg
fQorICAgIEdseXBoIHplcm9XaWR0aFNwYWNlR2x5cGgoKSBjb25zdCB7IHJldHVybiBtX3plcm9X
aWR0aFNwYWNlR2x5cGg7IH0KKyAgICB2b2lkIHNldFplcm9XaWR0aFNwYWNlR2x5cGgoR2x5cGgg
c3BhY2VHbHlwaCkgeyBtX3plcm9XaWR0aFNwYWNlR2x5cGggPSBzcGFjZUdseXBoOyB9CisgICAg
Ym9vbCBpc1plcm9XaWR0aFNwYWNlR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0IHsgcmV0dXJuIGds
eXBoID09IG1femVyb1dpZHRoU3BhY2VHbHlwaCAmJiBnbHlwaDsgfQorICAgIEdseXBoIHplcm9H
bHlwaCgpIGNvbnN0IHsgcmV0dXJuIG1femVyb0dseXBoOyB9CisgICAgdm9pZCBzZXRaZXJvR2x5
cGgoR2x5cGggemVyb0dseXBoKSB7IG1femVyb0dseXBoID0gemVyb0dseXBoOyB9CisKKyAgICBH
bHlwaERhdGEgZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIpIGNvbnN0OworICAgIEdseXBo
IGdseXBoRm9yQ2hhcmFjdGVyKFVDaGFyMzIpIGNvbnN0OworCisgICAgUmVmUHRyPFNpbXBsZUZv
bnREYXRhPiBzeXN0ZW1GYWxsYmFja0ZvbnREYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIsIGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYsIGJvb2wgaXNGb3JQbGF0Zm9ybUZvbnQpIGNvbnN0OworCisgICAg
Y29uc3QgR2x5cGhQYWdlKiBnbHlwaFBhZ2UodW5zaWduZWQgcGFnZU51bWJlcikgY29uc3Q7CisK
KyAgICB2b2lkIGRldGVybWluZVBpdGNoKCk7CisgICAgUGl0Y2ggcGl0Y2goKSBjb25zdCB7IHJl
dHVybiBtX3RyZWF0QXNGaXhlZFBpdGNoID8gRml4ZWRQaXRjaCA6IFZhcmlhYmxlUGl0Y2g7IH0K
KworICAgIGNvbnN0IFNWR0RhdGEqIHN2Z0RhdGEoKSBjb25zdCB7IHJldHVybiBtX3N2Z0RhdGEu
Z2V0KCk7IH0KKyAgICBib29sIGlzU1ZHRm9udCgpIGNvbnN0IHsgcmV0dXJuICEhbV9zdmdEYXRh
OyB9CisKKyAgICBib29sIGlzQ3VzdG9tRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1faXNDdXN0b21G
b250OyB9CisgICAgYm9vbCBpc0xvYWRpbmcoKSBjb25zdCB7IHJldHVybiBtX2lzTG9hZGluZzsg
fQorCisjaWZuZGVmIE5ERUJVRworICAgIFN0cmluZyBkZXNjcmlwdGlvbigpIGNvbnN0OworI2Vu
ZGlmCisKKyNpZiBVU0UoQVBQS0lUKQorICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBjb21wb3Np
dGVGb250UmVmZXJlbmNlRm9udERhdGEoTlNGb250ICprZXkpIGNvbnN0OworICAgIE5TRm9udCog
Z2V0TlNGb250KCkgY29uc3QgeyByZXR1cm4gbV9wbGF0Zm9ybURhdGEubnNGb250KCk7IH0KKyNl
bmRpZgorCisjaWYgUExBVEZPUk0oSU9TKQorICAgIENURm9udFJlZiBnZXRDVEZvbnQoKSBjb25z
dCB7IHJldHVybiBtX3BsYXRmb3JtRGF0YS5mb250KCk7IH0KKyAgICBib29sIHNob3VsZE5vdEJl
VXNlZEZvckFyYWJpYygpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkTm90QmVVc2VkRm9yQXJhYmlj
OyB9OworI2VuZGlmCisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgQ0ZEaWN0aW9uYXJ5UmVmIGdl
dENGU3RyaW5nQXR0cmlidXRlcyhUeXBlc2V0dGluZ0ZlYXR1cmVzLCBGb250T3JpZW50YXRpb24p
IGNvbnN0OworI2VuZGlmCisKKyNpZiBQTEFURk9STShDT0NPQSkgfHwgVVNFKEhBUkZCVVpaKQor
ICAgIGJvb2wgY2FuUmVuZGVyQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY29uc3QgVUNoYXIq
LCBzaXplX3QpIGNvbnN0OworI2VuZGlmCisKKyAgICBib29sIGFwcGx5VHJhbnNmb3JtcyhHbHlw
aEJ1ZmZlckdseXBoKiwgR2x5cGhCdWZmZXJBZHZhbmNlKiwgc2l6ZV90IGdseXBoQ291bnQsIFR5
cGVzZXR0aW5nRmVhdHVyZXMpIGNvbnN0OworCisjaWYgUExBVEZPUk0oV0lOKQorICAgIGJvb2wg
aXNTeXN0ZW1Gb250KCkgY29uc3QgeyByZXR1cm4gbV9pc1N5c3RlbUZvbnQ7IH0KKyAgICBTQ1JJ
UFRfRk9OVFBST1BFUlRJRVMqIHNjcmlwdEZvbnRQcm9wZXJ0aWVzKCkgY29uc3Q7CisgICAgU0NS
SVBUX0NBQ0hFKiBzY3JpcHRDYWNoZSgpIGNvbnN0IHsgcmV0dXJuICZtX3NjcmlwdENhY2hlOyB9
CisgICAgc3RhdGljIHZvaWQgc2V0U2hvdWxkQXBwbHlNYWNBc2NlbnRIYWNrKGJvb2wpOworICAg
IHN0YXRpYyBib29sIHNob3VsZEFwcGx5TWFjQXNjZW50SGFjaygpOworICAgIHN0YXRpYyBmbG9h
dCBhc2NlbnRDb25zaWRlcmluZ01hY0FzY2VudEhhY2soY29uc3QgV0NIQVIqLCBmbG9hdCBhc2Nl
bnQsIGZsb2F0IGRlc2NlbnQpOworI2VuZGlmCisKK3ByaXZhdGU6CisgICAgU2ltcGxlRm9udERh
dGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYsIGJvb2wgaXNDdXN0b21Gb250ID0gZmFsc2UsIGJv
b2wgaXNMb2FkaW5nID0gZmFsc2UsIGJvb2wgaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjayA9IGZh
bHNlKTsKKworICAgIFNpbXBsZUZvbnREYXRhKHN0ZDo6dW5pcXVlX3B0cjxTVkdEYXRhPiwgZmxv
YXQgZm9udFNpemUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpOwor
CisgICAgdm9pZCBwbGF0Zm9ybUluaXQoKTsKKyAgICB2b2lkIHBsYXRmb3JtR2x5cGhJbml0KCk7
CisgICAgdm9pZCBwbGF0Zm9ybUNoYXJXaWR0aEluaXQoKTsKKyAgICB2b2lkIHBsYXRmb3JtRGVz
dHJveSgpOworCisgICAgdm9pZCBpbml0Q2hhcldpZHRocygpOworCisgICAgUGFzc1JlZlB0cjxT
aW1wbGVGb250RGF0YT4gY3JlYXRlU2NhbGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9u
JiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8U2ltcGxlRm9udERh
dGE+IHBsYXRmb3JtQ3JlYXRlU2NhbGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwg
ZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0OworCisgICAgdm9pZCByZW1vdmVGcm9tU3lzdGVtRmFs
bGJhY2tDYWNoZSgpOworCisjaWYgUExBVEZPUk0oV0lOKQorICAgIHZvaWQgaW5pdEdESUZvbnQo
KTsKKyAgICB2b2lkIHBsYXRmb3JtQ29tbW9uRGVzdHJveSgpOworICAgIEZsb2F0UmVjdCBib3Vu
ZHNGb3JHRElHbHlwaChHbHlwaCBnbHlwaCkgY29uc3Q7CisgICAgZmxvYXQgd2lkdGhGb3JHRElH
bHlwaChHbHlwaCBnbHlwaCkgY29uc3Q7CisjZW5kaWYKKworI2lmIFVTRShDRykKKyAgICBib29s
IGNhblVzZUZhc3RHbHlwaEFkdmFuY2VHZXR0ZXIoR2x5cGggZ2x5cGgsIENHU2l6ZSYgYWR2YW5j
ZSwgYm9vbCYgcG9wdWxhdGVkQWR2YW5jZSkgY29uc3Q7CisgICAgQ0dGb250UmVuZGVyaW5nU3R5
bGUgcmVuZGVyaW5nU3R5bGUoKSBjb25zdDsKKyAgICBib29sIGFkdmFuY2VGb3JDb2xvckJpdG1h
cEZvbnQoR2x5cGgsIENHU2l6ZSYgcmVzdWx0KSBjb25zdDsgLy8gUmV0dXJucyB0cnVlIGlmIHRo
ZSBmb250IGlzIGEgY29sb3IgYml0bWFwIGZvbnQKKyNlbmRpZgorCisgICAgRm9udE1ldHJpY3Mg
bV9mb250TWV0cmljczsKKyAgICBmbG9hdCBtX21heENoYXJXaWR0aDsKKyAgICBmbG9hdCBtX2F2
Z0NoYXJXaWR0aDsKKworICAgIEZvbnRQbGF0Zm9ybURhdGEgbV9wbGF0Zm9ybURhdGE7CisgICAg
c3RkOjp1bmlxdWVfcHRyPFNWR0RhdGE+IG1fc3ZnRGF0YTsKKworICAgIG11dGFibGUgUmVmUHRy
PEdseXBoUGFnZT4gbV9nbHlwaFBhZ2VaZXJvOworICAgIG11dGFibGUgSGFzaE1hcDx1bnNpZ25l
ZCwgUmVmUHRyPEdseXBoUGFnZT4+IG1fZ2x5cGhQYWdlczsKKyAgICBtdXRhYmxlIHN0ZDo6dW5p
cXVlX3B0cjxHbHlwaE1ldHJpY3NNYXA8RmxvYXRSZWN0Pj4gbV9nbHlwaFRvQm91bmRzTWFwOwor
ICAgIG11dGFibGUgR2x5cGhNZXRyaWNzTWFwPGZsb2F0PiBtX2dseXBoVG9XaWR0aE1hcDsKKwor
ICAgIGJvb2wgbV90cmVhdEFzRml4ZWRQaXRjaDsKKyAgICBib29sIG1faXNDdXN0b21Gb250OyAg
Ly8gV2hldGhlciBvciBub3Qgd2UgYXJlIGN1c3RvbSBmb250IGxvYWRlZCB2aWEgQGZvbnQtZmFj
ZQorICAgIGJvb2wgbV9pc0xvYWRpbmc7IC8vIFdoZXRoZXIgb3Igbm90IHRoaXMgY3VzdG9tIGZv
bnQgaXMgc3RpbGwgaW4gdGhlIGFjdCBvZiBsb2FkaW5nLgorCisgICAgYm9vbCBtX2lzVGV4dE9y
aWVudGF0aW9uRmFsbGJhY2s7CisgICAgYm9vbCBtX2lzQnJva2VuSWRlb2dyYXBoRmFsbGJhY2s7
CisKKyAgICBib29sIG1faXNVc2VkSW5TeXN0ZW1GYWxsYmFja0NhY2hlIHsgZmFsc2UgfTsKKwor
ICAgIG11dGFibGUgUmVmUHRyPE9wZW5UeXBlTWF0aERhdGE+IG1fbWF0aERhdGE7CisjaWYgRU5B
QkxFKE9QRU5UWVBFX1ZFUlRJQ0FMKQorICAgIFJlZlB0cjxPcGVuVHlwZVZlcnRpY2FsRGF0YT4g
bV92ZXJ0aWNhbERhdGE7CisjZW5kaWYKKyAgICBib29sIG1faGFzVmVydGljYWxHbHlwaHM7CisK
KyAgICBHbHlwaCBtX3NwYWNlR2x5cGg7CisgICAgZmxvYXQgbV9zcGFjZVdpZHRoOworICAgIEds
eXBoIG1femVyb0dseXBoOworICAgIGZsb2F0IG1fYWRqdXN0ZWRTcGFjZVdpZHRoOworCisgICAg
R2x5cGggbV96ZXJvV2lkdGhTcGFjZUdseXBoOworCisgICAgc3RydWN0IERlcml2ZWRGb250RGF0
YSB7CisgICAgICAgIGV4cGxpY2l0IERlcml2ZWRGb250RGF0YShib29sIGN1c3RvbSkKKyAgICAg
ICAgICAgIDogZm9yQ3VzdG9tRm9udChjdXN0b20pCisgICAgICAgIHsKKyAgICAgICAgfQorICAg
ICAgICB+RGVyaXZlZEZvbnREYXRhKCk7CisKKyAgICAgICAgYm9vbCBmb3JDdXN0b21Gb250Owor
ICAgICAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IHNtYWxsQ2FwczsKKyAgICAgICAgUmVmUHRy
PFNpbXBsZUZvbnREYXRhPiBlbXBoYXNpc01hcms7CisgICAgICAgIFJlZlB0cjxTaW1wbGVGb250
RGF0YT4gYnJva2VuSWRlb2dyYXBoOworICAgICAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IHZl
cnRpY2FsUmlnaHRPcmllbnRhdGlvbjsKKyAgICAgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiB1
cHJpZ2h0T3JpZW50YXRpb247CisgICAgICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gbm9uU3lu
dGhldGljSXRhbGljOworI2lmIFVTRShBUFBLSVQpCisgICAgICAgIEhhc2hNYXA8TlNGb250Kiwg
UmVmUHRyPFNpbXBsZUZvbnREYXRhPj4gY29tcG9zaXRlRm9udFJlZmVyZW5jZXM7CisjZW5kaWYK
KyAgICB9OworCisgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8RGVyaXZlZEZvbnREYXRhPiBt
X2Rlcml2ZWRGb250RGF0YTsKKworI2lmIFVTRShDRykgfHwgVVNFKENBSVJPKQorICAgIGZsb2F0
IG1fc3ludGhldGljQm9sZE9mZnNldDsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oQ09DT0EpCisg
ICAgbXV0YWJsZSBIYXNoTWFwPHVuc2lnbmVkLCBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPj4g
bV9DRlN0cmluZ0F0dHJpYnV0ZXM7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBV
U0UoSEFSRkJVWlopCisgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8SGFzaE1hcDxTdHJpbmcs
IGJvb2w+PiBtX2NvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlU3VwcG9ydDsKKyNlbmRpZgorCisj
aWYgUExBVEZPUk0oV0lOKQorICAgIGJvb2wgbV9pc1N5c3RlbUZvbnQ7CisgICAgbXV0YWJsZSBT
Q1JJUFRfQ0FDSEUgbV9zY3JpcHRDYWNoZTsKKyAgICBtdXRhYmxlIFNDUklQVF9GT05UUFJPUEVS
VElFUyogbV9zY3JpcHRGb250UHJvcGVydGllczsKKyNlbmRpZgorI2lmIFBMQVRGT1JNKElPUykK
KyAgICBib29sIG1fc2hvdWxkTm90QmVVc2VkRm9yQXJhYmljOworI2VuZGlmCit9OworCitBTFdB
WVNfSU5MSU5FIEZsb2F0UmVjdCBTaW1wbGVGb250RGF0YTo6Ym91bmRzRm9yR2x5cGgoR2x5cGgg
Z2x5cGgpIGNvbnN0Cit7CisgICAgaWYgKGlzWmVyb1dpZHRoU3BhY2VHbHlwaChnbHlwaCkpCisg
ICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKworICAgIEZsb2F0UmVjdCBib3VuZHM7CisgICAg
aWYgKG1fZ2x5cGhUb0JvdW5kc01hcCkgeworICAgICAgICBib3VuZHMgPSBtX2dseXBoVG9Cb3Vu
ZHNNYXAtPm1ldHJpY3NGb3JHbHlwaChnbHlwaCk7CisgICAgICAgIGlmIChib3VuZHMud2lkdGgo
KSAhPSBjR2x5cGhTaXplVW5rbm93bikKKyAgICAgICAgICAgIHJldHVybiBib3VuZHM7CisgICAg
fQorCisgICAgYm91bmRzID0gcGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChnbHlwaCk7CisgICAgaWYg
KCFtX2dseXBoVG9Cb3VuZHNNYXApCisgICAgICAgIG1fZ2x5cGhUb0JvdW5kc01hcCA9IHN0ZDo6
bWFrZV91bmlxdWU8R2x5cGhNZXRyaWNzTWFwPEZsb2F0UmVjdD4+KCk7CisgICAgbV9nbHlwaFRv
Qm91bmRzTWFwLT5zZXRNZXRyaWNzRm9yR2x5cGgoZ2x5cGgsIGJvdW5kcyk7CisgICAgcmV0dXJu
IGJvdW5kczsKK30KKworQUxXQVlTX0lOTElORSBmbG9hdCBTaW1wbGVGb250RGF0YTo6d2lkdGhG
b3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKK3sKKyAgICBpZiAoaXNaZXJvV2lkdGhTcGFjZUds
eXBoKGdseXBoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBmbG9hdCB3aWR0aCA9IG1fZ2x5
cGhUb1dpZHRoTWFwLm1ldHJpY3NGb3JHbHlwaChnbHlwaCk7CisgICAgaWYgKHdpZHRoICE9IGNH
bHlwaFNpemVVbmtub3duKQorICAgICAgICByZXR1cm4gd2lkdGg7CisKKyAgICBpZiAoaXNTVkdG
b250KCkpCisgICAgICAgIHdpZHRoID0gbV9zdmdEYXRhLT53aWR0aEZvclNWR0dseXBoKGdseXBo
LCBtX3BsYXRmb3JtRGF0YS5zaXplKCkpOworI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkK
KyAgICBlbHNlIGlmIChtX3ZlcnRpY2FsRGF0YSkKKyNpZiBVU0UoQ0cpIHx8IFVTRShDQUlSTykK
KyAgICAgICAgd2lkdGggPSBtX3ZlcnRpY2FsRGF0YS0+YWR2YW5jZUhlaWdodCh0aGlzLCBnbHlw
aCkgKyBtX3N5bnRoZXRpY0JvbGRPZmZzZXQ7CisjZWxzZQorICAgICAgICB3aWR0aCA9IG1fdmVy
dGljYWxEYXRhLT5hZHZhbmNlSGVpZ2h0KHRoaXMsIGdseXBoKTsKKyNlbmRpZgorI2VuZGlmCisg
ICAgZWxzZQorICAgICAgICB3aWR0aCA9IHBsYXRmb3JtV2lkdGhGb3JHbHlwaChnbHlwaCk7CisK
KyAgICBtX2dseXBoVG9XaWR0aE1hcC5zZXRNZXRyaWNzRm9yR2x5cGgoZ2x5cGgsIHdpZHRoKTsK
KyAgICByZXR1cm4gd2lkdGg7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIFNpbXBsZUZvbnREYXRhX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250LmgJKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsOCArMjEsOCBAQAogICoKICAqLwogCi0j
aWZuZGVmIFNpbXBsZUZvbnREYXRhX2gKLSNkZWZpbmUgU2ltcGxlRm9udERhdGFfaAorI2lmbmRl
ZiBGb250X2gKKyNkZWZpbmUgRm9udF9oCiAKICNpbmNsdWRlICJGb250QmFzZWxpbmUuaCIKICNp
bmNsdWRlICJGb250TWV0cmljcy5oIgpAQCAtNjQsMzYgKzY0LDM2IEBAIGNsYXNzIFNoYXJlZEJ1
ZmZlcjsKIHN0cnVjdCBHbHlwaERhdGE7CiBzdHJ1Y3QgV2lkdGhJdGVyYXRvcjsKIAotZW51bSBG
b250RGF0YVZhcmlhbnQgeyBBdXRvVmFyaWFudCwgTm9ybWFsVmFyaWFudCwgU21hbGxDYXBzVmFy
aWFudCwgRW1waGFzaXNNYXJrVmFyaWFudCwgQnJva2VuSWRlb2dyYXBoVmFyaWFudCB9OworZW51
bSBGb250VmFyaWFudCB7IEF1dG9WYXJpYW50LCBOb3JtYWxWYXJpYW50LCBTbWFsbENhcHNWYXJp
YW50LCBFbXBoYXNpc01hcmtWYXJpYW50LCBCcm9rZW5JZGVvZ3JhcGhWYXJpYW50IH07CiBlbnVt
IFBpdGNoIHsgVW5rbm93blBpdGNoLCBGaXhlZFBpdGNoLCBWYXJpYWJsZVBpdGNoIH07CiAKLWNs
YXNzIFNpbXBsZUZvbnREYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8U2ltcGxlRm9udERhdGE+IHsK
K2NsYXNzIEZvbnQgOiBwdWJsaWMgUmVmQ291bnRlZDxGb250PiB7CiBwdWJsaWM6CiAgICAgY2xh
c3MgU1ZHRGF0YSB7CiAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIHB1Ymxp
YzoKICAgICAgICAgdmlydHVhbCB+U1ZHRGF0YSgpIHsgfQogCi0gICAgICAgIHZpcnR1YWwgdm9p
ZCBpbml0aWFsaXplRm9udERhdGEoU2ltcGxlRm9udERhdGEqLCBmbG9hdCBmb250U2l6ZSkgPSAw
OworICAgICAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZUZvbnQoRm9udCosIGZsb2F0IGZvbnRT
aXplKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgZmxvYXQgd2lkdGhGb3JTVkdHbHlwaChHbHlwaCwg
ZmxvYXQgZm9udFNpemUpIGNvbnN0ID0gMDsKLSAgICAgICAgdmlydHVhbCBib29sIGZpbGxTVkdH
bHlwaFBhZ2UoR2x5cGhQYWdlKiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVD
aGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgU2ltcGxlRm9udERhdGEq
KSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgYm9vbCBmaWxsU1ZHR2x5cGhQYWdlKEdseXBo
UGFnZSosIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1
bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IEZvbnQqKSBjb25zdCA9IDA7CiAgICAgfTsKIAog
ICAgIC8vIFVzZWQgdG8gY3JlYXRlIHBsYXRmb3JtIGZvbnRzLgotICAgIHN0YXRpYyBSZWY8U2lt
cGxlRm9udERhdGE+IGNyZWF0ZShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEs
IGJvb2wgaXNDdXN0b21Gb250ID0gZmFsc2UsIGJvb2wgaXNMb2FkaW5nID0gZmFsc2UsIGJvb2wg
aXNUZXh0T3JpZW50YXRpb25GYWxsYmFjayA9IGZhbHNlKQorICAgIHN0YXRpYyBSZWY8Rm9udD4g
Y3JlYXRlKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSwgYm9vbCBpc0N1c3Rv
bUZvbnQgPSBmYWxzZSwgYm9vbCBpc0xvYWRpbmcgPSBmYWxzZSwgYm9vbCBpc1RleHRPcmllbnRh
dGlvbkZhbGxiYWNrID0gZmFsc2UpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBTaW1wbGVGb250RGF0YShwbGF0Zm9ybURhdGEsIGlzQ3VzdG9tRm9udCwgaXNMb2FkaW5nLCBp
c1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IEZvbnQocGxhdGZvcm1EYXRhLCBpc0N1c3RvbUZvbnQsIGlzTG9hZGluZywgaXNUZXh0T3JpZW50
YXRpb25GYWxsYmFjaykpOwogICAgIH0KIAogICAgIC8vIFVzZWQgdG8gY3JlYXRlIFNWRyBGb250
cy4KLSAgICBzdGF0aWMgUmVmPFNpbXBsZUZvbnREYXRhPiBjcmVhdGUoc3RkOjp1bmlxdWVfcHRy
PFNWR0RhdGE+IHN2Z0RhdGEsIGZsb2F0IGZvbnRTaXplLCBib29sIHN5bnRoZXRpY0JvbGQsIGJv
b2wgc3ludGhldGljSXRhbGljKQorICAgIHN0YXRpYyBSZWY8Rm9udD4gY3JlYXRlKHN0ZDo6dW5p
cXVlX3B0cjxTVkdEYXRhPiBzdmdEYXRhLCBmbG9hdCBmb250U2l6ZSwgYm9vbCBzeW50aGV0aWNC
b2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IFNpbXBsZUZvbnREYXRhKFdURjo6bW92ZShzdmdEYXRhKSwgZm9udFNpemUsIHN5bnRo
ZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYykpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBGb250KFdURjo6bW92ZShzdmdEYXRhKSwgZm9udFNpemUsIHN5bnRoZXRpY0JvbGQsIHN5bnRo
ZXRpY0l0YWxpYykpOwogICAgIH0KIAotICAgIH5TaW1wbGVGb250RGF0YSgpOworICAgIH5Gb250
KCk7CiAKLSAgICBzdGF0aWMgY29uc3QgU2ltcGxlRm9udERhdGEqIHN5c3RlbUZhbGxiYWNrKCkg
eyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBTaW1wbGVGb250RGF0YSo+KC0xKTsgfQor
ICAgIHN0YXRpYyBjb25zdCBGb250KiBzeXN0ZW1GYWxsYmFjaygpIHsgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgRm9udCo+KC0xKTsgfQogCiAgICAgY29uc3QgRm9udFBsYXRmb3JtRGF0
YSYgcGxhdGZvcm1EYXRhKCkgY29uc3QgeyByZXR1cm4gbV9wbGF0Zm9ybURhdGE7IH0KICAgICBj
b25zdCBPcGVuVHlwZU1hdGhEYXRhKiBtYXRoRGF0YSgpIGNvbnN0OwpAQCAtMTAxLDMwICsxMDEs
MzAgQEAgcHVibGljOgogICAgIGNvbnN0IE9wZW5UeXBlVmVydGljYWxEYXRhKiB2ZXJ0aWNhbERh
dGEoKSBjb25zdCB7IHJldHVybiBtX3ZlcnRpY2FsRGF0YS5nZXQoKTsgfQogI2VuZGlmCiAKLSAg
ICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250
RGVzY3JpcHRpb24mKSBjb25zdDsKLSAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBlbXBo
YXNpc01hcmtGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mKSBjb25zdDsKLSAgICBQYXNz
UmVmUHRyPFNpbXBsZUZvbnREYXRhPiBicm9rZW5JZGVvZ3JhcGhGb250RGF0YSgpIGNvbnN0Owot
ICAgIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IG5vblN5bnRoZXRpY0l0YWxpY0ZvbnREYXRh
KCkgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxGb250PiBzbWFsbENhcHNGb250KGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8Rm9udD4gZW1waGFzaXNNYXJrRm9u
dChjb25zdCBGb250RGVzY3JpcHRpb24mKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPEZvbnQ+IGJy
b2tlbklkZW9ncmFwaEZvbnQoKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPEZvbnQ+IG5vblN5bnRo
ZXRpY0l0YWxpY0ZvbnQoKSBjb25zdDsKIAotICAgIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+
IHZhcmlhbnRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250
RGF0YVZhcmlhbnQgdmFyaWFudCkgY29uc3QKKyAgICBQYXNzUmVmUHRyPEZvbnQ+IHZhcmlhbnRG
b250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIEZvbnRWYXJpYW50IHZhcmlh
bnQpIGNvbnN0CiAgICAgewogICAgICAgICBzd2l0Y2ggKHZhcmlhbnQpIHsKICAgICAgICAgY2Fz
ZSBTbWFsbENhcHNWYXJpYW50OgotICAgICAgICAgICAgcmV0dXJuIHNtYWxsQ2Fwc0ZvbnREYXRh
KGRlc2NyaXB0aW9uKTsKKyAgICAgICAgICAgIHJldHVybiBzbWFsbENhcHNGb250KGRlc2NyaXB0
aW9uKTsKICAgICAgICAgY2FzZSBFbXBoYXNpc01hcmtWYXJpYW50OgotICAgICAgICAgICAgcmV0
dXJuIGVtcGhhc2lzTWFya0ZvbnREYXRhKGRlc2NyaXB0aW9uKTsKKyAgICAgICAgICAgIHJldHVy
biBlbXBoYXNpc01hcmtGb250KGRlc2NyaXB0aW9uKTsKICAgICAgICAgY2FzZSBCcm9rZW5JZGVv
Z3JhcGhWYXJpYW50OgotICAgICAgICAgICAgcmV0dXJuIGJyb2tlbklkZW9ncmFwaEZvbnREYXRh
KCk7CisgICAgICAgICAgICByZXR1cm4gYnJva2VuSWRlb2dyYXBoRm9udCgpOwogICAgICAgICBj
YXNlIEF1dG9WYXJpYW50OgogICAgICAgICBjYXNlIE5vcm1hbFZhcmlhbnQ6CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgcmV0dXJuIGNvbnN0X2Nhc3Q8U2ltcGxlRm9udERhdGEqPih0aGlzKTsKKyAgICAgICAgcmV0
dXJuIGNvbnN0X2Nhc3Q8Rm9udCo+KHRoaXMpOwogICAgIH0KIAotICAgIFBhc3NSZWZQdHI8U2lt
cGxlRm9udERhdGE+IHZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbkZvbnREYXRhKCkgY29uc3Q7Ci0g
ICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gdXByaWdodE9yaWVudGF0aW9uRm9udERhdGEo
KSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPEZvbnQ+IHZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbkZv
bnQoKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPEZvbnQ+IHVwcmlnaHRPcmllbnRhdGlvbkZvbnQo
KSBjb25zdDsKIAogICAgIGJvb2wgaGFzVmVydGljYWxHbHlwaHMoKSBjb25zdCB7IHJldHVybiBt
X2hhc1ZlcnRpY2FsR2x5cGhzOyB9CiAgICAgYm9vbCBpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNr
KCkgY29uc3QgeyByZXR1cm4gbV9pc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrOyB9CkBAIC0xNjcs
NyArMTY3LDcgQEAgcHVibGljOgogICAgIEdseXBoRGF0YSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIo
VUNoYXIzMikgY29uc3Q7CiAgICAgR2x5cGggZ2x5cGhGb3JDaGFyYWN0ZXIoVUNoYXIzMikgY29u
c3Q7CiAKLSAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IHN5c3RlbUZhbGxiYWNrRm9udERhdGFG
b3JDaGFyYWN0ZXIoVUNoYXIzMiwgY29uc3QgRm9udERlc2NyaXB0aW9uJiwgYm9vbCBpc0ZvclBs
YXRmb3JtRm9udCkgY29uc3Q7CisgICAgUmVmUHRyPEZvbnQ+IHN5c3RlbUZhbGxiYWNrRm9udEZv
ckNoYXJhY3RlcihVQ2hhcjMyLCBjb25zdCBGb250RGVzY3JpcHRpb24mLCBib29sIGlzRm9yUGxh
dGZvcm1Gb250KSBjb25zdDsKIAogICAgIGNvbnN0IEdseXBoUGFnZSogZ2x5cGhQYWdlKHVuc2ln
bmVkIHBhZ2VOdW1iZXIpIGNvbnN0OwogCkBAIC0xODUsNyArMTg1LDcgQEAgcHVibGljOgogI2Vu
ZGlmCiAKICNpZiBVU0UoQVBQS0lUKQotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBjb21wb3Np
dGVGb250UmVmZXJlbmNlRm9udERhdGEoTlNGb250ICprZXkpIGNvbnN0OworICAgIGNvbnN0IEZv
bnQqIGNvbXBvc2l0ZUZvbnRSZWZlcmVuY2VGb250KE5TRm9udCAqa2V5KSBjb25zdDsKICAgICBO
U0ZvbnQqIGdldE5TRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fcGxhdGZvcm1EYXRhLm5zRm9udCgp
OyB9CiAjZW5kaWYKIApAQCAtMjEzLDkgKzIxMyw5IEBAIHB1YmxpYzoKICNlbmRpZgogCiBwcml2
YXRlOgotICAgIFNpbXBsZUZvbnREYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmLCBib29sIGlz
Q3VzdG9tRm9udCA9IGZhbHNlLCBib29sIGlzTG9hZGluZyA9IGZhbHNlLCBib29sIGlzVGV4dE9y
aWVudGF0aW9uRmFsbGJhY2sgPSBmYWxzZSk7CisgICAgRm9udChjb25zdCBGb250UGxhdGZvcm1E
YXRhJiwgYm9vbCBpc0N1c3RvbUZvbnQgPSBmYWxzZSwgYm9vbCBpc0xvYWRpbmcgPSBmYWxzZSwg
Ym9vbCBpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrID0gZmFsc2UpOwogCi0gICAgU2ltcGxlRm9u
dERhdGEoc3RkOjp1bmlxdWVfcHRyPFNWR0RhdGE+LCBmbG9hdCBmb250U2l6ZSwgYm9vbCBzeW50
aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYyk7CisgICAgRm9udChzdGQ6OnVuaXF1ZV9w
dHI8U1ZHRGF0YT4sIGZsb2F0IGZvbnRTaXplLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3lu
dGhldGljSXRhbGljKTsKIAogICAgIHZvaWQgcGxhdGZvcm1Jbml0KCk7CiAgICAgdm9pZCBwbGF0
Zm9ybUdseXBoSW5pdCgpOwpAQCAtMjI0LDggKzIyNCw4IEBAIHByaXZhdGU6CiAKICAgICB2b2lk
IGluaXRDaGFyV2lkdGhzKCk7CiAKLSAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBjcmVh
dGVTY2FsZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBzY2FsZUZhY3Rv
cikgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gcGxhdGZvcm1DcmVhdGVT
Y2FsZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBzY2FsZUZhY3Rvcikg
Y29uc3Q7CisgICAgUGFzc1JlZlB0cjxGb250PiBjcmVhdGVTY2FsZWRGb250KGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYsIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPEZv
bnQ+IHBsYXRmb3JtQ3JlYXRlU2NhbGVkRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBmbG9h
dCBzY2FsZUZhY3RvcikgY29uc3Q7CiAKICAgICB2b2lkIHJlbW92ZUZyb21TeXN0ZW1GYWxsYmFj
a0NhY2hlKCk7CiAKQEAgLTI4NCwxNCArMjg0LDE0IEBAIHByaXZhdGU6CiAgICAgICAgIH5EZXJp
dmVkRm9udERhdGEoKTsKIAogICAgICAgICBib29sIGZvckN1c3RvbUZvbnQ7Ci0gICAgICAgIFJl
ZlB0cjxTaW1wbGVGb250RGF0YT4gc21hbGxDYXBzOwotICAgICAgICBSZWZQdHI8U2ltcGxlRm9u
dERhdGE+IGVtcGhhc2lzTWFyazsKLSAgICAgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBicm9r
ZW5JZGVvZ3JhcGg7Ci0gICAgICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gdmVydGljYWxSaWdo
dE9yaWVudGF0aW9uOwotICAgICAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IHVwcmlnaHRPcmll
bnRhdGlvbjsKLSAgICAgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBub25TeW50aGV0aWNJdGFs
aWM7CisgICAgICAgIFJlZlB0cjxGb250PiBzbWFsbENhcHM7CisgICAgICAgIFJlZlB0cjxGb250
PiBlbXBoYXNpc01hcms7CisgICAgICAgIFJlZlB0cjxGb250PiBicm9rZW5JZGVvZ3JhcGg7Cisg
ICAgICAgIFJlZlB0cjxGb250PiB2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb247CisgICAgICAgIFJl
ZlB0cjxGb250PiB1cHJpZ2h0T3JpZW50YXRpb247CisgICAgICAgIFJlZlB0cjxGb250PiBub25T
eW50aGV0aWNJdGFsaWM7CiAjaWYgVVNFKEFQUEtJVCkKLSAgICAgICAgSGFzaE1hcDxOU0ZvbnQq
LCBSZWZQdHI8U2ltcGxlRm9udERhdGE+PiBjb21wb3NpdGVGb250UmVmZXJlbmNlczsKKyAgICAg
ICAgSGFzaE1hcDxOU0ZvbnQqLCBSZWZQdHI8Rm9udD4+IGNvbXBvc2l0ZUZvbnRSZWZlcmVuY2Vz
OwogI2VuZGlmCiAgICAgfTsKIApAQCAtMzE5LDcgKzMxOSw3IEBAIHByaXZhdGU6CiAjZW5kaWYK
IH07CiAKLUFMV0FZU19JTkxJTkUgRmxvYXRSZWN0IFNpbXBsZUZvbnREYXRhOjpib3VuZHNGb3JH
bHlwaChHbHlwaCBnbHlwaCkgY29uc3QKK0FMV0FZU19JTkxJTkUgRmxvYXRSZWN0IEZvbnQ6OmJv
dW5kc0ZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAogewogICAgIGlmIChpc1plcm9XaWR0aFNw
YWNlR2x5cGgoZ2x5cGgpKQogICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CkBAIC0zMzgsNyAr
MzM4LDcgQEAgQUxXQVlTX0lOTElORSBGbG9hdFJlY3QgU2ltcGxlRm9udERhdGE6OgogICAgIHJl
dHVybiBib3VuZHM7CiB9CiAKLUFMV0FZU19JTkxJTkUgZmxvYXQgU2ltcGxlRm9udERhdGE6Ondp
ZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CitBTFdBWVNfSU5MSU5FIGZsb2F0IEZvbnQ6
OndpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CiB7CiAgICAgaWYgKGlzWmVyb1dpZHRo
U3BhY2VHbHlwaChnbHlwaCkpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMzY2LDQgKzM2Niw0IEBA
IEFMV0FZU19JTkxJTkUgZmxvYXQgU2ltcGxlRm9udERhdGE6OndpZHQKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gU2ltcGxlRm9udERhdGFfaAorI2VuZGlmIC8vIEZvbnRf
aApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUu
Y3BwCShyZXZpc2lvbiAxNzg1MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250Q2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MiwxNCArNTIsMTQgQEAKICNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KIAogLy8gRklYTUU6IFdlIG1heSBiZSBhYmxlIHRvIHNp
bXBsaWZ5IHRoaXMgY29kZSB1c2luZyBDKysxMSB0aHJlYWRpbmcgcHJpbWl0aXZlcywgaW5jbHVk
aW5nIHN0ZDo6Y2FsbF9vbmNlKCkuCi1zdGF0aWMgcHRocmVhZF9tdXRleF90IGZvbnREYXRhTG9j
azsKK3N0YXRpYyBwdGhyZWFkX211dGV4X3QgZm9udExvY2s7CiAKIHN0YXRpYyB2b2lkIGluaXRG
b250Q2FjaGVMb2NrT25jZSgpCiB7CiAgICAgcHRocmVhZF9tdXRleGF0dHJfdCBtdXRleEF0dHJp
YnV0ZTsKICAgICBwdGhyZWFkX211dGV4YXR0cl9pbml0KCZtdXRleEF0dHJpYnV0ZSk7CiAgICAg
cHRocmVhZF9tdXRleGF0dHJfc2V0dHlwZSgmbXV0ZXhBdHRyaWJ1dGUsIFBUSFJFQURfTVVURVhf
UkVDVVJTSVZFKTsKLSAgICBwdGhyZWFkX211dGV4X2luaXQoJmZvbnREYXRhTG9jaywgJm11dGV4
QXR0cmlidXRlKTsKKyAgICBwdGhyZWFkX211dGV4X2luaXQoJmZvbnRMb2NrLCAmbXV0ZXhBdHRy
aWJ1dGUpOwogICAgIHB0aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3koJm11dGV4QXR0cmlidXRlKTsK
IH0KIApAQCAtNzEsMTMgKzcxLDEzIEBAIHB1YmxpYzoKICAgICBGb250TG9ja2VyKCkKICAgICB7
CiAgICAgICAgIHB0aHJlYWRfb25jZSgmaW5pdEZvbnRMb2NrQ29udHJvbCwgaW5pdEZvbnRDYWNo
ZUxvY2tPbmNlKTsKLSAgICAgICAgaW50IGxvY2tjb2RlID0gcHRocmVhZF9tdXRleF9sb2NrKCZm
b250RGF0YUxvY2spOwotICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFX1VOVVNFRChsb2NrY29k
ZSwgIWxvY2tjb2RlLCAiZm9udERhdGFMb2NrIGxvY2sgZmFpbGVkIHdpdGggY29kZTolZCIsIGxv
Y2tjb2RlKTsgICAgCisgICAgICAgIGludCBsb2NrY29kZSA9IHB0aHJlYWRfbXV0ZXhfbG9jaygm
Zm9udExvY2spOworICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFX1VOVVNFRChsb2NrY29kZSwg
IWxvY2tjb2RlLCAiZm9udExvY2sgbG9jayBmYWlsZWQgd2l0aCBjb2RlOiVkIiwgbG9ja2NvZGUp
OyAgICAKICAgICB9CiAgICAgfkZvbnRMb2NrZXIoKQogICAgIHsKLSAgICAgICAgaW50IGxvY2tj
b2RlID0gcHRocmVhZF9tdXRleF91bmxvY2soJmZvbnREYXRhTG9jayk7Ci0gICAgICAgIEFTU0VS
VF9XSVRIX01FU1NBR0VfVU5VU0VEKGxvY2tjb2RlLCAhbG9ja2NvZGUsICJmb250RGF0YUxvY2sg
dW5sb2NrIGZhaWxlZCB3aXRoIGNvZGU6JWQiLCBsb2NrY29kZSk7CisgICAgICAgIGludCBsb2Nr
Y29kZSA9IHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZmb250TG9jayk7CisgICAgICAgIEFTU0VSVF9X
SVRIX01FU1NBR0VfVU5VU0VEKGxvY2tjb2RlLCAhbG9ja2NvZGUsICJmb250TG9jayB1bmxvY2sg
ZmFpbGVkIHdpdGggY29kZTolZCIsIGxvY2tjb2RlKTsKICAgICB9CiB9OwogI2VuZGlmIC8vIFBM
QVRGT1JNKElPUykKQEAgLTM1OSw3ICszNTksNyBAQCBzdHJ1Y3QgRm9udERhdGFDYWNoZUtleVRy
YWl0cyA6IFdURjo6R2VuCiAgICAgfQogfTsKIAotdHlwZWRlZiBIYXNoTWFwPEZvbnRQbGF0Zm9y
bURhdGEsIFJlZlB0cjxTaW1wbGVGb250RGF0YT4sIEZvbnREYXRhQ2FjaGVLZXlIYXNoLCBGb250
RGF0YUNhY2hlS2V5VHJhaXRzPiBGb250RGF0YUNhY2hlOwordHlwZWRlZiBIYXNoTWFwPEZvbnRQ
bGF0Zm9ybURhdGEsIFJlZlB0cjxGb250PiwgRm9udERhdGFDYWNoZUtleUhhc2gsIEZvbnREYXRh
Q2FjaGVLZXlUcmFpdHM+IEZvbnREYXRhQ2FjaGU7CiAKIHN0YXRpYyBGb250RGF0YUNhY2hlJiBj
YWNoZWRGb250cygpCiB7CkBAIC0zNzksNyArMzc5LDcgQEAgY29uc3QgaW50IGNUYXJnZXRJbmFj
dGl2ZUZvbnREYXRhID0gMjAwOwogY29uc3QgaW50IGNNYXhVbmRlck1lbW9yeVByZXNzdXJlSW5h
Y3RpdmVGb250RGF0YSA9IDUwOwogY29uc3QgaW50IGNUYXJnZXRVbmRlck1lbW9yeVByZXNzdXJl
SW5hY3RpdmVGb250RGF0YSA9IDMwOwogCi1SZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNo
ZTo6Zm9udEZvckZhbWlseShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwg
Y29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHksIGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1lKQor
UmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6Zm9udEZvckZhbWlseShjb25zdCBGb250RGVzY3JpcHRp
b24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHksIGJvb2wgY2hl
Y2tpbmdBbHRlcm5hdGVOYW1lKQogewogICAgIGlmICghbV9wdXJnZVRpbWVyLmlzQWN0aXZlKCkp
CiAgICAgICAgIG1fcHVyZ2VUaW1lci5zdGFydE9uZVNob3Qoc3RkOjpjaHJvbm86Om1pbGxpc2Vj
b25kczo6emVybygpKTsKQEAgLTM5MSw3ICszOTEsNyBAQCBSZWZQdHI8U2ltcGxlRm9udERhdGE+
IEZvbnRDYWNoZTo6Zm9udEZvCiAgICAgcmV0dXJuIGZvbnRGb3JQbGF0Zm9ybURhdGEoKnBsYXRm
b3JtRGF0YSk7CiB9CiAKLVJlZjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpmb250Rm9yUGxh
dGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSkKK1JlZjxGb250
PiBGb250Q2FjaGU6OmZvbnRGb3JQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYg
cGxhdGZvcm1EYXRhKQogewogI2lmIFBMQVRGT1JNKElPUykKICAgICBGb250TG9ja2VyIGZvbnRM
b2NrZXI7CkBAIC0zOTksNyArMzk5LDcgQEAgUmVmPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6
OmZvbnRGb3JQbAogICAgIAogICAgIGF1dG8gYWRkUmVzdWx0ID0gY2FjaGVkRm9udHMoKS5hZGQo
cGxhdGZvcm1EYXRhLCBudWxscHRyKTsKICAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpCi0g
ICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBTaW1wbGVGb250RGF0YTo6Y3JlYXRl
KHBsYXRmb3JtRGF0YSk7CisgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBGb250
OjpjcmVhdGUocGxhdGZvcm1EYXRhKTsKIAogICAgIHJldHVybiAqYWRkUmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZTsKIH0KQEAgLTQxNiw3ICs0MTYsNyBAQCB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFj
dGl2ZUZvbnREYXRhSWZOCiAKICAgICBpZiAoY2FjaGVkRm9udHMoKS5zaXplKCkgPCBpbmFjdGl2
ZUZvbnREYXRhTGltaXQpCiAgICAgICAgIHJldHVybjsKLSAgICBpbnQgaW5hY3RpdmVDb3VudCA9
IGluYWN0aXZlRm9udERhdGFDb3VudCgpOworICAgIGludCBpbmFjdGl2ZUNvdW50ID0gaW5hY3Rp
dmVGb250Q291bnQoKTsKICAgICBpZiAoaW5hY3RpdmVDb3VudCA8PSBpbmFjdGl2ZUZvbnREYXRh
TGltaXQpCiAgICAgICAgIHJldHVybjsKIApAQCAtNDMyLDcgKzQzMiw3IEBAIHZvaWQgRm9udENh
Y2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGEoaW4KICAgICBGb250TG9ja2VyIGZvbnRMb2NrZXI7
CiAjZW5kaWYKIAotICAgIFZlY3RvcjxSZWZQdHI8U2ltcGxlRm9udERhdGE+LCAyMD4gZm9udHNU
b0RlbGV0ZTsKKyAgICBWZWN0b3I8UmVmUHRyPEZvbnQ+LCAyMD4gZm9udHNUb0RlbGV0ZTsKICAg
ICBmb3IgKGF1dG8mIGZvbnQgOiBjYWNoZWRGb250cygpLnZhbHVlcygpKSB7CiAgICAgICAgIGlm
ICghZm9udC0+aGFzT25lUmVmKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTQ2MCw4ICs0
NjAsOCBAQCB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhKGluCiAgICAgICAg
ICAgICBpZiAodmVydGljYWxEYXRhKQogICAgICAgICAgICAgICAgIHZlcnRpY2FsRGF0YS0+bV9p
bkZvbnRDYWNoZSA9IGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIGZvciAoYXV0byYgZm9udERh
dGEgOiBjYWNoZWRGb250cygpLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICBhdXRvKiB2ZXJ0aWNh
bERhdGEgPSBjb25zdF9jYXN0PE9wZW5UeXBlVmVydGljYWxEYXRhKj4oZm9udERhdGEtPnZlcnRp
Y2FsRGF0YSgpKTsKKyAgICAgICAgZm9yIChhdXRvJiBmb250IDogY2FjaGVkRm9udHMoKS52YWx1
ZXMoKSkgeworICAgICAgICAgICAgYXV0byogdmVydGljYWxEYXRhID0gY29uc3RfY2FzdDxPcGVu
VHlwZVZlcnRpY2FsRGF0YSo+KGZvbnQtPnZlcnRpY2FsRGF0YSgpKTsKICAgICAgICAgICAgIGlm
ICh2ZXJ0aWNhbERhdGEpCiAgICAgICAgICAgICAgICAgdmVydGljYWxEYXRhLT5tX2luRm9udENh
Y2hlID0gdHJ1ZTsKICAgICAgICAgfQpAQCAtNDc3LDEyICs0NzcsMTIgQEAgdm9pZCBGb250Q2Fj
aGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YShpbgogI2VuZGlmCiB9CiAKLXNpemVfdCBGb250Q2Fj
aGU6OmZvbnREYXRhQ291bnQoKQorc2l6ZV90IEZvbnRDYWNoZTo6Zm9udENvdW50KCkKIHsKICAg
ICByZXR1cm4gY2FjaGVkRm9udHMoKS5zaXplKCk7CiB9CiAKLXNpemVfdCBGb250Q2FjaGU6Omlu
YWN0aXZlRm9udERhdGFDb3VudCgpCitzaXplX3QgRm9udENhY2hlOjppbmFjdGl2ZUZvbnRDb3Vu
dCgpCiB7CiAjaWYgUExBVEZPUk0oSU9TKQogICAgIEZvbnRMb2NrZXIgZm9udExvY2tlcjsKQEAg
LTU0NSw3ICs1NDUsNyBAQCB2b2lkIEZvbnRDYWNoZTo6aW52YWxpZGF0ZSgpCiB9CiAKICNpZiAh
UExBVEZPUk0oQ09DT0EpCi1SZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6c2ltaWxh
ckZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJikKK1JlZlB0cjxGb250PiBG
b250Q2FjaGU6OnNpbWlsYXJGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpCiB7CiAgICAgcmV0
dXJuIG51bGxwdHI7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250Q2FjaGUuaAkocmV2aXNpb24gMTc4NTE1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udENhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDcgQEAg
Y2xhc3MgRm9udENhc2NhZGU7CiBjbGFzcyBGb250UGxhdGZvcm1EYXRhOwogY2xhc3MgRm9udFNl
bGVjdG9yOwogY2xhc3MgT3BlblR5cGVWZXJ0aWNhbERhdGE7Ci1jbGFzcyBTaW1wbGVGb250RGF0
YTsKK2NsYXNzIEZvbnQ7CiAKICNpZiBQTEFURk9STShXSU4pCiAjaWYgVVNFKElNTEFOR19GT05U
X0xJTksyKQpAQCAtMTExLDcgKzExMSw3IEBAIHB1YmxpYzoKICAgICBmcmllbmQgRm9udENhY2hl
JiBmb250Q2FjaGUoKTsKIAogICAgIC8vIFRoaXMgbWV0aG9kIGlzIGltcGxlbWVudGVkIGJ5IHRo
ZSBwbGF0Zm9ybS4KLSAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IHN5c3RlbUZhbGxiYWNrRm9y
Q2hhcmFjdGVycyhjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBTaW1wbGVGb250RGF0YSog
b3JpZ2luYWxGb250RGF0YSwgYm9vbCBpc1BsYXRmb3JtRm9udCwgY29uc3QgVUNoYXIqIGNoYXJh
Y3RlcnMsIGludCBsZW5ndGgpOworICAgIFJlZlB0cjxGb250PiBzeXN0ZW1GYWxsYmFja0ZvckNo
YXJhY3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgRm9udCogb3JpZ2luYWxGb250
RGF0YSwgYm9vbCBpc1BsYXRmb3JtRm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBs
ZW5ndGgpOwogCiAgICAgLy8gQWxzbyBpbXBsZW1lbnRlZCBieSB0aGUgcGxhdGZvcm0uCiAgICAg
dm9pZCBwbGF0Zm9ybUluaXQoKTsKQEAgLTEyOCwxMCArMTI4LDEwIEBAIHB1YmxpYzoKIAogICAg
IHZvaWQgZ2V0VHJhaXRzSW5GYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiwgVmVjdG9yPHVuc2ln
bmVkPiYpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBmb250
Rm9yRmFtaWx5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYsIGJv
b2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1lID0gZmFsc2UpOwotICAgIFdFQkNPUkVfRVhQT1JUIFJl
ZjxTaW1wbGVGb250RGF0YT4gbGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3Jp
cHRpb24mKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWY8U2ltcGxlRm9udERhdGE+IGZvbnRGb3JQ
bGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpOwotICAgIFJlZlB0cjxTaW1wbGVG
b250RGF0YT4gc2ltaWxhckZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJik7
CisgICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPEZvbnQ+IGZvbnRGb3JGYW1pbHkoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbWljU3RyaW5nJiwgYm9vbCBjaGVja2luZ0FsdGVybmF0
ZU5hbWUgPSBmYWxzZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgUmVmPEZvbnQ+IGxhc3RSZXNvcnRG
YWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJik7CisgICAgV0VCQ09SRV9FWFBPUlQg
UmVmPEZvbnQ+IGZvbnRGb3JQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpOwor
ICAgIFJlZlB0cjxGb250PiBzaW1pbGFyRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mKTsKIAog
ICAgIHZvaWQgYWRkQ2xpZW50KEZvbnRTZWxlY3RvciopOwogICAgIHZvaWQgcmVtb3ZlQ2xpZW50
KEZvbnRTZWxlY3RvciopOwpAQCAtMTM5LDEyICsxMzksMTIgQEAgcHVibGljOgogICAgIHVuc2ln
bmVkIHNob3J0IGdlbmVyYXRpb24oKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGludmFsaWRh
dGUoKTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHNpemVfdCBmb250RGF0YUNvdW50KCk7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgc2l6ZV90IGluYWN0aXZlRm9udERhdGFDb3VudCgpOworICAgIFdFQkNP
UkVfRVhQT1JUIHNpemVfdCBmb250Q291bnQoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzaXplX3Qg
aW5hY3RpdmVGb250Q291bnQoKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHB1cmdlSW5hY3Rp
dmVGb250RGF0YShpbnQgY291bnQgPSBJTlRfTUFYKTsKIAogI2lmIFBMQVRGT1JNKFdJTikKLSAg
ICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IGZvbnREYXRhRnJvbURlc2NyaXB0aW9uQW5kTG9nRm9u
dChjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBMT0dGT05UJiwgQXRvbWljU3RyaW5nJiBv
dXRGb250RmFtaWx5TmFtZSk7CisgICAgUmVmUHRyPEZvbnQ+IGZvbnRGcm9tRGVzY3JpcHRpb25B
bmRMb2dGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IExPR0ZPTlQmLCBBdG9taWNT
dHJpbmcmIG91dEZvbnRGYW1pbHlOYW1lKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKE9QRU5UWVBF
X1ZFUlRJQ0FMKQpAQCAtMTczLDcgKzE3Myw3IEBAIHByaXZhdGU6CiAgICAgLy8gVGhlc2UgbWV0
aG9kcyBhcmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBwbGF0Zm9ybS4KICNpZiBQTEFURk9STShJT1Mp
CiAgICAgRm9udFBsYXRmb3JtRGF0YSogZ2V0Q3VzdG9tRmFsbGJhY2tGb250KGNvbnN0IFVJbnQz
MiwgY29uc3QgRm9udERlc2NyaXB0aW9uJik7Ci0gICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0
YT4gZ2V0U3lzdGVtRm9udEZhbGxiYWNrRm9yQ2hhcmFjdGVycyhjb25zdCBGb250RGVzY3JpcHRp
b24mLCBjb25zdCBTaW1wbGVGb250RGF0YSosIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQg
bGVuZ3RoKTsKKyAgICBQYXNzUmVmUHRyPEZvbnQ+IGdldFN5c3RlbUZvbnRGYWxsYmFja0ZvckNo
YXJhY3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgRm9udCosIGNvbnN0IFVDaGFy
KiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKTsKICNlbmRpZgogICAgIHN0ZDo6dW5pcXVlX3B0cjxG
b250UGxhdGZvcm1EYXRhPiBjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5KTsKIApAQCAtMTgyLDcgKzE4Miw3IEBA
IHByaXZhdGU6CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgZnJpZW5kIGNsYXNzIENvbXBsZXhU
ZXh0Q29udHJvbGxlcjsKICNlbmRpZgotICAgIGZyaWVuZCBjbGFzcyBTaW1wbGVGb250RGF0YTsK
KyAgICBmcmllbmQgY2xhc3MgRm9udDsKIH07CiAKIC8vIEdldCB0aGUgZ2xvYmFsIGZvbnRDYWNo
ZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2Fz
Y2FkZS5jcHAJKHJldmlzaW9uIDE3ODUxNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDggKzEyNCw4IEBA
IEZvbnRDYXNjYWRlOjpGb250Q2FzY2FkZShjb25zdCBGb250RGVzY3IKIH0KIAogLy8gRklYTUU6
IFdlIHNob3VsZCBtYWtlIHRoaXMgY29uc3RydWN0b3IgcGxhdGZvcm0taW5kZXBlbmRlbnQuCi1G
b250Q2FzY2FkZTo6Rm9udENhc2NhZGUoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZm9udERhdGEs
IGJvb2wgaXNQcmludGVyRm9udCwgRm9udFNtb290aGluZ01vZGUgZm9udFNtb290aGluZ01vZGUp
Ci0gICAgOiBtX2dseXBocyhGb250R2x5cGhzOjpjcmVhdGVGb3JQbGF0Zm9ybUZvbnQoZm9udERh
dGEpKQorRm9udENhc2NhZGU6OkZvbnRDYXNjYWRlKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZv
bnQsIGJvb2wgaXNQcmludGVyRm9udCwgRm9udFNtb290aGluZ01vZGUgZm9udFNtb290aGluZ01v
ZGUpCisgICAgOiBtX2dseXBocyhGb250R2x5cGhzOjpjcmVhdGVGb3JQbGF0Zm9ybUZvbnQoZm9u
dCkpCiAgICAgLCBtX2xldHRlclNwYWNpbmcoMCkKICAgICAsIG1fd29yZFNwYWNpbmcoMCkKICAg
ICAsIG1fdXNlQmFja3NsYXNoQXNZZW5TeW1ib2woZmFsc2UpCkBAIC0xMzQsMjcgKzEzNCwyNyBA
QCBGb250Q2FzY2FkZTo6Rm9udENhc2NhZGUoY29uc3QgRm9udFBsYXRmCiAgICAgbV9mb250RGVz
Y3JpcHRpb24uc2V0VXNlUHJpbnRlckZvbnQoaXNQcmludGVyRm9udCk7CiAgICAgbV9mb250RGVz
Y3JpcHRpb24uc2V0Rm9udFNtb290aGluZyhmb250U21vb3RoaW5nTW9kZSk7CiAjaWYgUExBVEZP
Uk0oSU9TKQotICAgIG1fZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoQ1RGb250R2V0
U2l6ZShmb250RGF0YS5mb250KCkpKTsKLSAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRl
ZFNpemUoQ1RGb250R2V0U2l6ZShmb250RGF0YS5mb250KCkpKTsKLSAgICBtX2ZvbnREZXNjcmlw
dGlvbi5zZXRJc0l0YWxpYyhDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhmb250RGF0YS5mb250KCkp
ICYga0NURm9udFRyYWl0SXRhbGljKTsKLSAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRXZWlnaHQo
KENURm9udEdldFN5bWJvbGljVHJhaXRzKGZvbnREYXRhLmZvbnQoKSkgJiBrQ1RGb250VHJhaXRC
b2xkKSA/IEZvbnRXZWlnaHRCb2xkIDogRm9udFdlaWdodE5vcm1hbCk7CisgICAgbV9mb250RGVz
Y3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShDVEZvbnRHZXRTaXplKGZvbnQuZm9udCgpKSk7Cisg
ICAgbV9mb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKENURm9udEdldFNpemUoZm9udC5m
b250KCkpKTsKKyAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRJc0l0YWxpYyhDVEZvbnRHZXRTeW1i
b2xpY1RyYWl0cyhmb250LmZvbnQoKSkgJiBrQ1RGb250VHJhaXRJdGFsaWMpOworICAgIG1fZm9u
dERlc2NyaXB0aW9uLnNldFdlaWdodCgoQ1RGb250R2V0U3ltYm9saWNUcmFpdHMoZm9udC5mb250
KCkpICYga0NURm9udFRyYWl0Qm9sZCkgPyBGb250V2VpZ2h0Qm9sZCA6IEZvbnRXZWlnaHROb3Jt
YWwpOwogI2VuZGlmCiB9CiAKIC8vIEZJWE1FOiBXZSBzaG91bGQgbWFrZSB0aGlzIGNvbnN0cnVj
dG9yIHBsYXRmb3JtLWluZGVwZW5kZW50LgogI2lmIFBMQVRGT1JNKElPUykKLUZvbnRDYXNjYWRl
OjpGb250Q2FzY2FkZShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBmb250RGF0YSwgUGFzc1JlZlB0
cjxGb250U2VsZWN0b3I+IGZvbnRTZWxlY3RvcikKLSAgICA6IG1fZ2x5cGhzKEZvbnRHbHlwaHM6
OmNyZWF0ZUZvclBsYXRmb3JtRm9udChmb250RGF0YSkpCitGb250Q2FzY2FkZTo6Rm9udENhc2Nh
ZGUoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZm9udCwgUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+
IGZvbnRTZWxlY3RvcikKKyAgICA6IG1fZ2x5cGhzKEZvbnRHbHlwaHM6OmNyZWF0ZUZvclBsYXRm
b3JtRm9udChmb250KSkKICAgICAsIG1fbGV0dGVyU3BhY2luZygwKQogICAgICwgbV93b3JkU3Bh
Y2luZygwKQogICAgICwgbV90eXBlc2V0dGluZ0ZlYXR1cmVzKGNvbXB1dGVUeXBlc2V0dGluZ0Zl
YXR1cmVzKCkpCiB7Ci0gICAgQ1RGb250UmVmIHByaW1hcnlGb250ID0gZm9udERhdGEuZm9udCgp
OworICAgIENURm9udFJlZiBwcmltYXJ5Rm9udCA9IGZvbnQuZm9udCgpOwogICAgIG1fZm9udERl
c2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoQ1RGb250R2V0U2l6ZShwcmltYXJ5Rm9udCkpOwog
ICAgIG1fZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShDVEZvbnRHZXRTaXplKHByaW1h
cnlGb250KSk7CiAgICAgbV9mb250RGVzY3JpcHRpb24uc2V0SXNJdGFsaWMoQ1RGb250R2V0U3lt
Ym9saWNUcmFpdHMocHJpbWFyeUZvbnQpICYga0NURm9udFRyYWl0SXRhbGljKTsKICAgICBtX2Zv
bnREZXNjcmlwdGlvbi5zZXRXZWlnaHQoKENURm9udEdldFN5bWJvbGljVHJhaXRzKHByaW1hcnlG
b250KSAmIGtDVEZvbnRUcmFpdEJvbGQpID8gRm9udFdlaWdodEJvbGQgOiBGb250V2VpZ2h0Tm9y
bWFsKTsKLSAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRVc2VQcmludGVyRm9udChmb250RGF0YS5p
c1ByaW50ZXJGb250KCkpOworICAgIG1fZm9udERlc2NyaXB0aW9uLnNldFVzZVByaW50ZXJGb250
KGZvbnQuaXNQcmludGVyRm9udCgpKTsKICAgICBtX2dseXBocyA9IHJldHJpZXZlT3JBZGRDYWNo
ZWRGb250R2x5cGhzKG1fZm9udERlc2NyaXB0aW9uLCBmb250U2VsZWN0b3IuZ2V0KCkpOwogfQog
I2VuZGlmCkBAIC0zNzAsNyArMzcwLDcgQEAgdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0VtcGhhc2lz
TWFya3MoR3JhcAogICAgICAgICBkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KGNvbnRl
eHQsIHJ1biwgbWFyaywgcG9pbnQsIGZyb20sIHRvKTsKIH0KIAotZmxvYXQgRm9udENhc2NhZGU6
OndpZHRoKGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+
KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAorZmxv
YXQgRm9udENhc2NhZGU6OndpZHRoKGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBG
b250Kj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0
CiB7CiAgICAgQ29kZVBhdGggY29kZVBhdGhUb1VzZSA9IGNvZGVQYXRoKHJ1bik7CiAgICAgaWYg
KGNvZGVQYXRoVG9Vc2UgIT0gQ29tcGxleCkgewpAQCAtMzg4LDcgKzM4OCw3IEBAIGZsb2F0IEZv
bnRDYXNjYWRlOjp3aWR0aChjb25zdCBUZXh0UnVuJiAKICAgICBpZiAoY2FjaGVFbnRyeSAmJiAh
c3RkOjppc25hbigqY2FjaGVFbnRyeSkpCiAgICAgICAgIHJldHVybiAqY2FjaGVFbnRyeTsKIAot
ICAgIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiBsb2NhbEZhbGxiYWNrRm9udHM7Cisg
ICAgSGFzaFNldDxjb25zdCBGb250Kj4gbG9jYWxGYWxsYmFja0ZvbnRzOwogICAgIGlmICghZmFs
bGJhY2tGb250cykKICAgICAgICAgZmFsbGJhY2tGb250cyA9ICZsb2NhbEZhbGxiYWNrRm9udHM7
CiAKQEAgLTQxNSwxMCArNDE1LDEwIEBAIGZsb2F0IEZvbnRDYXNjYWRlOjp3aWR0aChjb25zdCBU
ZXh0UnVuJiAKICAgICByZXR1cm4gd2lkdGgocnVuKTsKIH0KIAotR2x5cGhEYXRhIEZvbnRDYXNj
YWRlOjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjLCBib29sIG1pcnJvciwgRm9udERh
dGFWYXJpYW50IHZhcmlhbnQpIGNvbnN0CitHbHlwaERhdGEgRm9udENhc2NhZGU6OmdseXBoRGF0
YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMsIGJvb2wgbWlycm9yLCBGb250VmFyaWFudCB2YXJpYW50
KSBjb25zdAogewogICAgIGlmICh2YXJpYW50ID09IEF1dG9WYXJpYW50KSB7Ci0gICAgICAgIGlm
IChtX2ZvbnREZXNjcmlwdGlvbi5zbWFsbENhcHMoKSAmJiAhcHJpbWFyeUZvbnREYXRhKCkuaXNT
VkdGb250KCkpIHsKKyAgICAgICAgaWYgKG1fZm9udERlc2NyaXB0aW9uLnNtYWxsQ2FwcygpICYm
ICFwcmltYXJ5Rm9udCgpLmlzU1ZHRm9udCgpKSB7CiAgICAgICAgICAgICBVQ2hhcjMyIHVwcGVy
QyA9IHVfdG91cHBlcihjKTsKICAgICAgICAgICAgIGlmICh1cHBlckMgIT0gYykgewogICAgICAg
ICAgICAgICAgIGMgPSB1cHBlckM7CkBAIC00NDUsNyArNDQ1LDcgQEAgdm9pZCBGb250Q2FzY2Fk
ZTo6ZGVsZXRlTGF5b3V0KFRleHRMYXlvdQogewogfQogCi1mbG9hdCBGb250Q2FzY2FkZTo6d2lk
dGgoVGV4dExheW91dCYsIHVuc2lnbmVkLCB1bnNpZ25lZCwgSGFzaFNldDxjb25zdCBTaW1wbGVG
b250RGF0YSo+KikKK2Zsb2F0IEZvbnRDYXNjYWRlOjp3aWR0aChUZXh0TGF5b3V0JiwgdW5zaWdu
ZWQsIHVuc2lnbmVkLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiopCiB7CiAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgcmV0dXJuIDA7CkBAIC01MDQsNyArNTA0LDcgQEAgYm9vbCBGb250Q2Fz
Y2FkZTo6aGFzVmFsaWRBdmVyYWdlQ2hhcldpZAogCiAjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFU
Rk9STShJT1MpCiAgICAgLy8gSW50ZXJuYWwgZm9udHMgb24gT1MgWCBhbmQgaU9TIGFsc28gaGF2
ZSBhbiBpbnZhbGlkIGVudHJ5IGluIHRoZSB0YWJsZSBmb3IgYXZnQ2hhcldpZHRoLgotICAgIGlm
IChwcmltYXJ5Rm9udERhdGFJc1N5c3RlbUZvbnQoKSkKKyAgICBpZiAocHJpbWFyeUZvbnRJc1N5
c3RlbUZvbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCiAKQEAgLTUyNCw3ICs1
MjQsNyBAQCBib29sIEZvbnRDYXNjYWRlOjpmYXN0QXZlcmFnZUNoYXJXaWR0aElmCiB7CiAgICAg
Ym9vbCBzdWNjZXNzID0gaGFzVmFsaWRBdmVyYWdlQ2hhcldpZHRoKCk7CiAgICAgaWYgKHN1Y2Nl
c3MpCi0gICAgICAgIHdpZHRoID0gcm91bmRmKHByaW1hcnlGb250RGF0YSgpLmF2Z0NoYXJXaWR0
aCgpKTsgLy8gRklYTUU6IHByaW1hcnlGb250RGF0YSgpIG1pZ2h0IG5vdCBjb3JyZXNwb25kIHRv
IGZpcnN0RmFtaWx5KCkuCisgICAgICAgIHdpZHRoID0gcm91bmRmKHByaW1hcnlGb250KCkuYXZn
Q2hhcldpZHRoKCkpOyAvLyBGSVhNRTogcHJpbWFyeUZvbnQoKSBtaWdodCBub3QgY29ycmVzcG9u
ZCB0byBmaXJzdEZhbWlseSgpLgogICAgIHJldHVybiBzdWNjZXNzOwogfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgJKHJldmlzaW9u
IDE3ODUxNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEwICsyNiwxMCBAQAogI2RlZmluZSBGb250Q2FzY2Fk
ZV9oCiAKICNpbmNsdWRlICJEYXNoQXJyYXkuaCIKKyNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVk
ZSAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiRm9udEdseXBocy5oIgogI2luY2x1ZGUg
IlBhdGguaCIKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgogI2luY2x1ZGUgIlRleHREaXJl
Y3Rpb24uaCIKICNpbmNsdWRlICJUeXBlc2V0dGluZ0ZlYXR1cmVzLmgiCiAjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KQEAgLTEzNCwxNyArMTM0LDE3IEBAIHB1YmxpYzoKIAogICAgIGVudW0gQ3Vz
dG9tRm9udE5vdFJlYWR5QWN0aW9uIHsgRG9Ob3RQYWludElmRm9udE5vdFJlYWR5LCBVc2VGYWxs
YmFja0lmRm9udE5vdFJlYWR5IH07CiAgICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQgZHJhd1RleHQo
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQg
ZnJvbSA9IDAsIGludCB0byA9IC0xLCBDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPSBEb05vdFBh
aW50SWZGb250Tm90UmVhZHkpIGNvbnN0OwotICAgIHZvaWQgZHJhd0dseXBocyhHcmFwaGljc0Nv
bnRleHQqLCBjb25zdCBTaW1wbGVGb250RGF0YSosIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZy
b20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKKyAgICB2b2lkIGRy
YXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRm9udCosIGNvbnN0IEdseXBoQnVmZmVy
JiwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKICAg
ICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4m
LCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9
IDAsIGludCB0byA9IC0xKSBjb25zdDsKIAogICAgIERhc2hBcnJheSBkYXNoZXNGb3JJbnRlcnNl
Y3Rpb25zV2l0aFJlY3QoY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmln
aW4sIGNvbnN0IEZsb2F0UmVjdCYgbGluZUV4dGVudHMpIGNvbnN0OwogCi0gICAgV0VCQ09SRV9F
WFBPUlQgZmxvYXQgd2lkdGgoY29uc3QgVGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9u
dERhdGEqPiogZmFsbGJhY2tGb250cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29uc3Q7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQgd2lkdGgoY29uc3QgVGV4dFJ1biYsIEhhc2hTZXQ8Y29u
c3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsK
ICAgICBmbG9hdCB3aWR0aChjb25zdCBUZXh0UnVuJiwgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJp
bmcmIGdseXBoTmFtZSkgY29uc3Q7CiAKICAgICBQYXNzT3duUHRyPFRleHRMYXlvdXQ+IGNyZWF0
ZUxheW91dChSZW5kZXJUZXh0KiwgZmxvYXQgeFBvcywgYm9vbCBjb2xsYXBzZVdoaXRlU3BhY2Up
IGNvbnN0OwogICAgIHN0YXRpYyB2b2lkIGRlbGV0ZUxheW91dChUZXh0TGF5b3V0Kik7Ci0gICAg
c3RhdGljIGZsb2F0IHdpZHRoKFRleHRMYXlvdXQmLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBs
ZW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDApOwor
ICAgIHN0YXRpYyBmbG9hdCB3aWR0aChUZXh0TGF5b3V0JiwgdW5zaWduZWQgZnJvbSwgdW5zaWdu
ZWQgbGVuLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cyA9IDApOwogCiAgICAg
aW50IG9mZnNldEZvclBvc2l0aW9uKGNvbnN0IFRleHRSdW4mLCBmbG9hdCBwb3NpdGlvbiwgYm9v
bCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3Q7CiAgICAgdm9pZCBhZGp1c3RTZWxlY3Rpb25S
ZWN0Rm9yVGV4dChjb25zdCBUZXh0UnVuJiwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgaW50
IGZyb20gPSAwLCBpbnQgdG8gPSAtMSkgY29uc3Q7CkBAIC0xNzIsMTAgKzE3MiwxMCBAQCBwdWJs
aWM6CiAKICAgICBib29sIGlzUGxhdGZvcm1Gb250KCkgY29uc3QgeyByZXR1cm4gbV9nbHlwaHMt
PmlzRm9yUGxhdGZvcm1Gb250KCk7IH0KIAotICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBmb250TWV0
cmljcygpIGNvbnN0IHsgcmV0dXJuIHByaW1hcnlGb250RGF0YSgpLmZvbnRNZXRyaWNzKCk7IH0K
LSAgICBmbG9hdCBzcGFjZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gcHJpbWFyeUZvbnREYXRhKCku
c3BhY2VXaWR0aCgpICsgbV9sZXR0ZXJTcGFjaW5nOyB9Ci0gICAgZmxvYXQgdGFiV2lkdGgoY29u
c3QgU2ltcGxlRm9udERhdGEmLCB1bnNpZ25lZCB0YWJTaXplLCBmbG9hdCBwb3NpdGlvbikgY29u
c3Q7Ci0gICAgZmxvYXQgdGFiV2lkdGgodW5zaWduZWQgdGFiU2l6ZSwgZmxvYXQgcG9zaXRpb24p
IGNvbnN0IHsgcmV0dXJuIHRhYldpZHRoKHByaW1hcnlGb250RGF0YSgpLCB0YWJTaXplLCBwb3Np
dGlvbik7IH0KKyAgICBjb25zdCBGb250TWV0cmljcyYgZm9udE1ldHJpY3MoKSBjb25zdCB7IHJl
dHVybiBwcmltYXJ5Rm9udCgpLmZvbnRNZXRyaWNzKCk7IH0KKyAgICBmbG9hdCBzcGFjZVdpZHRo
KCkgY29uc3QgeyByZXR1cm4gcHJpbWFyeUZvbnQoKS5zcGFjZVdpZHRoKCkgKyBtX2xldHRlclNw
YWNpbmc7IH0KKyAgICBmbG9hdCB0YWJXaWR0aChjb25zdCBGb250JiwgdW5zaWduZWQgdGFiU2l6
ZSwgZmxvYXQgcG9zaXRpb24pIGNvbnN0OworICAgIGZsb2F0IHRhYldpZHRoKHVuc2lnbmVkIHRh
YlNpemUsIGZsb2F0IHBvc2l0aW9uKSBjb25zdCB7IHJldHVybiB0YWJXaWR0aChwcmltYXJ5Rm9u
dCgpLCB0YWJTaXplLCBwb3NpdGlvbik7IH0KICAgICBib29sIGhhc1ZhbGlkQXZlcmFnZUNoYXJX
aWR0aCgpIGNvbnN0OwogICAgIGJvb2wgZmFzdEF2ZXJhZ2VDaGFyV2lkdGhJZkF2YWlsYWJsZShm
bG9hdCAmd2lkdGgpIGNvbnN0OyAvLyByZXR1cm5zIHRydWUgb24gc3VjY2VzcwogCkBAIC0xODMs
MTIgKzE4MywxMiBAQCBwdWJsaWM6CiAgICAgaW50IGVtcGhhc2lzTWFya0Rlc2NlbnQoY29uc3Qg
QXRvbWljU3RyaW5nJikgY29uc3Q7CiAgICAgaW50IGVtcGhhc2lzTWFya0hlaWdodChjb25zdCBB
dG9taWNTdHJpbmcmKSBjb25zdDsKIAotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhJiBwcmltYXJ5
Rm9udERhdGEoKSBjb25zdDsKKyAgICBjb25zdCBGb250JiBwcmltYXJ5Rm9udCgpIGNvbnN0Owog
ICAgIGNvbnN0IEZvbnRSYW5nZXMmIGZhbGxiYWNrUmFuZ2VzQXQodW5zaWduZWQpIGNvbnN0Owot
ICAgIEdseXBoRGF0YSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiwgYm9vbCBtaXJyb3Is
IEZvbnREYXRhVmFyaWFudCA9IEF1dG9WYXJpYW50KSBjb25zdDsKKyAgICBHbHlwaERhdGEgZ2x5
cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIsIGJvb2wgbWlycm9yLCBGb250VmFyaWFudCA9IEF1
dG9WYXJpYW50KSBjb25zdDsKICAgICAKICNpZiBQTEFURk9STShDT0NPQSkKLSAgICBjb25zdCBT
aW1wbGVGb250RGF0YSogZm9udERhdGFGb3JDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjb25z
dCBVQ2hhciosIHNpemVfdCBsZW5ndGgsIEZvbnREYXRhVmFyaWFudCkgY29uc3Q7CisgICAgY29u
c3QgRm9udCogZm9udEZvckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVDaGFyKiwg
c2l6ZV90IGxlbmd0aCwgRm9udFZhcmlhbnQpIGNvbnN0OwogI2VuZGlmCiAKICAgICBzdGF0aWMg
Ym9vbCBpc0NKS0lkZW9ncmFwaChVQ2hhcjMyKTsKQEAgLTIwNyw3ICsyMDcsNyBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIENvZGVQYXRoIGNoYXJhY3RlclJhbmdlQ29kZVBhdGgoY29uc3QgTENoYXIq
LCB1bnNpZ25lZCkgeyByZXR1cm4gU2ltcGxlOyB9CiAgICAgc3RhdGljIENvZGVQYXRoIGNoYXJh
Y3RlclJhbmdlQ29kZVBhdGgoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW4pOwogCi0gICAgYm9v
bCBwcmltYXJ5Rm9udERhdGFJc1N5c3RlbUZvbnQoKSBjb25zdDsKKyAgICBib29sIHByaW1hcnlG
b250SXNTeXN0ZW1Gb250KCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgZW51bSBGb3JUZXh0RW1w
aGFzaXNPck5vdCB7IE5vdEZvclRleHRFbXBoYXNpcywgRm9yVGV4dEVtcGhhc2lzIH07CkBAIC0y
MTgsNyArMjE4LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzRm9yU2lt
cGxlVGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbWljU3Ry
aW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20sIGludCB0bykgY29uc3Q7CiAg
ICAgdm9pZCBkcmF3R2x5cGhCdWZmZXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYs
IGNvbnN0IEdseXBoQnVmZmVyJiwgRmxvYXRQb2ludCYpIGNvbnN0OwogICAgIHZvaWQgZHJhd0Vt
cGhhc2lzTWFya3MoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEdseXBo
QnVmZmVyJiwgY29uc3QgQXRvbWljU3RyaW5nJiwgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0Owot
ICAgIGZsb2F0IGZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mLCBIYXNoU2V0
PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93
KiA9IDApIGNvbnN0OworICAgIGZsb2F0IGZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KGNvbnN0IFRl
eHRSdW4mLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cyA9IDAsIEdseXBoT3Zl
cmZsb3cqID0gMCkgY29uc3Q7CiAgICAgaW50IG9mZnNldEZvclBvc2l0aW9uRm9yU2ltcGxlVGV4
dChjb25zdCBUZXh0UnVuJiwgZmxvYXQgcG9zaXRpb24sIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlw
aHMpIGNvbnN0OwogICAgIHZvaWQgYWRqdXN0U2VsZWN0aW9uUmVjdEZvclNpbXBsZVRleHQoY29u
c3QgVGV4dFJ1biYsIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9tLCBpbnQgdG8p
IGNvbnN0OwogCkBAIC0yMzEsNyArMjMxLDcgQEAgcHJpdmF0ZToKICAgICBmbG9hdCBnZXRHbHlw
aHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBpbnQgZnJvbSwgaW50
IHRvLCBHbHlwaEJ1ZmZlciYsIEZvclRleHRFbXBoYXNpc09yTm90ID0gTm90Rm9yVGV4dEVtcGhh
c2lzKSBjb25zdDsKICAgICBmbG9hdCBkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSwgaW50IHRvKSBjb25z
dDsKICAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxv
YXRQb2ludCYsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0OwotICAgIGZsb2F0IGZsb2F0V2lkdGhG
b3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0
YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsKKyAgICBm
bG9hdCBmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYsIEhhc2hTZXQ8Y29u
c3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsK
ICAgICBpbnQgb2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwg
ZmxvYXQgcG9zaXRpb24sIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0OwogICAgIHZv
aWQgYWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBMYXlv
dXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdDsKIApAQCAtMzUx
LDEwICszNTEsMTAgQEAgaW5saW5lIEZvbnRDYXNjYWRlOjp+Rm9udENhc2NhZGUoKQogewogfQog
Ci1pbmxpbmUgY29uc3QgU2ltcGxlRm9udERhdGEmIEZvbnRDYXNjYWRlOjpwcmltYXJ5Rm9udERh
dGEoKSBjb25zdAoraW5saW5lIGNvbnN0IEZvbnQmIEZvbnRDYXNjYWRlOjpwcmltYXJ5Rm9udCgp
IGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fZ2x5cGhzKTsKLSAgICByZXR1cm4gbV9nbHlwaHMtPnBy
aW1hcnlTaW1wbGVGb250RGF0YShtX2ZvbnREZXNjcmlwdGlvbik7CisgICAgcmV0dXJuIG1fZ2x5
cGhzLT5wcmltYXJ5Rm9udChtX2ZvbnREZXNjcmlwdGlvbik7CiB9CiAKIGlubGluZSBjb25zdCBG
b250UmFuZ2VzJiBGb250Q2FzY2FkZTo6ZmFsbGJhY2tSYW5nZXNBdCh1bnNpZ25lZCBpbmRleCkg
Y29uc3QKQEAgLTM3NCwxMyArMzc0LDEzIEBAIGlubGluZSBGb250U2VsZWN0b3IqIEZvbnRDYXNj
YWRlOjpmb250U2UKICAgICByZXR1cm4gbV9nbHlwaHMgPyBtX2dseXBocy0+Zm9udFNlbGVjdG9y
KCkgOiAwOwogfQogCi1pbmxpbmUgZmxvYXQgRm9udENhc2NhZGU6OnRhYldpZHRoKGNvbnN0IFNp
bXBsZUZvbnREYXRhJiBmb250RGF0YSwgdW5zaWduZWQgdGFiU2l6ZSwgZmxvYXQgcG9zaXRpb24p
IGNvbnN0CitpbmxpbmUgZmxvYXQgRm9udENhc2NhZGU6OnRhYldpZHRoKGNvbnN0IEZvbnQmIGZv
bnQsIHVuc2lnbmVkIHRhYlNpemUsIGZsb2F0IHBvc2l0aW9uKSBjb25zdAogewogICAgIGlmICgh
dGFiU2l6ZSkKICAgICAgICAgcmV0dXJuIGxldHRlclNwYWNpbmcoKTsKLSAgICBmbG9hdCB0YWJX
aWR0aCA9IHRhYlNpemUgKiBmb250RGF0YS5zcGFjZVdpZHRoKCkgKyBsZXR0ZXJTcGFjaW5nKCk7
CisgICAgZmxvYXQgdGFiV2lkdGggPSB0YWJTaXplICogZm9udC5zcGFjZVdpZHRoKCkgKyBsZXR0
ZXJTcGFjaW5nKCk7CiAgICAgZmxvYXQgdGFiRGVsdGFXaWR0aCA9IHRhYldpZHRoIC0gZm1vZGYo
cG9zaXRpb24sIHRhYldpZHRoKTsKLSAgICByZXR1cm4gKHRhYkRlbHRhV2lkdGggPCBmb250RGF0
YS5zcGFjZVdpZHRoKCkgLyAyKSA/IHRhYldpZHRoIDogdGFiRGVsdGFXaWR0aDsKKyAgICByZXR1
cm4gKHRhYkRlbHRhV2lkdGggPCBmb250LnNwYWNlV2lkdGgoKSAvIDIpID8gdGFiV2lkdGggOiB0
YWJEZWx0YVdpZHRoOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250Q2FzY2FkZUZhc3RQYXRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZhc3RQYXRoLmNwcAkocmV2aXNpb24gMTc4
NTEwKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFzdFBhdGgu
Y3BwOjE3ODUxMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNj
YWRlRmFzdFBhdGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzQxIEBACisvKioKKyAq
IENvcHlyaWdodCAoQykgMjAwMywgMjAwNiwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIK
KyAqIENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgorCisjaW5jbHVkZSAiRmxvYXRSZWN0
LmgiCisjaW5jbHVkZSAiRm9udEdseXBocy5oIgorI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCisj
aW5jbHVkZSAiTGF5b3V0UmVjdC5oIgorI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisjaW5j
bHVkZSAiVGV4dFJ1bi5oIgorI2luY2x1ZGUgIldpZHRoSXRlcmF0b3IuaCIKKyNpbmNsdWRlIDx3
dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8
d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdURjsKK3Vz
aW5nIG5hbWVzcGFjZSBVbmljb2RlOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEZJWE1F
OiBUaGlzIGZ1bmN0aW9uIG1heSBub3Qgd29yayBpZiB0aGUgZW1waGFzaXMgbWFyayB1c2VzIGEg
Y29tcGxleCBzY3JpcHQsIGJ1dCBub25lIG9mIHRoZQorLy8gc3RhbmRhcmQgZW1waGFzaXMgbWFy
a3MgZG8gc28uCitib29sIEZvbnRDYXNjYWRlOjpnZXRFbXBoYXNpc01hcmtHbHlwaERhdGEoY29u
c3QgQXRvbWljU3RyaW5nJiBtYXJrLCBHbHlwaERhdGEmIGdseXBoRGF0YSkgY29uc3QKK3sKKyAg
ICBpZiAobWFyay5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFVDaGFy
MzIgY2hhcmFjdGVyID0gbWFya1swXTsKKworICAgIGlmIChVMTZfSVNfU1VSUk9HQVRFKGNoYXJh
Y3RlcikpIHsKKyAgICAgICAgaWYgKCFVMTZfSVNfU1VSUk9HQVRFX0xFQUQoY2hhcmFjdGVyKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAobWFyay5sZW5ndGgoKSA8
IDIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgVUNoYXIgbG93ID0gbWFy
a1sxXTsKKyAgICAgICAgaWYgKCFVMTZfSVNfVFJBSUwobG93KSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgICAgICBjaGFyYWN0ZXIgPSBVMTZfR0VUX1NVUFBMRU1FTlRBUlkoY2hh
cmFjdGVyLCBsb3cpOworICAgIH0KKworICAgIGdseXBoRGF0YSA9IGdseXBoRGF0YUZvckNoYXJh
Y3RlcihjaGFyYWN0ZXIsIGZhbHNlLCBFbXBoYXNpc01hcmtWYXJpYW50KTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworaW50IEZvbnRDYXNjYWRlOjplbXBoYXNpc01hcmtBc2NlbnQoY29uc3QgQXRv
bWljU3RyaW5nJiBtYXJrKSBjb25zdAoreworICAgIEdseXBoRGF0YSBtYXJrR2x5cGhEYXRhOwor
ICAgIGlmICghZ2V0RW1waGFzaXNNYXJrR2x5cGhEYXRhKG1hcmssIG1hcmtHbHlwaERhdGEpKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBtYXJrRm9udERh
dGEgPSBtYXJrR2x5cGhEYXRhLmZvbnREYXRhOworICAgIEFTU0VSVChtYXJrRm9udERhdGEpOwor
ICAgIGlmICghbWFya0ZvbnREYXRhKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBt
YXJrRm9udERhdGEtPmZvbnRNZXRyaWNzKCkuYXNjZW50KCk7Cit9CisKK2ludCBGb250Q2FzY2Fk
ZTo6ZW1waGFzaXNNYXJrRGVzY2VudChjb25zdCBBdG9taWNTdHJpbmcmIG1hcmspIGNvbnN0Cit7
CisgICAgR2x5cGhEYXRhIG1hcmtHbHlwaERhdGE7CisgICAgaWYgKCFnZXRFbXBoYXNpc01hcmtH
bHlwaERhdGEobWFyaywgbWFya0dseXBoRGF0YSkpCisgICAgICAgIHJldHVybiAwOworCisgICAg
Y29uc3QgU2ltcGxlRm9udERhdGEqIG1hcmtGb250RGF0YSA9IG1hcmtHbHlwaERhdGEuZm9udERh
dGE7CisgICAgQVNTRVJUKG1hcmtGb250RGF0YSk7CisgICAgaWYgKCFtYXJrRm9udERhdGEpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIG1hcmtGb250RGF0YS0+Zm9udE1ldHJpY3Mo
KS5kZXNjZW50KCk7Cit9CisKK2ludCBGb250Q2FzY2FkZTo6ZW1waGFzaXNNYXJrSGVpZ2h0KGNv
bnN0IEF0b21pY1N0cmluZyYgbWFyaykgY29uc3QKK3sKKyAgICBHbHlwaERhdGEgbWFya0dseXBo
RGF0YTsKKyAgICBpZiAoIWdldEVtcGhhc2lzTWFya0dseXBoRGF0YShtYXJrLCBtYXJrR2x5cGhE
YXRhKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBjb25zdCBTaW1wbGVGb250RGF0YSogbWFy
a0ZvbnREYXRhID0gbWFya0dseXBoRGF0YS5mb250RGF0YTsKKyAgICBBU1NFUlQobWFya0ZvbnRE
YXRhKTsKKyAgICBpZiAoIW1hcmtGb250RGF0YSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBy
ZXR1cm4gbWFya0ZvbnREYXRhLT5mb250TWV0cmljcygpLmhlaWdodCgpOworfQorCitmbG9hdCBG
b250Q2FzY2FkZTo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRS
dW4mIHJ1biwgaW50IGZyb20sIGludCB0bywgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBGb3JU
ZXh0RW1waGFzaXNPck5vdCBmb3JUZXh0RW1waGFzaXMpIGNvbnN0Cit7CisgICAgZmxvYXQgaW5p
dGlhbEFkdmFuY2U7CisKKyAgICBXaWR0aEl0ZXJhdG9yIGl0KHRoaXMsIHJ1biwgMCwgZmFsc2Us
IGZvclRleHRFbXBoYXNpcyk7CisgICAgLy8gRklYTUU6IFVzaW5nIHNlcGFyYXRlIGdseXBoIGJ1
ZmZlcnMgZm9yIHRoZSBwcmVmaXggYW5kIHRoZSBzdWZmaXggaXMgaW5jb3JyZWN0IHdoZW4ga2Vy
bmluZyBvcgorICAgIC8vIGxpZ2F0dXJlcyBhcmUgZW5hYmxlZC4KKyAgICBHbHlwaEJ1ZmZlciBs
b2NhbEdseXBoQnVmZmVyOworICAgIGl0LmFkdmFuY2UoZnJvbSwgJmxvY2FsR2x5cGhCdWZmZXIp
OworICAgIGZsb2F0IGJlZm9yZVdpZHRoID0gaXQubV9ydW5XaWR0aFNvRmFyOworICAgIGl0LmFk
dmFuY2UodG8sICZnbHlwaEJ1ZmZlcik7CisKKyAgICBpZiAoZ2x5cGhCdWZmZXIuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIGZsb2F0IGFmdGVyV2lkdGggPSBpdC5tX3J1bldp
ZHRoU29GYXI7CisKKyAgICBpZiAocnVuLnJ0bCgpKSB7CisgICAgICAgIGZsb2F0IGZpbmFsUm91
bmRpbmdXaWR0aCA9IGl0Lm1fZmluYWxSb3VuZGluZ1dpZHRoOworICAgICAgICBpdC5hZHZhbmNl
KHJ1bi5sZW5ndGgoKSwgJmxvY2FsR2x5cGhCdWZmZXIpOworICAgICAgICBpbml0aWFsQWR2YW5j
ZSA9IGZpbmFsUm91bmRpbmdXaWR0aCArIGl0Lm1fcnVuV2lkdGhTb0ZhciAtIGFmdGVyV2lkdGg7
CisgICAgfSBlbHNlCisgICAgICAgIGluaXRpYWxBZHZhbmNlID0gYmVmb3JlV2lkdGg7CisKKyAg
ICBpZiAocnVuLnJ0bCgpKQorICAgICAgICBnbHlwaEJ1ZmZlci5yZXZlcnNlKDAsIGdseXBoQnVm
ZmVyLnNpemUoKSk7CisKKyAgICByZXR1cm4gaW5pdGlhbEFkdmFuY2U7Cit9CisKK2Zsb2F0IEZv
bnRDYXNjYWRlOjpkcmF3U2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0
IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8p
IGNvbnN0Cit7CisgICAgLy8gVGhpcyBnbHlwaCBidWZmZXIgaG9sZHMgb3VyIGdseXBocythZHZh
bmNlcytmb250IGRhdGEgZm9yIGVhY2ggZ2x5cGguCisgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZm
ZXI7CisKKyAgICBmbG9hdCBzdGFydFggPSBwb2ludC54KCkgKyBnZXRHbHlwaHNBbmRBZHZhbmNl
c0ZvclNpbXBsZVRleHQocnVuLCBmcm9tLCB0bywgZ2x5cGhCdWZmZXIpOworCisgICAgaWYgKGds
eXBoQnVmZmVyLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBGbG9hdFBvaW50
IHN0YXJ0UG9pbnQoc3RhcnRYLCBwb2ludC55KCkpOworICAgIGRyYXdHbHlwaEJ1ZmZlcihjb250
ZXh0LCBydW4sIGdseXBoQnVmZmVyLCBzdGFydFBvaW50KTsKKworICAgIHJldHVybiBzdGFydFBv
aW50LngoKSAtIHN0YXJ0WDsKK30KKwordm9pZCBGb250Q2FzY2FkZTo6ZHJhd0VtcGhhc2lzTWFy
a3NGb3JTaW1wbGVUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYg
cnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBp
bnQgZnJvbSwgaW50IHRvKSBjb25zdAoreworICAgIEdseXBoQnVmZmVyIGdseXBoQnVmZmVyOwor
ICAgIGZsb2F0IGluaXRpYWxBZHZhbmNlID0gZ2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JTaW1wbGVU
ZXh0KHJ1biwgZnJvbSwgdG8sIGdseXBoQnVmZmVyLCBGb3JUZXh0RW1waGFzaXMpOworCisgICAg
aWYgKGdseXBoQnVmZmVyLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZHJhd0Vt
cGhhc2lzTWFya3MoY29udGV4dCwgcnVuLCBnbHlwaEJ1ZmZlciwgbWFyaywgRmxvYXRQb2ludChw
b2ludC54KCkgKyBpbml0aWFsQWR2YW5jZSwgcG9pbnQueSgpKSk7Cit9CisKK3ZvaWQgRm9udENh
c2NhZGU6OmRyYXdHbHlwaEJ1ZmZlcihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRl
eHRSdW4mIHJ1biwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBGbG9hdFBvaW50JiBw
b2ludCkgY29uc3QKK3sKKyNpZiAhRU5BQkxFKFNWR19GT05UUykKKyAgICBVTlVTRURfUEFSQU0o
cnVuKTsKKyNlbmRpZgorCisgICAgLy8gRHJhdyBlYWNoIGNvbnRpZ3VvdXMgcnVuIG9mIGdseXBo
cyB0aGF0IHVzZSB0aGUgc2FtZSBmb250IGRhdGEuCisgICAgY29uc3QgU2ltcGxlRm9udERhdGEq
IGZvbnREYXRhID0gZ2x5cGhCdWZmZXIuZm9udERhdGFBdCgwKTsKKyAgICBGbG9hdFNpemUgb2Zm
c2V0ID0gZ2x5cGhCdWZmZXIub2Zmc2V0QXQoMCk7CisgICAgRmxvYXRQb2ludCBzdGFydFBvaW50
KHBvaW50LngoKSwgcG9pbnQueSgpIC0gZ2x5cGhCdWZmZXIuaW5pdGlhbEFkdmFuY2UoKS5oZWln
aHQoKSk7CisgICAgZmxvYXQgbmV4dFggPSBzdGFydFBvaW50LngoKSArIGdseXBoQnVmZmVyLmFk
dmFuY2VBdCgwKS53aWR0aCgpOworICAgIGZsb2F0IG5leHRZID0gc3RhcnRQb2ludC55KCkgKyBn
bHlwaEJ1ZmZlci5hZHZhbmNlQXQoMCkuaGVpZ2h0KCk7CisgICAgaW50IGxhc3RGcm9tID0gMDsK
KyAgICBpbnQgbmV4dEdseXBoID0gMTsKKyNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQorICAgIFRleHRS
dW46OlJlbmRlcmluZ0NvbnRleHQqIHJlbmRlcmluZ0NvbnRleHQgPSBydW4ucmVuZGVyaW5nQ29u
dGV4dCgpOworI2VuZGlmCisgICAgd2hpbGUgKG5leHRHbHlwaCA8IGdseXBoQnVmZmVyLnNpemUo
KSkgeworICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogbmV4dEZvbnREYXRhID0gZ2x5cGhC
dWZmZXIuZm9udERhdGFBdChuZXh0R2x5cGgpOworICAgICAgICBGbG9hdFNpemUgbmV4dE9mZnNl
dCA9IGdseXBoQnVmZmVyLm9mZnNldEF0KG5leHRHbHlwaCk7CisKKyAgICAgICAgaWYgKG5leHRG
b250RGF0YSAhPSBmb250RGF0YSB8fCBuZXh0T2Zmc2V0ICE9IG9mZnNldCkgeworI2lmIEVOQUJM
RShTVkdfRk9OVFMpCisgICAgICAgICAgICBpZiAocmVuZGVyaW5nQ29udGV4dCAmJiBmb250RGF0
YS0+aXNTVkdGb250KCkpCisgICAgICAgICAgICAgICAgcmVuZGVyaW5nQ29udGV4dC0+ZHJhd1NW
R0dseXBocyhjb250ZXh0LCBmb250RGF0YSwgZ2x5cGhCdWZmZXIsIGxhc3RGcm9tLCBuZXh0R2x5
cGggLSBsYXN0RnJvbSwgc3RhcnRQb2ludCk7CisgICAgICAgICAgICBlbHNlCisjZW5kaWYKKyAg
ICAgICAgICAgICAgICBkcmF3R2x5cGhzKGNvbnRleHQsIGZvbnREYXRhLCBnbHlwaEJ1ZmZlciwg
bGFzdEZyb20sIG5leHRHbHlwaCAtIGxhc3RGcm9tLCBzdGFydFBvaW50KTsKKworICAgICAgICAg
ICAgbGFzdEZyb20gPSBuZXh0R2x5cGg7CisgICAgICAgICAgICBmb250RGF0YSA9IG5leHRGb250
RGF0YTsKKyAgICAgICAgICAgIG9mZnNldCA9IG5leHRPZmZzZXQ7CisgICAgICAgICAgICBzdGFy
dFBvaW50LnNldFgobmV4dFgpOworICAgICAgICAgICAgc3RhcnRQb2ludC5zZXRZKG5leHRZKTsK
KyAgICAgICAgfQorICAgICAgICBuZXh0WCArPSBnbHlwaEJ1ZmZlci5hZHZhbmNlQXQobmV4dEds
eXBoKS53aWR0aCgpOworICAgICAgICBuZXh0WSArPSBnbHlwaEJ1ZmZlci5hZHZhbmNlQXQobmV4
dEdseXBoKS5oZWlnaHQoKTsKKyAgICAgICAgbmV4dEdseXBoKys7CisgICAgfQorCisjaWYgRU5B
QkxFKFNWR19GT05UUykKKyAgICBpZiAocmVuZGVyaW5nQ29udGV4dCAmJiBmb250RGF0YS0+aXNT
VkdGb250KCkpCisgICAgICAgIHJlbmRlcmluZ0NvbnRleHQtPmRyYXdTVkdHbHlwaHMoY29udGV4
dCwgZm9udERhdGEsIGdseXBoQnVmZmVyLCBsYXN0RnJvbSwgbmV4dEdseXBoIC0gbGFzdEZyb20s
IHN0YXJ0UG9pbnQpOworICAgIGVsc2UKKyNlbmRpZgorICAgIHsKKyAgICAgICAgZHJhd0dseXBo
cyhjb250ZXh0LCBmb250RGF0YSwgZ2x5cGhCdWZmZXIsIGxhc3RGcm9tLCBuZXh0R2x5cGggLSBs
YXN0RnJvbSwgc3RhcnRQb2ludCk7CisgICAgICAgIHBvaW50LnNldFgobmV4dFgpOworICAgIH0K
K30KKworaW5saW5lIHN0YXRpYyBmbG9hdCBvZmZzZXRUb01pZGRsZU9mR2x5cGgoY29uc3QgU2lt
cGxlRm9udERhdGEqIGZvbnREYXRhLCBHbHlwaCBnbHlwaCkKK3sKKyAgICBpZiAoZm9udERhdGEt
PnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbCkgeworICAgICAgICBG
bG9hdFJlY3QgYm91bmRzID0gZm9udERhdGEtPmJvdW5kc0ZvckdseXBoKGdseXBoKTsKKyAgICAg
ICAgcmV0dXJuIGJvdW5kcy54KCkgKyBib3VuZHMud2lkdGgoKSAvIDI7CisgICAgfQorICAgIC8v
IEZJWE1FOiBVc2UgZ2x5cGggYm91bmRzIG9uY2UgdGhleSBtYWtlIHNlbnNlIGZvciB2ZXJ0aWNh
bCBmb250cy4KKyAgICByZXR1cm4gZm9udERhdGEtPndpZHRoRm9yR2x5cGgoZ2x5cGgpIC8gMjsK
K30KKworaW5saW5lIHN0YXRpYyBmbG9hdCBvZmZzZXRUb01pZGRsZU9mR2x5cGhBdEluZGV4KGNv
bnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgc2l6ZV90IGkpCit7CisgICAgcmV0dXJuIG9m
ZnNldFRvTWlkZGxlT2ZHbHlwaChnbHlwaEJ1ZmZlci5mb250RGF0YUF0KGkpLCBnbHlwaEJ1ZmZl
ci5nbHlwaEF0KGkpKTsKK30KKwordm9pZCBGb250Q2FzY2FkZTo6ZHJhd0VtcGhhc2lzTWFya3Mo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEdseXBo
QnVmZmVyJiBnbHlwaEJ1ZmZlciwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9h
dFBvaW50JiBwb2ludCkgY29uc3QKK3sKKyAgICBHbHlwaERhdGEgbWFya0dseXBoRGF0YTsKKyAg
ICBpZiAoIWdldEVtcGhhc2lzTWFya0dseXBoRGF0YShtYXJrLCBtYXJrR2x5cGhEYXRhKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIG1hcmtGb250RGF0YSA9
IG1hcmtHbHlwaERhdGEuZm9udERhdGE7CisgICAgQVNTRVJUKG1hcmtGb250RGF0YSk7CisgICAg
aWYgKCFtYXJrRm9udERhdGEpCisgICAgICAgIHJldHVybjsKKworICAgIEdseXBoIG1hcmtHbHlw
aCA9IG1hcmtHbHlwaERhdGEuZ2x5cGg7CisgICAgR2x5cGggc3BhY2VHbHlwaCA9IG1hcmtGb250
RGF0YS0+c3BhY2VHbHlwaCgpOworCisgICAgZmxvYXQgbWlkZGxlT2ZMYXN0R2x5cGggPSBvZmZz
ZXRUb01pZGRsZU9mR2x5cGhBdEluZGV4KGdseXBoQnVmZmVyLCAwKTsKKyAgICBGbG9hdFBvaW50
IHN0YXJ0UG9pbnQocG9pbnQueCgpICsgbWlkZGxlT2ZMYXN0R2x5cGggLSBvZmZzZXRUb01pZGRs
ZU9mR2x5cGgobWFya0ZvbnREYXRhLCBtYXJrR2x5cGgpLCBwb2ludC55KCkpOworCisgICAgR2x5
cGhCdWZmZXIgbWFya0J1ZmZlcjsKKyAgICBmb3IgKGludCBpID0gMDsgaSArIDEgPCBnbHlwaEJ1
ZmZlci5zaXplKCk7ICsraSkgeworICAgICAgICBmbG9hdCBtaWRkbGVPZk5leHRHbHlwaCA9IG9m
ZnNldFRvTWlkZGxlT2ZHbHlwaEF0SW5kZXgoZ2x5cGhCdWZmZXIsIGkgKyAxKTsKKyAgICAgICAg
ZmxvYXQgYWR2YW5jZSA9IGdseXBoQnVmZmVyLmFkdmFuY2VBdChpKS53aWR0aCgpIC0gbWlkZGxl
T2ZMYXN0R2x5cGggKyBtaWRkbGVPZk5leHRHbHlwaDsKKyAgICAgICAgbWFya0J1ZmZlci5hZGQo
Z2x5cGhCdWZmZXIuZ2x5cGhBdChpKSA/IG1hcmtHbHlwaCA6IHNwYWNlR2x5cGgsIG1hcmtGb250
RGF0YSwgYWR2YW5jZSk7CisgICAgICAgIG1pZGRsZU9mTGFzdEdseXBoID0gbWlkZGxlT2ZOZXh0
R2x5cGg7CisgICAgfQorICAgIG1hcmtCdWZmZXIuYWRkKGdseXBoQnVmZmVyLmdseXBoQXQoZ2x5
cGhCdWZmZXIuc2l6ZSgpIC0gMSkgPyBtYXJrR2x5cGggOiBzcGFjZUdseXBoLCBtYXJrRm9udERh
dGEsIDApOworCisgICAgZHJhd0dseXBoQnVmZmVyKGNvbnRleHQsIHJ1biwgbWFya0J1ZmZlciwg
c3RhcnRQb2ludCk7Cit9CisKK2Zsb2F0IEZvbnRDYXNjYWRlOjpmbG9hdFdpZHRoRm9yU2ltcGxl
VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiog
ZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKK3sKKyAg
ICBXaWR0aEl0ZXJhdG9yIGl0KHRoaXMsIHJ1biwgZmFsbGJhY2tGb250cywgZ2x5cGhPdmVyZmxv
dyk7CisgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CisgICAgaXQuYWR2YW5jZShydW4ubGVu
Z3RoKCksICh0eXBlc2V0dGluZ0ZlYXR1cmVzKCkgJiAoS2VybmluZyB8IExpZ2F0dXJlcykpID8g
JmdseXBoQnVmZmVyIDogMCk7CisKKyAgICBpZiAoZ2x5cGhPdmVyZmxvdykgeworICAgICAgICBn
bHlwaE92ZXJmbG93LT50b3AgPSBzdGQ6Om1heDxpbnQ+KGdseXBoT3ZlcmZsb3ctPnRvcCwgY2Vp
bGYoLWl0Lm1pbkdseXBoQm91bmRpbmdCb3hZKCkpIC0gKGdseXBoT3ZlcmZsb3ctPmNvbXB1dGVC
b3VuZHMgPyAwIDogZm9udE1ldHJpY3MoKS5hc2NlbnQoKSkpOworICAgICAgICBnbHlwaE92ZXJm
bG93LT5ib3R0b20gPSBzdGQ6Om1heDxpbnQ+KGdseXBoT3ZlcmZsb3ctPmJvdHRvbSwgY2VpbGYo
aXQubWF4R2x5cGhCb3VuZGluZ0JveFkoKSkgLSAoZ2x5cGhPdmVyZmxvdy0+Y29tcHV0ZUJvdW5k
cyA/IDAgOiBmb250TWV0cmljcygpLmRlc2NlbnQoKSkpOworICAgICAgICBnbHlwaE92ZXJmbG93
LT5sZWZ0ID0gY2VpbGYoaXQuZmlyc3RHbHlwaE92ZXJmbG93KCkpOworICAgICAgICBnbHlwaE92
ZXJmbG93LT5yaWdodCA9IGNlaWxmKGl0Lmxhc3RHbHlwaE92ZXJmbG93KCkpOworICAgIH0KKwor
ICAgIHJldHVybiBpdC5tX3J1bldpZHRoU29GYXI7Cit9CisKK3ZvaWQgRm9udENhc2NhZGU6OmFk
anVzdFNlbGVjdGlvblJlY3RGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0
UmVjdCYgc2VsZWN0aW9uUmVjdCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK3sKKyAgICBHbHlw
aEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKKyAgICBXaWR0aEl0ZXJhdG9yIGl0KHRoaXMsIHJ1bik7Cisg
ICAgaXQuYWR2YW5jZShmcm9tLCAmZ2x5cGhCdWZmZXIpOworICAgIGZsb2F0IGJlZm9yZVdpZHRo
ID0gaXQubV9ydW5XaWR0aFNvRmFyOworICAgIGl0LmFkdmFuY2UodG8sICZnbHlwaEJ1ZmZlcik7
CisgICAgZmxvYXQgYWZ0ZXJXaWR0aCA9IGl0Lm1fcnVuV2lkdGhTb0ZhcjsKKyAgICBmbG9hdCB0
b3RhbFdpZHRoID0gLTE7CisKKyAgICBpZiAocnVuLnJ0bCgpKSB7CisgICAgICAgIGl0LmFkdmFu
Y2UocnVuLmxlbmd0aCgpLCAmZ2x5cGhCdWZmZXIpOworICAgICAgICB0b3RhbFdpZHRoID0gaXQu
bV9ydW5XaWR0aFNvRmFyOworICAgICAgICBzZWxlY3Rpb25SZWN0Lm1vdmUodG90YWxXaWR0aCAt
IGFmdGVyV2lkdGgsIDApOworICAgIH0gZWxzZQorICAgICAgICBzZWxlY3Rpb25SZWN0Lm1vdmUo
YmVmb3JlV2lkdGgsIDApOworICAgIHNlbGVjdGlvblJlY3Quc2V0V2lkdGgoYWZ0ZXJXaWR0aCAt
IGJlZm9yZVdpZHRoKTsKK30KKworaW50IEZvbnRDYXNjYWRlOjpvZmZzZXRGb3JQb3NpdGlvbkZv
clNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBmbG9hdCB4LCBib29sIGluY2x1ZGVQYXJ0
aWFsR2x5cGhzKSBjb25zdAoreworICAgIGZsb2F0IGRlbHRhID0geDsKKworICAgIFdpZHRoSXRl
cmF0b3IgaXQodGhpcywgcnVuKTsKKyAgICBHbHlwaEJ1ZmZlciBsb2NhbEdseXBoQnVmZmVyOwor
ICAgIHVuc2lnbmVkIG9mZnNldDsKKyAgICBpZiAocnVuLnJ0bCgpKSB7CisgICAgICAgIGRlbHRh
IC09IGZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KHJ1bik7CisgICAgICAgIHdoaWxlICgxKSB7Cisg
ICAgICAgICAgICBvZmZzZXQgPSBpdC5tX2N1cnJlbnRDaGFyYWN0ZXI7CisgICAgICAgICAgICBm
bG9hdCB3OworICAgICAgICAgICAgaWYgKCFpdC5hZHZhbmNlT25lQ2hhcmFjdGVyKHcsIGxvY2Fs
R2x5cGhCdWZmZXIpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVsdGEg
Kz0gdzsKKyAgICAgICAgICAgIGlmIChpbmNsdWRlUGFydGlhbEdseXBocykgeworICAgICAgICAg
ICAgICAgIGlmIChkZWx0YSAtIHcgLyAyID49IDApCisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoZGVsdGEgPj0gMCkK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9IGVsc2UgeworICAgICAgICB3aGlsZSAoMSkgeworICAgICAgICAgICAgb2Zmc2V0ID0gaXQu
bV9jdXJyZW50Q2hhcmFjdGVyOworICAgICAgICAgICAgZmxvYXQgdzsKKyAgICAgICAgICAgIGlm
ICghaXQuYWR2YW5jZU9uZUNoYXJhY3Rlcih3LCBsb2NhbEdseXBoQnVmZmVyKSkKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlbHRhIC09IHc7CisgICAgICAgICAgICBpZiAo
aW5jbHVkZVBhcnRpYWxHbHlwaHMpIHsKKyAgICAgICAgICAgICAgICBpZiAoZGVsdGEgKyB3IC8g
MiA8PSAwKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgaWYgKGRlbHRhIDw9IDApCisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG9mZnNl
dDsKK30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
c2NhZGVGYXN0UGF0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udENhc2NhZGVGYXN0UGF0aC5jcHAJKHdvcmtpbmcgY29weSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRmFzdFBhdGguY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNCwxMCArMjQsMTAgQEAKICNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgog
CiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkZv
bnRHbHlwaHMuaCIKICNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgogI2luY2x1ZGUgIkxheW91dFJl
Y3QuaCIKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgogI2luY2x1ZGUgIlRleHRSdW4uaCIK
ICNpbmNsdWRlICJXaWR0aEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4K
QEAgLTcyLDcgKzcyLDcgQEAgaW50IEZvbnRDYXNjYWRlOjplbXBoYXNpc01hcmtBc2NlbnQoY29u
cwogICAgIGlmICghZ2V0RW1waGFzaXNNYXJrR2x5cGhEYXRhKG1hcmssIG1hcmtHbHlwaERhdGEp
KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBtYXJrRm9u
dERhdGEgPSBtYXJrR2x5cGhEYXRhLmZvbnREYXRhOworICAgIGNvbnN0IEZvbnQqIG1hcmtGb250
RGF0YSA9IG1hcmtHbHlwaERhdGEuZm9udDsKICAgICBBU1NFUlQobWFya0ZvbnREYXRhKTsKICAg
ICBpZiAoIW1hcmtGb250RGF0YSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC04Niw3ICs4Niw3IEBA
IGludCBGb250Q2FzY2FkZTo6ZW1waGFzaXNNYXJrRGVzY2VudChjb24KICAgICBpZiAoIWdldEVt
cGhhc2lzTWFya0dseXBoRGF0YShtYXJrLCBtYXJrR2x5cGhEYXRhKSkKICAgICAgICAgcmV0dXJu
IDA7CiAKLSAgICBjb25zdCBTaW1wbGVGb250RGF0YSogbWFya0ZvbnREYXRhID0gbWFya0dseXBo
RGF0YS5mb250RGF0YTsKKyAgICBjb25zdCBGb250KiBtYXJrRm9udERhdGEgPSBtYXJrR2x5cGhE
YXRhLmZvbnQ7CiAgICAgQVNTRVJUKG1hcmtGb250RGF0YSk7CiAgICAgaWYgKCFtYXJrRm9udERh
dGEpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMTAwLDcgKzEwMCw3IEBAIGludCBGb250Q2FzY2Fk
ZTo6ZW1waGFzaXNNYXJrSGVpZ2h0KGNvbnMKICAgICBpZiAoIWdldEVtcGhhc2lzTWFya0dseXBo
RGF0YShtYXJrLCBtYXJrR2x5cGhEYXRhKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBjb25z
dCBTaW1wbGVGb250RGF0YSogbWFya0ZvbnREYXRhID0gbWFya0dseXBoRGF0YS5mb250RGF0YTsK
KyAgICBjb25zdCBGb250KiBtYXJrRm9udERhdGEgPSBtYXJrR2x5cGhEYXRhLmZvbnQ7CiAgICAg
QVNTRVJUKG1hcmtGb250RGF0YSk7CiAgICAgaWYgKCFtYXJrRm9udERhdGEpCiAgICAgICAgIHJl
dHVybiAwOwpAQCAtMTcyLDcgKzE3Miw3IEBAIHZvaWQgRm9udENhc2NhZGU6OmRyYXdHbHlwaEJ1
ZmZlcihHcmFwaGkKICNlbmRpZgogCiAgICAgLy8gRHJhdyBlYWNoIGNvbnRpZ3VvdXMgcnVuIG9m
IGdseXBocyB0aGF0IHVzZSB0aGUgc2FtZSBmb250IGRhdGEuCi0gICAgY29uc3QgU2ltcGxlRm9u
dERhdGEqIGZvbnREYXRhID0gZ2x5cGhCdWZmZXIuZm9udERhdGFBdCgwKTsKKyAgICBjb25zdCBG
b250KiBmb250ID0gZ2x5cGhCdWZmZXIuZm9udEF0KDApOwogICAgIEZsb2F0U2l6ZSBvZmZzZXQg
PSBnbHlwaEJ1ZmZlci5vZmZzZXRBdCgwKTsKICAgICBGbG9hdFBvaW50IHN0YXJ0UG9pbnQocG9p
bnQueCgpLCBwb2ludC55KCkgLSBnbHlwaEJ1ZmZlci5pbml0aWFsQWR2YW5jZSgpLmhlaWdodCgp
KTsKICAgICBmbG9hdCBuZXh0WCA9IHN0YXJ0UG9pbnQueCgpICsgZ2x5cGhCdWZmZXIuYWR2YW5j
ZUF0KDApLndpZHRoKCk7CkBAIC0xODMsMTkgKzE4MywxOSBAQCB2b2lkIEZvbnRDYXNjYWRlOjpk
cmF3R2x5cGhCdWZmZXIoR3JhcGhpCiAgICAgVGV4dFJ1bjo6UmVuZGVyaW5nQ29udGV4dCogcmVu
ZGVyaW5nQ29udGV4dCA9IHJ1bi5yZW5kZXJpbmdDb250ZXh0KCk7CiAjZW5kaWYKICAgICB3aGls
ZSAobmV4dEdseXBoIDwgZ2x5cGhCdWZmZXIuc2l6ZSgpKSB7Ci0gICAgICAgIGNvbnN0IFNpbXBs
ZUZvbnREYXRhKiBuZXh0Rm9udERhdGEgPSBnbHlwaEJ1ZmZlci5mb250RGF0YUF0KG5leHRHbHlw
aCk7CisgICAgICAgIGNvbnN0IEZvbnQqIG5leHRGb250RGF0YSA9IGdseXBoQnVmZmVyLmZvbnRB
dChuZXh0R2x5cGgpOwogICAgICAgICBGbG9hdFNpemUgbmV4dE9mZnNldCA9IGdseXBoQnVmZmVy
Lm9mZnNldEF0KG5leHRHbHlwaCk7CiAKLSAgICAgICAgaWYgKG5leHRGb250RGF0YSAhPSBmb250
RGF0YSB8fCBuZXh0T2Zmc2V0ICE9IG9mZnNldCkgeworICAgICAgICBpZiAobmV4dEZvbnREYXRh
ICE9IGZvbnQgfHwgbmV4dE9mZnNldCAhPSBvZmZzZXQpIHsKICNpZiBFTkFCTEUoU1ZHX0ZPTlRT
KQotICAgICAgICAgICAgaWYgKHJlbmRlcmluZ0NvbnRleHQgJiYgZm9udERhdGEtPmlzU1ZHRm9u
dCgpKQotICAgICAgICAgICAgICAgIHJlbmRlcmluZ0NvbnRleHQtPmRyYXdTVkdHbHlwaHMoY29u
dGV4dCwgZm9udERhdGEsIGdseXBoQnVmZmVyLCBsYXN0RnJvbSwgbmV4dEdseXBoIC0gbGFzdEZy
b20sIHN0YXJ0UG9pbnQpOworICAgICAgICAgICAgaWYgKHJlbmRlcmluZ0NvbnRleHQgJiYgZm9u
dC0+aXNTVkdGb250KCkpCisgICAgICAgICAgICAgICAgcmVuZGVyaW5nQ29udGV4dC0+ZHJhd1NW
R0dseXBocyhjb250ZXh0LCBmb250LCBnbHlwaEJ1ZmZlciwgbGFzdEZyb20sIG5leHRHbHlwaCAt
IGxhc3RGcm9tLCBzdGFydFBvaW50KTsKICAgICAgICAgICAgIGVsc2UKICNlbmRpZgotICAgICAg
ICAgICAgICAgIGRyYXdHbHlwaHMoY29udGV4dCwgZm9udERhdGEsIGdseXBoQnVmZmVyLCBsYXN0
RnJvbSwgbmV4dEdseXBoIC0gbGFzdEZyb20sIHN0YXJ0UG9pbnQpOworICAgICAgICAgICAgICAg
IGRyYXdHbHlwaHMoY29udGV4dCwgZm9udCwgZ2x5cGhCdWZmZXIsIGxhc3RGcm9tLCBuZXh0R2x5
cGggLSBsYXN0RnJvbSwgc3RhcnRQb2ludCk7CiAKICAgICAgICAgICAgIGxhc3RGcm9tID0gbmV4
dEdseXBoOwotICAgICAgICAgICAgZm9udERhdGEgPSBuZXh0Rm9udERhdGE7CisgICAgICAgICAg
ICBmb250ID0gbmV4dEZvbnREYXRhOwogICAgICAgICAgICAgb2Zmc2V0ID0gbmV4dE9mZnNldDsK
ICAgICAgICAgICAgIHN0YXJ0UG9pbnQuc2V0WChuZXh0WCk7CiAgICAgICAgICAgICBzdGFydFBv
aW50LnNldFkobmV4dFkpOwpAQCAtMjA2LDI5ICsyMDYsMjkgQEAgdm9pZCBGb250Q2FzY2FkZTo6
ZHJhd0dseXBoQnVmZmVyKEdyYXBoaQogICAgIH0KIAogI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0g
ICAgaWYgKHJlbmRlcmluZ0NvbnRleHQgJiYgZm9udERhdGEtPmlzU1ZHRm9udCgpKQotICAgICAg
ICByZW5kZXJpbmdDb250ZXh0LT5kcmF3U1ZHR2x5cGhzKGNvbnRleHQsIGZvbnREYXRhLCBnbHlw
aEJ1ZmZlciwgbGFzdEZyb20sIG5leHRHbHlwaCAtIGxhc3RGcm9tLCBzdGFydFBvaW50KTsKKyAg
ICBpZiAocmVuZGVyaW5nQ29udGV4dCAmJiBmb250LT5pc1NWR0ZvbnQoKSkKKyAgICAgICAgcmVu
ZGVyaW5nQ29udGV4dC0+ZHJhd1NWR0dseXBocyhjb250ZXh0LCBmb250LCBnbHlwaEJ1ZmZlciwg
bGFzdEZyb20sIG5leHRHbHlwaCAtIGxhc3RGcm9tLCBzdGFydFBvaW50KTsKICAgICBlbHNlCiAj
ZW5kaWYKICAgICB7Ci0gICAgICAgIGRyYXdHbHlwaHMoY29udGV4dCwgZm9udERhdGEsIGdseXBo
QnVmZmVyLCBsYXN0RnJvbSwgbmV4dEdseXBoIC0gbGFzdEZyb20sIHN0YXJ0UG9pbnQpOworICAg
ICAgICBkcmF3R2x5cGhzKGNvbnRleHQsIGZvbnQsIGdseXBoQnVmZmVyLCBsYXN0RnJvbSwgbmV4
dEdseXBoIC0gbGFzdEZyb20sIHN0YXJ0UG9pbnQpOwogICAgICAgICBwb2ludC5zZXRYKG5leHRY
KTsKICAgICB9CiB9CiAKLWlubGluZSBzdGF0aWMgZmxvYXQgb2Zmc2V0VG9NaWRkbGVPZkdseXBo
KGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwgR2x5cGggZ2x5cGgpCitpbmxpbmUgc3Rh
dGljIGZsb2F0IG9mZnNldFRvTWlkZGxlT2ZHbHlwaChjb25zdCBGb250KiBmb250LCBHbHlwaCBn
bHlwaCkKIHsKLSAgICBpZiAoZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkg
PT0gSG9yaXpvbnRhbCkgewotICAgICAgICBGbG9hdFJlY3QgYm91bmRzID0gZm9udERhdGEtPmJv
dW5kc0ZvckdseXBoKGdseXBoKTsKKyAgICBpZiAoZm9udC0+cGxhdGZvcm1EYXRhKCkub3JpZW50
YXRpb24oKSA9PSBIb3Jpem9udGFsKSB7CisgICAgICAgIEZsb2F0UmVjdCBib3VuZHMgPSBmb250
LT5ib3VuZHNGb3JHbHlwaChnbHlwaCk7CiAgICAgICAgIHJldHVybiBib3VuZHMueCgpICsgYm91
bmRzLndpZHRoKCkgLyAyOwogICAgIH0KICAgICAvLyBGSVhNRTogVXNlIGdseXBoIGJvdW5kcyBv
bmNlIHRoZXkgbWFrZSBzZW5zZSBmb3IgdmVydGljYWwgZm9udHMuCi0gICAgcmV0dXJuIGZvbnRE
YXRhLT53aWR0aEZvckdseXBoKGdseXBoKSAvIDI7CisgICAgcmV0dXJuIGZvbnQtPndpZHRoRm9y
R2x5cGgoZ2x5cGgpIC8gMjsKIH0KIAogaW5saW5lIHN0YXRpYyBmbG9hdCBvZmZzZXRUb01pZGRs
ZU9mR2x5cGhBdEluZGV4KGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgc2l6ZV90IGkp
CiB7Ci0gICAgcmV0dXJuIG9mZnNldFRvTWlkZGxlT2ZHbHlwaChnbHlwaEJ1ZmZlci5mb250RGF0
YUF0KGkpLCBnbHlwaEJ1ZmZlci5nbHlwaEF0KGkpKTsKKyAgICByZXR1cm4gb2Zmc2V0VG9NaWRk
bGVPZkdseXBoKGdseXBoQnVmZmVyLmZvbnRBdChpKSwgZ2x5cGhCdWZmZXIuZ2x5cGhBdChpKSk7
CiB9CiAKIHZvaWQgRm9udENhc2NhZGU6OmRyYXdFbXBoYXNpc01hcmtzKEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhC
dWZmZXIsIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQp
IGNvbnN0CkBAIC0yMzcsNyArMjM3LDcgQEAgdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0VtcGhhc2lz
TWFya3MoR3JhcAogICAgIGlmICghZ2V0RW1waGFzaXNNYXJrR2x5cGhEYXRhKG1hcmssIG1hcmtH
bHlwaERhdGEpKQogICAgICAgICByZXR1cm47CiAKLSAgICBjb25zdCBTaW1wbGVGb250RGF0YSog
bWFya0ZvbnREYXRhID0gbWFya0dseXBoRGF0YS5mb250RGF0YTsKKyAgICBjb25zdCBGb250KiBt
YXJrRm9udERhdGEgPSBtYXJrR2x5cGhEYXRhLmZvbnQ7CiAgICAgQVNTRVJUKG1hcmtGb250RGF0
YSk7CiAgICAgaWYgKCFtYXJrRm9udERhdGEpCiAgICAgICAgIHJldHVybjsKQEAgLTI2MCw3ICsy
NjAsNyBAQCB2b2lkIEZvbnRDYXNjYWRlOjpkcmF3RW1waGFzaXNNYXJrcyhHcmFwCiAgICAgZHJh
d0dseXBoQnVmZmVyKGNvbnRleHQsIHJ1biwgbWFya0J1ZmZlciwgc3RhcnRQb2ludCk7CiB9CiAK
LWZsb2F0IEZvbnRDYXNjYWRlOjpmbG9hdFdpZHRoRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVu
JiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cywgR2x5
cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKK2Zsb2F0IEZvbnRDYXNjYWRlOjpmbG9h
dFdpZHRoRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgRm9u
dCo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAog
ewogICAgIFdpZHRoSXRlcmF0b3IgaXQodGhpcywgcnVuLCBmYWxsYmFja0ZvbnRzLCBnbHlwaE92
ZXJmbG93KTsKICAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYXN0UGF0aC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhc3RQYXRoLmNwcAkocmV2aXNpb24g
MTc4NTE1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhc3RQYXRo
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwzNDEgKzAsMCBAQAotLyoqCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDMsIDIwMDYsIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDA4IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiRm9udENhc2NhZGUuaCIKLQotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1
ZGUgIkZvbnRHbHlwaHMuaCIKLSNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgotI2luY2x1ZGUgIkxh
eW91dFJlY3QuaCIKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgotI2luY2x1ZGUgIlRleHRS
dW4uaCIKLSNpbmNsdWRlICJXaWR0aEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSA8d3RmL01haW5UaHJl
YWQuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi91bmljb2Rl
L0NoYXJhY3Rlck5hbWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXVEY7Ci11c2luZyBuYW1lc3Bh
Y2UgVW5pY29kZTsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBGSVhNRTogVGhpcyBmdW5j
dGlvbiBtYXkgbm90IHdvcmsgaWYgdGhlIGVtcGhhc2lzIG1hcmsgdXNlcyBhIGNvbXBsZXggc2Ny
aXB0LCBidXQgbm9uZSBvZiB0aGUKLS8vIHN0YW5kYXJkIGVtcGhhc2lzIG1hcmtzIGRvIHNvLgot
Ym9vbCBGb250Q2FzY2FkZTo6Z2V0RW1waGFzaXNNYXJrR2x5cGhEYXRhKGNvbnN0IEF0b21pY1N0
cmluZyYgbWFyaywgR2x5cGhEYXRhJiBnbHlwaERhdGEpIGNvbnN0Ci17Ci0gICAgaWYgKG1hcmsu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBVQ2hhcjMyIGNoYXJhY3Rl
ciA9IG1hcmtbMF07Ci0KLSAgICBpZiAoVTE2X0lTX1NVUlJPR0FURShjaGFyYWN0ZXIpKSB7Ci0g
ICAgICAgIGlmICghVTE2X0lTX1NVUlJPR0FURV9MRUFEKGNoYXJhY3RlcikpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKG1hcmsubGVuZ3RoKCkgPCAyKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIFVDaGFyIGxvdyA9IG1hcmtbMV07Ci0gICAg
ICAgIGlmICghVTE2X0lTX1RSQUlMKGxvdykpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICAgICAgY2hhcmFjdGVyID0gVTE2X0dFVF9TVVBQTEVNRU5UQVJZKGNoYXJhY3RlciwgbG93
KTsKLSAgICB9Ci0KLSAgICBnbHlwaERhdGEgPSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFj
dGVyLCBmYWxzZSwgRW1waGFzaXNNYXJrVmFyaWFudCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWludCBGb250Q2FzY2FkZTo6ZW1waGFzaXNNYXJrQXNjZW50KGNvbnN0IEF0b21pY1N0cmluZyYg
bWFyaykgY29uc3QKLXsKLSAgICBHbHlwaERhdGEgbWFya0dseXBoRGF0YTsKLSAgICBpZiAoIWdl
dEVtcGhhc2lzTWFya0dseXBoRGF0YShtYXJrLCBtYXJrR2x5cGhEYXRhKSkKLSAgICAgICAgcmV0
dXJuIDA7Ci0KLSAgICBjb25zdCBTaW1wbGVGb250RGF0YSogbWFya0ZvbnREYXRhID0gbWFya0ds
eXBoRGF0YS5mb250RGF0YTsKLSAgICBBU1NFUlQobWFya0ZvbnREYXRhKTsKLSAgICBpZiAoIW1h
cmtGb250RGF0YSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gbWFya0ZvbnREYXRh
LT5mb250TWV0cmljcygpLmFzY2VudCgpOwotfQotCi1pbnQgRm9udENhc2NhZGU6OmVtcGhhc2lz
TWFya0Rlc2NlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrKSBjb25zdAotewotICAgIEdseXBo
RGF0YSBtYXJrR2x5cGhEYXRhOwotICAgIGlmICghZ2V0RW1waGFzaXNNYXJrR2x5cGhEYXRhKG1h
cmssIG1hcmtHbHlwaERhdGEpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGNvbnN0IFNpbXBs
ZUZvbnREYXRhKiBtYXJrRm9udERhdGEgPSBtYXJrR2x5cGhEYXRhLmZvbnREYXRhOwotICAgIEFT
U0VSVChtYXJrRm9udERhdGEpOwotICAgIGlmICghbWFya0ZvbnREYXRhKQotICAgICAgICByZXR1
cm4gMDsKLQotICAgIHJldHVybiBtYXJrRm9udERhdGEtPmZvbnRNZXRyaWNzKCkuZGVzY2VudCgp
OwotfQotCi1pbnQgRm9udENhc2NhZGU6OmVtcGhhc2lzTWFya0hlaWdodChjb25zdCBBdG9taWNT
dHJpbmcmIG1hcmspIGNvbnN0Ci17Ci0gICAgR2x5cGhEYXRhIG1hcmtHbHlwaERhdGE7Ci0gICAg
aWYgKCFnZXRFbXBoYXNpc01hcmtHbHlwaERhdGEobWFyaywgbWFya0dseXBoRGF0YSkpCi0gICAg
ICAgIHJldHVybiAwOwotCi0gICAgY29uc3QgU2ltcGxlRm9udERhdGEqIG1hcmtGb250RGF0YSA9
IG1hcmtHbHlwaERhdGEuZm9udERhdGE7Ci0gICAgQVNTRVJUKG1hcmtGb250RGF0YSk7Ci0gICAg
aWYgKCFtYXJrRm9udERhdGEpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIG1hcmtG
b250RGF0YS0+Zm9udE1ldHJpY3MoKS5oZWlnaHQoKTsKLX0KLQotZmxvYXQgRm9udENhc2NhZGU6
OmdldEdseXBoc0FuZEFkdmFuY2VzRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGlu
dCBmcm9tLCBpbnQgdG8sIEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgRm9yVGV4dEVtcGhhc2lz
T3JOb3QgZm9yVGV4dEVtcGhhc2lzKSBjb25zdAotewotICAgIGZsb2F0IGluaXRpYWxBZHZhbmNl
OwotCi0gICAgV2lkdGhJdGVyYXRvciBpdCh0aGlzLCBydW4sIDAsIGZhbHNlLCBmb3JUZXh0RW1w
aGFzaXMpOwotICAgIC8vIEZJWE1FOiBVc2luZyBzZXBhcmF0ZSBnbHlwaCBidWZmZXJzIGZvciB0
aGUgcHJlZml4IGFuZCB0aGUgc3VmZml4IGlzIGluY29ycmVjdCB3aGVuIGtlcm5pbmcgb3IKLSAg
ICAvLyBsaWdhdHVyZXMgYXJlIGVuYWJsZWQuCi0gICAgR2x5cGhCdWZmZXIgbG9jYWxHbHlwaEJ1
ZmZlcjsKLSAgICBpdC5hZHZhbmNlKGZyb20sICZsb2NhbEdseXBoQnVmZmVyKTsKLSAgICBmbG9h
dCBiZWZvcmVXaWR0aCA9IGl0Lm1fcnVuV2lkdGhTb0ZhcjsKLSAgICBpdC5hZHZhbmNlKHRvLCAm
Z2x5cGhCdWZmZXIpOwotCi0gICAgaWYgKGdseXBoQnVmZmVyLmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuIDA7Ci0KLSAgICBmbG9hdCBhZnRlcldpZHRoID0gaXQubV9ydW5XaWR0aFNvRmFyOwot
Ci0gICAgaWYgKHJ1bi5ydGwoKSkgewotICAgICAgICBmbG9hdCBmaW5hbFJvdW5kaW5nV2lkdGgg
PSBpdC5tX2ZpbmFsUm91bmRpbmdXaWR0aDsKLSAgICAgICAgaXQuYWR2YW5jZShydW4ubGVuZ3Ro
KCksICZsb2NhbEdseXBoQnVmZmVyKTsKLSAgICAgICAgaW5pdGlhbEFkdmFuY2UgPSBmaW5hbFJv
dW5kaW5nV2lkdGggKyBpdC5tX3J1bldpZHRoU29GYXIgLSBhZnRlcldpZHRoOwotICAgIH0gZWxz
ZQotICAgICAgICBpbml0aWFsQWR2YW5jZSA9IGJlZm9yZVdpZHRoOwotCi0gICAgaWYgKHJ1bi5y
dGwoKSkKLSAgICAgICAgZ2x5cGhCdWZmZXIucmV2ZXJzZSgwLCBnbHlwaEJ1ZmZlci5zaXplKCkp
OwotCi0gICAgcmV0dXJuIGluaXRpYWxBZHZhbmNlOwotfQotCi1mbG9hdCBGb250Q2FzY2FkZTo6
ZHJhd1NpbXBsZVRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBy
dW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAotewot
ICAgIC8vIFRoaXMgZ2x5cGggYnVmZmVyIGhvbGRzIG91ciBnbHlwaHMrYWR2YW5jZXMrZm9udCBk
YXRhIGZvciBlYWNoIGdseXBoLgotICAgIEdseXBoQnVmZmVyIGdseXBoQnVmZmVyOwotCi0gICAg
ZmxvYXQgc3RhcnRYID0gcG9pbnQueCgpICsgZ2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JTaW1wbGVU
ZXh0KHJ1biwgZnJvbSwgdG8sIGdseXBoQnVmZmVyKTsKLQotICAgIGlmIChnbHlwaEJ1ZmZlci5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgRmxvYXRQb2ludCBzdGFydFBvaW50
KHN0YXJ0WCwgcG9pbnQueSgpKTsKLSAgICBkcmF3R2x5cGhCdWZmZXIoY29udGV4dCwgcnVuLCBn
bHlwaEJ1ZmZlciwgc3RhcnRQb2ludCk7Ci0KLSAgICByZXR1cm4gc3RhcnRQb2ludC54KCkgLSBz
dGFydFg7Ci19Ci0KLXZvaWQgRm9udENhc2NhZGU6OmRyYXdFbXBoYXNpc01hcmtzRm9yU2ltcGxl
VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3Qg
QXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGlu
dCB0bykgY29uc3QKLXsKLSAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKLSAgICBmbG9hdCBp
bml0aWFsQWR2YW5jZSA9IGdldEdseXBoc0FuZEFkdmFuY2VzRm9yU2ltcGxlVGV4dChydW4sIGZy
b20sIHRvLCBnbHlwaEJ1ZmZlciwgRm9yVGV4dEVtcGhhc2lzKTsKLQotICAgIGlmIChnbHlwaEJ1
ZmZlci5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGRyYXdFbXBoYXNpc01hcmtz
KGNvbnRleHQsIHJ1biwgZ2x5cGhCdWZmZXIsIG1hcmssIEZsb2F0UG9pbnQocG9pbnQueCgpICsg
aW5pdGlhbEFkdmFuY2UsIHBvaW50LnkoKSkpOwotfQotCi12b2lkIEZvbnRDYXNjYWRlOjpkcmF3
R2x5cGhCdWZmZXIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4s
IGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0
Ci17Ci0jaWYgIUVOQUJMRShTVkdfRk9OVFMpCi0gICAgVU5VU0VEX1BBUkFNKHJ1bik7Ci0jZW5k
aWYKLQotICAgIC8vIERyYXcgZWFjaCBjb250aWd1b3VzIHJ1biBvZiBnbHlwaHMgdGhhdCB1c2Ug
dGhlIHNhbWUgZm9udCBkYXRhLgotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSA9
IGdseXBoQnVmZmVyLmZvbnREYXRhQXQoMCk7Ci0gICAgRmxvYXRTaXplIG9mZnNldCA9IGdseXBo
QnVmZmVyLm9mZnNldEF0KDApOwotICAgIEZsb2F0UG9pbnQgc3RhcnRQb2ludChwb2ludC54KCks
IHBvaW50LnkoKSAtIGdseXBoQnVmZmVyLmluaXRpYWxBZHZhbmNlKCkuaGVpZ2h0KCkpOwotICAg
IGZsb2F0IG5leHRYID0gc3RhcnRQb2ludC54KCkgKyBnbHlwaEJ1ZmZlci5hZHZhbmNlQXQoMCku
d2lkdGgoKTsKLSAgICBmbG9hdCBuZXh0WSA9IHN0YXJ0UG9pbnQueSgpICsgZ2x5cGhCdWZmZXIu
YWR2YW5jZUF0KDApLmhlaWdodCgpOwotICAgIGludCBsYXN0RnJvbSA9IDA7Ci0gICAgaW50IG5l
eHRHbHlwaCA9IDE7Ci0jaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICBUZXh0UnVuOjpSZW5kZXJp
bmdDb250ZXh0KiByZW5kZXJpbmdDb250ZXh0ID0gcnVuLnJlbmRlcmluZ0NvbnRleHQoKTsKLSNl
bmRpZgotICAgIHdoaWxlIChuZXh0R2x5cGggPCBnbHlwaEJ1ZmZlci5zaXplKCkpIHsKLSAgICAg
ICAgY29uc3QgU2ltcGxlRm9udERhdGEqIG5leHRGb250RGF0YSA9IGdseXBoQnVmZmVyLmZvbnRE
YXRhQXQobmV4dEdseXBoKTsKLSAgICAgICAgRmxvYXRTaXplIG5leHRPZmZzZXQgPSBnbHlwaEJ1
ZmZlci5vZmZzZXRBdChuZXh0R2x5cGgpOwotCi0gICAgICAgIGlmIChuZXh0Rm9udERhdGEgIT0g
Zm9udERhdGEgfHwgbmV4dE9mZnNldCAhPSBvZmZzZXQpIHsKLSNpZiBFTkFCTEUoU1ZHX0ZPTlRT
KQotICAgICAgICAgICAgaWYgKHJlbmRlcmluZ0NvbnRleHQgJiYgZm9udERhdGEtPmlzU1ZHRm9u
dCgpKQotICAgICAgICAgICAgICAgIHJlbmRlcmluZ0NvbnRleHQtPmRyYXdTVkdHbHlwaHMoY29u
dGV4dCwgZm9udERhdGEsIGdseXBoQnVmZmVyLCBsYXN0RnJvbSwgbmV4dEdseXBoIC0gbGFzdEZy
b20sIHN0YXJ0UG9pbnQpOwotICAgICAgICAgICAgZWxzZQotI2VuZGlmCi0gICAgICAgICAgICAg
ICAgZHJhd0dseXBocyhjb250ZXh0LCBmb250RGF0YSwgZ2x5cGhCdWZmZXIsIGxhc3RGcm9tLCBu
ZXh0R2x5cGggLSBsYXN0RnJvbSwgc3RhcnRQb2ludCk7Ci0KLSAgICAgICAgICAgIGxhc3RGcm9t
ID0gbmV4dEdseXBoOwotICAgICAgICAgICAgZm9udERhdGEgPSBuZXh0Rm9udERhdGE7Ci0gICAg
ICAgICAgICBvZmZzZXQgPSBuZXh0T2Zmc2V0OwotICAgICAgICAgICAgc3RhcnRQb2ludC5zZXRY
KG5leHRYKTsKLSAgICAgICAgICAgIHN0YXJ0UG9pbnQuc2V0WShuZXh0WSk7Ci0gICAgICAgIH0K
LSAgICAgICAgbmV4dFggKz0gZ2x5cGhCdWZmZXIuYWR2YW5jZUF0KG5leHRHbHlwaCkud2lkdGgo
KTsKLSAgICAgICAgbmV4dFkgKz0gZ2x5cGhCdWZmZXIuYWR2YW5jZUF0KG5leHRHbHlwaCkuaGVp
Z2h0KCk7Ci0gICAgICAgIG5leHRHbHlwaCsrOwotICAgIH0KLQotI2lmIEVOQUJMRShTVkdfRk9O
VFMpCi0gICAgaWYgKHJlbmRlcmluZ0NvbnRleHQgJiYgZm9udERhdGEtPmlzU1ZHRm9udCgpKQot
ICAgICAgICByZW5kZXJpbmdDb250ZXh0LT5kcmF3U1ZHR2x5cGhzKGNvbnRleHQsIGZvbnREYXRh
LCBnbHlwaEJ1ZmZlciwgbGFzdEZyb20sIG5leHRHbHlwaCAtIGxhc3RGcm9tLCBzdGFydFBvaW50
KTsKLSAgICBlbHNlCi0jZW5kaWYKLSAgICB7Ci0gICAgICAgIGRyYXdHbHlwaHMoY29udGV4dCwg
Zm9udERhdGEsIGdseXBoQnVmZmVyLCBsYXN0RnJvbSwgbmV4dEdseXBoIC0gbGFzdEZyb20sIHN0
YXJ0UG9pbnQpOwotICAgICAgICBwb2ludC5zZXRYKG5leHRYKTsKLSAgICB9Ci19Ci0KLWlubGlu
ZSBzdGF0aWMgZmxvYXQgb2Zmc2V0VG9NaWRkbGVPZkdseXBoKGNvbnN0IFNpbXBsZUZvbnREYXRh
KiBmb250RGF0YSwgR2x5cGggZ2x5cGgpCi17Ci0gICAgaWYgKGZvbnREYXRhLT5wbGF0Zm9ybURh
dGEoKS5vcmllbnRhdGlvbigpID09IEhvcml6b250YWwpIHsKLSAgICAgICAgRmxvYXRSZWN0IGJv
dW5kcyA9IGZvbnREYXRhLT5ib3VuZHNGb3JHbHlwaChnbHlwaCk7Ci0gICAgICAgIHJldHVybiBi
b3VuZHMueCgpICsgYm91bmRzLndpZHRoKCkgLyAyOwotICAgIH0KLSAgICAvLyBGSVhNRTogVXNl
IGdseXBoIGJvdW5kcyBvbmNlIHRoZXkgbWFrZSBzZW5zZSBmb3IgdmVydGljYWwgZm9udHMuCi0g
ICAgcmV0dXJuIGZvbnREYXRhLT53aWR0aEZvckdseXBoKGdseXBoKSAvIDI7Ci19Ci0KLWlubGlu
ZSBzdGF0aWMgZmxvYXQgb2Zmc2V0VG9NaWRkbGVPZkdseXBoQXRJbmRleChjb25zdCBHbHlwaEJ1
ZmZlciYgZ2x5cGhCdWZmZXIsIHNpemVfdCBpKQotewotICAgIHJldHVybiBvZmZzZXRUb01pZGRs
ZU9mR2x5cGgoZ2x5cGhCdWZmZXIuZm9udERhdGFBdChpKSwgZ2x5cGhCdWZmZXIuZ2x5cGhBdChp
KSk7Ci19Ci0KLXZvaWQgRm9udENhc2NhZGU6OmRyYXdFbXBoYXNpc01hcmtzKEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5
cGhCdWZmZXIsIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQpIGNvbnN0Ci17Ci0gICAgR2x5cGhEYXRhIG1hcmtHbHlwaERhdGE7Ci0gICAgaWYgKCFnZXRF
bXBoYXNpc01hcmtHbHlwaERhdGEobWFyaywgbWFya0dseXBoRGF0YSkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBtYXJrRm9udERhdGEgPSBtYXJrR2x5cGhE
YXRhLmZvbnREYXRhOwotICAgIEFTU0VSVChtYXJrRm9udERhdGEpOwotICAgIGlmICghbWFya0Zv
bnREYXRhKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHbHlwaCBtYXJrR2x5cGggPSBtYXJrR2x5
cGhEYXRhLmdseXBoOwotICAgIEdseXBoIHNwYWNlR2x5cGggPSBtYXJrRm9udERhdGEtPnNwYWNl
R2x5cGgoKTsKLQotICAgIGZsb2F0IG1pZGRsZU9mTGFzdEdseXBoID0gb2Zmc2V0VG9NaWRkbGVP
ZkdseXBoQXRJbmRleChnbHlwaEJ1ZmZlciwgMCk7Ci0gICAgRmxvYXRQb2ludCBzdGFydFBvaW50
KHBvaW50LngoKSArIG1pZGRsZU9mTGFzdEdseXBoIC0gb2Zmc2V0VG9NaWRkbGVPZkdseXBoKG1h
cmtGb250RGF0YSwgbWFya0dseXBoKSwgcG9pbnQueSgpKTsKLQotICAgIEdseXBoQnVmZmVyIG1h
cmtCdWZmZXI7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgKyAxIDwgZ2x5cGhCdWZmZXIuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgZmxvYXQgbWlkZGxlT2ZOZXh0R2x5cGggPSBvZmZzZXRUb01pZGRs
ZU9mR2x5cGhBdEluZGV4KGdseXBoQnVmZmVyLCBpICsgMSk7Ci0gICAgICAgIGZsb2F0IGFkdmFu
Y2UgPSBnbHlwaEJ1ZmZlci5hZHZhbmNlQXQoaSkud2lkdGgoKSAtIG1pZGRsZU9mTGFzdEdseXBo
ICsgbWlkZGxlT2ZOZXh0R2x5cGg7Ci0gICAgICAgIG1hcmtCdWZmZXIuYWRkKGdseXBoQnVmZmVy
LmdseXBoQXQoaSkgPyBtYXJrR2x5cGggOiBzcGFjZUdseXBoLCBtYXJrRm9udERhdGEsIGFkdmFu
Y2UpOwotICAgICAgICBtaWRkbGVPZkxhc3RHbHlwaCA9IG1pZGRsZU9mTmV4dEdseXBoOwotICAg
IH0KLSAgICBtYXJrQnVmZmVyLmFkZChnbHlwaEJ1ZmZlci5nbHlwaEF0KGdseXBoQnVmZmVyLnNp
emUoKSAtIDEpID8gbWFya0dseXBoIDogc3BhY2VHbHlwaCwgbWFya0ZvbnREYXRhLCAwKTsKLQot
ICAgIGRyYXdHbHlwaEJ1ZmZlcihjb250ZXh0LCBydW4sIG1hcmtCdWZmZXIsIHN0YXJ0UG9pbnQp
OwotfQotCi1mbG9hdCBGb250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZvclNpbXBsZVRleHQoY29uc3Qg
VGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9u
dHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0Ci17Ci0gICAgV2lkdGhJdGVy
YXRvciBpdCh0aGlzLCBydW4sIGZhbGxiYWNrRm9udHMsIGdseXBoT3ZlcmZsb3cpOwotICAgIEds
eXBoQnVmZmVyIGdseXBoQnVmZmVyOwotICAgIGl0LmFkdmFuY2UocnVuLmxlbmd0aCgpLCAodHlw
ZXNldHRpbmdGZWF0dXJlcygpICYgKEtlcm5pbmcgfCBMaWdhdHVyZXMpKSA/ICZnbHlwaEJ1ZmZl
ciA6IDApOwotCi0gICAgaWYgKGdseXBoT3ZlcmZsb3cpIHsKLSAgICAgICAgZ2x5cGhPdmVyZmxv
dy0+dG9wID0gc3RkOjptYXg8aW50PihnbHlwaE92ZXJmbG93LT50b3AsIGNlaWxmKC1pdC5taW5H
bHlwaEJvdW5kaW5nQm94WSgpKSAtIChnbHlwaE92ZXJmbG93LT5jb21wdXRlQm91bmRzID8gMCA6
IGZvbnRNZXRyaWNzKCkuYXNjZW50KCkpKTsKLSAgICAgICAgZ2x5cGhPdmVyZmxvdy0+Ym90dG9t
ID0gc3RkOjptYXg8aW50PihnbHlwaE92ZXJmbG93LT5ib3R0b20sIGNlaWxmKGl0Lm1heEdseXBo
Qm91bmRpbmdCb3hZKCkpIC0gKGdseXBoT3ZlcmZsb3ctPmNvbXB1dGVCb3VuZHMgPyAwIDogZm9u
dE1ldHJpY3MoKS5kZXNjZW50KCkpKTsKLSAgICAgICAgZ2x5cGhPdmVyZmxvdy0+bGVmdCA9IGNl
aWxmKGl0LmZpcnN0R2x5cGhPdmVyZmxvdygpKTsKLSAgICAgICAgZ2x5cGhPdmVyZmxvdy0+cmln
aHQgPSBjZWlsZihpdC5sYXN0R2x5cGhPdmVyZmxvdygpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
aXQubV9ydW5XaWR0aFNvRmFyOwotfQotCi12b2lkIEZvbnRDYXNjYWRlOjphZGp1c3RTZWxlY3Rp
b25SZWN0Rm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIExheW91dFJlY3QmIHNlbGVj
dGlvblJlY3QsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Ci17Ci0gICAgR2x5cGhCdWZmZXIgZ2x5
cGhCdWZmZXI7Ci0gICAgV2lkdGhJdGVyYXRvciBpdCh0aGlzLCBydW4pOwotICAgIGl0LmFkdmFu
Y2UoZnJvbSwgJmdseXBoQnVmZmVyKTsKLSAgICBmbG9hdCBiZWZvcmVXaWR0aCA9IGl0Lm1fcnVu
V2lkdGhTb0ZhcjsKLSAgICBpdC5hZHZhbmNlKHRvLCAmZ2x5cGhCdWZmZXIpOwotICAgIGZsb2F0
IGFmdGVyV2lkdGggPSBpdC5tX3J1bldpZHRoU29GYXI7Ci0gICAgZmxvYXQgdG90YWxXaWR0aCA9
IC0xOwotCi0gICAgaWYgKHJ1bi5ydGwoKSkgewotICAgICAgICBpdC5hZHZhbmNlKHJ1bi5sZW5n
dGgoKSwgJmdseXBoQnVmZmVyKTsKLSAgICAgICAgdG90YWxXaWR0aCA9IGl0Lm1fcnVuV2lkdGhT
b0ZhcjsKLSAgICAgICAgc2VsZWN0aW9uUmVjdC5tb3ZlKHRvdGFsV2lkdGggLSBhZnRlcldpZHRo
LCAwKTsKLSAgICB9IGVsc2UKLSAgICAgICAgc2VsZWN0aW9uUmVjdC5tb3ZlKGJlZm9yZVdpZHRo
LCAwKTsKLSAgICBzZWxlY3Rpb25SZWN0LnNldFdpZHRoKGFmdGVyV2lkdGggLSBiZWZvcmVXaWR0
aCk7Ci19Ci0KLWludCBGb250Q2FzY2FkZTo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JTaW1wbGVUZXh0
KGNvbnN0IFRleHRSdW4mIHJ1biwgZmxvYXQgeCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykg
Y29uc3QKLXsKLSAgICBmbG9hdCBkZWx0YSA9IHg7Ci0KLSAgICBXaWR0aEl0ZXJhdG9yIGl0KHRo
aXMsIHJ1bik7Ci0gICAgR2x5cGhCdWZmZXIgbG9jYWxHbHlwaEJ1ZmZlcjsKLSAgICB1bnNpZ25l
ZCBvZmZzZXQ7Ci0gICAgaWYgKHJ1bi5ydGwoKSkgewotICAgICAgICBkZWx0YSAtPSBmbG9hdFdp
ZHRoRm9yU2ltcGxlVGV4dChydW4pOwotICAgICAgICB3aGlsZSAoMSkgewotICAgICAgICAgICAg
b2Zmc2V0ID0gaXQubV9jdXJyZW50Q2hhcmFjdGVyOwotICAgICAgICAgICAgZmxvYXQgdzsKLSAg
ICAgICAgICAgIGlmICghaXQuYWR2YW5jZU9uZUNoYXJhY3Rlcih3LCBsb2NhbEdseXBoQnVmZmVy
KSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlbHRhICs9IHc7Ci0gICAg
ICAgICAgICBpZiAoaW5jbHVkZVBhcnRpYWxHbHlwaHMpIHsKLSAgICAgICAgICAgICAgICBpZiAo
ZGVsdGEgLSB3IC8gMiA+PSAwKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKGRlbHRhID49IDApCi0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgd2hpbGUgKDEpIHsKLSAgICAgICAgICAgIG9mZnNldCA9IGl0Lm1fY3VycmVudENo
YXJhY3RlcjsKLSAgICAgICAgICAgIGZsb2F0IHc7Ci0gICAgICAgICAgICBpZiAoIWl0LmFkdmFu
Y2VPbmVDaGFyYWN0ZXIodywgbG9jYWxHbHlwaEJ1ZmZlcikpCi0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBkZWx0YSAtPSB3OwotICAgICAgICAgICAgaWYgKGluY2x1ZGVQYXJ0
aWFsR2x5cGhzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGRlbHRhICsgdyAvIDIgPD0gMCkKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgIGlmIChkZWx0YSA8PSAwKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBvZmZzZXQ7Ci19Ci0KLX0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRHbHlwaHMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRHbHlwaHMu
Y3BwCShyZXZpc2lvbiAxNzg1MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250R2x5cGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIAogRm9udEdseXBoczo6Rm9udEdseXBocyhQYXNzUmVmUHRyPEZvbnRT
ZWxlY3Rvcj4gZm9udFNlbGVjdG9yKQotICAgIDogbV9jYWNoZWRQcmltYXJ5U2ltcGxlRm9udERh
dGEoMCkKKyAgICA6IG1fY2FjaGVkUHJpbWFyeUZvbnQoMCkKICAgICAsIG1fZm9udFNlbGVjdG9y
KGZvbnRTZWxlY3RvcikKICAgICAsIG1fZm9udFNlbGVjdG9yVmVyc2lvbihtX2ZvbnRTZWxlY3Rv
ciA/IG1fZm9udFNlbGVjdG9yLT52ZXJzaW9uKCkgOiAwKQogICAgICwgbV9nZW5lcmF0aW9uKGZv
bnRDYWNoZSgpLmdlbmVyYXRpb24oKSkKQEAgLTQ1LDcgKzQ1LDcgQEAgRm9udEdseXBoczo6Rm9u
dEdseXBocyhQYXNzUmVmUHRyPEZvbnRTZQogfQogCiBGb250R2x5cGhzOjpGb250R2x5cGhzKGNv
bnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSkKLSAgICA6IG1fY2FjaGVkUHJpbWFy
eVNpbXBsZUZvbnREYXRhKDApCisgICAgOiBtX2NhY2hlZFByaW1hcnlGb250KDApCiAgICAgLCBt
X2ZvbnRTZWxlY3RvcigwKQogICAgICwgbV9mb250U2VsZWN0b3JWZXJzaW9uKDApCiAgICAgLCBt
X2dlbmVyYXRpb24oZm9udENhY2hlKCkuZ2VuZXJhdGlvbigpKQpAQCAtNjMsNyArNjMsNyBAQCB2
b2lkIEZvbnRHbHlwaHM6OmRldGVybWluZVBpdGNoKGNvbnN0IEZvCiAgICAgYXV0byYgcHJpbWFy
eVJhbmdlcyA9IHJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGRlc2NyaXB0aW9uLCAwKTsKICAgICB1
bnNpZ25lZCBudW1SYW5nZXMgPSBwcmltYXJ5UmFuZ2VzLnNpemUoKTsKICAgICBpZiAobnVtUmFu
Z2VzID09IDEpCi0gICAgICAgIG1fcGl0Y2ggPSBwcmltYXJ5UmFuZ2VzLnJhbmdlQXQoMCkuZm9u
dERhdGEoKS5waXRjaCgpOworICAgICAgICBtX3BpdGNoID0gcHJpbWFyeVJhbmdlcy5yYW5nZUF0
KDApLmZvbnQoKS5waXRjaCgpOwogICAgIGVsc2UKICAgICAgICAgbV9waXRjaCA9IFZhcmlhYmxl
UGl0Y2g7CiB9CkBAIC05Niw3ICs5Niw3IEBAIHN0YXRpYyBGb250UmFuZ2VzIHJlYWxpemVOZXh0
RmFsbGJhY2soY28KICAgICAvLyBXZSBkaWRuJ3QgZmluZCBhIGZvbnQuIFRyeSB0byBmaW5kIGEg
c2ltaWxhciBmb250IHVzaW5nIG91ciBvd24gc3BlY2lmaWMga25vd2xlZGdlIGFib3V0IG91ciBw
bGF0Zm9ybS4KICAgICAvLyBGb3IgZXhhbXBsZSBvbiBPUyBYLCB3ZSBrbm93IHRvIG1hcCBhbnkg
ZmFtaWxpZXMgY29udGFpbmluZyB0aGUgd29yZHMgQXJhYmljLCBQYXNodG8sIG9yIFVyZHUgdG8g
dGhlCiAgICAgLy8gR2VlemEgUHJvIGZvbnQuCi0gICAgcmV0dXJuIEZvbnRSYW5nZXMoZm9udENh
Y2hlKCkuc2ltaWxhckZvbnRQbGF0Zm9ybURhdGEoZGVzY3JpcHRpb24pKTsKKyAgICByZXR1cm4g
Rm9udFJhbmdlcyhmb250Q2FjaGUoKS5zaW1pbGFyRm9udChkZXNjcmlwdGlvbikpOwogfQogCiBj
b25zdCBGb250UmFuZ2VzJiBGb250R2x5cGhzOjpyZWFsaXplRmFsbGJhY2tSYW5nZXNBdChjb25z
dCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCB1bnNpZ25lZCBpbmRleCkKQEAgLTEyNiwx
MCArMTI2LDEwIEBAIGNvbnN0IEZvbnRSYW5nZXMmIEZvbnRHbHlwaHM6OnJlYWxpemVGYWwKICAg
ICAgICAgQVNTRVJUKG1fbGFzdFJlYWxpemVkRmFsbGJhY2tJbmRleCA+PSBkZXNjcmlwdGlvbi5m
YW1pbHlDb3VudCgpKTsKIAogICAgICAgICB1bnNpZ25lZCBmb250U2VsZWN0b3JGYWxsYmFja0lu
ZGV4ID0gbV9sYXN0UmVhbGl6ZWRGYWxsYmFja0luZGV4IC0gZGVzY3JpcHRpb24uZmFtaWx5Q291
bnQoKTsKLSAgICAgICAgaWYgKGZvbnRTZWxlY3RvckZhbGxiYWNrSW5kZXggPT0gbV9mb250U2Vs
ZWN0b3ItPmZhbGxiYWNrRm9udERhdGFDb3VudCgpKQorICAgICAgICBpZiAoZm9udFNlbGVjdG9y
RmFsbGJhY2tJbmRleCA9PSBtX2ZvbnRTZWxlY3Rvci0+ZmFsbGJhY2tGb250Q291bnQoKSkKICAg
ICAgICAgICAgIHJldHVybiBmb250UmFuZ2VzOwogICAgICAgICArK21fbGFzdFJlYWxpemVkRmFs
bGJhY2tJbmRleDsKLSAgICAgICAgZm9udFJhbmdlcyA9IEZvbnRSYW5nZXMobV9mb250U2VsZWN0
b3ItPmZhbGxiYWNrRm9udERhdGFBdChkZXNjcmlwdGlvbiwgZm9udFNlbGVjdG9yRmFsbGJhY2tJ
bmRleCkpOworICAgICAgICBmb250UmFuZ2VzID0gRm9udFJhbmdlcyhtX2ZvbnRTZWxlY3Rvci0+
ZmFsbGJhY2tGb250QXQoZGVzY3JpcHRpb24sIGZvbnRTZWxlY3RvckZhbGxiYWNrSW5kZXgpKTsK
ICAgICB9CiAKICAgICByZXR1cm4gZm9udFJhbmdlczsKQEAgLTIyMSw4ICsyMjEsOCBAQCBzdGF0
aWMgYm9vbCBzaG91bGRJZ25vcmVSb3RhdGlvbihVQ2hhcjMyCiAjaWYgUExBVEZPUk0oQ09DT0Ep
CiBzdGF0aWMgR2x5cGhEYXRhIGdseXBoRGF0YUZvckNKS0NoYXJhY3RlcldpdGhvdXRTeW50aGV0
aWNJdGFsaWMoVUNoYXIzMiBjaGFyYWN0ZXIsIEdseXBoRGF0YSYgZGF0YSkKIHsKLSAgICBHbHlw
aERhdGEgbm9uSXRhbGljRGF0YSA9IGRhdGEuZm9udERhdGEtPm5vblN5bnRoZXRpY0l0YWxpY0Zv
bnREYXRhKCktPmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIpOwotICAgIGlmIChub25J
dGFsaWNEYXRhLmZvbnREYXRhKQorICAgIEdseXBoRGF0YSBub25JdGFsaWNEYXRhID0gZGF0YS5m
b250LT5ub25TeW50aGV0aWNJdGFsaWNGb250KCktPmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFy
YWN0ZXIpOworICAgIGlmIChub25JdGFsaWNEYXRhLmZvbnQpCiAgICAgICAgIHJldHVybiBub25J
dGFsaWNEYXRhOwogICAgIHJldHVybiBkYXRhOwogfQpAQCAtMjMxLDc2ICsyMzEsNzYgQEAgc3Rh
dGljIEdseXBoRGF0YSBnbHlwaERhdGFGb3JDSktDaGFyYWN0ZQogc3RhdGljIEdseXBoRGF0YSBn
bHlwaERhdGFGb3JOb25DSktDaGFyYWN0ZXJXaXRoR2x5cGhPcmllbnRhdGlvbihVQ2hhcjMyIGNo
YXJhY3RlciwgTm9uQ0pLR2x5cGhPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgY29uc3QgR2x5cGhE
YXRhJiBkYXRhKQogewogICAgIGlmIChvcmllbnRhdGlvbiA9PSBOb25DSktHbHlwaE9yaWVudGF0
aW9uVXByaWdodCB8fCBzaG91bGRJZ25vcmVSb3RhdGlvbihjaGFyYWN0ZXIpKSB7Ci0gICAgICAg
IEdseXBoRGF0YSB1cHJpZ2h0RGF0YSA9IGRhdGEuZm9udERhdGEtPnVwcmlnaHRPcmllbnRhdGlv
bkZvbnREYXRhKCktPmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIpOworICAgICAgICBH
bHlwaERhdGEgdXByaWdodERhdGEgPSBkYXRhLmZvbnQtPnVwcmlnaHRPcmllbnRhdGlvbkZvbnQo
KS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3Rlcik7CiAgICAgICAgIC8vIElmIHRoZSBn
bHlwaHMgYXJlIHRoZSBzYW1lLCB0aGVuIHdlIGtub3cgd2UgY2FuIGp1c3QgdXNlIHRoZSBob3Jp
em9udGFsIGdseXBoIHJvdGF0ZWQgdmVydGljYWxseSB0byBiZSB1cHJpZ2h0LgogICAgICAgICBp
ZiAoZGF0YS5nbHlwaCA9PSB1cHJpZ2h0RGF0YS5nbHlwaCkKICAgICAgICAgICAgIHJldHVybiBk
YXRhOwogICAgICAgICAvLyBUaGUgZ2x5cGhzIGFyZSBkaXN0aW5jdCwgbWVhbmluZyB0aGF0IHRo
ZSBmb250IGhhcyBhIHZlcnRpY2FsLXJpZ2h0IGdseXBoIGJha2VkIGludG8gaXQuIFdlIGNhbid0
IHVzZSB0aGF0CiAgICAgICAgIC8vIGdseXBoLCBzbyB3ZSBmYWxsIGJhY2sgdG8gdGhlIHVwcmln
aHQgZGF0YSBhbmQgdXNlIHRoZSBob3Jpem9udGFsIGdseXBoLgotICAgICAgICBpZiAodXByaWdo
dERhdGEuZm9udERhdGEpCisgICAgICAgIGlmICh1cHJpZ2h0RGF0YS5mb250KQogICAgICAgICAg
ICAgcmV0dXJuIHVwcmlnaHREYXRhOwogICAgIH0gZWxzZSBpZiAob3JpZW50YXRpb24gPT0gTm9u
Q0pLR2x5cGhPcmllbnRhdGlvblZlcnRpY2FsUmlnaHQpIHsKLSAgICAgICAgR2x5cGhEYXRhIHZl
cnRpY2FsUmlnaHREYXRhID0gZGF0YS5mb250RGF0YS0+dmVydGljYWxSaWdodE9yaWVudGF0aW9u
Rm9udERhdGEoKS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3Rlcik7CisgICAgICAgIEds
eXBoRGF0YSB2ZXJ0aWNhbFJpZ2h0RGF0YSA9IGRhdGEuZm9udC0+dmVydGljYWxSaWdodE9yaWVu
dGF0aW9uRm9udCgpLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyKTsKICAgICAgICAg
Ly8gSWYgdGhlIGdseXBocyBhcmUgZGlzdGluY3QsIHdlIHdpbGwgbWFrZSB0aGUgYXNzdW1wdGlv
biB0aGF0IHRoZSBmb250IGhhcyBhIHZlcnRpY2FsLXJpZ2h0IGdseXBoIGJha2VkCiAgICAgICAg
IC8vIGludG8gaXQuCiAgICAgICAgIGlmIChkYXRhLmdseXBoICE9IHZlcnRpY2FsUmlnaHREYXRh
LmdseXBoKQogICAgICAgICAgICAgcmV0dXJuIGRhdGE7CiAgICAgICAgIC8vIFRoZSBnbHlwaHMg
YXJlIGlkZW50aWNhbCwgbWVhbmluZyB0aGF0IHdlIHNob3VsZCBqdXN0IHVzZSB0aGUgaG9yaXpv
bnRhbCBnbHlwaC4KLSAgICAgICAgaWYgKHZlcnRpY2FsUmlnaHREYXRhLmZvbnREYXRhKQorICAg
ICAgICBpZiAodmVydGljYWxSaWdodERhdGEuZm9udCkKICAgICAgICAgICAgIHJldHVybiB2ZXJ0
aWNhbFJpZ2h0RGF0YTsKICAgICB9CiAgICAgcmV0dXJuIGRhdGE7CiB9CiAKLUdseXBoRGF0YSBG
b250R2x5cGhzOjpnbHlwaERhdGFGb3JTeXN0ZW1GYWxsYmFjayhVQ2hhcjMyIGMsIGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIEZvbnREYXRhVmFyaWFudCB2YXJpYW50KQorR2x5
cGhEYXRhIEZvbnRHbHlwaHM6OmdseXBoRGF0YUZvclN5c3RlbUZhbGxiYWNrKFVDaGFyMzIgYywg
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udFZhcmlhbnQgdmFyaWFudCkK
IHsKICAgICAvLyBTeXN0ZW0gZmFsbGJhY2sgaXMgY2hhcmFjdGVyLWRlcGVuZGVudC4KICAgICBh
dXRvJiBwcmltYXJ5UmFuZ2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24s
IDApOwotICAgIGF1dG8qIG9yaWdpbmFsRm9udERhdGEgPSBwcmltYXJ5UmFuZ2VzLmZvbnREYXRh
Rm9yQ2hhcmFjdGVyKGMpOwotICAgIGlmICghb3JpZ2luYWxGb250RGF0YSkKLSAgICAgICAgb3Jp
Z2luYWxGb250RGF0YSA9ICZwcmltYXJ5UmFuZ2VzLmZvbnREYXRhRm9yRmlyc3RSYW5nZSgpOwor
ICAgIGF1dG8qIG9yaWdpbmFsRm9udCA9IHByaW1hcnlSYW5nZXMuZm9udEZvckNoYXJhY3Rlcihj
KTsKKyAgICBpZiAoIW9yaWdpbmFsRm9udCkKKyAgICAgICAgb3JpZ2luYWxGb250ID0gJnByaW1h
cnlSYW5nZXMuZm9udEZvckZpcnN0UmFuZ2UoKTsKIAotICAgIFJlZlB0cjxTaW1wbGVGb250RGF0
YT4gc3lzdGVtRmFsbGJhY2tGb250RGF0YSA9IG9yaWdpbmFsRm9udERhdGEtPnN5c3RlbUZhbGxi
YWNrRm9udERhdGFGb3JDaGFyYWN0ZXIoYywgZGVzY3JpcHRpb24sIG1faXNGb3JQbGF0Zm9ybUZv
bnQpOwotICAgIGlmICghc3lzdGVtRmFsbGJhY2tGb250RGF0YSkKKyAgICBSZWZQdHI8Rm9udD4g
c3lzdGVtRmFsbGJhY2tGb250ID0gb3JpZ2luYWxGb250LT5zeXN0ZW1GYWxsYmFja0ZvbnRGb3JD
aGFyYWN0ZXIoYywgZGVzY3JpcHRpb24sIG1faXNGb3JQbGF0Zm9ybUZvbnQpOworICAgIGlmICgh
c3lzdGVtRmFsbGJhY2tGb250KQogICAgICAgICByZXR1cm4gR2x5cGhEYXRhKCk7CiAKLSAgICBp
ZiAoc3lzdGVtRmFsbGJhY2tGb250RGF0YS0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9
PSBWZXJ0aWNhbCAmJiAhc3lzdGVtRmFsbGJhY2tGb250RGF0YS0+aGFzVmVydGljYWxHbHlwaHMo
KSAmJiBGb250Q2FzY2FkZTo6aXNDSktJZGVvZ3JhcGhPclN5bWJvbChjKSkKKyAgICBpZiAoc3lz
dGVtRmFsbGJhY2tGb250LT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IFZlcnRpY2Fs
ICYmICFzeXN0ZW1GYWxsYmFja0ZvbnQtPmhhc1ZlcnRpY2FsR2x5cGhzKCkgJiYgRm9udENhc2Nh
ZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woYykpCiAgICAgICAgIHZhcmlhbnQgPSBCcm9rZW5J
ZGVvZ3JhcGhWYXJpYW50OwogCiAgICAgR2x5cGhEYXRhIGZhbGxiYWNrR2x5cGhEYXRhOwogICAg
IGlmICh2YXJpYW50ID09IE5vcm1hbFZhcmlhbnQpCi0gICAgICAgIGZhbGxiYWNrR2x5cGhEYXRh
ID0gc3lzdGVtRmFsbGJhY2tGb250RGF0YS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMpOworICAg
ICAgICBmYWxsYmFja0dseXBoRGF0YSA9IHN5c3RlbUZhbGxiYWNrRm9udC0+Z2x5cGhEYXRhRm9y
Q2hhcmFjdGVyKGMpOwogICAgIGVsc2UKLSAgICAgICAgZmFsbGJhY2tHbHlwaERhdGEgPSBzeXN0
ZW1GYWxsYmFja0ZvbnREYXRhLT52YXJpYW50Rm9udERhdGEoZGVzY3JpcHRpb24sIHZhcmlhbnQp
LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYyk7CisgICAgICAgIGZhbGxiYWNrR2x5cGhEYXRhID0g
c3lzdGVtRmFsbGJhY2tGb250LT52YXJpYW50Rm9udChkZXNjcmlwdGlvbiwgdmFyaWFudCktPmds
eXBoRGF0YUZvckNoYXJhY3RlcihjKTsKIAotICAgIGlmICh2YXJpYW50ID09IE5vcm1hbFZhcmlh
bnQgJiYgZmFsbGJhY2tHbHlwaERhdGEuZm9udERhdGEpIHsKLSAgICAgICAgaWYgKCFGb250Q2Fz
Y2FkZTo6aXNDSktJZGVvZ3JhcGhPclN5bWJvbChjKSAmJiBmYWxsYmFja0dseXBoRGF0YS5mb250
RGF0YS0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCAmJiAhZmFsbGJh
Y2tHbHlwaERhdGEuZm9udERhdGEtPmlzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2soKSkKKyAgICBp
ZiAodmFyaWFudCA9PSBOb3JtYWxWYXJpYW50ICYmIGZhbGxiYWNrR2x5cGhEYXRhLmZvbnQpIHsK
KyAgICAgICAgaWYgKCFGb250Q2FzY2FkZTo6aXNDSktJZGVvZ3JhcGhPclN5bWJvbChjKSAmJiBm
YWxsYmFja0dseXBoRGF0YS5mb250LT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IFZl
cnRpY2FsICYmICFmYWxsYmFja0dseXBoRGF0YS5mb250LT5pc1RleHRPcmllbnRhdGlvbkZhbGxi
YWNrKCkpCiAgICAgICAgICAgICBmYWxsYmFja0dseXBoRGF0YSA9IGdseXBoRGF0YUZvck5vbkNK
S0NoYXJhY3RlcldpdGhHbHlwaE9yaWVudGF0aW9uKGMsIGRlc2NyaXB0aW9uLm5vbkNKS0dseXBo
T3JpZW50YXRpb24oKSwgZmFsbGJhY2tHbHlwaERhdGEpOwogICAgIH0KIAogICAgIC8vIEtlZXAg
dGhlIHN5c3RlbSBmYWxsYmFjayBmb250cyB3ZSB1c2UgYWxpdmUuCiAgICAgaWYgKGZhbGxiYWNr
R2x5cGhEYXRhLmdseXBoKQotICAgICAgICBtX3N5c3RlbUZhbGxiYWNrRm9udERhdGFTZXQuYWRk
KHN5c3RlbUZhbGxiYWNrRm9udERhdGEucmVsZWFzZSgpKTsKKyAgICAgICAgbV9zeXN0ZW1GYWxs
YmFja0ZvbnRTZXQuYWRkKHN5c3RlbUZhbGxiYWNrRm9udC5yZWxlYXNlKCkpOwogCiAgICAgcmV0
dXJuIGZhbGxiYWNrR2x5cGhEYXRhOwogfQogCi1HbHlwaERhdGEgRm9udEdseXBoczo6Z2x5cGhE
YXRhRm9yVmFyaWFudChVQ2hhcjMyIGMsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRp
b24sIEZvbnREYXRhVmFyaWFudCB2YXJpYW50LCB1bnNpZ25lZCBmYWxsYmFja0luZGV4KQorR2x5
cGhEYXRhIEZvbnRHbHlwaHM6OmdseXBoRGF0YUZvclZhcmlhbnQoVUNoYXIzMiBjLCBjb25zdCBG
b250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250VmFyaWFudCB2YXJpYW50LCB1bnNpZ25l
ZCBmYWxsYmFja0luZGV4KQogewogICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIGF1dG8mIGZv
bnRSYW5nZXMgPSByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChkZXNjcmlwdGlvbiwgZmFsbGJhY2tJ
bmRleCsrKTsKICAgICAgICAgaWYgKGZvbnRSYW5nZXMuaXNOdWxsKCkpCiAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgYXV0byogZm9udERhdGEgPSBmb250UmFuZ2VzLmZvbnREYXRhRm9yQ2hh
cmFjdGVyKGMpOwotICAgICAgICBHbHlwaERhdGEgZGF0YSA9IGZvbnREYXRhID8gZm9udERhdGEt
PmdseXBoRGF0YUZvckNoYXJhY3RlcihjKSA6IEdseXBoRGF0YSgpOwotICAgICAgICBpZiAoZGF0
YS5mb250RGF0YSkgewotICAgICAgICAgICAgLy8gVGhlIHZhcmlhbnRGb250RGF0YSBmdW5jdGlv
biBzaG91bGQgbm90IG5vcm1hbGx5IHJldHVybiAwLgorICAgICAgICBhdXRvKiBmb250ID0gZm9u
dFJhbmdlcy5mb250Rm9yQ2hhcmFjdGVyKGMpOworICAgICAgICBHbHlwaERhdGEgZGF0YSA9IGZv
bnQgPyBmb250LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYykgOiBHbHlwaERhdGEoKTsKKyAgICAg
ICAgaWYgKGRhdGEuZm9udCkgeworICAgICAgICAgICAgLy8gVGhlIHZhcmlhbnRGb250IGZ1bmN0
aW9uIHNob3VsZCBub3Qgbm9ybWFsbHkgcmV0dXJuIDAuCiAgICAgICAgICAgICAvLyBCdXQgaWYg
aXQgZG9lcywgd2Ugd2lsbCBqdXN0IHJlbmRlciB0aGUgY2FwaXRhbCBsZXR0ZXIgYmlnLgotICAg
ICAgICAgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiB2YXJpYW50Rm9udERhdGEgPSBkYXRhLmZv
bnREYXRhLT52YXJpYW50Rm9udERhdGEoZGVzY3JpcHRpb24sIHZhcmlhbnQpOwotICAgICAgICAg
ICAgaWYgKCF2YXJpYW50Rm9udERhdGEpCisgICAgICAgICAgICBSZWZQdHI8Rm9udD4gdmFyaWFu
dEZvbnQgPSBkYXRhLmZvbnQtPnZhcmlhbnRGb250KGRlc2NyaXB0aW9uLCB2YXJpYW50KTsKKyAg
ICAgICAgICAgIGlmICghdmFyaWFudEZvbnQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7
CiAKLSAgICAgICAgICAgIHJldHVybiB2YXJpYW50Rm9udERhdGEtPmdseXBoRGF0YUZvckNoYXJh
Y3RlcihjKTsKKyAgICAgICAgICAgIHJldHVybiB2YXJpYW50Rm9udC0+Z2x5cGhEYXRhRm9yQ2hh
cmFjdGVyKGMpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0zMTUsMjMgKzMxNSwyMyBAQCBHbHlw
aERhdGEgRm9udEdseXBoczo6Z2x5cGhEYXRhRm9yTm9ybWFsCiAgICAgICAgIGF1dG8mIGZvbnRS
YW5nZXMgPSByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChkZXNjcmlwdGlvbiwgZmFsbGJhY2tJbmRl
eCk7CiAgICAgICAgIGlmIChmb250UmFuZ2VzLmlzTnVsbCgpKQogICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGF1dG8qIHNpbXBsZUZvbnREYXRhID0gZm9udFJhbmdlcy5mb250RGF0YUZvckNo
YXJhY3RlcihjKTsKLSAgICAgICAgYXV0byogcGFnZSA9IHNpbXBsZUZvbnREYXRhID8gc2ltcGxl
Rm9udERhdGEtPmdseXBoUGFnZShwYWdlTnVtYmVyKSA6IG51bGxwdHI7CisgICAgICAgIGF1dG8q
IGZvbnQgPSBmb250UmFuZ2VzLmZvbnRGb3JDaGFyYWN0ZXIoYyk7CisgICAgICAgIGF1dG8qIHBh
Z2UgPSBmb250ID8gZm9udC0+Z2x5cGhQYWdlKHBhZ2VOdW1iZXIpIDogbnVsbHB0cjsKICAgICAg
ICAgaWYgKCFwYWdlKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIEdseXBoRGF0YSBk
YXRhID0gcGFnZS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMpOwotICAgICAgICBpZiAoZGF0YS5m
b250RGF0YSkgewotICAgICAgICAgICAgaWYgKGRhdGEuZm9udERhdGEtPnBsYXRmb3JtRGF0YSgp
Lm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwgJiYgIWRhdGEuZm9udERhdGEtPmlzVGV4dE9yaWVu
dGF0aW9uRmFsbGJhY2soKSkgeworICAgICAgICBpZiAoZGF0YS5mb250KSB7CisgICAgICAgICAg
ICBpZiAoZGF0YS5mb250LT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IFZlcnRpY2Fs
ICYmICFkYXRhLmZvbnQtPmlzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2soKSkgewogICAgICAgICAg
ICAgICAgIGlmICghRm9udENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woYykpCiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBnbHlwaERhdGFGb3JOb25DSktDaGFyYWN0ZXJXaXRoR2x5
cGhPcmllbnRhdGlvbihjLCBkZXNjcmlwdGlvbi5ub25DSktHbHlwaE9yaWVudGF0aW9uKCksIGRh
dGEpOwogCi0gICAgICAgICAgICAgICAgaWYgKCFkYXRhLmZvbnREYXRhLT5oYXNWZXJ0aWNhbEds
eXBocygpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFkYXRhLmZvbnQtPmhhc1ZlcnRpY2FsR2x5
cGhzKCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gVXNlIHRoZSBicm9rZW4gaWRlb2dyYXBo
IGZvbnQgZGF0YS4gVGhlIGJyb2tlbiBpZGVvZ3JhcGggZm9udCB3aWxsIHVzZSB0aGUgaG9yaXpv
bnRhbCB3aWR0aCBvZiBnbHlwaHMKICAgICAgICAgICAgICAgICAgICAgLy8gdG8gbWFrZSBzdXJl
IHlvdSBnZXQgYSBzcXVhcmUgKGV2ZW4gZm9yIGJyb2tlbiBnbHlwaHMgbGlrZSBzeW1ib2xzIHVz
ZWQgZm9yIHB1bmN0dWF0aW9uKS4KICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdseXBoRGF0
YUZvclZhcmlhbnQoYywgZGVzY3JpcHRpb24sIEJyb2tlbklkZW9ncmFwaFZhcmlhbnQsIGZhbGxi
YWNrSW5kZXgpOwogICAgICAgICAgICAgICAgIH0KICNpZiBQTEFURk9STShDT0NPQSkKLSAgICAg
ICAgICAgICAgICBpZiAoZGF0YS5mb250RGF0YS0+cGxhdGZvcm1EYXRhKCkuc3ludGhldGljT2Js
aXF1ZSgpKQorICAgICAgICAgICAgICAgIGlmIChkYXRhLmZvbnQtPnBsYXRmb3JtRGF0YSgpLnN5
bnRoZXRpY09ibGlxdWUoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdseXBoRGF0YUZv
ckNKS0NoYXJhY3RlcldpdGhvdXRTeW50aGV0aWNJdGFsaWMoYywgZGF0YSk7CiAjZW5kaWYKICAg
ICAgICAgICAgIH0KQEAgLTM0NSwyNyArMzQ1LDI3IEBAIEdseXBoRGF0YSBGb250R2x5cGhzOjpn
bHlwaERhdGFGb3JOb3JtYWwKIAogc3RhdGljIFJlZlB0cjxHbHlwaFBhZ2U+IGdseXBoUGFnZUZy
b21Gb250UmFuZ2VzKHVuc2lnbmVkIHBhZ2VOdW1iZXIsIGNvbnN0IEZvbnRSYW5nZXMmIGZvbnRS
YW5nZXMpCiB7Ci0gICAgY29uc3QgU2ltcGxlRm9udERhdGEqIHNpbXBsZUZvbnREYXRhID0gbnVs
bHB0cjsKKyAgICBjb25zdCBGb250KiBmb250ID0gbnVsbHB0cjsKICAgICBVQ2hhcjMyIHBhZ2VS
YW5nZUZyb20gPSBwYWdlTnVtYmVyICogR2x5cGhQYWdlOjpzaXplOwogICAgIFVDaGFyMzIgcGFn
ZVJhbmdlVG8gPSBwYWdlUmFuZ2VGcm9tICsgR2x5cGhQYWdlOjpzaXplIC0gMTsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZm9udFJhbmdlcy5zaXplKCk7ICsraSkgewogICAgICAgICBh
dXRvJiByYW5nZSA9IGZvbnRSYW5nZXMucmFuZ2VBdChpKTsKICAgICAgICAgaWYgKHJhbmdlLnRv
KCkpIHsKICAgICAgICAgICAgIGlmIChyYW5nZS5mcm9tKCkgPD0gcGFnZVJhbmdlRnJvbSAmJiBw
YWdlUmFuZ2VUbyA8PSByYW5nZS50bygpKQotICAgICAgICAgICAgICAgIHNpbXBsZUZvbnREYXRh
ID0gJnJhbmdlLmZvbnREYXRhKCk7CisgICAgICAgICAgICAgICAgZm9udCA9ICZyYW5nZS5mb250
KCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KLSAgICBpZiAoIXNpbXBs
ZUZvbnREYXRhKQorICAgIGlmICghZm9udCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAg
ICBpZiAoc2ltcGxlRm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gVmVy
dGljYWwpCisgICAgaWYgKGZvbnQtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gVmVy
dGljYWwpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIGNvbnN0X2Nhc3Q8
R2x5cGhQYWdlKj4oc2ltcGxlRm9udERhdGEtPmdseXBoUGFnZShwYWdlTnVtYmVyKSk7CisgICAg
cmV0dXJuIGNvbnN0X2Nhc3Q8R2x5cGhQYWdlKj4oZm9udC0+Z2x5cGhQYWdlKHBhZ2VOdW1iZXIp
KTsKIH0KIAotR2x5cGhEYXRhIEZvbnRHbHlwaHM6OmdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hh
cjMyIGMsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIEZvbnREYXRhVmFyaWFu
dCB2YXJpYW50KQorR2x5cGhEYXRhIEZvbnRHbHlwaHM6OmdseXBoRGF0YUZvckNoYXJhY3RlcihV
Q2hhcjMyIGMsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIEZvbnRWYXJpYW50
IHZhcmlhbnQpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBBU1NFUlQodmFy
aWFudCAhPSBBdXRvVmFyaWFudCk7CkBAIC0zODIsMTIgKzM4MiwxMiBAQCBHbHlwaERhdGEgRm9u
dEdseXBoczo6Z2x5cGhEYXRhRm9yQ2hhcmFjCiAgICAgR2x5cGhEYXRhIGdseXBoRGF0YSA9IGNh
Y2hlZFBhZ2UgPyBjYWNoZWRQYWdlLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYykgOiBHbHlwaERh
dGEoKTsKICAgICBpZiAoIWdseXBoRGF0YS5nbHlwaCkgewogICAgICAgICBpZiAoIWNhY2hlZFBh
Z2UpCi0gICAgICAgICAgICBjYWNoZWRQYWdlID0gR2x5cGhQYWdlOjpjcmVhdGVGb3JNaXhlZEZv
bnREYXRhKCk7CisgICAgICAgICAgICBjYWNoZWRQYWdlID0gR2x5cGhQYWdlOjpjcmVhdGVGb3JN
aXhlZEZvbnRzKCk7CiAgICAgICAgIGVsc2UgaWYgKGNhY2hlZFBhZ2UtPmlzSW1tdXRhYmxlKCkp
Ci0gICAgICAgICAgICBjYWNoZWRQYWdlID0gR2x5cGhQYWdlOjpjcmVhdGVDb3B5Rm9yTWl4ZWRG
b250RGF0YSgqY2FjaGVkUGFnZSk7CisgICAgICAgICAgICBjYWNoZWRQYWdlID0gR2x5cGhQYWdl
OjpjcmVhdGVDb3B5Rm9yTWl4ZWRGb250cygqY2FjaGVkUGFnZSk7CiAKICAgICAgICAgZ2x5cGhE
YXRhID0gZ2x5cGhEYXRhRm9yTm9ybWFsVmFyaWFudChjLCBkZXNjcmlwdGlvbik7Ci0gICAgICAg
IGNhY2hlZFBhZ2UtPnNldEdseXBoRGF0YUZvckNoYXJhY3RlcihjLCBnbHlwaERhdGEuZ2x5cGgs
IGdseXBoRGF0YS5mb250RGF0YSk7CisgICAgICAgIGNhY2hlZFBhZ2UtPnNldEdseXBoRGF0YUZv
ckNoYXJhY3RlcihjLCBnbHlwaERhdGEuZ2x5cGgsIGdseXBoRGF0YS5mb250KTsKICAgICB9CiAg
ICAgcmV0dXJuIGdseXBoRGF0YTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRHbHlwaHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250R2x5cGhzLmgJKHJldmlzaW9uIDE3ODUxNSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRHbHlwaHMuaAkod29ya2luZyBjb3B5KQpAQCAtMjEs
MTAgKzIxLDEwIEBACiAjaWZuZGVmIEZvbnRHbHlwaHNfaAogI2RlZmluZSBGb250R2x5cGhzX2gK
IAorI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGb250UmFuZ2VzLmgiCiAjaW5jbHVkZSAi
Rm9udFNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiR2x5cGhQYWdlLmgiCi0jaW5jbHVkZSAiU2ltcGxl
Rm9udERhdGEuaCIKICNpbmNsdWRlICJXaWR0aENhY2hlLmgiCiAjaW5jbHVkZSA8d3RmL0Zvcndh
cmQuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgpAQCAtNTEsNyArNTEsNyBAQCBwdWJs
aWM6CiAKICAgICBib29sIGlzRm9yUGxhdGZvcm1Gb250KCkgY29uc3QgeyByZXR1cm4gbV9pc0Zv
clBsYXRmb3JtRm9udDsgfQogCi0gICAgR2x5cGhEYXRhIGdseXBoRGF0YUZvckNoYXJhY3RlcihV
Q2hhcjMyLCBjb25zdCBGb250RGVzY3JpcHRpb24mLCBGb250RGF0YVZhcmlhbnQpOworICAgIEds
eXBoRGF0YSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiwgY29uc3QgRm9udERlc2NyaXB0
aW9uJiwgRm9udFZhcmlhbnQpOwogCiAgICAgYm9vbCBpc0ZpeGVkUGl0Y2goY29uc3QgRm9udERl
c2NyaXB0aW9uJik7CiAgICAgdm9pZCBkZXRlcm1pbmVQaXRjaChjb25zdCBGb250RGVzY3JpcHRp
b24mKTsKQEAgLTY2LDE2ICs2NiwxNiBAQCBwdWJsaWM6CiAgICAgV2lkdGhDYWNoZSYgd2lkdGhD
YWNoZSgpIHsgcmV0dXJuIG1fd2lkdGhDYWNoZTsgfQogICAgIGNvbnN0IFdpZHRoQ2FjaGUmIHdp
ZHRoQ2FjaGUoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoQ2FjaGU7IH0KIAotICAgIGNvbnN0IFNp
bXBsZUZvbnREYXRhJiBwcmltYXJ5U2ltcGxlRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9u
Jik7CisgICAgY29uc3QgRm9udCYgcHJpbWFyeUZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJik7
CiAgICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgRm9udFJhbmdlcyYgcmVhbGl6ZUZhbGxiYWNrUmFu
Z2VzQXQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgdW5zaWduZWQgZmFsbGJhY2tJbmRleCk7CiAK
IHByaXZhdGU6CiAgICAgRm9udEdseXBocyhQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4pOwogICAg
IEZvbnRHbHlwaHMoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpOwogCi0gICAgR2x5cGhEYXRhIGds
eXBoRGF0YUZvclN5c3RlbUZhbGxiYWNrKFVDaGFyMzIsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYs
IEZvbnREYXRhVmFyaWFudCk7CisgICAgR2x5cGhEYXRhIGdseXBoRGF0YUZvclN5c3RlbUZhbGxi
YWNrKFVDaGFyMzIsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIEZvbnRWYXJpYW50KTsKICAgICBH
bHlwaERhdGEgZ2x5cGhEYXRhRm9yTm9ybWFsVmFyaWFudChVQ2hhcjMyLCBjb25zdCBGb250RGVz
Y3JpcHRpb24mKTsKLSAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yVmFyaWFudChVQ2hhcjMyLCBj
b25zdCBGb250RGVzY3JpcHRpb24mLCBGb250RGF0YVZhcmlhbnQsIHVuc2lnbmVkIGZhbGxiYWNr
SW5kZXgpOworICAgIEdseXBoRGF0YSBnbHlwaERhdGFGb3JWYXJpYW50KFVDaGFyMzIsIGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYsIEZvbnRWYXJpYW50LCB1bnNpZ25lZCBmYWxsYmFja0luZGV4KTsK
IAogICAgIFZlY3RvcjxGb250UmFuZ2VzLCAxPiBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXM7CiAg
ICAgdW5zaWduZWQgbV9sYXN0UmVhbGl6ZWRGYWxsYmFja0luZGV4IHsgMCB9OwpAQCAtODMsOSAr
ODMsOSBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxHbHlwaFBhZ2U+IG1fY2FjaGVkUGFnZVplcm87
CiAgICAgSGFzaE1hcDxpbnQsIFJlZlB0cjxHbHlwaFBhZ2U+PiBtX2NhY2hlZFBhZ2VzOwogCi0g
ICAgSGFzaFNldDxSZWZQdHI8U2ltcGxlRm9udERhdGE+PiBtX3N5c3RlbUZhbGxiYWNrRm9udERh
dGFTZXQ7CisgICAgSGFzaFNldDxSZWZQdHI8Rm9udD4+IG1fc3lzdGVtRmFsbGJhY2tGb250U2V0
OwogCi0gICAgY29uc3QgU2ltcGxlRm9udERhdGEqIG1fY2FjaGVkUHJpbWFyeVNpbXBsZUZvbnRE
YXRhOworICAgIGNvbnN0IEZvbnQqIG1fY2FjaGVkUHJpbWFyeUZvbnQ7CiAgICAgUmVmUHRyPEZv
bnRTZWxlY3Rvcj4gbV9mb250U2VsZWN0b3I7CiAKICAgICBXaWR0aENhY2hlIG1fd2lkdGhDYWNo
ZTsKQEAgLTEwMywxNiArMTAzLDE2IEBAIGlubGluZSBib29sIEZvbnRHbHlwaHM6OmlzRml4ZWRQ
aXRjaChjb24KICAgICByZXR1cm4gbV9waXRjaCA9PSBGaXhlZFBpdGNoOwogfTsKIAotaW5saW5l
IGNvbnN0IFNpbXBsZUZvbnREYXRhJiBGb250R2x5cGhzOjpwcmltYXJ5U2ltcGxlRm9udERhdGEo
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKK2lubGluZSBjb25zdCBGb250JiBG
b250R2x5cGhzOjpwcmltYXJ5Rm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9u
KQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgaWYgKCFtX2NhY2hlZFByaW1h
cnlTaW1wbGVGb250RGF0YSkgeworICAgIGlmICghbV9jYWNoZWRQcmltYXJ5Rm9udCkgewogICAg
ICAgICBhdXRvJiBwcmltYXJ5UmFuZ2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3Jp
cHRpb24sIDApOwotICAgICAgICBtX2NhY2hlZFByaW1hcnlTaW1wbGVGb250RGF0YSA9IHByaW1h
cnlSYW5nZXMuZm9udERhdGFGb3JDaGFyYWN0ZXIoJyAnKTsKLSAgICAgICAgaWYgKCFtX2NhY2hl
ZFByaW1hcnlTaW1wbGVGb250RGF0YSkKLSAgICAgICAgICAgIG1fY2FjaGVkUHJpbWFyeVNpbXBs
ZUZvbnREYXRhID0gJnByaW1hcnlSYW5nZXMuZm9udERhdGFGb3JGaXJzdFJhbmdlKCk7CisgICAg
ICAgIG1fY2FjaGVkUHJpbWFyeUZvbnQgPSBwcmltYXJ5UmFuZ2VzLmZvbnRGb3JDaGFyYWN0ZXIo
JyAnKTsKKyAgICAgICAgaWYgKCFtX2NhY2hlZFByaW1hcnlGb250KQorICAgICAgICAgICAgbV9j
YWNoZWRQcmltYXJ5Rm9udCA9ICZwcmltYXJ5UmFuZ2VzLmZvbnRGb3JGaXJzdFJhbmdlKCk7CiAg
ICAgfQotICAgIHJldHVybiAqbV9jYWNoZWRQcmltYXJ5U2ltcGxlRm9udERhdGE7CisgICAgcmV0
dXJuICptX2NhY2hlZFByaW1hcnlGb250OwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250TWV0cmljcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRNZXRyaWNzLmgJKHJldmlzaW9uIDE3ODUxNSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRNZXRyaWNzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEzMyw3ICsxMzMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRIYXNaZXJvV2lk
dGgoYm9vbCBoYXNaZXJvV2lkdGgpIHsgbV9oYXNaZXJvV2lkdGggPSBoYXNaZXJvV2lkdGg7IH0K
IAogcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgU2ltcGxlRm9udERhdGE7CisgICAgZnJpZW5k
IGNsYXNzIEZvbnQ7CiAKICAgICB2b2lkIHJlc2V0KCkKICAgICB7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UmFuZ2VzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UmFuZ2VzLmNwcAkocmV2aXNpb24gMTc4
NTE1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFJhbmdlcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJGb250UmFuZ2VzLmgiCiAKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgorI2lu
Y2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC0zNiwzNCArMzYsMzQgQEAgRm9udFJhbmdlczo6Rm9u
dFJhbmdlcygpCiB7CiB9CiAKLUZvbnRSYW5nZXM6OkZvbnRSYW5nZXMoUmVmUHRyPFNpbXBsZUZv
bnREYXRhPiYmIGZvbnREYXRhKQorRm9udFJhbmdlczo6Rm9udFJhbmdlcyhSZWZQdHI8Rm9udD4m
JiBmb250KQogewotICAgIGlmIChmb250RGF0YSkKLSAgICAgICAgbV9yYW5nZXMuYXBwZW5kKFJh
bmdlIHsgMCwgMHg3RkZGRkZGRiwgZm9udERhdGEucmVsZWFzZU5vbk51bGwoKSB9KTsKKyAgICBp
ZiAoZm9udCkKKyAgICAgICAgbV9yYW5nZXMuYXBwZW5kKFJhbmdlIHsgMCwgMHg3RkZGRkZGRiwg
Zm9udC5yZWxlYXNlTm9uTnVsbCgpIH0pOwogfQogCiBGb250UmFuZ2VzOjp+Rm9udFJhbmdlcygp
CiB7CiB9CiAKLWNvbnN0IFNpbXBsZUZvbnREYXRhKiBGb250UmFuZ2VzOjpmb250RGF0YUZvckNo
YXJhY3RlcihVQ2hhcjMyIGMpIGNvbnN0Citjb25zdCBGb250KiBGb250UmFuZ2VzOjpmb250Rm9y
Q2hhcmFjdGVyKFVDaGFyMzIgYykgY29uc3QKIHsKICAgICBmb3IgKGF1dG8mIHJhbmdlIDogbV9y
YW5nZXMpIHsKICAgICAgICAgaWYgKHJhbmdlLmZyb20oKSA8PSBjICYmIGMgPD0gcmFuZ2UudG8o
KSkKLSAgICAgICAgICAgIHJldHVybiAmcmFuZ2UuZm9udERhdGEoKTsKKyAgICAgICAgICAgIHJl
dHVybiAmcmFuZ2UuZm9udCgpOwogICAgIH0KICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotY29u
c3QgU2ltcGxlRm9udERhdGEmIEZvbnRSYW5nZXM6OmZvbnREYXRhRm9yRmlyc3RSYW5nZSgpIGNv
bnN0Citjb25zdCBGb250JiBGb250UmFuZ2VzOjpmb250Rm9yRmlyc3RSYW5nZSgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIG1fcmFuZ2VzWzBdLmZvbnREYXRhKCk7CisgICAgcmV0dXJuIG1fcmFuZ2Vz
WzBdLmZvbnQoKTsKIH0KIAogYm9vbCBGb250UmFuZ2VzOjppc0xvYWRpbmcoKSBjb25zdAogewog
ICAgIGZvciAoYXV0byYgcmFuZ2UgOiBtX3JhbmdlcykgewotICAgICAgICBpZiAocmFuZ2UuZm9u
dERhdGEoKS5pc0xvYWRpbmcoKSkKKyAgICAgICAgaWYgKHJhbmdlLmZvbnQoKS5pc0xvYWRpbmco
KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UmFuZ2VzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFJhbmdlcy5oCShy
ZXZpc2lvbiAxNzg1MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
UmFuZ2VzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgRm9udFJh
bmdlc19oCiAjZGVmaW5lIEZvbnRSYW5nZXNfaAogCi0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEu
aCIKKyNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSA8d3RmL1R5cGVDYXN0cy5oPgogI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtMzUsMjUgKzM1LDI1IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIGNsYXNzIEZvbnRSYW5nZXMgewogcHVibGljOgogICAgIHN0cnVjdCBSYW5nZSB7Ci0gICAg
ICAgIFJhbmdlKFVDaGFyMzIgZnJvbSwgVUNoYXIzMiB0bywgUmVmPFNpbXBsZUZvbnREYXRhPiYm
IGZvbnREYXRhKQorICAgICAgICBSYW5nZShVQ2hhcjMyIGZyb20sIFVDaGFyMzIgdG8sIFJlZjxG
b250PiYmIGZvbnQpCiAgICAgICAgICAgICA6IG1fZnJvbShmcm9tKQogICAgICAgICAgICAgLCBt
X3RvKHRvKQotICAgICAgICAgICAgLCBtX2ZvbnREYXRhKFdURjo6bW92ZShmb250RGF0YSkpCisg
ICAgICAgICAgICAsIG1fZm9udChXVEY6Om1vdmUoZm9udCkpCiAgICAgICAgIHsKICAgICAgICAg
fQogCiAgICAgICAgIFVDaGFyMzIgZnJvbSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJvbTsgfQogICAg
ICAgICBVQ2hhcjMyIHRvKCkgY29uc3QgeyByZXR1cm4gbV90bzsgfQotICAgICAgICBjb25zdCBT
aW1wbGVGb250RGF0YSYgZm9udERhdGEoKSBjb25zdCB7IHJldHVybiAqbV9mb250RGF0YTsgfQor
ICAgICAgICBjb25zdCBGb250JiBmb250KCkgY29uc3QgeyByZXR1cm4gKm1fZm9udDsgfQogCiAg
ICAgcHJpdmF0ZToKICAgICAgICAgVUNoYXIzMiBtX2Zyb207CiAgICAgICAgIFVDaGFyMzIgbV90
bzsKLSAgICAgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBtX2ZvbnREYXRhOworICAgICAgICBS
ZWZQdHI8Rm9udD4gbV9mb250OwogICAgIH07CiAKICAgICBGb250UmFuZ2VzKCk7Ci0gICAgZXhw
bGljaXQgRm9udFJhbmdlcyhSZWZQdHI8U2ltcGxlRm9udERhdGE+JiYpOworICAgIGV4cGxpY2l0
IEZvbnRSYW5nZXMoUmVmUHRyPEZvbnQ+JiYpOwogICAgIH5Gb250UmFuZ2VzKCk7CiAKICAgICBi
b29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1fcmFuZ2VzLmlzRW1wdHkoKTsgfQpAQCAtNjIs
OCArNjIsOCBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
cmFuZ2VzLnNpemUoKTsgfQogICAgIGNvbnN0IFJhbmdlJiByYW5nZUF0KHVuc2lnbmVkIGkpIGNv
bnN0IHsgcmV0dXJuIG1fcmFuZ2VzW2ldOyB9CiAKLSAgICBjb25zdCBTaW1wbGVGb250RGF0YSog
Zm9udERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMikgY29uc3Q7Ci0gICAgY29uc3QgU2ltcGxlRm9u
dERhdGEmIGZvbnREYXRhRm9yRmlyc3RSYW5nZSgpIGNvbnN0OworICAgIGNvbnN0IEZvbnQqIGZv
bnRGb3JDaGFyYWN0ZXIoVUNoYXIzMikgY29uc3Q7CisgICAgY29uc3QgRm9udCYgZm9udEZvckZp
cnN0UmFuZ2UoKSBjb25zdDsKICAgICBib29sIGlzTG9hZGluZygpIGNvbnN0OwogCiBwcml2YXRl
OgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFNlbGVjdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFNlbGVj
dG9yLmgJKHJldmlzaW9uIDE3ODUxNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRTZWxlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw5ICs0MSw5IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIH5Gb250U2VsZWN0b3IoKSB7IH0KIAogICAgIHZpcnR1YWwgRm9udFJh
bmdlcyBmb250UmFuZ2VzRm9yRmFtaWx5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0
b21pY1N0cmluZyYpID0gMDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+
IGZhbGxiYWNrRm9udERhdGFBdChjb25zdCBGb250RGVzY3JpcHRpb24mLCBzaXplX3QpID0gMDsK
KyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Rm9udD4gZmFsbGJhY2tGb250QXQoY29uc3QgRm9udERl
c2NyaXB0aW9uJiwgc2l6ZV90KSA9IDA7CiAKLSAgICB2aXJ0dWFsIHNpemVfdCBmYWxsYmFja0Zv
bnREYXRhQ291bnQoKSA9IDA7CisgICAgdmlydHVhbCBzaXplX3QgZmFsbGJhY2tGb250Q291bnQo
KSA9IDA7CiAgICAgdmlydHVhbCBib29sIHJlc29sdmVzRmFtaWx5Rm9yKGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYpIGNvbnN0ID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBmb250Q2FjaGVJbnZhbGlk
YXRlZCgpIHsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhC
dWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
bHlwaEJ1ZmZlci5oCShyZXZpc2lvbiAxNzg1MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HbHlwaEJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgU2ltcGxlRm9udERhdGE7CitjbGFzcyBG
b250OwogCiAjaWYgVVNFKENBSVJPKQogLy8gRklYTUU6IFdoeSBkb2VzIENhaXJvIHVzZSBzdWNo
IGEgaHVnZSBzdHJ1Y3QgaW5zdGVhZCBvZiBqdXN0IGFuIG9mZnNldCBpbnRvIGFuIGFycmF5PwpA
QCAtNzYsMTIgKzc2LDEyIEBAIHR5cGVkZWYgRmxvYXRTaXplIEdseXBoQnVmZmVyQWR2YW5jZTsK
IAogY2xhc3MgR2x5cGhCdWZmZXIgewogcHVibGljOgotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0
IHsgcmV0dXJuIG1fZm9udERhdGEuaXNFbXB0eSgpOyB9Ci0gICAgaW50IHNpemUoKSBjb25zdCB7
IHJldHVybiBtX2ZvbnREYXRhLnNpemUoKTsgfQorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsg
cmV0dXJuIG1fZm9udC5pc0VtcHR5KCk7IH0KKyAgICBpbnQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fZm9udC5zaXplKCk7IH0KICAgICAKICAgICB2b2lkIGNsZWFyKCkKICAgICB7Ci0gICAgICAg
IG1fZm9udERhdGEuY2xlYXIoKTsKKyAgICAgICAgbV9mb250LmNsZWFyKCk7CiAgICAgICAgIG1f
Z2x5cGhzLmNsZWFyKCk7CiAgICAgICAgIG1fYWR2YW5jZXMuY2xlYXIoKTsKICAgICAgICAgaWYg
KG1fb2Zmc2V0c0luU3RyaW5nKQpAQCAtOTYsNyArOTYsNyBAQCBwdWJsaWM6CiAgICAgY29uc3Qg
R2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzKGludCBmcm9tKSBjb25zdCB7IHJldHVybiBtX2dseXBo
cy5kYXRhKCkgKyBmcm9tOyB9CiAgICAgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNl
cyhpbnQgZnJvbSkgY29uc3QgeyByZXR1cm4gbV9hZHZhbmNlcy5kYXRhKCkgKyBmcm9tOyB9CiAK
LSAgICBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGFBdChpbnQgaW5kZXgpIGNvbnN0IHsg
cmV0dXJuIG1fZm9udERhdGFbaW5kZXhdOyB9CisgICAgY29uc3QgRm9udCogZm9udEF0KGludCBp
bmRleCkgY29uc3QgeyByZXR1cm4gbV9mb250W2luZGV4XTsgfQogCiAgICAgdm9pZCBzZXRJbml0
aWFsQWR2YW5jZShHbHlwaEJ1ZmZlckFkdmFuY2UgaW5pdGlhbEFkdmFuY2UpIHsgbV9pbml0aWFs
QWR2YW5jZSA9IGluaXRpYWxBZHZhbmNlOyB9CiAgICAgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNl
JiBpbml0aWFsQWR2YW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5pdGlhbEFkdmFuY2U7IH0KQEAg
LTEyNiw5ICsxMjYsOSBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBub09mZnNldCA9IFVJTlRfTUFYOwotICAgIHZvaWQgYWRkKEdseXBoIGdseXBoLCBj
b25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgZmxvYXQgd2lkdGgsIHVuc2lnbmVkIG9mZnNldElu
U3RyaW5nID0gbm9PZmZzZXQsIGNvbnN0IEZsb2F0U2l6ZSogb2Zmc2V0ID0gMCkKKyAgICB2b2lk
IGFkZChHbHlwaCBnbHlwaCwgY29uc3QgRm9udCogZm9udCwgZmxvYXQgd2lkdGgsIHVuc2lnbmVk
IG9mZnNldEluU3RyaW5nID0gbm9PZmZzZXQsIGNvbnN0IEZsb2F0U2l6ZSogb2Zmc2V0ID0gMCkK
ICAgICB7Ci0gICAgICAgIG1fZm9udERhdGEuYXBwZW5kKGZvbnQpOworICAgICAgICBtX2ZvbnQu
YXBwZW5kKGZvbnQpOwogCiAjaWYgVVNFKENBSVJPKQogICAgICAgICBjYWlyb19nbHlwaF90IGNh
aXJvR2x5cGg7CkBAIC0xNTksOSArMTU5LDkgQEAgcHVibGljOgogICAgIH0KICAgICAKICNpZiAh
VVNFKFdJTkdESSkKLSAgICB2b2lkIGFkZChHbHlwaCBnbHlwaCwgY29uc3QgU2ltcGxlRm9udERh
dGEqIGZvbnQsIEdseXBoQnVmZmVyQWR2YW5jZSBhZHZhbmNlLCB1bnNpZ25lZCBvZmZzZXRJblN0
cmluZyA9IG5vT2Zmc2V0KQorICAgIHZvaWQgYWRkKEdseXBoIGdseXBoLCBjb25zdCBGb250KiBm
b250LCBHbHlwaEJ1ZmZlckFkdmFuY2UgYWR2YW5jZSwgdW5zaWduZWQgb2Zmc2V0SW5TdHJpbmcg
PSBub09mZnNldCkKICAgICB7Ci0gICAgICAgIG1fZm9udERhdGEuYXBwZW5kKGZvbnQpOworICAg
ICAgICBtX2ZvbnQuYXBwZW5kKGZvbnQpOwogI2lmIFVTRShDQUlSTykKICAgICAgICAgY2Fpcm9f
Z2x5cGhfdCBjYWlyb0dseXBoOwogICAgICAgICBjYWlyb0dseXBoLmluZGV4ID0gZ2x5cGg7CkBA
IC0yMDUsOSArMjA1LDkgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB2b2lkIHN3YXAoaW50IGlu
ZGV4MSwgaW50IGluZGV4MikKICAgICB7Ci0gICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBm
ID0gbV9mb250RGF0YVtpbmRleDFdOwotICAgICAgICBtX2ZvbnREYXRhW2luZGV4MV0gPSBtX2Zv
bnREYXRhW2luZGV4Ml07Ci0gICAgICAgIG1fZm9udERhdGFbaW5kZXgyXSA9IGY7CisgICAgICAg
IGNvbnN0IEZvbnQqIGYgPSBtX2ZvbnRbaW5kZXgxXTsKKyAgICAgICAgbV9mb250W2luZGV4MV0g
PSBtX2ZvbnRbaW5kZXgyXTsKKyAgICAgICAgbV9mb250W2luZGV4Ml0gPSBmOwogCiAgICAgICAg
IEdseXBoQnVmZmVyR2x5cGggZyA9IG1fZ2x5cGhzW2luZGV4MV07CiAgICAgICAgIG1fZ2x5cGhz
W2luZGV4MV0gPSBtX2dseXBoc1tpbmRleDJdOwpAQCAtMjI0LDcgKzIyNCw3IEBAIHByaXZhdGU6
CiAjZW5kaWYKICAgICB9CiAKLSAgICBWZWN0b3I8Y29uc3QgU2ltcGxlRm9udERhdGEqLCAyMDQ4
PiBtX2ZvbnREYXRhOworICAgIFZlY3Rvcjxjb25zdCBGb250KiwgMjA0OD4gbV9mb250OwogICAg
IFZlY3RvcjxHbHlwaEJ1ZmZlckdseXBoLCAyMDQ4PiBtX2dseXBoczsKICAgICBWZWN0b3I8R2x5
cGhCdWZmZXJBZHZhbmNlLCAyMDQ4PiBtX2FkdmFuY2VzOwogICAgIEdseXBoQnVmZmVyQWR2YW5j
ZSBtX2luaXRpYWxBZHZhbmNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR2x5cGhQYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR2x5cGhQYWdlLmgJKHJldmlzaW9uIDE3ODUxNSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxOCArMzks
MTggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBTaW1wbGVGb250RGF0YTsKK2Ns
YXNzIEZvbnQ7CiAKLS8vIEhvbGRzIHRoZSBnbHlwaCBpbmRleCBhbmQgdGhlIGNvcnJlc3BvbmRp
bmcgU2ltcGxlRm9udERhdGEgaW5mb3JtYXRpb24gZm9yIGEgZ2l2ZW4KKy8vIEhvbGRzIHRoZSBn
bHlwaCBpbmRleCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgRm9udCBpbmZvcm1hdGlvbiBmb3IgYSBn
aXZlbgogLy8gY2hhcmFjdGVyLgogc3RydWN0IEdseXBoRGF0YSB7Ci0gICAgR2x5cGhEYXRhKEds
eXBoIGcgPSAwLCBjb25zdCBTaW1wbGVGb250RGF0YSogZiA9IDApCisgICAgR2x5cGhEYXRhKEds
eXBoIGcgPSAwLCBjb25zdCBGb250KiBmID0gMCkKICAgICAgICAgOiBnbHlwaChnKQotICAgICAg
ICAsIGZvbnREYXRhKGYpCisgICAgICAgICwgZm9udChmKQogICAgIHsKICAgICB9CiAgICAgR2x5
cGggZ2x5cGg7Ci0gICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhOworICAgIGNvbnN0
IEZvbnQqIGZvbnQ7CiB9OwogCiAjaWYgQ09NUElMRVIoTVNWQykKQEAgLTY2LDI0ICs2NiwyNCBA
QCBzdHJ1Y3QgR2x5cGhEYXRhIHsKIC8vIG1pc3NpbmcgaW4gdGhlIHByaW1hcnkgZm9udC4KIGNs
YXNzIEdseXBoUGFnZSA6IHB1YmxpYyBSZWZDb3VudGVkPEdseXBoUGFnZT4gewogcHVibGljOgot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdseXBoUGFnZT4gY3JlYXRlRm9yTWl4ZWRGb250RGF0YSgp
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8R2x5cGhQYWdlPiBjcmVhdGVGb3JNaXhlZEZvbnRzKCkK
ICAgICB7Ci0gICAgICAgIHZvaWQqIHNsb3QgPSBmYXN0TWFsbG9jKHNpemVvZihHbHlwaFBhZ2Up
ICsgc2l6ZW9mKFNpbXBsZUZvbnREYXRhKikgKiBHbHlwaFBhZ2U6OnNpemUpOworICAgICAgICB2
b2lkKiBzbG90ID0gZmFzdE1hbGxvYyhzaXplb2YoR2x5cGhQYWdlKSArIHNpemVvZihGb250Kikg
KiBHbHlwaFBhZ2U6OnNpemUpOwogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IChOb3ROdWxs
LCBzbG90KSBHbHlwaFBhZ2UobnVsbHB0cikpOwogICAgIH0KIAotICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEdseXBoUGFnZT4gY3JlYXRlQ29weUZvck1peGVkRm9udERhdGEoY29uc3QgR2x5cGhQYWdl
JiBvcmlnaW5hbCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxHbHlwaFBhZ2U+IGNyZWF0ZUNvcHlG
b3JNaXhlZEZvbnRzKGNvbnN0IEdseXBoUGFnZSYgb3JpZ2luYWwpCiAgICAgewotICAgICAgICBS
ZWZQdHI8R2x5cGhQYWdlPiBwYWdlID0gY3JlYXRlRm9yTWl4ZWRGb250RGF0YSgpOworICAgICAg
ICBSZWZQdHI8R2x5cGhQYWdlPiBwYWdlID0gY3JlYXRlRm9yTWl4ZWRGb250cygpOwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR2x5cGhQYWdlOjpzaXplOyArK2kpCiAgICAgICAg
ICAgICBwYWdlLT5zZXRHbHlwaERhdGFGb3JJbmRleChpLCBvcmlnaW5hbC5nbHlwaERhdGFGb3JJ
bmRleChpKSk7CiAgICAgICAgIHJldHVybiBwYWdlLnJlbGVhc2UoKTsKICAgICB9CiAKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxHbHlwaFBhZ2U+IGNyZWF0ZUZvclNpbmdsZUZvbnREYXRhKGNvbnN0
IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxHbHlwaFBh
Z2U+IGNyZWF0ZUZvclNpbmdsZUZvbnQoY29uc3QgRm9udCogZm9udCkKICAgICB7Ci0gICAgICAg
IEFTU0VSVChmb250RGF0YSk7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgR2x5cGhQYWdl
KGZvbnREYXRhKSk7CisgICAgICAgIEFTU0VSVChmb250KTsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBHbHlwaFBhZ2UoZm9udCkpOwogICAgIH0KIAogICAgIH5HbHlwaFBhZ2UoKQpAQCAt
MTExLDcgKzExMSw3IEBAIHB1YmxpYzoKICAgICAgICAgR2x5cGggZ2x5cGggPSBtX2dseXBoc1tp
bmRleF07CiAgICAgICAgIGlmIChoYXNQZXJHbHlwaEZvbnREYXRhKCkpCiAgICAgICAgICAgICBy
ZXR1cm4gR2x5cGhEYXRhKGdseXBoLCBtX3BlckdseXBoRm9udERhdGFbaW5kZXhdKTsKLSAgICAg
ICAgcmV0dXJuIEdseXBoRGF0YShnbHlwaCwgZ2x5cGggPyBtX2ZvbnREYXRhRm9yQWxsR2x5cGhz
IDogMCk7CisgICAgICAgIHJldHVybiBHbHlwaERhdGEoZ2x5cGgsIGdseXBoID8gbV9mb250Rm9y
QWxsR2x5cGhzIDogMCk7CiAgICAgfQogCiAgICAgQUxXQVlTX0lOTElORSBHbHlwaCBnbHlwaEF0
KHVuc2lnbmVkIGluZGV4KSBjb25zdApAQCAtMTIwLDY3ICsxMjAsNjcgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gbV9nbHlwaHNbaW5kZXhdOwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUg
Y29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYykgY29u
c3QKKyAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IEZvbnQqIGZvbnRGb3JDaGFyYWN0ZXIoVUNoYXIz
MiBjKSBjb25zdAogICAgIHsKICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBpbmRleEZvckNoYXJh
Y3RlcihjKTsKICAgICAgICAgaWYgKGhhc1BlckdseXBoRm9udERhdGEoKSkKICAgICAgICAgICAg
IHJldHVybiBtX3BlckdseXBoRm9udERhdGFbaW5kZXhdOwotICAgICAgICByZXR1cm4gbV9nbHlw
aHNbaW5kZXhdID8gbV9mb250RGF0YUZvckFsbEdseXBocyA6IDA7CisgICAgICAgIHJldHVybiBt
X2dseXBoc1tpbmRleF0gPyBtX2ZvbnRGb3JBbGxHbHlwaHMgOiAwOwogICAgIH0KIAotICAgIHZv
aWQgc2V0R2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYywgR2x5cGggZywgY29uc3QgU2lt
cGxlRm9udERhdGEqIGYpCisgICAgdm9pZCBzZXRHbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIz
MiBjLCBHbHlwaCBnLCBjb25zdCBGb250KiBmKQogICAgIHsKICAgICAgICAgc2V0R2x5cGhEYXRh
Rm9ySW5kZXgoaW5kZXhGb3JDaGFyYWN0ZXIoYyksIGcsIGYpOwogICAgIH0KIAotICAgIHZvaWQg
c2V0R2x5cGhEYXRhRm9ySW5kZXgodW5zaWduZWQgaW5kZXgsIEdseXBoIGdseXBoLCBjb25zdCBT
aW1wbGVGb250RGF0YSogZm9udERhdGEpCisgICAgdm9pZCBzZXRHbHlwaERhdGFGb3JJbmRleCh1
bnNpZ25lZCBpbmRleCwgR2x5cGggZ2x5cGgsIGNvbnN0IEZvbnQqIGZvbnQpCiAgICAgewogICAg
ICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpbmRleCA8IHNpemUpOwogICAg
ICAgICBBU1NFUlQoIW1faXNJbW11dGFibGUpOwogICAgICAgICAKICAgICAgICAgbV9nbHlwaHNb
aW5kZXhdID0gZ2x5cGg7CiAKLSAgICAgICAgLy8gR2x5cGhQYWdlIGdldHRlcnMgd2lsbCBhbHdh
eXMgcmV0dXJuIGEgbnVsbCBTaW1wbGVGb250RGF0YSogZm9yIGdseXBoICMwIGlmIHRoZXJlJ3Mg
bm8gcGVyLWdseXBoIGZvbnQgYXJyYXkuCisgICAgICAgIC8vIEdseXBoUGFnZSBnZXR0ZXJzIHdp
bGwgYWx3YXlzIHJldHVybiBhIG51bGwgRm9udCogZm9yIGdseXBoICMwIGlmIHRoZXJlJ3Mgbm8g
cGVyLWdseXBoIGZvbnQgYXJyYXkuCiAgICAgICAgIGlmIChoYXNQZXJHbHlwaEZvbnREYXRhKCkp
IHsKLSAgICAgICAgICAgIG1fcGVyR2x5cGhGb250RGF0YVtpbmRleF0gPSBnbHlwaCA/IGZvbnRE
YXRhIDogMDsKKyAgICAgICAgICAgIG1fcGVyR2x5cGhGb250RGF0YVtpbmRleF0gPSBnbHlwaCA/
IGZvbnQgOiAwOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgLy8g
QSBzaW5nbGUtZm9udCBHbHlwaFBhZ2UgYWxyZWFkeSBhc3NpZ25lZCBtX2ZvbnREYXRhRm9yQWxs
R2x5cGhzIGluIHRoZSBjb25zdHJ1Y3Rvci4KLSAgICAgICAgQVNTRVJUKCFnbHlwaCB8fCBmb250
RGF0YSA9PSBtX2ZvbnREYXRhRm9yQWxsR2x5cGhzKTsKKyAgICAgICAgLy8gQSBzaW5nbGUtZm9u
dCBHbHlwaFBhZ2UgYWxyZWFkeSBhc3NpZ25lZCBtX2ZvbnRGb3JBbGxHbHlwaHMgaW4gdGhlIGNv
bnN0cnVjdG9yLgorICAgICAgICBBU1NFUlQoIWdseXBoIHx8IGZvbnQgPT0gbV9mb250Rm9yQWxs
R2x5cGhzKTsKICAgICB9CiAKICAgICB2b2lkIHNldEdseXBoRGF0YUZvckluZGV4KHVuc2lnbmVk
IGluZGV4LCBjb25zdCBHbHlwaERhdGEmIGdseXBoRGF0YSkKICAgICB7Ci0gICAgICAgIHNldEds
eXBoRGF0YUZvckluZGV4KGluZGV4LCBnbHlwaERhdGEuZ2x5cGgsIGdseXBoRGF0YS5mb250RGF0
YSk7CisgICAgICAgIHNldEdseXBoRGF0YUZvckluZGV4KGluZGV4LCBnbHlwaERhdGEuZ2x5cGgs
IGdseXBoRGF0YS5mb250KTsKICAgICB9CiAKICAgICAvLyBJbXBsZW1lbnRlZCBieSB0aGUgcGxh
dGZvcm0uCi0gICAgYm9vbCBmaWxsKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBV
Q2hhciogY2hhcmFjdGVyQnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IFNpbXBs
ZUZvbnREYXRhKik7CisgICAgYm9vbCBmaWxsKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVu
Z3RoLCBVQ2hhciogY2hhcmFjdGVyQnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0
IEZvbnQqKTsKICNpZiBQTEFURk9STShDT0NPQSkKLSAgICBzdGF0aWMgYm9vbCBtYXlVc2VNaXhl
ZEZvbnREYXRhV2hlbkZpbGxpbmcoY29uc3QgVUNoYXIqIGNoYXJhY3RlckJ1ZmZlciwgdW5zaWdu
ZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBTaW1wbGVGb250RGF0YSopOworICAgIHN0YXRpYyBib29s
IG1heVVzZU1peGVkRm9udHNXaGVuRmlsbGluZyhjb25zdCBVQ2hhciogY2hhcmFjdGVyQnVmZmVy
LCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IEZvbnQqKTsKICNlbHNlCi0gICAgc3RhdGlj
IGJvb2wgbWF5VXNlTWl4ZWRGb250RGF0YVdoZW5GaWxsaW5nKGNvbnN0IFVDaGFyKiwgdW5zaWdu
ZWQsIGNvbnN0IFNpbXBsZUZvbnREYXRhKikgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBzdGF0aWMg
Ym9vbCBtYXlVc2VNaXhlZEZvbnRzV2hlbkZpbGxpbmcoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCwg
Y29uc3QgRm9udCopIHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICBl
eHBsaWNpdCBHbHlwaFBhZ2UoY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhRm9yQWxsR2x5
cGhzKQotICAgICAgICA6IG1fZm9udERhdGFGb3JBbGxHbHlwaHMoZm9udERhdGFGb3JBbGxHbHlw
aHMpCisgICAgZXhwbGljaXQgR2x5cGhQYWdlKGNvbnN0IEZvbnQqIGZvbnRGb3JBbGxHbHlwaHMp
CisgICAgICAgIDogbV9mb250Rm9yQWxsR2x5cGhzKGZvbnRGb3JBbGxHbHlwaHMpCiAgICAgewog
ICAgICAgICBtZW1zZXQobV9nbHlwaHMsIDAsIHNpemVvZihtX2dseXBocykpOwogICAgICAgICBp
ZiAoaGFzUGVyR2x5cGhGb250RGF0YSgpKQotICAgICAgICAgICAgbWVtc2V0KG1fcGVyR2x5cGhG
b250RGF0YSwgMCwgc2l6ZW9mKFNpbXBsZUZvbnREYXRhKikgKiBHbHlwaFBhZ2U6OnNpemUpOwor
ICAgICAgICAgICAgbWVtc2V0KG1fcGVyR2x5cGhGb250RGF0YSwgMCwgc2l6ZW9mKEZvbnQqKSAq
IEdseXBoUGFnZTo6c2l6ZSk7CiAgICAgICAgICsrc19jb3VudDsKICAgICB9CiAKLSAgICBib29s
IGhhc1BlckdseXBoRm9udERhdGEoKSBjb25zdCB7IHJldHVybiAhbV9mb250RGF0YUZvckFsbEds
eXBoczsgfQorICAgIGJvb2wgaGFzUGVyR2x5cGhGb250RGF0YSgpIGNvbnN0IHsgcmV0dXJuICFt
X2ZvbnRGb3JBbGxHbHlwaHM7IH0KIAotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBtX2ZvbnRE
YXRhRm9yQWxsR2x5cGhzOworICAgIGNvbnN0IEZvbnQqIG1fZm9udEZvckFsbEdseXBoczsKICAg
ICBHbHlwaCBtX2dseXBoc1tzaXplXTsKIAogICAgIGJvb2wgbV9pc0ltbXV0YWJsZSB7IGZhbHNl
IH07Ci0gICAgLy8gTk9URTogVGhpcyBhcnJheSBoYXMgKEdseXBoUGFnZTo6c2l6ZSkgZWxlbWVu
dHMgaWYgbV9mb250RGF0YUZvckFsbEdseXBocyBpcyBudWxsLgotICAgIGNvbnN0IFNpbXBsZUZv
bnREYXRhKiBtX3BlckdseXBoRm9udERhdGFbMF07CisgICAgLy8gTk9URTogVGhpcyBhcnJheSBo
YXMgKEdseXBoUGFnZTo6c2l6ZSkgZWxlbWVudHMgaWYgbV9mb250Rm9yQWxsR2x5cGhzIGlzIG51
bGwuCisgICAgY29uc3QgRm9udCogbV9wZXJHbHlwaEZvbnREYXRhWzBdOwogCiAgICAgc3RhdGlj
IHVuc2lnbmVkIHNfY291bnQ7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCShyZXZpc2lvbiAxNzg1MTUpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NDgsMTIgKzQ0OCwxMiBAQCBmbG9hdCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdUZXh0KGNvbnN0IEZvCiB9CiAjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0
IFNpbXBsZUZvbnREYXRhJiBmb250RGF0YSwgY29uc3QgR2x5cGhCdWZmZXImIGJ1ZmZlciwgaW50
IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQordm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdHbHlwaHMoY29uc3QgRm9udENhc2NhZGUmIGZvbnRDYXNjYWRlLCBj
b25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYgYnVmZmVyLCBpbnQgZnJvbSwgaW50
IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCiB7CiAgICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZm9udC5kcmF3R2x5cGhzKHRoaXMs
ICZmb250RGF0YSwgYnVmZmVyLCBmcm9tLCBudW1HbHlwaHMsIHBvaW50KTsKKyAgICBmb250Q2Fz
Y2FkZS5kcmF3R2x5cGhzKHRoaXMsICZmb250LCBidWZmZXIsIGZyb20sIG51bUdseXBocywgcG9p
bnQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VtcGhhc2lzTWFya3MoY29uc3Qg
Rm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbWljU3RyaW5n
JiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dC5oCShyZXZpc2lvbiAxNzg1MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKICNpZiBVU0UoV0lOR0RJKQogICAgIGNsYXNzIFNoYXJlZEJpdG1h
cDsKLSAgICBjbGFzcyBTaW1wbGVGb250RGF0YTsKKyAgICBjbGFzcyBGb250OwogICAgIGNsYXNz
IEdseXBoQnVmZmVyOwogI2VuZGlmCiAKQEAgLTM2MCw3ICszNjAsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAjZWxzZQogICAgICAgICBmbG9hdCBkcmF3VGV4dChjb25zdCBGb250Q2FzY2FkZSYs
IGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20gPSAwLCBpbnQgdG8g
PSAtMSk7CiAjZW5kaWYKLSAgICAgICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnRDYXNjYWRl
JiwgY29uc3QgU2ltcGxlRm9udERhdGEmLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBmcm9tLCBp
bnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50Jik7CisgICAgICAgIHZvaWQgZHJhd0dseXBo
cyhjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGlu
dCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50Jik7CiAgICAgICAgIHZvaWQg
ZHJhd0VtcGhhc2lzTWFya3MoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiAsIGNv
bnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tID0gMCwg
aW50IHRvID0gLTEpOwogI2lmICFQTEFURk9STShJT1MpCiAgICAgICAgIHZvaWQgZHJhd0JpZGlU
ZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQm
LCBGb250Q2FzY2FkZTo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID0gRm9udENhc2NhZGU6OkRv
Tm90UGFpbnRJZkZvbnROb3RSZWFkeSk7CkBAIC00NzksNyArNDc5LDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICBBZmZpbmVUcmFuc2Zvcm0mIGFmZmluZVRyYW5zZm9ybSgpOwogICAg
ICAgICB2b2lkIHJlc2V0QWZmaW5lVHJhbnNmb3JtKCk7CiAgICAgICAgIHZvaWQgZmlsbFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiwgY29uc3QgR3JhZGllbnQqKTsKLSAgICAgICAgdm9pZCBkcmF3VGV4
dChjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlw
aEJ1ZmZlciwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
KTsKKyAgICAgICAgdm9pZCBkcmF3VGV4dChjb25zdCBGb250KiwgY29uc3QgR2x5cGhCdWZmZXIm
LCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYpOwogICAgICAgICB2
b2lkIGRyYXdGcmFtZUNvbnRyb2woY29uc3QgSW50UmVjdCYgcmVjdCwgdW5zaWduZWQgdHlwZSwg
dW5zaWduZWQgc3RhdGUpOwogICAgICAgICB2b2lkIGRyYXdGb2N1c1JlY3QoY29uc3QgSW50UmVj
dCYgcmVjdCk7CiAgICAgICAgIHZvaWQgcGFpbnRUZXh0RmllbGQoY29uc3QgSW50UmVjdCYgcmVj
dCwgdW5zaWduZWQgc3RhdGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvU2ltcGxlRm9udERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmNwcAkocmV2aXNpb24gMTc4NTE1KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDQ1NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA4
LCAyMDEwLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMu
ICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMg
b2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2lt
cGxlRm9udERhdGEuaCIKLQotI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYg
X19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+IDEwODApCi0jaW5jbHVkZSAiQ29yZVRl
eHRTUEkuaCIKLSNlbmRpZgotI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgotI2luY2x1ZGUgIkZvbnRD
YXNjYWRlLmgiCi0jaW5jbHVkZSAiT3BlblR5cGVNYXRoRGF0YS5oIgotI2luY2x1ZGUgPHd0Zi9N
YXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0KLSNpZiBFTkFC
TEUoT1BFTlRZUEVfVkVSVElDQUwpCi0jaW5jbHVkZSAiT3BlblR5cGVWZXJ0aWNhbERhdGEuaCIK
LSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXVuc2lnbmVkIEdseXBoUGFnZTo6c19j
b3VudCA9IDA7Ci0KLWNvbnN0IGZsb2F0IHNtYWxsQ2Fwc0ZvbnRTaXplTXVsdGlwbGllciA9IDAu
N2Y7Ci1jb25zdCBmbG9hdCBlbXBoYXNpc01hcmtGb250U2l6ZU11bHRpcGxpZXIgPSAwLjVmOwot
Ci1TaW1wbGVGb250RGF0YTo6U2ltcGxlRm9udERhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYg
cGxhdGZvcm1EYXRhLCBib29sIGlzQ3VzdG9tRm9udCwgYm9vbCBpc0xvYWRpbmcsIGJvb2wgaXNU
ZXh0T3JpZW50YXRpb25GYWxsYmFjaykKLSAgICA6IG1fbWF4Q2hhcldpZHRoKC0xKQotICAgICwg
bV9hdmdDaGFyV2lkdGgoLTEpCi0gICAgLCBtX3BsYXRmb3JtRGF0YShwbGF0Zm9ybURhdGEpCi0g
ICAgLCBtX3RyZWF0QXNGaXhlZFBpdGNoKGZhbHNlKQotICAgICwgbV9pc0N1c3RvbUZvbnQoaXND
dXN0b21Gb250KQotICAgICwgbV9pc0xvYWRpbmcoaXNMb2FkaW5nKQotICAgICwgbV9pc1RleHRP
cmllbnRhdGlvbkZhbGxiYWNrKGlzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2spCi0gICAgLCBtX2lz
QnJva2VuSWRlb2dyYXBoRmFsbGJhY2soZmFsc2UpCi0gICAgLCBtX21hdGhEYXRhKG51bGxwdHIp
Ci0jaWYgRU5BQkxFKE9QRU5UWVBFX1ZFUlRJQ0FMKQotICAgICwgbV92ZXJ0aWNhbERhdGEoMCkK
LSNlbmRpZgotICAgICwgbV9oYXNWZXJ0aWNhbEdseXBocyhmYWxzZSkKLXsKLSAgICBwbGF0Zm9y
bUluaXQoKTsKLSAgICBwbGF0Zm9ybUdseXBoSW5pdCgpOwotICAgIHBsYXRmb3JtQ2hhcldpZHRo
SW5pdCgpOwotI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKLSAgICBpZiAocGxhdGZvcm1E
YXRhLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwgJiYgIWlzVGV4dE9yaWVudGF0aW9uRmFsbGJh
Y2spIHsKLSAgICAgICAgbV92ZXJ0aWNhbERhdGEgPSBwbGF0Zm9ybURhdGEudmVydGljYWxEYXRh
KCk7Ci0gICAgICAgIG1faGFzVmVydGljYWxHbHlwaHMgPSBtX3ZlcnRpY2FsRGF0YS5nZXQoKSAm
JiBtX3ZlcnRpY2FsRGF0YS0+aGFzVmVydGljYWxNZXRyaWNzKCk7Ci0gICAgfQotI2VuZGlmCi19
Ci0KLVNpbXBsZUZvbnREYXRhOjpTaW1wbGVGb250RGF0YShzdGQ6OnVuaXF1ZV9wdHI8U1ZHRGF0
YT4gc3ZnRGF0YSwgZmxvYXQgZm9udFNpemUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50
aGV0aWNJdGFsaWMpCi0gICAgOiBtX3BsYXRmb3JtRGF0YShGb250UGxhdGZvcm1EYXRhKGZvbnRT
aXplLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMpKQotICAgICwgbV9zdmdEYXRhKFdU
Rjo6bW92ZShzdmdEYXRhKSkKLSAgICAsIG1fdHJlYXRBc0ZpeGVkUGl0Y2goZmFsc2UpCi0gICAg
LCBtX2lzQ3VzdG9tRm9udCh0cnVlKQotICAgICwgbV9pc0xvYWRpbmcoZmFsc2UpCi0gICAgLCBt
X2lzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2soZmFsc2UpCi0gICAgLCBtX2lzQnJva2VuSWRlb2dy
YXBoRmFsbGJhY2soZmFsc2UpCi0gICAgLCBtX21hdGhEYXRhKG51bGxwdHIpCi0jaWYgRU5BQkxF
KE9QRU5UWVBFX1ZFUlRJQ0FMKQotICAgICwgbV92ZXJ0aWNhbERhdGEoMCkKLSNlbmRpZgotICAg
ICwgbV9oYXNWZXJ0aWNhbEdseXBocyhmYWxzZSkKLSNpZiBQTEFURk9STShJT1MpCi0gICAgLCBt
X3Nob3VsZE5vdEJlVXNlZEZvckFyYWJpYyhmYWxzZSkKLSNlbmRpZgotewotICAgIG1fc3ZnRGF0
YS0+aW5pdGlhbGl6ZUZvbnREYXRhKHRoaXMsIGZvbnRTaXplKTsKLX0KLQotLy8gRXN0aW1hdGVz
IG9mIGF2Z0NoYXJXaWR0aCBhbmQgbWF4Q2hhcldpZHRoIGZvciBwbGF0Zm9ybXMgdGhhdCBkb24n
dCBzdXBwb3J0IGFjY2Vzc2luZyB0aGVzZSB2YWx1ZXMgZnJvbSB0aGUgZm9udC4KLXZvaWQgU2lt
cGxlRm9udERhdGE6OmluaXRDaGFyV2lkdGhzKCkKLXsKLSAgICBhdXRvKiBnbHlwaFBhZ2VaZXJv
ID0gZ2x5cGhQYWdlKDApOwotCi0gICAgLy8gVHJlYXQgdGhlIHdpZHRoIG9mIGEgJzAnIGFzIHRo
ZSBhdmdDaGFyV2lkdGguCi0gICAgaWYgKG1fYXZnQ2hhcldpZHRoIDw9IDAuZiAmJiBnbHlwaFBh
Z2VaZXJvKSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBVQ2hhcjMyIGRpZ2l0WmVyb0NoYXIgPSAn
MCc7Ci0gICAgICAgIEdseXBoIGRpZ2l0WmVyb0dseXBoID0gZ2x5cGhQYWdlWmVyby0+Z2x5cGhE
YXRhRm9yQ2hhcmFjdGVyKGRpZ2l0WmVyb0NoYXIpLmdseXBoOwotICAgICAgICBpZiAoZGlnaXRa
ZXJvR2x5cGgpCi0gICAgICAgICAgICBtX2F2Z0NoYXJXaWR0aCA9IHdpZHRoRm9yR2x5cGgoZGln
aXRaZXJvR2x5cGgpOwotICAgIH0KLQotICAgIC8vIElmIHdlIGNhbid0IHJldHJpZXZlIHRoZSB3
aWR0aCBvZiBhICcwJywgZmFsbCBiYWNrIHRvIHRoZSB4IGhlaWdodC4KLSAgICBpZiAobV9hdmdD
aGFyV2lkdGggPD0gMC5mKQotICAgICAgICBtX2F2Z0NoYXJXaWR0aCA9IG1fZm9udE1ldHJpY3Mu
eEhlaWdodCgpOwotCi0gICAgaWYgKG1fbWF4Q2hhcldpZHRoIDw9IDAuZikKLSAgICAgICAgbV9t
YXhDaGFyV2lkdGggPSBzdGQ6Om1heChtX2F2Z0NoYXJXaWR0aCwgbV9mb250TWV0cmljcy5mbG9h
dEFzY2VudCgpKTsKLX0KLQotdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1HbHlwaEluaXQo
KQotewotICAgIGF1dG8qIGdseXBoUGFnZVplcm8gPSBnbHlwaFBhZ2UoMCk7Ci0gICAgaWYgKCFn
bHlwaFBhZ2VaZXJvKSB7Ci0gICAgICAgIG1fc3BhY2VHbHlwaCA9IDA7Ci0gICAgICAgIG1fc3Bh
Y2VXaWR0aCA9IDA7Ci0gICAgICAgIG1femVyb0dseXBoID0gMDsKLSAgICAgICAgbV9hZGp1c3Rl
ZFNwYWNlV2lkdGggPSAwOwotICAgICAgICBkZXRlcm1pbmVQaXRjaCgpOwotICAgICAgICBtX3pl
cm9XaWR0aFNwYWNlR2x5cGggPSAwOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8g
QXNrIGZvciB0aGUgZ2x5cGggZm9yIDAgdG8gYXZvaWQgcGFnaW5nIGluIFpFUk8gV0lEVEggU1BB
Q0UuIENvbnRyb2wgY2hhcmFjdGVycywgaW5jbHVkaW5nIDAsCi0gICAgLy8gYXJlIG1hcHBlZCB0
byB0aGUgWkVSTyBXSURUSCBTUEFDRSBnbHlwaC4KLSAgICBtX3plcm9XaWR0aFNwYWNlR2x5cGgg
PSBnbHlwaFBhZ2VaZXJvLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoMCkuZ2x5cGg7Ci0KLSAgICAv
LyBOYXN0eSBoYWNrIHRvIGRldGVybWluZSBpZiB3ZSBzaG91bGQgcm91bmQgb3IgY2VpbCBzcGFj
ZSB3aWR0aHMuCi0gICAgLy8gSWYgdGhlIGZvbnQgaXMgbW9ub3NwYWNlIG9yIGZha2UgbW9ub3Nw
YWNlIHdlIGNlaWwgdG8gZW5zdXJlIHRoYXQgCi0gICAgLy8gZXZlcnkgY2hhcmFjdGVyIGFuZCB0
aGUgc3BhY2UgYXJlIHRoZSBzYW1lIHdpZHRoLiAgT3RoZXJ3aXNlIHdlIHJvdW5kLgotICAgIG1f
c3BhY2VHbHlwaCA9IGdseXBoUGFnZVplcm8tPmdseXBoRGF0YUZvckNoYXJhY3RlcignICcpLmds
eXBoOwotICAgIGZsb2F0IHdpZHRoID0gd2lkdGhGb3JHbHlwaChtX3NwYWNlR2x5cGgpOwotICAg
IG1fc3BhY2VXaWR0aCA9IHdpZHRoOwotICAgIG1femVyb0dseXBoID0gZ2x5cGhQYWdlWmVyby0+
Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKCcwJykuZ2x5cGg7Ci0gICAgbV9mb250TWV0cmljcy5zZXRa
ZXJvV2lkdGgod2lkdGhGb3JHbHlwaChtX3plcm9HbHlwaCkpOwotICAgIGRldGVybWluZVBpdGNo
KCk7Ci0gICAgbV9hZGp1c3RlZFNwYWNlV2lkdGggPSBtX3RyZWF0QXNGaXhlZFBpdGNoID8gY2Vp
bGYod2lkdGgpIDogcm91bmRmKHdpZHRoKTsKLQotICAgIC8vIEZvcmNlIHRoZSBnbHlwaCBmb3Ig
WkVSTyBXSURUSCBTUEFDRSB0byBoYXZlIHplcm8gd2lkdGgsIHVubGVzcyBpdCBpcyBzaGFyZWQg
d2l0aCBTUEFDRS4KLSAgICAvLyBIZWx2ZXRpY2EgaXMgYW4gZXhhbXBsZSBvZiBhIG5vbi16ZXJv
IHdpZHRoIFpFUk8gV0lEVEggU1BBQ0UgZ2x5cGguCi0gICAgLy8gU2VlIDxodHRwOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzE3OD4gYW5kIFNpbXBsZUZvbnREYXRhOjppc1pl
cm9XaWR0aFNwYWNlR2x5cGgoKQotICAgIGlmIChtX3plcm9XaWR0aFNwYWNlR2x5cGggPT0gbV9z
cGFjZUdseXBoKQotICAgICAgICBtX3plcm9XaWR0aFNwYWNlR2x5cGggPSAwOwotfQotCi1TaW1w
bGVGb250RGF0YTo6flNpbXBsZUZvbnREYXRhKCkKLXsKLSAgICByZW1vdmVGcm9tU3lzdGVtRmFs
bGJhY2tDYWNoZSgpOwotfQotCi1zdGF0aWMgYm9vbCBmaWxsR2x5cGhQYWdlKEdseXBoUGFnZSYg
cGFnZVRvRmlsbCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBidWZm
ZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRh
KQotewotI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0gICAgaWYgKGF1dG8qIHN2Z0RhdGEgPSBmb250
RGF0YS0+c3ZnRGF0YSgpKQotICAgICAgICByZXR1cm4gc3ZnRGF0YS0+ZmlsbFNWR0dseXBoUGFn
ZSgmcGFnZVRvRmlsbCwgb2Zmc2V0LCBsZW5ndGgsIGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCBmb250
RGF0YSk7Ci0jZW5kaWYKLSAgICBib29sIGhhc0dseXBocyA9IHBhZ2VUb0ZpbGwuZmlsbChvZmZz
ZXQsIGxlbmd0aCwgYnVmZmVyLCBidWZmZXJMZW5ndGgsIGZvbnREYXRhKTsKLSNpZiBFTkFCTEUo
T1BFTlRZUEVfVkVSVElDQUwpCi0gICAgaWYgKGhhc0dseXBocyAmJiBmb250RGF0YS0+dmVydGlj
YWxEYXRhKCkpCi0gICAgICAgIGZvbnREYXRhLT52ZXJ0aWNhbERhdGEoKS0+c3Vic3RpdHV0ZVdp
dGhWZXJ0aWNhbEdseXBocyhmb250RGF0YSwgJnBhZ2VUb0ZpbGwsIG9mZnNldCwgbGVuZ3RoKTsK
LSNlbmRpZgotICAgIHJldHVybiBoYXNHbHlwaHM7Ci19Ci0KLXN0YXRpYyBSZWZQdHI8R2x5cGhQ
YWdlPiBjcmVhdGVBbmRGaWxsR2x5cGhQYWdlKHVuc2lnbmVkIHBhZ2VOdW1iZXIsIGNvbnN0IFNp
bXBsZUZvbnREYXRhKiBmb250RGF0YSkKLXsKLSNpZiBQTEFURk9STShJT1MpCi0gICAgLy8gRklY
TUU6IFRpbWVzIE5ldyBSb21hbiBjb250YWlucyBBcmFiaWMgZ2x5cGhzLCBidXQgQ29yZSBUZXh0
IGRvZXNuJ3Qga25vdyBob3cgdG8gc2hhcGUgdGhlbS4gU2VlIDxyZGFyOi8vcHJvYmxlbS85ODIz
OTc1Pi4KLSAgICAvLyBPbmNlIHdlIGhhdmUgdGhlIGZpeCBmb3IgPHJkYXI6Ly9wcm9ibGVtLzk4
MjM5NzU+IHRoZW4gcmVtb3ZlIHRoaXMgY29kZSB0b2dldGhlciB3aXRoIFNpbXBsZUZvbnREYXRh
OjpzaG91bGROb3RCZVVzZWRGb3JBcmFiaWMoKQotICAgIC8vIGluIDxyZGFyOi8vcHJvYmxlbS8x
MjA5NjgzNT4uCi0gICAgaWYgKHBhZ2VOdW1iZXIgPT0gNiAmJiBmb250RGF0YS0+c2hvdWxkTm90
QmVVc2VkRm9yQXJhYmljKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotI2VuZGlmCi0KLSAg
ICB1bnNpZ25lZCBzdGFydCA9IHBhZ2VOdW1iZXIgKiBHbHlwaFBhZ2U6OnNpemU7Ci0gICAgVUNo
YXIgYnVmZmVyW0dseXBoUGFnZTo6c2l6ZSAqIDIgKyAyXTsKLSAgICB1bnNpZ25lZCBidWZmZXJM
ZW5ndGg7Ci0gICAgLy8gRmlsbCBpbiBhIGJ1ZmZlciB3aXRoIHRoZSBlbnRpcmUgInBhZ2UiIG9m
IGNoYXJhY3RlcnMgdGhhdCB3ZSB3YW50IHRvIGxvb2sgdXAgZ2x5cGhzIGZvci4KLSAgICBpZiAo
VV9JU19CTVAoc3RhcnQpKSB7Ci0gICAgICAgIGJ1ZmZlckxlbmd0aCA9IEdseXBoUGFnZTo6c2l6
ZTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdseXBoUGFnZTo6c2l6ZTsgaSsr
KQotICAgICAgICAgICAgYnVmZmVyW2ldID0gc3RhcnQgKyBpOwotCi0gICAgICAgIGlmIChzdGFy
dCA9PSAwKSB7Ci0gICAgICAgICAgICAvLyBDb250cm9sIGNoYXJhY3RlcnMgbXVzdCBub3QgcmVu
ZGVyIGF0IGFsbC4KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAweDIwOyAr
K2kpCi0gICAgICAgICAgICAgICAgYnVmZmVyW2ldID0gemVyb1dpZHRoU3BhY2U7Ci0gICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAweDdGOyBpIDwgMHhBMDsgaSsrKQotICAgICAgICAgICAg
ICAgIGJ1ZmZlcltpXSA9IHplcm9XaWR0aFNwYWNlOwotICAgICAgICAgICAgYnVmZmVyW3NvZnRI
eXBoZW5dID0gemVyb1dpZHRoU3BhY2U7Ci0KLSAgICAgICAgICAgIC8vIFxuLCBcdCwgYW5kIG5v
bmJyZWFraW5nIHNwYWNlIG11c3QgcmVuZGVyIGFzIGEgc3BhY2UuCi0gICAgICAgICAgICBidWZm
ZXJbKGludCknXG4nXSA9ICcgJzsKLSAgICAgICAgICAgIGJ1ZmZlclsoaW50KSdcdCddID0gJyAn
OwotICAgICAgICAgICAgYnVmZmVyW25vQnJlYWtTcGFjZV0gPSAnICc7Ci0gICAgICAgIH0gZWxz
ZSBpZiAoc3RhcnQgPT0gKGxlZnRUb1JpZ2h0TWFyayAmIH4oR2x5cGhQYWdlOjpzaXplIC0gMSkp
KSB7Ci0gICAgICAgICAgICAvLyBMUk0sIFJMTSwgTFJFLCBSTEUsIFpXTkosIFpXSiwgYW5kIFBE
RiBtdXN0IG5vdCByZW5kZXIgYXQgYWxsLgotICAgICAgICAgICAgYnVmZmVyW2xlZnRUb1JpZ2h0
TWFyayAtIHN0YXJ0XSA9IHplcm9XaWR0aFNwYWNlOwotICAgICAgICAgICAgYnVmZmVyW3JpZ2h0
VG9MZWZ0TWFyayAtIHN0YXJ0XSA9IHplcm9XaWR0aFNwYWNlOwotICAgICAgICAgICAgYnVmZmVy
W2xlZnRUb1JpZ2h0RW1iZWQgLSBzdGFydF0gPSB6ZXJvV2lkdGhTcGFjZTsKLSAgICAgICAgICAg
IGJ1ZmZlcltyaWdodFRvTGVmdEVtYmVkIC0gc3RhcnRdID0gemVyb1dpZHRoU3BhY2U7Ci0gICAg
ICAgICAgICBidWZmZXJbbGVmdFRvUmlnaHRPdmVycmlkZSAtIHN0YXJ0XSA9IHplcm9XaWR0aFNw
YWNlOwotICAgICAgICAgICAgYnVmZmVyW3JpZ2h0VG9MZWZ0T3ZlcnJpZGUgLSBzdGFydF0gPSB6
ZXJvV2lkdGhTcGFjZTsKLSAgICAgICAgICAgIGJ1ZmZlclt6ZXJvV2lkdGhOb25Kb2luZXIgLSBz
dGFydF0gPSB6ZXJvV2lkdGhTcGFjZTsKLSAgICAgICAgICAgIGJ1ZmZlclt6ZXJvV2lkdGhKb2lu
ZXIgLSBzdGFydF0gPSB6ZXJvV2lkdGhTcGFjZTsKLSAgICAgICAgICAgIGJ1ZmZlcltwb3BEaXJl
Y3Rpb25hbEZvcm1hdHRpbmcgLSBzdGFydF0gPSB6ZXJvV2lkdGhTcGFjZTsKLSAgICAgICAgfSBl
bHNlIGlmIChzdGFydCA9PSAob2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXIgJiB+KEdseXBoUGFn
ZTo6c2l6ZSAtIDEpKSkgewotICAgICAgICAgICAgLy8gT2JqZWN0IHJlcGxhY2VtZW50IGNoYXJh
Y3RlciBtdXN0IG5vdCByZW5kZXIgYXQgYWxsLgotICAgICAgICAgICAgYnVmZmVyW29iamVjdFJl
cGxhY2VtZW50Q2hhcmFjdGVyIC0gc3RhcnRdID0gemVyb1dpZHRoU3BhY2U7Ci0gICAgICAgIH0g
ZWxzZSBpZiAoc3RhcnQgPT0gKHplcm9XaWR0aE5vQnJlYWtTcGFjZSAmIH4oR2x5cGhQYWdlOjpz
aXplIC0gMSkpKSB7Ci0gICAgICAgICAgICAvLyBaV05CUy9CT00gbXVzdCBub3QgcmVuZGVyIGF0
IGFsbC4KLSAgICAgICAgICAgIGJ1ZmZlclt6ZXJvV2lkdGhOb0JyZWFrU3BhY2UgLSBzdGFydF0g
PSB6ZXJvV2lkdGhTcGFjZTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGJ1ZmZl
ckxlbmd0aCA9IEdseXBoUGFnZTo6c2l6ZSAqIDI7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBHbHlwaFBhZ2U6OnNpemU7IGkrKykgewotICAgICAgICAgICAgaW50IGMgPSBpICsg
c3RhcnQ7Ci0gICAgICAgICAgICBidWZmZXJbaSAqIDJdID0gVTE2X0xFQUQoYyk7Ci0gICAgICAg
ICAgICBidWZmZXJbaSAqIDIgKyAxXSA9IFUxNl9UUkFJTChjKTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUgYSBidWZmZXIgZnVsbCBvZiBjaGFyYWN0ZXJzLCB3
ZSB3YW50IHRvIGdldCBiYWNrIGFuIGFycmF5Ci0gICAgLy8gb2YgZ2x5cGggaW5kaWNlcy4gVGhp
cyBwYXJ0IGludm9sdmVzIGNhbGxpbmcgaW50byB0aGUgcGxhdGZvcm0tc3BlY2lmaWMKLSAgICAv
LyByb3V0aW5lIG9mIG91ciBnbHlwaCBtYXAgZm9yIGFjdHVhbGx5IGZpbGxpbmcgaW4gdGhlIHBh
Z2Ugd2l0aCB0aGUgZ2x5cGhzLgotICAgIC8vIFN1Y2Nlc3MgaXMgbm90IGd1YXJhbnRlZWQuIEZv
ciBleGFtcGxlLCBUaW1lcyBmYWlscyB0byBmaWxsIHBhZ2UgMjYwLCBnaXZpbmcgZ2x5cGggZGF0
YQotICAgIC8vIGZvciBvbmx5IDEyOCBvdXQgb2YgMjU2IGNoYXJhY3RlcnMuCi0gICAgUmVmUHRy
PEdseXBoUGFnZT4gZ2x5cGhQYWdlOwotICAgIGlmIChHbHlwaFBhZ2U6Om1heVVzZU1peGVkRm9u
dERhdGFXaGVuRmlsbGluZyhidWZmZXIsIGJ1ZmZlckxlbmd0aCwgZm9udERhdGEpKQotICAgICAg
ICBnbHlwaFBhZ2UgPSBHbHlwaFBhZ2U6OmNyZWF0ZUZvck1peGVkRm9udERhdGEoKTsKLSAgICBl
bHNlCi0gICAgICAgIGdseXBoUGFnZSA9IEdseXBoUGFnZTo6Y3JlYXRlRm9yU2luZ2xlRm9udERh
dGEoZm9udERhdGEpOwotCi0gICAgYm9vbCBoYXZlR2x5cGhzID0gZmlsbEdseXBoUGFnZSgqZ2x5
cGhQYWdlLCAwLCBHbHlwaFBhZ2U6OnNpemUsIGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCBmb250RGF0
YSk7Ci0gICAgaWYgKCFoYXZlR2x5cGhzKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
IGdseXBoUGFnZS0+c2V0SW1tdXRhYmxlKCk7Ci0gICAgcmV0dXJuIGdseXBoUGFnZTsKLX0KLQot
Y29uc3QgR2x5cGhQYWdlKiBTaW1wbGVGb250RGF0YTo6Z2x5cGhQYWdlKHVuc2lnbmVkIHBhZ2VO
dW1iZXIpIGNvbnN0Ci17Ci0gICAgaWYgKHBhZ2VOdW1iZXIgPT0gMCkgewotICAgICAgICBpZiAo
IW1fZ2x5cGhQYWdlWmVybykKLSAgICAgICAgICAgIG1fZ2x5cGhQYWdlWmVybyA9IGNyZWF0ZUFu
ZEZpbGxHbHlwaFBhZ2UoMCwgdGhpcyk7Ci0gICAgICAgIHJldHVybiBtX2dseXBoUGFnZVplcm8u
Z2V0KCk7Ci0gICAgfQotICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9nbHlwaFBhZ2VzLmFkZChwYWdl
TnVtYmVyLCBudWxscHRyKTsKLSAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAg
IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBjcmVhdGVBbmRGaWxsR2x5cGhQYWdlKHBhZ2VO
dW1iZXIsIHRoaXMpOwotCi0gICAgcmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0
KCk7Ci19Ci0KLUdseXBoIFNpbXBsZUZvbnREYXRhOjpnbHlwaEZvckNoYXJhY3RlcihVQ2hhcjMy
IGNoYXJhY3RlcikgY29uc3QKLXsKLSAgICBhdXRvKiBwYWdlID0gZ2x5cGhQYWdlKGNoYXJhY3Rl
ciAvIEdseXBoUGFnZTo6c2l6ZSk7Ci0gICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1cm4gMDsK
LSAgICByZXR1cm4gcGFnZS0+Z2x5cGhBdChjaGFyYWN0ZXIgJSBHbHlwaFBhZ2U6OnNpemUpOwot
fQotCi1HbHlwaERhdGEgU2ltcGxlRm9udERhdGE6OmdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hh
cjMyIGNoYXJhY3RlcikgY29uc3QKLXsKLSAgICBhdXRvKiBwYWdlID0gZ2x5cGhQYWdlKGNoYXJh
Y3RlciAvIEdseXBoUGFnZTo6c2l6ZSk7Ci0gICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1cm4g
R2x5cGhEYXRhKCk7Ci0gICAgcmV0dXJuIHBhZ2UtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFy
YWN0ZXIpOwotfQotCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6
dmVydGljYWxSaWdodE9yaWVudGF0aW9uRm9udERhdGEoKSBjb25zdAotewotICAgIGlmICghbV9k
ZXJpdmVkRm9udERhdGEpCi0gICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gc3RkOjptYWtlX3Vu
aXF1ZTxEZXJpdmVkRm9udERhdGE+KGlzQ3VzdG9tRm9udCgpKTsKLSAgICBpZiAoIW1fZGVyaXZl
ZEZvbnREYXRhLT52ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb24pIHsKLSAgICAgICAgRm9udFBsYXRm
b3JtRGF0YSB2ZXJ0aWNhbFJpZ2h0UGxhdGZvcm1EYXRhKG1fcGxhdGZvcm1EYXRhKTsKLSAgICAg
ICAgdmVydGljYWxSaWdodFBsYXRmb3JtRGF0YS5zZXRPcmllbnRhdGlvbihIb3Jpem9udGFsKTsK
LSAgICAgICAgbV9kZXJpdmVkRm9udERhdGEtPnZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbiA9IGNy
ZWF0ZSh2ZXJ0aWNhbFJpZ2h0UGxhdGZvcm1EYXRhLCBpc0N1c3RvbUZvbnQoKSwgZmFsc2UsIHRy
dWUpOwotICAgIH0KLSAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPnZlcnRpY2FsUmlnaHRP
cmllbnRhdGlvbjsKLX0KLQotUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERh
dGE6OnVwcmlnaHRPcmllbnRhdGlvbkZvbnREYXRhKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fZGVy
aXZlZEZvbnREYXRhKQotICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IHN0ZDo6bWFrZV91bmlx
dWU8RGVyaXZlZEZvbnREYXRhPihpc0N1c3RvbUZvbnQoKSk7Ci0gICAgaWYgKCFtX2Rlcml2ZWRG
b250RGF0YS0+dXByaWdodE9yaWVudGF0aW9uKQotICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+
dXByaWdodE9yaWVudGF0aW9uID0gY3JlYXRlKG1fcGxhdGZvcm1EYXRhLCBpc0N1c3RvbUZvbnQo
KSwgZmFsc2UsIHRydWUpOwotICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+dXByaWdodE9y
aWVudGF0aW9uOwotfQotCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0
YTo6c21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24pIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKLSAgICAgICAgbV9kZXJp
dmVkRm9udERhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPERlcml2ZWRGb250RGF0YT4oaXNDdXN0b21G
b250KCkpOwotICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2FwcykKLSAgICAgICAg
bV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2FwcyA9IGNyZWF0ZVNjYWxlZEZvbnREYXRhKGZvbnRE
ZXNjcmlwdGlvbiwgc21hbGxDYXBzRm9udFNpemVNdWx0aXBsaWVyKTsKLQotICAgIHJldHVybiBt
X2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzOwotfQotCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnRE
YXRhPiBTaW1wbGVGb250RGF0YTo6ZW1waGFzaXNNYXJrRm9udERhdGEoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2Rlcml2ZWRGb250
RGF0YSkKLSAgICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPERlcml2
ZWRGb250RGF0YT4oaXNDdXN0b21Gb250KCkpOwotICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEt
PmVtcGhhc2lzTWFyaykKLSAgICAgICAgbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyayA9
IGNyZWF0ZVNjYWxlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgZW1waGFzaXNNYXJrRm9udFNp
emVNdWx0aXBsaWVyKTsKLQotICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNN
YXJrOwotfQotCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6YnJv
a2VuSWRlb2dyYXBoRm9udERhdGEoKSBjb25zdAotewotICAgIGlmICghbV9kZXJpdmVkRm9udERh
dGEpCi0gICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxEZXJpdmVk
Rm9udERhdGE+KGlzQ3VzdG9tRm9udCgpKTsKLSAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhLT5i
cm9rZW5JZGVvZ3JhcGgpIHsKLSAgICAgICAgbV9kZXJpdmVkRm9udERhdGEtPmJyb2tlbklkZW9n
cmFwaCA9IGNyZWF0ZShtX3BsYXRmb3JtRGF0YSwgaXNDdXN0b21Gb250KCksIGZhbHNlKTsKLSAg
ICAgICAgbV9kZXJpdmVkRm9udERhdGEtPmJyb2tlbklkZW9ncmFwaC0+bV9pc0Jyb2tlbklkZW9n
cmFwaEZhbGxiYWNrID0gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRh
LT5icm9rZW5JZGVvZ3JhcGg7Ci19Ci0KLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBs
ZUZvbnREYXRhOjpub25TeW50aGV0aWNJdGFsaWNGb250RGF0YSgpIGNvbnN0Ci17Ci0gICAgaWYg
KCFtX2Rlcml2ZWRGb250RGF0YSkKLSAgICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBzdGQ6Om1h
a2VfdW5pcXVlPERlcml2ZWRGb250RGF0YT4oaXNDdXN0b21Gb250KCkpOwotICAgIGlmICghbV9k
ZXJpdmVkRm9udERhdGEtPm5vblN5bnRoZXRpY0l0YWxpYykgewotICAgICAgICBGb250UGxhdGZv
cm1EYXRhIG5vblN5bnRoZXRpY0l0YWxpY0ZvbnRQbGF0Zm9ybURhdGEobV9wbGF0Zm9ybURhdGEp
OwotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgICAgICBub25TeW50aGV0aWNJdGFsaWNGb250UGxh
dGZvcm1EYXRhLm1fc3ludGhldGljT2JsaXF1ZSA9IGZhbHNlOwotI2VuZGlmCi0gICAgICAgIG1f
ZGVyaXZlZEZvbnREYXRhLT5ub25TeW50aGV0aWNJdGFsaWMgPSBjcmVhdGUobm9uU3ludGhldGlj
SXRhbGljRm9udFBsYXRmb3JtRGF0YSwgaXNDdXN0b21Gb250KCkpOwotICAgIH0KLSAgICByZXR1
cm4gbV9kZXJpdmVkRm9udERhdGEtPm5vblN5bnRoZXRpY0l0YWxpYzsKLX0KLQotI2lmbmRlZiBO
REVCVUcKLVN0cmluZyBTaW1wbGVGb250RGF0YTo6ZGVzY3JpcHRpb24oKSBjb25zdAotewotICAg
IGlmIChpc1NWR0ZvbnQoKSkKLSAgICAgICAgcmV0dXJuICJbU1ZHIGZvbnRdIjsKLSAgICBpZiAo
aXNDdXN0b21Gb250KCkpCi0gICAgICAgIHJldHVybiAiW2N1c3RvbSBmb250XSI7Ci0KLSAgICBy
ZXR1cm4gcGxhdGZvcm1EYXRhKCkuZGVzY3JpcHRpb24oKTsKLX0KLSNlbmRpZgotCi1jb25zdCBP
cGVuVHlwZU1hdGhEYXRhKiBTaW1wbGVGb250RGF0YTo6bWF0aERhdGEoKSBjb25zdAotewotICAg
IGlmIChtX2lzTG9hZGluZykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgaWYgKCFtX21h
dGhEYXRhKSB7Ci0gICAgICAgIG1fbWF0aERhdGEgPSBPcGVuVHlwZU1hdGhEYXRhOjpjcmVhdGUo
bV9wbGF0Zm9ybURhdGEpOwotICAgICAgICBpZiAoIW1fbWF0aERhdGEtPmhhc01hdGhEYXRhKCkp
Ci0gICAgICAgICAgICBtX21hdGhEYXRhLmNsZWFyKCk7Ci0gICAgfQotICAgIHJldHVybiBtX21h
dGhEYXRhLmdldCgpOwotfQotCi1TaW1wbGVGb250RGF0YTo6RGVyaXZlZEZvbnREYXRhOjp+RGVy
aXZlZEZvbnREYXRhKCkKLXsKLX0KLQotUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxl
Rm9udERhdGE6OmNyZWF0ZVNjYWxlZEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9u
dERlc2NyaXB0aW9uLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3QKLXsKLSAgICBpZiAoaXNTVkdG
b250KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIHBsYXRmb3JtQ3Jl
YXRlU2NhbGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9uLCBzY2FsZUZhY3Rvcik7Ci19Ci0KLWJv
b2wgU2ltcGxlRm9udERhdGE6OmFwcGx5VHJhbnNmb3JtcyhHbHlwaEJ1ZmZlckdseXBoKiBnbHlw
aHMsIEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHNpemVfdCBnbHlwaENvdW50LCBUeXBl
c2V0dGluZ0ZlYXR1cmVzIHR5cGVzZXR0aW5nRmVhdHVyZXMpIGNvbnN0Ci17Ci0gICAgLy8gV2Ug
bmVlZCB0byBoYW5kbGUgdHJhbnNmb3JtcyBvbiBTVkcgZm9udHMgaW50ZXJuYWxseSwgc2luY2Ug
dGhleSBhcmUgcmVuZGVyZWQgaW50ZXJuYWxseS4KLSAgICBBU1NFUlQoIWlzU1ZHRm9udCgpKTsK
LSNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lP
Tl9NSU5fUkVRVUlSRUQgPiAxMDgwKQotICAgIENURm9udFRyYW5zZm9ybU9wdGlvbnMgb3B0aW9u
cyA9ICh0eXBlc2V0dGluZ0ZlYXR1cmVzICYgS2VybmluZyA/IGtDVEZvbnRUcmFuc2Zvcm1BcHBs
eVBvc2l0aW9uaW5nIDogMCkgfCAodHlwZXNldHRpbmdGZWF0dXJlcyAmIExpZ2F0dXJlcyA/IGtD
VEZvbnRUcmFuc2Zvcm1BcHBseVNoYXBpbmcgOiAwKTsKLSAgICByZXR1cm4gQ1RGb250VHJhbnNm
b3JtR2x5cGhzKG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBnbHlwaHMsIHJlaW50ZXJwcmV0X2Nh
c3Q8Q0dTaXplKj4oYWR2YW5jZXMpLCBnbHlwaENvdW50LCBvcHRpb25zKTsKLSNlbHNlCi0gICAg
VU5VU0VEX1BBUkFNKGdseXBocyk7Ci0gICAgVU5VU0VEX1BBUkFNKGFkdmFuY2VzKTsKLSAgICBV
TlVTRURfUEFSQU0oZ2x5cGhDb3VudCk7Ci0gICAgVU5VU0VEX1BBUkFNKHR5cGVzZXR0aW5nRmVh
dHVyZXMpOwotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQotCi0vLyBGb250RGF0YXMgYXJl
IG5vdCByZWZjb3VudGVkIHRvIGF2b2lkIGN5Y2xlcy4KLXR5cGVkZWYgSGFzaE1hcDxzdGQ6OnBh
aXI8VUNoYXIzMiwgdW5zaWduZWQ+LCBTaW1wbGVGb250RGF0YSo+IENoYXJhY3RlckZhbGxiYWNr
TWFwOwotdHlwZWRlZiBIYXNoTWFwPGNvbnN0IFNpbXBsZUZvbnREYXRhKiwgQ2hhcmFjdGVyRmFs
bGJhY2tNYXA+IFN5c3RlbUZhbGxiYWNrQ2FjaGU7Ci0KLXN0YXRpYyBTeXN0ZW1GYWxsYmFja0Nh
Y2hlJiBzeXN0ZW1GYWxsYmFja0NhY2hlKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
U3lzdGVtRmFsbGJhY2tDYWNoZT4gbWFwOwotICAgIHJldHVybiBtYXAuZ2V0KCk7Ci19Ci0KLVJl
ZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OnN5c3RlbUZhbGxiYWNrRm9udERh
dGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjaGFyYWN0ZXIsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
ZGVzY3JpcHRpb24sIGJvb2wgaXNGb3JQbGF0Zm9ybUZvbnQpIGNvbnN0Ci17Ci0gICAgYXV0byBm
b250QWRkUmVzdWx0ID0gc3lzdGVtRmFsbGJhY2tDYWNoZSgpLmFkZCh0aGlzLCBDaGFyYWN0ZXJG
YWxsYmFja01hcCgpKTsKLQotICAgIGF1dG8ga2V5ID0gc3RkOjptYWtlX3BhaXIoY2hhcmFjdGVy
LCBpc0ZvclBsYXRmb3JtRm9udCk7Ci0gICAgYXV0byBjaGFyYWN0ZXJBZGRSZXN1bHQgPSBmb250
QWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hZGQoa2V5LCBudWxscHRyKTsKLQotICAgIFNpbXBs
ZUZvbnREYXRhKiYgZmFsbGJhY2tGb250RGF0YSA9IGNoYXJhY3RlckFkZFJlc3VsdC5pdGVyYXRv
ci0+dmFsdWU7Ci0KLSAgICBpZiAoIWZhbGxiYWNrRm9udERhdGEpIHsKLSAgICAgICAgVUNoYXIg
Y29kZVVuaXRzWzJdOwotICAgICAgICBpbnQgY29kZVVuaXRzTGVuZ3RoOwotICAgICAgICBpZiAo
VV9JU19CTVAoY2hhcmFjdGVyKSkgewotICAgICAgICAgICAgY29kZVVuaXRzWzBdID0gRm9udENh
c2NhZGU6Om5vcm1hbGl6ZVNwYWNlcyhjaGFyYWN0ZXIpOwotICAgICAgICAgICAgY29kZVVuaXRz
TGVuZ3RoID0gMTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvZGVVbml0c1swXSA9
IFUxNl9MRUFEKGNoYXJhY3Rlcik7Ci0gICAgICAgICAgICBjb2RlVW5pdHNbMV0gPSBVMTZfVFJB
SUwoY2hhcmFjdGVyKTsKLSAgICAgICAgICAgIGNvZGVVbml0c0xlbmd0aCA9IDI7Ci0gICAgICAg
IH0KLQotICAgICAgICBmYWxsYmFja0ZvbnREYXRhID0gZm9udENhY2hlKCkuc3lzdGVtRmFsbGJh
Y2tGb3JDaGFyYWN0ZXJzKGRlc2NyaXB0aW9uLCB0aGlzLCBpc0ZvclBsYXRmb3JtRm9udCwgY29k
ZVVuaXRzLCBjb2RlVW5pdHNMZW5ndGgpLmdldCgpOwotICAgICAgICBpZiAoZmFsbGJhY2tGb250
RGF0YSkKLSAgICAgICAgICAgIGZhbGxiYWNrRm9udERhdGEtPm1faXNVc2VkSW5TeXN0ZW1GYWxs
YmFja0NhY2hlID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsbGJhY2tGb250RGF0YTsK
LX0KLQotdm9pZCBTaW1wbGVGb250RGF0YTo6cmVtb3ZlRnJvbVN5c3RlbUZhbGxiYWNrQ2FjaGUo
KQotewotICAgIHN5c3RlbUZhbGxiYWNrQ2FjaGUoKS5yZW1vdmUodGhpcyk7Ci0KLSAgICBpZiAo
IW1faXNVc2VkSW5TeXN0ZW1GYWxsYmFja0NhY2hlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBm
b3IgKGF1dG8mIGNoYXJhY3Rlck1hcCA6IHN5c3RlbUZhbGxiYWNrQ2FjaGUoKS52YWx1ZXMoKSkg
ewotICAgICAgICBWZWN0b3I8c3RkOjpwYWlyPFVDaGFyMzIsIHVuc2lnbmVkPiwgNTEyPiB0b1Jl
bW92ZTsKLSAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6IGNoYXJhY3Rlck1hcCkgewotICAgICAg
ICAgICAgaWYgKGVudHJ5LnZhbHVlID09IHRoaXMpCi0gICAgICAgICAgICAgICAgdG9SZW1vdmUu
YXBwZW5kKGVudHJ5LmtleSk7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChhdXRvJiBrZXkgOiB0
b1JlbW92ZSkKLSAgICAgICAgICAgIGNoYXJhY3Rlck1hcC5yZW1vdmUoa2V5KTsKLSAgICB9Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaAkocmV2aXNpb24gMTc4NTE1KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzNjkgKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBpbnRlcm5hbCBmb250IGltcGxlbWVudGF0aW9uLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAw
NiwgMjAwOCwgMjAxMCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDctMjAwOCBUb3JjaCBNb2JpbGUsIEluYy4KLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0g
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpZm5kZWYgU2lt
cGxlRm9udERhdGFfaAotI2RlZmluZSBTaW1wbGVGb250RGF0YV9oCi0KLSNpbmNsdWRlICJGb250
QmFzZWxpbmUuaCIKLSNpbmNsdWRlICJGb250TWV0cmljcy5oIgotI2luY2x1ZGUgIkZvbnRQbGF0
Zm9ybURhdGEuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJHbHlwaEJ1ZmZl
ci5oIgotI2luY2x1ZGUgIkdseXBoTWV0cmljc01hcC5oIgotI2luY2x1ZGUgIkdseXBoUGFnZS5o
IgotI2luY2x1ZGUgIk9wZW5UeXBlTWF0aERhdGEuaCIKLSNpZiBFTkFCTEUoT1BFTlRZUEVfVkVS
VElDQUwpCi0jaW5jbHVkZSAiT3BlblR5cGVWZXJ0aWNhbERhdGEuaCIKLSNlbmRpZgotI2luY2x1
ZGUgIlR5cGVzZXR0aW5nRmVhdHVyZXMuaCIKLSNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0j
aW5jbHVkZSAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5Q
dHIuaD4KLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oV0lOKQotI2luY2x1ZGUgPHVzcDEwLmg+Ci0j
ZW5kaWYKLQotI2lmIFVTRShDQUlSTykKLSNpbmNsdWRlIDxjYWlyby5oPgotI2VuZGlmCi0KLSNp
ZiBVU0UoQ0cpCi0jaW5jbHVkZSA8V2ViQ29yZS9Db3JlR3JhcGhpY3NTUEkuaD4KLSNlbmRpZgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEdseXBoUGFnZTsKLWNsYXNzIEZvbnREZXNj
cmlwdGlvbjsKLWNsYXNzIFNoYXJlZEJ1ZmZlcjsKLXN0cnVjdCBHbHlwaERhdGE7Ci1zdHJ1Y3Qg
V2lkdGhJdGVyYXRvcjsKLQotZW51bSBGb250RGF0YVZhcmlhbnQgeyBBdXRvVmFyaWFudCwgTm9y
bWFsVmFyaWFudCwgU21hbGxDYXBzVmFyaWFudCwgRW1waGFzaXNNYXJrVmFyaWFudCwgQnJva2Vu
SWRlb2dyYXBoVmFyaWFudCB9OwotZW51bSBQaXRjaCB7IFVua25vd25QaXRjaCwgRml4ZWRQaXRj
aCwgVmFyaWFibGVQaXRjaCB9OwotCi1jbGFzcyBTaW1wbGVGb250RGF0YSA6IHB1YmxpYyBSZWZD
b3VudGVkPFNpbXBsZUZvbnREYXRhPiB7Ci1wdWJsaWM6Ci0gICAgY2xhc3MgU1ZHRGF0YSB7Ci0g
ICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIHB1YmxpYzoKLSAgICAgICAgdmly
dHVhbCB+U1ZHRGF0YSgpIHsgfQotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplRm9u
dERhdGEoU2ltcGxlRm9udERhdGEqLCBmbG9hdCBmb250U2l6ZSkgPSAwOwotICAgICAgICB2aXJ0
dWFsIGZsb2F0IHdpZHRoRm9yU1ZHR2x5cGgoR2x5cGgsIGZsb2F0IGZvbnRTaXplKSBjb25zdCA9
IDA7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBmaWxsU1ZHR2x5cGhQYWdlKEdseXBoUGFnZSosIHVu
c2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBi
dWZmZXJMZW5ndGgsIGNvbnN0IFNpbXBsZUZvbnREYXRhKikgY29uc3QgPSAwOwotICAgIH07Ci0K
LSAgICAvLyBVc2VkIHRvIGNyZWF0ZSBwbGF0Zm9ybSBmb250cy4KLSAgICBzdGF0aWMgUmVmPFNp
bXBsZUZvbnREYXRhPiBjcmVhdGUoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRh
LCBib29sIGlzQ3VzdG9tRm9udCA9IGZhbHNlLCBib29sIGlzTG9hZGluZyA9IGZhbHNlLCBib29s
IGlzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2sgPSBmYWxzZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IFNpbXBsZUZvbnREYXRhKHBsYXRmb3JtRGF0YSwgaXNDdXN0b21Gb250
LCBpc0xvYWRpbmcsIGlzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2spKTsKLSAgICB9Ci0KLSAgICAv
LyBVc2VkIHRvIGNyZWF0ZSBTVkcgRm9udHMuCi0gICAgc3RhdGljIFJlZjxTaW1wbGVGb250RGF0
YT4gY3JlYXRlKHN0ZDo6dW5pcXVlX3B0cjxTVkdEYXRhPiBzdmdEYXRhLCBmbG9hdCBmb250U2l6
ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYykKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNpbXBsZUZvbnREYXRhKFdURjo6bW92ZShzdmdEYXRh
KSwgZm9udFNpemUsIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYykpOwotICAgIH0KLQot
ICAgIH5TaW1wbGVGb250RGF0YSgpOwotCi0gICAgc3RhdGljIGNvbnN0IFNpbXBsZUZvbnREYXRh
KiBzeXN0ZW1GYWxsYmFjaygpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgU2ltcGxl
Rm9udERhdGEqPigtMSk7IH0KLQotICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3Jt
RGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fcGxhdGZvcm1EYXRhOyB9Ci0gICAgY29uc3QgT3BlblR5
cGVNYXRoRGF0YSogbWF0aERhdGEoKSBjb25zdDsKLSNpZiBFTkFCTEUoT1BFTlRZUEVfVkVSVElD
QUwpCi0gICAgY29uc3QgT3BlblR5cGVWZXJ0aWNhbERhdGEqIHZlcnRpY2FsRGF0YSgpIGNvbnN0
IHsgcmV0dXJuIG1fdmVydGljYWxEYXRhLmdldCgpOyB9Ci0jZW5kaWYKLQotICAgIFBhc3NSZWZQ
dHI8U2ltcGxlRm9udERhdGE+IHNtYWxsQ2Fwc0ZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlv
biYpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IGVtcGhhc2lzTWFya0Zv
bnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8U2lt
cGxlRm9udERhdGE+IGJyb2tlbklkZW9ncmFwaEZvbnREYXRhKCkgY29uc3Q7Ci0gICAgUGFzc1Jl
ZlB0cjxTaW1wbGVGb250RGF0YT4gbm9uU3ludGhldGljSXRhbGljRm9udERhdGEoKSBjb25zdDsK
LQotICAgIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IHZhcmlhbnRGb250RGF0YShjb25zdCBG
b250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250RGF0YVZhcmlhbnQgdmFyaWFudCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAodmFyaWFudCkgewotICAgICAgICBjYXNlIFNtYWxs
Q2Fwc1ZhcmlhbnQ6Ci0gICAgICAgICAgICByZXR1cm4gc21hbGxDYXBzRm9udERhdGEoZGVzY3Jp
cHRpb24pOwotICAgICAgICBjYXNlIEVtcGhhc2lzTWFya1ZhcmlhbnQ6Ci0gICAgICAgICAgICBy
ZXR1cm4gZW1waGFzaXNNYXJrRm9udERhdGEoZGVzY3JpcHRpb24pOwotICAgICAgICBjYXNlIEJy
b2tlbklkZW9ncmFwaFZhcmlhbnQ6Ci0gICAgICAgICAgICByZXR1cm4gYnJva2VuSWRlb2dyYXBo
Rm9udERhdGEoKTsKLSAgICAgICAgY2FzZSBBdXRvVmFyaWFudDoKLSAgICAgICAgY2FzZSBOb3Jt
YWxWYXJpYW50OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBjb25zdF9jYXN0PFNpbXBsZUZvbnREYXRh
Kj4odGhpcyk7Ci0gICAgfQotCi0gICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gdmVydGlj
YWxSaWdodE9yaWVudGF0aW9uRm9udERhdGEoKSBjb25zdDsKLSAgICBQYXNzUmVmUHRyPFNpbXBs
ZUZvbnREYXRhPiB1cHJpZ2h0T3JpZW50YXRpb25Gb250RGF0YSgpIGNvbnN0OwotCi0gICAgYm9v
bCBoYXNWZXJ0aWNhbEdseXBocygpIGNvbnN0IHsgcmV0dXJuIG1faGFzVmVydGljYWxHbHlwaHM7
IH0KLSAgICBib29sIGlzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2soKSBjb25zdCB7IHJldHVybiBt
X2lzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2s7IH0KLQotICAgIEZvbnRNZXRyaWNzJiBmb250TWV0
cmljcygpIHsgcmV0dXJuIG1fZm9udE1ldHJpY3M7IH0KLSAgICBjb25zdCBGb250TWV0cmljcyYg
Zm9udE1ldHJpY3MoKSBjb25zdCB7IHJldHVybiBtX2ZvbnRNZXRyaWNzOyB9Ci0gICAgZmxvYXQg
c2l6ZVBlclVuaXQoKSBjb25zdCB7IHJldHVybiBwbGF0Zm9ybURhdGEoKS5zaXplKCkgLyAoZm9u
dE1ldHJpY3MoKS51bml0c1BlckVtKCkgPyBmb250TWV0cmljcygpLnVuaXRzUGVyRW0oKSA6IDEp
OyB9Ci0KLSAgICBmbG9hdCBtYXhDaGFyV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX21heENoYXJX
aWR0aDsgfQotICAgIHZvaWQgc2V0TWF4Q2hhcldpZHRoKGZsb2F0IG1heENoYXJXaWR0aCkgeyBt
X21heENoYXJXaWR0aCA9IG1heENoYXJXaWR0aDsgfQotCi0gICAgZmxvYXQgYXZnQ2hhcldpZHRo
KCkgY29uc3QgeyByZXR1cm4gbV9hdmdDaGFyV2lkdGg7IH0KLSAgICB2b2lkIHNldEF2Z0NoYXJX
aWR0aChmbG9hdCBhdmdDaGFyV2lkdGgpIHsgbV9hdmdDaGFyV2lkdGggPSBhdmdDaGFyV2lkdGg7
IH0KLQotICAgIEZsb2F0UmVjdCBib3VuZHNGb3JHbHlwaChHbHlwaCkgY29uc3Q7Ci0gICAgZmxv
YXQgd2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3Q7Ci0gICAgRmxvYXRSZWN0IHBsYXRm
b3JtQm91bmRzRm9yR2x5cGgoR2x5cGgpIGNvbnN0OwotICAgIGZsb2F0IHBsYXRmb3JtV2lkdGhG
b3JHbHlwaChHbHlwaCkgY29uc3Q7Ci0KLSAgICBmbG9hdCBzcGFjZVdpZHRoKCkgY29uc3QgeyBy
ZXR1cm4gbV9zcGFjZVdpZHRoOyB9Ci0gICAgZmxvYXQgYWRqdXN0ZWRTcGFjZVdpZHRoKCkgY29u
c3QgeyByZXR1cm4gbV9hZGp1c3RlZFNwYWNlV2lkdGg7IH0KLSAgICB2b2lkIHNldFNwYWNlV2lk
dGhzKGZsb2F0IHNwYWNlV2lkdGgpCi0gICAgewotICAgICAgICBtX3NwYWNlV2lkdGggPSBzcGFj
ZVdpZHRoOwotICAgICAgICBtX2FkanVzdGVkU3BhY2VXaWR0aCA9IHNwYWNlV2lkdGg7Ci0gICAg
fQotCi0jaWYgVVNFKENHKSB8fCBVU0UoQ0FJUk8pCi0gICAgZmxvYXQgc3ludGhldGljQm9sZE9m
ZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3ludGhldGljQm9sZE9mZnNldDsgfQotI2VuZGlmCi0K
LSAgICBHbHlwaCBzcGFjZUdseXBoKCkgY29uc3QgeyByZXR1cm4gbV9zcGFjZUdseXBoOyB9Ci0g
ICAgdm9pZCBzZXRTcGFjZUdseXBoKEdseXBoIHNwYWNlR2x5cGgpIHsgbV9zcGFjZUdseXBoID0g
c3BhY2VHbHlwaDsgfQotICAgIEdseXBoIHplcm9XaWR0aFNwYWNlR2x5cGgoKSBjb25zdCB7IHJl
dHVybiBtX3plcm9XaWR0aFNwYWNlR2x5cGg7IH0KLSAgICB2b2lkIHNldFplcm9XaWR0aFNwYWNl
R2x5cGgoR2x5cGggc3BhY2VHbHlwaCkgeyBtX3plcm9XaWR0aFNwYWNlR2x5cGggPSBzcGFjZUds
eXBoOyB9Ci0gICAgYm9vbCBpc1plcm9XaWR0aFNwYWNlR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0
IHsgcmV0dXJuIGdseXBoID09IG1femVyb1dpZHRoU3BhY2VHbHlwaCAmJiBnbHlwaDsgfQotICAg
IEdseXBoIHplcm9HbHlwaCgpIGNvbnN0IHsgcmV0dXJuIG1femVyb0dseXBoOyB9Ci0gICAgdm9p
ZCBzZXRaZXJvR2x5cGgoR2x5cGggemVyb0dseXBoKSB7IG1femVyb0dseXBoID0gemVyb0dseXBo
OyB9Ci0KLSAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIpIGNvbnN0
OwotICAgIEdseXBoIGdseXBoRm9yQ2hhcmFjdGVyKFVDaGFyMzIpIGNvbnN0OwotCi0gICAgUmVm
UHRyPFNpbXBsZUZvbnREYXRhPiBzeXN0ZW1GYWxsYmFja0ZvbnREYXRhRm9yQ2hhcmFjdGVyKFVD
aGFyMzIsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGJvb2wgaXNGb3JQbGF0Zm9ybUZvbnQpIGNv
bnN0OwotCi0gICAgY29uc3QgR2x5cGhQYWdlKiBnbHlwaFBhZ2UodW5zaWduZWQgcGFnZU51bWJl
cikgY29uc3Q7Ci0KLSAgICB2b2lkIGRldGVybWluZVBpdGNoKCk7Ci0gICAgUGl0Y2ggcGl0Y2go
KSBjb25zdCB7IHJldHVybiBtX3RyZWF0QXNGaXhlZFBpdGNoID8gRml4ZWRQaXRjaCA6IFZhcmlh
YmxlUGl0Y2g7IH0KLQotICAgIGNvbnN0IFNWR0RhdGEqIHN2Z0RhdGEoKSBjb25zdCB7IHJldHVy
biBtX3N2Z0RhdGEuZ2V0KCk7IH0KLSAgICBib29sIGlzU1ZHRm9udCgpIGNvbnN0IHsgcmV0dXJu
ICEhbV9zdmdEYXRhOyB9Ci0KLSAgICBib29sIGlzQ3VzdG9tRm9udCgpIGNvbnN0IHsgcmV0dXJu
IG1faXNDdXN0b21Gb250OyB9Ci0gICAgYm9vbCBpc0xvYWRpbmcoKSBjb25zdCB7IHJldHVybiBt
X2lzTG9hZGluZzsgfQotCi0jaWZuZGVmIE5ERUJVRwotICAgIFN0cmluZyBkZXNjcmlwdGlvbigp
IGNvbnN0OwotI2VuZGlmCi0KLSNpZiBVU0UoQVBQS0lUKQotICAgIGNvbnN0IFNpbXBsZUZvbnRE
YXRhKiBjb21wb3NpdGVGb250UmVmZXJlbmNlRm9udERhdGEoTlNGb250ICprZXkpIGNvbnN0Owot
ICAgIE5TRm9udCogZ2V0TlNGb250KCkgY29uc3QgeyByZXR1cm4gbV9wbGF0Zm9ybURhdGEubnNG
b250KCk7IH0KLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oSU9TKQotICAgIENURm9udFJlZiBnZXRD
VEZvbnQoKSBjb25zdCB7IHJldHVybiBtX3BsYXRmb3JtRGF0YS5mb250KCk7IH0KLSAgICBib29s
IHNob3VsZE5vdEJlVXNlZEZvckFyYWJpYygpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkTm90QmVV
c2VkRm9yQXJhYmljOyB9OwotI2VuZGlmCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgQ0ZEaWN0
aW9uYXJ5UmVmIGdldENGU3RyaW5nQXR0cmlidXRlcyhUeXBlc2V0dGluZ0ZlYXR1cmVzLCBGb250
T3JpZW50YXRpb24pIGNvbnN0OwotI2VuZGlmCi0KLSNpZiBQTEFURk9STShDT0NPQSkgfHwgVVNF
KEhBUkZCVVpaKQotICAgIGJvb2wgY2FuUmVuZGVyQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2Uo
Y29uc3QgVUNoYXIqLCBzaXplX3QpIGNvbnN0OwotI2VuZGlmCi0KLSAgICBib29sIGFwcGx5VHJh
bnNmb3JtcyhHbHlwaEJ1ZmZlckdseXBoKiwgR2x5cGhCdWZmZXJBZHZhbmNlKiwgc2l6ZV90IGds
eXBoQ291bnQsIFR5cGVzZXR0aW5nRmVhdHVyZXMpIGNvbnN0OwotCi0jaWYgUExBVEZPUk0oV0lO
KQotICAgIGJvb2wgaXNTeXN0ZW1Gb250KCkgY29uc3QgeyByZXR1cm4gbV9pc1N5c3RlbUZvbnQ7
IH0KLSAgICBTQ1JJUFRfRk9OVFBST1BFUlRJRVMqIHNjcmlwdEZvbnRQcm9wZXJ0aWVzKCkgY29u
c3Q7Ci0gICAgU0NSSVBUX0NBQ0hFKiBzY3JpcHRDYWNoZSgpIGNvbnN0IHsgcmV0dXJuICZtX3Nj
cmlwdENhY2hlOyB9Ci0gICAgc3RhdGljIHZvaWQgc2V0U2hvdWxkQXBwbHlNYWNBc2NlbnRIYWNr
KGJvb2wpOwotICAgIHN0YXRpYyBib29sIHNob3VsZEFwcGx5TWFjQXNjZW50SGFjaygpOwotICAg
IHN0YXRpYyBmbG9hdCBhc2NlbnRDb25zaWRlcmluZ01hY0FzY2VudEhhY2soY29uc3QgV0NIQVIq
LCBmbG9hdCBhc2NlbnQsIGZsb2F0IGRlc2NlbnQpOwotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAg
U2ltcGxlRm9udERhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYsIGJvb2wgaXNDdXN0b21Gb250
ID0gZmFsc2UsIGJvb2wgaXNMb2FkaW5nID0gZmFsc2UsIGJvb2wgaXNUZXh0T3JpZW50YXRpb25G
YWxsYmFjayA9IGZhbHNlKTsKLQotICAgIFNpbXBsZUZvbnREYXRhKHN0ZDo6dW5pcXVlX3B0cjxT
VkdEYXRhPiwgZmxvYXQgZm9udFNpemUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0
aWNJdGFsaWMpOwotCi0gICAgdm9pZCBwbGF0Zm9ybUluaXQoKTsKLSAgICB2b2lkIHBsYXRmb3Jt
R2x5cGhJbml0KCk7Ci0gICAgdm9pZCBwbGF0Zm9ybUNoYXJXaWR0aEluaXQoKTsKLSAgICB2b2lk
IHBsYXRmb3JtRGVzdHJveSgpOwotCi0gICAgdm9pZCBpbml0Q2hhcldpZHRocygpOwotCi0gICAg
UGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gY3JlYXRlU2NhbGVkRm9udERhdGEoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8
U2ltcGxlRm9udERhdGE+IHBsYXRmb3JtQ3JlYXRlU2NhbGVkRm9udERhdGEoY29uc3QgRm9udERl
c2NyaXB0aW9uJiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0OwotCi0gICAgdm9pZCByZW1vdmVG
cm9tU3lzdGVtRmFsbGJhY2tDYWNoZSgpOwotCi0jaWYgUExBVEZPUk0oV0lOKQotICAgIHZvaWQg
aW5pdEdESUZvbnQoKTsKLSAgICB2b2lkIHBsYXRmb3JtQ29tbW9uRGVzdHJveSgpOwotICAgIEZs
b2F0UmVjdCBib3VuZHNGb3JHRElHbHlwaChHbHlwaCBnbHlwaCkgY29uc3Q7Ci0gICAgZmxvYXQg
d2lkdGhGb3JHRElHbHlwaChHbHlwaCBnbHlwaCkgY29uc3Q7Ci0jZW5kaWYKLQotI2lmIFVTRShD
RykKLSAgICBib29sIGNhblVzZUZhc3RHbHlwaEFkdmFuY2VHZXR0ZXIoR2x5cGggZ2x5cGgsIENH
U2l6ZSYgYWR2YW5jZSwgYm9vbCYgcG9wdWxhdGVkQWR2YW5jZSkgY29uc3Q7Ci0gICAgQ0dGb250
UmVuZGVyaW5nU3R5bGUgcmVuZGVyaW5nU3R5bGUoKSBjb25zdDsKLSAgICBib29sIGFkdmFuY2VG
b3JDb2xvckJpdG1hcEZvbnQoR2x5cGgsIENHU2l6ZSYgcmVzdWx0KSBjb25zdDsgLy8gUmV0dXJu
cyB0cnVlIGlmIHRoZSBmb250IGlzIGEgY29sb3IgYml0bWFwIGZvbnQKLSNlbmRpZgotCi0gICAg
Rm9udE1ldHJpY3MgbV9mb250TWV0cmljczsKLSAgICBmbG9hdCBtX21heENoYXJXaWR0aDsKLSAg
ICBmbG9hdCBtX2F2Z0NoYXJXaWR0aDsKLQotICAgIEZvbnRQbGF0Zm9ybURhdGEgbV9wbGF0Zm9y
bURhdGE7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFNWR0RhdGE+IG1fc3ZnRGF0YTsKLQotICAgIG11
dGFibGUgUmVmUHRyPEdseXBoUGFnZT4gbV9nbHlwaFBhZ2VaZXJvOwotICAgIG11dGFibGUgSGFz
aE1hcDx1bnNpZ25lZCwgUmVmUHRyPEdseXBoUGFnZT4+IG1fZ2x5cGhQYWdlczsKLSAgICBtdXRh
YmxlIHN0ZDo6dW5pcXVlX3B0cjxHbHlwaE1ldHJpY3NNYXA8RmxvYXRSZWN0Pj4gbV9nbHlwaFRv
Qm91bmRzTWFwOwotICAgIG11dGFibGUgR2x5cGhNZXRyaWNzTWFwPGZsb2F0PiBtX2dseXBoVG9X
aWR0aE1hcDsKLQotICAgIGJvb2wgbV90cmVhdEFzRml4ZWRQaXRjaDsKLSAgICBib29sIG1faXND
dXN0b21Gb250OyAgLy8gV2hldGhlciBvciBub3Qgd2UgYXJlIGN1c3RvbSBmb250IGxvYWRlZCB2
aWEgQGZvbnQtZmFjZQotICAgIGJvb2wgbV9pc0xvYWRpbmc7IC8vIFdoZXRoZXIgb3Igbm90IHRo
aXMgY3VzdG9tIGZvbnQgaXMgc3RpbGwgaW4gdGhlIGFjdCBvZiBsb2FkaW5nLgotCi0gICAgYm9v
bCBtX2lzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2s7Ci0gICAgYm9vbCBtX2lzQnJva2VuSWRlb2dy
YXBoRmFsbGJhY2s7Ci0KLSAgICBib29sIG1faXNVc2VkSW5TeXN0ZW1GYWxsYmFja0NhY2hlIHsg
ZmFsc2UgfTsKLQotICAgIG11dGFibGUgUmVmUHRyPE9wZW5UeXBlTWF0aERhdGE+IG1fbWF0aERh
dGE7Ci0jaWYgRU5BQkxFKE9QRU5UWVBFX1ZFUlRJQ0FMKQotICAgIFJlZlB0cjxPcGVuVHlwZVZl
cnRpY2FsRGF0YT4gbV92ZXJ0aWNhbERhdGE7Ci0jZW5kaWYKLSAgICBib29sIG1faGFzVmVydGlj
YWxHbHlwaHM7Ci0KLSAgICBHbHlwaCBtX3NwYWNlR2x5cGg7Ci0gICAgZmxvYXQgbV9zcGFjZVdp
ZHRoOwotICAgIEdseXBoIG1femVyb0dseXBoOwotICAgIGZsb2F0IG1fYWRqdXN0ZWRTcGFjZVdp
ZHRoOwotCi0gICAgR2x5cGggbV96ZXJvV2lkdGhTcGFjZUdseXBoOwotCi0gICAgc3RydWN0IERl
cml2ZWRGb250RGF0YSB7Ci0gICAgICAgIGV4cGxpY2l0IERlcml2ZWRGb250RGF0YShib29sIGN1
c3RvbSkKLSAgICAgICAgICAgIDogZm9yQ3VzdG9tRm9udChjdXN0b20pCi0gICAgICAgIHsKLSAg
ICAgICAgfQotICAgICAgICB+RGVyaXZlZEZvbnREYXRhKCk7Ci0KLSAgICAgICAgYm9vbCBmb3JD
dXN0b21Gb250OwotICAgICAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IHNtYWxsQ2FwczsKLSAg
ICAgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBlbXBoYXNpc01hcms7Ci0gICAgICAgIFJlZlB0
cjxTaW1wbGVGb250RGF0YT4gYnJva2VuSWRlb2dyYXBoOwotICAgICAgICBSZWZQdHI8U2ltcGxl
Rm9udERhdGE+IHZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbjsKLSAgICAgICAgUmVmUHRyPFNpbXBs
ZUZvbnREYXRhPiB1cHJpZ2h0T3JpZW50YXRpb247Ci0gICAgICAgIFJlZlB0cjxTaW1wbGVGb250
RGF0YT4gbm9uU3ludGhldGljSXRhbGljOwotI2lmIFVTRShBUFBLSVQpCi0gICAgICAgIEhhc2hN
YXA8TlNGb250KiwgUmVmUHRyPFNpbXBsZUZvbnREYXRhPj4gY29tcG9zaXRlRm9udFJlZmVyZW5j
ZXM7Ci0jZW5kaWYKLSAgICB9OwotCi0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8RGVyaXZl
ZEZvbnREYXRhPiBtX2Rlcml2ZWRGb250RGF0YTsKLQotI2lmIFVTRShDRykgfHwgVVNFKENBSVJP
KQotICAgIGZsb2F0IG1fc3ludGhldGljQm9sZE9mZnNldDsKLSNlbmRpZgotCi0jaWYgUExBVEZP
Uk0oQ09DT0EpCi0gICAgbXV0YWJsZSBIYXNoTWFwPHVuc2lnbmVkLCBSZXRhaW5QdHI8Q0ZEaWN0
aW9uYXJ5UmVmPj4gbV9DRlN0cmluZ0F0dHJpYnV0ZXM7Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JN
KENPQ09BKSB8fCBVU0UoSEFSRkJVWlopCi0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8SGFz
aE1hcDxTdHJpbmcsIGJvb2w+PiBtX2NvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlU3VwcG9ydDsK
LSNlbmRpZgotCi0jaWYgUExBVEZPUk0oV0lOKQotICAgIGJvb2wgbV9pc1N5c3RlbUZvbnQ7Ci0g
ICAgbXV0YWJsZSBTQ1JJUFRfQ0FDSEUgbV9zY3JpcHRDYWNoZTsKLSAgICBtdXRhYmxlIFNDUklQ
VF9GT05UUFJPUEVSVElFUyogbV9zY3JpcHRGb250UHJvcGVydGllczsKLSNlbmRpZgotI2lmIFBM
QVRGT1JNKElPUykKLSAgICBib29sIG1fc2hvdWxkTm90QmVVc2VkRm9yQXJhYmljOwotI2VuZGlm
Ci19OwotCi1BTFdBWVNfSU5MSU5FIEZsb2F0UmVjdCBTaW1wbGVGb250RGF0YTo6Ym91bmRzRm9y
R2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0Ci17Ci0gICAgaWYgKGlzWmVyb1dpZHRoU3BhY2VHbHlw
aChnbHlwaCkpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKLQotICAgIEZsb2F0UmVjdCBi
b3VuZHM7Ci0gICAgaWYgKG1fZ2x5cGhUb0JvdW5kc01hcCkgewotICAgICAgICBib3VuZHMgPSBt
X2dseXBoVG9Cb3VuZHNNYXAtPm1ldHJpY3NGb3JHbHlwaChnbHlwaCk7Ci0gICAgICAgIGlmIChi
b3VuZHMud2lkdGgoKSAhPSBjR2x5cGhTaXplVW5rbm93bikKLSAgICAgICAgICAgIHJldHVybiBi
b3VuZHM7Ci0gICAgfQotCi0gICAgYm91bmRzID0gcGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChnbHlw
aCk7Ci0gICAgaWYgKCFtX2dseXBoVG9Cb3VuZHNNYXApCi0gICAgICAgIG1fZ2x5cGhUb0JvdW5k
c01hcCA9IHN0ZDo6bWFrZV91bmlxdWU8R2x5cGhNZXRyaWNzTWFwPEZsb2F0UmVjdD4+KCk7Ci0g
ICAgbV9nbHlwaFRvQm91bmRzTWFwLT5zZXRNZXRyaWNzRm9yR2x5cGgoZ2x5cGgsIGJvdW5kcyk7
Ci0gICAgcmV0dXJuIGJvdW5kczsKLX0KLQotQUxXQVlTX0lOTElORSBmbG9hdCBTaW1wbGVGb250
RGF0YTo6d2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKLXsKLSAgICBpZiAoaXNaZXJv
V2lkdGhTcGFjZUdseXBoKGdseXBoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBmbG9hdCB3
aWR0aCA9IG1fZ2x5cGhUb1dpZHRoTWFwLm1ldHJpY3NGb3JHbHlwaChnbHlwaCk7Ci0gICAgaWYg
KHdpZHRoICE9IGNHbHlwaFNpemVVbmtub3duKQotICAgICAgICByZXR1cm4gd2lkdGg7Ci0KLSAg
ICBpZiAoaXNTVkdGb250KCkpCi0gICAgICAgIHdpZHRoID0gbV9zdmdEYXRhLT53aWR0aEZvclNW
R0dseXBoKGdseXBoLCBtX3BsYXRmb3JtRGF0YS5zaXplKCkpOwotI2lmIEVOQUJMRShPUEVOVFlQ
RV9WRVJUSUNBTCkKLSAgICBlbHNlIGlmIChtX3ZlcnRpY2FsRGF0YSkKLSNpZiBVU0UoQ0cpIHx8
IFVTRShDQUlSTykKLSAgICAgICAgd2lkdGggPSBtX3ZlcnRpY2FsRGF0YS0+YWR2YW5jZUhlaWdo
dCh0aGlzLCBnbHlwaCkgKyBtX3N5bnRoZXRpY0JvbGRPZmZzZXQ7Ci0jZWxzZQotICAgICAgICB3
aWR0aCA9IG1fdmVydGljYWxEYXRhLT5hZHZhbmNlSGVpZ2h0KHRoaXMsIGdseXBoKTsKLSNlbmRp
ZgotI2VuZGlmCi0gICAgZWxzZQotICAgICAgICB3aWR0aCA9IHBsYXRmb3JtV2lkdGhGb3JHbHlw
aChnbHlwaCk7Ci0KLSAgICBtX2dseXBoVG9XaWR0aE1hcC5zZXRNZXRyaWNzRm9yR2x5cGgoZ2x5
cGgsIHdpZHRoKTsKLSAgICByZXR1cm4gd2lkdGg7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQotI2VuZGlmIC8vIFNpbXBsZUZvbnREYXRhX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVuLmgJKHJldmlzaW9uIDE3ODUxNSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uaAkod29ya2luZyBjb3B5KQpAQCAtMzYs
NyArMzYsNyBAQCBjbGFzcyBGb250Q2FzY2FkZTsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIGNs
YXNzIEdseXBoQnVmZmVyOwogY2xhc3MgR2x5cGhUb1BhdGhUcmFuc2xhdG9yOwotY2xhc3MgU2lt
cGxlRm9udERhdGE7CitjbGFzcyBGb250OwogCiBzdHJ1Y3QgR2x5cGhEYXRhOwogc3RydWN0IFdp
ZHRoSXRlcmF0b3I7CkBAIC0xOTgsMTAgKzE5OCwxMCBAQCBwdWJsaWM6CiAKICNpZiBFTkFCTEUo
U1ZHX0ZPTlRTKQogICAgICAgICB2aXJ0dWFsIEdseXBoRGF0YSBnbHlwaERhdGFGb3JDaGFyYWN0
ZXIoY29uc3QgRm9udENhc2NhZGUmLCBXaWR0aEl0ZXJhdG9yJiwgVUNoYXIzMiBjaGFyYWN0ZXIs
IGJvb2wgbWlycm9yLCBpbnQgY3VycmVudENoYXJhY3RlciwgdW5zaWduZWQmIGFkdmFuY2VMZW5n
dGgsIFN0cmluZyYgbm9ybWFsaXplZFNwYWNlc1N0cmluZ0NhY2hlKSA9IDA7Ci0gICAgICAgIHZp
cnR1YWwgdm9pZCBkcmF3U1ZHR2x5cGhzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFNpbXBsZUZv
bnREYXRhKiwgY29uc3QgR2x5cGhCdWZmZXImLCBpbnQgZnJvbSwgaW50IHRvLCBjb25zdCBGbG9h
dFBvaW50JikgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgZHJhd1NWR0dseXBocyhH
cmFwaGljc0NvbnRleHQqLCBjb25zdCBGb250KiwgY29uc3QgR2x5cGhCdWZmZXImLCBpbnQgZnJv
bSwgaW50IHRvLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3QgPSAwOwogICAgICAgICB2aXJ0dWFs
IGZsb2F0IGZsb2F0V2lkdGhVc2luZ1NWR0ZvbnQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBU
ZXh0UnVuJiwgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcmIGdseXBoTmFtZSkgY29uc3QgPSAw
OwotICAgICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlTVkdLZXJuaW5nKGNvbnN0IFNpbXBsZUZvbnRE
YXRhKiwgV2lkdGhJdGVyYXRvciYsIEdseXBoQnVmZmVyKiwgaW50IGZyb20pIGNvbnN0ID0gMDsK
LSAgICAgICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8R2x5cGhUb1BhdGhUcmFuc2xhdG9yPiBj
cmVhdGVHbHlwaFRvUGF0aFRyYW5zbGF0b3IoY29uc3QgU2ltcGxlRm9udERhdGEmLCBjb25zdCBU
ZXh0UnVuKiwgY29uc3QgR2x5cGhCdWZmZXImLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29u
c3QgRmxvYXRQb2ludCYpIGNvbnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCBib29sIGFwcGx5U1ZH
S2VybmluZyhjb25zdCBGb250KiwgV2lkdGhJdGVyYXRvciYsIEdseXBoQnVmZmVyKiwgaW50IGZy
b20pIGNvbnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8R2x5cGhUb1Bh
dGhUcmFuc2xhdG9yPiBjcmVhdGVHbHlwaFRvUGF0aFRyYW5zbGF0b3IoY29uc3QgRm9udCYsIGNv
bnN0IFRleHRSdW4qLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhz
LCBjb25zdCBGbG9hdFBvaW50JikgY29uc3QgPSAwOwogI2VuZGlmCiAgICAgfTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5j
cHAJKHJldmlzaW9uIDE3ODUxNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1dpZHRoSXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiwxMCArMjIsMTAgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXaWR0aEl0ZXJhdG9yLmgiCiAKKyNpbmNsdWRl
ICJGb250LmgiCiAjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJHbHlwaEJ1ZmZl
ci5oIgogI2luY2x1ZGUgIkxhdGluMVRleHRJdGVyYXRvci5oIgotI2luY2x1ZGUgIlNpbXBsZUZv
bnREYXRhLmgiCiAjaW5jbHVkZSAiU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yLmgiCiAj
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIApAQCAtMzQsNyArMzQsNyBAQCB1c2luZyBuYW1l
c3BhY2UgVW5pY29kZTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1XaWR0aEl0ZXJhdG9yOjpX
aWR0aEl0ZXJhdG9yKGNvbnN0IEZvbnRDYXNjYWRlKiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4s
IEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cywgYm9vbCBhY2Nv
dW50Rm9yR2x5cGhCb3VuZHMsIGJvb2wgZm9yVGV4dEVtcGhhc2lzKQorV2lkdGhJdGVyYXRvcjo6
V2lkdGhJdGVyYXRvcihjb25zdCBGb250Q2FzY2FkZSogZm9udCwgY29uc3QgVGV4dFJ1biYgcnVu
LCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cywgYm9vbCBhY2NvdW50Rm9yR2x5
cGhCb3VuZHMsIGJvb2wgZm9yVGV4dEVtcGhhc2lzKQogICAgIDogbV9mb250KGZvbnQpCiAgICAg
LCBtX3J1bihydW4pCiAgICAgLCBtX2N1cnJlbnRDaGFyYWN0ZXIoMCkKQEAgLTEwMCw3ICsxMDAs
NyBAQCBwdWJsaWM6CiAKIHR5cGVkZWYgVmVjdG9yPHN0ZDo6cGFpcjxpbnQsIE9yaWdpbmFsQWR2
YW5jZXNGb3JDaGFyYWN0ZXJUcmVhdGVkQXNTcGFjZT4sIDY0PiBDaGFyYWN0ZXJzVHJlYXRlZEFz
U3BhY2U7CiAKLXN0YXRpYyBpbmxpbmUgZmxvYXQgYXBwbHlGb250VHJhbnNmb3JtcyhHbHlwaEJ1
ZmZlciogZ2x5cGhCdWZmZXIsIGJvb2wgbHRyLCBpbnQmIGxhc3RHbHlwaENvdW50LCBjb25zdCBT
aW1wbGVGb250RGF0YSogZm9udERhdGEsIFdpZHRoSXRlcmF0b3ImIGl0ZXJhdG9yLCBUeXBlc2V0
dGluZ0ZlYXR1cmVzIHR5cGVzZXR0aW5nRmVhdHVyZXMsIENoYXJhY3RlcnNUcmVhdGVkQXNTcGFj
ZSYgY2hhcmFjdGVyc1RyZWF0ZWRBc1NwYWNlKQorc3RhdGljIGlubGluZSBmbG9hdCBhcHBseUZv
bnRUcmFuc2Zvcm1zKEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZlciwgYm9vbCBsdHIsIGludCYgbGFz
dEdseXBoQ291bnQsIGNvbnN0IEZvbnQqIGZvbnQsIFdpZHRoSXRlcmF0b3ImIGl0ZXJhdG9yLCBU
eXBlc2V0dGluZ0ZlYXR1cmVzIHR5cGVzZXR0aW5nRmVhdHVyZXMsIENoYXJhY3RlcnNUcmVhdGVk
QXNTcGFjZSYgY2hhcmFjdGVyc1RyZWF0ZWRBc1NwYWNlKQogewogICAgIEFTU0VSVCh0eXBlc2V0
dGluZ0ZlYXR1cmVzICYgKEtlcm5pbmcgfCBMaWdhdHVyZXMpKTsKIApAQCAtMTIzLDE2ICsxMjMs
MTYgQEAgc3RhdGljIGlubGluZSBmbG9hdCBhcHBseUZvbnRUcmFuc2Zvcm1zKAogICAgIFVOVVNF
RF9QQVJBTShpdGVyYXRvcik7CiAjZWxzZQogICAgIC8vIFdlIG5lZWQgdG8gaGFuZGxlIHRyYW5z
Zm9ybXMgb24gU1ZHIGZvbnRzIGludGVybmFsbHksIHNpbmNlIHRoZXkgYXJlIHJlbmRlcmVkIGlu
dGVybmFsbHkuCi0gICAgaWYgKGZvbnREYXRhLT5pc1NWR0ZvbnQoKSkgeworICAgIGlmIChmb250
LT5pc1NWR0ZvbnQoKSkgewogICAgICAgICAvLyBTVkcgZm9udCBsaWdhdHVyZXMgYXJlIGhhbmRs
ZWQgZHVyaW5nIGdseXBoIHNlbGVjdGlvbiwgb25seSBrZXJuaW5nIHJlbWFpbmluZy4KICAgICAg
ICAgaWYgKGl0ZXJhdG9yLnJ1bigpLnJlbmRlcmluZ0NvbnRleHQoKSAmJiAodHlwZXNldHRpbmdG
ZWF0dXJlcyAmIEtlcm5pbmcpKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgcGFz
cyB0aGUgbmVjZXNzYXJ5IGNvbnRleHQgZG93biB0byB0aGlzIGxldmVsIHNvIHdlIGNhbiBsYXpp
bHkgY3JlYXRlIHJlbmRlcmluZyBjb250ZXh0cyBhdCB0aGlzIHBvaW50LgogICAgICAgICAgICAg
Ly8gSG93ZXZlciwgYSBsYXJnZXIgcmVmYWN0b3Jpbmcgb2YgU1ZHIGZvbnRzIG1pZ2h0IG5lY2Vz
c2FyeSB0byBzaWRlc3RlcCB0aGlzIHByb2JsZW0gY29tcGxldGVseS4KLSAgICAgICAgICAgIGl0
ZXJhdG9yLnJ1bigpLnJlbmRlcmluZ0NvbnRleHQoKS0+YXBwbHlTVkdLZXJuaW5nKGZvbnREYXRh
LCBpdGVyYXRvciwgZ2x5cGhCdWZmZXIsIGxhc3RHbHlwaENvdW50KTsKKyAgICAgICAgICAgIGl0
ZXJhdG9yLnJ1bigpLnJlbmRlcmluZ0NvbnRleHQoKS0+YXBwbHlTVkdLZXJuaW5nKGZvbnQsIGl0
ZXJhdG9yLCBnbHlwaEJ1ZmZlciwgbGFzdEdseXBoQ291bnQpOwogICAgICAgICB9CiAgICAgfSBl
bHNlCiAjZW5kaWYKLSAgICAgICAgZm9udERhdGEtPmFwcGx5VHJhbnNmb3JtcyhnbHlwaEJ1ZmZl
ci0+Z2x5cGhzKGxhc3RHbHlwaENvdW50KSwgYWR2YW5jZXMgKyBsYXN0R2x5cGhDb3VudCwgZ2x5
cGhCdWZmZXJTaXplIC0gbGFzdEdseXBoQ291bnQsIHR5cGVzZXR0aW5nRmVhdHVyZXMpOworICAg
ICAgICBmb250LT5hcHBseVRyYW5zZm9ybXMoZ2x5cGhCdWZmZXItPmdseXBocyhsYXN0R2x5cGhD
b3VudCksIGFkdmFuY2VzICsgbGFzdEdseXBoQ291bnQsIGdseXBoQnVmZmVyU2l6ZSAtIGxhc3RH
bHlwaENvdW50LCB0eXBlc2V0dGluZ0ZlYXR1cmVzKTsKIAogICAgIGlmICghbHRyKQogICAgICAg
ICBnbHlwaEJ1ZmZlci0+cmV2ZXJzZShsYXN0R2x5cGhDb3VudCwgZ2x5cGhCdWZmZXJTaXplIC0g
bGFzdEdseXBoQ291bnQpOwpAQCAtMTY2LDggKzE2Niw4IEBAIGlubGluZSB1bnNpZ25lZCBXaWR0
aEl0ZXJhdG9yOjphZHZhbmNlSW4KICAgICBmbG9hdCBsYXN0Um91bmRpbmdXaWR0aCA9IG1fZmlu
YWxSb3VuZGluZ1dpZHRoOwogICAgIEZsb2F0UmVjdCBib3VuZHM7CiAKLSAgICBjb25zdCBTaW1w
bGVGb250RGF0YSYgcHJpbWFyeUZvbnREYXRhID0gbV9mb250LT5wcmltYXJ5Rm9udERhdGEoKTsK
LSAgICBjb25zdCBTaW1wbGVGb250RGF0YSogbGFzdEZvbnREYXRhID0gJnByaW1hcnlGb250RGF0
YTsKKyAgICBjb25zdCBGb250JiBwcmltYXJ5Rm9udCA9IG1fZm9udC0+cHJpbWFyeUZvbnQoKTsK
KyAgICBjb25zdCBGb250KiBsYXN0Rm9udERhdGEgPSAmcHJpbWFyeUZvbnQ7CiAgICAgaW50IGxh
c3RHbHlwaENvdW50ID0gZ2x5cGhCdWZmZXIgPyBnbHlwaEJ1ZmZlci0+c2l6ZSgpIDogMDsKIAog
ICAgIFVDaGFyMzIgY2hhcmFjdGVyID0gMDsKQEAgLTE4MywxNSArMTgzLDE1IEBAIGlubGluZSB1
bnNpZ25lZCBXaWR0aEl0ZXJhdG9yOjphZHZhbmNlSW4KICAgICAgICAgICAgIHRleHRJdGVyYXRv
ci5hZHZhbmNlKGFkdmFuY2VMZW5ndGgpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IH0KLSAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhID0gZ2x5cGhEYXRhLmZv
bnREYXRhOwotICAgICAgICBBU1NFUlQoZm9udERhdGEpOworICAgICAgICBjb25zdCBGb250KiBm
b250ID0gZ2x5cGhEYXRhLmZvbnQ7CisgICAgICAgIEFTU0VSVChmb250KTsKIAogICAgICAgICAv
LyBOb3cgdGhhdCB3ZSBoYXZlIGEgZ2x5cGggYW5kIGZvbnQgZGF0YSwgZ2V0IGl0cyB3aWR0aC4K
ICAgICAgICAgZmxvYXQgd2lkdGg7CiAgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gJ1x0JyAmJiBt
X3J1bi5hbGxvd1RhYnMoKSkKLSAgICAgICAgICAgIHdpZHRoID0gbV9mb250LT50YWJXaWR0aCgq
Zm9udERhdGEsIG1fcnVuLnRhYlNpemUoKSwgbV9ydW4ueFBvcygpICsgbV9ydW5XaWR0aFNvRmFy
ICsgd2lkdGhTaW5jZUxhc3RSb3VuZGluZyk7CisgICAgICAgICAgICB3aWR0aCA9IG1fZm9udC0+
dGFiV2lkdGgoKmZvbnQsIG1fcnVuLnRhYlNpemUoKSwgbV9ydW4ueFBvcygpICsgbV9ydW5XaWR0
aFNvRmFyICsgd2lkdGhTaW5jZUxhc3RSb3VuZGluZyk7CiAgICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgd2lkdGggPSBmb250RGF0YS0+d2lkdGhGb3JHbHlwaChnbHlwaCk7CisgICAgICAgICAg
ICB3aWR0aCA9IGZvbnQtPndpZHRoRm9yR2x5cGgoZ2x5cGgpOwogCiAgICAgICAgICAgICAvLyBT
VkcgdXNlcyBob3Jpem9udGFsR2x5cGhTdHJldGNoKCksIHdoZW4gdGV4dExlbmd0aCBpcyB1c2Vk
IHRvIHN0cmV0Y2gvc3F1ZWV6ZSB0ZXh0LgogICAgICAgICAgICAgd2lkdGggKj0gbV9ydW4uaG9y
aXpvbnRhbEdseXBoU3RyZXRjaCgpOwpAQCAtMjAwLDI2ICsyMDAsMjYgQEAgaW5saW5lIHVuc2ln
bmVkIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2VJbgogICAgICAgICAgICAgLy8gRmlyc3QsIHdlIHJv
dW5kIHNwYWNlcyB0byBhbiBhZGp1c3RlZCB3aWR0aCBpbiBhbGwgZm9udHMuCiAgICAgICAgICAg
ICAvLyBTZWNvbmQsIGluIGZpeGVkLXBpdGNoIGZvbnRzIHdlIGVuc3VyZSB0aGF0IGFsbCBjaGFy
YWN0ZXJzIHRoYXQKICAgICAgICAgICAgIC8vIG1hdGNoIHRoZSB3aWR0aCBvZiB0aGUgc3BhY2Ug
Y2hhcmFjdGVyIGhhdmUgdGhlIHNhbWUgd2lkdGggYXMgdGhlIHNwYWNlIGNoYXJhY3Rlci4KLSAg
ICAgICAgICAgIGlmIChtX3J1bi5hcHBseVdvcmRSb3VuZGluZygpICYmIHdpZHRoID09IGZvbnRE
YXRhLT5zcGFjZVdpZHRoKCkgJiYgKGZvbnREYXRhLT5waXRjaCgpID09IEZpeGVkUGl0Y2ggfHwg
Z2x5cGggPT0gZm9udERhdGEtPnNwYWNlR2x5cGgoKSkpCi0gICAgICAgICAgICAgICAgd2lkdGgg
PSBmb250RGF0YS0+YWRqdXN0ZWRTcGFjZVdpZHRoKCk7CisgICAgICAgICAgICBpZiAobV9ydW4u
YXBwbHlXb3JkUm91bmRpbmcoKSAmJiB3aWR0aCA9PSBmb250LT5zcGFjZVdpZHRoKCkgJiYgKGZv
bnQtPnBpdGNoKCkgPT0gRml4ZWRQaXRjaCB8fCBnbHlwaCA9PSBmb250LT5zcGFjZUdseXBoKCkp
KQorICAgICAgICAgICAgICAgIHdpZHRoID0gZm9udC0+YWRqdXN0ZWRTcGFjZVdpZHRoKCk7CiAg
ICAgICAgIH0KIAotICAgICAgICBpZiAoZm9udERhdGEgIT0gbGFzdEZvbnREYXRhICYmIHdpZHRo
KSB7CisgICAgICAgIGlmIChmb250ICE9IGxhc3RGb250RGF0YSAmJiB3aWR0aCkgewogICAgICAg
ICAgICAgaWYgKHNob3VsZEFwcGx5Rm9udFRyYW5zZm9ybXMoKSkgewogICAgICAgICAgICAgICAg
IG1fcnVuV2lkdGhTb0ZhciArPSBhcHBseUZvbnRUcmFuc2Zvcm1zKGdseXBoQnVmZmVyLCBtX3J1
bi5sdHIoKSwgbGFzdEdseXBoQ291bnQsIGxhc3RGb250RGF0YSwgKnRoaXMsIG1fdHlwZXNldHRp
bmdGZWF0dXJlcywgY2hhcmFjdGVyc1RyZWF0ZWRBc1NwYWNlKTsKICAgICAgICAgICAgICAgICBs
YXN0R2x5cGhDb3VudCA9IGdseXBoQnVmZmVyLT5zaXplKCk7IC8vIGFwcGx5Rm9udFRyYW5zZm9y
bXMgZG9lc24ndCB1cGRhdGUgd2hlbiB0aGVyZSBoYWQgYmVlbiBvbmx5IG9uZSBnbHlwaC4KICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgbGFzdEZvbnREYXRhID0gZm9udERhdGE7Ci0gICAg
ICAgICAgICBpZiAobV9mYWxsYmFja0ZvbnRzICYmIGZvbnREYXRhICE9ICZwcmltYXJ5Rm9udERh
dGEpIHsKKyAgICAgICAgICAgIGxhc3RGb250RGF0YSA9IGZvbnQ7CisgICAgICAgICAgICBpZiAo
bV9mYWxsYmFja0ZvbnRzICYmIGZvbnQgIT0gJnByaW1hcnlGb250KSB7CiAgICAgICAgICAgICAg
ICAgLy8gRklYTUU6IFRoaXMgZG9lcyBhIGxpdHRsZSBleHRyYSB3b3JrIHRoYXQgY291bGQgYmUg
YXZvaWRlZCBpZgogICAgICAgICAgICAgICAgIC8vIGdseXBoRGF0YUZvckNoYXJhY3RlcigpIHJl
dHVybmVkIHdoZXRoZXIgaXQgY2hvc2UgdG8gdXNlIGEgc21hbGwgY2FwcyBmb250LgogICAgICAg
ICAgICAgICAgIGlmICghbV9mb250LT5pc1NtYWxsQ2FwcygpIHx8IGNoYXJhY3RlciA9PSB1X3Rv
dXBwZXIoY2hhcmFjdGVyKSkKLSAgICAgICAgICAgICAgICAgICAgbV9mYWxsYmFja0ZvbnRzLT5h
ZGQoZm9udERhdGEpOworICAgICAgICAgICAgICAgICAgICBtX2ZhbGxiYWNrRm9udHMtPmFkZChm
b250KTsKICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
R2x5cGhEYXRhJiB1cHBlcmNhc2VHbHlwaERhdGEgPSBtX2ZvbnQtPmdseXBoRGF0YUZvckNoYXJh
Y3Rlcih1X3RvdXBwZXIoY2hhcmFjdGVyKSwgcnRsKTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KHVwcGVyY2FzZUdseXBoRGF0YS5mb250RGF0YSAhPSAmcHJpbWFyeUZvbnREYXRhKQotICAgICAg
ICAgICAgICAgICAgICAgICAgbV9mYWxsYmFja0ZvbnRzLT5hZGQodXBwZXJjYXNlR2x5cGhEYXRh
LmZvbnREYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHVwcGVyY2FzZUdseXBoRGF0YS5m
b250ICE9ICZwcmltYXJ5Rm9udCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZmFsbGJhY2tG
b250cy0+YWRkKHVwcGVyY2FzZUdseXBoRGF0YS5mb250KTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTI0Myw5ICsyNDMsOSBAQCBpbmxpbmUgdW5zaWdu
ZWQgV2lkdGhJdGVyYXRvcjo6YWR2YW5jZUluCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
Z2x5cGhCdWZmZXIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2x5cGhCdWZm
ZXItPmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9m
b3JUZXh0RW1waGFzaXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlw
aEJ1ZmZlci0+YWRkKGZvbnREYXRhLT56ZXJvV2lkdGhTcGFjZUdseXBoKCksIGZvbnREYXRhLCBt
X2V4cGFuc2lvblBlck9wcG9ydHVuaXR5LCBjdXJyZW50Q2hhcmFjdGVyKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoQnVmZmVyLT5hZGQoZm9udC0+emVyb1dpZHRo
U3BhY2VHbHlwaCgpLCBmb250LCBtX2V4cGFuc2lvblBlck9wcG9ydHVuaXR5LCBjdXJyZW50Q2hh
cmFjdGVyKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhCdWZmZXItPmFkZChmb250RGF0YS0+c3Bh
Y2VHbHlwaCgpLCBmb250RGF0YSwgZXhwYW5zaW9uQXRUaGlzT3Bwb3J0dW5pdHksIGN1cnJlbnRD
aGFyYWN0ZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhCdWZm
ZXItPmFkZChmb250LT5zcGFjZUdseXBoKCksIGZvbnQsIGV4cGFuc2lvbkF0VGhpc09wcG9ydHVu
aXR5LCBjdXJyZW50Q2hhcmFjdGVyKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVs
c2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhCdWZmZXItPmV4cGFuZExh
c3RBZHZhbmNlKGV4cGFuc2lvbkF0VGhpc09wcG9ydHVuaXR5KTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KQEAgLTI3NCw3ICsyNzQsNyBAQCBpbmxpbmUgdW5zaWduZWQgV2lkdGhJdGVyYXRv
cjo6YWR2YW5jZUluCiAgICAgICAgIH0KIAogICAgICAgICBpZiAobV9hY2NvdW50Rm9yR2x5cGhC
b3VuZHMpIHsKLSAgICAgICAgICAgIGJvdW5kcyA9IGZvbnREYXRhLT5ib3VuZHNGb3JHbHlwaChn
bHlwaCk7CisgICAgICAgICAgICBib3VuZHMgPSBmb250LT5ib3VuZHNGb3JHbHlwaChnbHlwaCk7
CiAgICAgICAgICAgICBpZiAoIWN1cnJlbnRDaGFyYWN0ZXIpCiAgICAgICAgICAgICAgICAgbV9m
aXJzdEdseXBoT3ZlcmZsb3cgPSBzdGQ6Om1heDxmbG9hdD4oMCwgLWJvdW5kcy54KCkpOwogICAg
ICAgICB9CkBAIC0zMTQsNyArMzE0LDcgQEAgaW5saW5lIHVuc2lnbmVkIFdpZHRoSXRlcmF0b3I6
OmFkdmFuY2VJbgogICAgICAgICB9CiAKICAgICAgICAgaWYgKGdseXBoQnVmZmVyKQotICAgICAg
ICAgICAgZ2x5cGhCdWZmZXItPmFkZChnbHlwaCwgZm9udERhdGEsIChydGwgPyBvbGRXaWR0aCAr
IGxhc3RSb3VuZGluZ1dpZHRoIDogd2lkdGgpLCBjdXJyZW50Q2hhcmFjdGVyKTsKKyAgICAgICAg
ICAgIGdseXBoQnVmZmVyLT5hZGQoZ2x5cGgsIGZvbnQsIChydGwgPyBvbGRXaWR0aCArIGxhc3RS
b3VuZGluZ1dpZHRoIDogd2lkdGgpLCBjdXJyZW50Q2hhcmFjdGVyKTsKIAogICAgICAgICBsYXN0
Um91bmRpbmdXaWR0aCA9IHdpZHRoIC0gb2xkV2lkdGg7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmgJKHJldmlzaW9uIDE3ODUx
NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtMzIsMTQgKzMyLDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgRm9udENhc2NhZGU7CiBjbGFzcyBHbHlwaEJ1ZmZlcjsKLWNsYXNzIFNpbXBsZUZvbnRE
YXRhOworY2xhc3MgRm9udDsKIGNsYXNzIFRleHRSdW47CiBzdHJ1Y3QgR2x5cGhEYXRhOwogCiBz
dHJ1Y3QgV2lkdGhJdGVyYXRvciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJs
aWM6Ci0gICAgV2lkdGhJdGVyYXRvcihjb25zdCBGb250Q2FzY2FkZSosIGNvbnN0IFRleHRSdW4m
LCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwLCBib29s
IGFjY291bnRGb3JHbHlwaEJvdW5kcyA9IGZhbHNlLCBib29sIGZvclRleHRFbXBoYXNpcyA9IGZh
bHNlKTsKKyAgICBXaWR0aEl0ZXJhdG9yKGNvbnN0IEZvbnRDYXNjYWRlKiwgY29uc3QgVGV4dFJ1
biYsIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzID0gMCwgYm9vbCBhY2NvdW50
Rm9yR2x5cGhCb3VuZHMgPSBmYWxzZSwgYm9vbCBmb3JUZXh0RW1waGFzaXMgPSBmYWxzZSk7CiAK
ICAgICB1bnNpZ25lZCBhZHZhbmNlKGludCB0bywgR2x5cGhCdWZmZXIqKTsKICAgICBib29sIGFk
dmFuY2VPbmVDaGFyYWN0ZXIoZmxvYXQmIHdpZHRoLCBHbHlwaEJ1ZmZlciYpOwpAQCAtOTQsNyAr
OTQsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgc2hvdWxkQXBwbHlGb250VHJhbnNmb3JtcygpIGNv
bnN0IHsgcmV0dXJuIG1fcnVuLmxlbmd0aCgpID4gMSAmJiAobV90eXBlc2V0dGluZ0ZlYXR1cmVz
ICYgKEtlcm5pbmcgfCBMaWdhdHVyZXMpKTsgfQogCiAgICAgVHlwZXNldHRpbmdGZWF0dXJlcyBt
X3R5cGVzZXR0aW5nRmVhdHVyZXM7Ci0gICAgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+
KiBtX2ZhbGxiYWNrRm9udHM7CisgICAgSGFzaFNldDxjb25zdCBGb250Kj4qIG1fZmFsbGJhY2tG
b250czsKICAgICBib29sIG1fYWNjb3VudEZvckdseXBoQm91bmRzOwogICAgIGZsb2F0IG1fbWF4
R2x5cGhCb3VuZGluZ0JveFk7CiAgICAgZmxvYXQgbV9taW5HbHlwaEJvdW5kaW5nQm94WTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9Gb250Q2FjaGVJT1MubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0ZvbnRD
YWNoZUlPUy5tbQkocmV2aXNpb24gMTc4NTE1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvaW9zL0ZvbnRDYWNoZUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMs
NyBAQCBzdGF0aWMgQ0ZDaGFyYWN0ZXJTZXRSZWYgcGhvbmVGYWxsYmFja0NoCiAgICAgcmV0dXJu
IGNoYXJhY3RlclNldDsKIH0KIAotUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hl
OjpnZXRTeXN0ZW1Gb250RmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlv
biYgZGVzY3JpcHRpb24sIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBvcmlnaW5hbEZvbnREYXRhLCBj
b25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKK1Bhc3NSZWZQdHI8Rm9udD4gRm9u
dENhY2hlOjpnZXRTeXN0ZW1Gb250RmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IEZvbnQqIG9yaWdpbmFsRm9udERhdGEsIGNvbnN0
IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQogewogICAgIGNvbnN0IEZvbnRQbGF0Zm9y
bURhdGEmIHBsYXRmb3JtRGF0YSA9IG9yaWdpbmFsRm9udERhdGEtPnBsYXRmb3JtRGF0YSgpOwog
ICAgIENURm9udFJlZiBjdEZvbnQgPSBwbGF0Zm9ybURhdGEuZm9udCgpOwpAQCAtMTk0LDcgKzE5
NCw3IEBAIHN0YXRpYyBMYW5ndWFnZVNwZWNpZmljRm9udCBsYW5ndWFnZVNwZWMKICAgICByZXR1
cm4gTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6Ok5vbmU7CiB9CiAKLVJlZlB0cjxTaW1wbGVGb250RGF0
YT4gRm9udENhY2hlOjpzeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiBkZXNjcmlwdGlvbiwgY29uc3QgU2ltcGxlRm9udERhdGEqIG9yaWdpbmFsRm9udERh
dGEsIGJvb2wsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQorUmVmUHRyPEZv
bnQ+IEZvbnRDYWNoZTo6c3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IEZvbnQqIG9yaWdpbmFsRm9udERhdGEsIGJvb2ws
IGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQogewogICAgIC8vIFVubGlrZSBP
UyBYLCBvdXIgZmFsbGJhY2sgZm9udCBvbiBpUGhvbmUgaXMgQXJpYWwgVW5pY29kZSwgd2hpY2gg
ZG9lc24ndCBoYXZlIHNvbWUgYXBwbGUtc3BlY2lmaWMgZ2x5cGhzIGxpa2UgRjhGRi4KICAgICAv
LyBGYWxsIGJhY2sgdG8gdGhlIEFwcGxlIEZhbGxiYWNrIGZvbnQgaW4gdGhpcyBjYXNlLgpAQCAt
MjIwLDcgKzIyMCw3IEBAIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpzeXN0ZW0K
ICAgICBpZiAobGVuZ3RoID4gMCkKICAgICAgICAgbGFuZ3VhZ2VTcGVjaWZpY0ZvbnQgPSBsYW5n
dWFnZVNwZWNpZmljRmFsbGJhY2tGb250KGMpOwogCi0gICAgUmVmUHRyPFNpbXBsZUZvbnREYXRh
PiBzaW1wbGVGb250RGF0YTsKKyAgICBSZWZQdHI8Rm9udD4gZm9udDsKIAogICAgIHN3aXRjaCAo
bGFuZ3VhZ2VTcGVjaWZpY0ZvbnQpIHsKICAgICBjYXNlIExhbmd1YWdlU3BlY2lmaWNGb250OjpD
aGluZXNlSmFwYW5lc2U6IHsKQEAgLTI5OCw0MyArMjk4LDQzIEBAIFJlZlB0cjxTaW1wbGVGb250
RGF0YT4gRm9udENhY2hlOjpzeXN0ZW0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAg
ICAgIHNpbXBsZUZvbnREYXRhID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgaXNGb250V2Vp
Z2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyAqY2prQm9sZFtwcmVmZXJyZWRDSktGb250
XSA6ICpjamtQbGFpbltwcmVmZXJyZWRDSktGb250XSwgZmFsc2UpOworICAgICAgICBmb250ID0g
Zm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53
ZWlnaHQoKSkgPyAqY2prQm9sZFtwcmVmZXJyZWRDSktGb250XSA6ICpjamtQbGFpbltwcmVmZXJy
ZWRDSktGb250XSwgZmFsc2UpOwogICAgICAgICBib29sIHVzZVNlY29uZGFyeUZvbnQgPSB0cnVl
OwotICAgICAgICBpZiAoc2ltcGxlRm9udERhdGEpIHsKKyAgICAgICAgaWYgKGZvbnQpIHsKICAg
ICAgICAgICAgIENHR2x5cGggZ2x5cGhzWzJdOwogICAgICAgICAgICAgLy8gQ0dGb250R2V0R2x5
cGhzRm9yVW5pY2hhcnMgdGFrZXMgVVRGLTE2IGJ1ZmZlci4gU2hvdWxkIG9ubHkgYmUgMSBjb2Rl
cG9pbnQgYnV0IHNpbmNlIHdlIG1heSBwYXNzIGluIHR3byBVVEYtMTYgY2hhcmFjdGVycywKICAg
ICAgICAgICAgIC8vIG1ha2Ugcm9vbSBmb3IgMiBnbHlwaHMganVzdCB0byBiZSBzYWZlLgotICAg
ICAgICAgICAgQ0dGb250R2V0R2x5cGhzRm9yVW5pY2hhcnMoc2ltcGxlRm9udERhdGEtPnBsYXRm
b3JtRGF0YSgpLmNnRm9udCgpLCBjaGFyYWN0ZXJzLCBnbHlwaHMsIGxlbmd0aCk7CisgICAgICAg
ICAgICBDR0ZvbnRHZXRHbHlwaHNGb3JVbmljaGFycyhmb250LT5wbGF0Zm9ybURhdGEoKS5jZ0Zv
bnQoKSwgY2hhcmFjdGVycywgZ2x5cGhzLCBsZW5ndGgpOwogCiAgICAgICAgICAgICB1c2VTZWNv
bmRhcnlGb250ID0gKGdseXBoc1swXSA9PSAwKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICh1
c2VTZWNvbmRhcnlGb250KQotICAgICAgICAgICAgc2ltcGxlRm9udERhdGEgPSBmb250Rm9yRmFt
aWx5KGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/
ICpjamtCb2xkW3NlY29uZGFyeUNKS0ZvbnRdIDogKmNqa1BsYWluW3NlY29uZGFyeUNKS0ZvbnRd
LCBmYWxzZSk7CisgICAgICAgICAgICBmb250ID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwg
aXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyAqY2prQm9sZFtzZWNvbmRh
cnlDSktGb250XSA6ICpjamtQbGFpbltzZWNvbmRhcnlDSktGb250XSwgZmFsc2UpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgY2FzZSBMYW5ndWFnZVNwZWNpZmljRm9udDo6S29yZWFuOiB7
CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGtvcmVhblBsYWlu
KCJBcHBsZVNER290aGljTmVvLU1lZGl1bSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpOwogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBrb3Jl
YW5Cb2xkKCJBcHBsZVNER290aGljTmVvLUJvbGQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZy
b21MaXRlcmFsKTsKLSAgICAgICAgc2ltcGxlRm9udERhdGEgPSBmb250Rm9yRmFtaWx5KGRlc2Ny
aXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/IGtvcmVhbkJv
bGQgOiBrb3JlYW5QbGFpbiwgZmFsc2UpOworICAgICAgICBmb250ID0gZm9udEZvckZhbWlseShk
ZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBrb3Jl
YW5Cb2xkIDoga29yZWFuUGxhaW4sIGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
IGNhc2UgTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6OkN5cmlsbGljOiB7CiAgICAgICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGN5cmlsbGljUGxhaW4oIkhlbHZldGljYU5ldWUi
LCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKICAgICAgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gY3lyaWxsaWNCb2xkKCJIZWx2ZXRpY2FOZXVlLUJv
bGQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAgc2ltcGxl
Rm9udERhdGEgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRl
c2NyaXB0aW9uLndlaWdodCgpKSA/IGN5cmlsbGljQm9sZCA6IGN5cmlsbGljUGxhaW4sIGZhbHNl
KTsKKyAgICAgICAgZm9udCA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGlzRm9udFdlaWdo
dEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gY3lyaWxsaWNCb2xkIDogY3lyaWxsaWNQbGFp
biwgZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBMYW5ndWFnZVNwZWNp
ZmljRm9udDo6QXJhYmljOiB7CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNT
dHJpbmc+IGFyYWJpY1BsYWluKCJHZWV6YVBybyIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpOwogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBh
cmFiaWNCb2xkKCJHZWV6YVByby1Cb2xkIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCk7Ci0gICAgICAgIHNpbXBsZUZvbnREYXRhID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlv
biwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBhcmFiaWNCb2xkIDog
YXJhYmljUGxhaW4sIGZhbHNlKTsKKyAgICAgICAgZm9udCA9IGZvbnRGb3JGYW1pbHkoZGVzY3Jp
cHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gYXJhYmljQm9s
ZCA6IGFyYWJpY1BsYWluLCBmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNl
IExhbmd1YWdlU3BlY2lmaWNGb250OjpIZWJyZXc6IHsKICAgICAgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPEF0b21pY1N0cmluZz4gaGVicmV3UGxhaW4oIkFyaWFsSGVicmV3IiwgQXRvbWljU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxBdG9taWNTdHJpbmc+IGhlYnJld0JvbGQoIkFyaWFsSGVicmV3LUJvbGQiLCBBdG9taWNTdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAgc2ltcGxlRm9udERhdGEgPSBmb250
Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdo
dCgpKSA/IGhlYnJld0JvbGQgOiBoZWJyZXdQbGFpbiwgZmFsc2UpOworICAgICAgICBmb250ID0g
Zm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53
ZWlnaHQoKSkgPyBoZWJyZXdCb2xkIDogaGVicmV3UGxhaW4sIGZhbHNlKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgIGNhc2UgTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6OkluZGljOiB7CkBAIC0z
OTAsMzYgKzM5MCwzNiBAQCBSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6c3lzdGVt
CiAgICAgICAgIGlmIChpbmRpY1BhZ2VPcmRlckluZGV4IDwgKHNpemVvZihpbmRpY1VuaWNvZGVQ
YWdlRm9udHMpIC8gc2l6ZW9mKEF0b21pY1N0cmluZyopKSkgewogICAgICAgICAgICAgQXRvbWlj
U3RyaW5nKiBpbmRpY0ZvbnRTdHJpbmcgPSBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndl
aWdodCgpKSA/IGluZGljVW5pY29kZVBhZ2VGb250c0JvbGRbaW5kaWNQYWdlT3JkZXJJbmRleF0g
OiBpbmRpY1VuaWNvZGVQYWdlRm9udHNbaW5kaWNQYWdlT3JkZXJJbmRleF07CiAgICAgICAgICAg
ICBpZiAoaW5kaWNGb250U3RyaW5nKQotICAgICAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0g
Zm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgKmluZGljRm9udFN0cmluZywgZmFsc2UpOworICAg
ICAgICAgICAgICAgIGZvbnQgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCAqaW5kaWNGb250
U3RyaW5nLCBmYWxzZSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNh
c2UgTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6OlRoYWk6IHsKICAgICAgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPEF0b21pY1N0cmluZz4gdGhhaVBsYWluKCJUaG9uYnVyaSIsIEF0b21pY1N0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpOwogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRv
bWljU3RyaW5nPiB0aGFpQm9sZCgiVGhvbmJ1cmktQm9sZCIsIEF0b21pY1N0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpOwotICAgICAgICBzaW1wbGVGb250RGF0YSA9IGZvbnRGb3JGYW1pbHko
ZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gdGhh
aUJvbGQgOiB0aGFpUGxhaW4sIGZhbHNlKTsKKyAgICAgICAgZm9udCA9IGZvbnRGb3JGYW1pbHko
ZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gdGhh
aUJvbGQgOiB0aGFpUGxhaW4sIGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNh
c2UgTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6OlRpYmV0YW46IHsKICAgICAgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPEF0b21pY1N0cmluZz4gdGliZXRhblBsYWluKCJLYWlsYXNhIiwgQXRvbWljU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxBdG9taWNTdHJpbmc+IHRpYmV0YW5Cb2xkKCJLYWlsYXNhLUJvbGQiLCBBdG9taWNTdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAgc2ltcGxlRm9udERhdGEgPSBmb250Rm9y
RmFtaWx5KGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgp
KSA/IHRpYmV0YW5Cb2xkIDogdGliZXRhblBsYWluLCBmYWxzZSk7CisgICAgICAgIGZvbnQgPSBm
b250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndl
aWdodCgpKSA/IHRpYmV0YW5Cb2xkIDogdGliZXRhblBsYWluLCBmYWxzZSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICBjYXNlIExhbmd1YWdlU3BlY2lmaWNGb250OjpDYW5hZGlhbkFib3Jp
Z2luYWxTeWxsYWJpYzogewogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3Ry
aW5nPiBjYXNQbGFpbigiRXVwaGVtaWFVQ0FTIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCk7CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGNh
c0JvbGQoIkV1cGhlbWlhVUNBUy1Cb2xkIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCk7Ci0gICAgICAgIHNpbXBsZUZvbnREYXRhID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlv
biwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBjYXNCb2xkIDogY2Fz
UGxhaW4sIGZhbHNlKTsKKyAgICAgICAgZm9udCA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24s
IGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gY2FzQm9sZCA6IGNhc1Bs
YWluLCBmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIExhbmd1YWdlU3Bl
Y2lmaWNGb250OjpLaG1lcjogewogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWlj
U3RyaW5nPiBraG1lcigiS2htZXJTYW5nYW1NTiIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpOwotICAgICAgICBzaW1wbGVGb250RGF0YSA9IGZvbnRGb3JGYW1pbHkoZGVzY3Jp
cHRpb24sIGtobWVyLCBmYWxzZSk7CisgICAgICAgIGZvbnQgPSBmb250Rm9yRmFtaWx5KGRlc2Ny
aXB0aW9uLCBraG1lciwgZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBM
YW5ndWFnZVNwZWNpZmljRm9udDo6TGFvOiB7CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxBdG9taWNTdHJpbmc+IGxhbygiTGFvU2FuZ2FtTU4iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKTsKLSAgICAgICAgc2ltcGxlRm9udERhdGEgPSBmb250Rm9yRmFtaWx5KGRl
c2NyaXB0aW9uLCBsYW8sIGZhbHNlKTsKKyAgICAgICAgZm9udCA9IGZvbnRGb3JGYW1pbHkoZGVz
Y3JpcHRpb24sIGxhbywgZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgZGVmYXVs
dDogewpAQCAtNDMwLDI3ICs0MzAsMjcgQEAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2Fj
aGU6OnN5c3RlbQogICAgICAgICAgICAgICAgIHVzZUVtb2ppRm9udCA9IENGQ2hhcmFjdGVyU2V0
SXNMb25nQ2hhcmFjdGVyTWVtYmVyKGFwcGxlQ29sb3JFbW9qaUNoYXJhY3RlclNldCgpLCBjKTsK
ICAgICAgICAgfQogICAgICAgICBpZiAodXNlRW1vamlGb250KQotICAgICAgICAgICAgc2ltcGxl
Rm9udERhdGEgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBhcHBsZUNvbG9yRW1vamksIGZh
bHNlKTsKKyAgICAgICAgICAgIGZvbnQgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBhcHBs
ZUNvbG9yRW1vamksIGZhbHNlKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBSZXRhaW5Q
dHI8Q1RGb250UmVmPiBmYWxsYmFja0ZvbnQgPSBhZG9wdENGKENURm9udENyZWF0ZUZvckNoYXJh
Y3RlcnMob3JpZ2luYWxGb250RGF0YS0+Z2V0Q1RGb250KCksIGNoYXJhY3RlcnMsIGxlbmd0aCwg
bnVsbHB0cikpOwogICAgICAgICAgICAgaWYgKFJldGFpblB0cjxDRlN0cmluZ1JlZj4gZm91bmRG
b250TmFtZSA9IGFkb3B0Q0YoQ1RGb250Q29weVBvc3RTY3JpcHROYW1lKGZhbGxiYWNrRm9udC5n
ZXQoKSkpKQotICAgICAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gZm9udEZvckZhbWlseShk
ZXNjcmlwdGlvbiwgZm91bmRGb250TmFtZS5nZXQoKSwgZmFsc2UpOworICAgICAgICAgICAgICAg
IGZvbnQgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBmb3VuZEZvbnROYW1lLmdldCgpLCBm
YWxzZSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIH0KIAotICAgIGlm
IChzaW1wbGVGb250RGF0YSkKLSAgICAgICAgcmV0dXJuIHNpbXBsZUZvbnREYXRhLnJlbGVhc2Uo
KTsKKyAgICBpZiAoZm9udCkKKyAgICAgICAgcmV0dXJuIGZvbnQucmVsZWFzZSgpOwogCiAgICAg
cmV0dXJuIGxhc3RSZXNvcnRGYWxsYmFja0ZvbnQoZGVzY3JpcHRpb24pOwogfQogCi1SZWZQdHI8
U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6c2ltaWxhckZvbnRQbGF0Zm9ybURhdGEoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKK1JlZlB0cjxGb250PiBGb250Q2FjaGU6OnNp
bWlsYXJGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCiB7CiAgICAgLy8g
QXR0ZW1wdCB0byBmaW5kIGFuIGFwcHJvcHJpYXRlIGZvbnQgdXNpbmcgYSBtYXRjaCBiYXNlZCBv
biB0aGUgcHJlc2VuY2Ugb2Yga2V5d29yZHMgaW4KICAgICAvLyB0aGUgcmVxdWVzdGVkIG5hbWVz
LiBGb3IgZXhhbXBsZSwgd2UnbGwgbWF0Y2ggYW55IG5hbWUgdGhhdCBjb250YWlucyAiQXJhYmlj
IiB0byBHZWV6YSBQcm8uCi0gICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBzaW1wbGVGb250RGF0
YTsKKyAgICBSZWZQdHI8Rm9udD4gZm9udDsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
ZGVzY3JpcHRpb24uZmFtaWx5Q291bnQoKTsgKytpKSB7CiAgICAgICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgZmFtaWx5ID0gZGVzY3JpcHRpb24uZmFtaWx5QXQoaSk7CiAgICAgICAgIGlmIChmYW1p
bHkuaXNFbXB0eSgpKQpAQCAtNDYxLDcgKzQ2MSw3IEBAIFJlZlB0cjxTaW1wbGVGb250RGF0YT4g
Rm9udENhY2hlOjpzaW1pbGEKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0
cmluZz4gbWVubG8oIm1lbmxvIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7
CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGNvdXJpZXIoImNv
dXJpZXIiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKICAgICAgICAgaWYg
KGVxdWFsSWdub3JpbmdDYXNlKGZhbWlseSwgbW9uYWNvKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShm
YW1pbHksIG1lbmxvKSkgewotICAgICAgICAgICAgc2ltcGxlRm9udERhdGEgPSBmb250Rm9yRmFt
aWx5KGRlc2NyaXB0aW9uLCBjb3VyaWVyKTsKKyAgICAgICAgICAgIGZvbnQgPSBmb250Rm9yRmFt
aWx5KGRlc2NyaXB0aW9uLCBjb3VyaWVyKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICB9CiAKQEAgLTQ2OSw3ICs0NjksNyBAQCBSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNo
ZTo6c2ltaWxhCiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGx1
Y2lkYUdyYW5kZSgibHVjaWRhIGdyYW5kZSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpOwogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiB2ZXJk
YW5hKCJ2ZXJkYW5hIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CiAgICAg
ICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShmYW1pbHksIGx1Y2lkYUdyYW5kZSkpIHsKLSAgICAg
ICAgICAgIHNpbXBsZUZvbnREYXRhID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgdmVyZGFu
YSk7CisgICAgICAgICAgICBmb250ID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgdmVyZGFu
YSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCkBAIC00NzksMTUgKzQ3OSwx
NiBAQCBSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6c2ltaWxhCiAgICAgICAgIHN0
YXRpYyBTdHJpbmcqIG1hdGNoV29yZHNbM10gPSB7ICZhcmFiaWMuZ2V0KCksICZwYXNodG8uZ2V0
KCksICZ1cmR1LmdldCgpIH07CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNT
dHJpbmc+IGdlZXphUGxhaW4oIkdlZXphUHJvIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCk7CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGdl
ZXphQm9sZCgiR2VlemFQcm8tQm9sZCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVy
YWwpOwotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDMgJiYgIXNpbXBsZUZvbnREYXRhOyAr
K2opCisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgMyAmJiAhZm9udDsgKytqKSB7CiAgICAg
ICAgICAgICBpZiAoZmFtaWx5LmNvbnRhaW5zKCptYXRjaFdvcmRzW2pdLCBmYWxzZSkpCi0gICAg
ICAgICAgICAgICAgc2ltcGxlRm9udERhdGEgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBp
c0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/IGdlZXphQm9sZCA6IGdlZXph
UGxhaW4pOworICAgICAgICAgICAgICAgIGZvbnQgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9u
LCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/IGdlZXphQm9sZCA6IGdl
ZXphUGxhaW4pOworICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIHNpbXBsZUZvbnREYXRh
LnJlbGVhc2UoKTsKKyAgICByZXR1cm4gZm9udC5yZWxlYXNlKCk7CiB9CiAKLVJlZjxTaW1wbGVG
b250RGF0YT4gRm9udENhY2hlOjpsYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKQorUmVmPEZvbnQ+IEZvbnRDYWNoZTo6bGFzdFJlc29y
dEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikKIHsK
ICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBmYWxsYmFja0ZvbnRGYW1p
bHkoIi5QaG9uZUZhbGxiYWNrIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7
CiAgICAgcmV0dXJuICpmb250Rm9yRmFtaWx5KGZvbnREZXNjcmlwdGlvbiwgZmFsbGJhY2tGb250
RmFtaWx5LCBmYWxzZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9p
b3MvRm9udElPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9pb3MvRm9udElPUy5tbQkocmV2aXNpb24gMTc4NTEwKQkoZnJvbSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvU2ltcGxlRm9udERhdGFJT1MubW06MTc4NTEwKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0ZvbnRJT1MubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYs
IDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmln
LmgiCisjaW1wb3J0ICJTaW1wbGVGb250RGF0YS5oIgorCisjaW1wb3J0ICJCbG9ja0V4Y2VwdGlv
bnMuaCIKKyNpbXBvcnQgIkNvcmVHcmFwaGljc1NQSS5oIgorI2ltcG9ydCAiRm9udENhY2hlLmgi
CisjaW1wb3J0ICJGb250Q2FzY2FkZS5oIgorI2ltcG9ydCAiRm9udERlc2NyaXB0aW9uLmgiCisj
aW1wb3J0ICJGb250U2VydmljZXNJT1MuaCIKKyNpbXBvcnQgPENvcmVUZXh0L0NvcmVUZXh0Lmg+
CisjaW1wb3J0IDxmbG9hdC5oPgorI2ltcG9ydCA8dW5pY29kZS91Y2hhci5oPgorI2ltcG9ydCA8
d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitzdGF0aWMgYm9vbCBmb250RmFtaWx5U2hvdWxkTm90QmVVc2VkRm9y
QXJhYmljKENGU3RyaW5nUmVmIGZvbnRGYW1pbHlOYW1lKQoreworICAgIGlmICghZm9udEZhbWls
eU5hbWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFRpbWVzIE5ldyBSb21hbiBj
b250YWlucyBBcmFiaWMgZ2x5cGhzLCBidXQgQ29yZSBUZXh0IGRvZXNuJ3Qga25vdyBob3cgdG8g
c2hhcGUgdGhlbS4gPHJkYXI6Ly9wcm9ibGVtLzk4MjM5NzU+CisgICAgLy8gRklYTUUgPHJkYXI6
Ly9wcm9ibGVtLzEyMDk2ODM1PiByZW1vdmUgdGhpcyBmdW5jdGlvbiBvbmNlIHRoZSBhYm92ZSBi
dWcgaXMgZml4ZWQuCisgICAgLy8gQXJpYWwgYW5kIFRhaG9tYSBhcmUgaGF2ZSBwZXJmb3JtYW5j
ZSBpc3N1ZXMgc28gZG9uJ3QgdXNlIHRoZW0gYXMgd2VsbC4KKyAgICByZXR1cm4gKENGU3RyaW5n
Q29tcGFyZShDRlNUUigiVGltZXMgTmV3IFJvbWFuIiksIGZvbnRGYW1pbHlOYW1lLCAwKSA9PSBr
Q0ZDb21wYXJlRXF1YWxUbykKKyAgICAgICAgICAgfHwgKENGU3RyaW5nQ29tcGFyZShDRlNUUigi
QXJpYWwiKSwgZm9udEZhbWlseU5hbWUsIDApID09IGtDRkNvbXBhcmVFcXVhbFRvKQorICAgICAg
ICAgICB8fCAoQ0ZTdHJpbmdDb21wYXJlKENGU1RSKCJUYWhvbWEiKSwgZm9udEZhbWlseU5hbWUs
IDApID09IGtDRkNvbXBhcmVFcXVhbFRvKTsKK30KKworc3RhdGljIGJvb2wgZm9udEhhc1ZlcnRp
Y2FsR2x5cGhzKENURm9udFJlZiBjdEZvbnQpCit7CisgICAgLy8gVGhlIGNoZWNrIGRvZXNuJ3Qg
bG9vayBuZWF0IGJ1dCB0aGlzIGlzIHdoYXQgQXBwS2l0IGRvZXMgZm9yIHZlcnRpY2FsIHdyaXRp
bmcuLi4KKyAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gdGFibGVUYWdzID0gYWRvcHRDRihDVEZv
bnRDb3B5QXZhaWxhYmxlVGFibGVzKGN0Rm9udCwga0NURm9udFRhYmxlT3B0aW9uTm9PcHRpb25z
KSk7CisgICAgQ0ZJbmRleCBudW1UYWJsZXMgPSBDRkFycmF5R2V0Q291bnQodGFibGVUYWdzLmdl
dCgpKTsKKyAgICBmb3IgKENGSW5kZXggaW5kZXggPSAwOyBpbmRleCA8IG51bVRhYmxlczsgKytp
bmRleCkgeworICAgICAgICBDVEZvbnRUYWJsZVRhZyB0YWcgPSAoQ1RGb250VGFibGVUYWcpKHVp
bnRwdHJfdClDRkFycmF5R2V0VmFsdWVBdEluZGV4KHRhYmxlVGFncy5nZXQoKSwgaW5kZXgpOwor
ICAgICAgICBpZiAodGFnID09IGtDVEZvbnRUYWJsZVZoZWEgfHwgdGFnID09IGtDVEZvbnRUYWJs
ZVZPUkcpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNl
OworfQorCit2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUluaXQoKQoreworICAgIG1fc3lu
dGhldGljQm9sZE9mZnNldCA9IG1fcGxhdGZvcm1EYXRhLm1fc3ludGhldGljQm9sZCA/IGNlaWxm
KG1fcGxhdGZvcm1EYXRhLnNpemUoKSAgLyAyNC4wZikgOiAwLmY7CisgICAgbV9zcGFjZUdseXBo
ID0gMDsKKyAgICBtX3NwYWNlV2lkdGggPSAwOworICAgIHVuc2lnbmVkIHVuaXRzUGVyRW07Cisg
ICAgZmxvYXQgYXNjZW50OworICAgIGZsb2F0IGRlc2NlbnQ7CisgICAgZmxvYXQgY2FwSGVpZ2h0
OworICAgIGZsb2F0IGxpbmVHYXA7CisgICAgZmxvYXQgbGluZVNwYWNpbmc7CisgICAgZmxvYXQg
eEhlaWdodDsKKyAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGZhbWlseU5hbWU7CisgICAgaWYg
KENURm9udFJlZiBjdEZvbnQgPSBtX3BsYXRmb3JtRGF0YS5mb250KCkpIHsKKyAgICAgICAgRm9u
dFNlcnZpY2VzSU9TIGZvbnRTZXJ2aWNlKGN0Rm9udCk7CisgICAgICAgIGFzY2VudCA9IGNlaWxm
KGZvbnRTZXJ2aWNlLmFzY2VudCgpKTsKKyAgICAgICAgZGVzY2VudCA9IGNlaWxmKGZvbnRTZXJ2
aWNlLmRlc2NlbnQoKSk7CisgICAgICAgIGxpbmVTcGFjaW5nID0gZm9udFNlcnZpY2UubGluZVNw
YWNpbmcoKTsKKyAgICAgICAgbGluZUdhcCA9IGZvbnRTZXJ2aWNlLmxpbmVHYXAoKTsKKyAgICAg
ICAgeEhlaWdodCA9IGZvbnRTZXJ2aWNlLnhIZWlnaHQoKTsKKyAgICAgICAgY2FwSGVpZ2h0ID0g
Zm9udFNlcnZpY2UuY2FwSGVpZ2h0KCk7CisgICAgICAgIHVuaXRzUGVyRW0gPSBmb250U2Vydmlj
ZS51bml0c1BlckVtKCk7CisgICAgICAgIGZhbWlseU5hbWUgPSBhZG9wdENGKENURm9udENvcHlG
YW1pbHlOYW1lKGN0Rm9udCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIENHRm9udFJlZiBjZ0Zv
bnQgPSBtX3BsYXRmb3JtRGF0YS5jZ0ZvbnQoKTsKKworICAgICAgICB1bml0c1BlckVtID0gQ0dG
b250R2V0VW5pdHNQZXJFbShjZ0ZvbnQpOworCisgICAgICAgIGZsb2F0IHBvaW50U2l6ZSA9IG1f
cGxhdGZvcm1EYXRhLnNpemUoKTsKKyAgICAgICAgYXNjZW50ID0gbHJvdW5kZihzY2FsZUVtVG9V
bml0cyhDR0ZvbnRHZXRBc2NlbnQoY2dGb250KSwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemUpOwor
ICAgICAgICBkZXNjZW50ID0gbHJvdW5kZigtc2NhbGVFbVRvVW5pdHMoLWFicyhDR0ZvbnRHZXRE
ZXNjZW50KGNnRm9udCkpLCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZSk7CisgICAgICAgIGxpbmVH
YXAgPSBscm91bmRmKHNjYWxlRW1Ub1VuaXRzKENHRm9udEdldExlYWRpbmcoY2dGb250KSwgdW5p
dHNQZXJFbSkgKiBwb2ludFNpemUpOworICAgICAgICB4SGVpZ2h0ID0gc2NhbGVFbVRvVW5pdHMo
Q0dGb250R2V0WEhlaWdodChjZ0ZvbnQpLCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZTsKKyAgICAg
ICAgY2FwSGVpZ2h0ID0gc2NhbGVFbVRvVW5pdHMoQ0dGb250R2V0Q2FwSGVpZ2h0KGNnRm9udCks
IHVuaXRzUGVyRW0pICogcG9pbnRTaXplOworCisgICAgICAgIGxpbmVTcGFjaW5nID0gYXNjZW50
ICsgZGVzY2VudCArIGxpbmVHYXA7CisgICAgICAgIGZhbWlseU5hbWUgPSBhZG9wdENGKENHRm9u
dENvcHlGYW1pbHlOYW1lKGNnRm9udCkpOworICAgIH0KKworICAgIG1fZm9udE1ldHJpY3Muc2V0
VW5pdHNQZXJFbSh1bml0c1BlckVtKTsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldEFzY2VudChhc2Nl
bnQpOworICAgIG1fZm9udE1ldHJpY3Muc2V0RGVzY2VudChkZXNjZW50KTsKKyAgICBtX2ZvbnRN
ZXRyaWNzLnNldExpbmVHYXAobGluZUdhcCk7CisgICAgbV9mb250TWV0cmljcy5zZXRMaW5lU3Bh
Y2luZyhsaW5lU3BhY2luZyk7CisgICAgbV9mb250TWV0cmljcy5zZXRYSGVpZ2h0KHhIZWlnaHQp
OworICAgIG1fZm9udE1ldHJpY3Muc2V0Q2FwSGVpZ2h0KGNhcEhlaWdodCk7CisgICAgbV9zaG91
bGROb3RCZVVzZWRGb3JBcmFiaWMgPSBmb250RmFtaWx5U2hvdWxkTm90QmVVc2VkRm9yQXJhYmlj
KGZhbWlseU5hbWUuZ2V0KCkpOworCisgICAgaWYgKHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9u
KCkgPT0gVmVydGljYWwgJiYgIWlzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2soKSkKKyAgICAgICAg
bV9oYXNWZXJ0aWNhbEdseXBocyA9IGZvbnRIYXNWZXJ0aWNhbEdseXBocyhtX3BsYXRmb3JtRGF0
YS5jdEZvbnQoKSk7CisKKyAgICBpZiAoIW1fcGxhdGZvcm1EYXRhLm1faXNFbW9qaSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaW50IHRoaXJkT2ZTaXplID0gbV9wbGF0Zm9ybURhdGEuc2l6ZSgp
IC8gMzsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldEFzY2VudCh0aGlyZE9mU2l6ZSk7CisgICAgbV9m
b250TWV0cmljcy5zZXREZXNjZW50KHRoaXJkT2ZTaXplKTsKKyAgICBtX2ZvbnRNZXRyaWNzLnNl
dExpbmVHYXAodGhpcmRPZlNpemUpOworICAgIG1fZm9udE1ldHJpY3Muc2V0TGluZVNwYWNpbmco
MCk7Cit9CisKK3ZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpCit7
CisgICAgbV9hdmdDaGFyV2lkdGggPSAwOworICAgIG1fbWF4Q2hhcldpZHRoID0gMDsKKworICAg
IC8vIEZhbGxiYWNrIHRvIGEgY3Jvc3MtcGxhdGZvcm0gZXN0aW1hdGUsIHdoaWNoIHdpbGwgcG9w
dWxhdGUgdGhlc2UgdmFsdWVzIGlmIHRoZXkgYXJlIG5vbi1wb3NpdGl2ZS4KKyAgICBpbml0Q2hh
cldpZHRocygpOworfQorCitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0
YTo6cGxhdGZvcm1DcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBm
bG9hdCBzY2FsZUZhY3RvcikgY29uc3QKK3sKKyAgICBpZiAoaXNDdXN0b21Gb250KCkpIHsKKyAg
ICAgICAgRm9udFBsYXRmb3JtRGF0YSBzY2FsZWRGb250RGF0YShtX3BsYXRmb3JtRGF0YSk7Cisg
ICAgICAgIHNjYWxlZEZvbnREYXRhLm1fc2l6ZSA9IHNjYWxlZEZvbnREYXRhLm1fc2l6ZSAqIHNj
YWxlRmFjdG9yOworICAgICAgICByZXR1cm4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZShzY2FsZWRG
b250RGF0YSwgdHJ1ZSwgZmFsc2UpOworICAgIH0KKworICAgIGZsb2F0IHNpemUgPSBtX3BsYXRm
b3JtRGF0YS5zaXplKCkgKiBzY2FsZUZhY3RvcjsKKyAgICBDVEZvbnRTeW1ib2xpY1RyYWl0cyBm
b250VHJhaXRzID0gQ1RGb250R2V0U3ltYm9saWNUcmFpdHMobV9wbGF0Zm9ybURhdGEuZm9udCgp
KTsKKyAgICBSZXRhaW5QdHI8Q1RGb250RGVzY3JpcHRvclJlZj4gZm9udERlc2NyaXB0b3IgPSBh
ZG9wdENGKENURm9udENvcHlGb250RGVzY3JpcHRvcihtX3BsYXRmb3JtRGF0YS5mb250KCkpKTsK
KyAgICBSZXRhaW5QdHI8Q1RGb250UmVmPiBzY2FsZWRGb250ID0gYWRvcHRDRihDVEZvbnRDcmVh
dGVXaXRoRm9udERlc2NyaXB0b3IoZm9udERlc2NyaXB0b3IuZ2V0KCksIHNpemUsIG51bGxwdHIp
KTsKKyAgICBGb250UGxhdGZvcm1EYXRhIHNjYWxlZEZvbnREYXRhKHNjYWxlZEZvbnQuZ2V0KCks
IHNpemUsIG1fcGxhdGZvcm1EYXRhLmlzUHJpbnRlckZvbnQoKSwgZmFsc2UsIGZhbHNlLCBtX3Bs
YXRmb3JtRGF0YS5vcmllbnRhdGlvbigpKTsKKworICAgIGlmIChzY2FsZWRGb250RGF0YS5mb250
KCkpIHsKKyAgICAgICAgaWYgKG1fcGxhdGZvcm1EYXRhLm1fc3ludGhldGljQm9sZCkKKyAgICAg
ICAgICAgIGZvbnRUcmFpdHMgfD0ga0NURm9udEJvbGRUcmFpdDsKKyAgICAgICAgaWYgKG1fcGxh
dGZvcm1EYXRhLm1fc3ludGhldGljT2JsaXF1ZSkKKyAgICAgICAgICAgIGZvbnRUcmFpdHMgfD0g
a0NURm9udEl0YWxpY1RyYWl0OworCisgICAgICAgIENURm9udFN5bWJvbGljVHJhaXRzIHNjYWxl
ZEZvbnRUcmFpdHMgPSBDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhzY2FsZWRGb250RGF0YS5mb250
KCkpOworICAgICAgICBzY2FsZWRGb250RGF0YS5tX3N5bnRoZXRpY0JvbGQgPSAoZm9udFRyYWl0
cyAmIGtDVEZvbnRCb2xkVHJhaXQpICYmICEoc2NhbGVkRm9udFRyYWl0cyAmIGtDVEZvbnRUcmFp
dEJvbGQpOworICAgICAgICBzY2FsZWRGb250RGF0YS5tX3N5bnRoZXRpY09ibGlxdWUgPSAoZm9u
dFRyYWl0cyAmIGtDVEZvbnRJdGFsaWNUcmFpdCkgJiYgIShzY2FsZWRGb250VHJhaXRzICYga0NU
Rm9udFRyYWl0SXRhbGljKTsKKworICAgICAgICByZXR1cm4gZm9udENhY2hlKCkuZm9udEZvclBs
YXRmb3JtRGF0YShzY2FsZWRGb250RGF0YSk7CisgICAgfQorCisgICAgcmV0dXJuIG51bGxwdHI7
Cit9CisKK3ZvaWQgU2ltcGxlRm9udERhdGE6OmRldGVybWluZVBpdGNoKCkKK3sKKyAgICBDVEZv
bnRSZWYgY3RGb250ID0gbV9wbGF0Zm9ybURhdGEuZm9udCgpOworICAgIG1fdHJlYXRBc0ZpeGVk
UGl0Y2ggPSBmYWxzZTsKKyAgICBpZiAoIWN0Rm9udCkKKyAgICAgICAgcmV0dXJuOyAvLyBDVEZv
bnQgaXMgbnVsbCBpbiB0aGUgY2FzZSBvZiBTVkcgZm9udHMgZm9yIGV4YW1wbGUuCisKKyAgICBS
ZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGZ1bGxOYW1lID0gYWRvcHRDRihDVEZvbnRDb3B5RnVsbE5h
bWUoY3RGb250KSk7CisgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBmYW1pbHlOYW1lID0gYWRv
cHRDRihDVEZvbnRDb3B5RmFtaWx5TmFtZShjdEZvbnQpKTsKKworICAgIG1fdHJlYXRBc0ZpeGVk
UGl0Y2ggPSBDR0ZvbnRJc0ZpeGVkUGl0Y2gobV9wbGF0Zm9ybURhdGEuY2dGb250KCkpIHx8IChm
dWxsTmFtZSAmJiAoQ0ZTdHJpbmdDb21wYXJlKGZ1bGxOYW1lLmdldCgpLCBDRlNUUigiT3Nha2Et
TW9ubyIpLCBrQ0ZDb21wYXJlQ2FzZUluc2Vuc2l0aXZlKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbyB8
fCBDRlN0cmluZ0NvbXBhcmUoZnVsbE5hbWUuZ2V0KCksIENGU1RSKCJNUy1QR290aGljIiksIGtD
RkNvbXBhcmVDYXNlSW5zZW5zaXRpdmUpID09IGtDRkNvbXBhcmVFcXVhbFRvKSk7CisgICAgaWYg
KGZhbWlseU5hbWUgJiYgQ0ZTdHJpbmdDb21wYXJlKGZhbWlseU5hbWUuZ2V0KCksIENGU1RSKCJD
b3VyaWVyIE5ldyIpLCBrQ0ZDb21wYXJlQ2FzZUluc2Vuc2l0aXZlKSA9PSBrQ0ZDb21wYXJlRXF1
YWxUbykgeworICAgICAgICAvLyBTcGVjaWFsIGNhc2UgQ291cmllciBOZXcgdG8gbm90IGJlIHRy
ZWF0ZWQgYXMgZml4ZWQgcGl0Y2gsIGFzIHRoaXMgd2lsbCBtYWtlIHVzZSBvZiBhIGhhY2tlZCBz
cGFjZSB3aWR0aCB3aGljaCBpcyB1bmRlc2lyZWFibGUgZm9yIGlQaG9uZSAoc2VlIHJkYXI6Ly82
MjY5NzgzKS4KKyAgICAgICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9IGZhbHNlOworICAgIH0KK30K
KworQ0dGb250UmVuZGVyaW5nU3R5bGUgU2ltcGxlRm9udERhdGE6OnJlbmRlcmluZ1N0eWxlKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4ga0NHRm9udFJlbmRlcmluZ1N0eWxlQW50aWFsaWFzaW5nIHwg
a0NHRm9udFJlbmRlcmluZ1N0eWxlU3VicGl4ZWxQb3NpdGlvbmluZyB8IGtDR0ZvbnRSZW5kZXJp
bmdTdHlsZVN1YnBpeGVsUXVhbnRpemF0aW9uIHwga0NHRm9udEFudGlhbGlhc2luZ1N0eWxlVW5m
aWx0ZXJlZDsKK30KKworYm9vbCBTaW1wbGVGb250RGF0YTo6YWR2YW5jZUZvckNvbG9yQml0bWFw
Rm9udChHbHlwaCwgQ0dTaXplJikgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2lvcy9Gb250SU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2lvcy9Gb250SU9TLm1tCSh3b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvRm9udElPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjUs
NyArMjUsNyBAQAogICovCiAKICNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiU2ltcGxlRm9u
dERhdGEuaCIKKyNpbXBvcnQgIkZvbnQuaCIKIAogI2ltcG9ydCAiQmxvY2tFeGNlcHRpb25zLmgi
CiAjaW1wb3J0ICJDb3JlR3JhcGhpY3NTUEkuaCIKQEAgLTY3LDcgKzY3LDcgQEAgc3RhdGljIGJv
b2wgZm9udEhhc1ZlcnRpY2FsR2x5cGhzKENURm9udAogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
dm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Jbml0KCkKK3ZvaWQgRm9udDo6cGxhdGZvcm1J
bml0KCkKIHsKICAgICBtX3N5bnRoZXRpY0JvbGRPZmZzZXQgPSBtX3BsYXRmb3JtRGF0YS5tX3N5
bnRoZXRpY0JvbGQgPyBjZWlsZihtX3BsYXRmb3JtRGF0YS5zaXplKCkgIC8gMjQuMGYpIDogMC5m
OwogICAgIG1fc3BhY2VHbHlwaCA9IDA7CkBAIC0xMjgsNyArMTI4LDcgQEAgdm9pZCBTaW1wbGVG
b250RGF0YTo6cGxhdGZvcm1Jbml0KCkKICAgICBtX2ZvbnRNZXRyaWNzLnNldExpbmVTcGFjaW5n
KDApOwogfQogCi12b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUNoYXJXaWR0aEluaXQoKQor
dm9pZCBGb250OjpwbGF0Zm9ybUNoYXJXaWR0aEluaXQoKQogewogICAgIG1fYXZnQ2hhcldpZHRo
ID0gMDsKICAgICBtX21heENoYXJXaWR0aCA9IDA7CkBAIC0xMzcsMTIgKzEzNywxMiBAQCB2b2lk
IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUNoYXJXaWR0aEluCiAgICAgaW5pdENoYXJXaWR0aHMo
KTsKIH0KIAotUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OnBsYXRm
b3JtQ3JlYXRlU2NhbGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgZmxvYXQgc2Nh
bGVGYWN0b3IpIGNvbnN0CitQYXNzUmVmUHRyPEZvbnQ+IEZvbnQ6OnBsYXRmb3JtQ3JlYXRlU2Nh
bGVkRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3QK
IHsKICAgICBpZiAoaXNDdXN0b21Gb250KCkpIHsKICAgICAgICAgRm9udFBsYXRmb3JtRGF0YSBz
Y2FsZWRGb250RGF0YShtX3BsYXRmb3JtRGF0YSk7CiAgICAgICAgIHNjYWxlZEZvbnREYXRhLm1f
c2l6ZSA9IHNjYWxlZEZvbnREYXRhLm1fc2l6ZSAqIHNjYWxlRmFjdG9yOwotICAgICAgICByZXR1
cm4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZShzY2FsZWRGb250RGF0YSwgdHJ1ZSwgZmFsc2UpOwor
ICAgICAgICByZXR1cm4gRm9udDo6Y3JlYXRlKHNjYWxlZEZvbnREYXRhLCB0cnVlLCBmYWxzZSk7
CiAgICAgfQogCiAgICAgZmxvYXQgc2l6ZSA9IG1fcGxhdGZvcm1EYXRhLnNpemUoKSAqIHNjYWxl
RmFjdG9yOwpAQCAtMTY3LDcgKzE2Nyw3IEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNp
bXBsZUZvbnREYXQKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotdm9pZCBTaW1wbGVGb250RGF0
YTo6ZGV0ZXJtaW5lUGl0Y2goKQordm9pZCBGb250OjpkZXRlcm1pbmVQaXRjaCgpCiB7CiAgICAg
Q1RGb250UmVmIGN0Rm9udCA9IG1fcGxhdGZvcm1EYXRhLmZvbnQoKTsKICAgICBtX3RyZWF0QXNG
aXhlZFBpdGNoID0gZmFsc2U7CkBAIC0xODQsMTIgKzE4NCwxMiBAQCB2b2lkIFNpbXBsZUZvbnRE
YXRhOjpkZXRlcm1pbmVQaXRjaCgpCiAgICAgfQogfQogCi1DR0ZvbnRSZW5kZXJpbmdTdHlsZSBT
aW1wbGVGb250RGF0YTo6cmVuZGVyaW5nU3R5bGUoKSBjb25zdAorQ0dGb250UmVuZGVyaW5nU3R5
bGUgRm9udDo6cmVuZGVyaW5nU3R5bGUoKSBjb25zdAogewogICAgIHJldHVybiBrQ0dGb250UmVu
ZGVyaW5nU3R5bGVBbnRpYWxpYXNpbmcgfCBrQ0dGb250UmVuZGVyaW5nU3R5bGVTdWJwaXhlbFBv
c2l0aW9uaW5nIHwga0NHRm9udFJlbmRlcmluZ1N0eWxlU3VicGl4ZWxRdWFudGl6YXRpb24gfCBr
Q0dGb250QW50aWFsaWFzaW5nU3R5bGVVbmZpbHRlcmVkOwogfQogCi1ib29sIFNpbXBsZUZvbnRE
YXRhOjphZHZhbmNlRm9yQ29sb3JCaXRtYXBGb250KEdseXBoLCBDR1NpemUmKSBjb25zdAorYm9v
bCBGb250OjphZHZhbmNlRm9yQ29sb3JCaXRtYXBGb250KEdseXBoLCBDR1NpemUmKSBjb25zdAog
ewogICAgIHJldHVybiBmYWxzZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2lvcy9TaW1wbGVGb250RGF0YUlPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvU2ltcGxlRm9udERhdGFJT1MubW0JKHJldmlzaW9u
IDE3ODUxNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9TaW1wbGVG
b250RGF0YUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMSwxOTcgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlNpbXBsZUZvbnREYXRhLmgiCi0K
LSNpbXBvcnQgIkJsb2NrRXhjZXB0aW9ucy5oIgotI2ltcG9ydCAiQ29yZUdyYXBoaWNzU1BJLmgi
Ci0jaW1wb3J0ICJGb250Q2FjaGUuaCIKLSNpbXBvcnQgIkZvbnRDYXNjYWRlLmgiCi0jaW1wb3J0
ICJGb250RGVzY3JpcHRpb24uaCIKLSNpbXBvcnQgIkZvbnRTZXJ2aWNlc0lPUy5oIgotI2ltcG9y
dCA8Q29yZVRleHQvQ29yZVRleHQuaD4KLSNpbXBvcnQgPGZsb2F0Lmg+Ci0jaW1wb3J0IDx1bmlj
b2RlL3VjaGFyLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL1N0
ZExpYkV4dHJhcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBib29sIGZvbnRG
YW1pbHlTaG91bGROb3RCZVVzZWRGb3JBcmFiaWMoQ0ZTdHJpbmdSZWYgZm9udEZhbWlseU5hbWUp
Ci17Ci0gICAgaWYgKCFmb250RmFtaWx5TmFtZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgLy8gVGltZXMgTmV3IFJvbWFuIGNvbnRhaW5zIEFyYWJpYyBnbHlwaHMsIGJ1dCBDb3JlIFRl
eHQgZG9lc24ndCBrbm93IGhvdyB0byBzaGFwZSB0aGVtLiA8cmRhcjovL3Byb2JsZW0vOTgyMzk3
NT4KLSAgICAvLyBGSVhNRSA8cmRhcjovL3Byb2JsZW0vMTIwOTY4MzU+IHJlbW92ZSB0aGlzIGZ1
bmN0aW9uIG9uY2UgdGhlIGFib3ZlIGJ1ZyBpcyBmaXhlZC4KLSAgICAvLyBBcmlhbCBhbmQgVGFo
b21hIGFyZSBoYXZlIHBlcmZvcm1hbmNlIGlzc3VlcyBzbyBkb24ndCB1c2UgdGhlbSBhcyB3ZWxs
LgotICAgIHJldHVybiAoQ0ZTdHJpbmdDb21wYXJlKENGU1RSKCJUaW1lcyBOZXcgUm9tYW4iKSwg
Zm9udEZhbWlseU5hbWUsIDApID09IGtDRkNvbXBhcmVFcXVhbFRvKQotICAgICAgICAgICB8fCAo
Q0ZTdHJpbmdDb21wYXJlKENGU1RSKCJBcmlhbCIpLCBmb250RmFtaWx5TmFtZSwgMCkgPT0ga0NG
Q29tcGFyZUVxdWFsVG8pCi0gICAgICAgICAgIHx8IChDRlN0cmluZ0NvbXBhcmUoQ0ZTVFIoIlRh
aG9tYSIpLCBmb250RmFtaWx5TmFtZSwgMCkgPT0ga0NGQ29tcGFyZUVxdWFsVG8pOwotfQotCi1z
dGF0aWMgYm9vbCBmb250SGFzVmVydGljYWxHbHlwaHMoQ1RGb250UmVmIGN0Rm9udCkKLXsKLSAg
ICAvLyBUaGUgY2hlY2sgZG9lc24ndCBsb29rIG5lYXQgYnV0IHRoaXMgaXMgd2hhdCBBcHBLaXQg
ZG9lcyBmb3IgdmVydGljYWwgd3JpdGluZy4uLgotICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiB0
YWJsZVRhZ3MgPSBhZG9wdENGKENURm9udENvcHlBdmFpbGFibGVUYWJsZXMoY3RGb250LCBrQ1RG
b250VGFibGVPcHRpb25Ob09wdGlvbnMpKTsKLSAgICBDRkluZGV4IG51bVRhYmxlcyA9IENGQXJy
YXlHZXRDb3VudCh0YWJsZVRhZ3MuZ2V0KCkpOwotICAgIGZvciAoQ0ZJbmRleCBpbmRleCA9IDA7
IGluZGV4IDwgbnVtVGFibGVzOyArK2luZGV4KSB7Ci0gICAgICAgIENURm9udFRhYmxlVGFnIHRh
ZyA9IChDVEZvbnRUYWJsZVRhZykodWludHB0cl90KUNGQXJyYXlHZXRWYWx1ZUF0SW5kZXgodGFi
bGVUYWdzLmdldCgpLCBpbmRleCk7Ci0gICAgICAgIGlmICh0YWcgPT0ga0NURm9udFRhYmxlVmhl
YSB8fCB0YWcgPT0ga0NURm9udFRhYmxlVk9SRykKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRm
b3JtSW5pdCgpCi17Ci0gICAgbV9zeW50aGV0aWNCb2xkT2Zmc2V0ID0gbV9wbGF0Zm9ybURhdGEu
bV9zeW50aGV0aWNCb2xkID8gY2VpbGYobV9wbGF0Zm9ybURhdGEuc2l6ZSgpICAvIDI0LjBmKSA6
IDAuZjsKLSAgICBtX3NwYWNlR2x5cGggPSAwOwotICAgIG1fc3BhY2VXaWR0aCA9IDA7Ci0gICAg
dW5zaWduZWQgdW5pdHNQZXJFbTsKLSAgICBmbG9hdCBhc2NlbnQ7Ci0gICAgZmxvYXQgZGVzY2Vu
dDsKLSAgICBmbG9hdCBjYXBIZWlnaHQ7Ci0gICAgZmxvYXQgbGluZUdhcDsKLSAgICBmbG9hdCBs
aW5lU3BhY2luZzsKLSAgICBmbG9hdCB4SGVpZ2h0OwotICAgIFJldGFpblB0cjxDRlN0cmluZ1Jl
Zj4gZmFtaWx5TmFtZTsKLSAgICBpZiAoQ1RGb250UmVmIGN0Rm9udCA9IG1fcGxhdGZvcm1EYXRh
LmZvbnQoKSkgewotICAgICAgICBGb250U2VydmljZXNJT1MgZm9udFNlcnZpY2UoY3RGb250KTsK
LSAgICAgICAgYXNjZW50ID0gY2VpbGYoZm9udFNlcnZpY2UuYXNjZW50KCkpOwotICAgICAgICBk
ZXNjZW50ID0gY2VpbGYoZm9udFNlcnZpY2UuZGVzY2VudCgpKTsKLSAgICAgICAgbGluZVNwYWNp
bmcgPSBmb250U2VydmljZS5saW5lU3BhY2luZygpOwotICAgICAgICBsaW5lR2FwID0gZm9udFNl
cnZpY2UubGluZUdhcCgpOwotICAgICAgICB4SGVpZ2h0ID0gZm9udFNlcnZpY2UueEhlaWdodCgp
OwotICAgICAgICBjYXBIZWlnaHQgPSBmb250U2VydmljZS5jYXBIZWlnaHQoKTsKLSAgICAgICAg
dW5pdHNQZXJFbSA9IGZvbnRTZXJ2aWNlLnVuaXRzUGVyRW0oKTsKLSAgICAgICAgZmFtaWx5TmFt
ZSA9IGFkb3B0Q0YoQ1RGb250Q29weUZhbWlseU5hbWUoY3RGb250KSk7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgQ0dGb250UmVmIGNnRm9udCA9IG1fcGxhdGZvcm1EYXRhLmNnRm9udCgpOwotCi0g
ICAgICAgIHVuaXRzUGVyRW0gPSBDR0ZvbnRHZXRVbml0c1BlckVtKGNnRm9udCk7Ci0KLSAgICAg
ICAgZmxvYXQgcG9pbnRTaXplID0gbV9wbGF0Zm9ybURhdGEuc2l6ZSgpOwotICAgICAgICBhc2Nl
bnQgPSBscm91bmRmKHNjYWxlRW1Ub1VuaXRzKENHRm9udEdldEFzY2VudChjZ0ZvbnQpLCB1bml0
c1BlckVtKSAqIHBvaW50U2l6ZSk7Ci0gICAgICAgIGRlc2NlbnQgPSBscm91bmRmKC1zY2FsZUVt
VG9Vbml0cygtYWJzKENHRm9udEdldERlc2NlbnQoY2dGb250KSksIHVuaXRzUGVyRW0pICogcG9p
bnRTaXplKTsKLSAgICAgICAgbGluZUdhcCA9IGxyb3VuZGYoc2NhbGVFbVRvVW5pdHMoQ0dGb250
R2V0TGVhZGluZyhjZ0ZvbnQpLCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZSk7Ci0gICAgICAgIHhI
ZWlnaHQgPSBzY2FsZUVtVG9Vbml0cyhDR0ZvbnRHZXRYSGVpZ2h0KGNnRm9udCksIHVuaXRzUGVy
RW0pICogcG9pbnRTaXplOwotICAgICAgICBjYXBIZWlnaHQgPSBzY2FsZUVtVG9Vbml0cyhDR0Zv
bnRHZXRDYXBIZWlnaHQoY2dGb250KSwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemU7Ci0KLSAgICAg
ICAgbGluZVNwYWNpbmcgPSBhc2NlbnQgKyBkZXNjZW50ICsgbGluZUdhcDsKLSAgICAgICAgZmFt
aWx5TmFtZSA9IGFkb3B0Q0YoQ0dGb250Q29weUZhbWlseU5hbWUoY2dGb250KSk7Ci0gICAgfQot
Ci0gICAgbV9mb250TWV0cmljcy5zZXRVbml0c1BlckVtKHVuaXRzUGVyRW0pOwotICAgIG1fZm9u
dE1ldHJpY3Muc2V0QXNjZW50KGFzY2VudCk7Ci0gICAgbV9mb250TWV0cmljcy5zZXREZXNjZW50
KGRlc2NlbnQpOwotICAgIG1fZm9udE1ldHJpY3Muc2V0TGluZUdhcChsaW5lR2FwKTsKLSAgICBt
X2ZvbnRNZXRyaWNzLnNldExpbmVTcGFjaW5nKGxpbmVTcGFjaW5nKTsKLSAgICBtX2ZvbnRNZXRy
aWNzLnNldFhIZWlnaHQoeEhlaWdodCk7Ci0gICAgbV9mb250TWV0cmljcy5zZXRDYXBIZWlnaHQo
Y2FwSGVpZ2h0KTsKLSAgICBtX3Nob3VsZE5vdEJlVXNlZEZvckFyYWJpYyA9IGZvbnRGYW1pbHlT
aG91bGROb3RCZVVzZWRGb3JBcmFiaWMoZmFtaWx5TmFtZS5nZXQoKSk7Ci0KLSAgICBpZiAocGxh
dGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCAmJiAhaXNUZXh0T3JpZW50YXRp
b25GYWxsYmFjaygpKQotICAgICAgICBtX2hhc1ZlcnRpY2FsR2x5cGhzID0gZm9udEhhc1ZlcnRp
Y2FsR2x5cGhzKG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpKTsKLQotICAgIGlmICghbV9wbGF0Zm9y
bURhdGEubV9pc0Vtb2ppKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnQgdGhpcmRPZlNpemUg
PSBtX3BsYXRmb3JtRGF0YS5zaXplKCkgLyAzOwotICAgIG1fZm9udE1ldHJpY3Muc2V0QXNjZW50
KHRoaXJkT2ZTaXplKTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldERlc2NlbnQodGhpcmRPZlNpemUp
OwotICAgIG1fZm9udE1ldHJpY3Muc2V0TGluZUdhcCh0aGlyZE9mU2l6ZSk7Ci0gICAgbV9mb250
TWV0cmljcy5zZXRMaW5lU3BhY2luZygwKTsKLX0KLQotdm9pZCBTaW1wbGVGb250RGF0YTo6cGxh
dGZvcm1DaGFyV2lkdGhJbml0KCkKLXsKLSAgICBtX2F2Z0NoYXJXaWR0aCA9IDA7Ci0gICAgbV9t
YXhDaGFyV2lkdGggPSAwOwotCi0gICAgLy8gRmFsbGJhY2sgdG8gYSBjcm9zcy1wbGF0Zm9ybSBl
c3RpbWF0ZSwgd2hpY2ggd2lsbCBwb3B1bGF0ZSB0aGVzZSB2YWx1ZXMgaWYgdGhleSBhcmUgbm9u
LXBvc2l0aXZlLgotICAgIGluaXRDaGFyV2lkdGhzKCk7Ci19Ci0KLVBhc3NSZWZQdHI8U2ltcGxl
Rm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZvbnREYXRhKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYsIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAotewotICAgIGlm
IChpc0N1c3RvbUZvbnQoKSkgewotICAgICAgICBGb250UGxhdGZvcm1EYXRhIHNjYWxlZEZvbnRE
YXRhKG1fcGxhdGZvcm1EYXRhKTsKLSAgICAgICAgc2NhbGVkRm9udERhdGEubV9zaXplID0gc2Nh
bGVkRm9udERhdGEubV9zaXplICogc2NhbGVGYWN0b3I7Ci0gICAgICAgIHJldHVybiBTaW1wbGVG
b250RGF0YTo6Y3JlYXRlKHNjYWxlZEZvbnREYXRhLCB0cnVlLCBmYWxzZSk7Ci0gICAgfQotCi0g
ICAgZmxvYXQgc2l6ZSA9IG1fcGxhdGZvcm1EYXRhLnNpemUoKSAqIHNjYWxlRmFjdG9yOwotICAg
IENURm9udFN5bWJvbGljVHJhaXRzIGZvbnRUcmFpdHMgPSBDVEZvbnRHZXRTeW1ib2xpY1RyYWl0
cyhtX3BsYXRmb3JtRGF0YS5mb250KCkpOwotICAgIFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9y
UmVmPiBmb250RGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250Q29weUZvbnREZXNjcmlwdG9yKG1f
cGxhdGZvcm1EYXRhLmZvbnQoKSkpOwotICAgIFJldGFpblB0cjxDVEZvbnRSZWY+IHNjYWxlZEZv
bnQgPSBhZG9wdENGKENURm9udENyZWF0ZVdpdGhGb250RGVzY3JpcHRvcihmb250RGVzY3JpcHRv
ci5nZXQoKSwgc2l6ZSwgbnVsbHB0cikpOwotICAgIEZvbnRQbGF0Zm9ybURhdGEgc2NhbGVkRm9u
dERhdGEoc2NhbGVkRm9udC5nZXQoKSwgc2l6ZSwgbV9wbGF0Zm9ybURhdGEuaXNQcmludGVyRm9u
dCgpLCBmYWxzZSwgZmFsc2UsIG1fcGxhdGZvcm1EYXRhLm9yaWVudGF0aW9uKCkpOwotCi0gICAg
aWYgKHNjYWxlZEZvbnREYXRhLmZvbnQoKSkgewotICAgICAgICBpZiAobV9wbGF0Zm9ybURhdGEu
bV9zeW50aGV0aWNCb2xkKQotICAgICAgICAgICAgZm9udFRyYWl0cyB8PSBrQ1RGb250Qm9sZFRy
YWl0OwotICAgICAgICBpZiAobV9wbGF0Zm9ybURhdGEubV9zeW50aGV0aWNPYmxpcXVlKQotICAg
ICAgICAgICAgZm9udFRyYWl0cyB8PSBrQ1RGb250SXRhbGljVHJhaXQ7Ci0KLSAgICAgICAgQ1RG
b250U3ltYm9saWNUcmFpdHMgc2NhbGVkRm9udFRyYWl0cyA9IENURm9udEdldFN5bWJvbGljVHJh
aXRzKHNjYWxlZEZvbnREYXRhLmZvbnQoKSk7Ci0gICAgICAgIHNjYWxlZEZvbnREYXRhLm1fc3lu
dGhldGljQm9sZCA9IChmb250VHJhaXRzICYga0NURm9udEJvbGRUcmFpdCkgJiYgIShzY2FsZWRG
b250VHJhaXRzICYga0NURm9udFRyYWl0Qm9sZCk7Ci0gICAgICAgIHNjYWxlZEZvbnREYXRhLm1f
c3ludGhldGljT2JsaXF1ZSA9IChmb250VHJhaXRzICYga0NURm9udEl0YWxpY1RyYWl0KSAmJiAh
KHNjYWxlZEZvbnRUcmFpdHMgJiBrQ1RGb250VHJhaXRJdGFsaWMpOwotCi0gICAgICAgIHJldHVy
biBmb250Q2FjaGUoKS5mb250Rm9yUGxhdGZvcm1EYXRhKHNjYWxlZEZvbnREYXRhKTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotdm9pZCBTaW1wbGVGb250RGF0YTo6ZGV0ZXJt
aW5lUGl0Y2goKQotewotICAgIENURm9udFJlZiBjdEZvbnQgPSBtX3BsYXRmb3JtRGF0YS5mb250
KCk7Ci0gICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9IGZhbHNlOwotICAgIGlmICghY3RGb250KQot
ICAgICAgICByZXR1cm47IC8vIENURm9udCBpcyBudWxsIGluIHRoZSBjYXNlIG9mIFNWRyBmb250
cyBmb3IgZXhhbXBsZS4KLQotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gZnVsbE5hbWUgPSBh
ZG9wdENGKENURm9udENvcHlGdWxsTmFtZShjdEZvbnQpKTsKLSAgICBSZXRhaW5QdHI8Q0ZTdHJp
bmdSZWY+IGZhbWlseU5hbWUgPSBhZG9wdENGKENURm9udENvcHlGYW1pbHlOYW1lKGN0Rm9udCkp
OwotCi0gICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9IENHRm9udElzRml4ZWRQaXRjaChtX3BsYXRm
b3JtRGF0YS5jZ0ZvbnQoKSkgfHwgKGZ1bGxOYW1lICYmIChDRlN0cmluZ0NvbXBhcmUoZnVsbE5h
bWUuZ2V0KCksIENGU1RSKCJPc2FrYS1Nb25vIiksIGtDRkNvbXBhcmVDYXNlSW5zZW5zaXRpdmUp
ID09IGtDRkNvbXBhcmVFcXVhbFRvIHx8IENGU3RyaW5nQ29tcGFyZShmdWxsTmFtZS5nZXQoKSwg
Q0ZTVFIoIk1TLVBHb3RoaWMiKSwga0NGQ29tcGFyZUNhc2VJbnNlbnNpdGl2ZSkgPT0ga0NGQ29t
cGFyZUVxdWFsVG8pKTsKLSAgICBpZiAoZmFtaWx5TmFtZSAmJiBDRlN0cmluZ0NvbXBhcmUoZmFt
aWx5TmFtZS5nZXQoKSwgQ0ZTVFIoIkNvdXJpZXIgTmV3IiksIGtDRkNvbXBhcmVDYXNlSW5zZW5z
aXRpdmUpID09IGtDRkNvbXBhcmVFcXVhbFRvKSB7Ci0gICAgICAgIC8vIFNwZWNpYWwgY2FzZSBD
b3VyaWVyIE5ldyB0byBub3QgYmUgdHJlYXRlZCBhcyBmaXhlZCBwaXRjaCwgYXMgdGhpcyB3aWxs
IG1ha2UgdXNlIG9mIGEgaGFja2VkIHNwYWNlIHdpZHRoIHdoaWNoIGlzIHVuZGVzaXJlYWJsZSBm
b3IgaVBob25lIChzZWUgcmRhcjovLzYyNjk3ODMpLgotICAgICAgICBtX3RyZWF0QXNGaXhlZFBp
dGNoID0gZmFsc2U7Ci0gICAgfQotfQotCi1DR0ZvbnRSZW5kZXJpbmdTdHlsZSBTaW1wbGVGb250
RGF0YTo6cmVuZGVyaW5nU3R5bGUoKSBjb25zdAotewotICAgIHJldHVybiBrQ0dGb250UmVuZGVy
aW5nU3R5bGVBbnRpYWxpYXNpbmcgfCBrQ0dGb250UmVuZGVyaW5nU3R5bGVTdWJwaXhlbFBvc2l0
aW9uaW5nIHwga0NHRm9udFJlbmRlcmluZ1N0eWxlU3VicGl4ZWxRdWFudGl6YXRpb24gfCBrQ0dG
b250QW50aWFsaWFzaW5nU3R5bGVVbmZpbHRlcmVkOwotfQotCi1ib29sIFNpbXBsZUZvbnREYXRh
OjphZHZhbmNlRm9yQ29sb3JCaXRtYXBGb250KEdseXBoLCBDR1NpemUmKSBjb25zdAotewotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBs
ZXhUZXh0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDE3ODUxNSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgZmxv
YXQgd2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBIYXNoU2V0PGNvbnN0IFNpbXBs
ZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMpCisgICAgZmxvYXQgd2lkdGgodW5zaWduZWQgZnJv
bSwgdW5zaWduZWQgbGVuLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cykKICAg
ICB7CiAgICAgICAgIG1fY29udHJvbGxlci0+YWR2YW5jZShmcm9tLCAwLCBCeVdob2xlR2x5cGhz
LCBmYWxsYmFja0ZvbnRzKTsKICAgICAgICAgZmxvYXQgYmVmb3JlV2lkdGggPSBtX2NvbnRyb2xs
ZXItPnJ1bldpZHRoU29GYXIoKTsKQEAgLTk2LDcgKzk2LDcgQEAgdm9pZCBGb250Q2FzY2FkZTo6
ZGVsZXRlTGF5b3V0KFRleHRMYXlvdQogICAgIGRlbGV0ZSBsYXlvdXQ7CiB9CiAKLWZsb2F0IEZv
bnRDYXNjYWRlOjp3aWR0aChUZXh0TGF5b3V0JiBsYXlvdXQsIHVuc2lnbmVkIGZyb20sIHVuc2ln
bmVkIGxlbiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzKQor
ZmxvYXQgRm9udENhc2NhZGU6OndpZHRoKFRleHRMYXlvdXQmIGxheW91dCwgdW5zaWduZWQgZnJv
bSwgdW5zaWduZWQgbGVuLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cykKIHsK
ICAgICByZXR1cm4gbGF5b3V0LndpZHRoKGZyb20sIGxlbiwgZmFsbGJhY2tGb250cyk7CiB9CkBA
IC0xMTUsNyArMTE1LDcgQEAgc3RhdGljIGlubGluZSBDR0Zsb2F0IGNlaWxDR0Zsb2F0KENHRmxv
YQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxDR0Zsb2F0PihjZWlsKGYpKTsKIH0KIAotQ29tcGxl
eFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dENvbnRyb2xsZXIoY29uc3QgRm9udENhc2NhZGUq
IGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgYm9vbCBtYXlVc2VOYXR1cmFsV3JpdGluZ0RpcmVj
dGlvbiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBib29s
IGZvclRleHRFbXBoYXNpcykKK0NvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRDb250
cm9sbGVyKGNvbnN0IEZvbnRDYXNjYWRlKiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGJvb2wg
bWF5VXNlTmF0dXJhbFdyaXRpbmdEaXJlY3Rpb24sIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxs
YmFja0ZvbnRzLCBib29sIGZvclRleHRFbXBoYXNpcykKICAgICA6IG1fZm9udCgqZm9udCkKICAg
ICAsIG1fcnVuKHJ1bikKICAgICAsIG1faXNMVFJPbmx5KHRydWUpCkBAIC0yOTEsNyArMjkxLDcg
QEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RDb21wbAogICAgIGlmICghbV9l
bmQpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIFdlIGJyZWFrIHVwIGdseXBoIHJ1biBnZW5l
cmF0aW9uIGZvciB0aGUgc3RyaW5nIGJ5IEZvbnREYXRhLgorICAgIC8vIFdlIGJyZWFrIHVwIGds
eXBoIHJ1biBnZW5lcmF0aW9uIGZvciB0aGUgc3RyaW5nIGJ5IEZvbnQuCiAgICAgY29uc3QgVUNo
YXIqIGNwOwogCiAgICAgaWYgKG1fcnVuLmlzOEJpdCgpKSB7CkBAIC0zMDgsOSArMzA4LDkgQEAg
dm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RDb21wbAogICAgIGNvbnN0IFVDaGFy
KiBjdXJyID0gY3A7CiAgICAgY29uc3QgVUNoYXIqIGVuZCA9IGNwICsgbV9lbmQ7CiAKLSAgICBj
b25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGE7CisgICAgY29uc3QgRm9udCogZm9udDsKICAg
ICBib29sIGlzTWlzc2luZ0dseXBoOwotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBuZXh0Rm9u
dERhdGE7CisgICAgY29uc3QgRm9udCogbmV4dEZvbnQ7CiAgICAgYm9vbCBuZXh0SXNNaXNzaW5n
R2x5cGg7CiAKICAgICB1bnNpZ25lZCBtYXJrQ291bnQ7CkBAIC0zMzIsMTIgKzMzMiwxMiBAQCB2
b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Y29sbGVjdENvbXBsCiAgICAgfQogCiAgICAgbmV4
dElzTWlzc2luZ0dseXBoID0gZmFsc2U7Ci0gICAgbmV4dEZvbnREYXRhID0gbV9mb250LmZvbnRE
YXRhRm9yQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2Uoc2VxdWVuY2VTdGFydCwgY3VyciAtIHNl
cXVlbmNlU3RhcnQsIG5leHRJc1NtYWxsQ2FwcyA/IFNtYWxsQ2Fwc1ZhcmlhbnQgOiBOb3JtYWxW
YXJpYW50KTsKLSAgICBpZiAoIW5leHRGb250RGF0YSkKKyAgICBuZXh0Rm9udCA9IG1fZm9udC5m
b250Rm9yQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2Uoc2VxdWVuY2VTdGFydCwgY3VyciAtIHNl
cXVlbmNlU3RhcnQsIG5leHRJc1NtYWxsQ2FwcyA/IFNtYWxsQ2Fwc1ZhcmlhbnQgOiBOb3JtYWxW
YXJpYW50KTsKKyAgICBpZiAoIW5leHRGb250KQogICAgICAgICBuZXh0SXNNaXNzaW5nR2x5cGgg
PSB0cnVlOwogCiAgICAgd2hpbGUgKGN1cnIgPCBlbmQpIHsKLSAgICAgICAgZm9udERhdGEgPSBu
ZXh0Rm9udERhdGE7CisgICAgICAgIGZvbnQgPSBuZXh0Rm9udDsKICAgICAgICAgaXNNaXNzaW5n
R2x5cGggPSBuZXh0SXNNaXNzaW5nR2x5cGg7CiAgICAgICAgIGlzU21hbGxDYXBzID0gbmV4dElz
U21hbGxDYXBzOwogICAgICAgICBpbnQgaW5kZXggPSBjdXJyIC0gY3A7CkBAIC0zNTgsMTcgKzM1
OCwxNyBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Y29sbGVjdENvbXBsCiAKICAgICAg
ICAgbmV4dElzTWlzc2luZ0dseXBoID0gZmFsc2U7CiAgICAgICAgIGlmIChiYXNlQ2hhcmFjdGVy
ID09IHplcm9XaWR0aEpvaW5lcikKLSAgICAgICAgICAgIG5leHRGb250RGF0YSA9IGZvbnREYXRh
OworICAgICAgICAgICAgbmV4dEZvbnQgPSBmb250OwogICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgIG5leHRGb250RGF0YSA9IG1fZm9udC5mb250RGF0YUZvckNvbWJpbmluZ0NoYXJhY3RlclNl
cXVlbmNlKGNwICsgaW5kZXgsIGN1cnIgLSBjcCAtIGluZGV4LCBuZXh0SXNTbWFsbENhcHMgPyBT
bWFsbENhcHNWYXJpYW50IDogTm9ybWFsVmFyaWFudCk7Ci0gICAgICAgICAgICBpZiAoIW5leHRG
b250RGF0YSkKKyAgICAgICAgICAgIG5leHRGb250ID0gbV9mb250LmZvbnRGb3JDb21iaW5pbmdD
aGFyYWN0ZXJTZXF1ZW5jZShjcCArIGluZGV4LCBjdXJyIC0gY3AgLSBpbmRleCwgbmV4dElzU21h
bGxDYXBzID8gU21hbGxDYXBzVmFyaWFudCA6IE5vcm1hbFZhcmlhbnQpOworICAgICAgICAgICAg
aWYgKCFuZXh0Rm9udCkKICAgICAgICAgICAgICAgICBuZXh0SXNNaXNzaW5nR2x5cGggPSB0cnVl
OwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG5leHRGb250RGF0YSAhPSBmb250RGF0YSB8fCBu
ZXh0SXNNaXNzaW5nR2x5cGggIT0gaXNNaXNzaW5nR2x5cGgpIHsKKyAgICAgICAgaWYgKG5leHRG
b250ICE9IGZvbnQgfHwgbmV4dElzTWlzc2luZ0dseXBoICE9IGlzTWlzc2luZ0dseXBoKSB7CiAg
ICAgICAgICAgICBpbnQgaXRlbVN0YXJ0ID0gc3RhdGljX2Nhc3Q8aW50PihpbmRleE9mRm9udFRy
YW5zaXRpb24pOwogICAgICAgICAgICAgaW50IGl0ZW1MZW5ndGggPSBpbmRleCAtIGluZGV4T2ZG
b250VHJhbnNpdGlvbjsKLSAgICAgICAgICAgIGNvbGxlY3RDb21wbGV4VGV4dFJ1bnNGb3JDaGFy
YWN0ZXJzKChpc1NtYWxsQ2FwcyA/IG1fc21hbGxDYXBzQnVmZmVyLmRhdGEoKSA6IGNwKSArIGl0
ZW1TdGFydCwgaXRlbUxlbmd0aCwgaXRlbVN0YXJ0LCAhaXNNaXNzaW5nR2x5cGggPyBmb250RGF0
YSA6IDApOworICAgICAgICAgICAgY29sbGVjdENvbXBsZXhUZXh0UnVuc0ZvckNoYXJhY3RlcnMo
KGlzU21hbGxDYXBzID8gbV9zbWFsbENhcHNCdWZmZXIuZGF0YSgpIDogY3ApICsgaXRlbVN0YXJ0
LCBpdGVtTGVuZ3RoLCBpdGVtU3RhcnQsICFpc01pc3NpbmdHbHlwaCA/IGZvbnQgOiAwKTsKICAg
ICAgICAgICAgIGluZGV4T2ZGb250VHJhbnNpdGlvbiA9IGluZGV4OwogICAgICAgICB9CiAgICAg
fQpAQCAtMzc2LDcgKzM3Niw3IEBAIHZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpjb2xsZWN0
Q29tcGwKICAgICBpbnQgaXRlbUxlbmd0aCA9IG1fZW5kIC0gaW5kZXhPZkZvbnRUcmFuc2l0aW9u
OwogICAgIGlmIChpdGVtTGVuZ3RoKSB7CiAgICAgICAgIGludCBpdGVtU3RhcnQgPSBpbmRleE9m
Rm9udFRyYW5zaXRpb247Ci0gICAgICAgIGNvbGxlY3RDb21wbGV4VGV4dFJ1bnNGb3JDaGFyYWN0
ZXJzKChuZXh0SXNTbWFsbENhcHMgPyBtX3NtYWxsQ2Fwc0J1ZmZlci5kYXRhKCkgOiBjcCkgKyBp
dGVtU3RhcnQsIGl0ZW1MZW5ndGgsIGl0ZW1TdGFydCwgIW5leHRJc01pc3NpbmdHbHlwaCA/IG5l
eHRGb250RGF0YSA6IDApOworICAgICAgICBjb2xsZWN0Q29tcGxleFRleHRSdW5zRm9yQ2hhcmFj
dGVycygobmV4dElzU21hbGxDYXBzID8gbV9zbWFsbENhcHNCdWZmZXIuZGF0YSgpIDogY3ApICsg
aXRlbVN0YXJ0LCBpdGVtTGVuZ3RoLCBpdGVtU3RhcnQsICFuZXh0SXNNaXNzaW5nR2x5cGggPyBu
ZXh0Rm9udCA6IDApOwogICAgIH0KIAogICAgIGlmICghbV9ydW4ubHRyKCkpCkBAIC00NjksNyAr
NDY5LDcgQEAgdW5zaWduZWQgQ29tcGxleFRleHRDb250cm9sbGVyOjppbmNyZW1lbgogICAgIHJl
dHVybiBpbmRleE9mQ3VycmVudFJ1bihsZWZ0bW9zdEdseXBoKTsKIH0KIAotdm9pZCBDb21wbGV4
VGV4dENvbnRyb2xsZXI6OmFkdmFuY2UodW5zaWduZWQgb2Zmc2V0LCBHbHlwaEJ1ZmZlciogZ2x5
cGhCdWZmZXIsIEdseXBoSXRlcmF0aW9uU3R5bGUgaXRlcmF0aW9uU3R5bGUsIEhhc2hTZXQ8Y29u
c3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cykKK3ZvaWQgQ29tcGxleFRleHRDb250
cm9sbGVyOjphZHZhbmNlKHVuc2lnbmVkIG9mZnNldCwgR2x5cGhCdWZmZXIqIGdseXBoQnVmZmVy
LCBHbHlwaEl0ZXJhdGlvblN0eWxlIGl0ZXJhdGlvblN0eWxlLCBIYXNoU2V0PGNvbnN0IEZvbnQq
PiogZmFsbGJhY2tGb250cykKIHsKICAgICBpZiAoc3RhdGljX2Nhc3Q8aW50PihvZmZzZXQpID4g
bV9lbmQpCiAgICAgICAgIG9mZnNldCA9IG1fZW5kOwpAQCAtNDk0LDggKzQ5NCw4IEBAIHZvaWQg
Q29tcGxleFRleHRDb250cm9sbGVyOjphZHZhbmNlKHVuc2kKICAgICAgICAgc2l6ZV90IGdseXBo
Q291bnQgPSBjb21wbGV4VGV4dFJ1bi5nbHlwaENvdW50KCk7CiAgICAgICAgIHVuc2lnbmVkIGcg
PSBsdHIgPyBtX2dseXBoSW5DdXJyZW50UnVuIDogZ2x5cGhDb3VudCAtIDEgLSBtX2dseXBoSW5D
dXJyZW50UnVuOwogICAgICAgICB1bnNpZ25lZCBrID0gbGVmdG1vc3RHbHlwaCArIGc7Ci0gICAg
ICAgIGlmIChmYWxsYmFja0ZvbnRzICYmICZjb21wbGV4VGV4dFJ1bi5mb250RGF0YSgpICE9ICZt
X2ZvbnQucHJpbWFyeUZvbnREYXRhKCkpCi0gICAgICAgICAgICBmYWxsYmFja0ZvbnRzLT5hZGQo
JmNvbXBsZXhUZXh0UnVuLmZvbnREYXRhKCkpOworICAgICAgICBpZiAoZmFsbGJhY2tGb250cyAm
JiAmY29tcGxleFRleHRSdW4uZm9udCgpICE9ICZtX2ZvbnQucHJpbWFyeUZvbnQoKSkKKyAgICAg
ICAgICAgIGZhbGxiYWNrRm9udHMtPmFkZCgmY29tcGxleFRleHRSdW4uZm9udCgpKTsKIAogICAg
ICAgICAvLyBXZSBtdXN0IHN0b3JlIHRoZSBpbml0aWFsIGFkdmFuY2UgZm9yIHRoZSBmaXJzdCBn
bHlwaCB3ZSBhcmUgZ29pbmcgdG8gZHJhdy4KICAgICAgICAgLy8gV2hlbiBsZWZ0bW9zdEdseXBo
IGlzIDAsIGl0IHJlcHJlc2VudHMgdGhlIGZpcnN0IGdseXBoIHRvIGRyYXcsIHRha2luZyBpbnRv
CkBAIC01MjAsNyArNTIwLDcgQEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmFkdmFuY2Uo
dW5zaQogICAgICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAgICAgaWYgKGdseXBoQnVm
ZmVyICYmICFtX2NoYXJhY3RlckluQ3VycmVudEdseXBoKQotICAgICAgICAgICAgICAgIGdseXBo
QnVmZmVyLT5hZGQobV9hZGp1c3RlZEdseXBoc1trXSwgJmNvbXBsZXhUZXh0UnVuLmZvbnREYXRh
KCksIGFkanVzdGVkQWR2YW5jZSwgY29tcGxleFRleHRSdW4uaW5kZXhBdChtX2dseXBoSW5DdXJy
ZW50UnVuKSk7CisgICAgICAgICAgICAgICAgZ2x5cGhCdWZmZXItPmFkZChtX2FkanVzdGVkR2x5
cGhzW2tdLCAmY29tcGxleFRleHRSdW4uZm9udCgpLCBhZGp1c3RlZEFkdmFuY2UsIGNvbXBsZXhU
ZXh0UnVuLmluZGV4QXQobV9nbHlwaEluQ3VycmVudFJ1bikpOwogCiAgICAgICAgICAgICB1bnNp
Z25lZCBvbGRDaGFyYWN0ZXJJbkN1cnJlbnRHbHlwaCA9IG1fY2hhcmFjdGVySW5DdXJyZW50R2x5
cGg7CiAgICAgICAgICAgICBtX2NoYXJhY3RlckluQ3VycmVudEdseXBoID0gc3RkOjptaW4obV9j
dXJyZW50Q2hhcmFjdGVyIC0gY29tcGxleFRleHRSdW4uc3RyaW5nTG9jYXRpb24oKSwgZ2x5cGhF
bmRPZmZzZXQpIC0gZ2x5cGhTdGFydE9mZnNldDsKQEAgLTU2Niw5ICs1NjYsOSBAQCB2b2lkIENv
bXBsZXhUZXh0Q29udHJvbGxlcjo6YWRqdXN0R2x5cGhzCiAgICAgZm9yIChzaXplX3QgciA9IDA7
IHIgPCBydW5Db3VudDsgKytyKSB7CiAgICAgICAgIENvbXBsZXhUZXh0UnVuJiBjb21wbGV4VGV4
dFJ1biA9ICptX2NvbXBsZXhUZXh0UnVuc1tyXTsKICAgICAgICAgdW5zaWduZWQgZ2x5cGhDb3Vu
dCA9IGNvbXBsZXhUZXh0UnVuLmdseXBoQ291bnQoKTsKLSAgICAgICAgY29uc3QgU2ltcGxlRm9u
dERhdGEmIGZvbnREYXRhID0gY29tcGxleFRleHRSdW4uZm9udERhdGEoKTsKKyAgICAgICAgY29u
c3QgRm9udCYgZm9udCA9IGNvbXBsZXhUZXh0UnVuLmZvbnQoKTsKICNpZiBQTEFURk9STShJT1Mp
Ci0gICAgICAgIGJvb2wgaXNFbW9qaSA9IGZvbnREYXRhLnBsYXRmb3JtRGF0YSgpLm1faXNFbW9q
aTsKKyAgICAgICAgYm9vbCBpc0Vtb2ppID0gZm9udC5wbGF0Zm9ybURhdGEoKS5tX2lzRW1vamk7
CiAjZW5kaWYKIAogICAgICAgICAvLyBSZXByZXNlbnQgdGhlIGluaXRpYWwgYWR2YW5jZSBmb3Ig
YSB0ZXh0IHJ1biBieSBhZGp1c3RpbmcgdGhlIGFkdmFuY2UKQEAgLTU4OCw4ICs1ODgsOCBAQCB2
b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6YWRqdXN0R2x5cGhzCiAgICAgICAgIGNvbnN0IENH
U2l6ZSogYWR2YW5jZXMgPSBjb21wbGV4VGV4dFJ1bi5hZHZhbmNlcygpOwogCiAgICAgICAgIGJv
b2wgbGFzdFJ1biA9IHIgKyAxID09IHJ1bkNvdW50OwotICAgICAgICBib29sIHJvdW5kc0FkdmFu
Y2VzID0gIW1fZm9udC5pc1ByaW50ZXJGb250KCkgJiYgZm9udERhdGEucGxhdGZvcm1EYXRhKCku
cm91bmRzR2x5cGhBZHZhbmNlcygpOwotICAgICAgICBmbG9hdCBzcGFjZVdpZHRoID0gZm9udERh
dGEuc3BhY2VXaWR0aCgpIC0gZm9udERhdGEuc3ludGhldGljQm9sZE9mZnNldCgpOworICAgICAg
ICBib29sIHJvdW5kc0FkdmFuY2VzID0gIW1fZm9udC5pc1ByaW50ZXJGb250KCkgJiYgZm9udC5w
bGF0Zm9ybURhdGEoKS5yb3VuZHNHbHlwaEFkdmFuY2VzKCk7CisgICAgICAgIGZsb2F0IHNwYWNl
V2lkdGggPSBmb250LnNwYWNlV2lkdGgoKSAtIGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpOwog
ICAgICAgICBDR0Zsb2F0IHJvdW5kZWRTcGFjZVdpZHRoID0gcm91bmRDR0Zsb2F0KHNwYWNlV2lk
dGgpOwogICAgICAgICBjb25zdCBVQ2hhciogY3AgPSBjb21wbGV4VGV4dFJ1bi5jaGFyYWN0ZXJz
KCk7CiAgICAgICAgIENHUG9pbnQgZ2x5cGhPcmlnaW4gPSBDR1BvaW50WmVybzsKQEAgLTYxNiwz
MyArNjE2LDMzIEBAIHZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjphZGp1c3RHbHlwaHMKICAg
ICAgICAgICAgICAgICBuZXh0Q2ggPSAqKG1fY29tcGxleFRleHRSdW5zW3IgKyAxXS0+Y2hhcmFj
dGVycygpICsgbV9jb21wbGV4VGV4dFJ1bnNbciArIDFdLT5pbmRleEF0KDApKTsKIAogICAgICAg
ICAgICAgYm9vbCB0cmVhdEFzU3BhY2UgPSBGb250Q2FzY2FkZTo6dHJlYXRBc1NwYWNlKGNoKTsK
LSAgICAgICAgICAgIENHR2x5cGggZ2x5cGggPSB0cmVhdEFzU3BhY2UgPyBmb250RGF0YS5zcGFj
ZUdseXBoKCkgOiBnbHlwaHNbaV07CisgICAgICAgICAgICBDR0dseXBoIGdseXBoID0gdHJlYXRB
c1NwYWNlID8gZm9udC5zcGFjZUdseXBoKCkgOiBnbHlwaHNbaV07CiAgICAgICAgICAgICBDR1Np
emUgYWR2YW5jZSA9IHRyZWF0QXNTcGFjZSA/IENHU2l6ZU1ha2Uoc3BhY2VXaWR0aCwgYWR2YW5j
ZXNbaV0uaGVpZ2h0KSA6IGFkdmFuY2VzW2ldOwogI2lmIFBMQVRGT1JNKElPUykKICAgICAgICAg
ICAgIGlmIChpc0Vtb2ppICYmIGFkdmFuY2Uud2lkdGgpCi0gICAgICAgICAgICAgICAgYWR2YW5j
ZS53aWR0aCA9IGZvbnREYXRhLndpZHRoRm9yR2x5cGgoZ2x5cGgpOworICAgICAgICAgICAgICAg
IGFkdmFuY2Uud2lkdGggPSBmb250LndpZHRoRm9yR2x5cGgoZ2x5cGgpOwogI2VuZGlmCiAKICAg
ICAgICAgICAgIGlmIChjaCA9PSAnXHQnICYmIG1fcnVuLmFsbG93VGFicygpKQotICAgICAgICAg
ICAgICAgIGFkdmFuY2Uud2lkdGggPSBtX2ZvbnQudGFiV2lkdGgoZm9udERhdGEsIG1fcnVuLnRh
YlNpemUoKSwgbV9ydW4ueFBvcygpICsgbV90b3RhbFdpZHRoICsgd2lkdGhTaW5jZUxhc3RDb21t
aXQpOworICAgICAgICAgICAgICAgIGFkdmFuY2Uud2lkdGggPSBtX2ZvbnQudGFiV2lkdGgoZm9u
dCwgbV9ydW4udGFiU2l6ZSgpLCBtX3J1bi54UG9zKCkgKyBtX3RvdGFsV2lkdGggKyB3aWR0aFNp
bmNlTGFzdENvbW1pdCk7CiAgICAgICAgICAgICBlbHNlIGlmIChGb250Q2FzY2FkZTo6dHJlYXRB
c1plcm9XaWR0aFNwYWNlKGNoKSAmJiAhdHJlYXRBc1NwYWNlKSB7CiAgICAgICAgICAgICAgICAg
YWR2YW5jZS53aWR0aCA9IDA7Ci0gICAgICAgICAgICAgICAgZ2x5cGggPSBmb250RGF0YS5zcGFj
ZUdseXBoKCk7CisgICAgICAgICAgICAgICAgZ2x5cGggPSBmb250LnNwYWNlR2x5cGgoKTsKICAg
ICAgICAgICAgIH0KIAogICAgICAgICAgICAgZmxvYXQgcm91bmRlZEFkdmFuY2VXaWR0aCA9IHJv
dW5kZihhZHZhbmNlLndpZHRoKTsKICAgICAgICAgICAgIGlmIChyb3VuZHNBZHZhbmNlcykKICAg
ICAgICAgICAgICAgICBhZHZhbmNlLndpZHRoID0gcm91bmRlZEFkdmFuY2VXaWR0aDsKIAotICAg
ICAgICAgICAgYWR2YW5jZS53aWR0aCArPSBmb250RGF0YS5zeW50aGV0aWNCb2xkT2Zmc2V0KCk7
CisgICAgICAgICAgICBhZHZhbmNlLndpZHRoICs9IGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgp
OwogCiAgCiAgICAgICAgICAgICAvLyBXZSBzcGVjaWFsIGNhc2Ugc3BhY2VzIGluIHR3byB3YXlz
IHdoZW4gYXBwbHlpbmcgd29yZCByb3VuZGluZy4gCiAgICAgICAgICAgICAvLyBGaXJzdCwgd2Ug
cm91bmQgc3BhY2VzIHRvIGFuIGFkanVzdGVkIHdpZHRoIGluIGFsbCBmb250cy4gCiAgICAgICAg
ICAgICAvLyBTZWNvbmQsIGluIGZpeGVkLXBpdGNoIGZvbnRzIHdlIGVuc3VyZSB0aGF0IGFsbCBn
bHlwaHMgdGhhdCAKICAgICAgICAgICAgIC8vIG1hdGNoIHRoZSB3aWR0aCBvZiB0aGUgc3BhY2Ug
Z2x5cGggaGF2ZSB0aGUgc2FtZSB3aWR0aCBhcyB0aGUgc3BhY2UgZ2x5cGguIAotICAgICAgICAg
ICAgaWYgKG1fcnVuLmFwcGx5V29yZFJvdW5kaW5nKCkgJiYgcm91bmRlZEFkdmFuY2VXaWR0aCA9
PSByb3VuZGVkU3BhY2VXaWR0aCAmJiAoZm9udERhdGEucGl0Y2goKSA9PSBGaXhlZFBpdGNoIHx8
IGdseXBoID09IGZvbnREYXRhLnNwYWNlR2x5cGgoKSkpCi0gICAgICAgICAgICAgICAgYWR2YW5j
ZS53aWR0aCA9IGZvbnREYXRhLmFkanVzdGVkU3BhY2VXaWR0aCgpOworICAgICAgICAgICAgaWYg
KG1fcnVuLmFwcGx5V29yZFJvdW5kaW5nKCkgJiYgcm91bmRlZEFkdmFuY2VXaWR0aCA9PSByb3Vu
ZGVkU3BhY2VXaWR0aCAmJiAoZm9udC5waXRjaCgpID09IEZpeGVkUGl0Y2ggfHwgZ2x5cGggPT0g
Zm9udC5zcGFjZUdseXBoKCkpKQorICAgICAgICAgICAgICAgIGFkdmFuY2Uud2lkdGggPSBmb250
LmFkanVzdGVkU3BhY2VXaWR0aCgpOwogCiAgICAgICAgICAgICBpZiAoaGFzRXh0cmFTcGFjaW5n
KSB7CiAgICAgICAgICAgICAgICAgLy8gSWYgd2UncmUgYSBnbHlwaCB3aXRoIGFuIGFkdmFuY2Us
IGdvIGFoZWFkIGFuZCBhZGQgaW4gbGV0dGVyLXNwYWNpbmcuCkBAIC03MTcsNyArNzE3LDcgQEAg
dm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmFkanVzdEdseXBocwogICAgICAgICAgICAgbV9h
ZGp1c3RlZEFkdmFuY2VzLmFwcGVuZChhZHZhbmNlKTsKICAgICAgICAgICAgIG1fYWRqdXN0ZWRH
bHlwaHMuYXBwZW5kKGdseXBoKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgRmxvYXRSZWN0
IGdseXBoQm91bmRzID0gZm9udERhdGEuYm91bmRzRm9yR2x5cGgoZ2x5cGgpOworICAgICAgICAg
ICAgRmxvYXRSZWN0IGdseXBoQm91bmRzID0gZm9udC5ib3VuZHNGb3JHbHlwaChnbHlwaCk7CiAg
ICAgICAgICAgICBnbHlwaEJvdW5kcy5tb3ZlKGdseXBoT3JpZ2luLngsIGdseXBoT3JpZ2luLnkp
OwogICAgICAgICAgICAgbV9taW5HbHlwaEJvdW5kaW5nQm94WCA9IHN0ZDo6bWluKG1fbWluR2x5
cGhCb3VuZGluZ0JveFgsIGdseXBoQm91bmRzLngoKSk7CiAgICAgICAgICAgICBtX21heEdseXBo
Qm91bmRpbmdCb3hYID0gc3RkOjptYXgobV9tYXhHbHlwaEJvdW5kaW5nQm94WCwgZ2x5cGhCb3Vu
ZHMubWF4WCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9D
b21wbGV4VGV4dENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyLmgJKHJldmlzaW9uIDE3ODUx
NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENv
bnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCB0eXBlZGVmIGNvbnN0
IHN0cnVjdCBfX0NUTGluZSAqIENUTGluZVJlCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IEZvbnRDYXNjYWRlOwotY2xhc3MgU2ltcGxlRm9udERhdGE7CitjbGFzcyBGb250OwogY2xhc3Mg
VGV4dFJ1bjsKIAogZW51bSBHbHlwaEl0ZXJhdGlvblN0eWxlIHsgSW5jbHVkZVBhcnRpYWxHbHlw
aHMsIEJ5V2hvbGVHbHlwaHMgfTsKQEAgLTUwLDEwICs1MCwxMCBAQCBlbnVtIEdseXBoSXRlcmF0
aW9uU3R5bGUgeyBJbmNsdWRlUGFydGlhCiAvLyBjb21wbGV4IHNjcmlwdHMgb24gT1MgWC4KIGNs
YXNzIENvbXBsZXhUZXh0Q29udHJvbGxlciB7CiBwdWJsaWM6Ci0gICAgQ29tcGxleFRleHRDb250
cm9sbGVyKGNvbnN0IEZvbnRDYXNjYWRlKiwgY29uc3QgVGV4dFJ1biYsIGJvb2wgbWF5VXNlTmF0
dXJhbFdyaXRpbmdEaXJlY3Rpb24gPSBmYWxzZSwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0
YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgYm9vbCBmb3JUZXh0RW1waGFzaXMgPSBmYWxzZSk7Cisg
ICAgQ29tcGxleFRleHRDb250cm9sbGVyKGNvbnN0IEZvbnRDYXNjYWRlKiwgY29uc3QgVGV4dFJ1
biYsIGJvb2wgbWF5VXNlTmF0dXJhbFdyaXRpbmdEaXJlY3Rpb24gPSBmYWxzZSwgSGFzaFNldDxj
b25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMgPSAwLCBib29sIGZvclRleHRFbXBoYXNpcyA9IGZh
bHNlKTsKIAogICAgIC8vIEFkdmFuY2UgYW5kIGVtaXQgZ2x5cGhzIHVwIHRvIHRoZSBzcGVjaWZp
ZWQgY2hhcmFjdGVyLgotICAgIHZvaWQgYWR2YW5jZSh1bnNpZ25lZCB0bywgR2x5cGhCdWZmZXIq
ID0gMCwgR2x5cGhJdGVyYXRpb25TdHlsZSA9IEluY2x1ZGVQYXJ0aWFsR2x5cGhzLCBIYXNoU2V0
PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwKTsKKyAgICB2b2lkIGFk
dmFuY2UodW5zaWduZWQgdG8sIEdseXBoQnVmZmVyKiA9IDAsIEdseXBoSXRlcmF0aW9uU3R5bGUg
PSBJbmNsdWRlUGFydGlhbEdseXBocywgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9u
dHMgPSAwKTsKIAogICAgIC8vIENvbXB1dGUgdGhlIGNoYXJhY3RlciBvZmZzZXQgZm9yIGEgZ2l2
ZW4geCBjb29yZGluYXRlLgogICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbihmbG9hdCB4LCBib29s
IGluY2x1ZGVQYXJ0aWFsR2x5cGhzKTsKQEAgLTczLDE4ICs3MywxOCBAQCBwdWJsaWM6CiBwcml2
YXRlOgogICAgIGNsYXNzIENvbXBsZXhUZXh0UnVuIDogcHVibGljIFJlZkNvdW50ZWQ8Q29tcGxl
eFRleHRSdW4+IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBSZWY8Q29tcGxleFRleHRS
dW4+IGNyZWF0ZShDVFJ1blJlZiBjdFJ1biwgY29uc3QgU2ltcGxlRm9udERhdGEmIGZvbnREYXRh
LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24sIHNpemVf
dCBzdHJpbmdMZW5ndGgsIENGUmFuZ2UgcnVuUmFuZ2UpCisgICAgICAgIHN0YXRpYyBSZWY8Q29t
cGxleFRleHRSdW4+IGNyZWF0ZShDVFJ1blJlZiBjdFJ1biwgY29uc3QgRm9udCYgZm9udCwgY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIHN0cmluZ0xvY2F0aW9uLCBzaXplX3Qgc3Ry
aW5nTGVuZ3RoLCBDRlJhbmdlIHJ1blJhbmdlKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBDb21wbGV4VGV4dFJ1bihjdFJ1biwgZm9udERhdGEsIGNoYXJhY3Rl
cnMsIHN0cmluZ0xvY2F0aW9uLCBzdHJpbmdMZW5ndGgsIHJ1blJhbmdlKSk7CisgICAgICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDb21wbGV4VGV4dFJ1bihjdFJ1biwgZm9udCwgY2hhcmFj
dGVycywgc3RyaW5nTG9jYXRpb24sIHN0cmluZ0xlbmd0aCwgcnVuUmFuZ2UpKTsKICAgICAgICAg
fQogCi0gICAgICAgIHN0YXRpYyBSZWY8Q29tcGxleFRleHRSdW4+IGNyZWF0ZShjb25zdCBTaW1w
bGVGb250RGF0YSYgZm9udERhdGEsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBz
dHJpbmdMb2NhdGlvbiwgc2l6ZV90IHN0cmluZ0xlbmd0aCwgYm9vbCBsdHIpCisgICAgICAgIHN0
YXRpYyBSZWY8Q29tcGxleFRleHRSdW4+IGNyZWF0ZShjb25zdCBGb250JiBmb250LCBjb25zdCBV
Q2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24sIHNpemVfdCBzdHJpbmdM
ZW5ndGgsIGJvb2wgbHRyKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBDb21wbGV4VGV4dFJ1bihmb250RGF0YSwgY2hhcmFjdGVycywgc3RyaW5nTG9jYXRpb24s
IHN0cmluZ0xlbmd0aCwgbHRyKSk7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBD
b21wbGV4VGV4dFJ1bihmb250LCBjaGFyYWN0ZXJzLCBzdHJpbmdMb2NhdGlvbiwgc3RyaW5nTGVu
Z3RoLCBsdHIpKTsKICAgICAgICAgfQogCiAgICAgICAgIHVuc2lnbmVkIGdseXBoQ291bnQoKSBj
b25zdCB7IHJldHVybiBtX2dseXBoQ291bnQ7IH0KLSAgICAgICAgY29uc3QgU2ltcGxlRm9udERh
dGEmIGZvbnREYXRhKCkgY29uc3QgeyByZXR1cm4gbV9mb250RGF0YTsgfQorICAgICAgICBjb25z
dCBGb250JiBmb250KCkgY29uc3QgeyByZXR1cm4gbV9mb250OyB9CiAgICAgICAgIGNvbnN0IFVD
aGFyKiBjaGFyYWN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9jaGFyYWN0ZXJzOyB9CiAgICAgICAg
IHVuc2lnbmVkIHN0cmluZ0xvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmdMb2NhdGlv
bjsgfQogICAgICAgICBzaXplX3Qgc3RyaW5nTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9zdHJp
bmdMZW5ndGg7IH0KQEAgLTEwMCwxMSArMTAwLDExIEBAIHByaXZhdGU6CiAgICAgICAgIHZvaWQg
c2V0SXNOb25Nb25vdG9uaWMoKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIENvbXBsZXhUZXh0
UnVuKENUUnVuUmVmLCBjb25zdCBTaW1wbGVGb250RGF0YSYsIGNvbnN0IFVDaGFyKiBjaGFyYWN0
ZXJzLCB1bnNpZ25lZCBzdHJpbmdMb2NhdGlvbiwgc2l6ZV90IHN0cmluZ0xlbmd0aCwgQ0ZSYW5n
ZSBydW5SYW5nZSk7Ci0gICAgICAgIENvbXBsZXhUZXh0UnVuKGNvbnN0IFNpbXBsZUZvbnREYXRh
JiwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIHN0cmluZ0xvY2F0aW9uLCBzaXpl
X3Qgc3RyaW5nTGVuZ3RoLCBib29sIGx0cik7CisgICAgICAgIENvbXBsZXhUZXh0UnVuKENUUnVu
UmVmLCBjb25zdCBGb250JiwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIHN0cmlu
Z0xvY2F0aW9uLCBzaXplX3Qgc3RyaW5nTGVuZ3RoLCBDRlJhbmdlIHJ1blJhbmdlKTsKKyAgICAg
ICAgQ29tcGxleFRleHRSdW4oY29uc3QgRm9udCYsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1
bnNpZ25lZCBzdHJpbmdMb2NhdGlvbiwgc2l6ZV90IHN0cmluZ0xlbmd0aCwgYm9vbCBsdHIpOwog
CiAgICAgICAgIHVuc2lnbmVkIG1fZ2x5cGhDb3VudDsKLSAgICAgICAgY29uc3QgU2ltcGxlRm9u
dERhdGEmIG1fZm9udERhdGE7CisgICAgICAgIGNvbnN0IEZvbnQmIG1fZm9udDsKICAgICAgICAg
Y29uc3QgVUNoYXIqIG1fY2hhcmFjdGVyczsKICAgICAgICAgdW5zaWduZWQgbV9zdHJpbmdMb2Nh
dGlvbjsKICAgICAgICAgc2l6ZV90IG1fc3RyaW5nTGVuZ3RoOwpAQCAtMTI3LDcgKzEyNyw3IEBA
IHByaXZhdGU6CiAKICAgICB2b2lkIGNvbGxlY3RDb21wbGV4VGV4dFJ1bnMoKTsKIAotICAgIHZv
aWQgY29sbGVjdENvbXBsZXhUZXh0UnVuc0ZvckNoYXJhY3RlcnMoY29uc3QgVUNoYXIqLCB1bnNp
Z25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0cmluZ0xvY2F0aW9uLCBjb25zdCBTaW1wbGVGb250RGF0
YSopOworICAgIHZvaWQgY29sbGVjdENvbXBsZXhUZXh0UnVuc0ZvckNoYXJhY3RlcnMoY29uc3Qg
VUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0cmluZ0xvY2F0aW9uLCBjb25zdCBG
b250Kik7CiAgICAgdm9pZCBhZGp1c3RHbHlwaHNBbmRBZHZhbmNlcygpOwogCiAgICAgdW5zaWdu
ZWQgaW5kZXhPZkN1cnJlbnRSdW4odW5zaWduZWQmIGxlZnRtb3N0R2x5cGgpOwpAQCAtMTY5LDcg
KzE2OSw3IEBAIHByaXZhdGU6CiAgICAgZmxvYXQgbV9sZWFkaW5nRXhwYW5zaW9uOwogICAgIGJv
b2wgbV9hZnRlckV4cGFuc2lvbjsKIAotICAgIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEq
PiogbV9mYWxsYmFja0ZvbnRzOworICAgIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBtX2ZhbGxiYWNr
Rm9udHM7CiAKICAgICBmbG9hdCBtX21pbkdseXBoQm91bmRpbmdCb3hYOwogICAgIGZsb2F0IG1f
bWF4R2x5cGhCb3VuZGluZ0JveFg7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyQ29yZVRleHQubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxl
ckNvcmVUZXh0Lm1tCShyZXZpc2lvbiAxNzg1MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyQ29yZVRleHQubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTYxLDcgKzYxLDcgQEAgLSAoaWQpaW5pdFdpdGhGb250Oihjb25zdCBXZWJDb3Jl
OjpGb250QwogICAgIF9jaGFyYWN0ZXIgPSBjaGFyYWN0ZXI7CiAKICAgICAvLyBCeSB0aGUgdGlt
ZSBhIFdlYkNhc2NhZGVMaXN0IGlzIHVzZWQsIHRoZSBGb250Q2FzY2FkZSBoYXMgYWxyZWFkeSBi
ZWVuIGFza2VkIHRvIHJlYWxpemUgYWxsIG9mIGl0cwotICAgIC8vIEZvbnREYXRhLCBzbyB0aGlz
IGxvb3AgZG9lcyBub3QgaGl0IHRoZSBGb250Q2FjaGUuCisgICAgLy8gRm9udHMsIHNvIHRoaXMg
bG9vcCBkb2VzIG5vdCBoaXQgdGhlIEZvbnRDYWNoZS4KICAgICB3aGlsZSAoIV9mb250LT5mYWxs
YmFja1Jhbmdlc0F0KF9jb3VudCkuaXNOdWxsKCkpCiAgICAgICAgIF9jb3VudCsrOwogCkBAIC04
MiwxMCArODIsMTAgQEAgLSAoaWQpb2JqZWN0QXRJbmRleDooTlNVSW50ZWdlcilpbmRleAogICAg
IH0gZWxzZQogICAgICAgICBfZm9udERlc2NyaXB0b3JzLmdyb3coaW5kZXggKyAxKTsKIAotICAg
IGNvbnN0IFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhKiBzaW1wbGVGb250RGF0YSA9IF9mb250LT5m
YWxsYmFja1Jhbmdlc0F0KGluZGV4KS5mb250RGF0YUZvckNoYXJhY3RlcihfY2hhcmFjdGVyKTsK
LSAgICBpZiAoIXNpbXBsZUZvbnREYXRhKQotICAgICAgICBzaW1wbGVGb250RGF0YSA9ICZfZm9u
dC0+ZmFsbGJhY2tSYW5nZXNBdChpbmRleCkuZm9udERhdGFGb3JGaXJzdFJhbmdlKCk7Ci0gICAg
Zm9udERlc2NyaXB0b3IgPSBDVEZvbnRDb3B5Rm9udERlc2NyaXB0b3Ioc2ltcGxlRm9udERhdGEt
PnBsYXRmb3JtRGF0YSgpLmN0Rm9udCgpKTsKKyAgICBjb25zdCBXZWJDb3JlOjpGb250KiBmb250
ID0gX2ZvbnQtPmZhbGxiYWNrUmFuZ2VzQXQoaW5kZXgpLmZvbnRGb3JDaGFyYWN0ZXIoX2NoYXJh
Y3Rlcik7CisgICAgaWYgKCFmb250KQorICAgICAgICBmb250ID0gJl9mb250LT5mYWxsYmFja1Jh
bmdlc0F0KGluZGV4KS5mb250Rm9yRmlyc3RSYW5nZSgpOworICAgIGZvbnREZXNjcmlwdG9yID0g
Q1RGb250Q29weUZvbnREZXNjcmlwdG9yKGZvbnQtPnBsYXRmb3JtRGF0YSgpLmN0Rm9udCgpKTsK
ICAgICBfZm9udERlc2NyaXB0b3JzW2luZGV4XSA9IGFkb3B0Q0YoZm9udERlc2NyaXB0b3IpOwog
ICAgIHJldHVybiAoaWQpZm9udERlc2NyaXB0b3I7CiB9CkBAIC05NCw4ICs5NCw4IEBAIC0gKGlk
KW9iamVjdEF0SW5kZXg6KE5TVUludGVnZXIpaW5kZXgKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1Db21wbGV4VGV4dENvbnRyb2xsZXI6OkNvbXBsZXhUZXh0UnVuOjpDb21wbGV4VGV4dFJ1bihD
VFJ1blJlZiBjdFJ1biwgY29uc3QgU2ltcGxlRm9udERhdGEmIGZvbnREYXRhLCBjb25zdCBVQ2hh
ciogY2hhcmFjdGVycywgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24sIHNpemVfdCBzdHJpbmdMZW5n
dGgsIENGUmFuZ2UgcnVuUmFuZ2UpCi0gICAgOiBtX2ZvbnREYXRhKGZvbnREYXRhKQorQ29tcGxl
eFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dFJ1bjo6Q29tcGxleFRleHRSdW4oQ1RSdW5SZWYg
Y3RSdW4sIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25l
ZCBzdHJpbmdMb2NhdGlvbiwgc2l6ZV90IHN0cmluZ0xlbmd0aCwgQ0ZSYW5nZSBydW5SYW5nZSkK
KyAgICA6IG1fZm9udChmb250KQogICAgICwgbV9jaGFyYWN0ZXJzKGNoYXJhY3RlcnMpCiAgICAg
LCBtX3N0cmluZ0xvY2F0aW9uKHN0cmluZ0xvY2F0aW9uKQogICAgICwgbV9zdHJpbmdMZW5ndGgo
c3RyaW5nTGVuZ3RoKQpAQCAtMTMwLDggKzEzMCw4IEBAIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6
Q29tcGxleFRleHRSdW46OkMKIAogLy8gTWlzc2luZyBnbHlwaHMgcnVuIGNvbnN0cnVjdG9yLiBD
b3JlIFRleHQgd2lsbCBub3QgZ2VuZXJhdGUgYSBydW4gb2YgbWlzc2luZyBnbHlwaHMsIGluc3Rl
YWQgZmFsbGluZyBiYWNrIG9uCiAvLyBnbHlwaHMgZnJvbSBMYXN0UmVzb3J0LiBXZSB3YW50IHRv
IHVzZSB0aGUgcHJpbWFyeSBmb250J3MgbWlzc2luZyBnbHlwaCBpbiBvcmRlciB0byBtYXRjaCB0
aGUgZmFzdCB0ZXh0IGNvZGUgcGF0aC4KLUNvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRl
eHRSdW46OkNvbXBsZXhUZXh0UnVuKGNvbnN0IFNpbXBsZUZvbnREYXRhJiBmb250RGF0YSwgY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIHN0cmluZ0xvY2F0aW9uLCBzaXplX3Qgc3Ry
aW5nTGVuZ3RoLCBib29sIGx0cikKLSAgICA6IG1fZm9udERhdGEoZm9udERhdGEpCitDb21wbGV4
VGV4dENvbnRyb2xsZXI6OkNvbXBsZXhUZXh0UnVuOjpDb21wbGV4VGV4dFJ1bihjb25zdCBGb250
JiBmb250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24s
IHNpemVfdCBzdHJpbmdMZW5ndGgsIGJvb2wgbHRyKQorICAgIDogbV9mb250KGZvbnQpCiAgICAg
LCBtX2NoYXJhY3RlcnMoY2hhcmFjdGVycykKICAgICAsIG1fc3RyaW5nTG9jYXRpb24oc3RyaW5n
TG9jYXRpb24pCiAgICAgLCBtX3N0cmluZ0xlbmd0aChzdHJpbmdMZW5ndGgpCkBAIC0xNjMsNyAr
MTYzLDcgQEAgQ29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dFJ1bjo6QwogICAgIC8v
IFN5bnRoZXNpemUgYSBydW4gb2YgbWlzc2luZyBnbHlwaHMuCiAgICAgbV9nbHlwaHNWZWN0b3Iu
ZmlsbCgwLCBtX2dseXBoQ291bnQpOwogICAgIG1fZ2x5cGhzID0gbV9nbHlwaHNWZWN0b3IuZGF0
YSgpOwotICAgIG1fYWR2YW5jZXNWZWN0b3IuZmlsbChDR1NpemVNYWtlKG1fZm9udERhdGEud2lk
dGhGb3JHbHlwaCgwKSwgMCksIG1fZ2x5cGhDb3VudCk7CisgICAgbV9hZHZhbmNlc1ZlY3Rvci5m
aWxsKENHU2l6ZU1ha2UobV9mb250LndpZHRoRm9yR2x5cGgoMCksIDApLCBtX2dseXBoQ291bnQp
OwogICAgIG1fYWR2YW5jZXMgPSBtX2FkdmFuY2VzVmVjdG9yLmRhdGEoKTsKIH0KIApAQCAtMTg0
LDExICsxODQsMTEgQEAgc3RhdGljIGNvbnN0IFVuaUNoYXIqIHByb3ZpZGVTdHJpbmdBbmRBdAog
ICAgIHJldHVybiBpbmZvLT5jcCArIHN0cmluZ0luZGV4OwogfQogCi12b2lkIENvbXBsZXhUZXh0
Q29udHJvbGxlcjo6Y29sbGVjdENvbXBsZXhUZXh0UnVuc0ZvckNoYXJhY3RlcnMoY29uc3QgVUNo
YXIqIGNwLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0cmluZ0xvY2F0aW9uLCBjb25zdCBT
aW1wbGVGb250RGF0YSogZm9udERhdGEpCit2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Y29s
bGVjdENvbXBsZXhUZXh0UnVuc0ZvckNoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNwLCB1bnNpZ25l
ZCBsZW5ndGgsIHVuc2lnbmVkIHN0cmluZ0xvY2F0aW9uLCBjb25zdCBGb250KiBmb250KQogewot
ICAgIGlmICghZm9udERhdGEpIHsKKyAgICBpZiAoIWZvbnQpIHsKICAgICAgICAgLy8gQ3JlYXRl
IGEgcnVuIG9mIG1pc3NpbmcgZ2x5cGhzIGZyb20gdGhlIHByaW1hcnkgZm9udC4KLSAgICAgICAg
bV9jb21wbGV4VGV4dFJ1bnMuYXBwZW5kKENvbXBsZXhUZXh0UnVuOjpjcmVhdGUobV9mb250LnBy
aW1hcnlGb250RGF0YSgpLCBjcCwgc3RyaW5nTG9jYXRpb24sIGxlbmd0aCwgbV9ydW4ubHRyKCkp
KTsKKyAgICAgICAgbV9jb21wbGV4VGV4dFJ1bnMuYXBwZW5kKENvbXBsZXhUZXh0UnVuOjpjcmVh
dGUobV9mb250LnByaW1hcnlGb250KCksIGNwLCBzdHJpbmdMb2NhdGlvbiwgbGVuZ3RoLCBtX3J1
bi5sdHIoKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xOTYsMjYgKzE5NiwyNiBA
QCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Y29sbGVjdENvbXBsCiAKICAgICBVQ2hhcjMy
IGJhc2VDaGFyYWN0ZXIgPSAwOwogICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHN0cmlu
Z0F0dHJpYnV0ZXM7Ci0gICAgaWYgKGZvbnREYXRhID09IFNpbXBsZUZvbnREYXRhOjpzeXN0ZW1G
YWxsYmFjaygpKSB7CisgICAgaWYgKGZvbnQgPT0gRm9udDo6c3lzdGVtRmFsbGJhY2soKSkgewog
ICAgICAgICAvLyBGSVhNRTogVGhpcyBjb2RlIHBhdGggZG9lcyBub3Qgc3VwcG9ydCBzbWFsbCBj
YXBzLgogICAgICAgICBpc1N5c3RlbUZhbGxiYWNrID0gdHJ1ZTsKIAogICAgICAgICBVMTZfR0VU
KGNwLCAwLCAwLCBsZW5ndGgsIGJhc2VDaGFyYWN0ZXIpOwotICAgICAgICBmb250RGF0YSA9IG1f
Zm9udC5mYWxsYmFja1Jhbmdlc0F0KDApLmZvbnREYXRhRm9yQ2hhcmFjdGVyKGJhc2VDaGFyYWN0
ZXIpOwotICAgICAgICBpZiAoIWZvbnREYXRhKQotICAgICAgICAgICAgZm9udERhdGEgPSAmbV9m
b250LmZhbGxiYWNrUmFuZ2VzQXQoMCkuZm9udERhdGFGb3JGaXJzdFJhbmdlKCk7CisgICAgICAg
IGZvbnQgPSBtX2ZvbnQuZmFsbGJhY2tSYW5nZXNBdCgwKS5mb250Rm9yQ2hhcmFjdGVyKGJhc2VD
aGFyYWN0ZXIpOworICAgICAgICBpZiAoIWZvbnQpCisgICAgICAgICAgICBmb250ID0gJm1fZm9u
dC5mYWxsYmFja1Jhbmdlc0F0KDApLmZvbnRGb3JGaXJzdFJhbmdlKCk7CiAKICAgICAgICAgUmV0
YWluUHRyPFdlYkNhc2NhZGVMaXN0PiBjYXNjYWRlTGlzdCA9IGFkb3B0TlMoW1tXZWJDYXNjYWRl
TGlzdCBhbGxvY10gaW5pdFdpdGhGb250OiZtX2ZvbnQgY2hhcmFjdGVyOmJhc2VDaGFyYWN0ZXJd
KTsKIAotICAgICAgICBzdHJpbmdBdHRyaWJ1dGVzID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVh
dGVNdXRhYmxlQ29weShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwLCBmb250RGF0YS0+Z2V0Q0ZTdHJp
bmdBdHRyaWJ1dGVzKG1fZm9udC50eXBlc2V0dGluZ0ZlYXR1cmVzKCksIGZvbnREYXRhLT5wbGF0
Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpKSkpOworICAgICAgICBzdHJpbmdBdHRyaWJ1dGVzID0g
YWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxlQ29weShrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCAwLCBmb250LT5nZXRDRlN0cmluZ0F0dHJpYnV0ZXMobV9mb250LnR5cGVzZXR0aW5nRmVhdHVy
ZXMoKSwgZm9udC0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSkpKTsKICAgICAgICAgc3Rh
dGljIGNvbnN0IHZvaWQqIGF0dHJpYnV0ZUtleXNbXSA9IHsga0NURm9udENhc2NhZGVMaXN0QXR0
cmlidXRlIH07CiAgICAgICAgIGNvbnN0IHZvaWQqIHZhbHVlc1tdID0geyBjYXNjYWRlTGlzdC5n
ZXQoKSB9OwogICAgICAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBhdHRyaWJ1dGVzID0g
YWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgYXR0cmlidXRl
S2V5cywgdmFsdWVzLCBzaXplb2YoYXR0cmlidXRlS2V5cykgLyBzaXplb2YoKmF0dHJpYnV0ZUtl
eXMpLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZh
bHVlQ2FsbEJhY2tzKSk7CiAgICAgICAgIFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPiBm
b250RGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0ZVdpdGhBdHRyaWJ1
dGVzKGF0dHJpYnV0ZXMuZ2V0KCkpKTsKLSAgICAgICAgUmV0YWluUHRyPENURm9udFJlZj4gZm9u
dFdpdGhDYXNjYWRlTGlzdCA9IGFkb3B0Q0YoQ1RGb250Q3JlYXRlQ29weVdpdGhBdHRyaWJ1dGVz
KGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSwgbV9mb250LnBpeGVsU2l6ZSgpLCAw
LCBmb250RGVzY3JpcHRvci5nZXQoKSkpOworICAgICAgICBSZXRhaW5QdHI8Q1RGb250UmVmPiBm
b250V2l0aENhc2NhZGVMaXN0ID0gYWRvcHRDRihDVEZvbnRDcmVhdGVDb3B5V2l0aEF0dHJpYnV0
ZXMoZm9udC0+cGxhdGZvcm1EYXRhKCkuY3RGb250KCksIG1fZm9udC5waXhlbFNpemUoKSwgMCwg
Zm9udERlc2NyaXB0b3IuZ2V0KCkpKTsKICAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUoY29u
c3RfY2FzdDxDRk11dGFibGVEaWN0aW9uYXJ5UmVmPihzdHJpbmdBdHRyaWJ1dGVzLmdldCgpKSwg
a0NURm9udEF0dHJpYnV0ZU5hbWUsIGZvbnRXaXRoQ2FzY2FkZUxpc3QuZ2V0KCkpOwogICAgIH0g
ZWxzZQotICAgICAgICBzdHJpbmdBdHRyaWJ1dGVzID0gZm9udERhdGEtPmdldENGU3RyaW5nQXR0
cmlidXRlcyhtX2ZvbnQudHlwZXNldHRpbmdGZWF0dXJlcygpLCBmb250RGF0YS0+cGxhdGZvcm1E
YXRhKCkub3JpZW50YXRpb24oKSk7CisgICAgICAgIHN0cmluZ0F0dHJpYnV0ZXMgPSBmb250LT5n
ZXRDRlN0cmluZ0F0dHJpYnV0ZXMobV9mb250LnR5cGVzZXR0aW5nRmVhdHVyZXMoKSwgZm9udC0+
cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSk7CiAKICAgICBSZXRhaW5QdHI8Q1RMaW5lUmVm
PiBsaW5lOwogCkBAIC0yNDgsNTUgKzI0OCw1NSBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxl
cjo6Y29sbGVjdENvbXBsCiAgICAgICAgIENUUnVuUmVmIGN0UnVuID0gc3RhdGljX2Nhc3Q8Q1RS
dW5SZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgocnVuQXJyYXksIG1fcnVuLmx0cigpID8gciA6
IHJ1bkNvdW50IC0gMSAtIHIpKTsKICAgICAgICAgQVNTRVJUKENGR2V0VHlwZUlEKGN0UnVuKSA9
PSBDVFJ1bkdldFR5cGVJRCgpKTsKICAgICAgICAgQ0ZSYW5nZSBydW5SYW5nZSA9IENUUnVuR2V0
U3RyaW5nUmFuZ2UoY3RSdW4pOwotICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogcnVuRm9u
dERhdGEgPSBmb250RGF0YTsKKyAgICAgICAgY29uc3QgRm9udCogcnVuRm9udCA9IGZvbnQ7CiAg
ICAgICAgIGlmIChpc1N5c3RlbUZhbGxiYWNrKSB7CiAgICAgICAgICAgICBDRkRpY3Rpb25hcnlS
ZWYgcnVuQXR0cmlidXRlcyA9IENUUnVuR2V0QXR0cmlidXRlcyhjdFJ1bik7Ci0gICAgICAgICAg
ICBDVEZvbnRSZWYgcnVuRm9udCA9IHN0YXRpY19jYXN0PENURm9udFJlZj4oQ0ZEaWN0aW9uYXJ5
R2V0VmFsdWUocnVuQXR0cmlidXRlcywga0NURm9udEF0dHJpYnV0ZU5hbWUpKTsKLSAgICAgICAg
ICAgIEFTU0VSVChDRkdldFR5cGVJRChydW5Gb250KSA9PSBDVEZvbnRHZXRUeXBlSUQoKSk7Ci0g
ICAgICAgICAgICBSZXRhaW5QdHI8Q0ZUeXBlUmVmPiBydW5Gb250RXF1YWxpdHlPYmplY3QgPSBG
b250UGxhdGZvcm1EYXRhOjpvYmplY3RGb3JFcXVhbGl0eUNoZWNrKHJ1bkZvbnQpOwotICAgICAg
ICAgICAgaWYgKCFDRkVxdWFsKHJ1bkZvbnRFcXVhbGl0eU9iamVjdC5nZXQoKSwgZm9udERhdGEt
PnBsYXRmb3JtRGF0YSgpLm9iamVjdEZvckVxdWFsaXR5Q2hlY2soKS5nZXQoKSkpIHsKKyAgICAg
ICAgICAgIENURm9udFJlZiBydW5DVEZvbnQgPSBzdGF0aWNfY2FzdDxDVEZvbnRSZWY+KENGRGlj
dGlvbmFyeUdldFZhbHVlKHJ1bkF0dHJpYnV0ZXMsIGtDVEZvbnRBdHRyaWJ1dGVOYW1lKSk7Cisg
ICAgICAgICAgICBBU1NFUlQoQ0ZHZXRUeXBlSUQocnVuQ1RGb250KSA9PSBDVEZvbnRHZXRUeXBl
SUQoKSk7CisgICAgICAgICAgICBSZXRhaW5QdHI8Q0ZUeXBlUmVmPiBydW5Gb250RXF1YWxpdHlP
YmplY3QgPSBGb250UGxhdGZvcm1EYXRhOjpvYmplY3RGb3JFcXVhbGl0eUNoZWNrKHJ1bkNURm9u
dCk7CisgICAgICAgICAgICBpZiAoIUNGRXF1YWwocnVuRm9udEVxdWFsaXR5T2JqZWN0LmdldCgp
LCBmb250LT5wbGF0Zm9ybURhdGEoKS5vYmplY3RGb3JFcXVhbGl0eUNoZWNrKCkuZ2V0KCkpKSB7
CiAgICAgICAgICAgICAgICAgLy8gQmVnaW4gdHJ5aW5nIHRvIHNlZSBpZiBydW5Gb250IG1hdGNo
ZXMgYW55IG9mIHRoZSBmb250cyBpbiB0aGUgZmFsbGJhY2sgbGlzdC4KIAogICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7ICFtX2ZvbnQuZmFsbGJhY2tSYW5nZXNBdChpKS5pc051
bGwoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJ1bkZvbnREYXRhID0gbV9mb250LmZh
bGxiYWNrUmFuZ2VzQXQoaSkuZm9udERhdGFGb3JDaGFyYWN0ZXIoYmFzZUNoYXJhY3Rlcik7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICghcnVuRm9udERhdGEpCisgICAgICAgICAgICAgICAgICAg
IHJ1bkZvbnQgPSBtX2ZvbnQuZmFsbGJhY2tSYW5nZXNBdChpKS5mb250Rm9yQ2hhcmFjdGVyKGJh
c2VDaGFyYWN0ZXIpOworICAgICAgICAgICAgICAgICAgICBpZiAoIXJ1bkZvbnQpCiAgICAgICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgUmV0YWluUHRy
PENGVHlwZVJlZj4gcnVuRm9udEVxdWFsaXR5T2JqZWN0ID0gcnVuRm9udERhdGEtPnBsYXRmb3Jt
RGF0YSgpLm9iamVjdEZvckVxdWFsaXR5Q2hlY2soKTsKKyAgICAgICAgICAgICAgICAgICAgUmV0
YWluUHRyPENGVHlwZVJlZj4gcnVuRm9udEVxdWFsaXR5T2JqZWN0ID0gcnVuRm9udC0+cGxhdGZv
cm1EYXRhKCkub2JqZWN0Rm9yRXF1YWxpdHlDaGVjaygpOwogICAgICAgICAgICAgICAgICAgICBp
ZiAoQ0ZFcXVhbChydW5Gb250RXF1YWxpdHlPYmplY3QuZ2V0KCksIHJ1bkZvbnRFcXVhbGl0eU9i
amVjdC5nZXQoKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgcnVuRm9udERhdGEgPSAwOworICAgICAgICAgICAgICAgICAgICBydW5Gb250ID0g
bnVsbHB0cjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUg
aXMgbm8gbWF0Y2hpbmcgZm9udCwgbG9vayB1cCBieSBuYW1lIGluIHRoZSBmb250IGNhY2hlLgot
ICAgICAgICAgICAgICAgIGlmICghcnVuRm9udERhdGEpIHsKKyAgICAgICAgICAgICAgICBpZiAo
IXJ1bkZvbnQpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gUmF0aGVyIHRoYW4gdXNpbmcgcnVu
Rm9udCBhcyBhbiBOU0ZvbnQgYW5kIHdyYXBwaW5nIGl0IGluIGEgRm9udFBsYXRmb3JtRGF0YSwg
Z28gdGhyb3VnaAogICAgICAgICAgICAgICAgICAgICAvLyB0aGUgZm9udCBjYWNoZSBhbmQgdWx0
aW1hdGVseSB0aHJvdWdoIE5TRm9udE1hbmFnZXIgaW4gb3JkZXIgdG8gZ2V0IGFuIE5TRm9udCB3
aXRoIHRoZSByaWdodAogICAgICAgICAgICAgICAgICAgICAvLyBOU0ZvbnRSZW5kZXJpbmdNb2Rl
LgotICAgICAgICAgICAgICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGZvbnROYW1lID0g
YWRvcHRDRihDVEZvbnRDb3B5UG9zdFNjcmlwdE5hbWUocnVuRm9udCkpOworICAgICAgICAgICAg
ICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGZvbnROYW1lID0gYWRvcHRDRihDVEZvbnRD
b3B5UG9zdFNjcmlwdE5hbWUocnVuQ1RGb250KSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChD
RkVxdWFsKGZvbnROYW1lLmdldCgpLCBDRlNUUigiTGFzdFJlc29ydCIpKSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgbV9jb21wbGV4VGV4dFJ1bnMuYXBwZW5kKENvbXBsZXhUZXh0UnVuOjpj
cmVhdGUobV9mb250LnByaW1hcnlGb250RGF0YSgpLCBjcCwgc3RyaW5nTG9jYXRpb24gKyBydW5S
YW5nZS5sb2NhdGlvbiwgcnVuUmFuZ2UubGVuZ3RoLCBtX3J1bi5sdHIoKSkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgbV9jb21wbGV4VGV4dFJ1bnMuYXBwZW5kKENvbXBsZXhUZXh0UnVuOjpj
cmVhdGUobV9mb250LnByaW1hcnlGb250KCksIGNwLCBzdHJpbmdMb2NhdGlvbiArIHJ1blJhbmdl
LmxvY2F0aW9uLCBydW5SYW5nZS5sZW5ndGgsIG1fcnVuLmx0cigpKSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICBydW5Gb250RGF0YSA9IGZvbnRDYWNoZSgpLmZvbnRGb3JGYW1pbHkobV9mb250LmZv
bnREZXNjcmlwdGlvbigpLCBmb250TmFtZS5nZXQoKSwgZmFsc2UpLmdldCgpOworICAgICAgICAg
ICAgICAgICAgICBydW5Gb250ID0gZm9udENhY2hlKCkuZm9udEZvckZhbWlseShtX2ZvbnQuZm9u
dERlc2NyaXB0aW9uKCksIGZvbnROYW1lLmdldCgpLCBmYWxzZSkuZ2V0KCk7CiAjaWYgIVBMQVRG
T1JNKElPUykKICAgICAgICAgICAgICAgICAgICAgLy8gQ29yZSBUZXh0IG1heSBoYXZlIHVzZWQg
YSBmb250IHRoYXQgaXMgbm90IGtub3duIHRvIE5TRm9udE1hbmFnZXIuIEluIHRoYXQgY2FzZSwg
ZmFsbCBiYWNrIG9uCiAgICAgICAgICAgICAgICAgICAgIC8vIHVzaW5nIHRoZSBmb250IGFzIHJl
dHVybmVkLCBldmVuIHRob3VnaCBpdCBtYXkgbm90IGhhdmUgdGhlIGJlc3QgTlNGb250UmVuZGVy
aW5nTW9kZS4KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFydW5Gb250RGF0YSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgRm9udFBsYXRmb3JtRGF0YSBydW5Gb250UGxhdGZvcm1EYXRhKChO
U0ZvbnQgKilydW5Gb250LCBDVEZvbnRHZXRTaXplKHJ1bkZvbnQpLCBtX2ZvbnQuZm9udERlc2Ny
aXB0aW9uKCkudXNlUHJpbnRlckZvbnQoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBydW5G
b250RGF0YSA9ICZmb250Q2FjaGUoKS5mb250Rm9yUGxhdGZvcm1EYXRhKHJ1bkZvbnRQbGF0Zm9y
bURhdGEpLmdldCgpOworICAgICAgICAgICAgICAgICAgICBpZiAoIXJ1bkZvbnQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEgcnVuRm9udFBsYXRmb3JtRGF0YSgo
TlNGb250ICopcnVuQ1RGb250LCBDVEZvbnRHZXRTaXplKHJ1bkNURm9udCksIG1fZm9udC5mb250
RGVzY3JpcHRpb24oKS51c2VQcmludGVyRm9udCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJ1bkZvbnQgPSAmZm9udENhY2hlKCkuZm9udEZvclBsYXRmb3JtRGF0YShydW5Gb250UGxhdGZv
cm1EYXRhKS5nZXQoKTsKICAgICAgICAgICAgICAgICAgICAgfQogI2Vsc2UKICAgICAgICAgICAg
ICAgICAgICAgLy8gRklYTUU6IEp1c3QgYXNzZXJ0IGZvciBub3csIHVudGlsIHdlIGNhbiBkZXZp
c2UgYSBiZXR0ZXIgZml4IHRoYXQgd29ya3Mgd2l0aCBpT1MuCi0gICAgICAgICAgICAgICAgICAg
IEFTU0VSVChydW5Gb250RGF0YSk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChydW5Gb250
KTsKICNlbmRpZgogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAobV9mYWxs
YmFja0ZvbnRzICYmIHJ1bkZvbnREYXRhICE9ICZtX2ZvbnQucHJpbWFyeUZvbnREYXRhKCkpCi0g
ICAgICAgICAgICAgICAgICAgIG1fZmFsbGJhY2tGb250cy0+YWRkKHJ1bkZvbnREYXRhKTsKKyAg
ICAgICAgICAgICAgICBpZiAobV9mYWxsYmFja0ZvbnRzICYmIHJ1bkZvbnQgIT0gJm1fZm9udC5w
cmltYXJ5Rm9udCgpKQorICAgICAgICAgICAgICAgICAgICBtX2ZhbGxiYWNrRm9udHMtPmFkZChy
dW5Gb250KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBpZiAobV9mYWxsYmFj
a0ZvbnRzICYmIHJ1bkZvbnREYXRhICE9ICZtX2ZvbnQucHJpbWFyeUZvbnREYXRhKCkpCi0gICAg
ICAgICAgICBtX2ZhbGxiYWNrRm9udHMtPmFkZChmb250RGF0YSk7CisgICAgICAgIGlmIChtX2Zh
bGxiYWNrRm9udHMgJiYgcnVuRm9udCAhPSAmbV9mb250LnByaW1hcnlGb250KCkpCisgICAgICAg
ICAgICBtX2ZhbGxiYWNrRm9udHMtPmFkZChmb250KTsKIAotICAgICAgICBtX2NvbXBsZXhUZXh0
UnVucy5hcHBlbmQoQ29tcGxleFRleHRSdW46OmNyZWF0ZShjdFJ1biwgKnJ1bkZvbnREYXRhLCBj
cCwgc3RyaW5nTG9jYXRpb24sIGxlbmd0aCwgcnVuUmFuZ2UpKTsKKyAgICAgICAgbV9jb21wbGV4
VGV4dFJ1bnMuYXBwZW5kKENvbXBsZXhUZXh0UnVuOjpjcmVhdGUoY3RSdW4sICpydW5Gb250LCBj
cCwgc3RyaW5nTG9jYXRpb24sIGxlbmd0aCwgcnVuUmFuZ2UpKTsKICAgICB9CiB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q2FjaGVNYWMubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDYWNo
ZU1hYy5tbQkocmV2aXNpb24gMTc4NTE1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0ZvbnRDYWNoZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzMsOCArMzMsOCBA
QAogI2lmICFQTEFURk9STShJT1MpCiAKICNpbXBvcnQgIkNvcmVHcmFwaGljc1NQSS5oIgorI2lt
cG9ydCAiRm9udC5oIgogI2ltcG9ydCAiRm9udENhc2NhZGUuaCIKLSNpbXBvcnQgIlNpbXBsZUZv
bnREYXRhLmgiCiAjaW1wb3J0ICJGb250UGxhdGZvcm1EYXRhLmgiCiAjaW1wb3J0ICJOU0ZvbnRT
UEkuaCIKICNpbXBvcnQgIldlYkNvcmVOU1N0cmluZ0V4dHJhcy5oIgpAQCAtMzM3LDcgKzMzNyw3
IEBAIHN0YXRpYyBib29sIHNob3VsZEF1dG9BY3RpdmF0ZUZvbnRJZk5lZWQKICAgICByZXR1cm4g
a25vd25GYW1pbGllcy5nZXQoKS5hZGQoZmFtaWx5KS5pc05ld0VudHJ5OwogfQogCi1SZWZQdHI8
U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6c3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBv
cmlnaW5hbEZvbnREYXRhLCBib29sIGlzUGxhdGZvcm1Gb250LCBjb25zdCBVQ2hhciogY2hhcmFj
dGVycywgaW50IGxlbmd0aCkKK1JlZlB0cjxGb250PiBGb250Q2FjaGU6OnN5c3RlbUZhbGxiYWNr
Rm9yQ2hhcmFjdGVycyhjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBG
b250KiBvcmlnaW5hbEZvbnREYXRhLCBib29sIGlzUGxhdGZvcm1Gb250LCBjb25zdCBVQ2hhciog
Y2hhcmFjdGVycywgaW50IGxlbmd0aCkKIHsKICAgICBVQ2hhcjMyIGNoYXJhY3RlcjsKICAgICBV
MTZfR0VUKGNoYXJhY3RlcnMsIDAsIDAsIGxlbmd0aCwgY2hhcmFjdGVyKTsKQEAgLTQwNSwzNCAr
NDA1LDM1IEBAIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpzeXN0ZW0KICAgICBy
ZXR1cm4gZm9udEZvclBsYXRmb3JtRGF0YShhbHRlcm5hdGVGb250KTsKIH0KIAotUmVmUHRyPFNp
bXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OnNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCitSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpzaW1p
bGFyRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQogewogICAgIC8vIEF0
dGVtcHQgdG8gZmluZCBhbiBhcHByb3ByaWF0ZSBmb250IHVzaW5nIGEgbWF0Y2ggYmFzZWQgb24g
CiAgICAgLy8gdGhlIHByZXNlbmNlIG9mIGtleXdvcmRzIGluIHRoZSB0aGUgcmVxdWVzdGVkIG5h
bWVzLiAgRm9yIGV4YW1wbGUsIHdlJ2xsCiAgICAgLy8gbWF0Y2ggYW55IG5hbWUgdGhhdCBjb250
YWlucyAiQXJhYmljIiB0byBHZWV6YSBQcm8uCi0gICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBz
aW1wbGVGb250RGF0YTsKKyAgICBSZWZQdHI8Rm9udD4gZm9udDsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZGVzY3JpcHRpb24uZmFtaWx5Q291bnQoKTsgKytpKSB7CiAgICAgICAgIGNv
bnN0IEF0b21pY1N0cmluZyYgZmFtaWx5ID0gZGVzY3JpcHRpb24uZmFtaWx5QXQoaSk7CiAgICAg
ICAgIGlmIChmYW1pbHkuaXNFbXB0eSgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IHN0YXRpYyBTdHJpbmcqIG1hdGNoV29yZHNbM10gPSB7IG5ldyBTdHJpbmcoIkFyYWJpYyIpLCBu
ZXcgU3RyaW5nKCJQYXNodG8iKSwgbmV3IFN0cmluZygiVXJkdSIpIH07CiAgICAgICAgIERFUFJF
Q0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIGdlZXphU3RyLCAoIkdlZXph
IFBybyIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLSAgICAgICAgZm9y
IChpbnQgaiA9IDA7IGogPCAzICYmICFzaW1wbGVGb250RGF0YTsgKytqKQorICAgICAgICBmb3Ig
KGludCBqID0gMDsgaiA8IDMgJiYgIWZvbnQ7ICsraikgewogICAgICAgICAgICAgaWYgKGZhbWls
eS5jb250YWlucygqbWF0Y2hXb3Jkc1tqXSwgZmFsc2UpKQotICAgICAgICAgICAgICAgIHNpbXBs
ZUZvbnREYXRhID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgZ2VlemFTdHIpOworICAgICAg
ICAgICAgICAgIGZvbnQgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBnZWV6YVN0cik7Cisg
ICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIHNpbXBsZUZvbnREYXRhLnJlbGVhc2UoKTsKKyAg
ICByZXR1cm4gZm9udC5yZWxlYXNlKCk7CiB9CiAKLVJlZjxTaW1wbGVGb250RGF0YT4gRm9udENh
Y2hlOjpsYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERl
c2NyaXB0aW9uKQorUmVmPEZvbnQ+IEZvbnRDYWNoZTo6bGFzdFJlc29ydEZhbGxiYWNrRm9udChj
b25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikKIHsKICAgICBERVBSRUNBVEVE
X0RFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCB0aW1lc1N0ciwgKCJUaW1lcyIsIEF0
b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKIAogICAgIC8vIEZJWE1FOiBXb3Vs
ZCBiZSBldmVuIGJldHRlciB0byBzb21laG93IGdldCB0aGUgdXNlcidzIGRlZmF1bHQgZm9udCBo
ZXJlLiAgRm9yIG5vdyB3ZSdsbCBwaWNrCiAgICAgLy8gdGhlIGRlZmF1bHQgdGhhdCB0aGUgdXNl
ciB3b3VsZCBnZXQgd2l0aG91dCBjaGFuZ2luZyBhbnkgcHJlZnMuCi0gICAgUmVmUHRyPFNpbXBs
ZUZvbnREYXRhPiBzaW1wbGVGb250RGF0YSA9IGZvbnRGb3JGYW1pbHkoZm9udERlc2NyaXB0aW9u
LCB0aW1lc1N0ciwgZmFsc2UpOwotICAgIGlmIChzaW1wbGVGb250RGF0YSkKLSAgICAgICAgcmV0
dXJuICpzaW1wbGVGb250RGF0YTsKKyAgICBSZWZQdHI8Rm9udD4gZm9udCA9IGZvbnRGb3JGYW1p
bHkoZm9udERlc2NyaXB0aW9uLCB0aW1lc1N0ciwgZmFsc2UpOworICAgIGlmIChmb250KQorICAg
ICAgICByZXR1cm4gKmZvbnQ7CiAKICAgICAvLyBUaGUgVGltZXMgZmFsbGJhY2sgd2lsbCBhbG1v
c3QgYWx3YXlzIHdvcmssIGJ1dCBpbiB0aGUgaGlnaGx5IHVudXN1YWwgY2FzZSB3aGVyZQogICAg
IC8vIHRoZSB1c2VyIGRvZXNuJ3QgaGF2ZSBpdCwgd2UgZmFsbCBiYWNrIG9uIEx1Y2lkYSBHcmFu
ZGUgYmVjYXVzZSB0aGF0J3MKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9Gb250Q2FzY2FkZUNvbXBsZXhUZXh0TWFjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENhc2NhZGVDb21wbGV4VGV4dE1hYy5j
cHAJKHJldmlzaW9uIDE3ODUxMCkJKGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL0ZvbnRDb21wbGV4VGV4dE1hYy5jcHA6MTc4NTEwKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDYXNjYWRlQ29tcGxleFRleHRNYWMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAy
MDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICog
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKKworI2luY2x1ZGUg
IkNvbXBsZXhUZXh0Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIkZvbnRHbHlwaHMuaCIKKyNpbmNs
dWRlICJHbHlwaEJ1ZmZlci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1
ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCisjaW5jbHVkZSAiU2ltcGxl
Rm9udERhdGEuaCIKKyNpbmNsdWRlICJUZXh0UnVuLmgiCisjaW5jbHVkZSA8d3RmL01hdGhFeHRy
YXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIEZvbnRDYXNjYWRlOjphZGp1c3RT
ZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0
JiBzZWxlY3Rpb25SZWN0LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAoreworICAgIENvbXBsZXhU
ZXh0Q29udHJvbGxlciBjb250cm9sbGVyKHRoaXMsIHJ1bik7CisgICAgY29udHJvbGxlci5hZHZh
bmNlKGZyb20pOworICAgIGZsb2F0IGJlZm9yZVdpZHRoID0gY29udHJvbGxlci5ydW5XaWR0aFNv
RmFyKCk7CisgICAgY29udHJvbGxlci5hZHZhbmNlKHRvKTsKKyAgICBmbG9hdCBhZnRlcldpZHRo
ID0gY29udHJvbGxlci5ydW5XaWR0aFNvRmFyKCk7CisKKyAgICBpZiAocnVuLnJ0bCgpKQorICAg
ICAgICBzZWxlY3Rpb25SZWN0Lm1vdmUoY29udHJvbGxlci50b3RhbFdpZHRoKCkgLSBhZnRlcldp
ZHRoLCAwKTsKKyAgICBlbHNlCisgICAgICAgIHNlbGVjdGlvblJlY3QubW92ZShiZWZvcmVXaWR0
aCwgMCk7CisgICAgc2VsZWN0aW9uUmVjdC5zZXRXaWR0aChhZnRlcldpZHRoIC0gYmVmb3JlV2lk
dGgpOworfQorCitmbG9hdCBGb250Q2FzY2FkZTo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21w
bGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGludCBmcm9tLCBpbnQgdG8sIEdseXBoQnVmZmVy
JiBnbHlwaEJ1ZmZlciwgRm9yVGV4dEVtcGhhc2lzT3JOb3QgZm9yVGV4dEVtcGhhc2lzKSBjb25z
dAoreworICAgIGZsb2F0IGluaXRpYWxBZHZhbmNlOworCisgICAgQ29tcGxleFRleHRDb250cm9s
bGVyIGNvbnRyb2xsZXIodGhpcywgcnVuLCBmYWxzZSwgMCwgZm9yVGV4dEVtcGhhc2lzKTsKKyAg
ICBjb250cm9sbGVyLmFkdmFuY2UoZnJvbSk7CisgICAgZmxvYXQgYmVmb3JlV2lkdGggPSBjb250
cm9sbGVyLnJ1bldpZHRoU29GYXIoKTsKKyAgICBjb250cm9sbGVyLmFkdmFuY2UodG8sICZnbHlw
aEJ1ZmZlcik7CisKKyAgICBpZiAoZ2x5cGhCdWZmZXIuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIGZsb2F0IGFmdGVyV2lkdGggPSBjb250cm9sbGVyLnJ1bldpZHRoU29GYXIo
KTsKKworICAgIGlmIChydW4ucnRsKCkpIHsKKyAgICAgICAgaW5pdGlhbEFkdmFuY2UgPSBjb250
cm9sbGVyLnRvdGFsV2lkdGgoKSArIGNvbnRyb2xsZXIuZmluYWxSb3VuZGluZ1dpZHRoKCkgLSBh
ZnRlcldpZHRoOworICAgICAgICBnbHlwaEJ1ZmZlci5yZXZlcnNlKDAsIGdseXBoQnVmZmVyLnNp
emUoKSk7CisgICAgfSBlbHNlCisgICAgICAgIGluaXRpYWxBZHZhbmNlID0gYmVmb3JlV2lkdGg7
CisKKyAgICByZXR1cm4gaW5pdGlhbEFkdmFuY2U7Cit9CisKK2Zsb2F0IEZvbnRDYXNjYWRlOjpk
cmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBy
dW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAorewor
ICAgIC8vIFRoaXMgZ2x5cGggYnVmZmVyIGhvbGRzIG91ciBnbHlwaHMgKyBhZHZhbmNlcyArIGZv
bnQgZGF0YSBmb3IgZWFjaCBnbHlwaC4KKyAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKKwor
ICAgIGZsb2F0IHN0YXJ0WCA9IHBvaW50LngoKSArIGdldEdseXBoc0FuZEFkdmFuY2VzRm9yQ29t
cGxleFRleHQocnVuLCBmcm9tLCB0bywgZ2x5cGhCdWZmZXIpOworCisgICAgLy8gV2UgY291bGRu
J3QgZ2VuZXJhdGUgYW55IGdseXBocyBmb3IgdGhlIHJ1bi4gIEdpdmUgdXAuCisgICAgaWYgKGds
eXBoQnVmZmVyLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBEcmF3IHRo
ZSBnbHlwaCBidWZmZXIgbm93IGF0IHRoZSBzdGFydGluZyBwb2ludCByZXR1cm5lZCBpbiBzdGFy
dFguCisgICAgRmxvYXRQb2ludCBzdGFydFBvaW50KHN0YXJ0WCwgcG9pbnQueSgpKTsKKyAgICBk
cmF3R2x5cGhCdWZmZXIoY29udGV4dCwgcnVuLCBnbHlwaEJ1ZmZlciwgc3RhcnRQb2ludCk7CisK
KyAgICByZXR1cm4gc3RhcnRQb2ludC54KCkgLSBzdGFydFg7Cit9CisKK3ZvaWQgRm9udENhc2Nh
ZGU6OmRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit7CisgICAgR2x5cGhC
dWZmZXIgZ2x5cGhCdWZmZXI7CisgICAgZmxvYXQgaW5pdGlhbEFkdmFuY2UgPSBnZXRHbHlwaHNB
bmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0KHJ1biwgZnJvbSwgdG8sIGdseXBoQnVmZmVyLCBGb3JU
ZXh0RW1waGFzaXMpOworCisgICAgaWYgKGdseXBoQnVmZmVyLmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgZHJhd0VtcGhhc2lzTWFya3MoY29udGV4dCwgcnVuLCBnbHlwaEJ1ZmZl
ciwgbWFyaywgRmxvYXRQb2ludChwb2ludC54KCkgKyBpbml0aWFsQWR2YW5jZSwgcG9pbnQueSgp
KSk7Cit9CisKK2Zsb2F0IEZvbnRDYXNjYWRlOjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29u
c3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNr
Rm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0Cit7CisgICAgQ29tcGxl
eFRleHRDb250cm9sbGVyIGNvbnRyb2xsZXIodGhpcywgcnVuLCB0cnVlLCBmYWxsYmFja0ZvbnRz
KTsKKyAgICBpZiAoZ2x5cGhPdmVyZmxvdykgeworICAgICAgICBnbHlwaE92ZXJmbG93LT50b3Ag
PSBzdGQ6Om1heDxpbnQ+KGdseXBoT3ZlcmZsb3ctPnRvcCwgY2VpbGYoLWNvbnRyb2xsZXIubWlu
R2x5cGhCb3VuZGluZ0JveFkoKSkgLSAoZ2x5cGhPdmVyZmxvdy0+Y29tcHV0ZUJvdW5kcyA/IDAg
OiBmb250TWV0cmljcygpLmFzY2VudCgpKSk7CisgICAgICAgIGdseXBoT3ZlcmZsb3ctPmJvdHRv
bSA9IHN0ZDo6bWF4PGludD4oZ2x5cGhPdmVyZmxvdy0+Ym90dG9tLCBjZWlsZihjb250cm9sbGVy
Lm1heEdseXBoQm91bmRpbmdCb3hZKCkpIC0gKGdseXBoT3ZlcmZsb3ctPmNvbXB1dGVCb3VuZHMg
PyAwIDogZm9udE1ldHJpY3MoKS5kZXNjZW50KCkpKTsKKyAgICAgICAgZ2x5cGhPdmVyZmxvdy0+
bGVmdCA9IHN0ZDo6bWF4PGludD4oMCwgY2VpbGYoLWNvbnRyb2xsZXIubWluR2x5cGhCb3VuZGlu
Z0JveFgoKSkpOworICAgICAgICBnbHlwaE92ZXJmbG93LT5yaWdodCA9IHN0ZDo6bWF4PGludD4o
MCwgY2VpbGYoY29udHJvbGxlci5tYXhHbHlwaEJvdW5kaW5nQm94WCgpIC0gY29udHJvbGxlci50
b3RhbFdpZHRoKCkpKTsKKyAgICB9CisgICAgcmV0dXJuIGNvbnRyb2xsZXIudG90YWxXaWR0aCgp
OworfQorCitpbnQgRm9udENhc2NhZGU6Om9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQo
Y29uc3QgVGV4dFJ1biYgcnVuLCBmbG9hdCB4LCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBj
b25zdAoreworICAgIENvbXBsZXhUZXh0Q29udHJvbGxlciBjb250cm9sbGVyKHRoaXMsIHJ1bik7
CisgICAgcmV0dXJuIGNvbnRyb2xsZXIub2Zmc2V0Rm9yUG9zaXRpb24oeCwgaW5jbHVkZVBhcnRp
YWxHbHlwaHMpOworfQorCitjb25zdCBTaW1wbGVGb250RGF0YSogRm9udENhc2NhZGU6OmZvbnRE
YXRhRm9yQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMs
IHNpemVfdCBsZW5ndGgsIEZvbnREYXRhVmFyaWFudCB2YXJpYW50KSBjb25zdAoreworICAgIFVD
aGFyMzIgYmFzZUNoYXJhY3RlcjsKKyAgICBzaXplX3QgYmFzZUNoYXJhY3Rlckxlbmd0aCA9IDA7
CisgICAgVTE2X05FWFQoY2hhcmFjdGVycywgYmFzZUNoYXJhY3Rlckxlbmd0aCwgbGVuZ3RoLCBi
YXNlQ2hhcmFjdGVyKTsKKworICAgIEdseXBoRGF0YSBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhID0g
Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGJhc2VDaGFyYWN0ZXIsIGZhbHNlLCB2YXJpYW50KTsKKwor
ICAgIGlmICghYmFzZUNoYXJhY3RlckdseXBoRGF0YS5nbHlwaCkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICBpZiAobGVuZ3RoID09IGJhc2VDaGFyYWN0ZXJMZW5ndGgpCisgICAgICAgIHJldHVy
biBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmZvbnREYXRhOworCisgICAgYm9vbCB0cmllZEJhc2VD
aGFyYWN0ZXJGb250RGF0YSA9IGZhbHNlOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgIWZh
bGxiYWNrUmFuZ2VzQXQoaSkuaXNOdWxsKCk7ICsraSkgeworICAgICAgICBjb25zdCBTaW1wbGVG
b250RGF0YSogc2ltcGxlRm9udERhdGEgPSBmYWxsYmFja1Jhbmdlc0F0KGkpLmZvbnREYXRhRm9y
Q2hhcmFjdGVyKGJhc2VDaGFyYWN0ZXIpOworICAgICAgICBpZiAoIXNpbXBsZUZvbnREYXRhKQor
ICAgICAgICAgICAgY29udGludWU7CisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICBpZiAoYmFz
ZUNoYXJhY3RlciA+PSAweDA2MDAgJiYgYmFzZUNoYXJhY3RlciA8PSAweDA2ZmYgJiYgc2ltcGxl
Rm9udERhdGEtPnNob3VsZE5vdEJlVXNlZEZvckFyYWJpYygpKQorICAgICAgICAgICAgY29udGlu
dWU7CisjZW5kaWYKKyAgICAgICAgaWYgKHZhcmlhbnQgPT0gTm9ybWFsVmFyaWFudCkgeworICAg
ICAgICAgICAgaWYgKHNpbXBsZUZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigp
ID09IFZlcnRpY2FsKSB7CisgICAgICAgICAgICAgICAgaWYgKGlzQ0pLSWRlb2dyYXBoT3JTeW1i
b2woYmFzZUNoYXJhY3RlcikgJiYgIXNpbXBsZUZvbnREYXRhLT5oYXNWZXJ0aWNhbEdseXBocygp
KSB7CisgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBCcm9rZW5JZGVvZ3JhcGhWYXJpYW50
OworICAgICAgICAgICAgICAgICAgICBzaW1wbGVGb250RGF0YSA9IHNpbXBsZUZvbnREYXRhLT5i
cm9rZW5JZGVvZ3JhcGhGb250RGF0YSgpLmdldCgpOworICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAobV9mb250RGVzY3JpcHRpb24ubm9uQ0pLR2x5cGhPcmllbnRhdGlvbigpID09IE5vbkNKS0ds
eXBoT3JpZW50YXRpb25WZXJ0aWNhbFJpZ2h0KSB7CisgICAgICAgICAgICAgICAgICAgIFNpbXBs
ZUZvbnREYXRhKiB2ZXJ0aWNhbFJpZ2h0Rm9udERhdGEgPSBzaW1wbGVGb250RGF0YS0+dmVydGlj
YWxSaWdodE9yaWVudGF0aW9uRm9udERhdGEoKS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAg
R2x5cGggdmVydGljYWxSaWdodEdseXBoID0gdmVydGljYWxSaWdodEZvbnREYXRhLT5nbHlwaEZv
ckNoYXJhY3RlcihiYXNlQ2hhcmFjdGVyKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcnRp
Y2FsUmlnaHRHbHlwaCA9PSBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmdseXBoKQorICAgICAgICAg
ICAgICAgICAgICAgICAgc2ltcGxlRm9udERhdGEgPSB2ZXJ0aWNhbFJpZ2h0Rm9udERhdGE7Cisg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgU2ltcGxlRm9udERh
dGEqIHVwcmlnaHRGb250RGF0YSA9IHNpbXBsZUZvbnREYXRhLT51cHJpZ2h0T3JpZW50YXRpb25G
b250RGF0YSgpLmdldCgpOworICAgICAgICAgICAgICAgICAgICBHbHlwaCB1cHJpZ2h0R2x5cGgg
PSB1cHJpZ2h0Rm9udERhdGEtPmdseXBoRm9yQ2hhcmFjdGVyKGJhc2VDaGFyYWN0ZXIpOworICAg
ICAgICAgICAgICAgICAgICBpZiAodXByaWdodEdseXBoICE9IGJhc2VDaGFyYWN0ZXJHbHlwaERh
dGEuZ2x5cGgpCisgICAgICAgICAgICAgICAgICAgICAgICBzaW1wbGVGb250RGF0YSA9IHVwcmln
aHRGb250RGF0YTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBpZiAoY29uc3QgU2ltcGxlRm9udERhdGEqIHZhcmlhbnRGb250
RGF0YSA9IHNpbXBsZUZvbnREYXRhLT52YXJpYW50Rm9udERhdGEobV9mb250RGVzY3JpcHRpb24s
IHZhcmlhbnQpLmdldCgpKQorICAgICAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gdmFyaWFu
dEZvbnREYXRhOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNpbXBsZUZvbnREYXRhID09IGJh
c2VDaGFyYWN0ZXJHbHlwaERhdGEuZm9udERhdGEpCisgICAgICAgICAgICB0cmllZEJhc2VDaGFy
YWN0ZXJGb250RGF0YSA9IHRydWU7CisKKyAgICAgICAgaWYgKHNpbXBsZUZvbnREYXRhLT5jYW5S
ZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjaGFyYWN0ZXJzLCBsZW5ndGgpKQorICAg
ICAgICAgICAgcmV0dXJuIHNpbXBsZUZvbnREYXRhOworICAgIH0KKworICAgIGlmICghdHJpZWRC
YXNlQ2hhcmFjdGVyRm9udERhdGEgJiYgYmFzZUNoYXJhY3RlckdseXBoRGF0YS5mb250RGF0YSAm
JiBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmZvbnREYXRhLT5jYW5SZW5kZXJDb21iaW5pbmdDaGFy
YWN0ZXJTZXF1ZW5jZShjaGFyYWN0ZXJzLCBsZW5ndGgpKQorICAgICAgICByZXR1cm4gYmFzZUNo
YXJhY3RlckdseXBoRGF0YS5mb250RGF0YTsKKworICAgIHJldHVybiBTaW1wbGVGb250RGF0YTo6
c3lzdGVtRmFsbGJhY2soKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDYXNjYWRlQ29tcGxleFRleHRN
YWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9Gb250Q2FzY2FkZUNvbXBsZXhUZXh0TWFjLmNwcAkod29ya2luZyBjb3B5KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDYXNjYWRlQ29tcGxleFRleHRNYWMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMiArMjYsMTIgQEAKICNpbmNsdWRlICJGb250Q2Fz
Y2FkZS5oIgogCiAjaW5jbHVkZSAiQ29tcGxleFRleHRDb250cm9sbGVyLmgiCisjaW5jbHVkZSAi
Rm9udC5oIgogI2luY2x1ZGUgIkZvbnRHbHlwaHMuaCIKICNpbmNsdWRlICJHbHlwaEJ1ZmZlci5o
IgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNp
bmNsdWRlICJMYXlvdXRSZWN0LmgiCi0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKICNpbmNs
dWRlICJUZXh0UnVuLmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIApAQCAtMTA0LDcg
KzEwNCw3IEBAIHZvaWQgRm9udENhc2NhZGU6OmRyYXdFbXBoYXNpc01hcmtzRm9yQ28KICAgICBk
cmF3RW1waGFzaXNNYXJrcyhjb250ZXh0LCBydW4sIGdseXBoQnVmZmVyLCBtYXJrLCBGbG9hdFBv
aW50KHBvaW50LngoKSArIGluaXRpYWxBZHZhbmNlLCBwb2ludC55KCkpKTsKIH0KIAotZmxvYXQg
Rm9udENhc2NhZGU6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4s
IEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVy
ZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKK2Zsb2F0IEZvbnRDYXNjYWRlOjpmbG9hdFdpZHRo
Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiog
ZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKIHsKICAg
ICBDb21wbGV4VGV4dENvbnRyb2xsZXIgY29udHJvbGxlcih0aGlzLCBydW4sIHRydWUsIGZhbGxi
YWNrRm9udHMpOwogICAgIGlmIChnbHlwaE92ZXJmbG93KSB7CkBAIC0xMjIsNyArMTIyLDcgQEAg
aW50IEZvbnRDYXNjYWRlOjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbQogICAgIHJldHVybiBjb250
cm9sbGVyLm9mZnNldEZvclBvc2l0aW9uKHgsIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKTsKIH0KIAot
Y29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRDYXNjYWRlOjpmb250RGF0YUZvckNvbWJpbmluZ0No
YXJhY3RlclNlcXVlbmNlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBG
b250RGF0YVZhcmlhbnQgdmFyaWFudCkgY29uc3QKK2NvbnN0IEZvbnQqIEZvbnRDYXNjYWRlOjpm
b250Rm9yQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMs
IHNpemVfdCBsZW5ndGgsIEZvbnRWYXJpYW50IHZhcmlhbnQpIGNvbnN0CiB7CiAgICAgVUNoYXIz
MiBiYXNlQ2hhcmFjdGVyOwogICAgIHNpemVfdCBiYXNlQ2hhcmFjdGVyTGVuZ3RoID0gMDsKQEAg
LTEzNCw1MSArMTM0LDUxIEBAIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBGb250Q2FzY2FkZTo6Zm9u
dEQKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBpZiAobGVuZ3RoID09IGJhc2VDaGFyYWN0ZXJM
ZW5ndGgpCi0gICAgICAgIHJldHVybiBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmZvbnREYXRhOwor
ICAgICAgICByZXR1cm4gYmFzZUNoYXJhY3RlckdseXBoRGF0YS5mb250OwogCiAgICAgYm9vbCB0
cmllZEJhc2VDaGFyYWN0ZXJGb250RGF0YSA9IGZhbHNlOwogCiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgIWZhbGxiYWNrUmFuZ2VzQXQoaSkuaXNOdWxsKCk7ICsraSkgewotICAgICAgICBjb25z
dCBTaW1wbGVGb250RGF0YSogc2ltcGxlRm9udERhdGEgPSBmYWxsYmFja1Jhbmdlc0F0KGkpLmZv
bnREYXRhRm9yQ2hhcmFjdGVyKGJhc2VDaGFyYWN0ZXIpOwotICAgICAgICBpZiAoIXNpbXBsZUZv
bnREYXRhKQorICAgICAgICBjb25zdCBGb250KiBmb250ID0gZmFsbGJhY2tSYW5nZXNBdChpKS5m
b250Rm9yQ2hhcmFjdGVyKGJhc2VDaGFyYWN0ZXIpOworICAgICAgICBpZiAoIWZvbnQpCiAgICAg
ICAgICAgICBjb250aW51ZTsKICNpZiBQTEFURk9STShJT1MpCi0gICAgICAgIGlmIChiYXNlQ2hh
cmFjdGVyID49IDB4MDYwMCAmJiBiYXNlQ2hhcmFjdGVyIDw9IDB4MDZmZiAmJiBzaW1wbGVGb250
RGF0YS0+c2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKCkpCisgICAgICAgIGlmIChiYXNlQ2hhcmFj
dGVyID49IDB4MDYwMCAmJiBiYXNlQ2hhcmFjdGVyIDw9IDB4MDZmZiAmJiBmb250LT5zaG91bGRO
b3RCZVVzZWRGb3JBcmFiaWMoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogI2VuZGlmCiAgICAg
ICAgIGlmICh2YXJpYW50ID09IE5vcm1hbFZhcmlhbnQpIHsKLSAgICAgICAgICAgIGlmIChzaW1w
bGVGb250RGF0YS0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCkgewot
ICAgICAgICAgICAgICAgIGlmIChpc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGJhc2VDaGFyYWN0ZXIp
ICYmICFzaW1wbGVGb250RGF0YS0+aGFzVmVydGljYWxHbHlwaHMoKSkgeworICAgICAgICAgICAg
aWYgKGZvbnQtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoaXNDSktJZGVvZ3JhcGhPclN5bWJvbChiYXNlQ2hhcmFjdGVyKSAm
JiAhZm9udC0+aGFzVmVydGljYWxHbHlwaHMoKSkgewogICAgICAgICAgICAgICAgICAgICB2YXJp
YW50ID0gQnJva2VuSWRlb2dyYXBoVmFyaWFudDsKLSAgICAgICAgICAgICAgICAgICAgc2ltcGxl
Rm9udERhdGEgPSBzaW1wbGVGb250RGF0YS0+YnJva2VuSWRlb2dyYXBoRm9udERhdGEoKS5nZXQo
KTsKKyAgICAgICAgICAgICAgICAgICAgZm9udCA9IGZvbnQtPmJyb2tlbklkZW9ncmFwaEZvbnQo
KS5nZXQoKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1fZm9udERlc2NyaXB0aW9uLm5v
bkNKS0dseXBoT3JpZW50YXRpb24oKSA9PSBOb25DSktHbHlwaE9yaWVudGF0aW9uVmVydGljYWxS
aWdodCkgewotICAgICAgICAgICAgICAgICAgICBTaW1wbGVGb250RGF0YSogdmVydGljYWxSaWdo
dEZvbnREYXRhID0gc2ltcGxlRm9udERhdGEtPnZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbkZvbnRE
YXRhKCkuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIEdseXBoIHZlcnRpY2FsUmlnaHRHbHlw
aCA9IHZlcnRpY2FsUmlnaHRGb250RGF0YS0+Z2x5cGhGb3JDaGFyYWN0ZXIoYmFzZUNoYXJhY3Rl
cik7CisgICAgICAgICAgICAgICAgICAgIEZvbnQqIHZlcnRpY2FsUmlnaHRGb250ID0gZm9udC0+
dmVydGljYWxSaWdodE9yaWVudGF0aW9uRm9udCgpLmdldCgpOworICAgICAgICAgICAgICAgICAg
ICBHbHlwaCB2ZXJ0aWNhbFJpZ2h0R2x5cGggPSB2ZXJ0aWNhbFJpZ2h0Rm9udC0+Z2x5cGhGb3JD
aGFyYWN0ZXIoYmFzZUNoYXJhY3Rlcik7CiAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJ0aWNh
bFJpZ2h0R2x5cGggPT0gYmFzZUNoYXJhY3RlckdseXBoRGF0YS5nbHlwaCkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gdmVydGljYWxSaWdodEZvbnREYXRhOworICAg
ICAgICAgICAgICAgICAgICAgICAgZm9udCA9IHZlcnRpY2FsUmlnaHRGb250OwogICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIFNpbXBsZUZvbnREYXRhKiB1cHJp
Z2h0Rm9udERhdGEgPSBzaW1wbGVGb250RGF0YS0+dXByaWdodE9yaWVudGF0aW9uRm9udERhdGEo
KS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgRm9udCogdXByaWdodEZvbnREYXRhID0gZm9u
dC0+dXByaWdodE9yaWVudGF0aW9uRm9udCgpLmdldCgpOwogICAgICAgICAgICAgICAgICAgICBH
bHlwaCB1cHJpZ2h0R2x5cGggPSB1cHJpZ2h0Rm9udERhdGEtPmdseXBoRm9yQ2hhcmFjdGVyKGJh
c2VDaGFyYWN0ZXIpOwogICAgICAgICAgICAgICAgICAgICBpZiAodXByaWdodEdseXBoICE9IGJh
c2VDaGFyYWN0ZXJHbHlwaERhdGEuZ2x5cGgpCi0gICAgICAgICAgICAgICAgICAgICAgICBzaW1w
bGVGb250RGF0YSA9IHVwcmlnaHRGb250RGF0YTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZv
bnQgPSB1cHJpZ2h0Rm9udERhdGE7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQog
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKGNvbnN0IFNpbXBsZUZvbnREYXRhKiB2
YXJpYW50Rm9udERhdGEgPSBzaW1wbGVGb250RGF0YS0+dmFyaWFudEZvbnREYXRhKG1fZm9udERl
c2NyaXB0aW9uLCB2YXJpYW50KS5nZXQoKSkKLSAgICAgICAgICAgICAgICBzaW1wbGVGb250RGF0
YSA9IHZhcmlhbnRGb250RGF0YTsKKyAgICAgICAgICAgIGlmIChjb25zdCBGb250KiB2YXJpYW50
Rm9udCA9IGZvbnQtPnZhcmlhbnRGb250KG1fZm9udERlc2NyaXB0aW9uLCB2YXJpYW50KS5nZXQo
KSkKKyAgICAgICAgICAgICAgICBmb250ID0gdmFyaWFudEZvbnQ7CiAgICAgICAgIH0KIAotICAg
ICAgICBpZiAoc2ltcGxlRm9udERhdGEgPT0gYmFzZUNoYXJhY3RlckdseXBoRGF0YS5mb250RGF0
YSkKKyAgICAgICAgaWYgKGZvbnQgPT0gYmFzZUNoYXJhY3RlckdseXBoRGF0YS5mb250KQogICAg
ICAgICAgICAgdHJpZWRCYXNlQ2hhcmFjdGVyRm9udERhdGEgPSB0cnVlOwogCi0gICAgICAgIGlm
IChzaW1wbGVGb250RGF0YS0+Y2FuUmVuZGVyQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY2hh
cmFjdGVycywgbGVuZ3RoKSkKLSAgICAgICAgICAgIHJldHVybiBzaW1wbGVGb250RGF0YTsKKyAg
ICAgICAgaWYgKGZvbnQtPmNhblJlbmRlckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNoYXJh
Y3RlcnMsIGxlbmd0aCkpCisgICAgICAgICAgICByZXR1cm4gZm9udDsKICAgICB9CiAKLSAgICBp
ZiAoIXRyaWVkQmFzZUNoYXJhY3RlckZvbnREYXRhICYmIGJhc2VDaGFyYWN0ZXJHbHlwaERhdGEu
Zm9udERhdGEgJiYgYmFzZUNoYXJhY3RlckdseXBoRGF0YS5mb250RGF0YS0+Y2FuUmVuZGVyQ29t
YmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY2hhcmFjdGVycywgbGVuZ3RoKSkKLSAgICAgICAgcmV0
dXJuIGJhc2VDaGFyYWN0ZXJHbHlwaERhdGEuZm9udERhdGE7CisgICAgaWYgKCF0cmllZEJhc2VD
aGFyYWN0ZXJGb250RGF0YSAmJiBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmZvbnQgJiYgYmFzZUNo
YXJhY3RlckdseXBoRGF0YS5mb250LT5jYW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5j
ZShjaGFyYWN0ZXJzLCBsZW5ndGgpKQorICAgICAgICByZXR1cm4gYmFzZUNoYXJhY3RlckdseXBo
RGF0YS5mb250OwogCi0gICAgcmV0dXJuIFNpbXBsZUZvbnREYXRhOjpzeXN0ZW1GYWxsYmFjaygp
OworICAgIHJldHVybiBGb250OjpzeXN0ZW1GYWxsYmFjaygpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9u
dENhc2NhZGVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0ZvbnRDYXNjYWRlTWFjLm1tCShyZXZpc2lvbiAxNzg1MTApCShmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250TWFjLm1tOjE3ODUxMCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q2FzY2FkZU1hYy5tbQkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwg
MjAwNiwgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJj
b25maWcuaCIKKyNpbXBvcnQgIlNpbXBsZUZvbnREYXRhLmgiCisKKyNpbXBvcnQgIkJsb2NrRXhj
ZXB0aW9ucy5oIgorI2ltcG9ydCAiQ29sb3IuaCIKKyNpbXBvcnQgIkNvcmVHcmFwaGljc1NQSS5o
IgorI2ltcG9ydCAiQ29yZVRleHRTUEkuaCIKKyNpbXBvcnQgIkZsb2F0UmVjdC5oIgorI2ltcG9y
dCAiRm9udENhY2hlLmgiCisjaW1wb3J0ICJGb250Q2FzY2FkZS5oIgorI2ltcG9ydCAiRm9udERl
c2NyaXB0aW9uLmgiCisjaW1wb3J0ICJTaGFyZWRCdWZmZXIuaCIKKyNpbXBvcnQgIldlYkNvcmVT
eXN0ZW1JbnRlcmZhY2UuaCIKKyNpZiBVU0UoQVBQS0lUKQorI2ltcG9ydCA8QXBwS2l0L0FwcEtp
dC5oPgorI2ltcG9ydCA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+
CisjZWxzZQorI2ltcG9ydCA8Q29yZVRleHQvQ29yZVRleHQuaD4KKyNlbmRpZgorI2ltcG9ydCA8
ZmxvYXQuaD4KKyNpbXBvcnQgPHVuaWNvZGUvdWNoYXIuaD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRp
b25zLmg+CisjaW1wb3J0IDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW1wb3J0IDx3dGYvUmV0YWlu
UHRyLmg+CisKKyNpZiAhUExBVEZPUk0oSU9TKQorQGludGVyZmFjZSBOU0ZvbnQgKFdlYkFwcEtp
dFNlY3JldEFQSSkKKy0gKEJPT0wpX2lzRmFrZUZpeGVkUGl0Y2g7CitAZW5kCisjZW5kaWYKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgVVNFKEFQUEtJVCkKK3N0YXRpYyBib29sIGZvbnRI
YXNWZXJ0aWNhbEdseXBocyhDVEZvbnRSZWYgY3RGb250KQoreworICAgIC8vIFRoZSBjaGVjayBk
b2Vzbid0IGxvb2sgbmVhdCBidXQgdGhpcyBpcyB3aGF0IEFwcEtpdCBkb2VzIGZvciB2ZXJ0aWNh
bCB3cml0aW5nLi4uCisgICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IHRhYmxlVGFncyA9IGFkb3B0
Q0YoQ1RGb250Q29weUF2YWlsYWJsZVRhYmxlcyhjdEZvbnQsIGtDVEZvbnRUYWJsZU9wdGlvbk5v
T3B0aW9ucykpOworICAgIENGSW5kZXggbnVtVGFibGVzID0gQ0ZBcnJheUdldENvdW50KHRhYmxl
VGFncy5nZXQoKSk7CisgICAgZm9yIChDRkluZGV4IGluZGV4ID0gMDsgaW5kZXggPCBudW1UYWJs
ZXM7ICsraW5kZXgpIHsKKyAgICAgICAgQ1RGb250VGFibGVUYWcgdGFnID0gKENURm9udFRhYmxl
VGFnKSh1aW50cHRyX3QpQ0ZBcnJheUdldFZhbHVlQXRJbmRleCh0YWJsZVRhZ3MuZ2V0KCksIGlu
ZGV4KTsKKyAgICAgICAgaWYgKHRhZyA9PSBrQ1RGb250VGFibGVWaGVhIHx8IHRhZyA9PSBrQ1RG
b250VGFibGVWT1JHKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVy
biBmYWxzZTsKK30KKworc3RhdGljIGJvb2wgaW5pdEZvbnREYXRhKFNpbXBsZUZvbnREYXRhKiBm
b250RGF0YSkKK3sKKyAgICBpZiAoIWZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5jZ0ZvbnQoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBO
U1N0cmluZyAqd2ViRmFsbGJhY2tGb250RmFtaWx5KHZvaWQpCit7CisgICAgc3RhdGljIE5TU3Ry
aW5nICp3ZWJGYWxsYmFja0ZvbnRGYW1pbHkgPSBbW1tOU0ZvbnQgc3lzdGVtRm9udE9mU2l6ZTox
Ni4wZl0gZmFtaWx5TmFtZV0gcmV0YWluXTsKKyAgICByZXR1cm4gd2ViRmFsbGJhY2tGb250RmFt
aWx5OworfQorCitjb25zdCBTaW1wbGVGb250RGF0YSogU2ltcGxlRm9udERhdGE6OmNvbXBvc2l0
ZUZvbnRSZWZlcmVuY2VGb250RGF0YShOU0ZvbnQgKmtleSkgY29uc3QKK3sKKyAgICBpZiAoIWtl
eSB8fCBDRkVxdWFsKGFkb3B0Q0YoQ1RGb250Q29weVBvc3RTY3JpcHROYW1lKENURm9udFJlZihr
ZXkpKSkuZ2V0KCksIENGU1RSKCJMYXN0UmVzb3J0IikpKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEpCisgICAgICAgIG1fZGVyaXZlZEZvbnRE
YXRhID0gc3RkOjptYWtlX3VuaXF1ZTxEZXJpdmVkRm9udERhdGE+KGlzQ3VzdG9tRm9udCgpKTsK
KworICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9kZXJpdmVkRm9udERhdGEtPmNvbXBvc2l0ZUZvbnRS
ZWZlcmVuY2VzLmFkZChrZXksIG51bGxwdHIpOworICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRy
eSkgeworICAgICAgICBib29sIGlzVXNpbmdQcmludGVyRm9udCA9IHBsYXRmb3JtRGF0YSgpLmlz
UHJpbnRlckZvbnQoKTsKKyAgICAgICAgTlNGb250ICpzdWJzdGl0dXRlRm9udCA9IGlzVXNpbmdQ
cmludGVyRm9udCA/IFtrZXkgcHJpbnRlckZvbnRdIDogW2tleSBzY3JlZW5Gb250XTsKKworICAg
ICAgICBDVEZvbnRTeW1ib2xpY1RyYWl0cyB0cmFpdHMgPSBDVEZvbnRHZXRTeW1ib2xpY1RyYWl0
cygoQ1RGb250UmVmKXN1YnN0aXR1dGVGb250KTsKKyAgICAgICAgYm9vbCBzeW50aGV0aWNCb2xk
ID0gcGxhdGZvcm1EYXRhKCkuc3ludGhldGljQm9sZCgpICYmICEodHJhaXRzICYga0NURm9udEJv
bGRUcmFpdCk7CisgICAgICAgIGJvb2wgc3ludGhldGljT2JsaXF1ZSA9IHBsYXRmb3JtRGF0YSgp
LnN5bnRoZXRpY09ibGlxdWUoKSAmJiAhKHRyYWl0cyAmIGtDVEZvbnRJdGFsaWNUcmFpdCk7CisK
KyAgICAgICAgRm9udFBsYXRmb3JtRGF0YSBzdWJzdGl0dXRlUGxhdGZvcm0oc3Vic3RpdHV0ZUZv
bnQsIHBsYXRmb3JtRGF0YSgpLnNpemUoKSwgaXNVc2luZ1ByaW50ZXJGb250LCBzeW50aGV0aWNC
b2xkLCBzeW50aGV0aWNPYmxpcXVlLCBwbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpLCBwbGF0
Zm9ybURhdGEoKS53aWR0aFZhcmlhbnQoKSk7CisgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+
dmFsdWUgPSBTaW1wbGVGb250RGF0YTo6Y3JlYXRlKHN1YnN0aXR1dGVQbGF0Zm9ybSwgaXNDdXN0
b21Gb250KCkpOworICAgIH0KKyAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5n
ZXQoKTsKK30KKwordm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Jbml0KCkKK3sKKyAgICBt
X3N5bnRoZXRpY0JvbGRPZmZzZXQgPSBtX3BsYXRmb3JtRGF0YS5tX3N5bnRoZXRpY0JvbGQgPyAx
LjBmIDogMC5mOworCisgICAgYm9vbCBmYWlsZWRTZXR1cCA9IGZhbHNlOworICAgIGlmICghaW5p
dEZvbnREYXRhKHRoaXMpKSB7CisgICAgICAgIC8vIEFjayEgU29tZXRoaW5nIHZlcnkgYmFkIGhh
cHBlbmVkLCBsaWtlIGEgY29ycnVwdCBmb250LgorICAgICAgICAvLyBUcnkgbG9va2luZyBmb3Ig
YW4gYWx0ZXJuYXRlICdiYXNlJyBmb250IGZvciB0aGlzIHJlbmRlcmVyLgorCisgICAgICAgIC8v
IFNwZWNpYWwgY2FzZSBoYWNrIHRvIHVzZSAiVGltZXMgTmV3IFJvbWFuIiBpbiBwbGFjZSBvZiAi
VGltZXMiLgorICAgICAgICAvLyAiVGltZXMgUk8iIGlzIGEgY29tbW9uIGZvbnQgd2hvc2UgZmFt
aWx5IG5hbWUgaXMgIlRpbWVzIi4KKyAgICAgICAgLy8gSXQgb3ZlcnJpZGVzIHRoZSBub3JtYWwg
IlRpbWVzIiBmYW1pbHkgZm9udC4KKyAgICAgICAgLy8gSXQgYWxzbyBhcHBlYXJzIHRvIGhhdmUg
YSBjb3JydXB0IHJlZ3VsYXIgdmFyaWFudC4KKyAgICAgICAgTlNTdHJpbmcgKmZhbGxiYWNrRm9u
dEZhbWlseTsKKyAgICAgICAgaWYgKFtbbV9wbGF0Zm9ybURhdGEubnNGb250KCkgZmFtaWx5TmFt
ZV0gaXNFcXVhbDpAIlRpbWVzIl0pCisgICAgICAgICAgICBmYWxsYmFja0ZvbnRGYW1pbHkgPSBA
IlRpbWVzIE5ldyBSb21hbiI7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGZhbGxiYWNrRm9u
dEZhbWlseSA9IHdlYkZhbGxiYWNrRm9udEZhbWlseSgpOworICAgICAgICAKKyAgICAgICAgLy8g
VHJ5IHNldHRpbmcgdXAgdGhlIGFsdGVybmF0ZSBmb250LgorICAgICAgICAvLyBUaGlzIGlzIGEg
bGFzdCBkaXRjaCBlZmZvcnQgdG8gdXNlIGEgc3Vic3RpdHV0ZSBmb250IHdoZW4gc29tZXRoaW5n
IGhhcyBnb25lIHdyb25nLgorI2lmICFFUlJPUl9ESVNBQkxFRAorICAgICAgICBSZXRhaW5QdHI8
TlNGb250PiBpbml0aWFsRm9udCA9IG1fcGxhdGZvcm1EYXRhLm5zRm9udCgpOworI2VuZGlmCisg
ICAgICAgIGlmIChtX3BsYXRmb3JtRGF0YS5mb250KCkpCisgICAgICAgICAgICBtX3BsYXRmb3Jt
RGF0YS5zZXROU0ZvbnQoW1tOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2VyXSBjb252ZXJ0
Rm9udDptX3BsYXRmb3JtRGF0YS5uc0ZvbnQoKSB0b0ZhbWlseTpmYWxsYmFja0ZvbnRGYW1pbHld
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9wbGF0Zm9ybURhdGEuc2V0TlNGb250KFtO
U0ZvbnQgZm9udFdpdGhOYW1lOmZhbGxiYWNrRm9udEZhbWlseSBzaXplOm1fcGxhdGZvcm1EYXRh
LnNpemUoKV0pOworICAgICAgICBpZiAoIWluaXRGb250RGF0YSh0aGlzKSkgeworICAgICAgICAg
ICAgaWYgKFtmYWxsYmFja0ZvbnRGYW1pbHkgaXNFcXVhbDpAIlRpbWVzIE5ldyBSb21hbiJdKSB7
CisgICAgICAgICAgICAgICAgLy8gT0ssIGNvdWxkbid0IHNldHVwIFRpbWVzIE5ldyBSb21hbiBh
cyBhbiBhbHRlcm5hdGUgdG8gVGltZXMsIGZhbGxiYWNrCisgICAgICAgICAgICAgICAgLy8gb24g
dGhlIHN5c3RlbSBmb250LiAgSWYgdGhpcyBmYWlscyB3ZSBoYXZlIG5vIGFsdGVybmF0aXZlIGxl
ZnQuCisgICAgICAgICAgICAgICAgbV9wbGF0Zm9ybURhdGEuc2V0TlNGb250KFtbTlNGb250TWFu
YWdlciBzaGFyZWRGb250TWFuYWdlcl0gY29udmVydEZvbnQ6bV9wbGF0Zm9ybURhdGEubnNGb250
KCkgdG9GYW1pbHk6d2ViRmFsbGJhY2tGb250RmFtaWx5KCldKTsKKyAgICAgICAgICAgICAgICBp
ZiAoIWluaXRGb250RGF0YSh0aGlzKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBXZSB0cmll
ZCwgVGltZXMsIFRpbWVzIE5ldyBSb21hbiwgYW5kIHRoZSBzeXN0ZW0gZm9udC4gTm8gam95LiBX
ZSBoYXZlIHRvIGdpdmUgdXAuCisgICAgICAgICAgICAgICAgICAgIExPR19FUlJPUigidW5hYmxl
IHRvIGluaXRpYWxpemUgd2l0aCBmb250ICVAIiwgaW5pdGlhbEZvbnQuZ2V0KCkpOworICAgICAg
ICAgICAgICAgICAgICBmYWlsZWRTZXR1cCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBXZSB0cmllZCB0aGUgcmVxdWVz
dGVkIGZvbnQgYW5kIHRoZSBzeXN0ZW0gZm9udC4gTm8gam95LiBXZSBoYXZlIHRvIGdpdmUgdXAu
CisgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJ1bmFibGUgdG8gaW5pdGlhbGl6ZSB3aXRoIGZv
bnQgJUAiLCBpbml0aWFsRm9udC5nZXQoKSk7CisgICAgICAgICAgICAgICAgZmFpbGVkU2V0dXAg
PSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gUmVwb3J0IHRo
ZSBwcm9ibGVtLgorICAgICAgICBMT0dfRVJST1IoIkNvcnJ1cHQgZm9udCBkZXRlY3RlZCwgdXNp
bmcgJUAgaW4gcGxhY2Ugb2YgJUAuIiwKKyAgICAgICAgICAgIFttX3BsYXRmb3JtRGF0YS5uc0Zv
bnQoKSBmYW1pbHlOYW1lXSwgW2luaXRpYWxGb250LmdldCgpIGZhbWlseU5hbWVdKTsKKyAgICB9
CisKKyAgICAvLyBJZiBhbGwgZWxzZSBmYWlscywgdHJ5IHRvIHNldCB1cCB1c2luZyB0aGUgc3lz
dGVtIGZvbnQuCisgICAgLy8gVGhpcyBpcyBwcm9iYWJseSBiZWNhdXNlIFRpbWVzIGFuZCBUaW1l
cyBOZXcgUm9tYW4gYXJlIGJvdGggdW5hdmFpbGFibGUuCisgICAgaWYgKGZhaWxlZFNldHVwKSB7
CisgICAgICAgIG1fcGxhdGZvcm1EYXRhLnNldE5TRm9udChbTlNGb250IHN5c3RlbUZvbnRPZlNp
emU6W21fcGxhdGZvcm1EYXRhLm5zRm9udCgpIHBvaW50U2l6ZV1dKTsKKyAgICAgICAgTE9HX0VS
Uk9SKCJmYWlsZWQgdG8gc2V0IHVwIGZvbnQsIHVzaW5nIHN5c3RlbSBmb250ICVzIiwgbV9wbGF0
Zm9ybURhdGEuZm9udCgpKTsKKyAgICAgICAgaW5pdEZvbnREYXRhKHRoaXMpOworICAgIH0KKyAg
ICAKKyAgICBpbnQgaUFzY2VudDsKKyAgICBpbnQgaURlc2NlbnQ7CisgICAgaW50IGlDYXBIZWln
aHQ7CisgICAgaW50IGlMaW5lR2FwOworICAgIHVuc2lnbmVkIHVuaXRzUGVyRW07CisgICAgaUFz
Y2VudCA9IENHRm9udEdldEFzY2VudChtX3BsYXRmb3JtRGF0YS5jZ0ZvbnQoKSk7CisgICAgLy8g
U29tZSBmb250cyBlcnJvbmVvdXNseSBzcGVjaWZ5IGEgcG9zaXRpdmUgZGVzY2VuZGVyIHZhbHVl
LiBXZSBmb2xsb3cgQ29yZSBUZXh0IGluIGFzc3VtaW5nIHRoYXQKKyAgICAvLyBzdWNoIGZvbnRz
IG1lYW50IHRoZSBzYW1lIGRpc3RhbmNlLCBidXQgaW4gdGhlIHJldmVyc2UgZGlyZWN0aW9uLgor
ICAgIGlEZXNjZW50ID0gLWFicyhDR0ZvbnRHZXREZXNjZW50KG1fcGxhdGZvcm1EYXRhLmNnRm9u
dCgpKSk7CisgICAgaUNhcEhlaWdodCA9IENHRm9udEdldENhcEhlaWdodChtX3BsYXRmb3JtRGF0
YS5jZ0ZvbnQoKSk7CisgICAgaUxpbmVHYXAgPSBDR0ZvbnRHZXRMZWFkaW5nKG1fcGxhdGZvcm1E
YXRhLmNnRm9udCgpKTsKKyAgICB1bml0c1BlckVtID0gQ0dGb250R2V0VW5pdHNQZXJFbShtX3Bs
YXRmb3JtRGF0YS5jZ0ZvbnQoKSk7CisKKyAgICBmbG9hdCBwb2ludFNpemUgPSBtX3BsYXRmb3Jt
RGF0YS5tX3NpemU7CisgICAgZmxvYXQgYXNjZW50ID0gc2NhbGVFbVRvVW5pdHMoaUFzY2VudCwg
dW5pdHNQZXJFbSkgKiBwb2ludFNpemU7CisgICAgZmxvYXQgZGVzY2VudCA9IC1zY2FsZUVtVG9V
bml0cyhpRGVzY2VudCwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemU7CisgICAgZmxvYXQgY2FwSGVp
Z2h0ID0gc2NhbGVFbVRvVW5pdHMoaUNhcEhlaWdodCwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemU7
CisgICAgCisgICAgZmxvYXQgbGluZUdhcCA9IHNjYWxlRW1Ub1VuaXRzKGlMaW5lR2FwLCB1bml0
c1BlckVtKSAqIHBvaW50U2l6ZTsKKworICAgIC8vIFdlIG5lZWQgdG8gYWRqdXN0IFRpbWVzLCBI
ZWx2ZXRpY2EsIGFuZCBDb3VyaWVyIHRvIGNsb3NlbHkgbWF0Y2ggdGhlCisgICAgLy8gdmVydGlj
YWwgbWV0cmljcyBvZiB0aGVpciBNaWNyb3NvZnQgY291bnRlcnBhcnRzIHRoYXQgYXJlIHRoZSBk
ZSBmYWN0bworICAgIC8vIHdlYiBzdGFuZGFyZC4gVGhlIEFwcEtpdCBhZGp1c3RtZW50IG9mIDIw
JSBpcyB0b28gYmlnIGFuZCBpcworICAgIC8vIGluY29ycmVjdGx5IGFkZGVkIHRvIGxpbmUgc3Bh
Y2luZywgc28gd2UgdXNlIGEgMTUlIGFkanVzdG1lbnQgaW5zdGVhZAorICAgIC8vIGFuZCBhZGQg
aXQgdG8gdGhlIGFzY2VudC4KKyAgICBOU1N0cmluZyAqZmFtaWx5TmFtZSA9IFttX3BsYXRmb3Jt
RGF0YS5uc0ZvbnQoKSBmYW1pbHlOYW1lXTsKKyAgICBpZiAoW2ZhbWlseU5hbWUgaXNFcXVhbFRv
U3RyaW5nOkAiVGltZXMiXSB8fCBbZmFtaWx5TmFtZSBpc0VxdWFsVG9TdHJpbmc6QCJIZWx2ZXRp
Y2EiXSB8fCBbZmFtaWx5TmFtZSBpc0VxdWFsVG9TdHJpbmc6QCJDb3VyaWVyIl0pCisgICAgICAg
IGFzY2VudCArPSBmbG9vcmYoKChhc2NlbnQgKyBkZXNjZW50KSAqIDAuMTVmKSArIDAuNWYpOwor
CisgICAgLy8gQ29tcHV0ZSBhbmQgc3RvcmUgbGluZSBzcGFjaW5nLCBiZWZvcmUgdGhlIGxpbmUg
bWV0cmljcyBoYWNrcyBhcmUgYXBwbGllZC4KKyAgICBtX2ZvbnRNZXRyaWNzLnNldExpbmVTcGFj
aW5nKGxyb3VuZGYoYXNjZW50KSArIGxyb3VuZGYoZGVzY2VudCkgKyBscm91bmRmKGxpbmVHYXAp
KTsKKworICAgIC8vIEhhY2sgSGlyYWdpbm8gbGluZSBtZXRyaWNzIHRvIGFsbG93IHJvb20gZm9y
IG1hcmtlZCB0ZXh0IHVuZGVybGluZXMuCisgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzUzODYxODM+
CisgICAgaWYgKGRlc2NlbnQgPCAzICYmIGxpbmVHYXAgPj0gMyAmJiBbZmFtaWx5TmFtZSBoYXNQ
cmVmaXg6QCJIaXJhZ2lubyJdKSB7CisgICAgICAgIGxpbmVHYXAgLT0gMyAtIGRlc2NlbnQ7Cisg
ICAgICAgIGRlc2NlbnQgPSAzOworICAgIH0KKyAgICAKKyAgICBpZiAocGxhdGZvcm1EYXRhKCku
b3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCAmJiAhaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaygp
KQorICAgICAgICBtX2hhc1ZlcnRpY2FsR2x5cGhzID0gZm9udEhhc1ZlcnRpY2FsR2x5cGhzKG1f
cGxhdGZvcm1EYXRhLmN0Rm9udCgpKTsKKworICAgIGZsb2F0IHhIZWlnaHQ7CisKKyAgICBpZiAo
cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsKSB7CisgICAgICAgIC8v
IE1lYXN1cmUgdGhlIGFjdHVhbCBjaGFyYWN0ZXIgIngiLCBzaW5jZSBpdCdzIHBvc3NpYmxlIGZv
ciBpdCB0byBleHRlbmQgYmVsb3cgdGhlIGJhc2VsaW5lLCBhbmQgd2UgbmVlZCB0aGUKKyAgICAg
ICAgLy8gcmVwb3J0ZWQgeC1oZWlnaHQgdG8gb25seSBpbmNsdWRlIHRoZSBwb3J0aW9uIG9mIHRo
ZSBnbHlwaCB0aGF0IGlzIGFib3ZlIHRoZSBiYXNlbGluZS4KKyAgICAgICAgTlNHbHlwaCB4R2x5
cGggPSBnbHlwaEZvckNoYXJhY3RlcigneCcpOworICAgICAgICBpZiAoeEdseXBoKQorICAgICAg
ICAgICAgeEhlaWdodCA9IC1DR1JlY3RHZXRNaW5ZKHBsYXRmb3JtQm91bmRzRm9yR2x5cGgoeEds
eXBoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHhIZWlnaHQgPSBzY2FsZUVtVG9Vbml0
cyhDR0ZvbnRHZXRYSGVpZ2h0KG1fcGxhdGZvcm1EYXRhLmNnRm9udCgpKSwgdW5pdHNQZXJFbSkg
KiBwb2ludFNpemU7CisgICAgfSBlbHNlCisgICAgICAgIHhIZWlnaHQgPSB2ZXJ0aWNhbFJpZ2h0
T3JpZW50YXRpb25Gb250RGF0YSgpLT5mb250TWV0cmljcygpLnhIZWlnaHQoKTsKKworICAgIG1f
Zm9udE1ldHJpY3Muc2V0VW5pdHNQZXJFbSh1bml0c1BlckVtKTsKKyAgICBtX2ZvbnRNZXRyaWNz
LnNldEFzY2VudChhc2NlbnQpOworICAgIG1fZm9udE1ldHJpY3Muc2V0RGVzY2VudChkZXNjZW50
KTsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldENhcEhlaWdodChjYXBIZWlnaHQpOworICAgIG1fZm9u
dE1ldHJpY3Muc2V0TGluZUdhcChsaW5lR2FwKTsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldFhIZWln
aHQoeEhlaWdodCk7Cit9CisKK3N0YXRpYyBDRkRhdGFSZWYgY29weUZvbnRUYWJsZUZvclRhZyhG
b250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEsIEZvdXJDaGFyQ29kZSB0YWJsZU5hbWUpCit7
CisgICAgcmV0dXJuIENHRm9udENvcHlUYWJsZUZvclRhZyhwbGF0Zm9ybURhdGEuY2dGb250KCks
IHRhYmxlTmFtZSk7Cit9CisKK3ZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQ2hhcldpZHRo
SW5pdCgpCit7CisgICAgbV9hdmdDaGFyV2lkdGggPSAwOworICAgIG1fbWF4Q2hhcldpZHRoID0g
MDsKKyAgICAKKyAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBvczJUYWJsZSA9IGFkb3B0Q0YoY29w
eUZvbnRUYWJsZUZvclRhZyhtX3BsYXRmb3JtRGF0YSwgJ09TLzInKSk7CisgICAgaWYgKG9zMlRh
YmxlICYmIENGRGF0YUdldExlbmd0aChvczJUYWJsZS5nZXQoKSkgPj0gNCkgeworICAgICAgICBj
b25zdCBVSW50OCogb3MyID0gQ0ZEYXRhR2V0Qnl0ZVB0cihvczJUYWJsZS5nZXQoKSk7CisgICAg
ICAgIFNJbnQxNiBvczJBdmdDaGFyV2lkdGggPSBvczJbMl0gKiAyNTYgKyBvczJbM107CisgICAg
ICAgIG1fYXZnQ2hhcldpZHRoID0gc2NhbGVFbVRvVW5pdHMob3MyQXZnQ2hhcldpZHRoLCBtX2Zv
bnRNZXRyaWNzLnVuaXRzUGVyRW0oKSkgKiBtX3BsYXRmb3JtRGF0YS5tX3NpemU7CisgICAgfQor
CisgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gaGVhZFRhYmxlID0gYWRvcHRDRihjb3B5Rm9udFRh
YmxlRm9yVGFnKG1fcGxhdGZvcm1EYXRhLCAnaGVhZCcpKTsKKyAgICBpZiAoaGVhZFRhYmxlICYm
IENGRGF0YUdldExlbmd0aChoZWFkVGFibGUuZ2V0KCkpID49IDQyKSB7CisgICAgICAgIGNvbnN0
IFVJbnQ4KiBoZWFkID0gQ0ZEYXRhR2V0Qnl0ZVB0cihoZWFkVGFibGUuZ2V0KCkpOworICAgICAg
ICB1c2hvcnQgdXhNaW4gPSBoZWFkWzM2XSAqIDI1NiArIGhlYWRbMzddOworICAgICAgICB1c2hv
cnQgdXhNYXggPSBoZWFkWzQwXSAqIDI1NiArIGhlYWRbNDFdOworICAgICAgICBTSW50MTYgeE1p
biA9IHN0YXRpY19jYXN0PFNJbnQxNj4odXhNaW4pOworICAgICAgICBTSW50MTYgeE1heCA9IHN0
YXRpY19jYXN0PFNJbnQxNj4odXhNYXgpOworICAgICAgICBmbG9hdCBkaWZmID0gc3RhdGljX2Nh
c3Q8ZmxvYXQ+KHhNYXggLSB4TWluKTsKKyAgICAgICAgbV9tYXhDaGFyV2lkdGggPSBzY2FsZUVt
VG9Vbml0cyhkaWZmLCBtX2ZvbnRNZXRyaWNzLnVuaXRzUGVyRW0oKSkgKiBtX3BsYXRmb3JtRGF0
YS5tX3NpemU7CisgICAgfQorCisgICAgLy8gRmFsbGJhY2sgdG8gYSBjcm9zcy1wbGF0Zm9ybSBl
c3RpbWF0ZSwgd2hpY2ggd2lsbCBwb3B1bGF0ZSB0aGVzZSB2YWx1ZXMgaWYgdGhleSBhcmUgbm9u
LXBvc2l0aXZlLgorICAgIGluaXRDaGFyV2lkdGhzKCk7Cit9CisjZW5kaWYgLy8gVVNFKEFQUEtJ
VCkKKwordm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95KCkKK3sKK30KKworI2lm
ICFQTEFURk9STShJT1MpCitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0
YTo6cGxhdGZvcm1DcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZv
bnREZXNjcmlwdGlvbiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0Cit7CisgICAgaWYgKGlzQ3Vz
dG9tRm9udCgpKSB7CisgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEgc2NhbGVkRm9udERhdGEobV9w
bGF0Zm9ybURhdGEpOworICAgICAgICBzY2FsZWRGb250RGF0YS5tX3NpemUgPSBzY2FsZWRGb250
RGF0YS5tX3NpemUgKiBzY2FsZUZhY3RvcjsKKyAgICAgICAgcmV0dXJuIFNpbXBsZUZvbnREYXRh
OjpjcmVhdGUoc2NhbGVkRm9udERhdGEsIHRydWUsIGZhbHNlKTsKKyAgICB9CisKKyAgICBCRUdJ
Tl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgZmxvYXQgc2l6ZSA9IG1fcGxhdGZvcm1EYXRh
LnNpemUoKSAqIHNjYWxlRmFjdG9yOworICAgIEZvbnRQbGF0Zm9ybURhdGEgc2NhbGVkRm9udERh
dGEoW1tOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2VyXSBjb252ZXJ0Rm9udDptX3BsYXRm
b3JtRGF0YS5uc0ZvbnQoKSB0b1NpemU6c2l6ZV0sIHNpemUsIG1fcGxhdGZvcm1EYXRhLmlzUHJp
bnRlckZvbnQoKSwgZmFsc2UsIGZhbHNlLCBtX3BsYXRmb3JtRGF0YS5vcmllbnRhdGlvbigpKTsK
KworICAgIC8vIEFwcEtpdCByZXNldHMgdGhlIHR5cGUgaW5mb3JtYXRpb24gKHNjcmVlbi9wcmlu
dGVyKSB3aGVuIHlvdSBjb252ZXJ0IGEgZm9udCB0byBhIGRpZmZlcmVudCBzaXplLgorICAgIC8v
IFdlIGhhdmUgdG8gZml4IHVwIHRoZSBmb250IHRoYXQgd2UncmUgaGFuZGVkIGJhY2suCisgICAg
c2NhbGVkRm9udERhdGEuc2V0TlNGb250KGZvbnREZXNjcmlwdGlvbi51c2VQcmludGVyRm9udCgp
ID8gW3NjYWxlZEZvbnREYXRhLm5zRm9udCgpIHByaW50ZXJGb250XSA6IFtzY2FsZWRGb250RGF0
YS5uc0ZvbnQoKSBzY3JlZW5Gb250XSk7CisKKyAgICBpZiAoc2NhbGVkRm9udERhdGEuZm9udCgp
KSB7CisgICAgICAgIE5TRm9udE1hbmFnZXIgKmZvbnRNYW5hZ2VyID0gW05TRm9udE1hbmFnZXIg
c2hhcmVkRm9udE1hbmFnZXJdOworICAgICAgICBOU0ZvbnRUcmFpdE1hc2sgZm9udFRyYWl0cyA9
IFtmb250TWFuYWdlciB0cmFpdHNPZkZvbnQ6bV9wbGF0Zm9ybURhdGEubnNGb250KCldOworCisg
ICAgICAgIGlmIChtX3BsYXRmb3JtRGF0YS5tX3N5bnRoZXRpY0JvbGQpCisgICAgICAgICAgICBm
b250VHJhaXRzIHw9IE5TQm9sZEZvbnRNYXNrOworICAgICAgICBpZiAobV9wbGF0Zm9ybURhdGEu
bV9zeW50aGV0aWNPYmxpcXVlKQorICAgICAgICAgICAgZm9udFRyYWl0cyB8PSBOU0l0YWxpY0Zv
bnRNYXNrOworCisgICAgICAgIE5TRm9udFRyYWl0TWFzayBzY2FsZWRGb250VHJhaXRzID0gW2Zv
bnRNYW5hZ2VyIHRyYWl0c09mRm9udDpzY2FsZWRGb250RGF0YS5uc0ZvbnQoKV07CisgICAgICAg
IHNjYWxlZEZvbnREYXRhLm1fc3ludGhldGljQm9sZCA9IChmb250VHJhaXRzICYgTlNCb2xkRm9u
dE1hc2spICYmICEoc2NhbGVkRm9udFRyYWl0cyAmIE5TQm9sZEZvbnRNYXNrKTsKKyAgICAgICAg
c2NhbGVkRm9udERhdGEubV9zeW50aGV0aWNPYmxpcXVlID0gKGZvbnRUcmFpdHMgJiBOU0l0YWxp
Y0ZvbnRNYXNrKSAmJiAhKHNjYWxlZEZvbnRUcmFpdHMgJiBOU0l0YWxpY0ZvbnRNYXNrKTsKKwor
ICAgICAgICByZXR1cm4gZm9udENhY2hlKCkuZm9udEZvclBsYXRmb3JtRGF0YShzY2FsZWRGb250
RGF0YSk7CisgICAgfQorICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisKKyAgICByZXR1
cm4gMDsKK30KKwordm9pZCBTaW1wbGVGb250RGF0YTo6ZGV0ZXJtaW5lUGl0Y2goKQoreworICAg
IE5TRm9udCogZiA9IG1fcGxhdGZvcm1EYXRhLm5zRm9udCgpOworICAgIC8vIFNwZWNpYWwgY2Fz
ZSBPc2FrYS1Nb25vLgorICAgIC8vIEFjY29yZGluZyB0byA8cmRhcjovL3Byb2JsZW0vMzk5OTQ2
Nz4sIHdlIHNob3VsZCB0cmVhdCBPc2FrYS1Nb25vIGFzIGZpeGVkIHBpdGNoLgorICAgIC8vIE5v
dGUgdGhhdCB0aGUgQXBwS2l0IGRvZXMgbm90IHJlcG9ydCBPc2FrYS1Nb25vIGFzIGZpeGVkIHBp
dGNoLgorCisgICAgLy8gU3BlY2lhbCBjYXNlIE1TLVBHb3RoaWMuCisgICAgLy8gQWNjb3JkaW5n
IHRvIDxyZGFyOi8vcHJvYmxlbS80MDMyOTM4Piwgd2Ugc2hvdWxkIG5vdCB0cmVhdCBNUy1QR290
aGljIGFzIGZpeGVkIHBpdGNoLgorICAgIC8vIE5vdGUgdGhhdCBBcHBLaXQgZG9lcyByZXBvcnQg
TVMtUEdvdGhpYyBhcyBmaXhlZCBwaXRjaC4KKworICAgIC8vIFNwZWNpYWwgY2FzZSBNb25vdHlw
ZUNvcnNpdmEKKyAgICAvLyBBY2NvcmRpbmcgdG8gPHJkYXI6Ly9wcm9ibGVtLzU0NTQ3MDQ+LCB3
ZSBzaG91bGQgbm90IHRyZWF0IE1vbm90eXBlQ29yc2l2YSBhcyBmaXhlZCBwaXRjaC4KKyAgICAv
LyBOb3RlIHRoYXQgQXBwS2l0IGRvZXMgcmVwb3J0IE1vbm90eXBlQ29yc2l2YSBhcyBmaXhlZCBw
aXRjaC4KKworICAgIE5TU3RyaW5nICpuYW1lID0gW2YgZm9udE5hbWVdOworICAgIG1fdHJlYXRB
c0ZpeGVkUGl0Y2ggPSAoW2YgaXNGaXhlZFBpdGNoXSB8fCBbZiBfaXNGYWtlRml4ZWRQaXRjaF0g
fHwKKyAgICAgICAgICAgW25hbWUgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZTpAIk9zYWthLU1vbm8i
XSA9PSBOU09yZGVyZWRTYW1lKSAmJgorICAgICAgICAgICBbbmFtZSBjYXNlSW5zZW5zaXRpdmVD
b21wYXJlOkAiTVMtUEdvdGhpYyJdICE9IE5TT3JkZXJlZFNhbWUgJiYKKyAgICAgICAgICAgW25h
bWUgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZTpAIk1vbm90eXBlQ29yc2l2YSJdICE9IE5TT3JkZXJl
ZFNhbWU7Cit9CisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKKworRmxvYXRSZWN0IFNpbXBsZUZv
bnREYXRhOjpwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAoreworICAg
IEZsb2F0UmVjdCBib3VuZGluZ0JveDsKKyAgICBib3VuZGluZ0JveCA9IENURm9udEdldEJvdW5k
aW5nUmVjdHNGb3JHbHlwaHMobV9wbGF0Zm9ybURhdGEuY3RGb250KCksIHBsYXRmb3JtRGF0YSgp
Lm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwgPyBrQ1RGb250VmVydGljYWxPcmllbnRhdGlvbiA6
IGtDVEZvbnRIb3Jpem9udGFsT3JpZW50YXRpb24sICZnbHlwaCwgMCwgMSk7CisgICAgYm91bmRp
bmdCb3guc2V0WSgtYm91bmRpbmdCb3gubWF4WSgpKTsKKyAgICBpZiAobV9zeW50aGV0aWNCb2xk
T2Zmc2V0KQorICAgICAgICBib3VuZGluZ0JveC5zZXRXaWR0aChib3VuZGluZ0JveC53aWR0aCgp
ICsgbV9zeW50aGV0aWNCb2xkT2Zmc2V0KTsKKworICAgIHJldHVybiBib3VuZGluZ0JveDsKK30K
KworI2lmIFBMQVRGT1JNKE1BQykKK2lubGluZSBDR0ZvbnRSZW5kZXJpbmdTdHlsZSBTaW1wbGVG
b250RGF0YTo6cmVuZGVyaW5nU3R5bGUoKSBjb25zdAoreworICAgIENHRm9udFJlbmRlcmluZ1N0
eWxlIHN0eWxlID0ga0NHRm9udFJlbmRlcmluZ1N0eWxlQW50aWFsaWFzaW5nIHwga0NHRm9udFJl
bmRlcmluZ1N0eWxlU3VicGl4ZWxQb3NpdGlvbmluZyB8IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZVN1
YnBpeGVsUXVhbnRpemF0aW9uOworICAgIE5TRm9udCAqZm9udCA9IHBsYXRmb3JtRGF0YSgpLm5z
Rm9udCgpOworICAgIGlmIChmb250KSB7CisgICAgICAgIHN3aXRjaCAoW2ZvbnQgcmVuZGVyaW5n
TW9kZV0pIHsKKyAgICAgICAgY2FzZSBOU0ZvbnRJbnRlZ2VyQWR2YW5jZW1lbnRzUmVuZGVyaW5n
TW9kZToKKyAgICAgICAgICAgIHN0eWxlID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIE5TRm9udEFudGlhbGlhc2VkSW50ZWdlckFkdmFuY2VtZW50c1JlbmRlcmluZ01vZGU6
CisgICAgICAgICAgICBzdHlsZSA9IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZUFudGlhbGlhc2luZzsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHN0eWxlOworfQorCitpbmxpbmUgYm9vbCBT
aW1wbGVGb250RGF0YTo6YWR2YW5jZUZvckNvbG9yQml0bWFwRm9udChHbHlwaCBnbHlwaCwgQ0dT
aXplJiBhZHZhbmNlKSBjb25zdAoreworICAgIE5TRm9udCAqZm9udCA9IHBsYXRmb3JtRGF0YSgp
Lm5zRm9udCgpOworICAgIGlmICghZm9udCB8fCAhcGxhdGZvcm1EYXRhKCkuaXNDb2xvckJpdG1h
cEZvbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGFkdmFuY2UgPSBOU1NpemVUb0NH
U2l6ZShbZm9udCBhZHZhbmNlbWVudEZvckdseXBoOmdseXBoXSk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisjZW5kaWYKKworc3RhdGljIGJvb2wgaGFzQ3VzdG9tVHJhY2tpbmcoQ1RGb250UmVmIGZv
bnQpCit7CisjaWYgUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJ
UkVEIDwgMTA5MAorICAgIFVOVVNFRF9QQVJBTShmb250KTsKKyAgICByZXR1cm4gZmFsc2U7Cisj
ZWxzZQorICAgIHJldHVybiBDVEZvbnREZXNjcmlwdG9ySXNTeXN0ZW1VSUZvbnQoYWRvcHRDRihD
VEZvbnRDb3B5Rm9udERlc2NyaXB0b3IoZm9udCkpLmdldCgpKTsKKyNlbmRpZgorfQorCitzdGF0
aWMgaW5saW5lIGJvb2wgaXNFbW9qaShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURh
dGEpCit7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIHJldHVybiBwbGF0Zm9ybURhdGEubV9pc0Vt
b2ppOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0ocGxhdGZvcm1EYXRhKTsKKyAgICByZXR1cm4g
ZmFsc2U7CisjZW5kaWYKK30KKworaW5saW5lIGJvb2wgU2ltcGxlRm9udERhdGE6OmNhblVzZUZh
c3RHbHlwaEFkdmFuY2VHZXR0ZXIoR2x5cGggZ2x5cGgsIENHU2l6ZSYgYWR2YW5jZSwgYm9vbCYg
cG9wdWxhdGVkQWR2YW5jZSkgY29uc3QKK3sKKyAgICAvLyBGYXN0IGdldHRlciBkb2Vzbid0IHRh
a2UgY3VzdG9tIHRyYWNraW5nIGludG8gYWNjb3VudAorICAgIGlmIChoYXNDdXN0b21UcmFja2lu
ZyhwbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAv
LyBGYXN0IGdldHRlciBkb2Vzbid0IHdvcmsgZm9yIGVtb2ppCisgICAgaWYgKGlzRW1vamkocGxh
dGZvcm1EYXRhKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gLi4uIG9yIGZvciBh
bnkgYml0bWFwIGZvbnRzIGluIGdlbmVyYWwKKyAgICBpZiAoYWR2YW5jZUZvckNvbG9yQml0bWFw
Rm9udChnbHlwaCwgYWR2YW5jZSkpIHsKKyAgICAgICAgcG9wdWxhdGVkQWR2YW5jZSA9IHRydWU7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Zs
b2F0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNv
bnN0Cit7CisgICAgQ0dTaXplIGFkdmFuY2UgPSBDR1NpemVaZXJvOworICAgIGJvb2wgaG9yaXpv
bnRhbCA9IHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbDsKKyAgICBi
b29sIHBvcHVsYXRlZEFkdmFuY2UgPSBmYWxzZTsKKyAgICBpZiAoKGhvcml6b250YWwgfHwgbV9p
c0Jyb2tlbklkZW9ncmFwaEZhbGxiYWNrKSAmJiBjYW5Vc2VGYXN0R2x5cGhBZHZhbmNlR2V0dGVy
KGdseXBoLCBhZHZhbmNlLCBwb3B1bGF0ZWRBZHZhbmNlKSkgeworICAgICAgICBmbG9hdCBwb2lu
dFNpemUgPSBwbGF0Zm9ybURhdGEoKS5tX3NpemU7CisgICAgICAgIENHQWZmaW5lVHJhbnNmb3Jt
IG0gPSBDR0FmZmluZVRyYW5zZm9ybU1ha2VTY2FsZShwb2ludFNpemUsIHBvaW50U2l6ZSk7Cisg
ICAgICAgIGlmICghQ0dGb250R2V0R2x5cGhBZHZhbmNlc0ZvclN0eWxlKHBsYXRmb3JtRGF0YSgp
LmNnRm9udCgpLCAmbSwgcmVuZGVyaW5nU3R5bGUoKSwgJmdseXBoLCAxLCAmYWR2YW5jZSkpIHsK
KyAgICAgICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gZnVsbE5hbWUgPSBhZG9wdENGKENH
Rm9udENvcHlGdWxsTmFtZShwbGF0Zm9ybURhdGEoKS5jZ0ZvbnQoKSkpOworICAgICAgICAgICAg
TE9HX0VSUk9SKCJVbmFibGUgdG8gY2FjaGUgZ2x5cGggd2lkdGhzIGZvciAlQCAlZiIsIGZ1bGxO
YW1lLmdldCgpLCBwb2ludFNpemUpOworICAgICAgICAgICAgYWR2YW5jZS53aWR0aCA9IDA7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKCFwb3B1bGF0ZWRBZHZhbmNlKQorICAgICAgICBDVEZv
bnRHZXRBZHZhbmNlc0ZvckdseXBocyhtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSwgaG9yaXpvbnRh
bCA/IGtDVEZvbnRIb3Jpem9udGFsT3JpZW50YXRpb24gOiBrQ1RGb250VmVydGljYWxPcmllbnRh
dGlvbiwgJmdseXBoLCAmYWR2YW5jZSwgMSk7CisKKyAgICByZXR1cm4gYWR2YW5jZS53aWR0aCAr
IG1fc3ludGhldGljQm9sZE9mZnNldDsKK30KKworc3RydWN0IFByb3ZpZGVySW5mbyB7CisgICAg
Y29uc3QgVUNoYXIqIGNoYXJhY3RlcnM7CisgICAgc2l6ZV90IGxlbmd0aDsKKyAgICBDRkRpY3Rp
b25hcnlSZWYgYXR0cmlidXRlczsKK307CisKK3N0YXRpYyBjb25zdCBVbmlDaGFyKiBwcm92aWRl
U3RyaW5nQW5kQXR0cmlidXRlcyhDRkluZGV4IHN0cmluZ0luZGV4LCBDRkluZGV4KiBjb3VudCwg
Q0ZEaWN0aW9uYXJ5UmVmKiBhdHRyaWJ1dGVzLCB2b2lkKiBjb250ZXh0KQoreworICAgIFByb3Zp
ZGVySW5mbyogaW5mbyA9IHN0YXRpY19jYXN0PHN0cnVjdCBQcm92aWRlckluZm8qPihjb250ZXh0
KTsKKyAgICBpZiAoc3RyaW5nSW5kZXggPCAwIHx8IHN0YXRpY19jYXN0PHNpemVfdD4oc3RyaW5n
SW5kZXgpID49IGluZm8tPmxlbmd0aCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAqY291bnQg
PSBpbmZvLT5sZW5ndGggLSBzdHJpbmdJbmRleDsKKyAgICAqYXR0cmlidXRlcyA9IGluZm8tPmF0
dHJpYnV0ZXM7CisgICAgcmV0dXJuIGluZm8tPmNoYXJhY3RlcnMgKyBzdHJpbmdJbmRleDsKK30K
KworYm9vbCBTaW1wbGVGb250RGF0YTo6Y2FuUmVuZGVyQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVu
Y2UoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpIGNvbnN0Cit7CisgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIGlmICghbV9jb21iaW5pbmdDaGFyYWN0ZXJT
ZXF1ZW5jZVN1cHBvcnQpCisgICAgICAgIG1fY29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2VTdXBw
b3J0ID0gc3RkOjptYWtlX3VuaXF1ZTxIYXNoTWFwPFN0cmluZywgYm9vbD4+KCk7CisKKyAgICBX
VEY6Okhhc2hNYXA8U3RyaW5nLCBib29sPjo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IG1fY29tYmlu
aW5nQ2hhcmFjdGVyU2VxdWVuY2VTdXBwb3J0LT5hZGQoU3RyaW5nKGNoYXJhY3RlcnMsIGxlbmd0
aCksIGZhbHNlKTsKKyAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICByZXR1
cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKKworICAgIFJldGFpblB0cjxDRlR5cGVSZWY+
IGZvbnRFcXVhbGl0eU9iamVjdCA9IHBsYXRmb3JtRGF0YSgpLm9iamVjdEZvckVxdWFsaXR5Q2hl
Y2soKTsKKworICAgIFByb3ZpZGVySW5mbyBpbmZvID0geyBjaGFyYWN0ZXJzLCBsZW5ndGgsIGdl
dENGU3RyaW5nQXR0cmlidXRlcygwLCBwbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpKSB9Owor
ICAgIFJldGFpblB0cjxDVExpbmVSZWY+IGxpbmUgPSBhZG9wdENGKENUTGluZUNyZWF0ZVdpdGhV
bmlDaGFyUHJvdmlkZXIoJnByb3ZpZGVTdHJpbmdBbmRBdHRyaWJ1dGVzLCAwLCAmaW5mbykpOwor
CisgICAgQ0ZBcnJheVJlZiBydW5BcnJheSA9IENUTGluZUdldEdseXBoUnVucyhsaW5lLmdldCgp
KTsKKyAgICBDRkluZGV4IHJ1bkNvdW50ID0gQ0ZBcnJheUdldENvdW50KHJ1bkFycmF5KTsKKwor
ICAgIGZvciAoQ0ZJbmRleCByID0gMDsgciA8IHJ1bkNvdW50OyByKyspIHsKKyAgICAgICAgQ1RS
dW5SZWYgY3RSdW4gPSBzdGF0aWNfY2FzdDxDVFJ1blJlZj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRl
eChydW5BcnJheSwgcikpOworICAgICAgICBBU1NFUlQoQ0ZHZXRUeXBlSUQoY3RSdW4pID09IENU
UnVuR2V0VHlwZUlEKCkpOworICAgICAgICBDRkRpY3Rpb25hcnlSZWYgcnVuQXR0cmlidXRlcyA9
IENUUnVuR2V0QXR0cmlidXRlcyhjdFJ1bik7CisgICAgICAgIENURm9udFJlZiBydW5Gb250ID0g
c3RhdGljX2Nhc3Q8Q1RGb250UmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShydW5BdHRyaWJ1dGVz
LCBrQ1RGb250QXR0cmlidXRlTmFtZSkpOworICAgICAgICBpZiAoIUNGRXF1YWwoZm9udEVxdWFs
aXR5T2JqZWN0LmdldCgpLCBGb250UGxhdGZvcm1EYXRhOjpvYmplY3RGb3JFcXVhbGl0eUNoZWNr
KHJ1bkZvbnQpLmdldCgpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gdHJ1ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL0ZvbnRDYXNjYWRlTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q2FzY2FkZU1hYy5tbQkod29ya2luZyBjb3B5
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDYXNjYWRlTWFj
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMCArMjYsMTAgQEAKICNpbXBvcnQgIkNvcmVHcmFw
aGljc1NQSS5oIgogI2ltcG9ydCAiQ29yZVRleHRTUEkuaCIKICNpbXBvcnQgIkRhc2hBcnJheS5o
IgorI2ltcG9ydCAiRm9udC5oIgogI2ltcG9ydCAiR2x5cGhCdWZmZXIuaCIKICNpbXBvcnQgIkdy
YXBoaWNzQ29udGV4dC5oIgogI2ltcG9ydCAiTG9nZ2luZy5oIgotI2ltcG9ydCAiU2ltcGxlRm9u
dERhdGEuaCIKICNpbXBvcnQgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKICNpZiBVU0UoQVBQ
S0lUKQogI2ltcG9ydCA8QXBwS2l0L0FwcEtpdC5oPgpAQCAtODksNyArODksNyBAQCBzdGF0aWMg
aW5saW5lIGJvb2wgc2hvdWxkVXNlTGV0dGVycHJlc3NFCiAjZW5kaWYKIH0KIAotc3RhdGljIHZv
aWQgc2hvd0xldHRlcnByZXNzZWRHbHlwaHNXaXRoQWR2YW5jZXMoY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LCBDR0NvbnRleHRSZWYgY29udGV4dCwg
Y29uc3QgQ0dHbHlwaCogZ2x5cGhzLCBjb25zdCBDR1NpemUqIGFkdmFuY2VzLCBzaXplX3QgY291
bnQpCitzdGF0aWMgdm9pZCBzaG93TGV0dGVycHJlc3NlZEdseXBoc1dpdGhBZHZhbmNlcyhjb25z
dCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRm9udCogZm9udCwgQ0dDb250ZXh0UmVmIGNvbnRl
eHQsIGNvbnN0IENHR2x5cGgqIGdseXBocywgY29uc3QgQ0dTaXplKiBhZHZhbmNlcywgc2l6ZV90
IGNvdW50KQogewogI2lmIEVOQUJMRShMRVRURVJQUkVTUykKICAgICBpZiAoIWNvdW50KQpAQCAt
MTI5LDcgKzEyOSw3IEBAIHN0YXRpYyB2b2lkIHNob3dMZXR0ZXJwcmVzc2VkR2x5cGhzV2l0aEEK
ICNlbmRpZgogfQogCi1zdGF0aWMgdm9pZCBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgQ0dDb250ZXh0UmVm
IGNvbnRleHQsIGNvbnN0IENHR2x5cGgqIGdseXBocywgY29uc3QgQ0dTaXplKiBhZHZhbmNlcywg
c2l6ZV90IGNvdW50KQorc3RhdGljIHZvaWQgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhjb25zdCBG
bG9hdFBvaW50JiBwb2ludCwgY29uc3QgRm9udCogZm9udCwgQ0dDb250ZXh0UmVmIGNvbnRleHQs
IGNvbnN0IENHR2x5cGgqIGdseXBocywgY29uc3QgQ0dTaXplKiBhZHZhbmNlcywgc2l6ZV90IGNv
dW50KQogewogICAgIGlmICghY291bnQpCiAgICAgICAgIHJldHVybjsKQEAgLTE5NSw3ICsxOTUs
NyBAQCBzdGF0aWMgdm9pZCBzZXRDR0ZvbnRSZW5kZXJpbmdNb2RlKENHQ29uCiB9CiAjZW5kaWYK
IAotdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZm
ZXIsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2lu
dCkgY29uc3QKK3ZvaWQgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBGb250KiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIs
IGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCkg
Y29uc3QKIHsKICAgICBjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEgPSBmb250
LT5wbGF0Zm9ybURhdGEoKTsKICAgICBpZiAoIXBsYXRmb3JtRGF0YS5zaXplKCkpCkBAIC00NjYs
NyArNDY2LDcgQEAgcHVibGljOgogICAgICAgICA6IG1faW5kZXgoMCkKICAgICAgICAgLCBtX3Rl
eHRSdW4odGV4dFJ1bikKICAgICAgICAgLCBtX2dseXBoQnVmZmVyKGdseXBoQnVmZmVyKQotICAg
ICAgICAsIG1fZm9udERhdGEoZ2x5cGhCdWZmZXIuZm9udERhdGFBdChtX2luZGV4KSkKKyAgICAg
ICAgLCBtX2ZvbnQoZ2x5cGhCdWZmZXIuZm9udEF0KG1faW5kZXgpKQogICAgICAgICAsIG1fdHJh
bnNsYXRpb24oQ0dBZmZpbmVUcmFuc2Zvcm1TY2FsZShDR0FmZmluZVRyYW5zZm9ybU1ha2VUcmFu
c2xhdGlvbih0ZXh0T3JpZ2luLngoKSwgdGV4dE9yaWdpbi55KCkpLCAxLCAtMSkpCiAgICAgewog
ICAgICAgICBtb3ZlVG9OZXh0VmFsaWRHbHlwaCgpOwpAQCAtNDg1LDEzICs0ODUsMTMgQEAgcHJp
dmF0ZToKICAgICBpbnQgbV9pbmRleDsKICAgICBjb25zdCBUZXh0UnVuJiBtX3RleHRSdW47CiAg
ICAgY29uc3QgR2x5cGhCdWZmZXImIG1fZ2x5cGhCdWZmZXI7Ci0gICAgY29uc3QgU2ltcGxlRm9u
dERhdGEqIG1fZm9udERhdGE7CisgICAgY29uc3QgRm9udCogbV9mb250OwogICAgIENHQWZmaW5l
VHJhbnNmb3JtIG1fdHJhbnNsYXRpb247CiB9OwogCiBQYXRoIE1hY0dseXBoVG9QYXRoVHJhbnNs
YXRvcjo6cGF0aCgpCiB7Ci0gICAgUmV0YWluUHRyPENHUGF0aFJlZj4gcmVzdWx0ID0gYWRvcHRD
RihDVEZvbnRDcmVhdGVQYXRoRm9yR2x5cGgobV9mb250RGF0YS0+cGxhdGZvcm1EYXRhKCkuY3RG
b250KCksIG1fZ2x5cGhCdWZmZXIuZ2x5cGhBdChtX2luZGV4KSwgJm1fdHJhbnNsYXRpb24pKTsK
KyAgICBSZXRhaW5QdHI8Q0dQYXRoUmVmPiByZXN1bHQgPSBhZG9wdENGKENURm9udENyZWF0ZVBh
dGhGb3JHbHlwaChtX2ZvbnQtPnBsYXRmb3JtRGF0YSgpLmN0Rm9udCgpLCBtX2dseXBoQnVmZmVy
LmdseXBoQXQobV9pbmRleCksICZtX3RyYW5zbGF0aW9uKSk7CiAgICAgcmV0dXJuIGFkb3B0Q0Yo
Q0dQYXRoQ3JlYXRlTXV0YWJsZUNvcHkocmVzdWx0LmdldCgpKSk7CiB9CiAKQEAgLTUwOSw3ICs1
MDksNyBAQCBhdXRvIE1hY0dseXBoVG9QYXRoVHJhbnNsYXRvcjo6dW5kZXJsaW5lCiAKIHZvaWQg
TWFjR2x5cGhUb1BhdGhUcmFuc2xhdG9yOjptb3ZlVG9OZXh0VmFsaWRHbHlwaCgpCiB7Ci0gICAg
aWYgKCFtX2ZvbnREYXRhLT5pc1NWR0ZvbnQoKSkKKyAgICBpZiAoIW1fZm9udC0+aXNTVkdGb250
KCkpCiAgICAgICAgIHJldHVybjsKICAgICBhZHZhbmNlKCk7CiB9CkBAIC01MjIsOCArNTIyLDgg
QEAgdm9pZCBNYWNHbHlwaFRvUGF0aFRyYW5zbGF0b3I6OmFkdmFuY2UoKQogICAgICAgICArK21f
aW5kZXg7CiAgICAgICAgIGlmIChtX2luZGV4ID49IG1fZ2x5cGhCdWZmZXIuc2l6ZSgpKQogICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIG1fZm9udERhdGEgPSBtX2dseXBoQnVmZmVyLmZvbnRE
YXRhQXQobV9pbmRleCk7Ci0gICAgfSB3aGlsZSAobV9mb250RGF0YS0+aXNTVkdGb250KCkgJiYg
bV9pbmRleCA8IG1fZ2x5cGhCdWZmZXIuc2l6ZSgpKTsKKyAgICAgICAgbV9mb250ID0gbV9nbHlw
aEJ1ZmZlci5mb250QXQobV9pbmRleCk7CisgICAgfSB3aGlsZSAobV9mb250LT5pc1NWR0ZvbnQo
KSAmJiBtX2luZGV4IDwgbV9nbHlwaEJ1ZmZlci5zaXplKCkpOwogfQogCiBEYXNoQXJyYXkgRm9u
dENhc2NhZGU6OmRhc2hlc0ZvckludGVyc2VjdGlvbnNXaXRoUmVjdChjb25zdCBUZXh0UnVuJiBy
dW4sIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIGNvbnN0IEZsb2F0UmVjdCYgbGluZUV4
dGVudHMpIGNvbnN0CkBAIC01NDMsMjQgKzU0MywyNCBAQCBEYXNoQXJyYXkgRm9udENhc2NhZGU6
OmRhc2hlc0ZvckludGVyc2VjCiAgICAgICAgIHJldHVybiBEYXNoQXJyYXkoKTsKICAgICAKICAg
ICAvLyBGSVhNRTogSGFuZGxlIFNWRyArIG5vbi1TVkcgaW50ZXJsZWF2ZWQgcnVucy4gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzc3OAotICAgIGNvbnN0IFNpbXBs
ZUZvbnREYXRhKiBmb250RGF0YSA9IGdseXBoQnVmZmVyLmZvbnREYXRhQXQoMCk7CisgICAgY29u
c3QgRm9udCogZm9udCA9IGdseXBoQnVmZmVyLmZvbnRBdCgwKTsKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8R2x5cGhUb1BhdGhUcmFuc2xhdG9yPiB0cmFuc2xhdG9yOwogICAgIGJvb2wgaXNTVkcgPSBm
YWxzZTsKICAgICBGbG9hdFBvaW50IG9yaWdpbiA9IEZsb2F0UG9pbnQodGV4dE9yaWdpbi54KCkg
KyBkZWx0YVgsIHRleHRPcmlnaW4ueSgpKTsKLSAgICBpZiAoIWZvbnREYXRhLT5pc1NWR0ZvbnQo
KSkKKyAgICBpZiAoIWZvbnQtPmlzU1ZHRm9udCgpKQogICAgICAgICB0cmFuc2xhdG9yID0gc3Rk
OjptYWtlX3VuaXF1ZTxNYWNHbHlwaFRvUGF0aFRyYW5zbGF0b3I+KHJ1biwgZ2x5cGhCdWZmZXIs
IG9yaWdpbik7CiAgICAgZWxzZSB7CiAgICAgICAgIFRleHRSdW46OlJlbmRlcmluZ0NvbnRleHQq
IHJlbmRlcmluZ0NvbnRleHQgPSBydW4ucmVuZGVyaW5nQ29udGV4dCgpOwogICAgICAgICBpZiAo
IXJlbmRlcmluZ0NvbnRleHQpCiAgICAgICAgICAgICByZXR1cm4gRGFzaEFycmF5KCk7Ci0gICAg
ICAgIHRyYW5zbGF0b3IgPSByZW5kZXJpbmdDb250ZXh0LT5jcmVhdGVHbHlwaFRvUGF0aFRyYW5z
bGF0b3IoKmZvbnREYXRhLCAmcnVuLCBnbHlwaEJ1ZmZlciwgMCwgZ2x5cGhCdWZmZXIuc2l6ZSgp
LCBvcmlnaW4pOworICAgICAgICB0cmFuc2xhdG9yID0gcmVuZGVyaW5nQ29udGV4dC0+Y3JlYXRl
R2x5cGhUb1BhdGhUcmFuc2xhdG9yKCpmb250LCAmcnVuLCBnbHlwaEJ1ZmZlciwgMCwgZ2x5cGhC
dWZmZXIuc2l6ZSgpLCBvcmlnaW4pOwogICAgICAgICBpc1NWRyA9IHRydWU7CiAgICAgfQogICAg
IERhc2hBcnJheSByZXN1bHQ7CiAgICAgZm9yIChpbnQgaW5kZXggPSAwOyB0cmFuc2xhdG9yLT5j
b250YWluc01vcmVQYXRocygpOyArK2luZGV4LCB0cmFuc2xhdG9yLT5hZHZhbmNlKCkpIHsKICAg
ICAgICAgR2x5cGhJdGVyYXRpb25TdGF0ZSBpbmZvID0gR2x5cGhJdGVyYXRpb25TdGF0ZShDR1Bv
aW50TWFrZSgwLCAwKSwgQ0dQb2ludE1ha2UoMCwgMCksIGxpbmVFeHRlbnRzLnkoKSwgbGluZUV4
dGVudHMueSgpICsgbGluZUV4dGVudHMuaGVpZ2h0KCksIGxpbmVFeHRlbnRzLngoKSArIGxpbmVF
eHRlbnRzLndpZHRoKCksIGxpbmVFeHRlbnRzLngoKSk7Ci0gICAgICAgIGNvbnN0IFNpbXBsZUZv
bnREYXRhKiBsb2NhbEZvbnREYXRhID0gZ2x5cGhCdWZmZXIuZm9udERhdGFBdChpbmRleCk7Ci0g
ICAgICAgIGlmICghbG9jYWxGb250RGF0YSB8fCAoIWlzU1ZHICYmIGxvY2FsRm9udERhdGEtPmlz
U1ZHRm9udCgpKSB8fCAoaXNTVkcgJiYgbG9jYWxGb250RGF0YSAhPSBmb250RGF0YSkpIHsKKyAg
ICAgICAgY29uc3QgRm9udCogbG9jYWxGb250RGF0YSA9IGdseXBoQnVmZmVyLmZvbnRBdChpbmRl
eCk7CisgICAgICAgIGlmICghbG9jYWxGb250RGF0YSB8fCAoIWlzU1ZHICYmIGxvY2FsRm9udERh
dGEtPmlzU1ZHRm9udCgpKSB8fCAoaXNTVkcgJiYgbG9jYWxGb250RGF0YSAhPSBmb250KSkgewog
ICAgICAgICAgICAgLy8gVGhlIGFkdmFuY2VzIHdpbGwgZ2V0IGFsbCBtZXNzZWQgdXAgaWYgd2Ug
ZG8gYW55dGhpbmcgb3RoZXIgdGhhbiBiYWlsIGhlcmUuCiAgICAgICAgICAgICByZXN1bHQuY2xl
YXIoKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNTkwLDExICs1OTAsMTEgQEAgRGFzaEFycmF5
IEZvbnRDYXNjYWRlOjpkYXNoZXNGb3JJbnRlcnNlYwogfQogI2VuZGlmCiAKLWJvb2wgRm9udENh
c2NhZGU6OnByaW1hcnlGb250RGF0YUlzU3lzdGVtRm9udCgpIGNvbnN0Citib29sIEZvbnRDYXNj
YWRlOjpwcmltYXJ5Rm9udElzU3lzdGVtRm9udCgpIGNvbnN0CiB7CiAjaWYgUExBVEZPUk0oSU9T
KSB8fCBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID4gMTA5MAotICAgIGNvbnN0IGF1
dG8mIGZvbnREYXRhID0gcHJpbWFyeUZvbnREYXRhKCk7Ci0gICAgcmV0dXJuICFmb250RGF0YS5p
c1NWR0ZvbnQoKSAmJiBDVEZvbnREZXNjcmlwdG9ySXNTeXN0ZW1VSUZvbnQoYWRvcHRDRihDVEZv
bnRDb3B5Rm9udERlc2NyaXB0b3IoZm9udERhdGEucGxhdGZvcm1EYXRhKCkuY3RGb250KCkpKS5n
ZXQoKSk7CisgICAgY29uc3QgYXV0byYgZm9udCA9IHByaW1hcnlGb250KCk7CisgICAgcmV0dXJu
ICFmb250LmlzU1ZHRm9udCgpICYmIENURm9udERlc2NyaXB0b3JJc1N5c3RlbVVJRm9udChhZG9w
dENGKENURm9udENvcHlGb250RGVzY3JpcHRvcihmb250LnBsYXRmb3JtRGF0YSgpLmN0Rm9udCgp
KSkuZ2V0KCkpOwogI2Vsc2UKICAgICAvLyBTeXN0ZW0gZm9udHMgYXJlIGhpZGRlbiBieSBoYXZp
bmcgYSBuYW1lIHRoYXQgYmVnaW5zIHdpdGggYSBwZXJpb2QsIHNvIHNpbXBseSBzZWFyY2gKICAg
ICAvLyBmb3IgdGhhdCBoZXJlIHJhdGhlciB0aGFuIHRyeSB0byBrZWVwIHRoZSBsaXN0IHVwIHRv
IGRhdGUuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENv
bXBsZXhUZXh0TWFjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9tYWMvRm9udENvbXBsZXhUZXh0TWFjLmNwcAkocmV2aXNpb24gMTc4NTE1KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDb21wbGV4VGV4dE1hYy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTg0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgotCi0j
aW5jbHVkZSAiQ29tcGxleFRleHRDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiRm9udEdseXBocy5o
IgotI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
Ci0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKLSNpbmNsdWRl
ICJTaW1wbGVGb250RGF0YS5oIgotI2luY2x1ZGUgIlRleHRSdW4uaCIKLSNpbmNsdWRlIDx3dGYv
TWF0aEV4dHJhcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgRm9udENhc2NhZGU6
OmFkanVzdFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIExh
eW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Ci17Ci0gICAg
Q29tcGxleFRleHRDb250cm9sbGVyIGNvbnRyb2xsZXIodGhpcywgcnVuKTsKLSAgICBjb250cm9s
bGVyLmFkdmFuY2UoZnJvbSk7Ci0gICAgZmxvYXQgYmVmb3JlV2lkdGggPSBjb250cm9sbGVyLnJ1
bldpZHRoU29GYXIoKTsKLSAgICBjb250cm9sbGVyLmFkdmFuY2UodG8pOwotICAgIGZsb2F0IGFm
dGVyV2lkdGggPSBjb250cm9sbGVyLnJ1bldpZHRoU29GYXIoKTsKLQotICAgIGlmIChydW4ucnRs
KCkpCi0gICAgICAgIHNlbGVjdGlvblJlY3QubW92ZShjb250cm9sbGVyLnRvdGFsV2lkdGgoKSAt
IGFmdGVyV2lkdGgsIDApOwotICAgIGVsc2UKLSAgICAgICAgc2VsZWN0aW9uUmVjdC5tb3ZlKGJl
Zm9yZVdpZHRoLCAwKTsKLSAgICBzZWxlY3Rpb25SZWN0LnNldFdpZHRoKGFmdGVyV2lkdGggLSBi
ZWZvcmVXaWR0aCk7Ci19Ci0KLWZsb2F0IEZvbnRDYXNjYWRlOjpnZXRHbHlwaHNBbmRBZHZhbmNl
c0ZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgaW50IGZyb20sIGludCB0bywgR2x5
cGhCdWZmZXImIGdseXBoQnVmZmVyLCBGb3JUZXh0RW1waGFzaXNPck5vdCBmb3JUZXh0RW1waGFz
aXMpIGNvbnN0Ci17Ci0gICAgZmxvYXQgaW5pdGlhbEFkdmFuY2U7Ci0KLSAgICBDb21wbGV4VGV4
dENvbnRyb2xsZXIgY29udHJvbGxlcih0aGlzLCBydW4sIGZhbHNlLCAwLCBmb3JUZXh0RW1waGFz
aXMpOwotICAgIGNvbnRyb2xsZXIuYWR2YW5jZShmcm9tKTsKLSAgICBmbG9hdCBiZWZvcmVXaWR0
aCA9IGNvbnRyb2xsZXIucnVuV2lkdGhTb0ZhcigpOwotICAgIGNvbnRyb2xsZXIuYWR2YW5jZSh0
bywgJmdseXBoQnVmZmVyKTsKLQotICAgIGlmIChnbHlwaEJ1ZmZlci5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybiAwOwotCi0gICAgZmxvYXQgYWZ0ZXJXaWR0aCA9IGNvbnRyb2xsZXIucnVuV2lk
dGhTb0ZhcigpOwotCi0gICAgaWYgKHJ1bi5ydGwoKSkgewotICAgICAgICBpbml0aWFsQWR2YW5j
ZSA9IGNvbnRyb2xsZXIudG90YWxXaWR0aCgpICsgY29udHJvbGxlci5maW5hbFJvdW5kaW5nV2lk
dGgoKSAtIGFmdGVyV2lkdGg7Ci0gICAgICAgIGdseXBoQnVmZmVyLnJldmVyc2UoMCwgZ2x5cGhC
dWZmZXIuc2l6ZSgpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgaW5pdGlhbEFkdmFuY2UgPSBiZWZv
cmVXaWR0aDsKLQotICAgIHJldHVybiBpbml0aWFsQWR2YW5jZTsKLX0KLQotZmxvYXQgRm9udENh
c2NhZGU6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRl
eHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNv
bnN0Ci17Ci0gICAgLy8gVGhpcyBnbHlwaCBidWZmZXIgaG9sZHMgb3VyIGdseXBocyArIGFkdmFu
Y2VzICsgZm9udCBkYXRhIGZvciBlYWNoIGdseXBoLgotICAgIEdseXBoQnVmZmVyIGdseXBoQnVm
ZmVyOwotCi0gICAgZmxvYXQgc3RhcnRYID0gcG9pbnQueCgpICsgZ2V0R2x5cGhzQW5kQWR2YW5j
ZXNGb3JDb21wbGV4VGV4dChydW4sIGZyb20sIHRvLCBnbHlwaEJ1ZmZlcik7Ci0KLSAgICAvLyBX
ZSBjb3VsZG4ndCBnZW5lcmF0ZSBhbnkgZ2x5cGhzIGZvciB0aGUgcnVuLiAgR2l2ZSB1cC4KLSAg
ICBpZiAoZ2x5cGhCdWZmZXIuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8v
IERyYXcgdGhlIGdseXBoIGJ1ZmZlciBub3cgYXQgdGhlIHN0YXJ0aW5nIHBvaW50IHJldHVybmVk
IGluIHN0YXJ0WC4KLSAgICBGbG9hdFBvaW50IHN0YXJ0UG9pbnQoc3RhcnRYLCBwb2ludC55KCkp
OwotICAgIGRyYXdHbHlwaEJ1ZmZlcihjb250ZXh0LCBydW4sIGdseXBoQnVmZmVyLCBzdGFydFBv
aW50KTsKLQotICAgIHJldHVybiBzdGFydFBvaW50LngoKSAtIHN0YXJ0WDsKLX0KLQotdm9pZCBG
b250Q2FzY2FkZTo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJr
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKLXsKLSAg
ICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKLSAgICBmbG9hdCBpbml0aWFsQWR2YW5jZSA9IGdl
dEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQocnVuLCBmcm9tLCB0bywgZ2x5cGhCdWZm
ZXIsIEZvclRleHRFbXBoYXNpcyk7Ci0KLSAgICBpZiAoZ2x5cGhCdWZmZXIuaXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBkcmF3RW1waGFzaXNNYXJrcyhjb250ZXh0LCBydW4sIGds
eXBoQnVmZmVyLCBtYXJrLCBGbG9hdFBvaW50KHBvaW50LngoKSArIGluaXRpYWxBZHZhbmNlLCBw
b2ludC55KCkpKTsKLX0KLQotZmxvYXQgRm9udENhc2NhZGU6OmZsb2F0V2lkdGhGb3JDb21wbGV4
VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiog
ZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKLXsKLSAg
ICBDb21wbGV4VGV4dENvbnRyb2xsZXIgY29udHJvbGxlcih0aGlzLCBydW4sIHRydWUsIGZhbGxi
YWNrRm9udHMpOwotICAgIGlmIChnbHlwaE92ZXJmbG93KSB7Ci0gICAgICAgIGdseXBoT3ZlcmZs
b3ctPnRvcCA9IHN0ZDo6bWF4PGludD4oZ2x5cGhPdmVyZmxvdy0+dG9wLCBjZWlsZigtY29udHJv
bGxlci5taW5HbHlwaEJvdW5kaW5nQm94WSgpKSAtIChnbHlwaE92ZXJmbG93LT5jb21wdXRlQm91
bmRzID8gMCA6IGZvbnRNZXRyaWNzKCkuYXNjZW50KCkpKTsKLSAgICAgICAgZ2x5cGhPdmVyZmxv
dy0+Ym90dG9tID0gc3RkOjptYXg8aW50PihnbHlwaE92ZXJmbG93LT5ib3R0b20sIGNlaWxmKGNv
bnRyb2xsZXIubWF4R2x5cGhCb3VuZGluZ0JveFkoKSkgLSAoZ2x5cGhPdmVyZmxvdy0+Y29tcHV0
ZUJvdW5kcyA/IDAgOiBmb250TWV0cmljcygpLmRlc2NlbnQoKSkpOwotICAgICAgICBnbHlwaE92
ZXJmbG93LT5sZWZ0ID0gc3RkOjptYXg8aW50PigwLCBjZWlsZigtY29udHJvbGxlci5taW5HbHlw
aEJvdW5kaW5nQm94WCgpKSk7Ci0gICAgICAgIGdseXBoT3ZlcmZsb3ctPnJpZ2h0ID0gc3RkOjpt
YXg8aW50PigwLCBjZWlsZihjb250cm9sbGVyLm1heEdseXBoQm91bmRpbmdCb3hYKCkgLSBjb250
cm9sbGVyLnRvdGFsV2lkdGgoKSkpOwotICAgIH0KLSAgICByZXR1cm4gY29udHJvbGxlci50b3Rh
bFdpZHRoKCk7Ci19Ci0KLWludCBGb250Q2FzY2FkZTo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21w
bGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHgsIGJvb2wgaW5jbHVkZVBhcnRpYWxH
bHlwaHMpIGNvbnN0Ci17Ci0gICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRyb2xsZXIodGhp
cywgcnVuKTsKLSAgICByZXR1cm4gY29udHJvbGxlci5vZmZzZXRGb3JQb3NpdGlvbih4LCBpbmNs
dWRlUGFydGlhbEdseXBocyk7Ci19Ci0KLWNvbnN0IFNpbXBsZUZvbnREYXRhKiBGb250Q2FzY2Fk
ZTo6Zm9udERhdGFGb3JDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBVQ2hhciogY2hh
cmFjdGVycywgc2l6ZV90IGxlbmd0aCwgRm9udERhdGFWYXJpYW50IHZhcmlhbnQpIGNvbnN0Ci17
Ci0gICAgVUNoYXIzMiBiYXNlQ2hhcmFjdGVyOwotICAgIHNpemVfdCBiYXNlQ2hhcmFjdGVyTGVu
Z3RoID0gMDsKLSAgICBVMTZfTkVYVChjaGFyYWN0ZXJzLCBiYXNlQ2hhcmFjdGVyTGVuZ3RoLCBs
ZW5ndGgsIGJhc2VDaGFyYWN0ZXIpOwotCi0gICAgR2x5cGhEYXRhIGJhc2VDaGFyYWN0ZXJHbHlw
aERhdGEgPSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIoYmFzZUNoYXJhY3RlciwgZmFsc2UsIHZhcmlh
bnQpOwotCi0gICAgaWYgKCFiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmdseXBoKQotICAgICAgICBy
ZXR1cm4gMDsKLQotICAgIGlmIChsZW5ndGggPT0gYmFzZUNoYXJhY3Rlckxlbmd0aCkKLSAgICAg
ICAgcmV0dXJuIGJhc2VDaGFyYWN0ZXJHbHlwaERhdGEuZm9udERhdGE7Ci0KLSAgICBib29sIHRy
aWVkQmFzZUNoYXJhY3RlckZvbnREYXRhID0gZmFsc2U7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyAhZmFsbGJhY2tSYW5nZXNBdChpKS5pc051bGwoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0
IFNpbXBsZUZvbnREYXRhKiBzaW1wbGVGb250RGF0YSA9IGZhbGxiYWNrUmFuZ2VzQXQoaSkuZm9u
dERhdGFGb3JDaGFyYWN0ZXIoYmFzZUNoYXJhY3Rlcik7Ci0gICAgICAgIGlmICghc2ltcGxlRm9u
dERhdGEpCi0gICAgICAgICAgICBjb250aW51ZTsKLSNpZiBQTEFURk9STShJT1MpCi0gICAgICAg
IGlmIChiYXNlQ2hhcmFjdGVyID49IDB4MDYwMCAmJiBiYXNlQ2hhcmFjdGVyIDw9IDB4MDZmZiAm
JiBzaW1wbGVGb250RGF0YS0+c2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKCkpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLSNlbmRpZgotICAgICAgICBpZiAodmFyaWFudCA9PSBOb3JtYWxWYXJpYW50
KSB7Ci0gICAgICAgICAgICBpZiAoc2ltcGxlRm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm9yaWVu
dGF0aW9uKCkgPT0gVmVydGljYWwpIHsKLSAgICAgICAgICAgICAgICBpZiAoaXNDSktJZGVvZ3Jh
cGhPclN5bWJvbChiYXNlQ2hhcmFjdGVyKSAmJiAhc2ltcGxlRm9udERhdGEtPmhhc1ZlcnRpY2Fs
R2x5cGhzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyaWFudCA9IEJyb2tlbklkZW9ncmFw
aFZhcmlhbnQ7Ci0gICAgICAgICAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gc2ltcGxlRm9u
dERhdGEtPmJyb2tlbklkZW9ncmFwaEZvbnREYXRhKCkuZ2V0KCk7Ci0gICAgICAgICAgICAgICAg
fSBlbHNlIGlmIChtX2ZvbnREZXNjcmlwdGlvbi5ub25DSktHbHlwaE9yaWVudGF0aW9uKCkgPT0g
Tm9uQ0pLR2x5cGhPcmllbnRhdGlvblZlcnRpY2FsUmlnaHQpIHsKLSAgICAgICAgICAgICAgICAg
ICAgU2ltcGxlRm9udERhdGEqIHZlcnRpY2FsUmlnaHRGb250RGF0YSA9IHNpbXBsZUZvbnREYXRh
LT52ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250RGF0YSgpLmdldCgpOwotICAgICAgICAgICAg
ICAgICAgICBHbHlwaCB2ZXJ0aWNhbFJpZ2h0R2x5cGggPSB2ZXJ0aWNhbFJpZ2h0Rm9udERhdGEt
PmdseXBoRm9yQ2hhcmFjdGVyKGJhc2VDaGFyYWN0ZXIpOwotICAgICAgICAgICAgICAgICAgICBp
ZiAodmVydGljYWxSaWdodEdseXBoID09IGJhc2VDaGFyYWN0ZXJHbHlwaERhdGEuZ2x5cGgpCi0g
ICAgICAgICAgICAgICAgICAgICAgICBzaW1wbGVGb250RGF0YSA9IHZlcnRpY2FsUmlnaHRGb250
RGF0YTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBTaW1w
bGVGb250RGF0YSogdXByaWdodEZvbnREYXRhID0gc2ltcGxlRm9udERhdGEtPnVwcmlnaHRPcmll
bnRhdGlvbkZvbnREYXRhKCkuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIEdseXBoIHVwcmln
aHRHbHlwaCA9IHVwcmlnaHRGb250RGF0YS0+Z2x5cGhGb3JDaGFyYWN0ZXIoYmFzZUNoYXJhY3Rl
cik7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh1cHJpZ2h0R2x5cGggIT0gYmFzZUNoYXJhY3Rl
ckdseXBoRGF0YS5nbHlwaCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNpbXBsZUZvbnREYXRh
ID0gdXByaWdodEZvbnREYXRhOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChjb25zdCBTaW1wbGVGb250RGF0YSogdmFy
aWFudEZvbnREYXRhID0gc2ltcGxlRm9udERhdGEtPnZhcmlhbnRGb250RGF0YShtX2ZvbnREZXNj
cmlwdGlvbiwgdmFyaWFudCkuZ2V0KCkpCi0gICAgICAgICAgICAgICAgc2ltcGxlRm9udERhdGEg
PSB2YXJpYW50Rm9udERhdGE7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc2ltcGxlRm9udERh
dGEgPT0gYmFzZUNoYXJhY3RlckdseXBoRGF0YS5mb250RGF0YSkKLSAgICAgICAgICAgIHRyaWVk
QmFzZUNoYXJhY3RlckZvbnREYXRhID0gdHJ1ZTsKLQotICAgICAgICBpZiAoc2ltcGxlRm9udERh
dGEtPmNhblJlbmRlckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNoYXJhY3RlcnMsIGxlbmd0
aCkpCi0gICAgICAgICAgICByZXR1cm4gc2ltcGxlRm9udERhdGE7Ci0gICAgfQotCi0gICAgaWYg
KCF0cmllZEJhc2VDaGFyYWN0ZXJGb250RGF0YSAmJiBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmZv
bnREYXRhICYmIGJhc2VDaGFyYWN0ZXJHbHlwaERhdGEuZm9udERhdGEtPmNhblJlbmRlckNvbWJp
bmluZ0NoYXJhY3RlclNlcXVlbmNlKGNoYXJhY3RlcnMsIGxlbmd0aCkpCi0gICAgICAgIHJldHVy
biBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmZvbnREYXRhOwotCi0gICAgcmV0dXJuIFNpbXBsZUZv
bnREYXRhOjpzeXN0ZW1GYWxsYmFjaygpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENvcmVUZXh0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9u
dENvcmVUZXh0LmNwcAkocmV2aXNpb24gMTc4NDk2KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFDb3JlVGV4dC5jcHA6MTc4NDk2KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDb3JlVGV4dC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwg
MjAwNiwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKKworI2lmICFQTEFURk9STShJT1MpCisj
aW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CisjZWxz
ZQorI2luY2x1ZGUgPENvcmVUZXh0L0NvcmVUZXh0Lmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitDRkRpY3Rpb25hcnlSZWYgU2ltcGxlRm9udERhdGE6OmdldENGU3RyaW5nQXR0
cmlidXRlcyhUeXBlc2V0dGluZ0ZlYXR1cmVzIHR5cGVzZXR0aW5nRmVhdHVyZXMsIEZvbnRPcmll
bnRhdGlvbiBvcmllbnRhdGlvbikgY29uc3QKK3sKKyAgICB1bnNpZ25lZCBrZXkgPSB0eXBlc2V0
dGluZ0ZlYXR1cmVzICsgMTsKKyAgICBIYXNoTWFwPHVuc2lnbmVkLCBSZXRhaW5QdHI8Q0ZEaWN0
aW9uYXJ5UmVmPj46OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSBtX0NGU3RyaW5nQXR0cmlidXRlcy5h
ZGQoa2V5LCBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPigpKTsKKyAgICBSZXRhaW5QdHI8Q0ZE
aWN0aW9uYXJ5UmVmPiYgYXR0cmlidXRlc0RpY3Rpb25hcnkgPSBhZGRSZXN1bHQuaXRlcmF0b3It
PnZhbHVlOworICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgIHJldHVybiBh
dHRyaWJ1dGVzRGljdGlvbmFyeS5nZXQoKTsKKworICAgIGF0dHJpYnV0ZXNEaWN0aW9uYXJ5ID0g
YWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDQs
ICZrQ0ZDb3B5U3RyaW5nRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5
VmFsdWVDYWxsQmFja3MpKTsKKyAgICBDRk11dGFibGVEaWN0aW9uYXJ5UmVmIG11dGFibGVBdHRy
aWJ1dGVzID0gKENGTXV0YWJsZURpY3Rpb25hcnlSZWYpYXR0cmlidXRlc0RpY3Rpb25hcnkuZ2V0
KCk7CisKKyAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShtdXRhYmxlQXR0cmlidXRlcywga0NURm9u
dEF0dHJpYnV0ZU5hbWUsIHBsYXRmb3JtRGF0YSgpLmN0Rm9udCgpKTsKKworICAgIGlmICghKHR5
cGVzZXR0aW5nRmVhdHVyZXMgJiBLZXJuaW5nKSkgeworICAgICAgICBjb25zdCBmbG9hdCB6ZXJv
ID0gMDsKKyAgICAgICAgc3RhdGljIENGTnVtYmVyUmVmIHplcm9LZXJuaW5nVmFsdWUgPSBDRk51
bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJGbG9hdFR5cGUsICZ6ZXJv
KTsKKyAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUobXV0YWJsZUF0dHJpYnV0ZXMsIGtDVEtl
cm5BdHRyaWJ1dGVOYW1lLCB6ZXJvS2VybmluZ1ZhbHVlKTsKKyAgICB9CisKKyAgICBib29sIGFs
bG93TGlnYXR1cmVzID0gKG9yaWVudGF0aW9uID09IEhvcml6b250YWwgJiYgcGxhdGZvcm1EYXRh
KCkuYWxsb3dzTGlnYXR1cmVzKCkpIHx8ICh0eXBlc2V0dGluZ0ZlYXR1cmVzICYgTGlnYXR1cmVz
KTsKKyAgICBpZiAoIWFsbG93TGlnYXR1cmVzKSB7CisgICAgICAgIGNvbnN0IGludCB6ZXJvID0g
MDsKKyAgICAgICAgc3RhdGljIENGTnVtYmVyUmVmIGVzc2VudGlhbExpZ2F0dXJlc1ZhbHVlID0g
Q0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVySW50VHlwZSwgJnpl
cm8pOworICAgICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShtdXRhYmxlQXR0cmlidXRlcywga0NU
TGlnYXR1cmVBdHRyaWJ1dGVOYW1lLCBlc3NlbnRpYWxMaWdhdHVyZXNWYWx1ZSk7CisgICAgfQor
CisgICAgaWYgKG9yaWVudGF0aW9uID09IFZlcnRpY2FsKQorICAgICAgICBDRkRpY3Rpb25hcnlT
ZXRWYWx1ZShtdXRhYmxlQXR0cmlidXRlcywga0NUVmVydGljYWxGb3Jtc0F0dHJpYnV0ZU5hbWUs
IGtDRkJvb2xlYW5UcnVlKTsKKworICAgIHJldHVybiBhdHRyaWJ1dGVzRGljdGlvbmFyeS5nZXQo
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDb3JlVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDb3JlVGV4dC5jcHAJKHdvcmtpbmcg
Y29weSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q29yZVRl
eHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiAgKi8KIAogI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisjaW5jbHVkZSAiRm9udC5o
IgogCiAjaWYgIVBMQVRGT1JNKElPUykKICNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0Fw
cGxpY2F0aW9uU2VydmljZXMuaD4KQEAgLTM1LDcgKzM1LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1DRkRpY3Rpb25hcnlSZWYgU2ltcGxlRm9udERhdGE6OmdldENGU3RyaW5nQXR0cmli
dXRlcyhUeXBlc2V0dGluZ0ZlYXR1cmVzIHR5cGVzZXR0aW5nRmVhdHVyZXMsIEZvbnRPcmllbnRh
dGlvbiBvcmllbnRhdGlvbikgY29uc3QKK0NGRGljdGlvbmFyeVJlZiBGb250OjpnZXRDRlN0cmlu
Z0F0dHJpYnV0ZXMoVHlwZXNldHRpbmdGZWF0dXJlcyB0eXBlc2V0dGluZ0ZlYXR1cmVzLCBGb250
T3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0CiB7CiAgICAgdW5zaWduZWQga2V5ID0gdHlw
ZXNldHRpbmdGZWF0dXJlcyArIDE7CiAgICAgSGFzaE1hcDx1bnNpZ25lZCwgUmV0YWluUHRyPENG
RGljdGlvbmFyeVJlZj4+OjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gbV9DRlN0cmluZ0F0dHJpYnV0
ZXMuYWRkKGtleSwgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4oKSk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udE1hYy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udE1hYy5tbQkocmV2aXNpb24g
MTc4NTEwKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxl
Rm9udERhdGFNYWMubW06MTc4NTEwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL0ZvbnRNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0ODEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YK
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJTaW1wbGVGb250RGF0YS5o
IgorCisjaW1wb3J0ICJCbG9ja0V4Y2VwdGlvbnMuaCIKKyNpbXBvcnQgIkNvbG9yLmgiCisjaW1w
b3J0ICJDb3JlR3JhcGhpY3NTUEkuaCIKKyNpbXBvcnQgIkNvcmVUZXh0U1BJLmgiCisjaW1wb3J0
ICJGbG9hdFJlY3QuaCIKKyNpbXBvcnQgIkZvbnRDYWNoZS5oIgorI2ltcG9ydCAiRm9udENhc2Nh
ZGUuaCIKKyNpbXBvcnQgIkZvbnREZXNjcmlwdGlvbi5oIgorI2ltcG9ydCAiU2hhcmVkQnVmZmVy
LmgiCisjaW1wb3J0ICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCisjaWYgVVNFKEFQUEtJVCkK
KyNpbXBvcnQgPEFwcEtpdC9BcHBLaXQuaD4KKyNpbXBvcnQgPEFwcGxpY2F0aW9uU2VydmljZXMv
QXBwbGljYXRpb25TZXJ2aWNlcy5oPgorI2Vsc2UKKyNpbXBvcnQgPENvcmVUZXh0L0NvcmVUZXh0
Lmg+CisjZW5kaWYKKyNpbXBvcnQgPGZsb2F0Lmg+CisjaW1wb3J0IDx1bmljb2RlL3VjaGFyLmg+
CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL1N0ZExpYkV4dHJhcy5o
PgorI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorCisjaWYgIVBMQVRGT1JNKElPUykKK0BpbnRl
cmZhY2UgTlNGb250IChXZWJBcHBLaXRTZWNyZXRBUEkpCistIChCT09MKV9pc0Zha2VGaXhlZFBp
dGNoOworQGVuZAorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmIFVTRShBUFBL
SVQpCitzdGF0aWMgYm9vbCBmb250SGFzVmVydGljYWxHbHlwaHMoQ1RGb250UmVmIGN0Rm9udCkK
K3sKKyAgICAvLyBUaGUgY2hlY2sgZG9lc24ndCBsb29rIG5lYXQgYnV0IHRoaXMgaXMgd2hhdCBB
cHBLaXQgZG9lcyBmb3IgdmVydGljYWwgd3JpdGluZy4uLgorICAgIFJldGFpblB0cjxDRkFycmF5
UmVmPiB0YWJsZVRhZ3MgPSBhZG9wdENGKENURm9udENvcHlBdmFpbGFibGVUYWJsZXMoY3RGb250
LCBrQ1RGb250VGFibGVPcHRpb25Ob09wdGlvbnMpKTsKKyAgICBDRkluZGV4IG51bVRhYmxlcyA9
IENGQXJyYXlHZXRDb3VudCh0YWJsZVRhZ3MuZ2V0KCkpOworICAgIGZvciAoQ0ZJbmRleCBpbmRl
eCA9IDA7IGluZGV4IDwgbnVtVGFibGVzOyArK2luZGV4KSB7CisgICAgICAgIENURm9udFRhYmxl
VGFnIHRhZyA9IChDVEZvbnRUYWJsZVRhZykodWludHB0cl90KUNGQXJyYXlHZXRWYWx1ZUF0SW5k
ZXgodGFibGVUYWdzLmdldCgpLCBpbmRleCk7CisgICAgICAgIGlmICh0YWcgPT0ga0NURm9udFRh
YmxlVmhlYSB8fCB0YWcgPT0ga0NURm9udFRhYmxlVk9SRykKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBib29sIGluaXRGb250
RGF0YShTaW1wbGVGb250RGF0YSogZm9udERhdGEpCit7CisgICAgaWYgKCFmb250RGF0YS0+cGxh
dGZvcm1EYXRhKCkuY2dGb250KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVy
biB0cnVlOworfQorCitzdGF0aWMgTlNTdHJpbmcgKndlYkZhbGxiYWNrRm9udEZhbWlseSh2b2lk
KQoreworICAgIHN0YXRpYyBOU1N0cmluZyAqd2ViRmFsbGJhY2tGb250RmFtaWx5ID0gW1tbTlNG
b250IHN5c3RlbUZvbnRPZlNpemU6MTYuMGZdIGZhbWlseU5hbWVdIHJldGFpbl07CisgICAgcmV0
dXJuIHdlYkZhbGxiYWNrRm9udEZhbWlseTsKK30KKworY29uc3QgU2ltcGxlRm9udERhdGEqIFNp
bXBsZUZvbnREYXRhOjpjb21wb3NpdGVGb250UmVmZXJlbmNlRm9udERhdGEoTlNGb250ICprZXkp
IGNvbnN0Cit7CisgICAgaWYgKCFrZXkgfHwgQ0ZFcXVhbChhZG9wdENGKENURm9udENvcHlQb3N0
U2NyaXB0TmFtZShDVEZvbnRSZWYoa2V5KSkpLmdldCgpLCBDRlNUUigiTGFzdFJlc29ydCIpKSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQor
ICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8RGVyaXZlZEZvbnRE
YXRhPihpc0N1c3RvbUZvbnQoKSk7CisKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fZGVyaXZlZEZv
bnREYXRhLT5jb21wb3NpdGVGb250UmVmZXJlbmNlcy5hZGQoa2V5LCBudWxscHRyKTsKKyAgICBp
ZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKKyAgICAgICAgYm9vbCBpc1VzaW5nUHJpbnRlckZv
bnQgPSBwbGF0Zm9ybURhdGEoKS5pc1ByaW50ZXJGb250KCk7CisgICAgICAgIE5TRm9udCAqc3Vi
c3RpdHV0ZUZvbnQgPSBpc1VzaW5nUHJpbnRlckZvbnQgPyBba2V5IHByaW50ZXJGb250XSA6IFtr
ZXkgc2NyZWVuRm9udF07CisKKyAgICAgICAgQ1RGb250U3ltYm9saWNUcmFpdHMgdHJhaXRzID0g
Q1RGb250R2V0U3ltYm9saWNUcmFpdHMoKENURm9udFJlZilzdWJzdGl0dXRlRm9udCk7CisgICAg
ICAgIGJvb2wgc3ludGhldGljQm9sZCA9IHBsYXRmb3JtRGF0YSgpLnN5bnRoZXRpY0JvbGQoKSAm
JiAhKHRyYWl0cyAmIGtDVEZvbnRCb2xkVHJhaXQpOworICAgICAgICBib29sIHN5bnRoZXRpY09i
bGlxdWUgPSBwbGF0Zm9ybURhdGEoKS5zeW50aGV0aWNPYmxpcXVlKCkgJiYgISh0cmFpdHMgJiBr
Q1RGb250SXRhbGljVHJhaXQpOworCisgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEgc3Vic3RpdHV0
ZVBsYXRmb3JtKHN1YnN0aXR1dGVGb250LCBwbGF0Zm9ybURhdGEoKS5zaXplKCksIGlzVXNpbmdQ
cmludGVyRm9udCwgc3ludGhldGljQm9sZCwgc3ludGhldGljT2JsaXF1ZSwgcGxhdGZvcm1EYXRh
KCkub3JpZW50YXRpb24oKSwgcGxhdGZvcm1EYXRhKCkud2lkdGhWYXJpYW50KCkpOworICAgICAg
ICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gU2ltcGxlRm9udERhdGE6OmNyZWF0ZShzdWJz
dGl0dXRlUGxhdGZvcm0sIGlzQ3VzdG9tRm9udCgpKTsKKyAgICB9CisgICAgcmV0dXJuIGFkZFJl
c3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7Cit9CisKK3ZvaWQgU2ltcGxlRm9udERhdGE6OnBs
YXRmb3JtSW5pdCgpCit7CisgICAgbV9zeW50aGV0aWNCb2xkT2Zmc2V0ID0gbV9wbGF0Zm9ybURh
dGEubV9zeW50aGV0aWNCb2xkID8gMS4wZiA6IDAuZjsKKworICAgIGJvb2wgZmFpbGVkU2V0dXAg
PSBmYWxzZTsKKyAgICBpZiAoIWluaXRGb250RGF0YSh0aGlzKSkgeworICAgICAgICAvLyBBY2sh
IFNvbWV0aGluZyB2ZXJ5IGJhZCBoYXBwZW5lZCwgbGlrZSBhIGNvcnJ1cHQgZm9udC4KKyAgICAg
ICAgLy8gVHJ5IGxvb2tpbmcgZm9yIGFuIGFsdGVybmF0ZSAnYmFzZScgZm9udCBmb3IgdGhpcyBy
ZW5kZXJlci4KKworICAgICAgICAvLyBTcGVjaWFsIGNhc2UgaGFjayB0byB1c2UgIlRpbWVzIE5l
dyBSb21hbiIgaW4gcGxhY2Ugb2YgIlRpbWVzIi4KKyAgICAgICAgLy8gIlRpbWVzIFJPIiBpcyBh
IGNvbW1vbiBmb250IHdob3NlIGZhbWlseSBuYW1lIGlzICJUaW1lcyIuCisgICAgICAgIC8vIEl0
IG92ZXJyaWRlcyB0aGUgbm9ybWFsICJUaW1lcyIgZmFtaWx5IGZvbnQuCisgICAgICAgIC8vIEl0
IGFsc28gYXBwZWFycyB0byBoYXZlIGEgY29ycnVwdCByZWd1bGFyIHZhcmlhbnQuCisgICAgICAg
IE5TU3RyaW5nICpmYWxsYmFja0ZvbnRGYW1pbHk7CisgICAgICAgIGlmIChbW21fcGxhdGZvcm1E
YXRhLm5zRm9udCgpIGZhbWlseU5hbWVdIGlzRXF1YWw6QCJUaW1lcyJdKQorICAgICAgICAgICAg
ZmFsbGJhY2tGb250RmFtaWx5ID0gQCJUaW1lcyBOZXcgUm9tYW4iOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBmYWxsYmFja0ZvbnRGYW1pbHkgPSB3ZWJGYWxsYmFja0ZvbnRGYW1pbHkoKTsK
KyAgICAgICAgCisgICAgICAgIC8vIFRyeSBzZXR0aW5nIHVwIHRoZSBhbHRlcm5hdGUgZm9udC4K
KyAgICAgICAgLy8gVGhpcyBpcyBhIGxhc3QgZGl0Y2ggZWZmb3J0IHRvIHVzZSBhIHN1YnN0aXR1
dGUgZm9udCB3aGVuIHNvbWV0aGluZyBoYXMgZ29uZSB3cm9uZy4KKyNpZiAhRVJST1JfRElTQUJM
RUQKKyAgICAgICAgUmV0YWluUHRyPE5TRm9udD4gaW5pdGlhbEZvbnQgPSBtX3BsYXRmb3JtRGF0
YS5uc0ZvbnQoKTsKKyNlbmRpZgorICAgICAgICBpZiAobV9wbGF0Zm9ybURhdGEuZm9udCgpKQor
ICAgICAgICAgICAgbV9wbGF0Zm9ybURhdGEuc2V0TlNGb250KFtbTlNGb250TWFuYWdlciBzaGFy
ZWRGb250TWFuYWdlcl0gY29udmVydEZvbnQ6bV9wbGF0Zm9ybURhdGEubnNGb250KCkgdG9GYW1p
bHk6ZmFsbGJhY2tGb250RmFtaWx5XSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fcGxh
dGZvcm1EYXRhLnNldE5TRm9udChbTlNGb250IGZvbnRXaXRoTmFtZTpmYWxsYmFja0ZvbnRGYW1p
bHkgc2l6ZTptX3BsYXRmb3JtRGF0YS5zaXplKCldKTsKKyAgICAgICAgaWYgKCFpbml0Rm9udERh
dGEodGhpcykpIHsKKyAgICAgICAgICAgIGlmIChbZmFsbGJhY2tGb250RmFtaWx5IGlzRXF1YWw6
QCJUaW1lcyBOZXcgUm9tYW4iXSkgeworICAgICAgICAgICAgICAgIC8vIE9LLCBjb3VsZG4ndCBz
ZXR1cCBUaW1lcyBOZXcgUm9tYW4gYXMgYW4gYWx0ZXJuYXRlIHRvIFRpbWVzLCBmYWxsYmFjawor
ICAgICAgICAgICAgICAgIC8vIG9uIHRoZSBzeXN0ZW0gZm9udC4gIElmIHRoaXMgZmFpbHMgd2Ug
aGF2ZSBubyBhbHRlcm5hdGl2ZSBsZWZ0LgorICAgICAgICAgICAgICAgIG1fcGxhdGZvcm1EYXRh
LnNldE5TRm9udChbW05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJdIGNvbnZlcnRGb250
Om1fcGxhdGZvcm1EYXRhLm5zRm9udCgpIHRvRmFtaWx5OndlYkZhbGxiYWNrRm9udEZhbWlseSgp
XSk7CisgICAgICAgICAgICAgICAgaWYgKCFpbml0Rm9udERhdGEodGhpcykpIHsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gV2UgdHJpZWQsIFRpbWVzLCBUaW1lcyBOZXcgUm9tYW4sIGFuZCB0aGUg
c3lzdGVtIGZvbnQuIE5vIGpveS4gV2UgaGF2ZSB0byBnaXZlIHVwLgorICAgICAgICAgICAgICAg
ICAgICBMT0dfRVJST1IoInVuYWJsZSB0byBpbml0aWFsaXplIHdpdGggZm9udCAlQCIsIGluaXRp
YWxGb250LmdldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgZmFpbGVkU2V0dXAgPSB0cnVlOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
Ly8gV2UgdHJpZWQgdGhlIHJlcXVlc3RlZCBmb250IGFuZCB0aGUgc3lzdGVtIGZvbnQuIE5vIGpv
eS4gV2UgaGF2ZSB0byBnaXZlIHVwLgorICAgICAgICAgICAgICAgIExPR19FUlJPUigidW5hYmxl
IHRvIGluaXRpYWxpemUgd2l0aCBmb250ICVAIiwgaW5pdGlhbEZvbnQuZ2V0KCkpOworICAgICAg
ICAgICAgICAgIGZhaWxlZFNldHVwID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIC8vIFJlcG9ydCB0aGUgcHJvYmxlbS4KKyAgICAgICAgTE9HX0VSUk9SKCJDb3Jy
dXB0IGZvbnQgZGV0ZWN0ZWQsIHVzaW5nICVAIGluIHBsYWNlIG9mICVALiIsCisgICAgICAgICAg
ICBbbV9wbGF0Zm9ybURhdGEubnNGb250KCkgZmFtaWx5TmFtZV0sIFtpbml0aWFsRm9udC5nZXQo
KSBmYW1pbHlOYW1lXSk7CisgICAgfQorCisgICAgLy8gSWYgYWxsIGVsc2UgZmFpbHMsIHRyeSB0
byBzZXQgdXAgdXNpbmcgdGhlIHN5c3RlbSBmb250LgorICAgIC8vIFRoaXMgaXMgcHJvYmFibHkg
YmVjYXVzZSBUaW1lcyBhbmQgVGltZXMgTmV3IFJvbWFuIGFyZSBib3RoIHVuYXZhaWxhYmxlLgor
ICAgIGlmIChmYWlsZWRTZXR1cCkgeworICAgICAgICBtX3BsYXRmb3JtRGF0YS5zZXROU0ZvbnQo
W05TRm9udCBzeXN0ZW1Gb250T2ZTaXplOlttX3BsYXRmb3JtRGF0YS5uc0ZvbnQoKSBwb2ludFNp
emVdXSk7CisgICAgICAgIExPR19FUlJPUigiZmFpbGVkIHRvIHNldCB1cCBmb250LCB1c2luZyBz
eXN0ZW0gZm9udCAlcyIsIG1fcGxhdGZvcm1EYXRhLmZvbnQoKSk7CisgICAgICAgIGluaXRGb250
RGF0YSh0aGlzKTsKKyAgICB9CisKKyNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVE
ID09IDEwOTAKKyAgICAvLyBXb3JrIGFyb3VuZCA8cmRhcjovL3Byb2JsZW0vMTk0MzM0OTA+Cisg
ICAgQ0dHbHlwaCBkdW1teUdseXBoc1tdID0gezAsIDB9OworICAgIENHU2l6ZSBkdW1teVNpemVb
XSA9IHtDR1NpemVNYWtlKDAsIDApLCBDR1NpemVNYWtlKDAsIDApfTsKKyAgICBDVEZvbnRUcmFu
c2Zvcm1HbHlwaHMobV9wbGF0Zm9ybURhdGEuY3RGb250KCksIGR1bW15R2x5cGhzLCBkdW1teVNp
emUsIDIsIGtDVEZvbnRUcmFuc2Zvcm1BcHBseVBvc2l0aW9uaW5nIHwga0NURm9udFRyYW5zZm9y
bUFwcGx5U2hhcGluZyk7CisjZW5kaWYKKyAgICAKKyAgICBpbnQgaUFzY2VudDsKKyAgICBpbnQg
aURlc2NlbnQ7CisgICAgaW50IGlDYXBIZWlnaHQ7CisgICAgaW50IGlMaW5lR2FwOworICAgIHVu
c2lnbmVkIHVuaXRzUGVyRW07CisgICAgaUFzY2VudCA9IENHRm9udEdldEFzY2VudChtX3BsYXRm
b3JtRGF0YS5jZ0ZvbnQoKSk7CisgICAgLy8gU29tZSBmb250cyBlcnJvbmVvdXNseSBzcGVjaWZ5
IGEgcG9zaXRpdmUgZGVzY2VuZGVyIHZhbHVlLiBXZSBmb2xsb3cgQ29yZSBUZXh0IGluIGFzc3Vt
aW5nIHRoYXQKKyAgICAvLyBzdWNoIGZvbnRzIG1lYW50IHRoZSBzYW1lIGRpc3RhbmNlLCBidXQg
aW4gdGhlIHJldmVyc2UgZGlyZWN0aW9uLgorICAgIGlEZXNjZW50ID0gLWFicyhDR0ZvbnRHZXRE
ZXNjZW50KG1fcGxhdGZvcm1EYXRhLmNnRm9udCgpKSk7CisgICAgaUNhcEhlaWdodCA9IENHRm9u
dEdldENhcEhlaWdodChtX3BsYXRmb3JtRGF0YS5jZ0ZvbnQoKSk7CisgICAgaUxpbmVHYXAgPSBD
R0ZvbnRHZXRMZWFkaW5nKG1fcGxhdGZvcm1EYXRhLmNnRm9udCgpKTsKKyAgICB1bml0c1BlckVt
ID0gQ0dGb250R2V0VW5pdHNQZXJFbShtX3BsYXRmb3JtRGF0YS5jZ0ZvbnQoKSk7CisKKyAgICBm
bG9hdCBwb2ludFNpemUgPSBtX3BsYXRmb3JtRGF0YS5tX3NpemU7CisgICAgZmxvYXQgYXNjZW50
ID0gc2NhbGVFbVRvVW5pdHMoaUFzY2VudCwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemU7CisgICAg
ZmxvYXQgZGVzY2VudCA9IC1zY2FsZUVtVG9Vbml0cyhpRGVzY2VudCwgdW5pdHNQZXJFbSkgKiBw
b2ludFNpemU7CisgICAgZmxvYXQgY2FwSGVpZ2h0ID0gc2NhbGVFbVRvVW5pdHMoaUNhcEhlaWdo
dCwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemU7CisgICAgCisgICAgZmxvYXQgbGluZUdhcCA9IHNj
YWxlRW1Ub1VuaXRzKGlMaW5lR2FwLCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZTsKKworICAgIC8v
IFdlIG5lZWQgdG8gYWRqdXN0IFRpbWVzLCBIZWx2ZXRpY2EsIGFuZCBDb3VyaWVyIHRvIGNsb3Nl
bHkgbWF0Y2ggdGhlCisgICAgLy8gdmVydGljYWwgbWV0cmljcyBvZiB0aGVpciBNaWNyb3NvZnQg
Y291bnRlcnBhcnRzIHRoYXQgYXJlIHRoZSBkZSBmYWN0bworICAgIC8vIHdlYiBzdGFuZGFyZC4g
VGhlIEFwcEtpdCBhZGp1c3RtZW50IG9mIDIwJSBpcyB0b28gYmlnIGFuZCBpcworICAgIC8vIGlu
Y29ycmVjdGx5IGFkZGVkIHRvIGxpbmUgc3BhY2luZywgc28gd2UgdXNlIGEgMTUlIGFkanVzdG1l
bnQgaW5zdGVhZAorICAgIC8vIGFuZCBhZGQgaXQgdG8gdGhlIGFzY2VudC4KKyAgICBOU1N0cmlu
ZyAqZmFtaWx5TmFtZSA9IFttX3BsYXRmb3JtRGF0YS5uc0ZvbnQoKSBmYW1pbHlOYW1lXTsKKyAg
ICBpZiAoW2ZhbWlseU5hbWUgaXNFcXVhbFRvU3RyaW5nOkAiVGltZXMiXSB8fCBbZmFtaWx5TmFt
ZSBpc0VxdWFsVG9TdHJpbmc6QCJIZWx2ZXRpY2EiXSB8fCBbZmFtaWx5TmFtZSBpc0VxdWFsVG9T
dHJpbmc6QCJDb3VyaWVyIl0pCisgICAgICAgIGFzY2VudCArPSBmbG9vcmYoKChhc2NlbnQgKyBk
ZXNjZW50KSAqIDAuMTVmKSArIDAuNWYpOworCisgICAgLy8gQ29tcHV0ZSBhbmQgc3RvcmUgbGlu
ZSBzcGFjaW5nLCBiZWZvcmUgdGhlIGxpbmUgbWV0cmljcyBoYWNrcyBhcmUgYXBwbGllZC4KKyAg
ICBtX2ZvbnRNZXRyaWNzLnNldExpbmVTcGFjaW5nKGxyb3VuZGYoYXNjZW50KSArIGxyb3VuZGYo
ZGVzY2VudCkgKyBscm91bmRmKGxpbmVHYXApKTsKKworICAgIC8vIEhhY2sgSGlyYWdpbm8gbGlu
ZSBtZXRyaWNzIHRvIGFsbG93IHJvb20gZm9yIG1hcmtlZCB0ZXh0IHVuZGVybGluZXMuCisgICAg
Ly8gPHJkYXI6Ly9wcm9ibGVtLzUzODYxODM+CisgICAgaWYgKGRlc2NlbnQgPCAzICYmIGxpbmVH
YXAgPj0gMyAmJiBbZmFtaWx5TmFtZSBoYXNQcmVmaXg6QCJIaXJhZ2lubyJdKSB7CisgICAgICAg
IGxpbmVHYXAgLT0gMyAtIGRlc2NlbnQ7CisgICAgICAgIGRlc2NlbnQgPSAzOworICAgIH0KKyAg
ICAKKyAgICBpZiAocGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCAmJiAh
aXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaygpKQorICAgICAgICBtX2hhc1ZlcnRpY2FsR2x5cGhz
ID0gZm9udEhhc1ZlcnRpY2FsR2x5cGhzKG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpKTsKKworICAg
IGZsb2F0IHhIZWlnaHQ7CisKKyAgICBpZiAocGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9
PSBIb3Jpem9udGFsKSB7CisgICAgICAgIC8vIE1lYXN1cmUgdGhlIGFjdHVhbCBjaGFyYWN0ZXIg
IngiLCBzaW5jZSBpdCdzIHBvc3NpYmxlIGZvciBpdCB0byBleHRlbmQgYmVsb3cgdGhlIGJhc2Vs
aW5lLCBhbmQgd2UgbmVlZCB0aGUKKyAgICAgICAgLy8gcmVwb3J0ZWQgeC1oZWlnaHQgdG8gb25s
eSBpbmNsdWRlIHRoZSBwb3J0aW9uIG9mIHRoZSBnbHlwaCB0aGF0IGlzIGFib3ZlIHRoZSBiYXNl
bGluZS4KKyAgICAgICAgTlNHbHlwaCB4R2x5cGggPSBnbHlwaEZvckNoYXJhY3RlcigneCcpOwor
ICAgICAgICBpZiAoeEdseXBoKQorICAgICAgICAgICAgeEhlaWdodCA9IC1DR1JlY3RHZXRNaW5Z
KHBsYXRmb3JtQm91bmRzRm9yR2x5cGgoeEdseXBoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHhIZWlnaHQgPSBzY2FsZUVtVG9Vbml0cyhDR0ZvbnRHZXRYSGVpZ2h0KG1fcGxhdGZvcm1E
YXRhLmNnRm9udCgpKSwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemU7CisgICAgfSBlbHNlCisgICAg
ICAgIHhIZWlnaHQgPSB2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250RGF0YSgpLT5mb250TWV0
cmljcygpLnhIZWlnaHQoKTsKKworICAgIG1fZm9udE1ldHJpY3Muc2V0VW5pdHNQZXJFbSh1bml0
c1BlckVtKTsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldEFzY2VudChhc2NlbnQpOworICAgIG1fZm9u
dE1ldHJpY3Muc2V0RGVzY2VudChkZXNjZW50KTsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldENhcEhl
aWdodChjYXBIZWlnaHQpOworICAgIG1fZm9udE1ldHJpY3Muc2V0TGluZUdhcChsaW5lR2FwKTsK
KyAgICBtX2ZvbnRNZXRyaWNzLnNldFhIZWlnaHQoeEhlaWdodCk7Cit9CisKK3N0YXRpYyBDRkRh
dGFSZWYgY29weUZvbnRUYWJsZUZvclRhZyhGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEs
IEZvdXJDaGFyQ29kZSB0YWJsZU5hbWUpCit7CisgICAgcmV0dXJuIENHRm9udENvcHlUYWJsZUZv
clRhZyhwbGF0Zm9ybURhdGEuY2dGb250KCksIHRhYmxlTmFtZSk7Cit9CisKK3ZvaWQgU2ltcGxl
Rm9udERhdGE6OnBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpCit7CisgICAgbV9hdmdDaGFyV2lkdGgg
PSAwOworICAgIG1fbWF4Q2hhcldpZHRoID0gMDsKKyAgICAKKyAgICBSZXRhaW5QdHI8Q0ZEYXRh
UmVmPiBvczJUYWJsZSA9IGFkb3B0Q0YoY29weUZvbnRUYWJsZUZvclRhZyhtX3BsYXRmb3JtRGF0
YSwgJ09TLzInKSk7CisgICAgaWYgKG9zMlRhYmxlICYmIENGRGF0YUdldExlbmd0aChvczJUYWJs
ZS5nZXQoKSkgPj0gNCkgeworICAgICAgICBjb25zdCBVSW50OCogb3MyID0gQ0ZEYXRhR2V0Qnl0
ZVB0cihvczJUYWJsZS5nZXQoKSk7CisgICAgICAgIFNJbnQxNiBvczJBdmdDaGFyV2lkdGggPSBv
czJbMl0gKiAyNTYgKyBvczJbM107CisgICAgICAgIG1fYXZnQ2hhcldpZHRoID0gc2NhbGVFbVRv
VW5pdHMob3MyQXZnQ2hhcldpZHRoLCBtX2ZvbnRNZXRyaWNzLnVuaXRzUGVyRW0oKSkgKiBtX3Bs
YXRmb3JtRGF0YS5tX3NpemU7CisgICAgfQorCisgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gaGVh
ZFRhYmxlID0gYWRvcHRDRihjb3B5Rm9udFRhYmxlRm9yVGFnKG1fcGxhdGZvcm1EYXRhLCAnaGVh
ZCcpKTsKKyAgICBpZiAoaGVhZFRhYmxlICYmIENGRGF0YUdldExlbmd0aChoZWFkVGFibGUuZ2V0
KCkpID49IDQyKSB7CisgICAgICAgIGNvbnN0IFVJbnQ4KiBoZWFkID0gQ0ZEYXRhR2V0Qnl0ZVB0
cihoZWFkVGFibGUuZ2V0KCkpOworICAgICAgICB1c2hvcnQgdXhNaW4gPSBoZWFkWzM2XSAqIDI1
NiArIGhlYWRbMzddOworICAgICAgICB1c2hvcnQgdXhNYXggPSBoZWFkWzQwXSAqIDI1NiArIGhl
YWRbNDFdOworICAgICAgICBTSW50MTYgeE1pbiA9IHN0YXRpY19jYXN0PFNJbnQxNj4odXhNaW4p
OworICAgICAgICBTSW50MTYgeE1heCA9IHN0YXRpY19jYXN0PFNJbnQxNj4odXhNYXgpOworICAg
ICAgICBmbG9hdCBkaWZmID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHhNYXggLSB4TWluKTsKKyAgICAg
ICAgbV9tYXhDaGFyV2lkdGggPSBzY2FsZUVtVG9Vbml0cyhkaWZmLCBtX2ZvbnRNZXRyaWNzLnVu
aXRzUGVyRW0oKSkgKiBtX3BsYXRmb3JtRGF0YS5tX3NpemU7CisgICAgfQorCisgICAgLy8gRmFs
bGJhY2sgdG8gYSBjcm9zcy1wbGF0Zm9ybSBlc3RpbWF0ZSwgd2hpY2ggd2lsbCBwb3B1bGF0ZSB0
aGVzZSB2YWx1ZXMgaWYgdGhleSBhcmUgbm9uLXBvc2l0aXZlLgorICAgIGluaXRDaGFyV2lkdGhz
KCk7Cit9CisjZW5kaWYgLy8gVVNFKEFQUEtJVCkKKwordm9pZCBTaW1wbGVGb250RGF0YTo6cGxh
dGZvcm1EZXN0cm95KCkKK3sKK30KKworI2lmICFQTEFURk9STShJT1MpCitQYXNzUmVmUHRyPFNp
bXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1DcmVhdGVTY2FsZWRGb250RGF0
YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2NhbGVGYWN0
b3IpIGNvbnN0Cit7CisgICAgaWYgKGlzQ3VzdG9tRm9udCgpKSB7CisgICAgICAgIEZvbnRQbGF0
Zm9ybURhdGEgc2NhbGVkRm9udERhdGEobV9wbGF0Zm9ybURhdGEpOworICAgICAgICBzY2FsZWRG
b250RGF0YS5tX3NpemUgPSBzY2FsZWRGb250RGF0YS5tX3NpemUgKiBzY2FsZUZhY3RvcjsKKyAg
ICAgICAgcmV0dXJuIFNpbXBsZUZvbnREYXRhOjpjcmVhdGUoc2NhbGVkRm9udERhdGEsIHRydWUs
IGZhbHNlKTsKKyAgICB9CisKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAg
ZmxvYXQgc2l6ZSA9IG1fcGxhdGZvcm1EYXRhLnNpemUoKSAqIHNjYWxlRmFjdG9yOworICAgIEZv
bnRQbGF0Zm9ybURhdGEgc2NhbGVkRm9udERhdGEoW1tOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRN
YW5hZ2VyXSBjb252ZXJ0Rm9udDptX3BsYXRmb3JtRGF0YS5uc0ZvbnQoKSB0b1NpemU6c2l6ZV0s
IHNpemUsIG1fcGxhdGZvcm1EYXRhLmlzUHJpbnRlckZvbnQoKSwgZmFsc2UsIGZhbHNlLCBtX3Bs
YXRmb3JtRGF0YS5vcmllbnRhdGlvbigpKTsKKworICAgIC8vIEFwcEtpdCByZXNldHMgdGhlIHR5
cGUgaW5mb3JtYXRpb24gKHNjcmVlbi9wcmludGVyKSB3aGVuIHlvdSBjb252ZXJ0IGEgZm9udCB0
byBhIGRpZmZlcmVudCBzaXplLgorICAgIC8vIFdlIGhhdmUgdG8gZml4IHVwIHRoZSBmb250IHRo
YXQgd2UncmUgaGFuZGVkIGJhY2suCisgICAgc2NhbGVkRm9udERhdGEuc2V0TlNGb250KGZvbnRE
ZXNjcmlwdGlvbi51c2VQcmludGVyRm9udCgpID8gW3NjYWxlZEZvbnREYXRhLm5zRm9udCgpIHBy
aW50ZXJGb250XSA6IFtzY2FsZWRGb250RGF0YS5uc0ZvbnQoKSBzY3JlZW5Gb250XSk7CisKKyAg
ICBpZiAoc2NhbGVkRm9udERhdGEuZm9udCgpKSB7CisgICAgICAgIE5TRm9udE1hbmFnZXIgKmZv
bnRNYW5hZ2VyID0gW05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJdOworICAgICAgICBO
U0ZvbnRUcmFpdE1hc2sgZm9udFRyYWl0cyA9IFtmb250TWFuYWdlciB0cmFpdHNPZkZvbnQ6bV9w
bGF0Zm9ybURhdGEubnNGb250KCldOworCisgICAgICAgIGlmIChtX3BsYXRmb3JtRGF0YS5tX3N5
bnRoZXRpY0JvbGQpCisgICAgICAgICAgICBmb250VHJhaXRzIHw9IE5TQm9sZEZvbnRNYXNrOwor
ICAgICAgICBpZiAobV9wbGF0Zm9ybURhdGEubV9zeW50aGV0aWNPYmxpcXVlKQorICAgICAgICAg
ICAgZm9udFRyYWl0cyB8PSBOU0l0YWxpY0ZvbnRNYXNrOworCisgICAgICAgIE5TRm9udFRyYWl0
TWFzayBzY2FsZWRGb250VHJhaXRzID0gW2ZvbnRNYW5hZ2VyIHRyYWl0c09mRm9udDpzY2FsZWRG
b250RGF0YS5uc0ZvbnQoKV07CisgICAgICAgIHNjYWxlZEZvbnREYXRhLm1fc3ludGhldGljQm9s
ZCA9IChmb250VHJhaXRzICYgTlNCb2xkRm9udE1hc2spICYmICEoc2NhbGVkRm9udFRyYWl0cyAm
IE5TQm9sZEZvbnRNYXNrKTsKKyAgICAgICAgc2NhbGVkRm9udERhdGEubV9zeW50aGV0aWNPYmxp
cXVlID0gKGZvbnRUcmFpdHMgJiBOU0l0YWxpY0ZvbnRNYXNrKSAmJiAhKHNjYWxlZEZvbnRUcmFp
dHMgJiBOU0l0YWxpY0ZvbnRNYXNrKTsKKworICAgICAgICByZXR1cm4gZm9udENhY2hlKCkuZm9u
dEZvclBsYXRmb3JtRGF0YShzY2FsZWRGb250RGF0YSk7CisgICAgfQorICAgIEVORF9CTE9DS19P
QkpDX0VYQ0VQVElPTlM7CisKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBTaW1wbGVGb250RGF0
YTo6ZGV0ZXJtaW5lUGl0Y2goKQoreworICAgIE5TRm9udCogZiA9IG1fcGxhdGZvcm1EYXRhLm5z
Rm9udCgpOworICAgIC8vIFNwZWNpYWwgY2FzZSBPc2FrYS1Nb25vLgorICAgIC8vIEFjY29yZGlu
ZyB0byA8cmRhcjovL3Byb2JsZW0vMzk5OTQ2Nz4sIHdlIHNob3VsZCB0cmVhdCBPc2FrYS1Nb25v
IGFzIGZpeGVkIHBpdGNoLgorICAgIC8vIE5vdGUgdGhhdCB0aGUgQXBwS2l0IGRvZXMgbm90IHJl
cG9ydCBPc2FrYS1Nb25vIGFzIGZpeGVkIHBpdGNoLgorCisgICAgLy8gU3BlY2lhbCBjYXNlIE1T
LVBHb3RoaWMuCisgICAgLy8gQWNjb3JkaW5nIHRvIDxyZGFyOi8vcHJvYmxlbS80MDMyOTM4Piwg
d2Ugc2hvdWxkIG5vdCB0cmVhdCBNUy1QR290aGljIGFzIGZpeGVkIHBpdGNoLgorICAgIC8vIE5v
dGUgdGhhdCBBcHBLaXQgZG9lcyByZXBvcnQgTVMtUEdvdGhpYyBhcyBmaXhlZCBwaXRjaC4KKwor
ICAgIC8vIFNwZWNpYWwgY2FzZSBNb25vdHlwZUNvcnNpdmEKKyAgICAvLyBBY2NvcmRpbmcgdG8g
PHJkYXI6Ly9wcm9ibGVtLzU0NTQ3MDQ+LCB3ZSBzaG91bGQgbm90IHRyZWF0IE1vbm90eXBlQ29y
c2l2YSBhcyBmaXhlZCBwaXRjaC4KKyAgICAvLyBOb3RlIHRoYXQgQXBwS2l0IGRvZXMgcmVwb3J0
IE1vbm90eXBlQ29yc2l2YSBhcyBmaXhlZCBwaXRjaC4KKworICAgIE5TU3RyaW5nICpuYW1lID0g
W2YgZm9udE5hbWVdOworICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSAoW2YgaXNGaXhlZFBpdGNo
XSB8fCBbZiBfaXNGYWtlRml4ZWRQaXRjaF0gfHwKKyAgICAgICAgICAgW25hbWUgY2FzZUluc2Vu
c2l0aXZlQ29tcGFyZTpAIk9zYWthLU1vbm8iXSA9PSBOU09yZGVyZWRTYW1lKSAmJgorICAgICAg
ICAgICBbbmFtZSBjYXNlSW5zZW5zaXRpdmVDb21wYXJlOkAiTVMtUEdvdGhpYyJdICE9IE5TT3Jk
ZXJlZFNhbWUgJiYKKyAgICAgICAgICAgW25hbWUgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZTpAIk1v
bm90eXBlQ29yc2l2YSJdICE9IE5TT3JkZXJlZFNhbWU7Cit9CisjZW5kaWYgLy8gIVBMQVRGT1JN
KElPUykKKworRmxvYXRSZWN0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUJvdW5kc0ZvckdseXBo
KEdseXBoIGdseXBoKSBjb25zdAoreworICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveDsKKyAgICBi
b3VuZGluZ0JveCA9IENURm9udEdldEJvdW5kaW5nUmVjdHNGb3JHbHlwaHMobV9wbGF0Zm9ybURh
dGEuY3RGb250KCksIHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwgPyBr
Q1RGb250VmVydGljYWxPcmllbnRhdGlvbiA6IGtDVEZvbnRIb3Jpem9udGFsT3JpZW50YXRpb24s
ICZnbHlwaCwgMCwgMSk7CisgICAgYm91bmRpbmdCb3guc2V0WSgtYm91bmRpbmdCb3gubWF4WSgp
KTsKKyAgICBpZiAobV9zeW50aGV0aWNCb2xkT2Zmc2V0KQorICAgICAgICBib3VuZGluZ0JveC5z
ZXRXaWR0aChib3VuZGluZ0JveC53aWR0aCgpICsgbV9zeW50aGV0aWNCb2xkT2Zmc2V0KTsKKwor
ICAgIHJldHVybiBib3VuZGluZ0JveDsKK30KKworI2lmIFBMQVRGT1JNKE1BQykKK2lubGluZSBD
R0ZvbnRSZW5kZXJpbmdTdHlsZSBTaW1wbGVGb250RGF0YTo6cmVuZGVyaW5nU3R5bGUoKSBjb25z
dAoreworICAgIENHRm9udFJlbmRlcmluZ1N0eWxlIHN0eWxlID0ga0NHRm9udFJlbmRlcmluZ1N0
eWxlQW50aWFsaWFzaW5nIHwga0NHRm9udFJlbmRlcmluZ1N0eWxlU3VicGl4ZWxQb3NpdGlvbmlu
ZyB8IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZVN1YnBpeGVsUXVhbnRpemF0aW9uOworICAgIE5TRm9u
dCAqZm9udCA9IHBsYXRmb3JtRGF0YSgpLm5zRm9udCgpOworICAgIGlmIChmb250KSB7CisgICAg
ICAgIHN3aXRjaCAoW2ZvbnQgcmVuZGVyaW5nTW9kZV0pIHsKKyAgICAgICAgY2FzZSBOU0ZvbnRJ
bnRlZ2VyQWR2YW5jZW1lbnRzUmVuZGVyaW5nTW9kZToKKyAgICAgICAgICAgIHN0eWxlID0gMDsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE5TRm9udEFudGlhbGlhc2VkSW50ZWdl
ckFkdmFuY2VtZW50c1JlbmRlcmluZ01vZGU6CisgICAgICAgICAgICBzdHlsZSA9IGtDR0ZvbnRS
ZW5kZXJpbmdTdHlsZUFudGlhbGlhc2luZzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJu
IHN0eWxlOworfQorCitpbmxpbmUgYm9vbCBTaW1wbGVGb250RGF0YTo6YWR2YW5jZUZvckNvbG9y
Qml0bWFwRm9udChHbHlwaCBnbHlwaCwgQ0dTaXplJiBhZHZhbmNlKSBjb25zdAoreworICAgIE5T
Rm9udCAqZm9udCA9IHBsYXRmb3JtRGF0YSgpLm5zRm9udCgpOworICAgIGlmICghZm9udCB8fCAh
cGxhdGZvcm1EYXRhKCkuaXNDb2xvckJpdG1hcEZvbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGFkdmFuY2UgPSBOU1NpemVUb0NHU2l6ZShbZm9udCBhZHZhbmNlbWVudEZvckdseXBo
OmdseXBoXSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisjZW5kaWYKKworc3RhdGljIGJvb2wgaGFz
Q3VzdG9tVHJhY2tpbmcoQ1RGb250UmVmIGZvbnQpCit7CisjaWYgUExBVEZPUk0oTUFDKSAmJiBf
X01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEIDwgMTA5MAorICAgIFVOVVNFRF9QQVJBTShm
b250KTsKKyAgICByZXR1cm4gZmFsc2U7CisjZWxzZQorICAgIHJldHVybiBDVEZvbnREZXNjcmlw
dG9ySXNTeXN0ZW1VSUZvbnQoYWRvcHRDRihDVEZvbnRDb3B5Rm9udERlc2NyaXB0b3IoZm9udCkp
LmdldCgpKTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNFbW9qaShjb25zdCBG
b250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEpCit7CisjaWYgUExBVEZPUk0oSU9TKQorICAg
IHJldHVybiBwbGF0Zm9ybURhdGEubV9pc0Vtb2ppOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0o
cGxhdGZvcm1EYXRhKTsKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKworaW5saW5lIGJv
b2wgU2ltcGxlRm9udERhdGE6OmNhblVzZUZhc3RHbHlwaEFkdmFuY2VHZXR0ZXIoR2x5cGggZ2x5
cGgsIENHU2l6ZSYgYWR2YW5jZSwgYm9vbCYgcG9wdWxhdGVkQWR2YW5jZSkgY29uc3QKK3sKKyAg
ICAvLyBGYXN0IGdldHRlciBkb2Vzbid0IHRha2UgY3VzdG9tIHRyYWNraW5nIGludG8gYWNjb3Vu
dAorICAgIGlmIChoYXNDdXN0b21UcmFja2luZyhwbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAvLyBGYXN0IGdldHRlciBkb2Vzbid0IHdvcmsgZm9y
IGVtb2ppCisgICAgaWYgKGlzRW1vamkocGxhdGZvcm1EYXRhKCkpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgLy8gLi4uIG9yIGZvciBhbnkgYml0bWFwIGZvbnRzIGluIGdlbmVyYWwKKyAg
ICBpZiAoYWR2YW5jZUZvckNvbG9yQml0bWFwRm9udChnbHlwaCwgYWR2YW5jZSkpIHsKKyAgICAg
ICAgcG9wdWxhdGVkQWR2YW5jZSA9IHRydWU7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Zsb2F0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybVdp
ZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0Cit7CisgICAgQ0dTaXplIGFkdmFuY2UgPSBD
R1NpemVaZXJvOworICAgIGJvb2wgaG9yaXpvbnRhbCA9IHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0
aW9uKCkgPT0gSG9yaXpvbnRhbDsKKyAgICBib29sIHBvcHVsYXRlZEFkdmFuY2UgPSBmYWxzZTsK
KyAgICBpZiAoKGhvcml6b250YWwgfHwgbV9pc0Jyb2tlbklkZW9ncmFwaEZhbGxiYWNrKSAmJiBj
YW5Vc2VGYXN0R2x5cGhBZHZhbmNlR2V0dGVyKGdseXBoLCBhZHZhbmNlLCBwb3B1bGF0ZWRBZHZh
bmNlKSkgeworICAgICAgICBmbG9hdCBwb2ludFNpemUgPSBwbGF0Zm9ybURhdGEoKS5tX3NpemU7
CisgICAgICAgIENHQWZmaW5lVHJhbnNmb3JtIG0gPSBDR0FmZmluZVRyYW5zZm9ybU1ha2VTY2Fs
ZShwb2ludFNpemUsIHBvaW50U2l6ZSk7CisgICAgICAgIGlmICghQ0dGb250R2V0R2x5cGhBZHZh
bmNlc0ZvclN0eWxlKHBsYXRmb3JtRGF0YSgpLmNnRm9udCgpLCAmbSwgcmVuZGVyaW5nU3R5bGUo
KSwgJmdseXBoLCAxLCAmYWR2YW5jZSkpIHsKKyAgICAgICAgICAgIFJldGFpblB0cjxDRlN0cmlu
Z1JlZj4gZnVsbE5hbWUgPSBhZG9wdENGKENHRm9udENvcHlGdWxsTmFtZShwbGF0Zm9ybURhdGEo
KS5jZ0ZvbnQoKSkpOworICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gY2FjaGUgZ2x5
cGggd2lkdGhzIGZvciAlQCAlZiIsIGZ1bGxOYW1lLmdldCgpLCBwb2ludFNpemUpOworICAgICAg
ICAgICAgYWR2YW5jZS53aWR0aCA9IDA7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKCFwb3B1
bGF0ZWRBZHZhbmNlKQorICAgICAgICBDVEZvbnRHZXRBZHZhbmNlc0ZvckdseXBocyhtX3BsYXRm
b3JtRGF0YS5jdEZvbnQoKSwgaG9yaXpvbnRhbCA/IGtDVEZvbnRIb3Jpem9udGFsT3JpZW50YXRp
b24gOiBrQ1RGb250VmVydGljYWxPcmllbnRhdGlvbiwgJmdseXBoLCAmYWR2YW5jZSwgMSk7CisK
KyAgICByZXR1cm4gYWR2YW5jZS53aWR0aCArIG1fc3ludGhldGljQm9sZE9mZnNldDsKK30KKwor
c3RydWN0IFByb3ZpZGVySW5mbyB7CisgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnM7CisgICAg
c2l6ZV90IGxlbmd0aDsKKyAgICBDRkRpY3Rpb25hcnlSZWYgYXR0cmlidXRlczsKK307CisKK3N0
YXRpYyBjb25zdCBVbmlDaGFyKiBwcm92aWRlU3RyaW5nQW5kQXR0cmlidXRlcyhDRkluZGV4IHN0
cmluZ0luZGV4LCBDRkluZGV4KiBjb3VudCwgQ0ZEaWN0aW9uYXJ5UmVmKiBhdHRyaWJ1dGVzLCB2
b2lkKiBjb250ZXh0KQoreworICAgIFByb3ZpZGVySW5mbyogaW5mbyA9IHN0YXRpY19jYXN0PHN0
cnVjdCBQcm92aWRlckluZm8qPihjb250ZXh0KTsKKyAgICBpZiAoc3RyaW5nSW5kZXggPCAwIHx8
IHN0YXRpY19jYXN0PHNpemVfdD4oc3RyaW5nSW5kZXgpID49IGluZm8tPmxlbmd0aCkKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICAqY291bnQgPSBpbmZvLT5sZW5ndGggLSBzdHJpbmdJbmRleDsK
KyAgICAqYXR0cmlidXRlcyA9IGluZm8tPmF0dHJpYnV0ZXM7CisgICAgcmV0dXJuIGluZm8tPmNo
YXJhY3RlcnMgKyBzdHJpbmdJbmRleDsKK30KKworYm9vbCBTaW1wbGVGb250RGF0YTo6Y2FuUmVu
ZGVyQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNp
emVfdCBsZW5ndGgpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAg
IGlmICghbV9jb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZVN1cHBvcnQpCisgICAgICAgIG1fY29t
YmluaW5nQ2hhcmFjdGVyU2VxdWVuY2VTdXBwb3J0ID0gc3RkOjptYWtlX3VuaXF1ZTxIYXNoTWFw
PFN0cmluZywgYm9vbD4+KCk7CisKKyAgICBXVEY6Okhhc2hNYXA8U3RyaW5nLCBib29sPjo6QWRk
UmVzdWx0IGFkZFJlc3VsdCA9IG1fY29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2VTdXBwb3J0LT5h
ZGQoU3RyaW5nKGNoYXJhY3RlcnMsIGxlbmd0aCksIGZhbHNlKTsKKyAgICBpZiAoIWFkZFJlc3Vs
dC5pc05ld0VudHJ5KQorICAgICAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsK
KworICAgIFJldGFpblB0cjxDRlR5cGVSZWY+IGZvbnRFcXVhbGl0eU9iamVjdCA9IHBsYXRmb3Jt
RGF0YSgpLm9iamVjdEZvckVxdWFsaXR5Q2hlY2soKTsKKworICAgIFByb3ZpZGVySW5mbyBpbmZv
ID0geyBjaGFyYWN0ZXJzLCBsZW5ndGgsIGdldENGU3RyaW5nQXR0cmlidXRlcygwLCBwbGF0Zm9y
bURhdGEoKS5vcmllbnRhdGlvbigpKSB9OworICAgIFJldGFpblB0cjxDVExpbmVSZWY+IGxpbmUg
PSBhZG9wdENGKENUTGluZUNyZWF0ZVdpdGhVbmlDaGFyUHJvdmlkZXIoJnByb3ZpZGVTdHJpbmdB
bmRBdHRyaWJ1dGVzLCAwLCAmaW5mbykpOworCisgICAgQ0ZBcnJheVJlZiBydW5BcnJheSA9IENU
TGluZUdldEdseXBoUnVucyhsaW5lLmdldCgpKTsKKyAgICBDRkluZGV4IHJ1bkNvdW50ID0gQ0ZB
cnJheUdldENvdW50KHJ1bkFycmF5KTsKKworICAgIGZvciAoQ0ZJbmRleCByID0gMDsgciA8IHJ1
bkNvdW50OyByKyspIHsKKyAgICAgICAgQ1RSdW5SZWYgY3RSdW4gPSBzdGF0aWNfY2FzdDxDVFJ1
blJlZj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChydW5BcnJheSwgcikpOworICAgICAgICBBU1NF
UlQoQ0ZHZXRUeXBlSUQoY3RSdW4pID09IENUUnVuR2V0VHlwZUlEKCkpOworICAgICAgICBDRkRp
Y3Rpb25hcnlSZWYgcnVuQXR0cmlidXRlcyA9IENUUnVuR2V0QXR0cmlidXRlcyhjdFJ1bik7Cisg
ICAgICAgIENURm9udFJlZiBydW5Gb250ID0gc3RhdGljX2Nhc3Q8Q1RGb250UmVmPihDRkRpY3Rp
b25hcnlHZXRWYWx1ZShydW5BdHRyaWJ1dGVzLCBrQ1RGb250QXR0cmlidXRlTmFtZSkpOworICAg
ICAgICBpZiAoIUNGRXF1YWwoZm9udEVxdWFsaXR5T2JqZWN0LmdldCgpLCBGb250UGxhdGZvcm1E
YXRhOjpvYmplY3RGb3JFcXVhbGl0eUNoZWNrKHJ1bkZvbnQpLmdldCgpKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0g
dHJ1ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRNYWMubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRNYWMubW0J
KHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9G
b250TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiAgKi8KIAogI2ltcG9y
dCAiY29uZmlnLmgiCi0jaW1wb3J0ICJTaW1wbGVGb250RGF0YS5oIgorI2ltcG9ydCAiRm9udC5o
IgogCiAjaW1wb3J0ICJCbG9ja0V4Y2VwdGlvbnMuaCIKICNpbXBvcnQgIkNvbG9yLmgiCkBAIC03
MSw5ICs3MSw5IEBAIHN0YXRpYyBib29sIGZvbnRIYXNWZXJ0aWNhbEdseXBocyhDVEZvbnQKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBib29sIGluaXRGb250RGF0YShTaW1wbGVGb250
RGF0YSogZm9udERhdGEpCitzdGF0aWMgYm9vbCBpbml0Rm9udERhdGEoRm9udCogZm9udCkKIHsK
LSAgICBpZiAoIWZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5jZ0ZvbnQoKSkKKyAgICBpZiAoIWZv
bnQtPnBsYXRmb3JtRGF0YSgpLmNnRm9udCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICByZXR1cm4gdHJ1ZTsKQEAgLTg1LDcgKzg1LDcgQEAgc3RhdGljIE5TU3RyaW5nICp3ZWJGYWxs
YmFja0ZvbnRGYW1pbHkodgogICAgIHJldHVybiB3ZWJGYWxsYmFja0ZvbnRGYW1pbHk7CiB9CiAK
LWNvbnN0IFNpbXBsZUZvbnREYXRhKiBTaW1wbGVGb250RGF0YTo6Y29tcG9zaXRlRm9udFJlZmVy
ZW5jZUZvbnREYXRhKE5TRm9udCAqa2V5KSBjb25zdAorY29uc3QgRm9udCogRm9udDo6Y29tcG9z
aXRlRm9udFJlZmVyZW5jZUZvbnQoTlNGb250ICprZXkpIGNvbnN0CiB7CiAgICAgaWYgKCFrZXkg
fHwgQ0ZFcXVhbChhZG9wdENGKENURm9udENvcHlQb3N0U2NyaXB0TmFtZShDVEZvbnRSZWYoa2V5
KSkpLmdldCgpLCBDRlNUUigiTGFzdFJlc29ydCIpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CkBAIC0xMDMsMTIgKzEwMywxMiBAQCBjb25zdCBTaW1wbGVGb250RGF0YSogU2ltcGxlRm9udERh
dGE6OmNvCiAgICAgICAgIGJvb2wgc3ludGhldGljT2JsaXF1ZSA9IHBsYXRmb3JtRGF0YSgpLnN5
bnRoZXRpY09ibGlxdWUoKSAmJiAhKHRyYWl0cyAmIGtDVEZvbnRJdGFsaWNUcmFpdCk7CiAKICAg
ICAgICAgRm9udFBsYXRmb3JtRGF0YSBzdWJzdGl0dXRlUGxhdGZvcm0oc3Vic3RpdHV0ZUZvbnQs
IHBsYXRmb3JtRGF0YSgpLnNpemUoKSwgaXNVc2luZ1ByaW50ZXJGb250LCBzeW50aGV0aWNCb2xk
LCBzeW50aGV0aWNPYmxpcXVlLCBwbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpLCBwbGF0Zm9y
bURhdGEoKS53aWR0aFZhcmlhbnQoKSk7Ci0gICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFs
dWUgPSBTaW1wbGVGb250RGF0YTo6Y3JlYXRlKHN1YnN0aXR1dGVQbGF0Zm9ybSwgaXNDdXN0b21G
b250KCkpOworICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gRm9udDo6Y3JlYXRl
KHN1YnN0aXR1dGVQbGF0Zm9ybSwgaXNDdXN0b21Gb250KCkpOwogICAgIH0KICAgICByZXR1cm4g
YWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKIH0KIAotdm9pZCBTaW1wbGVGb250RGF0
YTo6cGxhdGZvcm1Jbml0KCkKK3ZvaWQgRm9udDo6cGxhdGZvcm1Jbml0KCkKIHsKICAgICBtX3N5
bnRoZXRpY0JvbGRPZmZzZXQgPSBtX3BsYXRmb3JtRGF0YS5tX3N5bnRoZXRpY0JvbGQgPyAxLjBm
IDogMC5mOwogCkBAIC0xNjUsNiArMTY1LDEzIEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRm
b3JtSW5pdCgpCiAgICAgICAgIExPR19FUlJPUigiZmFpbGVkIHRvIHNldCB1cCBmb250LCB1c2lu
ZyBzeXN0ZW0gZm9udCAlcyIsIG1fcGxhdGZvcm1EYXRhLmZvbnQoKSk7CiAgICAgICAgIGluaXRG
b250RGF0YSh0aGlzKTsKICAgICB9CisKKyNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJ
UkVEID09IDEwOTAKKyAgICAvLyBXb3JrIGFyb3VuZCA8cmRhcjovL3Byb2JsZW0vMTk0MzM0OTA+
CisgICAgQ0dHbHlwaCBkdW1teUdseXBoc1tdID0gezAsIDB9OworICAgIENHU2l6ZSBkdW1teVNp
emVbXSA9IHtDR1NpemVNYWtlKDAsIDApLCBDR1NpemVNYWtlKDAsIDApfTsKKyAgICBDVEZvbnRU
cmFuc2Zvcm1HbHlwaHMobV9wbGF0Zm9ybURhdGEuY3RGb250KCksIGR1bW15R2x5cGhzLCBkdW1t
eVNpemUsIDIsIGtDVEZvbnRUcmFuc2Zvcm1BcHBseVBvc2l0aW9uaW5nIHwga0NURm9udFRyYW5z
Zm9ybUFwcGx5U2hhcGluZyk7CisjZW5kaWYKICAgICAKICAgICBpbnQgaUFzY2VudDsKICAgICBp
bnQgaURlc2NlbnQ7CkBAIC0yMTksNyArMjI2LDcgQEAgdm9pZCBTaW1wbGVGb250RGF0YTo6cGxh
dGZvcm1Jbml0KCkKICAgICAgICAgZWxzZQogICAgICAgICAgICAgeEhlaWdodCA9IHNjYWxlRW1U
b1VuaXRzKENHRm9udEdldFhIZWlnaHQobV9wbGF0Zm9ybURhdGEuY2dGb250KCkpLCB1bml0c1Bl
ckVtKSAqIHBvaW50U2l6ZTsKICAgICB9IGVsc2UKLSAgICAgICAgeEhlaWdodCA9IHZlcnRpY2Fs
UmlnaHRPcmllbnRhdGlvbkZvbnREYXRhKCktPmZvbnRNZXRyaWNzKCkueEhlaWdodCgpOworICAg
ICAgICB4SGVpZ2h0ID0gdmVydGljYWxSaWdodE9yaWVudGF0aW9uRm9udCgpLT5mb250TWV0cmlj
cygpLnhIZWlnaHQoKTsKIAogICAgIG1fZm9udE1ldHJpY3Muc2V0VW5pdHNQZXJFbSh1bml0c1Bl
ckVtKTsKICAgICBtX2ZvbnRNZXRyaWNzLnNldEFzY2VudChhc2NlbnQpOwpAQCAtMjM0LDcgKzI0
MSw3IEBAIHN0YXRpYyBDRkRhdGFSZWYgY29weUZvbnRUYWJsZUZvclRhZyhGb24KICAgICByZXR1
cm4gQ0dGb250Q29weVRhYmxlRm9yVGFnKHBsYXRmb3JtRGF0YS5jZ0ZvbnQoKSwgdGFibGVOYW1l
KTsKIH0KIAotdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1DaGFyV2lkdGhJbml0KCkKK3Zv
aWQgRm9udDo6cGxhdGZvcm1DaGFyV2lkdGhJbml0KCkKIHsKICAgICBtX2F2Z0NoYXJXaWR0aCA9
IDA7CiAgICAgbV9tYXhDaGFyV2lkdGggPSAwOwpAQCAtMjYyLDE3ICsyNjksMTcgQEAgdm9pZCBT
aW1wbGVGb250RGF0YTo6cGxhdGZvcm1DaGFyV2lkdGhJbgogfQogI2VuZGlmIC8vIFVTRShBUFBL
SVQpCiAKLXZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtRGVzdHJveSgpCit2b2lkIEZvbnQ6
OnBsYXRmb3JtRGVzdHJveSgpCiB7CiB9CiAKICNpZiAhUExBVEZPUk0oSU9TKQotUGFzc1JlZlB0
cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQ3JlYXRlU2NhbGVkRm9u
dERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNjYWxl
RmFjdG9yKSBjb25zdAorUGFzc1JlZlB0cjxGb250PiBGb250OjpwbGF0Zm9ybUNyZWF0ZVNjYWxl
ZEZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNjYWxl
RmFjdG9yKSBjb25zdAogewogICAgIGlmIChpc0N1c3RvbUZvbnQoKSkgewogICAgICAgICBGb250
UGxhdGZvcm1EYXRhIHNjYWxlZEZvbnREYXRhKG1fcGxhdGZvcm1EYXRhKTsKICAgICAgICAgc2Nh
bGVkRm9udERhdGEubV9zaXplID0gc2NhbGVkRm9udERhdGEubV9zaXplICogc2NhbGVGYWN0b3I7
Ci0gICAgICAgIHJldHVybiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlKHNjYWxlZEZvbnREYXRhLCB0
cnVlLCBmYWxzZSk7CisgICAgICAgIHJldHVybiBGb250OjpjcmVhdGUoc2NhbGVkRm9udERhdGEs
IHRydWUsIGZhbHNlKTsKICAgICB9CiAKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7
CkBAIC0zMDMsNyArMzEwLDcgQEAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9u
dERhdAogICAgIHJldHVybiAwOwogfQogCi12b2lkIFNpbXBsZUZvbnREYXRhOjpkZXRlcm1pbmVQ
aXRjaCgpCit2b2lkIEZvbnQ6OmRldGVybWluZVBpdGNoKCkKIHsKICAgICBOU0ZvbnQqIGYgPSBt
X3BsYXRmb3JtRGF0YS5uc0ZvbnQoKTsKICAgICAvLyBTcGVjaWFsIGNhc2UgT3Nha2EtTW9uby4K
QEAgLTMyNiw3ICszMzMsNyBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpkZXRlcm1pbmVQaXRjaCgp
CiB9CiAjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAotRmxvYXRSZWN0IFNpbXBsZUZvbnREYXRh
OjpwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAorRmxvYXRSZWN0IEZv
bnQ6OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CiB7CiAgICAgRmxv
YXRSZWN0IGJvdW5kaW5nQm94OwogICAgIGJvdW5kaW5nQm94ID0gQ1RGb250R2V0Qm91bmRpbmdS
ZWN0c0ZvckdseXBocyhtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSwgcGxhdGZvcm1EYXRhKCkub3Jp
ZW50YXRpb24oKSA9PSBWZXJ0aWNhbCA/IGtDVEZvbnRWZXJ0aWNhbE9yaWVudGF0aW9uIDoga0NU
Rm9udEhvcml6b250YWxPcmllbnRhdGlvbiwgJmdseXBoLCAwLCAxKTsKQEAgLTMzOCw3ICszNDUs
NyBAQCBGbG9hdFJlY3QgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQm91bmRzCiB9CiAKICNpZiBQ
TEFURk9STShNQUMpCi1pbmxpbmUgQ0dGb250UmVuZGVyaW5nU3R5bGUgU2ltcGxlRm9udERhdGE6
OnJlbmRlcmluZ1N0eWxlKCkgY29uc3QKK2lubGluZSBDR0ZvbnRSZW5kZXJpbmdTdHlsZSBGb250
OjpyZW5kZXJpbmdTdHlsZSgpIGNvbnN0CiB7CiAgICAgQ0dGb250UmVuZGVyaW5nU3R5bGUgc3R5
bGUgPSBrQ0dGb250UmVuZGVyaW5nU3R5bGVBbnRpYWxpYXNpbmcgfCBrQ0dGb250UmVuZGVyaW5n
U3R5bGVTdWJwaXhlbFBvc2l0aW9uaW5nIHwga0NHRm9udFJlbmRlcmluZ1N0eWxlU3VicGl4ZWxR
dWFudGl6YXRpb247CiAgICAgTlNGb250ICpmb250ID0gcGxhdGZvcm1EYXRhKCkubnNGb250KCk7
CkBAIC0zNTcsNyArMzY0LDcgQEAgaW5saW5lIENHRm9udFJlbmRlcmluZ1N0eWxlIFNpbXBsZUZv
bnREYQogICAgIHJldHVybiBzdHlsZTsKIH0KIAotaW5saW5lIGJvb2wgU2ltcGxlRm9udERhdGE6
OmFkdmFuY2VGb3JDb2xvckJpdG1hcEZvbnQoR2x5cGggZ2x5cGgsIENHU2l6ZSYgYWR2YW5jZSkg
Y29uc3QKK2lubGluZSBib29sIEZvbnQ6OmFkdmFuY2VGb3JDb2xvckJpdG1hcEZvbnQoR2x5cGgg
Z2x5cGgsIENHU2l6ZSYgYWR2YW5jZSkgY29uc3QKIHsKICAgICBOU0ZvbnQgKmZvbnQgPSBwbGF0
Zm9ybURhdGEoKS5uc0ZvbnQoKTsKICAgICBpZiAoIWZvbnQgfHwgIXBsYXRmb3JtRGF0YSgpLmlz
Q29sb3JCaXRtYXBGb250KCkpCkBAIC0zODcsNyArMzk0LDcgQEAgc3RhdGljIGlubGluZSBib29s
IGlzRW1vamkoY29uc3QgRm9udFBsYQogI2VuZGlmCiB9CiAKLWlubGluZSBib29sIFNpbXBsZUZv
bnREYXRhOjpjYW5Vc2VGYXN0R2x5cGhBZHZhbmNlR2V0dGVyKEdseXBoIGdseXBoLCBDR1NpemUm
IGFkdmFuY2UsIGJvb2wmIHBvcHVsYXRlZEFkdmFuY2UpIGNvbnN0CitpbmxpbmUgYm9vbCBGb250
OjpjYW5Vc2VGYXN0R2x5cGhBZHZhbmNlR2V0dGVyKEdseXBoIGdseXBoLCBDR1NpemUmIGFkdmFu
Y2UsIGJvb2wmIHBvcHVsYXRlZEFkdmFuY2UpIGNvbnN0CiB7CiAgICAgLy8gRmFzdCBnZXR0ZXIg
ZG9lc24ndCB0YWtlIGN1c3RvbSB0cmFja2luZyBpbnRvIGFjY291bnQKICAgICBpZiAoaGFzQ3Vz
dG9tVHJhY2tpbmcocGxhdGZvcm1EYXRhKCkuY3RGb250KCkpKQpAQCAtNDAzLDcgKzQxMCw3IEBA
IGlubGluZSBib29sIFNpbXBsZUZvbnREYXRhOjpjYW5Vc2VGYXN0R2wKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotZmxvYXQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtV2lkdGhGb3JHbHlwaChHbHlw
aCBnbHlwaCkgY29uc3QKK2Zsb2F0IEZvbnQ6OnBsYXRmb3JtV2lkdGhGb3JHbHlwaChHbHlwaCBn
bHlwaCkgY29uc3QKIHsKICAgICBDR1NpemUgYWR2YW5jZSA9IENHU2l6ZVplcm87CiAgICAgYm9v
bCBob3Jpem9udGFsID0gcGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFs
OwpAQCAtNDM5LDcgKzQ0Niw3IEBAIHN0YXRpYyBjb25zdCBVbmlDaGFyKiBwcm92aWRlU3RyaW5n
QW5kQXQKICAgICByZXR1cm4gaW5mby0+Y2hhcmFjdGVycyArIHN0cmluZ0luZGV4OwogfQogCi1i
b29sIFNpbXBsZUZvbnREYXRhOjpjYW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShj
b25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkgY29uc3QKK2Jvb2wgRm9udDo6
Y2FuUmVuZGVyQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY29uc3QgVUNoYXIqIGNoYXJhY3Rl
cnMsIHNpemVfdCBsZW5ndGgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dseXBoUGFnZU1h
Yy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0dseXBoUGFnZU1hYy5jcHAJKHJldmlzaW9uIDE3ODUxNSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL21hYy9HbHlwaFBhZ2VNYWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSw4ICszMSw4IEBACiAKICNpbmNsdWRlICJDb3JlR3JhcGhpY3NTUEkuaCIKICNpbmNsdWRlICJD
b3JlVGV4dFNQSS5oIgorI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGb250Q2FzY2FkZS5o
IgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5jbHVkZSAiV2ViQ29yZVN5c3RlbUlu
dGVyZmFjZS5oIgogI2lmICFQTEFURk9STShJT1MpCiAjaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2
aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CkBAIC00MCwxMSArNDAsMTEgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1zdGF0aWMgYm9vbCBzaG91bGRVc2VDb3JlVGV4dChjb25zdCBVQ2hh
ciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBm
b250RGF0YSkKK3N0YXRpYyBib29sIHNob3VsZFVzZUNvcmVUZXh0KGNvbnN0IFVDaGFyKiBidWZm
ZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgRm9udCogZm9udCkKIHsKLSAgICBpZiAo
Zm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLmlzQ29tcG9zaXRlRm9udFJlZmVyZW5jZSgpKQorICAg
IGlmIChmb250LT5wbGF0Zm9ybURhdGEoKS5pc0NvbXBvc2l0ZUZvbnRSZWZlcmVuY2UoKSkKICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS53aWR0
aFZhcmlhbnQoKSAhPSBSZWd1bGFyV2lkdGggfHwgZm9udERhdGEtPmhhc1ZlcnRpY2FsR2x5cGhz
KCkpIHsKKyAgICBpZiAoZm9udC0+cGxhdGZvcm1EYXRhKCkud2lkdGhWYXJpYW50KCkgIT0gUmVn
dWxhcldpZHRoIHx8IGZvbnQtPmhhc1ZlcnRpY2FsR2x5cGhzKCkpIHsKICAgICAgICAgLy8gSWRl
b2dyYXBocyBkb24ndCBoYXZlIGEgdmVydGljYWwgdmFyaWFudCBvciB3aWR0aCB2YXJpYW50cy4K
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ1ZmZlckxlbmd0aDsgKytpKSB7CiAg
ICAgICAgICAgICBpZiAoIUZvbnRDYXNjYWRlOjppc0NKS0lkZW9ncmFwaChidWZmZXJbaV0pKQpA
QCAtNTUsNDEgKzU1LDQxIEBAIHN0YXRpYyBib29sIHNob3VsZFVzZUNvcmVUZXh0KGNvbnN0IFVD
aGEKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgR2x5cGhQYWdlOjptYXlVc2VNaXhlZEZv
bnREYXRhV2hlbkZpbGxpbmcoY29uc3QgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVu
Z3RoLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEpCitib29sIEdseXBoUGFnZTo6bWF5
VXNlTWl4ZWRGb250c1doZW5GaWxsaW5nKGNvbnN0IFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1
ZmZlckxlbmd0aCwgY29uc3QgRm9udCogZm9udCkKIHsKICNpZiBVU0UoQVBQS0lUKQogICAgIC8v
IEZJWE1FOiBUaGlzIGlzIG9ubHkgcmVhbGx5IG5lZWRlZCBmb3IgY29tcG9zaXRlIGZvbnQgcmVm
ZXJlbmNlcy4KLSAgICByZXR1cm4gc2hvdWxkVXNlQ29yZVRleHQoYnVmZmVyLCBidWZmZXJMZW5n
dGgsIGZvbnREYXRhKTsKKyAgICByZXR1cm4gc2hvdWxkVXNlQ29yZVRleHQoYnVmZmVyLCBidWZm
ZXJMZW5ndGgsIGZvbnQpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oYnVmZmVyKTsKICAgICBV
TlVTRURfUEFSQU0oYnVmZmVyTGVuZ3RoKTsKLSAgICBVTlVTRURfUEFSQU0oZm9udERhdGEpOwor
ICAgIFVOVVNFRF9QQVJBTShmb250KTsKICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKIH0KIAot
Ym9vbCBHbHlwaFBhZ2U6OmZpbGwodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVD
aGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgU2ltcGxlRm9udERhdGEq
IGZvbnREYXRhKQorYm9vbCBHbHlwaFBhZ2U6OmZpbGwodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25l
ZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgRm9u
dCogZm9udCkKIHsKICAgICBib29sIGhhdmVHbHlwaHMgPSBmYWxzZTsKIAogICAgIFZlY3RvcjxD
R0dseXBoLCA1MTI+IGdseXBocyhidWZmZXJMZW5ndGgpOwotICAgIGlmICghc2hvdWxkVXNlQ29y
ZVRleHQoYnVmZmVyLCBidWZmZXJMZW5ndGgsIGZvbnREYXRhKSkgeworICAgIGlmICghc2hvdWxk
VXNlQ29yZVRleHQoYnVmZmVyLCBidWZmZXJMZW5ndGgsIGZvbnQpKSB7CiAgICAgICAgIC8vIFdl
IHBhc3MgaW4gZWl0aGVyIDI1NiBvciA1MTIgVVRGLTE2IGNoYXJhY3RlcnM6IDI1NiBmb3IgVStG
RkZGIGFuZCBsZXNzLCA1MTIgKGRvdWJsZSBjaGFyYWN0ZXIgc3Vycm9nYXRlcykKICAgICAgICAg
Ly8gZm9yIFUrMTAwMDAgYW5kIGFib3ZlLiBJdCBpcyBpbmRlZWQgcG9zc2libGUgdG8gZ2V0IGJh
Y2sgNTEyIGdseXBocyBiYWNrIGZyb20gdGhlIEFQSSwgc28gdGhlIGdseXBoIGJ1ZmZlcgogICAg
ICAgICAvLyB3ZSBwYXNzIGluIG11c3QgYmUgNTEyLiBJZiB3ZSBnZXQgYmFjayBtb3JlIHRoYW4g
MjU2IGdseXBocyB0aG91Z2ggd2UnbGwgaWdub3JlIGFsbCB0aGUgb25lcyBhZnRlciAyNTYsCiAg
ICAgICAgIC8vIHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4gYXMgdGhlIG9ubHkgdGltZSB3ZSBwYXNz
IGluIDUxMiBjaGFyYWN0ZXJzIGlzIHdoZW4gdGhleSBhcmUgc3Vycm9nYXRlcy4KLSAgICAgICAg
Q0dGb250R2V0R2x5cGhzRm9yVW5pY2hhcnMoZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLmNnRm9u
dCgpLCBidWZmZXIsIGdseXBocy5kYXRhKCksIGJ1ZmZlckxlbmd0aCk7CisgICAgICAgIENHRm9u
dEdldEdseXBoc0ZvclVuaWNoYXJzKGZvbnQtPnBsYXRmb3JtRGF0YSgpLmNnRm9udCgpLCBidWZm
ZXIsIGdseXBocy5kYXRhKCksIGJ1ZmZlckxlbmd0aCk7CiAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICAgICAgaWYgKCFnbHlwaHNbaV0pCiAg
ICAgICAgICAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgob2Zmc2V0ICsgaSwgMCwgMCk7CiAg
ICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChv
ZmZzZXQgKyBpLCBnbHlwaHNbaV0sIGZvbnREYXRhKTsKKyAgICAgICAgICAgICAgICBzZXRHbHlw
aERhdGFGb3JJbmRleChvZmZzZXQgKyBpLCBnbHlwaHNbaV0sIGZvbnQpOwogICAgICAgICAgICAg
ICAgIGhhdmVHbHlwaHMgPSB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgfSBl
bHNlIGlmICghZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLmlzQ29tcG9zaXRlRm9udFJlZmVyZW5j
ZSgpICYmICgoZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLndpZHRoVmFyaWFudCgpID09IFJlZ3Vs
YXJXaWR0aCkKLSAgICAgICAgPyBDVEZvbnRHZXRWZXJ0aWNhbEdseXBoc0ZvckNoYXJhY3RlcnMo
Zm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLmN0Rm9udCgpLCBidWZmZXIsIGdseXBocy5kYXRhKCks
IGJ1ZmZlckxlbmd0aCkKLSAgICAgICAgOiBDVEZvbnRHZXRHbHlwaHNGb3JDaGFyYWN0ZXJzKGZv
bnREYXRhLT5wbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSwgYnVmZmVyLCBnbHlwaHMuZGF0YSgpLCBi
dWZmZXJMZW5ndGgpKSkgeworICAgIH0gZWxzZSBpZiAoIWZvbnQtPnBsYXRmb3JtRGF0YSgpLmlz
Q29tcG9zaXRlRm9udFJlZmVyZW5jZSgpICYmICgoZm9udC0+cGxhdGZvcm1EYXRhKCkud2lkdGhW
YXJpYW50KCkgPT0gUmVndWxhcldpZHRoKQorICAgICAgICA/IENURm9udEdldFZlcnRpY2FsR2x5
cGhzRm9yQ2hhcmFjdGVycyhmb250LT5wbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSwgYnVmZmVyLCBn
bHlwaHMuZGF0YSgpLCBidWZmZXJMZW5ndGgpCisgICAgICAgIDogQ1RGb250R2V0R2x5cGhzRm9y
Q2hhcmFjdGVycyhmb250LT5wbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSwgYnVmZmVyLCBnbHlwaHMu
ZGF0YSgpLCBidWZmZXJMZW5ndGgpKSkgewogICAgICAgICAvLyBXaGVuIGJ1ZmZlciBjb25zaXN0
cyBvZiBzdXJyb2dhdGUgcGFpcnMsIENURm9udEdldFZlcnRpY2FsR2x5cGhzRm9yQ2hhcmFjdGVy
cyBhbmQgQ1RGb250R2V0R2x5cGhzRm9yQ2hhcmFjdGVycwogICAgICAgICAvLyBwbGFjZSB0aGUg
Z2x5cGhzIGF0IGluZGljZXMgY29ycmVzcG9uZGluZyB0byB0aGUgZmlyc3QgY2hhcmFjdGVyIG9m
IGVhY2ggcGFpci4KICAgICAgICAgQVNTRVJUKCEoYnVmZmVyTGVuZ3RoICUgbGVuZ3RoKSAmJiAo
YnVmZmVyTGVuZ3RoIC8gbGVuZ3RoID09IDEgfHwgYnVmZmVyTGVuZ3RoIC8gbGVuZ3RoID09IDIp
KTsKQEAgLTk4LDE0ICs5OCwxNCBAQCBib29sIEdseXBoUGFnZTo6ZmlsbCh1bnNpZ25lZCBvZmZz
ZXQsIHVuCiAgICAgICAgICAgICBpZiAoIWdseXBoc1tpICogZ2x5cGhTdGVwXSkKICAgICAgICAg
ICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChvZmZzZXQgKyBpLCAwLCAwKTsKICAgICAgICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHNldEdseXBoRGF0YUZvckluZGV4KG9mZnNldCAr
IGksIGdseXBoc1tpICogZ2x5cGhTdGVwXSwgZm9udERhdGEpOworICAgICAgICAgICAgICAgIHNl
dEdseXBoRGF0YUZvckluZGV4KG9mZnNldCArIGksIGdseXBoc1tpICogZ2x5cGhTdGVwXSwgZm9u
dCk7CiAgICAgICAgICAgICAgICAgaGF2ZUdseXBocyA9IHRydWU7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICAvLyBXZSBhc2sgQ29yZVRleHQgZm9yIHBv
c3NpYmxlIHZlcnRpY2FsIHZhcmlhbnQgZ2x5cGhzCiAgICAgICAgIFJldGFpblB0cjxDRlN0cmlu
Z1JlZj4gc3RyaW5nID0gYWRvcHRDRihDRlN0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzTm9Db3B5
KGtDRkFsbG9jYXRvckRlZmF1bHQsIGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCBrQ0ZBbGxvY2F0b3JO
dWxsKSk7Ci0gICAgICAgIFJldGFpblB0cjxDRkF0dHJpYnV0ZWRTdHJpbmdSZWY+IGF0dHJpYnV0
ZWRTdHJpbmcgPSBhZG9wdENGKENGQXR0cmlidXRlZFN0cmluZ0NyZWF0ZShrQ0ZBbGxvY2F0b3JE
ZWZhdWx0LCBzdHJpbmcuZ2V0KCksIGZvbnREYXRhLT5nZXRDRlN0cmluZ0F0dHJpYnV0ZXMoMCwg
Zm9udERhdGEtPmhhc1ZlcnRpY2FsR2x5cGhzKCkgPyBWZXJ0aWNhbCA6IEhvcml6b250YWwpKSk7
CisgICAgICAgIFJldGFpblB0cjxDRkF0dHJpYnV0ZWRTdHJpbmdSZWY+IGF0dHJpYnV0ZWRTdHJp
bmcgPSBhZG9wdENGKENGQXR0cmlidXRlZFN0cmluZ0NyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCBzdHJpbmcuZ2V0KCksIGZvbnQtPmdldENGU3RyaW5nQXR0cmlidXRlcygwLCBmb250LT5oYXNW
ZXJ0aWNhbEdseXBocygpID8gVmVydGljYWwgOiBIb3Jpem9udGFsKSkpOwogICAgICAgICBSZXRh
aW5QdHI8Q1RMaW5lUmVmPiBsaW5lID0gYWRvcHRDRihDVExpbmVDcmVhdGVXaXRoQXR0cmlidXRl
ZFN0cmluZyhhdHRyaWJ1dGVkU3RyaW5nLmdldCgpKSk7CiAKICAgICAgICAgQ0ZBcnJheVJlZiBy
dW5BcnJheSA9IENUTGluZUdldEdseXBoUnVucyhsaW5lLmdldCgpKTsKQEAgLTExOSwxOCArMTE5
LDE4IEBAIGJvb2wgR2x5cGhQYWdlOjpmaWxsKHVuc2lnbmVkIG9mZnNldCwgdW4KICAgICAgICAg
VmVjdG9yPENGSW5kZXgsIDUxMj4gaW5kZXhWZWN0b3I7CiAgICAgICAgIGJvb2wgZG9uZSA9IGZh
bHNlOwogCi0gICAgICAgIFJldGFpblB0cjxDRlR5cGVSZWY+IGZvbnRFcXVhbGl0eU9iamVjdCA9
IGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5vYmplY3RGb3JFcXVhbGl0eUNoZWNrKCk7CisgICAg
ICAgIFJldGFpblB0cjxDRlR5cGVSZWY+IGZvbnRFcXVhbGl0eU9iamVjdCA9IGZvbnQtPnBsYXRm
b3JtRGF0YSgpLm9iamVjdEZvckVxdWFsaXR5Q2hlY2soKTsKIAogICAgICAgICBmb3IgKENGSW5k
ZXggciA9IDA7IHIgPCBydW5Db3VudCAmJiAhZG9uZSA7ICsrcikgewogICAgICAgICAgICAgLy8g
Q1RMaW5lIGNvdWxkIG1hcCBjaGFyYWN0ZXJzIG92ZXIgbXVsdGlwbGUgZm9udHMgdXNpbmcgaXRz
IG93biBmb250IGZhbGxiYWNrIGxpc3QuCi0gICAgICAgICAgICAvLyBXZSBuZWVkIHRvIHBpY2sg
cnVucyB0aGF0IHVzZSB0aGUgZXhhY3QgZm9udCB3ZSBuZWVkLCBpLmUuLCBmb250RGF0YS0+cGxh
dGZvcm1EYXRhKCkuY3RGb250KCkuCisgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIHBpY2sgcnVu
cyB0aGF0IHVzZSB0aGUgZXhhY3QgZm9udCB3ZSBuZWVkLCBpLmUuLCBmb250LT5wbGF0Zm9ybURh
dGEoKS5jdEZvbnQoKS4KICAgICAgICAgICAgIENUUnVuUmVmIGN0UnVuID0gc3RhdGljX2Nhc3Q8
Q1RSdW5SZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgocnVuQXJyYXksIHIpKTsKICAgICAgICAg
ICAgIEFTU0VSVChDRkdldFR5cGVJRChjdFJ1bikgPT0gQ1RSdW5HZXRUeXBlSUQoKSk7CiAKICAg
ICAgICAgICAgIENGRGljdGlvbmFyeVJlZiBhdHRyaWJ1dGVzID0gQ1RSdW5HZXRBdHRyaWJ1dGVz
KGN0UnVuKTsKICAgICAgICAgICAgIENURm9udFJlZiBydW5Gb250ID0gc3RhdGljX2Nhc3Q8Q1RG
b250UmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShhdHRyaWJ1dGVzLCBrQ1RGb250QXR0cmlidXRl
TmFtZSkpOwogICAgICAgICAgICAgYm9vbCBnb3RCYXNlRm9udCA9IENGRXF1YWwoZm9udEVxdWFs
aXR5T2JqZWN0LmdldCgpLCBGb250UGxhdGZvcm1EYXRhOjpvYmplY3RGb3JFcXVhbGl0eUNoZWNr
KHJ1bkZvbnQpLmdldCgpKTsKLSAgICAgICAgICAgIGlmIChnb3RCYXNlRm9udCB8fCBmb250RGF0
YS0+cGxhdGZvcm1EYXRhKCkuaXNDb21wb3NpdGVGb250UmVmZXJlbmNlKCkpIHsKKyAgICAgICAg
ICAgIGlmIChnb3RCYXNlRm9udCB8fCBmb250LT5wbGF0Zm9ybURhdGEoKS5pc0NvbXBvc2l0ZUZv
bnRSZWZlcmVuY2UoKSkgewogICAgICAgICAgICAgICAgIC8vIFRoaXMgcnVuIHVzZXMgdGhlIGZv
bnQgd2Ugd2FudC4gRXh0cmFjdCBnbHlwaHMuCiAgICAgICAgICAgICAgICAgQ0ZJbmRleCBnbHlw
aENvdW50ID0gQ1RSdW5HZXRHbHlwaENvdW50KGN0UnVuKTsKICAgICAgICAgICAgICAgICBjb25z
dCBDR0dseXBoKiBnbHlwaHMgPSBDVFJ1bkdldEdseXBoc1B0cihjdFJ1bik7CkBAIC0xNTcsMTMg
KzE1NywxMyBAQCBib29sIEdseXBoUGFnZTo6ZmlsbCh1bnNpZ25lZCBvZmZzZXQsIHVuCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2x5cGhzW2ldKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgob2Zmc2V0ICsgKHN0cmluZ0luZGlj
ZXNbaV0gLyBnbHlwaFN0ZXApLCBnbHlwaHNbaV0sIGZvbnREYXRhKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChvZmZzZXQgKyAoc3RyaW5nSW5kaWNl
c1tpXSAvIGdseXBoU3RlcCksIGdseXBoc1tpXSwgZm9udCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaGF2ZUdseXBocyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgIH0KICNpZiBVU0UoQVBQS0lUKQogICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBydW5TaW1w
bGUgPSBmb250RGF0YS0+Y29tcG9zaXRlRm9udFJlZmVyZW5jZUZvbnREYXRhKChOU0ZvbnQgKily
dW5Gb250KTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgRm9udCogcnVuU2ltcGxlID0gZm9u
dC0+Y29tcG9zaXRlRm9udFJlZmVyZW5jZUZvbnQoKE5TRm9udCAqKXJ1bkZvbnQpOwogICAgICAg
ICAgICAgICAgICAgICBpZiAocnVuU2ltcGxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKENGSW5kZXggaSA9IDA7IGkgPCBnbHlwaENvdW50OyArK2kpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoc3RyaW5nSW5kaWNlc1tpXSA+PSBzdGF0aWNfY2FzdDxDRkluZGV4
PihidWZmZXJMZW5ndGgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvU2ltcGxlRm9udERhdGFDb3JlVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhQ29yZVRleHQuY3BwCShy
ZXZpc2lvbiAxNzg1MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMv
U2ltcGxlRm9udERhdGFDb3JlVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNzAgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAxMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtv
dgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2ltcGxlRm9udERh
dGEuaCIKLQotI2lmICFQTEFURk9STShJT1MpCi0jaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNl
cy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+Ci0jZWxzZQotI2luY2x1ZGUgPENvcmVUZXh0L0NvcmVU
ZXh0Lmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1DRkRpY3Rpb25hcnlSZWYg
U2ltcGxlRm9udERhdGE6OmdldENGU3RyaW5nQXR0cmlidXRlcyhUeXBlc2V0dGluZ0ZlYXR1cmVz
IHR5cGVzZXR0aW5nRmVhdHVyZXMsIEZvbnRPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgY29uc3QK
LXsKLSAgICB1bnNpZ25lZCBrZXkgPSB0eXBlc2V0dGluZ0ZlYXR1cmVzICsgMTsKLSAgICBIYXNo
TWFwPHVuc2lnbmVkLCBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPj46OkFkZFJlc3VsdCBhZGRS
ZXN1bHQgPSBtX0NGU3RyaW5nQXR0cmlidXRlcy5hZGQoa2V5LCBSZXRhaW5QdHI8Q0ZEaWN0aW9u
YXJ5UmVmPigpKTsKLSAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiYgYXR0cmlidXRlc0Rp
Y3Rpb25hcnkgPSBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwotICAgIGlmICghYWRkUmVzdWx0
LmlzTmV3RW50cnkpCi0gICAgICAgIHJldHVybiBhdHRyaWJ1dGVzRGljdGlvbmFyeS5nZXQoKTsK
LQotICAgIGF0dHJpYnV0ZXNEaWN0aW9uYXJ5ID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGVN
dXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDQsICZrQ0ZDb3B5U3RyaW5nRGljdGlvbmFyeUtl
eUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKLSAgICBDRk11
dGFibGVEaWN0aW9uYXJ5UmVmIG11dGFibGVBdHRyaWJ1dGVzID0gKENGTXV0YWJsZURpY3Rpb25h
cnlSZWYpYXR0cmlidXRlc0RpY3Rpb25hcnkuZ2V0KCk7Ci0KLSAgICBDRkRpY3Rpb25hcnlTZXRW
YWx1ZShtdXRhYmxlQXR0cmlidXRlcywga0NURm9udEF0dHJpYnV0ZU5hbWUsIHBsYXRmb3JtRGF0
YSgpLmN0Rm9udCgpKTsKLQotICAgIGlmICghKHR5cGVzZXR0aW5nRmVhdHVyZXMgJiBLZXJuaW5n
KSkgewotICAgICAgICBjb25zdCBmbG9hdCB6ZXJvID0gMDsKLSAgICAgICAgc3RhdGljIENGTnVt
YmVyUmVmIHplcm9LZXJuaW5nVmFsdWUgPSBDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZh
dWx0LCBrQ0ZOdW1iZXJGbG9hdFR5cGUsICZ6ZXJvKTsKLSAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0
VmFsdWUobXV0YWJsZUF0dHJpYnV0ZXMsIGtDVEtlcm5BdHRyaWJ1dGVOYW1lLCB6ZXJvS2Vybmlu
Z1ZhbHVlKTsKLSAgICB9Ci0KLSAgICBib29sIGFsbG93TGlnYXR1cmVzID0gKG9yaWVudGF0aW9u
ID09IEhvcml6b250YWwgJiYgcGxhdGZvcm1EYXRhKCkuYWxsb3dzTGlnYXR1cmVzKCkpIHx8ICh0
eXBlc2V0dGluZ0ZlYXR1cmVzICYgTGlnYXR1cmVzKTsKLSAgICBpZiAoIWFsbG93TGlnYXR1cmVz
KSB7Ci0gICAgICAgIGNvbnN0IGludCB6ZXJvID0gMDsKLSAgICAgICAgc3RhdGljIENGTnVtYmVy
UmVmIGVzc2VudGlhbExpZ2F0dXJlc1ZhbHVlID0gQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9y
RGVmYXVsdCwga0NGTnVtYmVySW50VHlwZSwgJnplcm8pOwotICAgICAgICBDRkRpY3Rpb25hcnlT
ZXRWYWx1ZShtdXRhYmxlQXR0cmlidXRlcywga0NUTGlnYXR1cmVBdHRyaWJ1dGVOYW1lLCBlc3Nl
bnRpYWxMaWdhdHVyZXNWYWx1ZSk7Ci0gICAgfQotCi0gICAgaWYgKG9yaWVudGF0aW9uID09IFZl
cnRpY2FsKQotICAgICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShtdXRhYmxlQXR0cmlidXRlcywg
a0NUVmVydGljYWxGb3Jtc0F0dHJpYnV0ZU5hbWUsIGtDRkJvb2xlYW5UcnVlKTsKLQotICAgIHJl
dHVybiBhdHRyaWJ1dGVzRGljdGlvbmFyeS5nZXQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZv
bnREYXRhTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9TaW1wbGVGb250RGF0YU1hYy5tbQkocmV2aXNpb24gMTc4NTE1KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhTWFjLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDQ4MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1LCAy
MDA2LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292Ci0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNv
bmZpZy5oIgotI2ltcG9ydCAiU2ltcGxlRm9udERhdGEuaCIKLQotI2ltcG9ydCAiQmxvY2tFeGNl
cHRpb25zLmgiCi0jaW1wb3J0ICJDb2xvci5oIgotI2ltcG9ydCAiQ29yZUdyYXBoaWNzU1BJLmgi
Ci0jaW1wb3J0ICJDb3JlVGV4dFNQSS5oIgotI2ltcG9ydCAiRmxvYXRSZWN0LmgiCi0jaW1wb3J0
ICJGb250Q2FjaGUuaCIKLSNpbXBvcnQgIkZvbnRDYXNjYWRlLmgiCi0jaW1wb3J0ICJGb250RGVz
Y3JpcHRpb24uaCIKLSNpbXBvcnQgIlNoYXJlZEJ1ZmZlci5oIgotI2ltcG9ydCAiV2ViQ29yZVN5
c3RlbUludGVyZmFjZS5oIgotI2lmIFVTRShBUFBLSVQpCi0jaW1wb3J0IDxBcHBLaXQvQXBwS2l0
Lmg+Ci0jaW1wb3J0IDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4K
LSNlbHNlCi0jaW1wb3J0IDxDb3JlVGV4dC9Db3JlVGV4dC5oPgotI2VuZGlmCi0jaW1wb3J0IDxm
bG9hdC5oPgotI2ltcG9ydCA8dW5pY29kZS91Y2hhci5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlv
bnMuaD4KLSNpbXBvcnQgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLSNpbXBvcnQgPHd0Zi9SZXRhaW5Q
dHIuaD4KLQotI2lmICFQTEFURk9STShJT1MpCi1AaW50ZXJmYWNlIE5TRm9udCAoV2ViQXBwS2l0
U2VjcmV0QVBJKQotLSAoQk9PTClfaXNGYWtlRml4ZWRQaXRjaDsKLUBlbmQKLSNlbmRpZgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSNpZiBVU0UoQVBQS0lUKQotc3RhdGljIGJvb2wgZm9udEhh
c1ZlcnRpY2FsR2x5cGhzKENURm9udFJlZiBjdEZvbnQpCi17Ci0gICAgLy8gVGhlIGNoZWNrIGRv
ZXNuJ3QgbG9vayBuZWF0IGJ1dCB0aGlzIGlzIHdoYXQgQXBwS2l0IGRvZXMgZm9yIHZlcnRpY2Fs
IHdyaXRpbmcuLi4KLSAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gdGFibGVUYWdzID0gYWRvcHRD
RihDVEZvbnRDb3B5QXZhaWxhYmxlVGFibGVzKGN0Rm9udCwga0NURm9udFRhYmxlT3B0aW9uTm9P
cHRpb25zKSk7Ci0gICAgQ0ZJbmRleCBudW1UYWJsZXMgPSBDRkFycmF5R2V0Q291bnQodGFibGVU
YWdzLmdldCgpKTsKLSAgICBmb3IgKENGSW5kZXggaW5kZXggPSAwOyBpbmRleCA8IG51bVRhYmxl
czsgKytpbmRleCkgewotICAgICAgICBDVEZvbnRUYWJsZVRhZyB0YWcgPSAoQ1RGb250VGFibGVU
YWcpKHVpbnRwdHJfdClDRkFycmF5R2V0VmFsdWVBdEluZGV4KHRhYmxlVGFncy5nZXQoKSwgaW5k
ZXgpOwotICAgICAgICBpZiAodGFnID09IGtDVEZvbnRUYWJsZVZoZWEgfHwgdGFnID09IGtDVEZv
bnRUYWJsZVZPUkcpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi1zdGF0aWMgYm9vbCBpbml0Rm9udERhdGEoU2ltcGxlRm9udERhdGEqIGZv
bnREYXRhKQotewotICAgIGlmICghZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLmNnRm9udCgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIE5T
U3RyaW5nICp3ZWJGYWxsYmFja0ZvbnRGYW1pbHkodm9pZCkKLXsKLSAgICBzdGF0aWMgTlNTdHJp
bmcgKndlYkZhbGxiYWNrRm9udEZhbWlseSA9IFtbW05TRm9udCBzeXN0ZW1Gb250T2ZTaXplOjE2
LjBmXSBmYW1pbHlOYW1lXSByZXRhaW5dOwotICAgIHJldHVybiB3ZWJGYWxsYmFja0ZvbnRGYW1p
bHk7Ci19Ci0KLWNvbnN0IFNpbXBsZUZvbnREYXRhKiBTaW1wbGVGb250RGF0YTo6Y29tcG9zaXRl
Rm9udFJlZmVyZW5jZUZvbnREYXRhKE5TRm9udCAqa2V5KSBjb25zdAotewotICAgIGlmICgha2V5
IHx8IENGRXF1YWwoYWRvcHRDRihDVEZvbnRDb3B5UG9zdFNjcmlwdE5hbWUoQ1RGb250UmVmKGtl
eSkpKS5nZXQoKSwgQ0ZTVFIoIkxhc3RSZXNvcnQiKSkpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotCi0gICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKLSAgICAgICAgbV9kZXJpdmVkRm9udERh
dGEgPSBzdGQ6Om1ha2VfdW5pcXVlPERlcml2ZWRGb250RGF0YT4oaXNDdXN0b21Gb250KCkpOwot
Ci0gICAgYXV0byBhZGRSZXN1bHQgPSBtX2Rlcml2ZWRGb250RGF0YS0+Y29tcG9zaXRlRm9udFJl
ZmVyZW5jZXMuYWRkKGtleSwgbnVsbHB0cik7Ci0gICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5
KSB7Ci0gICAgICAgIGJvb2wgaXNVc2luZ1ByaW50ZXJGb250ID0gcGxhdGZvcm1EYXRhKCkuaXNQ
cmludGVyRm9udCgpOwotICAgICAgICBOU0ZvbnQgKnN1YnN0aXR1dGVGb250ID0gaXNVc2luZ1By
aW50ZXJGb250ID8gW2tleSBwcmludGVyRm9udF0gOiBba2V5IHNjcmVlbkZvbnRdOwotCi0gICAg
ICAgIENURm9udFN5bWJvbGljVHJhaXRzIHRyYWl0cyA9IENURm9udEdldFN5bWJvbGljVHJhaXRz
KChDVEZvbnRSZWYpc3Vic3RpdHV0ZUZvbnQpOwotICAgICAgICBib29sIHN5bnRoZXRpY0JvbGQg
PSBwbGF0Zm9ybURhdGEoKS5zeW50aGV0aWNCb2xkKCkgJiYgISh0cmFpdHMgJiBrQ1RGb250Qm9s
ZFRyYWl0KTsKLSAgICAgICAgYm9vbCBzeW50aGV0aWNPYmxpcXVlID0gcGxhdGZvcm1EYXRhKCku
c3ludGhldGljT2JsaXF1ZSgpICYmICEodHJhaXRzICYga0NURm9udEl0YWxpY1RyYWl0KTsKLQot
ICAgICAgICBGb250UGxhdGZvcm1EYXRhIHN1YnN0aXR1dGVQbGF0Zm9ybShzdWJzdGl0dXRlRm9u
dCwgcGxhdGZvcm1EYXRhKCkuc2l6ZSgpLCBpc1VzaW5nUHJpbnRlckZvbnQsIHN5bnRoZXRpY0Jv
bGQsIHN5bnRoZXRpY09ibGlxdWUsIHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCksIHBsYXRm
b3JtRGF0YSgpLndpZHRoVmFyaWFudCgpKTsKLSAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZSA9IFNpbXBsZUZvbnREYXRhOjpjcmVhdGUoc3Vic3RpdHV0ZVBsYXRmb3JtLCBpc0N1c3Rv
bUZvbnQoKSk7Ci0gICAgfQotICAgIHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdl
dCgpOwotfQotCi12b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUluaXQoKQotewotICAgIG1f
c3ludGhldGljQm9sZE9mZnNldCA9IG1fcGxhdGZvcm1EYXRhLm1fc3ludGhldGljQm9sZCA/IDEu
MGYgOiAwLmY7Ci0KLSAgICBib29sIGZhaWxlZFNldHVwID0gZmFsc2U7Ci0gICAgaWYgKCFpbml0
Rm9udERhdGEodGhpcykpIHsKLSAgICAgICAgLy8gQWNrISBTb21ldGhpbmcgdmVyeSBiYWQgaGFw
cGVuZWQsIGxpa2UgYSBjb3JydXB0IGZvbnQuCi0gICAgICAgIC8vIFRyeSBsb29raW5nIGZvciBh
biBhbHRlcm5hdGUgJ2Jhc2UnIGZvbnQgZm9yIHRoaXMgcmVuZGVyZXIuCi0KLSAgICAgICAgLy8g
U3BlY2lhbCBjYXNlIGhhY2sgdG8gdXNlICJUaW1lcyBOZXcgUm9tYW4iIGluIHBsYWNlIG9mICJU
aW1lcyIuCi0gICAgICAgIC8vICJUaW1lcyBSTyIgaXMgYSBjb21tb24gZm9udCB3aG9zZSBmYW1p
bHkgbmFtZSBpcyAiVGltZXMiLgotICAgICAgICAvLyBJdCBvdmVycmlkZXMgdGhlIG5vcm1hbCAi
VGltZXMiIGZhbWlseSBmb250LgotICAgICAgICAvLyBJdCBhbHNvIGFwcGVhcnMgdG8gaGF2ZSBh
IGNvcnJ1cHQgcmVndWxhciB2YXJpYW50LgotICAgICAgICBOU1N0cmluZyAqZmFsbGJhY2tGb250
RmFtaWx5OwotICAgICAgICBpZiAoW1ttX3BsYXRmb3JtRGF0YS5uc0ZvbnQoKSBmYW1pbHlOYW1l
XSBpc0VxdWFsOkAiVGltZXMiXSkKLSAgICAgICAgICAgIGZhbGxiYWNrRm9udEZhbWlseSA9IEAi
VGltZXMgTmV3IFJvbWFuIjsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZmFsbGJhY2tGb250
RmFtaWx5ID0gd2ViRmFsbGJhY2tGb250RmFtaWx5KCk7Ci0gICAgICAgIAotICAgICAgICAvLyBU
cnkgc2V0dGluZyB1cCB0aGUgYWx0ZXJuYXRlIGZvbnQuCi0gICAgICAgIC8vIFRoaXMgaXMgYSBs
YXN0IGRpdGNoIGVmZm9ydCB0byB1c2UgYSBzdWJzdGl0dXRlIGZvbnQgd2hlbiBzb21ldGhpbmcg
aGFzIGdvbmUgd3JvbmcuCi0jaWYgIUVSUk9SX0RJU0FCTEVECi0gICAgICAgIFJldGFpblB0cjxO
U0ZvbnQ+IGluaXRpYWxGb250ID0gbV9wbGF0Zm9ybURhdGEubnNGb250KCk7Ci0jZW5kaWYKLSAg
ICAgICAgaWYgKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSkKLSAgICAgICAgICAgIG1fcGxhdGZvcm1E
YXRhLnNldE5TRm9udChbW05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJdIGNvbnZlcnRG
b250Om1fcGxhdGZvcm1EYXRhLm5zRm9udCgpIHRvRmFtaWx5OmZhbGxiYWNrRm9udEZhbWlseV0p
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3BsYXRmb3JtRGF0YS5zZXROU0ZvbnQoW05T
Rm9udCBmb250V2l0aE5hbWU6ZmFsbGJhY2tGb250RmFtaWx5IHNpemU6bV9wbGF0Zm9ybURhdGEu
c2l6ZSgpXSk7Ci0gICAgICAgIGlmICghaW5pdEZvbnREYXRhKHRoaXMpKSB7Ci0gICAgICAgICAg
ICBpZiAoW2ZhbGxiYWNrRm9udEZhbWlseSBpc0VxdWFsOkAiVGltZXMgTmV3IFJvbWFuIl0pIHsK
LSAgICAgICAgICAgICAgICAvLyBPSywgY291bGRuJ3Qgc2V0dXAgVGltZXMgTmV3IFJvbWFuIGFz
IGFuIGFsdGVybmF0ZSB0byBUaW1lcywgZmFsbGJhY2sKLSAgICAgICAgICAgICAgICAvLyBvbiB0
aGUgc3lzdGVtIGZvbnQuICBJZiB0aGlzIGZhaWxzIHdlIGhhdmUgbm8gYWx0ZXJuYXRpdmUgbGVm
dC4KLSAgICAgICAgICAgICAgICBtX3BsYXRmb3JtRGF0YS5zZXROU0ZvbnQoW1tOU0ZvbnRNYW5h
Z2VyIHNoYXJlZEZvbnRNYW5hZ2VyXSBjb252ZXJ0Rm9udDptX3BsYXRmb3JtRGF0YS5uc0ZvbnQo
KSB0b0ZhbWlseTp3ZWJGYWxsYmFja0ZvbnRGYW1pbHkoKV0pOwotICAgICAgICAgICAgICAgIGlm
ICghaW5pdEZvbnREYXRhKHRoaXMpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFdlIHRyaWVk
LCBUaW1lcywgVGltZXMgTmV3IFJvbWFuLCBhbmQgdGhlIHN5c3RlbSBmb250LiBObyBqb3kuIFdl
IGhhdmUgdG8gZ2l2ZSB1cC4KLSAgICAgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJ1bmFibGUg
dG8gaW5pdGlhbGl6ZSB3aXRoIGZvbnQgJUAiLCBpbml0aWFsRm9udC5nZXQoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGZhaWxlZFNldHVwID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIFdlIHRyaWVkIHRoZSByZXF1ZXN0
ZWQgZm9udCBhbmQgdGhlIHN5c3RlbSBmb250LiBObyBqb3kuIFdlIGhhdmUgdG8gZ2l2ZSB1cC4K
LSAgICAgICAgICAgICAgICBMT0dfRVJST1IoInVuYWJsZSB0byBpbml0aWFsaXplIHdpdGggZm9u
dCAlQCIsIGluaXRpYWxGb250LmdldCgpKTsKLSAgICAgICAgICAgICAgICBmYWlsZWRTZXR1cCA9
IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBSZXBvcnQgdGhl
IHByb2JsZW0uCi0gICAgICAgIExPR19FUlJPUigiQ29ycnVwdCBmb250IGRldGVjdGVkLCB1c2lu
ZyAlQCBpbiBwbGFjZSBvZiAlQC4iLAotICAgICAgICAgICAgW21fcGxhdGZvcm1EYXRhLm5zRm9u
dCgpIGZhbWlseU5hbWVdLCBbaW5pdGlhbEZvbnQuZ2V0KCkgZmFtaWx5TmFtZV0pOwotICAgIH0K
LQotICAgIC8vIElmIGFsbCBlbHNlIGZhaWxzLCB0cnkgdG8gc2V0IHVwIHVzaW5nIHRoZSBzeXN0
ZW0gZm9udC4KLSAgICAvLyBUaGlzIGlzIHByb2JhYmx5IGJlY2F1c2UgVGltZXMgYW5kIFRpbWVz
IE5ldyBSb21hbiBhcmUgYm90aCB1bmF2YWlsYWJsZS4KLSAgICBpZiAoZmFpbGVkU2V0dXApIHsK
LSAgICAgICAgbV9wbGF0Zm9ybURhdGEuc2V0TlNGb250KFtOU0ZvbnQgc3lzdGVtRm9udE9mU2l6
ZTpbbV9wbGF0Zm9ybURhdGEubnNGb250KCkgcG9pbnRTaXplXV0pOwotICAgICAgICBMT0dfRVJS
T1IoImZhaWxlZCB0byBzZXQgdXAgZm9udCwgdXNpbmcgc3lzdGVtIGZvbnQgJXMiLCBtX3BsYXRm
b3JtRGF0YS5mb250KCkpOwotICAgICAgICBpbml0Rm9udERhdGEodGhpcyk7Ci0gICAgfQotCi0j
aWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA9PSAxMDkwCi0gICAgLy8gV29yayBh
cm91bmQgPHJkYXI6Ly9wcm9ibGVtLzE5NDMzNDkwPgotICAgIENHR2x5cGggZHVtbXlHbHlwaHNb
XSA9IHswLCAwfTsKLSAgICBDR1NpemUgZHVtbXlTaXplW10gPSB7Q0dTaXplTWFrZSgwLCAwKSwg
Q0dTaXplTWFrZSgwLCAwKX07Ci0gICAgQ1RGb250VHJhbnNmb3JtR2x5cGhzKG1fcGxhdGZvcm1E
YXRhLmN0Rm9udCgpLCBkdW1teUdseXBocywgZHVtbXlTaXplLCAyLCBrQ1RGb250VHJhbnNmb3Jt
QXBwbHlQb3NpdGlvbmluZyB8IGtDVEZvbnRUcmFuc2Zvcm1BcHBseVNoYXBpbmcpOwotI2VuZGlm
Ci0gICAgCi0gICAgaW50IGlBc2NlbnQ7Ci0gICAgaW50IGlEZXNjZW50OwotICAgIGludCBpQ2Fw
SGVpZ2h0OwotICAgIGludCBpTGluZUdhcDsKLSAgICB1bnNpZ25lZCB1bml0c1BlckVtOwotICAg
IGlBc2NlbnQgPSBDR0ZvbnRHZXRBc2NlbnQobV9wbGF0Zm9ybURhdGEuY2dGb250KCkpOwotICAg
IC8vIFNvbWUgZm9udHMgZXJyb25lb3VzbHkgc3BlY2lmeSBhIHBvc2l0aXZlIGRlc2NlbmRlciB2
YWx1ZS4gV2UgZm9sbG93IENvcmUgVGV4dCBpbiBhc3N1bWluZyB0aGF0Ci0gICAgLy8gc3VjaCBm
b250cyBtZWFudCB0aGUgc2FtZSBkaXN0YW5jZSwgYnV0IGluIHRoZSByZXZlcnNlIGRpcmVjdGlv
bi4KLSAgICBpRGVzY2VudCA9IC1hYnMoQ0dGb250R2V0RGVzY2VudChtX3BsYXRmb3JtRGF0YS5j
Z0ZvbnQoKSkpOwotICAgIGlDYXBIZWlnaHQgPSBDR0ZvbnRHZXRDYXBIZWlnaHQobV9wbGF0Zm9y
bURhdGEuY2dGb250KCkpOwotICAgIGlMaW5lR2FwID0gQ0dGb250R2V0TGVhZGluZyhtX3BsYXRm
b3JtRGF0YS5jZ0ZvbnQoKSk7Ci0gICAgdW5pdHNQZXJFbSA9IENHRm9udEdldFVuaXRzUGVyRW0o
bV9wbGF0Zm9ybURhdGEuY2dGb250KCkpOwotCi0gICAgZmxvYXQgcG9pbnRTaXplID0gbV9wbGF0
Zm9ybURhdGEubV9zaXplOwotICAgIGZsb2F0IGFzY2VudCA9IHNjYWxlRW1Ub1VuaXRzKGlBc2Nl
bnQsIHVuaXRzUGVyRW0pICogcG9pbnRTaXplOwotICAgIGZsb2F0IGRlc2NlbnQgPSAtc2NhbGVF
bVRvVW5pdHMoaURlc2NlbnQsIHVuaXRzUGVyRW0pICogcG9pbnRTaXplOwotICAgIGZsb2F0IGNh
cEhlaWdodCA9IHNjYWxlRW1Ub1VuaXRzKGlDYXBIZWlnaHQsIHVuaXRzUGVyRW0pICogcG9pbnRT
aXplOwotICAgIAotICAgIGZsb2F0IGxpbmVHYXAgPSBzY2FsZUVtVG9Vbml0cyhpTGluZUdhcCwg
dW5pdHNQZXJFbSkgKiBwb2ludFNpemU7Ci0KLSAgICAvLyBXZSBuZWVkIHRvIGFkanVzdCBUaW1l
cywgSGVsdmV0aWNhLCBhbmQgQ291cmllciB0byBjbG9zZWx5IG1hdGNoIHRoZQotICAgIC8vIHZl
cnRpY2FsIG1ldHJpY3Mgb2YgdGhlaXIgTWljcm9zb2Z0IGNvdW50ZXJwYXJ0cyB0aGF0IGFyZSB0
aGUgZGUgZmFjdG8KLSAgICAvLyB3ZWIgc3RhbmRhcmQuIFRoZSBBcHBLaXQgYWRqdXN0bWVudCBv
ZiAyMCUgaXMgdG9vIGJpZyBhbmQgaXMKLSAgICAvLyBpbmNvcnJlY3RseSBhZGRlZCB0byBsaW5l
IHNwYWNpbmcsIHNvIHdlIHVzZSBhIDE1JSBhZGp1c3RtZW50IGluc3RlYWQKLSAgICAvLyBhbmQg
YWRkIGl0IHRvIHRoZSBhc2NlbnQuCi0gICAgTlNTdHJpbmcgKmZhbWlseU5hbWUgPSBbbV9wbGF0
Zm9ybURhdGEubnNGb250KCkgZmFtaWx5TmFtZV07Ci0gICAgaWYgKFtmYW1pbHlOYW1lIGlzRXF1
YWxUb1N0cmluZzpAIlRpbWVzIl0gfHwgW2ZhbWlseU5hbWUgaXNFcXVhbFRvU3RyaW5nOkAiSGVs
dmV0aWNhIl0gfHwgW2ZhbWlseU5hbWUgaXNFcXVhbFRvU3RyaW5nOkAiQ291cmllciJdKQotICAg
ICAgICBhc2NlbnQgKz0gZmxvb3JmKCgoYXNjZW50ICsgZGVzY2VudCkgKiAwLjE1ZikgKyAwLjVm
KTsKLQotICAgIC8vIENvbXB1dGUgYW5kIHN0b3JlIGxpbmUgc3BhY2luZywgYmVmb3JlIHRoZSBs
aW5lIG1ldHJpY3MgaGFja3MgYXJlIGFwcGxpZWQuCi0gICAgbV9mb250TWV0cmljcy5zZXRMaW5l
U3BhY2luZyhscm91bmRmKGFzY2VudCkgKyBscm91bmRmKGRlc2NlbnQpICsgbHJvdW5kZihsaW5l
R2FwKSk7Ci0KLSAgICAvLyBIYWNrIEhpcmFnaW5vIGxpbmUgbWV0cmljcyB0byBhbGxvdyByb29t
IGZvciBtYXJrZWQgdGV4dCB1bmRlcmxpbmVzLgotICAgIC8vIDxyZGFyOi8vcHJvYmxlbS81Mzg2
MTgzPgotICAgIGlmIChkZXNjZW50IDwgMyAmJiBsaW5lR2FwID49IDMgJiYgW2ZhbWlseU5hbWUg
aGFzUHJlZml4OkAiSGlyYWdpbm8iXSkgewotICAgICAgICBsaW5lR2FwIC09IDMgLSBkZXNjZW50
OwotICAgICAgICBkZXNjZW50ID0gMzsKLSAgICB9Ci0gICAgCi0gICAgaWYgKHBsYXRmb3JtRGF0
YSgpLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwgJiYgIWlzVGV4dE9yaWVudGF0aW9uRmFsbGJh
Y2soKSkKLSAgICAgICAgbV9oYXNWZXJ0aWNhbEdseXBocyA9IGZvbnRIYXNWZXJ0aWNhbEdseXBo
cyhtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSk7Ci0KLSAgICBmbG9hdCB4SGVpZ2h0OwotCi0gICAg
aWYgKHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbCkgewotICAgICAg
ICAvLyBNZWFzdXJlIHRoZSBhY3R1YWwgY2hhcmFjdGVyICJ4Iiwgc2luY2UgaXQncyBwb3NzaWJs
ZSBmb3IgaXQgdG8gZXh0ZW5kIGJlbG93IHRoZSBiYXNlbGluZSwgYW5kIHdlIG5lZWQgdGhlCi0g
ICAgICAgIC8vIHJlcG9ydGVkIHgtaGVpZ2h0IHRvIG9ubHkgaW5jbHVkZSB0aGUgcG9ydGlvbiBv
ZiB0aGUgZ2x5cGggdGhhdCBpcyBhYm92ZSB0aGUgYmFzZWxpbmUuCi0gICAgICAgIE5TR2x5cGgg
eEdseXBoID0gZ2x5cGhGb3JDaGFyYWN0ZXIoJ3gnKTsKLSAgICAgICAgaWYgKHhHbHlwaCkKLSAg
ICAgICAgICAgIHhIZWlnaHQgPSAtQ0dSZWN0R2V0TWluWShwbGF0Zm9ybUJvdW5kc0ZvckdseXBo
KHhHbHlwaCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB4SGVpZ2h0ID0gc2NhbGVFbVRv
VW5pdHMoQ0dGb250R2V0WEhlaWdodChtX3BsYXRmb3JtRGF0YS5jZ0ZvbnQoKSksIHVuaXRzUGVy
RW0pICogcG9pbnRTaXplOwotICAgIH0gZWxzZQotICAgICAgICB4SGVpZ2h0ID0gdmVydGljYWxS
aWdodE9yaWVudGF0aW9uRm9udERhdGEoKS0+Zm9udE1ldHJpY3MoKS54SGVpZ2h0KCk7Ci0KLSAg
ICBtX2ZvbnRNZXRyaWNzLnNldFVuaXRzUGVyRW0odW5pdHNQZXJFbSk7Ci0gICAgbV9mb250TWV0
cmljcy5zZXRBc2NlbnQoYXNjZW50KTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldERlc2NlbnQoZGVz
Y2VudCk7Ci0gICAgbV9mb250TWV0cmljcy5zZXRDYXBIZWlnaHQoY2FwSGVpZ2h0KTsKLSAgICBt
X2ZvbnRNZXRyaWNzLnNldExpbmVHYXAobGluZUdhcCk7Ci0gICAgbV9mb250TWV0cmljcy5zZXRY
SGVpZ2h0KHhIZWlnaHQpOwotfQotCi1zdGF0aWMgQ0ZEYXRhUmVmIGNvcHlGb250VGFibGVGb3JU
YWcoRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhLCBGb3VyQ2hhckNvZGUgdGFibGVOYW1l
KQotewotICAgIHJldHVybiBDR0ZvbnRDb3B5VGFibGVGb3JUYWcocGxhdGZvcm1EYXRhLmNnRm9u
dCgpLCB0YWJsZU5hbWUpOwotfQotCi12b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUNoYXJX
aWR0aEluaXQoKQotewotICAgIG1fYXZnQ2hhcldpZHRoID0gMDsKLSAgICBtX21heENoYXJXaWR0
aCA9IDA7Ci0gICAgCi0gICAgUmV0YWluUHRyPENGRGF0YVJlZj4gb3MyVGFibGUgPSBhZG9wdENG
KGNvcHlGb250VGFibGVGb3JUYWcobV9wbGF0Zm9ybURhdGEsICdPUy8yJykpOwotICAgIGlmIChv
czJUYWJsZSAmJiBDRkRhdGFHZXRMZW5ndGgob3MyVGFibGUuZ2V0KCkpID49IDQpIHsKLSAgICAg
ICAgY29uc3QgVUludDgqIG9zMiA9IENGRGF0YUdldEJ5dGVQdHIob3MyVGFibGUuZ2V0KCkpOwot
ICAgICAgICBTSW50MTYgb3MyQXZnQ2hhcldpZHRoID0gb3MyWzJdICogMjU2ICsgb3MyWzNdOwot
ICAgICAgICBtX2F2Z0NoYXJXaWR0aCA9IHNjYWxlRW1Ub1VuaXRzKG9zMkF2Z0NoYXJXaWR0aCwg
bV9mb250TWV0cmljcy51bml0c1BlckVtKCkpICogbV9wbGF0Zm9ybURhdGEubV9zaXplOwotICAg
IH0KLQotICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGhlYWRUYWJsZSA9IGFkb3B0Q0YoY29weUZv
bnRUYWJsZUZvclRhZyhtX3BsYXRmb3JtRGF0YSwgJ2hlYWQnKSk7Ci0gICAgaWYgKGhlYWRUYWJs
ZSAmJiBDRkRhdGFHZXRMZW5ndGgoaGVhZFRhYmxlLmdldCgpKSA+PSA0MikgewotICAgICAgICBj
b25zdCBVSW50OCogaGVhZCA9IENGRGF0YUdldEJ5dGVQdHIoaGVhZFRhYmxlLmdldCgpKTsKLSAg
ICAgICAgdXNob3J0IHV4TWluID0gaGVhZFszNl0gKiAyNTYgKyBoZWFkWzM3XTsKLSAgICAgICAg
dXNob3J0IHV4TWF4ID0gaGVhZFs0MF0gKiAyNTYgKyBoZWFkWzQxXTsKLSAgICAgICAgU0ludDE2
IHhNaW4gPSBzdGF0aWNfY2FzdDxTSW50MTY+KHV4TWluKTsKLSAgICAgICAgU0ludDE2IHhNYXgg
PSBzdGF0aWNfY2FzdDxTSW50MTY+KHV4TWF4KTsKLSAgICAgICAgZmxvYXQgZGlmZiA9IHN0YXRp
Y19jYXN0PGZsb2F0Pih4TWF4IC0geE1pbik7Ci0gICAgICAgIG1fbWF4Q2hhcldpZHRoID0gc2Nh
bGVFbVRvVW5pdHMoZGlmZiwgbV9mb250TWV0cmljcy51bml0c1BlckVtKCkpICogbV9wbGF0Zm9y
bURhdGEubV9zaXplOwotICAgIH0KLQotICAgIC8vIEZhbGxiYWNrIHRvIGEgY3Jvc3MtcGxhdGZv
cm0gZXN0aW1hdGUsIHdoaWNoIHdpbGwgcG9wdWxhdGUgdGhlc2UgdmFsdWVzIGlmIHRoZXkgYXJl
IG5vbi1wb3NpdGl2ZS4KLSAgICBpbml0Q2hhcldpZHRocygpOwotfQotI2VuZGlmIC8vIFVTRShB
UFBLSVQpCi0KLXZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtRGVzdHJveSgpCi17Ci19Ci0K
LSNpZiAhUExBVEZPUk0oSU9TKQotUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9u
dERhdGE6OnBsYXRmb3JtQ3JlYXRlU2NhbGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAotewotICAgIGlmIChp
c0N1c3RvbUZvbnQoKSkgewotICAgICAgICBGb250UGxhdGZvcm1EYXRhIHNjYWxlZEZvbnREYXRh
KG1fcGxhdGZvcm1EYXRhKTsKLSAgICAgICAgc2NhbGVkRm9udERhdGEubV9zaXplID0gc2NhbGVk
Rm9udERhdGEubV9zaXplICogc2NhbGVGYWN0b3I7Ci0gICAgICAgIHJldHVybiBTaW1wbGVGb250
RGF0YTo6Y3JlYXRlKHNjYWxlZEZvbnREYXRhLCB0cnVlLCBmYWxzZSk7Ci0gICAgfQotCi0gICAg
QkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIGZsb2F0IHNpemUgPSBtX3BsYXRmb3Jt
RGF0YS5zaXplKCkgKiBzY2FsZUZhY3RvcjsKLSAgICBGb250UGxhdGZvcm1EYXRhIHNjYWxlZEZv
bnREYXRhKFtbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl0gY29udmVydEZvbnQ6bV9w
bGF0Zm9ybURhdGEubnNGb250KCkgdG9TaXplOnNpemVdLCBzaXplLCBtX3BsYXRmb3JtRGF0YS5p
c1ByaW50ZXJGb250KCksIGZhbHNlLCBmYWxzZSwgbV9wbGF0Zm9ybURhdGEub3JpZW50YXRpb24o
KSk7Ci0KLSAgICAvLyBBcHBLaXQgcmVzZXRzIHRoZSB0eXBlIGluZm9ybWF0aW9uIChzY3JlZW4v
cHJpbnRlcikgd2hlbiB5b3UgY29udmVydCBhIGZvbnQgdG8gYSBkaWZmZXJlbnQgc2l6ZS4KLSAg
ICAvLyBXZSBoYXZlIHRvIGZpeCB1cCB0aGUgZm9udCB0aGF0IHdlJ3JlIGhhbmRlZCBiYWNrLgot
ICAgIHNjYWxlZEZvbnREYXRhLnNldE5TRm9udChmb250RGVzY3JpcHRpb24udXNlUHJpbnRlckZv
bnQoKSA/IFtzY2FsZWRGb250RGF0YS5uc0ZvbnQoKSBwcmludGVyRm9udF0gOiBbc2NhbGVkRm9u
dERhdGEubnNGb250KCkgc2NyZWVuRm9udF0pOwotCi0gICAgaWYgKHNjYWxlZEZvbnREYXRhLmZv
bnQoKSkgewotICAgICAgICBOU0ZvbnRNYW5hZ2VyICpmb250TWFuYWdlciA9IFtOU0ZvbnRNYW5h
Z2VyIHNoYXJlZEZvbnRNYW5hZ2VyXTsKLSAgICAgICAgTlNGb250VHJhaXRNYXNrIGZvbnRUcmFp
dHMgPSBbZm9udE1hbmFnZXIgdHJhaXRzT2ZGb250Om1fcGxhdGZvcm1EYXRhLm5zRm9udCgpXTsK
LQotICAgICAgICBpZiAobV9wbGF0Zm9ybURhdGEubV9zeW50aGV0aWNCb2xkKQotICAgICAgICAg
ICAgZm9udFRyYWl0cyB8PSBOU0JvbGRGb250TWFzazsKLSAgICAgICAgaWYgKG1fcGxhdGZvcm1E
YXRhLm1fc3ludGhldGljT2JsaXF1ZSkKLSAgICAgICAgICAgIGZvbnRUcmFpdHMgfD0gTlNJdGFs
aWNGb250TWFzazsKLQotICAgICAgICBOU0ZvbnRUcmFpdE1hc2sgc2NhbGVkRm9udFRyYWl0cyA9
IFtmb250TWFuYWdlciB0cmFpdHNPZkZvbnQ6c2NhbGVkRm9udERhdGEubnNGb250KCldOwotICAg
ICAgICBzY2FsZWRGb250RGF0YS5tX3N5bnRoZXRpY0JvbGQgPSAoZm9udFRyYWl0cyAmIE5TQm9s
ZEZvbnRNYXNrKSAmJiAhKHNjYWxlZEZvbnRUcmFpdHMgJiBOU0JvbGRGb250TWFzayk7Ci0gICAg
ICAgIHNjYWxlZEZvbnREYXRhLm1fc3ludGhldGljT2JsaXF1ZSA9IChmb250VHJhaXRzICYgTlNJ
dGFsaWNGb250TWFzaykgJiYgIShzY2FsZWRGb250VHJhaXRzICYgTlNJdGFsaWNGb250TWFzayk7
Ci0KLSAgICAgICAgcmV0dXJuIGZvbnRDYWNoZSgpLmZvbnRGb3JQbGF0Zm9ybURhdGEoc2NhbGVk
Rm9udERhdGEpOwotICAgIH0KLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotCi0gICAg
cmV0dXJuIDA7Ci19Ci0KLXZvaWQgU2ltcGxlRm9udERhdGE6OmRldGVybWluZVBpdGNoKCkKLXsK
LSAgICBOU0ZvbnQqIGYgPSBtX3BsYXRmb3JtRGF0YS5uc0ZvbnQoKTsKLSAgICAvLyBTcGVjaWFs
IGNhc2UgT3Nha2EtTW9uby4KLSAgICAvLyBBY2NvcmRpbmcgdG8gPHJkYXI6Ly9wcm9ibGVtLzM5
OTk0Njc+LCB3ZSBzaG91bGQgdHJlYXQgT3Nha2EtTW9ubyBhcyBmaXhlZCBwaXRjaC4KLSAgICAv
LyBOb3RlIHRoYXQgdGhlIEFwcEtpdCBkb2VzIG5vdCByZXBvcnQgT3Nha2EtTW9ubyBhcyBmaXhl
ZCBwaXRjaC4KLQotICAgIC8vIFNwZWNpYWwgY2FzZSBNUy1QR290aGljLgotICAgIC8vIEFjY29y
ZGluZyB0byA8cmRhcjovL3Byb2JsZW0vNDAzMjkzOD4sIHdlIHNob3VsZCBub3QgdHJlYXQgTVMt
UEdvdGhpYyBhcyBmaXhlZCBwaXRjaC4KLSAgICAvLyBOb3RlIHRoYXQgQXBwS2l0IGRvZXMgcmVw
b3J0IE1TLVBHb3RoaWMgYXMgZml4ZWQgcGl0Y2guCi0KLSAgICAvLyBTcGVjaWFsIGNhc2UgTW9u
b3R5cGVDb3JzaXZhCi0gICAgLy8gQWNjb3JkaW5nIHRvIDxyZGFyOi8vcHJvYmxlbS81NDU0NzA0
Piwgd2Ugc2hvdWxkIG5vdCB0cmVhdCBNb25vdHlwZUNvcnNpdmEgYXMgZml4ZWQgcGl0Y2guCi0g
ICAgLy8gTm90ZSB0aGF0IEFwcEtpdCBkb2VzIHJlcG9ydCBNb25vdHlwZUNvcnNpdmEgYXMgZml4
ZWQgcGl0Y2guCi0KLSAgICBOU1N0cmluZyAqbmFtZSA9IFtmIGZvbnROYW1lXTsKLSAgICBtX3Ry
ZWF0QXNGaXhlZFBpdGNoID0gKFtmIGlzRml4ZWRQaXRjaF0gfHwgW2YgX2lzRmFrZUZpeGVkUGl0
Y2hdIHx8Ci0gICAgICAgICAgIFtuYW1lIGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmU6QCJPc2FrYS1N
b25vIl0gPT0gTlNPcmRlcmVkU2FtZSkgJiYKLSAgICAgICAgICAgW25hbWUgY2FzZUluc2Vuc2l0
aXZlQ29tcGFyZTpAIk1TLVBHb3RoaWMiXSAhPSBOU09yZGVyZWRTYW1lICYmCi0gICAgICAgICAg
IFtuYW1lIGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmU6QCJNb25vdHlwZUNvcnNpdmEiXSAhPSBOU09y
ZGVyZWRTYW1lOwotfQotI2VuZGlmIC8vICFQTEFURk9STShJT1MpCi0KLUZsb2F0UmVjdCBTaW1w
bGVGb250RGF0YTo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKLXsK
LSAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3g7Ci0gICAgYm91bmRpbmdCb3ggPSBDVEZvbnRHZXRC
b3VuZGluZ1JlY3RzRm9yR2x5cGhzKG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBwbGF0Zm9ybURh
dGEoKS5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsID8ga0NURm9udFZlcnRpY2FsT3JpZW50YXRp
b24gOiBrQ1RGb250SG9yaXpvbnRhbE9yaWVudGF0aW9uLCAmZ2x5cGgsIDAsIDEpOwotICAgIGJv
dW5kaW5nQm94LnNldFkoLWJvdW5kaW5nQm94Lm1heFkoKSk7Ci0gICAgaWYgKG1fc3ludGhldGlj
Qm9sZE9mZnNldCkKLSAgICAgICAgYm91bmRpbmdCb3guc2V0V2lkdGgoYm91bmRpbmdCb3gud2lk
dGgoKSArIG1fc3ludGhldGljQm9sZE9mZnNldCk7Ci0KLSAgICByZXR1cm4gYm91bmRpbmdCb3g7
Ci19Ci0KLSNpZiBQTEFURk9STShNQUMpCi1pbmxpbmUgQ0dGb250UmVuZGVyaW5nU3R5bGUgU2lt
cGxlRm9udERhdGE6OnJlbmRlcmluZ1N0eWxlKCkgY29uc3QKLXsKLSAgICBDR0ZvbnRSZW5kZXJp
bmdTdHlsZSBzdHlsZSA9IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZUFudGlhbGlhc2luZyB8IGtDR0Zv
bnRSZW5kZXJpbmdTdHlsZVN1YnBpeGVsUG9zaXRpb25pbmcgfCBrQ0dGb250UmVuZGVyaW5nU3R5
bGVTdWJwaXhlbFF1YW50aXphdGlvbjsKLSAgICBOU0ZvbnQgKmZvbnQgPSBwbGF0Zm9ybURhdGEo
KS5uc0ZvbnQoKTsKLSAgICBpZiAoZm9udCkgewotICAgICAgICBzd2l0Y2ggKFtmb250IHJlbmRl
cmluZ01vZGVdKSB7Ci0gICAgICAgIGNhc2UgTlNGb250SW50ZWdlckFkdmFuY2VtZW50c1JlbmRl
cmluZ01vZGU6Ci0gICAgICAgICAgICBzdHlsZSA9IDA7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBOU0ZvbnRBbnRpYWxpYXNlZEludGVnZXJBZHZhbmNlbWVudHNSZW5kZXJpbmdN
b2RlOgotICAgICAgICAgICAgc3R5bGUgPSBrQ0dGb250UmVuZGVyaW5nU3R5bGVBbnRpYWxpYXNp
bmc7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBzdHlsZTsKLX0KLQotaW5saW5lIGJv
b2wgU2ltcGxlRm9udERhdGE6OmFkdmFuY2VGb3JDb2xvckJpdG1hcEZvbnQoR2x5cGggZ2x5cGgs
IENHU2l6ZSYgYWR2YW5jZSkgY29uc3QKLXsKLSAgICBOU0ZvbnQgKmZvbnQgPSBwbGF0Zm9ybURh
dGEoKS5uc0ZvbnQoKTsKLSAgICBpZiAoIWZvbnQgfHwgIXBsYXRmb3JtRGF0YSgpLmlzQ29sb3JC
aXRtYXBGb250KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBhZHZhbmNlID0gTlNTaXpl
VG9DR1NpemUoW2ZvbnQgYWR2YW5jZW1lbnRGb3JHbHlwaDpnbHlwaF0pOwotICAgIHJldHVybiB0
cnVlOwotfQotI2VuZGlmCi0KLXN0YXRpYyBib29sIGhhc0N1c3RvbVRyYWNraW5nKENURm9udFJl
ZiBmb250KQotewotI2lmIFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9S
RVFVSVJFRCA8IDEwOTAKLSAgICBVTlVTRURfUEFSQU0oZm9udCk7Ci0gICAgcmV0dXJuIGZhbHNl
OwotI2Vsc2UKLSAgICByZXR1cm4gQ1RGb250RGVzY3JpcHRvcklzU3lzdGVtVUlGb250KGFkb3B0
Q0YoQ1RGb250Q29weUZvbnREZXNjcmlwdG9yKGZvbnQpKS5nZXQoKSk7Ci0jZW5kaWYKLX0KLQot
c3RhdGljIGlubGluZSBib29sIGlzRW1vamkoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZv
cm1EYXRhKQotewotI2lmIFBMQVRGT1JNKElPUykKLSAgICByZXR1cm4gcGxhdGZvcm1EYXRhLm1f
aXNFbW9qaTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHBsYXRmb3JtRGF0YSk7Ci0gICAgcmV0
dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLWlubGluZSBib29sIFNpbXBsZUZvbnREYXRhOjpjYW5V
c2VGYXN0R2x5cGhBZHZhbmNlR2V0dGVyKEdseXBoIGdseXBoLCBDR1NpemUmIGFkdmFuY2UsIGJv
b2wmIHBvcHVsYXRlZEFkdmFuY2UpIGNvbnN0Ci17Ci0gICAgLy8gRmFzdCBnZXR0ZXIgZG9lc24n
dCB0YWtlIGN1c3RvbSB0cmFja2luZyBpbnRvIGFjY291bnQKLSAgICBpZiAoaGFzQ3VzdG9tVHJh
Y2tpbmcocGxhdGZvcm1EYXRhKCkuY3RGb250KCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgLy8gRmFzdCBnZXR0ZXIgZG9lc24ndCB3b3JrIGZvciBlbW9qaQotICAgIGlmIChpc0Vtb2pp
KHBsYXRmb3JtRGF0YSgpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIC8vIC4uLiBvciBm
b3IgYW55IGJpdG1hcCBmb250cyBpbiBnZW5lcmFsCi0gICAgaWYgKGFkdmFuY2VGb3JDb2xvckJp
dG1hcEZvbnQoZ2x5cGgsIGFkdmFuY2UpKSB7Ci0gICAgICAgIHBvcHVsYXRlZEFkdmFuY2UgPSB0
cnVlOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQot
Ci1mbG9hdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBo
KSBjb25zdAotewotICAgIENHU2l6ZSBhZHZhbmNlID0gQ0dTaXplWmVybzsKLSAgICBib29sIGhv
cml6b250YWwgPSBwbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IEhvcml6b250YWw7Ci0g
ICAgYm9vbCBwb3B1bGF0ZWRBZHZhbmNlID0gZmFsc2U7Ci0gICAgaWYgKChob3Jpem9udGFsIHx8
IG1faXNCcm9rZW5JZGVvZ3JhcGhGYWxsYmFjaykgJiYgY2FuVXNlRmFzdEdseXBoQWR2YW5jZUdl
dHRlcihnbHlwaCwgYWR2YW5jZSwgcG9wdWxhdGVkQWR2YW5jZSkpIHsKLSAgICAgICAgZmxvYXQg
cG9pbnRTaXplID0gcGxhdGZvcm1EYXRhKCkubV9zaXplOwotICAgICAgICBDR0FmZmluZVRyYW5z
Zm9ybSBtID0gQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlU2NhbGUocG9pbnRTaXplLCBwb2ludFNpemUp
OwotICAgICAgICBpZiAoIUNHRm9udEdldEdseXBoQWR2YW5jZXNGb3JTdHlsZShwbGF0Zm9ybURh
dGEoKS5jZ0ZvbnQoKSwgJm0sIHJlbmRlcmluZ1N0eWxlKCksICZnbHlwaCwgMSwgJmFkdmFuY2Up
KSB7Ci0gICAgICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGZ1bGxOYW1lID0gYWRvcHRD
RihDR0ZvbnRDb3B5RnVsbE5hbWUocGxhdGZvcm1EYXRhKCkuY2dGb250KCkpKTsKLSAgICAgICAg
ICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGNhY2hlIGdseXBoIHdpZHRocyBmb3IgJUAgJWYiLCBm
dWxsTmFtZS5nZXQoKSwgcG9pbnRTaXplKTsKLSAgICAgICAgICAgIGFkdmFuY2Uud2lkdGggPSAw
OwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmICghcG9wdWxhdGVkQWR2YW5jZSkKLSAgICAgICAg
Q1RGb250R2V0QWR2YW5jZXNGb3JHbHlwaHMobV9wbGF0Zm9ybURhdGEuY3RGb250KCksIGhvcml6
b250YWwgPyBrQ1RGb250SG9yaXpvbnRhbE9yaWVudGF0aW9uIDoga0NURm9udFZlcnRpY2FsT3Jp
ZW50YXRpb24sICZnbHlwaCwgJmFkdmFuY2UsIDEpOwotCi0gICAgcmV0dXJuIGFkdmFuY2Uud2lk
dGggKyBtX3N5bnRoZXRpY0JvbGRPZmZzZXQ7Ci19Ci0KLXN0cnVjdCBQcm92aWRlckluZm8gewot
ICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzOwotICAgIHNpemVfdCBsZW5ndGg7Ci0gICAgQ0ZE
aWN0aW9uYXJ5UmVmIGF0dHJpYnV0ZXM7Ci19OwotCi1zdGF0aWMgY29uc3QgVW5pQ2hhciogcHJv
dmlkZVN0cmluZ0FuZEF0dHJpYnV0ZXMoQ0ZJbmRleCBzdHJpbmdJbmRleCwgQ0ZJbmRleCogY291
bnQsIENGRGljdGlvbmFyeVJlZiogYXR0cmlidXRlcywgdm9pZCogY29udGV4dCkKLXsKLSAgICBQ
cm92aWRlckluZm8qIGluZm8gPSBzdGF0aWNfY2FzdDxzdHJ1Y3QgUHJvdmlkZXJJbmZvKj4oY29u
dGV4dCk7Ci0gICAgaWYgKHN0cmluZ0luZGV4IDwgMCB8fCBzdGF0aWNfY2FzdDxzaXplX3Q+KHN0
cmluZ0luZGV4KSA+PSBpbmZvLT5sZW5ndGgpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgKmNv
dW50ID0gaW5mby0+bGVuZ3RoIC0gc3RyaW5nSW5kZXg7Ci0gICAgKmF0dHJpYnV0ZXMgPSBpbmZv
LT5hdHRyaWJ1dGVzOwotICAgIHJldHVybiBpbmZvLT5jaGFyYWN0ZXJzICsgc3RyaW5nSW5kZXg7
Ci19Ci0KLWJvb2wgU2ltcGxlRm9udERhdGE6OmNhblJlbmRlckNvbWJpbmluZ0NoYXJhY3RlclNl
cXVlbmNlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKSBjb25zdAotewot
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBpZiAoIW1fY29tYmluaW5nQ2hhcmFj
dGVyU2VxdWVuY2VTdXBwb3J0KQotICAgICAgICBtX2NvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNl
U3VwcG9ydCA9IHN0ZDo6bWFrZV91bmlxdWU8SGFzaE1hcDxTdHJpbmcsIGJvb2w+PigpOwotCi0g
ICAgV1RGOjpIYXNoTWFwPFN0cmluZywgYm9vbD46OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSBtX2Nv
bWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlU3VwcG9ydC0+YWRkKFN0cmluZyhjaGFyYWN0ZXJzLCBs
ZW5ndGgpLCBmYWxzZSk7Ci0gICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAg
cmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7Ci0KLSAgICBSZXRhaW5QdHI8Q0ZUeXBl
UmVmPiBmb250RXF1YWxpdHlPYmplY3QgPSBwbGF0Zm9ybURhdGEoKS5vYmplY3RGb3JFcXVhbGl0
eUNoZWNrKCk7Ci0KLSAgICBQcm92aWRlckluZm8gaW5mbyA9IHsgY2hhcmFjdGVycywgbGVuZ3Ro
LCBnZXRDRlN0cmluZ0F0dHJpYnV0ZXMoMCwgcGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSkg
fTsKLSAgICBSZXRhaW5QdHI8Q1RMaW5lUmVmPiBsaW5lID0gYWRvcHRDRihDVExpbmVDcmVhdGVX
aXRoVW5pQ2hhclByb3ZpZGVyKCZwcm92aWRlU3RyaW5nQW5kQXR0cmlidXRlcywgMCwgJmluZm8p
KTsKLQotICAgIENGQXJyYXlSZWYgcnVuQXJyYXkgPSBDVExpbmVHZXRHbHlwaFJ1bnMobGluZS5n
ZXQoKSk7Ci0gICAgQ0ZJbmRleCBydW5Db3VudCA9IENGQXJyYXlHZXRDb3VudChydW5BcnJheSk7
Ci0KLSAgICBmb3IgKENGSW5kZXggciA9IDA7IHIgPCBydW5Db3VudDsgcisrKSB7Ci0gICAgICAg
IENUUnVuUmVmIGN0UnVuID0gc3RhdGljX2Nhc3Q8Q1RSdW5SZWY+KENGQXJyYXlHZXRWYWx1ZUF0
SW5kZXgocnVuQXJyYXksIHIpKTsKLSAgICAgICAgQVNTRVJUKENGR2V0VHlwZUlEKGN0UnVuKSA9
PSBDVFJ1bkdldFR5cGVJRCgpKTsKLSAgICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIHJ1bkF0dHJpYnV0
ZXMgPSBDVFJ1bkdldEF0dHJpYnV0ZXMoY3RSdW4pOwotICAgICAgICBDVEZvbnRSZWYgcnVuRm9u
dCA9IHN0YXRpY19jYXN0PENURm9udFJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocnVuQXR0cmli
dXRlcywga0NURm9udEF0dHJpYnV0ZU5hbWUpKTsKLSAgICAgICAgaWYgKCFDRkVxdWFsKGZvbnRF
cXVhbGl0eU9iamVjdC5nZXQoKSwgRm9udFBsYXRmb3JtRGF0YTo6b2JqZWN0Rm9yRXF1YWxpdHlD
aGVjayhydW5Gb250KS5nZXQoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IHRydWU7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlTWF0aERhdGEuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlTWF0aERh
dGEuY3BwCShyZXZpc2lvbiAxNzg1MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVudHlwZS9PcGVuVHlwZU1hdGhEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYs
MTIgKzI2LDEyIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiT3BlblR5cGVNYXRo
RGF0YS5oIgogCisjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEu
aCIKICNpZiBFTkFCTEUoT1BFTlRZUEVfTUFUSCkKICNpbmNsdWRlICJPcGVuVHlwZVR5cGVzLmgi
CiAjZW5kaWYKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKLSNpbmNsdWRlICJTaW1wbGVGb250
RGF0YS5oIgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCkBAIC0yMzUsOSArMjM1LDkgQEAgc3Ry
dWN0IE1BVEhUYWJsZSA6IFRhYmxlQmFzZSB7CiAjZW5kaWYgLy8gRU5BQkxFKE9QRU5UWVBFX01B
VEgpCiAKICNpZiBFTkFCTEUoT1BFTlRZUEVfTUFUSCkKLU9wZW5UeXBlTWF0aERhdGE6Ok9wZW5U
eXBlTWF0aERhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZm9udERhdGEpCitPcGVuVHlwZU1h
dGhEYXRhOjpPcGVuVHlwZU1hdGhEYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnQpCiB7
Ci0gICAgbV9tYXRoQnVmZmVyID0gZm9udERhdGEub3BlblR5cGVUYWJsZShPcGVuVHlwZTo6TUFU
SFRhZyk7CisgICAgbV9tYXRoQnVmZmVyID0gZm9udC5vcGVuVHlwZVRhYmxlKE9wZW5UeXBlOjpN
QVRIVGFnKTsKICAgICBjb25zdCBPcGVuVHlwZTo6TUFUSFRhYmxlKiBtYXRoID0gT3BlblR5cGU6
OnZhbGlkYXRlVGFibGU8T3BlblR5cGU6Ok1BVEhUYWJsZT4obV9tYXRoQnVmZmVyKTsKICAgICBp
ZiAoIW1hdGgpIHsKICAgICAgICAgbV9tYXRoQnVmZmVyID0gbnVsbHB0cjsKQEAgLTI2NSw3ICsy
NjUsNyBAQCBPcGVuVHlwZU1hdGhEYXRhOjp+T3BlblR5cGVNYXRoRGF0YSgpCiB9CiAKICNpZiBF
TkFCTEUoT1BFTlRZUEVfTUFUSCkKLWZsb2F0IE9wZW5UeXBlTWF0aERhdGE6OmdldE1hdGhDb25z
dGFudChjb25zdCBTaW1wbGVGb250RGF0YSYgZm9udCwgTWF0aENvbnN0YW50IGNvbnN0YW50KSBj
b25zdAorZmxvYXQgT3BlblR5cGVNYXRoRGF0YTo6Z2V0TWF0aENvbnN0YW50KGNvbnN0IEZvbnQm
IGZvbnQsIE1hdGhDb25zdGFudCBjb25zdGFudCkgY29uc3QKIHsKICAgICBpbnQzMl90IHZhbHVl
ID0gMDsKIApAQCAtMjg4LDcgKzI4OCw3IEBAIGZsb2F0IE9wZW5UeXBlTWF0aERhdGE6OmdldE1h
dGhDb25zdGFudCgKIAogICAgIHJldHVybiB2YWx1ZSAqIGZvbnQuc2l6ZVBlclVuaXQoKTsKICNl
bHNlCi1mbG9hdCBPcGVuVHlwZU1hdGhEYXRhOjpnZXRNYXRoQ29uc3RhbnQoY29uc3QgU2ltcGxl
Rm9udERhdGEmLCBNYXRoQ29uc3RhbnQpIGNvbnN0CitmbG9hdCBPcGVuVHlwZU1hdGhEYXRhOjpn
ZXRNYXRoQ29uc3RhbnQoY29uc3QgRm9udCYsIE1hdGhDb25zdGFudCkgY29uc3QKIHsKICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gMDsKQEAgLTI5Niw3ICsyOTYsNyBAQCBm
bG9hdCBPcGVuVHlwZU1hdGhEYXRhOjpnZXRNYXRoQ29uc3RhbnQoCiB9CiAKICNpZiBFTkFCTEUo
T1BFTlRZUEVfTUFUSCkKLWZsb2F0IE9wZW5UeXBlTWF0aERhdGE6OmdldEl0YWxpY0NvcnJlY3Rp
b24oY29uc3QgU2ltcGxlRm9udERhdGEmIGZvbnQsIEdseXBoIGdseXBoKSBjb25zdAorZmxvYXQg
T3BlblR5cGVNYXRoRGF0YTo6Z2V0SXRhbGljQ29ycmVjdGlvbihjb25zdCBGb250JiBmb250LCBH
bHlwaCBnbHlwaCkgY29uc3QKIHsKICAgICBjb25zdCBPcGVuVHlwZTo6TUFUSFRhYmxlKiBtYXRo
ID0gT3BlblR5cGU6OnZhbGlkYXRlVGFibGU8T3BlblR5cGU6Ok1BVEhUYWJsZT4obV9tYXRoQnVm
ZmVyKTsKICAgICBBU1NFUlQobWF0aCk7CkBAIC0zMTAsNyArMzEwLDcgQEAgZmxvYXQgT3BlblR5
cGVNYXRoRGF0YTo6Z2V0SXRhbGljQ29ycmVjdAogCiAgICAgcmV0dXJuIG1hdGhJdGFsaWNzQ29y
cmVjdGlvbkluZm8tPmdldEl0YWxpY0NvcnJlY3Rpb24oKm1fbWF0aEJ1ZmZlciwgZ2x5cGgpICog
Zm9udC5zaXplUGVyVW5pdCgpOwogI2Vsc2UKLWZsb2F0IE9wZW5UeXBlTWF0aERhdGE6OmdldEl0
YWxpY0NvcnJlY3Rpb24oY29uc3QgU2ltcGxlRm9udERhdGEmLCBHbHlwaCkgY29uc3QKK2Zsb2F0
IE9wZW5UeXBlTWF0aERhdGE6OmdldEl0YWxpY0NvcnJlY3Rpb24oY29uc3QgRm9udCYsIEdseXBo
KSBjb25zdAogewogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiAwOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVNYXRo
RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW50eXBlL09wZW5UeXBlTWF0aERhdGEuaAkocmV2aXNpb24gMTc4NTE1KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVNYXRoRGF0YS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNSwxMyArMzUsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBGb250UGxhdGZvcm1EYXRhOwogY2xhc3MgU2hhcmVkQnVmZmVyOwotY2xhc3MgU2ltcGxlRm9u
dERhdGE7CitjbGFzcyBGb250OwogCiBjbGFzcyBPcGVuVHlwZU1hdGhEYXRhIDogcHVibGljIFJl
ZkNvdW50ZWQ8T3BlblR5cGVNYXRoRGF0YT4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVm
UHRyPE9wZW5UeXBlTWF0aERhdGE+IGNyZWF0ZShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBmb250
RGF0YSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxPcGVuVHlwZU1hdGhEYXRhPiBjcmVhdGUoY29u
c3QgRm9udFBsYXRmb3JtRGF0YSYgZm9udCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgT3BlblR5cGVNYXRoRGF0YShmb250RGF0YSkpOworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IE9wZW5UeXBlTWF0aERhdGEoZm9udCkpOwogICAgIH0KICAgICB+T3BlblR5cGVNYXRo
RGF0YSgpOwogCkBAIC0xMTMsOCArMTEzLDggQEAgcHVibGljOgogICAgICAgICBib29sIGlzRXh0
ZW5kZXI7CiAgICAgfTsKIAotICAgIGZsb2F0IGdldE1hdGhDb25zdGFudChjb25zdCBTaW1wbGVG
b250RGF0YSYsIE1hdGhDb25zdGFudCkgY29uc3Q7Ci0gICAgZmxvYXQgZ2V0SXRhbGljQ29ycmVj
dGlvbihjb25zdCBTaW1wbGVGb250RGF0YSYsIEdseXBoKSBjb25zdDsKKyAgICBmbG9hdCBnZXRN
YXRoQ29uc3RhbnQoY29uc3QgRm9udCYsIE1hdGhDb25zdGFudCkgY29uc3Q7CisgICAgZmxvYXQg
Z2V0SXRhbGljQ29ycmVjdGlvbihjb25zdCBGb250JiwgR2x5cGgpIGNvbnN0OwogICAgIHZvaWQg
Z2V0TWF0aFZhcmlhbnRzKEdseXBoLCBib29sIGlzVmVydGljYWwsIFZlY3RvcjxHbHlwaD4mIHNp
emVWYXJpYW50cywgVmVjdG9yPEFzc2VtYmx5UGFydD4mIGFzc2VtYmx5UGFydHMpIGNvbnN0Owog
CiBwcml2YXRlOgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3gu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94
LmNwcAkocmV2aXNpb24gMTc4NTE1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGlu
ZUZsb3dCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDksNyArNDQ5LDcgQEAgYm9vbCBJbmxp
bmVGbG93Qm94OjpyZXF1aXJlc0lkZW9ncmFwaGljQgogCiAgICAgY29uc3QgUmVuZGVyU3R5bGUm
IGxpbmVTdHlsZSA9IHRoaXMtPmxpbmVTdHlsZSgpOwogICAgIGlmIChsaW5lU3R5bGUuZm9udERl
c2NyaXB0aW9uKCkubm9uQ0pLR2x5cGhPcmllbnRhdGlvbigpID09IE5vbkNKS0dseXBoT3JpZW50
YXRpb25VcHJpZ2h0Ci0gICAgICAgIHx8IGxpbmVTdHlsZS5mb250Q2FzY2FkZSgpLnByaW1hcnlG
b250RGF0YSgpLmhhc1ZlcnRpY2FsR2x5cGhzKCkpCisgICAgICAgIHx8IGxpbmVTdHlsZS5mb250
Q2FzY2FkZSgpLnByaW1hcnlGb250KCkuaGFzVmVydGljYWxHbHlwaHMoKSkKICAgICAgICAgcmV0
dXJuIHRydWU7CiAKICAgICBmb3IgKElubGluZUJveCogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNo
aWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0T25MaW5lKCkpIHsKQEAgLTQ2MCwxOCArNDYwLDE4IEBA
IGJvb2wgSW5saW5lRmxvd0JveDo6cmVxdWlyZXNJZGVvZ3JhcGhpY0IKICAgICAgICAgICAgIGlm
IChkb3duY2FzdDxJbmxpbmVGbG93Qm94PigqY2hpbGQpLnJlcXVpcmVzSWRlb2dyYXBoaWNCYXNl
bGluZSh0ZXh0Qm94RGF0YU1hcCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoY2hpbGQtPmxpbmVTdHlsZSgpLmZvbnRDYXNj
YWRlKCkucHJpbWFyeUZvbnREYXRhKCkuaGFzVmVydGljYWxHbHlwaHMoKSkKKyAgICAgICAgICAg
IGlmIChjaGlsZC0+bGluZVN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpLmhhc1Zl
cnRpY2FsR2x5cGhzKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIGNvbnN0IFZlY3Rvcjxjb25zdCBTaW1wbGVGb250RGF0YSo+KiB1c2Vk
Rm9udHMgPSBudWxscHRyOworICAgICAgICAgICAgY29uc3QgVmVjdG9yPGNvbnN0IEZvbnQqPiog
dXNlZEZvbnRzID0gbnVsbHB0cjsKICAgICAgICAgICAgIGlmIChpczxJbmxpbmVUZXh0Qm94Pigq
Y2hpbGQpKSB7CiAgICAgICAgICAgICAgICAgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGV4dEJveERhdGFNYXAuZmluZChkb3duY2FzdDxJbmxp
bmVUZXh0Qm94PihjaGlsZCkpOwogICAgICAgICAgICAgICAgIHVzZWRGb250cyA9IGl0ID09IHRl
eHRCb3hEYXRhTWFwLmVuZCgpID8gbnVsbHB0ciA6ICZpdC0+dmFsdWUuZmlyc3Q7CiAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgIGlmICh1c2VkRm9udHMpIHsKLSAgICAgICAgICAgICAgICBm
b3IgKGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSA6ICp1c2VkRm9udHMpIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGZvbnREYXRhLT5oYXNWZXJ0aWNhbEdseXBocygpKQorICAgICAg
ICAgICAgICAgIGZvciAoY29uc3QgRm9udCogZm9udCA6ICp1c2VkRm9udHMpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGZvbnQtPmhhc1ZlcnRpY2FsR2x5cGhzKCkpCiAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmgJKHJldmlzaW9u
IDE3ODUxNSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmgJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDEyICszMSwxMiBAQCBjbGFzcyBIaXRUZXN0UmVxdWVzdDsKIGNs
YXNzIEhpdFRlc3RSZXN1bHQ7CiBjbGFzcyBJbmxpbmVUZXh0Qm94OwogY2xhc3MgUmVuZGVyTGlu
ZUJveExpc3Q7Ci1jbGFzcyBTaW1wbGVGb250RGF0YTsKK2NsYXNzIEZvbnQ7CiBjbGFzcyBWZXJ0
aWNhbFBvc2l0aW9uQ2FjaGU7CiAKIHN0cnVjdCBHbHlwaE92ZXJmbG93OwogCi10eXBlZGVmIEhh
c2hNYXA8Y29uc3QgSW5saW5lVGV4dEJveCosIHN0ZDo6cGFpcjxWZWN0b3I8Y29uc3QgU2ltcGxl
Rm9udERhdGEqPiwgR2x5cGhPdmVyZmxvdz4+IEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRz
TWFwOwordHlwZWRlZiBIYXNoTWFwPGNvbnN0IElubGluZVRleHRCb3gqLCBzdGQ6OnBhaXI8VmVj
dG9yPGNvbnN0IEZvbnQqPiwgR2x5cGhPdmVyZmxvdz4+IEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFj
a0ZvbnRzTWFwOwogCiBjbGFzcyBJbmxpbmVGbG93Qm94IDogcHVibGljIElubGluZUJveCB7CiBw
dWJsaWM6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3Bw
CShyZXZpc2lvbiAxNzg1MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4
dEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzODEsNyArMTM4MSw3IEBAIFRleHRSdW4gSW5s
aW5lVGV4dEJveDo6Y29uc3RydWN0VGV4dFJ1bigKIAogICAgIFRleHRSdW4gcnVuKHN0cmluZywg
dGV4dFBvcygpLCBleHBhbnNpb24oKSwgZXhwYW5zaW9uQmVoYXZpb3IoKSwgZGlyZWN0aW9uKCks
IGRpck92ZXJyaWRlKCkgfHwgc3R5bGUucnRsT3JkZXJpbmcoKSA9PSBWaXN1YWxPcmRlciwgIXJl
bmRlcmVyKCkuY2FuVXNlU2ltcGxlRm9udENvZGVQYXRoKCkpOwogICAgIHJ1bi5zZXRUYWJTaXpl
KCFzdHlsZS5jb2xsYXBzZVdoaXRlU3BhY2UoKSwgc3R5bGUudGFiU2l6ZSgpKTsKLSAgICBpZiAo
Zm9udC5wcmltYXJ5Rm9udERhdGEoKS5pc1NWR0ZvbnQoKSkKKyAgICBpZiAoZm9udC5wcmltYXJ5
Rm9udCgpLmlzU1ZHRm9udCgpKQogICAgICAgICBydW4uc2V0UmVuZGVyaW5nQ29udGV4dChTVkdU
ZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlKHJlbmRlcmVyKCkpKTsKIAogICAgIC8vIFBy
b3BhZ2F0ZSB0aGUgbWF4aW11bSBsZW5ndGggb2YgdGhlIGNoYXJhY3RlcnMgYnVmZmVyIHRvIHRo
ZSBUZXh0UnVuLCBldmVuIHdoZW4gd2UncmUgb25seSBwcm9jZXNzaW5nIGEgc3Vic3RyaW5nLgpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiAx
Nzg1MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMzI1LDcgKzIzMjUsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjph
ZGp1c3RMb2dpY2FsTGVmCiAgICAgICAgIHJldHVybiBsZWZ0OwogCiAgICAgLy8gRklYTUU6IFNo
b3VsZCBsZXR0ZXItc3BhY2luZyBhcHBseT8gVGhpcyBpcyBjb21wbGljYXRlZCBzaW5jZSBpdCBk
b2Vzbid0IGFwcGx5IGF0IHRoZSBlZGdlPwotICAgIGZsb2F0IG1heENoYXJXaWR0aCA9IGxpbmVH
cmlkLT5zdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkubWF4Q2hhcldpZHRo
KCk7CisgICAgZmxvYXQgbWF4Q2hhcldpZHRoID0gbGluZUdyaWQtPnN0eWxlKCkuZm9udENhc2Nh
ZGUoKS5wcmltYXJ5Rm9udCgpLm1heENoYXJXaWR0aCgpOwogICAgIGlmICghbWF4Q2hhcldpZHRo
KQogICAgICAgICByZXR1cm4gbGVmdDsKIApAQCAtMjM2NSw3ICsyMzY1LDcgQEAgTGF5b3V0VW5p
dCBSZW5kZXJCbG9jazo6YWRqdXN0TG9naWNhbFJpZwogICAgICAgICByZXR1cm4gcmlnaHQ7CiAK
ICAgICAvLyBGSVhNRTogU2hvdWxkIGxldHRlci1zcGFjaW5nIGFwcGx5PyBUaGlzIGlzIGNvbXBs
aWNhdGVkIHNpbmNlIGl0IGRvZXNuJ3QgYXBwbHkgYXQgdGhlIGVkZ2U/Ci0gICAgZmxvYXQgbWF4
Q2hhcldpZHRoID0gbGluZUdyaWQtPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERh
dGEoKS5tYXhDaGFyV2lkdGgoKTsKKyAgICBmbG9hdCBtYXhDaGFyV2lkdGggPSBsaW5lR3JpZC0+
c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCkubWF4Q2hhcldpZHRoKCk7CiAgICAg
aWYgKCFtYXhDaGFyV2lkdGgpCiAgICAgICAgIHJldHVybiByaWdodDsKIApAQCAtMzY5OSw3ICsz
Njk5LDcgQEAgc3RhdGljIGlubGluZSBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW5JbgogICAgIGJv
b2wgZGlyZWN0aW9uYWxPdmVycmlkZSA9IHN0eWxlLnJ0bE9yZGVyaW5nKCkgPT0gVmlzdWFsT3Jk
ZXI7CiAKICAgICBUZXh0UnVuIHJ1bihjaGFyYWN0ZXJzLCBsZW5ndGgsIDAsIDAsIGV4cGFuc2lv
biwgdGV4dERpcmVjdGlvbiwgZGlyZWN0aW9uYWxPdmVycmlkZSk7Ci0gICAgaWYgKGZvbnQucHJp
bWFyeUZvbnREYXRhKCkuaXNTVkdGb250KCkpIHsKKyAgICBpZiAoZm9udC5wcmltYXJ5Rm9udCgp
LmlzU1ZHRm9udCgpKSB7CiAgICAgICAgIEFTU0VSVChjb250ZXh0KTsgLy8gRklYTUU6IFRocmVh
ZCBhIFJlbmRlck9iamVjdCYgdG8gdGhpcyBwb2ludCBzbyB3ZSBkb24ndCBoYXZlIHRvIGRlcmVm
ZXJlbmNlIGFueXRoaW5nLgogICAgICAgICBydW4uc2V0UmVuZGVyaW5nQ29udGV4dChTVkdUZXh0
UnVuUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlKCpjb250ZXh0KSk7CiAgICAgfQpAQCAtMzcxOSw3
ICszNzE5LDcgQEAgc3RhdGljIGlubGluZSBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW5JbgogICAg
ICAgICAgICAgZGlyZWN0aW9uYWxPdmVycmlkZSB8PSBpc092ZXJyaWRlKHN0eWxlLnVuaWNvZGVC
aWRpKCkpOwogICAgIH0KICAgICBUZXh0UnVuIHJ1bihjaGFyYWN0ZXJzLCBsZW5ndGgsIDAsIDAs
IGV4cGFuc2lvbiwgdGV4dERpcmVjdGlvbiwgZGlyZWN0aW9uYWxPdmVycmlkZSk7Ci0gICAgaWYg
KGZvbnQucHJpbWFyeUZvbnREYXRhKCkuaXNTVkdGb250KCkpIHsKKyAgICBpZiAoZm9udC5wcmlt
YXJ5Rm9udCgpLmlzU1ZHRm9udCgpKSB7CiAgICAgICAgIEFTU0VSVChjb250ZXh0KTsgLy8gRklY
TUU6IFRocmVhZCBhIFJlbmRlck9iamVjdCYgdG8gdGhpcyBwb2ludCBzbyB3ZSBkb24ndCBoYXZl
IHRvIGRlcmVmZXJlbmNlIGFueXRoaW5nLgogICAgICAgICBydW4uc2V0UmVuZGVyaW5nQ29udGV4
dChTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlKCpjb250ZXh0KSk7CiAgICAgfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxh
eW91dC5jcHAJKHJldmlzaW9uIDE3ODUxNSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTgsNyArNDU4LDcg
QEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OnNldE1hcmdpbnNGb3JSdWJ5Ugogc3RhdGljIGlubGlu
ZSB2b2lkIHNldExvZ2ljYWxXaWR0aEZvclRleHRSdW4oUm9vdElubGluZUJveCogbGluZUJveCwg
QmlkaVJ1biogcnVuLCBSZW5kZXJUZXh0KiByZW5kZXJlciwgZmxvYXQgeFBvcywgY29uc3QgTGlu
ZUluZm8mIGxpbmVJbmZvLAogICAgIEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwJiB0
ZXh0Qm94RGF0YU1hcCwgVmVydGljYWxQb3NpdGlvbkNhY2hlJiB2ZXJ0aWNhbFBvc2l0aW9uQ2Fj
aGUsIFdvcmRNZWFzdXJlbWVudHMmIHdvcmRNZWFzdXJlbWVudHMpCiB7Ci0gICAgSGFzaFNldDxj
b25zdCBTaW1wbGVGb250RGF0YSo+IGZhbGxiYWNrRm9udHM7CisgICAgSGFzaFNldDxjb25zdCBG
b250Kj4gZmFsbGJhY2tGb250czsKICAgICBHbHlwaE92ZXJmbG93IGdseXBoT3ZlcmZsb3c7CiAK
ICAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IGxpbmVTdHlsZSgqcmVuZGVyZXItPnBhcmVu
dCgpLCBsaW5lSW5mbykuZm9udENhc2NhZGUoKTsKQEAgLTUwOSw4ICs1MDksOCBAQCBzdGF0aWMg
aW5saW5lIHZvaWQgc2V0TG9naWNhbFdpZHRoRm9yVGV4CiAgICAgICAgICAgICB9IGVsc2UKICAg
ICAgICAgICAgICAgICBtZWFzdXJlZFdpZHRoICs9IHdvcmRNZWFzdXJlbWVudC53aWR0aDsKICAg
ICAgICAgICAgIGlmICghd29yZE1lYXN1cmVtZW50LmZhbGxiYWNrRm9udHMuaXNFbXB0eSgpKSB7
Ci0gICAgICAgICAgICAgICAgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+Ojpjb25zdF9p
dGVyYXRvciBlbmQgPSB3b3JkTWVhc3VyZW1lbnQuZmFsbGJhY2tGb250cy5lbmQoKTsKLSAgICAg
ICAgICAgICAgICBmb3IgKEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPjo6Y29uc3RfaXRl
cmF0b3IgaXQgPSB3b3JkTWVhc3VyZW1lbnQuZmFsbGJhY2tGb250cy5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpCisgICAgICAgICAgICAgICAgSGFzaFNldDxjb25zdCBGb250Kj46OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IHdvcmRNZWFzdXJlbWVudC5mYWxsYmFja0ZvbnRzLmVuZCgpOworICAgICAg
ICAgICAgICAgIGZvciAoSGFzaFNldDxjb25zdCBGb250Kj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
d29yZE1lYXN1cmVtZW50LmZhbGxiYWNrRm9udHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQog
ICAgICAgICAgICAgICAgICAgICBmYWxsYmFja0ZvbnRzLmFkZCgqaXQpOwogICAgICAgICAgICAg
fQogICAgICAgICB9CkBAIC01MjcsNyArNTI3LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldExv
Z2ljYWxXaWR0aEZvclRleAogICAgIHJ1bi0+Ym94KCktPnNldExvZ2ljYWxXaWR0aChtZWFzdXJl
ZFdpZHRoICsgaHlwaGVuV2lkdGgpOwogICAgIGlmICghZmFsbGJhY2tGb250cy5pc0VtcHR5KCkp
IHsKICAgICAgICAgQVNTRVJUKHJ1bi0+Ym94KCktPmJlaGF2ZXNMaWtlVGV4dCgpKTsKLSAgICAg
ICAgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXA6Oml0ZXJhdG9yIGl0ID0gdGV4dEJv
eERhdGFNYXAuYWRkKGRvd25jYXN0PElubGluZVRleHRCb3g+KHJ1bi0+Ym94KCkpLCBzdGQ6Om1h
a2VfcGFpcihWZWN0b3I8Y29uc3QgU2ltcGxlRm9udERhdGEqPigpLCBHbHlwaE92ZXJmbG93KCkp
KS5pdGVyYXRvcjsKKyAgICAgICAgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXA6Oml0
ZXJhdG9yIGl0ID0gdGV4dEJveERhdGFNYXAuYWRkKGRvd25jYXN0PElubGluZVRleHRCb3g+KHJ1
bi0+Ym94KCkpLCBzdGQ6Om1ha2VfcGFpcihWZWN0b3I8Y29uc3QgRm9udCo+KCksIEdseXBoT3Zl
cmZsb3coKSkpLml0ZXJhdG9yOwogICAgICAgICBBU1NFUlQoaXQtPnZhbHVlLmZpcnN0LmlzRW1w
dHkoKSk7CiAgICAgICAgIGNvcHlUb1ZlY3RvcihmYWxsYmFja0ZvbnRzLCBpdC0+dmFsdWUuZmly
c3QpOwogICAgICAgICBydW4tPmJveCgpLT5wYXJlbnQoKS0+Y2xlYXJEZXNjZW5kYW50c0hhdmVT
YW1lTGluZUhlaWdodEFuZEJhc2VsaW5lKCk7CkBAIC01MzksNyArNTM5LDcgQEAgc3RhdGljIGlu
bGluZSB2b2lkIHNldExvZ2ljYWxXaWR0aEZvclRleAogCiAgICAgaWYgKCFnbHlwaE92ZXJmbG93
LmlzRW1wdHkoKSkgewogICAgICAgICBBU1NFUlQocnVuLT5ib3goKS0+YmVoYXZlc0xpa2VUZXh0
KCkpOwotICAgICAgICBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcDo6aXRlcmF0b3Ig
aXQgPSB0ZXh0Qm94RGF0YU1hcC5hZGQoZG93bmNhc3Q8SW5saW5lVGV4dEJveD4ocnVuLT5ib3go
KSksIHN0ZDo6bWFrZV9wYWlyKFZlY3Rvcjxjb25zdCBTaW1wbGVGb250RGF0YSo+KCksIEdseXBo
T3ZlcmZsb3coKSkpLml0ZXJhdG9yOworICAgICAgICBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tG
b250c01hcDo6aXRlcmF0b3IgaXQgPSB0ZXh0Qm94RGF0YU1hcC5hZGQoZG93bmNhc3Q8SW5saW5l
VGV4dEJveD4ocnVuLT5ib3goKSksIHN0ZDo6bWFrZV9wYWlyKFZlY3Rvcjxjb25zdCBGb250Kj4o
KSwgR2x5cGhPdmVyZmxvdygpKSkuaXRlcmF0b3I7CiAgICAgICAgIGl0LT52YWx1ZS5zZWNvbmQg
PSBnbHlwaE92ZXJmbG93OwogICAgICAgICBydW4tPmJveCgpLT5jbGVhcktub3duVG9IYXZlTm9P
dmVyZmxvdygpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJD
b21iaW5lVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckNvbWJpbmVUZXh0LmNwcAkocmV2aXNpb24gMTc4NTE1KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyAr
NTcsNyBAQCB2b2lkIFJlbmRlckNvbWJpbmVUZXh0OjpzZXRSZW5kZXJlZFRleHQoCiAgICAgbV9u
ZWVkc0ZvbnRVcGRhdGUgPSB0cnVlOwogfQogCi1mbG9hdCBSZW5kZXJDb21iaW5lVGV4dDo6d2lk
dGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBGb250Q2FzY2FkZSYgZm9u
dCwgZmxvYXQgeFBvc2l0aW9uLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxi
YWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0CitmbG9hdCBSZW5k
ZXJDb21iaW5lVGV4dDo6d2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuZ3RoLCBjb25z
dCBGb250Q2FzY2FkZSYgZm9udCwgZmxvYXQgeFBvc2l0aW9uLCBIYXNoU2V0PGNvbnN0IEZvbnQq
PiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKIHsK
ICAgICBpZiAobV9pc0NvbWJpbmVkKQogICAgICAgICByZXR1cm4gZm9udC5zaXplKCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuaAkocmV2aXNp
b24gMTc4NTE1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIG5v
ZGUoKSBjb25zdCA9IGRlbGV0ZTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0NvbWJpbmVUZXh0KCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgZmxvYXQgd2lkdGgo
dW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBGb250Q2FzY2FkZSYsIGZsb2F0
IHhQb3NpdGlvbiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRz
ID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGZs
b2F0IHdpZHRoKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgRm9udENhc2Nh
ZGUmLCBmbG9hdCB4UG9zaXRpb24sIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRz
ID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGNv
bnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAiUmVuZGVyQ29t
YmluZVRleHQiOyB9CiAgICAgdmlydHVhbCB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVy
ZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKSBvdmVycmlkZTsKICAgICB2aXJ0dWFs
IHZvaWQgc2V0UmVuZGVyZWRUZXh0KGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNlYXJjaEZpZWxkLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuY3BwCShyZXZpc2lv
biAxNzg1MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiQ1NTRm9udFNl
bGVjdG9yLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkNocm9t
ZS5oIgorI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZy
YW1lU2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCkBAIC00Miw3ICs0Myw2IEBA
CiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNlYXJjaFBvcHVwTWVudS5oIgog
I2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKICNpbmNs
dWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiVGV4dENvbnRyb2xJbm5lckVsZW1lbnRz
LmgiCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHJldmlz
aW9uIDE3ODUxNSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDUxLDcgKzQ1MSw3IEBAIExheW91dFJlY3QgUmVuZGVyVGV4dDo6
bG9jYWxDYXJldFJlY3QoSW4KICAgICByZXR1cm4gYm94LnJvb3QoKS5jb21wdXRlQ2FyZXRSZWN0
KGxlZnQsIGNhcmV0V2lkdGgsIGV4dHJhV2lkdGhUb0VuZE9mTGluZSk7CiB9CiAKLUFMV0FZU19J
TkxJTkUgZmxvYXQgUmVuZGVyVGV4dDo6d2lkdGhGcm9tQ2FjaGUoY29uc3QgRm9udENhc2NhZGUm
IGYsIGludCBzdGFydCwgaW50IGxlbiwgZmxvYXQgeFBvcywgSGFzaFNldDxjb25zdCBTaW1wbGVG
b250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93LCBj
b25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CitBTFdBWVNfSU5MSU5FIGZsb2F0IFJlbmRl
clRleHQ6OndpZHRoRnJvbUNhY2hlKGNvbnN0IEZvbnRDYXNjYWRlJiBmLCBpbnQgc3RhcnQsIGlu
dCBsZW4sIGZsb2F0IHhQb3MsIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzLCBH
bHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpIGNv
bnN0CiB7CiAgICAgaWYgKHN0eWxlLmhhc1RleHRDb21iaW5lKCkgJiYgaXM8UmVuZGVyQ29tYmlu
ZVRleHQ+KCp0aGlzKSkgewogICAgICAgICBjb25zdCBSZW5kZXJDb21iaW5lVGV4dCYgY29tYmlu
ZVRleHQgPSBkb3duY2FzdDxSZW5kZXJDb21iaW5lVGV4dD4oKnRoaXMpOwpAQCAtNjMwLDcgKzYz
MCw3IEBAIExpbmVCcmVha0l0ZXJhdG9yTW9kZSBtYXBMaW5lQnJlYWtUb0l0ZXIKIAogdm9pZCBS
ZW5kZXJUZXh0Ojpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyhmbG9hdCBsZWFkV2lkdGgp
CiB7Ci0gICAgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+IGZhbGxiYWNrRm9udHM7Cisg
ICAgSGFzaFNldDxjb25zdCBGb250Kj4gZmFsbGJhY2tGb250czsKICAgICBHbHlwaE92ZXJmbG93
IGdseXBoT3ZlcmZsb3c7CiAgICAgY29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMobGVhZFdp
ZHRoLCBmYWxsYmFja0ZvbnRzLCBnbHlwaE92ZXJmbG93KTsKICAgICBpZiAoZmFsbGJhY2tGb250
cy5pc0VtcHR5KCkgJiYgIWdseXBoT3ZlcmZsb3cubGVmdCAmJiAhZ2x5cGhPdmVyZmxvdy5yaWdo
dCAmJiAhZ2x5cGhPdmVyZmxvdy50b3AgJiYgIWdseXBoT3ZlcmZsb3cuYm90dG9tKQpAQCAtNjQz
LDcgKzY0Myw3IEBAIHN0YXRpYyBpbmxpbmUgZmxvYXQgaHlwaGVuV2lkdGgoUmVuZGVyVGUKICAg
ICByZXR1cm4gZm9udC53aWR0aChSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bihyZW5kZXJl
ciwgZm9udCwgc3R5bGUuaHlwaGVuU3RyaW5nKCkuc3RyaW5nKCksIHN0eWxlKSk7CiB9CiAKLXN0
YXRpYyBmbG9hdCBtYXhXb3JkRnJhZ21lbnRXaWR0aChSZW5kZXJUZXh0KiByZW5kZXJlciwgY29u
c3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgU3RyaW5nVmll
dyB3b3JkLCBpbnQgbWluaW11bVByZWZpeExlbmd0aCwgdW5zaWduZWQgbWluaW11bVN1ZmZpeExl
bmd0aCwgaW50JiBzdWZmaXhTdGFydCwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+JiBm
YWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93JiBnbHlwaE92ZXJmbG93KQorc3RhdGljIGZsb2F0
IG1heFdvcmRGcmFnbWVudFdpZHRoKFJlbmRlclRleHQqIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJT
dHlsZSYgc3R5bGUsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBTdHJpbmdWaWV3IHdvcmQsIGlu
dCBtaW5pbXVtUHJlZml4TGVuZ3RoLCB1bnNpZ25lZCBtaW5pbXVtU3VmZml4TGVuZ3RoLCBpbnQm
IHN1ZmZpeFN0YXJ0LCBIYXNoU2V0PGNvbnN0IEZvbnQqPiYgZmFsbGJhY2tGb250cywgR2x5cGhP
dmVyZmxvdyYgZ2x5cGhPdmVyZmxvdykKIHsKICAgICBzdWZmaXhTdGFydCA9IDA7CiAgICAgaWYg
KHdvcmQubGVuZ3RoKCkgPD0gbWluaW11bVN1ZmZpeExlbmd0aCkKQEAgLTY4Myw3ICs2ODMsNyBA
QCBzdGF0aWMgZmxvYXQgbWF4V29yZEZyYWdtZW50V2lkdGgoUmVuZGVyCiAgICAgcmV0dXJuIG1h
eEZyYWdtZW50V2lkdGg7CiB9CiAKLXZvaWQgUmVuZGVyVGV4dDo6Y29tcHV0ZVByZWZlcnJlZExv
Z2ljYWxXaWR0aHMoZmxvYXQgbGVhZFdpZHRoLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRh
Kj4mIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cmIGdseXBoT3ZlcmZsb3cpCit2b2lkIFJl
bmRlclRleHQ6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKGZsb2F0IGxlYWRXaWR0aCwg
SGFzaFNldDxjb25zdCBGb250Kj4mIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cmIGdseXBo
T3ZlcmZsb3cpCiB7CiAgICAgQVNTRVJUKG1faGFzVGFiIHx8IHByZWZlcnJlZExvZ2ljYWxXaWR0
aHNEaXJ0eSgpIHx8ICFtX2tub3duVG9IYXZlTm9PdmVyZmxvd0FuZE5vRmFsbGJhY2tGb250cyk7
CiAKQEAgLTEyMDYsNyArMTIwNiw3IEBAIGNvbnN0IFNpbXBsZUxpbmVMYXlvdXQ6OkxheW91dCog
UmVuZGVyVGUKICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyQmxvY2tGbG93PigqcGFyZW50KCkp
LnNpbXBsZUxpbmVMYXlvdXQoKTsKIH0KIAotZmxvYXQgUmVuZGVyVGV4dDo6d2lkdGgodW5zaWdu
ZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBmbG9hdCB4UG9zLCBib29sIGZpcnN0TGluZSwgSGFzaFNl
dDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBn
bHlwaE92ZXJmbG93KSBjb25zdAorZmxvYXQgUmVuZGVyVGV4dDo6d2lkdGgodW5zaWduZWQgZnJv
bSwgdW5zaWduZWQgbGVuLCBmbG9hdCB4UG9zLCBib29sIGZpcnN0TGluZSwgSGFzaFNldDxjb25z
dCBGb250Kj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNv
bnN0CiB7CiAgICAgaWYgKGZyb20gPj0gdGV4dExlbmd0aCgpKQogICAgICAgICByZXR1cm4gMDsK
QEAgLTEyMTgsNyArMTIxOCw3IEBAIGZsb2F0IFJlbmRlclRleHQ6OndpZHRoKHVuc2lnbmVkIGZy
b20sIHUKICAgICByZXR1cm4gd2lkdGgoZnJvbSwgbGVuLCBsaW5lU3R5bGUuZm9udENhc2NhZGUo
KSwgeFBvcywgZmFsbGJhY2tGb250cywgZ2x5cGhPdmVyZmxvdyk7CiB9CiAKLWZsb2F0IFJlbmRl
clRleHQ6OndpZHRoKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgY29uc3QgRm9udENhc2Nh
ZGUmIGYsIGZsb2F0IHhQb3MsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJh
Y2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKK2Zsb2F0IFJlbmRl
clRleHQ6OndpZHRoKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgY29uc3QgRm9udENhc2Nh
ZGUmIGYsIGZsb2F0IHhQb3MsIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzLCBH
bHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAogewogICAgIEFTU0VSVChmcm9tICsg
bGVuIDw9IHRleHRMZW5ndGgoKSk7CiAgICAgaWYgKCF0ZXh0TGVuZ3RoKCkpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgJKHJldmlzaW9uIDE3ODUxNSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTg5LDgg
Kzg5LDggQEAgcHVibGljOgogICAgIHVuc2lnbmVkIHRleHRMZW5ndGgoKSBjb25zdCB7IHJldHVy
biBtX3RleHQuaW1wbCgpLT5sZW5ndGgoKTsgfSAvLyBub24gdmlydHVhbCBpbXBsZW1lbnRhdGlv
biBvZiBsZW5ndGgoKQogICAgIHZvaWQgcG9zaXRpb25MaW5lQm94KElubGluZVRleHRCb3gmKTsK
IAotICAgIHZpcnR1YWwgZmxvYXQgd2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBj
b25zdCBGb250Q2FzY2FkZSYsIGZsb2F0IHhQb3MsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERh
dGEqPiogZmFsbGJhY2tGb250cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29uc3Q7Ci0gICAg
dmlydHVhbCBmbG9hdCB3aWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIGZsb2F0IHhQ
b3MsIGJvb2wgZmlyc3RMaW5lID0gZmFsc2UsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEq
PiogZmFsbGJhY2tGb250cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29uc3Q7CisgICAgdmly
dHVhbCBmbG9hdCB3aWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIGNvbnN0IEZvbnRD
YXNjYWRlJiwgZmxvYXQgeFBvcywgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMg
PSAwLCBHbHlwaE92ZXJmbG93KiA9IDApIGNvbnN0OworICAgIHZpcnR1YWwgZmxvYXQgd2lkdGgo
dW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBmbG9hdCB4UG9zLCBib29sIGZpcnN0TGluZSA9
IGZhbHNlLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cyA9IDAsIEdseXBoT3Zl
cmZsb3cqID0gMCkgY29uc3Q7CiAKICAgICBmbG9hdCBtaW5Mb2dpY2FsV2lkdGgoKSBjb25zdDsK
ICAgICBmbG9hdCBtYXhMb2dpY2FsV2lkdGgoKSBjb25zdDsKQEAgLTE4MCw3ICsxODAsNyBAQCBw
cml2YXRlOgogCiAgICAgdmlydHVhbCBib29sIGNhbkhhdmVDaGlsZHJlbigpIGNvbnN0IG92ZXJy
aWRlIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICB2b2lkIGNvbXB1dGVQcmVmZXJyZWRM
b2dpY2FsV2lkdGhzKGZsb2F0IGxlYWRXaWR0aCwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0
YSo+JiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93Jik7CisgICAgdm9pZCBjb21wdXRlUHJl
ZmVycmVkTG9naWNhbFdpZHRocyhmbG9hdCBsZWFkV2lkdGgsIEhhc2hTZXQ8Y29uc3QgRm9udCo+
JiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93Jik7CiAKICAgICBib29sIGNvbXB1dGVDYW5V
c2VTaW1wbGVGb250Q29kZVBhdGgoKSBjb25zdDsKICAgICAKQEAgLTE5Miw3ICsxOTIsNyBAQCBw
cml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVz
dCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBjb25zdCBMYXlvdXRQ
b2ludCYsIEhpdFRlc3RBY3Rpb24pIG92ZXJyaWRlIGZpbmFsIHsgQVNTRVJUX05PVF9SRUFDSEVE
KCk7IHJldHVybiBmYWxzZTsgfQogCiAgICAgYm9vbCBjb250YWluc09ubHlXaGl0ZXNwYWNlKHVu
c2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbikgY29uc3Q7Ci0gICAgZmxvYXQgd2lkdGhGcm9tQ2Fj
aGUoY29uc3QgRm9udENhc2NhZGUmLCBpbnQgc3RhcnQsIGludCBsZW4sIGZsb2F0IHhQb3MsIEhh
c2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxv
dyosIGNvbnN0IFJlbmRlclN0eWxlJikgY29uc3Q7CisgICAgZmxvYXQgd2lkdGhGcm9tQ2FjaGUo
Y29uc3QgRm9udENhc2NhZGUmLCBpbnQgc3RhcnQsIGludCBsZW4sIGZsb2F0IHhQb3MsIEhhc2hT
ZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiwgY29uc3QgUmVu
ZGVyU3R5bGUmKSBjb25zdDsKICAgICBib29sIGlzQWxsQVNDSUkoKSBjb25zdCB7IHJldHVybiBt
X2lzQWxsQVNDSUk7IH0KICAgICBib29sIGNvbXB1dGVVc2VCYWNrc2xhc2hBc1llblN5bWJvbCgp
IGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAkocmV2aXNpb24gMTc4NTE1KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJDU1NGb250U2VsZWN0b3Iu
aCIKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCisj
aW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVTZWxl
Y3Rpb24uaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKQEAgLTQwLDcgKzQxLDYgQEAKICNpbmNs
dWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJT
ZXR0aW5ncy5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5jbHVkZSAiU3R5bGVS
ZXNvbHZlci5oIgogI2luY2x1ZGUgIlRleHRDb250cm9sSW5uZXJFbGVtZW50cy5oIgogI2luY2x1
ZGUgPHd0Zi9TdGFja1N0YXRzLmg+CkBAIC0zNDYsNyArMzQ2LDcgQEAgTGF5b3V0VW5pdCBSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OgogICAgIGlmIChmYW1pbHkgPT0gIkx1Y2lkYSBHcmFu
ZGUiKQogICAgICAgICBtYXhDaGFyV2lkdGggPSBzY2FsZUVtVG9Vbml0cyg0MDI3KTsKICAgICBl
bHNlIGlmIChzdHlsZSgpLmZvbnRDYXNjYWRlKCkuaGFzVmFsaWRBdmVyYWdlQ2hhcldpZHRoKCkp
Ci0gICAgICAgIG1heENoYXJXaWR0aCA9IHJvdW5kZihzdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJp
bWFyeUZvbnREYXRhKCkubWF4Q2hhcldpZHRoKCkpOworICAgICAgICBtYXhDaGFyV2lkdGggPSBy
b3VuZGYoc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCkubWF4Q2hhcldpZHRoKCkp
OwogI2VuZGlmCiAKICAgICAvLyBGb3IgdGV4dCBpbnB1dHMsIElFIGFkZHMgc29tZSBleHRyYSB3
aWR0aC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0J
KHJldmlzaW9uIDE3ODUxNSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTgwLDcgKzU4MCw3IEBAIHN0YXRpYyB2b2lkIGFk
anVzdElucHV0RWxlbWVudEJ1dHRvblN0eWwKICAgICBGb250Q2FzY2FkZSBmb250ID0gc3R5bGUu
Zm9udENhc2NhZGUoKTsKICAgICAKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gaW5wdXRF
bGVtZW50LnJlbmRlcmVyKCk7Ci0gICAgaWYgKGZvbnQucHJpbWFyeUZvbnREYXRhKCkuaXNTVkdG
b250KCkgJiYgIXJlbmRlcmVyKQorICAgIGlmIChmb250LnByaW1hcnlGb250KCkuaXNTVkdGb250
KCkgJiYgIXJlbmRlcmVyKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgZmxvYXQgbWF4aW11
bVdpZHRoID0gbG9jYWxpemVkRGF0ZUNhY2hlKCkubWF4aW11bVdpZHRoRm9yRGF0ZVR5cGUoZGF0
ZVR5cGUsIGZvbnQsIFJlbmRlclRoZW1lTWVhc3VyZVRleHRDbGllbnQoZm9udCwgKnJlbmRlcmVy
LCBzdHlsZSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3gu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94
LmNwcAkocmV2aXNpb24gMTc4NTE1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJ
bmxpbmVCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04ODUsNyArODg1LDcgQEAgdm9pZCBSb290
SW5saW5lQm94Ojphc2NlbnRBbmREZXNjZW50Rm9yQgogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgVmVjdG9yPGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIHVzZWRGb250cyA9IG51bGxwdHI7
CisgICAgVmVjdG9yPGNvbnN0IEZvbnQqPiogdXNlZEZvbnRzID0gbnVsbHB0cjsKICAgICBHbHlw
aE92ZXJmbG93KiBnbHlwaE92ZXJmbG93ID0gbnVsbHB0cjsKICAgICBpZiAoaXM8SW5saW5lVGV4
dEJveD4oYm94KSkgewogICAgICAgICBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcDo6
aXRlcmF0b3IgaXQgPSB0ZXh0Qm94RGF0YU1hcC5maW5kKCZkb3duY2FzdDxJbmxpbmVUZXh0Qm94
Pihib3gpKTsKQEAgLTkwMSw3ICs5MDEsNyBAQCB2b2lkIFJvb3RJbmxpbmVCb3g6OmFzY2VudEFu
ZERlc2NlbnRGb3JCCiAKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgYm94TGluZVN0eWxlID0gYm94
LmxpbmVTdHlsZSgpOwogICAgIGlmICh1c2VkRm9udHMgJiYgIXVzZWRGb250cy0+aXNFbXB0eSgp
ICYmIChpbmNsdWRlRm9udCB8fCAoYm94TGluZVN0eWxlLmxpbmVIZWlnaHQoKS5pc05lZ2F0aXZl
KCkgJiYgaW5jbHVkZUxlYWRpbmcpKSkgewotICAgICAgICB1c2VkRm9udHMtPmFwcGVuZCgmYm94
TGluZVN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkpOworICAgICAgICB1c2Vk
Rm9udHMtPmFwcGVuZCgmYm94TGluZVN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKSk7
CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdXNlZEZvbnRzLT5zaXplKCk7ICsraSkg
ewogICAgICAgICAgICAgY29uc3QgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzID0gdXNlZEZvbnRz
LT5hdChpKS0+Zm9udE1ldHJpY3MoKTsKICAgICAgICAgICAgIGludCB1c2VkRm9udEFzY2VudCA9
IGZvbnRNZXRyaWNzLmFzY2VudChiYXNlbGluZVR5cGUoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuY3BwCShyZXZpc2lvbiAxNzg1MTUpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUyLDcgKzUyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIFNp
bXBsZUxpbmVMYXlvdXQgewogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0
YXRpYyBib29sIGNhblVzZUZvclRleHQoY29uc3QgQ2hhcmFjdGVyVHlwZSogdGV4dCwgdW5zaWdu
ZWQgbGVuZ3RoLCBjb25zdCBTaW1wbGVGb250RGF0YSYgZm9udERhdGEpCitzdGF0aWMgYm9vbCBj
YW5Vc2VGb3JUZXh0KGNvbnN0IENoYXJhY3RlclR5cGUqIHRleHQsIHVuc2lnbmVkIGxlbmd0aCwg
Y29uc3QgRm9udCYgZm9udCkKIHsKICAgICAvLyBGSVhNRTogPHRleHRhcmVhIG1heGxlbmd0aD0w
PiBnZW5lcmF0ZXMgZW1wdHkgdGV4dCBub2RlLgogICAgIGlmICghbGVuZ3RoKQpAQCAtNzUsMTcg
Kzc1LDE3IEBAIHN0YXRpYyBib29sIGNhblVzZUZvclRleHQoY29uc3QgQ2hhcmFjdGUKICAgICAg
ICAgICAgIHx8IGRpcmVjdGlvbiA9PSBVX1BPUF9ESVJFQ1RJT05BTF9GT1JNQVQgfHwgZGlyZWN0
aW9uID09IFVfQk9VTkRBUllfTkVVVFJBTCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgICAgICBpZiAoIWZvbnREYXRhLmdseXBoRm9yQ2hhcmFjdGVyKGNoYXJhY3RlcikpCisgICAg
ICAgIGlmICghZm9udC5nbHlwaEZvckNoYXJhY3RlcihjaGFyYWN0ZXIpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wg
Y2FuVXNlRm9yVGV4dChjb25zdCBSZW5kZXJUZXh0JiB0ZXh0UmVuZGVyZXIsIGNvbnN0IFNpbXBs
ZUZvbnREYXRhJiBmb250RGF0YSkKK3N0YXRpYyBib29sIGNhblVzZUZvclRleHQoY29uc3QgUmVu
ZGVyVGV4dCYgdGV4dFJlbmRlcmVyLCBjb25zdCBGb250JiBmb250KQogewogICAgIGlmICh0ZXh0
UmVuZGVyZXIuaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBjYW5Vc2VGb3JUZXh0KHRleHRSZW5k
ZXJlci5jaGFyYWN0ZXJzOCgpLCB0ZXh0UmVuZGVyZXIudGV4dExlbmd0aCgpLCBmb250RGF0YSk7
Ci0gICAgcmV0dXJuIGNhblVzZUZvclRleHQodGV4dFJlbmRlcmVyLmNoYXJhY3RlcnMxNigpLCB0
ZXh0UmVuZGVyZXIudGV4dExlbmd0aCgpLCBmb250RGF0YSk7CisgICAgICAgIHJldHVybiBjYW5V
c2VGb3JUZXh0KHRleHRSZW5kZXJlci5jaGFyYWN0ZXJzOCgpLCB0ZXh0UmVuZGVyZXIudGV4dExl
bmd0aCgpLCBmb250KTsKKyAgICByZXR1cm4gY2FuVXNlRm9yVGV4dCh0ZXh0UmVuZGVyZXIuY2hh
cmFjdGVyczE2KCksIHRleHRSZW5kZXJlci50ZXh0TGVuZ3RoKCksIGZvbnQpOwogfQogCiBib29s
IGNhblVzZUZvcihjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3cpCkBAIC0xODQsMTEgKzE4NCwx
MSBAQCBib29sIGNhblVzZUZvcihjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsCiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKHN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFy
eUZvbnREYXRhKCkuaXNTVkdGb250KCkpCisgICAgaWYgKHN0eWxlLmZvbnRDYXNjYWRlKCkucHJp
bWFyeUZvbnQoKS5pc1NWR0ZvbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIC8vIFdl
IGFzc3VtZSB0aGF0IGFsbCBsaW5lcyBoYXZlIG1ldHJpY3MgYmFzZWQgcHVyZWx5IG9uIHRoZSBw
cmltYXJ5IGZvbnQuCi0gICAgYXV0byYgcHJpbWFyeUZvbnREYXRhID0gc3R5bGUuZm9udENhc2Nh
ZGUoKS5wcmltYXJ5Rm9udERhdGEoKTsKLSAgICBpZiAocHJpbWFyeUZvbnREYXRhLmlzTG9hZGlu
ZygpKQorICAgIGF1dG8mIHByaW1hcnlGb250ID0gc3R5bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5
Rm9udCgpOworICAgIGlmIChwcmltYXJ5Rm9udC5pc0xvYWRpbmcoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIGZvciAoY29uc3QgYXV0byYgdGV4dFJlbmRlcmVyIDogY2hpbGRyZW5PZlR5
cGU8UmVuZGVyVGV4dD4oZmxvdykpIHsKICAgICAgICAgaWYgKHRleHRSZW5kZXJlci5pc0NvbWJp
bmVUZXh0KCkgfHwgdGV4dFJlbmRlcmVyLmlzQ291bnRlcigpIHx8IHRleHRSZW5kZXJlci5pc1F1
b3RlKCkgfHwgdGV4dFJlbmRlcmVyLmlzVGV4dEZyYWdtZW50KCkKQEAgLTE5Niw3ICsxOTYsNyBA
QCBib29sIGNhblVzZUZvcihjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmIChzdHlsZS5mb250Q2FzY2FkZSgpLmNvZGVQYXRoKFRl
eHRSdW4odGV4dFJlbmRlcmVyLnRleHQoKSkpICE9IEZvbnRDYXNjYWRlOjpTaW1wbGUpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghY2FuVXNlRm9yVGV4dCh0ZXh0UmVu
ZGVyZXIsIHByaW1hcnlGb250RGF0YSkpCisgICAgICAgIGlmICghY2FuVXNlRm9yVGV4dCh0ZXh0
UmVuZGVyZXIsIHByaW1hcnlGb250KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9C
cmVha2luZ0NvbnRleHRJbmxpbmVIZWFkZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL2xpbmUvQnJlYWtpbmdDb250ZXh0SW5saW5lSGVhZGVycy5oCShyZXZpc2lv
biAxNzg1MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9CcmVha2luZ0NvbnRl
eHRJbmxpbmVIZWFkZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgc3RydWN0
IFdvcmRNZWFzdXJlbWVudCB7CiAgICAgZmxvYXQgd2lkdGg7CiAgICAgaW50IHN0YXJ0T2Zmc2V0
OwogICAgIGludCBlbmRPZmZzZXQ7Ci0gICAgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+
IGZhbGxiYWNrRm9udHM7CisgICAgSGFzaFNldDxjb25zdCBGb250Kj4gZmFsbGJhY2tGb250czsK
IH07CiAKIGNsYXNzIEJyZWFraW5nQ29udGV4dCB7CkBAIC00ODYsMTMgKzQ4NiwxMyBAQCBpbmxp
bmUgdm9pZCB1cGRhdGVDb3VudGVySWZOZWVkZWQoUmVuZGVyCiAgICAgZG93bmNhc3Q8UmVuZGVy
Q291bnRlcj4ocmVuZGVyVGV4dCkudXBkYXRlQ291bnRlcigpOwogfQogCi1pbmxpbmUgZmxvYXQg
bWVhc3VyZUh5cGhlbldpZHRoKFJlbmRlclRleHQqIHJlbmRlcmVyLCBjb25zdCBGb250Q2FzY2Fk
ZSYgZm9udCwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0g
MCkKK2lubGluZSBmbG9hdCBtZWFzdXJlSHlwaGVuV2lkdGgoUmVuZGVyVGV4dCogcmVuZGVyZXIs
IGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tG
b250cyA9IDApCiB7CiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlID0gcmVuZGVyZXItPnN0
eWxlKCk7CiAgICAgcmV0dXJuIGZvbnQud2lkdGgoUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRS
dW4ocmVuZGVyZXIsIGZvbnQsIHN0eWxlLmh5cGhlblN0cmluZygpLnN0cmluZygpLCBzdHlsZSks
IGZhbGxiYWNrRm9udHMpOwogfQogCi1BTFdBWVNfSU5MSU5FIGZsb2F0IHRleHRXaWR0aChSZW5k
ZXJUZXh0KiB0ZXh0LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIGNvbnN0IEZvbnRDYXNj
YWRlJiBmb250LCBmbG9hdCB4UG9zLCBib29sIGlzRml4ZWRQaXRjaCwgYm9vbCBjb2xsYXBzZVdo
aXRlU3BhY2UsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiYgZmFsbGJhY2tGb250cywg
VGV4dExheW91dCogbGF5b3V0ID0gMCkKK0FMV0FZU19JTkxJTkUgZmxvYXQgdGV4dFdpZHRoKFJl
bmRlclRleHQqIHRleHQsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgY29uc3QgRm9udENh
c2NhZGUmIGZvbnQsIGZsb2F0IHhQb3MsIGJvb2wgaXNGaXhlZFBpdGNoLCBib29sIGNvbGxhcHNl
V2hpdGVTcGFjZSwgSGFzaFNldDxjb25zdCBGb250Kj4mIGZhbGxiYWNrRm9udHMsIFRleHRMYXlv
dXQqIGxheW91dCA9IDApCiB7CiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlID0gdGV4dC0+
c3R5bGUoKTsKIApAQCAtNTc4LDcgKzU3OCw3IEBAIGlubGluZSB2b2lkIHRyeUh5cGhlbmF0aW5n
KFJlbmRlclRleHQqIHQKICAgICBBU1NFUlQocG9zIC0gbGFzdFNwYWNlIC0gcHJlZml4TGVuZ3Ro
ID49IG1pbmltdW1TdWZmaXhMZW5ndGgpOwogCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIEhh
c2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiBmYWxsYmFja0ZvbnRzOworICAgIEhhc2hTZXQ8
Y29uc3QgRm9udCo+IGZhbGxiYWNrRm9udHM7CiAgICAgZmxvYXQgcHJlZml4V2lkdGggPSBoeXBo
ZW5XaWR0aCArIHRleHRXaWR0aCh0ZXh0LCBsYXN0U3BhY2UsIHByZWZpeExlbmd0aCwgZm9udCwg
eFBvcywgaXNGaXhlZFBpdGNoLCBjb2xsYXBzZVdoaXRlU3BhY2UsIGZhbGxiYWNrRm9udHMpICsg
bGFzdFNwYWNlV29yZFNwYWNpbmc7CiAgICAgQVNTRVJUKHhQb3MgKyBwcmVmaXhXaWR0aCA8PSBh
dmFpbGFibGVXaWR0aCk7CiAjZWxzZQpAQCAtNjU2LDcgKzY1Niw3IEBAIGlubGluZSBib29sIEJy
ZWFraW5nQ29udGV4dDo6aGFuZGxlVGV4dCgKIAogICAgIC8vIE5vbi16ZXJvIG9ubHkgd2hlbiBr
ZXJuaW5nIGlzIGVuYWJsZWQgYW5kIFRleHRMYXlvdXQgaXNuJ3QgdXNlZCwgaW4gd2hpY2ggY2Fz
ZSB3ZSBtZWFzdXJlCiAgICAgLy8gd29yZHMgd2l0aCB0aGVpciB0cmFpbGluZyBzcGFjZSwgdGhl
biBzdWJ0cmFjdCBpdHMgd2lkdGguCi0gICAgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+
IGZhbGxiYWNrRm9udHM7CisgICAgSGFzaFNldDxjb25zdCBGb250Kj4gZmFsbGJhY2tGb250czsK
ICAgICBmbG9hdCB3b3JkVHJhaWxpbmdTcGFjZVdpZHRoID0gKGZvbnQudHlwZXNldHRpbmdGZWF0
dXJlcygpICYgS2VybmluZykgJiYgIXRleHRMYXlvdXQgPyBmb250LndpZHRoKFJlbmRlckJsb2Nr
Ojpjb25zdHJ1Y3RUZXh0UnVuKCZyZW5kZXJUZXh0LCBmb250LCAmc3BhY2UsIDEsIHN0eWxlKSwg
JmZhbGxiYWNrRm9udHMpICsgd29yZFNwYWNpbmcgOiAwOwogCiAgICAgVUNoYXIgbGFzdENoYXJh
Y3RlciA9IG1fcmVuZGVyVGV4dEluZm8ubV9saW5lQnJlYWtJdGVyYXRvci5sYXN0Q2hhcmFjdGVy
KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9w
ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1s
L1JlbmRlck1hdGhNTE9wZXJhdG9yLmNwcAkocmV2aXNpb24gMTc4NTE1KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEzMzMsNyArMTMzMyw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnJl
c2V0U3RyZXRjaFMKIAogRmxvYXRSZWN0IFJlbmRlck1hdGhNTE9wZXJhdG9yOjpib3VuZHNGb3JH
bHlwaChjb25zdCBHbHlwaERhdGEmIGRhdGEpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGRhdGEuZm9u
dERhdGEtPmJvdW5kc0ZvckdseXBoKGRhdGEuZ2x5cGgpOworICAgIHJldHVybiBkYXRhLmZvbnQt
PmJvdW5kc0ZvckdseXBoKGRhdGEuZ2x5cGgpOwogfQogCiBmbG9hdCBSZW5kZXJNYXRoTUxPcGVy
YXRvcjo6aGVpZ2h0Rm9yR2x5cGgoY29uc3QgR2x5cGhEYXRhJiBkYXRhKSBjb25zdApAQCAtMTM0
Myw3ICsxMzQzLDcgQEAgZmxvYXQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmhlaWdodEZvckdseQog
CiBmbG9hdCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6YWR2YW5jZUZvckdseXBoKGNvbnN0IEdseXBo
RGF0YSYgZGF0YSkgY29uc3QKIHsKLSAgICByZXR1cm4gZGF0YS5mb250RGF0YS0+d2lkdGhGb3JH
bHlwaChkYXRhLmdseXBoKTsKKyAgICByZXR1cm4gZGF0YS5mb250LT53aWR0aEZvckdseXBoKGRh
dGEuZ2x5cGgpOwogfQogCiB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpjb21wdXRlUHJlZmVy
cmVkTG9naWNhbFdpZHRocygpCkBAIC0xNTIxLDExICsxNTIxLDExIEBAIGJvb2wgUmVuZGVyTWF0
aE1MT3BlcmF0b3I6OmdldEdseXBoQXNzZW0KICAgICBpZiAoIWJvdHRvbS5nbHlwaCkKICAgICAg
ICAgYm90dG9tLmdseXBoID0gZXh0ZW5zaW9uLmdseXBoOwogCi0gICAgdG9wLmZvbnREYXRhID0g
JnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKTsKLSAgICBleHRlbnNpb24u
Zm9udERhdGEgPSB0b3AuZm9udERhdGE7Ci0gICAgYm90dG9tLmZvbnREYXRhID0gdG9wLmZvbnRE
YXRhOworICAgIHRvcC5mb250ID0gJnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgp
OworICAgIGV4dGVuc2lvbi5mb250ID0gdG9wLmZvbnQ7CisgICAgYm90dG9tLmZvbnQgPSB0b3Au
Zm9udDsKICAgICBpZiAobWlkZGxlLmdseXBoKQotICAgICAgICBtaWRkbGUuZm9udERhdGEgPSB0
b3AuZm9udERhdGE7CisgICAgICAgIG1pZGRsZS5mb250ID0gdG9wLmZvbnQ7CiAKICAgICBzdHJl
dGNoeURhdGEuc2V0R2x5cGhBc3NlbWJseU1vZGUodG9wLCBleHRlbnNpb24sIGJvdHRvbSwgbWlk
ZGxlKTsKIApAQCAtMTUzOCwyNCArMTUzOCwyNCBAQCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6U3Ry
ZXRjaHlEYXRhIFJlbmRlCiAKICAgICBBU1NFUlQobV9pc1ZlcnRpY2FsICYmIGlzTGFyZ2VPcGVy
YXRvckluRGlzcGxheVN0eWxlKCkpOwogCi0gICAgY29uc3QgYXV0byYgcHJpbWFyeUZvbnREYXRh
ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpOworICAgIGNvbnN0IGF1
dG8mIHByaW1hcnlGb250ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCk7CiAg
ICAgR2x5cGhEYXRhIGJhc2VHbHlwaCA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5nbHlwaERhdGFG
b3JDaGFyYWN0ZXIoY2hhcmFjdGVyLCAhc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkp
OwotICAgIGlmICghcHJpbWFyeUZvbnREYXRhLm1hdGhEYXRhKCkgfHwgYmFzZUdseXBoLmZvbnRE
YXRhICE9ICZwcmltYXJ5Rm9udERhdGEpCisgICAgaWYgKCFwcmltYXJ5Rm9udC5tYXRoRGF0YSgp
IHx8IGJhc2VHbHlwaC5mb250ICE9ICZwcmltYXJ5Rm9udCkKICAgICAgICAgcmV0dXJuIGRhdGE7
CiAKICAgICBWZWN0b3I8R2x5cGg+IHNpemVWYXJpYW50czsKICAgICBWZWN0b3I8T3BlblR5cGVN
YXRoRGF0YTo6QXNzZW1ibHlQYXJ0PiBhc3NlbWJseVBhcnRzOwogCiAgICAgLy8gVGhlIHZhbHVl
IG9mIGRpc3BsYXlPcGVyYXRvck1pbkhlaWdodCBpcyBzb21ldGltZXMgdG9vIHNtYWxsLCBzbyB3
ZSBlbnN1cmUgdGhhdCBpdCBpcyBhdCBsZWFzdCBcc3FydHsyfSB0aW1lcyB0aGUgc2l6ZSBvZiB0
aGUgYmFzZSBnbHlwaC4KLSAgICBmbG9hdCBkaXNwbGF5T3BlcmF0b3JNaW5IZWlnaHQgPSBzdGQ6
Om1heChiYXNlR2x5cGguZm9udERhdGEtPmJvdW5kc0ZvckdseXBoKGJhc2VHbHlwaC5nbHlwaCku
aGVpZ2h0KCkgKiBzcXJ0T2ZUd29GbG9hdCwgcHJpbWFyeUZvbnREYXRhLm1hdGhEYXRhKCktPmdl
dE1hdGhDb25zdGFudChwcmltYXJ5Rm9udERhdGEsIE9wZW5UeXBlTWF0aERhdGE6OkRpc3BsYXlP
cGVyYXRvck1pbkhlaWdodCkpOworICAgIGZsb2F0IGRpc3BsYXlPcGVyYXRvck1pbkhlaWdodCA9
IHN0ZDo6bWF4KGJhc2VHbHlwaC5mb250LT5ib3VuZHNGb3JHbHlwaChiYXNlR2x5cGguZ2x5cGgp
LmhlaWdodCgpICogc3FydE9mVHdvRmxvYXQsIHByaW1hcnlGb250Lm1hdGhEYXRhKCktPmdldE1h
dGhDb25zdGFudChwcmltYXJ5Rm9udCwgT3BlblR5cGVNYXRoRGF0YTo6RGlzcGxheU9wZXJhdG9y
TWluSGVpZ2h0KSk7CiAKLSAgICBwcmltYXJ5Rm9udERhdGEubWF0aERhdGEoKS0+Z2V0TWF0aFZh
cmlhbnRzKGJhc2VHbHlwaC5nbHlwaCwgdHJ1ZSwgc2l6ZVZhcmlhbnRzLCBhc3NlbWJseVBhcnRz
KTsKKyAgICBwcmltYXJ5Rm9udC5tYXRoRGF0YSgpLT5nZXRNYXRoVmFyaWFudHMoYmFzZUdseXBo
LmdseXBoLCB0cnVlLCBzaXplVmFyaWFudHMsIGFzc2VtYmx5UGFydHMpOwogCiAgICAgLy8gV2Ug
Y2hvb3NlIHRoZSBmaXJzdCBzaXplIHZhcmlhbnQgdGhhdCBpcyBsYXJnZXIgdGhhbiB0aGUgZXhw
ZWN0ZWQgZGlzcGxheU9wZXJhdG9yTWluSGVpZ2h0IGFuZCBvdGhlcndpc2UgZmFsbGJhY2sgdG8g
dGhlIGxhcmdlc3QgdmFyaWFudC4KICAgICBmb3IgKGF1dG8mIHZhcmlhbnQgOiBzaXplVmFyaWFu
dHMpIHsKICAgICAgICAgR2x5cGhEYXRhIHNpemVWYXJpYW50OwogICAgICAgICBzaXplVmFyaWFu
dC5nbHlwaCA9IHZhcmlhbnQ7Ci0gICAgICAgIHNpemVWYXJpYW50LmZvbnREYXRhID0gJnByaW1h
cnlGb250RGF0YTsKKyAgICAgICAgc2l6ZVZhcmlhbnQuZm9udCA9ICZwcmltYXJ5Rm9udDsKICAg
ICAgICAgZGF0YS5zZXRTaXplVmFyaWFudE1vZGUoc2l6ZVZhcmlhbnQpOwogICAgICAgICBpZiAo
Ym91bmRzRm9yR2x5cGgoc2l6ZVZhcmlhbnQpLmhlaWdodCgpID49IGRpc3BsYXlPcGVyYXRvck1p
bkhlaWdodCkKICAgICAgICAgICAgIHJldHVybiBkYXRhOwpAQCAtMTU3MCwxOCArMTU3MCwxOCBA
QCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6U3RyZXRjaHlEYXRhIFJlbmRlCiAgICAgU3RyZXRjaHlE
YXRhIGRhdGE7CiAgICAgU3RyZXRjaHlEYXRhIGFzc2VtYmx5RGF0YTsKIAotICAgIGNvbnN0IGF1
dG8mIHByaW1hcnlGb250RGF0YSA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERh
dGEoKTsKKyAgICBjb25zdCBhdXRvJiBwcmltYXJ5Rm9udCA9IHN0eWxlKCkuZm9udENhc2NhZGUo
KS5wcmltYXJ5Rm9udCgpOwogICAgIEdseXBoRGF0YSBiYXNlR2x5cGggPSBzdHlsZSgpLmZvbnRD
YXNjYWRlKCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3RlciwgIXN0eWxlKCkuaXNMZWZ0
VG9SaWdodERpcmVjdGlvbigpKTsKICAgICAKLSAgICBpZiAocHJpbWFyeUZvbnREYXRhLm1hdGhE
YXRhKCkgJiYgYmFzZUdseXBoLmZvbnREYXRhID09ICZwcmltYXJ5Rm9udERhdGEpIHsKKyAgICBp
ZiAocHJpbWFyeUZvbnQubWF0aERhdGEoKSAmJiBiYXNlR2x5cGguZm9udCA9PSAmcHJpbWFyeUZv
bnQpIHsKICAgICAgICAgVmVjdG9yPEdseXBoPiBzaXplVmFyaWFudHM7CiAgICAgICAgIFZlY3Rv
cjxPcGVuVHlwZU1hdGhEYXRhOjpBc3NlbWJseVBhcnQ+IGFzc2VtYmx5UGFydHM7Ci0gICAgICAg
IHByaW1hcnlGb250RGF0YS5tYXRoRGF0YSgpLT5nZXRNYXRoVmFyaWFudHMoYmFzZUdseXBoLmds
eXBoLCBtX2lzVmVydGljYWwsIHNpemVWYXJpYW50cywgYXNzZW1ibHlQYXJ0cyk7CisgICAgICAg
IHByaW1hcnlGb250Lm1hdGhEYXRhKCktPmdldE1hdGhWYXJpYW50cyhiYXNlR2x5cGguZ2x5cGgs
IG1faXNWZXJ0aWNhbCwgc2l6ZVZhcmlhbnRzLCBhc3NlbWJseVBhcnRzKTsKICAgICAgICAgLy8g
V2UgdmVyaWZ5IHRoZSBzaXplIHZhcmlhbnRzLgogICAgICAgICBmb3IgKGF1dG8mIHZhcmlhbnQg
OiBzaXplVmFyaWFudHMpIHsKICAgICAgICAgICAgIEdseXBoRGF0YSBzaXplVmFyaWFudDsKICAg
ICAgICAgICAgIHNpemVWYXJpYW50LmdseXBoID0gdmFyaWFudDsKLSAgICAgICAgICAgIHNpemVW
YXJpYW50LmZvbnREYXRhID0gJnByaW1hcnlGb250RGF0YTsKKyAgICAgICAgICAgIHNpemVWYXJp
YW50LmZvbnQgPSAmcHJpbWFyeUZvbnQ7CiAgICAgICAgICAgICBpZiAobWF4aW11bUdseXBoV2lk
dGgpCiAgICAgICAgICAgICAgICAgKm1heGltdW1HbHlwaFdpZHRoID0gc3RkOjptYXgoKm1heGlt
dW1HbHlwaFdpZHRoLCBhZHZhbmNlRm9yR2x5cGgoc2l6ZVZhcmlhbnQpKTsKICAgICAgICAgICAg
IGVsc2UgewpAQCAtMTgwMSw4ICsxODAxLDggQEAgTGF5b3V0UmVjdCBSZW5kZXJNYXRoTUxPcGVy
YXRvcjo6cGFpbnRHbAogICAgIGluZm8uY29udGV4dC0+Y2xpcChjbGlwQm91bmRzKTsKIAogICAg
IEdseXBoQnVmZmVyIGJ1ZmZlcjsKLSAgICBidWZmZXIuYWRkKGRhdGEuZ2x5cGgsIGRhdGEuZm9u
dERhdGEsIGFkdmFuY2VGb3JHbHlwaChkYXRhKSk7Ci0gICAgaW5mby5jb250ZXh0LT5kcmF3R2x5
cGhzKHN0eWxlKCkuZm9udENhc2NhZGUoKSwgKmRhdGEuZm9udERhdGEsIGJ1ZmZlciwgMCwgMSwg
b3JpZ2luKTsKKyAgICBidWZmZXIuYWRkKGRhdGEuZ2x5cGgsIGRhdGEuZm9udCwgYWR2YW5jZUZv
ckdseXBoKGRhdGEpKTsKKyAgICBpbmZvLmNvbnRleHQtPmRyYXdHbHlwaHMoc3R5bGUoKS5mb250
Q2FzY2FkZSgpLCAqZGF0YS5mb250LCBidWZmZXIsIDAsIDEsIG9yaWdpbik7CiAKICAgICByZXR1
cm4gZ2x5cGhQYWludFJlY3Q7CiB9CkBAIC0xODk0LDExICsxODk0LDExIEBAIHZvaWQgUmVuZGVy
TWF0aE1MT3BlcmF0b3I6OnBhaW50KFBhaW50SW4KICAgICBpZiAobV9zdHJldGNoeURhdGEubW9k
ZSgpID09IERyYXdTaXplVmFyaWFudCkgewogICAgICAgICBBU1NFUlQobV9zdHJldGNoeURhdGEu
dmFyaWFudCgpLmdseXBoKTsKICAgICAgICAgR2x5cGhCdWZmZXIgYnVmZmVyOwotICAgICAgICBi
dWZmZXIuYWRkKG1fc3RyZXRjaHlEYXRhLnZhcmlhbnQoKS5nbHlwaCwgbV9zdHJldGNoeURhdGEu
dmFyaWFudCgpLmZvbnREYXRhLCBhZHZhbmNlRm9yR2x5cGgobV9zdHJldGNoeURhdGEudmFyaWFu
dCgpKSk7CisgICAgICAgIGJ1ZmZlci5hZGQobV9zdHJldGNoeURhdGEudmFyaWFudCgpLmdseXBo
LCBtX3N0cmV0Y2h5RGF0YS52YXJpYW50KCkuZm9udCwgYWR2YW5jZUZvckdseXBoKG1fc3RyZXRj
aHlEYXRhLnZhcmlhbnQoKSkpOwogICAgICAgICBMYXlvdXRQb2ludCBvcGVyYXRvclRvcExlZnQg
PSBjZWlsZWRJbnRQb2ludChwYWludE9mZnNldCArIGxvY2F0aW9uKCkpOwogICAgICAgICBGbG9h
dFJlY3QgZ2x5cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlwaChtX3N0cmV0Y2h5RGF0YS52YXJpYW50
KCkpOwogICAgICAgICBMYXlvdXRQb2ludCBvcGVyYXRvck9yaWdpbihvcGVyYXRvclRvcExlZnQu
eCgpLCBvcGVyYXRvclRvcExlZnQueSgpIC0gZ2x5cGhCb3VuZHMueSgpKTsKLSAgICAgICAgaW5m
by5jb250ZXh0LT5kcmF3R2x5cGhzKHN0eWxlKCkuZm9udENhc2NhZGUoKSwgKm1fc3RyZXRjaHlE
YXRhLnZhcmlhbnQoKS5mb250RGF0YSwgYnVmZmVyLCAwLCAxLCBvcGVyYXRvck9yaWdpbik7Cisg
ICAgICAgIGluZm8uY29udGV4dC0+ZHJhd0dseXBocyhzdHlsZSgpLmZvbnRDYXNjYWRlKCksICpt
X3N0cmV0Y2h5RGF0YS52YXJpYW50KCkuZm9udCwgYnVmZmVyLCAwLCAxLCBvcGVyYXRvck9yaWdp
bik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTE5ODAsOCArMTk4MCw4IEBAIHZvaWQg
UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBhaW50Q2hpbGRyZW4KIAogTGF5b3V0VW5pdCBSZW5kZXJN
YXRoTUxPcGVyYXRvcjo6dHJhaWxpbmdTcGFjZUVycm9yKCkKIHsKLSAgICBjb25zdCBhdXRvJiBw
cmltYXJ5Rm9udERhdGEgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCk7
Ci0gICAgaWYgKCFwcmltYXJ5Rm9udERhdGEubWF0aERhdGEoKSkKKyAgICBjb25zdCBhdXRvJiBw
cmltYXJ5Rm9udCA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpOworICAgIGlm
ICghcHJpbWFyeUZvbnQubWF0aERhdGEoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAvLyBG
b3IgT3BlblR5cGUgTUFUSCBmb250LCB0aGUgbGF5b3V0IGlzIGJhc2VkIG9uIFJlbmRlck1hdGhP
cGVyYXRvciBmb3Igd2hpY2ggdGhlIHByZWZlcnJlZCB3aWR0aCBpcyBzb21ldGltZXMgb3ZlcmVz
dGltYXRlZCAoYnVnIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzAz
MjYpLgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxP
cGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwv
UmVuZGVyTWF0aE1MT3BlcmF0b3IuaAkocmV2aXNpb24gMTc4NTE1KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCwxMSArMjgsMTEgQEAKIAogI2lmIEVOQUJMRShNQVRITUwpCiAKKyNpbmNsdWRlICJG
b250LmgiCiAjaW5jbHVkZSAiR2x5cGhQYWdlLmgiCiAjaW5jbHVkZSAiTWF0aE1MRWxlbWVudC5o
IgogI2luY2x1ZGUgIk9wZW5UeXBlTWF0aERhdGEuaCIKICNpbmNsdWRlICJSZW5kZXJNYXRoTUxU
b2tlbi5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxS
YWRpY2FsT3BlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9tYXRobWwvUmVuZGVyTWF0aE1MUmFkaWNhbE9wZXJhdG9yLmNwcAkocmV2aXNpb24gMTc4NTE1
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSYWRpY2Fs
T3BlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIFJlbmRlck1hdGhN
TFJhZGljYWxPcGVyYXRvcjo6UmVuZGVyTWF0aE0KIAogdm9pZCBSZW5kZXJNYXRoTUxSYWRpY2Fs
T3BlcmF0b3I6OnN0cmV0Y2hUbyhMYXlvdXRVbml0IGhlaWdodEFib3ZlQmFzZWxpbmUsIExheW91
dFVuaXQgZGVwdGhCZWxvd0Jhc2VsaW5lKQogewotICAgIGlmICghc3R5bGUoKS5mb250Q2FzY2Fk
ZSgpLnByaW1hcnlGb250RGF0YSgpLm1hdGhEYXRhKCkpIHsKKyAgICBpZiAoIXN0eWxlKCkuZm9u
dENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpLm1hdGhEYXRhKCkpIHsKICAgICAgICAgLy8gSWYgd2Ug
ZG8gbm90IGhhdmUgYW4gT3BlblR5cGUgTUFUSCBmb250LCB3ZSBhbHdheXMgbWFrZSB0aGUgcmFk
aWNhbCBkZXB0aCBhIGJpdCBsYXJnZXIgdGhhbiB0aGUgdGFyZ2V0LgogICAgICAgICBkZXB0aEJl
bG93QmFzZWxpbmUgKz0gZ1JhZGljYWxCb3R0b21Qb2ludExvd2VyOwogICAgIH0KQEAgLTgzLDcg
KzgzLDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxSYWRpY2FsT3BlcmF0b3I6OmNvbXB1dAogewogICAg
IEFTU0VSVChwcmVmZXJyZWRMb2dpY2FsV2lkdGhzRGlydHkoKSk7CiAKLSAgICBpZiAoc3R5bGUo
KS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLm1hdGhEYXRhKCkpIHsKKyAgICBpZiAo
c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCkubWF0aERhdGEoKSkgewogICAgICAg
ICBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTk2LDcgKzk2LDcgQEAgdm9pZCBSZW5kZXJNYXRo
TUxSYWRpY2FsT3BlcmF0b3I6OmNvbXB1dAogCiB2b2lkIFJlbmRlck1hdGhNTFJhZGljYWxPcGVy
YXRvcjo6Y29tcHV0ZUxvZ2ljYWxIZWlnaHQoTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBMYXlv
dXRVbml0IGxvZ2ljYWxUb3AsIExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyYgY29tcHV0ZWRW
YWx1ZXMpIGNvbnN0CiB7Ci0gICAgaWYgKHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9u
dERhdGEoKS5tYXRoRGF0YSgpKSB7CisgICAgaWYgKHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmlt
YXJ5Rm9udCgpLm1hdGhEYXRhKCkpIHsKICAgICAgICAgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmNv
bXB1dGVMb2dpY2FsSGVpZ2h0KGxvZ2ljYWxIZWlnaHQsIGxvZ2ljYWxUb3AsIGNvbXB1dGVkVmFs
dWVzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTExMSw3ICsxMTEsNyBAQCB2b2lkIFJl
bmRlck1hdGhNTFJhZGljYWxPcGVyYXRvcjo6cGFpbnQoCiAgICAgaWYgKGluZm8uY29udGV4dC0+
cGFpbnRpbmdEaXNhYmxlZCgpIHx8IGluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZUZvcmVncm91bmQg
fHwgc3R5bGUoKS52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgaWYgKHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5tYXRoRGF0YSgp
KSB7CisgICAgaWYgKHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpLm1hdGhEYXRh
KCkpIHsKICAgICAgICAgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBhaW50KGluZm8sIHBhaW50T2Zm
c2V0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcAkocmV2aXNpb24gMTc4
NTE1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA4LDE3ICsyMDgsMTcgQEAgdm9pZCBSZW5kZXJNYXRo
TUxSb290Ojp1cGRhdGVTdHlsZSgpCiAgICAgTGF5b3V0VW5pdCBrZXJuQWZ0ZXJEZWdyZWUgPSAt
MTAgKiBzdHlsZSgpLmZvbnRDYXNjYWRlKCkuc2l6ZSgpIC8gMTg7CiAgICAgbV9kZWdyZWVCb3R0
b21SYWlzZVBlcmNlbnQgPSAwLjZmOwogCi0gICAgY29uc3QgYXV0byYgcHJpbWFyeUZvbnREYXRh
ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpOwotICAgIGlmIChhdXRv
KiBtYXRoRGF0YSA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5tYXRo
RGF0YSgpKSB7CisgICAgY29uc3QgYXV0byYgcHJpbWFyeUZvbnQgPSBzdHlsZSgpLmZvbnRDYXNj
YWRlKCkucHJpbWFyeUZvbnQoKTsKKyAgICBpZiAoYXV0byogbWF0aERhdGEgPSBzdHlsZSgpLmZv
bnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKS5tYXRoRGF0YSgpKSB7CiAgICAgICAgIC8vIEZJWE1F
OiBtX3ZlcnRpY2FsR2FwIHNob3VsZCB1c2UgUmFkaWNhbERpc3BsYXlTdHlsZVZlcnRpY2FsIGlu
IGRpc3BsYXkgbW9kZSAoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEx
ODczNykuCi0gICAgICAgIG1fdmVydGljYWxHYXAgPSBtYXRoRGF0YS0+Z2V0TWF0aENvbnN0YW50
KHByaW1hcnlGb250RGF0YSwgT3BlblR5cGVNYXRoRGF0YTo6UmFkaWNhbFZlcnRpY2FsR2FwKTsK
LSAgICAgICAgbV9ydWxlVGhpY2tuZXNzID0gbWF0aERhdGEtPmdldE1hdGhDb25zdGFudChwcmlt
YXJ5Rm9udERhdGEsIE9wZW5UeXBlTWF0aERhdGE6OlJhZGljYWxSdWxlVGhpY2tuZXNzKTsKLSAg
ICAgICAgbV9leHRyYUFzY2VuZGVyID0gbWF0aERhdGEtPmdldE1hdGhDb25zdGFudChwcmltYXJ5
Rm9udERhdGEsIE9wZW5UeXBlTWF0aERhdGE6OlJhZGljYWxFeHRyYUFzY2VuZGVyKTsKKyAgICAg
ICAgbV92ZXJ0aWNhbEdhcCA9IG1hdGhEYXRhLT5nZXRNYXRoQ29uc3RhbnQocHJpbWFyeUZvbnQs
IE9wZW5UeXBlTWF0aERhdGE6OlJhZGljYWxWZXJ0aWNhbEdhcCk7CisgICAgICAgIG1fcnVsZVRo
aWNrbmVzcyA9IG1hdGhEYXRhLT5nZXRNYXRoQ29uc3RhbnQocHJpbWFyeUZvbnQsIE9wZW5UeXBl
TWF0aERhdGE6OlJhZGljYWxSdWxlVGhpY2tuZXNzKTsKKyAgICAgICAgbV9leHRyYUFzY2VuZGVy
ID0gbWF0aERhdGEtPmdldE1hdGhDb25zdGFudChwcmltYXJ5Rm9udCwgT3BlblR5cGVNYXRoRGF0
YTo6UmFkaWNhbEV4dHJhQXNjZW5kZXIpOwogCiAgICAgICAgIGlmICghaXNSZW5kZXJNYXRoTUxT
cXVhcmVSb290KCkpIHsKLSAgICAgICAgICAgIGtlcm5CZWZvcmVEZWdyZWUgPSBtYXRoRGF0YS0+
Z2V0TWF0aENvbnN0YW50KHByaW1hcnlGb250RGF0YSwgT3BlblR5cGVNYXRoRGF0YTo6UmFkaWNh
bEtlcm5CZWZvcmVEZWdyZWUpOwotICAgICAgICAgICAga2VybkFmdGVyRGVncmVlID0gbWF0aERh
dGEtPmdldE1hdGhDb25zdGFudChwcmltYXJ5Rm9udERhdGEsIE9wZW5UeXBlTWF0aERhdGE6OlJh
ZGljYWxLZXJuQWZ0ZXJEZWdyZWUpOwotICAgICAgICAgICAgbV9kZWdyZWVCb3R0b21SYWlzZVBl
cmNlbnQgPSBtYXRoRGF0YS0+Z2V0TWF0aENvbnN0YW50KHByaW1hcnlGb250RGF0YSwgT3BlblR5
cGVNYXRoRGF0YTo6UmFkaWNhbERlZ3JlZUJvdHRvbVJhaXNlUGVyY2VudCk7CisgICAgICAgICAg
ICBrZXJuQmVmb3JlRGVncmVlID0gbWF0aERhdGEtPmdldE1hdGhDb25zdGFudChwcmltYXJ5Rm9u
dCwgT3BlblR5cGVNYXRoRGF0YTo6UmFkaWNhbEtlcm5CZWZvcmVEZWdyZWUpOworICAgICAgICAg
ICAga2VybkFmdGVyRGVncmVlID0gbWF0aERhdGEtPmdldE1hdGhDb25zdGFudChwcmltYXJ5Rm9u
dCwgT3BlblR5cGVNYXRoRGF0YTo6UmFkaWNhbEtlcm5BZnRlckRlZ3JlZSk7CisgICAgICAgICAg
ICBtX2RlZ3JlZUJvdHRvbVJhaXNlUGVyY2VudCA9IG1hdGhEYXRhLT5nZXRNYXRoQ29uc3RhbnQo
cHJpbWFyeUZvbnQsIE9wZW5UeXBlTWF0aERhdGE6OlJhZGljYWxEZWdyZWVCb3R0b21SYWlzZVBl
cmNlbnQpOwogICAgICAgICB9CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAJKHJldmlzaW9uIDE3ODUxNSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTExODQsNyArMTE4NCw3IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgUmVuZGVyU3R5bGU6Omh5
cGhlblMKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgZGVwZW5kIG9uIGxvY2FsZS4KICAgICBE
RVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBoeXBoZW5NaW51c1N0
cmluZywgKCZoeXBoZW5NaW51cywgMSkpOwogICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19M
T0NBTChBdG9taWNTdHJpbmcsIGh5cGhlblN0cmluZywgKCZoeXBoZW4sIDEpKTsKLSAgICByZXR1
cm4gZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5nbHlwaEZvckNoYXJhY3RlcihoeXBo
ZW4pID8gaHlwaGVuU3RyaW5nIDogaHlwaGVuTWludXNTdHJpbmc7CisgICAgcmV0dXJuIGZvbnRD
YXNjYWRlKCkucHJpbWFyeUZvbnQoKS5nbHlwaEZvckNoYXJhY3RlcihoeXBoZW4pID8gaHlwaGVu
U3RyaW5nIDogaHlwaGVuTWludXNTdHJpbmc7CiB9CiAKIGNvbnN0IEF0b21pY1N0cmluZyYgUmVu
ZGVyU3R5bGU6OnRleHRFbXBoYXNpc01hcmtTdHJpbmcoKSBjb25zdApJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwCShyZXZpc2lvbiAxNzg1
MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHVGV4dC5o
IgogCiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXF1ZXN0LmgiCiAjaW5jbHVk
ZSAiSGl0VGVzdFJlc3VsdC5oIgpAQCAtNDUsNyArNDYsNiBAQAogI2luY2x1ZGUgIlNWR1RleHRS
dW5SZW5kZXJpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtTGlzdC5oIgogI2lu
Y2x1ZGUgIlNWR1VSSVJlZmVyZW5jZS5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAj
aW5jbHVkZSAiVHJhbnNmb3JtU3RhdGUuaCIKICNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24uaCIK
ICNpbmNsdWRlIDx3dGYvU3RhY2tTdGF0cy5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwCShyZXZpc2lvbiAxNzg1MTUpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MTksNyArNDE5LDcgQEAgVGV4dFJ1biBTVkdJbmxpbmVUZXh0Qm94Ojpj
b25zdHJ1Y3RUZXh0UgogICAgICAgICAgICAgICAgICwgZGlyZWN0aW9uKCkKICAgICAgICAgICAg
ICAgICAsIGRpck92ZXJyaWRlKCkgfHwgc3R5bGUtPnJ0bE9yZGVyaW5nKCkgPT0gVmlzdWFsT3Jk
ZXIgLyogZGlyZWN0aW9uYWxPdmVycmlkZSAqLyk7CiAKLSAgICBpZiAoc3R5bGUtPmZvbnRDYXNj
YWRlKCkucHJpbWFyeUZvbnREYXRhKCkuaXNTVkdGb250KCkpCisgICAgaWYgKHN0eWxlLT5mb250
Q2FzY2FkZSgpLnByaW1hcnlGb250KCkuaXNTVkdGb250KCkpCiAgICAgICAgIHJ1bi5zZXRSZW5k
ZXJpbmdDb250ZXh0KFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUocmVuZGVyZXIo
KSkpOwogCiAgICAgcnVuLmRpc2FibGVSb3VuZGluZ0hhY2tzKCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVT
cGFjaW5nLmNwcAkocmV2aXNpb24gMTc4NTE1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQx
LDE2ICs0MSwxNiBAQCBTVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZzo6U1ZHVGV4dExheW91CiBm
bG9hdCBTVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZzo6Y2FsY3VsYXRlU1ZHS2VybmluZyhib29s
IGlzVmVydGljYWxUZXh0LCBjb25zdCBTVkdUZXh0TWV0cmljczo6R2x5cGgmIGN1cnJlbnRHbHlw
aCkKIHsKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhJiBm
b250RGF0YSA9IG1fZm9udC5wcmltYXJ5Rm9udERhdGEoKTsKLSAgICBpZiAoIWZvbnREYXRhLmlz
U1ZHRm9udCgpKSB7CisgICAgY29uc3QgRm9udCYgZm9udCA9IG1fZm9udC5wcmltYXJ5Rm9udCgp
OworICAgIGlmICghZm9udC5pc1NWR0ZvbnQoKSkgewogICAgICAgICBtX2xhc3RHbHlwaC5pc1Zh
bGlkID0gZmFsc2U7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIEFTU0VSVChmb250
RGF0YS5pc0N1c3RvbUZvbnQoKSk7Ci0gICAgQVNTRVJUKGZvbnREYXRhLmlzU1ZHRm9udCgpKTsK
KyAgICBBU1NFUlQoZm9udC5pc0N1c3RvbUZvbnQoKSk7CisgICAgQVNTRVJUKGZvbnQuaXNTVkdG
b250KCkpOwogCi0gICAgYXV0byogc3ZnRm9udERhdGEgPSBzdGF0aWNfY2FzdDxjb25zdCBTVkdG
b250RGF0YSo+KGZvbnREYXRhLnN2Z0RhdGEoKSk7CisgICAgYXV0byogc3ZnRm9udERhdGEgPSBz
dGF0aWNfY2FzdDxjb25zdCBTVkdGb250RGF0YSo+KGZvbnQuc3ZnRGF0YSgpKTsKICAgICBTVkdG
b250RmFjZUVsZW1lbnQqIHN2Z0ZvbnRGYWNlID0gc3ZnRm9udERhdGEtPnN2Z0ZvbnRGYWNlRWxl
bWVudCgpOwogICAgIEFTU0VSVChzdmdGb250RmFjZSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3MuY3BwCShyZXZpc2lvbiAxNzg1MTUp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzAsNyArNzAsNyBAQCBUZXh0UnVuIFNWR1RleHRNZXRyaWNzOjpjb25z
dHJ1Y3RUZXh0UnVuCiAgICAgICAgICAgICAgICAgLCBzdHlsZS5kaXJlY3Rpb24oKQogICAgICAg
ICAgICAgICAgICwgaXNPdmVycmlkZShzdHlsZS51bmljb2RlQmlkaSgpKSAvKiBkaXJlY3Rpb25h
bE92ZXJyaWRlICovKTsKIAotICAgIGlmIChzdHlsZS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250
RGF0YSgpLmlzU1ZHRm9udCgpKQorICAgIGlmIChzdHlsZS5mb250Q2FzY2FkZSgpLnByaW1hcnlG
b250KCkuaXNTVkdGb250KCkpCiAgICAgICAgIHJ1bi5zZXRSZW5kZXJpbmdDb250ZXh0KFNWR1Rl
eHRSdW5SZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUodGV4dCkpOwogCiAgICAgcnVuLmRpc2FibGVS
b3VuZGluZ0hhY2tzKCk7CkBAIC05MSw3ICs5MSw3IEBAIFNWR1RleHRNZXRyaWNzIFNWR1RleHRN
ZXRyaWNzOjptZWFzdXJlQ2gKIAogU1ZHVGV4dE1ldHJpY3M6OlNWR1RleHRNZXRyaWNzKFJlbmRl
clNWR0lubGluZVRleHQmIHRleHQsIHVuc2lnbmVkIHBvc2l0aW9uLCB1bnNpZ25lZCBsZW5ndGgs
IGZsb2F0IHdpZHRoLCBjb25zdCBTdHJpbmcmIGdseXBoTmFtZSkKIHsKLSAgICBib29sIG5lZWRz
Q29udGV4dCA9IHRleHQuc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmlz
U1ZHRm9udCgpOworICAgIGJvb2wgbmVlZHNDb250ZXh0ID0gdGV4dC5zdHlsZSgpLmZvbnRDYXNj
YWRlKCkucHJpbWFyeUZvbnQoKS5pc1NWR0ZvbnQoKTsKICAgICBmbG9hdCBzY2FsaW5nRmFjdG9y
ID0gdGV4dC5zY2FsaW5nRmFjdG9yKCk7CiAgICAgQVNTRVJUKHNjYWxpbmdGYWN0b3IpOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250
ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Rl
eHRSdW5SZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gMTc4NTE1KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM3LDE4ICszNywxOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0
YXRpYyBpbmxpbmUgY29uc3QgU1ZHRm9udERhdGEqIHN2Z0ZvbnRBbmRGb250RmFjZUVsZW1lbnRG
b3JGb250RGF0YShjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsIFNWR0ZvbnRGYWNlRWxl
bWVudComIGZvbnRGYWNlLCBTVkdGb250RWxlbWVudComIGZvbnQpCitzdGF0aWMgaW5saW5lIGNv
bnN0IFNWR0ZvbnREYXRhKiBzdmdGb250QW5kRm9udEZhY2VFbGVtZW50Rm9yRm9udERhdGEoY29u
c3QgRm9udCogZm9udCwgU1ZHRm9udEZhY2VFbGVtZW50KiYgc3ZnRm9udEZhY2VFbGVtZW50LCBT
VkdGb250RWxlbWVudComIHN2Z0ZvbnRFbGVtZW50KQogewotICAgIEFTU0VSVChmb250RGF0YSk7
Ci0gICAgQVNTRVJUKGZvbnREYXRhLT5pc0N1c3RvbUZvbnQoKSk7Ci0gICAgQVNTRVJUKGZvbnRE
YXRhLT5pc1NWR0ZvbnQoKSk7CisgICAgQVNTRVJUKGZvbnQpOworICAgIEFTU0VSVChmb250LT5p
c0N1c3RvbUZvbnQoKSk7CisgICAgQVNTRVJUKGZvbnQtPmlzU1ZHRm9udCgpKTsKIAotICAgIGF1
dG8qIHN2Z0ZvbnREYXRhID0gc3RhdGljX2Nhc3Q8Y29uc3QgU1ZHRm9udERhdGEqPihmb250RGF0
YS0+c3ZnRGF0YSgpKTsKKyAgICBhdXRvKiBzdmdGb250RGF0YSA9IHN0YXRpY19jYXN0PGNvbnN0
IFNWR0ZvbnREYXRhKj4oZm9udC0+c3ZnRGF0YSgpKTsKIAotICAgIGZvbnRGYWNlID0gc3ZnRm9u
dERhdGEtPnN2Z0ZvbnRGYWNlRWxlbWVudCgpOwotICAgIEFTU0VSVChmb250RmFjZSk7CisgICAg
c3ZnRm9udEZhY2VFbGVtZW50ID0gc3ZnRm9udERhdGEtPnN2Z0ZvbnRGYWNlRWxlbWVudCgpOwor
ICAgIEFTU0VSVChzdmdGb250RmFjZUVsZW1lbnQpOwogCi0gICAgZm9udCA9IGZvbnRGYWNlLT5h
c3NvY2lhdGVkRm9udEVsZW1lbnQoKTsKKyAgICBzdmdGb250RWxlbWVudCA9IHN2Z0ZvbnRGYWNl
RWxlbWVudC0+YXNzb2NpYXRlZEZvbnRFbGVtZW50KCk7CiAgICAgcmV0dXJuIHN2Z0ZvbnREYXRh
OwogfQogCkBAIC02MSwyMSArNjEsMjEgQEAgZmxvYXQgU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRl
eHQ6OmZsb2F0VwogICAgIHJldHVybiBpdC5ydW5XaWR0aFNvRmFyKCk7CiB9CiAKLWJvb2wgU1ZH
VGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmFwcGx5U1ZHS2VybmluZyhjb25zdCBTaW1wbGVGb250
RGF0YSogZm9udERhdGEsIFdpZHRoSXRlcmF0b3ImIGl0ZXJhdG9yLCBHbHlwaEJ1ZmZlciogZ2x5
cGhCdWZmZXIsIGludCBmcm9tKSBjb25zdAorYm9vbCBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4
dDo6YXBwbHlTVkdLZXJuaW5nKGNvbnN0IEZvbnQqIGZvbnQsIFdpZHRoSXRlcmF0b3ImIGl0ZXJh
dG9yLCBHbHlwaEJ1ZmZlciogZ2x5cGhCdWZmZXIsIGludCBmcm9tKSBjb25zdAogewogICAgIEFT
U0VSVChnbHlwaEJ1ZmZlcik7CiAgICAgQVNTRVJUKGdseXBoQnVmZmVyLT5zaXplKCkgPiAxKTsK
ICAgICBTVkdGb250RWxlbWVudCogZm9udEVsZW1lbnQgPSAwOwogICAgIFNWR0ZvbnRGYWNlRWxl
bWVudCogZm9udEZhY2VFbGVtZW50ID0gMDsKIAotICAgIHN2Z0ZvbnRBbmRGb250RmFjZUVsZW1l
bnRGb3JGb250RGF0YShmb250RGF0YSwgZm9udEZhY2VFbGVtZW50LCBmb250RWxlbWVudCk7Cisg
ICAgc3ZnRm9udEFuZEZvbnRGYWNlRWxlbWVudEZvckZvbnREYXRhKGZvbnQsIGZvbnRGYWNlRWxl
bWVudCwgZm9udEVsZW1lbnQpOwogICAgIGlmICghZm9udEVsZW1lbnQgfHwgIWZvbnRGYWNlRWxl
bWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKGZvbnRFbGVtZW50LT5ob3Jp
em9udGFsS2VybmluZ01hcElzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBm
bG9hdCBzY2FsZSA9IHNjYWxlRW1Ub1VuaXRzKGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5zaXpl
KCksIGZvbnRGYWNlRWxlbWVudC0+dW5pdHNQZXJFbSgpKTsKKyAgICBmbG9hdCBzY2FsZSA9IHNj
YWxlRW1Ub1VuaXRzKGZvbnQtPnBsYXRmb3JtRGF0YSgpLnNpemUoKSwgZm9udEZhY2VFbGVtZW50
LT51bml0c1BlckVtKCkpOwogCiAgICAgU3RyaW5nIGxhc3RHbHlwaE5hbWU7CiAgICAgU3RyaW5n
IGxhc3RVbmljb2RlU3RyaW5nOwpAQCAtMjA1LDcgKzIwNSw3IEBAIHZvaWQgU1ZHR2x5cGhUb1Bh
dGhUcmFuc2xhdG9yOjphZHZhbmNlKCkKICAgICAgICAgfQogCiAgICAgICAgICsrbV9pbmRleDsK
LSAgICAgICAgaWYgKG1faW5kZXggPj0gbV9zdG9wcGluZ1BvaW50IHx8ICFtX2dseXBoQnVmZmVy
LmZvbnREYXRhQXQobV9pbmRleCktPmlzU1ZHRm9udCgpKQorICAgICAgICBpZiAobV9pbmRleCA+
PSBtX3N0b3BwaW5nUG9pbnQgfHwgIW1fZ2x5cGhCdWZmZXIuZm9udEF0KG1faW5kZXgpLT5pc1NW
R0ZvbnQoKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBtX2dseXBoID0gbV9nbHlwaEJ1
ZmZlci5nbHlwaEF0KG1faW5kZXgpOwogICAgICAgICBpZiAoIW1fZ2x5cGgpCkBAIC0yNDQsMTIg
KzI0NCwxMiBAQCBjbGFzcyBEdW1teUdseXBoVG9QYXRoVHJhbnNsYXRvciBmaW5hbCA6CiAgICAg
fQogfTsKIAotc3RkOjp1bmlxdWVfcHRyPEdseXBoVG9QYXRoVHJhbnNsYXRvcj4gU1ZHVGV4dFJ1
blJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUdseXBoVG9QYXRoVHJhbnNsYXRvcihjb25zdCBTaW1w
bGVGb250RGF0YSYgZm9udERhdGEsIGNvbnN0IFRleHRSdW4qIHRleHRSdW4sIGNvbnN0IEdseXBo
QnVmZmVyJiBnbHlwaEJ1ZmZlciwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50KSBjb25zdAorc3RkOjp1bmlxdWVfcHRyPEdseXBoVG9QYXRoVHJhbnNsYXRv
cj4gU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUdseXBoVG9QYXRoVHJhbnNsYXRv
cihjb25zdCBGb250JiBmb250LCBjb25zdCBUZXh0UnVuKiB0ZXh0UnVuLCBjb25zdCBHbHlwaEJ1
ZmZlciYgZ2x5cGhCdWZmZXIsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBv
aW50JiBwb2ludCkgY29uc3QKIHsKICAgICBTVkdGb250RWxlbWVudCogZm9udEVsZW1lbnQgPSBu
dWxscHRyOwogICAgIFNWR0ZvbnRGYWNlRWxlbWVudCogZm9udEZhY2VFbGVtZW50ID0gbnVsbHB0
cjsKIAotICAgIGNvbnN0IFNWR0ZvbnREYXRhKiBzdmdGb250RGF0YSA9IHN2Z0ZvbnRBbmRGb250
RmFjZUVsZW1lbnRGb3JGb250RGF0YSgmZm9udERhdGEsIGZvbnRGYWNlRWxlbWVudCwgZm9udEVs
ZW1lbnQpOworICAgIGNvbnN0IFNWR0ZvbnREYXRhKiBzdmdGb250RGF0YSA9IHN2Z0ZvbnRBbmRG
b250RmFjZUVsZW1lbnRGb3JGb250RGF0YSgmZm9udCwgZm9udEZhY2VFbGVtZW50LCBmb250RWxl
bWVudCk7CiAgICAgaWYgKCFmb250RWxlbWVudCB8fCAhZm9udEZhY2VFbGVtZW50KQogICAgICAg
ICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxEdW1teUdseXBoVG9QYXRoVHJhbnNsYXRvcj4oKTsK
IApAQCAtMjU3LDEyICsyNTcsMTIgQEAgc3RkOjp1bmlxdWVfcHRyPEdseXBoVG9QYXRoVHJhbnNs
YXRvcj4gUwogICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9IGVsZW1lbnRSZW5kZXJlci5zdHlsZSgp
OwogICAgIGJvb2wgaXNWZXJ0aWNhbFRleHQgPSBzdHlsZS5zdmdTdHlsZSgpLmlzVmVydGljYWxX
cml0aW5nTW9kZSgpOwogCi0gICAgZmxvYXQgc2NhbGUgPSBzY2FsZUVtVG9Vbml0cyhmb250RGF0
YS5wbGF0Zm9ybURhdGEoKS5zaXplKCksIGZvbnRGYWNlRWxlbWVudC0+dW5pdHNQZXJFbSgpKTsK
KyAgICBmbG9hdCBzY2FsZSA9IHNjYWxlRW1Ub1VuaXRzKGZvbnQucGxhdGZvcm1EYXRhKCkuc2l6
ZSgpLCBmb250RmFjZUVsZW1lbnQtPnVuaXRzUGVyRW0oKSk7CiAKICAgICByZXR1cm4gc3RkOjpt
YWtlX3VuaXF1ZTxTVkdHbHlwaFRvUGF0aFRyYW5zbGF0b3I+KHRleHRSdW4sIGdseXBoQnVmZmVy
LCBwb2ludCwgKnN2Z0ZvbnREYXRhLCAqZm9udEVsZW1lbnQsIGZyb20sIG51bUdseXBocywgc2Nh
bGUsIGlzVmVydGljYWxUZXh0KTsKIH0KIAotdm9pZCBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4
dDo6ZHJhd1NWR0dseXBocyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFNpbXBsZUZv
bnREYXRhKiBmb250RGF0YSwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBpbnQgZnJv
bSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Cit2b2lkIFNW
R1RleHRSdW5SZW5kZXJpbmdDb250ZXh0OjpkcmF3U1ZHR2x5cGhzKEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgY29uc3QgRm9udCogZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVy
LCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0
CiB7CiAgICAgYXV0byBhY3RpdmVQYWludGluZ1Jlc291cmNlID0gdGhpcy0+YWN0aXZlUGFpbnRp
bmdSZXNvdXJjZSgpOwogICAgIGlmICghYWN0aXZlUGFpbnRpbmdSZXNvdXJjZSkgewpAQCAtMjc4
LDcgKzI3OCw3IEBAIHZvaWQgU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmRyYXdTVkcKICAg
ICBBU1NFUlQoYWN0aXZlUGFpbnRpbmdSZXNvdXJjZSk7CiAKICAgICBSZW5kZXJTVkdSZXNvdXJj
ZU1vZGUgcmVzb3VyY2VNb2RlID0gY29udGV4dC0+dGV4dERyYXdpbmdNb2RlKCkgPT0gVGV4dE1v
ZGVTdHJva2UgPyBBcHBseVRvU3Ryb2tlTW9kZSA6IEFwcGx5VG9GaWxsTW9kZTsKLSAgICBmb3Ig
KGF1dG8gdHJhbnNsYXRvciA9IGNyZWF0ZUdseXBoVG9QYXRoVHJhbnNsYXRvcigqZm9udERhdGEs
IG51bGxwdHIsIGdseXBoQnVmZmVyLCBmcm9tLCBudW1HbHlwaHMsIHBvaW50KTsgdHJhbnNsYXRv
ci0+Y29udGFpbnNNb3JlUGF0aHMoKTsgdHJhbnNsYXRvci0+YWR2YW5jZSgpKSB7CisgICAgZm9y
IChhdXRvIHRyYW5zbGF0b3IgPSBjcmVhdGVHbHlwaFRvUGF0aFRyYW5zbGF0b3IoKmZvbnQsIG51
bGxwdHIsIGdseXBoQnVmZmVyLCBmcm9tLCBudW1HbHlwaHMsIHBvaW50KTsgdHJhbnNsYXRvci0+
Y29udGFpbnNNb3JlUGF0aHMoKTsgdHJhbnNsYXRvci0+YWR2YW5jZSgpKSB7CiAgICAgICAgIFBh
dGggZ2x5cGhQYXRoID0gdHJhbnNsYXRvci0+cGF0aCgpOwogICAgICAgICBpZiAoYWN0aXZlUGFp
bnRpbmdSZXNvdXJjZS0+YXBwbHlSZXNvdXJjZShlbGVtZW50UmVuZGVyZXIsIHN0eWxlLCBjb250
ZXh0LCByZXNvdXJjZU1vZGUpKSB7CiAgICAgICAgICAgICBmbG9hdCBzdHJva2VUaGlja25lc3Mg
PSBjb250ZXh0LT5zdHJva2VUaGlja25lc3MoKTsKQEAgLTI5MiwxMyArMjkyLDEzIEBAIHZvaWQg
U1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmRyYXdTVkcKIAogc3RhdGljIEdseXBoRGF0YSBt
aXNzaW5nR2x5cGhGb3JGb250KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250KQogewotICAgIGNvbnN0
IFNpbXBsZUZvbnREYXRhJiBwcmltYXJ5Rm9udERhdGEgPSBmb250LnByaW1hcnlGb250RGF0YSgp
OwotICAgIGlmICghcHJpbWFyeUZvbnREYXRhLmlzU1ZHRm9udCgpKQorICAgIGNvbnN0IEZvbnQm
IHByaW1hcnlGb250ID0gZm9udC5wcmltYXJ5Rm9udCgpOworICAgIGlmICghcHJpbWFyeUZvbnQu
aXNTVkdGb250KCkpCiAgICAgICAgIHJldHVybiBHbHlwaERhdGEoKTsKICAgICBTVkdGb250RWxl
bWVudCogZm9udEVsZW1lbnQ7CiAgICAgU1ZHRm9udEZhY2VFbGVtZW50KiBmb250RmFjZUVsZW1l
bnQ7Ci0gICAgc3ZnRm9udEFuZEZvbnRGYWNlRWxlbWVudEZvckZvbnREYXRhKCZwcmltYXJ5Rm9u
dERhdGEsIGZvbnRGYWNlRWxlbWVudCwgZm9udEVsZW1lbnQpOwotICAgIHJldHVybiBHbHlwaERh
dGEoZm9udEVsZW1lbnQtPm1pc3NpbmdHbHlwaCgpLCAmcHJpbWFyeUZvbnREYXRhKTsKKyAgICBz
dmdGb250QW5kRm9udEZhY2VFbGVtZW50Rm9yRm9udERhdGEoJnByaW1hcnlGb250LCBmb250RmFj
ZUVsZW1lbnQsIGZvbnRFbGVtZW50KTsKKyAgICByZXR1cm4gR2x5cGhEYXRhKGZvbnRFbGVtZW50
LT5taXNzaW5nR2x5cGgoKSwgJnByaW1hcnlGb250KTsKIH0KIAogR2x5cGhEYXRhIFNWR1RleHRS
dW5SZW5kZXJpbmdDb250ZXh0OjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoY29uc3QgRm9udENhc2Nh
ZGUmIGZvbnQsIFdpZHRoSXRlcmF0b3ImIGl0ZXJhdG9yLCBVQ2hhcjMyIGNoYXJhY3RlciwgYm9v
bCBtaXJyb3IsIGludCBjdXJyZW50Q2hhcmFjdGVyLCB1bnNpZ25lZCYgYWR2YW5jZUxlbmd0aCwg
U3RyaW5nJiBub3JtYWxpemVkU3BhY2VzU3RyaW5nQ2FjaGUpCkBAIC0zMDcsMjMgKzMwNywyMyBA
QCBHbHlwaERhdGEgU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmdsCiAgICAgaWYgKCFnbHlw
aERhdGEuZ2x5cGgpCiAgICAgICAgIHJldHVybiBtaXNzaW5nR2x5cGhGb3JGb250KGZvbnQpOwog
Ci0gICAgQVNTRVJUKGdseXBoRGF0YS5mb250RGF0YSk7CisgICAgQVNTRVJUKGdseXBoRGF0YS5m
b250KTsKIAogICAgIC8vIENoYXJhY3RlcnMgZW5jbG9zZWQgYnkgYW4gPGFsdEdseXBoPiBlbGVt
ZW50LCBtYXkgbm90IGJlIHJlZ2lzdGVyZWQgaW4gdGhlIEdseXBoUGFnZS4KLSAgICBpZiAoIWds
eXBoRGF0YS5mb250RGF0YS0+aXNTVkdGb250KCkpIHsKKyAgICBpZiAoIWdseXBoRGF0YS5mb250
LT5pc1NWR0ZvbnQoKSkgewogICAgICAgICBhdXRvJiBlbGVtZW50UmVuZGVyZXIgPSBpczxSZW5k
ZXJFbGVtZW50PihyZW5kZXJlcigpKSA/IGRvd25jYXN0PFJlbmRlckVsZW1lbnQ+KHJlbmRlcmVy
KCkpIDogKnJlbmRlcmVyKCkucGFyZW50KCk7CiAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRS
ZW5kZXJlckVsZW1lbnQgPSBlbGVtZW50UmVuZGVyZXIuZWxlbWVudCgpKSB7CiAgICAgICAgICAg
ICBpZiAoaXM8U1ZHQWx0R2x5cGhFbGVtZW50PigqcGFyZW50UmVuZGVyZXJFbGVtZW50KSkKLSAg
ICAgICAgICAgICAgICBnbHlwaERhdGEuZm9udERhdGEgPSAmZm9udC5wcmltYXJ5Rm9udERhdGEo
KTsKKyAgICAgICAgICAgICAgICBnbHlwaERhdGEuZm9udCA9ICZmb250LnByaW1hcnlGb250KCk7
CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoIWdseXBoRGF0YS5mb250RGF0YS0+aXNTVkdG
b250KCkpCisgICAgaWYgKCFnbHlwaERhdGEuZm9udC0+aXNTVkdGb250KCkpCiAgICAgICAgIHJl
dHVybiBnbHlwaERhdGE7CiAKICAgICBTVkdGb250RWxlbWVudCogZm9udEVsZW1lbnQgPSBudWxs
cHRyOwogICAgIFNWR0ZvbnRGYWNlRWxlbWVudCogZm9udEZhY2VFbGVtZW50ID0gbnVsbHB0cjsK
LSAgICBjb25zdCBTVkdGb250RGF0YSogc3ZnRm9udERhdGEgPSBzdmdGb250QW5kRm9udEZhY2VF
bGVtZW50Rm9yRm9udERhdGEoZ2x5cGhEYXRhLmZvbnREYXRhLCBmb250RmFjZUVsZW1lbnQsIGZv
bnRFbGVtZW50KTsKKyAgICBjb25zdCBTVkdGb250RGF0YSogc3ZnRm9udERhdGEgPSBzdmdGb250
QW5kRm9udEZhY2VFbGVtZW50Rm9yRm9udERhdGEoZ2x5cGhEYXRhLmZvbnQsIGZvbnRGYWNlRWxl
bWVudCwgZm9udEVsZW1lbnQpOwogICAgIGlmICghc3ZnRm9udERhdGEpCiAgICAgICAgIHJldHVy
biBnbHlwaERhdGE7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4
dFJ1blJlbmRlcmluZ0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmgJKHJldmlzaW9uIDE3ODUxNSkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRl
eHQuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsOSArNDMsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
ZXRBY3RpdmVQYWludGluZ1Jlc291cmNlKFJlbmRlclNWR1Jlc291cmNlKiBvYmplY3QpIHsgbV9h
Y3RpdmVQYWludGluZ1Jlc291cmNlID0gb2JqZWN0OyB9CiAKICAgICB2aXJ0dWFsIEdseXBoRGF0
YSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIoY29uc3QgRm9udENhc2NhZGUmLCBXaWR0aEl0ZXJhdG9y
JiwgVUNoYXIzMiBjaGFyYWN0ZXIsIGJvb2wgbWlycm9yLCBpbnQgY3VycmVudENoYXJhY3Rlciwg
dW5zaWduZWQmIGFkdmFuY2VMZW5ndGgsIFN0cmluZyYgbm9ybWFsaXplZFNwYWNlc1N0cmluZ0Nh
Y2hlKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1NWR0dseXBocyhHcmFwaGljc0Nv
bnRleHQqLCBjb25zdCBTaW1wbGVGb250RGF0YSosIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZy
b20sIGludCB0bywgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1
YWwgdm9pZCBkcmF3U1ZHR2x5cGhzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZvbnQqLCBjb25z
dCBHbHlwaEJ1ZmZlciYsIGludCBmcm9tLCBpbnQgdG8sIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25z
dCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGZsb2F0IGZsb2F0V2lkdGhVc2luZ1NWR0ZvbnQoY29u
c3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJp
bmcmIGdseXBoTmFtZSkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIGFwcGx5U1ZH
S2VybmluZyhjb25zdCBTaW1wbGVGb250RGF0YSosIFdpZHRoSXRlcmF0b3ImLCBHbHlwaEJ1ZmZl
ciosIGludCBmcm9tKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgYXBwbHlTVkdL
ZXJuaW5nKGNvbnN0IEZvbnQqLCBXaWR0aEl0ZXJhdG9yJiwgR2x5cGhCdWZmZXIqLCBpbnQgZnJv
bSkgY29uc3Qgb3ZlcnJpZGU7CiAjZW5kaWYKIAogcHJpdmF0ZToKQEAgLTYwLDcgKzYwLDcgQEAg
cHJpdmF0ZToKICAgICB2aXJ0dWFsIH5TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dCgpIHsgfQog
CiAjaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxHbHlw
aFRvUGF0aFRyYW5zbGF0b3I+IGNyZWF0ZUdseXBoVG9QYXRoVHJhbnNsYXRvcihjb25zdCBTaW1w
bGVGb250RGF0YSYsIGNvbnN0IFRleHRSdW4qLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBmcm9t
LCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8R2x5cGhUb1BhdGhUcmFuc2xhdG9yPiBjcmVhdGVHbHlw
aFRvUGF0aFRyYW5zbGF0b3IoY29uc3QgRm9udCYsIGNvbnN0IFRleHRSdW4qLCBjb25zdCBHbHlw
aEJ1ZmZlciYsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JikgY29u
c3Qgb3ZlcnJpZGU7CiAjZW5kaWYKIAogICAgIFJlbmRlck9iamVjdCYgbV9yZW5kZXJlcjsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnREYXRhLmNwcAkocmV2aXNpb24gMTc4NTE1KQorKysgU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnREYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsMTUg
KzU3LDE1IEBAIFNWR0ZvbnREYXRhOjpTVkdGb250RGF0YShTVkdGb250RmFjZUVsZW0KICAgICBB
U1NFUlRfQVJHKGZvbnRGYWNlRWxlbWVudCwgZm9udEZhY2VFbGVtZW50KTsKIH0KIAotdm9pZCBT
VkdGb250RGF0YTo6aW5pdGlhbGl6ZUZvbnREYXRhKFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwg
ZmxvYXQgZm9udFNpemUpCit2b2lkIFNWR0ZvbnREYXRhOjppbml0aWFsaXplRm9udChGb250KiBm
b250LCBmbG9hdCBmb250U2l6ZSkKIHsKLSAgICBBU1NFUlQoZm9udERhdGEpOworICAgIEFTU0VS
VChmb250KTsKIAogICAgIFNWR0ZvbnRGYWNlRWxlbWVudCogc3ZnRm9udEZhY2VFbGVtZW50ID0g
dGhpcy0+c3ZnRm9udEZhY2VFbGVtZW50KCk7CiAgICAgQVNTRVJUKHN2Z0ZvbnRGYWNlRWxlbWVu
dCk7CiAKLSAgICBmb250RGF0YS0+c2V0WmVyb1dpZHRoU3BhY2VHbHlwaCgwKTsKLSAgICBmb250
RGF0YS0+ZGV0ZXJtaW5lUGl0Y2goKTsKKyAgICBmb250LT5zZXRaZXJvV2lkdGhTcGFjZUdseXBo
KDApOworICAgIGZvbnQtPmRldGVybWluZVBpdGNoKCk7CiAKICAgICB1bnNpZ25lZCB1bml0c1Bl
ckVtID0gc3ZnRm9udEZhY2VFbGVtZW50LT51bml0c1BlckVtKCk7CiAgICAgZmxvYXQgc2NhbGUg
PSBzY2FsZUVtVG9Vbml0cyhmb250U2l6ZSwgdW5pdHNQZXJFbSk7CkBAIC03NCwxNSArNzQsMTUg
QEAgdm9pZCBTVkdGb250RGF0YTo6aW5pdGlhbGl6ZUZvbnREYXRhKFNpbQogICAgIGZsb2F0IGRl
c2NlbnQgPSBzdmdGb250RmFjZUVsZW1lbnQtPmRlc2NlbnQoKSAqIHNjYWxlOwogICAgIGZsb2F0
IGxpbmVHYXAgPSAwLjFmICogZm9udFNpemU7CiAKLSAgICBjb25zdCBHbHlwaFBhZ2UqIGdseXBo
UGFnZVplcm8gPSBmb250RGF0YS0+Z2x5cGhQYWdlKDApOworICAgIGNvbnN0IEdseXBoUGFnZSog
Z2x5cGhQYWdlWmVybyA9IGZvbnQtPmdseXBoUGFnZSgwKTsKIAogICAgIGlmICgheEhlaWdodCAm
JiBnbHlwaFBhZ2VaZXJvKSB7CiAgICAgICAgIC8vIEZhbGxiYWNrIGlmIHhfaGVpZ2h0QXR0ciBp
cyBub3Qgc3BlY2lmaWVkIGZvciB0aGUgZm9udCBlbGVtZW50LgogICAgICAgICBHbHlwaCBsZXR0
ZXJYR2x5cGggPSBnbHlwaFBhZ2VaZXJvLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoJ3gnKS5nbHlw
aDsKLSAgICAgICAgeEhlaWdodCA9IGxldHRlclhHbHlwaCA/IGZvbnREYXRhLT53aWR0aEZvckds
eXBoKGxldHRlclhHbHlwaCkgOiAyICogYXNjZW50IC8gMzsKKyAgICAgICAgeEhlaWdodCA9IGxl
dHRlclhHbHlwaCA/IGZvbnQtPndpZHRoRm9yR2x5cGgobGV0dGVyWEdseXBoKSA6IDIgKiBhc2Nl
bnQgLyAzOwogICAgIH0KIAotICAgIEZvbnRNZXRyaWNzJiBmb250TWV0cmljcyA9IGZvbnREYXRh
LT5mb250TWV0cmljcygpOworICAgIEZvbnRNZXRyaWNzJiBmb250TWV0cmljcyA9IGZvbnQtPmZv
bnRNZXRyaWNzKCk7CiAgICAgZm9udE1ldHJpY3Muc2V0VW5pdHNQZXJFbSh1bml0c1BlckVtKTsK
ICAgICBmb250TWV0cmljcy5zZXRBc2NlbnQoYXNjZW50KTsKICAgICBmb250TWV0cmljcy5zZXRE
ZXNjZW50KGRlc2NlbnQpOwpAQCAtOTEsMjUgKzkxLDI1IEBAIHZvaWQgU1ZHRm9udERhdGE6Omlu
aXRpYWxpemVGb250RGF0YShTaW0KICAgICBmb250TWV0cmljcy5zZXRYSGVpZ2h0KHhIZWlnaHQp
OwogCiAgICAgaWYgKCFnbHlwaFBhZ2VaZXJvKSB7Ci0gICAgICAgIGZvbnREYXRhLT5zZXRTcGFj
ZUdseXBoKDApOwotICAgICAgICBmb250RGF0YS0+c2V0U3BhY2VXaWR0aHMoMCk7Ci0gICAgICAg
IGZvbnREYXRhLT5zZXRBdmdDaGFyV2lkdGgoMCk7Ci0gICAgICAgIGZvbnREYXRhLT5zZXRNYXhD
aGFyV2lkdGgoYXNjZW50KTsKKyAgICAgICAgZm9udC0+c2V0U3BhY2VHbHlwaCgwKTsKKyAgICAg
ICAgZm9udC0+c2V0U3BhY2VXaWR0aHMoMCk7CisgICAgICAgIGZvbnQtPnNldEF2Z0NoYXJXaWR0
aCgwKTsKKyAgICAgICAgZm9udC0+c2V0TWF4Q2hhcldpZHRoKGFzY2VudCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKICAgICAvLyBDYWxjdWxhdGUgc3BhY2Ugd2lkdGguCiAgICAgR2x5cGgg
c3BhY2VHbHlwaCA9IGdseXBoUGFnZVplcm8tPmdseXBoRGF0YUZvckNoYXJhY3RlcignICcpLmds
eXBoOwotICAgIGZvbnREYXRhLT5zZXRTcGFjZUdseXBoKHNwYWNlR2x5cGgpOwotICAgIGZvbnRE
YXRhLT5zZXRTcGFjZVdpZHRocyhmb250RGF0YS0+d2lkdGhGb3JHbHlwaChzcGFjZUdseXBoKSk7
CisgICAgZm9udC0+c2V0U3BhY2VHbHlwaChzcGFjZUdseXBoKTsKKyAgICBmb250LT5zZXRTcGFj
ZVdpZHRocyhmb250LT53aWR0aEZvckdseXBoKHNwYWNlR2x5cGgpKTsKIAogICAgIC8vIEVzdGlt
YXRlIGF2ZXJhZ2UgY2hhcmFjdGVyIHdpZHRoLgogICAgIEdseXBoIG51bWVyYWxaZXJvR2x5cGgg
PSBnbHlwaFBhZ2VaZXJvLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoJzAnKS5nbHlwaDsKLSAgICBm
b250RGF0YS0+c2V0QXZnQ2hhcldpZHRoKG51bWVyYWxaZXJvR2x5cGggPyBmb250RGF0YS0+d2lk
dGhGb3JHbHlwaChudW1lcmFsWmVyb0dseXBoKSA6IGZvbnREYXRhLT5zcGFjZVdpZHRoKCkpOwor
ICAgIGZvbnQtPnNldEF2Z0NoYXJXaWR0aChudW1lcmFsWmVyb0dseXBoID8gZm9udC0+d2lkdGhG
b3JHbHlwaChudW1lcmFsWmVyb0dseXBoKSA6IGZvbnQtPnNwYWNlV2lkdGgoKSk7CiAKICAgICAv
LyBFc3RpbWF0ZSBtYXhpbXVtIGNoYXJhY3RlciB3aWR0aC4KICAgICBHbHlwaCBsZXR0ZXJXR2x5
cGggPSBnbHlwaFBhZ2VaZXJvLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoJ1cnKS5nbHlwaDsKLSAg
ICBmb250RGF0YS0+c2V0TWF4Q2hhcldpZHRoKGxldHRlcldHbHlwaCA/IGZvbnREYXRhLT53aWR0
aEZvckdseXBoKGxldHRlcldHbHlwaCkgOiBhc2NlbnQpOworICAgIGZvbnQtPnNldE1heENoYXJX
aWR0aChsZXR0ZXJXR2x5cGggPyBmb250LT53aWR0aEZvckdseXBoKGxldHRlcldHbHlwaCkgOiBh
c2NlbnQpOwogfQogCiBmbG9hdCBTVkdGb250RGF0YTo6d2lkdGhGb3JTVkdHbHlwaChHbHlwaCBn
bHlwaCwgZmxvYXQgZm9udFNpemUpIGNvbnN0CkBAIC0yMDgsMTAgKzIwOCwxMCBAQCBib29sIFNW
R0ZvbnREYXRhOjphcHBseVNWR0dseXBoU2VsZWN0aW9uCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1ib29sIFNWR0ZvbnREYXRhOjpmaWxsU1ZHR2x5cGhQYWdlKEdseXBoUGFnZSogcGFnZVRvRmls
bCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIsIHVuc2ln
bmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKSBjb25zdAor
Ym9vbCBTVkdGb250RGF0YTo6ZmlsbFNWR0dseXBoUGFnZShHbHlwaFBhZ2UqIHBhZ2VUb0ZpbGws
IHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25l
ZCBidWZmZXJMZW5ndGgsIGNvbnN0IEZvbnQqIGZvbnQpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGZv
bnREYXRhLT5pc0N1c3RvbUZvbnQoKSk7Ci0gICAgQVNTRVJUKGZvbnREYXRhLT5pc1NWR0ZvbnQo
KSk7CisgICAgQVNTRVJUKGZvbnQtPmlzQ3VzdG9tRm9udCgpKTsKKyAgICBBU1NFUlQoZm9udC0+
aXNTVkdGb250KCkpOwogCiAgICAgU1ZHRm9udEZhY2VFbGVtZW50KiBmb250RmFjZUVsZW1lbnQg
PSB0aGlzLT5zdmdGb250RmFjZUVsZW1lbnQoKTsKICAgICBBU1NFUlQoZm9udEZhY2VFbGVtZW50
KTsKQEAgLTIyMCwxMyArMjIwLDEzIEBAIGJvb2wgU1ZHRm9udERhdGE6OmZpbGxTVkdHbHlwaFBh
Z2UoR2x5cGgKICAgICBBU1NFUlQoZm9udEVsZW1lbnQpOwogCiAgICAgaWYgKGJ1ZmZlckxlbmd0
aCA9PSBsZW5ndGgpCi0gICAgICAgIHJldHVybiBmaWxsQk1QR2x5cGhzKGZvbnRFbGVtZW50LCBw
YWdlVG9GaWxsLCBvZmZzZXQsIGxlbmd0aCwgYnVmZmVyLCBmb250RGF0YSk7CisgICAgICAgIHJl
dHVybiBmaWxsQk1QR2x5cGhzKGZvbnRFbGVtZW50LCBwYWdlVG9GaWxsLCBvZmZzZXQsIGxlbmd0
aCwgYnVmZmVyLCBmb250KTsKIAogICAgIEFTU0VSVChidWZmZXJMZW5ndGggPT0gMiAqIGxlbmd0
aCk7Ci0gICAgcmV0dXJuIGZpbGxOb25CTVBHbHlwaHMoZm9udEVsZW1lbnQsIHBhZ2VUb0ZpbGws
IG9mZnNldCwgbGVuZ3RoLCBidWZmZXIsIGZvbnREYXRhKTsKKyAgICByZXR1cm4gZmlsbE5vbkJN
UEdseXBocyhmb250RWxlbWVudCwgcGFnZVRvRmlsbCwgb2Zmc2V0LCBsZW5ndGgsIGJ1ZmZlciwg
Zm9udCk7CiB9CiAKLWJvb2wgU1ZHRm9udERhdGE6OmZpbGxCTVBHbHlwaHMoU1ZHRm9udEVsZW1l
bnQqIGZvbnRFbGVtZW50LCBHbHlwaFBhZ2UqIHBhZ2VUb0ZpbGwsIHVuc2lnbmVkIG9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9u
dERhdGEpIGNvbnN0Citib29sIFNWR0ZvbnREYXRhOjpmaWxsQk1QR2x5cGhzKFNWR0ZvbnRFbGVt
ZW50KiBmb250RWxlbWVudCwgR2x5cGhQYWdlKiBwYWdlVG9GaWxsLCB1bnNpZ25lZCBvZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgY29uc3QgRm9udCogZm9udCkgY29uc3QK
IHsKICAgICBib29sIGhhdmVHbHlwaHMgPSBmYWxzZTsKICAgICBWZWN0b3I8U1ZHR2x5cGg+IGds
eXBoczsKQEAgLTI0MywxNCArMjQzLDE0IEBAIGJvb2wgU1ZHRm9udERhdGE6OmZpbGxCTVBHbHlw
aHMoU1ZHRm9udEUKICAgICAgICAgLy8gY2FyZSBvZiBtYXRjaGluZyB0byB0aGUgY29ycmVjdCBn
bHlwaCwgaWYgbXVsdGlwbGUgb25lcyBhcmUgYXZhaWxhYmxlLCBhcyB0aGF0J3MKICAgICAgICAg
Ly8gb25seSBwb3NzaWJsZSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYSBzdHJpbmcgKGVnLiBhcmFi
aWMgZm9ybSBtYXRjaGluZykuCiAgICAgICAgIGhhdmVHbHlwaHMgPSB0cnVlOwotICAgICAgICBw
YWdlVG9GaWxsLT5zZXRHbHlwaERhdGFGb3JJbmRleChvZmZzZXQgKyBpLCBnbHlwaHMuZmlyc3Qo
KS50YWJsZUVudHJ5LCBmb250RGF0YSk7CisgICAgICAgIHBhZ2VUb0ZpbGwtPnNldEdseXBoRGF0
YUZvckluZGV4KG9mZnNldCArIGksIGdseXBocy5maXJzdCgpLnRhYmxlRW50cnksIGZvbnQpOwog
ICAgICAgICBnbHlwaHMuY2xlYXIoKTsKICAgICB9CiAKICAgICByZXR1cm4gaGF2ZUdseXBoczsK
IH0KIAotYm9vbCBTVkdGb250RGF0YTo6ZmlsbE5vbkJNUEdseXBocyhTVkdGb250RWxlbWVudCog
Zm9udEVsZW1lbnQsIEdseXBoUGFnZSogcGFnZVRvRmlsbCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNp
Z25lZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0
YSkgY29uc3QKK2Jvb2wgU1ZHRm9udERhdGE6OmZpbGxOb25CTVBHbHlwaHMoU1ZHRm9udEVsZW1l
bnQqIGZvbnRFbGVtZW50LCBHbHlwaFBhZ2UqIHBhZ2VUb0ZpbGwsIHVuc2lnbmVkIG9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCBjb25zdCBGb250KiBmb250KSBjb25zdAog
ewogICAgIGJvb2wgaGF2ZUdseXBocyA9IGZhbHNlOwogICAgIFZlY3RvcjxTVkdHbHlwaD4gZ2x5
cGhzOwpAQCAtMjY4LDcgKzI2OCw3IEBAIGJvb2wgU1ZHRm9udERhdGE6OmZpbGxOb25CTVBHbHlw
aHMoU1ZHRm8KICAgICAgICAgLy8gY2FyZSBvZiBtYXRjaGluZyB0byB0aGUgY29ycmVjdCBnbHlw
aCwgaWYgbXVsdGlwbGUgb25lcyBhcmUgYXZhaWxhYmxlLCBhcyB0aGF0J3MKICAgICAgICAgLy8g
b25seSBwb3NzaWJsZSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYSBzdHJpbmcgKGVnLiBhcmFiaWMg
Zm9ybSBtYXRjaGluZykuCiAgICAgICAgIGhhdmVHbHlwaHMgPSB0cnVlOwotICAgICAgICBwYWdl
VG9GaWxsLT5zZXRHbHlwaERhdGFGb3JJbmRleChvZmZzZXQgKyBpLCBnbHlwaHMuZmlyc3QoKS50
YWJsZUVudHJ5LCBmb250RGF0YSk7CisgICAgICAgIHBhZ2VUb0ZpbGwtPnNldEdseXBoRGF0YUZv
ckluZGV4KG9mZnNldCArIGksIGdseXBocy5maXJzdCgpLnRhYmxlRW50cnksIGZvbnQpOwogICAg
ICAgICBnbHlwaHMuY2xlYXIoKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGb250RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RGF0
YS5oCShyZXZpc2lvbiAxNzg1MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udERhdGEu
aAkod29ya2luZyBjb3B5KQpAQCAtMjEsMjEgKzIxLDIxIEBACiAjZGVmaW5lIFNWR0ZvbnREYXRh
X2gKIAogI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIK
KyNpbmNsdWRlICJGb250LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU1ZHRm9u
dEVsZW1lbnQ7CiBjbGFzcyBTVkdGb250RmFjZUVsZW1lbnQ7CiAKLWNsYXNzIFNWR0ZvbnREYXRh
IDogcHVibGljIFNpbXBsZUZvbnREYXRhOjpTVkdEYXRhIHsKK2NsYXNzIFNWR0ZvbnREYXRhIDog
cHVibGljIEZvbnQ6OlNWR0RhdGEgewogcHVibGljOgogICAgIGV4cGxpY2l0IFNWR0ZvbnREYXRh
KFNWR0ZvbnRGYWNlRWxlbWVudCopOwogICAgIHZpcnR1YWwgflNWR0ZvbnREYXRhKCkgeyB9CiAK
LSAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZUZvbnREYXRhKFNpbXBsZUZvbnREYXRhKiwgZmxv
YXQgZm9udFNpemUpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplRm9udChG
b250KiwgZmxvYXQgZm9udFNpemUpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgZmxvYXQgd2lkdGhG
b3JTVkdHbHlwaChHbHlwaCwgZmxvYXQgZm9udFNpemUpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZp
cnR1YWwgYm9vbCBmaWxsU1ZHR2x5cGhQYWdlKEdseXBoUGFnZSosIHVuc2lnbmVkIG9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNv
bnN0IFNpbXBsZUZvbnREYXRhKikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGZp
bGxTVkdHbHlwaFBhZ2UoR2x5cGhQYWdlKiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgsIFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgRm9udCopIGNv
bnN0IG92ZXJyaWRlOwogCiAgICAgYm9vbCBhcHBseVNWR0dseXBoU2VsZWN0aW9uKFdpZHRoSXRl
cmF0b3ImLCBHbHlwaERhdGEmLCBib29sIG1pcnJvciwgaW50IGN1cnJlbnRDaGFyYWN0ZXIsIHVu
c2lnbmVkJiBhZHZhbmNlTGVuZ3RoLCBTdHJpbmcmIG5vcm1hbGl6ZWRTcGFjZXNTdHJpbmdDYWNo
ZSkgY29uc3Q7CiAKQEAgLTUwLDggKzUwLDggQEAgcHVibGljOgogICAgIGZsb2F0IHZlcnRpY2Fs
QWR2YW5jZVkoKSBjb25zdCB7IHJldHVybiBtX3ZlcnRpY2FsQWR2YW5jZVk7IH0KIAogcHJpdmF0
ZToKLSAgICBib29sIGZpbGxCTVBHbHlwaHMoU1ZHRm9udEVsZW1lbnQqLCBHbHlwaFBhZ2UqICwg
dW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIsIGNvbnN0IFNp
bXBsZUZvbnREYXRhKikgY29uc3Q7Ci0gICAgYm9vbCBmaWxsTm9uQk1QR2x5cGhzKFNWR0ZvbnRF
bGVtZW50KiwgR2x5cGhQYWdlKiAsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBV
Q2hhciogYnVmZmVyLCBjb25zdCBTaW1wbGVGb250RGF0YSopIGNvbnN0OworICAgIGJvb2wgZmls
bEJNUEdseXBocyhTVkdGb250RWxlbWVudCosIEdseXBoUGFnZSogLCB1bnNpZ25lZCBvZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgY29uc3QgRm9udCopIGNvbnN0OworICAg
IGJvb2wgZmlsbE5vbkJNUEdseXBocyhTVkdGb250RWxlbWVudCosIEdseXBoUGFnZSogLCB1bnNp
Z25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgY29uc3QgRm9udCop
IGNvbnN0OwogCiAgICAgYm9vbCBhcHBseVRyYW5zZm9ybXMoR2x5cGhCdWZmZXJHbHlwaCosIEds
eXBoQnVmZmVyQWR2YW5jZSosIHNpemVfdCwgVHlwZXNldHRpbmdGZWF0dXJlcykgY29uc3QgPSBk
ZWxldGU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RWxlbWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RWxlbWVudC5oCShyZXZpc2lvbiAx
Nzg1MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEVsZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtNzYsNyArNzYsNyBAQCBwdWJsaWM6CiAgICAgZmxvYXQgaG9yaXpvbnRhbEtlcm5p
bmdGb3JQYWlyT2ZTdHJpbmdzQW5kR2x5cGhzKGNvbnN0IFN0cmluZyYgdTEsIGNvbnN0IFN0cmlu
ZyYgZzEsIGNvbnN0IFN0cmluZyYgdTIsIGNvbnN0IFN0cmluZyYgZzIpIGNvbnN0OwogICAgIGZs
b2F0IHZlcnRpY2FsS2VybmluZ0ZvclBhaXJPZlN0cmluZ3NBbmRHbHlwaHMoY29uc3QgU3RyaW5n
JiB1MSwgY29uc3QgU3RyaW5nJiBnMSwgY29uc3QgU3RyaW5nJiB1MiwgY29uc3QgU3RyaW5nJiBn
MikgY29uc3Q7CiAKLSAgICAvLyBVc2VkIGJ5IFNpbXBsZUZvbnREYXRhL1dpZHRoSXRlcmF0b3Iu
CisgICAgLy8gVXNlZCBieSBGb250L1dpZHRoSXRlcmF0b3IuCiAgICAgU1ZHR2x5cGggc3ZnR2x5
cGhGb3JHbHlwaChHbHlwaCk7CiAgICAgR2x5cGggbWlzc2luZ0dseXBoKCk7CiAKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAkocmV2aXNpb24gMTc4NTE1KQor
KysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTMxLDggKzkzMSw4IEBAIHZvaWQgV2ViUHJvY2Vzczo6Z2V0V2ViQ29yZVN0YXRpc3Rp
Y3ModWkKICAgICBkYXRhLnN0YXRpc3RpY3NOdW1iZXJzLnNldChBU0NJSUxpdGVyYWwoIkljb25z
V2l0aERhdGFDb3VudCIpLCBpY29uRGF0YWJhc2UoKS5pY29uUmVjb3JkQ291bnRXaXRoRGF0YSgp
KTsKICAgICAKICAgICAvLyBHYXRoZXIgZm9udCBzdGF0aXN0aWNzLgotICAgIGRhdGEuc3RhdGlz
dGljc051bWJlcnMuc2V0KEFTQ0lJTGl0ZXJhbCgiQ2FjaGVkRm9udERhdGFDb3VudCIpLCBmb250
Q2FjaGUoKS5mb250RGF0YUNvdW50KCkpOwotICAgIGRhdGEuc3RhdGlzdGljc051bWJlcnMuc2V0
KEFTQ0lJTGl0ZXJhbCgiQ2FjaGVkRm9udERhdGFJbmFjdGl2ZUNvdW50IiksIGZvbnRDYWNoZSgp
LmluYWN0aXZlRm9udERhdGFDb3VudCgpKTsKKyAgICBkYXRhLnN0YXRpc3RpY3NOdW1iZXJzLnNl
dChBU0NJSUxpdGVyYWwoIkNhY2hlZEZvbnREYXRhQ291bnQiKSwgZm9udENhY2hlKCkuZm9udENv
dW50KCkpOworICAgIGRhdGEuc3RhdGlzdGljc051bWJlcnMuc2V0KEFTQ0lJTGl0ZXJhbCgiQ2Fj
aGVkRm9udERhdGFJbmFjdGl2ZUNvdW50IiksIGZvbnRDYWNoZSgpLmluYWN0aXZlRm9udENvdW50
KCkpOwogICAgIAogICAgIC8vIEdhdGhlciBnbHlwaCBwYWdlIHN0YXRpc3RpY3MuCiAgICAgZGF0
YS5zdGF0aXN0aWNzTnVtYmVycy5zZXQoQVNDSUlMaXRlcmFsKCJHbHlwaFBhZ2VDb3VudCIpLCBH
bHlwaFBhZ2U6OmNvdW50KCkpOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9tYWMvV2ViUG9wdXBNZW51TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYlBvcHVwTWVudU1hYy5tbQko
cmV2aXNpb24gMTc4NTE1KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9tYWMvV2ViUG9wdXBNZW51TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3
IEBAIHZvaWQgV2ViUG9wdXBNZW51OjpzZXRVcFBsYXRmb3JtRGF0YShjb24KIHsKICNpZiBVU0Uo
QVBQS0lUKQogICAgIC8vIEZJWE1FOiBmb250IHdpbGwgYmUgbmlsIGhlcmUgZm9yIGN1c3RvbSBm
b250cywgd2Ugc2hvdWxkIGZpeCB0aGF0LgotICAgIE5TRm9udCAqZm9udCA9IG1fcG9wdXBDbGll
bnQtPm1lbnVTdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXROU0ZvbnQoKTsKKyAg
ICBOU0ZvbnQgKmZvbnQgPSBtX3BvcHVwQ2xpZW50LT5tZW51U3R5bGUoKS5mb250KCkucHJpbWFy
eUZvbnQoKS5nZXROU0ZvbnQoKTsKICAgICBpZiAoIWZvbnQpCiAgICAgICAgIHJldHVybjsKICAg
ICAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlP
Uy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9z
L1dlYlBhZ2VJT1MubW0JKHJldmlzaW9uIDE3ODUxNSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTc5Miw4
ICsxNzkyLDggQEAgdm9pZCBXZWJQYWdlOjpyZXF1ZXN0QXV0b2NvcnJlY3Rpb25EYXRhKAogCiAg
ICAgYm9vbCBtdWx0aXBsZUZvbnRzID0gZmFsc2U7CiAgICAgQ1RGb250UmVmIGZvbnQgPSBuaWw7
Ci0gICAgaWYgKGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSA9IGZyYW1lLmVkaXRvcigp
LmZvbnRGb3JTZWxlY3Rpb24obXVsdGlwbGVGb250cykpCi0gICAgICAgIGZvbnQgPSBmb250RGF0
YS0+Z2V0Q1RGb250KCk7CisgICAgaWYgKGF1dG8qIGNvcmVGb250ID0gZnJhbWUuZWRpdG9yKCku
Zm9udEZvclNlbGVjdGlvbihtdWx0aXBsZUZvbnRzKSkKKyAgICAgICAgZm9udCA9IGNvcmVGb250
LT5nZXRDVEZvbnQoKTsKIAogICAgIENHRmxvYXQgZm9udFNpemUgPSBDVEZvbnRHZXRTaXplKGZv
bnQpOwogICAgIHVpbnQ2NF90IGZvbnRUcmFpdHMgPSBDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhm
b250KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5t
bQkocmV2aXNpb24gMTc4NTE1KQorKysgU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDb3JlU3Rh
dGlzdGljcy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDEyICsxNDcsMTIgQEAgKyAoc2l6ZV90
KWljb25zV2l0aERhdGFDb3VudAogCiArIChzaXplX3QpY2FjaGVkRm9udERhdGFDb3VudAogewot
ICAgIHJldHVybiBmb250Q2FjaGUoKS5mb250RGF0YUNvdW50KCk7CisgICAgcmV0dXJuIGZvbnRD
YWNoZSgpLmZvbnRDb3VudCgpOwogfQogCiArIChzaXplX3QpY2FjaGVkRm9udERhdGFJbmFjdGl2
ZUNvdW50CiB7Ci0gICAgcmV0dXJuIGZvbnRDYWNoZSgpLmluYWN0aXZlRm9udERhdGFDb3VudCgp
OworICAgIHJldHVybiBmb250Q2FjaGUoKS5pbmFjdGl2ZUZvbnRDb3VudCgpOwogfQogCiArICh2
b2lkKXB1cmdlSW5hY3RpdmVGb250RGF0YQpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViQ29y
ZVN1cHBvcnQvUG9wdXBNZW51TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFj
L1dlYkNvcmVTdXBwb3J0L1BvcHVwTWVudU1hYy5tbQkocmV2aXNpb24gMTc4NTE1KQorKysgU291
cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvUG9wdXBNZW51TWFjLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCwxMSArMjgsMTEgQEAKICNpbXBvcnQgPFdlYkNvcmUvQ2hyb21lLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL0Nocm9tZUNsaWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9FdmVudEhhbmRs
ZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRm9udC5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5o
PgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGFnZS5o
PgogI2ltcG9ydCA8V2ViQ29yZS9Qb3B1cE1lbnVDbGllbnQuaD4KLSNpbXBvcnQgPFdlYkNvcmUv
U2ltcGxlRm9udERhdGEuaD4KICNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZVN5c3RlbUludGVyZmFj
ZS5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTgxLDkgKzgxLDkgQEAgdm9pZCBQ
b3B1cE1lbnVNYWM6OnBvcHVsYXRlKCkKICAgICAgICAgUG9wdXBNZW51U3R5bGUgc3R5bGUgPSBt
X2NsaWVudC0+aXRlbVN0eWxlKGkpOwogICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGljdGlv
bmFyeT4gYXR0cmlidXRlcyA9IGFkb3B0TlMoW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBp
bml0XSk7CiAgICAgICAgIGlmIChzdHlsZS5mb250KCkgIT0gRm9udENhc2NhZGUoKSkgewotICAg
ICAgICAgICAgTlNGb250ICpmb250ID0gc3R5bGUuZm9udCgpLnByaW1hcnlGb250RGF0YSgpLmdl
dE5TRm9udCgpOworICAgICAgICAgICAgTlNGb250ICpmb250ID0gc3R5bGUuZm9udCgpLnByaW1h
cnlGb250KCkuZ2V0TlNGb250KCk7CiAgICAgICAgICAgICBpZiAoIWZvbnQpIHsKLSAgICAgICAg
ICAgICAgICBDR0Zsb2F0IHNpemUgPSBzdHlsZS5mb250KCkucHJpbWFyeUZvbnREYXRhKCkucGxh
dGZvcm1EYXRhKCkuc2l6ZSgpOworICAgICAgICAgICAgICAgIENHRmxvYXQgc2l6ZSA9IHN0eWxl
LmZvbnQoKS5wcmltYXJ5Rm9udCgpLnBsYXRmb3JtRGF0YSgpLnNpemUoKTsKICAgICAgICAgICAg
ICAgICBmb250ID0gc3R5bGUuZm9udCgpLndlaWdodCgpIDwgRm9udFdlaWdodEJvbGQgPyBbTlNG
b250IHN5c3RlbUZvbnRPZlNpemU6c2l6ZV0gOiBbTlNGb250IGJvbGRTeXN0ZW1Gb250T2ZTaXpl
OnNpemVdOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgW2F0dHJpYnV0ZXMgc2V0T2JqZWN0
OmZvbnQgZm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVdOwpAQCAtMTQ4LDcgKzE0OCw3IEBAIHZv
aWQgUG9wdXBNZW51TWFjOjpzaG93KGNvbnN0IEludFJlY3QmIHIKICAgICBOU01lbnUqIG1lbnUg
PSBbbV9wb3B1cCBtZW51XTsKICAgICAKICAgICBOU1BvaW50IGxvY2F0aW9uOwotICAgIE5TRm9u
dCogZm9udCA9IG1fY2xpZW50LT5tZW51U3R5bGUoKS5mb250KCkucHJpbWFyeUZvbnREYXRhKCku
Z2V0TlNGb250KCk7CisgICAgTlNGb250KiBmb250ID0gbV9jbGllbnQtPm1lbnVTdHlsZSgpLmZv
bnQoKS5wcmltYXJ5Rm9udCgpLmdldE5TRm9udCgpOwogCiAgICAgLy8gVGhlc2UgdmFsdWVzIHdl
cmUgYm9ycm93ZWQgZnJvbSBBcHBLaXQgdG8gbWF0Y2ggdGhlaXIgcGxhY2VtZW50IG9mIHRoZSBt
ZW51LgogICAgIGNvbnN0IGludCBwb3BPdmVySG9yaXpvbnRhbEFkanVzdCA9IC0xMDsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQkocmV2aXNpb24gMTc4NTE1
KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQkod29ya2luZyBj
b3B5KQpAQCAtOTIsNiArOTIsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9FeGNlcHRpb25IYW5kbGVy
cy5oPgogI2ltcG9ydCA8V2ViQ29yZS9GbG9hdFJlY3QuaD4KICNpbXBvcnQgPFdlYkNvcmUvRm9j
dXNDb250cm9sbGVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL0ZvbnQuaD4KICNpbXBvcnQgPFdlYkNv
cmUvRm9udENhY2hlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW1wb3J0IDxXZWJD
b3JlL0ZyYW1lTG9hZGVyLmg+CkBAIC0xMTIsNyArMTEzLDYgQEAKICNpbXBvcnQgPFdlYkNvcmUv
UmVuZGVyV2lkZ2V0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1J1bnRpbWVBcHBsaWNhdGlvbkNoZWNr
cy5oPgogI2ltcG9ydCA8V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUv
U2ltcGxlRm9udERhdGEuaD4KICNpbXBvcnQgPFdlYkNvcmUvU3R5bGVQcm9wZXJ0aWVzLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL1RleHQuaD4KICNpbXBvcnQgPFdlYkNvcmUvVGV4dEFsdGVybmF0aXZl
V2l0aFJhbmdlLmg+CkBAIC00ODc4LDggKzQ4NzgsOCBAQCBzdGF0aWMgTlNTdHJpbmcgKmZvbnRO
YW1lRm9yRGVzY3JpcHRpb24oCiAgICAgZm9udERlc2NyaXB0aW9uLnNldElzSXRhbGljKGl0YWxp
Yyk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFdlaWdodChib2xkID8gRm9udFdlaWdodDkwMCA6
IEZvbnRXZWlnaHQ1MDApOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKHBv
aW50U2l6ZSk7Ci0gICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBzaW1wbGVGb250RGF0YSA9IGZv
bnRDYWNoZSgpLmZvbnRGb3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCBmYW1pbHlOYW1lKTsKLSAg
ICByZXR1cm4gW3NpbXBsZUZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5uc0ZvbnQoKSBmb250TmFt
ZV07CisgICAgUmVmUHRyPEZvbnQ+IGZvbnQgPSBmb250Q2FjaGUoKS5mb250Rm9yRmFtaWx5KGZv
bnREZXNjcmlwdGlvbiwgZmFtaWx5TmFtZSk7CisgICAgcmV0dXJuIFtmb250LT5wbGF0Zm9ybURh
dGEoKS5uc0ZvbnQoKSBmb250TmFtZV07CiB9CiAKIC0gKHZvaWQpX2FkZFRvU3R5bGU6KERPTUNT
U1N0eWxlRGVjbGFyYXRpb24gKilzdHlsZSBmb250QTooTlNGb250ICopYSBmb250QjooTlNGb250
ICopYgpAQCAtNTQ0Miw3ICs1NDQyLDcgQEAgLSAodm9pZClfdXBkYXRlRm9udFBhbmVsCiAgICAg
Ym9vbCBtdWx0aXBsZUZvbnRzID0gZmFsc2U7CiAgICAgTlNGb250ICpmb250ID0gbmlsOwogICAg
IGlmIChGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkgewotICAgICAgICBp
ZiAoY29uc3QgU2ltcGxlRm9udERhdGEqIGZkID0gY29yZUZyYW1lLT5lZGl0b3IoKS5mb250Rm9y
U2VsZWN0aW9uKG11bHRpcGxlRm9udHMpKQorICAgICAgICBpZiAoY29uc3QgRm9udCogZmQgPSBj
b3JlRnJhbWUtPmVkaXRvcigpLmZvbnRGb3JTZWxlY3Rpb24obXVsdGlwbGVGb250cykpCiAgICAg
ICAgICAgICBmb250ID0gZmQtPmdldE5TRm9udCgpOwogICAgIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245097</attachid>
            <date>2015-01-21 16:08:21 -0800</date>
            <delta_ts>2015-01-21 21:04:56 -0800</delta_ts>
            <desc>patch</desc>
            <filename>simplefontdata-rename-4.patch</filename>
            <type>text/plain</type>
            <size>323676</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDE1LTAxLTIxICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgU2ltcGxlRm9udERh
dGEgdG8gRm9udAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTQwNDk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhlIGZhbGxiYWNrIHN1cHBvcnRpbmcgRm9udCB0eXBlIHdhcyByZW5hbWVkIEZvbnRDYXNj
YWRlLgorICAgICAgICBXZSBjYW4gbm93IHJlbmFtZSBTaW1wbGVGb250RGF0YSB0byBqdXN0IEZv
bnQgbWF0Y2hpbmcgdGhlIHVzdWFsIGRlZmluaXRpb24uCisKIDIwMTUtMDEtMjEgIEJlbmphbWlu
IFBvdWxhaW4gIDxiZW5qYW1pbkB3ZWJraXQub3JnPgogCiAgICAgICAgIEhhbmRsZSB0aGUgdHJh
bnNpdGlvbiBvbiBhbnkgY2hhcmFjdGVyIGFzIGEgc2VwYXJhdGUgdHlwZSBvZiB0cmFuc2l0aW9u
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTQ2OSw3ICs0NjksNiBAQCBf
X1pON1dlYkNvcmUxNFNlY3VyaXR5UG9saWN5MjJnZW5lcmF0ZVJlCiBfX1pON1dlYkNvcmUxNFNl
Y3VyaXR5UG9saWN5MjdyZXNldE9yaWdpbkFjY2Vzc1doaXRlbGlzdHNFdgogX19aTjdXZWJDb3Jl
MTRTZWN1cml0eVBvbGljeTI5YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnlFUktOU18xNFNl
Y3VyaXR5T3JpZ2luRVJLTjNXVEY2U3RyaW5nRVM3X2IKIF9fWk43V2ViQ29yZTE0U2VjdXJpdHlQ
b2xpY3kzMnJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5RVJLTlNfMTRTZWN1cml0eU9y
aWdpbkVSS04zV1RGNlN0cmluZ0VTN19iCi1fX1pON1dlYkNvcmUxNFNpbXBsZUZvbnREYXRhRDFF
dgogX19aTjdXZWJDb3JlMTRTdWJmcmFtZUxvYWRlcjEyYWxsb3dQbHVnaW5zRU5TXzI4UmVhc29u
Rm9yQ2FsbGluZ0FsbG93UGx1Z2luc0UKIF9fWk43V2ViQ29yZTE0VGlsZUNvbnRyb2xsZXIxNHNl
dFRpbGVzT3BhcXVlRWIKIF9fWk43V2ViQ29yZTE0VGlsZUNvbnRyb2xsZXIxNWNvbnRhaW5lckxh
eWVyc0V2CkBAIC0xMTc5LDYgKzExNzgsNyBAQCBfX1pON1dlYkNvcmU0MGRlZmF1bHRUZXh0RW5j
b2RpbmdOYW1lRm9yCiBfX1pON1dlYkNvcmU0MHJlc3RyaWN0TWluaW11bVNjYWxlRmFjdG9yVG9W
aWV3cG9ydFNpemVFUk5TXzE4Vmlld3BvcnRBdHRyaWJ1dGVzRU5TXzdJbnRTaXplRWYKIF9fWk43
V2ViQ29yZTQyVVJMQnlUcnVuY2F0aW5nT25lQ2hhcmFjdGVyQmVmb3JlQ29tcG9uZW50RVA1TlNV
UkwxOENGVVJMQ29tcG9uZW50VHlwZQogX19aTjdXZWJDb3JlNDdhdHRyaWJ1dGVkU3RyaW5nQnlT
dHJpcHBpbmdBdHRhY2htZW50Q2hhcmFjdGVyc0VQMThOU0F0dHJpYnV0ZWRTdHJpbmcKK19fWk43
V2ViQ29yZTRGb250RDFFdgogX19aTjdXZWJDb3JlNEljb24xOGNyZWF0ZUljb25Gb3JGaWxlc0VS
S04zV1RGNlZlY3RvcklOUzFfNlN0cmluZ0VMbTBFTlMxXzE1Q3Jhc2hPbk92ZXJmbG93RUVFCiBf
X1pON1dlYkNvcmU0SWNvbkQxRXYKIF9fWk43V2ViQ29yZTROb2RlMTByZW5kZXJSZWN0RVBiCkBA
IC0xNDkyLDExICsxNDkyLDExIEBAIF9fWk43V2ViQ29yZTlGbG9hdFJlY3RDMUVSS05TXzdJbnRS
ZWN0RQogX19aTjdXZWJDb3JlOUZsb2F0U2l6ZUMxRVJLNkNHU2l6ZQogX19aTjdXZWJDb3JlOUZs
b2F0U2l6ZUMxRVJLTlNfN0ludFNpemVFCiBfX1pON1dlYkNvcmU5Rm9udENhY2hlMTBpbnZhbGlk
YXRlRXYKLV9fWk43V2ViQ29yZTlGb250Q2FjaGUxM2ZvbnREYXRhQ291bnRFdgogX19aTjdXZWJD
b3JlOUZvbnRDYWNoZTEzZm9udEZvckZhbWlseUVSS05TXzE1Rm9udERlc2NyaXB0aW9uRVJLTjNX
VEYxMkF0b21pY1N0cmluZ0ViCi1fX1pON1dlYkNvcmU5Rm9udENhY2hlMjFpbmFjdGl2ZUZvbnRE
YXRhQ291bnRFdgorX19aTjdXZWJDb3JlOUZvbnRDYWNoZTE3aW5hY3RpdmVGb250Q291bnRFdgog
X19aTjdXZWJDb3JlOUZvbnRDYWNoZTIxcHVyZ2VJbmFjdGl2ZUZvbnREYXRhRWkKIF9fWk43V2Vi
Q29yZTlGb250Q2FjaGUyOXB1cmdlSW5hY3RpdmVGb250RGF0YUlmTmVlZGVkRXYKK19fWk43V2Vi
Q29yZTlGb250Q2FjaGU5Zm9udENvdW50RXYKIF9fWk43V2ViQ29yZTlGcmFtZVRyZWUxMWFwcGVu
ZENoaWxkRU4zV1RGMTBQYXNzUmVmUHRySU5TXzVGcmFtZUVFRQogX19aTjdXZWJDb3JlOUZyYW1l
VHJlZTdzZXROYW1lRVJLTjNXVEYxMkF0b21pY1N0cmluZ0UKIF9fWk43V2ViQ29yZTlGcmFtZVRy
ZWU5Y2xlYXJOYW1lRXYKQEAgLTE2MzQsOCArMTYzNCw4IEBAIF9fWk5LM1dURjZTdHJpbmcxNGNy
ZWF0ZUNGU3RyaW5nRXYKIF9fWk5LN1dlYkNvcmUxMENyZWRlbnRpYWwxMm5zQ3JlZGVudGlhbEV2
CiBfX1pOSzdXZWJDb3JlMTBDcmVkZW50aWFsN2lzRW1wdHlFdgogX19aTks3V2ViQ29yZTEwRmxv
YXRQb2ludGN2N0NHUG9pbnRFdgotX19aTks3V2ViQ29yZTEwRm9udFJhbmdlczIwZm9udERhdGFG
b3JDaGFyYWN0ZXJFaQotX19aTks3V2ViQ29yZTEwRm9udFJhbmdlczIxZm9udERhdGFGb3JGaXJz
dFJhbmdlRXYKK19fWk5LN1dlYkNvcmUxMEZvbnRSYW5nZXMxNmZvbnRGb3JDaGFyYWN0ZXJFaQor
X19aTks3V2ViQ29yZTEwRm9udFJhbmdlczE3Zm9udEZvckZpcnN0UmFuZ2VFdgogX19aTks3V2Vi
Q29yZTEwTGF5b3V0UmVjdDhjb250YWluc0VSS1MwXwogX19aTks3V2ViQ29yZTEwUGx1Z2luRGF0
YTE2c3VwcG9ydHNNaW1lVHlwZUVSS04zV1RGNlN0cmluZ0VOUzBfMThBbGxvd2VkUGx1Z2luVHlw
ZXNFCiBfX1pOSzdXZWJDb3JlMTBSZW5kZXJUZXh0MTZmaXJzdFJ1bkxvY2F0aW9uRXYKQEAgLTE2
NjUsNyArMTY2NSw3IEBAIF9fWk5LN1dlYkNvcmUxMFRpbWVSYW5nZXMzZW5kRWpSaQogX19aTks3
V2ViQ29yZTEwVGltZVJhbmdlczRjb3B5RXYKIF9fWk5LN1dlYkNvcmUxMFRpbWVSYW5nZXM1c3Rh
cnRFalJpCiBfX1pOSzdXZWJDb3JlMTBUaW1lUmFuZ2VzNmxlbmd0aEV2Ci1fX1pOSzdXZWJDb3Jl
MTFGb250Q2FzY2FkZTV3aWR0aEVSS05TXzdUZXh0UnVuRVBOM1dURjdIYXNoU2V0SVBLTlNfMTRT
aW1wbGVGb250RGF0YUVOUzRfN1B0ckhhc2hJUzhfRUVOUzRfMTBIYXNoVHJhaXRzSVM4X0VFRUVQ
TlNfMTNHbHlwaE92ZXJmbG93RQorX19aTks3V2ViQ29yZTExRm9udENhc2NhZGU1d2lkdGhFUktO
U183VGV4dFJ1bkVQTjNXVEY3SGFzaFNldElQS05TXzRGb250RU5TNF83UHRySGFzaElTOF9FRU5T
NF8xMEhhc2hUcmFpdHNJUzhfRUVFRVBOU18xM0dseXBoT3ZlcmZsb3dFCiBfX1pOSzdXZWJDb3Jl
MTFGb250Q2FzY2FkZThkcmF3VGV4dEVQTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU183VGV4dFJ1
bkVSS05TXzEwRmxvYXRQb2ludEVpaU5TMF8yNEN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbkUKIF9f
Wk5LN1dlYkNvcmUxMUZvbnRDYXNjYWRlZXFFUktTMF8KIF9fWk5LN1dlYkNvcmUxMUZyYW1lTG9h
ZGVyMTBpc0NvbXBsZXRlRXYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
NDcwNSw4ICs0NzA1LDggQEAKIAkJQjJDM0RBNjEwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYXNj
YWRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkMz
REE1MDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCMkMzREE2MjBEMDA2Q0Q2MDBFRjZGMjYg
LyogRm9udENhY2hlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEIyQzNEQTUxMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FjaGUuY3BwICovOyB9Owog
CQlCMkMzREE2MzBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhY2hlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkMzREE1MjBEMDA2Q0Q2MDBFRjZGMjYg
LyogRm9udENhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKLQkJQjJDM0RBNjQwRDAwNkNENjAwRUY2RjI2IC8qIFNpbXBsZUZvbnREYXRhLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNEQTUzMEQw
MDZDRDYwMEVGNkYyNiAvKiBTaW1wbGVGb250RGF0YS5jcHAgKi87IH07Ci0JCUIyQzNEQTY1MEQw
MDZDRDYwMEVGNkYyNiAvKiBTaW1wbGVGb250RGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBNTQwRDAwNkNENjAwRUY2RjI2IC8qIFNpbXBs
ZUZvbnREYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJQjJDM0RBNjQwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBNTMwRDAwNkNENjAwRUY2RjI2
IC8qIEZvbnQuY3BwICovOyB9OworCQlCMkMzREE2NTBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBNTQw
RDAwNkNENjAwRUY2RjI2IC8qIEZvbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlCMkMzREE2NjBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udERlc2Ny
aXB0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
MkMzREE1NTBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udERlc2NyaXB0aW9uLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjJDM0RBNjcwRDAwNkNENjAw
RUY2RjI2IC8qIEZvbnRHbHlwaHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQjJDM0RBNTYwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRHbHlwaHMuY3Bw
ICovOyB9OwogCQlCMkMzREE2ODBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udEdseXBocy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBNTcwRDAwNkNE
NjAwRUY2RjI2IC8qIEZvbnRHbHlwaHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwpAQCAtMTIwODYsOCArMTIwODYsOCBAQAogCQlCMkMzREE1MDBEMDA2
Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEZvbnRDYXNjYWRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQzNE
QTUxMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FjaGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRDYWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUIyQzNEQTUyMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FjaGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlCMkMzREE1MzBEMDA2Q0Q2MDBFRjZGMjYgLyogU2ltcGxlRm9udERhdGEuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpbXBsZUZvbnREYXRhLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjJDM0RBNTQwRDAwNkNENjAwRUY2RjI2
IC8qIFNpbXBsZUZvbnREYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
aW1wbGVGb250RGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCMkMzREE1MzBE
MDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gRm9udC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUIyQzNEQTU0
MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBGb250Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQzNEQTU1MEQwMDZD
RDYwMEVGNkYyNiAvKiBGb250RGVzY3JpcHRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEZvbnREZXNjcmlwdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCMkMzREE1NjBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udEdseXBocy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udEdseXBocy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUIyQzNEQTU3MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250R2x5cGhzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb250R2x5cGhzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMDU2Myw4ICsyMDU2Myw4IEBACiAJCQkJMzcxRjRGRkEw
RDI1RTdGMzAwRUNFMEQ1IC8qIEZvbnRSYW5nZXMuaCAqLywKIAkJCQkwRjNERDQ0RDEyRjVFQTFC
MDAwRDkxOTAgLyogU2hhZG93Qmx1ci5jcHAgKi8sCiAJCQkJMEYzREQ0NEUxMkY1RUExQjAwMEQ5
MTkwIC8qIFNoYWRvd0JsdXIuaCAqLywKLQkJCQlCMkMzREE1MzBEMDA2Q0Q2MDBFRjZGMjYgLyog
U2ltcGxlRm9udERhdGEuY3BwICovLAotCQkJCUIyQzNEQTU0MEQwMDZDRDYwMEVGNkYyNiAvKiBT
aW1wbGVGb250RGF0YS5oICovLAorCQkJCUIyQzNEQTUzMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250
LmNwcCAqLywKKwkJCQlCMkMzREE1NDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5oICovLAogCQkJ
CUNENjQxRUIyMTgxOEY1RUQwMEVFNEM0MSAvKiBTb3VyY2VCdWZmZXJQcml2YXRlLmggKi8sCiAJ
CQkJQ0RDOEI1QUMxODA0QUU1RDAwMTZFNjg1IC8qIFNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQu
aCAqLywKIAkJCQlCMjM1NDBGMDBEMDA3ODJFMDAyMzgyRkEgLyogU3RyaW5nVHJ1bmNhdG9yLmNw
cCAqLywKQEAgLTI2MDIyLDcgKzI2MDIyLDcgQEAKIAkJCQkxQTRBOTU0RTBCNEVEQ0NCMDAyRDhD
M0MgLyogU2hhcmVkQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0IxRjAyRjEzQjAyNUQy
MDBGNTEwM0YgLyogU2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTkzMzA5RUEzMDk5RUI3OEMwMDU2RTU4MSAvKiBTaGFyZWRUaW1lci5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJQjJDM0RBNjUwRDAwNkNENjAwRUY2RjI2IC8qIFNpbXBsZUZvbnREYXRhLmggaW4gSGVh
ZGVycyAqLywKKwkJCQlCMkMzREE2NTBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRTQ4OTQ0QTMxODBCNTdEODAwRjE2NUQ4IC8qIFNpbXBsZUxpbmVMYXlvdXQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUU0RTlCMTFEMTgxNDU2OUMwMDNBQ0NERiAvKiBTaW1wbGVM
aW5lTGF5b3V0RnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNEU5QjExOTE4MTA5MTZG
MDAzQUNDREYgLyogU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmggaW4gSGVhZGVycyAqLywKQEAg
LTI5NDU0LDcgKzI5NDU0LDcgQEAKIAkJCQkxQTRBOTU1MjBCNEVEQ0ZGMDAyRDhDM0MgLyogU2hh
cmVkQnVmZmVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRTQ1MzkwNDYwRUFGRDYzNzAwMzY5
NUM4IC8qIFNoYXJlZFRpbWVySU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlFQTIwOTlF
Qjc4QzAwNTZFNTgxIC8qIFNoYXJlZFRpbWVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJQjJD
M0RBNjQwRDAwNkNENjAwRUY2RjI2IC8qIFNpbXBsZUZvbnREYXRhLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUIyQzNEQTY0MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTE2M0U4OEY3MTE4QTM5RDIwMEVEOTIzMSAvKiBTaW1wbGVGb250RGF0YUNvcmVUZXh0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTM3RTY1OTUwMTYzQjEwQzIwMEVCNDU3NCAvKiBTaW1w
bGVGb250RGF0YUlPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUIyQUZGQzdGMEQwMEE1QzEwMDMw
MDc0RCAvKiBTaW1wbGVGb250RGF0YU1hYy5tbSBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJ
T1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0JKHJldmlzaW9uIDE3ODg1NykKKysrIFNv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVySU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNzU4LDcgKzE3NTgsNyBAQCBzdGF0aWMgdm9p
ZCBBWEF0dHJpYnV0ZVN0cmluZ1NldFN0eWxlKE5TCiAgICAgUmVuZGVyU3R5bGUmIHN0eWxlID0g
cmVuZGVyZXItPnN0eWxlKCk7CiAgICAgCiAgICAgLy8gc2V0IGJhc2ljIGZvbnQgaW5mbwotICAg
IEFYQXR0cmlidXRlU3RyaW5nU2V0Rm9udChhdHRyU3RyaW5nLCBzdHlsZS5mb250Q2FzY2FkZSgp
LnByaW1hcnlGb250RGF0YSgpLmdldENURm9udCgpLCByYW5nZSk7CisgICAgQVhBdHRyaWJ1dGVT
dHJpbmdTZXRGb250KGF0dHJTdHJpbmcsIHN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQo
KS5nZXRDVEZvbnQoKSwgcmFuZ2UpOwogICAgICAgICAgICAgICAgIAogICAgIGludCBkZWNvciA9
IHN0eWxlLnRleHREZWNvcmF0aW9uc0luRWZmZWN0KCk7CiAgICAgaWYgKChkZWNvciAmIChUZXh0
RGVjb3JhdGlvblVuZGVybGluZSB8IFRleHREZWNvcmF0aW9uTGluZVRocm91Z2gpKSAhPSAwKSB7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlckJhc2UubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlLm1tCShyZXZpc2lv
biAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlckJhc2UubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcg
QEAKICNpbXBvcnQgIkNocm9tZUNsaWVudC5oIgogI2ltcG9ydCAiQ29sb3JNYWMuaCIKICNpbXBv
cnQgIkNvbnRleHRNZW51Q29udHJvbGxlci5oIgorI2ltcG9ydCAiRm9udC5oIgogI2ltcG9ydCAi
Rm9udENhc2NhZGUuaCIKICNpbXBvcnQgIkZyYW1lLmgiCiAjaW1wb3J0ICJGcmFtZUxvYWRlckNs
aWVudC5oIgpAQCAtNjMsNyArNjQsNiBAQAogI2ltcG9ydCAiUmVuZGVyVmlldy5oIgogI2ltcG9y
dCAiUmVuZGVyV2lkZ2V0LmgiCiAjaW1wb3J0ICJTY3JvbGxWaWV3LmgiCi0jaW1wb3J0ICJTaW1w
bGVGb250RGF0YS5oIgogI2ltcG9ydCAiVGV4dENoZWNrZXJDbGllbnQuaCIKICNpbXBvcnQgIlRl
eHRDaGVja2luZ0hlbHBlci5oIgogI2ltcG9ydCAiVmlzaWJsZVVuaXRzLmgiCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9X
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQkocmV2aXNpb24gMTc4ODU3KQorKysg
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbXBvcnQgIkNv
bG9yTWFjLmgiCiAjaW1wb3J0ICJDb250ZXh0TWVudUNvbnRyb2xsZXIuaCIKICNpbXBvcnQgIkVk
aXRvci5oIgorI2ltcG9ydCAiRm9udC5oIgogI2ltcG9ydCAiRm9udENhc2NhZGUuaCIKICNpbXBv
cnQgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW1wb3J0ICJGcmFtZVNlbGVjdGlvbi5oIgpAQCAt
NjQsNyArNjUsNiBAQAogI2ltcG9ydCAiUmVuZGVyVmlldy5oIgogI2ltcG9ydCAiUmVuZGVyV2lk
Z2V0LmgiCiAjaW1wb3J0ICJTY3JvbGxWaWV3LmgiCi0jaW1wb3J0ICJTaW1wbGVGb250RGF0YS5o
IgogI2ltcG9ydCAiVGV4dENoZWNrZXJDbGllbnQuaCIKICNpbXBvcnQgIlRleHRDaGVja2luZ0hl
bHBlci5oIgogI2ltcG9ydCAiVGV4dEl0ZXJhdG9yLmgiCkBAIC04NDgsNyArODQ4LDcgQEAgc3Rh
dGljIHZvaWQgQVhBdHRyaWJ1dGVTdHJpbmdTZXRTdHlsZShOUwogICAgIGNvbnN0IFJlbmRlclN0
eWxlJiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwogICAgIAogICAgIC8vIHNldCBiYXNpYyBm
b250IGluZm8KLSAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldEZvbnQoYXR0clN0cmluZywgTlNBY2Nl
c3NpYmlsaXR5Rm9udFRleHRBdHRyaWJ1dGUsIHN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZv
bnREYXRhKCkuZ2V0TlNGb250KCksIHJhbmdlKTsKKyAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldEZv
bnQoYXR0clN0cmluZywgTlNBY2Nlc3NpYmlsaXR5Rm9udFRleHRBdHRyaWJ1dGUsIHN0eWxlLmZv
bnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKS5nZXROU0ZvbnQoKSwgcmFuZ2UpOwogICAgIAogICAg
IC8vIHNldCBiYXNpYyBjb2xvcnMKICAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldENvbG9yKGF0dHJT
dHJpbmcsIE5TQWNjZXNzaWJpbGl0eUZvcmVncm91bmRDb2xvclRleHRBdHRyaWJ1dGUsIG5zQ29s
b3Ioc3R5bGUudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpKSwgcmFuZ2Up
OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0JKHJldmlzaW9uIDE3ODg1NykK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC02NjksNyArNjY5LDcgQEAgLSAoTlNGb250ICopX2ZvbnQKICAgICBhdXRvIHJlbmRlcmVyID0g
Y29yZShzZWxmKS0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1
cm4gbmlsOwotICAgIHJldHVybiByZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1h
cnlGb250RGF0YSgpLmdldE5TRm9udCgpOworICAgIHJldHVybiByZW5kZXJlci0+c3R5bGUoKS5m
b250Q2FzY2FkZSgpLnByaW1hcnlGb250KCkuZ2V0TlNGb250KCk7CiB9CiAjZWxzZQogLSAoQ1RG
b250UmVmKV9mb250CkBAIC02NzcsNyArNjc3LDcgQEAgLSAoQ1RGb250UmVmKV9mb250CiAgICAg
UmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNvcmUoc2VsZiktPnJlbmRlcmVyKCk7CiAgICAgaWYg
KCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4gcmVuZGVyZXItPnN0
eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXRDVEZvbnQoKTsKKyAgICBy
ZXR1cm4gcmVuZGVyZXItPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpLmdldENU
Rm9udCgpOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFj
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmNwcAko
cmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzAsMTAgKzMwLDEwIEBACiAjaW5jbHVkZSAiQ1NTRm9udFNlbGVj
dG9yLmgiCiAjaW5jbHVkZSAiQ1NTU2VnbWVudGVkRm9udEZhY2UuaCIKICNpbmNsdWRlICJEb2N1
bWVudC5oIgorI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIK
ICNpbmNsdWRlICJGb250TG9hZGVyLmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJl
cy5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApAQCAtMTA4LDcgKzEwOCw3IEBAIHZvaWQgQ1NTRm9udEZhY2U6OmZvbnRMb2FkZWQoQ1NTRm9u
dEZhY2UKICNlbmRpZgogfQogCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBDU1NGb250RmFj
ZTo6Z2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGJv
b2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpCitSZWZQdHI8Rm9udD4gQ1NT
Rm9udEZhY2U6OmZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGJv
b2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpCiB7CiAgICAgbV9hY3RpdmVT
b3VyY2UgPSAwOwogICAgIGlmICghaXNWYWxpZCgpKQpAQCAtMTI0LDcgKzEyNCw3IEBAIFBhc3NS
ZWZQdHI8U2ltcGxlRm9udERhdGE+IENTU0ZvbnRGYWNlOjoKIAogICAgIHNpemVfdCBzaXplID0g
bV9zb3VyY2VzLnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkg
ewotICAgICAgICBpZiAoUmVmUHRyPFNpbXBsZUZvbnREYXRhPiByZXN1bHQgPSBtX3NvdXJjZXNb
aV0tPmdldEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgc3ludGhldGljQm9sZCwgc3ludGhldGlj
SXRhbGljLCBmb250U2VsZWN0b3IpKSB7CisgICAgICAgIGlmIChSZWZQdHI8Rm9udD4gcmVzdWx0
ID0gbV9zb3VyY2VzW2ldLT5mb250KGZvbnREZXNjcmlwdGlvbiwgc3ludGhldGljQm9sZCwgc3lu
dGhldGljSXRhbGljLCBmb250U2VsZWN0b3IpKSB7CiAgICAgICAgICAgICBtX2FjdGl2ZVNvdXJj
ZSA9IG1fc291cmNlc1tpXS5nZXQoKTsKICNpZiBFTkFCTEUoRk9OVF9MT0FEX0VWRU5UUykKICAg
ICAgICAgICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLmZv
bnRMb2FkRXZlbnRzRW5hYmxlZCgpICYmIG1fbG9hZFN0YXRlID09IExvYWRpbmcgJiYgbV9zb3Vy
Y2VzW2ldLT5pc0xvYWRlZCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZh
Y2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2UuaAkocmV2
aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBD
U1NTZWdtZW50ZWRGb250RmFjZTsKIGNsYXNzIEZvbnREZXNjcmlwdGlvbjsKLWNsYXNzIFNpbXBs
ZUZvbnREYXRhOworY2xhc3MgRm9udDsKIAogY2xhc3MgQ1NTRm9udEZhY2UgOiBwdWJsaWMgUmVm
Q291bnRlZDxDU1NGb250RmFjZT4gewogcHVibGljOgpAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6
CiAKICAgICB2b2lkIGZvbnRMb2FkZWQoQ1NTRm9udEZhY2VTb3VyY2UqKTsKIAotICAgIFBhc3NS
ZWZQdHI8U2ltcGxlRm9udERhdGE+IGdldEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYs
IGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpOworICAgIFJlZlB0cjxG
b250PiBmb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGJvb2wgc3ludGhldGljQm9sZCwgYm9v
bCBzeW50aGV0aWNJdGFsaWMpOwogCiAgICAgc3RydWN0IFVuaWNvZGVSYW5nZSB7CiAgICAgICAg
IFVuaWNvZGVSYW5nZShVQ2hhcjMyIGZyb20sIFVDaGFyMzIgdG8pCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5jcHAJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDkgKzMyLDkgQEAKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgogI2luY2x1ZGUg
IkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRWxlbWVudEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiRm9u
dC5oIgogI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5o
IgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAKICNpZiBFTkFCTEUoU1ZHX09URl9DT05W
RVJURVIpCiAjaW5jbHVkZSAiRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oIgpAQCAtNzQsMTAgKzc0
LDEwIEBAIENTU0ZvbnRGYWNlU291cmNlOjp+Q1NTRm9udEZhY2VTb3VyY2UoKQogCiB2b2lkIENT
U0ZvbnRGYWNlU291cmNlOjpwcnVuZVRhYmxlKCkKIHsKLSAgICBpZiAobV9mb250RGF0YVRhYmxl
LmlzRW1wdHkoKSkKKyAgICBpZiAobV9mb250VGFibGUuaXNFbXB0eSgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBtX2ZvbnREYXRhVGFibGUuY2xlYXIoKTsKKyAgICBtX2ZvbnRUYWJsZS5jbGVh
cigpOwogfQogCiBib29sIENTU0ZvbnRGYWNlU291cmNlOjppc0xvYWRlZCgpIGNvbnN0CkBAIC0x
MDEsNyArMTAxLDcgQEAgdm9pZCBDU1NGb250RmFjZVNvdXJjZTo6Zm9udExvYWRlZChDYWNoZQog
ICAgICAgICBtX2ZhY2UtPmZvbnRMb2FkZWQodGhpcyk7CiB9CiAKLVBhc3NSZWZQdHI8U2ltcGxl
Rm9udERhdGE+IENTU0ZvbnRGYWNlU291cmNlOjpnZXRGb250RGF0YShjb25zdCBGb250RGVzY3Jp
cHRpb24mIGZvbnREZXNjcmlwdGlvbiwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRp
Y0l0YWxpYywgQ1NTRm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IpCitSZWZQdHI8Rm9udD4gQ1NT
Rm9udEZhY2VTb3VyY2U6OmZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24sIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMsIENTU0ZvbnRTZWxl
Y3RvciogZm9udFNlbGVjdG9yKQogewogICAgIC8vIElmIHRoZSBmb250IGhhc24ndCBsb2FkZWQg
b3IgYW4gZXJyb3Igb2NjdXJyZWQsIHRoZW4gd2UndmUgZ290IG5vdGhpbmcuCiAgICAgaWYgKCFp
c1ZhbGlkKCkpCkBAIC0xMTIsMTggKzExMiwxNyBAQCBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRh
PiBDU1NGb250RmFjZVNvCiAgICAgICAgICAgICAmJiAhbV9zdmdGb250RmFjZUVsZW1lbnQKICNl
bmRpZgogICAgICkgewotICAgICAgICAvLyBXZSdyZSBsb2NhbC4gSnVzdCByZXR1cm4gYSBTaW1w
bGVGb250RGF0YSBmcm9tIHRoZSBub3JtYWwgY2FjaGUuCisgICAgICAgIC8vIFdlJ3JlIGxvY2Fs
LiBKdXN0IHJldHVybiBhIEZvbnQgZnJvbSB0aGUgbm9ybWFsIGNhY2hlLgogICAgICAgICAvLyBX
ZSBkb24ndCB3YW50IHRvIGNoZWNrIGFsdGVybmF0ZSBmb250IGZhbWlseSBuYW1lcyBoZXJlLCBz
byBwYXNzIHRydWUgYXMgdGhlIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSBwYXJhbWV0ZXIuCiAgICAg
ICAgIHJldHVybiBmb250Q2FjaGUoKS5mb250Rm9yRmFtaWx5KGZvbnREZXNjcmlwdGlvbiwgbV9z
dHJpbmcsIHRydWUpOwogICAgIH0KIAotICAgIC8vIFNlZSBpZiB3ZSBoYXZlIGEgbWFwcGluZyBp
biBvdXIgRm9udERhdGEgY2FjaGUuCiAgICAgdW5zaWduZWQgaGFzaEtleSA9IChmb250RGVzY3Jp
cHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSArIDEpIDw8IDUgfCBmb250RGVzY3JpcHRpb24ud2lk
dGhWYXJpYW50KCkgPDwgMwogICAgICAgICAgICAgICAgICAgICAgICB8IChmb250RGVzY3JpcHRp
b24ub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCA/IDQgOiAwKSB8IChzeW50aGV0aWNCb2xkID8g
MiA6IDApIHwgKHN5bnRoZXRpY0l0YWxpYyA/IDEgOiAwKTsKIAotICAgIFJlZlB0cjxTaW1wbGVG
b250RGF0YT4gZm9udERhdGEgPSBtX2ZvbnREYXRhVGFibGUuYWRkKGhhc2hLZXksIG51bGxwdHIp
Lml0ZXJhdG9yLT52YWx1ZTsKLSAgICBpZiAoZm9udERhdGEpCi0gICAgICAgIHJldHVybiBmb250
RGF0YS5yZWxlYXNlKCk7CisgICAgUmVmUHRyPEZvbnQ+IGZvbnQgPSBtX2ZvbnRUYWJsZS5hZGQo
aGFzaEtleSwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOworICAgIGlmIChmb250KQorICAgICAg
ICByZXR1cm4gZm9udC5yZWxlYXNlKCk7CiAKICAgICAvLyBJZiB3ZSBhcmUgc3RpbGwgbG9hZGlu
ZywgdGhlbiB3ZSBsZXQgdGhlIHN5c3RlbSBwaWNrIGEgZm9udC4KICAgICBpZiAoaXNMb2FkZWQo
KSkgewpAQCAtMTM2LDcgKzEzNSw3IEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IENTU0Zv
bnRGYWNlU28KICAgICAgICAgICAgIGlmICghbV9mb250LT5lbnN1cmVDdXN0b21Gb250RGF0YSho
YXNFeHRlcm5hbFNWR0ZvbnQsIG1fc3RyaW5nKSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAotICAgICAgICAgICAgZm9udERhdGEgPSBtX2ZvbnQtPmdldEZvbnREYXRhKGZvbnRE
ZXNjcmlwdGlvbiwgbV9zdHJpbmcsIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYywgaGFz
RXh0ZXJuYWxTVkdGb250KTsKKyAgICAgICAgICAgIGZvbnQgPSBtX2ZvbnQtPmNyZWF0ZUZvbnQo
Zm9udERlc2NyaXB0aW9uLCBtX3N0cmluZywgc3ludGhldGljQm9sZCwgc3ludGhldGljSXRhbGlj
LCBoYXNFeHRlcm5hbFNWR0ZvbnQpOwogICAgICAgICB9IGVsc2UgewogI2lmIEVOQUJMRShTVkdf
Rk9OVFMpCiAgICAgICAgICAgICAvLyBJbi1Eb2N1bWVudCBTVkcgRm9udHMKQEAgLTE1Miw5ICsx
NTEsOSBAQCBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBDU1NGb250RmFjZVNvCiAgICAgICAg
ICAgICAgICAgaWYgKCFtX2dlbmVyYXRlZE9URkJ1ZmZlcikKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEZvbnRDdXN0
b21QbGF0Zm9ybURhdGE+IGN1c3RvbVBsYXRmb3JtRGF0YSA9IGNyZWF0ZUZvbnRDdXN0b21QbGF0
Zm9ybURhdGEoKm1fZ2VuZXJhdGVkT1RGQnVmZmVyKTsKLSAgICAgICAgICAgICAgICBmb250RGF0
YSA9IFNpbXBsZUZvbnREYXRhOjpjcmVhdGUoY3VzdG9tUGxhdGZvcm1EYXRhLT5mb250UGxhdGZv
cm1EYXRhKHN0YXRpY19jYXN0PGludD4oZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXpl
KCkpLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMsIGZvbnREZXNjcmlwdGlvbi5vcmll
bnRhdGlvbigpLCBmb250RGVzY3JpcHRpb24ud2lkdGhWYXJpYW50KCksIGZvbnREZXNjcmlwdGlv
bi5yZW5kZXJpbmdNb2RlKCkpLCB0cnVlLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgZm9udCA9
IEZvbnQ6OmNyZWF0ZShjdXN0b21QbGF0Zm9ybURhdGEtPmZvbnRQbGF0Zm9ybURhdGEoc3RhdGlj
X2Nhc3Q8aW50Pihmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSksIHN5bnRoZXRp
Y0JvbGQsIHN5bnRoZXRpY0l0YWxpYywgZm9udERlc2NyaXB0aW9uLm9yaWVudGF0aW9uKCksIGZv
bnREZXNjcmlwdGlvbi53aWR0aFZhcmlhbnQoKSwgZm9udERlc2NyaXB0aW9uLnJlbmRlcmluZ01v
ZGUoKSksIHRydWUsIGZhbHNlKTsKICNlbHNlCi0gICAgICAgICAgICAgICAgZm9udERhdGEgPSBT
aW1wbGVGb250RGF0YTo6Y3JlYXRlKHN0ZDo6bWFrZV91bmlxdWU8U1ZHRm9udERhdGE+KG1fc3Zn
Rm9udEZhY2VFbGVtZW50LmdldCgpKSwgZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXpl
KCksIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYyk7CisgICAgICAgICAgICAgICAgZm9u
dCA9IEZvbnQ6OmNyZWF0ZShzdGQ6Om1ha2VfdW5pcXVlPFNWR0ZvbnREYXRhPihtX3N2Z0ZvbnRG
YWNlRWxlbWVudC5nZXQoKSksIGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpLCBz
eW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMpOwogI2VuZGlmCiAgICAgICAgICAgICB9CiAj
ZW5kaWYKQEAgLTE2NCwxMiArMTYzLDEyIEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IENT
U0ZvbnRGYWNlU28KICAgICAgICAgLy8gYW5kIHRoZSBsb2FkZXIgbWF5IGludm9rZSBhcmJpdHJh
cnkgZGVsZWdhdGUgb3IgZXZlbnQgaGFuZGxlciBjb2RlLgogICAgICAgICBmb250U2VsZWN0b3It
PmJlZ2luTG9hZGluZ0ZvbnRTb29uKG1fZm9udC5nZXQoKSk7CiAKLSAgICAgICAgUmVmPFNpbXBs
ZUZvbnREYXRhPiBwbGFjZWhvbGRlckZvbnQgPSBmb250Q2FjaGUoKS5sYXN0UmVzb3J0RmFsbGJh
Y2tGb250KGZvbnREZXNjcmlwdGlvbik7Ci0gICAgICAgIFJlZjxTaW1wbGVGb250RGF0YT4gcGxh
Y2Vob2xkZXJGb250Q29weUluTG9hZGluZ1N0YXRlID0gU2ltcGxlRm9udERhdGE6OmNyZWF0ZShw
bGFjZWhvbGRlckZvbnQtPnBsYXRmb3JtRGF0YSgpLCB0cnVlLCB0cnVlKTsKKyAgICAgICAgUmVm
PEZvbnQ+IHBsYWNlaG9sZGVyRm9udCA9IGZvbnRDYWNoZSgpLmxhc3RSZXNvcnRGYWxsYmFja0Zv
bnQoZm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgUmVmPEZvbnQ+IHBsYWNlaG9sZGVyRm9udENv
cHlJbkxvYWRpbmdTdGF0ZSA9IEZvbnQ6OmNyZWF0ZShwbGFjZWhvbGRlckZvbnQtPnBsYXRmb3Jt
RGF0YSgpLCB0cnVlLCB0cnVlKTsKICAgICAgICAgcmV0dXJuIFdURjo6bW92ZShwbGFjZWhvbGRl
ckZvbnRDb3B5SW5Mb2FkaW5nU3RhdGUpOwogICAgIH0KIAotICAgIHJldHVybiBmb250RGF0YS5y
ZWxlYXNlKCk7CisgICAgcmV0dXJuIGZvbnQucmVsZWFzZSgpOwogfQogCiAjaWYgRU5BQkxFKEZP
TlRfTE9BRF9FVkVOVFMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3Vy
Y2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2Uu
aAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291
cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDggKzQyLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogY2xhc3MgQ2FjaGVkRm9udDsKIGNsYXNzIENTU0ZvbnRGYWNlOwogY2xhc3MgQ1NTRm9udFNl
bGVjdG9yOworY2xhc3MgRm9udDsKIGNsYXNzIEZvbnREZXNjcmlwdGlvbjsKLWNsYXNzIFNpbXBs
ZUZvbnREYXRhOwogCiBjbGFzcyBDU1NGb250RmFjZVNvdXJjZSBmaW5hbCA6IHB1YmxpYyBDYWNo
ZWRGb250Q2xpZW50IHsKIHB1YmxpYzoKQEAgLTU5LDcgKzU5LDcgQEAgcHVibGljOgogCiAgICAg
dmlydHVhbCB2b2lkIGZvbnRMb2FkZWQoQ2FjaGVkRm9udCopIG92ZXJyaWRlOwogCi0gICAgUGFz
c1JlZlB0cjxTaW1wbGVGb250RGF0YT4gZ2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9u
JiwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYywgQ1NTRm9udFNlbGVj
dG9yKik7CisgICAgUmVmUHRyPEZvbnQ+IGZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgYm9v
bCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYywgQ1NTRm9udFNlbGVjdG9yKik7
CiAKICAgICB2b2lkIHBydW5lVGFibGUoKTsKIApAQCAtODEsNyArODEsNyBAQCBwcml2YXRlOgog
ICAgIEF0b21pY1N0cmluZyBtX3N0cmluZzsgLy8gVVJJIGZvciByZW1vdGUsIGJ1aWx0LWluIGZv
bnQgbmFtZSBmb3IgbG9jYWwuCiAgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkRm9udD4g
bV9mb250OyAvLyBGb3IgcmVtb3RlIGZvbnRzLCBhIHBvaW50ZXIgdG8gb3VyIGNhY2hlZCByZXNv
dXJjZS4KICAgICBDU1NGb250RmFjZSogbV9mYWNlOyAvLyBPdXIgb3duaW5nIGZvbnQgZmFjZS4K
LSAgICBIYXNoTWFwPHVuc2lnbmVkLCBSZWZQdHI8U2ltcGxlRm9udERhdGE+PiBtX2ZvbnREYXRh
VGFibGU7IC8vIFRoZSBoYXNoIGtleSBpcyBjb21wb3NlZCBvZiBzaXplIHN5bnRoZXRpYyBzdHls
ZXMuCisgICAgSGFzaE1hcDx1bnNpZ25lZCwgUmVmUHRyPEZvbnQ+PiBtX2ZvbnRUYWJsZTsgLy8g
VGhlIGhhc2gga2V5IGlzIGNvbXBvc2VkIG9mIHNpemUgc3ludGhldGljIHN0eWxlcy4KIAogI2lm
IEVOQUJMRShTVkdfT1RGX0NPTlZFUlRFUikKICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtX2dl
bmVyYXRlZE9URkJ1ZmZlcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3Iu
Y3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVj
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTMgKzQwLDEzIEBACiAjaW5jbHVkZSAiQ1NT
VmFsdWVMaXN0LmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKICNpbmNsdWRl
ICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGb250Q2FjaGUuaCIK
ICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAi
U1ZHRm9udEZhY2VFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJT
ZXR0aW5ncy5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5jbHVkZSAiU3R5bGVQ
cm9wZXJ0aWVzLmgiCiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgIlN0eWxl
UnVsZS5oIgpAQCAtNjEyLDcgKzYxMiw3IEBAIGJvb2wgQ1NTRm9udFNlbGVjdG9yOjpyZXNvbHZl
c0ZhbWlseUZvcigKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXNpemVfdCBDU1NGb250U2VsZWN0
b3I6OmZhbGxiYWNrRm9udERhdGFDb3VudCgpCitzaXplX3QgQ1NTRm9udFNlbGVjdG9yOjpmYWxs
YmFja0ZvbnRDb3VudCgpCiB7CiAgICAgaWYgKCFtX2RvY3VtZW50KQogICAgICAgICByZXR1cm4g
MDsKQEAgLTYyMyw3ICs2MjMsNyBAQCBzaXplX3QgQ1NTRm9udFNlbGVjdG9yOjpmYWxsYmFja0Zv
bnREYXRhCiAgICAgcmV0dXJuIDA7CiB9CiAKLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IENT
U0ZvbnRTZWxlY3Rvcjo6ZmFsbGJhY2tGb250RGF0YUF0KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
Zm9udERlc2NyaXB0aW9uLCBzaXplX3QgaW5kZXgpCitQYXNzUmVmUHRyPEZvbnQ+IENTU0ZvbnRT
ZWxlY3Rvcjo6ZmFsbGJhY2tGb250QXQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3Jp
cHRpb24sIHNpemVfdCBpbmRleCkKIHsKICAgICBBU1NFUlRfVU5VU0VEKGluZGV4LCAhaW5kZXgp
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5oCShyZXZpc2lvbiAxNzg4
NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDggKzI3LDggQEAKICNkZWZpbmUgQ1NTRm9udFNlbGVjdG9yX2gKIAogI2luY2x1
ZGUgIkNhY2hlZFJlc291cmNlSGFuZGxlLmgiCisjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUg
IkZvbnRTZWxlY3Rvci5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5jbHVkZSAi
VGltZXIuaCIKICNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KQEAg
LTU5LDggKzU5LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdW5zaWduZWQgdW5pcXVlSWQoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBtX3VuaXF1ZUlkOyB9CiAKICAgICB2aXJ0dWFsIEZvbnRS
YW5nZXMgZm9udFJhbmdlc0ZvckZhbWlseShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBB
dG9taWNTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHNpemVfdCBmYWxsYmFja0ZvbnRE
YXRhQ291bnQoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U2ltcGxlRm9udERh
dGE+IGZhbGxiYWNrRm9udERhdGFBdChjb25zdCBGb250RGVzY3JpcHRpb24mLCBzaXplX3QpIG92
ZXJyaWRlOworICAgIHZpcnR1YWwgc2l6ZV90IGZhbGxiYWNrRm9udENvdW50KCkgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEZvbnQ+IGZhbGxiYWNrRm9udEF0KGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYsIHNpemVfdCkgb3ZlcnJpZGU7CiAgICAgQ1NTU2VnbWVudGVkRm9udEZhY2Uq
IGdldEZvbnRGYWNlKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYg
ZmFtaWx5KTsKIAogICAgIHZpcnR1YWwgYm9vbCByZXNvbHZlc0ZhbWlseUZvcihjb25zdCBGb250
RGVzY3JpcHRpb24mKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NTZWdtZW50ZWRGb250RmFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1NlZ21lbnRlZEZvbnRGYWNlLmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dl
YkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAs
OSArMzAsOSBAQAogI2luY2x1ZGUgIkNTU0ZvbnRGYWNlU291cmNlLmgiCiAjaW5jbHVkZSAiQ1NT
Rm9udFNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGb250Lmgi
CiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRG
ZWF0dXJlcy5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtOTAsMjEgKzkwLDIxIEBAIHZvaWQgQ1NTU2VnbWVudGVkRm9udEZhY2U6OmFw
cGVuZEZvbnRGYWMKICAgICBtX2ZvbnRGYWNlcy5hcHBlbmQoZm9udEZhY2UpOwogfQogCi1zdGF0
aWMgdm9pZCBhcHBlbmRGb250RGF0YVdpdGhJbnZhbGlkVW5pY29kZVJhbmdlSWZMb2FkaW5nKEZv
bnRSYW5nZXMmIHJhbmdlcywgUmVmPFNpbXBsZUZvbnREYXRhPiYmIGZvbnREYXRhLCBjb25zdCBW
ZWN0b3I8Q1NTRm9udEZhY2U6OlVuaWNvZGVSYW5nZT4mIHVuaWNvZGVSYW5nZXMpCitzdGF0aWMg
dm9pZCBhcHBlbmRGb250V2l0aEludmFsaWRVbmljb2RlUmFuZ2VJZkxvYWRpbmcoRm9udFJhbmdl
cyYgcmFuZ2VzLCBSZWY8Rm9udD4mJiBmb250LCBjb25zdCBWZWN0b3I8Q1NTRm9udEZhY2U6OlVu
aWNvZGVSYW5nZT4mIHVuaWNvZGVSYW5nZXMpCiB7Ci0gICAgaWYgKGZvbnREYXRhLT5pc0xvYWRp
bmcoKSkgewotICAgICAgICByYW5nZXMuYXBwZW5kUmFuZ2UoRm9udFJhbmdlczo6UmFuZ2UoMCwg
MCwgV1RGOjptb3ZlKGZvbnREYXRhKSkpOworICAgIGlmIChmb250LT5pc0xvYWRpbmcoKSkgewor
ICAgICAgICByYW5nZXMuYXBwZW5kUmFuZ2UoRm9udFJhbmdlczo6UmFuZ2UoMCwgMCwgV1RGOjpt
b3ZlKGZvbnQpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICB1bnNpZ25lZCBudW1S
YW5nZXMgPSB1bmljb2RlUmFuZ2VzLnNpemUoKTsKICAgICBpZiAoIW51bVJhbmdlcykgewotICAg
ICAgICByYW5nZXMuYXBwZW5kUmFuZ2UoRm9udFJhbmdlczo6UmFuZ2UoMCwgMHg3RkZGRkZGRiwg
V1RGOjptb3ZlKGZvbnREYXRhKSkpOworICAgICAgICByYW5nZXMuYXBwZW5kUmFuZ2UoRm9udFJh
bmdlczo6UmFuZ2UoMCwgMHg3RkZGRkZGRiwgV1RGOjptb3ZlKGZvbnQpKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgbnVtUmFuZ2VzOyAr
K2opCi0gICAgICAgIHJhbmdlcy5hcHBlbmRSYW5nZShGb250UmFuZ2VzOjpSYW5nZSh1bmljb2Rl
UmFuZ2VzW2pdLmZyb20oKSwgdW5pY29kZVJhbmdlc1tqXS50bygpLCBmb250RGF0YS5jb3B5UmVm
KCkpKTsKKyAgICAgICAgcmFuZ2VzLmFwcGVuZFJhbmdlKEZvbnRSYW5nZXM6OlJhbmdlKHVuaWNv
ZGVSYW5nZXNbal0uZnJvbSgpLCB1bmljb2RlUmFuZ2VzW2pdLnRvKCksIGZvbnQuY29weVJlZigp
KSk7CiB9CiAKIEZvbnRSYW5nZXMgQ1NTU2VnbWVudGVkRm9udEZhY2U6OmZvbnRSYW5nZXMoY29u
c3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pCkBAIC0xMjgsOCArMTI4LDggQEAg
Rm9udFJhbmdlcyBDU1NTZWdtZW50ZWRGb250RmFjZTo6Zm9udFJhbgogICAgICAgICAgICAgRm9u
dFRyYWl0c01hc2sgdHJhaXRzTWFzayA9IGZhY2UtPnRyYWl0c01hc2soKTsKICAgICAgICAgICAg
IGJvb2wgc3ludGhldGljQm9sZCA9ICEodHJhaXRzTWFzayAmIChGb250V2VpZ2h0NjAwTWFzayB8
IEZvbnRXZWlnaHQ3MDBNYXNrIHwgRm9udFdlaWdodDgwME1hc2sgfCBGb250V2VpZ2h0OTAwTWFz
aykpICYmIChkZXNpcmVkVHJhaXRzTWFzayAmIChGb250V2VpZ2h0NjAwTWFzayB8IEZvbnRXZWln
aHQ3MDBNYXNrIHwgRm9udFdlaWdodDgwME1hc2sgfCBGb250V2VpZ2h0OTAwTWFzaykpOwogICAg
ICAgICAgICAgYm9vbCBzeW50aGV0aWNJdGFsaWMgPSAhKHRyYWl0c01hc2sgJiBGb250U3R5bGVJ
dGFsaWNNYXNrKSAmJiAoZGVzaXJlZFRyYWl0c01hc2sgJiBGb250U3R5bGVJdGFsaWNNYXNrKTsK
LSAgICAgICAgICAgIGlmIChSZWZQdHI8U2ltcGxlRm9udERhdGE+IGZhY2VGb250RGF0YSA9IGZh
Y2UtPmdldEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgc3ludGhldGljQm9sZCwgc3ludGhldGlj
SXRhbGljKSkKLSAgICAgICAgICAgICAgICBhcHBlbmRGb250RGF0YVdpdGhJbnZhbGlkVW5pY29k
ZVJhbmdlSWZMb2FkaW5nKGZvbnRSYW5nZXMsIGZhY2VGb250RGF0YS5yZWxlYXNlTm9uTnVsbCgp
LCBmYWNlLT5yYW5nZXMoKSk7CisgICAgICAgICAgICBpZiAoUmVmUHRyPEZvbnQ+IGZhY2VGb250
ID0gZmFjZS0+Zm9udChmb250RGVzY3JpcHRpb24sIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0
YWxpYykpCisgICAgICAgICAgICAgICAgYXBwZW5kRm9udFdpdGhJbnZhbGlkVW5pY29kZVJhbmdl
SWZMb2FkaW5nKGZvbnRSYW5nZXMsIGZhY2VGb250LnJlbGVhc2VOb25OdWxsKCksIGZhY2UtPnJh
bmdlcygpKTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gZm9udFJhbmdlczsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0b3IuaAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBjbGFz
cyBIaXRUZXN0UmVzdWx0OwogY2xhc3MgS2lsbFJpbmc7CiBjbGFzcyBQYXN0ZWJvYXJkOwogY2xh
c3MgU2hhcmVkQnVmZmVyOwotY2xhc3MgU2ltcGxlRm9udERhdGE7CitjbGFzcyBGb250OwogY2xh
c3MgU3BlbGxDaGVja1JlcXVlc3Q7CiBjbGFzcyBTcGVsbENoZWNrZXI7CiBjbGFzcyBTdHlsZVBy
b3BlcnRpZXM7CkBAIC00MjIsNyArNDIyLDcgQEAgcHVibGljOgogI2lmIFBMQVRGT1JNKENPQ09B
KQogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZW5kZXJTdHlsZSogc3R5bGVGb3JTZWxlY3Rp
b25TdGFydChGcmFtZSogLCBOb2RlICombm9kZVRvUmVtb3ZlKTsKICAgICBXRUJDT1JFX0VYUE9S
VCBib29sIGluc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVvdGVkQ29udGVudCgpOwotICAgIFdF
QkNPUkVfRVhQT1JUIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250Rm9yU2VsZWN0aW9uKGJvb2wm
KSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBGb250KiBmb250Rm9yU2VsZWN0aW9u
KGJvb2wmKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBOU0RpY3Rpb25hcnkgKmZvbnRBdHRy
aWJ1dGVzRm9yU2VsZWN0aW9uU3RhcnQoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBTdHJp
bmcgc3RyaW5nU2VsZWN0aW9uRm9yUGFzdGVib2FyZCgpOwogICAgIFN0cmluZyBzdHJpbmdTZWxl
Y3Rpb25Gb3JQYXN0ZWJvYXJkV2l0aEltYWdlQWx0VGV4dCgpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbQkocmV2aXNpb24gMTc4ODU3KQor
KysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTE0LDcgKzExMTQsNyBAQCBzdGF0aWMgUGxhdGZvcm1Gb250ICpfZm9udChF
bGVtZW50JiBlbGVtCiAgICAgYXV0byByZW5kZXJlciA9IGVsZW1lbnQucmVuZGVyZXIoKTsKICAg
ICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiByZW5kZXJl
ci0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmdldE5TRm9udCgpOwor
ICAgIHJldHVybiByZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCku
Z2V0TlNGb250KCk7CiB9CiAjZWxzZQogc3RhdGljIFBsYXRmb3JtRm9udCAqX2ZvbnQoRWxlbWVu
dCYgZWxlbWVudCkKQEAgLTExMjIsNyArMTEyMiw3IEBAIHN0YXRpYyBQbGF0Zm9ybUZvbnQgKl9m
b250KEVsZW1lbnQmIGVsZW0KICAgICBhdXRvIHJlbmRlcmVyID0gZWxlbWVudC5yZW5kZXJlcigp
OwogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIChQ
bGF0Zm9ybUZvbnQgKilyZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250
RGF0YSgpLmdldENURm9udCgpOworICAgIHJldHVybiAoUGxhdGZvcm1Gb250ICopcmVuZGVyZXIt
PnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpLmdldENURm9udCgpOwogfQogI2Vu
ZGlmCiAKQEAgLTI1OTQsMTAgKzI1OTQsMTAgQEAgTlNBdHRyaWJ1dGVkU3RyaW5nICplZGl0aW5n
QXR0cmlidXRlZFN0cgogICAgICAgICAgICAgW2F0dHJzLmdldCgpIHNldE9iamVjdDpbTlNOdW1i
ZXIgbnVtYmVyV2l0aEludGVnZXI6TlNVbmRlcmxpbmVTdHlsZVNpbmdsZV0gZm9yS2V5Ok5TVW5k
ZXJsaW5lU3R5bGVBdHRyaWJ1dGVOYW1lXTsKICAgICAgICAgaWYgKHN0eWxlLnRleHREZWNvcmF0
aW9uc0luRWZmZWN0KCkgJiBUZXh0RGVjb3JhdGlvbkxpbmVUaHJvdWdoKQogICAgICAgICAgICAg
W2F0dHJzLmdldCgpIHNldE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aEludGVnZXI6TlNVbmRl
cmxpbmVTdHlsZVNpbmdsZV0gZm9yS2V5Ok5TU3RyaWtldGhyb3VnaFN0eWxlQXR0cmlidXRlTmFt
ZV07Ci0gICAgICAgIGlmIChOU0ZvbnQgKmZvbnQgPSBzdHlsZS5mb250Q2FzY2FkZSgpLnByaW1h
cnlGb250RGF0YSgpLmdldE5TRm9udCgpKQorICAgICAgICBpZiAoTlNGb250ICpmb250ID0gc3R5
bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpLmdldE5TRm9udCgpKQogICAgICAgICAgICAg
W2F0dHJzLmdldCgpIHNldE9iamVjdDpmb250IGZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgW2F0dHJzLmdldCgpIHNldE9iamVjdDpbZm9udE1h
bmFnZXIgY29udmVydEZvbnQ6V2ViRGVmYXVsdEZvbnQoKSB0b1NpemU6c3R5bGUuZm9udENhc2Nh
ZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5wbGF0Zm9ybURhdGEoKS5zaXplKCldIGZvcktleTpOU0Zv
bnRBdHRyaWJ1dGVOYW1lXTsKKyAgICAgICAgICAgIFthdHRycy5nZXQoKSBzZXRPYmplY3Q6W2Zv
bnRNYW5hZ2VyIGNvbnZlcnRGb250OldlYkRlZmF1bHRGb250KCkgdG9TaXplOnN0eWxlLmZvbnRD
YXNjYWRlKCkucHJpbWFyeUZvbnQoKS5wbGF0Zm9ybURhdGEoKS5zaXplKCldIGZvcktleTpOU0Zv
bnRBdHRyaWJ1dGVOYW1lXTsKICAgICAgICAgaWYgKHN0eWxlLnZpc2l0ZWREZXBlbmRlbnRDb2xv
cihDU1NQcm9wZXJ0eUNvbG9yKS5hbHBoYSgpKQogICAgICAgICAgICAgW2F0dHJzLmdldCgpIHNl
dE9iamVjdDpuc0NvbG9yKHN0eWxlLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNv
bG9yKSkgZm9yS2V5Ok5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07CiAgICAgICAgIGVs
c2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0JKHJldmlzaW9u
IDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQkod29y
a2luZyBjb3B5KQpAQCAtMjAzLDcgKzIwMyw3IEBAIGJvb2wgRWRpdG9yOjppbnNlcnRQYXJhZ3Jh
cGhTZXBhcmF0b3JJblEKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotY29uc3QgU2ltcGxlRm9udERh
dGEqIEVkaXRvcjo6Zm9udEZvclNlbGVjdGlvbihib29sJiBoYXNNdWx0aXBsZUZvbnRzKSBjb25z
dAorY29uc3QgRm9udCogRWRpdG9yOjpmb250Rm9yU2VsZWN0aW9uKGJvb2wmIGhhc011bHRpcGxl
Rm9udHMpIGNvbnN0CiB7CiAgICAgaGFzTXVsdGlwbGVGb250cyA9IGZhbHNlOwogCkBAIC0yMTEs
OSArMjExLDkgQEAgY29uc3QgU2ltcGxlRm9udERhdGEqIEVkaXRvcjo6Zm9udEZvclNlbAogICAg
ICAgICBOb2RlKiBub2RlVG9SZW1vdmU7CiAgICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHN0
eWxlRm9yU2VsZWN0aW9uU3RhcnQoJm1fZnJhbWUsIG5vZGVUb1JlbW92ZSk7IC8vIHNldHMgbm9k
ZVRvUmVtb3ZlCiAKLSAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIHJlc3VsdCA9IG51bGxw
dHI7CisgICAgICAgIGNvbnN0IEZvbnQqIHJlc3VsdCA9IG51bGxwdHI7CiAgICAgICAgIGlmIChz
dHlsZSkKLSAgICAgICAgICAgIHJlc3VsdCA9ICZzdHlsZS0+Zm9udENhc2NhZGUoKS5wcmltYXJ5
Rm9udERhdGEoKTsKKyAgICAgICAgICAgIHJlc3VsdCA9ICZzdHlsZS0+Zm9udENhc2NhZGUoKS5w
cmltYXJ5Rm9udCgpOwogCiAgICAgICAgIGlmIChub2RlVG9SZW1vdmUpIHsKICAgICAgICAgICAg
IEV4Y2VwdGlvbkNvZGUgZWM7CkBAIC0yMjQsNyArMjI0LDcgQEAgY29uc3QgU2ltcGxlRm9udERh
dGEqIEVkaXRvcjo6Zm9udEZvclNlbAogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAot
ICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250ID0gMDsKKyAgICBjb25zdCBGb250KiBmb250
ID0gMDsKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS50b05v
cm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmIChOb2RlKiBzdGFydE5vZGUgPSBhZGp1c3RlZFNlbGVj
dGlvblN0YXJ0Rm9yU3R5bGVDb21wdXRhdGlvbihtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpKS5kZXByZWNhdGVkTm9kZSgpKSB7CiAgICAgICAgIE5vZGUqIHBhc3RFbmQgPSByYW5nZS0+
cGFzdExhc3ROb2RlKCk7CkBAIC0yMzUsNyArMjM1LDcgQEAgY29uc3QgU2ltcGxlRm9udERhdGEq
IEVkaXRvcjo6Zm9udEZvclNlbAogICAgICAgICAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBBcmUgdGhlcmUgYW55IG5v
ZGUgdHlwZXMgdGhhdCBoYXZlIHJlbmRlcmVycywgYnV0IHRoYXQgd2Ugc2hvdWxkIGJlIHNraXBw
aW5nPwotICAgICAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEmIHByaW1hcnlGb250ID0gcmVu
ZGVyZXItPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKTsKKyAgICAgICAg
ICAgIGNvbnN0IEZvbnQmIHByaW1hcnlGb250ID0gcmVuZGVyZXItPnN0eWxlKCkuZm9udENhc2Nh
ZGUoKS5wcmltYXJ5Rm9udCgpOwogICAgICAgICAgICAgaWYgKCFmb250KQogICAgICAgICAgICAg
ICAgIGZvbnQgPSAmcHJpbWFyeUZvbnQ7CiAgICAgICAgICAgICBlbHNlIGlmIChmb250ICE9ICZw
cmltYXJ5Rm9udCkgewpAQCAtMjU3LDcgKzI1Nyw3IEBAIE5TRGljdGlvbmFyeSogRWRpdG9yOjpm
b250QXR0cmlidXRlc0ZvclMKIAogICAgIE5TTXV0YWJsZURpY3Rpb25hcnkqIHJlc3VsdCA9IFtO
U011dGFibGVEaWN0aW9uYXJ5IGRpY3Rpb25hcnldOwogICAgIAotICAgIENURm9udFJlZiBmb250
ID0gc3R5bGUtPmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0Q1RGb250KCk7Cisg
ICAgQ1RGb250UmVmIGZvbnQgPSBzdHlsZS0+Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpLmdl
dENURm9udCgpOwogICAgIGlmIChmb250KQogICAgICAgICBbcmVzdWx0IHNldE9iamVjdDooaWQp
Zm9udCBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL21hYy9FZGl0b3JNYWMubW0JKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTA1LDcgKzEw
NSw3IEBAIGJvb2wgRWRpdG9yOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJblEKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotY29uc3QgU2ltcGxlRm9udERhdGEqIEVkaXRvcjo6Zm9udEZvclNlbGVj
dGlvbihib29sJiBoYXNNdWx0aXBsZUZvbnRzKSBjb25zdAorY29uc3QgRm9udCogRWRpdG9yOjpm
b250Rm9yU2VsZWN0aW9uKGJvb2wmIGhhc011bHRpcGxlRm9udHMpIGNvbnN0CiB7CiAgICAgaGFz
TXVsdGlwbGVGb250cyA9IGZhbHNlOwogCkBAIC0xMTMsOSArMTEzLDkgQEAgY29uc3QgU2ltcGxl
Rm9udERhdGEqIEVkaXRvcjo6Zm9udEZvclNlbAogICAgICAgICBOb2RlKiBub2RlVG9SZW1vdmU7
CiAgICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQoJm1f
ZnJhbWUsIG5vZGVUb1JlbW92ZSk7IC8vIHNldHMgbm9kZVRvUmVtb3ZlCiAKLSAgICAgICAgY29u
c3QgU2ltcGxlRm9udERhdGEqIHJlc3VsdCA9IG51bGxwdHI7CisgICAgICAgIGNvbnN0IEZvbnQq
IHJlc3VsdCA9IG51bGxwdHI7CiAgICAgICAgIGlmIChzdHlsZSkKLSAgICAgICAgICAgIHJlc3Vs
dCA9ICZzdHlsZS0+Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKTsKKyAgICAgICAgICAg
IHJlc3VsdCA9ICZzdHlsZS0+Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpOwogCiAgICAgICAg
IGlmIChub2RlVG9SZW1vdmUpCiAgICAgICAgICAgICBub2RlVG9SZW1vdmUtPnJlbW92ZShBU1NF
UlRfTk9fRVhDRVBUSU9OKTsKQEAgLTEyMyw3ICsxMjMsNyBAQCBjb25zdCBTaW1wbGVGb250RGF0
YSogRWRpdG9yOjpmb250Rm9yU2VsCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0g
ICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQgPSAwOworICAgIGNvbnN0IEZvbnQqIGZvbnQg
PSAwOwogICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9y
bWFsaXplZFJhbmdlKCk7CiAgICAgTm9kZSogc3RhcnROb2RlID0gYWRqdXN0ZWRTZWxlY3Rpb25T
dGFydEZvclN0eWxlQ29tcHV0YXRpb24obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSku
ZGVwcmVjYXRlZE5vZGUoKTsKICAgICBpZiAocmFuZ2UgJiYgc3RhcnROb2RlKSB7CkBAIC0xMzUs
NyArMTM1LDcgQEAgY29uc3QgU2ltcGxlRm9udERhdGEqIEVkaXRvcjo6Zm9udEZvclNlbAogICAg
ICAgICAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgIC8vIEZJWE1FOiBBcmUgdGhlcmUgYW55IG5vZGUgdHlwZXMgdGhhdCBoYXZlIHJlbmRl
cmVycywgYnV0IHRoYXQgd2Ugc2hvdWxkIGJlIHNraXBwaW5nPwotICAgICAgICAgICAgY29uc3Qg
U2ltcGxlRm9udERhdGEmIHByaW1hcnlGb250ID0gcmVuZGVyZXItPnN0eWxlKCkuZm9udENhc2Nh
ZGUoKS5wcmltYXJ5Rm9udERhdGEoKTsKKyAgICAgICAgICAgIGNvbnN0IEZvbnQmIHByaW1hcnlG
b250ID0gcmVuZGVyZXItPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpOwogICAg
ICAgICAgICAgaWYgKCFmb250KQogICAgICAgICAgICAgICAgIGZvbnQgPSAmcHJpbWFyeUZvbnQ7
CiAgICAgICAgICAgICBlbHNlIGlmIChmb250ICE9ICZwcmltYXJ5Rm9udCkgewpAQCAtMTYwLDgg
KzE2MCw4IEBAIE5TRGljdGlvbmFyeSogRWRpdG9yOjpmb250QXR0cmlidXRlc0ZvclMKICAgICBp
ZiAoc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xv
cikuaXNWYWxpZCgpICYmIHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlC
YWNrZ3JvdW5kQ29sb3IpLmFscGhhKCkgIT0gMCkKICAgICAgICAgW3Jlc3VsdCBzZXRPYmplY3Q6
bnNDb2xvcihzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3Vu
ZENvbG9yKSkgZm9yS2V5Ok5TQmFja2dyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07CiAKLSAgICBp
ZiAoc3R5bGUtPmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0TlNGb250KCkpCi0g
ICAgICAgIFtyZXN1bHQgc2V0T2JqZWN0OnN0eWxlLT5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250
RGF0YSgpLmdldE5TRm9udCgpIGZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKKyAgICBpZiAo
c3R5bGUtPmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKS5nZXROU0ZvbnQoKSkKKyAgICAgICAg
W3Jlc3VsdCBzZXRPYmplY3Q6c3R5bGUtPmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKS5nZXRO
U0ZvbnQoKSBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CiAKICAgICBpZiAoc3R5bGUtPnZp
c2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKS5pc1ZhbGlkKCkgJiYgc3R5bGUt
PnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSAhPSBDb2xvcjo6YmxhY2sp
CiAgICAgICAgIFtyZXN1bHQgc2V0T2JqZWN0Om5zQ29sb3Ioc3R5bGUtPnZpc2l0ZWREZXBlbmRl
bnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSkgZm9yS2V5Ok5TRm9yZWdyb3VuZENvbG9yQXR0cmli
dXRlTmFtZV07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkRm9udC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQu
Y3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2Fj
aGVkRm9udC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5LDcgKzk5LDcgQEAgYm9vbCBDYWNoZWRG
b250OjplbnN1cmVDdXN0b21Gb250RGF0YShibwogCiBib29sIENhY2hlZEZvbnQ6OmVuc3VyZUN1
c3RvbUZvbnREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSkKIHsKLSAgICBpZiAoIW1fZm9udERhdGEg
JiYgIWVycm9yT2NjdXJyZWQoKSAmJiAhaXNMb2FkaW5nKCkgJiYgZGF0YSkgeworICAgIGlmICgh
bV9mb250Q3VzdG9tUGxhdGZvcm1EYXRhICYmICFlcnJvck9jY3VycmVkKCkgJiYgIWlzTG9hZGlu
ZygpICYmIGRhdGEpIHsKICAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyKGRhdGEp
OwogCiAjaWYgKCFQTEFURk9STShNQUMpIHx8IF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlS
RUQgPD0gMTA5MCkgJiYgKCFQTEFURk9STShJT1MpIHx8IF9fSVBIT05FX09TX1ZFUlNJT05fTUlO
X1JFUVVJUkVEIDwgODAwMDApCkBAIC0xMTIsMzAgKzExMiwzMCBAQCBib29sIENhY2hlZEZvbnQ6
OmVuc3VyZUN1c3RvbUZvbnREYXRhKFNoCiAgICAgICAgIH0KICNlbmRpZgogCi0gICAgICAgIG1f
Zm9udERhdGEgPSBidWZmZXIgPyBjcmVhdGVGb250Q3VzdG9tUGxhdGZvcm1EYXRhKCpidWZmZXIp
IDogbnVsbHB0cjsKLSAgICAgICAgbV9oYXNDcmVhdGVkRm9udERhdGFXcmFwcGluZ1Jlc291cmNl
ID0gbV9mb250RGF0YSAmJiAoYnVmZmVyID09IG1fZGF0YSk7Ci0gICAgICAgIGlmICghbV9mb250
RGF0YSkKKyAgICAgICAgbV9mb250Q3VzdG9tUGxhdGZvcm1EYXRhID0gYnVmZmVyID8gY3JlYXRl
Rm9udEN1c3RvbVBsYXRmb3JtRGF0YSgqYnVmZmVyKSA6IG51bGxwdHI7CisgICAgICAgIG1faGFz
Q3JlYXRlZEZvbnREYXRhV3JhcHBpbmdSZXNvdXJjZSA9IG1fZm9udEN1c3RvbVBsYXRmb3JtRGF0
YSAmJiAoYnVmZmVyID09IG1fZGF0YSk7CisgICAgICAgIGlmICghbV9mb250Q3VzdG9tUGxhdGZv
cm1EYXRhKQogICAgICAgICAgICAgc2V0U3RhdHVzKERlY29kZUVycm9yKTsKICAgICB9CiAKLSAg
ICByZXR1cm4gbV9mb250RGF0YS5nZXQoKTsKKyAgICByZXR1cm4gbV9mb250Q3VzdG9tUGxhdGZv
cm1EYXRhLmdldCgpOwogfQogCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBDYWNoZWRGb250
OjpnZXRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29u
c3QgQXRvbWljU3RyaW5nJiwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxp
YywgYm9vbCkKK1JlZlB0cjxGb250PiBDYWNoZWRGb250OjpjcmVhdGVGb250KGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmLCBib29sIHN5
bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljLCBib29sKQogewotICAgIHJldHVybiBT
aW1wbGVGb250RGF0YTo6Y3JlYXRlKHBsYXRmb3JtRGF0YUZyb21DdXN0b21EYXRhKGZvbnREZXNj
cmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFs
aWMsCisgICAgcmV0dXJuIEZvbnQ6OmNyZWF0ZShwbGF0Zm9ybURhdGFGcm9tQ3VzdG9tRGF0YShm
b250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSwgc3ludGhldGljQm9sZCwgc3ludGhl
dGljSXRhbGljLAogICAgICAgICBmb250RGVzY3JpcHRpb24ub3JpZW50YXRpb24oKSwgZm9udERl
c2NyaXB0aW9uLndpZHRoVmFyaWFudCgpLCBmb250RGVzY3JpcHRpb24ucmVuZGVyaW5nTW9kZSgp
KSwgdHJ1ZSwgZmFsc2UpOwogfQogCiBGb250UGxhdGZvcm1EYXRhIENhY2hlZEZvbnQ6OnBsYXRm
b3JtRGF0YUZyb21DdXN0b21EYXRhKGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMs
IEZvbnRPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgRm9udFdpZHRoVmFyaWFudCB3aWR0aFZhcmlh
bnQsIEZvbnRSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUpCiB7Ci0gICAgQVNTRVJUKG1fZm9u
dERhdGEpOwotICAgIHJldHVybiBtX2ZvbnREYXRhLT5mb250UGxhdGZvcm1EYXRhKHN0YXRpY19j
YXN0PGludD4oc2l6ZSksIGJvbGQsIGl0YWxpYywgb3JpZW50YXRpb24sIHdpZHRoVmFyaWFudCwg
cmVuZGVyaW5nTW9kZSk7CisgICAgQVNTRVJUKG1fZm9udEN1c3RvbVBsYXRmb3JtRGF0YSk7Cisg
ICAgcmV0dXJuIG1fZm9udEN1c3RvbVBsYXRmb3JtRGF0YS0+Zm9udFBsYXRmb3JtRGF0YShzdGF0
aWNfY2FzdDxpbnQ+KHNpemUpLCBib2xkLCBpdGFsaWMsIG9yaWVudGF0aW9uLCB3aWR0aFZhcmlh
bnQsIHJlbmRlcmluZ01vZGUpOwogfQogCiB2b2lkIENhY2hlZEZvbnQ6OmFsbENsaWVudHNSZW1v
dmVkKCkKIHsKLSAgICBtX2ZvbnREYXRhID0gbnVsbHB0cjsKKyAgICBtX2ZvbnRDdXN0b21QbGF0
Zm9ybURhdGEgPSBudWxscHRyOwogfQogCiB2b2lkIENhY2hlZEZvbnQ6OmNoZWNrTm90aWZ5KCkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRGb250LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQuaAkocmV2aXNpb24g
MTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMjgsMTAgKzI4LDEwIEBACiAKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJj
ZS5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCisjaW5jbHVkZSAiRm9udC5o
IgogI2luY2x1ZGUgIkZvbnRPcmllbnRhdGlvbi5oIgogI2luY2x1ZGUgIkZvbnRSZW5kZXJpbmdN
b2RlLmgiCiAjaW5jbHVkZSAiRm9udFdpZHRoVmFyaWFudC5oIgotI2luY2x1ZGUgIlNpbXBsZUZv
bnREYXRhLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTIsNyArNTIsNyBAQCBwdWJs
aWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgZW5zdXJlQ3VzdG9tRm9udERhdGEoYm9vbCBleHRlcm5h
bFNWRywgY29uc3QgQXRvbWljU3RyaW5nJiByZW1vdGVVUkkpOwogCi0gICAgdmlydHVhbCBQYXNz
UmVmUHRyPFNpbXBsZUZvbnREYXRhPiBnZXRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24m
LCBjb25zdCBBdG9taWNTdHJpbmcmIHJlbW90ZVVSSSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29s
IHN5bnRoZXRpY0l0YWxpYywgYm9vbCBleHRlcm5hbFNWRyk7CisgICAgdmlydHVhbCBSZWZQdHI8
Rm9udD4gY3JlYXRlRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9taWNTdHJp
bmcmIHJlbW90ZVVSSSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYywg
Ym9vbCBleHRlcm5hbFNWRyk7CiAKIHByb3RlY3RlZDoKICAgICBGb250UGxhdGZvcm1EYXRhIHBs
YXRmb3JtRGF0YUZyb21DdXN0b21EYXRhKGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBpdGFs
aWMsIEZvbnRPcmllbnRhdGlvbiA9IEhvcml6b250YWwsIEZvbnRXaWR0aFZhcmlhbnQgPSBSZWd1
bGFyV2lkdGgsIEZvbnRSZW5kZXJpbmdNb2RlID0gTm9ybWFsUmVuZGVyaW5nTW9kZSk7CkBAIC03
MCw3ICs3MCw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgYWxsQ2xpZW50c1JlbW92
ZWQoKSBvdmVycmlkZTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxGb250Q3VzdG9tUGxhdGZvcm1E
YXRhPiBtX2ZvbnREYXRhOworICAgIHN0ZDo6dW5pcXVlX3B0cjxGb250Q3VzdG9tUGxhdGZvcm1E
YXRhPiBtX2ZvbnRDdXN0b21QbGF0Zm9ybURhdGE7CiAgICAgYm9vbCBtX2xvYWRJbml0aWF0ZWQ7
CiAgICAgYm9vbCBtX2hhc0NyZWF0ZWRGb250RGF0YVdyYXBwaW5nUmVzb3VyY2U7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTVkdGb250LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU1ZHRm9udC5jcHAJKHJldmlz
aW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTVkdGb250
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsMTcgKzUxLDE3IEBAIENhY2hlZFNWR0ZvbnQ6OkNh
Y2hlZFNWR0ZvbnQoY29uc3QgUmVzb3UKIHsKIH0KIAotUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0
YT4gQ2FjaGVkU1ZHRm9udDo6Z2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgcmVtb3RlVVJJLCBib29sIHN5bnRoZXRp
Y0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljLCBib29sIGV4dGVybmFsU1ZHKQorUmVmUHRyPEZv
bnQ+IENhY2hlZFNWR0ZvbnQ6OmNyZWF0ZUZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgcmVtb3RlVVJJLCBib29sIHN5bnRoZXRp
Y0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljLCBib29sIGV4dGVybmFsU1ZHKQogewogI2lmIEVO
QUJMRShTVkdfT1RGX0NPTlZFUlRFUikKICAgICBpZiAoIWV4dGVybmFsU1ZHIHx8IGZpcnN0Rm9u
dEZhY2UocmVtb3RlVVJJKSkKLSAgICAgICAgcmV0dXJuIENhY2hlZEZvbnQ6OmdldEZvbnREYXRh
KGZvbnREZXNjcmlwdGlvbiwgcmVtb3RlVVJJLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFs
aWMsIGV4dGVybmFsU1ZHKTsKKyAgICAgICAgcmV0dXJuIENhY2hlZEZvbnQ6OmNyZWF0ZUZvbnQo
Zm9udERlc2NyaXB0aW9uLCByZW1vdGVVUkksIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxp
YywgZXh0ZXJuYWxTVkcpOwogI2Vsc2UKICAgICBpZiAoIWV4dGVybmFsU1ZHKQotICAgICAgICBy
ZXR1cm4gQ2FjaGVkRm9udDo6Z2V0Rm9udERhdGEoZm9udERlc2NyaXB0aW9uLCByZW1vdGVVUkks
IHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYywgZXh0ZXJuYWxTVkcpOworICAgICAgICBy
ZXR1cm4gQ2FjaGVkRm9udDo6Y3JlYXRlRm9udChmb250RGVzY3JpcHRpb24sIHJlbW90ZVVSSSwg
c3ludGhldGljQm9sZCwgc3ludGhldGljSXRhbGljLCBleHRlcm5hbFNWRyk7CiAKICAgICBpZiAo
U1ZHRm9udEZhY2VFbGVtZW50KiBmaXJzdEZvbnRGYWNlID0gdGhpcy0+Zmlyc3RGb250RmFjZShy
ZW1vdGVVUkkpKQotICAgICAgICByZXR1cm4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZShzdGQ6Om1h
a2VfdW5pcXVlPFNWR0ZvbnREYXRhPihmaXJzdEZvbnRGYWNlKSwgZm9udERlc2NyaXB0aW9uLmNv
bXB1dGVkUGl4ZWxTaXplKCksIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYyk7CisgICAg
ICAgIHJldHVybiBGb250OjpjcmVhdGUoc3RkOjptYWtlX3VuaXF1ZTxTVkdGb250RGF0YT4oZmly
c3RGb250RmFjZSksIGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpLCBzeW50aGV0
aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMpOwogI2VuZGlmCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU1ZHRm9udC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTVkdGb250LmgJKHJl
dmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTVkdG
b250LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogCiAgICAgdmly
dHVhbCBib29sIGVuc3VyZUN1c3RvbUZvbnREYXRhKGJvb2wgZXh0ZXJuYWxTVkcsIGNvbnN0IEF0
b21pY1N0cmluZyYgcmVtb3RlVVJJKSBvdmVycmlkZTsKICAgICAKLSAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8U2ltcGxlRm9udERhdGE+IGdldEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYs
IGNvbnN0IEF0b21pY1N0cmluZyYgcmVtb3RlVVJJLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wg
c3ludGhldGljSXRhbGljLCBib29sIGV4dGVybmFsU1ZHKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFs
IFJlZlB0cjxGb250PiBjcmVhdGVGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0
b21pY1N0cmluZyYgcmVtb3RlVVJJLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGlj
SXRhbGljLCBib29sIGV4dGVybmFsU1ZHKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICBGb250
UGxhdGZvcm1EYXRhIHBsYXRmb3JtRGF0YUZyb21DdXN0b21EYXRhKGZsb2F0IHNpemUsIGJvb2wg
Ym9sZCwgYm9vbCBpdGFsaWMsIEZvbnRPcmllbnRhdGlvbiA9IEhvcml6b250YWwsIEZvbnRXaWR0
aFZhcmlhbnQgPSBSZWd1bGFyV2lkdGgsIEZvbnRSZW5kZXJpbmdNb2RlID0gTm9ybWFsUmVuZGVy
aW5nTW9kZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNw
cAkocmV2aXNpb24gMTc4NjUwKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9TaW1wbGVGb250RGF0YS5jcHA6MTc4NjUwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NTYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDgsIDIwMTAsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YK
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5j
LiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgorCisjaWYgUExBVEZPUk0o
SU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVE
ID4gMTA4MCkKKyNpbmNsdWRlICJDb3JlVGV4dFNQSS5oIgorI2VuZGlmCisjaW5jbHVkZSAiRm9u
dENhY2hlLmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKKyNpbmNsdWRlICJPcGVuVHlwZU1h
dGhEYXRhLmgiCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2
ZXJEZXN0cm95ZWQuaD4KKworI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKKyNpbmNsdWRl
ICJPcGVuVHlwZVZlcnRpY2FsRGF0YS5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KwordW5zaWduZWQgR2x5cGhQYWdlOjpzX2NvdW50ID0gMDsKKworY29uc3QgZmxvYXQgc21hbGxD
YXBzRm9udFNpemVNdWx0aXBsaWVyID0gMC43ZjsKK2NvbnN0IGZsb2F0IGVtcGhhc2lzTWFya0Zv
bnRTaXplTXVsdGlwbGllciA9IDAuNWY7CisKK1NpbXBsZUZvbnREYXRhOjpTaW1wbGVGb250RGF0
YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEsIGJvb2wgaXNDdXN0b21Gb250
LCBib29sIGlzTG9hZGluZywgYm9vbCBpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKQorICAgIDog
bV9tYXhDaGFyV2lkdGgoLTEpCisgICAgLCBtX2F2Z0NoYXJXaWR0aCgtMSkKKyAgICAsIG1fcGxh
dGZvcm1EYXRhKHBsYXRmb3JtRGF0YSkKKyAgICAsIG1fdHJlYXRBc0ZpeGVkUGl0Y2goZmFsc2Up
CisgICAgLCBtX2lzQ3VzdG9tRm9udChpc0N1c3RvbUZvbnQpCisgICAgLCBtX2lzTG9hZGluZyhp
c0xvYWRpbmcpCisgICAgLCBtX2lzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2soaXNUZXh0T3JpZW50
YXRpb25GYWxsYmFjaykKKyAgICAsIG1faXNCcm9rZW5JZGVvZ3JhcGhGYWxsYmFjayhmYWxzZSkK
KyAgICAsIG1fbWF0aERhdGEobnVsbHB0cikKKyNpZiBFTkFCTEUoT1BFTlRZUEVfVkVSVElDQUwp
CisgICAgLCBtX3ZlcnRpY2FsRGF0YSgwKQorI2VuZGlmCisgICAgLCBtX2hhc1ZlcnRpY2FsR2x5
cGhzKGZhbHNlKQoreworICAgIHBsYXRmb3JtSW5pdCgpOworICAgIHBsYXRmb3JtR2x5cGhJbml0
KCk7CisgICAgcGxhdGZvcm1DaGFyV2lkdGhJbml0KCk7CisjaWYgRU5BQkxFKE9QRU5UWVBFX1ZF
UlRJQ0FMKQorICAgIGlmIChwbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCAm
JiAhaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaykgeworICAgICAgICBtX3ZlcnRpY2FsRGF0YSA9
IHBsYXRmb3JtRGF0YS52ZXJ0aWNhbERhdGEoKTsKKyAgICAgICAgbV9oYXNWZXJ0aWNhbEdseXBo
cyA9IG1fdmVydGljYWxEYXRhLmdldCgpICYmIG1fdmVydGljYWxEYXRhLT5oYXNWZXJ0aWNhbE1l
dHJpY3MoKTsKKyAgICB9CisjZW5kaWYKK30KKworU2ltcGxlRm9udERhdGE6OlNpbXBsZUZvbnRE
YXRhKHN0ZDo6dW5pcXVlX3B0cjxTVkdEYXRhPiBzdmdEYXRhLCBmbG9hdCBmb250U2l6ZSwgYm9v
bCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYykKKyAgICA6IG1fcGxhdGZvcm1E
YXRhKEZvbnRQbGF0Zm9ybURhdGEoZm9udFNpemUsIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0
YWxpYykpCisgICAgLCBtX3N2Z0RhdGEoV1RGOjptb3ZlKHN2Z0RhdGEpKQorICAgICwgbV90cmVh
dEFzRml4ZWRQaXRjaChmYWxzZSkKKyAgICAsIG1faXNDdXN0b21Gb250KHRydWUpCisgICAgLCBt
X2lzTG9hZGluZyhmYWxzZSkKKyAgICAsIG1faXNUZXh0T3JpZW50YXRpb25GYWxsYmFjayhmYWxz
ZSkKKyAgICAsIG1faXNCcm9rZW5JZGVvZ3JhcGhGYWxsYmFjayhmYWxzZSkKKyAgICAsIG1fbWF0
aERhdGEobnVsbHB0cikKKyNpZiBFTkFCTEUoT1BFTlRZUEVfVkVSVElDQUwpCisgICAgLCBtX3Zl
cnRpY2FsRGF0YSgwKQorI2VuZGlmCisgICAgLCBtX2hhc1ZlcnRpY2FsR2x5cGhzKGZhbHNlKQor
I2lmIFBMQVRGT1JNKElPUykKKyAgICAsIG1fc2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKGZhbHNl
KQorI2VuZGlmCit7CisgICAgbV9zdmdEYXRhLT5pbml0aWFsaXplRm9udERhdGEodGhpcywgZm9u
dFNpemUpOworfQorCisvLyBFc3RpbWF0ZXMgb2YgYXZnQ2hhcldpZHRoIGFuZCBtYXhDaGFyV2lk
dGggZm9yIHBsYXRmb3JtcyB0aGF0IGRvbid0IHN1cHBvcnQgYWNjZXNzaW5nIHRoZXNlIHZhbHVl
cyBmcm9tIHRoZSBmb250Lgordm9pZCBTaW1wbGVGb250RGF0YTo6aW5pdENoYXJXaWR0aHMoKQor
eworICAgIGF1dG8qIGdseXBoUGFnZVplcm8gPSBnbHlwaFBhZ2UoMCk7CisKKyAgICAvLyBUcmVh
dCB0aGUgd2lkdGggb2YgYSAnMCcgYXMgdGhlIGF2Z0NoYXJXaWR0aC4KKyAgICBpZiAobV9hdmdD
aGFyV2lkdGggPD0gMC5mICYmIGdseXBoUGFnZVplcm8pIHsKKyAgICAgICAgc3RhdGljIGNvbnN0
IFVDaGFyMzIgZGlnaXRaZXJvQ2hhciA9ICcwJzsKKyAgICAgICAgR2x5cGggZGlnaXRaZXJvR2x5
cGggPSBnbHlwaFBhZ2VaZXJvLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoZGlnaXRaZXJvQ2hhciku
Z2x5cGg7CisgICAgICAgIGlmIChkaWdpdFplcm9HbHlwaCkKKyAgICAgICAgICAgIG1fYXZnQ2hh
cldpZHRoID0gd2lkdGhGb3JHbHlwaChkaWdpdFplcm9HbHlwaCk7CisgICAgfQorCisgICAgLy8g
SWYgd2UgY2FuJ3QgcmV0cmlldmUgdGhlIHdpZHRoIG9mIGEgJzAnLCBmYWxsIGJhY2sgdG8gdGhl
IHggaGVpZ2h0LgorICAgIGlmIChtX2F2Z0NoYXJXaWR0aCA8PSAwLmYpCisgICAgICAgIG1fYXZn
Q2hhcldpZHRoID0gbV9mb250TWV0cmljcy54SGVpZ2h0KCk7CisKKyAgICBpZiAobV9tYXhDaGFy
V2lkdGggPD0gMC5mKQorICAgICAgICBtX21heENoYXJXaWR0aCA9IHN0ZDo6bWF4KG1fYXZnQ2hh
cldpZHRoLCBtX2ZvbnRNZXRyaWNzLmZsb2F0QXNjZW50KCkpOworfQorCit2b2lkIFNpbXBsZUZv
bnREYXRhOjpwbGF0Zm9ybUdseXBoSW5pdCgpCit7CisgICAgYXV0byogZ2x5cGhQYWdlWmVybyA9
IGdseXBoUGFnZSgwKTsKKyAgICBpZiAoIWdseXBoUGFnZVplcm8pIHsKKyAgICAgICAgbV9zcGFj
ZUdseXBoID0gMDsKKyAgICAgICAgbV9zcGFjZVdpZHRoID0gMDsKKyAgICAgICAgbV96ZXJvR2x5
cGggPSAwOworICAgICAgICBtX2FkanVzdGVkU3BhY2VXaWR0aCA9IDA7CisgICAgICAgIGRldGVy
bWluZVBpdGNoKCk7CisgICAgICAgIG1femVyb1dpZHRoU3BhY2VHbHlwaCA9IDA7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICAvLyBBc2sgZm9yIHRoZSBnbHlwaCBmb3IgMCB0byBhdm9p
ZCBwYWdpbmcgaW4gWkVSTyBXSURUSCBTUEFDRS4gQ29udHJvbCBjaGFyYWN0ZXJzLCBpbmNsdWRp
bmcgMCwKKyAgICAvLyBhcmUgbWFwcGVkIHRvIHRoZSBaRVJPIFdJRFRIIFNQQUNFIGdseXBoLgor
ICAgIG1femVyb1dpZHRoU3BhY2VHbHlwaCA9IGdseXBoUGFnZVplcm8tPmdseXBoRGF0YUZvckNo
YXJhY3RlcigwKS5nbHlwaDsKKworICAgIC8vIE5hc3R5IGhhY2sgdG8gZGV0ZXJtaW5lIGlmIHdl
IHNob3VsZCByb3VuZCBvciBjZWlsIHNwYWNlIHdpZHRocy4KKyAgICAvLyBJZiB0aGUgZm9udCBp
cyBtb25vc3BhY2Ugb3IgZmFrZSBtb25vc3BhY2Ugd2UgY2VpbCB0byBlbnN1cmUgdGhhdCAKKyAg
ICAvLyBldmVyeSBjaGFyYWN0ZXIgYW5kIHRoZSBzcGFjZSBhcmUgdGhlIHNhbWUgd2lkdGguICBP
dGhlcndpc2Ugd2Ugcm91bmQuCisgICAgbV9zcGFjZUdseXBoID0gZ2x5cGhQYWdlWmVyby0+Z2x5
cGhEYXRhRm9yQ2hhcmFjdGVyKCcgJykuZ2x5cGg7CisgICAgZmxvYXQgd2lkdGggPSB3aWR0aEZv
ckdseXBoKG1fc3BhY2VHbHlwaCk7CisgICAgbV9zcGFjZVdpZHRoID0gd2lkdGg7CisgICAgbV96
ZXJvR2x5cGggPSBnbHlwaFBhZ2VaZXJvLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoJzAnKS5nbHlw
aDsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldFplcm9XaWR0aCh3aWR0aEZvckdseXBoKG1femVyb0ds
eXBoKSk7CisgICAgZGV0ZXJtaW5lUGl0Y2goKTsKKyAgICBtX2FkanVzdGVkU3BhY2VXaWR0aCA9
IG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPyBjZWlsZih3aWR0aCkgOiByb3VuZGYod2lkdGgpOworCisg
ICAgLy8gRm9yY2UgdGhlIGdseXBoIGZvciBaRVJPIFdJRFRIIFNQQUNFIHRvIGhhdmUgemVybyB3
aWR0aCwgdW5sZXNzIGl0IGlzIHNoYXJlZCB3aXRoIFNQQUNFLgorICAgIC8vIEhlbHZldGljYSBp
cyBhbiBleGFtcGxlIG9mIGEgbm9uLXplcm8gd2lkdGggWkVSTyBXSURUSCBTUEFDRSBnbHlwaC4K
KyAgICAvLyBTZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMTc4
PiBhbmQgU2ltcGxlRm9udERhdGE6OmlzWmVyb1dpZHRoU3BhY2VHbHlwaCgpCisgICAgaWYgKG1f
emVyb1dpZHRoU3BhY2VHbHlwaCA9PSBtX3NwYWNlR2x5cGgpCisgICAgICAgIG1femVyb1dpZHRo
U3BhY2VHbHlwaCA9IDA7Cit9CisKK1NpbXBsZUZvbnREYXRhOjp+U2ltcGxlRm9udERhdGEoKQor
eworICAgIHJlbW92ZUZyb21TeXN0ZW1GYWxsYmFja0NhY2hlKCk7Cit9CisKK3N0YXRpYyBib29s
IGZpbGxHbHlwaFBhZ2UoR2x5cGhQYWdlJiBwYWdlVG9GaWxsLCB1bnNpZ25lZCBvZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25z
dCBTaW1wbGVGb250RGF0YSogZm9udERhdGEpCit7CisjaWYgRU5BQkxFKFNWR19GT05UUykKKyAg
ICBpZiAoYXV0byogc3ZnRGF0YSA9IGZvbnREYXRhLT5zdmdEYXRhKCkpCisgICAgICAgIHJldHVy
biBzdmdEYXRhLT5maWxsU1ZHR2x5cGhQYWdlKCZwYWdlVG9GaWxsLCBvZmZzZXQsIGxlbmd0aCwg
YnVmZmVyLCBidWZmZXJMZW5ndGgsIGZvbnREYXRhKTsKKyNlbmRpZgorICAgIGJvb2wgaGFzR2x5
cGhzID0gcGFnZVRvRmlsbC5maWxsKG9mZnNldCwgbGVuZ3RoLCBidWZmZXIsIGJ1ZmZlckxlbmd0
aCwgZm9udERhdGEpOworI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKKyAgICBpZiAoaGFz
R2x5cGhzICYmIGZvbnREYXRhLT52ZXJ0aWNhbERhdGEoKSkKKyAgICAgICAgZm9udERhdGEtPnZl
cnRpY2FsRGF0YSgpLT5zdWJzdGl0dXRlV2l0aFZlcnRpY2FsR2x5cGhzKGZvbnREYXRhLCAmcGFn
ZVRvRmlsbCwgb2Zmc2V0LCBsZW5ndGgpOworI2VuZGlmCisgICAgcmV0dXJuIGhhc0dseXBoczsK
K30KKworc3RhdGljIFJlZlB0cjxHbHlwaFBhZ2U+IGNyZWF0ZUFuZEZpbGxHbHlwaFBhZ2UodW5z
aWduZWQgcGFnZU51bWJlciwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQoreworI2lm
IFBMQVRGT1JNKElPUykKKyAgICAvLyBGSVhNRTogVGltZXMgTmV3IFJvbWFuIGNvbnRhaW5zIEFy
YWJpYyBnbHlwaHMsIGJ1dCBDb3JlIFRleHQgZG9lc24ndCBrbm93IGhvdyB0byBzaGFwZSB0aGVt
LiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzk4MjM5NzU+LgorICAgIC8vIE9uY2Ugd2UgaGF2ZSB0aGUg
Zml4IGZvciA8cmRhcjovL3Byb2JsZW0vOTgyMzk3NT4gdGhlbiByZW1vdmUgdGhpcyBjb2RlIHRv
Z2V0aGVyIHdpdGggU2ltcGxlRm9udERhdGE6OnNob3VsZE5vdEJlVXNlZEZvckFyYWJpYygpCisg
ICAgLy8gaW4gPHJkYXI6Ly9wcm9ibGVtLzEyMDk2ODM1Pi4KKyAgICBpZiAocGFnZU51bWJlciA9
PSA2ICYmIGZvbnREYXRhLT5zaG91bGROb3RCZVVzZWRGb3JBcmFiaWMoKSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisjZW5kaWYKKworICAgIHVuc2lnbmVkIHN0YXJ0ID0gcGFnZU51bWJlciAq
IEdseXBoUGFnZTo6c2l6ZTsKKyAgICBVQ2hhciBidWZmZXJbR2x5cGhQYWdlOjpzaXplICogMiAr
IDJdOworICAgIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aDsKKyAgICAvLyBGaWxsIGluIGEgYnVmZmVy
IHdpdGggdGhlIGVudGlyZSAicGFnZSIgb2YgY2hhcmFjdGVycyB0aGF0IHdlIHdhbnQgdG8gbG9v
ayB1cCBnbHlwaHMgZm9yLgorICAgIGlmIChVX0lTX0JNUChzdGFydCkpIHsKKyAgICAgICAgYnVm
ZmVyTGVuZ3RoID0gR2x5cGhQYWdlOjpzaXplOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgR2x5cGhQYWdlOjpzaXplOyBpKyspCisgICAgICAgICAgICBidWZmZXJbaV0gPSBzdGFy
dCArIGk7CisKKyAgICAgICAgaWYgKHN0YXJ0ID09IDApIHsKKyAgICAgICAgICAgIC8vIENvbnRy
b2wgY2hhcmFjdGVycyBtdXN0IG5vdCByZW5kZXIgYXQgYWxsLgorICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IDB4MjA7ICsraSkKKyAgICAgICAgICAgICAgICBidWZmZXJbaV0g
PSB6ZXJvV2lkdGhTcGFjZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDB4N0Y7IGkg
PCAweEEwOyBpKyspCisgICAgICAgICAgICAgICAgYnVmZmVyW2ldID0gemVyb1dpZHRoU3BhY2U7
CisgICAgICAgICAgICBidWZmZXJbc29mdEh5cGhlbl0gPSB6ZXJvV2lkdGhTcGFjZTsKKworICAg
ICAgICAgICAgLy8gXG4sIFx0LCBhbmQgbm9uYnJlYWtpbmcgc3BhY2UgbXVzdCByZW5kZXIgYXMg
YSBzcGFjZS4KKyAgICAgICAgICAgIGJ1ZmZlclsoaW50KSdcbiddID0gJyAnOworICAgICAgICAg
ICAgYnVmZmVyWyhpbnQpJ1x0J10gPSAnICc7CisgICAgICAgICAgICBidWZmZXJbbm9CcmVha1Nw
YWNlXSA9ICcgJzsKKyAgICAgICAgfSBlbHNlIGlmIChzdGFydCA9PSAobGVmdFRvUmlnaHRNYXJr
ICYgfihHbHlwaFBhZ2U6OnNpemUgLSAxKSkpIHsKKyAgICAgICAgICAgIC8vIExSTSwgUkxNLCBM
UkUsIFJMRSwgWldOSiwgWldKLCBhbmQgUERGIG11c3Qgbm90IHJlbmRlciBhdCBhbGwuCisgICAg
ICAgICAgICBidWZmZXJbbGVmdFRvUmlnaHRNYXJrIC0gc3RhcnRdID0gemVyb1dpZHRoU3BhY2U7
CisgICAgICAgICAgICBidWZmZXJbcmlnaHRUb0xlZnRNYXJrIC0gc3RhcnRdID0gemVyb1dpZHRo
U3BhY2U7CisgICAgICAgICAgICBidWZmZXJbbGVmdFRvUmlnaHRFbWJlZCAtIHN0YXJ0XSA9IHpl
cm9XaWR0aFNwYWNlOworICAgICAgICAgICAgYnVmZmVyW3JpZ2h0VG9MZWZ0RW1iZWQgLSBzdGFy
dF0gPSB6ZXJvV2lkdGhTcGFjZTsKKyAgICAgICAgICAgIGJ1ZmZlcltsZWZ0VG9SaWdodE92ZXJy
aWRlIC0gc3RhcnRdID0gemVyb1dpZHRoU3BhY2U7CisgICAgICAgICAgICBidWZmZXJbcmlnaHRU
b0xlZnRPdmVycmlkZSAtIHN0YXJ0XSA9IHplcm9XaWR0aFNwYWNlOworICAgICAgICAgICAgYnVm
ZmVyW3plcm9XaWR0aE5vbkpvaW5lciAtIHN0YXJ0XSA9IHplcm9XaWR0aFNwYWNlOworICAgICAg
ICAgICAgYnVmZmVyW3plcm9XaWR0aEpvaW5lciAtIHN0YXJ0XSA9IHplcm9XaWR0aFNwYWNlOwor
ICAgICAgICAgICAgYnVmZmVyW3BvcERpcmVjdGlvbmFsRm9ybWF0dGluZyAtIHN0YXJ0XSA9IHpl
cm9XaWR0aFNwYWNlOworICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0ID09IChvYmplY3RSZXBsYWNl
bWVudENoYXJhY3RlciAmIH4oR2x5cGhQYWdlOjpzaXplIC0gMSkpKSB7CisgICAgICAgICAgICAv
LyBPYmplY3QgcmVwbGFjZW1lbnQgY2hhcmFjdGVyIG11c3Qgbm90IHJlbmRlciBhdCBhbGwuCisg
ICAgICAgICAgICBidWZmZXJbb2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXIgLSBzdGFydF0gPSB6
ZXJvV2lkdGhTcGFjZTsKKyAgICAgICAgfSBlbHNlIGlmIChzdGFydCA9PSAoemVyb1dpZHRoTm9C
cmVha1NwYWNlICYgfihHbHlwaFBhZ2U6OnNpemUgLSAxKSkpIHsKKyAgICAgICAgICAgIC8vIFpX
TkJTL0JPTSBtdXN0IG5vdCByZW5kZXIgYXQgYWxsLgorICAgICAgICAgICAgYnVmZmVyW3plcm9X
aWR0aE5vQnJlYWtTcGFjZSAtIHN0YXJ0XSA9IHplcm9XaWR0aFNwYWNlOworICAgICAgICB9Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgYnVmZmVyTGVuZ3RoID0gR2x5cGhQYWdlOjpzaXplICogMjsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdseXBoUGFnZTo6c2l6ZTsgaSsrKSB7
CisgICAgICAgICAgICBpbnQgYyA9IGkgKyBzdGFydDsKKyAgICAgICAgICAgIGJ1ZmZlcltpICog
Ml0gPSBVMTZfTEVBRChjKTsKKyAgICAgICAgICAgIGJ1ZmZlcltpICogMiArIDFdID0gVTE2X1RS
QUlMKGMpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gTm93IHRoYXQgd2UgaGF2ZSBhIGJ1
ZmZlciBmdWxsIG9mIGNoYXJhY3RlcnMsIHdlIHdhbnQgdG8gZ2V0IGJhY2sgYW4gYXJyYXkKKyAg
ICAvLyBvZiBnbHlwaCBpbmRpY2VzLiBUaGlzIHBhcnQgaW52b2x2ZXMgY2FsbGluZyBpbnRvIHRo
ZSBwbGF0Zm9ybS1zcGVjaWZpYworICAgIC8vIHJvdXRpbmUgb2Ygb3VyIGdseXBoIG1hcCBmb3Ig
YWN0dWFsbHkgZmlsbGluZyBpbiB0aGUgcGFnZSB3aXRoIHRoZSBnbHlwaHMuCisgICAgLy8gU3Vj
Y2VzcyBpcyBub3QgZ3VhcmFudGVlZC4gRm9yIGV4YW1wbGUsIFRpbWVzIGZhaWxzIHRvIGZpbGwg
cGFnZSAyNjAsIGdpdmluZyBnbHlwaCBkYXRhCisgICAgLy8gZm9yIG9ubHkgMTI4IG91dCBvZiAy
NTYgY2hhcmFjdGVycy4KKyAgICBSZWZQdHI8R2x5cGhQYWdlPiBnbHlwaFBhZ2U7CisgICAgaWYg
KEdseXBoUGFnZTo6bWF5VXNlTWl4ZWRGb250RGF0YVdoZW5GaWxsaW5nKGJ1ZmZlciwgYnVmZmVy
TGVuZ3RoLCBmb250RGF0YSkpCisgICAgICAgIGdseXBoUGFnZSA9IEdseXBoUGFnZTo6Y3JlYXRl
Rm9yTWl4ZWRGb250RGF0YSgpOworICAgIGVsc2UKKyAgICAgICAgZ2x5cGhQYWdlID0gR2x5cGhQ
YWdlOjpjcmVhdGVGb3JTaW5nbGVGb250RGF0YShmb250RGF0YSk7CisKKyAgICBib29sIGhhdmVH
bHlwaHMgPSBmaWxsR2x5cGhQYWdlKCpnbHlwaFBhZ2UsIDAsIEdseXBoUGFnZTo6c2l6ZSwgYnVm
ZmVyLCBidWZmZXJMZW5ndGgsIGZvbnREYXRhKTsKKyAgICBpZiAoIWhhdmVHbHlwaHMpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgZ2x5cGhQYWdlLT5zZXRJbW11dGFibGUoKTsKKyAg
ICByZXR1cm4gZ2x5cGhQYWdlOworfQorCitjb25zdCBHbHlwaFBhZ2UqIFNpbXBsZUZvbnREYXRh
OjpnbHlwaFBhZ2UodW5zaWduZWQgcGFnZU51bWJlcikgY29uc3QKK3sKKyAgICBpZiAocGFnZU51
bWJlciA9PSAwKSB7CisgICAgICAgIGlmICghbV9nbHlwaFBhZ2VaZXJvKQorICAgICAgICAgICAg
bV9nbHlwaFBhZ2VaZXJvID0gY3JlYXRlQW5kRmlsbEdseXBoUGFnZSgwLCB0aGlzKTsKKyAgICAg
ICAgcmV0dXJuIG1fZ2x5cGhQYWdlWmVyby5nZXQoKTsKKyAgICB9CisgICAgYXV0byBhZGRSZXN1
bHQgPSBtX2dseXBoUGFnZXMuYWRkKHBhZ2VOdW1iZXIsIG51bGxwdHIpOworICAgIGlmIChhZGRS
ZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGNy
ZWF0ZUFuZEZpbGxHbHlwaFBhZ2UocGFnZU51bWJlciwgdGhpcyk7CisKKyAgICByZXR1cm4gYWRk
UmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKK30KKworR2x5cGggU2ltcGxlRm9udERhdGE6
OmdseXBoRm9yQ2hhcmFjdGVyKFVDaGFyMzIgY2hhcmFjdGVyKSBjb25zdAoreworICAgIGF1dG8q
IHBhZ2UgPSBnbHlwaFBhZ2UoY2hhcmFjdGVyIC8gR2x5cGhQYWdlOjpzaXplKTsKKyAgICBpZiAo
IXBhZ2UpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBwYWdlLT5nbHlwaEF0KGNoYXJh
Y3RlciAlIEdseXBoUGFnZTo6c2l6ZSk7Cit9CisKK0dseXBoRGF0YSBTaW1wbGVGb250RGF0YTo6
Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgY2hhcmFjdGVyKSBjb25zdAoreworICAgIGF1
dG8qIHBhZ2UgPSBnbHlwaFBhZ2UoY2hhcmFjdGVyIC8gR2x5cGhQYWdlOjpzaXplKTsKKyAgICBp
ZiAoIXBhZ2UpCisgICAgICAgIHJldHVybiBHbHlwaERhdGEoKTsKKyAgICByZXR1cm4gcGFnZS0+
Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3Rlcik7Cit9CisKK1Bhc3NSZWZQdHI8U2ltcGxl
Rm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjp2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250RGF0
YSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKKyAgICAgICAgbV9kZXJp
dmVkRm9udERhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPERlcml2ZWRGb250RGF0YT4oaXNDdXN0b21G
b250KCkpOworICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEtPnZlcnRpY2FsUmlnaHRPcmllbnRh
dGlvbikgeworICAgICAgICBGb250UGxhdGZvcm1EYXRhIHZlcnRpY2FsUmlnaHRQbGF0Zm9ybURh
dGEobV9wbGF0Zm9ybURhdGEpOworICAgICAgICB2ZXJ0aWNhbFJpZ2h0UGxhdGZvcm1EYXRhLnNl
dE9yaWVudGF0aW9uKEhvcml6b250YWwpOworICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+dmVy
dGljYWxSaWdodE9yaWVudGF0aW9uID0gY3JlYXRlKHZlcnRpY2FsUmlnaHRQbGF0Zm9ybURhdGEs
IGlzQ3VzdG9tRm9udCgpLCBmYWxzZSwgdHJ1ZSk7CisgICAgfQorICAgIHJldHVybiBtX2Rlcml2
ZWRGb250RGF0YS0+dmVydGljYWxSaWdodE9yaWVudGF0aW9uOworfQorCitQYXNzUmVmUHRyPFNp
bXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6dXByaWdodE9yaWVudGF0aW9uRm9udERhdGEo
KSBjb25zdAoreworICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEpCisgICAgICAgIG1fZGVyaXZl
ZEZvbnREYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxEZXJpdmVkRm9udERhdGE+KGlzQ3VzdG9tRm9u
dCgpKTsKKyAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhLT51cHJpZ2h0T3JpZW50YXRpb24pCisg
ICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT51cHJpZ2h0T3JpZW50YXRpb24gPSBjcmVhdGUobV9w
bGF0Zm9ybURhdGEsIGlzQ3VzdG9tRm9udCgpLCBmYWxzZSwgdHJ1ZSk7CisgICAgcmV0dXJuIG1f
ZGVyaXZlZEZvbnREYXRhLT51cHJpZ2h0T3JpZW50YXRpb247Cit9CisKK1Bhc3NSZWZQdHI8U2lt
cGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250
RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKK3sKKyAgICBpZiAoIW1fZGVyaXZl
ZEZvbnREYXRhKQorICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8
RGVyaXZlZEZvbnREYXRhPihpc0N1c3RvbUZvbnQoKSk7CisgICAgaWYgKCFtX2Rlcml2ZWRGb250
RGF0YS0+c21hbGxDYXBzKQorICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzID0g
Y3JlYXRlU2NhbGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9uLCBzbWFsbENhcHNGb250U2l6ZU11
bHRpcGxpZXIpOworCisgICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHM7Cit9
CisKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjplbXBoYXNpc01h
cmtGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QK
K3sKKyAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQorICAgICAgICBtX2Rlcml2ZWRGb250RGF0
YSA9IHN0ZDo6bWFrZV91bmlxdWU8RGVyaXZlZEZvbnREYXRhPihpc0N1c3RvbUZvbnQoKSk7Cisg
ICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrKQorICAgICAgICBtX2Rlcml2
ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9udERlc2Ny
aXB0aW9uLCBlbXBoYXNpc01hcmtGb250U2l6ZU11bHRpcGxpZXIpOworCisgICAgcmV0dXJuIG1f
ZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcms7Cit9CisKK1Bhc3NSZWZQdHI8U2ltcGxlRm9u
dERhdGE+IFNpbXBsZUZvbnREYXRhOjpicm9rZW5JZGVvZ3JhcGhGb250RGF0YSgpIGNvbnN0Cit7
CisgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKKyAgICAgICAgbV9kZXJpdmVkRm9udERhdGEg
PSBzdGQ6Om1ha2VfdW5pcXVlPERlcml2ZWRGb250RGF0YT4oaXNDdXN0b21Gb250KCkpOworICAg
IGlmICghbV9kZXJpdmVkRm9udERhdGEtPmJyb2tlbklkZW9ncmFwaCkgeworICAgICAgICBtX2Rl
cml2ZWRGb250RGF0YS0+YnJva2VuSWRlb2dyYXBoID0gY3JlYXRlKG1fcGxhdGZvcm1EYXRhLCBp
c0N1c3RvbUZvbnQoKSwgZmFsc2UpOworICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+YnJva2Vu
SWRlb2dyYXBoLT5tX2lzQnJva2VuSWRlb2dyYXBoRmFsbGJhY2sgPSB0cnVlOworICAgIH0KKyAg
ICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPmJyb2tlbklkZW9ncmFwaDsKK30KKworUGFzc1Jl
ZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6Om5vblN5bnRoZXRpY0l0YWxpY0Zv
bnREYXRhKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQorICAgICAgICBt
X2Rlcml2ZWRGb250RGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8RGVyaXZlZEZvbnREYXRhPihpc0N1
c3RvbUZvbnQoKSk7CisgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+bm9uU3ludGhldGljSXRh
bGljKSB7CisgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEgbm9uU3ludGhldGljSXRhbGljRm9udFBs
YXRmb3JtRGF0YShtX3BsYXRmb3JtRGF0YSk7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgICAg
IG5vblN5bnRoZXRpY0l0YWxpY0ZvbnRQbGF0Zm9ybURhdGEubV9zeW50aGV0aWNPYmxpcXVlID0g
ZmFsc2U7CisjZW5kaWYKKyAgICAgICAgbV9kZXJpdmVkRm9udERhdGEtPm5vblN5bnRoZXRpY0l0
YWxpYyA9IGNyZWF0ZShub25TeW50aGV0aWNJdGFsaWNGb250UGxhdGZvcm1EYXRhLCBpc0N1c3Rv
bUZvbnQoKSk7CisgICAgfQorICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+bm9uU3ludGhl
dGljSXRhbGljOworfQorCisjaWZuZGVmIE5ERUJVRworU3RyaW5nIFNpbXBsZUZvbnREYXRhOjpk
ZXNjcmlwdGlvbigpIGNvbnN0Cit7CisgICAgaWYgKGlzU1ZHRm9udCgpKQorICAgICAgICByZXR1
cm4gIltTVkcgZm9udF0iOworICAgIGlmIChpc0N1c3RvbUZvbnQoKSkKKyAgICAgICAgcmV0dXJu
ICJbY3VzdG9tIGZvbnRdIjsKKworICAgIHJldHVybiBwbGF0Zm9ybURhdGEoKS5kZXNjcmlwdGlv
bigpOworfQorI2VuZGlmCisKK2NvbnN0IE9wZW5UeXBlTWF0aERhdGEqIFNpbXBsZUZvbnREYXRh
OjptYXRoRGF0YSgpIGNvbnN0Cit7CisgICAgaWYgKG1faXNMb2FkaW5nKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICBpZiAoIW1fbWF0aERhdGEpIHsKKyAgICAgICAgbV9tYXRoRGF0YSA9
IE9wZW5UeXBlTWF0aERhdGE6OmNyZWF0ZShtX3BsYXRmb3JtRGF0YSk7CisgICAgICAgIGlmICgh
bV9tYXRoRGF0YS0+aGFzTWF0aERhdGEoKSkKKyAgICAgICAgICAgIG1fbWF0aERhdGEuY2xlYXIo
KTsKKyAgICB9CisgICAgcmV0dXJuIG1fbWF0aERhdGEuZ2V0KCk7Cit9CisKK1NpbXBsZUZvbnRE
YXRhOjpEZXJpdmVkRm9udERhdGE6On5EZXJpdmVkRm9udERhdGEoKQoreworfQorCitQYXNzUmVm
UHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlU2NhbGVkRm9udERhdGEo
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNjYWxlRmFjdG9y
KSBjb25zdAoreworICAgIGlmIChpc1NWR0ZvbnQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICByZXR1cm4gcGxhdGZvcm1DcmVhdGVTY2FsZWRGb250RGF0YShmb250RGVzY3JpcHRp
b24sIHNjYWxlRmFjdG9yKTsKK30KKworYm9vbCBTaW1wbGVGb250RGF0YTo6YXBwbHlUcmFuc2Zv
cm1zKEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNl
cywgc2l6ZV90IGdseXBoQ291bnQsIFR5cGVzZXR0aW5nRmVhdHVyZXMgdHlwZXNldHRpbmdGZWF0
dXJlcykgY29uc3QKK3sKKyAgICAvLyBXZSBuZWVkIHRvIGhhbmRsZSB0cmFuc2Zvcm1zIG9uIFNW
RyBmb250cyBpbnRlcm5hbGx5LCBzaW5jZSB0aGV5IGFyZSByZW5kZXJlZCBpbnRlcm5hbGx5Lgor
ICAgIEFTU0VSVCghaXNTVkdGb250KCkpOworI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JN
KE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+IDEwODApCisgICAgQ1RG
b250VHJhbnNmb3JtT3B0aW9ucyBvcHRpb25zID0gKHR5cGVzZXR0aW5nRmVhdHVyZXMgJiBLZXJu
aW5nID8ga0NURm9udFRyYW5zZm9ybUFwcGx5UG9zaXRpb25pbmcgOiAwKSB8ICh0eXBlc2V0dGlu
Z0ZlYXR1cmVzICYgTGlnYXR1cmVzID8ga0NURm9udFRyYW5zZm9ybUFwcGx5U2hhcGluZyA6IDAp
OworICAgIHJldHVybiBDVEZvbnRUcmFuc2Zvcm1HbHlwaHMobV9wbGF0Zm9ybURhdGEuY3RGb250
KCksIGdseXBocywgcmVpbnRlcnByZXRfY2FzdDxDR1NpemUqPihhZHZhbmNlcyksIGdseXBoQ291
bnQsIG9wdGlvbnMpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZ2x5cGhzKTsKKyAgICBVTlVT
RURfUEFSQU0oYWR2YW5jZXMpOworICAgIFVOVVNFRF9QQVJBTShnbHlwaENvdW50KTsKKyAgICBV
TlVTRURfUEFSQU0odHlwZXNldHRpbmdGZWF0dXJlcyk7CisgICAgcmV0dXJuIGZhbHNlOworI2Vu
ZGlmCit9CisKKy8vIEZvbnREYXRhcyBhcmUgbm90IHJlZmNvdW50ZWQgdG8gYXZvaWQgY3ljbGVz
LgordHlwZWRlZiBIYXNoTWFwPHN0ZDo6cGFpcjxVQ2hhcjMyLCB1bnNpZ25lZD4sIFNpbXBsZUZv
bnREYXRhKj4gQ2hhcmFjdGVyRmFsbGJhY2tNYXA7Cit0eXBlZGVmIEhhc2hNYXA8Y29uc3QgU2lt
cGxlRm9udERhdGEqLCBDaGFyYWN0ZXJGYWxsYmFja01hcD4gU3lzdGVtRmFsbGJhY2tDYWNoZTsK
Kworc3RhdGljIFN5c3RlbUZhbGxiYWNrQ2FjaGUmIHN5c3RlbUZhbGxiYWNrQ2FjaGUoKQorewor
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTeXN0ZW1GYWxsYmFja0NhY2hlPiBtYXA7CisgICAg
cmV0dXJuIG1hcC5nZXQoKTsKK30KKworUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250
RGF0YTo6c3lzdGVtRmFsbGJhY2tGb250RGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGNoYXJhY3Rl
ciwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgYm9vbCBpc0ZvclBsYXRmb3Jt
Rm9udCkgY29uc3QKK3sKKyAgICBhdXRvIGZvbnRBZGRSZXN1bHQgPSBzeXN0ZW1GYWxsYmFja0Nh
Y2hlKCkuYWRkKHRoaXMsIENoYXJhY3RlckZhbGxiYWNrTWFwKCkpOworCisgICAgYXV0byBrZXkg
PSBzdGQ6Om1ha2VfcGFpcihjaGFyYWN0ZXIsIGlzRm9yUGxhdGZvcm1Gb250KTsKKyAgICBhdXRv
IGNoYXJhY3RlckFkZFJlc3VsdCA9IGZvbnRBZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFkZChr
ZXksIG51bGxwdHIpOworCisgICAgU2ltcGxlRm9udERhdGEqJiBmYWxsYmFja0ZvbnREYXRhID0g
Y2hhcmFjdGVyQWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKKworICAgIGlmICghZmFsbGJhY2tG
b250RGF0YSkgeworICAgICAgICBVQ2hhciBjb2RlVW5pdHNbMl07CisgICAgICAgIGludCBjb2Rl
VW5pdHNMZW5ndGg7CisgICAgICAgIGlmIChVX0lTX0JNUChjaGFyYWN0ZXIpKSB7CisgICAgICAg
ICAgICBjb2RlVW5pdHNbMF0gPSBGb250Q2FzY2FkZTo6bm9ybWFsaXplU3BhY2VzKGNoYXJhY3Rl
cik7CisgICAgICAgICAgICBjb2RlVW5pdHNMZW5ndGggPSAxOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgY29kZVVuaXRzWzBdID0gVTE2X0xFQUQoY2hhcmFjdGVyKTsKKyAgICAgICAg
ICAgIGNvZGVVbml0c1sxXSA9IFUxNl9UUkFJTChjaGFyYWN0ZXIpOworICAgICAgICAgICAgY29k
ZVVuaXRzTGVuZ3RoID0gMjsKKyAgICAgICAgfQorCisgICAgICAgIGZhbGxiYWNrRm9udERhdGEg
PSBmb250Q2FjaGUoKS5zeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoZGVzY3JpcHRpb24sIHRo
aXMsIGlzRm9yUGxhdGZvcm1Gb250LCBjb2RlVW5pdHMsIGNvZGVVbml0c0xlbmd0aCkuZ2V0KCk7
CisgICAgICAgIGlmIChmYWxsYmFja0ZvbnREYXRhKQorICAgICAgICAgICAgZmFsbGJhY2tGb250
RGF0YS0+bV9pc1VzZWRJblN5c3RlbUZhbGxiYWNrQ2FjaGUgPSB0cnVlOworICAgIH0KKworICAg
IHJldHVybiBmYWxsYmFja0ZvbnREYXRhOworfQorCit2b2lkIFNpbXBsZUZvbnREYXRhOjpyZW1v
dmVGcm9tU3lzdGVtRmFsbGJhY2tDYWNoZSgpCit7CisgICAgc3lzdGVtRmFsbGJhY2tDYWNoZSgp
LnJlbW92ZSh0aGlzKTsKKworICAgIGlmICghbV9pc1VzZWRJblN5c3RlbUZhbGxiYWNrQ2FjaGUp
CisgICAgICAgIHJldHVybjsKKworICAgIGZvciAoYXV0byYgY2hhcmFjdGVyTWFwIDogc3lzdGVt
RmFsbGJhY2tDYWNoZSgpLnZhbHVlcygpKSB7CisgICAgICAgIFZlY3RvcjxzdGQ6OnBhaXI8VUNo
YXIzMiwgdW5zaWduZWQ+LCA1MTI+IHRvUmVtb3ZlOworICAgICAgICBmb3IgKGF1dG8mIGVudHJ5
IDogY2hhcmFjdGVyTWFwKSB7CisgICAgICAgICAgICBpZiAoZW50cnkudmFsdWUgPT0gdGhpcykK
KyAgICAgICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQoZW50cnkua2V5KTsKKyAgICAgICAgfQor
ICAgICAgICBmb3IgKGF1dG8mIGtleSA6IHRvUmVtb3ZlKQorICAgICAgICAgICAgY2hhcmFjdGVy
TWFwLnJlbW92ZShrZXkpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAJKHdvcmtpbmcgY29w
eSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisjaW5jbHVkZSAiRm9udC5oIgogCiAjaWYgUExBVEZP
Uk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJ
UkVEID4gMTA4MCkKICNpbmNsdWRlICJDb3JlVGV4dFNQSS5oIgpAQCAtNTAsNyArNTAsNyBAQCB1
bnNpZ25lZCBHbHlwaFBhZ2U6OnNfY291bnQgPSAwOwogY29uc3QgZmxvYXQgc21hbGxDYXBzRm9u
dFNpemVNdWx0aXBsaWVyID0gMC43ZjsKIGNvbnN0IGZsb2F0IGVtcGhhc2lzTWFya0ZvbnRTaXpl
TXVsdGlwbGllciA9IDAuNWY7CiAKLVNpbXBsZUZvbnREYXRhOjpTaW1wbGVGb250RGF0YShjb25z
dCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEsIGJvb2wgaXNDdXN0b21Gb250LCBib29s
IGlzTG9hZGluZywgYm9vbCBpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKQorRm9udDo6Rm9udChj
b25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEsIGJvb2wgaXNDdXN0b21Gb250LCBi
b29sIGlzTG9hZGluZywgYm9vbCBpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKQogICAgIDogbV9t
YXhDaGFyV2lkdGgoLTEpCiAgICAgLCBtX2F2Z0NoYXJXaWR0aCgtMSkKICAgICAsIG1fcGxhdGZv
cm1EYXRhKHBsYXRmb3JtRGF0YSkKQEAgLTc2LDcgKzc2LDcgQEAgU2ltcGxlRm9udERhdGE6OlNp
bXBsZUZvbnREYXRhKGNvbnN0IEZvbgogI2VuZGlmCiB9CiAKLVNpbXBsZUZvbnREYXRhOjpTaW1w
bGVGb250RGF0YShzdGQ6OnVuaXF1ZV9wdHI8U1ZHRGF0YT4gc3ZnRGF0YSwgZmxvYXQgZm9udFNp
emUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpCitGb250OjpGb250
KHN0ZDo6dW5pcXVlX3B0cjxTVkdEYXRhPiBzdmdEYXRhLCBmbG9hdCBmb250U2l6ZSwgYm9vbCBz
eW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYykKICAgICA6IG1fcGxhdGZvcm1EYXRh
KEZvbnRQbGF0Zm9ybURhdGEoZm9udFNpemUsIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxp
YykpCiAgICAgLCBtX3N2Z0RhdGEoV1RGOjptb3ZlKHN2Z0RhdGEpKQogICAgICwgbV90cmVhdEFz
Rml4ZWRQaXRjaChmYWxzZSkKQEAgLTkzLDExICs5MywxMSBAQCBTaW1wbGVGb250RGF0YTo6U2lt
cGxlRm9udERhdGEoc3RkOjp1bmlxCiAgICAgLCBtX3Nob3VsZE5vdEJlVXNlZEZvckFyYWJpYyhm
YWxzZSkKICNlbmRpZgogewotICAgIG1fc3ZnRGF0YS0+aW5pdGlhbGl6ZUZvbnREYXRhKHRoaXMs
IGZvbnRTaXplKTsKKyAgICBtX3N2Z0RhdGEtPmluaXRpYWxpemVGb250KHRoaXMsIGZvbnRTaXpl
KTsKIH0KIAogLy8gRXN0aW1hdGVzIG9mIGF2Z0NoYXJXaWR0aCBhbmQgbWF4Q2hhcldpZHRoIGZv
ciBwbGF0Zm9ybXMgdGhhdCBkb24ndCBzdXBwb3J0IGFjY2Vzc2luZyB0aGVzZSB2YWx1ZXMgZnJv
bSB0aGUgZm9udC4KLXZvaWQgU2ltcGxlRm9udERhdGE6OmluaXRDaGFyV2lkdGhzKCkKK3ZvaWQg
Rm9udDo6aW5pdENoYXJXaWR0aHMoKQogewogICAgIGF1dG8qIGdseXBoUGFnZVplcm8gPSBnbHlw
aFBhZ2UoMCk7CiAKQEAgLTExNyw3ICsxMTcsNyBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjppbml0
Q2hhcldpZHRocygpCiAgICAgICAgIG1fbWF4Q2hhcldpZHRoID0gc3RkOjptYXgobV9hdmdDaGFy
V2lkdGgsIG1fZm9udE1ldHJpY3MuZmxvYXRBc2NlbnQoKSk7CiB9CiAKLXZvaWQgU2ltcGxlRm9u
dERhdGE6OnBsYXRmb3JtR2x5cGhJbml0KCkKK3ZvaWQgRm9udDo6cGxhdGZvcm1HbHlwaEluaXQo
KQogewogICAgIGF1dG8qIGdseXBoUGFnZVplcm8gPSBnbHlwaFBhZ2UoMCk7CiAgICAgaWYgKCFn
bHlwaFBhZ2VaZXJvKSB7CkBAIC0xNDcsMzcgKzE0NywzNyBAQCB2b2lkIFNpbXBsZUZvbnREYXRh
OjpwbGF0Zm9ybUdseXBoSW5pdCgpCiAKICAgICAvLyBGb3JjZSB0aGUgZ2x5cGggZm9yIFpFUk8g
V0lEVEggU1BBQ0UgdG8gaGF2ZSB6ZXJvIHdpZHRoLCB1bmxlc3MgaXQgaXMgc2hhcmVkIHdpdGgg
U1BBQ0UuCiAgICAgLy8gSGVsdmV0aWNhIGlzIGFuIGV4YW1wbGUgb2YgYSBub24temVybyB3aWR0
aCBaRVJPIFdJRFRIIFNQQUNFIGdseXBoLgotICAgIC8vIFNlZSA8aHR0cDovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMxNzg+IGFuZCBTaW1wbGVGb250RGF0YTo6aXNaZXJvV2lk
dGhTcGFjZUdseXBoKCkKKyAgICAvLyBTZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEzMTc4PiBhbmQgRm9udDo6aXNaZXJvV2lkdGhTcGFjZUdseXBoKCkKICAgICBp
ZiAobV96ZXJvV2lkdGhTcGFjZUdseXBoID09IG1fc3BhY2VHbHlwaCkKICAgICAgICAgbV96ZXJv
V2lkdGhTcGFjZUdseXBoID0gMDsKIH0KIAotU2ltcGxlRm9udERhdGE6On5TaW1wbGVGb250RGF0
YSgpCitGb250Ojp+Rm9udCgpCiB7CiAgICAgcmVtb3ZlRnJvbVN5c3RlbUZhbGxiYWNrQ2FjaGUo
KTsKIH0KIAotc3RhdGljIGJvb2wgZmlsbEdseXBoUGFnZShHbHlwaFBhZ2UmIHBhZ2VUb0ZpbGws
IHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25l
ZCBidWZmZXJMZW5ndGgsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSkKK3N0YXRpYyBi
b29sIGZpbGxHbHlwaFBhZ2UoR2x5cGhQYWdlJiBwYWdlVG9GaWxsLCB1bnNpZ25lZCBvZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBj
b25zdCBGb250KiBmb250KQogewogI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0gICAgaWYgKGF1dG8q
IHN2Z0RhdGEgPSBmb250RGF0YS0+c3ZnRGF0YSgpKQotICAgICAgICByZXR1cm4gc3ZnRGF0YS0+
ZmlsbFNWR0dseXBoUGFnZSgmcGFnZVRvRmlsbCwgb2Zmc2V0LCBsZW5ndGgsIGJ1ZmZlciwgYnVm
ZmVyTGVuZ3RoLCBmb250RGF0YSk7CisgICAgaWYgKGF1dG8qIHN2Z0RhdGEgPSBmb250LT5zdmdE
YXRhKCkpCisgICAgICAgIHJldHVybiBzdmdEYXRhLT5maWxsU1ZHR2x5cGhQYWdlKCZwYWdlVG9G
aWxsLCBvZmZzZXQsIGxlbmd0aCwgYnVmZmVyLCBidWZmZXJMZW5ndGgsIGZvbnQpOwogI2VuZGlm
Ci0gICAgYm9vbCBoYXNHbHlwaHMgPSBwYWdlVG9GaWxsLmZpbGwob2Zmc2V0LCBsZW5ndGgsIGJ1
ZmZlciwgYnVmZmVyTGVuZ3RoLCBmb250RGF0YSk7CisgICAgYm9vbCBoYXNHbHlwaHMgPSBwYWdl
VG9GaWxsLmZpbGwob2Zmc2V0LCBsZW5ndGgsIGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCBmb250KTsK
ICNpZiBFTkFCTEUoT1BFTlRZUEVfVkVSVElDQUwpCi0gICAgaWYgKGhhc0dseXBocyAmJiBmb250
RGF0YS0+dmVydGljYWxEYXRhKCkpCi0gICAgICAgIGZvbnREYXRhLT52ZXJ0aWNhbERhdGEoKS0+
c3Vic3RpdHV0ZVdpdGhWZXJ0aWNhbEdseXBocyhmb250RGF0YSwgJnBhZ2VUb0ZpbGwsIG9mZnNl
dCwgbGVuZ3RoKTsKKyAgICBpZiAoaGFzR2x5cGhzICYmIGZvbnQtPnZlcnRpY2FsRGF0YSgpKQor
ICAgICAgICBmb250LT52ZXJ0aWNhbERhdGEoKS0+c3Vic3RpdHV0ZVdpdGhWZXJ0aWNhbEdseXBo
cyhmb250LCAmcGFnZVRvRmlsbCwgb2Zmc2V0LCBsZW5ndGgpOwogI2VuZGlmCiAgICAgcmV0dXJu
IGhhc0dseXBoczsKIH0KIAotc3RhdGljIFJlZlB0cjxHbHlwaFBhZ2U+IGNyZWF0ZUFuZEZpbGxH
bHlwaFBhZ2UodW5zaWduZWQgcGFnZU51bWJlciwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnRE
YXRhKQorc3RhdGljIFJlZlB0cjxHbHlwaFBhZ2U+IGNyZWF0ZUFuZEZpbGxHbHlwaFBhZ2UodW5z
aWduZWQgcGFnZU51bWJlciwgY29uc3QgRm9udCogZm9udCkKIHsKICNpZiBQTEFURk9STShJT1Mp
CiAgICAgLy8gRklYTUU6IFRpbWVzIE5ldyBSb21hbiBjb250YWlucyBBcmFiaWMgZ2x5cGhzLCBi
dXQgQ29yZSBUZXh0IGRvZXNuJ3Qga25vdyBob3cgdG8gc2hhcGUgdGhlbS4gU2VlIDxyZGFyOi8v
cHJvYmxlbS85ODIzOTc1Pi4KLSAgICAvLyBPbmNlIHdlIGhhdmUgdGhlIGZpeCBmb3IgPHJkYXI6
Ly9wcm9ibGVtLzk4MjM5NzU+IHRoZW4gcmVtb3ZlIHRoaXMgY29kZSB0b2dldGhlciB3aXRoIFNp
bXBsZUZvbnREYXRhOjpzaG91bGROb3RCZVVzZWRGb3JBcmFiaWMoKQorICAgIC8vIE9uY2Ugd2Ug
aGF2ZSB0aGUgZml4IGZvciA8cmRhcjovL3Byb2JsZW0vOTgyMzk3NT4gdGhlbiByZW1vdmUgdGhp
cyBjb2RlIHRvZ2V0aGVyIHdpdGggRm9udDo6c2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKCkKICAg
ICAvLyBpbiA8cmRhcjovL3Byb2JsZW0vMTIwOTY4MzU+LgotICAgIGlmIChwYWdlTnVtYmVyID09
IDYgJiYgZm9udERhdGEtPnNob3VsZE5vdEJlVXNlZEZvckFyYWJpYygpKQorICAgIGlmIChwYWdl
TnVtYmVyID09IDYgJiYgZm9udC0+c2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKCkpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogI2VuZGlmCiAKQEAgLTIzNSwxMiArMjM1LDEyIEBAIHN0YXRpYyBS
ZWZQdHI8R2x5cGhQYWdlPiBjcmVhdGVBbmRGaWxsR2wKICAgICAvLyBTdWNjZXNzIGlzIG5vdCBn
dWFyYW50ZWVkLiBGb3IgZXhhbXBsZSwgVGltZXMgZmFpbHMgdG8gZmlsbCBwYWdlIDI2MCwgZ2l2
aW5nIGdseXBoIGRhdGEKICAgICAvLyBmb3Igb25seSAxMjggb3V0IG9mIDI1NiBjaGFyYWN0ZXJz
LgogICAgIFJlZlB0cjxHbHlwaFBhZ2U+IGdseXBoUGFnZTsKLSAgICBpZiAoR2x5cGhQYWdlOjpt
YXlVc2VNaXhlZEZvbnREYXRhV2hlbkZpbGxpbmcoYnVmZmVyLCBidWZmZXJMZW5ndGgsIGZvbnRE
YXRhKSkKLSAgICAgICAgZ2x5cGhQYWdlID0gR2x5cGhQYWdlOjpjcmVhdGVGb3JNaXhlZEZvbnRE
YXRhKCk7CisgICAgaWYgKEdseXBoUGFnZTo6bWF5VXNlTWl4ZWRGb250c1doZW5GaWxsaW5nKGJ1
ZmZlciwgYnVmZmVyTGVuZ3RoLCBmb250KSkKKyAgICAgICAgZ2x5cGhQYWdlID0gR2x5cGhQYWdl
OjpjcmVhdGVGb3JNaXhlZEZvbnRzKCk7CiAgICAgZWxzZQotICAgICAgICBnbHlwaFBhZ2UgPSBH
bHlwaFBhZ2U6OmNyZWF0ZUZvclNpbmdsZUZvbnREYXRhKGZvbnREYXRhKTsKKyAgICAgICAgZ2x5
cGhQYWdlID0gR2x5cGhQYWdlOjpjcmVhdGVGb3JTaW5nbGVGb250KGZvbnQpOwogCi0gICAgYm9v
bCBoYXZlR2x5cGhzID0gZmlsbEdseXBoUGFnZSgqZ2x5cGhQYWdlLCAwLCBHbHlwaFBhZ2U6OnNp
emUsIGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCBmb250RGF0YSk7CisgICAgYm9vbCBoYXZlR2x5cGhz
ID0gZmlsbEdseXBoUGFnZSgqZ2x5cGhQYWdlLCAwLCBHbHlwaFBhZ2U6OnNpemUsIGJ1ZmZlciwg
YnVmZmVyTGVuZ3RoLCBmb250KTsKICAgICBpZiAoIWhhdmVHbHlwaHMpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCkBAIC0yNDgsNyArMjQ4LDcgQEAgc3RhdGljIFJlZlB0cjxHbHlwaFBhZ2U+
IGNyZWF0ZUFuZEZpbGxHbAogICAgIHJldHVybiBnbHlwaFBhZ2U7CiB9CiAKLWNvbnN0IEdseXBo
UGFnZSogU2ltcGxlRm9udERhdGE6OmdseXBoUGFnZSh1bnNpZ25lZCBwYWdlTnVtYmVyKSBjb25z
dAorY29uc3QgR2x5cGhQYWdlKiBGb250OjpnbHlwaFBhZ2UodW5zaWduZWQgcGFnZU51bWJlcikg
Y29uc3QKIHsKICAgICBpZiAocGFnZU51bWJlciA9PSAwKSB7CiAgICAgICAgIGlmICghbV9nbHlw
aFBhZ2VaZXJvKQpAQCAtMjYyLDcgKzI2Miw3IEBAIGNvbnN0IEdseXBoUGFnZSogU2ltcGxlRm9u
dERhdGE6OmdseXBoUGEKICAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQo
KTsKIH0KIAotR2x5cGggU2ltcGxlRm9udERhdGE6OmdseXBoRm9yQ2hhcmFjdGVyKFVDaGFyMzIg
Y2hhcmFjdGVyKSBjb25zdAorR2x5cGggRm9udDo6Z2x5cGhGb3JDaGFyYWN0ZXIoVUNoYXIzMiBj
aGFyYWN0ZXIpIGNvbnN0CiB7CiAgICAgYXV0byogcGFnZSA9IGdseXBoUGFnZShjaGFyYWN0ZXIg
LyBHbHlwaFBhZ2U6OnNpemUpOwogICAgIGlmICghcGFnZSkKQEAgLTI3MCw3ICsyNzAsNyBAQCBH
bHlwaCBTaW1wbGVGb250RGF0YTo6Z2x5cGhGb3JDaGFyYWN0ZXIoCiAgICAgcmV0dXJuIHBhZ2Ut
PmdseXBoQXQoY2hhcmFjdGVyICUgR2x5cGhQYWdlOjpzaXplKTsKIH0KIAotR2x5cGhEYXRhIFNp
bXBsZUZvbnREYXRhOjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjaGFyYWN0ZXIpIGNv
bnN0CitHbHlwaERhdGEgRm9udDo6Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgY2hhcmFj
dGVyKSBjb25zdAogewogICAgIGF1dG8qIHBhZ2UgPSBnbHlwaFBhZ2UoY2hhcmFjdGVyIC8gR2x5
cGhQYWdlOjpzaXplKTsKICAgICBpZiAoIXBhZ2UpCkBAIC0yNzgsNyArMjc4LDcgQEAgR2x5cGhE
YXRhIFNpbXBsZUZvbnREYXRhOjpnbHlwaERhdGFGb3JDaAogICAgIHJldHVybiBwYWdlLT5nbHlw
aERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyKTsKIH0KIAotUGFzc1JlZlB0cjxTaW1wbGVGb250
RGF0YT4gU2ltcGxlRm9udERhdGE6OnZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbkZvbnREYXRhKCkg
Y29uc3QKK1Bhc3NSZWZQdHI8Rm9udD4gRm9udDo6dmVydGljYWxSaWdodE9yaWVudGF0aW9uRm9u
dCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKICAgICAgICAgbV9kZXJp
dmVkRm9udERhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPERlcml2ZWRGb250RGF0YT4oaXNDdXN0b21G
b250KCkpOwpAQCAtMjkwLDcgKzI5MCw3IEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNp
bXBsZUZvbnREYXQKICAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPnZlcnRpY2FsUmlnaHRP
cmllbnRhdGlvbjsKIH0KIAotUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERh
dGE6OnVwcmlnaHRPcmllbnRhdGlvbkZvbnREYXRhKCkgY29uc3QKK1Bhc3NSZWZQdHI8Rm9udD4g
Rm9udDo6dXByaWdodE9yaWVudGF0aW9uRm9udCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2Rlcml2
ZWRGb250RGF0YSkKICAgICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBzdGQ6Om1ha2VfdW5pcXVl
PERlcml2ZWRGb250RGF0YT4oaXNDdXN0b21Gb250KCkpOwpAQCAtMjk5LDI3ICsyOTksMjcgQEAg
UGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdAogICAgIHJldHVybiBtX2Rl
cml2ZWRGb250RGF0YS0+dXByaWdodE9yaWVudGF0aW9uOwogfQogCi1QYXNzUmVmUHRyPFNpbXBs
ZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6c21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9udERl
c2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0CitQYXNzUmVmUHRyPEZvbnQ+IEZvbnQ6
OnNtYWxsQ2Fwc0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNv
bnN0CiB7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKICAgICAgICAgbV9kZXJpdmVkRm9u
dERhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPERlcml2ZWRGb250RGF0YT4oaXNDdXN0b21Gb250KCkp
OwogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2FwcykKLSAgICAgICAgbV9kZXJp
dmVkRm9udERhdGEtPnNtYWxsQ2FwcyA9IGNyZWF0ZVNjYWxlZEZvbnREYXRhKGZvbnREZXNjcmlw
dGlvbiwgc21hbGxDYXBzRm9udFNpemVNdWx0aXBsaWVyKTsKKyAgICAgICAgbV9kZXJpdmVkRm9u
dERhdGEtPnNtYWxsQ2FwcyA9IGNyZWF0ZVNjYWxlZEZvbnQoZm9udERlc2NyaXB0aW9uLCBzbWFs
bENhcHNGb250U2l6ZU11bHRpcGxpZXIpOwogCiAgICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRh
LT5zbWFsbENhcHM7CiB9CiAKLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnRE
YXRhOjplbXBoYXNpc01hcmtGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNj
cmlwdGlvbikgY29uc3QKK1Bhc3NSZWZQdHI8Rm9udD4gRm9udDo6ZW1waGFzaXNNYXJrRm9udChj
b25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKIHsKICAgICBpZiAo
IW1fZGVyaXZlZEZvbnREYXRhKQogICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IHN0ZDo6bWFr
ZV91bmlxdWU8RGVyaXZlZEZvbnREYXRhPihpc0N1c3RvbUZvbnQoKSk7CiAgICAgaWYgKCFtX2Rl
cml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrKQotICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+
ZW1waGFzaXNNYXJrID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9uLCBlbXBo
YXNpc01hcmtGb250U2l6ZU11bHRpcGxpZXIpOworICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+
ZW1waGFzaXNNYXJrID0gY3JlYXRlU2NhbGVkRm9udChmb250RGVzY3JpcHRpb24sIGVtcGhhc2lz
TWFya0ZvbnRTaXplTXVsdGlwbGllcik7CiAKICAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEt
PmVtcGhhc2lzTWFyazsKIH0KIAotUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9u
dERhdGE6OmJyb2tlbklkZW9ncmFwaEZvbnREYXRhKCkgY29uc3QKK1Bhc3NSZWZQdHI8Rm9udD4g
Rm9udDo6YnJva2VuSWRlb2dyYXBoRm9udCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2Rlcml2ZWRG
b250RGF0YSkKICAgICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPERl
cml2ZWRGb250RGF0YT4oaXNDdXN0b21Gb250KCkpOwpAQCAtMzMwLDcgKzMzMCw3IEBAIFBhc3NS
ZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXQKICAgICByZXR1cm4gbV9kZXJpdmVk
Rm9udERhdGEtPmJyb2tlbklkZW9ncmFwaDsKIH0KIAotUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0
YT4gU2ltcGxlRm9udERhdGE6Om5vblN5bnRoZXRpY0l0YWxpY0ZvbnREYXRhKCkgY29uc3QKK1Bh
c3NSZWZQdHI8Rm9udD4gRm9udDo6bm9uU3ludGhldGljSXRhbGljRm9udCgpIGNvbnN0CiB7CiAg
ICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKICAgICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBz
dGQ6Om1ha2VfdW5pcXVlPERlcml2ZWRGb250RGF0YT4oaXNDdXN0b21Gb250KCkpOwpAQCAtMzQ1
LDcgKzM0NSw3IEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXQKIH0K
IAogI2lmbmRlZiBOREVCVUcKLVN0cmluZyBTaW1wbGVGb250RGF0YTo6ZGVzY3JpcHRpb24oKSBj
b25zdAorU3RyaW5nIEZvbnQ6OmRlc2NyaXB0aW9uKCkgY29uc3QKIHsKICAgICBpZiAoaXNTVkdG
b250KCkpCiAgICAgICAgIHJldHVybiAiW1NWRyBmb250XSI7CkBAIC0zNTYsNyArMzU2LDcgQEAg
U3RyaW5nIFNpbXBsZUZvbnREYXRhOjpkZXNjcmlwdGlvbigpIGNvbgogfQogI2VuZGlmCiAKLWNv
bnN0IE9wZW5UeXBlTWF0aERhdGEqIFNpbXBsZUZvbnREYXRhOjptYXRoRGF0YSgpIGNvbnN0Citj
b25zdCBPcGVuVHlwZU1hdGhEYXRhKiBGb250OjptYXRoRGF0YSgpIGNvbnN0CiB7CiAgICAgaWYg
KG1faXNMb2FkaW5nKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTM2OCwxOSArMzY4LDE5
IEBAIGNvbnN0IE9wZW5UeXBlTWF0aERhdGEqIFNpbXBsZUZvbnREYXRhOjoKICAgICByZXR1cm4g
bV9tYXRoRGF0YS5nZXQoKTsKIH0KIAotU2ltcGxlRm9udERhdGE6OkRlcml2ZWRGb250RGF0YTo6
fkRlcml2ZWRGb250RGF0YSgpCitGb250OjpEZXJpdmVkRm9udERhdGE6On5EZXJpdmVkRm9udERh
dGEoKQogewogfQogCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6
Y3JlYXRlU2NhbGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24sIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAorUGFzc1JlZlB0cjxGb250PiBGb250OjpjcmVh
dGVTY2FsZWRGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9h
dCBzY2FsZUZhY3RvcikgY29uc3QKIHsKICAgICBpZiAoaXNTVkdGb250KCkpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIHBsYXRmb3JtQ3JlYXRlU2NhbGVkRm9udERhdGEo
Zm9udERlc2NyaXB0aW9uLCBzY2FsZUZhY3Rvcik7CisgICAgcmV0dXJuIHBsYXRmb3JtQ3JlYXRl
U2NhbGVkRm9udChmb250RGVzY3JpcHRpb24sIHNjYWxlRmFjdG9yKTsKIH0KIAotYm9vbCBTaW1w
bGVGb250RGF0YTo6YXBwbHlUcmFuc2Zvcm1zKEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgR2x5
cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgc2l6ZV90IGdseXBoQ291bnQsIFR5cGVzZXR0aW5n
RmVhdHVyZXMgdHlwZXNldHRpbmdGZWF0dXJlcykgY29uc3QKK2Jvb2wgRm9udDo6YXBwbHlUcmFu
c2Zvcm1zKEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZh
bmNlcywgc2l6ZV90IGdseXBoQ291bnQsIFR5cGVzZXR0aW5nRmVhdHVyZXMgdHlwZXNldHRpbmdG
ZWF0dXJlcykgY29uc3QKIHsKICAgICAvLyBXZSBuZWVkIHRvIGhhbmRsZSB0cmFuc2Zvcm1zIG9u
IFNWRyBmb250cyBpbnRlcm5hbGx5LCBzaW5jZSB0aGV5IGFyZSByZW5kZXJlZCBpbnRlcm5hbGx5
LgogICAgIEFTU0VSVCghaXNTVkdGb250KCkpOwpAQCAtMzk2LDkgKzM5Niw5IEBAIGJvb2wgU2lt
cGxlRm9udERhdGE6OmFwcGx5VHJhbnNmb3JtcyhHbHkKICNlbmRpZgogfQogCi0vLyBGb250RGF0
YXMgYXJlIG5vdCByZWZjb3VudGVkIHRvIGF2b2lkIGN5Y2xlcy4KLXR5cGVkZWYgSGFzaE1hcDxz
dGQ6OnBhaXI8VUNoYXIzMiwgdW5zaWduZWQ+LCBTaW1wbGVGb250RGF0YSo+IENoYXJhY3RlckZh
bGxiYWNrTWFwOwotdHlwZWRlZiBIYXNoTWFwPGNvbnN0IFNpbXBsZUZvbnREYXRhKiwgQ2hhcmFj
dGVyRmFsbGJhY2tNYXA+IFN5c3RlbUZhbGxiYWNrQ2FjaGU7CisvLyBGb250cyBhcmUgbm90IHJl
ZidkIHRvIGF2b2lkIGN5Y2xlcy4KK3R5cGVkZWYgSGFzaE1hcDxzdGQ6OnBhaXI8VUNoYXIzMiwg
dW5zaWduZWQ+LCBGb250Kj4gQ2hhcmFjdGVyRmFsbGJhY2tNYXA7Cit0eXBlZGVmIEhhc2hNYXA8
Y29uc3QgRm9udCosIENoYXJhY3RlckZhbGxiYWNrTWFwPiBTeXN0ZW1GYWxsYmFja0NhY2hlOwog
CiBzdGF0aWMgU3lzdGVtRmFsbGJhY2tDYWNoZSYgc3lzdGVtRmFsbGJhY2tDYWNoZSgpCiB7CkBA
IC00MDYsMTYgKzQwNiwxNiBAQCBzdGF0aWMgU3lzdGVtRmFsbGJhY2tDYWNoZSYgc3lzdGVtRmFs
bGJhCiAgICAgcmV0dXJuIG1hcC5nZXQoKTsKIH0KIAotUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBT
aW1wbGVGb250RGF0YTo6c3lzdGVtRmFsbGJhY2tGb250RGF0YUZvckNoYXJhY3RlcihVQ2hhcjMy
IGNoYXJhY3RlciwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgYm9vbCBpc0Zv
clBsYXRmb3JtRm9udCkgY29uc3QKK1JlZlB0cjxGb250PiBGb250OjpzeXN0ZW1GYWxsYmFja0Zv
bnRGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjaGFyYWN0ZXIsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
ZGVzY3JpcHRpb24sIGJvb2wgaXNGb3JQbGF0Zm9ybUZvbnQpIGNvbnN0CiB7CiAgICAgYXV0byBm
b250QWRkUmVzdWx0ID0gc3lzdGVtRmFsbGJhY2tDYWNoZSgpLmFkZCh0aGlzLCBDaGFyYWN0ZXJG
YWxsYmFja01hcCgpKTsKIAogICAgIGF1dG8ga2V5ID0gc3RkOjptYWtlX3BhaXIoY2hhcmFjdGVy
LCBpc0ZvclBsYXRmb3JtRm9udCk7CiAgICAgYXV0byBjaGFyYWN0ZXJBZGRSZXN1bHQgPSBmb250
QWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hZGQoa2V5LCBudWxscHRyKTsKIAotICAgIFNpbXBs
ZUZvbnREYXRhKiYgZmFsbGJhY2tGb250RGF0YSA9IGNoYXJhY3RlckFkZFJlc3VsdC5pdGVyYXRv
ci0+dmFsdWU7CisgICAgRm9udComIGZhbGxiYWNrRm9udCA9IGNoYXJhY3RlckFkZFJlc3VsdC5p
dGVyYXRvci0+dmFsdWU7CiAKLSAgICBpZiAoIWZhbGxiYWNrRm9udERhdGEpIHsKKyAgICBpZiAo
IWZhbGxiYWNrRm9udCkgewogICAgICAgICBVQ2hhciBjb2RlVW5pdHNbMl07CiAgICAgICAgIGlu
dCBjb2RlVW5pdHNMZW5ndGg7CiAgICAgICAgIGlmIChVX0lTX0JNUChjaGFyYWN0ZXIpKSB7CkBA
IC00MjcsMTUgKzQyNywxNSBAQCBSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRh
OjpzCiAgICAgICAgICAgICBjb2RlVW5pdHNMZW5ndGggPSAyOwogICAgICAgICB9CiAKLSAgICAg
ICAgZmFsbGJhY2tGb250RGF0YSA9IGZvbnRDYWNoZSgpLnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFj
dGVycyhkZXNjcmlwdGlvbiwgdGhpcywgaXNGb3JQbGF0Zm9ybUZvbnQsIGNvZGVVbml0cywgY29k
ZVVuaXRzTGVuZ3RoKS5nZXQoKTsKLSAgICAgICAgaWYgKGZhbGxiYWNrRm9udERhdGEpCi0gICAg
ICAgICAgICBmYWxsYmFja0ZvbnREYXRhLT5tX2lzVXNlZEluU3lzdGVtRmFsbGJhY2tDYWNoZSA9
IHRydWU7CisgICAgICAgIGZhbGxiYWNrRm9udCA9IGZvbnRDYWNoZSgpLnN5c3RlbUZhbGxiYWNr
Rm9yQ2hhcmFjdGVycyhkZXNjcmlwdGlvbiwgdGhpcywgaXNGb3JQbGF0Zm9ybUZvbnQsIGNvZGVV
bml0cywgY29kZVVuaXRzTGVuZ3RoKS5nZXQoKTsKKyAgICAgICAgaWYgKGZhbGxiYWNrRm9udCkK
KyAgICAgICAgICAgIGZhbGxiYWNrRm9udC0+bV9pc1VzZWRJblN5c3RlbUZhbGxiYWNrQ2FjaGUg
PSB0cnVlOwogICAgIH0KIAotICAgIHJldHVybiBmYWxsYmFja0ZvbnREYXRhOworICAgIHJldHVy
biBmYWxsYmFja0ZvbnQ7CiB9CiAKLXZvaWQgU2ltcGxlRm9udERhdGE6OnJlbW92ZUZyb21TeXN0
ZW1GYWxsYmFja0NhY2hlKCkKK3ZvaWQgRm9udDo6cmVtb3ZlRnJvbVN5c3RlbUZhbGxiYWNrQ2Fj
aGUoKQogewogICAgIHN5c3RlbUZhbGxiYWNrQ2FjaGUoKS5yZW1vdmUodGhpcyk7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgJKHJldmlzaW9uIDE3ODY1MCkJ
KGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaDox
Nzg2NTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwzNjkgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgaW50ZXJuYWwgZm9udCBpbXBsZW1lbnRhdGlvbi4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYsIDIwMDgsIDIwMTAsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA3LTIwMDggVG9yY2ggTW9iaWxlLCBJbmMuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFNp
bXBsZUZvbnREYXRhX2gKKyNkZWZpbmUgU2ltcGxlRm9udERhdGFfaAorCisjaW5jbHVkZSAiRm9u
dEJhc2VsaW5lLmgiCisjaW5jbHVkZSAiRm9udE1ldHJpY3MuaCIKKyNpbmNsdWRlICJGb250UGxh
dGZvcm1EYXRhLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR2x5cGhCdWZm
ZXIuaCIKKyNpbmNsdWRlICJHbHlwaE1ldHJpY3NNYXAuaCIKKyNpbmNsdWRlICJHbHlwaFBhZ2Uu
aCIKKyNpbmNsdWRlICJPcGVuVHlwZU1hdGhEYXRhLmgiCisjaWYgRU5BQkxFKE9QRU5UWVBFX1ZF
UlRJQ0FMKQorI2luY2x1ZGUgIk9wZW5UeXBlVmVydGljYWxEYXRhLmgiCisjZW5kaWYKKyNpbmNs
dWRlICJUeXBlc2V0dGluZ0ZlYXR1cmVzLmgiCisjaW5jbHVkZSA8d3RmL1R5cGVDYXN0cy5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKworI2lmIFBMQVRGT1JNKENPQ09BKQor
I2luY2x1ZGUgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKKyNpbmNsdWRlIDx3dGYvUmV0YWlu
UHRyLmg+CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKFdJTikKKyNpbmNsdWRlIDx1c3AxMC5oPgor
I2VuZGlmCisKKyNpZiBVU0UoQ0FJUk8pCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNlbmRpZgorCisj
aWYgVVNFKENHKQorI2luY2x1ZGUgPFdlYkNvcmUvQ29yZUdyYXBoaWNzU1BJLmg+CisjZW5kaWYK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHbHlwaFBhZ2U7CitjbGFzcyBGb250RGVz
Y3JpcHRpb247CitjbGFzcyBTaGFyZWRCdWZmZXI7CitzdHJ1Y3QgR2x5cGhEYXRhOworc3RydWN0
IFdpZHRoSXRlcmF0b3I7CisKK2VudW0gRm9udERhdGFWYXJpYW50IHsgQXV0b1ZhcmlhbnQsIE5v
cm1hbFZhcmlhbnQsIFNtYWxsQ2Fwc1ZhcmlhbnQsIEVtcGhhc2lzTWFya1ZhcmlhbnQsIEJyb2tl
bklkZW9ncmFwaFZhcmlhbnQgfTsKK2VudW0gUGl0Y2ggeyBVbmtub3duUGl0Y2gsIEZpeGVkUGl0
Y2gsIFZhcmlhYmxlUGl0Y2ggfTsKKworY2xhc3MgU2ltcGxlRm9udERhdGEgOiBwdWJsaWMgUmVm
Q291bnRlZDxTaW1wbGVGb250RGF0YT4geworcHVibGljOgorICAgIGNsYXNzIFNWR0RhdGEgewor
ICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBwdWJsaWM6CisgICAgICAgIHZp
cnR1YWwgflNWR0RhdGEoKSB7IH0KKworICAgICAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZUZv
bnREYXRhKFNpbXBsZUZvbnREYXRhKiwgZmxvYXQgZm9udFNpemUpID0gMDsKKyAgICAgICAgdmly
dHVhbCBmbG9hdCB3aWR0aEZvclNWR0dseXBoKEdseXBoLCBmbG9hdCBmb250U2l6ZSkgY29uc3Qg
PSAwOworICAgICAgICB2aXJ0dWFsIGJvb2wgZmlsbFNWR0dseXBoUGFnZShHbHlwaFBhZ2UqLCB1
bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQg
YnVmZmVyTGVuZ3RoLCBjb25zdCBTaW1wbGVGb250RGF0YSopIGNvbnN0ID0gMDsKKyAgICB9Owor
CisgICAgLy8gVXNlZCB0byBjcmVhdGUgcGxhdGZvcm0gZm9udHMuCisgICAgc3RhdGljIFJlZjxT
aW1wbGVGb250RGF0YT4gY3JlYXRlKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0
YSwgYm9vbCBpc0N1c3RvbUZvbnQgPSBmYWxzZSwgYm9vbCBpc0xvYWRpbmcgPSBmYWxzZSwgYm9v
bCBpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrID0gZmFsc2UpCisgICAgeworICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBTaW1wbGVGb250RGF0YShwbGF0Zm9ybURhdGEsIGlzQ3VzdG9tRm9u
dCwgaXNMb2FkaW5nLCBpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKSk7CisgICAgfQorCisgICAg
Ly8gVXNlZCB0byBjcmVhdGUgU1ZHIEZvbnRzLgorICAgIHN0YXRpYyBSZWY8U2ltcGxlRm9udERh
dGE+IGNyZWF0ZShzdGQ6OnVuaXF1ZV9wdHI8U1ZHRGF0YT4gc3ZnRGF0YSwgZmxvYXQgZm9udFNp
emUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTaW1wbGVGb250RGF0YShXVEY6Om1vdmUoc3ZnRGF0
YSksIGZvbnRTaXplLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMpKTsKKyAgICB9CisK
KyAgICB+U2ltcGxlRm9udERhdGEoKTsKKworICAgIHN0YXRpYyBjb25zdCBTaW1wbGVGb250RGF0
YSogc3lzdGVtRmFsbGJhY2soKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IFNpbXBs
ZUZvbnREYXRhKj4oLTEpOyB9CisKKyAgICBjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9y
bURhdGEoKSBjb25zdCB7IHJldHVybiBtX3BsYXRmb3JtRGF0YTsgfQorICAgIGNvbnN0IE9wZW5U
eXBlTWF0aERhdGEqIG1hdGhEYXRhKCkgY29uc3Q7CisjaWYgRU5BQkxFKE9QRU5UWVBFX1ZFUlRJ
Q0FMKQorICAgIGNvbnN0IE9wZW5UeXBlVmVydGljYWxEYXRhKiB2ZXJ0aWNhbERhdGEoKSBjb25z
dCB7IHJldHVybiBtX3ZlcnRpY2FsRGF0YS5nZXQoKTsgfQorI2VuZGlmCisKKyAgICBQYXNzUmVm
UHRyPFNpbXBsZUZvbnREYXRhPiBzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRp
b24mKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBlbXBoYXNpc01hcmtG
b250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPFNp
bXBsZUZvbnREYXRhPiBicm9rZW5JZGVvZ3JhcGhGb250RGF0YSgpIGNvbnN0OworICAgIFBhc3NS
ZWZQdHI8U2ltcGxlRm9udERhdGE+IG5vblN5bnRoZXRpY0l0YWxpY0ZvbnREYXRhKCkgY29uc3Q7
CisKKyAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiB2YXJpYW50Rm9udERhdGEoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udERhdGFWYXJpYW50IHZhcmlhbnQpIGNv
bnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKHZhcmlhbnQpIHsKKyAgICAgICAgY2FzZSBTbWFs
bENhcHNWYXJpYW50OgorICAgICAgICAgICAgcmV0dXJuIHNtYWxsQ2Fwc0ZvbnREYXRhKGRlc2Ny
aXB0aW9uKTsKKyAgICAgICAgY2FzZSBFbXBoYXNpc01hcmtWYXJpYW50OgorICAgICAgICAgICAg
cmV0dXJuIGVtcGhhc2lzTWFya0ZvbnREYXRhKGRlc2NyaXB0aW9uKTsKKyAgICAgICAgY2FzZSBC
cm9rZW5JZGVvZ3JhcGhWYXJpYW50OgorICAgICAgICAgICAgcmV0dXJuIGJyb2tlbklkZW9ncmFw
aEZvbnREYXRhKCk7CisgICAgICAgIGNhc2UgQXV0b1ZhcmlhbnQ6CisgICAgICAgIGNhc2UgTm9y
bWFsVmFyaWFudDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gY29uc3RfY2FzdDxTaW1wbGVGb250RGF0
YSo+KHRoaXMpOworICAgIH0KKworICAgIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IHZlcnRp
Y2FsUmlnaHRPcmllbnRhdGlvbkZvbnREYXRhKCkgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxTaW1w
bGVGb250RGF0YT4gdXByaWdodE9yaWVudGF0aW9uRm9udERhdGEoKSBjb25zdDsKKworICAgIGJv
b2wgaGFzVmVydGljYWxHbHlwaHMoKSBjb25zdCB7IHJldHVybiBtX2hhc1ZlcnRpY2FsR2x5cGhz
OyB9CisgICAgYm9vbCBpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKCkgY29uc3QgeyByZXR1cm4g
bV9pc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrOyB9CisKKyAgICBGb250TWV0cmljcyYgZm9udE1l
dHJpY3MoKSB7IHJldHVybiBtX2ZvbnRNZXRyaWNzOyB9CisgICAgY29uc3QgRm9udE1ldHJpY3Mm
IGZvbnRNZXRyaWNzKCkgY29uc3QgeyByZXR1cm4gbV9mb250TWV0cmljczsgfQorICAgIGZsb2F0
IHNpemVQZXJVbml0KCkgY29uc3QgeyByZXR1cm4gcGxhdGZvcm1EYXRhKCkuc2l6ZSgpIC8gKGZv
bnRNZXRyaWNzKCkudW5pdHNQZXJFbSgpID8gZm9udE1ldHJpY3MoKS51bml0c1BlckVtKCkgOiAx
KTsgfQorCisgICAgZmxvYXQgbWF4Q2hhcldpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9tYXhDaGFy
V2lkdGg7IH0KKyAgICB2b2lkIHNldE1heENoYXJXaWR0aChmbG9hdCBtYXhDaGFyV2lkdGgpIHsg
bV9tYXhDaGFyV2lkdGggPSBtYXhDaGFyV2lkdGg7IH0KKworICAgIGZsb2F0IGF2Z0NoYXJXaWR0
aCgpIGNvbnN0IHsgcmV0dXJuIG1fYXZnQ2hhcldpZHRoOyB9CisgICAgdm9pZCBzZXRBdmdDaGFy
V2lkdGgoZmxvYXQgYXZnQ2hhcldpZHRoKSB7IG1fYXZnQ2hhcldpZHRoID0gYXZnQ2hhcldpZHRo
OyB9CisKKyAgICBGbG9hdFJlY3QgYm91bmRzRm9yR2x5cGgoR2x5cGgpIGNvbnN0OworICAgIGZs
b2F0IHdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0OworICAgIEZsb2F0UmVjdCBwbGF0
Zm9ybUJvdW5kc0ZvckdseXBoKEdseXBoKSBjb25zdDsKKyAgICBmbG9hdCBwbGF0Zm9ybVdpZHRo
Rm9yR2x5cGgoR2x5cGgpIGNvbnN0OworCisgICAgZmxvYXQgc3BhY2VXaWR0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fc3BhY2VXaWR0aDsgfQorICAgIGZsb2F0IGFkanVzdGVkU3BhY2VXaWR0aCgpIGNv
bnN0IHsgcmV0dXJuIG1fYWRqdXN0ZWRTcGFjZVdpZHRoOyB9CisgICAgdm9pZCBzZXRTcGFjZVdp
ZHRocyhmbG9hdCBzcGFjZVdpZHRoKQorICAgIHsKKyAgICAgICAgbV9zcGFjZVdpZHRoID0gc3Bh
Y2VXaWR0aDsKKyAgICAgICAgbV9hZGp1c3RlZFNwYWNlV2lkdGggPSBzcGFjZVdpZHRoOworICAg
IH0KKworI2lmIFVTRShDRykgfHwgVVNFKENBSVJPKQorICAgIGZsb2F0IHN5bnRoZXRpY0JvbGRP
ZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3N5bnRoZXRpY0JvbGRPZmZzZXQ7IH0KKyNlbmRpZgor
CisgICAgR2x5cGggc3BhY2VHbHlwaCgpIGNvbnN0IHsgcmV0dXJuIG1fc3BhY2VHbHlwaDsgfQor
ICAgIHZvaWQgc2V0U3BhY2VHbHlwaChHbHlwaCBzcGFjZUdseXBoKSB7IG1fc3BhY2VHbHlwaCA9
IHNwYWNlR2x5cGg7IH0KKyAgICBHbHlwaCB6ZXJvV2lkdGhTcGFjZUdseXBoKCkgY29uc3QgeyBy
ZXR1cm4gbV96ZXJvV2lkdGhTcGFjZUdseXBoOyB9CisgICAgdm9pZCBzZXRaZXJvV2lkdGhTcGFj
ZUdseXBoKEdseXBoIHNwYWNlR2x5cGgpIHsgbV96ZXJvV2lkdGhTcGFjZUdseXBoID0gc3BhY2VH
bHlwaDsgfQorICAgIGJvb2wgaXNaZXJvV2lkdGhTcGFjZUdseXBoKEdseXBoIGdseXBoKSBjb25z
dCB7IHJldHVybiBnbHlwaCA9PSBtX3plcm9XaWR0aFNwYWNlR2x5cGggJiYgZ2x5cGg7IH0KKyAg
ICBHbHlwaCB6ZXJvR2x5cGgoKSBjb25zdCB7IHJldHVybiBtX3plcm9HbHlwaDsgfQorICAgIHZv
aWQgc2V0WmVyb0dseXBoKEdseXBoIHplcm9HbHlwaCkgeyBtX3plcm9HbHlwaCA9IHplcm9HbHlw
aDsgfQorCisgICAgR2x5cGhEYXRhIGdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyKSBjb25z
dDsKKyAgICBHbHlwaCBnbHlwaEZvckNoYXJhY3RlcihVQ2hhcjMyKSBjb25zdDsKKworICAgIFJl
ZlB0cjxTaW1wbGVGb250RGF0YT4gc3lzdGVtRmFsbGJhY2tGb250RGF0YUZvckNoYXJhY3RlcihV
Q2hhcjMyLCBjb25zdCBGb250RGVzY3JpcHRpb24mLCBib29sIGlzRm9yUGxhdGZvcm1Gb250KSBj
b25zdDsKKworICAgIGNvbnN0IEdseXBoUGFnZSogZ2x5cGhQYWdlKHVuc2lnbmVkIHBhZ2VOdW1i
ZXIpIGNvbnN0OworCisgICAgdm9pZCBkZXRlcm1pbmVQaXRjaCgpOworICAgIFBpdGNoIHBpdGNo
KCkgY29uc3QgeyByZXR1cm4gbV90cmVhdEFzRml4ZWRQaXRjaCA/IEZpeGVkUGl0Y2ggOiBWYXJp
YWJsZVBpdGNoOyB9CisKKyAgICBjb25zdCBTVkdEYXRhKiBzdmdEYXRhKCkgY29uc3QgeyByZXR1
cm4gbV9zdmdEYXRhLmdldCgpOyB9CisgICAgYm9vbCBpc1NWR0ZvbnQoKSBjb25zdCB7IHJldHVy
biAhIW1fc3ZnRGF0YTsgfQorCisgICAgYm9vbCBpc0N1c3RvbUZvbnQoKSBjb25zdCB7IHJldHVy
biBtX2lzQ3VzdG9tRm9udDsgfQorICAgIGJvb2wgaXNMb2FkaW5nKCkgY29uc3QgeyByZXR1cm4g
bV9pc0xvYWRpbmc7IH0KKworI2lmbmRlZiBOREVCVUcKKyAgICBTdHJpbmcgZGVzY3JpcHRpb24o
KSBjb25zdDsKKyNlbmRpZgorCisjaWYgVVNFKEFQUEtJVCkKKyAgICBjb25zdCBTaW1wbGVGb250
RGF0YSogY29tcG9zaXRlRm9udFJlZmVyZW5jZUZvbnREYXRhKE5TRm9udCAqa2V5KSBjb25zdDsK
KyAgICBOU0ZvbnQqIGdldE5TRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fcGxhdGZvcm1EYXRhLm5z
Rm9udCgpOyB9CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKElPUykKKyAgICBDVEZvbnRSZWYgZ2V0
Q1RGb250KCkgY29uc3QgeyByZXR1cm4gbV9wbGF0Zm9ybURhdGEuZm9udCgpOyB9CisgICAgYm9v
bCBzaG91bGROb3RCZVVzZWRGb3JBcmFiaWMoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZE5vdEJl
VXNlZEZvckFyYWJpYzsgfTsKKyNlbmRpZgorI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIENGRGlj
dGlvbmFyeVJlZiBnZXRDRlN0cmluZ0F0dHJpYnV0ZXMoVHlwZXNldHRpbmdGZWF0dXJlcywgRm9u
dE9yaWVudGF0aW9uKSBjb25zdDsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFVT
RShIQVJGQlVaWikKKyAgICBib29sIGNhblJlbmRlckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNl
KGNvbnN0IFVDaGFyKiwgc2l6ZV90KSBjb25zdDsKKyNlbmRpZgorCisgICAgYm9vbCBhcHBseVRy
YW5zZm9ybXMoR2x5cGhCdWZmZXJHbHlwaCosIEdseXBoQnVmZmVyQWR2YW5jZSosIHNpemVfdCBn
bHlwaENvdW50LCBUeXBlc2V0dGluZ0ZlYXR1cmVzKSBjb25zdDsKKworI2lmIFBMQVRGT1JNKFdJ
TikKKyAgICBib29sIGlzU3lzdGVtRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1faXNTeXN0ZW1Gb250
OyB9CisgICAgU0NSSVBUX0ZPTlRQUk9QRVJUSUVTKiBzY3JpcHRGb250UHJvcGVydGllcygpIGNv
bnN0OworICAgIFNDUklQVF9DQUNIRSogc2NyaXB0Q2FjaGUoKSBjb25zdCB7IHJldHVybiAmbV9z
Y3JpcHRDYWNoZTsgfQorICAgIHN0YXRpYyB2b2lkIHNldFNob3VsZEFwcGx5TWFjQXNjZW50SGFj
ayhib29sKTsKKyAgICBzdGF0aWMgYm9vbCBzaG91bGRBcHBseU1hY0FzY2VudEhhY2soKTsKKyAg
ICBzdGF0aWMgZmxvYXQgYXNjZW50Q29uc2lkZXJpbmdNYWNBc2NlbnRIYWNrKGNvbnN0IFdDSEFS
KiwgZmxvYXQgYXNjZW50LCBmbG9hdCBkZXNjZW50KTsKKyNlbmRpZgorCitwcml2YXRlOgorICAg
IFNpbXBsZUZvbnREYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmLCBib29sIGlzQ3VzdG9tRm9u
dCA9IGZhbHNlLCBib29sIGlzTG9hZGluZyA9IGZhbHNlLCBib29sIGlzVGV4dE9yaWVudGF0aW9u
RmFsbGJhY2sgPSBmYWxzZSk7CisKKyAgICBTaW1wbGVGb250RGF0YShzdGQ6OnVuaXF1ZV9wdHI8
U1ZHRGF0YT4sIGZsb2F0IGZvbnRTaXplLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhl
dGljSXRhbGljKTsKKworICAgIHZvaWQgcGxhdGZvcm1Jbml0KCk7CisgICAgdm9pZCBwbGF0Zm9y
bUdseXBoSW5pdCgpOworICAgIHZvaWQgcGxhdGZvcm1DaGFyV2lkdGhJbml0KCk7CisgICAgdm9p
ZCBwbGF0Zm9ybURlc3Ryb3koKTsKKworICAgIHZvaWQgaW5pdENoYXJXaWR0aHMoKTsKKworICAg
IFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IGNyZWF0ZVNjYWxlZEZvbnREYXRhKGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYsIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdDsKKyAgICBQYXNzUmVmUHRy
PFNpbXBsZUZvbnREYXRhPiBwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZvbnREYXRhKGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYsIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdDsKKworICAgIHZvaWQgcmVtb3Zl
RnJvbVN5c3RlbUZhbGxiYWNrQ2FjaGUoKTsKKworI2lmIFBMQVRGT1JNKFdJTikKKyAgICB2b2lk
IGluaXRHRElGb250KCk7CisgICAgdm9pZCBwbGF0Zm9ybUNvbW1vbkRlc3Ryb3koKTsKKyAgICBG
bG9hdFJlY3QgYm91bmRzRm9yR0RJR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0OworICAgIGZsb2F0
IHdpZHRoRm9yR0RJR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0OworI2VuZGlmCisKKyNpZiBVU0Uo
Q0cpCisgICAgYm9vbCBjYW5Vc2VGYXN0R2x5cGhBZHZhbmNlR2V0dGVyKEdseXBoIGdseXBoLCBD
R1NpemUmIGFkdmFuY2UsIGJvb2wmIHBvcHVsYXRlZEFkdmFuY2UpIGNvbnN0OworICAgIENHRm9u
dFJlbmRlcmluZ1N0eWxlIHJlbmRlcmluZ1N0eWxlKCkgY29uc3Q7CisgICAgYm9vbCBhZHZhbmNl
Rm9yQ29sb3JCaXRtYXBGb250KEdseXBoLCBDR1NpemUmIHJlc3VsdCkgY29uc3Q7IC8vIFJldHVy
bnMgdHJ1ZSBpZiB0aGUgZm9udCBpcyBhIGNvbG9yIGJpdG1hcCBmb250CisjZW5kaWYKKworICAg
IEZvbnRNZXRyaWNzIG1fZm9udE1ldHJpY3M7CisgICAgZmxvYXQgbV9tYXhDaGFyV2lkdGg7Cisg
ICAgZmxvYXQgbV9hdmdDaGFyV2lkdGg7CisKKyAgICBGb250UGxhdGZvcm1EYXRhIG1fcGxhdGZv
cm1EYXRhOworICAgIHN0ZDo6dW5pcXVlX3B0cjxTVkdEYXRhPiBtX3N2Z0RhdGE7CisKKyAgICBt
dXRhYmxlIFJlZlB0cjxHbHlwaFBhZ2U+IG1fZ2x5cGhQYWdlWmVybzsKKyAgICBtdXRhYmxlIEhh
c2hNYXA8dW5zaWduZWQsIFJlZlB0cjxHbHlwaFBhZ2U+PiBtX2dseXBoUGFnZXM7CisgICAgbXV0
YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8R2x5cGhNZXRyaWNzTWFwPEZsb2F0UmVjdD4+IG1fZ2x5cGhU
b0JvdW5kc01hcDsKKyAgICBtdXRhYmxlIEdseXBoTWV0cmljc01hcDxmbG9hdD4gbV9nbHlwaFRv
V2lkdGhNYXA7CisKKyAgICBib29sIG1fdHJlYXRBc0ZpeGVkUGl0Y2g7CisgICAgYm9vbCBtX2lz
Q3VzdG9tRm9udDsgIC8vIFdoZXRoZXIgb3Igbm90IHdlIGFyZSBjdXN0b20gZm9udCBsb2FkZWQg
dmlhIEBmb250LWZhY2UKKyAgICBib29sIG1faXNMb2FkaW5nOyAvLyBXaGV0aGVyIG9yIG5vdCB0
aGlzIGN1c3RvbSBmb250IGlzIHN0aWxsIGluIHRoZSBhY3Qgb2YgbG9hZGluZy4KKworICAgIGJv
b2wgbV9pc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrOworICAgIGJvb2wgbV9pc0Jyb2tlbklkZW9n
cmFwaEZhbGxiYWNrOworCisgICAgYm9vbCBtX2lzVXNlZEluU3lzdGVtRmFsbGJhY2tDYWNoZSB7
IGZhbHNlIH07CisKKyAgICBtdXRhYmxlIFJlZlB0cjxPcGVuVHlwZU1hdGhEYXRhPiBtX21hdGhE
YXRhOworI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKKyAgICBSZWZQdHI8T3BlblR5cGVW
ZXJ0aWNhbERhdGE+IG1fdmVydGljYWxEYXRhOworI2VuZGlmCisgICAgYm9vbCBtX2hhc1ZlcnRp
Y2FsR2x5cGhzOworCisgICAgR2x5cGggbV9zcGFjZUdseXBoOworICAgIGZsb2F0IG1fc3BhY2VX
aWR0aDsKKyAgICBHbHlwaCBtX3plcm9HbHlwaDsKKyAgICBmbG9hdCBtX2FkanVzdGVkU3BhY2VX
aWR0aDsKKworICAgIEdseXBoIG1femVyb1dpZHRoU3BhY2VHbHlwaDsKKworICAgIHN0cnVjdCBE
ZXJpdmVkRm9udERhdGEgeworICAgICAgICBleHBsaWNpdCBEZXJpdmVkRm9udERhdGEoYm9vbCBj
dXN0b20pCisgICAgICAgICAgICA6IGZvckN1c3RvbUZvbnQoY3VzdG9tKQorICAgICAgICB7Cisg
ICAgICAgIH0KKyAgICAgICAgfkRlcml2ZWRGb250RGF0YSgpOworCisgICAgICAgIGJvb2wgZm9y
Q3VzdG9tRm9udDsKKyAgICAgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBzbWFsbENhcHM7Cisg
ICAgICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gZW1waGFzaXNNYXJrOworICAgICAgICBSZWZQ
dHI8U2ltcGxlRm9udERhdGE+IGJyb2tlbklkZW9ncmFwaDsKKyAgICAgICAgUmVmUHRyPFNpbXBs
ZUZvbnREYXRhPiB2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb247CisgICAgICAgIFJlZlB0cjxTaW1w
bGVGb250RGF0YT4gdXByaWdodE9yaWVudGF0aW9uOworICAgICAgICBSZWZQdHI8U2ltcGxlRm9u
dERhdGE+IG5vblN5bnRoZXRpY0l0YWxpYzsKKyNpZiBVU0UoQVBQS0lUKQorICAgICAgICBIYXNo
TWFwPE5TRm9udCosIFJlZlB0cjxTaW1wbGVGb250RGF0YT4+IGNvbXBvc2l0ZUZvbnRSZWZlcmVu
Y2VzOworI2VuZGlmCisgICAgfTsKKworICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPERlcml2
ZWRGb250RGF0YT4gbV9kZXJpdmVkRm9udERhdGE7CisKKyNpZiBVU0UoQ0cpIHx8IFVTRShDQUlS
TykKKyAgICBmbG9hdCBtX3N5bnRoZXRpY0JvbGRPZmZzZXQ7CisjZW5kaWYKKworI2lmIFBMQVRG
T1JNKENPQ09BKQorICAgIG11dGFibGUgSGFzaE1hcDx1bnNpZ25lZCwgUmV0YWluUHRyPENGRGlj
dGlvbmFyeVJlZj4+IG1fQ0ZTdHJpbmdBdHRyaWJ1dGVzOworI2VuZGlmCisKKyNpZiBQTEFURk9S
TShDT0NPQSkgfHwgVVNFKEhBUkZCVVpaKQorICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPEhh
c2hNYXA8U3RyaW5nLCBib29sPj4gbV9jb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZVN1cHBvcnQ7
CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKFdJTikKKyAgICBib29sIG1faXNTeXN0ZW1Gb250Owor
ICAgIG11dGFibGUgU0NSSVBUX0NBQ0hFIG1fc2NyaXB0Q2FjaGU7CisgICAgbXV0YWJsZSBTQ1JJ
UFRfRk9OVFBST1BFUlRJRVMqIG1fc2NyaXB0Rm9udFByb3BlcnRpZXM7CisjZW5kaWYKKyNpZiBQ
TEFURk9STShJT1MpCisgICAgYm9vbCBtX3Nob3VsZE5vdEJlVXNlZEZvckFyYWJpYzsKKyNlbmRp
ZgorfTsKKworQUxXQVlTX0lOTElORSBGbG9hdFJlY3QgU2ltcGxlRm9udERhdGE6OmJvdW5kc0Zv
ckdseXBoKEdseXBoIGdseXBoKSBjb25zdAoreworICAgIGlmIChpc1plcm9XaWR0aFNwYWNlR2x5
cGgoZ2x5cGgpKQorICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisKKyAgICBGbG9hdFJlY3Qg
Ym91bmRzOworICAgIGlmIChtX2dseXBoVG9Cb3VuZHNNYXApIHsKKyAgICAgICAgYm91bmRzID0g
bV9nbHlwaFRvQm91bmRzTWFwLT5tZXRyaWNzRm9yR2x5cGgoZ2x5cGgpOworICAgICAgICBpZiAo
Ym91bmRzLndpZHRoKCkgIT0gY0dseXBoU2l6ZVVua25vd24pCisgICAgICAgICAgICByZXR1cm4g
Ym91bmRzOworICAgIH0KKworICAgIGJvdW5kcyA9IHBsYXRmb3JtQm91bmRzRm9yR2x5cGgoZ2x5
cGgpOworICAgIGlmICghbV9nbHlwaFRvQm91bmRzTWFwKQorICAgICAgICBtX2dseXBoVG9Cb3Vu
ZHNNYXAgPSBzdGQ6Om1ha2VfdW5pcXVlPEdseXBoTWV0cmljc01hcDxGbG9hdFJlY3Q+PigpOwor
ICAgIG1fZ2x5cGhUb0JvdW5kc01hcC0+c2V0TWV0cmljc0ZvckdseXBoKGdseXBoLCBib3VuZHMp
OworICAgIHJldHVybiBib3VuZHM7Cit9CisKK0FMV0FZU19JTkxJTkUgZmxvYXQgU2ltcGxlRm9u
dERhdGE6OndpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0Cit7CisgICAgaWYgKGlzWmVy
b1dpZHRoU3BhY2VHbHlwaChnbHlwaCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgZmxvYXQg
d2lkdGggPSBtX2dseXBoVG9XaWR0aE1hcC5tZXRyaWNzRm9yR2x5cGgoZ2x5cGgpOworICAgIGlm
ICh3aWR0aCAhPSBjR2x5cGhTaXplVW5rbm93bikKKyAgICAgICAgcmV0dXJuIHdpZHRoOworCisg
ICAgaWYgKGlzU1ZHRm9udCgpKQorICAgICAgICB3aWR0aCA9IG1fc3ZnRGF0YS0+d2lkdGhGb3JT
VkdHbHlwaChnbHlwaCwgbV9wbGF0Zm9ybURhdGEuc2l6ZSgpKTsKKyNpZiBFTkFCTEUoT1BFTlRZ
UEVfVkVSVElDQUwpCisgICAgZWxzZSBpZiAobV92ZXJ0aWNhbERhdGEpCisjaWYgVVNFKENHKSB8
fCBVU0UoQ0FJUk8pCisgICAgICAgIHdpZHRoID0gbV92ZXJ0aWNhbERhdGEtPmFkdmFuY2VIZWln
aHQodGhpcywgZ2x5cGgpICsgbV9zeW50aGV0aWNCb2xkT2Zmc2V0OworI2Vsc2UKKyAgICAgICAg
d2lkdGggPSBtX3ZlcnRpY2FsRGF0YS0+YWR2YW5jZUhlaWdodCh0aGlzLCBnbHlwaCk7CisjZW5k
aWYKKyNlbmRpZgorICAgIGVsc2UKKyAgICAgICAgd2lkdGggPSBwbGF0Zm9ybVdpZHRoRm9yR2x5
cGgoZ2x5cGgpOworCisgICAgbV9nbHlwaFRvV2lkdGhNYXAuc2V0TWV0cmljc0ZvckdseXBoKGds
eXBoLCB3aWR0aCk7CisgICAgcmV0dXJuIHdpZHRoOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBTaW1wbGVGb250RGF0YV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udC5oCSh3b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDggKzIxLDggQEAK
ICAqCiAgKi8KIAotI2lmbmRlZiBTaW1wbGVGb250RGF0YV9oCi0jZGVmaW5lIFNpbXBsZUZvbnRE
YXRhX2gKKyNpZm5kZWYgRm9udF9oCisjZGVmaW5lIEZvbnRfaAogCiAjaW5jbHVkZSAiRm9udEJh
c2VsaW5lLmgiCiAjaW5jbHVkZSAiRm9udE1ldHJpY3MuaCIKQEAgLTY0LDM2ICs2NCwzNiBAQCBj
bGFzcyBTaGFyZWRCdWZmZXI7CiBzdHJ1Y3QgR2x5cGhEYXRhOwogc3RydWN0IFdpZHRoSXRlcmF0
b3I7CiAKLWVudW0gRm9udERhdGFWYXJpYW50IHsgQXV0b1ZhcmlhbnQsIE5vcm1hbFZhcmlhbnQs
IFNtYWxsQ2Fwc1ZhcmlhbnQsIEVtcGhhc2lzTWFya1ZhcmlhbnQsIEJyb2tlbklkZW9ncmFwaFZh
cmlhbnQgfTsKK2VudW0gRm9udFZhcmlhbnQgeyBBdXRvVmFyaWFudCwgTm9ybWFsVmFyaWFudCwg
U21hbGxDYXBzVmFyaWFudCwgRW1waGFzaXNNYXJrVmFyaWFudCwgQnJva2VuSWRlb2dyYXBoVmFy
aWFudCB9OwogZW51bSBQaXRjaCB7IFVua25vd25QaXRjaCwgRml4ZWRQaXRjaCwgVmFyaWFibGVQ
aXRjaCB9OwogCi1jbGFzcyBTaW1wbGVGb250RGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPFNpbXBs
ZUZvbnREYXRhPiB7CitjbGFzcyBGb250IDogcHVibGljIFJlZkNvdW50ZWQ8Rm9udD4gewogcHVi
bGljOgogICAgIGNsYXNzIFNWR0RhdGEgewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKICAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgflNWR0RhdGEoKSB7IH0KIAotICAgICAg
ICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZUZvbnREYXRhKFNpbXBsZUZvbnREYXRhKiwgZmxvYXQg
Zm9udFNpemUpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVGb250KEZvbnQq
LCBmbG9hdCBmb250U2l6ZSkgPSAwOwogICAgICAgICB2aXJ0dWFsIGZsb2F0IHdpZHRoRm9yU1ZH
R2x5cGgoR2x5cGgsIGZsb2F0IGZvbnRTaXplKSBjb25zdCA9IDA7Ci0gICAgICAgIHZpcnR1YWwg
Ym9vbCBmaWxsU1ZHR2x5cGhQYWdlKEdseXBoUGFnZSosIHVuc2lnbmVkIG9mZnNldCwgdW5zaWdu
ZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IFNp
bXBsZUZvbnREYXRhKikgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIGJvb2wgZmlsbFNWR0ds
eXBoUGFnZShHbHlwaFBhZ2UqLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNo
YXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBGb250KikgY29uc3QgPSAw
OwogICAgIH07CiAKICAgICAvLyBVc2VkIHRvIGNyZWF0ZSBwbGF0Zm9ybSBmb250cy4KLSAgICBz
dGF0aWMgUmVmPFNpbXBsZUZvbnREYXRhPiBjcmVhdGUoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYg
cGxhdGZvcm1EYXRhLCBib29sIGlzQ3VzdG9tRm9udCA9IGZhbHNlLCBib29sIGlzTG9hZGluZyA9
IGZhbHNlLCBib29sIGlzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2sgPSBmYWxzZSkKKyAgICBzdGF0
aWMgUmVmPEZvbnQ+IGNyZWF0ZShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEs
IGJvb2wgaXNDdXN0b21Gb250ID0gZmFsc2UsIGJvb2wgaXNMb2FkaW5nID0gZmFsc2UsIGJvb2wg
aXNUZXh0T3JpZW50YXRpb25GYWxsYmFjayA9IGZhbHNlKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgU2ltcGxlRm9udERhdGEocGxhdGZvcm1EYXRhLCBpc0N1c3RvbUZvbnQs
IGlzTG9hZGluZywgaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaykpOworICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBGb250KHBsYXRmb3JtRGF0YSwgaXNDdXN0b21Gb250LCBpc0xvYWRpbmcs
IGlzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2spKTsKICAgICB9CiAKICAgICAvLyBVc2VkIHRvIGNy
ZWF0ZSBTVkcgRm9udHMuCi0gICAgc3RhdGljIFJlZjxTaW1wbGVGb250RGF0YT4gY3JlYXRlKHN0
ZDo6dW5pcXVlX3B0cjxTVkdEYXRhPiBzdmdEYXRhLCBmbG9hdCBmb250U2l6ZSwgYm9vbCBzeW50
aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYykKKyAgICBzdGF0aWMgUmVmPEZvbnQ+IGNy
ZWF0ZShzdGQ6OnVuaXF1ZV9wdHI8U1ZHRGF0YT4gc3ZnRGF0YSwgZmxvYXQgZm9udFNpemUsIGJv
b2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpCiAgICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBTaW1wbGVGb250RGF0YShXVEY6Om1vdmUoc3ZnRGF0YSksIGZv
bnRTaXplLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMpKTsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgRm9udChXVEY6Om1vdmUoc3ZnRGF0YSksIGZvbnRTaXplLCBzeW50aGV0
aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMpKTsKICAgICB9CiAKLSAgICB+U2ltcGxlRm9udERhdGEo
KTsKKyAgICB+Rm9udCgpOwogCi0gICAgc3RhdGljIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBzeXN0
ZW1GYWxsYmFjaygpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgU2ltcGxlRm9udERh
dGEqPigtMSk7IH0KKyAgICBzdGF0aWMgY29uc3QgRm9udCogc3lzdGVtRmFsbGJhY2soKSB7IHJl
dHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IEZvbnQqPigtMSk7IH0KIAogICAgIGNvbnN0IEZv
bnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fcGxhdGZvcm1E
YXRhOyB9CiAgICAgY29uc3QgT3BlblR5cGVNYXRoRGF0YSogbWF0aERhdGEoKSBjb25zdDsKQEAg
LTEwMSwzMCArMTAxLDMwIEBAIHB1YmxpYzoKICAgICBjb25zdCBPcGVuVHlwZVZlcnRpY2FsRGF0
YSogdmVydGljYWxEYXRhKCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0aWNhbERhdGEuZ2V0KCk7IH0K
ICNlbmRpZgogCi0gICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gc21hbGxDYXBzRm9udERh
dGEoY29uc3QgRm9udERlc2NyaXB0aW9uJikgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxTaW1wbGVG
b250RGF0YT4gZW1waGFzaXNNYXJrRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJikgY29u
c3Q7Ci0gICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gYnJva2VuSWRlb2dyYXBoRm9udERh
dGEoKSBjb25zdDsKLSAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBub25TeW50aGV0aWNJ
dGFsaWNGb250RGF0YSgpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8Rm9udD4gc21hbGxDYXBzRm9u
dChjb25zdCBGb250RGVzY3JpcHRpb24mKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPEZvbnQ+IGVt
cGhhc2lzTWFya0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJikgY29uc3Q7CisgICAgUGFzc1Jl
ZlB0cjxGb250PiBicm9rZW5JZGVvZ3JhcGhGb250KCkgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxG
b250PiBub25TeW50aGV0aWNJdGFsaWNGb250KCkgY29uc3Q7CiAKLSAgICBQYXNzUmVmUHRyPFNp
bXBsZUZvbnREYXRhPiB2YXJpYW50Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNj
cmlwdGlvbiwgRm9udERhdGFWYXJpYW50IHZhcmlhbnQpIGNvbnN0CisgICAgUGFzc1JlZlB0cjxG
b250PiB2YXJpYW50Rm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250
VmFyaWFudCB2YXJpYW50KSBjb25zdAogICAgIHsKICAgICAgICAgc3dpdGNoICh2YXJpYW50KSB7
CiAgICAgICAgIGNhc2UgU21hbGxDYXBzVmFyaWFudDoKLSAgICAgICAgICAgIHJldHVybiBzbWFs
bENhcHNGb250RGF0YShkZXNjcmlwdGlvbik7CisgICAgICAgICAgICByZXR1cm4gc21hbGxDYXBz
Rm9udChkZXNjcmlwdGlvbik7CiAgICAgICAgIGNhc2UgRW1waGFzaXNNYXJrVmFyaWFudDoKLSAg
ICAgICAgICAgIHJldHVybiBlbXBoYXNpc01hcmtGb250RGF0YShkZXNjcmlwdGlvbik7CisgICAg
ICAgICAgICByZXR1cm4gZW1waGFzaXNNYXJrRm9udChkZXNjcmlwdGlvbik7CiAgICAgICAgIGNh
c2UgQnJva2VuSWRlb2dyYXBoVmFyaWFudDoKLSAgICAgICAgICAgIHJldHVybiBicm9rZW5JZGVv
Z3JhcGhGb250RGF0YSgpOworICAgICAgICAgICAgcmV0dXJuIGJyb2tlbklkZW9ncmFwaEZvbnQo
KTsKICAgICAgICAgY2FzZSBBdXRvVmFyaWFudDoKICAgICAgICAgY2FzZSBOb3JtYWxWYXJpYW50
OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgIHJldHVybiBjb25zdF9jYXN0PFNpbXBsZUZvbnREYXRhKj4odGhpcyk7
CisgICAgICAgIHJldHVybiBjb25zdF9jYXN0PEZvbnQqPih0aGlzKTsKICAgICB9CiAKLSAgICBQ
YXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiB2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250RGF0
YSgpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IHVwcmlnaHRPcmllbnRh
dGlvbkZvbnREYXRhKCkgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxGb250PiB2ZXJ0aWNhbFJpZ2h0
T3JpZW50YXRpb25Gb250KCkgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxGb250PiB1cHJpZ2h0T3Jp
ZW50YXRpb25Gb250KCkgY29uc3Q7CiAKICAgICBib29sIGhhc1ZlcnRpY2FsR2x5cGhzKCkgY29u
c3QgeyByZXR1cm4gbV9oYXNWZXJ0aWNhbEdseXBoczsgfQogICAgIGJvb2wgaXNUZXh0T3JpZW50
YXRpb25GYWxsYmFjaygpIGNvbnN0IHsgcmV0dXJuIG1faXNUZXh0T3JpZW50YXRpb25GYWxsYmFj
azsgfQpAQCAtMTY3LDcgKzE2Nyw3IEBAIHB1YmxpYzoKICAgICBHbHlwaERhdGEgZ2x5cGhEYXRh
Rm9yQ2hhcmFjdGVyKFVDaGFyMzIpIGNvbnN0OwogICAgIEdseXBoIGdseXBoRm9yQ2hhcmFjdGVy
KFVDaGFyMzIpIGNvbnN0OwogCi0gICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBzeXN0ZW1GYWxs
YmFja0ZvbnREYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYs
IGJvb2wgaXNGb3JQbGF0Zm9ybUZvbnQpIGNvbnN0OworICAgIFJlZlB0cjxGb250PiBzeXN0ZW1G
YWxsYmFja0ZvbnRGb3JDaGFyYWN0ZXIoVUNoYXIzMiwgY29uc3QgRm9udERlc2NyaXB0aW9uJiwg
Ym9vbCBpc0ZvclBsYXRmb3JtRm9udCkgY29uc3Q7CiAKICAgICBjb25zdCBHbHlwaFBhZ2UqIGds
eXBoUGFnZSh1bnNpZ25lZCBwYWdlTnVtYmVyKSBjb25zdDsKIApAQCAtMTg1LDcgKzE4NSw3IEBA
IHB1YmxpYzoKICNlbmRpZgogCiAjaWYgVVNFKEFQUEtJVCkKLSAgICBjb25zdCBTaW1wbGVGb250
RGF0YSogY29tcG9zaXRlRm9udFJlZmVyZW5jZUZvbnREYXRhKE5TRm9udCAqa2V5KSBjb25zdDsK
KyAgICBjb25zdCBGb250KiBjb21wb3NpdGVGb250UmVmZXJlbmNlRm9udChOU0ZvbnQgKmtleSkg
Y29uc3Q7CiAgICAgTlNGb250KiBnZXROU0ZvbnQoKSBjb25zdCB7IHJldHVybiBtX3BsYXRmb3Jt
RGF0YS5uc0ZvbnQoKTsgfQogI2VuZGlmCiAKQEAgLTIxMyw5ICsyMTMsOSBAQCBwdWJsaWM6CiAj
ZW5kaWYKIAogcHJpdmF0ZToKLSAgICBTaW1wbGVGb250RGF0YShjb25zdCBGb250UGxhdGZvcm1E
YXRhJiwgYm9vbCBpc0N1c3RvbUZvbnQgPSBmYWxzZSwgYm9vbCBpc0xvYWRpbmcgPSBmYWxzZSwg
Ym9vbCBpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrID0gZmFsc2UpOworICAgIEZvbnQoY29uc3Qg
Rm9udFBsYXRmb3JtRGF0YSYsIGJvb2wgaXNDdXN0b21Gb250ID0gZmFsc2UsIGJvb2wgaXNMb2Fk
aW5nID0gZmFsc2UsIGJvb2wgaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjayA9IGZhbHNlKTsKIAot
ICAgIFNpbXBsZUZvbnREYXRhKHN0ZDo6dW5pcXVlX3B0cjxTVkdEYXRhPiwgZmxvYXQgZm9udFNp
emUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpOworICAgIEZvbnQo
c3RkOjp1bmlxdWVfcHRyPFNWR0RhdGE+LCBmbG9hdCBmb250U2l6ZSwgYm9vbCBzeW50aGV0aWNC
b2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYyk7CiAKICAgICB2b2lkIHBsYXRmb3JtSW5pdCgpOwog
ICAgIHZvaWQgcGxhdGZvcm1HbHlwaEluaXQoKTsKQEAgLTIyNCw4ICsyMjQsOCBAQCBwcml2YXRl
OgogCiAgICAgdm9pZCBpbml0Q2hhcldpZHRocygpOwogCi0gICAgUGFzc1JlZlB0cjxTaW1wbGVG
b250RGF0YT4gY3JlYXRlU2NhbGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgZmxv
YXQgc2NhbGVGYWN0b3IpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IHBs
YXRmb3JtQ3JlYXRlU2NhbGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgZmxvYXQg
c2NhbGVGYWN0b3IpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8Rm9udD4gY3JlYXRlU2NhbGVkRm9u
dChjb25zdCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3Q7CisgICAg
UGFzc1JlZlB0cjxGb250PiBwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZvbnQoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0OwogCiAgICAgdm9pZCByZW1vdmVGcm9t
U3lzdGVtRmFsbGJhY2tDYWNoZSgpOwogCkBAIC0yODQsMTQgKzI4NCwxNCBAQCBwcml2YXRlOgog
ICAgICAgICB+RGVyaXZlZEZvbnREYXRhKCk7CiAKICAgICAgICAgYm9vbCBmb3JDdXN0b21Gb250
OwotICAgICAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IHNtYWxsQ2FwczsKLSAgICAgICAgUmVm
UHRyPFNpbXBsZUZvbnREYXRhPiBlbXBoYXNpc01hcms7Ci0gICAgICAgIFJlZlB0cjxTaW1wbGVG
b250RGF0YT4gYnJva2VuSWRlb2dyYXBoOwotICAgICAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+
IHZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbjsKLSAgICAgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRh
PiB1cHJpZ2h0T3JpZW50YXRpb247Ci0gICAgICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gbm9u
U3ludGhldGljSXRhbGljOworICAgICAgICBSZWZQdHI8Rm9udD4gc21hbGxDYXBzOworICAgICAg
ICBSZWZQdHI8Rm9udD4gZW1waGFzaXNNYXJrOworICAgICAgICBSZWZQdHI8Rm9udD4gYnJva2Vu
SWRlb2dyYXBoOworICAgICAgICBSZWZQdHI8Rm9udD4gdmVydGljYWxSaWdodE9yaWVudGF0aW9u
OworICAgICAgICBSZWZQdHI8Rm9udD4gdXByaWdodE9yaWVudGF0aW9uOworICAgICAgICBSZWZQ
dHI8Rm9udD4gbm9uU3ludGhldGljSXRhbGljOwogI2lmIFVTRShBUFBLSVQpCi0gICAgICAgIEhh
c2hNYXA8TlNGb250KiwgUmVmUHRyPFNpbXBsZUZvbnREYXRhPj4gY29tcG9zaXRlRm9udFJlZmVy
ZW5jZXM7CisgICAgICAgIEhhc2hNYXA8TlNGb250KiwgUmVmUHRyPEZvbnQ+PiBjb21wb3NpdGVG
b250UmVmZXJlbmNlczsKICNlbmRpZgogICAgIH07CiAKQEAgLTMxOSw3ICszMTksNyBAQCBwcml2
YXRlOgogI2VuZGlmCiB9OwogCi1BTFdBWVNfSU5MSU5FIEZsb2F0UmVjdCBTaW1wbGVGb250RGF0
YTo6Ym91bmRzRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CitBTFdBWVNfSU5MSU5FIEZsb2F0
UmVjdCBGb250Ojpib3VuZHNGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKIHsKICAgICBpZiAo
aXNaZXJvV2lkdGhTcGFjZUdseXBoKGdseXBoKSkKICAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgp
OwpAQCAtMzM4LDcgKzMzOCw3IEBAIEFMV0FZU19JTkxJTkUgRmxvYXRSZWN0IFNpbXBsZUZvbnRE
YXRhOjoKICAgICByZXR1cm4gYm91bmRzOwogfQogCi1BTFdBWVNfSU5MSU5FIGZsb2F0IFNpbXBs
ZUZvbnREYXRhOjp3aWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAorQUxXQVlTX0lOTElO
RSBmbG9hdCBGb250Ojp3aWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAogewogICAgIGlm
IChpc1plcm9XaWR0aFNwYWNlR2x5cGgoZ2x5cGgpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTM2
Niw0ICszNjYsNCBAQCBBTFdBWVNfSU5MSU5FIGZsb2F0IFNpbXBsZUZvbnREYXRhOjp3aWR0CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIFNpbXBsZUZvbnREYXRhX2gKKyNl
bmRpZiAvLyBGb250X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhY2hlLmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsMTQgKzUy
LDE0IEBACiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKIC8vIEZJWE1FOiBXZSBtYXkg
YmUgYWJsZSB0byBzaW1wbGlmeSB0aGlzIGNvZGUgdXNpbmcgQysrMTEgdGhyZWFkaW5nIHByaW1p
dGl2ZXMsIGluY2x1ZGluZyBzdGQ6OmNhbGxfb25jZSgpLgotc3RhdGljIHB0aHJlYWRfbXV0ZXhf
dCBmb250RGF0YUxvY2s7CitzdGF0aWMgcHRocmVhZF9tdXRleF90IGZvbnRMb2NrOwogCiBzdGF0
aWMgdm9pZCBpbml0Rm9udENhY2hlTG9ja09uY2UoKQogewogICAgIHB0aHJlYWRfbXV0ZXhhdHRy
X3QgbXV0ZXhBdHRyaWJ1dGU7CiAgICAgcHRocmVhZF9tdXRleGF0dHJfaW5pdCgmbXV0ZXhBdHRy
aWJ1dGUpOwogICAgIHB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5cGUoJm11dGV4QXR0cmlidXRlLCBQ
VEhSRUFEX01VVEVYX1JFQ1VSU0lWRSk7Ci0gICAgcHRocmVhZF9tdXRleF9pbml0KCZmb250RGF0
YUxvY2ssICZtdXRleEF0dHJpYnV0ZSk7CisgICAgcHRocmVhZF9tdXRleF9pbml0KCZmb250TG9j
aywgJm11dGV4QXR0cmlidXRlKTsKICAgICBwdGhyZWFkX211dGV4YXR0cl9kZXN0cm95KCZtdXRl
eEF0dHJpYnV0ZSk7CiB9CiAKQEAgLTcxLDEzICs3MSwxMyBAQCBwdWJsaWM6CiAgICAgRm9udExv
Y2tlcigpCiAgICAgewogICAgICAgICBwdGhyZWFkX29uY2UoJmluaXRGb250TG9ja0NvbnRyb2ws
IGluaXRGb250Q2FjaGVMb2NrT25jZSk7Ci0gICAgICAgIGludCBsb2NrY29kZSA9IHB0aHJlYWRf
bXV0ZXhfbG9jaygmZm9udERhdGFMb2NrKTsKLSAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRV9V
TlVTRUQobG9ja2NvZGUsICFsb2NrY29kZSwgImZvbnREYXRhTG9jayBsb2NrIGZhaWxlZCB3aXRo
IGNvZGU6JWQiLCBsb2NrY29kZSk7ICAgIAorICAgICAgICBpbnQgbG9ja2NvZGUgPSBwdGhyZWFk
X211dGV4X2xvY2soJmZvbnRMb2NrKTsKKyAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRV9VTlVT
RUQobG9ja2NvZGUsICFsb2NrY29kZSwgImZvbnRMb2NrIGxvY2sgZmFpbGVkIHdpdGggY29kZTol
ZCIsIGxvY2tjb2RlKTsgICAgCiAgICAgfQogICAgIH5Gb250TG9ja2VyKCkKICAgICB7Ci0gICAg
ICAgIGludCBsb2NrY29kZSA9IHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZmb250RGF0YUxvY2spOwot
ICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFX1VOVVNFRChsb2NrY29kZSwgIWxvY2tjb2RlLCAi
Zm9udERhdGFMb2NrIHVubG9jayBmYWlsZWQgd2l0aCBjb2RlOiVkIiwgbG9ja2NvZGUpOworICAg
ICAgICBpbnQgbG9ja2NvZGUgPSBwdGhyZWFkX211dGV4X3VubG9jaygmZm9udExvY2spOworICAg
ICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFX1VOVVNFRChsb2NrY29kZSwgIWxvY2tjb2RlLCAiZm9u
dExvY2sgdW5sb2NrIGZhaWxlZCB3aXRoIGNvZGU6JWQiLCBsb2NrY29kZSk7CiAgICAgfQogfTsK
ICNlbmRpZiAvLyBQTEFURk9STShJT1MpCkBAIC0zNTksNyArMzU5LDcgQEAgc3RydWN0IEZvbnRE
YXRhQ2FjaGVLZXlUcmFpdHMgOiBXVEY6OkdlbgogICAgIH0KIH07CiAKLXR5cGVkZWYgSGFzaE1h
cDxGb250UGxhdGZvcm1EYXRhLCBSZWZQdHI8U2ltcGxlRm9udERhdGE+LCBGb250RGF0YUNhY2hl
S2V5SGFzaCwgRm9udERhdGFDYWNoZUtleVRyYWl0cz4gRm9udERhdGFDYWNoZTsKK3R5cGVkZWYg
SGFzaE1hcDxGb250UGxhdGZvcm1EYXRhLCBSZWZQdHI8Rm9udD4sIEZvbnREYXRhQ2FjaGVLZXlI
YXNoLCBGb250RGF0YUNhY2hlS2V5VHJhaXRzPiBGb250RGF0YUNhY2hlOwogCiBzdGF0aWMgRm9u
dERhdGFDYWNoZSYgY2FjaGVkRm9udHMoKQogewpAQCAtMzc5LDcgKzM3OSw3IEBAIGNvbnN0IGlu
dCBjVGFyZ2V0SW5hY3RpdmVGb250RGF0YSA9IDIwMDsKIGNvbnN0IGludCBjTWF4VW5kZXJNZW1v
cnlQcmVzc3VyZUluYWN0aXZlRm9udERhdGEgPSA1MDsKIGNvbnN0IGludCBjVGFyZ2V0VW5kZXJN
ZW1vcnlQcmVzc3VyZUluYWN0aXZlRm9udERhdGEgPSAzMDsKIAotUmVmUHRyPFNpbXBsZUZvbnRE
YXRhPiBGb250Q2FjaGU6OmZvbnRGb3JGYW1pbHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5LCBib29sIGNoZWNraW5nQWx0
ZXJuYXRlTmFtZSkKK1JlZlB0cjxGb250PiBGb250Q2FjaGU6OmZvbnRGb3JGYW1pbHkoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFt
aWx5LCBib29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSkKIHsKICAgICBpZiAoIW1fcHVyZ2VUaW1l
ci5pc0FjdGl2ZSgpKQogICAgICAgICBtX3B1cmdlVGltZXIuc3RhcnRPbmVTaG90KHN0ZDo6Y2hy
b25vOjptaWxsaXNlY29uZHM6Onplcm8oKSk7CkBAIC0zOTEsNyArMzkxLDcgQEAgUmVmUHRyPFNp
bXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmZvbnRGbwogICAgIHJldHVybiBmb250Rm9yUGxhdGZv
cm1EYXRhKCpwbGF0Zm9ybURhdGEpOwogfQogCi1SZWY8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNo
ZTo6Zm9udEZvclBsYXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURh
dGEpCitSZWY8Rm9udD4gRm9udENhY2hlOjpmb250Rm9yUGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQ
bGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSkKIHsKICNpZiBQTEFURk9STShJT1MpCiAgICAgRm9u
dExvY2tlciBmb250TG9ja2VyOwpAQCAtMzk5LDcgKzM5OSw3IEBAIFJlZjxTaW1wbGVGb250RGF0
YT4gRm9udENhY2hlOjpmb250Rm9yUGwKICAgICAKICAgICBhdXRvIGFkZFJlc3VsdCA9IGNhY2hl
ZEZvbnRzKCkuYWRkKHBsYXRmb3JtRGF0YSwgbnVsbHB0cik7CiAgICAgaWYgKGFkZFJlc3VsdC5p
c05ld0VudHJ5KQotICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gU2ltcGxlRm9u
dERhdGE6OmNyZWF0ZShwbGF0Zm9ybURhdGEpOworICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3It
PnZhbHVlID0gRm9udDo6Y3JlYXRlKHBsYXRmb3JtRGF0YSk7CiAKICAgICByZXR1cm4gKmFkZFJl
c3VsdC5pdGVyYXRvci0+dmFsdWU7CiB9CkBAIC00MTYsNyArNDE2LDcgQEAgdm9pZCBGb250Q2Fj
aGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YUlmTgogCiAgICAgaWYgKGNhY2hlZEZvbnRzKCkuc2l6
ZSgpIDwgaW5hY3RpdmVGb250RGF0YUxpbWl0KQogICAgICAgICByZXR1cm47Ci0gICAgaW50IGlu
YWN0aXZlQ291bnQgPSBpbmFjdGl2ZUZvbnREYXRhQ291bnQoKTsKKyAgICBpbnQgaW5hY3RpdmVD
b3VudCA9IGluYWN0aXZlRm9udENvdW50KCk7CiAgICAgaWYgKGluYWN0aXZlQ291bnQgPD0gaW5h
Y3RpdmVGb250RGF0YUxpbWl0KQogICAgICAgICByZXR1cm47CiAKQEAgLTQzNCw3ICs0MzQsNyBA
QCB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhKGluCiAjZW5kaWYKIAogICAg
IHdoaWxlIChwdXJnZUNvdW50KSB7Ci0gICAgICAgIFZlY3RvcjxSZWZQdHI8U2ltcGxlRm9udERh
dGE+LCAyMD4gZm9udHNUb0RlbGV0ZTsKKyAgICAgICAgVmVjdG9yPFJlZlB0cjxGb250PiwgMjA+
IGZvbnRzVG9EZWxldGU7CiAgICAgICAgIGZvciAoYXV0byYgZm9udCA6IGNhY2hlZEZvbnRzKCku
dmFsdWVzKCkpIHsKICAgICAgICAgICAgIGlmICghZm9udC0+aGFzT25lUmVmKCkpCiAgICAgICAg
ICAgICAgICAgY29udGludWU7CkBAIC00NjYsOCArNDY2LDggQEAgdm9pZCBGb250Q2FjaGU6OnB1
cmdlSW5hY3RpdmVGb250RGF0YShpbgogICAgICAgICAgICAgaWYgKHZlcnRpY2FsRGF0YSkKICAg
ICAgICAgICAgICAgICB2ZXJ0aWNhbERhdGEtPm1faW5Gb250Q2FjaGUgPSBmYWxzZTsKICAgICAg
ICAgfQotICAgICAgICBmb3IgKGF1dG8mIGZvbnREYXRhIDogY2FjaGVkRm9udHMoKS52YWx1ZXMo
KSkgewotICAgICAgICAgICAgYXV0byogdmVydGljYWxEYXRhID0gY29uc3RfY2FzdDxPcGVuVHlw
ZVZlcnRpY2FsRGF0YSo+KGZvbnREYXRhLT52ZXJ0aWNhbERhdGEoKSk7CisgICAgICAgIGZvciAo
YXV0byYgZm9udCA6IGNhY2hlZEZvbnRzKCkudmFsdWVzKCkpIHsKKyAgICAgICAgICAgIGF1dG8q
IHZlcnRpY2FsRGF0YSA9IGNvbnN0X2Nhc3Q8T3BlblR5cGVWZXJ0aWNhbERhdGEqPihmb250LT52
ZXJ0aWNhbERhdGEoKSk7CiAgICAgICAgICAgICBpZiAodmVydGljYWxEYXRhKQogICAgICAgICAg
ICAgICAgIHZlcnRpY2FsRGF0YS0+bV9pbkZvbnRDYWNoZSA9IHRydWU7CiAgICAgICAgIH0KQEAg
LTQ4MywxMiArNDgzLDEyIEBAIHZvaWQgRm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGEo
aW4KICNlbmRpZgogfQogCi1zaXplX3QgRm9udENhY2hlOjpmb250RGF0YUNvdW50KCkKK3NpemVf
dCBGb250Q2FjaGU6OmZvbnRDb3VudCgpCiB7CiAgICAgcmV0dXJuIGNhY2hlZEZvbnRzKCkuc2l6
ZSgpOwogfQogCi1zaXplX3QgRm9udENhY2hlOjppbmFjdGl2ZUZvbnREYXRhQ291bnQoKQorc2l6
ZV90IEZvbnRDYWNoZTo6aW5hY3RpdmVGb250Q291bnQoKQogewogI2lmIFBMQVRGT1JNKElPUykK
ICAgICBGb250TG9ja2VyIGZvbnRMb2NrZXI7CkBAIC01NTEsNyArNTUxLDcgQEAgdm9pZCBGb250
Q2FjaGU6OmludmFsaWRhdGUoKQogfQogCiAjaWYgIVBMQVRGT1JNKENPQ09BKQotUmVmUHRyPFNp
bXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OnNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYpCitSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpzaW1pbGFyRm9udChjb25z
dCBGb250RGVzY3JpcHRpb24mKQogewogICAgIHJldHVybiBudWxscHRyOwogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgJKHJldmlzaW9uIDE3
ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIGNsYXNzIEZvbnRDYXNjYWRlOwogY2xhc3Mg
Rm9udFBsYXRmb3JtRGF0YTsKIGNsYXNzIEZvbnRTZWxlY3RvcjsKIGNsYXNzIE9wZW5UeXBlVmVy
dGljYWxEYXRhOwotY2xhc3MgU2ltcGxlRm9udERhdGE7CitjbGFzcyBGb250OwogCiAjaWYgUExB
VEZPUk0oV0lOKQogI2lmIFVTRShJTUxBTkdfRk9OVF9MSU5LMikKQEAgLTExMSw3ICsxMTEsNyBA
QCBwdWJsaWM6CiAgICAgZnJpZW5kIEZvbnRDYWNoZSYgZm9udENhY2hlKCk7CiAKICAgICAvLyBU
aGlzIG1ldGhvZCBpcyBpbXBsZW1lbnRlZCBieSB0aGUgcGxhdGZvcm0uCi0gICAgUmVmUHRyPFNp
bXBsZUZvbnREYXRhPiBzeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiwgY29uc3QgU2ltcGxlRm9udERhdGEqIG9yaWdpbmFsRm9udERhdGEsIGJvb2wgaXNQ
bGF0Zm9ybUZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKTsKKyAgICBS
ZWZQdHI8Rm9udD4gc3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYsIGNvbnN0IEZvbnQqIG9yaWdpbmFsRm9udERhdGEsIGJvb2wgaXNQbGF0Zm9ybUZvbnQs
IGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKTsKIAogICAgIC8vIEFsc28gaW1w
bGVtZW50ZWQgYnkgdGhlIHBsYXRmb3JtLgogICAgIHZvaWQgcGxhdGZvcm1Jbml0KCk7CkBAIC0x
MjgsMTAgKzEyOCwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdldFRyYWl0c0luRmFtaWx5KGNv
bnN0IEF0b21pY1N0cmluZyYsIFZlY3Rvcjx1bnNpZ25lZD4mKTsKIAotICAgIFdFQkNPUkVfRVhQ
T1JUIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gZm9udEZvckZhbWlseShjb25zdCBGb250RGVzY3Jp
cHRpb24mLCBjb25zdCBBdG9taWNTdHJpbmcmLCBib29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSA9
IGZhbHNlKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWY8U2ltcGxlRm9udERhdGE+IGxhc3RSZXNv
cnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJik7Ci0gICAgV0VCQ09SRV9FWFBP
UlQgUmVmPFNpbXBsZUZvbnREYXRhPiBmb250Rm9yUGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0
Zm9ybURhdGEmKTsKLSAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IHNpbWlsYXJGb250UGxhdGZv
cm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpOworICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0
cjxGb250PiBmb250Rm9yRmFtaWx5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21p
Y1N0cmluZyYsIGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1lID0gZmFsc2UpOworICAgIFdFQkNP
UkVfRVhQT1JUIFJlZjxGb250PiBsYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYpOworICAgIFdFQkNPUkVfRVhQT1JUIFJlZjxGb250PiBmb250Rm9yUGxhdGZvcm1E
YXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsKKyAgICBSZWZQdHI8Rm9udD4gc2ltaWxhckZv
bnQoY29uc3QgRm9udERlc2NyaXB0aW9uJik7CiAKICAgICB2b2lkIGFkZENsaWVudChGb250U2Vs
ZWN0b3IqKTsKICAgICB2b2lkIHJlbW92ZUNsaWVudChGb250U2VsZWN0b3IqKTsKQEAgLTEzOSwx
MiArMTM5LDEyIEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBzaG9ydCBnZW5lcmF0aW9uKCk7CiAg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBpbnZhbGlkYXRlKCk7CiAKLSAgICBXRUJDT1JFX0VYUE9S
VCBzaXplX3QgZm9udERhdGFDb3VudCgpOwotICAgIFdFQkNPUkVfRVhQT1JUIHNpemVfdCBpbmFj
dGl2ZUZvbnREYXRhQ291bnQoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzaXplX3QgZm9udENvdW50
KCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc2l6ZV90IGluYWN0aXZlRm9udENvdW50KCk7CiAgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBwdXJnZUluYWN0aXZlRm9udERhdGEoaW50IGNvdW50ID0gSU5U
X01BWCk7CiAKICNpZiBQTEFURk9STShXSU4pCi0gICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBm
b250RGF0YUZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwg
Y29uc3QgTE9HRk9OVCYsIEF0b21pY1N0cmluZyYgb3V0Rm9udEZhbWlseU5hbWUpOworICAgIFJl
ZlB0cjxGb250PiBmb250RnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChjb25zdCBGb250RGVzY3Jp
cHRpb24mLCBjb25zdCBMT0dGT05UJiwgQXRvbWljU3RyaW5nJiBvdXRGb250RmFtaWx5TmFtZSk7
CiAjZW5kaWYKIAogI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKQEAgLTE3Myw3ICsxNzMs
NyBAQCBwcml2YXRlOgogICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIGltcGxlbWVudGVkIGJ5IGVh
Y2ggcGxhdGZvcm0uCiAjaWYgUExBVEZPUk0oSU9TKQogICAgIEZvbnRQbGF0Zm9ybURhdGEqIGdl
dEN1c3RvbUZhbGxiYWNrRm9udChjb25zdCBVSW50MzIsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYp
OwotICAgIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IGdldFN5c3RlbUZvbnRGYWxsYmFja0Zv
ckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgU2ltcGxlRm9udERhdGEq
LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCk7CisgICAgUGFzc1JlZlB0cjxG
b250PiBnZXRTeXN0ZW1Gb250RmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYsIGNvbnN0IEZvbnQqLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCk7
CiAjZW5kaWYKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4gY3JlYXRlRm9u
dFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9taWNTdHJpbmcm
IGZhbWlseSk7CiAKQEAgLTE4Miw3ICsxODIsNyBAQCBwcml2YXRlOgogI2lmIFBMQVRGT1JNKENP
Q09BKQogICAgIGZyaWVuZCBjbGFzcyBDb21wbGV4VGV4dENvbnRyb2xsZXI7CiAjZW5kaWYKLSAg
ICBmcmllbmQgY2xhc3MgU2ltcGxlRm9udERhdGE7CisgICAgZnJpZW5kIGNsYXNzIEZvbnQ7CiB9
OwogCiAvLyBHZXQgdGhlIGdsb2JhbCBmb250Q2FjaGUuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCShyZXZpc2lvbiAxNzg4NTcp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEyNCw4ICsxMjQsOCBAQCBGb250Q2FzY2FkZTo6Rm9udENhc2NhZGUo
Y29uc3QgRm9udERlc2NyCiB9CiAKIC8vIEZJWE1FOiBXZSBzaG91bGQgbWFrZSB0aGlzIGNvbnN0
cnVjdG9yIHBsYXRmb3JtLWluZGVwZW5kZW50LgotRm9udENhc2NhZGU6OkZvbnRDYXNjYWRlKGNv
bnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnREYXRhLCBib29sIGlzUHJpbnRlckZvbnQsIEZvbnRT
bW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmdNb2RlKQotICAgIDogbV9nbHlwaHMoRm9udEdseXBo
czo6Y3JlYXRlRm9yUGxhdGZvcm1Gb250KGZvbnREYXRhKSkKK0ZvbnRDYXNjYWRlOjpGb250Q2Fz
Y2FkZShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBmb250LCBib29sIGlzUHJpbnRlckZvbnQsIEZv
bnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmdNb2RlKQorICAgIDogbV9nbHlwaHMoRm9udEds
eXBoczo6Y3JlYXRlRm9yUGxhdGZvcm1Gb250KGZvbnQpKQogICAgICwgbV9sZXR0ZXJTcGFjaW5n
KDApCiAgICAgLCBtX3dvcmRTcGFjaW5nKDApCiAgICAgLCBtX3VzZUJhY2tzbGFzaEFzWWVuU3lt
Ym9sKGZhbHNlKQpAQCAtMTM0LDI3ICsxMzQsMjcgQEAgRm9udENhc2NhZGU6OkZvbnRDYXNjYWRl
KGNvbnN0IEZvbnRQbGF0ZgogICAgIG1fZm9udERlc2NyaXB0aW9uLnNldFVzZVByaW50ZXJGb250
KGlzUHJpbnRlckZvbnQpOwogICAgIG1fZm9udERlc2NyaXB0aW9uLnNldEZvbnRTbW9vdGhpbmco
Zm9udFNtb290aGluZ01vZGUpOwogI2lmIFBMQVRGT1JNKElPUykKLSAgICBtX2ZvbnREZXNjcmlw
dGlvbi5zZXRTcGVjaWZpZWRTaXplKENURm9udEdldFNpemUoZm9udERhdGEuZm9udCgpKSk7Ci0g
ICAgbV9mb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKENURm9udEdldFNpemUoZm9udERh
dGEuZm9udCgpKSk7Ci0gICAgbV9mb250RGVzY3JpcHRpb24uc2V0SXNJdGFsaWMoQ1RGb250R2V0
U3ltYm9saWNUcmFpdHMoZm9udERhdGEuZm9udCgpKSAmIGtDVEZvbnRUcmFpdEl0YWxpYyk7Ci0g
ICAgbV9mb250RGVzY3JpcHRpb24uc2V0V2VpZ2h0KChDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhm
b250RGF0YS5mb250KCkpICYga0NURm9udFRyYWl0Qm9sZCkgPyBGb250V2VpZ2h0Qm9sZCA6IEZv
bnRXZWlnaHROb3JtYWwpOworICAgIG1fZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUo
Q1RGb250R2V0U2l6ZShmb250LmZvbnQoKSkpOworICAgIG1fZm9udERlc2NyaXB0aW9uLnNldENv
bXB1dGVkU2l6ZShDVEZvbnRHZXRTaXplKGZvbnQuZm9udCgpKSk7CisgICAgbV9mb250RGVzY3Jp
cHRpb24uc2V0SXNJdGFsaWMoQ1RGb250R2V0U3ltYm9saWNUcmFpdHMoZm9udC5mb250KCkpICYg
a0NURm9udFRyYWl0SXRhbGljKTsKKyAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRXZWlnaHQoKENU
Rm9udEdldFN5bWJvbGljVHJhaXRzKGZvbnQuZm9udCgpKSAmIGtDVEZvbnRUcmFpdEJvbGQpID8g
Rm9udFdlaWdodEJvbGQgOiBGb250V2VpZ2h0Tm9ybWFsKTsKICNlbmRpZgogfQogCiAvLyBGSVhN
RTogV2Ugc2hvdWxkIG1ha2UgdGhpcyBjb25zdHJ1Y3RvciBwbGF0Zm9ybS1pbmRlcGVuZGVudC4K
ICNpZiBQTEFURk9STShJT1MpCi1Gb250Q2FzY2FkZTo6Rm9udENhc2NhZGUoY29uc3QgRm9udFBs
YXRmb3JtRGF0YSYgZm9udERhdGEsIFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPiBmb250U2VsZWN0
b3IpCi0gICAgOiBtX2dseXBocyhGb250R2x5cGhzOjpjcmVhdGVGb3JQbGF0Zm9ybUZvbnQoZm9u
dERhdGEpKQorRm9udENhc2NhZGU6OkZvbnRDYXNjYWRlKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEm
IGZvbnQsIFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPiBmb250U2VsZWN0b3IpCisgICAgOiBtX2ds
eXBocyhGb250R2x5cGhzOjpjcmVhdGVGb3JQbGF0Zm9ybUZvbnQoZm9udCkpCiAgICAgLCBtX2xl
dHRlclNwYWNpbmcoMCkKICAgICAsIG1fd29yZFNwYWNpbmcoMCkKICAgICAsIG1fdHlwZXNldHRp
bmdGZWF0dXJlcyhjb21wdXRlVHlwZXNldHRpbmdGZWF0dXJlcygpKQogewotICAgIENURm9udFJl
ZiBwcmltYXJ5Rm9udCA9IGZvbnREYXRhLmZvbnQoKTsKKyAgICBDVEZvbnRSZWYgcHJpbWFyeUZv
bnQgPSBmb250LmZvbnQoKTsKICAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXpl
KENURm9udEdldFNpemUocHJpbWFyeUZvbnQpKTsKICAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRD
b21wdXRlZFNpemUoQ1RGb250R2V0U2l6ZShwcmltYXJ5Rm9udCkpOwogICAgIG1fZm9udERlc2Ny
aXB0aW9uLnNldElzSXRhbGljKENURm9udEdldFN5bWJvbGljVHJhaXRzKHByaW1hcnlGb250KSAm
IGtDVEZvbnRUcmFpdEl0YWxpYyk7CiAgICAgbV9mb250RGVzY3JpcHRpb24uc2V0V2VpZ2h0KChD
VEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhwcmltYXJ5Rm9udCkgJiBrQ1RGb250VHJhaXRCb2xkKSA/
IEZvbnRXZWlnaHRCb2xkIDogRm9udFdlaWdodE5vcm1hbCk7Ci0gICAgbV9mb250RGVzY3JpcHRp
b24uc2V0VXNlUHJpbnRlckZvbnQoZm9udERhdGEuaXNQcmludGVyRm9udCgpKTsKKyAgICBtX2Zv
bnREZXNjcmlwdGlvbi5zZXRVc2VQcmludGVyRm9udChmb250LmlzUHJpbnRlckZvbnQoKSk7CiAg
ICAgbV9nbHlwaHMgPSByZXRyaWV2ZU9yQWRkQ2FjaGVkRm9udEdseXBocyhtX2ZvbnREZXNjcmlw
dGlvbiwgZm9udFNlbGVjdG9yLmdldCgpKTsKIH0KICNlbmRpZgpAQCAtMzcxLDcgKzM3MSw3IEBA
IHZvaWQgRm9udENhc2NhZGU6OmRyYXdFbXBoYXNpc01hcmtzKEdyYXAKICAgICAgICAgZHJhd0Vt
cGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChjb250ZXh0LCBydW4sIG1hcmssIHBvaW50LCBmcm9t
LCB0byk7CiB9CiAKLWZsb2F0IEZvbnRDYXNjYWRlOjp3aWR0aChjb25zdCBUZXh0UnVuJiBydW4s
IEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVy
ZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKK2Zsb2F0IEZvbnRDYXNjYWRlOjp3aWR0aChjb25z
dCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzLCBHbHlw
aE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAogewogICAgIENvZGVQYXRoIGNvZGVQYXRo
VG9Vc2UgPSBjb2RlUGF0aChydW4pOwogICAgIGlmIChjb2RlUGF0aFRvVXNlICE9IENvbXBsZXgp
IHsKQEAgLTM4OSw3ICszODksNyBAQCBmbG9hdCBGb250Q2FzY2FkZTo6d2lkdGgoY29uc3QgVGV4
dFJ1biYgCiAgICAgaWYgKGNhY2hlRW50cnkgJiYgIXN0ZDo6aXNuYW4oKmNhY2hlRW50cnkpKQog
ICAgICAgICByZXR1cm4gKmNhY2hlRW50cnk7CiAKLSAgICBIYXNoU2V0PGNvbnN0IFNpbXBsZUZv
bnREYXRhKj4gbG9jYWxGYWxsYmFja0ZvbnRzOworICAgIEhhc2hTZXQ8Y29uc3QgRm9udCo+IGxv
Y2FsRmFsbGJhY2tGb250czsKICAgICBpZiAoIWZhbGxiYWNrRm9udHMpCiAgICAgICAgIGZhbGxi
YWNrRm9udHMgPSAmbG9jYWxGYWxsYmFja0ZvbnRzOwogCkBAIC00MTYsMTAgKzQxNiwxMCBAQCBm
bG9hdCBGb250Q2FzY2FkZTo6d2lkdGgoY29uc3QgVGV4dFJ1biYgCiAgICAgcmV0dXJuIHdpZHRo
KHJ1bik7CiB9CiAKLUdseXBoRGF0YSBGb250Q2FzY2FkZTo6Z2x5cGhEYXRhRm9yQ2hhcmFjdGVy
KFVDaGFyMzIgYywgYm9vbCBtaXJyb3IsIEZvbnREYXRhVmFyaWFudCB2YXJpYW50KSBjb25zdAor
R2x5cGhEYXRhIEZvbnRDYXNjYWRlOjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjLCBi
b29sIG1pcnJvciwgRm9udFZhcmlhbnQgdmFyaWFudCkgY29uc3QKIHsKICAgICBpZiAodmFyaWFu
dCA9PSBBdXRvVmFyaWFudCkgewotICAgICAgICBpZiAobV9mb250RGVzY3JpcHRpb24uc21hbGxD
YXBzKCkgJiYgIXByaW1hcnlGb250RGF0YSgpLmlzU1ZHRm9udCgpKSB7CisgICAgICAgIGlmICht
X2ZvbnREZXNjcmlwdGlvbi5zbWFsbENhcHMoKSAmJiAhcHJpbWFyeUZvbnQoKS5pc1NWR0ZvbnQo
KSkgewogICAgICAgICAgICAgVUNoYXIzMiB1cHBlckMgPSB1X3RvdXBwZXIoYyk7CiAgICAgICAg
ICAgICBpZiAodXBwZXJDICE9IGMpIHsKICAgICAgICAgICAgICAgICBjID0gdXBwZXJDOwpAQCAt
NDQ2LDcgKzQ0Niw3IEBAIHZvaWQgRm9udENhc2NhZGU6OmRlbGV0ZUxheW91dChUZXh0TGF5b3UK
IHsKIH0KIAotZmxvYXQgRm9udENhc2NhZGU6OndpZHRoKFRleHRMYXlvdXQmLCB1bnNpZ25lZCwg
dW5zaWduZWQsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiopCitmbG9hdCBGb250Q2Fz
Y2FkZTo6d2lkdGgoVGV4dExheW91dCYsIHVuc2lnbmVkLCB1bnNpZ25lZCwgSGFzaFNldDxjb25z
dCBGb250Kj4qKQogewogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiAwOwpA
QCAtNTA1LDcgKzUwNSw3IEBAIGJvb2wgRm9udENhc2NhZGU6Omhhc1ZhbGlkQXZlcmFnZUNoYXJX
aWQKIAogI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oSU9TKQogICAgIC8vIEludGVybmFs
IGZvbnRzIG9uIE9TIFggYW5kIGlPUyBhbHNvIGhhdmUgYW4gaW52YWxpZCBlbnRyeSBpbiB0aGUg
dGFibGUgZm9yIGF2Z0NoYXJXaWR0aC4KLSAgICBpZiAocHJpbWFyeUZvbnREYXRhSXNTeXN0ZW1G
b250KCkpCisgICAgaWYgKHByaW1hcnlGb250SXNTeXN0ZW1Gb250KCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICNlbmRpZgogCkBAIC01MjUsNyArNTI1LDcgQEAgYm9vbCBGb250Q2FzY2FkZTo6
ZmFzdEF2ZXJhZ2VDaGFyV2lkdGhJZgogewogICAgIGJvb2wgc3VjY2VzcyA9IGhhc1ZhbGlkQXZl
cmFnZUNoYXJXaWR0aCgpOwogICAgIGlmIChzdWNjZXNzKQotICAgICAgICB3aWR0aCA9IHJvdW5k
ZihwcmltYXJ5Rm9udERhdGEoKS5hdmdDaGFyV2lkdGgoKSk7IC8vIEZJWE1FOiBwcmltYXJ5Rm9u
dERhdGEoKSBtaWdodCBub3QgY29ycmVzcG9uZCB0byBmaXJzdEZhbWlseSgpLgorICAgICAgICB3
aWR0aCA9IHJvdW5kZihwcmltYXJ5Rm9udCgpLmF2Z0NoYXJXaWR0aCgpKTsgLy8gRklYTUU6IHBy
aW1hcnlGb250KCkgbWlnaHQgbm90IGNvcnJlc3BvbmQgdG8gZmlyc3RGYW1pbHkoKS4KICAgICBy
ZXR1cm4gc3VjY2VzczsKIH0KIApAQCAtMTE3Myw3ICsxMTczLDcgQEAgaW50IEZvbnRDYXNjYWRl
OjplbXBoYXNpc01hcmtBc2NlbnQoY29ucwogICAgIGlmICghZ2V0RW1waGFzaXNNYXJrR2x5cGhE
YXRhKG1hcmssIG1hcmtHbHlwaERhdGEpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIGNvbnN0
IFNpbXBsZUZvbnREYXRhKiBtYXJrRm9udERhdGEgPSBtYXJrR2x5cGhEYXRhLmZvbnREYXRhOwor
ICAgIGNvbnN0IEZvbnQqIG1hcmtGb250RGF0YSA9IG1hcmtHbHlwaERhdGEuZm9udDsKICAgICBB
U1NFUlQobWFya0ZvbnREYXRhKTsKICAgICBpZiAoIW1hcmtGb250RGF0YSkKICAgICAgICAgcmV0
dXJuIDA7CkBAIC0xMTg3LDcgKzExODcsNyBAQCBpbnQgRm9udENhc2NhZGU6OmVtcGhhc2lzTWFy
a0Rlc2NlbnQoY29uCiAgICAgaWYgKCFnZXRFbXBoYXNpc01hcmtHbHlwaERhdGEobWFyaywgbWFy
a0dseXBoRGF0YSkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgY29uc3QgU2ltcGxlRm9udERh
dGEqIG1hcmtGb250RGF0YSA9IG1hcmtHbHlwaERhdGEuZm9udERhdGE7CisgICAgY29uc3QgRm9u
dCogbWFya0ZvbnREYXRhID0gbWFya0dseXBoRGF0YS5mb250OwogICAgIEFTU0VSVChtYXJrRm9u
dERhdGEpOwogICAgIGlmICghbWFya0ZvbnREYXRhKQogICAgICAgICByZXR1cm4gMDsKQEAgLTEy
MDEsNyArMTIwMSw3IEBAIGludCBGb250Q2FzY2FkZTo6ZW1waGFzaXNNYXJrSGVpZ2h0KGNvbnMK
ICAgICBpZiAoIWdldEVtcGhhc2lzTWFya0dseXBoRGF0YShtYXJrLCBtYXJrR2x5cGhEYXRhKSkK
ICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBjb25zdCBTaW1wbGVGb250RGF0YSogbWFya0ZvbnRE
YXRhID0gbWFya0dseXBoRGF0YS5mb250RGF0YTsKKyAgICBjb25zdCBGb250KiBtYXJrRm9udERh
dGEgPSBtYXJrR2x5cGhEYXRhLmZvbnQ7CiAgICAgQVNTRVJUKG1hcmtGb250RGF0YSk7CiAgICAg
aWYgKCFtYXJrRm9udERhdGEpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMTI3Myw3ICsxMjczLDcg
QEAgdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBoQnVmZmVyKEdyYXBoaQogI2VuZGlmCiAKICAg
ICAvLyBEcmF3IGVhY2ggY29udGlndW91cyBydW4gb2YgZ2x5cGhzIHRoYXQgdXNlIHRoZSBzYW1l
IGZvbnQgZGF0YS4KLSAgICBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEgPSBnbHlwaEJ1
ZmZlci5mb250RGF0YUF0KDApOworICAgIGNvbnN0IEZvbnQqIGZvbnREYXRhID0gZ2x5cGhCdWZm
ZXIuZm9udEF0KDApOwogICAgIEZsb2F0U2l6ZSBvZmZzZXQgPSBnbHlwaEJ1ZmZlci5vZmZzZXRB
dCgwKTsKICAgICBGbG9hdFBvaW50IHN0YXJ0UG9pbnQocG9pbnQueCgpLCBwb2ludC55KCkgLSBn
bHlwaEJ1ZmZlci5pbml0aWFsQWR2YW5jZSgpLmhlaWdodCgpKTsKICAgICBmbG9hdCBuZXh0WCA9
IHN0YXJ0UG9pbnQueCgpICsgZ2x5cGhCdWZmZXIuYWR2YW5jZUF0KDApLndpZHRoKCk7CkBAIC0x
Mjg0LDcgKzEyODQsNyBAQCB2b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhCdWZmZXIoR3JhcGhp
CiAgICAgVGV4dFJ1bjo6UmVuZGVyaW5nQ29udGV4dCogcmVuZGVyaW5nQ29udGV4dCA9IHJ1bi5y
ZW5kZXJpbmdDb250ZXh0KCk7CiAjZW5kaWYKICAgICB3aGlsZSAobmV4dEdseXBoIDwgZ2x5cGhC
dWZmZXIuc2l6ZSgpKSB7Ci0gICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBuZXh0Rm9udERh
dGEgPSBnbHlwaEJ1ZmZlci5mb250RGF0YUF0KG5leHRHbHlwaCk7CisgICAgICAgIGNvbnN0IEZv
bnQqIG5leHRGb250RGF0YSA9IGdseXBoQnVmZmVyLmZvbnRBdChuZXh0R2x5cGgpOwogICAgICAg
ICBGbG9hdFNpemUgbmV4dE9mZnNldCA9IGdseXBoQnVmZmVyLm9mZnNldEF0KG5leHRHbHlwaCk7
CiAKICAgICAgICAgaWYgKG5leHRGb250RGF0YSAhPSBmb250RGF0YSB8fCBuZXh0T2Zmc2V0ICE9
IG9mZnNldCkgewpAQCAtMTMxNyw3ICsxMzE3LDcgQEAgdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0ds
eXBoQnVmZmVyKEdyYXBoaQogICAgIH0KIH0KIAotaW5saW5lIHN0YXRpYyBmbG9hdCBvZmZzZXRU
b01pZGRsZU9mR2x5cGgoY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhLCBHbHlwaCBnbHlw
aCkKK2lubGluZSBzdGF0aWMgZmxvYXQgb2Zmc2V0VG9NaWRkbGVPZkdseXBoKGNvbnN0IEZvbnQq
IGZvbnREYXRhLCBHbHlwaCBnbHlwaCkKIHsKICAgICBpZiAoZm9udERhdGEtPnBsYXRmb3JtRGF0
YSgpLm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbCkgewogICAgICAgICBGbG9hdFJlY3QgYm91
bmRzID0gZm9udERhdGEtPmJvdW5kc0ZvckdseXBoKGdseXBoKTsKQEAgLTEzMjksNyArMTMyOSw3
IEBAIGlubGluZSBzdGF0aWMgZmxvYXQgb2Zmc2V0VG9NaWRkbGVPZkdseXAKIAogaW5saW5lIHN0
YXRpYyBmbG9hdCBvZmZzZXRUb01pZGRsZU9mR2x5cGhBdEluZGV4KGNvbnN0IEdseXBoQnVmZmVy
JiBnbHlwaEJ1ZmZlciwgc2l6ZV90IGkpCiB7Ci0gICAgcmV0dXJuIG9mZnNldFRvTWlkZGxlT2ZH
bHlwaChnbHlwaEJ1ZmZlci5mb250RGF0YUF0KGkpLCBnbHlwaEJ1ZmZlci5nbHlwaEF0KGkpKTsK
KyAgICByZXR1cm4gb2Zmc2V0VG9NaWRkbGVPZkdseXBoKGdseXBoQnVmZmVyLmZvbnRBdChpKSwg
Z2x5cGhCdWZmZXIuZ2x5cGhBdChpKSk7CiB9CiAKIHZvaWQgRm9udENhc2NhZGU6OmRyYXdFbXBo
YXNpc01hcmtzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBj
b25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0CkBAIC0xMzM4LDcgKzEzMzgsNyBAQCB2b2lk
IEZvbnRDYXNjYWRlOjpkcmF3RW1waGFzaXNNYXJrcyhHcmFwCiAgICAgaWYgKCFnZXRFbXBoYXNp
c01hcmtHbHlwaERhdGEobWFyaywgbWFya0dseXBoRGF0YSkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBtYXJrRm9udERhdGEgPSBtYXJrR2x5cGhEYXRhLmZv
bnREYXRhOworICAgIGNvbnN0IEZvbnQqIG1hcmtGb250RGF0YSA9IG1hcmtHbHlwaERhdGEuZm9u
dDsKICAgICBBU1NFUlQobWFya0ZvbnREYXRhKTsKICAgICBpZiAoIW1hcmtGb250RGF0YSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMTM2MSw3ICsxMzYxLDcgQEAgdm9pZCBGb250Q2FzY2FkZTo6ZHJh
d0VtcGhhc2lzTWFya3MoR3JhcAogICAgIGRyYXdHbHlwaEJ1ZmZlcihjb250ZXh0LCBydW4sIG1h
cmtCdWZmZXIsIHN0YXJ0UG9pbnQpOwogfQogCi1mbG9hdCBGb250Q2FzY2FkZTo6ZmxvYXRXaWR0
aEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZv
bnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNv
bnN0CitmbG9hdCBGb250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZvclNpbXBsZVRleHQoY29uc3QgVGV4
dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVy
ZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKIHsKICAgICBXaWR0aEl0ZXJhdG9yIGl0KHRoaXMs
IHJ1biwgZmFsbGJhY2tGb250cywgZ2x5cGhPdmVyZmxvdyk7CiAgICAgR2x5cGhCdWZmZXIgZ2x5
cGhCdWZmZXI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2Fz
Y2FkZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRDYXNjYWRlLmgJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEwICsyNiwxMCBA
QAogI2RlZmluZSBGb250Q2FzY2FkZV9oCiAKICNpbmNsdWRlICJEYXNoQXJyYXkuaCIKKyNpbmNs
dWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiRm9u
dEdseXBocy5oIgogI2luY2x1ZGUgIlBhdGguaCIKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5o
IgogI2luY2x1ZGUgIlRleHREaXJlY3Rpb24uaCIKICNpbmNsdWRlICJUeXBlc2V0dGluZ0ZlYXR1
cmVzLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTEzNCwxNyArMTM0LDE3IEBAIHB1
YmxpYzoKIAogICAgIGVudW0gQ3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uIHsgRG9Ob3RQYWludElm
Rm9udE5vdFJlYWR5LCBVc2VGYWxsYmFja0lmRm9udE5vdFJlYWR5IH07CiAgICAgV0VCQ09SRV9F
WFBPUlQgZmxvYXQgZHJhd1RleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNv
bnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0xLCBDdXN0b21Gb250Tm90
UmVhZHlBY3Rpb24gPSBEb05vdFBhaW50SWZGb250Tm90UmVhZHkpIGNvbnN0OwotICAgIHZvaWQg
ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBTaW1wbGVGb250RGF0YSosIGNvbnN0
IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQm
KSBjb25zdDsKKyAgICB2b2lkIGRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRm9u
dCosIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZs
b2F0UG9pbnQmKSBjb25zdDsKICAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKEdyYXBoaWNzQ29u
dGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZs
b2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0xKSBjb25zdDsKIAogICAgIERhc2hB
cnJheSBkYXNoZXNGb3JJbnRlcnNlY3Rpb25zV2l0aFJlY3QoY29uc3QgVGV4dFJ1biYsIGNvbnN0
IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIGNvbnN0IEZsb2F0UmVjdCYgbGluZUV4dGVudHMpIGNv
bnN0OwogCi0gICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQgd2lkdGgoY29uc3QgVGV4dFJ1biYsIEhh
c2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDAsIEdseXBoT3Zl
cmZsb3cqID0gMCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQgd2lkdGgoY29uc3Qg
VGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5cGhP
dmVyZmxvdyogPSAwKSBjb25zdDsKICAgICBmbG9hdCB3aWR0aChjb25zdCBUZXh0UnVuJiwgaW50
JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcmIGdseXBoTmFtZSkgY29uc3Q7CiAKICAgICBQYXNzT3du
UHRyPFRleHRMYXlvdXQ+IGNyZWF0ZUxheW91dChSZW5kZXJUZXh0KiwgZmxvYXQgeFBvcywgYm9v
bCBjb2xsYXBzZVdoaXRlU3BhY2UpIGNvbnN0OwogICAgIHN0YXRpYyB2b2lkIGRlbGV0ZUxheW91
dChUZXh0TGF5b3V0Kik7Ci0gICAgc3RhdGljIGZsb2F0IHdpZHRoKFRleHRMYXlvdXQmLCB1bnNp
Z25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiog
ZmFsbGJhY2tGb250cyA9IDApOworICAgIHN0YXRpYyBmbG9hdCB3aWR0aChUZXh0TGF5b3V0Jiwg
dW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJh
Y2tGb250cyA9IDApOwogCiAgICAgaW50IG9mZnNldEZvclBvc2l0aW9uKGNvbnN0IFRleHRSdW4m
LCBmbG9hdCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3Q7CiAgICAg
dm9pZCBhZGp1c3RTZWxlY3Rpb25SZWN0Rm9yVGV4dChjb25zdCBUZXh0UnVuJiwgTGF5b3V0UmVj
dCYgc2VsZWN0aW9uUmVjdCwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSkgY29uc3Q7CkBAIC0x
NzIsMTAgKzE3MiwxMCBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzUGxhdGZvcm1Gb250KCkgY29u
c3QgeyByZXR1cm4gbV9nbHlwaHMtPmlzRm9yUGxhdGZvcm1Gb250KCk7IH0KIAotICAgIGNvbnN0
IEZvbnRNZXRyaWNzJiBmb250TWV0cmljcygpIGNvbnN0IHsgcmV0dXJuIHByaW1hcnlGb250RGF0
YSgpLmZvbnRNZXRyaWNzKCk7IH0KLSAgICBmbG9hdCBzcGFjZVdpZHRoKCkgY29uc3QgeyByZXR1
cm4gcHJpbWFyeUZvbnREYXRhKCkuc3BhY2VXaWR0aCgpICsgbV9sZXR0ZXJTcGFjaW5nOyB9Ci0g
ICAgZmxvYXQgdGFiV2lkdGgoY29uc3QgU2ltcGxlRm9udERhdGEmLCB1bnNpZ25lZCB0YWJTaXpl
LCBmbG9hdCBwb3NpdGlvbikgY29uc3Q7Ci0gICAgZmxvYXQgdGFiV2lkdGgodW5zaWduZWQgdGFi
U2l6ZSwgZmxvYXQgcG9zaXRpb24pIGNvbnN0IHsgcmV0dXJuIHRhYldpZHRoKHByaW1hcnlGb250
RGF0YSgpLCB0YWJTaXplLCBwb3NpdGlvbik7IH0KKyAgICBjb25zdCBGb250TWV0cmljcyYgZm9u
dE1ldHJpY3MoKSBjb25zdCB7IHJldHVybiBwcmltYXJ5Rm9udCgpLmZvbnRNZXRyaWNzKCk7IH0K
KyAgICBmbG9hdCBzcGFjZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gcHJpbWFyeUZvbnQoKS5zcGFj
ZVdpZHRoKCkgKyBtX2xldHRlclNwYWNpbmc7IH0KKyAgICBmbG9hdCB0YWJXaWR0aChjb25zdCBG
b250JiwgdW5zaWduZWQgdGFiU2l6ZSwgZmxvYXQgcG9zaXRpb24pIGNvbnN0OworICAgIGZsb2F0
IHRhYldpZHRoKHVuc2lnbmVkIHRhYlNpemUsIGZsb2F0IHBvc2l0aW9uKSBjb25zdCB7IHJldHVy
biB0YWJXaWR0aChwcmltYXJ5Rm9udCgpLCB0YWJTaXplLCBwb3NpdGlvbik7IH0KICAgICBib29s
IGhhc1ZhbGlkQXZlcmFnZUNoYXJXaWR0aCgpIGNvbnN0OwogICAgIGJvb2wgZmFzdEF2ZXJhZ2VD
aGFyV2lkdGhJZkF2YWlsYWJsZShmbG9hdCAmd2lkdGgpIGNvbnN0OyAvLyByZXR1cm5zIHRydWUg
b24gc3VjY2VzcwogCkBAIC0xODMsMTIgKzE4MywxMiBAQCBwdWJsaWM6CiAgICAgaW50IGVtcGhh
c2lzTWFya0Rlc2NlbnQoY29uc3QgQXRvbWljU3RyaW5nJikgY29uc3Q7CiAgICAgaW50IGVtcGhh
c2lzTWFya0hlaWdodChjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdDsKIAotICAgIGNvbnN0IFNp
bXBsZUZvbnREYXRhJiBwcmltYXJ5Rm9udERhdGEoKSBjb25zdDsKKyAgICBjb25zdCBGb250JiBw
cmltYXJ5Rm9udCgpIGNvbnN0OwogICAgIGNvbnN0IEZvbnRSYW5nZXMmIGZhbGxiYWNrUmFuZ2Vz
QXQodW5zaWduZWQpIGNvbnN0OwotICAgIEdseXBoRGF0YSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIo
VUNoYXIzMiwgYm9vbCBtaXJyb3IsIEZvbnREYXRhVmFyaWFudCA9IEF1dG9WYXJpYW50KSBjb25z
dDsKKyAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIsIGJvb2wgbWly
cm9yLCBGb250VmFyaWFudCA9IEF1dG9WYXJpYW50KSBjb25zdDsKICAgICAKICNpZiBQTEFURk9S
TShDT0NPQSkKLSAgICBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGFGb3JDb21iaW5pbmdD
aGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBVQ2hhciosIHNpemVfdCBsZW5ndGgsIEZvbnREYXRhVmFy
aWFudCkgY29uc3Q7CisgICAgY29uc3QgRm9udCogZm9udEZvckNvbWJpbmluZ0NoYXJhY3RlclNl
cXVlbmNlKGNvbnN0IFVDaGFyKiwgc2l6ZV90IGxlbmd0aCwgRm9udFZhcmlhbnQpIGNvbnN0Owog
I2VuZGlmCiAKICAgICBzdGF0aWMgYm9vbCBpc0NKS0lkZW9ncmFwaChVQ2hhcjMyKTsKQEAgLTIw
Nyw3ICsyMDcsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIENvZGVQYXRoIGNoYXJhY3RlclJhbmdl
Q29kZVBhdGgoY29uc3QgTENoYXIqLCB1bnNpZ25lZCkgeyByZXR1cm4gU2ltcGxlOyB9CiAgICAg
c3RhdGljIENvZGVQYXRoIGNoYXJhY3RlclJhbmdlQ29kZVBhdGgoY29uc3QgVUNoYXIqLCB1bnNp
Z25lZCBsZW4pOwogCi0gICAgYm9vbCBwcmltYXJ5Rm9udERhdGFJc1N5c3RlbUZvbnQoKSBjb25z
dDsKKyAgICBib29sIHByaW1hcnlGb250SXNTeXN0ZW1Gb250KCkgY29uc3Q7CiAKIHByaXZhdGU6
CiAgICAgZW51bSBGb3JUZXh0RW1waGFzaXNPck5vdCB7IE5vdEZvclRleHRFbXBoYXNpcywgRm9y
VGV4dEVtcGhhc2lzIH07CkBAIC0yMTgsNyArMjE4LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRy
YXdFbXBoYXNpc01hcmtzRm9yU2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0
UnVuJiwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZy
b20sIGludCB0bykgY29uc3Q7CiAgICAgdm9pZCBkcmF3R2x5cGhCdWZmZXIoR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEdseXBoQnVmZmVyJiwgRmxvYXRQb2ludCYpIGNv
bnN0OwogICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3MoR3JhcGhpY3NDb250ZXh0KiwgY29uc3Qg
VGV4dFJ1biYsIGNvbnN0IEdseXBoQnVmZmVyJiwgY29uc3QgQXRvbWljU3RyaW5nJiwgY29uc3Qg
RmxvYXRQb2ludCYpIGNvbnN0OwotICAgIGZsb2F0IGZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KGNv
bnN0IFRleHRSdW4mLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9u
dHMgPSAwLCBHbHlwaE92ZXJmbG93KiA9IDApIGNvbnN0OworICAgIGZsb2F0IGZsb2F0V2lkdGhG
b3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJh
Y2tGb250cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29uc3Q7CiAgICAgaW50IG9mZnNldEZv
clBvc2l0aW9uRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiwgZmxvYXQgcG9zaXRpb24sIGJv
b2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0OwogICAgIHZvaWQgYWRqdXN0U2VsZWN0aW9u
UmVjdEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYsIExheW91dFJlY3QmIHNlbGVjdGlvblJl
Y3QsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0OwogCkBAIC0yMzEsNyArMjMxLDcgQEAgcHJpdmF0
ZToKICAgICBmbG9hdCBnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0KGNvbnN0IFRl
eHRSdW4mLCBpbnQgZnJvbSwgaW50IHRvLCBHbHlwaEJ1ZmZlciYsIEZvclRleHRFbXBoYXNpc09y
Tm90ID0gTm90Rm9yVGV4dEVtcGhhc2lzKSBjb25zdDsKICAgICBmbG9hdCBkcmF3Q29tcGxleFRl
eHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBp
bnQgZnJvbSwgaW50IHRvKSBjb25zdDsKICAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzRm9yQ29t
cGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21pY1N0
cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Owot
ICAgIGZsb2F0IGZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwgSGFzaFNl
dDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxv
dyogPSAwKSBjb25zdDsKKyAgICBmbG9hdCBmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3Qg
VGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5cGhP
dmVyZmxvdyogPSAwKSBjb25zdDsKICAgICBpbnQgb2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4
VGV4dChjb25zdCBUZXh0UnVuJiwgZmxvYXQgcG9zaXRpb24sIGJvb2wgaW5jbHVkZVBhcnRpYWxH
bHlwaHMpIGNvbnN0OwogICAgIHZvaWQgYWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0
KGNvbnN0IFRleHRSdW4mLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBpbnQgZnJvbSwgaW50
IHRvKSBjb25zdDsKIApAQCAtMzUyLDEwICszNTIsMTAgQEAgaW5saW5lIEZvbnRDYXNjYWRlOjp+
Rm9udENhc2NhZGUoKQogewogfQogCi1pbmxpbmUgY29uc3QgU2ltcGxlRm9udERhdGEmIEZvbnRD
YXNjYWRlOjpwcmltYXJ5Rm9udERhdGEoKSBjb25zdAoraW5saW5lIGNvbnN0IEZvbnQmIEZvbnRD
YXNjYWRlOjpwcmltYXJ5Rm9udCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fZ2x5cGhzKTsKLSAg
ICByZXR1cm4gbV9nbHlwaHMtPnByaW1hcnlTaW1wbGVGb250RGF0YShtX2ZvbnREZXNjcmlwdGlv
bik7CisgICAgcmV0dXJuIG1fZ2x5cGhzLT5wcmltYXJ5Rm9udChtX2ZvbnREZXNjcmlwdGlvbik7
CiB9CiAKIGlubGluZSBjb25zdCBGb250UmFuZ2VzJiBGb250Q2FzY2FkZTo6ZmFsbGJhY2tSYW5n
ZXNBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QKQEAgLTM3NSwxMyArMzc1LDEzIEBAIGlubGluZSBG
b250U2VsZWN0b3IqIEZvbnRDYXNjYWRlOjpmb250U2UKICAgICByZXR1cm4gbV9nbHlwaHMgPyBt
X2dseXBocy0+Zm9udFNlbGVjdG9yKCkgOiAwOwogfQogCi1pbmxpbmUgZmxvYXQgRm9udENhc2Nh
ZGU6OnRhYldpZHRoKGNvbnN0IFNpbXBsZUZvbnREYXRhJiBmb250RGF0YSwgdW5zaWduZWQgdGFi
U2l6ZSwgZmxvYXQgcG9zaXRpb24pIGNvbnN0CitpbmxpbmUgZmxvYXQgRm9udENhc2NhZGU6OnRh
YldpZHRoKGNvbnN0IEZvbnQmIGZvbnQsIHVuc2lnbmVkIHRhYlNpemUsIGZsb2F0IHBvc2l0aW9u
KSBjb25zdAogewogICAgIGlmICghdGFiU2l6ZSkKICAgICAgICAgcmV0dXJuIGxldHRlclNwYWNp
bmcoKTsKLSAgICBmbG9hdCB0YWJXaWR0aCA9IHRhYlNpemUgKiBmb250RGF0YS5zcGFjZVdpZHRo
KCkgKyBsZXR0ZXJTcGFjaW5nKCk7CisgICAgZmxvYXQgdGFiV2lkdGggPSB0YWJTaXplICogZm9u
dC5zcGFjZVdpZHRoKCkgKyBsZXR0ZXJTcGFjaW5nKCk7CiAgICAgZmxvYXQgdGFiRGVsdGFXaWR0
aCA9IHRhYldpZHRoIC0gZm1vZGYocG9zaXRpb24sIHRhYldpZHRoKTsKLSAgICByZXR1cm4gKHRh
YkRlbHRhV2lkdGggPCBmb250RGF0YS5zcGFjZVdpZHRoKCkgLyAyKSA/IHRhYldpZHRoIDogdGFi
RGVsdGFXaWR0aDsKKyAgICByZXR1cm4gKHRhYkRlbHRhV2lkdGggPCBmb250LnNwYWNlV2lkdGgo
KSAvIDIpID8gdGFiV2lkdGggOiB0YWJEZWx0YVdpZHRoOwogfQogCiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250R2x5cGhzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250R2x5cGhzLmNwcAkocmV2aXNpb24g
MTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEdseXBocy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAKIEZvbnRHbHlwaHM6OkZvbnRHbHlwaHMoUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+IGZvbnRT
ZWxlY3RvcikKLSAgICA6IG1fY2FjaGVkUHJpbWFyeVNpbXBsZUZvbnREYXRhKDApCisgICAgOiBt
X2NhY2hlZFByaW1hcnlGb250KDApCiAgICAgLCBtX2ZvbnRTZWxlY3Rvcihmb250U2VsZWN0b3Ip
CiAgICAgLCBtX2ZvbnRTZWxlY3RvclZlcnNpb24obV9mb250U2VsZWN0b3IgPyBtX2ZvbnRTZWxl
Y3Rvci0+dmVyc2lvbigpIDogMCkKICAgICAsIG1fZ2VuZXJhdGlvbihmb250Q2FjaGUoKS5nZW5l
cmF0aW9uKCkpCkBAIC00NSw3ICs0NSw3IEBAIEZvbnRHbHlwaHM6OkZvbnRHbHlwaHMoUGFzc1Jl
ZlB0cjxGb250U2UKIH0KIAogRm9udEdseXBoczo6Rm9udEdseXBocyhjb25zdCBGb250UGxhdGZv
cm1EYXRhJiBwbGF0Zm9ybURhdGEpCi0gICAgOiBtX2NhY2hlZFByaW1hcnlTaW1wbGVGb250RGF0
YSgwKQorICAgIDogbV9jYWNoZWRQcmltYXJ5Rm9udCgwKQogICAgICwgbV9mb250U2VsZWN0b3Io
MCkKICAgICAsIG1fZm9udFNlbGVjdG9yVmVyc2lvbigwKQogICAgICwgbV9nZW5lcmF0aW9uKGZv
bnRDYWNoZSgpLmdlbmVyYXRpb24oKSkKQEAgLTYzLDcgKzYzLDcgQEAgdm9pZCBGb250R2x5cGhz
OjpkZXRlcm1pbmVQaXRjaChjb25zdCBGbwogICAgIGF1dG8mIHByaW1hcnlSYW5nZXMgPSByZWFs
aXplRmFsbGJhY2tSYW5nZXNBdChkZXNjcmlwdGlvbiwgMCk7CiAgICAgdW5zaWduZWQgbnVtUmFu
Z2VzID0gcHJpbWFyeVJhbmdlcy5zaXplKCk7CiAgICAgaWYgKG51bVJhbmdlcyA9PSAxKQotICAg
ICAgICBtX3BpdGNoID0gcHJpbWFyeVJhbmdlcy5yYW5nZUF0KDApLmZvbnREYXRhKCkucGl0Y2go
KTsKKyAgICAgICAgbV9waXRjaCA9IHByaW1hcnlSYW5nZXMucmFuZ2VBdCgwKS5mb250KCkucGl0
Y2goKTsKICAgICBlbHNlCiAgICAgICAgIG1fcGl0Y2ggPSBWYXJpYWJsZVBpdGNoOwogfQpAQCAt
OTYsNyArOTYsNyBAQCBzdGF0aWMgRm9udFJhbmdlcyByZWFsaXplTmV4dEZhbGxiYWNrKGNvCiAg
ICAgLy8gV2UgZGlkbid0IGZpbmQgYSBmb250LiBUcnkgdG8gZmluZCBhIHNpbWlsYXIgZm9udCB1
c2luZyBvdXIgb3duIHNwZWNpZmljIGtub3dsZWRnZSBhYm91dCBvdXIgcGxhdGZvcm0uCiAgICAg
Ly8gRm9yIGV4YW1wbGUgb24gT1MgWCwgd2Uga25vdyB0byBtYXAgYW55IGZhbWlsaWVzIGNvbnRh
aW5pbmcgdGhlIHdvcmRzIEFyYWJpYywgUGFzaHRvLCBvciBVcmR1IHRvIHRoZQogICAgIC8vIEdl
ZXphIFBybyBmb250LgotICAgIHJldHVybiBGb250UmFuZ2VzKGZvbnRDYWNoZSgpLnNpbWlsYXJG
b250UGxhdGZvcm1EYXRhKGRlc2NyaXB0aW9uKSk7CisgICAgcmV0dXJuIEZvbnRSYW5nZXMoZm9u
dENhY2hlKCkuc2ltaWxhckZvbnQoZGVzY3JpcHRpb24pKTsKIH0KIAogY29uc3QgRm9udFJhbmdl
cyYgRm9udEdseXBoczo6cmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoY29uc3QgRm9udERlc2NyaXB0
aW9uJiBkZXNjcmlwdGlvbiwgdW5zaWduZWQgaW5kZXgpCkBAIC0xMjYsMTAgKzEyNiwxMCBAQCBj
b25zdCBGb250UmFuZ2VzJiBGb250R2x5cGhzOjpyZWFsaXplRmFsCiAgICAgICAgIEFTU0VSVCht
X2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXggPj0gZGVzY3JpcHRpb24uZmFtaWx5Q291bnQoKSk7
CiAKICAgICAgICAgdW5zaWduZWQgZm9udFNlbGVjdG9yRmFsbGJhY2tJbmRleCA9IG1fbGFzdFJl
YWxpemVkRmFsbGJhY2tJbmRleCAtIGRlc2NyaXB0aW9uLmZhbWlseUNvdW50KCk7Ci0gICAgICAg
IGlmIChmb250U2VsZWN0b3JGYWxsYmFja0luZGV4ID09IG1fZm9udFNlbGVjdG9yLT5mYWxsYmFj
a0ZvbnREYXRhQ291bnQoKSkKKyAgICAgICAgaWYgKGZvbnRTZWxlY3RvckZhbGxiYWNrSW5kZXgg
PT0gbV9mb250U2VsZWN0b3ItPmZhbGxiYWNrRm9udENvdW50KCkpCiAgICAgICAgICAgICByZXR1
cm4gZm9udFJhbmdlczsKICAgICAgICAgKyttX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXg7Ci0g
ICAgICAgIGZvbnRSYW5nZXMgPSBGb250UmFuZ2VzKG1fZm9udFNlbGVjdG9yLT5mYWxsYmFja0Zv
bnREYXRhQXQoZGVzY3JpcHRpb24sIGZvbnRTZWxlY3RvckZhbGxiYWNrSW5kZXgpKTsKKyAgICAg
ICAgZm9udFJhbmdlcyA9IEZvbnRSYW5nZXMobV9mb250U2VsZWN0b3ItPmZhbGxiYWNrRm9udEF0
KGRlc2NyaXB0aW9uLCBmb250U2VsZWN0b3JGYWxsYmFja0luZGV4KSk7CiAgICAgfQogCiAgICAg
cmV0dXJuIGZvbnRSYW5nZXM7CkBAIC0yMjEsOCArMjIxLDggQEAgc3RhdGljIGJvb2wgc2hvdWxk
SWdub3JlUm90YXRpb24oVUNoYXIzMgogI2lmIFBMQVRGT1JNKENPQ09BKQogc3RhdGljIEdseXBo
RGF0YSBnbHlwaERhdGFGb3JDSktDaGFyYWN0ZXJXaXRob3V0U3ludGhldGljSXRhbGljKFVDaGFy
MzIgY2hhcmFjdGVyLCBHbHlwaERhdGEmIGRhdGEpCiB7Ci0gICAgR2x5cGhEYXRhIG5vbkl0YWxp
Y0RhdGEgPSBkYXRhLmZvbnREYXRhLT5ub25TeW50aGV0aWNJdGFsaWNGb250RGF0YSgpLT5nbHlw
aERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyKTsKLSAgICBpZiAobm9uSXRhbGljRGF0YS5mb250
RGF0YSkKKyAgICBHbHlwaERhdGEgbm9uSXRhbGljRGF0YSA9IGRhdGEuZm9udC0+bm9uU3ludGhl
dGljSXRhbGljRm9udCgpLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyKTsKKyAgICBp
ZiAobm9uSXRhbGljRGF0YS5mb250KQogICAgICAgICByZXR1cm4gbm9uSXRhbGljRGF0YTsKICAg
ICByZXR1cm4gZGF0YTsKIH0KQEAgLTIzMSw3NiArMjMxLDc2IEBAIHN0YXRpYyBHbHlwaERhdGEg
Z2x5cGhEYXRhRm9yQ0pLQ2hhcmFjdGUKIHN0YXRpYyBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yTm9u
Q0pLQ2hhcmFjdGVyV2l0aEdseXBoT3JpZW50YXRpb24oVUNoYXIzMiBjaGFyYWN0ZXIsIE5vbkNK
S0dseXBoT3JpZW50YXRpb24gb3JpZW50YXRpb24sIGNvbnN0IEdseXBoRGF0YSYgZGF0YSkKIHsK
ICAgICBpZiAob3JpZW50YXRpb24gPT0gTm9uQ0pLR2x5cGhPcmllbnRhdGlvblVwcmlnaHQgfHwg
c2hvdWxkSWdub3JlUm90YXRpb24oY2hhcmFjdGVyKSkgewotICAgICAgICBHbHlwaERhdGEgdXBy
aWdodERhdGEgPSBkYXRhLmZvbnREYXRhLT51cHJpZ2h0T3JpZW50YXRpb25Gb250RGF0YSgpLT5n
bHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyKTsKKyAgICAgICAgR2x5cGhEYXRhIHVwcmln
aHREYXRhID0gZGF0YS5mb250LT51cHJpZ2h0T3JpZW50YXRpb25Gb250KCktPmdseXBoRGF0YUZv
ckNoYXJhY3RlcihjaGFyYWN0ZXIpOwogICAgICAgICAvLyBJZiB0aGUgZ2x5cGhzIGFyZSB0aGUg
c2FtZSwgdGhlbiB3ZSBrbm93IHdlIGNhbiBqdXN0IHVzZSB0aGUgaG9yaXpvbnRhbCBnbHlwaCBy
b3RhdGVkIHZlcnRpY2FsbHkgdG8gYmUgdXByaWdodC4KICAgICAgICAgaWYgKGRhdGEuZ2x5cGgg
PT0gdXByaWdodERhdGEuZ2x5cGgpCiAgICAgICAgICAgICByZXR1cm4gZGF0YTsKICAgICAgICAg
Ly8gVGhlIGdseXBocyBhcmUgZGlzdGluY3QsIG1lYW5pbmcgdGhhdCB0aGUgZm9udCBoYXMgYSB2
ZXJ0aWNhbC1yaWdodCBnbHlwaCBiYWtlZCBpbnRvIGl0LiBXZSBjYW4ndCB1c2UgdGhhdAogICAg
ICAgICAvLyBnbHlwaCwgc28gd2UgZmFsbCBiYWNrIHRvIHRoZSB1cHJpZ2h0IGRhdGEgYW5kIHVz
ZSB0aGUgaG9yaXpvbnRhbCBnbHlwaC4KLSAgICAgICAgaWYgKHVwcmlnaHREYXRhLmZvbnREYXRh
KQorICAgICAgICBpZiAodXByaWdodERhdGEuZm9udCkKICAgICAgICAgICAgIHJldHVybiB1cHJp
Z2h0RGF0YTsKICAgICB9IGVsc2UgaWYgKG9yaWVudGF0aW9uID09IE5vbkNKS0dseXBoT3JpZW50
YXRpb25WZXJ0aWNhbFJpZ2h0KSB7Ci0gICAgICAgIEdseXBoRGF0YSB2ZXJ0aWNhbFJpZ2h0RGF0
YSA9IGRhdGEuZm9udERhdGEtPnZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbkZvbnREYXRhKCktPmds
eXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIpOworICAgICAgICBHbHlwaERhdGEgdmVydGlj
YWxSaWdodERhdGEgPSBkYXRhLmZvbnQtPnZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbkZvbnQoKS0+
Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3Rlcik7CiAgICAgICAgIC8vIElmIHRoZSBnbHlw
aHMgYXJlIGRpc3RpbmN0LCB3ZSB3aWxsIG1ha2UgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgZm9u
dCBoYXMgYSB2ZXJ0aWNhbC1yaWdodCBnbHlwaCBiYWtlZAogICAgICAgICAvLyBpbnRvIGl0Lgog
ICAgICAgICBpZiAoZGF0YS5nbHlwaCAhPSB2ZXJ0aWNhbFJpZ2h0RGF0YS5nbHlwaCkKICAgICAg
ICAgICAgIHJldHVybiBkYXRhOwogICAgICAgICAvLyBUaGUgZ2x5cGhzIGFyZSBpZGVudGljYWws
IG1lYW5pbmcgdGhhdCB3ZSBzaG91bGQganVzdCB1c2UgdGhlIGhvcml6b250YWwgZ2x5cGguCi0g
ICAgICAgIGlmICh2ZXJ0aWNhbFJpZ2h0RGF0YS5mb250RGF0YSkKKyAgICAgICAgaWYgKHZlcnRp
Y2FsUmlnaHREYXRhLmZvbnQpCiAgICAgICAgICAgICByZXR1cm4gdmVydGljYWxSaWdodERhdGE7
CiAgICAgfQogICAgIHJldHVybiBkYXRhOwogfQogCi1HbHlwaERhdGEgRm9udEdseXBoczo6Z2x5
cGhEYXRhRm9yU3lzdGVtRmFsbGJhY2soVUNoYXIzMiBjLCBjb25zdCBGb250RGVzY3JpcHRpb24m
IGRlc2NyaXB0aW9uLCBGb250RGF0YVZhcmlhbnQgdmFyaWFudCkKK0dseXBoRGF0YSBGb250R2x5
cGhzOjpnbHlwaERhdGFGb3JTeXN0ZW1GYWxsYmFjayhVQ2hhcjMyIGMsIGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZGVzY3JpcHRpb24sIEZvbnRWYXJpYW50IHZhcmlhbnQpCiB7CiAgICAgLy8gU3lz
dGVtIGZhbGxiYWNrIGlzIGNoYXJhY3Rlci1kZXBlbmRlbnQuCiAgICAgYXV0byYgcHJpbWFyeVJh
bmdlcyA9IHJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGRlc2NyaXB0aW9uLCAwKTsKLSAgICBhdXRv
KiBvcmlnaW5hbEZvbnREYXRhID0gcHJpbWFyeVJhbmdlcy5mb250RGF0YUZvckNoYXJhY3Rlcihj
KTsKLSAgICBpZiAoIW9yaWdpbmFsRm9udERhdGEpCi0gICAgICAgIG9yaWdpbmFsRm9udERhdGEg
PSAmcHJpbWFyeVJhbmdlcy5mb250RGF0YUZvckZpcnN0UmFuZ2UoKTsKKyAgICBhdXRvKiBvcmln
aW5hbEZvbnQgPSBwcmltYXJ5UmFuZ2VzLmZvbnRGb3JDaGFyYWN0ZXIoYyk7CisgICAgaWYgKCFv
cmlnaW5hbEZvbnQpCisgICAgICAgIG9yaWdpbmFsRm9udCA9ICZwcmltYXJ5UmFuZ2VzLmZvbnRG
b3JGaXJzdFJhbmdlKCk7CiAKLSAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IHN5c3RlbUZhbGxi
YWNrRm9udERhdGEgPSBvcmlnaW5hbEZvbnREYXRhLT5zeXN0ZW1GYWxsYmFja0ZvbnREYXRhRm9y
Q2hhcmFjdGVyKGMsIGRlc2NyaXB0aW9uLCBtX2lzRm9yUGxhdGZvcm1Gb250KTsKLSAgICBpZiAo
IXN5c3RlbUZhbGxiYWNrRm9udERhdGEpCisgICAgUmVmUHRyPEZvbnQ+IHN5c3RlbUZhbGxiYWNr
Rm9udCA9IG9yaWdpbmFsRm9udC0+c3lzdGVtRmFsbGJhY2tGb250Rm9yQ2hhcmFjdGVyKGMsIGRl
c2NyaXB0aW9uLCBtX2lzRm9yUGxhdGZvcm1Gb250KTsKKyAgICBpZiAoIXN5c3RlbUZhbGxiYWNr
Rm9udCkKICAgICAgICAgcmV0dXJuIEdseXBoRGF0YSgpOwogCi0gICAgaWYgKHN5c3RlbUZhbGxi
YWNrRm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwgJiYg
IXN5c3RlbUZhbGxiYWNrRm9udERhdGEtPmhhc1ZlcnRpY2FsR2x5cGhzKCkgJiYgRm9udENhc2Nh
ZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woYykpCisgICAgaWYgKHN5c3RlbUZhbGxiYWNrRm9u
dC0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCAmJiAhc3lzdGVtRmFs
bGJhY2tGb250LT5oYXNWZXJ0aWNhbEdseXBocygpICYmIEZvbnRDYXNjYWRlOjppc0NKS0lkZW9n
cmFwaE9yU3ltYm9sKGMpKQogICAgICAgICB2YXJpYW50ID0gQnJva2VuSWRlb2dyYXBoVmFyaWFu
dDsKIAogICAgIEdseXBoRGF0YSBmYWxsYmFja0dseXBoRGF0YTsKICAgICBpZiAodmFyaWFudCA9
PSBOb3JtYWxWYXJpYW50KQotICAgICAgICBmYWxsYmFja0dseXBoRGF0YSA9IHN5c3RlbUZhbGxi
YWNrRm9udERhdGEtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjKTsKKyAgICAgICAgZmFsbGJhY2tH
bHlwaERhdGEgPSBzeXN0ZW1GYWxsYmFja0ZvbnQtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjKTsK
ICAgICBlbHNlCi0gICAgICAgIGZhbGxiYWNrR2x5cGhEYXRhID0gc3lzdGVtRmFsbGJhY2tGb250
RGF0YS0+dmFyaWFudEZvbnREYXRhKGRlc2NyaXB0aW9uLCB2YXJpYW50KS0+Z2x5cGhEYXRhRm9y
Q2hhcmFjdGVyKGMpOworICAgICAgICBmYWxsYmFja0dseXBoRGF0YSA9IHN5c3RlbUZhbGxiYWNr
Rm9udC0+dmFyaWFudEZvbnQoZGVzY3JpcHRpb24sIHZhcmlhbnQpLT5nbHlwaERhdGFGb3JDaGFy
YWN0ZXIoYyk7CiAKLSAgICBpZiAodmFyaWFudCA9PSBOb3JtYWxWYXJpYW50ICYmIGZhbGxiYWNr
R2x5cGhEYXRhLmZvbnREYXRhKSB7Ci0gICAgICAgIGlmICghRm9udENhc2NhZGU6OmlzQ0pLSWRl
b2dyYXBoT3JTeW1ib2woYykgJiYgZmFsbGJhY2tHbHlwaERhdGEuZm9udERhdGEtPnBsYXRmb3Jt
RGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwgJiYgIWZhbGxiYWNrR2x5cGhEYXRhLmZv
bnREYXRhLT5pc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKCkpCisgICAgaWYgKHZhcmlhbnQgPT0g
Tm9ybWFsVmFyaWFudCAmJiBmYWxsYmFja0dseXBoRGF0YS5mb250KSB7CisgICAgICAgIGlmICgh
Rm9udENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woYykgJiYgZmFsbGJhY2tHbHlwaERh
dGEuZm9udC0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCAmJiAhZmFs
bGJhY2tHbHlwaERhdGEuZm9udC0+aXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaygpKQogICAgICAg
ICAgICAgZmFsbGJhY2tHbHlwaERhdGEgPSBnbHlwaERhdGFGb3JOb25DSktDaGFyYWN0ZXJXaXRo
R2x5cGhPcmllbnRhdGlvbihjLCBkZXNjcmlwdGlvbi5ub25DSktHbHlwaE9yaWVudGF0aW9uKCks
IGZhbGxiYWNrR2x5cGhEYXRhKTsKICAgICB9CiAKICAgICAvLyBLZWVwIHRoZSBzeXN0ZW0gZmFs
bGJhY2sgZm9udHMgd2UgdXNlIGFsaXZlLgogICAgIGlmIChmYWxsYmFja0dseXBoRGF0YS5nbHlw
aCkKLSAgICAgICAgbV9zeXN0ZW1GYWxsYmFja0ZvbnREYXRhU2V0LmFkZChzeXN0ZW1GYWxsYmFj
a0ZvbnREYXRhLnJlbGVhc2UoKSk7CisgICAgICAgIG1fc3lzdGVtRmFsbGJhY2tGb250U2V0LmFk
ZChzeXN0ZW1GYWxsYmFja0ZvbnQucmVsZWFzZSgpKTsKIAogICAgIHJldHVybiBmYWxsYmFja0ds
eXBoRGF0YTsKIH0KIAotR2x5cGhEYXRhIEZvbnRHbHlwaHM6OmdseXBoRGF0YUZvclZhcmlhbnQo
VUNoYXIzMiBjLCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250RGF0YVZh
cmlhbnQgdmFyaWFudCwgdW5zaWduZWQgZmFsbGJhY2tJbmRleCkKK0dseXBoRGF0YSBGb250R2x5
cGhzOjpnbHlwaERhdGFGb3JWYXJpYW50KFVDaGFyMzIgYywgY29uc3QgRm9udERlc2NyaXB0aW9u
JiBkZXNjcmlwdGlvbiwgRm9udFZhcmlhbnQgdmFyaWFudCwgdW5zaWduZWQgZmFsbGJhY2tJbmRl
eCkKIHsKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICBhdXRvJiBmb250UmFuZ2VzID0gcmVh
bGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIGZhbGxiYWNrSW5kZXgrKyk7CiAgICAg
ICAgIGlmIChmb250UmFuZ2VzLmlzTnVsbCgpKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGF1dG8qIGZvbnREYXRhID0gZm9udFJhbmdlcy5mb250RGF0YUZvckNoYXJhY3RlcihjKTsKLSAg
ICAgICAgR2x5cGhEYXRhIGRhdGEgPSBmb250RGF0YSA/IGZvbnREYXRhLT5nbHlwaERhdGFGb3JD
aGFyYWN0ZXIoYykgOiBHbHlwaERhdGEoKTsKLSAgICAgICAgaWYgKGRhdGEuZm9udERhdGEpIHsK
LSAgICAgICAgICAgIC8vIFRoZSB2YXJpYW50Rm9udERhdGEgZnVuY3Rpb24gc2hvdWxkIG5vdCBu
b3JtYWxseSByZXR1cm4gMC4KKyAgICAgICAgYXV0byogZm9udCA9IGZvbnRSYW5nZXMuZm9udEZv
ckNoYXJhY3RlcihjKTsKKyAgICAgICAgR2x5cGhEYXRhIGRhdGEgPSBmb250ID8gZm9udC0+Z2x5
cGhEYXRhRm9yQ2hhcmFjdGVyKGMpIDogR2x5cGhEYXRhKCk7CisgICAgICAgIGlmIChkYXRhLmZv
bnQpIHsKKyAgICAgICAgICAgIC8vIFRoZSB2YXJpYW50Rm9udCBmdW5jdGlvbiBzaG91bGQgbm90
IG5vcm1hbGx5IHJldHVybiAwLgogICAgICAgICAgICAgLy8gQnV0IGlmIGl0IGRvZXMsIHdlIHdp
bGwganVzdCByZW5kZXIgdGhlIGNhcGl0YWwgbGV0dGVyIGJpZy4KLSAgICAgICAgICAgIFJlZlB0
cjxTaW1wbGVGb250RGF0YT4gdmFyaWFudEZvbnREYXRhID0gZGF0YS5mb250RGF0YS0+dmFyaWFu
dEZvbnREYXRhKGRlc2NyaXB0aW9uLCB2YXJpYW50KTsKLSAgICAgICAgICAgIGlmICghdmFyaWFu
dEZvbnREYXRhKQorICAgICAgICAgICAgUmVmUHRyPEZvbnQ+IHZhcmlhbnRGb250ID0gZGF0YS5m
b250LT52YXJpYW50Rm9udChkZXNjcmlwdGlvbiwgdmFyaWFudCk7CisgICAgICAgICAgICBpZiAo
IXZhcmlhbnRGb250KQogICAgICAgICAgICAgICAgIHJldHVybiBkYXRhOwogCi0gICAgICAgICAg
ICByZXR1cm4gdmFyaWFudEZvbnREYXRhLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYyk7CisgICAg
ICAgICAgICByZXR1cm4gdmFyaWFudEZvbnQtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjKTsKICAg
ICAgICAgfQogICAgIH0KIApAQCAtMzE1LDIzICszMTUsMjMgQEAgR2x5cGhEYXRhIEZvbnRHbHlw
aHM6OmdseXBoRGF0YUZvck5vcm1hbAogICAgICAgICBhdXRvJiBmb250UmFuZ2VzID0gcmVhbGl6
ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIGZhbGxiYWNrSW5kZXgpOwogICAgICAgICBp
ZiAoZm9udFJhbmdlcy5pc051bGwoKSkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBhdXRv
KiBzaW1wbGVGb250RGF0YSA9IGZvbnRSYW5nZXMuZm9udERhdGFGb3JDaGFyYWN0ZXIoYyk7Ci0g
ICAgICAgIGF1dG8qIHBhZ2UgPSBzaW1wbGVGb250RGF0YSA/IHNpbXBsZUZvbnREYXRhLT5nbHlw
aFBhZ2UocGFnZU51bWJlcikgOiBudWxscHRyOworICAgICAgICBhdXRvKiBmb250ID0gZm9udFJh
bmdlcy5mb250Rm9yQ2hhcmFjdGVyKGMpOworICAgICAgICBhdXRvKiBwYWdlID0gZm9udCA/IGZv
bnQtPmdseXBoUGFnZShwYWdlTnVtYmVyKSA6IG51bGxwdHI7CiAgICAgICAgIGlmICghcGFnZSkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBHbHlwaERhdGEgZGF0YSA9IHBhZ2UtPmds
eXBoRGF0YUZvckNoYXJhY3RlcihjKTsKLSAgICAgICAgaWYgKGRhdGEuZm9udERhdGEpIHsKLSAg
ICAgICAgICAgIGlmIChkYXRhLmZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigp
ID09IFZlcnRpY2FsICYmICFkYXRhLmZvbnREYXRhLT5pc1RleHRPcmllbnRhdGlvbkZhbGxiYWNr
KCkpIHsKKyAgICAgICAgaWYgKGRhdGEuZm9udCkgeworICAgICAgICAgICAgaWYgKGRhdGEuZm9u
dC0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCAmJiAhZGF0YS5mb250
LT5pc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKCkpIHsKICAgICAgICAgICAgICAgICBpZiAoIUZv
bnRDYXNjYWRlOjppc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGMpKQogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZ2x5cGhEYXRhRm9yTm9uQ0pLQ2hhcmFjdGVyV2l0aEdseXBoT3JpZW50YXRpb24o
YywgZGVzY3JpcHRpb24ubm9uQ0pLR2x5cGhPcmllbnRhdGlvbigpLCBkYXRhKTsKIAotICAgICAg
ICAgICAgICAgIGlmICghZGF0YS5mb250RGF0YS0+aGFzVmVydGljYWxHbHlwaHMoKSkgeworICAg
ICAgICAgICAgICAgIGlmICghZGF0YS5mb250LT5oYXNWZXJ0aWNhbEdseXBocygpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIC8vIFVzZSB0aGUgYnJva2VuIGlkZW9ncmFwaCBmb250IGRhdGEuIFRo
ZSBicm9rZW4gaWRlb2dyYXBoIGZvbnQgd2lsbCB1c2UgdGhlIGhvcml6b250YWwgd2lkdGggb2Yg
Z2x5cGhzCiAgICAgICAgICAgICAgICAgICAgIC8vIHRvIG1ha2Ugc3VyZSB5b3UgZ2V0IGEgc3F1
YXJlIChldmVuIGZvciBicm9rZW4gZ2x5cGhzIGxpa2Ugc3ltYm9scyB1c2VkIGZvciBwdW5jdHVh
dGlvbikuCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbHlwaERhdGFGb3JWYXJpYW50KGMs
IGRlc2NyaXB0aW9uLCBCcm9rZW5JZGVvZ3JhcGhWYXJpYW50LCBmYWxsYmFja0luZGV4KTsKICAg
ICAgICAgICAgICAgICB9CiAjaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgICAgICAgICAgICAgaWYg
KGRhdGEuZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLnN5bnRoZXRpY09ibGlxdWUoKSkKKyAgICAg
ICAgICAgICAgICBpZiAoZGF0YS5mb250LT5wbGF0Zm9ybURhdGEoKS5zeW50aGV0aWNPYmxpcXVl
KCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbHlwaERhdGFGb3JDSktDaGFyYWN0ZXJX
aXRob3V0U3ludGhldGljSXRhbGljKGMsIGRhdGEpOwogI2VuZGlmCiAgICAgICAgICAgICB9CkBA
IC0zNDUsMjcgKzM0NSwyNyBAQCBHbHlwaERhdGEgRm9udEdseXBoczo6Z2x5cGhEYXRhRm9yTm9y
bWFsCiAKIHN0YXRpYyBSZWZQdHI8R2x5cGhQYWdlPiBnbHlwaFBhZ2VGcm9tRm9udFJhbmdlcyh1
bnNpZ25lZCBwYWdlTnVtYmVyLCBjb25zdCBGb250UmFuZ2VzJiBmb250UmFuZ2VzKQogewotICAg
IGNvbnN0IFNpbXBsZUZvbnREYXRhKiBzaW1wbGVGb250RGF0YSA9IG51bGxwdHI7CisgICAgY29u
c3QgRm9udCogZm9udCA9IG51bGxwdHI7CiAgICAgVUNoYXIzMiBwYWdlUmFuZ2VGcm9tID0gcGFn
ZU51bWJlciAqIEdseXBoUGFnZTo6c2l6ZTsKICAgICBVQ2hhcjMyIHBhZ2VSYW5nZVRvID0gcGFn
ZVJhbmdlRnJvbSArIEdseXBoUGFnZTo6c2l6ZSAtIDE7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGZvbnRSYW5nZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgYXV0byYgcmFuZ2UgPSBm
b250UmFuZ2VzLnJhbmdlQXQoaSk7CiAgICAgICAgIGlmIChyYW5nZS50bygpKSB7CiAgICAgICAg
ICAgICBpZiAocmFuZ2UuZnJvbSgpIDw9IHBhZ2VSYW5nZUZyb20gJiYgcGFnZVJhbmdlVG8gPD0g
cmFuZ2UudG8oKSkKLSAgICAgICAgICAgICAgICBzaW1wbGVGb250RGF0YSA9ICZyYW5nZS5mb250
RGF0YSgpOworICAgICAgICAgICAgICAgIGZvbnQgPSAmcmFuZ2UuZm9udCgpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKCFzaW1wbGVGb250RGF0YSkKKyAg
ICBpZiAoIWZvbnQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgaWYgKHNpbXBsZUZv
bnREYXRhLT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsKQorICAgIGlm
IChmb250LT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBjb25zdF9jYXN0PEdseXBoUGFnZSo+KHNp
bXBsZUZvbnREYXRhLT5nbHlwaFBhZ2UocGFnZU51bWJlcikpOworICAgIHJldHVybiBjb25zdF9j
YXN0PEdseXBoUGFnZSo+KGZvbnQtPmdseXBoUGFnZShwYWdlTnVtYmVyKSk7CiB9CiAKLUdseXBo
RGF0YSBGb250R2x5cGhzOjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjLCBjb25zdCBG
b250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250RGF0YVZhcmlhbnQgdmFyaWFudCkKK0ds
eXBoRGF0YSBGb250R2x5cGhzOjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjLCBjb25z
dCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250VmFyaWFudCB2YXJpYW50KQogewog
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgQVNTRVJUKHZhcmlhbnQgIT0gQXV0b1Zh
cmlhbnQpOwpAQCAtMzgyLDE5ICszODIsMTkgQEAgR2x5cGhEYXRhIEZvbnRHbHlwaHM6OmdseXBo
RGF0YUZvckNoYXJhYwogICAgIEdseXBoRGF0YSBnbHlwaERhdGEgPSBjYWNoZWRQYWdlID8gY2Fj
aGVkUGFnZS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMpIDogR2x5cGhEYXRhKCk7CiAgICAgaWYg
KCFnbHlwaERhdGEuZ2x5cGgpIHsKICAgICAgICAgaWYgKCFjYWNoZWRQYWdlKQotICAgICAgICAg
ICAgY2FjaGVkUGFnZSA9IEdseXBoUGFnZTo6Y3JlYXRlRm9yTWl4ZWRGb250RGF0YSgpOworICAg
ICAgICAgICAgY2FjaGVkUGFnZSA9IEdseXBoUGFnZTo6Y3JlYXRlRm9yTWl4ZWRGb250cygpOwog
ICAgICAgICBlbHNlIGlmIChjYWNoZWRQYWdlLT5pc0ltbXV0YWJsZSgpKQotICAgICAgICAgICAg
Y2FjaGVkUGFnZSA9IEdseXBoUGFnZTo6Y3JlYXRlQ29weUZvck1peGVkRm9udERhdGEoKmNhY2hl
ZFBhZ2UpOworICAgICAgICAgICAgY2FjaGVkUGFnZSA9IEdseXBoUGFnZTo6Y3JlYXRlQ29weUZv
ck1peGVkRm9udHMoKmNhY2hlZFBhZ2UpOwogCiAgICAgICAgIGdseXBoRGF0YSA9IGdseXBoRGF0
YUZvck5vcm1hbFZhcmlhbnQoYywgZGVzY3JpcHRpb24pOwotICAgICAgICBjYWNoZWRQYWdlLT5z
ZXRHbHlwaERhdGFGb3JDaGFyYWN0ZXIoYywgZ2x5cGhEYXRhLmdseXBoLCBnbHlwaERhdGEuZm9u
dERhdGEpOworICAgICAgICBjYWNoZWRQYWdlLT5zZXRHbHlwaERhdGFGb3JDaGFyYWN0ZXIoYywg
Z2x5cGhEYXRhLmdseXBoLCBnbHlwaERhdGEuZm9udCk7CiAgICAgfQogICAgIHJldHVybiBnbHlw
aERhdGE7CiB9CiAKIHZvaWQgRm9udEdseXBoczo6cHJ1bmVTeXN0ZW1GYWxsYmFja3MoKQogewot
ICAgIGlmIChtX3N5c3RlbUZhbGxiYWNrRm9udERhdGFTZXQuaXNFbXB0eSgpKQorICAgIGlmICht
X3N5c3RlbUZhbGxiYWNrRm9udFNldC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICAv
LyBNdXRhYmxlIGdseXBoIHBhZ2VzIG1heSByZWZlcmVuY2UgZmFsbGJhY2sgZm9udHMuCiAgICAg
aWYgKG1fY2FjaGVkUGFnZVplcm8gJiYgIW1fY2FjaGVkUGFnZVplcm8tPmlzSW1tdXRhYmxlKCkp
CkBAIC00MDIsNyArNDAyLDcgQEAgdm9pZCBGb250R2x5cGhzOjpwcnVuZVN5c3RlbUZhbGxiYWNr
cygpCiAgICAgbV9jYWNoZWRQYWdlcy5yZW1vdmVJZihbXShkZWNsdHlwZShtX2NhY2hlZFBhZ2Vz
KTo6S2V5VmFsdWVQYWlyVHlwZSYga2V5QW5kVmFsdWUpIHsKICAgICAgICAgcmV0dXJuICFrZXlB
bmRWYWx1ZS52YWx1ZS0+aXNJbW11dGFibGUoKTsKICAgICB9KTsKLSAgICBtX3N5c3RlbUZhbGxi
YWNrRm9udERhdGFTZXQuY2xlYXIoKTsKKyAgICBtX3N5c3RlbUZhbGxiYWNrRm9udFNldC5jbGVh
cigpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
R2x5cGhzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udEdseXBocy5oCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250R2x5cGhzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDEwICsyMSwxMCBA
QAogI2lmbmRlZiBGb250R2x5cGhzX2gKICNkZWZpbmUgRm9udEdseXBoc19oCiAKKyNpbmNsdWRl
ICJGb250LmgiCiAjaW5jbHVkZSAiRm9udFJhbmdlcy5oIgogI2luY2x1ZGUgIkZvbnRTZWxlY3Rv
ci5oIgogI2luY2x1ZGUgIkdseXBoUGFnZS5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgi
CiAjaW5jbHVkZSAiV2lkdGhDYWNoZS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5j
bHVkZSA8d3RmL01haW5UaHJlYWQuaD4KQEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgogCiAgICAg
Ym9vbCBpc0ZvclBsYXRmb3JtRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1faXNGb3JQbGF0Zm9ybUZv
bnQ7IH0KIAotICAgIEdseXBoRGF0YSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiwgY29u
c3QgRm9udERlc2NyaXB0aW9uJiwgRm9udERhdGFWYXJpYW50KTsKKyAgICBHbHlwaERhdGEgZ2x5
cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIEZvbnRW
YXJpYW50KTsKIAogICAgIGJvb2wgaXNGaXhlZFBpdGNoKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYp
OwogICAgIHZvaWQgZGV0ZXJtaW5lUGl0Y2goY29uc3QgRm9udERlc2NyaXB0aW9uJik7CkBAIC02
Niw3ICs2Niw3IEBAIHB1YmxpYzoKICAgICBXaWR0aENhY2hlJiB3aWR0aENhY2hlKCkgeyByZXR1
cm4gbV93aWR0aENhY2hlOyB9CiAgICAgY29uc3QgV2lkdGhDYWNoZSYgd2lkdGhDYWNoZSgpIGNv
bnN0IHsgcmV0dXJuIG1fd2lkdGhDYWNoZTsgfQogCi0gICAgY29uc3QgU2ltcGxlRm9udERhdGEm
IHByaW1hcnlTaW1wbGVGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mKTsKKyAgICBjb25z
dCBGb250JiBwcmltYXJ5Rm9udChjb25zdCBGb250RGVzY3JpcHRpb24mKTsKICAgICBXRUJDT1JF
X0VYUE9SVCBjb25zdCBGb250UmFuZ2VzJiByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChjb25zdCBG
b250RGVzY3JpcHRpb24mLCB1bnNpZ25lZCBmYWxsYmFja0luZGV4KTsKIAogICAgIHZvaWQgcHJ1
bmVTeXN0ZW1GYWxsYmFja3MoKTsKQEAgLTc1LDkgKzc1LDkgQEAgcHJpdmF0ZToKICAgICBGb250
R2x5cGhzKFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPik7CiAgICAgRm9udEdseXBocyhjb25zdCBG
b250UGxhdGZvcm1EYXRhJik7CiAKLSAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yU3lzdGVtRmFs
bGJhY2soVUNoYXIzMiwgY29uc3QgRm9udERlc2NyaXB0aW9uJiwgRm9udERhdGFWYXJpYW50KTsK
KyAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yU3lzdGVtRmFsbGJhY2soVUNoYXIzMiwgY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiwgRm9udFZhcmlhbnQpOwogICAgIEdseXBoRGF0YSBnbHlwaERhdGFG
b3JOb3JtYWxWYXJpYW50KFVDaGFyMzIsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpOwotICAgIEds
eXBoRGF0YSBnbHlwaERhdGFGb3JWYXJpYW50KFVDaGFyMzIsIGNvbnN0IEZvbnREZXNjcmlwdGlv
biYsIEZvbnREYXRhVmFyaWFudCwgdW5zaWduZWQgZmFsbGJhY2tJbmRleCk7CisgICAgR2x5cGhE
YXRhIGdseXBoRGF0YUZvclZhcmlhbnQoVUNoYXIzMiwgY29uc3QgRm9udERlc2NyaXB0aW9uJiwg
Rm9udFZhcmlhbnQsIHVuc2lnbmVkIGZhbGxiYWNrSW5kZXgpOwogCiAgICAgVmVjdG9yPEZvbnRS
YW5nZXMsIDE+IG1fcmVhbGl6ZWRGYWxsYmFja1JhbmdlczsKICAgICB1bnNpZ25lZCBtX2xhc3RS
ZWFsaXplZEZhbGxiYWNrSW5kZXggeyAwIH07CkBAIC04NSw5ICs4NSw5IEBAIHByaXZhdGU6CiAg
ICAgUmVmUHRyPEdseXBoUGFnZT4gbV9jYWNoZWRQYWdlWmVybzsKICAgICBIYXNoTWFwPGludCwg
UmVmUHRyPEdseXBoUGFnZT4+IG1fY2FjaGVkUGFnZXM7CiAKLSAgICBIYXNoU2V0PFJlZlB0cjxT
aW1wbGVGb250RGF0YT4+IG1fc3lzdGVtRmFsbGJhY2tGb250RGF0YVNldDsKKyAgICBIYXNoU2V0
PFJlZlB0cjxGb250Pj4gbV9zeXN0ZW1GYWxsYmFja0ZvbnRTZXQ7CiAKLSAgICBjb25zdCBTaW1w
bGVGb250RGF0YSogbV9jYWNoZWRQcmltYXJ5U2ltcGxlRm9udERhdGE7CisgICAgY29uc3QgRm9u
dCogbV9jYWNoZWRQcmltYXJ5Rm9udDsKICAgICBSZWZQdHI8Rm9udFNlbGVjdG9yPiBtX2ZvbnRT
ZWxlY3RvcjsKIAogICAgIFdpZHRoQ2FjaGUgbV93aWR0aENhY2hlOwpAQCAtMTA1LDE2ICsxMDUs
MTYgQEAgaW5saW5lIGJvb2wgRm9udEdseXBoczo6aXNGaXhlZFBpdGNoKGNvbgogICAgIHJldHVy
biBtX3BpdGNoID09IEZpeGVkUGl0Y2g7CiB9OwogCi1pbmxpbmUgY29uc3QgU2ltcGxlRm9udERh
dGEmIEZvbnRHbHlwaHM6OnByaW1hcnlTaW1wbGVGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRp
b24mIGRlc2NyaXB0aW9uKQoraW5saW5lIGNvbnN0IEZvbnQmIEZvbnRHbHlwaHM6OnByaW1hcnlG
b250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCiB7CiAgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKLSAgICBpZiAoIW1fY2FjaGVkUHJpbWFyeVNpbXBsZUZvbnREYXRhKSB7
CisgICAgaWYgKCFtX2NhY2hlZFByaW1hcnlGb250KSB7CiAgICAgICAgIGF1dG8mIHByaW1hcnlS
YW5nZXMgPSByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChkZXNjcmlwdGlvbiwgMCk7Ci0gICAgICAg
IG1fY2FjaGVkUHJpbWFyeVNpbXBsZUZvbnREYXRhID0gcHJpbWFyeVJhbmdlcy5mb250RGF0YUZv
ckNoYXJhY3RlcignICcpOwotICAgICAgICBpZiAoIW1fY2FjaGVkUHJpbWFyeVNpbXBsZUZvbnRE
YXRhKQotICAgICAgICAgICAgbV9jYWNoZWRQcmltYXJ5U2ltcGxlRm9udERhdGEgPSAmcHJpbWFy
eVJhbmdlcy5mb250RGF0YUZvckZpcnN0UmFuZ2UoKTsKKyAgICAgICAgbV9jYWNoZWRQcmltYXJ5
Rm9udCA9IHByaW1hcnlSYW5nZXMuZm9udEZvckNoYXJhY3RlcignICcpOworICAgICAgICBpZiAo
IW1fY2FjaGVkUHJpbWFyeUZvbnQpCisgICAgICAgICAgICBtX2NhY2hlZFByaW1hcnlGb250ID0g
JnByaW1hcnlSYW5nZXMuZm9udEZvckZpcnN0UmFuZ2UoKTsKICAgICB9Ci0gICAgcmV0dXJuICpt
X2NhY2hlZFByaW1hcnlTaW1wbGVGb250RGF0YTsKKyAgICByZXR1cm4gKm1fY2FjaGVkUHJpbWFy
eUZvbnQ7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRNZXRyaWNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udE1ldHJpY3MuaAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udE1ldHJpY3MuaAkod29ya2luZyBjb3B5KQpAQCAtMTMzLDcgKzEz
Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEhhc1plcm9XaWR0aChib29sIGhhc1plcm9XaWR0
aCkgeyBtX2hhc1plcm9XaWR0aCA9IGhhc1plcm9XaWR0aDsgfQogCiBwcml2YXRlOgotICAgIGZy
aWVuZCBjbGFzcyBTaW1wbGVGb250RGF0YTsKKyAgICBmcmllbmQgY2xhc3MgRm9udDsKIAogICAg
IHZvaWQgcmVzZXQoKQogICAgIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRSYW5nZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRSYW5nZXMuY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UmFuZ2VzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZvbnRSYW5nZXMu
aCIKIAotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisjaW5jbHVkZSAiRm9udC5oIgogI2lu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAKQEAgLTM2LDM0ICszNiwzNCBAQCBGb250UmFuZ2VzOjpGb250UmFuZ2VzKCkKIHsKIH0KIAot
Rm9udFJhbmdlczo6Rm9udFJhbmdlcyhSZWZQdHI8U2ltcGxlRm9udERhdGE+JiYgZm9udERhdGEp
CitGb250UmFuZ2VzOjpGb250UmFuZ2VzKFJlZlB0cjxGb250PiYmIGZvbnQpCiB7Ci0gICAgaWYg
KGZvbnREYXRhKQotICAgICAgICBtX3Jhbmdlcy5hcHBlbmQoUmFuZ2UgeyAwLCAweDdGRkZGRkZG
LCBmb250RGF0YS5yZWxlYXNlTm9uTnVsbCgpIH0pOworICAgIGlmIChmb250KQorICAgICAgICBt
X3Jhbmdlcy5hcHBlbmQoUmFuZ2UgeyAwLCAweDdGRkZGRkZGLCBmb250LnJlbGVhc2VOb25OdWxs
KCkgfSk7CiB9CiAKIEZvbnRSYW5nZXM6On5Gb250UmFuZ2VzKCkKIHsKIH0KIAotY29uc3QgU2lt
cGxlRm9udERhdGEqIEZvbnRSYW5nZXM6OmZvbnREYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYykg
Y29uc3QKK2NvbnN0IEZvbnQqIEZvbnRSYW5nZXM6OmZvbnRGb3JDaGFyYWN0ZXIoVUNoYXIzMiBj
KSBjb25zdAogewogICAgIGZvciAoYXV0byYgcmFuZ2UgOiBtX3JhbmdlcykgewogICAgICAgICBp
ZiAocmFuZ2UuZnJvbSgpIDw9IGMgJiYgYyA8PSByYW5nZS50bygpKQotICAgICAgICAgICAgcmV0
dXJuICZyYW5nZS5mb250RGF0YSgpOworICAgICAgICAgICAgcmV0dXJuICZyYW5nZS5mb250KCk7
CiAgICAgfQogICAgIHJldHVybiBudWxscHRyOwogfQogCi1jb25zdCBTaW1wbGVGb250RGF0YSYg
Rm9udFJhbmdlczo6Zm9udERhdGFGb3JGaXJzdFJhbmdlKCkgY29uc3QKK2NvbnN0IEZvbnQmIEZv
bnRSYW5nZXM6OmZvbnRGb3JGaXJzdFJhbmdlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9yYW5n
ZXNbMF0uZm9udERhdGEoKTsKKyAgICByZXR1cm4gbV9yYW5nZXNbMF0uZm9udCgpOwogfQogCiBi
b29sIEZvbnRSYW5nZXM6OmlzTG9hZGluZygpIGNvbnN0CiB7CiAgICAgZm9yIChhdXRvJiByYW5n
ZSA6IG1fcmFuZ2VzKSB7Ci0gICAgICAgIGlmIChyYW5nZS5mb250RGF0YSgpLmlzTG9hZGluZygp
KQorICAgICAgICBpZiAocmFuZ2UuZm9udCgpLmlzTG9hZGluZygpKQogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRSYW5nZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UmFuZ2VzLmgJKHJldmlzaW9uIDE3ODg1NykKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRSYW5nZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBGb250UmFuZ2VzX2gKICNkZWZpbmUgRm9u
dFJhbmdlc19oCiAKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgorI2luY2x1ZGUgIkZvbnQu
aCIKICNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgog
CkBAIC0zNSwyNSArMzUsMjUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgRm9udFJhbmdl
cyB7CiBwdWJsaWM6CiAgICAgc3RydWN0IFJhbmdlIHsKLSAgICAgICAgUmFuZ2UoVUNoYXIzMiBm
cm9tLCBVQ2hhcjMyIHRvLCBSZWY8U2ltcGxlRm9udERhdGE+JiYgZm9udERhdGEpCisgICAgICAg
IFJhbmdlKFVDaGFyMzIgZnJvbSwgVUNoYXIzMiB0bywgUmVmPEZvbnQ+JiYgZm9udCkKICAgICAg
ICAgICAgIDogbV9mcm9tKGZyb20pCiAgICAgICAgICAgICAsIG1fdG8odG8pCi0gICAgICAgICAg
ICAsIG1fZm9udERhdGEoV1RGOjptb3ZlKGZvbnREYXRhKSkKKyAgICAgICAgICAgICwgbV9mb250
KFdURjo6bW92ZShmb250KSkKICAgICAgICAgewogICAgICAgICB9CiAKICAgICAgICAgVUNoYXIz
MiBmcm9tKCkgY29uc3QgeyByZXR1cm4gbV9mcm9tOyB9CiAgICAgICAgIFVDaGFyMzIgdG8oKSBj
b25zdCB7IHJldHVybiBtX3RvOyB9Ci0gICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhJiBmb250
RGF0YSgpIGNvbnN0IHsgcmV0dXJuICptX2ZvbnREYXRhOyB9CisgICAgICAgIGNvbnN0IEZvbnQm
IGZvbnQoKSBjb25zdCB7IHJldHVybiAqbV9mb250OyB9CiAKICAgICBwcml2YXRlOgogICAgICAg
ICBVQ2hhcjMyIG1fZnJvbTsKICAgICAgICAgVUNoYXIzMiBtX3RvOwotICAgICAgICBSZWZQdHI8
U2ltcGxlRm9udERhdGE+IG1fZm9udERhdGE7CisgICAgICAgIFJlZlB0cjxGb250PiBtX2ZvbnQ7
CiAgICAgfTsKIAogICAgIEZvbnRSYW5nZXMoKTsKLSAgICBleHBsaWNpdCBGb250UmFuZ2VzKFJl
ZlB0cjxTaW1wbGVGb250RGF0YT4mJik7CisgICAgZXhwbGljaXQgRm9udFJhbmdlcyhSZWZQdHI8
Rm9udD4mJik7CiAgICAgfkZvbnRSYW5nZXMoKTsKIAogICAgIGJvb2wgaXNOdWxsKCkgY29uc3Qg
eyByZXR1cm4gbV9yYW5nZXMuaXNFbXB0eSgpOyB9CkBAIC02Miw4ICs2Miw4IEBAIHB1YmxpYzoK
ICAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9yYW5nZXMuc2l6ZSgpOyB9CiAg
ICAgY29uc3QgUmFuZ2UmIHJhbmdlQXQodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9yYW5n
ZXNbaV07IH0KIAotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YUZvckNoYXJhY3Rl
cihVQ2hhcjMyKSBjb25zdDsKLSAgICBjb25zdCBTaW1wbGVGb250RGF0YSYgZm9udERhdGFGb3JG
aXJzdFJhbmdlKCkgY29uc3Q7CisgICAgY29uc3QgRm9udCogZm9udEZvckNoYXJhY3RlcihVQ2hh
cjMyKSBjb25zdDsKKyAgICBjb25zdCBGb250JiBmb250Rm9yRmlyc3RSYW5nZSgpIGNvbnN0Owog
ICAgIGJvb2wgaXNMb2FkaW5nKCkgY29uc3Q7CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3IuaAkocmV2aXNpb24gMTc4
ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFNlbGVjdG9yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQxLDkgKzQxLDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfkZv
bnRTZWxlY3RvcigpIHsgfQogCiAgICAgdmlydHVhbCBGb250UmFuZ2VzIGZvbnRSYW5nZXNGb3JG
YW1pbHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbWljU3RyaW5nJikgPSAwOwot
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gZmFsbGJhY2tGb250RGF0YUF0
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIHNpemVfdCkgPSAwOworICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxGb250PiBmYWxsYmFja0ZvbnRBdChjb25zdCBGb250RGVzY3JpcHRpb24mLCBzaXplX3Qp
ID0gMDsKIAotICAgIHZpcnR1YWwgc2l6ZV90IGZhbGxiYWNrRm9udERhdGFDb3VudCgpID0gMDsK
KyAgICB2aXJ0dWFsIHNpemVfdCBmYWxsYmFja0ZvbnRDb3VudCgpID0gMDsKICAgICB2aXJ0dWFs
IGJvb2wgcmVzb2x2ZXNGYW1pbHlGb3IoY29uc3QgRm9udERlc2NyaXB0aW9uJikgY29uc3QgPSAw
OwogCiAgICAgdmlydHVhbCB2b2lkIGZvbnRDYWNoZUludmFsaWRhdGVkKCkgeyB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaEJ1ZmZlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoQnVmZmVyLmgJKHJldmlz
aW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoQnVm
ZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1jbGFzcyBTaW1wbGVGb250RGF0YTsKK2NsYXNzIEZvbnQ7CiAKICNpZiBVU0UoQ0FJ
Uk8pCiAvLyBGSVhNRTogV2h5IGRvZXMgQ2Fpcm8gdXNlIHN1Y2ggYSBodWdlIHN0cnVjdCBpbnN0
ZWFkIG9mIGp1c3QgYW4gb2Zmc2V0IGludG8gYW4gYXJyYXk/CkBAIC03NiwxMiArNzYsMTIgQEAg
dHlwZWRlZiBGbG9hdFNpemUgR2x5cGhCdWZmZXJBZHZhbmNlOwogCiBjbGFzcyBHbHlwaEJ1ZmZl
ciB7CiBwdWJsaWM6Ci0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9mb250RGF0
YS5pc0VtcHR5KCk7IH0KLSAgICBpbnQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERhdGEu
c2l6ZSgpOyB9CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9mb250LmlzRW1w
dHkoKTsgfQorICAgIGludCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9mb250LnNpemUoKTsgfQog
ICAgIAogICAgIHZvaWQgY2xlYXIoKQogICAgIHsKLSAgICAgICAgbV9mb250RGF0YS5jbGVhcigp
OworICAgICAgICBtX2ZvbnQuY2xlYXIoKTsKICAgICAgICAgbV9nbHlwaHMuY2xlYXIoKTsKICAg
ICAgICAgbV9hZHZhbmNlcy5jbGVhcigpOwogICAgICAgICBpZiAobV9vZmZzZXRzSW5TdHJpbmcp
CkBAIC05Niw3ICs5Niw3IEBAIHB1YmxpYzoKICAgICBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBn
bHlwaHMoaW50IGZyb20pIGNvbnN0IHsgcmV0dXJuIG1fZ2x5cGhzLmRhdGEoKSArIGZyb207IH0K
ICAgICBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzKGludCBmcm9tKSBjb25zdCB7
IHJldHVybiBtX2FkdmFuY2VzLmRhdGEoKSArIGZyb207IH0KIAotICAgIGNvbnN0IFNpbXBsZUZv
bnREYXRhKiBmb250RGF0YUF0KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9mb250RGF0YVtp
bmRleF07IH0KKyAgICBjb25zdCBGb250KiBmb250QXQoaW50IGluZGV4KSBjb25zdCB7IHJldHVy
biBtX2ZvbnRbaW5kZXhdOyB9CiAKICAgICB2b2lkIHNldEluaXRpYWxBZHZhbmNlKEdseXBoQnVm
ZmVyQWR2YW5jZSBpbml0aWFsQWR2YW5jZSkgeyBtX2luaXRpYWxBZHZhbmNlID0gaW5pdGlhbEFk
dmFuY2U7IH0KICAgICBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UmIGluaXRpYWxBZHZhbmNlKCkg
Y29uc3QgeyByZXR1cm4gbV9pbml0aWFsQWR2YW5jZTsgfQpAQCAtMTI2LDkgKzEyNiw5IEBAIHB1
YmxpYzoKICAgICB9CiAgICAgCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG5vT2Zmc2V0ID0g
VUlOVF9NQVg7Ci0gICAgdm9pZCBhZGQoR2x5cGggZ2x5cGgsIGNvbnN0IFNpbXBsZUZvbnREYXRh
KiBmb250LCBmbG9hdCB3aWR0aCwgdW5zaWduZWQgb2Zmc2V0SW5TdHJpbmcgPSBub09mZnNldCwg
Y29uc3QgRmxvYXRTaXplKiBvZmZzZXQgPSAwKQorICAgIHZvaWQgYWRkKEdseXBoIGdseXBoLCBj
b25zdCBGb250KiBmb250LCBmbG9hdCB3aWR0aCwgdW5zaWduZWQgb2Zmc2V0SW5TdHJpbmcgPSBu
b09mZnNldCwgY29uc3QgRmxvYXRTaXplKiBvZmZzZXQgPSAwKQogICAgIHsKLSAgICAgICAgbV9m
b250RGF0YS5hcHBlbmQoZm9udCk7CisgICAgICAgIG1fZm9udC5hcHBlbmQoZm9udCk7CiAKICNp
ZiBVU0UoQ0FJUk8pCiAgICAgICAgIGNhaXJvX2dseXBoX3QgY2Fpcm9HbHlwaDsKQEAgLTE1OSw5
ICsxNTksOSBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogI2lmICFVU0UoV0lOR0RJKQotICAgIHZv
aWQgYWRkKEdseXBoIGdseXBoLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgR2x5cGhCdWZm
ZXJBZHZhbmNlIGFkdmFuY2UsIHVuc2lnbmVkIG9mZnNldEluU3RyaW5nID0gbm9PZmZzZXQpCisg
ICAgdm9pZCBhZGQoR2x5cGggZ2x5cGgsIGNvbnN0IEZvbnQqIGZvbnQsIEdseXBoQnVmZmVyQWR2
YW5jZSBhZHZhbmNlLCB1bnNpZ25lZCBvZmZzZXRJblN0cmluZyA9IG5vT2Zmc2V0KQogICAgIHsK
LSAgICAgICAgbV9mb250RGF0YS5hcHBlbmQoZm9udCk7CisgICAgICAgIG1fZm9udC5hcHBlbmQo
Zm9udCk7CiAjaWYgVVNFKENBSVJPKQogICAgICAgICBjYWlyb19nbHlwaF90IGNhaXJvR2x5cGg7
CiAgICAgICAgIGNhaXJvR2x5cGguaW5kZXggPSBnbHlwaDsKQEAgLTIwNSw5ICsyMDUsOSBAQCBw
dWJsaWM6CiBwcml2YXRlOgogICAgIHZvaWQgc3dhcChpbnQgaW5kZXgxLCBpbnQgaW5kZXgyKQog
ICAgIHsKLSAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGYgPSBtX2ZvbnREYXRhW2luZGV4
MV07Ci0gICAgICAgIG1fZm9udERhdGFbaW5kZXgxXSA9IG1fZm9udERhdGFbaW5kZXgyXTsKLSAg
ICAgICAgbV9mb250RGF0YVtpbmRleDJdID0gZjsKKyAgICAgICAgY29uc3QgRm9udCogZiA9IG1f
Zm9udFtpbmRleDFdOworICAgICAgICBtX2ZvbnRbaW5kZXgxXSA9IG1fZm9udFtpbmRleDJdOwor
ICAgICAgICBtX2ZvbnRbaW5kZXgyXSA9IGY7CiAKICAgICAgICAgR2x5cGhCdWZmZXJHbHlwaCBn
ID0gbV9nbHlwaHNbaW5kZXgxXTsKICAgICAgICAgbV9nbHlwaHNbaW5kZXgxXSA9IG1fZ2x5cGhz
W2luZGV4Ml07CkBAIC0yMjQsNyArMjI0LDcgQEAgcHJpdmF0ZToKICNlbmRpZgogICAgIH0KIAot
ICAgIFZlY3Rvcjxjb25zdCBTaW1wbGVGb250RGF0YSosIDIwNDg+IG1fZm9udERhdGE7CisgICAg
VmVjdG9yPGNvbnN0IEZvbnQqLCAyMDQ4PiBtX2ZvbnQ7CiAgICAgVmVjdG9yPEdseXBoQnVmZmVy
R2x5cGgsIDIwNDg+IG1fZ2x5cGhzOwogICAgIFZlY3RvcjxHbHlwaEJ1ZmZlckFkdmFuY2UsIDIw
NDg+IG1fYWR2YW5jZXM7CiAgICAgR2x5cGhCdWZmZXJBZHZhbmNlIG1faW5pdGlhbEFkdmFuY2U7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2UuaAko
cmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5
cGhQYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDE4ICszOSwxOCBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLWNsYXNzIFNpbXBsZUZvbnREYXRhOworY2xhc3MgRm9udDsKIAotLy8gSG9s
ZHMgdGhlIGdseXBoIGluZGV4IGFuZCB0aGUgY29ycmVzcG9uZGluZyBTaW1wbGVGb250RGF0YSBp
bmZvcm1hdGlvbiBmb3IgYSBnaXZlbgorLy8gSG9sZHMgdGhlIGdseXBoIGluZGV4IGFuZCB0aGUg
Y29ycmVzcG9uZGluZyBGb250IGluZm9ybWF0aW9uIGZvciBhIGdpdmVuCiAvLyBjaGFyYWN0ZXIu
CiBzdHJ1Y3QgR2x5cGhEYXRhIHsKLSAgICBHbHlwaERhdGEoR2x5cGggZyA9IDAsIGNvbnN0IFNp
bXBsZUZvbnREYXRhKiBmID0gMCkKKyAgICBHbHlwaERhdGEoR2x5cGggZyA9IDAsIGNvbnN0IEZv
bnQqIGYgPSAwKQogICAgICAgICA6IGdseXBoKGcpCi0gICAgICAgICwgZm9udERhdGEoZikKKyAg
ICAgICAgLCBmb250KGYpCiAgICAgewogICAgIH0KICAgICBHbHlwaCBnbHlwaDsKLSAgICBjb25z
dCBTaW1wbGVGb250RGF0YSogZm9udERhdGE7CisgICAgY29uc3QgRm9udCogZm9udDsKIH07CiAK
ICNpZiBDT01QSUxFUihNU1ZDKQpAQCAtNjYsMjQgKzY2LDI0IEBAIHN0cnVjdCBHbHlwaERhdGEg
ewogLy8gbWlzc2luZyBpbiB0aGUgcHJpbWFyeSBmb250LgogY2xhc3MgR2x5cGhQYWdlIDogcHVi
bGljIFJlZkNvdW50ZWQ8R2x5cGhQYWdlPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQ
dHI8R2x5cGhQYWdlPiBjcmVhdGVGb3JNaXhlZEZvbnREYXRhKCkKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxHbHlwaFBhZ2U+IGNyZWF0ZUZvck1peGVkRm9udHMoKQogICAgIHsKLSAgICAgICAgdm9p
ZCogc2xvdCA9IGZhc3RNYWxsb2Moc2l6ZW9mKEdseXBoUGFnZSkgKyBzaXplb2YoU2ltcGxlRm9u
dERhdGEqKSAqIEdseXBoUGFnZTo6c2l6ZSk7CisgICAgICAgIHZvaWQqIHNsb3QgPSBmYXN0TWFs
bG9jKHNpemVvZihHbHlwaFBhZ2UpICsgc2l6ZW9mKEZvbnQqKSAqIEdseXBoUGFnZTo6c2l6ZSk7
CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgKE5vdE51bGwsIHNsb3QpIEdseXBoUGFnZShu
dWxscHRyKSk7CiAgICAgfQogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8R2x5cGhQYWdlPiBjcmVh
dGVDb3B5Rm9yTWl4ZWRGb250RGF0YShjb25zdCBHbHlwaFBhZ2UmIG9yaWdpbmFsKQorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEdseXBoUGFnZT4gY3JlYXRlQ29weUZvck1peGVkRm9udHMoY29uc3Qg
R2x5cGhQYWdlJiBvcmlnaW5hbCkKICAgICB7Ci0gICAgICAgIFJlZlB0cjxHbHlwaFBhZ2U+IHBh
Z2UgPSBjcmVhdGVGb3JNaXhlZEZvbnREYXRhKCk7CisgICAgICAgIFJlZlB0cjxHbHlwaFBhZ2U+
IHBhZ2UgPSBjcmVhdGVGb3JNaXhlZEZvbnRzKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBHbHlwaFBhZ2U6OnNpemU7ICsraSkKICAgICAgICAgICAgIHBhZ2UtPnNldEdseXBo
RGF0YUZvckluZGV4KGksIG9yaWdpbmFsLmdseXBoRGF0YUZvckluZGV4KGkpKTsKICAgICAgICAg
cmV0dXJuIHBhZ2UucmVsZWFzZSgpOwogICAgIH0KIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEds
eXBoUGFnZT4gY3JlYXRlRm9yU2luZ2xlRm9udERhdGEoY29uc3QgU2ltcGxlRm9udERhdGEqIGZv
bnREYXRhKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdseXBoUGFnZT4gY3JlYXRlRm9yU2luZ2xl
Rm9udChjb25zdCBGb250KiBmb250KQogICAgIHsKLSAgICAgICAgQVNTRVJUKGZvbnREYXRhKTsK
LSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHbHlwaFBhZ2UoZm9udERhdGEpKTsKKyAgICAg
ICAgQVNTRVJUKGZvbnQpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdseXBoUGFnZShm
b250KSk7CiAgICAgfQogCiAgICAgfkdseXBoUGFnZSgpCkBAIC0xMTEsNyArMTExLDcgQEAgcHVi
bGljOgogICAgICAgICBHbHlwaCBnbHlwaCA9IG1fZ2x5cGhzW2luZGV4XTsKICAgICAgICAgaWYg
KGhhc1BlckdseXBoRm9udERhdGEoKSkKICAgICAgICAgICAgIHJldHVybiBHbHlwaERhdGEoZ2x5
cGgsIG1fcGVyR2x5cGhGb250RGF0YVtpbmRleF0pOwotICAgICAgICByZXR1cm4gR2x5cGhEYXRh
KGdseXBoLCBnbHlwaCA/IG1fZm9udERhdGFGb3JBbGxHbHlwaHMgOiAwKTsKKyAgICAgICAgcmV0
dXJuIEdseXBoRGF0YShnbHlwaCwgZ2x5cGggPyBtX2ZvbnRGb3JBbGxHbHlwaHMgOiAwKTsKICAg
ICB9CiAKICAgICBBTFdBWVNfSU5MSU5FIEdseXBoIGdseXBoQXQodW5zaWduZWQgaW5kZXgpIGNv
bnN0CkBAIC0xMjAsNjcgKzEyMCw2NyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2dseXBo
c1tpbmRleF07CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSBjb25zdCBTaW1wbGVGb250RGF0
YSogZm9udERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjKSBjb25zdAorICAgIEFMV0FZU19JTkxJ
TkUgY29uc3QgRm9udCogZm9udEZvckNoYXJhY3RlcihVQ2hhcjMyIGMpIGNvbnN0CiAgICAgewog
ICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGluZGV4Rm9yQ2hhcmFjdGVyKGMpOwogICAgICAgICBp
ZiAoaGFzUGVyR2x5cGhGb250RGF0YSgpKQogICAgICAgICAgICAgcmV0dXJuIG1fcGVyR2x5cGhG
b250RGF0YVtpbmRleF07Ci0gICAgICAgIHJldHVybiBtX2dseXBoc1tpbmRleF0gPyBtX2ZvbnRE
YXRhRm9yQWxsR2x5cGhzIDogMDsKKyAgICAgICAgcmV0dXJuIG1fZ2x5cGhzW2luZGV4XSA/IG1f
Zm9udEZvckFsbEdseXBocyA6IDA7CiAgICAgfQogCi0gICAgdm9pZCBzZXRHbHlwaERhdGFGb3JD
aGFyYWN0ZXIoVUNoYXIzMiBjLCBHbHlwaCBnLCBjb25zdCBTaW1wbGVGb250RGF0YSogZikKKyAg
ICB2b2lkIHNldEdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMsIEdseXBoIGcsIGNvbnN0
IEZvbnQqIGYpCiAgICAgewogICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChpbmRleEZvckNo
YXJhY3RlcihjKSwgZywgZik7CiAgICAgfQogCi0gICAgdm9pZCBzZXRHbHlwaERhdGFGb3JJbmRl
eCh1bnNpZ25lZCBpbmRleCwgR2x5cGggZ2x5cGgsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250
RGF0YSkKKyAgICB2b2lkIHNldEdseXBoRGF0YUZvckluZGV4KHVuc2lnbmVkIGluZGV4LCBHbHlw
aCBnbHlwaCwgY29uc3QgRm9udCogZm9udCkKICAgICB7CiAgICAgICAgIEFTU0VSVF9XSVRIX1NF
Q1VSSVRZX0lNUExJQ0FUSU9OKGluZGV4IDwgc2l6ZSk7CiAgICAgICAgIEFTU0VSVCghbV9pc0lt
bXV0YWJsZSk7CiAgICAgICAgIAogICAgICAgICBtX2dseXBoc1tpbmRleF0gPSBnbHlwaDsKIAot
ICAgICAgICAvLyBHbHlwaFBhZ2UgZ2V0dGVycyB3aWxsIGFsd2F5cyByZXR1cm4gYSBudWxsIFNp
bXBsZUZvbnREYXRhKiBmb3IgZ2x5cGggIzAgaWYgdGhlcmUncyBubyBwZXItZ2x5cGggZm9udCBh
cnJheS4KKyAgICAgICAgLy8gR2x5cGhQYWdlIGdldHRlcnMgd2lsbCBhbHdheXMgcmV0dXJuIGEg
bnVsbCBGb250KiBmb3IgZ2x5cGggIzAgaWYgdGhlcmUncyBubyBwZXItZ2x5cGggZm9udCBhcnJh
eS4KICAgICAgICAgaWYgKGhhc1BlckdseXBoRm9udERhdGEoKSkgewotICAgICAgICAgICAgbV9w
ZXJHbHlwaEZvbnREYXRhW2luZGV4XSA9IGdseXBoID8gZm9udERhdGEgOiAwOworICAgICAgICAg
ICAgbV9wZXJHbHlwaEZvbnREYXRhW2luZGV4XSA9IGdseXBoID8gZm9udCA6IDA7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICAvLyBBIHNpbmdsZS1mb250IEdseXBo
UGFnZSBhbHJlYWR5IGFzc2lnbmVkIG1fZm9udERhdGFGb3JBbGxHbHlwaHMgaW4gdGhlIGNvbnN0
cnVjdG9yLgotICAgICAgICBBU1NFUlQoIWdseXBoIHx8IGZvbnREYXRhID09IG1fZm9udERhdGFG
b3JBbGxHbHlwaHMpOworICAgICAgICAvLyBBIHNpbmdsZS1mb250IEdseXBoUGFnZSBhbHJlYWR5
IGFzc2lnbmVkIG1fZm9udEZvckFsbEdseXBocyBpbiB0aGUgY29uc3RydWN0b3IuCisgICAgICAg
IEFTU0VSVCghZ2x5cGggfHwgZm9udCA9PSBtX2ZvbnRGb3JBbGxHbHlwaHMpOwogICAgIH0KIAog
ICAgIHZvaWQgc2V0R2x5cGhEYXRhRm9ySW5kZXgodW5zaWduZWQgaW5kZXgsIGNvbnN0IEdseXBo
RGF0YSYgZ2x5cGhEYXRhKQogICAgIHsKLSAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgoaW5k
ZXgsIGdseXBoRGF0YS5nbHlwaCwgZ2x5cGhEYXRhLmZvbnREYXRhKTsKKyAgICAgICAgc2V0R2x5
cGhEYXRhRm9ySW5kZXgoaW5kZXgsIGdseXBoRGF0YS5nbHlwaCwgZ2x5cGhEYXRhLmZvbnQpOwog
ICAgIH0KIAogICAgIC8vIEltcGxlbWVudGVkIGJ5IHRoZSBwbGF0Zm9ybS4KLSAgICBib29sIGZp
bGwodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBjaGFyYWN0ZXJCdWZm
ZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgU2ltcGxlRm9udERhdGEqKTsKKyAgICBi
b29sIGZpbGwodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBjaGFyYWN0
ZXJCdWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgRm9udCopOwogI2lmIFBMQVRG
T1JNKENPQ09BKQotICAgIHN0YXRpYyBib29sIG1heVVzZU1peGVkRm9udERhdGFXaGVuRmlsbGlu
Zyhjb25zdCBVQ2hhciogY2hhcmFjdGVyQnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNv
bnN0IFNpbXBsZUZvbnREYXRhKik7CisgICAgc3RhdGljIGJvb2wgbWF5VXNlTWl4ZWRGb250c1do
ZW5GaWxsaW5nKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJCdWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxl
bmd0aCwgY29uc3QgRm9udCopOwogI2Vsc2UKLSAgICBzdGF0aWMgYm9vbCBtYXlVc2VNaXhlZEZv
bnREYXRhV2hlbkZpbGxpbmcoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCwgY29uc3QgU2ltcGxlRm9u
dERhdGEqKSB7IHJldHVybiBmYWxzZTsgfQorICAgIHN0YXRpYyBib29sIG1heVVzZU1peGVkRm9u
dHNXaGVuRmlsbGluZyhjb25zdCBVQ2hhciosIHVuc2lnbmVkLCBjb25zdCBGb250KikgeyByZXR1
cm4gZmFsc2U7IH0KICNlbmRpZgogCiBwcml2YXRlOgotICAgIGV4cGxpY2l0IEdseXBoUGFnZShj
b25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGFGb3JBbGxHbHlwaHMpCi0gICAgICAgIDogbV9m
b250RGF0YUZvckFsbEdseXBocyhmb250RGF0YUZvckFsbEdseXBocykKKyAgICBleHBsaWNpdCBH
bHlwaFBhZ2UoY29uc3QgRm9udCogZm9udEZvckFsbEdseXBocykKKyAgICAgICAgOiBtX2ZvbnRG
b3JBbGxHbHlwaHMoZm9udEZvckFsbEdseXBocykKICAgICB7CiAgICAgICAgIG1lbXNldChtX2ds
eXBocywgMCwgc2l6ZW9mKG1fZ2x5cGhzKSk7CiAgICAgICAgIGlmIChoYXNQZXJHbHlwaEZvbnRE
YXRhKCkpCi0gICAgICAgICAgICBtZW1zZXQobV9wZXJHbHlwaEZvbnREYXRhLCAwLCBzaXplb2Yo
U2ltcGxlRm9udERhdGEqKSAqIEdseXBoUGFnZTo6c2l6ZSk7CisgICAgICAgICAgICBtZW1zZXQo
bV9wZXJHbHlwaEZvbnREYXRhLCAwLCBzaXplb2YoRm9udCopICogR2x5cGhQYWdlOjpzaXplKTsK
ICAgICAgICAgKytzX2NvdW50OwogICAgIH0KIAotICAgIGJvb2wgaGFzUGVyR2x5cGhGb250RGF0
YSgpIGNvbnN0IHsgcmV0dXJuICFtX2ZvbnREYXRhRm9yQWxsR2x5cGhzOyB9CisgICAgYm9vbCBo
YXNQZXJHbHlwaEZvbnREYXRhKCkgY29uc3QgeyByZXR1cm4gIW1fZm9udEZvckFsbEdseXBoczsg
fQogCi0gICAgY29uc3QgU2ltcGxlRm9udERhdGEqIG1fZm9udERhdGFGb3JBbGxHbHlwaHM7Cisg
ICAgY29uc3QgRm9udCogbV9mb250Rm9yQWxsR2x5cGhzOwogICAgIEdseXBoIG1fZ2x5cGhzW3Np
emVdOwogCiAgICAgYm9vbCBtX2lzSW1tdXRhYmxlIHsgZmFsc2UgfTsKLSAgICAvLyBOT1RFOiBU
aGlzIGFycmF5IGhhcyAoR2x5cGhQYWdlOjpzaXplKSBlbGVtZW50cyBpZiBtX2ZvbnREYXRhRm9y
QWxsR2x5cGhzIGlzIG51bGwuCi0gICAgY29uc3QgU2ltcGxlRm9udERhdGEqIG1fcGVyR2x5cGhG
b250RGF0YVswXTsKKyAgICAvLyBOT1RFOiBUaGlzIGFycmF5IGhhcyAoR2x5cGhQYWdlOjpzaXpl
KSBlbGVtZW50cyBpZiBtX2ZvbnRGb3JBbGxHbHlwaHMgaXMgbnVsbC4KKyAgICBjb25zdCBGb250
KiBtX3BlckdseXBoRm9udERhdGFbMF07CiAKICAgICBzdGF0aWMgdW5zaWduZWQgc19jb3VudDsK
IH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dC5jcHAJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0
OCwxMiArNDQ4LDEyIEBAIGZsb2F0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RleHQoY29uc3QgRm8K
IH0KICNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0dseXBocyhjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgU2ltcGxlRm9udERhdGEmIGZv
bnREYXRhLCBjb25zdCBHbHlwaEJ1ZmZlciYgYnVmZmVyLCBpbnQgZnJvbSwgaW50IG51bUdseXBo
cywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ds
eXBocyhjb25zdCBGb250Q2FzY2FkZSYgZm9udENhc2NhZGUsIGNvbnN0IEZvbnQmIGZvbnQsIGNv
bnN0IEdseXBoQnVmZmVyJiBidWZmZXIsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBG
bG9hdFBvaW50JiBwb2ludCkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBmb250LmRyYXdHbHlwaHModGhpcywgJmZvbnREYXRhLCBidWZmZXIs
IGZyb20sIG51bUdseXBocywgcG9pbnQpOworICAgIGZvbnRDYXNjYWRlLmRyYXdHbHlwaHModGhp
cywgJmZvbnQsIGJ1ZmZlciwgZnJvbSwgbnVtR2x5cGhzLCBwb2ludCk7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYgZm9udCwg
Y29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgJKHJldmlzaW9uIDE3ODg1
NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5o
CSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
I2lmIFVTRShXSU5HREkpCiAgICAgY2xhc3MgU2hhcmVkQml0bWFwOwotICAgIGNsYXNzIFNpbXBs
ZUZvbnREYXRhOworICAgIGNsYXNzIEZvbnQ7CiAgICAgY2xhc3MgR2x5cGhCdWZmZXI7CiAjZW5k
aWYKIApAQCAtMzYwLDcgKzM2MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNlbHNlCiAgICAg
ICAgIGZsb2F0IGRyYXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNv
bnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0xKTsKICNlbmRpZgotICAg
ICAgICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBTaW1wbGVGb250
RGF0YSYsIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0
IEZsb2F0UG9pbnQmKTsKKyAgICAgICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnRDYXNjYWRl
JiwgY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCBudW1HbHlw
aHMsIGNvbnN0IEZsb2F0UG9pbnQmKTsKICAgICAgICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrcyhj
b25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mICwgY29uc3QgQXRvbWljU3RyaW5nJiBt
YXJrLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSk7CiAjaWYg
IVBMQVRGT1JNKElPUykKICAgICAgICAgdm9pZCBkcmF3QmlkaVRleHQoY29uc3QgRm9udENhc2Nh
ZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRDYXNjYWRlOjpDdXN0
b21Gb250Tm90UmVhZHlBY3Rpb24gPSBGb250Q2FzY2FkZTo6RG9Ob3RQYWludElmRm9udE5vdFJl
YWR5KTsKQEAgLTQ3OSw3ICs0NzksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEFm
ZmluZVRyYW5zZm9ybSYgYWZmaW5lVHJhbnNmb3JtKCk7CiAgICAgICAgIHZvaWQgcmVzZXRBZmZp
bmVUcmFuc2Zvcm0oKTsKICAgICAgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBj
b25zdCBHcmFkaWVudCopOwotICAgICAgICB2b2lkIGRyYXdUZXh0KGNvbnN0IFNpbXBsZUZvbnRE
YXRhKiBmb250RGF0YSwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBpbnQgZnJvbSwg
aW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpOworICAgICAgICB2b2lkIGRy
YXdUZXh0KGNvbnN0IEZvbnQqLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBmcm9tLCBpbnQgbnVt
R2x5cGhzLCBjb25zdCBGbG9hdFBvaW50Jik7CiAgICAgICAgIHZvaWQgZHJhd0ZyYW1lQ29udHJv
bChjb25zdCBJbnRSZWN0JiByZWN0LCB1bnNpZ25lZCB0eXBlLCB1bnNpZ25lZCBzdGF0ZSk7CiAg
ICAgICAgIHZvaWQgZHJhd0ZvY3VzUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KTsKICAgICAgICAg
dm9pZCBwYWludFRleHRGaWVsZChjb25zdCBJbnRSZWN0JiByZWN0LCB1bnNpZ25lZCBzdGF0ZSk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxl
Rm9udERhdGEuY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNDU2ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDgsIDIwMTAsIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQ
cm9za3VyeWFrb3YKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUg
b2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0g
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgotCi0j
aWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05f
TUlOX1JFUVVJUkVEID4gMTA4MCkKLSNpbmNsdWRlICJDb3JlVGV4dFNQSS5oIgotI2VuZGlmCi0j
aW5jbHVkZSAiRm9udENhY2hlLmgiCi0jaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKLSNpbmNsdWRl
ICJPcGVuVHlwZU1hdGhEYXRhLmgiCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNs
dWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLQotI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNB
TCkKLSNpbmNsdWRlICJPcGVuVHlwZVZlcnRpY2FsRGF0YS5oIgotI2VuZGlmCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotdW5zaWduZWQgR2x5cGhQYWdlOjpzX2NvdW50ID0gMDsKLQotY29uc3Qg
ZmxvYXQgc21hbGxDYXBzRm9udFNpemVNdWx0aXBsaWVyID0gMC43ZjsKLWNvbnN0IGZsb2F0IGVt
cGhhc2lzTWFya0ZvbnRTaXplTXVsdGlwbGllciA9IDAuNWY7Ci0KLVNpbXBsZUZvbnREYXRhOjpT
aW1wbGVGb250RGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEsIGJvb2wg
aXNDdXN0b21Gb250LCBib29sIGlzTG9hZGluZywgYm9vbCBpc1RleHRPcmllbnRhdGlvbkZhbGxi
YWNrKQotICAgIDogbV9tYXhDaGFyV2lkdGgoLTEpCi0gICAgLCBtX2F2Z0NoYXJXaWR0aCgtMSkK
LSAgICAsIG1fcGxhdGZvcm1EYXRhKHBsYXRmb3JtRGF0YSkKLSAgICAsIG1fdHJlYXRBc0ZpeGVk
UGl0Y2goZmFsc2UpCi0gICAgLCBtX2lzQ3VzdG9tRm9udChpc0N1c3RvbUZvbnQpCi0gICAgLCBt
X2lzTG9hZGluZyhpc0xvYWRpbmcpCi0gICAgLCBtX2lzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2so
aXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaykKLSAgICAsIG1faXNCcm9rZW5JZGVvZ3JhcGhGYWxs
YmFjayhmYWxzZSkKLSAgICAsIG1fbWF0aERhdGEobnVsbHB0cikKLSNpZiBFTkFCTEUoT1BFTlRZ
UEVfVkVSVElDQUwpCi0gICAgLCBtX3ZlcnRpY2FsRGF0YSgwKQotI2VuZGlmCi0gICAgLCBtX2hh
c1ZlcnRpY2FsR2x5cGhzKGZhbHNlKQotewotICAgIHBsYXRmb3JtSW5pdCgpOwotICAgIHBsYXRm
b3JtR2x5cGhJbml0KCk7Ci0gICAgcGxhdGZvcm1DaGFyV2lkdGhJbml0KCk7Ci0jaWYgRU5BQkxF
KE9QRU5UWVBFX1ZFUlRJQ0FMKQotICAgIGlmIChwbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSA9
PSBWZXJ0aWNhbCAmJiAhaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaykgewotICAgICAgICBtX3Zl
cnRpY2FsRGF0YSA9IHBsYXRmb3JtRGF0YS52ZXJ0aWNhbERhdGEoKTsKLSAgICAgICAgbV9oYXNW
ZXJ0aWNhbEdseXBocyA9IG1fdmVydGljYWxEYXRhLmdldCgpICYmIG1fdmVydGljYWxEYXRhLT5o
YXNWZXJ0aWNhbE1ldHJpY3MoKTsKLSAgICB9Ci0jZW5kaWYKLX0KLQotU2ltcGxlRm9udERhdGE6
OlNpbXBsZUZvbnREYXRhKHN0ZDo6dW5pcXVlX3B0cjxTVkdEYXRhPiBzdmdEYXRhLCBmbG9hdCBm
b250U2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYykKLSAgICA6
IG1fcGxhdGZvcm1EYXRhKEZvbnRQbGF0Zm9ybURhdGEoZm9udFNpemUsIHN5bnRoZXRpY0JvbGQs
IHN5bnRoZXRpY0l0YWxpYykpCi0gICAgLCBtX3N2Z0RhdGEoV1RGOjptb3ZlKHN2Z0RhdGEpKQot
ICAgICwgbV90cmVhdEFzRml4ZWRQaXRjaChmYWxzZSkKLSAgICAsIG1faXNDdXN0b21Gb250KHRy
dWUpCi0gICAgLCBtX2lzTG9hZGluZyhmYWxzZSkKLSAgICAsIG1faXNUZXh0T3JpZW50YXRpb25G
YWxsYmFjayhmYWxzZSkKLSAgICAsIG1faXNCcm9rZW5JZGVvZ3JhcGhGYWxsYmFjayhmYWxzZSkK
LSAgICAsIG1fbWF0aERhdGEobnVsbHB0cikKLSNpZiBFTkFCTEUoT1BFTlRZUEVfVkVSVElDQUwp
Ci0gICAgLCBtX3ZlcnRpY2FsRGF0YSgwKQotI2VuZGlmCi0gICAgLCBtX2hhc1ZlcnRpY2FsR2x5
cGhzKGZhbHNlKQotI2lmIFBMQVRGT1JNKElPUykKLSAgICAsIG1fc2hvdWxkTm90QmVVc2VkRm9y
QXJhYmljKGZhbHNlKQotI2VuZGlmCi17Ci0gICAgbV9zdmdEYXRhLT5pbml0aWFsaXplRm9udERh
dGEodGhpcywgZm9udFNpemUpOwotfQotCi0vLyBFc3RpbWF0ZXMgb2YgYXZnQ2hhcldpZHRoIGFu
ZCBtYXhDaGFyV2lkdGggZm9yIHBsYXRmb3JtcyB0aGF0IGRvbid0IHN1cHBvcnQgYWNjZXNzaW5n
IHRoZXNlIHZhbHVlcyBmcm9tIHRoZSBmb250Lgotdm9pZCBTaW1wbGVGb250RGF0YTo6aW5pdENo
YXJXaWR0aHMoKQotewotICAgIGF1dG8qIGdseXBoUGFnZVplcm8gPSBnbHlwaFBhZ2UoMCk7Ci0K
LSAgICAvLyBUcmVhdCB0aGUgd2lkdGggb2YgYSAnMCcgYXMgdGhlIGF2Z0NoYXJXaWR0aC4KLSAg
ICBpZiAobV9hdmdDaGFyV2lkdGggPD0gMC5mICYmIGdseXBoUGFnZVplcm8pIHsKLSAgICAgICAg
c3RhdGljIGNvbnN0IFVDaGFyMzIgZGlnaXRaZXJvQ2hhciA9ICcwJzsKLSAgICAgICAgR2x5cGgg
ZGlnaXRaZXJvR2x5cGggPSBnbHlwaFBhZ2VaZXJvLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoZGln
aXRaZXJvQ2hhcikuZ2x5cGg7Ci0gICAgICAgIGlmIChkaWdpdFplcm9HbHlwaCkKLSAgICAgICAg
ICAgIG1fYXZnQ2hhcldpZHRoID0gd2lkdGhGb3JHbHlwaChkaWdpdFplcm9HbHlwaCk7Ci0gICAg
fQotCi0gICAgLy8gSWYgd2UgY2FuJ3QgcmV0cmlldmUgdGhlIHdpZHRoIG9mIGEgJzAnLCBmYWxs
IGJhY2sgdG8gdGhlIHggaGVpZ2h0LgotICAgIGlmIChtX2F2Z0NoYXJXaWR0aCA8PSAwLmYpCi0g
ICAgICAgIG1fYXZnQ2hhcldpZHRoID0gbV9mb250TWV0cmljcy54SGVpZ2h0KCk7Ci0KLSAgICBp
ZiAobV9tYXhDaGFyV2lkdGggPD0gMC5mKQotICAgICAgICBtX21heENoYXJXaWR0aCA9IHN0ZDo6
bWF4KG1fYXZnQ2hhcldpZHRoLCBtX2ZvbnRNZXRyaWNzLmZsb2F0QXNjZW50KCkpOwotfQotCi12
b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUdseXBoSW5pdCgpCi17Ci0gICAgYXV0byogZ2x5
cGhQYWdlWmVybyA9IGdseXBoUGFnZSgwKTsKLSAgICBpZiAoIWdseXBoUGFnZVplcm8pIHsKLSAg
ICAgICAgbV9zcGFjZUdseXBoID0gMDsKLSAgICAgICAgbV9zcGFjZVdpZHRoID0gMDsKLSAgICAg
ICAgbV96ZXJvR2x5cGggPSAwOwotICAgICAgICBtX2FkanVzdGVkU3BhY2VXaWR0aCA9IDA7Ci0g
ICAgICAgIGRldGVybWluZVBpdGNoKCk7Ci0gICAgICAgIG1femVyb1dpZHRoU3BhY2VHbHlwaCA9
IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBBc2sgZm9yIHRoZSBnbHlwaCBm
b3IgMCB0byBhdm9pZCBwYWdpbmcgaW4gWkVSTyBXSURUSCBTUEFDRS4gQ29udHJvbCBjaGFyYWN0
ZXJzLCBpbmNsdWRpbmcgMCwKLSAgICAvLyBhcmUgbWFwcGVkIHRvIHRoZSBaRVJPIFdJRFRIIFNQ
QUNFIGdseXBoLgotICAgIG1femVyb1dpZHRoU3BhY2VHbHlwaCA9IGdseXBoUGFnZVplcm8tPmds
eXBoRGF0YUZvckNoYXJhY3RlcigwKS5nbHlwaDsKLQotICAgIC8vIE5hc3R5IGhhY2sgdG8gZGV0
ZXJtaW5lIGlmIHdlIHNob3VsZCByb3VuZCBvciBjZWlsIHNwYWNlIHdpZHRocy4KLSAgICAvLyBJ
ZiB0aGUgZm9udCBpcyBtb25vc3BhY2Ugb3IgZmFrZSBtb25vc3BhY2Ugd2UgY2VpbCB0byBlbnN1
cmUgdGhhdCAKLSAgICAvLyBldmVyeSBjaGFyYWN0ZXIgYW5kIHRoZSBzcGFjZSBhcmUgdGhlIHNh
bWUgd2lkdGguICBPdGhlcndpc2Ugd2Ugcm91bmQuCi0gICAgbV9zcGFjZUdseXBoID0gZ2x5cGhQ
YWdlWmVyby0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKCcgJykuZ2x5cGg7Ci0gICAgZmxvYXQgd2lk
dGggPSB3aWR0aEZvckdseXBoKG1fc3BhY2VHbHlwaCk7Ci0gICAgbV9zcGFjZVdpZHRoID0gd2lk
dGg7Ci0gICAgbV96ZXJvR2x5cGggPSBnbHlwaFBhZ2VaZXJvLT5nbHlwaERhdGFGb3JDaGFyYWN0
ZXIoJzAnKS5nbHlwaDsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldFplcm9XaWR0aCh3aWR0aEZvckds
eXBoKG1femVyb0dseXBoKSk7Ci0gICAgZGV0ZXJtaW5lUGl0Y2goKTsKLSAgICBtX2FkanVzdGVk
U3BhY2VXaWR0aCA9IG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPyBjZWlsZih3aWR0aCkgOiByb3VuZGYo
d2lkdGgpOwotCi0gICAgLy8gRm9yY2UgdGhlIGdseXBoIGZvciBaRVJPIFdJRFRIIFNQQUNFIHRv
IGhhdmUgemVybyB3aWR0aCwgdW5sZXNzIGl0IGlzIHNoYXJlZCB3aXRoIFNQQUNFLgotICAgIC8v
IEhlbHZldGljYSBpcyBhbiBleGFtcGxlIG9mIGEgbm9uLXplcm8gd2lkdGggWkVSTyBXSURUSCBT
UEFDRSBnbHlwaC4KLSAgICAvLyBTZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEzMTc4PiBhbmQgU2ltcGxlRm9udERhdGE6OmlzWmVyb1dpZHRoU3BhY2VHbHlwaCgp
Ci0gICAgaWYgKG1femVyb1dpZHRoU3BhY2VHbHlwaCA9PSBtX3NwYWNlR2x5cGgpCi0gICAgICAg
IG1femVyb1dpZHRoU3BhY2VHbHlwaCA9IDA7Ci19Ci0KLVNpbXBsZUZvbnREYXRhOjp+U2ltcGxl
Rm9udERhdGEoKQotewotICAgIHJlbW92ZUZyb21TeXN0ZW1GYWxsYmFja0NhY2hlKCk7Ci19Ci0K
LXN0YXRpYyBib29sIGZpbGxHbHlwaFBhZ2UoR2x5cGhQYWdlJiBwYWdlVG9GaWxsLCB1bnNpZ25l
ZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVy
TGVuZ3RoLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEpCi17Ci0jaWYgRU5BQkxFKFNW
R19GT05UUykKLSAgICBpZiAoYXV0byogc3ZnRGF0YSA9IGZvbnREYXRhLT5zdmdEYXRhKCkpCi0g
ICAgICAgIHJldHVybiBzdmdEYXRhLT5maWxsU1ZHR2x5cGhQYWdlKCZwYWdlVG9GaWxsLCBvZmZz
ZXQsIGxlbmd0aCwgYnVmZmVyLCBidWZmZXJMZW5ndGgsIGZvbnREYXRhKTsKLSNlbmRpZgotICAg
IGJvb2wgaGFzR2x5cGhzID0gcGFnZVRvRmlsbC5maWxsKG9mZnNldCwgbGVuZ3RoLCBidWZmZXIs
IGJ1ZmZlckxlbmd0aCwgZm9udERhdGEpOwotI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkK
LSAgICBpZiAoaGFzR2x5cGhzICYmIGZvbnREYXRhLT52ZXJ0aWNhbERhdGEoKSkKLSAgICAgICAg
Zm9udERhdGEtPnZlcnRpY2FsRGF0YSgpLT5zdWJzdGl0dXRlV2l0aFZlcnRpY2FsR2x5cGhzKGZv
bnREYXRhLCAmcGFnZVRvRmlsbCwgb2Zmc2V0LCBsZW5ndGgpOwotI2VuZGlmCi0gICAgcmV0dXJu
IGhhc0dseXBoczsKLX0KLQotc3RhdGljIFJlZlB0cjxHbHlwaFBhZ2U+IGNyZWF0ZUFuZEZpbGxH
bHlwaFBhZ2UodW5zaWduZWQgcGFnZU51bWJlciwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnRE
YXRhKQotewotI2lmIFBMQVRGT1JNKElPUykKLSAgICAvLyBGSVhNRTogVGltZXMgTmV3IFJvbWFu
IGNvbnRhaW5zIEFyYWJpYyBnbHlwaHMsIGJ1dCBDb3JlIFRleHQgZG9lc24ndCBrbm93IGhvdyB0
byBzaGFwZSB0aGVtLiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzk4MjM5NzU+LgotICAgIC8vIE9uY2Ug
d2UgaGF2ZSB0aGUgZml4IGZvciA8cmRhcjovL3Byb2JsZW0vOTgyMzk3NT4gdGhlbiByZW1vdmUg
dGhpcyBjb2RlIHRvZ2V0aGVyIHdpdGggU2ltcGxlRm9udERhdGE6OnNob3VsZE5vdEJlVXNlZEZv
ckFyYWJpYygpCi0gICAgLy8gaW4gPHJkYXI6Ly9wcm9ibGVtLzEyMDk2ODM1Pi4KLSAgICBpZiAo
cGFnZU51bWJlciA9PSA2ICYmIGZvbnREYXRhLT5zaG91bGROb3RCZVVzZWRGb3JBcmFiaWMoKSkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0jZW5kaWYKLQotICAgIHVuc2lnbmVkIHN0YXJ0ID0g
cGFnZU51bWJlciAqIEdseXBoUGFnZTo6c2l6ZTsKLSAgICBVQ2hhciBidWZmZXJbR2x5cGhQYWdl
OjpzaXplICogMiArIDJdOwotICAgIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aDsKLSAgICAvLyBGaWxs
IGluIGEgYnVmZmVyIHdpdGggdGhlIGVudGlyZSAicGFnZSIgb2YgY2hhcmFjdGVycyB0aGF0IHdl
IHdhbnQgdG8gbG9vayB1cCBnbHlwaHMgZm9yLgotICAgIGlmIChVX0lTX0JNUChzdGFydCkpIHsK
LSAgICAgICAgYnVmZmVyTGVuZ3RoID0gR2x5cGhQYWdlOjpzaXplOwotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgR2x5cGhQYWdlOjpzaXplOyBpKyspCi0gICAgICAgICAgICBidWZm
ZXJbaV0gPSBzdGFydCArIGk7Ci0KLSAgICAgICAgaWYgKHN0YXJ0ID09IDApIHsKLSAgICAgICAg
ICAgIC8vIENvbnRyb2wgY2hhcmFjdGVycyBtdXN0IG5vdCByZW5kZXIgYXQgYWxsLgotICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDB4MjA7ICsraSkKLSAgICAgICAgICAgICAg
ICBidWZmZXJbaV0gPSB6ZXJvV2lkdGhTcGFjZTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDB4N0Y7IGkgPCAweEEwOyBpKyspCi0gICAgICAgICAgICAgICAgYnVmZmVyW2ldID0gemVy
b1dpZHRoU3BhY2U7Ci0gICAgICAgICAgICBidWZmZXJbc29mdEh5cGhlbl0gPSB6ZXJvV2lkdGhT
cGFjZTsKLQotICAgICAgICAgICAgLy8gXG4sIFx0LCBhbmQgbm9uYnJlYWtpbmcgc3BhY2UgbXVz
dCByZW5kZXIgYXMgYSBzcGFjZS4KLSAgICAgICAgICAgIGJ1ZmZlclsoaW50KSdcbiddID0gJyAn
OwotICAgICAgICAgICAgYnVmZmVyWyhpbnQpJ1x0J10gPSAnICc7Ci0gICAgICAgICAgICBidWZm
ZXJbbm9CcmVha1NwYWNlXSA9ICcgJzsKLSAgICAgICAgfSBlbHNlIGlmIChzdGFydCA9PSAobGVm
dFRvUmlnaHRNYXJrICYgfihHbHlwaFBhZ2U6OnNpemUgLSAxKSkpIHsKLSAgICAgICAgICAgIC8v
IExSTSwgUkxNLCBMUkUsIFJMRSwgWldOSiwgWldKLCBhbmQgUERGIG11c3Qgbm90IHJlbmRlciBh
dCBhbGwuCi0gICAgICAgICAgICBidWZmZXJbbGVmdFRvUmlnaHRNYXJrIC0gc3RhcnRdID0gemVy
b1dpZHRoU3BhY2U7Ci0gICAgICAgICAgICBidWZmZXJbcmlnaHRUb0xlZnRNYXJrIC0gc3RhcnRd
ID0gemVyb1dpZHRoU3BhY2U7Ci0gICAgICAgICAgICBidWZmZXJbbGVmdFRvUmlnaHRFbWJlZCAt
IHN0YXJ0XSA9IHplcm9XaWR0aFNwYWNlOwotICAgICAgICAgICAgYnVmZmVyW3JpZ2h0VG9MZWZ0
RW1iZWQgLSBzdGFydF0gPSB6ZXJvV2lkdGhTcGFjZTsKLSAgICAgICAgICAgIGJ1ZmZlcltsZWZ0
VG9SaWdodE92ZXJyaWRlIC0gc3RhcnRdID0gemVyb1dpZHRoU3BhY2U7Ci0gICAgICAgICAgICBi
dWZmZXJbcmlnaHRUb0xlZnRPdmVycmlkZSAtIHN0YXJ0XSA9IHplcm9XaWR0aFNwYWNlOwotICAg
ICAgICAgICAgYnVmZmVyW3plcm9XaWR0aE5vbkpvaW5lciAtIHN0YXJ0XSA9IHplcm9XaWR0aFNw
YWNlOwotICAgICAgICAgICAgYnVmZmVyW3plcm9XaWR0aEpvaW5lciAtIHN0YXJ0XSA9IHplcm9X
aWR0aFNwYWNlOwotICAgICAgICAgICAgYnVmZmVyW3BvcERpcmVjdGlvbmFsRm9ybWF0dGluZyAt
IHN0YXJ0XSA9IHplcm9XaWR0aFNwYWNlOwotICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0ID09IChv
YmplY3RSZXBsYWNlbWVudENoYXJhY3RlciAmIH4oR2x5cGhQYWdlOjpzaXplIC0gMSkpKSB7Ci0g
ICAgICAgICAgICAvLyBPYmplY3QgcmVwbGFjZW1lbnQgY2hhcmFjdGVyIG11c3Qgbm90IHJlbmRl
ciBhdCBhbGwuCi0gICAgICAgICAgICBidWZmZXJbb2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXIg
LSBzdGFydF0gPSB6ZXJvV2lkdGhTcGFjZTsKLSAgICAgICAgfSBlbHNlIGlmIChzdGFydCA9PSAo
emVyb1dpZHRoTm9CcmVha1NwYWNlICYgfihHbHlwaFBhZ2U6OnNpemUgLSAxKSkpIHsKLSAgICAg
ICAgICAgIC8vIFpXTkJTL0JPTSBtdXN0IG5vdCByZW5kZXIgYXQgYWxsLgotICAgICAgICAgICAg
YnVmZmVyW3plcm9XaWR0aE5vQnJlYWtTcGFjZSAtIHN0YXJ0XSA9IHplcm9XaWR0aFNwYWNlOwot
ICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgYnVmZmVyTGVuZ3RoID0gR2x5cGhQYWdl
OjpzaXplICogMjsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdseXBoUGFnZTo6
c2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICBpbnQgYyA9IGkgKyBzdGFydDsKLSAgICAgICAgICAg
IGJ1ZmZlcltpICogMl0gPSBVMTZfTEVBRChjKTsKLSAgICAgICAgICAgIGJ1ZmZlcltpICogMiAr
IDFdID0gVTE2X1RSQUlMKGMpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gTm93IHRoYXQg
d2UgaGF2ZSBhIGJ1ZmZlciBmdWxsIG9mIGNoYXJhY3RlcnMsIHdlIHdhbnQgdG8gZ2V0IGJhY2sg
YW4gYXJyYXkKLSAgICAvLyBvZiBnbHlwaCBpbmRpY2VzLiBUaGlzIHBhcnQgaW52b2x2ZXMgY2Fs
bGluZyBpbnRvIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYwotICAgIC8vIHJvdXRpbmUgb2Ygb3VyIGds
eXBoIG1hcCBmb3IgYWN0dWFsbHkgZmlsbGluZyBpbiB0aGUgcGFnZSB3aXRoIHRoZSBnbHlwaHMu
Ci0gICAgLy8gU3VjY2VzcyBpcyBub3QgZ3VhcmFudGVlZC4gRm9yIGV4YW1wbGUsIFRpbWVzIGZh
aWxzIHRvIGZpbGwgcGFnZSAyNjAsIGdpdmluZyBnbHlwaCBkYXRhCi0gICAgLy8gZm9yIG9ubHkg
MTI4IG91dCBvZiAyNTYgY2hhcmFjdGVycy4KLSAgICBSZWZQdHI8R2x5cGhQYWdlPiBnbHlwaFBh
Z2U7Ci0gICAgaWYgKEdseXBoUGFnZTo6bWF5VXNlTWl4ZWRGb250RGF0YVdoZW5GaWxsaW5nKGJ1
ZmZlciwgYnVmZmVyTGVuZ3RoLCBmb250RGF0YSkpCi0gICAgICAgIGdseXBoUGFnZSA9IEdseXBo
UGFnZTo6Y3JlYXRlRm9yTWl4ZWRGb250RGF0YSgpOwotICAgIGVsc2UKLSAgICAgICAgZ2x5cGhQ
YWdlID0gR2x5cGhQYWdlOjpjcmVhdGVGb3JTaW5nbGVGb250RGF0YShmb250RGF0YSk7Ci0KLSAg
ICBib29sIGhhdmVHbHlwaHMgPSBmaWxsR2x5cGhQYWdlKCpnbHlwaFBhZ2UsIDAsIEdseXBoUGFn
ZTo6c2l6ZSwgYnVmZmVyLCBidWZmZXJMZW5ndGgsIGZvbnREYXRhKTsKLSAgICBpZiAoIWhhdmVH
bHlwaHMpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgZ2x5cGhQYWdlLT5zZXRJbW11
dGFibGUoKTsKLSAgICByZXR1cm4gZ2x5cGhQYWdlOwotfQotCi1jb25zdCBHbHlwaFBhZ2UqIFNp
bXBsZUZvbnREYXRhOjpnbHlwaFBhZ2UodW5zaWduZWQgcGFnZU51bWJlcikgY29uc3QKLXsKLSAg
ICBpZiAocGFnZU51bWJlciA9PSAwKSB7Ci0gICAgICAgIGlmICghbV9nbHlwaFBhZ2VaZXJvKQot
ICAgICAgICAgICAgbV9nbHlwaFBhZ2VaZXJvID0gY3JlYXRlQW5kRmlsbEdseXBoUGFnZSgwLCB0
aGlzKTsKLSAgICAgICAgcmV0dXJuIG1fZ2x5cGhQYWdlWmVyby5nZXQoKTsKLSAgICB9Ci0gICAg
YXV0byBhZGRSZXN1bHQgPSBtX2dseXBoUGFnZXMuYWRkKHBhZ2VOdW1iZXIsIG51bGxwdHIpOwot
ICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZSA9IGNyZWF0ZUFuZEZpbGxHbHlwaFBhZ2UocGFnZU51bWJlciwgdGhpcyk7Ci0KLSAg
ICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKLX0KLQotR2x5cGggU2lt
cGxlRm9udERhdGE6OmdseXBoRm9yQ2hhcmFjdGVyKFVDaGFyMzIgY2hhcmFjdGVyKSBjb25zdAot
ewotICAgIGF1dG8qIHBhZ2UgPSBnbHlwaFBhZ2UoY2hhcmFjdGVyIC8gR2x5cGhQYWdlOjpzaXpl
KTsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBwYWdlLT5n
bHlwaEF0KGNoYXJhY3RlciAlIEdseXBoUGFnZTo6c2l6ZSk7Ci19Ci0KLUdseXBoRGF0YSBTaW1w
bGVGb250RGF0YTo6Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgY2hhcmFjdGVyKSBjb25z
dAotewotICAgIGF1dG8qIHBhZ2UgPSBnbHlwaFBhZ2UoY2hhcmFjdGVyIC8gR2x5cGhQYWdlOjpz
aXplKTsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVybiBHbHlwaERhdGEoKTsKLSAgICBy
ZXR1cm4gcGFnZS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3Rlcik7Ci19Ci0KLVBhc3NS
ZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjp2ZXJ0aWNhbFJpZ2h0T3JpZW50
YXRpb25Gb250RGF0YSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKLSAg
ICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPERlcml2ZWRGb250RGF0
YT4oaXNDdXN0b21Gb250KCkpOwotICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEtPnZlcnRpY2Fs
UmlnaHRPcmllbnRhdGlvbikgewotICAgICAgICBGb250UGxhdGZvcm1EYXRhIHZlcnRpY2FsUmln
aHRQbGF0Zm9ybURhdGEobV9wbGF0Zm9ybURhdGEpOwotICAgICAgICB2ZXJ0aWNhbFJpZ2h0UGxh
dGZvcm1EYXRhLnNldE9yaWVudGF0aW9uKEhvcml6b250YWwpOwotICAgICAgICBtX2Rlcml2ZWRG
b250RGF0YS0+dmVydGljYWxSaWdodE9yaWVudGF0aW9uID0gY3JlYXRlKHZlcnRpY2FsUmlnaHRQ
bGF0Zm9ybURhdGEsIGlzQ3VzdG9tRm9udCgpLCBmYWxzZSwgdHJ1ZSk7Ci0gICAgfQotICAgIHJl
dHVybiBtX2Rlcml2ZWRGb250RGF0YS0+dmVydGljYWxSaWdodE9yaWVudGF0aW9uOwotfQotCi1Q
YXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6dXByaWdodE9yaWVudGF0
aW9uRm9udERhdGEoKSBjb25zdAotewotICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEpCi0gICAg
ICAgIG1fZGVyaXZlZEZvbnREYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxEZXJpdmVkRm9udERhdGE+
KGlzQ3VzdG9tRm9udCgpKTsKLSAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhLT51cHJpZ2h0T3Jp
ZW50YXRpb24pCi0gICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT51cHJpZ2h0T3JpZW50YXRpb24g
PSBjcmVhdGUobV9wbGF0Zm9ybURhdGEsIGlzQ3VzdG9tRm9udCgpLCBmYWxzZSwgdHJ1ZSk7Ci0g
ICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT51cHJpZ2h0T3JpZW50YXRpb247Ci19Ci0KLVBh
c3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0
YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKLXsKLSAgICBp
ZiAoIW1fZGVyaXZlZEZvbnREYXRhKQotICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IHN0ZDo6
bWFrZV91bmlxdWU8RGVyaXZlZEZvbnREYXRhPihpc0N1c3RvbUZvbnQoKSk7Ci0gICAgaWYgKCFt
X2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzKQotICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+
c21hbGxDYXBzID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9uLCBzbWFsbENh
cHNGb250U2l6ZU11bHRpcGxpZXIpOwotCi0gICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5z
bWFsbENhcHM7Ci19Ci0KLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRh
OjplbXBoYXNpc01hcmtGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlw
dGlvbikgY29uc3QKLXsKLSAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQotICAgICAgICBtX2Rl
cml2ZWRGb250RGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8RGVyaXZlZEZvbnREYXRhPihpc0N1c3Rv
bUZvbnQoKSk7Ci0gICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrKQotICAg
ICAgICBtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrID0gY3JlYXRlU2NhbGVkRm9udERh
dGEoZm9udERlc2NyaXB0aW9uLCBlbXBoYXNpc01hcmtGb250U2l6ZU11bHRpcGxpZXIpOwotCi0g
ICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcms7Ci19Ci0KLVBhc3NSZWZQ
dHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpicm9rZW5JZGVvZ3JhcGhGb250RGF0
YSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKLSAgICAgICAgbV9kZXJp
dmVkRm9udERhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPERlcml2ZWRGb250RGF0YT4oaXNDdXN0b21G
b250KCkpOwotICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEtPmJyb2tlbklkZW9ncmFwaCkgewot
ICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+YnJva2VuSWRlb2dyYXBoID0gY3JlYXRlKG1fcGxh
dGZvcm1EYXRhLCBpc0N1c3RvbUZvbnQoKSwgZmFsc2UpOwotICAgICAgICBtX2Rlcml2ZWRGb250
RGF0YS0+YnJva2VuSWRlb2dyYXBoLT5tX2lzQnJva2VuSWRlb2dyYXBoRmFsbGJhY2sgPSB0cnVl
OwotICAgIH0KLSAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPmJyb2tlbklkZW9ncmFwaDsK
LX0KLQotUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6Om5vblN5bnRo
ZXRpY0l0YWxpY0ZvbnREYXRhKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRh
KQotICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8RGVyaXZlZEZv
bnREYXRhPihpc0N1c3RvbUZvbnQoKSk7Ci0gICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+bm9u
U3ludGhldGljSXRhbGljKSB7Ci0gICAgICAgIEZvbnRQbGF0Zm9ybURhdGEgbm9uU3ludGhldGlj
SXRhbGljRm9udFBsYXRmb3JtRGF0YShtX3BsYXRmb3JtRGF0YSk7Ci0jaWYgUExBVEZPUk0oQ09D
T0EpCi0gICAgICAgIG5vblN5bnRoZXRpY0l0YWxpY0ZvbnRQbGF0Zm9ybURhdGEubV9zeW50aGV0
aWNPYmxpcXVlID0gZmFsc2U7Ci0jZW5kaWYKLSAgICAgICAgbV9kZXJpdmVkRm9udERhdGEtPm5v
blN5bnRoZXRpY0l0YWxpYyA9IGNyZWF0ZShub25TeW50aGV0aWNJdGFsaWNGb250UGxhdGZvcm1E
YXRhLCBpc0N1c3RvbUZvbnQoKSk7Ci0gICAgfQotICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0
YS0+bm9uU3ludGhldGljSXRhbGljOwotfQotCi0jaWZuZGVmIE5ERUJVRwotU3RyaW5nIFNpbXBs
ZUZvbnREYXRhOjpkZXNjcmlwdGlvbigpIGNvbnN0Ci17Ci0gICAgaWYgKGlzU1ZHRm9udCgpKQot
ICAgICAgICByZXR1cm4gIltTVkcgZm9udF0iOwotICAgIGlmIChpc0N1c3RvbUZvbnQoKSkKLSAg
ICAgICAgcmV0dXJuICJbY3VzdG9tIGZvbnRdIjsKLQotICAgIHJldHVybiBwbGF0Zm9ybURhdGEo
KS5kZXNjcmlwdGlvbigpOwotfQotI2VuZGlmCi0KLWNvbnN0IE9wZW5UeXBlTWF0aERhdGEqIFNp
bXBsZUZvbnREYXRhOjptYXRoRGF0YSgpIGNvbnN0Ci17Ci0gICAgaWYgKG1faXNMb2FkaW5nKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIW1fbWF0aERhdGEpIHsKLSAgICAgICAg
bV9tYXRoRGF0YSA9IE9wZW5UeXBlTWF0aERhdGE6OmNyZWF0ZShtX3BsYXRmb3JtRGF0YSk7Ci0g
ICAgICAgIGlmICghbV9tYXRoRGF0YS0+aGFzTWF0aERhdGEoKSkKLSAgICAgICAgICAgIG1fbWF0
aERhdGEuY2xlYXIoKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1fbWF0aERhdGEuZ2V0KCk7Ci19Ci0K
LVNpbXBsZUZvbnREYXRhOjpEZXJpdmVkRm9udERhdGE6On5EZXJpdmVkRm9udERhdGEoKQotewot
fQotCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlU2Nh
bGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0
IHNjYWxlRmFjdG9yKSBjb25zdAotewotICAgIGlmIChpc1NWR0ZvbnQoKSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gcGxhdGZvcm1DcmVhdGVTY2FsZWRGb250RGF0YShm
b250RGVzY3JpcHRpb24sIHNjYWxlRmFjdG9yKTsKLX0KLQotYm9vbCBTaW1wbGVGb250RGF0YTo6
YXBwbHlUcmFuc2Zvcm1zKEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgR2x5cGhCdWZmZXJBZHZh
bmNlKiBhZHZhbmNlcywgc2l6ZV90IGdseXBoQ291bnQsIFR5cGVzZXR0aW5nRmVhdHVyZXMgdHlw
ZXNldHRpbmdGZWF0dXJlcykgY29uc3QKLXsKLSAgICAvLyBXZSBuZWVkIHRvIGhhbmRsZSB0cmFu
c2Zvcm1zIG9uIFNWRyBmb250cyBpbnRlcm5hbGx5LCBzaW5jZSB0aGV5IGFyZSByZW5kZXJlZCBp
bnRlcm5hbGx5LgotICAgIEFTU0VSVCghaXNTVkdGb250KCkpOwotI2lmIFBMQVRGT1JNKElPUykg
fHwgKFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+IDEw
ODApCi0gICAgQ1RGb250VHJhbnNmb3JtT3B0aW9ucyBvcHRpb25zID0gKHR5cGVzZXR0aW5nRmVh
dHVyZXMgJiBLZXJuaW5nID8ga0NURm9udFRyYW5zZm9ybUFwcGx5UG9zaXRpb25pbmcgOiAwKSB8
ICh0eXBlc2V0dGluZ0ZlYXR1cmVzICYgTGlnYXR1cmVzID8ga0NURm9udFRyYW5zZm9ybUFwcGx5
U2hhcGluZyA6IDApOwotICAgIHJldHVybiBDVEZvbnRUcmFuc2Zvcm1HbHlwaHMobV9wbGF0Zm9y
bURhdGEuY3RGb250KCksIGdseXBocywgcmVpbnRlcnByZXRfY2FzdDxDR1NpemUqPihhZHZhbmNl
cyksIGdseXBoQ291bnQsIG9wdGlvbnMpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oZ2x5cGhz
KTsKLSAgICBVTlVTRURfUEFSQU0oYWR2YW5jZXMpOwotICAgIFVOVVNFRF9QQVJBTShnbHlwaENv
dW50KTsKLSAgICBVTlVTRURfUEFSQU0odHlwZXNldHRpbmdGZWF0dXJlcyk7Ci0gICAgcmV0dXJu
IGZhbHNlOwotI2VuZGlmCi19Ci0KLS8vIEZvbnREYXRhcyBhcmUgbm90IHJlZmNvdW50ZWQgdG8g
YXZvaWQgY3ljbGVzLgotdHlwZWRlZiBIYXNoTWFwPHN0ZDo6cGFpcjxVQ2hhcjMyLCB1bnNpZ25l
ZD4sIFNpbXBsZUZvbnREYXRhKj4gQ2hhcmFjdGVyRmFsbGJhY2tNYXA7Ci10eXBlZGVmIEhhc2hN
YXA8Y29uc3QgU2ltcGxlRm9udERhdGEqLCBDaGFyYWN0ZXJGYWxsYmFja01hcD4gU3lzdGVtRmFs
bGJhY2tDYWNoZTsKLQotc3RhdGljIFN5c3RlbUZhbGxiYWNrQ2FjaGUmIHN5c3RlbUZhbGxiYWNr
Q2FjaGUoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTeXN0ZW1GYWxsYmFja0NhY2hl
PiBtYXA7Ci0gICAgcmV0dXJuIG1hcC5nZXQoKTsKLX0KLQotUmVmUHRyPFNpbXBsZUZvbnREYXRh
PiBTaW1wbGVGb250RGF0YTo6c3lzdGVtRmFsbGJhY2tGb250RGF0YUZvckNoYXJhY3RlcihVQ2hh
cjMyIGNoYXJhY3RlciwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgYm9vbCBp
c0ZvclBsYXRmb3JtRm9udCkgY29uc3QKLXsKLSAgICBhdXRvIGZvbnRBZGRSZXN1bHQgPSBzeXN0
ZW1GYWxsYmFja0NhY2hlKCkuYWRkKHRoaXMsIENoYXJhY3RlckZhbGxiYWNrTWFwKCkpOwotCi0g
ICAgYXV0byBrZXkgPSBzdGQ6Om1ha2VfcGFpcihjaGFyYWN0ZXIsIGlzRm9yUGxhdGZvcm1Gb250
KTsKLSAgICBhdXRvIGNoYXJhY3RlckFkZFJlc3VsdCA9IGZvbnRBZGRSZXN1bHQuaXRlcmF0b3It
PnZhbHVlLmFkZChrZXksIG51bGxwdHIpOwotCi0gICAgU2ltcGxlRm9udERhdGEqJiBmYWxsYmFj
a0ZvbnREYXRhID0gY2hhcmFjdGVyQWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKLQotICAgIGlm
ICghZmFsbGJhY2tGb250RGF0YSkgewotICAgICAgICBVQ2hhciBjb2RlVW5pdHNbMl07Ci0gICAg
ICAgIGludCBjb2RlVW5pdHNMZW5ndGg7Ci0gICAgICAgIGlmIChVX0lTX0JNUChjaGFyYWN0ZXIp
KSB7Ci0gICAgICAgICAgICBjb2RlVW5pdHNbMF0gPSBGb250Q2FzY2FkZTo6bm9ybWFsaXplU3Bh
Y2VzKGNoYXJhY3Rlcik7Ci0gICAgICAgICAgICBjb2RlVW5pdHNMZW5ndGggPSAxOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgY29kZVVuaXRzWzBdID0gVTE2X0xFQUQoY2hhcmFjdGVy
KTsKLSAgICAgICAgICAgIGNvZGVVbml0c1sxXSA9IFUxNl9UUkFJTChjaGFyYWN0ZXIpOwotICAg
ICAgICAgICAgY29kZVVuaXRzTGVuZ3RoID0gMjsKLSAgICAgICAgfQotCi0gICAgICAgIGZhbGxi
YWNrRm9udERhdGEgPSBmb250Q2FjaGUoKS5zeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoZGVz
Y3JpcHRpb24sIHRoaXMsIGlzRm9yUGxhdGZvcm1Gb250LCBjb2RlVW5pdHMsIGNvZGVVbml0c0xl
bmd0aCkuZ2V0KCk7Ci0gICAgICAgIGlmIChmYWxsYmFja0ZvbnREYXRhKQotICAgICAgICAgICAg
ZmFsbGJhY2tGb250RGF0YS0+bV9pc1VzZWRJblN5c3RlbUZhbGxiYWNrQ2FjaGUgPSB0cnVlOwot
ICAgIH0KLQotICAgIHJldHVybiBmYWxsYmFja0ZvbnREYXRhOwotfQotCi12b2lkIFNpbXBsZUZv
bnREYXRhOjpyZW1vdmVGcm9tU3lzdGVtRmFsbGJhY2tDYWNoZSgpCi17Ci0gICAgc3lzdGVtRmFs
bGJhY2tDYWNoZSgpLnJlbW92ZSh0aGlzKTsKLQotICAgIGlmICghbV9pc1VzZWRJblN5c3RlbUZh
bGxiYWNrQ2FjaGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZvciAoYXV0byYgY2hhcmFjdGVy
TWFwIDogc3lzdGVtRmFsbGJhY2tDYWNoZSgpLnZhbHVlcygpKSB7Ci0gICAgICAgIFZlY3Rvcjxz
dGQ6OnBhaXI8VUNoYXIzMiwgdW5zaWduZWQ+LCA1MTI+IHRvUmVtb3ZlOwotICAgICAgICBmb3Ig
KGF1dG8mIGVudHJ5IDogY2hhcmFjdGVyTWFwKSB7Ci0gICAgICAgICAgICBpZiAoZW50cnkudmFs
dWUgPT0gdGhpcykKLSAgICAgICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQoZW50cnkua2V5KTsK
LSAgICAgICAgfQotICAgICAgICBmb3IgKGF1dG8mIGtleSA6IHRvUmVtb3ZlKQotICAgICAgICAg
ICAgY2hhcmFjdGVyTWFwLnJlbW92ZShrZXkpOwotICAgIH0KLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9u
dERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9T
aW1wbGVGb250RGF0YS5oCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM2OSAr
MCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIGludGVybmFsIGZvbnQgaW1w
bGVtZW50YXRpb24uCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4LCAyMDEwLCAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNy0y
MDA4IFRvcmNoIE1vYmlsZSwgSW5jLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBTaW1wbGVGb250RGF0YV9oCi0jZGVm
aW5lIFNpbXBsZUZvbnREYXRhX2gKLQotI2luY2x1ZGUgIkZvbnRCYXNlbGluZS5oIgotI2luY2x1
ZGUgIkZvbnRNZXRyaWNzLmgiCi0jaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgotI2luY2x1
ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCi0jaW5jbHVkZSAiR2x5
cGhNZXRyaWNzTWFwLmgiCi0jaW5jbHVkZSAiR2x5cGhQYWdlLmgiCi0jaW5jbHVkZSAiT3BlblR5
cGVNYXRoRGF0YS5oIgotI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKLSNpbmNsdWRlICJP
cGVuVHlwZVZlcnRpY2FsRGF0YS5oIgotI2VuZGlmCi0jaW5jbHVkZSAiVHlwZXNldHRpbmdGZWF0
dXJlcy5oIgotI2luY2x1ZGUgPHd0Zi9UeXBlQ2FzdHMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdIYXNoLmg+Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSNpbmNsdWRlICJXZWJDb3JlU3lz
dGVtSW50ZXJmYWNlLmgiCi0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2VuZGlmCi0KLSNp
ZiBQTEFURk9STShXSU4pCi0jaW5jbHVkZSA8dXNwMTAuaD4KLSNlbmRpZgotCi0jaWYgVVNFKENB
SVJPKQotI2luY2x1ZGUgPGNhaXJvLmg+Ci0jZW5kaWYKLQotI2lmIFVTRShDRykKLSNpbmNsdWRl
IDxXZWJDb3JlL0NvcmVHcmFwaGljc1NQSS5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgR2x5cGhQYWdlOwotY2xhc3MgRm9udERlc2NyaXB0aW9uOwotY2xhc3MgU2hh
cmVkQnVmZmVyOwotc3RydWN0IEdseXBoRGF0YTsKLXN0cnVjdCBXaWR0aEl0ZXJhdG9yOwotCi1l
bnVtIEZvbnREYXRhVmFyaWFudCB7IEF1dG9WYXJpYW50LCBOb3JtYWxWYXJpYW50LCBTbWFsbENh
cHNWYXJpYW50LCBFbXBoYXNpc01hcmtWYXJpYW50LCBCcm9rZW5JZGVvZ3JhcGhWYXJpYW50IH07
Ci1lbnVtIFBpdGNoIHsgVW5rbm93blBpdGNoLCBGaXhlZFBpdGNoLCBWYXJpYWJsZVBpdGNoIH07
Ci0KLWNsYXNzIFNpbXBsZUZvbnREYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8U2ltcGxlRm9udERh
dGE+IHsKLXB1YmxpYzoKLSAgICBjbGFzcyBTVkdEYXRhIHsKLSAgICAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7Ci0gICAgcHVibGljOgotICAgICAgICB2aXJ0dWFsIH5TVkdEYXRhKCkgeyB9
Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVGb250RGF0YShTaW1wbGVGb250RGF0
YSosIGZsb2F0IGZvbnRTaXplKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgZmxvYXQgd2lkdGhGb3JT
VkdHbHlwaChHbHlwaCwgZmxvYXQgZm9udFNpemUpIGNvbnN0ID0gMDsKLSAgICAgICAgdmlydHVh
bCBib29sIGZpbGxTVkdHbHlwaFBhZ2UoR2x5cGhQYWdlKiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNp
Z25lZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3Qg
U2ltcGxlRm9udERhdGEqKSBjb25zdCA9IDA7Ci0gICAgfTsKLQotICAgIC8vIFVzZWQgdG8gY3Jl
YXRlIHBsYXRmb3JtIGZvbnRzLgotICAgIHN0YXRpYyBSZWY8U2ltcGxlRm9udERhdGE+IGNyZWF0
ZShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEsIGJvb2wgaXNDdXN0b21Gb250
ID0gZmFsc2UsIGJvb2wgaXNMb2FkaW5nID0gZmFsc2UsIGJvb2wgaXNUZXh0T3JpZW50YXRpb25G
YWxsYmFjayA9IGZhbHNlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2lt
cGxlRm9udERhdGEocGxhdGZvcm1EYXRhLCBpc0N1c3RvbUZvbnQsIGlzTG9hZGluZywgaXNUZXh0
T3JpZW50YXRpb25GYWxsYmFjaykpOwotICAgIH0KLQotICAgIC8vIFVzZWQgdG8gY3JlYXRlIFNW
RyBGb250cy4KLSAgICBzdGF0aWMgUmVmPFNpbXBsZUZvbnREYXRhPiBjcmVhdGUoc3RkOjp1bmlx
dWVfcHRyPFNWR0RhdGE+IHN2Z0RhdGEsIGZsb2F0IGZvbnRTaXplLCBib29sIHN5bnRoZXRpY0Jv
bGQsIGJvb2wgc3ludGhldGljSXRhbGljKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgU2ltcGxlRm9udERhdGEoV1RGOjptb3ZlKHN2Z0RhdGEpLCBmb250U2l6ZSwgc3ludGhl
dGljQm9sZCwgc3ludGhldGljSXRhbGljKSk7Ci0gICAgfQotCi0gICAgflNpbXBsZUZvbnREYXRh
KCk7Ci0KLSAgICBzdGF0aWMgY29uc3QgU2ltcGxlRm9udERhdGEqIHN5c3RlbUZhbGxiYWNrKCkg
eyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBTaW1wbGVGb250RGF0YSo+KC0xKTsgfQot
Ci0gICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhKCkgY29uc3QgeyByZXR1
cm4gbV9wbGF0Zm9ybURhdGE7IH0KLSAgICBjb25zdCBPcGVuVHlwZU1hdGhEYXRhKiBtYXRoRGF0
YSgpIGNvbnN0OwotI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKLSAgICBjb25zdCBPcGVu
VHlwZVZlcnRpY2FsRGF0YSogdmVydGljYWxEYXRhKCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0aWNh
bERhdGEuZ2V0KCk7IH0KLSNlbmRpZgotCi0gICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4g
c21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJikgY29uc3Q7Ci0gICAgUGFz
c1JlZlB0cjxTaW1wbGVGb250RGF0YT4gZW1waGFzaXNNYXJrRm9udERhdGEoY29uc3QgRm9udERl
c2NyaXB0aW9uJikgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gYnJva2Vu
SWRlb2dyYXBoRm9udERhdGEoKSBjb25zdDsKLSAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRh
PiBub25TeW50aGV0aWNJdGFsaWNGb250RGF0YSgpIGNvbnN0OwotCi0gICAgUGFzc1JlZlB0cjxT
aW1wbGVGb250RGF0YT4gdmFyaWFudEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVz
Y3JpcHRpb24sIEZvbnREYXRhVmFyaWFudCB2YXJpYW50KSBjb25zdAotICAgIHsKLSAgICAgICAg
c3dpdGNoICh2YXJpYW50KSB7Ci0gICAgICAgIGNhc2UgU21hbGxDYXBzVmFyaWFudDoKLSAgICAg
ICAgICAgIHJldHVybiBzbWFsbENhcHNGb250RGF0YShkZXNjcmlwdGlvbik7Ci0gICAgICAgIGNh
c2UgRW1waGFzaXNNYXJrVmFyaWFudDoKLSAgICAgICAgICAgIHJldHVybiBlbXBoYXNpc01hcmtG
b250RGF0YShkZXNjcmlwdGlvbik7Ci0gICAgICAgIGNhc2UgQnJva2VuSWRlb2dyYXBoVmFyaWFu
dDoKLSAgICAgICAgICAgIHJldHVybiBicm9rZW5JZGVvZ3JhcGhGb250RGF0YSgpOwotICAgICAg
ICBjYXNlIEF1dG9WYXJpYW50OgotICAgICAgICBjYXNlIE5vcm1hbFZhcmlhbnQ6Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8U2ltcGxlRm9udERhdGEqPih0aGlzKTsKLSAgICB9Ci0K
LSAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiB2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25G
b250RGF0YSgpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IHVwcmlnaHRP
cmllbnRhdGlvbkZvbnREYXRhKCkgY29uc3Q7Ci0KLSAgICBib29sIGhhc1ZlcnRpY2FsR2x5cGhz
KCkgY29uc3QgeyByZXR1cm4gbV9oYXNWZXJ0aWNhbEdseXBoczsgfQotICAgIGJvb2wgaXNUZXh0
T3JpZW50YXRpb25GYWxsYmFjaygpIGNvbnN0IHsgcmV0dXJuIG1faXNUZXh0T3JpZW50YXRpb25G
YWxsYmFjazsgfQotCi0gICAgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzKCkgeyByZXR1cm4gbV9m
b250TWV0cmljczsgfQotICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBmb250TWV0cmljcygpIGNvbnN0
IHsgcmV0dXJuIG1fZm9udE1ldHJpY3M7IH0KLSAgICBmbG9hdCBzaXplUGVyVW5pdCgpIGNvbnN0
IHsgcmV0dXJuIHBsYXRmb3JtRGF0YSgpLnNpemUoKSAvIChmb250TWV0cmljcygpLnVuaXRzUGVy
RW0oKSA/IGZvbnRNZXRyaWNzKCkudW5pdHNQZXJFbSgpIDogMSk7IH0KLQotICAgIGZsb2F0IG1h
eENoYXJXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4Q2hhcldpZHRoOyB9Ci0gICAgdm9pZCBz
ZXRNYXhDaGFyV2lkdGgoZmxvYXQgbWF4Q2hhcldpZHRoKSB7IG1fbWF4Q2hhcldpZHRoID0gbWF4
Q2hhcldpZHRoOyB9Ci0KLSAgICBmbG9hdCBhdmdDaGFyV2lkdGgoKSBjb25zdCB7IHJldHVybiBt
X2F2Z0NoYXJXaWR0aDsgfQotICAgIHZvaWQgc2V0QXZnQ2hhcldpZHRoKGZsb2F0IGF2Z0NoYXJX
aWR0aCkgeyBtX2F2Z0NoYXJXaWR0aCA9IGF2Z0NoYXJXaWR0aDsgfQotCi0gICAgRmxvYXRSZWN0
IGJvdW5kc0ZvckdseXBoKEdseXBoKSBjb25zdDsKLSAgICBmbG9hdCB3aWR0aEZvckdseXBoKEds
eXBoIGdseXBoKSBjb25zdDsKLSAgICBGbG9hdFJlY3QgcGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChH
bHlwaCkgY29uc3Q7Ci0gICAgZmxvYXQgcGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoKSBjb25z
dDsKLQotICAgIGZsb2F0IHNwYWNlV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3NwYWNlV2lkdGg7
IH0KLSAgICBmbG9hdCBhZGp1c3RlZFNwYWNlV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2FkanVz
dGVkU3BhY2VXaWR0aDsgfQotICAgIHZvaWQgc2V0U3BhY2VXaWR0aHMoZmxvYXQgc3BhY2VXaWR0
aCkKLSAgICB7Ci0gICAgICAgIG1fc3BhY2VXaWR0aCA9IHNwYWNlV2lkdGg7Ci0gICAgICAgIG1f
YWRqdXN0ZWRTcGFjZVdpZHRoID0gc3BhY2VXaWR0aDsKLSAgICB9Ci0KLSNpZiBVU0UoQ0cpIHx8
IFVTRShDQUlSTykKLSAgICBmbG9hdCBzeW50aGV0aWNCb2xkT2Zmc2V0KCkgY29uc3QgeyByZXR1
cm4gbV9zeW50aGV0aWNCb2xkT2Zmc2V0OyB9Ci0jZW5kaWYKLQotICAgIEdseXBoIHNwYWNlR2x5
cGgoKSBjb25zdCB7IHJldHVybiBtX3NwYWNlR2x5cGg7IH0KLSAgICB2b2lkIHNldFNwYWNlR2x5
cGgoR2x5cGggc3BhY2VHbHlwaCkgeyBtX3NwYWNlR2x5cGggPSBzcGFjZUdseXBoOyB9Ci0gICAg
R2x5cGggemVyb1dpZHRoU3BhY2VHbHlwaCgpIGNvbnN0IHsgcmV0dXJuIG1femVyb1dpZHRoU3Bh
Y2VHbHlwaDsgfQotICAgIHZvaWQgc2V0WmVyb1dpZHRoU3BhY2VHbHlwaChHbHlwaCBzcGFjZUds
eXBoKSB7IG1femVyb1dpZHRoU3BhY2VHbHlwaCA9IHNwYWNlR2x5cGg7IH0KLSAgICBib29sIGlz
WmVyb1dpZHRoU3BhY2VHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QgeyByZXR1cm4gZ2x5cGggPT0g
bV96ZXJvV2lkdGhTcGFjZUdseXBoICYmIGdseXBoOyB9Ci0gICAgR2x5cGggemVyb0dseXBoKCkg
Y29uc3QgeyByZXR1cm4gbV96ZXJvR2x5cGg7IH0KLSAgICB2b2lkIHNldFplcm9HbHlwaChHbHlw
aCB6ZXJvR2x5cGgpIHsgbV96ZXJvR2x5cGggPSB6ZXJvR2x5cGg7IH0KLQotICAgIEdseXBoRGF0
YSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMikgY29uc3Q7Ci0gICAgR2x5cGggZ2x5cGhG
b3JDaGFyYWN0ZXIoVUNoYXIzMikgY29uc3Q7Ci0KLSAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+
IHN5c3RlbUZhbGxiYWNrRm9udERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiwgY29uc3QgRm9udERl
c2NyaXB0aW9uJiwgYm9vbCBpc0ZvclBsYXRmb3JtRm9udCkgY29uc3Q7Ci0KLSAgICBjb25zdCBH
bHlwaFBhZ2UqIGdseXBoUGFnZSh1bnNpZ25lZCBwYWdlTnVtYmVyKSBjb25zdDsKLQotICAgIHZv
aWQgZGV0ZXJtaW5lUGl0Y2goKTsKLSAgICBQaXRjaCBwaXRjaCgpIGNvbnN0IHsgcmV0dXJuIG1f
dHJlYXRBc0ZpeGVkUGl0Y2ggPyBGaXhlZFBpdGNoIDogVmFyaWFibGVQaXRjaDsgfQotCi0gICAg
Y29uc3QgU1ZHRGF0YSogc3ZnRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fc3ZnRGF0YS5nZXQoKTsg
fQotICAgIGJvb2wgaXNTVkdGb250KCkgY29uc3QgeyByZXR1cm4gISFtX3N2Z0RhdGE7IH0KLQot
ICAgIGJvb2wgaXNDdXN0b21Gb250KCkgY29uc3QgeyByZXR1cm4gbV9pc0N1c3RvbUZvbnQ7IH0K
LSAgICBib29sIGlzTG9hZGluZygpIGNvbnN0IHsgcmV0dXJuIG1faXNMb2FkaW5nOyB9Ci0KLSNp
Zm5kZWYgTkRFQlVHCi0gICAgU3RyaW5nIGRlc2NyaXB0aW9uKCkgY29uc3Q7Ci0jZW5kaWYKLQot
I2lmIFVTRShBUFBLSVQpCi0gICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGNvbXBvc2l0ZUZvbnRS
ZWZlcmVuY2VGb250RGF0YShOU0ZvbnQgKmtleSkgY29uc3Q7Ci0gICAgTlNGb250KiBnZXROU0Zv
bnQoKSBjb25zdCB7IHJldHVybiBtX3BsYXRmb3JtRGF0YS5uc0ZvbnQoKTsgfQotI2VuZGlmCi0K
LSNpZiBQTEFURk9STShJT1MpCi0gICAgQ1RGb250UmVmIGdldENURm9udCgpIGNvbnN0IHsgcmV0
dXJuIG1fcGxhdGZvcm1EYXRhLmZvbnQoKTsgfQotICAgIGJvb2wgc2hvdWxkTm90QmVVc2VkRm9y
QXJhYmljKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGROb3RCZVVzZWRGb3JBcmFiaWM7IH07Ci0j
ZW5kaWYKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBDRkRpY3Rpb25hcnlSZWYgZ2V0Q0ZTdHJp
bmdBdHRyaWJ1dGVzKFR5cGVzZXR0aW5nRmVhdHVyZXMsIEZvbnRPcmllbnRhdGlvbikgY29uc3Q7
Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBVU0UoSEFSRkJVWlopCi0gICAgYm9v
bCBjYW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBVQ2hhciosIHNpemVf
dCkgY29uc3Q7Ci0jZW5kaWYKLQotICAgIGJvb2wgYXBwbHlUcmFuc2Zvcm1zKEdseXBoQnVmZmVy
R2x5cGgqLCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCBzaXplX3QgZ2x5cGhDb3VudCwgVHlwZXNldHRp
bmdGZWF0dXJlcykgY29uc3Q7Ci0KLSNpZiBQTEFURk9STShXSU4pCi0gICAgYm9vbCBpc1N5c3Rl
bUZvbnQoKSBjb25zdCB7IHJldHVybiBtX2lzU3lzdGVtRm9udDsgfQotICAgIFNDUklQVF9GT05U
UFJPUEVSVElFUyogc2NyaXB0Rm9udFByb3BlcnRpZXMoKSBjb25zdDsKLSAgICBTQ1JJUFRfQ0FD
SEUqIHNjcmlwdENhY2hlKCkgY29uc3QgeyByZXR1cm4gJm1fc2NyaXB0Q2FjaGU7IH0KLSAgICBz
dGF0aWMgdm9pZCBzZXRTaG91bGRBcHBseU1hY0FzY2VudEhhY2soYm9vbCk7Ci0gICAgc3RhdGlj
IGJvb2wgc2hvdWxkQXBwbHlNYWNBc2NlbnRIYWNrKCk7Ci0gICAgc3RhdGljIGZsb2F0IGFzY2Vu
dENvbnNpZGVyaW5nTWFjQXNjZW50SGFjayhjb25zdCBXQ0hBUiosIGZsb2F0IGFzY2VudCwgZmxv
YXQgZGVzY2VudCk7Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBTaW1wbGVGb250RGF0YShjb25z
dCBGb250UGxhdGZvcm1EYXRhJiwgYm9vbCBpc0N1c3RvbUZvbnQgPSBmYWxzZSwgYm9vbCBpc0xv
YWRpbmcgPSBmYWxzZSwgYm9vbCBpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrID0gZmFsc2UpOwot
Ci0gICAgU2ltcGxlRm9udERhdGEoc3RkOjp1bmlxdWVfcHRyPFNWR0RhdGE+LCBmbG9hdCBmb250
U2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYyk7Ci0KLSAgICB2
b2lkIHBsYXRmb3JtSW5pdCgpOwotICAgIHZvaWQgcGxhdGZvcm1HbHlwaEluaXQoKTsKLSAgICB2
b2lkIHBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpOwotICAgIHZvaWQgcGxhdGZvcm1EZXN0cm95KCk7
Ci0KLSAgICB2b2lkIGluaXRDaGFyV2lkdGhzKCk7Ci0KLSAgICBQYXNzUmVmUHRyPFNpbXBsZUZv
bnREYXRhPiBjcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBmbG9h
dCBzY2FsZUZhY3RvcikgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gcGxh
dGZvcm1DcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBz
Y2FsZUZhY3RvcikgY29uc3Q7Ci0KLSAgICB2b2lkIHJlbW92ZUZyb21TeXN0ZW1GYWxsYmFja0Nh
Y2hlKCk7Ci0KLSNpZiBQTEFURk9STShXSU4pCi0gICAgdm9pZCBpbml0R0RJRm9udCgpOwotICAg
IHZvaWQgcGxhdGZvcm1Db21tb25EZXN0cm95KCk7Ci0gICAgRmxvYXRSZWN0IGJvdW5kc0ZvckdE
SUdseXBoKEdseXBoIGdseXBoKSBjb25zdDsKLSAgICBmbG9hdCB3aWR0aEZvckdESUdseXBoKEds
eXBoIGdseXBoKSBjb25zdDsKLSNlbmRpZgotCi0jaWYgVVNFKENHKQotICAgIGJvb2wgY2FuVXNl
RmFzdEdseXBoQWR2YW5jZUdldHRlcihHbHlwaCBnbHlwaCwgQ0dTaXplJiBhZHZhbmNlLCBib29s
JiBwb3B1bGF0ZWRBZHZhbmNlKSBjb25zdDsKLSAgICBDR0ZvbnRSZW5kZXJpbmdTdHlsZSByZW5k
ZXJpbmdTdHlsZSgpIGNvbnN0OwotICAgIGJvb2wgYWR2YW5jZUZvckNvbG9yQml0bWFwRm9udChH
bHlwaCwgQ0dTaXplJiByZXN1bHQpIGNvbnN0OyAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGZvbnQg
aXMgYSBjb2xvciBiaXRtYXAgZm9udAotI2VuZGlmCi0KLSAgICBGb250TWV0cmljcyBtX2ZvbnRN
ZXRyaWNzOwotICAgIGZsb2F0IG1fbWF4Q2hhcldpZHRoOwotICAgIGZsb2F0IG1fYXZnQ2hhcldp
ZHRoOwotCi0gICAgRm9udFBsYXRmb3JtRGF0YSBtX3BsYXRmb3JtRGF0YTsKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8U1ZHRGF0YT4gbV9zdmdEYXRhOwotCi0gICAgbXV0YWJsZSBSZWZQdHI8R2x5cGhQ
YWdlPiBtX2dseXBoUGFnZVplcm87Ci0gICAgbXV0YWJsZSBIYXNoTWFwPHVuc2lnbmVkLCBSZWZQ
dHI8R2x5cGhQYWdlPj4gbV9nbHlwaFBhZ2VzOwotICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRy
PEdseXBoTWV0cmljc01hcDxGbG9hdFJlY3Q+PiBtX2dseXBoVG9Cb3VuZHNNYXA7Ci0gICAgbXV0
YWJsZSBHbHlwaE1ldHJpY3NNYXA8ZmxvYXQ+IG1fZ2x5cGhUb1dpZHRoTWFwOwotCi0gICAgYm9v
bCBtX3RyZWF0QXNGaXhlZFBpdGNoOwotICAgIGJvb2wgbV9pc0N1c3RvbUZvbnQ7ICAvLyBXaGV0
aGVyIG9yIG5vdCB3ZSBhcmUgY3VzdG9tIGZvbnQgbG9hZGVkIHZpYSBAZm9udC1mYWNlCi0gICAg
Ym9vbCBtX2lzTG9hZGluZzsgLy8gV2hldGhlciBvciBub3QgdGhpcyBjdXN0b20gZm9udCBpcyBz
dGlsbCBpbiB0aGUgYWN0IG9mIGxvYWRpbmcuCi0KLSAgICBib29sIG1faXNUZXh0T3JpZW50YXRp
b25GYWxsYmFjazsKLSAgICBib29sIG1faXNCcm9rZW5JZGVvZ3JhcGhGYWxsYmFjazsKLQotICAg
IGJvb2wgbV9pc1VzZWRJblN5c3RlbUZhbGxiYWNrQ2FjaGUgeyBmYWxzZSB9OwotCi0gICAgbXV0
YWJsZSBSZWZQdHI8T3BlblR5cGVNYXRoRGF0YT4gbV9tYXRoRGF0YTsKLSNpZiBFTkFCTEUoT1BF
TlRZUEVfVkVSVElDQUwpCi0gICAgUmVmUHRyPE9wZW5UeXBlVmVydGljYWxEYXRhPiBtX3ZlcnRp
Y2FsRGF0YTsKLSNlbmRpZgotICAgIGJvb2wgbV9oYXNWZXJ0aWNhbEdseXBoczsKLQotICAgIEds
eXBoIG1fc3BhY2VHbHlwaDsKLSAgICBmbG9hdCBtX3NwYWNlV2lkdGg7Ci0gICAgR2x5cGggbV96
ZXJvR2x5cGg7Ci0gICAgZmxvYXQgbV9hZGp1c3RlZFNwYWNlV2lkdGg7Ci0KLSAgICBHbHlwaCBt
X3plcm9XaWR0aFNwYWNlR2x5cGg7Ci0KLSAgICBzdHJ1Y3QgRGVyaXZlZEZvbnREYXRhIHsKLSAg
ICAgICAgZXhwbGljaXQgRGVyaXZlZEZvbnREYXRhKGJvb2wgY3VzdG9tKQotICAgICAgICAgICAg
OiBmb3JDdXN0b21Gb250KGN1c3RvbSkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICAgIH5E
ZXJpdmVkRm9udERhdGEoKTsKLQotICAgICAgICBib29sIGZvckN1c3RvbUZvbnQ7Ci0gICAgICAg
IFJlZlB0cjxTaW1wbGVGb250RGF0YT4gc21hbGxDYXBzOwotICAgICAgICBSZWZQdHI8U2ltcGxl
Rm9udERhdGE+IGVtcGhhc2lzTWFyazsKLSAgICAgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBi
cm9rZW5JZGVvZ3JhcGg7Ci0gICAgICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gdmVydGljYWxS
aWdodE9yaWVudGF0aW9uOwotICAgICAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IHVwcmlnaHRP
cmllbnRhdGlvbjsKLSAgICAgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBub25TeW50aGV0aWNJ
dGFsaWM7Ci0jaWYgVVNFKEFQUEtJVCkKLSAgICAgICAgSGFzaE1hcDxOU0ZvbnQqLCBSZWZQdHI8
U2ltcGxlRm9udERhdGE+PiBjb21wb3NpdGVGb250UmVmZXJlbmNlczsKLSNlbmRpZgotICAgIH07
Ci0KLSAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxEZXJpdmVkRm9udERhdGE+IG1fZGVyaXZl
ZEZvbnREYXRhOwotCi0jaWYgVVNFKENHKSB8fCBVU0UoQ0FJUk8pCi0gICAgZmxvYXQgbV9zeW50
aGV0aWNCb2xkT2Zmc2V0OwotI2VuZGlmCi0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBtdXRh
YmxlIEhhc2hNYXA8dW5zaWduZWQsIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+PiBtX0NGU3Ry
aW5nQXR0cmlidXRlczsKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oQ09DT0EpIHx8IFVTRShIQVJG
QlVaWikKLSAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxIYXNoTWFwPFN0cmluZywgYm9vbD4+
IG1fY29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2VTdXBwb3J0OwotI2VuZGlmCi0KLSNpZiBQTEFU
Rk9STShXSU4pCi0gICAgYm9vbCBtX2lzU3lzdGVtRm9udDsKLSAgICBtdXRhYmxlIFNDUklQVF9D
QUNIRSBtX3NjcmlwdENhY2hlOwotICAgIG11dGFibGUgU0NSSVBUX0ZPTlRQUk9QRVJUSUVTKiBt
X3NjcmlwdEZvbnRQcm9wZXJ0aWVzOwotI2VuZGlmCi0jaWYgUExBVEZPUk0oSU9TKQotICAgIGJv
b2wgbV9zaG91bGROb3RCZVVzZWRGb3JBcmFiaWM7Ci0jZW5kaWYKLX07Ci0KLUFMV0FZU19JTkxJ
TkUgRmxvYXRSZWN0IFNpbXBsZUZvbnREYXRhOjpib3VuZHNGb3JHbHlwaChHbHlwaCBnbHlwaCkg
Y29uc3QKLXsKLSAgICBpZiAoaXNaZXJvV2lkdGhTcGFjZUdseXBoKGdseXBoKSkKLSAgICAgICAg
cmV0dXJuIEZsb2F0UmVjdCgpOwotCi0gICAgRmxvYXRSZWN0IGJvdW5kczsKLSAgICBpZiAobV9n
bHlwaFRvQm91bmRzTWFwKSB7Ci0gICAgICAgIGJvdW5kcyA9IG1fZ2x5cGhUb0JvdW5kc01hcC0+
bWV0cmljc0ZvckdseXBoKGdseXBoKTsKLSAgICAgICAgaWYgKGJvdW5kcy53aWR0aCgpICE9IGNH
bHlwaFNpemVVbmtub3duKQotICAgICAgICAgICAgcmV0dXJuIGJvdW5kczsKLSAgICB9Ci0KLSAg
ICBib3VuZHMgPSBwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKGdseXBoKTsKLSAgICBpZiAoIW1fZ2x5
cGhUb0JvdW5kc01hcCkKLSAgICAgICAgbV9nbHlwaFRvQm91bmRzTWFwID0gc3RkOjptYWtlX3Vu
aXF1ZTxHbHlwaE1ldHJpY3NNYXA8RmxvYXRSZWN0Pj4oKTsKLSAgICBtX2dseXBoVG9Cb3VuZHNN
YXAtPnNldE1ldHJpY3NGb3JHbHlwaChnbHlwaCwgYm91bmRzKTsKLSAgICByZXR1cm4gYm91bmRz
OwotfQotCi1BTFdBWVNfSU5MSU5FIGZsb2F0IFNpbXBsZUZvbnREYXRhOjp3aWR0aEZvckdseXBo
KEdseXBoIGdseXBoKSBjb25zdAotewotICAgIGlmIChpc1plcm9XaWR0aFNwYWNlR2x5cGgoZ2x5
cGgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGZsb2F0IHdpZHRoID0gbV9nbHlwaFRvV2lk
dGhNYXAubWV0cmljc0ZvckdseXBoKGdseXBoKTsKLSAgICBpZiAod2lkdGggIT0gY0dseXBoU2l6
ZVVua25vd24pCi0gICAgICAgIHJldHVybiB3aWR0aDsKLQotICAgIGlmIChpc1NWR0ZvbnQoKSkK
LSAgICAgICAgd2lkdGggPSBtX3N2Z0RhdGEtPndpZHRoRm9yU1ZHR2x5cGgoZ2x5cGgsIG1fcGxh
dGZvcm1EYXRhLnNpemUoKSk7Ci0jaWYgRU5BQkxFKE9QRU5UWVBFX1ZFUlRJQ0FMKQotICAgIGVs
c2UgaWYgKG1fdmVydGljYWxEYXRhKQotI2lmIFVTRShDRykgfHwgVVNFKENBSVJPKQotICAgICAg
ICB3aWR0aCA9IG1fdmVydGljYWxEYXRhLT5hZHZhbmNlSGVpZ2h0KHRoaXMsIGdseXBoKSArIG1f
c3ludGhldGljQm9sZE9mZnNldDsKLSNlbHNlCi0gICAgICAgIHdpZHRoID0gbV92ZXJ0aWNhbERh
dGEtPmFkdmFuY2VIZWlnaHQodGhpcywgZ2x5cGgpOwotI2VuZGlmCi0jZW5kaWYKLSAgICBlbHNl
Ci0gICAgICAgIHdpZHRoID0gcGxhdGZvcm1XaWR0aEZvckdseXBoKGdseXBoKTsKLQotICAgIG1f
Z2x5cGhUb1dpZHRoTWFwLnNldE1ldHJpY3NGb3JHbHlwaChnbHlwaCwgd2lkdGgpOwotICAgIHJl
dHVybiB3aWR0aDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gU2lt
cGxlRm9udERhdGFfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGV4
dFJ1bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Rl
eHRSdW4uaAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvVGV4dFJ1bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIGNsYXNzIEZv
bnRDYXNjYWRlOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogY2xhc3MgR2x5cGhCdWZmZXI7CiBj
bGFzcyBHbHlwaFRvUGF0aFRyYW5zbGF0b3I7Ci1jbGFzcyBTaW1wbGVGb250RGF0YTsKK2NsYXNz
IEZvbnQ7CiAKIHN0cnVjdCBHbHlwaERhdGE7CiBzdHJ1Y3QgV2lkdGhJdGVyYXRvcjsKQEAgLTE5
OCwxMCArMTk4LDEwIEBAIHB1YmxpYzoKIAogI2lmIEVOQUJMRShTVkdfRk9OVFMpCiAgICAgICAg
IHZpcnR1YWwgR2x5cGhEYXRhIGdseXBoRGF0YUZvckNoYXJhY3Rlcihjb25zdCBGb250Q2FzY2Fk
ZSYsIFdpZHRoSXRlcmF0b3ImLCBVQ2hhcjMyIGNoYXJhY3RlciwgYm9vbCBtaXJyb3IsIGludCBj
dXJyZW50Q2hhcmFjdGVyLCB1bnNpZ25lZCYgYWR2YW5jZUxlbmd0aCwgU3RyaW5nJiBub3JtYWxp
emVkU3BhY2VzU3RyaW5nQ2FjaGUpID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRyYXdTVkdH
bHlwaHMoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgU2ltcGxlRm9udERhdGEqLCBjb25zdCBHbHlw
aEJ1ZmZlciYsIGludCBmcm9tLCBpbnQgdG8sIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdCA9IDA7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBkcmF3U1ZHR2x5cGhzKEdyYXBoaWNzQ29udGV4dCosIGNv
bnN0IEZvbnQqLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBmcm9tLCBpbnQgdG8sIGNvbnN0IEZs
b2F0UG9pbnQmKSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1YWwgZmxvYXQgZmxvYXRXaWR0aFVz
aW5nU1ZHRm9udChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBpbnQmIGNoYXJz
Q29uc3VtZWQsIFN0cmluZyYgZ2x5cGhOYW1lKSBjb25zdCA9IDA7Ci0gICAgICAgIHZpcnR1YWwg
Ym9vbCBhcHBseVNWR0tlcm5pbmcoY29uc3QgU2ltcGxlRm9udERhdGEqLCBXaWR0aEl0ZXJhdG9y
JiwgR2x5cGhCdWZmZXIqLCBpbnQgZnJvbSkgY29uc3QgPSAwOwotICAgICAgICB2aXJ0dWFsIHN0
ZDo6dW5pcXVlX3B0cjxHbHlwaFRvUGF0aFRyYW5zbGF0b3I+IGNyZWF0ZUdseXBoVG9QYXRoVHJh
bnNsYXRvcihjb25zdCBTaW1wbGVGb250RGF0YSYsIGNvbnN0IFRleHRSdW4qLCBjb25zdCBHbHlw
aEJ1ZmZlciYsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JikgY29u
c3QgPSAwOworICAgICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlTVkdLZXJuaW5nKGNvbnN0IEZvbnQq
LCBXaWR0aEl0ZXJhdG9yJiwgR2x5cGhCdWZmZXIqLCBpbnQgZnJvbSkgY29uc3QgPSAwOworICAg
ICAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxHbHlwaFRvUGF0aFRyYW5zbGF0b3I+IGNyZWF0
ZUdseXBoVG9QYXRoVHJhbnNsYXRvcihjb25zdCBGb250JiwgY29uc3QgVGV4dFJ1biosIGNvbnN0
IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQm
KSBjb25zdCA9IDA7CiAjZW5kaWYKICAgICB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMTc4ODU3
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIyLDEwICsyMiwxMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIldpZHRoSXRlcmF0b3IuaCIKIAorI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRl
ICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCiAjaW5jbHVkZSAiTGF0
aW4xVGV4dEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKICNpbmNsdWRl
ICJTdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4
dHJhcy5oPgogCkBAIC0zNCw3ICszNCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBVbmljb2RlOwogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLVdpZHRoSXRlcmF0b3I6OldpZHRoSXRlcmF0b3IoY29uc3Qg
Rm9udENhc2NhZGUqIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBTaW1w
bGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBib29sIGFjY291bnRGb3JHbHlwaEJvdW5kcywg
Ym9vbCBmb3JUZXh0RW1waGFzaXMpCitXaWR0aEl0ZXJhdG9yOjpXaWR0aEl0ZXJhdG9yKGNvbnN0
IEZvbnRDYXNjYWRlKiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgRm9u
dCo+KiBmYWxsYmFja0ZvbnRzLCBib29sIGFjY291bnRGb3JHbHlwaEJvdW5kcywgYm9vbCBmb3JU
ZXh0RW1waGFzaXMpCiAgICAgOiBtX2ZvbnQoZm9udCkKICAgICAsIG1fcnVuKHJ1bikKICAgICAs
IG1fY3VycmVudENoYXJhY3RlcigwKQpAQCAtMTAwLDcgKzEwMCw3IEBAIHB1YmxpYzoKIAogdHlw
ZWRlZiBWZWN0b3I8c3RkOjpwYWlyPGludCwgT3JpZ2luYWxBZHZhbmNlc0ZvckNoYXJhY3RlclRy
ZWF0ZWRBc1NwYWNlPiwgNjQ+IENoYXJhY3RlcnNUcmVhdGVkQXNTcGFjZTsKIAotc3RhdGljIGlu
bGluZSBmbG9hdCBhcHBseUZvbnRUcmFuc2Zvcm1zKEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZlciwg
Ym9vbCBsdHIsIGludCYgbGFzdEdseXBoQ291bnQsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250
RGF0YSwgV2lkdGhJdGVyYXRvciYgaXRlcmF0b3IsIFR5cGVzZXR0aW5nRmVhdHVyZXMgdHlwZXNl
dHRpbmdGZWF0dXJlcywgQ2hhcmFjdGVyc1RyZWF0ZWRBc1NwYWNlJiBjaGFyYWN0ZXJzVHJlYXRl
ZEFzU3BhY2UpCitzdGF0aWMgaW5saW5lIGZsb2F0IGFwcGx5Rm9udFRyYW5zZm9ybXMoR2x5cGhC
dWZmZXIqIGdseXBoQnVmZmVyLCBib29sIGx0ciwgaW50JiBsYXN0R2x5cGhDb3VudCwgY29uc3Qg
Rm9udCogZm9udCwgV2lkdGhJdGVyYXRvciYgaXRlcmF0b3IsIFR5cGVzZXR0aW5nRmVhdHVyZXMg
dHlwZXNldHRpbmdGZWF0dXJlcywgQ2hhcmFjdGVyc1RyZWF0ZWRBc1NwYWNlJiBjaGFyYWN0ZXJz
VHJlYXRlZEFzU3BhY2UpCiB7CiAgICAgQVNTRVJUKHR5cGVzZXR0aW5nRmVhdHVyZXMgJiAoS2Vy
bmluZyB8IExpZ2F0dXJlcykpOwogCkBAIC0xMjMsMTYgKzEyMywxNiBAQCBzdGF0aWMgaW5saW5l
IGZsb2F0IGFwcGx5Rm9udFRyYW5zZm9ybXMoCiAgICAgVU5VU0VEX1BBUkFNKGl0ZXJhdG9yKTsK
ICNlbHNlCiAgICAgLy8gV2UgbmVlZCB0byBoYW5kbGUgdHJhbnNmb3JtcyBvbiBTVkcgZm9udHMg
aW50ZXJuYWxseSwgc2luY2UgdGhleSBhcmUgcmVuZGVyZWQgaW50ZXJuYWxseS4KLSAgICBpZiAo
Zm9udERhdGEtPmlzU1ZHRm9udCgpKSB7CisgICAgaWYgKGZvbnQtPmlzU1ZHRm9udCgpKSB7CiAg
ICAgICAgIC8vIFNWRyBmb250IGxpZ2F0dXJlcyBhcmUgaGFuZGxlZCBkdXJpbmcgZ2x5cGggc2Vs
ZWN0aW9uLCBvbmx5IGtlcm5pbmcgcmVtYWluaW5nLgogICAgICAgICBpZiAoaXRlcmF0b3IucnVu
KCkucmVuZGVyaW5nQ29udGV4dCgpICYmICh0eXBlc2V0dGluZ0ZlYXR1cmVzICYgS2VybmluZykp
IHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBwYXNzIHRoZSBuZWNlc3NhcnkgY29u
dGV4dCBkb3duIHRvIHRoaXMgbGV2ZWwgc28gd2UgY2FuIGxhemlseSBjcmVhdGUgcmVuZGVyaW5n
IGNvbnRleHRzIGF0IHRoaXMgcG9pbnQuCiAgICAgICAgICAgICAvLyBIb3dldmVyLCBhIGxhcmdl
ciByZWZhY3RvcmluZyBvZiBTVkcgZm9udHMgbWlnaHQgbmVjZXNzYXJ5IHRvIHNpZGVzdGVwIHRo
aXMgcHJvYmxlbSBjb21wbGV0ZWx5LgotICAgICAgICAgICAgaXRlcmF0b3IucnVuKCkucmVuZGVy
aW5nQ29udGV4dCgpLT5hcHBseVNWR0tlcm5pbmcoZm9udERhdGEsIGl0ZXJhdG9yLCBnbHlwaEJ1
ZmZlciwgbGFzdEdseXBoQ291bnQpOworICAgICAgICAgICAgaXRlcmF0b3IucnVuKCkucmVuZGVy
aW5nQ29udGV4dCgpLT5hcHBseVNWR0tlcm5pbmcoZm9udCwgaXRlcmF0b3IsIGdseXBoQnVmZmVy
LCBsYXN0R2x5cGhDb3VudCk7CiAgICAgICAgIH0KICAgICB9IGVsc2UKICNlbmRpZgotICAgICAg
ICBmb250RGF0YS0+YXBwbHlUcmFuc2Zvcm1zKGdseXBoQnVmZmVyLT5nbHlwaHMobGFzdEdseXBo
Q291bnQpLCBhZHZhbmNlcyArIGxhc3RHbHlwaENvdW50LCBnbHlwaEJ1ZmZlclNpemUgLSBsYXN0
R2x5cGhDb3VudCwgdHlwZXNldHRpbmdGZWF0dXJlcyk7CisgICAgICAgIGZvbnQtPmFwcGx5VHJh
bnNmb3JtcyhnbHlwaEJ1ZmZlci0+Z2x5cGhzKGxhc3RHbHlwaENvdW50KSwgYWR2YW5jZXMgKyBs
YXN0R2x5cGhDb3VudCwgZ2x5cGhCdWZmZXJTaXplIC0gbGFzdEdseXBoQ291bnQsIHR5cGVzZXR0
aW5nRmVhdHVyZXMpOwogCiAgICAgaWYgKCFsdHIpCiAgICAgICAgIGdseXBoQnVmZmVyLT5yZXZl
cnNlKGxhc3RHbHlwaENvdW50LCBnbHlwaEJ1ZmZlclNpemUgLSBsYXN0R2x5cGhDb3VudCk7CkBA
IC0xNjYsOCArMTY2LDggQEAgaW5saW5lIHVuc2lnbmVkIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2VJ
bgogICAgIGZsb2F0IGxhc3RSb3VuZGluZ1dpZHRoID0gbV9maW5hbFJvdW5kaW5nV2lkdGg7CiAg
ICAgRmxvYXRSZWN0IGJvdW5kczsKIAotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhJiBwcmltYXJ5
Rm9udERhdGEgPSBtX2ZvbnQtPnByaW1hcnlGb250RGF0YSgpOwotICAgIGNvbnN0IFNpbXBsZUZv
bnREYXRhKiBsYXN0Rm9udERhdGEgPSAmcHJpbWFyeUZvbnREYXRhOworICAgIGNvbnN0IEZvbnQm
IHByaW1hcnlGb250ID0gbV9mb250LT5wcmltYXJ5Rm9udCgpOworICAgIGNvbnN0IEZvbnQqIGxh
c3RGb250RGF0YSA9ICZwcmltYXJ5Rm9udDsKICAgICBpbnQgbGFzdEdseXBoQ291bnQgPSBnbHlw
aEJ1ZmZlciA/IGdseXBoQnVmZmVyLT5zaXplKCkgOiAwOwogCiAgICAgVUNoYXIzMiBjaGFyYWN0
ZXIgPSAwOwpAQCAtMTgzLDE1ICsxODMsMTUgQEAgaW5saW5lIHVuc2lnbmVkIFdpZHRoSXRlcmF0
b3I6OmFkdmFuY2VJbgogICAgICAgICAgICAgdGV4dEl0ZXJhdG9yLmFkdmFuY2UoYWR2YW5jZUxl
bmd0aCk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBjb25zdCBT
aW1wbGVGb250RGF0YSogZm9udERhdGEgPSBnbHlwaERhdGEuZm9udERhdGE7Ci0gICAgICAgIEFT
U0VSVChmb250RGF0YSk7CisgICAgICAgIGNvbnN0IEZvbnQqIGZvbnQgPSBnbHlwaERhdGEuZm9u
dDsKKyAgICAgICAgQVNTRVJUKGZvbnQpOwogCiAgICAgICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUg
YSBnbHlwaCBhbmQgZm9udCBkYXRhLCBnZXQgaXRzIHdpZHRoLgogICAgICAgICBmbG9hdCB3aWR0
aDsKICAgICAgICAgaWYgKGNoYXJhY3RlciA9PSAnXHQnICYmIG1fcnVuLmFsbG93VGFicygpKQot
ICAgICAgICAgICAgd2lkdGggPSBtX2ZvbnQtPnRhYldpZHRoKCpmb250RGF0YSwgbV9ydW4udGFi
U2l6ZSgpLCBtX3J1bi54UG9zKCkgKyBtX3J1bldpZHRoU29GYXIgKyB3aWR0aFNpbmNlTGFzdFJv
dW5kaW5nKTsKKyAgICAgICAgICAgIHdpZHRoID0gbV9mb250LT50YWJXaWR0aCgqZm9udCwgbV9y
dW4udGFiU2l6ZSgpLCBtX3J1bi54UG9zKCkgKyBtX3J1bldpZHRoU29GYXIgKyB3aWR0aFNpbmNl
TGFzdFJvdW5kaW5nKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICB3aWR0aCA9IGZvbnRE
YXRhLT53aWR0aEZvckdseXBoKGdseXBoKTsKKyAgICAgICAgICAgIHdpZHRoID0gZm9udC0+d2lk
dGhGb3JHbHlwaChnbHlwaCk7CiAKICAgICAgICAgICAgIC8vIFNWRyB1c2VzIGhvcml6b250YWxH
bHlwaFN0cmV0Y2goKSwgd2hlbiB0ZXh0TGVuZ3RoIGlzIHVzZWQgdG8gc3RyZXRjaC9zcXVlZXpl
IHRleHQuCiAgICAgICAgICAgICB3aWR0aCAqPSBtX3J1bi5ob3Jpem9udGFsR2x5cGhTdHJldGNo
KCk7CkBAIC0yMDAsMjYgKzIwMCwyNiBAQCBpbmxpbmUgdW5zaWduZWQgV2lkdGhJdGVyYXRvcjo6
YWR2YW5jZUluCiAgICAgICAgICAgICAvLyBGaXJzdCwgd2Ugcm91bmQgc3BhY2VzIHRvIGFuIGFk
anVzdGVkIHdpZHRoIGluIGFsbCBmb250cy4KICAgICAgICAgICAgIC8vIFNlY29uZCwgaW4gZml4
ZWQtcGl0Y2ggZm9udHMgd2UgZW5zdXJlIHRoYXQgYWxsIGNoYXJhY3RlcnMgdGhhdAogICAgICAg
ICAgICAgLy8gbWF0Y2ggdGhlIHdpZHRoIG9mIHRoZSBzcGFjZSBjaGFyYWN0ZXIgaGF2ZSB0aGUg
c2FtZSB3aWR0aCBhcyB0aGUgc3BhY2UgY2hhcmFjdGVyLgotICAgICAgICAgICAgaWYgKG1fcnVu
LmFwcGx5V29yZFJvdW5kaW5nKCkgJiYgd2lkdGggPT0gZm9udERhdGEtPnNwYWNlV2lkdGgoKSAm
JiAoZm9udERhdGEtPnBpdGNoKCkgPT0gRml4ZWRQaXRjaCB8fCBnbHlwaCA9PSBmb250RGF0YS0+
c3BhY2VHbHlwaCgpKSkKLSAgICAgICAgICAgICAgICB3aWR0aCA9IGZvbnREYXRhLT5hZGp1c3Rl
ZFNwYWNlV2lkdGgoKTsKKyAgICAgICAgICAgIGlmIChtX3J1bi5hcHBseVdvcmRSb3VuZGluZygp
ICYmIHdpZHRoID09IGZvbnQtPnNwYWNlV2lkdGgoKSAmJiAoZm9udC0+cGl0Y2goKSA9PSBGaXhl
ZFBpdGNoIHx8IGdseXBoID09IGZvbnQtPnNwYWNlR2x5cGgoKSkpCisgICAgICAgICAgICAgICAg
d2lkdGggPSBmb250LT5hZGp1c3RlZFNwYWNlV2lkdGgoKTsKICAgICAgICAgfQogCi0gICAgICAg
IGlmIChmb250RGF0YSAhPSBsYXN0Rm9udERhdGEgJiYgd2lkdGgpIHsKKyAgICAgICAgaWYgKGZv
bnQgIT0gbGFzdEZvbnREYXRhICYmIHdpZHRoKSB7CiAgICAgICAgICAgICBpZiAoc2hvdWxkQXBw
bHlGb250VHJhbnNmb3JtcygpKSB7CiAgICAgICAgICAgICAgICAgbV9ydW5XaWR0aFNvRmFyICs9
IGFwcGx5Rm9udFRyYW5zZm9ybXMoZ2x5cGhCdWZmZXIsIG1fcnVuLmx0cigpLCBsYXN0R2x5cGhD
b3VudCwgbGFzdEZvbnREYXRhLCAqdGhpcywgbV90eXBlc2V0dGluZ0ZlYXR1cmVzLCBjaGFyYWN0
ZXJzVHJlYXRlZEFzU3BhY2UpOwogICAgICAgICAgICAgICAgIGxhc3RHbHlwaENvdW50ID0gZ2x5
cGhCdWZmZXItPnNpemUoKTsgLy8gYXBwbHlGb250VHJhbnNmb3JtcyBkb2Vzbid0IHVwZGF0ZSB3
aGVuIHRoZXJlIGhhZCBiZWVuIG9ubHkgb25lIGdseXBoLgogICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICBsYXN0Rm9udERhdGEgPSBmb250RGF0YTsKLSAgICAgICAgICAgIGlmIChtX2ZhbGxi
YWNrRm9udHMgJiYgZm9udERhdGEgIT0gJnByaW1hcnlGb250RGF0YSkgeworICAgICAgICAgICAg
bGFzdEZvbnREYXRhID0gZm9udDsKKyAgICAgICAgICAgIGlmIChtX2ZhbGxiYWNrRm9udHMgJiYg
Zm9udCAhPSAmcHJpbWFyeUZvbnQpIHsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBk
b2VzIGEgbGl0dGxlIGV4dHJhIHdvcmsgdGhhdCBjb3VsZCBiZSBhdm9pZGVkIGlmCiAgICAgICAg
ICAgICAgICAgLy8gZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKCkgcmV0dXJuZWQgd2hldGhlciBpdCBj
aG9zZSB0byB1c2UgYSBzbWFsbCBjYXBzIGZvbnQuCiAgICAgICAgICAgICAgICAgaWYgKCFtX2Zv
bnQtPmlzU21hbGxDYXBzKCkgfHwgY2hhcmFjdGVyID09IHVfdG91cHBlcihjaGFyYWN0ZXIpKQot
ICAgICAgICAgICAgICAgICAgICBtX2ZhbGxiYWNrRm9udHMtPmFkZChmb250RGF0YSk7CisgICAg
ICAgICAgICAgICAgICAgIG1fZmFsbGJhY2tGb250cy0+YWRkKGZvbnQpOwogICAgICAgICAgICAg
ICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICBjb25zdCBHbHlwaERhdGEmIHVwcGVyY2Fz
ZUdseXBoRGF0YSA9IG1fZm9udC0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHVfdG91cHBlcihjaGFy
YWN0ZXIpLCBydGwpOwotICAgICAgICAgICAgICAgICAgICBpZiAodXBwZXJjYXNlR2x5cGhEYXRh
LmZvbnREYXRhICE9ICZwcmltYXJ5Rm9udERhdGEpCi0gICAgICAgICAgICAgICAgICAgICAgICBt
X2ZhbGxiYWNrRm9udHMtPmFkZCh1cHBlcmNhc2VHbHlwaERhdGEuZm9udERhdGEpOworICAgICAg
ICAgICAgICAgICAgICBpZiAodXBwZXJjYXNlR2x5cGhEYXRhLmZvbnQgIT0gJnByaW1hcnlGb250
KQorICAgICAgICAgICAgICAgICAgICAgICAgbV9mYWxsYmFja0ZvbnRzLT5hZGQodXBwZXJjYXNl
R2x5cGhEYXRhLmZvbnQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAg
ICAgfQpAQCAtMjQzLDkgKzI0Myw5IEBAIGlubGluZSB1bnNpZ25lZCBXaWR0aEl0ZXJhdG9yOjph
ZHZhbmNlSW4KICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnbHlwaEJ1ZmZlcikgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnbHlwaEJ1ZmZlci0+aXNFbXB0eSgpKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX2ZvclRleHRFbXBoYXNpcykKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoQnVmZmVyLT5hZGQoZm9udERh
dGEtPnplcm9XaWR0aFNwYWNlR2x5cGgoKSwgZm9udERhdGEsIG1fZXhwYW5zaW9uUGVyT3Bwb3J0
dW5pdHksIGN1cnJlbnRDaGFyYWN0ZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ2x5cGhCdWZmZXItPmFkZChmb250LT56ZXJvV2lkdGhTcGFjZUdseXBoKCksIGZvbnQs
IG1fZXhwYW5zaW9uUGVyT3Bwb3J0dW5pdHksIGN1cnJlbnRDaGFyYWN0ZXIpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnbHlwaEJ1ZmZlci0+YWRkKGZvbnREYXRhLT5zcGFjZUdseXBoKCksIGZvbnREYXRh
LCBleHBhbnNpb25BdFRoaXNPcHBvcnR1bml0eSwgY3VycmVudENoYXJhY3Rlcik7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+YWRkKGZvbnQtPnNwYWNl
R2x5cGgoKSwgZm9udCwgZXhwYW5zaW9uQXRUaGlzT3Bwb3J0dW5pdHksIGN1cnJlbnRDaGFyYWN0
ZXIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+ZXhwYW5kTGFzdEFkdmFuY2UoZXhwYW5zaW9u
QXRUaGlzT3Bwb3J0dW5pdHkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMjc0LDcg
KzI3NCw3IEBAIGlubGluZSB1bnNpZ25lZCBXaWR0aEl0ZXJhdG9yOjphZHZhbmNlSW4KICAgICAg
ICAgfQogCiAgICAgICAgIGlmIChtX2FjY291bnRGb3JHbHlwaEJvdW5kcykgewotICAgICAgICAg
ICAgYm91bmRzID0gZm9udERhdGEtPmJvdW5kc0ZvckdseXBoKGdseXBoKTsKKyAgICAgICAgICAg
IGJvdW5kcyA9IGZvbnQtPmJvdW5kc0ZvckdseXBoKGdseXBoKTsKICAgICAgICAgICAgIGlmICgh
Y3VycmVudENoYXJhY3RlcikKICAgICAgICAgICAgICAgICBtX2ZpcnN0R2x5cGhPdmVyZmxvdyA9
IHN0ZDo6bWF4PGZsb2F0PigwLCAtYm91bmRzLngoKSk7CiAgICAgICAgIH0KQEAgLTMxNCw3ICsz
MTQsNyBAQCBpbmxpbmUgdW5zaWduZWQgV2lkdGhJdGVyYXRvcjo6YWR2YW5jZUluCiAgICAgICAg
IH0KIAogICAgICAgICBpZiAoZ2x5cGhCdWZmZXIpCi0gICAgICAgICAgICBnbHlwaEJ1ZmZlci0+
YWRkKGdseXBoLCBmb250RGF0YSwgKHJ0bCA/IG9sZFdpZHRoICsgbGFzdFJvdW5kaW5nV2lkdGgg
OiB3aWR0aCksIGN1cnJlbnRDaGFyYWN0ZXIpOworICAgICAgICAgICAgZ2x5cGhCdWZmZXItPmFk
ZChnbHlwaCwgZm9udCwgKHJ0bCA/IG9sZFdpZHRoICsgbGFzdFJvdW5kaW5nV2lkdGggOiB3aWR0
aCksIGN1cnJlbnRDaGFyYWN0ZXIpOwogCiAgICAgICAgIGxhc3RSb3VuZGluZ1dpZHRoID0gd2lk
dGggLSBvbGRXaWR0aDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
V2lkdGhJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1dpZHRoSXRlcmF0b3IuaAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MiwxNCArMzIsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGb250Q2FzY2FkZTsK
IGNsYXNzIEdseXBoQnVmZmVyOwotY2xhc3MgU2ltcGxlRm9udERhdGE7CitjbGFzcyBGb250Owog
Y2xhc3MgVGV4dFJ1bjsKIHN0cnVjdCBHbHlwaERhdGE7CiAKIHN0cnVjdCBXaWR0aEl0ZXJhdG9y
IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBXaWR0aEl0ZXJh
dG9yKGNvbnN0IEZvbnRDYXNjYWRlKiwgY29uc3QgVGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3QgU2lt
cGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDAsIGJvb2wgYWNjb3VudEZvckdseXBoQm91
bmRzID0gZmFsc2UsIGJvb2wgZm9yVGV4dEVtcGhhc2lzID0gZmFsc2UpOworICAgIFdpZHRoSXRl
cmF0b3IoY29uc3QgRm9udENhc2NhZGUqLCBjb25zdCBUZXh0UnVuJiwgSGFzaFNldDxjb25zdCBG
b250Kj4qIGZhbGxiYWNrRm9udHMgPSAwLCBib29sIGFjY291bnRGb3JHbHlwaEJvdW5kcyA9IGZh
bHNlLCBib29sIGZvclRleHRFbXBoYXNpcyA9IGZhbHNlKTsKIAogICAgIHVuc2lnbmVkIGFkdmFu
Y2UoaW50IHRvLCBHbHlwaEJ1ZmZlciopOwogICAgIGJvb2wgYWR2YW5jZU9uZUNoYXJhY3Rlcihm
bG9hdCYgd2lkdGgsIEdseXBoQnVmZmVyJik7CkBAIC05NCw3ICs5NCw3IEBAIHByaXZhdGU6CiAg
ICAgYm9vbCBzaG91bGRBcHBseUZvbnRUcmFuc2Zvcm1zKCkgY29uc3QgeyByZXR1cm4gbV9ydW4u
bGVuZ3RoKCkgPiAxICYmIChtX3R5cGVzZXR0aW5nRmVhdHVyZXMgJiAoS2VybmluZyB8IExpZ2F0
dXJlcykpOyB9CiAKICAgICBUeXBlc2V0dGluZ0ZlYXR1cmVzIG1fdHlwZXNldHRpbmdGZWF0dXJl
czsKLSAgICBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIG1fZmFsbGJhY2tGb250czsK
KyAgICBIYXNoU2V0PGNvbnN0IEZvbnQqPiogbV9mYWxsYmFja0ZvbnRzOwogICAgIGJvb2wgbV9h
Y2NvdW50Rm9yR2x5cGhCb3VuZHM7CiAgICAgZmxvYXQgbV9tYXhHbHlwaEJvdW5kaW5nQm94WTsK
ICAgICBmbG9hdCBtX21pbkdseXBoQm91bmRpbmdCb3hZOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhc2NhZGVDb2NvYS5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FzY2FkZUNvY29h
Lm1tCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9Gb250Q2FzY2FkZUNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMSArMjcs
MTEgQEAKICNpbXBvcnQgIkNvcmVHcmFwaGljc1NQSS5oIgogI2ltcG9ydCAiQ29yZVRleHRTUEku
aCIKICNpbXBvcnQgIkRhc2hBcnJheS5oIgorI2ltcG9ydCAiRm9udC5oIgogI2ltcG9ydCAiR2x5
cGhCdWZmZXIuaCIKICNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dC5oIgogI2ltcG9ydCAiTGF5b3V0
UmVjdC5oIgogI2ltcG9ydCAiTG9nZ2luZy5oIgotI2ltcG9ydCAiU2ltcGxlRm9udERhdGEuaCIK
ICNpbXBvcnQgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKICNpZiBVU0UoQVBQS0lUKQogI2lt
cG9ydCA8QXBwS2l0L0FwcEtpdC5oPgpAQCAtOTEsNyArOTEsNyBAQCBzdGF0aWMgaW5saW5lIGJv
b2wgc2hvdWxkVXNlTGV0dGVycHJlc3NFCiAjZW5kaWYKIH0KIAotc3RhdGljIHZvaWQgc2hvd0xl
dHRlcnByZXNzZWRHbHlwaHNXaXRoQWR2YW5jZXMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNv
bnN0IFNpbXBsZUZvbnREYXRhKiBmb250LCBDR0NvbnRleHRSZWYgY29udGV4dCwgY29uc3QgQ0dH
bHlwaCogZ2x5cGhzLCBjb25zdCBDR1NpemUqIGFkdmFuY2VzLCBzaXplX3QgY291bnQpCitzdGF0
aWMgdm9pZCBzaG93TGV0dGVycHJlc3NlZEdseXBoc1dpdGhBZHZhbmNlcyhjb25zdCBGbG9hdFBv
aW50JiBwb2ludCwgY29uc3QgRm9udCogZm9udCwgQ0dDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0
IENHR2x5cGgqIGdseXBocywgY29uc3QgQ0dTaXplKiBhZHZhbmNlcywgc2l6ZV90IGNvdW50KQog
ewogI2lmIEVOQUJMRShMRVRURVJQUkVTUykKICAgICBpZiAoIWNvdW50KQpAQCAtMTMxLDcgKzEz
MSw3IEBAIHN0YXRpYyB2b2lkIHNob3dMZXR0ZXJwcmVzc2VkR2x5cGhzV2l0aEEKICNlbmRpZgog
fQogCi1zdGF0aWMgdm9pZCBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgQ0dDb250ZXh0UmVmIGNvbnRleHQs
IGNvbnN0IENHR2x5cGgqIGdseXBocywgY29uc3QgQ0dTaXplKiBhZHZhbmNlcywgc2l6ZV90IGNv
dW50KQorc3RhdGljIHZvaWQgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgY29uc3QgRm9udCogZm9udCwgQ0dDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IENH
R2x5cGgqIGdseXBocywgY29uc3QgQ0dTaXplKiBhZHZhbmNlcywgc2l6ZV90IGNvdW50KQogewog
ICAgIGlmICghY291bnQpCiAgICAgICAgIHJldHVybjsKQEAgLTE5Nyw3ICsxOTcsNyBAQCBzdGF0
aWMgdm9pZCBzZXRDR0ZvbnRSZW5kZXJpbmdNb2RlKENHQ29uCiB9CiAjZW5kaWYKIAotdm9pZCBG
b250Q2FzY2FkZTo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFNp
bXBsZUZvbnREYXRhKiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGludCBm
cm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCkgY29uc3QK
K3ZvaWQgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBGb250KiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGludCBmcm9t
LCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCkgY29uc3QKIHsK
ICAgICBjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEgPSBmb250LT5wbGF0Zm9y
bURhdGEoKTsKICAgICBpZiAoIXBsYXRmb3JtRGF0YS5zaXplKCkpCkBAIC00NjgsNyArNDY4LDcg
QEAgcHVibGljOgogICAgICAgICA6IG1faW5kZXgoMCkKICAgICAgICAgLCBtX3RleHRSdW4odGV4
dFJ1bikKICAgICAgICAgLCBtX2dseXBoQnVmZmVyKGdseXBoQnVmZmVyKQotICAgICAgICAsIG1f
Zm9udERhdGEoZ2x5cGhCdWZmZXIuZm9udERhdGFBdChtX2luZGV4KSkKKyAgICAgICAgLCBtX2Zv
bnREYXRhKGdseXBoQnVmZmVyLmZvbnRBdChtX2luZGV4KSkKICAgICAgICAgLCBtX3RyYW5zbGF0
aW9uKENHQWZmaW5lVHJhbnNmb3JtU2NhbGUoQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlVHJhbnNsYXRp
b24odGV4dE9yaWdpbi54KCksIHRleHRPcmlnaW4ueSgpKSwgMSwgLTEpKQogICAgIHsKICAgICAg
ICAgbW92ZVRvTmV4dFZhbGlkR2x5cGgoKTsKQEAgLTQ4Nyw3ICs0ODcsNyBAQCBwcml2YXRlOgog
ICAgIGludCBtX2luZGV4OwogICAgIGNvbnN0IFRleHRSdW4mIG1fdGV4dFJ1bjsKICAgICBjb25z
dCBHbHlwaEJ1ZmZlciYgbV9nbHlwaEJ1ZmZlcjsKLSAgICBjb25zdCBTaW1wbGVGb250RGF0YSog
bV9mb250RGF0YTsKKyAgICBjb25zdCBGb250KiBtX2ZvbnREYXRhOwogICAgIENHQWZmaW5lVHJh
bnNmb3JtIG1fdHJhbnNsYXRpb247CiB9OwogCkBAIC01MjQsNyArNTI0LDcgQEAgdm9pZCBNYWNH
bHlwaFRvUGF0aFRyYW5zbGF0b3I6OmFkdmFuY2UoKQogICAgICAgICArK21faW5kZXg7CiAgICAg
ICAgIGlmIChtX2luZGV4ID49IG1fZ2x5cGhCdWZmZXIuc2l6ZSgpKQogICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIG1fZm9udERhdGEgPSBtX2dseXBoQnVmZmVyLmZvbnREYXRhQXQobV9pbmRl
eCk7CisgICAgICAgIG1fZm9udERhdGEgPSBtX2dseXBoQnVmZmVyLmZvbnRBdChtX2luZGV4KTsK
ICAgICB9IHdoaWxlIChtX2ZvbnREYXRhLT5pc1NWR0ZvbnQoKSAmJiBtX2luZGV4IDwgbV9nbHlw
aEJ1ZmZlci5zaXplKCkpOwogfQogCkBAIC01NDUsNyArNTQ1LDcgQEAgRGFzaEFycmF5IEZvbnRD
YXNjYWRlOjpkYXNoZXNGb3JJbnRlcnNlYwogICAgICAgICByZXR1cm4gRGFzaEFycmF5KCk7CiAg
ICAgCiAgICAgLy8gRklYTUU6IEhhbmRsZSBTVkcgKyBub24tU1ZHIGludGVybGVhdmVkIHJ1bnMu
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzM3NzgKLSAgICBjb25z
dCBTaW1wbGVGb250RGF0YSogZm9udERhdGEgPSBnbHlwaEJ1ZmZlci5mb250RGF0YUF0KDApOwor
ICAgIGNvbnN0IEZvbnQqIGZvbnREYXRhID0gZ2x5cGhCdWZmZXIuZm9udEF0KDApOwogICAgIHN0
ZDo6dW5pcXVlX3B0cjxHbHlwaFRvUGF0aFRyYW5zbGF0b3I+IHRyYW5zbGF0b3I7CiAgICAgYm9v
bCBpc1NWRyA9IGZhbHNlOwogICAgIEZsb2F0UG9pbnQgb3JpZ2luID0gRmxvYXRQb2ludCh0ZXh0
T3JpZ2luLngoKSArIGRlbHRhWCwgdGV4dE9yaWdpbi55KCkpOwpAQCAtNTYxLDggKzU2MSw4IEBA
IERhc2hBcnJheSBGb250Q2FzY2FkZTo6ZGFzaGVzRm9ySW50ZXJzZWMKICAgICBEYXNoQXJyYXkg
cmVzdWx0OwogICAgIGZvciAoaW50IGluZGV4ID0gMDsgdHJhbnNsYXRvci0+Y29udGFpbnNNb3Jl
UGF0aHMoKTsgKytpbmRleCwgdHJhbnNsYXRvci0+YWR2YW5jZSgpKSB7CiAgICAgICAgIEdseXBo
SXRlcmF0aW9uU3RhdGUgaW5mbyA9IEdseXBoSXRlcmF0aW9uU3RhdGUoQ0dQb2ludE1ha2UoMCwg
MCksIENHUG9pbnRNYWtlKDAsIDApLCBsaW5lRXh0ZW50cy55KCksIGxpbmVFeHRlbnRzLnkoKSAr
IGxpbmVFeHRlbnRzLmhlaWdodCgpLCBsaW5lRXh0ZW50cy54KCkgKyBsaW5lRXh0ZW50cy53aWR0
aCgpLCBsaW5lRXh0ZW50cy54KCkpOwotICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogbG9j
YWxGb250RGF0YSA9IGdseXBoQnVmZmVyLmZvbnREYXRhQXQoaW5kZXgpOwotICAgICAgICBpZiAo
IWxvY2FsRm9udERhdGEgfHwgKCFpc1NWRyAmJiBsb2NhbEZvbnREYXRhLT5pc1NWR0ZvbnQoKSkg
fHwgKGlzU1ZHICYmIGxvY2FsRm9udERhdGEgIT0gZm9udERhdGEpKSB7CisgICAgICAgIGNvbnN0
IEZvbnQqIGxvY2FsRm9udCA9IGdseXBoQnVmZmVyLmZvbnRBdChpbmRleCk7CisgICAgICAgIGlm
ICghbG9jYWxGb250IHx8ICghaXNTVkcgJiYgbG9jYWxGb250LT5pc1NWR0ZvbnQoKSkgfHwgKGlz
U1ZHICYmIGxvY2FsRm9udCAhPSBmb250RGF0YSkpIHsKICAgICAgICAgICAgIC8vIFRoZSBhZHZh
bmNlcyB3aWxsIGdldCBhbGwgbWVzc2VkIHVwIGlmIHdlIGRvIGFueXRoaW5nIG90aGVyIHRoYW4g
YmFpbCBoZXJlLgogICAgICAgICAgICAgcmVzdWx0LmNsZWFyKCk7CiAgICAgICAgICAgICBicmVh
azsKQEAgLTU5MiwxMCArNTkyLDEwIEBAIERhc2hBcnJheSBGb250Q2FzY2FkZTo6ZGFzaGVzRm9y
SW50ZXJzZWMKIH0KICNlbmRpZgogCi1ib29sIEZvbnRDYXNjYWRlOjpwcmltYXJ5Rm9udERhdGFJ
c1N5c3RlbUZvbnQoKSBjb25zdAorYm9vbCBGb250Q2FzY2FkZTo6cHJpbWFyeUZvbnRJc1N5c3Rl
bUZvbnQoKSBjb25zdAogewogI2lmIFBMQVRGT1JNKElPUykgfHwgX19NQUNfT1NfWF9WRVJTSU9O
X01JTl9SRVFVSVJFRCA+IDEwOTAKLSAgICBjb25zdCBhdXRvJiBmb250RGF0YSA9IHByaW1hcnlG
b250RGF0YSgpOworICAgIGNvbnN0IGF1dG8mIGZvbnREYXRhID0gcHJpbWFyeUZvbnQoKTsKICAg
ICByZXR1cm4gIWZvbnREYXRhLmlzU1ZHRm9udCgpICYmIENURm9udERlc2NyaXB0b3JJc1N5c3Rl
bVVJRm9udChhZG9wdENGKENURm9udENvcHlGb250RGVzY3JpcHRvcihmb250RGF0YS5wbGF0Zm9y
bURhdGEoKS5jdEZvbnQoKSkpLmdldCgpKTsKICNlbHNlCiAgICAgLy8gU3lzdGVtIGZvbnRzIGFy
ZSBoaWRkZW4gYnkgaGF2aW5nIGEgbmFtZSB0aGF0IGJlZ2lucyB3aXRoIGEgcGVyaW9kLCBzbyBz
aW1wbHkgc2VhcmNoCkBAIC02NzEsNyArNjcxLDcgQEAgdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0Vt
cGhhc2lzTWFya3NGb3JDbwogICAgIGRyYXdFbXBoYXNpc01hcmtzKGNvbnRleHQsIHJ1biwgZ2x5
cGhCdWZmZXIsIG1hcmssIEZsb2F0UG9pbnQocG9pbnQueCgpICsgaW5pdGlhbEFkdmFuY2UsIHBv
aW50LnkoKSkpOwogfQogCi1mbG9hdCBGb250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZvckNvbXBsZXhU
ZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBm
YWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAorZmxvYXQg
Rm9udENhc2NhZGU6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4s
IEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlw
aE92ZXJmbG93KSBjb25zdAogewogICAgIENvbXBsZXhUZXh0Q29udHJvbGxlciBjb250cm9sbGVy
KHRoaXMsIHJ1biwgdHJ1ZSwgZmFsbGJhY2tGb250cyk7CiAgICAgaWYgKGdseXBoT3ZlcmZsb3cp
IHsKQEAgLTY4OSw3ICs2ODksNyBAQCBpbnQgRm9udENhc2NhZGU6Om9mZnNldEZvclBvc2l0aW9u
Rm9yQ29tCiAgICAgcmV0dXJuIGNvbnRyb2xsZXIub2Zmc2V0Rm9yUG9zaXRpb24oeCwgaW5jbHVk
ZVBhcnRpYWxHbHlwaHMpOwogfQogCi1jb25zdCBTaW1wbGVGb250RGF0YSogRm9udENhc2NhZGU6
OmZvbnREYXRhRm9yQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY29uc3QgVUNoYXIqIGNoYXJh
Y3RlcnMsIHNpemVfdCBsZW5ndGgsIEZvbnREYXRhVmFyaWFudCB2YXJpYW50KSBjb25zdAorY29u
c3QgRm9udCogRm9udENhc2NhZGU6OmZvbnRGb3JDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShj
b25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgRm9udFZhcmlhbnQgdmFyaWFu
dCkgY29uc3QKIHsKICAgICBVQ2hhcjMyIGJhc2VDaGFyYWN0ZXI7CiAgICAgc2l6ZV90IGJhc2VD
aGFyYWN0ZXJMZW5ndGggPSAwOwpAQCAtNzAxLDUxICs3MDEsNTEgQEAgY29uc3QgU2ltcGxlRm9u
dERhdGEqIEZvbnRDYXNjYWRlOjpmb250RAogICAgICAgICByZXR1cm4gMDsKIAogICAgIGlmIChs
ZW5ndGggPT0gYmFzZUNoYXJhY3Rlckxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGJhc2VDaGFyYWN0
ZXJHbHlwaERhdGEuZm9udERhdGE7CisgICAgICAgIHJldHVybiBiYXNlQ2hhcmFjdGVyR2x5cGhE
YXRhLmZvbnQ7CiAKLSAgICBib29sIHRyaWVkQmFzZUNoYXJhY3RlckZvbnREYXRhID0gZmFsc2U7
CisgICAgYm9vbCB0cmllZEJhc2VDaGFyYWN0ZXJGb250ID0gZmFsc2U7CiAKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyAhZmFsbGJhY2tSYW5nZXNBdChpKS5pc051bGwoKTsgKytpKSB7Ci0gICAg
ICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBzaW1wbGVGb250RGF0YSA9IGZhbGxiYWNrUmFuZ2Vz
QXQoaSkuZm9udERhdGFGb3JDaGFyYWN0ZXIoYmFzZUNoYXJhY3Rlcik7Ci0gICAgICAgIGlmICgh
c2ltcGxlRm9udERhdGEpCisgICAgICAgIGNvbnN0IEZvbnQqIGZvbnQgPSBmYWxsYmFja1Jhbmdl
c0F0KGkpLmZvbnRGb3JDaGFyYWN0ZXIoYmFzZUNoYXJhY3Rlcik7CisgICAgICAgIGlmICghZm9u
dCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogI2lmIFBMQVRGT1JNKElPUykKLSAgICAgICAgaWYg
KGJhc2VDaGFyYWN0ZXIgPj0gMHgwNjAwICYmIGJhc2VDaGFyYWN0ZXIgPD0gMHgwNmZmICYmIHNp
bXBsZUZvbnREYXRhLT5zaG91bGROb3RCZVVzZWRGb3JBcmFiaWMoKSkKKyAgICAgICAgaWYgKGJh
c2VDaGFyYWN0ZXIgPj0gMHgwNjAwICYmIGJhc2VDaGFyYWN0ZXIgPD0gMHgwNmZmICYmIGZvbnQt
PnNob3VsZE5vdEJlVXNlZEZvckFyYWJpYygpKQogICAgICAgICAgICAgY29udGludWU7CiAjZW5k
aWYKICAgICAgICAgaWYgKHZhcmlhbnQgPT0gTm9ybWFsVmFyaWFudCkgewotICAgICAgICAgICAg
aWYgKHNpbXBsZUZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IFZlcnRp
Y2FsKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woYmFzZUNo
YXJhY3RlcikgJiYgIXNpbXBsZUZvbnREYXRhLT5oYXNWZXJ0aWNhbEdseXBocygpKSB7CisgICAg
ICAgICAgICBpZiAoZm9udC0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNh
bCkgeworICAgICAgICAgICAgICAgIGlmIChpc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGJhc2VDaGFy
YWN0ZXIpICYmICFmb250LT5oYXNWZXJ0aWNhbEdseXBocygpKSB7CiAgICAgICAgICAgICAgICAg
ICAgIHZhcmlhbnQgPSBCcm9rZW5JZGVvZ3JhcGhWYXJpYW50OwotICAgICAgICAgICAgICAgICAg
ICBzaW1wbGVGb250RGF0YSA9IHNpbXBsZUZvbnREYXRhLT5icm9rZW5JZGVvZ3JhcGhGb250RGF0
YSgpLmdldCgpOworICAgICAgICAgICAgICAgICAgICBmb250ID0gZm9udC0+YnJva2VuSWRlb2dy
YXBoRm9udCgpLmdldCgpOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobV9mb250RGVzY3Jp
cHRpb24ubm9uQ0pLR2x5cGhPcmllbnRhdGlvbigpID09IE5vbkNKS0dseXBoT3JpZW50YXRpb25W
ZXJ0aWNhbFJpZ2h0KSB7Ci0gICAgICAgICAgICAgICAgICAgIFNpbXBsZUZvbnREYXRhKiB2ZXJ0
aWNhbFJpZ2h0Rm9udERhdGEgPSBzaW1wbGVGb250RGF0YS0+dmVydGljYWxSaWdodE9yaWVudGF0
aW9uRm9udERhdGEoKS5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgR2x5cGggdmVydGljYWxS
aWdodEdseXBoID0gdmVydGljYWxSaWdodEZvbnREYXRhLT5nbHlwaEZvckNoYXJhY3RlcihiYXNl
Q2hhcmFjdGVyKTsKKyAgICAgICAgICAgICAgICAgICAgRm9udCogdmVydGljYWxSaWdodEZvbnQg
PSBmb250LT52ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250KCkuZ2V0KCk7CisgICAgICAgICAg
ICAgICAgICAgIEdseXBoIHZlcnRpY2FsUmlnaHRHbHlwaCA9IHZlcnRpY2FsUmlnaHRGb250LT5n
bHlwaEZvckNoYXJhY3RlcihiYXNlQ2hhcmFjdGVyKTsKICAgICAgICAgICAgICAgICAgICAgaWYg
KHZlcnRpY2FsUmlnaHRHbHlwaCA9PSBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmdseXBoKQotICAg
ICAgICAgICAgICAgICAgICAgICAgc2ltcGxlRm9udERhdGEgPSB2ZXJ0aWNhbFJpZ2h0Rm9udERh
dGE7CisgICAgICAgICAgICAgICAgICAgICAgICBmb250ID0gdmVydGljYWxSaWdodEZvbnQ7CiAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgU2ltcGxlRm9udERh
dGEqIHVwcmlnaHRGb250RGF0YSA9IHNpbXBsZUZvbnREYXRhLT51cHJpZ2h0T3JpZW50YXRpb25G
b250RGF0YSgpLmdldCgpOwotICAgICAgICAgICAgICAgICAgICBHbHlwaCB1cHJpZ2h0R2x5cGgg
PSB1cHJpZ2h0Rm9udERhdGEtPmdseXBoRm9yQ2hhcmFjdGVyKGJhc2VDaGFyYWN0ZXIpOworICAg
ICAgICAgICAgICAgICAgICBGb250KiB1cHJpZ2h0Rm9udCA9IGZvbnQtPnVwcmlnaHRPcmllbnRh
dGlvbkZvbnQoKS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgR2x5cGggdXByaWdodEdseXBo
ID0gdXByaWdodEZvbnQtPmdseXBoRm9yQ2hhcmFjdGVyKGJhc2VDaGFyYWN0ZXIpOwogICAgICAg
ICAgICAgICAgICAgICBpZiAodXByaWdodEdseXBoICE9IGJhc2VDaGFyYWN0ZXJHbHlwaERhdGEu
Z2x5cGgpCi0gICAgICAgICAgICAgICAgICAgICAgICBzaW1wbGVGb250RGF0YSA9IHVwcmlnaHRG
b250RGF0YTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQgPSB1cHJpZ2h0Rm9udDsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBpZiAoY29uc3QgU2ltcGxlRm9udERhdGEqIHZhcmlhbnRGb250RGF0YSA9IHNpbXBsZUZv
bnREYXRhLT52YXJpYW50Rm9udERhdGEobV9mb250RGVzY3JpcHRpb24sIHZhcmlhbnQpLmdldCgp
KQotICAgICAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gdmFyaWFudEZvbnREYXRhOworICAg
ICAgICAgICAgaWYgKGNvbnN0IEZvbnQqIHZhcmlhbnRGb250ID0gZm9udC0+dmFyaWFudEZvbnQo
bV9mb250RGVzY3JpcHRpb24sIHZhcmlhbnQpLmdldCgpKQorICAgICAgICAgICAgICAgIGZvbnQg
PSB2YXJpYW50Rm9udDsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChzaW1wbGVGb250RGF0YSA9
PSBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmZvbnREYXRhKQotICAgICAgICAgICAgdHJpZWRCYXNl
Q2hhcmFjdGVyRm9udERhdGEgPSB0cnVlOworICAgICAgICBpZiAoZm9udCA9PSBiYXNlQ2hhcmFj
dGVyR2x5cGhEYXRhLmZvbnQpCisgICAgICAgICAgICB0cmllZEJhc2VDaGFyYWN0ZXJGb250ID0g
dHJ1ZTsKIAotICAgICAgICBpZiAoc2ltcGxlRm9udERhdGEtPmNhblJlbmRlckNvbWJpbmluZ0No
YXJhY3RlclNlcXVlbmNlKGNoYXJhY3RlcnMsIGxlbmd0aCkpCi0gICAgICAgICAgICByZXR1cm4g
c2ltcGxlRm9udERhdGE7CisgICAgICAgIGlmIChmb250LT5jYW5SZW5kZXJDb21iaW5pbmdDaGFy
YWN0ZXJTZXF1ZW5jZShjaGFyYWN0ZXJzLCBsZW5ndGgpKQorICAgICAgICAgICAgcmV0dXJuIGZv
bnQ7CiAgICAgfQogCi0gICAgaWYgKCF0cmllZEJhc2VDaGFyYWN0ZXJGb250RGF0YSAmJiBiYXNl
Q2hhcmFjdGVyR2x5cGhEYXRhLmZvbnREYXRhICYmIGJhc2VDaGFyYWN0ZXJHbHlwaERhdGEuZm9u
dERhdGEtPmNhblJlbmRlckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNoYXJhY3RlcnMsIGxl
bmd0aCkpCi0gICAgICAgIHJldHVybiBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmZvbnREYXRhOwor
ICAgIGlmICghdHJpZWRCYXNlQ2hhcmFjdGVyRm9udCAmJiBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRh
LmZvbnQgJiYgYmFzZUNoYXJhY3RlckdseXBoRGF0YS5mb250LT5jYW5SZW5kZXJDb21iaW5pbmdD
aGFyYWN0ZXJTZXF1ZW5jZShjaGFyYWN0ZXJzLCBsZW5ndGgpKQorICAgICAgICByZXR1cm4gYmFz
ZUNoYXJhY3RlckdseXBoRGF0YS5mb250OwogCi0gICAgcmV0dXJuIFNpbXBsZUZvbnREYXRhOjpz
eXN0ZW1GYWxsYmFjaygpOworICAgIHJldHVybiBGb250OjpzeXN0ZW1GYWxsYmFjaygpOwogfQog
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvRm9udENhY2hl
SU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lv
cy9Gb250Q2FjaGVJT1MubW0JKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2lvcy9Gb250Q2FjaGVJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTcz
LDcgKzczLDcgQEAgc3RhdGljIENGQ2hhcmFjdGVyU2V0UmVmIHBob25lRmFsbGJhY2tDaAogICAg
IHJldHVybiBjaGFyYWN0ZXJTZXQ7CiB9CiAKLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZv
bnRDYWNoZTo6Z2V0U3lzdGVtRm9udEZhbGxiYWNrRm9yQ2hhcmFjdGVycyhjb25zdCBGb250RGVz
Y3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBTaW1wbGVGb250RGF0YSogb3JpZ2luYWxGb250
RGF0YSwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCitQYXNzUmVmUHRyPEZv
bnQ+IEZvbnRDYWNoZTo6Z2V0U3lzdGVtRm9udEZhbGxiYWNrRm9yQ2hhcmFjdGVycyhjb25zdCBG
b250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBGb250KiBvcmlnaW5hbEZvbnREYXRh
LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKIHsKICAgICBjb25zdCBGb250
UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEgPSBvcmlnaW5hbEZvbnREYXRhLT5wbGF0Zm9ybURh
dGEoKTsKICAgICBDVEZvbnRSZWYgY3RGb250ID0gcGxhdGZvcm1EYXRhLmZvbnQoKTsKQEAgLTE5
NCw3ICsxOTQsNyBAQCBzdGF0aWMgTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQgbGFuZ3VhZ2VTcGVjCiAg
ICAgcmV0dXJuIExhbmd1YWdlU3BlY2lmaWNGb250OjpOb25lOwogfQogCi1SZWZQdHI8U2ltcGxl
Rm9udERhdGE+IEZvbnRDYWNoZTo6c3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBvcmlnaW5h
bEZvbnREYXRhLCBib29sLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKK1Jl
ZlB0cjxGb250PiBGb250Q2FjaGU6OnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhjb25zdCBG
b250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBGb250KiBvcmlnaW5hbEZvbnREYXRh
LCBib29sLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKIHsKICAgICAvLyBV
bmxpa2UgT1MgWCwgb3VyIGZhbGxiYWNrIGZvbnQgb24gaVBob25lIGlzIEFyaWFsIFVuaWNvZGUs
IHdoaWNoIGRvZXNuJ3QgaGF2ZSBzb21lIGFwcGxlLXNwZWNpZmljIGdseXBocyBsaWtlIEY4RkYu
CiAgICAgLy8gRmFsbCBiYWNrIHRvIHRoZSBBcHBsZSBGYWxsYmFjayBmb250IGluIHRoaXMgY2Fz
ZS4KQEAgLTIyMCw3ICsyMjAsNyBAQCBSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6
c3lzdGVtCiAgICAgaWYgKGxlbmd0aCA+IDApCiAgICAgICAgIGxhbmd1YWdlU3BlY2lmaWNGb250
ID0gbGFuZ3VhZ2VTcGVjaWZpY0ZhbGxiYWNrRm9udChjKTsKIAotICAgIFJlZlB0cjxTaW1wbGVG
b250RGF0YT4gc2ltcGxlRm9udERhdGE7CisgICAgUmVmUHRyPEZvbnQ+IGZvbnQ7CiAKICAgICBz
d2l0Y2ggKGxhbmd1YWdlU3BlY2lmaWNGb250KSB7CiAgICAgY2FzZSBMYW5ndWFnZVNwZWNpZmlj
Rm9udDo6Q2hpbmVzZUphcGFuZXNlOiB7CkBAIC0yOTgsNDMgKzI5OCw0MyBAQCBSZWZQdHI8U2lt
cGxlRm9udERhdGE+IEZvbnRDYWNoZTo6c3lzdGVtCiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
IAotICAgICAgICBzaW1wbGVGb250RGF0YSA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGlz
Rm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gKmNqa0JvbGRbcHJlZmVycmVk
Q0pLRm9udF0gOiAqY2prUGxhaW5bcHJlZmVycmVkQ0pLRm9udF0sIGZhbHNlKTsKKyAgICAgICAg
Zm9udCA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3Jp
cHRpb24ud2VpZ2h0KCkpID8gKmNqa0JvbGRbcHJlZmVycmVkQ0pLRm9udF0gOiAqY2prUGxhaW5b
cHJlZmVycmVkQ0pLRm9udF0sIGZhbHNlKTsKICAgICAgICAgYm9vbCB1c2VTZWNvbmRhcnlGb250
ID0gdHJ1ZTsKLSAgICAgICAgaWYgKHNpbXBsZUZvbnREYXRhKSB7CisgICAgICAgIGlmIChmb250
KSB7CiAgICAgICAgICAgICBDR0dseXBoIGdseXBoc1syXTsKICAgICAgICAgICAgIC8vIENHRm9u
dEdldEdseXBoc0ZvclVuaWNoYXJzIHRha2VzIFVURi0xNiBidWZmZXIuIFNob3VsZCBvbmx5IGJl
IDEgY29kZXBvaW50IGJ1dCBzaW5jZSB3ZSBtYXkgcGFzcyBpbiB0d28gVVRGLTE2IGNoYXJhY3Rl
cnMsCiAgICAgICAgICAgICAvLyBtYWtlIHJvb20gZm9yIDIgZ2x5cGhzIGp1c3QgdG8gYmUgc2Fm
ZS4KLSAgICAgICAgICAgIENHRm9udEdldEdseXBoc0ZvclVuaWNoYXJzKHNpbXBsZUZvbnREYXRh
LT5wbGF0Zm9ybURhdGEoKS5jZ0ZvbnQoKSwgY2hhcmFjdGVycywgZ2x5cGhzLCBsZW5ndGgpOwor
ICAgICAgICAgICAgQ0dGb250R2V0R2x5cGhzRm9yVW5pY2hhcnMoZm9udC0+cGxhdGZvcm1EYXRh
KCkuY2dGb250KCksIGNoYXJhY3RlcnMsIGdseXBocywgbGVuZ3RoKTsKIAogICAgICAgICAgICAg
dXNlU2Vjb25kYXJ5Rm9udCA9IChnbHlwaHNbMF0gPT0gMCk7CiAgICAgICAgIH0KIAogICAgICAg
ICBpZiAodXNlU2Vjb25kYXJ5Rm9udCkKLSAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gZm9u
dEZvckZhbWlseShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWln
aHQoKSkgPyAqY2prQm9sZFtzZWNvbmRhcnlDSktGb250XSA6ICpjamtQbGFpbltzZWNvbmRhcnlD
SktGb250XSwgZmFsc2UpOworICAgICAgICAgICAgZm9udCA9IGZvbnRGb3JGYW1pbHkoZGVzY3Jp
cHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gKmNqa0JvbGRb
c2Vjb25kYXJ5Q0pLRm9udF0gOiAqY2prUGxhaW5bc2Vjb25kYXJ5Q0pLRm9udF0sIGZhbHNlKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6Oktv
cmVhbjogewogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBrb3Jl
YW5QbGFpbigiQXBwbGVTREdvdGhpY05lby1NZWRpdW0iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKTsKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmlu
Zz4ga29yZWFuQm9sZCgiQXBwbGVTREdvdGhpY05lby1Cb2xkIiwgQXRvbWljU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgICAgIHNpbXBsZUZvbnREYXRhID0gZm9udEZvckZhbWls
eShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBr
b3JlYW5Cb2xkIDoga29yZWFuUGxhaW4sIGZhbHNlKTsKKyAgICAgICAgZm9udCA9IGZvbnRGb3JG
YW1pbHkoZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkp
ID8ga29yZWFuQm9sZCA6IGtvcmVhblBsYWluLCBmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KICAgICBjYXNlIExhbmd1YWdlU3BlY2lmaWNGb250OjpDeXJpbGxpYzogewogICAgICAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBjeXJpbGxpY1BsYWluKCJIZWx2ZXRp
Y2FOZXVlIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CiAgICAgICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGN5cmlsbGljQm9sZCgiSGVsdmV0aWNh
TmV1ZS1Cb2xkIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgICAg
IHNpbXBsZUZvbnREYXRhID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0
Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBjeXJpbGxpY0JvbGQgOiBjeXJpbGxpY1BsYWlu
LCBmYWxzZSk7CisgICAgICAgIGZvbnQgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBpc0Zv
bnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/IGN5cmlsbGljQm9sZCA6IGN5cmls
bGljUGxhaW4sIGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgTGFuZ3Vh
Z2VTcGVjaWZpY0ZvbnQ6OkFyYWJpYzogewogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
QXRvbWljU3RyaW5nPiBhcmFiaWNQbGFpbigiR2VlemFQcm8iLCBBdG9taWNTdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKTsKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0
cmluZz4gYXJhYmljQm9sZCgiR2VlemFQcm8tQm9sZCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpOwotICAgICAgICBzaW1wbGVGb250RGF0YSA9IGZvbnRGb3JGYW1pbHkoZGVz
Y3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gYXJhYmlj
Qm9sZCA6IGFyYWJpY1BsYWluLCBmYWxzZSk7CisgICAgICAgIGZvbnQgPSBmb250Rm9yRmFtaWx5
KGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/IGFy
YWJpY0JvbGQgOiBhcmFiaWNQbGFpbiwgZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgY2FzZSBMYW5ndWFnZVNwZWNpZmljRm9udDo6SGVicmV3OiB7CiAgICAgICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGhlYnJld1BsYWluKCJBcmlhbEhlYnJldyIsIEF0
b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwogICAgICAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBoZWJyZXdCb2xkKCJBcmlhbEhlYnJldy1Cb2xkIiwgQXRv
bWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgICAgIHNpbXBsZUZvbnREYXRh
ID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlv
bi53ZWlnaHQoKSkgPyBoZWJyZXdCb2xkIDogaGVicmV3UGxhaW4sIGZhbHNlKTsKKyAgICAgICAg
Zm9udCA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3Jp
cHRpb24ud2VpZ2h0KCkpID8gaGVicmV3Qm9sZCA6IGhlYnJld1BsYWluLCBmYWxzZSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIExhbmd1YWdlU3BlY2lmaWNGb250OjpJbmRpYzog
ewpAQCAtMzkwLDM2ICszOTAsMzYgQEAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6
OnN5c3RlbQogICAgICAgICBpZiAoaW5kaWNQYWdlT3JkZXJJbmRleCA8IChzaXplb2YoaW5kaWNV
bmljb2RlUGFnZUZvbnRzKSAvIHNpemVvZihBdG9taWNTdHJpbmcqKSkpIHsKICAgICAgICAgICAg
IEF0b21pY1N0cmluZyogaW5kaWNGb250U3RyaW5nID0gaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlw
dGlvbi53ZWlnaHQoKSkgPyBpbmRpY1VuaWNvZGVQYWdlRm9udHNCb2xkW2luZGljUGFnZU9yZGVy
SW5kZXhdIDogaW5kaWNVbmljb2RlUGFnZUZvbnRzW2luZGljUGFnZU9yZGVySW5kZXhdOwogICAg
ICAgICAgICAgaWYgKGluZGljRm9udFN0cmluZykKLSAgICAgICAgICAgICAgICBzaW1wbGVGb250
RGF0YSA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sICppbmRpY0ZvbnRTdHJpbmcsIGZhbHNl
KTsKKyAgICAgICAgICAgICAgICBmb250ID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgKmlu
ZGljRm9udFN0cmluZywgZmFsc2UpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0K
ICAgICBjYXNlIExhbmd1YWdlU3BlY2lmaWNGb250OjpUaGFpOiB7CiAgICAgICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHRoYWlQbGFpbigiVGhvbmJ1cmkiLCBBdG9taWNT
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPEF0b21pY1N0cmluZz4gdGhhaUJvbGQoIlRob25idXJpLUJvbGQiLCBBdG9taWNTdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAgc2ltcGxlRm9udERhdGEgPSBmb250Rm9y
RmFtaWx5KGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgp
KSA/IHRoYWlCb2xkIDogdGhhaVBsYWluLCBmYWxzZSk7CisgICAgICAgIGZvbnQgPSBmb250Rm9y
RmFtaWx5KGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgp
KSA/IHRoYWlCb2xkIDogdGhhaVBsYWluLCBmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
ICAgICBjYXNlIExhbmd1YWdlU3BlY2lmaWNGb250OjpUaWJldGFuOiB7CiAgICAgICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHRpYmV0YW5QbGFpbigiS2FpbGFzYSIsIEF0
b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwogICAgICAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiB0aWJldGFuQm9sZCgiS2FpbGFzYS1Cb2xkIiwgQXRvbWlj
U3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgICAgIHNpbXBsZUZvbnREYXRhID0g
Zm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53
ZWlnaHQoKSkgPyB0aWJldGFuQm9sZCA6IHRpYmV0YW5QbGFpbiwgZmFsc2UpOworICAgICAgICBm
b250ID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlw
dGlvbi53ZWlnaHQoKSkgPyB0aWJldGFuQm9sZCA6IHRpYmV0YW5QbGFpbiwgZmFsc2UpOwogICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBMYW5ndWFnZVNwZWNpZmljRm9udDo6Q2FuYWRp
YW5BYm9yaWdpbmFsU3lsbGFiaWM6IHsKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0
b21pY1N0cmluZz4gY2FzUGxhaW4oIkV1cGhlbWlhVUNBUyIsIEF0b21pY1N0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpOwogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3Ry
aW5nPiBjYXNCb2xkKCJFdXBoZW1pYVVDQVMtQm9sZCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpOwotICAgICAgICBzaW1wbGVGb250RGF0YSA9IGZvbnRGb3JGYW1pbHkoZGVz
Y3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gY2FzQm9s
ZCA6IGNhc1BsYWluLCBmYWxzZSk7CisgICAgICAgIGZvbnQgPSBmb250Rm9yRmFtaWx5KGRlc2Ny
aXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/IGNhc0JvbGQg
OiBjYXNQbGFpbiwgZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBMYW5n
dWFnZVNwZWNpZmljRm9udDo6S2htZXI6IHsKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PEF0b21pY1N0cmluZz4ga2htZXIoIktobWVyU2FuZ2FtTU4iLCBBdG9taWNTdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAgc2ltcGxlRm9udERhdGEgPSBmb250Rm9yRmFtaWx5
KGRlc2NyaXB0aW9uLCBraG1lciwgZmFsc2UpOworICAgICAgICBmb250ID0gZm9udEZvckZhbWls
eShkZXNjcmlwdGlvbiwga2htZXIsIGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
IGNhc2UgTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6OkxhbzogewogICAgICAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBsYW8oIkxhb1NhbmdhbU1OIiwgQXRvbWljU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgICAgIHNpbXBsZUZvbnREYXRhID0gZm9udEZvckZh
bWlseShkZXNjcmlwdGlvbiwgbGFvLCBmYWxzZSk7CisgICAgICAgIGZvbnQgPSBmb250Rm9yRmFt
aWx5KGRlc2NyaXB0aW9uLCBsYW8sIGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
IGRlZmF1bHQ6IHsKQEAgLTQzMCwyNyArNDMwLDI3IEBAIFJlZlB0cjxTaW1wbGVGb250RGF0YT4g
Rm9udENhY2hlOjpzeXN0ZW0KICAgICAgICAgICAgICAgICB1c2VFbW9qaUZvbnQgPSBDRkNoYXJh
Y3RlclNldElzTG9uZ0NoYXJhY3Rlck1lbWJlcihhcHBsZUNvbG9yRW1vamlDaGFyYWN0ZXJTZXQo
KSwgYyk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHVzZUVtb2ppRm9udCkKLSAgICAgICAgICAg
IHNpbXBsZUZvbnREYXRhID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgYXBwbGVDb2xvckVt
b2ppLCBmYWxzZSk7CisgICAgICAgICAgICBmb250ID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlv
biwgYXBwbGVDb2xvckVtb2ppLCBmYWxzZSk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAg
UmV0YWluUHRyPENURm9udFJlZj4gZmFsbGJhY2tGb250ID0gYWRvcHRDRihDVEZvbnRDcmVhdGVG
b3JDaGFyYWN0ZXJzKG9yaWdpbmFsRm9udERhdGEtPmdldENURm9udCgpLCBjaGFyYWN0ZXJzLCBs
ZW5ndGgsIG51bGxwdHIpKTsKICAgICAgICAgICAgIGlmIChSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+
IGZvdW5kRm9udE5hbWUgPSBhZG9wdENGKENURm9udENvcHlQb3N0U2NyaXB0TmFtZShmYWxsYmFj
a0ZvbnQuZ2V0KCkpKSkKLSAgICAgICAgICAgICAgICBzaW1wbGVGb250RGF0YSA9IGZvbnRGb3JG
YW1pbHkoZGVzY3JpcHRpb24sIGZvdW5kRm9udE5hbWUuZ2V0KCksIGZhbHNlKTsKKyAgICAgICAg
ICAgICAgICBmb250ID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgZm91bmRGb250TmFtZS5n
ZXQoKSwgZmFsc2UpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICB9CiAK
LSAgICBpZiAoc2ltcGxlRm9udERhdGEpCi0gICAgICAgIHJldHVybiBzaW1wbGVGb250RGF0YS5y
ZWxlYXNlKCk7CisgICAgaWYgKGZvbnQpCisgICAgICAgIHJldHVybiBmb250LnJlbGVhc2UoKTsK
IAogICAgIHJldHVybiBsYXN0UmVzb3J0RmFsbGJhY2tGb250KGRlc2NyaXB0aW9uKTsKIH0KIAot
UmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OnNpbWlsYXJGb250UGxhdGZvcm1EYXRh
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCitSZWZQdHI8Rm9udD4gRm9udENh
Y2hlOjpzaW1pbGFyRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQogewog
ICAgIC8vIEF0dGVtcHQgdG8gZmluZCBhbiBhcHByb3ByaWF0ZSBmb250IHVzaW5nIGEgbWF0Y2gg
YmFzZWQgb24gdGhlIHByZXNlbmNlIG9mIGtleXdvcmRzIGluCiAgICAgLy8gdGhlIHJlcXVlc3Rl
ZCBuYW1lcy4gRm9yIGV4YW1wbGUsIHdlJ2xsIG1hdGNoIGFueSBuYW1lIHRoYXQgY29udGFpbnMg
IkFyYWJpYyIgdG8gR2VlemEgUHJvLgotICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gc2ltcGxl
Rm9udERhdGE7CisgICAgUmVmUHRyPEZvbnQ+IGZvbnQ7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGRlc2NyaXB0aW9uLmZhbWlseUNvdW50KCk7ICsraSkgewogICAgICAgICBjb25zdCBB
dG9taWNTdHJpbmcmIGZhbWlseSA9IGRlc2NyaXB0aW9uLmZhbWlseUF0KGkpOwogICAgICAgICBp
ZiAoZmFtaWx5LmlzRW1wdHkoKSkKQEAgLTQ2MSw3ICs0NjEsNyBAQCBSZWZQdHI8U2ltcGxlRm9u
dERhdGE+IEZvbnRDYWNoZTo6c2ltaWxhCiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxB
dG9taWNTdHJpbmc+IG1lbmxvKCJtZW5sbyIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpOwogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBjb3Vy
aWVyKCJjb3VyaWVyIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CiAgICAg
ICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShmYW1pbHksIG1vbmFjbykgfHwgZXF1YWxJZ25vcmlu
Z0Nhc2UoZmFtaWx5LCBtZW5sbykpIHsKLSAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gZm9u
dEZvckZhbWlseShkZXNjcmlwdGlvbiwgY291cmllcik7CisgICAgICAgICAgICBmb250ID0gZm9u
dEZvckZhbWlseShkZXNjcmlwdGlvbiwgY291cmllcik7CiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgfQogCkBAIC00NjksNyArNDY5LDcgQEAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBG
b250Q2FjaGU6OnNpbWlsYQogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3Ry
aW5nPiBsdWNpZGFHcmFuZGUoImx1Y2lkYSBncmFuZGUiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKTsKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmlu
Zz4gdmVyZGFuYSgidmVyZGFuYSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwp
OwogICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZmFtaWx5LCBsdWNpZGFHcmFuZGUpKSB7
Ci0gICAgICAgICAgICBzaW1wbGVGb250RGF0YSA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24s
IHZlcmRhbmEpOworICAgICAgICAgICAgZm9udCA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24s
IHZlcmRhbmEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIApAQCAtNDc5LDE1
ICs0NzksMTYgQEAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OnNpbWlsYQogICAg
ICAgICBzdGF0aWMgU3RyaW5nKiBtYXRjaFdvcmRzWzNdID0geyAmYXJhYmljLmdldCgpLCAmcGFz
aHRvLmdldCgpLCAmdXJkdS5nZXQoKSB9OwogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
QXRvbWljU3RyaW5nPiBnZWV6YVBsYWluKCJHZWV6YVBybyIsIEF0b21pY1N0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpOwogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3Ry
aW5nPiBnZWV6YUJvbGQoIkdlZXphUHJvLUJvbGQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZy
b21MaXRlcmFsKTsKLSAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCAzICYmICFzaW1wbGVGb250
RGF0YTsgKytqKQorICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDMgJiYgIWZvbnQ7ICsraikg
ewogICAgICAgICAgICAgaWYgKGZhbWlseS5jb250YWlucygqbWF0Y2hXb3Jkc1tqXSwgZmFsc2Up
KQotICAgICAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gZm9udEZvckZhbWlseShkZXNjcmlw
dGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBnZWV6YUJvbGQg
OiBnZWV6YVBsYWluKTsKKyAgICAgICAgICAgICAgICBmb250ID0gZm9udEZvckZhbWlseShkZXNj
cmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBnZWV6YUJv
bGQgOiBnZWV6YVBsYWluKTsKKyAgICAgICAgfQogICAgIH0KIAotICAgIHJldHVybiBzaW1wbGVG
b250RGF0YS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIGZvbnQucmVsZWFzZSgpOwogfQogCi1SZWY8
U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6bGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBG
b250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikKK1JlZjxGb250PiBGb250Q2FjaGU6Omxh
c3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24pCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gZmFsbGJhY2tG
b250RmFtaWx5KCIuUGhvbmVGYWxsYmFjayIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpOwogICAgIHJldHVybiAqZm9udEZvckZhbWlseShmb250RGVzY3JpcHRpb24sIGZhbGxi
YWNrRm9udEZhbWlseSwgZmFsc2UpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvaW9zL1NpbXBsZUZvbnREYXRhSU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9TaW1wbGVGb250RGF0YUlPUy5tbQkocmV2aXNpb24g
MTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL1NpbXBsZUZv
bnREYXRhSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiAgKi8KIAogI2lt
cG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJTaW1wbGVGb250RGF0YS5oIgorI2ltcG9ydCAiRm9u
dC5oIgogCiAjaW1wb3J0ICJCbG9ja0V4Y2VwdGlvbnMuaCIKICNpbXBvcnQgIkNvcmVHcmFwaGlj
c1NQSS5oIgpAQCAtNjcsNyArNjcsNyBAQCBzdGF0aWMgYm9vbCBmb250SGFzVmVydGljYWxHbHlw
aHMoQ1RGb250CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFNpbXBsZUZvbnREYXRhOjpw
bGF0Zm9ybUluaXQoKQordm9pZCBGb250OjpwbGF0Zm9ybUluaXQoKQogewogICAgIG1fc3ludGhl
dGljQm9sZE9mZnNldCA9IG1fcGxhdGZvcm1EYXRhLm1fc3ludGhldGljQm9sZCA/IGNlaWxmKG1f
cGxhdGZvcm1EYXRhLnNpemUoKSAgLyAyNC4wZikgOiAwLmY7CiAgICAgbV9zcGFjZUdseXBoID0g
MDsKQEAgLTEyOCw3ICsxMjgsNyBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUluaXQo
KQogICAgIG1fZm9udE1ldHJpY3Muc2V0TGluZVNwYWNpbmcoMCk7CiB9CiAKLXZvaWQgU2ltcGxl
Rm9udERhdGE6OnBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpCit2b2lkIEZvbnQ6OnBsYXRmb3JtQ2hh
cldpZHRoSW5pdCgpCiB7CiAgICAgbV9hdmdDaGFyV2lkdGggPSAwOwogICAgIG1fbWF4Q2hhcldp
ZHRoID0gMDsKQEAgLTEzNywxMiArMTM3LDEyIEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRm
b3JtQ2hhcldpZHRoSW4KICAgICBpbml0Q2hhcldpZHRocygpOwogfQogCi1QYXNzUmVmUHRyPFNp
bXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1DcmVhdGVTY2FsZWRGb250RGF0
YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3QKK1Bhc3NS
ZWZQdHI8Rm9udD4gRm9udDo6cGxhdGZvcm1DcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGb250
RGVzY3JpcHRpb24mLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3QKIHsKICAgICBpZiAoaXNDdXN0
b21Gb250KCkpIHsKICAgICAgICAgRm9udFBsYXRmb3JtRGF0YSBzY2FsZWRGb250RGF0YShtX3Bs
YXRmb3JtRGF0YSk7CiAgICAgICAgIHNjYWxlZEZvbnREYXRhLm1fc2l6ZSA9IHNjYWxlZEZvbnRE
YXRhLm1fc2l6ZSAqIHNjYWxlRmFjdG9yOwotICAgICAgICByZXR1cm4gU2ltcGxlRm9udERhdGE6
OmNyZWF0ZShzY2FsZWRGb250RGF0YSwgdHJ1ZSwgZmFsc2UpOworICAgICAgICByZXR1cm4gRm9u
dDo6Y3JlYXRlKHNjYWxlZEZvbnREYXRhLCB0cnVlLCBmYWxzZSk7CiAgICAgfQogCiAgICAgZmxv
YXQgc2l6ZSA9IG1fcGxhdGZvcm1EYXRhLnNpemUoKSAqIHNjYWxlRmFjdG9yOwpAQCAtMTY3LDcg
KzE2Nyw3IEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXQKICAgICBy
ZXR1cm4gbnVsbHB0cjsKIH0KIAotdm9pZCBTaW1wbGVGb250RGF0YTo6ZGV0ZXJtaW5lUGl0Y2go
KQordm9pZCBGb250OjpkZXRlcm1pbmVQaXRjaCgpCiB7CiAgICAgQ1RGb250UmVmIGN0Rm9udCA9
IG1fcGxhdGZvcm1EYXRhLmZvbnQoKTsKICAgICBtX3RyZWF0QXNGaXhlZFBpdGNoID0gZmFsc2U7
CkBAIC0xODQsMTIgKzE4NCwxMiBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpkZXRlcm1pbmVQaXRj
aCgpCiAgICAgfQogfQogCi1DR0ZvbnRSZW5kZXJpbmdTdHlsZSBTaW1wbGVGb250RGF0YTo6cmVu
ZGVyaW5nU3R5bGUoKSBjb25zdAorQ0dGb250UmVuZGVyaW5nU3R5bGUgRm9udDo6cmVuZGVyaW5n
U3R5bGUoKSBjb25zdAogewogICAgIHJldHVybiBrQ0dGb250UmVuZGVyaW5nU3R5bGVBbnRpYWxp
YXNpbmcgfCBrQ0dGb250UmVuZGVyaW5nU3R5bGVTdWJwaXhlbFBvc2l0aW9uaW5nIHwga0NHRm9u
dFJlbmRlcmluZ1N0eWxlU3VicGl4ZWxRdWFudGl6YXRpb24gfCBrQ0dGb250QW50aWFsaWFzaW5n
U3R5bGVVbmZpbHRlcmVkOwogfQogCi1ib29sIFNpbXBsZUZvbnREYXRhOjphZHZhbmNlRm9yQ29s
b3JCaXRtYXBGb250KEdseXBoLCBDR1NpemUmKSBjb25zdAorYm9vbCBGb250OjphZHZhbmNlRm9y
Q29sb3JCaXRtYXBGb250KEdseXBoLCBDR1NpemUmKSBjb25zdAogewogICAgIHJldHVybiBmYWxz
ZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4
VGV4dENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxNzg4NTcp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250
cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBwdWJsaWM6CiAgICAg
ewogICAgIH0KIAotICAgIGZsb2F0IHdpZHRoKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbiwg
SGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzKQorICAgIGZsb2F0
IHdpZHRoKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgSGFzaFNldDxjb25zdCBGb250Kj4q
IGZhbGxiYWNrRm9udHMpCiAgICAgewogICAgICAgICBtX2NvbnRyb2xsZXItPmFkdmFuY2UoZnJv
bSwgMCwgQnlXaG9sZUdseXBocywgZmFsbGJhY2tGb250cyk7CiAgICAgICAgIGZsb2F0IGJlZm9y
ZVdpZHRoID0gbV9jb250cm9sbGVyLT5ydW5XaWR0aFNvRmFyKCk7CkBAIC05Niw3ICs5Niw3IEBA
IHZvaWQgRm9udENhc2NhZGU6OmRlbGV0ZUxheW91dChUZXh0TGF5b3UKICAgICBkZWxldGUgbGF5
b3V0OwogfQogCi1mbG9hdCBGb250Q2FzY2FkZTo6d2lkdGgoVGV4dExheW91dCYgbGF5b3V0LCB1
bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEq
PiogZmFsbGJhY2tGb250cykKK2Zsb2F0IEZvbnRDYXNjYWRlOjp3aWR0aChUZXh0TGF5b3V0JiBs
YXlvdXQsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgSGFzaFNldDxjb25zdCBGb250Kj4q
IGZhbGxiYWNrRm9udHMpCiB7CiAgICAgcmV0dXJuIGxheW91dC53aWR0aChmcm9tLCBsZW4sIGZh
bGxiYWNrRm9udHMpOwogfQpAQCAtMTE1LDcgKzExNSw3IEBAIHN0YXRpYyBpbmxpbmUgQ0dGbG9h
dCBjZWlsQ0dGbG9hdChDR0Zsb2EKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q0dGbG9hdD4oY2Vp
bChmKSk7CiB9CiAKLUNvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRDb250cm9sbGVy
KGNvbnN0IEZvbnRDYXNjYWRlKiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGJvb2wgbWF5VXNl
TmF0dXJhbFdyaXRpbmdEaXJlY3Rpb24sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiog
ZmFsbGJhY2tGb250cywgYm9vbCBmb3JUZXh0RW1waGFzaXMpCitDb21wbGV4VGV4dENvbnRyb2xs
ZXI6OkNvbXBsZXhUZXh0Q29udHJvbGxlcihjb25zdCBGb250Q2FzY2FkZSogZm9udCwgY29uc3Qg
VGV4dFJ1biYgcnVuLCBib29sIG1heVVzZU5hdHVyYWxXcml0aW5nRGlyZWN0aW9uLCBIYXNoU2V0
PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cywgYm9vbCBmb3JUZXh0RW1waGFzaXMpCiAgICAg
OiBtX2ZvbnQoKmZvbnQpCiAgICAgLCBtX3J1bihydW4pCiAgICAgLCBtX2lzTFRST25seSh0cnVl
KQpAQCAtMjkxLDcgKzI5MSw3IEBAIHZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpjb2xsZWN0
Q29tcGwKICAgICBpZiAoIW1fZW5kKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBXZSBicmVh
ayB1cCBnbHlwaCBydW4gZ2VuZXJhdGlvbiBmb3IgdGhlIHN0cmluZyBieSBGb250RGF0YS4KKyAg
ICAvLyBXZSBicmVhayB1cCBnbHlwaCBydW4gZ2VuZXJhdGlvbiBmb3IgdGhlIHN0cmluZyBieSBG
b250LgogICAgIGNvbnN0IFVDaGFyKiBjcDsKIAogICAgIGlmIChtX3J1bi5pczhCaXQoKSkgewpA
QCAtMzA4LDkgKzMwOCw5IEBAIHZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpjb2xsZWN0Q29t
cGwKICAgICBjb25zdCBVQ2hhciogY3VyciA9IGNwOwogICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBj
cCArIG1fZW5kOwogCi0gICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhOworICAgIGNv
bnN0IEZvbnQqIGZvbnQ7CiAgICAgYm9vbCBpc01pc3NpbmdHbHlwaDsKLSAgICBjb25zdCBTaW1w
bGVGb250RGF0YSogbmV4dEZvbnREYXRhOworICAgIGNvbnN0IEZvbnQqIG5leHRGb250OwogICAg
IGJvb2wgbmV4dElzTWlzc2luZ0dseXBoOwogCiAgICAgdW5zaWduZWQgbWFya0NvdW50OwpAQCAt
MzMyLDEyICszMzIsMTIgQEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RDb21w
bAogICAgIH0KIAogICAgIG5leHRJc01pc3NpbmdHbHlwaCA9IGZhbHNlOwotICAgIG5leHRGb250
RGF0YSA9IG1fZm9udC5mb250RGF0YUZvckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKHNlcXVl
bmNlU3RhcnQsIGN1cnIgLSBzZXF1ZW5jZVN0YXJ0LCBuZXh0SXNTbWFsbENhcHMgPyBTbWFsbENh
cHNWYXJpYW50IDogTm9ybWFsVmFyaWFudCk7Ci0gICAgaWYgKCFuZXh0Rm9udERhdGEpCisgICAg
bmV4dEZvbnQgPSBtX2ZvbnQuZm9udEZvckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKHNlcXVl
bmNlU3RhcnQsIGN1cnIgLSBzZXF1ZW5jZVN0YXJ0LCBuZXh0SXNTbWFsbENhcHMgPyBTbWFsbENh
cHNWYXJpYW50IDogTm9ybWFsVmFyaWFudCk7CisgICAgaWYgKCFuZXh0Rm9udCkKICAgICAgICAg
bmV4dElzTWlzc2luZ0dseXBoID0gdHJ1ZTsKIAogICAgIHdoaWxlIChjdXJyIDwgZW5kKSB7Ci0g
ICAgICAgIGZvbnREYXRhID0gbmV4dEZvbnREYXRhOworICAgICAgICBmb250ID0gbmV4dEZvbnQ7
CiAgICAgICAgIGlzTWlzc2luZ0dseXBoID0gbmV4dElzTWlzc2luZ0dseXBoOwogICAgICAgICBp
c1NtYWxsQ2FwcyA9IG5leHRJc1NtYWxsQ2FwczsKICAgICAgICAgaW50IGluZGV4ID0gY3VyciAt
IGNwOwpAQCAtMzU4LDE3ICszNTgsMTcgQEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNv
bGxlY3RDb21wbAogCiAgICAgICAgIG5leHRJc01pc3NpbmdHbHlwaCA9IGZhbHNlOwogICAgICAg
ICBpZiAoYmFzZUNoYXJhY3RlciA9PSB6ZXJvV2lkdGhKb2luZXIpCi0gICAgICAgICAgICBuZXh0
Rm9udERhdGEgPSBmb250RGF0YTsKKyAgICAgICAgICAgIG5leHRGb250ID0gZm9udDsKICAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICBuZXh0Rm9udERhdGEgPSBtX2ZvbnQuZm9udERhdGFGb3JD
b21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjcCArIGluZGV4LCBjdXJyIC0gY3AgLSBpbmRleCwg
bmV4dElzU21hbGxDYXBzID8gU21hbGxDYXBzVmFyaWFudCA6IE5vcm1hbFZhcmlhbnQpOwotICAg
ICAgICAgICAgaWYgKCFuZXh0Rm9udERhdGEpCisgICAgICAgICAgICBuZXh0Rm9udCA9IG1fZm9u
dC5mb250Rm9yQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY3AgKyBpbmRleCwgY3VyciAtIGNw
IC0gaW5kZXgsIG5leHRJc1NtYWxsQ2FwcyA/IFNtYWxsQ2Fwc1ZhcmlhbnQgOiBOb3JtYWxWYXJp
YW50KTsKKyAgICAgICAgICAgIGlmICghbmV4dEZvbnQpCiAgICAgICAgICAgICAgICAgbmV4dElz
TWlzc2luZ0dseXBoID0gdHJ1ZTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChuZXh0Rm9udERh
dGEgIT0gZm9udERhdGEgfHwgbmV4dElzTWlzc2luZ0dseXBoICE9IGlzTWlzc2luZ0dseXBoKSB7
CisgICAgICAgIGlmIChuZXh0Rm9udCAhPSBmb250IHx8IG5leHRJc01pc3NpbmdHbHlwaCAhPSBp
c01pc3NpbmdHbHlwaCkgewogICAgICAgICAgICAgaW50IGl0ZW1TdGFydCA9IHN0YXRpY19jYXN0
PGludD4oaW5kZXhPZkZvbnRUcmFuc2l0aW9uKTsKICAgICAgICAgICAgIGludCBpdGVtTGVuZ3Ro
ID0gaW5kZXggLSBpbmRleE9mRm9udFRyYW5zaXRpb247Ci0gICAgICAgICAgICBjb2xsZWN0Q29t
cGxleFRleHRSdW5zRm9yQ2hhcmFjdGVycygoaXNTbWFsbENhcHMgPyBtX3NtYWxsQ2Fwc0J1ZmZl
ci5kYXRhKCkgOiBjcCkgKyBpdGVtU3RhcnQsIGl0ZW1MZW5ndGgsIGl0ZW1TdGFydCwgIWlzTWlz
c2luZ0dseXBoID8gZm9udERhdGEgOiAwKTsKKyAgICAgICAgICAgIGNvbGxlY3RDb21wbGV4VGV4
dFJ1bnNGb3JDaGFyYWN0ZXJzKChpc1NtYWxsQ2FwcyA/IG1fc21hbGxDYXBzQnVmZmVyLmRhdGEo
KSA6IGNwKSArIGl0ZW1TdGFydCwgaXRlbUxlbmd0aCwgaXRlbVN0YXJ0LCAhaXNNaXNzaW5nR2x5
cGggPyBmb250IDogMCk7CiAgICAgICAgICAgICBpbmRleE9mRm9udFRyYW5zaXRpb24gPSBpbmRl
eDsKICAgICAgICAgfQogICAgIH0KQEAgLTM3Niw3ICszNzYsNyBAQCB2b2lkIENvbXBsZXhUZXh0
Q29udHJvbGxlcjo6Y29sbGVjdENvbXBsCiAgICAgaW50IGl0ZW1MZW5ndGggPSBtX2VuZCAtIGlu
ZGV4T2ZGb250VHJhbnNpdGlvbjsKICAgICBpZiAoaXRlbUxlbmd0aCkgewogICAgICAgICBpbnQg
aXRlbVN0YXJ0ID0gaW5kZXhPZkZvbnRUcmFuc2l0aW9uOwotICAgICAgICBjb2xsZWN0Q29tcGxl
eFRleHRSdW5zRm9yQ2hhcmFjdGVycygobmV4dElzU21hbGxDYXBzID8gbV9zbWFsbENhcHNCdWZm
ZXIuZGF0YSgpIDogY3ApICsgaXRlbVN0YXJ0LCBpdGVtTGVuZ3RoLCBpdGVtU3RhcnQsICFuZXh0
SXNNaXNzaW5nR2x5cGggPyBuZXh0Rm9udERhdGEgOiAwKTsKKyAgICAgICAgY29sbGVjdENvbXBs
ZXhUZXh0UnVuc0ZvckNoYXJhY3RlcnMoKG5leHRJc1NtYWxsQ2FwcyA/IG1fc21hbGxDYXBzQnVm
ZmVyLmRhdGEoKSA6IGNwKSArIGl0ZW1TdGFydCwgaXRlbUxlbmd0aCwgaXRlbVN0YXJ0LCAhbmV4
dElzTWlzc2luZ0dseXBoID8gbmV4dEZvbnQgOiAwKTsKICAgICB9CiAKICAgICBpZiAoIW1fcnVu
Lmx0cigpKQpAQCAtNDY5LDcgKzQ2OSw3IEBAIHVuc2lnbmVkIENvbXBsZXhUZXh0Q29udHJvbGxl
cjo6aW5jcmVtZW4KICAgICByZXR1cm4gaW5kZXhPZkN1cnJlbnRSdW4obGVmdG1vc3RHbHlwaCk7
CiB9CiAKLXZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjphZHZhbmNlKHVuc2lnbmVkIG9mZnNl
dCwgR2x5cGhCdWZmZXIqIGdseXBoQnVmZmVyLCBHbHlwaEl0ZXJhdGlvblN0eWxlIGl0ZXJhdGlv
blN0eWxlLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMpCit2
b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6YWR2YW5jZSh1bnNpZ25lZCBvZmZzZXQsIEdseXBo
QnVmZmVyKiBnbHlwaEJ1ZmZlciwgR2x5cGhJdGVyYXRpb25TdHlsZSBpdGVyYXRpb25TdHlsZSwg
SGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMpCiB7CiAgICAgaWYgKHN0YXRpY19j
YXN0PGludD4ob2Zmc2V0KSA+IG1fZW5kKQogICAgICAgICBvZmZzZXQgPSBtX2VuZDsKQEAgLTQ5
NCw4ICs0OTQsOCBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6YWR2YW5jZSh1bnNpCiAg
ICAgICAgIHNpemVfdCBnbHlwaENvdW50ID0gY29tcGxleFRleHRSdW4uZ2x5cGhDb3VudCgpOwog
ICAgICAgICB1bnNpZ25lZCBnID0gbHRyID8gbV9nbHlwaEluQ3VycmVudFJ1biA6IGdseXBoQ291
bnQgLSAxIC0gbV9nbHlwaEluQ3VycmVudFJ1bjsKICAgICAgICAgdW5zaWduZWQgayA9IGxlZnRt
b3N0R2x5cGggKyBnOwotICAgICAgICBpZiAoZmFsbGJhY2tGb250cyAmJiAmY29tcGxleFRleHRS
dW4uZm9udERhdGEoKSAhPSAmbV9mb250LnByaW1hcnlGb250RGF0YSgpKQotICAgICAgICAgICAg
ZmFsbGJhY2tGb250cy0+YWRkKCZjb21wbGV4VGV4dFJ1bi5mb250RGF0YSgpKTsKKyAgICAgICAg
aWYgKGZhbGxiYWNrRm9udHMgJiYgJmNvbXBsZXhUZXh0UnVuLmZvbnQoKSAhPSAmbV9mb250LnBy
aW1hcnlGb250KCkpCisgICAgICAgICAgICBmYWxsYmFja0ZvbnRzLT5hZGQoJmNvbXBsZXhUZXh0
UnVuLmZvbnQoKSk7CiAKICAgICAgICAgLy8gV2UgbXVzdCBzdG9yZSB0aGUgaW5pdGlhbCBhZHZh
bmNlIGZvciB0aGUgZmlyc3QgZ2x5cGggd2UgYXJlIGdvaW5nIHRvIGRyYXcuCiAgICAgICAgIC8v
IFdoZW4gbGVmdG1vc3RHbHlwaCBpcyAwLCBpdCByZXByZXNlbnRzIHRoZSBmaXJzdCBnbHlwaCB0
byBkcmF3LCB0YWtpbmcgaW50bwpAQCAtNTIwLDcgKzUyMCw3IEBAIHZvaWQgQ29tcGxleFRleHRD
b250cm9sbGVyOjphZHZhbmNlKHVuc2kKICAgICAgICAgICAgICAgICByZXR1cm47CiAKICAgICAg
ICAgICAgIGlmIChnbHlwaEJ1ZmZlciAmJiAhbV9jaGFyYWN0ZXJJbkN1cnJlbnRHbHlwaCkKLSAg
ICAgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+YWRkKG1fYWRqdXN0ZWRHbHlwaHNba10sICZjb21w
bGV4VGV4dFJ1bi5mb250RGF0YSgpLCBhZGp1c3RlZEFkdmFuY2UsIGNvbXBsZXhUZXh0UnVuLmlu
ZGV4QXQobV9nbHlwaEluQ3VycmVudFJ1bikpOworICAgICAgICAgICAgICAgIGdseXBoQnVmZmVy
LT5hZGQobV9hZGp1c3RlZEdseXBoc1trXSwgJmNvbXBsZXhUZXh0UnVuLmZvbnQoKSwgYWRqdXN0
ZWRBZHZhbmNlLCBjb21wbGV4VGV4dFJ1bi5pbmRleEF0KG1fZ2x5cGhJbkN1cnJlbnRSdW4pKTsK
IAogICAgICAgICAgICAgdW5zaWduZWQgb2xkQ2hhcmFjdGVySW5DdXJyZW50R2x5cGggPSBtX2No
YXJhY3RlckluQ3VycmVudEdseXBoOwogICAgICAgICAgICAgbV9jaGFyYWN0ZXJJbkN1cnJlbnRH
bHlwaCA9IHN0ZDo6bWluKG1fY3VycmVudENoYXJhY3RlciAtIGNvbXBsZXhUZXh0UnVuLnN0cmlu
Z0xvY2F0aW9uKCksIGdseXBoRW5kT2Zmc2V0KSAtIGdseXBoU3RhcnRPZmZzZXQ7CkBAIC01NjYs
OSArNTY2LDkgQEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmFkanVzdEdseXBocwogICAg
IGZvciAoc2l6ZV90IHIgPSAwOyByIDwgcnVuQ291bnQ7ICsrcikgewogICAgICAgICBDb21wbGV4
VGV4dFJ1biYgY29tcGxleFRleHRSdW4gPSAqbV9jb21wbGV4VGV4dFJ1bnNbcl07CiAgICAgICAg
IHVuc2lnbmVkIGdseXBoQ291bnQgPSBjb21wbGV4VGV4dFJ1bi5nbHlwaENvdW50KCk7Ci0gICAg
ICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhJiBmb250RGF0YSA9IGNvbXBsZXhUZXh0UnVuLmZvbnRE
YXRhKCk7CisgICAgICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBjb21wbGV4VGV4dFJ1bi5mb250KCk7
CiAjaWYgUExBVEZPUk0oSU9TKQotICAgICAgICBib29sIGlzRW1vamkgPSBmb250RGF0YS5wbGF0
Zm9ybURhdGEoKS5tX2lzRW1vamk7CisgICAgICAgIGJvb2wgaXNFbW9qaSA9IGZvbnQucGxhdGZv
cm1EYXRhKCkubV9pc0Vtb2ppOwogI2VuZGlmCiAKICAgICAgICAgLy8gUmVwcmVzZW50IHRoZSBp
bml0aWFsIGFkdmFuY2UgZm9yIGEgdGV4dCBydW4gYnkgYWRqdXN0aW5nIHRoZSBhZHZhbmNlCkBA
IC01ODgsOCArNTg4LDggQEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmFkanVzdEdseXBo
cwogICAgICAgICBjb25zdCBDR1NpemUqIGFkdmFuY2VzID0gY29tcGxleFRleHRSdW4uYWR2YW5j
ZXMoKTsKIAogICAgICAgICBib29sIGxhc3RSdW4gPSByICsgMSA9PSBydW5Db3VudDsKLSAgICAg
ICAgYm9vbCByb3VuZHNBZHZhbmNlcyA9ICFtX2ZvbnQuaXNQcmludGVyRm9udCgpICYmIGZvbnRE
YXRhLnBsYXRmb3JtRGF0YSgpLnJvdW5kc0dseXBoQWR2YW5jZXMoKTsKLSAgICAgICAgZmxvYXQg
c3BhY2VXaWR0aCA9IGZvbnREYXRhLnNwYWNlV2lkdGgoKSAtIGZvbnREYXRhLnN5bnRoZXRpY0Jv
bGRPZmZzZXQoKTsKKyAgICAgICAgYm9vbCByb3VuZHNBZHZhbmNlcyA9ICFtX2ZvbnQuaXNQcmlu
dGVyRm9udCgpICYmIGZvbnQucGxhdGZvcm1EYXRhKCkucm91bmRzR2x5cGhBZHZhbmNlcygpOwor
ICAgICAgICBmbG9hdCBzcGFjZVdpZHRoID0gZm9udC5zcGFjZVdpZHRoKCkgLSBmb250LnN5bnRo
ZXRpY0JvbGRPZmZzZXQoKTsKICAgICAgICAgQ0dGbG9hdCByb3VuZGVkU3BhY2VXaWR0aCA9IHJv
dW5kQ0dGbG9hdChzcGFjZVdpZHRoKTsKICAgICAgICAgY29uc3QgVUNoYXIqIGNwID0gY29tcGxl
eFRleHRSdW4uY2hhcmFjdGVycygpOwogICAgICAgICBDR1BvaW50IGdseXBoT3JpZ2luID0gQ0dQ
b2ludFplcm87CkBAIC02MTYsMzMgKzYxNiwzMyBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxl
cjo6YWRqdXN0R2x5cGhzCiAgICAgICAgICAgICAgICAgbmV4dENoID0gKihtX2NvbXBsZXhUZXh0
UnVuc1tyICsgMV0tPmNoYXJhY3RlcnMoKSArIG1fY29tcGxleFRleHRSdW5zW3IgKyAxXS0+aW5k
ZXhBdCgwKSk7CiAKICAgICAgICAgICAgIGJvb2wgdHJlYXRBc1NwYWNlID0gRm9udENhc2NhZGU6
OnRyZWF0QXNTcGFjZShjaCk7Ci0gICAgICAgICAgICBDR0dseXBoIGdseXBoID0gdHJlYXRBc1Nw
YWNlID8gZm9udERhdGEuc3BhY2VHbHlwaCgpIDogZ2x5cGhzW2ldOworICAgICAgICAgICAgQ0dH
bHlwaCBnbHlwaCA9IHRyZWF0QXNTcGFjZSA/IGZvbnQuc3BhY2VHbHlwaCgpIDogZ2x5cGhzW2ld
OwogICAgICAgICAgICAgQ0dTaXplIGFkdmFuY2UgPSB0cmVhdEFzU3BhY2UgPyBDR1NpemVNYWtl
KHNwYWNlV2lkdGgsIGFkdmFuY2VzW2ldLmhlaWdodCkgOiBhZHZhbmNlc1tpXTsKICNpZiBQTEFU
Rk9STShJT1MpCiAgICAgICAgICAgICBpZiAoaXNFbW9qaSAmJiBhZHZhbmNlLndpZHRoKQotICAg
ICAgICAgICAgICAgIGFkdmFuY2Uud2lkdGggPSBmb250RGF0YS53aWR0aEZvckdseXBoKGdseXBo
KTsKKyAgICAgICAgICAgICAgICBhZHZhbmNlLndpZHRoID0gZm9udC53aWR0aEZvckdseXBoKGds
eXBoKTsKICNlbmRpZgogCiAgICAgICAgICAgICBpZiAoY2ggPT0gJ1x0JyAmJiBtX3J1bi5hbGxv
d1RhYnMoKSkKLSAgICAgICAgICAgICAgICBhZHZhbmNlLndpZHRoID0gbV9mb250LnRhYldpZHRo
KGZvbnREYXRhLCBtX3J1bi50YWJTaXplKCksIG1fcnVuLnhQb3MoKSArIG1fdG90YWxXaWR0aCAr
IHdpZHRoU2luY2VMYXN0Q29tbWl0KTsKKyAgICAgICAgICAgICAgICBhZHZhbmNlLndpZHRoID0g
bV9mb250LnRhYldpZHRoKGZvbnQsIG1fcnVuLnRhYlNpemUoKSwgbV9ydW4ueFBvcygpICsgbV90
b3RhbFdpZHRoICsgd2lkdGhTaW5jZUxhc3RDb21taXQpOwogICAgICAgICAgICAgZWxzZSBpZiAo
Rm9udENhc2NhZGU6OnRyZWF0QXNaZXJvV2lkdGhTcGFjZShjaCkgJiYgIXRyZWF0QXNTcGFjZSkg
ewogICAgICAgICAgICAgICAgIGFkdmFuY2Uud2lkdGggPSAwOwotICAgICAgICAgICAgICAgIGds
eXBoID0gZm9udERhdGEuc3BhY2VHbHlwaCgpOworICAgICAgICAgICAgICAgIGdseXBoID0gZm9u
dC5zcGFjZUdseXBoKCk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGZsb2F0IHJvdW5k
ZWRBZHZhbmNlV2lkdGggPSByb3VuZGYoYWR2YW5jZS53aWR0aCk7CiAgICAgICAgICAgICBpZiAo
cm91bmRzQWR2YW5jZXMpCiAgICAgICAgICAgICAgICAgYWR2YW5jZS53aWR0aCA9IHJvdW5kZWRB
ZHZhbmNlV2lkdGg7CiAKLSAgICAgICAgICAgIGFkdmFuY2Uud2lkdGggKz0gZm9udERhdGEuc3lu
dGhldGljQm9sZE9mZnNldCgpOworICAgICAgICAgICAgYWR2YW5jZS53aWR0aCArPSBmb250LnN5
bnRoZXRpY0JvbGRPZmZzZXQoKTsKIAogIAogICAgICAgICAgICAgLy8gV2Ugc3BlY2lhbCBjYXNl
IHNwYWNlcyBpbiB0d28gd2F5cyB3aGVuIGFwcGx5aW5nIHdvcmQgcm91bmRpbmcuIAogICAgICAg
ICAgICAgLy8gRmlyc3QsIHdlIHJvdW5kIHNwYWNlcyB0byBhbiBhZGp1c3RlZCB3aWR0aCBpbiBh
bGwgZm9udHMuIAogICAgICAgICAgICAgLy8gU2Vjb25kLCBpbiBmaXhlZC1waXRjaCBmb250cyB3
ZSBlbnN1cmUgdGhhdCBhbGwgZ2x5cGhzIHRoYXQgCiAgICAgICAgICAgICAvLyBtYXRjaCB0aGUg
d2lkdGggb2YgdGhlIHNwYWNlIGdseXBoIGhhdmUgdGhlIHNhbWUgd2lkdGggYXMgdGhlIHNwYWNl
IGdseXBoLiAKLSAgICAgICAgICAgIGlmIChtX3J1bi5hcHBseVdvcmRSb3VuZGluZygpICYmIHJv
dW5kZWRBZHZhbmNlV2lkdGggPT0gcm91bmRlZFNwYWNlV2lkdGggJiYgKGZvbnREYXRhLnBpdGNo
KCkgPT0gRml4ZWRQaXRjaCB8fCBnbHlwaCA9PSBmb250RGF0YS5zcGFjZUdseXBoKCkpKQotICAg
ICAgICAgICAgICAgIGFkdmFuY2Uud2lkdGggPSBmb250RGF0YS5hZGp1c3RlZFNwYWNlV2lkdGgo
KTsKKyAgICAgICAgICAgIGlmIChtX3J1bi5hcHBseVdvcmRSb3VuZGluZygpICYmIHJvdW5kZWRB
ZHZhbmNlV2lkdGggPT0gcm91bmRlZFNwYWNlV2lkdGggJiYgKGZvbnQucGl0Y2goKSA9PSBGaXhl
ZFBpdGNoIHx8IGdseXBoID09IGZvbnQuc3BhY2VHbHlwaCgpKSkKKyAgICAgICAgICAgICAgICBh
ZHZhbmNlLndpZHRoID0gZm9udC5hZGp1c3RlZFNwYWNlV2lkdGgoKTsKIAogICAgICAgICAgICAg
aWYgKGhhc0V4dHJhU3BhY2luZykgewogICAgICAgICAgICAgICAgIC8vIElmIHdlJ3JlIGEgZ2x5
cGggd2l0aCBhbiBhZHZhbmNlLCBnbyBhaGVhZCBhbmQgYWRkIGluIGxldHRlci1zcGFjaW5nLgpA
QCAtNzE3LDcgKzcxNyw3IEBAIHZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjphZGp1c3RHbHlw
aHMKICAgICAgICAgICAgIG1fYWRqdXN0ZWRBZHZhbmNlcy5hcHBlbmQoYWR2YW5jZSk7CiAgICAg
ICAgICAgICBtX2FkanVzdGVkR2x5cGhzLmFwcGVuZChnbHlwaCk7CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIEZsb2F0UmVjdCBnbHlwaEJvdW5kcyA9IGZvbnREYXRhLmJvdW5kc0ZvckdseXBo
KGdseXBoKTsKKyAgICAgICAgICAgIEZsb2F0UmVjdCBnbHlwaEJvdW5kcyA9IGZvbnQuYm91bmRz
Rm9yR2x5cGgoZ2x5cGgpOwogICAgICAgICAgICAgZ2x5cGhCb3VuZHMubW92ZShnbHlwaE9yaWdp
bi54LCBnbHlwaE9yaWdpbi55KTsKICAgICAgICAgICAgIG1fbWluR2x5cGhCb3VuZGluZ0JveFgg
PSBzdGQ6Om1pbihtX21pbkdseXBoQm91bmRpbmdCb3hYLCBnbHlwaEJvdW5kcy54KCkpOwogICAg
ICAgICAgICAgbV9tYXhHbHlwaEJvdW5kaW5nQm94WCA9IHN0ZDo6bWF4KG1fbWF4R2x5cGhCb3Vu
ZGluZ0JveFgsIGdseXBoQm91bmRzLm1heFgoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxl
ci5oCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQx
LDcgQEAgdHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19DVExpbmUgKiBDVExpbmVSZQogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBGb250Q2FzY2FkZTsKLWNsYXNzIFNpbXBsZUZvbnREYXRhOwor
Y2xhc3MgRm9udDsKIGNsYXNzIFRleHRSdW47CiAKIGVudW0gR2x5cGhJdGVyYXRpb25TdHlsZSB7
IEluY2x1ZGVQYXJ0aWFsR2x5cGhzLCBCeVdob2xlR2x5cGhzIH07CkBAIC01MCwxMCArNTAsMTAg
QEAgZW51bSBHbHlwaEl0ZXJhdGlvblN0eWxlIHsgSW5jbHVkZVBhcnRpYQogLy8gY29tcGxleCBz
Y3JpcHRzIG9uIE9TIFguCiBjbGFzcyBDb21wbGV4VGV4dENvbnRyb2xsZXIgewogcHVibGljOgot
ICAgIENvbXBsZXhUZXh0Q29udHJvbGxlcihjb25zdCBGb250Q2FzY2FkZSosIGNvbnN0IFRleHRS
dW4mLCBib29sIG1heVVzZU5hdHVyYWxXcml0aW5nRGlyZWN0aW9uID0gZmFsc2UsIEhhc2hTZXQ8
Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDAsIGJvb2wgZm9yVGV4dEVt
cGhhc2lzID0gZmFsc2UpOworICAgIENvbXBsZXhUZXh0Q29udHJvbGxlcihjb25zdCBGb250Q2Fz
Y2FkZSosIGNvbnN0IFRleHRSdW4mLCBib29sIG1heVVzZU5hdHVyYWxXcml0aW5nRGlyZWN0aW9u
ID0gZmFsc2UsIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzID0gMCwgYm9vbCBm
b3JUZXh0RW1waGFzaXMgPSBmYWxzZSk7CiAKICAgICAvLyBBZHZhbmNlIGFuZCBlbWl0IGdseXBo
cyB1cCB0byB0aGUgc3BlY2lmaWVkIGNoYXJhY3Rlci4KLSAgICB2b2lkIGFkdmFuY2UodW5zaWdu
ZWQgdG8sIEdseXBoQnVmZmVyKiA9IDAsIEdseXBoSXRlcmF0aW9uU3R5bGUgPSBJbmNsdWRlUGFy
dGlhbEdseXBocywgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRz
ID0gMCk7CisgICAgdm9pZCBhZHZhbmNlKHVuc2lnbmVkIHRvLCBHbHlwaEJ1ZmZlciogPSAwLCBH
bHlwaEl0ZXJhdGlvblN0eWxlID0gSW5jbHVkZVBhcnRpYWxHbHlwaHMsIEhhc2hTZXQ8Y29uc3Qg
Rm9udCo+KiBmYWxsYmFja0ZvbnRzID0gMCk7CiAKICAgICAvLyBDb21wdXRlIHRoZSBjaGFyYWN0
ZXIgb2Zmc2V0IGZvciBhIGdpdmVuIHggY29vcmRpbmF0ZS4KICAgICBpbnQgb2Zmc2V0Rm9yUG9z
aXRpb24oZmxvYXQgeCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocyk7CkBAIC03MywxOCArNzMs
MTggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBjbGFzcyBDb21wbGV4VGV4dFJ1biA6IHB1Ymxp
YyBSZWZDb3VudGVkPENvbXBsZXhUZXh0UnVuPiB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0
aWMgUmVmPENvbXBsZXhUZXh0UnVuPiBjcmVhdGUoQ1RSdW5SZWYgY3RSdW4sIGNvbnN0IFNpbXBs
ZUZvbnREYXRhJiBmb250RGF0YSwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIHN0
cmluZ0xvY2F0aW9uLCBzaXplX3Qgc3RyaW5nTGVuZ3RoLCBDRlJhbmdlIHJ1blJhbmdlKQorICAg
ICAgICBzdGF0aWMgUmVmPENvbXBsZXhUZXh0UnVuPiBjcmVhdGUoQ1RSdW5SZWYgY3RSdW4sIGNv
bnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBzdHJpbmdM
b2NhdGlvbiwgc2l6ZV90IHN0cmluZ0xlbmd0aCwgQ0ZSYW5nZSBydW5SYW5nZSkKICAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ29tcGxleFRleHRSdW4oY3RSdW4s
IGZvbnREYXRhLCBjaGFyYWN0ZXJzLCBzdHJpbmdMb2NhdGlvbiwgc3RyaW5nTGVuZ3RoLCBydW5S
YW5nZSkpOworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ29tcGxleFRleHRSdW4o
Y3RSdW4sIGZvbnQsIGNoYXJhY3RlcnMsIHN0cmluZ0xvY2F0aW9uLCBzdHJpbmdMZW5ndGgsIHJ1
blJhbmdlKSk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgUmVmPENvbXBsZXhUZXh0UnVu
PiBjcmVhdGUoY29uc3QgU2ltcGxlRm9udERhdGEmIGZvbnREYXRhLCBjb25zdCBVQ2hhciogY2hh
cmFjdGVycywgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24sIHNpemVfdCBzdHJpbmdMZW5ndGgsIGJv
b2wgbHRyKQorICAgICAgICBzdGF0aWMgUmVmPENvbXBsZXhUZXh0UnVuPiBjcmVhdGUoY29uc3Qg
Rm9udCYgZm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIHN0cmluZ0xvY2F0
aW9uLCBzaXplX3Qgc3RyaW5nTGVuZ3RoLCBib29sIGx0cikKICAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ29tcGxleFRleHRSdW4oZm9udERhdGEsIGNoYXJhY3Rl
cnMsIHN0cmluZ0xvY2F0aW9uLCBzdHJpbmdMZW5ndGgsIGx0cikpOworICAgICAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgQ29tcGxleFRleHRSdW4oZm9udCwgY2hhcmFjdGVycywgc3RyaW5n
TG9jYXRpb24sIHN0cmluZ0xlbmd0aCwgbHRyKSk7CiAgICAgICAgIH0KIAogICAgICAgICB1bnNp
Z25lZCBnbHlwaENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9nbHlwaENvdW50OyB9Ci0gICAgICAg
IGNvbnN0IFNpbXBsZUZvbnREYXRhJiBmb250RGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERh
dGE7IH0KKyAgICAgICAgY29uc3QgRm9udCYgZm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udDsg
fQogICAgICAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fY2hh
cmFjdGVyczsgfQogICAgICAgICB1bnNpZ25lZCBzdHJpbmdMb2NhdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fc3RyaW5nTG9jYXRpb247IH0KICAgICAgICAgc2l6ZV90IHN0cmluZ0xlbmd0aCgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RyaW5nTGVuZ3RoOyB9CkBAIC0xMDAsMTEgKzEwMCwxMSBAQCBwcml2
YXRlOgogICAgICAgICB2b2lkIHNldElzTm9uTW9ub3RvbmljKCk7CiAKICAgICBwcml2YXRlOgot
ICAgICAgICBDb21wbGV4VGV4dFJ1bihDVFJ1blJlZiwgY29uc3QgU2ltcGxlRm9udERhdGEmLCBj
b25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24sIHNpemVfdCBz
dHJpbmdMZW5ndGgsIENGUmFuZ2UgcnVuUmFuZ2UpOwotICAgICAgICBDb21wbGV4VGV4dFJ1bihj
b25zdCBTaW1wbGVGb250RGF0YSYsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBz
dHJpbmdMb2NhdGlvbiwgc2l6ZV90IHN0cmluZ0xlbmd0aCwgYm9vbCBsdHIpOworICAgICAgICBD
b21wbGV4VGV4dFJ1bihDVFJ1blJlZiwgY29uc3QgRm9udCYsIGNvbnN0IFVDaGFyKiBjaGFyYWN0
ZXJzLCB1bnNpZ25lZCBzdHJpbmdMb2NhdGlvbiwgc2l6ZV90IHN0cmluZ0xlbmd0aCwgQ0ZSYW5n
ZSBydW5SYW5nZSk7CisgICAgICAgIENvbXBsZXhUZXh0UnVuKGNvbnN0IEZvbnQmLCBjb25zdCBV
Q2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24sIHNpemVfdCBzdHJpbmdM
ZW5ndGgsIGJvb2wgbHRyKTsKIAogICAgICAgICB1bnNpZ25lZCBtX2dseXBoQ291bnQ7Ci0gICAg
ICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhJiBtX2ZvbnREYXRhOworICAgICAgICBjb25zdCBGb250
JiBtX2ZvbnQ7CiAgICAgICAgIGNvbnN0IFVDaGFyKiBtX2NoYXJhY3RlcnM7CiAgICAgICAgIHVu
c2lnbmVkIG1fc3RyaW5nTG9jYXRpb247CiAgICAgICAgIHNpemVfdCBtX3N0cmluZ0xlbmd0aDsK
QEAgLTEyNyw3ICsxMjcsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBjb2xsZWN0Q29tcGxleFRl
eHRSdW5zKCk7CiAKLSAgICB2b2lkIGNvbGxlY3RDb21wbGV4VGV4dFJ1bnNGb3JDaGFyYWN0ZXJz
KGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdHJpbmdMb2NhdGlvbiwg
Y29uc3QgU2ltcGxlRm9udERhdGEqKTsKKyAgICB2b2lkIGNvbGxlY3RDb21wbGV4VGV4dFJ1bnNG
b3JDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdHJp
bmdMb2NhdGlvbiwgY29uc3QgRm9udCopOwogICAgIHZvaWQgYWRqdXN0R2x5cGhzQW5kQWR2YW5j
ZXMoKTsKIAogICAgIHVuc2lnbmVkIGluZGV4T2ZDdXJyZW50UnVuKHVuc2lnbmVkJiBsZWZ0bW9z
dEdseXBoKTsKQEAgLTE2OSw3ICsxNjksNyBAQCBwcml2YXRlOgogICAgIGZsb2F0IG1fbGVhZGlu
Z0V4cGFuc2lvbjsKICAgICBib29sIG1fYWZ0ZXJFeHBhbnNpb247CiAKLSAgICBIYXNoU2V0PGNv
bnN0IFNpbXBsZUZvbnREYXRhKj4qIG1fZmFsbGJhY2tGb250czsKKyAgICBIYXNoU2V0PGNvbnN0
IEZvbnQqPiogbV9mYWxsYmFja0ZvbnRzOwogCiAgICAgZmxvYXQgbV9taW5HbHlwaEJvdW5kaW5n
Qm94WDsKICAgICBmbG9hdCBtX21heEdseXBoQm91bmRpbmdCb3hYOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9D
b21wbGV4VGV4dENvbnRyb2xsZXJDb3JlVGV4dC5tbQkocmV2aXNpb24gMTc4ODU3KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNv
cmVUZXh0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3IEBAIC0gKGlkKWluaXRXaXRo
Rm9udDooY29uc3QgV2ViQ29yZTo6Rm9udEMKICAgICBfY2hhcmFjdGVyID0gY2hhcmFjdGVyOwog
CiAgICAgLy8gQnkgdGhlIHRpbWUgYSBXZWJDYXNjYWRlTGlzdCBpcyB1c2VkLCB0aGUgRm9udENh
c2NhZGUgaGFzIGFscmVhZHkgYmVlbiBhc2tlZCB0byByZWFsaXplIGFsbCBvZiBpdHMKLSAgICAv
LyBGb250RGF0YSwgc28gdGhpcyBsb29wIGRvZXMgbm90IGhpdCB0aGUgRm9udENhY2hlLgorICAg
IC8vIEZvbnRzLCBzbyB0aGlzIGxvb3AgZG9lcyBub3QgaGl0IHRoZSBGb250Q2FjaGUuCiAgICAg
d2hpbGUgKCFfZm9udC0+ZmFsbGJhY2tSYW5nZXNBdChfY291bnQpLmlzTnVsbCgpKQogICAgICAg
ICBfY291bnQrKzsKIApAQCAtODIsMTAgKzgyLDEwIEBAIC0gKGlkKW9iamVjdEF0SW5kZXg6KE5T
VUludGVnZXIpaW5kZXgKICAgICB9IGVsc2UKICAgICAgICAgX2ZvbnREZXNjcmlwdG9ycy5ncm93
KGluZGV4ICsgMSk7CiAKLSAgICBjb25zdCBXZWJDb3JlOjpTaW1wbGVGb250RGF0YSogc2ltcGxl
Rm9udERhdGEgPSBfZm9udC0+ZmFsbGJhY2tSYW5nZXNBdChpbmRleCkuZm9udERhdGFGb3JDaGFy
YWN0ZXIoX2NoYXJhY3Rlcik7Ci0gICAgaWYgKCFzaW1wbGVGb250RGF0YSkKLSAgICAgICAgc2lt
cGxlRm9udERhdGEgPSAmX2ZvbnQtPmZhbGxiYWNrUmFuZ2VzQXQoaW5kZXgpLmZvbnREYXRhRm9y
Rmlyc3RSYW5nZSgpOwotICAgIGZvbnREZXNjcmlwdG9yID0gQ1RGb250Q29weUZvbnREZXNjcmlw
dG9yKHNpbXBsZUZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSk7CisgICAgY29uc3Qg
V2ViQ29yZTo6Rm9udCogZm9udCA9IF9mb250LT5mYWxsYmFja1Jhbmdlc0F0KGluZGV4KS5mb250
Rm9yQ2hhcmFjdGVyKF9jaGFyYWN0ZXIpOworICAgIGlmICghZm9udCkKKyAgICAgICAgZm9udCA9
ICZfZm9udC0+ZmFsbGJhY2tSYW5nZXNBdChpbmRleCkuZm9udEZvckZpcnN0UmFuZ2UoKTsKKyAg
ICBmb250RGVzY3JpcHRvciA9IENURm9udENvcHlGb250RGVzY3JpcHRvcihmb250LT5wbGF0Zm9y
bURhdGEoKS5jdEZvbnQoKSk7CiAgICAgX2ZvbnREZXNjcmlwdG9yc1tpbmRleF0gPSBhZG9wdENG
KGZvbnREZXNjcmlwdG9yKTsKICAgICByZXR1cm4gKGlkKWZvbnREZXNjcmlwdG9yOwogfQpAQCAt
OTQsOCArOTQsOCBAQCAtIChpZClvYmplY3RBdEluZGV4OihOU1VJbnRlZ2VyKWluZGV4CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotQ29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dFJ1
bjo6Q29tcGxleFRleHRSdW4oQ1RSdW5SZWYgY3RSdW4sIGNvbnN0IFNpbXBsZUZvbnREYXRhJiBm
b250RGF0YSwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIHN0cmluZ0xvY2F0aW9u
LCBzaXplX3Qgc3RyaW5nTGVuZ3RoLCBDRlJhbmdlIHJ1blJhbmdlKQotICAgIDogbV9mb250RGF0
YShmb250RGF0YSkKK0NvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRSdW46OkNvbXBs
ZXhUZXh0UnVuKENUUnVuUmVmIGN0UnVuLCBjb25zdCBGb250JiBmb250LCBjb25zdCBVQ2hhciog
Y2hhcmFjdGVycywgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24sIHNpemVfdCBzdHJpbmdMZW5ndGgs
IENGUmFuZ2UgcnVuUmFuZ2UpCisgICAgOiBtX2ZvbnQoZm9udCkKICAgICAsIG1fY2hhcmFjdGVy
cyhjaGFyYWN0ZXJzKQogICAgICwgbV9zdHJpbmdMb2NhdGlvbihzdHJpbmdMb2NhdGlvbikKICAg
ICAsIG1fc3RyaW5nTGVuZ3RoKHN0cmluZ0xlbmd0aCkKQEAgLTEzMCw4ICsxMzAsOCBAQCBDb21w
bGV4VGV4dENvbnRyb2xsZXI6OkNvbXBsZXhUZXh0UnVuOjpDCiAKIC8vIE1pc3NpbmcgZ2x5cGhz
IHJ1biBjb25zdHJ1Y3Rvci4gQ29yZSBUZXh0IHdpbGwgbm90IGdlbmVyYXRlIGEgcnVuIG9mIG1p
c3NpbmcgZ2x5cGhzLCBpbnN0ZWFkIGZhbGxpbmcgYmFjayBvbgogLy8gZ2x5cGhzIGZyb20gTGFz
dFJlc29ydC4gV2Ugd2FudCB0byB1c2UgdGhlIHByaW1hcnkgZm9udCdzIG1pc3NpbmcgZ2x5cGgg
aW4gb3JkZXIgdG8gbWF0Y2ggdGhlIGZhc3QgdGV4dCBjb2RlIHBhdGguCi1Db21wbGV4VGV4dENv
bnRyb2xsZXI6OkNvbXBsZXhUZXh0UnVuOjpDb21wbGV4VGV4dFJ1bihjb25zdCBTaW1wbGVGb250
RGF0YSYgZm9udERhdGEsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBzdHJpbmdM
b2NhdGlvbiwgc2l6ZV90IHN0cmluZ0xlbmd0aCwgYm9vbCBsdHIpCi0gICAgOiBtX2ZvbnREYXRh
KGZvbnREYXRhKQorQ29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dFJ1bjo6Q29tcGxl
eFRleHRSdW4oY29uc3QgRm9udCYgZm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2ln
bmVkIHN0cmluZ0xvY2F0aW9uLCBzaXplX3Qgc3RyaW5nTGVuZ3RoLCBib29sIGx0cikKKyAgICA6
IG1fZm9udChmb250KQogICAgICwgbV9jaGFyYWN0ZXJzKGNoYXJhY3RlcnMpCiAgICAgLCBtX3N0
cmluZ0xvY2F0aW9uKHN0cmluZ0xvY2F0aW9uKQogICAgICwgbV9zdHJpbmdMZW5ndGgoc3RyaW5n
TGVuZ3RoKQpAQCAtMTYzLDcgKzE2Myw3IEBAIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxl
eFRleHRSdW46OkMKICAgICAvLyBTeW50aGVzaXplIGEgcnVuIG9mIG1pc3NpbmcgZ2x5cGhzLgog
ICAgIG1fZ2x5cGhzVmVjdG9yLmZpbGwoMCwgbV9nbHlwaENvdW50KTsKICAgICBtX2dseXBocyA9
IG1fZ2x5cGhzVmVjdG9yLmRhdGEoKTsKLSAgICBtX2FkdmFuY2VzVmVjdG9yLmZpbGwoQ0dTaXpl
TWFrZShtX2ZvbnREYXRhLndpZHRoRm9yR2x5cGgoMCksIDApLCBtX2dseXBoQ291bnQpOworICAg
IG1fYWR2YW5jZXNWZWN0b3IuZmlsbChDR1NpemVNYWtlKG1fZm9udC53aWR0aEZvckdseXBoKDAp
LCAwKSwgbV9nbHlwaENvdW50KTsKICAgICBtX2FkdmFuY2VzID0gbV9hZHZhbmNlc1ZlY3Rvci5k
YXRhKCk7CiB9CiAKQEAgLTE4NCwxMSArMTg0LDExIEBAIHN0YXRpYyBjb25zdCBVbmlDaGFyKiBw
cm92aWRlU3RyaW5nQW5kQXQKICAgICByZXR1cm4gaW5mby0+Y3AgKyBzdHJpbmdJbmRleDsKIH0K
IAotdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RDb21wbGV4VGV4dFJ1bnNGb3JD
aGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBjcCwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdHJp
bmdMb2NhdGlvbiwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQordm9pZCBDb21wbGV4
VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RDb21wbGV4VGV4dFJ1bnNGb3JDaGFyYWN0ZXJzKGNvbnN0
IFVDaGFyKiBjcCwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdHJpbmdMb2NhdGlvbiwgY29u
c3QgRm9udCogZm9udCkKIHsKLSAgICBpZiAoIWZvbnREYXRhKSB7CisgICAgaWYgKCFmb250KSB7
CiAgICAgICAgIC8vIENyZWF0ZSBhIHJ1biBvZiBtaXNzaW5nIGdseXBocyBmcm9tIHRoZSBwcmlt
YXJ5IGZvbnQuCi0gICAgICAgIG1fY29tcGxleFRleHRSdW5zLmFwcGVuZChDb21wbGV4VGV4dFJ1
bjo6Y3JlYXRlKG1fZm9udC5wcmltYXJ5Rm9udERhdGEoKSwgY3AsIHN0cmluZ0xvY2F0aW9uLCBs
ZW5ndGgsIG1fcnVuLmx0cigpKSk7CisgICAgICAgIG1fY29tcGxleFRleHRSdW5zLmFwcGVuZChD
b21wbGV4VGV4dFJ1bjo6Y3JlYXRlKG1fZm9udC5wcmltYXJ5Rm9udCgpLCBjcCwgc3RyaW5nTG9j
YXRpb24sIGxlbmd0aCwgbV9ydW4ubHRyKCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApA
QCAtMTk2LDI2ICsxOTYsMjYgQEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RD
b21wbAogCiAgICAgVUNoYXIzMiBiYXNlQ2hhcmFjdGVyID0gMDsKICAgICBSZXRhaW5QdHI8Q0ZE
aWN0aW9uYXJ5UmVmPiBzdHJpbmdBdHRyaWJ1dGVzOwotICAgIGlmIChmb250RGF0YSA9PSBTaW1w
bGVGb250RGF0YTo6c3lzdGVtRmFsbGJhY2soKSkgeworICAgIGlmIChmb250ID09IEZvbnQ6OnN5
c3RlbUZhbGxiYWNrKCkpIHsKICAgICAgICAgLy8gRklYTUU6IFRoaXMgY29kZSBwYXRoIGRvZXMg
bm90IHN1cHBvcnQgc21hbGwgY2Fwcy4KICAgICAgICAgaXNTeXN0ZW1GYWxsYmFjayA9IHRydWU7
CiAKICAgICAgICAgVTE2X0dFVChjcCwgMCwgMCwgbGVuZ3RoLCBiYXNlQ2hhcmFjdGVyKTsKLSAg
ICAgICAgZm9udERhdGEgPSBtX2ZvbnQuZmFsbGJhY2tSYW5nZXNBdCgwKS5mb250RGF0YUZvckNo
YXJhY3RlcihiYXNlQ2hhcmFjdGVyKTsKLSAgICAgICAgaWYgKCFmb250RGF0YSkKLSAgICAgICAg
ICAgIGZvbnREYXRhID0gJm1fZm9udC5mYWxsYmFja1Jhbmdlc0F0KDApLmZvbnREYXRhRm9yRmly
c3RSYW5nZSgpOworICAgICAgICBmb250ID0gbV9mb250LmZhbGxiYWNrUmFuZ2VzQXQoMCkuZm9u
dEZvckNoYXJhY3RlcihiYXNlQ2hhcmFjdGVyKTsKKyAgICAgICAgaWYgKCFmb250KQorICAgICAg
ICAgICAgZm9udCA9ICZtX2ZvbnQuZmFsbGJhY2tSYW5nZXNBdCgwKS5mb250Rm9yRmlyc3RSYW5n
ZSgpOwogCiAgICAgICAgIFJldGFpblB0cjxXZWJDYXNjYWRlTGlzdD4gY2FzY2FkZUxpc3QgPSBh
ZG9wdE5TKFtbV2ViQ2FzY2FkZUxpc3QgYWxsb2NdIGluaXRXaXRoRm9udDombV9mb250IGNoYXJh
Y3RlcjpiYXNlQ2hhcmFjdGVyXSk7CiAKLSAgICAgICAgc3RyaW5nQXR0cmlidXRlcyA9IGFkb3B0
Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0YWJsZUNvcHkoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCwg
Zm9udERhdGEtPmdldENGU3RyaW5nQXR0cmlidXRlcyhtX2ZvbnQudHlwZXNldHRpbmdGZWF0dXJl
cygpLCBmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSkpKTsKKyAgICAgICAg
c3RyaW5nQXR0cmlidXRlcyA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0YWJsZUNvcHko
a0NGQWxsb2NhdG9yRGVmYXVsdCwgMCwgZm9udC0+Z2V0Q0ZTdHJpbmdBdHRyaWJ1dGVzKG1fZm9u
dC50eXBlc2V0dGluZ0ZlYXR1cmVzKCksIGZvbnQtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9u
KCkpKSk7CiAgICAgICAgIHN0YXRpYyBjb25zdCB2b2lkKiBhdHRyaWJ1dGVLZXlzW10gPSB7IGtD
VEZvbnRDYXNjYWRlTGlzdEF0dHJpYnV0ZSB9OwogICAgICAgICBjb25zdCB2b2lkKiB2YWx1ZXNb
XSA9IHsgY2FzY2FkZUxpc3QuZ2V0KCkgfTsKICAgICAgICAgUmV0YWluUHRyPENGRGljdGlvbmFy
eVJlZj4gYXR0cmlidXRlcyA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKGtDRkFsbG9jYXRv
ckRlZmF1bHQsIGF0dHJpYnV0ZUtleXMsIHZhbHVlcywgc2l6ZW9mKGF0dHJpYnV0ZUtleXMpIC8g
c2l6ZW9mKCphdHRyaWJ1dGVLZXlzKSwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAm
a0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOwogICAgICAgICBSZXRhaW5QdHI8Q1RG
b250RGVzY3JpcHRvclJlZj4gZm9udERlc2NyaXB0b3IgPSBhZG9wdENGKENURm9udERlc2NyaXB0
b3JDcmVhdGVXaXRoQXR0cmlidXRlcyhhdHRyaWJ1dGVzLmdldCgpKSk7Ci0gICAgICAgIFJldGFp
blB0cjxDVEZvbnRSZWY+IGZvbnRXaXRoQ2FzY2FkZUxpc3QgPSBhZG9wdENGKENURm9udENyZWF0
ZUNvcHlXaXRoQXR0cmlidXRlcyhmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkuY3RGb250KCksIG1f
Zm9udC5waXhlbFNpemUoKSwgMCwgZm9udERlc2NyaXB0b3IuZ2V0KCkpKTsKKyAgICAgICAgUmV0
YWluUHRyPENURm9udFJlZj4gZm9udFdpdGhDYXNjYWRlTGlzdCA9IGFkb3B0Q0YoQ1RGb250Q3Jl
YXRlQ29weVdpdGhBdHRyaWJ1dGVzKGZvbnQtPnBsYXRmb3JtRGF0YSgpLmN0Rm9udCgpLCBtX2Zv
bnQucGl4ZWxTaXplKCksIDAsIGZvbnREZXNjcmlwdG9yLmdldCgpKSk7CiAgICAgICAgIENGRGlj
dGlvbmFyeVNldFZhbHVlKGNvbnN0X2Nhc3Q8Q0ZNdXRhYmxlRGljdGlvbmFyeVJlZj4oc3RyaW5n
QXR0cmlidXRlcy5nZXQoKSksIGtDVEZvbnRBdHRyaWJ1dGVOYW1lLCBmb250V2l0aENhc2NhZGVM
aXN0LmdldCgpKTsKICAgICB9IGVsc2UKLSAgICAgICAgc3RyaW5nQXR0cmlidXRlcyA9IGZvbnRE
YXRhLT5nZXRDRlN0cmluZ0F0dHJpYnV0ZXMobV9mb250LnR5cGVzZXR0aW5nRmVhdHVyZXMoKSwg
Zm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkpOworICAgICAgICBzdHJpbmdB
dHRyaWJ1dGVzID0gZm9udC0+Z2V0Q0ZTdHJpbmdBdHRyaWJ1dGVzKG1fZm9udC50eXBlc2V0dGlu
Z0ZlYXR1cmVzKCksIGZvbnQtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkpOwogCiAgICAg
UmV0YWluUHRyPENUTGluZVJlZj4gbGluZTsKIApAQCAtMjQ4LDU1ICsyNDgsNTUgQEAgdm9pZCBD
b21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RDb21wbAogICAgICAgICBDVFJ1blJlZiBjdFJ1
biA9IHN0YXRpY19jYXN0PENUUnVuUmVmPihDRkFycmF5R2V0VmFsdWVBdEluZGV4KHJ1bkFycmF5
LCBtX3J1bi5sdHIoKSA/IHIgOiBydW5Db3VudCAtIDEgLSByKSk7CiAgICAgICAgIEFTU0VSVChD
RkdldFR5cGVJRChjdFJ1bikgPT0gQ1RSdW5HZXRUeXBlSUQoKSk7CiAgICAgICAgIENGUmFuZ2Ug
cnVuUmFuZ2UgPSBDVFJ1bkdldFN0cmluZ1JhbmdlKGN0UnVuKTsKLSAgICAgICAgY29uc3QgU2lt
cGxlRm9udERhdGEqIHJ1bkZvbnREYXRhID0gZm9udERhdGE7CisgICAgICAgIGNvbnN0IEZvbnQq
IHJ1bkZvbnQgPSBmb250OwogICAgICAgICBpZiAoaXNTeXN0ZW1GYWxsYmFjaykgewogICAgICAg
ICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIHJ1bkF0dHJpYnV0ZXMgPSBDVFJ1bkdldEF0dHJpYnV0ZXMo
Y3RSdW4pOwotICAgICAgICAgICAgQ1RGb250UmVmIHJ1bkZvbnQgPSBzdGF0aWNfY2FzdDxDVEZv
bnRSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKHJ1bkF0dHJpYnV0ZXMsIGtDVEZvbnRBdHRyaWJ1
dGVOYW1lKSk7Ci0gICAgICAgICAgICBBU1NFUlQoQ0ZHZXRUeXBlSUQocnVuRm9udCkgPT0gQ1RG
b250R2V0VHlwZUlEKCkpOwotICAgICAgICAgICAgUmV0YWluUHRyPENGVHlwZVJlZj4gcnVuRm9u
dEVxdWFsaXR5T2JqZWN0ID0gRm9udFBsYXRmb3JtRGF0YTo6b2JqZWN0Rm9yRXF1YWxpdHlDaGVj
ayhydW5Gb250KTsKLSAgICAgICAgICAgIGlmICghQ0ZFcXVhbChydW5Gb250RXF1YWxpdHlPYmpl
Y3QuZ2V0KCksIGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5vYmplY3RGb3JFcXVhbGl0eUNoZWNr
KCkuZ2V0KCkpKSB7CisgICAgICAgICAgICBDVEZvbnRSZWYgcnVuQ1RGb250ID0gc3RhdGljX2Nh
c3Q8Q1RGb250UmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShydW5BdHRyaWJ1dGVzLCBrQ1RGb250
QXR0cmlidXRlTmFtZSkpOworICAgICAgICAgICAgQVNTRVJUKENGR2V0VHlwZUlEKHJ1bkNURm9u
dCkgPT0gQ1RGb250R2V0VHlwZUlEKCkpOworICAgICAgICAgICAgUmV0YWluUHRyPENGVHlwZVJl
Zj4gcnVuRm9udEVxdWFsaXR5T2JqZWN0ID0gRm9udFBsYXRmb3JtRGF0YTo6b2JqZWN0Rm9yRXF1
YWxpdHlDaGVjayhydW5DVEZvbnQpOworICAgICAgICAgICAgaWYgKCFDRkVxdWFsKHJ1bkZvbnRF
cXVhbGl0eU9iamVjdC5nZXQoKSwgZm9udC0+cGxhdGZvcm1EYXRhKCkub2JqZWN0Rm9yRXF1YWxp
dHlDaGVjaygpLmdldCgpKSkgewogICAgICAgICAgICAgICAgIC8vIEJlZ2luIHRyeWluZyB0byBz
ZWUgaWYgcnVuRm9udCBtYXRjaGVzIGFueSBvZiB0aGUgZm9udHMgaW4gdGhlIGZhbGxiYWNrIGxp
c3QuCiAKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyAhbV9mb250LmZhbGxi
YWNrUmFuZ2VzQXQoaSkuaXNOdWxsKCk7ICsraSkgewotICAgICAgICAgICAgICAgICAgICBydW5G
b250RGF0YSA9IG1fZm9udC5mYWxsYmFja1Jhbmdlc0F0KGkpLmZvbnREYXRhRm9yQ2hhcmFjdGVy
KGJhc2VDaGFyYWN0ZXIpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIXJ1bkZvbnREYXRhKQor
ICAgICAgICAgICAgICAgICAgICBydW5Gb250ID0gbV9mb250LmZhbGxiYWNrUmFuZ2VzQXQoaSku
Zm9udEZvckNoYXJhY3RlcihiYXNlQ2hhcmFjdGVyKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCFydW5Gb250KQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICAgICAgICAgIFJldGFpblB0cjxDRlR5cGVSZWY+IHJ1bkZvbnRFcXVhbGl0eU9iamVjdCA9IHJ1
bkZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5vYmplY3RGb3JFcXVhbGl0eUNoZWNrKCk7CisgICAg
ICAgICAgICAgICAgICAgIFJldGFpblB0cjxDRlR5cGVSZWY+IHJ1bkZvbnRFcXVhbGl0eU9iamVj
dCA9IHJ1bkZvbnQtPnBsYXRmb3JtRGF0YSgpLm9iamVjdEZvckVxdWFsaXR5Q2hlY2soKTsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKENGRXF1YWwocnVuRm9udEVxdWFsaXR5T2JqZWN0LmdldCgp
LCBydW5Gb250RXF1YWxpdHlPYmplY3QuZ2V0KCkpKQogICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIHJ1bkZvbnREYXRhID0gMDsKKyAgICAgICAgICAg
ICAgICAgICAgcnVuRm9udCA9IG51bGxwdHI7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIG1hdGNoaW5nIGZvbnQsIGxvb2sgdXAgYnkgbmFtZSBp
biB0aGUgZm9udCBjYWNoZS4KLSAgICAgICAgICAgICAgICBpZiAoIXJ1bkZvbnREYXRhKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKCFydW5Gb250KSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFJh
dGhlciB0aGFuIHVzaW5nIHJ1bkZvbnQgYXMgYW4gTlNGb250IGFuZCB3cmFwcGluZyBpdCBpbiBh
IEZvbnRQbGF0Zm9ybURhdGEsIGdvIHRocm91Z2gKICAgICAgICAgICAgICAgICAgICAgLy8gdGhl
IGZvbnQgY2FjaGUgYW5kIHVsdGltYXRlbHkgdGhyb3VnaCBOU0ZvbnRNYW5hZ2VyIGluIG9yZGVy
IHRvIGdldCBhbiBOU0ZvbnQgd2l0aCB0aGUgcmlnaHQKICAgICAgICAgICAgICAgICAgICAgLy8g
TlNGb250UmVuZGVyaW5nTW9kZS4KLSAgICAgICAgICAgICAgICAgICAgUmV0YWluUHRyPENGU3Ry
aW5nUmVmPiBmb250TmFtZSA9IGFkb3B0Q0YoQ1RGb250Q29weVBvc3RTY3JpcHROYW1lKHJ1bkZv
bnQpKTsKKyAgICAgICAgICAgICAgICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBmb250TmFt
ZSA9IGFkb3B0Q0YoQ1RGb250Q29weVBvc3RTY3JpcHROYW1lKHJ1bkNURm9udCkpOwogICAgICAg
ICAgICAgICAgICAgICBpZiAoQ0ZFcXVhbChmb250TmFtZS5nZXQoKSwgQ0ZTVFIoIkxhc3RSZXNv
cnQiKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fY29tcGxleFRleHRSdW5zLmFwcGVu
ZChDb21wbGV4VGV4dFJ1bjo6Y3JlYXRlKG1fZm9udC5wcmltYXJ5Rm9udERhdGEoKSwgY3AsIHN0
cmluZ0xvY2F0aW9uICsgcnVuUmFuZ2UubG9jYXRpb24sIHJ1blJhbmdlLmxlbmd0aCwgbV9ydW4u
bHRyKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fY29tcGxleFRleHRSdW5zLmFwcGVu
ZChDb21wbGV4VGV4dFJ1bjo6Y3JlYXRlKG1fZm9udC5wcmltYXJ5Rm9udCgpLCBjcCwgc3RyaW5n
TG9jYXRpb24gKyBydW5SYW5nZS5sb2NhdGlvbiwgcnVuUmFuZ2UubGVuZ3RoLCBtX3J1bi5sdHIo
KSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcnVuRm9udERhdGEgPSBmb250Q2FjaGUoKS5mb250
Rm9yRmFtaWx5KG1fZm9udC5mb250RGVzY3JpcHRpb24oKSwgZm9udE5hbWUuZ2V0KCksIGZhbHNl
KS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgcnVuRm9udCA9IGZvbnRDYWNoZSgpLmZvbnRG
b3JGYW1pbHkobV9mb250LmZvbnREZXNjcmlwdGlvbigpLCBmb250TmFtZS5nZXQoKSwgZmFsc2Up
LmdldCgpOwogI2lmICFQTEFURk9STShJT1MpCiAgICAgICAgICAgICAgICAgICAgIC8vIENvcmUg
VGV4dCBtYXkgaGF2ZSB1c2VkIGEgZm9udCB0aGF0IGlzIG5vdCBrbm93biB0byBOU0ZvbnRNYW5h
Z2VyLiBJbiB0aGF0IGNhc2UsIGZhbGwgYmFjayBvbgogICAgICAgICAgICAgICAgICAgICAvLyB1
c2luZyB0aGUgZm9udCBhcyByZXR1cm5lZCwgZXZlbiB0aG91Z2ggaXQgbWF5IG5vdCBoYXZlIHRo
ZSBiZXN0IE5TRm9udFJlbmRlcmluZ01vZGUuCi0gICAgICAgICAgICAgICAgICAgIGlmICghcnVu
Rm9udERhdGEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEgcnVu
Rm9udFBsYXRmb3JtRGF0YSgoTlNGb250ICopcnVuRm9udCwgQ1RGb250R2V0U2l6ZShydW5Gb250
KSwgbV9mb250LmZvbnREZXNjcmlwdGlvbigpLnVzZVByaW50ZXJGb250KCkpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgcnVuRm9udERhdGEgPSAmZm9udENhY2hlKCkuZm9udEZvclBsYXRmb3Jt
RGF0YShydW5Gb250UGxhdGZvcm1EYXRhKS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCFydW5Gb250KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBGb250UGxhdGZvcm1EYXRhIHJ1
bkZvbnRQbGF0Zm9ybURhdGEoKE5TRm9udCAqKXJ1bkNURm9udCwgQ1RGb250R2V0U2l6ZShydW5D
VEZvbnQpLCBtX2ZvbnQuZm9udERlc2NyaXB0aW9uKCkudXNlUHJpbnRlckZvbnQoKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBydW5Gb250ID0gJmZvbnRDYWNoZSgpLmZvbnRGb3JQbGF0Zm9y
bURhdGEocnVuRm9udFBsYXRmb3JtRGF0YSkuZ2V0KCk7CiAgICAgICAgICAgICAgICAgICAgIH0K
ICNlbHNlCiAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBKdXN0IGFzc2VydCBmb3Igbm93
LCB1bnRpbCB3ZSBjYW4gZGV2aXNlIGEgYmV0dGVyIGZpeCB0aGF0IHdvcmtzIHdpdGggaU9TLgot
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQocnVuRm9udERhdGEpOworICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQocnVuRm9udCk7CiAjZW5kaWYKICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgaWYgKG1fZmFsbGJhY2tGb250cyAmJiBydW5Gb250RGF0YSAhPSAmbV9mb250LnBy
aW1hcnlGb250RGF0YSgpKQotICAgICAgICAgICAgICAgICAgICBtX2ZhbGxiYWNrRm9udHMtPmFk
ZChydW5Gb250RGF0YSk7CisgICAgICAgICAgICAgICAgaWYgKG1fZmFsbGJhY2tGb250cyAmJiBy
dW5Gb250ICE9ICZtX2ZvbnQucHJpbWFyeUZvbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgbV9m
YWxsYmFja0ZvbnRzLT5hZGQocnVuRm9udCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAg
ICAgICAgaWYgKG1fZmFsbGJhY2tGb250cyAmJiBydW5Gb250RGF0YSAhPSAmbV9mb250LnByaW1h
cnlGb250RGF0YSgpKQotICAgICAgICAgICAgbV9mYWxsYmFja0ZvbnRzLT5hZGQoZm9udERhdGEp
OworICAgICAgICBpZiAobV9mYWxsYmFja0ZvbnRzICYmIHJ1bkZvbnQgIT0gJm1fZm9udC5wcmlt
YXJ5Rm9udCgpKQorICAgICAgICAgICAgbV9mYWxsYmFja0ZvbnRzLT5hZGQoZm9udCk7CiAKLSAg
ICAgICAgbV9jb21wbGV4VGV4dFJ1bnMuYXBwZW5kKENvbXBsZXhUZXh0UnVuOjpjcmVhdGUoY3RS
dW4sICpydW5Gb250RGF0YSwgY3AsIHN0cmluZ0xvY2F0aW9uLCBsZW5ndGgsIHJ1blJhbmdlKSk7
CisgICAgICAgIG1fY29tcGxleFRleHRSdW5zLmFwcGVuZChDb21wbGV4VGV4dFJ1bjo6Y3JlYXRl
KGN0UnVuLCAqcnVuRm9udCwgY3AsIHN0cmluZ0xvY2F0aW9uLCBsZW5ndGgsIHJ1blJhbmdlKSk7
CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMv
Rm9udENhY2hlTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL21hYy9Gb250Q2FjaGVNYWMubW0JKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q2FjaGVNYWMubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTMzLDggKzMzLDggQEAKICNpZiAhUExBVEZPUk0oSU9TKQogCiAjaW1wb3J0ICJDb3Jl
R3JhcGhpY3NTUEkuaCIKKyNpbXBvcnQgIkZvbnQuaCIKICNpbXBvcnQgIkZvbnRDYXNjYWRlLmgi
Ci0jaW1wb3J0ICJTaW1wbGVGb250RGF0YS5oIgogI2ltcG9ydCAiRm9udFBsYXRmb3JtRGF0YS5o
IgogI2ltcG9ydCAiTlNGb250U1BJLmgiCiAjaW1wb3J0ICJXZWJDb3JlTlNTdHJpbmdFeHRyYXMu
aCIKQEAgLTMzNyw3ICszMzcsNyBAQCBzdGF0aWMgYm9vbCBzaG91bGRBdXRvQWN0aXZhdGVGb250
SWZOZWVkCiAgICAgcmV0dXJuIGtub3duRmFtaWxpZXMuZ2V0KCkuYWRkKGZhbWlseSkuaXNOZXdF
bnRyeTsKIH0KIAotUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OnN5c3RlbUZhbGxi
YWNrRm9yQ2hhcmFjdGVycyhjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25z
dCBTaW1wbGVGb250RGF0YSogb3JpZ2luYWxGb250RGF0YSwgYm9vbCBpc1BsYXRmb3JtRm9udCwg
Y29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCitSZWZQdHI8Rm9udD4gRm9udENh
Y2hlOjpzeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9uJiBk
ZXNjcmlwdGlvbiwgY29uc3QgRm9udCogb3JpZ2luYWxGb250RGF0YSwgYm9vbCBpc1BsYXRmb3Jt
Rm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCiB7CiAgICAgVUNoYXIz
MiBjaGFyYWN0ZXI7CiAgICAgVTE2X0dFVChjaGFyYWN0ZXJzLCAwLCAwLCBsZW5ndGgsIGNoYXJh
Y3Rlcik7CkBAIC00MDUsMzQgKzQwNSwzNSBAQCBSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRD
YWNoZTo6c3lzdGVtCiAgICAgcmV0dXJuIGZvbnRGb3JQbGF0Zm9ybURhdGEoYWx0ZXJuYXRlRm9u
dCk7CiB9CiAKLVJlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpzaW1pbGFyRm9udFBs
YXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQorUmVmUHRyPEZv
bnQ+IEZvbnRDYWNoZTo6c2ltaWxhckZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlw
dGlvbikKIHsKICAgICAvLyBBdHRlbXB0IHRvIGZpbmQgYW4gYXBwcm9wcmlhdGUgZm9udCB1c2lu
ZyBhIG1hdGNoIGJhc2VkIG9uIAogICAgIC8vIHRoZSBwcmVzZW5jZSBvZiBrZXl3b3JkcyBpbiB0
aGUgdGhlIHJlcXVlc3RlZCBuYW1lcy4gIEZvciBleGFtcGxlLCB3ZSdsbAogICAgIC8vIG1hdGNo
IGFueSBuYW1lIHRoYXQgY29udGFpbnMgIkFyYWJpYyIgdG8gR2VlemEgUHJvLgotICAgIFJlZlB0
cjxTaW1wbGVGb250RGF0YT4gc2ltcGxlRm9udERhdGE7CisgICAgUmVmUHRyPEZvbnQ+IGZvbnQ7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlc2NyaXB0aW9uLmZhbWlseUNvdW50KCk7
ICsraSkgewogICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSA9IGRlc2NyaXB0aW9u
LmZhbWlseUF0KGkpOwogICAgICAgICBpZiAoZmFtaWx5LmlzRW1wdHkoKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICBzdGF0aWMgU3RyaW5nKiBtYXRjaFdvcmRzWzNdID0geyBuZXcg
U3RyaW5nKCJBcmFiaWMiKSwgbmV3IFN0cmluZygiUGFzaHRvIiksIG5ldyBTdHJpbmcoIlVyZHUi
KSB9OwogICAgICAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5n
LCBnZWV6YVN0ciwgKCJHZWV6YSBQcm8iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRl
cmFsKSk7Ci0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgMyAmJiAhc2ltcGxlRm9udERhdGE7
ICsraikKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCAzICYmICFmb250OyArK2opIHsKICAg
ICAgICAgICAgIGlmIChmYW1pbHkuY29udGFpbnMoKm1hdGNoV29yZHNbal0sIGZhbHNlKSkKLSAg
ICAgICAgICAgICAgICBzaW1wbGVGb250RGF0YSA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24s
IGdlZXphU3RyKTsKKyAgICAgICAgICAgICAgICBmb250ID0gZm9udEZvckZhbWlseShkZXNjcmlw
dGlvbiwgZ2VlemFTdHIpOworICAgICAgICB9CiAgICAgfQotICAgIHJldHVybiBzaW1wbGVGb250
RGF0YS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIGZvbnQucmVsZWFzZSgpOwogfQogCi1SZWY8U2lt
cGxlRm9udERhdGE+IEZvbnRDYWNoZTo6bGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250
RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikKK1JlZjxGb250PiBGb250Q2FjaGU6Omxhc3RS
ZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24p
CiB7CiAgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgdGlt
ZXNTdHIsICgiVGltZXMiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7CiAK
ICAgICAvLyBGSVhNRTogV291bGQgYmUgZXZlbiBiZXR0ZXIgdG8gc29tZWhvdyBnZXQgdGhlIHVz
ZXIncyBkZWZhdWx0IGZvbnQgaGVyZS4gIEZvciBub3cgd2UnbGwgcGljawogICAgIC8vIHRoZSBk
ZWZhdWx0IHRoYXQgdGhlIHVzZXIgd291bGQgZ2V0IHdpdGhvdXQgY2hhbmdpbmcgYW55IHByZWZz
LgotICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gc2ltcGxlRm9udERhdGEgPSBmb250Rm9yRmFt
aWx5KGZvbnREZXNjcmlwdGlvbiwgdGltZXNTdHIsIGZhbHNlKTsKLSAgICBpZiAoc2ltcGxlRm9u
dERhdGEpCi0gICAgICAgIHJldHVybiAqc2ltcGxlRm9udERhdGE7CisgICAgUmVmUHRyPEZvbnQ+
IGZvbnQgPSBmb250Rm9yRmFtaWx5KGZvbnREZXNjcmlwdGlvbiwgdGltZXNTdHIsIGZhbHNlKTsK
KyAgICBpZiAoZm9udCkKKyAgICAgICAgcmV0dXJuICpmb250OwogCiAgICAgLy8gVGhlIFRpbWVz
IGZhbGxiYWNrIHdpbGwgYWxtb3N0IGFsd2F5cyB3b3JrLCBidXQgaW4gdGhlIGhpZ2hseSB1bnVz
dWFsIGNhc2Ugd2hlcmUKICAgICAvLyB0aGUgdXNlciBkb2Vzbid0IGhhdmUgaXQsIHdlIGZhbGwg
YmFjayBvbiBMdWNpZGEgR3JhbmRlIGJlY2F1c2UgdGhhdCdzCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR2x5cGhQYWdlTWFjLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR2x5cGhQYWdlTWFjLmNwcAkocmV2
aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ds
eXBoUGFnZU1hYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDggKzMxLDggQEAKIAogI2luY2x1
ZGUgIkNvcmVHcmFwaGljc1NQSS5oIgogI2luY2x1ZGUgIkNvcmVUZXh0U1BJLmgiCisjaW5jbHVk
ZSAiRm9udC5oIgogI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCi0jaW5jbHVkZSAiU2ltcGxlRm9u
dERhdGEuaCIKICNpbmNsdWRlICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCiAjaWYgIVBMQVRG
T1JNKElPUykKICNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2Vydmlj
ZXMuaD4KQEAgLTQwLDcgKzQwLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMg
Ym9vbCBzaG91bGRVc2VDb3JlVGV4dChjb25zdCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZm
ZXJMZW5ndGgsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSkKK3N0YXRpYyBib29sIHNo
b3VsZFVzZUNvcmVUZXh0KGNvbnN0IFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0
aCwgY29uc3QgRm9udCogZm9udERhdGEpCiB7CiAgICAgaWYgKGZvbnREYXRhLT5wbGF0Zm9ybURh
dGEoKS5pc0NvbXBvc2l0ZUZvbnRSZWZlcmVuY2UoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CkBA
IC01NSw3ICs1NSw3IEBAIHN0YXRpYyBib29sIHNob3VsZFVzZUNvcmVUZXh0KGNvbnN0IFVDaGEK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgR2x5cGhQYWdlOjptYXlVc2VNaXhlZEZvbnRE
YXRhV2hlbkZpbGxpbmcoY29uc3QgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3Ro
LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEpCitib29sIEdseXBoUGFnZTo6bWF5VXNl
TWl4ZWRGb250c1doZW5GaWxsaW5nKGNvbnN0IFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZl
ckxlbmd0aCwgY29uc3QgRm9udCogZm9udERhdGEpCiB7CiAjaWYgVVNFKEFQUEtJVCkKICAgICAv
LyBGSVhNRTogVGhpcyBpcyBvbmx5IHJlYWxseSBuZWVkZWQgZm9yIGNvbXBvc2l0ZSBmb250IHJl
ZmVyZW5jZXMuCkBAIC02OCw3ICs2OCw3IEBAIGJvb2wgR2x5cGhQYWdlOjptYXlVc2VNaXhlZEZv
bnREYXRhV2hlbkYKICNlbmRpZgogfQogCi1ib29sIEdseXBoUGFnZTo6ZmlsbCh1bnNpZ25lZCBv
ZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVu
Z3RoLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEpCitib29sIEdseXBoUGFnZTo6Zmls
bCh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgdW5zaWdu
ZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBGb250KiBmb250RGF0YSkKIHsKICAgICBib29sIGhhdmVH
bHlwaHMgPSBmYWxzZTsKIApAQCAtMTYzLDcgKzE2Myw3IEBAIGJvb2wgR2x5cGhQYWdlOjpmaWxs
KHVuc2lnbmVkIG9mZnNldCwgdW4KICAgICAgICAgICAgICAgICAgICAgfQogI2lmIFVTRShBUFBL
SVQpCiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgY29uc3Qg
U2ltcGxlRm9udERhdGEqIHJ1blNpbXBsZSA9IGZvbnREYXRhLT5jb21wb3NpdGVGb250UmVmZXJl
bmNlRm9udERhdGEoKE5TRm9udCAqKXJ1bkZvbnQpOworICAgICAgICAgICAgICAgICAgICBjb25z
dCBGb250KiBydW5TaW1wbGUgPSBmb250RGF0YS0+Y29tcG9zaXRlRm9udFJlZmVyZW5jZUZvbnQo
KE5TRm9udCAqKXJ1bkZvbnQpOwogICAgICAgICAgICAgICAgICAgICBpZiAocnVuU2ltcGxlKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCBnbHlwaENv
dW50OyArK2kpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyaW5nSW5kaWNl
c1tpXSA+PSBzdGF0aWNfY2FzdDxDRkluZGV4PihidWZmZXJMZW5ndGgpKSB7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFDb3JlVGV4dC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1Np
bXBsZUZvbnREYXRhQ29yZVRleHQuY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFDb3JlVGV4dC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKKyNpbmNsdWRlICJGb250LmgiCiAKICNpZiAh
UExBVEZPUk0oSU9TKQogI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25T
ZXJ2aWNlcy5oPgpAQCAtMzUsNyArMzUsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNG
RGljdGlvbmFyeVJlZiBTaW1wbGVGb250RGF0YTo6Z2V0Q0ZTdHJpbmdBdHRyaWJ1dGVzKFR5cGVz
ZXR0aW5nRmVhdHVyZXMgdHlwZXNldHRpbmdGZWF0dXJlcywgRm9udE9yaWVudGF0aW9uIG9yaWVu
dGF0aW9uKSBjb25zdAorQ0ZEaWN0aW9uYXJ5UmVmIEZvbnQ6OmdldENGU3RyaW5nQXR0cmlidXRl
cyhUeXBlc2V0dGluZ0ZlYXR1cmVzIHR5cGVzZXR0aW5nRmVhdHVyZXMsIEZvbnRPcmllbnRhdGlv
biBvcmllbnRhdGlvbikgY29uc3QKIHsKICAgICB1bnNpZ25lZCBrZXkgPSB0eXBlc2V0dGluZ0Zl
YXR1cmVzICsgMTsKICAgICBIYXNoTWFwPHVuc2lnbmVkLCBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5
UmVmPj46OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSBtX0NGU3RyaW5nQXR0cmlidXRlcy5hZGQoa2V5
LCBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPigpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YU1hYy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW0J
KHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9TaW1wbGVGb250RGF0YU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAog
ICovCiAKICNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiU2ltcGxlRm9udERhdGEuaCIKKyNp
bXBvcnQgIkZvbnQuaCIKIAogI2ltcG9ydCAiQmxvY2tFeGNlcHRpb25zLmgiCiAjaW1wb3J0ICJD
b2xvci5oIgpAQCAtNzEsNyArNzEsNyBAQCBzdGF0aWMgYm9vbCBmb250SGFzVmVydGljYWxHbHlw
aHMoQ1RGb250CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgYm9vbCBpbml0Rm9udERh
dGEoU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQorc3RhdGljIGJvb2wgaW5pdEZvbnREYXRhKEZv
bnQqIGZvbnREYXRhKQogewogICAgIGlmICghZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLmNnRm9u
dCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC04NSw3ICs4NSw3IEBAIHN0YXRpYyBOU1N0
cmluZyAqd2ViRmFsbGJhY2tGb250RmFtaWx5KHYKICAgICByZXR1cm4gd2ViRmFsbGJhY2tGb250
RmFtaWx5OwogfQogCi1jb25zdCBTaW1wbGVGb250RGF0YSogU2ltcGxlRm9udERhdGE6OmNvbXBv
c2l0ZUZvbnRSZWZlcmVuY2VGb250RGF0YShOU0ZvbnQgKmtleSkgY29uc3QKK2NvbnN0IEZvbnQq
IEZvbnQ6OmNvbXBvc2l0ZUZvbnRSZWZlcmVuY2VGb250KE5TRm9udCAqa2V5KSBjb25zdAogewog
ICAgIGlmICgha2V5IHx8IENGRXF1YWwoYWRvcHRDRihDVEZvbnRDb3B5UG9zdFNjcmlwdE5hbWUo
Q1RGb250UmVmKGtleSkpKS5nZXQoKSwgQ0ZTVFIoIkxhc3RSZXNvcnQiKSkpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwpAQCAtMTAzLDEyICsxMDMsMTIgQEAgY29uc3QgU2ltcGxlRm9udERhdGEq
IFNpbXBsZUZvbnREYXRhOjpjbwogICAgICAgICBib29sIHN5bnRoZXRpY09ibGlxdWUgPSBwbGF0
Zm9ybURhdGEoKS5zeW50aGV0aWNPYmxpcXVlKCkgJiYgISh0cmFpdHMgJiBrQ1RGb250SXRhbGlj
VHJhaXQpOwogCiAgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEgc3Vic3RpdHV0ZVBsYXRmb3JtKHN1
YnN0aXR1dGVGb250LCBwbGF0Zm9ybURhdGEoKS5zaXplKCksIGlzVXNpbmdQcmludGVyRm9udCwg
c3ludGhldGljQm9sZCwgc3ludGhldGljT2JsaXF1ZSwgcGxhdGZvcm1EYXRhKCkub3JpZW50YXRp
b24oKSwgcGxhdGZvcm1EYXRhKCkud2lkdGhWYXJpYW50KCkpOwotICAgICAgICBhZGRSZXN1bHQu
aXRlcmF0b3ItPnZhbHVlID0gU2ltcGxlRm9udERhdGE6OmNyZWF0ZShzdWJzdGl0dXRlUGxhdGZv
cm0sIGlzQ3VzdG9tRm9udCgpKTsKKyAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9
IEZvbnQ6OmNyZWF0ZShzdWJzdGl0dXRlUGxhdGZvcm0sIGlzQ3VzdG9tRm9udCgpKTsKICAgICB9
CiAgICAgcmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7CiB9CiAKLXZvaWQg
U2ltcGxlRm9udERhdGE6OnBsYXRmb3JtSW5pdCgpCit2b2lkIEZvbnQ6OnBsYXRmb3JtSW5pdCgp
CiB7CiAgICAgbV9zeW50aGV0aWNCb2xkT2Zmc2V0ID0gbV9wbGF0Zm9ybURhdGEubV9zeW50aGV0
aWNCb2xkID8gMS4wZiA6IDAuZjsKIApAQCAtMjI2LDcgKzIyNiw3IEBAIHZvaWQgU2ltcGxlRm9u
dERhdGE6OnBsYXRmb3JtSW5pdCgpCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHhIZWlnaHQg
PSBzY2FsZUVtVG9Vbml0cyhDR0ZvbnRHZXRYSGVpZ2h0KG1fcGxhdGZvcm1EYXRhLmNnRm9udCgp
KSwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemU7CiAgICAgfSBlbHNlCi0gICAgICAgIHhIZWlnaHQg
PSB2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250RGF0YSgpLT5mb250TWV0cmljcygpLnhIZWln
aHQoKTsKKyAgICAgICAgeEhlaWdodCA9IHZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbkZvbnQoKS0+
Zm9udE1ldHJpY3MoKS54SGVpZ2h0KCk7CiAKICAgICBtX2ZvbnRNZXRyaWNzLnNldFVuaXRzUGVy
RW0odW5pdHNQZXJFbSk7CiAgICAgbV9mb250TWV0cmljcy5zZXRBc2NlbnQoYXNjZW50KTsKQEAg
LTI0MSw3ICsyNDEsNyBAQCBzdGF0aWMgQ0ZEYXRhUmVmIGNvcHlGb250VGFibGVGb3JUYWcoRm9u
CiAgICAgcmV0dXJuIENHRm9udENvcHlUYWJsZUZvclRhZyhwbGF0Zm9ybURhdGEuY2dGb250KCks
IHRhYmxlTmFtZSk7CiB9CiAKLXZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQ2hhcldpZHRo
SW5pdCgpCit2b2lkIEZvbnQ6OnBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpCiB7CiAgICAgbV9hdmdD
aGFyV2lkdGggPSAwOwogICAgIG1fbWF4Q2hhcldpZHRoID0gMDsKQEAgLTI2OSwxNyArMjY5LDE3
IEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQ2hhcldpZHRoSW4KIH0KICNlbmRpZiAv
LyBVU0UoQVBQS0lUKQogCi12b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybURlc3Ryb3koKQor
dm9pZCBGb250OjpwbGF0Zm9ybURlc3Ryb3koKQogewogfQogCiAjaWYgIVBMQVRGT1JNKElPUykK
LVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUNyZWF0
ZVNjYWxlZEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBm
bG9hdCBzY2FsZUZhY3RvcikgY29uc3QKK1Bhc3NSZWZQdHI8Rm9udD4gRm9udDo6cGxhdGZvcm1D
cmVhdGVTY2FsZWRGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBm
bG9hdCBzY2FsZUZhY3RvcikgY29uc3QKIHsKICAgICBpZiAoaXNDdXN0b21Gb250KCkpIHsKICAg
ICAgICAgRm9udFBsYXRmb3JtRGF0YSBzY2FsZWRGb250RGF0YShtX3BsYXRmb3JtRGF0YSk7CiAg
ICAgICAgIHNjYWxlZEZvbnREYXRhLm1fc2l6ZSA9IHNjYWxlZEZvbnREYXRhLm1fc2l6ZSAqIHNj
YWxlRmFjdG9yOwotICAgICAgICByZXR1cm4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZShzY2FsZWRG
b250RGF0YSwgdHJ1ZSwgZmFsc2UpOworICAgICAgICByZXR1cm4gRm9udDo6Y3JlYXRlKHNjYWxl
ZEZvbnREYXRhLCB0cnVlLCBmYWxzZSk7CiAgICAgfQogCiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19F
WENFUFRJT05TOwpAQCAtMzEwLDcgKzMxMCw3IEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+
IFNpbXBsZUZvbnREYXQKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBTaW1wbGVGb250RGF0YTo6
ZGV0ZXJtaW5lUGl0Y2goKQordm9pZCBGb250OjpkZXRlcm1pbmVQaXRjaCgpCiB7CiAgICAgTlNG
b250KiBmID0gbV9wbGF0Zm9ybURhdGEubnNGb250KCk7CiAgICAgLy8gU3BlY2lhbCBjYXNlIE9z
YWthLU1vbm8uCkBAIC0zMzMsNyArMzMzLDcgQEAgdm9pZCBTaW1wbGVGb250RGF0YTo6ZGV0ZXJt
aW5lUGl0Y2goKQogfQogI2VuZGlmIC8vICFQTEFURk9STShJT1MpCiAKLUZsb2F0UmVjdCBTaW1w
bGVGb250RGF0YTo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKK0Zs
b2F0UmVjdCBGb250OjpwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAog
ewogICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveDsKICAgICBib3VuZGluZ0JveCA9IENURm9udEdl
dEJvdW5kaW5nUmVjdHNGb3JHbHlwaHMobV9wbGF0Zm9ybURhdGEuY3RGb250KCksIHBsYXRmb3Jt
RGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwgPyBrQ1RGb250VmVydGljYWxPcmllbnRh
dGlvbiA6IGtDVEZvbnRIb3Jpem9udGFsT3JpZW50YXRpb24sICZnbHlwaCwgMCwgMSk7CkBAIC0z
NDUsNyArMzQ1LDcgQEAgRmxvYXRSZWN0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUJvdW5kcwog
fQogCiAjaWYgUExBVEZPUk0oTUFDKQotaW5saW5lIENHRm9udFJlbmRlcmluZ1N0eWxlIFNpbXBs
ZUZvbnREYXRhOjpyZW5kZXJpbmdTdHlsZSgpIGNvbnN0CitpbmxpbmUgQ0dGb250UmVuZGVyaW5n
U3R5bGUgRm9udDo6cmVuZGVyaW5nU3R5bGUoKSBjb25zdAogewogICAgIENHRm9udFJlbmRlcmlu
Z1N0eWxlIHN0eWxlID0ga0NHRm9udFJlbmRlcmluZ1N0eWxlQW50aWFsaWFzaW5nIHwga0NHRm9u
dFJlbmRlcmluZ1N0eWxlU3VicGl4ZWxQb3NpdGlvbmluZyB8IGtDR0ZvbnRSZW5kZXJpbmdTdHls
ZVN1YnBpeGVsUXVhbnRpemF0aW9uOwogICAgIE5TRm9udCAqZm9udCA9IHBsYXRmb3JtRGF0YSgp
Lm5zRm9udCgpOwpAQCAtMzY0LDcgKzM2NCw3IEBAIGlubGluZSBDR0ZvbnRSZW5kZXJpbmdTdHls
ZSBTaW1wbGVGb250RGEKICAgICByZXR1cm4gc3R5bGU7CiB9CiAKLWlubGluZSBib29sIFNpbXBs
ZUZvbnREYXRhOjphZHZhbmNlRm9yQ29sb3JCaXRtYXBGb250KEdseXBoIGdseXBoLCBDR1NpemUm
IGFkdmFuY2UpIGNvbnN0CitpbmxpbmUgYm9vbCBGb250OjphZHZhbmNlRm9yQ29sb3JCaXRtYXBG
b250KEdseXBoIGdseXBoLCBDR1NpemUmIGFkdmFuY2UpIGNvbnN0CiB7CiAgICAgTlNGb250ICpm
b250ID0gcGxhdGZvcm1EYXRhKCkubnNGb250KCk7CiAgICAgaWYgKCFmb250IHx8ICFwbGF0Zm9y
bURhdGEoKS5pc0NvbG9yQml0bWFwRm9udCgpKQpAQCAtMzk0LDcgKzM5NCw3IEBAIHN0YXRpYyBp
bmxpbmUgYm9vbCBpc0Vtb2ppKGNvbnN0IEZvbnRQbGEKICNlbmRpZgogfQogCi1pbmxpbmUgYm9v
bCBTaW1wbGVGb250RGF0YTo6Y2FuVXNlRmFzdEdseXBoQWR2YW5jZUdldHRlcihHbHlwaCBnbHlw
aCwgQ0dTaXplJiBhZHZhbmNlLCBib29sJiBwb3B1bGF0ZWRBZHZhbmNlKSBjb25zdAoraW5saW5l
IGJvb2wgRm9udDo6Y2FuVXNlRmFzdEdseXBoQWR2YW5jZUdldHRlcihHbHlwaCBnbHlwaCwgQ0dT
aXplJiBhZHZhbmNlLCBib29sJiBwb3B1bGF0ZWRBZHZhbmNlKSBjb25zdAogewogICAgIC8vIEZh
c3QgZ2V0dGVyIGRvZXNuJ3QgdGFrZSBjdXN0b20gdHJhY2tpbmcgaW50byBhY2NvdW50CiAgICAg
aWYgKGhhc0N1c3RvbVRyYWNraW5nKHBsYXRmb3JtRGF0YSgpLmN0Rm9udCgpKSkKQEAgLTQxMCw3
ICs0MTAsNyBAQCBpbmxpbmUgYm9vbCBTaW1wbGVGb250RGF0YTo6Y2FuVXNlRmFzdEdsCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLWZsb2F0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybVdpZHRoRm9y
R2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CitmbG9hdCBGb250OjpwbGF0Zm9ybVdpZHRoRm9yR2x5
cGgoR2x5cGggZ2x5cGgpIGNvbnN0CiB7CiAgICAgQ0dTaXplIGFkdmFuY2UgPSBDR1NpemVaZXJv
OwogICAgIGJvb2wgaG9yaXpvbnRhbCA9IHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0g
SG9yaXpvbnRhbDsKQEAgLTQ0Niw3ICs0NDYsNyBAQCBzdGF0aWMgY29uc3QgVW5pQ2hhciogcHJv
dmlkZVN0cmluZ0FuZEF0CiAgICAgcmV0dXJuIGluZm8tPmNoYXJhY3RlcnMgKyBzdHJpbmdJbmRl
eDsKIH0KIAotYm9vbCBTaW1wbGVGb250RGF0YTo6Y2FuUmVuZGVyQ29tYmluaW5nQ2hhcmFjdGVy
U2VxdWVuY2UoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpIGNvbnN0Citi
b29sIEZvbnQ6OmNhblJlbmRlckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVDaGFy
KiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKSBjb25zdAogewogICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW50
eXBlL09wZW5UeXBlTWF0aERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlTWF0aERhdGEuY3BwCShyZXZpc2lvbiAx
Nzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVu
VHlwZU1hdGhEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTIgKzI2LDEyIEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiT3BlblR5cGVNYXRoRGF0YS5oIgogCisjaW5jbHVk
ZSAiRm9udC5oIgogI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKICNpZiBFTkFCTEUoT1BF
TlRZUEVfTUFUSCkKICNpbmNsdWRlICJPcGVuVHlwZVR5cGVzLmgiCiAjZW5kaWYKICNpbmNsdWRl
ICJTaGFyZWRCdWZmZXIuaCIKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgogCiB1c2luZyBu
YW1lc3BhY2Ugc3RkOwogCkBAIC0yMzUsOSArMjM1LDkgQEAgc3RydWN0IE1BVEhUYWJsZSA6IFRh
YmxlQmFzZSB7CiAjZW5kaWYgLy8gRU5BQkxFKE9QRU5UWVBFX01BVEgpCiAKICNpZiBFTkFCTEUo
T1BFTlRZUEVfTUFUSCkKLU9wZW5UeXBlTWF0aERhdGE6Ok9wZW5UeXBlTWF0aERhdGEoY29uc3Qg
Rm9udFBsYXRmb3JtRGF0YSYgZm9udERhdGEpCitPcGVuVHlwZU1hdGhEYXRhOjpPcGVuVHlwZU1h
dGhEYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnQpCiB7Ci0gICAgbV9tYXRoQnVmZmVy
ID0gZm9udERhdGEub3BlblR5cGVUYWJsZShPcGVuVHlwZTo6TUFUSFRhZyk7CisgICAgbV9tYXRo
QnVmZmVyID0gZm9udC5vcGVuVHlwZVRhYmxlKE9wZW5UeXBlOjpNQVRIVGFnKTsKICAgICBjb25z
dCBPcGVuVHlwZTo6TUFUSFRhYmxlKiBtYXRoID0gT3BlblR5cGU6OnZhbGlkYXRlVGFibGU8T3Bl
blR5cGU6Ok1BVEhUYWJsZT4obV9tYXRoQnVmZmVyKTsKICAgICBpZiAoIW1hdGgpIHsKICAgICAg
ICAgbV9tYXRoQnVmZmVyID0gbnVsbHB0cjsKQEAgLTI2NSw3ICsyNjUsNyBAQCBPcGVuVHlwZU1h
dGhEYXRhOjp+T3BlblR5cGVNYXRoRGF0YSgpCiB9CiAKICNpZiBFTkFCTEUoT1BFTlRZUEVfTUFU
SCkKLWZsb2F0IE9wZW5UeXBlTWF0aERhdGE6OmdldE1hdGhDb25zdGFudChjb25zdCBTaW1wbGVG
b250RGF0YSYgZm9udCwgTWF0aENvbnN0YW50IGNvbnN0YW50KSBjb25zdAorZmxvYXQgT3BlblR5
cGVNYXRoRGF0YTo6Z2V0TWF0aENvbnN0YW50KGNvbnN0IEZvbnQmIGZvbnQsIE1hdGhDb25zdGFu
dCBjb25zdGFudCkgY29uc3QKIHsKICAgICBpbnQzMl90IHZhbHVlID0gMDsKIApAQCAtMjg4LDcg
KzI4OCw3IEBAIGZsb2F0IE9wZW5UeXBlTWF0aERhdGE6OmdldE1hdGhDb25zdGFudCgKIAogICAg
IHJldHVybiB2YWx1ZSAqIGZvbnQuc2l6ZVBlclVuaXQoKTsKICNlbHNlCi1mbG9hdCBPcGVuVHlw
ZU1hdGhEYXRhOjpnZXRNYXRoQ29uc3RhbnQoY29uc3QgU2ltcGxlRm9udERhdGEmLCBNYXRoQ29u
c3RhbnQpIGNvbnN0CitmbG9hdCBPcGVuVHlwZU1hdGhEYXRhOjpnZXRNYXRoQ29uc3RhbnQoY29u
c3QgRm9udCYsIE1hdGhDb25zdGFudCkgY29uc3QKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICByZXR1cm4gMDsKQEAgLTI5Niw3ICsyOTYsNyBAQCBmbG9hdCBPcGVuVHlwZU1hdGhE
YXRhOjpnZXRNYXRoQ29uc3RhbnQoCiB9CiAKICNpZiBFTkFCTEUoT1BFTlRZUEVfTUFUSCkKLWZs
b2F0IE9wZW5UeXBlTWF0aERhdGE6OmdldEl0YWxpY0NvcnJlY3Rpb24oY29uc3QgU2ltcGxlRm9u
dERhdGEmIGZvbnQsIEdseXBoIGdseXBoKSBjb25zdAorZmxvYXQgT3BlblR5cGVNYXRoRGF0YTo6
Z2V0SXRhbGljQ29ycmVjdGlvbihjb25zdCBGb250JiBmb250LCBHbHlwaCBnbHlwaCkgY29uc3QK
IHsKICAgICBjb25zdCBPcGVuVHlwZTo6TUFUSFRhYmxlKiBtYXRoID0gT3BlblR5cGU6OnZhbGlk
YXRlVGFibGU8T3BlblR5cGU6Ok1BVEhUYWJsZT4obV9tYXRoQnVmZmVyKTsKICAgICBBU1NFUlQo
bWF0aCk7CkBAIC0zMTAsNyArMzEwLDcgQEAgZmxvYXQgT3BlblR5cGVNYXRoRGF0YTo6Z2V0SXRh
bGljQ29ycmVjdAogCiAgICAgcmV0dXJuIG1hdGhJdGFsaWNzQ29ycmVjdGlvbkluZm8tPmdldEl0
YWxpY0NvcnJlY3Rpb24oKm1fbWF0aEJ1ZmZlciwgZ2x5cGgpICogZm9udC5zaXplUGVyVW5pdCgp
OwogI2Vsc2UKLWZsb2F0IE9wZW5UeXBlTWF0aERhdGE6OmdldEl0YWxpY0NvcnJlY3Rpb24oY29u
c3QgU2ltcGxlRm9udERhdGEmLCBHbHlwaCkgY29uc3QKK2Zsb2F0IE9wZW5UeXBlTWF0aERhdGE6
OmdldEl0YWxpY0NvcnJlY3Rpb24oY29uc3QgRm9udCYsIEdseXBoKSBjb25zdAogewogICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiAwOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVNYXRoRGF0YS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlTWF0
aERhdGEuaAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVNYXRoRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwx
MyArMzUsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGb250UGxhdGZvcm1EYXRh
OwogY2xhc3MgU2hhcmVkQnVmZmVyOwotY2xhc3MgU2ltcGxlRm9udERhdGE7CitjbGFzcyBGb250
OwogCiBjbGFzcyBPcGVuVHlwZU1hdGhEYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8T3BlblR5cGVN
YXRoRGF0YT4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPE9wZW5UeXBlTWF0aERh
dGE+IGNyZWF0ZShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBmb250RGF0YSkKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxPcGVuVHlwZU1hdGhEYXRhPiBjcmVhdGUoY29uc3QgRm9udFBsYXRmb3JtRGF0
YSYgZm9udCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgT3BlblR5cGVNYXRo
RGF0YShmb250RGF0YSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE9wZW5UeXBlTWF0
aERhdGEoZm9udCkpOwogICAgIH0KICAgICB+T3BlblR5cGVNYXRoRGF0YSgpOwogCkBAIC0xMTMs
OCArMTEzLDggQEAgcHVibGljOgogICAgICAgICBib29sIGlzRXh0ZW5kZXI7CiAgICAgfTsKIAot
ICAgIGZsb2F0IGdldE1hdGhDb25zdGFudChjb25zdCBTaW1wbGVGb250RGF0YSYsIE1hdGhDb25z
dGFudCkgY29uc3Q7Ci0gICAgZmxvYXQgZ2V0SXRhbGljQ29ycmVjdGlvbihjb25zdCBTaW1wbGVG
b250RGF0YSYsIEdseXBoKSBjb25zdDsKKyAgICBmbG9hdCBnZXRNYXRoQ29uc3RhbnQoY29uc3Qg
Rm9udCYsIE1hdGhDb25zdGFudCkgY29uc3Q7CisgICAgZmxvYXQgZ2V0SXRhbGljQ29ycmVjdGlv
bihjb25zdCBGb250JiwgR2x5cGgpIGNvbnN0OwogICAgIHZvaWQgZ2V0TWF0aFZhcmlhbnRzKEds
eXBoLCBib29sIGlzVmVydGljYWwsIFZlY3RvcjxHbHlwaD4mIHNpemVWYXJpYW50cywgVmVjdG9y
PEFzc2VtYmx5UGFydD4mIGFzc2VtYmx5UGFydHMpIGNvbnN0OwogCiBwcml2YXRlOgpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAkocmV2aXNpb24gMTc4
ODU3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NDksNyArNDQ5LDcgQEAgYm9vbCBJbmxpbmVGbG93Qm94OjpyZXF1aXJl
c0lkZW9ncmFwaGljQgogCiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIGxpbmVTdHlsZSA9IHRoaXMt
PmxpbmVTdHlsZSgpOwogICAgIGlmIChsaW5lU3R5bGUuZm9udERlc2NyaXB0aW9uKCkubm9uQ0pL
R2x5cGhPcmllbnRhdGlvbigpID09IE5vbkNKS0dseXBoT3JpZW50YXRpb25VcHJpZ2h0Ci0gICAg
ICAgIHx8IGxpbmVTdHlsZS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmhhc1ZlcnRp
Y2FsR2x5cGhzKCkpCisgICAgICAgIHx8IGxpbmVTdHlsZS5mb250Q2FzY2FkZSgpLnByaW1hcnlG
b250KCkuaGFzVmVydGljYWxHbHlwaHMoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBm
b3IgKElubGluZUJveCogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxk
LT5uZXh0T25MaW5lKCkpIHsKQEAgLTQ2MCwxOCArNDYwLDE4IEBAIGJvb2wgSW5saW5lRmxvd0Jv
eDo6cmVxdWlyZXNJZGVvZ3JhcGhpY0IKICAgICAgICAgICAgIGlmIChkb3duY2FzdDxJbmxpbmVG
bG93Qm94PigqY2hpbGQpLnJlcXVpcmVzSWRlb2dyYXBoaWNCYXNlbGluZSh0ZXh0Qm94RGF0YU1h
cCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBpZiAoY2hpbGQtPmxpbmVTdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnRE
YXRhKCkuaGFzVmVydGljYWxHbHlwaHMoKSkKKyAgICAgICAgICAgIGlmIChjaGlsZC0+bGluZVN0
eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpLmhhc1ZlcnRpY2FsR2x5cGhzKCkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNv
bnN0IFZlY3Rvcjxjb25zdCBTaW1wbGVGb250RGF0YSo+KiB1c2VkRm9udHMgPSBudWxscHRyOwor
ICAgICAgICAgICAgY29uc3QgVmVjdG9yPGNvbnN0IEZvbnQqPiogdXNlZEZvbnRzID0gbnVsbHB0
cjsKICAgICAgICAgICAgIGlmIChpczxJbmxpbmVUZXh0Qm94PigqY2hpbGQpKSB7CiAgICAgICAg
ICAgICAgICAgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gdGV4dEJveERhdGFNYXAuZmluZChkb3duY2FzdDxJbmxpbmVUZXh0Qm94PihjaGlsZCkp
OwogICAgICAgICAgICAgICAgIHVzZWRGb250cyA9IGl0ID09IHRleHRCb3hEYXRhTWFwLmVuZCgp
ID8gbnVsbHB0ciA6ICZpdC0+dmFsdWUuZmlyc3Q7CiAgICAgICAgICAgICB9CiAKICAgICAgICAg
ICAgIGlmICh1c2VkRm9udHMpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFNpbXBsZUZv
bnREYXRhKiBmb250RGF0YSA6ICp1c2VkRm9udHMpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KGZvbnREYXRhLT5oYXNWZXJ0aWNhbEdseXBocygpKQorICAgICAgICAgICAgICAgIGZvciAoY29u
c3QgRm9udCogZm9udCA6ICp1c2VkRm9udHMpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGZv
bnQtPmhhc1ZlcnRpY2FsR2x5cGhzKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmgJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTMx
LDEyICszMSwxMiBAQCBjbGFzcyBIaXRUZXN0UmVxdWVzdDsKIGNsYXNzIEhpdFRlc3RSZXN1bHQ7
CiBjbGFzcyBJbmxpbmVUZXh0Qm94OwogY2xhc3MgUmVuZGVyTGluZUJveExpc3Q7Ci1jbGFzcyBT
aW1wbGVGb250RGF0YTsKK2NsYXNzIEZvbnQ7CiBjbGFzcyBWZXJ0aWNhbFBvc2l0aW9uQ2FjaGU7
CiAKIHN0cnVjdCBHbHlwaE92ZXJmbG93OwogCi10eXBlZGVmIEhhc2hNYXA8Y29uc3QgSW5saW5l
VGV4dEJveCosIHN0ZDo6cGFpcjxWZWN0b3I8Y29uc3QgU2ltcGxlRm9udERhdGEqPiwgR2x5cGhP
dmVyZmxvdz4+IEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwOwordHlwZWRlZiBIYXNo
TWFwPGNvbnN0IElubGluZVRleHRCb3gqLCBzdGQ6OnBhaXI8VmVjdG9yPGNvbnN0IEZvbnQqPiwg
R2x5cGhPdmVyZmxvdz4+IEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwOwogCiBjbGFz
cyBJbmxpbmVGbG93Qm94IDogcHVibGljIElubGluZUJveCB7CiBwdWJsaWM6CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCShyZXZpc2lvbiAxNzg4NTcp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEzODEsNyArMTM4MSw3IEBAIFRleHRSdW4gSW5saW5lVGV4dEJveDo6Y29uc3Ry
dWN0VGV4dFJ1bigKIAogICAgIFRleHRSdW4gcnVuKHN0cmluZywgdGV4dFBvcygpLCBleHBhbnNp
b24oKSwgZXhwYW5zaW9uQmVoYXZpb3IoKSwgZGlyZWN0aW9uKCksIGRpck92ZXJyaWRlKCkgfHwg
c3R5bGUucnRsT3JkZXJpbmcoKSA9PSBWaXN1YWxPcmRlciwgIXJlbmRlcmVyKCkuY2FuVXNlU2lt
cGxlRm9udENvZGVQYXRoKCkpOwogICAgIHJ1bi5zZXRUYWJTaXplKCFzdHlsZS5jb2xsYXBzZVdo
aXRlU3BhY2UoKSwgc3R5bGUudGFiU2l6ZSgpKTsKLSAgICBpZiAoZm9udC5wcmltYXJ5Rm9udERh
dGEoKS5pc1NWR0ZvbnQoKSkKKyAgICBpZiAoZm9udC5wcmltYXJ5Rm9udCgpLmlzU1ZHRm9udCgp
KQogICAgICAgICBydW4uc2V0UmVuZGVyaW5nQ29udGV4dChTVkdUZXh0UnVuUmVuZGVyaW5nQ29u
dGV4dDo6Y3JlYXRlKHJlbmRlcmVyKCkpKTsKIAogICAgIC8vIFByb3BhZ2F0ZSB0aGUgbWF4aW11
bSBsZW5ndGggb2YgdGhlIGNoYXJhY3RlcnMgYnVmZmVyIHRvIHRoZSBUZXh0UnVuLCBldmVuIHdo
ZW4gd2UncmUgb25seSBwcm9jZXNzaW5nIGEgc3Vic3RyaW5nLgpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzI1
LDcgKzIzMjUsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjphZGp1c3RMb2dpY2FsTGVmCiAg
ICAgICAgIHJldHVybiBsZWZ0OwogCiAgICAgLy8gRklYTUU6IFNob3VsZCBsZXR0ZXItc3BhY2lu
ZyBhcHBseT8gVGhpcyBpcyBjb21wbGljYXRlZCBzaW5jZSBpdCBkb2Vzbid0IGFwcGx5IGF0IHRo
ZSBlZGdlPwotICAgIGZsb2F0IG1heENoYXJXaWR0aCA9IGxpbmVHcmlkLT5zdHlsZSgpLmZvbnRD
YXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkubWF4Q2hhcldpZHRoKCk7CisgICAgZmxvYXQgbWF4
Q2hhcldpZHRoID0gbGluZUdyaWQtPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgp
Lm1heENoYXJXaWR0aCgpOwogICAgIGlmICghbWF4Q2hhcldpZHRoKQogICAgICAgICByZXR1cm4g
bGVmdDsKIApAQCAtMjM2NSw3ICsyMzY1LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6YWRq
dXN0TG9naWNhbFJpZwogICAgICAgICByZXR1cm4gcmlnaHQ7CiAKICAgICAvLyBGSVhNRTogU2hv
dWxkIGxldHRlci1zcGFjaW5nIGFwcGx5PyBUaGlzIGlzIGNvbXBsaWNhdGVkIHNpbmNlIGl0IGRv
ZXNuJ3QgYXBwbHkgYXQgdGhlIGVkZ2U/Ci0gICAgZmxvYXQgbWF4Q2hhcldpZHRoID0gbGluZUdy
aWQtPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5tYXhDaGFyV2lkdGgo
KTsKKyAgICBmbG9hdCBtYXhDaGFyV2lkdGggPSBsaW5lR3JpZC0+c3R5bGUoKS5mb250Q2FzY2Fk
ZSgpLnByaW1hcnlGb250KCkubWF4Q2hhcldpZHRoKCk7CiAgICAgaWYgKCFtYXhDaGFyV2lkdGgp
CiAgICAgICAgIHJldHVybiByaWdodDsKIApAQCAtMzcwNSw3ICszNzA1LDcgQEAgc3RhdGljIGlu
bGluZSBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW5JbgogICAgIGJvb2wgZGlyZWN0aW9uYWxPdmVy
cmlkZSA9IHN0eWxlLnJ0bE9yZGVyaW5nKCkgPT0gVmlzdWFsT3JkZXI7CiAKICAgICBUZXh0UnVu
IHJ1bihjaGFyYWN0ZXJzLCBsZW5ndGgsIDAsIDAsIGV4cGFuc2lvbiwgdGV4dERpcmVjdGlvbiwg
ZGlyZWN0aW9uYWxPdmVycmlkZSk7Ci0gICAgaWYgKGZvbnQucHJpbWFyeUZvbnREYXRhKCkuaXNT
VkdGb250KCkpIHsKKyAgICBpZiAoZm9udC5wcmltYXJ5Rm9udCgpLmlzU1ZHRm9udCgpKSB7CiAg
ICAgICAgIEFTU0VSVChjb250ZXh0KTsgLy8gRklYTUU6IFRocmVhZCBhIFJlbmRlck9iamVjdCYg
dG8gdGhpcyBwb2ludCBzbyB3ZSBkb24ndCBoYXZlIHRvIGRlcmVmZXJlbmNlIGFueXRoaW5nLgog
ICAgICAgICBydW4uc2V0UmVuZGVyaW5nQ29udGV4dChTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4
dDo6Y3JlYXRlKCpjb250ZXh0KSk7CiAgICAgfQpAQCAtMzcyNSw3ICszNzI1LDcgQEAgc3RhdGlj
IGlubGluZSBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW5JbgogICAgICAgICAgICAgZGlyZWN0aW9u
YWxPdmVycmlkZSB8PSBpc092ZXJyaWRlKHN0eWxlLnVuaWNvZGVCaWRpKCkpOwogICAgIH0KICAg
ICBUZXh0UnVuIHJ1bihjaGFyYWN0ZXJzLCBsZW5ndGgsIDAsIDAsIGV4cGFuc2lvbiwgdGV4dERp
cmVjdGlvbiwgZGlyZWN0aW9uYWxPdmVycmlkZSk7Ci0gICAgaWYgKGZvbnQucHJpbWFyeUZvbnRE
YXRhKCkuaXNTVkdGb250KCkpIHsKKyAgICBpZiAoZm9udC5wcmltYXJ5Rm9udCgpLmlzU1ZHRm9u
dCgpKSB7CiAgICAgICAgIEFTU0VSVChjb250ZXh0KTsgLy8gRklYTUU6IFRocmVhZCBhIFJlbmRl
ck9iamVjdCYgdG8gdGhpcyBwb2ludCBzbyB3ZSBkb24ndCBoYXZlIHRvIGRlcmVmZXJlbmNlIGFu
eXRoaW5nLgogICAgICAgICBydW4uc2V0UmVuZGVyaW5nQ29udGV4dChTVkdUZXh0UnVuUmVuZGVy
aW5nQ29udGV4dDo6Y3JlYXRlKCpjb250ZXh0KSk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAJKHJldmlzaW9u
IDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlv
dXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTgsNyArNDU4LDcgQEAgdm9pZCBSZW5kZXJCbG9j
a0Zsb3c6OnNldE1hcmdpbnNGb3JSdWJ5Ugogc3RhdGljIGlubGluZSB2b2lkIHNldExvZ2ljYWxX
aWR0aEZvclRleHRSdW4oUm9vdElubGluZUJveCogbGluZUJveCwgQmlkaVJ1biogcnVuLCBSZW5k
ZXJUZXh0KiByZW5kZXJlciwgZmxvYXQgeFBvcywgY29uc3QgTGluZUluZm8mIGxpbmVJbmZvLAog
ICAgIEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwJiB0ZXh0Qm94RGF0YU1hcCwgVmVy
dGljYWxQb3NpdGlvbkNhY2hlJiB2ZXJ0aWNhbFBvc2l0aW9uQ2FjaGUsIFdvcmRNZWFzdXJlbWVu
dHMmIHdvcmRNZWFzdXJlbWVudHMpCiB7Ci0gICAgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0
YSo+IGZhbGxiYWNrRm9udHM7CisgICAgSGFzaFNldDxjb25zdCBGb250Kj4gZmFsbGJhY2tGb250
czsKICAgICBHbHlwaE92ZXJmbG93IGdseXBoT3ZlcmZsb3c7CiAKICAgICBjb25zdCBGb250Q2Fz
Y2FkZSYgZm9udCA9IGxpbmVTdHlsZSgqcmVuZGVyZXItPnBhcmVudCgpLCBsaW5lSW5mbykuZm9u
dENhc2NhZGUoKTsKQEAgLTUwOSw4ICs1MDksOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0TG9n
aWNhbFdpZHRoRm9yVGV4CiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICBtZWFz
dXJlZFdpZHRoICs9IHdvcmRNZWFzdXJlbWVudC53aWR0aDsKICAgICAgICAgICAgIGlmICghd29y
ZE1lYXN1cmVtZW50LmZhbGxiYWNrRm9udHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAg
SGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSB3b3Jk
TWVhc3VyZW1lbnQuZmFsbGJhY2tGb250cy5lbmQoKTsKLSAgICAgICAgICAgICAgICBmb3IgKEhh
c2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSB3b3JkTWVh
c3VyZW1lbnQuZmFsbGJhY2tGb250cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAg
ICAgICAgICAgSGFzaFNldDxjb25zdCBGb250Kj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHdvcmRN
ZWFzdXJlbWVudC5mYWxsYmFja0ZvbnRzLmVuZCgpOworICAgICAgICAgICAgICAgIGZvciAoSGFz
aFNldDxjb25zdCBGb250Kj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gd29yZE1lYXN1cmVtZW50LmZh
bGxiYWNrRm9udHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQogICAgICAgICAgICAgICAgICAg
ICBmYWxsYmFja0ZvbnRzLmFkZCgqaXQpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC01
MjcsNyArNTI3LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldExvZ2ljYWxXaWR0aEZvclRleAog
ICAgIHJ1bi0+Ym94KCktPnNldExvZ2ljYWxXaWR0aChtZWFzdXJlZFdpZHRoICsgaHlwaGVuV2lk
dGgpOwogICAgIGlmICghZmFsbGJhY2tGb250cy5pc0VtcHR5KCkpIHsKICAgICAgICAgQVNTRVJU
KHJ1bi0+Ym94KCktPmJlaGF2ZXNMaWtlVGV4dCgpKTsKLSAgICAgICAgR2x5cGhPdmVyZmxvd0Fu
ZEZhbGxiYWNrRm9udHNNYXA6Oml0ZXJhdG9yIGl0ID0gdGV4dEJveERhdGFNYXAuYWRkKGRvd25j
YXN0PElubGluZVRleHRCb3g+KHJ1bi0+Ym94KCkpLCBzdGQ6Om1ha2VfcGFpcihWZWN0b3I8Y29u
c3QgU2ltcGxlRm9udERhdGEqPigpLCBHbHlwaE92ZXJmbG93KCkpKS5pdGVyYXRvcjsKKyAgICAg
ICAgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXA6Oml0ZXJhdG9yIGl0ID0gdGV4dEJv
eERhdGFNYXAuYWRkKGRvd25jYXN0PElubGluZVRleHRCb3g+KHJ1bi0+Ym94KCkpLCBzdGQ6Om1h
a2VfcGFpcihWZWN0b3I8Y29uc3QgRm9udCo+KCksIEdseXBoT3ZlcmZsb3coKSkpLml0ZXJhdG9y
OwogICAgICAgICBBU1NFUlQoaXQtPnZhbHVlLmZpcnN0LmlzRW1wdHkoKSk7CiAgICAgICAgIGNv
cHlUb1ZlY3RvcihmYWxsYmFja0ZvbnRzLCBpdC0+dmFsdWUuZmlyc3QpOwogICAgICAgICBydW4t
PmJveCgpLT5wYXJlbnQoKS0+Y2xlYXJEZXNjZW5kYW50c0hhdmVTYW1lTGluZUhlaWdodEFuZEJh
c2VsaW5lKCk7CkBAIC01MzksNyArNTM5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldExvZ2lj
YWxXaWR0aEZvclRleAogCiAgICAgaWYgKCFnbHlwaE92ZXJmbG93LmlzRW1wdHkoKSkgewogICAg
ICAgICBBU1NFUlQocnVuLT5ib3goKS0+YmVoYXZlc0xpa2VUZXh0KCkpOwotICAgICAgICBHbHlw
aE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcDo6aXRlcmF0b3IgaXQgPSB0ZXh0Qm94RGF0YU1h
cC5hZGQoZG93bmNhc3Q8SW5saW5lVGV4dEJveD4ocnVuLT5ib3goKSksIHN0ZDo6bWFrZV9wYWly
KFZlY3Rvcjxjb25zdCBTaW1wbGVGb250RGF0YSo+KCksIEdseXBoT3ZlcmZsb3coKSkpLml0ZXJh
dG9yOworICAgICAgICBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcDo6aXRlcmF0b3Ig
aXQgPSB0ZXh0Qm94RGF0YU1hcC5hZGQoZG93bmNhc3Q8SW5saW5lVGV4dEJveD4ocnVuLT5ib3go
KSksIHN0ZDo6bWFrZV9wYWlyKFZlY3Rvcjxjb25zdCBGb250Kj4oKSwgR2x5cGhPdmVyZmxvdygp
KSkuaXRlcmF0b3I7CiAgICAgICAgIGl0LT52YWx1ZS5zZWNvbmQgPSBnbHlwaE92ZXJmbG93Owog
ICAgICAgICBydW4tPmJveCgpLT5jbGVhcktub3duVG9IYXZlTm9PdmVyZmxvdygpOwogICAgIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb21iaW5lVGV4dC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0LmNw
cAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNv
bWJpbmVUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCB2b2lkIFJlbmRl
ckNvbWJpbmVUZXh0OjpzZXRSZW5kZXJlZFRleHQoCiAgICAgbV9uZWVkc0ZvbnRVcGRhdGUgPSB0
cnVlOwogfQogCi1mbG9hdCBSZW5kZXJDb21iaW5lVGV4dDo6d2lkdGgodW5zaWduZWQgZnJvbSwg
dW5zaWduZWQgbGVuZ3RoLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgZmxvYXQgeFBvc2l0aW9u
LCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3Zl
cmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0CitmbG9hdCBSZW5kZXJDb21iaW5lVGV4dDo6d2lk
dGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBGb250Q2FzY2FkZSYgZm9u
dCwgZmxvYXQgeFBvc2l0aW9uLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cywg
R2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKIHsKICAgICBpZiAobV9pc0NvbWJp
bmVkKQogICAgICAgICByZXR1cm4gZm9udC5zaXplKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuaAkocmV2aXNpb24gMTc4ODU3KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ2LDcgKzQ2LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIG5vZGUoKSBjb25zdCA9IGRlbGV0
ZTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0NvbWJpbmVUZXh0KCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgZmxvYXQgd2lkdGgodW5zaWduZWQgZnJvbSwgdW5z
aWduZWQgbGVuZ3RoLCBjb25zdCBGb250Q2FzY2FkZSYsIGZsb2F0IHhQb3NpdGlvbiwgSGFzaFNl
dDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxv
dyogPSAwKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGZsb2F0IHdpZHRoKHVuc2lnbmVk
IGZyb20sIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgRm9udENhc2NhZGUmLCBmbG9hdCB4UG9zaXRp
b24sIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxv
dyogPSAwKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5h
bWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAiUmVuZGVyQ29tYmluZVRleHQiOyB9CiAgICAg
dmlydHVhbCB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVy
U3R5bGUqIG9sZFN0eWxlKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0UmVuZGVyZWRU
ZXh0KGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNlYXJjaEZpZWxkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiQ1NTRm9udFNlbGVjdG9yLmgiCiAjaW5jbHVk
ZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkNocm9tZS5oIgorI2luY2x1ZGUgIkZv
bnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCiAj
aW5jbHVkZSAiRnJhbWVWaWV3LmgiCkBAIC00Miw3ICs0Myw2IEBACiAjaW5jbHVkZSAiUmVuZGVy
Vmlldy5oIgogI2luY2x1ZGUgIlNlYXJjaFBvcHVwTWVudS5oIgogI2luY2x1ZGUgIlNldHRpbmdz
LmgiCi0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKICNpbmNsdWRlICJTdHlsZVJlc29sdmVy
LmgiCiAjaW5jbHVkZSAiVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmgiCiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHJldmlzaW9uIDE3ODg1NykKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDUxLDcgKzQ1MSw3IEBAIExheW91dFJlY3QgUmVuZGVyVGV4dDo6bG9jYWxDYXJldFJlY3QoSW4K
ICAgICByZXR1cm4gYm94LnJvb3QoKS5jb21wdXRlQ2FyZXRSZWN0KGxlZnQsIGNhcmV0V2lkdGgs
IGV4dHJhV2lkdGhUb0VuZE9mTGluZSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgZmxvYXQgUmVuZGVy
VGV4dDo6d2lkdGhGcm9tQ2FjaGUoY29uc3QgRm9udENhc2NhZGUmIGYsIGludCBzdGFydCwgaW50
IGxlbiwgZmxvYXQgeFBvcywgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFj
a0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93LCBjb25zdCBSZW5kZXJTdHlsZSYg
c3R5bGUpIGNvbnN0CitBTFdBWVNfSU5MSU5FIGZsb2F0IFJlbmRlclRleHQ6OndpZHRoRnJvbUNh
Y2hlKGNvbnN0IEZvbnRDYXNjYWRlJiBmLCBpbnQgc3RhcnQsIGludCBsZW4sIGZsb2F0IHhQb3Ms
IEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlw
aE92ZXJmbG93LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7CiAgICAgaWYgKHN0
eWxlLmhhc1RleHRDb21iaW5lKCkgJiYgaXM8UmVuZGVyQ29tYmluZVRleHQ+KCp0aGlzKSkgewog
ICAgICAgICBjb25zdCBSZW5kZXJDb21iaW5lVGV4dCYgY29tYmluZVRleHQgPSBkb3duY2FzdDxS
ZW5kZXJDb21iaW5lVGV4dD4oKnRoaXMpOwpAQCAtNjMwLDcgKzYzMCw3IEBAIExpbmVCcmVha0l0
ZXJhdG9yTW9kZSBtYXBMaW5lQnJlYWtUb0l0ZXIKIAogdm9pZCBSZW5kZXJUZXh0Ojpjb21wdXRl
UHJlZmVycmVkTG9naWNhbFdpZHRocyhmbG9hdCBsZWFkV2lkdGgpCiB7Ci0gICAgSGFzaFNldDxj
b25zdCBTaW1wbGVGb250RGF0YSo+IGZhbGxiYWNrRm9udHM7CisgICAgSGFzaFNldDxjb25zdCBG
b250Kj4gZmFsbGJhY2tGb250czsKICAgICBHbHlwaE92ZXJmbG93IGdseXBoT3ZlcmZsb3c7CiAg
ICAgY29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMobGVhZFdpZHRoLCBmYWxsYmFja0ZvbnRz
LCBnbHlwaE92ZXJmbG93KTsKICAgICBpZiAoZmFsbGJhY2tGb250cy5pc0VtcHR5KCkgJiYgIWds
eXBoT3ZlcmZsb3cubGVmdCAmJiAhZ2x5cGhPdmVyZmxvdy5yaWdodCAmJiAhZ2x5cGhPdmVyZmxv
dy50b3AgJiYgIWdseXBoT3ZlcmZsb3cuYm90dG9tKQpAQCAtNjQzLDcgKzY0Myw3IEBAIHN0YXRp
YyBpbmxpbmUgZmxvYXQgaHlwaGVuV2lkdGgoUmVuZGVyVGUKICAgICByZXR1cm4gZm9udC53aWR0
aChSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bihyZW5kZXJlciwgZm9udCwgc3R5bGUuaHlw
aGVuU3RyaW5nKCkuc3RyaW5nKCksIHN0eWxlKSk7CiB9CiAKLXN0YXRpYyBmbG9hdCBtYXhXb3Jk
RnJhZ21lbnRXaWR0aChSZW5kZXJUZXh0KiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUmIHN0
eWxlLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgU3RyaW5nVmlldyB3b3JkLCBpbnQgbWluaW11
bVByZWZpeExlbmd0aCwgdW5zaWduZWQgbWluaW11bVN1ZmZpeExlbmd0aCwgaW50JiBzdWZmaXhT
dGFydCwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+JiBmYWxsYmFja0ZvbnRzLCBHbHlw
aE92ZXJmbG93JiBnbHlwaE92ZXJmbG93KQorc3RhdGljIGZsb2F0IG1heFdvcmRGcmFnbWVudFdp
ZHRoKFJlbmRlclRleHQqIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0
IEZvbnRDYXNjYWRlJiBmb250LCBTdHJpbmdWaWV3IHdvcmQsIGludCBtaW5pbXVtUHJlZml4TGVu
Z3RoLCB1bnNpZ25lZCBtaW5pbXVtU3VmZml4TGVuZ3RoLCBpbnQmIHN1ZmZpeFN0YXJ0LCBIYXNo
U2V0PGNvbnN0IEZvbnQqPiYgZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyYgZ2x5cGhPdmVy
ZmxvdykKIHsKICAgICBzdWZmaXhTdGFydCA9IDA7CiAgICAgaWYgKHdvcmQubGVuZ3RoKCkgPD0g
bWluaW11bVN1ZmZpeExlbmd0aCkKQEAgLTY4Myw3ICs2ODMsNyBAQCBzdGF0aWMgZmxvYXQgbWF4
V29yZEZyYWdtZW50V2lkdGgoUmVuZGVyCiAgICAgcmV0dXJuIG1heEZyYWdtZW50V2lkdGg7CiB9
CiAKLXZvaWQgUmVuZGVyVGV4dDo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoZmxvYXQg
bGVhZFdpZHRoLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4mIGZhbGxiYWNrRm9udHMs
IEdseXBoT3ZlcmZsb3cmIGdseXBoT3ZlcmZsb3cpCit2b2lkIFJlbmRlclRleHQ6OmNvbXB1dGVQ
cmVmZXJyZWRMb2dpY2FsV2lkdGhzKGZsb2F0IGxlYWRXaWR0aCwgSGFzaFNldDxjb25zdCBGb250
Kj4mIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cmIGdseXBoT3ZlcmZsb3cpCiB7CiAgICAg
QVNTRVJUKG1faGFzVGFiIHx8IHByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eSgpIHx8ICFtX2tu
b3duVG9IYXZlTm9PdmVyZmxvd0FuZE5vRmFsbGJhY2tGb250cyk7CiAKQEAgLTEyMDYsNyArMTIw
Niw3IEBAIGNvbnN0IFNpbXBsZUxpbmVMYXlvdXQ6OkxheW91dCogUmVuZGVyVGUKICAgICByZXR1
cm4gZG93bmNhc3Q8UmVuZGVyQmxvY2tGbG93PigqcGFyZW50KCkpLnNpbXBsZUxpbmVMYXlvdXQo
KTsKIH0KIAotZmxvYXQgUmVuZGVyVGV4dDo6d2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQg
bGVuLCBmbG9hdCB4UG9zLCBib29sIGZpcnN0TGluZSwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250
RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25z
dAorZmxvYXQgUmVuZGVyVGV4dDo6d2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBm
bG9hdCB4UG9zLCBib29sIGZpcnN0TGluZSwgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNr
Rm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0CiB7CiAgICAgaWYgKGZy
b20gPj0gdGV4dExlbmd0aCgpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTEyMTgsNyArMTIxOCw3
IEBAIGZsb2F0IFJlbmRlclRleHQ6OndpZHRoKHVuc2lnbmVkIGZyb20sIHUKICAgICByZXR1cm4g
d2lkdGgoZnJvbSwgbGVuLCBsaW5lU3R5bGUuZm9udENhc2NhZGUoKSwgeFBvcywgZmFsbGJhY2tG
b250cywgZ2x5cGhPdmVyZmxvdyk7CiB9CiAKLWZsb2F0IFJlbmRlclRleHQ6OndpZHRoKHVuc2ln
bmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgY29uc3QgRm9udENhc2NhZGUmIGYsIGZsb2F0IHhQb3Ms
IEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVy
ZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKK2Zsb2F0IFJlbmRlclRleHQ6OndpZHRoKHVuc2ln
bmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgY29uc3QgRm9udENhc2NhZGUmIGYsIGZsb2F0IHhQb3Ms
IEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlw
aE92ZXJmbG93KSBjb25zdAogewogICAgIEFTU0VSVChmcm9tICsgbGVuIDw9IHRleHRMZW5ndGgo
KSk7CiAgICAgaWYgKCF0ZXh0TGVuZ3RoKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0LmgJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTg5LDggKzg5LDggQEAgcHVibGljOgog
ICAgIHVuc2lnbmVkIHRleHRMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3RleHQuaW1wbCgpLT5s
ZW5ndGgoKTsgfSAvLyBub24gdmlydHVhbCBpbXBsZW1lbnRhdGlvbiBvZiBsZW5ndGgoKQogICAg
IHZvaWQgcG9zaXRpb25MaW5lQm94KElubGluZVRleHRCb3gmKTsKIAotICAgIHZpcnR1YWwgZmxv
YXQgd2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBjb25zdCBGb250Q2FzY2FkZSYs
IGZsb2F0IHhQb3MsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250
cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29uc3Q7Ci0gICAgdmlydHVhbCBmbG9hdCB3aWR0
aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIGZsb2F0IHhQb3MsIGJvb2wgZmlyc3RMaW5l
ID0gZmFsc2UsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9
IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29uc3Q7CisgICAgdmlydHVhbCBmbG9hdCB3aWR0aCh1
bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIGNvbnN0IEZvbnRDYXNjYWRlJiwgZmxvYXQgeFBv
cywgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93
KiA9IDApIGNvbnN0OworICAgIHZpcnR1YWwgZmxvYXQgd2lkdGgodW5zaWduZWQgZnJvbSwgdW5z
aWduZWQgbGVuLCBmbG9hdCB4UG9zLCBib29sIGZpcnN0TGluZSA9IGZhbHNlLCBIYXNoU2V0PGNv
bnN0IEZvbnQqPiogZmFsbGJhY2tGb250cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29uc3Q7
CiAKICAgICBmbG9hdCBtaW5Mb2dpY2FsV2lkdGgoKSBjb25zdDsKICAgICBmbG9hdCBtYXhMb2dp
Y2FsV2lkdGgoKSBjb25zdDsKQEAgLTE4MCw3ICsxODAsNyBAQCBwcml2YXRlOgogCiAgICAgdmly
dHVhbCBib29sIGNhbkhhdmVDaGlsZHJlbigpIGNvbnN0IG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJu
IGZhbHNlOyB9CiAKLSAgICB2b2lkIGNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKGZsb2F0
IGxlYWRXaWR0aCwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+JiBmYWxsYmFja0ZvbnRz
LCBHbHlwaE92ZXJmbG93Jik7CisgICAgdm9pZCBjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRo
cyhmbG9hdCBsZWFkV2lkdGgsIEhhc2hTZXQ8Y29uc3QgRm9udCo+JiBmYWxsYmFja0ZvbnRzLCBH
bHlwaE92ZXJmbG93Jik7CiAKICAgICBib29sIGNvbXB1dGVDYW5Vc2VTaW1wbGVGb250Q29kZVBh
dGgoKSBjb25zdDsKICAgICAKQEAgLTE5Miw3ICsxOTIsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1
YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQm
LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBjb25zdCBMYXlvdXRQb2ludCYsIEhpdFRlc3RBY3Rp
b24pIG92ZXJyaWRlIGZpbmFsIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBmYWxzZTsg
fQogCiAgICAgYm9vbCBjb250YWluc09ubHlXaGl0ZXNwYWNlKHVuc2lnbmVkIGZyb20sIHVuc2ln
bmVkIGxlbikgY29uc3Q7Ci0gICAgZmxvYXQgd2lkdGhGcm9tQ2FjaGUoY29uc3QgRm9udENhc2Nh
ZGUmLCBpbnQgc3RhcnQsIGludCBsZW4sIGZsb2F0IHhQb3MsIEhhc2hTZXQ8Y29uc3QgU2ltcGxl
Rm9udERhdGEqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyosIGNvbnN0IFJlbmRlclN0
eWxlJikgY29uc3Q7CisgICAgZmxvYXQgd2lkdGhGcm9tQ2FjaGUoY29uc3QgRm9udENhc2NhZGUm
LCBpbnQgc3RhcnQsIGludCBsZW4sIGZsb2F0IHhQb3MsIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBm
YWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiwgY29uc3QgUmVuZGVyU3R5bGUmKSBjb25zdDsK
ICAgICBib29sIGlzQWxsQVNDSUkoKSBjb25zdCB7IHJldHVybiBtX2lzQWxsQVNDSUk7IH0KICAg
ICBib29sIGNvbXB1dGVVc2VCYWNrc2xhc2hBc1llblN5bWJvbCgpIGNvbnN0OwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lLmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDYgKzI3LDcgQEAKICNpbmNsdWRlICJDU1NGb250U2VsZWN0b3IuaCIKICNpbmNsdWRlICJDU1NW
YWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCisjaW5jbHVkZSAiRm9udC5oIgog
I2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKICNpbmNsdWRl
ICJGcmFtZVZpZXcuaCIKQEAgLTQwLDcgKzQxLDYgQEAKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5o
IgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2luY2x1
ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1
ZGUgIlRleHRDb250cm9sSW5uZXJFbGVtZW50cy5oIgogI2luY2x1ZGUgPHd0Zi9TdGFja1N0YXRz
Lmg+CkBAIC0zNDYsNyArMzQ2LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmU6OgogICAgIGlmIChmYW1pbHkgPT0gIkx1Y2lkYSBHcmFuZGUiKQogICAgICAgICBtYXhD
aGFyV2lkdGggPSBzY2FsZUVtVG9Vbml0cyg0MDI3KTsKICAgICBlbHNlIGlmIChzdHlsZSgpLmZv
bnRDYXNjYWRlKCkuaGFzVmFsaWRBdmVyYWdlQ2hhcldpZHRoKCkpCi0gICAgICAgIG1heENoYXJX
aWR0aCA9IHJvdW5kZihzdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkubWF4
Q2hhcldpZHRoKCkpOworICAgICAgICBtYXhDaGFyV2lkdGggPSByb3VuZGYoc3R5bGUoKS5mb250
Q2FzY2FkZSgpLnByaW1hcnlGb250KCkubWF4Q2hhcldpZHRoKCkpOwogI2VuZGlmCiAKICAgICAv
LyBGb3IgdGV4dCBpbnB1dHMsIElFIGFkZHMgc29tZSBleHRyYSB3aWR0aC4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0JKHJldmlzaW9uIDE3ODg1NykK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQkod29ya2luZyBj
b3B5KQpAQCAtNTgwLDcgKzU4MCw3IEBAIHN0YXRpYyB2b2lkIGFkanVzdElucHV0RWxlbWVudEJ1
dHRvblN0eWwKICAgICBGb250Q2FzY2FkZSBmb250ID0gc3R5bGUuZm9udENhc2NhZGUoKTsKICAg
ICAKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gaW5wdXRFbGVtZW50LnJlbmRlcmVyKCk7
Ci0gICAgaWYgKGZvbnQucHJpbWFyeUZvbnREYXRhKCkuaXNTVkdGb250KCkgJiYgIXJlbmRlcmVy
KQorICAgIGlmIChmb250LnByaW1hcnlGb250KCkuaXNTVkdGb250KCkgJiYgIXJlbmRlcmVyKQog
ICAgICAgICByZXR1cm47CiAgICAgCiAgICAgZmxvYXQgbWF4aW11bVdpZHRoID0gbG9jYWxpemVk
RGF0ZUNhY2hlKCkubWF4aW11bVdpZHRoRm9yRGF0ZVR5cGUoZGF0ZVR5cGUsIGZvbnQsIFJlbmRl
clRoZW1lTWVhc3VyZVRleHRDbGllbnQoZm9udCwgKnJlbmRlcmVyLCBzdHlsZSkpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAkocmV2aXNpb24gMTc4
ODU3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04ODUsNyArODg1LDcgQEAgdm9pZCBSb290SW5saW5lQm94Ojphc2NlbnRB
bmREZXNjZW50Rm9yQgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgVmVjdG9yPGNvbnN0
IFNpbXBsZUZvbnREYXRhKj4qIHVzZWRGb250cyA9IG51bGxwdHI7CisgICAgVmVjdG9yPGNvbnN0
IEZvbnQqPiogdXNlZEZvbnRzID0gbnVsbHB0cjsKICAgICBHbHlwaE92ZXJmbG93KiBnbHlwaE92
ZXJmbG93ID0gbnVsbHB0cjsKICAgICBpZiAoaXM8SW5saW5lVGV4dEJveD4oYm94KSkgewogICAg
ICAgICBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcDo6aXRlcmF0b3IgaXQgPSB0ZXh0
Qm94RGF0YU1hcC5maW5kKCZkb3duY2FzdDxJbmxpbmVUZXh0Qm94Pihib3gpKTsKQEAgLTkwMSw3
ICs5MDEsNyBAQCB2b2lkIFJvb3RJbmxpbmVCb3g6OmFzY2VudEFuZERlc2NlbnRGb3JCCiAKICAg
ICBjb25zdCBSZW5kZXJTdHlsZSYgYm94TGluZVN0eWxlID0gYm94LmxpbmVTdHlsZSgpOwogICAg
IGlmICh1c2VkRm9udHMgJiYgIXVzZWRGb250cy0+aXNFbXB0eSgpICYmIChpbmNsdWRlRm9udCB8
fCAoYm94TGluZVN0eWxlLmxpbmVIZWlnaHQoKS5pc05lZ2F0aXZlKCkgJiYgaW5jbHVkZUxlYWRp
bmcpKSkgewotICAgICAgICB1c2VkRm9udHMtPmFwcGVuZCgmYm94TGluZVN0eWxlLmZvbnRDYXNj
YWRlKCkucHJpbWFyeUZvbnREYXRhKCkpOworICAgICAgICB1c2VkRm9udHMtPmFwcGVuZCgmYm94
TGluZVN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKSk7CiAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgdXNlZEZvbnRzLT5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgY29u
c3QgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzID0gdXNlZEZvbnRzLT5hdChpKS0+Zm9udE1ldHJp
Y3MoKTsKICAgICAgICAgICAgIGludCB1c2VkRm9udEFzY2VudCA9IGZvbnRNZXRyaWNzLmFzY2Vu
dChiYXNlbGluZVR5cGUoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxl
TGluZUxheW91dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Np
bXBsZUxpbmVMYXlvdXQuY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUy
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIFNpbXBsZUxpbmVMYXlvdXQgewog
CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBib29sIGNhblVzZUZv
clRleHQoY29uc3QgQ2hhcmFjdGVyVHlwZSogdGV4dCwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBT
aW1wbGVGb250RGF0YSYgZm9udERhdGEpCitzdGF0aWMgYm9vbCBjYW5Vc2VGb3JUZXh0KGNvbnN0
IENoYXJhY3RlclR5cGUqIHRleHQsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgRm9udCYgZm9udCkK
IHsKICAgICAvLyBGSVhNRTogPHRleHRhcmVhIG1heGxlbmd0aD0wPiBnZW5lcmF0ZXMgZW1wdHkg
dGV4dCBub2RlLgogICAgIGlmICghbGVuZ3RoKQpAQCAtNzUsMTcgKzc1LDE3IEBAIHN0YXRpYyBi
b29sIGNhblVzZUZvclRleHQoY29uc3QgQ2hhcmFjdGUKICAgICAgICAgICAgIHx8IGRpcmVjdGlv
biA9PSBVX1BPUF9ESVJFQ1RJT05BTF9GT1JNQVQgfHwgZGlyZWN0aW9uID09IFVfQk9VTkRBUllf
TkVVVFJBTCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBpZiAoIWZvbnRE
YXRhLmdseXBoRm9yQ2hhcmFjdGVyKGNoYXJhY3RlcikpCisgICAgICAgIGlmICghZm9udC5nbHlw
aEZvckNoYXJhY3RlcihjaGFyYWN0ZXIpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgY2FuVXNlRm9yVGV4dChjb25z
dCBSZW5kZXJUZXh0JiB0ZXh0UmVuZGVyZXIsIGNvbnN0IFNpbXBsZUZvbnREYXRhJiBmb250RGF0
YSkKK3N0YXRpYyBib29sIGNhblVzZUZvclRleHQoY29uc3QgUmVuZGVyVGV4dCYgdGV4dFJlbmRl
cmVyLCBjb25zdCBGb250JiBmb250KQogewogICAgIGlmICh0ZXh0UmVuZGVyZXIuaXM4Qml0KCkp
Ci0gICAgICAgIHJldHVybiBjYW5Vc2VGb3JUZXh0KHRleHRSZW5kZXJlci5jaGFyYWN0ZXJzOCgp
LCB0ZXh0UmVuZGVyZXIudGV4dExlbmd0aCgpLCBmb250RGF0YSk7Ci0gICAgcmV0dXJuIGNhblVz
ZUZvclRleHQodGV4dFJlbmRlcmVyLmNoYXJhY3RlcnMxNigpLCB0ZXh0UmVuZGVyZXIudGV4dExl
bmd0aCgpLCBmb250RGF0YSk7CisgICAgICAgIHJldHVybiBjYW5Vc2VGb3JUZXh0KHRleHRSZW5k
ZXJlci5jaGFyYWN0ZXJzOCgpLCB0ZXh0UmVuZGVyZXIudGV4dExlbmd0aCgpLCBmb250KTsKKyAg
ICByZXR1cm4gY2FuVXNlRm9yVGV4dCh0ZXh0UmVuZGVyZXIuY2hhcmFjdGVyczE2KCksIHRleHRS
ZW5kZXJlci50ZXh0TGVuZ3RoKCksIGZvbnQpOwogfQogCiBib29sIGNhblVzZUZvcihjb25zdCBS
ZW5kZXJCbG9ja0Zsb3cmIGZsb3cpCkBAIC0xODQsMTEgKzE4NCwxMSBAQCBib29sIGNhblVzZUZv
cihjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICB9Ci0gICAgaWYgKHN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkuaXNTVkdG
b250KCkpCisgICAgaWYgKHN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKS5pc1NWR0Zv
bnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIC8vIFdlIGFzc3VtZSB0aGF0IGFsbCBs
aW5lcyBoYXZlIG1ldHJpY3MgYmFzZWQgcHVyZWx5IG9uIHRoZSBwcmltYXJ5IGZvbnQuCi0gICAg
YXV0byYgcHJpbWFyeUZvbnREYXRhID0gc3R5bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERh
dGEoKTsKLSAgICBpZiAocHJpbWFyeUZvbnREYXRhLmlzTG9hZGluZygpKQorICAgIGF1dG8mIHBy
aW1hcnlGb250ID0gc3R5bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpOworICAgIGlmIChw
cmltYXJ5Rm9udC5pc0xvYWRpbmcoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGZvciAo
Y29uc3QgYXV0byYgdGV4dFJlbmRlcmVyIDogY2hpbGRyZW5PZlR5cGU8UmVuZGVyVGV4dD4oZmxv
dykpIHsKICAgICAgICAgaWYgKHRleHRSZW5kZXJlci5pc0NvbWJpbmVUZXh0KCkgfHwgdGV4dFJl
bmRlcmVyLmlzQ291bnRlcigpIHx8IHRleHRSZW5kZXJlci5pc1F1b3RlKCkgfHwgdGV4dFJlbmRl
cmVyLmlzVGV4dEZyYWdtZW50KCkKQEAgLTE5Niw3ICsxOTYsNyBAQCBib29sIGNhblVzZUZvcihj
b25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIGlmIChzdHlsZS5mb250Q2FzY2FkZSgpLmNvZGVQYXRoKFRleHRSdW4odGV4dFJlbmRlcmVy
LnRleHQoKSkpICE9IEZvbnRDYXNjYWRlOjpTaW1wbGUpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIGlmICghY2FuVXNlRm9yVGV4dCh0ZXh0UmVuZGVyZXIsIHByaW1hcnlGb250
RGF0YSkpCisgICAgICAgIGlmICghY2FuVXNlRm9yVGV4dCh0ZXh0UmVuZGVyZXIsIHByaW1hcnlG
b250KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9CcmVha2luZ0NvbnRleHRJbmxp
bmVIZWFkZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUv
QnJlYWtpbmdDb250ZXh0SW5saW5lSGVhZGVycy5oCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9CcmVha2luZ0NvbnRleHRJbmxpbmVIZWFkZXJzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgc3RydWN0IFdvcmRNZWFzdXJlbWVudCB7
CiAgICAgZmxvYXQgd2lkdGg7CiAgICAgaW50IHN0YXJ0T2Zmc2V0OwogICAgIGludCBlbmRPZmZz
ZXQ7Ci0gICAgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+IGZhbGxiYWNrRm9udHM7Cisg
ICAgSGFzaFNldDxjb25zdCBGb250Kj4gZmFsbGJhY2tGb250czsKIH07CiAKIGNsYXNzIEJyZWFr
aW5nQ29udGV4dCB7CkBAIC00ODYsMTMgKzQ4NiwxMyBAQCBpbmxpbmUgdm9pZCB1cGRhdGVDb3Vu
dGVySWZOZWVkZWQoUmVuZGVyCiAgICAgZG93bmNhc3Q8UmVuZGVyQ291bnRlcj4ocmVuZGVyVGV4
dCkudXBkYXRlQ291bnRlcigpOwogfQogCi1pbmxpbmUgZmxvYXQgbWVhc3VyZUh5cGhlbldpZHRo
KFJlbmRlclRleHQqIHJlbmRlcmVyLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgSGFzaFNldDxj
b25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCkKK2lubGluZSBmbG9hdCBt
ZWFzdXJlSHlwaGVuV2lkdGgoUmVuZGVyVGV4dCogcmVuZGVyZXIsIGNvbnN0IEZvbnRDYXNjYWRl
JiBmb250LCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cyA9IDApCiB7CiAgICAg
Y29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7CiAgICAgcmV0dXJu
IGZvbnQud2lkdGgoUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4ocmVuZGVyZXIsIGZvbnQs
IHN0eWxlLmh5cGhlblN0cmluZygpLnN0cmluZygpLCBzdHlsZSksIGZhbGxiYWNrRm9udHMpOwog
fQogCi1BTFdBWVNfSU5MSU5FIGZsb2F0IHRleHRXaWR0aChSZW5kZXJUZXh0KiB0ZXh0LCB1bnNp
Z25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBmbG9hdCB4
UG9zLCBib29sIGlzRml4ZWRQaXRjaCwgYm9vbCBjb2xsYXBzZVdoaXRlU3BhY2UsIEhhc2hTZXQ8
Y29uc3QgU2ltcGxlRm9udERhdGEqPiYgZmFsbGJhY2tGb250cywgVGV4dExheW91dCogbGF5b3V0
ID0gMCkKK0FMV0FZU19JTkxJTkUgZmxvYXQgdGV4dFdpZHRoKFJlbmRlclRleHQqIHRleHQsIHVu
c2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGZsb2F0
IHhQb3MsIGJvb2wgaXNGaXhlZFBpdGNoLCBib29sIGNvbGxhcHNlV2hpdGVTcGFjZSwgSGFzaFNl
dDxjb25zdCBGb250Kj4mIGZhbGxiYWNrRm9udHMsIFRleHRMYXlvdXQqIGxheW91dCA9IDApCiB7
CiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlID0gdGV4dC0+c3R5bGUoKTsKIApAQCAtNTc4
LDcgKzU3OCw3IEBAIGlubGluZSB2b2lkIHRyeUh5cGhlbmF0aW5nKFJlbmRlclRleHQqIHQKICAg
ICBBU1NFUlQocG9zIC0gbGFzdFNwYWNlIC0gcHJlZml4TGVuZ3RoID49IG1pbmltdW1TdWZmaXhM
ZW5ndGgpOwogCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIEhhc2hTZXQ8Y29uc3QgU2ltcGxl
Rm9udERhdGEqPiBmYWxsYmFja0ZvbnRzOworICAgIEhhc2hTZXQ8Y29uc3QgRm9udCo+IGZhbGxi
YWNrRm9udHM7CiAgICAgZmxvYXQgcHJlZml4V2lkdGggPSBoeXBoZW5XaWR0aCArIHRleHRXaWR0
aCh0ZXh0LCBsYXN0U3BhY2UsIHByZWZpeExlbmd0aCwgZm9udCwgeFBvcywgaXNGaXhlZFBpdGNo
LCBjb2xsYXBzZVdoaXRlU3BhY2UsIGZhbGxiYWNrRm9udHMpICsgbGFzdFNwYWNlV29yZFNwYWNp
bmc7CiAgICAgQVNTRVJUKHhQb3MgKyBwcmVmaXhXaWR0aCA8PSBhdmFpbGFibGVXaWR0aCk7CiAj
ZWxzZQpAQCAtNjU2LDcgKzY1Niw3IEBAIGlubGluZSBib29sIEJyZWFraW5nQ29udGV4dDo6aGFu
ZGxlVGV4dCgKIAogICAgIC8vIE5vbi16ZXJvIG9ubHkgd2hlbiBrZXJuaW5nIGlzIGVuYWJsZWQg
YW5kIFRleHRMYXlvdXQgaXNuJ3QgdXNlZCwgaW4gd2hpY2ggY2FzZSB3ZSBtZWFzdXJlCiAgICAg
Ly8gd29yZHMgd2l0aCB0aGVpciB0cmFpbGluZyBzcGFjZSwgdGhlbiBzdWJ0cmFjdCBpdHMgd2lk
dGguCi0gICAgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+IGZhbGxiYWNrRm9udHM7Cisg
ICAgSGFzaFNldDxjb25zdCBGb250Kj4gZmFsbGJhY2tGb250czsKICAgICBmbG9hdCB3b3JkVHJh
aWxpbmdTcGFjZVdpZHRoID0gKGZvbnQudHlwZXNldHRpbmdGZWF0dXJlcygpICYgS2VybmluZykg
JiYgIXRleHRMYXlvdXQgPyBmb250LndpZHRoKFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVu
KCZyZW5kZXJUZXh0LCBmb250LCAmc3BhY2UsIDEsIHN0eWxlKSwgJmZhbGxiYWNrRm9udHMpICsg
d29yZFNwYWNpbmcgOiAwOwogCiAgICAgVUNoYXIgbGFzdENoYXJhY3RlciA9IG1fcmVuZGVyVGV4
dEluZm8ubV9saW5lQnJlYWtJdGVyYXRvci5sYXN0Q2hhcmFjdGVyKCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJh
dG9yLmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21h
dGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMzMsNyAr
MTMzMyw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnJlc2V0U3RyZXRjaFMKIAogRmxv
YXRSZWN0IFJlbmRlck1hdGhNTE9wZXJhdG9yOjpib3VuZHNGb3JHbHlwaChjb25zdCBHbHlwaERh
dGEmIGRhdGEpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGRhdGEuZm9udERhdGEtPmJvdW5kc0Zvckds
eXBoKGRhdGEuZ2x5cGgpOworICAgIHJldHVybiBkYXRhLmZvbnQtPmJvdW5kc0ZvckdseXBoKGRh
dGEuZ2x5cGgpOwogfQogCiBmbG9hdCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6aGVpZ2h0Rm9yR2x5
cGgoY29uc3QgR2x5cGhEYXRhJiBkYXRhKSBjb25zdApAQCAtMTM0Myw3ICsxMzQzLDcgQEAgZmxv
YXQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmhlaWdodEZvckdseQogCiBmbG9hdCBSZW5kZXJNYXRo
TUxPcGVyYXRvcjo6YWR2YW5jZUZvckdseXBoKGNvbnN0IEdseXBoRGF0YSYgZGF0YSkgY29uc3QK
IHsKLSAgICByZXR1cm4gZGF0YS5mb250RGF0YS0+d2lkdGhGb3JHbHlwaChkYXRhLmdseXBoKTsK
KyAgICByZXR1cm4gZGF0YS5mb250LT53aWR0aEZvckdseXBoKGRhdGEuZ2x5cGgpOwogfQogCiB2
b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygp
CkBAIC0xNTIxLDExICsxNTIxLDExIEBAIGJvb2wgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmdldEds
eXBoQXNzZW0KICAgICBpZiAoIWJvdHRvbS5nbHlwaCkKICAgICAgICAgYm90dG9tLmdseXBoID0g
ZXh0ZW5zaW9uLmdseXBoOwogCi0gICAgdG9wLmZvbnREYXRhID0gJnN0eWxlKCkuZm9udENhc2Nh
ZGUoKS5wcmltYXJ5Rm9udERhdGEoKTsKLSAgICBleHRlbnNpb24uZm9udERhdGEgPSB0b3AuZm9u
dERhdGE7Ci0gICAgYm90dG9tLmZvbnREYXRhID0gdG9wLmZvbnREYXRhOworICAgIHRvcC5mb250
ID0gJnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpOworICAgIGV4dGVuc2lvbi5m
b250ID0gdG9wLmZvbnQ7CisgICAgYm90dG9tLmZvbnQgPSB0b3AuZm9udDsKICAgICBpZiAobWlk
ZGxlLmdseXBoKQotICAgICAgICBtaWRkbGUuZm9udERhdGEgPSB0b3AuZm9udERhdGE7CisgICAg
ICAgIG1pZGRsZS5mb250ID0gdG9wLmZvbnQ7CiAKICAgICBzdHJldGNoeURhdGEuc2V0R2x5cGhB
c3NlbWJseU1vZGUodG9wLCBleHRlbnNpb24sIGJvdHRvbSwgbWlkZGxlKTsKIApAQCAtMTUzOCwy
NCArMTUzOCwyNCBAQCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6U3RyZXRjaHlEYXRhIFJlbmRlCiAK
ICAgICBBU1NFUlQobV9pc1ZlcnRpY2FsICYmIGlzTGFyZ2VPcGVyYXRvckluRGlzcGxheVN0eWxl
KCkpOwogCi0gICAgY29uc3QgYXV0byYgcHJpbWFyeUZvbnREYXRhID0gc3R5bGUoKS5mb250Q2Fz
Y2FkZSgpLnByaW1hcnlGb250RGF0YSgpOworICAgIGNvbnN0IGF1dG8mIHByaW1hcnlGb250ID0g
c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCk7CiAgICAgR2x5cGhEYXRhIGJhc2VH
bHlwaCA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFj
dGVyLCAhc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpOwotICAgIGlmICghcHJpbWFy
eUZvbnREYXRhLm1hdGhEYXRhKCkgfHwgYmFzZUdseXBoLmZvbnREYXRhICE9ICZwcmltYXJ5Rm9u
dERhdGEpCisgICAgaWYgKCFwcmltYXJ5Rm9udC5tYXRoRGF0YSgpIHx8IGJhc2VHbHlwaC5mb250
ICE9ICZwcmltYXJ5Rm9udCkKICAgICAgICAgcmV0dXJuIGRhdGE7CiAKICAgICBWZWN0b3I8R2x5
cGg+IHNpemVWYXJpYW50czsKICAgICBWZWN0b3I8T3BlblR5cGVNYXRoRGF0YTo6QXNzZW1ibHlQ
YXJ0PiBhc3NlbWJseVBhcnRzOwogCiAgICAgLy8gVGhlIHZhbHVlIG9mIGRpc3BsYXlPcGVyYXRv
ck1pbkhlaWdodCBpcyBzb21ldGltZXMgdG9vIHNtYWxsLCBzbyB3ZSBlbnN1cmUgdGhhdCBpdCBp
cyBhdCBsZWFzdCBcc3FydHsyfSB0aW1lcyB0aGUgc2l6ZSBvZiB0aGUgYmFzZSBnbHlwaC4KLSAg
ICBmbG9hdCBkaXNwbGF5T3BlcmF0b3JNaW5IZWlnaHQgPSBzdGQ6Om1heChiYXNlR2x5cGguZm9u
dERhdGEtPmJvdW5kc0ZvckdseXBoKGJhc2VHbHlwaC5nbHlwaCkuaGVpZ2h0KCkgKiBzcXJ0T2ZU
d29GbG9hdCwgcHJpbWFyeUZvbnREYXRhLm1hdGhEYXRhKCktPmdldE1hdGhDb25zdGFudChwcmlt
YXJ5Rm9udERhdGEsIE9wZW5UeXBlTWF0aERhdGE6OkRpc3BsYXlPcGVyYXRvck1pbkhlaWdodCkp
OworICAgIGZsb2F0IGRpc3BsYXlPcGVyYXRvck1pbkhlaWdodCA9IHN0ZDo6bWF4KGJhc2VHbHlw
aC5mb250LT5ib3VuZHNGb3JHbHlwaChiYXNlR2x5cGguZ2x5cGgpLmhlaWdodCgpICogc3FydE9m
VHdvRmxvYXQsIHByaW1hcnlGb250Lm1hdGhEYXRhKCktPmdldE1hdGhDb25zdGFudChwcmltYXJ5
Rm9udCwgT3BlblR5cGVNYXRoRGF0YTo6RGlzcGxheU9wZXJhdG9yTWluSGVpZ2h0KSk7CiAKLSAg
ICBwcmltYXJ5Rm9udERhdGEubWF0aERhdGEoKS0+Z2V0TWF0aFZhcmlhbnRzKGJhc2VHbHlwaC5n
bHlwaCwgdHJ1ZSwgc2l6ZVZhcmlhbnRzLCBhc3NlbWJseVBhcnRzKTsKKyAgICBwcmltYXJ5Rm9u
dC5tYXRoRGF0YSgpLT5nZXRNYXRoVmFyaWFudHMoYmFzZUdseXBoLmdseXBoLCB0cnVlLCBzaXpl
VmFyaWFudHMsIGFzc2VtYmx5UGFydHMpOwogCiAgICAgLy8gV2UgY2hvb3NlIHRoZSBmaXJzdCBz
aXplIHZhcmlhbnQgdGhhdCBpcyBsYXJnZXIgdGhhbiB0aGUgZXhwZWN0ZWQgZGlzcGxheU9wZXJh
dG9yTWluSGVpZ2h0IGFuZCBvdGhlcndpc2UgZmFsbGJhY2sgdG8gdGhlIGxhcmdlc3QgdmFyaWFu
dC4KICAgICBmb3IgKGF1dG8mIHZhcmlhbnQgOiBzaXplVmFyaWFudHMpIHsKICAgICAgICAgR2x5
cGhEYXRhIHNpemVWYXJpYW50OwogICAgICAgICBzaXplVmFyaWFudC5nbHlwaCA9IHZhcmlhbnQ7
Ci0gICAgICAgIHNpemVWYXJpYW50LmZvbnREYXRhID0gJnByaW1hcnlGb250RGF0YTsKKyAgICAg
ICAgc2l6ZVZhcmlhbnQuZm9udCA9ICZwcmltYXJ5Rm9udDsKICAgICAgICAgZGF0YS5zZXRTaXpl
VmFyaWFudE1vZGUoc2l6ZVZhcmlhbnQpOwogICAgICAgICBpZiAoYm91bmRzRm9yR2x5cGgoc2l6
ZVZhcmlhbnQpLmhlaWdodCgpID49IGRpc3BsYXlPcGVyYXRvck1pbkhlaWdodCkKICAgICAgICAg
ICAgIHJldHVybiBkYXRhOwpAQCAtMTU3MCwxOCArMTU3MCwxOCBAQCBSZW5kZXJNYXRoTUxPcGVy
YXRvcjo6U3RyZXRjaHlEYXRhIFJlbmRlCiAgICAgU3RyZXRjaHlEYXRhIGRhdGE7CiAgICAgU3Ry
ZXRjaHlEYXRhIGFzc2VtYmx5RGF0YTsKIAotICAgIGNvbnN0IGF1dG8mIHByaW1hcnlGb250RGF0
YSA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKTsKKyAgICBjb25zdCBh
dXRvJiBwcmltYXJ5Rm9udCA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpOwog
ICAgIEdseXBoRGF0YSBiYXNlR2x5cGggPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCkuZ2x5cGhEYXRh
Rm9yQ2hhcmFjdGVyKGNoYXJhY3RlciwgIXN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigp
KTsKICAgICAKLSAgICBpZiAocHJpbWFyeUZvbnREYXRhLm1hdGhEYXRhKCkgJiYgYmFzZUdseXBo
LmZvbnREYXRhID09ICZwcmltYXJ5Rm9udERhdGEpIHsKKyAgICBpZiAocHJpbWFyeUZvbnQubWF0
aERhdGEoKSAmJiBiYXNlR2x5cGguZm9udCA9PSAmcHJpbWFyeUZvbnQpIHsKICAgICAgICAgVmVj
dG9yPEdseXBoPiBzaXplVmFyaWFudHM7CiAgICAgICAgIFZlY3RvcjxPcGVuVHlwZU1hdGhEYXRh
OjpBc3NlbWJseVBhcnQ+IGFzc2VtYmx5UGFydHM7Ci0gICAgICAgIHByaW1hcnlGb250RGF0YS5t
YXRoRGF0YSgpLT5nZXRNYXRoVmFyaWFudHMoYmFzZUdseXBoLmdseXBoLCBtX2lzVmVydGljYWws
IHNpemVWYXJpYW50cywgYXNzZW1ibHlQYXJ0cyk7CisgICAgICAgIHByaW1hcnlGb250Lm1hdGhE
YXRhKCktPmdldE1hdGhWYXJpYW50cyhiYXNlR2x5cGguZ2x5cGgsIG1faXNWZXJ0aWNhbCwgc2l6
ZVZhcmlhbnRzLCBhc3NlbWJseVBhcnRzKTsKICAgICAgICAgLy8gV2UgdmVyaWZ5IHRoZSBzaXpl
IHZhcmlhbnRzLgogICAgICAgICBmb3IgKGF1dG8mIHZhcmlhbnQgOiBzaXplVmFyaWFudHMpIHsK
ICAgICAgICAgICAgIEdseXBoRGF0YSBzaXplVmFyaWFudDsKICAgICAgICAgICAgIHNpemVWYXJp
YW50LmdseXBoID0gdmFyaWFudDsKLSAgICAgICAgICAgIHNpemVWYXJpYW50LmZvbnREYXRhID0g
JnByaW1hcnlGb250RGF0YTsKKyAgICAgICAgICAgIHNpemVWYXJpYW50LmZvbnQgPSAmcHJpbWFy
eUZvbnQ7CiAgICAgICAgICAgICBpZiAobWF4aW11bUdseXBoV2lkdGgpCiAgICAgICAgICAgICAg
ICAgKm1heGltdW1HbHlwaFdpZHRoID0gc3RkOjptYXgoKm1heGltdW1HbHlwaFdpZHRoLCBhZHZh
bmNlRm9yR2x5cGgoc2l6ZVZhcmlhbnQpKTsKICAgICAgICAgICAgIGVsc2UgewpAQCAtMTgwMSw4
ICsxODAxLDggQEAgTGF5b3V0UmVjdCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6cGFpbnRHbAogICAg
IGluZm8uY29udGV4dC0+Y2xpcChjbGlwQm91bmRzKTsKIAogICAgIEdseXBoQnVmZmVyIGJ1ZmZl
cjsKLSAgICBidWZmZXIuYWRkKGRhdGEuZ2x5cGgsIGRhdGEuZm9udERhdGEsIGFkdmFuY2VGb3JH
bHlwaChkYXRhKSk7Ci0gICAgaW5mby5jb250ZXh0LT5kcmF3R2x5cGhzKHN0eWxlKCkuZm9udENh
c2NhZGUoKSwgKmRhdGEuZm9udERhdGEsIGJ1ZmZlciwgMCwgMSwgb3JpZ2luKTsKKyAgICBidWZm
ZXIuYWRkKGRhdGEuZ2x5cGgsIGRhdGEuZm9udCwgYWR2YW5jZUZvckdseXBoKGRhdGEpKTsKKyAg
ICBpbmZvLmNvbnRleHQtPmRyYXdHbHlwaHMoc3R5bGUoKS5mb250Q2FzY2FkZSgpLCAqZGF0YS5m
b250LCBidWZmZXIsIDAsIDEsIG9yaWdpbik7CiAKICAgICByZXR1cm4gZ2x5cGhQYWludFJlY3Q7
CiB9CkBAIC0xODk0LDExICsxODk0LDExIEBAIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBh
aW50KFBhaW50SW4KICAgICBpZiAobV9zdHJldGNoeURhdGEubW9kZSgpID09IERyYXdTaXplVmFy
aWFudCkgewogICAgICAgICBBU1NFUlQobV9zdHJldGNoeURhdGEudmFyaWFudCgpLmdseXBoKTsK
ICAgICAgICAgR2x5cGhCdWZmZXIgYnVmZmVyOwotICAgICAgICBidWZmZXIuYWRkKG1fc3RyZXRj
aHlEYXRhLnZhcmlhbnQoKS5nbHlwaCwgbV9zdHJldGNoeURhdGEudmFyaWFudCgpLmZvbnREYXRh
LCBhZHZhbmNlRm9yR2x5cGgobV9zdHJldGNoeURhdGEudmFyaWFudCgpKSk7CisgICAgICAgIGJ1
ZmZlci5hZGQobV9zdHJldGNoeURhdGEudmFyaWFudCgpLmdseXBoLCBtX3N0cmV0Y2h5RGF0YS52
YXJpYW50KCkuZm9udCwgYWR2YW5jZUZvckdseXBoKG1fc3RyZXRjaHlEYXRhLnZhcmlhbnQoKSkp
OwogICAgICAgICBMYXlvdXRQb2ludCBvcGVyYXRvclRvcExlZnQgPSBjZWlsZWRJbnRQb2ludChw
YWludE9mZnNldCArIGxvY2F0aW9uKCkpOwogICAgICAgICBGbG9hdFJlY3QgZ2x5cGhCb3VuZHMg
PSBib3VuZHNGb3JHbHlwaChtX3N0cmV0Y2h5RGF0YS52YXJpYW50KCkpOwogICAgICAgICBMYXlv
dXRQb2ludCBvcGVyYXRvck9yaWdpbihvcGVyYXRvclRvcExlZnQueCgpLCBvcGVyYXRvclRvcExl
ZnQueSgpIC0gZ2x5cGhCb3VuZHMueSgpKTsKLSAgICAgICAgaW5mby5jb250ZXh0LT5kcmF3R2x5
cGhzKHN0eWxlKCkuZm9udENhc2NhZGUoKSwgKm1fc3RyZXRjaHlEYXRhLnZhcmlhbnQoKS5mb250
RGF0YSwgYnVmZmVyLCAwLCAxLCBvcGVyYXRvck9yaWdpbik7CisgICAgICAgIGluZm8uY29udGV4
dC0+ZHJhd0dseXBocyhzdHlsZSgpLmZvbnRDYXNjYWRlKCksICptX3N0cmV0Y2h5RGF0YS52YXJp
YW50KCkuZm9udCwgYnVmZmVyLCAwLCAxLCBvcGVyYXRvck9yaWdpbik7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKQEAgLTE5ODAsOCArMTk4MCw4IEBAIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0
b3I6OnBhaW50Q2hpbGRyZW4KIAogTGF5b3V0VW5pdCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6dHJh
aWxpbmdTcGFjZUVycm9yKCkKIHsKLSAgICBjb25zdCBhdXRvJiBwcmltYXJ5Rm9udERhdGEgPSBz
dHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCk7Ci0gICAgaWYgKCFwcmltYXJ5
Rm9udERhdGEubWF0aERhdGEoKSkKKyAgICBjb25zdCBhdXRvJiBwcmltYXJ5Rm9udCA9IHN0eWxl
KCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpOworICAgIGlmICghcHJpbWFyeUZvbnQubWF0
aERhdGEoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAvLyBGb3IgT3BlblR5cGUgTUFUSCBm
b250LCB0aGUgbGF5b3V0IGlzIGJhc2VkIG9uIFJlbmRlck1hdGhPcGVyYXRvciBmb3Igd2hpY2gg
dGhlIHByZWZlcnJlZCB3aWR0aCBpcyBzb21ldGltZXMgb3ZlcmVzdGltYXRlZCAoYnVnIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzAzMjYpLgpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0
b3IuaAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGht
bC9SZW5kZXJNYXRoTUxPcGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMSArMjgsMTEg
QEAKIAogI2lmIEVOQUJMRShNQVRITUwpCiAKKyNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAi
R2x5cGhQYWdlLmgiCiAjaW5jbHVkZSAiTWF0aE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIk9wZW5U
eXBlTWF0aERhdGEuaCIKICNpbmNsdWRlICJSZW5kZXJNYXRoTUxUb2tlbi5oIgotI2luY2x1ZGUg
IlNpbXBsZUZvbnREYXRhLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSYWRpY2FsT3BlcmF0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0
aE1MUmFkaWNhbE9wZXJhdG9yLmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSYWRpY2FsT3BlcmF0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIFJlbmRlck1hdGhNTFJhZGljYWxPcGVyYXRvcjo6
UmVuZGVyTWF0aE0KIAogdm9pZCBSZW5kZXJNYXRoTUxSYWRpY2FsT3BlcmF0b3I6OnN0cmV0Y2hU
byhMYXlvdXRVbml0IGhlaWdodEFib3ZlQmFzZWxpbmUsIExheW91dFVuaXQgZGVwdGhCZWxvd0Jh
c2VsaW5lKQogewotICAgIGlmICghc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0
YSgpLm1hdGhEYXRhKCkpIHsKKyAgICBpZiAoIXN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5
Rm9udCgpLm1hdGhEYXRhKCkpIHsKICAgICAgICAgLy8gSWYgd2UgZG8gbm90IGhhdmUgYW4gT3Bl
blR5cGUgTUFUSCBmb250LCB3ZSBhbHdheXMgbWFrZSB0aGUgcmFkaWNhbCBkZXB0aCBhIGJpdCBs
YXJnZXIgdGhhbiB0aGUgdGFyZ2V0LgogICAgICAgICBkZXB0aEJlbG93QmFzZWxpbmUgKz0gZ1Jh
ZGljYWxCb3R0b21Qb2ludExvd2VyOwogICAgIH0KQEAgLTgzLDcgKzgzLDcgQEAgdm9pZCBSZW5k
ZXJNYXRoTUxSYWRpY2FsT3BlcmF0b3I6OmNvbXB1dAogewogICAgIEFTU0VSVChwcmVmZXJyZWRM
b2dpY2FsV2lkdGhzRGlydHkoKSk7CiAKLSAgICBpZiAoc3R5bGUoKS5mb250Q2FzY2FkZSgpLnBy
aW1hcnlGb250RGF0YSgpLm1hdGhEYXRhKCkpIHsKKyAgICBpZiAoc3R5bGUoKS5mb250Q2FzY2Fk
ZSgpLnByaW1hcnlGb250KCkubWF0aERhdGEoKSkgewogICAgICAgICBSZW5kZXJNYXRoTUxPcGVy
YXRvcjo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KQEAgLTk2LDcgKzk2LDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxSYWRpY2FsT3BlcmF0b3I6
OmNvbXB1dAogCiB2b2lkIFJlbmRlck1hdGhNTFJhZGljYWxPcGVyYXRvcjo6Y29tcHV0ZUxvZ2lj
YWxIZWlnaHQoTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBMYXlvdXRVbml0IGxvZ2ljYWxUb3As
IExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyYgY29tcHV0ZWRWYWx1ZXMpIGNvbnN0CiB7Ci0g
ICAgaWYgKHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5tYXRoRGF0YSgp
KSB7CisgICAgaWYgKHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpLm1hdGhEYXRh
KCkpIHsKICAgICAgICAgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmNvbXB1dGVMb2dpY2FsSGVpZ2h0
KGxvZ2ljYWxIZWlnaHQsIGxvZ2ljYWxUb3AsIGNvbXB1dGVkVmFsdWVzKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KQEAgLTExMSw3ICsxMTEsNyBAQCB2b2lkIFJlbmRlck1hdGhNTFJhZGljYWxP
cGVyYXRvcjo6cGFpbnQoCiAgICAgaWYgKGluZm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgp
IHx8IGluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZUZvcmVncm91bmQgfHwgc3R5bGUoKS52aXNpYmls
aXR5KCkgIT0gVklTSUJMRSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKHN0eWxlKCkuZm9u
dENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5tYXRoRGF0YSgpKSB7CisgICAgaWYgKHN0eWxl
KCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpLm1hdGhEYXRhKCkpIHsKICAgICAgICAgUmVu
ZGVyTWF0aE1MT3BlcmF0b3I6OnBhaW50KGluZm8sIHBhaW50T2Zmc2V0KTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVy
TWF0aE1MUm9vdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21h
dGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjA4LDE3ICsyMDgsMTcgQEAgdm9pZCBSZW5kZXJNYXRoTUxSb290Ojp1cGRhdGVTdHls
ZSgpCiAgICAgTGF5b3V0VW5pdCBrZXJuQWZ0ZXJEZWdyZWUgPSAtMTAgKiBzdHlsZSgpLmZvbnRD
YXNjYWRlKCkuc2l6ZSgpIC8gMTg7CiAgICAgbV9kZWdyZWVCb3R0b21SYWlzZVBlcmNlbnQgPSAw
LjZmOwogCi0gICAgY29uc3QgYXV0byYgcHJpbWFyeUZvbnREYXRhID0gc3R5bGUoKS5mb250Q2Fz
Y2FkZSgpLnByaW1hcnlGb250RGF0YSgpOwotICAgIGlmIChhdXRvKiBtYXRoRGF0YSA9IHN0eWxl
KCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5tYXRoRGF0YSgpKSB7CisgICAgY29u
c3QgYXV0byYgcHJpbWFyeUZvbnQgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQo
KTsKKyAgICBpZiAoYXV0byogbWF0aERhdGEgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFy
eUZvbnQoKS5tYXRoRGF0YSgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBtX3ZlcnRpY2FsR2FwIHNo
b3VsZCB1c2UgUmFkaWNhbERpc3BsYXlTdHlsZVZlcnRpY2FsIGluIGRpc3BsYXkgbW9kZSAoaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExODczNykuCi0gICAgICAgIG1f
dmVydGljYWxHYXAgPSBtYXRoRGF0YS0+Z2V0TWF0aENvbnN0YW50KHByaW1hcnlGb250RGF0YSwg
T3BlblR5cGVNYXRoRGF0YTo6UmFkaWNhbFZlcnRpY2FsR2FwKTsKLSAgICAgICAgbV9ydWxlVGhp
Y2tuZXNzID0gbWF0aERhdGEtPmdldE1hdGhDb25zdGFudChwcmltYXJ5Rm9udERhdGEsIE9wZW5U
eXBlTWF0aERhdGE6OlJhZGljYWxSdWxlVGhpY2tuZXNzKTsKLSAgICAgICAgbV9leHRyYUFzY2Vu
ZGVyID0gbWF0aERhdGEtPmdldE1hdGhDb25zdGFudChwcmltYXJ5Rm9udERhdGEsIE9wZW5UeXBl
TWF0aERhdGE6OlJhZGljYWxFeHRyYUFzY2VuZGVyKTsKKyAgICAgICAgbV92ZXJ0aWNhbEdhcCA9
IG1hdGhEYXRhLT5nZXRNYXRoQ29uc3RhbnQocHJpbWFyeUZvbnQsIE9wZW5UeXBlTWF0aERhdGE6
OlJhZGljYWxWZXJ0aWNhbEdhcCk7CisgICAgICAgIG1fcnVsZVRoaWNrbmVzcyA9IG1hdGhEYXRh
LT5nZXRNYXRoQ29uc3RhbnQocHJpbWFyeUZvbnQsIE9wZW5UeXBlTWF0aERhdGE6OlJhZGljYWxS
dWxlVGhpY2tuZXNzKTsKKyAgICAgICAgbV9leHRyYUFzY2VuZGVyID0gbWF0aERhdGEtPmdldE1h
dGhDb25zdGFudChwcmltYXJ5Rm9udCwgT3BlblR5cGVNYXRoRGF0YTo6UmFkaWNhbEV4dHJhQXNj
ZW5kZXIpOwogCiAgICAgICAgIGlmICghaXNSZW5kZXJNYXRoTUxTcXVhcmVSb290KCkpIHsKLSAg
ICAgICAgICAgIGtlcm5CZWZvcmVEZWdyZWUgPSBtYXRoRGF0YS0+Z2V0TWF0aENvbnN0YW50KHBy
aW1hcnlGb250RGF0YSwgT3BlblR5cGVNYXRoRGF0YTo6UmFkaWNhbEtlcm5CZWZvcmVEZWdyZWUp
OwotICAgICAgICAgICAga2VybkFmdGVyRGVncmVlID0gbWF0aERhdGEtPmdldE1hdGhDb25zdGFu
dChwcmltYXJ5Rm9udERhdGEsIE9wZW5UeXBlTWF0aERhdGE6OlJhZGljYWxLZXJuQWZ0ZXJEZWdy
ZWUpOwotICAgICAgICAgICAgbV9kZWdyZWVCb3R0b21SYWlzZVBlcmNlbnQgPSBtYXRoRGF0YS0+
Z2V0TWF0aENvbnN0YW50KHByaW1hcnlGb250RGF0YSwgT3BlblR5cGVNYXRoRGF0YTo6UmFkaWNh
bERlZ3JlZUJvdHRvbVJhaXNlUGVyY2VudCk7CisgICAgICAgICAgICBrZXJuQmVmb3JlRGVncmVl
ID0gbWF0aERhdGEtPmdldE1hdGhDb25zdGFudChwcmltYXJ5Rm9udCwgT3BlblR5cGVNYXRoRGF0
YTo6UmFkaWNhbEtlcm5CZWZvcmVEZWdyZWUpOworICAgICAgICAgICAga2VybkFmdGVyRGVncmVl
ID0gbWF0aERhdGEtPmdldE1hdGhDb25zdGFudChwcmltYXJ5Rm9udCwgT3BlblR5cGVNYXRoRGF0
YTo6UmFkaWNhbEtlcm5BZnRlckRlZ3JlZSk7CisgICAgICAgICAgICBtX2RlZ3JlZUJvdHRvbVJh
aXNlUGVyY2VudCA9IG1hdGhEYXRhLT5nZXRNYXRoQ29uc3RhbnQocHJpbWFyeUZvbnQsIE9wZW5U
eXBlTWF0aERhdGE6OlJhZGljYWxEZWdyZWVCb3R0b21SYWlzZVBlcmNlbnQpOwogICAgICAgICB9
CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5
bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5k
ZXJTdHlsZS5jcHAJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExODQsNyArMTE4NCw3
IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgUmVuZGVyU3R5bGU6Omh5cGhlblMKICAgICAvLyBGSVhN
RTogVGhpcyBzaG91bGQgZGVwZW5kIG9uIGxvY2FsZS4KICAgICBERVBSRUNBVEVEX0RFRklORV9T
VEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBoeXBoZW5NaW51c1N0cmluZywgKCZoeXBoZW5NaW51
cywgMSkpOwogICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcs
IGh5cGhlblN0cmluZywgKCZoeXBoZW4sIDEpKTsKLSAgICByZXR1cm4gZm9udENhc2NhZGUoKS5w
cmltYXJ5Rm9udERhdGEoKS5nbHlwaEZvckNoYXJhY3RlcihoeXBoZW4pID8gaHlwaGVuU3RyaW5n
IDogaHlwaGVuTWludXNTdHJpbmc7CisgICAgcmV0dXJuIGZvbnRDYXNjYWRlKCkucHJpbWFyeUZv
bnQoKS5nbHlwaEZvckNoYXJhY3RlcihoeXBoZW4pID8gaHlwaGVuU3RyaW5nIDogaHlwaGVuTWlu
dXNTdHJpbmc7CiB9CiAKIGNvbnN0IEF0b21pY1N0cmluZyYgUmVuZGVyU3R5bGU6OnRleHRFbXBo
YXNpc01hcmtTdHJpbmcoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHVGV4dC5oIgogCiAjaW5jbHVkZSAiRmxv
YXRRdWFkLmgiCisjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgogI2luY2x1ZGUgIkhpdFRlc3RSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5o
IgpAQCAtNDUsNyArNDYsNiBAQAogI2luY2x1ZGUgIlNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0
LmgiCiAjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtTGlzdC5oIgogI2luY2x1ZGUgIlNWR1VSSVJlZmVy
ZW5jZS5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3Jt
U3RhdGUuaCIKICNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24uaCIKICNpbmNsdWRlIDx3dGYvU3Rh
Y2tTdGF0cy5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVU
ZXh0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R0lubGluZVRleHRCb3guY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTks
NyArNDE5LDcgQEAgVGV4dFJ1biBTVkdJbmxpbmVUZXh0Qm94Ojpjb25zdHJ1Y3RUZXh0UgogICAg
ICAgICAgICAgICAgICwgZGlyZWN0aW9uKCkKICAgICAgICAgICAgICAgICAsIGRpck92ZXJyaWRl
KCkgfHwgc3R5bGUtPnJ0bE9yZGVyaW5nKCkgPT0gVmlzdWFsT3JkZXIgLyogZGlyZWN0aW9uYWxP
dmVycmlkZSAqLyk7CiAKLSAgICBpZiAoc3R5bGUtPmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnRE
YXRhKCkuaXNTVkdGb250KCkpCisgICAgaWYgKHN0eWxlLT5mb250Q2FzY2FkZSgpLnByaW1hcnlG
b250KCkuaXNTVkdGb250KCkpCiAgICAgICAgIHJ1bi5zZXRSZW5kZXJpbmdDb250ZXh0KFNWR1Rl
eHRSdW5SZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUocmVuZGVyZXIoKSkpOwogCiAgICAgcnVuLmRp
c2FibGVSb3VuZGluZ0hhY2tzKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nLmNwcAkocmV2aXNp
b24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0
RW5naW5lU3BhY2luZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDE2ICs0MSwxNiBAQCBTVkdU
ZXh0TGF5b3V0RW5naW5lU3BhY2luZzo6U1ZHVGV4dExheW91CiBmbG9hdCBTVkdUZXh0TGF5b3V0
RW5naW5lU3BhY2luZzo6Y2FsY3VsYXRlU1ZHS2VybmluZyhib29sIGlzVmVydGljYWxUZXh0LCBj
b25zdCBTVkdUZXh0TWV0cmljczo6R2x5cGgmIGN1cnJlbnRHbHlwaCkKIHsKICNpZiBFTkFCTEUo
U1ZHX0ZPTlRTKQotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhJiBmb250RGF0YSA9IG1fZm9udC5w
cmltYXJ5Rm9udERhdGEoKTsKLSAgICBpZiAoIWZvbnREYXRhLmlzU1ZHRm9udCgpKSB7CisgICAg
Y29uc3QgRm9udCYgZm9udCA9IG1fZm9udC5wcmltYXJ5Rm9udCgpOworICAgIGlmICghZm9udC5p
c1NWR0ZvbnQoKSkgewogICAgICAgICBtX2xhc3RHbHlwaC5pc1ZhbGlkID0gZmFsc2U7CiAgICAg
ICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIEFTU0VSVChmb250RGF0YS5pc0N1c3RvbUZvbnQo
KSk7Ci0gICAgQVNTRVJUKGZvbnREYXRhLmlzU1ZHRm9udCgpKTsKKyAgICBBU1NFUlQoZm9udC5p
c0N1c3RvbUZvbnQoKSk7CisgICAgQVNTRVJUKGZvbnQuaXNTVkdGb250KCkpOwogCi0gICAgYXV0
byogc3ZnRm9udERhdGEgPSBzdGF0aWNfY2FzdDxjb25zdCBTVkdGb250RGF0YSo+KGZvbnREYXRh
LnN2Z0RhdGEoKSk7CisgICAgYXV0byogc3ZnRm9udERhdGEgPSBzdGF0aWNfY2FzdDxjb25zdCBT
VkdGb250RGF0YSo+KGZvbnQuc3ZnRGF0YSgpKTsKICAgICBTVkdGb250RmFjZUVsZW1lbnQqIHN2
Z0ZvbnRGYWNlID0gc3ZnRm9udERhdGEtPnN2Z0ZvbnRGYWNlRWxlbWVudCgpOwogICAgIEFTU0VS
VChzdmdGb250RmFjZSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
VGV4dE1ldHJpY3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHVGV4dE1ldHJpY3MuY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAs
NyArNzAsNyBAQCBUZXh0UnVuIFNWR1RleHRNZXRyaWNzOjpjb25zdHJ1Y3RUZXh0UnVuCiAgICAg
ICAgICAgICAgICAgLCBzdHlsZS5kaXJlY3Rpb24oKQogICAgICAgICAgICAgICAgICwgaXNPdmVy
cmlkZShzdHlsZS51bmljb2RlQmlkaSgpKSAvKiBkaXJlY3Rpb25hbE92ZXJyaWRlICovKTsKIAot
ICAgIGlmIChzdHlsZS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmlzU1ZHRm9udCgp
KQorICAgIGlmIChzdHlsZS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCkuaXNTVkdGb250KCkp
CiAgICAgICAgIHJ1bi5zZXRSZW5kZXJpbmdDb250ZXh0KFNWR1RleHRSdW5SZW5kZXJpbmdDb250
ZXh0OjpjcmVhdGUodGV4dCkpOwogCiAgICAgcnVuLmRpc2FibGVSb3VuZGluZ0hhY2tzKCk7CkBA
IC05MSw3ICs5MSw3IEBAIFNWR1RleHRNZXRyaWNzIFNWR1RleHRNZXRyaWNzOjptZWFzdXJlQ2gK
IAogU1ZHVGV4dE1ldHJpY3M6OlNWR1RleHRNZXRyaWNzKFJlbmRlclNWR0lubGluZVRleHQmIHRl
eHQsIHVuc2lnbmVkIHBvc2l0aW9uLCB1bnNpZ25lZCBsZW5ndGgsIGZsb2F0IHdpZHRoLCBjb25z
dCBTdHJpbmcmIGdseXBoTmFtZSkKIHsKLSAgICBib29sIG5lZWRzQ29udGV4dCA9IHRleHQuc3R5
bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmlzU1ZHRm9udCgpOworICAgIGJv
b2wgbmVlZHNDb250ZXh0ID0gdGV4dC5zdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQo
KS5pc1NWR0ZvbnQoKTsKICAgICBmbG9hdCBzY2FsaW5nRmFjdG9yID0gdGV4dC5zY2FsaW5nRmFj
dG9yKCk7CiAgICAgQVNTRVJUKHNjYWxpbmdGYWN0b3IpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250
ZXh0LmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDE4
ICszNywxOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBpbmxpbmUgY29uc3Qg
U1ZHRm9udERhdGEqIHN2Z0ZvbnRBbmRGb250RmFjZUVsZW1lbnRGb3JGb250RGF0YShjb25zdCBT
aW1wbGVGb250RGF0YSogZm9udERhdGEsIFNWR0ZvbnRGYWNlRWxlbWVudComIGZvbnRGYWNlLCBT
VkdGb250RWxlbWVudComIGZvbnQpCitzdGF0aWMgaW5saW5lIGNvbnN0IFNWR0ZvbnREYXRhKiBz
dmdGb250QW5kRm9udEZhY2VFbGVtZW50Rm9yRm9udERhdGEoY29uc3QgRm9udCogZm9udCwgU1ZH
Rm9udEZhY2VFbGVtZW50KiYgc3ZnRm9udEZhY2VFbGVtZW50LCBTVkdGb250RWxlbWVudComIHN2
Z0ZvbnRFbGVtZW50KQogewotICAgIEFTU0VSVChmb250RGF0YSk7Ci0gICAgQVNTRVJUKGZvbnRE
YXRhLT5pc0N1c3RvbUZvbnQoKSk7Ci0gICAgQVNTRVJUKGZvbnREYXRhLT5pc1NWR0ZvbnQoKSk7
CisgICAgQVNTRVJUKGZvbnQpOworICAgIEFTU0VSVChmb250LT5pc0N1c3RvbUZvbnQoKSk7Cisg
ICAgQVNTRVJUKGZvbnQtPmlzU1ZHRm9udCgpKTsKIAotICAgIGF1dG8qIHN2Z0ZvbnREYXRhID0g
c3RhdGljX2Nhc3Q8Y29uc3QgU1ZHRm9udERhdGEqPihmb250RGF0YS0+c3ZnRGF0YSgpKTsKKyAg
ICBhdXRvKiBzdmdGb250RGF0YSA9IHN0YXRpY19jYXN0PGNvbnN0IFNWR0ZvbnREYXRhKj4oZm9u
dC0+c3ZnRGF0YSgpKTsKIAotICAgIGZvbnRGYWNlID0gc3ZnRm9udERhdGEtPnN2Z0ZvbnRGYWNl
RWxlbWVudCgpOwotICAgIEFTU0VSVChmb250RmFjZSk7CisgICAgc3ZnRm9udEZhY2VFbGVtZW50
ID0gc3ZnRm9udERhdGEtPnN2Z0ZvbnRGYWNlRWxlbWVudCgpOworICAgIEFTU0VSVChzdmdGb250
RmFjZUVsZW1lbnQpOwogCi0gICAgZm9udCA9IGZvbnRGYWNlLT5hc3NvY2lhdGVkRm9udEVsZW1l
bnQoKTsKKyAgICBzdmdGb250RWxlbWVudCA9IHN2Z0ZvbnRGYWNlRWxlbWVudC0+YXNzb2NpYXRl
ZEZvbnRFbGVtZW50KCk7CiAgICAgcmV0dXJuIHN2Z0ZvbnREYXRhOwogfQogCkBAIC02MSwyMSAr
NjEsMjEgQEAgZmxvYXQgU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmZsb2F0VwogICAgIHJl
dHVybiBpdC5ydW5XaWR0aFNvRmFyKCk7CiB9CiAKLWJvb2wgU1ZHVGV4dFJ1blJlbmRlcmluZ0Nv
bnRleHQ6OmFwcGx5U1ZHS2VybmluZyhjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsIFdp
ZHRoSXRlcmF0b3ImIGl0ZXJhdG9yLCBHbHlwaEJ1ZmZlciogZ2x5cGhCdWZmZXIsIGludCBmcm9t
KSBjb25zdAorYm9vbCBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6YXBwbHlTVkdLZXJuaW5n
KGNvbnN0IEZvbnQqIGZvbnQsIFdpZHRoSXRlcmF0b3ImIGl0ZXJhdG9yLCBHbHlwaEJ1ZmZlciog
Z2x5cGhCdWZmZXIsIGludCBmcm9tKSBjb25zdAogewogICAgIEFTU0VSVChnbHlwaEJ1ZmZlcik7
CiAgICAgQVNTRVJUKGdseXBoQnVmZmVyLT5zaXplKCkgPiAxKTsKICAgICBTVkdGb250RWxlbWVu
dCogZm9udEVsZW1lbnQgPSAwOwogICAgIFNWR0ZvbnRGYWNlRWxlbWVudCogZm9udEZhY2VFbGVt
ZW50ID0gMDsKIAotICAgIHN2Z0ZvbnRBbmRGb250RmFjZUVsZW1lbnRGb3JGb250RGF0YShmb250
RGF0YSwgZm9udEZhY2VFbGVtZW50LCBmb250RWxlbWVudCk7CisgICAgc3ZnRm9udEFuZEZvbnRG
YWNlRWxlbWVudEZvckZvbnREYXRhKGZvbnQsIGZvbnRGYWNlRWxlbWVudCwgZm9udEVsZW1lbnQp
OwogICAgIGlmICghZm9udEVsZW1lbnQgfHwgIWZvbnRGYWNlRWxlbWVudCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgaWYgKGZvbnRFbGVtZW50LT5ob3Jpem9udGFsS2VybmluZ01hcElz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBmbG9hdCBzY2FsZSA9IHNjYWxl
RW1Ub1VuaXRzKGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5zaXplKCksIGZvbnRGYWNlRWxlbWVu
dC0+dW5pdHNQZXJFbSgpKTsKKyAgICBmbG9hdCBzY2FsZSA9IHNjYWxlRW1Ub1VuaXRzKGZvbnQt
PnBsYXRmb3JtRGF0YSgpLnNpemUoKSwgZm9udEZhY2VFbGVtZW50LT51bml0c1BlckVtKCkpOwog
CiAgICAgU3RyaW5nIGxhc3RHbHlwaE5hbWU7CiAgICAgU3RyaW5nIGxhc3RVbmljb2RlU3RyaW5n
OwpAQCAtMjA1LDcgKzIwNSw3IEBAIHZvaWQgU1ZHR2x5cGhUb1BhdGhUcmFuc2xhdG9yOjphZHZh
bmNlKCkKICAgICAgICAgfQogCiAgICAgICAgICsrbV9pbmRleDsKLSAgICAgICAgaWYgKG1faW5k
ZXggPj0gbV9zdG9wcGluZ1BvaW50IHx8ICFtX2dseXBoQnVmZmVyLmZvbnREYXRhQXQobV9pbmRl
eCktPmlzU1ZHRm9udCgpKQorICAgICAgICBpZiAobV9pbmRleCA+PSBtX3N0b3BwaW5nUG9pbnQg
fHwgIW1fZ2x5cGhCdWZmZXIuZm9udEF0KG1faW5kZXgpLT5pc1NWR0ZvbnQoKSkKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBtX2dseXBoID0gbV9nbHlwaEJ1ZmZlci5nbHlwaEF0KG1faW5k
ZXgpOwogICAgICAgICBpZiAoIW1fZ2x5cGgpCkBAIC0yNDQsMTIgKzI0NCwxMiBAQCBjbGFzcyBE
dW1teUdseXBoVG9QYXRoVHJhbnNsYXRvciBmaW5hbCA6CiAgICAgfQogfTsKIAotc3RkOjp1bmlx
dWVfcHRyPEdseXBoVG9QYXRoVHJhbnNsYXRvcj4gU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6
OmNyZWF0ZUdseXBoVG9QYXRoVHJhbnNsYXRvcihjb25zdCBTaW1wbGVGb250RGF0YSYgZm9udERh
dGEsIGNvbnN0IFRleHRSdW4qIHRleHRSdW4sIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZl
ciwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25z
dAorc3RkOjp1bmlxdWVfcHRyPEdseXBoVG9QYXRoVHJhbnNsYXRvcj4gU1ZHVGV4dFJ1blJlbmRl
cmluZ0NvbnRleHQ6OmNyZWF0ZUdseXBoVG9QYXRoVHJhbnNsYXRvcihjb25zdCBGb250JiBmb250
LCBjb25zdCBUZXh0UnVuKiB0ZXh0UnVuLCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIs
IGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QK
IHsKICAgICBTVkdGb250RWxlbWVudCogZm9udEVsZW1lbnQgPSBudWxscHRyOwogICAgIFNWR0Zv
bnRGYWNlRWxlbWVudCogZm9udEZhY2VFbGVtZW50ID0gbnVsbHB0cjsKIAotICAgIGNvbnN0IFNW
R0ZvbnREYXRhKiBzdmdGb250RGF0YSA9IHN2Z0ZvbnRBbmRGb250RmFjZUVsZW1lbnRGb3JGb250
RGF0YSgmZm9udERhdGEsIGZvbnRGYWNlRWxlbWVudCwgZm9udEVsZW1lbnQpOworICAgIGNvbnN0
IFNWR0ZvbnREYXRhKiBzdmdGb250RGF0YSA9IHN2Z0ZvbnRBbmRGb250RmFjZUVsZW1lbnRGb3JG
b250RGF0YSgmZm9udCwgZm9udEZhY2VFbGVtZW50LCBmb250RWxlbWVudCk7CiAgICAgaWYgKCFm
b250RWxlbWVudCB8fCAhZm9udEZhY2VFbGVtZW50KQogICAgICAgICByZXR1cm4gc3RkOjptYWtl
X3VuaXF1ZTxEdW1teUdseXBoVG9QYXRoVHJhbnNsYXRvcj4oKTsKIApAQCAtMjU3LDEyICsyNTcs
MTIgQEAgc3RkOjp1bmlxdWVfcHRyPEdseXBoVG9QYXRoVHJhbnNsYXRvcj4gUwogICAgIFJlbmRl
clN0eWxlJiBzdHlsZSA9IGVsZW1lbnRSZW5kZXJlci5zdHlsZSgpOwogICAgIGJvb2wgaXNWZXJ0
aWNhbFRleHQgPSBzdHlsZS5zdmdTdHlsZSgpLmlzVmVydGljYWxXcml0aW5nTW9kZSgpOwogCi0g
ICAgZmxvYXQgc2NhbGUgPSBzY2FsZUVtVG9Vbml0cyhmb250RGF0YS5wbGF0Zm9ybURhdGEoKS5z
aXplKCksIGZvbnRGYWNlRWxlbWVudC0+dW5pdHNQZXJFbSgpKTsKKyAgICBmbG9hdCBzY2FsZSA9
IHNjYWxlRW1Ub1VuaXRzKGZvbnQucGxhdGZvcm1EYXRhKCkuc2l6ZSgpLCBmb250RmFjZUVsZW1l
bnQtPnVuaXRzUGVyRW0oKSk7CiAKICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxTVkdHbHlw
aFRvUGF0aFRyYW5zbGF0b3I+KHRleHRSdW4sIGdseXBoQnVmZmVyLCBwb2ludCwgKnN2Z0ZvbnRE
YXRhLCAqZm9udEVsZW1lbnQsIGZyb20sIG51bUdseXBocywgc2NhbGUsIGlzVmVydGljYWxUZXh0
KTsKIH0KIAotdm9pZCBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6ZHJhd1NWR0dseXBocyhH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwg
Y29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Cit2b2lkIFNWR1RleHRSdW5SZW5kZXJpbmdD
b250ZXh0OjpkcmF3U1ZHR2x5cGhzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRm9u
dCogZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBpbnQgZnJvbSwgaW50IG51
bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0CiB7CiAgICAgYXV0byBhY3Rp
dmVQYWludGluZ1Jlc291cmNlID0gdGhpcy0+YWN0aXZlUGFpbnRpbmdSZXNvdXJjZSgpOwogICAg
IGlmICghYWN0aXZlUGFpbnRpbmdSZXNvdXJjZSkgewpAQCAtMjc4LDcgKzI3OCw3IEBAIHZvaWQg
U1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmRyYXdTVkcKICAgICBBU1NFUlQoYWN0aXZlUGFp
bnRpbmdSZXNvdXJjZSk7CiAKICAgICBSZW5kZXJTVkdSZXNvdXJjZU1vZGUgcmVzb3VyY2VNb2Rl
ID0gY29udGV4dC0+dGV4dERyYXdpbmdNb2RlKCkgPT0gVGV4dE1vZGVTdHJva2UgPyBBcHBseVRv
U3Ryb2tlTW9kZSA6IEFwcGx5VG9GaWxsTW9kZTsKLSAgICBmb3IgKGF1dG8gdHJhbnNsYXRvciA9
IGNyZWF0ZUdseXBoVG9QYXRoVHJhbnNsYXRvcigqZm9udERhdGEsIG51bGxwdHIsIGdseXBoQnVm
ZmVyLCBmcm9tLCBudW1HbHlwaHMsIHBvaW50KTsgdHJhbnNsYXRvci0+Y29udGFpbnNNb3JlUGF0
aHMoKTsgdHJhbnNsYXRvci0+YWR2YW5jZSgpKSB7CisgICAgZm9yIChhdXRvIHRyYW5zbGF0b3Ig
PSBjcmVhdGVHbHlwaFRvUGF0aFRyYW5zbGF0b3IoKmZvbnQsIG51bGxwdHIsIGdseXBoQnVmZmVy
LCBmcm9tLCBudW1HbHlwaHMsIHBvaW50KTsgdHJhbnNsYXRvci0+Y29udGFpbnNNb3JlUGF0aHMo
KTsgdHJhbnNsYXRvci0+YWR2YW5jZSgpKSB7CiAgICAgICAgIFBhdGggZ2x5cGhQYXRoID0gdHJh
bnNsYXRvci0+cGF0aCgpOwogICAgICAgICBpZiAoYWN0aXZlUGFpbnRpbmdSZXNvdXJjZS0+YXBw
bHlSZXNvdXJjZShlbGVtZW50UmVuZGVyZXIsIHN0eWxlLCBjb250ZXh0LCByZXNvdXJjZU1vZGUp
KSB7CiAgICAgICAgICAgICBmbG9hdCBzdHJva2VUaGlja25lc3MgPSBjb250ZXh0LT5zdHJva2VU
aGlja25lc3MoKTsKQEAgLTI5MiwxMyArMjkyLDEzIEBAIHZvaWQgU1ZHVGV4dFJ1blJlbmRlcmlu
Z0NvbnRleHQ6OmRyYXdTVkcKIAogc3RhdGljIEdseXBoRGF0YSBtaXNzaW5nR2x5cGhGb3JGb250
KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250KQogewotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhJiBw
cmltYXJ5Rm9udERhdGEgPSBmb250LnByaW1hcnlGb250RGF0YSgpOwotICAgIGlmICghcHJpbWFy
eUZvbnREYXRhLmlzU1ZHRm9udCgpKQorICAgIGNvbnN0IEZvbnQmIHByaW1hcnlGb250ID0gZm9u
dC5wcmltYXJ5Rm9udCgpOworICAgIGlmICghcHJpbWFyeUZvbnQuaXNTVkdGb250KCkpCiAgICAg
ICAgIHJldHVybiBHbHlwaERhdGEoKTsKICAgICBTVkdGb250RWxlbWVudCogZm9udEVsZW1lbnQ7
CiAgICAgU1ZHRm9udEZhY2VFbGVtZW50KiBmb250RmFjZUVsZW1lbnQ7Ci0gICAgc3ZnRm9udEFu
ZEZvbnRGYWNlRWxlbWVudEZvckZvbnREYXRhKCZwcmltYXJ5Rm9udERhdGEsIGZvbnRGYWNlRWxl
bWVudCwgZm9udEVsZW1lbnQpOwotICAgIHJldHVybiBHbHlwaERhdGEoZm9udEVsZW1lbnQtPm1p
c3NpbmdHbHlwaCgpLCAmcHJpbWFyeUZvbnREYXRhKTsKKyAgICBzdmdGb250QW5kRm9udEZhY2VF
bGVtZW50Rm9yRm9udERhdGEoJnByaW1hcnlGb250LCBmb250RmFjZUVsZW1lbnQsIGZvbnRFbGVt
ZW50KTsKKyAgICByZXR1cm4gR2x5cGhEYXRhKGZvbnRFbGVtZW50LT5taXNzaW5nR2x5cGgoKSwg
JnByaW1hcnlGb250KTsKIH0KIAogR2x5cGhEYXRhIFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0
OjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIFdpZHRoSXRl
cmF0b3ImIGl0ZXJhdG9yLCBVQ2hhcjMyIGNoYXJhY3RlciwgYm9vbCBtaXJyb3IsIGludCBjdXJy
ZW50Q2hhcmFjdGVyLCB1bnNpZ25lZCYgYWR2YW5jZUxlbmd0aCwgU3RyaW5nJiBub3JtYWxpemVk
U3BhY2VzU3RyaW5nQ2FjaGUpCkBAIC0zMDcsMjMgKzMwNywyMyBAQCBHbHlwaERhdGEgU1ZHVGV4
dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmdsCiAgICAgaWYgKCFnbHlwaERhdGEuZ2x5cGgpCiAgICAg
ICAgIHJldHVybiBtaXNzaW5nR2x5cGhGb3JGb250KGZvbnQpOwogCi0gICAgQVNTRVJUKGdseXBo
RGF0YS5mb250RGF0YSk7CisgICAgQVNTRVJUKGdseXBoRGF0YS5mb250KTsKIAogICAgIC8vIENo
YXJhY3RlcnMgZW5jbG9zZWQgYnkgYW4gPGFsdEdseXBoPiBlbGVtZW50LCBtYXkgbm90IGJlIHJl
Z2lzdGVyZWQgaW4gdGhlIEdseXBoUGFnZS4KLSAgICBpZiAoIWdseXBoRGF0YS5mb250RGF0YS0+
aXNTVkdGb250KCkpIHsKKyAgICBpZiAoIWdseXBoRGF0YS5mb250LT5pc1NWR0ZvbnQoKSkgewog
ICAgICAgICBhdXRvJiBlbGVtZW50UmVuZGVyZXIgPSBpczxSZW5kZXJFbGVtZW50PihyZW5kZXJl
cigpKSA/IGRvd25jYXN0PFJlbmRlckVsZW1lbnQ+KHJlbmRlcmVyKCkpIDogKnJlbmRlcmVyKCku
cGFyZW50KCk7CiAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRSZW5kZXJlckVsZW1lbnQgPSBl
bGVtZW50UmVuZGVyZXIuZWxlbWVudCgpKSB7CiAgICAgICAgICAgICBpZiAoaXM8U1ZHQWx0R2x5
cGhFbGVtZW50PigqcGFyZW50UmVuZGVyZXJFbGVtZW50KSkKLSAgICAgICAgICAgICAgICBnbHlw
aERhdGEuZm9udERhdGEgPSAmZm9udC5wcmltYXJ5Rm9udERhdGEoKTsKKyAgICAgICAgICAgICAg
ICBnbHlwaERhdGEuZm9udCA9ICZmb250LnByaW1hcnlGb250KCk7CiAgICAgICAgIH0KICAgICB9
CiAKLSAgICBpZiAoIWdseXBoRGF0YS5mb250RGF0YS0+aXNTVkdGb250KCkpCisgICAgaWYgKCFn
bHlwaERhdGEuZm9udC0+aXNTVkdGb250KCkpCiAgICAgICAgIHJldHVybiBnbHlwaERhdGE7CiAK
ICAgICBTVkdGb250RWxlbWVudCogZm9udEVsZW1lbnQgPSBudWxscHRyOwogICAgIFNWR0ZvbnRG
YWNlRWxlbWVudCogZm9udEZhY2VFbGVtZW50ID0gbnVsbHB0cjsKLSAgICBjb25zdCBTVkdGb250
RGF0YSogc3ZnRm9udERhdGEgPSBzdmdGb250QW5kRm9udEZhY2VFbGVtZW50Rm9yRm9udERhdGEo
Z2x5cGhEYXRhLmZvbnREYXRhLCBmb250RmFjZUVsZW1lbnQsIGZvbnRFbGVtZW50KTsKKyAgICBj
b25zdCBTVkdGb250RGF0YSogc3ZnRm9udERhdGEgPSBzdmdGb250QW5kRm9udEZhY2VFbGVtZW50
Rm9yRm9udERhdGEoZ2x5cGhEYXRhLmZvbnQsIGZvbnRGYWNlRWxlbWVudCwgZm9udEVsZW1lbnQp
OwogICAgIGlmICghc3ZnRm9udERhdGEpCiAgICAgICAgIHJldHVybiBnbHlwaERhdGE7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRl
eHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRS
dW5SZW5kZXJpbmdDb250ZXh0LmgJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuaAkod29ya2luZyBjb3B5
KQpAQCAtNDMsOSArNDMsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRBY3RpdmVQYWludGluZ1Jl
c291cmNlKFJlbmRlclNWR1Jlc291cmNlKiBvYmplY3QpIHsgbV9hY3RpdmVQYWludGluZ1Jlc291
cmNlID0gb2JqZWN0OyB9CiAKICAgICB2aXJ0dWFsIEdseXBoRGF0YSBnbHlwaERhdGFGb3JDaGFy
YWN0ZXIoY29uc3QgRm9udENhc2NhZGUmLCBXaWR0aEl0ZXJhdG9yJiwgVUNoYXIzMiBjaGFyYWN0
ZXIsIGJvb2wgbWlycm9yLCBpbnQgY3VycmVudENoYXJhY3RlciwgdW5zaWduZWQmIGFkdmFuY2VM
ZW5ndGgsIFN0cmluZyYgbm9ybWFsaXplZFNwYWNlc1N0cmluZ0NhY2hlKSBvdmVycmlkZTsKLSAg
ICB2aXJ0dWFsIHZvaWQgZHJhd1NWR0dseXBocyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBTaW1w
bGVGb250RGF0YSosIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCB0bywgY29uc3Qg
RmxvYXRQb2ludCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkcmF3U1ZHR2x5
cGhzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZvbnQqLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGlu
dCBmcm9tLCBpbnQgdG8sIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdCBvdmVycmlkZTsKICAgICB2
aXJ0dWFsIGZsb2F0IGZsb2F0V2lkdGhVc2luZ1NWR0ZvbnQoY29uc3QgRm9udENhc2NhZGUmLCBj
b25zdCBUZXh0UnVuJiwgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcmIGdseXBoTmFtZSkgY29u
c3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIGFwcGx5U1ZHS2VybmluZyhjb25zdCBTaW1w
bGVGb250RGF0YSosIFdpZHRoSXRlcmF0b3ImLCBHbHlwaEJ1ZmZlciosIGludCBmcm9tKSBjb25z
dCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgYXBwbHlTVkdLZXJuaW5nKGNvbnN0IEZvbnQq
LCBXaWR0aEl0ZXJhdG9yJiwgR2x5cGhCdWZmZXIqLCBpbnQgZnJvbSkgY29uc3Qgb3ZlcnJpZGU7
CiAjZW5kaWYKIAogcHJpdmF0ZToKQEAgLTYwLDcgKzYwLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0
dWFsIH5TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dCgpIHsgfQogCiAjaWYgRU5BQkxFKFNWR19G
T05UUykKLSAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxHbHlwaFRvUGF0aFRyYW5zbGF0b3I+
IGNyZWF0ZUdseXBoVG9QYXRoVHJhbnNsYXRvcihjb25zdCBTaW1wbGVGb250RGF0YSYsIGNvbnN0
IFRleHRSdW4qLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBj
b25zdCBGbG9hdFBvaW50JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBzdGQ6OnVuaXF1
ZV9wdHI8R2x5cGhUb1BhdGhUcmFuc2xhdG9yPiBjcmVhdGVHbHlwaFRvUGF0aFRyYW5zbGF0b3Io
Y29uc3QgRm9udCYsIGNvbnN0IFRleHRSdW4qLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBmcm9t
LCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Qgb3ZlcnJpZGU7CiAjZW5k
aWYKIAogICAgIFJlbmRlck9iamVjdCYgbV9yZW5kZXJlcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGb250RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZvbnREYXRhLmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZvbnREYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsMTUgKzU3LDE1IEBAIFNWR0ZvbnRE
YXRhOjpTVkdGb250RGF0YShTVkdGb250RmFjZUVsZW0KICAgICBBU1NFUlRfQVJHKGZvbnRGYWNl
RWxlbWVudCwgZm9udEZhY2VFbGVtZW50KTsKIH0KIAotdm9pZCBTVkdGb250RGF0YTo6aW5pdGlh
bGl6ZUZvbnREYXRhKFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwgZmxvYXQgZm9udFNpemUpCit2
b2lkIFNWR0ZvbnREYXRhOjppbml0aWFsaXplRm9udChGb250KiBmb250LCBmbG9hdCBmb250U2l6
ZSkKIHsKLSAgICBBU1NFUlQoZm9udERhdGEpOworICAgIEFTU0VSVChmb250KTsKIAogICAgIFNW
R0ZvbnRGYWNlRWxlbWVudCogc3ZnRm9udEZhY2VFbGVtZW50ID0gdGhpcy0+c3ZnRm9udEZhY2VF
bGVtZW50KCk7CiAgICAgQVNTRVJUKHN2Z0ZvbnRGYWNlRWxlbWVudCk7CiAKLSAgICBmb250RGF0
YS0+c2V0WmVyb1dpZHRoU3BhY2VHbHlwaCgwKTsKLSAgICBmb250RGF0YS0+ZGV0ZXJtaW5lUGl0
Y2goKTsKKyAgICBmb250LT5zZXRaZXJvV2lkdGhTcGFjZUdseXBoKDApOworICAgIGZvbnQtPmRl
dGVybWluZVBpdGNoKCk7CiAKICAgICB1bnNpZ25lZCB1bml0c1BlckVtID0gc3ZnRm9udEZhY2VF
bGVtZW50LT51bml0c1BlckVtKCk7CiAgICAgZmxvYXQgc2NhbGUgPSBzY2FsZUVtVG9Vbml0cyhm
b250U2l6ZSwgdW5pdHNQZXJFbSk7CkBAIC03NCwxNSArNzQsMTUgQEAgdm9pZCBTVkdGb250RGF0
YTo6aW5pdGlhbGl6ZUZvbnREYXRhKFNpbQogICAgIGZsb2F0IGRlc2NlbnQgPSBzdmdGb250RmFj
ZUVsZW1lbnQtPmRlc2NlbnQoKSAqIHNjYWxlOwogICAgIGZsb2F0IGxpbmVHYXAgPSAwLjFmICog
Zm9udFNpemU7CiAKLSAgICBjb25zdCBHbHlwaFBhZ2UqIGdseXBoUGFnZVplcm8gPSBmb250RGF0
YS0+Z2x5cGhQYWdlKDApOworICAgIGNvbnN0IEdseXBoUGFnZSogZ2x5cGhQYWdlWmVybyA9IGZv
bnQtPmdseXBoUGFnZSgwKTsKIAogICAgIGlmICgheEhlaWdodCAmJiBnbHlwaFBhZ2VaZXJvKSB7
CiAgICAgICAgIC8vIEZhbGxiYWNrIGlmIHhfaGVpZ2h0QXR0ciBpcyBub3Qgc3BlY2lmaWVkIGZv
ciB0aGUgZm9udCBlbGVtZW50LgogICAgICAgICBHbHlwaCBsZXR0ZXJYR2x5cGggPSBnbHlwaFBh
Z2VaZXJvLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoJ3gnKS5nbHlwaDsKLSAgICAgICAgeEhlaWdo
dCA9IGxldHRlclhHbHlwaCA/IGZvbnREYXRhLT53aWR0aEZvckdseXBoKGxldHRlclhHbHlwaCkg
OiAyICogYXNjZW50IC8gMzsKKyAgICAgICAgeEhlaWdodCA9IGxldHRlclhHbHlwaCA/IGZvbnQt
PndpZHRoRm9yR2x5cGgobGV0dGVyWEdseXBoKSA6IDIgKiBhc2NlbnQgLyAzOwogICAgIH0KIAot
ICAgIEZvbnRNZXRyaWNzJiBmb250TWV0cmljcyA9IGZvbnREYXRhLT5mb250TWV0cmljcygpOwor
ICAgIEZvbnRNZXRyaWNzJiBmb250TWV0cmljcyA9IGZvbnQtPmZvbnRNZXRyaWNzKCk7CiAgICAg
Zm9udE1ldHJpY3Muc2V0VW5pdHNQZXJFbSh1bml0c1BlckVtKTsKICAgICBmb250TWV0cmljcy5z
ZXRBc2NlbnQoYXNjZW50KTsKICAgICBmb250TWV0cmljcy5zZXREZXNjZW50KGRlc2NlbnQpOwpA
QCAtOTEsMjUgKzkxLDI1IEBAIHZvaWQgU1ZHRm9udERhdGE6OmluaXRpYWxpemVGb250RGF0YShT
aW0KICAgICBmb250TWV0cmljcy5zZXRYSGVpZ2h0KHhIZWlnaHQpOwogCiAgICAgaWYgKCFnbHlw
aFBhZ2VaZXJvKSB7Ci0gICAgICAgIGZvbnREYXRhLT5zZXRTcGFjZUdseXBoKDApOwotICAgICAg
ICBmb250RGF0YS0+c2V0U3BhY2VXaWR0aHMoMCk7Ci0gICAgICAgIGZvbnREYXRhLT5zZXRBdmdD
aGFyV2lkdGgoMCk7Ci0gICAgICAgIGZvbnREYXRhLT5zZXRNYXhDaGFyV2lkdGgoYXNjZW50KTsK
KyAgICAgICAgZm9udC0+c2V0U3BhY2VHbHlwaCgwKTsKKyAgICAgICAgZm9udC0+c2V0U3BhY2VX
aWR0aHMoMCk7CisgICAgICAgIGZvbnQtPnNldEF2Z0NoYXJXaWR0aCgwKTsKKyAgICAgICAgZm9u
dC0+c2V0TWF4Q2hhcldpZHRoKGFzY2VudCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAg
ICAvLyBDYWxjdWxhdGUgc3BhY2Ugd2lkdGguCiAgICAgR2x5cGggc3BhY2VHbHlwaCA9IGdseXBo
UGFnZVplcm8tPmdseXBoRGF0YUZvckNoYXJhY3RlcignICcpLmdseXBoOwotICAgIGZvbnREYXRh
LT5zZXRTcGFjZUdseXBoKHNwYWNlR2x5cGgpOwotICAgIGZvbnREYXRhLT5zZXRTcGFjZVdpZHRo
cyhmb250RGF0YS0+d2lkdGhGb3JHbHlwaChzcGFjZUdseXBoKSk7CisgICAgZm9udC0+c2V0U3Bh
Y2VHbHlwaChzcGFjZUdseXBoKTsKKyAgICBmb250LT5zZXRTcGFjZVdpZHRocyhmb250LT53aWR0
aEZvckdseXBoKHNwYWNlR2x5cGgpKTsKIAogICAgIC8vIEVzdGltYXRlIGF2ZXJhZ2UgY2hhcmFj
dGVyIHdpZHRoLgogICAgIEdseXBoIG51bWVyYWxaZXJvR2x5cGggPSBnbHlwaFBhZ2VaZXJvLT5n
bHlwaERhdGFGb3JDaGFyYWN0ZXIoJzAnKS5nbHlwaDsKLSAgICBmb250RGF0YS0+c2V0QXZnQ2hh
cldpZHRoKG51bWVyYWxaZXJvR2x5cGggPyBmb250RGF0YS0+d2lkdGhGb3JHbHlwaChudW1lcmFs
WmVyb0dseXBoKSA6IGZvbnREYXRhLT5zcGFjZVdpZHRoKCkpOworICAgIGZvbnQtPnNldEF2Z0No
YXJXaWR0aChudW1lcmFsWmVyb0dseXBoID8gZm9udC0+d2lkdGhGb3JHbHlwaChudW1lcmFsWmVy
b0dseXBoKSA6IGZvbnQtPnNwYWNlV2lkdGgoKSk7CiAKICAgICAvLyBFc3RpbWF0ZSBtYXhpbXVt
IGNoYXJhY3RlciB3aWR0aC4KICAgICBHbHlwaCBsZXR0ZXJXR2x5cGggPSBnbHlwaFBhZ2VaZXJv
LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoJ1cnKS5nbHlwaDsKLSAgICBmb250RGF0YS0+c2V0TWF4
Q2hhcldpZHRoKGxldHRlcldHbHlwaCA/IGZvbnREYXRhLT53aWR0aEZvckdseXBoKGxldHRlcldH
bHlwaCkgOiBhc2NlbnQpOworICAgIGZvbnQtPnNldE1heENoYXJXaWR0aChsZXR0ZXJXR2x5cGgg
PyBmb250LT53aWR0aEZvckdseXBoKGxldHRlcldHbHlwaCkgOiBhc2NlbnQpOwogfQogCiBmbG9h
dCBTVkdGb250RGF0YTo6d2lkdGhGb3JTVkdHbHlwaChHbHlwaCBnbHlwaCwgZmxvYXQgZm9udFNp
emUpIGNvbnN0CkBAIC0yMDgsMTAgKzIwOCwxMCBAQCBib29sIFNWR0ZvbnREYXRhOjphcHBseVNW
R0dseXBoU2VsZWN0aW9uCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFNWR0ZvbnREYXRh
OjpmaWxsU1ZHR2x5cGhQYWdlKEdseXBoUGFnZSogcGFnZVRvRmlsbCwgdW5zaWduZWQgb2Zmc2V0
LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwg
Y29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKSBjb25zdAorYm9vbCBTVkdGb250RGF0YTo6
ZmlsbFNWR0dseXBoUGFnZShHbHlwaFBhZ2UqIHBhZ2VUb0ZpbGwsIHVuc2lnbmVkIG9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNv
bnN0IEZvbnQqIGZvbnQpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGZvbnREYXRhLT5pc0N1c3RvbUZv
bnQoKSk7Ci0gICAgQVNTRVJUKGZvbnREYXRhLT5pc1NWR0ZvbnQoKSk7CisgICAgQVNTRVJUKGZv
bnQtPmlzQ3VzdG9tRm9udCgpKTsKKyAgICBBU1NFUlQoZm9udC0+aXNTVkdGb250KCkpOwogCiAg
ICAgU1ZHRm9udEZhY2VFbGVtZW50KiBmb250RmFjZUVsZW1lbnQgPSB0aGlzLT5zdmdGb250RmFj
ZUVsZW1lbnQoKTsKICAgICBBU1NFUlQoZm9udEZhY2VFbGVtZW50KTsKQEAgLTIyMCwxMyArMjIw
LDEzIEBAIGJvb2wgU1ZHRm9udERhdGE6OmZpbGxTVkdHbHlwaFBhZ2UoR2x5cGgKICAgICBBU1NF
UlQoZm9udEVsZW1lbnQpOwogCiAgICAgaWYgKGJ1ZmZlckxlbmd0aCA9PSBsZW5ndGgpCi0gICAg
ICAgIHJldHVybiBmaWxsQk1QR2x5cGhzKGZvbnRFbGVtZW50LCBwYWdlVG9GaWxsLCBvZmZzZXQs
IGxlbmd0aCwgYnVmZmVyLCBmb250RGF0YSk7CisgICAgICAgIHJldHVybiBmaWxsQk1QR2x5cGhz
KGZvbnRFbGVtZW50LCBwYWdlVG9GaWxsLCBvZmZzZXQsIGxlbmd0aCwgYnVmZmVyLCBmb250KTsK
IAogICAgIEFTU0VSVChidWZmZXJMZW5ndGggPT0gMiAqIGxlbmd0aCk7Ci0gICAgcmV0dXJuIGZp
bGxOb25CTVBHbHlwaHMoZm9udEVsZW1lbnQsIHBhZ2VUb0ZpbGwsIG9mZnNldCwgbGVuZ3RoLCBi
dWZmZXIsIGZvbnREYXRhKTsKKyAgICByZXR1cm4gZmlsbE5vbkJNUEdseXBocyhmb250RWxlbWVu
dCwgcGFnZVRvRmlsbCwgb2Zmc2V0LCBsZW5ndGgsIGJ1ZmZlciwgZm9udCk7CiB9CiAKLWJvb2wg
U1ZHRm9udERhdGE6OmZpbGxCTVBHbHlwaHMoU1ZHRm9udEVsZW1lbnQqIGZvbnRFbGVtZW50LCBH
bHlwaFBhZ2UqIHBhZ2VUb0ZpbGwsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBV
Q2hhciogYnVmZmVyLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEpIGNvbnN0Citib29s
IFNWR0ZvbnREYXRhOjpmaWxsQk1QR2x5cGhzKFNWR0ZvbnRFbGVtZW50KiBmb250RWxlbWVudCwg
R2x5cGhQYWdlKiBwYWdlVG9GaWxsLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwg
VUNoYXIqIGJ1ZmZlciwgY29uc3QgRm9udCogZm9udCkgY29uc3QKIHsKICAgICBib29sIGhhdmVH
bHlwaHMgPSBmYWxzZTsKICAgICBWZWN0b3I8U1ZHR2x5cGg+IGdseXBoczsKQEAgLTI0MywxNCAr
MjQzLDE0IEBAIGJvb2wgU1ZHRm9udERhdGE6OmZpbGxCTVBHbHlwaHMoU1ZHRm9udEUKICAgICAg
ICAgLy8gY2FyZSBvZiBtYXRjaGluZyB0byB0aGUgY29ycmVjdCBnbHlwaCwgaWYgbXVsdGlwbGUg
b25lcyBhcmUgYXZhaWxhYmxlLCBhcyB0aGF0J3MKICAgICAgICAgLy8gb25seSBwb3NzaWJsZSB3
aXRoaW4gdGhlIGNvbnRleHQgb2YgYSBzdHJpbmcgKGVnLiBhcmFiaWMgZm9ybSBtYXRjaGluZyku
CiAgICAgICAgIGhhdmVHbHlwaHMgPSB0cnVlOwotICAgICAgICBwYWdlVG9GaWxsLT5zZXRHbHlw
aERhdGFGb3JJbmRleChvZmZzZXQgKyBpLCBnbHlwaHMuZmlyc3QoKS50YWJsZUVudHJ5LCBmb250
RGF0YSk7CisgICAgICAgIHBhZ2VUb0ZpbGwtPnNldEdseXBoRGF0YUZvckluZGV4KG9mZnNldCAr
IGksIGdseXBocy5maXJzdCgpLnRhYmxlRW50cnksIGZvbnQpOwogICAgICAgICBnbHlwaHMuY2xl
YXIoKTsKICAgICB9CiAKICAgICByZXR1cm4gaGF2ZUdseXBoczsKIH0KIAotYm9vbCBTVkdGb250
RGF0YTo6ZmlsbE5vbkJNUEdseXBocyhTVkdGb250RWxlbWVudCogZm9udEVsZW1lbnQsIEdseXBo
UGFnZSogcGFnZVRvRmlsbCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFy
KiBidWZmZXIsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSkgY29uc3QKK2Jvb2wgU1ZH
Rm9udERhdGE6OmZpbGxOb25CTVBHbHlwaHMoU1ZHRm9udEVsZW1lbnQqIGZvbnRFbGVtZW50LCBH
bHlwaFBhZ2UqIHBhZ2VUb0ZpbGwsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBV
Q2hhciogYnVmZmVyLCBjb25zdCBGb250KiBmb250KSBjb25zdAogewogICAgIGJvb2wgaGF2ZUds
eXBocyA9IGZhbHNlOwogICAgIFZlY3RvcjxTVkdHbHlwaD4gZ2x5cGhzOwpAQCAtMjY4LDcgKzI2
OCw3IEBAIGJvb2wgU1ZHRm9udERhdGE6OmZpbGxOb25CTVBHbHlwaHMoU1ZHRm8KICAgICAgICAg
Ly8gY2FyZSBvZiBtYXRjaGluZyB0byB0aGUgY29ycmVjdCBnbHlwaCwgaWYgbXVsdGlwbGUgb25l
cyBhcmUgYXZhaWxhYmxlLCBhcyB0aGF0J3MKICAgICAgICAgLy8gb25seSBwb3NzaWJsZSB3aXRo
aW4gdGhlIGNvbnRleHQgb2YgYSBzdHJpbmcgKGVnLiBhcmFiaWMgZm9ybSBtYXRjaGluZykuCiAg
ICAgICAgIGhhdmVHbHlwaHMgPSB0cnVlOwotICAgICAgICBwYWdlVG9GaWxsLT5zZXRHbHlwaERh
dGFGb3JJbmRleChvZmZzZXQgKyBpLCBnbHlwaHMuZmlyc3QoKS50YWJsZUVudHJ5LCBmb250RGF0
YSk7CisgICAgICAgIHBhZ2VUb0ZpbGwtPnNldEdseXBoRGF0YUZvckluZGV4KG9mZnNldCArIGks
IGdseXBocy5maXJzdCgpLnRhYmxlRW50cnksIGZvbnQpOwogICAgICAgICBnbHlwaHMuY2xlYXIo
KTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RGF0YS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RGF0YS5oCShyZXZpc2lvbiAxNzg4
NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udERhdGEuaAkod29ya2luZyBjb3B5KQpA
QCAtMjEsMjEgKzIxLDIxIEBACiAjZGVmaW5lIFNWR0ZvbnREYXRhX2gKIAogI2lmIEVOQUJMRShT
VkdfRk9OVFMpCi0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKKyNpbmNsdWRlICJGb250Lmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU1ZHRm9udEVsZW1lbnQ7CiBjbGFzcyBT
VkdGb250RmFjZUVsZW1lbnQ7CiAKLWNsYXNzIFNWR0ZvbnREYXRhIDogcHVibGljIFNpbXBsZUZv
bnREYXRhOjpTVkdEYXRhIHsKK2NsYXNzIFNWR0ZvbnREYXRhIDogcHVibGljIEZvbnQ6OlNWR0Rh
dGEgewogcHVibGljOgogICAgIGV4cGxpY2l0IFNWR0ZvbnREYXRhKFNWR0ZvbnRGYWNlRWxlbWVu
dCopOwogICAgIHZpcnR1YWwgflNWR0ZvbnREYXRhKCkgeyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQg
aW5pdGlhbGl6ZUZvbnREYXRhKFNpbXBsZUZvbnREYXRhKiwgZmxvYXQgZm9udFNpemUpIG92ZXJy
aWRlOworICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplRm9udChGb250KiwgZmxvYXQgZm9udFNp
emUpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgZmxvYXQgd2lkdGhGb3JTVkdHbHlwaChHbHlwaCwg
ZmxvYXQgZm9udFNpemUpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBmaWxsU1ZH
R2x5cGhQYWdlKEdseXBoUGFnZSosIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBV
Q2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IFNpbXBsZUZvbnREYXRh
KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGZpbGxTVkdHbHlwaFBhZ2UoR2x5
cGhQYWdlKiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIs
IHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgRm9udCopIGNvbnN0IG92ZXJyaWRlOwogCiAg
ICAgYm9vbCBhcHBseVNWR0dseXBoU2VsZWN0aW9uKFdpZHRoSXRlcmF0b3ImLCBHbHlwaERhdGEm
LCBib29sIG1pcnJvciwgaW50IGN1cnJlbnRDaGFyYWN0ZXIsIHVuc2lnbmVkJiBhZHZhbmNlTGVu
Z3RoLCBTdHJpbmcmIG5vcm1hbGl6ZWRTcGFjZXNTdHJpbmdDYWNoZSkgY29uc3Q7CiAKQEAgLTUw
LDggKzUwLDggQEAgcHVibGljOgogICAgIGZsb2F0IHZlcnRpY2FsQWR2YW5jZVkoKSBjb25zdCB7
IHJldHVybiBtX3ZlcnRpY2FsQWR2YW5jZVk7IH0KIAogcHJpdmF0ZToKLSAgICBib29sIGZpbGxC
TVBHbHlwaHMoU1ZHRm9udEVsZW1lbnQqLCBHbHlwaFBhZ2UqICwgdW5zaWduZWQgb2Zmc2V0LCB1
bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIsIGNvbnN0IFNpbXBsZUZvbnREYXRhKikgY29u
c3Q7Ci0gICAgYm9vbCBmaWxsTm9uQk1QR2x5cGhzKFNWR0ZvbnRFbGVtZW50KiwgR2x5cGhQYWdl
KiAsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCBjb25z
dCBTaW1wbGVGb250RGF0YSopIGNvbnN0OworICAgIGJvb2wgZmlsbEJNUEdseXBocyhTVkdGb250
RWxlbWVudCosIEdseXBoUGFnZSogLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwg
VUNoYXIqIGJ1ZmZlciwgY29uc3QgRm9udCopIGNvbnN0OworICAgIGJvb2wgZmlsbE5vbkJNUEds
eXBocyhTVkdGb250RWxlbWVudCosIEdseXBoUGFnZSogLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2ln
bmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgY29uc3QgRm9udCopIGNvbnN0OwogCiAgICAgYm9v
bCBhcHBseVRyYW5zZm9ybXMoR2x5cGhCdWZmZXJHbHlwaCosIEdseXBoQnVmZmVyQWR2YW5jZSos
IHNpemVfdCwgVHlwZXNldHRpbmdGZWF0dXJlcykgY29uc3QgPSBkZWxldGU7CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGb250RWxlbWVudC5oCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRm9udEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYs
NyBAQCBwdWJsaWM6CiAgICAgZmxvYXQgaG9yaXpvbnRhbEtlcm5pbmdGb3JQYWlyT2ZTdHJpbmdz
QW5kR2x5cGhzKGNvbnN0IFN0cmluZyYgdTEsIGNvbnN0IFN0cmluZyYgZzEsIGNvbnN0IFN0cmlu
ZyYgdTIsIGNvbnN0IFN0cmluZyYgZzIpIGNvbnN0OwogICAgIGZsb2F0IHZlcnRpY2FsS2Vybmlu
Z0ZvclBhaXJPZlN0cmluZ3NBbmRHbHlwaHMoY29uc3QgU3RyaW5nJiB1MSwgY29uc3QgU3RyaW5n
JiBnMSwgY29uc3QgU3RyaW5nJiB1MiwgY29uc3QgU3RyaW5nJiBnMikgY29uc3Q7CiAKLSAgICAv
LyBVc2VkIGJ5IFNpbXBsZUZvbnREYXRhL1dpZHRoSXRlcmF0b3IuCisgICAgLy8gVXNlZCBieSBG
b250L1dpZHRoSXRlcmF0b3IuCiAgICAgU1ZHR2x5cGggc3ZnR2x5cGhGb3JHbHlwaChHbHlwaCk7
CiAgICAgR2x5cGggbWlzc2luZ0dseXBoKCk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245118</attachid>
            <date>2015-01-21 21:04:56 -0800</date>
            <delta_ts>2015-01-21 21:20:12 -0800</delta_ts>
            <desc>another</desc>
            <filename>simplefontdata-rename-5.patch</filename>
            <type>text/plain</type>
            <size>330281</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDE1LTAxLTIxICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgU2ltcGxlRm9udERh
dGEgdG8gRm9udAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTQwNDk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhlIGZhbGxiYWNrIHN1cHBvcnRpbmcgRm9udCB0eXBlIHdhcyByZW5hbWVkIEZvbnRDYXNj
YWRlLgorICAgICAgICBXZSBjYW4gbm93IHJlbmFtZSBTaW1wbGVGb250RGF0YSB0byBqdXN0IEZv
bnQgbWF0Y2hpbmcgdGhlIHVzdWFsIGRlZmluaXRpb24uCisKIDIwMTUtMDEtMjEgIEJlbmphbWlu
IFBvdWxhaW4gIDxiZW5qYW1pbkB3ZWJraXQub3JnPgogCiAgICAgICAgIEhhbmRsZSB0aGUgdHJh
bnNpdGlvbiBvbiBhbnkgY2hhcmFjdGVyIGFzIGEgc2VwYXJhdGUgdHlwZSBvZiB0cmFuc2l0aW9u
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTQ2OSw3ICs0NjksNiBAQCBf
X1pON1dlYkNvcmUxNFNlY3VyaXR5UG9saWN5MjJnZW5lcmF0ZVJlCiBfX1pON1dlYkNvcmUxNFNl
Y3VyaXR5UG9saWN5MjdyZXNldE9yaWdpbkFjY2Vzc1doaXRlbGlzdHNFdgogX19aTjdXZWJDb3Jl
MTRTZWN1cml0eVBvbGljeTI5YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnlFUktOU18xNFNl
Y3VyaXR5T3JpZ2luRVJLTjNXVEY2U3RyaW5nRVM3X2IKIF9fWk43V2ViQ29yZTE0U2VjdXJpdHlQ
b2xpY3kzMnJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5RVJLTlNfMTRTZWN1cml0eU9y
aWdpbkVSS04zV1RGNlN0cmluZ0VTN19iCi1fX1pON1dlYkNvcmUxNFNpbXBsZUZvbnREYXRhRDFF
dgogX19aTjdXZWJDb3JlMTRTdWJmcmFtZUxvYWRlcjEyYWxsb3dQbHVnaW5zRU5TXzI4UmVhc29u
Rm9yQ2FsbGluZ0FsbG93UGx1Z2luc0UKIF9fWk43V2ViQ29yZTE0VGlsZUNvbnRyb2xsZXIxNHNl
dFRpbGVzT3BhcXVlRWIKIF9fWk43V2ViQ29yZTE0VGlsZUNvbnRyb2xsZXIxNWNvbnRhaW5lckxh
eWVyc0V2CkBAIC0xMTc5LDYgKzExNzgsNyBAQCBfX1pON1dlYkNvcmU0MGRlZmF1bHRUZXh0RW5j
b2RpbmdOYW1lRm9yCiBfX1pON1dlYkNvcmU0MHJlc3RyaWN0TWluaW11bVNjYWxlRmFjdG9yVG9W
aWV3cG9ydFNpemVFUk5TXzE4Vmlld3BvcnRBdHRyaWJ1dGVzRU5TXzdJbnRTaXplRWYKIF9fWk43
V2ViQ29yZTQyVVJMQnlUcnVuY2F0aW5nT25lQ2hhcmFjdGVyQmVmb3JlQ29tcG9uZW50RVA1TlNV
UkwxOENGVVJMQ29tcG9uZW50VHlwZQogX19aTjdXZWJDb3JlNDdhdHRyaWJ1dGVkU3RyaW5nQnlT
dHJpcHBpbmdBdHRhY2htZW50Q2hhcmFjdGVyc0VQMThOU0F0dHJpYnV0ZWRTdHJpbmcKK19fWk43
V2ViQ29yZTRGb250RDFFdgogX19aTjdXZWJDb3JlNEljb24xOGNyZWF0ZUljb25Gb3JGaWxlc0VS
S04zV1RGNlZlY3RvcklOUzFfNlN0cmluZ0VMbTBFTlMxXzE1Q3Jhc2hPbk92ZXJmbG93RUVFCiBf
X1pON1dlYkNvcmU0SWNvbkQxRXYKIF9fWk43V2ViQ29yZTROb2RlMTByZW5kZXJSZWN0RVBiCkBA
IC0xNDkyLDExICsxNDkyLDExIEBAIF9fWk43V2ViQ29yZTlGbG9hdFJlY3RDMUVSS05TXzdJbnRS
ZWN0RQogX19aTjdXZWJDb3JlOUZsb2F0U2l6ZUMxRVJLNkNHU2l6ZQogX19aTjdXZWJDb3JlOUZs
b2F0U2l6ZUMxRVJLTlNfN0ludFNpemVFCiBfX1pON1dlYkNvcmU5Rm9udENhY2hlMTBpbnZhbGlk
YXRlRXYKLV9fWk43V2ViQ29yZTlGb250Q2FjaGUxM2ZvbnREYXRhQ291bnRFdgogX19aTjdXZWJD
b3JlOUZvbnRDYWNoZTEzZm9udEZvckZhbWlseUVSS05TXzE1Rm9udERlc2NyaXB0aW9uRVJLTjNX
VEYxMkF0b21pY1N0cmluZ0ViCi1fX1pON1dlYkNvcmU5Rm9udENhY2hlMjFpbmFjdGl2ZUZvbnRE
YXRhQ291bnRFdgorX19aTjdXZWJDb3JlOUZvbnRDYWNoZTE3aW5hY3RpdmVGb250Q291bnRFdgog
X19aTjdXZWJDb3JlOUZvbnRDYWNoZTIxcHVyZ2VJbmFjdGl2ZUZvbnREYXRhRWkKIF9fWk43V2Vi
Q29yZTlGb250Q2FjaGUyOXB1cmdlSW5hY3RpdmVGb250RGF0YUlmTmVlZGVkRXYKK19fWk43V2Vi
Q29yZTlGb250Q2FjaGU5Zm9udENvdW50RXYKIF9fWk43V2ViQ29yZTlGcmFtZVRyZWUxMWFwcGVu
ZENoaWxkRU4zV1RGMTBQYXNzUmVmUHRySU5TXzVGcmFtZUVFRQogX19aTjdXZWJDb3JlOUZyYW1l
VHJlZTdzZXROYW1lRVJLTjNXVEYxMkF0b21pY1N0cmluZ0UKIF9fWk43V2ViQ29yZTlGcmFtZVRy
ZWU5Y2xlYXJOYW1lRXYKQEAgLTE2MzQsOCArMTYzNCw4IEBAIF9fWk5LM1dURjZTdHJpbmcxNGNy
ZWF0ZUNGU3RyaW5nRXYKIF9fWk5LN1dlYkNvcmUxMENyZWRlbnRpYWwxMm5zQ3JlZGVudGlhbEV2
CiBfX1pOSzdXZWJDb3JlMTBDcmVkZW50aWFsN2lzRW1wdHlFdgogX19aTks3V2ViQ29yZTEwRmxv
YXRQb2ludGN2N0NHUG9pbnRFdgotX19aTks3V2ViQ29yZTEwRm9udFJhbmdlczIwZm9udERhdGFG
b3JDaGFyYWN0ZXJFaQotX19aTks3V2ViQ29yZTEwRm9udFJhbmdlczIxZm9udERhdGFGb3JGaXJz
dFJhbmdlRXYKK19fWk5LN1dlYkNvcmUxMEZvbnRSYW5nZXMxNmZvbnRGb3JDaGFyYWN0ZXJFaQor
X19aTks3V2ViQ29yZTEwRm9udFJhbmdlczE3Zm9udEZvckZpcnN0UmFuZ2VFdgogX19aTks3V2Vi
Q29yZTEwTGF5b3V0UmVjdDhjb250YWluc0VSS1MwXwogX19aTks3V2ViQ29yZTEwUGx1Z2luRGF0
YTE2c3VwcG9ydHNNaW1lVHlwZUVSS04zV1RGNlN0cmluZ0VOUzBfMThBbGxvd2VkUGx1Z2luVHlw
ZXNFCiBfX1pOSzdXZWJDb3JlMTBSZW5kZXJUZXh0MTZmaXJzdFJ1bkxvY2F0aW9uRXYKQEAgLTE2
NjUsNyArMTY2NSw3IEBAIF9fWk5LN1dlYkNvcmUxMFRpbWVSYW5nZXMzZW5kRWpSaQogX19aTks3
V2ViQ29yZTEwVGltZVJhbmdlczRjb3B5RXYKIF9fWk5LN1dlYkNvcmUxMFRpbWVSYW5nZXM1c3Rh
cnRFalJpCiBfX1pOSzdXZWJDb3JlMTBUaW1lUmFuZ2VzNmxlbmd0aEV2Ci1fX1pOSzdXZWJDb3Jl
MTFGb250Q2FzY2FkZTV3aWR0aEVSS05TXzdUZXh0UnVuRVBOM1dURjdIYXNoU2V0SVBLTlNfMTRT
aW1wbGVGb250RGF0YUVOUzRfN1B0ckhhc2hJUzhfRUVOUzRfMTBIYXNoVHJhaXRzSVM4X0VFRUVQ
TlNfMTNHbHlwaE92ZXJmbG93RQorX19aTks3V2ViQ29yZTExRm9udENhc2NhZGU1d2lkdGhFUktO
U183VGV4dFJ1bkVQTjNXVEY3SGFzaFNldElQS05TXzRGb250RU5TNF83UHRySGFzaElTOF9FRU5T
NF8xMEhhc2hUcmFpdHNJUzhfRUVFRVBOU18xM0dseXBoT3ZlcmZsb3dFCiBfX1pOSzdXZWJDb3Jl
MTFGb250Q2FzY2FkZThkcmF3VGV4dEVQTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU183VGV4dFJ1
bkVSS05TXzEwRmxvYXRQb2ludEVpaU5TMF8yNEN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbkUKIF9f
Wk5LN1dlYkNvcmUxMUZvbnRDYXNjYWRlZXFFUktTMF8KIF9fWk5LN1dlYkNvcmUxMUZyYW1lTG9h
ZGVyMTBpc0NvbXBsZXRlRXYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
NDcwNSw4ICs0NzA1LDggQEAKIAkJQjJDM0RBNjEwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYXNj
YWRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkMz
REE1MDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCMkMzREE2MjBEMDA2Q0Q2MDBFRjZGMjYg
LyogRm9udENhY2hlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEIyQzNEQTUxMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FjaGUuY3BwICovOyB9Owog
CQlCMkMzREE2MzBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhY2hlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkMzREE1MjBEMDA2Q0Q2MDBFRjZGMjYg
LyogRm9udENhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKLQkJQjJDM0RBNjQwRDAwNkNENjAwRUY2RjI2IC8qIFNpbXBsZUZvbnREYXRhLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNEQTUzMEQw
MDZDRDYwMEVGNkYyNiAvKiBTaW1wbGVGb250RGF0YS5jcHAgKi87IH07Ci0JCUIyQzNEQTY1MEQw
MDZDRDYwMEVGNkYyNiAvKiBTaW1wbGVGb250RGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBNTQwRDAwNkNENjAwRUY2RjI2IC8qIFNpbXBs
ZUZvbnREYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJQjJDM0RBNjQwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBNTMwRDAwNkNENjAwRUY2RjI2
IC8qIEZvbnQuY3BwICovOyB9OworCQlCMkMzREE2NTBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBNTQw
RDAwNkNENjAwRUY2RjI2IC8qIEZvbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlCMkMzREE2NjBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udERlc2Ny
aXB0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
MkMzREE1NTBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udERlc2NyaXB0aW9uLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjJDM0RBNjcwRDAwNkNENjAw
RUY2RjI2IC8qIEZvbnRHbHlwaHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQjJDM0RBNTYwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRHbHlwaHMuY3Bw
ICovOyB9OwogCQlCMkMzREE2ODBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udEdseXBocy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBNTcwRDAwNkNE
NjAwRUY2RjI2IC8qIEZvbnRHbHlwaHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwpAQCAtMTIwODYsOCArMTIwODYsOCBAQAogCQlCMkMzREE1MDBEMDA2
Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEZvbnRDYXNjYWRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQzNE
QTUxMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FjaGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRDYWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUIyQzNEQTUyMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FjaGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlCMkMzREE1MzBEMDA2Q0Q2MDBFRjZGMjYgLyogU2ltcGxlRm9udERhdGEuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpbXBsZUZvbnREYXRhLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjJDM0RBNTQwRDAwNkNENjAwRUY2RjI2
IC8qIFNpbXBsZUZvbnREYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
aW1wbGVGb250RGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCMkMzREE1MzBE
MDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gRm9udC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUIyQzNEQTU0
MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBGb250Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQzNEQTU1MEQwMDZD
RDYwMEVGNkYyNiAvKiBGb250RGVzY3JpcHRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEZvbnREZXNjcmlwdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCMkMzREE1NjBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udEdseXBocy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udEdseXBocy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUIyQzNEQTU3MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250R2x5cGhzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb250R2x5cGhzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMDU2Myw4ICsyMDU2Myw4IEBACiAJCQkJMzcxRjRGRkEw
RDI1RTdGMzAwRUNFMEQ1IC8qIEZvbnRSYW5nZXMuaCAqLywKIAkJCQkwRjNERDQ0RDEyRjVFQTFC
MDAwRDkxOTAgLyogU2hhZG93Qmx1ci5jcHAgKi8sCiAJCQkJMEYzREQ0NEUxMkY1RUExQjAwMEQ5
MTkwIC8qIFNoYWRvd0JsdXIuaCAqLywKLQkJCQlCMkMzREE1MzBEMDA2Q0Q2MDBFRjZGMjYgLyog
U2ltcGxlRm9udERhdGEuY3BwICovLAotCQkJCUIyQzNEQTU0MEQwMDZDRDYwMEVGNkYyNiAvKiBT
aW1wbGVGb250RGF0YS5oICovLAorCQkJCUIyQzNEQTUzMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250
LmNwcCAqLywKKwkJCQlCMkMzREE1NDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5oICovLAogCQkJ
CUNENjQxRUIyMTgxOEY1RUQwMEVFNEM0MSAvKiBTb3VyY2VCdWZmZXJQcml2YXRlLmggKi8sCiAJ
CQkJQ0RDOEI1QUMxODA0QUU1RDAwMTZFNjg1IC8qIFNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQu
aCAqLywKIAkJCQlCMjM1NDBGMDBEMDA3ODJFMDAyMzgyRkEgLyogU3RyaW5nVHJ1bmNhdG9yLmNw
cCAqLywKQEAgLTI2MDIyLDcgKzI2MDIyLDcgQEAKIAkJCQkxQTRBOTU0RTBCNEVEQ0NCMDAyRDhD
M0MgLyogU2hhcmVkQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0IxRjAyRjEzQjAyNUQy
MDBGNTEwM0YgLyogU2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTkzMzA5RUEzMDk5RUI3OEMwMDU2RTU4MSAvKiBTaGFyZWRUaW1lci5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJQjJDM0RBNjUwRDAwNkNENjAwRUY2RjI2IC8qIFNpbXBsZUZvbnREYXRhLmggaW4gSGVh
ZGVycyAqLywKKwkJCQlCMkMzREE2NTBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRTQ4OTQ0QTMxODBCNTdEODAwRjE2NUQ4IC8qIFNpbXBsZUxpbmVMYXlvdXQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUU0RTlCMTFEMTgxNDU2OUMwMDNBQ0NERiAvKiBTaW1wbGVM
aW5lTGF5b3V0RnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNEU5QjExOTE4MTA5MTZG
MDAzQUNDREYgLyogU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmggaW4gSGVhZGVycyAqLywKQEAg
LTI5NDU0LDcgKzI5NDU0LDcgQEAKIAkJCQkxQTRBOTU1MjBCNEVEQ0ZGMDAyRDhDM0MgLyogU2hh
cmVkQnVmZmVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRTQ1MzkwNDYwRUFGRDYzNzAwMzY5
NUM4IC8qIFNoYXJlZFRpbWVySU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlFQTIwOTlF
Qjc4QzAwNTZFNTgxIC8qIFNoYXJlZFRpbWVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJQjJD
M0RBNjQwRDAwNkNENjAwRUY2RjI2IC8qIFNpbXBsZUZvbnREYXRhLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUIyQzNEQTY0MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTE2M0U4OEY3MTE4QTM5RDIwMEVEOTIzMSAvKiBTaW1wbGVGb250RGF0YUNvcmVUZXh0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTM3RTY1OTUwMTYzQjEwQzIwMEVCNDU3NCAvKiBTaW1w
bGVGb250RGF0YUlPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUIyQUZGQzdGMEQwMEE1QzEwMDMw
MDc0RCAvKiBTaW1wbGVGb250RGF0YU1hYy5tbSBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJ
T1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0JKHJldmlzaW9uIDE3ODg1NykKKysrIFNv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVySU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNzU4LDcgKzE3NTgsNyBAQCBzdGF0aWMgdm9p
ZCBBWEF0dHJpYnV0ZVN0cmluZ1NldFN0eWxlKE5TCiAgICAgUmVuZGVyU3R5bGUmIHN0eWxlID0g
cmVuZGVyZXItPnN0eWxlKCk7CiAgICAgCiAgICAgLy8gc2V0IGJhc2ljIGZvbnQgaW5mbwotICAg
IEFYQXR0cmlidXRlU3RyaW5nU2V0Rm9udChhdHRyU3RyaW5nLCBzdHlsZS5mb250Q2FzY2FkZSgp
LnByaW1hcnlGb250RGF0YSgpLmdldENURm9udCgpLCByYW5nZSk7CisgICAgQVhBdHRyaWJ1dGVT
dHJpbmdTZXRGb250KGF0dHJTdHJpbmcsIHN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQo
KS5nZXRDVEZvbnQoKSwgcmFuZ2UpOwogICAgICAgICAgICAgICAgIAogICAgIGludCBkZWNvciA9
IHN0eWxlLnRleHREZWNvcmF0aW9uc0luRWZmZWN0KCk7CiAgICAgaWYgKChkZWNvciAmIChUZXh0
RGVjb3JhdGlvblVuZGVybGluZSB8IFRleHREZWNvcmF0aW9uTGluZVRocm91Z2gpKSAhPSAwKSB7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlckJhc2UubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlLm1tCShyZXZpc2lv
biAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlckJhc2UubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcg
QEAKICNpbXBvcnQgIkNocm9tZUNsaWVudC5oIgogI2ltcG9ydCAiQ29sb3JNYWMuaCIKICNpbXBv
cnQgIkNvbnRleHRNZW51Q29udHJvbGxlci5oIgorI2ltcG9ydCAiRm9udC5oIgogI2ltcG9ydCAi
Rm9udENhc2NhZGUuaCIKICNpbXBvcnQgIkZyYW1lLmgiCiAjaW1wb3J0ICJGcmFtZUxvYWRlckNs
aWVudC5oIgpAQCAtNjMsNyArNjQsNiBAQAogI2ltcG9ydCAiUmVuZGVyVmlldy5oIgogI2ltcG9y
dCAiUmVuZGVyV2lkZ2V0LmgiCiAjaW1wb3J0ICJTY3JvbGxWaWV3LmgiCi0jaW1wb3J0ICJTaW1w
bGVGb250RGF0YS5oIgogI2ltcG9ydCAiVGV4dENoZWNrZXJDbGllbnQuaCIKICNpbXBvcnQgIlRl
eHRDaGVja2luZ0hlbHBlci5oIgogI2ltcG9ydCAiVmlzaWJsZVVuaXRzLmgiCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9X
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQkocmV2aXNpb24gMTc4ODU3KQorKysg
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbXBvcnQgIkNv
bG9yTWFjLmgiCiAjaW1wb3J0ICJDb250ZXh0TWVudUNvbnRyb2xsZXIuaCIKICNpbXBvcnQgIkVk
aXRvci5oIgorI2ltcG9ydCAiRm9udC5oIgogI2ltcG9ydCAiRm9udENhc2NhZGUuaCIKICNpbXBv
cnQgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW1wb3J0ICJGcmFtZVNlbGVjdGlvbi5oIgpAQCAt
NjQsNyArNjUsNiBAQAogI2ltcG9ydCAiUmVuZGVyVmlldy5oIgogI2ltcG9ydCAiUmVuZGVyV2lk
Z2V0LmgiCiAjaW1wb3J0ICJTY3JvbGxWaWV3LmgiCi0jaW1wb3J0ICJTaW1wbGVGb250RGF0YS5o
IgogI2ltcG9ydCAiVGV4dENoZWNrZXJDbGllbnQuaCIKICNpbXBvcnQgIlRleHRDaGVja2luZ0hl
bHBlci5oIgogI2ltcG9ydCAiVGV4dEl0ZXJhdG9yLmgiCkBAIC04NDgsNyArODQ4LDcgQEAgc3Rh
dGljIHZvaWQgQVhBdHRyaWJ1dGVTdHJpbmdTZXRTdHlsZShOUwogICAgIGNvbnN0IFJlbmRlclN0
eWxlJiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwogICAgIAogICAgIC8vIHNldCBiYXNpYyBm
b250IGluZm8KLSAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldEZvbnQoYXR0clN0cmluZywgTlNBY2Nl
c3NpYmlsaXR5Rm9udFRleHRBdHRyaWJ1dGUsIHN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZv
bnREYXRhKCkuZ2V0TlNGb250KCksIHJhbmdlKTsKKyAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldEZv
bnQoYXR0clN0cmluZywgTlNBY2Nlc3NpYmlsaXR5Rm9udFRleHRBdHRyaWJ1dGUsIHN0eWxlLmZv
bnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKS5nZXROU0ZvbnQoKSwgcmFuZ2UpOwogICAgIAogICAg
IC8vIHNldCBiYXNpYyBjb2xvcnMKICAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldENvbG9yKGF0dHJT
dHJpbmcsIE5TQWNjZXNzaWJpbGl0eUZvcmVncm91bmRDb2xvclRleHRBdHRyaWJ1dGUsIG5zQ29s
b3Ioc3R5bGUudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpKSwgcmFuZ2Up
OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0JKHJldmlzaW9uIDE3ODg1NykK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC02NjksNyArNjY5LDcgQEAgLSAoTlNGb250ICopX2ZvbnQKICAgICBhdXRvIHJlbmRlcmVyID0g
Y29yZShzZWxmKS0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1
cm4gbmlsOwotICAgIHJldHVybiByZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1h
cnlGb250RGF0YSgpLmdldE5TRm9udCgpOworICAgIHJldHVybiByZW5kZXJlci0+c3R5bGUoKS5m
b250Q2FzY2FkZSgpLnByaW1hcnlGb250KCkuZ2V0TlNGb250KCk7CiB9CiAjZWxzZQogLSAoQ1RG
b250UmVmKV9mb250CkBAIC02NzcsNyArNjc3LDcgQEAgLSAoQ1RGb250UmVmKV9mb250CiAgICAg
UmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNvcmUoc2VsZiktPnJlbmRlcmVyKCk7CiAgICAgaWYg
KCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4gcmVuZGVyZXItPnN0
eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXRDVEZvbnQoKTsKKyAgICBy
ZXR1cm4gcmVuZGVyZXItPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpLmdldENU
Rm9udCgpOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFj
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmNwcAko
cmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzAsMTAgKzMwLDEwIEBACiAjaW5jbHVkZSAiQ1NTRm9udFNlbGVj
dG9yLmgiCiAjaW5jbHVkZSAiQ1NTU2VnbWVudGVkRm9udEZhY2UuaCIKICNpbmNsdWRlICJEb2N1
bWVudC5oIgorI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIK
ICNpbmNsdWRlICJGb250TG9hZGVyLmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJl
cy5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApAQCAtMTA4LDcgKzEwOCw3IEBAIHZvaWQgQ1NTRm9udEZhY2U6OmZvbnRMb2FkZWQoQ1NTRm9u
dEZhY2UKICNlbmRpZgogfQogCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBDU1NGb250RmFj
ZTo6Z2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGJv
b2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpCitSZWZQdHI8Rm9udD4gQ1NT
Rm9udEZhY2U6OmZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGJv
b2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpCiB7CiAgICAgbV9hY3RpdmVT
b3VyY2UgPSAwOwogICAgIGlmICghaXNWYWxpZCgpKQpAQCAtMTI0LDcgKzEyNCw3IEBAIFBhc3NS
ZWZQdHI8U2ltcGxlRm9udERhdGE+IENTU0ZvbnRGYWNlOjoKIAogICAgIHNpemVfdCBzaXplID0g
bV9zb3VyY2VzLnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkg
ewotICAgICAgICBpZiAoUmVmUHRyPFNpbXBsZUZvbnREYXRhPiByZXN1bHQgPSBtX3NvdXJjZXNb
aV0tPmdldEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgc3ludGhldGljQm9sZCwgc3ludGhldGlj
SXRhbGljLCBmb250U2VsZWN0b3IpKSB7CisgICAgICAgIGlmIChSZWZQdHI8Rm9udD4gcmVzdWx0
ID0gbV9zb3VyY2VzW2ldLT5mb250KGZvbnREZXNjcmlwdGlvbiwgc3ludGhldGljQm9sZCwgc3lu
dGhldGljSXRhbGljLCBmb250U2VsZWN0b3IpKSB7CiAgICAgICAgICAgICBtX2FjdGl2ZVNvdXJj
ZSA9IG1fc291cmNlc1tpXS5nZXQoKTsKICNpZiBFTkFCTEUoRk9OVF9MT0FEX0VWRU5UUykKICAg
ICAgICAgICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLmZv
bnRMb2FkRXZlbnRzRW5hYmxlZCgpICYmIG1fbG9hZFN0YXRlID09IExvYWRpbmcgJiYgbV9zb3Vy
Y2VzW2ldLT5pc0xvYWRlZCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZh
Y2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2UuaAkocmV2
aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBD
U1NTZWdtZW50ZWRGb250RmFjZTsKIGNsYXNzIEZvbnREZXNjcmlwdGlvbjsKLWNsYXNzIFNpbXBs
ZUZvbnREYXRhOworY2xhc3MgRm9udDsKIAogY2xhc3MgQ1NTRm9udEZhY2UgOiBwdWJsaWMgUmVm
Q291bnRlZDxDU1NGb250RmFjZT4gewogcHVibGljOgpAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6
CiAKICAgICB2b2lkIGZvbnRMb2FkZWQoQ1NTRm9udEZhY2VTb3VyY2UqKTsKIAotICAgIFBhc3NS
ZWZQdHI8U2ltcGxlRm9udERhdGE+IGdldEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYs
IGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpOworICAgIFJlZlB0cjxG
b250PiBmb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGJvb2wgc3ludGhldGljQm9sZCwgYm9v
bCBzeW50aGV0aWNJdGFsaWMpOwogCiAgICAgc3RydWN0IFVuaWNvZGVSYW5nZSB7CiAgICAgICAg
IFVuaWNvZGVSYW5nZShVQ2hhcjMyIGZyb20sIFVDaGFyMzIgdG8pCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5jcHAJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDkgKzMyLDkgQEAKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgogI2luY2x1ZGUg
IkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRWxlbWVudEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiRm9u
dC5oIgogI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5o
IgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAKICNpZiBFTkFCTEUoU1ZHX09URl9DT05W
RVJURVIpCiAjaW5jbHVkZSAiRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oIgpAQCAtNzQsMTAgKzc0
LDEwIEBAIENTU0ZvbnRGYWNlU291cmNlOjp+Q1NTRm9udEZhY2VTb3VyY2UoKQogCiB2b2lkIENT
U0ZvbnRGYWNlU291cmNlOjpwcnVuZVRhYmxlKCkKIHsKLSAgICBpZiAobV9mb250RGF0YVRhYmxl
LmlzRW1wdHkoKSkKKyAgICBpZiAobV9mb250VGFibGUuaXNFbXB0eSgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBtX2ZvbnREYXRhVGFibGUuY2xlYXIoKTsKKyAgICBtX2ZvbnRUYWJsZS5jbGVh
cigpOwogfQogCiBib29sIENTU0ZvbnRGYWNlU291cmNlOjppc0xvYWRlZCgpIGNvbnN0CkBAIC0x
MDEsNyArMTAxLDcgQEAgdm9pZCBDU1NGb250RmFjZVNvdXJjZTo6Zm9udExvYWRlZChDYWNoZQog
ICAgICAgICBtX2ZhY2UtPmZvbnRMb2FkZWQodGhpcyk7CiB9CiAKLVBhc3NSZWZQdHI8U2ltcGxl
Rm9udERhdGE+IENTU0ZvbnRGYWNlU291cmNlOjpnZXRGb250RGF0YShjb25zdCBGb250RGVzY3Jp
cHRpb24mIGZvbnREZXNjcmlwdGlvbiwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRp
Y0l0YWxpYywgQ1NTRm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IpCitSZWZQdHI8Rm9udD4gQ1NT
Rm9udEZhY2VTb3VyY2U6OmZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24sIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMsIENTU0ZvbnRTZWxl
Y3RvciogZm9udFNlbGVjdG9yKQogewogICAgIC8vIElmIHRoZSBmb250IGhhc24ndCBsb2FkZWQg
b3IgYW4gZXJyb3Igb2NjdXJyZWQsIHRoZW4gd2UndmUgZ290IG5vdGhpbmcuCiAgICAgaWYgKCFp
c1ZhbGlkKCkpCkBAIC0xMTIsMTggKzExMiwxNyBAQCBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRh
PiBDU1NGb250RmFjZVNvCiAgICAgICAgICAgICAmJiAhbV9zdmdGb250RmFjZUVsZW1lbnQKICNl
bmRpZgogICAgICkgewotICAgICAgICAvLyBXZSdyZSBsb2NhbC4gSnVzdCByZXR1cm4gYSBTaW1w
bGVGb250RGF0YSBmcm9tIHRoZSBub3JtYWwgY2FjaGUuCisgICAgICAgIC8vIFdlJ3JlIGxvY2Fs
LiBKdXN0IHJldHVybiBhIEZvbnQgZnJvbSB0aGUgbm9ybWFsIGNhY2hlLgogICAgICAgICAvLyBX
ZSBkb24ndCB3YW50IHRvIGNoZWNrIGFsdGVybmF0ZSBmb250IGZhbWlseSBuYW1lcyBoZXJlLCBz
byBwYXNzIHRydWUgYXMgdGhlIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSBwYXJhbWV0ZXIuCiAgICAg
ICAgIHJldHVybiBmb250Q2FjaGUoKS5mb250Rm9yRmFtaWx5KGZvbnREZXNjcmlwdGlvbiwgbV9z
dHJpbmcsIHRydWUpOwogICAgIH0KIAotICAgIC8vIFNlZSBpZiB3ZSBoYXZlIGEgbWFwcGluZyBp
biBvdXIgRm9udERhdGEgY2FjaGUuCiAgICAgdW5zaWduZWQgaGFzaEtleSA9IChmb250RGVzY3Jp
cHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSArIDEpIDw8IDUgfCBmb250RGVzY3JpcHRpb24ud2lk
dGhWYXJpYW50KCkgPDwgMwogICAgICAgICAgICAgICAgICAgICAgICB8IChmb250RGVzY3JpcHRp
b24ub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCA/IDQgOiAwKSB8IChzeW50aGV0aWNCb2xkID8g
MiA6IDApIHwgKHN5bnRoZXRpY0l0YWxpYyA/IDEgOiAwKTsKIAotICAgIFJlZlB0cjxTaW1wbGVG
b250RGF0YT4gZm9udERhdGEgPSBtX2ZvbnREYXRhVGFibGUuYWRkKGhhc2hLZXksIG51bGxwdHIp
Lml0ZXJhdG9yLT52YWx1ZTsKLSAgICBpZiAoZm9udERhdGEpCi0gICAgICAgIHJldHVybiBmb250
RGF0YS5yZWxlYXNlKCk7CisgICAgUmVmUHRyPEZvbnQ+IGZvbnQgPSBtX2ZvbnRUYWJsZS5hZGQo
aGFzaEtleSwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOworICAgIGlmIChmb250KQorICAgICAg
ICByZXR1cm4gZm9udC5yZWxlYXNlKCk7CiAKICAgICAvLyBJZiB3ZSBhcmUgc3RpbGwgbG9hZGlu
ZywgdGhlbiB3ZSBsZXQgdGhlIHN5c3RlbSBwaWNrIGEgZm9udC4KICAgICBpZiAoaXNMb2FkZWQo
KSkgewpAQCAtMTM2LDcgKzEzNSw3IEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IENTU0Zv
bnRGYWNlU28KICAgICAgICAgICAgIGlmICghbV9mb250LT5lbnN1cmVDdXN0b21Gb250RGF0YSho
YXNFeHRlcm5hbFNWR0ZvbnQsIG1fc3RyaW5nKSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAotICAgICAgICAgICAgZm9udERhdGEgPSBtX2ZvbnQtPmdldEZvbnREYXRhKGZvbnRE
ZXNjcmlwdGlvbiwgbV9zdHJpbmcsIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYywgaGFz
RXh0ZXJuYWxTVkdGb250KTsKKyAgICAgICAgICAgIGZvbnQgPSBtX2ZvbnQtPmNyZWF0ZUZvbnQo
Zm9udERlc2NyaXB0aW9uLCBtX3N0cmluZywgc3ludGhldGljQm9sZCwgc3ludGhldGljSXRhbGlj
LCBoYXNFeHRlcm5hbFNWR0ZvbnQpOwogICAgICAgICB9IGVsc2UgewogI2lmIEVOQUJMRShTVkdf
Rk9OVFMpCiAgICAgICAgICAgICAvLyBJbi1Eb2N1bWVudCBTVkcgRm9udHMKQEAgLTE1Miw5ICsx
NTEsOSBAQCBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBDU1NGb250RmFjZVNvCiAgICAgICAg
ICAgICAgICAgaWYgKCFtX2dlbmVyYXRlZE9URkJ1ZmZlcikKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEZvbnRDdXN0
b21QbGF0Zm9ybURhdGE+IGN1c3RvbVBsYXRmb3JtRGF0YSA9IGNyZWF0ZUZvbnRDdXN0b21QbGF0
Zm9ybURhdGEoKm1fZ2VuZXJhdGVkT1RGQnVmZmVyKTsKLSAgICAgICAgICAgICAgICBmb250RGF0
YSA9IFNpbXBsZUZvbnREYXRhOjpjcmVhdGUoY3VzdG9tUGxhdGZvcm1EYXRhLT5mb250UGxhdGZv
cm1EYXRhKHN0YXRpY19jYXN0PGludD4oZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXpl
KCkpLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMsIGZvbnREZXNjcmlwdGlvbi5vcmll
bnRhdGlvbigpLCBmb250RGVzY3JpcHRpb24ud2lkdGhWYXJpYW50KCksIGZvbnREZXNjcmlwdGlv
bi5yZW5kZXJpbmdNb2RlKCkpLCB0cnVlLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgZm9udCA9
IEZvbnQ6OmNyZWF0ZShjdXN0b21QbGF0Zm9ybURhdGEtPmZvbnRQbGF0Zm9ybURhdGEoc3RhdGlj
X2Nhc3Q8aW50Pihmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSksIHN5bnRoZXRp
Y0JvbGQsIHN5bnRoZXRpY0l0YWxpYywgZm9udERlc2NyaXB0aW9uLm9yaWVudGF0aW9uKCksIGZv
bnREZXNjcmlwdGlvbi53aWR0aFZhcmlhbnQoKSwgZm9udERlc2NyaXB0aW9uLnJlbmRlcmluZ01v
ZGUoKSksIHRydWUsIGZhbHNlKTsKICNlbHNlCi0gICAgICAgICAgICAgICAgZm9udERhdGEgPSBT
aW1wbGVGb250RGF0YTo6Y3JlYXRlKHN0ZDo6bWFrZV91bmlxdWU8U1ZHRm9udERhdGE+KG1fc3Zn
Rm9udEZhY2VFbGVtZW50LmdldCgpKSwgZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXpl
KCksIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYyk7CisgICAgICAgICAgICAgICAgZm9u
dCA9IEZvbnQ6OmNyZWF0ZShzdGQ6Om1ha2VfdW5pcXVlPFNWR0ZvbnREYXRhPihtX3N2Z0ZvbnRG
YWNlRWxlbWVudC5nZXQoKSksIGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpLCBz
eW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMpOwogI2VuZGlmCiAgICAgICAgICAgICB9CiAj
ZW5kaWYKQEAgLTE2NCwxMiArMTYzLDEyIEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IENT
U0ZvbnRGYWNlU28KICAgICAgICAgLy8gYW5kIHRoZSBsb2FkZXIgbWF5IGludm9rZSBhcmJpdHJh
cnkgZGVsZWdhdGUgb3IgZXZlbnQgaGFuZGxlciBjb2RlLgogICAgICAgICBmb250U2VsZWN0b3It
PmJlZ2luTG9hZGluZ0ZvbnRTb29uKG1fZm9udC5nZXQoKSk7CiAKLSAgICAgICAgUmVmPFNpbXBs
ZUZvbnREYXRhPiBwbGFjZWhvbGRlckZvbnQgPSBmb250Q2FjaGUoKS5sYXN0UmVzb3J0RmFsbGJh
Y2tGb250KGZvbnREZXNjcmlwdGlvbik7Ci0gICAgICAgIFJlZjxTaW1wbGVGb250RGF0YT4gcGxh
Y2Vob2xkZXJGb250Q29weUluTG9hZGluZ1N0YXRlID0gU2ltcGxlRm9udERhdGE6OmNyZWF0ZShw
bGFjZWhvbGRlckZvbnQtPnBsYXRmb3JtRGF0YSgpLCB0cnVlLCB0cnVlKTsKKyAgICAgICAgUmVm
PEZvbnQ+IHBsYWNlaG9sZGVyRm9udCA9IGZvbnRDYWNoZSgpLmxhc3RSZXNvcnRGYWxsYmFja0Zv
bnQoZm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgUmVmPEZvbnQ+IHBsYWNlaG9sZGVyRm9udENv
cHlJbkxvYWRpbmdTdGF0ZSA9IEZvbnQ6OmNyZWF0ZShwbGFjZWhvbGRlckZvbnQtPnBsYXRmb3Jt
RGF0YSgpLCB0cnVlLCB0cnVlKTsKICAgICAgICAgcmV0dXJuIFdURjo6bW92ZShwbGFjZWhvbGRl
ckZvbnRDb3B5SW5Mb2FkaW5nU3RhdGUpOwogICAgIH0KIAotICAgIHJldHVybiBmb250RGF0YS5y
ZWxlYXNlKCk7CisgICAgcmV0dXJuIGZvbnQucmVsZWFzZSgpOwogfQogCiAjaWYgRU5BQkxFKEZP
TlRfTE9BRF9FVkVOVFMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3Vy
Y2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2Uu
aAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291
cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDggKzQyLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogY2xhc3MgQ2FjaGVkRm9udDsKIGNsYXNzIENTU0ZvbnRGYWNlOwogY2xhc3MgQ1NTRm9udFNl
bGVjdG9yOworY2xhc3MgRm9udDsKIGNsYXNzIEZvbnREZXNjcmlwdGlvbjsKLWNsYXNzIFNpbXBs
ZUZvbnREYXRhOwogCiBjbGFzcyBDU1NGb250RmFjZVNvdXJjZSBmaW5hbCA6IHB1YmxpYyBDYWNo
ZWRGb250Q2xpZW50IHsKIHB1YmxpYzoKQEAgLTU5LDcgKzU5LDcgQEAgcHVibGljOgogCiAgICAg
dmlydHVhbCB2b2lkIGZvbnRMb2FkZWQoQ2FjaGVkRm9udCopIG92ZXJyaWRlOwogCi0gICAgUGFz
c1JlZlB0cjxTaW1wbGVGb250RGF0YT4gZ2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9u
JiwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYywgQ1NTRm9udFNlbGVj
dG9yKik7CisgICAgUmVmUHRyPEZvbnQ+IGZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgYm9v
bCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYywgQ1NTRm9udFNlbGVjdG9yKik7
CiAKICAgICB2b2lkIHBydW5lVGFibGUoKTsKIApAQCAtODEsNyArODEsNyBAQCBwcml2YXRlOgog
ICAgIEF0b21pY1N0cmluZyBtX3N0cmluZzsgLy8gVVJJIGZvciByZW1vdGUsIGJ1aWx0LWluIGZv
bnQgbmFtZSBmb3IgbG9jYWwuCiAgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkRm9udD4g
bV9mb250OyAvLyBGb3IgcmVtb3RlIGZvbnRzLCBhIHBvaW50ZXIgdG8gb3VyIGNhY2hlZCByZXNv
dXJjZS4KICAgICBDU1NGb250RmFjZSogbV9mYWNlOyAvLyBPdXIgb3duaW5nIGZvbnQgZmFjZS4K
LSAgICBIYXNoTWFwPHVuc2lnbmVkLCBSZWZQdHI8U2ltcGxlRm9udERhdGE+PiBtX2ZvbnREYXRh
VGFibGU7IC8vIFRoZSBoYXNoIGtleSBpcyBjb21wb3NlZCBvZiBzaXplIHN5bnRoZXRpYyBzdHls
ZXMuCisgICAgSGFzaE1hcDx1bnNpZ25lZCwgUmVmUHRyPEZvbnQ+PiBtX2ZvbnRUYWJsZTsgLy8g
VGhlIGhhc2gga2V5IGlzIGNvbXBvc2VkIG9mIHNpemUgc3ludGhldGljIHN0eWxlcy4KIAogI2lm
IEVOQUJMRShTVkdfT1RGX0NPTlZFUlRFUikKICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtX2dl
bmVyYXRlZE9URkJ1ZmZlcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3Iu
Y3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVj
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTMgKzQwLDEzIEBACiAjaW5jbHVkZSAiQ1NT
VmFsdWVMaXN0LmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKICNpbmNsdWRl
ICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGb250Q2FjaGUuaCIK
ICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAi
U1ZHRm9udEZhY2VFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJT
ZXR0aW5ncy5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5jbHVkZSAiU3R5bGVQ
cm9wZXJ0aWVzLmgiCiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgIlN0eWxl
UnVsZS5oIgpAQCAtNjEyLDcgKzYxMiw3IEBAIGJvb2wgQ1NTRm9udFNlbGVjdG9yOjpyZXNvbHZl
c0ZhbWlseUZvcigKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXNpemVfdCBDU1NGb250U2VsZWN0
b3I6OmZhbGxiYWNrRm9udERhdGFDb3VudCgpCitzaXplX3QgQ1NTRm9udFNlbGVjdG9yOjpmYWxs
YmFja0ZvbnRDb3VudCgpCiB7CiAgICAgaWYgKCFtX2RvY3VtZW50KQogICAgICAgICByZXR1cm4g
MDsKQEAgLTYyMyw3ICs2MjMsNyBAQCBzaXplX3QgQ1NTRm9udFNlbGVjdG9yOjpmYWxsYmFja0Zv
bnREYXRhCiAgICAgcmV0dXJuIDA7CiB9CiAKLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IENT
U0ZvbnRTZWxlY3Rvcjo6ZmFsbGJhY2tGb250RGF0YUF0KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
Zm9udERlc2NyaXB0aW9uLCBzaXplX3QgaW5kZXgpCitQYXNzUmVmUHRyPEZvbnQ+IENTU0ZvbnRT
ZWxlY3Rvcjo6ZmFsbGJhY2tGb250QXQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3Jp
cHRpb24sIHNpemVfdCBpbmRleCkKIHsKICAgICBBU1NFUlRfVU5VU0VEKGluZGV4LCAhaW5kZXgp
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5oCShyZXZpc2lvbiAxNzg4
NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDggKzI3LDggQEAKICNkZWZpbmUgQ1NTRm9udFNlbGVjdG9yX2gKIAogI2luY2x1
ZGUgIkNhY2hlZFJlc291cmNlSGFuZGxlLmgiCisjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUg
IkZvbnRTZWxlY3Rvci5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5jbHVkZSAi
VGltZXIuaCIKICNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KQEAg
LTU5LDggKzU5LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdW5zaWduZWQgdW5pcXVlSWQoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBtX3VuaXF1ZUlkOyB9CiAKICAgICB2aXJ0dWFsIEZvbnRS
YW5nZXMgZm9udFJhbmdlc0ZvckZhbWlseShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBB
dG9taWNTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHNpemVfdCBmYWxsYmFja0ZvbnRE
YXRhQ291bnQoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U2ltcGxlRm9udERh
dGE+IGZhbGxiYWNrRm9udERhdGFBdChjb25zdCBGb250RGVzY3JpcHRpb24mLCBzaXplX3QpIG92
ZXJyaWRlOworICAgIHZpcnR1YWwgc2l6ZV90IGZhbGxiYWNrRm9udENvdW50KCkgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEZvbnQ+IGZhbGxiYWNrRm9udEF0KGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYsIHNpemVfdCkgb3ZlcnJpZGU7CiAgICAgQ1NTU2VnbWVudGVkRm9udEZhY2Uq
IGdldEZvbnRGYWNlKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYg
ZmFtaWx5KTsKIAogICAgIHZpcnR1YWwgYm9vbCByZXNvbHZlc0ZhbWlseUZvcihjb25zdCBGb250
RGVzY3JpcHRpb24mKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NTZWdtZW50ZWRGb250RmFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1NlZ21lbnRlZEZvbnRGYWNlLmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dl
YkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAs
OSArMzAsOSBAQAogI2luY2x1ZGUgIkNTU0ZvbnRGYWNlU291cmNlLmgiCiAjaW5jbHVkZSAiQ1NT
Rm9udFNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGb250Lmgi
CiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRG
ZWF0dXJlcy5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtOTAsMjEgKzkwLDIxIEBAIHZvaWQgQ1NTU2VnbWVudGVkRm9udEZhY2U6OmFw
cGVuZEZvbnRGYWMKICAgICBtX2ZvbnRGYWNlcy5hcHBlbmQoZm9udEZhY2UpOwogfQogCi1zdGF0
aWMgdm9pZCBhcHBlbmRGb250RGF0YVdpdGhJbnZhbGlkVW5pY29kZVJhbmdlSWZMb2FkaW5nKEZv
bnRSYW5nZXMmIHJhbmdlcywgUmVmPFNpbXBsZUZvbnREYXRhPiYmIGZvbnREYXRhLCBjb25zdCBW
ZWN0b3I8Q1NTRm9udEZhY2U6OlVuaWNvZGVSYW5nZT4mIHVuaWNvZGVSYW5nZXMpCitzdGF0aWMg
dm9pZCBhcHBlbmRGb250V2l0aEludmFsaWRVbmljb2RlUmFuZ2VJZkxvYWRpbmcoRm9udFJhbmdl
cyYgcmFuZ2VzLCBSZWY8Rm9udD4mJiBmb250LCBjb25zdCBWZWN0b3I8Q1NTRm9udEZhY2U6OlVu
aWNvZGVSYW5nZT4mIHVuaWNvZGVSYW5nZXMpCiB7Ci0gICAgaWYgKGZvbnREYXRhLT5pc0xvYWRp
bmcoKSkgewotICAgICAgICByYW5nZXMuYXBwZW5kUmFuZ2UoRm9udFJhbmdlczo6UmFuZ2UoMCwg
MCwgV1RGOjptb3ZlKGZvbnREYXRhKSkpOworICAgIGlmIChmb250LT5pc0xvYWRpbmcoKSkgewor
ICAgICAgICByYW5nZXMuYXBwZW5kUmFuZ2UoRm9udFJhbmdlczo6UmFuZ2UoMCwgMCwgV1RGOjpt
b3ZlKGZvbnQpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICB1bnNpZ25lZCBudW1S
YW5nZXMgPSB1bmljb2RlUmFuZ2VzLnNpemUoKTsKICAgICBpZiAoIW51bVJhbmdlcykgewotICAg
ICAgICByYW5nZXMuYXBwZW5kUmFuZ2UoRm9udFJhbmdlczo6UmFuZ2UoMCwgMHg3RkZGRkZGRiwg
V1RGOjptb3ZlKGZvbnREYXRhKSkpOworICAgICAgICByYW5nZXMuYXBwZW5kUmFuZ2UoRm9udFJh
bmdlczo6UmFuZ2UoMCwgMHg3RkZGRkZGRiwgV1RGOjptb3ZlKGZvbnQpKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgbnVtUmFuZ2VzOyAr
K2opCi0gICAgICAgIHJhbmdlcy5hcHBlbmRSYW5nZShGb250UmFuZ2VzOjpSYW5nZSh1bmljb2Rl
UmFuZ2VzW2pdLmZyb20oKSwgdW5pY29kZVJhbmdlc1tqXS50bygpLCBmb250RGF0YS5jb3B5UmVm
KCkpKTsKKyAgICAgICAgcmFuZ2VzLmFwcGVuZFJhbmdlKEZvbnRSYW5nZXM6OlJhbmdlKHVuaWNv
ZGVSYW5nZXNbal0uZnJvbSgpLCB1bmljb2RlUmFuZ2VzW2pdLnRvKCksIGZvbnQuY29weVJlZigp
KSk7CiB9CiAKIEZvbnRSYW5nZXMgQ1NTU2VnbWVudGVkRm9udEZhY2U6OmZvbnRSYW5nZXMoY29u
c3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pCkBAIC0xMjgsOCArMTI4LDggQEAg
Rm9udFJhbmdlcyBDU1NTZWdtZW50ZWRGb250RmFjZTo6Zm9udFJhbgogICAgICAgICAgICAgRm9u
dFRyYWl0c01hc2sgdHJhaXRzTWFzayA9IGZhY2UtPnRyYWl0c01hc2soKTsKICAgICAgICAgICAg
IGJvb2wgc3ludGhldGljQm9sZCA9ICEodHJhaXRzTWFzayAmIChGb250V2VpZ2h0NjAwTWFzayB8
IEZvbnRXZWlnaHQ3MDBNYXNrIHwgRm9udFdlaWdodDgwME1hc2sgfCBGb250V2VpZ2h0OTAwTWFz
aykpICYmIChkZXNpcmVkVHJhaXRzTWFzayAmIChGb250V2VpZ2h0NjAwTWFzayB8IEZvbnRXZWln
aHQ3MDBNYXNrIHwgRm9udFdlaWdodDgwME1hc2sgfCBGb250V2VpZ2h0OTAwTWFzaykpOwogICAg
ICAgICAgICAgYm9vbCBzeW50aGV0aWNJdGFsaWMgPSAhKHRyYWl0c01hc2sgJiBGb250U3R5bGVJ
dGFsaWNNYXNrKSAmJiAoZGVzaXJlZFRyYWl0c01hc2sgJiBGb250U3R5bGVJdGFsaWNNYXNrKTsK
LSAgICAgICAgICAgIGlmIChSZWZQdHI8U2ltcGxlRm9udERhdGE+IGZhY2VGb250RGF0YSA9IGZh
Y2UtPmdldEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgc3ludGhldGljQm9sZCwgc3ludGhldGlj
SXRhbGljKSkKLSAgICAgICAgICAgICAgICBhcHBlbmRGb250RGF0YVdpdGhJbnZhbGlkVW5pY29k
ZVJhbmdlSWZMb2FkaW5nKGZvbnRSYW5nZXMsIGZhY2VGb250RGF0YS5yZWxlYXNlTm9uTnVsbCgp
LCBmYWNlLT5yYW5nZXMoKSk7CisgICAgICAgICAgICBpZiAoUmVmUHRyPEZvbnQ+IGZhY2VGb250
ID0gZmFjZS0+Zm9udChmb250RGVzY3JpcHRpb24sIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0
YWxpYykpCisgICAgICAgICAgICAgICAgYXBwZW5kRm9udFdpdGhJbnZhbGlkVW5pY29kZVJhbmdl
SWZMb2FkaW5nKGZvbnRSYW5nZXMsIGZhY2VGb250LnJlbGVhc2VOb25OdWxsKCksIGZhY2UtPnJh
bmdlcygpKTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gZm9udFJhbmdlczsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0b3IuaAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBjbGFz
cyBIaXRUZXN0UmVzdWx0OwogY2xhc3MgS2lsbFJpbmc7CiBjbGFzcyBQYXN0ZWJvYXJkOwogY2xh
c3MgU2hhcmVkQnVmZmVyOwotY2xhc3MgU2ltcGxlRm9udERhdGE7CitjbGFzcyBGb250OwogY2xh
c3MgU3BlbGxDaGVja1JlcXVlc3Q7CiBjbGFzcyBTcGVsbENoZWNrZXI7CiBjbGFzcyBTdHlsZVBy
b3BlcnRpZXM7CkBAIC00MjIsNyArNDIyLDcgQEAgcHVibGljOgogI2lmIFBMQVRGT1JNKENPQ09B
KQogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZW5kZXJTdHlsZSogc3R5bGVGb3JTZWxlY3Rp
b25TdGFydChGcmFtZSogLCBOb2RlICombm9kZVRvUmVtb3ZlKTsKICAgICBXRUJDT1JFX0VYUE9S
VCBib29sIGluc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVvdGVkQ29udGVudCgpOwotICAgIFdF
QkNPUkVfRVhQT1JUIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250Rm9yU2VsZWN0aW9uKGJvb2wm
KSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBGb250KiBmb250Rm9yU2VsZWN0aW9u
KGJvb2wmKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBOU0RpY3Rpb25hcnkgKmZvbnRBdHRy
aWJ1dGVzRm9yU2VsZWN0aW9uU3RhcnQoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBTdHJp
bmcgc3RyaW5nU2VsZWN0aW9uRm9yUGFzdGVib2FyZCgpOwogICAgIFN0cmluZyBzdHJpbmdTZWxl
Y3Rpb25Gb3JQYXN0ZWJvYXJkV2l0aEltYWdlQWx0VGV4dCgpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbQkocmV2aXNpb24gMTc4ODU3KQor
KysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTE0LDcgKzExMTQsNyBAQCBzdGF0aWMgUGxhdGZvcm1Gb250ICpfZm9udChF
bGVtZW50JiBlbGVtCiAgICAgYXV0byByZW5kZXJlciA9IGVsZW1lbnQucmVuZGVyZXIoKTsKICAg
ICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiByZW5kZXJl
ci0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmdldE5TRm9udCgpOwor
ICAgIHJldHVybiByZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCku
Z2V0TlNGb250KCk7CiB9CiAjZWxzZQogc3RhdGljIFBsYXRmb3JtRm9udCAqX2ZvbnQoRWxlbWVu
dCYgZWxlbWVudCkKQEAgLTExMjIsNyArMTEyMiw3IEBAIHN0YXRpYyBQbGF0Zm9ybUZvbnQgKl9m
b250KEVsZW1lbnQmIGVsZW0KICAgICBhdXRvIHJlbmRlcmVyID0gZWxlbWVudC5yZW5kZXJlcigp
OwogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIChQ
bGF0Zm9ybUZvbnQgKilyZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250
RGF0YSgpLmdldENURm9udCgpOworICAgIHJldHVybiAoUGxhdGZvcm1Gb250ICopcmVuZGVyZXIt
PnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpLmdldENURm9udCgpOwogfQogI2Vu
ZGlmCiAKQEAgLTI1OTQsMTAgKzI1OTQsMTAgQEAgTlNBdHRyaWJ1dGVkU3RyaW5nICplZGl0aW5n
QXR0cmlidXRlZFN0cgogICAgICAgICAgICAgW2F0dHJzLmdldCgpIHNldE9iamVjdDpbTlNOdW1i
ZXIgbnVtYmVyV2l0aEludGVnZXI6TlNVbmRlcmxpbmVTdHlsZVNpbmdsZV0gZm9yS2V5Ok5TVW5k
ZXJsaW5lU3R5bGVBdHRyaWJ1dGVOYW1lXTsKICAgICAgICAgaWYgKHN0eWxlLnRleHREZWNvcmF0
aW9uc0luRWZmZWN0KCkgJiBUZXh0RGVjb3JhdGlvbkxpbmVUaHJvdWdoKQogICAgICAgICAgICAg
W2F0dHJzLmdldCgpIHNldE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aEludGVnZXI6TlNVbmRl
cmxpbmVTdHlsZVNpbmdsZV0gZm9yS2V5Ok5TU3RyaWtldGhyb3VnaFN0eWxlQXR0cmlidXRlTmFt
ZV07Ci0gICAgICAgIGlmIChOU0ZvbnQgKmZvbnQgPSBzdHlsZS5mb250Q2FzY2FkZSgpLnByaW1h
cnlGb250RGF0YSgpLmdldE5TRm9udCgpKQorICAgICAgICBpZiAoTlNGb250ICpmb250ID0gc3R5
bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpLmdldE5TRm9udCgpKQogICAgICAgICAgICAg
W2F0dHJzLmdldCgpIHNldE9iamVjdDpmb250IGZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgW2F0dHJzLmdldCgpIHNldE9iamVjdDpbZm9udE1h
bmFnZXIgY29udmVydEZvbnQ6V2ViRGVmYXVsdEZvbnQoKSB0b1NpemU6c3R5bGUuZm9udENhc2Nh
ZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5wbGF0Zm9ybURhdGEoKS5zaXplKCldIGZvcktleTpOU0Zv
bnRBdHRyaWJ1dGVOYW1lXTsKKyAgICAgICAgICAgIFthdHRycy5nZXQoKSBzZXRPYmplY3Q6W2Zv
bnRNYW5hZ2VyIGNvbnZlcnRGb250OldlYkRlZmF1bHRGb250KCkgdG9TaXplOnN0eWxlLmZvbnRD
YXNjYWRlKCkucHJpbWFyeUZvbnQoKS5wbGF0Zm9ybURhdGEoKS5zaXplKCldIGZvcktleTpOU0Zv
bnRBdHRyaWJ1dGVOYW1lXTsKICAgICAgICAgaWYgKHN0eWxlLnZpc2l0ZWREZXBlbmRlbnRDb2xv
cihDU1NQcm9wZXJ0eUNvbG9yKS5hbHBoYSgpKQogICAgICAgICAgICAgW2F0dHJzLmdldCgpIHNl
dE9iamVjdDpuc0NvbG9yKHN0eWxlLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNv
bG9yKSkgZm9yS2V5Ok5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07CiAgICAgICAgIGVs
c2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0JKHJldmlzaW9u
IDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQkod29y
a2luZyBjb3B5KQpAQCAtMjAzLDcgKzIwMyw3IEBAIGJvb2wgRWRpdG9yOjppbnNlcnRQYXJhZ3Jh
cGhTZXBhcmF0b3JJblEKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotY29uc3QgU2ltcGxlRm9udERh
dGEqIEVkaXRvcjo6Zm9udEZvclNlbGVjdGlvbihib29sJiBoYXNNdWx0aXBsZUZvbnRzKSBjb25z
dAorY29uc3QgRm9udCogRWRpdG9yOjpmb250Rm9yU2VsZWN0aW9uKGJvb2wmIGhhc011bHRpcGxl
Rm9udHMpIGNvbnN0CiB7CiAgICAgaGFzTXVsdGlwbGVGb250cyA9IGZhbHNlOwogCkBAIC0yMTEs
OSArMjExLDkgQEAgY29uc3QgU2ltcGxlRm9udERhdGEqIEVkaXRvcjo6Zm9udEZvclNlbAogICAg
ICAgICBOb2RlKiBub2RlVG9SZW1vdmU7CiAgICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHN0
eWxlRm9yU2VsZWN0aW9uU3RhcnQoJm1fZnJhbWUsIG5vZGVUb1JlbW92ZSk7IC8vIHNldHMgbm9k
ZVRvUmVtb3ZlCiAKLSAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIHJlc3VsdCA9IG51bGxw
dHI7CisgICAgICAgIGNvbnN0IEZvbnQqIHJlc3VsdCA9IG51bGxwdHI7CiAgICAgICAgIGlmIChz
dHlsZSkKLSAgICAgICAgICAgIHJlc3VsdCA9ICZzdHlsZS0+Zm9udENhc2NhZGUoKS5wcmltYXJ5
Rm9udERhdGEoKTsKKyAgICAgICAgICAgIHJlc3VsdCA9ICZzdHlsZS0+Zm9udENhc2NhZGUoKS5w
cmltYXJ5Rm9udCgpOwogCiAgICAgICAgIGlmIChub2RlVG9SZW1vdmUpIHsKICAgICAgICAgICAg
IEV4Y2VwdGlvbkNvZGUgZWM7CkBAIC0yMjQsNyArMjI0LDcgQEAgY29uc3QgU2ltcGxlRm9udERh
dGEqIEVkaXRvcjo6Zm9udEZvclNlbAogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAot
ICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250ID0gMDsKKyAgICBjb25zdCBGb250KiBmb250
ID0gMDsKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS50b05v
cm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmIChOb2RlKiBzdGFydE5vZGUgPSBhZGp1c3RlZFNlbGVj
dGlvblN0YXJ0Rm9yU3R5bGVDb21wdXRhdGlvbihtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpKS5kZXByZWNhdGVkTm9kZSgpKSB7CiAgICAgICAgIE5vZGUqIHBhc3RFbmQgPSByYW5nZS0+
cGFzdExhc3ROb2RlKCk7CkBAIC0yMzUsNyArMjM1LDcgQEAgY29uc3QgU2ltcGxlRm9udERhdGEq
IEVkaXRvcjo6Zm9udEZvclNlbAogICAgICAgICAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBBcmUgdGhlcmUgYW55IG5v
ZGUgdHlwZXMgdGhhdCBoYXZlIHJlbmRlcmVycywgYnV0IHRoYXQgd2Ugc2hvdWxkIGJlIHNraXBw
aW5nPwotICAgICAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEmIHByaW1hcnlGb250ID0gcmVu
ZGVyZXItPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKTsKKyAgICAgICAg
ICAgIGNvbnN0IEZvbnQmIHByaW1hcnlGb250ID0gcmVuZGVyZXItPnN0eWxlKCkuZm9udENhc2Nh
ZGUoKS5wcmltYXJ5Rm9udCgpOwogICAgICAgICAgICAgaWYgKCFmb250KQogICAgICAgICAgICAg
ICAgIGZvbnQgPSAmcHJpbWFyeUZvbnQ7CiAgICAgICAgICAgICBlbHNlIGlmIChmb250ICE9ICZw
cmltYXJ5Rm9udCkgewpAQCAtMjU3LDcgKzI1Nyw3IEBAIE5TRGljdGlvbmFyeSogRWRpdG9yOjpm
b250QXR0cmlidXRlc0ZvclMKIAogICAgIE5TTXV0YWJsZURpY3Rpb25hcnkqIHJlc3VsdCA9IFtO
U011dGFibGVEaWN0aW9uYXJ5IGRpY3Rpb25hcnldOwogICAgIAotICAgIENURm9udFJlZiBmb250
ID0gc3R5bGUtPmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0Q1RGb250KCk7Cisg
ICAgQ1RGb250UmVmIGZvbnQgPSBzdHlsZS0+Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpLmdl
dENURm9udCgpOwogICAgIGlmIChmb250KQogICAgICAgICBbcmVzdWx0IHNldE9iamVjdDooaWQp
Zm9udCBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL21hYy9FZGl0b3JNYWMubW0JKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTA1LDcgKzEw
NSw3IEBAIGJvb2wgRWRpdG9yOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJblEKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotY29uc3QgU2ltcGxlRm9udERhdGEqIEVkaXRvcjo6Zm9udEZvclNlbGVj
dGlvbihib29sJiBoYXNNdWx0aXBsZUZvbnRzKSBjb25zdAorY29uc3QgRm9udCogRWRpdG9yOjpm
b250Rm9yU2VsZWN0aW9uKGJvb2wmIGhhc011bHRpcGxlRm9udHMpIGNvbnN0CiB7CiAgICAgaGFz
TXVsdGlwbGVGb250cyA9IGZhbHNlOwogCkBAIC0xMTMsOSArMTEzLDkgQEAgY29uc3QgU2ltcGxl
Rm9udERhdGEqIEVkaXRvcjo6Zm9udEZvclNlbAogICAgICAgICBOb2RlKiBub2RlVG9SZW1vdmU7
CiAgICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQoJm1f
ZnJhbWUsIG5vZGVUb1JlbW92ZSk7IC8vIHNldHMgbm9kZVRvUmVtb3ZlCiAKLSAgICAgICAgY29u
c3QgU2ltcGxlRm9udERhdGEqIHJlc3VsdCA9IG51bGxwdHI7CisgICAgICAgIGNvbnN0IEZvbnQq
IHJlc3VsdCA9IG51bGxwdHI7CiAgICAgICAgIGlmIChzdHlsZSkKLSAgICAgICAgICAgIHJlc3Vs
dCA9ICZzdHlsZS0+Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKTsKKyAgICAgICAgICAg
IHJlc3VsdCA9ICZzdHlsZS0+Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpOwogCiAgICAgICAg
IGlmIChub2RlVG9SZW1vdmUpCiAgICAgICAgICAgICBub2RlVG9SZW1vdmUtPnJlbW92ZShBU1NF
UlRfTk9fRVhDRVBUSU9OKTsKQEAgLTEyMyw3ICsxMjMsNyBAQCBjb25zdCBTaW1wbGVGb250RGF0
YSogRWRpdG9yOjpmb250Rm9yU2VsCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0g
ICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQgPSAwOworICAgIGNvbnN0IEZvbnQqIGZvbnQg
PSAwOwogICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9y
bWFsaXplZFJhbmdlKCk7CiAgICAgTm9kZSogc3RhcnROb2RlID0gYWRqdXN0ZWRTZWxlY3Rpb25T
dGFydEZvclN0eWxlQ29tcHV0YXRpb24obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSku
ZGVwcmVjYXRlZE5vZGUoKTsKICAgICBpZiAocmFuZ2UgJiYgc3RhcnROb2RlKSB7CkBAIC0xMzUs
NyArMTM1LDcgQEAgY29uc3QgU2ltcGxlRm9udERhdGEqIEVkaXRvcjo6Zm9udEZvclNlbAogICAg
ICAgICAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgIC8vIEZJWE1FOiBBcmUgdGhlcmUgYW55IG5vZGUgdHlwZXMgdGhhdCBoYXZlIHJlbmRl
cmVycywgYnV0IHRoYXQgd2Ugc2hvdWxkIGJlIHNraXBwaW5nPwotICAgICAgICAgICAgY29uc3Qg
U2ltcGxlRm9udERhdGEmIHByaW1hcnlGb250ID0gcmVuZGVyZXItPnN0eWxlKCkuZm9udENhc2Nh
ZGUoKS5wcmltYXJ5Rm9udERhdGEoKTsKKyAgICAgICAgICAgIGNvbnN0IEZvbnQmIHByaW1hcnlG
b250ID0gcmVuZGVyZXItPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpOwogICAg
ICAgICAgICAgaWYgKCFmb250KQogICAgICAgICAgICAgICAgIGZvbnQgPSAmcHJpbWFyeUZvbnQ7
CiAgICAgICAgICAgICBlbHNlIGlmIChmb250ICE9ICZwcmltYXJ5Rm9udCkgewpAQCAtMTYwLDgg
KzE2MCw4IEBAIE5TRGljdGlvbmFyeSogRWRpdG9yOjpmb250QXR0cmlidXRlc0ZvclMKICAgICBp
ZiAoc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xv
cikuaXNWYWxpZCgpICYmIHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlC
YWNrZ3JvdW5kQ29sb3IpLmFscGhhKCkgIT0gMCkKICAgICAgICAgW3Jlc3VsdCBzZXRPYmplY3Q6
bnNDb2xvcihzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3Vu
ZENvbG9yKSkgZm9yS2V5Ok5TQmFja2dyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07CiAKLSAgICBp
ZiAoc3R5bGUtPmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0TlNGb250KCkpCi0g
ICAgICAgIFtyZXN1bHQgc2V0T2JqZWN0OnN0eWxlLT5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250
RGF0YSgpLmdldE5TRm9udCgpIGZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKKyAgICBpZiAo
c3R5bGUtPmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKS5nZXROU0ZvbnQoKSkKKyAgICAgICAg
W3Jlc3VsdCBzZXRPYmplY3Q6c3R5bGUtPmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKS5nZXRO
U0ZvbnQoKSBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CiAKICAgICBpZiAoc3R5bGUtPnZp
c2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKS5pc1ZhbGlkKCkgJiYgc3R5bGUt
PnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSAhPSBDb2xvcjo6YmxhY2sp
CiAgICAgICAgIFtyZXN1bHQgc2V0T2JqZWN0Om5zQ29sb3Ioc3R5bGUtPnZpc2l0ZWREZXBlbmRl
bnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSkgZm9yS2V5Ok5TRm9yZWdyb3VuZENvbG9yQXR0cmli
dXRlTmFtZV07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkRm9udC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQu
Y3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2Fj
aGVkRm9udC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5LDcgKzk5LDcgQEAgYm9vbCBDYWNoZWRG
b250OjplbnN1cmVDdXN0b21Gb250RGF0YShibwogCiBib29sIENhY2hlZEZvbnQ6OmVuc3VyZUN1
c3RvbUZvbnREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSkKIHsKLSAgICBpZiAoIW1fZm9udERhdGEg
JiYgIWVycm9yT2NjdXJyZWQoKSAmJiAhaXNMb2FkaW5nKCkgJiYgZGF0YSkgeworICAgIGlmICgh
bV9mb250Q3VzdG9tUGxhdGZvcm1EYXRhICYmICFlcnJvck9jY3VycmVkKCkgJiYgIWlzTG9hZGlu
ZygpICYmIGRhdGEpIHsKICAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyKGRhdGEp
OwogCiAjaWYgKCFQTEFURk9STShNQUMpIHx8IF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlS
RUQgPD0gMTA5MCkgJiYgKCFQTEFURk9STShJT1MpIHx8IF9fSVBIT05FX09TX1ZFUlNJT05fTUlO
X1JFUVVJUkVEIDwgODAwMDApCkBAIC0xMTIsMzAgKzExMiwzMCBAQCBib29sIENhY2hlZEZvbnQ6
OmVuc3VyZUN1c3RvbUZvbnREYXRhKFNoCiAgICAgICAgIH0KICNlbmRpZgogCi0gICAgICAgIG1f
Zm9udERhdGEgPSBidWZmZXIgPyBjcmVhdGVGb250Q3VzdG9tUGxhdGZvcm1EYXRhKCpidWZmZXIp
IDogbnVsbHB0cjsKLSAgICAgICAgbV9oYXNDcmVhdGVkRm9udERhdGFXcmFwcGluZ1Jlc291cmNl
ID0gbV9mb250RGF0YSAmJiAoYnVmZmVyID09IG1fZGF0YSk7Ci0gICAgICAgIGlmICghbV9mb250
RGF0YSkKKyAgICAgICAgbV9mb250Q3VzdG9tUGxhdGZvcm1EYXRhID0gYnVmZmVyID8gY3JlYXRl
Rm9udEN1c3RvbVBsYXRmb3JtRGF0YSgqYnVmZmVyKSA6IG51bGxwdHI7CisgICAgICAgIG1faGFz
Q3JlYXRlZEZvbnREYXRhV3JhcHBpbmdSZXNvdXJjZSA9IG1fZm9udEN1c3RvbVBsYXRmb3JtRGF0
YSAmJiAoYnVmZmVyID09IG1fZGF0YSk7CisgICAgICAgIGlmICghbV9mb250Q3VzdG9tUGxhdGZv
cm1EYXRhKQogICAgICAgICAgICAgc2V0U3RhdHVzKERlY29kZUVycm9yKTsKICAgICB9CiAKLSAg
ICByZXR1cm4gbV9mb250RGF0YS5nZXQoKTsKKyAgICByZXR1cm4gbV9mb250Q3VzdG9tUGxhdGZv
cm1EYXRhLmdldCgpOwogfQogCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBDYWNoZWRGb250
OjpnZXRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29u
c3QgQXRvbWljU3RyaW5nJiwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxp
YywgYm9vbCkKK1JlZlB0cjxGb250PiBDYWNoZWRGb250OjpjcmVhdGVGb250KGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmLCBib29sIHN5
bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljLCBib29sKQogewotICAgIHJldHVybiBT
aW1wbGVGb250RGF0YTo6Y3JlYXRlKHBsYXRmb3JtRGF0YUZyb21DdXN0b21EYXRhKGZvbnREZXNj
cmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFs
aWMsCisgICAgcmV0dXJuIEZvbnQ6OmNyZWF0ZShwbGF0Zm9ybURhdGFGcm9tQ3VzdG9tRGF0YShm
b250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSwgc3ludGhldGljQm9sZCwgc3ludGhl
dGljSXRhbGljLAogICAgICAgICBmb250RGVzY3JpcHRpb24ub3JpZW50YXRpb24oKSwgZm9udERl
c2NyaXB0aW9uLndpZHRoVmFyaWFudCgpLCBmb250RGVzY3JpcHRpb24ucmVuZGVyaW5nTW9kZSgp
KSwgdHJ1ZSwgZmFsc2UpOwogfQogCiBGb250UGxhdGZvcm1EYXRhIENhY2hlZEZvbnQ6OnBsYXRm
b3JtRGF0YUZyb21DdXN0b21EYXRhKGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMs
IEZvbnRPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgRm9udFdpZHRoVmFyaWFudCB3aWR0aFZhcmlh
bnQsIEZvbnRSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUpCiB7Ci0gICAgQVNTRVJUKG1fZm9u
dERhdGEpOwotICAgIHJldHVybiBtX2ZvbnREYXRhLT5mb250UGxhdGZvcm1EYXRhKHN0YXRpY19j
YXN0PGludD4oc2l6ZSksIGJvbGQsIGl0YWxpYywgb3JpZW50YXRpb24sIHdpZHRoVmFyaWFudCwg
cmVuZGVyaW5nTW9kZSk7CisgICAgQVNTRVJUKG1fZm9udEN1c3RvbVBsYXRmb3JtRGF0YSk7Cisg
ICAgcmV0dXJuIG1fZm9udEN1c3RvbVBsYXRmb3JtRGF0YS0+Zm9udFBsYXRmb3JtRGF0YShzdGF0
aWNfY2FzdDxpbnQ+KHNpemUpLCBib2xkLCBpdGFsaWMsIG9yaWVudGF0aW9uLCB3aWR0aFZhcmlh
bnQsIHJlbmRlcmluZ01vZGUpOwogfQogCiB2b2lkIENhY2hlZEZvbnQ6OmFsbENsaWVudHNSZW1v
dmVkKCkKIHsKLSAgICBtX2ZvbnREYXRhID0gbnVsbHB0cjsKKyAgICBtX2ZvbnRDdXN0b21QbGF0
Zm9ybURhdGEgPSBudWxscHRyOwogfQogCiB2b2lkIENhY2hlZEZvbnQ6OmNoZWNrTm90aWZ5KCkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRGb250LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQuaAkocmV2aXNpb24g
MTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMjgsMTAgKzI4LDEwIEBACiAKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJj
ZS5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCisjaW5jbHVkZSAiRm9udC5o
IgogI2luY2x1ZGUgIkZvbnRPcmllbnRhdGlvbi5oIgogI2luY2x1ZGUgIkZvbnRSZW5kZXJpbmdN
b2RlLmgiCiAjaW5jbHVkZSAiRm9udFdpZHRoVmFyaWFudC5oIgotI2luY2x1ZGUgIlNpbXBsZUZv
bnREYXRhLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTIsNyArNTIsNyBAQCBwdWJs
aWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgZW5zdXJlQ3VzdG9tRm9udERhdGEoYm9vbCBleHRlcm5h
bFNWRywgY29uc3QgQXRvbWljU3RyaW5nJiByZW1vdGVVUkkpOwogCi0gICAgdmlydHVhbCBQYXNz
UmVmUHRyPFNpbXBsZUZvbnREYXRhPiBnZXRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24m
LCBjb25zdCBBdG9taWNTdHJpbmcmIHJlbW90ZVVSSSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29s
IHN5bnRoZXRpY0l0YWxpYywgYm9vbCBleHRlcm5hbFNWRyk7CisgICAgdmlydHVhbCBSZWZQdHI8
Rm9udD4gY3JlYXRlRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9taWNTdHJp
bmcmIHJlbW90ZVVSSSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYywg
Ym9vbCBleHRlcm5hbFNWRyk7CiAKIHByb3RlY3RlZDoKICAgICBGb250UGxhdGZvcm1EYXRhIHBs
YXRmb3JtRGF0YUZyb21DdXN0b21EYXRhKGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBpdGFs
aWMsIEZvbnRPcmllbnRhdGlvbiA9IEhvcml6b250YWwsIEZvbnRXaWR0aFZhcmlhbnQgPSBSZWd1
bGFyV2lkdGgsIEZvbnRSZW5kZXJpbmdNb2RlID0gTm9ybWFsUmVuZGVyaW5nTW9kZSk7CkBAIC03
MCw3ICs3MCw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgYWxsQ2xpZW50c1JlbW92
ZWQoKSBvdmVycmlkZTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxGb250Q3VzdG9tUGxhdGZvcm1E
YXRhPiBtX2ZvbnREYXRhOworICAgIHN0ZDo6dW5pcXVlX3B0cjxGb250Q3VzdG9tUGxhdGZvcm1E
YXRhPiBtX2ZvbnRDdXN0b21QbGF0Zm9ybURhdGE7CiAgICAgYm9vbCBtX2xvYWRJbml0aWF0ZWQ7
CiAgICAgYm9vbCBtX2hhc0NyZWF0ZWRGb250RGF0YVdyYXBwaW5nUmVzb3VyY2U7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTVkdGb250LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU1ZHRm9udC5jcHAJKHJldmlz
aW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTVkdGb250
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsMTcgKzUxLDE3IEBAIENhY2hlZFNWR0ZvbnQ6OkNh
Y2hlZFNWR0ZvbnQoY29uc3QgUmVzb3UKIHsKIH0KIAotUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0
YT4gQ2FjaGVkU1ZHRm9udDo6Z2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgcmVtb3RlVVJJLCBib29sIHN5bnRoZXRp
Y0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljLCBib29sIGV4dGVybmFsU1ZHKQorUmVmUHRyPEZv
bnQ+IENhY2hlZFNWR0ZvbnQ6OmNyZWF0ZUZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgcmVtb3RlVVJJLCBib29sIHN5bnRoZXRp
Y0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljLCBib29sIGV4dGVybmFsU1ZHKQogewogI2lmIEVO
QUJMRShTVkdfT1RGX0NPTlZFUlRFUikKICAgICBpZiAoIWV4dGVybmFsU1ZHIHx8IGZpcnN0Rm9u
dEZhY2UocmVtb3RlVVJJKSkKLSAgICAgICAgcmV0dXJuIENhY2hlZEZvbnQ6OmdldEZvbnREYXRh
KGZvbnREZXNjcmlwdGlvbiwgcmVtb3RlVVJJLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFs
aWMsIGV4dGVybmFsU1ZHKTsKKyAgICAgICAgcmV0dXJuIENhY2hlZEZvbnQ6OmNyZWF0ZUZvbnQo
Zm9udERlc2NyaXB0aW9uLCByZW1vdGVVUkksIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxp
YywgZXh0ZXJuYWxTVkcpOwogI2Vsc2UKICAgICBpZiAoIWV4dGVybmFsU1ZHKQotICAgICAgICBy
ZXR1cm4gQ2FjaGVkRm9udDo6Z2V0Rm9udERhdGEoZm9udERlc2NyaXB0aW9uLCByZW1vdGVVUkks
IHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYywgZXh0ZXJuYWxTVkcpOworICAgICAgICBy
ZXR1cm4gQ2FjaGVkRm9udDo6Y3JlYXRlRm9udChmb250RGVzY3JpcHRpb24sIHJlbW90ZVVSSSwg
c3ludGhldGljQm9sZCwgc3ludGhldGljSXRhbGljLCBleHRlcm5hbFNWRyk7CiAKICAgICBpZiAo
U1ZHRm9udEZhY2VFbGVtZW50KiBmaXJzdEZvbnRGYWNlID0gdGhpcy0+Zmlyc3RGb250RmFjZShy
ZW1vdGVVUkkpKQotICAgICAgICByZXR1cm4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZShzdGQ6Om1h
a2VfdW5pcXVlPFNWR0ZvbnREYXRhPihmaXJzdEZvbnRGYWNlKSwgZm9udERlc2NyaXB0aW9uLmNv
bXB1dGVkUGl4ZWxTaXplKCksIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYyk7CisgICAg
ICAgIHJldHVybiBGb250OjpjcmVhdGUoc3RkOjptYWtlX3VuaXF1ZTxTVkdGb250RGF0YT4oZmly
c3RGb250RmFjZSksIGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpLCBzeW50aGV0
aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMpOwogI2VuZGlmCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU1ZHRm9udC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTVkdGb250LmgJKHJl
dmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTVkdG
b250LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogCiAgICAgdmly
dHVhbCBib29sIGVuc3VyZUN1c3RvbUZvbnREYXRhKGJvb2wgZXh0ZXJuYWxTVkcsIGNvbnN0IEF0
b21pY1N0cmluZyYgcmVtb3RlVVJJKSBvdmVycmlkZTsKICAgICAKLSAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8U2ltcGxlRm9udERhdGE+IGdldEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYs
IGNvbnN0IEF0b21pY1N0cmluZyYgcmVtb3RlVVJJLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wg
c3ludGhldGljSXRhbGljLCBib29sIGV4dGVybmFsU1ZHKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFs
IFJlZlB0cjxGb250PiBjcmVhdGVGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0
b21pY1N0cmluZyYgcmVtb3RlVVJJLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGlj
SXRhbGljLCBib29sIGV4dGVybmFsU1ZHKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICBGb250
UGxhdGZvcm1EYXRhIHBsYXRmb3JtRGF0YUZyb21DdXN0b21EYXRhKGZsb2F0IHNpemUsIGJvb2wg
Ym9sZCwgYm9vbCBpdGFsaWMsIEZvbnRPcmllbnRhdGlvbiA9IEhvcml6b250YWwsIEZvbnRXaWR0
aFZhcmlhbnQgPSBSZWd1bGFyV2lkdGgsIEZvbnRSZW5kZXJpbmdNb2RlID0gTm9ybWFsUmVuZGVy
aW5nTW9kZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNw
cAkocmV2aXNpb24gMTc4NjUwKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9TaW1wbGVGb250RGF0YS5jcHA6MTc4NjUwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NTYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDgsIDIwMTAsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YK
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5j
LiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgorCisjaWYgUExBVEZPUk0o
SU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVE
ID4gMTA4MCkKKyNpbmNsdWRlICJDb3JlVGV4dFNQSS5oIgorI2VuZGlmCisjaW5jbHVkZSAiRm9u
dENhY2hlLmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKKyNpbmNsdWRlICJPcGVuVHlwZU1h
dGhEYXRhLmgiCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2
ZXJEZXN0cm95ZWQuaD4KKworI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKKyNpbmNsdWRl
ICJPcGVuVHlwZVZlcnRpY2FsRGF0YS5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KwordW5zaWduZWQgR2x5cGhQYWdlOjpzX2NvdW50ID0gMDsKKworY29uc3QgZmxvYXQgc21hbGxD
YXBzRm9udFNpemVNdWx0aXBsaWVyID0gMC43ZjsKK2NvbnN0IGZsb2F0IGVtcGhhc2lzTWFya0Zv
bnRTaXplTXVsdGlwbGllciA9IDAuNWY7CisKK1NpbXBsZUZvbnREYXRhOjpTaW1wbGVGb250RGF0
YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEsIGJvb2wgaXNDdXN0b21Gb250
LCBib29sIGlzTG9hZGluZywgYm9vbCBpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKQorICAgIDog
bV9tYXhDaGFyV2lkdGgoLTEpCisgICAgLCBtX2F2Z0NoYXJXaWR0aCgtMSkKKyAgICAsIG1fcGxh
dGZvcm1EYXRhKHBsYXRmb3JtRGF0YSkKKyAgICAsIG1fdHJlYXRBc0ZpeGVkUGl0Y2goZmFsc2Up
CisgICAgLCBtX2lzQ3VzdG9tRm9udChpc0N1c3RvbUZvbnQpCisgICAgLCBtX2lzTG9hZGluZyhp
c0xvYWRpbmcpCisgICAgLCBtX2lzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2soaXNUZXh0T3JpZW50
YXRpb25GYWxsYmFjaykKKyAgICAsIG1faXNCcm9rZW5JZGVvZ3JhcGhGYWxsYmFjayhmYWxzZSkK
KyAgICAsIG1fbWF0aERhdGEobnVsbHB0cikKKyNpZiBFTkFCTEUoT1BFTlRZUEVfVkVSVElDQUwp
CisgICAgLCBtX3ZlcnRpY2FsRGF0YSgwKQorI2VuZGlmCisgICAgLCBtX2hhc1ZlcnRpY2FsR2x5
cGhzKGZhbHNlKQoreworICAgIHBsYXRmb3JtSW5pdCgpOworICAgIHBsYXRmb3JtR2x5cGhJbml0
KCk7CisgICAgcGxhdGZvcm1DaGFyV2lkdGhJbml0KCk7CisjaWYgRU5BQkxFKE9QRU5UWVBFX1ZF
UlRJQ0FMKQorICAgIGlmIChwbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCAm
JiAhaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaykgeworICAgICAgICBtX3ZlcnRpY2FsRGF0YSA9
IHBsYXRmb3JtRGF0YS52ZXJ0aWNhbERhdGEoKTsKKyAgICAgICAgbV9oYXNWZXJ0aWNhbEdseXBo
cyA9IG1fdmVydGljYWxEYXRhLmdldCgpICYmIG1fdmVydGljYWxEYXRhLT5oYXNWZXJ0aWNhbE1l
dHJpY3MoKTsKKyAgICB9CisjZW5kaWYKK30KKworU2ltcGxlRm9udERhdGE6OlNpbXBsZUZvbnRE
YXRhKHN0ZDo6dW5pcXVlX3B0cjxTVkdEYXRhPiBzdmdEYXRhLCBmbG9hdCBmb250U2l6ZSwgYm9v
bCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYykKKyAgICA6IG1fcGxhdGZvcm1E
YXRhKEZvbnRQbGF0Zm9ybURhdGEoZm9udFNpemUsIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0
YWxpYykpCisgICAgLCBtX3N2Z0RhdGEoV1RGOjptb3ZlKHN2Z0RhdGEpKQorICAgICwgbV90cmVh
dEFzRml4ZWRQaXRjaChmYWxzZSkKKyAgICAsIG1faXNDdXN0b21Gb250KHRydWUpCisgICAgLCBt
X2lzTG9hZGluZyhmYWxzZSkKKyAgICAsIG1faXNUZXh0T3JpZW50YXRpb25GYWxsYmFjayhmYWxz
ZSkKKyAgICAsIG1faXNCcm9rZW5JZGVvZ3JhcGhGYWxsYmFjayhmYWxzZSkKKyAgICAsIG1fbWF0
aERhdGEobnVsbHB0cikKKyNpZiBFTkFCTEUoT1BFTlRZUEVfVkVSVElDQUwpCisgICAgLCBtX3Zl
cnRpY2FsRGF0YSgwKQorI2VuZGlmCisgICAgLCBtX2hhc1ZlcnRpY2FsR2x5cGhzKGZhbHNlKQor
I2lmIFBMQVRGT1JNKElPUykKKyAgICAsIG1fc2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKGZhbHNl
KQorI2VuZGlmCit7CisgICAgbV9zdmdEYXRhLT5pbml0aWFsaXplRm9udERhdGEodGhpcywgZm9u
dFNpemUpOworfQorCisvLyBFc3RpbWF0ZXMgb2YgYXZnQ2hhcldpZHRoIGFuZCBtYXhDaGFyV2lk
dGggZm9yIHBsYXRmb3JtcyB0aGF0IGRvbid0IHN1cHBvcnQgYWNjZXNzaW5nIHRoZXNlIHZhbHVl
cyBmcm9tIHRoZSBmb250Lgordm9pZCBTaW1wbGVGb250RGF0YTo6aW5pdENoYXJXaWR0aHMoKQor
eworICAgIGF1dG8qIGdseXBoUGFnZVplcm8gPSBnbHlwaFBhZ2UoMCk7CisKKyAgICAvLyBUcmVh
dCB0aGUgd2lkdGggb2YgYSAnMCcgYXMgdGhlIGF2Z0NoYXJXaWR0aC4KKyAgICBpZiAobV9hdmdD
aGFyV2lkdGggPD0gMC5mICYmIGdseXBoUGFnZVplcm8pIHsKKyAgICAgICAgc3RhdGljIGNvbnN0
IFVDaGFyMzIgZGlnaXRaZXJvQ2hhciA9ICcwJzsKKyAgICAgICAgR2x5cGggZGlnaXRaZXJvR2x5
cGggPSBnbHlwaFBhZ2VaZXJvLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoZGlnaXRaZXJvQ2hhciku
Z2x5cGg7CisgICAgICAgIGlmIChkaWdpdFplcm9HbHlwaCkKKyAgICAgICAgICAgIG1fYXZnQ2hh
cldpZHRoID0gd2lkdGhGb3JHbHlwaChkaWdpdFplcm9HbHlwaCk7CisgICAgfQorCisgICAgLy8g
SWYgd2UgY2FuJ3QgcmV0cmlldmUgdGhlIHdpZHRoIG9mIGEgJzAnLCBmYWxsIGJhY2sgdG8gdGhl
IHggaGVpZ2h0LgorICAgIGlmIChtX2F2Z0NoYXJXaWR0aCA8PSAwLmYpCisgICAgICAgIG1fYXZn
Q2hhcldpZHRoID0gbV9mb250TWV0cmljcy54SGVpZ2h0KCk7CisKKyAgICBpZiAobV9tYXhDaGFy
V2lkdGggPD0gMC5mKQorICAgICAgICBtX21heENoYXJXaWR0aCA9IHN0ZDo6bWF4KG1fYXZnQ2hh
cldpZHRoLCBtX2ZvbnRNZXRyaWNzLmZsb2F0QXNjZW50KCkpOworfQorCit2b2lkIFNpbXBsZUZv
bnREYXRhOjpwbGF0Zm9ybUdseXBoSW5pdCgpCit7CisgICAgYXV0byogZ2x5cGhQYWdlWmVybyA9
IGdseXBoUGFnZSgwKTsKKyAgICBpZiAoIWdseXBoUGFnZVplcm8pIHsKKyAgICAgICAgbV9zcGFj
ZUdseXBoID0gMDsKKyAgICAgICAgbV9zcGFjZVdpZHRoID0gMDsKKyAgICAgICAgbV96ZXJvR2x5
cGggPSAwOworICAgICAgICBtX2FkanVzdGVkU3BhY2VXaWR0aCA9IDA7CisgICAgICAgIGRldGVy
bWluZVBpdGNoKCk7CisgICAgICAgIG1femVyb1dpZHRoU3BhY2VHbHlwaCA9IDA7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICAvLyBBc2sgZm9yIHRoZSBnbHlwaCBmb3IgMCB0byBhdm9p
ZCBwYWdpbmcgaW4gWkVSTyBXSURUSCBTUEFDRS4gQ29udHJvbCBjaGFyYWN0ZXJzLCBpbmNsdWRp
bmcgMCwKKyAgICAvLyBhcmUgbWFwcGVkIHRvIHRoZSBaRVJPIFdJRFRIIFNQQUNFIGdseXBoLgor
ICAgIG1femVyb1dpZHRoU3BhY2VHbHlwaCA9IGdseXBoUGFnZVplcm8tPmdseXBoRGF0YUZvckNo
YXJhY3RlcigwKS5nbHlwaDsKKworICAgIC8vIE5hc3R5IGhhY2sgdG8gZGV0ZXJtaW5lIGlmIHdl
IHNob3VsZCByb3VuZCBvciBjZWlsIHNwYWNlIHdpZHRocy4KKyAgICAvLyBJZiB0aGUgZm9udCBp
cyBtb25vc3BhY2Ugb3IgZmFrZSBtb25vc3BhY2Ugd2UgY2VpbCB0byBlbnN1cmUgdGhhdCAKKyAg
ICAvLyBldmVyeSBjaGFyYWN0ZXIgYW5kIHRoZSBzcGFjZSBhcmUgdGhlIHNhbWUgd2lkdGguICBP
dGhlcndpc2Ugd2Ugcm91bmQuCisgICAgbV9zcGFjZUdseXBoID0gZ2x5cGhQYWdlWmVyby0+Z2x5
cGhEYXRhRm9yQ2hhcmFjdGVyKCcgJykuZ2x5cGg7CisgICAgZmxvYXQgd2lkdGggPSB3aWR0aEZv
ckdseXBoKG1fc3BhY2VHbHlwaCk7CisgICAgbV9zcGFjZVdpZHRoID0gd2lkdGg7CisgICAgbV96
ZXJvR2x5cGggPSBnbHlwaFBhZ2VaZXJvLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoJzAnKS5nbHlw
aDsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldFplcm9XaWR0aCh3aWR0aEZvckdseXBoKG1femVyb0ds
eXBoKSk7CisgICAgZGV0ZXJtaW5lUGl0Y2goKTsKKyAgICBtX2FkanVzdGVkU3BhY2VXaWR0aCA9
IG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPyBjZWlsZih3aWR0aCkgOiByb3VuZGYod2lkdGgpOworCisg
ICAgLy8gRm9yY2UgdGhlIGdseXBoIGZvciBaRVJPIFdJRFRIIFNQQUNFIHRvIGhhdmUgemVybyB3
aWR0aCwgdW5sZXNzIGl0IGlzIHNoYXJlZCB3aXRoIFNQQUNFLgorICAgIC8vIEhlbHZldGljYSBp
cyBhbiBleGFtcGxlIG9mIGEgbm9uLXplcm8gd2lkdGggWkVSTyBXSURUSCBTUEFDRSBnbHlwaC4K
KyAgICAvLyBTZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMTc4
PiBhbmQgU2ltcGxlRm9udERhdGE6OmlzWmVyb1dpZHRoU3BhY2VHbHlwaCgpCisgICAgaWYgKG1f
emVyb1dpZHRoU3BhY2VHbHlwaCA9PSBtX3NwYWNlR2x5cGgpCisgICAgICAgIG1femVyb1dpZHRo
U3BhY2VHbHlwaCA9IDA7Cit9CisKK1NpbXBsZUZvbnREYXRhOjp+U2ltcGxlRm9udERhdGEoKQor
eworICAgIHJlbW92ZUZyb21TeXN0ZW1GYWxsYmFja0NhY2hlKCk7Cit9CisKK3N0YXRpYyBib29s
IGZpbGxHbHlwaFBhZ2UoR2x5cGhQYWdlJiBwYWdlVG9GaWxsLCB1bnNpZ25lZCBvZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25z
dCBTaW1wbGVGb250RGF0YSogZm9udERhdGEpCit7CisjaWYgRU5BQkxFKFNWR19GT05UUykKKyAg
ICBpZiAoYXV0byogc3ZnRGF0YSA9IGZvbnREYXRhLT5zdmdEYXRhKCkpCisgICAgICAgIHJldHVy
biBzdmdEYXRhLT5maWxsU1ZHR2x5cGhQYWdlKCZwYWdlVG9GaWxsLCBvZmZzZXQsIGxlbmd0aCwg
YnVmZmVyLCBidWZmZXJMZW5ndGgsIGZvbnREYXRhKTsKKyNlbmRpZgorICAgIGJvb2wgaGFzR2x5
cGhzID0gcGFnZVRvRmlsbC5maWxsKG9mZnNldCwgbGVuZ3RoLCBidWZmZXIsIGJ1ZmZlckxlbmd0
aCwgZm9udERhdGEpOworI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKKyAgICBpZiAoaGFz
R2x5cGhzICYmIGZvbnREYXRhLT52ZXJ0aWNhbERhdGEoKSkKKyAgICAgICAgZm9udERhdGEtPnZl
cnRpY2FsRGF0YSgpLT5zdWJzdGl0dXRlV2l0aFZlcnRpY2FsR2x5cGhzKGZvbnREYXRhLCAmcGFn
ZVRvRmlsbCwgb2Zmc2V0LCBsZW5ndGgpOworI2VuZGlmCisgICAgcmV0dXJuIGhhc0dseXBoczsK
K30KKworc3RhdGljIFJlZlB0cjxHbHlwaFBhZ2U+IGNyZWF0ZUFuZEZpbGxHbHlwaFBhZ2UodW5z
aWduZWQgcGFnZU51bWJlciwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQoreworI2lm
IFBMQVRGT1JNKElPUykKKyAgICAvLyBGSVhNRTogVGltZXMgTmV3IFJvbWFuIGNvbnRhaW5zIEFy
YWJpYyBnbHlwaHMsIGJ1dCBDb3JlIFRleHQgZG9lc24ndCBrbm93IGhvdyB0byBzaGFwZSB0aGVt
LiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzk4MjM5NzU+LgorICAgIC8vIE9uY2Ugd2UgaGF2ZSB0aGUg
Zml4IGZvciA8cmRhcjovL3Byb2JsZW0vOTgyMzk3NT4gdGhlbiByZW1vdmUgdGhpcyBjb2RlIHRv
Z2V0aGVyIHdpdGggU2ltcGxlRm9udERhdGE6OnNob3VsZE5vdEJlVXNlZEZvckFyYWJpYygpCisg
ICAgLy8gaW4gPHJkYXI6Ly9wcm9ibGVtLzEyMDk2ODM1Pi4KKyAgICBpZiAocGFnZU51bWJlciA9
PSA2ICYmIGZvbnREYXRhLT5zaG91bGROb3RCZVVzZWRGb3JBcmFiaWMoKSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisjZW5kaWYKKworICAgIHVuc2lnbmVkIHN0YXJ0ID0gcGFnZU51bWJlciAq
IEdseXBoUGFnZTo6c2l6ZTsKKyAgICBVQ2hhciBidWZmZXJbR2x5cGhQYWdlOjpzaXplICogMiAr
IDJdOworICAgIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aDsKKyAgICAvLyBGaWxsIGluIGEgYnVmZmVy
IHdpdGggdGhlIGVudGlyZSAicGFnZSIgb2YgY2hhcmFjdGVycyB0aGF0IHdlIHdhbnQgdG8gbG9v
ayB1cCBnbHlwaHMgZm9yLgorICAgIGlmIChVX0lTX0JNUChzdGFydCkpIHsKKyAgICAgICAgYnVm
ZmVyTGVuZ3RoID0gR2x5cGhQYWdlOjpzaXplOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgR2x5cGhQYWdlOjpzaXplOyBpKyspCisgICAgICAgICAgICBidWZmZXJbaV0gPSBzdGFy
dCArIGk7CisKKyAgICAgICAgaWYgKHN0YXJ0ID09IDApIHsKKyAgICAgICAgICAgIC8vIENvbnRy
b2wgY2hhcmFjdGVycyBtdXN0IG5vdCByZW5kZXIgYXQgYWxsLgorICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IDB4MjA7ICsraSkKKyAgICAgICAgICAgICAgICBidWZmZXJbaV0g
PSB6ZXJvV2lkdGhTcGFjZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDB4N0Y7IGkg
PCAweEEwOyBpKyspCisgICAgICAgICAgICAgICAgYnVmZmVyW2ldID0gemVyb1dpZHRoU3BhY2U7
CisgICAgICAgICAgICBidWZmZXJbc29mdEh5cGhlbl0gPSB6ZXJvV2lkdGhTcGFjZTsKKworICAg
ICAgICAgICAgLy8gXG4sIFx0LCBhbmQgbm9uYnJlYWtpbmcgc3BhY2UgbXVzdCByZW5kZXIgYXMg
YSBzcGFjZS4KKyAgICAgICAgICAgIGJ1ZmZlclsoaW50KSdcbiddID0gJyAnOworICAgICAgICAg
ICAgYnVmZmVyWyhpbnQpJ1x0J10gPSAnICc7CisgICAgICAgICAgICBidWZmZXJbbm9CcmVha1Nw
YWNlXSA9ICcgJzsKKyAgICAgICAgfSBlbHNlIGlmIChzdGFydCA9PSAobGVmdFRvUmlnaHRNYXJr
ICYgfihHbHlwaFBhZ2U6OnNpemUgLSAxKSkpIHsKKyAgICAgICAgICAgIC8vIExSTSwgUkxNLCBM
UkUsIFJMRSwgWldOSiwgWldKLCBhbmQgUERGIG11c3Qgbm90IHJlbmRlciBhdCBhbGwuCisgICAg
ICAgICAgICBidWZmZXJbbGVmdFRvUmlnaHRNYXJrIC0gc3RhcnRdID0gemVyb1dpZHRoU3BhY2U7
CisgICAgICAgICAgICBidWZmZXJbcmlnaHRUb0xlZnRNYXJrIC0gc3RhcnRdID0gemVyb1dpZHRo
U3BhY2U7CisgICAgICAgICAgICBidWZmZXJbbGVmdFRvUmlnaHRFbWJlZCAtIHN0YXJ0XSA9IHpl
cm9XaWR0aFNwYWNlOworICAgICAgICAgICAgYnVmZmVyW3JpZ2h0VG9MZWZ0RW1iZWQgLSBzdGFy
dF0gPSB6ZXJvV2lkdGhTcGFjZTsKKyAgICAgICAgICAgIGJ1ZmZlcltsZWZ0VG9SaWdodE92ZXJy
aWRlIC0gc3RhcnRdID0gemVyb1dpZHRoU3BhY2U7CisgICAgICAgICAgICBidWZmZXJbcmlnaHRU
b0xlZnRPdmVycmlkZSAtIHN0YXJ0XSA9IHplcm9XaWR0aFNwYWNlOworICAgICAgICAgICAgYnVm
ZmVyW3plcm9XaWR0aE5vbkpvaW5lciAtIHN0YXJ0XSA9IHplcm9XaWR0aFNwYWNlOworICAgICAg
ICAgICAgYnVmZmVyW3plcm9XaWR0aEpvaW5lciAtIHN0YXJ0XSA9IHplcm9XaWR0aFNwYWNlOwor
ICAgICAgICAgICAgYnVmZmVyW3BvcERpcmVjdGlvbmFsRm9ybWF0dGluZyAtIHN0YXJ0XSA9IHpl
cm9XaWR0aFNwYWNlOworICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0ID09IChvYmplY3RSZXBsYWNl
bWVudENoYXJhY3RlciAmIH4oR2x5cGhQYWdlOjpzaXplIC0gMSkpKSB7CisgICAgICAgICAgICAv
LyBPYmplY3QgcmVwbGFjZW1lbnQgY2hhcmFjdGVyIG11c3Qgbm90IHJlbmRlciBhdCBhbGwuCisg
ICAgICAgICAgICBidWZmZXJbb2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXIgLSBzdGFydF0gPSB6
ZXJvV2lkdGhTcGFjZTsKKyAgICAgICAgfSBlbHNlIGlmIChzdGFydCA9PSAoemVyb1dpZHRoTm9C
cmVha1NwYWNlICYgfihHbHlwaFBhZ2U6OnNpemUgLSAxKSkpIHsKKyAgICAgICAgICAgIC8vIFpX
TkJTL0JPTSBtdXN0IG5vdCByZW5kZXIgYXQgYWxsLgorICAgICAgICAgICAgYnVmZmVyW3plcm9X
aWR0aE5vQnJlYWtTcGFjZSAtIHN0YXJ0XSA9IHplcm9XaWR0aFNwYWNlOworICAgICAgICB9Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgYnVmZmVyTGVuZ3RoID0gR2x5cGhQYWdlOjpzaXplICogMjsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdseXBoUGFnZTo6c2l6ZTsgaSsrKSB7
CisgICAgICAgICAgICBpbnQgYyA9IGkgKyBzdGFydDsKKyAgICAgICAgICAgIGJ1ZmZlcltpICog
Ml0gPSBVMTZfTEVBRChjKTsKKyAgICAgICAgICAgIGJ1ZmZlcltpICogMiArIDFdID0gVTE2X1RS
QUlMKGMpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gTm93IHRoYXQgd2UgaGF2ZSBhIGJ1
ZmZlciBmdWxsIG9mIGNoYXJhY3RlcnMsIHdlIHdhbnQgdG8gZ2V0IGJhY2sgYW4gYXJyYXkKKyAg
ICAvLyBvZiBnbHlwaCBpbmRpY2VzLiBUaGlzIHBhcnQgaW52b2x2ZXMgY2FsbGluZyBpbnRvIHRo
ZSBwbGF0Zm9ybS1zcGVjaWZpYworICAgIC8vIHJvdXRpbmUgb2Ygb3VyIGdseXBoIG1hcCBmb3Ig
YWN0dWFsbHkgZmlsbGluZyBpbiB0aGUgcGFnZSB3aXRoIHRoZSBnbHlwaHMuCisgICAgLy8gU3Vj
Y2VzcyBpcyBub3QgZ3VhcmFudGVlZC4gRm9yIGV4YW1wbGUsIFRpbWVzIGZhaWxzIHRvIGZpbGwg
cGFnZSAyNjAsIGdpdmluZyBnbHlwaCBkYXRhCisgICAgLy8gZm9yIG9ubHkgMTI4IG91dCBvZiAy
NTYgY2hhcmFjdGVycy4KKyAgICBSZWZQdHI8R2x5cGhQYWdlPiBnbHlwaFBhZ2U7CisgICAgaWYg
KEdseXBoUGFnZTo6bWF5VXNlTWl4ZWRGb250RGF0YVdoZW5GaWxsaW5nKGJ1ZmZlciwgYnVmZmVy
TGVuZ3RoLCBmb250RGF0YSkpCisgICAgICAgIGdseXBoUGFnZSA9IEdseXBoUGFnZTo6Y3JlYXRl
Rm9yTWl4ZWRGb250RGF0YSgpOworICAgIGVsc2UKKyAgICAgICAgZ2x5cGhQYWdlID0gR2x5cGhQ
YWdlOjpjcmVhdGVGb3JTaW5nbGVGb250RGF0YShmb250RGF0YSk7CisKKyAgICBib29sIGhhdmVH
bHlwaHMgPSBmaWxsR2x5cGhQYWdlKCpnbHlwaFBhZ2UsIDAsIEdseXBoUGFnZTo6c2l6ZSwgYnVm
ZmVyLCBidWZmZXJMZW5ndGgsIGZvbnREYXRhKTsKKyAgICBpZiAoIWhhdmVHbHlwaHMpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgZ2x5cGhQYWdlLT5zZXRJbW11dGFibGUoKTsKKyAg
ICByZXR1cm4gZ2x5cGhQYWdlOworfQorCitjb25zdCBHbHlwaFBhZ2UqIFNpbXBsZUZvbnREYXRh
OjpnbHlwaFBhZ2UodW5zaWduZWQgcGFnZU51bWJlcikgY29uc3QKK3sKKyAgICBpZiAocGFnZU51
bWJlciA9PSAwKSB7CisgICAgICAgIGlmICghbV9nbHlwaFBhZ2VaZXJvKQorICAgICAgICAgICAg
bV9nbHlwaFBhZ2VaZXJvID0gY3JlYXRlQW5kRmlsbEdseXBoUGFnZSgwLCB0aGlzKTsKKyAgICAg
ICAgcmV0dXJuIG1fZ2x5cGhQYWdlWmVyby5nZXQoKTsKKyAgICB9CisgICAgYXV0byBhZGRSZXN1
bHQgPSBtX2dseXBoUGFnZXMuYWRkKHBhZ2VOdW1iZXIsIG51bGxwdHIpOworICAgIGlmIChhZGRS
ZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGNy
ZWF0ZUFuZEZpbGxHbHlwaFBhZ2UocGFnZU51bWJlciwgdGhpcyk7CisKKyAgICByZXR1cm4gYWRk
UmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKK30KKworR2x5cGggU2ltcGxlRm9udERhdGE6
OmdseXBoRm9yQ2hhcmFjdGVyKFVDaGFyMzIgY2hhcmFjdGVyKSBjb25zdAoreworICAgIGF1dG8q
IHBhZ2UgPSBnbHlwaFBhZ2UoY2hhcmFjdGVyIC8gR2x5cGhQYWdlOjpzaXplKTsKKyAgICBpZiAo
IXBhZ2UpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBwYWdlLT5nbHlwaEF0KGNoYXJh
Y3RlciAlIEdseXBoUGFnZTo6c2l6ZSk7Cit9CisKK0dseXBoRGF0YSBTaW1wbGVGb250RGF0YTo6
Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgY2hhcmFjdGVyKSBjb25zdAoreworICAgIGF1
dG8qIHBhZ2UgPSBnbHlwaFBhZ2UoY2hhcmFjdGVyIC8gR2x5cGhQYWdlOjpzaXplKTsKKyAgICBp
ZiAoIXBhZ2UpCisgICAgICAgIHJldHVybiBHbHlwaERhdGEoKTsKKyAgICByZXR1cm4gcGFnZS0+
Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3Rlcik7Cit9CisKK1Bhc3NSZWZQdHI8U2ltcGxl
Rm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjp2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250RGF0
YSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKKyAgICAgICAgbV9kZXJp
dmVkRm9udERhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPERlcml2ZWRGb250RGF0YT4oaXNDdXN0b21G
b250KCkpOworICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEtPnZlcnRpY2FsUmlnaHRPcmllbnRh
dGlvbikgeworICAgICAgICBGb250UGxhdGZvcm1EYXRhIHZlcnRpY2FsUmlnaHRQbGF0Zm9ybURh
dGEobV9wbGF0Zm9ybURhdGEpOworICAgICAgICB2ZXJ0aWNhbFJpZ2h0UGxhdGZvcm1EYXRhLnNl
dE9yaWVudGF0aW9uKEhvcml6b250YWwpOworICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+dmVy
dGljYWxSaWdodE9yaWVudGF0aW9uID0gY3JlYXRlKHZlcnRpY2FsUmlnaHRQbGF0Zm9ybURhdGEs
IGlzQ3VzdG9tRm9udCgpLCBmYWxzZSwgdHJ1ZSk7CisgICAgfQorICAgIHJldHVybiBtX2Rlcml2
ZWRGb250RGF0YS0+dmVydGljYWxSaWdodE9yaWVudGF0aW9uOworfQorCitQYXNzUmVmUHRyPFNp
bXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6dXByaWdodE9yaWVudGF0aW9uRm9udERhdGEo
KSBjb25zdAoreworICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEpCisgICAgICAgIG1fZGVyaXZl
ZEZvbnREYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxEZXJpdmVkRm9udERhdGE+KGlzQ3VzdG9tRm9u
dCgpKTsKKyAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhLT51cHJpZ2h0T3JpZW50YXRpb24pCisg
ICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT51cHJpZ2h0T3JpZW50YXRpb24gPSBjcmVhdGUobV9w
bGF0Zm9ybURhdGEsIGlzQ3VzdG9tRm9udCgpLCBmYWxzZSwgdHJ1ZSk7CisgICAgcmV0dXJuIG1f
ZGVyaXZlZEZvbnREYXRhLT51cHJpZ2h0T3JpZW50YXRpb247Cit9CisKK1Bhc3NSZWZQdHI8U2lt
cGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250
RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKK3sKKyAgICBpZiAoIW1fZGVyaXZl
ZEZvbnREYXRhKQorICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8
RGVyaXZlZEZvbnREYXRhPihpc0N1c3RvbUZvbnQoKSk7CisgICAgaWYgKCFtX2Rlcml2ZWRGb250
RGF0YS0+c21hbGxDYXBzKQorICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzID0g
Y3JlYXRlU2NhbGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9uLCBzbWFsbENhcHNGb250U2l6ZU11
bHRpcGxpZXIpOworCisgICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHM7Cit9
CisKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjplbXBoYXNpc01h
cmtGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QK
K3sKKyAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQorICAgICAgICBtX2Rlcml2ZWRGb250RGF0
YSA9IHN0ZDo6bWFrZV91bmlxdWU8RGVyaXZlZEZvbnREYXRhPihpc0N1c3RvbUZvbnQoKSk7Cisg
ICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrKQorICAgICAgICBtX2Rlcml2
ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9udERlc2Ny
aXB0aW9uLCBlbXBoYXNpc01hcmtGb250U2l6ZU11bHRpcGxpZXIpOworCisgICAgcmV0dXJuIG1f
ZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcms7Cit9CisKK1Bhc3NSZWZQdHI8U2ltcGxlRm9u
dERhdGE+IFNpbXBsZUZvbnREYXRhOjpicm9rZW5JZGVvZ3JhcGhGb250RGF0YSgpIGNvbnN0Cit7
CisgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKKyAgICAgICAgbV9kZXJpdmVkRm9udERhdGEg
PSBzdGQ6Om1ha2VfdW5pcXVlPERlcml2ZWRGb250RGF0YT4oaXNDdXN0b21Gb250KCkpOworICAg
IGlmICghbV9kZXJpdmVkRm9udERhdGEtPmJyb2tlbklkZW9ncmFwaCkgeworICAgICAgICBtX2Rl
cml2ZWRGb250RGF0YS0+YnJva2VuSWRlb2dyYXBoID0gY3JlYXRlKG1fcGxhdGZvcm1EYXRhLCBp
c0N1c3RvbUZvbnQoKSwgZmFsc2UpOworICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+YnJva2Vu
SWRlb2dyYXBoLT5tX2lzQnJva2VuSWRlb2dyYXBoRmFsbGJhY2sgPSB0cnVlOworICAgIH0KKyAg
ICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPmJyb2tlbklkZW9ncmFwaDsKK30KKworUGFzc1Jl
ZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6Om5vblN5bnRoZXRpY0l0YWxpY0Zv
bnREYXRhKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQorICAgICAgICBt
X2Rlcml2ZWRGb250RGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8RGVyaXZlZEZvbnREYXRhPihpc0N1
c3RvbUZvbnQoKSk7CisgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+bm9uU3ludGhldGljSXRh
bGljKSB7CisgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEgbm9uU3ludGhldGljSXRhbGljRm9udFBs
YXRmb3JtRGF0YShtX3BsYXRmb3JtRGF0YSk7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgICAg
IG5vblN5bnRoZXRpY0l0YWxpY0ZvbnRQbGF0Zm9ybURhdGEubV9zeW50aGV0aWNPYmxpcXVlID0g
ZmFsc2U7CisjZW5kaWYKKyAgICAgICAgbV9kZXJpdmVkRm9udERhdGEtPm5vblN5bnRoZXRpY0l0
YWxpYyA9IGNyZWF0ZShub25TeW50aGV0aWNJdGFsaWNGb250UGxhdGZvcm1EYXRhLCBpc0N1c3Rv
bUZvbnQoKSk7CisgICAgfQorICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+bm9uU3ludGhl
dGljSXRhbGljOworfQorCisjaWZuZGVmIE5ERUJVRworU3RyaW5nIFNpbXBsZUZvbnREYXRhOjpk
ZXNjcmlwdGlvbigpIGNvbnN0Cit7CisgICAgaWYgKGlzU1ZHRm9udCgpKQorICAgICAgICByZXR1
cm4gIltTVkcgZm9udF0iOworICAgIGlmIChpc0N1c3RvbUZvbnQoKSkKKyAgICAgICAgcmV0dXJu
ICJbY3VzdG9tIGZvbnRdIjsKKworICAgIHJldHVybiBwbGF0Zm9ybURhdGEoKS5kZXNjcmlwdGlv
bigpOworfQorI2VuZGlmCisKK2NvbnN0IE9wZW5UeXBlTWF0aERhdGEqIFNpbXBsZUZvbnREYXRh
OjptYXRoRGF0YSgpIGNvbnN0Cit7CisgICAgaWYgKG1faXNMb2FkaW5nKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICBpZiAoIW1fbWF0aERhdGEpIHsKKyAgICAgICAgbV9tYXRoRGF0YSA9
IE9wZW5UeXBlTWF0aERhdGE6OmNyZWF0ZShtX3BsYXRmb3JtRGF0YSk7CisgICAgICAgIGlmICgh
bV9tYXRoRGF0YS0+aGFzTWF0aERhdGEoKSkKKyAgICAgICAgICAgIG1fbWF0aERhdGEuY2xlYXIo
KTsKKyAgICB9CisgICAgcmV0dXJuIG1fbWF0aERhdGEuZ2V0KCk7Cit9CisKK1NpbXBsZUZvbnRE
YXRhOjpEZXJpdmVkRm9udERhdGE6On5EZXJpdmVkRm9udERhdGEoKQoreworfQorCitQYXNzUmVm
UHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlU2NhbGVkRm9udERhdGEo
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNjYWxlRmFjdG9y
KSBjb25zdAoreworICAgIGlmIChpc1NWR0ZvbnQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICByZXR1cm4gcGxhdGZvcm1DcmVhdGVTY2FsZWRGb250RGF0YShmb250RGVzY3JpcHRp
b24sIHNjYWxlRmFjdG9yKTsKK30KKworYm9vbCBTaW1wbGVGb250RGF0YTo6YXBwbHlUcmFuc2Zv
cm1zKEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNl
cywgc2l6ZV90IGdseXBoQ291bnQsIFR5cGVzZXR0aW5nRmVhdHVyZXMgdHlwZXNldHRpbmdGZWF0
dXJlcykgY29uc3QKK3sKKyAgICAvLyBXZSBuZWVkIHRvIGhhbmRsZSB0cmFuc2Zvcm1zIG9uIFNW
RyBmb250cyBpbnRlcm5hbGx5LCBzaW5jZSB0aGV5IGFyZSByZW5kZXJlZCBpbnRlcm5hbGx5Lgor
ICAgIEFTU0VSVCghaXNTVkdGb250KCkpOworI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JN
KE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+IDEwODApCisgICAgQ1RG
b250VHJhbnNmb3JtT3B0aW9ucyBvcHRpb25zID0gKHR5cGVzZXR0aW5nRmVhdHVyZXMgJiBLZXJu
aW5nID8ga0NURm9udFRyYW5zZm9ybUFwcGx5UG9zaXRpb25pbmcgOiAwKSB8ICh0eXBlc2V0dGlu
Z0ZlYXR1cmVzICYgTGlnYXR1cmVzID8ga0NURm9udFRyYW5zZm9ybUFwcGx5U2hhcGluZyA6IDAp
OworICAgIHJldHVybiBDVEZvbnRUcmFuc2Zvcm1HbHlwaHMobV9wbGF0Zm9ybURhdGEuY3RGb250
KCksIGdseXBocywgcmVpbnRlcnByZXRfY2FzdDxDR1NpemUqPihhZHZhbmNlcyksIGdseXBoQ291
bnQsIG9wdGlvbnMpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZ2x5cGhzKTsKKyAgICBVTlVT
RURfUEFSQU0oYWR2YW5jZXMpOworICAgIFVOVVNFRF9QQVJBTShnbHlwaENvdW50KTsKKyAgICBV
TlVTRURfUEFSQU0odHlwZXNldHRpbmdGZWF0dXJlcyk7CisgICAgcmV0dXJuIGZhbHNlOworI2Vu
ZGlmCit9CisKKy8vIEZvbnREYXRhcyBhcmUgbm90IHJlZmNvdW50ZWQgdG8gYXZvaWQgY3ljbGVz
LgordHlwZWRlZiBIYXNoTWFwPHN0ZDo6cGFpcjxVQ2hhcjMyLCB1bnNpZ25lZD4sIFNpbXBsZUZv
bnREYXRhKj4gQ2hhcmFjdGVyRmFsbGJhY2tNYXA7Cit0eXBlZGVmIEhhc2hNYXA8Y29uc3QgU2lt
cGxlRm9udERhdGEqLCBDaGFyYWN0ZXJGYWxsYmFja01hcD4gU3lzdGVtRmFsbGJhY2tDYWNoZTsK
Kworc3RhdGljIFN5c3RlbUZhbGxiYWNrQ2FjaGUmIHN5c3RlbUZhbGxiYWNrQ2FjaGUoKQorewor
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTeXN0ZW1GYWxsYmFja0NhY2hlPiBtYXA7CisgICAg
cmV0dXJuIG1hcC5nZXQoKTsKK30KKworUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250
RGF0YTo6c3lzdGVtRmFsbGJhY2tGb250RGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGNoYXJhY3Rl
ciwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgYm9vbCBpc0ZvclBsYXRmb3Jt
Rm9udCkgY29uc3QKK3sKKyAgICBhdXRvIGZvbnRBZGRSZXN1bHQgPSBzeXN0ZW1GYWxsYmFja0Nh
Y2hlKCkuYWRkKHRoaXMsIENoYXJhY3RlckZhbGxiYWNrTWFwKCkpOworCisgICAgYXV0byBrZXkg
PSBzdGQ6Om1ha2VfcGFpcihjaGFyYWN0ZXIsIGlzRm9yUGxhdGZvcm1Gb250KTsKKyAgICBhdXRv
IGNoYXJhY3RlckFkZFJlc3VsdCA9IGZvbnRBZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFkZChr
ZXksIG51bGxwdHIpOworCisgICAgU2ltcGxlRm9udERhdGEqJiBmYWxsYmFja0ZvbnREYXRhID0g
Y2hhcmFjdGVyQWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKKworICAgIGlmICghZmFsbGJhY2tG
b250RGF0YSkgeworICAgICAgICBVQ2hhciBjb2RlVW5pdHNbMl07CisgICAgICAgIGludCBjb2Rl
VW5pdHNMZW5ndGg7CisgICAgICAgIGlmIChVX0lTX0JNUChjaGFyYWN0ZXIpKSB7CisgICAgICAg
ICAgICBjb2RlVW5pdHNbMF0gPSBGb250Q2FzY2FkZTo6bm9ybWFsaXplU3BhY2VzKGNoYXJhY3Rl
cik7CisgICAgICAgICAgICBjb2RlVW5pdHNMZW5ndGggPSAxOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgY29kZVVuaXRzWzBdID0gVTE2X0xFQUQoY2hhcmFjdGVyKTsKKyAgICAgICAg
ICAgIGNvZGVVbml0c1sxXSA9IFUxNl9UUkFJTChjaGFyYWN0ZXIpOworICAgICAgICAgICAgY29k
ZVVuaXRzTGVuZ3RoID0gMjsKKyAgICAgICAgfQorCisgICAgICAgIGZhbGxiYWNrRm9udERhdGEg
PSBmb250Q2FjaGUoKS5zeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoZGVzY3JpcHRpb24sIHRo
aXMsIGlzRm9yUGxhdGZvcm1Gb250LCBjb2RlVW5pdHMsIGNvZGVVbml0c0xlbmd0aCkuZ2V0KCk7
CisgICAgICAgIGlmIChmYWxsYmFja0ZvbnREYXRhKQorICAgICAgICAgICAgZmFsbGJhY2tGb250
RGF0YS0+bV9pc1VzZWRJblN5c3RlbUZhbGxiYWNrQ2FjaGUgPSB0cnVlOworICAgIH0KKworICAg
IHJldHVybiBmYWxsYmFja0ZvbnREYXRhOworfQorCit2b2lkIFNpbXBsZUZvbnREYXRhOjpyZW1v
dmVGcm9tU3lzdGVtRmFsbGJhY2tDYWNoZSgpCit7CisgICAgc3lzdGVtRmFsbGJhY2tDYWNoZSgp
LnJlbW92ZSh0aGlzKTsKKworICAgIGlmICghbV9pc1VzZWRJblN5c3RlbUZhbGxiYWNrQ2FjaGUp
CisgICAgICAgIHJldHVybjsKKworICAgIGZvciAoYXV0byYgY2hhcmFjdGVyTWFwIDogc3lzdGVt
RmFsbGJhY2tDYWNoZSgpLnZhbHVlcygpKSB7CisgICAgICAgIFZlY3RvcjxzdGQ6OnBhaXI8VUNo
YXIzMiwgdW5zaWduZWQ+LCA1MTI+IHRvUmVtb3ZlOworICAgICAgICBmb3IgKGF1dG8mIGVudHJ5
IDogY2hhcmFjdGVyTWFwKSB7CisgICAgICAgICAgICBpZiAoZW50cnkudmFsdWUgPT0gdGhpcykK
KyAgICAgICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQoZW50cnkua2V5KTsKKyAgICAgICAgfQor
ICAgICAgICBmb3IgKGF1dG8mIGtleSA6IHRvUmVtb3ZlKQorICAgICAgICAgICAgY2hhcmFjdGVy
TWFwLnJlbW92ZShrZXkpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAJKHdvcmtpbmcgY29w
eSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisjaW5jbHVkZSAiRm9udC5oIgogCiAjaWYgUExBVEZP
Uk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJ
UkVEID4gMTA4MCkKICNpbmNsdWRlICJDb3JlVGV4dFNQSS5oIgpAQCAtNTAsNyArNTAsNyBAQCB1
bnNpZ25lZCBHbHlwaFBhZ2U6OnNfY291bnQgPSAwOwogY29uc3QgZmxvYXQgc21hbGxDYXBzRm9u
dFNpemVNdWx0aXBsaWVyID0gMC43ZjsKIGNvbnN0IGZsb2F0IGVtcGhhc2lzTWFya0ZvbnRTaXpl
TXVsdGlwbGllciA9IDAuNWY7CiAKLVNpbXBsZUZvbnREYXRhOjpTaW1wbGVGb250RGF0YShjb25z
dCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEsIGJvb2wgaXNDdXN0b21Gb250LCBib29s
IGlzTG9hZGluZywgYm9vbCBpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKQorRm9udDo6Rm9udChj
b25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEsIGJvb2wgaXNDdXN0b21Gb250LCBi
b29sIGlzTG9hZGluZywgYm9vbCBpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKQogICAgIDogbV9t
YXhDaGFyV2lkdGgoLTEpCiAgICAgLCBtX2F2Z0NoYXJXaWR0aCgtMSkKICAgICAsIG1fcGxhdGZv
cm1EYXRhKHBsYXRmb3JtRGF0YSkKQEAgLTc2LDcgKzc2LDcgQEAgU2ltcGxlRm9udERhdGE6OlNp
bXBsZUZvbnREYXRhKGNvbnN0IEZvbgogI2VuZGlmCiB9CiAKLVNpbXBsZUZvbnREYXRhOjpTaW1w
bGVGb250RGF0YShzdGQ6OnVuaXF1ZV9wdHI8U1ZHRGF0YT4gc3ZnRGF0YSwgZmxvYXQgZm9udFNp
emUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpCitGb250OjpGb250
KHN0ZDo6dW5pcXVlX3B0cjxTVkdEYXRhPiBzdmdEYXRhLCBmbG9hdCBmb250U2l6ZSwgYm9vbCBz
eW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYykKICAgICA6IG1fcGxhdGZvcm1EYXRh
KEZvbnRQbGF0Zm9ybURhdGEoZm9udFNpemUsIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxp
YykpCiAgICAgLCBtX3N2Z0RhdGEoV1RGOjptb3ZlKHN2Z0RhdGEpKQogICAgICwgbV90cmVhdEFz
Rml4ZWRQaXRjaChmYWxzZSkKQEAgLTkzLDExICs5MywxMSBAQCBTaW1wbGVGb250RGF0YTo6U2lt
cGxlRm9udERhdGEoc3RkOjp1bmlxCiAgICAgLCBtX3Nob3VsZE5vdEJlVXNlZEZvckFyYWJpYyhm
YWxzZSkKICNlbmRpZgogewotICAgIG1fc3ZnRGF0YS0+aW5pdGlhbGl6ZUZvbnREYXRhKHRoaXMs
IGZvbnRTaXplKTsKKyAgICBtX3N2Z0RhdGEtPmluaXRpYWxpemVGb250KHRoaXMsIGZvbnRTaXpl
KTsKIH0KIAogLy8gRXN0aW1hdGVzIG9mIGF2Z0NoYXJXaWR0aCBhbmQgbWF4Q2hhcldpZHRoIGZv
ciBwbGF0Zm9ybXMgdGhhdCBkb24ndCBzdXBwb3J0IGFjY2Vzc2luZyB0aGVzZSB2YWx1ZXMgZnJv
bSB0aGUgZm9udC4KLXZvaWQgU2ltcGxlRm9udERhdGE6OmluaXRDaGFyV2lkdGhzKCkKK3ZvaWQg
Rm9udDo6aW5pdENoYXJXaWR0aHMoKQogewogICAgIGF1dG8qIGdseXBoUGFnZVplcm8gPSBnbHlw
aFBhZ2UoMCk7CiAKQEAgLTExNyw3ICsxMTcsNyBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjppbml0
Q2hhcldpZHRocygpCiAgICAgICAgIG1fbWF4Q2hhcldpZHRoID0gc3RkOjptYXgobV9hdmdDaGFy
V2lkdGgsIG1fZm9udE1ldHJpY3MuZmxvYXRBc2NlbnQoKSk7CiB9CiAKLXZvaWQgU2ltcGxlRm9u
dERhdGE6OnBsYXRmb3JtR2x5cGhJbml0KCkKK3ZvaWQgRm9udDo6cGxhdGZvcm1HbHlwaEluaXQo
KQogewogICAgIGF1dG8qIGdseXBoUGFnZVplcm8gPSBnbHlwaFBhZ2UoMCk7CiAgICAgaWYgKCFn
bHlwaFBhZ2VaZXJvKSB7CkBAIC0xNDcsMzcgKzE0NywzNyBAQCB2b2lkIFNpbXBsZUZvbnREYXRh
OjpwbGF0Zm9ybUdseXBoSW5pdCgpCiAKICAgICAvLyBGb3JjZSB0aGUgZ2x5cGggZm9yIFpFUk8g
V0lEVEggU1BBQ0UgdG8gaGF2ZSB6ZXJvIHdpZHRoLCB1bmxlc3MgaXQgaXMgc2hhcmVkIHdpdGgg
U1BBQ0UuCiAgICAgLy8gSGVsdmV0aWNhIGlzIGFuIGV4YW1wbGUgb2YgYSBub24temVybyB3aWR0
aCBaRVJPIFdJRFRIIFNQQUNFIGdseXBoLgotICAgIC8vIFNlZSA8aHR0cDovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMxNzg+IGFuZCBTaW1wbGVGb250RGF0YTo6aXNaZXJvV2lk
dGhTcGFjZUdseXBoKCkKKyAgICAvLyBTZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEzMTc4PiBhbmQgRm9udDo6aXNaZXJvV2lkdGhTcGFjZUdseXBoKCkKICAgICBp
ZiAobV96ZXJvV2lkdGhTcGFjZUdseXBoID09IG1fc3BhY2VHbHlwaCkKICAgICAgICAgbV96ZXJv
V2lkdGhTcGFjZUdseXBoID0gMDsKIH0KIAotU2ltcGxlRm9udERhdGE6On5TaW1wbGVGb250RGF0
YSgpCitGb250Ojp+Rm9udCgpCiB7CiAgICAgcmVtb3ZlRnJvbVN5c3RlbUZhbGxiYWNrQ2FjaGUo
KTsKIH0KIAotc3RhdGljIGJvb2wgZmlsbEdseXBoUGFnZShHbHlwaFBhZ2UmIHBhZ2VUb0ZpbGws
IHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25l
ZCBidWZmZXJMZW5ndGgsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSkKK3N0YXRpYyBi
b29sIGZpbGxHbHlwaFBhZ2UoR2x5cGhQYWdlJiBwYWdlVG9GaWxsLCB1bnNpZ25lZCBvZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBj
b25zdCBGb250KiBmb250KQogewogI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0gICAgaWYgKGF1dG8q
IHN2Z0RhdGEgPSBmb250RGF0YS0+c3ZnRGF0YSgpKQotICAgICAgICByZXR1cm4gc3ZnRGF0YS0+
ZmlsbFNWR0dseXBoUGFnZSgmcGFnZVRvRmlsbCwgb2Zmc2V0LCBsZW5ndGgsIGJ1ZmZlciwgYnVm
ZmVyTGVuZ3RoLCBmb250RGF0YSk7CisgICAgaWYgKGF1dG8qIHN2Z0RhdGEgPSBmb250LT5zdmdE
YXRhKCkpCisgICAgICAgIHJldHVybiBzdmdEYXRhLT5maWxsU1ZHR2x5cGhQYWdlKCZwYWdlVG9G
aWxsLCBvZmZzZXQsIGxlbmd0aCwgYnVmZmVyLCBidWZmZXJMZW5ndGgsIGZvbnQpOwogI2VuZGlm
Ci0gICAgYm9vbCBoYXNHbHlwaHMgPSBwYWdlVG9GaWxsLmZpbGwob2Zmc2V0LCBsZW5ndGgsIGJ1
ZmZlciwgYnVmZmVyTGVuZ3RoLCBmb250RGF0YSk7CisgICAgYm9vbCBoYXNHbHlwaHMgPSBwYWdl
VG9GaWxsLmZpbGwob2Zmc2V0LCBsZW5ndGgsIGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCBmb250KTsK
ICNpZiBFTkFCTEUoT1BFTlRZUEVfVkVSVElDQUwpCi0gICAgaWYgKGhhc0dseXBocyAmJiBmb250
RGF0YS0+dmVydGljYWxEYXRhKCkpCi0gICAgICAgIGZvbnREYXRhLT52ZXJ0aWNhbERhdGEoKS0+
c3Vic3RpdHV0ZVdpdGhWZXJ0aWNhbEdseXBocyhmb250RGF0YSwgJnBhZ2VUb0ZpbGwsIG9mZnNl
dCwgbGVuZ3RoKTsKKyAgICBpZiAoaGFzR2x5cGhzICYmIGZvbnQtPnZlcnRpY2FsRGF0YSgpKQor
ICAgICAgICBmb250LT52ZXJ0aWNhbERhdGEoKS0+c3Vic3RpdHV0ZVdpdGhWZXJ0aWNhbEdseXBo
cyhmb250LCAmcGFnZVRvRmlsbCwgb2Zmc2V0LCBsZW5ndGgpOwogI2VuZGlmCiAgICAgcmV0dXJu
IGhhc0dseXBoczsKIH0KIAotc3RhdGljIFJlZlB0cjxHbHlwaFBhZ2U+IGNyZWF0ZUFuZEZpbGxH
bHlwaFBhZ2UodW5zaWduZWQgcGFnZU51bWJlciwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnRE
YXRhKQorc3RhdGljIFJlZlB0cjxHbHlwaFBhZ2U+IGNyZWF0ZUFuZEZpbGxHbHlwaFBhZ2UodW5z
aWduZWQgcGFnZU51bWJlciwgY29uc3QgRm9udCogZm9udCkKIHsKICNpZiBQTEFURk9STShJT1Mp
CiAgICAgLy8gRklYTUU6IFRpbWVzIE5ldyBSb21hbiBjb250YWlucyBBcmFiaWMgZ2x5cGhzLCBi
dXQgQ29yZSBUZXh0IGRvZXNuJ3Qga25vdyBob3cgdG8gc2hhcGUgdGhlbS4gU2VlIDxyZGFyOi8v
cHJvYmxlbS85ODIzOTc1Pi4KLSAgICAvLyBPbmNlIHdlIGhhdmUgdGhlIGZpeCBmb3IgPHJkYXI6
Ly9wcm9ibGVtLzk4MjM5NzU+IHRoZW4gcmVtb3ZlIHRoaXMgY29kZSB0b2dldGhlciB3aXRoIFNp
bXBsZUZvbnREYXRhOjpzaG91bGROb3RCZVVzZWRGb3JBcmFiaWMoKQorICAgIC8vIE9uY2Ugd2Ug
aGF2ZSB0aGUgZml4IGZvciA8cmRhcjovL3Byb2JsZW0vOTgyMzk3NT4gdGhlbiByZW1vdmUgdGhp
cyBjb2RlIHRvZ2V0aGVyIHdpdGggRm9udDo6c2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKCkKICAg
ICAvLyBpbiA8cmRhcjovL3Byb2JsZW0vMTIwOTY4MzU+LgotICAgIGlmIChwYWdlTnVtYmVyID09
IDYgJiYgZm9udERhdGEtPnNob3VsZE5vdEJlVXNlZEZvckFyYWJpYygpKQorICAgIGlmIChwYWdl
TnVtYmVyID09IDYgJiYgZm9udC0+c2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKCkpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogI2VuZGlmCiAKQEAgLTIzNSwxMiArMjM1LDEyIEBAIHN0YXRpYyBS
ZWZQdHI8R2x5cGhQYWdlPiBjcmVhdGVBbmRGaWxsR2wKICAgICAvLyBTdWNjZXNzIGlzIG5vdCBn
dWFyYW50ZWVkLiBGb3IgZXhhbXBsZSwgVGltZXMgZmFpbHMgdG8gZmlsbCBwYWdlIDI2MCwgZ2l2
aW5nIGdseXBoIGRhdGEKICAgICAvLyBmb3Igb25seSAxMjggb3V0IG9mIDI1NiBjaGFyYWN0ZXJz
LgogICAgIFJlZlB0cjxHbHlwaFBhZ2U+IGdseXBoUGFnZTsKLSAgICBpZiAoR2x5cGhQYWdlOjpt
YXlVc2VNaXhlZEZvbnREYXRhV2hlbkZpbGxpbmcoYnVmZmVyLCBidWZmZXJMZW5ndGgsIGZvbnRE
YXRhKSkKLSAgICAgICAgZ2x5cGhQYWdlID0gR2x5cGhQYWdlOjpjcmVhdGVGb3JNaXhlZEZvbnRE
YXRhKCk7CisgICAgaWYgKEdseXBoUGFnZTo6bWF5VXNlTWl4ZWRGb250c1doZW5GaWxsaW5nKGJ1
ZmZlciwgYnVmZmVyTGVuZ3RoLCBmb250KSkKKyAgICAgICAgZ2x5cGhQYWdlID0gR2x5cGhQYWdl
OjpjcmVhdGVGb3JNaXhlZEZvbnRzKCk7CiAgICAgZWxzZQotICAgICAgICBnbHlwaFBhZ2UgPSBH
bHlwaFBhZ2U6OmNyZWF0ZUZvclNpbmdsZUZvbnREYXRhKGZvbnREYXRhKTsKKyAgICAgICAgZ2x5
cGhQYWdlID0gR2x5cGhQYWdlOjpjcmVhdGVGb3JTaW5nbGVGb250KGZvbnQpOwogCi0gICAgYm9v
bCBoYXZlR2x5cGhzID0gZmlsbEdseXBoUGFnZSgqZ2x5cGhQYWdlLCAwLCBHbHlwaFBhZ2U6OnNp
emUsIGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCBmb250RGF0YSk7CisgICAgYm9vbCBoYXZlR2x5cGhz
ID0gZmlsbEdseXBoUGFnZSgqZ2x5cGhQYWdlLCAwLCBHbHlwaFBhZ2U6OnNpemUsIGJ1ZmZlciwg
YnVmZmVyTGVuZ3RoLCBmb250KTsKICAgICBpZiAoIWhhdmVHbHlwaHMpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCkBAIC0yNDgsNyArMjQ4LDcgQEAgc3RhdGljIFJlZlB0cjxHbHlwaFBhZ2U+
IGNyZWF0ZUFuZEZpbGxHbAogICAgIHJldHVybiBnbHlwaFBhZ2U7CiB9CiAKLWNvbnN0IEdseXBo
UGFnZSogU2ltcGxlRm9udERhdGE6OmdseXBoUGFnZSh1bnNpZ25lZCBwYWdlTnVtYmVyKSBjb25z
dAorY29uc3QgR2x5cGhQYWdlKiBGb250OjpnbHlwaFBhZ2UodW5zaWduZWQgcGFnZU51bWJlcikg
Y29uc3QKIHsKICAgICBpZiAocGFnZU51bWJlciA9PSAwKSB7CiAgICAgICAgIGlmICghbV9nbHlw
aFBhZ2VaZXJvKQpAQCAtMjYyLDcgKzI2Miw3IEBAIGNvbnN0IEdseXBoUGFnZSogU2ltcGxlRm9u
dERhdGE6OmdseXBoUGEKICAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQo
KTsKIH0KIAotR2x5cGggU2ltcGxlRm9udERhdGE6OmdseXBoRm9yQ2hhcmFjdGVyKFVDaGFyMzIg
Y2hhcmFjdGVyKSBjb25zdAorR2x5cGggRm9udDo6Z2x5cGhGb3JDaGFyYWN0ZXIoVUNoYXIzMiBj
aGFyYWN0ZXIpIGNvbnN0CiB7CiAgICAgYXV0byogcGFnZSA9IGdseXBoUGFnZShjaGFyYWN0ZXIg
LyBHbHlwaFBhZ2U6OnNpemUpOwogICAgIGlmICghcGFnZSkKQEAgLTI3MCw3ICsyNzAsNyBAQCBH
bHlwaCBTaW1wbGVGb250RGF0YTo6Z2x5cGhGb3JDaGFyYWN0ZXIoCiAgICAgcmV0dXJuIHBhZ2Ut
PmdseXBoQXQoY2hhcmFjdGVyICUgR2x5cGhQYWdlOjpzaXplKTsKIH0KIAotR2x5cGhEYXRhIFNp
bXBsZUZvbnREYXRhOjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjaGFyYWN0ZXIpIGNv
bnN0CitHbHlwaERhdGEgRm9udDo6Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgY2hhcmFj
dGVyKSBjb25zdAogewogICAgIGF1dG8qIHBhZ2UgPSBnbHlwaFBhZ2UoY2hhcmFjdGVyIC8gR2x5
cGhQYWdlOjpzaXplKTsKICAgICBpZiAoIXBhZ2UpCkBAIC0yNzgsNyArMjc4LDcgQEAgR2x5cGhE
YXRhIFNpbXBsZUZvbnREYXRhOjpnbHlwaERhdGFGb3JDaAogICAgIHJldHVybiBwYWdlLT5nbHlw
aERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyKTsKIH0KIAotUGFzc1JlZlB0cjxTaW1wbGVGb250
RGF0YT4gU2ltcGxlRm9udERhdGE6OnZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbkZvbnREYXRhKCkg
Y29uc3QKK1Bhc3NSZWZQdHI8Rm9udD4gRm9udDo6dmVydGljYWxSaWdodE9yaWVudGF0aW9uRm9u
dCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKICAgICAgICAgbV9kZXJp
dmVkRm9udERhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPERlcml2ZWRGb250RGF0YT4oaXNDdXN0b21G
b250KCkpOwpAQCAtMjkwLDcgKzI5MCw3IEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNp
bXBsZUZvbnREYXQKICAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPnZlcnRpY2FsUmlnaHRP
cmllbnRhdGlvbjsKIH0KIAotUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERh
dGE6OnVwcmlnaHRPcmllbnRhdGlvbkZvbnREYXRhKCkgY29uc3QKK1Bhc3NSZWZQdHI8Rm9udD4g
Rm9udDo6dXByaWdodE9yaWVudGF0aW9uRm9udCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2Rlcml2
ZWRGb250RGF0YSkKICAgICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBzdGQ6Om1ha2VfdW5pcXVl
PERlcml2ZWRGb250RGF0YT4oaXNDdXN0b21Gb250KCkpOwpAQCAtMjk5LDI3ICsyOTksMjcgQEAg
UGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdAogICAgIHJldHVybiBtX2Rl
cml2ZWRGb250RGF0YS0+dXByaWdodE9yaWVudGF0aW9uOwogfQogCi1QYXNzUmVmUHRyPFNpbXBs
ZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6c21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9udERl
c2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0CitQYXNzUmVmUHRyPEZvbnQ+IEZvbnQ6
OnNtYWxsQ2Fwc0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNv
bnN0CiB7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKICAgICAgICAgbV9kZXJpdmVkRm9u
dERhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPERlcml2ZWRGb250RGF0YT4oaXNDdXN0b21Gb250KCkp
OwogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2FwcykKLSAgICAgICAgbV9kZXJp
dmVkRm9udERhdGEtPnNtYWxsQ2FwcyA9IGNyZWF0ZVNjYWxlZEZvbnREYXRhKGZvbnREZXNjcmlw
dGlvbiwgc21hbGxDYXBzRm9udFNpemVNdWx0aXBsaWVyKTsKKyAgICAgICAgbV9kZXJpdmVkRm9u
dERhdGEtPnNtYWxsQ2FwcyA9IGNyZWF0ZVNjYWxlZEZvbnQoZm9udERlc2NyaXB0aW9uLCBzbWFs
bENhcHNGb250U2l6ZU11bHRpcGxpZXIpOwogCiAgICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRh
LT5zbWFsbENhcHM7CiB9CiAKLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnRE
YXRhOjplbXBoYXNpc01hcmtGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNj
cmlwdGlvbikgY29uc3QKK1Bhc3NSZWZQdHI8Rm9udD4gRm9udDo6ZW1waGFzaXNNYXJrRm9udChj
b25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKIHsKICAgICBpZiAo
IW1fZGVyaXZlZEZvbnREYXRhKQogICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IHN0ZDo6bWFr
ZV91bmlxdWU8RGVyaXZlZEZvbnREYXRhPihpc0N1c3RvbUZvbnQoKSk7CiAgICAgaWYgKCFtX2Rl
cml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrKQotICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+
ZW1waGFzaXNNYXJrID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9uLCBlbXBo
YXNpc01hcmtGb250U2l6ZU11bHRpcGxpZXIpOworICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+
ZW1waGFzaXNNYXJrID0gY3JlYXRlU2NhbGVkRm9udChmb250RGVzY3JpcHRpb24sIGVtcGhhc2lz
TWFya0ZvbnRTaXplTXVsdGlwbGllcik7CiAKICAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEt
PmVtcGhhc2lzTWFyazsKIH0KIAotUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9u
dERhdGE6OmJyb2tlbklkZW9ncmFwaEZvbnREYXRhKCkgY29uc3QKK1Bhc3NSZWZQdHI8Rm9udD4g
Rm9udDo6YnJva2VuSWRlb2dyYXBoRm9udCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2Rlcml2ZWRG
b250RGF0YSkKICAgICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPERl
cml2ZWRGb250RGF0YT4oaXNDdXN0b21Gb250KCkpOwpAQCAtMzMwLDcgKzMzMCw3IEBAIFBhc3NS
ZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXQKICAgICByZXR1cm4gbV9kZXJpdmVk
Rm9udERhdGEtPmJyb2tlbklkZW9ncmFwaDsKIH0KIAotUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0
YT4gU2ltcGxlRm9udERhdGE6Om5vblN5bnRoZXRpY0l0YWxpY0ZvbnREYXRhKCkgY29uc3QKK1Bh
c3NSZWZQdHI8Rm9udD4gRm9udDo6bm9uU3ludGhldGljSXRhbGljRm9udCgpIGNvbnN0CiB7CiAg
ICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKICAgICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBz
dGQ6Om1ha2VfdW5pcXVlPERlcml2ZWRGb250RGF0YT4oaXNDdXN0b21Gb250KCkpOwpAQCAtMzQ1
LDcgKzM0NSw3IEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXQKIH0K
IAogI2lmbmRlZiBOREVCVUcKLVN0cmluZyBTaW1wbGVGb250RGF0YTo6ZGVzY3JpcHRpb24oKSBj
b25zdAorU3RyaW5nIEZvbnQ6OmRlc2NyaXB0aW9uKCkgY29uc3QKIHsKICAgICBpZiAoaXNTVkdG
b250KCkpCiAgICAgICAgIHJldHVybiAiW1NWRyBmb250XSI7CkBAIC0zNTYsNyArMzU2LDcgQEAg
U3RyaW5nIFNpbXBsZUZvbnREYXRhOjpkZXNjcmlwdGlvbigpIGNvbgogfQogI2VuZGlmCiAKLWNv
bnN0IE9wZW5UeXBlTWF0aERhdGEqIFNpbXBsZUZvbnREYXRhOjptYXRoRGF0YSgpIGNvbnN0Citj
b25zdCBPcGVuVHlwZU1hdGhEYXRhKiBGb250OjptYXRoRGF0YSgpIGNvbnN0CiB7CiAgICAgaWYg
KG1faXNMb2FkaW5nKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTM2OCwxOSArMzY4LDE5
IEBAIGNvbnN0IE9wZW5UeXBlTWF0aERhdGEqIFNpbXBsZUZvbnREYXRhOjoKICAgICByZXR1cm4g
bV9tYXRoRGF0YS5nZXQoKTsKIH0KIAotU2ltcGxlRm9udERhdGE6OkRlcml2ZWRGb250RGF0YTo6
fkRlcml2ZWRGb250RGF0YSgpCitGb250OjpEZXJpdmVkRm9udERhdGE6On5EZXJpdmVkRm9udERh
dGEoKQogewogfQogCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6
Y3JlYXRlU2NhbGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24sIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAorUGFzc1JlZlB0cjxGb250PiBGb250OjpjcmVh
dGVTY2FsZWRGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9h
dCBzY2FsZUZhY3RvcikgY29uc3QKIHsKICAgICBpZiAoaXNTVkdGb250KCkpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIHBsYXRmb3JtQ3JlYXRlU2NhbGVkRm9udERhdGEo
Zm9udERlc2NyaXB0aW9uLCBzY2FsZUZhY3Rvcik7CisgICAgcmV0dXJuIHBsYXRmb3JtQ3JlYXRl
U2NhbGVkRm9udChmb250RGVzY3JpcHRpb24sIHNjYWxlRmFjdG9yKTsKIH0KIAotYm9vbCBTaW1w
bGVGb250RGF0YTo6YXBwbHlUcmFuc2Zvcm1zKEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgR2x5
cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgc2l6ZV90IGdseXBoQ291bnQsIFR5cGVzZXR0aW5n
RmVhdHVyZXMgdHlwZXNldHRpbmdGZWF0dXJlcykgY29uc3QKK2Jvb2wgRm9udDo6YXBwbHlUcmFu
c2Zvcm1zKEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZh
bmNlcywgc2l6ZV90IGdseXBoQ291bnQsIFR5cGVzZXR0aW5nRmVhdHVyZXMgdHlwZXNldHRpbmdG
ZWF0dXJlcykgY29uc3QKIHsKICAgICAvLyBXZSBuZWVkIHRvIGhhbmRsZSB0cmFuc2Zvcm1zIG9u
IFNWRyBmb250cyBpbnRlcm5hbGx5LCBzaW5jZSB0aGV5IGFyZSByZW5kZXJlZCBpbnRlcm5hbGx5
LgogICAgIEFTU0VSVCghaXNTVkdGb250KCkpOwpAQCAtMzk2LDkgKzM5Niw5IEBAIGJvb2wgU2lt
cGxlRm9udERhdGE6OmFwcGx5VHJhbnNmb3JtcyhHbHkKICNlbmRpZgogfQogCi0vLyBGb250RGF0
YXMgYXJlIG5vdCByZWZjb3VudGVkIHRvIGF2b2lkIGN5Y2xlcy4KLXR5cGVkZWYgSGFzaE1hcDxz
dGQ6OnBhaXI8VUNoYXIzMiwgdW5zaWduZWQ+LCBTaW1wbGVGb250RGF0YSo+IENoYXJhY3RlckZh
bGxiYWNrTWFwOwotdHlwZWRlZiBIYXNoTWFwPGNvbnN0IFNpbXBsZUZvbnREYXRhKiwgQ2hhcmFj
dGVyRmFsbGJhY2tNYXA+IFN5c3RlbUZhbGxiYWNrQ2FjaGU7CisvLyBGb250cyBhcmUgbm90IHJl
ZidkIHRvIGF2b2lkIGN5Y2xlcy4KK3R5cGVkZWYgSGFzaE1hcDxzdGQ6OnBhaXI8VUNoYXIzMiwg
dW5zaWduZWQ+LCBGb250Kj4gQ2hhcmFjdGVyRmFsbGJhY2tNYXA7Cit0eXBlZGVmIEhhc2hNYXA8
Y29uc3QgRm9udCosIENoYXJhY3RlckZhbGxiYWNrTWFwPiBTeXN0ZW1GYWxsYmFja0NhY2hlOwog
CiBzdGF0aWMgU3lzdGVtRmFsbGJhY2tDYWNoZSYgc3lzdGVtRmFsbGJhY2tDYWNoZSgpCiB7CkBA
IC00MDYsMTYgKzQwNiwxNiBAQCBzdGF0aWMgU3lzdGVtRmFsbGJhY2tDYWNoZSYgc3lzdGVtRmFs
bGJhCiAgICAgcmV0dXJuIG1hcC5nZXQoKTsKIH0KIAotUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBT
aW1wbGVGb250RGF0YTo6c3lzdGVtRmFsbGJhY2tGb250RGF0YUZvckNoYXJhY3RlcihVQ2hhcjMy
IGNoYXJhY3RlciwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgYm9vbCBpc0Zv
clBsYXRmb3JtRm9udCkgY29uc3QKK1JlZlB0cjxGb250PiBGb250OjpzeXN0ZW1GYWxsYmFja0Zv
bnRGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjaGFyYWN0ZXIsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
ZGVzY3JpcHRpb24sIGJvb2wgaXNGb3JQbGF0Zm9ybUZvbnQpIGNvbnN0CiB7CiAgICAgYXV0byBm
b250QWRkUmVzdWx0ID0gc3lzdGVtRmFsbGJhY2tDYWNoZSgpLmFkZCh0aGlzLCBDaGFyYWN0ZXJG
YWxsYmFja01hcCgpKTsKIAogICAgIGF1dG8ga2V5ID0gc3RkOjptYWtlX3BhaXIoY2hhcmFjdGVy
LCBpc0ZvclBsYXRmb3JtRm9udCk7CiAgICAgYXV0byBjaGFyYWN0ZXJBZGRSZXN1bHQgPSBmb250
QWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hZGQoa2V5LCBudWxscHRyKTsKIAotICAgIFNpbXBs
ZUZvbnREYXRhKiYgZmFsbGJhY2tGb250RGF0YSA9IGNoYXJhY3RlckFkZFJlc3VsdC5pdGVyYXRv
ci0+dmFsdWU7CisgICAgRm9udComIGZhbGxiYWNrRm9udCA9IGNoYXJhY3RlckFkZFJlc3VsdC5p
dGVyYXRvci0+dmFsdWU7CiAKLSAgICBpZiAoIWZhbGxiYWNrRm9udERhdGEpIHsKKyAgICBpZiAo
IWZhbGxiYWNrRm9udCkgewogICAgICAgICBVQ2hhciBjb2RlVW5pdHNbMl07CiAgICAgICAgIGlu
dCBjb2RlVW5pdHNMZW5ndGg7CiAgICAgICAgIGlmIChVX0lTX0JNUChjaGFyYWN0ZXIpKSB7CkBA
IC00MjcsMTUgKzQyNywxNSBAQCBSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRh
OjpzCiAgICAgICAgICAgICBjb2RlVW5pdHNMZW5ndGggPSAyOwogICAgICAgICB9CiAKLSAgICAg
ICAgZmFsbGJhY2tGb250RGF0YSA9IGZvbnRDYWNoZSgpLnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFj
dGVycyhkZXNjcmlwdGlvbiwgdGhpcywgaXNGb3JQbGF0Zm9ybUZvbnQsIGNvZGVVbml0cywgY29k
ZVVuaXRzTGVuZ3RoKS5nZXQoKTsKLSAgICAgICAgaWYgKGZhbGxiYWNrRm9udERhdGEpCi0gICAg
ICAgICAgICBmYWxsYmFja0ZvbnREYXRhLT5tX2lzVXNlZEluU3lzdGVtRmFsbGJhY2tDYWNoZSA9
IHRydWU7CisgICAgICAgIGZhbGxiYWNrRm9udCA9IGZvbnRDYWNoZSgpLnN5c3RlbUZhbGxiYWNr
Rm9yQ2hhcmFjdGVycyhkZXNjcmlwdGlvbiwgdGhpcywgaXNGb3JQbGF0Zm9ybUZvbnQsIGNvZGVV
bml0cywgY29kZVVuaXRzTGVuZ3RoKS5nZXQoKTsKKyAgICAgICAgaWYgKGZhbGxiYWNrRm9udCkK
KyAgICAgICAgICAgIGZhbGxiYWNrRm9udC0+bV9pc1VzZWRJblN5c3RlbUZhbGxiYWNrQ2FjaGUg
PSB0cnVlOwogICAgIH0KIAotICAgIHJldHVybiBmYWxsYmFja0ZvbnREYXRhOworICAgIHJldHVy
biBmYWxsYmFja0ZvbnQ7CiB9CiAKLXZvaWQgU2ltcGxlRm9udERhdGE6OnJlbW92ZUZyb21TeXN0
ZW1GYWxsYmFja0NhY2hlKCkKK3ZvaWQgRm9udDo6cmVtb3ZlRnJvbVN5c3RlbUZhbGxiYWNrQ2Fj
aGUoKQogewogICAgIHN5c3RlbUZhbGxiYWNrQ2FjaGUoKS5yZW1vdmUodGhpcyk7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgJKHJldmlzaW9uIDE3ODY1MCkJ
KGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaDox
Nzg2NTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwzNjkgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgaW50ZXJuYWwgZm9udCBpbXBsZW1lbnRhdGlvbi4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYsIDIwMDgsIDIwMTAsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA3LTIwMDggVG9yY2ggTW9iaWxlLCBJbmMuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFNp
bXBsZUZvbnREYXRhX2gKKyNkZWZpbmUgU2ltcGxlRm9udERhdGFfaAorCisjaW5jbHVkZSAiRm9u
dEJhc2VsaW5lLmgiCisjaW5jbHVkZSAiRm9udE1ldHJpY3MuaCIKKyNpbmNsdWRlICJGb250UGxh
dGZvcm1EYXRhLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR2x5cGhCdWZm
ZXIuaCIKKyNpbmNsdWRlICJHbHlwaE1ldHJpY3NNYXAuaCIKKyNpbmNsdWRlICJHbHlwaFBhZ2Uu
aCIKKyNpbmNsdWRlICJPcGVuVHlwZU1hdGhEYXRhLmgiCisjaWYgRU5BQkxFKE9QRU5UWVBFX1ZF
UlRJQ0FMKQorI2luY2x1ZGUgIk9wZW5UeXBlVmVydGljYWxEYXRhLmgiCisjZW5kaWYKKyNpbmNs
dWRlICJUeXBlc2V0dGluZ0ZlYXR1cmVzLmgiCisjaW5jbHVkZSA8d3RmL1R5cGVDYXN0cy5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKworI2lmIFBMQVRGT1JNKENPQ09BKQor
I2luY2x1ZGUgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKKyNpbmNsdWRlIDx3dGYvUmV0YWlu
UHRyLmg+CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKFdJTikKKyNpbmNsdWRlIDx1c3AxMC5oPgor
I2VuZGlmCisKKyNpZiBVU0UoQ0FJUk8pCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNlbmRpZgorCisj
aWYgVVNFKENHKQorI2luY2x1ZGUgPFdlYkNvcmUvQ29yZUdyYXBoaWNzU1BJLmg+CisjZW5kaWYK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHbHlwaFBhZ2U7CitjbGFzcyBGb250RGVz
Y3JpcHRpb247CitjbGFzcyBTaGFyZWRCdWZmZXI7CitzdHJ1Y3QgR2x5cGhEYXRhOworc3RydWN0
IFdpZHRoSXRlcmF0b3I7CisKK2VudW0gRm9udERhdGFWYXJpYW50IHsgQXV0b1ZhcmlhbnQsIE5v
cm1hbFZhcmlhbnQsIFNtYWxsQ2Fwc1ZhcmlhbnQsIEVtcGhhc2lzTWFya1ZhcmlhbnQsIEJyb2tl
bklkZW9ncmFwaFZhcmlhbnQgfTsKK2VudW0gUGl0Y2ggeyBVbmtub3duUGl0Y2gsIEZpeGVkUGl0
Y2gsIFZhcmlhYmxlUGl0Y2ggfTsKKworY2xhc3MgU2ltcGxlRm9udERhdGEgOiBwdWJsaWMgUmVm
Q291bnRlZDxTaW1wbGVGb250RGF0YT4geworcHVibGljOgorICAgIGNsYXNzIFNWR0RhdGEgewor
ICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBwdWJsaWM6CisgICAgICAgIHZp
cnR1YWwgflNWR0RhdGEoKSB7IH0KKworICAgICAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZUZv
bnREYXRhKFNpbXBsZUZvbnREYXRhKiwgZmxvYXQgZm9udFNpemUpID0gMDsKKyAgICAgICAgdmly
dHVhbCBmbG9hdCB3aWR0aEZvclNWR0dseXBoKEdseXBoLCBmbG9hdCBmb250U2l6ZSkgY29uc3Qg
PSAwOworICAgICAgICB2aXJ0dWFsIGJvb2wgZmlsbFNWR0dseXBoUGFnZShHbHlwaFBhZ2UqLCB1
bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQg
YnVmZmVyTGVuZ3RoLCBjb25zdCBTaW1wbGVGb250RGF0YSopIGNvbnN0ID0gMDsKKyAgICB9Owor
CisgICAgLy8gVXNlZCB0byBjcmVhdGUgcGxhdGZvcm0gZm9udHMuCisgICAgc3RhdGljIFJlZjxT
aW1wbGVGb250RGF0YT4gY3JlYXRlKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0
YSwgYm9vbCBpc0N1c3RvbUZvbnQgPSBmYWxzZSwgYm9vbCBpc0xvYWRpbmcgPSBmYWxzZSwgYm9v
bCBpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrID0gZmFsc2UpCisgICAgeworICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBTaW1wbGVGb250RGF0YShwbGF0Zm9ybURhdGEsIGlzQ3VzdG9tRm9u
dCwgaXNMb2FkaW5nLCBpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKSk7CisgICAgfQorCisgICAg
Ly8gVXNlZCB0byBjcmVhdGUgU1ZHIEZvbnRzLgorICAgIHN0YXRpYyBSZWY8U2ltcGxlRm9udERh
dGE+IGNyZWF0ZShzdGQ6OnVuaXF1ZV9wdHI8U1ZHRGF0YT4gc3ZnRGF0YSwgZmxvYXQgZm9udFNp
emUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTaW1wbGVGb250RGF0YShXVEY6Om1vdmUoc3ZnRGF0
YSksIGZvbnRTaXplLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMpKTsKKyAgICB9CisK
KyAgICB+U2ltcGxlRm9udERhdGEoKTsKKworICAgIHN0YXRpYyBjb25zdCBTaW1wbGVGb250RGF0
YSogc3lzdGVtRmFsbGJhY2soKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IFNpbXBs
ZUZvbnREYXRhKj4oLTEpOyB9CisKKyAgICBjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9y
bURhdGEoKSBjb25zdCB7IHJldHVybiBtX3BsYXRmb3JtRGF0YTsgfQorICAgIGNvbnN0IE9wZW5U
eXBlTWF0aERhdGEqIG1hdGhEYXRhKCkgY29uc3Q7CisjaWYgRU5BQkxFKE9QRU5UWVBFX1ZFUlRJ
Q0FMKQorICAgIGNvbnN0IE9wZW5UeXBlVmVydGljYWxEYXRhKiB2ZXJ0aWNhbERhdGEoKSBjb25z
dCB7IHJldHVybiBtX3ZlcnRpY2FsRGF0YS5nZXQoKTsgfQorI2VuZGlmCisKKyAgICBQYXNzUmVm
UHRyPFNpbXBsZUZvbnREYXRhPiBzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRp
b24mKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBlbXBoYXNpc01hcmtG
b250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPFNp
bXBsZUZvbnREYXRhPiBicm9rZW5JZGVvZ3JhcGhGb250RGF0YSgpIGNvbnN0OworICAgIFBhc3NS
ZWZQdHI8U2ltcGxlRm9udERhdGE+IG5vblN5bnRoZXRpY0l0YWxpY0ZvbnREYXRhKCkgY29uc3Q7
CisKKyAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiB2YXJpYW50Rm9udERhdGEoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udERhdGFWYXJpYW50IHZhcmlhbnQpIGNv
bnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKHZhcmlhbnQpIHsKKyAgICAgICAgY2FzZSBTbWFs
bENhcHNWYXJpYW50OgorICAgICAgICAgICAgcmV0dXJuIHNtYWxsQ2Fwc0ZvbnREYXRhKGRlc2Ny
aXB0aW9uKTsKKyAgICAgICAgY2FzZSBFbXBoYXNpc01hcmtWYXJpYW50OgorICAgICAgICAgICAg
cmV0dXJuIGVtcGhhc2lzTWFya0ZvbnREYXRhKGRlc2NyaXB0aW9uKTsKKyAgICAgICAgY2FzZSBC
cm9rZW5JZGVvZ3JhcGhWYXJpYW50OgorICAgICAgICAgICAgcmV0dXJuIGJyb2tlbklkZW9ncmFw
aEZvbnREYXRhKCk7CisgICAgICAgIGNhc2UgQXV0b1ZhcmlhbnQ6CisgICAgICAgIGNhc2UgTm9y
bWFsVmFyaWFudDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gY29uc3RfY2FzdDxTaW1wbGVGb250RGF0
YSo+KHRoaXMpOworICAgIH0KKworICAgIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IHZlcnRp
Y2FsUmlnaHRPcmllbnRhdGlvbkZvbnREYXRhKCkgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxTaW1w
bGVGb250RGF0YT4gdXByaWdodE9yaWVudGF0aW9uRm9udERhdGEoKSBjb25zdDsKKworICAgIGJv
b2wgaGFzVmVydGljYWxHbHlwaHMoKSBjb25zdCB7IHJldHVybiBtX2hhc1ZlcnRpY2FsR2x5cGhz
OyB9CisgICAgYm9vbCBpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKCkgY29uc3QgeyByZXR1cm4g
bV9pc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrOyB9CisKKyAgICBGb250TWV0cmljcyYgZm9udE1l
dHJpY3MoKSB7IHJldHVybiBtX2ZvbnRNZXRyaWNzOyB9CisgICAgY29uc3QgRm9udE1ldHJpY3Mm
IGZvbnRNZXRyaWNzKCkgY29uc3QgeyByZXR1cm4gbV9mb250TWV0cmljczsgfQorICAgIGZsb2F0
IHNpemVQZXJVbml0KCkgY29uc3QgeyByZXR1cm4gcGxhdGZvcm1EYXRhKCkuc2l6ZSgpIC8gKGZv
bnRNZXRyaWNzKCkudW5pdHNQZXJFbSgpID8gZm9udE1ldHJpY3MoKS51bml0c1BlckVtKCkgOiAx
KTsgfQorCisgICAgZmxvYXQgbWF4Q2hhcldpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9tYXhDaGFy
V2lkdGg7IH0KKyAgICB2b2lkIHNldE1heENoYXJXaWR0aChmbG9hdCBtYXhDaGFyV2lkdGgpIHsg
bV9tYXhDaGFyV2lkdGggPSBtYXhDaGFyV2lkdGg7IH0KKworICAgIGZsb2F0IGF2Z0NoYXJXaWR0
aCgpIGNvbnN0IHsgcmV0dXJuIG1fYXZnQ2hhcldpZHRoOyB9CisgICAgdm9pZCBzZXRBdmdDaGFy
V2lkdGgoZmxvYXQgYXZnQ2hhcldpZHRoKSB7IG1fYXZnQ2hhcldpZHRoID0gYXZnQ2hhcldpZHRo
OyB9CisKKyAgICBGbG9hdFJlY3QgYm91bmRzRm9yR2x5cGgoR2x5cGgpIGNvbnN0OworICAgIGZs
b2F0IHdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0OworICAgIEZsb2F0UmVjdCBwbGF0
Zm9ybUJvdW5kc0ZvckdseXBoKEdseXBoKSBjb25zdDsKKyAgICBmbG9hdCBwbGF0Zm9ybVdpZHRo
Rm9yR2x5cGgoR2x5cGgpIGNvbnN0OworCisgICAgZmxvYXQgc3BhY2VXaWR0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fc3BhY2VXaWR0aDsgfQorICAgIGZsb2F0IGFkanVzdGVkU3BhY2VXaWR0aCgpIGNv
bnN0IHsgcmV0dXJuIG1fYWRqdXN0ZWRTcGFjZVdpZHRoOyB9CisgICAgdm9pZCBzZXRTcGFjZVdp
ZHRocyhmbG9hdCBzcGFjZVdpZHRoKQorICAgIHsKKyAgICAgICAgbV9zcGFjZVdpZHRoID0gc3Bh
Y2VXaWR0aDsKKyAgICAgICAgbV9hZGp1c3RlZFNwYWNlV2lkdGggPSBzcGFjZVdpZHRoOworICAg
IH0KKworI2lmIFVTRShDRykgfHwgVVNFKENBSVJPKQorICAgIGZsb2F0IHN5bnRoZXRpY0JvbGRP
ZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3N5bnRoZXRpY0JvbGRPZmZzZXQ7IH0KKyNlbmRpZgor
CisgICAgR2x5cGggc3BhY2VHbHlwaCgpIGNvbnN0IHsgcmV0dXJuIG1fc3BhY2VHbHlwaDsgfQor
ICAgIHZvaWQgc2V0U3BhY2VHbHlwaChHbHlwaCBzcGFjZUdseXBoKSB7IG1fc3BhY2VHbHlwaCA9
IHNwYWNlR2x5cGg7IH0KKyAgICBHbHlwaCB6ZXJvV2lkdGhTcGFjZUdseXBoKCkgY29uc3QgeyBy
ZXR1cm4gbV96ZXJvV2lkdGhTcGFjZUdseXBoOyB9CisgICAgdm9pZCBzZXRaZXJvV2lkdGhTcGFj
ZUdseXBoKEdseXBoIHNwYWNlR2x5cGgpIHsgbV96ZXJvV2lkdGhTcGFjZUdseXBoID0gc3BhY2VH
bHlwaDsgfQorICAgIGJvb2wgaXNaZXJvV2lkdGhTcGFjZUdseXBoKEdseXBoIGdseXBoKSBjb25z
dCB7IHJldHVybiBnbHlwaCA9PSBtX3plcm9XaWR0aFNwYWNlR2x5cGggJiYgZ2x5cGg7IH0KKyAg
ICBHbHlwaCB6ZXJvR2x5cGgoKSBjb25zdCB7IHJldHVybiBtX3plcm9HbHlwaDsgfQorICAgIHZv
aWQgc2V0WmVyb0dseXBoKEdseXBoIHplcm9HbHlwaCkgeyBtX3plcm9HbHlwaCA9IHplcm9HbHlw
aDsgfQorCisgICAgR2x5cGhEYXRhIGdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyKSBjb25z
dDsKKyAgICBHbHlwaCBnbHlwaEZvckNoYXJhY3RlcihVQ2hhcjMyKSBjb25zdDsKKworICAgIFJl
ZlB0cjxTaW1wbGVGb250RGF0YT4gc3lzdGVtRmFsbGJhY2tGb250RGF0YUZvckNoYXJhY3RlcihV
Q2hhcjMyLCBjb25zdCBGb250RGVzY3JpcHRpb24mLCBib29sIGlzRm9yUGxhdGZvcm1Gb250KSBj
b25zdDsKKworICAgIGNvbnN0IEdseXBoUGFnZSogZ2x5cGhQYWdlKHVuc2lnbmVkIHBhZ2VOdW1i
ZXIpIGNvbnN0OworCisgICAgdm9pZCBkZXRlcm1pbmVQaXRjaCgpOworICAgIFBpdGNoIHBpdGNo
KCkgY29uc3QgeyByZXR1cm4gbV90cmVhdEFzRml4ZWRQaXRjaCA/IEZpeGVkUGl0Y2ggOiBWYXJp
YWJsZVBpdGNoOyB9CisKKyAgICBjb25zdCBTVkdEYXRhKiBzdmdEYXRhKCkgY29uc3QgeyByZXR1
cm4gbV9zdmdEYXRhLmdldCgpOyB9CisgICAgYm9vbCBpc1NWR0ZvbnQoKSBjb25zdCB7IHJldHVy
biAhIW1fc3ZnRGF0YTsgfQorCisgICAgYm9vbCBpc0N1c3RvbUZvbnQoKSBjb25zdCB7IHJldHVy
biBtX2lzQ3VzdG9tRm9udDsgfQorICAgIGJvb2wgaXNMb2FkaW5nKCkgY29uc3QgeyByZXR1cm4g
bV9pc0xvYWRpbmc7IH0KKworI2lmbmRlZiBOREVCVUcKKyAgICBTdHJpbmcgZGVzY3JpcHRpb24o
KSBjb25zdDsKKyNlbmRpZgorCisjaWYgVVNFKEFQUEtJVCkKKyAgICBjb25zdCBTaW1wbGVGb250
RGF0YSogY29tcG9zaXRlRm9udFJlZmVyZW5jZUZvbnREYXRhKE5TRm9udCAqa2V5KSBjb25zdDsK
KyAgICBOU0ZvbnQqIGdldE5TRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fcGxhdGZvcm1EYXRhLm5z
Rm9udCgpOyB9CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKElPUykKKyAgICBDVEZvbnRSZWYgZ2V0
Q1RGb250KCkgY29uc3QgeyByZXR1cm4gbV9wbGF0Zm9ybURhdGEuZm9udCgpOyB9CisgICAgYm9v
bCBzaG91bGROb3RCZVVzZWRGb3JBcmFiaWMoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZE5vdEJl
VXNlZEZvckFyYWJpYzsgfTsKKyNlbmRpZgorI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIENGRGlj
dGlvbmFyeVJlZiBnZXRDRlN0cmluZ0F0dHJpYnV0ZXMoVHlwZXNldHRpbmdGZWF0dXJlcywgRm9u
dE9yaWVudGF0aW9uKSBjb25zdDsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFVT
RShIQVJGQlVaWikKKyAgICBib29sIGNhblJlbmRlckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNl
KGNvbnN0IFVDaGFyKiwgc2l6ZV90KSBjb25zdDsKKyNlbmRpZgorCisgICAgYm9vbCBhcHBseVRy
YW5zZm9ybXMoR2x5cGhCdWZmZXJHbHlwaCosIEdseXBoQnVmZmVyQWR2YW5jZSosIHNpemVfdCBn
bHlwaENvdW50LCBUeXBlc2V0dGluZ0ZlYXR1cmVzKSBjb25zdDsKKworI2lmIFBMQVRGT1JNKFdJ
TikKKyAgICBib29sIGlzU3lzdGVtRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1faXNTeXN0ZW1Gb250
OyB9CisgICAgU0NSSVBUX0ZPTlRQUk9QRVJUSUVTKiBzY3JpcHRGb250UHJvcGVydGllcygpIGNv
bnN0OworICAgIFNDUklQVF9DQUNIRSogc2NyaXB0Q2FjaGUoKSBjb25zdCB7IHJldHVybiAmbV9z
Y3JpcHRDYWNoZTsgfQorICAgIHN0YXRpYyB2b2lkIHNldFNob3VsZEFwcGx5TWFjQXNjZW50SGFj
ayhib29sKTsKKyAgICBzdGF0aWMgYm9vbCBzaG91bGRBcHBseU1hY0FzY2VudEhhY2soKTsKKyAg
ICBzdGF0aWMgZmxvYXQgYXNjZW50Q29uc2lkZXJpbmdNYWNBc2NlbnRIYWNrKGNvbnN0IFdDSEFS
KiwgZmxvYXQgYXNjZW50LCBmbG9hdCBkZXNjZW50KTsKKyNlbmRpZgorCitwcml2YXRlOgorICAg
IFNpbXBsZUZvbnREYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmLCBib29sIGlzQ3VzdG9tRm9u
dCA9IGZhbHNlLCBib29sIGlzTG9hZGluZyA9IGZhbHNlLCBib29sIGlzVGV4dE9yaWVudGF0aW9u
RmFsbGJhY2sgPSBmYWxzZSk7CisKKyAgICBTaW1wbGVGb250RGF0YShzdGQ6OnVuaXF1ZV9wdHI8
U1ZHRGF0YT4sIGZsb2F0IGZvbnRTaXplLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhl
dGljSXRhbGljKTsKKworICAgIHZvaWQgcGxhdGZvcm1Jbml0KCk7CisgICAgdm9pZCBwbGF0Zm9y
bUdseXBoSW5pdCgpOworICAgIHZvaWQgcGxhdGZvcm1DaGFyV2lkdGhJbml0KCk7CisgICAgdm9p
ZCBwbGF0Zm9ybURlc3Ryb3koKTsKKworICAgIHZvaWQgaW5pdENoYXJXaWR0aHMoKTsKKworICAg
IFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IGNyZWF0ZVNjYWxlZEZvbnREYXRhKGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYsIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdDsKKyAgICBQYXNzUmVmUHRy
PFNpbXBsZUZvbnREYXRhPiBwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZvbnREYXRhKGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYsIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdDsKKworICAgIHZvaWQgcmVtb3Zl
RnJvbVN5c3RlbUZhbGxiYWNrQ2FjaGUoKTsKKworI2lmIFBMQVRGT1JNKFdJTikKKyAgICB2b2lk
IGluaXRHRElGb250KCk7CisgICAgdm9pZCBwbGF0Zm9ybUNvbW1vbkRlc3Ryb3koKTsKKyAgICBG
bG9hdFJlY3QgYm91bmRzRm9yR0RJR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0OworICAgIGZsb2F0
IHdpZHRoRm9yR0RJR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0OworI2VuZGlmCisKKyNpZiBVU0Uo
Q0cpCisgICAgYm9vbCBjYW5Vc2VGYXN0R2x5cGhBZHZhbmNlR2V0dGVyKEdseXBoIGdseXBoLCBD
R1NpemUmIGFkdmFuY2UsIGJvb2wmIHBvcHVsYXRlZEFkdmFuY2UpIGNvbnN0OworICAgIENHRm9u
dFJlbmRlcmluZ1N0eWxlIHJlbmRlcmluZ1N0eWxlKCkgY29uc3Q7CisgICAgYm9vbCBhZHZhbmNl
Rm9yQ29sb3JCaXRtYXBGb250KEdseXBoLCBDR1NpemUmIHJlc3VsdCkgY29uc3Q7IC8vIFJldHVy
bnMgdHJ1ZSBpZiB0aGUgZm9udCBpcyBhIGNvbG9yIGJpdG1hcCBmb250CisjZW5kaWYKKworICAg
IEZvbnRNZXRyaWNzIG1fZm9udE1ldHJpY3M7CisgICAgZmxvYXQgbV9tYXhDaGFyV2lkdGg7Cisg
ICAgZmxvYXQgbV9hdmdDaGFyV2lkdGg7CisKKyAgICBGb250UGxhdGZvcm1EYXRhIG1fcGxhdGZv
cm1EYXRhOworICAgIHN0ZDo6dW5pcXVlX3B0cjxTVkdEYXRhPiBtX3N2Z0RhdGE7CisKKyAgICBt
dXRhYmxlIFJlZlB0cjxHbHlwaFBhZ2U+IG1fZ2x5cGhQYWdlWmVybzsKKyAgICBtdXRhYmxlIEhh
c2hNYXA8dW5zaWduZWQsIFJlZlB0cjxHbHlwaFBhZ2U+PiBtX2dseXBoUGFnZXM7CisgICAgbXV0
YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8R2x5cGhNZXRyaWNzTWFwPEZsb2F0UmVjdD4+IG1fZ2x5cGhU
b0JvdW5kc01hcDsKKyAgICBtdXRhYmxlIEdseXBoTWV0cmljc01hcDxmbG9hdD4gbV9nbHlwaFRv
V2lkdGhNYXA7CisKKyAgICBib29sIG1fdHJlYXRBc0ZpeGVkUGl0Y2g7CisgICAgYm9vbCBtX2lz
Q3VzdG9tRm9udDsgIC8vIFdoZXRoZXIgb3Igbm90IHdlIGFyZSBjdXN0b20gZm9udCBsb2FkZWQg
dmlhIEBmb250LWZhY2UKKyAgICBib29sIG1faXNMb2FkaW5nOyAvLyBXaGV0aGVyIG9yIG5vdCB0
aGlzIGN1c3RvbSBmb250IGlzIHN0aWxsIGluIHRoZSBhY3Qgb2YgbG9hZGluZy4KKworICAgIGJv
b2wgbV9pc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrOworICAgIGJvb2wgbV9pc0Jyb2tlbklkZW9n
cmFwaEZhbGxiYWNrOworCisgICAgYm9vbCBtX2lzVXNlZEluU3lzdGVtRmFsbGJhY2tDYWNoZSB7
IGZhbHNlIH07CisKKyAgICBtdXRhYmxlIFJlZlB0cjxPcGVuVHlwZU1hdGhEYXRhPiBtX21hdGhE
YXRhOworI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKKyAgICBSZWZQdHI8T3BlblR5cGVW
ZXJ0aWNhbERhdGE+IG1fdmVydGljYWxEYXRhOworI2VuZGlmCisgICAgYm9vbCBtX2hhc1ZlcnRp
Y2FsR2x5cGhzOworCisgICAgR2x5cGggbV9zcGFjZUdseXBoOworICAgIGZsb2F0IG1fc3BhY2VX
aWR0aDsKKyAgICBHbHlwaCBtX3plcm9HbHlwaDsKKyAgICBmbG9hdCBtX2FkanVzdGVkU3BhY2VX
aWR0aDsKKworICAgIEdseXBoIG1femVyb1dpZHRoU3BhY2VHbHlwaDsKKworICAgIHN0cnVjdCBE
ZXJpdmVkRm9udERhdGEgeworICAgICAgICBleHBsaWNpdCBEZXJpdmVkRm9udERhdGEoYm9vbCBj
dXN0b20pCisgICAgICAgICAgICA6IGZvckN1c3RvbUZvbnQoY3VzdG9tKQorICAgICAgICB7Cisg
ICAgICAgIH0KKyAgICAgICAgfkRlcml2ZWRGb250RGF0YSgpOworCisgICAgICAgIGJvb2wgZm9y
Q3VzdG9tRm9udDsKKyAgICAgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBzbWFsbENhcHM7Cisg
ICAgICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gZW1waGFzaXNNYXJrOworICAgICAgICBSZWZQ
dHI8U2ltcGxlRm9udERhdGE+IGJyb2tlbklkZW9ncmFwaDsKKyAgICAgICAgUmVmUHRyPFNpbXBs
ZUZvbnREYXRhPiB2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb247CisgICAgICAgIFJlZlB0cjxTaW1w
bGVGb250RGF0YT4gdXByaWdodE9yaWVudGF0aW9uOworICAgICAgICBSZWZQdHI8U2ltcGxlRm9u
dERhdGE+IG5vblN5bnRoZXRpY0l0YWxpYzsKKyNpZiBVU0UoQVBQS0lUKQorICAgICAgICBIYXNo
TWFwPE5TRm9udCosIFJlZlB0cjxTaW1wbGVGb250RGF0YT4+IGNvbXBvc2l0ZUZvbnRSZWZlcmVu
Y2VzOworI2VuZGlmCisgICAgfTsKKworICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPERlcml2
ZWRGb250RGF0YT4gbV9kZXJpdmVkRm9udERhdGE7CisKKyNpZiBVU0UoQ0cpIHx8IFVTRShDQUlS
TykKKyAgICBmbG9hdCBtX3N5bnRoZXRpY0JvbGRPZmZzZXQ7CisjZW5kaWYKKworI2lmIFBMQVRG
T1JNKENPQ09BKQorICAgIG11dGFibGUgSGFzaE1hcDx1bnNpZ25lZCwgUmV0YWluUHRyPENGRGlj
dGlvbmFyeVJlZj4+IG1fQ0ZTdHJpbmdBdHRyaWJ1dGVzOworI2VuZGlmCisKKyNpZiBQTEFURk9S
TShDT0NPQSkgfHwgVVNFKEhBUkZCVVpaKQorICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPEhh
c2hNYXA8U3RyaW5nLCBib29sPj4gbV9jb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZVN1cHBvcnQ7
CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKFdJTikKKyAgICBib29sIG1faXNTeXN0ZW1Gb250Owor
ICAgIG11dGFibGUgU0NSSVBUX0NBQ0hFIG1fc2NyaXB0Q2FjaGU7CisgICAgbXV0YWJsZSBTQ1JJ
UFRfRk9OVFBST1BFUlRJRVMqIG1fc2NyaXB0Rm9udFByb3BlcnRpZXM7CisjZW5kaWYKKyNpZiBQ
TEFURk9STShJT1MpCisgICAgYm9vbCBtX3Nob3VsZE5vdEJlVXNlZEZvckFyYWJpYzsKKyNlbmRp
ZgorfTsKKworQUxXQVlTX0lOTElORSBGbG9hdFJlY3QgU2ltcGxlRm9udERhdGE6OmJvdW5kc0Zv
ckdseXBoKEdseXBoIGdseXBoKSBjb25zdAoreworICAgIGlmIChpc1plcm9XaWR0aFNwYWNlR2x5
cGgoZ2x5cGgpKQorICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisKKyAgICBGbG9hdFJlY3Qg
Ym91bmRzOworICAgIGlmIChtX2dseXBoVG9Cb3VuZHNNYXApIHsKKyAgICAgICAgYm91bmRzID0g
bV9nbHlwaFRvQm91bmRzTWFwLT5tZXRyaWNzRm9yR2x5cGgoZ2x5cGgpOworICAgICAgICBpZiAo
Ym91bmRzLndpZHRoKCkgIT0gY0dseXBoU2l6ZVVua25vd24pCisgICAgICAgICAgICByZXR1cm4g
Ym91bmRzOworICAgIH0KKworICAgIGJvdW5kcyA9IHBsYXRmb3JtQm91bmRzRm9yR2x5cGgoZ2x5
cGgpOworICAgIGlmICghbV9nbHlwaFRvQm91bmRzTWFwKQorICAgICAgICBtX2dseXBoVG9Cb3Vu
ZHNNYXAgPSBzdGQ6Om1ha2VfdW5pcXVlPEdseXBoTWV0cmljc01hcDxGbG9hdFJlY3Q+PigpOwor
ICAgIG1fZ2x5cGhUb0JvdW5kc01hcC0+c2V0TWV0cmljc0ZvckdseXBoKGdseXBoLCBib3VuZHMp
OworICAgIHJldHVybiBib3VuZHM7Cit9CisKK0FMV0FZU19JTkxJTkUgZmxvYXQgU2ltcGxlRm9u
dERhdGE6OndpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0Cit7CisgICAgaWYgKGlzWmVy
b1dpZHRoU3BhY2VHbHlwaChnbHlwaCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgZmxvYXQg
d2lkdGggPSBtX2dseXBoVG9XaWR0aE1hcC5tZXRyaWNzRm9yR2x5cGgoZ2x5cGgpOworICAgIGlm
ICh3aWR0aCAhPSBjR2x5cGhTaXplVW5rbm93bikKKyAgICAgICAgcmV0dXJuIHdpZHRoOworCisg
ICAgaWYgKGlzU1ZHRm9udCgpKQorICAgICAgICB3aWR0aCA9IG1fc3ZnRGF0YS0+d2lkdGhGb3JT
VkdHbHlwaChnbHlwaCwgbV9wbGF0Zm9ybURhdGEuc2l6ZSgpKTsKKyNpZiBFTkFCTEUoT1BFTlRZ
UEVfVkVSVElDQUwpCisgICAgZWxzZSBpZiAobV92ZXJ0aWNhbERhdGEpCisjaWYgVVNFKENHKSB8
fCBVU0UoQ0FJUk8pCisgICAgICAgIHdpZHRoID0gbV92ZXJ0aWNhbERhdGEtPmFkdmFuY2VIZWln
aHQodGhpcywgZ2x5cGgpICsgbV9zeW50aGV0aWNCb2xkT2Zmc2V0OworI2Vsc2UKKyAgICAgICAg
d2lkdGggPSBtX3ZlcnRpY2FsRGF0YS0+YWR2YW5jZUhlaWdodCh0aGlzLCBnbHlwaCk7CisjZW5k
aWYKKyNlbmRpZgorICAgIGVsc2UKKyAgICAgICAgd2lkdGggPSBwbGF0Zm9ybVdpZHRoRm9yR2x5
cGgoZ2x5cGgpOworCisgICAgbV9nbHlwaFRvV2lkdGhNYXAuc2V0TWV0cmljc0ZvckdseXBoKGds
eXBoLCB3aWR0aCk7CisgICAgcmV0dXJuIHdpZHRoOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBTaW1wbGVGb250RGF0YV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udC5oCSh3b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDggKzIxLDggQEAK
ICAqCiAgKi8KIAotI2lmbmRlZiBTaW1wbGVGb250RGF0YV9oCi0jZGVmaW5lIFNpbXBsZUZvbnRE
YXRhX2gKKyNpZm5kZWYgRm9udF9oCisjZGVmaW5lIEZvbnRfaAogCiAjaW5jbHVkZSAiRm9udEJh
c2VsaW5lLmgiCiAjaW5jbHVkZSAiRm9udE1ldHJpY3MuaCIKQEAgLTY0LDM2ICs2NCwzNiBAQCBj
bGFzcyBTaGFyZWRCdWZmZXI7CiBzdHJ1Y3QgR2x5cGhEYXRhOwogc3RydWN0IFdpZHRoSXRlcmF0
b3I7CiAKLWVudW0gRm9udERhdGFWYXJpYW50IHsgQXV0b1ZhcmlhbnQsIE5vcm1hbFZhcmlhbnQs
IFNtYWxsQ2Fwc1ZhcmlhbnQsIEVtcGhhc2lzTWFya1ZhcmlhbnQsIEJyb2tlbklkZW9ncmFwaFZh
cmlhbnQgfTsKK2VudW0gRm9udFZhcmlhbnQgeyBBdXRvVmFyaWFudCwgTm9ybWFsVmFyaWFudCwg
U21hbGxDYXBzVmFyaWFudCwgRW1waGFzaXNNYXJrVmFyaWFudCwgQnJva2VuSWRlb2dyYXBoVmFy
aWFudCB9OwogZW51bSBQaXRjaCB7IFVua25vd25QaXRjaCwgRml4ZWRQaXRjaCwgVmFyaWFibGVQ
aXRjaCB9OwogCi1jbGFzcyBTaW1wbGVGb250RGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPFNpbXBs
ZUZvbnREYXRhPiB7CitjbGFzcyBGb250IDogcHVibGljIFJlZkNvdW50ZWQ8Rm9udD4gewogcHVi
bGljOgogICAgIGNsYXNzIFNWR0RhdGEgewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKICAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgflNWR0RhdGEoKSB7IH0KIAotICAgICAg
ICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZUZvbnREYXRhKFNpbXBsZUZvbnREYXRhKiwgZmxvYXQg
Zm9udFNpemUpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVGb250KEZvbnQq
LCBmbG9hdCBmb250U2l6ZSkgPSAwOwogICAgICAgICB2aXJ0dWFsIGZsb2F0IHdpZHRoRm9yU1ZH
R2x5cGgoR2x5cGgsIGZsb2F0IGZvbnRTaXplKSBjb25zdCA9IDA7Ci0gICAgICAgIHZpcnR1YWwg
Ym9vbCBmaWxsU1ZHR2x5cGhQYWdlKEdseXBoUGFnZSosIHVuc2lnbmVkIG9mZnNldCwgdW5zaWdu
ZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IFNp
bXBsZUZvbnREYXRhKikgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIGJvb2wgZmlsbFNWR0ds
eXBoUGFnZShHbHlwaFBhZ2UqLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNo
YXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBGb250KikgY29uc3QgPSAw
OwogICAgIH07CiAKICAgICAvLyBVc2VkIHRvIGNyZWF0ZSBwbGF0Zm9ybSBmb250cy4KLSAgICBz
dGF0aWMgUmVmPFNpbXBsZUZvbnREYXRhPiBjcmVhdGUoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYg
cGxhdGZvcm1EYXRhLCBib29sIGlzQ3VzdG9tRm9udCA9IGZhbHNlLCBib29sIGlzTG9hZGluZyA9
IGZhbHNlLCBib29sIGlzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2sgPSBmYWxzZSkKKyAgICBzdGF0
aWMgUmVmPEZvbnQ+IGNyZWF0ZShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEs
IGJvb2wgaXNDdXN0b21Gb250ID0gZmFsc2UsIGJvb2wgaXNMb2FkaW5nID0gZmFsc2UsIGJvb2wg
aXNUZXh0T3JpZW50YXRpb25GYWxsYmFjayA9IGZhbHNlKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgU2ltcGxlRm9udERhdGEocGxhdGZvcm1EYXRhLCBpc0N1c3RvbUZvbnQs
IGlzTG9hZGluZywgaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaykpOworICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBGb250KHBsYXRmb3JtRGF0YSwgaXNDdXN0b21Gb250LCBpc0xvYWRpbmcs
IGlzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2spKTsKICAgICB9CiAKICAgICAvLyBVc2VkIHRvIGNy
ZWF0ZSBTVkcgRm9udHMuCi0gICAgc3RhdGljIFJlZjxTaW1wbGVGb250RGF0YT4gY3JlYXRlKHN0
ZDo6dW5pcXVlX3B0cjxTVkdEYXRhPiBzdmdEYXRhLCBmbG9hdCBmb250U2l6ZSwgYm9vbCBzeW50
aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYykKKyAgICBzdGF0aWMgUmVmPEZvbnQ+IGNy
ZWF0ZShzdGQ6OnVuaXF1ZV9wdHI8U1ZHRGF0YT4gc3ZnRGF0YSwgZmxvYXQgZm9udFNpemUsIGJv
b2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpCiAgICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBTaW1wbGVGb250RGF0YShXVEY6Om1vdmUoc3ZnRGF0YSksIGZv
bnRTaXplLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMpKTsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgRm9udChXVEY6Om1vdmUoc3ZnRGF0YSksIGZvbnRTaXplLCBzeW50aGV0
aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMpKTsKICAgICB9CiAKLSAgICB+U2ltcGxlRm9udERhdGEo
KTsKKyAgICB+Rm9udCgpOwogCi0gICAgc3RhdGljIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBzeXN0
ZW1GYWxsYmFjaygpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgU2ltcGxlRm9udERh
dGEqPigtMSk7IH0KKyAgICBzdGF0aWMgY29uc3QgRm9udCogc3lzdGVtRmFsbGJhY2soKSB7IHJl
dHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IEZvbnQqPigtMSk7IH0KIAogICAgIGNvbnN0IEZv
bnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fcGxhdGZvcm1E
YXRhOyB9CiAgICAgY29uc3QgT3BlblR5cGVNYXRoRGF0YSogbWF0aERhdGEoKSBjb25zdDsKQEAg
LTEwMSwzMCArMTAxLDMwIEBAIHB1YmxpYzoKICAgICBjb25zdCBPcGVuVHlwZVZlcnRpY2FsRGF0
YSogdmVydGljYWxEYXRhKCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0aWNhbERhdGEuZ2V0KCk7IH0K
ICNlbmRpZgogCi0gICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gc21hbGxDYXBzRm9udERh
dGEoY29uc3QgRm9udERlc2NyaXB0aW9uJikgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxTaW1wbGVG
b250RGF0YT4gZW1waGFzaXNNYXJrRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJikgY29u
c3Q7Ci0gICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gYnJva2VuSWRlb2dyYXBoRm9udERh
dGEoKSBjb25zdDsKLSAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBub25TeW50aGV0aWNJ
dGFsaWNGb250RGF0YSgpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8Rm9udD4gc21hbGxDYXBzRm9u
dChjb25zdCBGb250RGVzY3JpcHRpb24mKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPEZvbnQ+IGVt
cGhhc2lzTWFya0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJikgY29uc3Q7CisgICAgUGFzc1Jl
ZlB0cjxGb250PiBicm9rZW5JZGVvZ3JhcGhGb250KCkgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxG
b250PiBub25TeW50aGV0aWNJdGFsaWNGb250KCkgY29uc3Q7CiAKLSAgICBQYXNzUmVmUHRyPFNp
bXBsZUZvbnREYXRhPiB2YXJpYW50Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNj
cmlwdGlvbiwgRm9udERhdGFWYXJpYW50IHZhcmlhbnQpIGNvbnN0CisgICAgUGFzc1JlZlB0cjxG
b250PiB2YXJpYW50Rm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250
VmFyaWFudCB2YXJpYW50KSBjb25zdAogICAgIHsKICAgICAgICAgc3dpdGNoICh2YXJpYW50KSB7
CiAgICAgICAgIGNhc2UgU21hbGxDYXBzVmFyaWFudDoKLSAgICAgICAgICAgIHJldHVybiBzbWFs
bENhcHNGb250RGF0YShkZXNjcmlwdGlvbik7CisgICAgICAgICAgICByZXR1cm4gc21hbGxDYXBz
Rm9udChkZXNjcmlwdGlvbik7CiAgICAgICAgIGNhc2UgRW1waGFzaXNNYXJrVmFyaWFudDoKLSAg
ICAgICAgICAgIHJldHVybiBlbXBoYXNpc01hcmtGb250RGF0YShkZXNjcmlwdGlvbik7CisgICAg
ICAgICAgICByZXR1cm4gZW1waGFzaXNNYXJrRm9udChkZXNjcmlwdGlvbik7CiAgICAgICAgIGNh
c2UgQnJva2VuSWRlb2dyYXBoVmFyaWFudDoKLSAgICAgICAgICAgIHJldHVybiBicm9rZW5JZGVv
Z3JhcGhGb250RGF0YSgpOworICAgICAgICAgICAgcmV0dXJuIGJyb2tlbklkZW9ncmFwaEZvbnQo
KTsKICAgICAgICAgY2FzZSBBdXRvVmFyaWFudDoKICAgICAgICAgY2FzZSBOb3JtYWxWYXJpYW50
OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgIHJldHVybiBjb25zdF9jYXN0PFNpbXBsZUZvbnREYXRhKj4odGhpcyk7
CisgICAgICAgIHJldHVybiBjb25zdF9jYXN0PEZvbnQqPih0aGlzKTsKICAgICB9CiAKLSAgICBQ
YXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiB2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250RGF0
YSgpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IHVwcmlnaHRPcmllbnRh
dGlvbkZvbnREYXRhKCkgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxGb250PiB2ZXJ0aWNhbFJpZ2h0
T3JpZW50YXRpb25Gb250KCkgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxGb250PiB1cHJpZ2h0T3Jp
ZW50YXRpb25Gb250KCkgY29uc3Q7CiAKICAgICBib29sIGhhc1ZlcnRpY2FsR2x5cGhzKCkgY29u
c3QgeyByZXR1cm4gbV9oYXNWZXJ0aWNhbEdseXBoczsgfQogICAgIGJvb2wgaXNUZXh0T3JpZW50
YXRpb25GYWxsYmFjaygpIGNvbnN0IHsgcmV0dXJuIG1faXNUZXh0T3JpZW50YXRpb25GYWxsYmFj
azsgfQpAQCAtMTY3LDcgKzE2Nyw3IEBAIHB1YmxpYzoKICAgICBHbHlwaERhdGEgZ2x5cGhEYXRh
Rm9yQ2hhcmFjdGVyKFVDaGFyMzIpIGNvbnN0OwogICAgIEdseXBoIGdseXBoRm9yQ2hhcmFjdGVy
KFVDaGFyMzIpIGNvbnN0OwogCi0gICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBzeXN0ZW1GYWxs
YmFja0ZvbnREYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYs
IGJvb2wgaXNGb3JQbGF0Zm9ybUZvbnQpIGNvbnN0OworICAgIFJlZlB0cjxGb250PiBzeXN0ZW1G
YWxsYmFja0ZvbnRGb3JDaGFyYWN0ZXIoVUNoYXIzMiwgY29uc3QgRm9udERlc2NyaXB0aW9uJiwg
Ym9vbCBpc0ZvclBsYXRmb3JtRm9udCkgY29uc3Q7CiAKICAgICBjb25zdCBHbHlwaFBhZ2UqIGds
eXBoUGFnZSh1bnNpZ25lZCBwYWdlTnVtYmVyKSBjb25zdDsKIApAQCAtMTg1LDcgKzE4NSw3IEBA
IHB1YmxpYzoKICNlbmRpZgogCiAjaWYgVVNFKEFQUEtJVCkKLSAgICBjb25zdCBTaW1wbGVGb250
RGF0YSogY29tcG9zaXRlRm9udFJlZmVyZW5jZUZvbnREYXRhKE5TRm9udCAqa2V5KSBjb25zdDsK
KyAgICBjb25zdCBGb250KiBjb21wb3NpdGVGb250UmVmZXJlbmNlRm9udChOU0ZvbnQgKmtleSkg
Y29uc3Q7CiAgICAgTlNGb250KiBnZXROU0ZvbnQoKSBjb25zdCB7IHJldHVybiBtX3BsYXRmb3Jt
RGF0YS5uc0ZvbnQoKTsgfQogI2VuZGlmCiAKQEAgLTIxMyw5ICsyMTMsOSBAQCBwdWJsaWM6CiAj
ZW5kaWYKIAogcHJpdmF0ZToKLSAgICBTaW1wbGVGb250RGF0YShjb25zdCBGb250UGxhdGZvcm1E
YXRhJiwgYm9vbCBpc0N1c3RvbUZvbnQgPSBmYWxzZSwgYm9vbCBpc0xvYWRpbmcgPSBmYWxzZSwg
Ym9vbCBpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrID0gZmFsc2UpOworICAgIEZvbnQoY29uc3Qg
Rm9udFBsYXRmb3JtRGF0YSYsIGJvb2wgaXNDdXN0b21Gb250ID0gZmFsc2UsIGJvb2wgaXNMb2Fk
aW5nID0gZmFsc2UsIGJvb2wgaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjayA9IGZhbHNlKTsKIAot
ICAgIFNpbXBsZUZvbnREYXRhKHN0ZDo6dW5pcXVlX3B0cjxTVkdEYXRhPiwgZmxvYXQgZm9udFNp
emUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpOworICAgIEZvbnQo
c3RkOjp1bmlxdWVfcHRyPFNWR0RhdGE+LCBmbG9hdCBmb250U2l6ZSwgYm9vbCBzeW50aGV0aWNC
b2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYyk7CiAKICAgICB2b2lkIHBsYXRmb3JtSW5pdCgpOwog
ICAgIHZvaWQgcGxhdGZvcm1HbHlwaEluaXQoKTsKQEAgLTIyNCw4ICsyMjQsOCBAQCBwcml2YXRl
OgogCiAgICAgdm9pZCBpbml0Q2hhcldpZHRocygpOwogCi0gICAgUGFzc1JlZlB0cjxTaW1wbGVG
b250RGF0YT4gY3JlYXRlU2NhbGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgZmxv
YXQgc2NhbGVGYWN0b3IpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IHBs
YXRmb3JtQ3JlYXRlU2NhbGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgZmxvYXQg
c2NhbGVGYWN0b3IpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8Rm9udD4gY3JlYXRlU2NhbGVkRm9u
dChjb25zdCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3Q7CisgICAg
UGFzc1JlZlB0cjxGb250PiBwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZvbnQoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0OwogCiAgICAgdm9pZCByZW1vdmVGcm9t
U3lzdGVtRmFsbGJhY2tDYWNoZSgpOwogCkBAIC0yODQsMTQgKzI4NCwxNCBAQCBwcml2YXRlOgog
ICAgICAgICB+RGVyaXZlZEZvbnREYXRhKCk7CiAKICAgICAgICAgYm9vbCBmb3JDdXN0b21Gb250
OwotICAgICAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IHNtYWxsQ2FwczsKLSAgICAgICAgUmVm
UHRyPFNpbXBsZUZvbnREYXRhPiBlbXBoYXNpc01hcms7Ci0gICAgICAgIFJlZlB0cjxTaW1wbGVG
b250RGF0YT4gYnJva2VuSWRlb2dyYXBoOwotICAgICAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+
IHZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbjsKLSAgICAgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRh
PiB1cHJpZ2h0T3JpZW50YXRpb247Ci0gICAgICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gbm9u
U3ludGhldGljSXRhbGljOworICAgICAgICBSZWZQdHI8Rm9udD4gc21hbGxDYXBzOworICAgICAg
ICBSZWZQdHI8Rm9udD4gZW1waGFzaXNNYXJrOworICAgICAgICBSZWZQdHI8Rm9udD4gYnJva2Vu
SWRlb2dyYXBoOworICAgICAgICBSZWZQdHI8Rm9udD4gdmVydGljYWxSaWdodE9yaWVudGF0aW9u
OworICAgICAgICBSZWZQdHI8Rm9udD4gdXByaWdodE9yaWVudGF0aW9uOworICAgICAgICBSZWZQ
dHI8Rm9udD4gbm9uU3ludGhldGljSXRhbGljOwogI2lmIFVTRShBUFBLSVQpCi0gICAgICAgIEhh
c2hNYXA8TlNGb250KiwgUmVmUHRyPFNpbXBsZUZvbnREYXRhPj4gY29tcG9zaXRlRm9udFJlZmVy
ZW5jZXM7CisgICAgICAgIEhhc2hNYXA8TlNGb250KiwgUmVmUHRyPEZvbnQ+PiBjb21wb3NpdGVG
b250UmVmZXJlbmNlczsKICNlbmRpZgogICAgIH07CiAKQEAgLTMxOSw3ICszMTksNyBAQCBwcml2
YXRlOgogI2VuZGlmCiB9OwogCi1BTFdBWVNfSU5MSU5FIEZsb2F0UmVjdCBTaW1wbGVGb250RGF0
YTo6Ym91bmRzRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CitBTFdBWVNfSU5MSU5FIEZsb2F0
UmVjdCBGb250Ojpib3VuZHNGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKIHsKICAgICBpZiAo
aXNaZXJvV2lkdGhTcGFjZUdseXBoKGdseXBoKSkKICAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgp
OwpAQCAtMzM4LDcgKzMzOCw3IEBAIEFMV0FZU19JTkxJTkUgRmxvYXRSZWN0IFNpbXBsZUZvbnRE
YXRhOjoKICAgICByZXR1cm4gYm91bmRzOwogfQogCi1BTFdBWVNfSU5MSU5FIGZsb2F0IFNpbXBs
ZUZvbnREYXRhOjp3aWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAorQUxXQVlTX0lOTElO
RSBmbG9hdCBGb250Ojp3aWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAogewogICAgIGlm
IChpc1plcm9XaWR0aFNwYWNlR2x5cGgoZ2x5cGgpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTM2
Niw0ICszNjYsNCBAQCBBTFdBWVNfSU5MSU5FIGZsb2F0IFNpbXBsZUZvbnREYXRhOjp3aWR0CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIFNpbXBsZUZvbnREYXRhX2gKKyNl
bmRpZiAvLyBGb250X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhY2hlLmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsMTQgKzUy
LDE0IEBACiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKIC8vIEZJWE1FOiBXZSBtYXkg
YmUgYWJsZSB0byBzaW1wbGlmeSB0aGlzIGNvZGUgdXNpbmcgQysrMTEgdGhyZWFkaW5nIHByaW1p
dGl2ZXMsIGluY2x1ZGluZyBzdGQ6OmNhbGxfb25jZSgpLgotc3RhdGljIHB0aHJlYWRfbXV0ZXhf
dCBmb250RGF0YUxvY2s7CitzdGF0aWMgcHRocmVhZF9tdXRleF90IGZvbnRMb2NrOwogCiBzdGF0
aWMgdm9pZCBpbml0Rm9udENhY2hlTG9ja09uY2UoKQogewogICAgIHB0aHJlYWRfbXV0ZXhhdHRy
X3QgbXV0ZXhBdHRyaWJ1dGU7CiAgICAgcHRocmVhZF9tdXRleGF0dHJfaW5pdCgmbXV0ZXhBdHRy
aWJ1dGUpOwogICAgIHB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5cGUoJm11dGV4QXR0cmlidXRlLCBQ
VEhSRUFEX01VVEVYX1JFQ1VSU0lWRSk7Ci0gICAgcHRocmVhZF9tdXRleF9pbml0KCZmb250RGF0
YUxvY2ssICZtdXRleEF0dHJpYnV0ZSk7CisgICAgcHRocmVhZF9tdXRleF9pbml0KCZmb250TG9j
aywgJm11dGV4QXR0cmlidXRlKTsKICAgICBwdGhyZWFkX211dGV4YXR0cl9kZXN0cm95KCZtdXRl
eEF0dHJpYnV0ZSk7CiB9CiAKQEAgLTcxLDEzICs3MSwxMyBAQCBwdWJsaWM6CiAgICAgRm9udExv
Y2tlcigpCiAgICAgewogICAgICAgICBwdGhyZWFkX29uY2UoJmluaXRGb250TG9ja0NvbnRyb2ws
IGluaXRGb250Q2FjaGVMb2NrT25jZSk7Ci0gICAgICAgIGludCBsb2NrY29kZSA9IHB0aHJlYWRf
bXV0ZXhfbG9jaygmZm9udERhdGFMb2NrKTsKLSAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRV9V
TlVTRUQobG9ja2NvZGUsICFsb2NrY29kZSwgImZvbnREYXRhTG9jayBsb2NrIGZhaWxlZCB3aXRo
IGNvZGU6JWQiLCBsb2NrY29kZSk7ICAgIAorICAgICAgICBpbnQgbG9ja2NvZGUgPSBwdGhyZWFk
X211dGV4X2xvY2soJmZvbnRMb2NrKTsKKyAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRV9VTlVT
RUQobG9ja2NvZGUsICFsb2NrY29kZSwgImZvbnRMb2NrIGxvY2sgZmFpbGVkIHdpdGggY29kZTol
ZCIsIGxvY2tjb2RlKTsgICAgCiAgICAgfQogICAgIH5Gb250TG9ja2VyKCkKICAgICB7Ci0gICAg
ICAgIGludCBsb2NrY29kZSA9IHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZmb250RGF0YUxvY2spOwot
ICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFX1VOVVNFRChsb2NrY29kZSwgIWxvY2tjb2RlLCAi
Zm9udERhdGFMb2NrIHVubG9jayBmYWlsZWQgd2l0aCBjb2RlOiVkIiwgbG9ja2NvZGUpOworICAg
ICAgICBpbnQgbG9ja2NvZGUgPSBwdGhyZWFkX211dGV4X3VubG9jaygmZm9udExvY2spOworICAg
ICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFX1VOVVNFRChsb2NrY29kZSwgIWxvY2tjb2RlLCAiZm9u
dExvY2sgdW5sb2NrIGZhaWxlZCB3aXRoIGNvZGU6JWQiLCBsb2NrY29kZSk7CiAgICAgfQogfTsK
ICNlbmRpZiAvLyBQTEFURk9STShJT1MpCkBAIC0zNTksNyArMzU5LDcgQEAgc3RydWN0IEZvbnRE
YXRhQ2FjaGVLZXlUcmFpdHMgOiBXVEY6OkdlbgogICAgIH0KIH07CiAKLXR5cGVkZWYgSGFzaE1h
cDxGb250UGxhdGZvcm1EYXRhLCBSZWZQdHI8U2ltcGxlRm9udERhdGE+LCBGb250RGF0YUNhY2hl
S2V5SGFzaCwgRm9udERhdGFDYWNoZUtleVRyYWl0cz4gRm9udERhdGFDYWNoZTsKK3R5cGVkZWYg
SGFzaE1hcDxGb250UGxhdGZvcm1EYXRhLCBSZWZQdHI8Rm9udD4sIEZvbnREYXRhQ2FjaGVLZXlI
YXNoLCBGb250RGF0YUNhY2hlS2V5VHJhaXRzPiBGb250RGF0YUNhY2hlOwogCiBzdGF0aWMgRm9u
dERhdGFDYWNoZSYgY2FjaGVkRm9udHMoKQogewpAQCAtMzc5LDcgKzM3OSw3IEBAIGNvbnN0IGlu
dCBjVGFyZ2V0SW5hY3RpdmVGb250RGF0YSA9IDIwMDsKIGNvbnN0IGludCBjTWF4VW5kZXJNZW1v
cnlQcmVzc3VyZUluYWN0aXZlRm9udERhdGEgPSA1MDsKIGNvbnN0IGludCBjVGFyZ2V0VW5kZXJN
ZW1vcnlQcmVzc3VyZUluYWN0aXZlRm9udERhdGEgPSAzMDsKIAotUmVmUHRyPFNpbXBsZUZvbnRE
YXRhPiBGb250Q2FjaGU6OmZvbnRGb3JGYW1pbHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5LCBib29sIGNoZWNraW5nQWx0
ZXJuYXRlTmFtZSkKK1JlZlB0cjxGb250PiBGb250Q2FjaGU6OmZvbnRGb3JGYW1pbHkoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFt
aWx5LCBib29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSkKIHsKICAgICBpZiAoIW1fcHVyZ2VUaW1l
ci5pc0FjdGl2ZSgpKQogICAgICAgICBtX3B1cmdlVGltZXIuc3RhcnRPbmVTaG90KHN0ZDo6Y2hy
b25vOjptaWxsaXNlY29uZHM6Onplcm8oKSk7CkBAIC0zOTEsNyArMzkxLDcgQEAgUmVmUHRyPFNp
bXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmZvbnRGbwogICAgIHJldHVybiBmb250Rm9yUGxhdGZv
cm1EYXRhKCpwbGF0Zm9ybURhdGEpOwogfQogCi1SZWY8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNo
ZTo6Zm9udEZvclBsYXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURh
dGEpCitSZWY8Rm9udD4gRm9udENhY2hlOjpmb250Rm9yUGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQ
bGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSkKIHsKICNpZiBQTEFURk9STShJT1MpCiAgICAgRm9u
dExvY2tlciBmb250TG9ja2VyOwpAQCAtMzk5LDcgKzM5OSw3IEBAIFJlZjxTaW1wbGVGb250RGF0
YT4gRm9udENhY2hlOjpmb250Rm9yUGwKICAgICAKICAgICBhdXRvIGFkZFJlc3VsdCA9IGNhY2hl
ZEZvbnRzKCkuYWRkKHBsYXRmb3JtRGF0YSwgbnVsbHB0cik7CiAgICAgaWYgKGFkZFJlc3VsdC5p
c05ld0VudHJ5KQotICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gU2ltcGxlRm9u
dERhdGE6OmNyZWF0ZShwbGF0Zm9ybURhdGEpOworICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3It
PnZhbHVlID0gRm9udDo6Y3JlYXRlKHBsYXRmb3JtRGF0YSk7CiAKICAgICByZXR1cm4gKmFkZFJl
c3VsdC5pdGVyYXRvci0+dmFsdWU7CiB9CkBAIC00MTYsNyArNDE2LDcgQEAgdm9pZCBGb250Q2Fj
aGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YUlmTgogCiAgICAgaWYgKGNhY2hlZEZvbnRzKCkuc2l6
ZSgpIDwgaW5hY3RpdmVGb250RGF0YUxpbWl0KQogICAgICAgICByZXR1cm47Ci0gICAgaW50IGlu
YWN0aXZlQ291bnQgPSBpbmFjdGl2ZUZvbnREYXRhQ291bnQoKTsKKyAgICBpbnQgaW5hY3RpdmVD
b3VudCA9IGluYWN0aXZlRm9udENvdW50KCk7CiAgICAgaWYgKGluYWN0aXZlQ291bnQgPD0gaW5h
Y3RpdmVGb250RGF0YUxpbWl0KQogICAgICAgICByZXR1cm47CiAKQEAgLTQzNCw3ICs0MzQsNyBA
QCB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhKGluCiAjZW5kaWYKIAogICAg
IHdoaWxlIChwdXJnZUNvdW50KSB7Ci0gICAgICAgIFZlY3RvcjxSZWZQdHI8U2ltcGxlRm9udERh
dGE+LCAyMD4gZm9udHNUb0RlbGV0ZTsKKyAgICAgICAgVmVjdG9yPFJlZlB0cjxGb250PiwgMjA+
IGZvbnRzVG9EZWxldGU7CiAgICAgICAgIGZvciAoYXV0byYgZm9udCA6IGNhY2hlZEZvbnRzKCku
dmFsdWVzKCkpIHsKICAgICAgICAgICAgIGlmICghZm9udC0+aGFzT25lUmVmKCkpCiAgICAgICAg
ICAgICAgICAgY29udGludWU7CkBAIC00NjYsOCArNDY2LDggQEAgdm9pZCBGb250Q2FjaGU6OnB1
cmdlSW5hY3RpdmVGb250RGF0YShpbgogICAgICAgICAgICAgaWYgKHZlcnRpY2FsRGF0YSkKICAg
ICAgICAgICAgICAgICB2ZXJ0aWNhbERhdGEtPm1faW5Gb250Q2FjaGUgPSBmYWxzZTsKICAgICAg
ICAgfQotICAgICAgICBmb3IgKGF1dG8mIGZvbnREYXRhIDogY2FjaGVkRm9udHMoKS52YWx1ZXMo
KSkgewotICAgICAgICAgICAgYXV0byogdmVydGljYWxEYXRhID0gY29uc3RfY2FzdDxPcGVuVHlw
ZVZlcnRpY2FsRGF0YSo+KGZvbnREYXRhLT52ZXJ0aWNhbERhdGEoKSk7CisgICAgICAgIGZvciAo
YXV0byYgZm9udCA6IGNhY2hlZEZvbnRzKCkudmFsdWVzKCkpIHsKKyAgICAgICAgICAgIGF1dG8q
IHZlcnRpY2FsRGF0YSA9IGNvbnN0X2Nhc3Q8T3BlblR5cGVWZXJ0aWNhbERhdGEqPihmb250LT52
ZXJ0aWNhbERhdGEoKSk7CiAgICAgICAgICAgICBpZiAodmVydGljYWxEYXRhKQogICAgICAgICAg
ICAgICAgIHZlcnRpY2FsRGF0YS0+bV9pbkZvbnRDYWNoZSA9IHRydWU7CiAgICAgICAgIH0KQEAg
LTQ4MywxMiArNDgzLDEyIEBAIHZvaWQgRm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGEo
aW4KICNlbmRpZgogfQogCi1zaXplX3QgRm9udENhY2hlOjpmb250RGF0YUNvdW50KCkKK3NpemVf
dCBGb250Q2FjaGU6OmZvbnRDb3VudCgpCiB7CiAgICAgcmV0dXJuIGNhY2hlZEZvbnRzKCkuc2l6
ZSgpOwogfQogCi1zaXplX3QgRm9udENhY2hlOjppbmFjdGl2ZUZvbnREYXRhQ291bnQoKQorc2l6
ZV90IEZvbnRDYWNoZTo6aW5hY3RpdmVGb250Q291bnQoKQogewogI2lmIFBMQVRGT1JNKElPUykK
ICAgICBGb250TG9ja2VyIGZvbnRMb2NrZXI7CkBAIC01NTEsNyArNTUxLDcgQEAgdm9pZCBGb250
Q2FjaGU6OmludmFsaWRhdGUoKQogfQogCiAjaWYgIVBMQVRGT1JNKENPQ09BKQotUmVmUHRyPFNp
bXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OnNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYpCitSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpzaW1pbGFyRm9udChjb25z
dCBGb250RGVzY3JpcHRpb24mKQogewogICAgIHJldHVybiBudWxscHRyOwogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgJKHJldmlzaW9uIDE3
ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIGNsYXNzIEZvbnRDYXNjYWRlOwogY2xhc3Mg
Rm9udFBsYXRmb3JtRGF0YTsKIGNsYXNzIEZvbnRTZWxlY3RvcjsKIGNsYXNzIE9wZW5UeXBlVmVy
dGljYWxEYXRhOwotY2xhc3MgU2ltcGxlRm9udERhdGE7CitjbGFzcyBGb250OwogCiAjaWYgUExB
VEZPUk0oV0lOKQogI2lmIFVTRShJTUxBTkdfRk9OVF9MSU5LMikKQEAgLTExMSw3ICsxMTEsNyBA
QCBwdWJsaWM6CiAgICAgZnJpZW5kIEZvbnRDYWNoZSYgZm9udENhY2hlKCk7CiAKICAgICAvLyBU
aGlzIG1ldGhvZCBpcyBpbXBsZW1lbnRlZCBieSB0aGUgcGxhdGZvcm0uCi0gICAgUmVmUHRyPFNp
bXBsZUZvbnREYXRhPiBzeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiwgY29uc3QgU2ltcGxlRm9udERhdGEqIG9yaWdpbmFsRm9udERhdGEsIGJvb2wgaXNQ
bGF0Zm9ybUZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKTsKKyAgICBS
ZWZQdHI8Rm9udD4gc3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYsIGNvbnN0IEZvbnQqIG9yaWdpbmFsRm9udERhdGEsIGJvb2wgaXNQbGF0Zm9ybUZvbnQs
IGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKTsKIAogICAgIC8vIEFsc28gaW1w
bGVtZW50ZWQgYnkgdGhlIHBsYXRmb3JtLgogICAgIHZvaWQgcGxhdGZvcm1Jbml0KCk7CkBAIC0x
MjgsMTAgKzEyOCwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdldFRyYWl0c0luRmFtaWx5KGNv
bnN0IEF0b21pY1N0cmluZyYsIFZlY3Rvcjx1bnNpZ25lZD4mKTsKIAotICAgIFdFQkNPUkVfRVhQ
T1JUIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gZm9udEZvckZhbWlseShjb25zdCBGb250RGVzY3Jp
cHRpb24mLCBjb25zdCBBdG9taWNTdHJpbmcmLCBib29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSA9
IGZhbHNlKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWY8U2ltcGxlRm9udERhdGE+IGxhc3RSZXNv
cnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJik7Ci0gICAgV0VCQ09SRV9FWFBP
UlQgUmVmPFNpbXBsZUZvbnREYXRhPiBmb250Rm9yUGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0
Zm9ybURhdGEmKTsKLSAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IHNpbWlsYXJGb250UGxhdGZv
cm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpOworICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0
cjxGb250PiBmb250Rm9yRmFtaWx5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21p
Y1N0cmluZyYsIGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1lID0gZmFsc2UpOworICAgIFdFQkNP
UkVfRVhQT1JUIFJlZjxGb250PiBsYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYpOworICAgIFdFQkNPUkVfRVhQT1JUIFJlZjxGb250PiBmb250Rm9yUGxhdGZvcm1E
YXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsKKyAgICBSZWZQdHI8Rm9udD4gc2ltaWxhckZv
bnQoY29uc3QgRm9udERlc2NyaXB0aW9uJik7CiAKICAgICB2b2lkIGFkZENsaWVudChGb250U2Vs
ZWN0b3IqKTsKICAgICB2b2lkIHJlbW92ZUNsaWVudChGb250U2VsZWN0b3IqKTsKQEAgLTEzOSwx
MiArMTM5LDEyIEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBzaG9ydCBnZW5lcmF0aW9uKCk7CiAg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBpbnZhbGlkYXRlKCk7CiAKLSAgICBXRUJDT1JFX0VYUE9S
VCBzaXplX3QgZm9udERhdGFDb3VudCgpOwotICAgIFdFQkNPUkVfRVhQT1JUIHNpemVfdCBpbmFj
dGl2ZUZvbnREYXRhQ291bnQoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzaXplX3QgZm9udENvdW50
KCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc2l6ZV90IGluYWN0aXZlRm9udENvdW50KCk7CiAgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBwdXJnZUluYWN0aXZlRm9udERhdGEoaW50IGNvdW50ID0gSU5U
X01BWCk7CiAKICNpZiBQTEFURk9STShXSU4pCi0gICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBm
b250RGF0YUZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwg
Y29uc3QgTE9HRk9OVCYsIEF0b21pY1N0cmluZyYgb3V0Rm9udEZhbWlseU5hbWUpOworICAgIFJl
ZlB0cjxGb250PiBmb250RnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChjb25zdCBGb250RGVzY3Jp
cHRpb24mLCBjb25zdCBMT0dGT05UJiwgQXRvbWljU3RyaW5nJiBvdXRGb250RmFtaWx5TmFtZSk7
CiAjZW5kaWYKIAogI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKQEAgLTE3Myw3ICsxNzMs
NyBAQCBwcml2YXRlOgogICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIGltcGxlbWVudGVkIGJ5IGVh
Y2ggcGxhdGZvcm0uCiAjaWYgUExBVEZPUk0oSU9TKQogICAgIEZvbnRQbGF0Zm9ybURhdGEqIGdl
dEN1c3RvbUZhbGxiYWNrRm9udChjb25zdCBVSW50MzIsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYp
OwotICAgIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IGdldFN5c3RlbUZvbnRGYWxsYmFja0Zv
ckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgU2ltcGxlRm9udERhdGEq
LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCk7CisgICAgUGFzc1JlZlB0cjxG
b250PiBnZXRTeXN0ZW1Gb250RmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYsIGNvbnN0IEZvbnQqLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCk7
CiAjZW5kaWYKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4gY3JlYXRlRm9u
dFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9taWNTdHJpbmcm
IGZhbWlseSk7CiAKQEAgLTE4Miw3ICsxODIsNyBAQCBwcml2YXRlOgogI2lmIFBMQVRGT1JNKENP
Q09BKQogICAgIGZyaWVuZCBjbGFzcyBDb21wbGV4VGV4dENvbnRyb2xsZXI7CiAjZW5kaWYKLSAg
ICBmcmllbmQgY2xhc3MgU2ltcGxlRm9udERhdGE7CisgICAgZnJpZW5kIGNsYXNzIEZvbnQ7CiB9
OwogCiAvLyBHZXQgdGhlIGdsb2JhbCBmb250Q2FjaGUuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCShyZXZpc2lvbiAxNzg4NTcp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEyNCw4ICsxMjQsOCBAQCBGb250Q2FzY2FkZTo6Rm9udENhc2NhZGUo
Y29uc3QgRm9udERlc2NyCiB9CiAKIC8vIEZJWE1FOiBXZSBzaG91bGQgbWFrZSB0aGlzIGNvbnN0
cnVjdG9yIHBsYXRmb3JtLWluZGVwZW5kZW50LgotRm9udENhc2NhZGU6OkZvbnRDYXNjYWRlKGNv
bnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnREYXRhLCBib29sIGlzUHJpbnRlckZvbnQsIEZvbnRT
bW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmdNb2RlKQotICAgIDogbV9nbHlwaHMoRm9udEdseXBo
czo6Y3JlYXRlRm9yUGxhdGZvcm1Gb250KGZvbnREYXRhKSkKK0ZvbnRDYXNjYWRlOjpGb250Q2Fz
Y2FkZShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBmb250LCBib29sIGlzUHJpbnRlckZvbnQsIEZv
bnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmdNb2RlKQorICAgIDogbV9nbHlwaHMoRm9udEds
eXBoczo6Y3JlYXRlRm9yUGxhdGZvcm1Gb250KGZvbnQpKQogICAgICwgbV9sZXR0ZXJTcGFjaW5n
KDApCiAgICAgLCBtX3dvcmRTcGFjaW5nKDApCiAgICAgLCBtX3VzZUJhY2tzbGFzaEFzWWVuU3lt
Ym9sKGZhbHNlKQpAQCAtMTM0LDI3ICsxMzQsMjcgQEAgRm9udENhc2NhZGU6OkZvbnRDYXNjYWRl
KGNvbnN0IEZvbnRQbGF0ZgogICAgIG1fZm9udERlc2NyaXB0aW9uLnNldFVzZVByaW50ZXJGb250
KGlzUHJpbnRlckZvbnQpOwogICAgIG1fZm9udERlc2NyaXB0aW9uLnNldEZvbnRTbW9vdGhpbmco
Zm9udFNtb290aGluZ01vZGUpOwogI2lmIFBMQVRGT1JNKElPUykKLSAgICBtX2ZvbnREZXNjcmlw
dGlvbi5zZXRTcGVjaWZpZWRTaXplKENURm9udEdldFNpemUoZm9udERhdGEuZm9udCgpKSk7Ci0g
ICAgbV9mb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKENURm9udEdldFNpemUoZm9udERh
dGEuZm9udCgpKSk7Ci0gICAgbV9mb250RGVzY3JpcHRpb24uc2V0SXNJdGFsaWMoQ1RGb250R2V0
U3ltYm9saWNUcmFpdHMoZm9udERhdGEuZm9udCgpKSAmIGtDVEZvbnRUcmFpdEl0YWxpYyk7Ci0g
ICAgbV9mb250RGVzY3JpcHRpb24uc2V0V2VpZ2h0KChDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhm
b250RGF0YS5mb250KCkpICYga0NURm9udFRyYWl0Qm9sZCkgPyBGb250V2VpZ2h0Qm9sZCA6IEZv
bnRXZWlnaHROb3JtYWwpOworICAgIG1fZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUo
Q1RGb250R2V0U2l6ZShmb250LmZvbnQoKSkpOworICAgIG1fZm9udERlc2NyaXB0aW9uLnNldENv
bXB1dGVkU2l6ZShDVEZvbnRHZXRTaXplKGZvbnQuZm9udCgpKSk7CisgICAgbV9mb250RGVzY3Jp
cHRpb24uc2V0SXNJdGFsaWMoQ1RGb250R2V0U3ltYm9saWNUcmFpdHMoZm9udC5mb250KCkpICYg
a0NURm9udFRyYWl0SXRhbGljKTsKKyAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRXZWlnaHQoKENU
Rm9udEdldFN5bWJvbGljVHJhaXRzKGZvbnQuZm9udCgpKSAmIGtDVEZvbnRUcmFpdEJvbGQpID8g
Rm9udFdlaWdodEJvbGQgOiBGb250V2VpZ2h0Tm9ybWFsKTsKICNlbmRpZgogfQogCiAvLyBGSVhN
RTogV2Ugc2hvdWxkIG1ha2UgdGhpcyBjb25zdHJ1Y3RvciBwbGF0Zm9ybS1pbmRlcGVuZGVudC4K
ICNpZiBQTEFURk9STShJT1MpCi1Gb250Q2FzY2FkZTo6Rm9udENhc2NhZGUoY29uc3QgRm9udFBs
YXRmb3JtRGF0YSYgZm9udERhdGEsIFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPiBmb250U2VsZWN0
b3IpCi0gICAgOiBtX2dseXBocyhGb250R2x5cGhzOjpjcmVhdGVGb3JQbGF0Zm9ybUZvbnQoZm9u
dERhdGEpKQorRm9udENhc2NhZGU6OkZvbnRDYXNjYWRlKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEm
IGZvbnQsIFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPiBmb250U2VsZWN0b3IpCisgICAgOiBtX2ds
eXBocyhGb250R2x5cGhzOjpjcmVhdGVGb3JQbGF0Zm9ybUZvbnQoZm9udCkpCiAgICAgLCBtX2xl
dHRlclNwYWNpbmcoMCkKICAgICAsIG1fd29yZFNwYWNpbmcoMCkKICAgICAsIG1fdHlwZXNldHRp
bmdGZWF0dXJlcyhjb21wdXRlVHlwZXNldHRpbmdGZWF0dXJlcygpKQogewotICAgIENURm9udFJl
ZiBwcmltYXJ5Rm9udCA9IGZvbnREYXRhLmZvbnQoKTsKKyAgICBDVEZvbnRSZWYgcHJpbWFyeUZv
bnQgPSBmb250LmZvbnQoKTsKICAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXpl
KENURm9udEdldFNpemUocHJpbWFyeUZvbnQpKTsKICAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRD
b21wdXRlZFNpemUoQ1RGb250R2V0U2l6ZShwcmltYXJ5Rm9udCkpOwogICAgIG1fZm9udERlc2Ny
aXB0aW9uLnNldElzSXRhbGljKENURm9udEdldFN5bWJvbGljVHJhaXRzKHByaW1hcnlGb250KSAm
IGtDVEZvbnRUcmFpdEl0YWxpYyk7CiAgICAgbV9mb250RGVzY3JpcHRpb24uc2V0V2VpZ2h0KChD
VEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhwcmltYXJ5Rm9udCkgJiBrQ1RGb250VHJhaXRCb2xkKSA/
IEZvbnRXZWlnaHRCb2xkIDogRm9udFdlaWdodE5vcm1hbCk7Ci0gICAgbV9mb250RGVzY3JpcHRp
b24uc2V0VXNlUHJpbnRlckZvbnQoZm9udERhdGEuaXNQcmludGVyRm9udCgpKTsKKyAgICBtX2Zv
bnREZXNjcmlwdGlvbi5zZXRVc2VQcmludGVyRm9udChmb250LmlzUHJpbnRlckZvbnQoKSk7CiAg
ICAgbV9nbHlwaHMgPSByZXRyaWV2ZU9yQWRkQ2FjaGVkRm9udEdseXBocyhtX2ZvbnREZXNjcmlw
dGlvbiwgZm9udFNlbGVjdG9yLmdldCgpKTsKIH0KICNlbmRpZgpAQCAtMzcxLDcgKzM3MSw3IEBA
IHZvaWQgRm9udENhc2NhZGU6OmRyYXdFbXBoYXNpc01hcmtzKEdyYXAKICAgICAgICAgZHJhd0Vt
cGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChjb250ZXh0LCBydW4sIG1hcmssIHBvaW50LCBmcm9t
LCB0byk7CiB9CiAKLWZsb2F0IEZvbnRDYXNjYWRlOjp3aWR0aChjb25zdCBUZXh0UnVuJiBydW4s
IEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVy
ZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKK2Zsb2F0IEZvbnRDYXNjYWRlOjp3aWR0aChjb25z
dCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzLCBHbHlw
aE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAogewogICAgIENvZGVQYXRoIGNvZGVQYXRo
VG9Vc2UgPSBjb2RlUGF0aChydW4pOwogICAgIGlmIChjb2RlUGF0aFRvVXNlICE9IENvbXBsZXgp
IHsKQEAgLTM4OSw3ICszODksNyBAQCBmbG9hdCBGb250Q2FzY2FkZTo6d2lkdGgoY29uc3QgVGV4
dFJ1biYgCiAgICAgaWYgKGNhY2hlRW50cnkgJiYgIXN0ZDo6aXNuYW4oKmNhY2hlRW50cnkpKQog
ICAgICAgICByZXR1cm4gKmNhY2hlRW50cnk7CiAKLSAgICBIYXNoU2V0PGNvbnN0IFNpbXBsZUZv
bnREYXRhKj4gbG9jYWxGYWxsYmFja0ZvbnRzOworICAgIEhhc2hTZXQ8Y29uc3QgRm9udCo+IGxv
Y2FsRmFsbGJhY2tGb250czsKICAgICBpZiAoIWZhbGxiYWNrRm9udHMpCiAgICAgICAgIGZhbGxi
YWNrRm9udHMgPSAmbG9jYWxGYWxsYmFja0ZvbnRzOwogCkBAIC00MTYsMTAgKzQxNiwxMCBAQCBm
bG9hdCBGb250Q2FzY2FkZTo6d2lkdGgoY29uc3QgVGV4dFJ1biYgCiAgICAgcmV0dXJuIHdpZHRo
KHJ1bik7CiB9CiAKLUdseXBoRGF0YSBGb250Q2FzY2FkZTo6Z2x5cGhEYXRhRm9yQ2hhcmFjdGVy
KFVDaGFyMzIgYywgYm9vbCBtaXJyb3IsIEZvbnREYXRhVmFyaWFudCB2YXJpYW50KSBjb25zdAor
R2x5cGhEYXRhIEZvbnRDYXNjYWRlOjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjLCBi
b29sIG1pcnJvciwgRm9udFZhcmlhbnQgdmFyaWFudCkgY29uc3QKIHsKICAgICBpZiAodmFyaWFu
dCA9PSBBdXRvVmFyaWFudCkgewotICAgICAgICBpZiAobV9mb250RGVzY3JpcHRpb24uc21hbGxD
YXBzKCkgJiYgIXByaW1hcnlGb250RGF0YSgpLmlzU1ZHRm9udCgpKSB7CisgICAgICAgIGlmICht
X2ZvbnREZXNjcmlwdGlvbi5zbWFsbENhcHMoKSAmJiAhcHJpbWFyeUZvbnQoKS5pc1NWR0ZvbnQo
KSkgewogICAgICAgICAgICAgVUNoYXIzMiB1cHBlckMgPSB1X3RvdXBwZXIoYyk7CiAgICAgICAg
ICAgICBpZiAodXBwZXJDICE9IGMpIHsKICAgICAgICAgICAgICAgICBjID0gdXBwZXJDOwpAQCAt
NDQ2LDcgKzQ0Niw3IEBAIHZvaWQgRm9udENhc2NhZGU6OmRlbGV0ZUxheW91dChUZXh0TGF5b3UK
IHsKIH0KIAotZmxvYXQgRm9udENhc2NhZGU6OndpZHRoKFRleHRMYXlvdXQmLCB1bnNpZ25lZCwg
dW5zaWduZWQsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiopCitmbG9hdCBGb250Q2Fz
Y2FkZTo6d2lkdGgoVGV4dExheW91dCYsIHVuc2lnbmVkLCB1bnNpZ25lZCwgSGFzaFNldDxjb25z
dCBGb250Kj4qKQogewogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiAwOwpA
QCAtNTA1LDcgKzUwNSw3IEBAIGJvb2wgRm9udENhc2NhZGU6Omhhc1ZhbGlkQXZlcmFnZUNoYXJX
aWQKIAogI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oSU9TKQogICAgIC8vIEludGVybmFs
IGZvbnRzIG9uIE9TIFggYW5kIGlPUyBhbHNvIGhhdmUgYW4gaW52YWxpZCBlbnRyeSBpbiB0aGUg
dGFibGUgZm9yIGF2Z0NoYXJXaWR0aC4KLSAgICBpZiAocHJpbWFyeUZvbnREYXRhSXNTeXN0ZW1G
b250KCkpCisgICAgaWYgKHByaW1hcnlGb250SXNTeXN0ZW1Gb250KCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICNlbmRpZgogCkBAIC01MjUsNyArNTI1LDcgQEAgYm9vbCBGb250Q2FzY2FkZTo6
ZmFzdEF2ZXJhZ2VDaGFyV2lkdGhJZgogewogICAgIGJvb2wgc3VjY2VzcyA9IGhhc1ZhbGlkQXZl
cmFnZUNoYXJXaWR0aCgpOwogICAgIGlmIChzdWNjZXNzKQotICAgICAgICB3aWR0aCA9IHJvdW5k
ZihwcmltYXJ5Rm9udERhdGEoKS5hdmdDaGFyV2lkdGgoKSk7IC8vIEZJWE1FOiBwcmltYXJ5Rm9u
dERhdGEoKSBtaWdodCBub3QgY29ycmVzcG9uZCB0byBmaXJzdEZhbWlseSgpLgorICAgICAgICB3
aWR0aCA9IHJvdW5kZihwcmltYXJ5Rm9udCgpLmF2Z0NoYXJXaWR0aCgpKTsgLy8gRklYTUU6IHBy
aW1hcnlGb250KCkgbWlnaHQgbm90IGNvcnJlc3BvbmQgdG8gZmlyc3RGYW1pbHkoKS4KICAgICBy
ZXR1cm4gc3VjY2VzczsKIH0KIApAQCAtMTE3Myw3ICsxMTczLDcgQEAgaW50IEZvbnRDYXNjYWRl
OjplbXBoYXNpc01hcmtBc2NlbnQoY29ucwogICAgIGlmICghZ2V0RW1waGFzaXNNYXJrR2x5cGhE
YXRhKG1hcmssIG1hcmtHbHlwaERhdGEpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIGNvbnN0
IFNpbXBsZUZvbnREYXRhKiBtYXJrRm9udERhdGEgPSBtYXJrR2x5cGhEYXRhLmZvbnREYXRhOwor
ICAgIGNvbnN0IEZvbnQqIG1hcmtGb250RGF0YSA9IG1hcmtHbHlwaERhdGEuZm9udDsKICAgICBB
U1NFUlQobWFya0ZvbnREYXRhKTsKICAgICBpZiAoIW1hcmtGb250RGF0YSkKICAgICAgICAgcmV0
dXJuIDA7CkBAIC0xMTg3LDcgKzExODcsNyBAQCBpbnQgRm9udENhc2NhZGU6OmVtcGhhc2lzTWFy
a0Rlc2NlbnQoY29uCiAgICAgaWYgKCFnZXRFbXBoYXNpc01hcmtHbHlwaERhdGEobWFyaywgbWFy
a0dseXBoRGF0YSkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgY29uc3QgU2ltcGxlRm9udERh
dGEqIG1hcmtGb250RGF0YSA9IG1hcmtHbHlwaERhdGEuZm9udERhdGE7CisgICAgY29uc3QgRm9u
dCogbWFya0ZvbnREYXRhID0gbWFya0dseXBoRGF0YS5mb250OwogICAgIEFTU0VSVChtYXJrRm9u
dERhdGEpOwogICAgIGlmICghbWFya0ZvbnREYXRhKQogICAgICAgICByZXR1cm4gMDsKQEAgLTEy
MDEsNyArMTIwMSw3IEBAIGludCBGb250Q2FzY2FkZTo6ZW1waGFzaXNNYXJrSGVpZ2h0KGNvbnMK
ICAgICBpZiAoIWdldEVtcGhhc2lzTWFya0dseXBoRGF0YShtYXJrLCBtYXJrR2x5cGhEYXRhKSkK
ICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBjb25zdCBTaW1wbGVGb250RGF0YSogbWFya0ZvbnRE
YXRhID0gbWFya0dseXBoRGF0YS5mb250RGF0YTsKKyAgICBjb25zdCBGb250KiBtYXJrRm9udERh
dGEgPSBtYXJrR2x5cGhEYXRhLmZvbnQ7CiAgICAgQVNTRVJUKG1hcmtGb250RGF0YSk7CiAgICAg
aWYgKCFtYXJrRm9udERhdGEpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMTI3Myw3ICsxMjczLDcg
QEAgdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBoQnVmZmVyKEdyYXBoaQogI2VuZGlmCiAKICAg
ICAvLyBEcmF3IGVhY2ggY29udGlndW91cyBydW4gb2YgZ2x5cGhzIHRoYXQgdXNlIHRoZSBzYW1l
IGZvbnQgZGF0YS4KLSAgICBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEgPSBnbHlwaEJ1
ZmZlci5mb250RGF0YUF0KDApOworICAgIGNvbnN0IEZvbnQqIGZvbnREYXRhID0gZ2x5cGhCdWZm
ZXIuZm9udEF0KDApOwogICAgIEZsb2F0U2l6ZSBvZmZzZXQgPSBnbHlwaEJ1ZmZlci5vZmZzZXRB
dCgwKTsKICAgICBGbG9hdFBvaW50IHN0YXJ0UG9pbnQocG9pbnQueCgpLCBwb2ludC55KCkgLSBn
bHlwaEJ1ZmZlci5pbml0aWFsQWR2YW5jZSgpLmhlaWdodCgpKTsKICAgICBmbG9hdCBuZXh0WCA9
IHN0YXJ0UG9pbnQueCgpICsgZ2x5cGhCdWZmZXIuYWR2YW5jZUF0KDApLndpZHRoKCk7CkBAIC0x
Mjg0LDcgKzEyODQsNyBAQCB2b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhCdWZmZXIoR3JhcGhp
CiAgICAgVGV4dFJ1bjo6UmVuZGVyaW5nQ29udGV4dCogcmVuZGVyaW5nQ29udGV4dCA9IHJ1bi5y
ZW5kZXJpbmdDb250ZXh0KCk7CiAjZW5kaWYKICAgICB3aGlsZSAobmV4dEdseXBoIDwgZ2x5cGhC
dWZmZXIuc2l6ZSgpKSB7Ci0gICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBuZXh0Rm9udERh
dGEgPSBnbHlwaEJ1ZmZlci5mb250RGF0YUF0KG5leHRHbHlwaCk7CisgICAgICAgIGNvbnN0IEZv
bnQqIG5leHRGb250RGF0YSA9IGdseXBoQnVmZmVyLmZvbnRBdChuZXh0R2x5cGgpOwogICAgICAg
ICBGbG9hdFNpemUgbmV4dE9mZnNldCA9IGdseXBoQnVmZmVyLm9mZnNldEF0KG5leHRHbHlwaCk7
CiAKICAgICAgICAgaWYgKG5leHRGb250RGF0YSAhPSBmb250RGF0YSB8fCBuZXh0T2Zmc2V0ICE9
IG9mZnNldCkgewpAQCAtMTMxNyw3ICsxMzE3LDcgQEAgdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0ds
eXBoQnVmZmVyKEdyYXBoaQogICAgIH0KIH0KIAotaW5saW5lIHN0YXRpYyBmbG9hdCBvZmZzZXRU
b01pZGRsZU9mR2x5cGgoY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhLCBHbHlwaCBnbHlw
aCkKK2lubGluZSBzdGF0aWMgZmxvYXQgb2Zmc2V0VG9NaWRkbGVPZkdseXBoKGNvbnN0IEZvbnQq
IGZvbnREYXRhLCBHbHlwaCBnbHlwaCkKIHsKICAgICBpZiAoZm9udERhdGEtPnBsYXRmb3JtRGF0
YSgpLm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbCkgewogICAgICAgICBGbG9hdFJlY3QgYm91
bmRzID0gZm9udERhdGEtPmJvdW5kc0ZvckdseXBoKGdseXBoKTsKQEAgLTEzMjksNyArMTMyOSw3
IEBAIGlubGluZSBzdGF0aWMgZmxvYXQgb2Zmc2V0VG9NaWRkbGVPZkdseXAKIAogaW5saW5lIHN0
YXRpYyBmbG9hdCBvZmZzZXRUb01pZGRsZU9mR2x5cGhBdEluZGV4KGNvbnN0IEdseXBoQnVmZmVy
JiBnbHlwaEJ1ZmZlciwgc2l6ZV90IGkpCiB7Ci0gICAgcmV0dXJuIG9mZnNldFRvTWlkZGxlT2ZH
bHlwaChnbHlwaEJ1ZmZlci5mb250RGF0YUF0KGkpLCBnbHlwaEJ1ZmZlci5nbHlwaEF0KGkpKTsK
KyAgICByZXR1cm4gb2Zmc2V0VG9NaWRkbGVPZkdseXBoKGdseXBoQnVmZmVyLmZvbnRBdChpKSwg
Z2x5cGhCdWZmZXIuZ2x5cGhBdChpKSk7CiB9CiAKIHZvaWQgRm9udENhc2NhZGU6OmRyYXdFbXBo
YXNpc01hcmtzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBj
b25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0CkBAIC0xMzM4LDcgKzEzMzgsNyBAQCB2b2lk
IEZvbnRDYXNjYWRlOjpkcmF3RW1waGFzaXNNYXJrcyhHcmFwCiAgICAgaWYgKCFnZXRFbXBoYXNp
c01hcmtHbHlwaERhdGEobWFyaywgbWFya0dseXBoRGF0YSkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBtYXJrRm9udERhdGEgPSBtYXJrR2x5cGhEYXRhLmZv
bnREYXRhOworICAgIGNvbnN0IEZvbnQqIG1hcmtGb250RGF0YSA9IG1hcmtHbHlwaERhdGEuZm9u
dDsKICAgICBBU1NFUlQobWFya0ZvbnREYXRhKTsKICAgICBpZiAoIW1hcmtGb250RGF0YSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMTM2MSw3ICsxMzYxLDcgQEAgdm9pZCBGb250Q2FzY2FkZTo6ZHJh
d0VtcGhhc2lzTWFya3MoR3JhcAogICAgIGRyYXdHbHlwaEJ1ZmZlcihjb250ZXh0LCBydW4sIG1h
cmtCdWZmZXIsIHN0YXJ0UG9pbnQpOwogfQogCi1mbG9hdCBGb250Q2FzY2FkZTo6ZmxvYXRXaWR0
aEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZv
bnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNv
bnN0CitmbG9hdCBGb250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZvclNpbXBsZVRleHQoY29uc3QgVGV4
dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVy
ZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKIHsKICAgICBXaWR0aEl0ZXJhdG9yIGl0KHRoaXMs
IHJ1biwgZmFsbGJhY2tGb250cywgZ2x5cGhPdmVyZmxvdyk7CiAgICAgR2x5cGhCdWZmZXIgZ2x5
cGhCdWZmZXI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2Fz
Y2FkZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRDYXNjYWRlLmgJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEwICsyNiwxMCBA
QAogI2RlZmluZSBGb250Q2FzY2FkZV9oCiAKICNpbmNsdWRlICJEYXNoQXJyYXkuaCIKKyNpbmNs
dWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiRm9u
dEdseXBocy5oIgogI2luY2x1ZGUgIlBhdGguaCIKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5o
IgogI2luY2x1ZGUgIlRleHREaXJlY3Rpb24uaCIKICNpbmNsdWRlICJUeXBlc2V0dGluZ0ZlYXR1
cmVzLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTEzNCwxNyArMTM0LDE3IEBAIHB1
YmxpYzoKIAogICAgIGVudW0gQ3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uIHsgRG9Ob3RQYWludElm
Rm9udE5vdFJlYWR5LCBVc2VGYWxsYmFja0lmRm9udE5vdFJlYWR5IH07CiAgICAgV0VCQ09SRV9F
WFBPUlQgZmxvYXQgZHJhd1RleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNv
bnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0xLCBDdXN0b21Gb250Tm90
UmVhZHlBY3Rpb24gPSBEb05vdFBhaW50SWZGb250Tm90UmVhZHkpIGNvbnN0OwotICAgIHZvaWQg
ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBTaW1wbGVGb250RGF0YSosIGNvbnN0
IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQm
KSBjb25zdDsKKyAgICB2b2lkIGRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRm9u
dCosIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZs
b2F0UG9pbnQmKSBjb25zdDsKICAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKEdyYXBoaWNzQ29u
dGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZs
b2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0xKSBjb25zdDsKIAogICAgIERhc2hB
cnJheSBkYXNoZXNGb3JJbnRlcnNlY3Rpb25zV2l0aFJlY3QoY29uc3QgVGV4dFJ1biYsIGNvbnN0
IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIGNvbnN0IEZsb2F0UmVjdCYgbGluZUV4dGVudHMpIGNv
bnN0OwogCi0gICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQgd2lkdGgoY29uc3QgVGV4dFJ1biYsIEhh
c2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDAsIEdseXBoT3Zl
cmZsb3cqID0gMCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQgd2lkdGgoY29uc3Qg
VGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5cGhP
dmVyZmxvdyogPSAwKSBjb25zdDsKICAgICBmbG9hdCB3aWR0aChjb25zdCBUZXh0UnVuJiwgaW50
JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcmIGdseXBoTmFtZSkgY29uc3Q7CiAKICAgICBQYXNzT3du
UHRyPFRleHRMYXlvdXQ+IGNyZWF0ZUxheW91dChSZW5kZXJUZXh0KiwgZmxvYXQgeFBvcywgYm9v
bCBjb2xsYXBzZVdoaXRlU3BhY2UpIGNvbnN0OwogICAgIHN0YXRpYyB2b2lkIGRlbGV0ZUxheW91
dChUZXh0TGF5b3V0Kik7Ci0gICAgc3RhdGljIGZsb2F0IHdpZHRoKFRleHRMYXlvdXQmLCB1bnNp
Z25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiog
ZmFsbGJhY2tGb250cyA9IDApOworICAgIHN0YXRpYyBmbG9hdCB3aWR0aChUZXh0TGF5b3V0Jiwg
dW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJh
Y2tGb250cyA9IDApOwogCiAgICAgaW50IG9mZnNldEZvclBvc2l0aW9uKGNvbnN0IFRleHRSdW4m
LCBmbG9hdCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3Q7CiAgICAg
dm9pZCBhZGp1c3RTZWxlY3Rpb25SZWN0Rm9yVGV4dChjb25zdCBUZXh0UnVuJiwgTGF5b3V0UmVj
dCYgc2VsZWN0aW9uUmVjdCwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSkgY29uc3Q7CkBAIC0x
NzIsMTAgKzE3MiwxMCBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzUGxhdGZvcm1Gb250KCkgY29u
c3QgeyByZXR1cm4gbV9nbHlwaHMtPmlzRm9yUGxhdGZvcm1Gb250KCk7IH0KIAotICAgIGNvbnN0
IEZvbnRNZXRyaWNzJiBmb250TWV0cmljcygpIGNvbnN0IHsgcmV0dXJuIHByaW1hcnlGb250RGF0
YSgpLmZvbnRNZXRyaWNzKCk7IH0KLSAgICBmbG9hdCBzcGFjZVdpZHRoKCkgY29uc3QgeyByZXR1
cm4gcHJpbWFyeUZvbnREYXRhKCkuc3BhY2VXaWR0aCgpICsgbV9sZXR0ZXJTcGFjaW5nOyB9Ci0g
ICAgZmxvYXQgdGFiV2lkdGgoY29uc3QgU2ltcGxlRm9udERhdGEmLCB1bnNpZ25lZCB0YWJTaXpl
LCBmbG9hdCBwb3NpdGlvbikgY29uc3Q7Ci0gICAgZmxvYXQgdGFiV2lkdGgodW5zaWduZWQgdGFi
U2l6ZSwgZmxvYXQgcG9zaXRpb24pIGNvbnN0IHsgcmV0dXJuIHRhYldpZHRoKHByaW1hcnlGb250
RGF0YSgpLCB0YWJTaXplLCBwb3NpdGlvbik7IH0KKyAgICBjb25zdCBGb250TWV0cmljcyYgZm9u
dE1ldHJpY3MoKSBjb25zdCB7IHJldHVybiBwcmltYXJ5Rm9udCgpLmZvbnRNZXRyaWNzKCk7IH0K
KyAgICBmbG9hdCBzcGFjZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gcHJpbWFyeUZvbnQoKS5zcGFj
ZVdpZHRoKCkgKyBtX2xldHRlclNwYWNpbmc7IH0KKyAgICBmbG9hdCB0YWJXaWR0aChjb25zdCBG
b250JiwgdW5zaWduZWQgdGFiU2l6ZSwgZmxvYXQgcG9zaXRpb24pIGNvbnN0OworICAgIGZsb2F0
IHRhYldpZHRoKHVuc2lnbmVkIHRhYlNpemUsIGZsb2F0IHBvc2l0aW9uKSBjb25zdCB7IHJldHVy
biB0YWJXaWR0aChwcmltYXJ5Rm9udCgpLCB0YWJTaXplLCBwb3NpdGlvbik7IH0KICAgICBib29s
IGhhc1ZhbGlkQXZlcmFnZUNoYXJXaWR0aCgpIGNvbnN0OwogICAgIGJvb2wgZmFzdEF2ZXJhZ2VD
aGFyV2lkdGhJZkF2YWlsYWJsZShmbG9hdCAmd2lkdGgpIGNvbnN0OyAvLyByZXR1cm5zIHRydWUg
b24gc3VjY2VzcwogCkBAIC0xODMsMTIgKzE4MywxMiBAQCBwdWJsaWM6CiAgICAgaW50IGVtcGhh
c2lzTWFya0Rlc2NlbnQoY29uc3QgQXRvbWljU3RyaW5nJikgY29uc3Q7CiAgICAgaW50IGVtcGhh
c2lzTWFya0hlaWdodChjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdDsKIAotICAgIGNvbnN0IFNp
bXBsZUZvbnREYXRhJiBwcmltYXJ5Rm9udERhdGEoKSBjb25zdDsKKyAgICBjb25zdCBGb250JiBw
cmltYXJ5Rm9udCgpIGNvbnN0OwogICAgIGNvbnN0IEZvbnRSYW5nZXMmIGZhbGxiYWNrUmFuZ2Vz
QXQodW5zaWduZWQpIGNvbnN0OwotICAgIEdseXBoRGF0YSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIo
VUNoYXIzMiwgYm9vbCBtaXJyb3IsIEZvbnREYXRhVmFyaWFudCA9IEF1dG9WYXJpYW50KSBjb25z
dDsKKyAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIsIGJvb2wgbWly
cm9yLCBGb250VmFyaWFudCA9IEF1dG9WYXJpYW50KSBjb25zdDsKICAgICAKICNpZiBQTEFURk9S
TShDT0NPQSkKLSAgICBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGFGb3JDb21iaW5pbmdD
aGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBVQ2hhciosIHNpemVfdCBsZW5ndGgsIEZvbnREYXRhVmFy
aWFudCkgY29uc3Q7CisgICAgY29uc3QgRm9udCogZm9udEZvckNvbWJpbmluZ0NoYXJhY3RlclNl
cXVlbmNlKGNvbnN0IFVDaGFyKiwgc2l6ZV90IGxlbmd0aCwgRm9udFZhcmlhbnQpIGNvbnN0Owog
I2VuZGlmCiAKICAgICBzdGF0aWMgYm9vbCBpc0NKS0lkZW9ncmFwaChVQ2hhcjMyKTsKQEAgLTIw
Nyw3ICsyMDcsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIENvZGVQYXRoIGNoYXJhY3RlclJhbmdl
Q29kZVBhdGgoY29uc3QgTENoYXIqLCB1bnNpZ25lZCkgeyByZXR1cm4gU2ltcGxlOyB9CiAgICAg
c3RhdGljIENvZGVQYXRoIGNoYXJhY3RlclJhbmdlQ29kZVBhdGgoY29uc3QgVUNoYXIqLCB1bnNp
Z25lZCBsZW4pOwogCi0gICAgYm9vbCBwcmltYXJ5Rm9udERhdGFJc1N5c3RlbUZvbnQoKSBjb25z
dDsKKyAgICBib29sIHByaW1hcnlGb250SXNTeXN0ZW1Gb250KCkgY29uc3Q7CiAKIHByaXZhdGU6
CiAgICAgZW51bSBGb3JUZXh0RW1waGFzaXNPck5vdCB7IE5vdEZvclRleHRFbXBoYXNpcywgRm9y
VGV4dEVtcGhhc2lzIH07CkBAIC0yMTgsNyArMjE4LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRy
YXdFbXBoYXNpc01hcmtzRm9yU2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0
UnVuJiwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZy
b20sIGludCB0bykgY29uc3Q7CiAgICAgdm9pZCBkcmF3R2x5cGhCdWZmZXIoR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEdseXBoQnVmZmVyJiwgRmxvYXRQb2ludCYpIGNv
bnN0OwogICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3MoR3JhcGhpY3NDb250ZXh0KiwgY29uc3Qg
VGV4dFJ1biYsIGNvbnN0IEdseXBoQnVmZmVyJiwgY29uc3QgQXRvbWljU3RyaW5nJiwgY29uc3Qg
RmxvYXRQb2ludCYpIGNvbnN0OwotICAgIGZsb2F0IGZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KGNv
bnN0IFRleHRSdW4mLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9u
dHMgPSAwLCBHbHlwaE92ZXJmbG93KiA9IDApIGNvbnN0OworICAgIGZsb2F0IGZsb2F0V2lkdGhG
b3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJh
Y2tGb250cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29uc3Q7CiAgICAgaW50IG9mZnNldEZv
clBvc2l0aW9uRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiwgZmxvYXQgcG9zaXRpb24sIGJv
b2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0OwogICAgIHZvaWQgYWRqdXN0U2VsZWN0aW9u
UmVjdEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYsIExheW91dFJlY3QmIHNlbGVjdGlvblJl
Y3QsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0OwogCkBAIC0yMzEsNyArMjMxLDcgQEAgcHJpdmF0
ZToKICAgICBmbG9hdCBnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0KGNvbnN0IFRl
eHRSdW4mLCBpbnQgZnJvbSwgaW50IHRvLCBHbHlwaEJ1ZmZlciYsIEZvclRleHRFbXBoYXNpc09y
Tm90ID0gTm90Rm9yVGV4dEVtcGhhc2lzKSBjb25zdDsKICAgICBmbG9hdCBkcmF3Q29tcGxleFRl
eHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBp
bnQgZnJvbSwgaW50IHRvKSBjb25zdDsKICAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzRm9yQ29t
cGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21pY1N0
cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Owot
ICAgIGZsb2F0IGZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwgSGFzaFNl
dDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxv
dyogPSAwKSBjb25zdDsKKyAgICBmbG9hdCBmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3Qg
VGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5cGhP
dmVyZmxvdyogPSAwKSBjb25zdDsKICAgICBpbnQgb2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4
VGV4dChjb25zdCBUZXh0UnVuJiwgZmxvYXQgcG9zaXRpb24sIGJvb2wgaW5jbHVkZVBhcnRpYWxH
bHlwaHMpIGNvbnN0OwogICAgIHZvaWQgYWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0
KGNvbnN0IFRleHRSdW4mLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBpbnQgZnJvbSwgaW50
IHRvKSBjb25zdDsKIApAQCAtMzUyLDEwICszNTIsMTAgQEAgaW5saW5lIEZvbnRDYXNjYWRlOjp+
Rm9udENhc2NhZGUoKQogewogfQogCi1pbmxpbmUgY29uc3QgU2ltcGxlRm9udERhdGEmIEZvbnRD
YXNjYWRlOjpwcmltYXJ5Rm9udERhdGEoKSBjb25zdAoraW5saW5lIGNvbnN0IEZvbnQmIEZvbnRD
YXNjYWRlOjpwcmltYXJ5Rm9udCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fZ2x5cGhzKTsKLSAg
ICByZXR1cm4gbV9nbHlwaHMtPnByaW1hcnlTaW1wbGVGb250RGF0YShtX2ZvbnREZXNjcmlwdGlv
bik7CisgICAgcmV0dXJuIG1fZ2x5cGhzLT5wcmltYXJ5Rm9udChtX2ZvbnREZXNjcmlwdGlvbik7
CiB9CiAKIGlubGluZSBjb25zdCBGb250UmFuZ2VzJiBGb250Q2FzY2FkZTo6ZmFsbGJhY2tSYW5n
ZXNBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QKQEAgLTM3NSwxMyArMzc1LDEzIEBAIGlubGluZSBG
b250U2VsZWN0b3IqIEZvbnRDYXNjYWRlOjpmb250U2UKICAgICByZXR1cm4gbV9nbHlwaHMgPyBt
X2dseXBocy0+Zm9udFNlbGVjdG9yKCkgOiAwOwogfQogCi1pbmxpbmUgZmxvYXQgRm9udENhc2Nh
ZGU6OnRhYldpZHRoKGNvbnN0IFNpbXBsZUZvbnREYXRhJiBmb250RGF0YSwgdW5zaWduZWQgdGFi
U2l6ZSwgZmxvYXQgcG9zaXRpb24pIGNvbnN0CitpbmxpbmUgZmxvYXQgRm9udENhc2NhZGU6OnRh
YldpZHRoKGNvbnN0IEZvbnQmIGZvbnQsIHVuc2lnbmVkIHRhYlNpemUsIGZsb2F0IHBvc2l0aW9u
KSBjb25zdAogewogICAgIGlmICghdGFiU2l6ZSkKICAgICAgICAgcmV0dXJuIGxldHRlclNwYWNp
bmcoKTsKLSAgICBmbG9hdCB0YWJXaWR0aCA9IHRhYlNpemUgKiBmb250RGF0YS5zcGFjZVdpZHRo
KCkgKyBsZXR0ZXJTcGFjaW5nKCk7CisgICAgZmxvYXQgdGFiV2lkdGggPSB0YWJTaXplICogZm9u
dC5zcGFjZVdpZHRoKCkgKyBsZXR0ZXJTcGFjaW5nKCk7CiAgICAgZmxvYXQgdGFiRGVsdGFXaWR0
aCA9IHRhYldpZHRoIC0gZm1vZGYocG9zaXRpb24sIHRhYldpZHRoKTsKLSAgICByZXR1cm4gKHRh
YkRlbHRhV2lkdGggPCBmb250RGF0YS5zcGFjZVdpZHRoKCkgLyAyKSA/IHRhYldpZHRoIDogdGFi
RGVsdGFXaWR0aDsKKyAgICByZXR1cm4gKHRhYkRlbHRhV2lkdGggPCBmb250LnNwYWNlV2lkdGgo
KSAvIDIpID8gdGFiV2lkdGggOiB0YWJEZWx0YVdpZHRoOwogfQogCiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250R2x5cGhzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250R2x5cGhzLmNwcAkocmV2aXNpb24g
MTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEdseXBocy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAKIEZvbnRHbHlwaHM6OkZvbnRHbHlwaHMoUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+IGZvbnRT
ZWxlY3RvcikKLSAgICA6IG1fY2FjaGVkUHJpbWFyeVNpbXBsZUZvbnREYXRhKDApCisgICAgOiBt
X2NhY2hlZFByaW1hcnlGb250KDApCiAgICAgLCBtX2ZvbnRTZWxlY3Rvcihmb250U2VsZWN0b3Ip
CiAgICAgLCBtX2ZvbnRTZWxlY3RvclZlcnNpb24obV9mb250U2VsZWN0b3IgPyBtX2ZvbnRTZWxl
Y3Rvci0+dmVyc2lvbigpIDogMCkKICAgICAsIG1fZ2VuZXJhdGlvbihmb250Q2FjaGUoKS5nZW5l
cmF0aW9uKCkpCkBAIC00NSw3ICs0NSw3IEBAIEZvbnRHbHlwaHM6OkZvbnRHbHlwaHMoUGFzc1Jl
ZlB0cjxGb250U2UKIH0KIAogRm9udEdseXBoczo6Rm9udEdseXBocyhjb25zdCBGb250UGxhdGZv
cm1EYXRhJiBwbGF0Zm9ybURhdGEpCi0gICAgOiBtX2NhY2hlZFByaW1hcnlTaW1wbGVGb250RGF0
YSgwKQorICAgIDogbV9jYWNoZWRQcmltYXJ5Rm9udCgwKQogICAgICwgbV9mb250U2VsZWN0b3Io
MCkKICAgICAsIG1fZm9udFNlbGVjdG9yVmVyc2lvbigwKQogICAgICwgbV9nZW5lcmF0aW9uKGZv
bnRDYWNoZSgpLmdlbmVyYXRpb24oKSkKQEAgLTYzLDcgKzYzLDcgQEAgdm9pZCBGb250R2x5cGhz
OjpkZXRlcm1pbmVQaXRjaChjb25zdCBGbwogICAgIGF1dG8mIHByaW1hcnlSYW5nZXMgPSByZWFs
aXplRmFsbGJhY2tSYW5nZXNBdChkZXNjcmlwdGlvbiwgMCk7CiAgICAgdW5zaWduZWQgbnVtUmFu
Z2VzID0gcHJpbWFyeVJhbmdlcy5zaXplKCk7CiAgICAgaWYgKG51bVJhbmdlcyA9PSAxKQotICAg
ICAgICBtX3BpdGNoID0gcHJpbWFyeVJhbmdlcy5yYW5nZUF0KDApLmZvbnREYXRhKCkucGl0Y2go
KTsKKyAgICAgICAgbV9waXRjaCA9IHByaW1hcnlSYW5nZXMucmFuZ2VBdCgwKS5mb250KCkucGl0
Y2goKTsKICAgICBlbHNlCiAgICAgICAgIG1fcGl0Y2ggPSBWYXJpYWJsZVBpdGNoOwogfQpAQCAt
OTYsNyArOTYsNyBAQCBzdGF0aWMgRm9udFJhbmdlcyByZWFsaXplTmV4dEZhbGxiYWNrKGNvCiAg
ICAgLy8gV2UgZGlkbid0IGZpbmQgYSBmb250LiBUcnkgdG8gZmluZCBhIHNpbWlsYXIgZm9udCB1
c2luZyBvdXIgb3duIHNwZWNpZmljIGtub3dsZWRnZSBhYm91dCBvdXIgcGxhdGZvcm0uCiAgICAg
Ly8gRm9yIGV4YW1wbGUgb24gT1MgWCwgd2Uga25vdyB0byBtYXAgYW55IGZhbWlsaWVzIGNvbnRh
aW5pbmcgdGhlIHdvcmRzIEFyYWJpYywgUGFzaHRvLCBvciBVcmR1IHRvIHRoZQogICAgIC8vIEdl
ZXphIFBybyBmb250LgotICAgIHJldHVybiBGb250UmFuZ2VzKGZvbnRDYWNoZSgpLnNpbWlsYXJG
b250UGxhdGZvcm1EYXRhKGRlc2NyaXB0aW9uKSk7CisgICAgcmV0dXJuIEZvbnRSYW5nZXMoZm9u
dENhY2hlKCkuc2ltaWxhckZvbnQoZGVzY3JpcHRpb24pKTsKIH0KIAogY29uc3QgRm9udFJhbmdl
cyYgRm9udEdseXBoczo6cmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoY29uc3QgRm9udERlc2NyaXB0
aW9uJiBkZXNjcmlwdGlvbiwgdW5zaWduZWQgaW5kZXgpCkBAIC0xMjYsMTAgKzEyNiwxMCBAQCBj
b25zdCBGb250UmFuZ2VzJiBGb250R2x5cGhzOjpyZWFsaXplRmFsCiAgICAgICAgIEFTU0VSVCht
X2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXggPj0gZGVzY3JpcHRpb24uZmFtaWx5Q291bnQoKSk7
CiAKICAgICAgICAgdW5zaWduZWQgZm9udFNlbGVjdG9yRmFsbGJhY2tJbmRleCA9IG1fbGFzdFJl
YWxpemVkRmFsbGJhY2tJbmRleCAtIGRlc2NyaXB0aW9uLmZhbWlseUNvdW50KCk7Ci0gICAgICAg
IGlmIChmb250U2VsZWN0b3JGYWxsYmFja0luZGV4ID09IG1fZm9udFNlbGVjdG9yLT5mYWxsYmFj
a0ZvbnREYXRhQ291bnQoKSkKKyAgICAgICAgaWYgKGZvbnRTZWxlY3RvckZhbGxiYWNrSW5kZXgg
PT0gbV9mb250U2VsZWN0b3ItPmZhbGxiYWNrRm9udENvdW50KCkpCiAgICAgICAgICAgICByZXR1
cm4gZm9udFJhbmdlczsKICAgICAgICAgKyttX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXg7Ci0g
ICAgICAgIGZvbnRSYW5nZXMgPSBGb250UmFuZ2VzKG1fZm9udFNlbGVjdG9yLT5mYWxsYmFja0Zv
bnREYXRhQXQoZGVzY3JpcHRpb24sIGZvbnRTZWxlY3RvckZhbGxiYWNrSW5kZXgpKTsKKyAgICAg
ICAgZm9udFJhbmdlcyA9IEZvbnRSYW5nZXMobV9mb250U2VsZWN0b3ItPmZhbGxiYWNrRm9udEF0
KGRlc2NyaXB0aW9uLCBmb250U2VsZWN0b3JGYWxsYmFja0luZGV4KSk7CiAgICAgfQogCiAgICAg
cmV0dXJuIGZvbnRSYW5nZXM7CkBAIC0yMjEsOCArMjIxLDggQEAgc3RhdGljIGJvb2wgc2hvdWxk
SWdub3JlUm90YXRpb24oVUNoYXIzMgogI2lmIFBMQVRGT1JNKENPQ09BKQogc3RhdGljIEdseXBo
RGF0YSBnbHlwaERhdGFGb3JDSktDaGFyYWN0ZXJXaXRob3V0U3ludGhldGljSXRhbGljKFVDaGFy
MzIgY2hhcmFjdGVyLCBHbHlwaERhdGEmIGRhdGEpCiB7Ci0gICAgR2x5cGhEYXRhIG5vbkl0YWxp
Y0RhdGEgPSBkYXRhLmZvbnREYXRhLT5ub25TeW50aGV0aWNJdGFsaWNGb250RGF0YSgpLT5nbHlw
aERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyKTsKLSAgICBpZiAobm9uSXRhbGljRGF0YS5mb250
RGF0YSkKKyAgICBHbHlwaERhdGEgbm9uSXRhbGljRGF0YSA9IGRhdGEuZm9udC0+bm9uU3ludGhl
dGljSXRhbGljRm9udCgpLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyKTsKKyAgICBp
ZiAobm9uSXRhbGljRGF0YS5mb250KQogICAgICAgICByZXR1cm4gbm9uSXRhbGljRGF0YTsKICAg
ICByZXR1cm4gZGF0YTsKIH0KQEAgLTIzMSw3NiArMjMxLDc2IEBAIHN0YXRpYyBHbHlwaERhdGEg
Z2x5cGhEYXRhRm9yQ0pLQ2hhcmFjdGUKIHN0YXRpYyBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yTm9u
Q0pLQ2hhcmFjdGVyV2l0aEdseXBoT3JpZW50YXRpb24oVUNoYXIzMiBjaGFyYWN0ZXIsIE5vbkNK
S0dseXBoT3JpZW50YXRpb24gb3JpZW50YXRpb24sIGNvbnN0IEdseXBoRGF0YSYgZGF0YSkKIHsK
ICAgICBpZiAob3JpZW50YXRpb24gPT0gTm9uQ0pLR2x5cGhPcmllbnRhdGlvblVwcmlnaHQgfHwg
c2hvdWxkSWdub3JlUm90YXRpb24oY2hhcmFjdGVyKSkgewotICAgICAgICBHbHlwaERhdGEgdXBy
aWdodERhdGEgPSBkYXRhLmZvbnREYXRhLT51cHJpZ2h0T3JpZW50YXRpb25Gb250RGF0YSgpLT5n
bHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyKTsKKyAgICAgICAgR2x5cGhEYXRhIHVwcmln
aHREYXRhID0gZGF0YS5mb250LT51cHJpZ2h0T3JpZW50YXRpb25Gb250KCktPmdseXBoRGF0YUZv
ckNoYXJhY3RlcihjaGFyYWN0ZXIpOwogICAgICAgICAvLyBJZiB0aGUgZ2x5cGhzIGFyZSB0aGUg
c2FtZSwgdGhlbiB3ZSBrbm93IHdlIGNhbiBqdXN0IHVzZSB0aGUgaG9yaXpvbnRhbCBnbHlwaCBy
b3RhdGVkIHZlcnRpY2FsbHkgdG8gYmUgdXByaWdodC4KICAgICAgICAgaWYgKGRhdGEuZ2x5cGgg
PT0gdXByaWdodERhdGEuZ2x5cGgpCiAgICAgICAgICAgICByZXR1cm4gZGF0YTsKICAgICAgICAg
Ly8gVGhlIGdseXBocyBhcmUgZGlzdGluY3QsIG1lYW5pbmcgdGhhdCB0aGUgZm9udCBoYXMgYSB2
ZXJ0aWNhbC1yaWdodCBnbHlwaCBiYWtlZCBpbnRvIGl0LiBXZSBjYW4ndCB1c2UgdGhhdAogICAg
ICAgICAvLyBnbHlwaCwgc28gd2UgZmFsbCBiYWNrIHRvIHRoZSB1cHJpZ2h0IGRhdGEgYW5kIHVz
ZSB0aGUgaG9yaXpvbnRhbCBnbHlwaC4KLSAgICAgICAgaWYgKHVwcmlnaHREYXRhLmZvbnREYXRh
KQorICAgICAgICBpZiAodXByaWdodERhdGEuZm9udCkKICAgICAgICAgICAgIHJldHVybiB1cHJp
Z2h0RGF0YTsKICAgICB9IGVsc2UgaWYgKG9yaWVudGF0aW9uID09IE5vbkNKS0dseXBoT3JpZW50
YXRpb25WZXJ0aWNhbFJpZ2h0KSB7Ci0gICAgICAgIEdseXBoRGF0YSB2ZXJ0aWNhbFJpZ2h0RGF0
YSA9IGRhdGEuZm9udERhdGEtPnZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbkZvbnREYXRhKCktPmds
eXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIpOworICAgICAgICBHbHlwaERhdGEgdmVydGlj
YWxSaWdodERhdGEgPSBkYXRhLmZvbnQtPnZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbkZvbnQoKS0+
Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3Rlcik7CiAgICAgICAgIC8vIElmIHRoZSBnbHlw
aHMgYXJlIGRpc3RpbmN0LCB3ZSB3aWxsIG1ha2UgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgZm9u
dCBoYXMgYSB2ZXJ0aWNhbC1yaWdodCBnbHlwaCBiYWtlZAogICAgICAgICAvLyBpbnRvIGl0Lgog
ICAgICAgICBpZiAoZGF0YS5nbHlwaCAhPSB2ZXJ0aWNhbFJpZ2h0RGF0YS5nbHlwaCkKICAgICAg
ICAgICAgIHJldHVybiBkYXRhOwogICAgICAgICAvLyBUaGUgZ2x5cGhzIGFyZSBpZGVudGljYWws
IG1lYW5pbmcgdGhhdCB3ZSBzaG91bGQganVzdCB1c2UgdGhlIGhvcml6b250YWwgZ2x5cGguCi0g
ICAgICAgIGlmICh2ZXJ0aWNhbFJpZ2h0RGF0YS5mb250RGF0YSkKKyAgICAgICAgaWYgKHZlcnRp
Y2FsUmlnaHREYXRhLmZvbnQpCiAgICAgICAgICAgICByZXR1cm4gdmVydGljYWxSaWdodERhdGE7
CiAgICAgfQogICAgIHJldHVybiBkYXRhOwogfQogCi1HbHlwaERhdGEgRm9udEdseXBoczo6Z2x5
cGhEYXRhRm9yU3lzdGVtRmFsbGJhY2soVUNoYXIzMiBjLCBjb25zdCBGb250RGVzY3JpcHRpb24m
IGRlc2NyaXB0aW9uLCBGb250RGF0YVZhcmlhbnQgdmFyaWFudCkKK0dseXBoRGF0YSBGb250R2x5
cGhzOjpnbHlwaERhdGFGb3JTeXN0ZW1GYWxsYmFjayhVQ2hhcjMyIGMsIGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZGVzY3JpcHRpb24sIEZvbnRWYXJpYW50IHZhcmlhbnQpCiB7CiAgICAgLy8gU3lz
dGVtIGZhbGxiYWNrIGlzIGNoYXJhY3Rlci1kZXBlbmRlbnQuCiAgICAgYXV0byYgcHJpbWFyeVJh
bmdlcyA9IHJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGRlc2NyaXB0aW9uLCAwKTsKLSAgICBhdXRv
KiBvcmlnaW5hbEZvbnREYXRhID0gcHJpbWFyeVJhbmdlcy5mb250RGF0YUZvckNoYXJhY3Rlcihj
KTsKLSAgICBpZiAoIW9yaWdpbmFsRm9udERhdGEpCi0gICAgICAgIG9yaWdpbmFsRm9udERhdGEg
PSAmcHJpbWFyeVJhbmdlcy5mb250RGF0YUZvckZpcnN0UmFuZ2UoKTsKKyAgICBhdXRvKiBvcmln
aW5hbEZvbnQgPSBwcmltYXJ5UmFuZ2VzLmZvbnRGb3JDaGFyYWN0ZXIoYyk7CisgICAgaWYgKCFv
cmlnaW5hbEZvbnQpCisgICAgICAgIG9yaWdpbmFsRm9udCA9ICZwcmltYXJ5UmFuZ2VzLmZvbnRG
b3JGaXJzdFJhbmdlKCk7CiAKLSAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IHN5c3RlbUZhbGxi
YWNrRm9udERhdGEgPSBvcmlnaW5hbEZvbnREYXRhLT5zeXN0ZW1GYWxsYmFja0ZvbnREYXRhRm9y
Q2hhcmFjdGVyKGMsIGRlc2NyaXB0aW9uLCBtX2lzRm9yUGxhdGZvcm1Gb250KTsKLSAgICBpZiAo
IXN5c3RlbUZhbGxiYWNrRm9udERhdGEpCisgICAgUmVmUHRyPEZvbnQ+IHN5c3RlbUZhbGxiYWNr
Rm9udCA9IG9yaWdpbmFsRm9udC0+c3lzdGVtRmFsbGJhY2tGb250Rm9yQ2hhcmFjdGVyKGMsIGRl
c2NyaXB0aW9uLCBtX2lzRm9yUGxhdGZvcm1Gb250KTsKKyAgICBpZiAoIXN5c3RlbUZhbGxiYWNr
Rm9udCkKICAgICAgICAgcmV0dXJuIEdseXBoRGF0YSgpOwogCi0gICAgaWYgKHN5c3RlbUZhbGxi
YWNrRm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwgJiYg
IXN5c3RlbUZhbGxiYWNrRm9udERhdGEtPmhhc1ZlcnRpY2FsR2x5cGhzKCkgJiYgRm9udENhc2Nh
ZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woYykpCisgICAgaWYgKHN5c3RlbUZhbGxiYWNrRm9u
dC0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCAmJiAhc3lzdGVtRmFs
bGJhY2tGb250LT5oYXNWZXJ0aWNhbEdseXBocygpICYmIEZvbnRDYXNjYWRlOjppc0NKS0lkZW9n
cmFwaE9yU3ltYm9sKGMpKQogICAgICAgICB2YXJpYW50ID0gQnJva2VuSWRlb2dyYXBoVmFyaWFu
dDsKIAogICAgIEdseXBoRGF0YSBmYWxsYmFja0dseXBoRGF0YTsKICAgICBpZiAodmFyaWFudCA9
PSBOb3JtYWxWYXJpYW50KQotICAgICAgICBmYWxsYmFja0dseXBoRGF0YSA9IHN5c3RlbUZhbGxi
YWNrRm9udERhdGEtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjKTsKKyAgICAgICAgZmFsbGJhY2tH
bHlwaERhdGEgPSBzeXN0ZW1GYWxsYmFja0ZvbnQtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjKTsK
ICAgICBlbHNlCi0gICAgICAgIGZhbGxiYWNrR2x5cGhEYXRhID0gc3lzdGVtRmFsbGJhY2tGb250
RGF0YS0+dmFyaWFudEZvbnREYXRhKGRlc2NyaXB0aW9uLCB2YXJpYW50KS0+Z2x5cGhEYXRhRm9y
Q2hhcmFjdGVyKGMpOworICAgICAgICBmYWxsYmFja0dseXBoRGF0YSA9IHN5c3RlbUZhbGxiYWNr
Rm9udC0+dmFyaWFudEZvbnQoZGVzY3JpcHRpb24sIHZhcmlhbnQpLT5nbHlwaERhdGFGb3JDaGFy
YWN0ZXIoYyk7CiAKLSAgICBpZiAodmFyaWFudCA9PSBOb3JtYWxWYXJpYW50ICYmIGZhbGxiYWNr
R2x5cGhEYXRhLmZvbnREYXRhKSB7Ci0gICAgICAgIGlmICghRm9udENhc2NhZGU6OmlzQ0pLSWRl
b2dyYXBoT3JTeW1ib2woYykgJiYgZmFsbGJhY2tHbHlwaERhdGEuZm9udERhdGEtPnBsYXRmb3Jt
RGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwgJiYgIWZhbGxiYWNrR2x5cGhEYXRhLmZv
bnREYXRhLT5pc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKCkpCisgICAgaWYgKHZhcmlhbnQgPT0g
Tm9ybWFsVmFyaWFudCAmJiBmYWxsYmFja0dseXBoRGF0YS5mb250KSB7CisgICAgICAgIGlmICgh
Rm9udENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woYykgJiYgZmFsbGJhY2tHbHlwaERh
dGEuZm9udC0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCAmJiAhZmFs
bGJhY2tHbHlwaERhdGEuZm9udC0+aXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaygpKQogICAgICAg
ICAgICAgZmFsbGJhY2tHbHlwaERhdGEgPSBnbHlwaERhdGFGb3JOb25DSktDaGFyYWN0ZXJXaXRo
R2x5cGhPcmllbnRhdGlvbihjLCBkZXNjcmlwdGlvbi5ub25DSktHbHlwaE9yaWVudGF0aW9uKCks
IGZhbGxiYWNrR2x5cGhEYXRhKTsKICAgICB9CiAKICAgICAvLyBLZWVwIHRoZSBzeXN0ZW0gZmFs
bGJhY2sgZm9udHMgd2UgdXNlIGFsaXZlLgogICAgIGlmIChmYWxsYmFja0dseXBoRGF0YS5nbHlw
aCkKLSAgICAgICAgbV9zeXN0ZW1GYWxsYmFja0ZvbnREYXRhU2V0LmFkZChzeXN0ZW1GYWxsYmFj
a0ZvbnREYXRhLnJlbGVhc2UoKSk7CisgICAgICAgIG1fc3lzdGVtRmFsbGJhY2tGb250U2V0LmFk
ZChzeXN0ZW1GYWxsYmFja0ZvbnQucmVsZWFzZSgpKTsKIAogICAgIHJldHVybiBmYWxsYmFja0ds
eXBoRGF0YTsKIH0KIAotR2x5cGhEYXRhIEZvbnRHbHlwaHM6OmdseXBoRGF0YUZvclZhcmlhbnQo
VUNoYXIzMiBjLCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250RGF0YVZh
cmlhbnQgdmFyaWFudCwgdW5zaWduZWQgZmFsbGJhY2tJbmRleCkKK0dseXBoRGF0YSBGb250R2x5
cGhzOjpnbHlwaERhdGFGb3JWYXJpYW50KFVDaGFyMzIgYywgY29uc3QgRm9udERlc2NyaXB0aW9u
JiBkZXNjcmlwdGlvbiwgRm9udFZhcmlhbnQgdmFyaWFudCwgdW5zaWduZWQgZmFsbGJhY2tJbmRl
eCkKIHsKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICBhdXRvJiBmb250UmFuZ2VzID0gcmVh
bGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIGZhbGxiYWNrSW5kZXgrKyk7CiAgICAg
ICAgIGlmIChmb250UmFuZ2VzLmlzTnVsbCgpKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGF1dG8qIGZvbnREYXRhID0gZm9udFJhbmdlcy5mb250RGF0YUZvckNoYXJhY3RlcihjKTsKLSAg
ICAgICAgR2x5cGhEYXRhIGRhdGEgPSBmb250RGF0YSA/IGZvbnREYXRhLT5nbHlwaERhdGFGb3JD
aGFyYWN0ZXIoYykgOiBHbHlwaERhdGEoKTsKLSAgICAgICAgaWYgKGRhdGEuZm9udERhdGEpIHsK
LSAgICAgICAgICAgIC8vIFRoZSB2YXJpYW50Rm9udERhdGEgZnVuY3Rpb24gc2hvdWxkIG5vdCBu
b3JtYWxseSByZXR1cm4gMC4KKyAgICAgICAgYXV0byogZm9udCA9IGZvbnRSYW5nZXMuZm9udEZv
ckNoYXJhY3RlcihjKTsKKyAgICAgICAgR2x5cGhEYXRhIGRhdGEgPSBmb250ID8gZm9udC0+Z2x5
cGhEYXRhRm9yQ2hhcmFjdGVyKGMpIDogR2x5cGhEYXRhKCk7CisgICAgICAgIGlmIChkYXRhLmZv
bnQpIHsKKyAgICAgICAgICAgIC8vIFRoZSB2YXJpYW50Rm9udCBmdW5jdGlvbiBzaG91bGQgbm90
IG5vcm1hbGx5IHJldHVybiAwLgogICAgICAgICAgICAgLy8gQnV0IGlmIGl0IGRvZXMsIHdlIHdp
bGwganVzdCByZW5kZXIgdGhlIGNhcGl0YWwgbGV0dGVyIGJpZy4KLSAgICAgICAgICAgIFJlZlB0
cjxTaW1wbGVGb250RGF0YT4gdmFyaWFudEZvbnREYXRhID0gZGF0YS5mb250RGF0YS0+dmFyaWFu
dEZvbnREYXRhKGRlc2NyaXB0aW9uLCB2YXJpYW50KTsKLSAgICAgICAgICAgIGlmICghdmFyaWFu
dEZvbnREYXRhKQorICAgICAgICAgICAgUmVmUHRyPEZvbnQ+IHZhcmlhbnRGb250ID0gZGF0YS5m
b250LT52YXJpYW50Rm9udChkZXNjcmlwdGlvbiwgdmFyaWFudCk7CisgICAgICAgICAgICBpZiAo
IXZhcmlhbnRGb250KQogICAgICAgICAgICAgICAgIHJldHVybiBkYXRhOwogCi0gICAgICAgICAg
ICByZXR1cm4gdmFyaWFudEZvbnREYXRhLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYyk7CisgICAg
ICAgICAgICByZXR1cm4gdmFyaWFudEZvbnQtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjKTsKICAg
ICAgICAgfQogICAgIH0KIApAQCAtMzE1LDIzICszMTUsMjMgQEAgR2x5cGhEYXRhIEZvbnRHbHlw
aHM6OmdseXBoRGF0YUZvck5vcm1hbAogICAgICAgICBhdXRvJiBmb250UmFuZ2VzID0gcmVhbGl6
ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIGZhbGxiYWNrSW5kZXgpOwogICAgICAgICBp
ZiAoZm9udFJhbmdlcy5pc051bGwoKSkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBhdXRv
KiBzaW1wbGVGb250RGF0YSA9IGZvbnRSYW5nZXMuZm9udERhdGFGb3JDaGFyYWN0ZXIoYyk7Ci0g
ICAgICAgIGF1dG8qIHBhZ2UgPSBzaW1wbGVGb250RGF0YSA/IHNpbXBsZUZvbnREYXRhLT5nbHlw
aFBhZ2UocGFnZU51bWJlcikgOiBudWxscHRyOworICAgICAgICBhdXRvKiBmb250ID0gZm9udFJh
bmdlcy5mb250Rm9yQ2hhcmFjdGVyKGMpOworICAgICAgICBhdXRvKiBwYWdlID0gZm9udCA/IGZv
bnQtPmdseXBoUGFnZShwYWdlTnVtYmVyKSA6IG51bGxwdHI7CiAgICAgICAgIGlmICghcGFnZSkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBHbHlwaERhdGEgZGF0YSA9IHBhZ2UtPmds
eXBoRGF0YUZvckNoYXJhY3RlcihjKTsKLSAgICAgICAgaWYgKGRhdGEuZm9udERhdGEpIHsKLSAg
ICAgICAgICAgIGlmIChkYXRhLmZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigp
ID09IFZlcnRpY2FsICYmICFkYXRhLmZvbnREYXRhLT5pc1RleHRPcmllbnRhdGlvbkZhbGxiYWNr
KCkpIHsKKyAgICAgICAgaWYgKGRhdGEuZm9udCkgeworICAgICAgICAgICAgaWYgKGRhdGEuZm9u
dC0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCAmJiAhZGF0YS5mb250
LT5pc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKCkpIHsKICAgICAgICAgICAgICAgICBpZiAoIUZv
bnRDYXNjYWRlOjppc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGMpKQogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZ2x5cGhEYXRhRm9yTm9uQ0pLQ2hhcmFjdGVyV2l0aEdseXBoT3JpZW50YXRpb24o
YywgZGVzY3JpcHRpb24ubm9uQ0pLR2x5cGhPcmllbnRhdGlvbigpLCBkYXRhKTsKIAotICAgICAg
ICAgICAgICAgIGlmICghZGF0YS5mb250RGF0YS0+aGFzVmVydGljYWxHbHlwaHMoKSkgeworICAg
ICAgICAgICAgICAgIGlmICghZGF0YS5mb250LT5oYXNWZXJ0aWNhbEdseXBocygpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIC8vIFVzZSB0aGUgYnJva2VuIGlkZW9ncmFwaCBmb250IGRhdGEuIFRo
ZSBicm9rZW4gaWRlb2dyYXBoIGZvbnQgd2lsbCB1c2UgdGhlIGhvcml6b250YWwgd2lkdGggb2Yg
Z2x5cGhzCiAgICAgICAgICAgICAgICAgICAgIC8vIHRvIG1ha2Ugc3VyZSB5b3UgZ2V0IGEgc3F1
YXJlIChldmVuIGZvciBicm9rZW4gZ2x5cGhzIGxpa2Ugc3ltYm9scyB1c2VkIGZvciBwdW5jdHVh
dGlvbikuCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbHlwaERhdGFGb3JWYXJpYW50KGMs
IGRlc2NyaXB0aW9uLCBCcm9rZW5JZGVvZ3JhcGhWYXJpYW50LCBmYWxsYmFja0luZGV4KTsKICAg
ICAgICAgICAgICAgICB9CiAjaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgICAgICAgICAgICAgaWYg
KGRhdGEuZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLnN5bnRoZXRpY09ibGlxdWUoKSkKKyAgICAg
ICAgICAgICAgICBpZiAoZGF0YS5mb250LT5wbGF0Zm9ybURhdGEoKS5zeW50aGV0aWNPYmxpcXVl
KCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbHlwaERhdGFGb3JDSktDaGFyYWN0ZXJX
aXRob3V0U3ludGhldGljSXRhbGljKGMsIGRhdGEpOwogI2VuZGlmCiAgICAgICAgICAgICB9CkBA
IC0zNDUsMjcgKzM0NSwyNyBAQCBHbHlwaERhdGEgRm9udEdseXBoczo6Z2x5cGhEYXRhRm9yTm9y
bWFsCiAKIHN0YXRpYyBSZWZQdHI8R2x5cGhQYWdlPiBnbHlwaFBhZ2VGcm9tRm9udFJhbmdlcyh1
bnNpZ25lZCBwYWdlTnVtYmVyLCBjb25zdCBGb250UmFuZ2VzJiBmb250UmFuZ2VzKQogewotICAg
IGNvbnN0IFNpbXBsZUZvbnREYXRhKiBzaW1wbGVGb250RGF0YSA9IG51bGxwdHI7CisgICAgY29u
c3QgRm9udCogZm9udCA9IG51bGxwdHI7CiAgICAgVUNoYXIzMiBwYWdlUmFuZ2VGcm9tID0gcGFn
ZU51bWJlciAqIEdseXBoUGFnZTo6c2l6ZTsKICAgICBVQ2hhcjMyIHBhZ2VSYW5nZVRvID0gcGFn
ZVJhbmdlRnJvbSArIEdseXBoUGFnZTo6c2l6ZSAtIDE7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGZvbnRSYW5nZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgYXV0byYgcmFuZ2UgPSBm
b250UmFuZ2VzLnJhbmdlQXQoaSk7CiAgICAgICAgIGlmIChyYW5nZS50bygpKSB7CiAgICAgICAg
ICAgICBpZiAocmFuZ2UuZnJvbSgpIDw9IHBhZ2VSYW5nZUZyb20gJiYgcGFnZVJhbmdlVG8gPD0g
cmFuZ2UudG8oKSkKLSAgICAgICAgICAgICAgICBzaW1wbGVGb250RGF0YSA9ICZyYW5nZS5mb250
RGF0YSgpOworICAgICAgICAgICAgICAgIGZvbnQgPSAmcmFuZ2UuZm9udCgpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKCFzaW1wbGVGb250RGF0YSkKKyAg
ICBpZiAoIWZvbnQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgaWYgKHNpbXBsZUZv
bnREYXRhLT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsKQorICAgIGlm
IChmb250LT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBjb25zdF9jYXN0PEdseXBoUGFnZSo+KHNp
bXBsZUZvbnREYXRhLT5nbHlwaFBhZ2UocGFnZU51bWJlcikpOworICAgIHJldHVybiBjb25zdF9j
YXN0PEdseXBoUGFnZSo+KGZvbnQtPmdseXBoUGFnZShwYWdlTnVtYmVyKSk7CiB9CiAKLUdseXBo
RGF0YSBGb250R2x5cGhzOjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjLCBjb25zdCBG
b250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250RGF0YVZhcmlhbnQgdmFyaWFudCkKK0ds
eXBoRGF0YSBGb250R2x5cGhzOjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjLCBjb25z
dCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250VmFyaWFudCB2YXJpYW50KQogewog
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgQVNTRVJUKHZhcmlhbnQgIT0gQXV0b1Zh
cmlhbnQpOwpAQCAtMzgyLDE5ICszODIsMTkgQEAgR2x5cGhEYXRhIEZvbnRHbHlwaHM6OmdseXBo
RGF0YUZvckNoYXJhYwogICAgIEdseXBoRGF0YSBnbHlwaERhdGEgPSBjYWNoZWRQYWdlID8gY2Fj
aGVkUGFnZS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMpIDogR2x5cGhEYXRhKCk7CiAgICAgaWYg
KCFnbHlwaERhdGEuZ2x5cGgpIHsKICAgICAgICAgaWYgKCFjYWNoZWRQYWdlKQotICAgICAgICAg
ICAgY2FjaGVkUGFnZSA9IEdseXBoUGFnZTo6Y3JlYXRlRm9yTWl4ZWRGb250RGF0YSgpOworICAg
ICAgICAgICAgY2FjaGVkUGFnZSA9IEdseXBoUGFnZTo6Y3JlYXRlRm9yTWl4ZWRGb250cygpOwog
ICAgICAgICBlbHNlIGlmIChjYWNoZWRQYWdlLT5pc0ltbXV0YWJsZSgpKQotICAgICAgICAgICAg
Y2FjaGVkUGFnZSA9IEdseXBoUGFnZTo6Y3JlYXRlQ29weUZvck1peGVkRm9udERhdGEoKmNhY2hl
ZFBhZ2UpOworICAgICAgICAgICAgY2FjaGVkUGFnZSA9IEdseXBoUGFnZTo6Y3JlYXRlQ29weUZv
ck1peGVkRm9udHMoKmNhY2hlZFBhZ2UpOwogCiAgICAgICAgIGdseXBoRGF0YSA9IGdseXBoRGF0
YUZvck5vcm1hbFZhcmlhbnQoYywgZGVzY3JpcHRpb24pOwotICAgICAgICBjYWNoZWRQYWdlLT5z
ZXRHbHlwaERhdGFGb3JDaGFyYWN0ZXIoYywgZ2x5cGhEYXRhLmdseXBoLCBnbHlwaERhdGEuZm9u
dERhdGEpOworICAgICAgICBjYWNoZWRQYWdlLT5zZXRHbHlwaERhdGFGb3JDaGFyYWN0ZXIoYywg
Z2x5cGhEYXRhLmdseXBoLCBnbHlwaERhdGEuZm9udCk7CiAgICAgfQogICAgIHJldHVybiBnbHlw
aERhdGE7CiB9CiAKIHZvaWQgRm9udEdseXBoczo6cHJ1bmVTeXN0ZW1GYWxsYmFja3MoKQogewot
ICAgIGlmIChtX3N5c3RlbUZhbGxiYWNrRm9udERhdGFTZXQuaXNFbXB0eSgpKQorICAgIGlmICht
X3N5c3RlbUZhbGxiYWNrRm9udFNldC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICAv
LyBNdXRhYmxlIGdseXBoIHBhZ2VzIG1heSByZWZlcmVuY2UgZmFsbGJhY2sgZm9udHMuCiAgICAg
aWYgKG1fY2FjaGVkUGFnZVplcm8gJiYgIW1fY2FjaGVkUGFnZVplcm8tPmlzSW1tdXRhYmxlKCkp
CkBAIC00MDIsNyArNDAyLDcgQEAgdm9pZCBGb250R2x5cGhzOjpwcnVuZVN5c3RlbUZhbGxiYWNr
cygpCiAgICAgbV9jYWNoZWRQYWdlcy5yZW1vdmVJZihbXShkZWNsdHlwZShtX2NhY2hlZFBhZ2Vz
KTo6S2V5VmFsdWVQYWlyVHlwZSYga2V5QW5kVmFsdWUpIHsKICAgICAgICAgcmV0dXJuICFrZXlB
bmRWYWx1ZS52YWx1ZS0+aXNJbW11dGFibGUoKTsKICAgICB9KTsKLSAgICBtX3N5c3RlbUZhbGxi
YWNrRm9udERhdGFTZXQuY2xlYXIoKTsKKyAgICBtX3N5c3RlbUZhbGxiYWNrRm9udFNldC5jbGVh
cigpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
R2x5cGhzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udEdseXBocy5oCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250R2x5cGhzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDEwICsyMSwxMCBA
QAogI2lmbmRlZiBGb250R2x5cGhzX2gKICNkZWZpbmUgRm9udEdseXBoc19oCiAKKyNpbmNsdWRl
ICJGb250LmgiCiAjaW5jbHVkZSAiRm9udFJhbmdlcy5oIgogI2luY2x1ZGUgIkZvbnRTZWxlY3Rv
ci5oIgogI2luY2x1ZGUgIkdseXBoUGFnZS5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgi
CiAjaW5jbHVkZSAiV2lkdGhDYWNoZS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5j
bHVkZSA8d3RmL01haW5UaHJlYWQuaD4KQEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgogCiAgICAg
Ym9vbCBpc0ZvclBsYXRmb3JtRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1faXNGb3JQbGF0Zm9ybUZv
bnQ7IH0KIAotICAgIEdseXBoRGF0YSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiwgY29u
c3QgRm9udERlc2NyaXB0aW9uJiwgRm9udERhdGFWYXJpYW50KTsKKyAgICBHbHlwaERhdGEgZ2x5
cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIEZvbnRW
YXJpYW50KTsKIAogICAgIGJvb2wgaXNGaXhlZFBpdGNoKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYp
OwogICAgIHZvaWQgZGV0ZXJtaW5lUGl0Y2goY29uc3QgRm9udERlc2NyaXB0aW9uJik7CkBAIC02
Niw3ICs2Niw3IEBAIHB1YmxpYzoKICAgICBXaWR0aENhY2hlJiB3aWR0aENhY2hlKCkgeyByZXR1
cm4gbV93aWR0aENhY2hlOyB9CiAgICAgY29uc3QgV2lkdGhDYWNoZSYgd2lkdGhDYWNoZSgpIGNv
bnN0IHsgcmV0dXJuIG1fd2lkdGhDYWNoZTsgfQogCi0gICAgY29uc3QgU2ltcGxlRm9udERhdGEm
IHByaW1hcnlTaW1wbGVGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mKTsKKyAgICBjb25z
dCBGb250JiBwcmltYXJ5Rm9udChjb25zdCBGb250RGVzY3JpcHRpb24mKTsKICAgICBXRUJDT1JF
X0VYUE9SVCBjb25zdCBGb250UmFuZ2VzJiByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChjb25zdCBG
b250RGVzY3JpcHRpb24mLCB1bnNpZ25lZCBmYWxsYmFja0luZGV4KTsKIAogICAgIHZvaWQgcHJ1
bmVTeXN0ZW1GYWxsYmFja3MoKTsKQEAgLTc1LDkgKzc1LDkgQEAgcHJpdmF0ZToKICAgICBGb250
R2x5cGhzKFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPik7CiAgICAgRm9udEdseXBocyhjb25zdCBG
b250UGxhdGZvcm1EYXRhJik7CiAKLSAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yU3lzdGVtRmFs
bGJhY2soVUNoYXIzMiwgY29uc3QgRm9udERlc2NyaXB0aW9uJiwgRm9udERhdGFWYXJpYW50KTsK
KyAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yU3lzdGVtRmFsbGJhY2soVUNoYXIzMiwgY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiwgRm9udFZhcmlhbnQpOwogICAgIEdseXBoRGF0YSBnbHlwaERhdGFG
b3JOb3JtYWxWYXJpYW50KFVDaGFyMzIsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpOwotICAgIEds
eXBoRGF0YSBnbHlwaERhdGFGb3JWYXJpYW50KFVDaGFyMzIsIGNvbnN0IEZvbnREZXNjcmlwdGlv
biYsIEZvbnREYXRhVmFyaWFudCwgdW5zaWduZWQgZmFsbGJhY2tJbmRleCk7CisgICAgR2x5cGhE
YXRhIGdseXBoRGF0YUZvclZhcmlhbnQoVUNoYXIzMiwgY29uc3QgRm9udERlc2NyaXB0aW9uJiwg
Rm9udFZhcmlhbnQsIHVuc2lnbmVkIGZhbGxiYWNrSW5kZXgpOwogCiAgICAgVmVjdG9yPEZvbnRS
YW5nZXMsIDE+IG1fcmVhbGl6ZWRGYWxsYmFja1JhbmdlczsKICAgICB1bnNpZ25lZCBtX2xhc3RS
ZWFsaXplZEZhbGxiYWNrSW5kZXggeyAwIH07CkBAIC04NSw5ICs4NSw5IEBAIHByaXZhdGU6CiAg
ICAgUmVmUHRyPEdseXBoUGFnZT4gbV9jYWNoZWRQYWdlWmVybzsKICAgICBIYXNoTWFwPGludCwg
UmVmUHRyPEdseXBoUGFnZT4+IG1fY2FjaGVkUGFnZXM7CiAKLSAgICBIYXNoU2V0PFJlZlB0cjxT
aW1wbGVGb250RGF0YT4+IG1fc3lzdGVtRmFsbGJhY2tGb250RGF0YVNldDsKKyAgICBIYXNoU2V0
PFJlZlB0cjxGb250Pj4gbV9zeXN0ZW1GYWxsYmFja0ZvbnRTZXQ7CiAKLSAgICBjb25zdCBTaW1w
bGVGb250RGF0YSogbV9jYWNoZWRQcmltYXJ5U2ltcGxlRm9udERhdGE7CisgICAgY29uc3QgRm9u
dCogbV9jYWNoZWRQcmltYXJ5Rm9udDsKICAgICBSZWZQdHI8Rm9udFNlbGVjdG9yPiBtX2ZvbnRT
ZWxlY3RvcjsKIAogICAgIFdpZHRoQ2FjaGUgbV93aWR0aENhY2hlOwpAQCAtMTA1LDE2ICsxMDUs
MTYgQEAgaW5saW5lIGJvb2wgRm9udEdseXBoczo6aXNGaXhlZFBpdGNoKGNvbgogICAgIHJldHVy
biBtX3BpdGNoID09IEZpeGVkUGl0Y2g7CiB9OwogCi1pbmxpbmUgY29uc3QgU2ltcGxlRm9udERh
dGEmIEZvbnRHbHlwaHM6OnByaW1hcnlTaW1wbGVGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRp
b24mIGRlc2NyaXB0aW9uKQoraW5saW5lIGNvbnN0IEZvbnQmIEZvbnRHbHlwaHM6OnByaW1hcnlG
b250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCiB7CiAgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKLSAgICBpZiAoIW1fY2FjaGVkUHJpbWFyeVNpbXBsZUZvbnREYXRhKSB7
CisgICAgaWYgKCFtX2NhY2hlZFByaW1hcnlGb250KSB7CiAgICAgICAgIGF1dG8mIHByaW1hcnlS
YW5nZXMgPSByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChkZXNjcmlwdGlvbiwgMCk7Ci0gICAgICAg
IG1fY2FjaGVkUHJpbWFyeVNpbXBsZUZvbnREYXRhID0gcHJpbWFyeVJhbmdlcy5mb250RGF0YUZv
ckNoYXJhY3RlcignICcpOwotICAgICAgICBpZiAoIW1fY2FjaGVkUHJpbWFyeVNpbXBsZUZvbnRE
YXRhKQotICAgICAgICAgICAgbV9jYWNoZWRQcmltYXJ5U2ltcGxlRm9udERhdGEgPSAmcHJpbWFy
eVJhbmdlcy5mb250RGF0YUZvckZpcnN0UmFuZ2UoKTsKKyAgICAgICAgbV9jYWNoZWRQcmltYXJ5
Rm9udCA9IHByaW1hcnlSYW5nZXMuZm9udEZvckNoYXJhY3RlcignICcpOworICAgICAgICBpZiAo
IW1fY2FjaGVkUHJpbWFyeUZvbnQpCisgICAgICAgICAgICBtX2NhY2hlZFByaW1hcnlGb250ID0g
JnByaW1hcnlSYW5nZXMuZm9udEZvckZpcnN0UmFuZ2UoKTsKICAgICB9Ci0gICAgcmV0dXJuICpt
X2NhY2hlZFByaW1hcnlTaW1wbGVGb250RGF0YTsKKyAgICByZXR1cm4gKm1fY2FjaGVkUHJpbWFy
eUZvbnQ7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRNZXRyaWNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udE1ldHJpY3MuaAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udE1ldHJpY3MuaAkod29ya2luZyBjb3B5KQpAQCAtMTMzLDcgKzEz
Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEhhc1plcm9XaWR0aChib29sIGhhc1plcm9XaWR0
aCkgeyBtX2hhc1plcm9XaWR0aCA9IGhhc1plcm9XaWR0aDsgfQogCiBwcml2YXRlOgotICAgIGZy
aWVuZCBjbGFzcyBTaW1wbGVGb250RGF0YTsKKyAgICBmcmllbmQgY2xhc3MgRm9udDsKIAogICAg
IHZvaWQgcmVzZXQoKQogICAgIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRSYW5nZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRSYW5nZXMuY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UmFuZ2VzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZvbnRSYW5nZXMu
aCIKIAotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisjaW5jbHVkZSAiRm9udC5oIgogI2lu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAKQEAgLTM2LDM0ICszNiwzNCBAQCBGb250UmFuZ2VzOjpGb250UmFuZ2VzKCkKIHsKIH0KIAot
Rm9udFJhbmdlczo6Rm9udFJhbmdlcyhSZWZQdHI8U2ltcGxlRm9udERhdGE+JiYgZm9udERhdGEp
CitGb250UmFuZ2VzOjpGb250UmFuZ2VzKFJlZlB0cjxGb250PiYmIGZvbnQpCiB7Ci0gICAgaWYg
KGZvbnREYXRhKQotICAgICAgICBtX3Jhbmdlcy5hcHBlbmQoUmFuZ2UgeyAwLCAweDdGRkZGRkZG
LCBmb250RGF0YS5yZWxlYXNlTm9uTnVsbCgpIH0pOworICAgIGlmIChmb250KQorICAgICAgICBt
X3Jhbmdlcy5hcHBlbmQoUmFuZ2UgeyAwLCAweDdGRkZGRkZGLCBmb250LnJlbGVhc2VOb25OdWxs
KCkgfSk7CiB9CiAKIEZvbnRSYW5nZXM6On5Gb250UmFuZ2VzKCkKIHsKIH0KIAotY29uc3QgU2lt
cGxlRm9udERhdGEqIEZvbnRSYW5nZXM6OmZvbnREYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYykg
Y29uc3QKK2NvbnN0IEZvbnQqIEZvbnRSYW5nZXM6OmZvbnRGb3JDaGFyYWN0ZXIoVUNoYXIzMiBj
KSBjb25zdAogewogICAgIGZvciAoYXV0byYgcmFuZ2UgOiBtX3JhbmdlcykgewogICAgICAgICBp
ZiAocmFuZ2UuZnJvbSgpIDw9IGMgJiYgYyA8PSByYW5nZS50bygpKQotICAgICAgICAgICAgcmV0
dXJuICZyYW5nZS5mb250RGF0YSgpOworICAgICAgICAgICAgcmV0dXJuICZyYW5nZS5mb250KCk7
CiAgICAgfQogICAgIHJldHVybiBudWxscHRyOwogfQogCi1jb25zdCBTaW1wbGVGb250RGF0YSYg
Rm9udFJhbmdlczo6Zm9udERhdGFGb3JGaXJzdFJhbmdlKCkgY29uc3QKK2NvbnN0IEZvbnQmIEZv
bnRSYW5nZXM6OmZvbnRGb3JGaXJzdFJhbmdlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9yYW5n
ZXNbMF0uZm9udERhdGEoKTsKKyAgICByZXR1cm4gbV9yYW5nZXNbMF0uZm9udCgpOwogfQogCiBi
b29sIEZvbnRSYW5nZXM6OmlzTG9hZGluZygpIGNvbnN0CiB7CiAgICAgZm9yIChhdXRvJiByYW5n
ZSA6IG1fcmFuZ2VzKSB7Ci0gICAgICAgIGlmIChyYW5nZS5mb250RGF0YSgpLmlzTG9hZGluZygp
KQorICAgICAgICBpZiAocmFuZ2UuZm9udCgpLmlzTG9hZGluZygpKQogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRSYW5nZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UmFuZ2VzLmgJKHJldmlzaW9uIDE3ODg1NykKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRSYW5nZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBGb250UmFuZ2VzX2gKICNkZWZpbmUgRm9u
dFJhbmdlc19oCiAKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgorI2luY2x1ZGUgIkZvbnQu
aCIKICNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgog
CkBAIC0zNSwyNSArMzUsMjUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgRm9udFJhbmdl
cyB7CiBwdWJsaWM6CiAgICAgc3RydWN0IFJhbmdlIHsKLSAgICAgICAgUmFuZ2UoVUNoYXIzMiBm
cm9tLCBVQ2hhcjMyIHRvLCBSZWY8U2ltcGxlRm9udERhdGE+JiYgZm9udERhdGEpCisgICAgICAg
IFJhbmdlKFVDaGFyMzIgZnJvbSwgVUNoYXIzMiB0bywgUmVmPEZvbnQ+JiYgZm9udCkKICAgICAg
ICAgICAgIDogbV9mcm9tKGZyb20pCiAgICAgICAgICAgICAsIG1fdG8odG8pCi0gICAgICAgICAg
ICAsIG1fZm9udERhdGEoV1RGOjptb3ZlKGZvbnREYXRhKSkKKyAgICAgICAgICAgICwgbV9mb250
KFdURjo6bW92ZShmb250KSkKICAgICAgICAgewogICAgICAgICB9CiAKICAgICAgICAgVUNoYXIz
MiBmcm9tKCkgY29uc3QgeyByZXR1cm4gbV9mcm9tOyB9CiAgICAgICAgIFVDaGFyMzIgdG8oKSBj
b25zdCB7IHJldHVybiBtX3RvOyB9Ci0gICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhJiBmb250
RGF0YSgpIGNvbnN0IHsgcmV0dXJuICptX2ZvbnREYXRhOyB9CisgICAgICAgIGNvbnN0IEZvbnQm
IGZvbnQoKSBjb25zdCB7IHJldHVybiAqbV9mb250OyB9CiAKICAgICBwcml2YXRlOgogICAgICAg
ICBVQ2hhcjMyIG1fZnJvbTsKICAgICAgICAgVUNoYXIzMiBtX3RvOwotICAgICAgICBSZWZQdHI8
U2ltcGxlRm9udERhdGE+IG1fZm9udERhdGE7CisgICAgICAgIFJlZlB0cjxGb250PiBtX2ZvbnQ7
CiAgICAgfTsKIAogICAgIEZvbnRSYW5nZXMoKTsKLSAgICBleHBsaWNpdCBGb250UmFuZ2VzKFJl
ZlB0cjxTaW1wbGVGb250RGF0YT4mJik7CisgICAgZXhwbGljaXQgRm9udFJhbmdlcyhSZWZQdHI8
Rm9udD4mJik7CiAgICAgfkZvbnRSYW5nZXMoKTsKIAogICAgIGJvb2wgaXNOdWxsKCkgY29uc3Qg
eyByZXR1cm4gbV9yYW5nZXMuaXNFbXB0eSgpOyB9CkBAIC02Miw4ICs2Miw4IEBAIHB1YmxpYzoK
ICAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9yYW5nZXMuc2l6ZSgpOyB9CiAg
ICAgY29uc3QgUmFuZ2UmIHJhbmdlQXQodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9yYW5n
ZXNbaV07IH0KIAotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YUZvckNoYXJhY3Rl
cihVQ2hhcjMyKSBjb25zdDsKLSAgICBjb25zdCBTaW1wbGVGb250RGF0YSYgZm9udERhdGFGb3JG
aXJzdFJhbmdlKCkgY29uc3Q7CisgICAgY29uc3QgRm9udCogZm9udEZvckNoYXJhY3RlcihVQ2hh
cjMyKSBjb25zdDsKKyAgICBjb25zdCBGb250JiBmb250Rm9yRmlyc3RSYW5nZSgpIGNvbnN0Owog
ICAgIGJvb2wgaXNMb2FkaW5nKCkgY29uc3Q7CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3IuaAkocmV2aXNpb24gMTc4
ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFNlbGVjdG9yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQxLDkgKzQxLDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfkZv
bnRTZWxlY3RvcigpIHsgfQogCiAgICAgdmlydHVhbCBGb250UmFuZ2VzIGZvbnRSYW5nZXNGb3JG
YW1pbHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbWljU3RyaW5nJikgPSAwOwot
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gZmFsbGJhY2tGb250RGF0YUF0
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIHNpemVfdCkgPSAwOworICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxGb250PiBmYWxsYmFja0ZvbnRBdChjb25zdCBGb250RGVzY3JpcHRpb24mLCBzaXplX3Qp
ID0gMDsKIAotICAgIHZpcnR1YWwgc2l6ZV90IGZhbGxiYWNrRm9udERhdGFDb3VudCgpID0gMDsK
KyAgICB2aXJ0dWFsIHNpemVfdCBmYWxsYmFja0ZvbnRDb3VudCgpID0gMDsKICAgICB2aXJ0dWFs
IGJvb2wgcmVzb2x2ZXNGYW1pbHlGb3IoY29uc3QgRm9udERlc2NyaXB0aW9uJikgY29uc3QgPSAw
OwogCiAgICAgdmlydHVhbCB2b2lkIGZvbnRDYWNoZUludmFsaWRhdGVkKCkgeyB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaEJ1ZmZlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoQnVmZmVyLmgJKHJldmlz
aW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoQnVm
ZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1jbGFzcyBTaW1wbGVGb250RGF0YTsKK2NsYXNzIEZvbnQ7CiAKICNpZiBVU0UoQ0FJ
Uk8pCiAvLyBGSVhNRTogV2h5IGRvZXMgQ2Fpcm8gdXNlIHN1Y2ggYSBodWdlIHN0cnVjdCBpbnN0
ZWFkIG9mIGp1c3QgYW4gb2Zmc2V0IGludG8gYW4gYXJyYXk/CkBAIC03NiwxMiArNzYsMTIgQEAg
dHlwZWRlZiBGbG9hdFNpemUgR2x5cGhCdWZmZXJBZHZhbmNlOwogCiBjbGFzcyBHbHlwaEJ1ZmZl
ciB7CiBwdWJsaWM6Ci0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9mb250RGF0
YS5pc0VtcHR5KCk7IH0KLSAgICBpbnQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERhdGEu
c2l6ZSgpOyB9CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9mb250LmlzRW1w
dHkoKTsgfQorICAgIGludCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9mb250LnNpemUoKTsgfQog
ICAgIAogICAgIHZvaWQgY2xlYXIoKQogICAgIHsKLSAgICAgICAgbV9mb250RGF0YS5jbGVhcigp
OworICAgICAgICBtX2ZvbnQuY2xlYXIoKTsKICAgICAgICAgbV9nbHlwaHMuY2xlYXIoKTsKICAg
ICAgICAgbV9hZHZhbmNlcy5jbGVhcigpOwogICAgICAgICBpZiAobV9vZmZzZXRzSW5TdHJpbmcp
CkBAIC05Niw3ICs5Niw3IEBAIHB1YmxpYzoKICAgICBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBn
bHlwaHMoaW50IGZyb20pIGNvbnN0IHsgcmV0dXJuIG1fZ2x5cGhzLmRhdGEoKSArIGZyb207IH0K
ICAgICBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzKGludCBmcm9tKSBjb25zdCB7
IHJldHVybiBtX2FkdmFuY2VzLmRhdGEoKSArIGZyb207IH0KIAotICAgIGNvbnN0IFNpbXBsZUZv
bnREYXRhKiBmb250RGF0YUF0KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9mb250RGF0YVtp
bmRleF07IH0KKyAgICBjb25zdCBGb250KiBmb250QXQoaW50IGluZGV4KSBjb25zdCB7IHJldHVy
biBtX2ZvbnRbaW5kZXhdOyB9CiAKICAgICB2b2lkIHNldEluaXRpYWxBZHZhbmNlKEdseXBoQnVm
ZmVyQWR2YW5jZSBpbml0aWFsQWR2YW5jZSkgeyBtX2luaXRpYWxBZHZhbmNlID0gaW5pdGlhbEFk
dmFuY2U7IH0KICAgICBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UmIGluaXRpYWxBZHZhbmNlKCkg
Y29uc3QgeyByZXR1cm4gbV9pbml0aWFsQWR2YW5jZTsgfQpAQCAtMTI2LDkgKzEyNiw5IEBAIHB1
YmxpYzoKICAgICB9CiAgICAgCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG5vT2Zmc2V0ID0g
VUlOVF9NQVg7Ci0gICAgdm9pZCBhZGQoR2x5cGggZ2x5cGgsIGNvbnN0IFNpbXBsZUZvbnREYXRh
KiBmb250LCBmbG9hdCB3aWR0aCwgdW5zaWduZWQgb2Zmc2V0SW5TdHJpbmcgPSBub09mZnNldCwg
Y29uc3QgRmxvYXRTaXplKiBvZmZzZXQgPSAwKQorICAgIHZvaWQgYWRkKEdseXBoIGdseXBoLCBj
b25zdCBGb250KiBmb250LCBmbG9hdCB3aWR0aCwgdW5zaWduZWQgb2Zmc2V0SW5TdHJpbmcgPSBu
b09mZnNldCwgY29uc3QgRmxvYXRTaXplKiBvZmZzZXQgPSAwKQogICAgIHsKLSAgICAgICAgbV9m
b250RGF0YS5hcHBlbmQoZm9udCk7CisgICAgICAgIG1fZm9udC5hcHBlbmQoZm9udCk7CiAKICNp
ZiBVU0UoQ0FJUk8pCiAgICAgICAgIGNhaXJvX2dseXBoX3QgY2Fpcm9HbHlwaDsKQEAgLTE1OSw5
ICsxNTksOSBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogI2lmICFVU0UoV0lOR0RJKQotICAgIHZv
aWQgYWRkKEdseXBoIGdseXBoLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgR2x5cGhCdWZm
ZXJBZHZhbmNlIGFkdmFuY2UsIHVuc2lnbmVkIG9mZnNldEluU3RyaW5nID0gbm9PZmZzZXQpCisg
ICAgdm9pZCBhZGQoR2x5cGggZ2x5cGgsIGNvbnN0IEZvbnQqIGZvbnQsIEdseXBoQnVmZmVyQWR2
YW5jZSBhZHZhbmNlLCB1bnNpZ25lZCBvZmZzZXRJblN0cmluZyA9IG5vT2Zmc2V0KQogICAgIHsK
LSAgICAgICAgbV9mb250RGF0YS5hcHBlbmQoZm9udCk7CisgICAgICAgIG1fZm9udC5hcHBlbmQo
Zm9udCk7CiAjaWYgVVNFKENBSVJPKQogICAgICAgICBjYWlyb19nbHlwaF90IGNhaXJvR2x5cGg7
CiAgICAgICAgIGNhaXJvR2x5cGguaW5kZXggPSBnbHlwaDsKQEAgLTIwNSw5ICsyMDUsOSBAQCBw
dWJsaWM6CiBwcml2YXRlOgogICAgIHZvaWQgc3dhcChpbnQgaW5kZXgxLCBpbnQgaW5kZXgyKQog
ICAgIHsKLSAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGYgPSBtX2ZvbnREYXRhW2luZGV4
MV07Ci0gICAgICAgIG1fZm9udERhdGFbaW5kZXgxXSA9IG1fZm9udERhdGFbaW5kZXgyXTsKLSAg
ICAgICAgbV9mb250RGF0YVtpbmRleDJdID0gZjsKKyAgICAgICAgY29uc3QgRm9udCogZiA9IG1f
Zm9udFtpbmRleDFdOworICAgICAgICBtX2ZvbnRbaW5kZXgxXSA9IG1fZm9udFtpbmRleDJdOwor
ICAgICAgICBtX2ZvbnRbaW5kZXgyXSA9IGY7CiAKICAgICAgICAgR2x5cGhCdWZmZXJHbHlwaCBn
ID0gbV9nbHlwaHNbaW5kZXgxXTsKICAgICAgICAgbV9nbHlwaHNbaW5kZXgxXSA9IG1fZ2x5cGhz
W2luZGV4Ml07CkBAIC0yMjQsNyArMjI0LDcgQEAgcHJpdmF0ZToKICNlbmRpZgogICAgIH0KIAot
ICAgIFZlY3Rvcjxjb25zdCBTaW1wbGVGb250RGF0YSosIDIwNDg+IG1fZm9udERhdGE7CisgICAg
VmVjdG9yPGNvbnN0IEZvbnQqLCAyMDQ4PiBtX2ZvbnQ7CiAgICAgVmVjdG9yPEdseXBoQnVmZmVy
R2x5cGgsIDIwNDg+IG1fZ2x5cGhzOwogICAgIFZlY3RvcjxHbHlwaEJ1ZmZlckFkdmFuY2UsIDIw
NDg+IG1fYWR2YW5jZXM7CiAgICAgR2x5cGhCdWZmZXJBZHZhbmNlIG1faW5pdGlhbEFkdmFuY2U7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2UuaAko
cmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5
cGhQYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDE4ICszOSwxOCBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLWNsYXNzIFNpbXBsZUZvbnREYXRhOworY2xhc3MgRm9udDsKIAotLy8gSG9s
ZHMgdGhlIGdseXBoIGluZGV4IGFuZCB0aGUgY29ycmVzcG9uZGluZyBTaW1wbGVGb250RGF0YSBp
bmZvcm1hdGlvbiBmb3IgYSBnaXZlbgorLy8gSG9sZHMgdGhlIGdseXBoIGluZGV4IGFuZCB0aGUg
Y29ycmVzcG9uZGluZyBGb250IGluZm9ybWF0aW9uIGZvciBhIGdpdmVuCiAvLyBjaGFyYWN0ZXIu
CiBzdHJ1Y3QgR2x5cGhEYXRhIHsKLSAgICBHbHlwaERhdGEoR2x5cGggZyA9IDAsIGNvbnN0IFNp
bXBsZUZvbnREYXRhKiBmID0gMCkKKyAgICBHbHlwaERhdGEoR2x5cGggZyA9IDAsIGNvbnN0IEZv
bnQqIGYgPSAwKQogICAgICAgICA6IGdseXBoKGcpCi0gICAgICAgICwgZm9udERhdGEoZikKKyAg
ICAgICAgLCBmb250KGYpCiAgICAgewogICAgIH0KICAgICBHbHlwaCBnbHlwaDsKLSAgICBjb25z
dCBTaW1wbGVGb250RGF0YSogZm9udERhdGE7CisgICAgY29uc3QgRm9udCogZm9udDsKIH07CiAK
ICNpZiBDT01QSUxFUihNU1ZDKQpAQCAtNjYsMjQgKzY2LDI0IEBAIHN0cnVjdCBHbHlwaERhdGEg
ewogLy8gbWlzc2luZyBpbiB0aGUgcHJpbWFyeSBmb250LgogY2xhc3MgR2x5cGhQYWdlIDogcHVi
bGljIFJlZkNvdW50ZWQ8R2x5cGhQYWdlPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQ
dHI8R2x5cGhQYWdlPiBjcmVhdGVGb3JNaXhlZEZvbnREYXRhKCkKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxHbHlwaFBhZ2U+IGNyZWF0ZUZvck1peGVkRm9udHMoKQogICAgIHsKLSAgICAgICAgdm9p
ZCogc2xvdCA9IGZhc3RNYWxsb2Moc2l6ZW9mKEdseXBoUGFnZSkgKyBzaXplb2YoU2ltcGxlRm9u
dERhdGEqKSAqIEdseXBoUGFnZTo6c2l6ZSk7CisgICAgICAgIHZvaWQqIHNsb3QgPSBmYXN0TWFs
bG9jKHNpemVvZihHbHlwaFBhZ2UpICsgc2l6ZW9mKEZvbnQqKSAqIEdseXBoUGFnZTo6c2l6ZSk7
CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgKE5vdE51bGwsIHNsb3QpIEdseXBoUGFnZShu
dWxscHRyKSk7CiAgICAgfQogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8R2x5cGhQYWdlPiBjcmVh
dGVDb3B5Rm9yTWl4ZWRGb250RGF0YShjb25zdCBHbHlwaFBhZ2UmIG9yaWdpbmFsKQorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEdseXBoUGFnZT4gY3JlYXRlQ29weUZvck1peGVkRm9udHMoY29uc3Qg
R2x5cGhQYWdlJiBvcmlnaW5hbCkKICAgICB7Ci0gICAgICAgIFJlZlB0cjxHbHlwaFBhZ2U+IHBh
Z2UgPSBjcmVhdGVGb3JNaXhlZEZvbnREYXRhKCk7CisgICAgICAgIFJlZlB0cjxHbHlwaFBhZ2U+
IHBhZ2UgPSBjcmVhdGVGb3JNaXhlZEZvbnRzKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBHbHlwaFBhZ2U6OnNpemU7ICsraSkKICAgICAgICAgICAgIHBhZ2UtPnNldEdseXBo
RGF0YUZvckluZGV4KGksIG9yaWdpbmFsLmdseXBoRGF0YUZvckluZGV4KGkpKTsKICAgICAgICAg
cmV0dXJuIHBhZ2UucmVsZWFzZSgpOwogICAgIH0KIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEds
eXBoUGFnZT4gY3JlYXRlRm9yU2luZ2xlRm9udERhdGEoY29uc3QgU2ltcGxlRm9udERhdGEqIGZv
bnREYXRhKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdseXBoUGFnZT4gY3JlYXRlRm9yU2luZ2xl
Rm9udChjb25zdCBGb250KiBmb250KQogICAgIHsKLSAgICAgICAgQVNTRVJUKGZvbnREYXRhKTsK
LSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHbHlwaFBhZ2UoZm9udERhdGEpKTsKKyAgICAg
ICAgQVNTRVJUKGZvbnQpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdseXBoUGFnZShm
b250KSk7CiAgICAgfQogCiAgICAgfkdseXBoUGFnZSgpCkBAIC0xMTEsNyArMTExLDcgQEAgcHVi
bGljOgogICAgICAgICBHbHlwaCBnbHlwaCA9IG1fZ2x5cGhzW2luZGV4XTsKICAgICAgICAgaWYg
KGhhc1BlckdseXBoRm9udERhdGEoKSkKICAgICAgICAgICAgIHJldHVybiBHbHlwaERhdGEoZ2x5
cGgsIG1fcGVyR2x5cGhGb250RGF0YVtpbmRleF0pOwotICAgICAgICByZXR1cm4gR2x5cGhEYXRh
KGdseXBoLCBnbHlwaCA/IG1fZm9udERhdGFGb3JBbGxHbHlwaHMgOiAwKTsKKyAgICAgICAgcmV0
dXJuIEdseXBoRGF0YShnbHlwaCwgZ2x5cGggPyBtX2ZvbnRGb3JBbGxHbHlwaHMgOiAwKTsKICAg
ICB9CiAKICAgICBBTFdBWVNfSU5MSU5FIEdseXBoIGdseXBoQXQodW5zaWduZWQgaW5kZXgpIGNv
bnN0CkBAIC0xMjAsNjcgKzEyMCw2NyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2dseXBo
c1tpbmRleF07CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSBjb25zdCBTaW1wbGVGb250RGF0
YSogZm9udERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjKSBjb25zdAorICAgIEFMV0FZU19JTkxJ
TkUgY29uc3QgRm9udCogZm9udEZvckNoYXJhY3RlcihVQ2hhcjMyIGMpIGNvbnN0CiAgICAgewog
ICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGluZGV4Rm9yQ2hhcmFjdGVyKGMpOwogICAgICAgICBp
ZiAoaGFzUGVyR2x5cGhGb250RGF0YSgpKQogICAgICAgICAgICAgcmV0dXJuIG1fcGVyR2x5cGhG
b250RGF0YVtpbmRleF07Ci0gICAgICAgIHJldHVybiBtX2dseXBoc1tpbmRleF0gPyBtX2ZvbnRE
YXRhRm9yQWxsR2x5cGhzIDogMDsKKyAgICAgICAgcmV0dXJuIG1fZ2x5cGhzW2luZGV4XSA/IG1f
Zm9udEZvckFsbEdseXBocyA6IDA7CiAgICAgfQogCi0gICAgdm9pZCBzZXRHbHlwaERhdGFGb3JD
aGFyYWN0ZXIoVUNoYXIzMiBjLCBHbHlwaCBnLCBjb25zdCBTaW1wbGVGb250RGF0YSogZikKKyAg
ICB2b2lkIHNldEdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMsIEdseXBoIGcsIGNvbnN0
IEZvbnQqIGYpCiAgICAgewogICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChpbmRleEZvckNo
YXJhY3RlcihjKSwgZywgZik7CiAgICAgfQogCi0gICAgdm9pZCBzZXRHbHlwaERhdGFGb3JJbmRl
eCh1bnNpZ25lZCBpbmRleCwgR2x5cGggZ2x5cGgsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250
RGF0YSkKKyAgICB2b2lkIHNldEdseXBoRGF0YUZvckluZGV4KHVuc2lnbmVkIGluZGV4LCBHbHlw
aCBnbHlwaCwgY29uc3QgRm9udCogZm9udCkKICAgICB7CiAgICAgICAgIEFTU0VSVF9XSVRIX1NF
Q1VSSVRZX0lNUExJQ0FUSU9OKGluZGV4IDwgc2l6ZSk7CiAgICAgICAgIEFTU0VSVCghbV9pc0lt
bXV0YWJsZSk7CiAgICAgICAgIAogICAgICAgICBtX2dseXBoc1tpbmRleF0gPSBnbHlwaDsKIAot
ICAgICAgICAvLyBHbHlwaFBhZ2UgZ2V0dGVycyB3aWxsIGFsd2F5cyByZXR1cm4gYSBudWxsIFNp
bXBsZUZvbnREYXRhKiBmb3IgZ2x5cGggIzAgaWYgdGhlcmUncyBubyBwZXItZ2x5cGggZm9udCBh
cnJheS4KKyAgICAgICAgLy8gR2x5cGhQYWdlIGdldHRlcnMgd2lsbCBhbHdheXMgcmV0dXJuIGEg
bnVsbCBGb250KiBmb3IgZ2x5cGggIzAgaWYgdGhlcmUncyBubyBwZXItZ2x5cGggZm9udCBhcnJh
eS4KICAgICAgICAgaWYgKGhhc1BlckdseXBoRm9udERhdGEoKSkgewotICAgICAgICAgICAgbV9w
ZXJHbHlwaEZvbnREYXRhW2luZGV4XSA9IGdseXBoID8gZm9udERhdGEgOiAwOworICAgICAgICAg
ICAgbV9wZXJHbHlwaEZvbnREYXRhW2luZGV4XSA9IGdseXBoID8gZm9udCA6IDA7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICAvLyBBIHNpbmdsZS1mb250IEdseXBo
UGFnZSBhbHJlYWR5IGFzc2lnbmVkIG1fZm9udERhdGFGb3JBbGxHbHlwaHMgaW4gdGhlIGNvbnN0
cnVjdG9yLgotICAgICAgICBBU1NFUlQoIWdseXBoIHx8IGZvbnREYXRhID09IG1fZm9udERhdGFG
b3JBbGxHbHlwaHMpOworICAgICAgICAvLyBBIHNpbmdsZS1mb250IEdseXBoUGFnZSBhbHJlYWR5
IGFzc2lnbmVkIG1fZm9udEZvckFsbEdseXBocyBpbiB0aGUgY29uc3RydWN0b3IuCisgICAgICAg
IEFTU0VSVCghZ2x5cGggfHwgZm9udCA9PSBtX2ZvbnRGb3JBbGxHbHlwaHMpOwogICAgIH0KIAog
ICAgIHZvaWQgc2V0R2x5cGhEYXRhRm9ySW5kZXgodW5zaWduZWQgaW5kZXgsIGNvbnN0IEdseXBo
RGF0YSYgZ2x5cGhEYXRhKQogICAgIHsKLSAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgoaW5k
ZXgsIGdseXBoRGF0YS5nbHlwaCwgZ2x5cGhEYXRhLmZvbnREYXRhKTsKKyAgICAgICAgc2V0R2x5
cGhEYXRhRm9ySW5kZXgoaW5kZXgsIGdseXBoRGF0YS5nbHlwaCwgZ2x5cGhEYXRhLmZvbnQpOwog
ICAgIH0KIAogICAgIC8vIEltcGxlbWVudGVkIGJ5IHRoZSBwbGF0Zm9ybS4KLSAgICBib29sIGZp
bGwodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBjaGFyYWN0ZXJCdWZm
ZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgU2ltcGxlRm9udERhdGEqKTsKKyAgICBi
b29sIGZpbGwodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBjaGFyYWN0
ZXJCdWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgRm9udCopOwogI2lmIFBMQVRG
T1JNKENPQ09BKQotICAgIHN0YXRpYyBib29sIG1heVVzZU1peGVkRm9udERhdGFXaGVuRmlsbGlu
Zyhjb25zdCBVQ2hhciogY2hhcmFjdGVyQnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNv
bnN0IFNpbXBsZUZvbnREYXRhKik7CisgICAgc3RhdGljIGJvb2wgbWF5VXNlTWl4ZWRGb250c1do
ZW5GaWxsaW5nKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJCdWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxl
bmd0aCwgY29uc3QgRm9udCopOwogI2Vsc2UKLSAgICBzdGF0aWMgYm9vbCBtYXlVc2VNaXhlZEZv
bnREYXRhV2hlbkZpbGxpbmcoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCwgY29uc3QgU2ltcGxlRm9u
dERhdGEqKSB7IHJldHVybiBmYWxzZTsgfQorICAgIHN0YXRpYyBib29sIG1heVVzZU1peGVkRm9u
dHNXaGVuRmlsbGluZyhjb25zdCBVQ2hhciosIHVuc2lnbmVkLCBjb25zdCBGb250KikgeyByZXR1
cm4gZmFsc2U7IH0KICNlbmRpZgogCiBwcml2YXRlOgotICAgIGV4cGxpY2l0IEdseXBoUGFnZShj
b25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGFGb3JBbGxHbHlwaHMpCi0gICAgICAgIDogbV9m
b250RGF0YUZvckFsbEdseXBocyhmb250RGF0YUZvckFsbEdseXBocykKKyAgICBleHBsaWNpdCBH
bHlwaFBhZ2UoY29uc3QgRm9udCogZm9udEZvckFsbEdseXBocykKKyAgICAgICAgOiBtX2ZvbnRG
b3JBbGxHbHlwaHMoZm9udEZvckFsbEdseXBocykKICAgICB7CiAgICAgICAgIG1lbXNldChtX2ds
eXBocywgMCwgc2l6ZW9mKG1fZ2x5cGhzKSk7CiAgICAgICAgIGlmIChoYXNQZXJHbHlwaEZvbnRE
YXRhKCkpCi0gICAgICAgICAgICBtZW1zZXQobV9wZXJHbHlwaEZvbnREYXRhLCAwLCBzaXplb2Yo
U2ltcGxlRm9udERhdGEqKSAqIEdseXBoUGFnZTo6c2l6ZSk7CisgICAgICAgICAgICBtZW1zZXQo
bV9wZXJHbHlwaEZvbnREYXRhLCAwLCBzaXplb2YoRm9udCopICogR2x5cGhQYWdlOjpzaXplKTsK
ICAgICAgICAgKytzX2NvdW50OwogICAgIH0KIAotICAgIGJvb2wgaGFzUGVyR2x5cGhGb250RGF0
YSgpIGNvbnN0IHsgcmV0dXJuICFtX2ZvbnREYXRhRm9yQWxsR2x5cGhzOyB9CisgICAgYm9vbCBo
YXNQZXJHbHlwaEZvbnREYXRhKCkgY29uc3QgeyByZXR1cm4gIW1fZm9udEZvckFsbEdseXBoczsg
fQogCi0gICAgY29uc3QgU2ltcGxlRm9udERhdGEqIG1fZm9udERhdGFGb3JBbGxHbHlwaHM7Cisg
ICAgY29uc3QgRm9udCogbV9mb250Rm9yQWxsR2x5cGhzOwogICAgIEdseXBoIG1fZ2x5cGhzW3Np
emVdOwogCiAgICAgYm9vbCBtX2lzSW1tdXRhYmxlIHsgZmFsc2UgfTsKLSAgICAvLyBOT1RFOiBU
aGlzIGFycmF5IGhhcyAoR2x5cGhQYWdlOjpzaXplKSBlbGVtZW50cyBpZiBtX2ZvbnREYXRhRm9y
QWxsR2x5cGhzIGlzIG51bGwuCi0gICAgY29uc3QgU2ltcGxlRm9udERhdGEqIG1fcGVyR2x5cGhG
b250RGF0YVswXTsKKyAgICAvLyBOT1RFOiBUaGlzIGFycmF5IGhhcyAoR2x5cGhQYWdlOjpzaXpl
KSBlbGVtZW50cyBpZiBtX2ZvbnRGb3JBbGxHbHlwaHMgaXMgbnVsbC4KKyAgICBjb25zdCBGb250
KiBtX3BlckdseXBoRm9udERhdGFbMF07CiAKICAgICBzdGF0aWMgdW5zaWduZWQgc19jb3VudDsK
IH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dC5jcHAJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0
OCwxMiArNDQ4LDEyIEBAIGZsb2F0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RleHQoY29uc3QgRm8K
IH0KICNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0dseXBocyhjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgU2ltcGxlRm9udERhdGEmIGZv
bnREYXRhLCBjb25zdCBHbHlwaEJ1ZmZlciYgYnVmZmVyLCBpbnQgZnJvbSwgaW50IG51bUdseXBo
cywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ds
eXBocyhjb25zdCBGb250Q2FzY2FkZSYgZm9udENhc2NhZGUsIGNvbnN0IEZvbnQmIGZvbnQsIGNv
bnN0IEdseXBoQnVmZmVyJiBidWZmZXIsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBG
bG9hdFBvaW50JiBwb2ludCkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBmb250LmRyYXdHbHlwaHModGhpcywgJmZvbnREYXRhLCBidWZmZXIs
IGZyb20sIG51bUdseXBocywgcG9pbnQpOworICAgIGZvbnRDYXNjYWRlLmRyYXdHbHlwaHModGhp
cywgJmZvbnQsIGJ1ZmZlciwgZnJvbSwgbnVtR2x5cGhzLCBwb2ludCk7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYgZm9udCwg
Y29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgJKHJldmlzaW9uIDE3ODg1
NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5o
CSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
I2lmIFVTRShXSU5HREkpCiAgICAgY2xhc3MgU2hhcmVkQml0bWFwOwotICAgIGNsYXNzIFNpbXBs
ZUZvbnREYXRhOworICAgIGNsYXNzIEZvbnQ7CiAgICAgY2xhc3MgR2x5cGhCdWZmZXI7CiAjZW5k
aWYKIApAQCAtMzYwLDcgKzM2MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNlbHNlCiAgICAg
ICAgIGZsb2F0IGRyYXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNv
bnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0xKTsKICNlbmRpZgotICAg
ICAgICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBTaW1wbGVGb250
RGF0YSYsIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0
IEZsb2F0UG9pbnQmKTsKKyAgICAgICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnRDYXNjYWRl
JiwgY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCBudW1HbHlw
aHMsIGNvbnN0IEZsb2F0UG9pbnQmKTsKICAgICAgICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrcyhj
b25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mICwgY29uc3QgQXRvbWljU3RyaW5nJiBt
YXJrLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSk7CiAjaWYg
IVBMQVRGT1JNKElPUykKICAgICAgICAgdm9pZCBkcmF3QmlkaVRleHQoY29uc3QgRm9udENhc2Nh
ZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRDYXNjYWRlOjpDdXN0
b21Gb250Tm90UmVhZHlBY3Rpb24gPSBGb250Q2FzY2FkZTo6RG9Ob3RQYWludElmRm9udE5vdFJl
YWR5KTsKQEAgLTQ3OSw3ICs0NzksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEFm
ZmluZVRyYW5zZm9ybSYgYWZmaW5lVHJhbnNmb3JtKCk7CiAgICAgICAgIHZvaWQgcmVzZXRBZmZp
bmVUcmFuc2Zvcm0oKTsKICAgICAgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBj
b25zdCBHcmFkaWVudCopOwotICAgICAgICB2b2lkIGRyYXdUZXh0KGNvbnN0IFNpbXBsZUZvbnRE
YXRhKiBmb250RGF0YSwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBpbnQgZnJvbSwg
aW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpOworICAgICAgICB2b2lkIGRy
YXdUZXh0KGNvbnN0IEZvbnQqLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBmcm9tLCBpbnQgbnVt
R2x5cGhzLCBjb25zdCBGbG9hdFBvaW50Jik7CiAgICAgICAgIHZvaWQgZHJhd0ZyYW1lQ29udHJv
bChjb25zdCBJbnRSZWN0JiByZWN0LCB1bnNpZ25lZCB0eXBlLCB1bnNpZ25lZCBzdGF0ZSk7CiAg
ICAgICAgIHZvaWQgZHJhd0ZvY3VzUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KTsKICAgICAgICAg
dm9pZCBwYWludFRleHRGaWVsZChjb25zdCBJbnRSZWN0JiByZWN0LCB1bnNpZ25lZCBzdGF0ZSk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxl
Rm9udERhdGEuY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNDU2ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDgsIDIwMTAsIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQ
cm9za3VyeWFrb3YKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUg
b2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0g
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgotCi0j
aWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05f
TUlOX1JFUVVJUkVEID4gMTA4MCkKLSNpbmNsdWRlICJDb3JlVGV4dFNQSS5oIgotI2VuZGlmCi0j
aW5jbHVkZSAiRm9udENhY2hlLmgiCi0jaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKLSNpbmNsdWRl
ICJPcGVuVHlwZU1hdGhEYXRhLmgiCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNs
dWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLQotI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNB
TCkKLSNpbmNsdWRlICJPcGVuVHlwZVZlcnRpY2FsRGF0YS5oIgotI2VuZGlmCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotdW5zaWduZWQgR2x5cGhQYWdlOjpzX2NvdW50ID0gMDsKLQotY29uc3Qg
ZmxvYXQgc21hbGxDYXBzRm9udFNpemVNdWx0aXBsaWVyID0gMC43ZjsKLWNvbnN0IGZsb2F0IGVt
cGhhc2lzTWFya0ZvbnRTaXplTXVsdGlwbGllciA9IDAuNWY7Ci0KLVNpbXBsZUZvbnREYXRhOjpT
aW1wbGVGb250RGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEsIGJvb2wg
aXNDdXN0b21Gb250LCBib29sIGlzTG9hZGluZywgYm9vbCBpc1RleHRPcmllbnRhdGlvbkZhbGxi
YWNrKQotICAgIDogbV9tYXhDaGFyV2lkdGgoLTEpCi0gICAgLCBtX2F2Z0NoYXJXaWR0aCgtMSkK
LSAgICAsIG1fcGxhdGZvcm1EYXRhKHBsYXRmb3JtRGF0YSkKLSAgICAsIG1fdHJlYXRBc0ZpeGVk
UGl0Y2goZmFsc2UpCi0gICAgLCBtX2lzQ3VzdG9tRm9udChpc0N1c3RvbUZvbnQpCi0gICAgLCBt
X2lzTG9hZGluZyhpc0xvYWRpbmcpCi0gICAgLCBtX2lzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2so
aXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaykKLSAgICAsIG1faXNCcm9rZW5JZGVvZ3JhcGhGYWxs
YmFjayhmYWxzZSkKLSAgICAsIG1fbWF0aERhdGEobnVsbHB0cikKLSNpZiBFTkFCTEUoT1BFTlRZ
UEVfVkVSVElDQUwpCi0gICAgLCBtX3ZlcnRpY2FsRGF0YSgwKQotI2VuZGlmCi0gICAgLCBtX2hh
c1ZlcnRpY2FsR2x5cGhzKGZhbHNlKQotewotICAgIHBsYXRmb3JtSW5pdCgpOwotICAgIHBsYXRm
b3JtR2x5cGhJbml0KCk7Ci0gICAgcGxhdGZvcm1DaGFyV2lkdGhJbml0KCk7Ci0jaWYgRU5BQkxF
KE9QRU5UWVBFX1ZFUlRJQ0FMKQotICAgIGlmIChwbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSA9
PSBWZXJ0aWNhbCAmJiAhaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaykgewotICAgICAgICBtX3Zl
cnRpY2FsRGF0YSA9IHBsYXRmb3JtRGF0YS52ZXJ0aWNhbERhdGEoKTsKLSAgICAgICAgbV9oYXNW
ZXJ0aWNhbEdseXBocyA9IG1fdmVydGljYWxEYXRhLmdldCgpICYmIG1fdmVydGljYWxEYXRhLT5o
YXNWZXJ0aWNhbE1ldHJpY3MoKTsKLSAgICB9Ci0jZW5kaWYKLX0KLQotU2ltcGxlRm9udERhdGE6
OlNpbXBsZUZvbnREYXRhKHN0ZDo6dW5pcXVlX3B0cjxTVkdEYXRhPiBzdmdEYXRhLCBmbG9hdCBm
b250U2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYykKLSAgICA6
IG1fcGxhdGZvcm1EYXRhKEZvbnRQbGF0Zm9ybURhdGEoZm9udFNpemUsIHN5bnRoZXRpY0JvbGQs
IHN5bnRoZXRpY0l0YWxpYykpCi0gICAgLCBtX3N2Z0RhdGEoV1RGOjptb3ZlKHN2Z0RhdGEpKQot
ICAgICwgbV90cmVhdEFzRml4ZWRQaXRjaChmYWxzZSkKLSAgICAsIG1faXNDdXN0b21Gb250KHRy
dWUpCi0gICAgLCBtX2lzTG9hZGluZyhmYWxzZSkKLSAgICAsIG1faXNUZXh0T3JpZW50YXRpb25G
YWxsYmFjayhmYWxzZSkKLSAgICAsIG1faXNCcm9rZW5JZGVvZ3JhcGhGYWxsYmFjayhmYWxzZSkK
LSAgICAsIG1fbWF0aERhdGEobnVsbHB0cikKLSNpZiBFTkFCTEUoT1BFTlRZUEVfVkVSVElDQUwp
Ci0gICAgLCBtX3ZlcnRpY2FsRGF0YSgwKQotI2VuZGlmCi0gICAgLCBtX2hhc1ZlcnRpY2FsR2x5
cGhzKGZhbHNlKQotI2lmIFBMQVRGT1JNKElPUykKLSAgICAsIG1fc2hvdWxkTm90QmVVc2VkRm9y
QXJhYmljKGZhbHNlKQotI2VuZGlmCi17Ci0gICAgbV9zdmdEYXRhLT5pbml0aWFsaXplRm9udERh
dGEodGhpcywgZm9udFNpemUpOwotfQotCi0vLyBFc3RpbWF0ZXMgb2YgYXZnQ2hhcldpZHRoIGFu
ZCBtYXhDaGFyV2lkdGggZm9yIHBsYXRmb3JtcyB0aGF0IGRvbid0IHN1cHBvcnQgYWNjZXNzaW5n
IHRoZXNlIHZhbHVlcyBmcm9tIHRoZSBmb250Lgotdm9pZCBTaW1wbGVGb250RGF0YTo6aW5pdENo
YXJXaWR0aHMoKQotewotICAgIGF1dG8qIGdseXBoUGFnZVplcm8gPSBnbHlwaFBhZ2UoMCk7Ci0K
LSAgICAvLyBUcmVhdCB0aGUgd2lkdGggb2YgYSAnMCcgYXMgdGhlIGF2Z0NoYXJXaWR0aC4KLSAg
ICBpZiAobV9hdmdDaGFyV2lkdGggPD0gMC5mICYmIGdseXBoUGFnZVplcm8pIHsKLSAgICAgICAg
c3RhdGljIGNvbnN0IFVDaGFyMzIgZGlnaXRaZXJvQ2hhciA9ICcwJzsKLSAgICAgICAgR2x5cGgg
ZGlnaXRaZXJvR2x5cGggPSBnbHlwaFBhZ2VaZXJvLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoZGln
aXRaZXJvQ2hhcikuZ2x5cGg7Ci0gICAgICAgIGlmIChkaWdpdFplcm9HbHlwaCkKLSAgICAgICAg
ICAgIG1fYXZnQ2hhcldpZHRoID0gd2lkdGhGb3JHbHlwaChkaWdpdFplcm9HbHlwaCk7Ci0gICAg
fQotCi0gICAgLy8gSWYgd2UgY2FuJ3QgcmV0cmlldmUgdGhlIHdpZHRoIG9mIGEgJzAnLCBmYWxs
IGJhY2sgdG8gdGhlIHggaGVpZ2h0LgotICAgIGlmIChtX2F2Z0NoYXJXaWR0aCA8PSAwLmYpCi0g
ICAgICAgIG1fYXZnQ2hhcldpZHRoID0gbV9mb250TWV0cmljcy54SGVpZ2h0KCk7Ci0KLSAgICBp
ZiAobV9tYXhDaGFyV2lkdGggPD0gMC5mKQotICAgICAgICBtX21heENoYXJXaWR0aCA9IHN0ZDo6
bWF4KG1fYXZnQ2hhcldpZHRoLCBtX2ZvbnRNZXRyaWNzLmZsb2F0QXNjZW50KCkpOwotfQotCi12
b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUdseXBoSW5pdCgpCi17Ci0gICAgYXV0byogZ2x5
cGhQYWdlWmVybyA9IGdseXBoUGFnZSgwKTsKLSAgICBpZiAoIWdseXBoUGFnZVplcm8pIHsKLSAg
ICAgICAgbV9zcGFjZUdseXBoID0gMDsKLSAgICAgICAgbV9zcGFjZVdpZHRoID0gMDsKLSAgICAg
ICAgbV96ZXJvR2x5cGggPSAwOwotICAgICAgICBtX2FkanVzdGVkU3BhY2VXaWR0aCA9IDA7Ci0g
ICAgICAgIGRldGVybWluZVBpdGNoKCk7Ci0gICAgICAgIG1femVyb1dpZHRoU3BhY2VHbHlwaCA9
IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBBc2sgZm9yIHRoZSBnbHlwaCBm
b3IgMCB0byBhdm9pZCBwYWdpbmcgaW4gWkVSTyBXSURUSCBTUEFDRS4gQ29udHJvbCBjaGFyYWN0
ZXJzLCBpbmNsdWRpbmcgMCwKLSAgICAvLyBhcmUgbWFwcGVkIHRvIHRoZSBaRVJPIFdJRFRIIFNQ
QUNFIGdseXBoLgotICAgIG1femVyb1dpZHRoU3BhY2VHbHlwaCA9IGdseXBoUGFnZVplcm8tPmds
eXBoRGF0YUZvckNoYXJhY3RlcigwKS5nbHlwaDsKLQotICAgIC8vIE5hc3R5IGhhY2sgdG8gZGV0
ZXJtaW5lIGlmIHdlIHNob3VsZCByb3VuZCBvciBjZWlsIHNwYWNlIHdpZHRocy4KLSAgICAvLyBJ
ZiB0aGUgZm9udCBpcyBtb25vc3BhY2Ugb3IgZmFrZSBtb25vc3BhY2Ugd2UgY2VpbCB0byBlbnN1
cmUgdGhhdCAKLSAgICAvLyBldmVyeSBjaGFyYWN0ZXIgYW5kIHRoZSBzcGFjZSBhcmUgdGhlIHNh
bWUgd2lkdGguICBPdGhlcndpc2Ugd2Ugcm91bmQuCi0gICAgbV9zcGFjZUdseXBoID0gZ2x5cGhQ
YWdlWmVyby0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKCcgJykuZ2x5cGg7Ci0gICAgZmxvYXQgd2lk
dGggPSB3aWR0aEZvckdseXBoKG1fc3BhY2VHbHlwaCk7Ci0gICAgbV9zcGFjZVdpZHRoID0gd2lk
dGg7Ci0gICAgbV96ZXJvR2x5cGggPSBnbHlwaFBhZ2VaZXJvLT5nbHlwaERhdGFGb3JDaGFyYWN0
ZXIoJzAnKS5nbHlwaDsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldFplcm9XaWR0aCh3aWR0aEZvckds
eXBoKG1femVyb0dseXBoKSk7Ci0gICAgZGV0ZXJtaW5lUGl0Y2goKTsKLSAgICBtX2FkanVzdGVk
U3BhY2VXaWR0aCA9IG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPyBjZWlsZih3aWR0aCkgOiByb3VuZGYo
d2lkdGgpOwotCi0gICAgLy8gRm9yY2UgdGhlIGdseXBoIGZvciBaRVJPIFdJRFRIIFNQQUNFIHRv
IGhhdmUgemVybyB3aWR0aCwgdW5sZXNzIGl0IGlzIHNoYXJlZCB3aXRoIFNQQUNFLgotICAgIC8v
IEhlbHZldGljYSBpcyBhbiBleGFtcGxlIG9mIGEgbm9uLXplcm8gd2lkdGggWkVSTyBXSURUSCBT
UEFDRSBnbHlwaC4KLSAgICAvLyBTZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEzMTc4PiBhbmQgU2ltcGxlRm9udERhdGE6OmlzWmVyb1dpZHRoU3BhY2VHbHlwaCgp
Ci0gICAgaWYgKG1femVyb1dpZHRoU3BhY2VHbHlwaCA9PSBtX3NwYWNlR2x5cGgpCi0gICAgICAg
IG1femVyb1dpZHRoU3BhY2VHbHlwaCA9IDA7Ci19Ci0KLVNpbXBsZUZvbnREYXRhOjp+U2ltcGxl
Rm9udERhdGEoKQotewotICAgIHJlbW92ZUZyb21TeXN0ZW1GYWxsYmFja0NhY2hlKCk7Ci19Ci0K
LXN0YXRpYyBib29sIGZpbGxHbHlwaFBhZ2UoR2x5cGhQYWdlJiBwYWdlVG9GaWxsLCB1bnNpZ25l
ZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVy
TGVuZ3RoLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEpCi17Ci0jaWYgRU5BQkxFKFNW
R19GT05UUykKLSAgICBpZiAoYXV0byogc3ZnRGF0YSA9IGZvbnREYXRhLT5zdmdEYXRhKCkpCi0g
ICAgICAgIHJldHVybiBzdmdEYXRhLT5maWxsU1ZHR2x5cGhQYWdlKCZwYWdlVG9GaWxsLCBvZmZz
ZXQsIGxlbmd0aCwgYnVmZmVyLCBidWZmZXJMZW5ndGgsIGZvbnREYXRhKTsKLSNlbmRpZgotICAg
IGJvb2wgaGFzR2x5cGhzID0gcGFnZVRvRmlsbC5maWxsKG9mZnNldCwgbGVuZ3RoLCBidWZmZXIs
IGJ1ZmZlckxlbmd0aCwgZm9udERhdGEpOwotI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkK
LSAgICBpZiAoaGFzR2x5cGhzICYmIGZvbnREYXRhLT52ZXJ0aWNhbERhdGEoKSkKLSAgICAgICAg
Zm9udERhdGEtPnZlcnRpY2FsRGF0YSgpLT5zdWJzdGl0dXRlV2l0aFZlcnRpY2FsR2x5cGhzKGZv
bnREYXRhLCAmcGFnZVRvRmlsbCwgb2Zmc2V0LCBsZW5ndGgpOwotI2VuZGlmCi0gICAgcmV0dXJu
IGhhc0dseXBoczsKLX0KLQotc3RhdGljIFJlZlB0cjxHbHlwaFBhZ2U+IGNyZWF0ZUFuZEZpbGxH
bHlwaFBhZ2UodW5zaWduZWQgcGFnZU51bWJlciwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnRE
YXRhKQotewotI2lmIFBMQVRGT1JNKElPUykKLSAgICAvLyBGSVhNRTogVGltZXMgTmV3IFJvbWFu
IGNvbnRhaW5zIEFyYWJpYyBnbHlwaHMsIGJ1dCBDb3JlIFRleHQgZG9lc24ndCBrbm93IGhvdyB0
byBzaGFwZSB0aGVtLiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzk4MjM5NzU+LgotICAgIC8vIE9uY2Ug
d2UgaGF2ZSB0aGUgZml4IGZvciA8cmRhcjovL3Byb2JsZW0vOTgyMzk3NT4gdGhlbiByZW1vdmUg
dGhpcyBjb2RlIHRvZ2V0aGVyIHdpdGggU2ltcGxlRm9udERhdGE6OnNob3VsZE5vdEJlVXNlZEZv
ckFyYWJpYygpCi0gICAgLy8gaW4gPHJkYXI6Ly9wcm9ibGVtLzEyMDk2ODM1Pi4KLSAgICBpZiAo
cGFnZU51bWJlciA9PSA2ICYmIGZvbnREYXRhLT5zaG91bGROb3RCZVVzZWRGb3JBcmFiaWMoKSkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0jZW5kaWYKLQotICAgIHVuc2lnbmVkIHN0YXJ0ID0g
cGFnZU51bWJlciAqIEdseXBoUGFnZTo6c2l6ZTsKLSAgICBVQ2hhciBidWZmZXJbR2x5cGhQYWdl
OjpzaXplICogMiArIDJdOwotICAgIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aDsKLSAgICAvLyBGaWxs
IGluIGEgYnVmZmVyIHdpdGggdGhlIGVudGlyZSAicGFnZSIgb2YgY2hhcmFjdGVycyB0aGF0IHdl
IHdhbnQgdG8gbG9vayB1cCBnbHlwaHMgZm9yLgotICAgIGlmIChVX0lTX0JNUChzdGFydCkpIHsK
LSAgICAgICAgYnVmZmVyTGVuZ3RoID0gR2x5cGhQYWdlOjpzaXplOwotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgR2x5cGhQYWdlOjpzaXplOyBpKyspCi0gICAgICAgICAgICBidWZm
ZXJbaV0gPSBzdGFydCArIGk7Ci0KLSAgICAgICAgaWYgKHN0YXJ0ID09IDApIHsKLSAgICAgICAg
ICAgIC8vIENvbnRyb2wgY2hhcmFjdGVycyBtdXN0IG5vdCByZW5kZXIgYXQgYWxsLgotICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDB4MjA7ICsraSkKLSAgICAgICAgICAgICAg
ICBidWZmZXJbaV0gPSB6ZXJvV2lkdGhTcGFjZTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDB4N0Y7IGkgPCAweEEwOyBpKyspCi0gICAgICAgICAgICAgICAgYnVmZmVyW2ldID0gemVy
b1dpZHRoU3BhY2U7Ci0gICAgICAgICAgICBidWZmZXJbc29mdEh5cGhlbl0gPSB6ZXJvV2lkdGhT
cGFjZTsKLQotICAgICAgICAgICAgLy8gXG4sIFx0LCBhbmQgbm9uYnJlYWtpbmcgc3BhY2UgbXVz
dCByZW5kZXIgYXMgYSBzcGFjZS4KLSAgICAgICAgICAgIGJ1ZmZlclsoaW50KSdcbiddID0gJyAn
OwotICAgICAgICAgICAgYnVmZmVyWyhpbnQpJ1x0J10gPSAnICc7Ci0gICAgICAgICAgICBidWZm
ZXJbbm9CcmVha1NwYWNlXSA9ICcgJzsKLSAgICAgICAgfSBlbHNlIGlmIChzdGFydCA9PSAobGVm
dFRvUmlnaHRNYXJrICYgfihHbHlwaFBhZ2U6OnNpemUgLSAxKSkpIHsKLSAgICAgICAgICAgIC8v
IExSTSwgUkxNLCBMUkUsIFJMRSwgWldOSiwgWldKLCBhbmQgUERGIG11c3Qgbm90IHJlbmRlciBh
dCBhbGwuCi0gICAgICAgICAgICBidWZmZXJbbGVmdFRvUmlnaHRNYXJrIC0gc3RhcnRdID0gemVy
b1dpZHRoU3BhY2U7Ci0gICAgICAgICAgICBidWZmZXJbcmlnaHRUb0xlZnRNYXJrIC0gc3RhcnRd
ID0gemVyb1dpZHRoU3BhY2U7Ci0gICAgICAgICAgICBidWZmZXJbbGVmdFRvUmlnaHRFbWJlZCAt
IHN0YXJ0XSA9IHplcm9XaWR0aFNwYWNlOwotICAgICAgICAgICAgYnVmZmVyW3JpZ2h0VG9MZWZ0
RW1iZWQgLSBzdGFydF0gPSB6ZXJvV2lkdGhTcGFjZTsKLSAgICAgICAgICAgIGJ1ZmZlcltsZWZ0
VG9SaWdodE92ZXJyaWRlIC0gc3RhcnRdID0gemVyb1dpZHRoU3BhY2U7Ci0gICAgICAgICAgICBi
dWZmZXJbcmlnaHRUb0xlZnRPdmVycmlkZSAtIHN0YXJ0XSA9IHplcm9XaWR0aFNwYWNlOwotICAg
ICAgICAgICAgYnVmZmVyW3plcm9XaWR0aE5vbkpvaW5lciAtIHN0YXJ0XSA9IHplcm9XaWR0aFNw
YWNlOwotICAgICAgICAgICAgYnVmZmVyW3plcm9XaWR0aEpvaW5lciAtIHN0YXJ0XSA9IHplcm9X
aWR0aFNwYWNlOwotICAgICAgICAgICAgYnVmZmVyW3BvcERpcmVjdGlvbmFsRm9ybWF0dGluZyAt
IHN0YXJ0XSA9IHplcm9XaWR0aFNwYWNlOwotICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0ID09IChv
YmplY3RSZXBsYWNlbWVudENoYXJhY3RlciAmIH4oR2x5cGhQYWdlOjpzaXplIC0gMSkpKSB7Ci0g
ICAgICAgICAgICAvLyBPYmplY3QgcmVwbGFjZW1lbnQgY2hhcmFjdGVyIG11c3Qgbm90IHJlbmRl
ciBhdCBhbGwuCi0gICAgICAgICAgICBidWZmZXJbb2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXIg
LSBzdGFydF0gPSB6ZXJvV2lkdGhTcGFjZTsKLSAgICAgICAgfSBlbHNlIGlmIChzdGFydCA9PSAo
emVyb1dpZHRoTm9CcmVha1NwYWNlICYgfihHbHlwaFBhZ2U6OnNpemUgLSAxKSkpIHsKLSAgICAg
ICAgICAgIC8vIFpXTkJTL0JPTSBtdXN0IG5vdCByZW5kZXIgYXQgYWxsLgotICAgICAgICAgICAg
YnVmZmVyW3plcm9XaWR0aE5vQnJlYWtTcGFjZSAtIHN0YXJ0XSA9IHplcm9XaWR0aFNwYWNlOwot
ICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgYnVmZmVyTGVuZ3RoID0gR2x5cGhQYWdl
OjpzaXplICogMjsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdseXBoUGFnZTo6
c2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICBpbnQgYyA9IGkgKyBzdGFydDsKLSAgICAgICAgICAg
IGJ1ZmZlcltpICogMl0gPSBVMTZfTEVBRChjKTsKLSAgICAgICAgICAgIGJ1ZmZlcltpICogMiAr
IDFdID0gVTE2X1RSQUlMKGMpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gTm93IHRoYXQg
d2UgaGF2ZSBhIGJ1ZmZlciBmdWxsIG9mIGNoYXJhY3RlcnMsIHdlIHdhbnQgdG8gZ2V0IGJhY2sg
YW4gYXJyYXkKLSAgICAvLyBvZiBnbHlwaCBpbmRpY2VzLiBUaGlzIHBhcnQgaW52b2x2ZXMgY2Fs
bGluZyBpbnRvIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYwotICAgIC8vIHJvdXRpbmUgb2Ygb3VyIGds
eXBoIG1hcCBmb3IgYWN0dWFsbHkgZmlsbGluZyBpbiB0aGUgcGFnZSB3aXRoIHRoZSBnbHlwaHMu
Ci0gICAgLy8gU3VjY2VzcyBpcyBub3QgZ3VhcmFudGVlZC4gRm9yIGV4YW1wbGUsIFRpbWVzIGZh
aWxzIHRvIGZpbGwgcGFnZSAyNjAsIGdpdmluZyBnbHlwaCBkYXRhCi0gICAgLy8gZm9yIG9ubHkg
MTI4IG91dCBvZiAyNTYgY2hhcmFjdGVycy4KLSAgICBSZWZQdHI8R2x5cGhQYWdlPiBnbHlwaFBh
Z2U7Ci0gICAgaWYgKEdseXBoUGFnZTo6bWF5VXNlTWl4ZWRGb250RGF0YVdoZW5GaWxsaW5nKGJ1
ZmZlciwgYnVmZmVyTGVuZ3RoLCBmb250RGF0YSkpCi0gICAgICAgIGdseXBoUGFnZSA9IEdseXBo
UGFnZTo6Y3JlYXRlRm9yTWl4ZWRGb250RGF0YSgpOwotICAgIGVsc2UKLSAgICAgICAgZ2x5cGhQ
YWdlID0gR2x5cGhQYWdlOjpjcmVhdGVGb3JTaW5nbGVGb250RGF0YShmb250RGF0YSk7Ci0KLSAg
ICBib29sIGhhdmVHbHlwaHMgPSBmaWxsR2x5cGhQYWdlKCpnbHlwaFBhZ2UsIDAsIEdseXBoUGFn
ZTo6c2l6ZSwgYnVmZmVyLCBidWZmZXJMZW5ndGgsIGZvbnREYXRhKTsKLSAgICBpZiAoIWhhdmVH
bHlwaHMpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgZ2x5cGhQYWdlLT5zZXRJbW11
dGFibGUoKTsKLSAgICByZXR1cm4gZ2x5cGhQYWdlOwotfQotCi1jb25zdCBHbHlwaFBhZ2UqIFNp
bXBsZUZvbnREYXRhOjpnbHlwaFBhZ2UodW5zaWduZWQgcGFnZU51bWJlcikgY29uc3QKLXsKLSAg
ICBpZiAocGFnZU51bWJlciA9PSAwKSB7Ci0gICAgICAgIGlmICghbV9nbHlwaFBhZ2VaZXJvKQot
ICAgICAgICAgICAgbV9nbHlwaFBhZ2VaZXJvID0gY3JlYXRlQW5kRmlsbEdseXBoUGFnZSgwLCB0
aGlzKTsKLSAgICAgICAgcmV0dXJuIG1fZ2x5cGhQYWdlWmVyby5nZXQoKTsKLSAgICB9Ci0gICAg
YXV0byBhZGRSZXN1bHQgPSBtX2dseXBoUGFnZXMuYWRkKHBhZ2VOdW1iZXIsIG51bGxwdHIpOwot
ICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZSA9IGNyZWF0ZUFuZEZpbGxHbHlwaFBhZ2UocGFnZU51bWJlciwgdGhpcyk7Ci0KLSAg
ICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKLX0KLQotR2x5cGggU2lt
cGxlRm9udERhdGE6OmdseXBoRm9yQ2hhcmFjdGVyKFVDaGFyMzIgY2hhcmFjdGVyKSBjb25zdAot
ewotICAgIGF1dG8qIHBhZ2UgPSBnbHlwaFBhZ2UoY2hhcmFjdGVyIC8gR2x5cGhQYWdlOjpzaXpl
KTsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBwYWdlLT5n
bHlwaEF0KGNoYXJhY3RlciAlIEdseXBoUGFnZTo6c2l6ZSk7Ci19Ci0KLUdseXBoRGF0YSBTaW1w
bGVGb250RGF0YTo6Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgY2hhcmFjdGVyKSBjb25z
dAotewotICAgIGF1dG8qIHBhZ2UgPSBnbHlwaFBhZ2UoY2hhcmFjdGVyIC8gR2x5cGhQYWdlOjpz
aXplKTsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVybiBHbHlwaERhdGEoKTsKLSAgICBy
ZXR1cm4gcGFnZS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3Rlcik7Ci19Ci0KLVBhc3NS
ZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjp2ZXJ0aWNhbFJpZ2h0T3JpZW50
YXRpb25Gb250RGF0YSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKLSAg
ICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPERlcml2ZWRGb250RGF0
YT4oaXNDdXN0b21Gb250KCkpOwotICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEtPnZlcnRpY2Fs
UmlnaHRPcmllbnRhdGlvbikgewotICAgICAgICBGb250UGxhdGZvcm1EYXRhIHZlcnRpY2FsUmln
aHRQbGF0Zm9ybURhdGEobV9wbGF0Zm9ybURhdGEpOwotICAgICAgICB2ZXJ0aWNhbFJpZ2h0UGxh
dGZvcm1EYXRhLnNldE9yaWVudGF0aW9uKEhvcml6b250YWwpOwotICAgICAgICBtX2Rlcml2ZWRG
b250RGF0YS0+dmVydGljYWxSaWdodE9yaWVudGF0aW9uID0gY3JlYXRlKHZlcnRpY2FsUmlnaHRQ
bGF0Zm9ybURhdGEsIGlzQ3VzdG9tRm9udCgpLCBmYWxzZSwgdHJ1ZSk7Ci0gICAgfQotICAgIHJl
dHVybiBtX2Rlcml2ZWRGb250RGF0YS0+dmVydGljYWxSaWdodE9yaWVudGF0aW9uOwotfQotCi1Q
YXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6dXByaWdodE9yaWVudGF0
aW9uRm9udERhdGEoKSBjb25zdAotewotICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEpCi0gICAg
ICAgIG1fZGVyaXZlZEZvbnREYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxEZXJpdmVkRm9udERhdGE+
KGlzQ3VzdG9tRm9udCgpKTsKLSAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhLT51cHJpZ2h0T3Jp
ZW50YXRpb24pCi0gICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT51cHJpZ2h0T3JpZW50YXRpb24g
PSBjcmVhdGUobV9wbGF0Zm9ybURhdGEsIGlzQ3VzdG9tRm9udCgpLCBmYWxzZSwgdHJ1ZSk7Ci0g
ICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT51cHJpZ2h0T3JpZW50YXRpb247Ci19Ci0KLVBh
c3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0
YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKLXsKLSAgICBp
ZiAoIW1fZGVyaXZlZEZvbnREYXRhKQotICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IHN0ZDo6
bWFrZV91bmlxdWU8RGVyaXZlZEZvbnREYXRhPihpc0N1c3RvbUZvbnQoKSk7Ci0gICAgaWYgKCFt
X2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzKQotICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+
c21hbGxDYXBzID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9uLCBzbWFsbENh
cHNGb250U2l6ZU11bHRpcGxpZXIpOwotCi0gICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5z
bWFsbENhcHM7Ci19Ci0KLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRh
OjplbXBoYXNpc01hcmtGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlw
dGlvbikgY29uc3QKLXsKLSAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQotICAgICAgICBtX2Rl
cml2ZWRGb250RGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8RGVyaXZlZEZvbnREYXRhPihpc0N1c3Rv
bUZvbnQoKSk7Ci0gICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrKQotICAg
ICAgICBtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrID0gY3JlYXRlU2NhbGVkRm9udERh
dGEoZm9udERlc2NyaXB0aW9uLCBlbXBoYXNpc01hcmtGb250U2l6ZU11bHRpcGxpZXIpOwotCi0g
ICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcms7Ci19Ci0KLVBhc3NSZWZQ
dHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpicm9rZW5JZGVvZ3JhcGhGb250RGF0
YSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKLSAgICAgICAgbV9kZXJp
dmVkRm9udERhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPERlcml2ZWRGb250RGF0YT4oaXNDdXN0b21G
b250KCkpOwotICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEtPmJyb2tlbklkZW9ncmFwaCkgewot
ICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+YnJva2VuSWRlb2dyYXBoID0gY3JlYXRlKG1fcGxh
dGZvcm1EYXRhLCBpc0N1c3RvbUZvbnQoKSwgZmFsc2UpOwotICAgICAgICBtX2Rlcml2ZWRGb250
RGF0YS0+YnJva2VuSWRlb2dyYXBoLT5tX2lzQnJva2VuSWRlb2dyYXBoRmFsbGJhY2sgPSB0cnVl
OwotICAgIH0KLSAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPmJyb2tlbklkZW9ncmFwaDsK
LX0KLQotUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6Om5vblN5bnRo
ZXRpY0l0YWxpY0ZvbnREYXRhKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRh
KQotICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8RGVyaXZlZEZv
bnREYXRhPihpc0N1c3RvbUZvbnQoKSk7Ci0gICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+bm9u
U3ludGhldGljSXRhbGljKSB7Ci0gICAgICAgIEZvbnRQbGF0Zm9ybURhdGEgbm9uU3ludGhldGlj
SXRhbGljRm9udFBsYXRmb3JtRGF0YShtX3BsYXRmb3JtRGF0YSk7Ci0jaWYgUExBVEZPUk0oQ09D
T0EpCi0gICAgICAgIG5vblN5bnRoZXRpY0l0YWxpY0ZvbnRQbGF0Zm9ybURhdGEubV9zeW50aGV0
aWNPYmxpcXVlID0gZmFsc2U7Ci0jZW5kaWYKLSAgICAgICAgbV9kZXJpdmVkRm9udERhdGEtPm5v
blN5bnRoZXRpY0l0YWxpYyA9IGNyZWF0ZShub25TeW50aGV0aWNJdGFsaWNGb250UGxhdGZvcm1E
YXRhLCBpc0N1c3RvbUZvbnQoKSk7Ci0gICAgfQotICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0
YS0+bm9uU3ludGhldGljSXRhbGljOwotfQotCi0jaWZuZGVmIE5ERUJVRwotU3RyaW5nIFNpbXBs
ZUZvbnREYXRhOjpkZXNjcmlwdGlvbigpIGNvbnN0Ci17Ci0gICAgaWYgKGlzU1ZHRm9udCgpKQot
ICAgICAgICByZXR1cm4gIltTVkcgZm9udF0iOwotICAgIGlmIChpc0N1c3RvbUZvbnQoKSkKLSAg
ICAgICAgcmV0dXJuICJbY3VzdG9tIGZvbnRdIjsKLQotICAgIHJldHVybiBwbGF0Zm9ybURhdGEo
KS5kZXNjcmlwdGlvbigpOwotfQotI2VuZGlmCi0KLWNvbnN0IE9wZW5UeXBlTWF0aERhdGEqIFNp
bXBsZUZvbnREYXRhOjptYXRoRGF0YSgpIGNvbnN0Ci17Ci0gICAgaWYgKG1faXNMb2FkaW5nKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIW1fbWF0aERhdGEpIHsKLSAgICAgICAg
bV9tYXRoRGF0YSA9IE9wZW5UeXBlTWF0aERhdGE6OmNyZWF0ZShtX3BsYXRmb3JtRGF0YSk7Ci0g
ICAgICAgIGlmICghbV9tYXRoRGF0YS0+aGFzTWF0aERhdGEoKSkKLSAgICAgICAgICAgIG1fbWF0
aERhdGEuY2xlYXIoKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1fbWF0aERhdGEuZ2V0KCk7Ci19Ci0K
LVNpbXBsZUZvbnREYXRhOjpEZXJpdmVkRm9udERhdGE6On5EZXJpdmVkRm9udERhdGEoKQotewot
fQotCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlU2Nh
bGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0
IHNjYWxlRmFjdG9yKSBjb25zdAotewotICAgIGlmIChpc1NWR0ZvbnQoKSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gcGxhdGZvcm1DcmVhdGVTY2FsZWRGb250RGF0YShm
b250RGVzY3JpcHRpb24sIHNjYWxlRmFjdG9yKTsKLX0KLQotYm9vbCBTaW1wbGVGb250RGF0YTo6
YXBwbHlUcmFuc2Zvcm1zKEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgR2x5cGhCdWZmZXJBZHZh
bmNlKiBhZHZhbmNlcywgc2l6ZV90IGdseXBoQ291bnQsIFR5cGVzZXR0aW5nRmVhdHVyZXMgdHlw
ZXNldHRpbmdGZWF0dXJlcykgY29uc3QKLXsKLSAgICAvLyBXZSBuZWVkIHRvIGhhbmRsZSB0cmFu
c2Zvcm1zIG9uIFNWRyBmb250cyBpbnRlcm5hbGx5LCBzaW5jZSB0aGV5IGFyZSByZW5kZXJlZCBp
bnRlcm5hbGx5LgotICAgIEFTU0VSVCghaXNTVkdGb250KCkpOwotI2lmIFBMQVRGT1JNKElPUykg
fHwgKFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+IDEw
ODApCi0gICAgQ1RGb250VHJhbnNmb3JtT3B0aW9ucyBvcHRpb25zID0gKHR5cGVzZXR0aW5nRmVh
dHVyZXMgJiBLZXJuaW5nID8ga0NURm9udFRyYW5zZm9ybUFwcGx5UG9zaXRpb25pbmcgOiAwKSB8
ICh0eXBlc2V0dGluZ0ZlYXR1cmVzICYgTGlnYXR1cmVzID8ga0NURm9udFRyYW5zZm9ybUFwcGx5
U2hhcGluZyA6IDApOwotICAgIHJldHVybiBDVEZvbnRUcmFuc2Zvcm1HbHlwaHMobV9wbGF0Zm9y
bURhdGEuY3RGb250KCksIGdseXBocywgcmVpbnRlcnByZXRfY2FzdDxDR1NpemUqPihhZHZhbmNl
cyksIGdseXBoQ291bnQsIG9wdGlvbnMpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oZ2x5cGhz
KTsKLSAgICBVTlVTRURfUEFSQU0oYWR2YW5jZXMpOwotICAgIFVOVVNFRF9QQVJBTShnbHlwaENv
dW50KTsKLSAgICBVTlVTRURfUEFSQU0odHlwZXNldHRpbmdGZWF0dXJlcyk7Ci0gICAgcmV0dXJu
IGZhbHNlOwotI2VuZGlmCi19Ci0KLS8vIEZvbnREYXRhcyBhcmUgbm90IHJlZmNvdW50ZWQgdG8g
YXZvaWQgY3ljbGVzLgotdHlwZWRlZiBIYXNoTWFwPHN0ZDo6cGFpcjxVQ2hhcjMyLCB1bnNpZ25l
ZD4sIFNpbXBsZUZvbnREYXRhKj4gQ2hhcmFjdGVyRmFsbGJhY2tNYXA7Ci10eXBlZGVmIEhhc2hN
YXA8Y29uc3QgU2ltcGxlRm9udERhdGEqLCBDaGFyYWN0ZXJGYWxsYmFja01hcD4gU3lzdGVtRmFs
bGJhY2tDYWNoZTsKLQotc3RhdGljIFN5c3RlbUZhbGxiYWNrQ2FjaGUmIHN5c3RlbUZhbGxiYWNr
Q2FjaGUoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTeXN0ZW1GYWxsYmFja0NhY2hl
PiBtYXA7Ci0gICAgcmV0dXJuIG1hcC5nZXQoKTsKLX0KLQotUmVmUHRyPFNpbXBsZUZvbnREYXRh
PiBTaW1wbGVGb250RGF0YTo6c3lzdGVtRmFsbGJhY2tGb250RGF0YUZvckNoYXJhY3RlcihVQ2hh
cjMyIGNoYXJhY3RlciwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgYm9vbCBp
c0ZvclBsYXRmb3JtRm9udCkgY29uc3QKLXsKLSAgICBhdXRvIGZvbnRBZGRSZXN1bHQgPSBzeXN0
ZW1GYWxsYmFja0NhY2hlKCkuYWRkKHRoaXMsIENoYXJhY3RlckZhbGxiYWNrTWFwKCkpOwotCi0g
ICAgYXV0byBrZXkgPSBzdGQ6Om1ha2VfcGFpcihjaGFyYWN0ZXIsIGlzRm9yUGxhdGZvcm1Gb250
KTsKLSAgICBhdXRvIGNoYXJhY3RlckFkZFJlc3VsdCA9IGZvbnRBZGRSZXN1bHQuaXRlcmF0b3It
PnZhbHVlLmFkZChrZXksIG51bGxwdHIpOwotCi0gICAgU2ltcGxlRm9udERhdGEqJiBmYWxsYmFj
a0ZvbnREYXRhID0gY2hhcmFjdGVyQWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKLQotICAgIGlm
ICghZmFsbGJhY2tGb250RGF0YSkgewotICAgICAgICBVQ2hhciBjb2RlVW5pdHNbMl07Ci0gICAg
ICAgIGludCBjb2RlVW5pdHNMZW5ndGg7Ci0gICAgICAgIGlmIChVX0lTX0JNUChjaGFyYWN0ZXIp
KSB7Ci0gICAgICAgICAgICBjb2RlVW5pdHNbMF0gPSBGb250Q2FzY2FkZTo6bm9ybWFsaXplU3Bh
Y2VzKGNoYXJhY3Rlcik7Ci0gICAgICAgICAgICBjb2RlVW5pdHNMZW5ndGggPSAxOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgY29kZVVuaXRzWzBdID0gVTE2X0xFQUQoY2hhcmFjdGVy
KTsKLSAgICAgICAgICAgIGNvZGVVbml0c1sxXSA9IFUxNl9UUkFJTChjaGFyYWN0ZXIpOwotICAg
ICAgICAgICAgY29kZVVuaXRzTGVuZ3RoID0gMjsKLSAgICAgICAgfQotCi0gICAgICAgIGZhbGxi
YWNrRm9udERhdGEgPSBmb250Q2FjaGUoKS5zeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoZGVz
Y3JpcHRpb24sIHRoaXMsIGlzRm9yUGxhdGZvcm1Gb250LCBjb2RlVW5pdHMsIGNvZGVVbml0c0xl
bmd0aCkuZ2V0KCk7Ci0gICAgICAgIGlmIChmYWxsYmFja0ZvbnREYXRhKQotICAgICAgICAgICAg
ZmFsbGJhY2tGb250RGF0YS0+bV9pc1VzZWRJblN5c3RlbUZhbGxiYWNrQ2FjaGUgPSB0cnVlOwot
ICAgIH0KLQotICAgIHJldHVybiBmYWxsYmFja0ZvbnREYXRhOwotfQotCi12b2lkIFNpbXBsZUZv
bnREYXRhOjpyZW1vdmVGcm9tU3lzdGVtRmFsbGJhY2tDYWNoZSgpCi17Ci0gICAgc3lzdGVtRmFs
bGJhY2tDYWNoZSgpLnJlbW92ZSh0aGlzKTsKLQotICAgIGlmICghbV9pc1VzZWRJblN5c3RlbUZh
bGxiYWNrQ2FjaGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZvciAoYXV0byYgY2hhcmFjdGVy
TWFwIDogc3lzdGVtRmFsbGJhY2tDYWNoZSgpLnZhbHVlcygpKSB7Ci0gICAgICAgIFZlY3Rvcjxz
dGQ6OnBhaXI8VUNoYXIzMiwgdW5zaWduZWQ+LCA1MTI+IHRvUmVtb3ZlOwotICAgICAgICBmb3Ig
KGF1dG8mIGVudHJ5IDogY2hhcmFjdGVyTWFwKSB7Ci0gICAgICAgICAgICBpZiAoZW50cnkudmFs
dWUgPT0gdGhpcykKLSAgICAgICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQoZW50cnkua2V5KTsK
LSAgICAgICAgfQotICAgICAgICBmb3IgKGF1dG8mIGtleSA6IHRvUmVtb3ZlKQotICAgICAgICAg
ICAgY2hhcmFjdGVyTWFwLnJlbW92ZShrZXkpOwotICAgIH0KLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9u
dERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9T
aW1wbGVGb250RGF0YS5oCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM2OSAr
MCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIGludGVybmFsIGZvbnQgaW1w
bGVtZW50YXRpb24uCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4LCAyMDEwLCAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNy0y
MDA4IFRvcmNoIE1vYmlsZSwgSW5jLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBTaW1wbGVGb250RGF0YV9oCi0jZGVm
aW5lIFNpbXBsZUZvbnREYXRhX2gKLQotI2luY2x1ZGUgIkZvbnRCYXNlbGluZS5oIgotI2luY2x1
ZGUgIkZvbnRNZXRyaWNzLmgiCi0jaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgotI2luY2x1
ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCi0jaW5jbHVkZSAiR2x5
cGhNZXRyaWNzTWFwLmgiCi0jaW5jbHVkZSAiR2x5cGhQYWdlLmgiCi0jaW5jbHVkZSAiT3BlblR5
cGVNYXRoRGF0YS5oIgotI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKLSNpbmNsdWRlICJP
cGVuVHlwZVZlcnRpY2FsRGF0YS5oIgotI2VuZGlmCi0jaW5jbHVkZSAiVHlwZXNldHRpbmdGZWF0
dXJlcy5oIgotI2luY2x1ZGUgPHd0Zi9UeXBlQ2FzdHMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdIYXNoLmg+Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSNpbmNsdWRlICJXZWJDb3JlU3lz
dGVtSW50ZXJmYWNlLmgiCi0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2VuZGlmCi0KLSNp
ZiBQTEFURk9STShXSU4pCi0jaW5jbHVkZSA8dXNwMTAuaD4KLSNlbmRpZgotCi0jaWYgVVNFKENB
SVJPKQotI2luY2x1ZGUgPGNhaXJvLmg+Ci0jZW5kaWYKLQotI2lmIFVTRShDRykKLSNpbmNsdWRl
IDxXZWJDb3JlL0NvcmVHcmFwaGljc1NQSS5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgR2x5cGhQYWdlOwotY2xhc3MgRm9udERlc2NyaXB0aW9uOwotY2xhc3MgU2hh
cmVkQnVmZmVyOwotc3RydWN0IEdseXBoRGF0YTsKLXN0cnVjdCBXaWR0aEl0ZXJhdG9yOwotCi1l
bnVtIEZvbnREYXRhVmFyaWFudCB7IEF1dG9WYXJpYW50LCBOb3JtYWxWYXJpYW50LCBTbWFsbENh
cHNWYXJpYW50LCBFbXBoYXNpc01hcmtWYXJpYW50LCBCcm9rZW5JZGVvZ3JhcGhWYXJpYW50IH07
Ci1lbnVtIFBpdGNoIHsgVW5rbm93blBpdGNoLCBGaXhlZFBpdGNoLCBWYXJpYWJsZVBpdGNoIH07
Ci0KLWNsYXNzIFNpbXBsZUZvbnREYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8U2ltcGxlRm9udERh
dGE+IHsKLXB1YmxpYzoKLSAgICBjbGFzcyBTVkdEYXRhIHsKLSAgICAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7Ci0gICAgcHVibGljOgotICAgICAgICB2aXJ0dWFsIH5TVkdEYXRhKCkgeyB9
Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVGb250RGF0YShTaW1wbGVGb250RGF0
YSosIGZsb2F0IGZvbnRTaXplKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgZmxvYXQgd2lkdGhGb3JT
VkdHbHlwaChHbHlwaCwgZmxvYXQgZm9udFNpemUpIGNvbnN0ID0gMDsKLSAgICAgICAgdmlydHVh
bCBib29sIGZpbGxTVkdHbHlwaFBhZ2UoR2x5cGhQYWdlKiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNp
Z25lZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3Qg
U2ltcGxlRm9udERhdGEqKSBjb25zdCA9IDA7Ci0gICAgfTsKLQotICAgIC8vIFVzZWQgdG8gY3Jl
YXRlIHBsYXRmb3JtIGZvbnRzLgotICAgIHN0YXRpYyBSZWY8U2ltcGxlRm9udERhdGE+IGNyZWF0
ZShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEsIGJvb2wgaXNDdXN0b21Gb250
ID0gZmFsc2UsIGJvb2wgaXNMb2FkaW5nID0gZmFsc2UsIGJvb2wgaXNUZXh0T3JpZW50YXRpb25G
YWxsYmFjayA9IGZhbHNlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2lt
cGxlRm9udERhdGEocGxhdGZvcm1EYXRhLCBpc0N1c3RvbUZvbnQsIGlzTG9hZGluZywgaXNUZXh0
T3JpZW50YXRpb25GYWxsYmFjaykpOwotICAgIH0KLQotICAgIC8vIFVzZWQgdG8gY3JlYXRlIFNW
RyBGb250cy4KLSAgICBzdGF0aWMgUmVmPFNpbXBsZUZvbnREYXRhPiBjcmVhdGUoc3RkOjp1bmlx
dWVfcHRyPFNWR0RhdGE+IHN2Z0RhdGEsIGZsb2F0IGZvbnRTaXplLCBib29sIHN5bnRoZXRpY0Jv
bGQsIGJvb2wgc3ludGhldGljSXRhbGljKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgU2ltcGxlRm9udERhdGEoV1RGOjptb3ZlKHN2Z0RhdGEpLCBmb250U2l6ZSwgc3ludGhl
dGljQm9sZCwgc3ludGhldGljSXRhbGljKSk7Ci0gICAgfQotCi0gICAgflNpbXBsZUZvbnREYXRh
KCk7Ci0KLSAgICBzdGF0aWMgY29uc3QgU2ltcGxlRm9udERhdGEqIHN5c3RlbUZhbGxiYWNrKCkg
eyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBTaW1wbGVGb250RGF0YSo+KC0xKTsgfQot
Ci0gICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhKCkgY29uc3QgeyByZXR1
cm4gbV9wbGF0Zm9ybURhdGE7IH0KLSAgICBjb25zdCBPcGVuVHlwZU1hdGhEYXRhKiBtYXRoRGF0
YSgpIGNvbnN0OwotI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKLSAgICBjb25zdCBPcGVu
VHlwZVZlcnRpY2FsRGF0YSogdmVydGljYWxEYXRhKCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0aWNh
bERhdGEuZ2V0KCk7IH0KLSNlbmRpZgotCi0gICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4g
c21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJikgY29uc3Q7Ci0gICAgUGFz
c1JlZlB0cjxTaW1wbGVGb250RGF0YT4gZW1waGFzaXNNYXJrRm9udERhdGEoY29uc3QgRm9udERl
c2NyaXB0aW9uJikgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gYnJva2Vu
SWRlb2dyYXBoRm9udERhdGEoKSBjb25zdDsKLSAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRh
PiBub25TeW50aGV0aWNJdGFsaWNGb250RGF0YSgpIGNvbnN0OwotCi0gICAgUGFzc1JlZlB0cjxT
aW1wbGVGb250RGF0YT4gdmFyaWFudEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVz
Y3JpcHRpb24sIEZvbnREYXRhVmFyaWFudCB2YXJpYW50KSBjb25zdAotICAgIHsKLSAgICAgICAg
c3dpdGNoICh2YXJpYW50KSB7Ci0gICAgICAgIGNhc2UgU21hbGxDYXBzVmFyaWFudDoKLSAgICAg
ICAgICAgIHJldHVybiBzbWFsbENhcHNGb250RGF0YShkZXNjcmlwdGlvbik7Ci0gICAgICAgIGNh
c2UgRW1waGFzaXNNYXJrVmFyaWFudDoKLSAgICAgICAgICAgIHJldHVybiBlbXBoYXNpc01hcmtG
b250RGF0YShkZXNjcmlwdGlvbik7Ci0gICAgICAgIGNhc2UgQnJva2VuSWRlb2dyYXBoVmFyaWFu
dDoKLSAgICAgICAgICAgIHJldHVybiBicm9rZW5JZGVvZ3JhcGhGb250RGF0YSgpOwotICAgICAg
ICBjYXNlIEF1dG9WYXJpYW50OgotICAgICAgICBjYXNlIE5vcm1hbFZhcmlhbnQ6Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8U2ltcGxlRm9udERhdGEqPih0aGlzKTsKLSAgICB9Ci0K
LSAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiB2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25G
b250RGF0YSgpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IHVwcmlnaHRP
cmllbnRhdGlvbkZvbnREYXRhKCkgY29uc3Q7Ci0KLSAgICBib29sIGhhc1ZlcnRpY2FsR2x5cGhz
KCkgY29uc3QgeyByZXR1cm4gbV9oYXNWZXJ0aWNhbEdseXBoczsgfQotICAgIGJvb2wgaXNUZXh0
T3JpZW50YXRpb25GYWxsYmFjaygpIGNvbnN0IHsgcmV0dXJuIG1faXNUZXh0T3JpZW50YXRpb25G
YWxsYmFjazsgfQotCi0gICAgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzKCkgeyByZXR1cm4gbV9m
b250TWV0cmljczsgfQotICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBmb250TWV0cmljcygpIGNvbnN0
IHsgcmV0dXJuIG1fZm9udE1ldHJpY3M7IH0KLSAgICBmbG9hdCBzaXplUGVyVW5pdCgpIGNvbnN0
IHsgcmV0dXJuIHBsYXRmb3JtRGF0YSgpLnNpemUoKSAvIChmb250TWV0cmljcygpLnVuaXRzUGVy
RW0oKSA/IGZvbnRNZXRyaWNzKCkudW5pdHNQZXJFbSgpIDogMSk7IH0KLQotICAgIGZsb2F0IG1h
eENoYXJXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4Q2hhcldpZHRoOyB9Ci0gICAgdm9pZCBz
ZXRNYXhDaGFyV2lkdGgoZmxvYXQgbWF4Q2hhcldpZHRoKSB7IG1fbWF4Q2hhcldpZHRoID0gbWF4
Q2hhcldpZHRoOyB9Ci0KLSAgICBmbG9hdCBhdmdDaGFyV2lkdGgoKSBjb25zdCB7IHJldHVybiBt
X2F2Z0NoYXJXaWR0aDsgfQotICAgIHZvaWQgc2V0QXZnQ2hhcldpZHRoKGZsb2F0IGF2Z0NoYXJX
aWR0aCkgeyBtX2F2Z0NoYXJXaWR0aCA9IGF2Z0NoYXJXaWR0aDsgfQotCi0gICAgRmxvYXRSZWN0
IGJvdW5kc0ZvckdseXBoKEdseXBoKSBjb25zdDsKLSAgICBmbG9hdCB3aWR0aEZvckdseXBoKEds
eXBoIGdseXBoKSBjb25zdDsKLSAgICBGbG9hdFJlY3QgcGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChH
bHlwaCkgY29uc3Q7Ci0gICAgZmxvYXQgcGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoKSBjb25z
dDsKLQotICAgIGZsb2F0IHNwYWNlV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3NwYWNlV2lkdGg7
IH0KLSAgICBmbG9hdCBhZGp1c3RlZFNwYWNlV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2FkanVz
dGVkU3BhY2VXaWR0aDsgfQotICAgIHZvaWQgc2V0U3BhY2VXaWR0aHMoZmxvYXQgc3BhY2VXaWR0
aCkKLSAgICB7Ci0gICAgICAgIG1fc3BhY2VXaWR0aCA9IHNwYWNlV2lkdGg7Ci0gICAgICAgIG1f
YWRqdXN0ZWRTcGFjZVdpZHRoID0gc3BhY2VXaWR0aDsKLSAgICB9Ci0KLSNpZiBVU0UoQ0cpIHx8
IFVTRShDQUlSTykKLSAgICBmbG9hdCBzeW50aGV0aWNCb2xkT2Zmc2V0KCkgY29uc3QgeyByZXR1
cm4gbV9zeW50aGV0aWNCb2xkT2Zmc2V0OyB9Ci0jZW5kaWYKLQotICAgIEdseXBoIHNwYWNlR2x5
cGgoKSBjb25zdCB7IHJldHVybiBtX3NwYWNlR2x5cGg7IH0KLSAgICB2b2lkIHNldFNwYWNlR2x5
cGgoR2x5cGggc3BhY2VHbHlwaCkgeyBtX3NwYWNlR2x5cGggPSBzcGFjZUdseXBoOyB9Ci0gICAg
R2x5cGggemVyb1dpZHRoU3BhY2VHbHlwaCgpIGNvbnN0IHsgcmV0dXJuIG1femVyb1dpZHRoU3Bh
Y2VHbHlwaDsgfQotICAgIHZvaWQgc2V0WmVyb1dpZHRoU3BhY2VHbHlwaChHbHlwaCBzcGFjZUds
eXBoKSB7IG1femVyb1dpZHRoU3BhY2VHbHlwaCA9IHNwYWNlR2x5cGg7IH0KLSAgICBib29sIGlz
WmVyb1dpZHRoU3BhY2VHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QgeyByZXR1cm4gZ2x5cGggPT0g
bV96ZXJvV2lkdGhTcGFjZUdseXBoICYmIGdseXBoOyB9Ci0gICAgR2x5cGggemVyb0dseXBoKCkg
Y29uc3QgeyByZXR1cm4gbV96ZXJvR2x5cGg7IH0KLSAgICB2b2lkIHNldFplcm9HbHlwaChHbHlw
aCB6ZXJvR2x5cGgpIHsgbV96ZXJvR2x5cGggPSB6ZXJvR2x5cGg7IH0KLQotICAgIEdseXBoRGF0
YSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMikgY29uc3Q7Ci0gICAgR2x5cGggZ2x5cGhG
b3JDaGFyYWN0ZXIoVUNoYXIzMikgY29uc3Q7Ci0KLSAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+
IHN5c3RlbUZhbGxiYWNrRm9udERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiwgY29uc3QgRm9udERl
c2NyaXB0aW9uJiwgYm9vbCBpc0ZvclBsYXRmb3JtRm9udCkgY29uc3Q7Ci0KLSAgICBjb25zdCBH
bHlwaFBhZ2UqIGdseXBoUGFnZSh1bnNpZ25lZCBwYWdlTnVtYmVyKSBjb25zdDsKLQotICAgIHZv
aWQgZGV0ZXJtaW5lUGl0Y2goKTsKLSAgICBQaXRjaCBwaXRjaCgpIGNvbnN0IHsgcmV0dXJuIG1f
dHJlYXRBc0ZpeGVkUGl0Y2ggPyBGaXhlZFBpdGNoIDogVmFyaWFibGVQaXRjaDsgfQotCi0gICAg
Y29uc3QgU1ZHRGF0YSogc3ZnRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fc3ZnRGF0YS5nZXQoKTsg
fQotICAgIGJvb2wgaXNTVkdGb250KCkgY29uc3QgeyByZXR1cm4gISFtX3N2Z0RhdGE7IH0KLQot
ICAgIGJvb2wgaXNDdXN0b21Gb250KCkgY29uc3QgeyByZXR1cm4gbV9pc0N1c3RvbUZvbnQ7IH0K
LSAgICBib29sIGlzTG9hZGluZygpIGNvbnN0IHsgcmV0dXJuIG1faXNMb2FkaW5nOyB9Ci0KLSNp
Zm5kZWYgTkRFQlVHCi0gICAgU3RyaW5nIGRlc2NyaXB0aW9uKCkgY29uc3Q7Ci0jZW5kaWYKLQot
I2lmIFVTRShBUFBLSVQpCi0gICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGNvbXBvc2l0ZUZvbnRS
ZWZlcmVuY2VGb250RGF0YShOU0ZvbnQgKmtleSkgY29uc3Q7Ci0gICAgTlNGb250KiBnZXROU0Zv
bnQoKSBjb25zdCB7IHJldHVybiBtX3BsYXRmb3JtRGF0YS5uc0ZvbnQoKTsgfQotI2VuZGlmCi0K
LSNpZiBQTEFURk9STShJT1MpCi0gICAgQ1RGb250UmVmIGdldENURm9udCgpIGNvbnN0IHsgcmV0
dXJuIG1fcGxhdGZvcm1EYXRhLmZvbnQoKTsgfQotICAgIGJvb2wgc2hvdWxkTm90QmVVc2VkRm9y
QXJhYmljKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGROb3RCZVVzZWRGb3JBcmFiaWM7IH07Ci0j
ZW5kaWYKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBDRkRpY3Rpb25hcnlSZWYgZ2V0Q0ZTdHJp
bmdBdHRyaWJ1dGVzKFR5cGVzZXR0aW5nRmVhdHVyZXMsIEZvbnRPcmllbnRhdGlvbikgY29uc3Q7
Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBVU0UoSEFSRkJVWlopCi0gICAgYm9v
bCBjYW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBVQ2hhciosIHNpemVf
dCkgY29uc3Q7Ci0jZW5kaWYKLQotICAgIGJvb2wgYXBwbHlUcmFuc2Zvcm1zKEdseXBoQnVmZmVy
R2x5cGgqLCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCBzaXplX3QgZ2x5cGhDb3VudCwgVHlwZXNldHRp
bmdGZWF0dXJlcykgY29uc3Q7Ci0KLSNpZiBQTEFURk9STShXSU4pCi0gICAgYm9vbCBpc1N5c3Rl
bUZvbnQoKSBjb25zdCB7IHJldHVybiBtX2lzU3lzdGVtRm9udDsgfQotICAgIFNDUklQVF9GT05U
UFJPUEVSVElFUyogc2NyaXB0Rm9udFByb3BlcnRpZXMoKSBjb25zdDsKLSAgICBTQ1JJUFRfQ0FD
SEUqIHNjcmlwdENhY2hlKCkgY29uc3QgeyByZXR1cm4gJm1fc2NyaXB0Q2FjaGU7IH0KLSAgICBz
dGF0aWMgdm9pZCBzZXRTaG91bGRBcHBseU1hY0FzY2VudEhhY2soYm9vbCk7Ci0gICAgc3RhdGlj
IGJvb2wgc2hvdWxkQXBwbHlNYWNBc2NlbnRIYWNrKCk7Ci0gICAgc3RhdGljIGZsb2F0IGFzY2Vu
dENvbnNpZGVyaW5nTWFjQXNjZW50SGFjayhjb25zdCBXQ0hBUiosIGZsb2F0IGFzY2VudCwgZmxv
YXQgZGVzY2VudCk7Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBTaW1wbGVGb250RGF0YShjb25z
dCBGb250UGxhdGZvcm1EYXRhJiwgYm9vbCBpc0N1c3RvbUZvbnQgPSBmYWxzZSwgYm9vbCBpc0xv
YWRpbmcgPSBmYWxzZSwgYm9vbCBpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrID0gZmFsc2UpOwot
Ci0gICAgU2ltcGxlRm9udERhdGEoc3RkOjp1bmlxdWVfcHRyPFNWR0RhdGE+LCBmbG9hdCBmb250
U2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYyk7Ci0KLSAgICB2
b2lkIHBsYXRmb3JtSW5pdCgpOwotICAgIHZvaWQgcGxhdGZvcm1HbHlwaEluaXQoKTsKLSAgICB2
b2lkIHBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpOwotICAgIHZvaWQgcGxhdGZvcm1EZXN0cm95KCk7
Ci0KLSAgICB2b2lkIGluaXRDaGFyV2lkdGhzKCk7Ci0KLSAgICBQYXNzUmVmUHRyPFNpbXBsZUZv
bnREYXRhPiBjcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBmbG9h
dCBzY2FsZUZhY3RvcikgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gcGxh
dGZvcm1DcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBz
Y2FsZUZhY3RvcikgY29uc3Q7Ci0KLSAgICB2b2lkIHJlbW92ZUZyb21TeXN0ZW1GYWxsYmFja0Nh
Y2hlKCk7Ci0KLSNpZiBQTEFURk9STShXSU4pCi0gICAgdm9pZCBpbml0R0RJRm9udCgpOwotICAg
IHZvaWQgcGxhdGZvcm1Db21tb25EZXN0cm95KCk7Ci0gICAgRmxvYXRSZWN0IGJvdW5kc0ZvckdE
SUdseXBoKEdseXBoIGdseXBoKSBjb25zdDsKLSAgICBmbG9hdCB3aWR0aEZvckdESUdseXBoKEds
eXBoIGdseXBoKSBjb25zdDsKLSNlbmRpZgotCi0jaWYgVVNFKENHKQotICAgIGJvb2wgY2FuVXNl
RmFzdEdseXBoQWR2YW5jZUdldHRlcihHbHlwaCBnbHlwaCwgQ0dTaXplJiBhZHZhbmNlLCBib29s
JiBwb3B1bGF0ZWRBZHZhbmNlKSBjb25zdDsKLSAgICBDR0ZvbnRSZW5kZXJpbmdTdHlsZSByZW5k
ZXJpbmdTdHlsZSgpIGNvbnN0OwotICAgIGJvb2wgYWR2YW5jZUZvckNvbG9yQml0bWFwRm9udChH
bHlwaCwgQ0dTaXplJiByZXN1bHQpIGNvbnN0OyAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGZvbnQg
aXMgYSBjb2xvciBiaXRtYXAgZm9udAotI2VuZGlmCi0KLSAgICBGb250TWV0cmljcyBtX2ZvbnRN
ZXRyaWNzOwotICAgIGZsb2F0IG1fbWF4Q2hhcldpZHRoOwotICAgIGZsb2F0IG1fYXZnQ2hhcldp
ZHRoOwotCi0gICAgRm9udFBsYXRmb3JtRGF0YSBtX3BsYXRmb3JtRGF0YTsKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8U1ZHRGF0YT4gbV9zdmdEYXRhOwotCi0gICAgbXV0YWJsZSBSZWZQdHI8R2x5cGhQ
YWdlPiBtX2dseXBoUGFnZVplcm87Ci0gICAgbXV0YWJsZSBIYXNoTWFwPHVuc2lnbmVkLCBSZWZQ
dHI8R2x5cGhQYWdlPj4gbV9nbHlwaFBhZ2VzOwotICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRy
PEdseXBoTWV0cmljc01hcDxGbG9hdFJlY3Q+PiBtX2dseXBoVG9Cb3VuZHNNYXA7Ci0gICAgbXV0
YWJsZSBHbHlwaE1ldHJpY3NNYXA8ZmxvYXQ+IG1fZ2x5cGhUb1dpZHRoTWFwOwotCi0gICAgYm9v
bCBtX3RyZWF0QXNGaXhlZFBpdGNoOwotICAgIGJvb2wgbV9pc0N1c3RvbUZvbnQ7ICAvLyBXaGV0
aGVyIG9yIG5vdCB3ZSBhcmUgY3VzdG9tIGZvbnQgbG9hZGVkIHZpYSBAZm9udC1mYWNlCi0gICAg
Ym9vbCBtX2lzTG9hZGluZzsgLy8gV2hldGhlciBvciBub3QgdGhpcyBjdXN0b20gZm9udCBpcyBz
dGlsbCBpbiB0aGUgYWN0IG9mIGxvYWRpbmcuCi0KLSAgICBib29sIG1faXNUZXh0T3JpZW50YXRp
b25GYWxsYmFjazsKLSAgICBib29sIG1faXNCcm9rZW5JZGVvZ3JhcGhGYWxsYmFjazsKLQotICAg
IGJvb2wgbV9pc1VzZWRJblN5c3RlbUZhbGxiYWNrQ2FjaGUgeyBmYWxzZSB9OwotCi0gICAgbXV0
YWJsZSBSZWZQdHI8T3BlblR5cGVNYXRoRGF0YT4gbV9tYXRoRGF0YTsKLSNpZiBFTkFCTEUoT1BF
TlRZUEVfVkVSVElDQUwpCi0gICAgUmVmUHRyPE9wZW5UeXBlVmVydGljYWxEYXRhPiBtX3ZlcnRp
Y2FsRGF0YTsKLSNlbmRpZgotICAgIGJvb2wgbV9oYXNWZXJ0aWNhbEdseXBoczsKLQotICAgIEds
eXBoIG1fc3BhY2VHbHlwaDsKLSAgICBmbG9hdCBtX3NwYWNlV2lkdGg7Ci0gICAgR2x5cGggbV96
ZXJvR2x5cGg7Ci0gICAgZmxvYXQgbV9hZGp1c3RlZFNwYWNlV2lkdGg7Ci0KLSAgICBHbHlwaCBt
X3plcm9XaWR0aFNwYWNlR2x5cGg7Ci0KLSAgICBzdHJ1Y3QgRGVyaXZlZEZvbnREYXRhIHsKLSAg
ICAgICAgZXhwbGljaXQgRGVyaXZlZEZvbnREYXRhKGJvb2wgY3VzdG9tKQotICAgICAgICAgICAg
OiBmb3JDdXN0b21Gb250KGN1c3RvbSkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICAgIH5E
ZXJpdmVkRm9udERhdGEoKTsKLQotICAgICAgICBib29sIGZvckN1c3RvbUZvbnQ7Ci0gICAgICAg
IFJlZlB0cjxTaW1wbGVGb250RGF0YT4gc21hbGxDYXBzOwotICAgICAgICBSZWZQdHI8U2ltcGxl
Rm9udERhdGE+IGVtcGhhc2lzTWFyazsKLSAgICAgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBi
cm9rZW5JZGVvZ3JhcGg7Ci0gICAgICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gdmVydGljYWxS
aWdodE9yaWVudGF0aW9uOwotICAgICAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IHVwcmlnaHRP
cmllbnRhdGlvbjsKLSAgICAgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBub25TeW50aGV0aWNJ
dGFsaWM7Ci0jaWYgVVNFKEFQUEtJVCkKLSAgICAgICAgSGFzaE1hcDxOU0ZvbnQqLCBSZWZQdHI8
U2ltcGxlRm9udERhdGE+PiBjb21wb3NpdGVGb250UmVmZXJlbmNlczsKLSNlbmRpZgotICAgIH07
Ci0KLSAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxEZXJpdmVkRm9udERhdGE+IG1fZGVyaXZl
ZEZvbnREYXRhOwotCi0jaWYgVVNFKENHKSB8fCBVU0UoQ0FJUk8pCi0gICAgZmxvYXQgbV9zeW50
aGV0aWNCb2xkT2Zmc2V0OwotI2VuZGlmCi0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBtdXRh
YmxlIEhhc2hNYXA8dW5zaWduZWQsIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+PiBtX0NGU3Ry
aW5nQXR0cmlidXRlczsKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oQ09DT0EpIHx8IFVTRShIQVJG
QlVaWikKLSAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxIYXNoTWFwPFN0cmluZywgYm9vbD4+
IG1fY29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2VTdXBwb3J0OwotI2VuZGlmCi0KLSNpZiBQTEFU
Rk9STShXSU4pCi0gICAgYm9vbCBtX2lzU3lzdGVtRm9udDsKLSAgICBtdXRhYmxlIFNDUklQVF9D
QUNIRSBtX3NjcmlwdENhY2hlOwotICAgIG11dGFibGUgU0NSSVBUX0ZPTlRQUk9QRVJUSUVTKiBt
X3NjcmlwdEZvbnRQcm9wZXJ0aWVzOwotI2VuZGlmCi0jaWYgUExBVEZPUk0oSU9TKQotICAgIGJv
b2wgbV9zaG91bGROb3RCZVVzZWRGb3JBcmFiaWM7Ci0jZW5kaWYKLX07Ci0KLUFMV0FZU19JTkxJ
TkUgRmxvYXRSZWN0IFNpbXBsZUZvbnREYXRhOjpib3VuZHNGb3JHbHlwaChHbHlwaCBnbHlwaCkg
Y29uc3QKLXsKLSAgICBpZiAoaXNaZXJvV2lkdGhTcGFjZUdseXBoKGdseXBoKSkKLSAgICAgICAg
cmV0dXJuIEZsb2F0UmVjdCgpOwotCi0gICAgRmxvYXRSZWN0IGJvdW5kczsKLSAgICBpZiAobV9n
bHlwaFRvQm91bmRzTWFwKSB7Ci0gICAgICAgIGJvdW5kcyA9IG1fZ2x5cGhUb0JvdW5kc01hcC0+
bWV0cmljc0ZvckdseXBoKGdseXBoKTsKLSAgICAgICAgaWYgKGJvdW5kcy53aWR0aCgpICE9IGNH
bHlwaFNpemVVbmtub3duKQotICAgICAgICAgICAgcmV0dXJuIGJvdW5kczsKLSAgICB9Ci0KLSAg
ICBib3VuZHMgPSBwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKGdseXBoKTsKLSAgICBpZiAoIW1fZ2x5
cGhUb0JvdW5kc01hcCkKLSAgICAgICAgbV9nbHlwaFRvQm91bmRzTWFwID0gc3RkOjptYWtlX3Vu
aXF1ZTxHbHlwaE1ldHJpY3NNYXA8RmxvYXRSZWN0Pj4oKTsKLSAgICBtX2dseXBoVG9Cb3VuZHNN
YXAtPnNldE1ldHJpY3NGb3JHbHlwaChnbHlwaCwgYm91bmRzKTsKLSAgICByZXR1cm4gYm91bmRz
OwotfQotCi1BTFdBWVNfSU5MSU5FIGZsb2F0IFNpbXBsZUZvbnREYXRhOjp3aWR0aEZvckdseXBo
KEdseXBoIGdseXBoKSBjb25zdAotewotICAgIGlmIChpc1plcm9XaWR0aFNwYWNlR2x5cGgoZ2x5
cGgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGZsb2F0IHdpZHRoID0gbV9nbHlwaFRvV2lk
dGhNYXAubWV0cmljc0ZvckdseXBoKGdseXBoKTsKLSAgICBpZiAod2lkdGggIT0gY0dseXBoU2l6
ZVVua25vd24pCi0gICAgICAgIHJldHVybiB3aWR0aDsKLQotICAgIGlmIChpc1NWR0ZvbnQoKSkK
LSAgICAgICAgd2lkdGggPSBtX3N2Z0RhdGEtPndpZHRoRm9yU1ZHR2x5cGgoZ2x5cGgsIG1fcGxh
dGZvcm1EYXRhLnNpemUoKSk7Ci0jaWYgRU5BQkxFKE9QRU5UWVBFX1ZFUlRJQ0FMKQotICAgIGVs
c2UgaWYgKG1fdmVydGljYWxEYXRhKQotI2lmIFVTRShDRykgfHwgVVNFKENBSVJPKQotICAgICAg
ICB3aWR0aCA9IG1fdmVydGljYWxEYXRhLT5hZHZhbmNlSGVpZ2h0KHRoaXMsIGdseXBoKSArIG1f
c3ludGhldGljQm9sZE9mZnNldDsKLSNlbHNlCi0gICAgICAgIHdpZHRoID0gbV92ZXJ0aWNhbERh
dGEtPmFkdmFuY2VIZWlnaHQodGhpcywgZ2x5cGgpOwotI2VuZGlmCi0jZW5kaWYKLSAgICBlbHNl
Ci0gICAgICAgIHdpZHRoID0gcGxhdGZvcm1XaWR0aEZvckdseXBoKGdseXBoKTsKLQotICAgIG1f
Z2x5cGhUb1dpZHRoTWFwLnNldE1ldHJpY3NGb3JHbHlwaChnbHlwaCwgd2lkdGgpOwotICAgIHJl
dHVybiB3aWR0aDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gU2lt
cGxlRm9udERhdGFfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGV4
dFJ1bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Rl
eHRSdW4uaAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvVGV4dFJ1bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIGNsYXNzIEZv
bnRDYXNjYWRlOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogY2xhc3MgR2x5cGhCdWZmZXI7CiBj
bGFzcyBHbHlwaFRvUGF0aFRyYW5zbGF0b3I7Ci1jbGFzcyBTaW1wbGVGb250RGF0YTsKK2NsYXNz
IEZvbnQ7CiAKIHN0cnVjdCBHbHlwaERhdGE7CiBzdHJ1Y3QgV2lkdGhJdGVyYXRvcjsKQEAgLTE5
OCwxMCArMTk4LDEwIEBAIHB1YmxpYzoKIAogI2lmIEVOQUJMRShTVkdfRk9OVFMpCiAgICAgICAg
IHZpcnR1YWwgR2x5cGhEYXRhIGdseXBoRGF0YUZvckNoYXJhY3Rlcihjb25zdCBGb250Q2FzY2Fk
ZSYsIFdpZHRoSXRlcmF0b3ImLCBVQ2hhcjMyIGNoYXJhY3RlciwgYm9vbCBtaXJyb3IsIGludCBj
dXJyZW50Q2hhcmFjdGVyLCB1bnNpZ25lZCYgYWR2YW5jZUxlbmd0aCwgU3RyaW5nJiBub3JtYWxp
emVkU3BhY2VzU3RyaW5nQ2FjaGUpID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRyYXdTVkdH
bHlwaHMoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgU2ltcGxlRm9udERhdGEqLCBjb25zdCBHbHlw
aEJ1ZmZlciYsIGludCBmcm9tLCBpbnQgdG8sIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdCA9IDA7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBkcmF3U1ZHR2x5cGhzKEdyYXBoaWNzQ29udGV4dCosIGNv
bnN0IEZvbnQqLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBmcm9tLCBpbnQgdG8sIGNvbnN0IEZs
b2F0UG9pbnQmKSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1YWwgZmxvYXQgZmxvYXRXaWR0aFVz
aW5nU1ZHRm9udChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBpbnQmIGNoYXJz
Q29uc3VtZWQsIFN0cmluZyYgZ2x5cGhOYW1lKSBjb25zdCA9IDA7Ci0gICAgICAgIHZpcnR1YWwg
Ym9vbCBhcHBseVNWR0tlcm5pbmcoY29uc3QgU2ltcGxlRm9udERhdGEqLCBXaWR0aEl0ZXJhdG9y
JiwgR2x5cGhCdWZmZXIqLCBpbnQgZnJvbSkgY29uc3QgPSAwOwotICAgICAgICB2aXJ0dWFsIHN0
ZDo6dW5pcXVlX3B0cjxHbHlwaFRvUGF0aFRyYW5zbGF0b3I+IGNyZWF0ZUdseXBoVG9QYXRoVHJh
bnNsYXRvcihjb25zdCBTaW1wbGVGb250RGF0YSYsIGNvbnN0IFRleHRSdW4qLCBjb25zdCBHbHlw
aEJ1ZmZlciYsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JikgY29u
c3QgPSAwOworICAgICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlTVkdLZXJuaW5nKGNvbnN0IEZvbnQq
LCBXaWR0aEl0ZXJhdG9yJiwgR2x5cGhCdWZmZXIqLCBpbnQgZnJvbSkgY29uc3QgPSAwOworICAg
ICAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxHbHlwaFRvUGF0aFRyYW5zbGF0b3I+IGNyZWF0
ZUdseXBoVG9QYXRoVHJhbnNsYXRvcihjb25zdCBGb250JiwgY29uc3QgVGV4dFJ1biosIGNvbnN0
IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQm
KSBjb25zdCA9IDA7CiAjZW5kaWYKICAgICB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMTc4ODU3
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIyLDEwICsyMiwxMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIldpZHRoSXRlcmF0b3IuaCIKIAorI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRl
ICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCiAjaW5jbHVkZSAiTGF0
aW4xVGV4dEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKICNpbmNsdWRl
ICJTdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4
dHJhcy5oPgogCkBAIC0zNCw3ICszNCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBVbmljb2RlOwogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLVdpZHRoSXRlcmF0b3I6OldpZHRoSXRlcmF0b3IoY29uc3Qg
Rm9udENhc2NhZGUqIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBTaW1w
bGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBib29sIGFjY291bnRGb3JHbHlwaEJvdW5kcywg
Ym9vbCBmb3JUZXh0RW1waGFzaXMpCitXaWR0aEl0ZXJhdG9yOjpXaWR0aEl0ZXJhdG9yKGNvbnN0
IEZvbnRDYXNjYWRlKiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgRm9u
dCo+KiBmYWxsYmFja0ZvbnRzLCBib29sIGFjY291bnRGb3JHbHlwaEJvdW5kcywgYm9vbCBmb3JU
ZXh0RW1waGFzaXMpCiAgICAgOiBtX2ZvbnQoZm9udCkKICAgICAsIG1fcnVuKHJ1bikKICAgICAs
IG1fY3VycmVudENoYXJhY3RlcigwKQpAQCAtMTAwLDcgKzEwMCw3IEBAIHB1YmxpYzoKIAogdHlw
ZWRlZiBWZWN0b3I8c3RkOjpwYWlyPGludCwgT3JpZ2luYWxBZHZhbmNlc0ZvckNoYXJhY3RlclRy
ZWF0ZWRBc1NwYWNlPiwgNjQ+IENoYXJhY3RlcnNUcmVhdGVkQXNTcGFjZTsKIAotc3RhdGljIGlu
bGluZSBmbG9hdCBhcHBseUZvbnRUcmFuc2Zvcm1zKEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZlciwg
Ym9vbCBsdHIsIGludCYgbGFzdEdseXBoQ291bnQsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250
RGF0YSwgV2lkdGhJdGVyYXRvciYgaXRlcmF0b3IsIFR5cGVzZXR0aW5nRmVhdHVyZXMgdHlwZXNl
dHRpbmdGZWF0dXJlcywgQ2hhcmFjdGVyc1RyZWF0ZWRBc1NwYWNlJiBjaGFyYWN0ZXJzVHJlYXRl
ZEFzU3BhY2UpCitzdGF0aWMgaW5saW5lIGZsb2F0IGFwcGx5Rm9udFRyYW5zZm9ybXMoR2x5cGhC
dWZmZXIqIGdseXBoQnVmZmVyLCBib29sIGx0ciwgaW50JiBsYXN0R2x5cGhDb3VudCwgY29uc3Qg
Rm9udCogZm9udCwgV2lkdGhJdGVyYXRvciYgaXRlcmF0b3IsIFR5cGVzZXR0aW5nRmVhdHVyZXMg
dHlwZXNldHRpbmdGZWF0dXJlcywgQ2hhcmFjdGVyc1RyZWF0ZWRBc1NwYWNlJiBjaGFyYWN0ZXJz
VHJlYXRlZEFzU3BhY2UpCiB7CiAgICAgQVNTRVJUKHR5cGVzZXR0aW5nRmVhdHVyZXMgJiAoS2Vy
bmluZyB8IExpZ2F0dXJlcykpOwogCkBAIC0xMjMsMTYgKzEyMywxNiBAQCBzdGF0aWMgaW5saW5l
IGZsb2F0IGFwcGx5Rm9udFRyYW5zZm9ybXMoCiAgICAgVU5VU0VEX1BBUkFNKGl0ZXJhdG9yKTsK
ICNlbHNlCiAgICAgLy8gV2UgbmVlZCB0byBoYW5kbGUgdHJhbnNmb3JtcyBvbiBTVkcgZm9udHMg
aW50ZXJuYWxseSwgc2luY2UgdGhleSBhcmUgcmVuZGVyZWQgaW50ZXJuYWxseS4KLSAgICBpZiAo
Zm9udERhdGEtPmlzU1ZHRm9udCgpKSB7CisgICAgaWYgKGZvbnQtPmlzU1ZHRm9udCgpKSB7CiAg
ICAgICAgIC8vIFNWRyBmb250IGxpZ2F0dXJlcyBhcmUgaGFuZGxlZCBkdXJpbmcgZ2x5cGggc2Vs
ZWN0aW9uLCBvbmx5IGtlcm5pbmcgcmVtYWluaW5nLgogICAgICAgICBpZiAoaXRlcmF0b3IucnVu
KCkucmVuZGVyaW5nQ29udGV4dCgpICYmICh0eXBlc2V0dGluZ0ZlYXR1cmVzICYgS2VybmluZykp
IHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBwYXNzIHRoZSBuZWNlc3NhcnkgY29u
dGV4dCBkb3duIHRvIHRoaXMgbGV2ZWwgc28gd2UgY2FuIGxhemlseSBjcmVhdGUgcmVuZGVyaW5n
IGNvbnRleHRzIGF0IHRoaXMgcG9pbnQuCiAgICAgICAgICAgICAvLyBIb3dldmVyLCBhIGxhcmdl
ciByZWZhY3RvcmluZyBvZiBTVkcgZm9udHMgbWlnaHQgbmVjZXNzYXJ5IHRvIHNpZGVzdGVwIHRo
aXMgcHJvYmxlbSBjb21wbGV0ZWx5LgotICAgICAgICAgICAgaXRlcmF0b3IucnVuKCkucmVuZGVy
aW5nQ29udGV4dCgpLT5hcHBseVNWR0tlcm5pbmcoZm9udERhdGEsIGl0ZXJhdG9yLCBnbHlwaEJ1
ZmZlciwgbGFzdEdseXBoQ291bnQpOworICAgICAgICAgICAgaXRlcmF0b3IucnVuKCkucmVuZGVy
aW5nQ29udGV4dCgpLT5hcHBseVNWR0tlcm5pbmcoZm9udCwgaXRlcmF0b3IsIGdseXBoQnVmZmVy
LCBsYXN0R2x5cGhDb3VudCk7CiAgICAgICAgIH0KICAgICB9IGVsc2UKICNlbmRpZgotICAgICAg
ICBmb250RGF0YS0+YXBwbHlUcmFuc2Zvcm1zKGdseXBoQnVmZmVyLT5nbHlwaHMobGFzdEdseXBo
Q291bnQpLCBhZHZhbmNlcyArIGxhc3RHbHlwaENvdW50LCBnbHlwaEJ1ZmZlclNpemUgLSBsYXN0
R2x5cGhDb3VudCwgdHlwZXNldHRpbmdGZWF0dXJlcyk7CisgICAgICAgIGZvbnQtPmFwcGx5VHJh
bnNmb3JtcyhnbHlwaEJ1ZmZlci0+Z2x5cGhzKGxhc3RHbHlwaENvdW50KSwgYWR2YW5jZXMgKyBs
YXN0R2x5cGhDb3VudCwgZ2x5cGhCdWZmZXJTaXplIC0gbGFzdEdseXBoQ291bnQsIHR5cGVzZXR0
aW5nRmVhdHVyZXMpOwogCiAgICAgaWYgKCFsdHIpCiAgICAgICAgIGdseXBoQnVmZmVyLT5yZXZl
cnNlKGxhc3RHbHlwaENvdW50LCBnbHlwaEJ1ZmZlclNpemUgLSBsYXN0R2x5cGhDb3VudCk7CkBA
IC0xNjYsOCArMTY2LDggQEAgaW5saW5lIHVuc2lnbmVkIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2VJ
bgogICAgIGZsb2F0IGxhc3RSb3VuZGluZ1dpZHRoID0gbV9maW5hbFJvdW5kaW5nV2lkdGg7CiAg
ICAgRmxvYXRSZWN0IGJvdW5kczsKIAotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhJiBwcmltYXJ5
Rm9udERhdGEgPSBtX2ZvbnQtPnByaW1hcnlGb250RGF0YSgpOwotICAgIGNvbnN0IFNpbXBsZUZv
bnREYXRhKiBsYXN0Rm9udERhdGEgPSAmcHJpbWFyeUZvbnREYXRhOworICAgIGNvbnN0IEZvbnQm
IHByaW1hcnlGb250ID0gbV9mb250LT5wcmltYXJ5Rm9udCgpOworICAgIGNvbnN0IEZvbnQqIGxh
c3RGb250RGF0YSA9ICZwcmltYXJ5Rm9udDsKICAgICBpbnQgbGFzdEdseXBoQ291bnQgPSBnbHlw
aEJ1ZmZlciA/IGdseXBoQnVmZmVyLT5zaXplKCkgOiAwOwogCiAgICAgVUNoYXIzMiBjaGFyYWN0
ZXIgPSAwOwpAQCAtMTgzLDE1ICsxODMsMTUgQEAgaW5saW5lIHVuc2lnbmVkIFdpZHRoSXRlcmF0
b3I6OmFkdmFuY2VJbgogICAgICAgICAgICAgdGV4dEl0ZXJhdG9yLmFkdmFuY2UoYWR2YW5jZUxl
bmd0aCk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBjb25zdCBT
aW1wbGVGb250RGF0YSogZm9udERhdGEgPSBnbHlwaERhdGEuZm9udERhdGE7Ci0gICAgICAgIEFT
U0VSVChmb250RGF0YSk7CisgICAgICAgIGNvbnN0IEZvbnQqIGZvbnQgPSBnbHlwaERhdGEuZm9u
dDsKKyAgICAgICAgQVNTRVJUKGZvbnQpOwogCiAgICAgICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUg
YSBnbHlwaCBhbmQgZm9udCBkYXRhLCBnZXQgaXRzIHdpZHRoLgogICAgICAgICBmbG9hdCB3aWR0
aDsKICAgICAgICAgaWYgKGNoYXJhY3RlciA9PSAnXHQnICYmIG1fcnVuLmFsbG93VGFicygpKQot
ICAgICAgICAgICAgd2lkdGggPSBtX2ZvbnQtPnRhYldpZHRoKCpmb250RGF0YSwgbV9ydW4udGFi
U2l6ZSgpLCBtX3J1bi54UG9zKCkgKyBtX3J1bldpZHRoU29GYXIgKyB3aWR0aFNpbmNlTGFzdFJv
dW5kaW5nKTsKKyAgICAgICAgICAgIHdpZHRoID0gbV9mb250LT50YWJXaWR0aCgqZm9udCwgbV9y
dW4udGFiU2l6ZSgpLCBtX3J1bi54UG9zKCkgKyBtX3J1bldpZHRoU29GYXIgKyB3aWR0aFNpbmNl
TGFzdFJvdW5kaW5nKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICB3aWR0aCA9IGZvbnRE
YXRhLT53aWR0aEZvckdseXBoKGdseXBoKTsKKyAgICAgICAgICAgIHdpZHRoID0gZm9udC0+d2lk
dGhGb3JHbHlwaChnbHlwaCk7CiAKICAgICAgICAgICAgIC8vIFNWRyB1c2VzIGhvcml6b250YWxH
bHlwaFN0cmV0Y2goKSwgd2hlbiB0ZXh0TGVuZ3RoIGlzIHVzZWQgdG8gc3RyZXRjaC9zcXVlZXpl
IHRleHQuCiAgICAgICAgICAgICB3aWR0aCAqPSBtX3J1bi5ob3Jpem9udGFsR2x5cGhTdHJldGNo
KCk7CkBAIC0yMDAsMjYgKzIwMCwyNiBAQCBpbmxpbmUgdW5zaWduZWQgV2lkdGhJdGVyYXRvcjo6
YWR2YW5jZUluCiAgICAgICAgICAgICAvLyBGaXJzdCwgd2Ugcm91bmQgc3BhY2VzIHRvIGFuIGFk
anVzdGVkIHdpZHRoIGluIGFsbCBmb250cy4KICAgICAgICAgICAgIC8vIFNlY29uZCwgaW4gZml4
ZWQtcGl0Y2ggZm9udHMgd2UgZW5zdXJlIHRoYXQgYWxsIGNoYXJhY3RlcnMgdGhhdAogICAgICAg
ICAgICAgLy8gbWF0Y2ggdGhlIHdpZHRoIG9mIHRoZSBzcGFjZSBjaGFyYWN0ZXIgaGF2ZSB0aGUg
c2FtZSB3aWR0aCBhcyB0aGUgc3BhY2UgY2hhcmFjdGVyLgotICAgICAgICAgICAgaWYgKG1fcnVu
LmFwcGx5V29yZFJvdW5kaW5nKCkgJiYgd2lkdGggPT0gZm9udERhdGEtPnNwYWNlV2lkdGgoKSAm
JiAoZm9udERhdGEtPnBpdGNoKCkgPT0gRml4ZWRQaXRjaCB8fCBnbHlwaCA9PSBmb250RGF0YS0+
c3BhY2VHbHlwaCgpKSkKLSAgICAgICAgICAgICAgICB3aWR0aCA9IGZvbnREYXRhLT5hZGp1c3Rl
ZFNwYWNlV2lkdGgoKTsKKyAgICAgICAgICAgIGlmIChtX3J1bi5hcHBseVdvcmRSb3VuZGluZygp
ICYmIHdpZHRoID09IGZvbnQtPnNwYWNlV2lkdGgoKSAmJiAoZm9udC0+cGl0Y2goKSA9PSBGaXhl
ZFBpdGNoIHx8IGdseXBoID09IGZvbnQtPnNwYWNlR2x5cGgoKSkpCisgICAgICAgICAgICAgICAg
d2lkdGggPSBmb250LT5hZGp1c3RlZFNwYWNlV2lkdGgoKTsKICAgICAgICAgfQogCi0gICAgICAg
IGlmIChmb250RGF0YSAhPSBsYXN0Rm9udERhdGEgJiYgd2lkdGgpIHsKKyAgICAgICAgaWYgKGZv
bnQgIT0gbGFzdEZvbnREYXRhICYmIHdpZHRoKSB7CiAgICAgICAgICAgICBpZiAoc2hvdWxkQXBw
bHlGb250VHJhbnNmb3JtcygpKSB7CiAgICAgICAgICAgICAgICAgbV9ydW5XaWR0aFNvRmFyICs9
IGFwcGx5Rm9udFRyYW5zZm9ybXMoZ2x5cGhCdWZmZXIsIG1fcnVuLmx0cigpLCBsYXN0R2x5cGhD
b3VudCwgbGFzdEZvbnREYXRhLCAqdGhpcywgbV90eXBlc2V0dGluZ0ZlYXR1cmVzLCBjaGFyYWN0
ZXJzVHJlYXRlZEFzU3BhY2UpOwogICAgICAgICAgICAgICAgIGxhc3RHbHlwaENvdW50ID0gZ2x5
cGhCdWZmZXItPnNpemUoKTsgLy8gYXBwbHlGb250VHJhbnNmb3JtcyBkb2Vzbid0IHVwZGF0ZSB3
aGVuIHRoZXJlIGhhZCBiZWVuIG9ubHkgb25lIGdseXBoLgogICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICBsYXN0Rm9udERhdGEgPSBmb250RGF0YTsKLSAgICAgICAgICAgIGlmIChtX2ZhbGxi
YWNrRm9udHMgJiYgZm9udERhdGEgIT0gJnByaW1hcnlGb250RGF0YSkgeworICAgICAgICAgICAg
bGFzdEZvbnREYXRhID0gZm9udDsKKyAgICAgICAgICAgIGlmIChtX2ZhbGxiYWNrRm9udHMgJiYg
Zm9udCAhPSAmcHJpbWFyeUZvbnQpIHsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBk
b2VzIGEgbGl0dGxlIGV4dHJhIHdvcmsgdGhhdCBjb3VsZCBiZSBhdm9pZGVkIGlmCiAgICAgICAg
ICAgICAgICAgLy8gZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKCkgcmV0dXJuZWQgd2hldGhlciBpdCBj
aG9zZSB0byB1c2UgYSBzbWFsbCBjYXBzIGZvbnQuCiAgICAgICAgICAgICAgICAgaWYgKCFtX2Zv
bnQtPmlzU21hbGxDYXBzKCkgfHwgY2hhcmFjdGVyID09IHVfdG91cHBlcihjaGFyYWN0ZXIpKQot
ICAgICAgICAgICAgICAgICAgICBtX2ZhbGxiYWNrRm9udHMtPmFkZChmb250RGF0YSk7CisgICAg
ICAgICAgICAgICAgICAgIG1fZmFsbGJhY2tGb250cy0+YWRkKGZvbnQpOwogICAgICAgICAgICAg
ICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICBjb25zdCBHbHlwaERhdGEmIHVwcGVyY2Fz
ZUdseXBoRGF0YSA9IG1fZm9udC0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHVfdG91cHBlcihjaGFy
YWN0ZXIpLCBydGwpOwotICAgICAgICAgICAgICAgICAgICBpZiAodXBwZXJjYXNlR2x5cGhEYXRh
LmZvbnREYXRhICE9ICZwcmltYXJ5Rm9udERhdGEpCi0gICAgICAgICAgICAgICAgICAgICAgICBt
X2ZhbGxiYWNrRm9udHMtPmFkZCh1cHBlcmNhc2VHbHlwaERhdGEuZm9udERhdGEpOworICAgICAg
ICAgICAgICAgICAgICBpZiAodXBwZXJjYXNlR2x5cGhEYXRhLmZvbnQgIT0gJnByaW1hcnlGb250
KQorICAgICAgICAgICAgICAgICAgICAgICAgbV9mYWxsYmFja0ZvbnRzLT5hZGQodXBwZXJjYXNl
R2x5cGhEYXRhLmZvbnQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAg
ICAgfQpAQCAtMjQzLDkgKzI0Myw5IEBAIGlubGluZSB1bnNpZ25lZCBXaWR0aEl0ZXJhdG9yOjph
ZHZhbmNlSW4KICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnbHlwaEJ1ZmZlcikgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnbHlwaEJ1ZmZlci0+aXNFbXB0eSgpKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX2ZvclRleHRFbXBoYXNpcykKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoQnVmZmVyLT5hZGQoZm9udERh
dGEtPnplcm9XaWR0aFNwYWNlR2x5cGgoKSwgZm9udERhdGEsIG1fZXhwYW5zaW9uUGVyT3Bwb3J0
dW5pdHksIGN1cnJlbnRDaGFyYWN0ZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ2x5cGhCdWZmZXItPmFkZChmb250LT56ZXJvV2lkdGhTcGFjZUdseXBoKCksIGZvbnQs
IG1fZXhwYW5zaW9uUGVyT3Bwb3J0dW5pdHksIGN1cnJlbnRDaGFyYWN0ZXIpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnbHlwaEJ1ZmZlci0+YWRkKGZvbnREYXRhLT5zcGFjZUdseXBoKCksIGZvbnREYXRh
LCBleHBhbnNpb25BdFRoaXNPcHBvcnR1bml0eSwgY3VycmVudENoYXJhY3Rlcik7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+YWRkKGZvbnQtPnNwYWNl
R2x5cGgoKSwgZm9udCwgZXhwYW5zaW9uQXRUaGlzT3Bwb3J0dW5pdHksIGN1cnJlbnRDaGFyYWN0
ZXIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+ZXhwYW5kTGFzdEFkdmFuY2UoZXhwYW5zaW9u
QXRUaGlzT3Bwb3J0dW5pdHkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMjc0LDcg
KzI3NCw3IEBAIGlubGluZSB1bnNpZ25lZCBXaWR0aEl0ZXJhdG9yOjphZHZhbmNlSW4KICAgICAg
ICAgfQogCiAgICAgICAgIGlmIChtX2FjY291bnRGb3JHbHlwaEJvdW5kcykgewotICAgICAgICAg
ICAgYm91bmRzID0gZm9udERhdGEtPmJvdW5kc0ZvckdseXBoKGdseXBoKTsKKyAgICAgICAgICAg
IGJvdW5kcyA9IGZvbnQtPmJvdW5kc0ZvckdseXBoKGdseXBoKTsKICAgICAgICAgICAgIGlmICgh
Y3VycmVudENoYXJhY3RlcikKICAgICAgICAgICAgICAgICBtX2ZpcnN0R2x5cGhPdmVyZmxvdyA9
IHN0ZDo6bWF4PGZsb2F0PigwLCAtYm91bmRzLngoKSk7CiAgICAgICAgIH0KQEAgLTMxNCw3ICsz
MTQsNyBAQCBpbmxpbmUgdW5zaWduZWQgV2lkdGhJdGVyYXRvcjo6YWR2YW5jZUluCiAgICAgICAg
IH0KIAogICAgICAgICBpZiAoZ2x5cGhCdWZmZXIpCi0gICAgICAgICAgICBnbHlwaEJ1ZmZlci0+
YWRkKGdseXBoLCBmb250RGF0YSwgKHJ0bCA/IG9sZFdpZHRoICsgbGFzdFJvdW5kaW5nV2lkdGgg
OiB3aWR0aCksIGN1cnJlbnRDaGFyYWN0ZXIpOworICAgICAgICAgICAgZ2x5cGhCdWZmZXItPmFk
ZChnbHlwaCwgZm9udCwgKHJ0bCA/IG9sZFdpZHRoICsgbGFzdFJvdW5kaW5nV2lkdGggOiB3aWR0
aCksIGN1cnJlbnRDaGFyYWN0ZXIpOwogCiAgICAgICAgIGxhc3RSb3VuZGluZ1dpZHRoID0gd2lk
dGggLSBvbGRXaWR0aDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
V2lkdGhJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1dpZHRoSXRlcmF0b3IuaAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MiwxNCArMzIsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGb250Q2FzY2FkZTsK
IGNsYXNzIEdseXBoQnVmZmVyOwotY2xhc3MgU2ltcGxlRm9udERhdGE7CitjbGFzcyBGb250Owog
Y2xhc3MgVGV4dFJ1bjsKIHN0cnVjdCBHbHlwaERhdGE7CiAKIHN0cnVjdCBXaWR0aEl0ZXJhdG9y
IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBXaWR0aEl0ZXJh
dG9yKGNvbnN0IEZvbnRDYXNjYWRlKiwgY29uc3QgVGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3QgU2lt
cGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDAsIGJvb2wgYWNjb3VudEZvckdseXBoQm91
bmRzID0gZmFsc2UsIGJvb2wgZm9yVGV4dEVtcGhhc2lzID0gZmFsc2UpOworICAgIFdpZHRoSXRl
cmF0b3IoY29uc3QgRm9udENhc2NhZGUqLCBjb25zdCBUZXh0UnVuJiwgSGFzaFNldDxjb25zdCBG
b250Kj4qIGZhbGxiYWNrRm9udHMgPSAwLCBib29sIGFjY291bnRGb3JHbHlwaEJvdW5kcyA9IGZh
bHNlLCBib29sIGZvclRleHRFbXBoYXNpcyA9IGZhbHNlKTsKIAogICAgIHVuc2lnbmVkIGFkdmFu
Y2UoaW50IHRvLCBHbHlwaEJ1ZmZlciopOwogICAgIGJvb2wgYWR2YW5jZU9uZUNoYXJhY3Rlcihm
bG9hdCYgd2lkdGgsIEdseXBoQnVmZmVyJik7CkBAIC05NCw3ICs5NCw3IEBAIHByaXZhdGU6CiAg
ICAgYm9vbCBzaG91bGRBcHBseUZvbnRUcmFuc2Zvcm1zKCkgY29uc3QgeyByZXR1cm4gbV9ydW4u
bGVuZ3RoKCkgPiAxICYmIChtX3R5cGVzZXR0aW5nRmVhdHVyZXMgJiAoS2VybmluZyB8IExpZ2F0
dXJlcykpOyB9CiAKICAgICBUeXBlc2V0dGluZ0ZlYXR1cmVzIG1fdHlwZXNldHRpbmdGZWF0dXJl
czsKLSAgICBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIG1fZmFsbGJhY2tGb250czsK
KyAgICBIYXNoU2V0PGNvbnN0IEZvbnQqPiogbV9mYWxsYmFja0ZvbnRzOwogICAgIGJvb2wgbV9h
Y2NvdW50Rm9yR2x5cGhCb3VuZHM7CiAgICAgZmxvYXQgbV9tYXhHbHlwaEJvdW5kaW5nQm94WTsK
ICAgICBmbG9hdCBtX21pbkdseXBoQm91bmRpbmdCb3hZOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhc2NhZGVDb2NvYS5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FzY2FkZUNvY29h
Lm1tCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9Gb250Q2FzY2FkZUNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMSArMjcs
MTEgQEAKICNpbXBvcnQgIkNvcmVHcmFwaGljc1NQSS5oIgogI2ltcG9ydCAiQ29yZVRleHRTUEku
aCIKICNpbXBvcnQgIkRhc2hBcnJheS5oIgorI2ltcG9ydCAiRm9udC5oIgogI2ltcG9ydCAiR2x5
cGhCdWZmZXIuaCIKICNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dC5oIgogI2ltcG9ydCAiTGF5b3V0
UmVjdC5oIgogI2ltcG9ydCAiTG9nZ2luZy5oIgotI2ltcG9ydCAiU2ltcGxlRm9udERhdGEuaCIK
ICNpbXBvcnQgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKICNpZiBVU0UoQVBQS0lUKQogI2lt
cG9ydCA8QXBwS2l0L0FwcEtpdC5oPgpAQCAtOTEsNyArOTEsNyBAQCBzdGF0aWMgaW5saW5lIGJv
b2wgc2hvdWxkVXNlTGV0dGVycHJlc3NFCiAjZW5kaWYKIH0KIAotc3RhdGljIHZvaWQgc2hvd0xl
dHRlcnByZXNzZWRHbHlwaHNXaXRoQWR2YW5jZXMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNv
bnN0IFNpbXBsZUZvbnREYXRhKiBmb250LCBDR0NvbnRleHRSZWYgY29udGV4dCwgY29uc3QgQ0dH
bHlwaCogZ2x5cGhzLCBjb25zdCBDR1NpemUqIGFkdmFuY2VzLCBzaXplX3QgY291bnQpCitzdGF0
aWMgdm9pZCBzaG93TGV0dGVycHJlc3NlZEdseXBoc1dpdGhBZHZhbmNlcyhjb25zdCBGbG9hdFBv
aW50JiBwb2ludCwgY29uc3QgRm9udCogZm9udCwgQ0dDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0
IENHR2x5cGgqIGdseXBocywgY29uc3QgQ0dTaXplKiBhZHZhbmNlcywgc2l6ZV90IGNvdW50KQog
ewogI2lmIEVOQUJMRShMRVRURVJQUkVTUykKICAgICBpZiAoIWNvdW50KQpAQCAtMTMxLDcgKzEz
MSw3IEBAIHN0YXRpYyB2b2lkIHNob3dMZXR0ZXJwcmVzc2VkR2x5cGhzV2l0aEEKICNlbmRpZgog
fQogCi1zdGF0aWMgdm9pZCBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgQ0dDb250ZXh0UmVmIGNvbnRleHQs
IGNvbnN0IENHR2x5cGgqIGdseXBocywgY29uc3QgQ0dTaXplKiBhZHZhbmNlcywgc2l6ZV90IGNv
dW50KQorc3RhdGljIHZvaWQgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgY29uc3QgRm9udCogZm9udCwgQ0dDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IENH
R2x5cGgqIGdseXBocywgY29uc3QgQ0dTaXplKiBhZHZhbmNlcywgc2l6ZV90IGNvdW50KQogewog
ICAgIGlmICghY291bnQpCiAgICAgICAgIHJldHVybjsKQEAgLTE5Nyw3ICsxOTcsNyBAQCBzdGF0
aWMgdm9pZCBzZXRDR0ZvbnRSZW5kZXJpbmdNb2RlKENHQ29uCiB9CiAjZW5kaWYKIAotdm9pZCBG
b250Q2FzY2FkZTo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFNp
bXBsZUZvbnREYXRhKiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGludCBm
cm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCkgY29uc3QK
K3ZvaWQgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBGb250KiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGludCBmcm9t
LCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCkgY29uc3QKIHsK
ICAgICBjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEgPSBmb250LT5wbGF0Zm9y
bURhdGEoKTsKICAgICBpZiAoIXBsYXRmb3JtRGF0YS5zaXplKCkpCkBAIC00NjgsNyArNDY4LDcg
QEAgcHVibGljOgogICAgICAgICA6IG1faW5kZXgoMCkKICAgICAgICAgLCBtX3RleHRSdW4odGV4
dFJ1bikKICAgICAgICAgLCBtX2dseXBoQnVmZmVyKGdseXBoQnVmZmVyKQotICAgICAgICAsIG1f
Zm9udERhdGEoZ2x5cGhCdWZmZXIuZm9udERhdGFBdChtX2luZGV4KSkKKyAgICAgICAgLCBtX2Zv
bnREYXRhKGdseXBoQnVmZmVyLmZvbnRBdChtX2luZGV4KSkKICAgICAgICAgLCBtX3RyYW5zbGF0
aW9uKENHQWZmaW5lVHJhbnNmb3JtU2NhbGUoQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlVHJhbnNsYXRp
b24odGV4dE9yaWdpbi54KCksIHRleHRPcmlnaW4ueSgpKSwgMSwgLTEpKQogICAgIHsKICAgICAg
ICAgbW92ZVRvTmV4dFZhbGlkR2x5cGgoKTsKQEAgLTQ4Nyw3ICs0ODcsNyBAQCBwcml2YXRlOgog
ICAgIGludCBtX2luZGV4OwogICAgIGNvbnN0IFRleHRSdW4mIG1fdGV4dFJ1bjsKICAgICBjb25z
dCBHbHlwaEJ1ZmZlciYgbV9nbHlwaEJ1ZmZlcjsKLSAgICBjb25zdCBTaW1wbGVGb250RGF0YSog
bV9mb250RGF0YTsKKyAgICBjb25zdCBGb250KiBtX2ZvbnREYXRhOwogICAgIENHQWZmaW5lVHJh
bnNmb3JtIG1fdHJhbnNsYXRpb247CiB9OwogCkBAIC01MjQsNyArNTI0LDcgQEAgdm9pZCBNYWNH
bHlwaFRvUGF0aFRyYW5zbGF0b3I6OmFkdmFuY2UoKQogICAgICAgICArK21faW5kZXg7CiAgICAg
ICAgIGlmIChtX2luZGV4ID49IG1fZ2x5cGhCdWZmZXIuc2l6ZSgpKQogICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIG1fZm9udERhdGEgPSBtX2dseXBoQnVmZmVyLmZvbnREYXRhQXQobV9pbmRl
eCk7CisgICAgICAgIG1fZm9udERhdGEgPSBtX2dseXBoQnVmZmVyLmZvbnRBdChtX2luZGV4KTsK
ICAgICB9IHdoaWxlIChtX2ZvbnREYXRhLT5pc1NWR0ZvbnQoKSAmJiBtX2luZGV4IDwgbV9nbHlw
aEJ1ZmZlci5zaXplKCkpOwogfQogCkBAIC01NDUsNyArNTQ1LDcgQEAgRGFzaEFycmF5IEZvbnRD
YXNjYWRlOjpkYXNoZXNGb3JJbnRlcnNlYwogICAgICAgICByZXR1cm4gRGFzaEFycmF5KCk7CiAg
ICAgCiAgICAgLy8gRklYTUU6IEhhbmRsZSBTVkcgKyBub24tU1ZHIGludGVybGVhdmVkIHJ1bnMu
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzM3NzgKLSAgICBjb25z
dCBTaW1wbGVGb250RGF0YSogZm9udERhdGEgPSBnbHlwaEJ1ZmZlci5mb250RGF0YUF0KDApOwor
ICAgIGNvbnN0IEZvbnQqIGZvbnREYXRhID0gZ2x5cGhCdWZmZXIuZm9udEF0KDApOwogICAgIHN0
ZDo6dW5pcXVlX3B0cjxHbHlwaFRvUGF0aFRyYW5zbGF0b3I+IHRyYW5zbGF0b3I7CiAgICAgYm9v
bCBpc1NWRyA9IGZhbHNlOwogICAgIEZsb2F0UG9pbnQgb3JpZ2luID0gRmxvYXRQb2ludCh0ZXh0
T3JpZ2luLngoKSArIGRlbHRhWCwgdGV4dE9yaWdpbi55KCkpOwpAQCAtNTYxLDggKzU2MSw4IEBA
IERhc2hBcnJheSBGb250Q2FzY2FkZTo6ZGFzaGVzRm9ySW50ZXJzZWMKICAgICBEYXNoQXJyYXkg
cmVzdWx0OwogICAgIGZvciAoaW50IGluZGV4ID0gMDsgdHJhbnNsYXRvci0+Y29udGFpbnNNb3Jl
UGF0aHMoKTsgKytpbmRleCwgdHJhbnNsYXRvci0+YWR2YW5jZSgpKSB7CiAgICAgICAgIEdseXBo
SXRlcmF0aW9uU3RhdGUgaW5mbyA9IEdseXBoSXRlcmF0aW9uU3RhdGUoQ0dQb2ludE1ha2UoMCwg
MCksIENHUG9pbnRNYWtlKDAsIDApLCBsaW5lRXh0ZW50cy55KCksIGxpbmVFeHRlbnRzLnkoKSAr
IGxpbmVFeHRlbnRzLmhlaWdodCgpLCBsaW5lRXh0ZW50cy54KCkgKyBsaW5lRXh0ZW50cy53aWR0
aCgpLCBsaW5lRXh0ZW50cy54KCkpOwotICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogbG9j
YWxGb250RGF0YSA9IGdseXBoQnVmZmVyLmZvbnREYXRhQXQoaW5kZXgpOwotICAgICAgICBpZiAo
IWxvY2FsRm9udERhdGEgfHwgKCFpc1NWRyAmJiBsb2NhbEZvbnREYXRhLT5pc1NWR0ZvbnQoKSkg
fHwgKGlzU1ZHICYmIGxvY2FsRm9udERhdGEgIT0gZm9udERhdGEpKSB7CisgICAgICAgIGNvbnN0
IEZvbnQqIGxvY2FsRm9udCA9IGdseXBoQnVmZmVyLmZvbnRBdChpbmRleCk7CisgICAgICAgIGlm
ICghbG9jYWxGb250IHx8ICghaXNTVkcgJiYgbG9jYWxGb250LT5pc1NWR0ZvbnQoKSkgfHwgKGlz
U1ZHICYmIGxvY2FsRm9udCAhPSBmb250RGF0YSkpIHsKICAgICAgICAgICAgIC8vIFRoZSBhZHZh
bmNlcyB3aWxsIGdldCBhbGwgbWVzc2VkIHVwIGlmIHdlIGRvIGFueXRoaW5nIG90aGVyIHRoYW4g
YmFpbCBoZXJlLgogICAgICAgICAgICAgcmVzdWx0LmNsZWFyKCk7CiAgICAgICAgICAgICBicmVh
azsKQEAgLTU5MiwxMCArNTkyLDEwIEBAIERhc2hBcnJheSBGb250Q2FzY2FkZTo6ZGFzaGVzRm9y
SW50ZXJzZWMKIH0KICNlbmRpZgogCi1ib29sIEZvbnRDYXNjYWRlOjpwcmltYXJ5Rm9udERhdGFJ
c1N5c3RlbUZvbnQoKSBjb25zdAorYm9vbCBGb250Q2FzY2FkZTo6cHJpbWFyeUZvbnRJc1N5c3Rl
bUZvbnQoKSBjb25zdAogewogI2lmIFBMQVRGT1JNKElPUykgfHwgX19NQUNfT1NfWF9WRVJTSU9O
X01JTl9SRVFVSVJFRCA+IDEwOTAKLSAgICBjb25zdCBhdXRvJiBmb250RGF0YSA9IHByaW1hcnlG
b250RGF0YSgpOworICAgIGNvbnN0IGF1dG8mIGZvbnREYXRhID0gcHJpbWFyeUZvbnQoKTsKICAg
ICByZXR1cm4gIWZvbnREYXRhLmlzU1ZHRm9udCgpICYmIENURm9udERlc2NyaXB0b3JJc1N5c3Rl
bVVJRm9udChhZG9wdENGKENURm9udENvcHlGb250RGVzY3JpcHRvcihmb250RGF0YS5wbGF0Zm9y
bURhdGEoKS5jdEZvbnQoKSkpLmdldCgpKTsKICNlbHNlCiAgICAgLy8gU3lzdGVtIGZvbnRzIGFy
ZSBoaWRkZW4gYnkgaGF2aW5nIGEgbmFtZSB0aGF0IGJlZ2lucyB3aXRoIGEgcGVyaW9kLCBzbyBz
aW1wbHkgc2VhcmNoCkBAIC02NzEsNyArNjcxLDcgQEAgdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0Vt
cGhhc2lzTWFya3NGb3JDbwogICAgIGRyYXdFbXBoYXNpc01hcmtzKGNvbnRleHQsIHJ1biwgZ2x5
cGhCdWZmZXIsIG1hcmssIEZsb2F0UG9pbnQocG9pbnQueCgpICsgaW5pdGlhbEFkdmFuY2UsIHBv
aW50LnkoKSkpOwogfQogCi1mbG9hdCBGb250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZvckNvbXBsZXhU
ZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBm
YWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAorZmxvYXQg
Rm9udENhc2NhZGU6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4s
IEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlw
aE92ZXJmbG93KSBjb25zdAogewogICAgIENvbXBsZXhUZXh0Q29udHJvbGxlciBjb250cm9sbGVy
KHRoaXMsIHJ1biwgdHJ1ZSwgZmFsbGJhY2tGb250cyk7CiAgICAgaWYgKGdseXBoT3ZlcmZsb3cp
IHsKQEAgLTY4OSw3ICs2ODksNyBAQCBpbnQgRm9udENhc2NhZGU6Om9mZnNldEZvclBvc2l0aW9u
Rm9yQ29tCiAgICAgcmV0dXJuIGNvbnRyb2xsZXIub2Zmc2V0Rm9yUG9zaXRpb24oeCwgaW5jbHVk
ZVBhcnRpYWxHbHlwaHMpOwogfQogCi1jb25zdCBTaW1wbGVGb250RGF0YSogRm9udENhc2NhZGU6
OmZvbnREYXRhRm9yQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY29uc3QgVUNoYXIqIGNoYXJh
Y3RlcnMsIHNpemVfdCBsZW5ndGgsIEZvbnREYXRhVmFyaWFudCB2YXJpYW50KSBjb25zdAorY29u
c3QgRm9udCogRm9udENhc2NhZGU6OmZvbnRGb3JDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShj
b25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgRm9udFZhcmlhbnQgdmFyaWFu
dCkgY29uc3QKIHsKICAgICBVQ2hhcjMyIGJhc2VDaGFyYWN0ZXI7CiAgICAgc2l6ZV90IGJhc2VD
aGFyYWN0ZXJMZW5ndGggPSAwOwpAQCAtNzAxLDUxICs3MDEsNTEgQEAgY29uc3QgU2ltcGxlRm9u
dERhdGEqIEZvbnRDYXNjYWRlOjpmb250RAogICAgICAgICByZXR1cm4gMDsKIAogICAgIGlmIChs
ZW5ndGggPT0gYmFzZUNoYXJhY3Rlckxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGJhc2VDaGFyYWN0
ZXJHbHlwaERhdGEuZm9udERhdGE7CisgICAgICAgIHJldHVybiBiYXNlQ2hhcmFjdGVyR2x5cGhE
YXRhLmZvbnQ7CiAKLSAgICBib29sIHRyaWVkQmFzZUNoYXJhY3RlckZvbnREYXRhID0gZmFsc2U7
CisgICAgYm9vbCB0cmllZEJhc2VDaGFyYWN0ZXJGb250ID0gZmFsc2U7CiAKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyAhZmFsbGJhY2tSYW5nZXNBdChpKS5pc051bGwoKTsgKytpKSB7Ci0gICAg
ICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBzaW1wbGVGb250RGF0YSA9IGZhbGxiYWNrUmFuZ2Vz
QXQoaSkuZm9udERhdGFGb3JDaGFyYWN0ZXIoYmFzZUNoYXJhY3Rlcik7Ci0gICAgICAgIGlmICgh
c2ltcGxlRm9udERhdGEpCisgICAgICAgIGNvbnN0IEZvbnQqIGZvbnQgPSBmYWxsYmFja1Jhbmdl
c0F0KGkpLmZvbnRGb3JDaGFyYWN0ZXIoYmFzZUNoYXJhY3Rlcik7CisgICAgICAgIGlmICghZm9u
dCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogI2lmIFBMQVRGT1JNKElPUykKLSAgICAgICAgaWYg
KGJhc2VDaGFyYWN0ZXIgPj0gMHgwNjAwICYmIGJhc2VDaGFyYWN0ZXIgPD0gMHgwNmZmICYmIHNp
bXBsZUZvbnREYXRhLT5zaG91bGROb3RCZVVzZWRGb3JBcmFiaWMoKSkKKyAgICAgICAgaWYgKGJh
c2VDaGFyYWN0ZXIgPj0gMHgwNjAwICYmIGJhc2VDaGFyYWN0ZXIgPD0gMHgwNmZmICYmIGZvbnQt
PnNob3VsZE5vdEJlVXNlZEZvckFyYWJpYygpKQogICAgICAgICAgICAgY29udGludWU7CiAjZW5k
aWYKICAgICAgICAgaWYgKHZhcmlhbnQgPT0gTm9ybWFsVmFyaWFudCkgewotICAgICAgICAgICAg
aWYgKHNpbXBsZUZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IFZlcnRp
Y2FsKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woYmFzZUNo
YXJhY3RlcikgJiYgIXNpbXBsZUZvbnREYXRhLT5oYXNWZXJ0aWNhbEdseXBocygpKSB7CisgICAg
ICAgICAgICBpZiAoZm9udC0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNh
bCkgeworICAgICAgICAgICAgICAgIGlmIChpc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGJhc2VDaGFy
YWN0ZXIpICYmICFmb250LT5oYXNWZXJ0aWNhbEdseXBocygpKSB7CiAgICAgICAgICAgICAgICAg
ICAgIHZhcmlhbnQgPSBCcm9rZW5JZGVvZ3JhcGhWYXJpYW50OwotICAgICAgICAgICAgICAgICAg
ICBzaW1wbGVGb250RGF0YSA9IHNpbXBsZUZvbnREYXRhLT5icm9rZW5JZGVvZ3JhcGhGb250RGF0
YSgpLmdldCgpOworICAgICAgICAgICAgICAgICAgICBmb250ID0gZm9udC0+YnJva2VuSWRlb2dy
YXBoRm9udCgpLmdldCgpOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobV9mb250RGVzY3Jp
cHRpb24ubm9uQ0pLR2x5cGhPcmllbnRhdGlvbigpID09IE5vbkNKS0dseXBoT3JpZW50YXRpb25W
ZXJ0aWNhbFJpZ2h0KSB7Ci0gICAgICAgICAgICAgICAgICAgIFNpbXBsZUZvbnREYXRhKiB2ZXJ0
aWNhbFJpZ2h0Rm9udERhdGEgPSBzaW1wbGVGb250RGF0YS0+dmVydGljYWxSaWdodE9yaWVudGF0
aW9uRm9udERhdGEoKS5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgR2x5cGggdmVydGljYWxS
aWdodEdseXBoID0gdmVydGljYWxSaWdodEZvbnREYXRhLT5nbHlwaEZvckNoYXJhY3RlcihiYXNl
Q2hhcmFjdGVyKTsKKyAgICAgICAgICAgICAgICAgICAgRm9udCogdmVydGljYWxSaWdodEZvbnQg
PSBmb250LT52ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250KCkuZ2V0KCk7CisgICAgICAgICAg
ICAgICAgICAgIEdseXBoIHZlcnRpY2FsUmlnaHRHbHlwaCA9IHZlcnRpY2FsUmlnaHRGb250LT5n
bHlwaEZvckNoYXJhY3RlcihiYXNlQ2hhcmFjdGVyKTsKICAgICAgICAgICAgICAgICAgICAgaWYg
KHZlcnRpY2FsUmlnaHRHbHlwaCA9PSBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmdseXBoKQotICAg
ICAgICAgICAgICAgICAgICAgICAgc2ltcGxlRm9udERhdGEgPSB2ZXJ0aWNhbFJpZ2h0Rm9udERh
dGE7CisgICAgICAgICAgICAgICAgICAgICAgICBmb250ID0gdmVydGljYWxSaWdodEZvbnQ7CiAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgU2ltcGxlRm9udERh
dGEqIHVwcmlnaHRGb250RGF0YSA9IHNpbXBsZUZvbnREYXRhLT51cHJpZ2h0T3JpZW50YXRpb25G
b250RGF0YSgpLmdldCgpOwotICAgICAgICAgICAgICAgICAgICBHbHlwaCB1cHJpZ2h0R2x5cGgg
PSB1cHJpZ2h0Rm9udERhdGEtPmdseXBoRm9yQ2hhcmFjdGVyKGJhc2VDaGFyYWN0ZXIpOworICAg
ICAgICAgICAgICAgICAgICBGb250KiB1cHJpZ2h0Rm9udCA9IGZvbnQtPnVwcmlnaHRPcmllbnRh
dGlvbkZvbnQoKS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgR2x5cGggdXByaWdodEdseXBo
ID0gdXByaWdodEZvbnQtPmdseXBoRm9yQ2hhcmFjdGVyKGJhc2VDaGFyYWN0ZXIpOwogICAgICAg
ICAgICAgICAgICAgICBpZiAodXByaWdodEdseXBoICE9IGJhc2VDaGFyYWN0ZXJHbHlwaERhdGEu
Z2x5cGgpCi0gICAgICAgICAgICAgICAgICAgICAgICBzaW1wbGVGb250RGF0YSA9IHVwcmlnaHRG
b250RGF0YTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQgPSB1cHJpZ2h0Rm9udDsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBpZiAoY29uc3QgU2ltcGxlRm9udERhdGEqIHZhcmlhbnRGb250RGF0YSA9IHNpbXBsZUZv
bnREYXRhLT52YXJpYW50Rm9udERhdGEobV9mb250RGVzY3JpcHRpb24sIHZhcmlhbnQpLmdldCgp
KQotICAgICAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gdmFyaWFudEZvbnREYXRhOworICAg
ICAgICAgICAgaWYgKGNvbnN0IEZvbnQqIHZhcmlhbnRGb250ID0gZm9udC0+dmFyaWFudEZvbnQo
bV9mb250RGVzY3JpcHRpb24sIHZhcmlhbnQpLmdldCgpKQorICAgICAgICAgICAgICAgIGZvbnQg
PSB2YXJpYW50Rm9udDsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChzaW1wbGVGb250RGF0YSA9
PSBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmZvbnREYXRhKQotICAgICAgICAgICAgdHJpZWRCYXNl
Q2hhcmFjdGVyRm9udERhdGEgPSB0cnVlOworICAgICAgICBpZiAoZm9udCA9PSBiYXNlQ2hhcmFj
dGVyR2x5cGhEYXRhLmZvbnQpCisgICAgICAgICAgICB0cmllZEJhc2VDaGFyYWN0ZXJGb250ID0g
dHJ1ZTsKIAotICAgICAgICBpZiAoc2ltcGxlRm9udERhdGEtPmNhblJlbmRlckNvbWJpbmluZ0No
YXJhY3RlclNlcXVlbmNlKGNoYXJhY3RlcnMsIGxlbmd0aCkpCi0gICAgICAgICAgICByZXR1cm4g
c2ltcGxlRm9udERhdGE7CisgICAgICAgIGlmIChmb250LT5jYW5SZW5kZXJDb21iaW5pbmdDaGFy
YWN0ZXJTZXF1ZW5jZShjaGFyYWN0ZXJzLCBsZW5ndGgpKQorICAgICAgICAgICAgcmV0dXJuIGZv
bnQ7CiAgICAgfQogCi0gICAgaWYgKCF0cmllZEJhc2VDaGFyYWN0ZXJGb250RGF0YSAmJiBiYXNl
Q2hhcmFjdGVyR2x5cGhEYXRhLmZvbnREYXRhICYmIGJhc2VDaGFyYWN0ZXJHbHlwaERhdGEuZm9u
dERhdGEtPmNhblJlbmRlckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNoYXJhY3RlcnMsIGxl
bmd0aCkpCi0gICAgICAgIHJldHVybiBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmZvbnREYXRhOwor
ICAgIGlmICghdHJpZWRCYXNlQ2hhcmFjdGVyRm9udCAmJiBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRh
LmZvbnQgJiYgYmFzZUNoYXJhY3RlckdseXBoRGF0YS5mb250LT5jYW5SZW5kZXJDb21iaW5pbmdD
aGFyYWN0ZXJTZXF1ZW5jZShjaGFyYWN0ZXJzLCBsZW5ndGgpKQorICAgICAgICByZXR1cm4gYmFz
ZUNoYXJhY3RlckdseXBoRGF0YS5mb250OwogCi0gICAgcmV0dXJuIFNpbXBsZUZvbnREYXRhOjpz
eXN0ZW1GYWxsYmFjaygpOworICAgIHJldHVybiBGb250OjpzeXN0ZW1GYWxsYmFjaygpOwogfQog
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvRm9udENhY2hl
SU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lv
cy9Gb250Q2FjaGVJT1MubW0JKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2lvcy9Gb250Q2FjaGVJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTcz
LDcgKzczLDcgQEAgc3RhdGljIENGQ2hhcmFjdGVyU2V0UmVmIHBob25lRmFsbGJhY2tDaAogICAg
IHJldHVybiBjaGFyYWN0ZXJTZXQ7CiB9CiAKLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZv
bnRDYWNoZTo6Z2V0U3lzdGVtRm9udEZhbGxiYWNrRm9yQ2hhcmFjdGVycyhjb25zdCBGb250RGVz
Y3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBTaW1wbGVGb250RGF0YSogb3JpZ2luYWxGb250
RGF0YSwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCitQYXNzUmVmUHRyPEZv
bnQ+IEZvbnRDYWNoZTo6Z2V0U3lzdGVtRm9udEZhbGxiYWNrRm9yQ2hhcmFjdGVycyhjb25zdCBG
b250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBGb250KiBvcmlnaW5hbEZvbnREYXRh
LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKIHsKICAgICBjb25zdCBGb250
UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEgPSBvcmlnaW5hbEZvbnREYXRhLT5wbGF0Zm9ybURh
dGEoKTsKICAgICBDVEZvbnRSZWYgY3RGb250ID0gcGxhdGZvcm1EYXRhLmZvbnQoKTsKQEAgLTE5
NCw3ICsxOTQsNyBAQCBzdGF0aWMgTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQgbGFuZ3VhZ2VTcGVjCiAg
ICAgcmV0dXJuIExhbmd1YWdlU3BlY2lmaWNGb250OjpOb25lOwogfQogCi1SZWZQdHI8U2ltcGxl
Rm9udERhdGE+IEZvbnRDYWNoZTo6c3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBvcmlnaW5h
bEZvbnREYXRhLCBib29sLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKK1Jl
ZlB0cjxGb250PiBGb250Q2FjaGU6OnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhjb25zdCBG
b250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBGb250KiBvcmlnaW5hbEZvbnREYXRh
LCBib29sLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKIHsKICAgICAvLyBV
bmxpa2UgT1MgWCwgb3VyIGZhbGxiYWNrIGZvbnQgb24gaVBob25lIGlzIEFyaWFsIFVuaWNvZGUs
IHdoaWNoIGRvZXNuJ3QgaGF2ZSBzb21lIGFwcGxlLXNwZWNpZmljIGdseXBocyBsaWtlIEY4RkYu
CiAgICAgLy8gRmFsbCBiYWNrIHRvIHRoZSBBcHBsZSBGYWxsYmFjayBmb250IGluIHRoaXMgY2Fz
ZS4KQEAgLTIyMCw3ICsyMjAsNyBAQCBSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6
c3lzdGVtCiAgICAgaWYgKGxlbmd0aCA+IDApCiAgICAgICAgIGxhbmd1YWdlU3BlY2lmaWNGb250
ID0gbGFuZ3VhZ2VTcGVjaWZpY0ZhbGxiYWNrRm9udChjKTsKIAotICAgIFJlZlB0cjxTaW1wbGVG
b250RGF0YT4gc2ltcGxlRm9udERhdGE7CisgICAgUmVmUHRyPEZvbnQ+IGZvbnQ7CiAKICAgICBz
d2l0Y2ggKGxhbmd1YWdlU3BlY2lmaWNGb250KSB7CiAgICAgY2FzZSBMYW5ndWFnZVNwZWNpZmlj
Rm9udDo6Q2hpbmVzZUphcGFuZXNlOiB7CkBAIC0yOTgsNDMgKzI5OCw0MyBAQCBSZWZQdHI8U2lt
cGxlRm9udERhdGE+IEZvbnRDYWNoZTo6c3lzdGVtCiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
IAotICAgICAgICBzaW1wbGVGb250RGF0YSA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGlz
Rm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gKmNqa0JvbGRbcHJlZmVycmVk
Q0pLRm9udF0gOiAqY2prUGxhaW5bcHJlZmVycmVkQ0pLRm9udF0sIGZhbHNlKTsKKyAgICAgICAg
Zm9udCA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3Jp
cHRpb24ud2VpZ2h0KCkpID8gKmNqa0JvbGRbcHJlZmVycmVkQ0pLRm9udF0gOiAqY2prUGxhaW5b
cHJlZmVycmVkQ0pLRm9udF0sIGZhbHNlKTsKICAgICAgICAgYm9vbCB1c2VTZWNvbmRhcnlGb250
ID0gdHJ1ZTsKLSAgICAgICAgaWYgKHNpbXBsZUZvbnREYXRhKSB7CisgICAgICAgIGlmIChmb250
KSB7CiAgICAgICAgICAgICBDR0dseXBoIGdseXBoc1syXTsKICAgICAgICAgICAgIC8vIENHRm9u
dEdldEdseXBoc0ZvclVuaWNoYXJzIHRha2VzIFVURi0xNiBidWZmZXIuIFNob3VsZCBvbmx5IGJl
IDEgY29kZXBvaW50IGJ1dCBzaW5jZSB3ZSBtYXkgcGFzcyBpbiB0d28gVVRGLTE2IGNoYXJhY3Rl
cnMsCiAgICAgICAgICAgICAvLyBtYWtlIHJvb20gZm9yIDIgZ2x5cGhzIGp1c3QgdG8gYmUgc2Fm
ZS4KLSAgICAgICAgICAgIENHRm9udEdldEdseXBoc0ZvclVuaWNoYXJzKHNpbXBsZUZvbnREYXRh
LT5wbGF0Zm9ybURhdGEoKS5jZ0ZvbnQoKSwgY2hhcmFjdGVycywgZ2x5cGhzLCBsZW5ndGgpOwor
ICAgICAgICAgICAgQ0dGb250R2V0R2x5cGhzRm9yVW5pY2hhcnMoZm9udC0+cGxhdGZvcm1EYXRh
KCkuY2dGb250KCksIGNoYXJhY3RlcnMsIGdseXBocywgbGVuZ3RoKTsKIAogICAgICAgICAgICAg
dXNlU2Vjb25kYXJ5Rm9udCA9IChnbHlwaHNbMF0gPT0gMCk7CiAgICAgICAgIH0KIAogICAgICAg
ICBpZiAodXNlU2Vjb25kYXJ5Rm9udCkKLSAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gZm9u
dEZvckZhbWlseShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWln
aHQoKSkgPyAqY2prQm9sZFtzZWNvbmRhcnlDSktGb250XSA6ICpjamtQbGFpbltzZWNvbmRhcnlD
SktGb250XSwgZmFsc2UpOworICAgICAgICAgICAgZm9udCA9IGZvbnRGb3JGYW1pbHkoZGVzY3Jp
cHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gKmNqa0JvbGRb
c2Vjb25kYXJ5Q0pLRm9udF0gOiAqY2prUGxhaW5bc2Vjb25kYXJ5Q0pLRm9udF0sIGZhbHNlKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6Oktv
cmVhbjogewogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBrb3Jl
YW5QbGFpbigiQXBwbGVTREdvdGhpY05lby1NZWRpdW0iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKTsKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmlu
Zz4ga29yZWFuQm9sZCgiQXBwbGVTREdvdGhpY05lby1Cb2xkIiwgQXRvbWljU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgICAgIHNpbXBsZUZvbnREYXRhID0gZm9udEZvckZhbWls
eShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBr
b3JlYW5Cb2xkIDoga29yZWFuUGxhaW4sIGZhbHNlKTsKKyAgICAgICAgZm9udCA9IGZvbnRGb3JG
YW1pbHkoZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkp
ID8ga29yZWFuQm9sZCA6IGtvcmVhblBsYWluLCBmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KICAgICBjYXNlIExhbmd1YWdlU3BlY2lmaWNGb250OjpDeXJpbGxpYzogewogICAgICAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBjeXJpbGxpY1BsYWluKCJIZWx2ZXRp
Y2FOZXVlIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CiAgICAgICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGN5cmlsbGljQm9sZCgiSGVsdmV0aWNh
TmV1ZS1Cb2xkIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgICAg
IHNpbXBsZUZvbnREYXRhID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0
Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBjeXJpbGxpY0JvbGQgOiBjeXJpbGxpY1BsYWlu
LCBmYWxzZSk7CisgICAgICAgIGZvbnQgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBpc0Zv
bnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/IGN5cmlsbGljQm9sZCA6IGN5cmls
bGljUGxhaW4sIGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgTGFuZ3Vh
Z2VTcGVjaWZpY0ZvbnQ6OkFyYWJpYzogewogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
QXRvbWljU3RyaW5nPiBhcmFiaWNQbGFpbigiR2VlemFQcm8iLCBBdG9taWNTdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKTsKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0
cmluZz4gYXJhYmljQm9sZCgiR2VlemFQcm8tQm9sZCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpOwotICAgICAgICBzaW1wbGVGb250RGF0YSA9IGZvbnRGb3JGYW1pbHkoZGVz
Y3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gYXJhYmlj
Qm9sZCA6IGFyYWJpY1BsYWluLCBmYWxzZSk7CisgICAgICAgIGZvbnQgPSBmb250Rm9yRmFtaWx5
KGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/IGFy
YWJpY0JvbGQgOiBhcmFiaWNQbGFpbiwgZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgY2FzZSBMYW5ndWFnZVNwZWNpZmljRm9udDo6SGVicmV3OiB7CiAgICAgICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGhlYnJld1BsYWluKCJBcmlhbEhlYnJldyIsIEF0
b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwogICAgICAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBoZWJyZXdCb2xkKCJBcmlhbEhlYnJldy1Cb2xkIiwgQXRv
bWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgICAgIHNpbXBsZUZvbnREYXRh
ID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlv
bi53ZWlnaHQoKSkgPyBoZWJyZXdCb2xkIDogaGVicmV3UGxhaW4sIGZhbHNlKTsKKyAgICAgICAg
Zm9udCA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3Jp
cHRpb24ud2VpZ2h0KCkpID8gaGVicmV3Qm9sZCA6IGhlYnJld1BsYWluLCBmYWxzZSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIExhbmd1YWdlU3BlY2lmaWNGb250OjpJbmRpYzog
ewpAQCAtMzkwLDM2ICszOTAsMzYgQEAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6
OnN5c3RlbQogICAgICAgICBpZiAoaW5kaWNQYWdlT3JkZXJJbmRleCA8IChzaXplb2YoaW5kaWNV
bmljb2RlUGFnZUZvbnRzKSAvIHNpemVvZihBdG9taWNTdHJpbmcqKSkpIHsKICAgICAgICAgICAg
IEF0b21pY1N0cmluZyogaW5kaWNGb250U3RyaW5nID0gaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlw
dGlvbi53ZWlnaHQoKSkgPyBpbmRpY1VuaWNvZGVQYWdlRm9udHNCb2xkW2luZGljUGFnZU9yZGVy
SW5kZXhdIDogaW5kaWNVbmljb2RlUGFnZUZvbnRzW2luZGljUGFnZU9yZGVySW5kZXhdOwogICAg
ICAgICAgICAgaWYgKGluZGljRm9udFN0cmluZykKLSAgICAgICAgICAgICAgICBzaW1wbGVGb250
RGF0YSA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sICppbmRpY0ZvbnRTdHJpbmcsIGZhbHNl
KTsKKyAgICAgICAgICAgICAgICBmb250ID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgKmlu
ZGljRm9udFN0cmluZywgZmFsc2UpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0K
ICAgICBjYXNlIExhbmd1YWdlU3BlY2lmaWNGb250OjpUaGFpOiB7CiAgICAgICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHRoYWlQbGFpbigiVGhvbmJ1cmkiLCBBdG9taWNT
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPEF0b21pY1N0cmluZz4gdGhhaUJvbGQoIlRob25idXJpLUJvbGQiLCBBdG9taWNTdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAgc2ltcGxlRm9udERhdGEgPSBmb250Rm9y
RmFtaWx5KGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgp
KSA/IHRoYWlCb2xkIDogdGhhaVBsYWluLCBmYWxzZSk7CisgICAgICAgIGZvbnQgPSBmb250Rm9y
RmFtaWx5KGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgp
KSA/IHRoYWlCb2xkIDogdGhhaVBsYWluLCBmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
ICAgICBjYXNlIExhbmd1YWdlU3BlY2lmaWNGb250OjpUaWJldGFuOiB7CiAgICAgICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHRpYmV0YW5QbGFpbigiS2FpbGFzYSIsIEF0
b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwogICAgICAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiB0aWJldGFuQm9sZCgiS2FpbGFzYS1Cb2xkIiwgQXRvbWlj
U3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgICAgIHNpbXBsZUZvbnREYXRhID0g
Zm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53
ZWlnaHQoKSkgPyB0aWJldGFuQm9sZCA6IHRpYmV0YW5QbGFpbiwgZmFsc2UpOworICAgICAgICBm
b250ID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlw
dGlvbi53ZWlnaHQoKSkgPyB0aWJldGFuQm9sZCA6IHRpYmV0YW5QbGFpbiwgZmFsc2UpOwogICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBMYW5ndWFnZVNwZWNpZmljRm9udDo6Q2FuYWRp
YW5BYm9yaWdpbmFsU3lsbGFiaWM6IHsKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0
b21pY1N0cmluZz4gY2FzUGxhaW4oIkV1cGhlbWlhVUNBUyIsIEF0b21pY1N0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpOwogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3Ry
aW5nPiBjYXNCb2xkKCJFdXBoZW1pYVVDQVMtQm9sZCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpOwotICAgICAgICBzaW1wbGVGb250RGF0YSA9IGZvbnRGb3JGYW1pbHkoZGVz
Y3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gY2FzQm9s
ZCA6IGNhc1BsYWluLCBmYWxzZSk7CisgICAgICAgIGZvbnQgPSBmb250Rm9yRmFtaWx5KGRlc2Ny
aXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/IGNhc0JvbGQg
OiBjYXNQbGFpbiwgZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBMYW5n
dWFnZVNwZWNpZmljRm9udDo6S2htZXI6IHsKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PEF0b21pY1N0cmluZz4ga2htZXIoIktobWVyU2FuZ2FtTU4iLCBBdG9taWNTdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAgc2ltcGxlRm9udERhdGEgPSBmb250Rm9yRmFtaWx5
KGRlc2NyaXB0aW9uLCBraG1lciwgZmFsc2UpOworICAgICAgICBmb250ID0gZm9udEZvckZhbWls
eShkZXNjcmlwdGlvbiwga2htZXIsIGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
IGNhc2UgTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6OkxhbzogewogICAgICAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBsYW8oIkxhb1NhbmdhbU1OIiwgQXRvbWljU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgICAgIHNpbXBsZUZvbnREYXRhID0gZm9udEZvckZh
bWlseShkZXNjcmlwdGlvbiwgbGFvLCBmYWxzZSk7CisgICAgICAgIGZvbnQgPSBmb250Rm9yRmFt
aWx5KGRlc2NyaXB0aW9uLCBsYW8sIGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
IGRlZmF1bHQ6IHsKQEAgLTQzMCwyNyArNDMwLDI3IEBAIFJlZlB0cjxTaW1wbGVGb250RGF0YT4g
Rm9udENhY2hlOjpzeXN0ZW0KICAgICAgICAgICAgICAgICB1c2VFbW9qaUZvbnQgPSBDRkNoYXJh
Y3RlclNldElzTG9uZ0NoYXJhY3Rlck1lbWJlcihhcHBsZUNvbG9yRW1vamlDaGFyYWN0ZXJTZXQo
KSwgYyk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHVzZUVtb2ppRm9udCkKLSAgICAgICAgICAg
IHNpbXBsZUZvbnREYXRhID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgYXBwbGVDb2xvckVt
b2ppLCBmYWxzZSk7CisgICAgICAgICAgICBmb250ID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlv
biwgYXBwbGVDb2xvckVtb2ppLCBmYWxzZSk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAg
UmV0YWluUHRyPENURm9udFJlZj4gZmFsbGJhY2tGb250ID0gYWRvcHRDRihDVEZvbnRDcmVhdGVG
b3JDaGFyYWN0ZXJzKG9yaWdpbmFsRm9udERhdGEtPmdldENURm9udCgpLCBjaGFyYWN0ZXJzLCBs
ZW5ndGgsIG51bGxwdHIpKTsKICAgICAgICAgICAgIGlmIChSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+
IGZvdW5kRm9udE5hbWUgPSBhZG9wdENGKENURm9udENvcHlQb3N0U2NyaXB0TmFtZShmYWxsYmFj
a0ZvbnQuZ2V0KCkpKSkKLSAgICAgICAgICAgICAgICBzaW1wbGVGb250RGF0YSA9IGZvbnRGb3JG
YW1pbHkoZGVzY3JpcHRpb24sIGZvdW5kRm9udE5hbWUuZ2V0KCksIGZhbHNlKTsKKyAgICAgICAg
ICAgICAgICBmb250ID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgZm91bmRGb250TmFtZS5n
ZXQoKSwgZmFsc2UpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICB9CiAK
LSAgICBpZiAoc2ltcGxlRm9udERhdGEpCi0gICAgICAgIHJldHVybiBzaW1wbGVGb250RGF0YS5y
ZWxlYXNlKCk7CisgICAgaWYgKGZvbnQpCisgICAgICAgIHJldHVybiBmb250LnJlbGVhc2UoKTsK
IAogICAgIHJldHVybiBsYXN0UmVzb3J0RmFsbGJhY2tGb250KGRlc2NyaXB0aW9uKTsKIH0KIAot
UmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OnNpbWlsYXJGb250UGxhdGZvcm1EYXRh
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCitSZWZQdHI8Rm9udD4gRm9udENh
Y2hlOjpzaW1pbGFyRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQogewog
ICAgIC8vIEF0dGVtcHQgdG8gZmluZCBhbiBhcHByb3ByaWF0ZSBmb250IHVzaW5nIGEgbWF0Y2gg
YmFzZWQgb24gdGhlIHByZXNlbmNlIG9mIGtleXdvcmRzIGluCiAgICAgLy8gdGhlIHJlcXVlc3Rl
ZCBuYW1lcy4gRm9yIGV4YW1wbGUsIHdlJ2xsIG1hdGNoIGFueSBuYW1lIHRoYXQgY29udGFpbnMg
IkFyYWJpYyIgdG8gR2VlemEgUHJvLgotICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gc2ltcGxl
Rm9udERhdGE7CisgICAgUmVmUHRyPEZvbnQ+IGZvbnQ7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGRlc2NyaXB0aW9uLmZhbWlseUNvdW50KCk7ICsraSkgewogICAgICAgICBjb25zdCBB
dG9taWNTdHJpbmcmIGZhbWlseSA9IGRlc2NyaXB0aW9uLmZhbWlseUF0KGkpOwogICAgICAgICBp
ZiAoZmFtaWx5LmlzRW1wdHkoKSkKQEAgLTQ2MSw3ICs0NjEsNyBAQCBSZWZQdHI8U2ltcGxlRm9u
dERhdGE+IEZvbnRDYWNoZTo6c2ltaWxhCiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxB
dG9taWNTdHJpbmc+IG1lbmxvKCJtZW5sbyIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpOwogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBjb3Vy
aWVyKCJjb3VyaWVyIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CiAgICAg
ICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShmYW1pbHksIG1vbmFjbykgfHwgZXF1YWxJZ25vcmlu
Z0Nhc2UoZmFtaWx5LCBtZW5sbykpIHsKLSAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gZm9u
dEZvckZhbWlseShkZXNjcmlwdGlvbiwgY291cmllcik7CisgICAgICAgICAgICBmb250ID0gZm9u
dEZvckZhbWlseShkZXNjcmlwdGlvbiwgY291cmllcik7CiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgfQogCkBAIC00NjksNyArNDY5LDcgQEAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBG
b250Q2FjaGU6OnNpbWlsYQogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3Ry
aW5nPiBsdWNpZGFHcmFuZGUoImx1Y2lkYSBncmFuZGUiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKTsKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmlu
Zz4gdmVyZGFuYSgidmVyZGFuYSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwp
OwogICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZmFtaWx5LCBsdWNpZGFHcmFuZGUpKSB7
Ci0gICAgICAgICAgICBzaW1wbGVGb250RGF0YSA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24s
IHZlcmRhbmEpOworICAgICAgICAgICAgZm9udCA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24s
IHZlcmRhbmEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIApAQCAtNDc5LDE1
ICs0NzksMTYgQEAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OnNpbWlsYQogICAg
ICAgICBzdGF0aWMgU3RyaW5nKiBtYXRjaFdvcmRzWzNdID0geyAmYXJhYmljLmdldCgpLCAmcGFz
aHRvLmdldCgpLCAmdXJkdS5nZXQoKSB9OwogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
QXRvbWljU3RyaW5nPiBnZWV6YVBsYWluKCJHZWV6YVBybyIsIEF0b21pY1N0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpOwogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3Ry
aW5nPiBnZWV6YUJvbGQoIkdlZXphUHJvLUJvbGQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZy
b21MaXRlcmFsKTsKLSAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCAzICYmICFzaW1wbGVGb250
RGF0YTsgKytqKQorICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDMgJiYgIWZvbnQ7ICsraikg
ewogICAgICAgICAgICAgaWYgKGZhbWlseS5jb250YWlucygqbWF0Y2hXb3Jkc1tqXSwgZmFsc2Up
KQotICAgICAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gZm9udEZvckZhbWlseShkZXNjcmlw
dGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBnZWV6YUJvbGQg
OiBnZWV6YVBsYWluKTsKKyAgICAgICAgICAgICAgICBmb250ID0gZm9udEZvckZhbWlseShkZXNj
cmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBnZWV6YUJv
bGQgOiBnZWV6YVBsYWluKTsKKyAgICAgICAgfQogICAgIH0KIAotICAgIHJldHVybiBzaW1wbGVG
b250RGF0YS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIGZvbnQucmVsZWFzZSgpOwogfQogCi1SZWY8
U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6bGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBG
b250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikKK1JlZjxGb250PiBGb250Q2FjaGU6Omxh
c3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24pCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gZmFsbGJhY2tG
b250RmFtaWx5KCIuUGhvbmVGYWxsYmFjayIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpOwogICAgIHJldHVybiAqZm9udEZvckZhbWlseShmb250RGVzY3JpcHRpb24sIGZhbGxi
YWNrRm9udEZhbWlseSwgZmFsc2UpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvaW9zL1NpbXBsZUZvbnREYXRhSU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9TaW1wbGVGb250RGF0YUlPUy5tbQkocmV2aXNpb24g
MTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL1NpbXBsZUZv
bnREYXRhSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiAgKi8KIAogI2lt
cG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJTaW1wbGVGb250RGF0YS5oIgorI2ltcG9ydCAiRm9u
dC5oIgogCiAjaW1wb3J0ICJCbG9ja0V4Y2VwdGlvbnMuaCIKICNpbXBvcnQgIkNvcmVHcmFwaGlj
c1NQSS5oIgpAQCAtNjcsNyArNjcsNyBAQCBzdGF0aWMgYm9vbCBmb250SGFzVmVydGljYWxHbHlw
aHMoQ1RGb250CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFNpbXBsZUZvbnREYXRhOjpw
bGF0Zm9ybUluaXQoKQordm9pZCBGb250OjpwbGF0Zm9ybUluaXQoKQogewogICAgIG1fc3ludGhl
dGljQm9sZE9mZnNldCA9IG1fcGxhdGZvcm1EYXRhLm1fc3ludGhldGljQm9sZCA/IGNlaWxmKG1f
cGxhdGZvcm1EYXRhLnNpemUoKSAgLyAyNC4wZikgOiAwLmY7CiAgICAgbV9zcGFjZUdseXBoID0g
MDsKQEAgLTEyOCw3ICsxMjgsNyBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUluaXQo
KQogICAgIG1fZm9udE1ldHJpY3Muc2V0TGluZVNwYWNpbmcoMCk7CiB9CiAKLXZvaWQgU2ltcGxl
Rm9udERhdGE6OnBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpCit2b2lkIEZvbnQ6OnBsYXRmb3JtQ2hh
cldpZHRoSW5pdCgpCiB7CiAgICAgbV9hdmdDaGFyV2lkdGggPSAwOwogICAgIG1fbWF4Q2hhcldp
ZHRoID0gMDsKQEAgLTEzNywxMiArMTM3LDEyIEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRm
b3JtQ2hhcldpZHRoSW4KICAgICBpbml0Q2hhcldpZHRocygpOwogfQogCi1QYXNzUmVmUHRyPFNp
bXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1DcmVhdGVTY2FsZWRGb250RGF0
YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3QKK1Bhc3NS
ZWZQdHI8Rm9udD4gRm9udDo6cGxhdGZvcm1DcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGb250
RGVzY3JpcHRpb24mLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3QKIHsKICAgICBpZiAoaXNDdXN0
b21Gb250KCkpIHsKICAgICAgICAgRm9udFBsYXRmb3JtRGF0YSBzY2FsZWRGb250RGF0YShtX3Bs
YXRmb3JtRGF0YSk7CiAgICAgICAgIHNjYWxlZEZvbnREYXRhLm1fc2l6ZSA9IHNjYWxlZEZvbnRE
YXRhLm1fc2l6ZSAqIHNjYWxlRmFjdG9yOwotICAgICAgICByZXR1cm4gU2ltcGxlRm9udERhdGE6
OmNyZWF0ZShzY2FsZWRGb250RGF0YSwgdHJ1ZSwgZmFsc2UpOworICAgICAgICByZXR1cm4gRm9u
dDo6Y3JlYXRlKHNjYWxlZEZvbnREYXRhLCB0cnVlLCBmYWxzZSk7CiAgICAgfQogCiAgICAgZmxv
YXQgc2l6ZSA9IG1fcGxhdGZvcm1EYXRhLnNpemUoKSAqIHNjYWxlRmFjdG9yOwpAQCAtMTY3LDcg
KzE2Nyw3IEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXQKICAgICBy
ZXR1cm4gbnVsbHB0cjsKIH0KIAotdm9pZCBTaW1wbGVGb250RGF0YTo6ZGV0ZXJtaW5lUGl0Y2go
KQordm9pZCBGb250OjpkZXRlcm1pbmVQaXRjaCgpCiB7CiAgICAgQ1RGb250UmVmIGN0Rm9udCA9
IG1fcGxhdGZvcm1EYXRhLmZvbnQoKTsKICAgICBtX3RyZWF0QXNGaXhlZFBpdGNoID0gZmFsc2U7
CkBAIC0xODQsMTIgKzE4NCwxMiBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpkZXRlcm1pbmVQaXRj
aCgpCiAgICAgfQogfQogCi1DR0ZvbnRSZW5kZXJpbmdTdHlsZSBTaW1wbGVGb250RGF0YTo6cmVu
ZGVyaW5nU3R5bGUoKSBjb25zdAorQ0dGb250UmVuZGVyaW5nU3R5bGUgRm9udDo6cmVuZGVyaW5n
U3R5bGUoKSBjb25zdAogewogICAgIHJldHVybiBrQ0dGb250UmVuZGVyaW5nU3R5bGVBbnRpYWxp
YXNpbmcgfCBrQ0dGb250UmVuZGVyaW5nU3R5bGVTdWJwaXhlbFBvc2l0aW9uaW5nIHwga0NHRm9u
dFJlbmRlcmluZ1N0eWxlU3VicGl4ZWxRdWFudGl6YXRpb24gfCBrQ0dGb250QW50aWFsaWFzaW5n
U3R5bGVVbmZpbHRlcmVkOwogfQogCi1ib29sIFNpbXBsZUZvbnREYXRhOjphZHZhbmNlRm9yQ29s
b3JCaXRtYXBGb250KEdseXBoLCBDR1NpemUmKSBjb25zdAorYm9vbCBGb250OjphZHZhbmNlRm9y
Q29sb3JCaXRtYXBGb250KEdseXBoLCBDR1NpemUmKSBjb25zdAogewogICAgIHJldHVybiBmYWxz
ZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4
VGV4dENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxNzg4NTcp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250
cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBwdWJsaWM6CiAgICAg
ewogICAgIH0KIAotICAgIGZsb2F0IHdpZHRoKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbiwg
SGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzKQorICAgIGZsb2F0
IHdpZHRoKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgSGFzaFNldDxjb25zdCBGb250Kj4q
IGZhbGxiYWNrRm9udHMpCiAgICAgewogICAgICAgICBtX2NvbnRyb2xsZXItPmFkdmFuY2UoZnJv
bSwgMCwgQnlXaG9sZUdseXBocywgZmFsbGJhY2tGb250cyk7CiAgICAgICAgIGZsb2F0IGJlZm9y
ZVdpZHRoID0gbV9jb250cm9sbGVyLT5ydW5XaWR0aFNvRmFyKCk7CkBAIC05Niw3ICs5Niw3IEBA
IHZvaWQgRm9udENhc2NhZGU6OmRlbGV0ZUxheW91dChUZXh0TGF5b3UKICAgICBkZWxldGUgbGF5
b3V0OwogfQogCi1mbG9hdCBGb250Q2FzY2FkZTo6d2lkdGgoVGV4dExheW91dCYgbGF5b3V0LCB1
bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEq
PiogZmFsbGJhY2tGb250cykKK2Zsb2F0IEZvbnRDYXNjYWRlOjp3aWR0aChUZXh0TGF5b3V0JiBs
YXlvdXQsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgSGFzaFNldDxjb25zdCBGb250Kj4q
IGZhbGxiYWNrRm9udHMpCiB7CiAgICAgcmV0dXJuIGxheW91dC53aWR0aChmcm9tLCBsZW4sIGZh
bGxiYWNrRm9udHMpOwogfQpAQCAtMTE1LDcgKzExNSw3IEBAIHN0YXRpYyBpbmxpbmUgQ0dGbG9h
dCBjZWlsQ0dGbG9hdChDR0Zsb2EKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q0dGbG9hdD4oY2Vp
bChmKSk7CiB9CiAKLUNvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRDb250cm9sbGVy
KGNvbnN0IEZvbnRDYXNjYWRlKiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGJvb2wgbWF5VXNl
TmF0dXJhbFdyaXRpbmdEaXJlY3Rpb24sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiog
ZmFsbGJhY2tGb250cywgYm9vbCBmb3JUZXh0RW1waGFzaXMpCitDb21wbGV4VGV4dENvbnRyb2xs
ZXI6OkNvbXBsZXhUZXh0Q29udHJvbGxlcihjb25zdCBGb250Q2FzY2FkZSogZm9udCwgY29uc3Qg
VGV4dFJ1biYgcnVuLCBib29sIG1heVVzZU5hdHVyYWxXcml0aW5nRGlyZWN0aW9uLCBIYXNoU2V0
PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cywgYm9vbCBmb3JUZXh0RW1waGFzaXMpCiAgICAg
OiBtX2ZvbnQoKmZvbnQpCiAgICAgLCBtX3J1bihydW4pCiAgICAgLCBtX2lzTFRST25seSh0cnVl
KQpAQCAtMjkxLDcgKzI5MSw3IEBAIHZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpjb2xsZWN0
Q29tcGwKICAgICBpZiAoIW1fZW5kKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBXZSBicmVh
ayB1cCBnbHlwaCBydW4gZ2VuZXJhdGlvbiBmb3IgdGhlIHN0cmluZyBieSBGb250RGF0YS4KKyAg
ICAvLyBXZSBicmVhayB1cCBnbHlwaCBydW4gZ2VuZXJhdGlvbiBmb3IgdGhlIHN0cmluZyBieSBG
b250LgogICAgIGNvbnN0IFVDaGFyKiBjcDsKIAogICAgIGlmIChtX3J1bi5pczhCaXQoKSkgewpA
QCAtMzA4LDkgKzMwOCw5IEBAIHZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpjb2xsZWN0Q29t
cGwKICAgICBjb25zdCBVQ2hhciogY3VyciA9IGNwOwogICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBj
cCArIG1fZW5kOwogCi0gICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhOworICAgIGNv
bnN0IEZvbnQqIGZvbnQ7CiAgICAgYm9vbCBpc01pc3NpbmdHbHlwaDsKLSAgICBjb25zdCBTaW1w
bGVGb250RGF0YSogbmV4dEZvbnREYXRhOworICAgIGNvbnN0IEZvbnQqIG5leHRGb250OwogICAg
IGJvb2wgbmV4dElzTWlzc2luZ0dseXBoOwogCiAgICAgdW5zaWduZWQgbWFya0NvdW50OwpAQCAt
MzMyLDEyICszMzIsMTIgQEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RDb21w
bAogICAgIH0KIAogICAgIG5leHRJc01pc3NpbmdHbHlwaCA9IGZhbHNlOwotICAgIG5leHRGb250
RGF0YSA9IG1fZm9udC5mb250RGF0YUZvckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKHNlcXVl
bmNlU3RhcnQsIGN1cnIgLSBzZXF1ZW5jZVN0YXJ0LCBuZXh0SXNTbWFsbENhcHMgPyBTbWFsbENh
cHNWYXJpYW50IDogTm9ybWFsVmFyaWFudCk7Ci0gICAgaWYgKCFuZXh0Rm9udERhdGEpCisgICAg
bmV4dEZvbnQgPSBtX2ZvbnQuZm9udEZvckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKHNlcXVl
bmNlU3RhcnQsIGN1cnIgLSBzZXF1ZW5jZVN0YXJ0LCBuZXh0SXNTbWFsbENhcHMgPyBTbWFsbENh
cHNWYXJpYW50IDogTm9ybWFsVmFyaWFudCk7CisgICAgaWYgKCFuZXh0Rm9udCkKICAgICAgICAg
bmV4dElzTWlzc2luZ0dseXBoID0gdHJ1ZTsKIAogICAgIHdoaWxlIChjdXJyIDwgZW5kKSB7Ci0g
ICAgICAgIGZvbnREYXRhID0gbmV4dEZvbnREYXRhOworICAgICAgICBmb250ID0gbmV4dEZvbnQ7
CiAgICAgICAgIGlzTWlzc2luZ0dseXBoID0gbmV4dElzTWlzc2luZ0dseXBoOwogICAgICAgICBp
c1NtYWxsQ2FwcyA9IG5leHRJc1NtYWxsQ2FwczsKICAgICAgICAgaW50IGluZGV4ID0gY3VyciAt
IGNwOwpAQCAtMzU4LDE3ICszNTgsMTcgQEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNv
bGxlY3RDb21wbAogCiAgICAgICAgIG5leHRJc01pc3NpbmdHbHlwaCA9IGZhbHNlOwogICAgICAg
ICBpZiAoYmFzZUNoYXJhY3RlciA9PSB6ZXJvV2lkdGhKb2luZXIpCi0gICAgICAgICAgICBuZXh0
Rm9udERhdGEgPSBmb250RGF0YTsKKyAgICAgICAgICAgIG5leHRGb250ID0gZm9udDsKICAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICBuZXh0Rm9udERhdGEgPSBtX2ZvbnQuZm9udERhdGFGb3JD
b21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjcCArIGluZGV4LCBjdXJyIC0gY3AgLSBpbmRleCwg
bmV4dElzU21hbGxDYXBzID8gU21hbGxDYXBzVmFyaWFudCA6IE5vcm1hbFZhcmlhbnQpOwotICAg
ICAgICAgICAgaWYgKCFuZXh0Rm9udERhdGEpCisgICAgICAgICAgICBuZXh0Rm9udCA9IG1fZm9u
dC5mb250Rm9yQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY3AgKyBpbmRleCwgY3VyciAtIGNw
IC0gaW5kZXgsIG5leHRJc1NtYWxsQ2FwcyA/IFNtYWxsQ2Fwc1ZhcmlhbnQgOiBOb3JtYWxWYXJp
YW50KTsKKyAgICAgICAgICAgIGlmICghbmV4dEZvbnQpCiAgICAgICAgICAgICAgICAgbmV4dElz
TWlzc2luZ0dseXBoID0gdHJ1ZTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChuZXh0Rm9udERh
dGEgIT0gZm9udERhdGEgfHwgbmV4dElzTWlzc2luZ0dseXBoICE9IGlzTWlzc2luZ0dseXBoKSB7
CisgICAgICAgIGlmIChuZXh0Rm9udCAhPSBmb250IHx8IG5leHRJc01pc3NpbmdHbHlwaCAhPSBp
c01pc3NpbmdHbHlwaCkgewogICAgICAgICAgICAgaW50IGl0ZW1TdGFydCA9IHN0YXRpY19jYXN0
PGludD4oaW5kZXhPZkZvbnRUcmFuc2l0aW9uKTsKICAgICAgICAgICAgIGludCBpdGVtTGVuZ3Ro
ID0gaW5kZXggLSBpbmRleE9mRm9udFRyYW5zaXRpb247Ci0gICAgICAgICAgICBjb2xsZWN0Q29t
cGxleFRleHRSdW5zRm9yQ2hhcmFjdGVycygoaXNTbWFsbENhcHMgPyBtX3NtYWxsQ2Fwc0J1ZmZl
ci5kYXRhKCkgOiBjcCkgKyBpdGVtU3RhcnQsIGl0ZW1MZW5ndGgsIGl0ZW1TdGFydCwgIWlzTWlz
c2luZ0dseXBoID8gZm9udERhdGEgOiAwKTsKKyAgICAgICAgICAgIGNvbGxlY3RDb21wbGV4VGV4
dFJ1bnNGb3JDaGFyYWN0ZXJzKChpc1NtYWxsQ2FwcyA/IG1fc21hbGxDYXBzQnVmZmVyLmRhdGEo
KSA6IGNwKSArIGl0ZW1TdGFydCwgaXRlbUxlbmd0aCwgaXRlbVN0YXJ0LCAhaXNNaXNzaW5nR2x5
cGggPyBmb250IDogMCk7CiAgICAgICAgICAgICBpbmRleE9mRm9udFRyYW5zaXRpb24gPSBpbmRl
eDsKICAgICAgICAgfQogICAgIH0KQEAgLTM3Niw3ICszNzYsNyBAQCB2b2lkIENvbXBsZXhUZXh0
Q29udHJvbGxlcjo6Y29sbGVjdENvbXBsCiAgICAgaW50IGl0ZW1MZW5ndGggPSBtX2VuZCAtIGlu
ZGV4T2ZGb250VHJhbnNpdGlvbjsKICAgICBpZiAoaXRlbUxlbmd0aCkgewogICAgICAgICBpbnQg
aXRlbVN0YXJ0ID0gaW5kZXhPZkZvbnRUcmFuc2l0aW9uOwotICAgICAgICBjb2xsZWN0Q29tcGxl
eFRleHRSdW5zRm9yQ2hhcmFjdGVycygobmV4dElzU21hbGxDYXBzID8gbV9zbWFsbENhcHNCdWZm
ZXIuZGF0YSgpIDogY3ApICsgaXRlbVN0YXJ0LCBpdGVtTGVuZ3RoLCBpdGVtU3RhcnQsICFuZXh0
SXNNaXNzaW5nR2x5cGggPyBuZXh0Rm9udERhdGEgOiAwKTsKKyAgICAgICAgY29sbGVjdENvbXBs
ZXhUZXh0UnVuc0ZvckNoYXJhY3RlcnMoKG5leHRJc1NtYWxsQ2FwcyA/IG1fc21hbGxDYXBzQnVm
ZmVyLmRhdGEoKSA6IGNwKSArIGl0ZW1TdGFydCwgaXRlbUxlbmd0aCwgaXRlbVN0YXJ0LCAhbmV4
dElzTWlzc2luZ0dseXBoID8gbmV4dEZvbnQgOiAwKTsKICAgICB9CiAKICAgICBpZiAoIW1fcnVu
Lmx0cigpKQpAQCAtNDY5LDcgKzQ2OSw3IEBAIHVuc2lnbmVkIENvbXBsZXhUZXh0Q29udHJvbGxl
cjo6aW5jcmVtZW4KICAgICByZXR1cm4gaW5kZXhPZkN1cnJlbnRSdW4obGVmdG1vc3RHbHlwaCk7
CiB9CiAKLXZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjphZHZhbmNlKHVuc2lnbmVkIG9mZnNl
dCwgR2x5cGhCdWZmZXIqIGdseXBoQnVmZmVyLCBHbHlwaEl0ZXJhdGlvblN0eWxlIGl0ZXJhdGlv
blN0eWxlLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMpCit2
b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6YWR2YW5jZSh1bnNpZ25lZCBvZmZzZXQsIEdseXBo
QnVmZmVyKiBnbHlwaEJ1ZmZlciwgR2x5cGhJdGVyYXRpb25TdHlsZSBpdGVyYXRpb25TdHlsZSwg
SGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMpCiB7CiAgICAgaWYgKHN0YXRpY19j
YXN0PGludD4ob2Zmc2V0KSA+IG1fZW5kKQogICAgICAgICBvZmZzZXQgPSBtX2VuZDsKQEAgLTQ5
NCw4ICs0OTQsOCBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6YWR2YW5jZSh1bnNpCiAg
ICAgICAgIHNpemVfdCBnbHlwaENvdW50ID0gY29tcGxleFRleHRSdW4uZ2x5cGhDb3VudCgpOwog
ICAgICAgICB1bnNpZ25lZCBnID0gbHRyID8gbV9nbHlwaEluQ3VycmVudFJ1biA6IGdseXBoQ291
bnQgLSAxIC0gbV9nbHlwaEluQ3VycmVudFJ1bjsKICAgICAgICAgdW5zaWduZWQgayA9IGxlZnRt
b3N0R2x5cGggKyBnOwotICAgICAgICBpZiAoZmFsbGJhY2tGb250cyAmJiAmY29tcGxleFRleHRS
dW4uZm9udERhdGEoKSAhPSAmbV9mb250LnByaW1hcnlGb250RGF0YSgpKQotICAgICAgICAgICAg
ZmFsbGJhY2tGb250cy0+YWRkKCZjb21wbGV4VGV4dFJ1bi5mb250RGF0YSgpKTsKKyAgICAgICAg
aWYgKGZhbGxiYWNrRm9udHMgJiYgJmNvbXBsZXhUZXh0UnVuLmZvbnQoKSAhPSAmbV9mb250LnBy
aW1hcnlGb250KCkpCisgICAgICAgICAgICBmYWxsYmFja0ZvbnRzLT5hZGQoJmNvbXBsZXhUZXh0
UnVuLmZvbnQoKSk7CiAKICAgICAgICAgLy8gV2UgbXVzdCBzdG9yZSB0aGUgaW5pdGlhbCBhZHZh
bmNlIGZvciB0aGUgZmlyc3QgZ2x5cGggd2UgYXJlIGdvaW5nIHRvIGRyYXcuCiAgICAgICAgIC8v
IFdoZW4gbGVmdG1vc3RHbHlwaCBpcyAwLCBpdCByZXByZXNlbnRzIHRoZSBmaXJzdCBnbHlwaCB0
byBkcmF3LCB0YWtpbmcgaW50bwpAQCAtNTIwLDcgKzUyMCw3IEBAIHZvaWQgQ29tcGxleFRleHRD
b250cm9sbGVyOjphZHZhbmNlKHVuc2kKICAgICAgICAgICAgICAgICByZXR1cm47CiAKICAgICAg
ICAgICAgIGlmIChnbHlwaEJ1ZmZlciAmJiAhbV9jaGFyYWN0ZXJJbkN1cnJlbnRHbHlwaCkKLSAg
ICAgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+YWRkKG1fYWRqdXN0ZWRHbHlwaHNba10sICZjb21w
bGV4VGV4dFJ1bi5mb250RGF0YSgpLCBhZGp1c3RlZEFkdmFuY2UsIGNvbXBsZXhUZXh0UnVuLmlu
ZGV4QXQobV9nbHlwaEluQ3VycmVudFJ1bikpOworICAgICAgICAgICAgICAgIGdseXBoQnVmZmVy
LT5hZGQobV9hZGp1c3RlZEdseXBoc1trXSwgJmNvbXBsZXhUZXh0UnVuLmZvbnQoKSwgYWRqdXN0
ZWRBZHZhbmNlLCBjb21wbGV4VGV4dFJ1bi5pbmRleEF0KG1fZ2x5cGhJbkN1cnJlbnRSdW4pKTsK
IAogICAgICAgICAgICAgdW5zaWduZWQgb2xkQ2hhcmFjdGVySW5DdXJyZW50R2x5cGggPSBtX2No
YXJhY3RlckluQ3VycmVudEdseXBoOwogICAgICAgICAgICAgbV9jaGFyYWN0ZXJJbkN1cnJlbnRH
bHlwaCA9IHN0ZDo6bWluKG1fY3VycmVudENoYXJhY3RlciAtIGNvbXBsZXhUZXh0UnVuLnN0cmlu
Z0xvY2F0aW9uKCksIGdseXBoRW5kT2Zmc2V0KSAtIGdseXBoU3RhcnRPZmZzZXQ7CkBAIC01NjYs
OSArNTY2LDkgQEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmFkanVzdEdseXBocwogICAg
IGZvciAoc2l6ZV90IHIgPSAwOyByIDwgcnVuQ291bnQ7ICsrcikgewogICAgICAgICBDb21wbGV4
VGV4dFJ1biYgY29tcGxleFRleHRSdW4gPSAqbV9jb21wbGV4VGV4dFJ1bnNbcl07CiAgICAgICAg
IHVuc2lnbmVkIGdseXBoQ291bnQgPSBjb21wbGV4VGV4dFJ1bi5nbHlwaENvdW50KCk7Ci0gICAg
ICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhJiBmb250RGF0YSA9IGNvbXBsZXhUZXh0UnVuLmZvbnRE
YXRhKCk7CisgICAgICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBjb21wbGV4VGV4dFJ1bi5mb250KCk7
CiAjaWYgUExBVEZPUk0oSU9TKQotICAgICAgICBib29sIGlzRW1vamkgPSBmb250RGF0YS5wbGF0
Zm9ybURhdGEoKS5tX2lzRW1vamk7CisgICAgICAgIGJvb2wgaXNFbW9qaSA9IGZvbnQucGxhdGZv
cm1EYXRhKCkubV9pc0Vtb2ppOwogI2VuZGlmCiAKICAgICAgICAgLy8gUmVwcmVzZW50IHRoZSBp
bml0aWFsIGFkdmFuY2UgZm9yIGEgdGV4dCBydW4gYnkgYWRqdXN0aW5nIHRoZSBhZHZhbmNlCkBA
IC01ODgsOCArNTg4LDggQEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmFkanVzdEdseXBo
cwogICAgICAgICBjb25zdCBDR1NpemUqIGFkdmFuY2VzID0gY29tcGxleFRleHRSdW4uYWR2YW5j
ZXMoKTsKIAogICAgICAgICBib29sIGxhc3RSdW4gPSByICsgMSA9PSBydW5Db3VudDsKLSAgICAg
ICAgYm9vbCByb3VuZHNBZHZhbmNlcyA9ICFtX2ZvbnQuaXNQcmludGVyRm9udCgpICYmIGZvbnRE
YXRhLnBsYXRmb3JtRGF0YSgpLnJvdW5kc0dseXBoQWR2YW5jZXMoKTsKLSAgICAgICAgZmxvYXQg
c3BhY2VXaWR0aCA9IGZvbnREYXRhLnNwYWNlV2lkdGgoKSAtIGZvbnREYXRhLnN5bnRoZXRpY0Jv
bGRPZmZzZXQoKTsKKyAgICAgICAgYm9vbCByb3VuZHNBZHZhbmNlcyA9ICFtX2ZvbnQuaXNQcmlu
dGVyRm9udCgpICYmIGZvbnQucGxhdGZvcm1EYXRhKCkucm91bmRzR2x5cGhBZHZhbmNlcygpOwor
ICAgICAgICBmbG9hdCBzcGFjZVdpZHRoID0gZm9udC5zcGFjZVdpZHRoKCkgLSBmb250LnN5bnRo
ZXRpY0JvbGRPZmZzZXQoKTsKICAgICAgICAgQ0dGbG9hdCByb3VuZGVkU3BhY2VXaWR0aCA9IHJv
dW5kQ0dGbG9hdChzcGFjZVdpZHRoKTsKICAgICAgICAgY29uc3QgVUNoYXIqIGNwID0gY29tcGxl
eFRleHRSdW4uY2hhcmFjdGVycygpOwogICAgICAgICBDR1BvaW50IGdseXBoT3JpZ2luID0gQ0dQ
b2ludFplcm87CkBAIC02MTYsMzMgKzYxNiwzMyBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxl
cjo6YWRqdXN0R2x5cGhzCiAgICAgICAgICAgICAgICAgbmV4dENoID0gKihtX2NvbXBsZXhUZXh0
UnVuc1tyICsgMV0tPmNoYXJhY3RlcnMoKSArIG1fY29tcGxleFRleHRSdW5zW3IgKyAxXS0+aW5k
ZXhBdCgwKSk7CiAKICAgICAgICAgICAgIGJvb2wgdHJlYXRBc1NwYWNlID0gRm9udENhc2NhZGU6
OnRyZWF0QXNTcGFjZShjaCk7Ci0gICAgICAgICAgICBDR0dseXBoIGdseXBoID0gdHJlYXRBc1Nw
YWNlID8gZm9udERhdGEuc3BhY2VHbHlwaCgpIDogZ2x5cGhzW2ldOworICAgICAgICAgICAgQ0dH
bHlwaCBnbHlwaCA9IHRyZWF0QXNTcGFjZSA/IGZvbnQuc3BhY2VHbHlwaCgpIDogZ2x5cGhzW2ld
OwogICAgICAgICAgICAgQ0dTaXplIGFkdmFuY2UgPSB0cmVhdEFzU3BhY2UgPyBDR1NpemVNYWtl
KHNwYWNlV2lkdGgsIGFkdmFuY2VzW2ldLmhlaWdodCkgOiBhZHZhbmNlc1tpXTsKICNpZiBQTEFU
Rk9STShJT1MpCiAgICAgICAgICAgICBpZiAoaXNFbW9qaSAmJiBhZHZhbmNlLndpZHRoKQotICAg
ICAgICAgICAgICAgIGFkdmFuY2Uud2lkdGggPSBmb250RGF0YS53aWR0aEZvckdseXBoKGdseXBo
KTsKKyAgICAgICAgICAgICAgICBhZHZhbmNlLndpZHRoID0gZm9udC53aWR0aEZvckdseXBoKGds
eXBoKTsKICNlbmRpZgogCiAgICAgICAgICAgICBpZiAoY2ggPT0gJ1x0JyAmJiBtX3J1bi5hbGxv
d1RhYnMoKSkKLSAgICAgICAgICAgICAgICBhZHZhbmNlLndpZHRoID0gbV9mb250LnRhYldpZHRo
KGZvbnREYXRhLCBtX3J1bi50YWJTaXplKCksIG1fcnVuLnhQb3MoKSArIG1fdG90YWxXaWR0aCAr
IHdpZHRoU2luY2VMYXN0Q29tbWl0KTsKKyAgICAgICAgICAgICAgICBhZHZhbmNlLndpZHRoID0g
bV9mb250LnRhYldpZHRoKGZvbnQsIG1fcnVuLnRhYlNpemUoKSwgbV9ydW4ueFBvcygpICsgbV90
b3RhbFdpZHRoICsgd2lkdGhTaW5jZUxhc3RDb21taXQpOwogICAgICAgICAgICAgZWxzZSBpZiAo
Rm9udENhc2NhZGU6OnRyZWF0QXNaZXJvV2lkdGhTcGFjZShjaCkgJiYgIXRyZWF0QXNTcGFjZSkg
ewogICAgICAgICAgICAgICAgIGFkdmFuY2Uud2lkdGggPSAwOwotICAgICAgICAgICAgICAgIGds
eXBoID0gZm9udERhdGEuc3BhY2VHbHlwaCgpOworICAgICAgICAgICAgICAgIGdseXBoID0gZm9u
dC5zcGFjZUdseXBoKCk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGZsb2F0IHJvdW5k
ZWRBZHZhbmNlV2lkdGggPSByb3VuZGYoYWR2YW5jZS53aWR0aCk7CiAgICAgICAgICAgICBpZiAo
cm91bmRzQWR2YW5jZXMpCiAgICAgICAgICAgICAgICAgYWR2YW5jZS53aWR0aCA9IHJvdW5kZWRB
ZHZhbmNlV2lkdGg7CiAKLSAgICAgICAgICAgIGFkdmFuY2Uud2lkdGggKz0gZm9udERhdGEuc3lu
dGhldGljQm9sZE9mZnNldCgpOworICAgICAgICAgICAgYWR2YW5jZS53aWR0aCArPSBmb250LnN5
bnRoZXRpY0JvbGRPZmZzZXQoKTsKIAogIAogICAgICAgICAgICAgLy8gV2Ugc3BlY2lhbCBjYXNl
IHNwYWNlcyBpbiB0d28gd2F5cyB3aGVuIGFwcGx5aW5nIHdvcmQgcm91bmRpbmcuIAogICAgICAg
ICAgICAgLy8gRmlyc3QsIHdlIHJvdW5kIHNwYWNlcyB0byBhbiBhZGp1c3RlZCB3aWR0aCBpbiBh
bGwgZm9udHMuIAogICAgICAgICAgICAgLy8gU2Vjb25kLCBpbiBmaXhlZC1waXRjaCBmb250cyB3
ZSBlbnN1cmUgdGhhdCBhbGwgZ2x5cGhzIHRoYXQgCiAgICAgICAgICAgICAvLyBtYXRjaCB0aGUg
d2lkdGggb2YgdGhlIHNwYWNlIGdseXBoIGhhdmUgdGhlIHNhbWUgd2lkdGggYXMgdGhlIHNwYWNl
IGdseXBoLiAKLSAgICAgICAgICAgIGlmIChtX3J1bi5hcHBseVdvcmRSb3VuZGluZygpICYmIHJv
dW5kZWRBZHZhbmNlV2lkdGggPT0gcm91bmRlZFNwYWNlV2lkdGggJiYgKGZvbnREYXRhLnBpdGNo
KCkgPT0gRml4ZWRQaXRjaCB8fCBnbHlwaCA9PSBmb250RGF0YS5zcGFjZUdseXBoKCkpKQotICAg
ICAgICAgICAgICAgIGFkdmFuY2Uud2lkdGggPSBmb250RGF0YS5hZGp1c3RlZFNwYWNlV2lkdGgo
KTsKKyAgICAgICAgICAgIGlmIChtX3J1bi5hcHBseVdvcmRSb3VuZGluZygpICYmIHJvdW5kZWRB
ZHZhbmNlV2lkdGggPT0gcm91bmRlZFNwYWNlV2lkdGggJiYgKGZvbnQucGl0Y2goKSA9PSBGaXhl
ZFBpdGNoIHx8IGdseXBoID09IGZvbnQuc3BhY2VHbHlwaCgpKSkKKyAgICAgICAgICAgICAgICBh
ZHZhbmNlLndpZHRoID0gZm9udC5hZGp1c3RlZFNwYWNlV2lkdGgoKTsKIAogICAgICAgICAgICAg
aWYgKGhhc0V4dHJhU3BhY2luZykgewogICAgICAgICAgICAgICAgIC8vIElmIHdlJ3JlIGEgZ2x5
cGggd2l0aCBhbiBhZHZhbmNlLCBnbyBhaGVhZCBhbmQgYWRkIGluIGxldHRlci1zcGFjaW5nLgpA
QCAtNzE3LDcgKzcxNyw3IEBAIHZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjphZGp1c3RHbHlw
aHMKICAgICAgICAgICAgIG1fYWRqdXN0ZWRBZHZhbmNlcy5hcHBlbmQoYWR2YW5jZSk7CiAgICAg
ICAgICAgICBtX2FkanVzdGVkR2x5cGhzLmFwcGVuZChnbHlwaCk7CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIEZsb2F0UmVjdCBnbHlwaEJvdW5kcyA9IGZvbnREYXRhLmJvdW5kc0ZvckdseXBo
KGdseXBoKTsKKyAgICAgICAgICAgIEZsb2F0UmVjdCBnbHlwaEJvdW5kcyA9IGZvbnQuYm91bmRz
Rm9yR2x5cGgoZ2x5cGgpOwogICAgICAgICAgICAgZ2x5cGhCb3VuZHMubW92ZShnbHlwaE9yaWdp
bi54LCBnbHlwaE9yaWdpbi55KTsKICAgICAgICAgICAgIG1fbWluR2x5cGhCb3VuZGluZ0JveFgg
PSBzdGQ6Om1pbihtX21pbkdseXBoQm91bmRpbmdCb3hYLCBnbHlwaEJvdW5kcy54KCkpOwogICAg
ICAgICAgICAgbV9tYXhHbHlwaEJvdW5kaW5nQm94WCA9IHN0ZDo6bWF4KG1fbWF4R2x5cGhCb3Vu
ZGluZ0JveFgsIGdseXBoQm91bmRzLm1heFgoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxl
ci5oCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQx
LDcgQEAgdHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19DVExpbmUgKiBDVExpbmVSZQogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBGb250Q2FzY2FkZTsKLWNsYXNzIFNpbXBsZUZvbnREYXRhOwor
Y2xhc3MgRm9udDsKIGNsYXNzIFRleHRSdW47CiAKIGVudW0gR2x5cGhJdGVyYXRpb25TdHlsZSB7
IEluY2x1ZGVQYXJ0aWFsR2x5cGhzLCBCeVdob2xlR2x5cGhzIH07CkBAIC01MCwxMCArNTAsMTAg
QEAgZW51bSBHbHlwaEl0ZXJhdGlvblN0eWxlIHsgSW5jbHVkZVBhcnRpYQogLy8gY29tcGxleCBz
Y3JpcHRzIG9uIE9TIFguCiBjbGFzcyBDb21wbGV4VGV4dENvbnRyb2xsZXIgewogcHVibGljOgot
ICAgIENvbXBsZXhUZXh0Q29udHJvbGxlcihjb25zdCBGb250Q2FzY2FkZSosIGNvbnN0IFRleHRS
dW4mLCBib29sIG1heVVzZU5hdHVyYWxXcml0aW5nRGlyZWN0aW9uID0gZmFsc2UsIEhhc2hTZXQ8
Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDAsIGJvb2wgZm9yVGV4dEVt
cGhhc2lzID0gZmFsc2UpOworICAgIENvbXBsZXhUZXh0Q29udHJvbGxlcihjb25zdCBGb250Q2Fz
Y2FkZSosIGNvbnN0IFRleHRSdW4mLCBib29sIG1heVVzZU5hdHVyYWxXcml0aW5nRGlyZWN0aW9u
ID0gZmFsc2UsIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzID0gMCwgYm9vbCBm
b3JUZXh0RW1waGFzaXMgPSBmYWxzZSk7CiAKICAgICAvLyBBZHZhbmNlIGFuZCBlbWl0IGdseXBo
cyB1cCB0byB0aGUgc3BlY2lmaWVkIGNoYXJhY3Rlci4KLSAgICB2b2lkIGFkdmFuY2UodW5zaWdu
ZWQgdG8sIEdseXBoQnVmZmVyKiA9IDAsIEdseXBoSXRlcmF0aW9uU3R5bGUgPSBJbmNsdWRlUGFy
dGlhbEdseXBocywgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRz
ID0gMCk7CisgICAgdm9pZCBhZHZhbmNlKHVuc2lnbmVkIHRvLCBHbHlwaEJ1ZmZlciogPSAwLCBH
bHlwaEl0ZXJhdGlvblN0eWxlID0gSW5jbHVkZVBhcnRpYWxHbHlwaHMsIEhhc2hTZXQ8Y29uc3Qg
Rm9udCo+KiBmYWxsYmFja0ZvbnRzID0gMCk7CiAKICAgICAvLyBDb21wdXRlIHRoZSBjaGFyYWN0
ZXIgb2Zmc2V0IGZvciBhIGdpdmVuIHggY29vcmRpbmF0ZS4KICAgICBpbnQgb2Zmc2V0Rm9yUG9z
aXRpb24oZmxvYXQgeCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocyk7CkBAIC03MywxOCArNzMs
MTggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBjbGFzcyBDb21wbGV4VGV4dFJ1biA6IHB1Ymxp
YyBSZWZDb3VudGVkPENvbXBsZXhUZXh0UnVuPiB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0
aWMgUmVmPENvbXBsZXhUZXh0UnVuPiBjcmVhdGUoQ1RSdW5SZWYgY3RSdW4sIGNvbnN0IFNpbXBs
ZUZvbnREYXRhJiBmb250RGF0YSwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIHN0
cmluZ0xvY2F0aW9uLCBzaXplX3Qgc3RyaW5nTGVuZ3RoLCBDRlJhbmdlIHJ1blJhbmdlKQorICAg
ICAgICBzdGF0aWMgUmVmPENvbXBsZXhUZXh0UnVuPiBjcmVhdGUoQ1RSdW5SZWYgY3RSdW4sIGNv
bnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBzdHJpbmdM
b2NhdGlvbiwgc2l6ZV90IHN0cmluZ0xlbmd0aCwgQ0ZSYW5nZSBydW5SYW5nZSkKICAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ29tcGxleFRleHRSdW4oY3RSdW4s
IGZvbnREYXRhLCBjaGFyYWN0ZXJzLCBzdHJpbmdMb2NhdGlvbiwgc3RyaW5nTGVuZ3RoLCBydW5S
YW5nZSkpOworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ29tcGxleFRleHRSdW4o
Y3RSdW4sIGZvbnQsIGNoYXJhY3RlcnMsIHN0cmluZ0xvY2F0aW9uLCBzdHJpbmdMZW5ndGgsIHJ1
blJhbmdlKSk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgUmVmPENvbXBsZXhUZXh0UnVu
PiBjcmVhdGUoY29uc3QgU2ltcGxlRm9udERhdGEmIGZvbnREYXRhLCBjb25zdCBVQ2hhciogY2hh
cmFjdGVycywgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24sIHNpemVfdCBzdHJpbmdMZW5ndGgsIGJv
b2wgbHRyKQorICAgICAgICBzdGF0aWMgUmVmPENvbXBsZXhUZXh0UnVuPiBjcmVhdGUoY29uc3Qg
Rm9udCYgZm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIHN0cmluZ0xvY2F0
aW9uLCBzaXplX3Qgc3RyaW5nTGVuZ3RoLCBib29sIGx0cikKICAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ29tcGxleFRleHRSdW4oZm9udERhdGEsIGNoYXJhY3Rl
cnMsIHN0cmluZ0xvY2F0aW9uLCBzdHJpbmdMZW5ndGgsIGx0cikpOworICAgICAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgQ29tcGxleFRleHRSdW4oZm9udCwgY2hhcmFjdGVycywgc3RyaW5n
TG9jYXRpb24sIHN0cmluZ0xlbmd0aCwgbHRyKSk7CiAgICAgICAgIH0KIAogICAgICAgICB1bnNp
Z25lZCBnbHlwaENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9nbHlwaENvdW50OyB9Ci0gICAgICAg
IGNvbnN0IFNpbXBsZUZvbnREYXRhJiBmb250RGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERh
dGE7IH0KKyAgICAgICAgY29uc3QgRm9udCYgZm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udDsg
fQogICAgICAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fY2hh
cmFjdGVyczsgfQogICAgICAgICB1bnNpZ25lZCBzdHJpbmdMb2NhdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fc3RyaW5nTG9jYXRpb247IH0KICAgICAgICAgc2l6ZV90IHN0cmluZ0xlbmd0aCgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RyaW5nTGVuZ3RoOyB9CkBAIC0xMDAsMTEgKzEwMCwxMSBAQCBwcml2
YXRlOgogICAgICAgICB2b2lkIHNldElzTm9uTW9ub3RvbmljKCk7CiAKICAgICBwcml2YXRlOgot
ICAgICAgICBDb21wbGV4VGV4dFJ1bihDVFJ1blJlZiwgY29uc3QgU2ltcGxlRm9udERhdGEmLCBj
b25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24sIHNpemVfdCBz
dHJpbmdMZW5ndGgsIENGUmFuZ2UgcnVuUmFuZ2UpOwotICAgICAgICBDb21wbGV4VGV4dFJ1bihj
b25zdCBTaW1wbGVGb250RGF0YSYsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBz
dHJpbmdMb2NhdGlvbiwgc2l6ZV90IHN0cmluZ0xlbmd0aCwgYm9vbCBsdHIpOworICAgICAgICBD
b21wbGV4VGV4dFJ1bihDVFJ1blJlZiwgY29uc3QgRm9udCYsIGNvbnN0IFVDaGFyKiBjaGFyYWN0
ZXJzLCB1bnNpZ25lZCBzdHJpbmdMb2NhdGlvbiwgc2l6ZV90IHN0cmluZ0xlbmd0aCwgQ0ZSYW5n
ZSBydW5SYW5nZSk7CisgICAgICAgIENvbXBsZXhUZXh0UnVuKGNvbnN0IEZvbnQmLCBjb25zdCBV
Q2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24sIHNpemVfdCBzdHJpbmdM
ZW5ndGgsIGJvb2wgbHRyKTsKIAogICAgICAgICB1bnNpZ25lZCBtX2dseXBoQ291bnQ7Ci0gICAg
ICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhJiBtX2ZvbnREYXRhOworICAgICAgICBjb25zdCBGb250
JiBtX2ZvbnQ7CiAgICAgICAgIGNvbnN0IFVDaGFyKiBtX2NoYXJhY3RlcnM7CiAgICAgICAgIHVu
c2lnbmVkIG1fc3RyaW5nTG9jYXRpb247CiAgICAgICAgIHNpemVfdCBtX3N0cmluZ0xlbmd0aDsK
QEAgLTEyNyw3ICsxMjcsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBjb2xsZWN0Q29tcGxleFRl
eHRSdW5zKCk7CiAKLSAgICB2b2lkIGNvbGxlY3RDb21wbGV4VGV4dFJ1bnNGb3JDaGFyYWN0ZXJz
KGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdHJpbmdMb2NhdGlvbiwg
Y29uc3QgU2ltcGxlRm9udERhdGEqKTsKKyAgICB2b2lkIGNvbGxlY3RDb21wbGV4VGV4dFJ1bnNG
b3JDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdHJp
bmdMb2NhdGlvbiwgY29uc3QgRm9udCopOwogICAgIHZvaWQgYWRqdXN0R2x5cGhzQW5kQWR2YW5j
ZXMoKTsKIAogICAgIHVuc2lnbmVkIGluZGV4T2ZDdXJyZW50UnVuKHVuc2lnbmVkJiBsZWZ0bW9z
dEdseXBoKTsKQEAgLTE2OSw3ICsxNjksNyBAQCBwcml2YXRlOgogICAgIGZsb2F0IG1fbGVhZGlu
Z0V4cGFuc2lvbjsKICAgICBib29sIG1fYWZ0ZXJFeHBhbnNpb247CiAKLSAgICBIYXNoU2V0PGNv
bnN0IFNpbXBsZUZvbnREYXRhKj4qIG1fZmFsbGJhY2tGb250czsKKyAgICBIYXNoU2V0PGNvbnN0
IEZvbnQqPiogbV9mYWxsYmFja0ZvbnRzOwogCiAgICAgZmxvYXQgbV9taW5HbHlwaEJvdW5kaW5n
Qm94WDsKICAgICBmbG9hdCBtX21heEdseXBoQm91bmRpbmdCb3hYOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9D
b21wbGV4VGV4dENvbnRyb2xsZXJDb3JlVGV4dC5tbQkocmV2aXNpb24gMTc4ODU3KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNv
cmVUZXh0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3IEBAIC0gKGlkKWluaXRXaXRo
Rm9udDooY29uc3QgV2ViQ29yZTo6Rm9udEMKICAgICBfY2hhcmFjdGVyID0gY2hhcmFjdGVyOwog
CiAgICAgLy8gQnkgdGhlIHRpbWUgYSBXZWJDYXNjYWRlTGlzdCBpcyB1c2VkLCB0aGUgRm9udENh
c2NhZGUgaGFzIGFscmVhZHkgYmVlbiBhc2tlZCB0byByZWFsaXplIGFsbCBvZiBpdHMKLSAgICAv
LyBGb250RGF0YSwgc28gdGhpcyBsb29wIGRvZXMgbm90IGhpdCB0aGUgRm9udENhY2hlLgorICAg
IC8vIEZvbnRzLCBzbyB0aGlzIGxvb3AgZG9lcyBub3QgaGl0IHRoZSBGb250Q2FjaGUuCiAgICAg
d2hpbGUgKCFfZm9udC0+ZmFsbGJhY2tSYW5nZXNBdChfY291bnQpLmlzTnVsbCgpKQogICAgICAg
ICBfY291bnQrKzsKIApAQCAtODIsMTAgKzgyLDEwIEBAIC0gKGlkKW9iamVjdEF0SW5kZXg6KE5T
VUludGVnZXIpaW5kZXgKICAgICB9IGVsc2UKICAgICAgICAgX2ZvbnREZXNjcmlwdG9ycy5ncm93
KGluZGV4ICsgMSk7CiAKLSAgICBjb25zdCBXZWJDb3JlOjpTaW1wbGVGb250RGF0YSogc2ltcGxl
Rm9udERhdGEgPSBfZm9udC0+ZmFsbGJhY2tSYW5nZXNBdChpbmRleCkuZm9udERhdGFGb3JDaGFy
YWN0ZXIoX2NoYXJhY3Rlcik7Ci0gICAgaWYgKCFzaW1wbGVGb250RGF0YSkKLSAgICAgICAgc2lt
cGxlRm9udERhdGEgPSAmX2ZvbnQtPmZhbGxiYWNrUmFuZ2VzQXQoaW5kZXgpLmZvbnREYXRhRm9y
Rmlyc3RSYW5nZSgpOwotICAgIGZvbnREZXNjcmlwdG9yID0gQ1RGb250Q29weUZvbnREZXNjcmlw
dG9yKHNpbXBsZUZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSk7CisgICAgY29uc3Qg
V2ViQ29yZTo6Rm9udCogZm9udCA9IF9mb250LT5mYWxsYmFja1Jhbmdlc0F0KGluZGV4KS5mb250
Rm9yQ2hhcmFjdGVyKF9jaGFyYWN0ZXIpOworICAgIGlmICghZm9udCkKKyAgICAgICAgZm9udCA9
ICZfZm9udC0+ZmFsbGJhY2tSYW5nZXNBdChpbmRleCkuZm9udEZvckZpcnN0UmFuZ2UoKTsKKyAg
ICBmb250RGVzY3JpcHRvciA9IENURm9udENvcHlGb250RGVzY3JpcHRvcihmb250LT5wbGF0Zm9y
bURhdGEoKS5jdEZvbnQoKSk7CiAgICAgX2ZvbnREZXNjcmlwdG9yc1tpbmRleF0gPSBhZG9wdENG
KGZvbnREZXNjcmlwdG9yKTsKICAgICByZXR1cm4gKGlkKWZvbnREZXNjcmlwdG9yOwogfQpAQCAt
OTQsOCArOTQsOCBAQCAtIChpZClvYmplY3RBdEluZGV4OihOU1VJbnRlZ2VyKWluZGV4CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotQ29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dFJ1
bjo6Q29tcGxleFRleHRSdW4oQ1RSdW5SZWYgY3RSdW4sIGNvbnN0IFNpbXBsZUZvbnREYXRhJiBm
b250RGF0YSwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIHN0cmluZ0xvY2F0aW9u
LCBzaXplX3Qgc3RyaW5nTGVuZ3RoLCBDRlJhbmdlIHJ1blJhbmdlKQotICAgIDogbV9mb250RGF0
YShmb250RGF0YSkKK0NvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRSdW46OkNvbXBs
ZXhUZXh0UnVuKENUUnVuUmVmIGN0UnVuLCBjb25zdCBGb250JiBmb250LCBjb25zdCBVQ2hhciog
Y2hhcmFjdGVycywgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24sIHNpemVfdCBzdHJpbmdMZW5ndGgs
IENGUmFuZ2UgcnVuUmFuZ2UpCisgICAgOiBtX2ZvbnQoZm9udCkKICAgICAsIG1fY2hhcmFjdGVy
cyhjaGFyYWN0ZXJzKQogICAgICwgbV9zdHJpbmdMb2NhdGlvbihzdHJpbmdMb2NhdGlvbikKICAg
ICAsIG1fc3RyaW5nTGVuZ3RoKHN0cmluZ0xlbmd0aCkKQEAgLTEzMCw4ICsxMzAsOCBAQCBDb21w
bGV4VGV4dENvbnRyb2xsZXI6OkNvbXBsZXhUZXh0UnVuOjpDCiAKIC8vIE1pc3NpbmcgZ2x5cGhz
IHJ1biBjb25zdHJ1Y3Rvci4gQ29yZSBUZXh0IHdpbGwgbm90IGdlbmVyYXRlIGEgcnVuIG9mIG1p
c3NpbmcgZ2x5cGhzLCBpbnN0ZWFkIGZhbGxpbmcgYmFjayBvbgogLy8gZ2x5cGhzIGZyb20gTGFz
dFJlc29ydC4gV2Ugd2FudCB0byB1c2UgdGhlIHByaW1hcnkgZm9udCdzIG1pc3NpbmcgZ2x5cGgg
aW4gb3JkZXIgdG8gbWF0Y2ggdGhlIGZhc3QgdGV4dCBjb2RlIHBhdGguCi1Db21wbGV4VGV4dENv
bnRyb2xsZXI6OkNvbXBsZXhUZXh0UnVuOjpDb21wbGV4VGV4dFJ1bihjb25zdCBTaW1wbGVGb250
RGF0YSYgZm9udERhdGEsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBzdHJpbmdM
b2NhdGlvbiwgc2l6ZV90IHN0cmluZ0xlbmd0aCwgYm9vbCBsdHIpCi0gICAgOiBtX2ZvbnREYXRh
KGZvbnREYXRhKQorQ29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dFJ1bjo6Q29tcGxl
eFRleHRSdW4oY29uc3QgRm9udCYgZm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2ln
bmVkIHN0cmluZ0xvY2F0aW9uLCBzaXplX3Qgc3RyaW5nTGVuZ3RoLCBib29sIGx0cikKKyAgICA6
IG1fZm9udChmb250KQogICAgICwgbV9jaGFyYWN0ZXJzKGNoYXJhY3RlcnMpCiAgICAgLCBtX3N0
cmluZ0xvY2F0aW9uKHN0cmluZ0xvY2F0aW9uKQogICAgICwgbV9zdHJpbmdMZW5ndGgoc3RyaW5n
TGVuZ3RoKQpAQCAtMTYzLDcgKzE2Myw3IEBAIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxl
eFRleHRSdW46OkMKICAgICAvLyBTeW50aGVzaXplIGEgcnVuIG9mIG1pc3NpbmcgZ2x5cGhzLgog
ICAgIG1fZ2x5cGhzVmVjdG9yLmZpbGwoMCwgbV9nbHlwaENvdW50KTsKICAgICBtX2dseXBocyA9
IG1fZ2x5cGhzVmVjdG9yLmRhdGEoKTsKLSAgICBtX2FkdmFuY2VzVmVjdG9yLmZpbGwoQ0dTaXpl
TWFrZShtX2ZvbnREYXRhLndpZHRoRm9yR2x5cGgoMCksIDApLCBtX2dseXBoQ291bnQpOworICAg
IG1fYWR2YW5jZXNWZWN0b3IuZmlsbChDR1NpemVNYWtlKG1fZm9udC53aWR0aEZvckdseXBoKDAp
LCAwKSwgbV9nbHlwaENvdW50KTsKICAgICBtX2FkdmFuY2VzID0gbV9hZHZhbmNlc1ZlY3Rvci5k
YXRhKCk7CiB9CiAKQEAgLTE4NCwxMSArMTg0LDExIEBAIHN0YXRpYyBjb25zdCBVbmlDaGFyKiBw
cm92aWRlU3RyaW5nQW5kQXQKICAgICByZXR1cm4gaW5mby0+Y3AgKyBzdHJpbmdJbmRleDsKIH0K
IAotdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RDb21wbGV4VGV4dFJ1bnNGb3JD
aGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBjcCwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdHJp
bmdMb2NhdGlvbiwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQordm9pZCBDb21wbGV4
VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RDb21wbGV4VGV4dFJ1bnNGb3JDaGFyYWN0ZXJzKGNvbnN0
IFVDaGFyKiBjcCwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdHJpbmdMb2NhdGlvbiwgY29u
c3QgRm9udCogZm9udCkKIHsKLSAgICBpZiAoIWZvbnREYXRhKSB7CisgICAgaWYgKCFmb250KSB7
CiAgICAgICAgIC8vIENyZWF0ZSBhIHJ1biBvZiBtaXNzaW5nIGdseXBocyBmcm9tIHRoZSBwcmlt
YXJ5IGZvbnQuCi0gICAgICAgIG1fY29tcGxleFRleHRSdW5zLmFwcGVuZChDb21wbGV4VGV4dFJ1
bjo6Y3JlYXRlKG1fZm9udC5wcmltYXJ5Rm9udERhdGEoKSwgY3AsIHN0cmluZ0xvY2F0aW9uLCBs
ZW5ndGgsIG1fcnVuLmx0cigpKSk7CisgICAgICAgIG1fY29tcGxleFRleHRSdW5zLmFwcGVuZChD
b21wbGV4VGV4dFJ1bjo6Y3JlYXRlKG1fZm9udC5wcmltYXJ5Rm9udCgpLCBjcCwgc3RyaW5nTG9j
YXRpb24sIGxlbmd0aCwgbV9ydW4ubHRyKCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApA
QCAtMTk2LDI2ICsxOTYsMjYgQEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RD
b21wbAogCiAgICAgVUNoYXIzMiBiYXNlQ2hhcmFjdGVyID0gMDsKICAgICBSZXRhaW5QdHI8Q0ZE
aWN0aW9uYXJ5UmVmPiBzdHJpbmdBdHRyaWJ1dGVzOwotICAgIGlmIChmb250RGF0YSA9PSBTaW1w
bGVGb250RGF0YTo6c3lzdGVtRmFsbGJhY2soKSkgeworICAgIGlmIChmb250ID09IEZvbnQ6OnN5
c3RlbUZhbGxiYWNrKCkpIHsKICAgICAgICAgLy8gRklYTUU6IFRoaXMgY29kZSBwYXRoIGRvZXMg
bm90IHN1cHBvcnQgc21hbGwgY2Fwcy4KICAgICAgICAgaXNTeXN0ZW1GYWxsYmFjayA9IHRydWU7
CiAKICAgICAgICAgVTE2X0dFVChjcCwgMCwgMCwgbGVuZ3RoLCBiYXNlQ2hhcmFjdGVyKTsKLSAg
ICAgICAgZm9udERhdGEgPSBtX2ZvbnQuZmFsbGJhY2tSYW5nZXNBdCgwKS5mb250RGF0YUZvckNo
YXJhY3RlcihiYXNlQ2hhcmFjdGVyKTsKLSAgICAgICAgaWYgKCFmb250RGF0YSkKLSAgICAgICAg
ICAgIGZvbnREYXRhID0gJm1fZm9udC5mYWxsYmFja1Jhbmdlc0F0KDApLmZvbnREYXRhRm9yRmly
c3RSYW5nZSgpOworICAgICAgICBmb250ID0gbV9mb250LmZhbGxiYWNrUmFuZ2VzQXQoMCkuZm9u
dEZvckNoYXJhY3RlcihiYXNlQ2hhcmFjdGVyKTsKKyAgICAgICAgaWYgKCFmb250KQorICAgICAg
ICAgICAgZm9udCA9ICZtX2ZvbnQuZmFsbGJhY2tSYW5nZXNBdCgwKS5mb250Rm9yRmlyc3RSYW5n
ZSgpOwogCiAgICAgICAgIFJldGFpblB0cjxXZWJDYXNjYWRlTGlzdD4gY2FzY2FkZUxpc3QgPSBh
ZG9wdE5TKFtbV2ViQ2FzY2FkZUxpc3QgYWxsb2NdIGluaXRXaXRoRm9udDombV9mb250IGNoYXJh
Y3RlcjpiYXNlQ2hhcmFjdGVyXSk7CiAKLSAgICAgICAgc3RyaW5nQXR0cmlidXRlcyA9IGFkb3B0
Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0YWJsZUNvcHkoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCwg
Zm9udERhdGEtPmdldENGU3RyaW5nQXR0cmlidXRlcyhtX2ZvbnQudHlwZXNldHRpbmdGZWF0dXJl
cygpLCBmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSkpKTsKKyAgICAgICAg
c3RyaW5nQXR0cmlidXRlcyA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0YWJsZUNvcHko
a0NGQWxsb2NhdG9yRGVmYXVsdCwgMCwgZm9udC0+Z2V0Q0ZTdHJpbmdBdHRyaWJ1dGVzKG1fZm9u
dC50eXBlc2V0dGluZ0ZlYXR1cmVzKCksIGZvbnQtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9u
KCkpKSk7CiAgICAgICAgIHN0YXRpYyBjb25zdCB2b2lkKiBhdHRyaWJ1dGVLZXlzW10gPSB7IGtD
VEZvbnRDYXNjYWRlTGlzdEF0dHJpYnV0ZSB9OwogICAgICAgICBjb25zdCB2b2lkKiB2YWx1ZXNb
XSA9IHsgY2FzY2FkZUxpc3QuZ2V0KCkgfTsKICAgICAgICAgUmV0YWluUHRyPENGRGljdGlvbmFy
eVJlZj4gYXR0cmlidXRlcyA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKGtDRkFsbG9jYXRv
ckRlZmF1bHQsIGF0dHJpYnV0ZUtleXMsIHZhbHVlcywgc2l6ZW9mKGF0dHJpYnV0ZUtleXMpIC8g
c2l6ZW9mKCphdHRyaWJ1dGVLZXlzKSwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAm
a0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOwogICAgICAgICBSZXRhaW5QdHI8Q1RG
b250RGVzY3JpcHRvclJlZj4gZm9udERlc2NyaXB0b3IgPSBhZG9wdENGKENURm9udERlc2NyaXB0
b3JDcmVhdGVXaXRoQXR0cmlidXRlcyhhdHRyaWJ1dGVzLmdldCgpKSk7Ci0gICAgICAgIFJldGFp
blB0cjxDVEZvbnRSZWY+IGZvbnRXaXRoQ2FzY2FkZUxpc3QgPSBhZG9wdENGKENURm9udENyZWF0
ZUNvcHlXaXRoQXR0cmlidXRlcyhmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkuY3RGb250KCksIG1f
Zm9udC5waXhlbFNpemUoKSwgMCwgZm9udERlc2NyaXB0b3IuZ2V0KCkpKTsKKyAgICAgICAgUmV0
YWluUHRyPENURm9udFJlZj4gZm9udFdpdGhDYXNjYWRlTGlzdCA9IGFkb3B0Q0YoQ1RGb250Q3Jl
YXRlQ29weVdpdGhBdHRyaWJ1dGVzKGZvbnQtPnBsYXRmb3JtRGF0YSgpLmN0Rm9udCgpLCBtX2Zv
bnQucGl4ZWxTaXplKCksIDAsIGZvbnREZXNjcmlwdG9yLmdldCgpKSk7CiAgICAgICAgIENGRGlj
dGlvbmFyeVNldFZhbHVlKGNvbnN0X2Nhc3Q8Q0ZNdXRhYmxlRGljdGlvbmFyeVJlZj4oc3RyaW5n
QXR0cmlidXRlcy5nZXQoKSksIGtDVEZvbnRBdHRyaWJ1dGVOYW1lLCBmb250V2l0aENhc2NhZGVM
aXN0LmdldCgpKTsKICAgICB9IGVsc2UKLSAgICAgICAgc3RyaW5nQXR0cmlidXRlcyA9IGZvbnRE
YXRhLT5nZXRDRlN0cmluZ0F0dHJpYnV0ZXMobV9mb250LnR5cGVzZXR0aW5nRmVhdHVyZXMoKSwg
Zm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkpOworICAgICAgICBzdHJpbmdB
dHRyaWJ1dGVzID0gZm9udC0+Z2V0Q0ZTdHJpbmdBdHRyaWJ1dGVzKG1fZm9udC50eXBlc2V0dGlu
Z0ZlYXR1cmVzKCksIGZvbnQtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkpOwogCiAgICAg
UmV0YWluUHRyPENUTGluZVJlZj4gbGluZTsKIApAQCAtMjQ4LDU1ICsyNDgsNTUgQEAgdm9pZCBD
b21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RDb21wbAogICAgICAgICBDVFJ1blJlZiBjdFJ1
biA9IHN0YXRpY19jYXN0PENUUnVuUmVmPihDRkFycmF5R2V0VmFsdWVBdEluZGV4KHJ1bkFycmF5
LCBtX3J1bi5sdHIoKSA/IHIgOiBydW5Db3VudCAtIDEgLSByKSk7CiAgICAgICAgIEFTU0VSVChD
RkdldFR5cGVJRChjdFJ1bikgPT0gQ1RSdW5HZXRUeXBlSUQoKSk7CiAgICAgICAgIENGUmFuZ2Ug
cnVuUmFuZ2UgPSBDVFJ1bkdldFN0cmluZ1JhbmdlKGN0UnVuKTsKLSAgICAgICAgY29uc3QgU2lt
cGxlRm9udERhdGEqIHJ1bkZvbnREYXRhID0gZm9udERhdGE7CisgICAgICAgIGNvbnN0IEZvbnQq
IHJ1bkZvbnQgPSBmb250OwogICAgICAgICBpZiAoaXNTeXN0ZW1GYWxsYmFjaykgewogICAgICAg
ICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIHJ1bkF0dHJpYnV0ZXMgPSBDVFJ1bkdldEF0dHJpYnV0ZXMo
Y3RSdW4pOwotICAgICAgICAgICAgQ1RGb250UmVmIHJ1bkZvbnQgPSBzdGF0aWNfY2FzdDxDVEZv
bnRSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKHJ1bkF0dHJpYnV0ZXMsIGtDVEZvbnRBdHRyaWJ1
dGVOYW1lKSk7Ci0gICAgICAgICAgICBBU1NFUlQoQ0ZHZXRUeXBlSUQocnVuRm9udCkgPT0gQ1RG
b250R2V0VHlwZUlEKCkpOwotICAgICAgICAgICAgUmV0YWluUHRyPENGVHlwZVJlZj4gcnVuRm9u
dEVxdWFsaXR5T2JqZWN0ID0gRm9udFBsYXRmb3JtRGF0YTo6b2JqZWN0Rm9yRXF1YWxpdHlDaGVj
ayhydW5Gb250KTsKLSAgICAgICAgICAgIGlmICghQ0ZFcXVhbChydW5Gb250RXF1YWxpdHlPYmpl
Y3QuZ2V0KCksIGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5vYmplY3RGb3JFcXVhbGl0eUNoZWNr
KCkuZ2V0KCkpKSB7CisgICAgICAgICAgICBDVEZvbnRSZWYgcnVuQ1RGb250ID0gc3RhdGljX2Nh
c3Q8Q1RGb250UmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShydW5BdHRyaWJ1dGVzLCBrQ1RGb250
QXR0cmlidXRlTmFtZSkpOworICAgICAgICAgICAgQVNTRVJUKENGR2V0VHlwZUlEKHJ1bkNURm9u
dCkgPT0gQ1RGb250R2V0VHlwZUlEKCkpOworICAgICAgICAgICAgUmV0YWluUHRyPENGVHlwZVJl
Zj4gcnVuRm9udEVxdWFsaXR5T2JqZWN0ID0gRm9udFBsYXRmb3JtRGF0YTo6b2JqZWN0Rm9yRXF1
YWxpdHlDaGVjayhydW5DVEZvbnQpOworICAgICAgICAgICAgaWYgKCFDRkVxdWFsKHJ1bkZvbnRF
cXVhbGl0eU9iamVjdC5nZXQoKSwgZm9udC0+cGxhdGZvcm1EYXRhKCkub2JqZWN0Rm9yRXF1YWxp
dHlDaGVjaygpLmdldCgpKSkgewogICAgICAgICAgICAgICAgIC8vIEJlZ2luIHRyeWluZyB0byBz
ZWUgaWYgcnVuRm9udCBtYXRjaGVzIGFueSBvZiB0aGUgZm9udHMgaW4gdGhlIGZhbGxiYWNrIGxp
c3QuCiAKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyAhbV9mb250LmZhbGxi
YWNrUmFuZ2VzQXQoaSkuaXNOdWxsKCk7ICsraSkgewotICAgICAgICAgICAgICAgICAgICBydW5G
b250RGF0YSA9IG1fZm9udC5mYWxsYmFja1Jhbmdlc0F0KGkpLmZvbnREYXRhRm9yQ2hhcmFjdGVy
KGJhc2VDaGFyYWN0ZXIpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIXJ1bkZvbnREYXRhKQor
ICAgICAgICAgICAgICAgICAgICBydW5Gb250ID0gbV9mb250LmZhbGxiYWNrUmFuZ2VzQXQoaSku
Zm9udEZvckNoYXJhY3RlcihiYXNlQ2hhcmFjdGVyKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCFydW5Gb250KQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICAgICAgICAgIFJldGFpblB0cjxDRlR5cGVSZWY+IHJ1bkZvbnRFcXVhbGl0eU9iamVjdCA9IHJ1
bkZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5vYmplY3RGb3JFcXVhbGl0eUNoZWNrKCk7CisgICAg
ICAgICAgICAgICAgICAgIFJldGFpblB0cjxDRlR5cGVSZWY+IHJ1bkZvbnRFcXVhbGl0eU9iamVj
dCA9IHJ1bkZvbnQtPnBsYXRmb3JtRGF0YSgpLm9iamVjdEZvckVxdWFsaXR5Q2hlY2soKTsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKENGRXF1YWwocnVuRm9udEVxdWFsaXR5T2JqZWN0LmdldCgp
LCBydW5Gb250RXF1YWxpdHlPYmplY3QuZ2V0KCkpKQogICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIHJ1bkZvbnREYXRhID0gMDsKKyAgICAgICAgICAg
ICAgICAgICAgcnVuRm9udCA9IG51bGxwdHI7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIG1hdGNoaW5nIGZvbnQsIGxvb2sgdXAgYnkgbmFtZSBp
biB0aGUgZm9udCBjYWNoZS4KLSAgICAgICAgICAgICAgICBpZiAoIXJ1bkZvbnREYXRhKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKCFydW5Gb250KSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFJh
dGhlciB0aGFuIHVzaW5nIHJ1bkZvbnQgYXMgYW4gTlNGb250IGFuZCB3cmFwcGluZyBpdCBpbiBh
IEZvbnRQbGF0Zm9ybURhdGEsIGdvIHRocm91Z2gKICAgICAgICAgICAgICAgICAgICAgLy8gdGhl
IGZvbnQgY2FjaGUgYW5kIHVsdGltYXRlbHkgdGhyb3VnaCBOU0ZvbnRNYW5hZ2VyIGluIG9yZGVy
IHRvIGdldCBhbiBOU0ZvbnQgd2l0aCB0aGUgcmlnaHQKICAgICAgICAgICAgICAgICAgICAgLy8g
TlNGb250UmVuZGVyaW5nTW9kZS4KLSAgICAgICAgICAgICAgICAgICAgUmV0YWluUHRyPENGU3Ry
aW5nUmVmPiBmb250TmFtZSA9IGFkb3B0Q0YoQ1RGb250Q29weVBvc3RTY3JpcHROYW1lKHJ1bkZv
bnQpKTsKKyAgICAgICAgICAgICAgICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBmb250TmFt
ZSA9IGFkb3B0Q0YoQ1RGb250Q29weVBvc3RTY3JpcHROYW1lKHJ1bkNURm9udCkpOwogICAgICAg
ICAgICAgICAgICAgICBpZiAoQ0ZFcXVhbChmb250TmFtZS5nZXQoKSwgQ0ZTVFIoIkxhc3RSZXNv
cnQiKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fY29tcGxleFRleHRSdW5zLmFwcGVu
ZChDb21wbGV4VGV4dFJ1bjo6Y3JlYXRlKG1fZm9udC5wcmltYXJ5Rm9udERhdGEoKSwgY3AsIHN0
cmluZ0xvY2F0aW9uICsgcnVuUmFuZ2UubG9jYXRpb24sIHJ1blJhbmdlLmxlbmd0aCwgbV9ydW4u
bHRyKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fY29tcGxleFRleHRSdW5zLmFwcGVu
ZChDb21wbGV4VGV4dFJ1bjo6Y3JlYXRlKG1fZm9udC5wcmltYXJ5Rm9udCgpLCBjcCwgc3RyaW5n
TG9jYXRpb24gKyBydW5SYW5nZS5sb2NhdGlvbiwgcnVuUmFuZ2UubGVuZ3RoLCBtX3J1bi5sdHIo
KSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcnVuRm9udERhdGEgPSBmb250Q2FjaGUoKS5mb250
Rm9yRmFtaWx5KG1fZm9udC5mb250RGVzY3JpcHRpb24oKSwgZm9udE5hbWUuZ2V0KCksIGZhbHNl
KS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgcnVuRm9udCA9IGZvbnRDYWNoZSgpLmZvbnRG
b3JGYW1pbHkobV9mb250LmZvbnREZXNjcmlwdGlvbigpLCBmb250TmFtZS5nZXQoKSwgZmFsc2Up
LmdldCgpOwogI2lmICFQTEFURk9STShJT1MpCiAgICAgICAgICAgICAgICAgICAgIC8vIENvcmUg
VGV4dCBtYXkgaGF2ZSB1c2VkIGEgZm9udCB0aGF0IGlzIG5vdCBrbm93biB0byBOU0ZvbnRNYW5h
Z2VyLiBJbiB0aGF0IGNhc2UsIGZhbGwgYmFjayBvbgogICAgICAgICAgICAgICAgICAgICAvLyB1
c2luZyB0aGUgZm9udCBhcyByZXR1cm5lZCwgZXZlbiB0aG91Z2ggaXQgbWF5IG5vdCBoYXZlIHRo
ZSBiZXN0IE5TRm9udFJlbmRlcmluZ01vZGUuCi0gICAgICAgICAgICAgICAgICAgIGlmICghcnVu
Rm9udERhdGEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEgcnVu
Rm9udFBsYXRmb3JtRGF0YSgoTlNGb250ICopcnVuRm9udCwgQ1RGb250R2V0U2l6ZShydW5Gb250
KSwgbV9mb250LmZvbnREZXNjcmlwdGlvbigpLnVzZVByaW50ZXJGb250KCkpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgcnVuRm9udERhdGEgPSAmZm9udENhY2hlKCkuZm9udEZvclBsYXRmb3Jt
RGF0YShydW5Gb250UGxhdGZvcm1EYXRhKS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCFydW5Gb250KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBGb250UGxhdGZvcm1EYXRhIHJ1
bkZvbnRQbGF0Zm9ybURhdGEoKE5TRm9udCAqKXJ1bkNURm9udCwgQ1RGb250R2V0U2l6ZShydW5D
VEZvbnQpLCBtX2ZvbnQuZm9udERlc2NyaXB0aW9uKCkudXNlUHJpbnRlckZvbnQoKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBydW5Gb250ID0gJmZvbnRDYWNoZSgpLmZvbnRGb3JQbGF0Zm9y
bURhdGEocnVuRm9udFBsYXRmb3JtRGF0YSkuZ2V0KCk7CiAgICAgICAgICAgICAgICAgICAgIH0K
ICNlbHNlCiAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBKdXN0IGFzc2VydCBmb3Igbm93
LCB1bnRpbCB3ZSBjYW4gZGV2aXNlIGEgYmV0dGVyIGZpeCB0aGF0IHdvcmtzIHdpdGggaU9TLgot
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQocnVuRm9udERhdGEpOworICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQocnVuRm9udCk7CiAjZW5kaWYKICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgaWYgKG1fZmFsbGJhY2tGb250cyAmJiBydW5Gb250RGF0YSAhPSAmbV9mb250LnBy
aW1hcnlGb250RGF0YSgpKQotICAgICAgICAgICAgICAgICAgICBtX2ZhbGxiYWNrRm9udHMtPmFk
ZChydW5Gb250RGF0YSk7CisgICAgICAgICAgICAgICAgaWYgKG1fZmFsbGJhY2tGb250cyAmJiBy
dW5Gb250ICE9ICZtX2ZvbnQucHJpbWFyeUZvbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgbV9m
YWxsYmFja0ZvbnRzLT5hZGQocnVuRm9udCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAg
ICAgICAgaWYgKG1fZmFsbGJhY2tGb250cyAmJiBydW5Gb250RGF0YSAhPSAmbV9mb250LnByaW1h
cnlGb250RGF0YSgpKQotICAgICAgICAgICAgbV9mYWxsYmFja0ZvbnRzLT5hZGQoZm9udERhdGEp
OworICAgICAgICBpZiAobV9mYWxsYmFja0ZvbnRzICYmIHJ1bkZvbnQgIT0gJm1fZm9udC5wcmlt
YXJ5Rm9udCgpKQorICAgICAgICAgICAgbV9mYWxsYmFja0ZvbnRzLT5hZGQoZm9udCk7CiAKLSAg
ICAgICAgbV9jb21wbGV4VGV4dFJ1bnMuYXBwZW5kKENvbXBsZXhUZXh0UnVuOjpjcmVhdGUoY3RS
dW4sICpydW5Gb250RGF0YSwgY3AsIHN0cmluZ0xvY2F0aW9uLCBsZW5ndGgsIHJ1blJhbmdlKSk7
CisgICAgICAgIG1fY29tcGxleFRleHRSdW5zLmFwcGVuZChDb21wbGV4VGV4dFJ1bjo6Y3JlYXRl
KGN0UnVuLCAqcnVuRm9udCwgY3AsIHN0cmluZ0xvY2F0aW9uLCBsZW5ndGgsIHJ1blJhbmdlKSk7
CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMv
Rm9udENhY2hlTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL21hYy9Gb250Q2FjaGVNYWMubW0JKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q2FjaGVNYWMubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTMzLDggKzMzLDggQEAKICNpZiAhUExBVEZPUk0oSU9TKQogCiAjaW1wb3J0ICJDb3Jl
R3JhcGhpY3NTUEkuaCIKKyNpbXBvcnQgIkZvbnQuaCIKICNpbXBvcnQgIkZvbnRDYXNjYWRlLmgi
Ci0jaW1wb3J0ICJTaW1wbGVGb250RGF0YS5oIgogI2ltcG9ydCAiRm9udFBsYXRmb3JtRGF0YS5o
IgogI2ltcG9ydCAiTlNGb250U1BJLmgiCiAjaW1wb3J0ICJXZWJDb3JlTlNTdHJpbmdFeHRyYXMu
aCIKQEAgLTMzNyw3ICszMzcsNyBAQCBzdGF0aWMgYm9vbCBzaG91bGRBdXRvQWN0aXZhdGVGb250
SWZOZWVkCiAgICAgcmV0dXJuIGtub3duRmFtaWxpZXMuZ2V0KCkuYWRkKGZhbWlseSkuaXNOZXdF
bnRyeTsKIH0KIAotUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OnN5c3RlbUZhbGxi
YWNrRm9yQ2hhcmFjdGVycyhjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25z
dCBTaW1wbGVGb250RGF0YSogb3JpZ2luYWxGb250RGF0YSwgYm9vbCBpc1BsYXRmb3JtRm9udCwg
Y29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCitSZWZQdHI8Rm9udD4gRm9udENh
Y2hlOjpzeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9uJiBk
ZXNjcmlwdGlvbiwgY29uc3QgRm9udCogb3JpZ2luYWxGb250RGF0YSwgYm9vbCBpc1BsYXRmb3Jt
Rm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCiB7CiAgICAgVUNoYXIz
MiBjaGFyYWN0ZXI7CiAgICAgVTE2X0dFVChjaGFyYWN0ZXJzLCAwLCAwLCBsZW5ndGgsIGNoYXJh
Y3Rlcik7CkBAIC00MDUsMzQgKzQwNSwzNSBAQCBSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRD
YWNoZTo6c3lzdGVtCiAgICAgcmV0dXJuIGZvbnRGb3JQbGF0Zm9ybURhdGEoYWx0ZXJuYXRlRm9u
dCk7CiB9CiAKLVJlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpzaW1pbGFyRm9udFBs
YXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQorUmVmUHRyPEZv
bnQ+IEZvbnRDYWNoZTo6c2ltaWxhckZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlw
dGlvbikKIHsKICAgICAvLyBBdHRlbXB0IHRvIGZpbmQgYW4gYXBwcm9wcmlhdGUgZm9udCB1c2lu
ZyBhIG1hdGNoIGJhc2VkIG9uIAogICAgIC8vIHRoZSBwcmVzZW5jZSBvZiBrZXl3b3JkcyBpbiB0
aGUgdGhlIHJlcXVlc3RlZCBuYW1lcy4gIEZvciBleGFtcGxlLCB3ZSdsbAogICAgIC8vIG1hdGNo
IGFueSBuYW1lIHRoYXQgY29udGFpbnMgIkFyYWJpYyIgdG8gR2VlemEgUHJvLgotICAgIFJlZlB0
cjxTaW1wbGVGb250RGF0YT4gc2ltcGxlRm9udERhdGE7CisgICAgUmVmUHRyPEZvbnQ+IGZvbnQ7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlc2NyaXB0aW9uLmZhbWlseUNvdW50KCk7
ICsraSkgewogICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSA9IGRlc2NyaXB0aW9u
LmZhbWlseUF0KGkpOwogICAgICAgICBpZiAoZmFtaWx5LmlzRW1wdHkoKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICBzdGF0aWMgU3RyaW5nKiBtYXRjaFdvcmRzWzNdID0geyBuZXcg
U3RyaW5nKCJBcmFiaWMiKSwgbmV3IFN0cmluZygiUGFzaHRvIiksIG5ldyBTdHJpbmcoIlVyZHUi
KSB9OwogICAgICAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5n
LCBnZWV6YVN0ciwgKCJHZWV6YSBQcm8iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRl
cmFsKSk7Ci0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgMyAmJiAhc2ltcGxlRm9udERhdGE7
ICsraikKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCAzICYmICFmb250OyArK2opIHsKICAg
ICAgICAgICAgIGlmIChmYW1pbHkuY29udGFpbnMoKm1hdGNoV29yZHNbal0sIGZhbHNlKSkKLSAg
ICAgICAgICAgICAgICBzaW1wbGVGb250RGF0YSA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24s
IGdlZXphU3RyKTsKKyAgICAgICAgICAgICAgICBmb250ID0gZm9udEZvckZhbWlseShkZXNjcmlw
dGlvbiwgZ2VlemFTdHIpOworICAgICAgICB9CiAgICAgfQotICAgIHJldHVybiBzaW1wbGVGb250
RGF0YS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIGZvbnQucmVsZWFzZSgpOwogfQogCi1SZWY8U2lt
cGxlRm9udERhdGE+IEZvbnRDYWNoZTo6bGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250
RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikKK1JlZjxGb250PiBGb250Q2FjaGU6Omxhc3RS
ZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24p
CiB7CiAgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgdGlt
ZXNTdHIsICgiVGltZXMiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7CiAK
ICAgICAvLyBGSVhNRTogV291bGQgYmUgZXZlbiBiZXR0ZXIgdG8gc29tZWhvdyBnZXQgdGhlIHVz
ZXIncyBkZWZhdWx0IGZvbnQgaGVyZS4gIEZvciBub3cgd2UnbGwgcGljawogICAgIC8vIHRoZSBk
ZWZhdWx0IHRoYXQgdGhlIHVzZXIgd291bGQgZ2V0IHdpdGhvdXQgY2hhbmdpbmcgYW55IHByZWZz
LgotICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gc2ltcGxlRm9udERhdGEgPSBmb250Rm9yRmFt
aWx5KGZvbnREZXNjcmlwdGlvbiwgdGltZXNTdHIsIGZhbHNlKTsKLSAgICBpZiAoc2ltcGxlRm9u
dERhdGEpCi0gICAgICAgIHJldHVybiAqc2ltcGxlRm9udERhdGE7CisgICAgUmVmUHRyPEZvbnQ+
IGZvbnQgPSBmb250Rm9yRmFtaWx5KGZvbnREZXNjcmlwdGlvbiwgdGltZXNTdHIsIGZhbHNlKTsK
KyAgICBpZiAoZm9udCkKKyAgICAgICAgcmV0dXJuICpmb250OwogCiAgICAgLy8gVGhlIFRpbWVz
IGZhbGxiYWNrIHdpbGwgYWxtb3N0IGFsd2F5cyB3b3JrLCBidXQgaW4gdGhlIGhpZ2hseSB1bnVz
dWFsIGNhc2Ugd2hlcmUKICAgICAvLyB0aGUgdXNlciBkb2Vzbid0IGhhdmUgaXQsIHdlIGZhbGwg
YmFjayBvbiBMdWNpZGEgR3JhbmRlIGJlY2F1c2UgdGhhdCdzCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR2x5cGhQYWdlTWFjLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR2x5cGhQYWdlTWFjLmNwcAkocmV2
aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ds
eXBoUGFnZU1hYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDggKzMxLDggQEAKIAogI2luY2x1
ZGUgIkNvcmVHcmFwaGljc1NQSS5oIgogI2luY2x1ZGUgIkNvcmVUZXh0U1BJLmgiCisjaW5jbHVk
ZSAiRm9udC5oIgogI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCi0jaW5jbHVkZSAiU2ltcGxlRm9u
dERhdGEuaCIKICNpbmNsdWRlICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCiAjaWYgIVBMQVRG
T1JNKElPUykKICNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2Vydmlj
ZXMuaD4KQEAgLTQwLDcgKzQwLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMg
Ym9vbCBzaG91bGRVc2VDb3JlVGV4dChjb25zdCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZm
ZXJMZW5ndGgsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSkKK3N0YXRpYyBib29sIHNo
b3VsZFVzZUNvcmVUZXh0KGNvbnN0IFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0
aCwgY29uc3QgRm9udCogZm9udERhdGEpCiB7CiAgICAgaWYgKGZvbnREYXRhLT5wbGF0Zm9ybURh
dGEoKS5pc0NvbXBvc2l0ZUZvbnRSZWZlcmVuY2UoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CkBA
IC01NSw3ICs1NSw3IEBAIHN0YXRpYyBib29sIHNob3VsZFVzZUNvcmVUZXh0KGNvbnN0IFVDaGEK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgR2x5cGhQYWdlOjptYXlVc2VNaXhlZEZvbnRE
YXRhV2hlbkZpbGxpbmcoY29uc3QgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3Ro
LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEpCitib29sIEdseXBoUGFnZTo6bWF5VXNl
TWl4ZWRGb250c1doZW5GaWxsaW5nKGNvbnN0IFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZl
ckxlbmd0aCwgY29uc3QgRm9udCogZm9udERhdGEpCiB7CiAjaWYgVVNFKEFQUEtJVCkKICAgICAv
LyBGSVhNRTogVGhpcyBpcyBvbmx5IHJlYWxseSBuZWVkZWQgZm9yIGNvbXBvc2l0ZSBmb250IHJl
ZmVyZW5jZXMuCkBAIC02OCw3ICs2OCw3IEBAIGJvb2wgR2x5cGhQYWdlOjptYXlVc2VNaXhlZEZv
bnREYXRhV2hlbkYKICNlbmRpZgogfQogCi1ib29sIEdseXBoUGFnZTo6ZmlsbCh1bnNpZ25lZCBv
ZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVu
Z3RoLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEpCitib29sIEdseXBoUGFnZTo6Zmls
bCh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgdW5zaWdu
ZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBGb250KiBmb250RGF0YSkKIHsKICAgICBib29sIGhhdmVH
bHlwaHMgPSBmYWxzZTsKIApAQCAtMTYzLDcgKzE2Myw3IEBAIGJvb2wgR2x5cGhQYWdlOjpmaWxs
KHVuc2lnbmVkIG9mZnNldCwgdW4KICAgICAgICAgICAgICAgICAgICAgfQogI2lmIFVTRShBUFBL
SVQpCiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgY29uc3Qg
U2ltcGxlRm9udERhdGEqIHJ1blNpbXBsZSA9IGZvbnREYXRhLT5jb21wb3NpdGVGb250UmVmZXJl
bmNlRm9udERhdGEoKE5TRm9udCAqKXJ1bkZvbnQpOworICAgICAgICAgICAgICAgICAgICBjb25z
dCBGb250KiBydW5TaW1wbGUgPSBmb250RGF0YS0+Y29tcG9zaXRlRm9udFJlZmVyZW5jZUZvbnQo
KE5TRm9udCAqKXJ1bkZvbnQpOwogICAgICAgICAgICAgICAgICAgICBpZiAocnVuU2ltcGxlKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCBnbHlwaENv
dW50OyArK2kpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyaW5nSW5kaWNl
c1tpXSA+PSBzdGF0aWNfY2FzdDxDRkluZGV4PihidWZmZXJMZW5ndGgpKSB7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFDb3JlVGV4dC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1Np
bXBsZUZvbnREYXRhQ29yZVRleHQuY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFDb3JlVGV4dC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKKyNpbmNsdWRlICJGb250LmgiCiAKICNpZiAh
UExBVEZPUk0oSU9TKQogI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25T
ZXJ2aWNlcy5oPgpAQCAtMzUsNyArMzUsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNG
RGljdGlvbmFyeVJlZiBTaW1wbGVGb250RGF0YTo6Z2V0Q0ZTdHJpbmdBdHRyaWJ1dGVzKFR5cGVz
ZXR0aW5nRmVhdHVyZXMgdHlwZXNldHRpbmdGZWF0dXJlcywgRm9udE9yaWVudGF0aW9uIG9yaWVu
dGF0aW9uKSBjb25zdAorQ0ZEaWN0aW9uYXJ5UmVmIEZvbnQ6OmdldENGU3RyaW5nQXR0cmlidXRl
cyhUeXBlc2V0dGluZ0ZlYXR1cmVzIHR5cGVzZXR0aW5nRmVhdHVyZXMsIEZvbnRPcmllbnRhdGlv
biBvcmllbnRhdGlvbikgY29uc3QKIHsKICAgICB1bnNpZ25lZCBrZXkgPSB0eXBlc2V0dGluZ0Zl
YXR1cmVzICsgMTsKICAgICBIYXNoTWFwPHVuc2lnbmVkLCBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5
UmVmPj46OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSBtX0NGU3RyaW5nQXR0cmlidXRlcy5hZGQoa2V5
LCBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPigpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YU1hYy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW0J
KHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9TaW1wbGVGb250RGF0YU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAog
ICovCiAKICNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiU2ltcGxlRm9udERhdGEuaCIKKyNp
bXBvcnQgIkZvbnQuaCIKIAogI2ltcG9ydCAiQmxvY2tFeGNlcHRpb25zLmgiCiAjaW1wb3J0ICJD
b2xvci5oIgpAQCAtNzEsNyArNzEsNyBAQCBzdGF0aWMgYm9vbCBmb250SGFzVmVydGljYWxHbHlw
aHMoQ1RGb250CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgYm9vbCBpbml0Rm9udERh
dGEoU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQorc3RhdGljIGJvb2wgaW5pdEZvbnREYXRhKEZv
bnQqIGZvbnREYXRhKQogewogICAgIGlmICghZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLmNnRm9u
dCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC04NSw3ICs4NSw3IEBAIHN0YXRpYyBOU1N0
cmluZyAqd2ViRmFsbGJhY2tGb250RmFtaWx5KHYKICAgICByZXR1cm4gd2ViRmFsbGJhY2tGb250
RmFtaWx5OwogfQogCi1jb25zdCBTaW1wbGVGb250RGF0YSogU2ltcGxlRm9udERhdGE6OmNvbXBv
c2l0ZUZvbnRSZWZlcmVuY2VGb250RGF0YShOU0ZvbnQgKmtleSkgY29uc3QKK2NvbnN0IEZvbnQq
IEZvbnQ6OmNvbXBvc2l0ZUZvbnRSZWZlcmVuY2VGb250KE5TRm9udCAqa2V5KSBjb25zdAogewog
ICAgIGlmICgha2V5IHx8IENGRXF1YWwoYWRvcHRDRihDVEZvbnRDb3B5UG9zdFNjcmlwdE5hbWUo
Q1RGb250UmVmKGtleSkpKS5nZXQoKSwgQ0ZTVFIoIkxhc3RSZXNvcnQiKSkpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwpAQCAtMTAzLDEyICsxMDMsMTIgQEAgY29uc3QgU2ltcGxlRm9udERhdGEq
IFNpbXBsZUZvbnREYXRhOjpjbwogICAgICAgICBib29sIHN5bnRoZXRpY09ibGlxdWUgPSBwbGF0
Zm9ybURhdGEoKS5zeW50aGV0aWNPYmxpcXVlKCkgJiYgISh0cmFpdHMgJiBrQ1RGb250SXRhbGlj
VHJhaXQpOwogCiAgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEgc3Vic3RpdHV0ZVBsYXRmb3JtKHN1
YnN0aXR1dGVGb250LCBwbGF0Zm9ybURhdGEoKS5zaXplKCksIGlzVXNpbmdQcmludGVyRm9udCwg
c3ludGhldGljQm9sZCwgc3ludGhldGljT2JsaXF1ZSwgcGxhdGZvcm1EYXRhKCkub3JpZW50YXRp
b24oKSwgcGxhdGZvcm1EYXRhKCkud2lkdGhWYXJpYW50KCkpOwotICAgICAgICBhZGRSZXN1bHQu
aXRlcmF0b3ItPnZhbHVlID0gU2ltcGxlRm9udERhdGE6OmNyZWF0ZShzdWJzdGl0dXRlUGxhdGZv
cm0sIGlzQ3VzdG9tRm9udCgpKTsKKyAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9
IEZvbnQ6OmNyZWF0ZShzdWJzdGl0dXRlUGxhdGZvcm0sIGlzQ3VzdG9tRm9udCgpKTsKICAgICB9
CiAgICAgcmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7CiB9CiAKLXZvaWQg
U2ltcGxlRm9udERhdGE6OnBsYXRmb3JtSW5pdCgpCit2b2lkIEZvbnQ6OnBsYXRmb3JtSW5pdCgp
CiB7CiAgICAgbV9zeW50aGV0aWNCb2xkT2Zmc2V0ID0gbV9wbGF0Zm9ybURhdGEubV9zeW50aGV0
aWNCb2xkID8gMS4wZiA6IDAuZjsKIApAQCAtMjI2LDcgKzIyNiw3IEBAIHZvaWQgU2ltcGxlRm9u
dERhdGE6OnBsYXRmb3JtSW5pdCgpCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHhIZWlnaHQg
PSBzY2FsZUVtVG9Vbml0cyhDR0ZvbnRHZXRYSGVpZ2h0KG1fcGxhdGZvcm1EYXRhLmNnRm9udCgp
KSwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemU7CiAgICAgfSBlbHNlCi0gICAgICAgIHhIZWlnaHQg
PSB2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250RGF0YSgpLT5mb250TWV0cmljcygpLnhIZWln
aHQoKTsKKyAgICAgICAgeEhlaWdodCA9IHZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbkZvbnQoKS0+
Zm9udE1ldHJpY3MoKS54SGVpZ2h0KCk7CiAKICAgICBtX2ZvbnRNZXRyaWNzLnNldFVuaXRzUGVy
RW0odW5pdHNQZXJFbSk7CiAgICAgbV9mb250TWV0cmljcy5zZXRBc2NlbnQoYXNjZW50KTsKQEAg
LTI0MSw3ICsyNDEsNyBAQCBzdGF0aWMgQ0ZEYXRhUmVmIGNvcHlGb250VGFibGVGb3JUYWcoRm9u
CiAgICAgcmV0dXJuIENHRm9udENvcHlUYWJsZUZvclRhZyhwbGF0Zm9ybURhdGEuY2dGb250KCks
IHRhYmxlTmFtZSk7CiB9CiAKLXZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQ2hhcldpZHRo
SW5pdCgpCit2b2lkIEZvbnQ6OnBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpCiB7CiAgICAgbV9hdmdD
aGFyV2lkdGggPSAwOwogICAgIG1fbWF4Q2hhcldpZHRoID0gMDsKQEAgLTI2OSwxNyArMjY5LDE3
IEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQ2hhcldpZHRoSW4KIH0KICNlbmRpZiAv
LyBVU0UoQVBQS0lUKQogCi12b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybURlc3Ryb3koKQor
dm9pZCBGb250OjpwbGF0Zm9ybURlc3Ryb3koKQogewogfQogCiAjaWYgIVBMQVRGT1JNKElPUykK
LVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUNyZWF0
ZVNjYWxlZEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBm
bG9hdCBzY2FsZUZhY3RvcikgY29uc3QKK1Bhc3NSZWZQdHI8Rm9udD4gRm9udDo6cGxhdGZvcm1D
cmVhdGVTY2FsZWRGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBm
bG9hdCBzY2FsZUZhY3RvcikgY29uc3QKIHsKICAgICBpZiAoaXNDdXN0b21Gb250KCkpIHsKICAg
ICAgICAgRm9udFBsYXRmb3JtRGF0YSBzY2FsZWRGb250RGF0YShtX3BsYXRmb3JtRGF0YSk7CiAg
ICAgICAgIHNjYWxlZEZvbnREYXRhLm1fc2l6ZSA9IHNjYWxlZEZvbnREYXRhLm1fc2l6ZSAqIHNj
YWxlRmFjdG9yOwotICAgICAgICByZXR1cm4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZShzY2FsZWRG
b250RGF0YSwgdHJ1ZSwgZmFsc2UpOworICAgICAgICByZXR1cm4gRm9udDo6Y3JlYXRlKHNjYWxl
ZEZvbnREYXRhLCB0cnVlLCBmYWxzZSk7CiAgICAgfQogCiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19F
WENFUFRJT05TOwpAQCAtMzEwLDcgKzMxMCw3IEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+
IFNpbXBsZUZvbnREYXQKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBTaW1wbGVGb250RGF0YTo6
ZGV0ZXJtaW5lUGl0Y2goKQordm9pZCBGb250OjpkZXRlcm1pbmVQaXRjaCgpCiB7CiAgICAgTlNG
b250KiBmID0gbV9wbGF0Zm9ybURhdGEubnNGb250KCk7CiAgICAgLy8gU3BlY2lhbCBjYXNlIE9z
YWthLU1vbm8uCkBAIC0zMzMsNyArMzMzLDcgQEAgdm9pZCBTaW1wbGVGb250RGF0YTo6ZGV0ZXJt
aW5lUGl0Y2goKQogfQogI2VuZGlmIC8vICFQTEFURk9STShJT1MpCiAKLUZsb2F0UmVjdCBTaW1w
bGVGb250RGF0YTo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKK0Zs
b2F0UmVjdCBGb250OjpwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAog
ewogICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveDsKICAgICBib3VuZGluZ0JveCA9IENURm9udEdl
dEJvdW5kaW5nUmVjdHNGb3JHbHlwaHMobV9wbGF0Zm9ybURhdGEuY3RGb250KCksIHBsYXRmb3Jt
RGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwgPyBrQ1RGb250VmVydGljYWxPcmllbnRh
dGlvbiA6IGtDVEZvbnRIb3Jpem9udGFsT3JpZW50YXRpb24sICZnbHlwaCwgMCwgMSk7CkBAIC0z
NDUsNyArMzQ1LDcgQEAgRmxvYXRSZWN0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUJvdW5kcwog
fQogCiAjaWYgUExBVEZPUk0oTUFDKQotaW5saW5lIENHRm9udFJlbmRlcmluZ1N0eWxlIFNpbXBs
ZUZvbnREYXRhOjpyZW5kZXJpbmdTdHlsZSgpIGNvbnN0CitpbmxpbmUgQ0dGb250UmVuZGVyaW5n
U3R5bGUgRm9udDo6cmVuZGVyaW5nU3R5bGUoKSBjb25zdAogewogICAgIENHRm9udFJlbmRlcmlu
Z1N0eWxlIHN0eWxlID0ga0NHRm9udFJlbmRlcmluZ1N0eWxlQW50aWFsaWFzaW5nIHwga0NHRm9u
dFJlbmRlcmluZ1N0eWxlU3VicGl4ZWxQb3NpdGlvbmluZyB8IGtDR0ZvbnRSZW5kZXJpbmdTdHls
ZVN1YnBpeGVsUXVhbnRpemF0aW9uOwogICAgIE5TRm9udCAqZm9udCA9IHBsYXRmb3JtRGF0YSgp
Lm5zRm9udCgpOwpAQCAtMzY0LDcgKzM2NCw3IEBAIGlubGluZSBDR0ZvbnRSZW5kZXJpbmdTdHls
ZSBTaW1wbGVGb250RGEKICAgICByZXR1cm4gc3R5bGU7CiB9CiAKLWlubGluZSBib29sIFNpbXBs
ZUZvbnREYXRhOjphZHZhbmNlRm9yQ29sb3JCaXRtYXBGb250KEdseXBoIGdseXBoLCBDR1NpemUm
IGFkdmFuY2UpIGNvbnN0CitpbmxpbmUgYm9vbCBGb250OjphZHZhbmNlRm9yQ29sb3JCaXRtYXBG
b250KEdseXBoIGdseXBoLCBDR1NpemUmIGFkdmFuY2UpIGNvbnN0CiB7CiAgICAgTlNGb250ICpm
b250ID0gcGxhdGZvcm1EYXRhKCkubnNGb250KCk7CiAgICAgaWYgKCFmb250IHx8ICFwbGF0Zm9y
bURhdGEoKS5pc0NvbG9yQml0bWFwRm9udCgpKQpAQCAtMzk0LDcgKzM5NCw3IEBAIHN0YXRpYyBp
bmxpbmUgYm9vbCBpc0Vtb2ppKGNvbnN0IEZvbnRQbGEKICNlbmRpZgogfQogCi1pbmxpbmUgYm9v
bCBTaW1wbGVGb250RGF0YTo6Y2FuVXNlRmFzdEdseXBoQWR2YW5jZUdldHRlcihHbHlwaCBnbHlw
aCwgQ0dTaXplJiBhZHZhbmNlLCBib29sJiBwb3B1bGF0ZWRBZHZhbmNlKSBjb25zdAoraW5saW5l
IGJvb2wgRm9udDo6Y2FuVXNlRmFzdEdseXBoQWR2YW5jZUdldHRlcihHbHlwaCBnbHlwaCwgQ0dT
aXplJiBhZHZhbmNlLCBib29sJiBwb3B1bGF0ZWRBZHZhbmNlKSBjb25zdAogewogICAgIC8vIEZh
c3QgZ2V0dGVyIGRvZXNuJ3QgdGFrZSBjdXN0b20gdHJhY2tpbmcgaW50byBhY2NvdW50CiAgICAg
aWYgKGhhc0N1c3RvbVRyYWNraW5nKHBsYXRmb3JtRGF0YSgpLmN0Rm9udCgpKSkKQEAgLTQxMCw3
ICs0MTAsNyBAQCBpbmxpbmUgYm9vbCBTaW1wbGVGb250RGF0YTo6Y2FuVXNlRmFzdEdsCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLWZsb2F0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybVdpZHRoRm9y
R2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CitmbG9hdCBGb250OjpwbGF0Zm9ybVdpZHRoRm9yR2x5
cGgoR2x5cGggZ2x5cGgpIGNvbnN0CiB7CiAgICAgQ0dTaXplIGFkdmFuY2UgPSBDR1NpemVaZXJv
OwogICAgIGJvb2wgaG9yaXpvbnRhbCA9IHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0g
SG9yaXpvbnRhbDsKQEAgLTQ0Niw3ICs0NDYsNyBAQCBzdGF0aWMgY29uc3QgVW5pQ2hhciogcHJv
dmlkZVN0cmluZ0FuZEF0CiAgICAgcmV0dXJuIGluZm8tPmNoYXJhY3RlcnMgKyBzdHJpbmdJbmRl
eDsKIH0KIAotYm9vbCBTaW1wbGVGb250RGF0YTo6Y2FuUmVuZGVyQ29tYmluaW5nQ2hhcmFjdGVy
U2VxdWVuY2UoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpIGNvbnN0Citi
b29sIEZvbnQ6OmNhblJlbmRlckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVDaGFy
KiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKSBjb25zdAogewogICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW50
eXBlL09wZW5UeXBlTWF0aERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlTWF0aERhdGEuY3BwCShyZXZpc2lvbiAx
Nzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVu
VHlwZU1hdGhEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTIgKzI2LDEyIEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiT3BlblR5cGVNYXRoRGF0YS5oIgogCisjaW5jbHVk
ZSAiRm9udC5oIgogI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKICNpZiBFTkFCTEUoT1BF
TlRZUEVfTUFUSCkKICNpbmNsdWRlICJPcGVuVHlwZVR5cGVzLmgiCiAjZW5kaWYKICNpbmNsdWRl
ICJTaGFyZWRCdWZmZXIuaCIKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgogCiB1c2luZyBu
YW1lc3BhY2Ugc3RkOwogCkBAIC0yMzUsOSArMjM1LDkgQEAgc3RydWN0IE1BVEhUYWJsZSA6IFRh
YmxlQmFzZSB7CiAjZW5kaWYgLy8gRU5BQkxFKE9QRU5UWVBFX01BVEgpCiAKICNpZiBFTkFCTEUo
T1BFTlRZUEVfTUFUSCkKLU9wZW5UeXBlTWF0aERhdGE6Ok9wZW5UeXBlTWF0aERhdGEoY29uc3Qg
Rm9udFBsYXRmb3JtRGF0YSYgZm9udERhdGEpCitPcGVuVHlwZU1hdGhEYXRhOjpPcGVuVHlwZU1h
dGhEYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnQpCiB7Ci0gICAgbV9tYXRoQnVmZmVy
ID0gZm9udERhdGEub3BlblR5cGVUYWJsZShPcGVuVHlwZTo6TUFUSFRhZyk7CisgICAgbV9tYXRo
QnVmZmVyID0gZm9udC5vcGVuVHlwZVRhYmxlKE9wZW5UeXBlOjpNQVRIVGFnKTsKICAgICBjb25z
dCBPcGVuVHlwZTo6TUFUSFRhYmxlKiBtYXRoID0gT3BlblR5cGU6OnZhbGlkYXRlVGFibGU8T3Bl
blR5cGU6Ok1BVEhUYWJsZT4obV9tYXRoQnVmZmVyKTsKICAgICBpZiAoIW1hdGgpIHsKICAgICAg
ICAgbV9tYXRoQnVmZmVyID0gbnVsbHB0cjsKQEAgLTI2NSw3ICsyNjUsNyBAQCBPcGVuVHlwZU1h
dGhEYXRhOjp+T3BlblR5cGVNYXRoRGF0YSgpCiB9CiAKICNpZiBFTkFCTEUoT1BFTlRZUEVfTUFU
SCkKLWZsb2F0IE9wZW5UeXBlTWF0aERhdGE6OmdldE1hdGhDb25zdGFudChjb25zdCBTaW1wbGVG
b250RGF0YSYgZm9udCwgTWF0aENvbnN0YW50IGNvbnN0YW50KSBjb25zdAorZmxvYXQgT3BlblR5
cGVNYXRoRGF0YTo6Z2V0TWF0aENvbnN0YW50KGNvbnN0IEZvbnQmIGZvbnQsIE1hdGhDb25zdGFu
dCBjb25zdGFudCkgY29uc3QKIHsKICAgICBpbnQzMl90IHZhbHVlID0gMDsKIApAQCAtMjg4LDcg
KzI4OCw3IEBAIGZsb2F0IE9wZW5UeXBlTWF0aERhdGE6OmdldE1hdGhDb25zdGFudCgKIAogICAg
IHJldHVybiB2YWx1ZSAqIGZvbnQuc2l6ZVBlclVuaXQoKTsKICNlbHNlCi1mbG9hdCBPcGVuVHlw
ZU1hdGhEYXRhOjpnZXRNYXRoQ29uc3RhbnQoY29uc3QgU2ltcGxlRm9udERhdGEmLCBNYXRoQ29u
c3RhbnQpIGNvbnN0CitmbG9hdCBPcGVuVHlwZU1hdGhEYXRhOjpnZXRNYXRoQ29uc3RhbnQoY29u
c3QgRm9udCYsIE1hdGhDb25zdGFudCkgY29uc3QKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICByZXR1cm4gMDsKQEAgLTI5Niw3ICsyOTYsNyBAQCBmbG9hdCBPcGVuVHlwZU1hdGhE
YXRhOjpnZXRNYXRoQ29uc3RhbnQoCiB9CiAKICNpZiBFTkFCTEUoT1BFTlRZUEVfTUFUSCkKLWZs
b2F0IE9wZW5UeXBlTWF0aERhdGE6OmdldEl0YWxpY0NvcnJlY3Rpb24oY29uc3QgU2ltcGxlRm9u
dERhdGEmIGZvbnQsIEdseXBoIGdseXBoKSBjb25zdAorZmxvYXQgT3BlblR5cGVNYXRoRGF0YTo6
Z2V0SXRhbGljQ29ycmVjdGlvbihjb25zdCBGb250JiBmb250LCBHbHlwaCBnbHlwaCkgY29uc3QK
IHsKICAgICBjb25zdCBPcGVuVHlwZTo6TUFUSFRhYmxlKiBtYXRoID0gT3BlblR5cGU6OnZhbGlk
YXRlVGFibGU8T3BlblR5cGU6Ok1BVEhUYWJsZT4obV9tYXRoQnVmZmVyKTsKICAgICBBU1NFUlQo
bWF0aCk7CkBAIC0zMTAsNyArMzEwLDcgQEAgZmxvYXQgT3BlblR5cGVNYXRoRGF0YTo6Z2V0SXRh
bGljQ29ycmVjdAogCiAgICAgcmV0dXJuIG1hdGhJdGFsaWNzQ29ycmVjdGlvbkluZm8tPmdldEl0
YWxpY0NvcnJlY3Rpb24oKm1fbWF0aEJ1ZmZlciwgZ2x5cGgpICogZm9udC5zaXplUGVyVW5pdCgp
OwogI2Vsc2UKLWZsb2F0IE9wZW5UeXBlTWF0aERhdGE6OmdldEl0YWxpY0NvcnJlY3Rpb24oY29u
c3QgU2ltcGxlRm9udERhdGEmLCBHbHlwaCkgY29uc3QKK2Zsb2F0IE9wZW5UeXBlTWF0aERhdGE6
OmdldEl0YWxpY0NvcnJlY3Rpb24oY29uc3QgRm9udCYsIEdseXBoKSBjb25zdAogewogICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiAwOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVNYXRoRGF0YS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlTWF0
aERhdGEuaAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVNYXRoRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwx
MyArMzUsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGb250UGxhdGZvcm1EYXRh
OwogY2xhc3MgU2hhcmVkQnVmZmVyOwotY2xhc3MgU2ltcGxlRm9udERhdGE7CitjbGFzcyBGb250
OwogCiBjbGFzcyBPcGVuVHlwZU1hdGhEYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8T3BlblR5cGVN
YXRoRGF0YT4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPE9wZW5UeXBlTWF0aERh
dGE+IGNyZWF0ZShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBmb250RGF0YSkKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxPcGVuVHlwZU1hdGhEYXRhPiBjcmVhdGUoY29uc3QgRm9udFBsYXRmb3JtRGF0
YSYgZm9udCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgT3BlblR5cGVNYXRo
RGF0YShmb250RGF0YSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE9wZW5UeXBlTWF0
aERhdGEoZm9udCkpOwogICAgIH0KICAgICB+T3BlblR5cGVNYXRoRGF0YSgpOwogCkBAIC0xMTMs
OCArMTEzLDggQEAgcHVibGljOgogICAgICAgICBib29sIGlzRXh0ZW5kZXI7CiAgICAgfTsKIAot
ICAgIGZsb2F0IGdldE1hdGhDb25zdGFudChjb25zdCBTaW1wbGVGb250RGF0YSYsIE1hdGhDb25z
dGFudCkgY29uc3Q7Ci0gICAgZmxvYXQgZ2V0SXRhbGljQ29ycmVjdGlvbihjb25zdCBTaW1wbGVG
b250RGF0YSYsIEdseXBoKSBjb25zdDsKKyAgICBmbG9hdCBnZXRNYXRoQ29uc3RhbnQoY29uc3Qg
Rm9udCYsIE1hdGhDb25zdGFudCkgY29uc3Q7CisgICAgZmxvYXQgZ2V0SXRhbGljQ29ycmVjdGlv
bihjb25zdCBGb250JiwgR2x5cGgpIGNvbnN0OwogICAgIHZvaWQgZ2V0TWF0aFZhcmlhbnRzKEds
eXBoLCBib29sIGlzVmVydGljYWwsIFZlY3RvcjxHbHlwaD4mIHNpemVWYXJpYW50cywgVmVjdG9y
PEFzc2VtYmx5UGFydD4mIGFzc2VtYmx5UGFydHMpIGNvbnN0OwogCiBwcml2YXRlOgpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAkocmV2aXNpb24gMTc4
ODU3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NDksNyArNDQ5LDcgQEAgYm9vbCBJbmxpbmVGbG93Qm94OjpyZXF1aXJl
c0lkZW9ncmFwaGljQgogCiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIGxpbmVTdHlsZSA9IHRoaXMt
PmxpbmVTdHlsZSgpOwogICAgIGlmIChsaW5lU3R5bGUuZm9udERlc2NyaXB0aW9uKCkubm9uQ0pL
R2x5cGhPcmllbnRhdGlvbigpID09IE5vbkNKS0dseXBoT3JpZW50YXRpb25VcHJpZ2h0Ci0gICAg
ICAgIHx8IGxpbmVTdHlsZS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmhhc1ZlcnRp
Y2FsR2x5cGhzKCkpCisgICAgICAgIHx8IGxpbmVTdHlsZS5mb250Q2FzY2FkZSgpLnByaW1hcnlG
b250KCkuaGFzVmVydGljYWxHbHlwaHMoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBm
b3IgKElubGluZUJveCogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxk
LT5uZXh0T25MaW5lKCkpIHsKQEAgLTQ2MCwxOCArNDYwLDE4IEBAIGJvb2wgSW5saW5lRmxvd0Jv
eDo6cmVxdWlyZXNJZGVvZ3JhcGhpY0IKICAgICAgICAgICAgIGlmIChkb3duY2FzdDxJbmxpbmVG
bG93Qm94PigqY2hpbGQpLnJlcXVpcmVzSWRlb2dyYXBoaWNCYXNlbGluZSh0ZXh0Qm94RGF0YU1h
cCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBpZiAoY2hpbGQtPmxpbmVTdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnRE
YXRhKCkuaGFzVmVydGljYWxHbHlwaHMoKSkKKyAgICAgICAgICAgIGlmIChjaGlsZC0+bGluZVN0
eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpLmhhc1ZlcnRpY2FsR2x5cGhzKCkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNv
bnN0IFZlY3Rvcjxjb25zdCBTaW1wbGVGb250RGF0YSo+KiB1c2VkRm9udHMgPSBudWxscHRyOwor
ICAgICAgICAgICAgY29uc3QgVmVjdG9yPGNvbnN0IEZvbnQqPiogdXNlZEZvbnRzID0gbnVsbHB0
cjsKICAgICAgICAgICAgIGlmIChpczxJbmxpbmVUZXh0Qm94PigqY2hpbGQpKSB7CiAgICAgICAg
ICAgICAgICAgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gdGV4dEJveERhdGFNYXAuZmluZChkb3duY2FzdDxJbmxpbmVUZXh0Qm94PihjaGlsZCkp
OwogICAgICAgICAgICAgICAgIHVzZWRGb250cyA9IGl0ID09IHRleHRCb3hEYXRhTWFwLmVuZCgp
ID8gbnVsbHB0ciA6ICZpdC0+dmFsdWUuZmlyc3Q7CiAgICAgICAgICAgICB9CiAKICAgICAgICAg
ICAgIGlmICh1c2VkRm9udHMpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFNpbXBsZUZv
bnREYXRhKiBmb250RGF0YSA6ICp1c2VkRm9udHMpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KGZvbnREYXRhLT5oYXNWZXJ0aWNhbEdseXBocygpKQorICAgICAgICAgICAgICAgIGZvciAoY29u
c3QgRm9udCogZm9udCA6ICp1c2VkRm9udHMpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGZv
bnQtPmhhc1ZlcnRpY2FsR2x5cGhzKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmgJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTMx
LDEyICszMSwxMiBAQCBjbGFzcyBIaXRUZXN0UmVxdWVzdDsKIGNsYXNzIEhpdFRlc3RSZXN1bHQ7
CiBjbGFzcyBJbmxpbmVUZXh0Qm94OwogY2xhc3MgUmVuZGVyTGluZUJveExpc3Q7Ci1jbGFzcyBT
aW1wbGVGb250RGF0YTsKK2NsYXNzIEZvbnQ7CiBjbGFzcyBWZXJ0aWNhbFBvc2l0aW9uQ2FjaGU7
CiAKIHN0cnVjdCBHbHlwaE92ZXJmbG93OwogCi10eXBlZGVmIEhhc2hNYXA8Y29uc3QgSW5saW5l
VGV4dEJveCosIHN0ZDo6cGFpcjxWZWN0b3I8Y29uc3QgU2ltcGxlRm9udERhdGEqPiwgR2x5cGhP
dmVyZmxvdz4+IEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwOwordHlwZWRlZiBIYXNo
TWFwPGNvbnN0IElubGluZVRleHRCb3gqLCBzdGQ6OnBhaXI8VmVjdG9yPGNvbnN0IEZvbnQqPiwg
R2x5cGhPdmVyZmxvdz4+IEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwOwogCiBjbGFz
cyBJbmxpbmVGbG93Qm94IDogcHVibGljIElubGluZUJveCB7CiBwdWJsaWM6CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCShyZXZpc2lvbiAxNzg4NTcp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEzODEsNyArMTM4MSw3IEBAIFRleHRSdW4gSW5saW5lVGV4dEJveDo6Y29uc3Ry
dWN0VGV4dFJ1bigKIAogICAgIFRleHRSdW4gcnVuKHN0cmluZywgdGV4dFBvcygpLCBleHBhbnNp
b24oKSwgZXhwYW5zaW9uQmVoYXZpb3IoKSwgZGlyZWN0aW9uKCksIGRpck92ZXJyaWRlKCkgfHwg
c3R5bGUucnRsT3JkZXJpbmcoKSA9PSBWaXN1YWxPcmRlciwgIXJlbmRlcmVyKCkuY2FuVXNlU2lt
cGxlRm9udENvZGVQYXRoKCkpOwogICAgIHJ1bi5zZXRUYWJTaXplKCFzdHlsZS5jb2xsYXBzZVdo
aXRlU3BhY2UoKSwgc3R5bGUudGFiU2l6ZSgpKTsKLSAgICBpZiAoZm9udC5wcmltYXJ5Rm9udERh
dGEoKS5pc1NWR0ZvbnQoKSkKKyAgICBpZiAoZm9udC5wcmltYXJ5Rm9udCgpLmlzU1ZHRm9udCgp
KQogICAgICAgICBydW4uc2V0UmVuZGVyaW5nQ29udGV4dChTVkdUZXh0UnVuUmVuZGVyaW5nQ29u
dGV4dDo6Y3JlYXRlKHJlbmRlcmVyKCkpKTsKIAogICAgIC8vIFByb3BhZ2F0ZSB0aGUgbWF4aW11
bSBsZW5ndGggb2YgdGhlIGNoYXJhY3RlcnMgYnVmZmVyIHRvIHRoZSBUZXh0UnVuLCBldmVuIHdo
ZW4gd2UncmUgb25seSBwcm9jZXNzaW5nIGEgc3Vic3RyaW5nLgpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzI1
LDcgKzIzMjUsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjphZGp1c3RMb2dpY2FsTGVmCiAg
ICAgICAgIHJldHVybiBsZWZ0OwogCiAgICAgLy8gRklYTUU6IFNob3VsZCBsZXR0ZXItc3BhY2lu
ZyBhcHBseT8gVGhpcyBpcyBjb21wbGljYXRlZCBzaW5jZSBpdCBkb2Vzbid0IGFwcGx5IGF0IHRo
ZSBlZGdlPwotICAgIGZsb2F0IG1heENoYXJXaWR0aCA9IGxpbmVHcmlkLT5zdHlsZSgpLmZvbnRD
YXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkubWF4Q2hhcldpZHRoKCk7CisgICAgZmxvYXQgbWF4
Q2hhcldpZHRoID0gbGluZUdyaWQtPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgp
Lm1heENoYXJXaWR0aCgpOwogICAgIGlmICghbWF4Q2hhcldpZHRoKQogICAgICAgICByZXR1cm4g
bGVmdDsKIApAQCAtMjM2NSw3ICsyMzY1LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6YWRq
dXN0TG9naWNhbFJpZwogICAgICAgICByZXR1cm4gcmlnaHQ7CiAKICAgICAvLyBGSVhNRTogU2hv
dWxkIGxldHRlci1zcGFjaW5nIGFwcGx5PyBUaGlzIGlzIGNvbXBsaWNhdGVkIHNpbmNlIGl0IGRv
ZXNuJ3QgYXBwbHkgYXQgdGhlIGVkZ2U/Ci0gICAgZmxvYXQgbWF4Q2hhcldpZHRoID0gbGluZUdy
aWQtPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5tYXhDaGFyV2lkdGgo
KTsKKyAgICBmbG9hdCBtYXhDaGFyV2lkdGggPSBsaW5lR3JpZC0+c3R5bGUoKS5mb250Q2FzY2Fk
ZSgpLnByaW1hcnlGb250KCkubWF4Q2hhcldpZHRoKCk7CiAgICAgaWYgKCFtYXhDaGFyV2lkdGgp
CiAgICAgICAgIHJldHVybiByaWdodDsKIApAQCAtMzcwNSw3ICszNzA1LDcgQEAgc3RhdGljIGlu
bGluZSBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW5JbgogICAgIGJvb2wgZGlyZWN0aW9uYWxPdmVy
cmlkZSA9IHN0eWxlLnJ0bE9yZGVyaW5nKCkgPT0gVmlzdWFsT3JkZXI7CiAKICAgICBUZXh0UnVu
IHJ1bihjaGFyYWN0ZXJzLCBsZW5ndGgsIDAsIDAsIGV4cGFuc2lvbiwgdGV4dERpcmVjdGlvbiwg
ZGlyZWN0aW9uYWxPdmVycmlkZSk7Ci0gICAgaWYgKGZvbnQucHJpbWFyeUZvbnREYXRhKCkuaXNT
VkdGb250KCkpIHsKKyAgICBpZiAoZm9udC5wcmltYXJ5Rm9udCgpLmlzU1ZHRm9udCgpKSB7CiAg
ICAgICAgIEFTU0VSVChjb250ZXh0KTsgLy8gRklYTUU6IFRocmVhZCBhIFJlbmRlck9iamVjdCYg
dG8gdGhpcyBwb2ludCBzbyB3ZSBkb24ndCBoYXZlIHRvIGRlcmVmZXJlbmNlIGFueXRoaW5nLgog
ICAgICAgICBydW4uc2V0UmVuZGVyaW5nQ29udGV4dChTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4
dDo6Y3JlYXRlKCpjb250ZXh0KSk7CiAgICAgfQpAQCAtMzcyNSw3ICszNzI1LDcgQEAgc3RhdGlj
IGlubGluZSBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW5JbgogICAgICAgICAgICAgZGlyZWN0aW9u
YWxPdmVycmlkZSB8PSBpc092ZXJyaWRlKHN0eWxlLnVuaWNvZGVCaWRpKCkpOwogICAgIH0KICAg
ICBUZXh0UnVuIHJ1bihjaGFyYWN0ZXJzLCBsZW5ndGgsIDAsIDAsIGV4cGFuc2lvbiwgdGV4dERp
cmVjdGlvbiwgZGlyZWN0aW9uYWxPdmVycmlkZSk7Ci0gICAgaWYgKGZvbnQucHJpbWFyeUZvbnRE
YXRhKCkuaXNTVkdGb250KCkpIHsKKyAgICBpZiAoZm9udC5wcmltYXJ5Rm9udCgpLmlzU1ZHRm9u
dCgpKSB7CiAgICAgICAgIEFTU0VSVChjb250ZXh0KTsgLy8gRklYTUU6IFRocmVhZCBhIFJlbmRl
ck9iamVjdCYgdG8gdGhpcyBwb2ludCBzbyB3ZSBkb24ndCBoYXZlIHRvIGRlcmVmZXJlbmNlIGFu
eXRoaW5nLgogICAgICAgICBydW4uc2V0UmVuZGVyaW5nQ29udGV4dChTVkdUZXh0UnVuUmVuZGVy
aW5nQ29udGV4dDo6Y3JlYXRlKCpjb250ZXh0KSk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAJKHJldmlzaW9u
IDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlv
dXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTgsNyArNDU4LDcgQEAgdm9pZCBSZW5kZXJCbG9j
a0Zsb3c6OnNldE1hcmdpbnNGb3JSdWJ5Ugogc3RhdGljIGlubGluZSB2b2lkIHNldExvZ2ljYWxX
aWR0aEZvclRleHRSdW4oUm9vdElubGluZUJveCogbGluZUJveCwgQmlkaVJ1biogcnVuLCBSZW5k
ZXJUZXh0KiByZW5kZXJlciwgZmxvYXQgeFBvcywgY29uc3QgTGluZUluZm8mIGxpbmVJbmZvLAog
ICAgIEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwJiB0ZXh0Qm94RGF0YU1hcCwgVmVy
dGljYWxQb3NpdGlvbkNhY2hlJiB2ZXJ0aWNhbFBvc2l0aW9uQ2FjaGUsIFdvcmRNZWFzdXJlbWVu
dHMmIHdvcmRNZWFzdXJlbWVudHMpCiB7Ci0gICAgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0
YSo+IGZhbGxiYWNrRm9udHM7CisgICAgSGFzaFNldDxjb25zdCBGb250Kj4gZmFsbGJhY2tGb250
czsKICAgICBHbHlwaE92ZXJmbG93IGdseXBoT3ZlcmZsb3c7CiAKICAgICBjb25zdCBGb250Q2Fz
Y2FkZSYgZm9udCA9IGxpbmVTdHlsZSgqcmVuZGVyZXItPnBhcmVudCgpLCBsaW5lSW5mbykuZm9u
dENhc2NhZGUoKTsKQEAgLTUwOSw4ICs1MDksOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0TG9n
aWNhbFdpZHRoRm9yVGV4CiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICBtZWFz
dXJlZFdpZHRoICs9IHdvcmRNZWFzdXJlbWVudC53aWR0aDsKICAgICAgICAgICAgIGlmICghd29y
ZE1lYXN1cmVtZW50LmZhbGxiYWNrRm9udHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAg
SGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSB3b3Jk
TWVhc3VyZW1lbnQuZmFsbGJhY2tGb250cy5lbmQoKTsKLSAgICAgICAgICAgICAgICBmb3IgKEhh
c2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSB3b3JkTWVh
c3VyZW1lbnQuZmFsbGJhY2tGb250cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAg
ICAgICAgICAgSGFzaFNldDxjb25zdCBGb250Kj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHdvcmRN
ZWFzdXJlbWVudC5mYWxsYmFja0ZvbnRzLmVuZCgpOworICAgICAgICAgICAgICAgIGZvciAoSGFz
aFNldDxjb25zdCBGb250Kj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gd29yZE1lYXN1cmVtZW50LmZh
bGxiYWNrRm9udHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQogICAgICAgICAgICAgICAgICAg
ICBmYWxsYmFja0ZvbnRzLmFkZCgqaXQpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC01
MjcsNyArNTI3LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldExvZ2ljYWxXaWR0aEZvclRleAog
ICAgIHJ1bi0+Ym94KCktPnNldExvZ2ljYWxXaWR0aChtZWFzdXJlZFdpZHRoICsgaHlwaGVuV2lk
dGgpOwogICAgIGlmICghZmFsbGJhY2tGb250cy5pc0VtcHR5KCkpIHsKICAgICAgICAgQVNTRVJU
KHJ1bi0+Ym94KCktPmJlaGF2ZXNMaWtlVGV4dCgpKTsKLSAgICAgICAgR2x5cGhPdmVyZmxvd0Fu
ZEZhbGxiYWNrRm9udHNNYXA6Oml0ZXJhdG9yIGl0ID0gdGV4dEJveERhdGFNYXAuYWRkKGRvd25j
YXN0PElubGluZVRleHRCb3g+KHJ1bi0+Ym94KCkpLCBzdGQ6Om1ha2VfcGFpcihWZWN0b3I8Y29u
c3QgU2ltcGxlRm9udERhdGEqPigpLCBHbHlwaE92ZXJmbG93KCkpKS5pdGVyYXRvcjsKKyAgICAg
ICAgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXA6Oml0ZXJhdG9yIGl0ID0gdGV4dEJv
eERhdGFNYXAuYWRkKGRvd25jYXN0PElubGluZVRleHRCb3g+KHJ1bi0+Ym94KCkpLCBzdGQ6Om1h
a2VfcGFpcihWZWN0b3I8Y29uc3QgRm9udCo+KCksIEdseXBoT3ZlcmZsb3coKSkpLml0ZXJhdG9y
OwogICAgICAgICBBU1NFUlQoaXQtPnZhbHVlLmZpcnN0LmlzRW1wdHkoKSk7CiAgICAgICAgIGNv
cHlUb1ZlY3RvcihmYWxsYmFja0ZvbnRzLCBpdC0+dmFsdWUuZmlyc3QpOwogICAgICAgICBydW4t
PmJveCgpLT5wYXJlbnQoKS0+Y2xlYXJEZXNjZW5kYW50c0hhdmVTYW1lTGluZUhlaWdodEFuZEJh
c2VsaW5lKCk7CkBAIC01MzksNyArNTM5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldExvZ2lj
YWxXaWR0aEZvclRleAogCiAgICAgaWYgKCFnbHlwaE92ZXJmbG93LmlzRW1wdHkoKSkgewogICAg
ICAgICBBU1NFUlQocnVuLT5ib3goKS0+YmVoYXZlc0xpa2VUZXh0KCkpOwotICAgICAgICBHbHlw
aE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcDo6aXRlcmF0b3IgaXQgPSB0ZXh0Qm94RGF0YU1h
cC5hZGQoZG93bmNhc3Q8SW5saW5lVGV4dEJveD4ocnVuLT5ib3goKSksIHN0ZDo6bWFrZV9wYWly
KFZlY3Rvcjxjb25zdCBTaW1wbGVGb250RGF0YSo+KCksIEdseXBoT3ZlcmZsb3coKSkpLml0ZXJh
dG9yOworICAgICAgICBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcDo6aXRlcmF0b3Ig
aXQgPSB0ZXh0Qm94RGF0YU1hcC5hZGQoZG93bmNhc3Q8SW5saW5lVGV4dEJveD4ocnVuLT5ib3go
KSksIHN0ZDo6bWFrZV9wYWlyKFZlY3Rvcjxjb25zdCBGb250Kj4oKSwgR2x5cGhPdmVyZmxvdygp
KSkuaXRlcmF0b3I7CiAgICAgICAgIGl0LT52YWx1ZS5zZWNvbmQgPSBnbHlwaE92ZXJmbG93Owog
ICAgICAgICBydW4tPmJveCgpLT5jbGVhcktub3duVG9IYXZlTm9PdmVyZmxvdygpOwogICAgIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb21iaW5lVGV4dC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0LmNw
cAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNv
bWJpbmVUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCB2b2lkIFJlbmRl
ckNvbWJpbmVUZXh0OjpzZXRSZW5kZXJlZFRleHQoCiAgICAgbV9uZWVkc0ZvbnRVcGRhdGUgPSB0
cnVlOwogfQogCi1mbG9hdCBSZW5kZXJDb21iaW5lVGV4dDo6d2lkdGgodW5zaWduZWQgZnJvbSwg
dW5zaWduZWQgbGVuZ3RoLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgZmxvYXQgeFBvc2l0aW9u
LCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3Zl
cmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0CitmbG9hdCBSZW5kZXJDb21iaW5lVGV4dDo6d2lk
dGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBGb250Q2FzY2FkZSYgZm9u
dCwgZmxvYXQgeFBvc2l0aW9uLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cywg
R2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKIHsKICAgICBpZiAobV9pc0NvbWJp
bmVkKQogICAgICAgICByZXR1cm4gZm9udC5zaXplKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuaAkocmV2aXNpb24gMTc4ODU3KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ2LDcgKzQ2LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIG5vZGUoKSBjb25zdCA9IGRlbGV0
ZTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0NvbWJpbmVUZXh0KCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgZmxvYXQgd2lkdGgodW5zaWduZWQgZnJvbSwgdW5z
aWduZWQgbGVuZ3RoLCBjb25zdCBGb250Q2FzY2FkZSYsIGZsb2F0IHhQb3NpdGlvbiwgSGFzaFNl
dDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxv
dyogPSAwKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGZsb2F0IHdpZHRoKHVuc2lnbmVk
IGZyb20sIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgRm9udENhc2NhZGUmLCBmbG9hdCB4UG9zaXRp
b24sIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxv
dyogPSAwKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5h
bWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAiUmVuZGVyQ29tYmluZVRleHQiOyB9CiAgICAg
dmlydHVhbCB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVy
U3R5bGUqIG9sZFN0eWxlKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0UmVuZGVyZWRU
ZXh0KGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNlYXJjaEZpZWxkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiQ1NTRm9udFNlbGVjdG9yLmgiCiAjaW5jbHVk
ZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkNocm9tZS5oIgorI2luY2x1ZGUgIkZv
bnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCiAj
aW5jbHVkZSAiRnJhbWVWaWV3LmgiCkBAIC00Miw3ICs0Myw2IEBACiAjaW5jbHVkZSAiUmVuZGVy
Vmlldy5oIgogI2luY2x1ZGUgIlNlYXJjaFBvcHVwTWVudS5oIgogI2luY2x1ZGUgIlNldHRpbmdz
LmgiCi0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKICNpbmNsdWRlICJTdHlsZVJlc29sdmVy
LmgiCiAjaW5jbHVkZSAiVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmgiCiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHJldmlzaW9uIDE3ODg1NykKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDUxLDcgKzQ1MSw3IEBAIExheW91dFJlY3QgUmVuZGVyVGV4dDo6bG9jYWxDYXJldFJlY3QoSW4K
ICAgICByZXR1cm4gYm94LnJvb3QoKS5jb21wdXRlQ2FyZXRSZWN0KGxlZnQsIGNhcmV0V2lkdGgs
IGV4dHJhV2lkdGhUb0VuZE9mTGluZSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgZmxvYXQgUmVuZGVy
VGV4dDo6d2lkdGhGcm9tQ2FjaGUoY29uc3QgRm9udENhc2NhZGUmIGYsIGludCBzdGFydCwgaW50
IGxlbiwgZmxvYXQgeFBvcywgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFj
a0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93LCBjb25zdCBSZW5kZXJTdHlsZSYg
c3R5bGUpIGNvbnN0CitBTFdBWVNfSU5MSU5FIGZsb2F0IFJlbmRlclRleHQ6OndpZHRoRnJvbUNh
Y2hlKGNvbnN0IEZvbnRDYXNjYWRlJiBmLCBpbnQgc3RhcnQsIGludCBsZW4sIGZsb2F0IHhQb3Ms
IEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlw
aE92ZXJmbG93LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7CiAgICAgaWYgKHN0
eWxlLmhhc1RleHRDb21iaW5lKCkgJiYgaXM8UmVuZGVyQ29tYmluZVRleHQ+KCp0aGlzKSkgewog
ICAgICAgICBjb25zdCBSZW5kZXJDb21iaW5lVGV4dCYgY29tYmluZVRleHQgPSBkb3duY2FzdDxS
ZW5kZXJDb21iaW5lVGV4dD4oKnRoaXMpOwpAQCAtNjMwLDcgKzYzMCw3IEBAIExpbmVCcmVha0l0
ZXJhdG9yTW9kZSBtYXBMaW5lQnJlYWtUb0l0ZXIKIAogdm9pZCBSZW5kZXJUZXh0Ojpjb21wdXRl
UHJlZmVycmVkTG9naWNhbFdpZHRocyhmbG9hdCBsZWFkV2lkdGgpCiB7Ci0gICAgSGFzaFNldDxj
b25zdCBTaW1wbGVGb250RGF0YSo+IGZhbGxiYWNrRm9udHM7CisgICAgSGFzaFNldDxjb25zdCBG
b250Kj4gZmFsbGJhY2tGb250czsKICAgICBHbHlwaE92ZXJmbG93IGdseXBoT3ZlcmZsb3c7CiAg
ICAgY29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMobGVhZFdpZHRoLCBmYWxsYmFja0ZvbnRz
LCBnbHlwaE92ZXJmbG93KTsKICAgICBpZiAoZmFsbGJhY2tGb250cy5pc0VtcHR5KCkgJiYgIWds
eXBoT3ZlcmZsb3cubGVmdCAmJiAhZ2x5cGhPdmVyZmxvdy5yaWdodCAmJiAhZ2x5cGhPdmVyZmxv
dy50b3AgJiYgIWdseXBoT3ZlcmZsb3cuYm90dG9tKQpAQCAtNjQzLDcgKzY0Myw3IEBAIHN0YXRp
YyBpbmxpbmUgZmxvYXQgaHlwaGVuV2lkdGgoUmVuZGVyVGUKICAgICByZXR1cm4gZm9udC53aWR0
aChSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bihyZW5kZXJlciwgZm9udCwgc3R5bGUuaHlw
aGVuU3RyaW5nKCkuc3RyaW5nKCksIHN0eWxlKSk7CiB9CiAKLXN0YXRpYyBmbG9hdCBtYXhXb3Jk
RnJhZ21lbnRXaWR0aChSZW5kZXJUZXh0KiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUmIHN0
eWxlLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgU3RyaW5nVmlldyB3b3JkLCBpbnQgbWluaW11
bVByZWZpeExlbmd0aCwgdW5zaWduZWQgbWluaW11bVN1ZmZpeExlbmd0aCwgaW50JiBzdWZmaXhT
dGFydCwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+JiBmYWxsYmFja0ZvbnRzLCBHbHlw
aE92ZXJmbG93JiBnbHlwaE92ZXJmbG93KQorc3RhdGljIGZsb2F0IG1heFdvcmRGcmFnbWVudFdp
ZHRoKFJlbmRlclRleHQqIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0
IEZvbnRDYXNjYWRlJiBmb250LCBTdHJpbmdWaWV3IHdvcmQsIGludCBtaW5pbXVtUHJlZml4TGVu
Z3RoLCB1bnNpZ25lZCBtaW5pbXVtU3VmZml4TGVuZ3RoLCBpbnQmIHN1ZmZpeFN0YXJ0LCBIYXNo
U2V0PGNvbnN0IEZvbnQqPiYgZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyYgZ2x5cGhPdmVy
ZmxvdykKIHsKICAgICBzdWZmaXhTdGFydCA9IDA7CiAgICAgaWYgKHdvcmQubGVuZ3RoKCkgPD0g
bWluaW11bVN1ZmZpeExlbmd0aCkKQEAgLTY4Myw3ICs2ODMsNyBAQCBzdGF0aWMgZmxvYXQgbWF4
V29yZEZyYWdtZW50V2lkdGgoUmVuZGVyCiAgICAgcmV0dXJuIG1heEZyYWdtZW50V2lkdGg7CiB9
CiAKLXZvaWQgUmVuZGVyVGV4dDo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoZmxvYXQg
bGVhZFdpZHRoLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4mIGZhbGxiYWNrRm9udHMs
IEdseXBoT3ZlcmZsb3cmIGdseXBoT3ZlcmZsb3cpCit2b2lkIFJlbmRlclRleHQ6OmNvbXB1dGVQ
cmVmZXJyZWRMb2dpY2FsV2lkdGhzKGZsb2F0IGxlYWRXaWR0aCwgSGFzaFNldDxjb25zdCBGb250
Kj4mIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cmIGdseXBoT3ZlcmZsb3cpCiB7CiAgICAg
QVNTRVJUKG1faGFzVGFiIHx8IHByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eSgpIHx8ICFtX2tu
b3duVG9IYXZlTm9PdmVyZmxvd0FuZE5vRmFsbGJhY2tGb250cyk7CiAKQEAgLTEyMDYsNyArMTIw
Niw3IEBAIGNvbnN0IFNpbXBsZUxpbmVMYXlvdXQ6OkxheW91dCogUmVuZGVyVGUKICAgICByZXR1
cm4gZG93bmNhc3Q8UmVuZGVyQmxvY2tGbG93PigqcGFyZW50KCkpLnNpbXBsZUxpbmVMYXlvdXQo
KTsKIH0KIAotZmxvYXQgUmVuZGVyVGV4dDo6d2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQg
bGVuLCBmbG9hdCB4UG9zLCBib29sIGZpcnN0TGluZSwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250
RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25z
dAorZmxvYXQgUmVuZGVyVGV4dDo6d2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBm
bG9hdCB4UG9zLCBib29sIGZpcnN0TGluZSwgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNr
Rm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0CiB7CiAgICAgaWYgKGZy
b20gPj0gdGV4dExlbmd0aCgpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTEyMTgsNyArMTIxOCw3
IEBAIGZsb2F0IFJlbmRlclRleHQ6OndpZHRoKHVuc2lnbmVkIGZyb20sIHUKICAgICByZXR1cm4g
d2lkdGgoZnJvbSwgbGVuLCBsaW5lU3R5bGUuZm9udENhc2NhZGUoKSwgeFBvcywgZmFsbGJhY2tG
b250cywgZ2x5cGhPdmVyZmxvdyk7CiB9CiAKLWZsb2F0IFJlbmRlclRleHQ6OndpZHRoKHVuc2ln
bmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgY29uc3QgRm9udENhc2NhZGUmIGYsIGZsb2F0IHhQb3Ms
IEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVy
ZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKK2Zsb2F0IFJlbmRlclRleHQ6OndpZHRoKHVuc2ln
bmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgY29uc3QgRm9udENhc2NhZGUmIGYsIGZsb2F0IHhQb3Ms
IEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlw
aE92ZXJmbG93KSBjb25zdAogewogICAgIEFTU0VSVChmcm9tICsgbGVuIDw9IHRleHRMZW5ndGgo
KSk7CiAgICAgaWYgKCF0ZXh0TGVuZ3RoKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0LmgJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTg5LDggKzg5LDggQEAgcHVibGljOgog
ICAgIHVuc2lnbmVkIHRleHRMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3RleHQuaW1wbCgpLT5s
ZW5ndGgoKTsgfSAvLyBub24gdmlydHVhbCBpbXBsZW1lbnRhdGlvbiBvZiBsZW5ndGgoKQogICAg
IHZvaWQgcG9zaXRpb25MaW5lQm94KElubGluZVRleHRCb3gmKTsKIAotICAgIHZpcnR1YWwgZmxv
YXQgd2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBjb25zdCBGb250Q2FzY2FkZSYs
IGZsb2F0IHhQb3MsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250
cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29uc3Q7Ci0gICAgdmlydHVhbCBmbG9hdCB3aWR0
aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIGZsb2F0IHhQb3MsIGJvb2wgZmlyc3RMaW5l
ID0gZmFsc2UsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9
IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29uc3Q7CisgICAgdmlydHVhbCBmbG9hdCB3aWR0aCh1
bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIGNvbnN0IEZvbnRDYXNjYWRlJiwgZmxvYXQgeFBv
cywgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93
KiA9IDApIGNvbnN0OworICAgIHZpcnR1YWwgZmxvYXQgd2lkdGgodW5zaWduZWQgZnJvbSwgdW5z
aWduZWQgbGVuLCBmbG9hdCB4UG9zLCBib29sIGZpcnN0TGluZSA9IGZhbHNlLCBIYXNoU2V0PGNv
bnN0IEZvbnQqPiogZmFsbGJhY2tGb250cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29uc3Q7
CiAKICAgICBmbG9hdCBtaW5Mb2dpY2FsV2lkdGgoKSBjb25zdDsKICAgICBmbG9hdCBtYXhMb2dp
Y2FsV2lkdGgoKSBjb25zdDsKQEAgLTE4MCw3ICsxODAsNyBAQCBwcml2YXRlOgogCiAgICAgdmly
dHVhbCBib29sIGNhbkhhdmVDaGlsZHJlbigpIGNvbnN0IG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJu
IGZhbHNlOyB9CiAKLSAgICB2b2lkIGNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKGZsb2F0
IGxlYWRXaWR0aCwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+JiBmYWxsYmFja0ZvbnRz
LCBHbHlwaE92ZXJmbG93Jik7CisgICAgdm9pZCBjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRo
cyhmbG9hdCBsZWFkV2lkdGgsIEhhc2hTZXQ8Y29uc3QgRm9udCo+JiBmYWxsYmFja0ZvbnRzLCBH
bHlwaE92ZXJmbG93Jik7CiAKICAgICBib29sIGNvbXB1dGVDYW5Vc2VTaW1wbGVGb250Q29kZVBh
dGgoKSBjb25zdDsKICAgICAKQEAgLTE5Miw3ICsxOTIsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1
YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQm
LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBjb25zdCBMYXlvdXRQb2ludCYsIEhpdFRlc3RBY3Rp
b24pIG92ZXJyaWRlIGZpbmFsIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBmYWxzZTsg
fQogCiAgICAgYm9vbCBjb250YWluc09ubHlXaGl0ZXNwYWNlKHVuc2lnbmVkIGZyb20sIHVuc2ln
bmVkIGxlbikgY29uc3Q7Ci0gICAgZmxvYXQgd2lkdGhGcm9tQ2FjaGUoY29uc3QgRm9udENhc2Nh
ZGUmLCBpbnQgc3RhcnQsIGludCBsZW4sIGZsb2F0IHhQb3MsIEhhc2hTZXQ8Y29uc3QgU2ltcGxl
Rm9udERhdGEqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyosIGNvbnN0IFJlbmRlclN0
eWxlJikgY29uc3Q7CisgICAgZmxvYXQgd2lkdGhGcm9tQ2FjaGUoY29uc3QgRm9udENhc2NhZGUm
LCBpbnQgc3RhcnQsIGludCBsZW4sIGZsb2F0IHhQb3MsIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBm
YWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiwgY29uc3QgUmVuZGVyU3R5bGUmKSBjb25zdDsK
ICAgICBib29sIGlzQWxsQVNDSUkoKSBjb25zdCB7IHJldHVybiBtX2lzQWxsQVNDSUk7IH0KICAg
ICBib29sIGNvbXB1dGVVc2VCYWNrc2xhc2hBc1llblN5bWJvbCgpIGNvbnN0OwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lLmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDYgKzI3LDcgQEAKICNpbmNsdWRlICJDU1NGb250U2VsZWN0b3IuaCIKICNpbmNsdWRlICJDU1NW
YWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCisjaW5jbHVkZSAiRm9udC5oIgog
I2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKICNpbmNsdWRl
ICJGcmFtZVZpZXcuaCIKQEAgLTQwLDcgKzQxLDYgQEAKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5o
IgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2luY2x1
ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1
ZGUgIlRleHRDb250cm9sSW5uZXJFbGVtZW50cy5oIgogI2luY2x1ZGUgPHd0Zi9TdGFja1N0YXRz
Lmg+CkBAIC0zNDYsNyArMzQ2LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmU6OgogICAgIGlmIChmYW1pbHkgPT0gIkx1Y2lkYSBHcmFuZGUiKQogICAgICAgICBtYXhD
aGFyV2lkdGggPSBzY2FsZUVtVG9Vbml0cyg0MDI3KTsKICAgICBlbHNlIGlmIChzdHlsZSgpLmZv
bnRDYXNjYWRlKCkuaGFzVmFsaWRBdmVyYWdlQ2hhcldpZHRoKCkpCi0gICAgICAgIG1heENoYXJX
aWR0aCA9IHJvdW5kZihzdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkubWF4
Q2hhcldpZHRoKCkpOworICAgICAgICBtYXhDaGFyV2lkdGggPSByb3VuZGYoc3R5bGUoKS5mb250
Q2FzY2FkZSgpLnByaW1hcnlGb250KCkubWF4Q2hhcldpZHRoKCkpOwogI2VuZGlmCiAKICAgICAv
LyBGb3IgdGV4dCBpbnB1dHMsIElFIGFkZHMgc29tZSBleHRyYSB3aWR0aC4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0JKHJldmlzaW9uIDE3ODg1NykK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQkod29ya2luZyBj
b3B5KQpAQCAtNTgwLDcgKzU4MCw3IEBAIHN0YXRpYyB2b2lkIGFkanVzdElucHV0RWxlbWVudEJ1
dHRvblN0eWwKICAgICBGb250Q2FzY2FkZSBmb250ID0gc3R5bGUuZm9udENhc2NhZGUoKTsKICAg
ICAKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gaW5wdXRFbGVtZW50LnJlbmRlcmVyKCk7
Ci0gICAgaWYgKGZvbnQucHJpbWFyeUZvbnREYXRhKCkuaXNTVkdGb250KCkgJiYgIXJlbmRlcmVy
KQorICAgIGlmIChmb250LnByaW1hcnlGb250KCkuaXNTVkdGb250KCkgJiYgIXJlbmRlcmVyKQog
ICAgICAgICByZXR1cm47CiAgICAgCiAgICAgZmxvYXQgbWF4aW11bVdpZHRoID0gbG9jYWxpemVk
RGF0ZUNhY2hlKCkubWF4aW11bVdpZHRoRm9yRGF0ZVR5cGUoZGF0ZVR5cGUsIGZvbnQsIFJlbmRl
clRoZW1lTWVhc3VyZVRleHRDbGllbnQoZm9udCwgKnJlbmRlcmVyLCBzdHlsZSkpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAkocmV2aXNpb24gMTc4
ODU3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04ODUsNyArODg1LDcgQEAgdm9pZCBSb290SW5saW5lQm94Ojphc2NlbnRB
bmREZXNjZW50Rm9yQgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgVmVjdG9yPGNvbnN0
IFNpbXBsZUZvbnREYXRhKj4qIHVzZWRGb250cyA9IG51bGxwdHI7CisgICAgVmVjdG9yPGNvbnN0
IEZvbnQqPiogdXNlZEZvbnRzID0gbnVsbHB0cjsKICAgICBHbHlwaE92ZXJmbG93KiBnbHlwaE92
ZXJmbG93ID0gbnVsbHB0cjsKICAgICBpZiAoaXM8SW5saW5lVGV4dEJveD4oYm94KSkgewogICAg
ICAgICBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcDo6aXRlcmF0b3IgaXQgPSB0ZXh0
Qm94RGF0YU1hcC5maW5kKCZkb3duY2FzdDxJbmxpbmVUZXh0Qm94Pihib3gpKTsKQEAgLTkwMSw3
ICs5MDEsNyBAQCB2b2lkIFJvb3RJbmxpbmVCb3g6OmFzY2VudEFuZERlc2NlbnRGb3JCCiAKICAg
ICBjb25zdCBSZW5kZXJTdHlsZSYgYm94TGluZVN0eWxlID0gYm94LmxpbmVTdHlsZSgpOwogICAg
IGlmICh1c2VkRm9udHMgJiYgIXVzZWRGb250cy0+aXNFbXB0eSgpICYmIChpbmNsdWRlRm9udCB8
fCAoYm94TGluZVN0eWxlLmxpbmVIZWlnaHQoKS5pc05lZ2F0aXZlKCkgJiYgaW5jbHVkZUxlYWRp
bmcpKSkgewotICAgICAgICB1c2VkRm9udHMtPmFwcGVuZCgmYm94TGluZVN0eWxlLmZvbnRDYXNj
YWRlKCkucHJpbWFyeUZvbnREYXRhKCkpOworICAgICAgICB1c2VkRm9udHMtPmFwcGVuZCgmYm94
TGluZVN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKSk7CiAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgdXNlZEZvbnRzLT5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgY29u
c3QgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzID0gdXNlZEZvbnRzLT5hdChpKS0+Zm9udE1ldHJp
Y3MoKTsKICAgICAgICAgICAgIGludCB1c2VkRm9udEFzY2VudCA9IGZvbnRNZXRyaWNzLmFzY2Vu
dChiYXNlbGluZVR5cGUoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxl
TGluZUxheW91dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Np
bXBsZUxpbmVMYXlvdXQuY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUy
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIFNpbXBsZUxpbmVMYXlvdXQgewog
CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBib29sIGNhblVzZUZv
clRleHQoY29uc3QgQ2hhcmFjdGVyVHlwZSogdGV4dCwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBT
aW1wbGVGb250RGF0YSYgZm9udERhdGEpCitzdGF0aWMgYm9vbCBjYW5Vc2VGb3JUZXh0KGNvbnN0
IENoYXJhY3RlclR5cGUqIHRleHQsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgRm9udCYgZm9udCkK
IHsKICAgICAvLyBGSVhNRTogPHRleHRhcmVhIG1heGxlbmd0aD0wPiBnZW5lcmF0ZXMgZW1wdHkg
dGV4dCBub2RlLgogICAgIGlmICghbGVuZ3RoKQpAQCAtNzUsMTcgKzc1LDE3IEBAIHN0YXRpYyBi
b29sIGNhblVzZUZvclRleHQoY29uc3QgQ2hhcmFjdGUKICAgICAgICAgICAgIHx8IGRpcmVjdGlv
biA9PSBVX1BPUF9ESVJFQ1RJT05BTF9GT1JNQVQgfHwgZGlyZWN0aW9uID09IFVfQk9VTkRBUllf
TkVVVFJBTCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBpZiAoIWZvbnRE
YXRhLmdseXBoRm9yQ2hhcmFjdGVyKGNoYXJhY3RlcikpCisgICAgICAgIGlmICghZm9udC5nbHlw
aEZvckNoYXJhY3RlcihjaGFyYWN0ZXIpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgY2FuVXNlRm9yVGV4dChjb25z
dCBSZW5kZXJUZXh0JiB0ZXh0UmVuZGVyZXIsIGNvbnN0IFNpbXBsZUZvbnREYXRhJiBmb250RGF0
YSkKK3N0YXRpYyBib29sIGNhblVzZUZvclRleHQoY29uc3QgUmVuZGVyVGV4dCYgdGV4dFJlbmRl
cmVyLCBjb25zdCBGb250JiBmb250KQogewogICAgIGlmICh0ZXh0UmVuZGVyZXIuaXM4Qml0KCkp
Ci0gICAgICAgIHJldHVybiBjYW5Vc2VGb3JUZXh0KHRleHRSZW5kZXJlci5jaGFyYWN0ZXJzOCgp
LCB0ZXh0UmVuZGVyZXIudGV4dExlbmd0aCgpLCBmb250RGF0YSk7Ci0gICAgcmV0dXJuIGNhblVz
ZUZvclRleHQodGV4dFJlbmRlcmVyLmNoYXJhY3RlcnMxNigpLCB0ZXh0UmVuZGVyZXIudGV4dExl
bmd0aCgpLCBmb250RGF0YSk7CisgICAgICAgIHJldHVybiBjYW5Vc2VGb3JUZXh0KHRleHRSZW5k
ZXJlci5jaGFyYWN0ZXJzOCgpLCB0ZXh0UmVuZGVyZXIudGV4dExlbmd0aCgpLCBmb250KTsKKyAg
ICByZXR1cm4gY2FuVXNlRm9yVGV4dCh0ZXh0UmVuZGVyZXIuY2hhcmFjdGVyczE2KCksIHRleHRS
ZW5kZXJlci50ZXh0TGVuZ3RoKCksIGZvbnQpOwogfQogCiBib29sIGNhblVzZUZvcihjb25zdCBS
ZW5kZXJCbG9ja0Zsb3cmIGZsb3cpCkBAIC0xODQsMTEgKzE4NCwxMSBAQCBib29sIGNhblVzZUZv
cihjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICB9Ci0gICAgaWYgKHN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkuaXNTVkdG
b250KCkpCisgICAgaWYgKHN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKS5pc1NWR0Zv
bnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIC8vIFdlIGFzc3VtZSB0aGF0IGFsbCBs
aW5lcyBoYXZlIG1ldHJpY3MgYmFzZWQgcHVyZWx5IG9uIHRoZSBwcmltYXJ5IGZvbnQuCi0gICAg
YXV0byYgcHJpbWFyeUZvbnREYXRhID0gc3R5bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERh
dGEoKTsKLSAgICBpZiAocHJpbWFyeUZvbnREYXRhLmlzTG9hZGluZygpKQorICAgIGF1dG8mIHBy
aW1hcnlGb250ID0gc3R5bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpOworICAgIGlmIChw
cmltYXJ5Rm9udC5pc0xvYWRpbmcoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGZvciAo
Y29uc3QgYXV0byYgdGV4dFJlbmRlcmVyIDogY2hpbGRyZW5PZlR5cGU8UmVuZGVyVGV4dD4oZmxv
dykpIHsKICAgICAgICAgaWYgKHRleHRSZW5kZXJlci5pc0NvbWJpbmVUZXh0KCkgfHwgdGV4dFJl
bmRlcmVyLmlzQ291bnRlcigpIHx8IHRleHRSZW5kZXJlci5pc1F1b3RlKCkgfHwgdGV4dFJlbmRl
cmVyLmlzVGV4dEZyYWdtZW50KCkKQEAgLTE5Niw3ICsxOTYsNyBAQCBib29sIGNhblVzZUZvcihj
b25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIGlmIChzdHlsZS5mb250Q2FzY2FkZSgpLmNvZGVQYXRoKFRleHRSdW4odGV4dFJlbmRlcmVy
LnRleHQoKSkpICE9IEZvbnRDYXNjYWRlOjpTaW1wbGUpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIGlmICghY2FuVXNlRm9yVGV4dCh0ZXh0UmVuZGVyZXIsIHByaW1hcnlGb250
RGF0YSkpCisgICAgICAgIGlmICghY2FuVXNlRm9yVGV4dCh0ZXh0UmVuZGVyZXIsIHByaW1hcnlG
b250KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9CcmVha2luZ0NvbnRleHRJbmxp
bmVIZWFkZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUv
QnJlYWtpbmdDb250ZXh0SW5saW5lSGVhZGVycy5oCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9CcmVha2luZ0NvbnRleHRJbmxpbmVIZWFkZXJzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgc3RydWN0IFdvcmRNZWFzdXJlbWVudCB7
CiAgICAgZmxvYXQgd2lkdGg7CiAgICAgaW50IHN0YXJ0T2Zmc2V0OwogICAgIGludCBlbmRPZmZz
ZXQ7Ci0gICAgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+IGZhbGxiYWNrRm9udHM7Cisg
ICAgSGFzaFNldDxjb25zdCBGb250Kj4gZmFsbGJhY2tGb250czsKIH07CiAKIGNsYXNzIEJyZWFr
aW5nQ29udGV4dCB7CkBAIC00ODYsMTMgKzQ4NiwxMyBAQCBpbmxpbmUgdm9pZCB1cGRhdGVDb3Vu
dGVySWZOZWVkZWQoUmVuZGVyCiAgICAgZG93bmNhc3Q8UmVuZGVyQ291bnRlcj4ocmVuZGVyVGV4
dCkudXBkYXRlQ291bnRlcigpOwogfQogCi1pbmxpbmUgZmxvYXQgbWVhc3VyZUh5cGhlbldpZHRo
KFJlbmRlclRleHQqIHJlbmRlcmVyLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgSGFzaFNldDxj
b25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCkKK2lubGluZSBmbG9hdCBt
ZWFzdXJlSHlwaGVuV2lkdGgoUmVuZGVyVGV4dCogcmVuZGVyZXIsIGNvbnN0IEZvbnRDYXNjYWRl
JiBmb250LCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cyA9IDApCiB7CiAgICAg
Y29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7CiAgICAgcmV0dXJu
IGZvbnQud2lkdGgoUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4ocmVuZGVyZXIsIGZvbnQs
IHN0eWxlLmh5cGhlblN0cmluZygpLnN0cmluZygpLCBzdHlsZSksIGZhbGxiYWNrRm9udHMpOwog
fQogCi1BTFdBWVNfSU5MSU5FIGZsb2F0IHRleHRXaWR0aChSZW5kZXJUZXh0KiB0ZXh0LCB1bnNp
Z25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBmbG9hdCB4
UG9zLCBib29sIGlzRml4ZWRQaXRjaCwgYm9vbCBjb2xsYXBzZVdoaXRlU3BhY2UsIEhhc2hTZXQ8
Y29uc3QgU2ltcGxlRm9udERhdGEqPiYgZmFsbGJhY2tGb250cywgVGV4dExheW91dCogbGF5b3V0
ID0gMCkKK0FMV0FZU19JTkxJTkUgZmxvYXQgdGV4dFdpZHRoKFJlbmRlclRleHQqIHRleHQsIHVu
c2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGZsb2F0
IHhQb3MsIGJvb2wgaXNGaXhlZFBpdGNoLCBib29sIGNvbGxhcHNlV2hpdGVTcGFjZSwgSGFzaFNl
dDxjb25zdCBGb250Kj4mIGZhbGxiYWNrRm9udHMsIFRleHRMYXlvdXQqIGxheW91dCA9IDApCiB7
CiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlID0gdGV4dC0+c3R5bGUoKTsKIApAQCAtNTc4
LDcgKzU3OCw3IEBAIGlubGluZSB2b2lkIHRyeUh5cGhlbmF0aW5nKFJlbmRlclRleHQqIHQKICAg
ICBBU1NFUlQocG9zIC0gbGFzdFNwYWNlIC0gcHJlZml4TGVuZ3RoID49IG1pbmltdW1TdWZmaXhM
ZW5ndGgpOwogCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIEhhc2hTZXQ8Y29uc3QgU2ltcGxl
Rm9udERhdGEqPiBmYWxsYmFja0ZvbnRzOworICAgIEhhc2hTZXQ8Y29uc3QgRm9udCo+IGZhbGxi
YWNrRm9udHM7CiAgICAgZmxvYXQgcHJlZml4V2lkdGggPSBoeXBoZW5XaWR0aCArIHRleHRXaWR0
aCh0ZXh0LCBsYXN0U3BhY2UsIHByZWZpeExlbmd0aCwgZm9udCwgeFBvcywgaXNGaXhlZFBpdGNo
LCBjb2xsYXBzZVdoaXRlU3BhY2UsIGZhbGxiYWNrRm9udHMpICsgbGFzdFNwYWNlV29yZFNwYWNp
bmc7CiAgICAgQVNTRVJUKHhQb3MgKyBwcmVmaXhXaWR0aCA8PSBhdmFpbGFibGVXaWR0aCk7CiAj
ZWxzZQpAQCAtNjU2LDcgKzY1Niw3IEBAIGlubGluZSBib29sIEJyZWFraW5nQ29udGV4dDo6aGFu
ZGxlVGV4dCgKIAogICAgIC8vIE5vbi16ZXJvIG9ubHkgd2hlbiBrZXJuaW5nIGlzIGVuYWJsZWQg
YW5kIFRleHRMYXlvdXQgaXNuJ3QgdXNlZCwgaW4gd2hpY2ggY2FzZSB3ZSBtZWFzdXJlCiAgICAg
Ly8gd29yZHMgd2l0aCB0aGVpciB0cmFpbGluZyBzcGFjZSwgdGhlbiBzdWJ0cmFjdCBpdHMgd2lk
dGguCi0gICAgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+IGZhbGxiYWNrRm9udHM7Cisg
ICAgSGFzaFNldDxjb25zdCBGb250Kj4gZmFsbGJhY2tGb250czsKICAgICBmbG9hdCB3b3JkVHJh
aWxpbmdTcGFjZVdpZHRoID0gKGZvbnQudHlwZXNldHRpbmdGZWF0dXJlcygpICYgS2VybmluZykg
JiYgIXRleHRMYXlvdXQgPyBmb250LndpZHRoKFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVu
KCZyZW5kZXJUZXh0LCBmb250LCAmc3BhY2UsIDEsIHN0eWxlKSwgJmZhbGxiYWNrRm9udHMpICsg
d29yZFNwYWNpbmcgOiAwOwogCiAgICAgVUNoYXIgbGFzdENoYXJhY3RlciA9IG1fcmVuZGVyVGV4
dEluZm8ubV9saW5lQnJlYWtJdGVyYXRvci5sYXN0Q2hhcmFjdGVyKCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJh
dG9yLmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21h
dGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMzMsNyAr
MTMzMyw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnJlc2V0U3RyZXRjaFMKIAogRmxv
YXRSZWN0IFJlbmRlck1hdGhNTE9wZXJhdG9yOjpib3VuZHNGb3JHbHlwaChjb25zdCBHbHlwaERh
dGEmIGRhdGEpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGRhdGEuZm9udERhdGEtPmJvdW5kc0Zvckds
eXBoKGRhdGEuZ2x5cGgpOworICAgIHJldHVybiBkYXRhLmZvbnQtPmJvdW5kc0ZvckdseXBoKGRh
dGEuZ2x5cGgpOwogfQogCiBmbG9hdCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6aGVpZ2h0Rm9yR2x5
cGgoY29uc3QgR2x5cGhEYXRhJiBkYXRhKSBjb25zdApAQCAtMTM0Myw3ICsxMzQzLDcgQEAgZmxv
YXQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmhlaWdodEZvckdseQogCiBmbG9hdCBSZW5kZXJNYXRo
TUxPcGVyYXRvcjo6YWR2YW5jZUZvckdseXBoKGNvbnN0IEdseXBoRGF0YSYgZGF0YSkgY29uc3QK
IHsKLSAgICByZXR1cm4gZGF0YS5mb250RGF0YS0+d2lkdGhGb3JHbHlwaChkYXRhLmdseXBoKTsK
KyAgICByZXR1cm4gZGF0YS5mb250LT53aWR0aEZvckdseXBoKGRhdGEuZ2x5cGgpOwogfQogCiB2
b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygp
CkBAIC0xNTIxLDExICsxNTIxLDExIEBAIGJvb2wgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmdldEds
eXBoQXNzZW0KICAgICBpZiAoIWJvdHRvbS5nbHlwaCkKICAgICAgICAgYm90dG9tLmdseXBoID0g
ZXh0ZW5zaW9uLmdseXBoOwogCi0gICAgdG9wLmZvbnREYXRhID0gJnN0eWxlKCkuZm9udENhc2Nh
ZGUoKS5wcmltYXJ5Rm9udERhdGEoKTsKLSAgICBleHRlbnNpb24uZm9udERhdGEgPSB0b3AuZm9u
dERhdGE7Ci0gICAgYm90dG9tLmZvbnREYXRhID0gdG9wLmZvbnREYXRhOworICAgIHRvcC5mb250
ID0gJnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpOworICAgIGV4dGVuc2lvbi5m
b250ID0gdG9wLmZvbnQ7CisgICAgYm90dG9tLmZvbnQgPSB0b3AuZm9udDsKICAgICBpZiAobWlk
ZGxlLmdseXBoKQotICAgICAgICBtaWRkbGUuZm9udERhdGEgPSB0b3AuZm9udERhdGE7CisgICAg
ICAgIG1pZGRsZS5mb250ID0gdG9wLmZvbnQ7CiAKICAgICBzdHJldGNoeURhdGEuc2V0R2x5cGhB
c3NlbWJseU1vZGUodG9wLCBleHRlbnNpb24sIGJvdHRvbSwgbWlkZGxlKTsKIApAQCAtMTUzOCwy
NCArMTUzOCwyNCBAQCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6U3RyZXRjaHlEYXRhIFJlbmRlCiAK
ICAgICBBU1NFUlQobV9pc1ZlcnRpY2FsICYmIGlzTGFyZ2VPcGVyYXRvckluRGlzcGxheVN0eWxl
KCkpOwogCi0gICAgY29uc3QgYXV0byYgcHJpbWFyeUZvbnREYXRhID0gc3R5bGUoKS5mb250Q2Fz
Y2FkZSgpLnByaW1hcnlGb250RGF0YSgpOworICAgIGNvbnN0IGF1dG8mIHByaW1hcnlGb250ID0g
c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCk7CiAgICAgR2x5cGhEYXRhIGJhc2VH
bHlwaCA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFj
dGVyLCAhc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpOwotICAgIGlmICghcHJpbWFy
eUZvbnREYXRhLm1hdGhEYXRhKCkgfHwgYmFzZUdseXBoLmZvbnREYXRhICE9ICZwcmltYXJ5Rm9u
dERhdGEpCisgICAgaWYgKCFwcmltYXJ5Rm9udC5tYXRoRGF0YSgpIHx8IGJhc2VHbHlwaC5mb250
ICE9ICZwcmltYXJ5Rm9udCkKICAgICAgICAgcmV0dXJuIGRhdGE7CiAKICAgICBWZWN0b3I8R2x5
cGg+IHNpemVWYXJpYW50czsKICAgICBWZWN0b3I8T3BlblR5cGVNYXRoRGF0YTo6QXNzZW1ibHlQ
YXJ0PiBhc3NlbWJseVBhcnRzOwogCiAgICAgLy8gVGhlIHZhbHVlIG9mIGRpc3BsYXlPcGVyYXRv
ck1pbkhlaWdodCBpcyBzb21ldGltZXMgdG9vIHNtYWxsLCBzbyB3ZSBlbnN1cmUgdGhhdCBpdCBp
cyBhdCBsZWFzdCBcc3FydHsyfSB0aW1lcyB0aGUgc2l6ZSBvZiB0aGUgYmFzZSBnbHlwaC4KLSAg
ICBmbG9hdCBkaXNwbGF5T3BlcmF0b3JNaW5IZWlnaHQgPSBzdGQ6Om1heChiYXNlR2x5cGguZm9u
dERhdGEtPmJvdW5kc0ZvckdseXBoKGJhc2VHbHlwaC5nbHlwaCkuaGVpZ2h0KCkgKiBzcXJ0T2ZU
d29GbG9hdCwgcHJpbWFyeUZvbnREYXRhLm1hdGhEYXRhKCktPmdldE1hdGhDb25zdGFudChwcmlt
YXJ5Rm9udERhdGEsIE9wZW5UeXBlTWF0aERhdGE6OkRpc3BsYXlPcGVyYXRvck1pbkhlaWdodCkp
OworICAgIGZsb2F0IGRpc3BsYXlPcGVyYXRvck1pbkhlaWdodCA9IHN0ZDo6bWF4KGJhc2VHbHlw
aC5mb250LT5ib3VuZHNGb3JHbHlwaChiYXNlR2x5cGguZ2x5cGgpLmhlaWdodCgpICogc3FydE9m
VHdvRmxvYXQsIHByaW1hcnlGb250Lm1hdGhEYXRhKCktPmdldE1hdGhDb25zdGFudChwcmltYXJ5
Rm9udCwgT3BlblR5cGVNYXRoRGF0YTo6RGlzcGxheU9wZXJhdG9yTWluSGVpZ2h0KSk7CiAKLSAg
ICBwcmltYXJ5Rm9udERhdGEubWF0aERhdGEoKS0+Z2V0TWF0aFZhcmlhbnRzKGJhc2VHbHlwaC5n
bHlwaCwgdHJ1ZSwgc2l6ZVZhcmlhbnRzLCBhc3NlbWJseVBhcnRzKTsKKyAgICBwcmltYXJ5Rm9u
dC5tYXRoRGF0YSgpLT5nZXRNYXRoVmFyaWFudHMoYmFzZUdseXBoLmdseXBoLCB0cnVlLCBzaXpl
VmFyaWFudHMsIGFzc2VtYmx5UGFydHMpOwogCiAgICAgLy8gV2UgY2hvb3NlIHRoZSBmaXJzdCBz
aXplIHZhcmlhbnQgdGhhdCBpcyBsYXJnZXIgdGhhbiB0aGUgZXhwZWN0ZWQgZGlzcGxheU9wZXJh
dG9yTWluSGVpZ2h0IGFuZCBvdGhlcndpc2UgZmFsbGJhY2sgdG8gdGhlIGxhcmdlc3QgdmFyaWFu
dC4KICAgICBmb3IgKGF1dG8mIHZhcmlhbnQgOiBzaXplVmFyaWFudHMpIHsKICAgICAgICAgR2x5
cGhEYXRhIHNpemVWYXJpYW50OwogICAgICAgICBzaXplVmFyaWFudC5nbHlwaCA9IHZhcmlhbnQ7
Ci0gICAgICAgIHNpemVWYXJpYW50LmZvbnREYXRhID0gJnByaW1hcnlGb250RGF0YTsKKyAgICAg
ICAgc2l6ZVZhcmlhbnQuZm9udCA9ICZwcmltYXJ5Rm9udDsKICAgICAgICAgZGF0YS5zZXRTaXpl
VmFyaWFudE1vZGUoc2l6ZVZhcmlhbnQpOwogICAgICAgICBpZiAoYm91bmRzRm9yR2x5cGgoc2l6
ZVZhcmlhbnQpLmhlaWdodCgpID49IGRpc3BsYXlPcGVyYXRvck1pbkhlaWdodCkKICAgICAgICAg
ICAgIHJldHVybiBkYXRhOwpAQCAtMTU3MCwxOCArMTU3MCwxOCBAQCBSZW5kZXJNYXRoTUxPcGVy
YXRvcjo6U3RyZXRjaHlEYXRhIFJlbmRlCiAgICAgU3RyZXRjaHlEYXRhIGRhdGE7CiAgICAgU3Ry
ZXRjaHlEYXRhIGFzc2VtYmx5RGF0YTsKIAotICAgIGNvbnN0IGF1dG8mIHByaW1hcnlGb250RGF0
YSA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKTsKKyAgICBjb25zdCBh
dXRvJiBwcmltYXJ5Rm9udCA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpOwog
ICAgIEdseXBoRGF0YSBiYXNlR2x5cGggPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCkuZ2x5cGhEYXRh
Rm9yQ2hhcmFjdGVyKGNoYXJhY3RlciwgIXN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigp
KTsKICAgICAKLSAgICBpZiAocHJpbWFyeUZvbnREYXRhLm1hdGhEYXRhKCkgJiYgYmFzZUdseXBo
LmZvbnREYXRhID09ICZwcmltYXJ5Rm9udERhdGEpIHsKKyAgICBpZiAocHJpbWFyeUZvbnQubWF0
aERhdGEoKSAmJiBiYXNlR2x5cGguZm9udCA9PSAmcHJpbWFyeUZvbnQpIHsKICAgICAgICAgVmVj
dG9yPEdseXBoPiBzaXplVmFyaWFudHM7CiAgICAgICAgIFZlY3RvcjxPcGVuVHlwZU1hdGhEYXRh
OjpBc3NlbWJseVBhcnQ+IGFzc2VtYmx5UGFydHM7Ci0gICAgICAgIHByaW1hcnlGb250RGF0YS5t
YXRoRGF0YSgpLT5nZXRNYXRoVmFyaWFudHMoYmFzZUdseXBoLmdseXBoLCBtX2lzVmVydGljYWws
IHNpemVWYXJpYW50cywgYXNzZW1ibHlQYXJ0cyk7CisgICAgICAgIHByaW1hcnlGb250Lm1hdGhE
YXRhKCktPmdldE1hdGhWYXJpYW50cyhiYXNlR2x5cGguZ2x5cGgsIG1faXNWZXJ0aWNhbCwgc2l6
ZVZhcmlhbnRzLCBhc3NlbWJseVBhcnRzKTsKICAgICAgICAgLy8gV2UgdmVyaWZ5IHRoZSBzaXpl
IHZhcmlhbnRzLgogICAgICAgICBmb3IgKGF1dG8mIHZhcmlhbnQgOiBzaXplVmFyaWFudHMpIHsK
ICAgICAgICAgICAgIEdseXBoRGF0YSBzaXplVmFyaWFudDsKICAgICAgICAgICAgIHNpemVWYXJp
YW50LmdseXBoID0gdmFyaWFudDsKLSAgICAgICAgICAgIHNpemVWYXJpYW50LmZvbnREYXRhID0g
JnByaW1hcnlGb250RGF0YTsKKyAgICAgICAgICAgIHNpemVWYXJpYW50LmZvbnQgPSAmcHJpbWFy
eUZvbnQ7CiAgICAgICAgICAgICBpZiAobWF4aW11bUdseXBoV2lkdGgpCiAgICAgICAgICAgICAg
ICAgKm1heGltdW1HbHlwaFdpZHRoID0gc3RkOjptYXgoKm1heGltdW1HbHlwaFdpZHRoLCBhZHZh
bmNlRm9yR2x5cGgoc2l6ZVZhcmlhbnQpKTsKICAgICAgICAgICAgIGVsc2UgewpAQCAtMTgwMSw4
ICsxODAxLDggQEAgTGF5b3V0UmVjdCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6cGFpbnRHbAogICAg
IGluZm8uY29udGV4dC0+Y2xpcChjbGlwQm91bmRzKTsKIAogICAgIEdseXBoQnVmZmVyIGJ1ZmZl
cjsKLSAgICBidWZmZXIuYWRkKGRhdGEuZ2x5cGgsIGRhdGEuZm9udERhdGEsIGFkdmFuY2VGb3JH
bHlwaChkYXRhKSk7Ci0gICAgaW5mby5jb250ZXh0LT5kcmF3R2x5cGhzKHN0eWxlKCkuZm9udENh
c2NhZGUoKSwgKmRhdGEuZm9udERhdGEsIGJ1ZmZlciwgMCwgMSwgb3JpZ2luKTsKKyAgICBidWZm
ZXIuYWRkKGRhdGEuZ2x5cGgsIGRhdGEuZm9udCwgYWR2YW5jZUZvckdseXBoKGRhdGEpKTsKKyAg
ICBpbmZvLmNvbnRleHQtPmRyYXdHbHlwaHMoc3R5bGUoKS5mb250Q2FzY2FkZSgpLCAqZGF0YS5m
b250LCBidWZmZXIsIDAsIDEsIG9yaWdpbik7CiAKICAgICByZXR1cm4gZ2x5cGhQYWludFJlY3Q7
CiB9CkBAIC0xODk0LDExICsxODk0LDExIEBAIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBh
aW50KFBhaW50SW4KICAgICBpZiAobV9zdHJldGNoeURhdGEubW9kZSgpID09IERyYXdTaXplVmFy
aWFudCkgewogICAgICAgICBBU1NFUlQobV9zdHJldGNoeURhdGEudmFyaWFudCgpLmdseXBoKTsK
ICAgICAgICAgR2x5cGhCdWZmZXIgYnVmZmVyOwotICAgICAgICBidWZmZXIuYWRkKG1fc3RyZXRj
aHlEYXRhLnZhcmlhbnQoKS5nbHlwaCwgbV9zdHJldGNoeURhdGEudmFyaWFudCgpLmZvbnREYXRh
LCBhZHZhbmNlRm9yR2x5cGgobV9zdHJldGNoeURhdGEudmFyaWFudCgpKSk7CisgICAgICAgIGJ1
ZmZlci5hZGQobV9zdHJldGNoeURhdGEudmFyaWFudCgpLmdseXBoLCBtX3N0cmV0Y2h5RGF0YS52
YXJpYW50KCkuZm9udCwgYWR2YW5jZUZvckdseXBoKG1fc3RyZXRjaHlEYXRhLnZhcmlhbnQoKSkp
OwogICAgICAgICBMYXlvdXRQb2ludCBvcGVyYXRvclRvcExlZnQgPSBjZWlsZWRJbnRQb2ludChw
YWludE9mZnNldCArIGxvY2F0aW9uKCkpOwogICAgICAgICBGbG9hdFJlY3QgZ2x5cGhCb3VuZHMg
PSBib3VuZHNGb3JHbHlwaChtX3N0cmV0Y2h5RGF0YS52YXJpYW50KCkpOwogICAgICAgICBMYXlv
dXRQb2ludCBvcGVyYXRvck9yaWdpbihvcGVyYXRvclRvcExlZnQueCgpLCBvcGVyYXRvclRvcExl
ZnQueSgpIC0gZ2x5cGhCb3VuZHMueSgpKTsKLSAgICAgICAgaW5mby5jb250ZXh0LT5kcmF3R2x5
cGhzKHN0eWxlKCkuZm9udENhc2NhZGUoKSwgKm1fc3RyZXRjaHlEYXRhLnZhcmlhbnQoKS5mb250
RGF0YSwgYnVmZmVyLCAwLCAxLCBvcGVyYXRvck9yaWdpbik7CisgICAgICAgIGluZm8uY29udGV4
dC0+ZHJhd0dseXBocyhzdHlsZSgpLmZvbnRDYXNjYWRlKCksICptX3N0cmV0Y2h5RGF0YS52YXJp
YW50KCkuZm9udCwgYnVmZmVyLCAwLCAxLCBvcGVyYXRvck9yaWdpbik7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKQEAgLTE5ODAsOCArMTk4MCw4IEBAIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0
b3I6OnBhaW50Q2hpbGRyZW4KIAogTGF5b3V0VW5pdCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6dHJh
aWxpbmdTcGFjZUVycm9yKCkKIHsKLSAgICBjb25zdCBhdXRvJiBwcmltYXJ5Rm9udERhdGEgPSBz
dHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCk7Ci0gICAgaWYgKCFwcmltYXJ5
Rm9udERhdGEubWF0aERhdGEoKSkKKyAgICBjb25zdCBhdXRvJiBwcmltYXJ5Rm9udCA9IHN0eWxl
KCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpOworICAgIGlmICghcHJpbWFyeUZvbnQubWF0
aERhdGEoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAvLyBGb3IgT3BlblR5cGUgTUFUSCBm
b250LCB0aGUgbGF5b3V0IGlzIGJhc2VkIG9uIFJlbmRlck1hdGhPcGVyYXRvciBmb3Igd2hpY2gg
dGhlIHByZWZlcnJlZCB3aWR0aCBpcyBzb21ldGltZXMgb3ZlcmVzdGltYXRlZCAoYnVnIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzAzMjYpLgpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0
b3IuaAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGht
bC9SZW5kZXJNYXRoTUxPcGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMSArMjgsMTEg
QEAKIAogI2lmIEVOQUJMRShNQVRITUwpCiAKKyNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAi
R2x5cGhQYWdlLmgiCiAjaW5jbHVkZSAiTWF0aE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIk9wZW5U
eXBlTWF0aERhdGEuaCIKICNpbmNsdWRlICJSZW5kZXJNYXRoTUxUb2tlbi5oIgotI2luY2x1ZGUg
IlNpbXBsZUZvbnREYXRhLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSYWRpY2FsT3BlcmF0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0
aE1MUmFkaWNhbE9wZXJhdG9yLmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSYWRpY2FsT3BlcmF0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIFJlbmRlck1hdGhNTFJhZGljYWxPcGVyYXRvcjo6
UmVuZGVyTWF0aE0KIAogdm9pZCBSZW5kZXJNYXRoTUxSYWRpY2FsT3BlcmF0b3I6OnN0cmV0Y2hU
byhMYXlvdXRVbml0IGhlaWdodEFib3ZlQmFzZWxpbmUsIExheW91dFVuaXQgZGVwdGhCZWxvd0Jh
c2VsaW5lKQogewotICAgIGlmICghc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0
YSgpLm1hdGhEYXRhKCkpIHsKKyAgICBpZiAoIXN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5
Rm9udCgpLm1hdGhEYXRhKCkpIHsKICAgICAgICAgLy8gSWYgd2UgZG8gbm90IGhhdmUgYW4gT3Bl
blR5cGUgTUFUSCBmb250LCB3ZSBhbHdheXMgbWFrZSB0aGUgcmFkaWNhbCBkZXB0aCBhIGJpdCBs
YXJnZXIgdGhhbiB0aGUgdGFyZ2V0LgogICAgICAgICBkZXB0aEJlbG93QmFzZWxpbmUgKz0gZ1Jh
ZGljYWxCb3R0b21Qb2ludExvd2VyOwogICAgIH0KQEAgLTgzLDcgKzgzLDcgQEAgdm9pZCBSZW5k
ZXJNYXRoTUxSYWRpY2FsT3BlcmF0b3I6OmNvbXB1dAogewogICAgIEFTU0VSVChwcmVmZXJyZWRM
b2dpY2FsV2lkdGhzRGlydHkoKSk7CiAKLSAgICBpZiAoc3R5bGUoKS5mb250Q2FzY2FkZSgpLnBy
aW1hcnlGb250RGF0YSgpLm1hdGhEYXRhKCkpIHsKKyAgICBpZiAoc3R5bGUoKS5mb250Q2FzY2Fk
ZSgpLnByaW1hcnlGb250KCkubWF0aERhdGEoKSkgewogICAgICAgICBSZW5kZXJNYXRoTUxPcGVy
YXRvcjo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KQEAgLTk2LDcgKzk2LDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxSYWRpY2FsT3BlcmF0b3I6
OmNvbXB1dAogCiB2b2lkIFJlbmRlck1hdGhNTFJhZGljYWxPcGVyYXRvcjo6Y29tcHV0ZUxvZ2lj
YWxIZWlnaHQoTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBMYXlvdXRVbml0IGxvZ2ljYWxUb3As
IExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyYgY29tcHV0ZWRWYWx1ZXMpIGNvbnN0CiB7Ci0g
ICAgaWYgKHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5tYXRoRGF0YSgp
KSB7CisgICAgaWYgKHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpLm1hdGhEYXRh
KCkpIHsKICAgICAgICAgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmNvbXB1dGVMb2dpY2FsSGVpZ2h0
KGxvZ2ljYWxIZWlnaHQsIGxvZ2ljYWxUb3AsIGNvbXB1dGVkVmFsdWVzKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KQEAgLTExMSw3ICsxMTEsNyBAQCB2b2lkIFJlbmRlck1hdGhNTFJhZGljYWxP
cGVyYXRvcjo6cGFpbnQoCiAgICAgaWYgKGluZm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgp
IHx8IGluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZUZvcmVncm91bmQgfHwgc3R5bGUoKS52aXNpYmls
aXR5KCkgIT0gVklTSUJMRSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKHN0eWxlKCkuZm9u
dENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5tYXRoRGF0YSgpKSB7CisgICAgaWYgKHN0eWxl
KCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpLm1hdGhEYXRhKCkpIHsKICAgICAgICAgUmVu
ZGVyTWF0aE1MT3BlcmF0b3I6OnBhaW50KGluZm8sIHBhaW50T2Zmc2V0KTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVy
TWF0aE1MUm9vdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21h
dGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjA4LDE3ICsyMDgsMTcgQEAgdm9pZCBSZW5kZXJNYXRoTUxSb290Ojp1cGRhdGVTdHls
ZSgpCiAgICAgTGF5b3V0VW5pdCBrZXJuQWZ0ZXJEZWdyZWUgPSAtMTAgKiBzdHlsZSgpLmZvbnRD
YXNjYWRlKCkuc2l6ZSgpIC8gMTg7CiAgICAgbV9kZWdyZWVCb3R0b21SYWlzZVBlcmNlbnQgPSAw
LjZmOwogCi0gICAgY29uc3QgYXV0byYgcHJpbWFyeUZvbnREYXRhID0gc3R5bGUoKS5mb250Q2Fz
Y2FkZSgpLnByaW1hcnlGb250RGF0YSgpOwotICAgIGlmIChhdXRvKiBtYXRoRGF0YSA9IHN0eWxl
KCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5tYXRoRGF0YSgpKSB7CisgICAgY29u
c3QgYXV0byYgcHJpbWFyeUZvbnQgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQo
KTsKKyAgICBpZiAoYXV0byogbWF0aERhdGEgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFy
eUZvbnQoKS5tYXRoRGF0YSgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBtX3ZlcnRpY2FsR2FwIHNo
b3VsZCB1c2UgUmFkaWNhbERpc3BsYXlTdHlsZVZlcnRpY2FsIGluIGRpc3BsYXkgbW9kZSAoaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExODczNykuCi0gICAgICAgIG1f
dmVydGljYWxHYXAgPSBtYXRoRGF0YS0+Z2V0TWF0aENvbnN0YW50KHByaW1hcnlGb250RGF0YSwg
T3BlblR5cGVNYXRoRGF0YTo6UmFkaWNhbFZlcnRpY2FsR2FwKTsKLSAgICAgICAgbV9ydWxlVGhp
Y2tuZXNzID0gbWF0aERhdGEtPmdldE1hdGhDb25zdGFudChwcmltYXJ5Rm9udERhdGEsIE9wZW5U
eXBlTWF0aERhdGE6OlJhZGljYWxSdWxlVGhpY2tuZXNzKTsKLSAgICAgICAgbV9leHRyYUFzY2Vu
ZGVyID0gbWF0aERhdGEtPmdldE1hdGhDb25zdGFudChwcmltYXJ5Rm9udERhdGEsIE9wZW5UeXBl
TWF0aERhdGE6OlJhZGljYWxFeHRyYUFzY2VuZGVyKTsKKyAgICAgICAgbV92ZXJ0aWNhbEdhcCA9
IG1hdGhEYXRhLT5nZXRNYXRoQ29uc3RhbnQocHJpbWFyeUZvbnQsIE9wZW5UeXBlTWF0aERhdGE6
OlJhZGljYWxWZXJ0aWNhbEdhcCk7CisgICAgICAgIG1fcnVsZVRoaWNrbmVzcyA9IG1hdGhEYXRh
LT5nZXRNYXRoQ29uc3RhbnQocHJpbWFyeUZvbnQsIE9wZW5UeXBlTWF0aERhdGE6OlJhZGljYWxS
dWxlVGhpY2tuZXNzKTsKKyAgICAgICAgbV9leHRyYUFzY2VuZGVyID0gbWF0aERhdGEtPmdldE1h
dGhDb25zdGFudChwcmltYXJ5Rm9udCwgT3BlblR5cGVNYXRoRGF0YTo6UmFkaWNhbEV4dHJhQXNj
ZW5kZXIpOwogCiAgICAgICAgIGlmICghaXNSZW5kZXJNYXRoTUxTcXVhcmVSb290KCkpIHsKLSAg
ICAgICAgICAgIGtlcm5CZWZvcmVEZWdyZWUgPSBtYXRoRGF0YS0+Z2V0TWF0aENvbnN0YW50KHBy
aW1hcnlGb250RGF0YSwgT3BlblR5cGVNYXRoRGF0YTo6UmFkaWNhbEtlcm5CZWZvcmVEZWdyZWUp
OwotICAgICAgICAgICAga2VybkFmdGVyRGVncmVlID0gbWF0aERhdGEtPmdldE1hdGhDb25zdGFu
dChwcmltYXJ5Rm9udERhdGEsIE9wZW5UeXBlTWF0aERhdGE6OlJhZGljYWxLZXJuQWZ0ZXJEZWdy
ZWUpOwotICAgICAgICAgICAgbV9kZWdyZWVCb3R0b21SYWlzZVBlcmNlbnQgPSBtYXRoRGF0YS0+
Z2V0TWF0aENvbnN0YW50KHByaW1hcnlGb250RGF0YSwgT3BlblR5cGVNYXRoRGF0YTo6UmFkaWNh
bERlZ3JlZUJvdHRvbVJhaXNlUGVyY2VudCk7CisgICAgICAgICAgICBrZXJuQmVmb3JlRGVncmVl
ID0gbWF0aERhdGEtPmdldE1hdGhDb25zdGFudChwcmltYXJ5Rm9udCwgT3BlblR5cGVNYXRoRGF0
YTo6UmFkaWNhbEtlcm5CZWZvcmVEZWdyZWUpOworICAgICAgICAgICAga2VybkFmdGVyRGVncmVl
ID0gbWF0aERhdGEtPmdldE1hdGhDb25zdGFudChwcmltYXJ5Rm9udCwgT3BlblR5cGVNYXRoRGF0
YTo6UmFkaWNhbEtlcm5BZnRlckRlZ3JlZSk7CisgICAgICAgICAgICBtX2RlZ3JlZUJvdHRvbVJh
aXNlUGVyY2VudCA9IG1hdGhEYXRhLT5nZXRNYXRoQ29uc3RhbnQocHJpbWFyeUZvbnQsIE9wZW5U
eXBlTWF0aERhdGE6OlJhZGljYWxEZWdyZWVCb3R0b21SYWlzZVBlcmNlbnQpOwogICAgICAgICB9
CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5
bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5k
ZXJTdHlsZS5jcHAJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExODQsNyArMTE4NCw3
IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgUmVuZGVyU3R5bGU6Omh5cGhlblMKICAgICAvLyBGSVhN
RTogVGhpcyBzaG91bGQgZGVwZW5kIG9uIGxvY2FsZS4KICAgICBERVBSRUNBVEVEX0RFRklORV9T
VEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBoeXBoZW5NaW51c1N0cmluZywgKCZoeXBoZW5NaW51
cywgMSkpOwogICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcs
IGh5cGhlblN0cmluZywgKCZoeXBoZW4sIDEpKTsKLSAgICByZXR1cm4gZm9udENhc2NhZGUoKS5w
cmltYXJ5Rm9udERhdGEoKS5nbHlwaEZvckNoYXJhY3RlcihoeXBoZW4pID8gaHlwaGVuU3RyaW5n
IDogaHlwaGVuTWludXNTdHJpbmc7CisgICAgcmV0dXJuIGZvbnRDYXNjYWRlKCkucHJpbWFyeUZv
bnQoKS5nbHlwaEZvckNoYXJhY3RlcihoeXBoZW4pID8gaHlwaGVuU3RyaW5nIDogaHlwaGVuTWlu
dXNTdHJpbmc7CiB9CiAKIGNvbnN0IEF0b21pY1N0cmluZyYgUmVuZGVyU3R5bGU6OnRleHRFbXBo
YXNpc01hcmtTdHJpbmcoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHVGV4dC5oIgogCiAjaW5jbHVkZSAiRmxv
YXRRdWFkLmgiCisjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgogI2luY2x1ZGUgIkhpdFRlc3RSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5o
IgpAQCAtNDUsNyArNDYsNiBAQAogI2luY2x1ZGUgIlNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0
LmgiCiAjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtTGlzdC5oIgogI2luY2x1ZGUgIlNWR1VSSVJlZmVy
ZW5jZS5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3Jt
U3RhdGUuaCIKICNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24uaCIKICNpbmNsdWRlIDx3dGYvU3Rh
Y2tTdGF0cy5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVU
ZXh0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R0lubGluZVRleHRCb3guY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTks
NyArNDE5LDcgQEAgVGV4dFJ1biBTVkdJbmxpbmVUZXh0Qm94Ojpjb25zdHJ1Y3RUZXh0UgogICAg
ICAgICAgICAgICAgICwgZGlyZWN0aW9uKCkKICAgICAgICAgICAgICAgICAsIGRpck92ZXJyaWRl
KCkgfHwgc3R5bGUtPnJ0bE9yZGVyaW5nKCkgPT0gVmlzdWFsT3JkZXIgLyogZGlyZWN0aW9uYWxP
dmVycmlkZSAqLyk7CiAKLSAgICBpZiAoc3R5bGUtPmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnRE
YXRhKCkuaXNTVkdGb250KCkpCisgICAgaWYgKHN0eWxlLT5mb250Q2FzY2FkZSgpLnByaW1hcnlG
b250KCkuaXNTVkdGb250KCkpCiAgICAgICAgIHJ1bi5zZXRSZW5kZXJpbmdDb250ZXh0KFNWR1Rl
eHRSdW5SZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUocmVuZGVyZXIoKSkpOwogCiAgICAgcnVuLmRp
c2FibGVSb3VuZGluZ0hhY2tzKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nLmNwcAkocmV2aXNp
b24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0
RW5naW5lU3BhY2luZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDE2ICs0MSwxNiBAQCBTVkdU
ZXh0TGF5b3V0RW5naW5lU3BhY2luZzo6U1ZHVGV4dExheW91CiBmbG9hdCBTVkdUZXh0TGF5b3V0
RW5naW5lU3BhY2luZzo6Y2FsY3VsYXRlU1ZHS2VybmluZyhib29sIGlzVmVydGljYWxUZXh0LCBj
b25zdCBTVkdUZXh0TWV0cmljczo6R2x5cGgmIGN1cnJlbnRHbHlwaCkKIHsKICNpZiBFTkFCTEUo
U1ZHX0ZPTlRTKQotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhJiBmb250RGF0YSA9IG1fZm9udC5w
cmltYXJ5Rm9udERhdGEoKTsKLSAgICBpZiAoIWZvbnREYXRhLmlzU1ZHRm9udCgpKSB7CisgICAg
Y29uc3QgRm9udCYgZm9udCA9IG1fZm9udC5wcmltYXJ5Rm9udCgpOworICAgIGlmICghZm9udC5p
c1NWR0ZvbnQoKSkgewogICAgICAgICBtX2xhc3RHbHlwaC5pc1ZhbGlkID0gZmFsc2U7CiAgICAg
ICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIEFTU0VSVChmb250RGF0YS5pc0N1c3RvbUZvbnQo
KSk7Ci0gICAgQVNTRVJUKGZvbnREYXRhLmlzU1ZHRm9udCgpKTsKKyAgICBBU1NFUlQoZm9udC5p
c0N1c3RvbUZvbnQoKSk7CisgICAgQVNTRVJUKGZvbnQuaXNTVkdGb250KCkpOwogCi0gICAgYXV0
byogc3ZnRm9udERhdGEgPSBzdGF0aWNfY2FzdDxjb25zdCBTVkdGb250RGF0YSo+KGZvbnREYXRh
LnN2Z0RhdGEoKSk7CisgICAgYXV0byogc3ZnRm9udERhdGEgPSBzdGF0aWNfY2FzdDxjb25zdCBT
VkdGb250RGF0YSo+KGZvbnQuc3ZnRGF0YSgpKTsKICAgICBTVkdGb250RmFjZUVsZW1lbnQqIHN2
Z0ZvbnRGYWNlID0gc3ZnRm9udERhdGEtPnN2Z0ZvbnRGYWNlRWxlbWVudCgpOwogICAgIEFTU0VS
VChzdmdGb250RmFjZSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
VGV4dE1ldHJpY3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHVGV4dE1ldHJpY3MuY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAs
NyArNzAsNyBAQCBUZXh0UnVuIFNWR1RleHRNZXRyaWNzOjpjb25zdHJ1Y3RUZXh0UnVuCiAgICAg
ICAgICAgICAgICAgLCBzdHlsZS5kaXJlY3Rpb24oKQogICAgICAgICAgICAgICAgICwgaXNPdmVy
cmlkZShzdHlsZS51bmljb2RlQmlkaSgpKSAvKiBkaXJlY3Rpb25hbE92ZXJyaWRlICovKTsKIAot
ICAgIGlmIChzdHlsZS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmlzU1ZHRm9udCgp
KQorICAgIGlmIChzdHlsZS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCkuaXNTVkdGb250KCkp
CiAgICAgICAgIHJ1bi5zZXRSZW5kZXJpbmdDb250ZXh0KFNWR1RleHRSdW5SZW5kZXJpbmdDb250
ZXh0OjpjcmVhdGUodGV4dCkpOwogCiAgICAgcnVuLmRpc2FibGVSb3VuZGluZ0hhY2tzKCk7CkBA
IC05MSw3ICs5MSw3IEBAIFNWR1RleHRNZXRyaWNzIFNWR1RleHRNZXRyaWNzOjptZWFzdXJlQ2gK
IAogU1ZHVGV4dE1ldHJpY3M6OlNWR1RleHRNZXRyaWNzKFJlbmRlclNWR0lubGluZVRleHQmIHRl
eHQsIHVuc2lnbmVkIHBvc2l0aW9uLCB1bnNpZ25lZCBsZW5ndGgsIGZsb2F0IHdpZHRoLCBjb25z
dCBTdHJpbmcmIGdseXBoTmFtZSkKIHsKLSAgICBib29sIG5lZWRzQ29udGV4dCA9IHRleHQuc3R5
bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmlzU1ZHRm9udCgpOworICAgIGJv
b2wgbmVlZHNDb250ZXh0ID0gdGV4dC5zdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQo
KS5pc1NWR0ZvbnQoKTsKICAgICBmbG9hdCBzY2FsaW5nRmFjdG9yID0gdGV4dC5zY2FsaW5nRmFj
dG9yKCk7CiAgICAgQVNTRVJUKHNjYWxpbmdGYWN0b3IpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250
ZXh0LmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDE4
ICszNywxOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBpbmxpbmUgY29uc3Qg
U1ZHRm9udERhdGEqIHN2Z0ZvbnRBbmRGb250RmFjZUVsZW1lbnRGb3JGb250RGF0YShjb25zdCBT
aW1wbGVGb250RGF0YSogZm9udERhdGEsIFNWR0ZvbnRGYWNlRWxlbWVudComIGZvbnRGYWNlLCBT
VkdGb250RWxlbWVudComIGZvbnQpCitzdGF0aWMgaW5saW5lIGNvbnN0IFNWR0ZvbnREYXRhKiBz
dmdGb250QW5kRm9udEZhY2VFbGVtZW50Rm9yRm9udERhdGEoY29uc3QgRm9udCogZm9udCwgU1ZH
Rm9udEZhY2VFbGVtZW50KiYgc3ZnRm9udEZhY2VFbGVtZW50LCBTVkdGb250RWxlbWVudComIHN2
Z0ZvbnRFbGVtZW50KQogewotICAgIEFTU0VSVChmb250RGF0YSk7Ci0gICAgQVNTRVJUKGZvbnRE
YXRhLT5pc0N1c3RvbUZvbnQoKSk7Ci0gICAgQVNTRVJUKGZvbnREYXRhLT5pc1NWR0ZvbnQoKSk7
CisgICAgQVNTRVJUKGZvbnQpOworICAgIEFTU0VSVChmb250LT5pc0N1c3RvbUZvbnQoKSk7Cisg
ICAgQVNTRVJUKGZvbnQtPmlzU1ZHRm9udCgpKTsKIAotICAgIGF1dG8qIHN2Z0ZvbnREYXRhID0g
c3RhdGljX2Nhc3Q8Y29uc3QgU1ZHRm9udERhdGEqPihmb250RGF0YS0+c3ZnRGF0YSgpKTsKKyAg
ICBhdXRvKiBzdmdGb250RGF0YSA9IHN0YXRpY19jYXN0PGNvbnN0IFNWR0ZvbnREYXRhKj4oZm9u
dC0+c3ZnRGF0YSgpKTsKIAotICAgIGZvbnRGYWNlID0gc3ZnRm9udERhdGEtPnN2Z0ZvbnRGYWNl
RWxlbWVudCgpOwotICAgIEFTU0VSVChmb250RmFjZSk7CisgICAgc3ZnRm9udEZhY2VFbGVtZW50
ID0gc3ZnRm9udERhdGEtPnN2Z0ZvbnRGYWNlRWxlbWVudCgpOworICAgIEFTU0VSVChzdmdGb250
RmFjZUVsZW1lbnQpOwogCi0gICAgZm9udCA9IGZvbnRGYWNlLT5hc3NvY2lhdGVkRm9udEVsZW1l
bnQoKTsKKyAgICBzdmdGb250RWxlbWVudCA9IHN2Z0ZvbnRGYWNlRWxlbWVudC0+YXNzb2NpYXRl
ZEZvbnRFbGVtZW50KCk7CiAgICAgcmV0dXJuIHN2Z0ZvbnREYXRhOwogfQogCkBAIC02MSwyMSAr
NjEsMjEgQEAgZmxvYXQgU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmZsb2F0VwogICAgIHJl
dHVybiBpdC5ydW5XaWR0aFNvRmFyKCk7CiB9CiAKLWJvb2wgU1ZHVGV4dFJ1blJlbmRlcmluZ0Nv
bnRleHQ6OmFwcGx5U1ZHS2VybmluZyhjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsIFdp
ZHRoSXRlcmF0b3ImIGl0ZXJhdG9yLCBHbHlwaEJ1ZmZlciogZ2x5cGhCdWZmZXIsIGludCBmcm9t
KSBjb25zdAorYm9vbCBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6YXBwbHlTVkdLZXJuaW5n
KGNvbnN0IEZvbnQqIGZvbnQsIFdpZHRoSXRlcmF0b3ImIGl0ZXJhdG9yLCBHbHlwaEJ1ZmZlciog
Z2x5cGhCdWZmZXIsIGludCBmcm9tKSBjb25zdAogewogICAgIEFTU0VSVChnbHlwaEJ1ZmZlcik7
CiAgICAgQVNTRVJUKGdseXBoQnVmZmVyLT5zaXplKCkgPiAxKTsKICAgICBTVkdGb250RWxlbWVu
dCogZm9udEVsZW1lbnQgPSAwOwogICAgIFNWR0ZvbnRGYWNlRWxlbWVudCogZm9udEZhY2VFbGVt
ZW50ID0gMDsKIAotICAgIHN2Z0ZvbnRBbmRGb250RmFjZUVsZW1lbnRGb3JGb250RGF0YShmb250
RGF0YSwgZm9udEZhY2VFbGVtZW50LCBmb250RWxlbWVudCk7CisgICAgc3ZnRm9udEFuZEZvbnRG
YWNlRWxlbWVudEZvckZvbnREYXRhKGZvbnQsIGZvbnRGYWNlRWxlbWVudCwgZm9udEVsZW1lbnQp
OwogICAgIGlmICghZm9udEVsZW1lbnQgfHwgIWZvbnRGYWNlRWxlbWVudCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgaWYgKGZvbnRFbGVtZW50LT5ob3Jpem9udGFsS2VybmluZ01hcElz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBmbG9hdCBzY2FsZSA9IHNjYWxl
RW1Ub1VuaXRzKGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5zaXplKCksIGZvbnRGYWNlRWxlbWVu
dC0+dW5pdHNQZXJFbSgpKTsKKyAgICBmbG9hdCBzY2FsZSA9IHNjYWxlRW1Ub1VuaXRzKGZvbnQt
PnBsYXRmb3JtRGF0YSgpLnNpemUoKSwgZm9udEZhY2VFbGVtZW50LT51bml0c1BlckVtKCkpOwog
CiAgICAgU3RyaW5nIGxhc3RHbHlwaE5hbWU7CiAgICAgU3RyaW5nIGxhc3RVbmljb2RlU3RyaW5n
OwpAQCAtMjA1LDcgKzIwNSw3IEBAIHZvaWQgU1ZHR2x5cGhUb1BhdGhUcmFuc2xhdG9yOjphZHZh
bmNlKCkKICAgICAgICAgfQogCiAgICAgICAgICsrbV9pbmRleDsKLSAgICAgICAgaWYgKG1faW5k
ZXggPj0gbV9zdG9wcGluZ1BvaW50IHx8ICFtX2dseXBoQnVmZmVyLmZvbnREYXRhQXQobV9pbmRl
eCktPmlzU1ZHRm9udCgpKQorICAgICAgICBpZiAobV9pbmRleCA+PSBtX3N0b3BwaW5nUG9pbnQg
fHwgIW1fZ2x5cGhCdWZmZXIuZm9udEF0KG1faW5kZXgpLT5pc1NWR0ZvbnQoKSkKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBtX2dseXBoID0gbV9nbHlwaEJ1ZmZlci5nbHlwaEF0KG1faW5k
ZXgpOwogICAgICAgICBpZiAoIW1fZ2x5cGgpCkBAIC0yNDQsMTIgKzI0NCwxMiBAQCBjbGFzcyBE
dW1teUdseXBoVG9QYXRoVHJhbnNsYXRvciBmaW5hbCA6CiAgICAgfQogfTsKIAotc3RkOjp1bmlx
dWVfcHRyPEdseXBoVG9QYXRoVHJhbnNsYXRvcj4gU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6
OmNyZWF0ZUdseXBoVG9QYXRoVHJhbnNsYXRvcihjb25zdCBTaW1wbGVGb250RGF0YSYgZm9udERh
dGEsIGNvbnN0IFRleHRSdW4qIHRleHRSdW4sIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZl
ciwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25z
dAorc3RkOjp1bmlxdWVfcHRyPEdseXBoVG9QYXRoVHJhbnNsYXRvcj4gU1ZHVGV4dFJ1blJlbmRl
cmluZ0NvbnRleHQ6OmNyZWF0ZUdseXBoVG9QYXRoVHJhbnNsYXRvcihjb25zdCBGb250JiBmb250
LCBjb25zdCBUZXh0UnVuKiB0ZXh0UnVuLCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIs
IGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QK
IHsKICAgICBTVkdGb250RWxlbWVudCogZm9udEVsZW1lbnQgPSBudWxscHRyOwogICAgIFNWR0Zv
bnRGYWNlRWxlbWVudCogZm9udEZhY2VFbGVtZW50ID0gbnVsbHB0cjsKIAotICAgIGNvbnN0IFNW
R0ZvbnREYXRhKiBzdmdGb250RGF0YSA9IHN2Z0ZvbnRBbmRGb250RmFjZUVsZW1lbnRGb3JGb250
RGF0YSgmZm9udERhdGEsIGZvbnRGYWNlRWxlbWVudCwgZm9udEVsZW1lbnQpOworICAgIGNvbnN0
IFNWR0ZvbnREYXRhKiBzdmdGb250RGF0YSA9IHN2Z0ZvbnRBbmRGb250RmFjZUVsZW1lbnRGb3JG
b250RGF0YSgmZm9udCwgZm9udEZhY2VFbGVtZW50LCBmb250RWxlbWVudCk7CiAgICAgaWYgKCFm
b250RWxlbWVudCB8fCAhZm9udEZhY2VFbGVtZW50KQogICAgICAgICByZXR1cm4gc3RkOjptYWtl
X3VuaXF1ZTxEdW1teUdseXBoVG9QYXRoVHJhbnNsYXRvcj4oKTsKIApAQCAtMjU3LDEyICsyNTcs
MTIgQEAgc3RkOjp1bmlxdWVfcHRyPEdseXBoVG9QYXRoVHJhbnNsYXRvcj4gUwogICAgIFJlbmRl
clN0eWxlJiBzdHlsZSA9IGVsZW1lbnRSZW5kZXJlci5zdHlsZSgpOwogICAgIGJvb2wgaXNWZXJ0
aWNhbFRleHQgPSBzdHlsZS5zdmdTdHlsZSgpLmlzVmVydGljYWxXcml0aW5nTW9kZSgpOwogCi0g
ICAgZmxvYXQgc2NhbGUgPSBzY2FsZUVtVG9Vbml0cyhmb250RGF0YS5wbGF0Zm9ybURhdGEoKS5z
aXplKCksIGZvbnRGYWNlRWxlbWVudC0+dW5pdHNQZXJFbSgpKTsKKyAgICBmbG9hdCBzY2FsZSA9
IHNjYWxlRW1Ub1VuaXRzKGZvbnQucGxhdGZvcm1EYXRhKCkuc2l6ZSgpLCBmb250RmFjZUVsZW1l
bnQtPnVuaXRzUGVyRW0oKSk7CiAKICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxTVkdHbHlw
aFRvUGF0aFRyYW5zbGF0b3I+KHRleHRSdW4sIGdseXBoQnVmZmVyLCBwb2ludCwgKnN2Z0ZvbnRE
YXRhLCAqZm9udEVsZW1lbnQsIGZyb20sIG51bUdseXBocywgc2NhbGUsIGlzVmVydGljYWxUZXh0
KTsKIH0KIAotdm9pZCBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6ZHJhd1NWR0dseXBocyhH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwg
Y29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Cit2b2lkIFNWR1RleHRSdW5SZW5kZXJpbmdD
b250ZXh0OjpkcmF3U1ZHR2x5cGhzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRm9u
dCogZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBpbnQgZnJvbSwgaW50IG51
bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0CiB7CiAgICAgYXV0byBhY3Rp
dmVQYWludGluZ1Jlc291cmNlID0gdGhpcy0+YWN0aXZlUGFpbnRpbmdSZXNvdXJjZSgpOwogICAg
IGlmICghYWN0aXZlUGFpbnRpbmdSZXNvdXJjZSkgewpAQCAtMjc4LDcgKzI3OCw3IEBAIHZvaWQg
U1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmRyYXdTVkcKICAgICBBU1NFUlQoYWN0aXZlUGFp
bnRpbmdSZXNvdXJjZSk7CiAKICAgICBSZW5kZXJTVkdSZXNvdXJjZU1vZGUgcmVzb3VyY2VNb2Rl
ID0gY29udGV4dC0+dGV4dERyYXdpbmdNb2RlKCkgPT0gVGV4dE1vZGVTdHJva2UgPyBBcHBseVRv
U3Ryb2tlTW9kZSA6IEFwcGx5VG9GaWxsTW9kZTsKLSAgICBmb3IgKGF1dG8gdHJhbnNsYXRvciA9
IGNyZWF0ZUdseXBoVG9QYXRoVHJhbnNsYXRvcigqZm9udERhdGEsIG51bGxwdHIsIGdseXBoQnVm
ZmVyLCBmcm9tLCBudW1HbHlwaHMsIHBvaW50KTsgdHJhbnNsYXRvci0+Y29udGFpbnNNb3JlUGF0
aHMoKTsgdHJhbnNsYXRvci0+YWR2YW5jZSgpKSB7CisgICAgZm9yIChhdXRvIHRyYW5zbGF0b3Ig
PSBjcmVhdGVHbHlwaFRvUGF0aFRyYW5zbGF0b3IoKmZvbnQsIG51bGxwdHIsIGdseXBoQnVmZmVy
LCBmcm9tLCBudW1HbHlwaHMsIHBvaW50KTsgdHJhbnNsYXRvci0+Y29udGFpbnNNb3JlUGF0aHMo
KTsgdHJhbnNsYXRvci0+YWR2YW5jZSgpKSB7CiAgICAgICAgIFBhdGggZ2x5cGhQYXRoID0gdHJh
bnNsYXRvci0+cGF0aCgpOwogICAgICAgICBpZiAoYWN0aXZlUGFpbnRpbmdSZXNvdXJjZS0+YXBw
bHlSZXNvdXJjZShlbGVtZW50UmVuZGVyZXIsIHN0eWxlLCBjb250ZXh0LCByZXNvdXJjZU1vZGUp
KSB7CiAgICAgICAgICAgICBmbG9hdCBzdHJva2VUaGlja25lc3MgPSBjb250ZXh0LT5zdHJva2VU
aGlja25lc3MoKTsKQEAgLTI5MiwxMyArMjkyLDEzIEBAIHZvaWQgU1ZHVGV4dFJ1blJlbmRlcmlu
Z0NvbnRleHQ6OmRyYXdTVkcKIAogc3RhdGljIEdseXBoRGF0YSBtaXNzaW5nR2x5cGhGb3JGb250
KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250KQogewotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhJiBw
cmltYXJ5Rm9udERhdGEgPSBmb250LnByaW1hcnlGb250RGF0YSgpOwotICAgIGlmICghcHJpbWFy
eUZvbnREYXRhLmlzU1ZHRm9udCgpKQorICAgIGNvbnN0IEZvbnQmIHByaW1hcnlGb250ID0gZm9u
dC5wcmltYXJ5Rm9udCgpOworICAgIGlmICghcHJpbWFyeUZvbnQuaXNTVkdGb250KCkpCiAgICAg
ICAgIHJldHVybiBHbHlwaERhdGEoKTsKICAgICBTVkdGb250RWxlbWVudCogZm9udEVsZW1lbnQ7
CiAgICAgU1ZHRm9udEZhY2VFbGVtZW50KiBmb250RmFjZUVsZW1lbnQ7Ci0gICAgc3ZnRm9udEFu
ZEZvbnRGYWNlRWxlbWVudEZvckZvbnREYXRhKCZwcmltYXJ5Rm9udERhdGEsIGZvbnRGYWNlRWxl
bWVudCwgZm9udEVsZW1lbnQpOwotICAgIHJldHVybiBHbHlwaERhdGEoZm9udEVsZW1lbnQtPm1p
c3NpbmdHbHlwaCgpLCAmcHJpbWFyeUZvbnREYXRhKTsKKyAgICBzdmdGb250QW5kRm9udEZhY2VF
bGVtZW50Rm9yRm9udERhdGEoJnByaW1hcnlGb250LCBmb250RmFjZUVsZW1lbnQsIGZvbnRFbGVt
ZW50KTsKKyAgICByZXR1cm4gR2x5cGhEYXRhKGZvbnRFbGVtZW50LT5taXNzaW5nR2x5cGgoKSwg
JnByaW1hcnlGb250KTsKIH0KIAogR2x5cGhEYXRhIFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0
OjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIFdpZHRoSXRl
cmF0b3ImIGl0ZXJhdG9yLCBVQ2hhcjMyIGNoYXJhY3RlciwgYm9vbCBtaXJyb3IsIGludCBjdXJy
ZW50Q2hhcmFjdGVyLCB1bnNpZ25lZCYgYWR2YW5jZUxlbmd0aCwgU3RyaW5nJiBub3JtYWxpemVk
U3BhY2VzU3RyaW5nQ2FjaGUpCkBAIC0zMDcsMjMgKzMwNywyMyBAQCBHbHlwaERhdGEgU1ZHVGV4
dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmdsCiAgICAgaWYgKCFnbHlwaERhdGEuZ2x5cGgpCiAgICAg
ICAgIHJldHVybiBtaXNzaW5nR2x5cGhGb3JGb250KGZvbnQpOwogCi0gICAgQVNTRVJUKGdseXBo
RGF0YS5mb250RGF0YSk7CisgICAgQVNTRVJUKGdseXBoRGF0YS5mb250KTsKIAogICAgIC8vIENo
YXJhY3RlcnMgZW5jbG9zZWQgYnkgYW4gPGFsdEdseXBoPiBlbGVtZW50LCBtYXkgbm90IGJlIHJl
Z2lzdGVyZWQgaW4gdGhlIEdseXBoUGFnZS4KLSAgICBpZiAoIWdseXBoRGF0YS5mb250RGF0YS0+
aXNTVkdGb250KCkpIHsKKyAgICBpZiAoIWdseXBoRGF0YS5mb250LT5pc1NWR0ZvbnQoKSkgewog
ICAgICAgICBhdXRvJiBlbGVtZW50UmVuZGVyZXIgPSBpczxSZW5kZXJFbGVtZW50PihyZW5kZXJl
cigpKSA/IGRvd25jYXN0PFJlbmRlckVsZW1lbnQ+KHJlbmRlcmVyKCkpIDogKnJlbmRlcmVyKCku
cGFyZW50KCk7CiAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRSZW5kZXJlckVsZW1lbnQgPSBl
bGVtZW50UmVuZGVyZXIuZWxlbWVudCgpKSB7CiAgICAgICAgICAgICBpZiAoaXM8U1ZHQWx0R2x5
cGhFbGVtZW50PigqcGFyZW50UmVuZGVyZXJFbGVtZW50KSkKLSAgICAgICAgICAgICAgICBnbHlw
aERhdGEuZm9udERhdGEgPSAmZm9udC5wcmltYXJ5Rm9udERhdGEoKTsKKyAgICAgICAgICAgICAg
ICBnbHlwaERhdGEuZm9udCA9ICZmb250LnByaW1hcnlGb250KCk7CiAgICAgICAgIH0KICAgICB9
CiAKLSAgICBpZiAoIWdseXBoRGF0YS5mb250RGF0YS0+aXNTVkdGb250KCkpCisgICAgaWYgKCFn
bHlwaERhdGEuZm9udC0+aXNTVkdGb250KCkpCiAgICAgICAgIHJldHVybiBnbHlwaERhdGE7CiAK
ICAgICBTVkdGb250RWxlbWVudCogZm9udEVsZW1lbnQgPSBudWxscHRyOwogICAgIFNWR0ZvbnRG
YWNlRWxlbWVudCogZm9udEZhY2VFbGVtZW50ID0gbnVsbHB0cjsKLSAgICBjb25zdCBTVkdGb250
RGF0YSogc3ZnRm9udERhdGEgPSBzdmdGb250QW5kRm9udEZhY2VFbGVtZW50Rm9yRm9udERhdGEo
Z2x5cGhEYXRhLmZvbnREYXRhLCBmb250RmFjZUVsZW1lbnQsIGZvbnRFbGVtZW50KTsKKyAgICBj
b25zdCBTVkdGb250RGF0YSogc3ZnRm9udERhdGEgPSBzdmdGb250QW5kRm9udEZhY2VFbGVtZW50
Rm9yRm9udERhdGEoZ2x5cGhEYXRhLmZvbnQsIGZvbnRGYWNlRWxlbWVudCwgZm9udEVsZW1lbnQp
OwogICAgIGlmICghc3ZnRm9udERhdGEpCiAgICAgICAgIHJldHVybiBnbHlwaERhdGE7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRl
eHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRS
dW5SZW5kZXJpbmdDb250ZXh0LmgJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuaAkod29ya2luZyBjb3B5
KQpAQCAtNDMsOSArNDMsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRBY3RpdmVQYWludGluZ1Jl
c291cmNlKFJlbmRlclNWR1Jlc291cmNlKiBvYmplY3QpIHsgbV9hY3RpdmVQYWludGluZ1Jlc291
cmNlID0gb2JqZWN0OyB9CiAKICAgICB2aXJ0dWFsIEdseXBoRGF0YSBnbHlwaERhdGFGb3JDaGFy
YWN0ZXIoY29uc3QgRm9udENhc2NhZGUmLCBXaWR0aEl0ZXJhdG9yJiwgVUNoYXIzMiBjaGFyYWN0
ZXIsIGJvb2wgbWlycm9yLCBpbnQgY3VycmVudENoYXJhY3RlciwgdW5zaWduZWQmIGFkdmFuY2VM
ZW5ndGgsIFN0cmluZyYgbm9ybWFsaXplZFNwYWNlc1N0cmluZ0NhY2hlKSBvdmVycmlkZTsKLSAg
ICB2aXJ0dWFsIHZvaWQgZHJhd1NWR0dseXBocyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBTaW1w
bGVGb250RGF0YSosIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCB0bywgY29uc3Qg
RmxvYXRQb2ludCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkcmF3U1ZHR2x5
cGhzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZvbnQqLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGlu
dCBmcm9tLCBpbnQgdG8sIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdCBvdmVycmlkZTsKICAgICB2
aXJ0dWFsIGZsb2F0IGZsb2F0V2lkdGhVc2luZ1NWR0ZvbnQoY29uc3QgRm9udENhc2NhZGUmLCBj
b25zdCBUZXh0UnVuJiwgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcmIGdseXBoTmFtZSkgY29u
c3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIGFwcGx5U1ZHS2VybmluZyhjb25zdCBTaW1w
bGVGb250RGF0YSosIFdpZHRoSXRlcmF0b3ImLCBHbHlwaEJ1ZmZlciosIGludCBmcm9tKSBjb25z
dCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgYXBwbHlTVkdLZXJuaW5nKGNvbnN0IEZvbnQq
LCBXaWR0aEl0ZXJhdG9yJiwgR2x5cGhCdWZmZXIqLCBpbnQgZnJvbSkgY29uc3Qgb3ZlcnJpZGU7
CiAjZW5kaWYKIAogcHJpdmF0ZToKQEAgLTYwLDcgKzYwLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0
dWFsIH5TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dCgpIHsgfQogCiAjaWYgRU5BQkxFKFNWR19G
T05UUykKLSAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxHbHlwaFRvUGF0aFRyYW5zbGF0b3I+
IGNyZWF0ZUdseXBoVG9QYXRoVHJhbnNsYXRvcihjb25zdCBTaW1wbGVGb250RGF0YSYsIGNvbnN0
IFRleHRSdW4qLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBj
b25zdCBGbG9hdFBvaW50JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBzdGQ6OnVuaXF1
ZV9wdHI8R2x5cGhUb1BhdGhUcmFuc2xhdG9yPiBjcmVhdGVHbHlwaFRvUGF0aFRyYW5zbGF0b3Io
Y29uc3QgRm9udCYsIGNvbnN0IFRleHRSdW4qLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBmcm9t
LCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Qgb3ZlcnJpZGU7CiAjZW5k
aWYKIAogICAgIFJlbmRlck9iamVjdCYgbV9yZW5kZXJlcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGb250RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZvbnREYXRhLmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZvbnREYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsMTUgKzU3LDE1IEBAIFNWR0ZvbnRE
YXRhOjpTVkdGb250RGF0YShTVkdGb250RmFjZUVsZW0KICAgICBBU1NFUlRfQVJHKGZvbnRGYWNl
RWxlbWVudCwgZm9udEZhY2VFbGVtZW50KTsKIH0KIAotdm9pZCBTVkdGb250RGF0YTo6aW5pdGlh
bGl6ZUZvbnREYXRhKFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwgZmxvYXQgZm9udFNpemUpCit2
b2lkIFNWR0ZvbnREYXRhOjppbml0aWFsaXplRm9udChGb250KiBmb250LCBmbG9hdCBmb250U2l6
ZSkKIHsKLSAgICBBU1NFUlQoZm9udERhdGEpOworICAgIEFTU0VSVChmb250KTsKIAogICAgIFNW
R0ZvbnRGYWNlRWxlbWVudCogc3ZnRm9udEZhY2VFbGVtZW50ID0gdGhpcy0+c3ZnRm9udEZhY2VF
bGVtZW50KCk7CiAgICAgQVNTRVJUKHN2Z0ZvbnRGYWNlRWxlbWVudCk7CiAKLSAgICBmb250RGF0
YS0+c2V0WmVyb1dpZHRoU3BhY2VHbHlwaCgwKTsKLSAgICBmb250RGF0YS0+ZGV0ZXJtaW5lUGl0
Y2goKTsKKyAgICBmb250LT5zZXRaZXJvV2lkdGhTcGFjZUdseXBoKDApOworICAgIGZvbnQtPmRl
dGVybWluZVBpdGNoKCk7CiAKICAgICB1bnNpZ25lZCB1bml0c1BlckVtID0gc3ZnRm9udEZhY2VF
bGVtZW50LT51bml0c1BlckVtKCk7CiAgICAgZmxvYXQgc2NhbGUgPSBzY2FsZUVtVG9Vbml0cyhm
b250U2l6ZSwgdW5pdHNQZXJFbSk7CkBAIC03NCwxNSArNzQsMTUgQEAgdm9pZCBTVkdGb250RGF0
YTo6aW5pdGlhbGl6ZUZvbnREYXRhKFNpbQogICAgIGZsb2F0IGRlc2NlbnQgPSBzdmdGb250RmFj
ZUVsZW1lbnQtPmRlc2NlbnQoKSAqIHNjYWxlOwogICAgIGZsb2F0IGxpbmVHYXAgPSAwLjFmICog
Zm9udFNpemU7CiAKLSAgICBjb25zdCBHbHlwaFBhZ2UqIGdseXBoUGFnZVplcm8gPSBmb250RGF0
YS0+Z2x5cGhQYWdlKDApOworICAgIGNvbnN0IEdseXBoUGFnZSogZ2x5cGhQYWdlWmVybyA9IGZv
bnQtPmdseXBoUGFnZSgwKTsKIAogICAgIGlmICgheEhlaWdodCAmJiBnbHlwaFBhZ2VaZXJvKSB7
CiAgICAgICAgIC8vIEZhbGxiYWNrIGlmIHhfaGVpZ2h0QXR0ciBpcyBub3Qgc3BlY2lmaWVkIGZv
ciB0aGUgZm9udCBlbGVtZW50LgogICAgICAgICBHbHlwaCBsZXR0ZXJYR2x5cGggPSBnbHlwaFBh
Z2VaZXJvLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoJ3gnKS5nbHlwaDsKLSAgICAgICAgeEhlaWdo
dCA9IGxldHRlclhHbHlwaCA/IGZvbnREYXRhLT53aWR0aEZvckdseXBoKGxldHRlclhHbHlwaCkg
OiAyICogYXNjZW50IC8gMzsKKyAgICAgICAgeEhlaWdodCA9IGxldHRlclhHbHlwaCA/IGZvbnQt
PndpZHRoRm9yR2x5cGgobGV0dGVyWEdseXBoKSA6IDIgKiBhc2NlbnQgLyAzOwogICAgIH0KIAot
ICAgIEZvbnRNZXRyaWNzJiBmb250TWV0cmljcyA9IGZvbnREYXRhLT5mb250TWV0cmljcygpOwor
ICAgIEZvbnRNZXRyaWNzJiBmb250TWV0cmljcyA9IGZvbnQtPmZvbnRNZXRyaWNzKCk7CiAgICAg
Zm9udE1ldHJpY3Muc2V0VW5pdHNQZXJFbSh1bml0c1BlckVtKTsKICAgICBmb250TWV0cmljcy5z
ZXRBc2NlbnQoYXNjZW50KTsKICAgICBmb250TWV0cmljcy5zZXREZXNjZW50KGRlc2NlbnQpOwpA
QCAtOTEsMjUgKzkxLDI1IEBAIHZvaWQgU1ZHRm9udERhdGE6OmluaXRpYWxpemVGb250RGF0YShT
aW0KICAgICBmb250TWV0cmljcy5zZXRYSGVpZ2h0KHhIZWlnaHQpOwogCiAgICAgaWYgKCFnbHlw
aFBhZ2VaZXJvKSB7Ci0gICAgICAgIGZvbnREYXRhLT5zZXRTcGFjZUdseXBoKDApOwotICAgICAg
ICBmb250RGF0YS0+c2V0U3BhY2VXaWR0aHMoMCk7Ci0gICAgICAgIGZvbnREYXRhLT5zZXRBdmdD
aGFyV2lkdGgoMCk7Ci0gICAgICAgIGZvbnREYXRhLT5zZXRNYXhDaGFyV2lkdGgoYXNjZW50KTsK
KyAgICAgICAgZm9udC0+c2V0U3BhY2VHbHlwaCgwKTsKKyAgICAgICAgZm9udC0+c2V0U3BhY2VX
aWR0aHMoMCk7CisgICAgICAgIGZvbnQtPnNldEF2Z0NoYXJXaWR0aCgwKTsKKyAgICAgICAgZm9u
dC0+c2V0TWF4Q2hhcldpZHRoKGFzY2VudCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAg
ICAvLyBDYWxjdWxhdGUgc3BhY2Ugd2lkdGguCiAgICAgR2x5cGggc3BhY2VHbHlwaCA9IGdseXBo
UGFnZVplcm8tPmdseXBoRGF0YUZvckNoYXJhY3RlcignICcpLmdseXBoOwotICAgIGZvbnREYXRh
LT5zZXRTcGFjZUdseXBoKHNwYWNlR2x5cGgpOwotICAgIGZvbnREYXRhLT5zZXRTcGFjZVdpZHRo
cyhmb250RGF0YS0+d2lkdGhGb3JHbHlwaChzcGFjZUdseXBoKSk7CisgICAgZm9udC0+c2V0U3Bh
Y2VHbHlwaChzcGFjZUdseXBoKTsKKyAgICBmb250LT5zZXRTcGFjZVdpZHRocyhmb250LT53aWR0
aEZvckdseXBoKHNwYWNlR2x5cGgpKTsKIAogICAgIC8vIEVzdGltYXRlIGF2ZXJhZ2UgY2hhcmFj
dGVyIHdpZHRoLgogICAgIEdseXBoIG51bWVyYWxaZXJvR2x5cGggPSBnbHlwaFBhZ2VaZXJvLT5n
bHlwaERhdGFGb3JDaGFyYWN0ZXIoJzAnKS5nbHlwaDsKLSAgICBmb250RGF0YS0+c2V0QXZnQ2hh
cldpZHRoKG51bWVyYWxaZXJvR2x5cGggPyBmb250RGF0YS0+d2lkdGhGb3JHbHlwaChudW1lcmFs
WmVyb0dseXBoKSA6IGZvbnREYXRhLT5zcGFjZVdpZHRoKCkpOworICAgIGZvbnQtPnNldEF2Z0No
YXJXaWR0aChudW1lcmFsWmVyb0dseXBoID8gZm9udC0+d2lkdGhGb3JHbHlwaChudW1lcmFsWmVy
b0dseXBoKSA6IGZvbnQtPnNwYWNlV2lkdGgoKSk7CiAKICAgICAvLyBFc3RpbWF0ZSBtYXhpbXVt
IGNoYXJhY3RlciB3aWR0aC4KICAgICBHbHlwaCBsZXR0ZXJXR2x5cGggPSBnbHlwaFBhZ2VaZXJv
LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoJ1cnKS5nbHlwaDsKLSAgICBmb250RGF0YS0+c2V0TWF4
Q2hhcldpZHRoKGxldHRlcldHbHlwaCA/IGZvbnREYXRhLT53aWR0aEZvckdseXBoKGxldHRlcldH
bHlwaCkgOiBhc2NlbnQpOworICAgIGZvbnQtPnNldE1heENoYXJXaWR0aChsZXR0ZXJXR2x5cGgg
PyBmb250LT53aWR0aEZvckdseXBoKGxldHRlcldHbHlwaCkgOiBhc2NlbnQpOwogfQogCiBmbG9h
dCBTVkdGb250RGF0YTo6d2lkdGhGb3JTVkdHbHlwaChHbHlwaCBnbHlwaCwgZmxvYXQgZm9udFNp
emUpIGNvbnN0CkBAIC0yMDgsMTAgKzIwOCwxMCBAQCBib29sIFNWR0ZvbnREYXRhOjphcHBseVNW
R0dseXBoU2VsZWN0aW9uCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFNWR0ZvbnREYXRh
OjpmaWxsU1ZHR2x5cGhQYWdlKEdseXBoUGFnZSogcGFnZVRvRmlsbCwgdW5zaWduZWQgb2Zmc2V0
LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwg
Y29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKSBjb25zdAorYm9vbCBTVkdGb250RGF0YTo6
ZmlsbFNWR0dseXBoUGFnZShHbHlwaFBhZ2UqIHBhZ2VUb0ZpbGwsIHVuc2lnbmVkIG9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNv
bnN0IEZvbnQqIGZvbnQpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGZvbnREYXRhLT5pc0N1c3RvbUZv
bnQoKSk7Ci0gICAgQVNTRVJUKGZvbnREYXRhLT5pc1NWR0ZvbnQoKSk7CisgICAgQVNTRVJUKGZv
bnQtPmlzQ3VzdG9tRm9udCgpKTsKKyAgICBBU1NFUlQoZm9udC0+aXNTVkdGb250KCkpOwogCiAg
ICAgU1ZHRm9udEZhY2VFbGVtZW50KiBmb250RmFjZUVsZW1lbnQgPSB0aGlzLT5zdmdGb250RmFj
ZUVsZW1lbnQoKTsKICAgICBBU1NFUlQoZm9udEZhY2VFbGVtZW50KTsKQEAgLTIyMCwxMyArMjIw
LDEzIEBAIGJvb2wgU1ZHRm9udERhdGE6OmZpbGxTVkdHbHlwaFBhZ2UoR2x5cGgKICAgICBBU1NF
UlQoZm9udEVsZW1lbnQpOwogCiAgICAgaWYgKGJ1ZmZlckxlbmd0aCA9PSBsZW5ndGgpCi0gICAg
ICAgIHJldHVybiBmaWxsQk1QR2x5cGhzKGZvbnRFbGVtZW50LCBwYWdlVG9GaWxsLCBvZmZzZXQs
IGxlbmd0aCwgYnVmZmVyLCBmb250RGF0YSk7CisgICAgICAgIHJldHVybiBmaWxsQk1QR2x5cGhz
KGZvbnRFbGVtZW50LCBwYWdlVG9GaWxsLCBvZmZzZXQsIGxlbmd0aCwgYnVmZmVyLCBmb250KTsK
IAogICAgIEFTU0VSVChidWZmZXJMZW5ndGggPT0gMiAqIGxlbmd0aCk7Ci0gICAgcmV0dXJuIGZp
bGxOb25CTVBHbHlwaHMoZm9udEVsZW1lbnQsIHBhZ2VUb0ZpbGwsIG9mZnNldCwgbGVuZ3RoLCBi
dWZmZXIsIGZvbnREYXRhKTsKKyAgICByZXR1cm4gZmlsbE5vbkJNUEdseXBocyhmb250RWxlbWVu
dCwgcGFnZVRvRmlsbCwgb2Zmc2V0LCBsZW5ndGgsIGJ1ZmZlciwgZm9udCk7CiB9CiAKLWJvb2wg
U1ZHRm9udERhdGE6OmZpbGxCTVBHbHlwaHMoU1ZHRm9udEVsZW1lbnQqIGZvbnRFbGVtZW50LCBH
bHlwaFBhZ2UqIHBhZ2VUb0ZpbGwsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBV
Q2hhciogYnVmZmVyLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEpIGNvbnN0Citib29s
IFNWR0ZvbnREYXRhOjpmaWxsQk1QR2x5cGhzKFNWR0ZvbnRFbGVtZW50KiBmb250RWxlbWVudCwg
R2x5cGhQYWdlKiBwYWdlVG9GaWxsLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwg
VUNoYXIqIGJ1ZmZlciwgY29uc3QgRm9udCogZm9udCkgY29uc3QKIHsKICAgICBib29sIGhhdmVH
bHlwaHMgPSBmYWxzZTsKICAgICBWZWN0b3I8U1ZHR2x5cGg+IGdseXBoczsKQEAgLTI0MywxNCAr
MjQzLDE0IEBAIGJvb2wgU1ZHRm9udERhdGE6OmZpbGxCTVBHbHlwaHMoU1ZHRm9udEUKICAgICAg
ICAgLy8gY2FyZSBvZiBtYXRjaGluZyB0byB0aGUgY29ycmVjdCBnbHlwaCwgaWYgbXVsdGlwbGUg
b25lcyBhcmUgYXZhaWxhYmxlLCBhcyB0aGF0J3MKICAgICAgICAgLy8gb25seSBwb3NzaWJsZSB3
aXRoaW4gdGhlIGNvbnRleHQgb2YgYSBzdHJpbmcgKGVnLiBhcmFiaWMgZm9ybSBtYXRjaGluZyku
CiAgICAgICAgIGhhdmVHbHlwaHMgPSB0cnVlOwotICAgICAgICBwYWdlVG9GaWxsLT5zZXRHbHlw
aERhdGFGb3JJbmRleChvZmZzZXQgKyBpLCBnbHlwaHMuZmlyc3QoKS50YWJsZUVudHJ5LCBmb250
RGF0YSk7CisgICAgICAgIHBhZ2VUb0ZpbGwtPnNldEdseXBoRGF0YUZvckluZGV4KG9mZnNldCAr
IGksIGdseXBocy5maXJzdCgpLnRhYmxlRW50cnksIGZvbnQpOwogICAgICAgICBnbHlwaHMuY2xl
YXIoKTsKICAgICB9CiAKICAgICByZXR1cm4gaGF2ZUdseXBoczsKIH0KIAotYm9vbCBTVkdGb250
RGF0YTo6ZmlsbE5vbkJNUEdseXBocyhTVkdGb250RWxlbWVudCogZm9udEVsZW1lbnQsIEdseXBo
UGFnZSogcGFnZVRvRmlsbCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFy
KiBidWZmZXIsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSkgY29uc3QKK2Jvb2wgU1ZH
Rm9udERhdGE6OmZpbGxOb25CTVBHbHlwaHMoU1ZHRm9udEVsZW1lbnQqIGZvbnRFbGVtZW50LCBH
bHlwaFBhZ2UqIHBhZ2VUb0ZpbGwsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBV
Q2hhciogYnVmZmVyLCBjb25zdCBGb250KiBmb250KSBjb25zdAogewogICAgIGJvb2wgaGF2ZUds
eXBocyA9IGZhbHNlOwogICAgIFZlY3RvcjxTVkdHbHlwaD4gZ2x5cGhzOwpAQCAtMjY4LDcgKzI2
OCw3IEBAIGJvb2wgU1ZHRm9udERhdGE6OmZpbGxOb25CTVBHbHlwaHMoU1ZHRm8KICAgICAgICAg
Ly8gY2FyZSBvZiBtYXRjaGluZyB0byB0aGUgY29ycmVjdCBnbHlwaCwgaWYgbXVsdGlwbGUgb25l
cyBhcmUgYXZhaWxhYmxlLCBhcyB0aGF0J3MKICAgICAgICAgLy8gb25seSBwb3NzaWJsZSB3aXRo
aW4gdGhlIGNvbnRleHQgb2YgYSBzdHJpbmcgKGVnLiBhcmFiaWMgZm9ybSBtYXRjaGluZykuCiAg
ICAgICAgIGhhdmVHbHlwaHMgPSB0cnVlOwotICAgICAgICBwYWdlVG9GaWxsLT5zZXRHbHlwaERh
dGFGb3JJbmRleChvZmZzZXQgKyBpLCBnbHlwaHMuZmlyc3QoKS50YWJsZUVudHJ5LCBmb250RGF0
YSk7CisgICAgICAgIHBhZ2VUb0ZpbGwtPnNldEdseXBoRGF0YUZvckluZGV4KG9mZnNldCArIGks
IGdseXBocy5maXJzdCgpLnRhYmxlRW50cnksIGZvbnQpOwogICAgICAgICBnbHlwaHMuY2xlYXIo
KTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RGF0YS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RGF0YS5oCShyZXZpc2lvbiAxNzg4
NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udERhdGEuaAkod29ya2luZyBjb3B5KQpA
QCAtMjEsMjEgKzIxLDIxIEBACiAjZGVmaW5lIFNWR0ZvbnREYXRhX2gKIAogI2lmIEVOQUJMRShT
VkdfRk9OVFMpCi0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKKyNpbmNsdWRlICJGb250Lmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU1ZHRm9udEVsZW1lbnQ7CiBjbGFzcyBT
VkdGb250RmFjZUVsZW1lbnQ7CiAKLWNsYXNzIFNWR0ZvbnREYXRhIDogcHVibGljIFNpbXBsZUZv
bnREYXRhOjpTVkdEYXRhIHsKK2NsYXNzIFNWR0ZvbnREYXRhIDogcHVibGljIEZvbnQ6OlNWR0Rh
dGEgewogcHVibGljOgogICAgIGV4cGxpY2l0IFNWR0ZvbnREYXRhKFNWR0ZvbnRGYWNlRWxlbWVu
dCopOwogICAgIHZpcnR1YWwgflNWR0ZvbnREYXRhKCkgeyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQg
aW5pdGlhbGl6ZUZvbnREYXRhKFNpbXBsZUZvbnREYXRhKiwgZmxvYXQgZm9udFNpemUpIG92ZXJy
aWRlOworICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplRm9udChGb250KiwgZmxvYXQgZm9udFNp
emUpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgZmxvYXQgd2lkdGhGb3JTVkdHbHlwaChHbHlwaCwg
ZmxvYXQgZm9udFNpemUpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBmaWxsU1ZH
R2x5cGhQYWdlKEdseXBoUGFnZSosIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBV
Q2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IFNpbXBsZUZvbnREYXRh
KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGZpbGxTVkdHbHlwaFBhZ2UoR2x5
cGhQYWdlKiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIs
IHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgRm9udCopIGNvbnN0IG92ZXJyaWRlOwogCiAg
ICAgYm9vbCBhcHBseVNWR0dseXBoU2VsZWN0aW9uKFdpZHRoSXRlcmF0b3ImLCBHbHlwaERhdGEm
LCBib29sIG1pcnJvciwgaW50IGN1cnJlbnRDaGFyYWN0ZXIsIHVuc2lnbmVkJiBhZHZhbmNlTGVu
Z3RoLCBTdHJpbmcmIG5vcm1hbGl6ZWRTcGFjZXNTdHJpbmdDYWNoZSkgY29uc3Q7CiAKQEAgLTUw
LDggKzUwLDggQEAgcHVibGljOgogICAgIGZsb2F0IHZlcnRpY2FsQWR2YW5jZVkoKSBjb25zdCB7
IHJldHVybiBtX3ZlcnRpY2FsQWR2YW5jZVk7IH0KIAogcHJpdmF0ZToKLSAgICBib29sIGZpbGxC
TVBHbHlwaHMoU1ZHRm9udEVsZW1lbnQqLCBHbHlwaFBhZ2UqICwgdW5zaWduZWQgb2Zmc2V0LCB1
bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIsIGNvbnN0IFNpbXBsZUZvbnREYXRhKikgY29u
c3Q7Ci0gICAgYm9vbCBmaWxsTm9uQk1QR2x5cGhzKFNWR0ZvbnRFbGVtZW50KiwgR2x5cGhQYWdl
KiAsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCBjb25z
dCBTaW1wbGVGb250RGF0YSopIGNvbnN0OworICAgIGJvb2wgZmlsbEJNUEdseXBocyhTVkdGb250
RWxlbWVudCosIEdseXBoUGFnZSogLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwg
VUNoYXIqIGJ1ZmZlciwgY29uc3QgRm9udCopIGNvbnN0OworICAgIGJvb2wgZmlsbE5vbkJNUEds
eXBocyhTVkdGb250RWxlbWVudCosIEdseXBoUGFnZSogLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2ln
bmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgY29uc3QgRm9udCopIGNvbnN0OwogCiAgICAgYm9v
bCBhcHBseVRyYW5zZm9ybXMoR2x5cGhCdWZmZXJHbHlwaCosIEdseXBoQnVmZmVyQWR2YW5jZSos
IHNpemVfdCwgVHlwZXNldHRpbmdGZWF0dXJlcykgY29uc3QgPSBkZWxldGU7CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGb250RWxlbWVudC5oCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRm9udEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYs
NyBAQCBwdWJsaWM6CiAgICAgZmxvYXQgaG9yaXpvbnRhbEtlcm5pbmdGb3JQYWlyT2ZTdHJpbmdz
QW5kR2x5cGhzKGNvbnN0IFN0cmluZyYgdTEsIGNvbnN0IFN0cmluZyYgZzEsIGNvbnN0IFN0cmlu
ZyYgdTIsIGNvbnN0IFN0cmluZyYgZzIpIGNvbnN0OwogICAgIGZsb2F0IHZlcnRpY2FsS2Vybmlu
Z0ZvclBhaXJPZlN0cmluZ3NBbmRHbHlwaHMoY29uc3QgU3RyaW5nJiB1MSwgY29uc3QgU3RyaW5n
JiBnMSwgY29uc3QgU3RyaW5nJiB1MiwgY29uc3QgU3RyaW5nJiBnMikgY29uc3Q7CiAKLSAgICAv
LyBVc2VkIGJ5IFNpbXBsZUZvbnREYXRhL1dpZHRoSXRlcmF0b3IuCisgICAgLy8gVXNlZCBieSBG
b250L1dpZHRoSXRlcmF0b3IuCiAgICAgU1ZHR2x5cGggc3ZnR2x5cGhGb3JHbHlwaChHbHlwaCk7
CiAgICAgR2x5cGggbWlzc2luZ0dseXBoKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUHJvY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQcm9jZXNzLmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTI3LDggKzkyNyw4
IEBAIHZvaWQgV2ViUHJvY2Vzczo6Z2V0V2ViQ29yZVN0YXRpc3RpY3ModWkKICAgICBkYXRhLnN0
YXRpc3RpY3NOdW1iZXJzLnNldChBU0NJSUxpdGVyYWwoIkljb25zV2l0aERhdGFDb3VudCIpLCBp
Y29uRGF0YWJhc2UoKS5pY29uUmVjb3JkQ291bnRXaXRoRGF0YSgpKTsKICAgICAKICAgICAvLyBH
YXRoZXIgZm9udCBzdGF0aXN0aWNzLgotICAgIGRhdGEuc3RhdGlzdGljc051bWJlcnMuc2V0KEFT
Q0lJTGl0ZXJhbCgiQ2FjaGVkRm9udERhdGFDb3VudCIpLCBmb250Q2FjaGUoKS5mb250RGF0YUNv
dW50KCkpOwotICAgIGRhdGEuc3RhdGlzdGljc051bWJlcnMuc2V0KEFTQ0lJTGl0ZXJhbCgiQ2Fj
aGVkRm9udERhdGFJbmFjdGl2ZUNvdW50IiksIGZvbnRDYWNoZSgpLmluYWN0aXZlRm9udERhdGFD
b3VudCgpKTsKKyAgICBkYXRhLnN0YXRpc3RpY3NOdW1iZXJzLnNldChBU0NJSUxpdGVyYWwoIkNh
Y2hlZEZvbnREYXRhQ291bnQiKSwgZm9udENhY2hlKCkuZm9udENvdW50KCkpOworICAgIGRhdGEu
c3RhdGlzdGljc051bWJlcnMuc2V0KEFTQ0lJTGl0ZXJhbCgiQ2FjaGVkRm9udERhdGFJbmFjdGl2
ZUNvdW50IiksIGZvbnRDYWNoZSgpLmluYWN0aXZlRm9udENvdW50KCkpOwogICAgIAogICAgIC8v
IEdhdGhlciBnbHlwaCBwYWdlIHN0YXRpc3RpY3MuCiAgICAgZGF0YS5zdGF0aXN0aWNzTnVtYmVy
cy5zZXQoQVNDSUlMaXRlcmFsKCJHbHlwaFBhZ2VDb3VudCIpLCBHbHlwaFBhZ2U6OmNvdW50KCkp
OwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2Vi
UG9wdXBNZW51TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvbWFjL1dlYlBvcHVwTWVudU1hYy5tbQkocmV2aXNpb24gMTc4ODU3KQor
KysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViUG9wdXBN
ZW51TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIHZvaWQgV2ViUG9wdXBN
ZW51OjpzZXRVcFBsYXRmb3JtRGF0YShjb24KIHsKICNpZiBVU0UoQVBQS0lUKQogICAgIC8vIEZJ
WE1FOiBmb250IHdpbGwgYmUgbmlsIGhlcmUgZm9yIGN1c3RvbSBmb250cywgd2Ugc2hvdWxkIGZp
eCB0aGF0LgotICAgIE5TRm9udCAqZm9udCA9IG1fcG9wdXBDbGllbnQtPm1lbnVTdHlsZSgpLmZv
bnQoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXROU0ZvbnQoKTsKKyAgICBOU0ZvbnQgKmZvbnQgPSBt
X3BvcHVwQ2xpZW50LT5tZW51U3R5bGUoKS5mb250KCkucHJpbWFyeUZvbnQoKS5nZXROU0ZvbnQo
KTsKICAgICBpZiAoIWZvbnQpCiAgICAgICAgIHJldHVybjsKICAgICAKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0JKHJl
dmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3Mv
V2ViUGFnZUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTc5MCw4ICsxNzkwLDggQEAgdm9pZCBX
ZWJQYWdlOjpyZXF1ZXN0QXV0b2NvcnJlY3Rpb25EYXRhKAogCiAgICAgYm9vbCBtdWx0aXBsZUZv
bnRzID0gZmFsc2U7CiAgICAgQ1RGb250UmVmIGZvbnQgPSBuaWw7Ci0gICAgaWYgKGNvbnN0IFNp
bXBsZUZvbnREYXRhKiBmb250RGF0YSA9IGZyYW1lLmVkaXRvcigpLmZvbnRGb3JTZWxlY3Rpb24o
bXVsdGlwbGVGb250cykpCi0gICAgICAgIGZvbnQgPSBmb250RGF0YS0+Z2V0Q1RGb250KCk7Cisg
ICAgaWYgKGF1dG8qIGNvcmVGb250ID0gZnJhbWUuZWRpdG9yKCkuZm9udEZvclNlbGVjdGlvbiht
dWx0aXBsZUZvbnRzKSkKKyAgICAgICAgZm9udCA9IGNvcmVGb250LT5nZXRDVEZvbnQoKTsKIAog
ICAgIENHRmxvYXQgZm9udFNpemUgPSBDVEZvbnRHZXRTaXplKGZvbnQpOwogICAgIHVpbnQ2NF90
IGZvbnRUcmFpdHMgPSBDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhmb250KTsKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbQkocmV2aXNpb24gMTc4ODU3
KQorKysgU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMTQ3LDEyICsxNDcsMTIgQEAgKyAoc2l6ZV90KWljb25zV2l0aERhdGFDb3Vu
dAogCiArIChzaXplX3QpY2FjaGVkRm9udERhdGFDb3VudAogewotICAgIHJldHVybiBmb250Q2Fj
aGUoKS5mb250RGF0YUNvdW50KCk7CisgICAgcmV0dXJuIGZvbnRDYWNoZSgpLmZvbnRDb3VudCgp
OwogfQogCiArIChzaXplX3QpY2FjaGVkRm9udERhdGFJbmFjdGl2ZUNvdW50CiB7Ci0gICAgcmV0
dXJuIGZvbnRDYWNoZSgpLmluYWN0aXZlRm9udERhdGFDb3VudCgpOworICAgIHJldHVybiBmb250
Q2FjaGUoKS5pbmFjdGl2ZUZvbnRDb3VudCgpOwogfQogCiArICh2b2lkKXB1cmdlSW5hY3RpdmVG
b250RGF0YQpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvUG9wdXBNZW51
TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1Bv
cHVwTWVudU1hYy5tbQkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYktpdC9tYWMvV2Vi
Q29yZVN1cHBvcnQvUG9wdXBNZW51TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMSArMjgs
MTEgQEAKICNpbXBvcnQgPFdlYkNvcmUvQ2hyb21lLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0Nocm9t
ZUNsaWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9FdmVudEhhbmRsZXIuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvRm9udC5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9GcmFtZVZpZXcuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGFnZS5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9Qb3B1cE1lbnVDbGllbnQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvU2ltcGxlRm9udERhdGEuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oPgogCiB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKQEAgLTgxLDkgKzgxLDkgQEAgdm9pZCBQb3B1cE1lbnVNYWM6OnBvcHVs
YXRlKCkKICAgICAgICAgUG9wdXBNZW51U3R5bGUgc3R5bGUgPSBtX2NsaWVudC0+aXRlbVN0eWxl
KGkpOwogICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGljdGlvbmFyeT4gYXR0cmlidXRlcyA9
IGFkb3B0TlMoW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XSk7CiAgICAgICAgIGlm
IChzdHlsZS5mb250KCkgIT0gRm9udENhc2NhZGUoKSkgewotICAgICAgICAgICAgTlNGb250ICpm
b250ID0gc3R5bGUuZm9udCgpLnByaW1hcnlGb250RGF0YSgpLmdldE5TRm9udCgpOworICAgICAg
ICAgICAgTlNGb250ICpmb250ID0gc3R5bGUuZm9udCgpLnByaW1hcnlGb250KCkuZ2V0TlNGb250
KCk7CiAgICAgICAgICAgICBpZiAoIWZvbnQpIHsKLSAgICAgICAgICAgICAgICBDR0Zsb2F0IHNp
emUgPSBzdHlsZS5mb250KCkucHJpbWFyeUZvbnREYXRhKCkucGxhdGZvcm1EYXRhKCkuc2l6ZSgp
OworICAgICAgICAgICAgICAgIENHRmxvYXQgc2l6ZSA9IHN0eWxlLmZvbnQoKS5wcmltYXJ5Rm9u
dCgpLnBsYXRmb3JtRGF0YSgpLnNpemUoKTsKICAgICAgICAgICAgICAgICBmb250ID0gc3R5bGUu
Zm9udCgpLndlaWdodCgpIDwgRm9udFdlaWdodEJvbGQgPyBbTlNGb250IHN5c3RlbUZvbnRPZlNp
emU6c2l6ZV0gOiBbTlNGb250IGJvbGRTeXN0ZW1Gb250T2ZTaXplOnNpemVdOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgW2F0dHJpYnV0ZXMgc2V0T2JqZWN0OmZvbnQgZm9yS2V5Ok5TRm9u
dEF0dHJpYnV0ZU5hbWVdOwpAQCAtMTQ4LDcgKzE0OCw3IEBAIHZvaWQgUG9wdXBNZW51TWFjOjpz
aG93KGNvbnN0IEludFJlY3QmIHIKICAgICBOU01lbnUqIG1lbnUgPSBbbV9wb3B1cCBtZW51XTsK
ICAgICAKICAgICBOU1BvaW50IGxvY2F0aW9uOwotICAgIE5TRm9udCogZm9udCA9IG1fY2xpZW50
LT5tZW51U3R5bGUoKS5mb250KCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0TlNGb250KCk7CisgICAg
TlNGb250KiBmb250ID0gbV9jbGllbnQtPm1lbnVTdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udCgp
LmdldE5TRm9udCgpOwogCiAgICAgLy8gVGhlc2UgdmFsdWVzIHdlcmUgYm9ycm93ZWQgZnJvbSBB
cHBLaXQgdG8gbWF0Y2ggdGhlaXIgcGxhY2VtZW50IG9mIHRoZSBtZW51LgogICAgIGNvbnN0IGlu
dCBwb3BPdmVySG9yaXpvbnRhbEFkanVzdCA9IC0xMDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFj
L1dlYlZpZXcvV2ViSFRNTFZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMv
V2ViVmlldy9XZWJIVE1MVmlldy5tbQkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYktp
dC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtOTIsNiArOTIs
NyBAQAogI2ltcG9ydCA8V2ViQ29yZS9FeGNlcHRpb25IYW5kbGVycy5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9GbG9hdFJlY3QuaD4KICNpbXBvcnQgPFdlYkNvcmUvRm9jdXNDb250cm9sbGVyLmg+Cisj
aW1wb3J0IDxXZWJDb3JlL0ZvbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvRm9udENhY2hlLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lTG9hZGVyLmg+
CkBAIC0xMTIsNyArMTEzLDYgQEAKICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyV2lkZ2V0Lmg+CiAj
aW1wb3J0IDxXZWJDb3JlL1J1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9TaGFyZWRCdWZmZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvU2ltcGxlRm9udERhdGEuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvU3R5bGVQcm9wZXJ0aWVzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Rl
eHQuaD4KICNpbXBvcnQgPFdlYkNvcmUvVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlLmg+CkBAIC00
ODc4LDggKzQ4NzgsOCBAQCBzdGF0aWMgTlNTdHJpbmcgKmZvbnROYW1lRm9yRGVzY3JpcHRpb24o
CiAgICAgZm9udERlc2NyaXB0aW9uLnNldElzSXRhbGljKGl0YWxpYyk7CiAgICAgZm9udERlc2Ny
aXB0aW9uLnNldFdlaWdodChib2xkID8gRm9udFdlaWdodDkwMCA6IEZvbnRXZWlnaHQ1MDApOwog
ICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKHBvaW50U2l6ZSk7Ci0gICAgUmVm
UHRyPFNpbXBsZUZvbnREYXRhPiBzaW1wbGVGb250RGF0YSA9IGZvbnRDYWNoZSgpLmZvbnRGb3JG
YW1pbHkoZm9udERlc2NyaXB0aW9uLCBmYW1pbHlOYW1lKTsKLSAgICByZXR1cm4gW3NpbXBsZUZv
bnREYXRhLT5wbGF0Zm9ybURhdGEoKS5uc0ZvbnQoKSBmb250TmFtZV07CisgICAgUmVmUHRyPEZv
bnQ+IGZvbnQgPSBmb250Q2FjaGUoKS5mb250Rm9yRmFtaWx5KGZvbnREZXNjcmlwdGlvbiwgZmFt
aWx5TmFtZSk7CisgICAgcmV0dXJuIFtmb250LT5wbGF0Zm9ybURhdGEoKS5uc0ZvbnQoKSBmb250
TmFtZV07CiB9CiAKIC0gKHZvaWQpX2FkZFRvU3R5bGU6KERPTUNTU1N0eWxlRGVjbGFyYXRpb24g
KilzdHlsZSBmb250QTooTlNGb250ICopYSBmb250QjooTlNGb250ICopYgpAQCAtNTQ0Miw3ICs1
NDQyLDcgQEAgLSAodm9pZClfdXBkYXRlRm9udFBhbmVsCiAgICAgYm9vbCBtdWx0aXBsZUZvbnRz
ID0gZmFsc2U7CiAgICAgTlNGb250ICpmb250ID0gbmlsOwogICAgIGlmIChGcmFtZSogY29yZUZy
YW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkgewotICAgICAgICBpZiAoY29uc3QgU2ltcGxlRm9u
dERhdGEqIGZkID0gY29yZUZyYW1lLT5lZGl0b3IoKS5mb250Rm9yU2VsZWN0aW9uKG11bHRpcGxl
Rm9udHMpKQorICAgICAgICBpZiAoY29uc3QgRm9udCogZmQgPSBjb3JlRnJhbWUtPmVkaXRvcigp
LmZvbnRGb3JTZWxlY3Rpb24obXVsdGlwbGVGb250cykpCiAgICAgICAgICAgICBmb250ID0gZmQt
PmdldE5TRm9udCgpOwogICAgIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245119</attachid>
            <date>2015-01-21 21:20:12 -0800</date>
            <delta_ts>2015-01-22 10:40:54 -0800</delta_ts>
            <desc>another</desc>
            <filename>simplefontdata-rename-6.patch</filename>
            <type>text/plain</type>
            <size>332861</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDE1LTAxLTIxICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgU2ltcGxlRm9udERh
dGEgdG8gRm9udAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTQwNDk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhlIGZhbGxiYWNrIHN1cHBvcnRpbmcgRm9udCB0eXBlIHdhcyByZW5hbWVkIEZvbnRDYXNj
YWRlLgorICAgICAgICBXZSBjYW4gbm93IHJlbmFtZSBTaW1wbGVGb250RGF0YSB0byBqdXN0IEZv
bnQgbWF0Y2hpbmcgdGhlIHVzdWFsIGRlZmluaXRpb24uCisKIDIwMTUtMDEtMjEgIEJlbmphbWlu
IFBvdWxhaW4gIDxiZW5qYW1pbkB3ZWJraXQub3JnPgogCiAgICAgICAgIEhhbmRsZSB0aGUgdHJh
bnNpdGlvbiBvbiBhbnkgY2hhcmFjdGVyIGFzIGEgc2VwYXJhdGUgdHlwZSBvZiB0cmFuc2l0aW9u
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTQ2OSw3ICs0NjksNiBAQCBf
X1pON1dlYkNvcmUxNFNlY3VyaXR5UG9saWN5MjJnZW5lcmF0ZVJlCiBfX1pON1dlYkNvcmUxNFNl
Y3VyaXR5UG9saWN5MjdyZXNldE9yaWdpbkFjY2Vzc1doaXRlbGlzdHNFdgogX19aTjdXZWJDb3Jl
MTRTZWN1cml0eVBvbGljeTI5YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnlFUktOU18xNFNl
Y3VyaXR5T3JpZ2luRVJLTjNXVEY2U3RyaW5nRVM3X2IKIF9fWk43V2ViQ29yZTE0U2VjdXJpdHlQ
b2xpY3kzMnJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5RVJLTlNfMTRTZWN1cml0eU9y
aWdpbkVSS04zV1RGNlN0cmluZ0VTN19iCi1fX1pON1dlYkNvcmUxNFNpbXBsZUZvbnREYXRhRDFF
dgogX19aTjdXZWJDb3JlMTRTdWJmcmFtZUxvYWRlcjEyYWxsb3dQbHVnaW5zRU5TXzI4UmVhc29u
Rm9yQ2FsbGluZ0FsbG93UGx1Z2luc0UKIF9fWk43V2ViQ29yZTE0VGlsZUNvbnRyb2xsZXIxNHNl
dFRpbGVzT3BhcXVlRWIKIF9fWk43V2ViQ29yZTE0VGlsZUNvbnRyb2xsZXIxNWNvbnRhaW5lckxh
eWVyc0V2CkBAIC0xMTc5LDYgKzExNzgsNyBAQCBfX1pON1dlYkNvcmU0MGRlZmF1bHRUZXh0RW5j
b2RpbmdOYW1lRm9yCiBfX1pON1dlYkNvcmU0MHJlc3RyaWN0TWluaW11bVNjYWxlRmFjdG9yVG9W
aWV3cG9ydFNpemVFUk5TXzE4Vmlld3BvcnRBdHRyaWJ1dGVzRU5TXzdJbnRTaXplRWYKIF9fWk43
V2ViQ29yZTQyVVJMQnlUcnVuY2F0aW5nT25lQ2hhcmFjdGVyQmVmb3JlQ29tcG9uZW50RVA1TlNV
UkwxOENGVVJMQ29tcG9uZW50VHlwZQogX19aTjdXZWJDb3JlNDdhdHRyaWJ1dGVkU3RyaW5nQnlT
dHJpcHBpbmdBdHRhY2htZW50Q2hhcmFjdGVyc0VQMThOU0F0dHJpYnV0ZWRTdHJpbmcKK19fWk43
V2ViQ29yZTRGb250RDFFdgogX19aTjdXZWJDb3JlNEljb24xOGNyZWF0ZUljb25Gb3JGaWxlc0VS
S04zV1RGNlZlY3RvcklOUzFfNlN0cmluZ0VMbTBFTlMxXzE1Q3Jhc2hPbk92ZXJmbG93RUVFCiBf
X1pON1dlYkNvcmU0SWNvbkQxRXYKIF9fWk43V2ViQ29yZTROb2RlMTByZW5kZXJSZWN0RVBiCkBA
IC0xNDkyLDExICsxNDkyLDExIEBAIF9fWk43V2ViQ29yZTlGbG9hdFJlY3RDMUVSS05TXzdJbnRS
ZWN0RQogX19aTjdXZWJDb3JlOUZsb2F0U2l6ZUMxRVJLNkNHU2l6ZQogX19aTjdXZWJDb3JlOUZs
b2F0U2l6ZUMxRVJLTlNfN0ludFNpemVFCiBfX1pON1dlYkNvcmU5Rm9udENhY2hlMTBpbnZhbGlk
YXRlRXYKLV9fWk43V2ViQ29yZTlGb250Q2FjaGUxM2ZvbnREYXRhQ291bnRFdgogX19aTjdXZWJD
b3JlOUZvbnRDYWNoZTEzZm9udEZvckZhbWlseUVSS05TXzE1Rm9udERlc2NyaXB0aW9uRVJLTjNX
VEYxMkF0b21pY1N0cmluZ0ViCi1fX1pON1dlYkNvcmU5Rm9udENhY2hlMjFpbmFjdGl2ZUZvbnRE
YXRhQ291bnRFdgorX19aTjdXZWJDb3JlOUZvbnRDYWNoZTE3aW5hY3RpdmVGb250Q291bnRFdgog
X19aTjdXZWJDb3JlOUZvbnRDYWNoZTIxcHVyZ2VJbmFjdGl2ZUZvbnREYXRhRWkKIF9fWk43V2Vi
Q29yZTlGb250Q2FjaGUyOXB1cmdlSW5hY3RpdmVGb250RGF0YUlmTmVlZGVkRXYKK19fWk43V2Vi
Q29yZTlGb250Q2FjaGU5Zm9udENvdW50RXYKIF9fWk43V2ViQ29yZTlGcmFtZVRyZWUxMWFwcGVu
ZENoaWxkRU4zV1RGMTBQYXNzUmVmUHRySU5TXzVGcmFtZUVFRQogX19aTjdXZWJDb3JlOUZyYW1l
VHJlZTdzZXROYW1lRVJLTjNXVEYxMkF0b21pY1N0cmluZ0UKIF9fWk43V2ViQ29yZTlGcmFtZVRy
ZWU5Y2xlYXJOYW1lRXYKQEAgLTE2MzQsOCArMTYzNCw4IEBAIF9fWk5LM1dURjZTdHJpbmcxNGNy
ZWF0ZUNGU3RyaW5nRXYKIF9fWk5LN1dlYkNvcmUxMENyZWRlbnRpYWwxMm5zQ3JlZGVudGlhbEV2
CiBfX1pOSzdXZWJDb3JlMTBDcmVkZW50aWFsN2lzRW1wdHlFdgogX19aTks3V2ViQ29yZTEwRmxv
YXRQb2ludGN2N0NHUG9pbnRFdgotX19aTks3V2ViQ29yZTEwRm9udFJhbmdlczIwZm9udERhdGFG
b3JDaGFyYWN0ZXJFaQotX19aTks3V2ViQ29yZTEwRm9udFJhbmdlczIxZm9udERhdGFGb3JGaXJz
dFJhbmdlRXYKK19fWk5LN1dlYkNvcmUxMEZvbnRSYW5nZXMxNmZvbnRGb3JDaGFyYWN0ZXJFaQor
X19aTks3V2ViQ29yZTEwRm9udFJhbmdlczE3Zm9udEZvckZpcnN0UmFuZ2VFdgogX19aTks3V2Vi
Q29yZTEwTGF5b3V0UmVjdDhjb250YWluc0VSS1MwXwogX19aTks3V2ViQ29yZTEwUGx1Z2luRGF0
YTE2c3VwcG9ydHNNaW1lVHlwZUVSS04zV1RGNlN0cmluZ0VOUzBfMThBbGxvd2VkUGx1Z2luVHlw
ZXNFCiBfX1pOSzdXZWJDb3JlMTBSZW5kZXJUZXh0MTZmaXJzdFJ1bkxvY2F0aW9uRXYKQEAgLTE2
NjUsNyArMTY2NSw3IEBAIF9fWk5LN1dlYkNvcmUxMFRpbWVSYW5nZXMzZW5kRWpSaQogX19aTks3
V2ViQ29yZTEwVGltZVJhbmdlczRjb3B5RXYKIF9fWk5LN1dlYkNvcmUxMFRpbWVSYW5nZXM1c3Rh
cnRFalJpCiBfX1pOSzdXZWJDb3JlMTBUaW1lUmFuZ2VzNmxlbmd0aEV2Ci1fX1pOSzdXZWJDb3Jl
MTFGb250Q2FzY2FkZTV3aWR0aEVSS05TXzdUZXh0UnVuRVBOM1dURjdIYXNoU2V0SVBLTlNfMTRT
aW1wbGVGb250RGF0YUVOUzRfN1B0ckhhc2hJUzhfRUVOUzRfMTBIYXNoVHJhaXRzSVM4X0VFRUVQ
TlNfMTNHbHlwaE92ZXJmbG93RQorX19aTks3V2ViQ29yZTExRm9udENhc2NhZGU1d2lkdGhFUktO
U183VGV4dFJ1bkVQTjNXVEY3SGFzaFNldElQS05TXzRGb250RU5TNF83UHRySGFzaElTOF9FRU5T
NF8xMEhhc2hUcmFpdHNJUzhfRUVFRVBOU18xM0dseXBoT3ZlcmZsb3dFCiBfX1pOSzdXZWJDb3Jl
MTFGb250Q2FzY2FkZThkcmF3VGV4dEVQTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU183VGV4dFJ1
bkVSS05TXzEwRmxvYXRQb2ludEVpaU5TMF8yNEN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbkUKIF9f
Wk5LN1dlYkNvcmUxMUZvbnRDYXNjYWRlZXFFUktTMF8KIF9fWk5LN1dlYkNvcmUxMUZyYW1lTG9h
ZGVyMTBpc0NvbXBsZXRlRXYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
NDcwNSw4ICs0NzA1LDggQEAKIAkJQjJDM0RBNjEwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYXNj
YWRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkMz
REE1MDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCMkMzREE2MjBEMDA2Q0Q2MDBFRjZGMjYg
LyogRm9udENhY2hlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEIyQzNEQTUxMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FjaGUuY3BwICovOyB9Owog
CQlCMkMzREE2MzBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhY2hlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkMzREE1MjBEMDA2Q0Q2MDBFRjZGMjYg
LyogRm9udENhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKLQkJQjJDM0RBNjQwRDAwNkNENjAwRUY2RjI2IC8qIFNpbXBsZUZvbnREYXRhLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNEQTUzMEQw
MDZDRDYwMEVGNkYyNiAvKiBTaW1wbGVGb250RGF0YS5jcHAgKi87IH07Ci0JCUIyQzNEQTY1MEQw
MDZDRDYwMEVGNkYyNiAvKiBTaW1wbGVGb250RGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBNTQwRDAwNkNENjAwRUY2RjI2IC8qIFNpbXBs
ZUZvbnREYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJQjJDM0RBNjQwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBNTMwRDAwNkNENjAwRUY2RjI2
IC8qIEZvbnQuY3BwICovOyB9OworCQlCMkMzREE2NTBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBNTQw
RDAwNkNENjAwRUY2RjI2IC8qIEZvbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlCMkMzREE2NjBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udERlc2Ny
aXB0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
MkMzREE1NTBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udERlc2NyaXB0aW9uLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjJDM0RBNjcwRDAwNkNENjAw
RUY2RjI2IC8qIEZvbnRHbHlwaHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQjJDM0RBNTYwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRHbHlwaHMuY3Bw
ICovOyB9OwogCQlCMkMzREE2ODBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udEdseXBocy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBNTcwRDAwNkNE
NjAwRUY2RjI2IC8qIEZvbnRHbHlwaHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwpAQCAtMTIwODYsOCArMTIwODYsOCBAQAogCQlCMkMzREE1MDBEMDA2
Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEZvbnRDYXNjYWRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQzNE
QTUxMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FjaGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRDYWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUIyQzNEQTUyMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FjaGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlCMkMzREE1MzBEMDA2Q0Q2MDBFRjZGMjYgLyogU2ltcGxlRm9udERhdGEuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpbXBsZUZvbnREYXRhLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjJDM0RBNTQwRDAwNkNENjAwRUY2RjI2
IC8qIFNpbXBsZUZvbnREYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
aW1wbGVGb250RGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCMkMzREE1MzBE
MDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gRm9udC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUIyQzNEQTU0
MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBGb250Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQzNEQTU1MEQwMDZD
RDYwMEVGNkYyNiAvKiBGb250RGVzY3JpcHRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEZvbnREZXNjcmlwdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCMkMzREE1NjBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udEdseXBocy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udEdseXBocy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUIyQzNEQTU3MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250R2x5cGhzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb250R2x5cGhzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMDU2Myw4ICsyMDU2Myw4IEBACiAJCQkJMzcxRjRGRkEw
RDI1RTdGMzAwRUNFMEQ1IC8qIEZvbnRSYW5nZXMuaCAqLywKIAkJCQkwRjNERDQ0RDEyRjVFQTFC
MDAwRDkxOTAgLyogU2hhZG93Qmx1ci5jcHAgKi8sCiAJCQkJMEYzREQ0NEUxMkY1RUExQjAwMEQ5
MTkwIC8qIFNoYWRvd0JsdXIuaCAqLywKLQkJCQlCMkMzREE1MzBEMDA2Q0Q2MDBFRjZGMjYgLyog
U2ltcGxlRm9udERhdGEuY3BwICovLAotCQkJCUIyQzNEQTU0MEQwMDZDRDYwMEVGNkYyNiAvKiBT
aW1wbGVGb250RGF0YS5oICovLAorCQkJCUIyQzNEQTUzMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250
LmNwcCAqLywKKwkJCQlCMkMzREE1NDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5oICovLAogCQkJ
CUNENjQxRUIyMTgxOEY1RUQwMEVFNEM0MSAvKiBTb3VyY2VCdWZmZXJQcml2YXRlLmggKi8sCiAJ
CQkJQ0RDOEI1QUMxODA0QUU1RDAwMTZFNjg1IC8qIFNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQu
aCAqLywKIAkJCQlCMjM1NDBGMDBEMDA3ODJFMDAyMzgyRkEgLyogU3RyaW5nVHJ1bmNhdG9yLmNw
cCAqLywKQEAgLTI2MDIyLDcgKzI2MDIyLDcgQEAKIAkJCQkxQTRBOTU0RTBCNEVEQ0NCMDAyRDhD
M0MgLyogU2hhcmVkQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0IxRjAyRjEzQjAyNUQy
MDBGNTEwM0YgLyogU2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTkzMzA5RUEzMDk5RUI3OEMwMDU2RTU4MSAvKiBTaGFyZWRUaW1lci5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJQjJDM0RBNjUwRDAwNkNENjAwRUY2RjI2IC8qIFNpbXBsZUZvbnREYXRhLmggaW4gSGVh
ZGVycyAqLywKKwkJCQlCMkMzREE2NTBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRTQ4OTQ0QTMxODBCNTdEODAwRjE2NUQ4IC8qIFNpbXBsZUxpbmVMYXlvdXQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUU0RTlCMTFEMTgxNDU2OUMwMDNBQ0NERiAvKiBTaW1wbGVM
aW5lTGF5b3V0RnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNEU5QjExOTE4MTA5MTZG
MDAzQUNDREYgLyogU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmggaW4gSGVhZGVycyAqLywKQEAg
LTI5NDU0LDcgKzI5NDU0LDcgQEAKIAkJCQkxQTRBOTU1MjBCNEVEQ0ZGMDAyRDhDM0MgLyogU2hh
cmVkQnVmZmVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRTQ1MzkwNDYwRUFGRDYzNzAwMzY5
NUM4IC8qIFNoYXJlZFRpbWVySU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlFQTIwOTlF
Qjc4QzAwNTZFNTgxIC8qIFNoYXJlZFRpbWVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJQjJD
M0RBNjQwRDAwNkNENjAwRUY2RjI2IC8qIFNpbXBsZUZvbnREYXRhLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUIyQzNEQTY0MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTE2M0U4OEY3MTE4QTM5RDIwMEVEOTIzMSAvKiBTaW1wbGVGb250RGF0YUNvcmVUZXh0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTM3RTY1OTUwMTYzQjEwQzIwMEVCNDU3NCAvKiBTaW1w
bGVGb250RGF0YUlPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUIyQUZGQzdGMEQwMEE1QzEwMDMw
MDc0RCAvKiBTaW1wbGVGb250RGF0YU1hYy5tbSBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJ
T1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0JKHJldmlzaW9uIDE3ODg1NykKKysrIFNv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVySU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNzU4LDcgKzE3NTgsNyBAQCBzdGF0aWMgdm9p
ZCBBWEF0dHJpYnV0ZVN0cmluZ1NldFN0eWxlKE5TCiAgICAgUmVuZGVyU3R5bGUmIHN0eWxlID0g
cmVuZGVyZXItPnN0eWxlKCk7CiAgICAgCiAgICAgLy8gc2V0IGJhc2ljIGZvbnQgaW5mbwotICAg
IEFYQXR0cmlidXRlU3RyaW5nU2V0Rm9udChhdHRyU3RyaW5nLCBzdHlsZS5mb250Q2FzY2FkZSgp
LnByaW1hcnlGb250RGF0YSgpLmdldENURm9udCgpLCByYW5nZSk7CisgICAgQVhBdHRyaWJ1dGVT
dHJpbmdTZXRGb250KGF0dHJTdHJpbmcsIHN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQo
KS5nZXRDVEZvbnQoKSwgcmFuZ2UpOwogICAgICAgICAgICAgICAgIAogICAgIGludCBkZWNvciA9
IHN0eWxlLnRleHREZWNvcmF0aW9uc0luRWZmZWN0KCk7CiAgICAgaWYgKChkZWNvciAmIChUZXh0
RGVjb3JhdGlvblVuZGVybGluZSB8IFRleHREZWNvcmF0aW9uTGluZVRocm91Z2gpKSAhPSAwKSB7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlckJhc2UubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlLm1tCShyZXZpc2lv
biAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlckJhc2UubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcg
QEAKICNpbXBvcnQgIkNocm9tZUNsaWVudC5oIgogI2ltcG9ydCAiQ29sb3JNYWMuaCIKICNpbXBv
cnQgIkNvbnRleHRNZW51Q29udHJvbGxlci5oIgorI2ltcG9ydCAiRm9udC5oIgogI2ltcG9ydCAi
Rm9udENhc2NhZGUuaCIKICNpbXBvcnQgIkZyYW1lLmgiCiAjaW1wb3J0ICJGcmFtZUxvYWRlckNs
aWVudC5oIgpAQCAtNjMsNyArNjQsNiBAQAogI2ltcG9ydCAiUmVuZGVyVmlldy5oIgogI2ltcG9y
dCAiUmVuZGVyV2lkZ2V0LmgiCiAjaW1wb3J0ICJTY3JvbGxWaWV3LmgiCi0jaW1wb3J0ICJTaW1w
bGVGb250RGF0YS5oIgogI2ltcG9ydCAiVGV4dENoZWNrZXJDbGllbnQuaCIKICNpbXBvcnQgIlRl
eHRDaGVja2luZ0hlbHBlci5oIgogI2ltcG9ydCAiVmlzaWJsZVVuaXRzLmgiCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9X
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQkocmV2aXNpb24gMTc4ODU3KQorKysg
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbXBvcnQgIkNv
bG9yTWFjLmgiCiAjaW1wb3J0ICJDb250ZXh0TWVudUNvbnRyb2xsZXIuaCIKICNpbXBvcnQgIkVk
aXRvci5oIgorI2ltcG9ydCAiRm9udC5oIgogI2ltcG9ydCAiRm9udENhc2NhZGUuaCIKICNpbXBv
cnQgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW1wb3J0ICJGcmFtZVNlbGVjdGlvbi5oIgpAQCAt
NjQsNyArNjUsNiBAQAogI2ltcG9ydCAiUmVuZGVyVmlldy5oIgogI2ltcG9ydCAiUmVuZGVyV2lk
Z2V0LmgiCiAjaW1wb3J0ICJTY3JvbGxWaWV3LmgiCi0jaW1wb3J0ICJTaW1wbGVGb250RGF0YS5o
IgogI2ltcG9ydCAiVGV4dENoZWNrZXJDbGllbnQuaCIKICNpbXBvcnQgIlRleHRDaGVja2luZ0hl
bHBlci5oIgogI2ltcG9ydCAiVGV4dEl0ZXJhdG9yLmgiCkBAIC04NDgsNyArODQ4LDcgQEAgc3Rh
dGljIHZvaWQgQVhBdHRyaWJ1dGVTdHJpbmdTZXRTdHlsZShOUwogICAgIGNvbnN0IFJlbmRlclN0
eWxlJiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwogICAgIAogICAgIC8vIHNldCBiYXNpYyBm
b250IGluZm8KLSAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldEZvbnQoYXR0clN0cmluZywgTlNBY2Nl
c3NpYmlsaXR5Rm9udFRleHRBdHRyaWJ1dGUsIHN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZv
bnREYXRhKCkuZ2V0TlNGb250KCksIHJhbmdlKTsKKyAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldEZv
bnQoYXR0clN0cmluZywgTlNBY2Nlc3NpYmlsaXR5Rm9udFRleHRBdHRyaWJ1dGUsIHN0eWxlLmZv
bnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKS5nZXROU0ZvbnQoKSwgcmFuZ2UpOwogICAgIAogICAg
IC8vIHNldCBiYXNpYyBjb2xvcnMKICAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldENvbG9yKGF0dHJT
dHJpbmcsIE5TQWNjZXNzaWJpbGl0eUZvcmVncm91bmRDb2xvclRleHRBdHRyaWJ1dGUsIG5zQ29s
b3Ioc3R5bGUudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpKSwgcmFuZ2Up
OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0JKHJldmlzaW9uIDE3ODg1NykK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC02NjksNyArNjY5LDcgQEAgLSAoTlNGb250ICopX2ZvbnQKICAgICBhdXRvIHJlbmRlcmVyID0g
Y29yZShzZWxmKS0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1
cm4gbmlsOwotICAgIHJldHVybiByZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1h
cnlGb250RGF0YSgpLmdldE5TRm9udCgpOworICAgIHJldHVybiByZW5kZXJlci0+c3R5bGUoKS5m
b250Q2FzY2FkZSgpLnByaW1hcnlGb250KCkuZ2V0TlNGb250KCk7CiB9CiAjZWxzZQogLSAoQ1RG
b250UmVmKV9mb250CkBAIC02NzcsNyArNjc3LDcgQEAgLSAoQ1RGb250UmVmKV9mb250CiAgICAg
UmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNvcmUoc2VsZiktPnJlbmRlcmVyKCk7CiAgICAgaWYg
KCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4gcmVuZGVyZXItPnN0
eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXRDVEZvbnQoKTsKKyAgICBy
ZXR1cm4gcmVuZGVyZXItPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpLmdldENU
Rm9udCgpOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFj
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmNwcAko
cmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzAsMTAgKzMwLDEwIEBACiAjaW5jbHVkZSAiQ1NTRm9udFNlbGVj
dG9yLmgiCiAjaW5jbHVkZSAiQ1NTU2VnbWVudGVkRm9udEZhY2UuaCIKICNpbmNsdWRlICJEb2N1
bWVudC5oIgorI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIK
ICNpbmNsdWRlICJGb250TG9hZGVyLmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJl
cy5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApAQCAtMTA4LDcgKzEwOCw3IEBAIHZvaWQgQ1NTRm9udEZhY2U6OmZvbnRMb2FkZWQoQ1NTRm9u
dEZhY2UKICNlbmRpZgogfQogCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBDU1NGb250RmFj
ZTo6Z2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGJv
b2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpCitSZWZQdHI8Rm9udD4gQ1NT
Rm9udEZhY2U6OmZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGJv
b2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpCiB7CiAgICAgbV9hY3RpdmVT
b3VyY2UgPSAwOwogICAgIGlmICghaXNWYWxpZCgpKQpAQCAtMTI0LDcgKzEyNCw3IEBAIFBhc3NS
ZWZQdHI8U2ltcGxlRm9udERhdGE+IENTU0ZvbnRGYWNlOjoKIAogICAgIHNpemVfdCBzaXplID0g
bV9zb3VyY2VzLnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkg
ewotICAgICAgICBpZiAoUmVmUHRyPFNpbXBsZUZvbnREYXRhPiByZXN1bHQgPSBtX3NvdXJjZXNb
aV0tPmdldEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgc3ludGhldGljQm9sZCwgc3ludGhldGlj
SXRhbGljLCBmb250U2VsZWN0b3IpKSB7CisgICAgICAgIGlmIChSZWZQdHI8Rm9udD4gcmVzdWx0
ID0gbV9zb3VyY2VzW2ldLT5mb250KGZvbnREZXNjcmlwdGlvbiwgc3ludGhldGljQm9sZCwgc3lu
dGhldGljSXRhbGljLCBmb250U2VsZWN0b3IpKSB7CiAgICAgICAgICAgICBtX2FjdGl2ZVNvdXJj
ZSA9IG1fc291cmNlc1tpXS5nZXQoKTsKICNpZiBFTkFCTEUoRk9OVF9MT0FEX0VWRU5UUykKICAg
ICAgICAgICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLmZv
bnRMb2FkRXZlbnRzRW5hYmxlZCgpICYmIG1fbG9hZFN0YXRlID09IExvYWRpbmcgJiYgbV9zb3Vy
Y2VzW2ldLT5pc0xvYWRlZCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZh
Y2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2UuaAkocmV2
aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBD
U1NTZWdtZW50ZWRGb250RmFjZTsKIGNsYXNzIEZvbnREZXNjcmlwdGlvbjsKLWNsYXNzIFNpbXBs
ZUZvbnREYXRhOworY2xhc3MgRm9udDsKIAogY2xhc3MgQ1NTRm9udEZhY2UgOiBwdWJsaWMgUmVm
Q291bnRlZDxDU1NGb250RmFjZT4gewogcHVibGljOgpAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6
CiAKICAgICB2b2lkIGZvbnRMb2FkZWQoQ1NTRm9udEZhY2VTb3VyY2UqKTsKIAotICAgIFBhc3NS
ZWZQdHI8U2ltcGxlRm9udERhdGE+IGdldEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYs
IGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpOworICAgIFJlZlB0cjxG
b250PiBmb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGJvb2wgc3ludGhldGljQm9sZCwgYm9v
bCBzeW50aGV0aWNJdGFsaWMpOwogCiAgICAgc3RydWN0IFVuaWNvZGVSYW5nZSB7CiAgICAgICAg
IFVuaWNvZGVSYW5nZShVQ2hhcjMyIGZyb20sIFVDaGFyMzIgdG8pCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5jcHAJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDkgKzMyLDkgQEAKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgogI2luY2x1ZGUg
IkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRWxlbWVudEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiRm9u
dC5oIgogI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5o
IgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAKICNpZiBFTkFCTEUoU1ZHX09URl9DT05W
RVJURVIpCiAjaW5jbHVkZSAiRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oIgpAQCAtNzQsMTAgKzc0
LDEwIEBAIENTU0ZvbnRGYWNlU291cmNlOjp+Q1NTRm9udEZhY2VTb3VyY2UoKQogCiB2b2lkIENT
U0ZvbnRGYWNlU291cmNlOjpwcnVuZVRhYmxlKCkKIHsKLSAgICBpZiAobV9mb250RGF0YVRhYmxl
LmlzRW1wdHkoKSkKKyAgICBpZiAobV9mb250VGFibGUuaXNFbXB0eSgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBtX2ZvbnREYXRhVGFibGUuY2xlYXIoKTsKKyAgICBtX2ZvbnRUYWJsZS5jbGVh
cigpOwogfQogCiBib29sIENTU0ZvbnRGYWNlU291cmNlOjppc0xvYWRlZCgpIGNvbnN0CkBAIC0x
MDEsNyArMTAxLDcgQEAgdm9pZCBDU1NGb250RmFjZVNvdXJjZTo6Zm9udExvYWRlZChDYWNoZQog
ICAgICAgICBtX2ZhY2UtPmZvbnRMb2FkZWQodGhpcyk7CiB9CiAKLVBhc3NSZWZQdHI8U2ltcGxl
Rm9udERhdGE+IENTU0ZvbnRGYWNlU291cmNlOjpnZXRGb250RGF0YShjb25zdCBGb250RGVzY3Jp
cHRpb24mIGZvbnREZXNjcmlwdGlvbiwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRp
Y0l0YWxpYywgQ1NTRm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IpCitSZWZQdHI8Rm9udD4gQ1NT
Rm9udEZhY2VTb3VyY2U6OmZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24sIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMsIENTU0ZvbnRTZWxl
Y3RvciogZm9udFNlbGVjdG9yKQogewogICAgIC8vIElmIHRoZSBmb250IGhhc24ndCBsb2FkZWQg
b3IgYW4gZXJyb3Igb2NjdXJyZWQsIHRoZW4gd2UndmUgZ290IG5vdGhpbmcuCiAgICAgaWYgKCFp
c1ZhbGlkKCkpCkBAIC0xMTIsMTggKzExMiwxNyBAQCBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRh
PiBDU1NGb250RmFjZVNvCiAgICAgICAgICAgICAmJiAhbV9zdmdGb250RmFjZUVsZW1lbnQKICNl
bmRpZgogICAgICkgewotICAgICAgICAvLyBXZSdyZSBsb2NhbC4gSnVzdCByZXR1cm4gYSBTaW1w
bGVGb250RGF0YSBmcm9tIHRoZSBub3JtYWwgY2FjaGUuCisgICAgICAgIC8vIFdlJ3JlIGxvY2Fs
LiBKdXN0IHJldHVybiBhIEZvbnQgZnJvbSB0aGUgbm9ybWFsIGNhY2hlLgogICAgICAgICAvLyBX
ZSBkb24ndCB3YW50IHRvIGNoZWNrIGFsdGVybmF0ZSBmb250IGZhbWlseSBuYW1lcyBoZXJlLCBz
byBwYXNzIHRydWUgYXMgdGhlIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSBwYXJhbWV0ZXIuCiAgICAg
ICAgIHJldHVybiBmb250Q2FjaGUoKS5mb250Rm9yRmFtaWx5KGZvbnREZXNjcmlwdGlvbiwgbV9z
dHJpbmcsIHRydWUpOwogICAgIH0KIAotICAgIC8vIFNlZSBpZiB3ZSBoYXZlIGEgbWFwcGluZyBp
biBvdXIgRm9udERhdGEgY2FjaGUuCiAgICAgdW5zaWduZWQgaGFzaEtleSA9IChmb250RGVzY3Jp
cHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSArIDEpIDw8IDUgfCBmb250RGVzY3JpcHRpb24ud2lk
dGhWYXJpYW50KCkgPDwgMwogICAgICAgICAgICAgICAgICAgICAgICB8IChmb250RGVzY3JpcHRp
b24ub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCA/IDQgOiAwKSB8IChzeW50aGV0aWNCb2xkID8g
MiA6IDApIHwgKHN5bnRoZXRpY0l0YWxpYyA/IDEgOiAwKTsKIAotICAgIFJlZlB0cjxTaW1wbGVG
b250RGF0YT4gZm9udERhdGEgPSBtX2ZvbnREYXRhVGFibGUuYWRkKGhhc2hLZXksIG51bGxwdHIp
Lml0ZXJhdG9yLT52YWx1ZTsKLSAgICBpZiAoZm9udERhdGEpCi0gICAgICAgIHJldHVybiBmb250
RGF0YS5yZWxlYXNlKCk7CisgICAgUmVmUHRyPEZvbnQ+IGZvbnQgPSBtX2ZvbnRUYWJsZS5hZGQo
aGFzaEtleSwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOworICAgIGlmIChmb250KQorICAgICAg
ICByZXR1cm4gZm9udC5yZWxlYXNlKCk7CiAKICAgICAvLyBJZiB3ZSBhcmUgc3RpbGwgbG9hZGlu
ZywgdGhlbiB3ZSBsZXQgdGhlIHN5c3RlbSBwaWNrIGEgZm9udC4KICAgICBpZiAoaXNMb2FkZWQo
KSkgewpAQCAtMTM2LDcgKzEzNSw3IEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IENTU0Zv
bnRGYWNlU28KICAgICAgICAgICAgIGlmICghbV9mb250LT5lbnN1cmVDdXN0b21Gb250RGF0YSho
YXNFeHRlcm5hbFNWR0ZvbnQsIG1fc3RyaW5nKSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAotICAgICAgICAgICAgZm9udERhdGEgPSBtX2ZvbnQtPmdldEZvbnREYXRhKGZvbnRE
ZXNjcmlwdGlvbiwgbV9zdHJpbmcsIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYywgaGFz
RXh0ZXJuYWxTVkdGb250KTsKKyAgICAgICAgICAgIGZvbnQgPSBtX2ZvbnQtPmNyZWF0ZUZvbnQo
Zm9udERlc2NyaXB0aW9uLCBtX3N0cmluZywgc3ludGhldGljQm9sZCwgc3ludGhldGljSXRhbGlj
LCBoYXNFeHRlcm5hbFNWR0ZvbnQpOwogICAgICAgICB9IGVsc2UgewogI2lmIEVOQUJMRShTVkdf
Rk9OVFMpCiAgICAgICAgICAgICAvLyBJbi1Eb2N1bWVudCBTVkcgRm9udHMKQEAgLTE1Miw5ICsx
NTEsOSBAQCBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBDU1NGb250RmFjZVNvCiAgICAgICAg
ICAgICAgICAgaWYgKCFtX2dlbmVyYXRlZE9URkJ1ZmZlcikKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEZvbnRDdXN0
b21QbGF0Zm9ybURhdGE+IGN1c3RvbVBsYXRmb3JtRGF0YSA9IGNyZWF0ZUZvbnRDdXN0b21QbGF0
Zm9ybURhdGEoKm1fZ2VuZXJhdGVkT1RGQnVmZmVyKTsKLSAgICAgICAgICAgICAgICBmb250RGF0
YSA9IFNpbXBsZUZvbnREYXRhOjpjcmVhdGUoY3VzdG9tUGxhdGZvcm1EYXRhLT5mb250UGxhdGZv
cm1EYXRhKHN0YXRpY19jYXN0PGludD4oZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXpl
KCkpLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMsIGZvbnREZXNjcmlwdGlvbi5vcmll
bnRhdGlvbigpLCBmb250RGVzY3JpcHRpb24ud2lkdGhWYXJpYW50KCksIGZvbnREZXNjcmlwdGlv
bi5yZW5kZXJpbmdNb2RlKCkpLCB0cnVlLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgZm9udCA9
IEZvbnQ6OmNyZWF0ZShjdXN0b21QbGF0Zm9ybURhdGEtPmZvbnRQbGF0Zm9ybURhdGEoc3RhdGlj
X2Nhc3Q8aW50Pihmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSksIHN5bnRoZXRp
Y0JvbGQsIHN5bnRoZXRpY0l0YWxpYywgZm9udERlc2NyaXB0aW9uLm9yaWVudGF0aW9uKCksIGZv
bnREZXNjcmlwdGlvbi53aWR0aFZhcmlhbnQoKSwgZm9udERlc2NyaXB0aW9uLnJlbmRlcmluZ01v
ZGUoKSksIHRydWUsIGZhbHNlKTsKICNlbHNlCi0gICAgICAgICAgICAgICAgZm9udERhdGEgPSBT
aW1wbGVGb250RGF0YTo6Y3JlYXRlKHN0ZDo6bWFrZV91bmlxdWU8U1ZHRm9udERhdGE+KG1fc3Zn
Rm9udEZhY2VFbGVtZW50LmdldCgpKSwgZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXpl
KCksIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYyk7CisgICAgICAgICAgICAgICAgZm9u
dCA9IEZvbnQ6OmNyZWF0ZShzdGQ6Om1ha2VfdW5pcXVlPFNWR0ZvbnREYXRhPihtX3N2Z0ZvbnRG
YWNlRWxlbWVudC5nZXQoKSksIGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpLCBz
eW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMpOwogI2VuZGlmCiAgICAgICAgICAgICB9CiAj
ZW5kaWYKQEAgLTE2NCwxMiArMTYzLDEyIEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IENT
U0ZvbnRGYWNlU28KICAgICAgICAgLy8gYW5kIHRoZSBsb2FkZXIgbWF5IGludm9rZSBhcmJpdHJh
cnkgZGVsZWdhdGUgb3IgZXZlbnQgaGFuZGxlciBjb2RlLgogICAgICAgICBmb250U2VsZWN0b3It
PmJlZ2luTG9hZGluZ0ZvbnRTb29uKG1fZm9udC5nZXQoKSk7CiAKLSAgICAgICAgUmVmPFNpbXBs
ZUZvbnREYXRhPiBwbGFjZWhvbGRlckZvbnQgPSBmb250Q2FjaGUoKS5sYXN0UmVzb3J0RmFsbGJh
Y2tGb250KGZvbnREZXNjcmlwdGlvbik7Ci0gICAgICAgIFJlZjxTaW1wbGVGb250RGF0YT4gcGxh
Y2Vob2xkZXJGb250Q29weUluTG9hZGluZ1N0YXRlID0gU2ltcGxlRm9udERhdGE6OmNyZWF0ZShw
bGFjZWhvbGRlckZvbnQtPnBsYXRmb3JtRGF0YSgpLCB0cnVlLCB0cnVlKTsKKyAgICAgICAgUmVm
PEZvbnQ+IHBsYWNlaG9sZGVyRm9udCA9IGZvbnRDYWNoZSgpLmxhc3RSZXNvcnRGYWxsYmFja0Zv
bnQoZm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgUmVmPEZvbnQ+IHBsYWNlaG9sZGVyRm9udENv
cHlJbkxvYWRpbmdTdGF0ZSA9IEZvbnQ6OmNyZWF0ZShwbGFjZWhvbGRlckZvbnQtPnBsYXRmb3Jt
RGF0YSgpLCB0cnVlLCB0cnVlKTsKICAgICAgICAgcmV0dXJuIFdURjo6bW92ZShwbGFjZWhvbGRl
ckZvbnRDb3B5SW5Mb2FkaW5nU3RhdGUpOwogICAgIH0KIAotICAgIHJldHVybiBmb250RGF0YS5y
ZWxlYXNlKCk7CisgICAgcmV0dXJuIGZvbnQucmVsZWFzZSgpOwogfQogCiAjaWYgRU5BQkxFKEZP
TlRfTE9BRF9FVkVOVFMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3Vy
Y2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2Uu
aAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291
cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDggKzQyLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogY2xhc3MgQ2FjaGVkRm9udDsKIGNsYXNzIENTU0ZvbnRGYWNlOwogY2xhc3MgQ1NTRm9udFNl
bGVjdG9yOworY2xhc3MgRm9udDsKIGNsYXNzIEZvbnREZXNjcmlwdGlvbjsKLWNsYXNzIFNpbXBs
ZUZvbnREYXRhOwogCiBjbGFzcyBDU1NGb250RmFjZVNvdXJjZSBmaW5hbCA6IHB1YmxpYyBDYWNo
ZWRGb250Q2xpZW50IHsKIHB1YmxpYzoKQEAgLTU5LDcgKzU5LDcgQEAgcHVibGljOgogCiAgICAg
dmlydHVhbCB2b2lkIGZvbnRMb2FkZWQoQ2FjaGVkRm9udCopIG92ZXJyaWRlOwogCi0gICAgUGFz
c1JlZlB0cjxTaW1wbGVGb250RGF0YT4gZ2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9u
JiwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYywgQ1NTRm9udFNlbGVj
dG9yKik7CisgICAgUmVmUHRyPEZvbnQ+IGZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgYm9v
bCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYywgQ1NTRm9udFNlbGVjdG9yKik7
CiAKICAgICB2b2lkIHBydW5lVGFibGUoKTsKIApAQCAtODEsNyArODEsNyBAQCBwcml2YXRlOgog
ICAgIEF0b21pY1N0cmluZyBtX3N0cmluZzsgLy8gVVJJIGZvciByZW1vdGUsIGJ1aWx0LWluIGZv
bnQgbmFtZSBmb3IgbG9jYWwuCiAgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkRm9udD4g
bV9mb250OyAvLyBGb3IgcmVtb3RlIGZvbnRzLCBhIHBvaW50ZXIgdG8gb3VyIGNhY2hlZCByZXNv
dXJjZS4KICAgICBDU1NGb250RmFjZSogbV9mYWNlOyAvLyBPdXIgb3duaW5nIGZvbnQgZmFjZS4K
LSAgICBIYXNoTWFwPHVuc2lnbmVkLCBSZWZQdHI8U2ltcGxlRm9udERhdGE+PiBtX2ZvbnREYXRh
VGFibGU7IC8vIFRoZSBoYXNoIGtleSBpcyBjb21wb3NlZCBvZiBzaXplIHN5bnRoZXRpYyBzdHls
ZXMuCisgICAgSGFzaE1hcDx1bnNpZ25lZCwgUmVmUHRyPEZvbnQ+PiBtX2ZvbnRUYWJsZTsgLy8g
VGhlIGhhc2gga2V5IGlzIGNvbXBvc2VkIG9mIHNpemUgc3ludGhldGljIHN0eWxlcy4KIAogI2lm
IEVOQUJMRShTVkdfT1RGX0NPTlZFUlRFUikKICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtX2dl
bmVyYXRlZE9URkJ1ZmZlcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3Iu
Y3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVj
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTMgKzQwLDEzIEBACiAjaW5jbHVkZSAiQ1NT
VmFsdWVMaXN0LmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKICNpbmNsdWRl
ICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGb250Q2FjaGUuaCIK
ICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAi
U1ZHRm9udEZhY2VFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJT
ZXR0aW5ncy5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5jbHVkZSAiU3R5bGVQ
cm9wZXJ0aWVzLmgiCiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgIlN0eWxl
UnVsZS5oIgpAQCAtNjEyLDcgKzYxMiw3IEBAIGJvb2wgQ1NTRm9udFNlbGVjdG9yOjpyZXNvbHZl
c0ZhbWlseUZvcigKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXNpemVfdCBDU1NGb250U2VsZWN0
b3I6OmZhbGxiYWNrRm9udERhdGFDb3VudCgpCitzaXplX3QgQ1NTRm9udFNlbGVjdG9yOjpmYWxs
YmFja0ZvbnRDb3VudCgpCiB7CiAgICAgaWYgKCFtX2RvY3VtZW50KQogICAgICAgICByZXR1cm4g
MDsKQEAgLTYyMyw3ICs2MjMsNyBAQCBzaXplX3QgQ1NTRm9udFNlbGVjdG9yOjpmYWxsYmFja0Zv
bnREYXRhCiAgICAgcmV0dXJuIDA7CiB9CiAKLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IENT
U0ZvbnRTZWxlY3Rvcjo6ZmFsbGJhY2tGb250RGF0YUF0KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
Zm9udERlc2NyaXB0aW9uLCBzaXplX3QgaW5kZXgpCitQYXNzUmVmUHRyPEZvbnQ+IENTU0ZvbnRT
ZWxlY3Rvcjo6ZmFsbGJhY2tGb250QXQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3Jp
cHRpb24sIHNpemVfdCBpbmRleCkKIHsKICAgICBBU1NFUlRfVU5VU0VEKGluZGV4LCAhaW5kZXgp
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5oCShyZXZpc2lvbiAxNzg4
NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDggKzI3LDggQEAKICNkZWZpbmUgQ1NTRm9udFNlbGVjdG9yX2gKIAogI2luY2x1
ZGUgIkNhY2hlZFJlc291cmNlSGFuZGxlLmgiCisjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUg
IkZvbnRTZWxlY3Rvci5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5jbHVkZSAi
VGltZXIuaCIKICNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KQEAg
LTU5LDggKzU5LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdW5zaWduZWQgdW5pcXVlSWQoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBtX3VuaXF1ZUlkOyB9CiAKICAgICB2aXJ0dWFsIEZvbnRS
YW5nZXMgZm9udFJhbmdlc0ZvckZhbWlseShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBB
dG9taWNTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHNpemVfdCBmYWxsYmFja0ZvbnRE
YXRhQ291bnQoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U2ltcGxlRm9udERh
dGE+IGZhbGxiYWNrRm9udERhdGFBdChjb25zdCBGb250RGVzY3JpcHRpb24mLCBzaXplX3QpIG92
ZXJyaWRlOworICAgIHZpcnR1YWwgc2l6ZV90IGZhbGxiYWNrRm9udENvdW50KCkgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEZvbnQ+IGZhbGxiYWNrRm9udEF0KGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYsIHNpemVfdCkgb3ZlcnJpZGU7CiAgICAgQ1NTU2VnbWVudGVkRm9udEZhY2Uq
IGdldEZvbnRGYWNlKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYg
ZmFtaWx5KTsKIAogICAgIHZpcnR1YWwgYm9vbCByZXNvbHZlc0ZhbWlseUZvcihjb25zdCBGb250
RGVzY3JpcHRpb24mKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NTZWdtZW50ZWRGb250RmFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1NlZ21lbnRlZEZvbnRGYWNlLmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dl
YkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAs
OSArMzAsOSBAQAogI2luY2x1ZGUgIkNTU0ZvbnRGYWNlU291cmNlLmgiCiAjaW5jbHVkZSAiQ1NT
Rm9udFNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGb250Lmgi
CiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRG
ZWF0dXJlcy5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtOTAsMjEgKzkwLDIxIEBAIHZvaWQgQ1NTU2VnbWVudGVkRm9udEZhY2U6OmFw
cGVuZEZvbnRGYWMKICAgICBtX2ZvbnRGYWNlcy5hcHBlbmQoZm9udEZhY2UpOwogfQogCi1zdGF0
aWMgdm9pZCBhcHBlbmRGb250RGF0YVdpdGhJbnZhbGlkVW5pY29kZVJhbmdlSWZMb2FkaW5nKEZv
bnRSYW5nZXMmIHJhbmdlcywgUmVmPFNpbXBsZUZvbnREYXRhPiYmIGZvbnREYXRhLCBjb25zdCBW
ZWN0b3I8Q1NTRm9udEZhY2U6OlVuaWNvZGVSYW5nZT4mIHVuaWNvZGVSYW5nZXMpCitzdGF0aWMg
dm9pZCBhcHBlbmRGb250V2l0aEludmFsaWRVbmljb2RlUmFuZ2VJZkxvYWRpbmcoRm9udFJhbmdl
cyYgcmFuZ2VzLCBSZWY8Rm9udD4mJiBmb250LCBjb25zdCBWZWN0b3I8Q1NTRm9udEZhY2U6OlVu
aWNvZGVSYW5nZT4mIHVuaWNvZGVSYW5nZXMpCiB7Ci0gICAgaWYgKGZvbnREYXRhLT5pc0xvYWRp
bmcoKSkgewotICAgICAgICByYW5nZXMuYXBwZW5kUmFuZ2UoRm9udFJhbmdlczo6UmFuZ2UoMCwg
MCwgV1RGOjptb3ZlKGZvbnREYXRhKSkpOworICAgIGlmIChmb250LT5pc0xvYWRpbmcoKSkgewor
ICAgICAgICByYW5nZXMuYXBwZW5kUmFuZ2UoRm9udFJhbmdlczo6UmFuZ2UoMCwgMCwgV1RGOjpt
b3ZlKGZvbnQpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICB1bnNpZ25lZCBudW1S
YW5nZXMgPSB1bmljb2RlUmFuZ2VzLnNpemUoKTsKICAgICBpZiAoIW51bVJhbmdlcykgewotICAg
ICAgICByYW5nZXMuYXBwZW5kUmFuZ2UoRm9udFJhbmdlczo6UmFuZ2UoMCwgMHg3RkZGRkZGRiwg
V1RGOjptb3ZlKGZvbnREYXRhKSkpOworICAgICAgICByYW5nZXMuYXBwZW5kUmFuZ2UoRm9udFJh
bmdlczo6UmFuZ2UoMCwgMHg3RkZGRkZGRiwgV1RGOjptb3ZlKGZvbnQpKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgbnVtUmFuZ2VzOyAr
K2opCi0gICAgICAgIHJhbmdlcy5hcHBlbmRSYW5nZShGb250UmFuZ2VzOjpSYW5nZSh1bmljb2Rl
UmFuZ2VzW2pdLmZyb20oKSwgdW5pY29kZVJhbmdlc1tqXS50bygpLCBmb250RGF0YS5jb3B5UmVm
KCkpKTsKKyAgICAgICAgcmFuZ2VzLmFwcGVuZFJhbmdlKEZvbnRSYW5nZXM6OlJhbmdlKHVuaWNv
ZGVSYW5nZXNbal0uZnJvbSgpLCB1bmljb2RlUmFuZ2VzW2pdLnRvKCksIGZvbnQuY29weVJlZigp
KSk7CiB9CiAKIEZvbnRSYW5nZXMgQ1NTU2VnbWVudGVkRm9udEZhY2U6OmZvbnRSYW5nZXMoY29u
c3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pCkBAIC0xMjgsOCArMTI4LDggQEAg
Rm9udFJhbmdlcyBDU1NTZWdtZW50ZWRGb250RmFjZTo6Zm9udFJhbgogICAgICAgICAgICAgRm9u
dFRyYWl0c01hc2sgdHJhaXRzTWFzayA9IGZhY2UtPnRyYWl0c01hc2soKTsKICAgICAgICAgICAg
IGJvb2wgc3ludGhldGljQm9sZCA9ICEodHJhaXRzTWFzayAmIChGb250V2VpZ2h0NjAwTWFzayB8
IEZvbnRXZWlnaHQ3MDBNYXNrIHwgRm9udFdlaWdodDgwME1hc2sgfCBGb250V2VpZ2h0OTAwTWFz
aykpICYmIChkZXNpcmVkVHJhaXRzTWFzayAmIChGb250V2VpZ2h0NjAwTWFzayB8IEZvbnRXZWln
aHQ3MDBNYXNrIHwgRm9udFdlaWdodDgwME1hc2sgfCBGb250V2VpZ2h0OTAwTWFzaykpOwogICAg
ICAgICAgICAgYm9vbCBzeW50aGV0aWNJdGFsaWMgPSAhKHRyYWl0c01hc2sgJiBGb250U3R5bGVJ
dGFsaWNNYXNrKSAmJiAoZGVzaXJlZFRyYWl0c01hc2sgJiBGb250U3R5bGVJdGFsaWNNYXNrKTsK
LSAgICAgICAgICAgIGlmIChSZWZQdHI8U2ltcGxlRm9udERhdGE+IGZhY2VGb250RGF0YSA9IGZh
Y2UtPmdldEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgc3ludGhldGljQm9sZCwgc3ludGhldGlj
SXRhbGljKSkKLSAgICAgICAgICAgICAgICBhcHBlbmRGb250RGF0YVdpdGhJbnZhbGlkVW5pY29k
ZVJhbmdlSWZMb2FkaW5nKGZvbnRSYW5nZXMsIGZhY2VGb250RGF0YS5yZWxlYXNlTm9uTnVsbCgp
LCBmYWNlLT5yYW5nZXMoKSk7CisgICAgICAgICAgICBpZiAoUmVmUHRyPEZvbnQ+IGZhY2VGb250
ID0gZmFjZS0+Zm9udChmb250RGVzY3JpcHRpb24sIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0
YWxpYykpCisgICAgICAgICAgICAgICAgYXBwZW5kRm9udFdpdGhJbnZhbGlkVW5pY29kZVJhbmdl
SWZMb2FkaW5nKGZvbnRSYW5nZXMsIGZhY2VGb250LnJlbGVhc2VOb25OdWxsKCksIGZhY2UtPnJh
bmdlcygpKTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gZm9udFJhbmdlczsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0b3IuaAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBjbGFz
cyBIaXRUZXN0UmVzdWx0OwogY2xhc3MgS2lsbFJpbmc7CiBjbGFzcyBQYXN0ZWJvYXJkOwogY2xh
c3MgU2hhcmVkQnVmZmVyOwotY2xhc3MgU2ltcGxlRm9udERhdGE7CitjbGFzcyBGb250OwogY2xh
c3MgU3BlbGxDaGVja1JlcXVlc3Q7CiBjbGFzcyBTcGVsbENoZWNrZXI7CiBjbGFzcyBTdHlsZVBy
b3BlcnRpZXM7CkBAIC00MjIsNyArNDIyLDcgQEAgcHVibGljOgogI2lmIFBMQVRGT1JNKENPQ09B
KQogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZW5kZXJTdHlsZSogc3R5bGVGb3JTZWxlY3Rp
b25TdGFydChGcmFtZSogLCBOb2RlICombm9kZVRvUmVtb3ZlKTsKICAgICBXRUJDT1JFX0VYUE9S
VCBib29sIGluc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVvdGVkQ29udGVudCgpOwotICAgIFdF
QkNPUkVfRVhQT1JUIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250Rm9yU2VsZWN0aW9uKGJvb2wm
KSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBGb250KiBmb250Rm9yU2VsZWN0aW9u
KGJvb2wmKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBOU0RpY3Rpb25hcnkgKmZvbnRBdHRy
aWJ1dGVzRm9yU2VsZWN0aW9uU3RhcnQoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBTdHJp
bmcgc3RyaW5nU2VsZWN0aW9uRm9yUGFzdGVib2FyZCgpOwogICAgIFN0cmluZyBzdHJpbmdTZWxl
Y3Rpb25Gb3JQYXN0ZWJvYXJkV2l0aEltYWdlQWx0VGV4dCgpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbQkocmV2aXNpb24gMTc4ODU3KQor
KysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTE0LDcgKzExMTQsNyBAQCBzdGF0aWMgUGxhdGZvcm1Gb250ICpfZm9udChF
bGVtZW50JiBlbGVtCiAgICAgYXV0byByZW5kZXJlciA9IGVsZW1lbnQucmVuZGVyZXIoKTsKICAg
ICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiByZW5kZXJl
ci0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmdldE5TRm9udCgpOwor
ICAgIHJldHVybiByZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCku
Z2V0TlNGb250KCk7CiB9CiAjZWxzZQogc3RhdGljIFBsYXRmb3JtRm9udCAqX2ZvbnQoRWxlbWVu
dCYgZWxlbWVudCkKQEAgLTExMjIsNyArMTEyMiw3IEBAIHN0YXRpYyBQbGF0Zm9ybUZvbnQgKl9m
b250KEVsZW1lbnQmIGVsZW0KICAgICBhdXRvIHJlbmRlcmVyID0gZWxlbWVudC5yZW5kZXJlcigp
OwogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIChQ
bGF0Zm9ybUZvbnQgKilyZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250
RGF0YSgpLmdldENURm9udCgpOworICAgIHJldHVybiAoUGxhdGZvcm1Gb250ICopcmVuZGVyZXIt
PnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpLmdldENURm9udCgpOwogfQogI2Vu
ZGlmCiAKQEAgLTI1OTQsMTAgKzI1OTQsMTAgQEAgTlNBdHRyaWJ1dGVkU3RyaW5nICplZGl0aW5n
QXR0cmlidXRlZFN0cgogICAgICAgICAgICAgW2F0dHJzLmdldCgpIHNldE9iamVjdDpbTlNOdW1i
ZXIgbnVtYmVyV2l0aEludGVnZXI6TlNVbmRlcmxpbmVTdHlsZVNpbmdsZV0gZm9yS2V5Ok5TVW5k
ZXJsaW5lU3R5bGVBdHRyaWJ1dGVOYW1lXTsKICAgICAgICAgaWYgKHN0eWxlLnRleHREZWNvcmF0
aW9uc0luRWZmZWN0KCkgJiBUZXh0RGVjb3JhdGlvbkxpbmVUaHJvdWdoKQogICAgICAgICAgICAg
W2F0dHJzLmdldCgpIHNldE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aEludGVnZXI6TlNVbmRl
cmxpbmVTdHlsZVNpbmdsZV0gZm9yS2V5Ok5TU3RyaWtldGhyb3VnaFN0eWxlQXR0cmlidXRlTmFt
ZV07Ci0gICAgICAgIGlmIChOU0ZvbnQgKmZvbnQgPSBzdHlsZS5mb250Q2FzY2FkZSgpLnByaW1h
cnlGb250RGF0YSgpLmdldE5TRm9udCgpKQorICAgICAgICBpZiAoTlNGb250ICpmb250ID0gc3R5
bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpLmdldE5TRm9udCgpKQogICAgICAgICAgICAg
W2F0dHJzLmdldCgpIHNldE9iamVjdDpmb250IGZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgW2F0dHJzLmdldCgpIHNldE9iamVjdDpbZm9udE1h
bmFnZXIgY29udmVydEZvbnQ6V2ViRGVmYXVsdEZvbnQoKSB0b1NpemU6c3R5bGUuZm9udENhc2Nh
ZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5wbGF0Zm9ybURhdGEoKS5zaXplKCldIGZvcktleTpOU0Zv
bnRBdHRyaWJ1dGVOYW1lXTsKKyAgICAgICAgICAgIFthdHRycy5nZXQoKSBzZXRPYmplY3Q6W2Zv
bnRNYW5hZ2VyIGNvbnZlcnRGb250OldlYkRlZmF1bHRGb250KCkgdG9TaXplOnN0eWxlLmZvbnRD
YXNjYWRlKCkucHJpbWFyeUZvbnQoKS5wbGF0Zm9ybURhdGEoKS5zaXplKCldIGZvcktleTpOU0Zv
bnRBdHRyaWJ1dGVOYW1lXTsKICAgICAgICAgaWYgKHN0eWxlLnZpc2l0ZWREZXBlbmRlbnRDb2xv
cihDU1NQcm9wZXJ0eUNvbG9yKS5hbHBoYSgpKQogICAgICAgICAgICAgW2F0dHJzLmdldCgpIHNl
dE9iamVjdDpuc0NvbG9yKHN0eWxlLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNv
bG9yKSkgZm9yS2V5Ok5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07CiAgICAgICAgIGVs
c2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0JKHJldmlzaW9u
IDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQkod29y
a2luZyBjb3B5KQpAQCAtMjAzLDcgKzIwMyw3IEBAIGJvb2wgRWRpdG9yOjppbnNlcnRQYXJhZ3Jh
cGhTZXBhcmF0b3JJblEKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotY29uc3QgU2ltcGxlRm9udERh
dGEqIEVkaXRvcjo6Zm9udEZvclNlbGVjdGlvbihib29sJiBoYXNNdWx0aXBsZUZvbnRzKSBjb25z
dAorY29uc3QgRm9udCogRWRpdG9yOjpmb250Rm9yU2VsZWN0aW9uKGJvb2wmIGhhc011bHRpcGxl
Rm9udHMpIGNvbnN0CiB7CiAgICAgaGFzTXVsdGlwbGVGb250cyA9IGZhbHNlOwogCkBAIC0yMTEs
OSArMjExLDkgQEAgY29uc3QgU2ltcGxlRm9udERhdGEqIEVkaXRvcjo6Zm9udEZvclNlbAogICAg
ICAgICBOb2RlKiBub2RlVG9SZW1vdmU7CiAgICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHN0
eWxlRm9yU2VsZWN0aW9uU3RhcnQoJm1fZnJhbWUsIG5vZGVUb1JlbW92ZSk7IC8vIHNldHMgbm9k
ZVRvUmVtb3ZlCiAKLSAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIHJlc3VsdCA9IG51bGxw
dHI7CisgICAgICAgIGNvbnN0IEZvbnQqIHJlc3VsdCA9IG51bGxwdHI7CiAgICAgICAgIGlmIChz
dHlsZSkKLSAgICAgICAgICAgIHJlc3VsdCA9ICZzdHlsZS0+Zm9udENhc2NhZGUoKS5wcmltYXJ5
Rm9udERhdGEoKTsKKyAgICAgICAgICAgIHJlc3VsdCA9ICZzdHlsZS0+Zm9udENhc2NhZGUoKS5w
cmltYXJ5Rm9udCgpOwogCiAgICAgICAgIGlmIChub2RlVG9SZW1vdmUpIHsKICAgICAgICAgICAg
IEV4Y2VwdGlvbkNvZGUgZWM7CkBAIC0yMjQsNyArMjI0LDcgQEAgY29uc3QgU2ltcGxlRm9udERh
dGEqIEVkaXRvcjo6Zm9udEZvclNlbAogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAot
ICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250ID0gMDsKKyAgICBjb25zdCBGb250KiBmb250
ID0gMDsKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS50b05v
cm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmIChOb2RlKiBzdGFydE5vZGUgPSBhZGp1c3RlZFNlbGVj
dGlvblN0YXJ0Rm9yU3R5bGVDb21wdXRhdGlvbihtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpKS5kZXByZWNhdGVkTm9kZSgpKSB7CiAgICAgICAgIE5vZGUqIHBhc3RFbmQgPSByYW5nZS0+
cGFzdExhc3ROb2RlKCk7CkBAIC0yMzUsNyArMjM1LDcgQEAgY29uc3QgU2ltcGxlRm9udERhdGEq
IEVkaXRvcjo6Zm9udEZvclNlbAogICAgICAgICAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBBcmUgdGhlcmUgYW55IG5v
ZGUgdHlwZXMgdGhhdCBoYXZlIHJlbmRlcmVycywgYnV0IHRoYXQgd2Ugc2hvdWxkIGJlIHNraXBw
aW5nPwotICAgICAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEmIHByaW1hcnlGb250ID0gcmVu
ZGVyZXItPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKTsKKyAgICAgICAg
ICAgIGNvbnN0IEZvbnQmIHByaW1hcnlGb250ID0gcmVuZGVyZXItPnN0eWxlKCkuZm9udENhc2Nh
ZGUoKS5wcmltYXJ5Rm9udCgpOwogICAgICAgICAgICAgaWYgKCFmb250KQogICAgICAgICAgICAg
ICAgIGZvbnQgPSAmcHJpbWFyeUZvbnQ7CiAgICAgICAgICAgICBlbHNlIGlmIChmb250ICE9ICZw
cmltYXJ5Rm9udCkgewpAQCAtMjU3LDcgKzI1Nyw3IEBAIE5TRGljdGlvbmFyeSogRWRpdG9yOjpm
b250QXR0cmlidXRlc0ZvclMKIAogICAgIE5TTXV0YWJsZURpY3Rpb25hcnkqIHJlc3VsdCA9IFtO
U011dGFibGVEaWN0aW9uYXJ5IGRpY3Rpb25hcnldOwogICAgIAotICAgIENURm9udFJlZiBmb250
ID0gc3R5bGUtPmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0Q1RGb250KCk7Cisg
ICAgQ1RGb250UmVmIGZvbnQgPSBzdHlsZS0+Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpLmdl
dENURm9udCgpOwogICAgIGlmIChmb250KQogICAgICAgICBbcmVzdWx0IHNldE9iamVjdDooaWQp
Zm9udCBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL21hYy9FZGl0b3JNYWMubW0JKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTA1LDcgKzEw
NSw3IEBAIGJvb2wgRWRpdG9yOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJblEKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotY29uc3QgU2ltcGxlRm9udERhdGEqIEVkaXRvcjo6Zm9udEZvclNlbGVj
dGlvbihib29sJiBoYXNNdWx0aXBsZUZvbnRzKSBjb25zdAorY29uc3QgRm9udCogRWRpdG9yOjpm
b250Rm9yU2VsZWN0aW9uKGJvb2wmIGhhc011bHRpcGxlRm9udHMpIGNvbnN0CiB7CiAgICAgaGFz
TXVsdGlwbGVGb250cyA9IGZhbHNlOwogCkBAIC0xMTMsOSArMTEzLDkgQEAgY29uc3QgU2ltcGxl
Rm9udERhdGEqIEVkaXRvcjo6Zm9udEZvclNlbAogICAgICAgICBOb2RlKiBub2RlVG9SZW1vdmU7
CiAgICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQoJm1f
ZnJhbWUsIG5vZGVUb1JlbW92ZSk7IC8vIHNldHMgbm9kZVRvUmVtb3ZlCiAKLSAgICAgICAgY29u
c3QgU2ltcGxlRm9udERhdGEqIHJlc3VsdCA9IG51bGxwdHI7CisgICAgICAgIGNvbnN0IEZvbnQq
IHJlc3VsdCA9IG51bGxwdHI7CiAgICAgICAgIGlmIChzdHlsZSkKLSAgICAgICAgICAgIHJlc3Vs
dCA9ICZzdHlsZS0+Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKTsKKyAgICAgICAgICAg
IHJlc3VsdCA9ICZzdHlsZS0+Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpOwogCiAgICAgICAg
IGlmIChub2RlVG9SZW1vdmUpCiAgICAgICAgICAgICBub2RlVG9SZW1vdmUtPnJlbW92ZShBU1NF
UlRfTk9fRVhDRVBUSU9OKTsKQEAgLTEyMyw3ICsxMjMsNyBAQCBjb25zdCBTaW1wbGVGb250RGF0
YSogRWRpdG9yOjpmb250Rm9yU2VsCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0g
ICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQgPSAwOworICAgIGNvbnN0IEZvbnQqIGZvbnQg
PSAwOwogICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9y
bWFsaXplZFJhbmdlKCk7CiAgICAgTm9kZSogc3RhcnROb2RlID0gYWRqdXN0ZWRTZWxlY3Rpb25T
dGFydEZvclN0eWxlQ29tcHV0YXRpb24obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSku
ZGVwcmVjYXRlZE5vZGUoKTsKICAgICBpZiAocmFuZ2UgJiYgc3RhcnROb2RlKSB7CkBAIC0xMzUs
NyArMTM1LDcgQEAgY29uc3QgU2ltcGxlRm9udERhdGEqIEVkaXRvcjo6Zm9udEZvclNlbAogICAg
ICAgICAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgIC8vIEZJWE1FOiBBcmUgdGhlcmUgYW55IG5vZGUgdHlwZXMgdGhhdCBoYXZlIHJlbmRl
cmVycywgYnV0IHRoYXQgd2Ugc2hvdWxkIGJlIHNraXBwaW5nPwotICAgICAgICAgICAgY29uc3Qg
U2ltcGxlRm9udERhdGEmIHByaW1hcnlGb250ID0gcmVuZGVyZXItPnN0eWxlKCkuZm9udENhc2Nh
ZGUoKS5wcmltYXJ5Rm9udERhdGEoKTsKKyAgICAgICAgICAgIGNvbnN0IEZvbnQmIHByaW1hcnlG
b250ID0gcmVuZGVyZXItPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpOwogICAg
ICAgICAgICAgaWYgKCFmb250KQogICAgICAgICAgICAgICAgIGZvbnQgPSAmcHJpbWFyeUZvbnQ7
CiAgICAgICAgICAgICBlbHNlIGlmIChmb250ICE9ICZwcmltYXJ5Rm9udCkgewpAQCAtMTYwLDgg
KzE2MCw4IEBAIE5TRGljdGlvbmFyeSogRWRpdG9yOjpmb250QXR0cmlidXRlc0ZvclMKICAgICBp
ZiAoc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xv
cikuaXNWYWxpZCgpICYmIHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlC
YWNrZ3JvdW5kQ29sb3IpLmFscGhhKCkgIT0gMCkKICAgICAgICAgW3Jlc3VsdCBzZXRPYmplY3Q6
bnNDb2xvcihzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3Vu
ZENvbG9yKSkgZm9yS2V5Ok5TQmFja2dyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07CiAKLSAgICBp
ZiAoc3R5bGUtPmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0TlNGb250KCkpCi0g
ICAgICAgIFtyZXN1bHQgc2V0T2JqZWN0OnN0eWxlLT5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250
RGF0YSgpLmdldE5TRm9udCgpIGZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKKyAgICBpZiAo
c3R5bGUtPmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKS5nZXROU0ZvbnQoKSkKKyAgICAgICAg
W3Jlc3VsdCBzZXRPYmplY3Q6c3R5bGUtPmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKS5nZXRO
U0ZvbnQoKSBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CiAKICAgICBpZiAoc3R5bGUtPnZp
c2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKS5pc1ZhbGlkKCkgJiYgc3R5bGUt
PnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSAhPSBDb2xvcjo6YmxhY2sp
CiAgICAgICAgIFtyZXN1bHQgc2V0T2JqZWN0Om5zQ29sb3Ioc3R5bGUtPnZpc2l0ZWREZXBlbmRl
bnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSkgZm9yS2V5Ok5TRm9yZWdyb3VuZENvbG9yQXR0cmli
dXRlTmFtZV07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkRm9udC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQu
Y3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2Fj
aGVkRm9udC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5LDcgKzk5LDcgQEAgYm9vbCBDYWNoZWRG
b250OjplbnN1cmVDdXN0b21Gb250RGF0YShibwogCiBib29sIENhY2hlZEZvbnQ6OmVuc3VyZUN1
c3RvbUZvbnREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSkKIHsKLSAgICBpZiAoIW1fZm9udERhdGEg
JiYgIWVycm9yT2NjdXJyZWQoKSAmJiAhaXNMb2FkaW5nKCkgJiYgZGF0YSkgeworICAgIGlmICgh
bV9mb250Q3VzdG9tUGxhdGZvcm1EYXRhICYmICFlcnJvck9jY3VycmVkKCkgJiYgIWlzTG9hZGlu
ZygpICYmIGRhdGEpIHsKICAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyKGRhdGEp
OwogCiAjaWYgKCFQTEFURk9STShNQUMpIHx8IF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlS
RUQgPD0gMTA5MCkgJiYgKCFQTEFURk9STShJT1MpIHx8IF9fSVBIT05FX09TX1ZFUlNJT05fTUlO
X1JFUVVJUkVEIDwgODAwMDApCkBAIC0xMTIsMzAgKzExMiwzMCBAQCBib29sIENhY2hlZEZvbnQ6
OmVuc3VyZUN1c3RvbUZvbnREYXRhKFNoCiAgICAgICAgIH0KICNlbmRpZgogCi0gICAgICAgIG1f
Zm9udERhdGEgPSBidWZmZXIgPyBjcmVhdGVGb250Q3VzdG9tUGxhdGZvcm1EYXRhKCpidWZmZXIp
IDogbnVsbHB0cjsKLSAgICAgICAgbV9oYXNDcmVhdGVkRm9udERhdGFXcmFwcGluZ1Jlc291cmNl
ID0gbV9mb250RGF0YSAmJiAoYnVmZmVyID09IG1fZGF0YSk7Ci0gICAgICAgIGlmICghbV9mb250
RGF0YSkKKyAgICAgICAgbV9mb250Q3VzdG9tUGxhdGZvcm1EYXRhID0gYnVmZmVyID8gY3JlYXRl
Rm9udEN1c3RvbVBsYXRmb3JtRGF0YSgqYnVmZmVyKSA6IG51bGxwdHI7CisgICAgICAgIG1faGFz
Q3JlYXRlZEZvbnREYXRhV3JhcHBpbmdSZXNvdXJjZSA9IG1fZm9udEN1c3RvbVBsYXRmb3JtRGF0
YSAmJiAoYnVmZmVyID09IG1fZGF0YSk7CisgICAgICAgIGlmICghbV9mb250Q3VzdG9tUGxhdGZv
cm1EYXRhKQogICAgICAgICAgICAgc2V0U3RhdHVzKERlY29kZUVycm9yKTsKICAgICB9CiAKLSAg
ICByZXR1cm4gbV9mb250RGF0YS5nZXQoKTsKKyAgICByZXR1cm4gbV9mb250Q3VzdG9tUGxhdGZv
cm1EYXRhLmdldCgpOwogfQogCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBDYWNoZWRGb250
OjpnZXRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29u
c3QgQXRvbWljU3RyaW5nJiwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxp
YywgYm9vbCkKK1JlZlB0cjxGb250PiBDYWNoZWRGb250OjpjcmVhdGVGb250KGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmLCBib29sIHN5
bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljLCBib29sKQogewotICAgIHJldHVybiBT
aW1wbGVGb250RGF0YTo6Y3JlYXRlKHBsYXRmb3JtRGF0YUZyb21DdXN0b21EYXRhKGZvbnREZXNj
cmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFs
aWMsCisgICAgcmV0dXJuIEZvbnQ6OmNyZWF0ZShwbGF0Zm9ybURhdGFGcm9tQ3VzdG9tRGF0YShm
b250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSwgc3ludGhldGljQm9sZCwgc3ludGhl
dGljSXRhbGljLAogICAgICAgICBmb250RGVzY3JpcHRpb24ub3JpZW50YXRpb24oKSwgZm9udERl
c2NyaXB0aW9uLndpZHRoVmFyaWFudCgpLCBmb250RGVzY3JpcHRpb24ucmVuZGVyaW5nTW9kZSgp
KSwgdHJ1ZSwgZmFsc2UpOwogfQogCiBGb250UGxhdGZvcm1EYXRhIENhY2hlZEZvbnQ6OnBsYXRm
b3JtRGF0YUZyb21DdXN0b21EYXRhKGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMs
IEZvbnRPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgRm9udFdpZHRoVmFyaWFudCB3aWR0aFZhcmlh
bnQsIEZvbnRSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUpCiB7Ci0gICAgQVNTRVJUKG1fZm9u
dERhdGEpOwotICAgIHJldHVybiBtX2ZvbnREYXRhLT5mb250UGxhdGZvcm1EYXRhKHN0YXRpY19j
YXN0PGludD4oc2l6ZSksIGJvbGQsIGl0YWxpYywgb3JpZW50YXRpb24sIHdpZHRoVmFyaWFudCwg
cmVuZGVyaW5nTW9kZSk7CisgICAgQVNTRVJUKG1fZm9udEN1c3RvbVBsYXRmb3JtRGF0YSk7Cisg
ICAgcmV0dXJuIG1fZm9udEN1c3RvbVBsYXRmb3JtRGF0YS0+Zm9udFBsYXRmb3JtRGF0YShzdGF0
aWNfY2FzdDxpbnQ+KHNpemUpLCBib2xkLCBpdGFsaWMsIG9yaWVudGF0aW9uLCB3aWR0aFZhcmlh
bnQsIHJlbmRlcmluZ01vZGUpOwogfQogCiB2b2lkIENhY2hlZEZvbnQ6OmFsbENsaWVudHNSZW1v
dmVkKCkKIHsKLSAgICBtX2ZvbnREYXRhID0gbnVsbHB0cjsKKyAgICBtX2ZvbnRDdXN0b21QbGF0
Zm9ybURhdGEgPSBudWxscHRyOwogfQogCiB2b2lkIENhY2hlZEZvbnQ6OmNoZWNrTm90aWZ5KCkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRGb250LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQuaAkocmV2aXNpb24g
MTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMjgsMTAgKzI4LDEwIEBACiAKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJj
ZS5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCisjaW5jbHVkZSAiRm9udC5o
IgogI2luY2x1ZGUgIkZvbnRPcmllbnRhdGlvbi5oIgogI2luY2x1ZGUgIkZvbnRSZW5kZXJpbmdN
b2RlLmgiCiAjaW5jbHVkZSAiRm9udFdpZHRoVmFyaWFudC5oIgotI2luY2x1ZGUgIlNpbXBsZUZv
bnREYXRhLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTIsNyArNTIsNyBAQCBwdWJs
aWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgZW5zdXJlQ3VzdG9tRm9udERhdGEoYm9vbCBleHRlcm5h
bFNWRywgY29uc3QgQXRvbWljU3RyaW5nJiByZW1vdGVVUkkpOwogCi0gICAgdmlydHVhbCBQYXNz
UmVmUHRyPFNpbXBsZUZvbnREYXRhPiBnZXRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24m
LCBjb25zdCBBdG9taWNTdHJpbmcmIHJlbW90ZVVSSSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29s
IHN5bnRoZXRpY0l0YWxpYywgYm9vbCBleHRlcm5hbFNWRyk7CisgICAgdmlydHVhbCBSZWZQdHI8
Rm9udD4gY3JlYXRlRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9taWNTdHJp
bmcmIHJlbW90ZVVSSSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYywg
Ym9vbCBleHRlcm5hbFNWRyk7CiAKIHByb3RlY3RlZDoKICAgICBGb250UGxhdGZvcm1EYXRhIHBs
YXRmb3JtRGF0YUZyb21DdXN0b21EYXRhKGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBpdGFs
aWMsIEZvbnRPcmllbnRhdGlvbiA9IEhvcml6b250YWwsIEZvbnRXaWR0aFZhcmlhbnQgPSBSZWd1
bGFyV2lkdGgsIEZvbnRSZW5kZXJpbmdNb2RlID0gTm9ybWFsUmVuZGVyaW5nTW9kZSk7CkBAIC03
MCw3ICs3MCw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgYWxsQ2xpZW50c1JlbW92
ZWQoKSBvdmVycmlkZTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxGb250Q3VzdG9tUGxhdGZvcm1E
YXRhPiBtX2ZvbnREYXRhOworICAgIHN0ZDo6dW5pcXVlX3B0cjxGb250Q3VzdG9tUGxhdGZvcm1E
YXRhPiBtX2ZvbnRDdXN0b21QbGF0Zm9ybURhdGE7CiAgICAgYm9vbCBtX2xvYWRJbml0aWF0ZWQ7
CiAgICAgYm9vbCBtX2hhc0NyZWF0ZWRGb250RGF0YVdyYXBwaW5nUmVzb3VyY2U7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTVkdGb250LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU1ZHRm9udC5jcHAJKHJldmlz
aW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTVkdGb250
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsMTcgKzUxLDE3IEBAIENhY2hlZFNWR0ZvbnQ6OkNh
Y2hlZFNWR0ZvbnQoY29uc3QgUmVzb3UKIHsKIH0KIAotUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0
YT4gQ2FjaGVkU1ZHRm9udDo6Z2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgcmVtb3RlVVJJLCBib29sIHN5bnRoZXRp
Y0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljLCBib29sIGV4dGVybmFsU1ZHKQorUmVmUHRyPEZv
bnQ+IENhY2hlZFNWR0ZvbnQ6OmNyZWF0ZUZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgcmVtb3RlVVJJLCBib29sIHN5bnRoZXRp
Y0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljLCBib29sIGV4dGVybmFsU1ZHKQogewogI2lmIEVO
QUJMRShTVkdfT1RGX0NPTlZFUlRFUikKICAgICBpZiAoIWV4dGVybmFsU1ZHIHx8IGZpcnN0Rm9u
dEZhY2UocmVtb3RlVVJJKSkKLSAgICAgICAgcmV0dXJuIENhY2hlZEZvbnQ6OmdldEZvbnREYXRh
KGZvbnREZXNjcmlwdGlvbiwgcmVtb3RlVVJJLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFs
aWMsIGV4dGVybmFsU1ZHKTsKKyAgICAgICAgcmV0dXJuIENhY2hlZEZvbnQ6OmNyZWF0ZUZvbnQo
Zm9udERlc2NyaXB0aW9uLCByZW1vdGVVUkksIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxp
YywgZXh0ZXJuYWxTVkcpOwogI2Vsc2UKICAgICBpZiAoIWV4dGVybmFsU1ZHKQotICAgICAgICBy
ZXR1cm4gQ2FjaGVkRm9udDo6Z2V0Rm9udERhdGEoZm9udERlc2NyaXB0aW9uLCByZW1vdGVVUkks
IHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYywgZXh0ZXJuYWxTVkcpOworICAgICAgICBy
ZXR1cm4gQ2FjaGVkRm9udDo6Y3JlYXRlRm9udChmb250RGVzY3JpcHRpb24sIHJlbW90ZVVSSSwg
c3ludGhldGljQm9sZCwgc3ludGhldGljSXRhbGljLCBleHRlcm5hbFNWRyk7CiAKICAgICBpZiAo
U1ZHRm9udEZhY2VFbGVtZW50KiBmaXJzdEZvbnRGYWNlID0gdGhpcy0+Zmlyc3RGb250RmFjZShy
ZW1vdGVVUkkpKQotICAgICAgICByZXR1cm4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZShzdGQ6Om1h
a2VfdW5pcXVlPFNWR0ZvbnREYXRhPihmaXJzdEZvbnRGYWNlKSwgZm9udERlc2NyaXB0aW9uLmNv
bXB1dGVkUGl4ZWxTaXplKCksIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYyk7CisgICAg
ICAgIHJldHVybiBGb250OjpjcmVhdGUoc3RkOjptYWtlX3VuaXF1ZTxTVkdGb250RGF0YT4oZmly
c3RGb250RmFjZSksIGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpLCBzeW50aGV0
aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMpOwogI2VuZGlmCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU1ZHRm9udC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTVkdGb250LmgJKHJl
dmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTVkdG
b250LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogCiAgICAgdmly
dHVhbCBib29sIGVuc3VyZUN1c3RvbUZvbnREYXRhKGJvb2wgZXh0ZXJuYWxTVkcsIGNvbnN0IEF0
b21pY1N0cmluZyYgcmVtb3RlVVJJKSBvdmVycmlkZTsKICAgICAKLSAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8U2ltcGxlRm9udERhdGE+IGdldEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYs
IGNvbnN0IEF0b21pY1N0cmluZyYgcmVtb3RlVVJJLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wg
c3ludGhldGljSXRhbGljLCBib29sIGV4dGVybmFsU1ZHKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFs
IFJlZlB0cjxGb250PiBjcmVhdGVGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0
b21pY1N0cmluZyYgcmVtb3RlVVJJLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGlj
SXRhbGljLCBib29sIGV4dGVybmFsU1ZHKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICBGb250
UGxhdGZvcm1EYXRhIHBsYXRmb3JtRGF0YUZyb21DdXN0b21EYXRhKGZsb2F0IHNpemUsIGJvb2wg
Ym9sZCwgYm9vbCBpdGFsaWMsIEZvbnRPcmllbnRhdGlvbiA9IEhvcml6b250YWwsIEZvbnRXaWR0
aFZhcmlhbnQgPSBSZWd1bGFyV2lkdGgsIEZvbnRSZW5kZXJpbmdNb2RlID0gTm9ybWFsUmVuZGVy
aW5nTW9kZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNw
cAkocmV2aXNpb24gMTc4NjUwKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9TaW1wbGVGb250RGF0YS5jcHA6MTc4NjUwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NTYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDgsIDIwMTAsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YK
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5j
LiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgorCisjaWYgUExBVEZPUk0o
SU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVE
ID4gMTA4MCkKKyNpbmNsdWRlICJDb3JlVGV4dFNQSS5oIgorI2VuZGlmCisjaW5jbHVkZSAiRm9u
dENhY2hlLmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKKyNpbmNsdWRlICJPcGVuVHlwZU1h
dGhEYXRhLmgiCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2
ZXJEZXN0cm95ZWQuaD4KKworI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKKyNpbmNsdWRl
ICJPcGVuVHlwZVZlcnRpY2FsRGF0YS5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KwordW5zaWduZWQgR2x5cGhQYWdlOjpzX2NvdW50ID0gMDsKKworY29uc3QgZmxvYXQgc21hbGxD
YXBzRm9udFNpemVNdWx0aXBsaWVyID0gMC43ZjsKK2NvbnN0IGZsb2F0IGVtcGhhc2lzTWFya0Zv
bnRTaXplTXVsdGlwbGllciA9IDAuNWY7CisKK1NpbXBsZUZvbnREYXRhOjpTaW1wbGVGb250RGF0
YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEsIGJvb2wgaXNDdXN0b21Gb250
LCBib29sIGlzTG9hZGluZywgYm9vbCBpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKQorICAgIDog
bV9tYXhDaGFyV2lkdGgoLTEpCisgICAgLCBtX2F2Z0NoYXJXaWR0aCgtMSkKKyAgICAsIG1fcGxh
dGZvcm1EYXRhKHBsYXRmb3JtRGF0YSkKKyAgICAsIG1fdHJlYXRBc0ZpeGVkUGl0Y2goZmFsc2Up
CisgICAgLCBtX2lzQ3VzdG9tRm9udChpc0N1c3RvbUZvbnQpCisgICAgLCBtX2lzTG9hZGluZyhp
c0xvYWRpbmcpCisgICAgLCBtX2lzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2soaXNUZXh0T3JpZW50
YXRpb25GYWxsYmFjaykKKyAgICAsIG1faXNCcm9rZW5JZGVvZ3JhcGhGYWxsYmFjayhmYWxzZSkK
KyAgICAsIG1fbWF0aERhdGEobnVsbHB0cikKKyNpZiBFTkFCTEUoT1BFTlRZUEVfVkVSVElDQUwp
CisgICAgLCBtX3ZlcnRpY2FsRGF0YSgwKQorI2VuZGlmCisgICAgLCBtX2hhc1ZlcnRpY2FsR2x5
cGhzKGZhbHNlKQoreworICAgIHBsYXRmb3JtSW5pdCgpOworICAgIHBsYXRmb3JtR2x5cGhJbml0
KCk7CisgICAgcGxhdGZvcm1DaGFyV2lkdGhJbml0KCk7CisjaWYgRU5BQkxFKE9QRU5UWVBFX1ZF
UlRJQ0FMKQorICAgIGlmIChwbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCAm
JiAhaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaykgeworICAgICAgICBtX3ZlcnRpY2FsRGF0YSA9
IHBsYXRmb3JtRGF0YS52ZXJ0aWNhbERhdGEoKTsKKyAgICAgICAgbV9oYXNWZXJ0aWNhbEdseXBo
cyA9IG1fdmVydGljYWxEYXRhLmdldCgpICYmIG1fdmVydGljYWxEYXRhLT5oYXNWZXJ0aWNhbE1l
dHJpY3MoKTsKKyAgICB9CisjZW5kaWYKK30KKworU2ltcGxlRm9udERhdGE6OlNpbXBsZUZvbnRE
YXRhKHN0ZDo6dW5pcXVlX3B0cjxTVkdEYXRhPiBzdmdEYXRhLCBmbG9hdCBmb250U2l6ZSwgYm9v
bCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYykKKyAgICA6IG1fcGxhdGZvcm1E
YXRhKEZvbnRQbGF0Zm9ybURhdGEoZm9udFNpemUsIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0
YWxpYykpCisgICAgLCBtX3N2Z0RhdGEoV1RGOjptb3ZlKHN2Z0RhdGEpKQorICAgICwgbV90cmVh
dEFzRml4ZWRQaXRjaChmYWxzZSkKKyAgICAsIG1faXNDdXN0b21Gb250KHRydWUpCisgICAgLCBt
X2lzTG9hZGluZyhmYWxzZSkKKyAgICAsIG1faXNUZXh0T3JpZW50YXRpb25GYWxsYmFjayhmYWxz
ZSkKKyAgICAsIG1faXNCcm9rZW5JZGVvZ3JhcGhGYWxsYmFjayhmYWxzZSkKKyAgICAsIG1fbWF0
aERhdGEobnVsbHB0cikKKyNpZiBFTkFCTEUoT1BFTlRZUEVfVkVSVElDQUwpCisgICAgLCBtX3Zl
cnRpY2FsRGF0YSgwKQorI2VuZGlmCisgICAgLCBtX2hhc1ZlcnRpY2FsR2x5cGhzKGZhbHNlKQor
I2lmIFBMQVRGT1JNKElPUykKKyAgICAsIG1fc2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKGZhbHNl
KQorI2VuZGlmCit7CisgICAgbV9zdmdEYXRhLT5pbml0aWFsaXplRm9udERhdGEodGhpcywgZm9u
dFNpemUpOworfQorCisvLyBFc3RpbWF0ZXMgb2YgYXZnQ2hhcldpZHRoIGFuZCBtYXhDaGFyV2lk
dGggZm9yIHBsYXRmb3JtcyB0aGF0IGRvbid0IHN1cHBvcnQgYWNjZXNzaW5nIHRoZXNlIHZhbHVl
cyBmcm9tIHRoZSBmb250Lgordm9pZCBTaW1wbGVGb250RGF0YTo6aW5pdENoYXJXaWR0aHMoKQor
eworICAgIGF1dG8qIGdseXBoUGFnZVplcm8gPSBnbHlwaFBhZ2UoMCk7CisKKyAgICAvLyBUcmVh
dCB0aGUgd2lkdGggb2YgYSAnMCcgYXMgdGhlIGF2Z0NoYXJXaWR0aC4KKyAgICBpZiAobV9hdmdD
aGFyV2lkdGggPD0gMC5mICYmIGdseXBoUGFnZVplcm8pIHsKKyAgICAgICAgc3RhdGljIGNvbnN0
IFVDaGFyMzIgZGlnaXRaZXJvQ2hhciA9ICcwJzsKKyAgICAgICAgR2x5cGggZGlnaXRaZXJvR2x5
cGggPSBnbHlwaFBhZ2VaZXJvLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoZGlnaXRaZXJvQ2hhciku
Z2x5cGg7CisgICAgICAgIGlmIChkaWdpdFplcm9HbHlwaCkKKyAgICAgICAgICAgIG1fYXZnQ2hh
cldpZHRoID0gd2lkdGhGb3JHbHlwaChkaWdpdFplcm9HbHlwaCk7CisgICAgfQorCisgICAgLy8g
SWYgd2UgY2FuJ3QgcmV0cmlldmUgdGhlIHdpZHRoIG9mIGEgJzAnLCBmYWxsIGJhY2sgdG8gdGhl
IHggaGVpZ2h0LgorICAgIGlmIChtX2F2Z0NoYXJXaWR0aCA8PSAwLmYpCisgICAgICAgIG1fYXZn
Q2hhcldpZHRoID0gbV9mb250TWV0cmljcy54SGVpZ2h0KCk7CisKKyAgICBpZiAobV9tYXhDaGFy
V2lkdGggPD0gMC5mKQorICAgICAgICBtX21heENoYXJXaWR0aCA9IHN0ZDo6bWF4KG1fYXZnQ2hh
cldpZHRoLCBtX2ZvbnRNZXRyaWNzLmZsb2F0QXNjZW50KCkpOworfQorCit2b2lkIFNpbXBsZUZv
bnREYXRhOjpwbGF0Zm9ybUdseXBoSW5pdCgpCit7CisgICAgYXV0byogZ2x5cGhQYWdlWmVybyA9
IGdseXBoUGFnZSgwKTsKKyAgICBpZiAoIWdseXBoUGFnZVplcm8pIHsKKyAgICAgICAgbV9zcGFj
ZUdseXBoID0gMDsKKyAgICAgICAgbV9zcGFjZVdpZHRoID0gMDsKKyAgICAgICAgbV96ZXJvR2x5
cGggPSAwOworICAgICAgICBtX2FkanVzdGVkU3BhY2VXaWR0aCA9IDA7CisgICAgICAgIGRldGVy
bWluZVBpdGNoKCk7CisgICAgICAgIG1femVyb1dpZHRoU3BhY2VHbHlwaCA9IDA7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICAvLyBBc2sgZm9yIHRoZSBnbHlwaCBmb3IgMCB0byBhdm9p
ZCBwYWdpbmcgaW4gWkVSTyBXSURUSCBTUEFDRS4gQ29udHJvbCBjaGFyYWN0ZXJzLCBpbmNsdWRp
bmcgMCwKKyAgICAvLyBhcmUgbWFwcGVkIHRvIHRoZSBaRVJPIFdJRFRIIFNQQUNFIGdseXBoLgor
ICAgIG1femVyb1dpZHRoU3BhY2VHbHlwaCA9IGdseXBoUGFnZVplcm8tPmdseXBoRGF0YUZvckNo
YXJhY3RlcigwKS5nbHlwaDsKKworICAgIC8vIE5hc3R5IGhhY2sgdG8gZGV0ZXJtaW5lIGlmIHdl
IHNob3VsZCByb3VuZCBvciBjZWlsIHNwYWNlIHdpZHRocy4KKyAgICAvLyBJZiB0aGUgZm9udCBp
cyBtb25vc3BhY2Ugb3IgZmFrZSBtb25vc3BhY2Ugd2UgY2VpbCB0byBlbnN1cmUgdGhhdCAKKyAg
ICAvLyBldmVyeSBjaGFyYWN0ZXIgYW5kIHRoZSBzcGFjZSBhcmUgdGhlIHNhbWUgd2lkdGguICBP
dGhlcndpc2Ugd2Ugcm91bmQuCisgICAgbV9zcGFjZUdseXBoID0gZ2x5cGhQYWdlWmVyby0+Z2x5
cGhEYXRhRm9yQ2hhcmFjdGVyKCcgJykuZ2x5cGg7CisgICAgZmxvYXQgd2lkdGggPSB3aWR0aEZv
ckdseXBoKG1fc3BhY2VHbHlwaCk7CisgICAgbV9zcGFjZVdpZHRoID0gd2lkdGg7CisgICAgbV96
ZXJvR2x5cGggPSBnbHlwaFBhZ2VaZXJvLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoJzAnKS5nbHlw
aDsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldFplcm9XaWR0aCh3aWR0aEZvckdseXBoKG1femVyb0ds
eXBoKSk7CisgICAgZGV0ZXJtaW5lUGl0Y2goKTsKKyAgICBtX2FkanVzdGVkU3BhY2VXaWR0aCA9
IG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPyBjZWlsZih3aWR0aCkgOiByb3VuZGYod2lkdGgpOworCisg
ICAgLy8gRm9yY2UgdGhlIGdseXBoIGZvciBaRVJPIFdJRFRIIFNQQUNFIHRvIGhhdmUgemVybyB3
aWR0aCwgdW5sZXNzIGl0IGlzIHNoYXJlZCB3aXRoIFNQQUNFLgorICAgIC8vIEhlbHZldGljYSBp
cyBhbiBleGFtcGxlIG9mIGEgbm9uLXplcm8gd2lkdGggWkVSTyBXSURUSCBTUEFDRSBnbHlwaC4K
KyAgICAvLyBTZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMTc4
PiBhbmQgU2ltcGxlRm9udERhdGE6OmlzWmVyb1dpZHRoU3BhY2VHbHlwaCgpCisgICAgaWYgKG1f
emVyb1dpZHRoU3BhY2VHbHlwaCA9PSBtX3NwYWNlR2x5cGgpCisgICAgICAgIG1femVyb1dpZHRo
U3BhY2VHbHlwaCA9IDA7Cit9CisKK1NpbXBsZUZvbnREYXRhOjp+U2ltcGxlRm9udERhdGEoKQor
eworICAgIHJlbW92ZUZyb21TeXN0ZW1GYWxsYmFja0NhY2hlKCk7Cit9CisKK3N0YXRpYyBib29s
IGZpbGxHbHlwaFBhZ2UoR2x5cGhQYWdlJiBwYWdlVG9GaWxsLCB1bnNpZ25lZCBvZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25z
dCBTaW1wbGVGb250RGF0YSogZm9udERhdGEpCit7CisjaWYgRU5BQkxFKFNWR19GT05UUykKKyAg
ICBpZiAoYXV0byogc3ZnRGF0YSA9IGZvbnREYXRhLT5zdmdEYXRhKCkpCisgICAgICAgIHJldHVy
biBzdmdEYXRhLT5maWxsU1ZHR2x5cGhQYWdlKCZwYWdlVG9GaWxsLCBvZmZzZXQsIGxlbmd0aCwg
YnVmZmVyLCBidWZmZXJMZW5ndGgsIGZvbnREYXRhKTsKKyNlbmRpZgorICAgIGJvb2wgaGFzR2x5
cGhzID0gcGFnZVRvRmlsbC5maWxsKG9mZnNldCwgbGVuZ3RoLCBidWZmZXIsIGJ1ZmZlckxlbmd0
aCwgZm9udERhdGEpOworI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKKyAgICBpZiAoaGFz
R2x5cGhzICYmIGZvbnREYXRhLT52ZXJ0aWNhbERhdGEoKSkKKyAgICAgICAgZm9udERhdGEtPnZl
cnRpY2FsRGF0YSgpLT5zdWJzdGl0dXRlV2l0aFZlcnRpY2FsR2x5cGhzKGZvbnREYXRhLCAmcGFn
ZVRvRmlsbCwgb2Zmc2V0LCBsZW5ndGgpOworI2VuZGlmCisgICAgcmV0dXJuIGhhc0dseXBoczsK
K30KKworc3RhdGljIFJlZlB0cjxHbHlwaFBhZ2U+IGNyZWF0ZUFuZEZpbGxHbHlwaFBhZ2UodW5z
aWduZWQgcGFnZU51bWJlciwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQoreworI2lm
IFBMQVRGT1JNKElPUykKKyAgICAvLyBGSVhNRTogVGltZXMgTmV3IFJvbWFuIGNvbnRhaW5zIEFy
YWJpYyBnbHlwaHMsIGJ1dCBDb3JlIFRleHQgZG9lc24ndCBrbm93IGhvdyB0byBzaGFwZSB0aGVt
LiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzk4MjM5NzU+LgorICAgIC8vIE9uY2Ugd2UgaGF2ZSB0aGUg
Zml4IGZvciA8cmRhcjovL3Byb2JsZW0vOTgyMzk3NT4gdGhlbiByZW1vdmUgdGhpcyBjb2RlIHRv
Z2V0aGVyIHdpdGggU2ltcGxlRm9udERhdGE6OnNob3VsZE5vdEJlVXNlZEZvckFyYWJpYygpCisg
ICAgLy8gaW4gPHJkYXI6Ly9wcm9ibGVtLzEyMDk2ODM1Pi4KKyAgICBpZiAocGFnZU51bWJlciA9
PSA2ICYmIGZvbnREYXRhLT5zaG91bGROb3RCZVVzZWRGb3JBcmFiaWMoKSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisjZW5kaWYKKworICAgIHVuc2lnbmVkIHN0YXJ0ID0gcGFnZU51bWJlciAq
IEdseXBoUGFnZTo6c2l6ZTsKKyAgICBVQ2hhciBidWZmZXJbR2x5cGhQYWdlOjpzaXplICogMiAr
IDJdOworICAgIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aDsKKyAgICAvLyBGaWxsIGluIGEgYnVmZmVy
IHdpdGggdGhlIGVudGlyZSAicGFnZSIgb2YgY2hhcmFjdGVycyB0aGF0IHdlIHdhbnQgdG8gbG9v
ayB1cCBnbHlwaHMgZm9yLgorICAgIGlmIChVX0lTX0JNUChzdGFydCkpIHsKKyAgICAgICAgYnVm
ZmVyTGVuZ3RoID0gR2x5cGhQYWdlOjpzaXplOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgR2x5cGhQYWdlOjpzaXplOyBpKyspCisgICAgICAgICAgICBidWZmZXJbaV0gPSBzdGFy
dCArIGk7CisKKyAgICAgICAgaWYgKHN0YXJ0ID09IDApIHsKKyAgICAgICAgICAgIC8vIENvbnRy
b2wgY2hhcmFjdGVycyBtdXN0IG5vdCByZW5kZXIgYXQgYWxsLgorICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IDB4MjA7ICsraSkKKyAgICAgICAgICAgICAgICBidWZmZXJbaV0g
PSB6ZXJvV2lkdGhTcGFjZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDB4N0Y7IGkg
PCAweEEwOyBpKyspCisgICAgICAgICAgICAgICAgYnVmZmVyW2ldID0gemVyb1dpZHRoU3BhY2U7
CisgICAgICAgICAgICBidWZmZXJbc29mdEh5cGhlbl0gPSB6ZXJvV2lkdGhTcGFjZTsKKworICAg
ICAgICAgICAgLy8gXG4sIFx0LCBhbmQgbm9uYnJlYWtpbmcgc3BhY2UgbXVzdCByZW5kZXIgYXMg
YSBzcGFjZS4KKyAgICAgICAgICAgIGJ1ZmZlclsoaW50KSdcbiddID0gJyAnOworICAgICAgICAg
ICAgYnVmZmVyWyhpbnQpJ1x0J10gPSAnICc7CisgICAgICAgICAgICBidWZmZXJbbm9CcmVha1Nw
YWNlXSA9ICcgJzsKKyAgICAgICAgfSBlbHNlIGlmIChzdGFydCA9PSAobGVmdFRvUmlnaHRNYXJr
ICYgfihHbHlwaFBhZ2U6OnNpemUgLSAxKSkpIHsKKyAgICAgICAgICAgIC8vIExSTSwgUkxNLCBM
UkUsIFJMRSwgWldOSiwgWldKLCBhbmQgUERGIG11c3Qgbm90IHJlbmRlciBhdCBhbGwuCisgICAg
ICAgICAgICBidWZmZXJbbGVmdFRvUmlnaHRNYXJrIC0gc3RhcnRdID0gemVyb1dpZHRoU3BhY2U7
CisgICAgICAgICAgICBidWZmZXJbcmlnaHRUb0xlZnRNYXJrIC0gc3RhcnRdID0gemVyb1dpZHRo
U3BhY2U7CisgICAgICAgICAgICBidWZmZXJbbGVmdFRvUmlnaHRFbWJlZCAtIHN0YXJ0XSA9IHpl
cm9XaWR0aFNwYWNlOworICAgICAgICAgICAgYnVmZmVyW3JpZ2h0VG9MZWZ0RW1iZWQgLSBzdGFy
dF0gPSB6ZXJvV2lkdGhTcGFjZTsKKyAgICAgICAgICAgIGJ1ZmZlcltsZWZ0VG9SaWdodE92ZXJy
aWRlIC0gc3RhcnRdID0gemVyb1dpZHRoU3BhY2U7CisgICAgICAgICAgICBidWZmZXJbcmlnaHRU
b0xlZnRPdmVycmlkZSAtIHN0YXJ0XSA9IHplcm9XaWR0aFNwYWNlOworICAgICAgICAgICAgYnVm
ZmVyW3plcm9XaWR0aE5vbkpvaW5lciAtIHN0YXJ0XSA9IHplcm9XaWR0aFNwYWNlOworICAgICAg
ICAgICAgYnVmZmVyW3plcm9XaWR0aEpvaW5lciAtIHN0YXJ0XSA9IHplcm9XaWR0aFNwYWNlOwor
ICAgICAgICAgICAgYnVmZmVyW3BvcERpcmVjdGlvbmFsRm9ybWF0dGluZyAtIHN0YXJ0XSA9IHpl
cm9XaWR0aFNwYWNlOworICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0ID09IChvYmplY3RSZXBsYWNl
bWVudENoYXJhY3RlciAmIH4oR2x5cGhQYWdlOjpzaXplIC0gMSkpKSB7CisgICAgICAgICAgICAv
LyBPYmplY3QgcmVwbGFjZW1lbnQgY2hhcmFjdGVyIG11c3Qgbm90IHJlbmRlciBhdCBhbGwuCisg
ICAgICAgICAgICBidWZmZXJbb2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXIgLSBzdGFydF0gPSB6
ZXJvV2lkdGhTcGFjZTsKKyAgICAgICAgfSBlbHNlIGlmIChzdGFydCA9PSAoemVyb1dpZHRoTm9C
cmVha1NwYWNlICYgfihHbHlwaFBhZ2U6OnNpemUgLSAxKSkpIHsKKyAgICAgICAgICAgIC8vIFpX
TkJTL0JPTSBtdXN0IG5vdCByZW5kZXIgYXQgYWxsLgorICAgICAgICAgICAgYnVmZmVyW3plcm9X
aWR0aE5vQnJlYWtTcGFjZSAtIHN0YXJ0XSA9IHplcm9XaWR0aFNwYWNlOworICAgICAgICB9Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgYnVmZmVyTGVuZ3RoID0gR2x5cGhQYWdlOjpzaXplICogMjsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdseXBoUGFnZTo6c2l6ZTsgaSsrKSB7
CisgICAgICAgICAgICBpbnQgYyA9IGkgKyBzdGFydDsKKyAgICAgICAgICAgIGJ1ZmZlcltpICog
Ml0gPSBVMTZfTEVBRChjKTsKKyAgICAgICAgICAgIGJ1ZmZlcltpICogMiArIDFdID0gVTE2X1RS
QUlMKGMpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gTm93IHRoYXQgd2UgaGF2ZSBhIGJ1
ZmZlciBmdWxsIG9mIGNoYXJhY3RlcnMsIHdlIHdhbnQgdG8gZ2V0IGJhY2sgYW4gYXJyYXkKKyAg
ICAvLyBvZiBnbHlwaCBpbmRpY2VzLiBUaGlzIHBhcnQgaW52b2x2ZXMgY2FsbGluZyBpbnRvIHRo
ZSBwbGF0Zm9ybS1zcGVjaWZpYworICAgIC8vIHJvdXRpbmUgb2Ygb3VyIGdseXBoIG1hcCBmb3Ig
YWN0dWFsbHkgZmlsbGluZyBpbiB0aGUgcGFnZSB3aXRoIHRoZSBnbHlwaHMuCisgICAgLy8gU3Vj
Y2VzcyBpcyBub3QgZ3VhcmFudGVlZC4gRm9yIGV4YW1wbGUsIFRpbWVzIGZhaWxzIHRvIGZpbGwg
cGFnZSAyNjAsIGdpdmluZyBnbHlwaCBkYXRhCisgICAgLy8gZm9yIG9ubHkgMTI4IG91dCBvZiAy
NTYgY2hhcmFjdGVycy4KKyAgICBSZWZQdHI8R2x5cGhQYWdlPiBnbHlwaFBhZ2U7CisgICAgaWYg
KEdseXBoUGFnZTo6bWF5VXNlTWl4ZWRGb250RGF0YVdoZW5GaWxsaW5nKGJ1ZmZlciwgYnVmZmVy
TGVuZ3RoLCBmb250RGF0YSkpCisgICAgICAgIGdseXBoUGFnZSA9IEdseXBoUGFnZTo6Y3JlYXRl
Rm9yTWl4ZWRGb250RGF0YSgpOworICAgIGVsc2UKKyAgICAgICAgZ2x5cGhQYWdlID0gR2x5cGhQ
YWdlOjpjcmVhdGVGb3JTaW5nbGVGb250RGF0YShmb250RGF0YSk7CisKKyAgICBib29sIGhhdmVH
bHlwaHMgPSBmaWxsR2x5cGhQYWdlKCpnbHlwaFBhZ2UsIDAsIEdseXBoUGFnZTo6c2l6ZSwgYnVm
ZmVyLCBidWZmZXJMZW5ndGgsIGZvbnREYXRhKTsKKyAgICBpZiAoIWhhdmVHbHlwaHMpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgZ2x5cGhQYWdlLT5zZXRJbW11dGFibGUoKTsKKyAg
ICByZXR1cm4gZ2x5cGhQYWdlOworfQorCitjb25zdCBHbHlwaFBhZ2UqIFNpbXBsZUZvbnREYXRh
OjpnbHlwaFBhZ2UodW5zaWduZWQgcGFnZU51bWJlcikgY29uc3QKK3sKKyAgICBpZiAocGFnZU51
bWJlciA9PSAwKSB7CisgICAgICAgIGlmICghbV9nbHlwaFBhZ2VaZXJvKQorICAgICAgICAgICAg
bV9nbHlwaFBhZ2VaZXJvID0gY3JlYXRlQW5kRmlsbEdseXBoUGFnZSgwLCB0aGlzKTsKKyAgICAg
ICAgcmV0dXJuIG1fZ2x5cGhQYWdlWmVyby5nZXQoKTsKKyAgICB9CisgICAgYXV0byBhZGRSZXN1
bHQgPSBtX2dseXBoUGFnZXMuYWRkKHBhZ2VOdW1iZXIsIG51bGxwdHIpOworICAgIGlmIChhZGRS
ZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGNy
ZWF0ZUFuZEZpbGxHbHlwaFBhZ2UocGFnZU51bWJlciwgdGhpcyk7CisKKyAgICByZXR1cm4gYWRk
UmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKK30KKworR2x5cGggU2ltcGxlRm9udERhdGE6
OmdseXBoRm9yQ2hhcmFjdGVyKFVDaGFyMzIgY2hhcmFjdGVyKSBjb25zdAoreworICAgIGF1dG8q
IHBhZ2UgPSBnbHlwaFBhZ2UoY2hhcmFjdGVyIC8gR2x5cGhQYWdlOjpzaXplKTsKKyAgICBpZiAo
IXBhZ2UpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBwYWdlLT5nbHlwaEF0KGNoYXJh
Y3RlciAlIEdseXBoUGFnZTo6c2l6ZSk7Cit9CisKK0dseXBoRGF0YSBTaW1wbGVGb250RGF0YTo6
Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgY2hhcmFjdGVyKSBjb25zdAoreworICAgIGF1
dG8qIHBhZ2UgPSBnbHlwaFBhZ2UoY2hhcmFjdGVyIC8gR2x5cGhQYWdlOjpzaXplKTsKKyAgICBp
ZiAoIXBhZ2UpCisgICAgICAgIHJldHVybiBHbHlwaERhdGEoKTsKKyAgICByZXR1cm4gcGFnZS0+
Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3Rlcik7Cit9CisKK1Bhc3NSZWZQdHI8U2ltcGxl
Rm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjp2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250RGF0
YSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKKyAgICAgICAgbV9kZXJp
dmVkRm9udERhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPERlcml2ZWRGb250RGF0YT4oaXNDdXN0b21G
b250KCkpOworICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEtPnZlcnRpY2FsUmlnaHRPcmllbnRh
dGlvbikgeworICAgICAgICBGb250UGxhdGZvcm1EYXRhIHZlcnRpY2FsUmlnaHRQbGF0Zm9ybURh
dGEobV9wbGF0Zm9ybURhdGEpOworICAgICAgICB2ZXJ0aWNhbFJpZ2h0UGxhdGZvcm1EYXRhLnNl
dE9yaWVudGF0aW9uKEhvcml6b250YWwpOworICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+dmVy
dGljYWxSaWdodE9yaWVudGF0aW9uID0gY3JlYXRlKHZlcnRpY2FsUmlnaHRQbGF0Zm9ybURhdGEs
IGlzQ3VzdG9tRm9udCgpLCBmYWxzZSwgdHJ1ZSk7CisgICAgfQorICAgIHJldHVybiBtX2Rlcml2
ZWRGb250RGF0YS0+dmVydGljYWxSaWdodE9yaWVudGF0aW9uOworfQorCitQYXNzUmVmUHRyPFNp
bXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6dXByaWdodE9yaWVudGF0aW9uRm9udERhdGEo
KSBjb25zdAoreworICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEpCisgICAgICAgIG1fZGVyaXZl
ZEZvbnREYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxEZXJpdmVkRm9udERhdGE+KGlzQ3VzdG9tRm9u
dCgpKTsKKyAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhLT51cHJpZ2h0T3JpZW50YXRpb24pCisg
ICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT51cHJpZ2h0T3JpZW50YXRpb24gPSBjcmVhdGUobV9w
bGF0Zm9ybURhdGEsIGlzQ3VzdG9tRm9udCgpLCBmYWxzZSwgdHJ1ZSk7CisgICAgcmV0dXJuIG1f
ZGVyaXZlZEZvbnREYXRhLT51cHJpZ2h0T3JpZW50YXRpb247Cit9CisKK1Bhc3NSZWZQdHI8U2lt
cGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250
RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKK3sKKyAgICBpZiAoIW1fZGVyaXZl
ZEZvbnREYXRhKQorICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8
RGVyaXZlZEZvbnREYXRhPihpc0N1c3RvbUZvbnQoKSk7CisgICAgaWYgKCFtX2Rlcml2ZWRGb250
RGF0YS0+c21hbGxDYXBzKQorICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzID0g
Y3JlYXRlU2NhbGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9uLCBzbWFsbENhcHNGb250U2l6ZU11
bHRpcGxpZXIpOworCisgICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHM7Cit9
CisKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjplbXBoYXNpc01h
cmtGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QK
K3sKKyAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQorICAgICAgICBtX2Rlcml2ZWRGb250RGF0
YSA9IHN0ZDo6bWFrZV91bmlxdWU8RGVyaXZlZEZvbnREYXRhPihpc0N1c3RvbUZvbnQoKSk7Cisg
ICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrKQorICAgICAgICBtX2Rlcml2
ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9udERlc2Ny
aXB0aW9uLCBlbXBoYXNpc01hcmtGb250U2l6ZU11bHRpcGxpZXIpOworCisgICAgcmV0dXJuIG1f
ZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcms7Cit9CisKK1Bhc3NSZWZQdHI8U2ltcGxlRm9u
dERhdGE+IFNpbXBsZUZvbnREYXRhOjpicm9rZW5JZGVvZ3JhcGhGb250RGF0YSgpIGNvbnN0Cit7
CisgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKKyAgICAgICAgbV9kZXJpdmVkRm9udERhdGEg
PSBzdGQ6Om1ha2VfdW5pcXVlPERlcml2ZWRGb250RGF0YT4oaXNDdXN0b21Gb250KCkpOworICAg
IGlmICghbV9kZXJpdmVkRm9udERhdGEtPmJyb2tlbklkZW9ncmFwaCkgeworICAgICAgICBtX2Rl
cml2ZWRGb250RGF0YS0+YnJva2VuSWRlb2dyYXBoID0gY3JlYXRlKG1fcGxhdGZvcm1EYXRhLCBp
c0N1c3RvbUZvbnQoKSwgZmFsc2UpOworICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+YnJva2Vu
SWRlb2dyYXBoLT5tX2lzQnJva2VuSWRlb2dyYXBoRmFsbGJhY2sgPSB0cnVlOworICAgIH0KKyAg
ICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPmJyb2tlbklkZW9ncmFwaDsKK30KKworUGFzc1Jl
ZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6Om5vblN5bnRoZXRpY0l0YWxpY0Zv
bnREYXRhKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQorICAgICAgICBt
X2Rlcml2ZWRGb250RGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8RGVyaXZlZEZvbnREYXRhPihpc0N1
c3RvbUZvbnQoKSk7CisgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+bm9uU3ludGhldGljSXRh
bGljKSB7CisgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEgbm9uU3ludGhldGljSXRhbGljRm9udFBs
YXRmb3JtRGF0YShtX3BsYXRmb3JtRGF0YSk7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgICAg
IG5vblN5bnRoZXRpY0l0YWxpY0ZvbnRQbGF0Zm9ybURhdGEubV9zeW50aGV0aWNPYmxpcXVlID0g
ZmFsc2U7CisjZW5kaWYKKyAgICAgICAgbV9kZXJpdmVkRm9udERhdGEtPm5vblN5bnRoZXRpY0l0
YWxpYyA9IGNyZWF0ZShub25TeW50aGV0aWNJdGFsaWNGb250UGxhdGZvcm1EYXRhLCBpc0N1c3Rv
bUZvbnQoKSk7CisgICAgfQorICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+bm9uU3ludGhl
dGljSXRhbGljOworfQorCisjaWZuZGVmIE5ERUJVRworU3RyaW5nIFNpbXBsZUZvbnREYXRhOjpk
ZXNjcmlwdGlvbigpIGNvbnN0Cit7CisgICAgaWYgKGlzU1ZHRm9udCgpKQorICAgICAgICByZXR1
cm4gIltTVkcgZm9udF0iOworICAgIGlmIChpc0N1c3RvbUZvbnQoKSkKKyAgICAgICAgcmV0dXJu
ICJbY3VzdG9tIGZvbnRdIjsKKworICAgIHJldHVybiBwbGF0Zm9ybURhdGEoKS5kZXNjcmlwdGlv
bigpOworfQorI2VuZGlmCisKK2NvbnN0IE9wZW5UeXBlTWF0aERhdGEqIFNpbXBsZUZvbnREYXRh
OjptYXRoRGF0YSgpIGNvbnN0Cit7CisgICAgaWYgKG1faXNMb2FkaW5nKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICBpZiAoIW1fbWF0aERhdGEpIHsKKyAgICAgICAgbV9tYXRoRGF0YSA9
IE9wZW5UeXBlTWF0aERhdGE6OmNyZWF0ZShtX3BsYXRmb3JtRGF0YSk7CisgICAgICAgIGlmICgh
bV9tYXRoRGF0YS0+aGFzTWF0aERhdGEoKSkKKyAgICAgICAgICAgIG1fbWF0aERhdGEuY2xlYXIo
KTsKKyAgICB9CisgICAgcmV0dXJuIG1fbWF0aERhdGEuZ2V0KCk7Cit9CisKK1NpbXBsZUZvbnRE
YXRhOjpEZXJpdmVkRm9udERhdGE6On5EZXJpdmVkRm9udERhdGEoKQoreworfQorCitQYXNzUmVm
UHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlU2NhbGVkRm9udERhdGEo
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNjYWxlRmFjdG9y
KSBjb25zdAoreworICAgIGlmIChpc1NWR0ZvbnQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICByZXR1cm4gcGxhdGZvcm1DcmVhdGVTY2FsZWRGb250RGF0YShmb250RGVzY3JpcHRp
b24sIHNjYWxlRmFjdG9yKTsKK30KKworYm9vbCBTaW1wbGVGb250RGF0YTo6YXBwbHlUcmFuc2Zv
cm1zKEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNl
cywgc2l6ZV90IGdseXBoQ291bnQsIFR5cGVzZXR0aW5nRmVhdHVyZXMgdHlwZXNldHRpbmdGZWF0
dXJlcykgY29uc3QKK3sKKyAgICAvLyBXZSBuZWVkIHRvIGhhbmRsZSB0cmFuc2Zvcm1zIG9uIFNW
RyBmb250cyBpbnRlcm5hbGx5LCBzaW5jZSB0aGV5IGFyZSByZW5kZXJlZCBpbnRlcm5hbGx5Lgor
ICAgIEFTU0VSVCghaXNTVkdGb250KCkpOworI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JN
KE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+IDEwODApCisgICAgQ1RG
b250VHJhbnNmb3JtT3B0aW9ucyBvcHRpb25zID0gKHR5cGVzZXR0aW5nRmVhdHVyZXMgJiBLZXJu
aW5nID8ga0NURm9udFRyYW5zZm9ybUFwcGx5UG9zaXRpb25pbmcgOiAwKSB8ICh0eXBlc2V0dGlu
Z0ZlYXR1cmVzICYgTGlnYXR1cmVzID8ga0NURm9udFRyYW5zZm9ybUFwcGx5U2hhcGluZyA6IDAp
OworICAgIHJldHVybiBDVEZvbnRUcmFuc2Zvcm1HbHlwaHMobV9wbGF0Zm9ybURhdGEuY3RGb250
KCksIGdseXBocywgcmVpbnRlcnByZXRfY2FzdDxDR1NpemUqPihhZHZhbmNlcyksIGdseXBoQ291
bnQsIG9wdGlvbnMpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZ2x5cGhzKTsKKyAgICBVTlVT
RURfUEFSQU0oYWR2YW5jZXMpOworICAgIFVOVVNFRF9QQVJBTShnbHlwaENvdW50KTsKKyAgICBV
TlVTRURfUEFSQU0odHlwZXNldHRpbmdGZWF0dXJlcyk7CisgICAgcmV0dXJuIGZhbHNlOworI2Vu
ZGlmCit9CisKKy8vIEZvbnREYXRhcyBhcmUgbm90IHJlZmNvdW50ZWQgdG8gYXZvaWQgY3ljbGVz
LgordHlwZWRlZiBIYXNoTWFwPHN0ZDo6cGFpcjxVQ2hhcjMyLCB1bnNpZ25lZD4sIFNpbXBsZUZv
bnREYXRhKj4gQ2hhcmFjdGVyRmFsbGJhY2tNYXA7Cit0eXBlZGVmIEhhc2hNYXA8Y29uc3QgU2lt
cGxlRm9udERhdGEqLCBDaGFyYWN0ZXJGYWxsYmFja01hcD4gU3lzdGVtRmFsbGJhY2tDYWNoZTsK
Kworc3RhdGljIFN5c3RlbUZhbGxiYWNrQ2FjaGUmIHN5c3RlbUZhbGxiYWNrQ2FjaGUoKQorewor
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTeXN0ZW1GYWxsYmFja0NhY2hlPiBtYXA7CisgICAg
cmV0dXJuIG1hcC5nZXQoKTsKK30KKworUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250
RGF0YTo6c3lzdGVtRmFsbGJhY2tGb250RGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGNoYXJhY3Rl
ciwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgYm9vbCBpc0ZvclBsYXRmb3Jt
Rm9udCkgY29uc3QKK3sKKyAgICBhdXRvIGZvbnRBZGRSZXN1bHQgPSBzeXN0ZW1GYWxsYmFja0Nh
Y2hlKCkuYWRkKHRoaXMsIENoYXJhY3RlckZhbGxiYWNrTWFwKCkpOworCisgICAgYXV0byBrZXkg
PSBzdGQ6Om1ha2VfcGFpcihjaGFyYWN0ZXIsIGlzRm9yUGxhdGZvcm1Gb250KTsKKyAgICBhdXRv
IGNoYXJhY3RlckFkZFJlc3VsdCA9IGZvbnRBZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFkZChr
ZXksIG51bGxwdHIpOworCisgICAgU2ltcGxlRm9udERhdGEqJiBmYWxsYmFja0ZvbnREYXRhID0g
Y2hhcmFjdGVyQWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKKworICAgIGlmICghZmFsbGJhY2tG
b250RGF0YSkgeworICAgICAgICBVQ2hhciBjb2RlVW5pdHNbMl07CisgICAgICAgIGludCBjb2Rl
VW5pdHNMZW5ndGg7CisgICAgICAgIGlmIChVX0lTX0JNUChjaGFyYWN0ZXIpKSB7CisgICAgICAg
ICAgICBjb2RlVW5pdHNbMF0gPSBGb250Q2FzY2FkZTo6bm9ybWFsaXplU3BhY2VzKGNoYXJhY3Rl
cik7CisgICAgICAgICAgICBjb2RlVW5pdHNMZW5ndGggPSAxOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgY29kZVVuaXRzWzBdID0gVTE2X0xFQUQoY2hhcmFjdGVyKTsKKyAgICAgICAg
ICAgIGNvZGVVbml0c1sxXSA9IFUxNl9UUkFJTChjaGFyYWN0ZXIpOworICAgICAgICAgICAgY29k
ZVVuaXRzTGVuZ3RoID0gMjsKKyAgICAgICAgfQorCisgICAgICAgIGZhbGxiYWNrRm9udERhdGEg
PSBmb250Q2FjaGUoKS5zeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoZGVzY3JpcHRpb24sIHRo
aXMsIGlzRm9yUGxhdGZvcm1Gb250LCBjb2RlVW5pdHMsIGNvZGVVbml0c0xlbmd0aCkuZ2V0KCk7
CisgICAgICAgIGlmIChmYWxsYmFja0ZvbnREYXRhKQorICAgICAgICAgICAgZmFsbGJhY2tGb250
RGF0YS0+bV9pc1VzZWRJblN5c3RlbUZhbGxiYWNrQ2FjaGUgPSB0cnVlOworICAgIH0KKworICAg
IHJldHVybiBmYWxsYmFja0ZvbnREYXRhOworfQorCit2b2lkIFNpbXBsZUZvbnREYXRhOjpyZW1v
dmVGcm9tU3lzdGVtRmFsbGJhY2tDYWNoZSgpCit7CisgICAgc3lzdGVtRmFsbGJhY2tDYWNoZSgp
LnJlbW92ZSh0aGlzKTsKKworICAgIGlmICghbV9pc1VzZWRJblN5c3RlbUZhbGxiYWNrQ2FjaGUp
CisgICAgICAgIHJldHVybjsKKworICAgIGZvciAoYXV0byYgY2hhcmFjdGVyTWFwIDogc3lzdGVt
RmFsbGJhY2tDYWNoZSgpLnZhbHVlcygpKSB7CisgICAgICAgIFZlY3RvcjxzdGQ6OnBhaXI8VUNo
YXIzMiwgdW5zaWduZWQ+LCA1MTI+IHRvUmVtb3ZlOworICAgICAgICBmb3IgKGF1dG8mIGVudHJ5
IDogY2hhcmFjdGVyTWFwKSB7CisgICAgICAgICAgICBpZiAoZW50cnkudmFsdWUgPT0gdGhpcykK
KyAgICAgICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQoZW50cnkua2V5KTsKKyAgICAgICAgfQor
ICAgICAgICBmb3IgKGF1dG8mIGtleSA6IHRvUmVtb3ZlKQorICAgICAgICAgICAgY2hhcmFjdGVy
TWFwLnJlbW92ZShrZXkpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAJKHdvcmtpbmcgY29w
eSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisjaW5jbHVkZSAiRm9udC5oIgogCiAjaWYgUExBVEZP
Uk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJ
UkVEID4gMTA4MCkKICNpbmNsdWRlICJDb3JlVGV4dFNQSS5oIgpAQCAtNTAsNyArNTAsNyBAQCB1
bnNpZ25lZCBHbHlwaFBhZ2U6OnNfY291bnQgPSAwOwogY29uc3QgZmxvYXQgc21hbGxDYXBzRm9u
dFNpemVNdWx0aXBsaWVyID0gMC43ZjsKIGNvbnN0IGZsb2F0IGVtcGhhc2lzTWFya0ZvbnRTaXpl
TXVsdGlwbGllciA9IDAuNWY7CiAKLVNpbXBsZUZvbnREYXRhOjpTaW1wbGVGb250RGF0YShjb25z
dCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEsIGJvb2wgaXNDdXN0b21Gb250LCBib29s
IGlzTG9hZGluZywgYm9vbCBpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKQorRm9udDo6Rm9udChj
b25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEsIGJvb2wgaXNDdXN0b21Gb250LCBi
b29sIGlzTG9hZGluZywgYm9vbCBpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKQogICAgIDogbV9t
YXhDaGFyV2lkdGgoLTEpCiAgICAgLCBtX2F2Z0NoYXJXaWR0aCgtMSkKICAgICAsIG1fcGxhdGZv
cm1EYXRhKHBsYXRmb3JtRGF0YSkKQEAgLTc2LDcgKzc2LDcgQEAgU2ltcGxlRm9udERhdGE6OlNp
bXBsZUZvbnREYXRhKGNvbnN0IEZvbgogI2VuZGlmCiB9CiAKLVNpbXBsZUZvbnREYXRhOjpTaW1w
bGVGb250RGF0YShzdGQ6OnVuaXF1ZV9wdHI8U1ZHRGF0YT4gc3ZnRGF0YSwgZmxvYXQgZm9udFNp
emUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpCitGb250OjpGb250
KHN0ZDo6dW5pcXVlX3B0cjxTVkdEYXRhPiBzdmdEYXRhLCBmbG9hdCBmb250U2l6ZSwgYm9vbCBz
eW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYykKICAgICA6IG1fcGxhdGZvcm1EYXRh
KEZvbnRQbGF0Zm9ybURhdGEoZm9udFNpemUsIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxp
YykpCiAgICAgLCBtX3N2Z0RhdGEoV1RGOjptb3ZlKHN2Z0RhdGEpKQogICAgICwgbV90cmVhdEFz
Rml4ZWRQaXRjaChmYWxzZSkKQEAgLTkzLDExICs5MywxMSBAQCBTaW1wbGVGb250RGF0YTo6U2lt
cGxlRm9udERhdGEoc3RkOjp1bmlxCiAgICAgLCBtX3Nob3VsZE5vdEJlVXNlZEZvckFyYWJpYyhm
YWxzZSkKICNlbmRpZgogewotICAgIG1fc3ZnRGF0YS0+aW5pdGlhbGl6ZUZvbnREYXRhKHRoaXMs
IGZvbnRTaXplKTsKKyAgICBtX3N2Z0RhdGEtPmluaXRpYWxpemVGb250KHRoaXMsIGZvbnRTaXpl
KTsKIH0KIAogLy8gRXN0aW1hdGVzIG9mIGF2Z0NoYXJXaWR0aCBhbmQgbWF4Q2hhcldpZHRoIGZv
ciBwbGF0Zm9ybXMgdGhhdCBkb24ndCBzdXBwb3J0IGFjY2Vzc2luZyB0aGVzZSB2YWx1ZXMgZnJv
bSB0aGUgZm9udC4KLXZvaWQgU2ltcGxlRm9udERhdGE6OmluaXRDaGFyV2lkdGhzKCkKK3ZvaWQg
Rm9udDo6aW5pdENoYXJXaWR0aHMoKQogewogICAgIGF1dG8qIGdseXBoUGFnZVplcm8gPSBnbHlw
aFBhZ2UoMCk7CiAKQEAgLTExNyw3ICsxMTcsNyBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjppbml0
Q2hhcldpZHRocygpCiAgICAgICAgIG1fbWF4Q2hhcldpZHRoID0gc3RkOjptYXgobV9hdmdDaGFy
V2lkdGgsIG1fZm9udE1ldHJpY3MuZmxvYXRBc2NlbnQoKSk7CiB9CiAKLXZvaWQgU2ltcGxlRm9u
dERhdGE6OnBsYXRmb3JtR2x5cGhJbml0KCkKK3ZvaWQgRm9udDo6cGxhdGZvcm1HbHlwaEluaXQo
KQogewogICAgIGF1dG8qIGdseXBoUGFnZVplcm8gPSBnbHlwaFBhZ2UoMCk7CiAgICAgaWYgKCFn
bHlwaFBhZ2VaZXJvKSB7CkBAIC0xMzYsNyArMTM2LDcgQEAgdm9pZCBTaW1wbGVGb250RGF0YTo6
cGxhdGZvcm1HbHlwaEluaXQoKQogCiAgICAgLy8gTmFzdHkgaGFjayB0byBkZXRlcm1pbmUgaWYg
d2Ugc2hvdWxkIHJvdW5kIG9yIGNlaWwgc3BhY2Ugd2lkdGhzLgogICAgIC8vIElmIHRoZSBmb250
IGlzIG1vbm9zcGFjZSBvciBmYWtlIG1vbm9zcGFjZSB3ZSBjZWlsIHRvIGVuc3VyZSB0aGF0IAot
ICAgIC8vIGV2ZXJ5IGNoYXJhY3RlciBhbmQgdGhlIHNwYWNlIGFyZSB0aGUgc2FtZSB3aWR0aC4g
IE90aGVyd2lzZSB3ZSByb3VuZC4KKyAgICAvLyBldmVyeSBjaGFyYWN0ZXIgYW5kIHRoZSBzcGFj
ZSBhcmUgdGhlIHNhbWUgd2lkdGguIE90aGVyd2lzZSB3ZSByb3VuZC4KICAgICBtX3NwYWNlR2x5
cGggPSBnbHlwaFBhZ2VaZXJvLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoJyAnKS5nbHlwaDsKICAg
ICBmbG9hdCB3aWR0aCA9IHdpZHRoRm9yR2x5cGgobV9zcGFjZUdseXBoKTsKICAgICBtX3NwYWNl
V2lkdGggPSB3aWR0aDsKQEAgLTE0NywzNyArMTQ3LDM3IEBAIHZvaWQgU2ltcGxlRm9udERhdGE6
OnBsYXRmb3JtR2x5cGhJbml0KCkKIAogICAgIC8vIEZvcmNlIHRoZSBnbHlwaCBmb3IgWkVSTyBX
SURUSCBTUEFDRSB0byBoYXZlIHplcm8gd2lkdGgsIHVubGVzcyBpdCBpcyBzaGFyZWQgd2l0aCBT
UEFDRS4KICAgICAvLyBIZWx2ZXRpY2EgaXMgYW4gZXhhbXBsZSBvZiBhIG5vbi16ZXJvIHdpZHRo
IFpFUk8gV0lEVEggU1BBQ0UgZ2x5cGguCi0gICAgLy8gU2VlIDxodHRwOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzE3OD4gYW5kIFNpbXBsZUZvbnREYXRhOjppc1plcm9XaWR0
aFNwYWNlR2x5cGgoKQorICAgIC8vIFNlZSA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTMxNzg+IGFuZCBGb250Ojppc1plcm9XaWR0aFNwYWNlR2x5cGgoKQogICAgIGlm
IChtX3plcm9XaWR0aFNwYWNlR2x5cGggPT0gbV9zcGFjZUdseXBoKQogICAgICAgICBtX3plcm9X
aWR0aFNwYWNlR2x5cGggPSAwOwogfQogCi1TaW1wbGVGb250RGF0YTo6flNpbXBsZUZvbnREYXRh
KCkKK0ZvbnQ6On5Gb250KCkKIHsKICAgICByZW1vdmVGcm9tU3lzdGVtRmFsbGJhY2tDYWNoZSgp
OwogfQogCi1zdGF0aWMgYm9vbCBmaWxsR2x5cGhQYWdlKEdseXBoUGFnZSYgcGFnZVRvRmlsbCwg
dW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIsIHVuc2lnbmVk
IGJ1ZmZlckxlbmd0aCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQorc3RhdGljIGJv
b2wgZmlsbEdseXBoUGFnZShHbHlwaFBhZ2UmIHBhZ2VUb0ZpbGwsIHVuc2lnbmVkIG9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNv
bnN0IEZvbnQqIGZvbnQpCiB7CiAjaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICBpZiAoYXV0byog
c3ZnRGF0YSA9IGZvbnREYXRhLT5zdmdEYXRhKCkpCi0gICAgICAgIHJldHVybiBzdmdEYXRhLT5m
aWxsU1ZHR2x5cGhQYWdlKCZwYWdlVG9GaWxsLCBvZmZzZXQsIGxlbmd0aCwgYnVmZmVyLCBidWZm
ZXJMZW5ndGgsIGZvbnREYXRhKTsKKyAgICBpZiAoYXV0byogc3ZnRGF0YSA9IGZvbnQtPnN2Z0Rh
dGEoKSkKKyAgICAgICAgcmV0dXJuIHN2Z0RhdGEtPmZpbGxTVkdHbHlwaFBhZ2UoJnBhZ2VUb0Zp
bGwsIG9mZnNldCwgbGVuZ3RoLCBidWZmZXIsIGJ1ZmZlckxlbmd0aCwgZm9udCk7CiAjZW5kaWYK
LSAgICBib29sIGhhc0dseXBocyA9IHBhZ2VUb0ZpbGwuZmlsbChvZmZzZXQsIGxlbmd0aCwgYnVm
ZmVyLCBidWZmZXJMZW5ndGgsIGZvbnREYXRhKTsKKyAgICBib29sIGhhc0dseXBocyA9IHBhZ2VU
b0ZpbGwuZmlsbChvZmZzZXQsIGxlbmd0aCwgYnVmZmVyLCBidWZmZXJMZW5ndGgsIGZvbnQpOwog
I2lmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKLSAgICBpZiAoaGFzR2x5cGhzICYmIGZvbnRE
YXRhLT52ZXJ0aWNhbERhdGEoKSkKLSAgICAgICAgZm9udERhdGEtPnZlcnRpY2FsRGF0YSgpLT5z
dWJzdGl0dXRlV2l0aFZlcnRpY2FsR2x5cGhzKGZvbnREYXRhLCAmcGFnZVRvRmlsbCwgb2Zmc2V0
LCBsZW5ndGgpOworICAgIGlmIChoYXNHbHlwaHMgJiYgZm9udC0+dmVydGljYWxEYXRhKCkpCisg
ICAgICAgIGZvbnQtPnZlcnRpY2FsRGF0YSgpLT5zdWJzdGl0dXRlV2l0aFZlcnRpY2FsR2x5cGhz
KGZvbnQsICZwYWdlVG9GaWxsLCBvZmZzZXQsIGxlbmd0aCk7CiAjZW5kaWYKICAgICByZXR1cm4g
aGFzR2x5cGhzOwogfQogCi1zdGF0aWMgUmVmUHRyPEdseXBoUGFnZT4gY3JlYXRlQW5kRmlsbEds
eXBoUGFnZSh1bnNpZ25lZCBwYWdlTnVtYmVyLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERh
dGEpCitzdGF0aWMgUmVmUHRyPEdseXBoUGFnZT4gY3JlYXRlQW5kRmlsbEdseXBoUGFnZSh1bnNp
Z25lZCBwYWdlTnVtYmVyLCBjb25zdCBGb250KiBmb250KQogewogI2lmIFBMQVRGT1JNKElPUykK
ICAgICAvLyBGSVhNRTogVGltZXMgTmV3IFJvbWFuIGNvbnRhaW5zIEFyYWJpYyBnbHlwaHMsIGJ1
dCBDb3JlIFRleHQgZG9lc24ndCBrbm93IGhvdyB0byBzaGFwZSB0aGVtLiBTZWUgPHJkYXI6Ly9w
cm9ibGVtLzk4MjM5NzU+LgotICAgIC8vIE9uY2Ugd2UgaGF2ZSB0aGUgZml4IGZvciA8cmRhcjov
L3Byb2JsZW0vOTgyMzk3NT4gdGhlbiByZW1vdmUgdGhpcyBjb2RlIHRvZ2V0aGVyIHdpdGggU2lt
cGxlRm9udERhdGE6OnNob3VsZE5vdEJlVXNlZEZvckFyYWJpYygpCisgICAgLy8gT25jZSB3ZSBo
YXZlIHRoZSBmaXggZm9yIDxyZGFyOi8vcHJvYmxlbS85ODIzOTc1PiB0aGVuIHJlbW92ZSB0aGlz
IGNvZGUgdG9nZXRoZXIgd2l0aCBGb250OjpzaG91bGROb3RCZVVzZWRGb3JBcmFiaWMoKQogICAg
IC8vIGluIDxyZGFyOi8vcHJvYmxlbS8xMjA5NjgzNT4uCi0gICAgaWYgKHBhZ2VOdW1iZXIgPT0g
NiAmJiBmb250RGF0YS0+c2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKCkpCisgICAgaWYgKHBhZ2VO
dW1iZXIgPT0gNiAmJiBmb250LT5zaG91bGROb3RCZVVzZWRGb3JBcmFiaWMoKSkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAjZW5kaWYKIApAQCAtMTkwLDcgKzE5MCw3IEBAIHN0YXRpYyBSZWZQ
dHI8R2x5cGhQYWdlPiBjcmVhdGVBbmRGaWxsR2wKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IEdseXBoUGFnZTo6c2l6ZTsgaSsrKQogICAgICAgICAgICAgYnVmZmVyW2ldID0gc3Rh
cnQgKyBpOwogCi0gICAgICAgIGlmIChzdGFydCA9PSAwKSB7CisgICAgICAgIGlmICghc3RhcnQp
IHsKICAgICAgICAgICAgIC8vIENvbnRyb2wgY2hhcmFjdGVycyBtdXN0IG5vdCByZW5kZXIgYXQg
YWxsLgogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDB4MjA7ICsraSkKICAg
ICAgICAgICAgICAgICBidWZmZXJbaV0gPSB6ZXJvV2lkdGhTcGFjZTsKQEAgLTIzNSwxMiArMjM1
LDEyIEBAIHN0YXRpYyBSZWZQdHI8R2x5cGhQYWdlPiBjcmVhdGVBbmRGaWxsR2wKICAgICAvLyBT
dWNjZXNzIGlzIG5vdCBndWFyYW50ZWVkLiBGb3IgZXhhbXBsZSwgVGltZXMgZmFpbHMgdG8gZmls
bCBwYWdlIDI2MCwgZ2l2aW5nIGdseXBoIGRhdGEKICAgICAvLyBmb3Igb25seSAxMjggb3V0IG9m
IDI1NiBjaGFyYWN0ZXJzLgogICAgIFJlZlB0cjxHbHlwaFBhZ2U+IGdseXBoUGFnZTsKLSAgICBp
ZiAoR2x5cGhQYWdlOjptYXlVc2VNaXhlZEZvbnREYXRhV2hlbkZpbGxpbmcoYnVmZmVyLCBidWZm
ZXJMZW5ndGgsIGZvbnREYXRhKSkKLSAgICAgICAgZ2x5cGhQYWdlID0gR2x5cGhQYWdlOjpjcmVh
dGVGb3JNaXhlZEZvbnREYXRhKCk7CisgICAgaWYgKEdseXBoUGFnZTo6bWF5VXNlTWl4ZWRGb250
c1doZW5GaWxsaW5nKGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCBmb250KSkKKyAgICAgICAgZ2x5cGhQ
YWdlID0gR2x5cGhQYWdlOjpjcmVhdGVGb3JNaXhlZEZvbnRzKCk7CiAgICAgZWxzZQotICAgICAg
ICBnbHlwaFBhZ2UgPSBHbHlwaFBhZ2U6OmNyZWF0ZUZvclNpbmdsZUZvbnREYXRhKGZvbnREYXRh
KTsKKyAgICAgICAgZ2x5cGhQYWdlID0gR2x5cGhQYWdlOjpjcmVhdGVGb3JTaW5nbGVGb250KGZv
bnQpOwogCi0gICAgYm9vbCBoYXZlR2x5cGhzID0gZmlsbEdseXBoUGFnZSgqZ2x5cGhQYWdlLCAw
LCBHbHlwaFBhZ2U6OnNpemUsIGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCBmb250RGF0YSk7CisgICAg
Ym9vbCBoYXZlR2x5cGhzID0gZmlsbEdseXBoUGFnZSgqZ2x5cGhQYWdlLCAwLCBHbHlwaFBhZ2U6
OnNpemUsIGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCBmb250KTsKICAgICBpZiAoIWhhdmVHbHlwaHMp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0yNDgsOSArMjQ4LDkgQEAgc3RhdGljIFJl
ZlB0cjxHbHlwaFBhZ2U+IGNyZWF0ZUFuZEZpbGxHbAogICAgIHJldHVybiBnbHlwaFBhZ2U7CiB9
CiAKLWNvbnN0IEdseXBoUGFnZSogU2ltcGxlRm9udERhdGE6OmdseXBoUGFnZSh1bnNpZ25lZCBw
YWdlTnVtYmVyKSBjb25zdAorY29uc3QgR2x5cGhQYWdlKiBGb250OjpnbHlwaFBhZ2UodW5zaWdu
ZWQgcGFnZU51bWJlcikgY29uc3QKIHsKLSAgICBpZiAocGFnZU51bWJlciA9PSAwKSB7CisgICAg
aWYgKCFwYWdlTnVtYmVyKSB7CiAgICAgICAgIGlmICghbV9nbHlwaFBhZ2VaZXJvKQogICAgICAg
ICAgICAgbV9nbHlwaFBhZ2VaZXJvID0gY3JlYXRlQW5kRmlsbEdseXBoUGFnZSgwLCB0aGlzKTsK
ICAgICAgICAgcmV0dXJuIG1fZ2x5cGhQYWdlWmVyby5nZXQoKTsKQEAgLTI2Miw3ICsyNjIsNyBA
QCBjb25zdCBHbHlwaFBhZ2UqIFNpbXBsZUZvbnREYXRhOjpnbHlwaFBhCiAgICAgcmV0dXJuIGFk
ZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7CiB9CiAKLUdseXBoIFNpbXBsZUZvbnREYXRh
OjpnbHlwaEZvckNoYXJhY3RlcihVQ2hhcjMyIGNoYXJhY3RlcikgY29uc3QKK0dseXBoIEZvbnQ6
OmdseXBoRm9yQ2hhcmFjdGVyKFVDaGFyMzIgY2hhcmFjdGVyKSBjb25zdAogewogICAgIGF1dG8q
IHBhZ2UgPSBnbHlwaFBhZ2UoY2hhcmFjdGVyIC8gR2x5cGhQYWdlOjpzaXplKTsKICAgICBpZiAo
IXBhZ2UpCkBAIC0yNzAsNyArMjcwLDcgQEAgR2x5cGggU2ltcGxlRm9udERhdGE6OmdseXBoRm9y
Q2hhcmFjdGVyKAogICAgIHJldHVybiBwYWdlLT5nbHlwaEF0KGNoYXJhY3RlciAlIEdseXBoUGFn
ZTo6c2l6ZSk7CiB9CiAKLUdseXBoRGF0YSBTaW1wbGVGb250RGF0YTo6Z2x5cGhEYXRhRm9yQ2hh
cmFjdGVyKFVDaGFyMzIgY2hhcmFjdGVyKSBjb25zdAorR2x5cGhEYXRhIEZvbnQ6OmdseXBoRGF0
YUZvckNoYXJhY3RlcihVQ2hhcjMyIGNoYXJhY3RlcikgY29uc3QKIHsKICAgICBhdXRvKiBwYWdl
ID0gZ2x5cGhQYWdlKGNoYXJhY3RlciAvIEdseXBoUGFnZTo6c2l6ZSk7CiAgICAgaWYgKCFwYWdl
KQpAQCAtMjc4LDcgKzI3OCw3IEBAIEdseXBoRGF0YSBTaW1wbGVGb250RGF0YTo6Z2x5cGhEYXRh
Rm9yQ2gKICAgICByZXR1cm4gcGFnZS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3Rlcik7
CiB9CiAKLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjp2ZXJ0aWNh
bFJpZ2h0T3JpZW50YXRpb25Gb250RGF0YSgpIGNvbnN0CitQYXNzUmVmUHRyPEZvbnQ+IEZvbnQ6
OnZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbkZvbnQoKSBjb25zdAogewogICAgIGlmICghbV9kZXJp
dmVkRm9udERhdGEpCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gc3RkOjptYWtlX3VuaXF1
ZTxEZXJpdmVkRm9udERhdGE+KGlzQ3VzdG9tRm9udCgpKTsKQEAgLTI5MCw3ICsyOTAsNyBAQCBQ
YXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0CiAgICAgcmV0dXJuIG1fZGVy
aXZlZEZvbnREYXRhLT52ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb247CiB9CiAKLVBhc3NSZWZQdHI8
U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjp1cHJpZ2h0T3JpZW50YXRpb25Gb250RGF0
YSgpIGNvbnN0CitQYXNzUmVmUHRyPEZvbnQ+IEZvbnQ6OnVwcmlnaHRPcmllbnRhdGlvbkZvbnQo
KSBjb25zdAogewogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEpCiAgICAgICAgIG1fZGVyaXZl
ZEZvbnREYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxEZXJpdmVkRm9udERhdGE+KGlzQ3VzdG9tRm9u
dCgpKTsKQEAgLTI5OSwyNyArMjk5LDI3IEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNp
bXBsZUZvbnREYXQKICAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPnVwcmlnaHRPcmllbnRh
dGlvbjsKIH0KIAotUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OnNt
YWxsQ2Fwc0ZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBj
b25zdAorUGFzc1JlZlB0cjxGb250PiBGb250OjpzbWFsbENhcHNGb250KGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAogewogICAgIGlmICghbV9kZXJpdmVkRm9u
dERhdGEpCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxEZXJp
dmVkRm9udERhdGE+KGlzQ3VzdG9tRm9udCgpKTsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRh
LT5zbWFsbENhcHMpCi0gICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMgPSBjcmVh
dGVTY2FsZWRGb250RGF0YShmb250RGVzY3JpcHRpb24sIHNtYWxsQ2Fwc0ZvbnRTaXplTXVsdGlw
bGllcik7CisgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMgPSBjcmVhdGVTY2Fs
ZWRGb250KGZvbnREZXNjcmlwdGlvbiwgc21hbGxDYXBzRm9udFNpemVNdWx0aXBsaWVyKTsKIAog
ICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzOwogfQogCi1QYXNzUmVmUHRy
PFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6ZW1waGFzaXNNYXJrRm9udERhdGEoY29u
c3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0CitQYXNzUmVmUHRyPEZv
bnQ+IEZvbnQ6OmVtcGhhc2lzTWFya0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVz
Y3JpcHRpb24pIGNvbnN0CiB7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKICAgICAgICAg
bV9kZXJpdmVkRm9udERhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPERlcml2ZWRGb250RGF0YT4oaXND
dXN0b21Gb250KCkpOwogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyaykK
LSAgICAgICAgbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyayA9IGNyZWF0ZVNjYWxlZEZv
bnREYXRhKGZvbnREZXNjcmlwdGlvbiwgZW1waGFzaXNNYXJrRm9udFNpemVNdWx0aXBsaWVyKTsK
KyAgICAgICAgbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyayA9IGNyZWF0ZVNjYWxlZEZv
bnQoZm9udERlc2NyaXB0aW9uLCBlbXBoYXNpc01hcmtGb250U2l6ZU11bHRpcGxpZXIpOwogCiAg
ICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcms7CiB9CiAKLVBhc3NSZWZQ
dHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpicm9rZW5JZGVvZ3JhcGhGb250RGF0
YSgpIGNvbnN0CitQYXNzUmVmUHRyPEZvbnQ+IEZvbnQ6OmJyb2tlbklkZW9ncmFwaEZvbnQoKSBj
b25zdAogewogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEpCiAgICAgICAgIG1fZGVyaXZlZEZv
bnREYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxEZXJpdmVkRm9udERhdGE+KGlzQ3VzdG9tRm9udCgp
KTsKQEAgLTMzMCw3ICszMzAsNyBAQCBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVG
b250RGF0CiAgICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5icm9rZW5JZGVvZ3JhcGg7CiB9
CiAKLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpub25TeW50aGV0
aWNJdGFsaWNGb250RGF0YSgpIGNvbnN0CitQYXNzUmVmUHRyPEZvbnQ+IEZvbnQ6Om5vblN5bnRo
ZXRpY0l0YWxpY0ZvbnQoKSBjb25zdAogewogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEpCiAg
ICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxEZXJpdmVkRm9udERh
dGE+KGlzQ3VzdG9tRm9udCgpKTsKQEAgLTM0NSw3ICszNDUsNyBAQCBQYXNzUmVmUHRyPFNpbXBs
ZUZvbnREYXRhPiBTaW1wbGVGb250RGF0CiB9CiAKICNpZm5kZWYgTkRFQlVHCi1TdHJpbmcgU2lt
cGxlRm9udERhdGE6OmRlc2NyaXB0aW9uKCkgY29uc3QKK1N0cmluZyBGb250OjpkZXNjcmlwdGlv
bigpIGNvbnN0CiB7CiAgICAgaWYgKGlzU1ZHRm9udCgpKQogICAgICAgICByZXR1cm4gIltTVkcg
Zm9udF0iOwpAQCAtMzU2LDcgKzM1Niw3IEBAIFN0cmluZyBTaW1wbGVGb250RGF0YTo6ZGVzY3Jp
cHRpb24oKSBjb24KIH0KICNlbmRpZgogCi1jb25zdCBPcGVuVHlwZU1hdGhEYXRhKiBTaW1wbGVG
b250RGF0YTo6bWF0aERhdGEoKSBjb25zdAorY29uc3QgT3BlblR5cGVNYXRoRGF0YSogRm9udDo6
bWF0aERhdGEoKSBjb25zdAogewogICAgIGlmIChtX2lzTG9hZGluZykKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CkBAIC0zNjgsMTkgKzM2OCwxOSBAQCBjb25zdCBPcGVuVHlwZU1hdGhEYXRhKiBT
aW1wbGVGb250RGF0YTo6CiAgICAgcmV0dXJuIG1fbWF0aERhdGEuZ2V0KCk7CiB9CiAKLVNpbXBs
ZUZvbnREYXRhOjpEZXJpdmVkRm9udERhdGE6On5EZXJpdmVkRm9udERhdGEoKQorRm9udDo6RGVy
aXZlZEZvbnREYXRhOjp+RGVyaXZlZEZvbnREYXRhKCkKIHsKIH0KIAotUGFzc1JlZlB0cjxTaW1w
bGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZVNjYWxlZEZvbnREYXRhKGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3QK
K1Bhc3NSZWZQdHI8Rm9udD4gRm9udDo6Y3JlYXRlU2NhbGVkRm9udChjb25zdCBGb250RGVzY3Jp
cHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0CiB7CiAgICAg
aWYgKGlzU1ZHRm9udCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBw
bGF0Zm9ybUNyZWF0ZVNjYWxlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgc2NhbGVGYWN0b3Ip
OworICAgIHJldHVybiBwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZvbnQoZm9udERlc2NyaXB0aW9uLCBz
Y2FsZUZhY3Rvcik7CiB9CiAKLWJvb2wgU2ltcGxlRm9udERhdGE6OmFwcGx5VHJhbnNmb3JtcyhH
bHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHNp
emVfdCBnbHlwaENvdW50LCBUeXBlc2V0dGluZ0ZlYXR1cmVzIHR5cGVzZXR0aW5nRmVhdHVyZXMp
IGNvbnN0Citib29sIEZvbnQ6OmFwcGx5VHJhbnNmb3JtcyhHbHlwaEJ1ZmZlckdseXBoKiBnbHlw
aHMsIEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHNpemVfdCBnbHlwaENvdW50LCBUeXBl
c2V0dGluZ0ZlYXR1cmVzIHR5cGVzZXR0aW5nRmVhdHVyZXMpIGNvbnN0CiB7CiAgICAgLy8gV2Ug
bmVlZCB0byBoYW5kbGUgdHJhbnNmb3JtcyBvbiBTVkcgZm9udHMgaW50ZXJuYWxseSwgc2luY2Ug
dGhleSBhcmUgcmVuZGVyZWQgaW50ZXJuYWxseS4KICAgICBBU1NFUlQoIWlzU1ZHRm9udCgpKTsK
QEAgLTM5Niw5ICszOTYsOSBAQCBib29sIFNpbXBsZUZvbnREYXRhOjphcHBseVRyYW5zZm9ybXMo
R2x5CiAjZW5kaWYKIH0KIAotLy8gRm9udERhdGFzIGFyZSBub3QgcmVmY291bnRlZCB0byBhdm9p
ZCBjeWNsZXMuCi10eXBlZGVmIEhhc2hNYXA8c3RkOjpwYWlyPFVDaGFyMzIsIHVuc2lnbmVkPiwg
U2ltcGxlRm9udERhdGEqPiBDaGFyYWN0ZXJGYWxsYmFja01hcDsKLXR5cGVkZWYgSGFzaE1hcDxj
b25zdCBTaW1wbGVGb250RGF0YSosIENoYXJhY3RlckZhbGxiYWNrTWFwPiBTeXN0ZW1GYWxsYmFj
a0NhY2hlOworLy8gRm9udHMgYXJlIG5vdCByZWYnZCB0byBhdm9pZCBjeWNsZXMuCit0eXBlZGVm
IEhhc2hNYXA8c3RkOjpwYWlyPFVDaGFyMzIsIHVuc2lnbmVkPiwgRm9udCo+IENoYXJhY3RlckZh
bGxiYWNrTWFwOwordHlwZWRlZiBIYXNoTWFwPGNvbnN0IEZvbnQqLCBDaGFyYWN0ZXJGYWxsYmFj
a01hcD4gU3lzdGVtRmFsbGJhY2tDYWNoZTsKIAogc3RhdGljIFN5c3RlbUZhbGxiYWNrQ2FjaGUm
IHN5c3RlbUZhbGxiYWNrQ2FjaGUoKQogewpAQCAtNDA2LDE2ICs0MDYsMTYgQEAgc3RhdGljIFN5
c3RlbUZhbGxiYWNrQ2FjaGUmIHN5c3RlbUZhbGxiYQogICAgIHJldHVybiBtYXAuZ2V0KCk7CiB9
CiAKLVJlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OnN5c3RlbUZhbGxiYWNr
Rm9udERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjaGFyYWN0ZXIsIGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZGVzY3JpcHRpb24sIGJvb2wgaXNGb3JQbGF0Zm9ybUZvbnQpIGNvbnN0CitSZWZQdHI8
Rm9udD4gRm9udDo6c3lzdGVtRmFsbGJhY2tGb250Rm9yQ2hhcmFjdGVyKFVDaGFyMzIgY2hhcmFj
dGVyLCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBib29sIGlzRm9yUGxhdGZv
cm1Gb250KSBjb25zdAogewogICAgIGF1dG8gZm9udEFkZFJlc3VsdCA9IHN5c3RlbUZhbGxiYWNr
Q2FjaGUoKS5hZGQodGhpcywgQ2hhcmFjdGVyRmFsbGJhY2tNYXAoKSk7CiAKICAgICBhdXRvIGtl
eSA9IHN0ZDo6bWFrZV9wYWlyKGNoYXJhY3RlciwgaXNGb3JQbGF0Zm9ybUZvbnQpOwogICAgIGF1
dG8gY2hhcmFjdGVyQWRkUmVzdWx0ID0gZm9udEFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYWRk
KGtleSwgbnVsbHB0cik7CiAKLSAgICBTaW1wbGVGb250RGF0YSomIGZhbGxiYWNrRm9udERhdGEg
PSBjaGFyYWN0ZXJBZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOworICAgIEZvbnQqJiBmYWxsYmFj
a0ZvbnQgPSBjaGFyYWN0ZXJBZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogCi0gICAgaWYgKCFm
YWxsYmFja0ZvbnREYXRhKSB7CisgICAgaWYgKCFmYWxsYmFja0ZvbnQpIHsKICAgICAgICAgVUNo
YXIgY29kZVVuaXRzWzJdOwogICAgICAgICBpbnQgY29kZVVuaXRzTGVuZ3RoOwogICAgICAgICBp
ZiAoVV9JU19CTVAoY2hhcmFjdGVyKSkgewpAQCAtNDI3LDE1ICs0MjcsMTUgQEAgUmVmUHRyPFNp
bXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6cwogICAgICAgICAgICAgY29kZVVuaXRzTGVu
Z3RoID0gMjsKICAgICAgICAgfQogCi0gICAgICAgIGZhbGxiYWNrRm9udERhdGEgPSBmb250Q2Fj
aGUoKS5zeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoZGVzY3JpcHRpb24sIHRoaXMsIGlzRm9y
UGxhdGZvcm1Gb250LCBjb2RlVW5pdHMsIGNvZGVVbml0c0xlbmd0aCkuZ2V0KCk7Ci0gICAgICAg
IGlmIChmYWxsYmFja0ZvbnREYXRhKQotICAgICAgICAgICAgZmFsbGJhY2tGb250RGF0YS0+bV9p
c1VzZWRJblN5c3RlbUZhbGxiYWNrQ2FjaGUgPSB0cnVlOworICAgICAgICBmYWxsYmFja0ZvbnQg
PSBmb250Q2FjaGUoKS5zeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoZGVzY3JpcHRpb24sIHRo
aXMsIGlzRm9yUGxhdGZvcm1Gb250LCBjb2RlVW5pdHMsIGNvZGVVbml0c0xlbmd0aCkuZ2V0KCk7
CisgICAgICAgIGlmIChmYWxsYmFja0ZvbnQpCisgICAgICAgICAgICBmYWxsYmFja0ZvbnQtPm1f
aXNVc2VkSW5TeXN0ZW1GYWxsYmFja0NhY2hlID0gdHJ1ZTsKICAgICB9CiAKLSAgICByZXR1cm4g
ZmFsbGJhY2tGb250RGF0YTsKKyAgICByZXR1cm4gZmFsbGJhY2tGb250OwogfQogCi12b2lkIFNp
bXBsZUZvbnREYXRhOjpyZW1vdmVGcm9tU3lzdGVtRmFsbGJhY2tDYWNoZSgpCit2b2lkIEZvbnQ6
OnJlbW92ZUZyb21TeXN0ZW1GYWxsYmFja0NhY2hlKCkKIHsKICAgICBzeXN0ZW1GYWxsYmFja0Nh
Y2hlKCkucmVtb3ZlKHRoaXMpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udC5oCShyZXZpc2lvbiAxNzg2NTApCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmg6MTc4NjUwKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzY5IEBACisv
KgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIGludGVybmFsIGZvbnQgaW1wbGVtZW50YXRp
b24uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4LCAyMDEwLCAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IFRvcmNo
IE1vYmlsZSwgSW5jLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBTaW1wbGVGb250RGF0YV9oCisjZGVmaW5lIFNpbXBs
ZUZvbnREYXRhX2gKKworI2luY2x1ZGUgIkZvbnRCYXNlbGluZS5oIgorI2luY2x1ZGUgIkZvbnRN
ZXRyaWNzLmgiCisjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgorI2luY2x1ZGUgIkZsb2F0
UmVjdC5oIgorI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCisjaW5jbHVkZSAiR2x5cGhNZXRyaWNz
TWFwLmgiCisjaW5jbHVkZSAiR2x5cGhQYWdlLmgiCisjaW5jbHVkZSAiT3BlblR5cGVNYXRoRGF0
YS5oIgorI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKKyNpbmNsdWRlICJPcGVuVHlwZVZl
cnRpY2FsRGF0YS5oIgorI2VuZGlmCisjaW5jbHVkZSAiVHlwZXNldHRpbmdGZWF0dXJlcy5oIgor
I2luY2x1ZGUgPHd0Zi9UeXBlQ2FzdHMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNo
Lmg+CisKKyNpZiBQTEFURk9STShDT0NPQSkKKyNpbmNsdWRlICJXZWJDb3JlU3lzdGVtSW50ZXJm
YWNlLmgiCisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2VuZGlmCisKKyNpZiBQTEFURk9S
TShXSU4pCisjaW5jbHVkZSA8dXNwMTAuaD4KKyNlbmRpZgorCisjaWYgVVNFKENBSVJPKQorI2lu
Y2x1ZGUgPGNhaXJvLmg+CisjZW5kaWYKKworI2lmIFVTRShDRykKKyNpbmNsdWRlIDxXZWJDb3Jl
L0NvcmVHcmFwaGljc1NQSS5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgR2x5cGhQYWdlOworY2xhc3MgRm9udERlc2NyaXB0aW9uOworY2xhc3MgU2hhcmVkQnVmZmVy
Oworc3RydWN0IEdseXBoRGF0YTsKK3N0cnVjdCBXaWR0aEl0ZXJhdG9yOworCitlbnVtIEZvbnRE
YXRhVmFyaWFudCB7IEF1dG9WYXJpYW50LCBOb3JtYWxWYXJpYW50LCBTbWFsbENhcHNWYXJpYW50
LCBFbXBoYXNpc01hcmtWYXJpYW50LCBCcm9rZW5JZGVvZ3JhcGhWYXJpYW50IH07CitlbnVtIFBp
dGNoIHsgVW5rbm93blBpdGNoLCBGaXhlZFBpdGNoLCBWYXJpYWJsZVBpdGNoIH07CisKK2NsYXNz
IFNpbXBsZUZvbnREYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8U2ltcGxlRm9udERhdGE+IHsKK3B1
YmxpYzoKKyAgICBjbGFzcyBTVkdEYXRhIHsKKyAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIH5TVkdEYXRhKCkgeyB9CisKKyAgICAg
ICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVGb250RGF0YShTaW1wbGVGb250RGF0YSosIGZsb2F0
IGZvbnRTaXplKSA9IDA7CisgICAgICAgIHZpcnR1YWwgZmxvYXQgd2lkdGhGb3JTVkdHbHlwaChH
bHlwaCwgZmxvYXQgZm9udFNpemUpIGNvbnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCBib29sIGZp
bGxTVkdHbHlwaFBhZ2UoR2x5cGhQYWdlKiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgsIFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgU2ltcGxlRm9u
dERhdGEqKSBjb25zdCA9IDA7CisgICAgfTsKKworICAgIC8vIFVzZWQgdG8gY3JlYXRlIHBsYXRm
b3JtIGZvbnRzLgorICAgIHN0YXRpYyBSZWY8U2ltcGxlRm9udERhdGE+IGNyZWF0ZShjb25zdCBG
b250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEsIGJvb2wgaXNDdXN0b21Gb250ID0gZmFsc2Us
IGJvb2wgaXNMb2FkaW5nID0gZmFsc2UsIGJvb2wgaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjayA9
IGZhbHNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2ltcGxlRm9udERh
dGEocGxhdGZvcm1EYXRhLCBpc0N1c3RvbUZvbnQsIGlzTG9hZGluZywgaXNUZXh0T3JpZW50YXRp
b25GYWxsYmFjaykpOworICAgIH0KKworICAgIC8vIFVzZWQgdG8gY3JlYXRlIFNWRyBGb250cy4K
KyAgICBzdGF0aWMgUmVmPFNpbXBsZUZvbnREYXRhPiBjcmVhdGUoc3RkOjp1bmlxdWVfcHRyPFNW
R0RhdGE+IHN2Z0RhdGEsIGZsb2F0IGZvbnRTaXplLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wg
c3ludGhldGljSXRhbGljKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2lt
cGxlRm9udERhdGEoV1RGOjptb3ZlKHN2Z0RhdGEpLCBmb250U2l6ZSwgc3ludGhldGljQm9sZCwg
c3ludGhldGljSXRhbGljKSk7CisgICAgfQorCisgICAgflNpbXBsZUZvbnREYXRhKCk7CisKKyAg
ICBzdGF0aWMgY29uc3QgU2ltcGxlRm9udERhdGEqIHN5c3RlbUZhbGxiYWNrKCkgeyByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBTaW1wbGVGb250RGF0YSo+KC0xKTsgfQorCisgICAgY29u
c3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhKCkgY29uc3QgeyByZXR1cm4gbV9wbGF0
Zm9ybURhdGE7IH0KKyAgICBjb25zdCBPcGVuVHlwZU1hdGhEYXRhKiBtYXRoRGF0YSgpIGNvbnN0
OworI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKKyAgICBjb25zdCBPcGVuVHlwZVZlcnRp
Y2FsRGF0YSogdmVydGljYWxEYXRhKCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0aWNhbERhdGEuZ2V0
KCk7IH0KKyNlbmRpZgorCisgICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gc21hbGxDYXBz
Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJikgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxT
aW1wbGVGb250RGF0YT4gZW1waGFzaXNNYXJrRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9u
JikgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gYnJva2VuSWRlb2dyYXBo
Rm9udERhdGEoKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBub25TeW50
aGV0aWNJdGFsaWNGb250RGF0YSgpIGNvbnN0OworCisgICAgUGFzc1JlZlB0cjxTaW1wbGVGb250
RGF0YT4gdmFyaWFudEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24s
IEZvbnREYXRhVmFyaWFudCB2YXJpYW50KSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoICh2
YXJpYW50KSB7CisgICAgICAgIGNhc2UgU21hbGxDYXBzVmFyaWFudDoKKyAgICAgICAgICAgIHJl
dHVybiBzbWFsbENhcHNGb250RGF0YShkZXNjcmlwdGlvbik7CisgICAgICAgIGNhc2UgRW1waGFz
aXNNYXJrVmFyaWFudDoKKyAgICAgICAgICAgIHJldHVybiBlbXBoYXNpc01hcmtGb250RGF0YShk
ZXNjcmlwdGlvbik7CisgICAgICAgIGNhc2UgQnJva2VuSWRlb2dyYXBoVmFyaWFudDoKKyAgICAg
ICAgICAgIHJldHVybiBicm9rZW5JZGVvZ3JhcGhGb250RGF0YSgpOworICAgICAgICBjYXNlIEF1
dG9WYXJpYW50OgorICAgICAgICBjYXNlIE5vcm1hbFZhcmlhbnQ6CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0
dXJuIGNvbnN0X2Nhc3Q8U2ltcGxlRm9udERhdGEqPih0aGlzKTsKKyAgICB9CisKKyAgICBQYXNz
UmVmUHRyPFNpbXBsZUZvbnREYXRhPiB2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250RGF0YSgp
IGNvbnN0OworICAgIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IHVwcmlnaHRPcmllbnRhdGlv
bkZvbnREYXRhKCkgY29uc3Q7CisKKyAgICBib29sIGhhc1ZlcnRpY2FsR2x5cGhzKCkgY29uc3Qg
eyByZXR1cm4gbV9oYXNWZXJ0aWNhbEdseXBoczsgfQorICAgIGJvb2wgaXNUZXh0T3JpZW50YXRp
b25GYWxsYmFjaygpIGNvbnN0IHsgcmV0dXJuIG1faXNUZXh0T3JpZW50YXRpb25GYWxsYmFjazsg
fQorCisgICAgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzKCkgeyByZXR1cm4gbV9mb250TWV0cmlj
czsgfQorICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBmb250TWV0cmljcygpIGNvbnN0IHsgcmV0dXJu
IG1fZm9udE1ldHJpY3M7IH0KKyAgICBmbG9hdCBzaXplUGVyVW5pdCgpIGNvbnN0IHsgcmV0dXJu
IHBsYXRmb3JtRGF0YSgpLnNpemUoKSAvIChmb250TWV0cmljcygpLnVuaXRzUGVyRW0oKSA/IGZv
bnRNZXRyaWNzKCkudW5pdHNQZXJFbSgpIDogMSk7IH0KKworICAgIGZsb2F0IG1heENoYXJXaWR0
aCgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4Q2hhcldpZHRoOyB9CisgICAgdm9pZCBzZXRNYXhDaGFy
V2lkdGgoZmxvYXQgbWF4Q2hhcldpZHRoKSB7IG1fbWF4Q2hhcldpZHRoID0gbWF4Q2hhcldpZHRo
OyB9CisKKyAgICBmbG9hdCBhdmdDaGFyV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2F2Z0NoYXJX
aWR0aDsgfQorICAgIHZvaWQgc2V0QXZnQ2hhcldpZHRoKGZsb2F0IGF2Z0NoYXJXaWR0aCkgeyBt
X2F2Z0NoYXJXaWR0aCA9IGF2Z0NoYXJXaWR0aDsgfQorCisgICAgRmxvYXRSZWN0IGJvdW5kc0Zv
ckdseXBoKEdseXBoKSBjb25zdDsKKyAgICBmbG9hdCB3aWR0aEZvckdseXBoKEdseXBoIGdseXBo
KSBjb25zdDsKKyAgICBGbG9hdFJlY3QgcGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCkgY29u
c3Q7CisgICAgZmxvYXQgcGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoKSBjb25zdDsKKworICAg
IGZsb2F0IHNwYWNlV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3NwYWNlV2lkdGg7IH0KKyAgICBm
bG9hdCBhZGp1c3RlZFNwYWNlV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2FkanVzdGVkU3BhY2VX
aWR0aDsgfQorICAgIHZvaWQgc2V0U3BhY2VXaWR0aHMoZmxvYXQgc3BhY2VXaWR0aCkKKyAgICB7
CisgICAgICAgIG1fc3BhY2VXaWR0aCA9IHNwYWNlV2lkdGg7CisgICAgICAgIG1fYWRqdXN0ZWRT
cGFjZVdpZHRoID0gc3BhY2VXaWR0aDsKKyAgICB9CisKKyNpZiBVU0UoQ0cpIHx8IFVTRShDQUlS
TykKKyAgICBmbG9hdCBzeW50aGV0aWNCb2xkT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9zeW50
aGV0aWNCb2xkT2Zmc2V0OyB9CisjZW5kaWYKKworICAgIEdseXBoIHNwYWNlR2x5cGgoKSBjb25z
dCB7IHJldHVybiBtX3NwYWNlR2x5cGg7IH0KKyAgICB2b2lkIHNldFNwYWNlR2x5cGgoR2x5cGgg
c3BhY2VHbHlwaCkgeyBtX3NwYWNlR2x5cGggPSBzcGFjZUdseXBoOyB9CisgICAgR2x5cGggemVy
b1dpZHRoU3BhY2VHbHlwaCgpIGNvbnN0IHsgcmV0dXJuIG1femVyb1dpZHRoU3BhY2VHbHlwaDsg
fQorICAgIHZvaWQgc2V0WmVyb1dpZHRoU3BhY2VHbHlwaChHbHlwaCBzcGFjZUdseXBoKSB7IG1f
emVyb1dpZHRoU3BhY2VHbHlwaCA9IHNwYWNlR2x5cGg7IH0KKyAgICBib29sIGlzWmVyb1dpZHRo
U3BhY2VHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QgeyByZXR1cm4gZ2x5cGggPT0gbV96ZXJvV2lk
dGhTcGFjZUdseXBoICYmIGdseXBoOyB9CisgICAgR2x5cGggemVyb0dseXBoKCkgY29uc3QgeyBy
ZXR1cm4gbV96ZXJvR2x5cGg7IH0KKyAgICB2b2lkIHNldFplcm9HbHlwaChHbHlwaCB6ZXJvR2x5
cGgpIHsgbV96ZXJvR2x5cGggPSB6ZXJvR2x5cGg7IH0KKworICAgIEdseXBoRGF0YSBnbHlwaERh
dGFGb3JDaGFyYWN0ZXIoVUNoYXIzMikgY29uc3Q7CisgICAgR2x5cGggZ2x5cGhGb3JDaGFyYWN0
ZXIoVUNoYXIzMikgY29uc3Q7CisKKyAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IHN5c3RlbUZh
bGxiYWNrRm9udERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiwgY29uc3QgRm9udERlc2NyaXB0aW9u
JiwgYm9vbCBpc0ZvclBsYXRmb3JtRm9udCkgY29uc3Q7CisKKyAgICBjb25zdCBHbHlwaFBhZ2Uq
IGdseXBoUGFnZSh1bnNpZ25lZCBwYWdlTnVtYmVyKSBjb25zdDsKKworICAgIHZvaWQgZGV0ZXJt
aW5lUGl0Y2goKTsKKyAgICBQaXRjaCBwaXRjaCgpIGNvbnN0IHsgcmV0dXJuIG1fdHJlYXRBc0Zp
eGVkUGl0Y2ggPyBGaXhlZFBpdGNoIDogVmFyaWFibGVQaXRjaDsgfQorCisgICAgY29uc3QgU1ZH
RGF0YSogc3ZnRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fc3ZnRGF0YS5nZXQoKTsgfQorICAgIGJv
b2wgaXNTVkdGb250KCkgY29uc3QgeyByZXR1cm4gISFtX3N2Z0RhdGE7IH0KKworICAgIGJvb2wg
aXNDdXN0b21Gb250KCkgY29uc3QgeyByZXR1cm4gbV9pc0N1c3RvbUZvbnQ7IH0KKyAgICBib29s
IGlzTG9hZGluZygpIGNvbnN0IHsgcmV0dXJuIG1faXNMb2FkaW5nOyB9CisKKyNpZm5kZWYgTkRF
QlVHCisgICAgU3RyaW5nIGRlc2NyaXB0aW9uKCkgY29uc3Q7CisjZW5kaWYKKworI2lmIFVTRShB
UFBLSVQpCisgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGNvbXBvc2l0ZUZvbnRSZWZlcmVuY2VG
b250RGF0YShOU0ZvbnQgKmtleSkgY29uc3Q7CisgICAgTlNGb250KiBnZXROU0ZvbnQoKSBjb25z
dCB7IHJldHVybiBtX3BsYXRmb3JtRGF0YS5uc0ZvbnQoKTsgfQorI2VuZGlmCisKKyNpZiBQTEFU
Rk9STShJT1MpCisgICAgQ1RGb250UmVmIGdldENURm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fcGxh
dGZvcm1EYXRhLmZvbnQoKTsgfQorICAgIGJvb2wgc2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKCkg
Y29uc3QgeyByZXR1cm4gbV9zaG91bGROb3RCZVVzZWRGb3JBcmFiaWM7IH07CisjZW5kaWYKKyNp
ZiBQTEFURk9STShDT0NPQSkKKyAgICBDRkRpY3Rpb25hcnlSZWYgZ2V0Q0ZTdHJpbmdBdHRyaWJ1
dGVzKFR5cGVzZXR0aW5nRmVhdHVyZXMsIEZvbnRPcmllbnRhdGlvbikgY29uc3Q7CisjZW5kaWYK
KworI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBVU0UoSEFSRkJVWlopCisgICAgYm9vbCBjYW5SZW5k
ZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBVQ2hhciosIHNpemVfdCkgY29uc3Q7
CisjZW5kaWYKKworICAgIGJvb2wgYXBwbHlUcmFuc2Zvcm1zKEdseXBoQnVmZmVyR2x5cGgqLCBH
bHlwaEJ1ZmZlckFkdmFuY2UqLCBzaXplX3QgZ2x5cGhDb3VudCwgVHlwZXNldHRpbmdGZWF0dXJl
cykgY29uc3Q7CisKKyNpZiBQTEFURk9STShXSU4pCisgICAgYm9vbCBpc1N5c3RlbUZvbnQoKSBj
b25zdCB7IHJldHVybiBtX2lzU3lzdGVtRm9udDsgfQorICAgIFNDUklQVF9GT05UUFJPUEVSVElF
Uyogc2NyaXB0Rm9udFByb3BlcnRpZXMoKSBjb25zdDsKKyAgICBTQ1JJUFRfQ0FDSEUqIHNjcmlw
dENhY2hlKCkgY29uc3QgeyByZXR1cm4gJm1fc2NyaXB0Q2FjaGU7IH0KKyAgICBzdGF0aWMgdm9p
ZCBzZXRTaG91bGRBcHBseU1hY0FzY2VudEhhY2soYm9vbCk7CisgICAgc3RhdGljIGJvb2wgc2hv
dWxkQXBwbHlNYWNBc2NlbnRIYWNrKCk7CisgICAgc3RhdGljIGZsb2F0IGFzY2VudENvbnNpZGVy
aW5nTWFjQXNjZW50SGFjayhjb25zdCBXQ0hBUiosIGZsb2F0IGFzY2VudCwgZmxvYXQgZGVzY2Vu
dCk7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBTaW1wbGVGb250RGF0YShjb25zdCBGb250UGxh
dGZvcm1EYXRhJiwgYm9vbCBpc0N1c3RvbUZvbnQgPSBmYWxzZSwgYm9vbCBpc0xvYWRpbmcgPSBm
YWxzZSwgYm9vbCBpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrID0gZmFsc2UpOworCisgICAgU2lt
cGxlRm9udERhdGEoc3RkOjp1bmlxdWVfcHRyPFNWR0RhdGE+LCBmbG9hdCBmb250U2l6ZSwgYm9v
bCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYyk7CisKKyAgICB2b2lkIHBsYXRm
b3JtSW5pdCgpOworICAgIHZvaWQgcGxhdGZvcm1HbHlwaEluaXQoKTsKKyAgICB2b2lkIHBsYXRm
b3JtQ2hhcldpZHRoSW5pdCgpOworICAgIHZvaWQgcGxhdGZvcm1EZXN0cm95KCk7CisKKyAgICB2
b2lkIGluaXRDaGFyV2lkdGhzKCk7CisKKyAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBj
cmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBzY2FsZUZh
Y3RvcikgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gcGxhdGZvcm1DcmVh
dGVTY2FsZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBzY2FsZUZhY3Rv
cikgY29uc3Q7CisKKyAgICB2b2lkIHJlbW92ZUZyb21TeXN0ZW1GYWxsYmFja0NhY2hlKCk7CisK
KyNpZiBQTEFURk9STShXSU4pCisgICAgdm9pZCBpbml0R0RJRm9udCgpOworICAgIHZvaWQgcGxh
dGZvcm1Db21tb25EZXN0cm95KCk7CisgICAgRmxvYXRSZWN0IGJvdW5kc0ZvckdESUdseXBoKEds
eXBoIGdseXBoKSBjb25zdDsKKyAgICBmbG9hdCB3aWR0aEZvckdESUdseXBoKEdseXBoIGdseXBo
KSBjb25zdDsKKyNlbmRpZgorCisjaWYgVVNFKENHKQorICAgIGJvb2wgY2FuVXNlRmFzdEdseXBo
QWR2YW5jZUdldHRlcihHbHlwaCBnbHlwaCwgQ0dTaXplJiBhZHZhbmNlLCBib29sJiBwb3B1bGF0
ZWRBZHZhbmNlKSBjb25zdDsKKyAgICBDR0ZvbnRSZW5kZXJpbmdTdHlsZSByZW5kZXJpbmdTdHls
ZSgpIGNvbnN0OworICAgIGJvb2wgYWR2YW5jZUZvckNvbG9yQml0bWFwRm9udChHbHlwaCwgQ0dT
aXplJiByZXN1bHQpIGNvbnN0OyAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGZvbnQgaXMgYSBjb2xv
ciBiaXRtYXAgZm9udAorI2VuZGlmCisKKyAgICBGb250TWV0cmljcyBtX2ZvbnRNZXRyaWNzOwor
ICAgIGZsb2F0IG1fbWF4Q2hhcldpZHRoOworICAgIGZsb2F0IG1fYXZnQ2hhcldpZHRoOworCisg
ICAgRm9udFBsYXRmb3JtRGF0YSBtX3BsYXRmb3JtRGF0YTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
U1ZHRGF0YT4gbV9zdmdEYXRhOworCisgICAgbXV0YWJsZSBSZWZQdHI8R2x5cGhQYWdlPiBtX2ds
eXBoUGFnZVplcm87CisgICAgbXV0YWJsZSBIYXNoTWFwPHVuc2lnbmVkLCBSZWZQdHI8R2x5cGhQ
YWdlPj4gbV9nbHlwaFBhZ2VzOworICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPEdseXBoTWV0
cmljc01hcDxGbG9hdFJlY3Q+PiBtX2dseXBoVG9Cb3VuZHNNYXA7CisgICAgbXV0YWJsZSBHbHlw
aE1ldHJpY3NNYXA8ZmxvYXQ+IG1fZ2x5cGhUb1dpZHRoTWFwOworCisgICAgYm9vbCBtX3RyZWF0
QXNGaXhlZFBpdGNoOworICAgIGJvb2wgbV9pc0N1c3RvbUZvbnQ7ICAvLyBXaGV0aGVyIG9yIG5v
dCB3ZSBhcmUgY3VzdG9tIGZvbnQgbG9hZGVkIHZpYSBAZm9udC1mYWNlCisgICAgYm9vbCBtX2lz
TG9hZGluZzsgLy8gV2hldGhlciBvciBub3QgdGhpcyBjdXN0b20gZm9udCBpcyBzdGlsbCBpbiB0
aGUgYWN0IG9mIGxvYWRpbmcuCisKKyAgICBib29sIG1faXNUZXh0T3JpZW50YXRpb25GYWxsYmFj
azsKKyAgICBib29sIG1faXNCcm9rZW5JZGVvZ3JhcGhGYWxsYmFjazsKKworICAgIGJvb2wgbV9p
c1VzZWRJblN5c3RlbUZhbGxiYWNrQ2FjaGUgeyBmYWxzZSB9OworCisgICAgbXV0YWJsZSBSZWZQ
dHI8T3BlblR5cGVNYXRoRGF0YT4gbV9tYXRoRGF0YTsKKyNpZiBFTkFCTEUoT1BFTlRZUEVfVkVS
VElDQUwpCisgICAgUmVmUHRyPE9wZW5UeXBlVmVydGljYWxEYXRhPiBtX3ZlcnRpY2FsRGF0YTsK
KyNlbmRpZgorICAgIGJvb2wgbV9oYXNWZXJ0aWNhbEdseXBoczsKKworICAgIEdseXBoIG1fc3Bh
Y2VHbHlwaDsKKyAgICBmbG9hdCBtX3NwYWNlV2lkdGg7CisgICAgR2x5cGggbV96ZXJvR2x5cGg7
CisgICAgZmxvYXQgbV9hZGp1c3RlZFNwYWNlV2lkdGg7CisKKyAgICBHbHlwaCBtX3plcm9XaWR0
aFNwYWNlR2x5cGg7CisKKyAgICBzdHJ1Y3QgRGVyaXZlZEZvbnREYXRhIHsKKyAgICAgICAgZXhw
bGljaXQgRGVyaXZlZEZvbnREYXRhKGJvb2wgY3VzdG9tKQorICAgICAgICAgICAgOiBmb3JDdXN0
b21Gb250KGN1c3RvbSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIH5EZXJpdmVkRm9u
dERhdGEoKTsKKworICAgICAgICBib29sIGZvckN1c3RvbUZvbnQ7CisgICAgICAgIFJlZlB0cjxT
aW1wbGVGb250RGF0YT4gc21hbGxDYXBzOworICAgICAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+
IGVtcGhhc2lzTWFyazsKKyAgICAgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBicm9rZW5JZGVv
Z3JhcGg7CisgICAgICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gdmVydGljYWxSaWdodE9yaWVu
dGF0aW9uOworICAgICAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IHVwcmlnaHRPcmllbnRhdGlv
bjsKKyAgICAgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBub25TeW50aGV0aWNJdGFsaWM7Cisj
aWYgVVNFKEFQUEtJVCkKKyAgICAgICAgSGFzaE1hcDxOU0ZvbnQqLCBSZWZQdHI8U2ltcGxlRm9u
dERhdGE+PiBjb21wb3NpdGVGb250UmVmZXJlbmNlczsKKyNlbmRpZgorICAgIH07CisKKyAgICBt
dXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxEZXJpdmVkRm9udERhdGE+IG1fZGVyaXZlZEZvbnREYXRh
OworCisjaWYgVVNFKENHKSB8fCBVU0UoQ0FJUk8pCisgICAgZmxvYXQgbV9zeW50aGV0aWNCb2xk
T2Zmc2V0OworI2VuZGlmCisKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBtdXRhYmxlIEhhc2hN
YXA8dW5zaWduZWQsIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+PiBtX0NGU3RyaW5nQXR0cmli
dXRlczsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFVTRShIQVJGQlVaWikKKyAg
ICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxIYXNoTWFwPFN0cmluZywgYm9vbD4+IG1fY29tYmlu
aW5nQ2hhcmFjdGVyU2VxdWVuY2VTdXBwb3J0OworI2VuZGlmCisKKyNpZiBQTEFURk9STShXSU4p
CisgICAgYm9vbCBtX2lzU3lzdGVtRm9udDsKKyAgICBtdXRhYmxlIFNDUklQVF9DQUNIRSBtX3Nj
cmlwdENhY2hlOworICAgIG11dGFibGUgU0NSSVBUX0ZPTlRQUk9QRVJUSUVTKiBtX3NjcmlwdEZv
bnRQcm9wZXJ0aWVzOworI2VuZGlmCisjaWYgUExBVEZPUk0oSU9TKQorICAgIGJvb2wgbV9zaG91
bGROb3RCZVVzZWRGb3JBcmFiaWM7CisjZW5kaWYKK307CisKK0FMV0FZU19JTkxJTkUgRmxvYXRS
ZWN0IFNpbXBsZUZvbnREYXRhOjpib3VuZHNGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKK3sK
KyAgICBpZiAoaXNaZXJvV2lkdGhTcGFjZUdseXBoKGdseXBoKSkKKyAgICAgICAgcmV0dXJuIEZs
b2F0UmVjdCgpOworCisgICAgRmxvYXRSZWN0IGJvdW5kczsKKyAgICBpZiAobV9nbHlwaFRvQm91
bmRzTWFwKSB7CisgICAgICAgIGJvdW5kcyA9IG1fZ2x5cGhUb0JvdW5kc01hcC0+bWV0cmljc0Zv
ckdseXBoKGdseXBoKTsKKyAgICAgICAgaWYgKGJvdW5kcy53aWR0aCgpICE9IGNHbHlwaFNpemVV
bmtub3duKQorICAgICAgICAgICAgcmV0dXJuIGJvdW5kczsKKyAgICB9CisKKyAgICBib3VuZHMg
PSBwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKGdseXBoKTsKKyAgICBpZiAoIW1fZ2x5cGhUb0JvdW5k
c01hcCkKKyAgICAgICAgbV9nbHlwaFRvQm91bmRzTWFwID0gc3RkOjptYWtlX3VuaXF1ZTxHbHlw
aE1ldHJpY3NNYXA8RmxvYXRSZWN0Pj4oKTsKKyAgICBtX2dseXBoVG9Cb3VuZHNNYXAtPnNldE1l
dHJpY3NGb3JHbHlwaChnbHlwaCwgYm91bmRzKTsKKyAgICByZXR1cm4gYm91bmRzOworfQorCitB
TFdBWVNfSU5MSU5FIGZsb2F0IFNpbXBsZUZvbnREYXRhOjp3aWR0aEZvckdseXBoKEdseXBoIGds
eXBoKSBjb25zdAoreworICAgIGlmIChpc1plcm9XaWR0aFNwYWNlR2x5cGgoZ2x5cGgpKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIGZsb2F0IHdpZHRoID0gbV9nbHlwaFRvV2lkdGhNYXAubWV0
cmljc0ZvckdseXBoKGdseXBoKTsKKyAgICBpZiAod2lkdGggIT0gY0dseXBoU2l6ZVVua25vd24p
CisgICAgICAgIHJldHVybiB3aWR0aDsKKworICAgIGlmIChpc1NWR0ZvbnQoKSkKKyAgICAgICAg
d2lkdGggPSBtX3N2Z0RhdGEtPndpZHRoRm9yU1ZHR2x5cGgoZ2x5cGgsIG1fcGxhdGZvcm1EYXRh
LnNpemUoKSk7CisjaWYgRU5BQkxFKE9QRU5UWVBFX1ZFUlRJQ0FMKQorICAgIGVsc2UgaWYgKG1f
dmVydGljYWxEYXRhKQorI2lmIFVTRShDRykgfHwgVVNFKENBSVJPKQorICAgICAgICB3aWR0aCA9
IG1fdmVydGljYWxEYXRhLT5hZHZhbmNlSGVpZ2h0KHRoaXMsIGdseXBoKSArIG1fc3ludGhldGlj
Qm9sZE9mZnNldDsKKyNlbHNlCisgICAgICAgIHdpZHRoID0gbV92ZXJ0aWNhbERhdGEtPmFkdmFu
Y2VIZWlnaHQodGhpcywgZ2x5cGgpOworI2VuZGlmCisjZW5kaWYKKyAgICBlbHNlCisgICAgICAg
IHdpZHRoID0gcGxhdGZvcm1XaWR0aEZvckdseXBoKGdseXBoKTsKKworICAgIG1fZ2x5cGhUb1dp
ZHRoTWFwLnNldE1ldHJpY3NGb3JHbHlwaChnbHlwaCwgd2lkdGgpOworICAgIHJldHVybiB3aWR0
aDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU2ltcGxlRm9udERh
dGFfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAkod29ya2lu
ZyBjb3B5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMSwxMyArMjEsMTMgQEAKICAqCiAgKi8KIAotI2lmbmRlZiBTaW1wbGVG
b250RGF0YV9oCi0jZGVmaW5lIFNpbXBsZUZvbnREYXRhX2gKKyNpZm5kZWYgRm9udF9oCisjZGVm
aW5lIEZvbnRfaAogCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiRm9udEJhc2Vs
aW5lLmgiCiAjaW5jbHVkZSAiRm9udE1ldHJpY3MuaCIKICNpbmNsdWRlICJGb250UGxhdGZvcm1E
YXRhLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIK
ICNpbmNsdWRlICJHbHlwaE1ldHJpY3NNYXAuaCIKICNpbmNsdWRlICJHbHlwaFBhZ2UuaCIKQEAg
LTY0LDM2ICs2NCwzNiBAQCBjbGFzcyBTaGFyZWRCdWZmZXI7CiBzdHJ1Y3QgR2x5cGhEYXRhOwog
c3RydWN0IFdpZHRoSXRlcmF0b3I7CiAKLWVudW0gRm9udERhdGFWYXJpYW50IHsgQXV0b1Zhcmlh
bnQsIE5vcm1hbFZhcmlhbnQsIFNtYWxsQ2Fwc1ZhcmlhbnQsIEVtcGhhc2lzTWFya1ZhcmlhbnQs
IEJyb2tlbklkZW9ncmFwaFZhcmlhbnQgfTsKK2VudW0gRm9udFZhcmlhbnQgeyBBdXRvVmFyaWFu
dCwgTm9ybWFsVmFyaWFudCwgU21hbGxDYXBzVmFyaWFudCwgRW1waGFzaXNNYXJrVmFyaWFudCwg
QnJva2VuSWRlb2dyYXBoVmFyaWFudCB9OwogZW51bSBQaXRjaCB7IFVua25vd25QaXRjaCwgRml4
ZWRQaXRjaCwgVmFyaWFibGVQaXRjaCB9OwogCi1jbGFzcyBTaW1wbGVGb250RGF0YSA6IHB1Ymxp
YyBSZWZDb3VudGVkPFNpbXBsZUZvbnREYXRhPiB7CitjbGFzcyBGb250IDogcHVibGljIFJlZkNv
dW50ZWQ8Rm9udD4gewogcHVibGljOgogICAgIGNsYXNzIFNWR0RhdGEgewogICAgICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgflNWR0Rh
dGEoKSB7IH0KIAotICAgICAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZUZvbnREYXRhKFNpbXBs
ZUZvbnREYXRhKiwgZmxvYXQgZm9udFNpemUpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGlu
aXRpYWxpemVGb250KEZvbnQqLCBmbG9hdCBmb250U2l6ZSkgPSAwOwogICAgICAgICB2aXJ0dWFs
IGZsb2F0IHdpZHRoRm9yU1ZHR2x5cGgoR2x5cGgsIGZsb2F0IGZvbnRTaXplKSBjb25zdCA9IDA7
Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBmaWxsU1ZHR2x5cGhQYWdlKEdseXBoUGFnZSosIHVuc2ln
bmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZm
ZXJMZW5ndGgsIGNvbnN0IFNpbXBsZUZvbnREYXRhKikgY29uc3QgPSAwOworICAgICAgICB2aXJ0
dWFsIGJvb2wgZmlsbFNWR0dseXBoUGFnZShHbHlwaFBhZ2UqLCB1bnNpZ25lZCBvZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25z
dCBGb250KikgY29uc3QgPSAwOwogICAgIH07CiAKICAgICAvLyBVc2VkIHRvIGNyZWF0ZSBwbGF0
Zm9ybSBmb250cy4KLSAgICBzdGF0aWMgUmVmPFNpbXBsZUZvbnREYXRhPiBjcmVhdGUoY29uc3Qg
Rm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhLCBib29sIGlzQ3VzdG9tRm9udCA9IGZhbHNl
LCBib29sIGlzTG9hZGluZyA9IGZhbHNlLCBib29sIGlzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2sg
PSBmYWxzZSkKKyAgICBzdGF0aWMgUmVmPEZvbnQ+IGNyZWF0ZShjb25zdCBGb250UGxhdGZvcm1E
YXRhJiBwbGF0Zm9ybURhdGEsIGJvb2wgaXNDdXN0b21Gb250ID0gZmFsc2UsIGJvb2wgaXNMb2Fk
aW5nID0gZmFsc2UsIGJvb2wgaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjayA9IGZhbHNlKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2ltcGxlRm9udERhdGEocGxhdGZvcm1E
YXRhLCBpc0N1c3RvbUZvbnQsIGlzTG9hZGluZywgaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaykp
OworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGb250KHBsYXRmb3JtRGF0YSwgaXNDdXN0
b21Gb250LCBpc0xvYWRpbmcsIGlzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2spKTsKICAgICB9CiAK
ICAgICAvLyBVc2VkIHRvIGNyZWF0ZSBTVkcgRm9udHMuCi0gICAgc3RhdGljIFJlZjxTaW1wbGVG
b250RGF0YT4gY3JlYXRlKHN0ZDo6dW5pcXVlX3B0cjxTVkdEYXRhPiBzdmdEYXRhLCBmbG9hdCBm
b250U2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYykKKyAgICBz
dGF0aWMgUmVmPEZvbnQ+IGNyZWF0ZShzdGQ6OnVuaXF1ZV9wdHI8U1ZHRGF0YT4gc3ZnRGF0YSwg
ZmxvYXQgZm9udFNpemUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMp
CiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTaW1wbGVGb250RGF0YShXVEY6
Om1vdmUoc3ZnRGF0YSksIGZvbnRTaXplLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMp
KTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRm9udChXVEY6Om1vdmUoc3ZnRGF0YSks
IGZvbnRTaXplLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMpKTsKICAgICB9CiAKLSAg
ICB+U2ltcGxlRm9udERhdGEoKTsKKyAgICB+Rm9udCgpOwogCi0gICAgc3RhdGljIGNvbnN0IFNp
bXBsZUZvbnREYXRhKiBzeXN0ZW1GYWxsYmFjaygpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgU2ltcGxlRm9udERhdGEqPigtMSk7IH0KKyAgICBzdGF0aWMgY29uc3QgRm9udCogc3lz
dGVtRmFsbGJhY2soKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IEZvbnQqPigtMSk7
IH0KIAogICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSgpIGNvbnN0IHsg
cmV0dXJuIG1fcGxhdGZvcm1EYXRhOyB9CiAgICAgY29uc3QgT3BlblR5cGVNYXRoRGF0YSogbWF0
aERhdGEoKSBjb25zdDsKQEAgLTEwMSwzMCArMTAxLDMwIEBAIHB1YmxpYzoKICAgICBjb25zdCBP
cGVuVHlwZVZlcnRpY2FsRGF0YSogdmVydGljYWxEYXRhKCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0
aWNhbERhdGEuZ2V0KCk7IH0KICNlbmRpZgogCi0gICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0
YT4gc21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJikgY29uc3Q7Ci0gICAg
UGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gZW1waGFzaXNNYXJrRm9udERhdGEoY29uc3QgRm9u
dERlc2NyaXB0aW9uJikgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gYnJv
a2VuSWRlb2dyYXBoRm9udERhdGEoKSBjb25zdDsKLSAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnRE
YXRhPiBub25TeW50aGV0aWNJdGFsaWNGb250RGF0YSgpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8
Rm9udD4gc21hbGxDYXBzRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mKSBjb25zdDsKKyAgICBQ
YXNzUmVmUHRyPEZvbnQ+IGVtcGhhc2lzTWFya0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJikg
Y29uc3Q7CisgICAgUGFzc1JlZlB0cjxGb250PiBicm9rZW5JZGVvZ3JhcGhGb250KCkgY29uc3Q7
CisgICAgUGFzc1JlZlB0cjxGb250PiBub25TeW50aGV0aWNJdGFsaWNGb250KCkgY29uc3Q7CiAK
LSAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiB2YXJpYW50Rm9udERhdGEoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udERhdGFWYXJpYW50IHZhcmlhbnQpIGNvbnN0
CisgICAgUGFzc1JlZlB0cjxGb250PiB2YXJpYW50Rm9udChjb25zdCBGb250RGVzY3JpcHRpb24m
IGRlc2NyaXB0aW9uLCBGb250VmFyaWFudCB2YXJpYW50KSBjb25zdAogICAgIHsKICAgICAgICAg
c3dpdGNoICh2YXJpYW50KSB7CiAgICAgICAgIGNhc2UgU21hbGxDYXBzVmFyaWFudDoKLSAgICAg
ICAgICAgIHJldHVybiBzbWFsbENhcHNGb250RGF0YShkZXNjcmlwdGlvbik7CisgICAgICAgICAg
ICByZXR1cm4gc21hbGxDYXBzRm9udChkZXNjcmlwdGlvbik7CiAgICAgICAgIGNhc2UgRW1waGFz
aXNNYXJrVmFyaWFudDoKLSAgICAgICAgICAgIHJldHVybiBlbXBoYXNpc01hcmtGb250RGF0YShk
ZXNjcmlwdGlvbik7CisgICAgICAgICAgICByZXR1cm4gZW1waGFzaXNNYXJrRm9udChkZXNjcmlw
dGlvbik7CiAgICAgICAgIGNhc2UgQnJva2VuSWRlb2dyYXBoVmFyaWFudDoKLSAgICAgICAgICAg
IHJldHVybiBicm9rZW5JZGVvZ3JhcGhGb250RGF0YSgpOworICAgICAgICAgICAgcmV0dXJuIGJy
b2tlbklkZW9ncmFwaEZvbnQoKTsKICAgICAgICAgY2FzZSBBdXRvVmFyaWFudDoKICAgICAgICAg
Y2FzZSBOb3JtYWxWYXJpYW50OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBjb25zdF9jYXN0PFNpbXBs
ZUZvbnREYXRhKj4odGhpcyk7CisgICAgICAgIHJldHVybiBjb25zdF9jYXN0PEZvbnQqPih0aGlz
KTsKICAgICB9CiAKLSAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiB2ZXJ0aWNhbFJpZ2h0
T3JpZW50YXRpb25Gb250RGF0YSgpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8U2ltcGxlRm9udERh
dGE+IHVwcmlnaHRPcmllbnRhdGlvbkZvbnREYXRhKCkgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxG
b250PiB2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250KCkgY29uc3Q7CisgICAgUGFzc1JlZlB0
cjxGb250PiB1cHJpZ2h0T3JpZW50YXRpb25Gb250KCkgY29uc3Q7CiAKICAgICBib29sIGhhc1Zl
cnRpY2FsR2x5cGhzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNWZXJ0aWNhbEdseXBoczsgfQogICAg
IGJvb2wgaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaygpIGNvbnN0IHsgcmV0dXJuIG1faXNUZXh0
T3JpZW50YXRpb25GYWxsYmFjazsgfQpAQCAtMTQwLDcgKzE0MCw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIHNldEF2Z0NoYXJXaWR0aChmbG9hdCBhdmdDaGFyV2lkdGgpIHsgbV9hdmdDaGFyV2lkdGgg
PSBhdmdDaGFyV2lkdGg7IH0KIAogICAgIEZsb2F0UmVjdCBib3VuZHNGb3JHbHlwaChHbHlwaCkg
Y29uc3Q7Ci0gICAgZmxvYXQgd2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3Q7CisgICAg
ZmxvYXQgd2lkdGhGb3JHbHlwaChHbHlwaCkgY29uc3Q7CiAgICAgRmxvYXRSZWN0IHBsYXRmb3Jt
Qm91bmRzRm9yR2x5cGgoR2x5cGgpIGNvbnN0OwogICAgIGZsb2F0IHBsYXRmb3JtV2lkdGhGb3JH
bHlwaChHbHlwaCkgY29uc3Q7CiAKQEAgLTE2Nyw3ICsxNjcsNyBAQCBwdWJsaWM6CiAgICAgR2x5
cGhEYXRhIGdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyKSBjb25zdDsKICAgICBHbHlwaCBn
bHlwaEZvckNoYXJhY3RlcihVQ2hhcjMyKSBjb25zdDsKIAotICAgIFJlZlB0cjxTaW1wbGVGb250
RGF0YT4gc3lzdGVtRmFsbGJhY2tGb250RGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyLCBjb25zdCBG
b250RGVzY3JpcHRpb24mLCBib29sIGlzRm9yUGxhdGZvcm1Gb250KSBjb25zdDsKKyAgICBSZWZQ
dHI8Rm9udD4gc3lzdGVtRmFsbGJhY2tGb250Rm9yQ2hhcmFjdGVyKFVDaGFyMzIsIGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYsIGJvb2wgaXNGb3JQbGF0Zm9ybUZvbnQpIGNvbnN0OwogCiAgICAgY29u
c3QgR2x5cGhQYWdlKiBnbHlwaFBhZ2UodW5zaWduZWQgcGFnZU51bWJlcikgY29uc3Q7CiAKQEAg
LTE4NSw3ICsxODUsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lmIFVTRShBUFBLSVQpCi0gICAg
Y29uc3QgU2ltcGxlRm9udERhdGEqIGNvbXBvc2l0ZUZvbnRSZWZlcmVuY2VGb250RGF0YShOU0Zv
bnQgKmtleSkgY29uc3Q7CisgICAgY29uc3QgRm9udCogY29tcG9zaXRlRm9udFJlZmVyZW5jZUZv
bnQoTlNGb250ICprZXkpIGNvbnN0OwogICAgIE5TRm9udCogZ2V0TlNGb250KCkgY29uc3QgeyBy
ZXR1cm4gbV9wbGF0Zm9ybURhdGEubnNGb250KCk7IH0KICNlbmRpZgogCkBAIC0yMTMsOSArMjEz
LDkgQEAgcHVibGljOgogI2VuZGlmCiAKIHByaXZhdGU6Ci0gICAgU2ltcGxlRm9udERhdGEoY29u
c3QgRm9udFBsYXRmb3JtRGF0YSYsIGJvb2wgaXNDdXN0b21Gb250ID0gZmFsc2UsIGJvb2wgaXNM
b2FkaW5nID0gZmFsc2UsIGJvb2wgaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjayA9IGZhbHNlKTsK
KyAgICBGb250KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmLCBib29sIGlzQ3VzdG9tRm9udCA9IGZh
bHNlLCBib29sIGlzTG9hZGluZyA9IGZhbHNlLCBib29sIGlzVGV4dE9yaWVudGF0aW9uRmFsbGJh
Y2sgPSBmYWxzZSk7CiAKLSAgICBTaW1wbGVGb250RGF0YShzdGQ6OnVuaXF1ZV9wdHI8U1ZHRGF0
YT4sIGZsb2F0IGZvbnRTaXplLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRh
bGljKTsKKyAgICBGb250KHN0ZDo6dW5pcXVlX3B0cjxTVkdEYXRhPiwgZmxvYXQgZm9udFNpemUs
IGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpOwogCiAgICAgdm9pZCBw
bGF0Zm9ybUluaXQoKTsKICAgICB2b2lkIHBsYXRmb3JtR2x5cGhJbml0KCk7CkBAIC0yMjQsMjAg
KzIyNCwyMCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBpbml0Q2hhcldpZHRocygpOwogCi0gICAg
UGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gY3JlYXRlU2NhbGVkRm9udERhdGEoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8
U2ltcGxlRm9udERhdGE+IHBsYXRmb3JtQ3JlYXRlU2NhbGVkRm9udERhdGEoY29uc3QgRm9udERl
c2NyaXB0aW9uJiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8Rm9u
dD4gY3JlYXRlU2NhbGVkRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBzY2FsZUZh
Y3RvcikgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxGb250PiBwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZv
bnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0OwogCiAg
ICAgdm9pZCByZW1vdmVGcm9tU3lzdGVtRmFsbGJhY2tDYWNoZSgpOwogCiAjaWYgUExBVEZPUk0o
V0lOKQogICAgIHZvaWQgaW5pdEdESUZvbnQoKTsKICAgICB2b2lkIHBsYXRmb3JtQ29tbW9uRGVz
dHJveSgpOwotICAgIEZsb2F0UmVjdCBib3VuZHNGb3JHRElHbHlwaChHbHlwaCBnbHlwaCkgY29u
c3Q7Ci0gICAgZmxvYXQgd2lkdGhGb3JHRElHbHlwaChHbHlwaCBnbHlwaCkgY29uc3Q7CisgICAg
RmxvYXRSZWN0IGJvdW5kc0ZvckdESUdseXBoKEdseXBoKSBjb25zdDsKKyAgICBmbG9hdCB3aWR0
aEZvckdESUdseXBoKEdseXBoKSBjb25zdDsKICNlbmRpZgogCiAjaWYgVVNFKENHKQotICAgIGJv
b2wgY2FuVXNlRmFzdEdseXBoQWR2YW5jZUdldHRlcihHbHlwaCBnbHlwaCwgQ0dTaXplJiBhZHZh
bmNlLCBib29sJiBwb3B1bGF0ZWRBZHZhbmNlKSBjb25zdDsKKyAgICBib29sIGNhblVzZUZhc3RH
bHlwaEFkdmFuY2VHZXR0ZXIoR2x5cGgsIENHU2l6ZSYgYWR2YW5jZSwgYm9vbCYgcG9wdWxhdGVk
QWR2YW5jZSkgY29uc3Q7CiAgICAgQ0dGb250UmVuZGVyaW5nU3R5bGUgcmVuZGVyaW5nU3R5bGUo
KSBjb25zdDsKICAgICBib29sIGFkdmFuY2VGb3JDb2xvckJpdG1hcEZvbnQoR2x5cGgsIENHU2l6
ZSYgcmVzdWx0KSBjb25zdDsgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBmb250IGlzIGEgY29sb3Ig
Yml0bWFwIGZvbnQKICNlbmRpZgpAQCAtMjU1LDcgKzI1NSw3IEBAIHByaXZhdGU6CiAgICAgbXV0
YWJsZSBHbHlwaE1ldHJpY3NNYXA8ZmxvYXQ+IG1fZ2x5cGhUb1dpZHRoTWFwOwogCiAgICAgYm9v
bCBtX3RyZWF0QXNGaXhlZFBpdGNoOwotICAgIGJvb2wgbV9pc0N1c3RvbUZvbnQ7ICAvLyBXaGV0
aGVyIG9yIG5vdCB3ZSBhcmUgY3VzdG9tIGZvbnQgbG9hZGVkIHZpYSBAZm9udC1mYWNlCisgICAg
Ym9vbCBtX2lzQ3VzdG9tRm9udDsgLy8gV2hldGhlciBvciBub3Qgd2UgYXJlIGN1c3RvbSBmb250
IGxvYWRlZCB2aWEgQGZvbnQtZmFjZQogICAgIGJvb2wgbV9pc0xvYWRpbmc7IC8vIFdoZXRoZXIg
b3Igbm90IHRoaXMgY3VzdG9tIGZvbnQgaXMgc3RpbGwgaW4gdGhlIGFjdCBvZiBsb2FkaW5nLgog
CiAgICAgYm9vbCBtX2lzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2s7CkBAIC0yODQsMTQgKzI4NCwx
NCBAQCBwcml2YXRlOgogICAgICAgICB+RGVyaXZlZEZvbnREYXRhKCk7CiAKICAgICAgICAgYm9v
bCBmb3JDdXN0b21Gb250OwotICAgICAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IHNtYWxsQ2Fw
czsKLSAgICAgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBlbXBoYXNpc01hcms7Ci0gICAgICAg
IFJlZlB0cjxTaW1wbGVGb250RGF0YT4gYnJva2VuSWRlb2dyYXBoOwotICAgICAgICBSZWZQdHI8
U2ltcGxlRm9udERhdGE+IHZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbjsKLSAgICAgICAgUmVmUHRy
PFNpbXBsZUZvbnREYXRhPiB1cHJpZ2h0T3JpZW50YXRpb247Ci0gICAgICAgIFJlZlB0cjxTaW1w
bGVGb250RGF0YT4gbm9uU3ludGhldGljSXRhbGljOworICAgICAgICBSZWZQdHI8Rm9udD4gc21h
bGxDYXBzOworICAgICAgICBSZWZQdHI8Rm9udD4gZW1waGFzaXNNYXJrOworICAgICAgICBSZWZQ
dHI8Rm9udD4gYnJva2VuSWRlb2dyYXBoOworICAgICAgICBSZWZQdHI8Rm9udD4gdmVydGljYWxS
aWdodE9yaWVudGF0aW9uOworICAgICAgICBSZWZQdHI8Rm9udD4gdXByaWdodE9yaWVudGF0aW9u
OworICAgICAgICBSZWZQdHI8Rm9udD4gbm9uU3ludGhldGljSXRhbGljOwogI2lmIFVTRShBUFBL
SVQpCi0gICAgICAgIEhhc2hNYXA8TlNGb250KiwgUmVmUHRyPFNpbXBsZUZvbnREYXRhPj4gY29t
cG9zaXRlRm9udFJlZmVyZW5jZXM7CisgICAgICAgIEhhc2hNYXA8TlNGb250KiwgUmVmUHRyPEZv
bnQ+PiBjb21wb3NpdGVGb250UmVmZXJlbmNlczsKICNlbmRpZgogICAgIH07CiAKQEAgLTMxOSw3
ICszMTksNyBAQCBwcml2YXRlOgogI2VuZGlmCiB9OwogCi1BTFdBWVNfSU5MSU5FIEZsb2F0UmVj
dCBTaW1wbGVGb250RGF0YTo6Ym91bmRzRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CitBTFdB
WVNfSU5MSU5FIEZsb2F0UmVjdCBGb250Ojpib3VuZHNGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29u
c3QKIHsKICAgICBpZiAoaXNaZXJvV2lkdGhTcGFjZUdseXBoKGdseXBoKSkKICAgICAgICAgcmV0
dXJuIEZsb2F0UmVjdCgpOwpAQCAtMzM4LDcgKzMzOCw3IEBAIEFMV0FZU19JTkxJTkUgRmxvYXRS
ZWN0IFNpbXBsZUZvbnREYXRhOjoKICAgICByZXR1cm4gYm91bmRzOwogfQogCi1BTFdBWVNfSU5M
SU5FIGZsb2F0IFNpbXBsZUZvbnREYXRhOjp3aWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25z
dAorQUxXQVlTX0lOTElORSBmbG9hdCBGb250Ojp3aWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBj
b25zdAogewogICAgIGlmIChpc1plcm9XaWR0aFNwYWNlR2x5cGgoZ2x5cGgpKQogICAgICAgICBy
ZXR1cm4gMDsKQEAgLTM2Niw0ICszNjYsNCBAQCBBTFdBWVNfSU5MSU5FIGZsb2F0IFNpbXBsZUZv
bnREYXRhOjp3aWR0CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIFNpbXBs
ZUZvbnREYXRhX2gKKyNlbmRpZiAvLyBGb250X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTIsMTQgKzUyLDE0IEBACiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKIC8v
IEZJWE1FOiBXZSBtYXkgYmUgYWJsZSB0byBzaW1wbGlmeSB0aGlzIGNvZGUgdXNpbmcgQysrMTEg
dGhyZWFkaW5nIHByaW1pdGl2ZXMsIGluY2x1ZGluZyBzdGQ6OmNhbGxfb25jZSgpLgotc3RhdGlj
IHB0aHJlYWRfbXV0ZXhfdCBmb250RGF0YUxvY2s7CitzdGF0aWMgcHRocmVhZF9tdXRleF90IGZv
bnRMb2NrOwogCiBzdGF0aWMgdm9pZCBpbml0Rm9udENhY2hlTG9ja09uY2UoKQogewogICAgIHB0
aHJlYWRfbXV0ZXhhdHRyX3QgbXV0ZXhBdHRyaWJ1dGU7CiAgICAgcHRocmVhZF9tdXRleGF0dHJf
aW5pdCgmbXV0ZXhBdHRyaWJ1dGUpOwogICAgIHB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5cGUoJm11
dGV4QXR0cmlidXRlLCBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRSk7Ci0gICAgcHRocmVhZF9tdXRl
eF9pbml0KCZmb250RGF0YUxvY2ssICZtdXRleEF0dHJpYnV0ZSk7CisgICAgcHRocmVhZF9tdXRl
eF9pbml0KCZmb250TG9jaywgJm11dGV4QXR0cmlidXRlKTsKICAgICBwdGhyZWFkX211dGV4YXR0
cl9kZXN0cm95KCZtdXRleEF0dHJpYnV0ZSk7CiB9CiAKQEAgLTcxLDEzICs3MSwxMyBAQCBwdWJs
aWM6CiAgICAgRm9udExvY2tlcigpCiAgICAgewogICAgICAgICBwdGhyZWFkX29uY2UoJmluaXRG
b250TG9ja0NvbnRyb2wsIGluaXRGb250Q2FjaGVMb2NrT25jZSk7Ci0gICAgICAgIGludCBsb2Nr
Y29kZSA9IHB0aHJlYWRfbXV0ZXhfbG9jaygmZm9udERhdGFMb2NrKTsKLSAgICAgICAgQVNTRVJU
X1dJVEhfTUVTU0FHRV9VTlVTRUQobG9ja2NvZGUsICFsb2NrY29kZSwgImZvbnREYXRhTG9jayBs
b2NrIGZhaWxlZCB3aXRoIGNvZGU6JWQiLCBsb2NrY29kZSk7ICAgIAorICAgICAgICBpbnQgbG9j
a2NvZGUgPSBwdGhyZWFkX211dGV4X2xvY2soJmZvbnRMb2NrKTsKKyAgICAgICAgQVNTRVJUX1dJ
VEhfTUVTU0FHRV9VTlVTRUQobG9ja2NvZGUsICFsb2NrY29kZSwgImZvbnRMb2NrIGxvY2sgZmFp
bGVkIHdpdGggY29kZTolZCIsIGxvY2tjb2RlKTsgICAgCiAgICAgfQogICAgIH5Gb250TG9ja2Vy
KCkKICAgICB7Ci0gICAgICAgIGludCBsb2NrY29kZSA9IHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZm
b250RGF0YUxvY2spOwotICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFX1VOVVNFRChsb2NrY29k
ZSwgIWxvY2tjb2RlLCAiZm9udERhdGFMb2NrIHVubG9jayBmYWlsZWQgd2l0aCBjb2RlOiVkIiwg
bG9ja2NvZGUpOworICAgICAgICBpbnQgbG9ja2NvZGUgPSBwdGhyZWFkX211dGV4X3VubG9jaygm
Zm9udExvY2spOworICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFX1VOVVNFRChsb2NrY29kZSwg
IWxvY2tjb2RlLCAiZm9udExvY2sgdW5sb2NrIGZhaWxlZCB3aXRoIGNvZGU6JWQiLCBsb2NrY29k
ZSk7CiAgICAgfQogfTsKICNlbmRpZiAvLyBQTEFURk9STShJT1MpCkBAIC0zNTksNyArMzU5LDcg
QEAgc3RydWN0IEZvbnREYXRhQ2FjaGVLZXlUcmFpdHMgOiBXVEY6OkdlbgogICAgIH0KIH07CiAK
LXR5cGVkZWYgSGFzaE1hcDxGb250UGxhdGZvcm1EYXRhLCBSZWZQdHI8U2ltcGxlRm9udERhdGE+
LCBGb250RGF0YUNhY2hlS2V5SGFzaCwgRm9udERhdGFDYWNoZUtleVRyYWl0cz4gRm9udERhdGFD
YWNoZTsKK3R5cGVkZWYgSGFzaE1hcDxGb250UGxhdGZvcm1EYXRhLCBSZWZQdHI8Rm9udD4sIEZv
bnREYXRhQ2FjaGVLZXlIYXNoLCBGb250RGF0YUNhY2hlS2V5VHJhaXRzPiBGb250RGF0YUNhY2hl
OwogCiBzdGF0aWMgRm9udERhdGFDYWNoZSYgY2FjaGVkRm9udHMoKQogewpAQCAtMzc5LDcgKzM3
OSw3IEBAIGNvbnN0IGludCBjVGFyZ2V0SW5hY3RpdmVGb250RGF0YSA9IDIwMDsKIGNvbnN0IGlu
dCBjTWF4VW5kZXJNZW1vcnlQcmVzc3VyZUluYWN0aXZlRm9udERhdGEgPSA1MDsKIGNvbnN0IGlu
dCBjVGFyZ2V0VW5kZXJNZW1vcnlQcmVzc3VyZUluYWN0aXZlRm9udERhdGEgPSAzMDsKIAotUmVm
UHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmZvbnRGb3JGYW1pbHkoY29uc3QgRm9udERl
c2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5LCBi
b29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSkKK1JlZlB0cjxGb250PiBGb250Q2FjaGU6OmZvbnRG
b3JGYW1pbHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0
b21pY1N0cmluZyYgZmFtaWx5LCBib29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSkKIHsKICAgICBp
ZiAoIW1fcHVyZ2VUaW1lci5pc0FjdGl2ZSgpKQogICAgICAgICBtX3B1cmdlVGltZXIuc3RhcnRP
bmVTaG90KHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM6Onplcm8oKSk7CkBAIC0zOTEsNyArMzkx
LDcgQEAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmZvbnRGbwogICAgIHJldHVy
biBmb250Rm9yUGxhdGZvcm1EYXRhKCpwbGF0Zm9ybURhdGEpOwogfQogCi1SZWY8U2ltcGxlRm9u
dERhdGE+IEZvbnRDYWNoZTo6Zm9udEZvclBsYXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1E
YXRhJiBwbGF0Zm9ybURhdGEpCitSZWY8Rm9udD4gRm9udENhY2hlOjpmb250Rm9yUGxhdGZvcm1E
YXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSkKIHsKICNpZiBQTEFURk9S
TShJT1MpCiAgICAgRm9udExvY2tlciBmb250TG9ja2VyOwpAQCAtMzk5LDcgKzM5OSw3IEBAIFJl
ZjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpmb250Rm9yUGwKICAgICAKICAgICBhdXRvIGFk
ZFJlc3VsdCA9IGNhY2hlZEZvbnRzKCkuYWRkKHBsYXRmb3JtRGF0YSwgbnVsbHB0cik7CiAgICAg
aWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZh
bHVlID0gU2ltcGxlRm9udERhdGE6OmNyZWF0ZShwbGF0Zm9ybURhdGEpOworICAgICAgICBhZGRS
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gRm9udDo6Y3JlYXRlKHBsYXRmb3JtRGF0YSk7CiAKICAg
ICByZXR1cm4gKmFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiB9CkBAIC00MTYsNyArNDE2LDcg
QEAgdm9pZCBGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YUlmTgogCiAgICAgaWYgKGNh
Y2hlZEZvbnRzKCkuc2l6ZSgpIDwgaW5hY3RpdmVGb250RGF0YUxpbWl0KQogICAgICAgICByZXR1
cm47Ci0gICAgaW50IGluYWN0aXZlQ291bnQgPSBpbmFjdGl2ZUZvbnREYXRhQ291bnQoKTsKKyAg
ICBpbnQgaW5hY3RpdmVDb3VudCA9IGluYWN0aXZlRm9udENvdW50KCk7CiAgICAgaWYgKGluYWN0
aXZlQ291bnQgPD0gaW5hY3RpdmVGb250RGF0YUxpbWl0KQogICAgICAgICByZXR1cm47CiAKQEAg
LTQzNCw3ICs0MzQsNyBAQCB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhKGlu
CiAjZW5kaWYKIAogICAgIHdoaWxlIChwdXJnZUNvdW50KSB7Ci0gICAgICAgIFZlY3RvcjxSZWZQ
dHI8U2ltcGxlRm9udERhdGE+LCAyMD4gZm9udHNUb0RlbGV0ZTsKKyAgICAgICAgVmVjdG9yPFJl
ZlB0cjxGb250PiwgMjA+IGZvbnRzVG9EZWxldGU7CiAgICAgICAgIGZvciAoYXV0byYgZm9udCA6
IGNhY2hlZEZvbnRzKCkudmFsdWVzKCkpIHsKICAgICAgICAgICAgIGlmICghZm9udC0+aGFzT25l
UmVmKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC00NjYsOCArNDY2LDggQEAgdm9p
ZCBGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YShpbgogICAgICAgICAgICAgaWYgKHZl
cnRpY2FsRGF0YSkKICAgICAgICAgICAgICAgICB2ZXJ0aWNhbERhdGEtPm1faW5Gb250Q2FjaGUg
PSBmYWxzZTsKICAgICAgICAgfQotICAgICAgICBmb3IgKGF1dG8mIGZvbnREYXRhIDogY2FjaGVk
Rm9udHMoKS52YWx1ZXMoKSkgewotICAgICAgICAgICAgYXV0byogdmVydGljYWxEYXRhID0gY29u
c3RfY2FzdDxPcGVuVHlwZVZlcnRpY2FsRGF0YSo+KGZvbnREYXRhLT52ZXJ0aWNhbERhdGEoKSk7
CisgICAgICAgIGZvciAoYXV0byYgZm9udCA6IGNhY2hlZEZvbnRzKCkudmFsdWVzKCkpIHsKKyAg
ICAgICAgICAgIGF1dG8qIHZlcnRpY2FsRGF0YSA9IGNvbnN0X2Nhc3Q8T3BlblR5cGVWZXJ0aWNh
bERhdGEqPihmb250LT52ZXJ0aWNhbERhdGEoKSk7CiAgICAgICAgICAgICBpZiAodmVydGljYWxE
YXRhKQogICAgICAgICAgICAgICAgIHZlcnRpY2FsRGF0YS0+bV9pbkZvbnRDYWNoZSA9IHRydWU7
CiAgICAgICAgIH0KQEAgLTQ4MywxMiArNDgzLDEyIEBAIHZvaWQgRm9udENhY2hlOjpwdXJnZUlu
YWN0aXZlRm9udERhdGEoaW4KICNlbmRpZgogfQogCi1zaXplX3QgRm9udENhY2hlOjpmb250RGF0
YUNvdW50KCkKK3NpemVfdCBGb250Q2FjaGU6OmZvbnRDb3VudCgpCiB7CiAgICAgcmV0dXJuIGNh
Y2hlZEZvbnRzKCkuc2l6ZSgpOwogfQogCi1zaXplX3QgRm9udENhY2hlOjppbmFjdGl2ZUZvbnRE
YXRhQ291bnQoKQorc2l6ZV90IEZvbnRDYWNoZTo6aW5hY3RpdmVGb250Q291bnQoKQogewogI2lm
IFBMQVRGT1JNKElPUykKICAgICBGb250TG9ja2VyIGZvbnRMb2NrZXI7CkBAIC01NTEsNyArNTUx
LDcgQEAgdm9pZCBGb250Q2FjaGU6OmludmFsaWRhdGUoKQogfQogCiAjaWYgIVBMQVRGT1JNKENP
Q09BKQotUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OnNpbWlsYXJGb250UGxhdGZv
cm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpCitSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpz
aW1pbGFyRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mKQogewogICAgIHJldHVybiBudWxscHRy
OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hl
LmgJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnRDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIGNsYXNzIEZvbnRD
YXNjYWRlOwogY2xhc3MgRm9udFBsYXRmb3JtRGF0YTsKIGNsYXNzIEZvbnRTZWxlY3RvcjsKIGNs
YXNzIE9wZW5UeXBlVmVydGljYWxEYXRhOwotY2xhc3MgU2ltcGxlRm9udERhdGE7CitjbGFzcyBG
b250OwogCiAjaWYgUExBVEZPUk0oV0lOKQogI2lmIFVTRShJTUxBTkdfRk9OVF9MSU5LMikKQEAg
LTExMSw3ICsxMTEsNyBAQCBwdWJsaWM6CiAgICAgZnJpZW5kIEZvbnRDYWNoZSYgZm9udENhY2hl
KCk7CiAKICAgICAvLyBUaGlzIG1ldGhvZCBpcyBpbXBsZW1lbnRlZCBieSB0aGUgcGxhdGZvcm0u
Ci0gICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBzeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMo
Y29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgU2ltcGxlRm9udERhdGEqIG9yaWdpbmFsRm9u
dERhdGEsIGJvb2wgaXNQbGF0Zm9ybUZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQg
bGVuZ3RoKTsKKyAgICBSZWZQdHI8Rm9udD4gc3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEZvbnQqIG9yaWdpbmFsRm9udERhdGEsIGJvb2wg
aXNQbGF0Zm9ybUZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKTsKIAog
ICAgIC8vIEFsc28gaW1wbGVtZW50ZWQgYnkgdGhlIHBsYXRmb3JtLgogICAgIHZvaWQgcGxhdGZv
cm1Jbml0KCk7CkBAIC0xMjgsMTAgKzEyOCwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdldFRy
YWl0c0luRmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYsIFZlY3Rvcjx1bnNpZ25lZD4mKTsKIAot
ICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gZm9udEZvckZhbWlseShj
b25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9taWNTdHJpbmcmLCBib29sIGNoZWNraW5n
QWx0ZXJuYXRlTmFtZSA9IGZhbHNlKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWY8U2ltcGxlRm9u
dERhdGE+IGxhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJik7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgUmVmPFNpbXBsZUZvbnREYXRhPiBmb250Rm9yUGxhdGZvcm1EYXRh
KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsKLSAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IHNp
bWlsYXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpOworICAgIFdFQkNP
UkVfRVhQT1JUIFJlZlB0cjxGb250PiBmb250Rm9yRmFtaWx5KGNvbnN0IEZvbnREZXNjcmlwdGlv
biYsIGNvbnN0IEF0b21pY1N0cmluZyYsIGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1lID0gZmFs
c2UpOworICAgIFdFQkNPUkVfRVhQT1JUIFJlZjxGb250PiBsYXN0UmVzb3J0RmFsbGJhY2tGb250
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpOworICAgIFdFQkNPUkVfRVhQT1JUIFJlZjxGb250PiBm
b250Rm9yUGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsKKyAgICBSZWZQdHI8
Rm9udD4gc2ltaWxhckZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJik7CiAKICAgICB2b2lkIGFk
ZENsaWVudChGb250U2VsZWN0b3IqKTsKICAgICB2b2lkIHJlbW92ZUNsaWVudChGb250U2VsZWN0
b3IqKTsKQEAgLTEzOSwxMiArMTM5LDEyIEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBzaG9ydCBn
ZW5lcmF0aW9uKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBpbnZhbGlkYXRlKCk7CiAKLSAg
ICBXRUJDT1JFX0VYUE9SVCBzaXplX3QgZm9udERhdGFDb3VudCgpOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHNpemVfdCBpbmFjdGl2ZUZvbnREYXRhQ291bnQoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBz
aXplX3QgZm9udENvdW50KCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc2l6ZV90IGluYWN0aXZlRm9u
dENvdW50KCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwdXJnZUluYWN0aXZlRm9udERhdGEo
aW50IGNvdW50ID0gSU5UX01BWCk7CiAKICNpZiBQTEFURk9STShXSU4pCi0gICAgUmVmUHRyPFNp
bXBsZUZvbnREYXRhPiBmb250RGF0YUZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiwgY29uc3QgTE9HRk9OVCYsIEF0b21pY1N0cmluZyYgb3V0Rm9udEZhbWls
eU5hbWUpOworICAgIFJlZlB0cjxGb250PiBmb250RnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChj
b25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBMT0dGT05UJiwgQXRvbWljU3RyaW5nJiBvdXRG
b250RmFtaWx5TmFtZSk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkK
QEAgLTE3Myw3ICsxNzMsNyBAQCBwcml2YXRlOgogICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIGlt
cGxlbWVudGVkIGJ5IGVhY2ggcGxhdGZvcm0uCiAjaWYgUExBVEZPUk0oSU9TKQogICAgIEZvbnRQ
bGF0Zm9ybURhdGEqIGdldEN1c3RvbUZhbGxiYWNrRm9udChjb25zdCBVSW50MzIsIGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYpOwotICAgIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IGdldFN5c3Rl
bUZvbnRGYWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3Qg
U2ltcGxlRm9udERhdGEqLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCk7Cisg
ICAgUGFzc1JlZlB0cjxGb250PiBnZXRTeXN0ZW1Gb250RmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEZvbnQqLCBjb25zdCBVQ2hhciogY2hhcmFjdGVy
cywgaW50IGxlbmd0aCk7CiAjZW5kaWYKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3Jt
RGF0YT4gY3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25z
dCBBdG9taWNTdHJpbmcmIGZhbWlseSk7CiAKQEAgLTE4Miw3ICsxODIsNyBAQCBwcml2YXRlOgog
I2lmIFBMQVRGT1JNKENPQ09BKQogICAgIGZyaWVuZCBjbGFzcyBDb21wbGV4VGV4dENvbnRyb2xs
ZXI7CiAjZW5kaWYKLSAgICBmcmllbmQgY2xhc3MgU2ltcGxlRm9udERhdGE7CisgICAgZnJpZW5k
IGNsYXNzIEZvbnQ7CiB9OwogCiAvLyBHZXQgdGhlIGdsb2JhbCBmb250Q2FjaGUuCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCShy
ZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
Q2FzY2FkZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNCw4ICsxMjQsOCBAQCBGb250Q2FzY2Fk
ZTo6Rm9udENhc2NhZGUoY29uc3QgRm9udERlc2NyCiB9CiAKIC8vIEZJWE1FOiBXZSBzaG91bGQg
bWFrZSB0aGlzIGNvbnN0cnVjdG9yIHBsYXRmb3JtLWluZGVwZW5kZW50LgotRm9udENhc2NhZGU6
OkZvbnRDYXNjYWRlKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnREYXRhLCBib29sIGlzUHJp
bnRlckZvbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmdNb2RlKQotICAgIDogbV9n
bHlwaHMoRm9udEdseXBoczo6Y3JlYXRlRm9yUGxhdGZvcm1Gb250KGZvbnREYXRhKSkKK0ZvbnRD
YXNjYWRlOjpGb250Q2FzY2FkZShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBmb250LCBib29sIGlz
UHJpbnRlckZvbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmdNb2RlKQorICAgIDog
bV9nbHlwaHMoRm9udEdseXBoczo6Y3JlYXRlRm9yUGxhdGZvcm1Gb250KGZvbnQpKQogICAgICwg
bV9sZXR0ZXJTcGFjaW5nKDApCiAgICAgLCBtX3dvcmRTcGFjaW5nKDApCiAgICAgLCBtX3VzZUJh
Y2tzbGFzaEFzWWVuU3ltYm9sKGZhbHNlKQpAQCAtMTM0LDI3ICsxMzQsMjcgQEAgRm9udENhc2Nh
ZGU6OkZvbnRDYXNjYWRlKGNvbnN0IEZvbnRQbGF0ZgogICAgIG1fZm9udERlc2NyaXB0aW9uLnNl
dFVzZVByaW50ZXJGb250KGlzUHJpbnRlckZvbnQpOwogICAgIG1fZm9udERlc2NyaXB0aW9uLnNl
dEZvbnRTbW9vdGhpbmcoZm9udFNtb290aGluZ01vZGUpOwogI2lmIFBMQVRGT1JNKElPUykKLSAg
ICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKENURm9udEdldFNpemUoZm9udERh
dGEuZm9udCgpKSk7Ci0gICAgbV9mb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKENURm9u
dEdldFNpemUoZm9udERhdGEuZm9udCgpKSk7Ci0gICAgbV9mb250RGVzY3JpcHRpb24uc2V0SXNJ
dGFsaWMoQ1RGb250R2V0U3ltYm9saWNUcmFpdHMoZm9udERhdGEuZm9udCgpKSAmIGtDVEZvbnRU
cmFpdEl0YWxpYyk7Ci0gICAgbV9mb250RGVzY3JpcHRpb24uc2V0V2VpZ2h0KChDVEZvbnRHZXRT
eW1ib2xpY1RyYWl0cyhmb250RGF0YS5mb250KCkpICYga0NURm9udFRyYWl0Qm9sZCkgPyBGb250
V2VpZ2h0Qm9sZCA6IEZvbnRXZWlnaHROb3JtYWwpOworICAgIG1fZm9udERlc2NyaXB0aW9uLnNl
dFNwZWNpZmllZFNpemUoQ1RGb250R2V0U2l6ZShmb250LmZvbnQoKSkpOworICAgIG1fZm9udERl
c2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShDVEZvbnRHZXRTaXplKGZvbnQuZm9udCgpKSk7Cisg
ICAgbV9mb250RGVzY3JpcHRpb24uc2V0SXNJdGFsaWMoQ1RGb250R2V0U3ltYm9saWNUcmFpdHMo
Zm9udC5mb250KCkpICYga0NURm9udFRyYWl0SXRhbGljKTsKKyAgICBtX2ZvbnREZXNjcmlwdGlv
bi5zZXRXZWlnaHQoKENURm9udEdldFN5bWJvbGljVHJhaXRzKGZvbnQuZm9udCgpKSAmIGtDVEZv
bnRUcmFpdEJvbGQpID8gRm9udFdlaWdodEJvbGQgOiBGb250V2VpZ2h0Tm9ybWFsKTsKICNlbmRp
ZgogfQogCiAvLyBGSVhNRTogV2Ugc2hvdWxkIG1ha2UgdGhpcyBjb25zdHJ1Y3RvciBwbGF0Zm9y
bS1pbmRlcGVuZGVudC4KICNpZiBQTEFURk9STShJT1MpCi1Gb250Q2FzY2FkZTo6Rm9udENhc2Nh
ZGUoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZm9udERhdGEsIFBhc3NSZWZQdHI8Rm9udFNlbGVj
dG9yPiBmb250U2VsZWN0b3IpCi0gICAgOiBtX2dseXBocyhGb250R2x5cGhzOjpjcmVhdGVGb3JQ
bGF0Zm9ybUZvbnQoZm9udERhdGEpKQorRm9udENhc2NhZGU6OkZvbnRDYXNjYWRlKGNvbnN0IEZv
bnRQbGF0Zm9ybURhdGEmIGZvbnQsIFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPiBmb250U2VsZWN0
b3IpCisgICAgOiBtX2dseXBocyhGb250R2x5cGhzOjpjcmVhdGVGb3JQbGF0Zm9ybUZvbnQoZm9u
dCkpCiAgICAgLCBtX2xldHRlclNwYWNpbmcoMCkKICAgICAsIG1fd29yZFNwYWNpbmcoMCkKICAg
ICAsIG1fdHlwZXNldHRpbmdGZWF0dXJlcyhjb21wdXRlVHlwZXNldHRpbmdGZWF0dXJlcygpKQog
ewotICAgIENURm9udFJlZiBwcmltYXJ5Rm9udCA9IGZvbnREYXRhLmZvbnQoKTsKKyAgICBDVEZv
bnRSZWYgcHJpbWFyeUZvbnQgPSBmb250LmZvbnQoKTsKICAgICBtX2ZvbnREZXNjcmlwdGlvbi5z
ZXRTcGVjaWZpZWRTaXplKENURm9udEdldFNpemUocHJpbWFyeUZvbnQpKTsKICAgICBtX2ZvbnRE
ZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoQ1RGb250R2V0U2l6ZShwcmltYXJ5Rm9udCkpOwog
ICAgIG1fZm9udERlc2NyaXB0aW9uLnNldElzSXRhbGljKENURm9udEdldFN5bWJvbGljVHJhaXRz
KHByaW1hcnlGb250KSAmIGtDVEZvbnRUcmFpdEl0YWxpYyk7CiAgICAgbV9mb250RGVzY3JpcHRp
b24uc2V0V2VpZ2h0KChDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhwcmltYXJ5Rm9udCkgJiBrQ1RG
b250VHJhaXRCb2xkKSA/IEZvbnRXZWlnaHRCb2xkIDogRm9udFdlaWdodE5vcm1hbCk7Ci0gICAg
bV9mb250RGVzY3JpcHRpb24uc2V0VXNlUHJpbnRlckZvbnQoZm9udERhdGEuaXNQcmludGVyRm9u
dCgpKTsKKyAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRVc2VQcmludGVyRm9udChmb250LmlzUHJp
bnRlckZvbnQoKSk7CiAgICAgbV9nbHlwaHMgPSByZXRyaWV2ZU9yQWRkQ2FjaGVkRm9udEdseXBo
cyhtX2ZvbnREZXNjcmlwdGlvbiwgZm9udFNlbGVjdG9yLmdldCgpKTsKIH0KICNlbmRpZgpAQCAt
MzcxLDcgKzM3MSw3IEBAIHZvaWQgRm9udENhc2NhZGU6OmRyYXdFbXBoYXNpc01hcmtzKEdyYXAK
ICAgICAgICAgZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChjb250ZXh0LCBydW4sIG1h
cmssIHBvaW50LCBmcm9tLCB0byk7CiB9CiAKLWZsb2F0IEZvbnRDYXNjYWRlOjp3aWR0aChjb25z
dCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tG
b250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKK2Zsb2F0IEZvbnRDYXNj
YWRlOjp3aWR0aChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxs
YmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAogewogICAgIENv
ZGVQYXRoIGNvZGVQYXRoVG9Vc2UgPSBjb2RlUGF0aChydW4pOwogICAgIGlmIChjb2RlUGF0aFRv
VXNlICE9IENvbXBsZXgpIHsKQEAgLTM4OSw3ICszODksNyBAQCBmbG9hdCBGb250Q2FzY2FkZTo6
d2lkdGgoY29uc3QgVGV4dFJ1biYgCiAgICAgaWYgKGNhY2hlRW50cnkgJiYgIXN0ZDo6aXNuYW4o
KmNhY2hlRW50cnkpKQogICAgICAgICByZXR1cm4gKmNhY2hlRW50cnk7CiAKLSAgICBIYXNoU2V0
PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4gbG9jYWxGYWxsYmFja0ZvbnRzOworICAgIEhhc2hTZXQ8
Y29uc3QgRm9udCo+IGxvY2FsRmFsbGJhY2tGb250czsKICAgICBpZiAoIWZhbGxiYWNrRm9udHMp
CiAgICAgICAgIGZhbGxiYWNrRm9udHMgPSAmbG9jYWxGYWxsYmFja0ZvbnRzOwogCkBAIC00MTYs
MTAgKzQxNiwxMCBAQCBmbG9hdCBGb250Q2FzY2FkZTo6d2lkdGgoY29uc3QgVGV4dFJ1biYgCiAg
ICAgcmV0dXJuIHdpZHRoKHJ1bik7CiB9CiAKLUdseXBoRGF0YSBGb250Q2FzY2FkZTo6Z2x5cGhE
YXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYywgYm9vbCBtaXJyb3IsIEZvbnREYXRhVmFyaWFudCB2
YXJpYW50KSBjb25zdAorR2x5cGhEYXRhIEZvbnRDYXNjYWRlOjpnbHlwaERhdGFGb3JDaGFyYWN0
ZXIoVUNoYXIzMiBjLCBib29sIG1pcnJvciwgRm9udFZhcmlhbnQgdmFyaWFudCkgY29uc3QKIHsK
ICAgICBpZiAodmFyaWFudCA9PSBBdXRvVmFyaWFudCkgewotICAgICAgICBpZiAobV9mb250RGVz
Y3JpcHRpb24uc21hbGxDYXBzKCkgJiYgIXByaW1hcnlGb250RGF0YSgpLmlzU1ZHRm9udCgpKSB7
CisgICAgICAgIGlmIChtX2ZvbnREZXNjcmlwdGlvbi5zbWFsbENhcHMoKSAmJiAhcHJpbWFyeUZv
bnQoKS5pc1NWR0ZvbnQoKSkgewogICAgICAgICAgICAgVUNoYXIzMiB1cHBlckMgPSB1X3RvdXBw
ZXIoYyk7CiAgICAgICAgICAgICBpZiAodXBwZXJDICE9IGMpIHsKICAgICAgICAgICAgICAgICBj
ID0gdXBwZXJDOwpAQCAtNDQ2LDcgKzQ0Niw3IEBAIHZvaWQgRm9udENhc2NhZGU6OmRlbGV0ZUxh
eW91dChUZXh0TGF5b3UKIHsKIH0KIAotZmxvYXQgRm9udENhc2NhZGU6OndpZHRoKFRleHRMYXlv
dXQmLCB1bnNpZ25lZCwgdW5zaWduZWQsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiop
CitmbG9hdCBGb250Q2FzY2FkZTo6d2lkdGgoVGV4dExheW91dCYsIHVuc2lnbmVkLCB1bnNpZ25l
ZCwgSGFzaFNldDxjb25zdCBGb250Kj4qKQogewogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgIHJldHVybiAwOwpAQCAtNTA1LDcgKzUwNSw3IEBAIGJvb2wgRm9udENhc2NhZGU6Omhhc1Zh
bGlkQXZlcmFnZUNoYXJXaWQKIAogI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oSU9TKQog
ICAgIC8vIEludGVybmFsIGZvbnRzIG9uIE9TIFggYW5kIGlPUyBhbHNvIGhhdmUgYW4gaW52YWxp
ZCBlbnRyeSBpbiB0aGUgdGFibGUgZm9yIGF2Z0NoYXJXaWR0aC4KLSAgICBpZiAocHJpbWFyeUZv
bnREYXRhSXNTeXN0ZW1Gb250KCkpCisgICAgaWYgKHByaW1hcnlGb250SXNTeXN0ZW1Gb250KCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgogCkBAIC01MjUsNyArNTI1LDcgQEAgYm9v
bCBGb250Q2FzY2FkZTo6ZmFzdEF2ZXJhZ2VDaGFyV2lkdGhJZgogewogICAgIGJvb2wgc3VjY2Vz
cyA9IGhhc1ZhbGlkQXZlcmFnZUNoYXJXaWR0aCgpOwogICAgIGlmIChzdWNjZXNzKQotICAgICAg
ICB3aWR0aCA9IHJvdW5kZihwcmltYXJ5Rm9udERhdGEoKS5hdmdDaGFyV2lkdGgoKSk7IC8vIEZJ
WE1FOiBwcmltYXJ5Rm9udERhdGEoKSBtaWdodCBub3QgY29ycmVzcG9uZCB0byBmaXJzdEZhbWls
eSgpLgorICAgICAgICB3aWR0aCA9IHJvdW5kZihwcmltYXJ5Rm9udCgpLmF2Z0NoYXJXaWR0aCgp
KTsgLy8gRklYTUU6IHByaW1hcnlGb250KCkgbWlnaHQgbm90IGNvcnJlc3BvbmQgdG8gZmlyc3RG
YW1pbHkoKS4KICAgICByZXR1cm4gc3VjY2VzczsKIH0KIApAQCAtMTE3Myw3ICsxMTczLDcgQEAg
aW50IEZvbnRDYXNjYWRlOjplbXBoYXNpc01hcmtBc2NlbnQoY29ucwogICAgIGlmICghZ2V0RW1w
aGFzaXNNYXJrR2x5cGhEYXRhKG1hcmssIG1hcmtHbHlwaERhdGEpKQogICAgICAgICByZXR1cm4g
MDsKIAotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBtYXJrRm9udERhdGEgPSBtYXJrR2x5cGhE
YXRhLmZvbnREYXRhOworICAgIGNvbnN0IEZvbnQqIG1hcmtGb250RGF0YSA9IG1hcmtHbHlwaERh
dGEuZm9udDsKICAgICBBU1NFUlQobWFya0ZvbnREYXRhKTsKICAgICBpZiAoIW1hcmtGb250RGF0
YSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMTg3LDcgKzExODcsNyBAQCBpbnQgRm9udENhc2Nh
ZGU6OmVtcGhhc2lzTWFya0Rlc2NlbnQoY29uCiAgICAgaWYgKCFnZXRFbXBoYXNpc01hcmtHbHlw
aERhdGEobWFyaywgbWFya0dseXBoRGF0YSkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgY29u
c3QgU2ltcGxlRm9udERhdGEqIG1hcmtGb250RGF0YSA9IG1hcmtHbHlwaERhdGEuZm9udERhdGE7
CisgICAgY29uc3QgRm9udCogbWFya0ZvbnREYXRhID0gbWFya0dseXBoRGF0YS5mb250OwogICAg
IEFTU0VSVChtYXJrRm9udERhdGEpOwogICAgIGlmICghbWFya0ZvbnREYXRhKQogICAgICAgICBy
ZXR1cm4gMDsKQEAgLTEyMDEsNyArMTIwMSw3IEBAIGludCBGb250Q2FzY2FkZTo6ZW1waGFzaXNN
YXJrSGVpZ2h0KGNvbnMKICAgICBpZiAoIWdldEVtcGhhc2lzTWFya0dseXBoRGF0YShtYXJrLCBt
YXJrR2x5cGhEYXRhKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBjb25zdCBTaW1wbGVGb250
RGF0YSogbWFya0ZvbnREYXRhID0gbWFya0dseXBoRGF0YS5mb250RGF0YTsKKyAgICBjb25zdCBG
b250KiBtYXJrRm9udERhdGEgPSBtYXJrR2x5cGhEYXRhLmZvbnQ7CiAgICAgQVNTRVJUKG1hcmtG
b250RGF0YSk7CiAgICAgaWYgKCFtYXJrRm9udERhdGEpCiAgICAgICAgIHJldHVybiAwOwpAQCAt
MTI3Myw3ICsxMjczLDcgQEAgdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBoQnVmZmVyKEdyYXBo
aQogI2VuZGlmCiAKICAgICAvLyBEcmF3IGVhY2ggY29udGlndW91cyBydW4gb2YgZ2x5cGhzIHRo
YXQgdXNlIHRoZSBzYW1lIGZvbnQgZGF0YS4KLSAgICBjb25zdCBTaW1wbGVGb250RGF0YSogZm9u
dERhdGEgPSBnbHlwaEJ1ZmZlci5mb250RGF0YUF0KDApOworICAgIGNvbnN0IEZvbnQqIGZvbnRE
YXRhID0gZ2x5cGhCdWZmZXIuZm9udEF0KDApOwogICAgIEZsb2F0U2l6ZSBvZmZzZXQgPSBnbHlw
aEJ1ZmZlci5vZmZzZXRBdCgwKTsKICAgICBGbG9hdFBvaW50IHN0YXJ0UG9pbnQocG9pbnQueCgp
LCBwb2ludC55KCkgLSBnbHlwaEJ1ZmZlci5pbml0aWFsQWR2YW5jZSgpLmhlaWdodCgpKTsKICAg
ICBmbG9hdCBuZXh0WCA9IHN0YXJ0UG9pbnQueCgpICsgZ2x5cGhCdWZmZXIuYWR2YW5jZUF0KDAp
LndpZHRoKCk7CkBAIC0xMjg0LDcgKzEyODQsNyBAQCB2b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5
cGhCdWZmZXIoR3JhcGhpCiAgICAgVGV4dFJ1bjo6UmVuZGVyaW5nQ29udGV4dCogcmVuZGVyaW5n
Q29udGV4dCA9IHJ1bi5yZW5kZXJpbmdDb250ZXh0KCk7CiAjZW5kaWYKICAgICB3aGlsZSAobmV4
dEdseXBoIDwgZ2x5cGhCdWZmZXIuc2l6ZSgpKSB7Ci0gICAgICAgIGNvbnN0IFNpbXBsZUZvbnRE
YXRhKiBuZXh0Rm9udERhdGEgPSBnbHlwaEJ1ZmZlci5mb250RGF0YUF0KG5leHRHbHlwaCk7Cisg
ICAgICAgIGNvbnN0IEZvbnQqIG5leHRGb250RGF0YSA9IGdseXBoQnVmZmVyLmZvbnRBdChuZXh0
R2x5cGgpOwogICAgICAgICBGbG9hdFNpemUgbmV4dE9mZnNldCA9IGdseXBoQnVmZmVyLm9mZnNl
dEF0KG5leHRHbHlwaCk7CiAKICAgICAgICAgaWYgKG5leHRGb250RGF0YSAhPSBmb250RGF0YSB8
fCBuZXh0T2Zmc2V0ICE9IG9mZnNldCkgewpAQCAtMTMxNyw3ICsxMzE3LDcgQEAgdm9pZCBGb250
Q2FzY2FkZTo6ZHJhd0dseXBoQnVmZmVyKEdyYXBoaQogICAgIH0KIH0KIAotaW5saW5lIHN0YXRp
YyBmbG9hdCBvZmZzZXRUb01pZGRsZU9mR2x5cGgoY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnRE
YXRhLCBHbHlwaCBnbHlwaCkKK2lubGluZSBzdGF0aWMgZmxvYXQgb2Zmc2V0VG9NaWRkbGVPZkds
eXBoKGNvbnN0IEZvbnQqIGZvbnREYXRhLCBHbHlwaCBnbHlwaCkKIHsKICAgICBpZiAoZm9udERh
dGEtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbCkgewogICAgICAg
ICBGbG9hdFJlY3QgYm91bmRzID0gZm9udERhdGEtPmJvdW5kc0ZvckdseXBoKGdseXBoKTsKQEAg
LTEzMjksNyArMTMyOSw3IEBAIGlubGluZSBzdGF0aWMgZmxvYXQgb2Zmc2V0VG9NaWRkbGVPZkds
eXAKIAogaW5saW5lIHN0YXRpYyBmbG9hdCBvZmZzZXRUb01pZGRsZU9mR2x5cGhBdEluZGV4KGNv
bnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgc2l6ZV90IGkpCiB7Ci0gICAgcmV0dXJuIG9m
ZnNldFRvTWlkZGxlT2ZHbHlwaChnbHlwaEJ1ZmZlci5mb250RGF0YUF0KGkpLCBnbHlwaEJ1ZmZl
ci5nbHlwaEF0KGkpKTsKKyAgICByZXR1cm4gb2Zmc2V0VG9NaWRkbGVPZkdseXBoKGdseXBoQnVm
ZmVyLmZvbnRBdChpKSwgZ2x5cGhCdWZmZXIuZ2x5cGhBdChpKSk7CiB9CiAKIHZvaWQgRm9udENh
c2NhZGU6OmRyYXdFbXBoYXNpc01hcmtzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3Qg
VGV4dFJ1biYgcnVuLCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGNvbnN0IEF0b21p
Y1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0CkBAIC0xMzM4LDcg
KzEzMzgsNyBAQCB2b2lkIEZvbnRDYXNjYWRlOjpkcmF3RW1waGFzaXNNYXJrcyhHcmFwCiAgICAg
aWYgKCFnZXRFbXBoYXNpc01hcmtHbHlwaERhdGEobWFyaywgbWFya0dseXBoRGF0YSkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBtYXJrRm9udERhdGEgPSBt
YXJrR2x5cGhEYXRhLmZvbnREYXRhOworICAgIGNvbnN0IEZvbnQqIG1hcmtGb250RGF0YSA9IG1h
cmtHbHlwaERhdGEuZm9udDsKICAgICBBU1NFUlQobWFya0ZvbnREYXRhKTsKICAgICBpZiAoIW1h
cmtGb250RGF0YSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTM2MSw3ICsxMzYxLDcgQEAgdm9pZCBG
b250Q2FzY2FkZTo6ZHJhd0VtcGhhc2lzTWFya3MoR3JhcAogICAgIGRyYXdHbHlwaEJ1ZmZlcihj
b250ZXh0LCBydW4sIG1hcmtCdWZmZXIsIHN0YXJ0UG9pbnQpOwogfQogCi1mbG9hdCBGb250Q2Fz
Y2FkZTo6ZmxvYXRXaWR0aEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0
PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGds
eXBoT3ZlcmZsb3cpIGNvbnN0CitmbG9hdCBGb250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZvclNpbXBs
ZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tG
b250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKIHsKICAgICBXaWR0aEl0
ZXJhdG9yIGl0KHRoaXMsIHJ1biwgZmFsbGJhY2tGb250cywgZ2x5cGhPdmVyZmxvdyk7CiAgICAg
R2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250Q2FzY2FkZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI2LDEwICsyNiwxMCBAQAogI2RlZmluZSBGb250Q2FzY2FkZV9oCiAKICNpbmNsdWRlICJEYXNo
QXJyYXkuaCIKKyNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgi
CiAjaW5jbHVkZSAiRm9udEdseXBocy5oIgogI2luY2x1ZGUgIlBhdGguaCIKLSNpbmNsdWRlICJT
aW1wbGVGb250RGF0YS5oIgogI2luY2x1ZGUgIlRleHREaXJlY3Rpb24uaCIKICNpbmNsdWRlICJU
eXBlc2V0dGluZ0ZlYXR1cmVzLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTEzNCwx
NyArMTM0LDE3IEBAIHB1YmxpYzoKIAogICAgIGVudW0gQ3VzdG9tRm9udE5vdFJlYWR5QWN0aW9u
IHsgRG9Ob3RQYWludElmRm9udE5vdFJlYWR5LCBVc2VGYWxsYmFja0lmRm9udE5vdFJlYWR5IH07
CiAgICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQgZHJhd1RleHQoR3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0x
LCBDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPSBEb05vdFBhaW50SWZGb250Tm90UmVhZHkpIGNv
bnN0OwotICAgIHZvaWQgZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBTaW1wbGVG
b250RGF0YSosIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNv
bnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKKyAgICB2b2lkIGRyYXdHbHlwaHMoR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgRm9udCosIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCBudW1H
bHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKICAgICB2b2lkIGRyYXdFbXBoYXNpc01h
cmtzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9taWNTdHJpbmcm
IG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0xKSBjb25z
dDsKIAogICAgIERhc2hBcnJheSBkYXNoZXNGb3JJbnRlcnNlY3Rpb25zV2l0aFJlY3QoY29uc3Qg
VGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIGNvbnN0IEZsb2F0UmVjdCYg
bGluZUV4dGVudHMpIGNvbnN0OwogCi0gICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQgd2lkdGgoY29u
c3QgVGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250
cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgZmxv
YXQgd2lkdGgoY29uc3QgVGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0Zv
bnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsKICAgICBmbG9hdCB3aWR0aChjb25z
dCBUZXh0UnVuJiwgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcmIGdseXBoTmFtZSkgY29uc3Q7
CiAKICAgICBQYXNzT3duUHRyPFRleHRMYXlvdXQ+IGNyZWF0ZUxheW91dChSZW5kZXJUZXh0Kiwg
ZmxvYXQgeFBvcywgYm9vbCBjb2xsYXBzZVdoaXRlU3BhY2UpIGNvbnN0OwogICAgIHN0YXRpYyB2
b2lkIGRlbGV0ZUxheW91dChUZXh0TGF5b3V0Kik7Ci0gICAgc3RhdGljIGZsb2F0IHdpZHRoKFRl
eHRMYXlvdXQmLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIEhhc2hTZXQ8Y29uc3QgU2lt
cGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDApOworICAgIHN0YXRpYyBmbG9hdCB3aWR0
aChUZXh0TGF5b3V0JiwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBIYXNoU2V0PGNvbnN0
IEZvbnQqPiogZmFsbGJhY2tGb250cyA9IDApOwogCiAgICAgaW50IG9mZnNldEZvclBvc2l0aW9u
KGNvbnN0IFRleHRSdW4mLCBmbG9hdCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBo
cykgY29uc3Q7CiAgICAgdm9pZCBhZGp1c3RTZWxlY3Rpb25SZWN0Rm9yVGV4dChjb25zdCBUZXh0
UnVuJiwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAt
MSkgY29uc3Q7CkBAIC0xNzIsMTAgKzE3MiwxMCBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzUGxh
dGZvcm1Gb250KCkgY29uc3QgeyByZXR1cm4gbV9nbHlwaHMtPmlzRm9yUGxhdGZvcm1Gb250KCk7
IH0KIAotICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBmb250TWV0cmljcygpIGNvbnN0IHsgcmV0dXJu
IHByaW1hcnlGb250RGF0YSgpLmZvbnRNZXRyaWNzKCk7IH0KLSAgICBmbG9hdCBzcGFjZVdpZHRo
KCkgY29uc3QgeyByZXR1cm4gcHJpbWFyeUZvbnREYXRhKCkuc3BhY2VXaWR0aCgpICsgbV9sZXR0
ZXJTcGFjaW5nOyB9Ci0gICAgZmxvYXQgdGFiV2lkdGgoY29uc3QgU2ltcGxlRm9udERhdGEmLCB1
bnNpZ25lZCB0YWJTaXplLCBmbG9hdCBwb3NpdGlvbikgY29uc3Q7Ci0gICAgZmxvYXQgdGFiV2lk
dGgodW5zaWduZWQgdGFiU2l6ZSwgZmxvYXQgcG9zaXRpb24pIGNvbnN0IHsgcmV0dXJuIHRhYldp
ZHRoKHByaW1hcnlGb250RGF0YSgpLCB0YWJTaXplLCBwb3NpdGlvbik7IH0KKyAgICBjb25zdCBG
b250TWV0cmljcyYgZm9udE1ldHJpY3MoKSBjb25zdCB7IHJldHVybiBwcmltYXJ5Rm9udCgpLmZv
bnRNZXRyaWNzKCk7IH0KKyAgICBmbG9hdCBzcGFjZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gcHJp
bWFyeUZvbnQoKS5zcGFjZVdpZHRoKCkgKyBtX2xldHRlclNwYWNpbmc7IH0KKyAgICBmbG9hdCB0
YWJXaWR0aChjb25zdCBGb250JiwgdW5zaWduZWQgdGFiU2l6ZSwgZmxvYXQgcG9zaXRpb24pIGNv
bnN0OworICAgIGZsb2F0IHRhYldpZHRoKHVuc2lnbmVkIHRhYlNpemUsIGZsb2F0IHBvc2l0aW9u
KSBjb25zdCB7IHJldHVybiB0YWJXaWR0aChwcmltYXJ5Rm9udCgpLCB0YWJTaXplLCBwb3NpdGlv
bik7IH0KICAgICBib29sIGhhc1ZhbGlkQXZlcmFnZUNoYXJXaWR0aCgpIGNvbnN0OwogICAgIGJv
b2wgZmFzdEF2ZXJhZ2VDaGFyV2lkdGhJZkF2YWlsYWJsZShmbG9hdCAmd2lkdGgpIGNvbnN0OyAv
LyByZXR1cm5zIHRydWUgb24gc3VjY2VzcwogCkBAIC0xODMsMTIgKzE4MywxMiBAQCBwdWJsaWM6
CiAgICAgaW50IGVtcGhhc2lzTWFya0Rlc2NlbnQoY29uc3QgQXRvbWljU3RyaW5nJikgY29uc3Q7
CiAgICAgaW50IGVtcGhhc2lzTWFya0hlaWdodChjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdDsK
IAotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhJiBwcmltYXJ5Rm9udERhdGEoKSBjb25zdDsKKyAg
ICBjb25zdCBGb250JiBwcmltYXJ5Rm9udCgpIGNvbnN0OwogICAgIGNvbnN0IEZvbnRSYW5nZXMm
IGZhbGxiYWNrUmFuZ2VzQXQodW5zaWduZWQpIGNvbnN0OwotICAgIEdseXBoRGF0YSBnbHlwaERh
dGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiwgYm9vbCBtaXJyb3IsIEZvbnREYXRhVmFyaWFudCA9IEF1
dG9WYXJpYW50KSBjb25zdDsKKyAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVD
aGFyMzIsIGJvb2wgbWlycm9yLCBGb250VmFyaWFudCA9IEF1dG9WYXJpYW50KSBjb25zdDsKICAg
ICAKICNpZiBQTEFURk9STShDT0NPQSkKLSAgICBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERh
dGFGb3JDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBVQ2hhciosIHNpemVfdCBsZW5n
dGgsIEZvbnREYXRhVmFyaWFudCkgY29uc3Q7CisgICAgY29uc3QgRm9udCogZm9udEZvckNvbWJp
bmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVDaGFyKiwgc2l6ZV90IGxlbmd0aCwgRm9udFZh
cmlhbnQpIGNvbnN0OwogI2VuZGlmCiAKICAgICBzdGF0aWMgYm9vbCBpc0NKS0lkZW9ncmFwaChV
Q2hhcjMyKTsKQEAgLTIwNyw3ICsyMDcsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIENvZGVQYXRo
IGNoYXJhY3RlclJhbmdlQ29kZVBhdGgoY29uc3QgTENoYXIqLCB1bnNpZ25lZCkgeyByZXR1cm4g
U2ltcGxlOyB9CiAgICAgc3RhdGljIENvZGVQYXRoIGNoYXJhY3RlclJhbmdlQ29kZVBhdGgoY29u
c3QgVUNoYXIqLCB1bnNpZ25lZCBsZW4pOwogCi0gICAgYm9vbCBwcmltYXJ5Rm9udERhdGFJc1N5
c3RlbUZvbnQoKSBjb25zdDsKKyAgICBib29sIHByaW1hcnlGb250SXNTeXN0ZW1Gb250KCkgY29u
c3Q7CiAKIHByaXZhdGU6CiAgICAgZW51bSBGb3JUZXh0RW1waGFzaXNPck5vdCB7IE5vdEZvclRl
eHRFbXBoYXNpcywgRm9yVGV4dEVtcGhhc2lzIH07CkBAIC0yMTgsNyArMjE4LDcgQEAgcHJpdmF0
ZToKICAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzRm9yU2ltcGxlVGV4dChHcmFwaGljc0NvbnRl
eHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9h
dFBvaW50JiwgaW50IGZyb20sIGludCB0bykgY29uc3Q7CiAgICAgdm9pZCBkcmF3R2x5cGhCdWZm
ZXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEdseXBoQnVmZmVyJiwg
RmxvYXRQb2ludCYpIGNvbnN0OwogICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3MoR3JhcGhpY3ND
b250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEdseXBoQnVmZmVyJiwgY29uc3QgQXRvbWlj
U3RyaW5nJiwgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OwotICAgIGZsb2F0IGZsb2F0V2lkdGhG
b3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRh
Kj4qIGZhbGxiYWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93KiA9IDApIGNvbnN0OworICAgIGZs
b2F0IGZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mLCBIYXNoU2V0PGNvbnN0
IEZvbnQqPiogZmFsbGJhY2tGb250cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29uc3Q7CiAg
ICAgaW50IG9mZnNldEZvclBvc2l0aW9uRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiwgZmxv
YXQgcG9zaXRpb24sIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0OwogICAgIHZvaWQg
YWRqdXN0U2VsZWN0aW9uUmVjdEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYsIExheW91dFJl
Y3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0OwogCkBAIC0yMzEsNyAr
MjMxLDcgQEAgcHJpdmF0ZToKICAgICBmbG9hdCBnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBs
ZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBpbnQgZnJvbSwgaW50IHRvLCBHbHlwaEJ1ZmZlciYsIEZv
clRleHRFbXBoYXNpc09yTm90ID0gTm90Rm9yVGV4dEVtcGhhc2lzKSBjb25zdDsKICAgICBmbG9h
dCBkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0
IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdDsKICAgICB2b2lkIGRyYXdFbXBo
YXNpc01hcmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYs
IGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tLCBp
bnQgdG8pIGNvbnN0OwotICAgIGZsb2F0IGZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBU
ZXh0UnVuJiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0g
MCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsKKyAgICBmbG9hdCBmbG9hdFdpZHRoRm9yQ29t
cGxleFRleHQoY29uc3QgVGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0Zv
bnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsKICAgICBpbnQgb2Zmc2V0Rm9yUG9z
aXRpb25Gb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwgZmxvYXQgcG9zaXRpb24sIGJvb2wg
aW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0OwogICAgIHZvaWQgYWRqdXN0U2VsZWN0aW9uUmVj
dEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0
LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdDsKIApAQCAtMzUyLDEwICszNTIsMTAgQEAgaW5saW5l
IEZvbnRDYXNjYWRlOjp+Rm9udENhc2NhZGUoKQogewogfQogCi1pbmxpbmUgY29uc3QgU2ltcGxl
Rm9udERhdGEmIEZvbnRDYXNjYWRlOjpwcmltYXJ5Rm9udERhdGEoKSBjb25zdAoraW5saW5lIGNv
bnN0IEZvbnQmIEZvbnRDYXNjYWRlOjpwcmltYXJ5Rm9udCgpIGNvbnN0CiB7CiAgICAgQVNTRVJU
KG1fZ2x5cGhzKTsKLSAgICByZXR1cm4gbV9nbHlwaHMtPnByaW1hcnlTaW1wbGVGb250RGF0YSht
X2ZvbnREZXNjcmlwdGlvbik7CisgICAgcmV0dXJuIG1fZ2x5cGhzLT5wcmltYXJ5Rm9udChtX2Zv
bnREZXNjcmlwdGlvbik7CiB9CiAKIGlubGluZSBjb25zdCBGb250UmFuZ2VzJiBGb250Q2FzY2Fk
ZTo6ZmFsbGJhY2tSYW5nZXNBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QKQEAgLTM3NSwxMyArMzc1
LDEzIEBAIGlubGluZSBGb250U2VsZWN0b3IqIEZvbnRDYXNjYWRlOjpmb250U2UKICAgICByZXR1
cm4gbV9nbHlwaHMgPyBtX2dseXBocy0+Zm9udFNlbGVjdG9yKCkgOiAwOwogfQogCi1pbmxpbmUg
ZmxvYXQgRm9udENhc2NhZGU6OnRhYldpZHRoKGNvbnN0IFNpbXBsZUZvbnREYXRhJiBmb250RGF0
YSwgdW5zaWduZWQgdGFiU2l6ZSwgZmxvYXQgcG9zaXRpb24pIGNvbnN0CitpbmxpbmUgZmxvYXQg
Rm9udENhc2NhZGU6OnRhYldpZHRoKGNvbnN0IEZvbnQmIGZvbnQsIHVuc2lnbmVkIHRhYlNpemUs
IGZsb2F0IHBvc2l0aW9uKSBjb25zdAogewogICAgIGlmICghdGFiU2l6ZSkKICAgICAgICAgcmV0
dXJuIGxldHRlclNwYWNpbmcoKTsKLSAgICBmbG9hdCB0YWJXaWR0aCA9IHRhYlNpemUgKiBmb250
RGF0YS5zcGFjZVdpZHRoKCkgKyBsZXR0ZXJTcGFjaW5nKCk7CisgICAgZmxvYXQgdGFiV2lkdGgg
PSB0YWJTaXplICogZm9udC5zcGFjZVdpZHRoKCkgKyBsZXR0ZXJTcGFjaW5nKCk7CiAgICAgZmxv
YXQgdGFiRGVsdGFXaWR0aCA9IHRhYldpZHRoIC0gZm1vZGYocG9zaXRpb24sIHRhYldpZHRoKTsK
LSAgICByZXR1cm4gKHRhYkRlbHRhV2lkdGggPCBmb250RGF0YS5zcGFjZVdpZHRoKCkgLyAyKSA/
IHRhYldpZHRoIDogdGFiRGVsdGFXaWR0aDsKKyAgICByZXR1cm4gKHRhYkRlbHRhV2lkdGggPCBm
b250LnNwYWNlV2lkdGgoKSAvIDIpID8gdGFiV2lkdGggOiB0YWJEZWx0YVdpZHRoOwogfQogCiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250R2x5cGhzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250R2x5cGhz
LmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udEdseXBocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiAKIEZvbnRHbHlwaHM6OkZvbnRHbHlwaHMoUGFzc1JlZlB0cjxGb250
U2VsZWN0b3I+IGZvbnRTZWxlY3RvcikKLSAgICA6IG1fY2FjaGVkUHJpbWFyeVNpbXBsZUZvbnRE
YXRhKDApCisgICAgOiBtX2NhY2hlZFByaW1hcnlGb250KDApCiAgICAgLCBtX2ZvbnRTZWxlY3Rv
cihmb250U2VsZWN0b3IpCiAgICAgLCBtX2ZvbnRTZWxlY3RvclZlcnNpb24obV9mb250U2VsZWN0
b3IgPyBtX2ZvbnRTZWxlY3Rvci0+dmVyc2lvbigpIDogMCkKICAgICAsIG1fZ2VuZXJhdGlvbihm
b250Q2FjaGUoKS5nZW5lcmF0aW9uKCkpCkBAIC00NSw3ICs0NSw3IEBAIEZvbnRHbHlwaHM6OkZv
bnRHbHlwaHMoUGFzc1JlZlB0cjxGb250U2UKIH0KIAogRm9udEdseXBoczo6Rm9udEdseXBocyhj
b25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEpCi0gICAgOiBtX2NhY2hlZFByaW1h
cnlTaW1wbGVGb250RGF0YSgwKQorICAgIDogbV9jYWNoZWRQcmltYXJ5Rm9udCgwKQogICAgICwg
bV9mb250U2VsZWN0b3IoMCkKICAgICAsIG1fZm9udFNlbGVjdG9yVmVyc2lvbigwKQogICAgICwg
bV9nZW5lcmF0aW9uKGZvbnRDYWNoZSgpLmdlbmVyYXRpb24oKSkKQEAgLTYzLDcgKzYzLDcgQEAg
dm9pZCBGb250R2x5cGhzOjpkZXRlcm1pbmVQaXRjaChjb25zdCBGbwogICAgIGF1dG8mIHByaW1h
cnlSYW5nZXMgPSByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChkZXNjcmlwdGlvbiwgMCk7CiAgICAg
dW5zaWduZWQgbnVtUmFuZ2VzID0gcHJpbWFyeVJhbmdlcy5zaXplKCk7CiAgICAgaWYgKG51bVJh
bmdlcyA9PSAxKQotICAgICAgICBtX3BpdGNoID0gcHJpbWFyeVJhbmdlcy5yYW5nZUF0KDApLmZv
bnREYXRhKCkucGl0Y2goKTsKKyAgICAgICAgbV9waXRjaCA9IHByaW1hcnlSYW5nZXMucmFuZ2VB
dCgwKS5mb250KCkucGl0Y2goKTsKICAgICBlbHNlCiAgICAgICAgIG1fcGl0Y2ggPSBWYXJpYWJs
ZVBpdGNoOwogfQpAQCAtOTYsNyArOTYsNyBAQCBzdGF0aWMgRm9udFJhbmdlcyByZWFsaXplTmV4
dEZhbGxiYWNrKGNvCiAgICAgLy8gV2UgZGlkbid0IGZpbmQgYSBmb250LiBUcnkgdG8gZmluZCBh
IHNpbWlsYXIgZm9udCB1c2luZyBvdXIgb3duIHNwZWNpZmljIGtub3dsZWRnZSBhYm91dCBvdXIg
cGxhdGZvcm0uCiAgICAgLy8gRm9yIGV4YW1wbGUgb24gT1MgWCwgd2Uga25vdyB0byBtYXAgYW55
IGZhbWlsaWVzIGNvbnRhaW5pbmcgdGhlIHdvcmRzIEFyYWJpYywgUGFzaHRvLCBvciBVcmR1IHRv
IHRoZQogICAgIC8vIEdlZXphIFBybyBmb250LgotICAgIHJldHVybiBGb250UmFuZ2VzKGZvbnRD
YWNoZSgpLnNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGRlc2NyaXB0aW9uKSk7CisgICAgcmV0dXJu
IEZvbnRSYW5nZXMoZm9udENhY2hlKCkuc2ltaWxhckZvbnQoZGVzY3JpcHRpb24pKTsKIH0KIAog
Y29uc3QgRm9udFJhbmdlcyYgRm9udEdseXBoczo6cmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoY29u
c3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgdW5zaWduZWQgaW5kZXgpCkBAIC0xMjYs
MTAgKzEyNiwxMCBAQCBjb25zdCBGb250UmFuZ2VzJiBGb250R2x5cGhzOjpyZWFsaXplRmFsCiAg
ICAgICAgIEFTU0VSVChtX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXggPj0gZGVzY3JpcHRpb24u
ZmFtaWx5Q291bnQoKSk7CiAKICAgICAgICAgdW5zaWduZWQgZm9udFNlbGVjdG9yRmFsbGJhY2tJ
bmRleCA9IG1fbGFzdFJlYWxpemVkRmFsbGJhY2tJbmRleCAtIGRlc2NyaXB0aW9uLmZhbWlseUNv
dW50KCk7Ci0gICAgICAgIGlmIChmb250U2VsZWN0b3JGYWxsYmFja0luZGV4ID09IG1fZm9udFNl
bGVjdG9yLT5mYWxsYmFja0ZvbnREYXRhQ291bnQoKSkKKyAgICAgICAgaWYgKGZvbnRTZWxlY3Rv
ckZhbGxiYWNrSW5kZXggPT0gbV9mb250U2VsZWN0b3ItPmZhbGxiYWNrRm9udENvdW50KCkpCiAg
ICAgICAgICAgICByZXR1cm4gZm9udFJhbmdlczsKICAgICAgICAgKyttX2xhc3RSZWFsaXplZEZh
bGxiYWNrSW5kZXg7Ci0gICAgICAgIGZvbnRSYW5nZXMgPSBGb250UmFuZ2VzKG1fZm9udFNlbGVj
dG9yLT5mYWxsYmFja0ZvbnREYXRhQXQoZGVzY3JpcHRpb24sIGZvbnRTZWxlY3RvckZhbGxiYWNr
SW5kZXgpKTsKKyAgICAgICAgZm9udFJhbmdlcyA9IEZvbnRSYW5nZXMobV9mb250U2VsZWN0b3It
PmZhbGxiYWNrRm9udEF0KGRlc2NyaXB0aW9uLCBmb250U2VsZWN0b3JGYWxsYmFja0luZGV4KSk7
CiAgICAgfQogCiAgICAgcmV0dXJuIGZvbnRSYW5nZXM7CkBAIC0yMjEsOCArMjIxLDggQEAgc3Rh
dGljIGJvb2wgc2hvdWxkSWdub3JlUm90YXRpb24oVUNoYXIzMgogI2lmIFBMQVRGT1JNKENPQ09B
KQogc3RhdGljIEdseXBoRGF0YSBnbHlwaERhdGFGb3JDSktDaGFyYWN0ZXJXaXRob3V0U3ludGhl
dGljSXRhbGljKFVDaGFyMzIgY2hhcmFjdGVyLCBHbHlwaERhdGEmIGRhdGEpCiB7Ci0gICAgR2x5
cGhEYXRhIG5vbkl0YWxpY0RhdGEgPSBkYXRhLmZvbnREYXRhLT5ub25TeW50aGV0aWNJdGFsaWNG
b250RGF0YSgpLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyKTsKLSAgICBpZiAobm9u
SXRhbGljRGF0YS5mb250RGF0YSkKKyAgICBHbHlwaERhdGEgbm9uSXRhbGljRGF0YSA9IGRhdGEu
Zm9udC0+bm9uU3ludGhldGljSXRhbGljRm9udCgpLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hh
cmFjdGVyKTsKKyAgICBpZiAobm9uSXRhbGljRGF0YS5mb250KQogICAgICAgICByZXR1cm4gbm9u
SXRhbGljRGF0YTsKICAgICByZXR1cm4gZGF0YTsKIH0KQEAgLTIzMSw3NiArMjMxLDc2IEBAIHN0
YXRpYyBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yQ0pLQ2hhcmFjdGUKIHN0YXRpYyBHbHlwaERhdGEg
Z2x5cGhEYXRhRm9yTm9uQ0pLQ2hhcmFjdGVyV2l0aEdseXBoT3JpZW50YXRpb24oVUNoYXIzMiBj
aGFyYWN0ZXIsIE5vbkNKS0dseXBoT3JpZW50YXRpb24gb3JpZW50YXRpb24sIGNvbnN0IEdseXBo
RGF0YSYgZGF0YSkKIHsKICAgICBpZiAob3JpZW50YXRpb24gPT0gTm9uQ0pLR2x5cGhPcmllbnRh
dGlvblVwcmlnaHQgfHwgc2hvdWxkSWdub3JlUm90YXRpb24oY2hhcmFjdGVyKSkgewotICAgICAg
ICBHbHlwaERhdGEgdXByaWdodERhdGEgPSBkYXRhLmZvbnREYXRhLT51cHJpZ2h0T3JpZW50YXRp
b25Gb250RGF0YSgpLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyKTsKKyAgICAgICAg
R2x5cGhEYXRhIHVwcmlnaHREYXRhID0gZGF0YS5mb250LT51cHJpZ2h0T3JpZW50YXRpb25Gb250
KCktPmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIpOwogICAgICAgICAvLyBJZiB0aGUg
Z2x5cGhzIGFyZSB0aGUgc2FtZSwgdGhlbiB3ZSBrbm93IHdlIGNhbiBqdXN0IHVzZSB0aGUgaG9y
aXpvbnRhbCBnbHlwaCByb3RhdGVkIHZlcnRpY2FsbHkgdG8gYmUgdXByaWdodC4KICAgICAgICAg
aWYgKGRhdGEuZ2x5cGggPT0gdXByaWdodERhdGEuZ2x5cGgpCiAgICAgICAgICAgICByZXR1cm4g
ZGF0YTsKICAgICAgICAgLy8gVGhlIGdseXBocyBhcmUgZGlzdGluY3QsIG1lYW5pbmcgdGhhdCB0
aGUgZm9udCBoYXMgYSB2ZXJ0aWNhbC1yaWdodCBnbHlwaCBiYWtlZCBpbnRvIGl0LiBXZSBjYW4n
dCB1c2UgdGhhdAogICAgICAgICAvLyBnbHlwaCwgc28gd2UgZmFsbCBiYWNrIHRvIHRoZSB1cHJp
Z2h0IGRhdGEgYW5kIHVzZSB0aGUgaG9yaXpvbnRhbCBnbHlwaC4KLSAgICAgICAgaWYgKHVwcmln
aHREYXRhLmZvbnREYXRhKQorICAgICAgICBpZiAodXByaWdodERhdGEuZm9udCkKICAgICAgICAg
ICAgIHJldHVybiB1cHJpZ2h0RGF0YTsKICAgICB9IGVsc2UgaWYgKG9yaWVudGF0aW9uID09IE5v
bkNKS0dseXBoT3JpZW50YXRpb25WZXJ0aWNhbFJpZ2h0KSB7Ci0gICAgICAgIEdseXBoRGF0YSB2
ZXJ0aWNhbFJpZ2h0RGF0YSA9IGRhdGEuZm9udERhdGEtPnZlcnRpY2FsUmlnaHRPcmllbnRhdGlv
bkZvbnREYXRhKCktPmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIpOworICAgICAgICBH
bHlwaERhdGEgdmVydGljYWxSaWdodERhdGEgPSBkYXRhLmZvbnQtPnZlcnRpY2FsUmlnaHRPcmll
bnRhdGlvbkZvbnQoKS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3Rlcik7CiAgICAgICAg
IC8vIElmIHRoZSBnbHlwaHMgYXJlIGRpc3RpbmN0LCB3ZSB3aWxsIG1ha2UgdGhlIGFzc3VtcHRp
b24gdGhhdCB0aGUgZm9udCBoYXMgYSB2ZXJ0aWNhbC1yaWdodCBnbHlwaCBiYWtlZAogICAgICAg
ICAvLyBpbnRvIGl0LgogICAgICAgICBpZiAoZGF0YS5nbHlwaCAhPSB2ZXJ0aWNhbFJpZ2h0RGF0
YS5nbHlwaCkKICAgICAgICAgICAgIHJldHVybiBkYXRhOwogICAgICAgICAvLyBUaGUgZ2x5cGhz
IGFyZSBpZGVudGljYWwsIG1lYW5pbmcgdGhhdCB3ZSBzaG91bGQganVzdCB1c2UgdGhlIGhvcml6
b250YWwgZ2x5cGguCi0gICAgICAgIGlmICh2ZXJ0aWNhbFJpZ2h0RGF0YS5mb250RGF0YSkKKyAg
ICAgICAgaWYgKHZlcnRpY2FsUmlnaHREYXRhLmZvbnQpCiAgICAgICAgICAgICByZXR1cm4gdmVy
dGljYWxSaWdodERhdGE7CiAgICAgfQogICAgIHJldHVybiBkYXRhOwogfQogCi1HbHlwaERhdGEg
Rm9udEdseXBoczo6Z2x5cGhEYXRhRm9yU3lzdGVtRmFsbGJhY2soVUNoYXIzMiBjLCBjb25zdCBG
b250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250RGF0YVZhcmlhbnQgdmFyaWFudCkKK0ds
eXBoRGF0YSBGb250R2x5cGhzOjpnbHlwaERhdGFGb3JTeXN0ZW1GYWxsYmFjayhVQ2hhcjMyIGMs
IGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIEZvbnRWYXJpYW50IHZhcmlhbnQp
CiB7CiAgICAgLy8gU3lzdGVtIGZhbGxiYWNrIGlzIGNoYXJhY3Rlci1kZXBlbmRlbnQuCiAgICAg
YXV0byYgcHJpbWFyeVJhbmdlcyA9IHJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGRlc2NyaXB0aW9u
LCAwKTsKLSAgICBhdXRvKiBvcmlnaW5hbEZvbnREYXRhID0gcHJpbWFyeVJhbmdlcy5mb250RGF0
YUZvckNoYXJhY3RlcihjKTsKLSAgICBpZiAoIW9yaWdpbmFsRm9udERhdGEpCi0gICAgICAgIG9y
aWdpbmFsRm9udERhdGEgPSAmcHJpbWFyeVJhbmdlcy5mb250RGF0YUZvckZpcnN0UmFuZ2UoKTsK
KyAgICBhdXRvKiBvcmlnaW5hbEZvbnQgPSBwcmltYXJ5UmFuZ2VzLmZvbnRGb3JDaGFyYWN0ZXIo
Yyk7CisgICAgaWYgKCFvcmlnaW5hbEZvbnQpCisgICAgICAgIG9yaWdpbmFsRm9udCA9ICZwcmlt
YXJ5UmFuZ2VzLmZvbnRGb3JGaXJzdFJhbmdlKCk7CiAKLSAgICBSZWZQdHI8U2ltcGxlRm9udERh
dGE+IHN5c3RlbUZhbGxiYWNrRm9udERhdGEgPSBvcmlnaW5hbEZvbnREYXRhLT5zeXN0ZW1GYWxs
YmFja0ZvbnREYXRhRm9yQ2hhcmFjdGVyKGMsIGRlc2NyaXB0aW9uLCBtX2lzRm9yUGxhdGZvcm1G
b250KTsKLSAgICBpZiAoIXN5c3RlbUZhbGxiYWNrRm9udERhdGEpCisgICAgUmVmUHRyPEZvbnQ+
IHN5c3RlbUZhbGxiYWNrRm9udCA9IG9yaWdpbmFsRm9udC0+c3lzdGVtRmFsbGJhY2tGb250Rm9y
Q2hhcmFjdGVyKGMsIGRlc2NyaXB0aW9uLCBtX2lzRm9yUGxhdGZvcm1Gb250KTsKKyAgICBpZiAo
IXN5c3RlbUZhbGxiYWNrRm9udCkKICAgICAgICAgcmV0dXJuIEdseXBoRGF0YSgpOwogCi0gICAg
aWYgKHN5c3RlbUZhbGxiYWNrRm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkg
PT0gVmVydGljYWwgJiYgIXN5c3RlbUZhbGxiYWNrRm9udERhdGEtPmhhc1ZlcnRpY2FsR2x5cGhz
KCkgJiYgRm9udENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woYykpCisgICAgaWYgKHN5
c3RlbUZhbGxiYWNrRm9udC0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNh
bCAmJiAhc3lzdGVtRmFsbGJhY2tGb250LT5oYXNWZXJ0aWNhbEdseXBocygpICYmIEZvbnRDYXNj
YWRlOjppc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGMpKQogICAgICAgICB2YXJpYW50ID0gQnJva2Vu
SWRlb2dyYXBoVmFyaWFudDsKIAogICAgIEdseXBoRGF0YSBmYWxsYmFja0dseXBoRGF0YTsKICAg
ICBpZiAodmFyaWFudCA9PSBOb3JtYWxWYXJpYW50KQotICAgICAgICBmYWxsYmFja0dseXBoRGF0
YSA9IHN5c3RlbUZhbGxiYWNrRm9udERhdGEtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjKTsKKyAg
ICAgICAgZmFsbGJhY2tHbHlwaERhdGEgPSBzeXN0ZW1GYWxsYmFja0ZvbnQtPmdseXBoRGF0YUZv
ckNoYXJhY3RlcihjKTsKICAgICBlbHNlCi0gICAgICAgIGZhbGxiYWNrR2x5cGhEYXRhID0gc3lz
dGVtRmFsbGJhY2tGb250RGF0YS0+dmFyaWFudEZvbnREYXRhKGRlc2NyaXB0aW9uLCB2YXJpYW50
KS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMpOworICAgICAgICBmYWxsYmFja0dseXBoRGF0YSA9
IHN5c3RlbUZhbGxiYWNrRm9udC0+dmFyaWFudEZvbnQoZGVzY3JpcHRpb24sIHZhcmlhbnQpLT5n
bHlwaERhdGFGb3JDaGFyYWN0ZXIoYyk7CiAKLSAgICBpZiAodmFyaWFudCA9PSBOb3JtYWxWYXJp
YW50ICYmIGZhbGxiYWNrR2x5cGhEYXRhLmZvbnREYXRhKSB7Ci0gICAgICAgIGlmICghRm9udENh
c2NhZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woYykgJiYgZmFsbGJhY2tHbHlwaERhdGEuZm9u
dERhdGEtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwgJiYgIWZhbGxi
YWNrR2x5cGhEYXRhLmZvbnREYXRhLT5pc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKCkpCisgICAg
aWYgKHZhcmlhbnQgPT0gTm9ybWFsVmFyaWFudCAmJiBmYWxsYmFja0dseXBoRGF0YS5mb250KSB7
CisgICAgICAgIGlmICghRm9udENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woYykgJiYg
ZmFsbGJhY2tHbHlwaERhdGEuZm9udC0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBW
ZXJ0aWNhbCAmJiAhZmFsbGJhY2tHbHlwaERhdGEuZm9udC0+aXNUZXh0T3JpZW50YXRpb25GYWxs
YmFjaygpKQogICAgICAgICAgICAgZmFsbGJhY2tHbHlwaERhdGEgPSBnbHlwaERhdGFGb3JOb25D
SktDaGFyYWN0ZXJXaXRoR2x5cGhPcmllbnRhdGlvbihjLCBkZXNjcmlwdGlvbi5ub25DSktHbHlw
aE9yaWVudGF0aW9uKCksIGZhbGxiYWNrR2x5cGhEYXRhKTsKICAgICB9CiAKICAgICAvLyBLZWVw
IHRoZSBzeXN0ZW0gZmFsbGJhY2sgZm9udHMgd2UgdXNlIGFsaXZlLgogICAgIGlmIChmYWxsYmFj
a0dseXBoRGF0YS5nbHlwaCkKLSAgICAgICAgbV9zeXN0ZW1GYWxsYmFja0ZvbnREYXRhU2V0LmFk
ZChzeXN0ZW1GYWxsYmFja0ZvbnREYXRhLnJlbGVhc2UoKSk7CisgICAgICAgIG1fc3lzdGVtRmFs
bGJhY2tGb250U2V0LmFkZChzeXN0ZW1GYWxsYmFja0ZvbnQucmVsZWFzZSgpKTsKIAogICAgIHJl
dHVybiBmYWxsYmFja0dseXBoRGF0YTsKIH0KIAotR2x5cGhEYXRhIEZvbnRHbHlwaHM6OmdseXBo
RGF0YUZvclZhcmlhbnQoVUNoYXIzMiBjLCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0
aW9uLCBGb250RGF0YVZhcmlhbnQgdmFyaWFudCwgdW5zaWduZWQgZmFsbGJhY2tJbmRleCkKK0ds
eXBoRGF0YSBGb250R2x5cGhzOjpnbHlwaERhdGFGb3JWYXJpYW50KFVDaGFyMzIgYywgY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udFZhcmlhbnQgdmFyaWFudCwgdW5zaWdu
ZWQgZmFsbGJhY2tJbmRleCkKIHsKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICBhdXRvJiBm
b250UmFuZ2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIGZhbGxiYWNr
SW5kZXgrKyk7CiAgICAgICAgIGlmIChmb250UmFuZ2VzLmlzTnVsbCgpKQogICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGF1dG8qIGZvbnREYXRhID0gZm9udFJhbmdlcy5mb250RGF0YUZvckNo
YXJhY3RlcihjKTsKLSAgICAgICAgR2x5cGhEYXRhIGRhdGEgPSBmb250RGF0YSA/IGZvbnREYXRh
LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYykgOiBHbHlwaERhdGEoKTsKLSAgICAgICAgaWYgKGRh
dGEuZm9udERhdGEpIHsKLSAgICAgICAgICAgIC8vIFRoZSB2YXJpYW50Rm9udERhdGEgZnVuY3Rp
b24gc2hvdWxkIG5vdCBub3JtYWxseSByZXR1cm4gMC4KKyAgICAgICAgYXV0byogZm9udCA9IGZv
bnRSYW5nZXMuZm9udEZvckNoYXJhY3RlcihjKTsKKyAgICAgICAgR2x5cGhEYXRhIGRhdGEgPSBm
b250ID8gZm9udC0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMpIDogR2x5cGhEYXRhKCk7CisgICAg
ICAgIGlmIChkYXRhLmZvbnQpIHsKKyAgICAgICAgICAgIC8vIFRoZSB2YXJpYW50Rm9udCBmdW5j
dGlvbiBzaG91bGQgbm90IG5vcm1hbGx5IHJldHVybiAwLgogICAgICAgICAgICAgLy8gQnV0IGlm
IGl0IGRvZXMsIHdlIHdpbGwganVzdCByZW5kZXIgdGhlIGNhcGl0YWwgbGV0dGVyIGJpZy4KLSAg
ICAgICAgICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gdmFyaWFudEZvbnREYXRhID0gZGF0YS5m
b250RGF0YS0+dmFyaWFudEZvbnREYXRhKGRlc2NyaXB0aW9uLCB2YXJpYW50KTsKLSAgICAgICAg
ICAgIGlmICghdmFyaWFudEZvbnREYXRhKQorICAgICAgICAgICAgUmVmUHRyPEZvbnQ+IHZhcmlh
bnRGb250ID0gZGF0YS5mb250LT52YXJpYW50Rm9udChkZXNjcmlwdGlvbiwgdmFyaWFudCk7Cisg
ICAgICAgICAgICBpZiAoIXZhcmlhbnRGb250KQogICAgICAgICAgICAgICAgIHJldHVybiBkYXRh
OwogCi0gICAgICAgICAgICByZXR1cm4gdmFyaWFudEZvbnREYXRhLT5nbHlwaERhdGFGb3JDaGFy
YWN0ZXIoYyk7CisgICAgICAgICAgICByZXR1cm4gdmFyaWFudEZvbnQtPmdseXBoRGF0YUZvckNo
YXJhY3RlcihjKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzE1LDIzICszMTUsMjMgQEAgR2x5
cGhEYXRhIEZvbnRHbHlwaHM6OmdseXBoRGF0YUZvck5vcm1hbAogICAgICAgICBhdXRvJiBmb250
UmFuZ2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIGZhbGxiYWNrSW5k
ZXgpOwogICAgICAgICBpZiAoZm9udFJhbmdlcy5pc051bGwoKSkKICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBhdXRvKiBzaW1wbGVGb250RGF0YSA9IGZvbnRSYW5nZXMuZm9udERhdGFGb3JD
aGFyYWN0ZXIoYyk7Ci0gICAgICAgIGF1dG8qIHBhZ2UgPSBzaW1wbGVGb250RGF0YSA/IHNpbXBs
ZUZvbnREYXRhLT5nbHlwaFBhZ2UocGFnZU51bWJlcikgOiBudWxscHRyOworICAgICAgICBhdXRv
KiBmb250ID0gZm9udFJhbmdlcy5mb250Rm9yQ2hhcmFjdGVyKGMpOworICAgICAgICBhdXRvKiBw
YWdlID0gZm9udCA/IGZvbnQtPmdseXBoUGFnZShwYWdlTnVtYmVyKSA6IG51bGxwdHI7CiAgICAg
ICAgIGlmICghcGFnZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBHbHlwaERhdGEg
ZGF0YSA9IHBhZ2UtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjKTsKLSAgICAgICAgaWYgKGRhdGEu
Zm9udERhdGEpIHsKLSAgICAgICAgICAgIGlmIChkYXRhLmZvbnREYXRhLT5wbGF0Zm9ybURhdGEo
KS5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsICYmICFkYXRhLmZvbnREYXRhLT5pc1RleHRPcmll
bnRhdGlvbkZhbGxiYWNrKCkpIHsKKyAgICAgICAgaWYgKGRhdGEuZm9udCkgeworICAgICAgICAg
ICAgaWYgKGRhdGEuZm9udC0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNh
bCAmJiAhZGF0YS5mb250LT5pc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKCkpIHsKICAgICAgICAg
ICAgICAgICBpZiAoIUZvbnRDYXNjYWRlOjppc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGMpKQogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2x5cGhEYXRhRm9yTm9uQ0pLQ2hhcmFjdGVyV2l0aEds
eXBoT3JpZW50YXRpb24oYywgZGVzY3JpcHRpb24ubm9uQ0pLR2x5cGhPcmllbnRhdGlvbigpLCBk
YXRhKTsKIAotICAgICAgICAgICAgICAgIGlmICghZGF0YS5mb250RGF0YS0+aGFzVmVydGljYWxH
bHlwaHMoKSkgeworICAgICAgICAgICAgICAgIGlmICghZGF0YS5mb250LT5oYXNWZXJ0aWNhbEds
eXBocygpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFVzZSB0aGUgYnJva2VuIGlkZW9ncmFw
aCBmb250IGRhdGEuIFRoZSBicm9rZW4gaWRlb2dyYXBoIGZvbnQgd2lsbCB1c2UgdGhlIGhvcml6
b250YWwgd2lkdGggb2YgZ2x5cGhzCiAgICAgICAgICAgICAgICAgICAgIC8vIHRvIG1ha2Ugc3Vy
ZSB5b3UgZ2V0IGEgc3F1YXJlIChldmVuIGZvciBicm9rZW4gZ2x5cGhzIGxpa2Ugc3ltYm9scyB1
c2VkIGZvciBwdW5jdHVhdGlvbikuCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbHlwaERh
dGFGb3JWYXJpYW50KGMsIGRlc2NyaXB0aW9uLCBCcm9rZW5JZGVvZ3JhcGhWYXJpYW50LCBmYWxs
YmFja0luZGV4KTsKICAgICAgICAgICAgICAgICB9CiAjaWYgUExBVEZPUk0oQ09DT0EpCi0gICAg
ICAgICAgICAgICAgaWYgKGRhdGEuZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLnN5bnRoZXRpY09i
bGlxdWUoKSkKKyAgICAgICAgICAgICAgICBpZiAoZGF0YS5mb250LT5wbGF0Zm9ybURhdGEoKS5z
eW50aGV0aWNPYmxpcXVlKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbHlwaERhdGFG
b3JDSktDaGFyYWN0ZXJXaXRob3V0U3ludGhldGljSXRhbGljKGMsIGRhdGEpOwogI2VuZGlmCiAg
ICAgICAgICAgICB9CkBAIC0zNDUsMjcgKzM0NSwyNyBAQCBHbHlwaERhdGEgRm9udEdseXBoczo6
Z2x5cGhEYXRhRm9yTm9ybWFsCiAKIHN0YXRpYyBSZWZQdHI8R2x5cGhQYWdlPiBnbHlwaFBhZ2VG
cm9tRm9udFJhbmdlcyh1bnNpZ25lZCBwYWdlTnVtYmVyLCBjb25zdCBGb250UmFuZ2VzJiBmb250
UmFuZ2VzKQogewotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBzaW1wbGVGb250RGF0YSA9IG51
bGxwdHI7CisgICAgY29uc3QgRm9udCogZm9udCA9IG51bGxwdHI7CiAgICAgVUNoYXIzMiBwYWdl
UmFuZ2VGcm9tID0gcGFnZU51bWJlciAqIEdseXBoUGFnZTo6c2l6ZTsKICAgICBVQ2hhcjMyIHBh
Z2VSYW5nZVRvID0gcGFnZVJhbmdlRnJvbSArIEdseXBoUGFnZTo6c2l6ZSAtIDE7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGZvbnRSYW5nZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAg
YXV0byYgcmFuZ2UgPSBmb250UmFuZ2VzLnJhbmdlQXQoaSk7CiAgICAgICAgIGlmIChyYW5nZS50
bygpKSB7CiAgICAgICAgICAgICBpZiAocmFuZ2UuZnJvbSgpIDw9IHBhZ2VSYW5nZUZyb20gJiYg
cGFnZVJhbmdlVG8gPD0gcmFuZ2UudG8oKSkKLSAgICAgICAgICAgICAgICBzaW1wbGVGb250RGF0
YSA9ICZyYW5nZS5mb250RGF0YSgpOworICAgICAgICAgICAgICAgIGZvbnQgPSAmcmFuZ2UuZm9u
dCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKCFzaW1w
bGVGb250RGF0YSkKKyAgICBpZiAoIWZvbnQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0g
ICAgaWYgKHNpbXBsZUZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IFZl
cnRpY2FsKQorICAgIGlmIChmb250LT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IFZl
cnRpY2FsKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBjb25zdF9jYXN0
PEdseXBoUGFnZSo+KHNpbXBsZUZvbnREYXRhLT5nbHlwaFBhZ2UocGFnZU51bWJlcikpOworICAg
IHJldHVybiBjb25zdF9jYXN0PEdseXBoUGFnZSo+KGZvbnQtPmdseXBoUGFnZShwYWdlTnVtYmVy
KSk7CiB9CiAKLUdseXBoRGF0YSBGb250R2x5cGhzOjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNo
YXIzMiBjLCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250RGF0YVZhcmlh
bnQgdmFyaWFudCkKK0dseXBoRGF0YSBGb250R2x5cGhzOjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIo
VUNoYXIzMiBjLCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250VmFyaWFu
dCB2YXJpYW50KQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgQVNTRVJUKHZh
cmlhbnQgIT0gQXV0b1ZhcmlhbnQpOwpAQCAtMzgyLDE5ICszODIsMTkgQEAgR2x5cGhEYXRhIEZv
bnRHbHlwaHM6OmdseXBoRGF0YUZvckNoYXJhYwogICAgIEdseXBoRGF0YSBnbHlwaERhdGEgPSBj
YWNoZWRQYWdlID8gY2FjaGVkUGFnZS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMpIDogR2x5cGhE
YXRhKCk7CiAgICAgaWYgKCFnbHlwaERhdGEuZ2x5cGgpIHsKICAgICAgICAgaWYgKCFjYWNoZWRQ
YWdlKQotICAgICAgICAgICAgY2FjaGVkUGFnZSA9IEdseXBoUGFnZTo6Y3JlYXRlRm9yTWl4ZWRG
b250RGF0YSgpOworICAgICAgICAgICAgY2FjaGVkUGFnZSA9IEdseXBoUGFnZTo6Y3JlYXRlRm9y
TWl4ZWRGb250cygpOwogICAgICAgICBlbHNlIGlmIChjYWNoZWRQYWdlLT5pc0ltbXV0YWJsZSgp
KQotICAgICAgICAgICAgY2FjaGVkUGFnZSA9IEdseXBoUGFnZTo6Y3JlYXRlQ29weUZvck1peGVk
Rm9udERhdGEoKmNhY2hlZFBhZ2UpOworICAgICAgICAgICAgY2FjaGVkUGFnZSA9IEdseXBoUGFn
ZTo6Y3JlYXRlQ29weUZvck1peGVkRm9udHMoKmNhY2hlZFBhZ2UpOwogCiAgICAgICAgIGdseXBo
RGF0YSA9IGdseXBoRGF0YUZvck5vcm1hbFZhcmlhbnQoYywgZGVzY3JpcHRpb24pOwotICAgICAg
ICBjYWNoZWRQYWdlLT5zZXRHbHlwaERhdGFGb3JDaGFyYWN0ZXIoYywgZ2x5cGhEYXRhLmdseXBo
LCBnbHlwaERhdGEuZm9udERhdGEpOworICAgICAgICBjYWNoZWRQYWdlLT5zZXRHbHlwaERhdGFG
b3JDaGFyYWN0ZXIoYywgZ2x5cGhEYXRhLmdseXBoLCBnbHlwaERhdGEuZm9udCk7CiAgICAgfQog
ICAgIHJldHVybiBnbHlwaERhdGE7CiB9CiAKIHZvaWQgRm9udEdseXBoczo6cHJ1bmVTeXN0ZW1G
YWxsYmFja3MoKQogewotICAgIGlmIChtX3N5c3RlbUZhbGxiYWNrRm9udERhdGFTZXQuaXNFbXB0
eSgpKQorICAgIGlmIChtX3N5c3RlbUZhbGxiYWNrRm9udFNldC5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybjsKICAgICAvLyBNdXRhYmxlIGdseXBoIHBhZ2VzIG1heSByZWZlcmVuY2UgZmFsbGJh
Y2sgZm9udHMuCiAgICAgaWYgKG1fY2FjaGVkUGFnZVplcm8gJiYgIW1fY2FjaGVkUGFnZVplcm8t
PmlzSW1tdXRhYmxlKCkpCkBAIC00MDIsNyArNDAyLDcgQEAgdm9pZCBGb250R2x5cGhzOjpwcnVu
ZVN5c3RlbUZhbGxiYWNrcygpCiAgICAgbV9jYWNoZWRQYWdlcy5yZW1vdmVJZihbXShkZWNsdHlw
ZShtX2NhY2hlZFBhZ2VzKTo6S2V5VmFsdWVQYWlyVHlwZSYga2V5QW5kVmFsdWUpIHsKICAgICAg
ICAgcmV0dXJuICFrZXlBbmRWYWx1ZS52YWx1ZS0+aXNJbW11dGFibGUoKTsKICAgICB9KTsKLSAg
ICBtX3N5c3RlbUZhbGxiYWNrRm9udERhdGFTZXQuY2xlYXIoKTsKKyAgICBtX3N5c3RlbUZhbGxi
YWNrRm9udFNldC5jbGVhcigpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250R2x5cGhzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udEdseXBocy5oCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250R2x5cGhzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTIxLDEwICsyMSwxMCBAQAogI2lmbmRlZiBGb250R2x5cGhzX2gKICNkZWZpbmUgRm9udEdseXBo
c19oCiAKKyNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9udFJhbmdlcy5oIgogI2luY2x1
ZGUgIkZvbnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkdseXBoUGFnZS5oIgotI2luY2x1ZGUgIlNp
bXBsZUZvbnREYXRhLmgiCiAjaW5jbHVkZSAiV2lkdGhDYWNoZS5oIgogI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KQEAgLTUxLDcgKzUxLDcgQEAg
cHVibGljOgogCiAgICAgYm9vbCBpc0ZvclBsYXRmb3JtRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1f
aXNGb3JQbGF0Zm9ybUZvbnQ7IH0KIAotICAgIEdseXBoRGF0YSBnbHlwaERhdGFGb3JDaGFyYWN0
ZXIoVUNoYXIzMiwgY29uc3QgRm9udERlc2NyaXB0aW9uJiwgRm9udERhdGFWYXJpYW50KTsKKyAg
ICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIsIGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYsIEZvbnRWYXJpYW50KTsKIAogICAgIGJvb2wgaXNGaXhlZFBpdGNoKGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYpOwogICAgIHZvaWQgZGV0ZXJtaW5lUGl0Y2goY29uc3QgRm9udERlc2Ny
aXB0aW9uJik7CkBAIC02Niw3ICs2Niw3IEBAIHB1YmxpYzoKICAgICBXaWR0aENhY2hlJiB3aWR0
aENhY2hlKCkgeyByZXR1cm4gbV93aWR0aENhY2hlOyB9CiAgICAgY29uc3QgV2lkdGhDYWNoZSYg
d2lkdGhDYWNoZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGhDYWNoZTsgfQogCi0gICAgY29uc3Qg
U2ltcGxlRm9udERhdGEmIHByaW1hcnlTaW1wbGVGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRp
b24mKTsKKyAgICBjb25zdCBGb250JiBwcmltYXJ5Rm9udChjb25zdCBGb250RGVzY3JpcHRpb24m
KTsKICAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBGb250UmFuZ2VzJiByZWFsaXplRmFsbGJhY2tS
YW5nZXNBdChjb25zdCBGb250RGVzY3JpcHRpb24mLCB1bnNpZ25lZCBmYWxsYmFja0luZGV4KTsK
IAogICAgIHZvaWQgcHJ1bmVTeXN0ZW1GYWxsYmFja3MoKTsKQEAgLTc1LDkgKzc1LDkgQEAgcHJp
dmF0ZToKICAgICBGb250R2x5cGhzKFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPik7CiAgICAgRm9u
dEdseXBocyhjb25zdCBGb250UGxhdGZvcm1EYXRhJik7CiAKLSAgICBHbHlwaERhdGEgZ2x5cGhE
YXRhRm9yU3lzdGVtRmFsbGJhY2soVUNoYXIzMiwgY29uc3QgRm9udERlc2NyaXB0aW9uJiwgRm9u
dERhdGFWYXJpYW50KTsKKyAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yU3lzdGVtRmFsbGJhY2so
VUNoYXIzMiwgY29uc3QgRm9udERlc2NyaXB0aW9uJiwgRm9udFZhcmlhbnQpOwogICAgIEdseXBo
RGF0YSBnbHlwaERhdGFGb3JOb3JtYWxWYXJpYW50KFVDaGFyMzIsIGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYpOwotICAgIEdseXBoRGF0YSBnbHlwaERhdGFGb3JWYXJpYW50KFVDaGFyMzIsIGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYsIEZvbnREYXRhVmFyaWFudCwgdW5zaWduZWQgZmFsbGJhY2tJbmRl
eCk7CisgICAgR2x5cGhEYXRhIGdseXBoRGF0YUZvclZhcmlhbnQoVUNoYXIzMiwgY29uc3QgRm9u
dERlc2NyaXB0aW9uJiwgRm9udFZhcmlhbnQsIHVuc2lnbmVkIGZhbGxiYWNrSW5kZXgpOwogCiAg
ICAgVmVjdG9yPEZvbnRSYW5nZXMsIDE+IG1fcmVhbGl6ZWRGYWxsYmFja1JhbmdlczsKICAgICB1
bnNpZ25lZCBtX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXggeyAwIH07CkBAIC04NSw5ICs4NSw5
IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPEdseXBoUGFnZT4gbV9jYWNoZWRQYWdlWmVybzsKICAg
ICBIYXNoTWFwPGludCwgUmVmUHRyPEdseXBoUGFnZT4+IG1fY2FjaGVkUGFnZXM7CiAKLSAgICBI
YXNoU2V0PFJlZlB0cjxTaW1wbGVGb250RGF0YT4+IG1fc3lzdGVtRmFsbGJhY2tGb250RGF0YVNl
dDsKKyAgICBIYXNoU2V0PFJlZlB0cjxGb250Pj4gbV9zeXN0ZW1GYWxsYmFja0ZvbnRTZXQ7CiAK
LSAgICBjb25zdCBTaW1wbGVGb250RGF0YSogbV9jYWNoZWRQcmltYXJ5U2ltcGxlRm9udERhdGE7
CisgICAgY29uc3QgRm9udCogbV9jYWNoZWRQcmltYXJ5Rm9udDsKICAgICBSZWZQdHI8Rm9udFNl
bGVjdG9yPiBtX2ZvbnRTZWxlY3RvcjsKIAogICAgIFdpZHRoQ2FjaGUgbV93aWR0aENhY2hlOwpA
QCAtMTA1LDE2ICsxMDUsMTYgQEAgaW5saW5lIGJvb2wgRm9udEdseXBoczo6aXNGaXhlZFBpdGNo
KGNvbgogICAgIHJldHVybiBtX3BpdGNoID09IEZpeGVkUGl0Y2g7CiB9OwogCi1pbmxpbmUgY29u
c3QgU2ltcGxlRm9udERhdGEmIEZvbnRHbHlwaHM6OnByaW1hcnlTaW1wbGVGb250RGF0YShjb25z
dCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQoraW5saW5lIGNvbnN0IEZvbnQmIEZvbnRH
bHlwaHM6OnByaW1hcnlGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCiB7
CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBpZiAoIW1fY2FjaGVkUHJpbWFyeVNp
bXBsZUZvbnREYXRhKSB7CisgICAgaWYgKCFtX2NhY2hlZFByaW1hcnlGb250KSB7CiAgICAgICAg
IGF1dG8mIHByaW1hcnlSYW5nZXMgPSByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChkZXNjcmlwdGlv
biwgMCk7Ci0gICAgICAgIG1fY2FjaGVkUHJpbWFyeVNpbXBsZUZvbnREYXRhID0gcHJpbWFyeVJh
bmdlcy5mb250RGF0YUZvckNoYXJhY3RlcignICcpOwotICAgICAgICBpZiAoIW1fY2FjaGVkUHJp
bWFyeVNpbXBsZUZvbnREYXRhKQotICAgICAgICAgICAgbV9jYWNoZWRQcmltYXJ5U2ltcGxlRm9u
dERhdGEgPSAmcHJpbWFyeVJhbmdlcy5mb250RGF0YUZvckZpcnN0UmFuZ2UoKTsKKyAgICAgICAg
bV9jYWNoZWRQcmltYXJ5Rm9udCA9IHByaW1hcnlSYW5nZXMuZm9udEZvckNoYXJhY3RlcignICcp
OworICAgICAgICBpZiAoIW1fY2FjaGVkUHJpbWFyeUZvbnQpCisgICAgICAgICAgICBtX2NhY2hl
ZFByaW1hcnlGb250ID0gJnByaW1hcnlSYW5nZXMuZm9udEZvckZpcnN0UmFuZ2UoKTsKICAgICB9
Ci0gICAgcmV0dXJuICptX2NhY2hlZFByaW1hcnlTaW1wbGVGb250RGF0YTsKKyAgICByZXR1cm4g
Km1fY2FjaGVkUHJpbWFyeUZvbnQ7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRNZXRyaWNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udE1ldHJpY3MuaAkocmV2aXNpb24gMTc4ODU3KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udE1ldHJpY3MuaAkod29ya2luZyBjb3B5
KQpAQCAtMTMzLDcgKzEzMyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEhhc1plcm9XaWR0aChi
b29sIGhhc1plcm9XaWR0aCkgeyBtX2hhc1plcm9XaWR0aCA9IGhhc1plcm9XaWR0aDsgfQogCiBw
cml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBTaW1wbGVGb250RGF0YTsKKyAgICBmcmllbmQgY2xh
c3MgRm9udDsKIAogICAgIHZvaWQgcmVzZXQoKQogICAgIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRSYW5nZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRSYW5nZXMuY3BwCShyZXZpc2lvbiAxNzg4NTcp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UmFuZ2VzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIkZvbnRSYW5nZXMuaCIKIAotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisjaW5jbHVk
ZSAiRm9udC5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKQEAgLTM2LDM0ICszNiwzNCBAQCBGb250UmFuZ2VzOjpGb250UmFu
Z2VzKCkKIHsKIH0KIAotRm9udFJhbmdlczo6Rm9udFJhbmdlcyhSZWZQdHI8U2ltcGxlRm9udERh
dGE+JiYgZm9udERhdGEpCitGb250UmFuZ2VzOjpGb250UmFuZ2VzKFJlZlB0cjxGb250PiYmIGZv
bnQpCiB7Ci0gICAgaWYgKGZvbnREYXRhKQotICAgICAgICBtX3Jhbmdlcy5hcHBlbmQoUmFuZ2Ug
eyAwLCAweDdGRkZGRkZGLCBmb250RGF0YS5yZWxlYXNlTm9uTnVsbCgpIH0pOworICAgIGlmIChm
b250KQorICAgICAgICBtX3Jhbmdlcy5hcHBlbmQoUmFuZ2UgeyAwLCAweDdGRkZGRkZGLCBmb250
LnJlbGVhc2VOb25OdWxsKCkgfSk7CiB9CiAKIEZvbnRSYW5nZXM6On5Gb250UmFuZ2VzKCkKIHsK
IH0KIAotY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRSYW5nZXM6OmZvbnREYXRhRm9yQ2hhcmFj
dGVyKFVDaGFyMzIgYykgY29uc3QKK2NvbnN0IEZvbnQqIEZvbnRSYW5nZXM6OmZvbnRGb3JDaGFy
YWN0ZXIoVUNoYXIzMiBjKSBjb25zdAogewogICAgIGZvciAoYXV0byYgcmFuZ2UgOiBtX3Jhbmdl
cykgewogICAgICAgICBpZiAocmFuZ2UuZnJvbSgpIDw9IGMgJiYgYyA8PSByYW5nZS50bygpKQot
ICAgICAgICAgICAgcmV0dXJuICZyYW5nZS5mb250RGF0YSgpOworICAgICAgICAgICAgcmV0dXJu
ICZyYW5nZS5mb250KCk7CiAgICAgfQogICAgIHJldHVybiBudWxscHRyOwogfQogCi1jb25zdCBT
aW1wbGVGb250RGF0YSYgRm9udFJhbmdlczo6Zm9udERhdGFGb3JGaXJzdFJhbmdlKCkgY29uc3QK
K2NvbnN0IEZvbnQmIEZvbnRSYW5nZXM6OmZvbnRGb3JGaXJzdFJhbmdlKCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gbV9yYW5nZXNbMF0uZm9udERhdGEoKTsKKyAgICByZXR1cm4gbV9yYW5nZXNbMF0u
Zm9udCgpOwogfQogCiBib29sIEZvbnRSYW5nZXM6OmlzTG9hZGluZygpIGNvbnN0CiB7CiAgICAg
Zm9yIChhdXRvJiByYW5nZSA6IG1fcmFuZ2VzKSB7Ci0gICAgICAgIGlmIChyYW5nZS5mb250RGF0
YSgpLmlzTG9hZGluZygpKQorICAgICAgICBpZiAocmFuZ2UuZm9udCgpLmlzTG9hZGluZygpKQog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRSYW5nZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UmFuZ2VzLmgJKHJldmlz
aW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRSYW5n
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBGb250UmFuZ2Vz
X2gKICNkZWZpbmUgRm9udFJhbmdlc19oCiAKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgor
I2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CiAjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgogCkBAIC0zNSwyNSArMzUsMjUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
Y2xhc3MgRm9udFJhbmdlcyB7CiBwdWJsaWM6CiAgICAgc3RydWN0IFJhbmdlIHsKLSAgICAgICAg
UmFuZ2UoVUNoYXIzMiBmcm9tLCBVQ2hhcjMyIHRvLCBSZWY8U2ltcGxlRm9udERhdGE+JiYgZm9u
dERhdGEpCisgICAgICAgIFJhbmdlKFVDaGFyMzIgZnJvbSwgVUNoYXIzMiB0bywgUmVmPEZvbnQ+
JiYgZm9udCkKICAgICAgICAgICAgIDogbV9mcm9tKGZyb20pCiAgICAgICAgICAgICAsIG1fdG8o
dG8pCi0gICAgICAgICAgICAsIG1fZm9udERhdGEoV1RGOjptb3ZlKGZvbnREYXRhKSkKKyAgICAg
ICAgICAgICwgbV9mb250KFdURjo6bW92ZShmb250KSkKICAgICAgICAgewogICAgICAgICB9CiAK
ICAgICAgICAgVUNoYXIzMiBmcm9tKCkgY29uc3QgeyByZXR1cm4gbV9mcm9tOyB9CiAgICAgICAg
IFVDaGFyMzIgdG8oKSBjb25zdCB7IHJldHVybiBtX3RvOyB9Ci0gICAgICAgIGNvbnN0IFNpbXBs
ZUZvbnREYXRhJiBmb250RGF0YSgpIGNvbnN0IHsgcmV0dXJuICptX2ZvbnREYXRhOyB9CisgICAg
ICAgIGNvbnN0IEZvbnQmIGZvbnQoKSBjb25zdCB7IHJldHVybiAqbV9mb250OyB9CiAKICAgICBw
cml2YXRlOgogICAgICAgICBVQ2hhcjMyIG1fZnJvbTsKICAgICAgICAgVUNoYXIzMiBtX3RvOwot
ICAgICAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IG1fZm9udERhdGE7CisgICAgICAgIFJlZlB0
cjxGb250PiBtX2ZvbnQ7CiAgICAgfTsKIAogICAgIEZvbnRSYW5nZXMoKTsKLSAgICBleHBsaWNp
dCBGb250UmFuZ2VzKFJlZlB0cjxTaW1wbGVGb250RGF0YT4mJik7CisgICAgZXhwbGljaXQgRm9u
dFJhbmdlcyhSZWZQdHI8Rm9udD4mJik7CiAgICAgfkZvbnRSYW5nZXMoKTsKIAogICAgIGJvb2wg
aXNOdWxsKCkgY29uc3QgeyByZXR1cm4gbV9yYW5nZXMuaXNFbXB0eSgpOyB9CkBAIC02Miw4ICs2
Miw4IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9yYW5n
ZXMuc2l6ZSgpOyB9CiAgICAgY29uc3QgUmFuZ2UmIHJhbmdlQXQodW5zaWduZWQgaSkgY29uc3Qg
eyByZXR1cm4gbV9yYW5nZXNbaV07IH0KIAotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250
RGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyKSBjb25zdDsKLSAgICBjb25zdCBTaW1wbGVGb250RGF0
YSYgZm9udERhdGFGb3JGaXJzdFJhbmdlKCkgY29uc3Q7CisgICAgY29uc3QgRm9udCogZm9udEZv
ckNoYXJhY3RlcihVQ2hhcjMyKSBjb25zdDsKKyAgICBjb25zdCBGb250JiBmb250Rm9yRmlyc3RS
YW5nZSgpIGNvbnN0OwogICAgIGJvb2wgaXNMb2FkaW5nKCkgY29uc3Q7CiAKIHByaXZhdGU6Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3Iu
aAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udFNlbGVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDkgKzQxLDkgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgfkZvbnRTZWxlY3RvcigpIHsgfQogCiAgICAgdmlydHVhbCBGb250UmFuZ2Vz
IGZvbnRSYW5nZXNGb3JGYW1pbHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbWlj
U3RyaW5nJikgPSAwOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gZmFs
bGJhY2tGb250RGF0YUF0KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIHNpemVfdCkgPSAwOworICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxGb250PiBmYWxsYmFja0ZvbnRBdChjb25zdCBGb250RGVzY3Jp
cHRpb24mLCBzaXplX3QpID0gMDsKIAotICAgIHZpcnR1YWwgc2l6ZV90IGZhbGxiYWNrRm9udERh
dGFDb3VudCgpID0gMDsKKyAgICB2aXJ0dWFsIHNpemVfdCBmYWxsYmFja0ZvbnRDb3VudCgpID0g
MDsKICAgICB2aXJ0dWFsIGJvb2wgcmVzb2x2ZXNGYW1pbHlGb3IoY29uc3QgRm9udERlc2NyaXB0
aW9uJikgY29uc3QgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkIGZvbnRDYWNoZUludmFsaWRhdGVk
KCkgeyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaEJ1ZmZl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBo
QnVmZmVyLmgJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dseXBoQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBTaW1wbGVGb250RGF0YTsKK2NsYXNzIEZvbnQ7
CiAKICNpZiBVU0UoQ0FJUk8pCiAvLyBGSVhNRTogV2h5IGRvZXMgQ2Fpcm8gdXNlIHN1Y2ggYSBo
dWdlIHN0cnVjdCBpbnN0ZWFkIG9mIGp1c3QgYW4gb2Zmc2V0IGludG8gYW4gYXJyYXk/CkBAIC03
NiwxMiArNzYsMTIgQEAgdHlwZWRlZiBGbG9hdFNpemUgR2x5cGhCdWZmZXJBZHZhbmNlOwogCiBj
bGFzcyBHbHlwaEJ1ZmZlciB7CiBwdWJsaWM6Ci0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyBy
ZXR1cm4gbV9mb250RGF0YS5pc0VtcHR5KCk7IH0KLSAgICBpbnQgc2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fZm9udERhdGEuc2l6ZSgpOyB9CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1
cm4gbV9mb250LmlzRW1wdHkoKTsgfQorICAgIGludCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9m
b250LnNpemUoKTsgfQogICAgIAogICAgIHZvaWQgY2xlYXIoKQogICAgIHsKLSAgICAgICAgbV9m
b250RGF0YS5jbGVhcigpOworICAgICAgICBtX2ZvbnQuY2xlYXIoKTsKICAgICAgICAgbV9nbHlw
aHMuY2xlYXIoKTsKICAgICAgICAgbV9hZHZhbmNlcy5jbGVhcigpOwogICAgICAgICBpZiAobV9v
ZmZzZXRzSW5TdHJpbmcpCkBAIC05Niw3ICs5Niw3IEBAIHB1YmxpYzoKICAgICBjb25zdCBHbHlw
aEJ1ZmZlckdseXBoKiBnbHlwaHMoaW50IGZyb20pIGNvbnN0IHsgcmV0dXJuIG1fZ2x5cGhzLmRh
dGEoKSArIGZyb207IH0KICAgICBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzKGlu
dCBmcm9tKSBjb25zdCB7IHJldHVybiBtX2FkdmFuY2VzLmRhdGEoKSArIGZyb207IH0KIAotICAg
IGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YUF0KGludCBpbmRleCkgY29uc3QgeyByZXR1
cm4gbV9mb250RGF0YVtpbmRleF07IH0KKyAgICBjb25zdCBGb250KiBmb250QXQoaW50IGluZGV4
KSBjb25zdCB7IHJldHVybiBtX2ZvbnRbaW5kZXhdOyB9CiAKICAgICB2b2lkIHNldEluaXRpYWxB
ZHZhbmNlKEdseXBoQnVmZmVyQWR2YW5jZSBpbml0aWFsQWR2YW5jZSkgeyBtX2luaXRpYWxBZHZh
bmNlID0gaW5pdGlhbEFkdmFuY2U7IH0KICAgICBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UmIGlu
aXRpYWxBZHZhbmNlKCkgY29uc3QgeyByZXR1cm4gbV9pbml0aWFsQWR2YW5jZTsgfQpAQCAtMTI2
LDkgKzEyNiw5IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIG5vT2Zmc2V0ID0gVUlOVF9NQVg7Ci0gICAgdm9pZCBhZGQoR2x5cGggZ2x5cGgsIGNvbnN0
IFNpbXBsZUZvbnREYXRhKiBmb250LCBmbG9hdCB3aWR0aCwgdW5zaWduZWQgb2Zmc2V0SW5TdHJp
bmcgPSBub09mZnNldCwgY29uc3QgRmxvYXRTaXplKiBvZmZzZXQgPSAwKQorICAgIHZvaWQgYWRk
KEdseXBoIGdseXBoLCBjb25zdCBGb250KiBmb250LCBmbG9hdCB3aWR0aCwgdW5zaWduZWQgb2Zm
c2V0SW5TdHJpbmcgPSBub09mZnNldCwgY29uc3QgRmxvYXRTaXplKiBvZmZzZXQgPSAwKQogICAg
IHsKLSAgICAgICAgbV9mb250RGF0YS5hcHBlbmQoZm9udCk7CisgICAgICAgIG1fZm9udC5hcHBl
bmQoZm9udCk7CiAKICNpZiBVU0UoQ0FJUk8pCiAgICAgICAgIGNhaXJvX2dseXBoX3QgY2Fpcm9H
bHlwaDsKQEAgLTE1OSw5ICsxNTksOSBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogI2lmICFVU0Uo
V0lOR0RJKQotICAgIHZvaWQgYWRkKEdseXBoIGdseXBoLCBjb25zdCBTaW1wbGVGb250RGF0YSog
Zm9udCwgR2x5cGhCdWZmZXJBZHZhbmNlIGFkdmFuY2UsIHVuc2lnbmVkIG9mZnNldEluU3RyaW5n
ID0gbm9PZmZzZXQpCisgICAgdm9pZCBhZGQoR2x5cGggZ2x5cGgsIGNvbnN0IEZvbnQqIGZvbnQs
IEdseXBoQnVmZmVyQWR2YW5jZSBhZHZhbmNlLCB1bnNpZ25lZCBvZmZzZXRJblN0cmluZyA9IG5v
T2Zmc2V0KQogICAgIHsKLSAgICAgICAgbV9mb250RGF0YS5hcHBlbmQoZm9udCk7CisgICAgICAg
IG1fZm9udC5hcHBlbmQoZm9udCk7CiAjaWYgVVNFKENBSVJPKQogICAgICAgICBjYWlyb19nbHlw
aF90IGNhaXJvR2x5cGg7CiAgICAgICAgIGNhaXJvR2x5cGguaW5kZXggPSBnbHlwaDsKQEAgLTIw
NSw5ICsyMDUsOSBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHZvaWQgc3dhcChpbnQgaW5kZXgx
LCBpbnQgaW5kZXgyKQogICAgIHsKLSAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGYgPSBt
X2ZvbnREYXRhW2luZGV4MV07Ci0gICAgICAgIG1fZm9udERhdGFbaW5kZXgxXSA9IG1fZm9udERh
dGFbaW5kZXgyXTsKLSAgICAgICAgbV9mb250RGF0YVtpbmRleDJdID0gZjsKKyAgICAgICAgY29u
c3QgRm9udCogZiA9IG1fZm9udFtpbmRleDFdOworICAgICAgICBtX2ZvbnRbaW5kZXgxXSA9IG1f
Zm9udFtpbmRleDJdOworICAgICAgICBtX2ZvbnRbaW5kZXgyXSA9IGY7CiAKICAgICAgICAgR2x5
cGhCdWZmZXJHbHlwaCBnID0gbV9nbHlwaHNbaW5kZXgxXTsKICAgICAgICAgbV9nbHlwaHNbaW5k
ZXgxXSA9IG1fZ2x5cGhzW2luZGV4Ml07CkBAIC0yMjQsNyArMjI0LDcgQEAgcHJpdmF0ZToKICNl
bmRpZgogICAgIH0KIAotICAgIFZlY3Rvcjxjb25zdCBTaW1wbGVGb250RGF0YSosIDIwNDg+IG1f
Zm9udERhdGE7CisgICAgVmVjdG9yPGNvbnN0IEZvbnQqLCAyMDQ4PiBtX2ZvbnQ7CiAgICAgVmVj
dG9yPEdseXBoQnVmZmVyR2x5cGgsIDIwNDg+IG1fZ2x5cGhzOwogICAgIFZlY3RvcjxHbHlwaEJ1
ZmZlckFkdmFuY2UsIDIwNDg+IG1fYWR2YW5jZXM7CiAgICAgR2x5cGhCdWZmZXJBZHZhbmNlIG1f
aW5pdGlhbEFkdmFuY2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
bHlwaFBhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HbHlwaFBhZ2UuaAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR2x5cGhQYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDE4ICszOSwxOCBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFNpbXBsZUZvbnREYXRhOworY2xhc3Mg
Rm9udDsKIAotLy8gSG9sZHMgdGhlIGdseXBoIGluZGV4IGFuZCB0aGUgY29ycmVzcG9uZGluZyBT
aW1wbGVGb250RGF0YSBpbmZvcm1hdGlvbiBmb3IgYSBnaXZlbgorLy8gSG9sZHMgdGhlIGdseXBo
IGluZGV4IGFuZCB0aGUgY29ycmVzcG9uZGluZyBGb250IGluZm9ybWF0aW9uIGZvciBhIGdpdmVu
CiAvLyBjaGFyYWN0ZXIuCiBzdHJ1Y3QgR2x5cGhEYXRhIHsKLSAgICBHbHlwaERhdGEoR2x5cGgg
ZyA9IDAsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmID0gMCkKKyAgICBHbHlwaERhdGEoR2x5cGgg
ZyA9IDAsIGNvbnN0IEZvbnQqIGYgPSAwKQogICAgICAgICA6IGdseXBoKGcpCi0gICAgICAgICwg
Zm9udERhdGEoZikKKyAgICAgICAgLCBmb250KGYpCiAgICAgewogICAgIH0KICAgICBHbHlwaCBn
bHlwaDsKLSAgICBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGE7CisgICAgY29uc3QgRm9u
dCogZm9udDsKIH07CiAKICNpZiBDT01QSUxFUihNU1ZDKQpAQCAtNjYsMjQgKzY2LDI0IEBAIHN0
cnVjdCBHbHlwaERhdGEgewogLy8gbWlzc2luZyBpbiB0aGUgcHJpbWFyeSBmb250LgogY2xhc3Mg
R2x5cGhQYWdlIDogcHVibGljIFJlZkNvdW50ZWQ8R2x5cGhQYWdlPiB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NSZWZQdHI8R2x5cGhQYWdlPiBjcmVhdGVGb3JNaXhlZEZvbnREYXRhKCkKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxHbHlwaFBhZ2U+IGNyZWF0ZUZvck1peGVkRm9udHMoKQogICAg
IHsKLSAgICAgICAgdm9pZCogc2xvdCA9IGZhc3RNYWxsb2Moc2l6ZW9mKEdseXBoUGFnZSkgKyBz
aXplb2YoU2ltcGxlRm9udERhdGEqKSAqIEdseXBoUGFnZTo6c2l6ZSk7CisgICAgICAgIHZvaWQq
IHNsb3QgPSBmYXN0TWFsbG9jKHNpemVvZihHbHlwaFBhZ2UpICsgc2l6ZW9mKEZvbnQqKSAqIEds
eXBoUGFnZTo6c2l6ZSk7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgKE5vdE51bGwsIHNs
b3QpIEdseXBoUGFnZShudWxscHRyKSk7CiAgICAgfQogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8
R2x5cGhQYWdlPiBjcmVhdGVDb3B5Rm9yTWl4ZWRGb250RGF0YShjb25zdCBHbHlwaFBhZ2UmIG9y
aWdpbmFsKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdseXBoUGFnZT4gY3JlYXRlQ29weUZvck1p
eGVkRm9udHMoY29uc3QgR2x5cGhQYWdlJiBvcmlnaW5hbCkKICAgICB7Ci0gICAgICAgIFJlZlB0
cjxHbHlwaFBhZ2U+IHBhZ2UgPSBjcmVhdGVGb3JNaXhlZEZvbnREYXRhKCk7CisgICAgICAgIFJl
ZlB0cjxHbHlwaFBhZ2U+IHBhZ2UgPSBjcmVhdGVGb3JNaXhlZEZvbnRzKCk7CiAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBHbHlwaFBhZ2U6OnNpemU7ICsraSkKICAgICAgICAgICAg
IHBhZ2UtPnNldEdseXBoRGF0YUZvckluZGV4KGksIG9yaWdpbmFsLmdseXBoRGF0YUZvckluZGV4
KGkpKTsKICAgICAgICAgcmV0dXJuIHBhZ2UucmVsZWFzZSgpOwogICAgIH0KIAotICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEdseXBoUGFnZT4gY3JlYXRlRm9yU2luZ2xlRm9udERhdGEoY29uc3QgU2lt
cGxlRm9udERhdGEqIGZvbnREYXRhKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdseXBoUGFnZT4g
Y3JlYXRlRm9yU2luZ2xlRm9udChjb25zdCBGb250KiBmb250KQogICAgIHsKLSAgICAgICAgQVNT
RVJUKGZvbnREYXRhKTsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHbHlwaFBhZ2UoZm9u
dERhdGEpKTsKKyAgICAgICAgQVNTRVJUKGZvbnQpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEdseXBoUGFnZShmb250KSk7CiAgICAgfQogCiAgICAgfkdseXBoUGFnZSgpCkBAIC0xMTEs
NyArMTExLDcgQEAgcHVibGljOgogICAgICAgICBHbHlwaCBnbHlwaCA9IG1fZ2x5cGhzW2luZGV4
XTsKICAgICAgICAgaWYgKGhhc1BlckdseXBoRm9udERhdGEoKSkKICAgICAgICAgICAgIHJldHVy
biBHbHlwaERhdGEoZ2x5cGgsIG1fcGVyR2x5cGhGb250RGF0YVtpbmRleF0pOwotICAgICAgICBy
ZXR1cm4gR2x5cGhEYXRhKGdseXBoLCBnbHlwaCA/IG1fZm9udERhdGFGb3JBbGxHbHlwaHMgOiAw
KTsKKyAgICAgICAgcmV0dXJuIEdseXBoRGF0YShnbHlwaCwgZ2x5cGggPyBtX2ZvbnRGb3JBbGxH
bHlwaHMgOiAwKTsKICAgICB9CiAKICAgICBBTFdBWVNfSU5MSU5FIEdseXBoIGdseXBoQXQodW5z
aWduZWQgaW5kZXgpIGNvbnN0CkBAIC0xMjAsNjcgKzEyMCw2NyBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBtX2dseXBoc1tpbmRleF07CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSBjb25z
dCBTaW1wbGVGb250RGF0YSogZm9udERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjKSBjb25zdAor
ICAgIEFMV0FZU19JTkxJTkUgY29uc3QgRm9udCogZm9udEZvckNoYXJhY3RlcihVQ2hhcjMyIGMp
IGNvbnN0CiAgICAgewogICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGluZGV4Rm9yQ2hhcmFjdGVy
KGMpOwogICAgICAgICBpZiAoaGFzUGVyR2x5cGhGb250RGF0YSgpKQogICAgICAgICAgICAgcmV0
dXJuIG1fcGVyR2x5cGhGb250RGF0YVtpbmRleF07Ci0gICAgICAgIHJldHVybiBtX2dseXBoc1tp
bmRleF0gPyBtX2ZvbnREYXRhRm9yQWxsR2x5cGhzIDogMDsKKyAgICAgICAgcmV0dXJuIG1fZ2x5
cGhzW2luZGV4XSA/IG1fZm9udEZvckFsbEdseXBocyA6IDA7CiAgICAgfQogCi0gICAgdm9pZCBz
ZXRHbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjLCBHbHlwaCBnLCBjb25zdCBTaW1wbGVG
b250RGF0YSogZikKKyAgICB2b2lkIHNldEdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMs
IEdseXBoIGcsIGNvbnN0IEZvbnQqIGYpCiAgICAgewogICAgICAgICBzZXRHbHlwaERhdGFGb3JJ
bmRleChpbmRleEZvckNoYXJhY3RlcihjKSwgZywgZik7CiAgICAgfQogCi0gICAgdm9pZCBzZXRH
bHlwaERhdGFGb3JJbmRleCh1bnNpZ25lZCBpbmRleCwgR2x5cGggZ2x5cGgsIGNvbnN0IFNpbXBs
ZUZvbnREYXRhKiBmb250RGF0YSkKKyAgICB2b2lkIHNldEdseXBoRGF0YUZvckluZGV4KHVuc2ln
bmVkIGluZGV4LCBHbHlwaCBnbHlwaCwgY29uc3QgRm9udCogZm9udCkKICAgICB7CiAgICAgICAg
IEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGluZGV4IDwgc2l6ZSk7CiAgICAgICAg
IEFTU0VSVCghbV9pc0ltbXV0YWJsZSk7CiAgICAgICAgIAogICAgICAgICBtX2dseXBoc1tpbmRl
eF0gPSBnbHlwaDsKIAotICAgICAgICAvLyBHbHlwaFBhZ2UgZ2V0dGVycyB3aWxsIGFsd2F5cyBy
ZXR1cm4gYSBudWxsIFNpbXBsZUZvbnREYXRhKiBmb3IgZ2x5cGggIzAgaWYgdGhlcmUncyBubyBw
ZXItZ2x5cGggZm9udCBhcnJheS4KKyAgICAgICAgLy8gR2x5cGhQYWdlIGdldHRlcnMgd2lsbCBh
bHdheXMgcmV0dXJuIGEgbnVsbCBGb250KiBmb3IgZ2x5cGggIzAgaWYgdGhlcmUncyBubyBwZXIt
Z2x5cGggZm9udCBhcnJheS4KICAgICAgICAgaWYgKGhhc1BlckdseXBoRm9udERhdGEoKSkgewot
ICAgICAgICAgICAgbV9wZXJHbHlwaEZvbnREYXRhW2luZGV4XSA9IGdseXBoID8gZm9udERhdGEg
OiAwOworICAgICAgICAgICAgbV9wZXJHbHlwaEZvbnREYXRhW2luZGV4XSA9IGdseXBoID8gZm9u
dCA6IDA7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICAvLyBBIHNp
bmdsZS1mb250IEdseXBoUGFnZSBhbHJlYWR5IGFzc2lnbmVkIG1fZm9udERhdGFGb3JBbGxHbHlw
aHMgaW4gdGhlIGNvbnN0cnVjdG9yLgotICAgICAgICBBU1NFUlQoIWdseXBoIHx8IGZvbnREYXRh
ID09IG1fZm9udERhdGFGb3JBbGxHbHlwaHMpOworICAgICAgICAvLyBBIHNpbmdsZS1mb250IEds
eXBoUGFnZSBhbHJlYWR5IGFzc2lnbmVkIG1fZm9udEZvckFsbEdseXBocyBpbiB0aGUgY29uc3Ry
dWN0b3IuCisgICAgICAgIEFTU0VSVCghZ2x5cGggfHwgZm9udCA9PSBtX2ZvbnRGb3JBbGxHbHlw
aHMpOwogICAgIH0KIAogICAgIHZvaWQgc2V0R2x5cGhEYXRhRm9ySW5kZXgodW5zaWduZWQgaW5k
ZXgsIGNvbnN0IEdseXBoRGF0YSYgZ2x5cGhEYXRhKQogICAgIHsKLSAgICAgICAgc2V0R2x5cGhE
YXRhRm9ySW5kZXgoaW5kZXgsIGdseXBoRGF0YS5nbHlwaCwgZ2x5cGhEYXRhLmZvbnREYXRhKTsK
KyAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgoaW5kZXgsIGdseXBoRGF0YS5nbHlwaCwgZ2x5
cGhEYXRhLmZvbnQpOwogICAgIH0KIAogICAgIC8vIEltcGxlbWVudGVkIGJ5IHRoZSBwbGF0Zm9y
bS4KLSAgICBib29sIGZpbGwodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFy
KiBjaGFyYWN0ZXJCdWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgU2ltcGxlRm9u
dERhdGEqKTsKKyAgICBib29sIGZpbGwodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgs
IFVDaGFyKiBjaGFyYWN0ZXJCdWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgRm9u
dCopOwogI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIHN0YXRpYyBib29sIG1heVVzZU1peGVkRm9u
dERhdGFXaGVuRmlsbGluZyhjb25zdCBVQ2hhciogY2hhcmFjdGVyQnVmZmVyLCB1bnNpZ25lZCBi
dWZmZXJMZW5ndGgsIGNvbnN0IFNpbXBsZUZvbnREYXRhKik7CisgICAgc3RhdGljIGJvb2wgbWF5
VXNlTWl4ZWRGb250c1doZW5GaWxsaW5nKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJCdWZmZXIsIHVu
c2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgRm9udCopOwogI2Vsc2UKLSAgICBzdGF0aWMgYm9v
bCBtYXlVc2VNaXhlZEZvbnREYXRhV2hlbkZpbGxpbmcoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCwg
Y29uc3QgU2ltcGxlRm9udERhdGEqKSB7IHJldHVybiBmYWxzZTsgfQorICAgIHN0YXRpYyBib29s
IG1heVVzZU1peGVkRm9udHNXaGVuRmlsbGluZyhjb25zdCBVQ2hhciosIHVuc2lnbmVkLCBjb25z
dCBGb250KikgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCiBwcml2YXRlOgotICAgIGV4cGxp
Y2l0IEdseXBoUGFnZShjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGFGb3JBbGxHbHlwaHMp
Ci0gICAgICAgIDogbV9mb250RGF0YUZvckFsbEdseXBocyhmb250RGF0YUZvckFsbEdseXBocykK
KyAgICBleHBsaWNpdCBHbHlwaFBhZ2UoY29uc3QgRm9udCogZm9udEZvckFsbEdseXBocykKKyAg
ICAgICAgOiBtX2ZvbnRGb3JBbGxHbHlwaHMoZm9udEZvckFsbEdseXBocykKICAgICB7CiAgICAg
ICAgIG1lbXNldChtX2dseXBocywgMCwgc2l6ZW9mKG1fZ2x5cGhzKSk7CiAgICAgICAgIGlmICho
YXNQZXJHbHlwaEZvbnREYXRhKCkpCi0gICAgICAgICAgICBtZW1zZXQobV9wZXJHbHlwaEZvbnRE
YXRhLCAwLCBzaXplb2YoU2ltcGxlRm9udERhdGEqKSAqIEdseXBoUGFnZTo6c2l6ZSk7CisgICAg
ICAgICAgICBtZW1zZXQobV9wZXJHbHlwaEZvbnREYXRhLCAwLCBzaXplb2YoRm9udCopICogR2x5
cGhQYWdlOjpzaXplKTsKICAgICAgICAgKytzX2NvdW50OwogICAgIH0KIAotICAgIGJvb2wgaGFz
UGVyR2x5cGhGb250RGF0YSgpIGNvbnN0IHsgcmV0dXJuICFtX2ZvbnREYXRhRm9yQWxsR2x5cGhz
OyB9CisgICAgYm9vbCBoYXNQZXJHbHlwaEZvbnREYXRhKCkgY29uc3QgeyByZXR1cm4gIW1fZm9u
dEZvckFsbEdseXBoczsgfQogCi0gICAgY29uc3QgU2ltcGxlRm9udERhdGEqIG1fZm9udERhdGFG
b3JBbGxHbHlwaHM7CisgICAgY29uc3QgRm9udCogbV9mb250Rm9yQWxsR2x5cGhzOwogICAgIEds
eXBoIG1fZ2x5cGhzW3NpemVdOwogCiAgICAgYm9vbCBtX2lzSW1tdXRhYmxlIHsgZmFsc2UgfTsK
LSAgICAvLyBOT1RFOiBUaGlzIGFycmF5IGhhcyAoR2x5cGhQYWdlOjpzaXplKSBlbGVtZW50cyBp
ZiBtX2ZvbnREYXRhRm9yQWxsR2x5cGhzIGlzIG51bGwuCi0gICAgY29uc3QgU2ltcGxlRm9udERh
dGEqIG1fcGVyR2x5cGhGb250RGF0YVswXTsKKyAgICAvLyBOT1RFOiBUaGlzIGFycmF5IGhhcyAo
R2x5cGhQYWdlOjpzaXplKSBlbGVtZW50cyBpZiBtX2ZvbnRGb3JBbGxHbHlwaHMgaXMgbnVsbC4K
KyAgICBjb25zdCBGb250KiBtX3BlckdseXBoRm9udERhdGFbMF07CiAKICAgICBzdGF0aWMgdW5z
aWduZWQgc19jb3VudDsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAJKHJldmlzaW9uIDE3ODg1NykKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ0OCwxMiArNDQ4LDEyIEBAIGZsb2F0IEdyYXBoaWNzQ29udGV4dDo6ZHJh
d1RleHQoY29uc3QgRm8KIH0KICNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0dseXBocyhjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgU2lt
cGxlRm9udERhdGEmIGZvbnREYXRhLCBjb25zdCBHbHlwaEJ1ZmZlciYgYnVmZmVyLCBpbnQgZnJv
bSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCit2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0dseXBocyhjb25zdCBGb250Q2FzY2FkZSYgZm9udENhc2NhZGUsIGNvbnN0
IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBidWZmZXIsIGludCBmcm9tLCBpbnQgbnVt
R2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBmb250LmRyYXdHbHlwaHModGhpcywgJmZv
bnREYXRhLCBidWZmZXIsIGZyb20sIG51bUdseXBocywgcG9pbnQpOworICAgIGZvbnRDYXNjYWRl
LmRyYXdHbHlwaHModGhpcywgJmZvbnQsIGJ1ZmZlciwgZnJvbSwgbnVtR2x5cGhzLCBwb2ludCk7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250
Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIG1h
cmssIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgJ
KHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogI2lmIFVTRShXSU5HREkpCiAgICAgY2xhc3MgU2hhcmVkQml0bWFwOwot
ICAgIGNsYXNzIFNpbXBsZUZvbnREYXRhOworICAgIGNsYXNzIEZvbnQ7CiAgICAgY2xhc3MgR2x5
cGhCdWZmZXI7CiAjZW5kaWYKIApAQCAtMzYwLDcgKzM2MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICNlbHNlCiAgICAgICAgIGZsb2F0IGRyYXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29u
c3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0x
KTsKICNlbmRpZgotICAgICAgICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udENhc2NhZGUmLCBj
b25zdCBTaW1wbGVGb250RGF0YSYsIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCBu
dW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICAgICAgdm9pZCBkcmF3R2x5cGhzKGNv
bnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZy
b20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmKTsKICAgICAgICAgdm9pZCBkcmF3
RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mICwgY29uc3Qg
QXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20gPSAwLCBpbnQg
dG8gPSAtMSk7CiAjaWYgIVBMQVRGT1JNKElPUykKICAgICAgICAgdm9pZCBkcmF3QmlkaVRleHQo
Y29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIEZv
bnRDYXNjYWRlOjpDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPSBGb250Q2FzY2FkZTo6RG9Ob3RQ
YWludElmRm9udE5vdFJlYWR5KTsKQEAgLTQ3OSw3ICs0NzksNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIEFmZmluZVRyYW5zZm9ybSYgYWZmaW5lVHJhbnNmb3JtKCk7CiAgICAgICAg
IHZvaWQgcmVzZXRBZmZpbmVUcmFuc2Zvcm0oKTsKICAgICAgICAgdm9pZCBmaWxsUmVjdChjb25z
dCBGbG9hdFJlY3QmLCBjb25zdCBHcmFkaWVudCopOwotICAgICAgICB2b2lkIGRyYXdUZXh0KGNv
bnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVm
ZmVyLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpOwor
ICAgICAgICB2b2lkIGRyYXdUZXh0KGNvbnN0IEZvbnQqLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGlu
dCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50Jik7CiAgICAgICAgIHZvaWQg
ZHJhd0ZyYW1lQ29udHJvbChjb25zdCBJbnRSZWN0JiByZWN0LCB1bnNpZ25lZCB0eXBlLCB1bnNp
Z25lZCBzdGF0ZSk7CiAgICAgICAgIHZvaWQgZHJhd0ZvY3VzUmVjdChjb25zdCBJbnRSZWN0JiBy
ZWN0KTsKICAgICAgICAgdm9pZCBwYWludFRleHRGaWVsZChjb25zdCBJbnRSZWN0JiByZWN0LCB1
bnNpZ25lZCBzdGF0ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9T
aW1wbGVGb250RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvU2ltcGxlRm9udERhdGEuY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNDU2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDgsIDIw
MTAsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5l
aXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgot
ICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
Ci0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0g
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTaW1wbGVG
b250RGF0YS5oIgotCi0jaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBfX01B
Q19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID4gMTA4MCkKLSNpbmNsdWRlICJDb3JlVGV4dFNQ
SS5oIgotI2VuZGlmCi0jaW5jbHVkZSAiRm9udENhY2hlLmgiCi0jaW5jbHVkZSAiRm9udENhc2Nh
ZGUuaCIKLSNpbmNsdWRlICJPcGVuVHlwZU1hdGhEYXRhLmgiCi0jaW5jbHVkZSA8d3RmL01hdGhF
eHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLQotI2lmIEVOQUJMRShP
UEVOVFlQRV9WRVJUSUNBTCkKLSNpbmNsdWRlICJPcGVuVHlwZVZlcnRpY2FsRGF0YS5oIgotI2Vu
ZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdW5zaWduZWQgR2x5cGhQYWdlOjpzX2NvdW50
ID0gMDsKLQotY29uc3QgZmxvYXQgc21hbGxDYXBzRm9udFNpemVNdWx0aXBsaWVyID0gMC43ZjsK
LWNvbnN0IGZsb2F0IGVtcGhhc2lzTWFya0ZvbnRTaXplTXVsdGlwbGllciA9IDAuNWY7Ci0KLVNp
bXBsZUZvbnREYXRhOjpTaW1wbGVGb250RGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0
Zm9ybURhdGEsIGJvb2wgaXNDdXN0b21Gb250LCBib29sIGlzTG9hZGluZywgYm9vbCBpc1RleHRP
cmllbnRhdGlvbkZhbGxiYWNrKQotICAgIDogbV9tYXhDaGFyV2lkdGgoLTEpCi0gICAgLCBtX2F2
Z0NoYXJXaWR0aCgtMSkKLSAgICAsIG1fcGxhdGZvcm1EYXRhKHBsYXRmb3JtRGF0YSkKLSAgICAs
IG1fdHJlYXRBc0ZpeGVkUGl0Y2goZmFsc2UpCi0gICAgLCBtX2lzQ3VzdG9tRm9udChpc0N1c3Rv
bUZvbnQpCi0gICAgLCBtX2lzTG9hZGluZyhpc0xvYWRpbmcpCi0gICAgLCBtX2lzVGV4dE9yaWVu
dGF0aW9uRmFsbGJhY2soaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaykKLSAgICAsIG1faXNCcm9r
ZW5JZGVvZ3JhcGhGYWxsYmFjayhmYWxzZSkKLSAgICAsIG1fbWF0aERhdGEobnVsbHB0cikKLSNp
ZiBFTkFCTEUoT1BFTlRZUEVfVkVSVElDQUwpCi0gICAgLCBtX3ZlcnRpY2FsRGF0YSgwKQotI2Vu
ZGlmCi0gICAgLCBtX2hhc1ZlcnRpY2FsR2x5cGhzKGZhbHNlKQotewotICAgIHBsYXRmb3JtSW5p
dCgpOwotICAgIHBsYXRmb3JtR2x5cGhJbml0KCk7Ci0gICAgcGxhdGZvcm1DaGFyV2lkdGhJbml0
KCk7Ci0jaWYgRU5BQkxFKE9QRU5UWVBFX1ZFUlRJQ0FMKQotICAgIGlmIChwbGF0Zm9ybURhdGEu
b3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCAmJiAhaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaykg
ewotICAgICAgICBtX3ZlcnRpY2FsRGF0YSA9IHBsYXRmb3JtRGF0YS52ZXJ0aWNhbERhdGEoKTsK
LSAgICAgICAgbV9oYXNWZXJ0aWNhbEdseXBocyA9IG1fdmVydGljYWxEYXRhLmdldCgpICYmIG1f
dmVydGljYWxEYXRhLT5oYXNWZXJ0aWNhbE1ldHJpY3MoKTsKLSAgICB9Ci0jZW5kaWYKLX0KLQot
U2ltcGxlRm9udERhdGE6OlNpbXBsZUZvbnREYXRhKHN0ZDo6dW5pcXVlX3B0cjxTVkdEYXRhPiBz
dmdEYXRhLCBmbG9hdCBmb250U2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRp
Y0l0YWxpYykKLSAgICA6IG1fcGxhdGZvcm1EYXRhKEZvbnRQbGF0Zm9ybURhdGEoZm9udFNpemUs
IHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYykpCi0gICAgLCBtX3N2Z0RhdGEoV1RGOjpt
b3ZlKHN2Z0RhdGEpKQotICAgICwgbV90cmVhdEFzRml4ZWRQaXRjaChmYWxzZSkKLSAgICAsIG1f
aXNDdXN0b21Gb250KHRydWUpCi0gICAgLCBtX2lzTG9hZGluZyhmYWxzZSkKLSAgICAsIG1faXNU
ZXh0T3JpZW50YXRpb25GYWxsYmFjayhmYWxzZSkKLSAgICAsIG1faXNCcm9rZW5JZGVvZ3JhcGhG
YWxsYmFjayhmYWxzZSkKLSAgICAsIG1fbWF0aERhdGEobnVsbHB0cikKLSNpZiBFTkFCTEUoT1BF
TlRZUEVfVkVSVElDQUwpCi0gICAgLCBtX3ZlcnRpY2FsRGF0YSgwKQotI2VuZGlmCi0gICAgLCBt
X2hhc1ZlcnRpY2FsR2x5cGhzKGZhbHNlKQotI2lmIFBMQVRGT1JNKElPUykKLSAgICAsIG1fc2hv
dWxkTm90QmVVc2VkRm9yQXJhYmljKGZhbHNlKQotI2VuZGlmCi17Ci0gICAgbV9zdmdEYXRhLT5p
bml0aWFsaXplRm9udERhdGEodGhpcywgZm9udFNpemUpOwotfQotCi0vLyBFc3RpbWF0ZXMgb2Yg
YXZnQ2hhcldpZHRoIGFuZCBtYXhDaGFyV2lkdGggZm9yIHBsYXRmb3JtcyB0aGF0IGRvbid0IHN1
cHBvcnQgYWNjZXNzaW5nIHRoZXNlIHZhbHVlcyBmcm9tIHRoZSBmb250Lgotdm9pZCBTaW1wbGVG
b250RGF0YTo6aW5pdENoYXJXaWR0aHMoKQotewotICAgIGF1dG8qIGdseXBoUGFnZVplcm8gPSBn
bHlwaFBhZ2UoMCk7Ci0KLSAgICAvLyBUcmVhdCB0aGUgd2lkdGggb2YgYSAnMCcgYXMgdGhlIGF2
Z0NoYXJXaWR0aC4KLSAgICBpZiAobV9hdmdDaGFyV2lkdGggPD0gMC5mICYmIGdseXBoUGFnZVpl
cm8pIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IFVDaGFyMzIgZGlnaXRaZXJvQ2hhciA9ICcwJzsK
LSAgICAgICAgR2x5cGggZGlnaXRaZXJvR2x5cGggPSBnbHlwaFBhZ2VaZXJvLT5nbHlwaERhdGFG
b3JDaGFyYWN0ZXIoZGlnaXRaZXJvQ2hhcikuZ2x5cGg7Ci0gICAgICAgIGlmIChkaWdpdFplcm9H
bHlwaCkKLSAgICAgICAgICAgIG1fYXZnQ2hhcldpZHRoID0gd2lkdGhGb3JHbHlwaChkaWdpdFpl
cm9HbHlwaCk7Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgY2FuJ3QgcmV0cmlldmUgdGhlIHdpZHRo
IG9mIGEgJzAnLCBmYWxsIGJhY2sgdG8gdGhlIHggaGVpZ2h0LgotICAgIGlmIChtX2F2Z0NoYXJX
aWR0aCA8PSAwLmYpCi0gICAgICAgIG1fYXZnQ2hhcldpZHRoID0gbV9mb250TWV0cmljcy54SGVp
Z2h0KCk7Ci0KLSAgICBpZiAobV9tYXhDaGFyV2lkdGggPD0gMC5mKQotICAgICAgICBtX21heENo
YXJXaWR0aCA9IHN0ZDo6bWF4KG1fYXZnQ2hhcldpZHRoLCBtX2ZvbnRNZXRyaWNzLmZsb2F0QXNj
ZW50KCkpOwotfQotCi12b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUdseXBoSW5pdCgpCi17
Ci0gICAgYXV0byogZ2x5cGhQYWdlWmVybyA9IGdseXBoUGFnZSgwKTsKLSAgICBpZiAoIWdseXBo
UGFnZVplcm8pIHsKLSAgICAgICAgbV9zcGFjZUdseXBoID0gMDsKLSAgICAgICAgbV9zcGFjZVdp
ZHRoID0gMDsKLSAgICAgICAgbV96ZXJvR2x5cGggPSAwOwotICAgICAgICBtX2FkanVzdGVkU3Bh
Y2VXaWR0aCA9IDA7Ci0gICAgICAgIGRldGVybWluZVBpdGNoKCk7Ci0gICAgICAgIG1femVyb1dp
ZHRoU3BhY2VHbHlwaCA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBBc2sg
Zm9yIHRoZSBnbHlwaCBmb3IgMCB0byBhdm9pZCBwYWdpbmcgaW4gWkVSTyBXSURUSCBTUEFDRS4g
Q29udHJvbCBjaGFyYWN0ZXJzLCBpbmNsdWRpbmcgMCwKLSAgICAvLyBhcmUgbWFwcGVkIHRvIHRo
ZSBaRVJPIFdJRFRIIFNQQUNFIGdseXBoLgotICAgIG1femVyb1dpZHRoU3BhY2VHbHlwaCA9IGds
eXBoUGFnZVplcm8tPmdseXBoRGF0YUZvckNoYXJhY3RlcigwKS5nbHlwaDsKLQotICAgIC8vIE5h
c3R5IGhhY2sgdG8gZGV0ZXJtaW5lIGlmIHdlIHNob3VsZCByb3VuZCBvciBjZWlsIHNwYWNlIHdp
ZHRocy4KLSAgICAvLyBJZiB0aGUgZm9udCBpcyBtb25vc3BhY2Ugb3IgZmFrZSBtb25vc3BhY2Ug
d2UgY2VpbCB0byBlbnN1cmUgdGhhdCAKLSAgICAvLyBldmVyeSBjaGFyYWN0ZXIgYW5kIHRoZSBz
cGFjZSBhcmUgdGhlIHNhbWUgd2lkdGguICBPdGhlcndpc2Ugd2Ugcm91bmQuCi0gICAgbV9zcGFj
ZUdseXBoID0gZ2x5cGhQYWdlWmVyby0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKCcgJykuZ2x5cGg7
Ci0gICAgZmxvYXQgd2lkdGggPSB3aWR0aEZvckdseXBoKG1fc3BhY2VHbHlwaCk7Ci0gICAgbV9z
cGFjZVdpZHRoID0gd2lkdGg7Ci0gICAgbV96ZXJvR2x5cGggPSBnbHlwaFBhZ2VaZXJvLT5nbHlw
aERhdGFGb3JDaGFyYWN0ZXIoJzAnKS5nbHlwaDsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldFplcm9X
aWR0aCh3aWR0aEZvckdseXBoKG1femVyb0dseXBoKSk7Ci0gICAgZGV0ZXJtaW5lUGl0Y2goKTsK
LSAgICBtX2FkanVzdGVkU3BhY2VXaWR0aCA9IG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPyBjZWlsZih3
aWR0aCkgOiByb3VuZGYod2lkdGgpOwotCi0gICAgLy8gRm9yY2UgdGhlIGdseXBoIGZvciBaRVJP
IFdJRFRIIFNQQUNFIHRvIGhhdmUgemVybyB3aWR0aCwgdW5sZXNzIGl0IGlzIHNoYXJlZCB3aXRo
IFNQQUNFLgotICAgIC8vIEhlbHZldGljYSBpcyBhbiBleGFtcGxlIG9mIGEgbm9uLXplcm8gd2lk
dGggWkVSTyBXSURUSCBTUEFDRSBnbHlwaC4KLSAgICAvLyBTZWUgPGh0dHA6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMTc4PiBhbmQgU2ltcGxlRm9udERhdGE6OmlzWmVyb1dp
ZHRoU3BhY2VHbHlwaCgpCi0gICAgaWYgKG1femVyb1dpZHRoU3BhY2VHbHlwaCA9PSBtX3NwYWNl
R2x5cGgpCi0gICAgICAgIG1femVyb1dpZHRoU3BhY2VHbHlwaCA9IDA7Ci19Ci0KLVNpbXBsZUZv
bnREYXRhOjp+U2ltcGxlRm9udERhdGEoKQotewotICAgIHJlbW92ZUZyb21TeXN0ZW1GYWxsYmFj
a0NhY2hlKCk7Ci19Ci0KLXN0YXRpYyBib29sIGZpbGxHbHlwaFBhZ2UoR2x5cGhQYWdlJiBwYWdl
VG9GaWxsLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwg
dW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEpCi17
Ci0jaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICBpZiAoYXV0byogc3ZnRGF0YSA9IGZvbnREYXRh
LT5zdmdEYXRhKCkpCi0gICAgICAgIHJldHVybiBzdmdEYXRhLT5maWxsU1ZHR2x5cGhQYWdlKCZw
YWdlVG9GaWxsLCBvZmZzZXQsIGxlbmd0aCwgYnVmZmVyLCBidWZmZXJMZW5ndGgsIGZvbnREYXRh
KTsKLSNlbmRpZgotICAgIGJvb2wgaGFzR2x5cGhzID0gcGFnZVRvRmlsbC5maWxsKG9mZnNldCwg
bGVuZ3RoLCBidWZmZXIsIGJ1ZmZlckxlbmd0aCwgZm9udERhdGEpOwotI2lmIEVOQUJMRShPUEVO
VFlQRV9WRVJUSUNBTCkKLSAgICBpZiAoaGFzR2x5cGhzICYmIGZvbnREYXRhLT52ZXJ0aWNhbERh
dGEoKSkKLSAgICAgICAgZm9udERhdGEtPnZlcnRpY2FsRGF0YSgpLT5zdWJzdGl0dXRlV2l0aFZl
cnRpY2FsR2x5cGhzKGZvbnREYXRhLCAmcGFnZVRvRmlsbCwgb2Zmc2V0LCBsZW5ndGgpOwotI2Vu
ZGlmCi0gICAgcmV0dXJuIGhhc0dseXBoczsKLX0KLQotc3RhdGljIFJlZlB0cjxHbHlwaFBhZ2U+
IGNyZWF0ZUFuZEZpbGxHbHlwaFBhZ2UodW5zaWduZWQgcGFnZU51bWJlciwgY29uc3QgU2ltcGxl
Rm9udERhdGEqIGZvbnREYXRhKQotewotI2lmIFBMQVRGT1JNKElPUykKLSAgICAvLyBGSVhNRTog
VGltZXMgTmV3IFJvbWFuIGNvbnRhaW5zIEFyYWJpYyBnbHlwaHMsIGJ1dCBDb3JlIFRleHQgZG9l
c24ndCBrbm93IGhvdyB0byBzaGFwZSB0aGVtLiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzk4MjM5NzU+
LgotICAgIC8vIE9uY2Ugd2UgaGF2ZSB0aGUgZml4IGZvciA8cmRhcjovL3Byb2JsZW0vOTgyMzk3
NT4gdGhlbiByZW1vdmUgdGhpcyBjb2RlIHRvZ2V0aGVyIHdpdGggU2ltcGxlRm9udERhdGE6OnNo
b3VsZE5vdEJlVXNlZEZvckFyYWJpYygpCi0gICAgLy8gaW4gPHJkYXI6Ly9wcm9ibGVtLzEyMDk2
ODM1Pi4KLSAgICBpZiAocGFnZU51bWJlciA9PSA2ICYmIGZvbnREYXRhLT5zaG91bGROb3RCZVVz
ZWRGb3JBcmFiaWMoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0jZW5kaWYKLQotICAgIHVu
c2lnbmVkIHN0YXJ0ID0gcGFnZU51bWJlciAqIEdseXBoUGFnZTo6c2l6ZTsKLSAgICBVQ2hhciBi
dWZmZXJbR2x5cGhQYWdlOjpzaXplICogMiArIDJdOwotICAgIHVuc2lnbmVkIGJ1ZmZlckxlbmd0
aDsKLSAgICAvLyBGaWxsIGluIGEgYnVmZmVyIHdpdGggdGhlIGVudGlyZSAicGFnZSIgb2YgY2hh
cmFjdGVycyB0aGF0IHdlIHdhbnQgdG8gbG9vayB1cCBnbHlwaHMgZm9yLgotICAgIGlmIChVX0lT
X0JNUChzdGFydCkpIHsKLSAgICAgICAgYnVmZmVyTGVuZ3RoID0gR2x5cGhQYWdlOjpzaXplOwot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR2x5cGhQYWdlOjpzaXplOyBpKyspCi0g
ICAgICAgICAgICBidWZmZXJbaV0gPSBzdGFydCArIGk7Ci0KLSAgICAgICAgaWYgKHN0YXJ0ID09
IDApIHsKLSAgICAgICAgICAgIC8vIENvbnRyb2wgY2hhcmFjdGVycyBtdXN0IG5vdCByZW5kZXIg
YXQgYWxsLgotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDB4MjA7ICsraSkK
LSAgICAgICAgICAgICAgICBidWZmZXJbaV0gPSB6ZXJvV2lkdGhTcGFjZTsKLSAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDB4N0Y7IGkgPCAweEEwOyBpKyspCi0gICAgICAgICAgICAgICAg
YnVmZmVyW2ldID0gemVyb1dpZHRoU3BhY2U7Ci0gICAgICAgICAgICBidWZmZXJbc29mdEh5cGhl
bl0gPSB6ZXJvV2lkdGhTcGFjZTsKLQotICAgICAgICAgICAgLy8gXG4sIFx0LCBhbmQgbm9uYnJl
YWtpbmcgc3BhY2UgbXVzdCByZW5kZXIgYXMgYSBzcGFjZS4KLSAgICAgICAgICAgIGJ1ZmZlclso
aW50KSdcbiddID0gJyAnOwotICAgICAgICAgICAgYnVmZmVyWyhpbnQpJ1x0J10gPSAnICc7Ci0g
ICAgICAgICAgICBidWZmZXJbbm9CcmVha1NwYWNlXSA9ICcgJzsKLSAgICAgICAgfSBlbHNlIGlm
IChzdGFydCA9PSAobGVmdFRvUmlnaHRNYXJrICYgfihHbHlwaFBhZ2U6OnNpemUgLSAxKSkpIHsK
LSAgICAgICAgICAgIC8vIExSTSwgUkxNLCBMUkUsIFJMRSwgWldOSiwgWldKLCBhbmQgUERGIG11
c3Qgbm90IHJlbmRlciBhdCBhbGwuCi0gICAgICAgICAgICBidWZmZXJbbGVmdFRvUmlnaHRNYXJr
IC0gc3RhcnRdID0gemVyb1dpZHRoU3BhY2U7Ci0gICAgICAgICAgICBidWZmZXJbcmlnaHRUb0xl
ZnRNYXJrIC0gc3RhcnRdID0gemVyb1dpZHRoU3BhY2U7Ci0gICAgICAgICAgICBidWZmZXJbbGVm
dFRvUmlnaHRFbWJlZCAtIHN0YXJ0XSA9IHplcm9XaWR0aFNwYWNlOwotICAgICAgICAgICAgYnVm
ZmVyW3JpZ2h0VG9MZWZ0RW1iZWQgLSBzdGFydF0gPSB6ZXJvV2lkdGhTcGFjZTsKLSAgICAgICAg
ICAgIGJ1ZmZlcltsZWZ0VG9SaWdodE92ZXJyaWRlIC0gc3RhcnRdID0gemVyb1dpZHRoU3BhY2U7
Ci0gICAgICAgICAgICBidWZmZXJbcmlnaHRUb0xlZnRPdmVycmlkZSAtIHN0YXJ0XSA9IHplcm9X
aWR0aFNwYWNlOwotICAgICAgICAgICAgYnVmZmVyW3plcm9XaWR0aE5vbkpvaW5lciAtIHN0YXJ0
XSA9IHplcm9XaWR0aFNwYWNlOwotICAgICAgICAgICAgYnVmZmVyW3plcm9XaWR0aEpvaW5lciAt
IHN0YXJ0XSA9IHplcm9XaWR0aFNwYWNlOwotICAgICAgICAgICAgYnVmZmVyW3BvcERpcmVjdGlv
bmFsRm9ybWF0dGluZyAtIHN0YXJ0XSA9IHplcm9XaWR0aFNwYWNlOwotICAgICAgICB9IGVsc2Ug
aWYgKHN0YXJ0ID09IChvYmplY3RSZXBsYWNlbWVudENoYXJhY3RlciAmIH4oR2x5cGhQYWdlOjpz
aXplIC0gMSkpKSB7Ci0gICAgICAgICAgICAvLyBPYmplY3QgcmVwbGFjZW1lbnQgY2hhcmFjdGVy
IG11c3Qgbm90IHJlbmRlciBhdCBhbGwuCi0gICAgICAgICAgICBidWZmZXJbb2JqZWN0UmVwbGFj
ZW1lbnRDaGFyYWN0ZXIgLSBzdGFydF0gPSB6ZXJvV2lkdGhTcGFjZTsKLSAgICAgICAgfSBlbHNl
IGlmIChzdGFydCA9PSAoemVyb1dpZHRoTm9CcmVha1NwYWNlICYgfihHbHlwaFBhZ2U6OnNpemUg
LSAxKSkpIHsKLSAgICAgICAgICAgIC8vIFpXTkJTL0JPTSBtdXN0IG5vdCByZW5kZXIgYXQgYWxs
LgotICAgICAgICAgICAgYnVmZmVyW3plcm9XaWR0aE5vQnJlYWtTcGFjZSAtIHN0YXJ0XSA9IHpl
cm9XaWR0aFNwYWNlOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgYnVmZmVyTGVu
Z3RoID0gR2x5cGhQYWdlOjpzaXplICogMjsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IEdseXBoUGFnZTo6c2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICBpbnQgYyA9IGkgKyBzdGFy
dDsKLSAgICAgICAgICAgIGJ1ZmZlcltpICogMl0gPSBVMTZfTEVBRChjKTsKLSAgICAgICAgICAg
IGJ1ZmZlcltpICogMiArIDFdID0gVTE2X1RSQUlMKGMpOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgLy8gTm93IHRoYXQgd2UgaGF2ZSBhIGJ1ZmZlciBmdWxsIG9mIGNoYXJhY3RlcnMsIHdlIHdh
bnQgdG8gZ2V0IGJhY2sgYW4gYXJyYXkKLSAgICAvLyBvZiBnbHlwaCBpbmRpY2VzLiBUaGlzIHBh
cnQgaW52b2x2ZXMgY2FsbGluZyBpbnRvIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYwotICAgIC8vIHJv
dXRpbmUgb2Ygb3VyIGdseXBoIG1hcCBmb3IgYWN0dWFsbHkgZmlsbGluZyBpbiB0aGUgcGFnZSB3
aXRoIHRoZSBnbHlwaHMuCi0gICAgLy8gU3VjY2VzcyBpcyBub3QgZ3VhcmFudGVlZC4gRm9yIGV4
YW1wbGUsIFRpbWVzIGZhaWxzIHRvIGZpbGwgcGFnZSAyNjAsIGdpdmluZyBnbHlwaCBkYXRhCi0g
ICAgLy8gZm9yIG9ubHkgMTI4IG91dCBvZiAyNTYgY2hhcmFjdGVycy4KLSAgICBSZWZQdHI8R2x5
cGhQYWdlPiBnbHlwaFBhZ2U7Ci0gICAgaWYgKEdseXBoUGFnZTo6bWF5VXNlTWl4ZWRGb250RGF0
YVdoZW5GaWxsaW5nKGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCBmb250RGF0YSkpCi0gICAgICAgIGds
eXBoUGFnZSA9IEdseXBoUGFnZTo6Y3JlYXRlRm9yTWl4ZWRGb250RGF0YSgpOwotICAgIGVsc2UK
LSAgICAgICAgZ2x5cGhQYWdlID0gR2x5cGhQYWdlOjpjcmVhdGVGb3JTaW5nbGVGb250RGF0YShm
b250RGF0YSk7Ci0KLSAgICBib29sIGhhdmVHbHlwaHMgPSBmaWxsR2x5cGhQYWdlKCpnbHlwaFBh
Z2UsIDAsIEdseXBoUGFnZTo6c2l6ZSwgYnVmZmVyLCBidWZmZXJMZW5ndGgsIGZvbnREYXRhKTsK
LSAgICBpZiAoIWhhdmVHbHlwaHMpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgZ2x5
cGhQYWdlLT5zZXRJbW11dGFibGUoKTsKLSAgICByZXR1cm4gZ2x5cGhQYWdlOwotfQotCi1jb25z
dCBHbHlwaFBhZ2UqIFNpbXBsZUZvbnREYXRhOjpnbHlwaFBhZ2UodW5zaWduZWQgcGFnZU51bWJl
cikgY29uc3QKLXsKLSAgICBpZiAocGFnZU51bWJlciA9PSAwKSB7Ci0gICAgICAgIGlmICghbV9n
bHlwaFBhZ2VaZXJvKQotICAgICAgICAgICAgbV9nbHlwaFBhZ2VaZXJvID0gY3JlYXRlQW5kRmls
bEdseXBoUGFnZSgwLCB0aGlzKTsKLSAgICAgICAgcmV0dXJuIG1fZ2x5cGhQYWdlWmVyby5nZXQo
KTsKLSAgICB9Ci0gICAgYXV0byBhZGRSZXN1bHQgPSBtX2dseXBoUGFnZXMuYWRkKHBhZ2VOdW1i
ZXIsIG51bGxwdHIpOwotICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgYWRk
UmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGNyZWF0ZUFuZEZpbGxHbHlwaFBhZ2UocGFnZU51bWJl
ciwgdGhpcyk7Ci0KLSAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsK
LX0KLQotR2x5cGggU2ltcGxlRm9udERhdGE6OmdseXBoRm9yQ2hhcmFjdGVyKFVDaGFyMzIgY2hh
cmFjdGVyKSBjb25zdAotewotICAgIGF1dG8qIHBhZ2UgPSBnbHlwaFBhZ2UoY2hhcmFjdGVyIC8g
R2x5cGhQYWdlOjpzaXplKTsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVybiAwOwotICAg
IHJldHVybiBwYWdlLT5nbHlwaEF0KGNoYXJhY3RlciAlIEdseXBoUGFnZTo6c2l6ZSk7Ci19Ci0K
LUdseXBoRGF0YSBTaW1wbGVGb250RGF0YTo6Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIg
Y2hhcmFjdGVyKSBjb25zdAotewotICAgIGF1dG8qIHBhZ2UgPSBnbHlwaFBhZ2UoY2hhcmFjdGVy
IC8gR2x5cGhQYWdlOjpzaXplKTsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVybiBHbHlw
aERhdGEoKTsKLSAgICByZXR1cm4gcGFnZS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3Rl
cik7Ci19Ci0KLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjp2ZXJ0
aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250RGF0YSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2Rlcml2
ZWRGb250RGF0YSkKLSAgICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBzdGQ6Om1ha2VfdW5pcXVl
PERlcml2ZWRGb250RGF0YT4oaXNDdXN0b21Gb250KCkpOwotICAgIGlmICghbV9kZXJpdmVkRm9u
dERhdGEtPnZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbikgewotICAgICAgICBGb250UGxhdGZvcm1E
YXRhIHZlcnRpY2FsUmlnaHRQbGF0Zm9ybURhdGEobV9wbGF0Zm9ybURhdGEpOwotICAgICAgICB2
ZXJ0aWNhbFJpZ2h0UGxhdGZvcm1EYXRhLnNldE9yaWVudGF0aW9uKEhvcml6b250YWwpOwotICAg
ICAgICBtX2Rlcml2ZWRGb250RGF0YS0+dmVydGljYWxSaWdodE9yaWVudGF0aW9uID0gY3JlYXRl
KHZlcnRpY2FsUmlnaHRQbGF0Zm9ybURhdGEsIGlzQ3VzdG9tRm9udCgpLCBmYWxzZSwgdHJ1ZSk7
Ci0gICAgfQotICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+dmVydGljYWxSaWdodE9yaWVu
dGF0aW9uOwotfQotCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6
dXByaWdodE9yaWVudGF0aW9uRm9udERhdGEoKSBjb25zdAotewotICAgIGlmICghbV9kZXJpdmVk
Rm9udERhdGEpCi0gICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxE
ZXJpdmVkRm9udERhdGE+KGlzQ3VzdG9tRm9udCgpKTsKLSAgICBpZiAoIW1fZGVyaXZlZEZvbnRE
YXRhLT51cHJpZ2h0T3JpZW50YXRpb24pCi0gICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT51cHJp
Z2h0T3JpZW50YXRpb24gPSBjcmVhdGUobV9wbGF0Zm9ybURhdGEsIGlzQ3VzdG9tRm9udCgpLCBm
YWxzZSwgdHJ1ZSk7Ci0gICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT51cHJpZ2h0T3JpZW50
YXRpb247Ci19Ci0KLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpz
bWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikg
Y29uc3QKLXsKLSAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQotICAgICAgICBtX2Rlcml2ZWRG
b250RGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8RGVyaXZlZEZvbnREYXRhPihpc0N1c3RvbUZvbnQo
KSk7Ci0gICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzKQotICAgICAgICBtX2Rl
cml2ZWRGb250RGF0YS0+c21hbGxDYXBzID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9udERlc2Ny
aXB0aW9uLCBzbWFsbENhcHNGb250U2l6ZU11bHRpcGxpZXIpOwotCi0gICAgcmV0dXJuIG1fZGVy
aXZlZEZvbnREYXRhLT5zbWFsbENhcHM7Ci19Ci0KLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+
IFNpbXBsZUZvbnREYXRhOjplbXBoYXNpc01hcmtGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRp
b24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKLXsKLSAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRh
KQotICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8RGVyaXZlZEZv
bnREYXRhPihpc0N1c3RvbUZvbnQoKSk7Ci0gICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+ZW1w
aGFzaXNNYXJrKQotICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrID0gY3Jl
YXRlU2NhbGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9uLCBlbXBoYXNpc01hcmtGb250U2l6ZU11
bHRpcGxpZXIpOwotCi0gICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcms7
Ci19Ci0KLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpicm9rZW5J
ZGVvZ3JhcGhGb250RGF0YSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkK
LSAgICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPERlcml2ZWRGb250
RGF0YT4oaXNDdXN0b21Gb250KCkpOwotICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEtPmJyb2tl
bklkZW9ncmFwaCkgewotICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+YnJva2VuSWRlb2dyYXBo
ID0gY3JlYXRlKG1fcGxhdGZvcm1EYXRhLCBpc0N1c3RvbUZvbnQoKSwgZmFsc2UpOwotICAgICAg
ICBtX2Rlcml2ZWRGb250RGF0YS0+YnJva2VuSWRlb2dyYXBoLT5tX2lzQnJva2VuSWRlb2dyYXBo
RmFsbGJhY2sgPSB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPmJy
b2tlbklkZW9ncmFwaDsKLX0KLQotUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9u
dERhdGE6Om5vblN5bnRoZXRpY0l0YWxpY0ZvbnREYXRhKCkgY29uc3QKLXsKLSAgICBpZiAoIW1f
ZGVyaXZlZEZvbnREYXRhKQotICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IHN0ZDo6bWFrZV91
bmlxdWU8RGVyaXZlZEZvbnREYXRhPihpc0N1c3RvbUZvbnQoKSk7Ci0gICAgaWYgKCFtX2Rlcml2
ZWRGb250RGF0YS0+bm9uU3ludGhldGljSXRhbGljKSB7Ci0gICAgICAgIEZvbnRQbGF0Zm9ybURh
dGEgbm9uU3ludGhldGljSXRhbGljRm9udFBsYXRmb3JtRGF0YShtX3BsYXRmb3JtRGF0YSk7Ci0j
aWYgUExBVEZPUk0oQ09DT0EpCi0gICAgICAgIG5vblN5bnRoZXRpY0l0YWxpY0ZvbnRQbGF0Zm9y
bURhdGEubV9zeW50aGV0aWNPYmxpcXVlID0gZmFsc2U7Ci0jZW5kaWYKLSAgICAgICAgbV9kZXJp
dmVkRm9udERhdGEtPm5vblN5bnRoZXRpY0l0YWxpYyA9IGNyZWF0ZShub25TeW50aGV0aWNJdGFs
aWNGb250UGxhdGZvcm1EYXRhLCBpc0N1c3RvbUZvbnQoKSk7Ci0gICAgfQotICAgIHJldHVybiBt
X2Rlcml2ZWRGb250RGF0YS0+bm9uU3ludGhldGljSXRhbGljOwotfQotCi0jaWZuZGVmIE5ERUJV
RwotU3RyaW5nIFNpbXBsZUZvbnREYXRhOjpkZXNjcmlwdGlvbigpIGNvbnN0Ci17Ci0gICAgaWYg
KGlzU1ZHRm9udCgpKQotICAgICAgICByZXR1cm4gIltTVkcgZm9udF0iOwotICAgIGlmIChpc0N1
c3RvbUZvbnQoKSkKLSAgICAgICAgcmV0dXJuICJbY3VzdG9tIGZvbnRdIjsKLQotICAgIHJldHVy
biBwbGF0Zm9ybURhdGEoKS5kZXNjcmlwdGlvbigpOwotfQotI2VuZGlmCi0KLWNvbnN0IE9wZW5U
eXBlTWF0aERhdGEqIFNpbXBsZUZvbnREYXRhOjptYXRoRGF0YSgpIGNvbnN0Ci17Ci0gICAgaWYg
KG1faXNMb2FkaW5nKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIW1fbWF0aERh
dGEpIHsKLSAgICAgICAgbV9tYXRoRGF0YSA9IE9wZW5UeXBlTWF0aERhdGE6OmNyZWF0ZShtX3Bs
YXRmb3JtRGF0YSk7Ci0gICAgICAgIGlmICghbV9tYXRoRGF0YS0+aGFzTWF0aERhdGEoKSkKLSAg
ICAgICAgICAgIG1fbWF0aERhdGEuY2xlYXIoKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1fbWF0aERh
dGEuZ2V0KCk7Ci19Ci0KLVNpbXBsZUZvbnREYXRhOjpEZXJpdmVkRm9udERhdGE6On5EZXJpdmVk
Rm9udERhdGEoKQotewotfQotCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250
RGF0YTo6Y3JlYXRlU2NhbGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVz
Y3JpcHRpb24sIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAotewotICAgIGlmIChpc1NWR0ZvbnQo
KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gcGxhdGZvcm1DcmVhdGVT
Y2FsZWRGb250RGF0YShmb250RGVzY3JpcHRpb24sIHNjYWxlRmFjdG9yKTsKLX0KLQotYm9vbCBT
aW1wbGVGb250RGF0YTo6YXBwbHlUcmFuc2Zvcm1zKEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywg
R2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgc2l6ZV90IGdseXBoQ291bnQsIFR5cGVzZXR0
aW5nRmVhdHVyZXMgdHlwZXNldHRpbmdGZWF0dXJlcykgY29uc3QKLXsKLSAgICAvLyBXZSBuZWVk
IHRvIGhhbmRsZSB0cmFuc2Zvcm1zIG9uIFNWRyBmb250cyBpbnRlcm5hbGx5LCBzaW5jZSB0aGV5
IGFyZSByZW5kZXJlZCBpbnRlcm5hbGx5LgotICAgIEFTU0VSVCghaXNTVkdGb250KCkpOwotI2lm
IFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01J
Tl9SRVFVSVJFRCA+IDEwODApCi0gICAgQ1RGb250VHJhbnNmb3JtT3B0aW9ucyBvcHRpb25zID0g
KHR5cGVzZXR0aW5nRmVhdHVyZXMgJiBLZXJuaW5nID8ga0NURm9udFRyYW5zZm9ybUFwcGx5UG9z
aXRpb25pbmcgOiAwKSB8ICh0eXBlc2V0dGluZ0ZlYXR1cmVzICYgTGlnYXR1cmVzID8ga0NURm9u
dFRyYW5zZm9ybUFwcGx5U2hhcGluZyA6IDApOwotICAgIHJldHVybiBDVEZvbnRUcmFuc2Zvcm1H
bHlwaHMobV9wbGF0Zm9ybURhdGEuY3RGb250KCksIGdseXBocywgcmVpbnRlcnByZXRfY2FzdDxD
R1NpemUqPihhZHZhbmNlcyksIGdseXBoQ291bnQsIG9wdGlvbnMpOwotI2Vsc2UKLSAgICBVTlVT
RURfUEFSQU0oZ2x5cGhzKTsKLSAgICBVTlVTRURfUEFSQU0oYWR2YW5jZXMpOwotICAgIFVOVVNF
RF9QQVJBTShnbHlwaENvdW50KTsKLSAgICBVTlVTRURfUEFSQU0odHlwZXNldHRpbmdGZWF0dXJl
cyk7Ci0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLS8vIEZvbnREYXRhcyBhcmUgbm90
IHJlZmNvdW50ZWQgdG8gYXZvaWQgY3ljbGVzLgotdHlwZWRlZiBIYXNoTWFwPHN0ZDo6cGFpcjxV
Q2hhcjMyLCB1bnNpZ25lZD4sIFNpbXBsZUZvbnREYXRhKj4gQ2hhcmFjdGVyRmFsbGJhY2tNYXA7
Ci10eXBlZGVmIEhhc2hNYXA8Y29uc3QgU2ltcGxlRm9udERhdGEqLCBDaGFyYWN0ZXJGYWxsYmFj
a01hcD4gU3lzdGVtRmFsbGJhY2tDYWNoZTsKLQotc3RhdGljIFN5c3RlbUZhbGxiYWNrQ2FjaGUm
IHN5c3RlbUZhbGxiYWNrQ2FjaGUoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTeXN0
ZW1GYWxsYmFja0NhY2hlPiBtYXA7Ci0gICAgcmV0dXJuIG1hcC5nZXQoKTsKLX0KLQotUmVmUHRy
PFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6c3lzdGVtRmFsbGJhY2tGb250RGF0YUZv
ckNoYXJhY3RlcihVQ2hhcjMyIGNoYXJhY3RlciwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNj
cmlwdGlvbiwgYm9vbCBpc0ZvclBsYXRmb3JtRm9udCkgY29uc3QKLXsKLSAgICBhdXRvIGZvbnRB
ZGRSZXN1bHQgPSBzeXN0ZW1GYWxsYmFja0NhY2hlKCkuYWRkKHRoaXMsIENoYXJhY3RlckZhbGxi
YWNrTWFwKCkpOwotCi0gICAgYXV0byBrZXkgPSBzdGQ6Om1ha2VfcGFpcihjaGFyYWN0ZXIsIGlz
Rm9yUGxhdGZvcm1Gb250KTsKLSAgICBhdXRvIGNoYXJhY3RlckFkZFJlc3VsdCA9IGZvbnRBZGRS
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFkZChrZXksIG51bGxwdHIpOwotCi0gICAgU2ltcGxlRm9u
dERhdGEqJiBmYWxsYmFja0ZvbnREYXRhID0gY2hhcmFjdGVyQWRkUmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZTsKLQotICAgIGlmICghZmFsbGJhY2tGb250RGF0YSkgewotICAgICAgICBVQ2hhciBjb2Rl
VW5pdHNbMl07Ci0gICAgICAgIGludCBjb2RlVW5pdHNMZW5ndGg7Ci0gICAgICAgIGlmIChVX0lT
X0JNUChjaGFyYWN0ZXIpKSB7Ci0gICAgICAgICAgICBjb2RlVW5pdHNbMF0gPSBGb250Q2FzY2Fk
ZTo6bm9ybWFsaXplU3BhY2VzKGNoYXJhY3Rlcik7Ci0gICAgICAgICAgICBjb2RlVW5pdHNMZW5n
dGggPSAxOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29kZVVuaXRzWzBdID0gVTE2
X0xFQUQoY2hhcmFjdGVyKTsKLSAgICAgICAgICAgIGNvZGVVbml0c1sxXSA9IFUxNl9UUkFJTChj
aGFyYWN0ZXIpOwotICAgICAgICAgICAgY29kZVVuaXRzTGVuZ3RoID0gMjsKLSAgICAgICAgfQot
Ci0gICAgICAgIGZhbGxiYWNrRm9udERhdGEgPSBmb250Q2FjaGUoKS5zeXN0ZW1GYWxsYmFja0Zv
ckNoYXJhY3RlcnMoZGVzY3JpcHRpb24sIHRoaXMsIGlzRm9yUGxhdGZvcm1Gb250LCBjb2RlVW5p
dHMsIGNvZGVVbml0c0xlbmd0aCkuZ2V0KCk7Ci0gICAgICAgIGlmIChmYWxsYmFja0ZvbnREYXRh
KQotICAgICAgICAgICAgZmFsbGJhY2tGb250RGF0YS0+bV9pc1VzZWRJblN5c3RlbUZhbGxiYWNr
Q2FjaGUgPSB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxsYmFja0ZvbnREYXRhOwotfQot
Ci12b2lkIFNpbXBsZUZvbnREYXRhOjpyZW1vdmVGcm9tU3lzdGVtRmFsbGJhY2tDYWNoZSgpCi17
Ci0gICAgc3lzdGVtRmFsbGJhY2tDYWNoZSgpLnJlbW92ZSh0aGlzKTsKLQotICAgIGlmICghbV9p
c1VzZWRJblN5c3RlbUZhbGxiYWNrQ2FjaGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZvciAo
YXV0byYgY2hhcmFjdGVyTWFwIDogc3lzdGVtRmFsbGJhY2tDYWNoZSgpLnZhbHVlcygpKSB7Ci0g
ICAgICAgIFZlY3RvcjxzdGQ6OnBhaXI8VUNoYXIzMiwgdW5zaWduZWQ+LCA1MTI+IHRvUmVtb3Zl
OwotICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogY2hhcmFjdGVyTWFwKSB7Ci0gICAgICAgICAg
ICBpZiAoZW50cnkudmFsdWUgPT0gdGhpcykKLSAgICAgICAgICAgICAgICB0b1JlbW92ZS5hcHBl
bmQoZW50cnkua2V5KTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKGF1dG8mIGtleSA6IHRvUmVt
b3ZlKQotICAgICAgICAgICAgY2hhcmFjdGVyTWFwLnJlbW92ZShrZXkpOwotICAgIH0KLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvU2ltcGxlRm9udERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDM2OSArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIGlu
dGVybmFsIGZvbnQgaW1wbGVtZW50YXRpb24uCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAy
MDA4LCAyMDEwLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAwNy0yMDA4IFRvcmNoIE1vYmlsZSwgSW5jLgotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
Ci0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0g
KgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0g
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBTaW1wbGVG
b250RGF0YV9oCi0jZGVmaW5lIFNpbXBsZUZvbnREYXRhX2gKLQotI2luY2x1ZGUgIkZvbnRCYXNl
bGluZS5oIgotI2luY2x1ZGUgIkZvbnRNZXRyaWNzLmgiCi0jaW5jbHVkZSAiRm9udFBsYXRmb3Jt
RGF0YS5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgi
Ci0jaW5jbHVkZSAiR2x5cGhNZXRyaWNzTWFwLmgiCi0jaW5jbHVkZSAiR2x5cGhQYWdlLmgiCi0j
aW5jbHVkZSAiT3BlblR5cGVNYXRoRGF0YS5oIgotI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNB
TCkKLSNpbmNsdWRlICJPcGVuVHlwZVZlcnRpY2FsRGF0YS5oIgotI2VuZGlmCi0jaW5jbHVkZSAi
VHlwZXNldHRpbmdGZWF0dXJlcy5oIgotI2luY2x1ZGUgPHd0Zi9UeXBlQ2FzdHMuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSNpbmNs
dWRlICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCi0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5o
PgotI2VuZGlmCi0KLSNpZiBQTEFURk9STShXSU4pCi0jaW5jbHVkZSA8dXNwMTAuaD4KLSNlbmRp
ZgotCi0jaWYgVVNFKENBSVJPKQotI2luY2x1ZGUgPGNhaXJvLmg+Ci0jZW5kaWYKLQotI2lmIFVT
RShDRykKLSNpbmNsdWRlIDxXZWJDb3JlL0NvcmVHcmFwaGljc1NQSS5oPgotI2VuZGlmCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgR2x5cGhQYWdlOwotY2xhc3MgRm9udERlc2NyaXB0
aW9uOwotY2xhc3MgU2hhcmVkQnVmZmVyOwotc3RydWN0IEdseXBoRGF0YTsKLXN0cnVjdCBXaWR0
aEl0ZXJhdG9yOwotCi1lbnVtIEZvbnREYXRhVmFyaWFudCB7IEF1dG9WYXJpYW50LCBOb3JtYWxW
YXJpYW50LCBTbWFsbENhcHNWYXJpYW50LCBFbXBoYXNpc01hcmtWYXJpYW50LCBCcm9rZW5JZGVv
Z3JhcGhWYXJpYW50IH07Ci1lbnVtIFBpdGNoIHsgVW5rbm93blBpdGNoLCBGaXhlZFBpdGNoLCBW
YXJpYWJsZVBpdGNoIH07Ci0KLWNsYXNzIFNpbXBsZUZvbnREYXRhIDogcHVibGljIFJlZkNvdW50
ZWQ8U2ltcGxlRm9udERhdGE+IHsKLXB1YmxpYzoKLSAgICBjbGFzcyBTVkdEYXRhIHsKLSAgICAg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgcHVibGljOgotICAgICAgICB2aXJ0dWFs
IH5TVkdEYXRhKCkgeyB9Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVGb250RGF0
YShTaW1wbGVGb250RGF0YSosIGZsb2F0IGZvbnRTaXplKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwg
ZmxvYXQgd2lkdGhGb3JTVkdHbHlwaChHbHlwaCwgZmxvYXQgZm9udFNpemUpIGNvbnN0ID0gMDsK
LSAgICAgICAgdmlydHVhbCBib29sIGZpbGxTVkdHbHlwaFBhZ2UoR2x5cGhQYWdlKiwgdW5zaWdu
ZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZl
ckxlbmd0aCwgY29uc3QgU2ltcGxlRm9udERhdGEqKSBjb25zdCA9IDA7Ci0gICAgfTsKLQotICAg
IC8vIFVzZWQgdG8gY3JlYXRlIHBsYXRmb3JtIGZvbnRzLgotICAgIHN0YXRpYyBSZWY8U2ltcGxl
Rm9udERhdGE+IGNyZWF0ZShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEsIGJv
b2wgaXNDdXN0b21Gb250ID0gZmFsc2UsIGJvb2wgaXNMb2FkaW5nID0gZmFsc2UsIGJvb2wgaXNU
ZXh0T3JpZW50YXRpb25GYWxsYmFjayA9IGZhbHNlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgU2ltcGxlRm9udERhdGEocGxhdGZvcm1EYXRhLCBpc0N1c3RvbUZvbnQsIGlz
TG9hZGluZywgaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaykpOwotICAgIH0KLQotICAgIC8vIFVz
ZWQgdG8gY3JlYXRlIFNWRyBGb250cy4KLSAgICBzdGF0aWMgUmVmPFNpbXBsZUZvbnREYXRhPiBj
cmVhdGUoc3RkOjp1bmlxdWVfcHRyPFNWR0RhdGE+IHN2Z0RhdGEsIGZsb2F0IGZvbnRTaXplLCBi
b29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgU2ltcGxlRm9udERhdGEoV1RGOjptb3ZlKHN2Z0RhdGEpLCBm
b250U2l6ZSwgc3ludGhldGljQm9sZCwgc3ludGhldGljSXRhbGljKSk7Ci0gICAgfQotCi0gICAg
flNpbXBsZUZvbnREYXRhKCk7Ci0KLSAgICBzdGF0aWMgY29uc3QgU2ltcGxlRm9udERhdGEqIHN5
c3RlbUZhbGxiYWNrKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBTaW1wbGVGb250
RGF0YSo+KC0xKTsgfQotCi0gICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRh
KCkgY29uc3QgeyByZXR1cm4gbV9wbGF0Zm9ybURhdGE7IH0KLSAgICBjb25zdCBPcGVuVHlwZU1h
dGhEYXRhKiBtYXRoRGF0YSgpIGNvbnN0OwotI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkK
LSAgICBjb25zdCBPcGVuVHlwZVZlcnRpY2FsRGF0YSogdmVydGljYWxEYXRhKCkgY29uc3QgeyBy
ZXR1cm4gbV92ZXJ0aWNhbERhdGEuZ2V0KCk7IH0KLSNlbmRpZgotCi0gICAgUGFzc1JlZlB0cjxT
aW1wbGVGb250RGF0YT4gc21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJikg
Y29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gZW1waGFzaXNNYXJrRm9udERh
dGEoY29uc3QgRm9udERlc2NyaXB0aW9uJikgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxTaW1wbGVG
b250RGF0YT4gYnJva2VuSWRlb2dyYXBoRm9udERhdGEoKSBjb25zdDsKLSAgICBQYXNzUmVmUHRy
PFNpbXBsZUZvbnREYXRhPiBub25TeW50aGV0aWNJdGFsaWNGb250RGF0YSgpIGNvbnN0OwotCi0g
ICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gdmFyaWFudEZvbnREYXRhKGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIEZvbnREYXRhVmFyaWFudCB2YXJpYW50KSBjb25zdAot
ICAgIHsKLSAgICAgICAgc3dpdGNoICh2YXJpYW50KSB7Ci0gICAgICAgIGNhc2UgU21hbGxDYXBz
VmFyaWFudDoKLSAgICAgICAgICAgIHJldHVybiBzbWFsbENhcHNGb250RGF0YShkZXNjcmlwdGlv
bik7Ci0gICAgICAgIGNhc2UgRW1waGFzaXNNYXJrVmFyaWFudDoKLSAgICAgICAgICAgIHJldHVy
biBlbXBoYXNpc01hcmtGb250RGF0YShkZXNjcmlwdGlvbik7Ci0gICAgICAgIGNhc2UgQnJva2Vu
SWRlb2dyYXBoVmFyaWFudDoKLSAgICAgICAgICAgIHJldHVybiBicm9rZW5JZGVvZ3JhcGhGb250
RGF0YSgpOwotICAgICAgICBjYXNlIEF1dG9WYXJpYW50OgotICAgICAgICBjYXNlIE5vcm1hbFZh
cmlhbnQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8U2ltcGxlRm9udERhdGEqPih0
aGlzKTsKLSAgICB9Ci0KLSAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiB2ZXJ0aWNhbFJp
Z2h0T3JpZW50YXRpb25Gb250RGF0YSgpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8U2ltcGxlRm9u
dERhdGE+IHVwcmlnaHRPcmllbnRhdGlvbkZvbnREYXRhKCkgY29uc3Q7Ci0KLSAgICBib29sIGhh
c1ZlcnRpY2FsR2x5cGhzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNWZXJ0aWNhbEdseXBoczsgfQot
ICAgIGJvb2wgaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaygpIGNvbnN0IHsgcmV0dXJuIG1faXNU
ZXh0T3JpZW50YXRpb25GYWxsYmFjazsgfQotCi0gICAgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNz
KCkgeyByZXR1cm4gbV9mb250TWV0cmljczsgfQotICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBmb250
TWV0cmljcygpIGNvbnN0IHsgcmV0dXJuIG1fZm9udE1ldHJpY3M7IH0KLSAgICBmbG9hdCBzaXpl
UGVyVW5pdCgpIGNvbnN0IHsgcmV0dXJuIHBsYXRmb3JtRGF0YSgpLnNpemUoKSAvIChmb250TWV0
cmljcygpLnVuaXRzUGVyRW0oKSA/IGZvbnRNZXRyaWNzKCkudW5pdHNQZXJFbSgpIDogMSk7IH0K
LQotICAgIGZsb2F0IG1heENoYXJXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4Q2hhcldpZHRo
OyB9Ci0gICAgdm9pZCBzZXRNYXhDaGFyV2lkdGgoZmxvYXQgbWF4Q2hhcldpZHRoKSB7IG1fbWF4
Q2hhcldpZHRoID0gbWF4Q2hhcldpZHRoOyB9Ci0KLSAgICBmbG9hdCBhdmdDaGFyV2lkdGgoKSBj
b25zdCB7IHJldHVybiBtX2F2Z0NoYXJXaWR0aDsgfQotICAgIHZvaWQgc2V0QXZnQ2hhcldpZHRo
KGZsb2F0IGF2Z0NoYXJXaWR0aCkgeyBtX2F2Z0NoYXJXaWR0aCA9IGF2Z0NoYXJXaWR0aDsgfQot
Ci0gICAgRmxvYXRSZWN0IGJvdW5kc0ZvckdseXBoKEdseXBoKSBjb25zdDsKLSAgICBmbG9hdCB3
aWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdDsKLSAgICBGbG9hdFJlY3QgcGxhdGZvcm1C
b3VuZHNGb3JHbHlwaChHbHlwaCkgY29uc3Q7Ci0gICAgZmxvYXQgcGxhdGZvcm1XaWR0aEZvckds
eXBoKEdseXBoKSBjb25zdDsKLQotICAgIGZsb2F0IHNwYWNlV2lkdGgoKSBjb25zdCB7IHJldHVy
biBtX3NwYWNlV2lkdGg7IH0KLSAgICBmbG9hdCBhZGp1c3RlZFNwYWNlV2lkdGgoKSBjb25zdCB7
IHJldHVybiBtX2FkanVzdGVkU3BhY2VXaWR0aDsgfQotICAgIHZvaWQgc2V0U3BhY2VXaWR0aHMo
ZmxvYXQgc3BhY2VXaWR0aCkKLSAgICB7Ci0gICAgICAgIG1fc3BhY2VXaWR0aCA9IHNwYWNlV2lk
dGg7Ci0gICAgICAgIG1fYWRqdXN0ZWRTcGFjZVdpZHRoID0gc3BhY2VXaWR0aDsKLSAgICB9Ci0K
LSNpZiBVU0UoQ0cpIHx8IFVTRShDQUlSTykKLSAgICBmbG9hdCBzeW50aGV0aWNCb2xkT2Zmc2V0
KCkgY29uc3QgeyByZXR1cm4gbV9zeW50aGV0aWNCb2xkT2Zmc2V0OyB9Ci0jZW5kaWYKLQotICAg
IEdseXBoIHNwYWNlR2x5cGgoKSBjb25zdCB7IHJldHVybiBtX3NwYWNlR2x5cGg7IH0KLSAgICB2
b2lkIHNldFNwYWNlR2x5cGgoR2x5cGggc3BhY2VHbHlwaCkgeyBtX3NwYWNlR2x5cGggPSBzcGFj
ZUdseXBoOyB9Ci0gICAgR2x5cGggemVyb1dpZHRoU3BhY2VHbHlwaCgpIGNvbnN0IHsgcmV0dXJu
IG1femVyb1dpZHRoU3BhY2VHbHlwaDsgfQotICAgIHZvaWQgc2V0WmVyb1dpZHRoU3BhY2VHbHlw
aChHbHlwaCBzcGFjZUdseXBoKSB7IG1femVyb1dpZHRoU3BhY2VHbHlwaCA9IHNwYWNlR2x5cGg7
IH0KLSAgICBib29sIGlzWmVyb1dpZHRoU3BhY2VHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QgeyBy
ZXR1cm4gZ2x5cGggPT0gbV96ZXJvV2lkdGhTcGFjZUdseXBoICYmIGdseXBoOyB9Ci0gICAgR2x5
cGggemVyb0dseXBoKCkgY29uc3QgeyByZXR1cm4gbV96ZXJvR2x5cGg7IH0KLSAgICB2b2lkIHNl
dFplcm9HbHlwaChHbHlwaCB6ZXJvR2x5cGgpIHsgbV96ZXJvR2x5cGggPSB6ZXJvR2x5cGg7IH0K
LQotICAgIEdseXBoRGF0YSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMikgY29uc3Q7Ci0g
ICAgR2x5cGggZ2x5cGhGb3JDaGFyYWN0ZXIoVUNoYXIzMikgY29uc3Q7Ci0KLSAgICBSZWZQdHI8
U2ltcGxlRm9udERhdGE+IHN5c3RlbUZhbGxiYWNrRm9udERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIz
MiwgY29uc3QgRm9udERlc2NyaXB0aW9uJiwgYm9vbCBpc0ZvclBsYXRmb3JtRm9udCkgY29uc3Q7
Ci0KLSAgICBjb25zdCBHbHlwaFBhZ2UqIGdseXBoUGFnZSh1bnNpZ25lZCBwYWdlTnVtYmVyKSBj
b25zdDsKLQotICAgIHZvaWQgZGV0ZXJtaW5lUGl0Y2goKTsKLSAgICBQaXRjaCBwaXRjaCgpIGNv
bnN0IHsgcmV0dXJuIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPyBGaXhlZFBpdGNoIDogVmFyaWFibGVQ
aXRjaDsgfQotCi0gICAgY29uc3QgU1ZHRGF0YSogc3ZnRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1f
c3ZnRGF0YS5nZXQoKTsgfQotICAgIGJvb2wgaXNTVkdGb250KCkgY29uc3QgeyByZXR1cm4gISFt
X3N2Z0RhdGE7IH0KLQotICAgIGJvb2wgaXNDdXN0b21Gb250KCkgY29uc3QgeyByZXR1cm4gbV9p
c0N1c3RvbUZvbnQ7IH0KLSAgICBib29sIGlzTG9hZGluZygpIGNvbnN0IHsgcmV0dXJuIG1faXNM
b2FkaW5nOyB9Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgU3RyaW5nIGRlc2NyaXB0aW9uKCkgY29u
c3Q7Ci0jZW5kaWYKLQotI2lmIFVTRShBUFBLSVQpCi0gICAgY29uc3QgU2ltcGxlRm9udERhdGEq
IGNvbXBvc2l0ZUZvbnRSZWZlcmVuY2VGb250RGF0YShOU0ZvbnQgKmtleSkgY29uc3Q7Ci0gICAg
TlNGb250KiBnZXROU0ZvbnQoKSBjb25zdCB7IHJldHVybiBtX3BsYXRmb3JtRGF0YS5uc0ZvbnQo
KTsgfQotI2VuZGlmCi0KLSNpZiBQTEFURk9STShJT1MpCi0gICAgQ1RGb250UmVmIGdldENURm9u
dCgpIGNvbnN0IHsgcmV0dXJuIG1fcGxhdGZvcm1EYXRhLmZvbnQoKTsgfQotICAgIGJvb2wgc2hv
dWxkTm90QmVVc2VkRm9yQXJhYmljKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGROb3RCZVVzZWRG
b3JBcmFiaWM7IH07Ci0jZW5kaWYKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBDRkRpY3Rpb25h
cnlSZWYgZ2V0Q0ZTdHJpbmdBdHRyaWJ1dGVzKFR5cGVzZXR0aW5nRmVhdHVyZXMsIEZvbnRPcmll
bnRhdGlvbikgY29uc3Q7Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBVU0UoSEFS
RkJVWlopCi0gICAgYm9vbCBjYW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjb25z
dCBVQ2hhciosIHNpemVfdCkgY29uc3Q7Ci0jZW5kaWYKLQotICAgIGJvb2wgYXBwbHlUcmFuc2Zv
cm1zKEdseXBoQnVmZmVyR2x5cGgqLCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCBzaXplX3QgZ2x5cGhD
b3VudCwgVHlwZXNldHRpbmdGZWF0dXJlcykgY29uc3Q7Ci0KLSNpZiBQTEFURk9STShXSU4pCi0g
ICAgYm9vbCBpc1N5c3RlbUZvbnQoKSBjb25zdCB7IHJldHVybiBtX2lzU3lzdGVtRm9udDsgfQot
ICAgIFNDUklQVF9GT05UUFJPUEVSVElFUyogc2NyaXB0Rm9udFByb3BlcnRpZXMoKSBjb25zdDsK
LSAgICBTQ1JJUFRfQ0FDSEUqIHNjcmlwdENhY2hlKCkgY29uc3QgeyByZXR1cm4gJm1fc2NyaXB0
Q2FjaGU7IH0KLSAgICBzdGF0aWMgdm9pZCBzZXRTaG91bGRBcHBseU1hY0FzY2VudEhhY2soYm9v
bCk7Ci0gICAgc3RhdGljIGJvb2wgc2hvdWxkQXBwbHlNYWNBc2NlbnRIYWNrKCk7Ci0gICAgc3Rh
dGljIGZsb2F0IGFzY2VudENvbnNpZGVyaW5nTWFjQXNjZW50SGFjayhjb25zdCBXQ0hBUiosIGZs
b2F0IGFzY2VudCwgZmxvYXQgZGVzY2VudCk7Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBTaW1w
bGVGb250RGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiwgYm9vbCBpc0N1c3RvbUZvbnQgPSBm
YWxzZSwgYm9vbCBpc0xvYWRpbmcgPSBmYWxzZSwgYm9vbCBpc1RleHRPcmllbnRhdGlvbkZhbGxi
YWNrID0gZmFsc2UpOwotCi0gICAgU2ltcGxlRm9udERhdGEoc3RkOjp1bmlxdWVfcHRyPFNWR0Rh
dGE+LCBmbG9hdCBmb250U2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0
YWxpYyk7Ci0KLSAgICB2b2lkIHBsYXRmb3JtSW5pdCgpOwotICAgIHZvaWQgcGxhdGZvcm1HbHlw
aEluaXQoKTsKLSAgICB2b2lkIHBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpOwotICAgIHZvaWQgcGxh
dGZvcm1EZXN0cm95KCk7Ci0KLSAgICB2b2lkIGluaXRDaGFyV2lkdGhzKCk7Ci0KLSAgICBQYXNz
UmVmUHRyPFNpbXBsZUZvbnREYXRhPiBjcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGb250RGVz
Y3JpcHRpb24mLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxTaW1w
bGVGb250RGF0YT4gcGxhdGZvcm1DcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGb250RGVzY3Jp
cHRpb24mLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3Q7Ci0KLSAgICB2b2lkIHJlbW92ZUZyb21T
eXN0ZW1GYWxsYmFja0NhY2hlKCk7Ci0KLSNpZiBQTEFURk9STShXSU4pCi0gICAgdm9pZCBpbml0
R0RJRm9udCgpOwotICAgIHZvaWQgcGxhdGZvcm1Db21tb25EZXN0cm95KCk7Ci0gICAgRmxvYXRS
ZWN0IGJvdW5kc0ZvckdESUdseXBoKEdseXBoIGdseXBoKSBjb25zdDsKLSAgICBmbG9hdCB3aWR0
aEZvckdESUdseXBoKEdseXBoIGdseXBoKSBjb25zdDsKLSNlbmRpZgotCi0jaWYgVVNFKENHKQot
ICAgIGJvb2wgY2FuVXNlRmFzdEdseXBoQWR2YW5jZUdldHRlcihHbHlwaCBnbHlwaCwgQ0dTaXpl
JiBhZHZhbmNlLCBib29sJiBwb3B1bGF0ZWRBZHZhbmNlKSBjb25zdDsKLSAgICBDR0ZvbnRSZW5k
ZXJpbmdTdHlsZSByZW5kZXJpbmdTdHlsZSgpIGNvbnN0OwotICAgIGJvb2wgYWR2YW5jZUZvckNv
bG9yQml0bWFwRm9udChHbHlwaCwgQ0dTaXplJiByZXN1bHQpIGNvbnN0OyAvLyBSZXR1cm5zIHRy
dWUgaWYgdGhlIGZvbnQgaXMgYSBjb2xvciBiaXRtYXAgZm9udAotI2VuZGlmCi0KLSAgICBGb250
TWV0cmljcyBtX2ZvbnRNZXRyaWNzOwotICAgIGZsb2F0IG1fbWF4Q2hhcldpZHRoOwotICAgIGZs
b2F0IG1fYXZnQ2hhcldpZHRoOwotCi0gICAgRm9udFBsYXRmb3JtRGF0YSBtX3BsYXRmb3JtRGF0
YTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U1ZHRGF0YT4gbV9zdmdEYXRhOwotCi0gICAgbXV0YWJs
ZSBSZWZQdHI8R2x5cGhQYWdlPiBtX2dseXBoUGFnZVplcm87Ci0gICAgbXV0YWJsZSBIYXNoTWFw
PHVuc2lnbmVkLCBSZWZQdHI8R2x5cGhQYWdlPj4gbV9nbHlwaFBhZ2VzOwotICAgIG11dGFibGUg
c3RkOjp1bmlxdWVfcHRyPEdseXBoTWV0cmljc01hcDxGbG9hdFJlY3Q+PiBtX2dseXBoVG9Cb3Vu
ZHNNYXA7Ci0gICAgbXV0YWJsZSBHbHlwaE1ldHJpY3NNYXA8ZmxvYXQ+IG1fZ2x5cGhUb1dpZHRo
TWFwOwotCi0gICAgYm9vbCBtX3RyZWF0QXNGaXhlZFBpdGNoOwotICAgIGJvb2wgbV9pc0N1c3Rv
bUZvbnQ7ICAvLyBXaGV0aGVyIG9yIG5vdCB3ZSBhcmUgY3VzdG9tIGZvbnQgbG9hZGVkIHZpYSBA
Zm9udC1mYWNlCi0gICAgYm9vbCBtX2lzTG9hZGluZzsgLy8gV2hldGhlciBvciBub3QgdGhpcyBj
dXN0b20gZm9udCBpcyBzdGlsbCBpbiB0aGUgYWN0IG9mIGxvYWRpbmcuCi0KLSAgICBib29sIG1f
aXNUZXh0T3JpZW50YXRpb25GYWxsYmFjazsKLSAgICBib29sIG1faXNCcm9rZW5JZGVvZ3JhcGhG
YWxsYmFjazsKLQotICAgIGJvb2wgbV9pc1VzZWRJblN5c3RlbUZhbGxiYWNrQ2FjaGUgeyBmYWxz
ZSB9OwotCi0gICAgbXV0YWJsZSBSZWZQdHI8T3BlblR5cGVNYXRoRGF0YT4gbV9tYXRoRGF0YTsK
LSNpZiBFTkFCTEUoT1BFTlRZUEVfVkVSVElDQUwpCi0gICAgUmVmUHRyPE9wZW5UeXBlVmVydGlj
YWxEYXRhPiBtX3ZlcnRpY2FsRGF0YTsKLSNlbmRpZgotICAgIGJvb2wgbV9oYXNWZXJ0aWNhbEds
eXBoczsKLQotICAgIEdseXBoIG1fc3BhY2VHbHlwaDsKLSAgICBmbG9hdCBtX3NwYWNlV2lkdGg7
Ci0gICAgR2x5cGggbV96ZXJvR2x5cGg7Ci0gICAgZmxvYXQgbV9hZGp1c3RlZFNwYWNlV2lkdGg7
Ci0KLSAgICBHbHlwaCBtX3plcm9XaWR0aFNwYWNlR2x5cGg7Ci0KLSAgICBzdHJ1Y3QgRGVyaXZl
ZEZvbnREYXRhIHsKLSAgICAgICAgZXhwbGljaXQgRGVyaXZlZEZvbnREYXRhKGJvb2wgY3VzdG9t
KQotICAgICAgICAgICAgOiBmb3JDdXN0b21Gb250KGN1c3RvbSkKLSAgICAgICAgewotICAgICAg
ICB9Ci0gICAgICAgIH5EZXJpdmVkRm9udERhdGEoKTsKLQotICAgICAgICBib29sIGZvckN1c3Rv
bUZvbnQ7Ci0gICAgICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gc21hbGxDYXBzOwotICAgICAg
ICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IGVtcGhhc2lzTWFyazsKLSAgICAgICAgUmVmUHRyPFNp
bXBsZUZvbnREYXRhPiBicm9rZW5JZGVvZ3JhcGg7Ci0gICAgICAgIFJlZlB0cjxTaW1wbGVGb250
RGF0YT4gdmVydGljYWxSaWdodE9yaWVudGF0aW9uOwotICAgICAgICBSZWZQdHI8U2ltcGxlRm9u
dERhdGE+IHVwcmlnaHRPcmllbnRhdGlvbjsKLSAgICAgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRh
PiBub25TeW50aGV0aWNJdGFsaWM7Ci0jaWYgVVNFKEFQUEtJVCkKLSAgICAgICAgSGFzaE1hcDxO
U0ZvbnQqLCBSZWZQdHI8U2ltcGxlRm9udERhdGE+PiBjb21wb3NpdGVGb250UmVmZXJlbmNlczsK
LSNlbmRpZgotICAgIH07Ci0KLSAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxEZXJpdmVkRm9u
dERhdGE+IG1fZGVyaXZlZEZvbnREYXRhOwotCi0jaWYgVVNFKENHKSB8fCBVU0UoQ0FJUk8pCi0g
ICAgZmxvYXQgbV9zeW50aGV0aWNCb2xkT2Zmc2V0OwotI2VuZGlmCi0KLSNpZiBQTEFURk9STShD
T0NPQSkKLSAgICBtdXRhYmxlIEhhc2hNYXA8dW5zaWduZWQsIFJldGFpblB0cjxDRkRpY3Rpb25h
cnlSZWY+PiBtX0NGU3RyaW5nQXR0cmlidXRlczsKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oQ09D
T0EpIHx8IFVTRShIQVJGQlVaWikKLSAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxIYXNoTWFw
PFN0cmluZywgYm9vbD4+IG1fY29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2VTdXBwb3J0OwotI2Vu
ZGlmCi0KLSNpZiBQTEFURk9STShXSU4pCi0gICAgYm9vbCBtX2lzU3lzdGVtRm9udDsKLSAgICBt
dXRhYmxlIFNDUklQVF9DQUNIRSBtX3NjcmlwdENhY2hlOwotICAgIG11dGFibGUgU0NSSVBUX0ZP
TlRQUk9QRVJUSUVTKiBtX3NjcmlwdEZvbnRQcm9wZXJ0aWVzOwotI2VuZGlmCi0jaWYgUExBVEZP
Uk0oSU9TKQotICAgIGJvb2wgbV9zaG91bGROb3RCZVVzZWRGb3JBcmFiaWM7Ci0jZW5kaWYKLX07
Ci0KLUFMV0FZU19JTkxJTkUgRmxvYXRSZWN0IFNpbXBsZUZvbnREYXRhOjpib3VuZHNGb3JHbHlw
aChHbHlwaCBnbHlwaCkgY29uc3QKLXsKLSAgICBpZiAoaXNaZXJvV2lkdGhTcGFjZUdseXBoKGds
eXBoKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwotCi0gICAgRmxvYXRSZWN0IGJvdW5k
czsKLSAgICBpZiAobV9nbHlwaFRvQm91bmRzTWFwKSB7Ci0gICAgICAgIGJvdW5kcyA9IG1fZ2x5
cGhUb0JvdW5kc01hcC0+bWV0cmljc0ZvckdseXBoKGdseXBoKTsKLSAgICAgICAgaWYgKGJvdW5k
cy53aWR0aCgpICE9IGNHbHlwaFNpemVVbmtub3duKQotICAgICAgICAgICAgcmV0dXJuIGJvdW5k
czsKLSAgICB9Ci0KLSAgICBib3VuZHMgPSBwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKGdseXBoKTsK
LSAgICBpZiAoIW1fZ2x5cGhUb0JvdW5kc01hcCkKLSAgICAgICAgbV9nbHlwaFRvQm91bmRzTWFw
ID0gc3RkOjptYWtlX3VuaXF1ZTxHbHlwaE1ldHJpY3NNYXA8RmxvYXRSZWN0Pj4oKTsKLSAgICBt
X2dseXBoVG9Cb3VuZHNNYXAtPnNldE1ldHJpY3NGb3JHbHlwaChnbHlwaCwgYm91bmRzKTsKLSAg
ICByZXR1cm4gYm91bmRzOwotfQotCi1BTFdBWVNfSU5MSU5FIGZsb2F0IFNpbXBsZUZvbnREYXRh
Ojp3aWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAotewotICAgIGlmIChpc1plcm9XaWR0
aFNwYWNlR2x5cGgoZ2x5cGgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGZsb2F0IHdpZHRo
ID0gbV9nbHlwaFRvV2lkdGhNYXAubWV0cmljc0ZvckdseXBoKGdseXBoKTsKLSAgICBpZiAod2lk
dGggIT0gY0dseXBoU2l6ZVVua25vd24pCi0gICAgICAgIHJldHVybiB3aWR0aDsKLQotICAgIGlm
IChpc1NWR0ZvbnQoKSkKLSAgICAgICAgd2lkdGggPSBtX3N2Z0RhdGEtPndpZHRoRm9yU1ZHR2x5
cGgoZ2x5cGgsIG1fcGxhdGZvcm1EYXRhLnNpemUoKSk7Ci0jaWYgRU5BQkxFKE9QRU5UWVBFX1ZF
UlRJQ0FMKQotICAgIGVsc2UgaWYgKG1fdmVydGljYWxEYXRhKQotI2lmIFVTRShDRykgfHwgVVNF
KENBSVJPKQotICAgICAgICB3aWR0aCA9IG1fdmVydGljYWxEYXRhLT5hZHZhbmNlSGVpZ2h0KHRo
aXMsIGdseXBoKSArIG1fc3ludGhldGljQm9sZE9mZnNldDsKLSNlbHNlCi0gICAgICAgIHdpZHRo
ID0gbV92ZXJ0aWNhbERhdGEtPmFkdmFuY2VIZWlnaHQodGhpcywgZ2x5cGgpOwotI2VuZGlmCi0j
ZW5kaWYKLSAgICBlbHNlCi0gICAgICAgIHdpZHRoID0gcGxhdGZvcm1XaWR0aEZvckdseXBoKGds
eXBoKTsKLQotICAgIG1fZ2x5cGhUb1dpZHRoTWFwLnNldE1ldHJpY3NGb3JHbHlwaChnbHlwaCwg
d2lkdGgpOwotICAgIHJldHVybiB3aWR0aDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYgLy8gU2ltcGxlRm9udERhdGFfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvVGV4dFJ1bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1RleHRSdW4uaAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICsz
Niw3IEBAIGNsYXNzIEZvbnRDYXNjYWRlOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogY2xhc3Mg
R2x5cGhCdWZmZXI7CiBjbGFzcyBHbHlwaFRvUGF0aFRyYW5zbGF0b3I7Ci1jbGFzcyBTaW1wbGVG
b250RGF0YTsKK2NsYXNzIEZvbnQ7CiAKIHN0cnVjdCBHbHlwaERhdGE7CiBzdHJ1Y3QgV2lkdGhJ
dGVyYXRvcjsKQEAgLTE5OCwxMCArMTk4LDEwIEBAIHB1YmxpYzoKIAogI2lmIEVOQUJMRShTVkdf
Rk9OVFMpCiAgICAgICAgIHZpcnR1YWwgR2x5cGhEYXRhIGdseXBoRGF0YUZvckNoYXJhY3Rlcihj
b25zdCBGb250Q2FzY2FkZSYsIFdpZHRoSXRlcmF0b3ImLCBVQ2hhcjMyIGNoYXJhY3RlciwgYm9v
bCBtaXJyb3IsIGludCBjdXJyZW50Q2hhcmFjdGVyLCB1bnNpZ25lZCYgYWR2YW5jZUxlbmd0aCwg
U3RyaW5nJiBub3JtYWxpemVkU3BhY2VzU3RyaW5nQ2FjaGUpID0gMDsKLSAgICAgICAgdmlydHVh
bCB2b2lkIGRyYXdTVkdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgU2ltcGxlRm9udERh
dGEqLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBmcm9tLCBpbnQgdG8sIGNvbnN0IEZsb2F0UG9p
bnQmKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkcmF3U1ZHR2x5cGhzKEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IEZvbnQqLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBmcm9tLCBp
bnQgdG8sIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1YWwgZmxv
YXQgZmxvYXRXaWR0aFVzaW5nU1ZHRm9udChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRS
dW4mLCBpbnQmIGNoYXJzQ29uc3VtZWQsIFN0cmluZyYgZ2x5cGhOYW1lKSBjb25zdCA9IDA7Ci0g
ICAgICAgIHZpcnR1YWwgYm9vbCBhcHBseVNWR0tlcm5pbmcoY29uc3QgU2ltcGxlRm9udERhdGEq
LCBXaWR0aEl0ZXJhdG9yJiwgR2x5cGhCdWZmZXIqLCBpbnQgZnJvbSkgY29uc3QgPSAwOwotICAg
ICAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxHbHlwaFRvUGF0aFRyYW5zbGF0b3I+IGNyZWF0
ZUdseXBoVG9QYXRoVHJhbnNsYXRvcihjb25zdCBTaW1wbGVGb250RGF0YSYsIGNvbnN0IFRleHRS
dW4qLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBG
bG9hdFBvaW50JikgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlTVkdLZXJu
aW5nKGNvbnN0IEZvbnQqLCBXaWR0aEl0ZXJhdG9yJiwgR2x5cGhCdWZmZXIqLCBpbnQgZnJvbSkg
Y29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxHbHlwaFRvUGF0aFRy
YW5zbGF0b3I+IGNyZWF0ZUdseXBoVG9QYXRoVHJhbnNsYXRvcihjb25zdCBGb250JiwgY29uc3Qg
VGV4dFJ1biosIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNv
bnN0IEZsb2F0UG9pbnQmKSBjb25zdCA9IDA7CiAjZW5kaWYKICAgICB9OwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmNwcAko
cmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lk
dGhJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDEwICsyMiwxMCBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldpZHRoSXRlcmF0b3IuaCIKIAorI2luY2x1ZGUgIkZv
bnQuaCIKICNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgi
CiAjaW5jbHVkZSAiTGF0aW4xVGV4dEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiU2ltcGxlRm9udERh
dGEuaCIKICNpbmNsdWRlICJTdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IuaCIKICNpbmNs
dWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCkBAIC0zNCw3ICszNCw3IEBAIHVzaW5nIG5hbWVzcGFj
ZSBVbmljb2RlOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVdpZHRoSXRlcmF0b3I6OldpZHRo
SXRlcmF0b3IoY29uc3QgRm9udENhc2NhZGUqIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgSGFz
aFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBib29sIGFjY291bnRG
b3JHbHlwaEJvdW5kcywgYm9vbCBmb3JUZXh0RW1waGFzaXMpCitXaWR0aEl0ZXJhdG9yOjpXaWR0
aEl0ZXJhdG9yKGNvbnN0IEZvbnRDYXNjYWRlKiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIEhh
c2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzLCBib29sIGFjY291bnRGb3JHbHlwaEJv
dW5kcywgYm9vbCBmb3JUZXh0RW1waGFzaXMpCiAgICAgOiBtX2ZvbnQoZm9udCkKICAgICAsIG1f
cnVuKHJ1bikKICAgICAsIG1fY3VycmVudENoYXJhY3RlcigwKQpAQCAtMTAwLDcgKzEwMCw3IEBA
IHB1YmxpYzoKIAogdHlwZWRlZiBWZWN0b3I8c3RkOjpwYWlyPGludCwgT3JpZ2luYWxBZHZhbmNl
c0ZvckNoYXJhY3RlclRyZWF0ZWRBc1NwYWNlPiwgNjQ+IENoYXJhY3RlcnNUcmVhdGVkQXNTcGFj
ZTsKIAotc3RhdGljIGlubGluZSBmbG9hdCBhcHBseUZvbnRUcmFuc2Zvcm1zKEdseXBoQnVmZmVy
KiBnbHlwaEJ1ZmZlciwgYm9vbCBsdHIsIGludCYgbGFzdEdseXBoQ291bnQsIGNvbnN0IFNpbXBs
ZUZvbnREYXRhKiBmb250RGF0YSwgV2lkdGhJdGVyYXRvciYgaXRlcmF0b3IsIFR5cGVzZXR0aW5n
RmVhdHVyZXMgdHlwZXNldHRpbmdGZWF0dXJlcywgQ2hhcmFjdGVyc1RyZWF0ZWRBc1NwYWNlJiBj
aGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UpCitzdGF0aWMgaW5saW5lIGZsb2F0IGFwcGx5Rm9udFRy
YW5zZm9ybXMoR2x5cGhCdWZmZXIqIGdseXBoQnVmZmVyLCBib29sIGx0ciwgaW50JiBsYXN0R2x5
cGhDb3VudCwgY29uc3QgRm9udCogZm9udCwgV2lkdGhJdGVyYXRvciYgaXRlcmF0b3IsIFR5cGVz
ZXR0aW5nRmVhdHVyZXMgdHlwZXNldHRpbmdGZWF0dXJlcywgQ2hhcmFjdGVyc1RyZWF0ZWRBc1Nw
YWNlJiBjaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UpCiB7CiAgICAgQVNTRVJUKHR5cGVzZXR0aW5n
RmVhdHVyZXMgJiAoS2VybmluZyB8IExpZ2F0dXJlcykpOwogCkBAIC0xMjMsMTYgKzEyMywxNiBA
QCBzdGF0aWMgaW5saW5lIGZsb2F0IGFwcGx5Rm9udFRyYW5zZm9ybXMoCiAgICAgVU5VU0VEX1BB
UkFNKGl0ZXJhdG9yKTsKICNlbHNlCiAgICAgLy8gV2UgbmVlZCB0byBoYW5kbGUgdHJhbnNmb3Jt
cyBvbiBTVkcgZm9udHMgaW50ZXJuYWxseSwgc2luY2UgdGhleSBhcmUgcmVuZGVyZWQgaW50ZXJu
YWxseS4KLSAgICBpZiAoZm9udERhdGEtPmlzU1ZHRm9udCgpKSB7CisgICAgaWYgKGZvbnQtPmlz
U1ZHRm9udCgpKSB7CiAgICAgICAgIC8vIFNWRyBmb250IGxpZ2F0dXJlcyBhcmUgaGFuZGxlZCBk
dXJpbmcgZ2x5cGggc2VsZWN0aW9uLCBvbmx5IGtlcm5pbmcgcmVtYWluaW5nLgogICAgICAgICBp
ZiAoaXRlcmF0b3IucnVuKCkucmVuZGVyaW5nQ29udGV4dCgpICYmICh0eXBlc2V0dGluZ0ZlYXR1
cmVzICYgS2VybmluZykpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBwYXNzIHRo
ZSBuZWNlc3NhcnkgY29udGV4dCBkb3duIHRvIHRoaXMgbGV2ZWwgc28gd2UgY2FuIGxhemlseSBj
cmVhdGUgcmVuZGVyaW5nIGNvbnRleHRzIGF0IHRoaXMgcG9pbnQuCiAgICAgICAgICAgICAvLyBI
b3dldmVyLCBhIGxhcmdlciByZWZhY3RvcmluZyBvZiBTVkcgZm9udHMgbWlnaHQgbmVjZXNzYXJ5
IHRvIHNpZGVzdGVwIHRoaXMgcHJvYmxlbSBjb21wbGV0ZWx5LgotICAgICAgICAgICAgaXRlcmF0
b3IucnVuKCkucmVuZGVyaW5nQ29udGV4dCgpLT5hcHBseVNWR0tlcm5pbmcoZm9udERhdGEsIGl0
ZXJhdG9yLCBnbHlwaEJ1ZmZlciwgbGFzdEdseXBoQ291bnQpOworICAgICAgICAgICAgaXRlcmF0
b3IucnVuKCkucmVuZGVyaW5nQ29udGV4dCgpLT5hcHBseVNWR0tlcm5pbmcoZm9udCwgaXRlcmF0
b3IsIGdseXBoQnVmZmVyLCBsYXN0R2x5cGhDb3VudCk7CiAgICAgICAgIH0KICAgICB9IGVsc2UK
ICNlbmRpZgotICAgICAgICBmb250RGF0YS0+YXBwbHlUcmFuc2Zvcm1zKGdseXBoQnVmZmVyLT5n
bHlwaHMobGFzdEdseXBoQ291bnQpLCBhZHZhbmNlcyArIGxhc3RHbHlwaENvdW50LCBnbHlwaEJ1
ZmZlclNpemUgLSBsYXN0R2x5cGhDb3VudCwgdHlwZXNldHRpbmdGZWF0dXJlcyk7CisgICAgICAg
IGZvbnQtPmFwcGx5VHJhbnNmb3JtcyhnbHlwaEJ1ZmZlci0+Z2x5cGhzKGxhc3RHbHlwaENvdW50
KSwgYWR2YW5jZXMgKyBsYXN0R2x5cGhDb3VudCwgZ2x5cGhCdWZmZXJTaXplIC0gbGFzdEdseXBo
Q291bnQsIHR5cGVzZXR0aW5nRmVhdHVyZXMpOwogCiAgICAgaWYgKCFsdHIpCiAgICAgICAgIGds
eXBoQnVmZmVyLT5yZXZlcnNlKGxhc3RHbHlwaENvdW50LCBnbHlwaEJ1ZmZlclNpemUgLSBsYXN0
R2x5cGhDb3VudCk7CkBAIC0xNjYsOCArMTY2LDggQEAgaW5saW5lIHVuc2lnbmVkIFdpZHRoSXRl
cmF0b3I6OmFkdmFuY2VJbgogICAgIGZsb2F0IGxhc3RSb3VuZGluZ1dpZHRoID0gbV9maW5hbFJv
dW5kaW5nV2lkdGg7CiAgICAgRmxvYXRSZWN0IGJvdW5kczsKIAotICAgIGNvbnN0IFNpbXBsZUZv
bnREYXRhJiBwcmltYXJ5Rm9udERhdGEgPSBtX2ZvbnQtPnByaW1hcnlGb250RGF0YSgpOwotICAg
IGNvbnN0IFNpbXBsZUZvbnREYXRhKiBsYXN0Rm9udERhdGEgPSAmcHJpbWFyeUZvbnREYXRhOwor
ICAgIGNvbnN0IEZvbnQmIHByaW1hcnlGb250ID0gbV9mb250LT5wcmltYXJ5Rm9udCgpOworICAg
IGNvbnN0IEZvbnQqIGxhc3RGb250RGF0YSA9ICZwcmltYXJ5Rm9udDsKICAgICBpbnQgbGFzdEds
eXBoQ291bnQgPSBnbHlwaEJ1ZmZlciA/IGdseXBoQnVmZmVyLT5zaXplKCkgOiAwOwogCiAgICAg
VUNoYXIzMiBjaGFyYWN0ZXIgPSAwOwpAQCAtMTgzLDE1ICsxODMsMTUgQEAgaW5saW5lIHVuc2ln
bmVkIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2VJbgogICAgICAgICAgICAgdGV4dEl0ZXJhdG9yLmFk
dmFuY2UoYWR2YW5jZUxlbmd0aCk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQot
ICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEgPSBnbHlwaERhdGEuZm9udERh
dGE7Ci0gICAgICAgIEFTU0VSVChmb250RGF0YSk7CisgICAgICAgIGNvbnN0IEZvbnQqIGZvbnQg
PSBnbHlwaERhdGEuZm9udDsKKyAgICAgICAgQVNTRVJUKGZvbnQpOwogCiAgICAgICAgIC8vIE5v
dyB0aGF0IHdlIGhhdmUgYSBnbHlwaCBhbmQgZm9udCBkYXRhLCBnZXQgaXRzIHdpZHRoLgogICAg
ICAgICBmbG9hdCB3aWR0aDsKICAgICAgICAgaWYgKGNoYXJhY3RlciA9PSAnXHQnICYmIG1fcnVu
LmFsbG93VGFicygpKQotICAgICAgICAgICAgd2lkdGggPSBtX2ZvbnQtPnRhYldpZHRoKCpmb250
RGF0YSwgbV9ydW4udGFiU2l6ZSgpLCBtX3J1bi54UG9zKCkgKyBtX3J1bldpZHRoU29GYXIgKyB3
aWR0aFNpbmNlTGFzdFJvdW5kaW5nKTsKKyAgICAgICAgICAgIHdpZHRoID0gbV9mb250LT50YWJX
aWR0aCgqZm9udCwgbV9ydW4udGFiU2l6ZSgpLCBtX3J1bi54UG9zKCkgKyBtX3J1bldpZHRoU29G
YXIgKyB3aWR0aFNpbmNlTGFzdFJvdW5kaW5nKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICB3aWR0aCA9IGZvbnREYXRhLT53aWR0aEZvckdseXBoKGdseXBoKTsKKyAgICAgICAgICAgIHdp
ZHRoID0gZm9udC0+d2lkdGhGb3JHbHlwaChnbHlwaCk7CiAKICAgICAgICAgICAgIC8vIFNWRyB1
c2VzIGhvcml6b250YWxHbHlwaFN0cmV0Y2goKSwgd2hlbiB0ZXh0TGVuZ3RoIGlzIHVzZWQgdG8g
c3RyZXRjaC9zcXVlZXplIHRleHQuCiAgICAgICAgICAgICB3aWR0aCAqPSBtX3J1bi5ob3Jpem9u
dGFsR2x5cGhTdHJldGNoKCk7CkBAIC0yMDAsMjYgKzIwMCwyNiBAQCBpbmxpbmUgdW5zaWduZWQg
V2lkdGhJdGVyYXRvcjo6YWR2YW5jZUluCiAgICAgICAgICAgICAvLyBGaXJzdCwgd2Ugcm91bmQg
c3BhY2VzIHRvIGFuIGFkanVzdGVkIHdpZHRoIGluIGFsbCBmb250cy4KICAgICAgICAgICAgIC8v
IFNlY29uZCwgaW4gZml4ZWQtcGl0Y2ggZm9udHMgd2UgZW5zdXJlIHRoYXQgYWxsIGNoYXJhY3Rl
cnMgdGhhdAogICAgICAgICAgICAgLy8gbWF0Y2ggdGhlIHdpZHRoIG9mIHRoZSBzcGFjZSBjaGFy
YWN0ZXIgaGF2ZSB0aGUgc2FtZSB3aWR0aCBhcyB0aGUgc3BhY2UgY2hhcmFjdGVyLgotICAgICAg
ICAgICAgaWYgKG1fcnVuLmFwcGx5V29yZFJvdW5kaW5nKCkgJiYgd2lkdGggPT0gZm9udERhdGEt
PnNwYWNlV2lkdGgoKSAmJiAoZm9udERhdGEtPnBpdGNoKCkgPT0gRml4ZWRQaXRjaCB8fCBnbHlw
aCA9PSBmb250RGF0YS0+c3BhY2VHbHlwaCgpKSkKLSAgICAgICAgICAgICAgICB3aWR0aCA9IGZv
bnREYXRhLT5hZGp1c3RlZFNwYWNlV2lkdGgoKTsKKyAgICAgICAgICAgIGlmIChtX3J1bi5hcHBs
eVdvcmRSb3VuZGluZygpICYmIHdpZHRoID09IGZvbnQtPnNwYWNlV2lkdGgoKSAmJiAoZm9udC0+
cGl0Y2goKSA9PSBGaXhlZFBpdGNoIHx8IGdseXBoID09IGZvbnQtPnNwYWNlR2x5cGgoKSkpCisg
ICAgICAgICAgICAgICAgd2lkdGggPSBmb250LT5hZGp1c3RlZFNwYWNlV2lkdGgoKTsKICAgICAg
ICAgfQogCi0gICAgICAgIGlmIChmb250RGF0YSAhPSBsYXN0Rm9udERhdGEgJiYgd2lkdGgpIHsK
KyAgICAgICAgaWYgKGZvbnQgIT0gbGFzdEZvbnREYXRhICYmIHdpZHRoKSB7CiAgICAgICAgICAg
ICBpZiAoc2hvdWxkQXBwbHlGb250VHJhbnNmb3JtcygpKSB7CiAgICAgICAgICAgICAgICAgbV9y
dW5XaWR0aFNvRmFyICs9IGFwcGx5Rm9udFRyYW5zZm9ybXMoZ2x5cGhCdWZmZXIsIG1fcnVuLmx0
cigpLCBsYXN0R2x5cGhDb3VudCwgbGFzdEZvbnREYXRhLCAqdGhpcywgbV90eXBlc2V0dGluZ0Zl
YXR1cmVzLCBjaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UpOwogICAgICAgICAgICAgICAgIGxhc3RH
bHlwaENvdW50ID0gZ2x5cGhCdWZmZXItPnNpemUoKTsgLy8gYXBwbHlGb250VHJhbnNmb3JtcyBk
b2Vzbid0IHVwZGF0ZSB3aGVuIHRoZXJlIGhhZCBiZWVuIG9ubHkgb25lIGdseXBoLgogICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICBsYXN0Rm9udERhdGEgPSBmb250RGF0YTsKLSAgICAgICAg
ICAgIGlmIChtX2ZhbGxiYWNrRm9udHMgJiYgZm9udERhdGEgIT0gJnByaW1hcnlGb250RGF0YSkg
eworICAgICAgICAgICAgbGFzdEZvbnREYXRhID0gZm9udDsKKyAgICAgICAgICAgIGlmIChtX2Zh
bGxiYWNrRm9udHMgJiYgZm9udCAhPSAmcHJpbWFyeUZvbnQpIHsKICAgICAgICAgICAgICAgICAv
LyBGSVhNRTogVGhpcyBkb2VzIGEgbGl0dGxlIGV4dHJhIHdvcmsgdGhhdCBjb3VsZCBiZSBhdm9p
ZGVkIGlmCiAgICAgICAgICAgICAgICAgLy8gZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKCkgcmV0dXJu
ZWQgd2hldGhlciBpdCBjaG9zZSB0byB1c2UgYSBzbWFsbCBjYXBzIGZvbnQuCiAgICAgICAgICAg
ICAgICAgaWYgKCFtX2ZvbnQtPmlzU21hbGxDYXBzKCkgfHwgY2hhcmFjdGVyID09IHVfdG91cHBl
cihjaGFyYWN0ZXIpKQotICAgICAgICAgICAgICAgICAgICBtX2ZhbGxiYWNrRm9udHMtPmFkZChm
b250RGF0YSk7CisgICAgICAgICAgICAgICAgICAgIG1fZmFsbGJhY2tGb250cy0+YWRkKGZvbnQp
OwogICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICBjb25zdCBHbHlw
aERhdGEmIHVwcGVyY2FzZUdseXBoRGF0YSA9IG1fZm9udC0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVy
KHVfdG91cHBlcihjaGFyYWN0ZXIpLCBydGwpOwotICAgICAgICAgICAgICAgICAgICBpZiAodXBw
ZXJjYXNlR2x5cGhEYXRhLmZvbnREYXRhICE9ICZwcmltYXJ5Rm9udERhdGEpCi0gICAgICAgICAg
ICAgICAgICAgICAgICBtX2ZhbGxiYWNrRm9udHMtPmFkZCh1cHBlcmNhc2VHbHlwaERhdGEuZm9u
dERhdGEpOworICAgICAgICAgICAgICAgICAgICBpZiAodXBwZXJjYXNlR2x5cGhEYXRhLmZvbnQg
IT0gJnByaW1hcnlGb250KQorICAgICAgICAgICAgICAgICAgICAgICAgbV9mYWxsYmFja0ZvbnRz
LT5hZGQodXBwZXJjYXNlR2x5cGhEYXRhLmZvbnQpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KICAgICAgICAgfQpAQCAtMjQzLDkgKzI0Myw5IEBAIGlubGluZSB1bnNpZ25lZCBX
aWR0aEl0ZXJhdG9yOjphZHZhbmNlSW4KICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnbHlw
aEJ1ZmZlcikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnbHlwaEJ1ZmZlci0+
aXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX2ZvclRl
eHRFbXBoYXNpcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoQnVm
ZmVyLT5hZGQoZm9udERhdGEtPnplcm9XaWR0aFNwYWNlR2x5cGgoKSwgZm9udERhdGEsIG1fZXhw
YW5zaW9uUGVyT3Bwb3J0dW5pdHksIGN1cnJlbnRDaGFyYWN0ZXIpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ2x5cGhCdWZmZXItPmFkZChmb250LT56ZXJvV2lkdGhTcGFj
ZUdseXBoKCksIGZvbnQsIG1fZXhwYW5zaW9uUGVyT3Bwb3J0dW5pdHksIGN1cnJlbnRDaGFyYWN0
ZXIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+YWRkKGZvbnREYXRhLT5zcGFjZUds
eXBoKCksIGZvbnREYXRhLCBleHBhbnNpb25BdFRoaXNPcHBvcnR1bml0eSwgY3VycmVudENoYXJh
Y3Rlcik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+
YWRkKGZvbnQtPnNwYWNlR2x5cGgoKSwgZm9udCwgZXhwYW5zaW9uQXRUaGlzT3Bwb3J0dW5pdHks
IGN1cnJlbnRDaGFyYWN0ZXIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+ZXhwYW5kTGFzdEFk
dmFuY2UoZXhwYW5zaW9uQXRUaGlzT3Bwb3J0dW5pdHkpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgfQpAQCAtMjc0LDcgKzI3NCw3IEBAIGlubGluZSB1bnNpZ25lZCBXaWR0aEl0ZXJhdG9yOjph
ZHZhbmNlSW4KICAgICAgICAgfQogCiAgICAgICAgIGlmIChtX2FjY291bnRGb3JHbHlwaEJvdW5k
cykgewotICAgICAgICAgICAgYm91bmRzID0gZm9udERhdGEtPmJvdW5kc0ZvckdseXBoKGdseXBo
KTsKKyAgICAgICAgICAgIGJvdW5kcyA9IGZvbnQtPmJvdW5kc0ZvckdseXBoKGdseXBoKTsKICAg
ICAgICAgICAgIGlmICghY3VycmVudENoYXJhY3RlcikKICAgICAgICAgICAgICAgICBtX2ZpcnN0
R2x5cGhPdmVyZmxvdyA9IHN0ZDo6bWF4PGZsb2F0PigwLCAtYm91bmRzLngoKSk7CiAgICAgICAg
IH0KQEAgLTMxNCw3ICszMTQsNyBAQCBpbmxpbmUgdW5zaWduZWQgV2lkdGhJdGVyYXRvcjo6YWR2
YW5jZUluCiAgICAgICAgIH0KIAogICAgICAgICBpZiAoZ2x5cGhCdWZmZXIpCi0gICAgICAgICAg
ICBnbHlwaEJ1ZmZlci0+YWRkKGdseXBoLCBmb250RGF0YSwgKHJ0bCA/IG9sZFdpZHRoICsgbGFz
dFJvdW5kaW5nV2lkdGggOiB3aWR0aCksIGN1cnJlbnRDaGFyYWN0ZXIpOworICAgICAgICAgICAg
Z2x5cGhCdWZmZXItPmFkZChnbHlwaCwgZm9udCwgKHJ0bCA/IG9sZFdpZHRoICsgbGFzdFJvdW5k
aW5nV2lkdGggOiB3aWR0aCksIGN1cnJlbnRDaGFyYWN0ZXIpOwogCiAgICAgICAgIGxhc3RSb3Vu
ZGluZ1dpZHRoID0gd2lkdGggLSBvbGRXaWR0aDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuaAkocmV2aXNpb24gMTc4ODU3KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMiwxNCArMzIsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBGb250Q2FzY2FkZTsKIGNsYXNzIEdseXBoQnVmZmVyOwotY2xhc3MgU2ltcGxlRm9udERhdGE7
CitjbGFzcyBGb250OwogY2xhc3MgVGV4dFJ1bjsKIHN0cnVjdCBHbHlwaERhdGE7CiAKIHN0cnVj
dCBXaWR0aEl0ZXJhdG9yIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoK
LSAgICBXaWR0aEl0ZXJhdG9yKGNvbnN0IEZvbnRDYXNjYWRlKiwgY29uc3QgVGV4dFJ1biYsIEhh
c2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDAsIGJvb2wgYWNj
b3VudEZvckdseXBoQm91bmRzID0gZmFsc2UsIGJvb2wgZm9yVGV4dEVtcGhhc2lzID0gZmFsc2Up
OworICAgIFdpZHRoSXRlcmF0b3IoY29uc3QgRm9udENhc2NhZGUqLCBjb25zdCBUZXh0UnVuJiwg
SGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMgPSAwLCBib29sIGFjY291bnRGb3JH
bHlwaEJvdW5kcyA9IGZhbHNlLCBib29sIGZvclRleHRFbXBoYXNpcyA9IGZhbHNlKTsKIAogICAg
IHVuc2lnbmVkIGFkdmFuY2UoaW50IHRvLCBHbHlwaEJ1ZmZlciopOwogICAgIGJvb2wgYWR2YW5j
ZU9uZUNoYXJhY3RlcihmbG9hdCYgd2lkdGgsIEdseXBoQnVmZmVyJik7CkBAIC05NCw3ICs5NCw3
IEBAIHByaXZhdGU6CiAgICAgYm9vbCBzaG91bGRBcHBseUZvbnRUcmFuc2Zvcm1zKCkgY29uc3Qg
eyByZXR1cm4gbV9ydW4ubGVuZ3RoKCkgPiAxICYmIChtX3R5cGVzZXR0aW5nRmVhdHVyZXMgJiAo
S2VybmluZyB8IExpZ2F0dXJlcykpOyB9CiAKICAgICBUeXBlc2V0dGluZ0ZlYXR1cmVzIG1fdHlw
ZXNldHRpbmdGZWF0dXJlczsKLSAgICBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIG1f
ZmFsbGJhY2tGb250czsKKyAgICBIYXNoU2V0PGNvbnN0IEZvbnQqPiogbV9mYWxsYmFja0ZvbnRz
OwogICAgIGJvb2wgbV9hY2NvdW50Rm9yR2x5cGhCb3VuZHM7CiAgICAgZmxvYXQgbV9tYXhHbHlw
aEJvdW5kaW5nQm94WTsKICAgICBmbG9hdCBtX21pbkdseXBoQm91bmRpbmdCb3hZOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhc2NhZGVDb2NvYS5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9G
b250Q2FzY2FkZUNvY29hLm1tCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FzY2FkZUNvY29hLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0yNywxMSArMjcsMTEgQEAKICNpbXBvcnQgIkNvcmVHcmFwaGljc1NQSS5oIgogI2ltcG9y
dCAiQ29yZVRleHRTUEkuaCIKICNpbXBvcnQgIkRhc2hBcnJheS5oIgorI2ltcG9ydCAiRm9udC5o
IgogI2ltcG9ydCAiR2x5cGhCdWZmZXIuaCIKICNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dC5oIgog
I2ltcG9ydCAiTGF5b3V0UmVjdC5oIgogI2ltcG9ydCAiTG9nZ2luZy5oIgotI2ltcG9ydCAiU2lt
cGxlRm9udERhdGEuaCIKICNpbXBvcnQgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKICNpZiBV
U0UoQVBQS0lUKQogI2ltcG9ydCA8QXBwS2l0L0FwcEtpdC5oPgpAQCAtOTEsNyArOTEsNyBAQCBz
dGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkVXNlTGV0dGVycHJlc3NFCiAjZW5kaWYKIH0KIAotc3Rh
dGljIHZvaWQgc2hvd0xldHRlcnByZXNzZWRHbHlwaHNXaXRoQWR2YW5jZXMoY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LCBDR0NvbnRleHRSZWYgY29u
dGV4dCwgY29uc3QgQ0dHbHlwaCogZ2x5cGhzLCBjb25zdCBDR1NpemUqIGFkdmFuY2VzLCBzaXpl
X3QgY291bnQpCitzdGF0aWMgdm9pZCBzaG93TGV0dGVycHJlc3NlZEdseXBoc1dpdGhBZHZhbmNl
cyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRm9udCogZm9udCwgQ0dDb250ZXh0UmVm
IGNvbnRleHQsIGNvbnN0IENHR2x5cGgqIGdseXBocywgY29uc3QgQ0dTaXplKiBhZHZhbmNlcywg
c2l6ZV90IGNvdW50KQogewogI2lmIEVOQUJMRShMRVRURVJQUkVTUykKICAgICBpZiAoIWNvdW50
KQpAQCAtMTMxLDcgKzEzMSw3IEBAIHN0YXRpYyB2b2lkIHNob3dMZXR0ZXJwcmVzc2VkR2x5cGhz
V2l0aEEKICNlbmRpZgogfQogCi1zdGF0aWMgdm9pZCBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgQ0dDb250
ZXh0UmVmIGNvbnRleHQsIGNvbnN0IENHR2x5cGgqIGdseXBocywgY29uc3QgQ0dTaXplKiBhZHZh
bmNlcywgc2l6ZV90IGNvdW50KQorc3RhdGljIHZvaWQgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhj
b25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRm9udCogZm9udCwgQ0dDb250ZXh0UmVmIGNv
bnRleHQsIGNvbnN0IENHR2x5cGgqIGdseXBocywgY29uc3QgQ0dTaXplKiBhZHZhbmNlcywgc2l6
ZV90IGNvdW50KQogewogICAgIGlmICghY291bnQpCiAgICAgICAgIHJldHVybjsKQEAgLTE5Nyw3
ICsxOTcsNyBAQCBzdGF0aWMgdm9pZCBzZXRDR0ZvbnRSZW5kZXJpbmdNb2RlKENHQ29uCiB9CiAj
ZW5kaWYKIAotdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5
cGhCdWZmZXIsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNo
b3JQb2ludCkgY29uc3QKK3ZvaWQgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBGb250KiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhC
dWZmZXIsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQ
b2ludCkgY29uc3QKIHsKICAgICBjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEg
PSBmb250LT5wbGF0Zm9ybURhdGEoKTsKICAgICBpZiAoIXBsYXRmb3JtRGF0YS5zaXplKCkpCkBA
IC00NjgsNyArNDY4LDcgQEAgcHVibGljOgogICAgICAgICA6IG1faW5kZXgoMCkKICAgICAgICAg
LCBtX3RleHRSdW4odGV4dFJ1bikKICAgICAgICAgLCBtX2dseXBoQnVmZmVyKGdseXBoQnVmZmVy
KQotICAgICAgICAsIG1fZm9udERhdGEoZ2x5cGhCdWZmZXIuZm9udERhdGFBdChtX2luZGV4KSkK
KyAgICAgICAgLCBtX2ZvbnREYXRhKGdseXBoQnVmZmVyLmZvbnRBdChtX2luZGV4KSkKICAgICAg
ICAgLCBtX3RyYW5zbGF0aW9uKENHQWZmaW5lVHJhbnNmb3JtU2NhbGUoQ0dBZmZpbmVUcmFuc2Zv
cm1NYWtlVHJhbnNsYXRpb24odGV4dE9yaWdpbi54KCksIHRleHRPcmlnaW4ueSgpKSwgMSwgLTEp
KQogICAgIHsKICAgICAgICAgbW92ZVRvTmV4dFZhbGlkR2x5cGgoKTsKQEAgLTQ4Nyw3ICs0ODcs
NyBAQCBwcml2YXRlOgogICAgIGludCBtX2luZGV4OwogICAgIGNvbnN0IFRleHRSdW4mIG1fdGV4
dFJ1bjsKICAgICBjb25zdCBHbHlwaEJ1ZmZlciYgbV9nbHlwaEJ1ZmZlcjsKLSAgICBjb25zdCBT
aW1wbGVGb250RGF0YSogbV9mb250RGF0YTsKKyAgICBjb25zdCBGb250KiBtX2ZvbnREYXRhOwog
ICAgIENHQWZmaW5lVHJhbnNmb3JtIG1fdHJhbnNsYXRpb247CiB9OwogCkBAIC01MjQsNyArNTI0
LDcgQEAgdm9pZCBNYWNHbHlwaFRvUGF0aFRyYW5zbGF0b3I6OmFkdmFuY2UoKQogICAgICAgICAr
K21faW5kZXg7CiAgICAgICAgIGlmIChtX2luZGV4ID49IG1fZ2x5cGhCdWZmZXIuc2l6ZSgpKQog
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIG1fZm9udERhdGEgPSBtX2dseXBoQnVmZmVyLmZv
bnREYXRhQXQobV9pbmRleCk7CisgICAgICAgIG1fZm9udERhdGEgPSBtX2dseXBoQnVmZmVyLmZv
bnRBdChtX2luZGV4KTsKICAgICB9IHdoaWxlIChtX2ZvbnREYXRhLT5pc1NWR0ZvbnQoKSAmJiBt
X2luZGV4IDwgbV9nbHlwaEJ1ZmZlci5zaXplKCkpOwogfQogCkBAIC01NDUsNyArNTQ1LDcgQEAg
RGFzaEFycmF5IEZvbnRDYXNjYWRlOjpkYXNoZXNGb3JJbnRlcnNlYwogICAgICAgICByZXR1cm4g
RGFzaEFycmF5KCk7CiAgICAgCiAgICAgLy8gRklYTUU6IEhhbmRsZSBTVkcgKyBub24tU1ZHIGlu
dGVybGVhdmVkIHJ1bnMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MzM3NzgKLSAgICBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEgPSBnbHlwaEJ1ZmZlci5m
b250RGF0YUF0KDApOworICAgIGNvbnN0IEZvbnQqIGZvbnREYXRhID0gZ2x5cGhCdWZmZXIuZm9u
dEF0KDApOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxHbHlwaFRvUGF0aFRyYW5zbGF0b3I+IHRyYW5z
bGF0b3I7CiAgICAgYm9vbCBpc1NWRyA9IGZhbHNlOwogICAgIEZsb2F0UG9pbnQgb3JpZ2luID0g
RmxvYXRQb2ludCh0ZXh0T3JpZ2luLngoKSArIGRlbHRhWCwgdGV4dE9yaWdpbi55KCkpOwpAQCAt
NTYxLDggKzU2MSw4IEBAIERhc2hBcnJheSBGb250Q2FzY2FkZTo6ZGFzaGVzRm9ySW50ZXJzZWMK
ICAgICBEYXNoQXJyYXkgcmVzdWx0OwogICAgIGZvciAoaW50IGluZGV4ID0gMDsgdHJhbnNsYXRv
ci0+Y29udGFpbnNNb3JlUGF0aHMoKTsgKytpbmRleCwgdHJhbnNsYXRvci0+YWR2YW5jZSgpKSB7
CiAgICAgICAgIEdseXBoSXRlcmF0aW9uU3RhdGUgaW5mbyA9IEdseXBoSXRlcmF0aW9uU3RhdGUo
Q0dQb2ludE1ha2UoMCwgMCksIENHUG9pbnRNYWtlKDAsIDApLCBsaW5lRXh0ZW50cy55KCksIGxp
bmVFeHRlbnRzLnkoKSArIGxpbmVFeHRlbnRzLmhlaWdodCgpLCBsaW5lRXh0ZW50cy54KCkgKyBs
aW5lRXh0ZW50cy53aWR0aCgpLCBsaW5lRXh0ZW50cy54KCkpOwotICAgICAgICBjb25zdCBTaW1w
bGVGb250RGF0YSogbG9jYWxGb250RGF0YSA9IGdseXBoQnVmZmVyLmZvbnREYXRhQXQoaW5kZXgp
OwotICAgICAgICBpZiAoIWxvY2FsRm9udERhdGEgfHwgKCFpc1NWRyAmJiBsb2NhbEZvbnREYXRh
LT5pc1NWR0ZvbnQoKSkgfHwgKGlzU1ZHICYmIGxvY2FsRm9udERhdGEgIT0gZm9udERhdGEpKSB7
CisgICAgICAgIGNvbnN0IEZvbnQqIGxvY2FsRm9udCA9IGdseXBoQnVmZmVyLmZvbnRBdChpbmRl
eCk7CisgICAgICAgIGlmICghbG9jYWxGb250IHx8ICghaXNTVkcgJiYgbG9jYWxGb250LT5pc1NW
R0ZvbnQoKSkgfHwgKGlzU1ZHICYmIGxvY2FsRm9udCAhPSBmb250RGF0YSkpIHsKICAgICAgICAg
ICAgIC8vIFRoZSBhZHZhbmNlcyB3aWxsIGdldCBhbGwgbWVzc2VkIHVwIGlmIHdlIGRvIGFueXRo
aW5nIG90aGVyIHRoYW4gYmFpbCBoZXJlLgogICAgICAgICAgICAgcmVzdWx0LmNsZWFyKCk7CiAg
ICAgICAgICAgICBicmVhazsKQEAgLTU5MiwxMCArNTkyLDEwIEBAIERhc2hBcnJheSBGb250Q2Fz
Y2FkZTo6ZGFzaGVzRm9ySW50ZXJzZWMKIH0KICNlbmRpZgogCi1ib29sIEZvbnRDYXNjYWRlOjpw
cmltYXJ5Rm9udERhdGFJc1N5c3RlbUZvbnQoKSBjb25zdAorYm9vbCBGb250Q2FzY2FkZTo6cHJp
bWFyeUZvbnRJc1N5c3RlbUZvbnQoKSBjb25zdAogewogI2lmIFBMQVRGT1JNKElPUykgfHwgX19N
QUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+IDEwOTAKLSAgICBjb25zdCBhdXRvJiBmb250
RGF0YSA9IHByaW1hcnlGb250RGF0YSgpOworICAgIGNvbnN0IGF1dG8mIGZvbnREYXRhID0gcHJp
bWFyeUZvbnQoKTsKICAgICByZXR1cm4gIWZvbnREYXRhLmlzU1ZHRm9udCgpICYmIENURm9udERl
c2NyaXB0b3JJc1N5c3RlbVVJRm9udChhZG9wdENGKENURm9udENvcHlGb250RGVzY3JpcHRvcihm
b250RGF0YS5wbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSkpLmdldCgpKTsKICNlbHNlCiAgICAgLy8g
U3lzdGVtIGZvbnRzIGFyZSBoaWRkZW4gYnkgaGF2aW5nIGEgbmFtZSB0aGF0IGJlZ2lucyB3aXRo
IGEgcGVyaW9kLCBzbyBzaW1wbHkgc2VhcmNoCkBAIC02NzEsNyArNjcxLDcgQEAgdm9pZCBGb250
Q2FzY2FkZTo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDbwogICAgIGRyYXdFbXBoYXNpc01hcmtzKGNv
bnRleHQsIHJ1biwgZ2x5cGhCdWZmZXIsIG1hcmssIEZsb2F0UG9pbnQocG9pbnQueCgpICsgaW5p
dGlhbEFkdmFuY2UsIHBvaW50LnkoKSkpOwogfQogCi1mbG9hdCBGb250Q2FzY2FkZTo6ZmxvYXRX
aWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBTaW1w
bGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93
KSBjb25zdAorZmxvYXQgRm9udENhc2NhZGU6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25z
dCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzLCBHbHlw
aE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAogewogICAgIENvbXBsZXhUZXh0Q29udHJv
bGxlciBjb250cm9sbGVyKHRoaXMsIHJ1biwgdHJ1ZSwgZmFsbGJhY2tGb250cyk7CiAgICAgaWYg
KGdseXBoT3ZlcmZsb3cpIHsKQEAgLTY4OSw3ICs2ODksNyBAQCBpbnQgRm9udENhc2NhZGU6Om9m
ZnNldEZvclBvc2l0aW9uRm9yQ29tCiAgICAgcmV0dXJuIGNvbnRyb2xsZXIub2Zmc2V0Rm9yUG9z
aXRpb24oeCwgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOwogfQogCi1jb25zdCBTaW1wbGVGb250RGF0
YSogRm9udENhc2NhZGU6OmZvbnREYXRhRm9yQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIEZvbnREYXRhVmFyaWFudCB2YXJp
YW50KSBjb25zdAorY29uc3QgRm9udCogRm9udENhc2NhZGU6OmZvbnRGb3JDb21iaW5pbmdDaGFy
YWN0ZXJTZXF1ZW5jZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgRm9u
dFZhcmlhbnQgdmFyaWFudCkgY29uc3QKIHsKICAgICBVQ2hhcjMyIGJhc2VDaGFyYWN0ZXI7CiAg
ICAgc2l6ZV90IGJhc2VDaGFyYWN0ZXJMZW5ndGggPSAwOwpAQCAtNzAxLDUxICs3MDEsNTEgQEAg
Y29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRDYXNjYWRlOjpmb250RAogICAgICAgICByZXR1cm4g
MDsKIAogICAgIGlmIChsZW5ndGggPT0gYmFzZUNoYXJhY3Rlckxlbmd0aCkKLSAgICAgICAgcmV0
dXJuIGJhc2VDaGFyYWN0ZXJHbHlwaERhdGEuZm9udERhdGE7CisgICAgICAgIHJldHVybiBiYXNl
Q2hhcmFjdGVyR2x5cGhEYXRhLmZvbnQ7CiAKLSAgICBib29sIHRyaWVkQmFzZUNoYXJhY3RlckZv
bnREYXRhID0gZmFsc2U7CisgICAgYm9vbCB0cmllZEJhc2VDaGFyYWN0ZXJGb250ID0gZmFsc2U7
CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyAhZmFsbGJhY2tSYW5nZXNBdChpKS5pc051bGwo
KTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBzaW1wbGVGb250RGF0YSA9
IGZhbGxiYWNrUmFuZ2VzQXQoaSkuZm9udERhdGFGb3JDaGFyYWN0ZXIoYmFzZUNoYXJhY3Rlcik7
Ci0gICAgICAgIGlmICghc2ltcGxlRm9udERhdGEpCisgICAgICAgIGNvbnN0IEZvbnQqIGZvbnQg
PSBmYWxsYmFja1Jhbmdlc0F0KGkpLmZvbnRGb3JDaGFyYWN0ZXIoYmFzZUNoYXJhY3Rlcik7Cisg
ICAgICAgIGlmICghZm9udCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogI2lmIFBMQVRGT1JNKElP
UykKLSAgICAgICAgaWYgKGJhc2VDaGFyYWN0ZXIgPj0gMHgwNjAwICYmIGJhc2VDaGFyYWN0ZXIg
PD0gMHgwNmZmICYmIHNpbXBsZUZvbnREYXRhLT5zaG91bGROb3RCZVVzZWRGb3JBcmFiaWMoKSkK
KyAgICAgICAgaWYgKGJhc2VDaGFyYWN0ZXIgPj0gMHgwNjAwICYmIGJhc2VDaGFyYWN0ZXIgPD0g
MHgwNmZmICYmIGZvbnQtPnNob3VsZE5vdEJlVXNlZEZvckFyYWJpYygpKQogICAgICAgICAgICAg
Y29udGludWU7CiAjZW5kaWYKICAgICAgICAgaWYgKHZhcmlhbnQgPT0gTm9ybWFsVmFyaWFudCkg
ewotICAgICAgICAgICAgaWYgKHNpbXBsZUZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5vcmllbnRh
dGlvbigpID09IFZlcnRpY2FsKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlzQ0pLSWRlb2dyYXBo
T3JTeW1ib2woYmFzZUNoYXJhY3RlcikgJiYgIXNpbXBsZUZvbnREYXRhLT5oYXNWZXJ0aWNhbEds
eXBocygpKSB7CisgICAgICAgICAgICBpZiAoZm9udC0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRp
b24oKSA9PSBWZXJ0aWNhbCkgeworICAgICAgICAgICAgICAgIGlmIChpc0NKS0lkZW9ncmFwaE9y
U3ltYm9sKGJhc2VDaGFyYWN0ZXIpICYmICFmb250LT5oYXNWZXJ0aWNhbEdseXBocygpKSB7CiAg
ICAgICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBCcm9rZW5JZGVvZ3JhcGhWYXJpYW50OwotICAg
ICAgICAgICAgICAgICAgICBzaW1wbGVGb250RGF0YSA9IHNpbXBsZUZvbnREYXRhLT5icm9rZW5J
ZGVvZ3JhcGhGb250RGF0YSgpLmdldCgpOworICAgICAgICAgICAgICAgICAgICBmb250ID0gZm9u
dC0+YnJva2VuSWRlb2dyYXBoRm9udCgpLmdldCgpOwogICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAobV9mb250RGVzY3JpcHRpb24ubm9uQ0pLR2x5cGhPcmllbnRhdGlvbigpID09IE5vbkNKS0ds
eXBoT3JpZW50YXRpb25WZXJ0aWNhbFJpZ2h0KSB7Ci0gICAgICAgICAgICAgICAgICAgIFNpbXBs
ZUZvbnREYXRhKiB2ZXJ0aWNhbFJpZ2h0Rm9udERhdGEgPSBzaW1wbGVGb250RGF0YS0+dmVydGlj
YWxSaWdodE9yaWVudGF0aW9uRm9udERhdGEoKS5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAg
R2x5cGggdmVydGljYWxSaWdodEdseXBoID0gdmVydGljYWxSaWdodEZvbnREYXRhLT5nbHlwaEZv
ckNoYXJhY3RlcihiYXNlQ2hhcmFjdGVyKTsKKyAgICAgICAgICAgICAgICAgICAgRm9udCogdmVy
dGljYWxSaWdodEZvbnQgPSBmb250LT52ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250KCkuZ2V0
KCk7CisgICAgICAgICAgICAgICAgICAgIEdseXBoIHZlcnRpY2FsUmlnaHRHbHlwaCA9IHZlcnRp
Y2FsUmlnaHRGb250LT5nbHlwaEZvckNoYXJhY3RlcihiYXNlQ2hhcmFjdGVyKTsKICAgICAgICAg
ICAgICAgICAgICAgaWYgKHZlcnRpY2FsUmlnaHRHbHlwaCA9PSBiYXNlQ2hhcmFjdGVyR2x5cGhE
YXRhLmdseXBoKQotICAgICAgICAgICAgICAgICAgICAgICAgc2ltcGxlRm9udERhdGEgPSB2ZXJ0
aWNhbFJpZ2h0Rm9udERhdGE7CisgICAgICAgICAgICAgICAgICAgICAgICBmb250ID0gdmVydGlj
YWxSaWdodEZvbnQ7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgU2ltcGxlRm9udERhdGEqIHVwcmlnaHRGb250RGF0YSA9IHNpbXBsZUZvbnREYXRhLT51cHJp
Z2h0T3JpZW50YXRpb25Gb250RGF0YSgpLmdldCgpOwotICAgICAgICAgICAgICAgICAgICBHbHlw
aCB1cHJpZ2h0R2x5cGggPSB1cHJpZ2h0Rm9udERhdGEtPmdseXBoRm9yQ2hhcmFjdGVyKGJhc2VD
aGFyYWN0ZXIpOworICAgICAgICAgICAgICAgICAgICBGb250KiB1cHJpZ2h0Rm9udCA9IGZvbnQt
PnVwcmlnaHRPcmllbnRhdGlvbkZvbnQoKS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgR2x5
cGggdXByaWdodEdseXBoID0gdXByaWdodEZvbnQtPmdseXBoRm9yQ2hhcmFjdGVyKGJhc2VDaGFy
YWN0ZXIpOwogICAgICAgICAgICAgICAgICAgICBpZiAodXByaWdodEdseXBoICE9IGJhc2VDaGFy
YWN0ZXJHbHlwaERhdGEuZ2x5cGgpCi0gICAgICAgICAgICAgICAgICAgICAgICBzaW1wbGVGb250
RGF0YSA9IHVwcmlnaHRGb250RGF0YTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQgPSB1
cHJpZ2h0Rm9udDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBpZiAoY29uc3QgU2ltcGxlRm9udERhdGEqIHZhcmlhbnRGb250
RGF0YSA9IHNpbXBsZUZvbnREYXRhLT52YXJpYW50Rm9udERhdGEobV9mb250RGVzY3JpcHRpb24s
IHZhcmlhbnQpLmdldCgpKQotICAgICAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gdmFyaWFu
dEZvbnREYXRhOworICAgICAgICAgICAgaWYgKGNvbnN0IEZvbnQqIHZhcmlhbnRGb250ID0gZm9u
dC0+dmFyaWFudEZvbnQobV9mb250RGVzY3JpcHRpb24sIHZhcmlhbnQpLmdldCgpKQorICAgICAg
ICAgICAgICAgIGZvbnQgPSB2YXJpYW50Rm9udDsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChz
aW1wbGVGb250RGF0YSA9PSBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmZvbnREYXRhKQotICAgICAg
ICAgICAgdHJpZWRCYXNlQ2hhcmFjdGVyRm9udERhdGEgPSB0cnVlOworICAgICAgICBpZiAoZm9u
dCA9PSBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmZvbnQpCisgICAgICAgICAgICB0cmllZEJhc2VD
aGFyYWN0ZXJGb250ID0gdHJ1ZTsKIAotICAgICAgICBpZiAoc2ltcGxlRm9udERhdGEtPmNhblJl
bmRlckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNoYXJhY3RlcnMsIGxlbmd0aCkpCi0gICAg
ICAgICAgICByZXR1cm4gc2ltcGxlRm9udERhdGE7CisgICAgICAgIGlmIChmb250LT5jYW5SZW5k
ZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjaGFyYWN0ZXJzLCBsZW5ndGgpKQorICAgICAg
ICAgICAgcmV0dXJuIGZvbnQ7CiAgICAgfQogCi0gICAgaWYgKCF0cmllZEJhc2VDaGFyYWN0ZXJG
b250RGF0YSAmJiBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmZvbnREYXRhICYmIGJhc2VDaGFyYWN0
ZXJHbHlwaERhdGEuZm9udERhdGEtPmNhblJlbmRlckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNl
KGNoYXJhY3RlcnMsIGxlbmd0aCkpCi0gICAgICAgIHJldHVybiBiYXNlQ2hhcmFjdGVyR2x5cGhE
YXRhLmZvbnREYXRhOworICAgIGlmICghdHJpZWRCYXNlQ2hhcmFjdGVyRm9udCAmJiBiYXNlQ2hh
cmFjdGVyR2x5cGhEYXRhLmZvbnQgJiYgYmFzZUNoYXJhY3RlckdseXBoRGF0YS5mb250LT5jYW5S
ZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjaGFyYWN0ZXJzLCBsZW5ndGgpKQorICAg
ICAgICByZXR1cm4gYmFzZUNoYXJhY3RlckdseXBoRGF0YS5mb250OwogCi0gICAgcmV0dXJuIFNp
bXBsZUZvbnREYXRhOjpzeXN0ZW1GYWxsYmFjaygpOworICAgIHJldHVybiBGb250OjpzeXN0ZW1G
YWxsYmFjaygpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9pb3MvRm9udENhY2hlSU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2lvcy9Gb250Q2FjaGVJT1MubW0JKHJldmlzaW9uIDE3ODg1NykKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9Gb250Q2FjaGVJT1MubW0JKHdvcmtp
bmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgc3RhdGljIENGQ2hhcmFjdGVyU2V0UmVmIHBob25l
RmFsbGJhY2tDaAogICAgIHJldHVybiBjaGFyYWN0ZXJTZXQ7CiB9CiAKLVBhc3NSZWZQdHI8U2lt
cGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0U3lzdGVtRm9udEZhbGxiYWNrRm9yQ2hhcmFjdGVy
cyhjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBTaW1wbGVGb250RGF0
YSogb3JpZ2luYWxGb250RGF0YSwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgp
CitQYXNzUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6Z2V0U3lzdGVtRm9udEZhbGxiYWNrRm9yQ2hh
cmFjdGVycyhjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBGb250KiBv
cmlnaW5hbEZvbnREYXRhLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKIHsK
ICAgICBjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEgPSBvcmlnaW5hbEZvbnRE
YXRhLT5wbGF0Zm9ybURhdGEoKTsKICAgICBDVEZvbnRSZWYgY3RGb250ID0gcGxhdGZvcm1EYXRh
LmZvbnQoKTsKQEAgLTE5NCw3ICsxOTQsNyBAQCBzdGF0aWMgTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQg
bGFuZ3VhZ2VTcGVjCiAgICAgcmV0dXJuIExhbmd1YWdlU3BlY2lmaWNGb250OjpOb25lOwogfQog
Ci1SZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6c3lzdGVtRmFsbGJhY2tGb3JDaGFy
YWN0ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IFNpbXBsZUZv
bnREYXRhKiBvcmlnaW5hbEZvbnREYXRhLCBib29sLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywg
aW50IGxlbmd0aCkKK1JlZlB0cjxGb250PiBGb250Q2FjaGU6OnN5c3RlbUZhbGxiYWNrRm9yQ2hh
cmFjdGVycyhjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBGb250KiBv
cmlnaW5hbEZvbnREYXRhLCBib29sLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0
aCkKIHsKICAgICAvLyBVbmxpa2UgT1MgWCwgb3VyIGZhbGxiYWNrIGZvbnQgb24gaVBob25lIGlz
IEFyaWFsIFVuaWNvZGUsIHdoaWNoIGRvZXNuJ3QgaGF2ZSBzb21lIGFwcGxlLXNwZWNpZmljIGds
eXBocyBsaWtlIEY4RkYuCiAgICAgLy8gRmFsbCBiYWNrIHRvIHRoZSBBcHBsZSBGYWxsYmFjayBm
b250IGluIHRoaXMgY2FzZS4KQEAgLTIyMCw3ICsyMjAsNyBAQCBSZWZQdHI8U2ltcGxlRm9udERh
dGE+IEZvbnRDYWNoZTo6c3lzdGVtCiAgICAgaWYgKGxlbmd0aCA+IDApCiAgICAgICAgIGxhbmd1
YWdlU3BlY2lmaWNGb250ID0gbGFuZ3VhZ2VTcGVjaWZpY0ZhbGxiYWNrRm9udChjKTsKIAotICAg
IFJlZlB0cjxTaW1wbGVGb250RGF0YT4gc2ltcGxlRm9udERhdGE7CisgICAgUmVmUHRyPEZvbnQ+
IGZvbnQ7CiAKICAgICBzd2l0Y2ggKGxhbmd1YWdlU3BlY2lmaWNGb250KSB7CiAgICAgY2FzZSBM
YW5ndWFnZVNwZWNpZmljRm9udDo6Q2hpbmVzZUphcGFuZXNlOiB7CkBAIC0yOTgsNDMgKzI5OCw0
MyBAQCBSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6c3lzdGVtCiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KIAotICAgICAgICBzaW1wbGVGb250RGF0YSA9IGZvbnRGb3JGYW1pbHko
ZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gKmNq
a0JvbGRbcHJlZmVycmVkQ0pLRm9udF0gOiAqY2prUGxhaW5bcHJlZmVycmVkQ0pLRm9udF0sIGZh
bHNlKTsKKyAgICAgICAgZm9udCA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGlzRm9udFdl
aWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gKmNqa0JvbGRbcHJlZmVycmVkQ0pLRm9u
dF0gOiAqY2prUGxhaW5bcHJlZmVycmVkQ0pLRm9udF0sIGZhbHNlKTsKICAgICAgICAgYm9vbCB1
c2VTZWNvbmRhcnlGb250ID0gdHJ1ZTsKLSAgICAgICAgaWYgKHNpbXBsZUZvbnREYXRhKSB7Cisg
ICAgICAgIGlmIChmb250KSB7CiAgICAgICAgICAgICBDR0dseXBoIGdseXBoc1syXTsKICAgICAg
ICAgICAgIC8vIENHRm9udEdldEdseXBoc0ZvclVuaWNoYXJzIHRha2VzIFVURi0xNiBidWZmZXIu
IFNob3VsZCBvbmx5IGJlIDEgY29kZXBvaW50IGJ1dCBzaW5jZSB3ZSBtYXkgcGFzcyBpbiB0d28g
VVRGLTE2IGNoYXJhY3RlcnMsCiAgICAgICAgICAgICAvLyBtYWtlIHJvb20gZm9yIDIgZ2x5cGhz
IGp1c3QgdG8gYmUgc2FmZS4KLSAgICAgICAgICAgIENHRm9udEdldEdseXBoc0ZvclVuaWNoYXJz
KHNpbXBsZUZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5jZ0ZvbnQoKSwgY2hhcmFjdGVycywgZ2x5
cGhzLCBsZW5ndGgpOworICAgICAgICAgICAgQ0dGb250R2V0R2x5cGhzRm9yVW5pY2hhcnMoZm9u
dC0+cGxhdGZvcm1EYXRhKCkuY2dGb250KCksIGNoYXJhY3RlcnMsIGdseXBocywgbGVuZ3RoKTsK
IAogICAgICAgICAgICAgdXNlU2Vjb25kYXJ5Rm9udCA9IChnbHlwaHNbMF0gPT0gMCk7CiAgICAg
ICAgIH0KIAogICAgICAgICBpZiAodXNlU2Vjb25kYXJ5Rm9udCkKLSAgICAgICAgICAgIHNpbXBs
ZUZvbnREYXRhID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChk
ZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyAqY2prQm9sZFtzZWNvbmRhcnlDSktGb250XSA6ICpjamtQ
bGFpbltzZWNvbmRhcnlDSktGb250XSwgZmFsc2UpOworICAgICAgICAgICAgZm9udCA9IGZvbnRG
b3JGYW1pbHkoZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0
KCkpID8gKmNqa0JvbGRbc2Vjb25kYXJ5Q0pLRm9udF0gOiAqY2prUGxhaW5bc2Vjb25kYXJ5Q0pL
Rm9udF0sIGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgTGFuZ3VhZ2VT
cGVjaWZpY0ZvbnQ6OktvcmVhbjogewogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRv
bWljU3RyaW5nPiBrb3JlYW5QbGFpbigiQXBwbGVTREdvdGhpY05lby1NZWRpdW0iLCBBdG9taWNT
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPEF0b21pY1N0cmluZz4ga29yZWFuQm9sZCgiQXBwbGVTREdvdGhpY05lby1Cb2xkIiwgQXRv
bWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgICAgIHNpbXBsZUZvbnREYXRh
ID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlv
bi53ZWlnaHQoKSkgPyBrb3JlYW5Cb2xkIDoga29yZWFuUGxhaW4sIGZhbHNlKTsKKyAgICAgICAg
Zm9udCA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3Jp
cHRpb24ud2VpZ2h0KCkpID8ga29yZWFuQm9sZCA6IGtvcmVhblBsYWluLCBmYWxzZSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIExhbmd1YWdlU3BlY2lmaWNGb250OjpDeXJpbGxp
YzogewogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBjeXJpbGxp
Y1BsYWluKCJIZWx2ZXRpY2FOZXVlIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJh
bCk7CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGN5cmlsbGlj
Qm9sZCgiSGVsdmV0aWNhTmV1ZS1Cb2xkIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCk7Ci0gICAgICAgIHNpbXBsZUZvbnREYXRhID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlv
biwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBjeXJpbGxpY0JvbGQg
OiBjeXJpbGxpY1BsYWluLCBmYWxzZSk7CisgICAgICAgIGZvbnQgPSBmb250Rm9yRmFtaWx5KGRl
c2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/IGN5cmls
bGljQm9sZCA6IGN5cmlsbGljUGxhaW4sIGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQog
ICAgIGNhc2UgTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6OkFyYWJpYzogewogICAgICAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBhcmFiaWNQbGFpbigiR2VlemFQcm8iLCBBdG9t
aWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKICAgICAgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPEF0b21pY1N0cmluZz4gYXJhYmljQm9sZCgiR2VlemFQcm8tQm9sZCIsIEF0b21pY1N0
cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgICAgICBzaW1wbGVGb250RGF0YSA9IGZv
bnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2Vp
Z2h0KCkpID8gYXJhYmljQm9sZCA6IGFyYWJpY1BsYWluLCBmYWxzZSk7CisgICAgICAgIGZvbnQg
PSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9u
LndlaWdodCgpKSA/IGFyYWJpY0JvbGQgOiBhcmFiaWNQbGFpbiwgZmFsc2UpOwogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgY2FzZSBMYW5ndWFnZVNwZWNpZmljRm9udDo6SGVicmV3OiB7CiAg
ICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGhlYnJld1BsYWluKCJB
cmlhbEhlYnJldyIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwogICAgICAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBoZWJyZXdCb2xkKCJBcmlhbEhl
YnJldy1Cb2xkIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgICAg
IHNpbXBsZUZvbnREYXRhID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0
Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBoZWJyZXdCb2xkIDogaGVicmV3UGxhaW4sIGZh
bHNlKTsKKyAgICAgICAgZm9udCA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGlzRm9udFdl
aWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gaGVicmV3Qm9sZCA6IGhlYnJld1BsYWlu
LCBmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIExhbmd1YWdlU3BlY2lm
aWNGb250OjpJbmRpYzogewpAQCAtMzkwLDM2ICszOTAsMzYgQEAgUmVmUHRyPFNpbXBsZUZvbnRE
YXRhPiBGb250Q2FjaGU6OnN5c3RlbQogICAgICAgICBpZiAoaW5kaWNQYWdlT3JkZXJJbmRleCA8
IChzaXplb2YoaW5kaWNVbmljb2RlUGFnZUZvbnRzKSAvIHNpemVvZihBdG9taWNTdHJpbmcqKSkp
IHsKICAgICAgICAgICAgIEF0b21pY1N0cmluZyogaW5kaWNGb250U3RyaW5nID0gaXNGb250V2Vp
Z2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBpbmRpY1VuaWNvZGVQYWdlRm9udHNCb2xk
W2luZGljUGFnZU9yZGVySW5kZXhdIDogaW5kaWNVbmljb2RlUGFnZUZvbnRzW2luZGljUGFnZU9y
ZGVySW5kZXhdOwogICAgICAgICAgICAgaWYgKGluZGljRm9udFN0cmluZykKLSAgICAgICAgICAg
ICAgICBzaW1wbGVGb250RGF0YSA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sICppbmRpY0Zv
bnRTdHJpbmcsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBmb250ID0gZm9udEZvckZhbWlseShk
ZXNjcmlwdGlvbiwgKmluZGljRm9udFN0cmluZywgZmFsc2UpOwogICAgICAgICB9CiAgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICBjYXNlIExhbmd1YWdlU3BlY2lmaWNGb250OjpUaGFpOiB7CiAg
ICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHRoYWlQbGFpbigiVGhv
bmJ1cmkiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKICAgICAgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gdGhhaUJvbGQoIlRob25idXJpLUJvbGQi
LCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAgc2ltcGxlRm9u
dERhdGEgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2Ny
aXB0aW9uLndlaWdodCgpKSA/IHRoYWlCb2xkIDogdGhhaVBsYWluLCBmYWxzZSk7CisgICAgICAg
IGZvbnQgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2Ny
aXB0aW9uLndlaWdodCgpKSA/IHRoYWlCb2xkIDogdGhhaVBsYWluLCBmYWxzZSk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICBjYXNlIExhbmd1YWdlU3BlY2lmaWNGb250OjpUaWJldGFuOiB7
CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHRpYmV0YW5QbGFp
bigiS2FpbGFzYSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwogICAgICAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiB0aWJldGFuQm9sZCgiS2FpbGFz
YS1Cb2xkIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgICAgIHNp
bXBsZUZvbnREYXRhID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9s
ZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyB0aWJldGFuQm9sZCA6IHRpYmV0YW5QbGFpbiwgZmFs
c2UpOworICAgICAgICBmb250ID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgaXNGb250V2Vp
Z2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyB0aWJldGFuQm9sZCA6IHRpYmV0YW5QbGFp
biwgZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBMYW5ndWFnZVNwZWNp
ZmljRm9udDo6Q2FuYWRpYW5BYm9yaWdpbmFsU3lsbGFiaWM6IHsKICAgICAgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gY2FzUGxhaW4oIkV1cGhlbWlhVUNBUyIsIEF0b21p
Y1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8QXRvbWljU3RyaW5nPiBjYXNCb2xkKCJFdXBoZW1pYVVDQVMtQm9sZCIsIEF0b21pY1N0
cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgICAgICBzaW1wbGVGb250RGF0YSA9IGZv
bnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2Vp
Z2h0KCkpID8gY2FzQm9sZCA6IGNhc1BsYWluLCBmYWxzZSk7CisgICAgICAgIGZvbnQgPSBmb250
Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdo
dCgpKSA/IGNhc0JvbGQgOiBjYXNQbGFpbiwgZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9
CiAgICAgY2FzZSBMYW5ndWFnZVNwZWNpZmljRm9udDo6S2htZXI6IHsKICAgICAgICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4ga2htZXIoIktobWVyU2FuZ2FtTU4iLCBBdG9t
aWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAgc2ltcGxlRm9udERhdGEg
PSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBraG1lciwgZmFsc2UpOworICAgICAgICBmb250
ID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwga2htZXIsIGZhbHNlKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgIGNhc2UgTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6OkxhbzogewogICAgICAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBsYW8oIkxhb1NhbmdhbU1OIiwg
QXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgICAgIHNpbXBsZUZvbnRE
YXRhID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgbGFvLCBmYWxzZSk7CisgICAgICAgIGZv
bnQgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBsYW8sIGZhbHNlKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgIGRlZmF1bHQ6IHsKQEAgLTQzMCwyNyArNDMwLDI3IEBAIFJlZlB0cjxT
aW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpzeXN0ZW0KICAgICAgICAgICAgICAgICB1c2VFbW9q
aUZvbnQgPSBDRkNoYXJhY3RlclNldElzTG9uZ0NoYXJhY3Rlck1lbWJlcihhcHBsZUNvbG9yRW1v
amlDaGFyYWN0ZXJTZXQoKSwgYyk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHVzZUVtb2ppRm9u
dCkKLSAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlv
biwgYXBwbGVDb2xvckVtb2ppLCBmYWxzZSk7CisgICAgICAgICAgICBmb250ID0gZm9udEZvckZh
bWlseShkZXNjcmlwdGlvbiwgYXBwbGVDb2xvckVtb2ppLCBmYWxzZSk7CiAgICAgICAgIGVsc2Ug
ewogICAgICAgICAgICAgUmV0YWluUHRyPENURm9udFJlZj4gZmFsbGJhY2tGb250ID0gYWRvcHRD
RihDVEZvbnRDcmVhdGVGb3JDaGFyYWN0ZXJzKG9yaWdpbmFsRm9udERhdGEtPmdldENURm9udCgp
LCBjaGFyYWN0ZXJzLCBsZW5ndGgsIG51bGxwdHIpKTsKICAgICAgICAgICAgIGlmIChSZXRhaW5Q
dHI8Q0ZTdHJpbmdSZWY+IGZvdW5kRm9udE5hbWUgPSBhZG9wdENGKENURm9udENvcHlQb3N0U2Ny
aXB0TmFtZShmYWxsYmFja0ZvbnQuZ2V0KCkpKSkKLSAgICAgICAgICAgICAgICBzaW1wbGVGb250
RGF0YSA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGZvdW5kRm9udE5hbWUuZ2V0KCksIGZh
bHNlKTsKKyAgICAgICAgICAgICAgICBmb250ID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwg
Zm91bmRGb250TmFtZS5nZXQoKSwgZmFsc2UpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICB9CiAKLSAgICBpZiAoc2ltcGxlRm9udERhdGEpCi0gICAgICAgIHJldHVybiBz
aW1wbGVGb250RGF0YS5yZWxlYXNlKCk7CisgICAgaWYgKGZvbnQpCisgICAgICAgIHJldHVybiBm
b250LnJlbGVhc2UoKTsKIAogICAgIHJldHVybiBsYXN0UmVzb3J0RmFsbGJhY2tGb250KGRlc2Ny
aXB0aW9uKTsKIH0KIAotUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OnNpbWlsYXJG
b250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCitSZWZQ
dHI8Rm9udD4gRm9udENhY2hlOjpzaW1pbGFyRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGRl
c2NyaXB0aW9uKQogewogICAgIC8vIEF0dGVtcHQgdG8gZmluZCBhbiBhcHByb3ByaWF0ZSBmb250
IHVzaW5nIGEgbWF0Y2ggYmFzZWQgb24gdGhlIHByZXNlbmNlIG9mIGtleXdvcmRzIGluCiAgICAg
Ly8gdGhlIHJlcXVlc3RlZCBuYW1lcy4gRm9yIGV4YW1wbGUsIHdlJ2xsIG1hdGNoIGFueSBuYW1l
IHRoYXQgY29udGFpbnMgIkFyYWJpYyIgdG8gR2VlemEgUHJvLgotICAgIFJlZlB0cjxTaW1wbGVG
b250RGF0YT4gc2ltcGxlRm9udERhdGE7CisgICAgUmVmUHRyPEZvbnQ+IGZvbnQ7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlc2NyaXB0aW9uLmZhbWlseUNvdW50KCk7ICsraSkgewog
ICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSA9IGRlc2NyaXB0aW9uLmZhbWlseUF0
KGkpOwogICAgICAgICBpZiAoZmFtaWx5LmlzRW1wdHkoKSkKQEAgLTQ2MSw3ICs0NjEsNyBAQCBS
ZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6c2ltaWxhCiAgICAgICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IG1lbmxvKCJtZW5sbyIsIEF0b21pY1N0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpOwogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRv
bWljU3RyaW5nPiBjb3VyaWVyKCJjb3VyaWVyIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCk7CiAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShmYW1pbHksIG1vbmFjbykg
fHwgZXF1YWxJZ25vcmluZ0Nhc2UoZmFtaWx5LCBtZW5sbykpIHsKLSAgICAgICAgICAgIHNpbXBs
ZUZvbnREYXRhID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgY291cmllcik7CisgICAgICAg
ICAgICBmb250ID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgY291cmllcik7CiAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgfQogCkBAIC00NjksNyArNDY5LDcgQEAgUmVmUHRyPFNp
bXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OnNpbWlsYQogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8QXRvbWljU3RyaW5nPiBsdWNpZGFHcmFuZGUoImx1Y2lkYSBncmFuZGUiLCBBdG9taWNT
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPEF0b21pY1N0cmluZz4gdmVyZGFuYSgidmVyZGFuYSIsIEF0b21pY1N0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpOwogICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZmFtaWx5LCBs
dWNpZGFHcmFuZGUpKSB7Ci0gICAgICAgICAgICBzaW1wbGVGb250RGF0YSA9IGZvbnRGb3JGYW1p
bHkoZGVzY3JpcHRpb24sIHZlcmRhbmEpOworICAgICAgICAgICAgZm9udCA9IGZvbnRGb3JGYW1p
bHkoZGVzY3JpcHRpb24sIHZlcmRhbmEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IH0KIApAQCAtNDc5LDE1ICs0NzksMTYgQEAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2Fj
aGU6OnNpbWlsYQogICAgICAgICBzdGF0aWMgU3RyaW5nKiBtYXRjaFdvcmRzWzNdID0geyAmYXJh
YmljLmdldCgpLCAmcGFzaHRvLmdldCgpLCAmdXJkdS5nZXQoKSB9OwogICAgICAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBnZWV6YVBsYWluKCJHZWV6YVBybyIsIEF0b21p
Y1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8QXRvbWljU3RyaW5nPiBnZWV6YUJvbGQoIkdlZXphUHJvLUJvbGQiLCBBdG9taWNTdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCAz
ICYmICFzaW1wbGVGb250RGF0YTsgKytqKQorICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDMg
JiYgIWZvbnQ7ICsraikgewogICAgICAgICAgICAgaWYgKGZhbWlseS5jb250YWlucygqbWF0Y2hX
b3Jkc1tqXSwgZmFsc2UpKQotICAgICAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gZm9udEZv
ckZhbWlseShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQo
KSkgPyBnZWV6YUJvbGQgOiBnZWV6YVBsYWluKTsKKyAgICAgICAgICAgICAgICBmb250ID0gZm9u
dEZvckZhbWlseShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWln
aHQoKSkgPyBnZWV6YUJvbGQgOiBnZWV6YVBsYWluKTsKKyAgICAgICAgfQogICAgIH0KIAotICAg
IHJldHVybiBzaW1wbGVGb250RGF0YS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIGZvbnQucmVsZWFz
ZSgpOwogfQogCi1SZWY8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6bGFzdFJlc29ydEZhbGxi
YWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikKK1JlZjxGb250
PiBGb250Q2FjaGU6Omxhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBmb250RGVzY3JpcHRpb24pCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0
cmluZz4gZmFsbGJhY2tGb250RmFtaWx5KCIuUGhvbmVGYWxsYmFjayIsIEF0b21pY1N0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpOwogICAgIHJldHVybiAqZm9udEZvckZhbWlseShmb250RGVz
Y3JpcHRpb24sIGZhbGxiYWNrRm9udEZhbWlseSwgZmFsc2UpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL1NpbXBsZUZvbnREYXRhSU9TLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9TaW1wbGVGb250RGF0YUlP
Uy5tbQkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaW9zL1NpbXBsZUZvbnREYXRhSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3
IEBACiAgKi8KIAogI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJTaW1wbGVGb250RGF0YS5o
IgorI2ltcG9ydCAiRm9udC5oIgogCiAjaW1wb3J0ICJCbG9ja0V4Y2VwdGlvbnMuaCIKICNpbXBv
cnQgIkNvcmVHcmFwaGljc1NQSS5oIgpAQCAtNjcsNyArNjcsNyBAQCBzdGF0aWMgYm9vbCBmb250
SGFzVmVydGljYWxHbHlwaHMoQ1RGb250CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFNp
bXBsZUZvbnREYXRhOjpwbGF0Zm9ybUluaXQoKQordm9pZCBGb250OjpwbGF0Zm9ybUluaXQoKQog
ewogICAgIG1fc3ludGhldGljQm9sZE9mZnNldCA9IG1fcGxhdGZvcm1EYXRhLm1fc3ludGhldGlj
Qm9sZCA/IGNlaWxmKG1fcGxhdGZvcm1EYXRhLnNpemUoKSAgLyAyNC4wZikgOiAwLmY7CiAgICAg
bV9zcGFjZUdseXBoID0gMDsKQEAgLTEyOCw3ICsxMjgsNyBAQCB2b2lkIFNpbXBsZUZvbnREYXRh
OjpwbGF0Zm9ybUluaXQoKQogICAgIG1fZm9udE1ldHJpY3Muc2V0TGluZVNwYWNpbmcoMCk7CiB9
CiAKLXZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpCit2b2lkIEZv
bnQ6OnBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpCiB7CiAgICAgbV9hdmdDaGFyV2lkdGggPSAwOwog
ICAgIG1fbWF4Q2hhcldpZHRoID0gMDsKQEAgLTEzNywxMiArMTM3LDEyIEBAIHZvaWQgU2ltcGxl
Rm9udERhdGE6OnBsYXRmb3JtQ2hhcldpZHRoSW4KICAgICBpbml0Q2hhcldpZHRocygpOwogfQog
Ci1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1DcmVh
dGVTY2FsZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBzY2FsZUZhY3Rv
cikgY29uc3QKK1Bhc3NSZWZQdHI8Rm9udD4gRm9udDo6cGxhdGZvcm1DcmVhdGVTY2FsZWRGb250
RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3QKIHsK
ICAgICBpZiAoaXNDdXN0b21Gb250KCkpIHsKICAgICAgICAgRm9udFBsYXRmb3JtRGF0YSBzY2Fs
ZWRGb250RGF0YShtX3BsYXRmb3JtRGF0YSk7CiAgICAgICAgIHNjYWxlZEZvbnREYXRhLm1fc2l6
ZSA9IHNjYWxlZEZvbnREYXRhLm1fc2l6ZSAqIHNjYWxlRmFjdG9yOwotICAgICAgICByZXR1cm4g
U2ltcGxlRm9udERhdGE6OmNyZWF0ZShzY2FsZWRGb250RGF0YSwgdHJ1ZSwgZmFsc2UpOworICAg
ICAgICByZXR1cm4gRm9udDo6Y3JlYXRlKHNjYWxlZEZvbnREYXRhLCB0cnVlLCBmYWxzZSk7CiAg
ICAgfQogCiAgICAgZmxvYXQgc2l6ZSA9IG1fcGxhdGZvcm1EYXRhLnNpemUoKSAqIHNjYWxlRmFj
dG9yOwpAQCAtMTY3LDcgKzE2Nyw3IEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBs
ZUZvbnREYXQKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotdm9pZCBTaW1wbGVGb250RGF0YTo6
ZGV0ZXJtaW5lUGl0Y2goKQordm9pZCBGb250OjpkZXRlcm1pbmVQaXRjaCgpCiB7CiAgICAgQ1RG
b250UmVmIGN0Rm9udCA9IG1fcGxhdGZvcm1EYXRhLmZvbnQoKTsKICAgICBtX3RyZWF0QXNGaXhl
ZFBpdGNoID0gZmFsc2U7CkBAIC0xODQsMTIgKzE4NCwxMiBAQCB2b2lkIFNpbXBsZUZvbnREYXRh
OjpkZXRlcm1pbmVQaXRjaCgpCiAgICAgfQogfQogCi1DR0ZvbnRSZW5kZXJpbmdTdHlsZSBTaW1w
bGVGb250RGF0YTo6cmVuZGVyaW5nU3R5bGUoKSBjb25zdAorQ0dGb250UmVuZGVyaW5nU3R5bGUg
Rm9udDo6cmVuZGVyaW5nU3R5bGUoKSBjb25zdAogewogICAgIHJldHVybiBrQ0dGb250UmVuZGVy
aW5nU3R5bGVBbnRpYWxpYXNpbmcgfCBrQ0dGb250UmVuZGVyaW5nU3R5bGVTdWJwaXhlbFBvc2l0
aW9uaW5nIHwga0NHRm9udFJlbmRlcmluZ1N0eWxlU3VicGl4ZWxRdWFudGl6YXRpb24gfCBrQ0dG
b250QW50aWFsaWFzaW5nU3R5bGVVbmZpbHRlcmVkOwogfQogCi1ib29sIFNpbXBsZUZvbnREYXRh
OjphZHZhbmNlRm9yQ29sb3JCaXRtYXBGb250KEdseXBoLCBDR1NpemUmKSBjb25zdAorYm9vbCBG
b250OjphZHZhbmNlRm9yQ29sb3JCaXRtYXBGb250KEdseXBoLCBDR1NpemUmKSBjb25zdAogewog
ICAgIHJldHVybiBmYWxzZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCShy
ZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMv
Q29tcGxleFRleHRDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBA
QCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIGZsb2F0IHdpZHRoKHVuc2lnbmVkIGZyb20s
IHVuc2lnbmVkIGxlbiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0Zv
bnRzKQorICAgIGZsb2F0IHdpZHRoKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgSGFzaFNl
dDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMpCiAgICAgewogICAgICAgICBtX2NvbnRyb2xs
ZXItPmFkdmFuY2UoZnJvbSwgMCwgQnlXaG9sZUdseXBocywgZmFsbGJhY2tGb250cyk7CiAgICAg
ICAgIGZsb2F0IGJlZm9yZVdpZHRoID0gbV9jb250cm9sbGVyLT5ydW5XaWR0aFNvRmFyKCk7CkBA
IC05Niw3ICs5Niw3IEBAIHZvaWQgRm9udENhc2NhZGU6OmRlbGV0ZUxheW91dChUZXh0TGF5b3UK
ICAgICBkZWxldGUgbGF5b3V0OwogfQogCi1mbG9hdCBGb250Q2FzY2FkZTo6d2lkdGgoVGV4dExh
eW91dCYgbGF5b3V0LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIEhhc2hTZXQ8Y29uc3Qg
U2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cykKK2Zsb2F0IEZvbnRDYXNjYWRlOjp3aWR0
aChUZXh0TGF5b3V0JiBsYXlvdXQsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgSGFzaFNl
dDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMpCiB7CiAgICAgcmV0dXJuIGxheW91dC53aWR0
aChmcm9tLCBsZW4sIGZhbGxiYWNrRm9udHMpOwogfQpAQCAtMTE1LDcgKzExNSw3IEBAIHN0YXRp
YyBpbmxpbmUgQ0dGbG9hdCBjZWlsQ0dGbG9hdChDR0Zsb2EKICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Q0dGbG9hdD4oY2VpbChmKSk7CiB9CiAKLUNvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxl
eFRleHRDb250cm9sbGVyKGNvbnN0IEZvbnRDYXNjYWRlKiBmb250LCBjb25zdCBUZXh0UnVuJiBy
dW4sIGJvb2wgbWF5VXNlTmF0dXJhbFdyaXRpbmdEaXJlY3Rpb24sIEhhc2hTZXQ8Y29uc3QgU2lt
cGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cywgYm9vbCBmb3JUZXh0RW1waGFzaXMpCitDb21w
bGV4VGV4dENvbnRyb2xsZXI6OkNvbXBsZXhUZXh0Q29udHJvbGxlcihjb25zdCBGb250Q2FzY2Fk
ZSogZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBib29sIG1heVVzZU5hdHVyYWxXcml0aW5nRGly
ZWN0aW9uLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cywgYm9vbCBmb3JUZXh0
RW1waGFzaXMpCiAgICAgOiBtX2ZvbnQoKmZvbnQpCiAgICAgLCBtX3J1bihydW4pCiAgICAgLCBt
X2lzTFRST25seSh0cnVlKQpAQCAtMjkxLDcgKzI5MSw3IEBAIHZvaWQgQ29tcGxleFRleHRDb250
cm9sbGVyOjpjb2xsZWN0Q29tcGwKICAgICBpZiAoIW1fZW5kKQogICAgICAgICByZXR1cm47CiAK
LSAgICAvLyBXZSBicmVhayB1cCBnbHlwaCBydW4gZ2VuZXJhdGlvbiBmb3IgdGhlIHN0cmluZyBi
eSBGb250RGF0YS4KKyAgICAvLyBXZSBicmVhayB1cCBnbHlwaCBydW4gZ2VuZXJhdGlvbiBmb3Ig
dGhlIHN0cmluZyBieSBGb250LgogICAgIGNvbnN0IFVDaGFyKiBjcDsKIAogICAgIGlmIChtX3J1
bi5pczhCaXQoKSkgewpAQCAtMzA4LDkgKzMwOCw5IEBAIHZvaWQgQ29tcGxleFRleHRDb250cm9s
bGVyOjpjb2xsZWN0Q29tcGwKICAgICBjb25zdCBVQ2hhciogY3VyciA9IGNwOwogICAgIGNvbnN0
IFVDaGFyKiBlbmQgPSBjcCArIG1fZW5kOwogCi0gICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGZv
bnREYXRhOworICAgIGNvbnN0IEZvbnQqIGZvbnQ7CiAgICAgYm9vbCBpc01pc3NpbmdHbHlwaDsK
LSAgICBjb25zdCBTaW1wbGVGb250RGF0YSogbmV4dEZvbnREYXRhOworICAgIGNvbnN0IEZvbnQq
IG5leHRGb250OwogICAgIGJvb2wgbmV4dElzTWlzc2luZ0dseXBoOwogCiAgICAgdW5zaWduZWQg
bWFya0NvdW50OwpAQCAtMzMyLDEyICszMzIsMTIgQEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xs
ZXI6OmNvbGxlY3RDb21wbAogICAgIH0KIAogICAgIG5leHRJc01pc3NpbmdHbHlwaCA9IGZhbHNl
OwotICAgIG5leHRGb250RGF0YSA9IG1fZm9udC5mb250RGF0YUZvckNvbWJpbmluZ0NoYXJhY3Rl
clNlcXVlbmNlKHNlcXVlbmNlU3RhcnQsIGN1cnIgLSBzZXF1ZW5jZVN0YXJ0LCBuZXh0SXNTbWFs
bENhcHMgPyBTbWFsbENhcHNWYXJpYW50IDogTm9ybWFsVmFyaWFudCk7Ci0gICAgaWYgKCFuZXh0
Rm9udERhdGEpCisgICAgbmV4dEZvbnQgPSBtX2ZvbnQuZm9udEZvckNvbWJpbmluZ0NoYXJhY3Rl
clNlcXVlbmNlKHNlcXVlbmNlU3RhcnQsIGN1cnIgLSBzZXF1ZW5jZVN0YXJ0LCBuZXh0SXNTbWFs
bENhcHMgPyBTbWFsbENhcHNWYXJpYW50IDogTm9ybWFsVmFyaWFudCk7CisgICAgaWYgKCFuZXh0
Rm9udCkKICAgICAgICAgbmV4dElzTWlzc2luZ0dseXBoID0gdHJ1ZTsKIAogICAgIHdoaWxlIChj
dXJyIDwgZW5kKSB7Ci0gICAgICAgIGZvbnREYXRhID0gbmV4dEZvbnREYXRhOworICAgICAgICBm
b250ID0gbmV4dEZvbnQ7CiAgICAgICAgIGlzTWlzc2luZ0dseXBoID0gbmV4dElzTWlzc2luZ0ds
eXBoOwogICAgICAgICBpc1NtYWxsQ2FwcyA9IG5leHRJc1NtYWxsQ2FwczsKICAgICAgICAgaW50
IGluZGV4ID0gY3VyciAtIGNwOwpAQCAtMzU4LDE3ICszNTgsMTcgQEAgdm9pZCBDb21wbGV4VGV4
dENvbnRyb2xsZXI6OmNvbGxlY3RDb21wbAogCiAgICAgICAgIG5leHRJc01pc3NpbmdHbHlwaCA9
IGZhbHNlOwogICAgICAgICBpZiAoYmFzZUNoYXJhY3RlciA9PSB6ZXJvV2lkdGhKb2luZXIpCi0g
ICAgICAgICAgICBuZXh0Rm9udERhdGEgPSBmb250RGF0YTsKKyAgICAgICAgICAgIG5leHRGb250
ID0gZm9udDsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBuZXh0Rm9udERhdGEgPSBtX2Zv
bnQuZm9udERhdGFGb3JDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjcCArIGluZGV4LCBjdXJy
IC0gY3AgLSBpbmRleCwgbmV4dElzU21hbGxDYXBzID8gU21hbGxDYXBzVmFyaWFudCA6IE5vcm1h
bFZhcmlhbnQpOwotICAgICAgICAgICAgaWYgKCFuZXh0Rm9udERhdGEpCisgICAgICAgICAgICBu
ZXh0Rm9udCA9IG1fZm9udC5mb250Rm9yQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY3AgKyBp
bmRleCwgY3VyciAtIGNwIC0gaW5kZXgsIG5leHRJc1NtYWxsQ2FwcyA/IFNtYWxsQ2Fwc1Zhcmlh
bnQgOiBOb3JtYWxWYXJpYW50KTsKKyAgICAgICAgICAgIGlmICghbmV4dEZvbnQpCiAgICAgICAg
ICAgICAgICAgbmV4dElzTWlzc2luZ0dseXBoID0gdHJ1ZTsKICAgICAgICAgfQogCi0gICAgICAg
IGlmIChuZXh0Rm9udERhdGEgIT0gZm9udERhdGEgfHwgbmV4dElzTWlzc2luZ0dseXBoICE9IGlz
TWlzc2luZ0dseXBoKSB7CisgICAgICAgIGlmIChuZXh0Rm9udCAhPSBmb250IHx8IG5leHRJc01p
c3NpbmdHbHlwaCAhPSBpc01pc3NpbmdHbHlwaCkgewogICAgICAgICAgICAgaW50IGl0ZW1TdGFy
dCA9IHN0YXRpY19jYXN0PGludD4oaW5kZXhPZkZvbnRUcmFuc2l0aW9uKTsKICAgICAgICAgICAg
IGludCBpdGVtTGVuZ3RoID0gaW5kZXggLSBpbmRleE9mRm9udFRyYW5zaXRpb247Ci0gICAgICAg
ICAgICBjb2xsZWN0Q29tcGxleFRleHRSdW5zRm9yQ2hhcmFjdGVycygoaXNTbWFsbENhcHMgPyBt
X3NtYWxsQ2Fwc0J1ZmZlci5kYXRhKCkgOiBjcCkgKyBpdGVtU3RhcnQsIGl0ZW1MZW5ndGgsIGl0
ZW1TdGFydCwgIWlzTWlzc2luZ0dseXBoID8gZm9udERhdGEgOiAwKTsKKyAgICAgICAgICAgIGNv
bGxlY3RDb21wbGV4VGV4dFJ1bnNGb3JDaGFyYWN0ZXJzKChpc1NtYWxsQ2FwcyA/IG1fc21hbGxD
YXBzQnVmZmVyLmRhdGEoKSA6IGNwKSArIGl0ZW1TdGFydCwgaXRlbUxlbmd0aCwgaXRlbVN0YXJ0
LCAhaXNNaXNzaW5nR2x5cGggPyBmb250IDogMCk7CiAgICAgICAgICAgICBpbmRleE9mRm9udFRy
YW5zaXRpb24gPSBpbmRleDsKICAgICAgICAgfQogICAgIH0KQEAgLTM3Niw3ICszNzYsNyBAQCB2
b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Y29sbGVjdENvbXBsCiAgICAgaW50IGl0ZW1MZW5n
dGggPSBtX2VuZCAtIGluZGV4T2ZGb250VHJhbnNpdGlvbjsKICAgICBpZiAoaXRlbUxlbmd0aCkg
ewogICAgICAgICBpbnQgaXRlbVN0YXJ0ID0gaW5kZXhPZkZvbnRUcmFuc2l0aW9uOwotICAgICAg
ICBjb2xsZWN0Q29tcGxleFRleHRSdW5zRm9yQ2hhcmFjdGVycygobmV4dElzU21hbGxDYXBzID8g
bV9zbWFsbENhcHNCdWZmZXIuZGF0YSgpIDogY3ApICsgaXRlbVN0YXJ0LCBpdGVtTGVuZ3RoLCBp
dGVtU3RhcnQsICFuZXh0SXNNaXNzaW5nR2x5cGggPyBuZXh0Rm9udERhdGEgOiAwKTsKKyAgICAg
ICAgY29sbGVjdENvbXBsZXhUZXh0UnVuc0ZvckNoYXJhY3RlcnMoKG5leHRJc1NtYWxsQ2FwcyA/
IG1fc21hbGxDYXBzQnVmZmVyLmRhdGEoKSA6IGNwKSArIGl0ZW1TdGFydCwgaXRlbUxlbmd0aCwg
aXRlbVN0YXJ0LCAhbmV4dElzTWlzc2luZ0dseXBoID8gbmV4dEZvbnQgOiAwKTsKICAgICB9CiAK
ICAgICBpZiAoIW1fcnVuLmx0cigpKQpAQCAtNDY5LDcgKzQ2OSw3IEBAIHVuc2lnbmVkIENvbXBs
ZXhUZXh0Q29udHJvbGxlcjo6aW5jcmVtZW4KICAgICByZXR1cm4gaW5kZXhPZkN1cnJlbnRSdW4o
bGVmdG1vc3RHbHlwaCk7CiB9CiAKLXZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjphZHZhbmNl
KHVuc2lnbmVkIG9mZnNldCwgR2x5cGhCdWZmZXIqIGdseXBoQnVmZmVyLCBHbHlwaEl0ZXJhdGlv
blN0eWxlIGl0ZXJhdGlvblN0eWxlLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZh
bGxiYWNrRm9udHMpCit2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6YWR2YW5jZSh1bnNpZ25l
ZCBvZmZzZXQsIEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZlciwgR2x5cGhJdGVyYXRpb25TdHlsZSBp
dGVyYXRpb25TdHlsZSwgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMpCiB7CiAg
ICAgaWYgKHN0YXRpY19jYXN0PGludD4ob2Zmc2V0KSA+IG1fZW5kKQogICAgICAgICBvZmZzZXQg
PSBtX2VuZDsKQEAgLTQ5NCw4ICs0OTQsOCBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6
YWR2YW5jZSh1bnNpCiAgICAgICAgIHNpemVfdCBnbHlwaENvdW50ID0gY29tcGxleFRleHRSdW4u
Z2x5cGhDb3VudCgpOwogICAgICAgICB1bnNpZ25lZCBnID0gbHRyID8gbV9nbHlwaEluQ3VycmVu
dFJ1biA6IGdseXBoQ291bnQgLSAxIC0gbV9nbHlwaEluQ3VycmVudFJ1bjsKICAgICAgICAgdW5z
aWduZWQgayA9IGxlZnRtb3N0R2x5cGggKyBnOwotICAgICAgICBpZiAoZmFsbGJhY2tGb250cyAm
JiAmY29tcGxleFRleHRSdW4uZm9udERhdGEoKSAhPSAmbV9mb250LnByaW1hcnlGb250RGF0YSgp
KQotICAgICAgICAgICAgZmFsbGJhY2tGb250cy0+YWRkKCZjb21wbGV4VGV4dFJ1bi5mb250RGF0
YSgpKTsKKyAgICAgICAgaWYgKGZhbGxiYWNrRm9udHMgJiYgJmNvbXBsZXhUZXh0UnVuLmZvbnQo
KSAhPSAmbV9mb250LnByaW1hcnlGb250KCkpCisgICAgICAgICAgICBmYWxsYmFja0ZvbnRzLT5h
ZGQoJmNvbXBsZXhUZXh0UnVuLmZvbnQoKSk7CiAKICAgICAgICAgLy8gV2UgbXVzdCBzdG9yZSB0
aGUgaW5pdGlhbCBhZHZhbmNlIGZvciB0aGUgZmlyc3QgZ2x5cGggd2UgYXJlIGdvaW5nIHRvIGRy
YXcuCiAgICAgICAgIC8vIFdoZW4gbGVmdG1vc3RHbHlwaCBpcyAwLCBpdCByZXByZXNlbnRzIHRo
ZSBmaXJzdCBnbHlwaCB0byBkcmF3LCB0YWtpbmcgaW50bwpAQCAtNTIwLDcgKzUyMCw3IEBAIHZv
aWQgQ29tcGxleFRleHRDb250cm9sbGVyOjphZHZhbmNlKHVuc2kKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAKICAgICAgICAgICAgIGlmIChnbHlwaEJ1ZmZlciAmJiAhbV9jaGFyYWN0ZXJJbkN1
cnJlbnRHbHlwaCkKLSAgICAgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+YWRkKG1fYWRqdXN0ZWRH
bHlwaHNba10sICZjb21wbGV4VGV4dFJ1bi5mb250RGF0YSgpLCBhZGp1c3RlZEFkdmFuY2UsIGNv
bXBsZXhUZXh0UnVuLmluZGV4QXQobV9nbHlwaEluQ3VycmVudFJ1bikpOworICAgICAgICAgICAg
ICAgIGdseXBoQnVmZmVyLT5hZGQobV9hZGp1c3RlZEdseXBoc1trXSwgJmNvbXBsZXhUZXh0UnVu
LmZvbnQoKSwgYWRqdXN0ZWRBZHZhbmNlLCBjb21wbGV4VGV4dFJ1bi5pbmRleEF0KG1fZ2x5cGhJ
bkN1cnJlbnRSdW4pKTsKIAogICAgICAgICAgICAgdW5zaWduZWQgb2xkQ2hhcmFjdGVySW5DdXJy
ZW50R2x5cGggPSBtX2NoYXJhY3RlckluQ3VycmVudEdseXBoOwogICAgICAgICAgICAgbV9jaGFy
YWN0ZXJJbkN1cnJlbnRHbHlwaCA9IHN0ZDo6bWluKG1fY3VycmVudENoYXJhY3RlciAtIGNvbXBs
ZXhUZXh0UnVuLnN0cmluZ0xvY2F0aW9uKCksIGdseXBoRW5kT2Zmc2V0KSAtIGdseXBoU3RhcnRP
ZmZzZXQ7CkBAIC01NjYsOSArNTY2LDkgQEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmFk
anVzdEdseXBocwogICAgIGZvciAoc2l6ZV90IHIgPSAwOyByIDwgcnVuQ291bnQ7ICsrcikgewog
ICAgICAgICBDb21wbGV4VGV4dFJ1biYgY29tcGxleFRleHRSdW4gPSAqbV9jb21wbGV4VGV4dFJ1
bnNbcl07CiAgICAgICAgIHVuc2lnbmVkIGdseXBoQ291bnQgPSBjb21wbGV4VGV4dFJ1bi5nbHlw
aENvdW50KCk7Ci0gICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhJiBmb250RGF0YSA9IGNvbXBs
ZXhUZXh0UnVuLmZvbnREYXRhKCk7CisgICAgICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBjb21wbGV4
VGV4dFJ1bi5mb250KCk7CiAjaWYgUExBVEZPUk0oSU9TKQotICAgICAgICBib29sIGlzRW1vamkg
PSBmb250RGF0YS5wbGF0Zm9ybURhdGEoKS5tX2lzRW1vamk7CisgICAgICAgIGJvb2wgaXNFbW9q
aSA9IGZvbnQucGxhdGZvcm1EYXRhKCkubV9pc0Vtb2ppOwogI2VuZGlmCiAKICAgICAgICAgLy8g
UmVwcmVzZW50IHRoZSBpbml0aWFsIGFkdmFuY2UgZm9yIGEgdGV4dCBydW4gYnkgYWRqdXN0aW5n
IHRoZSBhZHZhbmNlCkBAIC01ODgsOCArNTg4LDggQEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xs
ZXI6OmFkanVzdEdseXBocwogICAgICAgICBjb25zdCBDR1NpemUqIGFkdmFuY2VzID0gY29tcGxl
eFRleHRSdW4uYWR2YW5jZXMoKTsKIAogICAgICAgICBib29sIGxhc3RSdW4gPSByICsgMSA9PSBy
dW5Db3VudDsKLSAgICAgICAgYm9vbCByb3VuZHNBZHZhbmNlcyA9ICFtX2ZvbnQuaXNQcmludGVy
Rm9udCgpICYmIGZvbnREYXRhLnBsYXRmb3JtRGF0YSgpLnJvdW5kc0dseXBoQWR2YW5jZXMoKTsK
LSAgICAgICAgZmxvYXQgc3BhY2VXaWR0aCA9IGZvbnREYXRhLnNwYWNlV2lkdGgoKSAtIGZvbnRE
YXRhLnN5bnRoZXRpY0JvbGRPZmZzZXQoKTsKKyAgICAgICAgYm9vbCByb3VuZHNBZHZhbmNlcyA9
ICFtX2ZvbnQuaXNQcmludGVyRm9udCgpICYmIGZvbnQucGxhdGZvcm1EYXRhKCkucm91bmRzR2x5
cGhBZHZhbmNlcygpOworICAgICAgICBmbG9hdCBzcGFjZVdpZHRoID0gZm9udC5zcGFjZVdpZHRo
KCkgLSBmb250LnN5bnRoZXRpY0JvbGRPZmZzZXQoKTsKICAgICAgICAgQ0dGbG9hdCByb3VuZGVk
U3BhY2VXaWR0aCA9IHJvdW5kQ0dGbG9hdChzcGFjZVdpZHRoKTsKICAgICAgICAgY29uc3QgVUNo
YXIqIGNwID0gY29tcGxleFRleHRSdW4uY2hhcmFjdGVycygpOwogICAgICAgICBDR1BvaW50IGds
eXBoT3JpZ2luID0gQ0dQb2ludFplcm87CkBAIC02MTYsMzMgKzYxNiwzMyBAQCB2b2lkIENvbXBs
ZXhUZXh0Q29udHJvbGxlcjo6YWRqdXN0R2x5cGhzCiAgICAgICAgICAgICAgICAgbmV4dENoID0g
KihtX2NvbXBsZXhUZXh0UnVuc1tyICsgMV0tPmNoYXJhY3RlcnMoKSArIG1fY29tcGxleFRleHRS
dW5zW3IgKyAxXS0+aW5kZXhBdCgwKSk7CiAKICAgICAgICAgICAgIGJvb2wgdHJlYXRBc1NwYWNl
ID0gRm9udENhc2NhZGU6OnRyZWF0QXNTcGFjZShjaCk7Ci0gICAgICAgICAgICBDR0dseXBoIGds
eXBoID0gdHJlYXRBc1NwYWNlID8gZm9udERhdGEuc3BhY2VHbHlwaCgpIDogZ2x5cGhzW2ldOwor
ICAgICAgICAgICAgQ0dHbHlwaCBnbHlwaCA9IHRyZWF0QXNTcGFjZSA/IGZvbnQuc3BhY2VHbHlw
aCgpIDogZ2x5cGhzW2ldOwogICAgICAgICAgICAgQ0dTaXplIGFkdmFuY2UgPSB0cmVhdEFzU3Bh
Y2UgPyBDR1NpemVNYWtlKHNwYWNlV2lkdGgsIGFkdmFuY2VzW2ldLmhlaWdodCkgOiBhZHZhbmNl
c1tpXTsKICNpZiBQTEFURk9STShJT1MpCiAgICAgICAgICAgICBpZiAoaXNFbW9qaSAmJiBhZHZh
bmNlLndpZHRoKQotICAgICAgICAgICAgICAgIGFkdmFuY2Uud2lkdGggPSBmb250RGF0YS53aWR0
aEZvckdseXBoKGdseXBoKTsKKyAgICAgICAgICAgICAgICBhZHZhbmNlLndpZHRoID0gZm9udC53
aWR0aEZvckdseXBoKGdseXBoKTsKICNlbmRpZgogCiAgICAgICAgICAgICBpZiAoY2ggPT0gJ1x0
JyAmJiBtX3J1bi5hbGxvd1RhYnMoKSkKLSAgICAgICAgICAgICAgICBhZHZhbmNlLndpZHRoID0g
bV9mb250LnRhYldpZHRoKGZvbnREYXRhLCBtX3J1bi50YWJTaXplKCksIG1fcnVuLnhQb3MoKSAr
IG1fdG90YWxXaWR0aCArIHdpZHRoU2luY2VMYXN0Q29tbWl0KTsKKyAgICAgICAgICAgICAgICBh
ZHZhbmNlLndpZHRoID0gbV9mb250LnRhYldpZHRoKGZvbnQsIG1fcnVuLnRhYlNpemUoKSwgbV9y
dW4ueFBvcygpICsgbV90b3RhbFdpZHRoICsgd2lkdGhTaW5jZUxhc3RDb21taXQpOwogICAgICAg
ICAgICAgZWxzZSBpZiAoRm9udENhc2NhZGU6OnRyZWF0QXNaZXJvV2lkdGhTcGFjZShjaCkgJiYg
IXRyZWF0QXNTcGFjZSkgewogICAgICAgICAgICAgICAgIGFkdmFuY2Uud2lkdGggPSAwOwotICAg
ICAgICAgICAgICAgIGdseXBoID0gZm9udERhdGEuc3BhY2VHbHlwaCgpOworICAgICAgICAgICAg
ICAgIGdseXBoID0gZm9udC5zcGFjZUdseXBoKCk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAg
ICAgIGZsb2F0IHJvdW5kZWRBZHZhbmNlV2lkdGggPSByb3VuZGYoYWR2YW5jZS53aWR0aCk7CiAg
ICAgICAgICAgICBpZiAocm91bmRzQWR2YW5jZXMpCiAgICAgICAgICAgICAgICAgYWR2YW5jZS53
aWR0aCA9IHJvdW5kZWRBZHZhbmNlV2lkdGg7CiAKLSAgICAgICAgICAgIGFkdmFuY2Uud2lkdGgg
Kz0gZm9udERhdGEuc3ludGhldGljQm9sZE9mZnNldCgpOworICAgICAgICAgICAgYWR2YW5jZS53
aWR0aCArPSBmb250LnN5bnRoZXRpY0JvbGRPZmZzZXQoKTsKIAogIAogICAgICAgICAgICAgLy8g
V2Ugc3BlY2lhbCBjYXNlIHNwYWNlcyBpbiB0d28gd2F5cyB3aGVuIGFwcGx5aW5nIHdvcmQgcm91
bmRpbmcuIAogICAgICAgICAgICAgLy8gRmlyc3QsIHdlIHJvdW5kIHNwYWNlcyB0byBhbiBhZGp1
c3RlZCB3aWR0aCBpbiBhbGwgZm9udHMuIAogICAgICAgICAgICAgLy8gU2Vjb25kLCBpbiBmaXhl
ZC1waXRjaCBmb250cyB3ZSBlbnN1cmUgdGhhdCBhbGwgZ2x5cGhzIHRoYXQgCiAgICAgICAgICAg
ICAvLyBtYXRjaCB0aGUgd2lkdGggb2YgdGhlIHNwYWNlIGdseXBoIGhhdmUgdGhlIHNhbWUgd2lk
dGggYXMgdGhlIHNwYWNlIGdseXBoLiAKLSAgICAgICAgICAgIGlmIChtX3J1bi5hcHBseVdvcmRS
b3VuZGluZygpICYmIHJvdW5kZWRBZHZhbmNlV2lkdGggPT0gcm91bmRlZFNwYWNlV2lkdGggJiYg
KGZvbnREYXRhLnBpdGNoKCkgPT0gRml4ZWRQaXRjaCB8fCBnbHlwaCA9PSBmb250RGF0YS5zcGFj
ZUdseXBoKCkpKQotICAgICAgICAgICAgICAgIGFkdmFuY2Uud2lkdGggPSBmb250RGF0YS5hZGp1
c3RlZFNwYWNlV2lkdGgoKTsKKyAgICAgICAgICAgIGlmIChtX3J1bi5hcHBseVdvcmRSb3VuZGlu
ZygpICYmIHJvdW5kZWRBZHZhbmNlV2lkdGggPT0gcm91bmRlZFNwYWNlV2lkdGggJiYgKGZvbnQu
cGl0Y2goKSA9PSBGaXhlZFBpdGNoIHx8IGdseXBoID09IGZvbnQuc3BhY2VHbHlwaCgpKSkKKyAg
ICAgICAgICAgICAgICBhZHZhbmNlLndpZHRoID0gZm9udC5hZGp1c3RlZFNwYWNlV2lkdGgoKTsK
IAogICAgICAgICAgICAgaWYgKGhhc0V4dHJhU3BhY2luZykgewogICAgICAgICAgICAgICAgIC8v
IElmIHdlJ3JlIGEgZ2x5cGggd2l0aCBhbiBhZHZhbmNlLCBnbyBhaGVhZCBhbmQgYWRkIGluIGxl
dHRlci1zcGFjaW5nLgpAQCAtNzE3LDcgKzcxNyw3IEBAIHZvaWQgQ29tcGxleFRleHRDb250cm9s
bGVyOjphZGp1c3RHbHlwaHMKICAgICAgICAgICAgIG1fYWRqdXN0ZWRBZHZhbmNlcy5hcHBlbmQo
YWR2YW5jZSk7CiAgICAgICAgICAgICBtX2FkanVzdGVkR2x5cGhzLmFwcGVuZChnbHlwaCk7CiAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIEZsb2F0UmVjdCBnbHlwaEJvdW5kcyA9IGZvbnREYXRh
LmJvdW5kc0ZvckdseXBoKGdseXBoKTsKKyAgICAgICAgICAgIEZsb2F0UmVjdCBnbHlwaEJvdW5k
cyA9IGZvbnQuYm91bmRzRm9yR2x5cGgoZ2x5cGgpOwogICAgICAgICAgICAgZ2x5cGhCb3VuZHMu
bW92ZShnbHlwaE9yaWdpbi54LCBnbHlwaE9yaWdpbi55KTsKICAgICAgICAgICAgIG1fbWluR2x5
cGhCb3VuZGluZ0JveFggPSBzdGQ6Om1pbihtX21pbkdseXBoQm91bmRpbmdCb3hYLCBnbHlwaEJv
dW5kcy54KCkpOwogICAgICAgICAgICAgbV9tYXhHbHlwaEJvdW5kaW5nQm94WCA9IHN0ZDo6bWF4
KG1fbWF4R2x5cGhCb3VuZGluZ0JveFgsIGdseXBoQm91bmRzLm1heFgoKSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBs
ZXhUZXh0Q29udHJvbGxlci5oCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQxLDcgKzQxLDcgQEAgdHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19DVExpbmUgKiBDVExp
bmVSZQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGb250Q2FzY2FkZTsKLWNsYXNzIFNp
bXBsZUZvbnREYXRhOworY2xhc3MgRm9udDsKIGNsYXNzIFRleHRSdW47CiAKIGVudW0gR2x5cGhJ
dGVyYXRpb25TdHlsZSB7IEluY2x1ZGVQYXJ0aWFsR2x5cGhzLCBCeVdob2xlR2x5cGhzIH07CkBA
IC01MCwxMCArNTAsMTAgQEAgZW51bSBHbHlwaEl0ZXJhdGlvblN0eWxlIHsgSW5jbHVkZVBhcnRp
YQogLy8gY29tcGxleCBzY3JpcHRzIG9uIE9TIFguCiBjbGFzcyBDb21wbGV4VGV4dENvbnRyb2xs
ZXIgewogcHVibGljOgotICAgIENvbXBsZXhUZXh0Q29udHJvbGxlcihjb25zdCBGb250Q2FzY2Fk
ZSosIGNvbnN0IFRleHRSdW4mLCBib29sIG1heVVzZU5hdHVyYWxXcml0aW5nRGlyZWN0aW9uID0g
ZmFsc2UsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDAs
IGJvb2wgZm9yVGV4dEVtcGhhc2lzID0gZmFsc2UpOworICAgIENvbXBsZXhUZXh0Q29udHJvbGxl
cihjb25zdCBGb250Q2FzY2FkZSosIGNvbnN0IFRleHRSdW4mLCBib29sIG1heVVzZU5hdHVyYWxX
cml0aW5nRGlyZWN0aW9uID0gZmFsc2UsIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0Zv
bnRzID0gMCwgYm9vbCBmb3JUZXh0RW1waGFzaXMgPSBmYWxzZSk7CiAKICAgICAvLyBBZHZhbmNl
IGFuZCBlbWl0IGdseXBocyB1cCB0byB0aGUgc3BlY2lmaWVkIGNoYXJhY3Rlci4KLSAgICB2b2lk
IGFkdmFuY2UodW5zaWduZWQgdG8sIEdseXBoQnVmZmVyKiA9IDAsIEdseXBoSXRlcmF0aW9uU3R5
bGUgPSBJbmNsdWRlUGFydGlhbEdseXBocywgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+
KiBmYWxsYmFja0ZvbnRzID0gMCk7CisgICAgdm9pZCBhZHZhbmNlKHVuc2lnbmVkIHRvLCBHbHlw
aEJ1ZmZlciogPSAwLCBHbHlwaEl0ZXJhdGlvblN0eWxlID0gSW5jbHVkZVBhcnRpYWxHbHlwaHMs
IEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzID0gMCk7CiAKICAgICAvLyBDb21w
dXRlIHRoZSBjaGFyYWN0ZXIgb2Zmc2V0IGZvciBhIGdpdmVuIHggY29vcmRpbmF0ZS4KICAgICBp
bnQgb2Zmc2V0Rm9yUG9zaXRpb24oZmxvYXQgeCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocyk7
CkBAIC03MywxOCArNzMsMTggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBjbGFzcyBDb21wbGV4
VGV4dFJ1biA6IHB1YmxpYyBSZWZDb3VudGVkPENvbXBsZXhUZXh0UnVuPiB7CiAgICAgcHVibGlj
OgotICAgICAgICBzdGF0aWMgUmVmPENvbXBsZXhUZXh0UnVuPiBjcmVhdGUoQ1RSdW5SZWYgY3RS
dW4sIGNvbnN0IFNpbXBsZUZvbnREYXRhJiBmb250RGF0YSwgY29uc3QgVUNoYXIqIGNoYXJhY3Rl
cnMsIHVuc2lnbmVkIHN0cmluZ0xvY2F0aW9uLCBzaXplX3Qgc3RyaW5nTGVuZ3RoLCBDRlJhbmdl
IHJ1blJhbmdlKQorICAgICAgICBzdGF0aWMgUmVmPENvbXBsZXhUZXh0UnVuPiBjcmVhdGUoQ1RS
dW5SZWYgY3RSdW4sIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1
bnNpZ25lZCBzdHJpbmdMb2NhdGlvbiwgc2l6ZV90IHN0cmluZ0xlbmd0aCwgQ0ZSYW5nZSBydW5S
YW5nZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ29tcGxl
eFRleHRSdW4oY3RSdW4sIGZvbnREYXRhLCBjaGFyYWN0ZXJzLCBzdHJpbmdMb2NhdGlvbiwgc3Ry
aW5nTGVuZ3RoLCBydW5SYW5nZSkpOworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
Q29tcGxleFRleHRSdW4oY3RSdW4sIGZvbnQsIGNoYXJhY3RlcnMsIHN0cmluZ0xvY2F0aW9uLCBz
dHJpbmdMZW5ndGgsIHJ1blJhbmdlKSk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgUmVm
PENvbXBsZXhUZXh0UnVuPiBjcmVhdGUoY29uc3QgU2ltcGxlRm9udERhdGEmIGZvbnREYXRhLCBj
b25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24sIHNpemVfdCBz
dHJpbmdMZW5ndGgsIGJvb2wgbHRyKQorICAgICAgICBzdGF0aWMgUmVmPENvbXBsZXhUZXh0UnVu
PiBjcmVhdGUoY29uc3QgRm9udCYgZm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2ln
bmVkIHN0cmluZ0xvY2F0aW9uLCBzaXplX3Qgc3RyaW5nTGVuZ3RoLCBib29sIGx0cikKICAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ29tcGxleFRleHRSdW4oZm9u
dERhdGEsIGNoYXJhY3RlcnMsIHN0cmluZ0xvY2F0aW9uLCBzdHJpbmdMZW5ndGgsIGx0cikpOwor
ICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ29tcGxleFRleHRSdW4oZm9udCwgY2hh
cmFjdGVycywgc3RyaW5nTG9jYXRpb24sIHN0cmluZ0xlbmd0aCwgbHRyKSk7CiAgICAgICAgIH0K
IAogICAgICAgICB1bnNpZ25lZCBnbHlwaENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9nbHlwaENv
dW50OyB9Ci0gICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhJiBmb250RGF0YSgpIGNvbnN0IHsg
cmV0dXJuIG1fZm9udERhdGE7IH0KKyAgICAgICAgY29uc3QgRm9udCYgZm9udCgpIGNvbnN0IHsg
cmV0dXJuIG1fZm9udDsgfQogICAgICAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycygpIGNvbnN0
IHsgcmV0dXJuIG1fY2hhcmFjdGVyczsgfQogICAgICAgICB1bnNpZ25lZCBzdHJpbmdMb2NhdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nTG9jYXRpb247IH0KICAgICAgICAgc2l6ZV90IHN0
cmluZ0xlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nTGVuZ3RoOyB9CkBAIC0xMDAsMTEg
KzEwMCwxMSBAQCBwcml2YXRlOgogICAgICAgICB2b2lkIHNldElzTm9uTW9ub3RvbmljKCk7CiAK
ICAgICBwcml2YXRlOgotICAgICAgICBDb21wbGV4VGV4dFJ1bihDVFJ1blJlZiwgY29uc3QgU2lt
cGxlRm9udERhdGEmLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgc3RyaW5nTG9j
YXRpb24sIHNpemVfdCBzdHJpbmdMZW5ndGgsIENGUmFuZ2UgcnVuUmFuZ2UpOwotICAgICAgICBD
b21wbGV4VGV4dFJ1bihjb25zdCBTaW1wbGVGb250RGF0YSYsIGNvbnN0IFVDaGFyKiBjaGFyYWN0
ZXJzLCB1bnNpZ25lZCBzdHJpbmdMb2NhdGlvbiwgc2l6ZV90IHN0cmluZ0xlbmd0aCwgYm9vbCBs
dHIpOworICAgICAgICBDb21wbGV4VGV4dFJ1bihDVFJ1blJlZiwgY29uc3QgRm9udCYsIGNvbnN0
IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBzdHJpbmdMb2NhdGlvbiwgc2l6ZV90IHN0cmlu
Z0xlbmd0aCwgQ0ZSYW5nZSBydW5SYW5nZSk7CisgICAgICAgIENvbXBsZXhUZXh0UnVuKGNvbnN0
IEZvbnQmLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24s
IHNpemVfdCBzdHJpbmdMZW5ndGgsIGJvb2wgbHRyKTsKIAogICAgICAgICB1bnNpZ25lZCBtX2ds
eXBoQ291bnQ7Ci0gICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhJiBtX2ZvbnREYXRhOworICAg
ICAgICBjb25zdCBGb250JiBtX2ZvbnQ7CiAgICAgICAgIGNvbnN0IFVDaGFyKiBtX2NoYXJhY3Rl
cnM7CiAgICAgICAgIHVuc2lnbmVkIG1fc3RyaW5nTG9jYXRpb247CiAgICAgICAgIHNpemVfdCBt
X3N0cmluZ0xlbmd0aDsKQEAgLTEyNyw3ICsxMjcsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBj
b2xsZWN0Q29tcGxleFRleHRSdW5zKCk7CiAKLSAgICB2b2lkIGNvbGxlY3RDb21wbGV4VGV4dFJ1
bnNGb3JDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBz
dHJpbmdMb2NhdGlvbiwgY29uc3QgU2ltcGxlRm9udERhdGEqKTsKKyAgICB2b2lkIGNvbGxlY3RD
b21wbGV4VGV4dFJ1bnNGb3JDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgbGVuZ3Ro
LCB1bnNpZ25lZCBzdHJpbmdMb2NhdGlvbiwgY29uc3QgRm9udCopOwogICAgIHZvaWQgYWRqdXN0
R2x5cGhzQW5kQWR2YW5jZXMoKTsKIAogICAgIHVuc2lnbmVkIGluZGV4T2ZDdXJyZW50UnVuKHVu
c2lnbmVkJiBsZWZ0bW9zdEdseXBoKTsKQEAgLTE2OSw3ICsxNjksNyBAQCBwcml2YXRlOgogICAg
IGZsb2F0IG1fbGVhZGluZ0V4cGFuc2lvbjsKICAgICBib29sIG1fYWZ0ZXJFeHBhbnNpb247CiAK
LSAgICBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIG1fZmFsbGJhY2tGb250czsKKyAg
ICBIYXNoU2V0PGNvbnN0IEZvbnQqPiogbV9mYWxsYmFja0ZvbnRzOwogCiAgICAgZmxvYXQgbV9t
aW5HbHlwaEJvdW5kaW5nQm94WDsKICAgICBmbG9hdCBtX21heEdseXBoQm91bmRpbmdCb3hYOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29u
dHJvbGxlckNvcmVUZXh0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXJDb3JlVGV4dC5tbQkocmV2aXNpb24g
MTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhU
ZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3IEBA
IC0gKGlkKWluaXRXaXRoRm9udDooY29uc3QgV2ViQ29yZTo6Rm9udEMKICAgICBfY2hhcmFjdGVy
ID0gY2hhcmFjdGVyOwogCiAgICAgLy8gQnkgdGhlIHRpbWUgYSBXZWJDYXNjYWRlTGlzdCBpcyB1
c2VkLCB0aGUgRm9udENhc2NhZGUgaGFzIGFscmVhZHkgYmVlbiBhc2tlZCB0byByZWFsaXplIGFs
bCBvZiBpdHMKLSAgICAvLyBGb250RGF0YSwgc28gdGhpcyBsb29wIGRvZXMgbm90IGhpdCB0aGUg
Rm9udENhY2hlLgorICAgIC8vIEZvbnRzLCBzbyB0aGlzIGxvb3AgZG9lcyBub3QgaGl0IHRoZSBG
b250Q2FjaGUuCiAgICAgd2hpbGUgKCFfZm9udC0+ZmFsbGJhY2tSYW5nZXNBdChfY291bnQpLmlz
TnVsbCgpKQogICAgICAgICBfY291bnQrKzsKIApAQCAtODIsMTAgKzgyLDEwIEBAIC0gKGlkKW9i
amVjdEF0SW5kZXg6KE5TVUludGVnZXIpaW5kZXgKICAgICB9IGVsc2UKICAgICAgICAgX2ZvbnRE
ZXNjcmlwdG9ycy5ncm93KGluZGV4ICsgMSk7CiAKLSAgICBjb25zdCBXZWJDb3JlOjpTaW1wbGVG
b250RGF0YSogc2ltcGxlRm9udERhdGEgPSBfZm9udC0+ZmFsbGJhY2tSYW5nZXNBdChpbmRleCku
Zm9udERhdGFGb3JDaGFyYWN0ZXIoX2NoYXJhY3Rlcik7Ci0gICAgaWYgKCFzaW1wbGVGb250RGF0
YSkKLSAgICAgICAgc2ltcGxlRm9udERhdGEgPSAmX2ZvbnQtPmZhbGxiYWNrUmFuZ2VzQXQoaW5k
ZXgpLmZvbnREYXRhRm9yRmlyc3RSYW5nZSgpOwotICAgIGZvbnREZXNjcmlwdG9yID0gQ1RGb250
Q29weUZvbnREZXNjcmlwdG9yKHNpbXBsZUZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5jdEZvbnQo
KSk7CisgICAgY29uc3QgV2ViQ29yZTo6Rm9udCogZm9udCA9IF9mb250LT5mYWxsYmFja1Jhbmdl
c0F0KGluZGV4KS5mb250Rm9yQ2hhcmFjdGVyKF9jaGFyYWN0ZXIpOworICAgIGlmICghZm9udCkK
KyAgICAgICAgZm9udCA9ICZfZm9udC0+ZmFsbGJhY2tSYW5nZXNBdChpbmRleCkuZm9udEZvckZp
cnN0UmFuZ2UoKTsKKyAgICBmb250RGVzY3JpcHRvciA9IENURm9udENvcHlGb250RGVzY3JpcHRv
cihmb250LT5wbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSk7CiAgICAgX2ZvbnREZXNjcmlwdG9yc1tp
bmRleF0gPSBhZG9wdENGKGZvbnREZXNjcmlwdG9yKTsKICAgICByZXR1cm4gKGlkKWZvbnREZXNj
cmlwdG9yOwogfQpAQCAtOTQsOCArOTQsOCBAQCAtIChpZClvYmplY3RBdEluZGV4OihOU1VJbnRl
Z2VyKWluZGV4CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ29tcGxleFRleHRDb250cm9sbGVy
OjpDb21wbGV4VGV4dFJ1bjo6Q29tcGxleFRleHRSdW4oQ1RSdW5SZWYgY3RSdW4sIGNvbnN0IFNp
bXBsZUZvbnREYXRhJiBmb250RGF0YSwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVk
IHN0cmluZ0xvY2F0aW9uLCBzaXplX3Qgc3RyaW5nTGVuZ3RoLCBDRlJhbmdlIHJ1blJhbmdlKQot
ICAgIDogbV9mb250RGF0YShmb250RGF0YSkKK0NvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxl
eFRleHRSdW46OkNvbXBsZXhUZXh0UnVuKENUUnVuUmVmIGN0UnVuLCBjb25zdCBGb250JiBmb250
LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24sIHNpemVf
dCBzdHJpbmdMZW5ndGgsIENGUmFuZ2UgcnVuUmFuZ2UpCisgICAgOiBtX2ZvbnQoZm9udCkKICAg
ICAsIG1fY2hhcmFjdGVycyhjaGFyYWN0ZXJzKQogICAgICwgbV9zdHJpbmdMb2NhdGlvbihzdHJp
bmdMb2NhdGlvbikKICAgICAsIG1fc3RyaW5nTGVuZ3RoKHN0cmluZ0xlbmd0aCkKQEAgLTEzMCw4
ICsxMzAsOCBAQCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OkNvbXBsZXhUZXh0UnVuOjpDCiAKIC8v
IE1pc3NpbmcgZ2x5cGhzIHJ1biBjb25zdHJ1Y3Rvci4gQ29yZSBUZXh0IHdpbGwgbm90IGdlbmVy
YXRlIGEgcnVuIG9mIG1pc3NpbmcgZ2x5cGhzLCBpbnN0ZWFkIGZhbGxpbmcgYmFjayBvbgogLy8g
Z2x5cGhzIGZyb20gTGFzdFJlc29ydC4gV2Ugd2FudCB0byB1c2UgdGhlIHByaW1hcnkgZm9udCdz
IG1pc3NpbmcgZ2x5cGggaW4gb3JkZXIgdG8gbWF0Y2ggdGhlIGZhc3QgdGV4dCBjb2RlIHBhdGgu
Ci1Db21wbGV4VGV4dENvbnRyb2xsZXI6OkNvbXBsZXhUZXh0UnVuOjpDb21wbGV4VGV4dFJ1bihj
b25zdCBTaW1wbGVGb250RGF0YSYgZm9udERhdGEsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1
bnNpZ25lZCBzdHJpbmdMb2NhdGlvbiwgc2l6ZV90IHN0cmluZ0xlbmd0aCwgYm9vbCBsdHIpCi0g
ICAgOiBtX2ZvbnREYXRhKGZvbnREYXRhKQorQ29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4
VGV4dFJ1bjo6Q29tcGxleFRleHRSdW4oY29uc3QgRm9udCYgZm9udCwgY29uc3QgVUNoYXIqIGNo
YXJhY3RlcnMsIHVuc2lnbmVkIHN0cmluZ0xvY2F0aW9uLCBzaXplX3Qgc3RyaW5nTGVuZ3RoLCBi
b29sIGx0cikKKyAgICA6IG1fZm9udChmb250KQogICAgICwgbV9jaGFyYWN0ZXJzKGNoYXJhY3Rl
cnMpCiAgICAgLCBtX3N0cmluZ0xvY2F0aW9uKHN0cmluZ0xvY2F0aW9uKQogICAgICwgbV9zdHJp
bmdMZW5ndGgoc3RyaW5nTGVuZ3RoKQpAQCAtMTYzLDcgKzE2Myw3IEBAIENvbXBsZXhUZXh0Q29u
dHJvbGxlcjo6Q29tcGxleFRleHRSdW46OkMKICAgICAvLyBTeW50aGVzaXplIGEgcnVuIG9mIG1p
c3NpbmcgZ2x5cGhzLgogICAgIG1fZ2x5cGhzVmVjdG9yLmZpbGwoMCwgbV9nbHlwaENvdW50KTsK
ICAgICBtX2dseXBocyA9IG1fZ2x5cGhzVmVjdG9yLmRhdGEoKTsKLSAgICBtX2FkdmFuY2VzVmVj
dG9yLmZpbGwoQ0dTaXplTWFrZShtX2ZvbnREYXRhLndpZHRoRm9yR2x5cGgoMCksIDApLCBtX2ds
eXBoQ291bnQpOworICAgIG1fYWR2YW5jZXNWZWN0b3IuZmlsbChDR1NpemVNYWtlKG1fZm9udC53
aWR0aEZvckdseXBoKDApLCAwKSwgbV9nbHlwaENvdW50KTsKICAgICBtX2FkdmFuY2VzID0gbV9h
ZHZhbmNlc1ZlY3Rvci5kYXRhKCk7CiB9CiAKQEAgLTE4NCwxMSArMTg0LDExIEBAIHN0YXRpYyBj
b25zdCBVbmlDaGFyKiBwcm92aWRlU3RyaW5nQW5kQXQKICAgICByZXR1cm4gaW5mby0+Y3AgKyBz
dHJpbmdJbmRleDsKIH0KIAotdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RDb21w
bGV4VGV4dFJ1bnNGb3JDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBjcCwgdW5zaWduZWQgbGVuZ3Ro
LCB1bnNpZ25lZCBzdHJpbmdMb2NhdGlvbiwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRh
KQordm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RDb21wbGV4VGV4dFJ1bnNGb3JD
aGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBjcCwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdHJp
bmdMb2NhdGlvbiwgY29uc3QgRm9udCogZm9udCkKIHsKLSAgICBpZiAoIWZvbnREYXRhKSB7Cisg
ICAgaWYgKCFmb250KSB7CiAgICAgICAgIC8vIENyZWF0ZSBhIHJ1biBvZiBtaXNzaW5nIGdseXBo
cyBmcm9tIHRoZSBwcmltYXJ5IGZvbnQuCi0gICAgICAgIG1fY29tcGxleFRleHRSdW5zLmFwcGVu
ZChDb21wbGV4VGV4dFJ1bjo6Y3JlYXRlKG1fZm9udC5wcmltYXJ5Rm9udERhdGEoKSwgY3AsIHN0
cmluZ0xvY2F0aW9uLCBsZW5ndGgsIG1fcnVuLmx0cigpKSk7CisgICAgICAgIG1fY29tcGxleFRl
eHRSdW5zLmFwcGVuZChDb21wbGV4VGV4dFJ1bjo6Y3JlYXRlKG1fZm9udC5wcmltYXJ5Rm9udCgp
LCBjcCwgc3RyaW5nTG9jYXRpb24sIGxlbmd0aCwgbV9ydW4ubHRyKCkpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIApAQCAtMTk2LDI2ICsxOTYsMjYgQEAgdm9pZCBDb21wbGV4VGV4dENvbnRy
b2xsZXI6OmNvbGxlY3RDb21wbAogCiAgICAgVUNoYXIzMiBiYXNlQ2hhcmFjdGVyID0gMDsKICAg
ICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBzdHJpbmdBdHRyaWJ1dGVzOwotICAgIGlmIChm
b250RGF0YSA9PSBTaW1wbGVGb250RGF0YTo6c3lzdGVtRmFsbGJhY2soKSkgeworICAgIGlmIChm
b250ID09IEZvbnQ6OnN5c3RlbUZhbGxiYWNrKCkpIHsKICAgICAgICAgLy8gRklYTUU6IFRoaXMg
Y29kZSBwYXRoIGRvZXMgbm90IHN1cHBvcnQgc21hbGwgY2Fwcy4KICAgICAgICAgaXNTeXN0ZW1G
YWxsYmFjayA9IHRydWU7CiAKICAgICAgICAgVTE2X0dFVChjcCwgMCwgMCwgbGVuZ3RoLCBiYXNl
Q2hhcmFjdGVyKTsKLSAgICAgICAgZm9udERhdGEgPSBtX2ZvbnQuZmFsbGJhY2tSYW5nZXNBdCgw
KS5mb250RGF0YUZvckNoYXJhY3RlcihiYXNlQ2hhcmFjdGVyKTsKLSAgICAgICAgaWYgKCFmb250
RGF0YSkKLSAgICAgICAgICAgIGZvbnREYXRhID0gJm1fZm9udC5mYWxsYmFja1Jhbmdlc0F0KDAp
LmZvbnREYXRhRm9yRmlyc3RSYW5nZSgpOworICAgICAgICBmb250ID0gbV9mb250LmZhbGxiYWNr
UmFuZ2VzQXQoMCkuZm9udEZvckNoYXJhY3RlcihiYXNlQ2hhcmFjdGVyKTsKKyAgICAgICAgaWYg
KCFmb250KQorICAgICAgICAgICAgZm9udCA9ICZtX2ZvbnQuZmFsbGJhY2tSYW5nZXNBdCgwKS5m
b250Rm9yRmlyc3RSYW5nZSgpOwogCiAgICAgICAgIFJldGFpblB0cjxXZWJDYXNjYWRlTGlzdD4g
Y2FzY2FkZUxpc3QgPSBhZG9wdE5TKFtbV2ViQ2FzY2FkZUxpc3QgYWxsb2NdIGluaXRXaXRoRm9u
dDombV9mb250IGNoYXJhY3RlcjpiYXNlQ2hhcmFjdGVyXSk7CiAKLSAgICAgICAgc3RyaW5nQXR0
cmlidXRlcyA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0YWJsZUNvcHkoa0NGQWxsb2Nh
dG9yRGVmYXVsdCwgMCwgZm9udERhdGEtPmdldENGU3RyaW5nQXR0cmlidXRlcyhtX2ZvbnQudHlw
ZXNldHRpbmdGZWF0dXJlcygpLCBmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24o
KSkpKTsKKyAgICAgICAgc3RyaW5nQXR0cmlidXRlcyA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3Jl
YXRlTXV0YWJsZUNvcHkoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCwgZm9udC0+Z2V0Q0ZTdHJpbmdB
dHRyaWJ1dGVzKG1fZm9udC50eXBlc2V0dGluZ0ZlYXR1cmVzKCksIGZvbnQtPnBsYXRmb3JtRGF0
YSgpLm9yaWVudGF0aW9uKCkpKSk7CiAgICAgICAgIHN0YXRpYyBjb25zdCB2b2lkKiBhdHRyaWJ1
dGVLZXlzW10gPSB7IGtDVEZvbnRDYXNjYWRlTGlzdEF0dHJpYnV0ZSB9OwogICAgICAgICBjb25z
dCB2b2lkKiB2YWx1ZXNbXSA9IHsgY2FzY2FkZUxpc3QuZ2V0KCkgfTsKICAgICAgICAgUmV0YWlu
UHRyPENGRGljdGlvbmFyeVJlZj4gYXR0cmlidXRlcyA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3Jl
YXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGF0dHJpYnV0ZUtleXMsIHZhbHVlcywgc2l6ZW9mKGF0
dHJpYnV0ZUtleXMpIC8gc2l6ZW9mKCphdHRyaWJ1dGVLZXlzKSwgJmtDRlR5cGVEaWN0aW9uYXJ5
S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOwogICAgICAg
ICBSZXRhaW5QdHI8Q1RGb250RGVzY3JpcHRvclJlZj4gZm9udERlc2NyaXB0b3IgPSBhZG9wdENG
KENURm9udERlc2NyaXB0b3JDcmVhdGVXaXRoQXR0cmlidXRlcyhhdHRyaWJ1dGVzLmdldCgpKSk7
Ci0gICAgICAgIFJldGFpblB0cjxDVEZvbnRSZWY+IGZvbnRXaXRoQ2FzY2FkZUxpc3QgPSBhZG9w
dENGKENURm9udENyZWF0ZUNvcHlXaXRoQXR0cmlidXRlcyhmb250RGF0YS0+cGxhdGZvcm1EYXRh
KCkuY3RGb250KCksIG1fZm9udC5waXhlbFNpemUoKSwgMCwgZm9udERlc2NyaXB0b3IuZ2V0KCkp
KTsKKyAgICAgICAgUmV0YWluUHRyPENURm9udFJlZj4gZm9udFdpdGhDYXNjYWRlTGlzdCA9IGFk
b3B0Q0YoQ1RGb250Q3JlYXRlQ29weVdpdGhBdHRyaWJ1dGVzKGZvbnQtPnBsYXRmb3JtRGF0YSgp
LmN0Rm9udCgpLCBtX2ZvbnQucGl4ZWxTaXplKCksIDAsIGZvbnREZXNjcmlwdG9yLmdldCgpKSk7
CiAgICAgICAgIENGRGljdGlvbmFyeVNldFZhbHVlKGNvbnN0X2Nhc3Q8Q0ZNdXRhYmxlRGljdGlv
bmFyeVJlZj4oc3RyaW5nQXR0cmlidXRlcy5nZXQoKSksIGtDVEZvbnRBdHRyaWJ1dGVOYW1lLCBm
b250V2l0aENhc2NhZGVMaXN0LmdldCgpKTsKICAgICB9IGVsc2UKLSAgICAgICAgc3RyaW5nQXR0
cmlidXRlcyA9IGZvbnREYXRhLT5nZXRDRlN0cmluZ0F0dHJpYnV0ZXMobV9mb250LnR5cGVzZXR0
aW5nRmVhdHVyZXMoKSwgZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkpOwor
ICAgICAgICBzdHJpbmdBdHRyaWJ1dGVzID0gZm9udC0+Z2V0Q0ZTdHJpbmdBdHRyaWJ1dGVzKG1f
Zm9udC50eXBlc2V0dGluZ0ZlYXR1cmVzKCksIGZvbnQtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0
aW9uKCkpOwogCiAgICAgUmV0YWluUHRyPENUTGluZVJlZj4gbGluZTsKIApAQCAtMjQ4LDU1ICsy
NDgsNTUgQEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RDb21wbAogICAgICAg
ICBDVFJ1blJlZiBjdFJ1biA9IHN0YXRpY19jYXN0PENUUnVuUmVmPihDRkFycmF5R2V0VmFsdWVB
dEluZGV4KHJ1bkFycmF5LCBtX3J1bi5sdHIoKSA/IHIgOiBydW5Db3VudCAtIDEgLSByKSk7CiAg
ICAgICAgIEFTU0VSVChDRkdldFR5cGVJRChjdFJ1bikgPT0gQ1RSdW5HZXRUeXBlSUQoKSk7CiAg
ICAgICAgIENGUmFuZ2UgcnVuUmFuZ2UgPSBDVFJ1bkdldFN0cmluZ1JhbmdlKGN0UnVuKTsKLSAg
ICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIHJ1bkZvbnREYXRhID0gZm9udERhdGE7CisgICAg
ICAgIGNvbnN0IEZvbnQqIHJ1bkZvbnQgPSBmb250OwogICAgICAgICBpZiAoaXNTeXN0ZW1GYWxs
YmFjaykgewogICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIHJ1bkF0dHJpYnV0ZXMgPSBDVFJ1
bkdldEF0dHJpYnV0ZXMoY3RSdW4pOwotICAgICAgICAgICAgQ1RGb250UmVmIHJ1bkZvbnQgPSBz
dGF0aWNfY2FzdDxDVEZvbnRSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKHJ1bkF0dHJpYnV0ZXMs
IGtDVEZvbnRBdHRyaWJ1dGVOYW1lKSk7Ci0gICAgICAgICAgICBBU1NFUlQoQ0ZHZXRUeXBlSUQo
cnVuRm9udCkgPT0gQ1RGb250R2V0VHlwZUlEKCkpOwotICAgICAgICAgICAgUmV0YWluUHRyPENG
VHlwZVJlZj4gcnVuRm9udEVxdWFsaXR5T2JqZWN0ID0gRm9udFBsYXRmb3JtRGF0YTo6b2JqZWN0
Rm9yRXF1YWxpdHlDaGVjayhydW5Gb250KTsKLSAgICAgICAgICAgIGlmICghQ0ZFcXVhbChydW5G
b250RXF1YWxpdHlPYmplY3QuZ2V0KCksIGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5vYmplY3RG
b3JFcXVhbGl0eUNoZWNrKCkuZ2V0KCkpKSB7CisgICAgICAgICAgICBDVEZvbnRSZWYgcnVuQ1RG
b250ID0gc3RhdGljX2Nhc3Q8Q1RGb250UmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShydW5BdHRy
aWJ1dGVzLCBrQ1RGb250QXR0cmlidXRlTmFtZSkpOworICAgICAgICAgICAgQVNTRVJUKENGR2V0
VHlwZUlEKHJ1bkNURm9udCkgPT0gQ1RGb250R2V0VHlwZUlEKCkpOworICAgICAgICAgICAgUmV0
YWluUHRyPENGVHlwZVJlZj4gcnVuRm9udEVxdWFsaXR5T2JqZWN0ID0gRm9udFBsYXRmb3JtRGF0
YTo6b2JqZWN0Rm9yRXF1YWxpdHlDaGVjayhydW5DVEZvbnQpOworICAgICAgICAgICAgaWYgKCFD
RkVxdWFsKHJ1bkZvbnRFcXVhbGl0eU9iamVjdC5nZXQoKSwgZm9udC0+cGxhdGZvcm1EYXRhKCku
b2JqZWN0Rm9yRXF1YWxpdHlDaGVjaygpLmdldCgpKSkgewogICAgICAgICAgICAgICAgIC8vIEJl
Z2luIHRyeWluZyB0byBzZWUgaWYgcnVuRm9udCBtYXRjaGVzIGFueSBvZiB0aGUgZm9udHMgaW4g
dGhlIGZhbGxiYWNrIGxpc3QuCiAKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyAhbV9mb250LmZhbGxiYWNrUmFuZ2VzQXQoaSkuaXNOdWxsKCk7ICsraSkgewotICAgICAgICAg
ICAgICAgICAgICBydW5Gb250RGF0YSA9IG1fZm9udC5mYWxsYmFja1Jhbmdlc0F0KGkpLmZvbnRE
YXRhRm9yQ2hhcmFjdGVyKGJhc2VDaGFyYWN0ZXIpOwotICAgICAgICAgICAgICAgICAgICBpZiAo
IXJ1bkZvbnREYXRhKQorICAgICAgICAgICAgICAgICAgICBydW5Gb250ID0gbV9mb250LmZhbGxi
YWNrUmFuZ2VzQXQoaSkuZm9udEZvckNoYXJhY3RlcihiYXNlQ2hhcmFjdGVyKTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCFydW5Gb250KQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICAgICAgICAgIFJldGFpblB0cjxDRlR5cGVSZWY+IHJ1bkZvbnRFcXVh
bGl0eU9iamVjdCA9IHJ1bkZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5vYmplY3RGb3JFcXVhbGl0
eUNoZWNrKCk7CisgICAgICAgICAgICAgICAgICAgIFJldGFpblB0cjxDRlR5cGVSZWY+IHJ1bkZv
bnRFcXVhbGl0eU9iamVjdCA9IHJ1bkZvbnQtPnBsYXRmb3JtRGF0YSgpLm9iamVjdEZvckVxdWFs
aXR5Q2hlY2soKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKENGRXF1YWwocnVuRm9udEVxdWFs
aXR5T2JqZWN0LmdldCgpLCBydW5Gb250RXF1YWxpdHlPYmplY3QuZ2V0KCkpKQogICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIHJ1bkZvbnREYXRhID0g
MDsKKyAgICAgICAgICAgICAgICAgICAgcnVuRm9udCA9IG51bGxwdHI7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIG1hdGNoaW5nIGZvbnQsIGxv
b2sgdXAgYnkgbmFtZSBpbiB0aGUgZm9udCBjYWNoZS4KLSAgICAgICAgICAgICAgICBpZiAoIXJ1
bkZvbnREYXRhKSB7CisgICAgICAgICAgICAgICAgaWYgKCFydW5Gb250KSB7CiAgICAgICAgICAg
ICAgICAgICAgIC8vIFJhdGhlciB0aGFuIHVzaW5nIHJ1bkZvbnQgYXMgYW4gTlNGb250IGFuZCB3
cmFwcGluZyBpdCBpbiBhIEZvbnRQbGF0Zm9ybURhdGEsIGdvIHRocm91Z2gKICAgICAgICAgICAg
ICAgICAgICAgLy8gdGhlIGZvbnQgY2FjaGUgYW5kIHVsdGltYXRlbHkgdGhyb3VnaCBOU0ZvbnRN
YW5hZ2VyIGluIG9yZGVyIHRvIGdldCBhbiBOU0ZvbnQgd2l0aCB0aGUgcmlnaHQKICAgICAgICAg
ICAgICAgICAgICAgLy8gTlNGb250UmVuZGVyaW5nTW9kZS4KLSAgICAgICAgICAgICAgICAgICAg
UmV0YWluUHRyPENGU3RyaW5nUmVmPiBmb250TmFtZSA9IGFkb3B0Q0YoQ1RGb250Q29weVBvc3RT
Y3JpcHROYW1lKHJ1bkZvbnQpKTsKKyAgICAgICAgICAgICAgICAgICAgUmV0YWluUHRyPENGU3Ry
aW5nUmVmPiBmb250TmFtZSA9IGFkb3B0Q0YoQ1RGb250Q29weVBvc3RTY3JpcHROYW1lKHJ1bkNU
Rm9udCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoQ0ZFcXVhbChmb250TmFtZS5nZXQoKSwg
Q0ZTVFIoIkxhc3RSZXNvcnQiKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fY29tcGxl
eFRleHRSdW5zLmFwcGVuZChDb21wbGV4VGV4dFJ1bjo6Y3JlYXRlKG1fZm9udC5wcmltYXJ5Rm9u
dERhdGEoKSwgY3AsIHN0cmluZ0xvY2F0aW9uICsgcnVuUmFuZ2UubG9jYXRpb24sIHJ1blJhbmdl
Lmxlbmd0aCwgbV9ydW4ubHRyKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fY29tcGxl
eFRleHRSdW5zLmFwcGVuZChDb21wbGV4VGV4dFJ1bjo6Y3JlYXRlKG1fZm9udC5wcmltYXJ5Rm9u
dCgpLCBjcCwgc3RyaW5nTG9jYXRpb24gKyBydW5SYW5nZS5sb2NhdGlvbiwgcnVuUmFuZ2UubGVu
Z3RoLCBtX3J1bi5sdHIoKSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcnVuRm9udERhdGEgPSBm
b250Q2FjaGUoKS5mb250Rm9yRmFtaWx5KG1fZm9udC5mb250RGVzY3JpcHRpb24oKSwgZm9udE5h
bWUuZ2V0KCksIGZhbHNlKS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgcnVuRm9udCA9IGZv
bnRDYWNoZSgpLmZvbnRGb3JGYW1pbHkobV9mb250LmZvbnREZXNjcmlwdGlvbigpLCBmb250TmFt
ZS5nZXQoKSwgZmFsc2UpLmdldCgpOwogI2lmICFQTEFURk9STShJT1MpCiAgICAgICAgICAgICAg
ICAgICAgIC8vIENvcmUgVGV4dCBtYXkgaGF2ZSB1c2VkIGEgZm9udCB0aGF0IGlzIG5vdCBrbm93
biB0byBOU0ZvbnRNYW5hZ2VyLiBJbiB0aGF0IGNhc2UsIGZhbGwgYmFjayBvbgogICAgICAgICAg
ICAgICAgICAgICAvLyB1c2luZyB0aGUgZm9udCBhcyByZXR1cm5lZCwgZXZlbiB0aG91Z2ggaXQg
bWF5IG5vdCBoYXZlIHRoZSBiZXN0IE5TRm9udFJlbmRlcmluZ01vZGUuCi0gICAgICAgICAgICAg
ICAgICAgIGlmICghcnVuRm9udERhdGEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEZvbnRQ
bGF0Zm9ybURhdGEgcnVuRm9udFBsYXRmb3JtRGF0YSgoTlNGb250ICopcnVuRm9udCwgQ1RGb250
R2V0U2l6ZShydW5Gb250KSwgbV9mb250LmZvbnREZXNjcmlwdGlvbigpLnVzZVByaW50ZXJGb250
KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgcnVuRm9udERhdGEgPSAmZm9udENhY2hlKCku
Zm9udEZvclBsYXRmb3JtRGF0YShydW5Gb250UGxhdGZvcm1EYXRhKS5nZXQoKTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCFydW5Gb250KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBGb250
UGxhdGZvcm1EYXRhIHJ1bkZvbnRQbGF0Zm9ybURhdGEoKE5TRm9udCAqKXJ1bkNURm9udCwgQ1RG
b250R2V0U2l6ZShydW5DVEZvbnQpLCBtX2ZvbnQuZm9udERlc2NyaXB0aW9uKCkudXNlUHJpbnRl
ckZvbnQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBydW5Gb250ID0gJmZvbnRDYWNoZSgp
LmZvbnRGb3JQbGF0Zm9ybURhdGEocnVuRm9udFBsYXRmb3JtRGF0YSkuZ2V0KCk7CiAgICAgICAg
ICAgICAgICAgICAgIH0KICNlbHNlCiAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBKdXN0
IGFzc2VydCBmb3Igbm93LCB1bnRpbCB3ZSBjYW4gZGV2aXNlIGEgYmV0dGVyIGZpeCB0aGF0IHdv
cmtzIHdpdGggaU9TLgotICAgICAgICAgICAgICAgICAgICBBU1NFUlQocnVuRm9udERhdGEpOwor
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQocnVuRm9udCk7CiAjZW5kaWYKICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKG1fZmFsbGJhY2tGb250cyAmJiBydW5Gb250RGF0
YSAhPSAmbV9mb250LnByaW1hcnlGb250RGF0YSgpKQotICAgICAgICAgICAgICAgICAgICBtX2Zh
bGxiYWNrRm9udHMtPmFkZChydW5Gb250RGF0YSk7CisgICAgICAgICAgICAgICAgaWYgKG1fZmFs
bGJhY2tGb250cyAmJiBydW5Gb250ICE9ICZtX2ZvbnQucHJpbWFyeUZvbnQoKSkKKyAgICAgICAg
ICAgICAgICAgICAgbV9mYWxsYmFja0ZvbnRzLT5hZGQocnVuRm9udCk7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG1fZmFsbGJhY2tGb250cyAmJiBydW5Gb250RGF0YSAh
PSAmbV9mb250LnByaW1hcnlGb250RGF0YSgpKQotICAgICAgICAgICAgbV9mYWxsYmFja0ZvbnRz
LT5hZGQoZm9udERhdGEpOworICAgICAgICBpZiAobV9mYWxsYmFja0ZvbnRzICYmIHJ1bkZvbnQg
IT0gJm1fZm9udC5wcmltYXJ5Rm9udCgpKQorICAgICAgICAgICAgbV9mYWxsYmFja0ZvbnRzLT5h
ZGQoZm9udCk7CiAKLSAgICAgICAgbV9jb21wbGV4VGV4dFJ1bnMuYXBwZW5kKENvbXBsZXhUZXh0
UnVuOjpjcmVhdGUoY3RSdW4sICpydW5Gb250RGF0YSwgY3AsIHN0cmluZ0xvY2F0aW9uLCBsZW5n
dGgsIHJ1blJhbmdlKSk7CisgICAgICAgIG1fY29tcGxleFRleHRSdW5zLmFwcGVuZChDb21wbGV4
VGV4dFJ1bjo6Y3JlYXRlKGN0UnVuLCAqcnVuRm9udCwgY3AsIHN0cmluZ0xvY2F0aW9uLCBsZW5n
dGgsIHJ1blJhbmdlKSk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9tYWMvRm9udENhY2hlTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q2FjaGVNYWMubW0JKHJldmlzaW9uIDE3ODg1
NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q2FjaGVNYWMu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTMzLDggKzMzLDggQEAKICNpZiAhUExBVEZPUk0oSU9TKQog
CiAjaW1wb3J0ICJDb3JlR3JhcGhpY3NTUEkuaCIKKyNpbXBvcnQgIkZvbnQuaCIKICNpbXBvcnQg
IkZvbnRDYXNjYWRlLmgiCi0jaW1wb3J0ICJTaW1wbGVGb250RGF0YS5oIgogI2ltcG9ydCAiRm9u
dFBsYXRmb3JtRGF0YS5oIgogI2ltcG9ydCAiTlNGb250U1BJLmgiCiAjaW1wb3J0ICJXZWJDb3Jl
TlNTdHJpbmdFeHRyYXMuaCIKQEAgLTMzNyw3ICszMzcsNyBAQCBzdGF0aWMgYm9vbCBzaG91bGRB
dXRvQWN0aXZhdGVGb250SWZOZWVkCiAgICAgcmV0dXJuIGtub3duRmFtaWxpZXMuZ2V0KCkuYWRk
KGZhbWlseSkuaXNOZXdFbnRyeTsKIH0KIAotUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2Fj
aGU6OnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhjb25zdCBGb250RGVzY3JpcHRpb24mIGRl
c2NyaXB0aW9uLCBjb25zdCBTaW1wbGVGb250RGF0YSogb3JpZ2luYWxGb250RGF0YSwgYm9vbCBp
c1BsYXRmb3JtRm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCitSZWZQ
dHI8Rm9udD4gRm9udENhY2hlOjpzeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgY29uc3QgRm9udCogb3JpZ2luYWxGb250RGF0YSwg
Ym9vbCBpc1BsYXRmb3JtRm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgp
CiB7CiAgICAgVUNoYXIzMiBjaGFyYWN0ZXI7CiAgICAgVTE2X0dFVChjaGFyYWN0ZXJzLCAwLCAw
LCBsZW5ndGgsIGNoYXJhY3Rlcik7CkBAIC00MDUsMzQgKzQwNSwzNSBAQCBSZWZQdHI8U2ltcGxl
Rm9udERhdGE+IEZvbnRDYWNoZTo6c3lzdGVtCiAgICAgcmV0dXJuIGZvbnRGb3JQbGF0Zm9ybURh
dGEoYWx0ZXJuYXRlRm9udCk7CiB9CiAKLVJlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hl
OjpzaW1pbGFyRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0
aW9uKQorUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6c2ltaWxhckZvbnQoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiBkZXNjcmlwdGlvbikKIHsKICAgICAvLyBBdHRlbXB0IHRvIGZpbmQgYW4gYXBwcm9w
cmlhdGUgZm9udCB1c2luZyBhIG1hdGNoIGJhc2VkIG9uIAogICAgIC8vIHRoZSBwcmVzZW5jZSBv
ZiBrZXl3b3JkcyBpbiB0aGUgdGhlIHJlcXVlc3RlZCBuYW1lcy4gIEZvciBleGFtcGxlLCB3ZSds
bAogICAgIC8vIG1hdGNoIGFueSBuYW1lIHRoYXQgY29udGFpbnMgIkFyYWJpYyIgdG8gR2VlemEg
UHJvLgotICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gc2ltcGxlRm9udERhdGE7CisgICAgUmVm
UHRyPEZvbnQ+IGZvbnQ7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlc2NyaXB0aW9u
LmZhbWlseUNvdW50KCk7ICsraSkgewogICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWls
eSA9IGRlc2NyaXB0aW9uLmZhbWlseUF0KGkpOwogICAgICAgICBpZiAoZmFtaWx5LmlzRW1wdHko
KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBzdGF0aWMgU3RyaW5nKiBtYXRjaFdv
cmRzWzNdID0geyBuZXcgU3RyaW5nKCJBcmFiaWMiKSwgbmV3IFN0cmluZygiUGFzaHRvIiksIG5l
dyBTdHJpbmcoIlVyZHUiKSB9OwogICAgICAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9D
QUwoQXRvbWljU3RyaW5nLCBnZWV6YVN0ciwgKCJHZWV6YSBQcm8iLCBBdG9taWNTdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsKSk7Ci0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgMyAmJiAh
c2ltcGxlRm9udERhdGE7ICsraikKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCAzICYmICFm
b250OyArK2opIHsKICAgICAgICAgICAgIGlmIChmYW1pbHkuY29udGFpbnMoKm1hdGNoV29yZHNb
al0sIGZhbHNlKSkKLSAgICAgICAgICAgICAgICBzaW1wbGVGb250RGF0YSA9IGZvbnRGb3JGYW1p
bHkoZGVzY3JpcHRpb24sIGdlZXphU3RyKTsKKyAgICAgICAgICAgICAgICBmb250ID0gZm9udEZv
ckZhbWlseShkZXNjcmlwdGlvbiwgZ2VlemFTdHIpOworICAgICAgICB9CiAgICAgfQotICAgIHJl
dHVybiBzaW1wbGVGb250RGF0YS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIGZvbnQucmVsZWFzZSgp
OwogfQogCi1SZWY8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6bGFzdFJlc29ydEZhbGxiYWNr
Rm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikKK1JlZjxGb250PiBG
b250Q2FjaGU6Omxhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBm
b250RGVzY3JpcHRpb24pCiB7CiAgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKEF0
b21pY1N0cmluZywgdGltZXNTdHIsICgiVGltZXMiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZy
b21MaXRlcmFsKSk7CiAKICAgICAvLyBGSVhNRTogV291bGQgYmUgZXZlbiBiZXR0ZXIgdG8gc29t
ZWhvdyBnZXQgdGhlIHVzZXIncyBkZWZhdWx0IGZvbnQgaGVyZS4gIEZvciBub3cgd2UnbGwgcGlj
awogICAgIC8vIHRoZSBkZWZhdWx0IHRoYXQgdGhlIHVzZXIgd291bGQgZ2V0IHdpdGhvdXQgY2hh
bmdpbmcgYW55IHByZWZzLgotICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gc2ltcGxlRm9udERh
dGEgPSBmb250Rm9yRmFtaWx5KGZvbnREZXNjcmlwdGlvbiwgdGltZXNTdHIsIGZhbHNlKTsKLSAg
ICBpZiAoc2ltcGxlRm9udERhdGEpCi0gICAgICAgIHJldHVybiAqc2ltcGxlRm9udERhdGE7Cisg
ICAgUmVmUHRyPEZvbnQ+IGZvbnQgPSBmb250Rm9yRmFtaWx5KGZvbnREZXNjcmlwdGlvbiwgdGlt
ZXNTdHIsIGZhbHNlKTsKKyAgICBpZiAoZm9udCkKKyAgICAgICAgcmV0dXJuICpmb250OwogCiAg
ICAgLy8gVGhlIFRpbWVzIGZhbGxiYWNrIHdpbGwgYWxtb3N0IGFsd2F5cyB3b3JrLCBidXQgaW4g
dGhlIGhpZ2hseSB1bnVzdWFsIGNhc2Ugd2hlcmUKICAgICAvLyB0aGUgdXNlciBkb2Vzbid0IGhh
dmUgaXQsIHdlIGZhbGwgYmFjayBvbiBMdWNpZGEgR3JhbmRlIGJlY2F1c2UgdGhhdCdzCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR2x5cGhQYWdlTWFjLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR2x5cGhQ
YWdlTWFjLmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL0dseXBoUGFnZU1hYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDggKzMx
LDggQEAKIAogI2luY2x1ZGUgIkNvcmVHcmFwaGljc1NQSS5oIgogI2luY2x1ZGUgIkNvcmVUZXh0
U1BJLmgiCisjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCi0jaW5j
bHVkZSAiU2ltcGxlRm9udERhdGEuaCIKICNpbmNsdWRlICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNl
LmgiCiAjaWYgIVBMQVRGT1JNKElPUykKICNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0Fw
cGxpY2F0aW9uU2VydmljZXMuaD4KQEAgLTQwLDcgKzQwLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1zdGF0aWMgYm9vbCBzaG91bGRVc2VDb3JlVGV4dChjb25zdCBVQ2hhciogYnVmZmVy
LCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSkK
K3N0YXRpYyBib29sIHNob3VsZFVzZUNvcmVUZXh0KGNvbnN0IFVDaGFyKiBidWZmZXIsIHVuc2ln
bmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgRm9udCogZm9udERhdGEpCiB7CiAgICAgaWYgKGZvbnRE
YXRhLT5wbGF0Zm9ybURhdGEoKS5pc0NvbXBvc2l0ZUZvbnRSZWZlcmVuY2UoKSkKICAgICAgICAg
cmV0dXJuIHRydWU7CkBAIC01NSw3ICs1NSw3IEBAIHN0YXRpYyBib29sIHNob3VsZFVzZUNvcmVU
ZXh0KGNvbnN0IFVDaGEKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgR2x5cGhQYWdlOjpt
YXlVc2VNaXhlZEZvbnREYXRhV2hlbkZpbGxpbmcoY29uc3QgVUNoYXIqIGJ1ZmZlciwgdW5zaWdu
ZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEpCitib29sIEds
eXBoUGFnZTo6bWF5VXNlTWl4ZWRGb250c1doZW5GaWxsaW5nKGNvbnN0IFVDaGFyKiBidWZmZXIs
IHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgRm9udCogZm9udERhdGEpCiB7CiAjaWYgVVNF
KEFQUEtJVCkKICAgICAvLyBGSVhNRTogVGhpcyBpcyBvbmx5IHJlYWxseSBuZWVkZWQgZm9yIGNv
bXBvc2l0ZSBmb250IHJlZmVyZW5jZXMuCkBAIC02OCw3ICs2OCw3IEBAIGJvb2wgR2x5cGhQYWdl
OjptYXlVc2VNaXhlZEZvbnREYXRhV2hlbkYKICNlbmRpZgogfQogCi1ib29sIEdseXBoUGFnZTo6
ZmlsbCh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgdW5z
aWduZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEpCitib29s
IEdseXBoUGFnZTo6ZmlsbCh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIq
IGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBGb250KiBmb250RGF0YSkKIHsK
ICAgICBib29sIGhhdmVHbHlwaHMgPSBmYWxzZTsKIApAQCAtMTYzLDcgKzE2Myw3IEBAIGJvb2wg
R2x5cGhQYWdlOjpmaWxsKHVuc2lnbmVkIG9mZnNldCwgdW4KICAgICAgICAgICAgICAgICAgICAg
fQogI2lmIFVTRShBUFBLSVQpCiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIHJ1blNpbXBsZSA9IGZvbnREYXRhLT5jb21w
b3NpdGVGb250UmVmZXJlbmNlRm9udERhdGEoKE5TRm9udCAqKXJ1bkZvbnQpOworICAgICAgICAg
ICAgICAgICAgICBjb25zdCBGb250KiBydW5TaW1wbGUgPSBmb250RGF0YS0+Y29tcG9zaXRlRm9u
dFJlZmVyZW5jZUZvbnQoKE5TRm9udCAqKXJ1bkZvbnQpOwogICAgICAgICAgICAgICAgICAgICBp
ZiAocnVuU2ltcGxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKENGSW5kZXggaSA9
IDA7IGkgPCBnbHlwaENvdW50OyArK2kpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoc3RyaW5nSW5kaWNlc1tpXSA+PSBzdGF0aWNfY2FzdDxDRkluZGV4PihidWZmZXJMZW5ndGgp
KSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9u
dERhdGFDb3JlVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhQ29yZVRleHQuY3BwCShyZXZpc2lvbiAxNzg4NTcp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFD
b3JlVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKICAqLwogCiAjaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKKyNpbmNsdWRlICJG
b250LmgiCiAKICNpZiAhUExBVEZPUk0oSU9TKQogI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2Vydmlj
ZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgpAQCAtMzUsNyArMzUsNyBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLUNGRGljdGlvbmFyeVJlZiBTaW1wbGVGb250RGF0YTo6Z2V0Q0ZTdHJpbmdB
dHRyaWJ1dGVzKFR5cGVzZXR0aW5nRmVhdHVyZXMgdHlwZXNldHRpbmdGZWF0dXJlcywgRm9udE9y
aWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdAorQ0ZEaWN0aW9uYXJ5UmVmIEZvbnQ6OmdldENG
U3RyaW5nQXR0cmlidXRlcyhUeXBlc2V0dGluZ0ZlYXR1cmVzIHR5cGVzZXR0aW5nRmVhdHVyZXMs
IEZvbnRPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgY29uc3QKIHsKICAgICB1bnNpZ25lZCBrZXkg
PSB0eXBlc2V0dGluZ0ZlYXR1cmVzICsgMTsKICAgICBIYXNoTWFwPHVuc2lnbmVkLCBSZXRhaW5Q
dHI8Q0ZEaWN0aW9uYXJ5UmVmPj46OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSBtX0NGU3RyaW5nQXR0
cmlidXRlcy5hZGQoa2V5LCBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPigpKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YU1hYy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxl
Rm9udERhdGFNYWMubW0JKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAt
MjUsNyArMjUsNyBAQAogICovCiAKICNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiU2ltcGxl
Rm9udERhdGEuaCIKKyNpbXBvcnQgIkZvbnQuaCIKIAogI2ltcG9ydCAiQmxvY2tFeGNlcHRpb25z
LmgiCiAjaW1wb3J0ICJDb2xvci5oIgpAQCAtNzEsNyArNzEsNyBAQCBzdGF0aWMgYm9vbCBmb250
SGFzVmVydGljYWxHbHlwaHMoQ1RGb250CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMg
Ym9vbCBpbml0Rm9udERhdGEoU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQorc3RhdGljIGJvb2wg
aW5pdEZvbnREYXRhKEZvbnQqIGZvbnREYXRhKQogewogICAgIGlmICghZm9udERhdGEtPnBsYXRm
b3JtRGF0YSgpLmNnRm9udCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC04NSw3ICs4NSw3
IEBAIHN0YXRpYyBOU1N0cmluZyAqd2ViRmFsbGJhY2tGb250RmFtaWx5KHYKICAgICByZXR1cm4g
d2ViRmFsbGJhY2tGb250RmFtaWx5OwogfQogCi1jb25zdCBTaW1wbGVGb250RGF0YSogU2ltcGxl
Rm9udERhdGE6OmNvbXBvc2l0ZUZvbnRSZWZlcmVuY2VGb250RGF0YShOU0ZvbnQgKmtleSkgY29u
c3QKK2NvbnN0IEZvbnQqIEZvbnQ6OmNvbXBvc2l0ZUZvbnRSZWZlcmVuY2VGb250KE5TRm9udCAq
a2V5KSBjb25zdAogewogICAgIGlmICgha2V5IHx8IENGRXF1YWwoYWRvcHRDRihDVEZvbnRDb3B5
UG9zdFNjcmlwdE5hbWUoQ1RGb250UmVmKGtleSkpKS5nZXQoKSwgQ0ZTVFIoIkxhc3RSZXNvcnQi
KSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMTAzLDEyICsxMDMsMTIgQEAgY29uc3Qg
U2ltcGxlRm9udERhdGEqIFNpbXBsZUZvbnREYXRhOjpjbwogICAgICAgICBib29sIHN5bnRoZXRp
Y09ibGlxdWUgPSBwbGF0Zm9ybURhdGEoKS5zeW50aGV0aWNPYmxpcXVlKCkgJiYgISh0cmFpdHMg
JiBrQ1RGb250SXRhbGljVHJhaXQpOwogCiAgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEgc3Vic3Rp
dHV0ZVBsYXRmb3JtKHN1YnN0aXR1dGVGb250LCBwbGF0Zm9ybURhdGEoKS5zaXplKCksIGlzVXNp
bmdQcmludGVyRm9udCwgc3ludGhldGljQm9sZCwgc3ludGhldGljT2JsaXF1ZSwgcGxhdGZvcm1E
YXRhKCkub3JpZW50YXRpb24oKSwgcGxhdGZvcm1EYXRhKCkud2lkdGhWYXJpYW50KCkpOwotICAg
ICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gU2ltcGxlRm9udERhdGE6OmNyZWF0ZShz
dWJzdGl0dXRlUGxhdGZvcm0sIGlzQ3VzdG9tRm9udCgpKTsKKyAgICAgICAgYWRkUmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZSA9IEZvbnQ6OmNyZWF0ZShzdWJzdGl0dXRlUGxhdGZvcm0sIGlzQ3VzdG9t
Rm9udCgpKTsKICAgICB9CiAgICAgcmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0
KCk7CiB9CiAKLXZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtSW5pdCgpCit2b2lkIEZvbnQ6
OnBsYXRmb3JtSW5pdCgpCiB7CiAgICAgbV9zeW50aGV0aWNCb2xkT2Zmc2V0ID0gbV9wbGF0Zm9y
bURhdGEubV9zeW50aGV0aWNCb2xkID8gMS4wZiA6IDAuZjsKIApAQCAtMjI2LDcgKzIyNiw3IEBA
IHZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtSW5pdCgpCiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIHhIZWlnaHQgPSBzY2FsZUVtVG9Vbml0cyhDR0ZvbnRHZXRYSGVpZ2h0KG1fcGxhdGZv
cm1EYXRhLmNnRm9udCgpKSwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemU7CiAgICAgfSBlbHNlCi0g
ICAgICAgIHhIZWlnaHQgPSB2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250RGF0YSgpLT5mb250
TWV0cmljcygpLnhIZWlnaHQoKTsKKyAgICAgICAgeEhlaWdodCA9IHZlcnRpY2FsUmlnaHRPcmll
bnRhdGlvbkZvbnQoKS0+Zm9udE1ldHJpY3MoKS54SGVpZ2h0KCk7CiAKICAgICBtX2ZvbnRNZXRy
aWNzLnNldFVuaXRzUGVyRW0odW5pdHNQZXJFbSk7CiAgICAgbV9mb250TWV0cmljcy5zZXRBc2Nl
bnQoYXNjZW50KTsKQEAgLTI0MSw3ICsyNDEsNyBAQCBzdGF0aWMgQ0ZEYXRhUmVmIGNvcHlGb250
VGFibGVGb3JUYWcoRm9uCiAgICAgcmV0dXJuIENHRm9udENvcHlUYWJsZUZvclRhZyhwbGF0Zm9y
bURhdGEuY2dGb250KCksIHRhYmxlTmFtZSk7CiB9CiAKLXZvaWQgU2ltcGxlRm9udERhdGE6OnBs
YXRmb3JtQ2hhcldpZHRoSW5pdCgpCit2b2lkIEZvbnQ6OnBsYXRmb3JtQ2hhcldpZHRoSW5pdCgp
CiB7CiAgICAgbV9hdmdDaGFyV2lkdGggPSAwOwogICAgIG1fbWF4Q2hhcldpZHRoID0gMDsKQEAg
LTI2OSwxNyArMjY5LDE3IEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQ2hhcldpZHRo
SW4KIH0KICNlbmRpZiAvLyBVU0UoQVBQS0lUKQogCi12b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0
Zm9ybURlc3Ryb3koKQordm9pZCBGb250OjpwbGF0Zm9ybURlc3Ryb3koKQogewogfQogCiAjaWYg
IVBMQVRGT1JNKElPUykKLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRh
OjpwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9u
dERlc2NyaXB0aW9uLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3QKK1Bhc3NSZWZQdHI8Rm9udD4g
Rm9udDo6cGxhdGZvcm1DcmVhdGVTY2FsZWRGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9u
dERlc2NyaXB0aW9uLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3QKIHsKICAgICBpZiAoaXNDdXN0
b21Gb250KCkpIHsKICAgICAgICAgRm9udFBsYXRmb3JtRGF0YSBzY2FsZWRGb250RGF0YShtX3Bs
YXRmb3JtRGF0YSk7CiAgICAgICAgIHNjYWxlZEZvbnREYXRhLm1fc2l6ZSA9IHNjYWxlZEZvbnRE
YXRhLm1fc2l6ZSAqIHNjYWxlRmFjdG9yOwotICAgICAgICByZXR1cm4gU2ltcGxlRm9udERhdGE6
OmNyZWF0ZShzY2FsZWRGb250RGF0YSwgdHJ1ZSwgZmFsc2UpOworICAgICAgICByZXR1cm4gRm9u
dDo6Y3JlYXRlKHNjYWxlZEZvbnREYXRhLCB0cnVlLCBmYWxzZSk7CiAgICAgfQogCiAgICAgQkVH
SU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwpAQCAtMzEwLDcgKzMxMCw3IEBAIFBhc3NSZWZQdHI8
U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXQKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBT
aW1wbGVGb250RGF0YTo6ZGV0ZXJtaW5lUGl0Y2goKQordm9pZCBGb250OjpkZXRlcm1pbmVQaXRj
aCgpCiB7CiAgICAgTlNGb250KiBmID0gbV9wbGF0Zm9ybURhdGEubnNGb250KCk7CiAgICAgLy8g
U3BlY2lhbCBjYXNlIE9zYWthLU1vbm8uCkBAIC0zMzMsNyArMzMzLDcgQEAgdm9pZCBTaW1wbGVG
b250RGF0YTo6ZGV0ZXJtaW5lUGl0Y2goKQogfQogI2VuZGlmIC8vICFQTEFURk9STShJT1MpCiAK
LUZsb2F0UmVjdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCBn
bHlwaCkgY29uc3QKK0Zsb2F0UmVjdCBGb250OjpwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKEdseXBo
IGdseXBoKSBjb25zdAogewogICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveDsKICAgICBib3VuZGlu
Z0JveCA9IENURm9udEdldEJvdW5kaW5nUmVjdHNGb3JHbHlwaHMobV9wbGF0Zm9ybURhdGEuY3RG
b250KCksIHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwgPyBrQ1RGb250
VmVydGljYWxPcmllbnRhdGlvbiA6IGtDVEZvbnRIb3Jpem9udGFsT3JpZW50YXRpb24sICZnbHlw
aCwgMCwgMSk7CkBAIC0zNDUsNyArMzQ1LDcgQEAgRmxvYXRSZWN0IFNpbXBsZUZvbnREYXRhOjpw
bGF0Zm9ybUJvdW5kcwogfQogCiAjaWYgUExBVEZPUk0oTUFDKQotaW5saW5lIENHRm9udFJlbmRl
cmluZ1N0eWxlIFNpbXBsZUZvbnREYXRhOjpyZW5kZXJpbmdTdHlsZSgpIGNvbnN0CitpbmxpbmUg
Q0dGb250UmVuZGVyaW5nU3R5bGUgRm9udDo6cmVuZGVyaW5nU3R5bGUoKSBjb25zdAogewogICAg
IENHRm9udFJlbmRlcmluZ1N0eWxlIHN0eWxlID0ga0NHRm9udFJlbmRlcmluZ1N0eWxlQW50aWFs
aWFzaW5nIHwga0NHRm9udFJlbmRlcmluZ1N0eWxlU3VicGl4ZWxQb3NpdGlvbmluZyB8IGtDR0Zv
bnRSZW5kZXJpbmdTdHlsZVN1YnBpeGVsUXVhbnRpemF0aW9uOwogICAgIE5TRm9udCAqZm9udCA9
IHBsYXRmb3JtRGF0YSgpLm5zRm9udCgpOwpAQCAtMzY0LDcgKzM2NCw3IEBAIGlubGluZSBDR0Zv
bnRSZW5kZXJpbmdTdHlsZSBTaW1wbGVGb250RGEKICAgICByZXR1cm4gc3R5bGU7CiB9CiAKLWlu
bGluZSBib29sIFNpbXBsZUZvbnREYXRhOjphZHZhbmNlRm9yQ29sb3JCaXRtYXBGb250KEdseXBo
IGdseXBoLCBDR1NpemUmIGFkdmFuY2UpIGNvbnN0CitpbmxpbmUgYm9vbCBGb250OjphZHZhbmNl
Rm9yQ29sb3JCaXRtYXBGb250KEdseXBoIGdseXBoLCBDR1NpemUmIGFkdmFuY2UpIGNvbnN0CiB7
CiAgICAgTlNGb250ICpmb250ID0gcGxhdGZvcm1EYXRhKCkubnNGb250KCk7CiAgICAgaWYgKCFm
b250IHx8ICFwbGF0Zm9ybURhdGEoKS5pc0NvbG9yQml0bWFwRm9udCgpKQpAQCAtMzk0LDcgKzM5
NCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0Vtb2ppKGNvbnN0IEZvbnRQbGEKICNlbmRpZgog
fQogCi1pbmxpbmUgYm9vbCBTaW1wbGVGb250RGF0YTo6Y2FuVXNlRmFzdEdseXBoQWR2YW5jZUdl
dHRlcihHbHlwaCBnbHlwaCwgQ0dTaXplJiBhZHZhbmNlLCBib29sJiBwb3B1bGF0ZWRBZHZhbmNl
KSBjb25zdAoraW5saW5lIGJvb2wgRm9udDo6Y2FuVXNlRmFzdEdseXBoQWR2YW5jZUdldHRlcihH
bHlwaCBnbHlwaCwgQ0dTaXplJiBhZHZhbmNlLCBib29sJiBwb3B1bGF0ZWRBZHZhbmNlKSBjb25z
dAogewogICAgIC8vIEZhc3QgZ2V0dGVyIGRvZXNuJ3QgdGFrZSBjdXN0b20gdHJhY2tpbmcgaW50
byBhY2NvdW50CiAgICAgaWYgKGhhc0N1c3RvbVRyYWNraW5nKHBsYXRmb3JtRGF0YSgpLmN0Rm9u
dCgpKSkKQEAgLTQxMCw3ICs0MTAsNyBAQCBpbmxpbmUgYm9vbCBTaW1wbGVGb250RGF0YTo6Y2Fu
VXNlRmFzdEdsCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWZsb2F0IFNpbXBsZUZvbnREYXRhOjpw
bGF0Zm9ybVdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CitmbG9hdCBGb250OjpwbGF0
Zm9ybVdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CiB7CiAgICAgQ0dTaXplIGFkdmFu
Y2UgPSBDR1NpemVaZXJvOwogICAgIGJvb2wgaG9yaXpvbnRhbCA9IHBsYXRmb3JtRGF0YSgpLm9y
aWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbDsKQEAgLTQ0Niw3ICs0NDYsNyBAQCBzdGF0aWMgY29u
c3QgVW5pQ2hhciogcHJvdmlkZVN0cmluZ0FuZEF0CiAgICAgcmV0dXJuIGluZm8tPmNoYXJhY3Rl
cnMgKyBzdHJpbmdJbmRleDsKIH0KIAotYm9vbCBTaW1wbGVGb250RGF0YTo6Y2FuUmVuZGVyQ29t
YmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBs
ZW5ndGgpIGNvbnN0Citib29sIEZvbnQ6OmNhblJlbmRlckNvbWJpbmluZ0NoYXJhY3RlclNlcXVl
bmNlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKSBjb25zdAogewogICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlTWF0aERhdGEuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlTWF0aERhdGEu
Y3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVudHlwZS9PcGVuVHlwZU1hdGhEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTIg
KzI2LDEyIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiT3BlblR5cGVNYXRoRGF0
YS5oIgogCisjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIK
ICNpZiBFTkFCTEUoT1BFTlRZUEVfTUFUSCkKICNpbmNsdWRlICJPcGVuVHlwZVR5cGVzLmgiCiAj
ZW5kaWYKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0
YS5oIgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCkBAIC0yMzUsOSArMjM1LDkgQEAgc3RydWN0
IE1BVEhUYWJsZSA6IFRhYmxlQmFzZSB7CiAjZW5kaWYgLy8gRU5BQkxFKE9QRU5UWVBFX01BVEgp
CiAKICNpZiBFTkFCTEUoT1BFTlRZUEVfTUFUSCkKLU9wZW5UeXBlTWF0aERhdGE6Ok9wZW5UeXBl
TWF0aERhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZm9udERhdGEpCitPcGVuVHlwZU1hdGhE
YXRhOjpPcGVuVHlwZU1hdGhEYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnQpCiB7Ci0g
ICAgbV9tYXRoQnVmZmVyID0gZm9udERhdGEub3BlblR5cGVUYWJsZShPcGVuVHlwZTo6TUFUSFRh
Zyk7CisgICAgbV9tYXRoQnVmZmVyID0gZm9udC5vcGVuVHlwZVRhYmxlKE9wZW5UeXBlOjpNQVRI
VGFnKTsKICAgICBjb25zdCBPcGVuVHlwZTo6TUFUSFRhYmxlKiBtYXRoID0gT3BlblR5cGU6OnZh
bGlkYXRlVGFibGU8T3BlblR5cGU6Ok1BVEhUYWJsZT4obV9tYXRoQnVmZmVyKTsKICAgICBpZiAo
IW1hdGgpIHsKICAgICAgICAgbV9tYXRoQnVmZmVyID0gbnVsbHB0cjsKQEAgLTI2NSw3ICsyNjUs
NyBAQCBPcGVuVHlwZU1hdGhEYXRhOjp+T3BlblR5cGVNYXRoRGF0YSgpCiB9CiAKICNpZiBFTkFC
TEUoT1BFTlRZUEVfTUFUSCkKLWZsb2F0IE9wZW5UeXBlTWF0aERhdGE6OmdldE1hdGhDb25zdGFu
dChjb25zdCBTaW1wbGVGb250RGF0YSYgZm9udCwgTWF0aENvbnN0YW50IGNvbnN0YW50KSBjb25z
dAorZmxvYXQgT3BlblR5cGVNYXRoRGF0YTo6Z2V0TWF0aENvbnN0YW50KGNvbnN0IEZvbnQmIGZv
bnQsIE1hdGhDb25zdGFudCBjb25zdGFudCkgY29uc3QKIHsKICAgICBpbnQzMl90IHZhbHVlID0g
MDsKIApAQCAtMjg4LDcgKzI4OCw3IEBAIGZsb2F0IE9wZW5UeXBlTWF0aERhdGE6OmdldE1hdGhD
b25zdGFudCgKIAogICAgIHJldHVybiB2YWx1ZSAqIGZvbnQuc2l6ZVBlclVuaXQoKTsKICNlbHNl
Ci1mbG9hdCBPcGVuVHlwZU1hdGhEYXRhOjpnZXRNYXRoQ29uc3RhbnQoY29uc3QgU2ltcGxlRm9u
dERhdGEmLCBNYXRoQ29uc3RhbnQpIGNvbnN0CitmbG9hdCBPcGVuVHlwZU1hdGhEYXRhOjpnZXRN
YXRoQ29uc3RhbnQoY29uc3QgRm9udCYsIE1hdGhDb25zdGFudCkgY29uc3QKIHsKICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gMDsKQEAgLTI5Niw3ICsyOTYsNyBAQCBmbG9h
dCBPcGVuVHlwZU1hdGhEYXRhOjpnZXRNYXRoQ29uc3RhbnQoCiB9CiAKICNpZiBFTkFCTEUoT1BF
TlRZUEVfTUFUSCkKLWZsb2F0IE9wZW5UeXBlTWF0aERhdGE6OmdldEl0YWxpY0NvcnJlY3Rpb24o
Y29uc3QgU2ltcGxlRm9udERhdGEmIGZvbnQsIEdseXBoIGdseXBoKSBjb25zdAorZmxvYXQgT3Bl
blR5cGVNYXRoRGF0YTo6Z2V0SXRhbGljQ29ycmVjdGlvbihjb25zdCBGb250JiBmb250LCBHbHlw
aCBnbHlwaCkgY29uc3QKIHsKICAgICBjb25zdCBPcGVuVHlwZTo6TUFUSFRhYmxlKiBtYXRoID0g
T3BlblR5cGU6OnZhbGlkYXRlVGFibGU8T3BlblR5cGU6Ok1BVEhUYWJsZT4obV9tYXRoQnVmZmVy
KTsKICAgICBBU1NFUlQobWF0aCk7CkBAIC0zMTAsNyArMzEwLDcgQEAgZmxvYXQgT3BlblR5cGVN
YXRoRGF0YTo6Z2V0SXRhbGljQ29ycmVjdAogCiAgICAgcmV0dXJuIG1hdGhJdGFsaWNzQ29ycmVj
dGlvbkluZm8tPmdldEl0YWxpY0NvcnJlY3Rpb24oKm1fbWF0aEJ1ZmZlciwgZ2x5cGgpICogZm9u
dC5zaXplUGVyVW5pdCgpOwogI2Vsc2UKLWZsb2F0IE9wZW5UeXBlTWF0aERhdGE6OmdldEl0YWxp
Y0NvcnJlY3Rpb24oY29uc3QgU2ltcGxlRm9udERhdGEmLCBHbHlwaCkgY29uc3QKK2Zsb2F0IE9w
ZW5UeXBlTWF0aERhdGE6OmdldEl0YWxpY0NvcnJlY3Rpb24oY29uc3QgRm9udCYsIEdseXBoKSBj
b25zdAogewogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiAwOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVNYXRoRGF0
YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW50
eXBlL09wZW5UeXBlTWF0aERhdGEuaAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVNYXRoRGF0YS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNSwxMyArMzUsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBG
b250UGxhdGZvcm1EYXRhOwogY2xhc3MgU2hhcmVkQnVmZmVyOwotY2xhc3MgU2ltcGxlRm9udERh
dGE7CitjbGFzcyBGb250OwogCiBjbGFzcyBPcGVuVHlwZU1hdGhEYXRhIDogcHVibGljIFJlZkNv
dW50ZWQ8T3BlblR5cGVNYXRoRGF0YT4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRy
PE9wZW5UeXBlTWF0aERhdGE+IGNyZWF0ZShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBmb250RGF0
YSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxPcGVuVHlwZU1hdGhEYXRhPiBjcmVhdGUoY29uc3Qg
Rm9udFBsYXRmb3JtRGF0YSYgZm9udCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgT3BlblR5cGVNYXRoRGF0YShmb250RGF0YSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IE9wZW5UeXBlTWF0aERhdGEoZm9udCkpOwogICAgIH0KICAgICB+T3BlblR5cGVNYXRoRGF0
YSgpOwogCkBAIC0xMTMsOCArMTEzLDggQEAgcHVibGljOgogICAgICAgICBib29sIGlzRXh0ZW5k
ZXI7CiAgICAgfTsKIAotICAgIGZsb2F0IGdldE1hdGhDb25zdGFudChjb25zdCBTaW1wbGVGb250
RGF0YSYsIE1hdGhDb25zdGFudCkgY29uc3Q7Ci0gICAgZmxvYXQgZ2V0SXRhbGljQ29ycmVjdGlv
bihjb25zdCBTaW1wbGVGb250RGF0YSYsIEdseXBoKSBjb25zdDsKKyAgICBmbG9hdCBnZXRNYXRo
Q29uc3RhbnQoY29uc3QgRm9udCYsIE1hdGhDb25zdGFudCkgY29uc3Q7CisgICAgZmxvYXQgZ2V0
SXRhbGljQ29ycmVjdGlvbihjb25zdCBGb250JiwgR2x5cGgpIGNvbnN0OwogICAgIHZvaWQgZ2V0
TWF0aFZhcmlhbnRzKEdseXBoLCBib29sIGlzVmVydGljYWwsIFZlY3RvcjxHbHlwaD4mIHNpemVW
YXJpYW50cywgVmVjdG9yPEFzc2VtYmx5UGFydD4mIGFzc2VtYmx5UGFydHMpIGNvbnN0OwogCiBw
cml2YXRlOgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNw
cAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZs
b3dCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDksNyArNDQ5LDcgQEAgYm9vbCBJbmxpbmVG
bG93Qm94OjpyZXF1aXJlc0lkZW9ncmFwaGljQgogCiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIGxp
bmVTdHlsZSA9IHRoaXMtPmxpbmVTdHlsZSgpOwogICAgIGlmIChsaW5lU3R5bGUuZm9udERlc2Ny
aXB0aW9uKCkubm9uQ0pLR2x5cGhPcmllbnRhdGlvbigpID09IE5vbkNKS0dseXBoT3JpZW50YXRp
b25VcHJpZ2h0Ci0gICAgICAgIHx8IGxpbmVTdHlsZS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250
RGF0YSgpLmhhc1ZlcnRpY2FsR2x5cGhzKCkpCisgICAgICAgIHx8IGxpbmVTdHlsZS5mb250Q2Fz
Y2FkZSgpLnByaW1hcnlGb250KCkuaGFzVmVydGljYWxHbHlwaHMoKSkKICAgICAgICAgcmV0dXJu
IHRydWU7CiAKICAgICBmb3IgKElubGluZUJveCogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxk
OyBjaGlsZCA9IGNoaWxkLT5uZXh0T25MaW5lKCkpIHsKQEAgLTQ2MCwxOCArNDYwLDE4IEBAIGJv
b2wgSW5saW5lRmxvd0JveDo6cmVxdWlyZXNJZGVvZ3JhcGhpY0IKICAgICAgICAgICAgIGlmIChk
b3duY2FzdDxJbmxpbmVGbG93Qm94PigqY2hpbGQpLnJlcXVpcmVzSWRlb2dyYXBoaWNCYXNlbGlu
ZSh0ZXh0Qm94RGF0YU1hcCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoY2hpbGQtPmxpbmVTdHlsZSgpLmZvbnRDYXNjYWRl
KCkucHJpbWFyeUZvbnREYXRhKCkuaGFzVmVydGljYWxHbHlwaHMoKSkKKyAgICAgICAgICAgIGlm
IChjaGlsZC0+bGluZVN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpLmhhc1ZlcnRp
Y2FsR2x5cGhzKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAK
LSAgICAgICAgICAgIGNvbnN0IFZlY3Rvcjxjb25zdCBTaW1wbGVGb250RGF0YSo+KiB1c2VkRm9u
dHMgPSBudWxscHRyOworICAgICAgICAgICAgY29uc3QgVmVjdG9yPGNvbnN0IEZvbnQqPiogdXNl
ZEZvbnRzID0gbnVsbHB0cjsKICAgICAgICAgICAgIGlmIChpczxJbmxpbmVUZXh0Qm94PigqY2hp
bGQpKSB7CiAgICAgICAgICAgICAgICAgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGV4dEJveERhdGFNYXAuZmluZChkb3duY2FzdDxJbmxpbmVU
ZXh0Qm94PihjaGlsZCkpOwogICAgICAgICAgICAgICAgIHVzZWRGb250cyA9IGl0ID09IHRleHRC
b3hEYXRhTWFwLmVuZCgpID8gbnVsbHB0ciA6ICZpdC0+dmFsdWUuZmlyc3Q7CiAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgIGlmICh1c2VkRm9udHMpIHsKLSAgICAgICAgICAgICAgICBmb3Ig
KGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSA6ICp1c2VkRm9udHMpIHsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKGZvbnREYXRhLT5oYXNWZXJ0aWNhbEdseXBocygpKQorICAgICAgICAg
ICAgICAgIGZvciAoY29uc3QgRm9udCogZm9udCA6ICp1c2VkRm9udHMpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGZvbnQtPmhhc1ZlcnRpY2FsR2x5cGhzKCkpCiAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmgJKHJldmlzaW9uIDE3
ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmgJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDEyICszMSwxMiBAQCBjbGFzcyBIaXRUZXN0UmVxdWVzdDsKIGNsYXNz
IEhpdFRlc3RSZXN1bHQ7CiBjbGFzcyBJbmxpbmVUZXh0Qm94OwogY2xhc3MgUmVuZGVyTGluZUJv
eExpc3Q7Ci1jbGFzcyBTaW1wbGVGb250RGF0YTsKK2NsYXNzIEZvbnQ7CiBjbGFzcyBWZXJ0aWNh
bFBvc2l0aW9uQ2FjaGU7CiAKIHN0cnVjdCBHbHlwaE92ZXJmbG93OwogCi10eXBlZGVmIEhhc2hN
YXA8Y29uc3QgSW5saW5lVGV4dEJveCosIHN0ZDo6cGFpcjxWZWN0b3I8Y29uc3QgU2ltcGxlRm9u
dERhdGEqPiwgR2x5cGhPdmVyZmxvdz4+IEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFw
OwordHlwZWRlZiBIYXNoTWFwPGNvbnN0IElubGluZVRleHRCb3gqLCBzdGQ6OnBhaXI8VmVjdG9y
PGNvbnN0IEZvbnQqPiwgR2x5cGhPdmVyZmxvdz4+IEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0Zv
bnRzTWFwOwogCiBjbGFzcyBJbmxpbmVGbG93Qm94IDogcHVibGljIElubGluZUJveCB7CiBwdWJs
aWM6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCShy
ZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJv
eC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzODEsNyArMTM4MSw3IEBAIFRleHRSdW4gSW5saW5l
VGV4dEJveDo6Y29uc3RydWN0VGV4dFJ1bigKIAogICAgIFRleHRSdW4gcnVuKHN0cmluZywgdGV4
dFBvcygpLCBleHBhbnNpb24oKSwgZXhwYW5zaW9uQmVoYXZpb3IoKSwgZGlyZWN0aW9uKCksIGRp
ck92ZXJyaWRlKCkgfHwgc3R5bGUucnRsT3JkZXJpbmcoKSA9PSBWaXN1YWxPcmRlciwgIXJlbmRl
cmVyKCkuY2FuVXNlU2ltcGxlRm9udENvZGVQYXRoKCkpOwogICAgIHJ1bi5zZXRUYWJTaXplKCFz
dHlsZS5jb2xsYXBzZVdoaXRlU3BhY2UoKSwgc3R5bGUudGFiU2l6ZSgpKTsKLSAgICBpZiAoZm9u
dC5wcmltYXJ5Rm9udERhdGEoKS5pc1NWR0ZvbnQoKSkKKyAgICBpZiAoZm9udC5wcmltYXJ5Rm9u
dCgpLmlzU1ZHRm9udCgpKQogICAgICAgICBydW4uc2V0UmVuZGVyaW5nQ29udGV4dChTVkdUZXh0
UnVuUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlKHJlbmRlcmVyKCkpKTsKIAogICAgIC8vIFByb3Bh
Z2F0ZSB0aGUgbWF4aW11bSBsZW5ndGggb2YgdGhlIGNoYXJhY3RlcnMgYnVmZmVyIHRvIHRoZSBU
ZXh0UnVuLCBldmVuIHdoZW4gd2UncmUgb25seSBwcm9jZXNzaW5nIGEgc3Vic3RyaW5nLgpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiAxNzg4
NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMzI1LDcgKzIzMjUsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjphZGp1
c3RMb2dpY2FsTGVmCiAgICAgICAgIHJldHVybiBsZWZ0OwogCiAgICAgLy8gRklYTUU6IFNob3Vs
ZCBsZXR0ZXItc3BhY2luZyBhcHBseT8gVGhpcyBpcyBjb21wbGljYXRlZCBzaW5jZSBpdCBkb2Vz
bid0IGFwcGx5IGF0IHRoZSBlZGdlPwotICAgIGZsb2F0IG1heENoYXJXaWR0aCA9IGxpbmVHcmlk
LT5zdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkubWF4Q2hhcldpZHRoKCk7
CisgICAgZmxvYXQgbWF4Q2hhcldpZHRoID0gbGluZUdyaWQtPnN0eWxlKCkuZm9udENhc2NhZGUo
KS5wcmltYXJ5Rm9udCgpLm1heENoYXJXaWR0aCgpOwogICAgIGlmICghbWF4Q2hhcldpZHRoKQog
ICAgICAgICByZXR1cm4gbGVmdDsKIApAQCAtMjM2NSw3ICsyMzY1LDcgQEAgTGF5b3V0VW5pdCBS
ZW5kZXJCbG9jazo6YWRqdXN0TG9naWNhbFJpZwogICAgICAgICByZXR1cm4gcmlnaHQ7CiAKICAg
ICAvLyBGSVhNRTogU2hvdWxkIGxldHRlci1zcGFjaW5nIGFwcGx5PyBUaGlzIGlzIGNvbXBsaWNh
dGVkIHNpbmNlIGl0IGRvZXNuJ3QgYXBwbHkgYXQgdGhlIGVkZ2U/Ci0gICAgZmxvYXQgbWF4Q2hh
cldpZHRoID0gbGluZUdyaWQtPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEo
KS5tYXhDaGFyV2lkdGgoKTsKKyAgICBmbG9hdCBtYXhDaGFyV2lkdGggPSBsaW5lR3JpZC0+c3R5
bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCkubWF4Q2hhcldpZHRoKCk7CiAgICAgaWYg
KCFtYXhDaGFyV2lkdGgpCiAgICAgICAgIHJldHVybiByaWdodDsKIApAQCAtMzcwNSw3ICszNzA1
LDcgQEAgc3RhdGljIGlubGluZSBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW5JbgogICAgIGJvb2wg
ZGlyZWN0aW9uYWxPdmVycmlkZSA9IHN0eWxlLnJ0bE9yZGVyaW5nKCkgPT0gVmlzdWFsT3JkZXI7
CiAKICAgICBUZXh0UnVuIHJ1bihjaGFyYWN0ZXJzLCBsZW5ndGgsIDAsIDAsIGV4cGFuc2lvbiwg
dGV4dERpcmVjdGlvbiwgZGlyZWN0aW9uYWxPdmVycmlkZSk7Ci0gICAgaWYgKGZvbnQucHJpbWFy
eUZvbnREYXRhKCkuaXNTVkdGb250KCkpIHsKKyAgICBpZiAoZm9udC5wcmltYXJ5Rm9udCgpLmlz
U1ZHRm9udCgpKSB7CiAgICAgICAgIEFTU0VSVChjb250ZXh0KTsgLy8gRklYTUU6IFRocmVhZCBh
IFJlbmRlck9iamVjdCYgdG8gdGhpcyBwb2ludCBzbyB3ZSBkb24ndCBoYXZlIHRvIGRlcmVmZXJl
bmNlIGFueXRoaW5nLgogICAgICAgICBydW4uc2V0UmVuZGVyaW5nQ29udGV4dChTVkdUZXh0UnVu
UmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlKCpjb250ZXh0KSk7CiAgICAgfQpAQCAtMzcyNSw3ICsz
NzI1LDcgQEAgc3RhdGljIGlubGluZSBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW5JbgogICAgICAg
ICAgICAgZGlyZWN0aW9uYWxPdmVycmlkZSB8PSBpc092ZXJyaWRlKHN0eWxlLnVuaWNvZGVCaWRp
KCkpOwogICAgIH0KICAgICBUZXh0UnVuIHJ1bihjaGFyYWN0ZXJzLCBsZW5ndGgsIDAsIDAsIGV4
cGFuc2lvbiwgdGV4dERpcmVjdGlvbiwgZGlyZWN0aW9uYWxPdmVycmlkZSk7Ci0gICAgaWYgKGZv
bnQucHJpbWFyeUZvbnREYXRhKCkuaXNTVkdGb250KCkpIHsKKyAgICBpZiAoZm9udC5wcmltYXJ5
Rm9udCgpLmlzU1ZHRm9udCgpKSB7CiAgICAgICAgIEFTU0VSVChjb250ZXh0KTsgLy8gRklYTUU6
IFRocmVhZCBhIFJlbmRlck9iamVjdCYgdG8gdGhpcyBwb2ludCBzbyB3ZSBkb24ndCBoYXZlIHRv
IGRlcmVmZXJlbmNlIGFueXRoaW5nLgogICAgICAgICBydW4uc2V0UmVuZGVyaW5nQ29udGV4dChT
VkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlKCpjb250ZXh0KSk7CiAgICAgfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91
dC5jcHAJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9ja0xpbmVMYXlvdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTgsNyArNDU4LDcgQEAg
dm9pZCBSZW5kZXJCbG9ja0Zsb3c6OnNldE1hcmdpbnNGb3JSdWJ5Ugogc3RhdGljIGlubGluZSB2
b2lkIHNldExvZ2ljYWxXaWR0aEZvclRleHRSdW4oUm9vdElubGluZUJveCogbGluZUJveCwgQmlk
aVJ1biogcnVuLCBSZW5kZXJUZXh0KiByZW5kZXJlciwgZmxvYXQgeFBvcywgY29uc3QgTGluZUlu
Zm8mIGxpbmVJbmZvLAogICAgIEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwJiB0ZXh0
Qm94RGF0YU1hcCwgVmVydGljYWxQb3NpdGlvbkNhY2hlJiB2ZXJ0aWNhbFBvc2l0aW9uQ2FjaGUs
IFdvcmRNZWFzdXJlbWVudHMmIHdvcmRNZWFzdXJlbWVudHMpCiB7Ci0gICAgSGFzaFNldDxjb25z
dCBTaW1wbGVGb250RGF0YSo+IGZhbGxiYWNrRm9udHM7CisgICAgSGFzaFNldDxjb25zdCBGb250
Kj4gZmFsbGJhY2tGb250czsKICAgICBHbHlwaE92ZXJmbG93IGdseXBoT3ZlcmZsb3c7CiAKICAg
ICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IGxpbmVTdHlsZSgqcmVuZGVyZXItPnBhcmVudCgp
LCBsaW5lSW5mbykuZm9udENhc2NhZGUoKTsKQEAgLTUwOSw4ICs1MDksOCBAQCBzdGF0aWMgaW5s
aW5lIHZvaWQgc2V0TG9naWNhbFdpZHRoRm9yVGV4CiAgICAgICAgICAgICB9IGVsc2UKICAgICAg
ICAgICAgICAgICBtZWFzdXJlZFdpZHRoICs9IHdvcmRNZWFzdXJlbWVudC53aWR0aDsKICAgICAg
ICAgICAgIGlmICghd29yZE1lYXN1cmVtZW50LmZhbGxiYWNrRm9udHMuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgICAgICAgICAgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+Ojpjb25zdF9pdGVy
YXRvciBlbmQgPSB3b3JkTWVhc3VyZW1lbnQuZmFsbGJhY2tGb250cy5lbmQoKTsKLSAgICAgICAg
ICAgICAgICBmb3IgKEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPjo6Y29uc3RfaXRlcmF0
b3IgaXQgPSB3b3JkTWVhc3VyZW1lbnQuZmFsbGJhY2tGb250cy5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpCisgICAgICAgICAgICAgICAgSGFzaFNldDxjb25zdCBGb250Kj46OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IHdvcmRNZWFzdXJlbWVudC5mYWxsYmFja0ZvbnRzLmVuZCgpOworICAgICAgICAg
ICAgICAgIGZvciAoSGFzaFNldDxjb25zdCBGb250Kj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gd29y
ZE1lYXN1cmVtZW50LmZhbGxiYWNrRm9udHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQogICAg
ICAgICAgICAgICAgICAgICBmYWxsYmFja0ZvbnRzLmFkZCgqaXQpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CkBAIC01MjcsNyArNTI3LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldExvZ2lj
YWxXaWR0aEZvclRleAogICAgIHJ1bi0+Ym94KCktPnNldExvZ2ljYWxXaWR0aChtZWFzdXJlZFdp
ZHRoICsgaHlwaGVuV2lkdGgpOwogICAgIGlmICghZmFsbGJhY2tGb250cy5pc0VtcHR5KCkpIHsK
ICAgICAgICAgQVNTRVJUKHJ1bi0+Ym94KCktPmJlaGF2ZXNMaWtlVGV4dCgpKTsKLSAgICAgICAg
R2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXA6Oml0ZXJhdG9yIGl0ID0gdGV4dEJveERh
dGFNYXAuYWRkKGRvd25jYXN0PElubGluZVRleHRCb3g+KHJ1bi0+Ym94KCkpLCBzdGQ6Om1ha2Vf
cGFpcihWZWN0b3I8Y29uc3QgU2ltcGxlRm9udERhdGEqPigpLCBHbHlwaE92ZXJmbG93KCkpKS5p
dGVyYXRvcjsKKyAgICAgICAgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXA6Oml0ZXJh
dG9yIGl0ID0gdGV4dEJveERhdGFNYXAuYWRkKGRvd25jYXN0PElubGluZVRleHRCb3g+KHJ1bi0+
Ym94KCkpLCBzdGQ6Om1ha2VfcGFpcihWZWN0b3I8Y29uc3QgRm9udCo+KCksIEdseXBoT3ZlcmZs
b3coKSkpLml0ZXJhdG9yOwogICAgICAgICBBU1NFUlQoaXQtPnZhbHVlLmZpcnN0LmlzRW1wdHko
KSk7CiAgICAgICAgIGNvcHlUb1ZlY3RvcihmYWxsYmFja0ZvbnRzLCBpdC0+dmFsdWUuZmlyc3Qp
OwogICAgICAgICBydW4tPmJveCgpLT5wYXJlbnQoKS0+Y2xlYXJEZXNjZW5kYW50c0hhdmVTYW1l
TGluZUhlaWdodEFuZEJhc2VsaW5lKCk7CkBAIC01MzksNyArNTM5LDcgQEAgc3RhdGljIGlubGlu
ZSB2b2lkIHNldExvZ2ljYWxXaWR0aEZvclRleAogCiAgICAgaWYgKCFnbHlwaE92ZXJmbG93Lmlz
RW1wdHkoKSkgewogICAgICAgICBBU1NFUlQocnVuLT5ib3goKS0+YmVoYXZlc0xpa2VUZXh0KCkp
OwotICAgICAgICBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcDo6aXRlcmF0b3IgaXQg
PSB0ZXh0Qm94RGF0YU1hcC5hZGQoZG93bmNhc3Q8SW5saW5lVGV4dEJveD4ocnVuLT5ib3goKSks
IHN0ZDo6bWFrZV9wYWlyKFZlY3Rvcjxjb25zdCBTaW1wbGVGb250RGF0YSo+KCksIEdseXBoT3Zl
cmZsb3coKSkpLml0ZXJhdG9yOworICAgICAgICBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250
c01hcDo6aXRlcmF0b3IgaXQgPSB0ZXh0Qm94RGF0YU1hcC5hZGQoZG93bmNhc3Q8SW5saW5lVGV4
dEJveD4ocnVuLT5ib3goKSksIHN0ZDo6bWFrZV9wYWlyKFZlY3Rvcjxjb25zdCBGb250Kj4oKSwg
R2x5cGhPdmVyZmxvdygpKSkuaXRlcmF0b3I7CiAgICAgICAgIGl0LT52YWx1ZS5zZWNvbmQgPSBn
bHlwaE92ZXJmbG93OwogICAgICAgICBydW4tPmJveCgpLT5jbGVhcktub3duVG9IYXZlTm9PdmVy
ZmxvdygpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb21i
aW5lVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckNvbWJpbmVUZXh0LmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcs
NyBAQCB2b2lkIFJlbmRlckNvbWJpbmVUZXh0OjpzZXRSZW5kZXJlZFRleHQoCiAgICAgbV9uZWVk
c0ZvbnRVcGRhdGUgPSB0cnVlOwogfQogCi1mbG9hdCBSZW5kZXJDb21iaW5lVGV4dDo6d2lkdGgo
dW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwg
ZmxvYXQgeFBvc2l0aW9uLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNr
Rm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0CitmbG9hdCBSZW5kZXJD
b21iaW5lVGV4dDo6d2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBG
b250Q2FzY2FkZSYgZm9udCwgZmxvYXQgeFBvc2l0aW9uLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiog
ZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKIHsKICAg
ICBpZiAobV9pc0NvbWJpbmVkKQogICAgICAgICByZXR1cm4gZm9udC5zaXplKCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuaAkocmV2aXNpb24g
MTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIG5vZGUo
KSBjb25zdCA9IGRlbGV0ZTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0NvbWJpbmVUZXh0KCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgZmxvYXQgd2lkdGgodW5z
aWduZWQgZnJvbSwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBGb250Q2FzY2FkZSYsIGZsb2F0IHhQ
b3NpdGlvbiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0g
MCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGZsb2F0
IHdpZHRoKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgRm9udENhc2NhZGUm
LCBmbG9hdCB4UG9zaXRpb24sIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzID0g
MCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGNvbnN0
IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAiUmVuZGVyQ29tYmlu
ZVRleHQiOyB9CiAgICAgdmlydHVhbCB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5j
ZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZv
aWQgc2V0UmVuZGVyZWRUZXh0KGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNlYXJjaEZpZWxkLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuY3BwCShyZXZpc2lvbiAx
Nzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiQ1NTRm9udFNlbGVj
dG9yLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkNocm9tZS5o
IgorI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1l
U2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCkBAIC00Miw3ICs0Myw2IEBACiAj
aW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNlYXJjaFBvcHVwTWVudS5oIgogI2lu
Y2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKICNpbmNsdWRl
ICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmgi
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHJldmlzaW9u
IDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDUxLDcgKzQ1MSw3IEBAIExheW91dFJlY3QgUmVuZGVyVGV4dDo6bG9j
YWxDYXJldFJlY3QoSW4KICAgICByZXR1cm4gYm94LnJvb3QoKS5jb21wdXRlQ2FyZXRSZWN0KGxl
ZnQsIGNhcmV0V2lkdGgsIGV4dHJhV2lkdGhUb0VuZE9mTGluZSk7CiB9CiAKLUFMV0FZU19JTkxJ
TkUgZmxvYXQgUmVuZGVyVGV4dDo6d2lkdGhGcm9tQ2FjaGUoY29uc3QgRm9udENhc2NhZGUmIGYs
IGludCBzdGFydCwgaW50IGxlbiwgZmxvYXQgeFBvcywgSGFzaFNldDxjb25zdCBTaW1wbGVGb250
RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93LCBjb25z
dCBSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CitBTFdBWVNfSU5MSU5FIGZsb2F0IFJlbmRlclRl
eHQ6OndpZHRoRnJvbUNhY2hlKGNvbnN0IEZvbnRDYXNjYWRlJiBmLCBpbnQgc3RhcnQsIGludCBs
ZW4sIGZsb2F0IHhQb3MsIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzLCBHbHlw
aE92ZXJmbG93KiBnbHlwaE92ZXJmbG93LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0
CiB7CiAgICAgaWYgKHN0eWxlLmhhc1RleHRDb21iaW5lKCkgJiYgaXM8UmVuZGVyQ29tYmluZVRl
eHQ+KCp0aGlzKSkgewogICAgICAgICBjb25zdCBSZW5kZXJDb21iaW5lVGV4dCYgY29tYmluZVRl
eHQgPSBkb3duY2FzdDxSZW5kZXJDb21iaW5lVGV4dD4oKnRoaXMpOwpAQCAtNjMwLDcgKzYzMCw3
IEBAIExpbmVCcmVha0l0ZXJhdG9yTW9kZSBtYXBMaW5lQnJlYWtUb0l0ZXIKIAogdm9pZCBSZW5k
ZXJUZXh0Ojpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyhmbG9hdCBsZWFkV2lkdGgpCiB7
Ci0gICAgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+IGZhbGxiYWNrRm9udHM7CisgICAg
SGFzaFNldDxjb25zdCBGb250Kj4gZmFsbGJhY2tGb250czsKICAgICBHbHlwaE92ZXJmbG93IGds
eXBoT3ZlcmZsb3c7CiAgICAgY29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMobGVhZFdpZHRo
LCBmYWxsYmFja0ZvbnRzLCBnbHlwaE92ZXJmbG93KTsKICAgICBpZiAoZmFsbGJhY2tGb250cy5p
c0VtcHR5KCkgJiYgIWdseXBoT3ZlcmZsb3cubGVmdCAmJiAhZ2x5cGhPdmVyZmxvdy5yaWdodCAm
JiAhZ2x5cGhPdmVyZmxvdy50b3AgJiYgIWdseXBoT3ZlcmZsb3cuYm90dG9tKQpAQCAtNjQzLDcg
KzY0Myw3IEBAIHN0YXRpYyBpbmxpbmUgZmxvYXQgaHlwaGVuV2lkdGgoUmVuZGVyVGUKICAgICBy
ZXR1cm4gZm9udC53aWR0aChSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bihyZW5kZXJlciwg
Zm9udCwgc3R5bGUuaHlwaGVuU3RyaW5nKCkuc3RyaW5nKCksIHN0eWxlKSk7CiB9CiAKLXN0YXRp
YyBmbG9hdCBtYXhXb3JkRnJhZ21lbnRXaWR0aChSZW5kZXJUZXh0KiByZW5kZXJlciwgY29uc3Qg
UmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgU3RyaW5nVmlldyB3
b3JkLCBpbnQgbWluaW11bVByZWZpeExlbmd0aCwgdW5zaWduZWQgbWluaW11bVN1ZmZpeExlbmd0
aCwgaW50JiBzdWZmaXhTdGFydCwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+JiBmYWxs
YmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93JiBnbHlwaE92ZXJmbG93KQorc3RhdGljIGZsb2F0IG1h
eFdvcmRGcmFnbWVudFdpZHRoKFJlbmRlclRleHQqIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHls
ZSYgc3R5bGUsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBTdHJpbmdWaWV3IHdvcmQsIGludCBt
aW5pbXVtUHJlZml4TGVuZ3RoLCB1bnNpZ25lZCBtaW5pbXVtU3VmZml4TGVuZ3RoLCBpbnQmIHN1
ZmZpeFN0YXJ0LCBIYXNoU2V0PGNvbnN0IEZvbnQqPiYgZmFsbGJhY2tGb250cywgR2x5cGhPdmVy
ZmxvdyYgZ2x5cGhPdmVyZmxvdykKIHsKICAgICBzdWZmaXhTdGFydCA9IDA7CiAgICAgaWYgKHdv
cmQubGVuZ3RoKCkgPD0gbWluaW11bVN1ZmZpeExlbmd0aCkKQEAgLTY4Myw3ICs2ODMsNyBAQCBz
dGF0aWMgZmxvYXQgbWF4V29yZEZyYWdtZW50V2lkdGgoUmVuZGVyCiAgICAgcmV0dXJuIG1heEZy
YWdtZW50V2lkdGg7CiB9CiAKLXZvaWQgUmVuZGVyVGV4dDo6Y29tcHV0ZVByZWZlcnJlZExvZ2lj
YWxXaWR0aHMoZmxvYXQgbGVhZFdpZHRoLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4m
IGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cmIGdseXBoT3ZlcmZsb3cpCit2b2lkIFJlbmRl
clRleHQ6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKGZsb2F0IGxlYWRXaWR0aCwgSGFz
aFNldDxjb25zdCBGb250Kj4mIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cmIGdseXBoT3Zl
cmZsb3cpCiB7CiAgICAgQVNTRVJUKG1faGFzVGFiIHx8IHByZWZlcnJlZExvZ2ljYWxXaWR0aHNE
aXJ0eSgpIHx8ICFtX2tub3duVG9IYXZlTm9PdmVyZmxvd0FuZE5vRmFsbGJhY2tGb250cyk7CiAK
QEAgLTEyMDYsNyArMTIwNiw3IEBAIGNvbnN0IFNpbXBsZUxpbmVMYXlvdXQ6OkxheW91dCogUmVu
ZGVyVGUKICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyQmxvY2tGbG93PigqcGFyZW50KCkpLnNp
bXBsZUxpbmVMYXlvdXQoKTsKIH0KIAotZmxvYXQgUmVuZGVyVGV4dDo6d2lkdGgodW5zaWduZWQg
ZnJvbSwgdW5zaWduZWQgbGVuLCBmbG9hdCB4UG9zLCBib29sIGZpcnN0TGluZSwgSGFzaFNldDxj
b25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlw
aE92ZXJmbG93KSBjb25zdAorZmxvYXQgUmVuZGVyVGV4dDo6d2lkdGgodW5zaWduZWQgZnJvbSwg
dW5zaWduZWQgbGVuLCBmbG9hdCB4UG9zLCBib29sIGZpcnN0TGluZSwgSGFzaFNldDxjb25zdCBG
b250Kj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0
CiB7CiAgICAgaWYgKGZyb20gPj0gdGV4dExlbmd0aCgpKQogICAgICAgICByZXR1cm4gMDsKQEAg
LTEyMTgsNyArMTIxOCw3IEBAIGZsb2F0IFJlbmRlclRleHQ6OndpZHRoKHVuc2lnbmVkIGZyb20s
IHUKICAgICByZXR1cm4gd2lkdGgoZnJvbSwgbGVuLCBsaW5lU3R5bGUuZm9udENhc2NhZGUoKSwg
eFBvcywgZmFsbGJhY2tGb250cywgZ2x5cGhPdmVyZmxvdyk7CiB9CiAKLWZsb2F0IFJlbmRlclRl
eHQ6OndpZHRoKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgY29uc3QgRm9udENhc2NhZGUm
IGYsIGZsb2F0IHhQb3MsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tG
b250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKK2Zsb2F0IFJlbmRlclRl
eHQ6OndpZHRoKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgY29uc3QgRm9udENhc2NhZGUm
IGYsIGZsb2F0IHhQb3MsIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzLCBHbHlw
aE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAogewogICAgIEFTU0VSVChmcm9tICsgbGVu
IDw9IHRleHRMZW5ndGgoKSk7CiAgICAgaWYgKCF0ZXh0TGVuZ3RoKCkpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTg5LDggKzg5
LDggQEAgcHVibGljOgogICAgIHVuc2lnbmVkIHRleHRMZW5ndGgoKSBjb25zdCB7IHJldHVybiBt
X3RleHQuaW1wbCgpLT5sZW5ndGgoKTsgfSAvLyBub24gdmlydHVhbCBpbXBsZW1lbnRhdGlvbiBv
ZiBsZW5ndGgoKQogICAgIHZvaWQgcG9zaXRpb25MaW5lQm94KElubGluZVRleHRCb3gmKTsKIAot
ICAgIHZpcnR1YWwgZmxvYXQgd2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBjb25z
dCBGb250Q2FzY2FkZSYsIGZsb2F0IHhQb3MsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEq
PiogZmFsbGJhY2tGb250cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBmbG9hdCB3aWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIGZsb2F0IHhQb3Ms
IGJvb2wgZmlyc3RMaW5lID0gZmFsc2UsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiog
ZmFsbGJhY2tGb250cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29uc3Q7CisgICAgdmlydHVh
bCBmbG9hdCB3aWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIGNvbnN0IEZvbnRDYXNj
YWRlJiwgZmxvYXQgeFBvcywgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMgPSAw
LCBHbHlwaE92ZXJmbG93KiA9IDApIGNvbnN0OworICAgIHZpcnR1YWwgZmxvYXQgd2lkdGgodW5z
aWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBmbG9hdCB4UG9zLCBib29sIGZpcnN0TGluZSA9IGZh
bHNlLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cyA9IDAsIEdseXBoT3ZlcmZs
b3cqID0gMCkgY29uc3Q7CiAKICAgICBmbG9hdCBtaW5Mb2dpY2FsV2lkdGgoKSBjb25zdDsKICAg
ICBmbG9hdCBtYXhMb2dpY2FsV2lkdGgoKSBjb25zdDsKQEAgLTE4MCw3ICsxODAsNyBAQCBwcml2
YXRlOgogCiAgICAgdmlydHVhbCBib29sIGNhbkhhdmVDaGlsZHJlbigpIGNvbnN0IG92ZXJyaWRl
IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICB2b2lkIGNvbXB1dGVQcmVmZXJyZWRMb2dp
Y2FsV2lkdGhzKGZsb2F0IGxlYWRXaWR0aCwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+
JiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93Jik7CisgICAgdm9pZCBjb21wdXRlUHJlZmVy
cmVkTG9naWNhbFdpZHRocyhmbG9hdCBsZWFkV2lkdGgsIEhhc2hTZXQ8Y29uc3QgRm9udCo+JiBm
YWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93Jik7CiAKICAgICBib29sIGNvbXB1dGVDYW5Vc2VT
aW1wbGVGb250Q29kZVBhdGgoKSBjb25zdDsKICAgICAKQEAgLTE5Miw3ICsxOTIsNyBAQCBwcml2
YXRlOgogICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYs
IEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBjb25zdCBMYXlvdXRQb2lu
dCYsIEhpdFRlc3RBY3Rpb24pIG92ZXJyaWRlIGZpbmFsIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7
IHJldHVybiBmYWxzZTsgfQogCiAgICAgYm9vbCBjb250YWluc09ubHlXaGl0ZXNwYWNlKHVuc2ln
bmVkIGZyb20sIHVuc2lnbmVkIGxlbikgY29uc3Q7Ci0gICAgZmxvYXQgd2lkdGhGcm9tQ2FjaGUo
Y29uc3QgRm9udENhc2NhZGUmLCBpbnQgc3RhcnQsIGludCBsZW4sIGZsb2F0IHhQb3MsIEhhc2hT
ZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyos
IGNvbnN0IFJlbmRlclN0eWxlJikgY29uc3Q7CisgICAgZmxvYXQgd2lkdGhGcm9tQ2FjaGUoY29u
c3QgRm9udENhc2NhZGUmLCBpbnQgc3RhcnQsIGludCBsZW4sIGZsb2F0IHhQb3MsIEhhc2hTZXQ8
Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiwgY29uc3QgUmVuZGVy
U3R5bGUmKSBjb25zdDsKICAgICBib29sIGlzQWxsQVNDSUkoKSBjb25zdCB7IHJldHVybiBtX2lz
QWxsQVNDSUk7IH0KICAgICBib29sIGNvbXB1dGVVc2VCYWNrc2xhc2hBc1llblN5bWJvbCgpIGNv
bnN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJDU1NGb250U2VsZWN0b3IuaCIK
ICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCisjaW5j
bHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVTZWxlY3Rp
b24uaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKQEAgLTQwLDcgKzQxLDYgQEAKICNpbmNsdWRl
ICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJTZXR0
aW5ncy5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5jbHVkZSAiU3R5bGVSZXNv
bHZlci5oIgogI2luY2x1ZGUgIlRleHRDb250cm9sSW5uZXJFbGVtZW50cy5oIgogI2luY2x1ZGUg
PHd0Zi9TdGFja1N0YXRzLmg+CkBAIC0zNDYsNyArMzQ2LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmU6OgogICAgIGlmIChmYW1pbHkgPT0gIkx1Y2lkYSBHcmFuZGUi
KQogICAgICAgICBtYXhDaGFyV2lkdGggPSBzY2FsZUVtVG9Vbml0cyg0MDI3KTsKICAgICBlbHNl
IGlmIChzdHlsZSgpLmZvbnRDYXNjYWRlKCkuaGFzVmFsaWRBdmVyYWdlQ2hhcldpZHRoKCkpCi0g
ICAgICAgIG1heENoYXJXaWR0aCA9IHJvdW5kZihzdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFy
eUZvbnREYXRhKCkubWF4Q2hhcldpZHRoKCkpOworICAgICAgICBtYXhDaGFyV2lkdGggPSByb3Vu
ZGYoc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCkubWF4Q2hhcldpZHRoKCkpOwog
I2VuZGlmCiAKICAgICAvLyBGb3IgdGV4dCBpbnB1dHMsIElFIGFkZHMgc29tZSBleHRyYSB3aWR0
aC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0JKHJl
dmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlP
Uy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTgwLDcgKzU4MCw3IEBAIHN0YXRpYyB2b2lkIGFkanVz
dElucHV0RWxlbWVudEJ1dHRvblN0eWwKICAgICBGb250Q2FzY2FkZSBmb250ID0gc3R5bGUuZm9u
dENhc2NhZGUoKTsKICAgICAKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gaW5wdXRFbGVt
ZW50LnJlbmRlcmVyKCk7Ci0gICAgaWYgKGZvbnQucHJpbWFyeUZvbnREYXRhKCkuaXNTVkdGb250
KCkgJiYgIXJlbmRlcmVyKQorICAgIGlmIChmb250LnByaW1hcnlGb250KCkuaXNTVkdGb250KCkg
JiYgIXJlbmRlcmVyKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgZmxvYXQgbWF4aW11bVdp
ZHRoID0gbG9jYWxpemVkRGF0ZUNhY2hlKCkubWF4aW11bVdpZHRoRm9yRGF0ZVR5cGUoZGF0ZVR5
cGUsIGZvbnQsIFJlbmRlclRoZW1lTWVhc3VyZVRleHRDbGllbnQoZm9udCwgKnJlbmRlcmVyLCBz
dHlsZSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNw
cAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxp
bmVCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04ODUsNyArODg1LDcgQEAgdm9pZCBSb290SW5s
aW5lQm94Ojphc2NlbnRBbmREZXNjZW50Rm9yQgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgVmVjdG9yPGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIHVzZWRGb250cyA9IG51bGxwdHI7Cisg
ICAgVmVjdG9yPGNvbnN0IEZvbnQqPiogdXNlZEZvbnRzID0gbnVsbHB0cjsKICAgICBHbHlwaE92
ZXJmbG93KiBnbHlwaE92ZXJmbG93ID0gbnVsbHB0cjsKICAgICBpZiAoaXM8SW5saW5lVGV4dEJv
eD4oYm94KSkgewogICAgICAgICBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcDo6aXRl
cmF0b3IgaXQgPSB0ZXh0Qm94RGF0YU1hcC5maW5kKCZkb3duY2FzdDxJbmxpbmVUZXh0Qm94Pihi
b3gpKTsKQEAgLTkwMSw3ICs5MDEsNyBAQCB2b2lkIFJvb3RJbmxpbmVCb3g6OmFzY2VudEFuZERl
c2NlbnRGb3JCCiAKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgYm94TGluZVN0eWxlID0gYm94Lmxp
bmVTdHlsZSgpOwogICAgIGlmICh1c2VkRm9udHMgJiYgIXVzZWRGb250cy0+aXNFbXB0eSgpICYm
IChpbmNsdWRlRm9udCB8fCAoYm94TGluZVN0eWxlLmxpbmVIZWlnaHQoKS5pc05lZ2F0aXZlKCkg
JiYgaW5jbHVkZUxlYWRpbmcpKSkgewotICAgICAgICB1c2VkRm9udHMtPmFwcGVuZCgmYm94TGlu
ZVN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkpOworICAgICAgICB1c2VkRm9u
dHMtPmFwcGVuZCgmYm94TGluZVN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKSk7CiAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdXNlZEZvbnRzLT5zaXplKCk7ICsraSkgewog
ICAgICAgICAgICAgY29uc3QgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzID0gdXNlZEZvbnRzLT5h
dChpKS0+Zm9udE1ldHJpY3MoKTsKICAgICAgICAgICAgIGludCB1c2VkRm9udEFzY2VudCA9IGZv
bnRNZXRyaWNzLmFzY2VudChiYXNlbGluZVR5cGUoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTUyLDcgKzUyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIFNpbXBs
ZUxpbmVMYXlvdXQgewogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRp
YyBib29sIGNhblVzZUZvclRleHQoY29uc3QgQ2hhcmFjdGVyVHlwZSogdGV4dCwgdW5zaWduZWQg
bGVuZ3RoLCBjb25zdCBTaW1wbGVGb250RGF0YSYgZm9udERhdGEpCitzdGF0aWMgYm9vbCBjYW5V
c2VGb3JUZXh0KGNvbnN0IENoYXJhY3RlclR5cGUqIHRleHQsIHVuc2lnbmVkIGxlbmd0aCwgY29u
c3QgRm9udCYgZm9udCkKIHsKICAgICAvLyBGSVhNRTogPHRleHRhcmVhIG1heGxlbmd0aD0wPiBn
ZW5lcmF0ZXMgZW1wdHkgdGV4dCBub2RlLgogICAgIGlmICghbGVuZ3RoKQpAQCAtNzUsMTcgKzc1
LDE3IEBAIHN0YXRpYyBib29sIGNhblVzZUZvclRleHQoY29uc3QgQ2hhcmFjdGUKICAgICAgICAg
ICAgIHx8IGRpcmVjdGlvbiA9PSBVX1BPUF9ESVJFQ1RJT05BTF9GT1JNQVQgfHwgZGlyZWN0aW9u
ID09IFVfQk9VTkRBUllfTkVVVFJBTCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
ICAgICBpZiAoIWZvbnREYXRhLmdseXBoRm9yQ2hhcmFjdGVyKGNoYXJhY3RlcikpCisgICAgICAg
IGlmICghZm9udC5nbHlwaEZvckNoYXJhY3RlcihjaGFyYWN0ZXIpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgY2Fu
VXNlRm9yVGV4dChjb25zdCBSZW5kZXJUZXh0JiB0ZXh0UmVuZGVyZXIsIGNvbnN0IFNpbXBsZUZv
bnREYXRhJiBmb250RGF0YSkKK3N0YXRpYyBib29sIGNhblVzZUZvclRleHQoY29uc3QgUmVuZGVy
VGV4dCYgdGV4dFJlbmRlcmVyLCBjb25zdCBGb250JiBmb250KQogewogICAgIGlmICh0ZXh0UmVu
ZGVyZXIuaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBjYW5Vc2VGb3JUZXh0KHRleHRSZW5kZXJl
ci5jaGFyYWN0ZXJzOCgpLCB0ZXh0UmVuZGVyZXIudGV4dExlbmd0aCgpLCBmb250RGF0YSk7Ci0g
ICAgcmV0dXJuIGNhblVzZUZvclRleHQodGV4dFJlbmRlcmVyLmNoYXJhY3RlcnMxNigpLCB0ZXh0
UmVuZGVyZXIudGV4dExlbmd0aCgpLCBmb250RGF0YSk7CisgICAgICAgIHJldHVybiBjYW5Vc2VG
b3JUZXh0KHRleHRSZW5kZXJlci5jaGFyYWN0ZXJzOCgpLCB0ZXh0UmVuZGVyZXIudGV4dExlbmd0
aCgpLCBmb250KTsKKyAgICByZXR1cm4gY2FuVXNlRm9yVGV4dCh0ZXh0UmVuZGVyZXIuY2hhcmFj
dGVyczE2KCksIHRleHRSZW5kZXJlci50ZXh0TGVuZ3RoKCksIGZvbnQpOwogfQogCiBib29sIGNh
blVzZUZvcihjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3cpCkBAIC0xODQsMTEgKzE4NCwxMSBA
QCBib29sIGNhblVzZUZvcihjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsCiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKHN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZv
bnREYXRhKCkuaXNTVkdGb250KCkpCisgICAgaWYgKHN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFy
eUZvbnQoKS5pc1NWR0ZvbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIC8vIFdlIGFz
c3VtZSB0aGF0IGFsbCBsaW5lcyBoYXZlIG1ldHJpY3MgYmFzZWQgcHVyZWx5IG9uIHRoZSBwcmlt
YXJ5IGZvbnQuCi0gICAgYXV0byYgcHJpbWFyeUZvbnREYXRhID0gc3R5bGUuZm9udENhc2NhZGUo
KS5wcmltYXJ5Rm9udERhdGEoKTsKLSAgICBpZiAocHJpbWFyeUZvbnREYXRhLmlzTG9hZGluZygp
KQorICAgIGF1dG8mIHByaW1hcnlGb250ID0gc3R5bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9u
dCgpOworICAgIGlmIChwcmltYXJ5Rm9udC5pc0xvYWRpbmcoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIGZvciAoY29uc3QgYXV0byYgdGV4dFJlbmRlcmVyIDogY2hpbGRyZW5PZlR5cGU8
UmVuZGVyVGV4dD4oZmxvdykpIHsKICAgICAgICAgaWYgKHRleHRSZW5kZXJlci5pc0NvbWJpbmVU
ZXh0KCkgfHwgdGV4dFJlbmRlcmVyLmlzQ291bnRlcigpIHx8IHRleHRSZW5kZXJlci5pc1F1b3Rl
KCkgfHwgdGV4dFJlbmRlcmVyLmlzVGV4dEZyYWdtZW50KCkKQEAgLTE5Niw3ICsxOTYsNyBAQCBi
b29sIGNhblVzZUZvcihjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIGlmIChzdHlsZS5mb250Q2FzY2FkZSgpLmNvZGVQYXRoKFRleHRS
dW4odGV4dFJlbmRlcmVyLnRleHQoKSkpICE9IEZvbnRDYXNjYWRlOjpTaW1wbGUpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghY2FuVXNlRm9yVGV4dCh0ZXh0UmVuZGVy
ZXIsIHByaW1hcnlGb250RGF0YSkpCisgICAgICAgIGlmICghY2FuVXNlRm9yVGV4dCh0ZXh0UmVu
ZGVyZXIsIHByaW1hcnlGb250KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAg
ICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9CcmVh
a2luZ0NvbnRleHRJbmxpbmVIZWFkZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL2xpbmUvQnJlYWtpbmdDb250ZXh0SW5saW5lSGVhZGVycy5oCShyZXZpc2lvbiAx
Nzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9CcmVha2luZ0NvbnRleHRJ
bmxpbmVIZWFkZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgc3RydWN0IFdv
cmRNZWFzdXJlbWVudCB7CiAgICAgZmxvYXQgd2lkdGg7CiAgICAgaW50IHN0YXJ0T2Zmc2V0Owog
ICAgIGludCBlbmRPZmZzZXQ7Ci0gICAgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+IGZh
bGxiYWNrRm9udHM7CisgICAgSGFzaFNldDxjb25zdCBGb250Kj4gZmFsbGJhY2tGb250czsKIH07
CiAKIGNsYXNzIEJyZWFraW5nQ29udGV4dCB7CkBAIC00ODYsMTMgKzQ4NiwxMyBAQCBpbmxpbmUg
dm9pZCB1cGRhdGVDb3VudGVySWZOZWVkZWQoUmVuZGVyCiAgICAgZG93bmNhc3Q8UmVuZGVyQ291
bnRlcj4ocmVuZGVyVGV4dCkudXBkYXRlQ291bnRlcigpOwogfQogCi1pbmxpbmUgZmxvYXQgbWVh
c3VyZUh5cGhlbldpZHRoKFJlbmRlclRleHQqIHJlbmRlcmVyLCBjb25zdCBGb250Q2FzY2FkZSYg
Zm9udCwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCkK
K2lubGluZSBmbG9hdCBtZWFzdXJlSHlwaGVuV2lkdGgoUmVuZGVyVGV4dCogcmVuZGVyZXIsIGNv
bnN0IEZvbnRDYXNjYWRlJiBmb250LCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250
cyA9IDApCiB7CiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlID0gcmVuZGVyZXItPnN0eWxl
KCk7CiAgICAgcmV0dXJuIGZvbnQud2lkdGgoUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4o
cmVuZGVyZXIsIGZvbnQsIHN0eWxlLmh5cGhlblN0cmluZygpLnN0cmluZygpLCBzdHlsZSksIGZh
bGxiYWNrRm9udHMpOwogfQogCi1BTFdBWVNfSU5MSU5FIGZsb2F0IHRleHRXaWR0aChSZW5kZXJU
ZXh0KiB0ZXh0LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIGNvbnN0IEZvbnRDYXNjYWRl
JiBmb250LCBmbG9hdCB4UG9zLCBib29sIGlzRml4ZWRQaXRjaCwgYm9vbCBjb2xsYXBzZVdoaXRl
U3BhY2UsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiYgZmFsbGJhY2tGb250cywgVGV4
dExheW91dCogbGF5b3V0ID0gMCkKK0FMV0FZU19JTkxJTkUgZmxvYXQgdGV4dFdpZHRoKFJlbmRl
clRleHQqIHRleHQsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgY29uc3QgRm9udENhc2Nh
ZGUmIGZvbnQsIGZsb2F0IHhQb3MsIGJvb2wgaXNGaXhlZFBpdGNoLCBib29sIGNvbGxhcHNlV2hp
dGVTcGFjZSwgSGFzaFNldDxjb25zdCBGb250Kj4mIGZhbGxiYWNrRm9udHMsIFRleHRMYXlvdXQq
IGxheW91dCA9IDApCiB7CiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlID0gdGV4dC0+c3R5
bGUoKTsKIApAQCAtNTc4LDcgKzU3OCw3IEBAIGlubGluZSB2b2lkIHRyeUh5cGhlbmF0aW5nKFJl
bmRlclRleHQqIHQKICAgICBBU1NFUlQocG9zIC0gbGFzdFNwYWNlIC0gcHJlZml4TGVuZ3RoID49
IG1pbmltdW1TdWZmaXhMZW5ndGgpOwogCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIEhhc2hT
ZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiBmYWxsYmFja0ZvbnRzOworICAgIEhhc2hTZXQ8Y29u
c3QgRm9udCo+IGZhbGxiYWNrRm9udHM7CiAgICAgZmxvYXQgcHJlZml4V2lkdGggPSBoeXBoZW5X
aWR0aCArIHRleHRXaWR0aCh0ZXh0LCBsYXN0U3BhY2UsIHByZWZpeExlbmd0aCwgZm9udCwgeFBv
cywgaXNGaXhlZFBpdGNoLCBjb2xsYXBzZVdoaXRlU3BhY2UsIGZhbGxiYWNrRm9udHMpICsgbGFz
dFNwYWNlV29yZFNwYWNpbmc7CiAgICAgQVNTRVJUKHhQb3MgKyBwcmVmaXhXaWR0aCA8PSBhdmFp
bGFibGVXaWR0aCk7CiAjZWxzZQpAQCAtNjU2LDcgKzY1Niw3IEBAIGlubGluZSBib29sIEJyZWFr
aW5nQ29udGV4dDo6aGFuZGxlVGV4dCgKIAogICAgIC8vIE5vbi16ZXJvIG9ubHkgd2hlbiBrZXJu
aW5nIGlzIGVuYWJsZWQgYW5kIFRleHRMYXlvdXQgaXNuJ3QgdXNlZCwgaW4gd2hpY2ggY2FzZSB3
ZSBtZWFzdXJlCiAgICAgLy8gd29yZHMgd2l0aCB0aGVpciB0cmFpbGluZyBzcGFjZSwgdGhlbiBz
dWJ0cmFjdCBpdHMgd2lkdGguCi0gICAgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+IGZh
bGxiYWNrRm9udHM7CisgICAgSGFzaFNldDxjb25zdCBGb250Kj4gZmFsbGJhY2tGb250czsKICAg
ICBmbG9hdCB3b3JkVHJhaWxpbmdTcGFjZVdpZHRoID0gKGZvbnQudHlwZXNldHRpbmdGZWF0dXJl
cygpICYgS2VybmluZykgJiYgIXRleHRMYXlvdXQgPyBmb250LndpZHRoKFJlbmRlckJsb2NrOjpj
b25zdHJ1Y3RUZXh0UnVuKCZyZW5kZXJUZXh0LCBmb250LCAmc3BhY2UsIDEsIHN0eWxlKSwgJmZh
bGxiYWNrRm9udHMpICsgd29yZFNwYWNpbmcgOiAwOwogCiAgICAgVUNoYXIgbGFzdENoYXJhY3Rl
ciA9IG1fcmVuZGVyVGV4dEluZm8ubV9saW5lQnJlYWtJdGVyYXRvci5sYXN0Q2hhcmFjdGVyKCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJh
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1Jl
bmRlck1hdGhNTE9wZXJhdG9yLmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEzMzMsNyArMTMzMyw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnJlc2V0
U3RyZXRjaFMKIAogRmxvYXRSZWN0IFJlbmRlck1hdGhNTE9wZXJhdG9yOjpib3VuZHNGb3JHbHlw
aChjb25zdCBHbHlwaERhdGEmIGRhdGEpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGRhdGEuZm9udERh
dGEtPmJvdW5kc0ZvckdseXBoKGRhdGEuZ2x5cGgpOworICAgIHJldHVybiBkYXRhLmZvbnQtPmJv
dW5kc0ZvckdseXBoKGRhdGEuZ2x5cGgpOwogfQogCiBmbG9hdCBSZW5kZXJNYXRoTUxPcGVyYXRv
cjo6aGVpZ2h0Rm9yR2x5cGgoY29uc3QgR2x5cGhEYXRhJiBkYXRhKSBjb25zdApAQCAtMTM0Myw3
ICsxMzQzLDcgQEAgZmxvYXQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmhlaWdodEZvckdseQogCiBm
bG9hdCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6YWR2YW5jZUZvckdseXBoKGNvbnN0IEdseXBoRGF0
YSYgZGF0YSkgY29uc3QKIHsKLSAgICByZXR1cm4gZGF0YS5mb250RGF0YS0+d2lkdGhGb3JHbHlw
aChkYXRhLmdseXBoKTsKKyAgICByZXR1cm4gZGF0YS5mb250LT53aWR0aEZvckdseXBoKGRhdGEu
Z2x5cGgpOwogfQogCiB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpjb21wdXRlUHJlZmVycmVk
TG9naWNhbFdpZHRocygpCkBAIC0xNTIxLDExICsxNTIxLDExIEBAIGJvb2wgUmVuZGVyTWF0aE1M
T3BlcmF0b3I6OmdldEdseXBoQXNzZW0KICAgICBpZiAoIWJvdHRvbS5nbHlwaCkKICAgICAgICAg
Ym90dG9tLmdseXBoID0gZXh0ZW5zaW9uLmdseXBoOwogCi0gICAgdG9wLmZvbnREYXRhID0gJnN0
eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKTsKLSAgICBleHRlbnNpb24uZm9u
dERhdGEgPSB0b3AuZm9udERhdGE7Ci0gICAgYm90dG9tLmZvbnREYXRhID0gdG9wLmZvbnREYXRh
OworICAgIHRvcC5mb250ID0gJnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpOwor
ICAgIGV4dGVuc2lvbi5mb250ID0gdG9wLmZvbnQ7CisgICAgYm90dG9tLmZvbnQgPSB0b3AuZm9u
dDsKICAgICBpZiAobWlkZGxlLmdseXBoKQotICAgICAgICBtaWRkbGUuZm9udERhdGEgPSB0b3Au
Zm9udERhdGE7CisgICAgICAgIG1pZGRsZS5mb250ID0gdG9wLmZvbnQ7CiAKICAgICBzdHJldGNo
eURhdGEuc2V0R2x5cGhBc3NlbWJseU1vZGUodG9wLCBleHRlbnNpb24sIGJvdHRvbSwgbWlkZGxl
KTsKIApAQCAtMTUzOCwyNCArMTUzOCwyNCBAQCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6U3RyZXRj
aHlEYXRhIFJlbmRlCiAKICAgICBBU1NFUlQobV9pc1ZlcnRpY2FsICYmIGlzTGFyZ2VPcGVyYXRv
ckluRGlzcGxheVN0eWxlKCkpOwogCi0gICAgY29uc3QgYXV0byYgcHJpbWFyeUZvbnREYXRhID0g
c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpOworICAgIGNvbnN0IGF1dG8m
IHByaW1hcnlGb250ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCk7CiAgICAg
R2x5cGhEYXRhIGJhc2VHbHlwaCA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5nbHlwaERhdGFGb3JD
aGFyYWN0ZXIoY2hhcmFjdGVyLCAhc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpOwot
ICAgIGlmICghcHJpbWFyeUZvbnREYXRhLm1hdGhEYXRhKCkgfHwgYmFzZUdseXBoLmZvbnREYXRh
ICE9ICZwcmltYXJ5Rm9udERhdGEpCisgICAgaWYgKCFwcmltYXJ5Rm9udC5tYXRoRGF0YSgpIHx8
IGJhc2VHbHlwaC5mb250ICE9ICZwcmltYXJ5Rm9udCkKICAgICAgICAgcmV0dXJuIGRhdGE7CiAK
ICAgICBWZWN0b3I8R2x5cGg+IHNpemVWYXJpYW50czsKICAgICBWZWN0b3I8T3BlblR5cGVNYXRo
RGF0YTo6QXNzZW1ibHlQYXJ0PiBhc3NlbWJseVBhcnRzOwogCiAgICAgLy8gVGhlIHZhbHVlIG9m
IGRpc3BsYXlPcGVyYXRvck1pbkhlaWdodCBpcyBzb21ldGltZXMgdG9vIHNtYWxsLCBzbyB3ZSBl
bnN1cmUgdGhhdCBpdCBpcyBhdCBsZWFzdCBcc3FydHsyfSB0aW1lcyB0aGUgc2l6ZSBvZiB0aGUg
YmFzZSBnbHlwaC4KLSAgICBmbG9hdCBkaXNwbGF5T3BlcmF0b3JNaW5IZWlnaHQgPSBzdGQ6Om1h
eChiYXNlR2x5cGguZm9udERhdGEtPmJvdW5kc0ZvckdseXBoKGJhc2VHbHlwaC5nbHlwaCkuaGVp
Z2h0KCkgKiBzcXJ0T2ZUd29GbG9hdCwgcHJpbWFyeUZvbnREYXRhLm1hdGhEYXRhKCktPmdldE1h
dGhDb25zdGFudChwcmltYXJ5Rm9udERhdGEsIE9wZW5UeXBlTWF0aERhdGE6OkRpc3BsYXlPcGVy
YXRvck1pbkhlaWdodCkpOworICAgIGZsb2F0IGRpc3BsYXlPcGVyYXRvck1pbkhlaWdodCA9IHN0
ZDo6bWF4KGJhc2VHbHlwaC5mb250LT5ib3VuZHNGb3JHbHlwaChiYXNlR2x5cGguZ2x5cGgpLmhl
aWdodCgpICogc3FydE9mVHdvRmxvYXQsIHByaW1hcnlGb250Lm1hdGhEYXRhKCktPmdldE1hdGhD
b25zdGFudChwcmltYXJ5Rm9udCwgT3BlblR5cGVNYXRoRGF0YTo6RGlzcGxheU9wZXJhdG9yTWlu
SGVpZ2h0KSk7CiAKLSAgICBwcmltYXJ5Rm9udERhdGEubWF0aERhdGEoKS0+Z2V0TWF0aFZhcmlh
bnRzKGJhc2VHbHlwaC5nbHlwaCwgdHJ1ZSwgc2l6ZVZhcmlhbnRzLCBhc3NlbWJseVBhcnRzKTsK
KyAgICBwcmltYXJ5Rm9udC5tYXRoRGF0YSgpLT5nZXRNYXRoVmFyaWFudHMoYmFzZUdseXBoLmds
eXBoLCB0cnVlLCBzaXplVmFyaWFudHMsIGFzc2VtYmx5UGFydHMpOwogCiAgICAgLy8gV2UgY2hv
b3NlIHRoZSBmaXJzdCBzaXplIHZhcmlhbnQgdGhhdCBpcyBsYXJnZXIgdGhhbiB0aGUgZXhwZWN0
ZWQgZGlzcGxheU9wZXJhdG9yTWluSGVpZ2h0IGFuZCBvdGhlcndpc2UgZmFsbGJhY2sgdG8gdGhl
IGxhcmdlc3QgdmFyaWFudC4KICAgICBmb3IgKGF1dG8mIHZhcmlhbnQgOiBzaXplVmFyaWFudHMp
IHsKICAgICAgICAgR2x5cGhEYXRhIHNpemVWYXJpYW50OwogICAgICAgICBzaXplVmFyaWFudC5n
bHlwaCA9IHZhcmlhbnQ7Ci0gICAgICAgIHNpemVWYXJpYW50LmZvbnREYXRhID0gJnByaW1hcnlG
b250RGF0YTsKKyAgICAgICAgc2l6ZVZhcmlhbnQuZm9udCA9ICZwcmltYXJ5Rm9udDsKICAgICAg
ICAgZGF0YS5zZXRTaXplVmFyaWFudE1vZGUoc2l6ZVZhcmlhbnQpOwogICAgICAgICBpZiAoYm91
bmRzRm9yR2x5cGgoc2l6ZVZhcmlhbnQpLmhlaWdodCgpID49IGRpc3BsYXlPcGVyYXRvck1pbkhl
aWdodCkKICAgICAgICAgICAgIHJldHVybiBkYXRhOwpAQCAtMTU3MCwxOCArMTU3MCwxOCBAQCBS
ZW5kZXJNYXRoTUxPcGVyYXRvcjo6U3RyZXRjaHlEYXRhIFJlbmRlCiAgICAgU3RyZXRjaHlEYXRh
IGRhdGE7CiAgICAgU3RyZXRjaHlEYXRhIGFzc2VtYmx5RGF0YTsKIAotICAgIGNvbnN0IGF1dG8m
IHByaW1hcnlGb250RGF0YSA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEo
KTsKKyAgICBjb25zdCBhdXRvJiBwcmltYXJ5Rm9udCA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5w
cmltYXJ5Rm9udCgpOwogICAgIEdseXBoRGF0YSBiYXNlR2x5cGggPSBzdHlsZSgpLmZvbnRDYXNj
YWRlKCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3RlciwgIXN0eWxlKCkuaXNMZWZ0VG9S
aWdodERpcmVjdGlvbigpKTsKICAgICAKLSAgICBpZiAocHJpbWFyeUZvbnREYXRhLm1hdGhEYXRh
KCkgJiYgYmFzZUdseXBoLmZvbnREYXRhID09ICZwcmltYXJ5Rm9udERhdGEpIHsKKyAgICBpZiAo
cHJpbWFyeUZvbnQubWF0aERhdGEoKSAmJiBiYXNlR2x5cGguZm9udCA9PSAmcHJpbWFyeUZvbnQp
IHsKICAgICAgICAgVmVjdG9yPEdseXBoPiBzaXplVmFyaWFudHM7CiAgICAgICAgIFZlY3RvcjxP
cGVuVHlwZU1hdGhEYXRhOjpBc3NlbWJseVBhcnQ+IGFzc2VtYmx5UGFydHM7Ci0gICAgICAgIHBy
aW1hcnlGb250RGF0YS5tYXRoRGF0YSgpLT5nZXRNYXRoVmFyaWFudHMoYmFzZUdseXBoLmdseXBo
LCBtX2lzVmVydGljYWwsIHNpemVWYXJpYW50cywgYXNzZW1ibHlQYXJ0cyk7CisgICAgICAgIHBy
aW1hcnlGb250Lm1hdGhEYXRhKCktPmdldE1hdGhWYXJpYW50cyhiYXNlR2x5cGguZ2x5cGgsIG1f
aXNWZXJ0aWNhbCwgc2l6ZVZhcmlhbnRzLCBhc3NlbWJseVBhcnRzKTsKICAgICAgICAgLy8gV2Ug
dmVyaWZ5IHRoZSBzaXplIHZhcmlhbnRzLgogICAgICAgICBmb3IgKGF1dG8mIHZhcmlhbnQgOiBz
aXplVmFyaWFudHMpIHsKICAgICAgICAgICAgIEdseXBoRGF0YSBzaXplVmFyaWFudDsKICAgICAg
ICAgICAgIHNpemVWYXJpYW50LmdseXBoID0gdmFyaWFudDsKLSAgICAgICAgICAgIHNpemVWYXJp
YW50LmZvbnREYXRhID0gJnByaW1hcnlGb250RGF0YTsKKyAgICAgICAgICAgIHNpemVWYXJpYW50
LmZvbnQgPSAmcHJpbWFyeUZvbnQ7CiAgICAgICAgICAgICBpZiAobWF4aW11bUdseXBoV2lkdGgp
CiAgICAgICAgICAgICAgICAgKm1heGltdW1HbHlwaFdpZHRoID0gc3RkOjptYXgoKm1heGltdW1H
bHlwaFdpZHRoLCBhZHZhbmNlRm9yR2x5cGgoc2l6ZVZhcmlhbnQpKTsKICAgICAgICAgICAgIGVs
c2UgewpAQCAtMTgwMSw4ICsxODAxLDggQEAgTGF5b3V0UmVjdCBSZW5kZXJNYXRoTUxPcGVyYXRv
cjo6cGFpbnRHbAogICAgIGluZm8uY29udGV4dC0+Y2xpcChjbGlwQm91bmRzKTsKIAogICAgIEds
eXBoQnVmZmVyIGJ1ZmZlcjsKLSAgICBidWZmZXIuYWRkKGRhdGEuZ2x5cGgsIGRhdGEuZm9udERh
dGEsIGFkdmFuY2VGb3JHbHlwaChkYXRhKSk7Ci0gICAgaW5mby5jb250ZXh0LT5kcmF3R2x5cGhz
KHN0eWxlKCkuZm9udENhc2NhZGUoKSwgKmRhdGEuZm9udERhdGEsIGJ1ZmZlciwgMCwgMSwgb3Jp
Z2luKTsKKyAgICBidWZmZXIuYWRkKGRhdGEuZ2x5cGgsIGRhdGEuZm9udCwgYWR2YW5jZUZvckds
eXBoKGRhdGEpKTsKKyAgICBpbmZvLmNvbnRleHQtPmRyYXdHbHlwaHMoc3R5bGUoKS5mb250Q2Fz
Y2FkZSgpLCAqZGF0YS5mb250LCBidWZmZXIsIDAsIDEsIG9yaWdpbik7CiAKICAgICByZXR1cm4g
Z2x5cGhQYWludFJlY3Q7CiB9CkBAIC0xODk0LDExICsxODk0LDExIEBAIHZvaWQgUmVuZGVyTWF0
aE1MT3BlcmF0b3I6OnBhaW50KFBhaW50SW4KICAgICBpZiAobV9zdHJldGNoeURhdGEubW9kZSgp
ID09IERyYXdTaXplVmFyaWFudCkgewogICAgICAgICBBU1NFUlQobV9zdHJldGNoeURhdGEudmFy
aWFudCgpLmdseXBoKTsKICAgICAgICAgR2x5cGhCdWZmZXIgYnVmZmVyOwotICAgICAgICBidWZm
ZXIuYWRkKG1fc3RyZXRjaHlEYXRhLnZhcmlhbnQoKS5nbHlwaCwgbV9zdHJldGNoeURhdGEudmFy
aWFudCgpLmZvbnREYXRhLCBhZHZhbmNlRm9yR2x5cGgobV9zdHJldGNoeURhdGEudmFyaWFudCgp
KSk7CisgICAgICAgIGJ1ZmZlci5hZGQobV9zdHJldGNoeURhdGEudmFyaWFudCgpLmdseXBoLCBt
X3N0cmV0Y2h5RGF0YS52YXJpYW50KCkuZm9udCwgYWR2YW5jZUZvckdseXBoKG1fc3RyZXRjaHlE
YXRhLnZhcmlhbnQoKSkpOwogICAgICAgICBMYXlvdXRQb2ludCBvcGVyYXRvclRvcExlZnQgPSBj
ZWlsZWRJbnRQb2ludChwYWludE9mZnNldCArIGxvY2F0aW9uKCkpOwogICAgICAgICBGbG9hdFJl
Y3QgZ2x5cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlwaChtX3N0cmV0Y2h5RGF0YS52YXJpYW50KCkp
OwogICAgICAgICBMYXlvdXRQb2ludCBvcGVyYXRvck9yaWdpbihvcGVyYXRvclRvcExlZnQueCgp
LCBvcGVyYXRvclRvcExlZnQueSgpIC0gZ2x5cGhCb3VuZHMueSgpKTsKLSAgICAgICAgaW5mby5j
b250ZXh0LT5kcmF3R2x5cGhzKHN0eWxlKCkuZm9udENhc2NhZGUoKSwgKm1fc3RyZXRjaHlEYXRh
LnZhcmlhbnQoKS5mb250RGF0YSwgYnVmZmVyLCAwLCAxLCBvcGVyYXRvck9yaWdpbik7CisgICAg
ICAgIGluZm8uY29udGV4dC0+ZHJhd0dseXBocyhzdHlsZSgpLmZvbnRDYXNjYWRlKCksICptX3N0
cmV0Y2h5RGF0YS52YXJpYW50KCkuZm9udCwgYnVmZmVyLCAwLCAxLCBvcGVyYXRvck9yaWdpbik7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTE5ODAsOCArMTk4MCw4IEBAIHZvaWQgUmVu
ZGVyTWF0aE1MT3BlcmF0b3I6OnBhaW50Q2hpbGRyZW4KIAogTGF5b3V0VW5pdCBSZW5kZXJNYXRo
TUxPcGVyYXRvcjo6dHJhaWxpbmdTcGFjZUVycm9yKCkKIHsKLSAgICBjb25zdCBhdXRvJiBwcmlt
YXJ5Rm9udERhdGEgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCk7Ci0g
ICAgaWYgKCFwcmltYXJ5Rm9udERhdGEubWF0aERhdGEoKSkKKyAgICBjb25zdCBhdXRvJiBwcmlt
YXJ5Rm9udCA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpOworICAgIGlmICgh
cHJpbWFyeUZvbnQubWF0aERhdGEoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAvLyBGb3Ig
T3BlblR5cGUgTUFUSCBmb250LCB0aGUgbGF5b3V0IGlzIGJhc2VkIG9uIFJlbmRlck1hdGhPcGVy
YXRvciBmb3Igd2hpY2ggdGhlIHByZWZlcnJlZCB3aWR0aCBpcyBzb21ldGltZXMgb3ZlcmVzdGlt
YXRlZCAoYnVnIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzAzMjYp
LgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVy
YXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVu
ZGVyTWF0aE1MT3BlcmF0b3IuaAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yOCwxMSArMjgsMTEgQEAKIAogI2lmIEVOQUJMRShNQVRITUwpCiAKKyNpbmNsdWRlICJGb250
LmgiCiAjaW5jbHVkZSAiR2x5cGhQYWdlLmgiCiAjaW5jbHVkZSAiTWF0aE1MRWxlbWVudC5oIgog
I2luY2x1ZGUgIk9wZW5UeXBlTWF0aERhdGEuaCIKICNpbmNsdWRlICJSZW5kZXJNYXRoTUxUb2tl
bi5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSYWRp
Y2FsT3BlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9t
YXRobWwvUmVuZGVyTWF0aE1MUmFkaWNhbE9wZXJhdG9yLmNwcAkocmV2aXNpb24gMTc4ODU3KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSYWRpY2FsT3Bl
cmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIFJlbmRlck1hdGhNTFJh
ZGljYWxPcGVyYXRvcjo6UmVuZGVyTWF0aE0KIAogdm9pZCBSZW5kZXJNYXRoTUxSYWRpY2FsT3Bl
cmF0b3I6OnN0cmV0Y2hUbyhMYXlvdXRVbml0IGhlaWdodEFib3ZlQmFzZWxpbmUsIExheW91dFVu
aXQgZGVwdGhCZWxvd0Jhc2VsaW5lKQogewotICAgIGlmICghc3R5bGUoKS5mb250Q2FzY2FkZSgp
LnByaW1hcnlGb250RGF0YSgpLm1hdGhEYXRhKCkpIHsKKyAgICBpZiAoIXN0eWxlKCkuZm9udENh
c2NhZGUoKS5wcmltYXJ5Rm9udCgpLm1hdGhEYXRhKCkpIHsKICAgICAgICAgLy8gSWYgd2UgZG8g
bm90IGhhdmUgYW4gT3BlblR5cGUgTUFUSCBmb250LCB3ZSBhbHdheXMgbWFrZSB0aGUgcmFkaWNh
bCBkZXB0aCBhIGJpdCBsYXJnZXIgdGhhbiB0aGUgdGFyZ2V0LgogICAgICAgICBkZXB0aEJlbG93
QmFzZWxpbmUgKz0gZ1JhZGljYWxCb3R0b21Qb2ludExvd2VyOwogICAgIH0KQEAgLTgzLDcgKzgz
LDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxSYWRpY2FsT3BlcmF0b3I6OmNvbXB1dAogewogICAgIEFT
U0VSVChwcmVmZXJyZWRMb2dpY2FsV2lkdGhzRGlydHkoKSk7CiAKLSAgICBpZiAoc3R5bGUoKS5m
b250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLm1hdGhEYXRhKCkpIHsKKyAgICBpZiAoc3R5
bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCkubWF0aERhdGEoKSkgewogICAgICAgICBS
ZW5kZXJNYXRoTUxPcGVyYXRvcjo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTk2LDcgKzk2LDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxS
YWRpY2FsT3BlcmF0b3I6OmNvbXB1dAogCiB2b2lkIFJlbmRlck1hdGhNTFJhZGljYWxPcGVyYXRv
cjo6Y29tcHV0ZUxvZ2ljYWxIZWlnaHQoTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBMYXlvdXRV
bml0IGxvZ2ljYWxUb3AsIExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyYgY29tcHV0ZWRWYWx1
ZXMpIGNvbnN0CiB7Ci0gICAgaWYgKHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERh
dGEoKS5tYXRoRGF0YSgpKSB7CisgICAgaWYgKHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5
Rm9udCgpLm1hdGhEYXRhKCkpIHsKICAgICAgICAgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmNvbXB1
dGVMb2dpY2FsSGVpZ2h0KGxvZ2ljYWxIZWlnaHQsIGxvZ2ljYWxUb3AsIGNvbXB1dGVkVmFsdWVz
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTExMSw3ICsxMTEsNyBAQCB2b2lkIFJlbmRl
ck1hdGhNTFJhZGljYWxPcGVyYXRvcjo6cGFpbnQoCiAgICAgaWYgKGluZm8uY29udGV4dC0+cGFp
bnRpbmdEaXNhYmxlZCgpIHx8IGluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZUZvcmVncm91bmQgfHwg
c3R5bGUoKS52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
aWYgKHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5tYXRoRGF0YSgpKSB7
CisgICAgaWYgKHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpLm1hdGhEYXRhKCkp
IHsKICAgICAgICAgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBhaW50KGluZm8sIHBhaW50T2Zmc2V0
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9tYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcAkocmV2aXNpb24gMTc4ODU3
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjA4LDE3ICsyMDgsMTcgQEAgdm9pZCBSZW5kZXJNYXRoTUxS
b290Ojp1cGRhdGVTdHlsZSgpCiAgICAgTGF5b3V0VW5pdCBrZXJuQWZ0ZXJEZWdyZWUgPSAtMTAg
KiBzdHlsZSgpLmZvbnRDYXNjYWRlKCkuc2l6ZSgpIC8gMTg7CiAgICAgbV9kZWdyZWVCb3R0b21S
YWlzZVBlcmNlbnQgPSAwLjZmOwogCi0gICAgY29uc3QgYXV0byYgcHJpbWFyeUZvbnREYXRhID0g
c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpOwotICAgIGlmIChhdXRvKiBt
YXRoRGF0YSA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5tYXRoRGF0
YSgpKSB7CisgICAgY29uc3QgYXV0byYgcHJpbWFyeUZvbnQgPSBzdHlsZSgpLmZvbnRDYXNjYWRl
KCkucHJpbWFyeUZvbnQoKTsKKyAgICBpZiAoYXV0byogbWF0aERhdGEgPSBzdHlsZSgpLmZvbnRD
YXNjYWRlKCkucHJpbWFyeUZvbnQoKS5tYXRoRGF0YSgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBt
X3ZlcnRpY2FsR2FwIHNob3VsZCB1c2UgUmFkaWNhbERpc3BsYXlTdHlsZVZlcnRpY2FsIGluIGRp
c3BsYXkgbW9kZSAoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExODcz
NykuCi0gICAgICAgIG1fdmVydGljYWxHYXAgPSBtYXRoRGF0YS0+Z2V0TWF0aENvbnN0YW50KHBy
aW1hcnlGb250RGF0YSwgT3BlblR5cGVNYXRoRGF0YTo6UmFkaWNhbFZlcnRpY2FsR2FwKTsKLSAg
ICAgICAgbV9ydWxlVGhpY2tuZXNzID0gbWF0aERhdGEtPmdldE1hdGhDb25zdGFudChwcmltYXJ5
Rm9udERhdGEsIE9wZW5UeXBlTWF0aERhdGE6OlJhZGljYWxSdWxlVGhpY2tuZXNzKTsKLSAgICAg
ICAgbV9leHRyYUFzY2VuZGVyID0gbWF0aERhdGEtPmdldE1hdGhDb25zdGFudChwcmltYXJ5Rm9u
dERhdGEsIE9wZW5UeXBlTWF0aERhdGE6OlJhZGljYWxFeHRyYUFzY2VuZGVyKTsKKyAgICAgICAg
bV92ZXJ0aWNhbEdhcCA9IG1hdGhEYXRhLT5nZXRNYXRoQ29uc3RhbnQocHJpbWFyeUZvbnQsIE9w
ZW5UeXBlTWF0aERhdGE6OlJhZGljYWxWZXJ0aWNhbEdhcCk7CisgICAgICAgIG1fcnVsZVRoaWNr
bmVzcyA9IG1hdGhEYXRhLT5nZXRNYXRoQ29uc3RhbnQocHJpbWFyeUZvbnQsIE9wZW5UeXBlTWF0
aERhdGE6OlJhZGljYWxSdWxlVGhpY2tuZXNzKTsKKyAgICAgICAgbV9leHRyYUFzY2VuZGVyID0g
bWF0aERhdGEtPmdldE1hdGhDb25zdGFudChwcmltYXJ5Rm9udCwgT3BlblR5cGVNYXRoRGF0YTo6
UmFkaWNhbEV4dHJhQXNjZW5kZXIpOwogCiAgICAgICAgIGlmICghaXNSZW5kZXJNYXRoTUxTcXVh
cmVSb290KCkpIHsKLSAgICAgICAgICAgIGtlcm5CZWZvcmVEZWdyZWUgPSBtYXRoRGF0YS0+Z2V0
TWF0aENvbnN0YW50KHByaW1hcnlGb250RGF0YSwgT3BlblR5cGVNYXRoRGF0YTo6UmFkaWNhbEtl
cm5CZWZvcmVEZWdyZWUpOwotICAgICAgICAgICAga2VybkFmdGVyRGVncmVlID0gbWF0aERhdGEt
PmdldE1hdGhDb25zdGFudChwcmltYXJ5Rm9udERhdGEsIE9wZW5UeXBlTWF0aERhdGE6OlJhZGlj
YWxLZXJuQWZ0ZXJEZWdyZWUpOwotICAgICAgICAgICAgbV9kZWdyZWVCb3R0b21SYWlzZVBlcmNl
bnQgPSBtYXRoRGF0YS0+Z2V0TWF0aENvbnN0YW50KHByaW1hcnlGb250RGF0YSwgT3BlblR5cGVN
YXRoRGF0YTo6UmFkaWNhbERlZ3JlZUJvdHRvbVJhaXNlUGVyY2VudCk7CisgICAgICAgICAgICBr
ZXJuQmVmb3JlRGVncmVlID0gbWF0aERhdGEtPmdldE1hdGhDb25zdGFudChwcmltYXJ5Rm9udCwg
T3BlblR5cGVNYXRoRGF0YTo6UmFkaWNhbEtlcm5CZWZvcmVEZWdyZWUpOworICAgICAgICAgICAg
a2VybkFmdGVyRGVncmVlID0gbWF0aERhdGEtPmdldE1hdGhDb25zdGFudChwcmltYXJ5Rm9udCwg
T3BlblR5cGVNYXRoRGF0YTo6UmFkaWNhbEtlcm5BZnRlckRlZ3JlZSk7CisgICAgICAgICAgICBt
X2RlZ3JlZUJvdHRvbVJhaXNlUGVyY2VudCA9IG1hdGhEYXRhLT5nZXRNYXRoQ29uc3RhbnQocHJp
bWFyeUZvbnQsIE9wZW5UeXBlTWF0aERhdGE6OlJhZGljYWxEZWdyZWVCb3R0b21SYWlzZVBlcmNl
bnQpOwogICAgICAgICB9CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3R5bGUvUmVuZGVyU3R5bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTExODQsNyArMTE4NCw3IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgUmVuZGVyU3R5bGU6Omh5cGhl
blMKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgZGVwZW5kIG9uIGxvY2FsZS4KICAgICBERVBS
RUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBoeXBoZW5NaW51c1N0cmlu
ZywgKCZoeXBoZW5NaW51cywgMSkpOwogICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NB
TChBdG9taWNTdHJpbmcsIGh5cGhlblN0cmluZywgKCZoeXBoZW4sIDEpKTsKLSAgICByZXR1cm4g
Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5nbHlwaEZvckNoYXJhY3RlcihoeXBoZW4p
ID8gaHlwaGVuU3RyaW5nIDogaHlwaGVuTWludXNTdHJpbmc7CisgICAgcmV0dXJuIGZvbnRDYXNj
YWRlKCkucHJpbWFyeUZvbnQoKS5nbHlwaEZvckNoYXJhY3RlcihoeXBoZW4pID8gaHlwaGVuU3Ry
aW5nIDogaHlwaGVuTWludXNTdHJpbmc7CiB9CiAKIGNvbnN0IEF0b21pY1N0cmluZyYgUmVuZGVy
U3R5bGU6OnRleHRFbXBoYXNpc01hcmtTdHJpbmcoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwCShyZXZpc2lvbiAxNzg4NTcp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHVGV4dC5oIgog
CiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXF1ZXN0LmgiCiAjaW5jbHVkZSAi
SGl0VGVzdFJlc3VsdC5oIgpAQCAtNDUsNyArNDYsNiBAQAogI2luY2x1ZGUgIlNWR1RleHRSdW5S
ZW5kZXJpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtTGlzdC5oIgogI2luY2x1
ZGUgIlNWR1VSSVJlZmVyZW5jZS5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5j
bHVkZSAiVHJhbnNmb3JtU3RhdGUuaCIKICNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24uaCIKICNp
bmNsdWRlIDx3dGYvU3RhY2tTdGF0cy5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MTksNyArNDE5LDcgQEAgVGV4dFJ1biBTVkdJbmxpbmVUZXh0Qm94Ojpjb25z
dHJ1Y3RUZXh0UgogICAgICAgICAgICAgICAgICwgZGlyZWN0aW9uKCkKICAgICAgICAgICAgICAg
ICAsIGRpck92ZXJyaWRlKCkgfHwgc3R5bGUtPnJ0bE9yZGVyaW5nKCkgPT0gVmlzdWFsT3JkZXIg
LyogZGlyZWN0aW9uYWxPdmVycmlkZSAqLyk7CiAKLSAgICBpZiAoc3R5bGUtPmZvbnRDYXNjYWRl
KCkucHJpbWFyeUZvbnREYXRhKCkuaXNTVkdGb250KCkpCisgICAgaWYgKHN0eWxlLT5mb250Q2Fz
Y2FkZSgpLnByaW1hcnlGb250KCkuaXNTVkdGb250KCkpCiAgICAgICAgIHJ1bi5zZXRSZW5kZXJp
bmdDb250ZXh0KFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUocmVuZGVyZXIoKSkp
OwogCiAgICAgcnVuLmRpc2FibGVSb3VuZGluZ0hhY2tzKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVTcGFj
aW5nLmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDE2
ICs0MSwxNiBAQCBTVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZzo6U1ZHVGV4dExheW91CiBmbG9h
dCBTVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZzo6Y2FsY3VsYXRlU1ZHS2VybmluZyhib29sIGlz
VmVydGljYWxUZXh0LCBjb25zdCBTVkdUZXh0TWV0cmljczo6R2x5cGgmIGN1cnJlbnRHbHlwaCkK
IHsKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhJiBmb250
RGF0YSA9IG1fZm9udC5wcmltYXJ5Rm9udERhdGEoKTsKLSAgICBpZiAoIWZvbnREYXRhLmlzU1ZH
Rm9udCgpKSB7CisgICAgY29uc3QgRm9udCYgZm9udCA9IG1fZm9udC5wcmltYXJ5Rm9udCgpOwor
ICAgIGlmICghZm9udC5pc1NWR0ZvbnQoKSkgewogICAgICAgICBtX2xhc3RHbHlwaC5pc1ZhbGlk
ID0gZmFsc2U7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIEFTU0VSVChmb250RGF0
YS5pc0N1c3RvbUZvbnQoKSk7Ci0gICAgQVNTRVJUKGZvbnREYXRhLmlzU1ZHRm9udCgpKTsKKyAg
ICBBU1NFUlQoZm9udC5pc0N1c3RvbUZvbnQoKSk7CisgICAgQVNTRVJUKGZvbnQuaXNTVkdGb250
KCkpOwogCi0gICAgYXV0byogc3ZnRm9udERhdGEgPSBzdGF0aWNfY2FzdDxjb25zdCBTVkdGb250
RGF0YSo+KGZvbnREYXRhLnN2Z0RhdGEoKSk7CisgICAgYXV0byogc3ZnRm9udERhdGEgPSBzdGF0
aWNfY2FzdDxjb25zdCBTVkdGb250RGF0YSo+KGZvbnQuc3ZnRGF0YSgpKTsKICAgICBTVkdGb250
RmFjZUVsZW1lbnQqIHN2Z0ZvbnRGYWNlID0gc3ZnRm9udERhdGEtPnN2Z0ZvbnRGYWNlRWxlbWVu
dCgpOwogICAgIEFTU0VSVChzdmdGb250RmFjZSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3MuY3BwCShyZXZpc2lvbiAxNzg4NTcpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzAsNyArNzAsNyBAQCBUZXh0UnVuIFNWR1RleHRNZXRyaWNzOjpjb25zdHJ1
Y3RUZXh0UnVuCiAgICAgICAgICAgICAgICAgLCBzdHlsZS5kaXJlY3Rpb24oKQogICAgICAgICAg
ICAgICAgICwgaXNPdmVycmlkZShzdHlsZS51bmljb2RlQmlkaSgpKSAvKiBkaXJlY3Rpb25hbE92
ZXJyaWRlICovKTsKIAotICAgIGlmIChzdHlsZS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0
YSgpLmlzU1ZHRm9udCgpKQorICAgIGlmIChzdHlsZS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250
KCkuaXNTVkdGb250KCkpCiAgICAgICAgIHJ1bi5zZXRSZW5kZXJpbmdDb250ZXh0KFNWR1RleHRS
dW5SZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUodGV4dCkpOwogCiAgICAgcnVuLmRpc2FibGVSb3Vu
ZGluZ0hhY2tzKCk7CkBAIC05MSw3ICs5MSw3IEBAIFNWR1RleHRNZXRyaWNzIFNWR1RleHRNZXRy
aWNzOjptZWFzdXJlQ2gKIAogU1ZHVGV4dE1ldHJpY3M6OlNWR1RleHRNZXRyaWNzKFJlbmRlclNW
R0lubGluZVRleHQmIHRleHQsIHVuc2lnbmVkIHBvc2l0aW9uLCB1bnNpZ25lZCBsZW5ndGgsIGZs
b2F0IHdpZHRoLCBjb25zdCBTdHJpbmcmIGdseXBoTmFtZSkKIHsKLSAgICBib29sIG5lZWRzQ29u
dGV4dCA9IHRleHQuc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmlzU1ZH
Rm9udCgpOworICAgIGJvb2wgbmVlZHNDb250ZXh0ID0gdGV4dC5zdHlsZSgpLmZvbnRDYXNjYWRl
KCkucHJpbWFyeUZvbnQoKS5pc1NWR0ZvbnQoKTsKICAgICBmbG9hdCBzY2FsaW5nRmFjdG9yID0g
dGV4dC5zY2FsaW5nRmFjdG9yKCk7CiAgICAgQVNTRVJUKHNjYWxpbmdGYWN0b3IpOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRS
dW5SZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM3LDE4ICszNywxOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRp
YyBpbmxpbmUgY29uc3QgU1ZHRm9udERhdGEqIHN2Z0ZvbnRBbmRGb250RmFjZUVsZW1lbnRGb3JG
b250RGF0YShjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsIFNWR0ZvbnRGYWNlRWxlbWVu
dComIGZvbnRGYWNlLCBTVkdGb250RWxlbWVudComIGZvbnQpCitzdGF0aWMgaW5saW5lIGNvbnN0
IFNWR0ZvbnREYXRhKiBzdmdGb250QW5kRm9udEZhY2VFbGVtZW50Rm9yRm9udERhdGEoY29uc3Qg
Rm9udCogZm9udCwgU1ZHRm9udEZhY2VFbGVtZW50KiYgc3ZnRm9udEZhY2VFbGVtZW50LCBTVkdG
b250RWxlbWVudComIHN2Z0ZvbnRFbGVtZW50KQogewotICAgIEFTU0VSVChmb250RGF0YSk7Ci0g
ICAgQVNTRVJUKGZvbnREYXRhLT5pc0N1c3RvbUZvbnQoKSk7Ci0gICAgQVNTRVJUKGZvbnREYXRh
LT5pc1NWR0ZvbnQoKSk7CisgICAgQVNTRVJUKGZvbnQpOworICAgIEFTU0VSVChmb250LT5pc0N1
c3RvbUZvbnQoKSk7CisgICAgQVNTRVJUKGZvbnQtPmlzU1ZHRm9udCgpKTsKIAotICAgIGF1dG8q
IHN2Z0ZvbnREYXRhID0gc3RhdGljX2Nhc3Q8Y29uc3QgU1ZHRm9udERhdGEqPihmb250RGF0YS0+
c3ZnRGF0YSgpKTsKKyAgICBhdXRvKiBzdmdGb250RGF0YSA9IHN0YXRpY19jYXN0PGNvbnN0IFNW
R0ZvbnREYXRhKj4oZm9udC0+c3ZnRGF0YSgpKTsKIAotICAgIGZvbnRGYWNlID0gc3ZnRm9udERh
dGEtPnN2Z0ZvbnRGYWNlRWxlbWVudCgpOwotICAgIEFTU0VSVChmb250RmFjZSk7CisgICAgc3Zn
Rm9udEZhY2VFbGVtZW50ID0gc3ZnRm9udERhdGEtPnN2Z0ZvbnRGYWNlRWxlbWVudCgpOworICAg
IEFTU0VSVChzdmdGb250RmFjZUVsZW1lbnQpOwogCi0gICAgZm9udCA9IGZvbnRGYWNlLT5hc3Nv
Y2lhdGVkRm9udEVsZW1lbnQoKTsKKyAgICBzdmdGb250RWxlbWVudCA9IHN2Z0ZvbnRGYWNlRWxl
bWVudC0+YXNzb2NpYXRlZEZvbnRFbGVtZW50KCk7CiAgICAgcmV0dXJuIHN2Z0ZvbnREYXRhOwog
fQogCkBAIC02MSwyMSArNjEsMjEgQEAgZmxvYXQgU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6
OmZsb2F0VwogICAgIHJldHVybiBpdC5ydW5XaWR0aFNvRmFyKCk7CiB9CiAKLWJvb2wgU1ZHVGV4
dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmFwcGx5U1ZHS2VybmluZyhjb25zdCBTaW1wbGVGb250RGF0
YSogZm9udERhdGEsIFdpZHRoSXRlcmF0b3ImIGl0ZXJhdG9yLCBHbHlwaEJ1ZmZlciogZ2x5cGhC
dWZmZXIsIGludCBmcm9tKSBjb25zdAorYm9vbCBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6
YXBwbHlTVkdLZXJuaW5nKGNvbnN0IEZvbnQqIGZvbnQsIFdpZHRoSXRlcmF0b3ImIGl0ZXJhdG9y
LCBHbHlwaEJ1ZmZlciogZ2x5cGhCdWZmZXIsIGludCBmcm9tKSBjb25zdAogewogICAgIEFTU0VS
VChnbHlwaEJ1ZmZlcik7CiAgICAgQVNTRVJUKGdseXBoQnVmZmVyLT5zaXplKCkgPiAxKTsKICAg
ICBTVkdGb250RWxlbWVudCogZm9udEVsZW1lbnQgPSAwOwogICAgIFNWR0ZvbnRGYWNlRWxlbWVu
dCogZm9udEZhY2VFbGVtZW50ID0gMDsKIAotICAgIHN2Z0ZvbnRBbmRGb250RmFjZUVsZW1lbnRG
b3JGb250RGF0YShmb250RGF0YSwgZm9udEZhY2VFbGVtZW50LCBmb250RWxlbWVudCk7CisgICAg
c3ZnRm9udEFuZEZvbnRGYWNlRWxlbWVudEZvckZvbnREYXRhKGZvbnQsIGZvbnRGYWNlRWxlbWVu
dCwgZm9udEVsZW1lbnQpOwogICAgIGlmICghZm9udEVsZW1lbnQgfHwgIWZvbnRGYWNlRWxlbWVu
dCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKGZvbnRFbGVtZW50LT5ob3Jpem9u
dGFsS2VybmluZ01hcElzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBmbG9h
dCBzY2FsZSA9IHNjYWxlRW1Ub1VuaXRzKGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5zaXplKCks
IGZvbnRGYWNlRWxlbWVudC0+dW5pdHNQZXJFbSgpKTsKKyAgICBmbG9hdCBzY2FsZSA9IHNjYWxl
RW1Ub1VuaXRzKGZvbnQtPnBsYXRmb3JtRGF0YSgpLnNpemUoKSwgZm9udEZhY2VFbGVtZW50LT51
bml0c1BlckVtKCkpOwogCiAgICAgU3RyaW5nIGxhc3RHbHlwaE5hbWU7CiAgICAgU3RyaW5nIGxh
c3RVbmljb2RlU3RyaW5nOwpAQCAtMjA1LDcgKzIwNSw3IEBAIHZvaWQgU1ZHR2x5cGhUb1BhdGhU
cmFuc2xhdG9yOjphZHZhbmNlKCkKICAgICAgICAgfQogCiAgICAgICAgICsrbV9pbmRleDsKLSAg
ICAgICAgaWYgKG1faW5kZXggPj0gbV9zdG9wcGluZ1BvaW50IHx8ICFtX2dseXBoQnVmZmVyLmZv
bnREYXRhQXQobV9pbmRleCktPmlzU1ZHRm9udCgpKQorICAgICAgICBpZiAobV9pbmRleCA+PSBt
X3N0b3BwaW5nUG9pbnQgfHwgIW1fZ2x5cGhCdWZmZXIuZm9udEF0KG1faW5kZXgpLT5pc1NWR0Zv
bnQoKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBtX2dseXBoID0gbV9nbHlwaEJ1ZmZl
ci5nbHlwaEF0KG1faW5kZXgpOwogICAgICAgICBpZiAoIW1fZ2x5cGgpCkBAIC0yNDQsMTIgKzI0
NCwxMiBAQCBjbGFzcyBEdW1teUdseXBoVG9QYXRoVHJhbnNsYXRvciBmaW5hbCA6CiAgICAgfQog
fTsKIAotc3RkOjp1bmlxdWVfcHRyPEdseXBoVG9QYXRoVHJhbnNsYXRvcj4gU1ZHVGV4dFJ1blJl
bmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUdseXBoVG9QYXRoVHJhbnNsYXRvcihjb25zdCBTaW1wbGVG
b250RGF0YSYgZm9udERhdGEsIGNvbnN0IFRleHRSdW4qIHRleHRSdW4sIGNvbnN0IEdseXBoQnVm
ZmVyJiBnbHlwaEJ1ZmZlciwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50KSBjb25zdAorc3RkOjp1bmlxdWVfcHRyPEdseXBoVG9QYXRoVHJhbnNsYXRvcj4g
U1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUdseXBoVG9QYXRoVHJhbnNsYXRvcihj
b25zdCBGb250JiBmb250LCBjb25zdCBUZXh0UnVuKiB0ZXh0UnVuLCBjb25zdCBHbHlwaEJ1ZmZl
ciYgZ2x5cGhCdWZmZXIsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50
JiBwb2ludCkgY29uc3QKIHsKICAgICBTVkdGb250RWxlbWVudCogZm9udEVsZW1lbnQgPSBudWxs
cHRyOwogICAgIFNWR0ZvbnRGYWNlRWxlbWVudCogZm9udEZhY2VFbGVtZW50ID0gbnVsbHB0cjsK
IAotICAgIGNvbnN0IFNWR0ZvbnREYXRhKiBzdmdGb250RGF0YSA9IHN2Z0ZvbnRBbmRGb250RmFj
ZUVsZW1lbnRGb3JGb250RGF0YSgmZm9udERhdGEsIGZvbnRGYWNlRWxlbWVudCwgZm9udEVsZW1l
bnQpOworICAgIGNvbnN0IFNWR0ZvbnREYXRhKiBzdmdGb250RGF0YSA9IHN2Z0ZvbnRBbmRGb250
RmFjZUVsZW1lbnRGb3JGb250RGF0YSgmZm9udCwgZm9udEZhY2VFbGVtZW50LCBmb250RWxlbWVu
dCk7CiAgICAgaWYgKCFmb250RWxlbWVudCB8fCAhZm9udEZhY2VFbGVtZW50KQogICAgICAgICBy
ZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxEdW1teUdseXBoVG9QYXRoVHJhbnNsYXRvcj4oKTsKIApA
QCAtMjU3LDEyICsyNTcsMTIgQEAgc3RkOjp1bmlxdWVfcHRyPEdseXBoVG9QYXRoVHJhbnNsYXRv
cj4gUwogICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9IGVsZW1lbnRSZW5kZXJlci5zdHlsZSgpOwog
ICAgIGJvb2wgaXNWZXJ0aWNhbFRleHQgPSBzdHlsZS5zdmdTdHlsZSgpLmlzVmVydGljYWxXcml0
aW5nTW9kZSgpOwogCi0gICAgZmxvYXQgc2NhbGUgPSBzY2FsZUVtVG9Vbml0cyhmb250RGF0YS5w
bGF0Zm9ybURhdGEoKS5zaXplKCksIGZvbnRGYWNlRWxlbWVudC0+dW5pdHNQZXJFbSgpKTsKKyAg
ICBmbG9hdCBzY2FsZSA9IHNjYWxlRW1Ub1VuaXRzKGZvbnQucGxhdGZvcm1EYXRhKCkuc2l6ZSgp
LCBmb250RmFjZUVsZW1lbnQtPnVuaXRzUGVyRW0oKSk7CiAKICAgICByZXR1cm4gc3RkOjptYWtl
X3VuaXF1ZTxTVkdHbHlwaFRvUGF0aFRyYW5zbGF0b3I+KHRleHRSdW4sIGdseXBoQnVmZmVyLCBw
b2ludCwgKnN2Z0ZvbnREYXRhLCAqZm9udEVsZW1lbnQsIGZyb20sIG51bUdseXBocywgc2NhbGUs
IGlzVmVydGljYWxUZXh0KTsKIH0KIAotdm9pZCBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6
ZHJhd1NWR0dseXBocyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFNpbXBsZUZvbnRE
YXRhKiBmb250RGF0YSwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBpbnQgZnJvbSwg
aW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Cit2b2lkIFNWR1Rl
eHRSdW5SZW5kZXJpbmdDb250ZXh0OjpkcmF3U1ZHR2x5cGhzKEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY29uc3QgRm9udCogZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBp
bnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0CiB7
CiAgICAgYXV0byBhY3RpdmVQYWludGluZ1Jlc291cmNlID0gdGhpcy0+YWN0aXZlUGFpbnRpbmdS
ZXNvdXJjZSgpOwogICAgIGlmICghYWN0aXZlUGFpbnRpbmdSZXNvdXJjZSkgewpAQCAtMjc4LDcg
KzI3OCw3IEBAIHZvaWQgU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmRyYXdTVkcKICAgICBB
U1NFUlQoYWN0aXZlUGFpbnRpbmdSZXNvdXJjZSk7CiAKICAgICBSZW5kZXJTVkdSZXNvdXJjZU1v
ZGUgcmVzb3VyY2VNb2RlID0gY29udGV4dC0+dGV4dERyYXdpbmdNb2RlKCkgPT0gVGV4dE1vZGVT
dHJva2UgPyBBcHBseVRvU3Ryb2tlTW9kZSA6IEFwcGx5VG9GaWxsTW9kZTsKLSAgICBmb3IgKGF1
dG8gdHJhbnNsYXRvciA9IGNyZWF0ZUdseXBoVG9QYXRoVHJhbnNsYXRvcigqZm9udERhdGEsIG51
bGxwdHIsIGdseXBoQnVmZmVyLCBmcm9tLCBudW1HbHlwaHMsIHBvaW50KTsgdHJhbnNsYXRvci0+
Y29udGFpbnNNb3JlUGF0aHMoKTsgdHJhbnNsYXRvci0+YWR2YW5jZSgpKSB7CisgICAgZm9yIChh
dXRvIHRyYW5zbGF0b3IgPSBjcmVhdGVHbHlwaFRvUGF0aFRyYW5zbGF0b3IoKmZvbnQsIG51bGxw
dHIsIGdseXBoQnVmZmVyLCBmcm9tLCBudW1HbHlwaHMsIHBvaW50KTsgdHJhbnNsYXRvci0+Y29u
dGFpbnNNb3JlUGF0aHMoKTsgdHJhbnNsYXRvci0+YWR2YW5jZSgpKSB7CiAgICAgICAgIFBhdGgg
Z2x5cGhQYXRoID0gdHJhbnNsYXRvci0+cGF0aCgpOwogICAgICAgICBpZiAoYWN0aXZlUGFpbnRp
bmdSZXNvdXJjZS0+YXBwbHlSZXNvdXJjZShlbGVtZW50UmVuZGVyZXIsIHN0eWxlLCBjb250ZXh0
LCByZXNvdXJjZU1vZGUpKSB7CiAgICAgICAgICAgICBmbG9hdCBzdHJva2VUaGlja25lc3MgPSBj
b250ZXh0LT5zdHJva2VUaGlja25lc3MoKTsKQEAgLTI5MiwxMyArMjkyLDEzIEBAIHZvaWQgU1ZH
VGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmRyYXdTVkcKIAogc3RhdGljIEdseXBoRGF0YSBtaXNz
aW5nR2x5cGhGb3JGb250KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250KQogewotICAgIGNvbnN0IFNp
bXBsZUZvbnREYXRhJiBwcmltYXJ5Rm9udERhdGEgPSBmb250LnByaW1hcnlGb250RGF0YSgpOwot
ICAgIGlmICghcHJpbWFyeUZvbnREYXRhLmlzU1ZHRm9udCgpKQorICAgIGNvbnN0IEZvbnQmIHBy
aW1hcnlGb250ID0gZm9udC5wcmltYXJ5Rm9udCgpOworICAgIGlmICghcHJpbWFyeUZvbnQuaXNT
VkdGb250KCkpCiAgICAgICAgIHJldHVybiBHbHlwaERhdGEoKTsKICAgICBTVkdGb250RWxlbWVu
dCogZm9udEVsZW1lbnQ7CiAgICAgU1ZHRm9udEZhY2VFbGVtZW50KiBmb250RmFjZUVsZW1lbnQ7
Ci0gICAgc3ZnRm9udEFuZEZvbnRGYWNlRWxlbWVudEZvckZvbnREYXRhKCZwcmltYXJ5Rm9udERh
dGEsIGZvbnRGYWNlRWxlbWVudCwgZm9udEVsZW1lbnQpOwotICAgIHJldHVybiBHbHlwaERhdGEo
Zm9udEVsZW1lbnQtPm1pc3NpbmdHbHlwaCgpLCAmcHJpbWFyeUZvbnREYXRhKTsKKyAgICBzdmdG
b250QW5kRm9udEZhY2VFbGVtZW50Rm9yRm9udERhdGEoJnByaW1hcnlGb250LCBmb250RmFjZUVs
ZW1lbnQsIGZvbnRFbGVtZW50KTsKKyAgICByZXR1cm4gR2x5cGhEYXRhKGZvbnRFbGVtZW50LT5t
aXNzaW5nR2x5cGgoKSwgJnByaW1hcnlGb250KTsKIH0KIAogR2x5cGhEYXRhIFNWR1RleHRSdW5S
ZW5kZXJpbmdDb250ZXh0OjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoY29uc3QgRm9udENhc2NhZGUm
IGZvbnQsIFdpZHRoSXRlcmF0b3ImIGl0ZXJhdG9yLCBVQ2hhcjMyIGNoYXJhY3RlciwgYm9vbCBt
aXJyb3IsIGludCBjdXJyZW50Q2hhcmFjdGVyLCB1bnNpZ25lZCYgYWR2YW5jZUxlbmd0aCwgU3Ry
aW5nJiBub3JtYWxpemVkU3BhY2VzU3RyaW5nQ2FjaGUpCkBAIC0zMDcsMjMgKzMwNywyMyBAQCBH
bHlwaERhdGEgU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmdsCiAgICAgaWYgKCFnbHlwaERh
dGEuZ2x5cGgpCiAgICAgICAgIHJldHVybiBtaXNzaW5nR2x5cGhGb3JGb250KGZvbnQpOwogCi0g
ICAgQVNTRVJUKGdseXBoRGF0YS5mb250RGF0YSk7CisgICAgQVNTRVJUKGdseXBoRGF0YS5mb250
KTsKIAogICAgIC8vIENoYXJhY3RlcnMgZW5jbG9zZWQgYnkgYW4gPGFsdEdseXBoPiBlbGVtZW50
LCBtYXkgbm90IGJlIHJlZ2lzdGVyZWQgaW4gdGhlIEdseXBoUGFnZS4KLSAgICBpZiAoIWdseXBo
RGF0YS5mb250RGF0YS0+aXNTVkdGb250KCkpIHsKKyAgICBpZiAoIWdseXBoRGF0YS5mb250LT5p
c1NWR0ZvbnQoKSkgewogICAgICAgICBhdXRvJiBlbGVtZW50UmVuZGVyZXIgPSBpczxSZW5kZXJF
bGVtZW50PihyZW5kZXJlcigpKSA/IGRvd25jYXN0PFJlbmRlckVsZW1lbnQ+KHJlbmRlcmVyKCkp
IDogKnJlbmRlcmVyKCkucGFyZW50KCk7CiAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRSZW5k
ZXJlckVsZW1lbnQgPSBlbGVtZW50UmVuZGVyZXIuZWxlbWVudCgpKSB7CiAgICAgICAgICAgICBp
ZiAoaXM8U1ZHQWx0R2x5cGhFbGVtZW50PigqcGFyZW50UmVuZGVyZXJFbGVtZW50KSkKLSAgICAg
ICAgICAgICAgICBnbHlwaERhdGEuZm9udERhdGEgPSAmZm9udC5wcmltYXJ5Rm9udERhdGEoKTsK
KyAgICAgICAgICAgICAgICBnbHlwaERhdGEuZm9udCA9ICZmb250LnByaW1hcnlGb250KCk7CiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoIWdseXBoRGF0YS5mb250RGF0YS0+aXNTVkdGb250
KCkpCisgICAgaWYgKCFnbHlwaERhdGEuZm9udC0+aXNTVkdGb250KCkpCiAgICAgICAgIHJldHVy
biBnbHlwaERhdGE7CiAKICAgICBTVkdGb250RWxlbWVudCogZm9udEVsZW1lbnQgPSBudWxscHRy
OwogICAgIFNWR0ZvbnRGYWNlRWxlbWVudCogZm9udEZhY2VFbGVtZW50ID0gbnVsbHB0cjsKLSAg
ICBjb25zdCBTVkdGb250RGF0YSogc3ZnRm9udERhdGEgPSBzdmdGb250QW5kRm9udEZhY2VFbGVt
ZW50Rm9yRm9udERhdGEoZ2x5cGhEYXRhLmZvbnREYXRhLCBmb250RmFjZUVsZW1lbnQsIGZvbnRF
bGVtZW50KTsKKyAgICBjb25zdCBTVkdGb250RGF0YSogc3ZnRm9udERhdGEgPSBzdmdGb250QW5k
Rm9udEZhY2VFbGVtZW50Rm9yRm9udERhdGEoZ2x5cGhEYXRhLmZvbnQsIGZvbnRGYWNlRWxlbWVu
dCwgZm9udEVsZW1lbnQpOwogICAgIGlmICghc3ZnRm9udERhdGEpCiAgICAgICAgIHJldHVybiBn
bHlwaERhdGE7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1
blJlbmRlcmluZ0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmgJKHJldmlzaW9uIDE3ODg1NykKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQu
aAkod29ya2luZyBjb3B5KQpAQCAtNDMsOSArNDMsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRB
Y3RpdmVQYWludGluZ1Jlc291cmNlKFJlbmRlclNWR1Jlc291cmNlKiBvYmplY3QpIHsgbV9hY3Rp
dmVQYWludGluZ1Jlc291cmNlID0gb2JqZWN0OyB9CiAKICAgICB2aXJ0dWFsIEdseXBoRGF0YSBn
bHlwaERhdGFGb3JDaGFyYWN0ZXIoY29uc3QgRm9udENhc2NhZGUmLCBXaWR0aEl0ZXJhdG9yJiwg
VUNoYXIzMiBjaGFyYWN0ZXIsIGJvb2wgbWlycm9yLCBpbnQgY3VycmVudENoYXJhY3RlciwgdW5z
aWduZWQmIGFkdmFuY2VMZW5ndGgsIFN0cmluZyYgbm9ybWFsaXplZFNwYWNlc1N0cmluZ0NhY2hl
KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1NWR0dseXBocyhHcmFwaGljc0NvbnRl
eHQqLCBjb25zdCBTaW1wbGVGb250RGF0YSosIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20s
IGludCB0bywgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwg
dm9pZCBkcmF3U1ZHR2x5cGhzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZvbnQqLCBjb25zdCBH
bHlwaEJ1ZmZlciYsIGludCBmcm9tLCBpbnQgdG8sIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdCBv
dmVycmlkZTsKICAgICB2aXJ0dWFsIGZsb2F0IGZsb2F0V2lkdGhVc2luZ1NWR0ZvbnQoY29uc3Qg
Rm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcm
IGdseXBoTmFtZSkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIGFwcGx5U1ZHS2Vy
bmluZyhjb25zdCBTaW1wbGVGb250RGF0YSosIFdpZHRoSXRlcmF0b3ImLCBHbHlwaEJ1ZmZlcios
IGludCBmcm9tKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgYXBwbHlTVkdLZXJu
aW5nKGNvbnN0IEZvbnQqLCBXaWR0aEl0ZXJhdG9yJiwgR2x5cGhCdWZmZXIqLCBpbnQgZnJvbSkg
Y29uc3Qgb3ZlcnJpZGU7CiAjZW5kaWYKIAogcHJpdmF0ZToKQEAgLTYwLDcgKzYwLDcgQEAgcHJp
dmF0ZToKICAgICB2aXJ0dWFsIH5TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dCgpIHsgfQogCiAj
aWYgRU5BQkxFKFNWR19GT05UUykKLSAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxHbHlwaFRv
UGF0aFRyYW5zbGF0b3I+IGNyZWF0ZUdseXBoVG9QYXRoVHJhbnNsYXRvcihjb25zdCBTaW1wbGVG
b250RGF0YSYsIGNvbnN0IFRleHRSdW4qLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBmcm9tLCBp
bnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCBzdGQ6OnVuaXF1ZV9wdHI8R2x5cGhUb1BhdGhUcmFuc2xhdG9yPiBjcmVhdGVHbHlwaFRv
UGF0aFRyYW5zbGF0b3IoY29uc3QgRm9udCYsIGNvbnN0IFRleHRSdW4qLCBjb25zdCBHbHlwaEJ1
ZmZlciYsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Qg
b3ZlcnJpZGU7CiAjZW5kaWYKIAogICAgIFJlbmRlck9iamVjdCYgbV9yZW5kZXJlcjsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZvbnREYXRhLmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZvbnREYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsMTUgKzU3
LDE1IEBAIFNWR0ZvbnREYXRhOjpTVkdGb250RGF0YShTVkdGb250RmFjZUVsZW0KICAgICBBU1NF
UlRfQVJHKGZvbnRGYWNlRWxlbWVudCwgZm9udEZhY2VFbGVtZW50KTsKIH0KIAotdm9pZCBTVkdG
b250RGF0YTo6aW5pdGlhbGl6ZUZvbnREYXRhKFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwgZmxv
YXQgZm9udFNpemUpCit2b2lkIFNWR0ZvbnREYXRhOjppbml0aWFsaXplRm9udChGb250KiBmb250
LCBmbG9hdCBmb250U2l6ZSkKIHsKLSAgICBBU1NFUlQoZm9udERhdGEpOworICAgIEFTU0VSVChm
b250KTsKIAogICAgIFNWR0ZvbnRGYWNlRWxlbWVudCogc3ZnRm9udEZhY2VFbGVtZW50ID0gdGhp
cy0+c3ZnRm9udEZhY2VFbGVtZW50KCk7CiAgICAgQVNTRVJUKHN2Z0ZvbnRGYWNlRWxlbWVudCk7
CiAKLSAgICBmb250RGF0YS0+c2V0WmVyb1dpZHRoU3BhY2VHbHlwaCgwKTsKLSAgICBmb250RGF0
YS0+ZGV0ZXJtaW5lUGl0Y2goKTsKKyAgICBmb250LT5zZXRaZXJvV2lkdGhTcGFjZUdseXBoKDAp
OworICAgIGZvbnQtPmRldGVybWluZVBpdGNoKCk7CiAKICAgICB1bnNpZ25lZCB1bml0c1BlckVt
ID0gc3ZnRm9udEZhY2VFbGVtZW50LT51bml0c1BlckVtKCk7CiAgICAgZmxvYXQgc2NhbGUgPSBz
Y2FsZUVtVG9Vbml0cyhmb250U2l6ZSwgdW5pdHNQZXJFbSk7CkBAIC03NCwxNSArNzQsMTUgQEAg
dm9pZCBTVkdGb250RGF0YTo6aW5pdGlhbGl6ZUZvbnREYXRhKFNpbQogICAgIGZsb2F0IGRlc2Nl
bnQgPSBzdmdGb250RmFjZUVsZW1lbnQtPmRlc2NlbnQoKSAqIHNjYWxlOwogICAgIGZsb2F0IGxp
bmVHYXAgPSAwLjFmICogZm9udFNpemU7CiAKLSAgICBjb25zdCBHbHlwaFBhZ2UqIGdseXBoUGFn
ZVplcm8gPSBmb250RGF0YS0+Z2x5cGhQYWdlKDApOworICAgIGNvbnN0IEdseXBoUGFnZSogZ2x5
cGhQYWdlWmVybyA9IGZvbnQtPmdseXBoUGFnZSgwKTsKIAogICAgIGlmICgheEhlaWdodCAmJiBn
bHlwaFBhZ2VaZXJvKSB7CiAgICAgICAgIC8vIEZhbGxiYWNrIGlmIHhfaGVpZ2h0QXR0ciBpcyBu
b3Qgc3BlY2lmaWVkIGZvciB0aGUgZm9udCBlbGVtZW50LgogICAgICAgICBHbHlwaCBsZXR0ZXJY
R2x5cGggPSBnbHlwaFBhZ2VaZXJvLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoJ3gnKS5nbHlwaDsK
LSAgICAgICAgeEhlaWdodCA9IGxldHRlclhHbHlwaCA/IGZvbnREYXRhLT53aWR0aEZvckdseXBo
KGxldHRlclhHbHlwaCkgOiAyICogYXNjZW50IC8gMzsKKyAgICAgICAgeEhlaWdodCA9IGxldHRl
clhHbHlwaCA/IGZvbnQtPndpZHRoRm9yR2x5cGgobGV0dGVyWEdseXBoKSA6IDIgKiBhc2NlbnQg
LyAzOwogICAgIH0KIAotICAgIEZvbnRNZXRyaWNzJiBmb250TWV0cmljcyA9IGZvbnREYXRhLT5m
b250TWV0cmljcygpOworICAgIEZvbnRNZXRyaWNzJiBmb250TWV0cmljcyA9IGZvbnQtPmZvbnRN
ZXRyaWNzKCk7CiAgICAgZm9udE1ldHJpY3Muc2V0VW5pdHNQZXJFbSh1bml0c1BlckVtKTsKICAg
ICBmb250TWV0cmljcy5zZXRBc2NlbnQoYXNjZW50KTsKICAgICBmb250TWV0cmljcy5zZXREZXNj
ZW50KGRlc2NlbnQpOwpAQCAtOTEsMjUgKzkxLDI1IEBAIHZvaWQgU1ZHRm9udERhdGE6OmluaXRp
YWxpemVGb250RGF0YShTaW0KICAgICBmb250TWV0cmljcy5zZXRYSGVpZ2h0KHhIZWlnaHQpOwog
CiAgICAgaWYgKCFnbHlwaFBhZ2VaZXJvKSB7Ci0gICAgICAgIGZvbnREYXRhLT5zZXRTcGFjZUds
eXBoKDApOwotICAgICAgICBmb250RGF0YS0+c2V0U3BhY2VXaWR0aHMoMCk7Ci0gICAgICAgIGZv
bnREYXRhLT5zZXRBdmdDaGFyV2lkdGgoMCk7Ci0gICAgICAgIGZvbnREYXRhLT5zZXRNYXhDaGFy
V2lkdGgoYXNjZW50KTsKKyAgICAgICAgZm9udC0+c2V0U3BhY2VHbHlwaCgwKTsKKyAgICAgICAg
Zm9udC0+c2V0U3BhY2VXaWR0aHMoMCk7CisgICAgICAgIGZvbnQtPnNldEF2Z0NoYXJXaWR0aCgw
KTsKKyAgICAgICAgZm9udC0+c2V0TWF4Q2hhcldpZHRoKGFzY2VudCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKICAgICAvLyBDYWxjdWxhdGUgc3BhY2Ugd2lkdGguCiAgICAgR2x5cGggc3Bh
Y2VHbHlwaCA9IGdseXBoUGFnZVplcm8tPmdseXBoRGF0YUZvckNoYXJhY3RlcignICcpLmdseXBo
OwotICAgIGZvbnREYXRhLT5zZXRTcGFjZUdseXBoKHNwYWNlR2x5cGgpOwotICAgIGZvbnREYXRh
LT5zZXRTcGFjZVdpZHRocyhmb250RGF0YS0+d2lkdGhGb3JHbHlwaChzcGFjZUdseXBoKSk7Cisg
ICAgZm9udC0+c2V0U3BhY2VHbHlwaChzcGFjZUdseXBoKTsKKyAgICBmb250LT5zZXRTcGFjZVdp
ZHRocyhmb250LT53aWR0aEZvckdseXBoKHNwYWNlR2x5cGgpKTsKIAogICAgIC8vIEVzdGltYXRl
IGF2ZXJhZ2UgY2hhcmFjdGVyIHdpZHRoLgogICAgIEdseXBoIG51bWVyYWxaZXJvR2x5cGggPSBn
bHlwaFBhZ2VaZXJvLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoJzAnKS5nbHlwaDsKLSAgICBmb250
RGF0YS0+c2V0QXZnQ2hhcldpZHRoKG51bWVyYWxaZXJvR2x5cGggPyBmb250RGF0YS0+d2lkdGhG
b3JHbHlwaChudW1lcmFsWmVyb0dseXBoKSA6IGZvbnREYXRhLT5zcGFjZVdpZHRoKCkpOworICAg
IGZvbnQtPnNldEF2Z0NoYXJXaWR0aChudW1lcmFsWmVyb0dseXBoID8gZm9udC0+d2lkdGhGb3JH
bHlwaChudW1lcmFsWmVyb0dseXBoKSA6IGZvbnQtPnNwYWNlV2lkdGgoKSk7CiAKICAgICAvLyBF
c3RpbWF0ZSBtYXhpbXVtIGNoYXJhY3RlciB3aWR0aC4KICAgICBHbHlwaCBsZXR0ZXJXR2x5cGgg
PSBnbHlwaFBhZ2VaZXJvLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoJ1cnKS5nbHlwaDsKLSAgICBm
b250RGF0YS0+c2V0TWF4Q2hhcldpZHRoKGxldHRlcldHbHlwaCA/IGZvbnREYXRhLT53aWR0aEZv
ckdseXBoKGxldHRlcldHbHlwaCkgOiBhc2NlbnQpOworICAgIGZvbnQtPnNldE1heENoYXJXaWR0
aChsZXR0ZXJXR2x5cGggPyBmb250LT53aWR0aEZvckdseXBoKGxldHRlcldHbHlwaCkgOiBhc2Nl
bnQpOwogfQogCiBmbG9hdCBTVkdGb250RGF0YTo6d2lkdGhGb3JTVkdHbHlwaChHbHlwaCBnbHlw
aCwgZmxvYXQgZm9udFNpemUpIGNvbnN0CkBAIC0yMDgsMTAgKzIwOCwxMCBAQCBib29sIFNWR0Zv
bnREYXRhOjphcHBseVNWR0dseXBoU2VsZWN0aW9uCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1i
b29sIFNWR0ZvbnREYXRhOjpmaWxsU1ZHR2x5cGhQYWdlKEdseXBoUGFnZSogcGFnZVRvRmlsbCwg
dW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIsIHVuc2lnbmVk
IGJ1ZmZlckxlbmd0aCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKSBjb25zdAorYm9v
bCBTVkdGb250RGF0YTo6ZmlsbFNWR0dseXBoUGFnZShHbHlwaFBhZ2UqIHBhZ2VUb0ZpbGwsIHVu
c2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBi
dWZmZXJMZW5ndGgsIGNvbnN0IEZvbnQqIGZvbnQpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGZvbnRE
YXRhLT5pc0N1c3RvbUZvbnQoKSk7Ci0gICAgQVNTRVJUKGZvbnREYXRhLT5pc1NWR0ZvbnQoKSk7
CisgICAgQVNTRVJUKGZvbnQtPmlzQ3VzdG9tRm9udCgpKTsKKyAgICBBU1NFUlQoZm9udC0+aXNT
VkdGb250KCkpOwogCiAgICAgU1ZHRm9udEZhY2VFbGVtZW50KiBmb250RmFjZUVsZW1lbnQgPSB0
aGlzLT5zdmdGb250RmFjZUVsZW1lbnQoKTsKICAgICBBU1NFUlQoZm9udEZhY2VFbGVtZW50KTsK
QEAgLTIyMCwxMyArMjIwLDEzIEBAIGJvb2wgU1ZHRm9udERhdGE6OmZpbGxTVkdHbHlwaFBhZ2Uo
R2x5cGgKICAgICBBU1NFUlQoZm9udEVsZW1lbnQpOwogCiAgICAgaWYgKGJ1ZmZlckxlbmd0aCA9
PSBsZW5ndGgpCi0gICAgICAgIHJldHVybiBmaWxsQk1QR2x5cGhzKGZvbnRFbGVtZW50LCBwYWdl
VG9GaWxsLCBvZmZzZXQsIGxlbmd0aCwgYnVmZmVyLCBmb250RGF0YSk7CisgICAgICAgIHJldHVy
biBmaWxsQk1QR2x5cGhzKGZvbnRFbGVtZW50LCBwYWdlVG9GaWxsLCBvZmZzZXQsIGxlbmd0aCwg
YnVmZmVyLCBmb250KTsKIAogICAgIEFTU0VSVChidWZmZXJMZW5ndGggPT0gMiAqIGxlbmd0aCk7
Ci0gICAgcmV0dXJuIGZpbGxOb25CTVBHbHlwaHMoZm9udEVsZW1lbnQsIHBhZ2VUb0ZpbGwsIG9m
ZnNldCwgbGVuZ3RoLCBidWZmZXIsIGZvbnREYXRhKTsKKyAgICByZXR1cm4gZmlsbE5vbkJNUEds
eXBocyhmb250RWxlbWVudCwgcGFnZVRvRmlsbCwgb2Zmc2V0LCBsZW5ndGgsIGJ1ZmZlciwgZm9u
dCk7CiB9CiAKLWJvb2wgU1ZHRm9udERhdGE6OmZpbGxCTVBHbHlwaHMoU1ZHRm9udEVsZW1lbnQq
IGZvbnRFbGVtZW50LCBHbHlwaFBhZ2UqIHBhZ2VUb0ZpbGwsIHVuc2lnbmVkIG9mZnNldCwgdW5z
aWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERh
dGEpIGNvbnN0Citib29sIFNWR0ZvbnREYXRhOjpmaWxsQk1QR2x5cGhzKFNWR0ZvbnRFbGVtZW50
KiBmb250RWxlbWVudCwgR2x5cGhQYWdlKiBwYWdlVG9GaWxsLCB1bnNpZ25lZCBvZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgY29uc3QgRm9udCogZm9udCkgY29uc3QKIHsK
ICAgICBib29sIGhhdmVHbHlwaHMgPSBmYWxzZTsKICAgICBWZWN0b3I8U1ZHR2x5cGg+IGdseXBo
czsKQEAgLTI0MywxNCArMjQzLDE0IEBAIGJvb2wgU1ZHRm9udERhdGE6OmZpbGxCTVBHbHlwaHMo
U1ZHRm9udEUKICAgICAgICAgLy8gY2FyZSBvZiBtYXRjaGluZyB0byB0aGUgY29ycmVjdCBnbHlw
aCwgaWYgbXVsdGlwbGUgb25lcyBhcmUgYXZhaWxhYmxlLCBhcyB0aGF0J3MKICAgICAgICAgLy8g
b25seSBwb3NzaWJsZSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYSBzdHJpbmcgKGVnLiBhcmFiaWMg
Zm9ybSBtYXRjaGluZykuCiAgICAgICAgIGhhdmVHbHlwaHMgPSB0cnVlOwotICAgICAgICBwYWdl
VG9GaWxsLT5zZXRHbHlwaERhdGFGb3JJbmRleChvZmZzZXQgKyBpLCBnbHlwaHMuZmlyc3QoKS50
YWJsZUVudHJ5LCBmb250RGF0YSk7CisgICAgICAgIHBhZ2VUb0ZpbGwtPnNldEdseXBoRGF0YUZv
ckluZGV4KG9mZnNldCArIGksIGdseXBocy5maXJzdCgpLnRhYmxlRW50cnksIGZvbnQpOwogICAg
ICAgICBnbHlwaHMuY2xlYXIoKTsKICAgICB9CiAKICAgICByZXR1cm4gaGF2ZUdseXBoczsKIH0K
IAotYm9vbCBTVkdGb250RGF0YTo6ZmlsbE5vbkJNUEdseXBocyhTVkdGb250RWxlbWVudCogZm9u
dEVsZW1lbnQsIEdseXBoUGFnZSogcGFnZVRvRmlsbCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25l
ZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSkg
Y29uc3QKK2Jvb2wgU1ZHRm9udERhdGE6OmZpbGxOb25CTVBHbHlwaHMoU1ZHRm9udEVsZW1lbnQq
IGZvbnRFbGVtZW50LCBHbHlwaFBhZ2UqIHBhZ2VUb0ZpbGwsIHVuc2lnbmVkIG9mZnNldCwgdW5z
aWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCBjb25zdCBGb250KiBmb250KSBjb25zdAogewog
ICAgIGJvb2wgaGF2ZUdseXBocyA9IGZhbHNlOwogICAgIFZlY3RvcjxTVkdHbHlwaD4gZ2x5cGhz
OwpAQCAtMjY4LDcgKzI2OCw3IEBAIGJvb2wgU1ZHRm9udERhdGE6OmZpbGxOb25CTVBHbHlwaHMo
U1ZHRm8KICAgICAgICAgLy8gY2FyZSBvZiBtYXRjaGluZyB0byB0aGUgY29ycmVjdCBnbHlwaCwg
aWYgbXVsdGlwbGUgb25lcyBhcmUgYXZhaWxhYmxlLCBhcyB0aGF0J3MKICAgICAgICAgLy8gb25s
eSBwb3NzaWJsZSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYSBzdHJpbmcgKGVnLiBhcmFiaWMgZm9y
bSBtYXRjaGluZykuCiAgICAgICAgIGhhdmVHbHlwaHMgPSB0cnVlOwotICAgICAgICBwYWdlVG9G
aWxsLT5zZXRHbHlwaERhdGFGb3JJbmRleChvZmZzZXQgKyBpLCBnbHlwaHMuZmlyc3QoKS50YWJs
ZUVudHJ5LCBmb250RGF0YSk7CisgICAgICAgIHBhZ2VUb0ZpbGwtPnNldEdseXBoRGF0YUZvcklu
ZGV4KG9mZnNldCArIGksIGdseXBocy5maXJzdCgpLnRhYmxlRW50cnksIGZvbnQpOwogICAgICAg
ICBnbHlwaHMuY2xlYXIoKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
b250RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RGF0YS5o
CShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udERhdGEuaAko
d29ya2luZyBjb3B5KQpAQCAtMjEsMjEgKzIxLDIxIEBACiAjZGVmaW5lIFNWR0ZvbnREYXRhX2gK
IAogI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKKyNp
bmNsdWRlICJGb250LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU1ZHRm9udEVs
ZW1lbnQ7CiBjbGFzcyBTVkdGb250RmFjZUVsZW1lbnQ7CiAKLWNsYXNzIFNWR0ZvbnREYXRhIDog
cHVibGljIFNpbXBsZUZvbnREYXRhOjpTVkdEYXRhIHsKK2NsYXNzIFNWR0ZvbnREYXRhIDogcHVi
bGljIEZvbnQ6OlNWR0RhdGEgewogcHVibGljOgogICAgIGV4cGxpY2l0IFNWR0ZvbnREYXRhKFNW
R0ZvbnRGYWNlRWxlbWVudCopOwogICAgIHZpcnR1YWwgflNWR0ZvbnREYXRhKCkgeyB9CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZUZvbnREYXRhKFNpbXBsZUZvbnREYXRhKiwgZmxvYXQg
Zm9udFNpemUpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplRm9udChGb250
KiwgZmxvYXQgZm9udFNpemUpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgZmxvYXQgd2lkdGhGb3JT
VkdHbHlwaChHbHlwaCwgZmxvYXQgZm9udFNpemUpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1
YWwgYm9vbCBmaWxsU1ZHR2x5cGhQYWdlKEdseXBoUGFnZSosIHVuc2lnbmVkIG9mZnNldCwgdW5z
aWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0
IFNpbXBsZUZvbnREYXRhKikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGZpbGxT
VkdHbHlwaFBhZ2UoR2x5cGhQYWdlKiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgs
IFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgRm9udCopIGNvbnN0
IG92ZXJyaWRlOwogCiAgICAgYm9vbCBhcHBseVNWR0dseXBoU2VsZWN0aW9uKFdpZHRoSXRlcmF0
b3ImLCBHbHlwaERhdGEmLCBib29sIG1pcnJvciwgaW50IGN1cnJlbnRDaGFyYWN0ZXIsIHVuc2ln
bmVkJiBhZHZhbmNlTGVuZ3RoLCBTdHJpbmcmIG5vcm1hbGl6ZWRTcGFjZXNTdHJpbmdDYWNoZSkg
Y29uc3Q7CiAKQEAgLTUwLDggKzUwLDggQEAgcHVibGljOgogICAgIGZsb2F0IHZlcnRpY2FsQWR2
YW5jZVkoKSBjb25zdCB7IHJldHVybiBtX3ZlcnRpY2FsQWR2YW5jZVk7IH0KIAogcHJpdmF0ZToK
LSAgICBib29sIGZpbGxCTVBHbHlwaHMoU1ZHRm9udEVsZW1lbnQqLCBHbHlwaFBhZ2UqICwgdW5z
aWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIsIGNvbnN0IFNpbXBs
ZUZvbnREYXRhKikgY29uc3Q7Ci0gICAgYm9vbCBmaWxsTm9uQk1QR2x5cGhzKFNWR0ZvbnRFbGVt
ZW50KiwgR2x5cGhQYWdlKiAsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hh
ciogYnVmZmVyLCBjb25zdCBTaW1wbGVGb250RGF0YSopIGNvbnN0OworICAgIGJvb2wgZmlsbEJN
UEdseXBocyhTVkdGb250RWxlbWVudCosIEdseXBoUGFnZSogLCB1bnNpZ25lZCBvZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgY29uc3QgRm9udCopIGNvbnN0OworICAgIGJv
b2wgZmlsbE5vbkJNUEdseXBocyhTVkdGb250RWxlbWVudCosIEdseXBoUGFnZSogLCB1bnNpZ25l
ZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgY29uc3QgRm9udCopIGNv
bnN0OwogCiAgICAgYm9vbCBhcHBseVRyYW5zZm9ybXMoR2x5cGhCdWZmZXJHbHlwaCosIEdseXBo
QnVmZmVyQWR2YW5jZSosIHNpemVfdCwgVHlwZXNldHRpbmdGZWF0dXJlcykgY29uc3QgPSBkZWxl
dGU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RWxlbWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RWxlbWVudC5oCShyZXZpc2lvbiAxNzg4
NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEVsZW1lbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtNzYsNyArNzYsNyBAQCBwdWJsaWM6CiAgICAgZmxvYXQgaG9yaXpvbnRhbEtlcm5pbmdG
b3JQYWlyT2ZTdHJpbmdzQW5kR2x5cGhzKGNvbnN0IFN0cmluZyYgdTEsIGNvbnN0IFN0cmluZyYg
ZzEsIGNvbnN0IFN0cmluZyYgdTIsIGNvbnN0IFN0cmluZyYgZzIpIGNvbnN0OwogICAgIGZsb2F0
IHZlcnRpY2FsS2VybmluZ0ZvclBhaXJPZlN0cmluZ3NBbmRHbHlwaHMoY29uc3QgU3RyaW5nJiB1
MSwgY29uc3QgU3RyaW5nJiBnMSwgY29uc3QgU3RyaW5nJiB1MiwgY29uc3QgU3RyaW5nJiBnMikg
Y29uc3Q7CiAKLSAgICAvLyBVc2VkIGJ5IFNpbXBsZUZvbnREYXRhL1dpZHRoSXRlcmF0b3IuCisg
ICAgLy8gVXNlZCBieSBGb250L1dpZHRoSXRlcmF0b3IuCiAgICAgU1ZHR2x5cGggc3ZnR2x5cGhG
b3JHbHlwaChHbHlwaCk7CiAgICAgR2x5cGggbWlzc2luZ0dseXBoKCk7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysg
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTI3LDggKzkyNyw4IEBAIHZvaWQgV2ViUHJvY2Vzczo6Z2V0V2ViQ29yZVN0YXRpc3RpY3Mo
dWkKICAgICBkYXRhLnN0YXRpc3RpY3NOdW1iZXJzLnNldChBU0NJSUxpdGVyYWwoIkljb25zV2l0
aERhdGFDb3VudCIpLCBpY29uRGF0YWJhc2UoKS5pY29uUmVjb3JkQ291bnRXaXRoRGF0YSgpKTsK
ICAgICAKICAgICAvLyBHYXRoZXIgZm9udCBzdGF0aXN0aWNzLgotICAgIGRhdGEuc3RhdGlzdGlj
c051bWJlcnMuc2V0KEFTQ0lJTGl0ZXJhbCgiQ2FjaGVkRm9udERhdGFDb3VudCIpLCBmb250Q2Fj
aGUoKS5mb250RGF0YUNvdW50KCkpOwotICAgIGRhdGEuc3RhdGlzdGljc051bWJlcnMuc2V0KEFT
Q0lJTGl0ZXJhbCgiQ2FjaGVkRm9udERhdGFJbmFjdGl2ZUNvdW50IiksIGZvbnRDYWNoZSgpLmlu
YWN0aXZlRm9udERhdGFDb3VudCgpKTsKKyAgICBkYXRhLnN0YXRpc3RpY3NOdW1iZXJzLnNldChB
U0NJSUxpdGVyYWwoIkNhY2hlZEZvbnREYXRhQ291bnQiKSwgZm9udENhY2hlKCkuZm9udENvdW50
KCkpOworICAgIGRhdGEuc3RhdGlzdGljc051bWJlcnMuc2V0KEFTQ0lJTGl0ZXJhbCgiQ2FjaGVk
Rm9udERhdGFJbmFjdGl2ZUNvdW50IiksIGZvbnRDYWNoZSgpLmluYWN0aXZlRm9udENvdW50KCkp
OwogICAgIAogICAgIC8vIEdhdGhlciBnbHlwaCBwYWdlIHN0YXRpc3RpY3MuCiAgICAgZGF0YS5z
dGF0aXN0aWNzTnVtYmVycy5zZXQoQVNDSUlMaXRlcmFsKCJHbHlwaFBhZ2VDb3VudCIpLCBHbHlw
aFBhZ2U6OmNvdW50KCkpOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9tYWMvV2ViUG9wdXBNZW51TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYlBvcHVwTWVudU1hYy5tbQkocmV2
aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9tYWMvV2ViUG9wdXBNZW51TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBA
IHZvaWQgV2ViUG9wdXBNZW51OjpzZXRVcFBsYXRmb3JtRGF0YShjb24KIHsKICNpZiBVU0UoQVBQ
S0lUKQogICAgIC8vIEZJWE1FOiBmb250IHdpbGwgYmUgbmlsIGhlcmUgZm9yIGN1c3RvbSBmb250
cywgd2Ugc2hvdWxkIGZpeCB0aGF0LgotICAgIE5TRm9udCAqZm9udCA9IG1fcG9wdXBDbGllbnQt
Pm1lbnVTdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXROU0ZvbnQoKTsKKyAgICBO
U0ZvbnQgKmZvbnQgPSBtX3BvcHVwQ2xpZW50LT5tZW51U3R5bGUoKS5mb250KCkucHJpbWFyeUZv
bnQoKS5nZXROU0ZvbnQoKTsKICAgICBpZiAoIWZvbnQpCiAgICAgICAgIHJldHVybjsKICAgICAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dl
YlBhZ2VJT1MubW0JKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTc5MCw4ICsx
NzkwLDggQEAgdm9pZCBXZWJQYWdlOjpyZXF1ZXN0QXV0b2NvcnJlY3Rpb25EYXRhKAogCiAgICAg
Ym9vbCBtdWx0aXBsZUZvbnRzID0gZmFsc2U7CiAgICAgQ1RGb250UmVmIGZvbnQgPSBuaWw7Ci0g
ICAgaWYgKGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSA9IGZyYW1lLmVkaXRvcigpLmZv
bnRGb3JTZWxlY3Rpb24obXVsdGlwbGVGb250cykpCi0gICAgICAgIGZvbnQgPSBmb250RGF0YS0+
Z2V0Q1RGb250KCk7CisgICAgaWYgKGF1dG8qIGNvcmVGb250ID0gZnJhbWUuZWRpdG9yKCkuZm9u
dEZvclNlbGVjdGlvbihtdWx0aXBsZUZvbnRzKSkKKyAgICAgICAgZm9udCA9IGNvcmVGb250LT5n
ZXRDVEZvbnQoKTsKIAogICAgIENHRmxvYXQgZm9udFNpemUgPSBDVEZvbnRHZXRTaXplKGZvbnQp
OwogICAgIHVpbnQ2NF90IGZvbnRUcmFpdHMgPSBDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhmb250
KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbQko
cmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDb3JlU3RhdGlz
dGljcy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDEyICsxNDcsMTIgQEAgKyAoc2l6ZV90KWlj
b25zV2l0aERhdGFDb3VudAogCiArIChzaXplX3QpY2FjaGVkRm9udERhdGFDb3VudAogewotICAg
IHJldHVybiBmb250Q2FjaGUoKS5mb250RGF0YUNvdW50KCk7CisgICAgcmV0dXJuIGZvbnRDYWNo
ZSgpLmZvbnRDb3VudCgpOwogfQogCiArIChzaXplX3QpY2FjaGVkRm9udERhdGFJbmFjdGl2ZUNv
dW50CiB7Ci0gICAgcmV0dXJuIGZvbnRDYWNoZSgpLmluYWN0aXZlRm9udERhdGFDb3VudCgpOwor
ICAgIHJldHVybiBmb250Q2FjaGUoKS5pbmFjdGl2ZUZvbnRDb3VudCgpOwogfQogCiArICh2b2lk
KXB1cmdlSW5hY3RpdmVGb250RGF0YQpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1
cHBvcnQvUG9wdXBNZW51TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dl
YkNvcmVTdXBwb3J0L1BvcHVwTWVudU1hYy5tbQkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNl
L1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvUG9wdXBNZW51TWFjLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCwxMSArMjgsMTEgQEAKICNpbXBvcnQgPFdlYkNvcmUvQ2hyb21lLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL0Nocm9tZUNsaWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9FdmVudEhhbmRsZXIu
aD4KKyNpbXBvcnQgPFdlYkNvcmUvRm9udC5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5oPgog
I2ltcG9ydCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGFnZS5oPgog
I2ltcG9ydCA8V2ViQ29yZS9Qb3B1cE1lbnVDbGllbnQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvU2lt
cGxlRm9udERhdGEuaD4KICNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZVN5c3RlbUludGVyZmFjZS5o
PgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTgxLDkgKzgxLDkgQEAgdm9pZCBQb3B1
cE1lbnVNYWM6OnBvcHVsYXRlKCkKICAgICAgICAgUG9wdXBNZW51U3R5bGUgc3R5bGUgPSBtX2Ns
aWVudC0+aXRlbVN0eWxlKGkpOwogICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGljdGlvbmFy
eT4gYXR0cmlidXRlcyA9IGFkb3B0TlMoW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0
XSk7CiAgICAgICAgIGlmIChzdHlsZS5mb250KCkgIT0gRm9udENhc2NhZGUoKSkgewotICAgICAg
ICAgICAgTlNGb250ICpmb250ID0gc3R5bGUuZm9udCgpLnByaW1hcnlGb250RGF0YSgpLmdldE5T
Rm9udCgpOworICAgICAgICAgICAgTlNGb250ICpmb250ID0gc3R5bGUuZm9udCgpLnByaW1hcnlG
b250KCkuZ2V0TlNGb250KCk7CiAgICAgICAgICAgICBpZiAoIWZvbnQpIHsKLSAgICAgICAgICAg
ICAgICBDR0Zsb2F0IHNpemUgPSBzdHlsZS5mb250KCkucHJpbWFyeUZvbnREYXRhKCkucGxhdGZv
cm1EYXRhKCkuc2l6ZSgpOworICAgICAgICAgICAgICAgIENHRmxvYXQgc2l6ZSA9IHN0eWxlLmZv
bnQoKS5wcmltYXJ5Rm9udCgpLnBsYXRmb3JtRGF0YSgpLnNpemUoKTsKICAgICAgICAgICAgICAg
ICBmb250ID0gc3R5bGUuZm9udCgpLndlaWdodCgpIDwgRm9udFdlaWdodEJvbGQgPyBbTlNGb250
IHN5c3RlbUZvbnRPZlNpemU6c2l6ZV0gOiBbTlNGb250IGJvbGRTeXN0ZW1Gb250T2ZTaXplOnNp
emVdOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgW2F0dHJpYnV0ZXMgc2V0T2JqZWN0OmZv
bnQgZm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVdOwpAQCAtMTQ4LDcgKzE0OCw3IEBAIHZvaWQg
UG9wdXBNZW51TWFjOjpzaG93KGNvbnN0IEludFJlY3QmIHIKICAgICBOU01lbnUqIG1lbnUgPSBb
bV9wb3B1cCBtZW51XTsKICAgICAKICAgICBOU1BvaW50IGxvY2F0aW9uOwotICAgIE5TRm9udCog
Zm9udCA9IG1fY2xpZW50LT5tZW51U3R5bGUoKS5mb250KCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0
TlNGb250KCk7CisgICAgTlNGb250KiBmb250ID0gbV9jbGllbnQtPm1lbnVTdHlsZSgpLmZvbnQo
KS5wcmltYXJ5Rm9udCgpLmdldE5TRm9udCgpOwogCiAgICAgLy8gVGhlc2UgdmFsdWVzIHdlcmUg
Ym9ycm93ZWQgZnJvbSBBcHBLaXQgdG8gbWF0Y2ggdGhlaXIgcGxhY2VtZW50IG9mIHRoZSBtZW51
LgogICAgIGNvbnN0IGludCBwb3BPdmVySG9yaXpvbnRhbEFkanVzdCA9IC0xMDsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQkocmV2aXNpb24gMTc4ODU3KQor
KysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQkod29ya2luZyBjb3B5
KQpAQCAtOTIsNiArOTIsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9FeGNlcHRpb25IYW5kbGVycy5o
PgogI2ltcG9ydCA8V2ViQ29yZS9GbG9hdFJlY3QuaD4KICNpbXBvcnQgPFdlYkNvcmUvRm9jdXND
b250cm9sbGVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL0ZvbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUv
Rm9udENhY2hlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L0ZyYW1lTG9hZGVyLmg+CkBAIC0xMTIsNyArMTEzLDYgQEAKICNpbXBvcnQgPFdlYkNvcmUvUmVu
ZGVyV2lkZ2V0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1J1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5o
PgogI2ltcG9ydCA8V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvU2lt
cGxlRm9udERhdGEuaD4KICNpbXBvcnQgPFdlYkNvcmUvU3R5bGVQcm9wZXJ0aWVzLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL1RleHQuaD4KICNpbXBvcnQgPFdlYkNvcmUvVGV4dEFsdGVybmF0aXZlV2l0
aFJhbmdlLmg+CkBAIC00ODc4LDggKzQ4NzgsOCBAQCBzdGF0aWMgTlNTdHJpbmcgKmZvbnROYW1l
Rm9yRGVzY3JpcHRpb24oCiAgICAgZm9udERlc2NyaXB0aW9uLnNldElzSXRhbGljKGl0YWxpYyk7
CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFdlaWdodChib2xkID8gRm9udFdlaWdodDkwMCA6IEZv
bnRXZWlnaHQ1MDApOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKHBvaW50
U2l6ZSk7Ci0gICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBzaW1wbGVGb250RGF0YSA9IGZvbnRD
YWNoZSgpLmZvbnRGb3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCBmYW1pbHlOYW1lKTsKLSAgICBy
ZXR1cm4gW3NpbXBsZUZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5uc0ZvbnQoKSBmb250TmFtZV07
CisgICAgUmVmUHRyPEZvbnQ+IGZvbnQgPSBmb250Q2FjaGUoKS5mb250Rm9yRmFtaWx5KGZvbnRE
ZXNjcmlwdGlvbiwgZmFtaWx5TmFtZSk7CisgICAgcmV0dXJuIFtmb250LT5wbGF0Zm9ybURhdGEo
KS5uc0ZvbnQoKSBmb250TmFtZV07CiB9CiAKIC0gKHZvaWQpX2FkZFRvU3R5bGU6KERPTUNTU1N0
eWxlRGVjbGFyYXRpb24gKilzdHlsZSBmb250QTooTlNGb250ICopYSBmb250QjooTlNGb250ICop
YgpAQCAtNTQ0Miw3ICs1NDQyLDcgQEAgLSAodm9pZClfdXBkYXRlRm9udFBhbmVsCiAgICAgYm9v
bCBtdWx0aXBsZUZvbnRzID0gZmFsc2U7CiAgICAgTlNGb250ICpmb250ID0gbmlsOwogICAgIGlm
IChGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkgewotICAgICAgICBpZiAo
Y29uc3QgU2ltcGxlRm9udERhdGEqIGZkID0gY29yZUZyYW1lLT5lZGl0b3IoKS5mb250Rm9yU2Vs
ZWN0aW9uKG11bHRpcGxlRm9udHMpKQorICAgICAgICBpZiAoY29uc3QgRm9udCogZmQgPSBjb3Jl
RnJhbWUtPmVkaXRvcigpLmZvbnRGb3JTZWxlY3Rpb24obXVsdGlwbGVGb250cykpCiAgICAgICAg
ICAgICBmb250ID0gZmQtPmdldE5TRm9udCgpOwogICAgIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245147</attachid>
            <date>2015-01-22 10:40:54 -0800</date>
            <delta_ts>2015-01-22 10:58:19 -0800</delta_ts>
            <desc>another</desc>
            <filename>simplefontdata-rename-7.patch</filename>
            <type>text/plain</type>
            <size>379261</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDE1LTAxLTIxICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgU2ltcGxlRm9udERh
dGEgdG8gRm9udAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTQwNDk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhlIGZhbGxiYWNrIHN1cHBvcnRpbmcgRm9udCB0eXBlIHdhcyByZW5hbWVkIEZvbnRDYXNj
YWRlLgorICAgICAgICBXZSBjYW4gbm93IHJlbmFtZSBTaW1wbGVGb250RGF0YSB0byBqdXN0IEZv
bnQgbWF0Y2hpbmcgdGhlIHVzdWFsIGRlZmluaXRpb24uCisKIDIwMTUtMDEtMjEgIEJlbmphbWlu
IFBvdWxhaW4gIDxiZW5qYW1pbkB3ZWJraXQub3JnPgogCiAgICAgICAgIEhhbmRsZSB0aGUgdHJh
bnNpdGlvbiBvbiBhbnkgY2hhcmFjdGVyIGFzIGEgc2VwYXJhdGUgdHlwZSBvZiB0cmFuc2l0aW9u
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dl
YkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTIwNTQsNiArMjA1NCw3IEBA
IHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3Bw
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSb3VuZGVkUmVjdC5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9GbG9hdFNpemUuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhc2NhZGUuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERlc2NyaXB0aW9u
LmNwcApAQCAtMjA4OSw3ICsyMDkwLDYgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL1JvdW5kZWRSZWN0LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1NWR0ds
eXBoLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCi0gICAgcGxhdGZv
cm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvU3Ry
aW5nVHJ1bmNhdG9yLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1N1cnJvZ2F0ZVBhaXJBd2Fy
ZVRleHRJdGVyYXRvci5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVuLmNwcApJbmRl
eDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC00NjksNyArNDY5LDYgQEAgX19aTjdX
ZWJDb3JlMTRTZWN1cml0eVBvbGljeTIyZ2VuZXJhdGVSZQogX19aTjdXZWJDb3JlMTRTZWN1cml0
eVBvbGljeTI3cmVzZXRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RzRXYKIF9fWk43V2ViQ29yZTE0U2Vj
dXJpdHlQb2xpY3kyOWFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5RVJLTlNfMTRTZWN1cml0
eU9yaWdpbkVSS04zV1RGNlN0cmluZ0VTN19iCiBfX1pON1dlYkNvcmUxNFNlY3VyaXR5UG9saWN5
MzJyZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeUVSS05TXzE0U2VjdXJpdHlPcmlnaW5F
UktOM1dURjZTdHJpbmdFUzdfYgotX19aTjdXZWJDb3JlMTRTaW1wbGVGb250RGF0YUQxRXYKIF9f
Wk43V2ViQ29yZTE0U3ViZnJhbWVMb2FkZXIxMmFsbG93UGx1Z2luc0VOU18yOFJlYXNvbkZvckNh
bGxpbmdBbGxvd1BsdWdpbnNFCiBfX1pON1dlYkNvcmUxNFRpbGVDb250cm9sbGVyMTRzZXRUaWxl
c09wYXF1ZUViCiBfX1pON1dlYkNvcmUxNFRpbGVDb250cm9sbGVyMTVjb250YWluZXJMYXllcnNF
dgpAQCAtMTE3OSw2ICsxMTc4LDcgQEAgX19aTjdXZWJDb3JlNDBkZWZhdWx0VGV4dEVuY29kaW5n
TmFtZUZvcgogX19aTjdXZWJDb3JlNDByZXN0cmljdE1pbmltdW1TY2FsZUZhY3RvclRvVmlld3Bv
cnRTaXplRVJOU18xOFZpZXdwb3J0QXR0cmlidXRlc0VOU183SW50U2l6ZUVmCiBfX1pON1dlYkNv
cmU0MlVSTEJ5VHJ1bmNhdGluZ09uZUNoYXJhY3RlckJlZm9yZUNvbXBvbmVudEVQNU5TVVJMMThD
RlVSTENvbXBvbmVudFR5cGUKIF9fWk43V2ViQ29yZTQ3YXR0cmlidXRlZFN0cmluZ0J5U3RyaXBw
aW5nQXR0YWNobWVudENoYXJhY3RlcnNFUDE4TlNBdHRyaWJ1dGVkU3RyaW5nCitfX1pON1dlYkNv
cmU0Rm9udEQxRXYKIF9fWk43V2ViQ29yZTRJY29uMThjcmVhdGVJY29uRm9yRmlsZXNFUktOM1dU
RjZWZWN0b3JJTlMxXzZTdHJpbmdFTG0wRU5TMV8xNUNyYXNoT25PdmVyZmxvd0VFRQogX19aTjdX
ZWJDb3JlNEljb25EMUV2CiBfX1pON1dlYkNvcmU0Tm9kZTEwcmVuZGVyUmVjdEVQYgpAQCAtMTQ5
MiwxMSArMTQ5MiwxMSBAQCBfX1pON1dlYkNvcmU5RmxvYXRSZWN0QzFFUktOU183SW50UmVjdEUK
IF9fWk43V2ViQ29yZTlGbG9hdFNpemVDMUVSSzZDR1NpemUKIF9fWk43V2ViQ29yZTlGbG9hdFNp
emVDMUVSS05TXzdJbnRTaXplRQogX19aTjdXZWJDb3JlOUZvbnRDYWNoZTEwaW52YWxpZGF0ZUV2
Ci1fX1pON1dlYkNvcmU5Rm9udENhY2hlMTNmb250RGF0YUNvdW50RXYKIF9fWk43V2ViQ29yZTlG
b250Q2FjaGUxM2ZvbnRGb3JGYW1pbHlFUktOU18xNUZvbnREZXNjcmlwdGlvbkVSS04zV1RGMTJB
dG9taWNTdHJpbmdFYgotX19aTjdXZWJDb3JlOUZvbnRDYWNoZTIxaW5hY3RpdmVGb250RGF0YUNv
dW50RXYKK19fWk43V2ViQ29yZTlGb250Q2FjaGUxN2luYWN0aXZlRm9udENvdW50RXYKIF9fWk43
V2ViQ29yZTlGb250Q2FjaGUyMXB1cmdlSW5hY3RpdmVGb250RGF0YUVpCiBfX1pON1dlYkNvcmU5
Rm9udENhY2hlMjlwdXJnZUluYWN0aXZlRm9udERhdGFJZk5lZWRlZEV2CitfX1pON1dlYkNvcmU5
Rm9udENhY2hlOWZvbnRDb3VudEV2CiBfX1pON1dlYkNvcmU5RnJhbWVUcmVlMTFhcHBlbmRDaGls
ZEVOM1dURjEwUGFzc1JlZlB0cklOU181RnJhbWVFRUUKIF9fWk43V2ViQ29yZTlGcmFtZVRyZWU3
c2V0TmFtZUVSS04zV1RGMTJBdG9taWNTdHJpbmdFCiBfX1pON1dlYkNvcmU5RnJhbWVUcmVlOWNs
ZWFyTmFtZUV2CkBAIC0xNjM0LDggKzE2MzQsOCBAQCBfX1pOSzNXVEY2U3RyaW5nMTRjcmVhdGVD
RlN0cmluZ0V2CiBfX1pOSzdXZWJDb3JlMTBDcmVkZW50aWFsMTJuc0NyZWRlbnRpYWxFdgogX19a
Tks3V2ViQ29yZTEwQ3JlZGVudGlhbDdpc0VtcHR5RXYKIF9fWk5LN1dlYkNvcmUxMEZsb2F0UG9p
bnRjdjdDR1BvaW50RXYKLV9fWk5LN1dlYkNvcmUxMEZvbnRSYW5nZXMyMGZvbnREYXRhRm9yQ2hh
cmFjdGVyRWkKLV9fWk5LN1dlYkNvcmUxMEZvbnRSYW5nZXMyMWZvbnREYXRhRm9yRmlyc3RSYW5n
ZUV2CitfX1pOSzdXZWJDb3JlMTBGb250UmFuZ2VzMTZmb250Rm9yQ2hhcmFjdGVyRWkKK19fWk5L
N1dlYkNvcmUxMEZvbnRSYW5nZXMxN2ZvbnRGb3JGaXJzdFJhbmdlRXYKIF9fWk5LN1dlYkNvcmUx
MExheW91dFJlY3Q4Y29udGFpbnNFUktTMF8KIF9fWk5LN1dlYkNvcmUxMFBsdWdpbkRhdGExNnN1
cHBvcnRzTWltZVR5cGVFUktOM1dURjZTdHJpbmdFTlMwXzE4QWxsb3dlZFBsdWdpblR5cGVzRQog
X19aTks3V2ViQ29yZTEwUmVuZGVyVGV4dDE2Zmlyc3RSdW5Mb2NhdGlvbkV2CkBAIC0xNjY1LDcg
KzE2NjUsNyBAQCBfX1pOSzdXZWJDb3JlMTBUaW1lUmFuZ2VzM2VuZEVqUmkKIF9fWk5LN1dlYkNv
cmUxMFRpbWVSYW5nZXM0Y29weUV2CiBfX1pOSzdXZWJDb3JlMTBUaW1lUmFuZ2VzNXN0YXJ0RWpS
aQogX19aTks3V2ViQ29yZTEwVGltZVJhbmdlczZsZW5ndGhFdgotX19aTks3V2ViQ29yZTExRm9u
dENhc2NhZGU1d2lkdGhFUktOU183VGV4dFJ1bkVQTjNXVEY3SGFzaFNldElQS05TXzE0U2ltcGxl
Rm9udERhdGFFTlM0XzdQdHJIYXNoSVM4X0VFTlM0XzEwSGFzaFRyYWl0c0lTOF9FRUVFUE5TXzEz
R2x5cGhPdmVyZmxvd0UKK19fWk5LN1dlYkNvcmUxMUZvbnRDYXNjYWRlNXdpZHRoRVJLTlNfN1Rl
eHRSdW5FUE4zV1RGN0hhc2hTZXRJUEtOU180Rm9udEVOUzRfN1B0ckhhc2hJUzhfRUVOUzRfMTBI
YXNoVHJhaXRzSVM4X0VFRUVQTlNfMTNHbHlwaE92ZXJmbG93RQogX19aTks3V2ViQ29yZTExRm9u
dENhc2NhZGU4ZHJhd1RleHRFUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfN1RleHRSdW5FUktO
U18xMEZsb2F0UG9pbnRFaWlOUzBfMjRDdXN0b21Gb250Tm90UmVhZHlBY3Rpb25FCiBfX1pOSzdX
ZWJDb3JlMTFGb250Q2FzY2FkZWVxRVJLUzBfCiBfX1pOSzdXZWJDb3JlMTFGcmFtZUxvYWRlcjEw
aXNDb21wbGV0ZUV2CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29y
ZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9X
ZWJDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTgwMjcsNiArODAy
Nyw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGbG9h
dFJlY3QuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhp
Y3NcRmxvYXRSb3VuZGVkUmVjdC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxw
bGF0Zm9ybVxncmFwaGljc1xGbG9hdFNpemUuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGb250Q2FjaGUuY3BwIiAvPgogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udENhc2NhZGUuY3BwIiAvPgogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udERlc2NyaXB0aW9u
LmNwcCIgLz4KQEAgLTgwNjksNyArODA3MCw2IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxwbGF0Zm9ybVxncmFwaGljc1xSZWdpb24uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcUm91bmRlZFJlY3QuY3BwIiAvPgogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcU2hhZG93Qmx1ci5jcHAiIC8+Ci0gICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xTaW1wbGVGb250RGF0YS5j
cHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xUZXh0
UnVuLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNz
XFRleHRUcmFja1JlcHJlc2VudGF0aW9uLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXFdPRkZGaWxlRm9ybWF0LmNwcCIgLz4KQEAgLTE5NTE2LDYg
KzE5NTE2LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNz
XEZsb2F0Um91bmRlZFJlY3QuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRm
b3JtXGdyYXBoaWNzXEZsb2F0U2l6ZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cGxhdGZvcm1cZ3JhcGhpY3NcRmxvYXRTaXplSGFzaC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udENhY2hlLmgiIC8+CiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGb250Q2FzY2FkZS5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udERlc2NyaXB0aW9uLmgi
IC8+CkBAIC0xOTU2OCw3ICsxOTU2OSw2IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxw
bGF0Zm9ybVxncmFwaGljc1xSZWdpb24uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHBsYXRmb3JtXGdyYXBoaWNzXFJvdW5kZWRSZWN0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xTaGFkb3dCbHVyLmgiIC8+Ci0gICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xTaW1wbGVGb250RGF0YS5oIiAvPgogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcVGV4dFJ1bi5oIiAvPgog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcVGV4dFRyYWNrUmVw
cmVzZW50YXRpb24uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdy
YXBoaWNzXFVuaXRCZXppZXIuaCIgLz4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtNDcwNSw4ICs0NzA1LDggQEAKIAkJQjJDM0RBNjEwRDAwNkNENjAwRUY2RjI2IC8qIEZv
bnRDYXNjYWRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCMkMzREE1MDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCMkMzREE2MjBEMDA2Q0Q2MDBF
RjZGMjYgLyogRm9udENhY2hlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEIyQzNEQTUxMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FjaGUuY3BwICov
OyB9OwogCQlCMkMzREE2MzBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhY2hlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkMzREE1MjBEMDA2Q0Q2MDBF
RjZGMjYgLyogRm9udENhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKLQkJQjJDM0RBNjQwRDAwNkNENjAwRUY2RjI2IC8qIFNpbXBsZUZvbnREYXRh
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNE
QTUzMEQwMDZDRDYwMEVGNkYyNiAvKiBTaW1wbGVGb250RGF0YS5jcHAgKi87IH07Ci0JCUIyQzNE
QTY1MEQwMDZDRDYwMEVGNkYyNiAvKiBTaW1wbGVGb250RGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBNTQwRDAwNkNENjAwRUY2RjI2IC8q
IFNpbXBsZUZvbnREYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJQjJDM0RBNjQwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBNTMwRDAwNkNENjAw
RUY2RjI2IC8qIEZvbnQuY3BwICovOyB9OworCQlCMkMzREE2NTBEMDA2Q0Q2MDBFRjZGMjYgLyog
Rm9udC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJD
M0RBNTQwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCMkMzREE2NjBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9u
dERlc2NyaXB0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCMkMzREE1NTBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udERlc2NyaXB0aW9uLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjJDM0RBNjcwRDAw
NkNENjAwRUY2RjI2IC8qIEZvbnRHbHlwaHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBNTYwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRHbHlw
aHMuY3BwICovOyB9OwogCQlCMkMzREE2ODBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udEdseXBocy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBNTcw
RDAwNkNENjAwRUY2RjI2IC8qIEZvbnRHbHlwaHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTIwODYsOCArMTIwODYsOCBAQAogCQlCMkMzREE1
MDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEZvbnRDYXNjYWRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUIyQzNEQTUxMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FjaGUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRDYWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUIyQzNEQTUyMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FjaGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRDYWNoZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlCMkMzREE1MzBEMDA2Q0Q2MDBFRjZGMjYgLyogU2ltcGxlRm9udERh
dGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpbXBsZUZvbnRE
YXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjJDM0RBNTQwRDAwNkNENjAw
RUY2RjI2IC8qIFNpbXBsZUZvbnREYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTaW1wbGVGb250RGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCMkMz
REE1MzBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRm9udC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUIy
QzNEQTU0MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBGb250Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQzNEQTU1
MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250RGVzY3JpcHRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEZvbnREZXNjcmlwdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlCMkMzREE1NjBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udEdseXBocy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udEdseXBocy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQzNEQTU3MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250R2x5
cGhzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb250R2x5cGhzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMDU2Myw4ICsyMDU2Myw4IEBACiAJCQkJMzcx
RjRGRkEwRDI1RTdGMzAwRUNFMEQ1IC8qIEZvbnRSYW5nZXMuaCAqLywKIAkJCQkwRjNERDQ0RDEy
RjVFQTFCMDAwRDkxOTAgLyogU2hhZG93Qmx1ci5jcHAgKi8sCiAJCQkJMEYzREQ0NEUxMkY1RUEx
QjAwMEQ5MTkwIC8qIFNoYWRvd0JsdXIuaCAqLywKLQkJCQlCMkMzREE1MzBEMDA2Q0Q2MDBFRjZG
MjYgLyogU2ltcGxlRm9udERhdGEuY3BwICovLAotCQkJCUIyQzNEQTU0MEQwMDZDRDYwMEVGNkYy
NiAvKiBTaW1wbGVGb250RGF0YS5oICovLAorCQkJCUIyQzNEQTUzMEQwMDZDRDYwMEVGNkYyNiAv
KiBGb250LmNwcCAqLywKKwkJCQlCMkMzREE1NDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5oICov
LAogCQkJCUNENjQxRUIyMTgxOEY1RUQwMEVFNEM0MSAvKiBTb3VyY2VCdWZmZXJQcml2YXRlLmgg
Ki8sCiAJCQkJQ0RDOEI1QUMxODA0QUU1RDAwMTZFNjg1IC8qIFNvdXJjZUJ1ZmZlclByaXZhdGVD
bGllbnQuaCAqLywKIAkJCQlCMjM1NDBGMDBEMDA3ODJFMDAyMzgyRkEgLyogU3RyaW5nVHJ1bmNh
dG9yLmNwcCAqLywKQEAgLTI2MDIyLDcgKzI2MDIyLDcgQEAKIAkJCQkxQTRBOTU0RTBCNEVEQ0NC
MDAyRDhDM0MgLyogU2hhcmVkQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0IxRjAyRjEz
QjAyNUQyMDBGNTEwM0YgLyogU2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTkzMzA5RUEzMDk5RUI3OEMwMDU2RTU4MSAvKiBTaGFyZWRUaW1lci5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJQjJDM0RBNjUwRDAwNkNENjAwRUY2RjI2IC8qIFNpbXBsZUZvbnREYXRhLmgg
aW4gSGVhZGVycyAqLywKKwkJCQlCMkMzREE2NTBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRTQ4OTQ0QTMxODBCNTdEODAwRjE2NUQ4IC8qIFNpbXBsZUxpbmVM
YXlvdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0RTlCMTFEMTgxNDU2OUMwMDNBQ0NERiAvKiBT
aW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNEU5QjExOTE4
MTA5MTZGMDAzQUNDREYgLyogU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmggaW4gSGVhZGVycyAq
LywKQEAgLTI5NDU0LDcgKzI5NDU0LDcgQEAKIAkJCQkxQTRBOTU1MjBCNEVEQ0ZGMDAyRDhDM0Mg
LyogU2hhcmVkQnVmZmVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRTQ1MzkwNDYwRUFGRDYz
NzAwMzY5NUM4IC8qIFNoYXJlZFRpbWVySU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlF
QTIwOTlFQjc4QzAwNTZFNTgxIC8qIFNoYXJlZFRpbWVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCi0J
CQkJQjJDM0RBNjQwRDAwNkNENjAwRUY2RjI2IC8qIFNpbXBsZUZvbnREYXRhLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCUIyQzNEQTY0MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTE2M0U4OEY3MTE4QTM5RDIwMEVEOTIzMSAvKiBTaW1wbGVGb250RGF0YUNv
cmVUZXh0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTM3RTY1OTUwMTYzQjEwQzIwMEVCNDU3NCAv
KiBTaW1wbGVGb250RGF0YUlPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUIyQUZGQzdGMEQwMEE1
QzEwMDMwMDc0RCAvKiBTaW1wbGVGb250RGF0YU1hYy5tbSBpbiBTb3VyY2VzICovLApJbmRleDog
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXJJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9p
b3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0JKHJldmlzaW9uIDE3ODg1NykK
KysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVySU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNzU4LDcgKzE3NTgsNyBAQCBzdGF0
aWMgdm9pZCBBWEF0dHJpYnV0ZVN0cmluZ1NldFN0eWxlKE5TCiAgICAgUmVuZGVyU3R5bGUmIHN0
eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7CiAgICAgCiAgICAgLy8gc2V0IGJhc2ljIGZvbnQgaW5m
bwotICAgIEFYQXR0cmlidXRlU3RyaW5nU2V0Rm9udChhdHRyU3RyaW5nLCBzdHlsZS5mb250Q2Fz
Y2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmdldENURm9udCgpLCByYW5nZSk7CisgICAgQVhBdHRy
aWJ1dGVTdHJpbmdTZXRGb250KGF0dHJTdHJpbmcsIHN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFy
eUZvbnQoKS5nZXRDVEZvbnQoKSwgcmFuZ2UpOwogICAgICAgICAgICAgICAgIAogICAgIGludCBk
ZWNvciA9IHN0eWxlLnRleHREZWNvcmF0aW9uc0luRWZmZWN0KCk7CiAgICAgaWYgKChkZWNvciAm
IChUZXh0RGVjb3JhdGlvblVuZGVybGluZSB8IFRleHREZWNvcmF0aW9uTGluZVRocm91Z2gpKSAh
PSAwKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlckJhc2UubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlLm1tCShy
ZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYg
KzQ2LDcgQEAKICNpbXBvcnQgIkNocm9tZUNsaWVudC5oIgogI2ltcG9ydCAiQ29sb3JNYWMuaCIK
ICNpbXBvcnQgIkNvbnRleHRNZW51Q29udHJvbGxlci5oIgorI2ltcG9ydCAiRm9udC5oIgogI2lt
cG9ydCAiRm9udENhc2NhZGUuaCIKICNpbXBvcnQgIkZyYW1lLmgiCiAjaW1wb3J0ICJGcmFtZUxv
YWRlckNsaWVudC5oIgpAQCAtNjMsNyArNjQsNiBAQAogI2ltcG9ydCAiUmVuZGVyVmlldy5oIgog
I2ltcG9ydCAiUmVuZGVyV2lkZ2V0LmgiCiAjaW1wb3J0ICJTY3JvbGxWaWV3LmgiCi0jaW1wb3J0
ICJTaW1wbGVGb250RGF0YS5oIgogI2ltcG9ydCAiVGV4dENoZWNrZXJDbGllbnQuaCIKICNpbXBv
cnQgIlRleHRDaGVja2luZ0hlbHBlci5oIgogI2ltcG9ydCAiVmlzaWJsZVVuaXRzLmgiCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQkocmV2aXNpb24gMTc4ODU3
KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbXBv
cnQgIkNvbG9yTWFjLmgiCiAjaW1wb3J0ICJDb250ZXh0TWVudUNvbnRyb2xsZXIuaCIKICNpbXBv
cnQgIkVkaXRvci5oIgorI2ltcG9ydCAiRm9udC5oIgogI2ltcG9ydCAiRm9udENhc2NhZGUuaCIK
ICNpbXBvcnQgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW1wb3J0ICJGcmFtZVNlbGVjdGlvbi5o
IgpAQCAtNjQsNyArNjUsNiBAQAogI2ltcG9ydCAiUmVuZGVyVmlldy5oIgogI2ltcG9ydCAiUmVu
ZGVyV2lkZ2V0LmgiCiAjaW1wb3J0ICJTY3JvbGxWaWV3LmgiCi0jaW1wb3J0ICJTaW1wbGVGb250
RGF0YS5oIgogI2ltcG9ydCAiVGV4dENoZWNrZXJDbGllbnQuaCIKICNpbXBvcnQgIlRleHRDaGVj
a2luZ0hlbHBlci5oIgogI2ltcG9ydCAiVGV4dEl0ZXJhdG9yLmgiCkBAIC04NDgsNyArODQ4LDcg
QEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVTdHJpbmdTZXRTdHlsZShOUwogICAgIGNvbnN0IFJl
bmRlclN0eWxlJiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwogICAgIAogICAgIC8vIHNldCBi
YXNpYyBmb250IGluZm8KLSAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldEZvbnQoYXR0clN0cmluZywg
TlNBY2Nlc3NpYmlsaXR5Rm9udFRleHRBdHRyaWJ1dGUsIHN0eWxlLmZvbnRDYXNjYWRlKCkucHJp
bWFyeUZvbnREYXRhKCkuZ2V0TlNGb250KCksIHJhbmdlKTsKKyAgICBBWEF0dHJpYnV0ZVN0cmlu
Z1NldEZvbnQoYXR0clN0cmluZywgTlNBY2Nlc3NpYmlsaXR5Rm9udFRleHRBdHRyaWJ1dGUsIHN0
eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKS5nZXROU0ZvbnQoKSwgcmFuZ2UpOwogICAg
IAogICAgIC8vIHNldCBiYXNpYyBjb2xvcnMKICAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldENvbG9y
KGF0dHJTdHJpbmcsIE5TQWNjZXNzaWJpbGl0eUZvcmVncm91bmRDb2xvclRleHRBdHRyaWJ1dGUs
IG5zQ29sb3Ioc3R5bGUudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpKSwg
cmFuZ2UpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0JKHJldmlzaW9uIDE3
ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC02NjksNyArNjY5LDcgQEAgLSAoTlNGb250ICopX2ZvbnQKICAgICBhdXRvIHJlbmRl
cmVyID0gY29yZShzZWxmKS0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAg
ICByZXR1cm4gbmlsOwotICAgIHJldHVybiByZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgp
LnByaW1hcnlGb250RGF0YSgpLmdldE5TRm9udCgpOworICAgIHJldHVybiByZW5kZXJlci0+c3R5
bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCkuZ2V0TlNGb250KCk7CiB9CiAjZWxzZQog
LSAoQ1RGb250UmVmKV9mb250CkBAIC02NzcsNyArNjc3LDcgQEAgLSAoQ1RGb250UmVmKV9mb250
CiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNvcmUoc2VsZiktPnJlbmRlcmVyKCk7CiAg
ICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4gcmVuZGVy
ZXItPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXRDVEZvbnQoKTsK
KyAgICByZXR1cm4gcmVuZGVyZXItPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgp
LmdldENURm9udCgpOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NG
b250RmFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNl
LmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTAgKzMwLDEwIEBACiAjaW5jbHVkZSAiQ1NTRm9u
dFNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ1NTU2VnbWVudGVkRm9udEZhY2UuaCIKICNpbmNsdWRl
ICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGb250RGVzY3JpcHRp
b24uaCIKICNpbmNsdWRlICJGb250TG9hZGVyLmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRG
ZWF0dXJlcy5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtMTA4LDcgKzEwOCw3IEBAIHZvaWQgQ1NTRm9udEZhY2U6OmZvbnRMb2FkZWQo
Q1NTRm9udEZhY2UKICNlbmRpZgogfQogCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBDU1NG
b250RmFjZTo6Z2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24sIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpCitSZWZQdHI8Rm9u
dD4gQ1NTRm9udEZhY2U6OmZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24sIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpCiB7CiAgICAgbV9h
Y3RpdmVTb3VyY2UgPSAwOwogICAgIGlmICghaXNWYWxpZCgpKQpAQCAtMTI0LDcgKzEyNCw3IEBA
IFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IENTU0ZvbnRGYWNlOjoKIAogICAgIHNpemVfdCBz
aXplID0gbV9zb3VyY2VzLnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7
ICsraSkgewotICAgICAgICBpZiAoUmVmUHRyPFNpbXBsZUZvbnREYXRhPiByZXN1bHQgPSBtX3Nv
dXJjZXNbaV0tPmdldEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgc3ludGhldGljQm9sZCwgc3lu
dGhldGljSXRhbGljLCBmb250U2VsZWN0b3IpKSB7CisgICAgICAgIGlmIChSZWZQdHI8Rm9udD4g
cmVzdWx0ID0gbV9zb3VyY2VzW2ldLT5mb250KGZvbnREZXNjcmlwdGlvbiwgc3ludGhldGljQm9s
ZCwgc3ludGhldGljSXRhbGljLCBmb250U2VsZWN0b3IpKSB7CiAgICAgICAgICAgICBtX2FjdGl2
ZVNvdXJjZSA9IG1fc291cmNlc1tpXS5nZXQoKTsKICNpZiBFTkFCTEUoRk9OVF9MT0FEX0VWRU5U
UykKICAgICAgICAgICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLmZvbnRMb2FkRXZlbnRzRW5hYmxlZCgpICYmIG1fbG9hZFN0YXRlID09IExvYWRpbmcgJiYg
bV9zb3VyY2VzW2ldLT5pc0xvYWRlZCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
Rm9udEZhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2Uu
aAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBDU1NTZWdtZW50ZWRGb250RmFjZTsKIGNsYXNzIEZvbnREZXNjcmlwdGlvbjsKLWNsYXNz
IFNpbXBsZUZvbnREYXRhOworY2xhc3MgRm9udDsKIAogY2xhc3MgQ1NTRm9udEZhY2UgOiBwdWJs
aWMgUmVmQ291bnRlZDxDU1NGb250RmFjZT4gewogcHVibGljOgpAQCAtNjUsNyArNjUsNyBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIGZvbnRMb2FkZWQoQ1NTRm9udEZhY2VTb3VyY2UqKTsKIAotICAg
IFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IGdldEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpOworICAgIFJl
ZlB0cjxGb250PiBmb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGJvb2wgc3ludGhldGljQm9s
ZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpOwogCiAgICAgc3RydWN0IFVuaWNvZGVSYW5nZSB7CiAg
ICAgICAgIFVuaWNvZGVSYW5nZShVQ2hhcjMyIGZyb20sIFVDaGFyMzIgdG8pCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5jcHAJKHJldmlzaW9uIDE3ODg1NykKKysr
IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDkgKzMyLDkgQEAKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgogI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRWxlbWVudEl0ZXJhdG9yLmgiCisjaW5jbHVk
ZSAiRm9udC5oIgogI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgogI2luY2x1ZGUgIkZvbnREZXNjcmlw
dGlvbi5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAKICNpZiBFTkFCTEUoU1ZHX09U
Rl9DT05WRVJURVIpCiAjaW5jbHVkZSAiRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oIgpAQCAtNzQs
MTAgKzc0LDEwIEBAIENTU0ZvbnRGYWNlU291cmNlOjp+Q1NTRm9udEZhY2VTb3VyY2UoKQogCiB2
b2lkIENTU0ZvbnRGYWNlU291cmNlOjpwcnVuZVRhYmxlKCkKIHsKLSAgICBpZiAobV9mb250RGF0
YVRhYmxlLmlzRW1wdHkoKSkKKyAgICBpZiAobV9mb250VGFibGUuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBtX2ZvbnREYXRhVGFibGUuY2xlYXIoKTsKKyAgICBtX2ZvbnRUYWJs
ZS5jbGVhcigpOwogfQogCiBib29sIENTU0ZvbnRGYWNlU291cmNlOjppc0xvYWRlZCgpIGNvbnN0
CkBAIC0xMDEsNyArMTAxLDcgQEAgdm9pZCBDU1NGb250RmFjZVNvdXJjZTo6Zm9udExvYWRlZChD
YWNoZQogICAgICAgICBtX2ZhY2UtPmZvbnRMb2FkZWQodGhpcyk7CiB9CiAKLVBhc3NSZWZQdHI8
U2ltcGxlRm9udERhdGE+IENTU0ZvbnRGYWNlU291cmNlOjpnZXRGb250RGF0YShjb25zdCBGb250
RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5
bnRoZXRpY0l0YWxpYywgQ1NTRm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IpCitSZWZQdHI8Rm9u
dD4gQ1NTRm9udEZhY2VTb3VyY2U6OmZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVz
Y3JpcHRpb24sIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMsIENTU0Zv
bnRTZWxlY3RvciogZm9udFNlbGVjdG9yKQogewogICAgIC8vIElmIHRoZSBmb250IGhhc24ndCBs
b2FkZWQgb3IgYW4gZXJyb3Igb2NjdXJyZWQsIHRoZW4gd2UndmUgZ290IG5vdGhpbmcuCiAgICAg
aWYgKCFpc1ZhbGlkKCkpCkBAIC0xMTIsMTggKzExMiwxNyBAQCBQYXNzUmVmUHRyPFNpbXBsZUZv
bnREYXRhPiBDU1NGb250RmFjZVNvCiAgICAgICAgICAgICAmJiAhbV9zdmdGb250RmFjZUVsZW1l
bnQKICNlbmRpZgogICAgICkgewotICAgICAgICAvLyBXZSdyZSBsb2NhbC4gSnVzdCByZXR1cm4g
YSBTaW1wbGVGb250RGF0YSBmcm9tIHRoZSBub3JtYWwgY2FjaGUuCisgICAgICAgIC8vIFdlJ3Jl
IGxvY2FsLiBKdXN0IHJldHVybiBhIEZvbnQgZnJvbSB0aGUgbm9ybWFsIGNhY2hlLgogICAgICAg
ICAvLyBXZSBkb24ndCB3YW50IHRvIGNoZWNrIGFsdGVybmF0ZSBmb250IGZhbWlseSBuYW1lcyBo
ZXJlLCBzbyBwYXNzIHRydWUgYXMgdGhlIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSBwYXJhbWV0ZXIu
CiAgICAgICAgIHJldHVybiBmb250Q2FjaGUoKS5mb250Rm9yRmFtaWx5KGZvbnREZXNjcmlwdGlv
biwgbV9zdHJpbmcsIHRydWUpOwogICAgIH0KIAotICAgIC8vIFNlZSBpZiB3ZSBoYXZlIGEgbWFw
cGluZyBpbiBvdXIgRm9udERhdGEgY2FjaGUuCiAgICAgdW5zaWduZWQgaGFzaEtleSA9IChmb250
RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSArIDEpIDw8IDUgfCBmb250RGVzY3JpcHRp
b24ud2lkdGhWYXJpYW50KCkgPDwgMwogICAgICAgICAgICAgICAgICAgICAgICB8IChmb250RGVz
Y3JpcHRpb24ub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCA/IDQgOiAwKSB8IChzeW50aGV0aWNC
b2xkID8gMiA6IDApIHwgKHN5bnRoZXRpY0l0YWxpYyA/IDEgOiAwKTsKIAotICAgIFJlZlB0cjxT
aW1wbGVGb250RGF0YT4gZm9udERhdGEgPSBtX2ZvbnREYXRhVGFibGUuYWRkKGhhc2hLZXksIG51
bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKLSAgICBpZiAoZm9udERhdGEpCi0gICAgICAgIHJldHVy
biBmb250RGF0YS5yZWxlYXNlKCk7CisgICAgUmVmUHRyPEZvbnQ+IGZvbnQgPSBtX2ZvbnRUYWJs
ZS5hZGQoaGFzaEtleSwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOworICAgIGlmIChmb250KQor
ICAgICAgICByZXR1cm4gZm9udC5yZWxlYXNlKCk7CiAKICAgICAvLyBJZiB3ZSBhcmUgc3RpbGwg
bG9hZGluZywgdGhlbiB3ZSBsZXQgdGhlIHN5c3RlbSBwaWNrIGEgZm9udC4KICAgICBpZiAoaXNM
b2FkZWQoKSkgewpAQCAtMTM2LDcgKzEzNSw3IEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+
IENTU0ZvbnRGYWNlU28KICAgICAgICAgICAgIGlmICghbV9mb250LT5lbnN1cmVDdXN0b21Gb250
RGF0YShoYXNFeHRlcm5hbFNWR0ZvbnQsIG1fc3RyaW5nKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAotICAgICAgICAgICAgZm9udERhdGEgPSBtX2ZvbnQtPmdldEZvbnREYXRh
KGZvbnREZXNjcmlwdGlvbiwgbV9zdHJpbmcsIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxp
YywgaGFzRXh0ZXJuYWxTVkdGb250KTsKKyAgICAgICAgICAgIGZvbnQgPSBtX2ZvbnQtPmNyZWF0
ZUZvbnQoZm9udERlc2NyaXB0aW9uLCBtX3N0cmluZywgc3ludGhldGljQm9sZCwgc3ludGhldGlj
SXRhbGljLCBoYXNFeHRlcm5hbFNWR0ZvbnQpOwogICAgICAgICB9IGVsc2UgewogI2lmIEVOQUJM
RShTVkdfRk9OVFMpCiAgICAgICAgICAgICAvLyBJbi1Eb2N1bWVudCBTVkcgRm9udHMKQEAgLTE1
Miw5ICsxNTEsOSBAQCBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBDU1NGb250RmFjZVNvCiAg
ICAgICAgICAgICAgICAgaWYgKCFtX2dlbmVyYXRlZE9URkJ1ZmZlcikKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEZv
bnRDdXN0b21QbGF0Zm9ybURhdGE+IGN1c3RvbVBsYXRmb3JtRGF0YSA9IGNyZWF0ZUZvbnRDdXN0
b21QbGF0Zm9ybURhdGEoKm1fZ2VuZXJhdGVkT1RGQnVmZmVyKTsKLSAgICAgICAgICAgICAgICBm
b250RGF0YSA9IFNpbXBsZUZvbnREYXRhOjpjcmVhdGUoY3VzdG9tUGxhdGZvcm1EYXRhLT5mb250
UGxhdGZvcm1EYXRhKHN0YXRpY19jYXN0PGludD4oZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4
ZWxTaXplKCkpLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMsIGZvbnREZXNjcmlwdGlv
bi5vcmllbnRhdGlvbigpLCBmb250RGVzY3JpcHRpb24ud2lkdGhWYXJpYW50KCksIGZvbnREZXNj
cmlwdGlvbi5yZW5kZXJpbmdNb2RlKCkpLCB0cnVlLCBmYWxzZSk7CisgICAgICAgICAgICAgICAg
Zm9udCA9IEZvbnQ6OmNyZWF0ZShjdXN0b21QbGF0Zm9ybURhdGEtPmZvbnRQbGF0Zm9ybURhdGEo
c3RhdGljX2Nhc3Q8aW50Pihmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSksIHN5
bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYywgZm9udERlc2NyaXB0aW9uLm9yaWVudGF0aW9u
KCksIGZvbnREZXNjcmlwdGlvbi53aWR0aFZhcmlhbnQoKSwgZm9udERlc2NyaXB0aW9uLnJlbmRl
cmluZ01vZGUoKSksIHRydWUsIGZhbHNlKTsKICNlbHNlCi0gICAgICAgICAgICAgICAgZm9udERh
dGEgPSBTaW1wbGVGb250RGF0YTo6Y3JlYXRlKHN0ZDo6bWFrZV91bmlxdWU8U1ZHRm9udERhdGE+
KG1fc3ZnRm9udEZhY2VFbGVtZW50LmdldCgpKSwgZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4
ZWxTaXplKCksIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYyk7CisgICAgICAgICAgICAg
ICAgZm9udCA9IEZvbnQ6OmNyZWF0ZShzdGQ6Om1ha2VfdW5pcXVlPFNWR0ZvbnREYXRhPihtX3N2
Z0ZvbnRGYWNlRWxlbWVudC5nZXQoKSksIGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6
ZSgpLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMpOwogI2VuZGlmCiAgICAgICAgICAg
ICB9CiAjZW5kaWYKQEAgLTE2NCwxMiArMTYzLDEyIEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERh
dGE+IENTU0ZvbnRGYWNlU28KICAgICAgICAgLy8gYW5kIHRoZSBsb2FkZXIgbWF5IGludm9rZSBh
cmJpdHJhcnkgZGVsZWdhdGUgb3IgZXZlbnQgaGFuZGxlciBjb2RlLgogICAgICAgICBmb250U2Vs
ZWN0b3ItPmJlZ2luTG9hZGluZ0ZvbnRTb29uKG1fZm9udC5nZXQoKSk7CiAKLSAgICAgICAgUmVm
PFNpbXBsZUZvbnREYXRhPiBwbGFjZWhvbGRlckZvbnQgPSBmb250Q2FjaGUoKS5sYXN0UmVzb3J0
RmFsbGJhY2tGb250KGZvbnREZXNjcmlwdGlvbik7Ci0gICAgICAgIFJlZjxTaW1wbGVGb250RGF0
YT4gcGxhY2Vob2xkZXJGb250Q29weUluTG9hZGluZ1N0YXRlID0gU2ltcGxlRm9udERhdGE6OmNy
ZWF0ZShwbGFjZWhvbGRlckZvbnQtPnBsYXRmb3JtRGF0YSgpLCB0cnVlLCB0cnVlKTsKKyAgICAg
ICAgUmVmPEZvbnQ+IHBsYWNlaG9sZGVyRm9udCA9IGZvbnRDYWNoZSgpLmxhc3RSZXNvcnRGYWxs
YmFja0ZvbnQoZm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgUmVmPEZvbnQ+IHBsYWNlaG9sZGVy
Rm9udENvcHlJbkxvYWRpbmdTdGF0ZSA9IEZvbnQ6OmNyZWF0ZShwbGFjZWhvbGRlckZvbnQtPnBs
YXRmb3JtRGF0YSgpLCB0cnVlLCB0cnVlKTsKICAgICAgICAgcmV0dXJuIFdURjo6bW92ZShwbGFj
ZWhvbGRlckZvbnRDb3B5SW5Mb2FkaW5nU3RhdGUpOwogICAgIH0KIAotICAgIHJldHVybiBmb250
RGF0YS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIGZvbnQucmVsZWFzZSgpOwogfQogCiAjaWYgRU5B
QkxFKEZPTlRfTE9BRF9FVkVOVFMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZh
Y2VTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VT
b3VyY2UuaAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRG
YWNlU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDggKzQyLDggQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogY2xhc3MgQ2FjaGVkRm9udDsKIGNsYXNzIENTU0ZvbnRGYWNlOwogY2xhc3MgQ1NT
Rm9udFNlbGVjdG9yOworY2xhc3MgRm9udDsKIGNsYXNzIEZvbnREZXNjcmlwdGlvbjsKLWNsYXNz
IFNpbXBsZUZvbnREYXRhOwogCiBjbGFzcyBDU1NGb250RmFjZVNvdXJjZSBmaW5hbCA6IHB1Ymxp
YyBDYWNoZWRGb250Q2xpZW50IHsKIHB1YmxpYzoKQEAgLTU5LDcgKzU5LDcgQEAgcHVibGljOgog
CiAgICAgdmlydHVhbCB2b2lkIGZvbnRMb2FkZWQoQ2FjaGVkRm9udCopIG92ZXJyaWRlOwogCi0g
ICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gZ2V0Rm9udERhdGEoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYywgQ1NTRm9u
dFNlbGVjdG9yKik7CisgICAgUmVmUHRyPEZvbnQ+IGZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9u
JiwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYywgQ1NTRm9udFNlbGVj
dG9yKik7CiAKICAgICB2b2lkIHBydW5lVGFibGUoKTsKIApAQCAtODEsNyArODEsNyBAQCBwcml2
YXRlOgogICAgIEF0b21pY1N0cmluZyBtX3N0cmluZzsgLy8gVVJJIGZvciByZW1vdGUsIGJ1aWx0
LWluIGZvbnQgbmFtZSBmb3IgbG9jYWwuCiAgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVk
Rm9udD4gbV9mb250OyAvLyBGb3IgcmVtb3RlIGZvbnRzLCBhIHBvaW50ZXIgdG8gb3VyIGNhY2hl
ZCByZXNvdXJjZS4KICAgICBDU1NGb250RmFjZSogbV9mYWNlOyAvLyBPdXIgb3duaW5nIGZvbnQg
ZmFjZS4KLSAgICBIYXNoTWFwPHVuc2lnbmVkLCBSZWZQdHI8U2ltcGxlRm9udERhdGE+PiBtX2Zv
bnREYXRhVGFibGU7IC8vIFRoZSBoYXNoIGtleSBpcyBjb21wb3NlZCBvZiBzaXplIHN5bnRoZXRp
YyBzdHlsZXMuCisgICAgSGFzaE1hcDx1bnNpZ25lZCwgUmVmUHRyPEZvbnQ+PiBtX2ZvbnRUYWJs
ZTsgLy8gVGhlIGhhc2gga2V5IGlzIGNvbXBvc2VkIG9mIHNpemUgc3ludGhldGljIHN0eWxlcy4K
IAogI2lmIEVOQUJMRShTVkdfT1RGX0NPTlZFUlRFUikKICAgICBSZWZQdHI8U2hhcmVkQnVmZmVy
PiBtX2dlbmVyYXRlZE9URkJ1ZmZlcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250
U2VsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2Vs
ZWN0b3IuY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9u
dFNlbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTMgKzQwLDEzIEBACiAjaW5jbHVk
ZSAiQ1NTVmFsdWVMaXN0LmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKICNp
bmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGb250Q2Fj
aGUuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5j
bHVkZSAiU1ZHRm9udEZhY2VFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNs
dWRlICJTZXR0aW5ncy5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5jbHVkZSAi
U3R5bGVQcm9wZXJ0aWVzLmgiCiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUg
IlN0eWxlUnVsZS5oIgpAQCAtNjEyLDcgKzYxMiw3IEBAIGJvb2wgQ1NTRm9udFNlbGVjdG9yOjpy
ZXNvbHZlc0ZhbWlseUZvcigKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXNpemVfdCBDU1NGb250
U2VsZWN0b3I6OmZhbGxiYWNrRm9udERhdGFDb3VudCgpCitzaXplX3QgQ1NTRm9udFNlbGVjdG9y
OjpmYWxsYmFja0ZvbnRDb3VudCgpCiB7CiAgICAgaWYgKCFtX2RvY3VtZW50KQogICAgICAgICBy
ZXR1cm4gMDsKQEAgLTYyMyw3ICs2MjMsNyBAQCBzaXplX3QgQ1NTRm9udFNlbGVjdG9yOjpmYWxs
YmFja0ZvbnREYXRhCiAgICAgcmV0dXJuIDA7CiB9CiAKLVBhc3NSZWZQdHI8U2ltcGxlRm9udERh
dGE+IENTU0ZvbnRTZWxlY3Rvcjo6ZmFsbGJhY2tGb250RGF0YUF0KGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZm9udERlc2NyaXB0aW9uLCBzaXplX3QgaW5kZXgpCitQYXNzUmVmUHRyPEZvbnQ+IENT
U0ZvbnRTZWxlY3Rvcjo6ZmFsbGJhY2tGb250QXQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHRpb24sIHNpemVfdCBpbmRleCkKIHsKICAgICBBU1NFUlRfVU5VU0VEKGluZGV4LCAh
aW5kZXgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5oCShyZXZpc2lv
biAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI3LDggKzI3LDggQEAKICNkZWZpbmUgQ1NTRm9udFNlbGVjdG9yX2gKIAog
I2luY2x1ZGUgIkNhY2hlZFJlc291cmNlSGFuZGxlLmgiCisjaW5jbHVkZSAiRm9udC5oIgogI2lu
Y2x1ZGUgIkZvbnRTZWxlY3Rvci5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5j
bHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KQEAgLTU5LDggKzU5LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdW5zaWduZWQgdW5pcXVl
SWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3VuaXF1ZUlkOyB9CiAKICAgICB2aXJ0dWFs
IEZvbnRSYW5nZXMgZm9udFJhbmdlc0ZvckZhbWlseShjb25zdCBGb250RGVzY3JpcHRpb24mLCBj
b25zdCBBdG9taWNTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHNpemVfdCBmYWxsYmFj
a0ZvbnREYXRhQ291bnQoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U2ltcGxl
Rm9udERhdGE+IGZhbGxiYWNrRm9udERhdGFBdChjb25zdCBGb250RGVzY3JpcHRpb24mLCBzaXpl
X3QpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgc2l6ZV90IGZhbGxiYWNrRm9udENvdW50KCkgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEZvbnQ+IGZhbGxiYWNrRm9udEF0KGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYsIHNpemVfdCkgb3ZlcnJpZGU7CiAgICAgQ1NTU2VnbWVudGVkRm9u
dEZhY2UqIGdldEZvbnRGYWNlKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0
cmluZyYgZmFtaWx5KTsKIAogICAgIHZpcnR1YWwgYm9vbCByZXNvbHZlc0ZhbWlseUZvcihjb25z
dCBGb250RGVzY3JpcHRpb24mKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291
cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzAsOSArMzAsOSBAQAogI2luY2x1ZGUgIkNTU0ZvbnRGYWNlU291cmNlLmgiCiAjaW5jbHVk
ZSAiQ1NTRm9udFNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJG
b250LmgiCiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiUnVudGltZUVu
YWJsZWRGZWF0dXJlcy5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApAQCAtOTAsMjEgKzkwLDIxIEBAIHZvaWQgQ1NTU2VnbWVudGVkRm9udEZh
Y2U6OmFwcGVuZEZvbnRGYWMKICAgICBtX2ZvbnRGYWNlcy5hcHBlbmQoZm9udEZhY2UpOwogfQog
Ci1zdGF0aWMgdm9pZCBhcHBlbmRGb250RGF0YVdpdGhJbnZhbGlkVW5pY29kZVJhbmdlSWZMb2Fk
aW5nKEZvbnRSYW5nZXMmIHJhbmdlcywgUmVmPFNpbXBsZUZvbnREYXRhPiYmIGZvbnREYXRhLCBj
b25zdCBWZWN0b3I8Q1NTRm9udEZhY2U6OlVuaWNvZGVSYW5nZT4mIHVuaWNvZGVSYW5nZXMpCitz
dGF0aWMgdm9pZCBhcHBlbmRGb250V2l0aEludmFsaWRVbmljb2RlUmFuZ2VJZkxvYWRpbmcoRm9u
dFJhbmdlcyYgcmFuZ2VzLCBSZWY8Rm9udD4mJiBmb250LCBjb25zdCBWZWN0b3I8Q1NTRm9udEZh
Y2U6OlVuaWNvZGVSYW5nZT4mIHVuaWNvZGVSYW5nZXMpCiB7Ci0gICAgaWYgKGZvbnREYXRhLT5p
c0xvYWRpbmcoKSkgewotICAgICAgICByYW5nZXMuYXBwZW5kUmFuZ2UoRm9udFJhbmdlczo6UmFu
Z2UoMCwgMCwgV1RGOjptb3ZlKGZvbnREYXRhKSkpOworICAgIGlmIChmb250LT5pc0xvYWRpbmco
KSkgeworICAgICAgICByYW5nZXMuYXBwZW5kUmFuZ2UoRm9udFJhbmdlczo6UmFuZ2UoMCwgMCwg
V1RGOjptb3ZlKGZvbnQpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICB1bnNpZ25l
ZCBudW1SYW5nZXMgPSB1bmljb2RlUmFuZ2VzLnNpemUoKTsKICAgICBpZiAoIW51bVJhbmdlcykg
ewotICAgICAgICByYW5nZXMuYXBwZW5kUmFuZ2UoRm9udFJhbmdlczo6UmFuZ2UoMCwgMHg3RkZG
RkZGRiwgV1RGOjptb3ZlKGZvbnREYXRhKSkpOworICAgICAgICByYW5nZXMuYXBwZW5kUmFuZ2Uo
Rm9udFJhbmdlczo6UmFuZ2UoMCwgMHg3RkZGRkZGRiwgV1RGOjptb3ZlKGZvbnQpKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgbnVtUmFu
Z2VzOyArK2opCi0gICAgICAgIHJhbmdlcy5hcHBlbmRSYW5nZShGb250UmFuZ2VzOjpSYW5nZSh1
bmljb2RlUmFuZ2VzW2pdLmZyb20oKSwgdW5pY29kZVJhbmdlc1tqXS50bygpLCBmb250RGF0YS5j
b3B5UmVmKCkpKTsKKyAgICAgICAgcmFuZ2VzLmFwcGVuZFJhbmdlKEZvbnRSYW5nZXM6OlJhbmdl
KHVuaWNvZGVSYW5nZXNbal0uZnJvbSgpLCB1bmljb2RlUmFuZ2VzW2pdLnRvKCksIGZvbnQuY29w
eVJlZigpKSk7CiB9CiAKIEZvbnRSYW5nZXMgQ1NTU2VnbWVudGVkRm9udEZhY2U6OmZvbnRSYW5n
ZXMoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pCkBAIC0xMjgsOCArMTI4
LDggQEAgRm9udFJhbmdlcyBDU1NTZWdtZW50ZWRGb250RmFjZTo6Zm9udFJhbgogICAgICAgICAg
ICAgRm9udFRyYWl0c01hc2sgdHJhaXRzTWFzayA9IGZhY2UtPnRyYWl0c01hc2soKTsKICAgICAg
ICAgICAgIGJvb2wgc3ludGhldGljQm9sZCA9ICEodHJhaXRzTWFzayAmIChGb250V2VpZ2h0NjAw
TWFzayB8IEZvbnRXZWlnaHQ3MDBNYXNrIHwgRm9udFdlaWdodDgwME1hc2sgfCBGb250V2VpZ2h0
OTAwTWFzaykpICYmIChkZXNpcmVkVHJhaXRzTWFzayAmIChGb250V2VpZ2h0NjAwTWFzayB8IEZv
bnRXZWlnaHQ3MDBNYXNrIHwgRm9udFdlaWdodDgwME1hc2sgfCBGb250V2VpZ2h0OTAwTWFzaykp
OwogICAgICAgICAgICAgYm9vbCBzeW50aGV0aWNJdGFsaWMgPSAhKHRyYWl0c01hc2sgJiBGb250
U3R5bGVJdGFsaWNNYXNrKSAmJiAoZGVzaXJlZFRyYWl0c01hc2sgJiBGb250U3R5bGVJdGFsaWNN
YXNrKTsKLSAgICAgICAgICAgIGlmIChSZWZQdHI8U2ltcGxlRm9udERhdGE+IGZhY2VGb250RGF0
YSA9IGZhY2UtPmdldEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgc3ludGhldGljQm9sZCwgc3lu
dGhldGljSXRhbGljKSkKLSAgICAgICAgICAgICAgICBhcHBlbmRGb250RGF0YVdpdGhJbnZhbGlk
VW5pY29kZVJhbmdlSWZMb2FkaW5nKGZvbnRSYW5nZXMsIGZhY2VGb250RGF0YS5yZWxlYXNlTm9u
TnVsbCgpLCBmYWNlLT5yYW5nZXMoKSk7CisgICAgICAgICAgICBpZiAoUmVmUHRyPEZvbnQ+IGZh
Y2VGb250ID0gZmFjZS0+Zm9udChmb250RGVzY3JpcHRpb24sIHN5bnRoZXRpY0JvbGQsIHN5bnRo
ZXRpY0l0YWxpYykpCisgICAgICAgICAgICAgICAgYXBwZW5kRm9udFdpdGhJbnZhbGlkVW5pY29k
ZVJhbmdlSWZMb2FkaW5nKGZvbnRSYW5nZXMsIGZhY2VGb250LnJlbGVhc2VOb25OdWxsKCksIGZh
Y2UtPnJhbmdlcygpKTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gZm9udFJhbmdlczsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBA
QCBjbGFzcyBIaXRUZXN0UmVzdWx0OwogY2xhc3MgS2lsbFJpbmc7CiBjbGFzcyBQYXN0ZWJvYXJk
OwogY2xhc3MgU2hhcmVkQnVmZmVyOwotY2xhc3MgU2ltcGxlRm9udERhdGE7CitjbGFzcyBGb250
OwogY2xhc3MgU3BlbGxDaGVja1JlcXVlc3Q7CiBjbGFzcyBTcGVsbENoZWNrZXI7CiBjbGFzcyBT
dHlsZVByb3BlcnRpZXM7CkBAIC00MjIsNyArNDIyLDcgQEAgcHVibGljOgogI2lmIFBMQVRGT1JN
KENPQ09BKQogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZW5kZXJTdHlsZSogc3R5bGVGb3JT
ZWxlY3Rpb25TdGFydChGcmFtZSogLCBOb2RlICombm9kZVRvUmVtb3ZlKTsKICAgICBXRUJDT1JF
X0VYUE9SVCBib29sIGluc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVvdGVkQ29udGVudCgpOwot
ICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250Rm9yU2VsZWN0aW9u
KGJvb2wmKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBGb250KiBmb250Rm9yU2Vs
ZWN0aW9uKGJvb2wmKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBOU0RpY3Rpb25hcnkgKmZv
bnRBdHRyaWJ1dGVzRm9yU2VsZWN0aW9uU3RhcnQoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9S
VCBTdHJpbmcgc3RyaW5nU2VsZWN0aW9uRm9yUGFzdGVib2FyZCgpOwogICAgIFN0cmluZyBzdHJp
bmdTZWxlY3Rpb25Gb3JQYXN0ZWJvYXJkV2l0aEltYWdlQWx0VGV4dCgpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbQkocmV2aXNpb24gMTc4
ODU3KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTE0LDcgKzExMTQsNyBAQCBzdGF0aWMgUGxhdGZvcm1Gb250ICpf
Zm9udChFbGVtZW50JiBlbGVtCiAgICAgYXV0byByZW5kZXJlciA9IGVsZW1lbnQucmVuZGVyZXIo
KTsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiBy
ZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmdldE5TRm9u
dCgpOworICAgIHJldHVybiByZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlG
b250KCkuZ2V0TlNGb250KCk7CiB9CiAjZWxzZQogc3RhdGljIFBsYXRmb3JtRm9udCAqX2ZvbnQo
RWxlbWVudCYgZWxlbWVudCkKQEAgLTExMjIsNyArMTEyMiw3IEBAIHN0YXRpYyBQbGF0Zm9ybUZv
bnQgKl9mb250KEVsZW1lbnQmIGVsZW0KICAgICBhdXRvIHJlbmRlcmVyID0gZWxlbWVudC5yZW5k
ZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgcmV0
dXJuIChQbGF0Zm9ybUZvbnQgKilyZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1h
cnlGb250RGF0YSgpLmdldENURm9udCgpOworICAgIHJldHVybiAoUGxhdGZvcm1Gb250ICopcmVu
ZGVyZXItPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpLmdldENURm9udCgpOwog
fQogI2VuZGlmCiAKQEAgLTI1OTQsMTAgKzI1OTQsMTAgQEAgTlNBdHRyaWJ1dGVkU3RyaW5nICpl
ZGl0aW5nQXR0cmlidXRlZFN0cgogICAgICAgICAgICAgW2F0dHJzLmdldCgpIHNldE9iamVjdDpb
TlNOdW1iZXIgbnVtYmVyV2l0aEludGVnZXI6TlNVbmRlcmxpbmVTdHlsZVNpbmdsZV0gZm9yS2V5
Ok5TVW5kZXJsaW5lU3R5bGVBdHRyaWJ1dGVOYW1lXTsKICAgICAgICAgaWYgKHN0eWxlLnRleHRE
ZWNvcmF0aW9uc0luRWZmZWN0KCkgJiBUZXh0RGVjb3JhdGlvbkxpbmVUaHJvdWdoKQogICAgICAg
ICAgICAgW2F0dHJzLmdldCgpIHNldE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aEludGVnZXI6
TlNVbmRlcmxpbmVTdHlsZVNpbmdsZV0gZm9yS2V5Ok5TU3RyaWtldGhyb3VnaFN0eWxlQXR0cmli
dXRlTmFtZV07Ci0gICAgICAgIGlmIChOU0ZvbnQgKmZvbnQgPSBzdHlsZS5mb250Q2FzY2FkZSgp
LnByaW1hcnlGb250RGF0YSgpLmdldE5TRm9udCgpKQorICAgICAgICBpZiAoTlNGb250ICpmb250
ID0gc3R5bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpLmdldE5TRm9udCgpKQogICAgICAg
ICAgICAgW2F0dHJzLmdldCgpIHNldE9iamVjdDpmb250IGZvcktleTpOU0ZvbnRBdHRyaWJ1dGVO
YW1lXTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgW2F0dHJzLmdldCgpIHNldE9iamVjdDpb
Zm9udE1hbmFnZXIgY29udmVydEZvbnQ6V2ViRGVmYXVsdEZvbnQoKSB0b1NpemU6c3R5bGUuZm9u
dENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5wbGF0Zm9ybURhdGEoKS5zaXplKCldIGZvcktl
eTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKKyAgICAgICAgICAgIFthdHRycy5nZXQoKSBzZXRPYmpl
Y3Q6W2ZvbnRNYW5hZ2VyIGNvbnZlcnRGb250OldlYkRlZmF1bHRGb250KCkgdG9TaXplOnN0eWxl
LmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKS5wbGF0Zm9ybURhdGEoKS5zaXplKCldIGZvcktl
eTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKICAgICAgICAgaWYgKHN0eWxlLnZpc2l0ZWREZXBlbmRl
bnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKS5hbHBoYSgpKQogICAgICAgICAgICAgW2F0dHJzLmdl
dCgpIHNldE9iamVjdDpuc0NvbG9yKHN0eWxlLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9w
ZXJ0eUNvbG9yKSkgZm9yS2V5Ok5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07CiAgICAg
ICAgIGVsc2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0JKHJl
dmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5t
bQkod29ya2luZyBjb3B5KQpAQCAtMjAzLDcgKzIwMyw3IEBAIGJvb2wgRWRpdG9yOjppbnNlcnRQ
YXJhZ3JhcGhTZXBhcmF0b3JJblEKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotY29uc3QgU2ltcGxl
Rm9udERhdGEqIEVkaXRvcjo6Zm9udEZvclNlbGVjdGlvbihib29sJiBoYXNNdWx0aXBsZUZvbnRz
KSBjb25zdAorY29uc3QgRm9udCogRWRpdG9yOjpmb250Rm9yU2VsZWN0aW9uKGJvb2wmIGhhc011
bHRpcGxlRm9udHMpIGNvbnN0CiB7CiAgICAgaGFzTXVsdGlwbGVGb250cyA9IGZhbHNlOwogCkBA
IC0yMTEsOSArMjExLDkgQEAgY29uc3QgU2ltcGxlRm9udERhdGEqIEVkaXRvcjo6Zm9udEZvclNl
bAogICAgICAgICBOb2RlKiBub2RlVG9SZW1vdmU7CiAgICAgICAgIFJlbmRlclN0eWxlKiBzdHls
ZSA9IHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQoJm1fZnJhbWUsIG5vZGVUb1JlbW92ZSk7IC8vIHNl
dHMgbm9kZVRvUmVtb3ZlCiAKLSAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIHJlc3VsdCA9
IG51bGxwdHI7CisgICAgICAgIGNvbnN0IEZvbnQqIHJlc3VsdCA9IG51bGxwdHI7CiAgICAgICAg
IGlmIChzdHlsZSkKLSAgICAgICAgICAgIHJlc3VsdCA9ICZzdHlsZS0+Zm9udENhc2NhZGUoKS5w
cmltYXJ5Rm9udERhdGEoKTsKKyAgICAgICAgICAgIHJlc3VsdCA9ICZzdHlsZS0+Zm9udENhc2Nh
ZGUoKS5wcmltYXJ5Rm9udCgpOwogCiAgICAgICAgIGlmIChub2RlVG9SZW1vdmUpIHsKICAgICAg
ICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7CkBAIC0yMjQsNyArMjI0LDcgQEAgY29uc3QgU2ltcGxl
Rm9udERhdGEqIEVkaXRvcjo6Zm9udEZvclNlbAogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
IH0KIAotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250ID0gMDsKKyAgICBjb25zdCBGb250
KiBmb250ID0gMDsKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gbV9mcmFtZS5zZWxlY3Rpb24o
KS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmIChOb2RlKiBzdGFydE5vZGUgPSBhZGp1c3Rl
ZFNlbGVjdGlvblN0YXJ0Rm9yU3R5bGVDb21wdXRhdGlvbihtX2ZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpKS5kZXByZWNhdGVkTm9kZSgpKSB7CiAgICAgICAgIE5vZGUqIHBhc3RFbmQgPSBy
YW5nZS0+cGFzdExhc3ROb2RlKCk7CkBAIC0yMzUsNyArMjM1LDcgQEAgY29uc3QgU2ltcGxlRm9u
dERhdGEqIEVkaXRvcjo6Zm9udEZvclNlbAogICAgICAgICAgICAgaWYgKCFyZW5kZXJlcikKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBBcmUgdGhlcmUg
YW55IG5vZGUgdHlwZXMgdGhhdCBoYXZlIHJlbmRlcmVycywgYnV0IHRoYXQgd2Ugc2hvdWxkIGJl
IHNraXBwaW5nPwotICAgICAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEmIHByaW1hcnlGb250
ID0gcmVuZGVyZXItPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKTsKKyAg
ICAgICAgICAgIGNvbnN0IEZvbnQmIHByaW1hcnlGb250ID0gcmVuZGVyZXItPnN0eWxlKCkuZm9u
dENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpOwogICAgICAgICAgICAgaWYgKCFmb250KQogICAgICAg
ICAgICAgICAgIGZvbnQgPSAmcHJpbWFyeUZvbnQ7CiAgICAgICAgICAgICBlbHNlIGlmIChmb250
ICE9ICZwcmltYXJ5Rm9udCkgewpAQCAtMjU3LDcgKzI1Nyw3IEBAIE5TRGljdGlvbmFyeSogRWRp
dG9yOjpmb250QXR0cmlidXRlc0ZvclMKIAogICAgIE5TTXV0YWJsZURpY3Rpb25hcnkqIHJlc3Vs
dCA9IFtOU011dGFibGVEaWN0aW9uYXJ5IGRpY3Rpb25hcnldOwogICAgIAotICAgIENURm9udFJl
ZiBmb250ID0gc3R5bGUtPmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0Q1RGb250
KCk7CisgICAgQ1RGb250UmVmIGZvbnQgPSBzdHlsZS0+Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9u
dCgpLmdldENURm9udCgpOwogICAgIGlmIChmb250KQogICAgICAgICBbcmVzdWx0IHNldE9iamVj
dDooaWQpZm9udCBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0JKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTA1
LDcgKzEwNSw3IEBAIGJvb2wgRWRpdG9yOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJblEKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotY29uc3QgU2ltcGxlRm9udERhdGEqIEVkaXRvcjo6Zm9udEZv
clNlbGVjdGlvbihib29sJiBoYXNNdWx0aXBsZUZvbnRzKSBjb25zdAorY29uc3QgRm9udCogRWRp
dG9yOjpmb250Rm9yU2VsZWN0aW9uKGJvb2wmIGhhc011bHRpcGxlRm9udHMpIGNvbnN0CiB7CiAg
ICAgaGFzTXVsdGlwbGVGb250cyA9IGZhbHNlOwogCkBAIC0xMTMsOSArMTEzLDkgQEAgY29uc3Qg
U2ltcGxlRm9udERhdGEqIEVkaXRvcjo6Zm9udEZvclNlbAogICAgICAgICBOb2RlKiBub2RlVG9S
ZW1vdmU7CiAgICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHN0eWxlRm9yU2VsZWN0aW9uU3Rh
cnQoJm1fZnJhbWUsIG5vZGVUb1JlbW92ZSk7IC8vIHNldHMgbm9kZVRvUmVtb3ZlCiAKLSAgICAg
ICAgY29uc3QgU2ltcGxlRm9udERhdGEqIHJlc3VsdCA9IG51bGxwdHI7CisgICAgICAgIGNvbnN0
IEZvbnQqIHJlc3VsdCA9IG51bGxwdHI7CiAgICAgICAgIGlmIChzdHlsZSkKLSAgICAgICAgICAg
IHJlc3VsdCA9ICZzdHlsZS0+Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKTsKKyAgICAg
ICAgICAgIHJlc3VsdCA9ICZzdHlsZS0+Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpOwogCiAg
ICAgICAgIGlmIChub2RlVG9SZW1vdmUpCiAgICAgICAgICAgICBub2RlVG9SZW1vdmUtPnJlbW92
ZShBU1NFUlRfTk9fRVhDRVBUSU9OKTsKQEAgLTEyMyw3ICsxMjMsNyBAQCBjb25zdCBTaW1wbGVG
b250RGF0YSogRWRpdG9yOjpmb250Rm9yU2VsCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
fQogCi0gICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQgPSAwOworICAgIGNvbnN0IEZvbnQq
IGZvbnQgPSAwOwogICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigp
LnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgTm9kZSogc3RhcnROb2RlID0gYWRqdXN0ZWRTZWxl
Y3Rpb25TdGFydEZvclN0eWxlQ29tcHV0YXRpb24obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKSkuZGVwcmVjYXRlZE5vZGUoKTsKICAgICBpZiAocmFuZ2UgJiYgc3RhcnROb2RlKSB7CkBA
IC0xMzUsNyArMTM1LDcgQEAgY29uc3QgU2ltcGxlRm9udERhdGEqIEVkaXRvcjo6Zm9udEZvclNl
bAogICAgICAgICAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIC8vIEZJWE1FOiBBcmUgdGhlcmUgYW55IG5vZGUgdHlwZXMgdGhhdCBoYXZl
IHJlbmRlcmVycywgYnV0IHRoYXQgd2Ugc2hvdWxkIGJlIHNraXBwaW5nPwotICAgICAgICAgICAg
Y29uc3QgU2ltcGxlRm9udERhdGEmIHByaW1hcnlGb250ID0gcmVuZGVyZXItPnN0eWxlKCkuZm9u
dENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKTsKKyAgICAgICAgICAgIGNvbnN0IEZvbnQmIHBy
aW1hcnlGb250ID0gcmVuZGVyZXItPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgp
OwogICAgICAgICAgICAgaWYgKCFmb250KQogICAgICAgICAgICAgICAgIGZvbnQgPSAmcHJpbWFy
eUZvbnQ7CiAgICAgICAgICAgICBlbHNlIGlmIChmb250ICE9ICZwcmltYXJ5Rm9udCkgewpAQCAt
MTYwLDggKzE2MCw4IEBAIE5TRGljdGlvbmFyeSogRWRpdG9yOjpmb250QXR0cmlidXRlc0ZvclMK
ICAgICBpZiAoc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91
bmRDb2xvcikuaXNWYWxpZCgpICYmIHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJv
cGVydHlCYWNrZ3JvdW5kQ29sb3IpLmFscGhhKCkgIT0gMCkKICAgICAgICAgW3Jlc3VsdCBzZXRP
YmplY3Q6bnNDb2xvcihzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFj
a2dyb3VuZENvbG9yKSkgZm9yS2V5Ok5TQmFja2dyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07CiAK
LSAgICBpZiAoc3R5bGUtPmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0TlNGb250
KCkpCi0gICAgICAgIFtyZXN1bHQgc2V0T2JqZWN0OnN0eWxlLT5mb250Q2FzY2FkZSgpLnByaW1h
cnlGb250RGF0YSgpLmdldE5TRm9udCgpIGZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKKyAg
ICBpZiAoc3R5bGUtPmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKS5nZXROU0ZvbnQoKSkKKyAg
ICAgICAgW3Jlc3VsdCBzZXRPYmplY3Q6c3R5bGUtPmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQo
KS5nZXROU0ZvbnQoKSBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CiAKICAgICBpZiAoc3R5
bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKS5pc1ZhbGlkKCkgJiYg
c3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSAhPSBDb2xvcjo6
YmxhY2spCiAgICAgICAgIFtyZXN1bHQgc2V0T2JqZWN0Om5zQ29sb3Ioc3R5bGUtPnZpc2l0ZWRE
ZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSkgZm9yS2V5Ok5TRm9yZWdyb3VuZENvbG9y
QXR0cmlidXRlTmFtZV07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVk
Rm9udC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hl
ZEZvbnQuY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2Fj
aGUvQ2FjaGVkRm9udC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5LDcgKzk5LDcgQEAgYm9vbCBD
YWNoZWRGb250OjplbnN1cmVDdXN0b21Gb250RGF0YShibwogCiBib29sIENhY2hlZEZvbnQ6OmVu
c3VyZUN1c3RvbUZvbnREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSkKIHsKLSAgICBpZiAoIW1fZm9u
dERhdGEgJiYgIWVycm9yT2NjdXJyZWQoKSAmJiAhaXNMb2FkaW5nKCkgJiYgZGF0YSkgeworICAg
IGlmICghbV9mb250Q3VzdG9tUGxhdGZvcm1EYXRhICYmICFlcnJvck9jY3VycmVkKCkgJiYgIWlz
TG9hZGluZygpICYmIGRhdGEpIHsKICAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVy
KGRhdGEpOwogCiAjaWYgKCFQTEFURk9STShNQUMpIHx8IF9fTUFDX09TX1hfVkVSU0lPTl9NSU5f
UkVRVUlSRUQgPD0gMTA5MCkgJiYgKCFQTEFURk9STShJT1MpIHx8IF9fSVBIT05FX09TX1ZFUlNJ
T05fTUlOX1JFUVVJUkVEIDwgODAwMDApCkBAIC0xMTIsMzAgKzExMiwzMCBAQCBib29sIENhY2hl
ZEZvbnQ6OmVuc3VyZUN1c3RvbUZvbnREYXRhKFNoCiAgICAgICAgIH0KICNlbmRpZgogCi0gICAg
ICAgIG1fZm9udERhdGEgPSBidWZmZXIgPyBjcmVhdGVGb250Q3VzdG9tUGxhdGZvcm1EYXRhKCpi
dWZmZXIpIDogbnVsbHB0cjsKLSAgICAgICAgbV9oYXNDcmVhdGVkRm9udERhdGFXcmFwcGluZ1Jl
c291cmNlID0gbV9mb250RGF0YSAmJiAoYnVmZmVyID09IG1fZGF0YSk7Ci0gICAgICAgIGlmICgh
bV9mb250RGF0YSkKKyAgICAgICAgbV9mb250Q3VzdG9tUGxhdGZvcm1EYXRhID0gYnVmZmVyID8g
Y3JlYXRlRm9udEN1c3RvbVBsYXRmb3JtRGF0YSgqYnVmZmVyKSA6IG51bGxwdHI7CisgICAgICAg
IG1faGFzQ3JlYXRlZEZvbnREYXRhV3JhcHBpbmdSZXNvdXJjZSA9IG1fZm9udEN1c3RvbVBsYXRm
b3JtRGF0YSAmJiAoYnVmZmVyID09IG1fZGF0YSk7CisgICAgICAgIGlmICghbV9mb250Q3VzdG9t
UGxhdGZvcm1EYXRhKQogICAgICAgICAgICAgc2V0U3RhdHVzKERlY29kZUVycm9yKTsKICAgICB9
CiAKLSAgICByZXR1cm4gbV9mb250RGF0YS5nZXQoKTsKKyAgICByZXR1cm4gbV9mb250Q3VzdG9t
UGxhdGZvcm1EYXRhLmdldCgpOwogfQogCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBDYWNo
ZWRGb250OjpnZXRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlv
biwgY29uc3QgQXRvbWljU3RyaW5nJiwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRp
Y0l0YWxpYywgYm9vbCkKK1JlZlB0cjxGb250PiBDYWNoZWRGb250OjpjcmVhdGVGb250KGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmLCBi
b29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljLCBib29sKQogewotICAgIHJl
dHVybiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlKHBsYXRmb3JtRGF0YUZyb21DdXN0b21EYXRhKGZv
bnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0
aWNJdGFsaWMsCisgICAgcmV0dXJuIEZvbnQ6OmNyZWF0ZShwbGF0Zm9ybURhdGFGcm9tQ3VzdG9t
RGF0YShmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSwgc3ludGhldGljQm9sZCwg
c3ludGhldGljSXRhbGljLAogICAgICAgICBmb250RGVzY3JpcHRpb24ub3JpZW50YXRpb24oKSwg
Zm9udERlc2NyaXB0aW9uLndpZHRoVmFyaWFudCgpLCBmb250RGVzY3JpcHRpb24ucmVuZGVyaW5n
TW9kZSgpKSwgdHJ1ZSwgZmFsc2UpOwogfQogCiBGb250UGxhdGZvcm1EYXRhIENhY2hlZEZvbnQ6
OnBsYXRmb3JtRGF0YUZyb21DdXN0b21EYXRhKGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBp
dGFsaWMsIEZvbnRPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgRm9udFdpZHRoVmFyaWFudCB3aWR0
aFZhcmlhbnQsIEZvbnRSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUpCiB7Ci0gICAgQVNTRVJU
KG1fZm9udERhdGEpOwotICAgIHJldHVybiBtX2ZvbnREYXRhLT5mb250UGxhdGZvcm1EYXRhKHN0
YXRpY19jYXN0PGludD4oc2l6ZSksIGJvbGQsIGl0YWxpYywgb3JpZW50YXRpb24sIHdpZHRoVmFy
aWFudCwgcmVuZGVyaW5nTW9kZSk7CisgICAgQVNTRVJUKG1fZm9udEN1c3RvbVBsYXRmb3JtRGF0
YSk7CisgICAgcmV0dXJuIG1fZm9udEN1c3RvbVBsYXRmb3JtRGF0YS0+Zm9udFBsYXRmb3JtRGF0
YShzdGF0aWNfY2FzdDxpbnQ+KHNpemUpLCBib2xkLCBpdGFsaWMsIG9yaWVudGF0aW9uLCB3aWR0
aFZhcmlhbnQsIHJlbmRlcmluZ01vZGUpOwogfQogCiB2b2lkIENhY2hlZEZvbnQ6OmFsbENsaWVu
dHNSZW1vdmVkKCkKIHsKLSAgICBtX2ZvbnREYXRhID0gbnVsbHB0cjsKKyAgICBtX2ZvbnRDdXN0
b21QbGF0Zm9ybURhdGEgPSBudWxscHRyOwogfQogCiB2b2lkIENhY2hlZEZvbnQ6OmNoZWNrTm90
aWZ5KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRGb250LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQuaAkocmV2
aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTAgKzI4LDEwIEBACiAKICNpbmNsdWRlICJDYWNoZWRS
ZXNvdXJjZS5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCisjaW5jbHVkZSAi
Rm9udC5oIgogI2luY2x1ZGUgIkZvbnRPcmllbnRhdGlvbi5oIgogI2luY2x1ZGUgIkZvbnRSZW5k
ZXJpbmdNb2RlLmgiCiAjaW5jbHVkZSAiRm9udFdpZHRoVmFyaWFudC5oIgotI2luY2x1ZGUgIlNp
bXBsZUZvbnREYXRhLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTIsNyArNTIsNyBA
QCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgZW5zdXJlQ3VzdG9tRm9udERhdGEoYm9vbCBl
eHRlcm5hbFNWRywgY29uc3QgQXRvbWljU3RyaW5nJiByZW1vdGVVUkkpOwogCi0gICAgdmlydHVh
bCBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBnZXRGb250RGF0YShjb25zdCBGb250RGVzY3Jp
cHRpb24mLCBjb25zdCBBdG9taWNTdHJpbmcmIHJlbW90ZVVSSSwgYm9vbCBzeW50aGV0aWNCb2xk
LCBib29sIHN5bnRoZXRpY0l0YWxpYywgYm9vbCBleHRlcm5hbFNWRyk7CisgICAgdmlydHVhbCBS
ZWZQdHI8Rm9udD4gY3JlYXRlRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9t
aWNTdHJpbmcmIHJlbW90ZVVSSSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0
YWxpYywgYm9vbCBleHRlcm5hbFNWRyk7CiAKIHByb3RlY3RlZDoKICAgICBGb250UGxhdGZvcm1E
YXRhIHBsYXRmb3JtRGF0YUZyb21DdXN0b21EYXRhKGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9v
bCBpdGFsaWMsIEZvbnRPcmllbnRhdGlvbiA9IEhvcml6b250YWwsIEZvbnRXaWR0aFZhcmlhbnQg
PSBSZWd1bGFyV2lkdGgsIEZvbnRSZW5kZXJpbmdNb2RlID0gTm9ybWFsUmVuZGVyaW5nTW9kZSk7
CkBAIC03MCw3ICs3MCw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgYWxsQ2xpZW50
c1JlbW92ZWQoKSBvdmVycmlkZTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxGb250Q3VzdG9tUGxh
dGZvcm1EYXRhPiBtX2ZvbnREYXRhOworICAgIHN0ZDo6dW5pcXVlX3B0cjxGb250Q3VzdG9tUGxh
dGZvcm1EYXRhPiBtX2ZvbnRDdXN0b21QbGF0Zm9ybURhdGE7CiAgICAgYm9vbCBtX2xvYWRJbml0
aWF0ZWQ7CiAgICAgYm9vbCBtX2hhc0NyZWF0ZWRGb250RGF0YVdyYXBwaW5nUmVzb3VyY2U7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTVkdGb250LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU1ZHRm9udC5jcHAJ
KHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRT
VkdGb250LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsMTcgKzUxLDE3IEBAIENhY2hlZFNWR0Zv
bnQ6OkNhY2hlZFNWR0ZvbnQoY29uc3QgUmVzb3UKIHsKIH0KIAotUGFzc1JlZlB0cjxTaW1wbGVG
b250RGF0YT4gQ2FjaGVkU1ZHRm9udDo6Z2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgcmVtb3RlVVJJLCBib29sIHN5
bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljLCBib29sIGV4dGVybmFsU1ZHKQorUmVm
UHRyPEZvbnQ+IENhY2hlZFNWR0ZvbnQ6OmNyZWF0ZUZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgcmVtb3RlVVJJLCBib29sIHN5
bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljLCBib29sIGV4dGVybmFsU1ZHKQogewog
I2lmIEVOQUJMRShTVkdfT1RGX0NPTlZFUlRFUikKICAgICBpZiAoIWV4dGVybmFsU1ZHIHx8IGZp
cnN0Rm9udEZhY2UocmVtb3RlVVJJKSkKLSAgICAgICAgcmV0dXJuIENhY2hlZEZvbnQ6OmdldEZv
bnREYXRhKGZvbnREZXNjcmlwdGlvbiwgcmVtb3RlVVJJLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0
aWNJdGFsaWMsIGV4dGVybmFsU1ZHKTsKKyAgICAgICAgcmV0dXJuIENhY2hlZEZvbnQ6OmNyZWF0
ZUZvbnQoZm9udERlc2NyaXB0aW9uLCByZW1vdGVVUkksIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRp
Y0l0YWxpYywgZXh0ZXJuYWxTVkcpOwogI2Vsc2UKICAgICBpZiAoIWV4dGVybmFsU1ZHKQotICAg
ICAgICByZXR1cm4gQ2FjaGVkRm9udDo6Z2V0Rm9udERhdGEoZm9udERlc2NyaXB0aW9uLCByZW1v
dGVVUkksIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYywgZXh0ZXJuYWxTVkcpOworICAg
ICAgICByZXR1cm4gQ2FjaGVkRm9udDo6Y3JlYXRlRm9udChmb250RGVzY3JpcHRpb24sIHJlbW90
ZVVSSSwgc3ludGhldGljQm9sZCwgc3ludGhldGljSXRhbGljLCBleHRlcm5hbFNWRyk7CiAKICAg
ICBpZiAoU1ZHRm9udEZhY2VFbGVtZW50KiBmaXJzdEZvbnRGYWNlID0gdGhpcy0+Zmlyc3RGb250
RmFjZShyZW1vdGVVUkkpKQotICAgICAgICByZXR1cm4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZShz
dGQ6Om1ha2VfdW5pcXVlPFNWR0ZvbnREYXRhPihmaXJzdEZvbnRGYWNlKSwgZm9udERlc2NyaXB0
aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCksIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYyk7
CisgICAgICAgIHJldHVybiBGb250OjpjcmVhdGUoc3RkOjptYWtlX3VuaXF1ZTxTVkdGb250RGF0
YT4oZmlyc3RGb250RmFjZSksIGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpLCBz
eW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMpOwogI2VuZGlmCiAgICAgcmV0dXJuIG51bGxw
dHI7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU1ZHRm9udC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTVkdGb250
LmgJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRTVkdGb250LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogCiAg
ICAgdmlydHVhbCBib29sIGVuc3VyZUN1c3RvbUZvbnREYXRhKGJvb2wgZXh0ZXJuYWxTVkcsIGNv
bnN0IEF0b21pY1N0cmluZyYgcmVtb3RlVVJJKSBvdmVycmlkZTsKICAgICAKLSAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IGdldEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYgcmVtb3RlVVJJLCBib29sIHN5bnRoZXRpY0JvbGQs
IGJvb2wgc3ludGhldGljSXRhbGljLCBib29sIGV4dGVybmFsU1ZHKSBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIFJlZlB0cjxGb250PiBjcmVhdGVGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNv
bnN0IEF0b21pY1N0cmluZyYgcmVtb3RlVVJJLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3lu
dGhldGljSXRhbGljLCBib29sIGV4dGVybmFsU1ZHKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAg
ICBGb250UGxhdGZvcm1EYXRhIHBsYXRmb3JtRGF0YUZyb21DdXN0b21EYXRhKGZsb2F0IHNpemUs
IGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMsIEZvbnRPcmllbnRhdGlvbiA9IEhvcml6b250YWwsIEZv
bnRXaWR0aFZhcmlhbnQgPSBSZWd1bGFyV2lkdGgsIEZvbnRSZW5kZXJpbmdNb2RlID0gTm9ybWFs
UmVuZGVyaW5nTW9kZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250LmNwcAkocmV2aXNpb24gMTc4NjUwKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9TaW1wbGVGb250RGF0YS5jcHA6MTc4NjUwKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NTYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDgsIDIwMTAsIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3Vy
eWFrb3YKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBw
bGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAq
ICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgorCisjaWYgUExB
VEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JF
UVVJUkVEID4gMTA4MCkKKyNpbmNsdWRlICJDb3JlVGV4dFNQSS5oIgorI2VuZGlmCisjaW5jbHVk
ZSAiRm9udENhY2hlLmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKKyNpbmNsdWRlICJPcGVu
VHlwZU1hdGhEYXRhLmgiCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3
dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKworI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKKyNp
bmNsdWRlICJPcGVuVHlwZVZlcnRpY2FsRGF0YS5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKwordW5zaWduZWQgR2x5cGhQYWdlOjpzX2NvdW50ID0gMDsKKworY29uc3QgZmxvYXQg
c21hbGxDYXBzRm9udFNpemVNdWx0aXBsaWVyID0gMC43ZjsKK2NvbnN0IGZsb2F0IGVtcGhhc2lz
TWFya0ZvbnRTaXplTXVsdGlwbGllciA9IDAuNWY7CisKK1NpbXBsZUZvbnREYXRhOjpTaW1wbGVG
b250RGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEsIGJvb2wgaXNDdXN0
b21Gb250LCBib29sIGlzTG9hZGluZywgYm9vbCBpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKQor
ICAgIDogbV9tYXhDaGFyV2lkdGgoLTEpCisgICAgLCBtX2F2Z0NoYXJXaWR0aCgtMSkKKyAgICAs
IG1fcGxhdGZvcm1EYXRhKHBsYXRmb3JtRGF0YSkKKyAgICAsIG1fdHJlYXRBc0ZpeGVkUGl0Y2go
ZmFsc2UpCisgICAgLCBtX2lzQ3VzdG9tRm9udChpc0N1c3RvbUZvbnQpCisgICAgLCBtX2lzTG9h
ZGluZyhpc0xvYWRpbmcpCisgICAgLCBtX2lzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2soaXNUZXh0
T3JpZW50YXRpb25GYWxsYmFjaykKKyAgICAsIG1faXNCcm9rZW5JZGVvZ3JhcGhGYWxsYmFjayhm
YWxzZSkKKyAgICAsIG1fbWF0aERhdGEobnVsbHB0cikKKyNpZiBFTkFCTEUoT1BFTlRZUEVfVkVS
VElDQUwpCisgICAgLCBtX3ZlcnRpY2FsRGF0YSgwKQorI2VuZGlmCisgICAgLCBtX2hhc1ZlcnRp
Y2FsR2x5cGhzKGZhbHNlKQoreworICAgIHBsYXRmb3JtSW5pdCgpOworICAgIHBsYXRmb3JtR2x5
cGhJbml0KCk7CisgICAgcGxhdGZvcm1DaGFyV2lkdGhJbml0KCk7CisjaWYgRU5BQkxFKE9QRU5U
WVBFX1ZFUlRJQ0FMKQorICAgIGlmIChwbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSA9PSBWZXJ0
aWNhbCAmJiAhaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaykgeworICAgICAgICBtX3ZlcnRpY2Fs
RGF0YSA9IHBsYXRmb3JtRGF0YS52ZXJ0aWNhbERhdGEoKTsKKyAgICAgICAgbV9oYXNWZXJ0aWNh
bEdseXBocyA9IG1fdmVydGljYWxEYXRhLmdldCgpICYmIG1fdmVydGljYWxEYXRhLT5oYXNWZXJ0
aWNhbE1ldHJpY3MoKTsKKyAgICB9CisjZW5kaWYKK30KKworU2ltcGxlRm9udERhdGE6OlNpbXBs
ZUZvbnREYXRhKHN0ZDo6dW5pcXVlX3B0cjxTVkdEYXRhPiBzdmdEYXRhLCBmbG9hdCBmb250U2l6
ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYykKKyAgICA6IG1fcGxh
dGZvcm1EYXRhKEZvbnRQbGF0Zm9ybURhdGEoZm9udFNpemUsIHN5bnRoZXRpY0JvbGQsIHN5bnRo
ZXRpY0l0YWxpYykpCisgICAgLCBtX3N2Z0RhdGEoV1RGOjptb3ZlKHN2Z0RhdGEpKQorICAgICwg
bV90cmVhdEFzRml4ZWRQaXRjaChmYWxzZSkKKyAgICAsIG1faXNDdXN0b21Gb250KHRydWUpCisg
ICAgLCBtX2lzTG9hZGluZyhmYWxzZSkKKyAgICAsIG1faXNUZXh0T3JpZW50YXRpb25GYWxsYmFj
ayhmYWxzZSkKKyAgICAsIG1faXNCcm9rZW5JZGVvZ3JhcGhGYWxsYmFjayhmYWxzZSkKKyAgICAs
IG1fbWF0aERhdGEobnVsbHB0cikKKyNpZiBFTkFCTEUoT1BFTlRZUEVfVkVSVElDQUwpCisgICAg
LCBtX3ZlcnRpY2FsRGF0YSgwKQorI2VuZGlmCisgICAgLCBtX2hhc1ZlcnRpY2FsR2x5cGhzKGZh
bHNlKQorI2lmIFBMQVRGT1JNKElPUykKKyAgICAsIG1fc2hvdWxkTm90QmVVc2VkRm9yQXJhYmlj
KGZhbHNlKQorI2VuZGlmCit7CisgICAgbV9zdmdEYXRhLT5pbml0aWFsaXplRm9udERhdGEodGhp
cywgZm9udFNpemUpOworfQorCisvLyBFc3RpbWF0ZXMgb2YgYXZnQ2hhcldpZHRoIGFuZCBtYXhD
aGFyV2lkdGggZm9yIHBsYXRmb3JtcyB0aGF0IGRvbid0IHN1cHBvcnQgYWNjZXNzaW5nIHRoZXNl
IHZhbHVlcyBmcm9tIHRoZSBmb250Lgordm9pZCBTaW1wbGVGb250RGF0YTo6aW5pdENoYXJXaWR0
aHMoKQoreworICAgIGF1dG8qIGdseXBoUGFnZVplcm8gPSBnbHlwaFBhZ2UoMCk7CisKKyAgICAv
LyBUcmVhdCB0aGUgd2lkdGggb2YgYSAnMCcgYXMgdGhlIGF2Z0NoYXJXaWR0aC4KKyAgICBpZiAo
bV9hdmdDaGFyV2lkdGggPD0gMC5mICYmIGdseXBoUGFnZVplcm8pIHsKKyAgICAgICAgc3RhdGlj
IGNvbnN0IFVDaGFyMzIgZGlnaXRaZXJvQ2hhciA9ICcwJzsKKyAgICAgICAgR2x5cGggZGlnaXRa
ZXJvR2x5cGggPSBnbHlwaFBhZ2VaZXJvLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoZGlnaXRaZXJv
Q2hhcikuZ2x5cGg7CisgICAgICAgIGlmIChkaWdpdFplcm9HbHlwaCkKKyAgICAgICAgICAgIG1f
YXZnQ2hhcldpZHRoID0gd2lkdGhGb3JHbHlwaChkaWdpdFplcm9HbHlwaCk7CisgICAgfQorCisg
ICAgLy8gSWYgd2UgY2FuJ3QgcmV0cmlldmUgdGhlIHdpZHRoIG9mIGEgJzAnLCBmYWxsIGJhY2sg
dG8gdGhlIHggaGVpZ2h0LgorICAgIGlmIChtX2F2Z0NoYXJXaWR0aCA8PSAwLmYpCisgICAgICAg
IG1fYXZnQ2hhcldpZHRoID0gbV9mb250TWV0cmljcy54SGVpZ2h0KCk7CisKKyAgICBpZiAobV9t
YXhDaGFyV2lkdGggPD0gMC5mKQorICAgICAgICBtX21heENoYXJXaWR0aCA9IHN0ZDo6bWF4KG1f
YXZnQ2hhcldpZHRoLCBtX2ZvbnRNZXRyaWNzLmZsb2F0QXNjZW50KCkpOworfQorCit2b2lkIFNp
bXBsZUZvbnREYXRhOjpwbGF0Zm9ybUdseXBoSW5pdCgpCit7CisgICAgYXV0byogZ2x5cGhQYWdl
WmVybyA9IGdseXBoUGFnZSgwKTsKKyAgICBpZiAoIWdseXBoUGFnZVplcm8pIHsKKyAgICAgICAg
bV9zcGFjZUdseXBoID0gMDsKKyAgICAgICAgbV9zcGFjZVdpZHRoID0gMDsKKyAgICAgICAgbV96
ZXJvR2x5cGggPSAwOworICAgICAgICBtX2FkanVzdGVkU3BhY2VXaWR0aCA9IDA7CisgICAgICAg
IGRldGVybWluZVBpdGNoKCk7CisgICAgICAgIG1femVyb1dpZHRoU3BhY2VHbHlwaCA9IDA7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBBc2sgZm9yIHRoZSBnbHlwaCBmb3IgMCB0
byBhdm9pZCBwYWdpbmcgaW4gWkVSTyBXSURUSCBTUEFDRS4gQ29udHJvbCBjaGFyYWN0ZXJzLCBp
bmNsdWRpbmcgMCwKKyAgICAvLyBhcmUgbWFwcGVkIHRvIHRoZSBaRVJPIFdJRFRIIFNQQUNFIGds
eXBoLgorICAgIG1femVyb1dpZHRoU3BhY2VHbHlwaCA9IGdseXBoUGFnZVplcm8tPmdseXBoRGF0
YUZvckNoYXJhY3RlcigwKS5nbHlwaDsKKworICAgIC8vIE5hc3R5IGhhY2sgdG8gZGV0ZXJtaW5l
IGlmIHdlIHNob3VsZCByb3VuZCBvciBjZWlsIHNwYWNlIHdpZHRocy4KKyAgICAvLyBJZiB0aGUg
Zm9udCBpcyBtb25vc3BhY2Ugb3IgZmFrZSBtb25vc3BhY2Ugd2UgY2VpbCB0byBlbnN1cmUgdGhh
dCAKKyAgICAvLyBldmVyeSBjaGFyYWN0ZXIgYW5kIHRoZSBzcGFjZSBhcmUgdGhlIHNhbWUgd2lk
dGguICBPdGhlcndpc2Ugd2Ugcm91bmQuCisgICAgbV9zcGFjZUdseXBoID0gZ2x5cGhQYWdlWmVy
by0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKCcgJykuZ2x5cGg7CisgICAgZmxvYXQgd2lkdGggPSB3
aWR0aEZvckdseXBoKG1fc3BhY2VHbHlwaCk7CisgICAgbV9zcGFjZVdpZHRoID0gd2lkdGg7Cisg
ICAgbV96ZXJvR2x5cGggPSBnbHlwaFBhZ2VaZXJvLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoJzAn
KS5nbHlwaDsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldFplcm9XaWR0aCh3aWR0aEZvckdseXBoKG1f
emVyb0dseXBoKSk7CisgICAgZGV0ZXJtaW5lUGl0Y2goKTsKKyAgICBtX2FkanVzdGVkU3BhY2VX
aWR0aCA9IG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPyBjZWlsZih3aWR0aCkgOiByb3VuZGYod2lkdGgp
OworCisgICAgLy8gRm9yY2UgdGhlIGdseXBoIGZvciBaRVJPIFdJRFRIIFNQQUNFIHRvIGhhdmUg
emVybyB3aWR0aCwgdW5sZXNzIGl0IGlzIHNoYXJlZCB3aXRoIFNQQUNFLgorICAgIC8vIEhlbHZl
dGljYSBpcyBhbiBleGFtcGxlIG9mIGEgbm9uLXplcm8gd2lkdGggWkVSTyBXSURUSCBTUEFDRSBn
bHlwaC4KKyAgICAvLyBTZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEzMTc4PiBhbmQgU2ltcGxlRm9udERhdGE6OmlzWmVyb1dpZHRoU3BhY2VHbHlwaCgpCisgICAg
aWYgKG1femVyb1dpZHRoU3BhY2VHbHlwaCA9PSBtX3NwYWNlR2x5cGgpCisgICAgICAgIG1femVy
b1dpZHRoU3BhY2VHbHlwaCA9IDA7Cit9CisKK1NpbXBsZUZvbnREYXRhOjp+U2ltcGxlRm9udERh
dGEoKQoreworICAgIHJlbW92ZUZyb21TeXN0ZW1GYWxsYmFja0NhY2hlKCk7Cit9CisKK3N0YXRp
YyBib29sIGZpbGxHbHlwaFBhZ2UoR2x5cGhQYWdlJiBwYWdlVG9GaWxsLCB1bnNpZ25lZCBvZmZz
ZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3Ro
LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEpCit7CisjaWYgRU5BQkxFKFNWR19GT05U
UykKKyAgICBpZiAoYXV0byogc3ZnRGF0YSA9IGZvbnREYXRhLT5zdmdEYXRhKCkpCisgICAgICAg
IHJldHVybiBzdmdEYXRhLT5maWxsU1ZHR2x5cGhQYWdlKCZwYWdlVG9GaWxsLCBvZmZzZXQsIGxl
bmd0aCwgYnVmZmVyLCBidWZmZXJMZW5ndGgsIGZvbnREYXRhKTsKKyNlbmRpZgorICAgIGJvb2wg
aGFzR2x5cGhzID0gcGFnZVRvRmlsbC5maWxsKG9mZnNldCwgbGVuZ3RoLCBidWZmZXIsIGJ1ZmZl
ckxlbmd0aCwgZm9udERhdGEpOworI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKKyAgICBp
ZiAoaGFzR2x5cGhzICYmIGZvbnREYXRhLT52ZXJ0aWNhbERhdGEoKSkKKyAgICAgICAgZm9udERh
dGEtPnZlcnRpY2FsRGF0YSgpLT5zdWJzdGl0dXRlV2l0aFZlcnRpY2FsR2x5cGhzKGZvbnREYXRh
LCAmcGFnZVRvRmlsbCwgb2Zmc2V0LCBsZW5ndGgpOworI2VuZGlmCisgICAgcmV0dXJuIGhhc0ds
eXBoczsKK30KKworc3RhdGljIFJlZlB0cjxHbHlwaFBhZ2U+IGNyZWF0ZUFuZEZpbGxHbHlwaFBh
Z2UodW5zaWduZWQgcGFnZU51bWJlciwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQor
eworI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBGSVhNRTogVGltZXMgTmV3IFJvbWFuIGNvbnRh
aW5zIEFyYWJpYyBnbHlwaHMsIGJ1dCBDb3JlIFRleHQgZG9lc24ndCBrbm93IGhvdyB0byBzaGFw
ZSB0aGVtLiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzk4MjM5NzU+LgorICAgIC8vIE9uY2Ugd2UgaGF2
ZSB0aGUgZml4IGZvciA8cmRhcjovL3Byb2JsZW0vOTgyMzk3NT4gdGhlbiByZW1vdmUgdGhpcyBj
b2RlIHRvZ2V0aGVyIHdpdGggU2ltcGxlRm9udERhdGE6OnNob3VsZE5vdEJlVXNlZEZvckFyYWJp
YygpCisgICAgLy8gaW4gPHJkYXI6Ly9wcm9ibGVtLzEyMDk2ODM1Pi4KKyAgICBpZiAocGFnZU51
bWJlciA9PSA2ICYmIGZvbnREYXRhLT5zaG91bGROb3RCZVVzZWRGb3JBcmFiaWMoKSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisjZW5kaWYKKworICAgIHVuc2lnbmVkIHN0YXJ0ID0gcGFnZU51
bWJlciAqIEdseXBoUGFnZTo6c2l6ZTsKKyAgICBVQ2hhciBidWZmZXJbR2x5cGhQYWdlOjpzaXpl
ICogMiArIDJdOworICAgIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aDsKKyAgICAvLyBGaWxsIGluIGEg
YnVmZmVyIHdpdGggdGhlIGVudGlyZSAicGFnZSIgb2YgY2hhcmFjdGVycyB0aGF0IHdlIHdhbnQg
dG8gbG9vayB1cCBnbHlwaHMgZm9yLgorICAgIGlmIChVX0lTX0JNUChzdGFydCkpIHsKKyAgICAg
ICAgYnVmZmVyTGVuZ3RoID0gR2x5cGhQYWdlOjpzaXplOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgR2x5cGhQYWdlOjpzaXplOyBpKyspCisgICAgICAgICAgICBidWZmZXJbaV0g
PSBzdGFydCArIGk7CisKKyAgICAgICAgaWYgKHN0YXJ0ID09IDApIHsKKyAgICAgICAgICAgIC8v
IENvbnRyb2wgY2hhcmFjdGVycyBtdXN0IG5vdCByZW5kZXIgYXQgYWxsLgorICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDB4MjA7ICsraSkKKyAgICAgICAgICAgICAgICBidWZm
ZXJbaV0gPSB6ZXJvV2lkdGhTcGFjZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDB4
N0Y7IGkgPCAweEEwOyBpKyspCisgICAgICAgICAgICAgICAgYnVmZmVyW2ldID0gemVyb1dpZHRo
U3BhY2U7CisgICAgICAgICAgICBidWZmZXJbc29mdEh5cGhlbl0gPSB6ZXJvV2lkdGhTcGFjZTsK
KworICAgICAgICAgICAgLy8gXG4sIFx0LCBhbmQgbm9uYnJlYWtpbmcgc3BhY2UgbXVzdCByZW5k
ZXIgYXMgYSBzcGFjZS4KKyAgICAgICAgICAgIGJ1ZmZlclsoaW50KSdcbiddID0gJyAnOworICAg
ICAgICAgICAgYnVmZmVyWyhpbnQpJ1x0J10gPSAnICc7CisgICAgICAgICAgICBidWZmZXJbbm9C
cmVha1NwYWNlXSA9ICcgJzsKKyAgICAgICAgfSBlbHNlIGlmIChzdGFydCA9PSAobGVmdFRvUmln
aHRNYXJrICYgfihHbHlwaFBhZ2U6OnNpemUgLSAxKSkpIHsKKyAgICAgICAgICAgIC8vIExSTSwg
UkxNLCBMUkUsIFJMRSwgWldOSiwgWldKLCBhbmQgUERGIG11c3Qgbm90IHJlbmRlciBhdCBhbGwu
CisgICAgICAgICAgICBidWZmZXJbbGVmdFRvUmlnaHRNYXJrIC0gc3RhcnRdID0gemVyb1dpZHRo
U3BhY2U7CisgICAgICAgICAgICBidWZmZXJbcmlnaHRUb0xlZnRNYXJrIC0gc3RhcnRdID0gemVy
b1dpZHRoU3BhY2U7CisgICAgICAgICAgICBidWZmZXJbbGVmdFRvUmlnaHRFbWJlZCAtIHN0YXJ0
XSA9IHplcm9XaWR0aFNwYWNlOworICAgICAgICAgICAgYnVmZmVyW3JpZ2h0VG9MZWZ0RW1iZWQg
LSBzdGFydF0gPSB6ZXJvV2lkdGhTcGFjZTsKKyAgICAgICAgICAgIGJ1ZmZlcltsZWZ0VG9SaWdo
dE92ZXJyaWRlIC0gc3RhcnRdID0gemVyb1dpZHRoU3BhY2U7CisgICAgICAgICAgICBidWZmZXJb
cmlnaHRUb0xlZnRPdmVycmlkZSAtIHN0YXJ0XSA9IHplcm9XaWR0aFNwYWNlOworICAgICAgICAg
ICAgYnVmZmVyW3plcm9XaWR0aE5vbkpvaW5lciAtIHN0YXJ0XSA9IHplcm9XaWR0aFNwYWNlOwor
ICAgICAgICAgICAgYnVmZmVyW3plcm9XaWR0aEpvaW5lciAtIHN0YXJ0XSA9IHplcm9XaWR0aFNw
YWNlOworICAgICAgICAgICAgYnVmZmVyW3BvcERpcmVjdGlvbmFsRm9ybWF0dGluZyAtIHN0YXJ0
XSA9IHplcm9XaWR0aFNwYWNlOworICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0ID09IChvYmplY3RS
ZXBsYWNlbWVudENoYXJhY3RlciAmIH4oR2x5cGhQYWdlOjpzaXplIC0gMSkpKSB7CisgICAgICAg
ICAgICAvLyBPYmplY3QgcmVwbGFjZW1lbnQgY2hhcmFjdGVyIG11c3Qgbm90IHJlbmRlciBhdCBh
bGwuCisgICAgICAgICAgICBidWZmZXJbb2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXIgLSBzdGFy
dF0gPSB6ZXJvV2lkdGhTcGFjZTsKKyAgICAgICAgfSBlbHNlIGlmIChzdGFydCA9PSAoemVyb1dp
ZHRoTm9CcmVha1NwYWNlICYgfihHbHlwaFBhZ2U6OnNpemUgLSAxKSkpIHsKKyAgICAgICAgICAg
IC8vIFpXTkJTL0JPTSBtdXN0IG5vdCByZW5kZXIgYXQgYWxsLgorICAgICAgICAgICAgYnVmZmVy
W3plcm9XaWR0aE5vQnJlYWtTcGFjZSAtIHN0YXJ0XSA9IHplcm9XaWR0aFNwYWNlOworICAgICAg
ICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgYnVmZmVyTGVuZ3RoID0gR2x5cGhQYWdlOjpzaXpl
ICogMjsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdseXBoUGFnZTo6c2l6ZTsg
aSsrKSB7CisgICAgICAgICAgICBpbnQgYyA9IGkgKyBzdGFydDsKKyAgICAgICAgICAgIGJ1ZmZl
cltpICogMl0gPSBVMTZfTEVBRChjKTsKKyAgICAgICAgICAgIGJ1ZmZlcltpICogMiArIDFdID0g
VTE2X1RSQUlMKGMpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gTm93IHRoYXQgd2UgaGF2
ZSBhIGJ1ZmZlciBmdWxsIG9mIGNoYXJhY3RlcnMsIHdlIHdhbnQgdG8gZ2V0IGJhY2sgYW4gYXJy
YXkKKyAgICAvLyBvZiBnbHlwaCBpbmRpY2VzLiBUaGlzIHBhcnQgaW52b2x2ZXMgY2FsbGluZyBp
bnRvIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYworICAgIC8vIHJvdXRpbmUgb2Ygb3VyIGdseXBoIG1h
cCBmb3IgYWN0dWFsbHkgZmlsbGluZyBpbiB0aGUgcGFnZSB3aXRoIHRoZSBnbHlwaHMuCisgICAg
Ly8gU3VjY2VzcyBpcyBub3QgZ3VhcmFudGVlZC4gRm9yIGV4YW1wbGUsIFRpbWVzIGZhaWxzIHRv
IGZpbGwgcGFnZSAyNjAsIGdpdmluZyBnbHlwaCBkYXRhCisgICAgLy8gZm9yIG9ubHkgMTI4IG91
dCBvZiAyNTYgY2hhcmFjdGVycy4KKyAgICBSZWZQdHI8R2x5cGhQYWdlPiBnbHlwaFBhZ2U7Cisg
ICAgaWYgKEdseXBoUGFnZTo6bWF5VXNlTWl4ZWRGb250RGF0YVdoZW5GaWxsaW5nKGJ1ZmZlciwg
YnVmZmVyTGVuZ3RoLCBmb250RGF0YSkpCisgICAgICAgIGdseXBoUGFnZSA9IEdseXBoUGFnZTo6
Y3JlYXRlRm9yTWl4ZWRGb250RGF0YSgpOworICAgIGVsc2UKKyAgICAgICAgZ2x5cGhQYWdlID0g
R2x5cGhQYWdlOjpjcmVhdGVGb3JTaW5nbGVGb250RGF0YShmb250RGF0YSk7CisKKyAgICBib29s
IGhhdmVHbHlwaHMgPSBmaWxsR2x5cGhQYWdlKCpnbHlwaFBhZ2UsIDAsIEdseXBoUGFnZTo6c2l6
ZSwgYnVmZmVyLCBidWZmZXJMZW5ndGgsIGZvbnREYXRhKTsKKyAgICBpZiAoIWhhdmVHbHlwaHMp
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgZ2x5cGhQYWdlLT5zZXRJbW11dGFibGUo
KTsKKyAgICByZXR1cm4gZ2x5cGhQYWdlOworfQorCitjb25zdCBHbHlwaFBhZ2UqIFNpbXBsZUZv
bnREYXRhOjpnbHlwaFBhZ2UodW5zaWduZWQgcGFnZU51bWJlcikgY29uc3QKK3sKKyAgICBpZiAo
cGFnZU51bWJlciA9PSAwKSB7CisgICAgICAgIGlmICghbV9nbHlwaFBhZ2VaZXJvKQorICAgICAg
ICAgICAgbV9nbHlwaFBhZ2VaZXJvID0gY3JlYXRlQW5kRmlsbEdseXBoUGFnZSgwLCB0aGlzKTsK
KyAgICAgICAgcmV0dXJuIG1fZ2x5cGhQYWdlWmVyby5nZXQoKTsKKyAgICB9CisgICAgYXV0byBh
ZGRSZXN1bHQgPSBtX2dseXBoUGFnZXMuYWRkKHBhZ2VOdW1iZXIsIG51bGxwdHIpOworICAgIGlm
IChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZSA9IGNyZWF0ZUFuZEZpbGxHbHlwaFBhZ2UocGFnZU51bWJlciwgdGhpcyk7CisKKyAgICByZXR1
cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKK30KKworR2x5cGggU2ltcGxlRm9u
dERhdGE6OmdseXBoRm9yQ2hhcmFjdGVyKFVDaGFyMzIgY2hhcmFjdGVyKSBjb25zdAoreworICAg
IGF1dG8qIHBhZ2UgPSBnbHlwaFBhZ2UoY2hhcmFjdGVyIC8gR2x5cGhQYWdlOjpzaXplKTsKKyAg
ICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBwYWdlLT5nbHlwaEF0
KGNoYXJhY3RlciAlIEdseXBoUGFnZTo6c2l6ZSk7Cit9CisKK0dseXBoRGF0YSBTaW1wbGVGb250
RGF0YTo6Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgY2hhcmFjdGVyKSBjb25zdAorewor
ICAgIGF1dG8qIHBhZ2UgPSBnbHlwaFBhZ2UoY2hhcmFjdGVyIC8gR2x5cGhQYWdlOjpzaXplKTsK
KyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybiBHbHlwaERhdGEoKTsKKyAgICByZXR1cm4g
cGFnZS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3Rlcik7Cit9CisKK1Bhc3NSZWZQdHI8
U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjp2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25G
b250RGF0YSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKKyAgICAgICAg
bV9kZXJpdmVkRm9udERhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPERlcml2ZWRGb250RGF0YT4oaXND
dXN0b21Gb250KCkpOworICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEtPnZlcnRpY2FsUmlnaHRP
cmllbnRhdGlvbikgeworICAgICAgICBGb250UGxhdGZvcm1EYXRhIHZlcnRpY2FsUmlnaHRQbGF0
Zm9ybURhdGEobV9wbGF0Zm9ybURhdGEpOworICAgICAgICB2ZXJ0aWNhbFJpZ2h0UGxhdGZvcm1E
YXRhLnNldE9yaWVudGF0aW9uKEhvcml6b250YWwpOworICAgICAgICBtX2Rlcml2ZWRGb250RGF0
YS0+dmVydGljYWxSaWdodE9yaWVudGF0aW9uID0gY3JlYXRlKHZlcnRpY2FsUmlnaHRQbGF0Zm9y
bURhdGEsIGlzQ3VzdG9tRm9udCgpLCBmYWxzZSwgdHJ1ZSk7CisgICAgfQorICAgIHJldHVybiBt
X2Rlcml2ZWRGb250RGF0YS0+dmVydGljYWxSaWdodE9yaWVudGF0aW9uOworfQorCitQYXNzUmVm
UHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6dXByaWdodE9yaWVudGF0aW9uRm9u
dERhdGEoKSBjb25zdAoreworICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEpCisgICAgICAgIG1f
ZGVyaXZlZEZvbnREYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxEZXJpdmVkRm9udERhdGE+KGlzQ3Vz
dG9tRm9udCgpKTsKKyAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhLT51cHJpZ2h0T3JpZW50YXRp
b24pCisgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT51cHJpZ2h0T3JpZW50YXRpb24gPSBjcmVh
dGUobV9wbGF0Zm9ybURhdGEsIGlzQ3VzdG9tRm9udCgpLCBmYWxzZSwgdHJ1ZSk7CisgICAgcmV0
dXJuIG1fZGVyaXZlZEZvbnREYXRhLT51cHJpZ2h0T3JpZW50YXRpb247Cit9CisKK1Bhc3NSZWZQ
dHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YShjb25z
dCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKK3sKKyAgICBpZiAoIW1f
ZGVyaXZlZEZvbnREYXRhKQorICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IHN0ZDo6bWFrZV91
bmlxdWU8RGVyaXZlZEZvbnREYXRhPihpc0N1c3RvbUZvbnQoKSk7CisgICAgaWYgKCFtX2Rlcml2
ZWRGb250RGF0YS0+c21hbGxDYXBzKQorICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxD
YXBzID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9uLCBzbWFsbENhcHNGb250
U2l6ZU11bHRpcGxpZXIpOworCisgICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENh
cHM7Cit9CisKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjplbXBo
YXNpc01hcmtGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikg
Y29uc3QKK3sKKyAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQorICAgICAgICBtX2Rlcml2ZWRG
b250RGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8RGVyaXZlZEZvbnREYXRhPihpc0N1c3RvbUZvbnQo
KSk7CisgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrKQorICAgICAgICBt
X2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9u
dERlc2NyaXB0aW9uLCBlbXBoYXNpc01hcmtGb250U2l6ZU11bHRpcGxpZXIpOworCisgICAgcmV0
dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcms7Cit9CisKK1Bhc3NSZWZQdHI8U2lt
cGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpicm9rZW5JZGVvZ3JhcGhGb250RGF0YSgpIGNv
bnN0Cit7CisgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKKyAgICAgICAgbV9kZXJpdmVkRm9u
dERhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPERlcml2ZWRGb250RGF0YT4oaXNDdXN0b21Gb250KCkp
OworICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEtPmJyb2tlbklkZW9ncmFwaCkgeworICAgICAg
ICBtX2Rlcml2ZWRGb250RGF0YS0+YnJva2VuSWRlb2dyYXBoID0gY3JlYXRlKG1fcGxhdGZvcm1E
YXRhLCBpc0N1c3RvbUZvbnQoKSwgZmFsc2UpOworICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+
YnJva2VuSWRlb2dyYXBoLT5tX2lzQnJva2VuSWRlb2dyYXBoRmFsbGJhY2sgPSB0cnVlOworICAg
IH0KKyAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPmJyb2tlbklkZW9ncmFwaDsKK30KKwor
UGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6Om5vblN5bnRoZXRpY0l0
YWxpY0ZvbnREYXRhKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQorICAg
ICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8RGVyaXZlZEZvbnREYXRh
Pihpc0N1c3RvbUZvbnQoKSk7CisgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+bm9uU3ludGhl
dGljSXRhbGljKSB7CisgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEgbm9uU3ludGhldGljSXRhbGlj
Rm9udFBsYXRmb3JtRGF0YShtX3BsYXRmb3JtRGF0YSk7CisjaWYgUExBVEZPUk0oQ09DT0EpCisg
ICAgICAgIG5vblN5bnRoZXRpY0l0YWxpY0ZvbnRQbGF0Zm9ybURhdGEubV9zeW50aGV0aWNPYmxp
cXVlID0gZmFsc2U7CisjZW5kaWYKKyAgICAgICAgbV9kZXJpdmVkRm9udERhdGEtPm5vblN5bnRo
ZXRpY0l0YWxpYyA9IGNyZWF0ZShub25TeW50aGV0aWNJdGFsaWNGb250UGxhdGZvcm1EYXRhLCBp
c0N1c3RvbUZvbnQoKSk7CisgICAgfQorICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+bm9u
U3ludGhldGljSXRhbGljOworfQorCisjaWZuZGVmIE5ERUJVRworU3RyaW5nIFNpbXBsZUZvbnRE
YXRhOjpkZXNjcmlwdGlvbigpIGNvbnN0Cit7CisgICAgaWYgKGlzU1ZHRm9udCgpKQorICAgICAg
ICByZXR1cm4gIltTVkcgZm9udF0iOworICAgIGlmIChpc0N1c3RvbUZvbnQoKSkKKyAgICAgICAg
cmV0dXJuICJbY3VzdG9tIGZvbnRdIjsKKworICAgIHJldHVybiBwbGF0Zm9ybURhdGEoKS5kZXNj
cmlwdGlvbigpOworfQorI2VuZGlmCisKK2NvbnN0IE9wZW5UeXBlTWF0aERhdGEqIFNpbXBsZUZv
bnREYXRhOjptYXRoRGF0YSgpIGNvbnN0Cit7CisgICAgaWYgKG1faXNMb2FkaW5nKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoIW1fbWF0aERhdGEpIHsKKyAgICAgICAgbV9tYXRo
RGF0YSA9IE9wZW5UeXBlTWF0aERhdGE6OmNyZWF0ZShtX3BsYXRmb3JtRGF0YSk7CisgICAgICAg
IGlmICghbV9tYXRoRGF0YS0+aGFzTWF0aERhdGEoKSkKKyAgICAgICAgICAgIG1fbWF0aERhdGEu
Y2xlYXIoKTsKKyAgICB9CisgICAgcmV0dXJuIG1fbWF0aERhdGEuZ2V0KCk7Cit9CisKK1NpbXBs
ZUZvbnREYXRhOjpEZXJpdmVkRm9udERhdGE6On5EZXJpdmVkRm9udERhdGEoKQoreworfQorCitQ
YXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlU2NhbGVkRm9u
dERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNjYWxl
RmFjdG9yKSBjb25zdAoreworICAgIGlmIChpc1NWR0ZvbnQoKSkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICByZXR1cm4gcGxhdGZvcm1DcmVhdGVTY2FsZWRGb250RGF0YShmb250RGVz
Y3JpcHRpb24sIHNjYWxlRmFjdG9yKTsKK30KKworYm9vbCBTaW1wbGVGb250RGF0YTo6YXBwbHlU
cmFuc2Zvcm1zKEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgR2x5cGhCdWZmZXJBZHZhbmNlKiBh
ZHZhbmNlcywgc2l6ZV90IGdseXBoQ291bnQsIFR5cGVzZXR0aW5nRmVhdHVyZXMgdHlwZXNldHRp
bmdGZWF0dXJlcykgY29uc3QKK3sKKyAgICAvLyBXZSBuZWVkIHRvIGhhbmRsZSB0cmFuc2Zvcm1z
IG9uIFNWRyBmb250cyBpbnRlcm5hbGx5LCBzaW5jZSB0aGV5IGFyZSByZW5kZXJlZCBpbnRlcm5h
bGx5LgorICAgIEFTU0VSVCghaXNTVkdGb250KCkpOworI2lmIFBMQVRGT1JNKElPUykgfHwgKFBM
QVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+IDEwODApCisg
ICAgQ1RGb250VHJhbnNmb3JtT3B0aW9ucyBvcHRpb25zID0gKHR5cGVzZXR0aW5nRmVhdHVyZXMg
JiBLZXJuaW5nID8ga0NURm9udFRyYW5zZm9ybUFwcGx5UG9zaXRpb25pbmcgOiAwKSB8ICh0eXBl
c2V0dGluZ0ZlYXR1cmVzICYgTGlnYXR1cmVzID8ga0NURm9udFRyYW5zZm9ybUFwcGx5U2hhcGlu
ZyA6IDApOworICAgIHJldHVybiBDVEZvbnRUcmFuc2Zvcm1HbHlwaHMobV9wbGF0Zm9ybURhdGEu
Y3RGb250KCksIGdseXBocywgcmVpbnRlcnByZXRfY2FzdDxDR1NpemUqPihhZHZhbmNlcyksIGds
eXBoQ291bnQsIG9wdGlvbnMpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZ2x5cGhzKTsKKyAg
ICBVTlVTRURfUEFSQU0oYWR2YW5jZXMpOworICAgIFVOVVNFRF9QQVJBTShnbHlwaENvdW50KTsK
KyAgICBVTlVTRURfUEFSQU0odHlwZXNldHRpbmdGZWF0dXJlcyk7CisgICAgcmV0dXJuIGZhbHNl
OworI2VuZGlmCit9CisKKy8vIEZvbnREYXRhcyBhcmUgbm90IHJlZmNvdW50ZWQgdG8gYXZvaWQg
Y3ljbGVzLgordHlwZWRlZiBIYXNoTWFwPHN0ZDo6cGFpcjxVQ2hhcjMyLCB1bnNpZ25lZD4sIFNp
bXBsZUZvbnREYXRhKj4gQ2hhcmFjdGVyRmFsbGJhY2tNYXA7Cit0eXBlZGVmIEhhc2hNYXA8Y29u
c3QgU2ltcGxlRm9udERhdGEqLCBDaGFyYWN0ZXJGYWxsYmFja01hcD4gU3lzdGVtRmFsbGJhY2tD
YWNoZTsKKworc3RhdGljIFN5c3RlbUZhbGxiYWNrQ2FjaGUmIHN5c3RlbUZhbGxiYWNrQ2FjaGUo
KQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTeXN0ZW1GYWxsYmFja0NhY2hlPiBtYXA7
CisgICAgcmV0dXJuIG1hcC5nZXQoKTsKK30KKworUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1w
bGVGb250RGF0YTo6c3lzdGVtRmFsbGJhY2tGb250RGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGNo
YXJhY3RlciwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgYm9vbCBpc0ZvclBs
YXRmb3JtRm9udCkgY29uc3QKK3sKKyAgICBhdXRvIGZvbnRBZGRSZXN1bHQgPSBzeXN0ZW1GYWxs
YmFja0NhY2hlKCkuYWRkKHRoaXMsIENoYXJhY3RlckZhbGxiYWNrTWFwKCkpOworCisgICAgYXV0
byBrZXkgPSBzdGQ6Om1ha2VfcGFpcihjaGFyYWN0ZXIsIGlzRm9yUGxhdGZvcm1Gb250KTsKKyAg
ICBhdXRvIGNoYXJhY3RlckFkZFJlc3VsdCA9IGZvbnRBZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVl
LmFkZChrZXksIG51bGxwdHIpOworCisgICAgU2ltcGxlRm9udERhdGEqJiBmYWxsYmFja0ZvbnRE
YXRhID0gY2hhcmFjdGVyQWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKKworICAgIGlmICghZmFs
bGJhY2tGb250RGF0YSkgeworICAgICAgICBVQ2hhciBjb2RlVW5pdHNbMl07CisgICAgICAgIGlu
dCBjb2RlVW5pdHNMZW5ndGg7CisgICAgICAgIGlmIChVX0lTX0JNUChjaGFyYWN0ZXIpKSB7Cisg
ICAgICAgICAgICBjb2RlVW5pdHNbMF0gPSBGb250Q2FzY2FkZTo6bm9ybWFsaXplU3BhY2VzKGNo
YXJhY3Rlcik7CisgICAgICAgICAgICBjb2RlVW5pdHNMZW5ndGggPSAxOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgY29kZVVuaXRzWzBdID0gVTE2X0xFQUQoY2hhcmFjdGVyKTsKKyAg
ICAgICAgICAgIGNvZGVVbml0c1sxXSA9IFUxNl9UUkFJTChjaGFyYWN0ZXIpOworICAgICAgICAg
ICAgY29kZVVuaXRzTGVuZ3RoID0gMjsKKyAgICAgICAgfQorCisgICAgICAgIGZhbGxiYWNrRm9u
dERhdGEgPSBmb250Q2FjaGUoKS5zeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoZGVzY3JpcHRp
b24sIHRoaXMsIGlzRm9yUGxhdGZvcm1Gb250LCBjb2RlVW5pdHMsIGNvZGVVbml0c0xlbmd0aCku
Z2V0KCk7CisgICAgICAgIGlmIChmYWxsYmFja0ZvbnREYXRhKQorICAgICAgICAgICAgZmFsbGJh
Y2tGb250RGF0YS0+bV9pc1VzZWRJblN5c3RlbUZhbGxiYWNrQ2FjaGUgPSB0cnVlOworICAgIH0K
KworICAgIHJldHVybiBmYWxsYmFja0ZvbnREYXRhOworfQorCit2b2lkIFNpbXBsZUZvbnREYXRh
OjpyZW1vdmVGcm9tU3lzdGVtRmFsbGJhY2tDYWNoZSgpCit7CisgICAgc3lzdGVtRmFsbGJhY2tD
YWNoZSgpLnJlbW92ZSh0aGlzKTsKKworICAgIGlmICghbV9pc1VzZWRJblN5c3RlbUZhbGxiYWNr
Q2FjaGUpCisgICAgICAgIHJldHVybjsKKworICAgIGZvciAoYXV0byYgY2hhcmFjdGVyTWFwIDog
c3lzdGVtRmFsbGJhY2tDYWNoZSgpLnZhbHVlcygpKSB7CisgICAgICAgIFZlY3RvcjxzdGQ6OnBh
aXI8VUNoYXIzMiwgdW5zaWduZWQ+LCA1MTI+IHRvUmVtb3ZlOworICAgICAgICBmb3IgKGF1dG8m
IGVudHJ5IDogY2hhcmFjdGVyTWFwKSB7CisgICAgICAgICAgICBpZiAoZW50cnkudmFsdWUgPT0g
dGhpcykKKyAgICAgICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQoZW50cnkua2V5KTsKKyAgICAg
ICAgfQorICAgICAgICBmb3IgKGF1dG8mIGtleSA6IHRvUmVtb3ZlKQorICAgICAgICAgICAgY2hh
cmFjdGVyTWFwLnJlbW92ZShrZXkpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAJKHdvcmtp
bmcgY29weSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisjaW5jbHVkZSAiRm9udC5oIgogCiAjaWYg
UExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlO
X1JFUVVJUkVEID4gMTA4MCkKICNpbmNsdWRlICJDb3JlVGV4dFNQSS5oIgpAQCAtNTAsNyArNTAs
NyBAQCB1bnNpZ25lZCBHbHlwaFBhZ2U6OnNfY291bnQgPSAwOwogY29uc3QgZmxvYXQgc21hbGxD
YXBzRm9udFNpemVNdWx0aXBsaWVyID0gMC43ZjsKIGNvbnN0IGZsb2F0IGVtcGhhc2lzTWFya0Zv
bnRTaXplTXVsdGlwbGllciA9IDAuNWY7CiAKLVNpbXBsZUZvbnREYXRhOjpTaW1wbGVGb250RGF0
YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEsIGJvb2wgaXNDdXN0b21Gb250
LCBib29sIGlzTG9hZGluZywgYm9vbCBpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKQorRm9udDo6
Rm9udChjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEsIGJvb2wgaXNDdXN0b21G
b250LCBib29sIGlzTG9hZGluZywgYm9vbCBpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKQogICAg
IDogbV9tYXhDaGFyV2lkdGgoLTEpCiAgICAgLCBtX2F2Z0NoYXJXaWR0aCgtMSkKICAgICAsIG1f
cGxhdGZvcm1EYXRhKHBsYXRmb3JtRGF0YSkKQEAgLTc2LDcgKzc2LDcgQEAgU2ltcGxlRm9udERh
dGE6OlNpbXBsZUZvbnREYXRhKGNvbnN0IEZvbgogI2VuZGlmCiB9CiAKLVNpbXBsZUZvbnREYXRh
OjpTaW1wbGVGb250RGF0YShzdGQ6OnVuaXF1ZV9wdHI8U1ZHRGF0YT4gc3ZnRGF0YSwgZmxvYXQg
Zm9udFNpemUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpCitGb250
OjpGb250KHN0ZDo6dW5pcXVlX3B0cjxTVkdEYXRhPiBzdmdEYXRhLCBmbG9hdCBmb250U2l6ZSwg
Ym9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYykKICAgICA6IG1fcGxhdGZv
cm1EYXRhKEZvbnRQbGF0Zm9ybURhdGEoZm9udFNpemUsIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRp
Y0l0YWxpYykpCiAgICAgLCBtX3N2Z0RhdGEoV1RGOjptb3ZlKHN2Z0RhdGEpKQogICAgICwgbV90
cmVhdEFzRml4ZWRQaXRjaChmYWxzZSkKQEAgLTkzLDExICs5MywxMSBAQCBTaW1wbGVGb250RGF0
YTo6U2ltcGxlRm9udERhdGEoc3RkOjp1bmlxCiAgICAgLCBtX3Nob3VsZE5vdEJlVXNlZEZvckFy
YWJpYyhmYWxzZSkKICNlbmRpZgogewotICAgIG1fc3ZnRGF0YS0+aW5pdGlhbGl6ZUZvbnREYXRh
KHRoaXMsIGZvbnRTaXplKTsKKyAgICBtX3N2Z0RhdGEtPmluaXRpYWxpemVGb250KHRoaXMsIGZv
bnRTaXplKTsKIH0KIAogLy8gRXN0aW1hdGVzIG9mIGF2Z0NoYXJXaWR0aCBhbmQgbWF4Q2hhcldp
ZHRoIGZvciBwbGF0Zm9ybXMgdGhhdCBkb24ndCBzdXBwb3J0IGFjY2Vzc2luZyB0aGVzZSB2YWx1
ZXMgZnJvbSB0aGUgZm9udC4KLXZvaWQgU2ltcGxlRm9udERhdGE6OmluaXRDaGFyV2lkdGhzKCkK
K3ZvaWQgRm9udDo6aW5pdENoYXJXaWR0aHMoKQogewogICAgIGF1dG8qIGdseXBoUGFnZVplcm8g
PSBnbHlwaFBhZ2UoMCk7CiAKQEAgLTExNyw3ICsxMTcsNyBAQCB2b2lkIFNpbXBsZUZvbnREYXRh
Ojppbml0Q2hhcldpZHRocygpCiAgICAgICAgIG1fbWF4Q2hhcldpZHRoID0gc3RkOjptYXgobV9h
dmdDaGFyV2lkdGgsIG1fZm9udE1ldHJpY3MuZmxvYXRBc2NlbnQoKSk7CiB9CiAKLXZvaWQgU2lt
cGxlRm9udERhdGE6OnBsYXRmb3JtR2x5cGhJbml0KCkKK3ZvaWQgRm9udDo6cGxhdGZvcm1HbHlw
aEluaXQoKQogewogICAgIGF1dG8qIGdseXBoUGFnZVplcm8gPSBnbHlwaFBhZ2UoMCk7CiAgICAg
aWYgKCFnbHlwaFBhZ2VaZXJvKSB7CkBAIC0xMzYsNyArMTM2LDcgQEAgdm9pZCBTaW1wbGVGb250
RGF0YTo6cGxhdGZvcm1HbHlwaEluaXQoKQogCiAgICAgLy8gTmFzdHkgaGFjayB0byBkZXRlcm1p
bmUgaWYgd2Ugc2hvdWxkIHJvdW5kIG9yIGNlaWwgc3BhY2Ugd2lkdGhzLgogICAgIC8vIElmIHRo
ZSBmb250IGlzIG1vbm9zcGFjZSBvciBmYWtlIG1vbm9zcGFjZSB3ZSBjZWlsIHRvIGVuc3VyZSB0
aGF0IAotICAgIC8vIGV2ZXJ5IGNoYXJhY3RlciBhbmQgdGhlIHNwYWNlIGFyZSB0aGUgc2FtZSB3
aWR0aC4gIE90aGVyd2lzZSB3ZSByb3VuZC4KKyAgICAvLyBldmVyeSBjaGFyYWN0ZXIgYW5kIHRo
ZSBzcGFjZSBhcmUgdGhlIHNhbWUgd2lkdGguIE90aGVyd2lzZSB3ZSByb3VuZC4KICAgICBtX3Nw
YWNlR2x5cGggPSBnbHlwaFBhZ2VaZXJvLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoJyAnKS5nbHlw
aDsKICAgICBmbG9hdCB3aWR0aCA9IHdpZHRoRm9yR2x5cGgobV9zcGFjZUdseXBoKTsKICAgICBt
X3NwYWNlV2lkdGggPSB3aWR0aDsKQEAgLTE0NywzNyArMTQ3LDM3IEBAIHZvaWQgU2ltcGxlRm9u
dERhdGE6OnBsYXRmb3JtR2x5cGhJbml0KCkKIAogICAgIC8vIEZvcmNlIHRoZSBnbHlwaCBmb3Ig
WkVSTyBXSURUSCBTUEFDRSB0byBoYXZlIHplcm8gd2lkdGgsIHVubGVzcyBpdCBpcyBzaGFyZWQg
d2l0aCBTUEFDRS4KICAgICAvLyBIZWx2ZXRpY2EgaXMgYW4gZXhhbXBsZSBvZiBhIG5vbi16ZXJv
IHdpZHRoIFpFUk8gV0lEVEggU1BBQ0UgZ2x5cGguCi0gICAgLy8gU2VlIDxodHRwOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzE3OD4gYW5kIFNpbXBsZUZvbnREYXRhOjppc1pl
cm9XaWR0aFNwYWNlR2x5cGgoKQorICAgIC8vIFNlZSA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTMxNzg+IGFuZCBGb250Ojppc1plcm9XaWR0aFNwYWNlR2x5cGgoKQog
ICAgIGlmIChtX3plcm9XaWR0aFNwYWNlR2x5cGggPT0gbV9zcGFjZUdseXBoKQogICAgICAgICBt
X3plcm9XaWR0aFNwYWNlR2x5cGggPSAwOwogfQogCi1TaW1wbGVGb250RGF0YTo6flNpbXBsZUZv
bnREYXRhKCkKK0ZvbnQ6On5Gb250KCkKIHsKICAgICByZW1vdmVGcm9tU3lzdGVtRmFsbGJhY2tD
YWNoZSgpOwogfQogCi1zdGF0aWMgYm9vbCBmaWxsR2x5cGhQYWdlKEdseXBoUGFnZSYgcGFnZVRv
RmlsbCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIsIHVu
c2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQorc3Rh
dGljIGJvb2wgZmlsbEdseXBoUGFnZShHbHlwaFBhZ2UmIHBhZ2VUb0ZpbGwsIHVuc2lnbmVkIG9m
ZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5n
dGgsIGNvbnN0IEZvbnQqIGZvbnQpCiB7CiAjaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICBpZiAo
YXV0byogc3ZnRGF0YSA9IGZvbnREYXRhLT5zdmdEYXRhKCkpCi0gICAgICAgIHJldHVybiBzdmdE
YXRhLT5maWxsU1ZHR2x5cGhQYWdlKCZwYWdlVG9GaWxsLCBvZmZzZXQsIGxlbmd0aCwgYnVmZmVy
LCBidWZmZXJMZW5ndGgsIGZvbnREYXRhKTsKKyAgICBpZiAoYXV0byogc3ZnRGF0YSA9IGZvbnQt
PnN2Z0RhdGEoKSkKKyAgICAgICAgcmV0dXJuIHN2Z0RhdGEtPmZpbGxTVkdHbHlwaFBhZ2UoJnBh
Z2VUb0ZpbGwsIG9mZnNldCwgbGVuZ3RoLCBidWZmZXIsIGJ1ZmZlckxlbmd0aCwgZm9udCk7CiAj
ZW5kaWYKLSAgICBib29sIGhhc0dseXBocyA9IHBhZ2VUb0ZpbGwuZmlsbChvZmZzZXQsIGxlbmd0
aCwgYnVmZmVyLCBidWZmZXJMZW5ndGgsIGZvbnREYXRhKTsKKyAgICBib29sIGhhc0dseXBocyA9
IHBhZ2VUb0ZpbGwuZmlsbChvZmZzZXQsIGxlbmd0aCwgYnVmZmVyLCBidWZmZXJMZW5ndGgsIGZv
bnQpOwogI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKLSAgICBpZiAoaGFzR2x5cGhzICYm
IGZvbnREYXRhLT52ZXJ0aWNhbERhdGEoKSkKLSAgICAgICAgZm9udERhdGEtPnZlcnRpY2FsRGF0
YSgpLT5zdWJzdGl0dXRlV2l0aFZlcnRpY2FsR2x5cGhzKGZvbnREYXRhLCAmcGFnZVRvRmlsbCwg
b2Zmc2V0LCBsZW5ndGgpOworICAgIGlmIChoYXNHbHlwaHMgJiYgZm9udC0+dmVydGljYWxEYXRh
KCkpCisgICAgICAgIGZvbnQtPnZlcnRpY2FsRGF0YSgpLT5zdWJzdGl0dXRlV2l0aFZlcnRpY2Fs
R2x5cGhzKGZvbnQsICZwYWdlVG9GaWxsLCBvZmZzZXQsIGxlbmd0aCk7CiAjZW5kaWYKICAgICBy
ZXR1cm4gaGFzR2x5cGhzOwogfQogCi1zdGF0aWMgUmVmUHRyPEdseXBoUGFnZT4gY3JlYXRlQW5k
RmlsbEdseXBoUGFnZSh1bnNpZ25lZCBwYWdlTnVtYmVyLCBjb25zdCBTaW1wbGVGb250RGF0YSog
Zm9udERhdGEpCitzdGF0aWMgUmVmUHRyPEdseXBoUGFnZT4gY3JlYXRlQW5kRmlsbEdseXBoUGFn
ZSh1bnNpZ25lZCBwYWdlTnVtYmVyLCBjb25zdCBGb250KiBmb250KQogewogI2lmIFBMQVRGT1JN
KElPUykKICAgICAvLyBGSVhNRTogVGltZXMgTmV3IFJvbWFuIGNvbnRhaW5zIEFyYWJpYyBnbHlw
aHMsIGJ1dCBDb3JlIFRleHQgZG9lc24ndCBrbm93IGhvdyB0byBzaGFwZSB0aGVtLiBTZWUgPHJk
YXI6Ly9wcm9ibGVtLzk4MjM5NzU+LgotICAgIC8vIE9uY2Ugd2UgaGF2ZSB0aGUgZml4IGZvciA8
cmRhcjovL3Byb2JsZW0vOTgyMzk3NT4gdGhlbiByZW1vdmUgdGhpcyBjb2RlIHRvZ2V0aGVyIHdp
dGggU2ltcGxlRm9udERhdGE6OnNob3VsZE5vdEJlVXNlZEZvckFyYWJpYygpCisgICAgLy8gT25j
ZSB3ZSBoYXZlIHRoZSBmaXggZm9yIDxyZGFyOi8vcHJvYmxlbS85ODIzOTc1PiB0aGVuIHJlbW92
ZSB0aGlzIGNvZGUgdG9nZXRoZXIgd2l0aCBGb250OjpzaG91bGROb3RCZVVzZWRGb3JBcmFiaWMo
KQogICAgIC8vIGluIDxyZGFyOi8vcHJvYmxlbS8xMjA5NjgzNT4uCi0gICAgaWYgKHBhZ2VOdW1i
ZXIgPT0gNiAmJiBmb250RGF0YS0+c2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKCkpCisgICAgaWYg
KHBhZ2VOdW1iZXIgPT0gNiAmJiBmb250LT5zaG91bGROb3RCZVVzZWRGb3JBcmFiaWMoKSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAjZW5kaWYKIApAQCAtMTkwLDcgKzE5MCw3IEBAIHN0YXRp
YyBSZWZQdHI8R2x5cGhQYWdlPiBjcmVhdGVBbmRGaWxsR2wKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IEdseXBoUGFnZTo6c2l6ZTsgaSsrKQogICAgICAgICAgICAgYnVmZmVyW2ld
ID0gc3RhcnQgKyBpOwogCi0gICAgICAgIGlmIChzdGFydCA9PSAwKSB7CisgICAgICAgIGlmICgh
c3RhcnQpIHsKICAgICAgICAgICAgIC8vIENvbnRyb2wgY2hhcmFjdGVycyBtdXN0IG5vdCByZW5k
ZXIgYXQgYWxsLgogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDB4MjA7ICsr
aSkKICAgICAgICAgICAgICAgICBidWZmZXJbaV0gPSB6ZXJvV2lkdGhTcGFjZTsKQEAgLTIzNSwx
MiArMjM1LDEyIEBAIHN0YXRpYyBSZWZQdHI8R2x5cGhQYWdlPiBjcmVhdGVBbmRGaWxsR2wKICAg
ICAvLyBTdWNjZXNzIGlzIG5vdCBndWFyYW50ZWVkLiBGb3IgZXhhbXBsZSwgVGltZXMgZmFpbHMg
dG8gZmlsbCBwYWdlIDI2MCwgZ2l2aW5nIGdseXBoIGRhdGEKICAgICAvLyBmb3Igb25seSAxMjgg
b3V0IG9mIDI1NiBjaGFyYWN0ZXJzLgogICAgIFJlZlB0cjxHbHlwaFBhZ2U+IGdseXBoUGFnZTsK
LSAgICBpZiAoR2x5cGhQYWdlOjptYXlVc2VNaXhlZEZvbnREYXRhV2hlbkZpbGxpbmcoYnVmZmVy
LCBidWZmZXJMZW5ndGgsIGZvbnREYXRhKSkKLSAgICAgICAgZ2x5cGhQYWdlID0gR2x5cGhQYWdl
OjpjcmVhdGVGb3JNaXhlZEZvbnREYXRhKCk7CisgICAgaWYgKEdseXBoUGFnZTo6bWF5VXNlTWl4
ZWRGb250c1doZW5GaWxsaW5nKGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCBmb250KSkKKyAgICAgICAg
Z2x5cGhQYWdlID0gR2x5cGhQYWdlOjpjcmVhdGVGb3JNaXhlZEZvbnRzKCk7CiAgICAgZWxzZQot
ICAgICAgICBnbHlwaFBhZ2UgPSBHbHlwaFBhZ2U6OmNyZWF0ZUZvclNpbmdsZUZvbnREYXRhKGZv
bnREYXRhKTsKKyAgICAgICAgZ2x5cGhQYWdlID0gR2x5cGhQYWdlOjpjcmVhdGVGb3JTaW5nbGVG
b250KGZvbnQpOwogCi0gICAgYm9vbCBoYXZlR2x5cGhzID0gZmlsbEdseXBoUGFnZSgqZ2x5cGhQ
YWdlLCAwLCBHbHlwaFBhZ2U6OnNpemUsIGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCBmb250RGF0YSk7
CisgICAgYm9vbCBoYXZlR2x5cGhzID0gZmlsbEdseXBoUGFnZSgqZ2x5cGhQYWdlLCAwLCBHbHlw
aFBhZ2U6OnNpemUsIGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCBmb250KTsKICAgICBpZiAoIWhhdmVH
bHlwaHMpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0yNDgsOSArMjQ4LDkgQEAgc3Rh
dGljIFJlZlB0cjxHbHlwaFBhZ2U+IGNyZWF0ZUFuZEZpbGxHbAogICAgIHJldHVybiBnbHlwaFBh
Z2U7CiB9CiAKLWNvbnN0IEdseXBoUGFnZSogU2ltcGxlRm9udERhdGE6OmdseXBoUGFnZSh1bnNp
Z25lZCBwYWdlTnVtYmVyKSBjb25zdAorY29uc3QgR2x5cGhQYWdlKiBGb250OjpnbHlwaFBhZ2Uo
dW5zaWduZWQgcGFnZU51bWJlcikgY29uc3QKIHsKLSAgICBpZiAocGFnZU51bWJlciA9PSAwKSB7
CisgICAgaWYgKCFwYWdlTnVtYmVyKSB7CiAgICAgICAgIGlmICghbV9nbHlwaFBhZ2VaZXJvKQog
ICAgICAgICAgICAgbV9nbHlwaFBhZ2VaZXJvID0gY3JlYXRlQW5kRmlsbEdseXBoUGFnZSgwLCB0
aGlzKTsKICAgICAgICAgcmV0dXJuIG1fZ2x5cGhQYWdlWmVyby5nZXQoKTsKQEAgLTI2Miw3ICsy
NjIsNyBAQCBjb25zdCBHbHlwaFBhZ2UqIFNpbXBsZUZvbnREYXRhOjpnbHlwaFBhCiAgICAgcmV0
dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7CiB9CiAKLUdseXBoIFNpbXBsZUZv
bnREYXRhOjpnbHlwaEZvckNoYXJhY3RlcihVQ2hhcjMyIGNoYXJhY3RlcikgY29uc3QKK0dseXBo
IEZvbnQ6OmdseXBoRm9yQ2hhcmFjdGVyKFVDaGFyMzIgY2hhcmFjdGVyKSBjb25zdAogewogICAg
IGF1dG8qIHBhZ2UgPSBnbHlwaFBhZ2UoY2hhcmFjdGVyIC8gR2x5cGhQYWdlOjpzaXplKTsKICAg
ICBpZiAoIXBhZ2UpCkBAIC0yNzAsNyArMjcwLDcgQEAgR2x5cGggU2ltcGxlRm9udERhdGE6Omds
eXBoRm9yQ2hhcmFjdGVyKAogICAgIHJldHVybiBwYWdlLT5nbHlwaEF0KGNoYXJhY3RlciAlIEds
eXBoUGFnZTo6c2l6ZSk7CiB9CiAKLUdseXBoRGF0YSBTaW1wbGVGb250RGF0YTo6Z2x5cGhEYXRh
Rm9yQ2hhcmFjdGVyKFVDaGFyMzIgY2hhcmFjdGVyKSBjb25zdAorR2x5cGhEYXRhIEZvbnQ6Omds
eXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGNoYXJhY3RlcikgY29uc3QKIHsKICAgICBhdXRv
KiBwYWdlID0gZ2x5cGhQYWdlKGNoYXJhY3RlciAvIEdseXBoUGFnZTo6c2l6ZSk7CiAgICAgaWYg
KCFwYWdlKQpAQCAtMjc4LDcgKzI3OCw3IEBAIEdseXBoRGF0YSBTaW1wbGVGb250RGF0YTo6Z2x5
cGhEYXRhRm9yQ2gKICAgICByZXR1cm4gcGFnZS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJh
Y3Rlcik7CiB9CiAKLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjp2
ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250RGF0YSgpIGNvbnN0CitQYXNzUmVmUHRyPEZvbnQ+
IEZvbnQ6OnZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbkZvbnQoKSBjb25zdAogewogICAgIGlmICgh
bV9kZXJpdmVkRm9udERhdGEpCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gc3RkOjptYWtl
X3VuaXF1ZTxEZXJpdmVkRm9udERhdGE+KGlzQ3VzdG9tRm9udCgpKTsKQEAgLTI5MCw3ICsyOTAs
NyBAQCBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0CiAgICAgcmV0dXJu
IG1fZGVyaXZlZEZvbnREYXRhLT52ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb247CiB9CiAKLVBhc3NS
ZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjp1cHJpZ2h0T3JpZW50YXRpb25G
b250RGF0YSgpIGNvbnN0CitQYXNzUmVmUHRyPEZvbnQ+IEZvbnQ6OnVwcmlnaHRPcmllbnRhdGlv
bkZvbnQoKSBjb25zdAogewogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEpCiAgICAgICAgIG1f
ZGVyaXZlZEZvbnREYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxEZXJpdmVkRm9udERhdGE+KGlzQ3Vz
dG9tRm9udCgpKTsKQEAgLTI5OSwyNyArMjk5LDI3IEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERh
dGE+IFNpbXBsZUZvbnREYXQKICAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPnVwcmlnaHRP
cmllbnRhdGlvbjsKIH0KIAotUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERh
dGE6OnNtYWxsQ2Fwc0ZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0
aW9uKSBjb25zdAorUGFzc1JlZlB0cjxGb250PiBGb250OjpzbWFsbENhcHNGb250KGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAogewogICAgIGlmICghbV9kZXJp
dmVkRm9udERhdGEpCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gc3RkOjptYWtlX3VuaXF1
ZTxEZXJpdmVkRm9udERhdGE+KGlzQ3VzdG9tRm9udCgpKTsKICAgICBpZiAoIW1fZGVyaXZlZEZv
bnREYXRhLT5zbWFsbENhcHMpCi0gICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMg
PSBjcmVhdGVTY2FsZWRGb250RGF0YShmb250RGVzY3JpcHRpb24sIHNtYWxsQ2Fwc0ZvbnRTaXpl
TXVsdGlwbGllcik7CisgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMgPSBjcmVh
dGVTY2FsZWRGb250KGZvbnREZXNjcmlwdGlvbiwgc21hbGxDYXBzRm9udFNpemVNdWx0aXBsaWVy
KTsKIAogICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzOwogfQogCi1QYXNz
UmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6ZW1waGFzaXNNYXJrRm9udERh
dGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0CitQYXNzUmVm
UHRyPEZvbnQ+IEZvbnQ6OmVtcGhhc2lzTWFya0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBm
b250RGVzY3JpcHRpb24pIGNvbnN0CiB7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKICAg
ICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPERlcml2ZWRGb250RGF0
YT4oaXNDdXN0b21Gb250KCkpOwogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lz
TWFyaykKLSAgICAgICAgbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyayA9IGNyZWF0ZVNj
YWxlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgZW1waGFzaXNNYXJrRm9udFNpemVNdWx0aXBs
aWVyKTsKKyAgICAgICAgbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyayA9IGNyZWF0ZVNj
YWxlZEZvbnQoZm9udERlc2NyaXB0aW9uLCBlbXBoYXNpc01hcmtGb250U2l6ZU11bHRpcGxpZXIp
OwogCiAgICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcms7CiB9CiAKLVBh
c3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpicm9rZW5JZGVvZ3JhcGhG
b250RGF0YSgpIGNvbnN0CitQYXNzUmVmUHRyPEZvbnQ+IEZvbnQ6OmJyb2tlbklkZW9ncmFwaEZv
bnQoKSBjb25zdAogewogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEpCiAgICAgICAgIG1fZGVy
aXZlZEZvbnREYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxEZXJpdmVkRm9udERhdGE+KGlzQ3VzdG9t
Rm9udCgpKTsKQEAgLTMzMCw3ICszMzAsNyBAQCBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBT
aW1wbGVGb250RGF0CiAgICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5icm9rZW5JZGVvZ3Jh
cGg7CiB9CiAKLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpub25T
eW50aGV0aWNJdGFsaWNGb250RGF0YSgpIGNvbnN0CitQYXNzUmVmUHRyPEZvbnQ+IEZvbnQ6Om5v
blN5bnRoZXRpY0l0YWxpY0ZvbnQoKSBjb25zdAogewogICAgIGlmICghbV9kZXJpdmVkRm9udERh
dGEpCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxEZXJpdmVk
Rm9udERhdGE+KGlzQ3VzdG9tRm9udCgpKTsKQEAgLTM0NSw3ICszNDUsNyBAQCBQYXNzUmVmUHRy
PFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0CiB9CiAKICNpZm5kZWYgTkRFQlVHCi1TdHJp
bmcgU2ltcGxlRm9udERhdGE6OmRlc2NyaXB0aW9uKCkgY29uc3QKK1N0cmluZyBGb250OjpkZXNj
cmlwdGlvbigpIGNvbnN0CiB7CiAgICAgaWYgKGlzU1ZHRm9udCgpKQogICAgICAgICByZXR1cm4g
IltTVkcgZm9udF0iOwpAQCAtMzU2LDcgKzM1Niw3IEBAIFN0cmluZyBTaW1wbGVGb250RGF0YTo6
ZGVzY3JpcHRpb24oKSBjb24KIH0KICNlbmRpZgogCi1jb25zdCBPcGVuVHlwZU1hdGhEYXRhKiBT
aW1wbGVGb250RGF0YTo6bWF0aERhdGEoKSBjb25zdAorY29uc3QgT3BlblR5cGVNYXRoRGF0YSog
Rm9udDo6bWF0aERhdGEoKSBjb25zdAogewogICAgIGlmIChtX2lzTG9hZGluZykKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CkBAIC0zNjgsMTkgKzM2OCwxOSBAQCBjb25zdCBPcGVuVHlwZU1hdGhE
YXRhKiBTaW1wbGVGb250RGF0YTo6CiAgICAgcmV0dXJuIG1fbWF0aERhdGEuZ2V0KCk7CiB9CiAK
LVNpbXBsZUZvbnREYXRhOjpEZXJpdmVkRm9udERhdGE6On5EZXJpdmVkRm9udERhdGEoKQorRm9u
dDo6RGVyaXZlZEZvbnREYXRhOjp+RGVyaXZlZEZvbnREYXRhKCkKIHsKIH0KIAotUGFzc1JlZlB0
cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZVNjYWxlZEZvbnREYXRhKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBzY2FsZUZhY3Rvcikg
Y29uc3QKK1Bhc3NSZWZQdHI8Rm9udD4gRm9udDo6Y3JlYXRlU2NhbGVkRm9udChjb25zdCBGb250
RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0CiB7
CiAgICAgaWYgKGlzU1ZHRm9udCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJl
dHVybiBwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgc2NhbGVG
YWN0b3IpOworICAgIHJldHVybiBwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZvbnQoZm9udERlc2NyaXB0
aW9uLCBzY2FsZUZhY3Rvcik7CiB9CiAKLWJvb2wgU2ltcGxlRm9udERhdGE6OmFwcGx5VHJhbnNm
b3JtcyhHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5j
ZXMsIHNpemVfdCBnbHlwaENvdW50LCBUeXBlc2V0dGluZ0ZlYXR1cmVzIHR5cGVzZXR0aW5nRmVh
dHVyZXMpIGNvbnN0Citib29sIEZvbnQ6OmFwcGx5VHJhbnNmb3JtcyhHbHlwaEJ1ZmZlckdseXBo
KiBnbHlwaHMsIEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHNpemVfdCBnbHlwaENvdW50
LCBUeXBlc2V0dGluZ0ZlYXR1cmVzIHR5cGVzZXR0aW5nRmVhdHVyZXMpIGNvbnN0CiB7CiAgICAg
Ly8gV2UgbmVlZCB0byBoYW5kbGUgdHJhbnNmb3JtcyBvbiBTVkcgZm9udHMgaW50ZXJuYWxseSwg
c2luY2UgdGhleSBhcmUgcmVuZGVyZWQgaW50ZXJuYWxseS4KICAgICBBU1NFUlQoIWlzU1ZHRm9u
dCgpKTsKQEAgLTM5Niw5ICszOTYsOSBAQCBib29sIFNpbXBsZUZvbnREYXRhOjphcHBseVRyYW5z
Zm9ybXMoR2x5CiAjZW5kaWYKIH0KIAotLy8gRm9udERhdGFzIGFyZSBub3QgcmVmY291bnRlZCB0
byBhdm9pZCBjeWNsZXMuCi10eXBlZGVmIEhhc2hNYXA8c3RkOjpwYWlyPFVDaGFyMzIsIHVuc2ln
bmVkPiwgU2ltcGxlRm9udERhdGEqPiBDaGFyYWN0ZXJGYWxsYmFja01hcDsKLXR5cGVkZWYgSGFz
aE1hcDxjb25zdCBTaW1wbGVGb250RGF0YSosIENoYXJhY3RlckZhbGxiYWNrTWFwPiBTeXN0ZW1G
YWxsYmFja0NhY2hlOworLy8gRm9udHMgYXJlIG5vdCByZWYnZCB0byBhdm9pZCBjeWNsZXMuCit0
eXBlZGVmIEhhc2hNYXA8c3RkOjpwYWlyPFVDaGFyMzIsIHVuc2lnbmVkPiwgRm9udCo+IENoYXJh
Y3RlckZhbGxiYWNrTWFwOwordHlwZWRlZiBIYXNoTWFwPGNvbnN0IEZvbnQqLCBDaGFyYWN0ZXJG
YWxsYmFja01hcD4gU3lzdGVtRmFsbGJhY2tDYWNoZTsKIAogc3RhdGljIFN5c3RlbUZhbGxiYWNr
Q2FjaGUmIHN5c3RlbUZhbGxiYWNrQ2FjaGUoKQogewpAQCAtNDA2LDE2ICs0MDYsMTYgQEAgc3Rh
dGljIFN5c3RlbUZhbGxiYWNrQ2FjaGUmIHN5c3RlbUZhbGxiYQogICAgIHJldHVybiBtYXAuZ2V0
KCk7CiB9CiAKLVJlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OnN5c3RlbUZh
bGxiYWNrRm9udERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjaGFyYWN0ZXIsIGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGJvb2wgaXNGb3JQbGF0Zm9ybUZvbnQpIGNvbnN0CitS
ZWZQdHI8Rm9udD4gRm9udDo6c3lzdGVtRmFsbGJhY2tGb250Rm9yQ2hhcmFjdGVyKFVDaGFyMzIg
Y2hhcmFjdGVyLCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBib29sIGlzRm9y
UGxhdGZvcm1Gb250KSBjb25zdAogewogICAgIGF1dG8gZm9udEFkZFJlc3VsdCA9IHN5c3RlbUZh
bGxiYWNrQ2FjaGUoKS5hZGQodGhpcywgQ2hhcmFjdGVyRmFsbGJhY2tNYXAoKSk7CiAKICAgICBh
dXRvIGtleSA9IHN0ZDo6bWFrZV9wYWlyKGNoYXJhY3RlciwgaXNGb3JQbGF0Zm9ybUZvbnQpOwog
ICAgIGF1dG8gY2hhcmFjdGVyQWRkUmVzdWx0ID0gZm9udEFkZFJlc3VsdC5pdGVyYXRvci0+dmFs
dWUuYWRkKGtleSwgbnVsbHB0cik7CiAKLSAgICBTaW1wbGVGb250RGF0YSomIGZhbGxiYWNrRm9u
dERhdGEgPSBjaGFyYWN0ZXJBZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOworICAgIEZvbnQqJiBm
YWxsYmFja0ZvbnQgPSBjaGFyYWN0ZXJBZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogCi0gICAg
aWYgKCFmYWxsYmFja0ZvbnREYXRhKSB7CisgICAgaWYgKCFmYWxsYmFja0ZvbnQpIHsKICAgICAg
ICAgVUNoYXIgY29kZVVuaXRzWzJdOwogICAgICAgICBpbnQgY29kZVVuaXRzTGVuZ3RoOwogICAg
ICAgICBpZiAoVV9JU19CTVAoY2hhcmFjdGVyKSkgewpAQCAtNDI3LDE1ICs0MjcsMTUgQEAgUmVm
UHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6cwogICAgICAgICAgICAgY29kZVVu
aXRzTGVuZ3RoID0gMjsKICAgICAgICAgfQogCi0gICAgICAgIGZhbGxiYWNrRm9udERhdGEgPSBm
b250Q2FjaGUoKS5zeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoZGVzY3JpcHRpb24sIHRoaXMs
IGlzRm9yUGxhdGZvcm1Gb250LCBjb2RlVW5pdHMsIGNvZGVVbml0c0xlbmd0aCkuZ2V0KCk7Ci0g
ICAgICAgIGlmIChmYWxsYmFja0ZvbnREYXRhKQotICAgICAgICAgICAgZmFsbGJhY2tGb250RGF0
YS0+bV9pc1VzZWRJblN5c3RlbUZhbGxiYWNrQ2FjaGUgPSB0cnVlOworICAgICAgICBmYWxsYmFj
a0ZvbnQgPSBmb250Q2FjaGUoKS5zeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoZGVzY3JpcHRp
b24sIHRoaXMsIGlzRm9yUGxhdGZvcm1Gb250LCBjb2RlVW5pdHMsIGNvZGVVbml0c0xlbmd0aCku
Z2V0KCk7CisgICAgICAgIGlmIChmYWxsYmFja0ZvbnQpCisgICAgICAgICAgICBmYWxsYmFja0Zv
bnQtPm1faXNVc2VkSW5TeXN0ZW1GYWxsYmFja0NhY2hlID0gdHJ1ZTsKICAgICB9CiAKLSAgICBy
ZXR1cm4gZmFsbGJhY2tGb250RGF0YTsKKyAgICByZXR1cm4gZmFsbGJhY2tGb250OwogfQogCi12
b2lkIFNpbXBsZUZvbnREYXRhOjpyZW1vdmVGcm9tU3lzdGVtRmFsbGJhY2tDYWNoZSgpCit2b2lk
IEZvbnQ6OnJlbW92ZUZyb21TeXN0ZW1GYWxsYmFja0NhY2hlKCkKIHsKICAgICBzeXN0ZW1GYWxs
YmFja0NhY2hlKCkucmVtb3ZlKHRoaXMpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udC5oCShyZXZpc2lvbiAxNzg2NTApCShmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmg6MTc4NjUwKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzY5
IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIGludGVybmFsIGZvbnQgaW1wbGVt
ZW50YXRpb24uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4LCAyMDEwLCAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4
IFRvcmNoIE1vYmlsZSwgSW5jLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBTaW1wbGVGb250RGF0YV9oCisjZGVmaW5l
IFNpbXBsZUZvbnREYXRhX2gKKworI2luY2x1ZGUgIkZvbnRCYXNlbGluZS5oIgorI2luY2x1ZGUg
IkZvbnRNZXRyaWNzLmgiCisjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgorI2luY2x1ZGUg
IkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCisjaW5jbHVkZSAiR2x5cGhN
ZXRyaWNzTWFwLmgiCisjaW5jbHVkZSAiR2x5cGhQYWdlLmgiCisjaW5jbHVkZSAiT3BlblR5cGVN
YXRoRGF0YS5oIgorI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKKyNpbmNsdWRlICJPcGVu
VHlwZVZlcnRpY2FsRGF0YS5oIgorI2VuZGlmCisjaW5jbHVkZSAiVHlwZXNldHRpbmdGZWF0dXJl
cy5oIgorI2luY2x1ZGUgPHd0Zi9UeXBlQ2FzdHMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdIYXNoLmg+CisKKyNpZiBQTEFURk9STShDT0NPQSkKKyNpbmNsdWRlICJXZWJDb3JlU3lzdGVt
SW50ZXJmYWNlLmgiCisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2VuZGlmCisKKyNpZiBQ
TEFURk9STShXSU4pCisjaW5jbHVkZSA8dXNwMTAuaD4KKyNlbmRpZgorCisjaWYgVVNFKENBSVJP
KQorI2luY2x1ZGUgPGNhaXJvLmg+CisjZW5kaWYKKworI2lmIFVTRShDRykKKyNpbmNsdWRlIDxX
ZWJDb3JlL0NvcmVHcmFwaGljc1NQSS5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgR2x5cGhQYWdlOworY2xhc3MgRm9udERlc2NyaXB0aW9uOworY2xhc3MgU2hhcmVk
QnVmZmVyOworc3RydWN0IEdseXBoRGF0YTsKK3N0cnVjdCBXaWR0aEl0ZXJhdG9yOworCitlbnVt
IEZvbnREYXRhVmFyaWFudCB7IEF1dG9WYXJpYW50LCBOb3JtYWxWYXJpYW50LCBTbWFsbENhcHNW
YXJpYW50LCBFbXBoYXNpc01hcmtWYXJpYW50LCBCcm9rZW5JZGVvZ3JhcGhWYXJpYW50IH07Citl
bnVtIFBpdGNoIHsgVW5rbm93blBpdGNoLCBGaXhlZFBpdGNoLCBWYXJpYWJsZVBpdGNoIH07CisK
K2NsYXNzIFNpbXBsZUZvbnREYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8U2ltcGxlRm9udERhdGE+
IHsKK3B1YmxpYzoKKyAgICBjbGFzcyBTVkdEYXRhIHsKKyAgICAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIH5TVkdEYXRhKCkgeyB9CisK
KyAgICAgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVGb250RGF0YShTaW1wbGVGb250RGF0YSos
IGZsb2F0IGZvbnRTaXplKSA9IDA7CisgICAgICAgIHZpcnR1YWwgZmxvYXQgd2lkdGhGb3JTVkdH
bHlwaChHbHlwaCwgZmxvYXQgZm9udFNpemUpIGNvbnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCBi
b29sIGZpbGxTVkdHbHlwaFBhZ2UoR2x5cGhQYWdlKiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25l
ZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgU2lt
cGxlRm9udERhdGEqKSBjb25zdCA9IDA7CisgICAgfTsKKworICAgIC8vIFVzZWQgdG8gY3JlYXRl
IHBsYXRmb3JtIGZvbnRzLgorICAgIHN0YXRpYyBSZWY8U2ltcGxlRm9udERhdGE+IGNyZWF0ZShj
b25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEsIGJvb2wgaXNDdXN0b21Gb250ID0g
ZmFsc2UsIGJvb2wgaXNMb2FkaW5nID0gZmFsc2UsIGJvb2wgaXNUZXh0T3JpZW50YXRpb25GYWxs
YmFjayA9IGZhbHNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2ltcGxl
Rm9udERhdGEocGxhdGZvcm1EYXRhLCBpc0N1c3RvbUZvbnQsIGlzTG9hZGluZywgaXNUZXh0T3Jp
ZW50YXRpb25GYWxsYmFjaykpOworICAgIH0KKworICAgIC8vIFVzZWQgdG8gY3JlYXRlIFNWRyBG
b250cy4KKyAgICBzdGF0aWMgUmVmPFNpbXBsZUZvbnREYXRhPiBjcmVhdGUoc3RkOjp1bmlxdWVf
cHRyPFNWR0RhdGE+IHN2Z0RhdGEsIGZsb2F0IGZvbnRTaXplLCBib29sIHN5bnRoZXRpY0JvbGQs
IGJvb2wgc3ludGhldGljSXRhbGljKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgU2ltcGxlRm9udERhdGEoV1RGOjptb3ZlKHN2Z0RhdGEpLCBmb250U2l6ZSwgc3ludGhldGlj
Qm9sZCwgc3ludGhldGljSXRhbGljKSk7CisgICAgfQorCisgICAgflNpbXBsZUZvbnREYXRhKCk7
CisKKyAgICBzdGF0aWMgY29uc3QgU2ltcGxlRm9udERhdGEqIHN5c3RlbUZhbGxiYWNrKCkgeyBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBTaW1wbGVGb250RGF0YSo+KC0xKTsgfQorCisg
ICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhKCkgY29uc3QgeyByZXR1cm4g
bV9wbGF0Zm9ybURhdGE7IH0KKyAgICBjb25zdCBPcGVuVHlwZU1hdGhEYXRhKiBtYXRoRGF0YSgp
IGNvbnN0OworI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKKyAgICBjb25zdCBPcGVuVHlw
ZVZlcnRpY2FsRGF0YSogdmVydGljYWxEYXRhKCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0aWNhbERh
dGEuZ2V0KCk7IH0KKyNlbmRpZgorCisgICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gc21h
bGxDYXBzRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJikgY29uc3Q7CisgICAgUGFzc1Jl
ZlB0cjxTaW1wbGVGb250RGF0YT4gZW1waGFzaXNNYXJrRm9udERhdGEoY29uc3QgRm9udERlc2Ny
aXB0aW9uJikgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gYnJva2VuSWRl
b2dyYXBoRm9udERhdGEoKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBu
b25TeW50aGV0aWNJdGFsaWNGb250RGF0YSgpIGNvbnN0OworCisgICAgUGFzc1JlZlB0cjxTaW1w
bGVGb250RGF0YT4gdmFyaWFudEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3Jp
cHRpb24sIEZvbnREYXRhVmFyaWFudCB2YXJpYW50KSBjb25zdAorICAgIHsKKyAgICAgICAgc3dp
dGNoICh2YXJpYW50KSB7CisgICAgICAgIGNhc2UgU21hbGxDYXBzVmFyaWFudDoKKyAgICAgICAg
ICAgIHJldHVybiBzbWFsbENhcHNGb250RGF0YShkZXNjcmlwdGlvbik7CisgICAgICAgIGNhc2Ug
RW1waGFzaXNNYXJrVmFyaWFudDoKKyAgICAgICAgICAgIHJldHVybiBlbXBoYXNpc01hcmtGb250
RGF0YShkZXNjcmlwdGlvbik7CisgICAgICAgIGNhc2UgQnJva2VuSWRlb2dyYXBoVmFyaWFudDoK
KyAgICAgICAgICAgIHJldHVybiBicm9rZW5JZGVvZ3JhcGhGb250RGF0YSgpOworICAgICAgICBj
YXNlIEF1dG9WYXJpYW50OgorICAgICAgICBjYXNlIE5vcm1hbFZhcmlhbnQ6CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgcmV0dXJuIGNvbnN0X2Nhc3Q8U2ltcGxlRm9udERhdGEqPih0aGlzKTsKKyAgICB9CisKKyAg
ICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiB2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250
RGF0YSgpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IHVwcmlnaHRPcmll
bnRhdGlvbkZvbnREYXRhKCkgY29uc3Q7CisKKyAgICBib29sIGhhc1ZlcnRpY2FsR2x5cGhzKCkg
Y29uc3QgeyByZXR1cm4gbV9oYXNWZXJ0aWNhbEdseXBoczsgfQorICAgIGJvb2wgaXNUZXh0T3Jp
ZW50YXRpb25GYWxsYmFjaygpIGNvbnN0IHsgcmV0dXJuIG1faXNUZXh0T3JpZW50YXRpb25GYWxs
YmFjazsgfQorCisgICAgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzKCkgeyByZXR1cm4gbV9mb250
TWV0cmljczsgfQorICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBmb250TWV0cmljcygpIGNvbnN0IHsg
cmV0dXJuIG1fZm9udE1ldHJpY3M7IH0KKyAgICBmbG9hdCBzaXplUGVyVW5pdCgpIGNvbnN0IHsg
cmV0dXJuIHBsYXRmb3JtRGF0YSgpLnNpemUoKSAvIChmb250TWV0cmljcygpLnVuaXRzUGVyRW0o
KSA/IGZvbnRNZXRyaWNzKCkudW5pdHNQZXJFbSgpIDogMSk7IH0KKworICAgIGZsb2F0IG1heENo
YXJXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4Q2hhcldpZHRoOyB9CisgICAgdm9pZCBzZXRN
YXhDaGFyV2lkdGgoZmxvYXQgbWF4Q2hhcldpZHRoKSB7IG1fbWF4Q2hhcldpZHRoID0gbWF4Q2hh
cldpZHRoOyB9CisKKyAgICBmbG9hdCBhdmdDaGFyV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2F2
Z0NoYXJXaWR0aDsgfQorICAgIHZvaWQgc2V0QXZnQ2hhcldpZHRoKGZsb2F0IGF2Z0NoYXJXaWR0
aCkgeyBtX2F2Z0NoYXJXaWR0aCA9IGF2Z0NoYXJXaWR0aDsgfQorCisgICAgRmxvYXRSZWN0IGJv
dW5kc0ZvckdseXBoKEdseXBoKSBjb25zdDsKKyAgICBmbG9hdCB3aWR0aEZvckdseXBoKEdseXBo
IGdseXBoKSBjb25zdDsKKyAgICBGbG9hdFJlY3QgcGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlw
aCkgY29uc3Q7CisgICAgZmxvYXQgcGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoKSBjb25zdDsK
KworICAgIGZsb2F0IHNwYWNlV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3NwYWNlV2lkdGg7IH0K
KyAgICBmbG9hdCBhZGp1c3RlZFNwYWNlV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2FkanVzdGVk
U3BhY2VXaWR0aDsgfQorICAgIHZvaWQgc2V0U3BhY2VXaWR0aHMoZmxvYXQgc3BhY2VXaWR0aCkK
KyAgICB7CisgICAgICAgIG1fc3BhY2VXaWR0aCA9IHNwYWNlV2lkdGg7CisgICAgICAgIG1fYWRq
dXN0ZWRTcGFjZVdpZHRoID0gc3BhY2VXaWR0aDsKKyAgICB9CisKKyNpZiBVU0UoQ0cpIHx8IFVT
RShDQUlSTykKKyAgICBmbG9hdCBzeW50aGV0aWNCb2xkT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4g
bV9zeW50aGV0aWNCb2xkT2Zmc2V0OyB9CisjZW5kaWYKKworICAgIEdseXBoIHNwYWNlR2x5cGgo
KSBjb25zdCB7IHJldHVybiBtX3NwYWNlR2x5cGg7IH0KKyAgICB2b2lkIHNldFNwYWNlR2x5cGgo
R2x5cGggc3BhY2VHbHlwaCkgeyBtX3NwYWNlR2x5cGggPSBzcGFjZUdseXBoOyB9CisgICAgR2x5
cGggemVyb1dpZHRoU3BhY2VHbHlwaCgpIGNvbnN0IHsgcmV0dXJuIG1femVyb1dpZHRoU3BhY2VH
bHlwaDsgfQorICAgIHZvaWQgc2V0WmVyb1dpZHRoU3BhY2VHbHlwaChHbHlwaCBzcGFjZUdseXBo
KSB7IG1femVyb1dpZHRoU3BhY2VHbHlwaCA9IHNwYWNlR2x5cGg7IH0KKyAgICBib29sIGlzWmVy
b1dpZHRoU3BhY2VHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QgeyByZXR1cm4gZ2x5cGggPT0gbV96
ZXJvV2lkdGhTcGFjZUdseXBoICYmIGdseXBoOyB9CisgICAgR2x5cGggemVyb0dseXBoKCkgY29u
c3QgeyByZXR1cm4gbV96ZXJvR2x5cGg7IH0KKyAgICB2b2lkIHNldFplcm9HbHlwaChHbHlwaCB6
ZXJvR2x5cGgpIHsgbV96ZXJvR2x5cGggPSB6ZXJvR2x5cGg7IH0KKworICAgIEdseXBoRGF0YSBn
bHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMikgY29uc3Q7CisgICAgR2x5cGggZ2x5cGhGb3JD
aGFyYWN0ZXIoVUNoYXIzMikgY29uc3Q7CisKKyAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IHN5
c3RlbUZhbGxiYWNrRm9udERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiwgY29uc3QgRm9udERlc2Ny
aXB0aW9uJiwgYm9vbCBpc0ZvclBsYXRmb3JtRm9udCkgY29uc3Q7CisKKyAgICBjb25zdCBHbHlw
aFBhZ2UqIGdseXBoUGFnZSh1bnNpZ25lZCBwYWdlTnVtYmVyKSBjb25zdDsKKworICAgIHZvaWQg
ZGV0ZXJtaW5lUGl0Y2goKTsKKyAgICBQaXRjaCBwaXRjaCgpIGNvbnN0IHsgcmV0dXJuIG1fdHJl
YXRBc0ZpeGVkUGl0Y2ggPyBGaXhlZFBpdGNoIDogVmFyaWFibGVQaXRjaDsgfQorCisgICAgY29u
c3QgU1ZHRGF0YSogc3ZnRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fc3ZnRGF0YS5nZXQoKTsgfQor
ICAgIGJvb2wgaXNTVkdGb250KCkgY29uc3QgeyByZXR1cm4gISFtX3N2Z0RhdGE7IH0KKworICAg
IGJvb2wgaXNDdXN0b21Gb250KCkgY29uc3QgeyByZXR1cm4gbV9pc0N1c3RvbUZvbnQ7IH0KKyAg
ICBib29sIGlzTG9hZGluZygpIGNvbnN0IHsgcmV0dXJuIG1faXNMb2FkaW5nOyB9CisKKyNpZm5k
ZWYgTkRFQlVHCisgICAgU3RyaW5nIGRlc2NyaXB0aW9uKCkgY29uc3Q7CisjZW5kaWYKKworI2lm
IFVTRShBUFBLSVQpCisgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGNvbXBvc2l0ZUZvbnRSZWZl
cmVuY2VGb250RGF0YShOU0ZvbnQgKmtleSkgY29uc3Q7CisgICAgTlNGb250KiBnZXROU0ZvbnQo
KSBjb25zdCB7IHJldHVybiBtX3BsYXRmb3JtRGF0YS5uc0ZvbnQoKTsgfQorI2VuZGlmCisKKyNp
ZiBQTEFURk9STShJT1MpCisgICAgQ1RGb250UmVmIGdldENURm9udCgpIGNvbnN0IHsgcmV0dXJu
IG1fcGxhdGZvcm1EYXRhLmZvbnQoKTsgfQorICAgIGJvb2wgc2hvdWxkTm90QmVVc2VkRm9yQXJh
YmljKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGROb3RCZVVzZWRGb3JBcmFiaWM7IH07CisjZW5k
aWYKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBDRkRpY3Rpb25hcnlSZWYgZ2V0Q0ZTdHJpbmdB
dHRyaWJ1dGVzKFR5cGVzZXR0aW5nRmVhdHVyZXMsIEZvbnRPcmllbnRhdGlvbikgY29uc3Q7Cisj
ZW5kaWYKKworI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBVU0UoSEFSRkJVWlopCisgICAgYm9vbCBj
YW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBVQ2hhciosIHNpemVfdCkg
Y29uc3Q7CisjZW5kaWYKKworICAgIGJvb2wgYXBwbHlUcmFuc2Zvcm1zKEdseXBoQnVmZmVyR2x5
cGgqLCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCBzaXplX3QgZ2x5cGhDb3VudCwgVHlwZXNldHRpbmdG
ZWF0dXJlcykgY29uc3Q7CisKKyNpZiBQTEFURk9STShXSU4pCisgICAgYm9vbCBpc1N5c3RlbUZv
bnQoKSBjb25zdCB7IHJldHVybiBtX2lzU3lzdGVtRm9udDsgfQorICAgIFNDUklQVF9GT05UUFJP
UEVSVElFUyogc2NyaXB0Rm9udFByb3BlcnRpZXMoKSBjb25zdDsKKyAgICBTQ1JJUFRfQ0FDSEUq
IHNjcmlwdENhY2hlKCkgY29uc3QgeyByZXR1cm4gJm1fc2NyaXB0Q2FjaGU7IH0KKyAgICBzdGF0
aWMgdm9pZCBzZXRTaG91bGRBcHBseU1hY0FzY2VudEhhY2soYm9vbCk7CisgICAgc3RhdGljIGJv
b2wgc2hvdWxkQXBwbHlNYWNBc2NlbnRIYWNrKCk7CisgICAgc3RhdGljIGZsb2F0IGFzY2VudENv
bnNpZGVyaW5nTWFjQXNjZW50SGFjayhjb25zdCBXQ0hBUiosIGZsb2F0IGFzY2VudCwgZmxvYXQg
ZGVzY2VudCk7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBTaW1wbGVGb250RGF0YShjb25zdCBG
b250UGxhdGZvcm1EYXRhJiwgYm9vbCBpc0N1c3RvbUZvbnQgPSBmYWxzZSwgYm9vbCBpc0xvYWRp
bmcgPSBmYWxzZSwgYm9vbCBpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrID0gZmFsc2UpOworCisg
ICAgU2ltcGxlRm9udERhdGEoc3RkOjp1bmlxdWVfcHRyPFNWR0RhdGE+LCBmbG9hdCBmb250U2l6
ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYyk7CisKKyAgICB2b2lk
IHBsYXRmb3JtSW5pdCgpOworICAgIHZvaWQgcGxhdGZvcm1HbHlwaEluaXQoKTsKKyAgICB2b2lk
IHBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpOworICAgIHZvaWQgcGxhdGZvcm1EZXN0cm95KCk7CisK
KyAgICB2b2lkIGluaXRDaGFyV2lkdGhzKCk7CisKKyAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnRE
YXRhPiBjcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBz
Y2FsZUZhY3RvcikgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gcGxhdGZv
cm1DcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBzY2Fs
ZUZhY3RvcikgY29uc3Q7CisKKyAgICB2b2lkIHJlbW92ZUZyb21TeXN0ZW1GYWxsYmFja0NhY2hl
KCk7CisKKyNpZiBQTEFURk9STShXSU4pCisgICAgdm9pZCBpbml0R0RJRm9udCgpOworICAgIHZv
aWQgcGxhdGZvcm1Db21tb25EZXN0cm95KCk7CisgICAgRmxvYXRSZWN0IGJvdW5kc0ZvckdESUds
eXBoKEdseXBoIGdseXBoKSBjb25zdDsKKyAgICBmbG9hdCB3aWR0aEZvckdESUdseXBoKEdseXBo
IGdseXBoKSBjb25zdDsKKyNlbmRpZgorCisjaWYgVVNFKENHKQorICAgIGJvb2wgY2FuVXNlRmFz
dEdseXBoQWR2YW5jZUdldHRlcihHbHlwaCBnbHlwaCwgQ0dTaXplJiBhZHZhbmNlLCBib29sJiBw
b3B1bGF0ZWRBZHZhbmNlKSBjb25zdDsKKyAgICBDR0ZvbnRSZW5kZXJpbmdTdHlsZSByZW5kZXJp
bmdTdHlsZSgpIGNvbnN0OworICAgIGJvb2wgYWR2YW5jZUZvckNvbG9yQml0bWFwRm9udChHbHlw
aCwgQ0dTaXplJiByZXN1bHQpIGNvbnN0OyAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGZvbnQgaXMg
YSBjb2xvciBiaXRtYXAgZm9udAorI2VuZGlmCisKKyAgICBGb250TWV0cmljcyBtX2ZvbnRNZXRy
aWNzOworICAgIGZsb2F0IG1fbWF4Q2hhcldpZHRoOworICAgIGZsb2F0IG1fYXZnQ2hhcldpZHRo
OworCisgICAgRm9udFBsYXRmb3JtRGF0YSBtX3BsYXRmb3JtRGF0YTsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8U1ZHRGF0YT4gbV9zdmdEYXRhOworCisgICAgbXV0YWJsZSBSZWZQdHI8R2x5cGhQYWdl
PiBtX2dseXBoUGFnZVplcm87CisgICAgbXV0YWJsZSBIYXNoTWFwPHVuc2lnbmVkLCBSZWZQdHI8
R2x5cGhQYWdlPj4gbV9nbHlwaFBhZ2VzOworICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPEds
eXBoTWV0cmljc01hcDxGbG9hdFJlY3Q+PiBtX2dseXBoVG9Cb3VuZHNNYXA7CisgICAgbXV0YWJs
ZSBHbHlwaE1ldHJpY3NNYXA8ZmxvYXQ+IG1fZ2x5cGhUb1dpZHRoTWFwOworCisgICAgYm9vbCBt
X3RyZWF0QXNGaXhlZFBpdGNoOworICAgIGJvb2wgbV9pc0N1c3RvbUZvbnQ7ICAvLyBXaGV0aGVy
IG9yIG5vdCB3ZSBhcmUgY3VzdG9tIGZvbnQgbG9hZGVkIHZpYSBAZm9udC1mYWNlCisgICAgYm9v
bCBtX2lzTG9hZGluZzsgLy8gV2hldGhlciBvciBub3QgdGhpcyBjdXN0b20gZm9udCBpcyBzdGls
bCBpbiB0aGUgYWN0IG9mIGxvYWRpbmcuCisKKyAgICBib29sIG1faXNUZXh0T3JpZW50YXRpb25G
YWxsYmFjazsKKyAgICBib29sIG1faXNCcm9rZW5JZGVvZ3JhcGhGYWxsYmFjazsKKworICAgIGJv
b2wgbV9pc1VzZWRJblN5c3RlbUZhbGxiYWNrQ2FjaGUgeyBmYWxzZSB9OworCisgICAgbXV0YWJs
ZSBSZWZQdHI8T3BlblR5cGVNYXRoRGF0YT4gbV9tYXRoRGF0YTsKKyNpZiBFTkFCTEUoT1BFTlRZ
UEVfVkVSVElDQUwpCisgICAgUmVmUHRyPE9wZW5UeXBlVmVydGljYWxEYXRhPiBtX3ZlcnRpY2Fs
RGF0YTsKKyNlbmRpZgorICAgIGJvb2wgbV9oYXNWZXJ0aWNhbEdseXBoczsKKworICAgIEdseXBo
IG1fc3BhY2VHbHlwaDsKKyAgICBmbG9hdCBtX3NwYWNlV2lkdGg7CisgICAgR2x5cGggbV96ZXJv
R2x5cGg7CisgICAgZmxvYXQgbV9hZGp1c3RlZFNwYWNlV2lkdGg7CisKKyAgICBHbHlwaCBtX3pl
cm9XaWR0aFNwYWNlR2x5cGg7CisKKyAgICBzdHJ1Y3QgRGVyaXZlZEZvbnREYXRhIHsKKyAgICAg
ICAgZXhwbGljaXQgRGVyaXZlZEZvbnREYXRhKGJvb2wgY3VzdG9tKQorICAgICAgICAgICAgOiBm
b3JDdXN0b21Gb250KGN1c3RvbSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIH5EZXJp
dmVkRm9udERhdGEoKTsKKworICAgICAgICBib29sIGZvckN1c3RvbUZvbnQ7CisgICAgICAgIFJl
ZlB0cjxTaW1wbGVGb250RGF0YT4gc21hbGxDYXBzOworICAgICAgICBSZWZQdHI8U2ltcGxlRm9u
dERhdGE+IGVtcGhhc2lzTWFyazsKKyAgICAgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBicm9r
ZW5JZGVvZ3JhcGg7CisgICAgICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gdmVydGljYWxSaWdo
dE9yaWVudGF0aW9uOworICAgICAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IHVwcmlnaHRPcmll
bnRhdGlvbjsKKyAgICAgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBub25TeW50aGV0aWNJdGFs
aWM7CisjaWYgVVNFKEFQUEtJVCkKKyAgICAgICAgSGFzaE1hcDxOU0ZvbnQqLCBSZWZQdHI8U2lt
cGxlRm9udERhdGE+PiBjb21wb3NpdGVGb250UmVmZXJlbmNlczsKKyNlbmRpZgorICAgIH07CisK
KyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxEZXJpdmVkRm9udERhdGE+IG1fZGVyaXZlZEZv
bnREYXRhOworCisjaWYgVVNFKENHKSB8fCBVU0UoQ0FJUk8pCisgICAgZmxvYXQgbV9zeW50aGV0
aWNCb2xkT2Zmc2V0OworI2VuZGlmCisKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBtdXRhYmxl
IEhhc2hNYXA8dW5zaWduZWQsIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+PiBtX0NGU3RyaW5n
QXR0cmlidXRlczsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFVTRShIQVJGQlVa
WikKKyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxIYXNoTWFwPFN0cmluZywgYm9vbD4+IG1f
Y29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2VTdXBwb3J0OworI2VuZGlmCisKKyNpZiBQTEFURk9S
TShXSU4pCisgICAgYm9vbCBtX2lzU3lzdGVtRm9udDsKKyAgICBtdXRhYmxlIFNDUklQVF9DQUNI
RSBtX3NjcmlwdENhY2hlOworICAgIG11dGFibGUgU0NSSVBUX0ZPTlRQUk9QRVJUSUVTKiBtX3Nj
cmlwdEZvbnRQcm9wZXJ0aWVzOworI2VuZGlmCisjaWYgUExBVEZPUk0oSU9TKQorICAgIGJvb2wg
bV9zaG91bGROb3RCZVVzZWRGb3JBcmFiaWM7CisjZW5kaWYKK307CisKK0FMV0FZU19JTkxJTkUg
RmxvYXRSZWN0IFNpbXBsZUZvbnREYXRhOjpib3VuZHNGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29u
c3QKK3sKKyAgICBpZiAoaXNaZXJvV2lkdGhTcGFjZUdseXBoKGdseXBoKSkKKyAgICAgICAgcmV0
dXJuIEZsb2F0UmVjdCgpOworCisgICAgRmxvYXRSZWN0IGJvdW5kczsKKyAgICBpZiAobV9nbHlw
aFRvQm91bmRzTWFwKSB7CisgICAgICAgIGJvdW5kcyA9IG1fZ2x5cGhUb0JvdW5kc01hcC0+bWV0
cmljc0ZvckdseXBoKGdseXBoKTsKKyAgICAgICAgaWYgKGJvdW5kcy53aWR0aCgpICE9IGNHbHlw
aFNpemVVbmtub3duKQorICAgICAgICAgICAgcmV0dXJuIGJvdW5kczsKKyAgICB9CisKKyAgICBi
b3VuZHMgPSBwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKGdseXBoKTsKKyAgICBpZiAoIW1fZ2x5cGhU
b0JvdW5kc01hcCkKKyAgICAgICAgbV9nbHlwaFRvQm91bmRzTWFwID0gc3RkOjptYWtlX3VuaXF1
ZTxHbHlwaE1ldHJpY3NNYXA8RmxvYXRSZWN0Pj4oKTsKKyAgICBtX2dseXBoVG9Cb3VuZHNNYXAt
PnNldE1ldHJpY3NGb3JHbHlwaChnbHlwaCwgYm91bmRzKTsKKyAgICByZXR1cm4gYm91bmRzOwor
fQorCitBTFdBWVNfSU5MSU5FIGZsb2F0IFNpbXBsZUZvbnREYXRhOjp3aWR0aEZvckdseXBoKEds
eXBoIGdseXBoKSBjb25zdAoreworICAgIGlmIChpc1plcm9XaWR0aFNwYWNlR2x5cGgoZ2x5cGgp
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIGZsb2F0IHdpZHRoID0gbV9nbHlwaFRvV2lkdGhN
YXAubWV0cmljc0ZvckdseXBoKGdseXBoKTsKKyAgICBpZiAod2lkdGggIT0gY0dseXBoU2l6ZVVu
a25vd24pCisgICAgICAgIHJldHVybiB3aWR0aDsKKworICAgIGlmIChpc1NWR0ZvbnQoKSkKKyAg
ICAgICAgd2lkdGggPSBtX3N2Z0RhdGEtPndpZHRoRm9yU1ZHR2x5cGgoZ2x5cGgsIG1fcGxhdGZv
cm1EYXRhLnNpemUoKSk7CisjaWYgRU5BQkxFKE9QRU5UWVBFX1ZFUlRJQ0FMKQorICAgIGVsc2Ug
aWYgKG1fdmVydGljYWxEYXRhKQorI2lmIFVTRShDRykgfHwgVVNFKENBSVJPKQorICAgICAgICB3
aWR0aCA9IG1fdmVydGljYWxEYXRhLT5hZHZhbmNlSGVpZ2h0KHRoaXMsIGdseXBoKSArIG1fc3lu
dGhldGljQm9sZE9mZnNldDsKKyNlbHNlCisgICAgICAgIHdpZHRoID0gbV92ZXJ0aWNhbERhdGEt
PmFkdmFuY2VIZWlnaHQodGhpcywgZ2x5cGgpOworI2VuZGlmCisjZW5kaWYKKyAgICBlbHNlCisg
ICAgICAgIHdpZHRoID0gcGxhdGZvcm1XaWR0aEZvckdseXBoKGdseXBoKTsKKworICAgIG1fZ2x5
cGhUb1dpZHRoTWFwLnNldE1ldHJpY3NGb3JHbHlwaChnbHlwaCwgd2lkdGgpOworICAgIHJldHVy
biB3aWR0aDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU2ltcGxl
Rm9udERhdGFfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAko
d29ya2luZyBjb3B5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMSwxMyArMjEsMTMgQEAKICAqCiAgKi8KIAotI2lmbmRlZiBT
aW1wbGVGb250RGF0YV9oCi0jZGVmaW5lIFNpbXBsZUZvbnREYXRhX2gKKyNpZm5kZWYgRm9udF9o
CisjZGVmaW5lIEZvbnRfaAogCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiRm9u
dEJhc2VsaW5lLmgiCiAjaW5jbHVkZSAiRm9udE1ldHJpY3MuaCIKICNpbmNsdWRlICJGb250UGxh
dGZvcm1EYXRhLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiR2x5cGhCdWZm
ZXIuaCIKICNpbmNsdWRlICJHbHlwaE1ldHJpY3NNYXAuaCIKICNpbmNsdWRlICJHbHlwaFBhZ2Uu
aCIKQEAgLTY0LDM2ICs2NCwzNiBAQCBjbGFzcyBTaGFyZWRCdWZmZXI7CiBzdHJ1Y3QgR2x5cGhE
YXRhOwogc3RydWN0IFdpZHRoSXRlcmF0b3I7CiAKLWVudW0gRm9udERhdGFWYXJpYW50IHsgQXV0
b1ZhcmlhbnQsIE5vcm1hbFZhcmlhbnQsIFNtYWxsQ2Fwc1ZhcmlhbnQsIEVtcGhhc2lzTWFya1Zh
cmlhbnQsIEJyb2tlbklkZW9ncmFwaFZhcmlhbnQgfTsKK2VudW0gRm9udFZhcmlhbnQgeyBBdXRv
VmFyaWFudCwgTm9ybWFsVmFyaWFudCwgU21hbGxDYXBzVmFyaWFudCwgRW1waGFzaXNNYXJrVmFy
aWFudCwgQnJva2VuSWRlb2dyYXBoVmFyaWFudCB9OwogZW51bSBQaXRjaCB7IFVua25vd25QaXRj
aCwgRml4ZWRQaXRjaCwgVmFyaWFibGVQaXRjaCB9OwogCi1jbGFzcyBTaW1wbGVGb250RGF0YSA6
IHB1YmxpYyBSZWZDb3VudGVkPFNpbXBsZUZvbnREYXRhPiB7CitjbGFzcyBGb250IDogcHVibGlj
IFJlZkNvdW50ZWQ8Rm9udD4gewogcHVibGljOgogICAgIGNsYXNzIFNWR0RhdGEgewogICAgICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwg
flNWR0RhdGEoKSB7IH0KIAotICAgICAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZUZvbnREYXRh
KFNpbXBsZUZvbnREYXRhKiwgZmxvYXQgZm9udFNpemUpID0gMDsKKyAgICAgICAgdmlydHVhbCB2
b2lkIGluaXRpYWxpemVGb250KEZvbnQqLCBmbG9hdCBmb250U2l6ZSkgPSAwOwogICAgICAgICB2
aXJ0dWFsIGZsb2F0IHdpZHRoRm9yU1ZHR2x5cGgoR2x5cGgsIGZsb2F0IGZvbnRTaXplKSBjb25z
dCA9IDA7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBmaWxsU1ZHR2x5cGhQYWdlKEdseXBoUGFnZSos
IHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25l
ZCBidWZmZXJMZW5ndGgsIGNvbnN0IFNpbXBsZUZvbnREYXRhKikgY29uc3QgPSAwOworICAgICAg
ICB2aXJ0dWFsIGJvb2wgZmlsbFNWR0dseXBoUGFnZShHbHlwaFBhZ2UqLCB1bnNpZ25lZCBvZmZz
ZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3Ro
LCBjb25zdCBGb250KikgY29uc3QgPSAwOwogICAgIH07CiAKICAgICAvLyBVc2VkIHRvIGNyZWF0
ZSBwbGF0Zm9ybSBmb250cy4KLSAgICBzdGF0aWMgUmVmPFNpbXBsZUZvbnREYXRhPiBjcmVhdGUo
Y29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhLCBib29sIGlzQ3VzdG9tRm9udCA9
IGZhbHNlLCBib29sIGlzTG9hZGluZyA9IGZhbHNlLCBib29sIGlzVGV4dE9yaWVudGF0aW9uRmFs
bGJhY2sgPSBmYWxzZSkKKyAgICBzdGF0aWMgUmVmPEZvbnQ+IGNyZWF0ZShjb25zdCBGb250UGxh
dGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEsIGJvb2wgaXNDdXN0b21Gb250ID0gZmFsc2UsIGJvb2wg
aXNMb2FkaW5nID0gZmFsc2UsIGJvb2wgaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjayA9IGZhbHNl
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2ltcGxlRm9udERhdGEocGxh
dGZvcm1EYXRhLCBpc0N1c3RvbUZvbnQsIGlzTG9hZGluZywgaXNUZXh0T3JpZW50YXRpb25GYWxs
YmFjaykpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGb250KHBsYXRmb3JtRGF0YSwg
aXNDdXN0b21Gb250LCBpc0xvYWRpbmcsIGlzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2spKTsKICAg
ICB9CiAKICAgICAvLyBVc2VkIHRvIGNyZWF0ZSBTVkcgRm9udHMuCi0gICAgc3RhdGljIFJlZjxT
aW1wbGVGb250RGF0YT4gY3JlYXRlKHN0ZDo6dW5pcXVlX3B0cjxTVkdEYXRhPiBzdmdEYXRhLCBm
bG9hdCBmb250U2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYykK
KyAgICBzdGF0aWMgUmVmPEZvbnQ+IGNyZWF0ZShzdGQ6OnVuaXF1ZV9wdHI8U1ZHRGF0YT4gc3Zn
RGF0YSwgZmxvYXQgZm9udFNpemUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJ
dGFsaWMpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTaW1wbGVGb250RGF0
YShXVEY6Om1vdmUoc3ZnRGF0YSksIGZvbnRTaXplLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJ
dGFsaWMpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRm9udChXVEY6Om1vdmUoc3Zn
RGF0YSksIGZvbnRTaXplLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMpKTsKICAgICB9
CiAKLSAgICB+U2ltcGxlRm9udERhdGEoKTsKKyAgICB+Rm9udCgpOwogCi0gICAgc3RhdGljIGNv
bnN0IFNpbXBsZUZvbnREYXRhKiBzeXN0ZW1GYWxsYmFjaygpIHsgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgU2ltcGxlRm9udERhdGEqPigtMSk7IH0KKyAgICBzdGF0aWMgY29uc3QgRm9u
dCogc3lzdGVtRmFsbGJhY2soKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IEZvbnQq
PigtMSk7IH0KIAogICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSgpIGNv
bnN0IHsgcmV0dXJuIG1fcGxhdGZvcm1EYXRhOyB9CiAgICAgY29uc3QgT3BlblR5cGVNYXRoRGF0
YSogbWF0aERhdGEoKSBjb25zdDsKQEAgLTEwMSwzMCArMTAxLDMwIEBAIHB1YmxpYzoKICAgICBj
b25zdCBPcGVuVHlwZVZlcnRpY2FsRGF0YSogdmVydGljYWxEYXRhKCkgY29uc3QgeyByZXR1cm4g
bV92ZXJ0aWNhbERhdGEuZ2V0KCk7IH0KICNlbmRpZgogCi0gICAgUGFzc1JlZlB0cjxTaW1wbGVG
b250RGF0YT4gc21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJikgY29uc3Q7
Ci0gICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gZW1waGFzaXNNYXJrRm9udERhdGEoY29u
c3QgRm9udERlc2NyaXB0aW9uJikgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0
YT4gYnJva2VuSWRlb2dyYXBoRm9udERhdGEoKSBjb25zdDsKLSAgICBQYXNzUmVmUHRyPFNpbXBs
ZUZvbnREYXRhPiBub25TeW50aGV0aWNJdGFsaWNGb250RGF0YSgpIGNvbnN0OworICAgIFBhc3NS
ZWZQdHI8Rm9udD4gc21hbGxDYXBzRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mKSBjb25zdDsK
KyAgICBQYXNzUmVmUHRyPEZvbnQ+IGVtcGhhc2lzTWFya0ZvbnQoY29uc3QgRm9udERlc2NyaXB0
aW9uJikgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxGb250PiBicm9rZW5JZGVvZ3JhcGhGb250KCkg
Y29uc3Q7CisgICAgUGFzc1JlZlB0cjxGb250PiBub25TeW50aGV0aWNJdGFsaWNGb250KCkgY29u
c3Q7CiAKLSAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiB2YXJpYW50Rm9udERhdGEoY29u
c3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udERhdGFWYXJpYW50IHZhcmlhbnQp
IGNvbnN0CisgICAgUGFzc1JlZlB0cjxGb250PiB2YXJpYW50Rm9udChjb25zdCBGb250RGVzY3Jp
cHRpb24mIGRlc2NyaXB0aW9uLCBGb250VmFyaWFudCB2YXJpYW50KSBjb25zdAogICAgIHsKICAg
ICAgICAgc3dpdGNoICh2YXJpYW50KSB7CiAgICAgICAgIGNhc2UgU21hbGxDYXBzVmFyaWFudDoK
LSAgICAgICAgICAgIHJldHVybiBzbWFsbENhcHNGb250RGF0YShkZXNjcmlwdGlvbik7CisgICAg
ICAgICAgICByZXR1cm4gc21hbGxDYXBzRm9udChkZXNjcmlwdGlvbik7CiAgICAgICAgIGNhc2Ug
RW1waGFzaXNNYXJrVmFyaWFudDoKLSAgICAgICAgICAgIHJldHVybiBlbXBoYXNpc01hcmtGb250
RGF0YShkZXNjcmlwdGlvbik7CisgICAgICAgICAgICByZXR1cm4gZW1waGFzaXNNYXJrRm9udChk
ZXNjcmlwdGlvbik7CiAgICAgICAgIGNhc2UgQnJva2VuSWRlb2dyYXBoVmFyaWFudDoKLSAgICAg
ICAgICAgIHJldHVybiBicm9rZW5JZGVvZ3JhcGhGb250RGF0YSgpOworICAgICAgICAgICAgcmV0
dXJuIGJyb2tlbklkZW9ncmFwaEZvbnQoKTsKICAgICAgICAgY2FzZSBBdXRvVmFyaWFudDoKICAg
ICAgICAgY2FzZSBOb3JtYWxWYXJpYW50OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBjb25zdF9jYXN0
PFNpbXBsZUZvbnREYXRhKj4odGhpcyk7CisgICAgICAgIHJldHVybiBjb25zdF9jYXN0PEZvbnQq
Pih0aGlzKTsKICAgICB9CiAKLSAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiB2ZXJ0aWNh
bFJpZ2h0T3JpZW50YXRpb25Gb250RGF0YSgpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8U2ltcGxl
Rm9udERhdGE+IHVwcmlnaHRPcmllbnRhdGlvbkZvbnREYXRhKCkgY29uc3Q7CisgICAgUGFzc1Jl
ZlB0cjxGb250PiB2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250KCkgY29uc3Q7CisgICAgUGFz
c1JlZlB0cjxGb250PiB1cHJpZ2h0T3JpZW50YXRpb25Gb250KCkgY29uc3Q7CiAKICAgICBib29s
IGhhc1ZlcnRpY2FsR2x5cGhzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNWZXJ0aWNhbEdseXBoczsg
fQogICAgIGJvb2wgaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaygpIGNvbnN0IHsgcmV0dXJuIG1f
aXNUZXh0T3JpZW50YXRpb25GYWxsYmFjazsgfQpAQCAtMTQwLDcgKzE0MCw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNldEF2Z0NoYXJXaWR0aChmbG9hdCBhdmdDaGFyV2lkdGgpIHsgbV9hdmdDaGFy
V2lkdGggPSBhdmdDaGFyV2lkdGg7IH0KIAogICAgIEZsb2F0UmVjdCBib3VuZHNGb3JHbHlwaChH
bHlwaCkgY29uc3Q7Ci0gICAgZmxvYXQgd2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3Q7
CisgICAgZmxvYXQgd2lkdGhGb3JHbHlwaChHbHlwaCkgY29uc3Q7CiAgICAgRmxvYXRSZWN0IHBs
YXRmb3JtQm91bmRzRm9yR2x5cGgoR2x5cGgpIGNvbnN0OwogICAgIGZsb2F0IHBsYXRmb3JtV2lk
dGhGb3JHbHlwaChHbHlwaCkgY29uc3Q7CiAKQEAgLTE2Nyw3ICsxNjcsNyBAQCBwdWJsaWM6CiAg
ICAgR2x5cGhEYXRhIGdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyKSBjb25zdDsKICAgICBH
bHlwaCBnbHlwaEZvckNoYXJhY3RlcihVQ2hhcjMyKSBjb25zdDsKIAotICAgIFJlZlB0cjxTaW1w
bGVGb250RGF0YT4gc3lzdGVtRmFsbGJhY2tGb250RGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyLCBj
b25zdCBGb250RGVzY3JpcHRpb24mLCBib29sIGlzRm9yUGxhdGZvcm1Gb250KSBjb25zdDsKKyAg
ICBSZWZQdHI8Rm9udD4gc3lzdGVtRmFsbGJhY2tGb250Rm9yQ2hhcmFjdGVyKFVDaGFyMzIsIGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYsIGJvb2wgaXNGb3JQbGF0Zm9ybUZvbnQpIGNvbnN0OwogCiAg
ICAgY29uc3QgR2x5cGhQYWdlKiBnbHlwaFBhZ2UodW5zaWduZWQgcGFnZU51bWJlcikgY29uc3Q7
CiAKQEAgLTE4NSw3ICsxODUsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lmIFVTRShBUFBLSVQp
Ci0gICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGNvbXBvc2l0ZUZvbnRSZWZlcmVuY2VGb250RGF0
YShOU0ZvbnQgKmtleSkgY29uc3Q7CisgICAgY29uc3QgRm9udCogY29tcG9zaXRlRm9udFJlZmVy
ZW5jZUZvbnQoTlNGb250ICprZXkpIGNvbnN0OwogICAgIE5TRm9udCogZ2V0TlNGb250KCkgY29u
c3QgeyByZXR1cm4gbV9wbGF0Zm9ybURhdGEubnNGb250KCk7IH0KICNlbmRpZgogCkBAIC0yMTMs
OSArMjEzLDkgQEAgcHVibGljOgogI2VuZGlmCiAKIHByaXZhdGU6Ci0gICAgU2ltcGxlRm9udERh
dGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYsIGJvb2wgaXNDdXN0b21Gb250ID0gZmFsc2UsIGJv
b2wgaXNMb2FkaW5nID0gZmFsc2UsIGJvb2wgaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjayA9IGZh
bHNlKTsKKyAgICBGb250KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmLCBib29sIGlzQ3VzdG9tRm9u
dCA9IGZhbHNlLCBib29sIGlzTG9hZGluZyA9IGZhbHNlLCBib29sIGlzVGV4dE9yaWVudGF0aW9u
RmFsbGJhY2sgPSBmYWxzZSk7CiAKLSAgICBTaW1wbGVGb250RGF0YShzdGQ6OnVuaXF1ZV9wdHI8
U1ZHRGF0YT4sIGZsb2F0IGZvbnRTaXplLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhl
dGljSXRhbGljKTsKKyAgICBGb250KHN0ZDo6dW5pcXVlX3B0cjxTVkdEYXRhPiwgZmxvYXQgZm9u
dFNpemUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpOwogCiAgICAg
dm9pZCBwbGF0Zm9ybUluaXQoKTsKICAgICB2b2lkIHBsYXRmb3JtR2x5cGhJbml0KCk7CkBAIC0y
MjQsMjAgKzIyNCwyMCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBpbml0Q2hhcldpZHRocygpOwog
Ci0gICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gY3JlYXRlU2NhbGVkRm9udERhdGEoY29u
c3QgRm9udERlc2NyaXB0aW9uJiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0OwotICAgIFBhc3NS
ZWZQdHI8U2ltcGxlRm9udERhdGE+IHBsYXRmb3JtQ3JlYXRlU2NhbGVkRm9udERhdGEoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0OworICAgIFBhc3NSZWZQ
dHI8Rm9udD4gY3JlYXRlU2NhbGVkRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBz
Y2FsZUZhY3RvcikgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxGb250PiBwbGF0Zm9ybUNyZWF0ZVNj
YWxlZEZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0
OwogCiAgICAgdm9pZCByZW1vdmVGcm9tU3lzdGVtRmFsbGJhY2tDYWNoZSgpOwogCiAjaWYgUExB
VEZPUk0oV0lOKQogICAgIHZvaWQgaW5pdEdESUZvbnQoKTsKICAgICB2b2lkIHBsYXRmb3JtQ29t
bW9uRGVzdHJveSgpOwotICAgIEZsb2F0UmVjdCBib3VuZHNGb3JHRElHbHlwaChHbHlwaCBnbHlw
aCkgY29uc3Q7Ci0gICAgZmxvYXQgd2lkdGhGb3JHRElHbHlwaChHbHlwaCBnbHlwaCkgY29uc3Q7
CisgICAgRmxvYXRSZWN0IGJvdW5kc0ZvckdESUdseXBoKEdseXBoKSBjb25zdDsKKyAgICBmbG9h
dCB3aWR0aEZvckdESUdseXBoKEdseXBoKSBjb25zdDsKICNlbmRpZgogCiAjaWYgVVNFKENHKQot
ICAgIGJvb2wgY2FuVXNlRmFzdEdseXBoQWR2YW5jZUdldHRlcihHbHlwaCBnbHlwaCwgQ0dTaXpl
JiBhZHZhbmNlLCBib29sJiBwb3B1bGF0ZWRBZHZhbmNlKSBjb25zdDsKKyAgICBib29sIGNhblVz
ZUZhc3RHbHlwaEFkdmFuY2VHZXR0ZXIoR2x5cGgsIENHU2l6ZSYgYWR2YW5jZSwgYm9vbCYgcG9w
dWxhdGVkQWR2YW5jZSkgY29uc3Q7CiAgICAgQ0dGb250UmVuZGVyaW5nU3R5bGUgcmVuZGVyaW5n
U3R5bGUoKSBjb25zdDsKICAgICBib29sIGFkdmFuY2VGb3JDb2xvckJpdG1hcEZvbnQoR2x5cGgs
IENHU2l6ZSYgcmVzdWx0KSBjb25zdDsgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBmb250IGlzIGEg
Y29sb3IgYml0bWFwIGZvbnQKICNlbmRpZgpAQCAtMjU1LDcgKzI1NSw3IEBAIHByaXZhdGU6CiAg
ICAgbXV0YWJsZSBHbHlwaE1ldHJpY3NNYXA8ZmxvYXQ+IG1fZ2x5cGhUb1dpZHRoTWFwOwogCiAg
ICAgYm9vbCBtX3RyZWF0QXNGaXhlZFBpdGNoOwotICAgIGJvb2wgbV9pc0N1c3RvbUZvbnQ7ICAv
LyBXaGV0aGVyIG9yIG5vdCB3ZSBhcmUgY3VzdG9tIGZvbnQgbG9hZGVkIHZpYSBAZm9udC1mYWNl
CisgICAgYm9vbCBtX2lzQ3VzdG9tRm9udDsgLy8gV2hldGhlciBvciBub3Qgd2UgYXJlIGN1c3Rv
bSBmb250IGxvYWRlZCB2aWEgQGZvbnQtZmFjZQogICAgIGJvb2wgbV9pc0xvYWRpbmc7IC8vIFdo
ZXRoZXIgb3Igbm90IHRoaXMgY3VzdG9tIGZvbnQgaXMgc3RpbGwgaW4gdGhlIGFjdCBvZiBsb2Fk
aW5nLgogCiAgICAgYm9vbCBtX2lzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2s7CkBAIC0yODQsMTQg
KzI4NCwxNCBAQCBwcml2YXRlOgogICAgICAgICB+RGVyaXZlZEZvbnREYXRhKCk7CiAKICAgICAg
ICAgYm9vbCBmb3JDdXN0b21Gb250OwotICAgICAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IHNt
YWxsQ2FwczsKLSAgICAgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBlbXBoYXNpc01hcms7Ci0g
ICAgICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gYnJva2VuSWRlb2dyYXBoOwotICAgICAgICBS
ZWZQdHI8U2ltcGxlRm9udERhdGE+IHZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbjsKLSAgICAgICAg
UmVmUHRyPFNpbXBsZUZvbnREYXRhPiB1cHJpZ2h0T3JpZW50YXRpb247Ci0gICAgICAgIFJlZlB0
cjxTaW1wbGVGb250RGF0YT4gbm9uU3ludGhldGljSXRhbGljOworICAgICAgICBSZWZQdHI8Rm9u
dD4gc21hbGxDYXBzOworICAgICAgICBSZWZQdHI8Rm9udD4gZW1waGFzaXNNYXJrOworICAgICAg
ICBSZWZQdHI8Rm9udD4gYnJva2VuSWRlb2dyYXBoOworICAgICAgICBSZWZQdHI8Rm9udD4gdmVy
dGljYWxSaWdodE9yaWVudGF0aW9uOworICAgICAgICBSZWZQdHI8Rm9udD4gdXByaWdodE9yaWVu
dGF0aW9uOworICAgICAgICBSZWZQdHI8Rm9udD4gbm9uU3ludGhldGljSXRhbGljOwogI2lmIFVT
RShBUFBLSVQpCi0gICAgICAgIEhhc2hNYXA8TlNGb250KiwgUmVmUHRyPFNpbXBsZUZvbnREYXRh
Pj4gY29tcG9zaXRlRm9udFJlZmVyZW5jZXM7CisgICAgICAgIEhhc2hNYXA8TlNGb250KiwgUmVm
UHRyPEZvbnQ+PiBjb21wb3NpdGVGb250UmVmZXJlbmNlczsKICNlbmRpZgogICAgIH07CiAKQEAg
LTMxOSw3ICszMTksNyBAQCBwcml2YXRlOgogI2VuZGlmCiB9OwogCi1BTFdBWVNfSU5MSU5FIEZs
b2F0UmVjdCBTaW1wbGVGb250RGF0YTo6Ym91bmRzRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0
CitBTFdBWVNfSU5MSU5FIEZsb2F0UmVjdCBGb250Ojpib3VuZHNGb3JHbHlwaChHbHlwaCBnbHlw
aCkgY29uc3QKIHsKICAgICBpZiAoaXNaZXJvV2lkdGhTcGFjZUdseXBoKGdseXBoKSkKICAgICAg
ICAgcmV0dXJuIEZsb2F0UmVjdCgpOwpAQCAtMzM4LDcgKzMzOCw3IEBAIEFMV0FZU19JTkxJTkUg
RmxvYXRSZWN0IFNpbXBsZUZvbnREYXRhOjoKICAgICByZXR1cm4gYm91bmRzOwogfQogCi1BTFdB
WVNfSU5MSU5FIGZsb2F0IFNpbXBsZUZvbnREYXRhOjp3aWR0aEZvckdseXBoKEdseXBoIGdseXBo
KSBjb25zdAorQUxXQVlTX0lOTElORSBmbG9hdCBGb250Ojp3aWR0aEZvckdseXBoKEdseXBoIGds
eXBoKSBjb25zdAogewogICAgIGlmIChpc1plcm9XaWR0aFNwYWNlR2x5cGgoZ2x5cGgpKQogICAg
ICAgICByZXR1cm4gMDsKQEAgLTM2Niw0ICszNjYsNCBAQCBBTFdBWVNfSU5MSU5FIGZsb2F0IFNp
bXBsZUZvbnREYXRhOjp3aWR0CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8v
IFNpbXBsZUZvbnREYXRhX2gKKyNlbmRpZiAvLyBGb250X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAkocmV2aXNpb24gMTc4ODU3KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTIsMTQgKzUyLDE0IEBACiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+
CiAKIC8vIEZJWE1FOiBXZSBtYXkgYmUgYWJsZSB0byBzaW1wbGlmeSB0aGlzIGNvZGUgdXNpbmcg
QysrMTEgdGhyZWFkaW5nIHByaW1pdGl2ZXMsIGluY2x1ZGluZyBzdGQ6OmNhbGxfb25jZSgpLgot
c3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBmb250RGF0YUxvY2s7CitzdGF0aWMgcHRocmVhZF9tdXRl
eF90IGZvbnRMb2NrOwogCiBzdGF0aWMgdm9pZCBpbml0Rm9udENhY2hlTG9ja09uY2UoKQogewog
ICAgIHB0aHJlYWRfbXV0ZXhhdHRyX3QgbXV0ZXhBdHRyaWJ1dGU7CiAgICAgcHRocmVhZF9tdXRl
eGF0dHJfaW5pdCgmbXV0ZXhBdHRyaWJ1dGUpOwogICAgIHB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5
cGUoJm11dGV4QXR0cmlidXRlLCBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRSk7Ci0gICAgcHRocmVh
ZF9tdXRleF9pbml0KCZmb250RGF0YUxvY2ssICZtdXRleEF0dHJpYnV0ZSk7CisgICAgcHRocmVh
ZF9tdXRleF9pbml0KCZmb250TG9jaywgJm11dGV4QXR0cmlidXRlKTsKICAgICBwdGhyZWFkX211
dGV4YXR0cl9kZXN0cm95KCZtdXRleEF0dHJpYnV0ZSk7CiB9CiAKQEAgLTcxLDEzICs3MSwxMyBA
QCBwdWJsaWM6CiAgICAgRm9udExvY2tlcigpCiAgICAgewogICAgICAgICBwdGhyZWFkX29uY2Uo
JmluaXRGb250TG9ja0NvbnRyb2wsIGluaXRGb250Q2FjaGVMb2NrT25jZSk7Ci0gICAgICAgIGlu
dCBsb2NrY29kZSA9IHB0aHJlYWRfbXV0ZXhfbG9jaygmZm9udERhdGFMb2NrKTsKLSAgICAgICAg
QVNTRVJUX1dJVEhfTUVTU0FHRV9VTlVTRUQobG9ja2NvZGUsICFsb2NrY29kZSwgImZvbnREYXRh
TG9jayBsb2NrIGZhaWxlZCB3aXRoIGNvZGU6JWQiLCBsb2NrY29kZSk7ICAgIAorICAgICAgICBp
bnQgbG9ja2NvZGUgPSBwdGhyZWFkX211dGV4X2xvY2soJmZvbnRMb2NrKTsKKyAgICAgICAgQVNT
RVJUX1dJVEhfTUVTU0FHRV9VTlVTRUQobG9ja2NvZGUsICFsb2NrY29kZSwgImZvbnRMb2NrIGxv
Y2sgZmFpbGVkIHdpdGggY29kZTolZCIsIGxvY2tjb2RlKTsgICAgCiAgICAgfQogICAgIH5Gb250
TG9ja2VyKCkKICAgICB7Ci0gICAgICAgIGludCBsb2NrY29kZSA9IHB0aHJlYWRfbXV0ZXhfdW5s
b2NrKCZmb250RGF0YUxvY2spOwotICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFX1VOVVNFRChs
b2NrY29kZSwgIWxvY2tjb2RlLCAiZm9udERhdGFMb2NrIHVubG9jayBmYWlsZWQgd2l0aCBjb2Rl
OiVkIiwgbG9ja2NvZGUpOworICAgICAgICBpbnQgbG9ja2NvZGUgPSBwdGhyZWFkX211dGV4X3Vu
bG9jaygmZm9udExvY2spOworICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFX1VOVVNFRChsb2Nr
Y29kZSwgIWxvY2tjb2RlLCAiZm9udExvY2sgdW5sb2NrIGZhaWxlZCB3aXRoIGNvZGU6JWQiLCBs
b2NrY29kZSk7CiAgICAgfQogfTsKICNlbmRpZiAvLyBQTEFURk9STShJT1MpCkBAIC0zNTksNyAr
MzU5LDcgQEAgc3RydWN0IEZvbnREYXRhQ2FjaGVLZXlUcmFpdHMgOiBXVEY6OkdlbgogICAgIH0K
IH07CiAKLXR5cGVkZWYgSGFzaE1hcDxGb250UGxhdGZvcm1EYXRhLCBSZWZQdHI8U2ltcGxlRm9u
dERhdGE+LCBGb250RGF0YUNhY2hlS2V5SGFzaCwgRm9udERhdGFDYWNoZUtleVRyYWl0cz4gRm9u
dERhdGFDYWNoZTsKK3R5cGVkZWYgSGFzaE1hcDxGb250UGxhdGZvcm1EYXRhLCBSZWZQdHI8Rm9u
dD4sIEZvbnREYXRhQ2FjaGVLZXlIYXNoLCBGb250RGF0YUNhY2hlS2V5VHJhaXRzPiBGb250RGF0
YUNhY2hlOwogCiBzdGF0aWMgRm9udERhdGFDYWNoZSYgY2FjaGVkRm9udHMoKQogewpAQCAtMzc5
LDcgKzM3OSw3IEBAIGNvbnN0IGludCBjVGFyZ2V0SW5hY3RpdmVGb250RGF0YSA9IDIwMDsKIGNv
bnN0IGludCBjTWF4VW5kZXJNZW1vcnlQcmVzc3VyZUluYWN0aXZlRm9udERhdGEgPSA1MDsKIGNv
bnN0IGludCBjVGFyZ2V0VW5kZXJNZW1vcnlQcmVzc3VyZUluYWN0aXZlRm9udERhdGEgPSAzMDsK
IAotUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmZvbnRGb3JGYW1pbHkoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFt
aWx5LCBib29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSkKK1JlZlB0cjxGb250PiBGb250Q2FjaGU6
OmZvbnRGb3JGYW1pbHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNv
bnN0IEF0b21pY1N0cmluZyYgZmFtaWx5LCBib29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSkKIHsK
ICAgICBpZiAoIW1fcHVyZ2VUaW1lci5pc0FjdGl2ZSgpKQogICAgICAgICBtX3B1cmdlVGltZXIu
c3RhcnRPbmVTaG90KHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM6Onplcm8oKSk7CkBAIC0zOTEs
NyArMzkxLDcgQEAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmZvbnRGbwogICAg
IHJldHVybiBmb250Rm9yUGxhdGZvcm1EYXRhKCpwbGF0Zm9ybURhdGEpOwogfQogCi1SZWY8U2lt
cGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Zm9udEZvclBsYXRmb3JtRGF0YShjb25zdCBGb250UGxh
dGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEpCitSZWY8Rm9udD4gRm9udENhY2hlOjpmb250Rm9yUGxh
dGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSkKIHsKICNpZiBQ
TEFURk9STShJT1MpCiAgICAgRm9udExvY2tlciBmb250TG9ja2VyOwpAQCAtMzk5LDcgKzM5OSw3
IEBAIFJlZjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpmb250Rm9yUGwKICAgICAKICAgICBh
dXRvIGFkZFJlc3VsdCA9IGNhY2hlZEZvbnRzKCkuYWRkKHBsYXRmb3JtRGF0YSwgbnVsbHB0cik7
CiAgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICBhZGRSZXN1bHQuaXRlcmF0
b3ItPnZhbHVlID0gU2ltcGxlRm9udERhdGE6OmNyZWF0ZShwbGF0Zm9ybURhdGEpOworICAgICAg
ICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gRm9udDo6Y3JlYXRlKHBsYXRmb3JtRGF0YSk7
CiAKICAgICByZXR1cm4gKmFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiB9CkBAIC00MTYsNyAr
NDE2LDcgQEAgdm9pZCBGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YUlmTgogCiAgICAg
aWYgKGNhY2hlZEZvbnRzKCkuc2l6ZSgpIDwgaW5hY3RpdmVGb250RGF0YUxpbWl0KQogICAgICAg
ICByZXR1cm47Ci0gICAgaW50IGluYWN0aXZlQ291bnQgPSBpbmFjdGl2ZUZvbnREYXRhQ291bnQo
KTsKKyAgICBpbnQgaW5hY3RpdmVDb3VudCA9IGluYWN0aXZlRm9udENvdW50KCk7CiAgICAgaWYg
KGluYWN0aXZlQ291bnQgPD0gaW5hY3RpdmVGb250RGF0YUxpbWl0KQogICAgICAgICByZXR1cm47
CiAKQEAgLTQzNCw3ICs0MzQsNyBAQCB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnRE
YXRhKGluCiAjZW5kaWYKIAogICAgIHdoaWxlIChwdXJnZUNvdW50KSB7Ci0gICAgICAgIFZlY3Rv
cjxSZWZQdHI8U2ltcGxlRm9udERhdGE+LCAyMD4gZm9udHNUb0RlbGV0ZTsKKyAgICAgICAgVmVj
dG9yPFJlZlB0cjxGb250PiwgMjA+IGZvbnRzVG9EZWxldGU7CiAgICAgICAgIGZvciAoYXV0byYg
Zm9udCA6IGNhY2hlZEZvbnRzKCkudmFsdWVzKCkpIHsKICAgICAgICAgICAgIGlmICghZm9udC0+
aGFzT25lUmVmKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC00NjYsOCArNDY2LDgg
QEAgdm9pZCBGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YShpbgogICAgICAgICAgICAg
aWYgKHZlcnRpY2FsRGF0YSkKICAgICAgICAgICAgICAgICB2ZXJ0aWNhbERhdGEtPm1faW5Gb250
Q2FjaGUgPSBmYWxzZTsKICAgICAgICAgfQotICAgICAgICBmb3IgKGF1dG8mIGZvbnREYXRhIDog
Y2FjaGVkRm9udHMoKS52YWx1ZXMoKSkgewotICAgICAgICAgICAgYXV0byogdmVydGljYWxEYXRh
ID0gY29uc3RfY2FzdDxPcGVuVHlwZVZlcnRpY2FsRGF0YSo+KGZvbnREYXRhLT52ZXJ0aWNhbERh
dGEoKSk7CisgICAgICAgIGZvciAoYXV0byYgZm9udCA6IGNhY2hlZEZvbnRzKCkudmFsdWVzKCkp
IHsKKyAgICAgICAgICAgIGF1dG8qIHZlcnRpY2FsRGF0YSA9IGNvbnN0X2Nhc3Q8T3BlblR5cGVW
ZXJ0aWNhbERhdGEqPihmb250LT52ZXJ0aWNhbERhdGEoKSk7CiAgICAgICAgICAgICBpZiAodmVy
dGljYWxEYXRhKQogICAgICAgICAgICAgICAgIHZlcnRpY2FsRGF0YS0+bV9pbkZvbnRDYWNoZSA9
IHRydWU7CiAgICAgICAgIH0KQEAgLTQ4MywxMiArNDgzLDEyIEBAIHZvaWQgRm9udENhY2hlOjpw
dXJnZUluYWN0aXZlRm9udERhdGEoaW4KICNlbmRpZgogfQogCi1zaXplX3QgRm9udENhY2hlOjpm
b250RGF0YUNvdW50KCkKK3NpemVfdCBGb250Q2FjaGU6OmZvbnRDb3VudCgpCiB7CiAgICAgcmV0
dXJuIGNhY2hlZEZvbnRzKCkuc2l6ZSgpOwogfQogCi1zaXplX3QgRm9udENhY2hlOjppbmFjdGl2
ZUZvbnREYXRhQ291bnQoKQorc2l6ZV90IEZvbnRDYWNoZTo6aW5hY3RpdmVGb250Q291bnQoKQog
ewogI2lmIFBMQVRGT1JNKElPUykKICAgICBGb250TG9ja2VyIGZvbnRMb2NrZXI7CkBAIC01NTEs
NyArNTUxLDcgQEAgdm9pZCBGb250Q2FjaGU6OmludmFsaWRhdGUoKQogfQogCiAjaWYgIVBMQVRG
T1JNKENPQ09BKQotUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OnNpbWlsYXJGb250
UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpCitSZWZQdHI8Rm9udD4gRm9udENh
Y2hlOjpzaW1pbGFyRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mKQogewogICAgIHJldHVybiBu
dWxscHRyOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
Y2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhY2hlLmgJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIGNsYXNz
IEZvbnRDYXNjYWRlOwogY2xhc3MgRm9udFBsYXRmb3JtRGF0YTsKIGNsYXNzIEZvbnRTZWxlY3Rv
cjsKIGNsYXNzIE9wZW5UeXBlVmVydGljYWxEYXRhOwotY2xhc3MgU2ltcGxlRm9udERhdGE7Citj
bGFzcyBGb250OwogCiAjaWYgUExBVEZPUk0oV0lOKQogI2lmIFVTRShJTUxBTkdfRk9OVF9MSU5L
MikKQEAgLTExMSw3ICsxMTEsNyBAQCBwdWJsaWM6CiAgICAgZnJpZW5kIEZvbnRDYWNoZSYgZm9u
dENhY2hlKCk7CiAKICAgICAvLyBUaGlzIG1ldGhvZCBpcyBpbXBsZW1lbnRlZCBieSB0aGUgcGxh
dGZvcm0uCi0gICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBzeXN0ZW1GYWxsYmFja0ZvckNoYXJh
Y3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgU2ltcGxlRm9udERhdGEqIG9yaWdp
bmFsRm9udERhdGEsIGJvb2wgaXNQbGF0Zm9ybUZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
LCBpbnQgbGVuZ3RoKTsKKyAgICBSZWZQdHI8Rm9udD4gc3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0
ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEZvbnQqIG9yaWdpbmFsRm9udERhdGEs
IGJvb2wgaXNQbGF0Zm9ybUZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3Ro
KTsKIAogICAgIC8vIEFsc28gaW1wbGVtZW50ZWQgYnkgdGhlIHBsYXRmb3JtLgogICAgIHZvaWQg
cGxhdGZvcm1Jbml0KCk7CkBAIC0xMjgsMTAgKzEyOCwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IGdldFRyYWl0c0luRmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYsIFZlY3Rvcjx1bnNpZ25lZD4m
KTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gZm9udEZvckZh
bWlseShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9taWNTdHJpbmcmLCBib29sIGNo
ZWNraW5nQWx0ZXJuYXRlTmFtZSA9IGZhbHNlKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWY8U2lt
cGxlRm9udERhdGE+IGxhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9u
Jik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgUmVmPFNpbXBsZUZvbnREYXRhPiBmb250Rm9yUGxhdGZv
cm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsKLSAgICBSZWZQdHI8U2ltcGxlRm9udERh
dGE+IHNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpOworICAg
IFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxGb250PiBmb250Rm9yRmFtaWx5KGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYsIGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1l
ID0gZmFsc2UpOworICAgIFdFQkNPUkVfRVhQT1JUIFJlZjxGb250PiBsYXN0UmVzb3J0RmFsbGJh
Y2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpOworICAgIFdFQkNPUkVfRVhQT1JUIFJlZjxG
b250PiBmb250Rm9yUGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsKKyAgICBS
ZWZQdHI8Rm9udD4gc2ltaWxhckZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJik7CiAKICAgICB2
b2lkIGFkZENsaWVudChGb250U2VsZWN0b3IqKTsKICAgICB2b2lkIHJlbW92ZUNsaWVudChGb250
U2VsZWN0b3IqKTsKQEAgLTEzOSwxMiArMTM5LDEyIEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBz
aG9ydCBnZW5lcmF0aW9uKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBpbnZhbGlkYXRlKCk7
CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBzaXplX3QgZm9udERhdGFDb3VudCgpOwotICAgIFdFQkNP
UkVfRVhQT1JUIHNpemVfdCBpbmFjdGl2ZUZvbnREYXRhQ291bnQoKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCBzaXplX3QgZm9udENvdW50KCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc2l6ZV90IGluYWN0
aXZlRm9udENvdW50KCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwdXJnZUluYWN0aXZlRm9u
dERhdGEoaW50IGNvdW50ID0gSU5UX01BWCk7CiAKICNpZiBQTEFURk9STShXSU4pCi0gICAgUmVm
UHRyPFNpbXBsZUZvbnREYXRhPiBmb250RGF0YUZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoY29u
c3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgTE9HRk9OVCYsIEF0b21pY1N0cmluZyYgb3V0Rm9u
dEZhbWlseU5hbWUpOworICAgIFJlZlB0cjxGb250PiBmb250RnJvbURlc2NyaXB0aW9uQW5kTG9n
Rm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBMT0dGT05UJiwgQXRvbWljU3RyaW5n
JiBvdXRGb250RmFtaWx5TmFtZSk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJU
SUNBTCkKQEAgLTE3Myw3ICsxNzMsNyBAQCBwcml2YXRlOgogICAgIC8vIFRoZXNlIG1ldGhvZHMg
YXJlIGltcGxlbWVudGVkIGJ5IGVhY2ggcGxhdGZvcm0uCiAjaWYgUExBVEZPUk0oSU9TKQogICAg
IEZvbnRQbGF0Zm9ybURhdGEqIGdldEN1c3RvbUZhbGxiYWNrRm9udChjb25zdCBVSW50MzIsIGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYpOwotICAgIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IGdl
dFN5c3RlbUZvbnRGYWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9uJiwg
Y29uc3QgU2ltcGxlRm9udERhdGEqLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0
aCk7CisgICAgUGFzc1JlZlB0cjxGb250PiBnZXRTeXN0ZW1Gb250RmFsbGJhY2tGb3JDaGFyYWN0
ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEZvbnQqLCBjb25zdCBVQ2hhciogY2hh
cmFjdGVycywgaW50IGxlbmd0aCk7CiAjZW5kaWYKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBs
YXRmb3JtRGF0YT4gY3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24m
LCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSk7CiAKQEAgLTE4Miw3ICsxODIsNyBAQCBwcml2
YXRlOgogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIGZyaWVuZCBjbGFzcyBDb21wbGV4VGV4dENv
bnRyb2xsZXI7CiAjZW5kaWYKLSAgICBmcmllbmQgY2xhc3MgU2ltcGxlRm9udERhdGE7CisgICAg
ZnJpZW5kIGNsYXNzIEZvbnQ7CiB9OwogCiAvLyBHZXQgdGhlIGdsb2JhbCBmb250Q2FjaGUuCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUu
Y3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250Q2FzY2FkZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNCw4ICsxMjQsOCBAQCBGb250
Q2FzY2FkZTo6Rm9udENhc2NhZGUoY29uc3QgRm9udERlc2NyCiB9CiAKIC8vIEZJWE1FOiBXZSBz
aG91bGQgbWFrZSB0aGlzIGNvbnN0cnVjdG9yIHBsYXRmb3JtLWluZGVwZW5kZW50LgotRm9udENh
c2NhZGU6OkZvbnRDYXNjYWRlKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnREYXRhLCBib29s
IGlzUHJpbnRlckZvbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmdNb2RlKQotICAg
IDogbV9nbHlwaHMoRm9udEdseXBoczo6Y3JlYXRlRm9yUGxhdGZvcm1Gb250KGZvbnREYXRhKSkK
K0ZvbnRDYXNjYWRlOjpGb250Q2FzY2FkZShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBmb250LCBi
b29sIGlzUHJpbnRlckZvbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmdNb2RlKQor
ICAgIDogbV9nbHlwaHMoRm9udEdseXBoczo6Y3JlYXRlRm9yUGxhdGZvcm1Gb250KGZvbnQpKQog
ICAgICwgbV9sZXR0ZXJTcGFjaW5nKDApCiAgICAgLCBtX3dvcmRTcGFjaW5nKDApCiAgICAgLCBt
X3VzZUJhY2tzbGFzaEFzWWVuU3ltYm9sKGZhbHNlKQpAQCAtMTM0LDI3ICsxMzQsMjcgQEAgRm9u
dENhc2NhZGU6OkZvbnRDYXNjYWRlKGNvbnN0IEZvbnRQbGF0ZgogICAgIG1fZm9udERlc2NyaXB0
aW9uLnNldFVzZVByaW50ZXJGb250KGlzUHJpbnRlckZvbnQpOwogICAgIG1fZm9udERlc2NyaXB0
aW9uLnNldEZvbnRTbW9vdGhpbmcoZm9udFNtb290aGluZ01vZGUpOwogI2lmIFBMQVRGT1JNKElP
UykKLSAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKENURm9udEdldFNpemUo
Zm9udERhdGEuZm9udCgpKSk7Ci0gICAgbV9mb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXpl
KENURm9udEdldFNpemUoZm9udERhdGEuZm9udCgpKSk7Ci0gICAgbV9mb250RGVzY3JpcHRpb24u
c2V0SXNJdGFsaWMoQ1RGb250R2V0U3ltYm9saWNUcmFpdHMoZm9udERhdGEuZm9udCgpKSAmIGtD
VEZvbnRUcmFpdEl0YWxpYyk7Ci0gICAgbV9mb250RGVzY3JpcHRpb24uc2V0V2VpZ2h0KChDVEZv
bnRHZXRTeW1ib2xpY1RyYWl0cyhmb250RGF0YS5mb250KCkpICYga0NURm9udFRyYWl0Qm9sZCkg
PyBGb250V2VpZ2h0Qm9sZCA6IEZvbnRXZWlnaHROb3JtYWwpOworICAgIG1fZm9udERlc2NyaXB0
aW9uLnNldFNwZWNpZmllZFNpemUoQ1RGb250R2V0U2l6ZShmb250LmZvbnQoKSkpOworICAgIG1f
Zm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShDVEZvbnRHZXRTaXplKGZvbnQuZm9udCgp
KSk7CisgICAgbV9mb250RGVzY3JpcHRpb24uc2V0SXNJdGFsaWMoQ1RGb250R2V0U3ltYm9saWNU
cmFpdHMoZm9udC5mb250KCkpICYga0NURm9udFRyYWl0SXRhbGljKTsKKyAgICBtX2ZvbnREZXNj
cmlwdGlvbi5zZXRXZWlnaHQoKENURm9udEdldFN5bWJvbGljVHJhaXRzKGZvbnQuZm9udCgpKSAm
IGtDVEZvbnRUcmFpdEJvbGQpID8gRm9udFdlaWdodEJvbGQgOiBGb250V2VpZ2h0Tm9ybWFsKTsK
ICNlbmRpZgogfQogCiAvLyBGSVhNRTogV2Ugc2hvdWxkIG1ha2UgdGhpcyBjb25zdHJ1Y3RvciBw
bGF0Zm9ybS1pbmRlcGVuZGVudC4KICNpZiBQTEFURk9STShJT1MpCi1Gb250Q2FzY2FkZTo6Rm9u
dENhc2NhZGUoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZm9udERhdGEsIFBhc3NSZWZQdHI8Rm9u
dFNlbGVjdG9yPiBmb250U2VsZWN0b3IpCi0gICAgOiBtX2dseXBocyhGb250R2x5cGhzOjpjcmVh
dGVGb3JQbGF0Zm9ybUZvbnQoZm9udERhdGEpKQorRm9udENhc2NhZGU6OkZvbnRDYXNjYWRlKGNv
bnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnQsIFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPiBmb250
U2VsZWN0b3IpCisgICAgOiBtX2dseXBocyhGb250R2x5cGhzOjpjcmVhdGVGb3JQbGF0Zm9ybUZv
bnQoZm9udCkpCiAgICAgLCBtX2xldHRlclNwYWNpbmcoMCkKICAgICAsIG1fd29yZFNwYWNpbmco
MCkKICAgICAsIG1fdHlwZXNldHRpbmdGZWF0dXJlcyhjb21wdXRlVHlwZXNldHRpbmdGZWF0dXJl
cygpKQogewotICAgIENURm9udFJlZiBwcmltYXJ5Rm9udCA9IGZvbnREYXRhLmZvbnQoKTsKKyAg
ICBDVEZvbnRSZWYgcHJpbWFyeUZvbnQgPSBmb250LmZvbnQoKTsKICAgICBtX2ZvbnREZXNjcmlw
dGlvbi5zZXRTcGVjaWZpZWRTaXplKENURm9udEdldFNpemUocHJpbWFyeUZvbnQpKTsKICAgICBt
X2ZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoQ1RGb250R2V0U2l6ZShwcmltYXJ5Rm9u
dCkpOwogICAgIG1fZm9udERlc2NyaXB0aW9uLnNldElzSXRhbGljKENURm9udEdldFN5bWJvbGlj
VHJhaXRzKHByaW1hcnlGb250KSAmIGtDVEZvbnRUcmFpdEl0YWxpYyk7CiAgICAgbV9mb250RGVz
Y3JpcHRpb24uc2V0V2VpZ2h0KChDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhwcmltYXJ5Rm9udCkg
JiBrQ1RGb250VHJhaXRCb2xkKSA/IEZvbnRXZWlnaHRCb2xkIDogRm9udFdlaWdodE5vcm1hbCk7
Ci0gICAgbV9mb250RGVzY3JpcHRpb24uc2V0VXNlUHJpbnRlckZvbnQoZm9udERhdGEuaXNQcmlu
dGVyRm9udCgpKTsKKyAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRVc2VQcmludGVyRm9udChmb250
LmlzUHJpbnRlckZvbnQoKSk7CiAgICAgbV9nbHlwaHMgPSByZXRyaWV2ZU9yQWRkQ2FjaGVkRm9u
dEdseXBocyhtX2ZvbnREZXNjcmlwdGlvbiwgZm9udFNlbGVjdG9yLmdldCgpKTsKIH0KICNlbmRp
ZgpAQCAtMzcxLDcgKzM3MSw3IEBAIHZvaWQgRm9udENhc2NhZGU6OmRyYXdFbXBoYXNpc01hcmtz
KEdyYXAKICAgICAgICAgZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChjb250ZXh0LCBy
dW4sIG1hcmssIHBvaW50LCBmcm9tLCB0byk7CiB9CiAKLWZsb2F0IEZvbnRDYXNjYWRlOjp3aWR0
aChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFs
bGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKK2Zsb2F0IEZv
bnRDYXNjYWRlOjp3aWR0aChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgRm9udCo+
KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAogewog
ICAgIENvZGVQYXRoIGNvZGVQYXRoVG9Vc2UgPSBjb2RlUGF0aChydW4pOwogICAgIGlmIChjb2Rl
UGF0aFRvVXNlICE9IENvbXBsZXgpIHsKQEAgLTM4OSw3ICszODksNyBAQCBmbG9hdCBGb250Q2Fz
Y2FkZTo6d2lkdGgoY29uc3QgVGV4dFJ1biYgCiAgICAgaWYgKGNhY2hlRW50cnkgJiYgIXN0ZDo6
aXNuYW4oKmNhY2hlRW50cnkpKQogICAgICAgICByZXR1cm4gKmNhY2hlRW50cnk7CiAKLSAgICBI
YXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4gbG9jYWxGYWxsYmFja0ZvbnRzOworICAgIEhh
c2hTZXQ8Y29uc3QgRm9udCo+IGxvY2FsRmFsbGJhY2tGb250czsKICAgICBpZiAoIWZhbGxiYWNr
Rm9udHMpCiAgICAgICAgIGZhbGxiYWNrRm9udHMgPSAmbG9jYWxGYWxsYmFja0ZvbnRzOwogCkBA
IC00MTYsMTAgKzQxNiwxMCBAQCBmbG9hdCBGb250Q2FzY2FkZTo6d2lkdGgoY29uc3QgVGV4dFJ1
biYgCiAgICAgcmV0dXJuIHdpZHRoKHJ1bik7CiB9CiAKLUdseXBoRGF0YSBGb250Q2FzY2FkZTo6
Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYywgYm9vbCBtaXJyb3IsIEZvbnREYXRhVmFy
aWFudCB2YXJpYW50KSBjb25zdAorR2x5cGhEYXRhIEZvbnRDYXNjYWRlOjpnbHlwaERhdGFGb3JD
aGFyYWN0ZXIoVUNoYXIzMiBjLCBib29sIG1pcnJvciwgRm9udFZhcmlhbnQgdmFyaWFudCkgY29u
c3QKIHsKICAgICBpZiAodmFyaWFudCA9PSBBdXRvVmFyaWFudCkgewotICAgICAgICBpZiAobV9m
b250RGVzY3JpcHRpb24uc21hbGxDYXBzKCkgJiYgIXByaW1hcnlGb250RGF0YSgpLmlzU1ZHRm9u
dCgpKSB7CisgICAgICAgIGlmIChtX2ZvbnREZXNjcmlwdGlvbi5zbWFsbENhcHMoKSAmJiAhcHJp
bWFyeUZvbnQoKS5pc1NWR0ZvbnQoKSkgewogICAgICAgICAgICAgVUNoYXIzMiB1cHBlckMgPSB1
X3RvdXBwZXIoYyk7CiAgICAgICAgICAgICBpZiAodXBwZXJDICE9IGMpIHsKICAgICAgICAgICAg
ICAgICBjID0gdXBwZXJDOwpAQCAtNDQ2LDcgKzQ0Niw3IEBAIHZvaWQgRm9udENhc2NhZGU6OmRl
bGV0ZUxheW91dChUZXh0TGF5b3UKIHsKIH0KIAotZmxvYXQgRm9udENhc2NhZGU6OndpZHRoKFRl
eHRMYXlvdXQmLCB1bnNpZ25lZCwgdW5zaWduZWQsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERh
dGEqPiopCitmbG9hdCBGb250Q2FzY2FkZTo6d2lkdGgoVGV4dExheW91dCYsIHVuc2lnbmVkLCB1
bnNpZ25lZCwgSGFzaFNldDxjb25zdCBGb250Kj4qKQogewogICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgIHJldHVybiAwOwpAQCAtNTA1LDcgKzUwNSw3IEBAIGJvb2wgRm9udENhc2NhZGU6
Omhhc1ZhbGlkQXZlcmFnZUNoYXJXaWQKIAogI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0o
SU9TKQogICAgIC8vIEludGVybmFsIGZvbnRzIG9uIE9TIFggYW5kIGlPUyBhbHNvIGhhdmUgYW4g
aW52YWxpZCBlbnRyeSBpbiB0aGUgdGFibGUgZm9yIGF2Z0NoYXJXaWR0aC4KLSAgICBpZiAocHJp
bWFyeUZvbnREYXRhSXNTeXN0ZW1Gb250KCkpCisgICAgaWYgKHByaW1hcnlGb250SXNTeXN0ZW1G
b250KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgogCkBAIC01MjUsNyArNTI1LDcg
QEAgYm9vbCBGb250Q2FzY2FkZTo6ZmFzdEF2ZXJhZ2VDaGFyV2lkdGhJZgogewogICAgIGJvb2wg
c3VjY2VzcyA9IGhhc1ZhbGlkQXZlcmFnZUNoYXJXaWR0aCgpOwogICAgIGlmIChzdWNjZXNzKQot
ICAgICAgICB3aWR0aCA9IHJvdW5kZihwcmltYXJ5Rm9udERhdGEoKS5hdmdDaGFyV2lkdGgoKSk7
IC8vIEZJWE1FOiBwcmltYXJ5Rm9udERhdGEoKSBtaWdodCBub3QgY29ycmVzcG9uZCB0byBmaXJz
dEZhbWlseSgpLgorICAgICAgICB3aWR0aCA9IHJvdW5kZihwcmltYXJ5Rm9udCgpLmF2Z0NoYXJX
aWR0aCgpKTsgLy8gRklYTUU6IHByaW1hcnlGb250KCkgbWlnaHQgbm90IGNvcnJlc3BvbmQgdG8g
Zmlyc3RGYW1pbHkoKS4KICAgICByZXR1cm4gc3VjY2VzczsKIH0KIApAQCAtMTE3Myw3ICsxMTcz
LDcgQEAgaW50IEZvbnRDYXNjYWRlOjplbXBoYXNpc01hcmtBc2NlbnQoY29ucwogICAgIGlmICgh
Z2V0RW1waGFzaXNNYXJrR2x5cGhEYXRhKG1hcmssIG1hcmtHbHlwaERhdGEpKQogICAgICAgICBy
ZXR1cm4gMDsKIAotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBtYXJrRm9udERhdGEgPSBtYXJr
R2x5cGhEYXRhLmZvbnREYXRhOworICAgIGNvbnN0IEZvbnQqIG1hcmtGb250RGF0YSA9IG1hcmtH
bHlwaERhdGEuZm9udDsKICAgICBBU1NFUlQobWFya0ZvbnREYXRhKTsKICAgICBpZiAoIW1hcmtG
b250RGF0YSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMTg3LDcgKzExODcsNyBAQCBpbnQgRm9u
dENhc2NhZGU6OmVtcGhhc2lzTWFya0Rlc2NlbnQoY29uCiAgICAgaWYgKCFnZXRFbXBoYXNpc01h
cmtHbHlwaERhdGEobWFyaywgbWFya0dseXBoRGF0YSkpCiAgICAgICAgIHJldHVybiAwOwogCi0g
ICAgY29uc3QgU2ltcGxlRm9udERhdGEqIG1hcmtGb250RGF0YSA9IG1hcmtHbHlwaERhdGEuZm9u
dERhdGE7CisgICAgY29uc3QgRm9udCogbWFya0ZvbnREYXRhID0gbWFya0dseXBoRGF0YS5mb250
OwogICAgIEFTU0VSVChtYXJrRm9udERhdGEpOwogICAgIGlmICghbWFya0ZvbnREYXRhKQogICAg
ICAgICByZXR1cm4gMDsKQEAgLTEyMDEsNyArMTIwMSw3IEBAIGludCBGb250Q2FzY2FkZTo6ZW1w
aGFzaXNNYXJrSGVpZ2h0KGNvbnMKICAgICBpZiAoIWdldEVtcGhhc2lzTWFya0dseXBoRGF0YSht
YXJrLCBtYXJrR2x5cGhEYXRhKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBjb25zdCBTaW1w
bGVGb250RGF0YSogbWFya0ZvbnREYXRhID0gbWFya0dseXBoRGF0YS5mb250RGF0YTsKKyAgICBj
b25zdCBGb250KiBtYXJrRm9udERhdGEgPSBtYXJrR2x5cGhEYXRhLmZvbnQ7CiAgICAgQVNTRVJU
KG1hcmtGb250RGF0YSk7CiAgICAgaWYgKCFtYXJrRm9udERhdGEpCiAgICAgICAgIHJldHVybiAw
OwpAQCAtMTI3Myw3ICsxMjczLDcgQEAgdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBoQnVmZmVy
KEdyYXBoaQogI2VuZGlmCiAKICAgICAvLyBEcmF3IGVhY2ggY29udGlndW91cyBydW4gb2YgZ2x5
cGhzIHRoYXQgdXNlIHRoZSBzYW1lIGZvbnQgZGF0YS4KLSAgICBjb25zdCBTaW1wbGVGb250RGF0
YSogZm9udERhdGEgPSBnbHlwaEJ1ZmZlci5mb250RGF0YUF0KDApOworICAgIGNvbnN0IEZvbnQq
IGZvbnREYXRhID0gZ2x5cGhCdWZmZXIuZm9udEF0KDApOwogICAgIEZsb2F0U2l6ZSBvZmZzZXQg
PSBnbHlwaEJ1ZmZlci5vZmZzZXRBdCgwKTsKICAgICBGbG9hdFBvaW50IHN0YXJ0UG9pbnQocG9p
bnQueCgpLCBwb2ludC55KCkgLSBnbHlwaEJ1ZmZlci5pbml0aWFsQWR2YW5jZSgpLmhlaWdodCgp
KTsKICAgICBmbG9hdCBuZXh0WCA9IHN0YXJ0UG9pbnQueCgpICsgZ2x5cGhCdWZmZXIuYWR2YW5j
ZUF0KDApLndpZHRoKCk7CkBAIC0xMjg0LDcgKzEyODQsNyBAQCB2b2lkIEZvbnRDYXNjYWRlOjpk
cmF3R2x5cGhCdWZmZXIoR3JhcGhpCiAgICAgVGV4dFJ1bjo6UmVuZGVyaW5nQ29udGV4dCogcmVu
ZGVyaW5nQ29udGV4dCA9IHJ1bi5yZW5kZXJpbmdDb250ZXh0KCk7CiAjZW5kaWYKICAgICB3aGls
ZSAobmV4dEdseXBoIDwgZ2x5cGhCdWZmZXIuc2l6ZSgpKSB7Ci0gICAgICAgIGNvbnN0IFNpbXBs
ZUZvbnREYXRhKiBuZXh0Rm9udERhdGEgPSBnbHlwaEJ1ZmZlci5mb250RGF0YUF0KG5leHRHbHlw
aCk7CisgICAgICAgIGNvbnN0IEZvbnQqIG5leHRGb250RGF0YSA9IGdseXBoQnVmZmVyLmZvbnRB
dChuZXh0R2x5cGgpOwogICAgICAgICBGbG9hdFNpemUgbmV4dE9mZnNldCA9IGdseXBoQnVmZmVy
Lm9mZnNldEF0KG5leHRHbHlwaCk7CiAKICAgICAgICAgaWYgKG5leHRGb250RGF0YSAhPSBmb250
RGF0YSB8fCBuZXh0T2Zmc2V0ICE9IG9mZnNldCkgewpAQCAtMTMxNyw3ICsxMzE3LDcgQEAgdm9p
ZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBoQnVmZmVyKEdyYXBoaQogICAgIH0KIH0KIAotaW5saW5l
IHN0YXRpYyBmbG9hdCBvZmZzZXRUb01pZGRsZU9mR2x5cGgoY29uc3QgU2ltcGxlRm9udERhdGEq
IGZvbnREYXRhLCBHbHlwaCBnbHlwaCkKK2lubGluZSBzdGF0aWMgZmxvYXQgb2Zmc2V0VG9NaWRk
bGVPZkdseXBoKGNvbnN0IEZvbnQqIGZvbnREYXRhLCBHbHlwaCBnbHlwaCkKIHsKICAgICBpZiAo
Zm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbCkgewog
ICAgICAgICBGbG9hdFJlY3QgYm91bmRzID0gZm9udERhdGEtPmJvdW5kc0ZvckdseXBoKGdseXBo
KTsKQEAgLTEzMjksNyArMTMyOSw3IEBAIGlubGluZSBzdGF0aWMgZmxvYXQgb2Zmc2V0VG9NaWRk
bGVPZkdseXAKIAogaW5saW5lIHN0YXRpYyBmbG9hdCBvZmZzZXRUb01pZGRsZU9mR2x5cGhBdElu
ZGV4KGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgc2l6ZV90IGkpCiB7Ci0gICAgcmV0
dXJuIG9mZnNldFRvTWlkZGxlT2ZHbHlwaChnbHlwaEJ1ZmZlci5mb250RGF0YUF0KGkpLCBnbHlw
aEJ1ZmZlci5nbHlwaEF0KGkpKTsKKyAgICByZXR1cm4gb2Zmc2V0VG9NaWRkbGVPZkdseXBoKGds
eXBoQnVmZmVyLmZvbnRBdChpKSwgZ2x5cGhCdWZmZXIuZ2x5cGhBdChpKSk7CiB9CiAKIHZvaWQg
Rm9udENhc2NhZGU6OmRyYXdFbXBoYXNpc01hcmtzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
Y29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGNvbnN0
IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0CkBAIC0x
MzM4LDcgKzEzMzgsNyBAQCB2b2lkIEZvbnRDYXNjYWRlOjpkcmF3RW1waGFzaXNNYXJrcyhHcmFw
CiAgICAgaWYgKCFnZXRFbXBoYXNpc01hcmtHbHlwaERhdGEobWFyaywgbWFya0dseXBoRGF0YSkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBtYXJrRm9udERh
dGEgPSBtYXJrR2x5cGhEYXRhLmZvbnREYXRhOworICAgIGNvbnN0IEZvbnQqIG1hcmtGb250RGF0
YSA9IG1hcmtHbHlwaERhdGEuZm9udDsKICAgICBBU1NFUlQobWFya0ZvbnREYXRhKTsKICAgICBp
ZiAoIW1hcmtGb250RGF0YSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTM2MSw3ICsxMzYxLDcgQEAg
dm9pZCBGb250Q2FzY2FkZTo6ZHJhd0VtcGhhc2lzTWFya3MoR3JhcAogICAgIGRyYXdHbHlwaEJ1
ZmZlcihjb250ZXh0LCBydW4sIG1hcmtCdWZmZXIsIHN0YXJ0UG9pbnQpOwogfQogCi1mbG9hdCBG
b250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBI
YXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZs
b3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0CitmbG9hdCBGb250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZv
clNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFs
bGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKIHsKICAgICBX
aWR0aEl0ZXJhdG9yIGl0KHRoaXMsIHJ1biwgZmFsbGJhY2tGb250cywgZ2x5cGhPdmVyZmxvdyk7
CiAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgJKHJldmlzaW9uIDE3ODg1NykKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDEwICsyNiwxMCBAQAogI2RlZmluZSBGb250Q2FzY2FkZV9oCiAKICNpbmNsdWRl
ICJEYXNoQXJyYXkuaCIKKyNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9udERlc2NyaXB0
aW9uLmgiCiAjaW5jbHVkZSAiRm9udEdseXBocy5oIgogI2luY2x1ZGUgIlBhdGguaCIKLSNpbmNs
dWRlICJTaW1wbGVGb250RGF0YS5oIgogI2luY2x1ZGUgIlRleHREaXJlY3Rpb24uaCIKICNpbmNs
dWRlICJUeXBlc2V0dGluZ0ZlYXR1cmVzLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAg
LTEzNCwxNyArMTM0LDE3IEBAIHB1YmxpYzoKIAogICAgIGVudW0gQ3VzdG9tRm9udE5vdFJlYWR5
QWN0aW9uIHsgRG9Ob3RQYWludElmRm9udE5vdFJlYWR5LCBVc2VGYWxsYmFja0lmRm9udE5vdFJl
YWR5IH07CiAgICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQgZHJhd1RleHQoR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGludCB0
byA9IC0xLCBDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPSBEb05vdFBhaW50SWZGb250Tm90UmVh
ZHkpIGNvbnN0OwotICAgIHZvaWQgZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBT
aW1wbGVGb250RGF0YSosIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCBudW1HbHlw
aHMsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKKyAgICB2b2lkIGRyYXdHbHlwaHMoR3JhcGhp
Y3NDb250ZXh0KiwgY29uc3QgRm9udCosIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGlu
dCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKICAgICB2b2lkIGRyYXdFbXBo
YXNpc01hcmtzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9taWNT
dHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0x
KSBjb25zdDsKIAogICAgIERhc2hBcnJheSBkYXNoZXNGb3JJbnRlcnNlY3Rpb25zV2l0aFJlY3Qo
Y29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIGNvbnN0IEZsb2F0
UmVjdCYgbGluZUV4dGVudHMpIGNvbnN0OwogCi0gICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQgd2lk
dGgoY29uc3QgVGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJh
Y2tGb250cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBP
UlQgZmxvYXQgd2lkdGgoY29uc3QgVGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxs
YmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsKICAgICBmbG9hdCB3aWR0
aChjb25zdCBUZXh0UnVuJiwgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcmIGdseXBoTmFtZSkg
Y29uc3Q7CiAKICAgICBQYXNzT3duUHRyPFRleHRMYXlvdXQ+IGNyZWF0ZUxheW91dChSZW5kZXJU
ZXh0KiwgZmxvYXQgeFBvcywgYm9vbCBjb2xsYXBzZVdoaXRlU3BhY2UpIGNvbnN0OwogICAgIHN0
YXRpYyB2b2lkIGRlbGV0ZUxheW91dChUZXh0TGF5b3V0Kik7Ci0gICAgc3RhdGljIGZsb2F0IHdp
ZHRoKFRleHRMYXlvdXQmLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIEhhc2hTZXQ8Y29u
c3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDApOworICAgIHN0YXRpYyBmbG9h
dCB3aWR0aChUZXh0TGF5b3V0JiwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBIYXNoU2V0
PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cyA9IDApOwogCiAgICAgaW50IG9mZnNldEZvclBv
c2l0aW9uKGNvbnN0IFRleHRSdW4mLCBmbG9hdCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlh
bEdseXBocykgY29uc3Q7CiAgICAgdm9pZCBhZGp1c3RTZWxlY3Rpb25SZWN0Rm9yVGV4dChjb25z
dCBUZXh0UnVuJiwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgaW50IGZyb20gPSAwLCBpbnQg
dG8gPSAtMSkgY29uc3Q7CkBAIC0xNzIsMTAgKzE3MiwxMCBAQCBwdWJsaWM6CiAKICAgICBib29s
IGlzUGxhdGZvcm1Gb250KCkgY29uc3QgeyByZXR1cm4gbV9nbHlwaHMtPmlzRm9yUGxhdGZvcm1G
b250KCk7IH0KIAotICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBmb250TWV0cmljcygpIGNvbnN0IHsg
cmV0dXJuIHByaW1hcnlGb250RGF0YSgpLmZvbnRNZXRyaWNzKCk7IH0KLSAgICBmbG9hdCBzcGFj
ZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gcHJpbWFyeUZvbnREYXRhKCkuc3BhY2VXaWR0aCgpICsg
bV9sZXR0ZXJTcGFjaW5nOyB9Ci0gICAgZmxvYXQgdGFiV2lkdGgoY29uc3QgU2ltcGxlRm9udERh
dGEmLCB1bnNpZ25lZCB0YWJTaXplLCBmbG9hdCBwb3NpdGlvbikgY29uc3Q7Ci0gICAgZmxvYXQg
dGFiV2lkdGgodW5zaWduZWQgdGFiU2l6ZSwgZmxvYXQgcG9zaXRpb24pIGNvbnN0IHsgcmV0dXJu
IHRhYldpZHRoKHByaW1hcnlGb250RGF0YSgpLCB0YWJTaXplLCBwb3NpdGlvbik7IH0KKyAgICBj
b25zdCBGb250TWV0cmljcyYgZm9udE1ldHJpY3MoKSBjb25zdCB7IHJldHVybiBwcmltYXJ5Rm9u
dCgpLmZvbnRNZXRyaWNzKCk7IH0KKyAgICBmbG9hdCBzcGFjZVdpZHRoKCkgY29uc3QgeyByZXR1
cm4gcHJpbWFyeUZvbnQoKS5zcGFjZVdpZHRoKCkgKyBtX2xldHRlclNwYWNpbmc7IH0KKyAgICBm
bG9hdCB0YWJXaWR0aChjb25zdCBGb250JiwgdW5zaWduZWQgdGFiU2l6ZSwgZmxvYXQgcG9zaXRp
b24pIGNvbnN0OworICAgIGZsb2F0IHRhYldpZHRoKHVuc2lnbmVkIHRhYlNpemUsIGZsb2F0IHBv
c2l0aW9uKSBjb25zdCB7IHJldHVybiB0YWJXaWR0aChwcmltYXJ5Rm9udCgpLCB0YWJTaXplLCBw
b3NpdGlvbik7IH0KICAgICBib29sIGhhc1ZhbGlkQXZlcmFnZUNoYXJXaWR0aCgpIGNvbnN0Owog
ICAgIGJvb2wgZmFzdEF2ZXJhZ2VDaGFyV2lkdGhJZkF2YWlsYWJsZShmbG9hdCAmd2lkdGgpIGNv
bnN0OyAvLyByZXR1cm5zIHRydWUgb24gc3VjY2VzcwogCkBAIC0xODMsMTIgKzE4MywxMiBAQCBw
dWJsaWM6CiAgICAgaW50IGVtcGhhc2lzTWFya0Rlc2NlbnQoY29uc3QgQXRvbWljU3RyaW5nJikg
Y29uc3Q7CiAgICAgaW50IGVtcGhhc2lzTWFya0hlaWdodChjb25zdCBBdG9taWNTdHJpbmcmKSBj
b25zdDsKIAotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhJiBwcmltYXJ5Rm9udERhdGEoKSBjb25z
dDsKKyAgICBjb25zdCBGb250JiBwcmltYXJ5Rm9udCgpIGNvbnN0OwogICAgIGNvbnN0IEZvbnRS
YW5nZXMmIGZhbGxiYWNrUmFuZ2VzQXQodW5zaWduZWQpIGNvbnN0OwotICAgIEdseXBoRGF0YSBn
bHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiwgYm9vbCBtaXJyb3IsIEZvbnREYXRhVmFyaWFu
dCA9IEF1dG9WYXJpYW50KSBjb25zdDsKKyAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yQ2hhcmFj
dGVyKFVDaGFyMzIsIGJvb2wgbWlycm9yLCBGb250VmFyaWFudCA9IEF1dG9WYXJpYW50KSBjb25z
dDsKICAgICAKICNpZiBQTEFURk9STShDT0NPQSkKLSAgICBjb25zdCBTaW1wbGVGb250RGF0YSog
Zm9udERhdGFGb3JDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBVQ2hhciosIHNpemVf
dCBsZW5ndGgsIEZvbnREYXRhVmFyaWFudCkgY29uc3Q7CisgICAgY29uc3QgRm9udCogZm9udEZv
ckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVDaGFyKiwgc2l6ZV90IGxlbmd0aCwg
Rm9udFZhcmlhbnQpIGNvbnN0OwogI2VuZGlmCiAKICAgICBzdGF0aWMgYm9vbCBpc0NKS0lkZW9n
cmFwaChVQ2hhcjMyKTsKQEAgLTIwNyw3ICsyMDcsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIENv
ZGVQYXRoIGNoYXJhY3RlclJhbmdlQ29kZVBhdGgoY29uc3QgTENoYXIqLCB1bnNpZ25lZCkgeyBy
ZXR1cm4gU2ltcGxlOyB9CiAgICAgc3RhdGljIENvZGVQYXRoIGNoYXJhY3RlclJhbmdlQ29kZVBh
dGgoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW4pOwogCi0gICAgYm9vbCBwcmltYXJ5Rm9udERh
dGFJc1N5c3RlbUZvbnQoKSBjb25zdDsKKyAgICBib29sIHByaW1hcnlGb250SXNTeXN0ZW1Gb250
KCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgZW51bSBGb3JUZXh0RW1waGFzaXNPck5vdCB7IE5v
dEZvclRleHRFbXBoYXNpcywgRm9yVGV4dEVtcGhhc2lzIH07CkBAIC0yMTgsNyArMjE4LDcgQEAg
cHJpdmF0ZToKICAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzRm9yU2ltcGxlVGV4dChHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25z
dCBGbG9hdFBvaW50JiwgaW50IGZyb20sIGludCB0bykgY29uc3Q7CiAgICAgdm9pZCBkcmF3R2x5
cGhCdWZmZXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEdseXBoQnVm
ZmVyJiwgRmxvYXRQb2ludCYpIGNvbnN0OwogICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3MoR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEdseXBoQnVmZmVyJiwgY29uc3Qg
QXRvbWljU3RyaW5nJiwgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OwotICAgIGZsb2F0IGZsb2F0
V2lkdGhGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZv
bnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93KiA9IDApIGNvbnN0Owor
ICAgIGZsb2F0IGZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mLCBIYXNoU2V0
PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29u
c3Q7CiAgICAgaW50IG9mZnNldEZvclBvc2l0aW9uRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVu
JiwgZmxvYXQgcG9zaXRpb24sIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0OwogICAg
IHZvaWQgYWRqdXN0U2VsZWN0aW9uUmVjdEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYsIExh
eW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0OwogCkBAIC0y
MzEsNyArMjMxLDcgQEAgcHJpdmF0ZToKICAgICBmbG9hdCBnZXRHbHlwaHNBbmRBZHZhbmNlc0Zv
ckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBpbnQgZnJvbSwgaW50IHRvLCBHbHlwaEJ1ZmZl
ciYsIEZvclRleHRFbXBoYXNpc09yTm90ID0gTm90Rm9yVGV4dEVtcGhhc2lzKSBjb25zdDsKICAg
ICBmbG9hdCBkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYs
IGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdDsKICAgICB2b2lkIGRy
YXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4
dFJ1biYsIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIGludCBm
cm9tLCBpbnQgdG8pIGNvbnN0OwotICAgIGZsb2F0IGZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChj
b25zdCBUZXh0UnVuJiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0Zv
bnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsKKyAgICBmbG9hdCBmbG9hdFdpZHRo
Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxs
YmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsKICAgICBpbnQgb2Zmc2V0
Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwgZmxvYXQgcG9zaXRpb24s
IGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0OwogICAgIHZvaWQgYWRqdXN0U2VsZWN0
aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBMYXlvdXRSZWN0JiBzZWxlY3Rp
b25SZWN0LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdDsKIApAQCAtMzUyLDEwICszNTIsMTAgQEAg
aW5saW5lIEZvbnRDYXNjYWRlOjp+Rm9udENhc2NhZGUoKQogewogfQogCi1pbmxpbmUgY29uc3Qg
U2ltcGxlRm9udERhdGEmIEZvbnRDYXNjYWRlOjpwcmltYXJ5Rm9udERhdGEoKSBjb25zdAoraW5s
aW5lIGNvbnN0IEZvbnQmIEZvbnRDYXNjYWRlOjpwcmltYXJ5Rm9udCgpIGNvbnN0CiB7CiAgICAg
QVNTRVJUKG1fZ2x5cGhzKTsKLSAgICByZXR1cm4gbV9nbHlwaHMtPnByaW1hcnlTaW1wbGVGb250
RGF0YShtX2ZvbnREZXNjcmlwdGlvbik7CisgICAgcmV0dXJuIG1fZ2x5cGhzLT5wcmltYXJ5Rm9u
dChtX2ZvbnREZXNjcmlwdGlvbik7CiB9CiAKIGlubGluZSBjb25zdCBGb250UmFuZ2VzJiBGb250
Q2FzY2FkZTo6ZmFsbGJhY2tSYW5nZXNBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QKQEAgLTM3NSwx
MyArMzc1LDEzIEBAIGlubGluZSBGb250U2VsZWN0b3IqIEZvbnRDYXNjYWRlOjpmb250U2UKICAg
ICByZXR1cm4gbV9nbHlwaHMgPyBtX2dseXBocy0+Zm9udFNlbGVjdG9yKCkgOiAwOwogfQogCi1p
bmxpbmUgZmxvYXQgRm9udENhc2NhZGU6OnRhYldpZHRoKGNvbnN0IFNpbXBsZUZvbnREYXRhJiBm
b250RGF0YSwgdW5zaWduZWQgdGFiU2l6ZSwgZmxvYXQgcG9zaXRpb24pIGNvbnN0CitpbmxpbmUg
ZmxvYXQgRm9udENhc2NhZGU6OnRhYldpZHRoKGNvbnN0IEZvbnQmIGZvbnQsIHVuc2lnbmVkIHRh
YlNpemUsIGZsb2F0IHBvc2l0aW9uKSBjb25zdAogewogICAgIGlmICghdGFiU2l6ZSkKICAgICAg
ICAgcmV0dXJuIGxldHRlclNwYWNpbmcoKTsKLSAgICBmbG9hdCB0YWJXaWR0aCA9IHRhYlNpemUg
KiBmb250RGF0YS5zcGFjZVdpZHRoKCkgKyBsZXR0ZXJTcGFjaW5nKCk7CisgICAgZmxvYXQgdGFi
V2lkdGggPSB0YWJTaXplICogZm9udC5zcGFjZVdpZHRoKCkgKyBsZXR0ZXJTcGFjaW5nKCk7CiAg
ICAgZmxvYXQgdGFiRGVsdGFXaWR0aCA9IHRhYldpZHRoIC0gZm1vZGYocG9zaXRpb24sIHRhYldp
ZHRoKTsKLSAgICByZXR1cm4gKHRhYkRlbHRhV2lkdGggPCBmb250RGF0YS5zcGFjZVdpZHRoKCkg
LyAyKSA/IHRhYldpZHRoIDogdGFiRGVsdGFXaWR0aDsKKyAgICByZXR1cm4gKHRhYkRlbHRhV2lk
dGggPCBmb250LnNwYWNlV2lkdGgoKSAvIDIpID8gdGFiV2lkdGggOiB0YWJEZWx0YVdpZHRoOwog
fQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250R2x5cGhz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
R2x5cGhzLmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udEdseXBocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiAKIEZvbnRHbHlwaHM6OkZvbnRHbHlwaHMoUGFzc1JlZlB0
cjxGb250U2VsZWN0b3I+IGZvbnRTZWxlY3RvcikKLSAgICA6IG1fY2FjaGVkUHJpbWFyeVNpbXBs
ZUZvbnREYXRhKDApCisgICAgOiBtX2NhY2hlZFByaW1hcnlGb250KDApCiAgICAgLCBtX2ZvbnRT
ZWxlY3Rvcihmb250U2VsZWN0b3IpCiAgICAgLCBtX2ZvbnRTZWxlY3RvclZlcnNpb24obV9mb250
U2VsZWN0b3IgPyBtX2ZvbnRTZWxlY3Rvci0+dmVyc2lvbigpIDogMCkKICAgICAsIG1fZ2VuZXJh
dGlvbihmb250Q2FjaGUoKS5nZW5lcmF0aW9uKCkpCkBAIC00NSw3ICs0NSw3IEBAIEZvbnRHbHlw
aHM6OkZvbnRHbHlwaHMoUGFzc1JlZlB0cjxGb250U2UKIH0KIAogRm9udEdseXBoczo6Rm9udEds
eXBocyhjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEpCi0gICAgOiBtX2NhY2hl
ZFByaW1hcnlTaW1wbGVGb250RGF0YSgwKQorICAgIDogbV9jYWNoZWRQcmltYXJ5Rm9udCgwKQog
ICAgICwgbV9mb250U2VsZWN0b3IoMCkKICAgICAsIG1fZm9udFNlbGVjdG9yVmVyc2lvbigwKQog
ICAgICwgbV9nZW5lcmF0aW9uKGZvbnRDYWNoZSgpLmdlbmVyYXRpb24oKSkKQEAgLTYzLDcgKzYz
LDcgQEAgdm9pZCBGb250R2x5cGhzOjpkZXRlcm1pbmVQaXRjaChjb25zdCBGbwogICAgIGF1dG8m
IHByaW1hcnlSYW5nZXMgPSByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChkZXNjcmlwdGlvbiwgMCk7
CiAgICAgdW5zaWduZWQgbnVtUmFuZ2VzID0gcHJpbWFyeVJhbmdlcy5zaXplKCk7CiAgICAgaWYg
KG51bVJhbmdlcyA9PSAxKQotICAgICAgICBtX3BpdGNoID0gcHJpbWFyeVJhbmdlcy5yYW5nZUF0
KDApLmZvbnREYXRhKCkucGl0Y2goKTsKKyAgICAgICAgbV9waXRjaCA9IHByaW1hcnlSYW5nZXMu
cmFuZ2VBdCgwKS5mb250KCkucGl0Y2goKTsKICAgICBlbHNlCiAgICAgICAgIG1fcGl0Y2ggPSBW
YXJpYWJsZVBpdGNoOwogfQpAQCAtOTYsNyArOTYsNyBAQCBzdGF0aWMgRm9udFJhbmdlcyByZWFs
aXplTmV4dEZhbGxiYWNrKGNvCiAgICAgLy8gV2UgZGlkbid0IGZpbmQgYSBmb250LiBUcnkgdG8g
ZmluZCBhIHNpbWlsYXIgZm9udCB1c2luZyBvdXIgb3duIHNwZWNpZmljIGtub3dsZWRnZSBhYm91
dCBvdXIgcGxhdGZvcm0uCiAgICAgLy8gRm9yIGV4YW1wbGUgb24gT1MgWCwgd2Uga25vdyB0byBt
YXAgYW55IGZhbWlsaWVzIGNvbnRhaW5pbmcgdGhlIHdvcmRzIEFyYWJpYywgUGFzaHRvLCBvciBV
cmR1IHRvIHRoZQogICAgIC8vIEdlZXphIFBybyBmb250LgotICAgIHJldHVybiBGb250UmFuZ2Vz
KGZvbnRDYWNoZSgpLnNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGRlc2NyaXB0aW9uKSk7CisgICAg
cmV0dXJuIEZvbnRSYW5nZXMoZm9udENhY2hlKCkuc2ltaWxhckZvbnQoZGVzY3JpcHRpb24pKTsK
IH0KIAogY29uc3QgRm9udFJhbmdlcyYgRm9udEdseXBoczo6cmVhbGl6ZUZhbGxiYWNrUmFuZ2Vz
QXQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgdW5zaWduZWQgaW5kZXgpCkBA
IC0xMjYsMTAgKzEyNiwxMCBAQCBjb25zdCBGb250UmFuZ2VzJiBGb250R2x5cGhzOjpyZWFsaXpl
RmFsCiAgICAgICAgIEFTU0VSVChtX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXggPj0gZGVzY3Jp
cHRpb24uZmFtaWx5Q291bnQoKSk7CiAKICAgICAgICAgdW5zaWduZWQgZm9udFNlbGVjdG9yRmFs
bGJhY2tJbmRleCA9IG1fbGFzdFJlYWxpemVkRmFsbGJhY2tJbmRleCAtIGRlc2NyaXB0aW9uLmZh
bWlseUNvdW50KCk7Ci0gICAgICAgIGlmIChmb250U2VsZWN0b3JGYWxsYmFja0luZGV4ID09IG1f
Zm9udFNlbGVjdG9yLT5mYWxsYmFja0ZvbnREYXRhQ291bnQoKSkKKyAgICAgICAgaWYgKGZvbnRT
ZWxlY3RvckZhbGxiYWNrSW5kZXggPT0gbV9mb250U2VsZWN0b3ItPmZhbGxiYWNrRm9udENvdW50
KCkpCiAgICAgICAgICAgICByZXR1cm4gZm9udFJhbmdlczsKICAgICAgICAgKyttX2xhc3RSZWFs
aXplZEZhbGxiYWNrSW5kZXg7Ci0gICAgICAgIGZvbnRSYW5nZXMgPSBGb250UmFuZ2VzKG1fZm9u
dFNlbGVjdG9yLT5mYWxsYmFja0ZvbnREYXRhQXQoZGVzY3JpcHRpb24sIGZvbnRTZWxlY3RvckZh
bGxiYWNrSW5kZXgpKTsKKyAgICAgICAgZm9udFJhbmdlcyA9IEZvbnRSYW5nZXMobV9mb250U2Vs
ZWN0b3ItPmZhbGxiYWNrRm9udEF0KGRlc2NyaXB0aW9uLCBmb250U2VsZWN0b3JGYWxsYmFja0lu
ZGV4KSk7CiAgICAgfQogCiAgICAgcmV0dXJuIGZvbnRSYW5nZXM7CkBAIC0yMjEsOCArMjIxLDgg
QEAgc3RhdGljIGJvb2wgc2hvdWxkSWdub3JlUm90YXRpb24oVUNoYXIzMgogI2lmIFBMQVRGT1JN
KENPQ09BKQogc3RhdGljIEdseXBoRGF0YSBnbHlwaERhdGFGb3JDSktDaGFyYWN0ZXJXaXRob3V0
U3ludGhldGljSXRhbGljKFVDaGFyMzIgY2hhcmFjdGVyLCBHbHlwaERhdGEmIGRhdGEpCiB7Ci0g
ICAgR2x5cGhEYXRhIG5vbkl0YWxpY0RhdGEgPSBkYXRhLmZvbnREYXRhLT5ub25TeW50aGV0aWNJ
dGFsaWNGb250RGF0YSgpLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyKTsKLSAgICBp
ZiAobm9uSXRhbGljRGF0YS5mb250RGF0YSkKKyAgICBHbHlwaERhdGEgbm9uSXRhbGljRGF0YSA9
IGRhdGEuZm9udC0+bm9uU3ludGhldGljSXRhbGljRm9udCgpLT5nbHlwaERhdGFGb3JDaGFyYWN0
ZXIoY2hhcmFjdGVyKTsKKyAgICBpZiAobm9uSXRhbGljRGF0YS5mb250KQogICAgICAgICByZXR1
cm4gbm9uSXRhbGljRGF0YTsKICAgICByZXR1cm4gZGF0YTsKIH0KQEAgLTIzMSw3NiArMjMxLDc2
IEBAIHN0YXRpYyBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yQ0pLQ2hhcmFjdGUKIHN0YXRpYyBHbHlw
aERhdGEgZ2x5cGhEYXRhRm9yTm9uQ0pLQ2hhcmFjdGVyV2l0aEdseXBoT3JpZW50YXRpb24oVUNo
YXIzMiBjaGFyYWN0ZXIsIE5vbkNKS0dseXBoT3JpZW50YXRpb24gb3JpZW50YXRpb24sIGNvbnN0
IEdseXBoRGF0YSYgZGF0YSkKIHsKICAgICBpZiAob3JpZW50YXRpb24gPT0gTm9uQ0pLR2x5cGhP
cmllbnRhdGlvblVwcmlnaHQgfHwgc2hvdWxkSWdub3JlUm90YXRpb24oY2hhcmFjdGVyKSkgewot
ICAgICAgICBHbHlwaERhdGEgdXByaWdodERhdGEgPSBkYXRhLmZvbnREYXRhLT51cHJpZ2h0T3Jp
ZW50YXRpb25Gb250RGF0YSgpLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyKTsKKyAg
ICAgICAgR2x5cGhEYXRhIHVwcmlnaHREYXRhID0gZGF0YS5mb250LT51cHJpZ2h0T3JpZW50YXRp
b25Gb250KCktPmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIpOwogICAgICAgICAvLyBJ
ZiB0aGUgZ2x5cGhzIGFyZSB0aGUgc2FtZSwgdGhlbiB3ZSBrbm93IHdlIGNhbiBqdXN0IHVzZSB0
aGUgaG9yaXpvbnRhbCBnbHlwaCByb3RhdGVkIHZlcnRpY2FsbHkgdG8gYmUgdXByaWdodC4KICAg
ICAgICAgaWYgKGRhdGEuZ2x5cGggPT0gdXByaWdodERhdGEuZ2x5cGgpCiAgICAgICAgICAgICBy
ZXR1cm4gZGF0YTsKICAgICAgICAgLy8gVGhlIGdseXBocyBhcmUgZGlzdGluY3QsIG1lYW5pbmcg
dGhhdCB0aGUgZm9udCBoYXMgYSB2ZXJ0aWNhbC1yaWdodCBnbHlwaCBiYWtlZCBpbnRvIGl0LiBX
ZSBjYW4ndCB1c2UgdGhhdAogICAgICAgICAvLyBnbHlwaCwgc28gd2UgZmFsbCBiYWNrIHRvIHRo
ZSB1cHJpZ2h0IGRhdGEgYW5kIHVzZSB0aGUgaG9yaXpvbnRhbCBnbHlwaC4KLSAgICAgICAgaWYg
KHVwcmlnaHREYXRhLmZvbnREYXRhKQorICAgICAgICBpZiAodXByaWdodERhdGEuZm9udCkKICAg
ICAgICAgICAgIHJldHVybiB1cHJpZ2h0RGF0YTsKICAgICB9IGVsc2UgaWYgKG9yaWVudGF0aW9u
ID09IE5vbkNKS0dseXBoT3JpZW50YXRpb25WZXJ0aWNhbFJpZ2h0KSB7Ci0gICAgICAgIEdseXBo
RGF0YSB2ZXJ0aWNhbFJpZ2h0RGF0YSA9IGRhdGEuZm9udERhdGEtPnZlcnRpY2FsUmlnaHRPcmll
bnRhdGlvbkZvbnREYXRhKCktPmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIpOworICAg
ICAgICBHbHlwaERhdGEgdmVydGljYWxSaWdodERhdGEgPSBkYXRhLmZvbnQtPnZlcnRpY2FsUmln
aHRPcmllbnRhdGlvbkZvbnQoKS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3Rlcik7CiAg
ICAgICAgIC8vIElmIHRoZSBnbHlwaHMgYXJlIGRpc3RpbmN0LCB3ZSB3aWxsIG1ha2UgdGhlIGFz
c3VtcHRpb24gdGhhdCB0aGUgZm9udCBoYXMgYSB2ZXJ0aWNhbC1yaWdodCBnbHlwaCBiYWtlZAog
ICAgICAgICAvLyBpbnRvIGl0LgogICAgICAgICBpZiAoZGF0YS5nbHlwaCAhPSB2ZXJ0aWNhbFJp
Z2h0RGF0YS5nbHlwaCkKICAgICAgICAgICAgIHJldHVybiBkYXRhOwogICAgICAgICAvLyBUaGUg
Z2x5cGhzIGFyZSBpZGVudGljYWwsIG1lYW5pbmcgdGhhdCB3ZSBzaG91bGQganVzdCB1c2UgdGhl
IGhvcml6b250YWwgZ2x5cGguCi0gICAgICAgIGlmICh2ZXJ0aWNhbFJpZ2h0RGF0YS5mb250RGF0
YSkKKyAgICAgICAgaWYgKHZlcnRpY2FsUmlnaHREYXRhLmZvbnQpCiAgICAgICAgICAgICByZXR1
cm4gdmVydGljYWxSaWdodERhdGE7CiAgICAgfQogICAgIHJldHVybiBkYXRhOwogfQogCi1HbHlw
aERhdGEgRm9udEdseXBoczo6Z2x5cGhEYXRhRm9yU3lzdGVtRmFsbGJhY2soVUNoYXIzMiBjLCBj
b25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250RGF0YVZhcmlhbnQgdmFyaWFu
dCkKK0dseXBoRGF0YSBGb250R2x5cGhzOjpnbHlwaERhdGFGb3JTeXN0ZW1GYWxsYmFjayhVQ2hh
cjMyIGMsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIEZvbnRWYXJpYW50IHZh
cmlhbnQpCiB7CiAgICAgLy8gU3lzdGVtIGZhbGxiYWNrIGlzIGNoYXJhY3Rlci1kZXBlbmRlbnQu
CiAgICAgYXV0byYgcHJpbWFyeVJhbmdlcyA9IHJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGRlc2Ny
aXB0aW9uLCAwKTsKLSAgICBhdXRvKiBvcmlnaW5hbEZvbnREYXRhID0gcHJpbWFyeVJhbmdlcy5m
b250RGF0YUZvckNoYXJhY3RlcihjKTsKLSAgICBpZiAoIW9yaWdpbmFsRm9udERhdGEpCi0gICAg
ICAgIG9yaWdpbmFsRm9udERhdGEgPSAmcHJpbWFyeVJhbmdlcy5mb250RGF0YUZvckZpcnN0UmFu
Z2UoKTsKKyAgICBhdXRvKiBvcmlnaW5hbEZvbnQgPSBwcmltYXJ5UmFuZ2VzLmZvbnRGb3JDaGFy
YWN0ZXIoYyk7CisgICAgaWYgKCFvcmlnaW5hbEZvbnQpCisgICAgICAgIG9yaWdpbmFsRm9udCA9
ICZwcmltYXJ5UmFuZ2VzLmZvbnRGb3JGaXJzdFJhbmdlKCk7CiAKLSAgICBSZWZQdHI8U2ltcGxl
Rm9udERhdGE+IHN5c3RlbUZhbGxiYWNrRm9udERhdGEgPSBvcmlnaW5hbEZvbnREYXRhLT5zeXN0
ZW1GYWxsYmFja0ZvbnREYXRhRm9yQ2hhcmFjdGVyKGMsIGRlc2NyaXB0aW9uLCBtX2lzRm9yUGxh
dGZvcm1Gb250KTsKLSAgICBpZiAoIXN5c3RlbUZhbGxiYWNrRm9udERhdGEpCisgICAgUmVmUHRy
PEZvbnQ+IHN5c3RlbUZhbGxiYWNrRm9udCA9IG9yaWdpbmFsRm9udC0+c3lzdGVtRmFsbGJhY2tG
b250Rm9yQ2hhcmFjdGVyKGMsIGRlc2NyaXB0aW9uLCBtX2lzRm9yUGxhdGZvcm1Gb250KTsKKyAg
ICBpZiAoIXN5c3RlbUZhbGxiYWNrRm9udCkKICAgICAgICAgcmV0dXJuIEdseXBoRGF0YSgpOwog
Ci0gICAgaWYgKHN5c3RlbUZhbGxiYWNrRm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0
aW9uKCkgPT0gVmVydGljYWwgJiYgIXN5c3RlbUZhbGxiYWNrRm9udERhdGEtPmhhc1ZlcnRpY2Fs
R2x5cGhzKCkgJiYgRm9udENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woYykpCisgICAg
aWYgKHN5c3RlbUZhbGxiYWNrRm9udC0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBW
ZXJ0aWNhbCAmJiAhc3lzdGVtRmFsbGJhY2tGb250LT5oYXNWZXJ0aWNhbEdseXBocygpICYmIEZv
bnRDYXNjYWRlOjppc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGMpKQogICAgICAgICB2YXJpYW50ID0g
QnJva2VuSWRlb2dyYXBoVmFyaWFudDsKIAogICAgIEdseXBoRGF0YSBmYWxsYmFja0dseXBoRGF0
YTsKICAgICBpZiAodmFyaWFudCA9PSBOb3JtYWxWYXJpYW50KQotICAgICAgICBmYWxsYmFja0ds
eXBoRGF0YSA9IHN5c3RlbUZhbGxiYWNrRm9udERhdGEtPmdseXBoRGF0YUZvckNoYXJhY3Rlcihj
KTsKKyAgICAgICAgZmFsbGJhY2tHbHlwaERhdGEgPSBzeXN0ZW1GYWxsYmFja0ZvbnQtPmdseXBo
RGF0YUZvckNoYXJhY3RlcihjKTsKICAgICBlbHNlCi0gICAgICAgIGZhbGxiYWNrR2x5cGhEYXRh
ID0gc3lzdGVtRmFsbGJhY2tGb250RGF0YS0+dmFyaWFudEZvbnREYXRhKGRlc2NyaXB0aW9uLCB2
YXJpYW50KS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMpOworICAgICAgICBmYWxsYmFja0dseXBo
RGF0YSA9IHN5c3RlbUZhbGxiYWNrRm9udC0+dmFyaWFudEZvbnQoZGVzY3JpcHRpb24sIHZhcmlh
bnQpLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYyk7CiAKLSAgICBpZiAodmFyaWFudCA9PSBOb3Jt
YWxWYXJpYW50ICYmIGZhbGxiYWNrR2x5cGhEYXRhLmZvbnREYXRhKSB7Ci0gICAgICAgIGlmICgh
Rm9udENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woYykgJiYgZmFsbGJhY2tHbHlwaERh
dGEuZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwgJiYg
IWZhbGxiYWNrR2x5cGhEYXRhLmZvbnREYXRhLT5pc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKCkp
CisgICAgaWYgKHZhcmlhbnQgPT0gTm9ybWFsVmFyaWFudCAmJiBmYWxsYmFja0dseXBoRGF0YS5m
b250KSB7CisgICAgICAgIGlmICghRm9udENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2wo
YykgJiYgZmFsbGJhY2tHbHlwaERhdGEuZm9udC0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24o
KSA9PSBWZXJ0aWNhbCAmJiAhZmFsbGJhY2tHbHlwaERhdGEuZm9udC0+aXNUZXh0T3JpZW50YXRp
b25GYWxsYmFjaygpKQogICAgICAgICAgICAgZmFsbGJhY2tHbHlwaERhdGEgPSBnbHlwaERhdGFG
b3JOb25DSktDaGFyYWN0ZXJXaXRoR2x5cGhPcmllbnRhdGlvbihjLCBkZXNjcmlwdGlvbi5ub25D
SktHbHlwaE9yaWVudGF0aW9uKCksIGZhbGxiYWNrR2x5cGhEYXRhKTsKICAgICB9CiAKICAgICAv
LyBLZWVwIHRoZSBzeXN0ZW0gZmFsbGJhY2sgZm9udHMgd2UgdXNlIGFsaXZlLgogICAgIGlmIChm
YWxsYmFja0dseXBoRGF0YS5nbHlwaCkKLSAgICAgICAgbV9zeXN0ZW1GYWxsYmFja0ZvbnREYXRh
U2V0LmFkZChzeXN0ZW1GYWxsYmFja0ZvbnREYXRhLnJlbGVhc2UoKSk7CisgICAgICAgIG1fc3lz
dGVtRmFsbGJhY2tGb250U2V0LmFkZChzeXN0ZW1GYWxsYmFja0ZvbnQucmVsZWFzZSgpKTsKIAog
ICAgIHJldHVybiBmYWxsYmFja0dseXBoRGF0YTsKIH0KIAotR2x5cGhEYXRhIEZvbnRHbHlwaHM6
OmdseXBoRGF0YUZvclZhcmlhbnQoVUNoYXIzMiBjLCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRl
c2NyaXB0aW9uLCBGb250RGF0YVZhcmlhbnQgdmFyaWFudCwgdW5zaWduZWQgZmFsbGJhY2tJbmRl
eCkKK0dseXBoRGF0YSBGb250R2x5cGhzOjpnbHlwaERhdGFGb3JWYXJpYW50KFVDaGFyMzIgYywg
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udFZhcmlhbnQgdmFyaWFudCwg
dW5zaWduZWQgZmFsbGJhY2tJbmRleCkKIHsKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICBh
dXRvJiBmb250UmFuZ2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIGZh
bGxiYWNrSW5kZXgrKyk7CiAgICAgICAgIGlmIChmb250UmFuZ2VzLmlzTnVsbCgpKQogICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGF1dG8qIGZvbnREYXRhID0gZm9udFJhbmdlcy5mb250RGF0
YUZvckNoYXJhY3RlcihjKTsKLSAgICAgICAgR2x5cGhEYXRhIGRhdGEgPSBmb250RGF0YSA/IGZv
bnREYXRhLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYykgOiBHbHlwaERhdGEoKTsKLSAgICAgICAg
aWYgKGRhdGEuZm9udERhdGEpIHsKLSAgICAgICAgICAgIC8vIFRoZSB2YXJpYW50Rm9udERhdGEg
ZnVuY3Rpb24gc2hvdWxkIG5vdCBub3JtYWxseSByZXR1cm4gMC4KKyAgICAgICAgYXV0byogZm9u
dCA9IGZvbnRSYW5nZXMuZm9udEZvckNoYXJhY3RlcihjKTsKKyAgICAgICAgR2x5cGhEYXRhIGRh
dGEgPSBmb250ID8gZm9udC0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMpIDogR2x5cGhEYXRhKCk7
CisgICAgICAgIGlmIChkYXRhLmZvbnQpIHsKKyAgICAgICAgICAgIC8vIFRoZSB2YXJpYW50Rm9u
dCBmdW5jdGlvbiBzaG91bGQgbm90IG5vcm1hbGx5IHJldHVybiAwLgogICAgICAgICAgICAgLy8g
QnV0IGlmIGl0IGRvZXMsIHdlIHdpbGwganVzdCByZW5kZXIgdGhlIGNhcGl0YWwgbGV0dGVyIGJp
Zy4KLSAgICAgICAgICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gdmFyaWFudEZvbnREYXRhID0g
ZGF0YS5mb250RGF0YS0+dmFyaWFudEZvbnREYXRhKGRlc2NyaXB0aW9uLCB2YXJpYW50KTsKLSAg
ICAgICAgICAgIGlmICghdmFyaWFudEZvbnREYXRhKQorICAgICAgICAgICAgUmVmUHRyPEZvbnQ+
IHZhcmlhbnRGb250ID0gZGF0YS5mb250LT52YXJpYW50Rm9udChkZXNjcmlwdGlvbiwgdmFyaWFu
dCk7CisgICAgICAgICAgICBpZiAoIXZhcmlhbnRGb250KQogICAgICAgICAgICAgICAgIHJldHVy
biBkYXRhOwogCi0gICAgICAgICAgICByZXR1cm4gdmFyaWFudEZvbnREYXRhLT5nbHlwaERhdGFG
b3JDaGFyYWN0ZXIoYyk7CisgICAgICAgICAgICByZXR1cm4gdmFyaWFudEZvbnQtPmdseXBoRGF0
YUZvckNoYXJhY3RlcihjKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzE1LDIzICszMTUsMjMg
QEAgR2x5cGhEYXRhIEZvbnRHbHlwaHM6OmdseXBoRGF0YUZvck5vcm1hbAogICAgICAgICBhdXRv
JiBmb250UmFuZ2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIGZhbGxi
YWNrSW5kZXgpOwogICAgICAgICBpZiAoZm9udFJhbmdlcy5pc051bGwoKSkKICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBhdXRvKiBzaW1wbGVGb250RGF0YSA9IGZvbnRSYW5nZXMuZm9udERh
dGFGb3JDaGFyYWN0ZXIoYyk7Ci0gICAgICAgIGF1dG8qIHBhZ2UgPSBzaW1wbGVGb250RGF0YSA/
IHNpbXBsZUZvbnREYXRhLT5nbHlwaFBhZ2UocGFnZU51bWJlcikgOiBudWxscHRyOworICAgICAg
ICBhdXRvKiBmb250ID0gZm9udFJhbmdlcy5mb250Rm9yQ2hhcmFjdGVyKGMpOworICAgICAgICBh
dXRvKiBwYWdlID0gZm9udCA/IGZvbnQtPmdseXBoUGFnZShwYWdlTnVtYmVyKSA6IG51bGxwdHI7
CiAgICAgICAgIGlmICghcGFnZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBHbHlw
aERhdGEgZGF0YSA9IHBhZ2UtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjKTsKLSAgICAgICAgaWYg
KGRhdGEuZm9udERhdGEpIHsKLSAgICAgICAgICAgIGlmIChkYXRhLmZvbnREYXRhLT5wbGF0Zm9y
bURhdGEoKS5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsICYmICFkYXRhLmZvbnREYXRhLT5pc1Rl
eHRPcmllbnRhdGlvbkZhbGxiYWNrKCkpIHsKKyAgICAgICAgaWYgKGRhdGEuZm9udCkgeworICAg
ICAgICAgICAgaWYgKGRhdGEuZm9udC0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBW
ZXJ0aWNhbCAmJiAhZGF0YS5mb250LT5pc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKCkpIHsKICAg
ICAgICAgICAgICAgICBpZiAoIUZvbnRDYXNjYWRlOjppc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGMp
KQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2x5cGhEYXRhRm9yTm9uQ0pLQ2hhcmFjdGVy
V2l0aEdseXBoT3JpZW50YXRpb24oYywgZGVzY3JpcHRpb24ubm9uQ0pLR2x5cGhPcmllbnRhdGlv
bigpLCBkYXRhKTsKIAotICAgICAgICAgICAgICAgIGlmICghZGF0YS5mb250RGF0YS0+aGFzVmVy
dGljYWxHbHlwaHMoKSkgeworICAgICAgICAgICAgICAgIGlmICghZGF0YS5mb250LT5oYXNWZXJ0
aWNhbEdseXBocygpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFVzZSB0aGUgYnJva2VuIGlk
ZW9ncmFwaCBmb250IGRhdGEuIFRoZSBicm9rZW4gaWRlb2dyYXBoIGZvbnQgd2lsbCB1c2UgdGhl
IGhvcml6b250YWwgd2lkdGggb2YgZ2x5cGhzCiAgICAgICAgICAgICAgICAgICAgIC8vIHRvIG1h
a2Ugc3VyZSB5b3UgZ2V0IGEgc3F1YXJlIChldmVuIGZvciBicm9rZW4gZ2x5cGhzIGxpa2Ugc3lt
Ym9scyB1c2VkIGZvciBwdW5jdHVhdGlvbikuCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBn
bHlwaERhdGFGb3JWYXJpYW50KGMsIGRlc2NyaXB0aW9uLCBCcm9rZW5JZGVvZ3JhcGhWYXJpYW50
LCBmYWxsYmFja0luZGV4KTsKICAgICAgICAgICAgICAgICB9CiAjaWYgUExBVEZPUk0oQ09DT0Ep
Ci0gICAgICAgICAgICAgICAgaWYgKGRhdGEuZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLnN5bnRo
ZXRpY09ibGlxdWUoKSkKKyAgICAgICAgICAgICAgICBpZiAoZGF0YS5mb250LT5wbGF0Zm9ybURh
dGEoKS5zeW50aGV0aWNPYmxpcXVlKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbHlw
aERhdGFGb3JDSktDaGFyYWN0ZXJXaXRob3V0U3ludGhldGljSXRhbGljKGMsIGRhdGEpOwogI2Vu
ZGlmCiAgICAgICAgICAgICB9CkBAIC0zNDUsMjcgKzM0NSwyNyBAQCBHbHlwaERhdGEgRm9udEds
eXBoczo6Z2x5cGhEYXRhRm9yTm9ybWFsCiAKIHN0YXRpYyBSZWZQdHI8R2x5cGhQYWdlPiBnbHlw
aFBhZ2VGcm9tRm9udFJhbmdlcyh1bnNpZ25lZCBwYWdlTnVtYmVyLCBjb25zdCBGb250UmFuZ2Vz
JiBmb250UmFuZ2VzKQogewotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBzaW1wbGVGb250RGF0
YSA9IG51bGxwdHI7CisgICAgY29uc3QgRm9udCogZm9udCA9IG51bGxwdHI7CiAgICAgVUNoYXIz
MiBwYWdlUmFuZ2VGcm9tID0gcGFnZU51bWJlciAqIEdseXBoUGFnZTo6c2l6ZTsKICAgICBVQ2hh
cjMyIHBhZ2VSYW5nZVRvID0gcGFnZVJhbmdlRnJvbSArIEdseXBoUGFnZTo6c2l6ZSAtIDE7CiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZvbnRSYW5nZXMuc2l6ZSgpOyArK2kpIHsKICAg
ICAgICAgYXV0byYgcmFuZ2UgPSBmb250UmFuZ2VzLnJhbmdlQXQoaSk7CiAgICAgICAgIGlmIChy
YW5nZS50bygpKSB7CiAgICAgICAgICAgICBpZiAocmFuZ2UuZnJvbSgpIDw9IHBhZ2VSYW5nZUZy
b20gJiYgcGFnZVJhbmdlVG8gPD0gcmFuZ2UudG8oKSkKLSAgICAgICAgICAgICAgICBzaW1wbGVG
b250RGF0YSA9ICZyYW5nZS5mb250RGF0YSgpOworICAgICAgICAgICAgICAgIGZvbnQgPSAmcmFu
Z2UuZm9udCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYg
KCFzaW1wbGVGb250RGF0YSkKKyAgICBpZiAoIWZvbnQpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogCi0gICAgaWYgKHNpbXBsZUZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigp
ID09IFZlcnRpY2FsKQorICAgIGlmIChmb250LT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigp
ID09IFZlcnRpY2FsKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBjb25z
dF9jYXN0PEdseXBoUGFnZSo+KHNpbXBsZUZvbnREYXRhLT5nbHlwaFBhZ2UocGFnZU51bWJlcikp
OworICAgIHJldHVybiBjb25zdF9jYXN0PEdseXBoUGFnZSo+KGZvbnQtPmdseXBoUGFnZShwYWdl
TnVtYmVyKSk7CiB9CiAKLUdseXBoRGF0YSBGb250R2x5cGhzOjpnbHlwaERhdGFGb3JDaGFyYWN0
ZXIoVUNoYXIzMiBjLCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250RGF0
YVZhcmlhbnQgdmFyaWFudCkKK0dseXBoRGF0YSBGb250R2x5cGhzOjpnbHlwaERhdGFGb3JDaGFy
YWN0ZXIoVUNoYXIzMiBjLCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250
VmFyaWFudCB2YXJpYW50KQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgQVNT
RVJUKHZhcmlhbnQgIT0gQXV0b1ZhcmlhbnQpOwpAQCAtMzgyLDE5ICszODIsMTkgQEAgR2x5cGhE
YXRhIEZvbnRHbHlwaHM6OmdseXBoRGF0YUZvckNoYXJhYwogICAgIEdseXBoRGF0YSBnbHlwaERh
dGEgPSBjYWNoZWRQYWdlID8gY2FjaGVkUGFnZS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMpIDog
R2x5cGhEYXRhKCk7CiAgICAgaWYgKCFnbHlwaERhdGEuZ2x5cGgpIHsKICAgICAgICAgaWYgKCFj
YWNoZWRQYWdlKQotICAgICAgICAgICAgY2FjaGVkUGFnZSA9IEdseXBoUGFnZTo6Y3JlYXRlRm9y
TWl4ZWRGb250RGF0YSgpOworICAgICAgICAgICAgY2FjaGVkUGFnZSA9IEdseXBoUGFnZTo6Y3Jl
YXRlRm9yTWl4ZWRGb250cygpOwogICAgICAgICBlbHNlIGlmIChjYWNoZWRQYWdlLT5pc0ltbXV0
YWJsZSgpKQotICAgICAgICAgICAgY2FjaGVkUGFnZSA9IEdseXBoUGFnZTo6Y3JlYXRlQ29weUZv
ck1peGVkRm9udERhdGEoKmNhY2hlZFBhZ2UpOworICAgICAgICAgICAgY2FjaGVkUGFnZSA9IEds
eXBoUGFnZTo6Y3JlYXRlQ29weUZvck1peGVkRm9udHMoKmNhY2hlZFBhZ2UpOwogCiAgICAgICAg
IGdseXBoRGF0YSA9IGdseXBoRGF0YUZvck5vcm1hbFZhcmlhbnQoYywgZGVzY3JpcHRpb24pOwot
ICAgICAgICBjYWNoZWRQYWdlLT5zZXRHbHlwaERhdGFGb3JDaGFyYWN0ZXIoYywgZ2x5cGhEYXRh
LmdseXBoLCBnbHlwaERhdGEuZm9udERhdGEpOworICAgICAgICBjYWNoZWRQYWdlLT5zZXRHbHlw
aERhdGFGb3JDaGFyYWN0ZXIoYywgZ2x5cGhEYXRhLmdseXBoLCBnbHlwaERhdGEuZm9udCk7CiAg
ICAgfQogICAgIHJldHVybiBnbHlwaERhdGE7CiB9CiAKIHZvaWQgRm9udEdseXBoczo6cHJ1bmVT
eXN0ZW1GYWxsYmFja3MoKQogewotICAgIGlmIChtX3N5c3RlbUZhbGxiYWNrRm9udERhdGFTZXQu
aXNFbXB0eSgpKQorICAgIGlmIChtX3N5c3RlbUZhbGxiYWNrRm9udFNldC5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybjsKICAgICAvLyBNdXRhYmxlIGdseXBoIHBhZ2VzIG1heSByZWZlcmVuY2Ug
ZmFsbGJhY2sgZm9udHMuCiAgICAgaWYgKG1fY2FjaGVkUGFnZVplcm8gJiYgIW1fY2FjaGVkUGFn
ZVplcm8tPmlzSW1tdXRhYmxlKCkpCkBAIC00MDIsNyArNDAyLDcgQEAgdm9pZCBGb250R2x5cGhz
OjpwcnVuZVN5c3RlbUZhbGxiYWNrcygpCiAgICAgbV9jYWNoZWRQYWdlcy5yZW1vdmVJZihbXShk
ZWNsdHlwZShtX2NhY2hlZFBhZ2VzKTo6S2V5VmFsdWVQYWlyVHlwZSYga2V5QW5kVmFsdWUpIHsK
ICAgICAgICAgcmV0dXJuICFrZXlBbmRWYWx1ZS52YWx1ZS0+aXNJbW11dGFibGUoKTsKICAgICB9
KTsKLSAgICBtX3N5c3RlbUZhbGxiYWNrRm9udERhdGFTZXQuY2xlYXIoKTsKKyAgICBtX3N5c3Rl
bUZhbGxiYWNrRm9udFNldC5jbGVhcigpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250R2x5cGhzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEdseXBocy5oCShyZXZpc2lvbiAxNzg4NTcpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250R2x5cGhzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIxLDEwICsyMSwxMCBAQAogI2lmbmRlZiBGb250R2x5cGhzX2gKICNkZWZpbmUgRm9u
dEdseXBoc19oCiAKKyNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9udFJhbmdlcy5oIgog
I2luY2x1ZGUgIkZvbnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkdseXBoUGFnZS5oIgotI2luY2x1
ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5jbHVkZSAiV2lkdGhDYWNoZS5oIgogI2luY2x1ZGUg
PHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KQEAgLTUxLDcgKzUx
LDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc0ZvclBsYXRmb3JtRm9udCgpIGNvbnN0IHsgcmV0
dXJuIG1faXNGb3JQbGF0Zm9ybUZvbnQ7IH0KIAotICAgIEdseXBoRGF0YSBnbHlwaERhdGFGb3JD
aGFyYWN0ZXIoVUNoYXIzMiwgY29uc3QgRm9udERlc2NyaXB0aW9uJiwgRm9udERhdGFWYXJpYW50
KTsKKyAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIsIGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYsIEZvbnRWYXJpYW50KTsKIAogICAgIGJvb2wgaXNGaXhlZFBpdGNoKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYpOwogICAgIHZvaWQgZGV0ZXJtaW5lUGl0Y2goY29uc3QgRm9u
dERlc2NyaXB0aW9uJik7CkBAIC02Niw3ICs2Niw3IEBAIHB1YmxpYzoKICAgICBXaWR0aENhY2hl
JiB3aWR0aENhY2hlKCkgeyByZXR1cm4gbV93aWR0aENhY2hlOyB9CiAgICAgY29uc3QgV2lkdGhD
YWNoZSYgd2lkdGhDYWNoZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGhDYWNoZTsgfQogCi0gICAg
Y29uc3QgU2ltcGxlRm9udERhdGEmIHByaW1hcnlTaW1wbGVGb250RGF0YShjb25zdCBGb250RGVz
Y3JpcHRpb24mKTsKKyAgICBjb25zdCBGb250JiBwcmltYXJ5Rm9udChjb25zdCBGb250RGVzY3Jp
cHRpb24mKTsKICAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBGb250UmFuZ2VzJiByZWFsaXplRmFs
bGJhY2tSYW5nZXNBdChjb25zdCBGb250RGVzY3JpcHRpb24mLCB1bnNpZ25lZCBmYWxsYmFja0lu
ZGV4KTsKIAogICAgIHZvaWQgcHJ1bmVTeXN0ZW1GYWxsYmFja3MoKTsKQEAgLTc1LDkgKzc1LDkg
QEAgcHJpdmF0ZToKICAgICBGb250R2x5cGhzKFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPik7CiAg
ICAgRm9udEdseXBocyhjb25zdCBGb250UGxhdGZvcm1EYXRhJik7CiAKLSAgICBHbHlwaERhdGEg
Z2x5cGhEYXRhRm9yU3lzdGVtRmFsbGJhY2soVUNoYXIzMiwgY29uc3QgRm9udERlc2NyaXB0aW9u
JiwgRm9udERhdGFWYXJpYW50KTsKKyAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yU3lzdGVtRmFs
bGJhY2soVUNoYXIzMiwgY29uc3QgRm9udERlc2NyaXB0aW9uJiwgRm9udFZhcmlhbnQpOwogICAg
IEdseXBoRGF0YSBnbHlwaERhdGFGb3JOb3JtYWxWYXJpYW50KFVDaGFyMzIsIGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYpOwotICAgIEdseXBoRGF0YSBnbHlwaERhdGFGb3JWYXJpYW50KFVDaGFyMzIs
IGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIEZvbnREYXRhVmFyaWFudCwgdW5zaWduZWQgZmFsbGJh
Y2tJbmRleCk7CisgICAgR2x5cGhEYXRhIGdseXBoRGF0YUZvclZhcmlhbnQoVUNoYXIzMiwgY29u
c3QgRm9udERlc2NyaXB0aW9uJiwgRm9udFZhcmlhbnQsIHVuc2lnbmVkIGZhbGxiYWNrSW5kZXgp
OwogCiAgICAgVmVjdG9yPEZvbnRSYW5nZXMsIDE+IG1fcmVhbGl6ZWRGYWxsYmFja1JhbmdlczsK
ICAgICB1bnNpZ25lZCBtX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXggeyAwIH07CkBAIC04NSw5
ICs4NSw5IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPEdseXBoUGFnZT4gbV9jYWNoZWRQYWdlWmVy
bzsKICAgICBIYXNoTWFwPGludCwgUmVmUHRyPEdseXBoUGFnZT4+IG1fY2FjaGVkUGFnZXM7CiAK
LSAgICBIYXNoU2V0PFJlZlB0cjxTaW1wbGVGb250RGF0YT4+IG1fc3lzdGVtRmFsbGJhY2tGb250
RGF0YVNldDsKKyAgICBIYXNoU2V0PFJlZlB0cjxGb250Pj4gbV9zeXN0ZW1GYWxsYmFja0ZvbnRT
ZXQ7CiAKLSAgICBjb25zdCBTaW1wbGVGb250RGF0YSogbV9jYWNoZWRQcmltYXJ5U2ltcGxlRm9u
dERhdGE7CisgICAgY29uc3QgRm9udCogbV9jYWNoZWRQcmltYXJ5Rm9udDsKICAgICBSZWZQdHI8
Rm9udFNlbGVjdG9yPiBtX2ZvbnRTZWxlY3RvcjsKIAogICAgIFdpZHRoQ2FjaGUgbV93aWR0aENh
Y2hlOwpAQCAtMTA1LDE2ICsxMDUsMTYgQEAgaW5saW5lIGJvb2wgRm9udEdseXBoczo6aXNGaXhl
ZFBpdGNoKGNvbgogICAgIHJldHVybiBtX3BpdGNoID09IEZpeGVkUGl0Y2g7CiB9OwogCi1pbmxp
bmUgY29uc3QgU2ltcGxlRm9udERhdGEmIEZvbnRHbHlwaHM6OnByaW1hcnlTaW1wbGVGb250RGF0
YShjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQoraW5saW5lIGNvbnN0IEZvbnQm
IEZvbnRHbHlwaHM6OnByaW1hcnlGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRp
b24pCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBpZiAoIW1fY2FjaGVkUHJp
bWFyeVNpbXBsZUZvbnREYXRhKSB7CisgICAgaWYgKCFtX2NhY2hlZFByaW1hcnlGb250KSB7CiAg
ICAgICAgIGF1dG8mIHByaW1hcnlSYW5nZXMgPSByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChkZXNj
cmlwdGlvbiwgMCk7Ci0gICAgICAgIG1fY2FjaGVkUHJpbWFyeVNpbXBsZUZvbnREYXRhID0gcHJp
bWFyeVJhbmdlcy5mb250RGF0YUZvckNoYXJhY3RlcignICcpOwotICAgICAgICBpZiAoIW1fY2Fj
aGVkUHJpbWFyeVNpbXBsZUZvbnREYXRhKQotICAgICAgICAgICAgbV9jYWNoZWRQcmltYXJ5U2lt
cGxlRm9udERhdGEgPSAmcHJpbWFyeVJhbmdlcy5mb250RGF0YUZvckZpcnN0UmFuZ2UoKTsKKyAg
ICAgICAgbV9jYWNoZWRQcmltYXJ5Rm9udCA9IHByaW1hcnlSYW5nZXMuZm9udEZvckNoYXJhY3Rl
cignICcpOworICAgICAgICBpZiAoIW1fY2FjaGVkUHJpbWFyeUZvbnQpCisgICAgICAgICAgICBt
X2NhY2hlZFByaW1hcnlGb250ID0gJnByaW1hcnlSYW5nZXMuZm9udEZvckZpcnN0UmFuZ2UoKTsK
ICAgICB9Ci0gICAgcmV0dXJuICptX2NhY2hlZFByaW1hcnlTaW1wbGVGb250RGF0YTsKKyAgICBy
ZXR1cm4gKm1fY2FjaGVkUHJpbWFyeUZvbnQ7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRNZXRyaWNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udE1ldHJpY3MuaAkocmV2aXNpb24gMTc4ODU3KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udE1ldHJpY3MuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTMzLDcgKzEzMyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEhhc1plcm9X
aWR0aChib29sIGhhc1plcm9XaWR0aCkgeyBtX2hhc1plcm9XaWR0aCA9IGhhc1plcm9XaWR0aDsg
fQogCiBwcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBTaW1wbGVGb250RGF0YTsKKyAgICBmcmll
bmQgY2xhc3MgRm9udDsKIAogICAgIHZvaWQgcmVzZXQoKQogICAgIHsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRSYW5nZXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRSYW5nZXMuY3BwCShyZXZpc2lvbiAx
Nzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UmFuZ2VzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkZvbnRSYW5nZXMuaCIKIAotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisj
aW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTM2LDM0ICszNiwzNCBAQCBGb250UmFuZ2VzOjpG
b250UmFuZ2VzKCkKIHsKIH0KIAotRm9udFJhbmdlczo6Rm9udFJhbmdlcyhSZWZQdHI8U2ltcGxl
Rm9udERhdGE+JiYgZm9udERhdGEpCitGb250UmFuZ2VzOjpGb250UmFuZ2VzKFJlZlB0cjxGb250
PiYmIGZvbnQpCiB7Ci0gICAgaWYgKGZvbnREYXRhKQotICAgICAgICBtX3Jhbmdlcy5hcHBlbmQo
UmFuZ2UgeyAwLCAweDdGRkZGRkZGLCBmb250RGF0YS5yZWxlYXNlTm9uTnVsbCgpIH0pOworICAg
IGlmIChmb250KQorICAgICAgICBtX3Jhbmdlcy5hcHBlbmQoUmFuZ2UgeyAwLCAweDdGRkZGRkZG
LCBmb250LnJlbGVhc2VOb25OdWxsKCkgfSk7CiB9CiAKIEZvbnRSYW5nZXM6On5Gb250UmFuZ2Vz
KCkKIHsKIH0KIAotY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRSYW5nZXM6OmZvbnREYXRhRm9y
Q2hhcmFjdGVyKFVDaGFyMzIgYykgY29uc3QKK2NvbnN0IEZvbnQqIEZvbnRSYW5nZXM6OmZvbnRG
b3JDaGFyYWN0ZXIoVUNoYXIzMiBjKSBjb25zdAogewogICAgIGZvciAoYXV0byYgcmFuZ2UgOiBt
X3JhbmdlcykgewogICAgICAgICBpZiAocmFuZ2UuZnJvbSgpIDw9IGMgJiYgYyA8PSByYW5nZS50
bygpKQotICAgICAgICAgICAgcmV0dXJuICZyYW5nZS5mb250RGF0YSgpOworICAgICAgICAgICAg
cmV0dXJuICZyYW5nZS5mb250KCk7CiAgICAgfQogICAgIHJldHVybiBudWxscHRyOwogfQogCi1j
b25zdCBTaW1wbGVGb250RGF0YSYgRm9udFJhbmdlczo6Zm9udERhdGFGb3JGaXJzdFJhbmdlKCkg
Y29uc3QKK2NvbnN0IEZvbnQmIEZvbnRSYW5nZXM6OmZvbnRGb3JGaXJzdFJhbmdlKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gbV9yYW5nZXNbMF0uZm9udERhdGEoKTsKKyAgICByZXR1cm4gbV9yYW5n
ZXNbMF0uZm9udCgpOwogfQogCiBib29sIEZvbnRSYW5nZXM6OmlzTG9hZGluZygpIGNvbnN0CiB7
CiAgICAgZm9yIChhdXRvJiByYW5nZSA6IG1fcmFuZ2VzKSB7Ci0gICAgICAgIGlmIChyYW5nZS5m
b250RGF0YSgpLmlzTG9hZGluZygpKQorICAgICAgICBpZiAocmFuZ2UuZm9udCgpLmlzTG9hZGlu
ZygpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRSYW5nZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UmFuZ2VzLmgJ
KHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRSYW5nZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBGb250
UmFuZ2VzX2gKICNkZWZpbmUgRm9udFJhbmdlc19oCiAKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0
YS5oIgorI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC0zNSwyNSArMzUsMjUgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogY2xhc3MgRm9udFJhbmdlcyB7CiBwdWJsaWM6CiAgICAgc3RydWN0IFJhbmdlIHsKLSAg
ICAgICAgUmFuZ2UoVUNoYXIzMiBmcm9tLCBVQ2hhcjMyIHRvLCBSZWY8U2ltcGxlRm9udERhdGE+
JiYgZm9udERhdGEpCisgICAgICAgIFJhbmdlKFVDaGFyMzIgZnJvbSwgVUNoYXIzMiB0bywgUmVm
PEZvbnQ+JiYgZm9udCkKICAgICAgICAgICAgIDogbV9mcm9tKGZyb20pCiAgICAgICAgICAgICAs
IG1fdG8odG8pCi0gICAgICAgICAgICAsIG1fZm9udERhdGEoV1RGOjptb3ZlKGZvbnREYXRhKSkK
KyAgICAgICAgICAgICwgbV9mb250KFdURjo6bW92ZShmb250KSkKICAgICAgICAgewogICAgICAg
ICB9CiAKICAgICAgICAgVUNoYXIzMiBmcm9tKCkgY29uc3QgeyByZXR1cm4gbV9mcm9tOyB9CiAg
ICAgICAgIFVDaGFyMzIgdG8oKSBjb25zdCB7IHJldHVybiBtX3RvOyB9Ci0gICAgICAgIGNvbnN0
IFNpbXBsZUZvbnREYXRhJiBmb250RGF0YSgpIGNvbnN0IHsgcmV0dXJuICptX2ZvbnREYXRhOyB9
CisgICAgICAgIGNvbnN0IEZvbnQmIGZvbnQoKSBjb25zdCB7IHJldHVybiAqbV9mb250OyB9CiAK
ICAgICBwcml2YXRlOgogICAgICAgICBVQ2hhcjMyIG1fZnJvbTsKICAgICAgICAgVUNoYXIzMiBt
X3RvOwotICAgICAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IG1fZm9udERhdGE7CisgICAgICAg
IFJlZlB0cjxGb250PiBtX2ZvbnQ7CiAgICAgfTsKIAogICAgIEZvbnRSYW5nZXMoKTsKLSAgICBl
eHBsaWNpdCBGb250UmFuZ2VzKFJlZlB0cjxTaW1wbGVGb250RGF0YT4mJik7CisgICAgZXhwbGlj
aXQgRm9udFJhbmdlcyhSZWZQdHI8Rm9udD4mJik7CiAgICAgfkZvbnRSYW5nZXMoKTsKIAogICAg
IGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gbV9yYW5nZXMuaXNFbXB0eSgpOyB9CkBAIC02
Miw4ICs2Miw4IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4g
bV9yYW5nZXMuc2l6ZSgpOyB9CiAgICAgY29uc3QgUmFuZ2UmIHJhbmdlQXQodW5zaWduZWQgaSkg
Y29uc3QgeyByZXR1cm4gbV9yYW5nZXNbaV07IH0KIAotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRh
KiBmb250RGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyKSBjb25zdDsKLSAgICBjb25zdCBTaW1wbGVG
b250RGF0YSYgZm9udERhdGFGb3JGaXJzdFJhbmdlKCkgY29uc3Q7CisgICAgY29uc3QgRm9udCog
Zm9udEZvckNoYXJhY3RlcihVQ2hhcjMyKSBjb25zdDsKKyAgICBjb25zdCBGb250JiBmb250Rm9y
Rmlyc3RSYW5nZSgpIGNvbnN0OwogICAgIGJvb2wgaXNMb2FkaW5nKCkgY29uc3Q7CiAKIHByaXZh
dGU6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250U2Vs
ZWN0b3IuaAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udFNlbGVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDkgKzQxLDkgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgfkZvbnRTZWxlY3RvcigpIHsgfQogCiAgICAgdmlydHVhbCBGb250
UmFuZ2VzIGZvbnRSYW5nZXNGb3JGYW1pbHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3Qg
QXRvbWljU3RyaW5nJikgPSAwOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0
YT4gZmFsbGJhY2tGb250RGF0YUF0KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIHNpemVfdCkgPSAw
OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGb250PiBmYWxsYmFja0ZvbnRBdChjb25zdCBGb250
RGVzY3JpcHRpb24mLCBzaXplX3QpID0gMDsKIAotICAgIHZpcnR1YWwgc2l6ZV90IGZhbGxiYWNr
Rm9udERhdGFDb3VudCgpID0gMDsKKyAgICB2aXJ0dWFsIHNpemVfdCBmYWxsYmFja0ZvbnRDb3Vu
dCgpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgcmVzb2x2ZXNGYW1pbHlGb3IoY29uc3QgRm9udERl
c2NyaXB0aW9uJikgY29uc3QgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkIGZvbnRDYWNoZUludmFs
aWRhdGVkKCkgeyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlw
aEJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dseXBoQnVmZmVyLmgJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dseXBoQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBTaW1wbGVGb250RGF0YTsKK2NsYXNz
IEZvbnQ7CiAKICNpZiBVU0UoQ0FJUk8pCiAvLyBGSVhNRTogV2h5IGRvZXMgQ2Fpcm8gdXNlIHN1
Y2ggYSBodWdlIHN0cnVjdCBpbnN0ZWFkIG9mIGp1c3QgYW4gb2Zmc2V0IGludG8gYW4gYXJyYXk/
CkBAIC03NiwxMiArNzYsMTIgQEAgdHlwZWRlZiBGbG9hdFNpemUgR2x5cGhCdWZmZXJBZHZhbmNl
OwogCiBjbGFzcyBHbHlwaEJ1ZmZlciB7CiBwdWJsaWM6Ci0gICAgYm9vbCBpc0VtcHR5KCkgY29u
c3QgeyByZXR1cm4gbV9mb250RGF0YS5pc0VtcHR5KCk7IH0KLSAgICBpbnQgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fZm9udERhdGEuc2l6ZSgpOyB9CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Qg
eyByZXR1cm4gbV9mb250LmlzRW1wdHkoKTsgfQorICAgIGludCBzaXplKCkgY29uc3QgeyByZXR1
cm4gbV9mb250LnNpemUoKTsgfQogICAgIAogICAgIHZvaWQgY2xlYXIoKQogICAgIHsKLSAgICAg
ICAgbV9mb250RGF0YS5jbGVhcigpOworICAgICAgICBtX2ZvbnQuY2xlYXIoKTsKICAgICAgICAg
bV9nbHlwaHMuY2xlYXIoKTsKICAgICAgICAgbV9hZHZhbmNlcy5jbGVhcigpOwogICAgICAgICBp
ZiAobV9vZmZzZXRzSW5TdHJpbmcpCkBAIC05Niw3ICs5Niw3IEBAIHB1YmxpYzoKICAgICBjb25z
dCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMoaW50IGZyb20pIGNvbnN0IHsgcmV0dXJuIG1fZ2x5
cGhzLmRhdGEoKSArIGZyb207IH0KICAgICBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFu
Y2VzKGludCBmcm9tKSBjb25zdCB7IHJldHVybiBtX2FkdmFuY2VzLmRhdGEoKSArIGZyb207IH0K
IAotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YUF0KGludCBpbmRleCkgY29uc3Qg
eyByZXR1cm4gbV9mb250RGF0YVtpbmRleF07IH0KKyAgICBjb25zdCBGb250KiBmb250QXQoaW50
IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2ZvbnRbaW5kZXhdOyB9CiAKICAgICB2b2lkIHNldElu
aXRpYWxBZHZhbmNlKEdseXBoQnVmZmVyQWR2YW5jZSBpbml0aWFsQWR2YW5jZSkgeyBtX2luaXRp
YWxBZHZhbmNlID0gaW5pdGlhbEFkdmFuY2U7IH0KICAgICBjb25zdCBHbHlwaEJ1ZmZlckFkdmFu
Y2UmIGluaXRpYWxBZHZhbmNlKCkgY29uc3QgeyByZXR1cm4gbV9pbml0aWFsQWR2YW5jZTsgfQpA
QCAtMTI2LDkgKzEyNiw5IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIG5vT2Zmc2V0ID0gVUlOVF9NQVg7Ci0gICAgdm9pZCBhZGQoR2x5cGggZ2x5cGgs
IGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LCBmbG9hdCB3aWR0aCwgdW5zaWduZWQgb2Zmc2V0
SW5TdHJpbmcgPSBub09mZnNldCwgY29uc3QgRmxvYXRTaXplKiBvZmZzZXQgPSAwKQorICAgIHZv
aWQgYWRkKEdseXBoIGdseXBoLCBjb25zdCBGb250KiBmb250LCBmbG9hdCB3aWR0aCwgdW5zaWdu
ZWQgb2Zmc2V0SW5TdHJpbmcgPSBub09mZnNldCwgY29uc3QgRmxvYXRTaXplKiBvZmZzZXQgPSAw
KQogICAgIHsKLSAgICAgICAgbV9mb250RGF0YS5hcHBlbmQoZm9udCk7CisgICAgICAgIG1fZm9u
dC5hcHBlbmQoZm9udCk7CiAKICNpZiBVU0UoQ0FJUk8pCiAgICAgICAgIGNhaXJvX2dseXBoX3Qg
Y2Fpcm9HbHlwaDsKQEAgLTE1OSw5ICsxNTksOSBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogI2lm
ICFVU0UoV0lOR0RJKQotICAgIHZvaWQgYWRkKEdseXBoIGdseXBoLCBjb25zdCBTaW1wbGVGb250
RGF0YSogZm9udCwgR2x5cGhCdWZmZXJBZHZhbmNlIGFkdmFuY2UsIHVuc2lnbmVkIG9mZnNldElu
U3RyaW5nID0gbm9PZmZzZXQpCisgICAgdm9pZCBhZGQoR2x5cGggZ2x5cGgsIGNvbnN0IEZvbnQq
IGZvbnQsIEdseXBoQnVmZmVyQWR2YW5jZSBhZHZhbmNlLCB1bnNpZ25lZCBvZmZzZXRJblN0cmlu
ZyA9IG5vT2Zmc2V0KQogICAgIHsKLSAgICAgICAgbV9mb250RGF0YS5hcHBlbmQoZm9udCk7Cisg
ICAgICAgIG1fZm9udC5hcHBlbmQoZm9udCk7CiAjaWYgVVNFKENBSVJPKQogICAgICAgICBjYWly
b19nbHlwaF90IGNhaXJvR2x5cGg7CiAgICAgICAgIGNhaXJvR2x5cGguaW5kZXggPSBnbHlwaDsK
QEAgLTIwNSw5ICsyMDUsOSBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHZvaWQgc3dhcChpbnQg
aW5kZXgxLCBpbnQgaW5kZXgyKQogICAgIHsKLSAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEq
IGYgPSBtX2ZvbnREYXRhW2luZGV4MV07Ci0gICAgICAgIG1fZm9udERhdGFbaW5kZXgxXSA9IG1f
Zm9udERhdGFbaW5kZXgyXTsKLSAgICAgICAgbV9mb250RGF0YVtpbmRleDJdID0gZjsKKyAgICAg
ICAgY29uc3QgRm9udCogZiA9IG1fZm9udFtpbmRleDFdOworICAgICAgICBtX2ZvbnRbaW5kZXgx
XSA9IG1fZm9udFtpbmRleDJdOworICAgICAgICBtX2ZvbnRbaW5kZXgyXSA9IGY7CiAKICAgICAg
ICAgR2x5cGhCdWZmZXJHbHlwaCBnID0gbV9nbHlwaHNbaW5kZXgxXTsKICAgICAgICAgbV9nbHlw
aHNbaW5kZXgxXSA9IG1fZ2x5cGhzW2luZGV4Ml07CkBAIC0yMjQsNyArMjI0LDcgQEAgcHJpdmF0
ZToKICNlbmRpZgogICAgIH0KIAotICAgIFZlY3Rvcjxjb25zdCBTaW1wbGVGb250RGF0YSosIDIw
NDg+IG1fZm9udERhdGE7CisgICAgVmVjdG9yPGNvbnN0IEZvbnQqLCAyMDQ4PiBtX2ZvbnQ7CiAg
ICAgVmVjdG9yPEdseXBoQnVmZmVyR2x5cGgsIDIwNDg+IG1fZ2x5cGhzOwogICAgIFZlY3RvcjxH
bHlwaEJ1ZmZlckFkdmFuY2UsIDIwNDg+IG1fYWR2YW5jZXM7CiAgICAgR2x5cGhCdWZmZXJBZHZh
bmNlIG1faW5pdGlhbEFkdmFuY2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HbHlwaFBhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HbHlwaFBhZ2UuaAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDE4ICsz
OSwxOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFNpbXBsZUZvbnREYXRhOwor
Y2xhc3MgRm9udDsKIAotLy8gSG9sZHMgdGhlIGdseXBoIGluZGV4IGFuZCB0aGUgY29ycmVzcG9u
ZGluZyBTaW1wbGVGb250RGF0YSBpbmZvcm1hdGlvbiBmb3IgYSBnaXZlbgorLy8gSG9sZHMgdGhl
IGdseXBoIGluZGV4IGFuZCB0aGUgY29ycmVzcG9uZGluZyBGb250IGluZm9ybWF0aW9uIGZvciBh
IGdpdmVuCiAvLyBjaGFyYWN0ZXIuCiBzdHJ1Y3QgR2x5cGhEYXRhIHsKLSAgICBHbHlwaERhdGEo
R2x5cGggZyA9IDAsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmID0gMCkKKyAgICBHbHlwaERhdGEo
R2x5cGggZyA9IDAsIGNvbnN0IEZvbnQqIGYgPSAwKQogICAgICAgICA6IGdseXBoKGcpCi0gICAg
ICAgICwgZm9udERhdGEoZikKKyAgICAgICAgLCBmb250KGYpCiAgICAgewogICAgIH0KICAgICBH
bHlwaCBnbHlwaDsKLSAgICBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGE7CisgICAgY29u
c3QgRm9udCogZm9udDsKIH07CiAKICNpZiBDT01QSUxFUihNU1ZDKQpAQCAtNjYsMjQgKzY2LDI0
IEBAIHN0cnVjdCBHbHlwaERhdGEgewogLy8gbWlzc2luZyBpbiB0aGUgcHJpbWFyeSBmb250Lgog
Y2xhc3MgR2x5cGhQYWdlIDogcHVibGljIFJlZkNvdW50ZWQ8R2x5cGhQYWdlPiB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8R2x5cGhQYWdlPiBjcmVhdGVGb3JNaXhlZEZvbnREYXRh
KCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxHbHlwaFBhZ2U+IGNyZWF0ZUZvck1peGVkRm9udHMo
KQogICAgIHsKLSAgICAgICAgdm9pZCogc2xvdCA9IGZhc3RNYWxsb2Moc2l6ZW9mKEdseXBoUGFn
ZSkgKyBzaXplb2YoU2ltcGxlRm9udERhdGEqKSAqIEdseXBoUGFnZTo6c2l6ZSk7CisgICAgICAg
IHZvaWQqIHNsb3QgPSBmYXN0TWFsbG9jKHNpemVvZihHbHlwaFBhZ2UpICsgc2l6ZW9mKEZvbnQq
KSAqIEdseXBoUGFnZTo6c2l6ZSk7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgKE5vdE51
bGwsIHNsb3QpIEdseXBoUGFnZShudWxscHRyKSk7CiAgICAgfQogCi0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8R2x5cGhQYWdlPiBjcmVhdGVDb3B5Rm9yTWl4ZWRGb250RGF0YShjb25zdCBHbHlwaFBh
Z2UmIG9yaWdpbmFsKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdseXBoUGFnZT4gY3JlYXRlQ29w
eUZvck1peGVkRm9udHMoY29uc3QgR2x5cGhQYWdlJiBvcmlnaW5hbCkKICAgICB7Ci0gICAgICAg
IFJlZlB0cjxHbHlwaFBhZ2U+IHBhZ2UgPSBjcmVhdGVGb3JNaXhlZEZvbnREYXRhKCk7CisgICAg
ICAgIFJlZlB0cjxHbHlwaFBhZ2U+IHBhZ2UgPSBjcmVhdGVGb3JNaXhlZEZvbnRzKCk7CiAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHbHlwaFBhZ2U6OnNpemU7ICsraSkKICAgICAg
ICAgICAgIHBhZ2UtPnNldEdseXBoRGF0YUZvckluZGV4KGksIG9yaWdpbmFsLmdseXBoRGF0YUZv
ckluZGV4KGkpKTsKICAgICAgICAgcmV0dXJuIHBhZ2UucmVsZWFzZSgpOwogICAgIH0KIAotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEdseXBoUGFnZT4gY3JlYXRlRm9yU2luZ2xlRm9udERhdGEoY29u
c3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdseXBo
UGFnZT4gY3JlYXRlRm9yU2luZ2xlRm9udChjb25zdCBGb250KiBmb250KQogICAgIHsKLSAgICAg
ICAgQVNTRVJUKGZvbnREYXRhKTsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHbHlwaFBh
Z2UoZm9udERhdGEpKTsKKyAgICAgICAgQVNTRVJUKGZvbnQpOworICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEdseXBoUGFnZShmb250KSk7CiAgICAgfQogCiAgICAgfkdseXBoUGFnZSgpCkBA
IC0xMTEsNyArMTExLDcgQEAgcHVibGljOgogICAgICAgICBHbHlwaCBnbHlwaCA9IG1fZ2x5cGhz
W2luZGV4XTsKICAgICAgICAgaWYgKGhhc1BlckdseXBoRm9udERhdGEoKSkKICAgICAgICAgICAg
IHJldHVybiBHbHlwaERhdGEoZ2x5cGgsIG1fcGVyR2x5cGhGb250RGF0YVtpbmRleF0pOwotICAg
ICAgICByZXR1cm4gR2x5cGhEYXRhKGdseXBoLCBnbHlwaCA/IG1fZm9udERhdGFGb3JBbGxHbHlw
aHMgOiAwKTsKKyAgICAgICAgcmV0dXJuIEdseXBoRGF0YShnbHlwaCwgZ2x5cGggPyBtX2ZvbnRG
b3JBbGxHbHlwaHMgOiAwKTsKICAgICB9CiAKICAgICBBTFdBWVNfSU5MSU5FIEdseXBoIGdseXBo
QXQodW5zaWduZWQgaW5kZXgpIGNvbnN0CkBAIC0xMjAsNjcgKzEyMCw2NyBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBtX2dseXBoc1tpbmRleF07CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElO
RSBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjKSBj
b25zdAorICAgIEFMV0FZU19JTkxJTkUgY29uc3QgRm9udCogZm9udEZvckNoYXJhY3RlcihVQ2hh
cjMyIGMpIGNvbnN0CiAgICAgewogICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGluZGV4Rm9yQ2hh
cmFjdGVyKGMpOwogICAgICAgICBpZiAoaGFzUGVyR2x5cGhGb250RGF0YSgpKQogICAgICAgICAg
ICAgcmV0dXJuIG1fcGVyR2x5cGhGb250RGF0YVtpbmRleF07Ci0gICAgICAgIHJldHVybiBtX2ds
eXBoc1tpbmRleF0gPyBtX2ZvbnREYXRhRm9yQWxsR2x5cGhzIDogMDsKKyAgICAgICAgcmV0dXJu
IG1fZ2x5cGhzW2luZGV4XSA/IG1fZm9udEZvckFsbEdseXBocyA6IDA7CiAgICAgfQogCi0gICAg
dm9pZCBzZXRHbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjLCBHbHlwaCBnLCBjb25zdCBT
aW1wbGVGb250RGF0YSogZikKKyAgICB2b2lkIHNldEdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hh
cjMyIGMsIEdseXBoIGcsIGNvbnN0IEZvbnQqIGYpCiAgICAgewogICAgICAgICBzZXRHbHlwaERh
dGFGb3JJbmRleChpbmRleEZvckNoYXJhY3RlcihjKSwgZywgZik7CiAgICAgfQogCi0gICAgdm9p
ZCBzZXRHbHlwaERhdGFGb3JJbmRleCh1bnNpZ25lZCBpbmRleCwgR2x5cGggZ2x5cGgsIGNvbnN0
IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSkKKyAgICB2b2lkIHNldEdseXBoRGF0YUZvckluZGV4
KHVuc2lnbmVkIGluZGV4LCBHbHlwaCBnbHlwaCwgY29uc3QgRm9udCogZm9udCkKICAgICB7CiAg
ICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGluZGV4IDwgc2l6ZSk7CiAg
ICAgICAgIEFTU0VSVCghbV9pc0ltbXV0YWJsZSk7CiAgICAgICAgIAogICAgICAgICBtX2dseXBo
c1tpbmRleF0gPSBnbHlwaDsKIAotICAgICAgICAvLyBHbHlwaFBhZ2UgZ2V0dGVycyB3aWxsIGFs
d2F5cyByZXR1cm4gYSBudWxsIFNpbXBsZUZvbnREYXRhKiBmb3IgZ2x5cGggIzAgaWYgdGhlcmUn
cyBubyBwZXItZ2x5cGggZm9udCBhcnJheS4KKyAgICAgICAgLy8gR2x5cGhQYWdlIGdldHRlcnMg
d2lsbCBhbHdheXMgcmV0dXJuIGEgbnVsbCBGb250KiBmb3IgZ2x5cGggIzAgaWYgdGhlcmUncyBu
byBwZXItZ2x5cGggZm9udCBhcnJheS4KICAgICAgICAgaWYgKGhhc1BlckdseXBoRm9udERhdGEo
KSkgewotICAgICAgICAgICAgbV9wZXJHbHlwaEZvbnREYXRhW2luZGV4XSA9IGdseXBoID8gZm9u
dERhdGEgOiAwOworICAgICAgICAgICAgbV9wZXJHbHlwaEZvbnREYXRhW2luZGV4XSA9IGdseXBo
ID8gZm9udCA6IDA7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICAv
LyBBIHNpbmdsZS1mb250IEdseXBoUGFnZSBhbHJlYWR5IGFzc2lnbmVkIG1fZm9udERhdGFGb3JB
bGxHbHlwaHMgaW4gdGhlIGNvbnN0cnVjdG9yLgotICAgICAgICBBU1NFUlQoIWdseXBoIHx8IGZv
bnREYXRhID09IG1fZm9udERhdGFGb3JBbGxHbHlwaHMpOworICAgICAgICAvLyBBIHNpbmdsZS1m
b250IEdseXBoUGFnZSBhbHJlYWR5IGFzc2lnbmVkIG1fZm9udEZvckFsbEdseXBocyBpbiB0aGUg
Y29uc3RydWN0b3IuCisgICAgICAgIEFTU0VSVCghZ2x5cGggfHwgZm9udCA9PSBtX2ZvbnRGb3JB
bGxHbHlwaHMpOwogICAgIH0KIAogICAgIHZvaWQgc2V0R2x5cGhEYXRhRm9ySW5kZXgodW5zaWdu
ZWQgaW5kZXgsIGNvbnN0IEdseXBoRGF0YSYgZ2x5cGhEYXRhKQogICAgIHsKLSAgICAgICAgc2V0
R2x5cGhEYXRhRm9ySW5kZXgoaW5kZXgsIGdseXBoRGF0YS5nbHlwaCwgZ2x5cGhEYXRhLmZvbnRE
YXRhKTsKKyAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgoaW5kZXgsIGdseXBoRGF0YS5nbHlw
aCwgZ2x5cGhEYXRhLmZvbnQpOwogICAgIH0KIAogICAgIC8vIEltcGxlbWVudGVkIGJ5IHRoZSBw
bGF0Zm9ybS4KLSAgICBib29sIGZpbGwodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgs
IFVDaGFyKiBjaGFyYWN0ZXJCdWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgU2lt
cGxlRm9udERhdGEqKTsKKyAgICBib29sIGZpbGwodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgsIFVDaGFyKiBjaGFyYWN0ZXJCdWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29u
c3QgRm9udCopOwogI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIHN0YXRpYyBib29sIG1heVVzZU1p
eGVkRm9udERhdGFXaGVuRmlsbGluZyhjb25zdCBVQ2hhciogY2hhcmFjdGVyQnVmZmVyLCB1bnNp
Z25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IFNpbXBsZUZvbnREYXRhKik7CisgICAgc3RhdGljIGJv
b2wgbWF5VXNlTWl4ZWRGb250c1doZW5GaWxsaW5nKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJCdWZm
ZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgRm9udCopOwogI2Vsc2UKLSAgICBzdGF0
aWMgYm9vbCBtYXlVc2VNaXhlZEZvbnREYXRhV2hlbkZpbGxpbmcoY29uc3QgVUNoYXIqLCB1bnNp
Z25lZCwgY29uc3QgU2ltcGxlRm9udERhdGEqKSB7IHJldHVybiBmYWxzZTsgfQorICAgIHN0YXRp
YyBib29sIG1heVVzZU1peGVkRm9udHNXaGVuRmlsbGluZyhjb25zdCBVQ2hhciosIHVuc2lnbmVk
LCBjb25zdCBGb250KikgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCiBwcml2YXRlOgotICAg
IGV4cGxpY2l0IEdseXBoUGFnZShjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGFGb3JBbGxH
bHlwaHMpCi0gICAgICAgIDogbV9mb250RGF0YUZvckFsbEdseXBocyhmb250RGF0YUZvckFsbEds
eXBocykKKyAgICBleHBsaWNpdCBHbHlwaFBhZ2UoY29uc3QgRm9udCogZm9udEZvckFsbEdseXBo
cykKKyAgICAgICAgOiBtX2ZvbnRGb3JBbGxHbHlwaHMoZm9udEZvckFsbEdseXBocykKICAgICB7
CiAgICAgICAgIG1lbXNldChtX2dseXBocywgMCwgc2l6ZW9mKG1fZ2x5cGhzKSk7CiAgICAgICAg
IGlmIChoYXNQZXJHbHlwaEZvbnREYXRhKCkpCi0gICAgICAgICAgICBtZW1zZXQobV9wZXJHbHlw
aEZvbnREYXRhLCAwLCBzaXplb2YoU2ltcGxlRm9udERhdGEqKSAqIEdseXBoUGFnZTo6c2l6ZSk7
CisgICAgICAgICAgICBtZW1zZXQobV9wZXJHbHlwaEZvbnREYXRhLCAwLCBzaXplb2YoRm9udCop
ICogR2x5cGhQYWdlOjpzaXplKTsKICAgICAgICAgKytzX2NvdW50OwogICAgIH0KIAotICAgIGJv
b2wgaGFzUGVyR2x5cGhGb250RGF0YSgpIGNvbnN0IHsgcmV0dXJuICFtX2ZvbnREYXRhRm9yQWxs
R2x5cGhzOyB9CisgICAgYm9vbCBoYXNQZXJHbHlwaEZvbnREYXRhKCkgY29uc3QgeyByZXR1cm4g
IW1fZm9udEZvckFsbEdseXBoczsgfQogCi0gICAgY29uc3QgU2ltcGxlRm9udERhdGEqIG1fZm9u
dERhdGFGb3JBbGxHbHlwaHM7CisgICAgY29uc3QgRm9udCogbV9mb250Rm9yQWxsR2x5cGhzOwog
ICAgIEdseXBoIG1fZ2x5cGhzW3NpemVdOwogCiAgICAgYm9vbCBtX2lzSW1tdXRhYmxlIHsgZmFs
c2UgfTsKLSAgICAvLyBOT1RFOiBUaGlzIGFycmF5IGhhcyAoR2x5cGhQYWdlOjpzaXplKSBlbGVt
ZW50cyBpZiBtX2ZvbnREYXRhRm9yQWxsR2x5cGhzIGlzIG51bGwuCi0gICAgY29uc3QgU2ltcGxl
Rm9udERhdGEqIG1fcGVyR2x5cGhGb250RGF0YVswXTsKKyAgICAvLyBOT1RFOiBUaGlzIGFycmF5
IGhhcyAoR2x5cGhQYWdlOjpzaXplKSBlbGVtZW50cyBpZiBtX2ZvbnRGb3JBbGxHbHlwaHMgaXMg
bnVsbC4KKyAgICBjb25zdCBGb250KiBtX3BlckdseXBoRm9udERhdGFbMF07CiAKICAgICBzdGF0
aWMgdW5zaWduZWQgc19jb3VudDsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAJKHJldmlzaW9uIDE3ODg1NykK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ0OCwxMiArNDQ4LDEyIEBAIGZsb2F0IEdyYXBoaWNzQ29udGV4
dDo6ZHJhd1RleHQoY29uc3QgRm8KIH0KICNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0dseXBocyhjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29u
c3QgU2ltcGxlRm9udERhdGEmIGZvbnREYXRhLCBjb25zdCBHbHlwaEJ1ZmZlciYgYnVmZmVyLCBp
bnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0dseXBocyhjb25zdCBGb250Q2FzY2FkZSYgZm9udENhc2NhZGUs
IGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBidWZmZXIsIGludCBmcm9tLCBp
bnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKIHsKICAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBmb250LmRyYXdHbHlwaHModGhp
cywgJmZvbnREYXRhLCBidWZmZXIsIGZyb20sIG51bUdseXBocywgcG9pbnQpOworICAgIGZvbnRD
YXNjYWRlLmRyYXdHbHlwaHModGhpcywgJmZvbnQsIGJ1ZmZlciwgZnJvbSwgbnVtR2x5cGhzLCBw
b2ludCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RW1waGFzaXNNYXJrcyhjb25z
dCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJp
bmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0LmgJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogI2lmIFVTRShXSU5HREkpCiAgICAgY2xhc3MgU2hhcmVkQml0
bWFwOwotICAgIGNsYXNzIFNpbXBsZUZvbnREYXRhOworICAgIGNsYXNzIEZvbnQ7CiAgICAgY2xh
c3MgR2x5cGhCdWZmZXI7CiAjZW5kaWYKIApAQCAtMzYwLDcgKzM2MCw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICNlbHNlCiAgICAgICAgIGZsb2F0IGRyYXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRl
JiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGludCB0
byA9IC0xKTsKICNlbmRpZgotICAgICAgICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udENhc2Nh
ZGUmLCBjb25zdCBTaW1wbGVGb250RGF0YSYsIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20s
IGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICAgICAgdm9pZCBkcmF3R2x5
cGhzKGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyJiwg
aW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmKTsKICAgICAgICAgdm9p
ZCBkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mICwg
Y29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20gPSAw
LCBpbnQgdG8gPSAtMSk7CiAjaWYgIVBMQVRGT1JNKElPUykKICAgICAgICAgdm9pZCBkcmF3Qmlk
aVRleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2lu
dCYsIEZvbnRDYXNjYWRlOjpDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPSBGb250Q2FzY2FkZTo6
RG9Ob3RQYWludElmRm9udE5vdFJlYWR5KTsKQEAgLTQ3OSw3ICs0NzksNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIEFmZmluZVRyYW5zZm9ybSYgYWZmaW5lVHJhbnNmb3JtKCk7CiAg
ICAgICAgIHZvaWQgcmVzZXRBZmZpbmVUcmFuc2Zvcm0oKTsKICAgICAgICAgdm9pZCBmaWxsUmVj
dChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBHcmFkaWVudCopOwotICAgICAgICB2b2lkIGRyYXdU
ZXh0KGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwgY29uc3QgR2x5cGhCdWZmZXImIGds
eXBoQnVmZmVyLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQpOworICAgICAgICB2b2lkIGRyYXdUZXh0KGNvbnN0IEZvbnQqLCBjb25zdCBHbHlwaEJ1ZmZl
ciYsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50Jik7CiAgICAgICAg
IHZvaWQgZHJhd0ZyYW1lQ29udHJvbChjb25zdCBJbnRSZWN0JiByZWN0LCB1bnNpZ25lZCB0eXBl
LCB1bnNpZ25lZCBzdGF0ZSk7CiAgICAgICAgIHZvaWQgZHJhd0ZvY3VzUmVjdChjb25zdCBJbnRS
ZWN0JiByZWN0KTsKICAgICAgICAgdm9pZCBwYWludFRleHRGaWVsZChjb25zdCBJbnRSZWN0JiBy
ZWN0LCB1bnNpZ25lZCBzdGF0ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9TaW1wbGVGb250RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNDU2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIw
MDgsIDIwMTAsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICog
My4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1l
cyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJT
aW1wbGVGb250RGF0YS5oIgotCi0jaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAm
JiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID4gMTA4MCkKLSNpbmNsdWRlICJDb3Jl
VGV4dFNQSS5oIgotI2VuZGlmCi0jaW5jbHVkZSAiRm9udENhY2hlLmgiCi0jaW5jbHVkZSAiRm9u
dENhc2NhZGUuaCIKLSNpbmNsdWRlICJPcGVuVHlwZU1hdGhEYXRhLmgiCi0jaW5jbHVkZSA8d3Rm
L01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLQotI2lmIEVO
QUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKLSNpbmNsdWRlICJPcGVuVHlwZVZlcnRpY2FsRGF0YS5o
IgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdW5zaWduZWQgR2x5cGhQYWdlOjpz
X2NvdW50ID0gMDsKLQotY29uc3QgZmxvYXQgc21hbGxDYXBzRm9udFNpemVNdWx0aXBsaWVyID0g
MC43ZjsKLWNvbnN0IGZsb2F0IGVtcGhhc2lzTWFya0ZvbnRTaXplTXVsdGlwbGllciA9IDAuNWY7
Ci0KLVNpbXBsZUZvbnREYXRhOjpTaW1wbGVGb250RGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRh
JiBwbGF0Zm9ybURhdGEsIGJvb2wgaXNDdXN0b21Gb250LCBib29sIGlzTG9hZGluZywgYm9vbCBp
c1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKQotICAgIDogbV9tYXhDaGFyV2lkdGgoLTEpCi0gICAg
LCBtX2F2Z0NoYXJXaWR0aCgtMSkKLSAgICAsIG1fcGxhdGZvcm1EYXRhKHBsYXRmb3JtRGF0YSkK
LSAgICAsIG1fdHJlYXRBc0ZpeGVkUGl0Y2goZmFsc2UpCi0gICAgLCBtX2lzQ3VzdG9tRm9udChp
c0N1c3RvbUZvbnQpCi0gICAgLCBtX2lzTG9hZGluZyhpc0xvYWRpbmcpCi0gICAgLCBtX2lzVGV4
dE9yaWVudGF0aW9uRmFsbGJhY2soaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaykKLSAgICAsIG1f
aXNCcm9rZW5JZGVvZ3JhcGhGYWxsYmFjayhmYWxzZSkKLSAgICAsIG1fbWF0aERhdGEobnVsbHB0
cikKLSNpZiBFTkFCTEUoT1BFTlRZUEVfVkVSVElDQUwpCi0gICAgLCBtX3ZlcnRpY2FsRGF0YSgw
KQotI2VuZGlmCi0gICAgLCBtX2hhc1ZlcnRpY2FsR2x5cGhzKGZhbHNlKQotewotICAgIHBsYXRm
b3JtSW5pdCgpOwotICAgIHBsYXRmb3JtR2x5cGhJbml0KCk7Ci0gICAgcGxhdGZvcm1DaGFyV2lk
dGhJbml0KCk7Ci0jaWYgRU5BQkxFKE9QRU5UWVBFX1ZFUlRJQ0FMKQotICAgIGlmIChwbGF0Zm9y
bURhdGEub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCAmJiAhaXNUZXh0T3JpZW50YXRpb25GYWxs
YmFjaykgewotICAgICAgICBtX3ZlcnRpY2FsRGF0YSA9IHBsYXRmb3JtRGF0YS52ZXJ0aWNhbERh
dGEoKTsKLSAgICAgICAgbV9oYXNWZXJ0aWNhbEdseXBocyA9IG1fdmVydGljYWxEYXRhLmdldCgp
ICYmIG1fdmVydGljYWxEYXRhLT5oYXNWZXJ0aWNhbE1ldHJpY3MoKTsKLSAgICB9Ci0jZW5kaWYK
LX0KLQotU2ltcGxlRm9udERhdGE6OlNpbXBsZUZvbnREYXRhKHN0ZDo6dW5pcXVlX3B0cjxTVkdE
YXRhPiBzdmdEYXRhLCBmbG9hdCBmb250U2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5
bnRoZXRpY0l0YWxpYykKLSAgICA6IG1fcGxhdGZvcm1EYXRhKEZvbnRQbGF0Zm9ybURhdGEoZm9u
dFNpemUsIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYykpCi0gICAgLCBtX3N2Z0RhdGEo
V1RGOjptb3ZlKHN2Z0RhdGEpKQotICAgICwgbV90cmVhdEFzRml4ZWRQaXRjaChmYWxzZSkKLSAg
ICAsIG1faXNDdXN0b21Gb250KHRydWUpCi0gICAgLCBtX2lzTG9hZGluZyhmYWxzZSkKLSAgICAs
IG1faXNUZXh0T3JpZW50YXRpb25GYWxsYmFjayhmYWxzZSkKLSAgICAsIG1faXNCcm9rZW5JZGVv
Z3JhcGhGYWxsYmFjayhmYWxzZSkKLSAgICAsIG1fbWF0aERhdGEobnVsbHB0cikKLSNpZiBFTkFC
TEUoT1BFTlRZUEVfVkVSVElDQUwpCi0gICAgLCBtX3ZlcnRpY2FsRGF0YSgwKQotI2VuZGlmCi0g
ICAgLCBtX2hhc1ZlcnRpY2FsR2x5cGhzKGZhbHNlKQotI2lmIFBMQVRGT1JNKElPUykKLSAgICAs
IG1fc2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKGZhbHNlKQotI2VuZGlmCi17Ci0gICAgbV9zdmdE
YXRhLT5pbml0aWFsaXplRm9udERhdGEodGhpcywgZm9udFNpemUpOwotfQotCi0vLyBFc3RpbWF0
ZXMgb2YgYXZnQ2hhcldpZHRoIGFuZCBtYXhDaGFyV2lkdGggZm9yIHBsYXRmb3JtcyB0aGF0IGRv
bid0IHN1cHBvcnQgYWNjZXNzaW5nIHRoZXNlIHZhbHVlcyBmcm9tIHRoZSBmb250Lgotdm9pZCBT
aW1wbGVGb250RGF0YTo6aW5pdENoYXJXaWR0aHMoKQotewotICAgIGF1dG8qIGdseXBoUGFnZVpl
cm8gPSBnbHlwaFBhZ2UoMCk7Ci0KLSAgICAvLyBUcmVhdCB0aGUgd2lkdGggb2YgYSAnMCcgYXMg
dGhlIGF2Z0NoYXJXaWR0aC4KLSAgICBpZiAobV9hdmdDaGFyV2lkdGggPD0gMC5mICYmIGdseXBo
UGFnZVplcm8pIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IFVDaGFyMzIgZGlnaXRaZXJvQ2hhciA9
ICcwJzsKLSAgICAgICAgR2x5cGggZGlnaXRaZXJvR2x5cGggPSBnbHlwaFBhZ2VaZXJvLT5nbHlw
aERhdGFGb3JDaGFyYWN0ZXIoZGlnaXRaZXJvQ2hhcikuZ2x5cGg7Ci0gICAgICAgIGlmIChkaWdp
dFplcm9HbHlwaCkKLSAgICAgICAgICAgIG1fYXZnQ2hhcldpZHRoID0gd2lkdGhGb3JHbHlwaChk
aWdpdFplcm9HbHlwaCk7Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgY2FuJ3QgcmV0cmlldmUgdGhl
IHdpZHRoIG9mIGEgJzAnLCBmYWxsIGJhY2sgdG8gdGhlIHggaGVpZ2h0LgotICAgIGlmIChtX2F2
Z0NoYXJXaWR0aCA8PSAwLmYpCi0gICAgICAgIG1fYXZnQ2hhcldpZHRoID0gbV9mb250TWV0cmlj
cy54SGVpZ2h0KCk7Ci0KLSAgICBpZiAobV9tYXhDaGFyV2lkdGggPD0gMC5mKQotICAgICAgICBt
X21heENoYXJXaWR0aCA9IHN0ZDo6bWF4KG1fYXZnQ2hhcldpZHRoLCBtX2ZvbnRNZXRyaWNzLmZs
b2F0QXNjZW50KCkpOwotfQotCi12b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUdseXBoSW5p
dCgpCi17Ci0gICAgYXV0byogZ2x5cGhQYWdlWmVybyA9IGdseXBoUGFnZSgwKTsKLSAgICBpZiAo
IWdseXBoUGFnZVplcm8pIHsKLSAgICAgICAgbV9zcGFjZUdseXBoID0gMDsKLSAgICAgICAgbV9z
cGFjZVdpZHRoID0gMDsKLSAgICAgICAgbV96ZXJvR2x5cGggPSAwOwotICAgICAgICBtX2FkanVz
dGVkU3BhY2VXaWR0aCA9IDA7Ci0gICAgICAgIGRldGVybWluZVBpdGNoKCk7Ci0gICAgICAgIG1f
emVyb1dpZHRoU3BhY2VHbHlwaCA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAv
LyBBc2sgZm9yIHRoZSBnbHlwaCBmb3IgMCB0byBhdm9pZCBwYWdpbmcgaW4gWkVSTyBXSURUSCBT
UEFDRS4gQ29udHJvbCBjaGFyYWN0ZXJzLCBpbmNsdWRpbmcgMCwKLSAgICAvLyBhcmUgbWFwcGVk
IHRvIHRoZSBaRVJPIFdJRFRIIFNQQUNFIGdseXBoLgotICAgIG1femVyb1dpZHRoU3BhY2VHbHlw
aCA9IGdseXBoUGFnZVplcm8tPmdseXBoRGF0YUZvckNoYXJhY3RlcigwKS5nbHlwaDsKLQotICAg
IC8vIE5hc3R5IGhhY2sgdG8gZGV0ZXJtaW5lIGlmIHdlIHNob3VsZCByb3VuZCBvciBjZWlsIHNw
YWNlIHdpZHRocy4KLSAgICAvLyBJZiB0aGUgZm9udCBpcyBtb25vc3BhY2Ugb3IgZmFrZSBtb25v
c3BhY2Ugd2UgY2VpbCB0byBlbnN1cmUgdGhhdCAKLSAgICAvLyBldmVyeSBjaGFyYWN0ZXIgYW5k
IHRoZSBzcGFjZSBhcmUgdGhlIHNhbWUgd2lkdGguICBPdGhlcndpc2Ugd2Ugcm91bmQuCi0gICAg
bV9zcGFjZUdseXBoID0gZ2x5cGhQYWdlWmVyby0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKCcgJyku
Z2x5cGg7Ci0gICAgZmxvYXQgd2lkdGggPSB3aWR0aEZvckdseXBoKG1fc3BhY2VHbHlwaCk7Ci0g
ICAgbV9zcGFjZVdpZHRoID0gd2lkdGg7Ci0gICAgbV96ZXJvR2x5cGggPSBnbHlwaFBhZ2VaZXJv
LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoJzAnKS5nbHlwaDsKLSAgICBtX2ZvbnRNZXRyaWNzLnNl
dFplcm9XaWR0aCh3aWR0aEZvckdseXBoKG1femVyb0dseXBoKSk7Ci0gICAgZGV0ZXJtaW5lUGl0
Y2goKTsKLSAgICBtX2FkanVzdGVkU3BhY2VXaWR0aCA9IG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPyBj
ZWlsZih3aWR0aCkgOiByb3VuZGYod2lkdGgpOwotCi0gICAgLy8gRm9yY2UgdGhlIGdseXBoIGZv
ciBaRVJPIFdJRFRIIFNQQUNFIHRvIGhhdmUgemVybyB3aWR0aCwgdW5sZXNzIGl0IGlzIHNoYXJl
ZCB3aXRoIFNQQUNFLgotICAgIC8vIEhlbHZldGljYSBpcyBhbiBleGFtcGxlIG9mIGEgbm9uLXpl
cm8gd2lkdGggWkVSTyBXSURUSCBTUEFDRSBnbHlwaC4KLSAgICAvLyBTZWUgPGh0dHA6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMTc4PiBhbmQgU2ltcGxlRm9udERhdGE6Omlz
WmVyb1dpZHRoU3BhY2VHbHlwaCgpCi0gICAgaWYgKG1femVyb1dpZHRoU3BhY2VHbHlwaCA9PSBt
X3NwYWNlR2x5cGgpCi0gICAgICAgIG1femVyb1dpZHRoU3BhY2VHbHlwaCA9IDA7Ci19Ci0KLVNp
bXBsZUZvbnREYXRhOjp+U2ltcGxlRm9udERhdGEoKQotewotICAgIHJlbW92ZUZyb21TeXN0ZW1G
YWxsYmFja0NhY2hlKCk7Ci19Ci0KLXN0YXRpYyBib29sIGZpbGxHbHlwaFBhZ2UoR2x5cGhQYWdl
JiBwYWdlVG9GaWxsLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1
ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERh
dGEpCi17Ci0jaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICBpZiAoYXV0byogc3ZnRGF0YSA9IGZv
bnREYXRhLT5zdmdEYXRhKCkpCi0gICAgICAgIHJldHVybiBzdmdEYXRhLT5maWxsU1ZHR2x5cGhQ
YWdlKCZwYWdlVG9GaWxsLCBvZmZzZXQsIGxlbmd0aCwgYnVmZmVyLCBidWZmZXJMZW5ndGgsIGZv
bnREYXRhKTsKLSNlbmRpZgotICAgIGJvb2wgaGFzR2x5cGhzID0gcGFnZVRvRmlsbC5maWxsKG9m
ZnNldCwgbGVuZ3RoLCBidWZmZXIsIGJ1ZmZlckxlbmd0aCwgZm9udERhdGEpOwotI2lmIEVOQUJM
RShPUEVOVFlQRV9WRVJUSUNBTCkKLSAgICBpZiAoaGFzR2x5cGhzICYmIGZvbnREYXRhLT52ZXJ0
aWNhbERhdGEoKSkKLSAgICAgICAgZm9udERhdGEtPnZlcnRpY2FsRGF0YSgpLT5zdWJzdGl0dXRl
V2l0aFZlcnRpY2FsR2x5cGhzKGZvbnREYXRhLCAmcGFnZVRvRmlsbCwgb2Zmc2V0LCBsZW5ndGgp
OwotI2VuZGlmCi0gICAgcmV0dXJuIGhhc0dseXBoczsKLX0KLQotc3RhdGljIFJlZlB0cjxHbHlw
aFBhZ2U+IGNyZWF0ZUFuZEZpbGxHbHlwaFBhZ2UodW5zaWduZWQgcGFnZU51bWJlciwgY29uc3Qg
U2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQotewotI2lmIFBMQVRGT1JNKElPUykKLSAgICAvLyBG
SVhNRTogVGltZXMgTmV3IFJvbWFuIGNvbnRhaW5zIEFyYWJpYyBnbHlwaHMsIGJ1dCBDb3JlIFRl
eHQgZG9lc24ndCBrbm93IGhvdyB0byBzaGFwZSB0aGVtLiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzk4
MjM5NzU+LgotICAgIC8vIE9uY2Ugd2UgaGF2ZSB0aGUgZml4IGZvciA8cmRhcjovL3Byb2JsZW0v
OTgyMzk3NT4gdGhlbiByZW1vdmUgdGhpcyBjb2RlIHRvZ2V0aGVyIHdpdGggU2ltcGxlRm9udERh
dGE6OnNob3VsZE5vdEJlVXNlZEZvckFyYWJpYygpCi0gICAgLy8gaW4gPHJkYXI6Ly9wcm9ibGVt
LzEyMDk2ODM1Pi4KLSAgICBpZiAocGFnZU51bWJlciA9PSA2ICYmIGZvbnREYXRhLT5zaG91bGRO
b3RCZVVzZWRGb3JBcmFiaWMoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0jZW5kaWYKLQot
ICAgIHVuc2lnbmVkIHN0YXJ0ID0gcGFnZU51bWJlciAqIEdseXBoUGFnZTo6c2l6ZTsKLSAgICBV
Q2hhciBidWZmZXJbR2x5cGhQYWdlOjpzaXplICogMiArIDJdOwotICAgIHVuc2lnbmVkIGJ1ZmZl
ckxlbmd0aDsKLSAgICAvLyBGaWxsIGluIGEgYnVmZmVyIHdpdGggdGhlIGVudGlyZSAicGFnZSIg
b2YgY2hhcmFjdGVycyB0aGF0IHdlIHdhbnQgdG8gbG9vayB1cCBnbHlwaHMgZm9yLgotICAgIGlm
IChVX0lTX0JNUChzdGFydCkpIHsKLSAgICAgICAgYnVmZmVyTGVuZ3RoID0gR2x5cGhQYWdlOjpz
aXplOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR2x5cGhQYWdlOjpzaXplOyBp
KyspCi0gICAgICAgICAgICBidWZmZXJbaV0gPSBzdGFydCArIGk7Ci0KLSAgICAgICAgaWYgKHN0
YXJ0ID09IDApIHsKLSAgICAgICAgICAgIC8vIENvbnRyb2wgY2hhcmFjdGVycyBtdXN0IG5vdCBy
ZW5kZXIgYXQgYWxsLgotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDB4MjA7
ICsraSkKLSAgICAgICAgICAgICAgICBidWZmZXJbaV0gPSB6ZXJvV2lkdGhTcGFjZTsKLSAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDB4N0Y7IGkgPCAweEEwOyBpKyspCi0gICAgICAgICAg
ICAgICAgYnVmZmVyW2ldID0gemVyb1dpZHRoU3BhY2U7Ci0gICAgICAgICAgICBidWZmZXJbc29m
dEh5cGhlbl0gPSB6ZXJvV2lkdGhTcGFjZTsKLQotICAgICAgICAgICAgLy8gXG4sIFx0LCBhbmQg
bm9uYnJlYWtpbmcgc3BhY2UgbXVzdCByZW5kZXIgYXMgYSBzcGFjZS4KLSAgICAgICAgICAgIGJ1
ZmZlclsoaW50KSdcbiddID0gJyAnOwotICAgICAgICAgICAgYnVmZmVyWyhpbnQpJ1x0J10gPSAn
ICc7Ci0gICAgICAgICAgICBidWZmZXJbbm9CcmVha1NwYWNlXSA9ICcgJzsKLSAgICAgICAgfSBl
bHNlIGlmIChzdGFydCA9PSAobGVmdFRvUmlnaHRNYXJrICYgfihHbHlwaFBhZ2U6OnNpemUgLSAx
KSkpIHsKLSAgICAgICAgICAgIC8vIExSTSwgUkxNLCBMUkUsIFJMRSwgWldOSiwgWldKLCBhbmQg
UERGIG11c3Qgbm90IHJlbmRlciBhdCBhbGwuCi0gICAgICAgICAgICBidWZmZXJbbGVmdFRvUmln
aHRNYXJrIC0gc3RhcnRdID0gemVyb1dpZHRoU3BhY2U7Ci0gICAgICAgICAgICBidWZmZXJbcmln
aHRUb0xlZnRNYXJrIC0gc3RhcnRdID0gemVyb1dpZHRoU3BhY2U7Ci0gICAgICAgICAgICBidWZm
ZXJbbGVmdFRvUmlnaHRFbWJlZCAtIHN0YXJ0XSA9IHplcm9XaWR0aFNwYWNlOwotICAgICAgICAg
ICAgYnVmZmVyW3JpZ2h0VG9MZWZ0RW1iZWQgLSBzdGFydF0gPSB6ZXJvV2lkdGhTcGFjZTsKLSAg
ICAgICAgICAgIGJ1ZmZlcltsZWZ0VG9SaWdodE92ZXJyaWRlIC0gc3RhcnRdID0gemVyb1dpZHRo
U3BhY2U7Ci0gICAgICAgICAgICBidWZmZXJbcmlnaHRUb0xlZnRPdmVycmlkZSAtIHN0YXJ0XSA9
IHplcm9XaWR0aFNwYWNlOwotICAgICAgICAgICAgYnVmZmVyW3plcm9XaWR0aE5vbkpvaW5lciAt
IHN0YXJ0XSA9IHplcm9XaWR0aFNwYWNlOwotICAgICAgICAgICAgYnVmZmVyW3plcm9XaWR0aEpv
aW5lciAtIHN0YXJ0XSA9IHplcm9XaWR0aFNwYWNlOwotICAgICAgICAgICAgYnVmZmVyW3BvcERp
cmVjdGlvbmFsRm9ybWF0dGluZyAtIHN0YXJ0XSA9IHplcm9XaWR0aFNwYWNlOwotICAgICAgICB9
IGVsc2UgaWYgKHN0YXJ0ID09IChvYmplY3RSZXBsYWNlbWVudENoYXJhY3RlciAmIH4oR2x5cGhQ
YWdlOjpzaXplIC0gMSkpKSB7Ci0gICAgICAgICAgICAvLyBPYmplY3QgcmVwbGFjZW1lbnQgY2hh
cmFjdGVyIG11c3Qgbm90IHJlbmRlciBhdCBhbGwuCi0gICAgICAgICAgICBidWZmZXJbb2JqZWN0
UmVwbGFjZW1lbnRDaGFyYWN0ZXIgLSBzdGFydF0gPSB6ZXJvV2lkdGhTcGFjZTsKLSAgICAgICAg
fSBlbHNlIGlmIChzdGFydCA9PSAoemVyb1dpZHRoTm9CcmVha1NwYWNlICYgfihHbHlwaFBhZ2U6
OnNpemUgLSAxKSkpIHsKLSAgICAgICAgICAgIC8vIFpXTkJTL0JPTSBtdXN0IG5vdCByZW5kZXIg
YXQgYWxsLgotICAgICAgICAgICAgYnVmZmVyW3plcm9XaWR0aE5vQnJlYWtTcGFjZSAtIHN0YXJ0
XSA9IHplcm9XaWR0aFNwYWNlOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgYnVm
ZmVyTGVuZ3RoID0gR2x5cGhQYWdlOjpzaXplICogMjsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IEdseXBoUGFnZTo6c2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICBpbnQgYyA9IGkg
KyBzdGFydDsKLSAgICAgICAgICAgIGJ1ZmZlcltpICogMl0gPSBVMTZfTEVBRChjKTsKLSAgICAg
ICAgICAgIGJ1ZmZlcltpICogMiArIDFdID0gVTE2X1RSQUlMKGMpOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgLy8gTm93IHRoYXQgd2UgaGF2ZSBhIGJ1ZmZlciBmdWxsIG9mIGNoYXJhY3RlcnMs
IHdlIHdhbnQgdG8gZ2V0IGJhY2sgYW4gYXJyYXkKLSAgICAvLyBvZiBnbHlwaCBpbmRpY2VzLiBU
aGlzIHBhcnQgaW52b2x2ZXMgY2FsbGluZyBpbnRvIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYwotICAg
IC8vIHJvdXRpbmUgb2Ygb3VyIGdseXBoIG1hcCBmb3IgYWN0dWFsbHkgZmlsbGluZyBpbiB0aGUg
cGFnZSB3aXRoIHRoZSBnbHlwaHMuCi0gICAgLy8gU3VjY2VzcyBpcyBub3QgZ3VhcmFudGVlZC4g
Rm9yIGV4YW1wbGUsIFRpbWVzIGZhaWxzIHRvIGZpbGwgcGFnZSAyNjAsIGdpdmluZyBnbHlwaCBk
YXRhCi0gICAgLy8gZm9yIG9ubHkgMTI4IG91dCBvZiAyNTYgY2hhcmFjdGVycy4KLSAgICBSZWZQ
dHI8R2x5cGhQYWdlPiBnbHlwaFBhZ2U7Ci0gICAgaWYgKEdseXBoUGFnZTo6bWF5VXNlTWl4ZWRG
b250RGF0YVdoZW5GaWxsaW5nKGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCBmb250RGF0YSkpCi0gICAg
ICAgIGdseXBoUGFnZSA9IEdseXBoUGFnZTo6Y3JlYXRlRm9yTWl4ZWRGb250RGF0YSgpOwotICAg
IGVsc2UKLSAgICAgICAgZ2x5cGhQYWdlID0gR2x5cGhQYWdlOjpjcmVhdGVGb3JTaW5nbGVGb250
RGF0YShmb250RGF0YSk7Ci0KLSAgICBib29sIGhhdmVHbHlwaHMgPSBmaWxsR2x5cGhQYWdlKCpn
bHlwaFBhZ2UsIDAsIEdseXBoUGFnZTo6c2l6ZSwgYnVmZmVyLCBidWZmZXJMZW5ndGgsIGZvbnRE
YXRhKTsKLSAgICBpZiAoIWhhdmVHbHlwaHMpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0g
ICAgZ2x5cGhQYWdlLT5zZXRJbW11dGFibGUoKTsKLSAgICByZXR1cm4gZ2x5cGhQYWdlOwotfQot
Ci1jb25zdCBHbHlwaFBhZ2UqIFNpbXBsZUZvbnREYXRhOjpnbHlwaFBhZ2UodW5zaWduZWQgcGFn
ZU51bWJlcikgY29uc3QKLXsKLSAgICBpZiAocGFnZU51bWJlciA9PSAwKSB7Ci0gICAgICAgIGlm
ICghbV9nbHlwaFBhZ2VaZXJvKQotICAgICAgICAgICAgbV9nbHlwaFBhZ2VaZXJvID0gY3JlYXRl
QW5kRmlsbEdseXBoUGFnZSgwLCB0aGlzKTsKLSAgICAgICAgcmV0dXJuIG1fZ2x5cGhQYWdlWmVy
by5nZXQoKTsKLSAgICB9Ci0gICAgYXV0byBhZGRSZXN1bHQgPSBtX2dseXBoUGFnZXMuYWRkKHBh
Z2VOdW1iZXIsIG51bGxwdHIpOwotICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAg
ICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGNyZWF0ZUFuZEZpbGxHbHlwaFBhZ2UocGFn
ZU51bWJlciwgdGhpcyk7Ci0KLSAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5n
ZXQoKTsKLX0KLQotR2x5cGggU2ltcGxlRm9udERhdGE6OmdseXBoRm9yQ2hhcmFjdGVyKFVDaGFy
MzIgY2hhcmFjdGVyKSBjb25zdAotewotICAgIGF1dG8qIHBhZ2UgPSBnbHlwaFBhZ2UoY2hhcmFj
dGVyIC8gR2x5cGhQYWdlOjpzaXplKTsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVybiAw
OwotICAgIHJldHVybiBwYWdlLT5nbHlwaEF0KGNoYXJhY3RlciAlIEdseXBoUGFnZTo6c2l6ZSk7
Ci19Ci0KLUdseXBoRGF0YSBTaW1wbGVGb250RGF0YTo6Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVD
aGFyMzIgY2hhcmFjdGVyKSBjb25zdAotewotICAgIGF1dG8qIHBhZ2UgPSBnbHlwaFBhZ2UoY2hh
cmFjdGVyIC8gR2x5cGhQYWdlOjpzaXplKTsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVy
biBHbHlwaERhdGEoKTsKLSAgICByZXR1cm4gcGFnZS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNo
YXJhY3Rlcik7Ci19Ci0KLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRh
Ojp2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250RGF0YSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFt
X2Rlcml2ZWRGb250RGF0YSkKLSAgICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBzdGQ6Om1ha2Vf
dW5pcXVlPERlcml2ZWRGb250RGF0YT4oaXNDdXN0b21Gb250KCkpOwotICAgIGlmICghbV9kZXJp
dmVkRm9udERhdGEtPnZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbikgewotICAgICAgICBGb250UGxh
dGZvcm1EYXRhIHZlcnRpY2FsUmlnaHRQbGF0Zm9ybURhdGEobV9wbGF0Zm9ybURhdGEpOwotICAg
ICAgICB2ZXJ0aWNhbFJpZ2h0UGxhdGZvcm1EYXRhLnNldE9yaWVudGF0aW9uKEhvcml6b250YWwp
OwotICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+dmVydGljYWxSaWdodE9yaWVudGF0aW9uID0g
Y3JlYXRlKHZlcnRpY2FsUmlnaHRQbGF0Zm9ybURhdGEsIGlzQ3VzdG9tRm9udCgpLCBmYWxzZSwg
dHJ1ZSk7Ci0gICAgfQotICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+dmVydGljYWxSaWdo
dE9yaWVudGF0aW9uOwotfQotCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250
RGF0YTo6dXByaWdodE9yaWVudGF0aW9uRm9udERhdGEoKSBjb25zdAotewotICAgIGlmICghbV9k
ZXJpdmVkRm9udERhdGEpCi0gICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gc3RkOjptYWtlX3Vu
aXF1ZTxEZXJpdmVkRm9udERhdGE+KGlzQ3VzdG9tRm9udCgpKTsKLSAgICBpZiAoIW1fZGVyaXZl
ZEZvbnREYXRhLT51cHJpZ2h0T3JpZW50YXRpb24pCi0gICAgICAgIG1fZGVyaXZlZEZvbnREYXRh
LT51cHJpZ2h0T3JpZW50YXRpb24gPSBjcmVhdGUobV9wbGF0Zm9ybURhdGEsIGlzQ3VzdG9tRm9u
dCgpLCBmYWxzZSwgdHJ1ZSk7Ci0gICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT51cHJpZ2h0
T3JpZW50YXRpb247Ci19Ci0KLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnRE
YXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlw
dGlvbikgY29uc3QKLXsKLSAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQotICAgICAgICBtX2Rl
cml2ZWRGb250RGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8RGVyaXZlZEZvbnREYXRhPihpc0N1c3Rv
bUZvbnQoKSk7Ci0gICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzKQotICAgICAg
ICBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9u
dERlc2NyaXB0aW9uLCBzbWFsbENhcHNGb250U2l6ZU11bHRpcGxpZXIpOwotCi0gICAgcmV0dXJu
IG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHM7Ci19Ci0KLVBhc3NSZWZQdHI8U2ltcGxlRm9u
dERhdGE+IFNpbXBsZUZvbnREYXRhOjplbXBoYXNpc01hcmtGb250RGF0YShjb25zdCBGb250RGVz
Y3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKLXsKLSAgICBpZiAoIW1fZGVyaXZlZEZv
bnREYXRhKQotICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8RGVy
aXZlZEZvbnREYXRhPihpc0N1c3RvbUZvbnQoKSk7Ci0gICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0
YS0+ZW1waGFzaXNNYXJrKQotICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJr
ID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9uLCBlbXBoYXNpc01hcmtGb250
U2l6ZU11bHRpcGxpZXIpOwotCi0gICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNp
c01hcms7Ci19Ci0KLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpi
cm9rZW5JZGVvZ3JhcGhGb250RGF0YSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2Rlcml2ZWRGb250
RGF0YSkKLSAgICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPERlcml2
ZWRGb250RGF0YT4oaXNDdXN0b21Gb250KCkpOwotICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEt
PmJyb2tlbklkZW9ncmFwaCkgewotICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+YnJva2VuSWRl
b2dyYXBoID0gY3JlYXRlKG1fcGxhdGZvcm1EYXRhLCBpc0N1c3RvbUZvbnQoKSwgZmFsc2UpOwot
ICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+YnJva2VuSWRlb2dyYXBoLT5tX2lzQnJva2VuSWRl
b2dyYXBoRmFsbGJhY2sgPSB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gbV9kZXJpdmVkRm9udERh
dGEtPmJyb2tlbklkZW9ncmFwaDsKLX0KLQotUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2lt
cGxlRm9udERhdGE6Om5vblN5bnRoZXRpY0l0YWxpY0ZvbnREYXRhKCkgY29uc3QKLXsKLSAgICBp
ZiAoIW1fZGVyaXZlZEZvbnREYXRhKQotICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IHN0ZDo6
bWFrZV91bmlxdWU8RGVyaXZlZEZvbnREYXRhPihpc0N1c3RvbUZvbnQoKSk7Ci0gICAgaWYgKCFt
X2Rlcml2ZWRGb250RGF0YS0+bm9uU3ludGhldGljSXRhbGljKSB7Ci0gICAgICAgIEZvbnRQbGF0
Zm9ybURhdGEgbm9uU3ludGhldGljSXRhbGljRm9udFBsYXRmb3JtRGF0YShtX3BsYXRmb3JtRGF0
YSk7Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgICAgIG5vblN5bnRoZXRpY0l0YWxpY0ZvbnRQ
bGF0Zm9ybURhdGEubV9zeW50aGV0aWNPYmxpcXVlID0gZmFsc2U7Ci0jZW5kaWYKLSAgICAgICAg
bV9kZXJpdmVkRm9udERhdGEtPm5vblN5bnRoZXRpY0l0YWxpYyA9IGNyZWF0ZShub25TeW50aGV0
aWNJdGFsaWNGb250UGxhdGZvcm1EYXRhLCBpc0N1c3RvbUZvbnQoKSk7Ci0gICAgfQotICAgIHJl
dHVybiBtX2Rlcml2ZWRGb250RGF0YS0+bm9uU3ludGhldGljSXRhbGljOwotfQotCi0jaWZuZGVm
IE5ERUJVRwotU3RyaW5nIFNpbXBsZUZvbnREYXRhOjpkZXNjcmlwdGlvbigpIGNvbnN0Ci17Ci0g
ICAgaWYgKGlzU1ZHRm9udCgpKQotICAgICAgICByZXR1cm4gIltTVkcgZm9udF0iOwotICAgIGlm
IChpc0N1c3RvbUZvbnQoKSkKLSAgICAgICAgcmV0dXJuICJbY3VzdG9tIGZvbnRdIjsKLQotICAg
IHJldHVybiBwbGF0Zm9ybURhdGEoKS5kZXNjcmlwdGlvbigpOwotfQotI2VuZGlmCi0KLWNvbnN0
IE9wZW5UeXBlTWF0aERhdGEqIFNpbXBsZUZvbnREYXRhOjptYXRoRGF0YSgpIGNvbnN0Ci17Ci0g
ICAgaWYgKG1faXNMb2FkaW5nKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIW1f
bWF0aERhdGEpIHsKLSAgICAgICAgbV9tYXRoRGF0YSA9IE9wZW5UeXBlTWF0aERhdGE6OmNyZWF0
ZShtX3BsYXRmb3JtRGF0YSk7Ci0gICAgICAgIGlmICghbV9tYXRoRGF0YS0+aGFzTWF0aERhdGEo
KSkKLSAgICAgICAgICAgIG1fbWF0aERhdGEuY2xlYXIoKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1f
bWF0aERhdGEuZ2V0KCk7Ci19Ci0KLVNpbXBsZUZvbnREYXRhOjpEZXJpdmVkRm9udERhdGE6On5E
ZXJpdmVkRm9udERhdGEoKQotewotfQotCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1w
bGVGb250RGF0YTo6Y3JlYXRlU2NhbGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBm
b250RGVzY3JpcHRpb24sIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAotewotICAgIGlmIChpc1NW
R0ZvbnQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gcGxhdGZvcm1D
cmVhdGVTY2FsZWRGb250RGF0YShmb250RGVzY3JpcHRpb24sIHNjYWxlRmFjdG9yKTsKLX0KLQot
Ym9vbCBTaW1wbGVGb250RGF0YTo6YXBwbHlUcmFuc2Zvcm1zKEdseXBoQnVmZmVyR2x5cGgqIGds
eXBocywgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgc2l6ZV90IGdseXBoQ291bnQsIFR5
cGVzZXR0aW5nRmVhdHVyZXMgdHlwZXNldHRpbmdGZWF0dXJlcykgY29uc3QKLXsKLSAgICAvLyBX
ZSBuZWVkIHRvIGhhbmRsZSB0cmFuc2Zvcm1zIG9uIFNWRyBmb250cyBpbnRlcm5hbGx5LCBzaW5j
ZSB0aGV5IGFyZSByZW5kZXJlZCBpbnRlcm5hbGx5LgotICAgIEFTU0VSVCghaXNTVkdGb250KCkp
OwotI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJT
SU9OX01JTl9SRVFVSVJFRCA+IDEwODApCi0gICAgQ1RGb250VHJhbnNmb3JtT3B0aW9ucyBvcHRp
b25zID0gKHR5cGVzZXR0aW5nRmVhdHVyZXMgJiBLZXJuaW5nID8ga0NURm9udFRyYW5zZm9ybUFw
cGx5UG9zaXRpb25pbmcgOiAwKSB8ICh0eXBlc2V0dGluZ0ZlYXR1cmVzICYgTGlnYXR1cmVzID8g
a0NURm9udFRyYW5zZm9ybUFwcGx5U2hhcGluZyA6IDApOwotICAgIHJldHVybiBDVEZvbnRUcmFu
c2Zvcm1HbHlwaHMobV9wbGF0Zm9ybURhdGEuY3RGb250KCksIGdseXBocywgcmVpbnRlcnByZXRf
Y2FzdDxDR1NpemUqPihhZHZhbmNlcyksIGdseXBoQ291bnQsIG9wdGlvbnMpOwotI2Vsc2UKLSAg
ICBVTlVTRURfUEFSQU0oZ2x5cGhzKTsKLSAgICBVTlVTRURfUEFSQU0oYWR2YW5jZXMpOwotICAg
IFVOVVNFRF9QQVJBTShnbHlwaENvdW50KTsKLSAgICBVTlVTRURfUEFSQU0odHlwZXNldHRpbmdG
ZWF0dXJlcyk7Ci0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLS8vIEZvbnREYXRhcyBh
cmUgbm90IHJlZmNvdW50ZWQgdG8gYXZvaWQgY3ljbGVzLgotdHlwZWRlZiBIYXNoTWFwPHN0ZDo6
cGFpcjxVQ2hhcjMyLCB1bnNpZ25lZD4sIFNpbXBsZUZvbnREYXRhKj4gQ2hhcmFjdGVyRmFsbGJh
Y2tNYXA7Ci10eXBlZGVmIEhhc2hNYXA8Y29uc3QgU2ltcGxlRm9udERhdGEqLCBDaGFyYWN0ZXJG
YWxsYmFja01hcD4gU3lzdGVtRmFsbGJhY2tDYWNoZTsKLQotc3RhdGljIFN5c3RlbUZhbGxiYWNr
Q2FjaGUmIHN5c3RlbUZhbGxiYWNrQ2FjaGUoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxTeXN0ZW1GYWxsYmFja0NhY2hlPiBtYXA7Ci0gICAgcmV0dXJuIG1hcC5nZXQoKTsKLX0KLQot
UmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6c3lzdGVtRmFsbGJhY2tGb250
RGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGNoYXJhY3RlciwgY29uc3QgRm9udERlc2NyaXB0aW9u
JiBkZXNjcmlwdGlvbiwgYm9vbCBpc0ZvclBsYXRmb3JtRm9udCkgY29uc3QKLXsKLSAgICBhdXRv
IGZvbnRBZGRSZXN1bHQgPSBzeXN0ZW1GYWxsYmFja0NhY2hlKCkuYWRkKHRoaXMsIENoYXJhY3Rl
ckZhbGxiYWNrTWFwKCkpOwotCi0gICAgYXV0byBrZXkgPSBzdGQ6Om1ha2VfcGFpcihjaGFyYWN0
ZXIsIGlzRm9yUGxhdGZvcm1Gb250KTsKLSAgICBhdXRvIGNoYXJhY3RlckFkZFJlc3VsdCA9IGZv
bnRBZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFkZChrZXksIG51bGxwdHIpOwotCi0gICAgU2lt
cGxlRm9udERhdGEqJiBmYWxsYmFja0ZvbnREYXRhID0gY2hhcmFjdGVyQWRkUmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZTsKLQotICAgIGlmICghZmFsbGJhY2tGb250RGF0YSkgewotICAgICAgICBVQ2hh
ciBjb2RlVW5pdHNbMl07Ci0gICAgICAgIGludCBjb2RlVW5pdHNMZW5ndGg7Ci0gICAgICAgIGlm
IChVX0lTX0JNUChjaGFyYWN0ZXIpKSB7Ci0gICAgICAgICAgICBjb2RlVW5pdHNbMF0gPSBGb250
Q2FzY2FkZTo6bm9ybWFsaXplU3BhY2VzKGNoYXJhY3Rlcik7Ci0gICAgICAgICAgICBjb2RlVW5p
dHNMZW5ndGggPSAxOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29kZVVuaXRzWzBd
ID0gVTE2X0xFQUQoY2hhcmFjdGVyKTsKLSAgICAgICAgICAgIGNvZGVVbml0c1sxXSA9IFUxNl9U
UkFJTChjaGFyYWN0ZXIpOwotICAgICAgICAgICAgY29kZVVuaXRzTGVuZ3RoID0gMjsKLSAgICAg
ICAgfQotCi0gICAgICAgIGZhbGxiYWNrRm9udERhdGEgPSBmb250Q2FjaGUoKS5zeXN0ZW1GYWxs
YmFja0ZvckNoYXJhY3RlcnMoZGVzY3JpcHRpb24sIHRoaXMsIGlzRm9yUGxhdGZvcm1Gb250LCBj
b2RlVW5pdHMsIGNvZGVVbml0c0xlbmd0aCkuZ2V0KCk7Ci0gICAgICAgIGlmIChmYWxsYmFja0Zv
bnREYXRhKQotICAgICAgICAgICAgZmFsbGJhY2tGb250RGF0YS0+bV9pc1VzZWRJblN5c3RlbUZh
bGxiYWNrQ2FjaGUgPSB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxsYmFja0ZvbnREYXRh
OwotfQotCi12b2lkIFNpbXBsZUZvbnREYXRhOjpyZW1vdmVGcm9tU3lzdGVtRmFsbGJhY2tDYWNo
ZSgpCi17Ci0gICAgc3lzdGVtRmFsbGJhY2tDYWNoZSgpLnJlbW92ZSh0aGlzKTsKLQotICAgIGlm
ICghbV9pc1VzZWRJblN5c3RlbUZhbGxiYWNrQ2FjaGUpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGZvciAoYXV0byYgY2hhcmFjdGVyTWFwIDogc3lzdGVtRmFsbGJhY2tDYWNoZSgpLnZhbHVlcygp
KSB7Ci0gICAgICAgIFZlY3RvcjxzdGQ6OnBhaXI8VUNoYXIzMiwgdW5zaWduZWQ+LCA1MTI+IHRv
UmVtb3ZlOwotICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogY2hhcmFjdGVyTWFwKSB7Ci0gICAg
ICAgICAgICBpZiAoZW50cnkudmFsdWUgPT0gdGhpcykKLSAgICAgICAgICAgICAgICB0b1JlbW92
ZS5hcHBlbmQoZW50cnkua2V5KTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKGF1dG8mIGtleSA6
IHRvUmVtb3ZlKQotICAgICAgICAgICAgY2hhcmFjdGVyTWFwLnJlbW92ZShrZXkpOwotICAgIH0K
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCShyZXZpc2lvbiAxNzg4NTcpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDM2OSArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIGludGVybmFsIGZvbnQgaW1wbGVtZW50YXRpb24uCi0gKgotICogQ29weXJpZ2h0IChDKSAy
MDA2LCAyMDA4LCAyMDEwLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAwNy0yMDA4IFRvcmNoIE1vYmlsZSwgSW5jLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBT
aW1wbGVGb250RGF0YV9oCi0jZGVmaW5lIFNpbXBsZUZvbnREYXRhX2gKLQotI2luY2x1ZGUgIkZv
bnRCYXNlbGluZS5oIgotI2luY2x1ZGUgIkZvbnRNZXRyaWNzLmgiCi0jaW5jbHVkZSAiRm9udFBs
YXRmb3JtRGF0YS5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkdseXBoQnVm
ZmVyLmgiCi0jaW5jbHVkZSAiR2x5cGhNZXRyaWNzTWFwLmgiCi0jaW5jbHVkZSAiR2x5cGhQYWdl
LmgiCi0jaW5jbHVkZSAiT3BlblR5cGVNYXRoRGF0YS5oIgotI2lmIEVOQUJMRShPUEVOVFlQRV9W
RVJUSUNBTCkKLSNpbmNsdWRlICJPcGVuVHlwZVZlcnRpY2FsRGF0YS5oIgotI2VuZGlmCi0jaW5j
bHVkZSAiVHlwZXNldHRpbmdGZWF0dXJlcy5oIgotI2luY2x1ZGUgPHd0Zi9UeXBlQ2FzdHMuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0KLSNpZiBQTEFURk9STShDT0NPQSkK
LSNpbmNsdWRlICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCi0jaW5jbHVkZSA8d3RmL1JldGFp
blB0ci5oPgotI2VuZGlmCi0KLSNpZiBQTEFURk9STShXSU4pCi0jaW5jbHVkZSA8dXNwMTAuaD4K
LSNlbmRpZgotCi0jaWYgVVNFKENBSVJPKQotI2luY2x1ZGUgPGNhaXJvLmg+Ci0jZW5kaWYKLQot
I2lmIFVTRShDRykKLSNpbmNsdWRlIDxXZWJDb3JlL0NvcmVHcmFwaGljc1NQSS5oPgotI2VuZGlm
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgR2x5cGhQYWdlOwotY2xhc3MgRm9udERl
c2NyaXB0aW9uOwotY2xhc3MgU2hhcmVkQnVmZmVyOwotc3RydWN0IEdseXBoRGF0YTsKLXN0cnVj
dCBXaWR0aEl0ZXJhdG9yOwotCi1lbnVtIEZvbnREYXRhVmFyaWFudCB7IEF1dG9WYXJpYW50LCBO
b3JtYWxWYXJpYW50LCBTbWFsbENhcHNWYXJpYW50LCBFbXBoYXNpc01hcmtWYXJpYW50LCBCcm9r
ZW5JZGVvZ3JhcGhWYXJpYW50IH07Ci1lbnVtIFBpdGNoIHsgVW5rbm93blBpdGNoLCBGaXhlZFBp
dGNoLCBWYXJpYWJsZVBpdGNoIH07Ci0KLWNsYXNzIFNpbXBsZUZvbnREYXRhIDogcHVibGljIFJl
ZkNvdW50ZWQ8U2ltcGxlRm9udERhdGE+IHsKLXB1YmxpYzoKLSAgICBjbGFzcyBTVkdEYXRhIHsK
LSAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgcHVibGljOgotICAgICAgICB2
aXJ0dWFsIH5TVkdEYXRhKCkgeyB9Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVG
b250RGF0YShTaW1wbGVGb250RGF0YSosIGZsb2F0IGZvbnRTaXplKSA9IDA7Ci0gICAgICAgIHZp
cnR1YWwgZmxvYXQgd2lkdGhGb3JTVkdHbHlwaChHbHlwaCwgZmxvYXQgZm9udFNpemUpIGNvbnN0
ID0gMDsKLSAgICAgICAgdmlydHVhbCBib29sIGZpbGxTVkdHbHlwaFBhZ2UoR2x5cGhQYWdlKiwg
dW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIsIHVuc2lnbmVk
IGJ1ZmZlckxlbmd0aCwgY29uc3QgU2ltcGxlRm9udERhdGEqKSBjb25zdCA9IDA7Ci0gICAgfTsK
LQotICAgIC8vIFVzZWQgdG8gY3JlYXRlIHBsYXRmb3JtIGZvbnRzLgotICAgIHN0YXRpYyBSZWY8
U2ltcGxlRm9udERhdGE+IGNyZWF0ZShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURh
dGEsIGJvb2wgaXNDdXN0b21Gb250ID0gZmFsc2UsIGJvb2wgaXNMb2FkaW5nID0gZmFsc2UsIGJv
b2wgaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjayA9IGZhbHNlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgU2ltcGxlRm9udERhdGEocGxhdGZvcm1EYXRhLCBpc0N1c3RvbUZv
bnQsIGlzTG9hZGluZywgaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaykpOwotICAgIH0KLQotICAg
IC8vIFVzZWQgdG8gY3JlYXRlIFNWRyBGb250cy4KLSAgICBzdGF0aWMgUmVmPFNpbXBsZUZvbnRE
YXRhPiBjcmVhdGUoc3RkOjp1bmlxdWVfcHRyPFNWR0RhdGE+IHN2Z0RhdGEsIGZsb2F0IGZvbnRT
aXplLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2ltcGxlRm9udERhdGEoV1RGOjptb3ZlKHN2Z0Rh
dGEpLCBmb250U2l6ZSwgc3ludGhldGljQm9sZCwgc3ludGhldGljSXRhbGljKSk7Ci0gICAgfQot
Ci0gICAgflNpbXBsZUZvbnREYXRhKCk7Ci0KLSAgICBzdGF0aWMgY29uc3QgU2ltcGxlRm9udERh
dGEqIHN5c3RlbUZhbGxiYWNrKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBTaW1w
bGVGb250RGF0YSo+KC0xKTsgfQotCi0gICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZv
cm1EYXRhKCkgY29uc3QgeyByZXR1cm4gbV9wbGF0Zm9ybURhdGE7IH0KLSAgICBjb25zdCBPcGVu
VHlwZU1hdGhEYXRhKiBtYXRoRGF0YSgpIGNvbnN0OwotI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJU
SUNBTCkKLSAgICBjb25zdCBPcGVuVHlwZVZlcnRpY2FsRGF0YSogdmVydGljYWxEYXRhKCkgY29u
c3QgeyByZXR1cm4gbV92ZXJ0aWNhbERhdGEuZ2V0KCk7IH0KLSNlbmRpZgotCi0gICAgUGFzc1Jl
ZlB0cjxTaW1wbGVGb250RGF0YT4gc21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0
aW9uJikgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gZW1waGFzaXNNYXJr
Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJikgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxT
aW1wbGVGb250RGF0YT4gYnJva2VuSWRlb2dyYXBoRm9udERhdGEoKSBjb25zdDsKLSAgICBQYXNz
UmVmUHRyPFNpbXBsZUZvbnREYXRhPiBub25TeW50aGV0aWNJdGFsaWNGb250RGF0YSgpIGNvbnN0
OwotCi0gICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gdmFyaWFudEZvbnREYXRhKGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIEZvbnREYXRhVmFyaWFudCB2YXJpYW50KSBj
b25zdAotICAgIHsKLSAgICAgICAgc3dpdGNoICh2YXJpYW50KSB7Ci0gICAgICAgIGNhc2UgU21h
bGxDYXBzVmFyaWFudDoKLSAgICAgICAgICAgIHJldHVybiBzbWFsbENhcHNGb250RGF0YShkZXNj
cmlwdGlvbik7Ci0gICAgICAgIGNhc2UgRW1waGFzaXNNYXJrVmFyaWFudDoKLSAgICAgICAgICAg
IHJldHVybiBlbXBoYXNpc01hcmtGb250RGF0YShkZXNjcmlwdGlvbik7Ci0gICAgICAgIGNhc2Ug
QnJva2VuSWRlb2dyYXBoVmFyaWFudDoKLSAgICAgICAgICAgIHJldHVybiBicm9rZW5JZGVvZ3Jh
cGhGb250RGF0YSgpOwotICAgICAgICBjYXNlIEF1dG9WYXJpYW50OgotICAgICAgICBjYXNlIE5v
cm1hbFZhcmlhbnQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8U2ltcGxlRm9udERh
dGEqPih0aGlzKTsKLSAgICB9Ci0KLSAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiB2ZXJ0
aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250RGF0YSgpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8U2lt
cGxlRm9udERhdGE+IHVwcmlnaHRPcmllbnRhdGlvbkZvbnREYXRhKCkgY29uc3Q7Ci0KLSAgICBi
b29sIGhhc1ZlcnRpY2FsR2x5cGhzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNWZXJ0aWNhbEdseXBo
czsgfQotICAgIGJvb2wgaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaygpIGNvbnN0IHsgcmV0dXJu
IG1faXNUZXh0T3JpZW50YXRpb25GYWxsYmFjazsgfQotCi0gICAgRm9udE1ldHJpY3MmIGZvbnRN
ZXRyaWNzKCkgeyByZXR1cm4gbV9mb250TWV0cmljczsgfQotICAgIGNvbnN0IEZvbnRNZXRyaWNz
JiBmb250TWV0cmljcygpIGNvbnN0IHsgcmV0dXJuIG1fZm9udE1ldHJpY3M7IH0KLSAgICBmbG9h
dCBzaXplUGVyVW5pdCgpIGNvbnN0IHsgcmV0dXJuIHBsYXRmb3JtRGF0YSgpLnNpemUoKSAvIChm
b250TWV0cmljcygpLnVuaXRzUGVyRW0oKSA/IGZvbnRNZXRyaWNzKCkudW5pdHNQZXJFbSgpIDog
MSk7IH0KLQotICAgIGZsb2F0IG1heENoYXJXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4Q2hh
cldpZHRoOyB9Ci0gICAgdm9pZCBzZXRNYXhDaGFyV2lkdGgoZmxvYXQgbWF4Q2hhcldpZHRoKSB7
IG1fbWF4Q2hhcldpZHRoID0gbWF4Q2hhcldpZHRoOyB9Ci0KLSAgICBmbG9hdCBhdmdDaGFyV2lk
dGgoKSBjb25zdCB7IHJldHVybiBtX2F2Z0NoYXJXaWR0aDsgfQotICAgIHZvaWQgc2V0QXZnQ2hh
cldpZHRoKGZsb2F0IGF2Z0NoYXJXaWR0aCkgeyBtX2F2Z0NoYXJXaWR0aCA9IGF2Z0NoYXJXaWR0
aDsgfQotCi0gICAgRmxvYXRSZWN0IGJvdW5kc0ZvckdseXBoKEdseXBoKSBjb25zdDsKLSAgICBm
bG9hdCB3aWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdDsKLSAgICBGbG9hdFJlY3QgcGxh
dGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCkgY29uc3Q7Ci0gICAgZmxvYXQgcGxhdGZvcm1XaWR0
aEZvckdseXBoKEdseXBoKSBjb25zdDsKLQotICAgIGZsb2F0IHNwYWNlV2lkdGgoKSBjb25zdCB7
IHJldHVybiBtX3NwYWNlV2lkdGg7IH0KLSAgICBmbG9hdCBhZGp1c3RlZFNwYWNlV2lkdGgoKSBj
b25zdCB7IHJldHVybiBtX2FkanVzdGVkU3BhY2VXaWR0aDsgfQotICAgIHZvaWQgc2V0U3BhY2VX
aWR0aHMoZmxvYXQgc3BhY2VXaWR0aCkKLSAgICB7Ci0gICAgICAgIG1fc3BhY2VXaWR0aCA9IHNw
YWNlV2lkdGg7Ci0gICAgICAgIG1fYWRqdXN0ZWRTcGFjZVdpZHRoID0gc3BhY2VXaWR0aDsKLSAg
ICB9Ci0KLSNpZiBVU0UoQ0cpIHx8IFVTRShDQUlSTykKLSAgICBmbG9hdCBzeW50aGV0aWNCb2xk
T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9zeW50aGV0aWNCb2xkT2Zmc2V0OyB9Ci0jZW5kaWYK
LQotICAgIEdseXBoIHNwYWNlR2x5cGgoKSBjb25zdCB7IHJldHVybiBtX3NwYWNlR2x5cGg7IH0K
LSAgICB2b2lkIHNldFNwYWNlR2x5cGgoR2x5cGggc3BhY2VHbHlwaCkgeyBtX3NwYWNlR2x5cGgg
PSBzcGFjZUdseXBoOyB9Ci0gICAgR2x5cGggemVyb1dpZHRoU3BhY2VHbHlwaCgpIGNvbnN0IHsg
cmV0dXJuIG1femVyb1dpZHRoU3BhY2VHbHlwaDsgfQotICAgIHZvaWQgc2V0WmVyb1dpZHRoU3Bh
Y2VHbHlwaChHbHlwaCBzcGFjZUdseXBoKSB7IG1femVyb1dpZHRoU3BhY2VHbHlwaCA9IHNwYWNl
R2x5cGg7IH0KLSAgICBib29sIGlzWmVyb1dpZHRoU3BhY2VHbHlwaChHbHlwaCBnbHlwaCkgY29u
c3QgeyByZXR1cm4gZ2x5cGggPT0gbV96ZXJvV2lkdGhTcGFjZUdseXBoICYmIGdseXBoOyB9Ci0g
ICAgR2x5cGggemVyb0dseXBoKCkgY29uc3QgeyByZXR1cm4gbV96ZXJvR2x5cGg7IH0KLSAgICB2
b2lkIHNldFplcm9HbHlwaChHbHlwaCB6ZXJvR2x5cGgpIHsgbV96ZXJvR2x5cGggPSB6ZXJvR2x5
cGg7IH0KLQotICAgIEdseXBoRGF0YSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMikgY29u
c3Q7Ci0gICAgR2x5cGggZ2x5cGhGb3JDaGFyYWN0ZXIoVUNoYXIzMikgY29uc3Q7Ci0KLSAgICBS
ZWZQdHI8U2ltcGxlRm9udERhdGE+IHN5c3RlbUZhbGxiYWNrRm9udERhdGFGb3JDaGFyYWN0ZXIo
VUNoYXIzMiwgY29uc3QgRm9udERlc2NyaXB0aW9uJiwgYm9vbCBpc0ZvclBsYXRmb3JtRm9udCkg
Y29uc3Q7Ci0KLSAgICBjb25zdCBHbHlwaFBhZ2UqIGdseXBoUGFnZSh1bnNpZ25lZCBwYWdlTnVt
YmVyKSBjb25zdDsKLQotICAgIHZvaWQgZGV0ZXJtaW5lUGl0Y2goKTsKLSAgICBQaXRjaCBwaXRj
aCgpIGNvbnN0IHsgcmV0dXJuIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPyBGaXhlZFBpdGNoIDogVmFy
aWFibGVQaXRjaDsgfQotCi0gICAgY29uc3QgU1ZHRGF0YSogc3ZnRGF0YSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3ZnRGF0YS5nZXQoKTsgfQotICAgIGJvb2wgaXNTVkdGb250KCkgY29uc3QgeyByZXR1
cm4gISFtX3N2Z0RhdGE7IH0KLQotICAgIGJvb2wgaXNDdXN0b21Gb250KCkgY29uc3QgeyByZXR1
cm4gbV9pc0N1c3RvbUZvbnQ7IH0KLSAgICBib29sIGlzTG9hZGluZygpIGNvbnN0IHsgcmV0dXJu
IG1faXNMb2FkaW5nOyB9Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgU3RyaW5nIGRlc2NyaXB0aW9u
KCkgY29uc3Q7Ci0jZW5kaWYKLQotI2lmIFVTRShBUFBLSVQpCi0gICAgY29uc3QgU2ltcGxlRm9u
dERhdGEqIGNvbXBvc2l0ZUZvbnRSZWZlcmVuY2VGb250RGF0YShOU0ZvbnQgKmtleSkgY29uc3Q7
Ci0gICAgTlNGb250KiBnZXROU0ZvbnQoKSBjb25zdCB7IHJldHVybiBtX3BsYXRmb3JtRGF0YS5u
c0ZvbnQoKTsgfQotI2VuZGlmCi0KLSNpZiBQTEFURk9STShJT1MpCi0gICAgQ1RGb250UmVmIGdl
dENURm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fcGxhdGZvcm1EYXRhLmZvbnQoKTsgfQotICAgIGJv
b2wgc2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGROb3RC
ZVVzZWRGb3JBcmFiaWM7IH07Ci0jZW5kaWYKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBDRkRp
Y3Rpb25hcnlSZWYgZ2V0Q0ZTdHJpbmdBdHRyaWJ1dGVzKFR5cGVzZXR0aW5nRmVhdHVyZXMsIEZv
bnRPcmllbnRhdGlvbikgY29uc3Q7Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBV
U0UoSEFSRkJVWlopCi0gICAgYm9vbCBjYW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5j
ZShjb25zdCBVQ2hhciosIHNpemVfdCkgY29uc3Q7Ci0jZW5kaWYKLQotICAgIGJvb2wgYXBwbHlU
cmFuc2Zvcm1zKEdseXBoQnVmZmVyR2x5cGgqLCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCBzaXplX3Qg
Z2x5cGhDb3VudCwgVHlwZXNldHRpbmdGZWF0dXJlcykgY29uc3Q7Ci0KLSNpZiBQTEFURk9STShX
SU4pCi0gICAgYm9vbCBpc1N5c3RlbUZvbnQoKSBjb25zdCB7IHJldHVybiBtX2lzU3lzdGVtRm9u
dDsgfQotICAgIFNDUklQVF9GT05UUFJPUEVSVElFUyogc2NyaXB0Rm9udFByb3BlcnRpZXMoKSBj
b25zdDsKLSAgICBTQ1JJUFRfQ0FDSEUqIHNjcmlwdENhY2hlKCkgY29uc3QgeyByZXR1cm4gJm1f
c2NyaXB0Q2FjaGU7IH0KLSAgICBzdGF0aWMgdm9pZCBzZXRTaG91bGRBcHBseU1hY0FzY2VudEhh
Y2soYm9vbCk7Ci0gICAgc3RhdGljIGJvb2wgc2hvdWxkQXBwbHlNYWNBc2NlbnRIYWNrKCk7Ci0g
ICAgc3RhdGljIGZsb2F0IGFzY2VudENvbnNpZGVyaW5nTWFjQXNjZW50SGFjayhjb25zdCBXQ0hB
UiosIGZsb2F0IGFzY2VudCwgZmxvYXQgZGVzY2VudCk7Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAg
ICBTaW1wbGVGb250RGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiwgYm9vbCBpc0N1c3RvbUZv
bnQgPSBmYWxzZSwgYm9vbCBpc0xvYWRpbmcgPSBmYWxzZSwgYm9vbCBpc1RleHRPcmllbnRhdGlv
bkZhbGxiYWNrID0gZmFsc2UpOwotCi0gICAgU2ltcGxlRm9udERhdGEoc3RkOjp1bmlxdWVfcHRy
PFNWR0RhdGE+LCBmbG9hdCBmb250U2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRo
ZXRpY0l0YWxpYyk7Ci0KLSAgICB2b2lkIHBsYXRmb3JtSW5pdCgpOwotICAgIHZvaWQgcGxhdGZv
cm1HbHlwaEluaXQoKTsKLSAgICB2b2lkIHBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpOwotICAgIHZv
aWQgcGxhdGZvcm1EZXN0cm95KCk7Ci0KLSAgICB2b2lkIGluaXRDaGFyV2lkdGhzKCk7Ci0KLSAg
ICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBjcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBG
b250RGVzY3JpcHRpb24mLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3Q7Ci0gICAgUGFzc1JlZlB0
cjxTaW1wbGVGb250RGF0YT4gcGxhdGZvcm1DcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGb250
RGVzY3JpcHRpb24mLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3Q7Ci0KLSAgICB2b2lkIHJlbW92
ZUZyb21TeXN0ZW1GYWxsYmFja0NhY2hlKCk7Ci0KLSNpZiBQTEFURk9STShXSU4pCi0gICAgdm9p
ZCBpbml0R0RJRm9udCgpOwotICAgIHZvaWQgcGxhdGZvcm1Db21tb25EZXN0cm95KCk7Ci0gICAg
RmxvYXRSZWN0IGJvdW5kc0ZvckdESUdseXBoKEdseXBoIGdseXBoKSBjb25zdDsKLSAgICBmbG9h
dCB3aWR0aEZvckdESUdseXBoKEdseXBoIGdseXBoKSBjb25zdDsKLSNlbmRpZgotCi0jaWYgVVNF
KENHKQotICAgIGJvb2wgY2FuVXNlRmFzdEdseXBoQWR2YW5jZUdldHRlcihHbHlwaCBnbHlwaCwg
Q0dTaXplJiBhZHZhbmNlLCBib29sJiBwb3B1bGF0ZWRBZHZhbmNlKSBjb25zdDsKLSAgICBDR0Zv
bnRSZW5kZXJpbmdTdHlsZSByZW5kZXJpbmdTdHlsZSgpIGNvbnN0OwotICAgIGJvb2wgYWR2YW5j
ZUZvckNvbG9yQml0bWFwRm9udChHbHlwaCwgQ0dTaXplJiByZXN1bHQpIGNvbnN0OyAvLyBSZXR1
cm5zIHRydWUgaWYgdGhlIGZvbnQgaXMgYSBjb2xvciBiaXRtYXAgZm9udAotI2VuZGlmCi0KLSAg
ICBGb250TWV0cmljcyBtX2ZvbnRNZXRyaWNzOwotICAgIGZsb2F0IG1fbWF4Q2hhcldpZHRoOwot
ICAgIGZsb2F0IG1fYXZnQ2hhcldpZHRoOwotCi0gICAgRm9udFBsYXRmb3JtRGF0YSBtX3BsYXRm
b3JtRGF0YTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U1ZHRGF0YT4gbV9zdmdEYXRhOwotCi0gICAg
bXV0YWJsZSBSZWZQdHI8R2x5cGhQYWdlPiBtX2dseXBoUGFnZVplcm87Ci0gICAgbXV0YWJsZSBI
YXNoTWFwPHVuc2lnbmVkLCBSZWZQdHI8R2x5cGhQYWdlPj4gbV9nbHlwaFBhZ2VzOwotICAgIG11
dGFibGUgc3RkOjp1bmlxdWVfcHRyPEdseXBoTWV0cmljc01hcDxGbG9hdFJlY3Q+PiBtX2dseXBo
VG9Cb3VuZHNNYXA7Ci0gICAgbXV0YWJsZSBHbHlwaE1ldHJpY3NNYXA8ZmxvYXQ+IG1fZ2x5cGhU
b1dpZHRoTWFwOwotCi0gICAgYm9vbCBtX3RyZWF0QXNGaXhlZFBpdGNoOwotICAgIGJvb2wgbV9p
c0N1c3RvbUZvbnQ7ICAvLyBXaGV0aGVyIG9yIG5vdCB3ZSBhcmUgY3VzdG9tIGZvbnQgbG9hZGVk
IHZpYSBAZm9udC1mYWNlCi0gICAgYm9vbCBtX2lzTG9hZGluZzsgLy8gV2hldGhlciBvciBub3Qg
dGhpcyBjdXN0b20gZm9udCBpcyBzdGlsbCBpbiB0aGUgYWN0IG9mIGxvYWRpbmcuCi0KLSAgICBi
b29sIG1faXNUZXh0T3JpZW50YXRpb25GYWxsYmFjazsKLSAgICBib29sIG1faXNCcm9rZW5JZGVv
Z3JhcGhGYWxsYmFjazsKLQotICAgIGJvb2wgbV9pc1VzZWRJblN5c3RlbUZhbGxiYWNrQ2FjaGUg
eyBmYWxzZSB9OwotCi0gICAgbXV0YWJsZSBSZWZQdHI8T3BlblR5cGVNYXRoRGF0YT4gbV9tYXRo
RGF0YTsKLSNpZiBFTkFCTEUoT1BFTlRZUEVfVkVSVElDQUwpCi0gICAgUmVmUHRyPE9wZW5UeXBl
VmVydGljYWxEYXRhPiBtX3ZlcnRpY2FsRGF0YTsKLSNlbmRpZgotICAgIGJvb2wgbV9oYXNWZXJ0
aWNhbEdseXBoczsKLQotICAgIEdseXBoIG1fc3BhY2VHbHlwaDsKLSAgICBmbG9hdCBtX3NwYWNl
V2lkdGg7Ci0gICAgR2x5cGggbV96ZXJvR2x5cGg7Ci0gICAgZmxvYXQgbV9hZGp1c3RlZFNwYWNl
V2lkdGg7Ci0KLSAgICBHbHlwaCBtX3plcm9XaWR0aFNwYWNlR2x5cGg7Ci0KLSAgICBzdHJ1Y3Qg
RGVyaXZlZEZvbnREYXRhIHsKLSAgICAgICAgZXhwbGljaXQgRGVyaXZlZEZvbnREYXRhKGJvb2wg
Y3VzdG9tKQotICAgICAgICAgICAgOiBmb3JDdXN0b21Gb250KGN1c3RvbSkKLSAgICAgICAgewot
ICAgICAgICB9Ci0gICAgICAgIH5EZXJpdmVkRm9udERhdGEoKTsKLQotICAgICAgICBib29sIGZv
ckN1c3RvbUZvbnQ7Ci0gICAgICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gc21hbGxDYXBzOwot
ICAgICAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IGVtcGhhc2lzTWFyazsKLSAgICAgICAgUmVm
UHRyPFNpbXBsZUZvbnREYXRhPiBicm9rZW5JZGVvZ3JhcGg7Ci0gICAgICAgIFJlZlB0cjxTaW1w
bGVGb250RGF0YT4gdmVydGljYWxSaWdodE9yaWVudGF0aW9uOwotICAgICAgICBSZWZQdHI8U2lt
cGxlRm9udERhdGE+IHVwcmlnaHRPcmllbnRhdGlvbjsKLSAgICAgICAgUmVmUHRyPFNpbXBsZUZv
bnREYXRhPiBub25TeW50aGV0aWNJdGFsaWM7Ci0jaWYgVVNFKEFQUEtJVCkKLSAgICAgICAgSGFz
aE1hcDxOU0ZvbnQqLCBSZWZQdHI8U2ltcGxlRm9udERhdGE+PiBjb21wb3NpdGVGb250UmVmZXJl
bmNlczsKLSNlbmRpZgotICAgIH07Ci0KLSAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxEZXJp
dmVkRm9udERhdGE+IG1fZGVyaXZlZEZvbnREYXRhOwotCi0jaWYgVVNFKENHKSB8fCBVU0UoQ0FJ
Uk8pCi0gICAgZmxvYXQgbV9zeW50aGV0aWNCb2xkT2Zmc2V0OwotI2VuZGlmCi0KLSNpZiBQTEFU
Rk9STShDT0NPQSkKLSAgICBtdXRhYmxlIEhhc2hNYXA8dW5zaWduZWQsIFJldGFpblB0cjxDRkRp
Y3Rpb25hcnlSZWY+PiBtX0NGU3RyaW5nQXR0cmlidXRlczsKLSNlbmRpZgotCi0jaWYgUExBVEZP
Uk0oQ09DT0EpIHx8IFVTRShIQVJGQlVaWikKLSAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxI
YXNoTWFwPFN0cmluZywgYm9vbD4+IG1fY29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2VTdXBwb3J0
OwotI2VuZGlmCi0KLSNpZiBQTEFURk9STShXSU4pCi0gICAgYm9vbCBtX2lzU3lzdGVtRm9udDsK
LSAgICBtdXRhYmxlIFNDUklQVF9DQUNIRSBtX3NjcmlwdENhY2hlOwotICAgIG11dGFibGUgU0NS
SVBUX0ZPTlRQUk9QRVJUSUVTKiBtX3NjcmlwdEZvbnRQcm9wZXJ0aWVzOwotI2VuZGlmCi0jaWYg
UExBVEZPUk0oSU9TKQotICAgIGJvb2wgbV9zaG91bGROb3RCZVVzZWRGb3JBcmFiaWM7Ci0jZW5k
aWYKLX07Ci0KLUFMV0FZU19JTkxJTkUgRmxvYXRSZWN0IFNpbXBsZUZvbnREYXRhOjpib3VuZHNG
b3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKLXsKLSAgICBpZiAoaXNaZXJvV2lkdGhTcGFjZUds
eXBoKGdseXBoKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwotCi0gICAgRmxvYXRSZWN0
IGJvdW5kczsKLSAgICBpZiAobV9nbHlwaFRvQm91bmRzTWFwKSB7Ci0gICAgICAgIGJvdW5kcyA9
IG1fZ2x5cGhUb0JvdW5kc01hcC0+bWV0cmljc0ZvckdseXBoKGdseXBoKTsKLSAgICAgICAgaWYg
KGJvdW5kcy53aWR0aCgpICE9IGNHbHlwaFNpemVVbmtub3duKQotICAgICAgICAgICAgcmV0dXJu
IGJvdW5kczsKLSAgICB9Ci0KLSAgICBib3VuZHMgPSBwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKGds
eXBoKTsKLSAgICBpZiAoIW1fZ2x5cGhUb0JvdW5kc01hcCkKLSAgICAgICAgbV9nbHlwaFRvQm91
bmRzTWFwID0gc3RkOjptYWtlX3VuaXF1ZTxHbHlwaE1ldHJpY3NNYXA8RmxvYXRSZWN0Pj4oKTsK
LSAgICBtX2dseXBoVG9Cb3VuZHNNYXAtPnNldE1ldHJpY3NGb3JHbHlwaChnbHlwaCwgYm91bmRz
KTsKLSAgICByZXR1cm4gYm91bmRzOwotfQotCi1BTFdBWVNfSU5MSU5FIGZsb2F0IFNpbXBsZUZv
bnREYXRhOjp3aWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAotewotICAgIGlmIChpc1pl
cm9XaWR0aFNwYWNlR2x5cGgoZ2x5cGgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGZsb2F0
IHdpZHRoID0gbV9nbHlwaFRvV2lkdGhNYXAubWV0cmljc0ZvckdseXBoKGdseXBoKTsKLSAgICBp
ZiAod2lkdGggIT0gY0dseXBoU2l6ZVVua25vd24pCi0gICAgICAgIHJldHVybiB3aWR0aDsKLQot
ICAgIGlmIChpc1NWR0ZvbnQoKSkKLSAgICAgICAgd2lkdGggPSBtX3N2Z0RhdGEtPndpZHRoRm9y
U1ZHR2x5cGgoZ2x5cGgsIG1fcGxhdGZvcm1EYXRhLnNpemUoKSk7Ci0jaWYgRU5BQkxFKE9QRU5U
WVBFX1ZFUlRJQ0FMKQotICAgIGVsc2UgaWYgKG1fdmVydGljYWxEYXRhKQotI2lmIFVTRShDRykg
fHwgVVNFKENBSVJPKQotICAgICAgICB3aWR0aCA9IG1fdmVydGljYWxEYXRhLT5hZHZhbmNlSGVp
Z2h0KHRoaXMsIGdseXBoKSArIG1fc3ludGhldGljQm9sZE9mZnNldDsKLSNlbHNlCi0gICAgICAg
IHdpZHRoID0gbV92ZXJ0aWNhbERhdGEtPmFkdmFuY2VIZWlnaHQodGhpcywgZ2x5cGgpOwotI2Vu
ZGlmCi0jZW5kaWYKLSAgICBlbHNlCi0gICAgICAgIHdpZHRoID0gcGxhdGZvcm1XaWR0aEZvckds
eXBoKGdseXBoKTsKLQotICAgIG1fZ2x5cGhUb1dpZHRoTWFwLnNldE1ldHJpY3NGb3JHbHlwaChn
bHlwaCwgd2lkdGgpOwotICAgIHJldHVybiB3aWR0aDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gU2ltcGxlRm9udERhdGFfaApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uaAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Niw3ICszNiw3IEBAIGNsYXNzIEZvbnRDYXNjYWRlOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0Owog
Y2xhc3MgR2x5cGhCdWZmZXI7CiBjbGFzcyBHbHlwaFRvUGF0aFRyYW5zbGF0b3I7Ci1jbGFzcyBT
aW1wbGVGb250RGF0YTsKK2NsYXNzIEZvbnQ7CiAKIHN0cnVjdCBHbHlwaERhdGE7CiBzdHJ1Y3Qg
V2lkdGhJdGVyYXRvcjsKQEAgLTE5OCwxMCArMTk4LDEwIEBAIHB1YmxpYzoKIAogI2lmIEVOQUJM
RShTVkdfRk9OVFMpCiAgICAgICAgIHZpcnR1YWwgR2x5cGhEYXRhIGdseXBoRGF0YUZvckNoYXJh
Y3Rlcihjb25zdCBGb250Q2FzY2FkZSYsIFdpZHRoSXRlcmF0b3ImLCBVQ2hhcjMyIGNoYXJhY3Rl
ciwgYm9vbCBtaXJyb3IsIGludCBjdXJyZW50Q2hhcmFjdGVyLCB1bnNpZ25lZCYgYWR2YW5jZUxl
bmd0aCwgU3RyaW5nJiBub3JtYWxpemVkU3BhY2VzU3RyaW5nQ2FjaGUpID0gMDsKLSAgICAgICAg
dmlydHVhbCB2b2lkIGRyYXdTVkdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgU2ltcGxl
Rm9udERhdGEqLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBmcm9tLCBpbnQgdG8sIGNvbnN0IEZs
b2F0UG9pbnQmKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkcmF3U1ZHR2x5cGhz
KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZvbnQqLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBm
cm9tLCBpbnQgdG8sIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1
YWwgZmxvYXQgZmxvYXRXaWR0aFVzaW5nU1ZHRm9udChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0
IFRleHRSdW4mLCBpbnQmIGNoYXJzQ29uc3VtZWQsIFN0cmluZyYgZ2x5cGhOYW1lKSBjb25zdCA9
IDA7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBhcHBseVNWR0tlcm5pbmcoY29uc3QgU2ltcGxlRm9u
dERhdGEqLCBXaWR0aEl0ZXJhdG9yJiwgR2x5cGhCdWZmZXIqLCBpbnQgZnJvbSkgY29uc3QgPSAw
OwotICAgICAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxHbHlwaFRvUGF0aFRyYW5zbGF0b3I+
IGNyZWF0ZUdseXBoVG9QYXRoVHJhbnNsYXRvcihjb25zdCBTaW1wbGVGb250RGF0YSYsIGNvbnN0
IFRleHRSdW4qLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBj
b25zdCBGbG9hdFBvaW50JikgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlT
VkdLZXJuaW5nKGNvbnN0IEZvbnQqLCBXaWR0aEl0ZXJhdG9yJiwgR2x5cGhCdWZmZXIqLCBpbnQg
ZnJvbSkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxHbHlwaFRv
UGF0aFRyYW5zbGF0b3I+IGNyZWF0ZUdseXBoVG9QYXRoVHJhbnNsYXRvcihjb25zdCBGb250Jiwg
Y29uc3QgVGV4dFJ1biosIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCBudW1HbHlw
aHMsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdCA9IDA7CiAjZW5kaWYKICAgICB9OwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9y
LmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvV2lkdGhJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDEwICsyMiwxMCBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldpZHRoSXRlcmF0b3IuaCIKIAorI2luY2x1
ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkdseXBoQnVm
ZmVyLmgiCiAjaW5jbHVkZSAiTGF0aW4xVGV4dEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiU2ltcGxl
Rm9udERhdGEuaCIKICNpbmNsdWRlICJTdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IuaCIK
ICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCkBAIC0zNCw3ICszNCw3IEBAIHVzaW5nIG5h
bWVzcGFjZSBVbmljb2RlOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVdpZHRoSXRlcmF0b3I6
OldpZHRoSXRlcmF0b3IoY29uc3QgRm9udENhc2NhZGUqIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1
biwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBib29sIGFj
Y291bnRGb3JHbHlwaEJvdW5kcywgYm9vbCBmb3JUZXh0RW1waGFzaXMpCitXaWR0aEl0ZXJhdG9y
OjpXaWR0aEl0ZXJhdG9yKGNvbnN0IEZvbnRDYXNjYWRlKiBmb250LCBjb25zdCBUZXh0UnVuJiBy
dW4sIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzLCBib29sIGFjY291bnRGb3JH
bHlwaEJvdW5kcywgYm9vbCBmb3JUZXh0RW1waGFzaXMpCiAgICAgOiBtX2ZvbnQoZm9udCkKICAg
ICAsIG1fcnVuKHJ1bikKICAgICAsIG1fY3VycmVudENoYXJhY3RlcigwKQpAQCAtMTAwLDcgKzEw
MCw3IEBAIHB1YmxpYzoKIAogdHlwZWRlZiBWZWN0b3I8c3RkOjpwYWlyPGludCwgT3JpZ2luYWxB
ZHZhbmNlc0ZvckNoYXJhY3RlclRyZWF0ZWRBc1NwYWNlPiwgNjQ+IENoYXJhY3RlcnNUcmVhdGVk
QXNTcGFjZTsKIAotc3RhdGljIGlubGluZSBmbG9hdCBhcHBseUZvbnRUcmFuc2Zvcm1zKEdseXBo
QnVmZmVyKiBnbHlwaEJ1ZmZlciwgYm9vbCBsdHIsIGludCYgbGFzdEdseXBoQ291bnQsIGNvbnN0
IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwgV2lkdGhJdGVyYXRvciYgaXRlcmF0b3IsIFR5cGVz
ZXR0aW5nRmVhdHVyZXMgdHlwZXNldHRpbmdGZWF0dXJlcywgQ2hhcmFjdGVyc1RyZWF0ZWRBc1Nw
YWNlJiBjaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UpCitzdGF0aWMgaW5saW5lIGZsb2F0IGFwcGx5
Rm9udFRyYW5zZm9ybXMoR2x5cGhCdWZmZXIqIGdseXBoQnVmZmVyLCBib29sIGx0ciwgaW50JiBs
YXN0R2x5cGhDb3VudCwgY29uc3QgRm9udCogZm9udCwgV2lkdGhJdGVyYXRvciYgaXRlcmF0b3Is
IFR5cGVzZXR0aW5nRmVhdHVyZXMgdHlwZXNldHRpbmdGZWF0dXJlcywgQ2hhcmFjdGVyc1RyZWF0
ZWRBc1NwYWNlJiBjaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UpCiB7CiAgICAgQVNTRVJUKHR5cGVz
ZXR0aW5nRmVhdHVyZXMgJiAoS2VybmluZyB8IExpZ2F0dXJlcykpOwogCkBAIC0xMjMsMTYgKzEy
MywxNiBAQCBzdGF0aWMgaW5saW5lIGZsb2F0IGFwcGx5Rm9udFRyYW5zZm9ybXMoCiAgICAgVU5V
U0VEX1BBUkFNKGl0ZXJhdG9yKTsKICNlbHNlCiAgICAgLy8gV2UgbmVlZCB0byBoYW5kbGUgdHJh
bnNmb3JtcyBvbiBTVkcgZm9udHMgaW50ZXJuYWxseSwgc2luY2UgdGhleSBhcmUgcmVuZGVyZWQg
aW50ZXJuYWxseS4KLSAgICBpZiAoZm9udERhdGEtPmlzU1ZHRm9udCgpKSB7CisgICAgaWYgKGZv
bnQtPmlzU1ZHRm9udCgpKSB7CiAgICAgICAgIC8vIFNWRyBmb250IGxpZ2F0dXJlcyBhcmUgaGFu
ZGxlZCBkdXJpbmcgZ2x5cGggc2VsZWN0aW9uLCBvbmx5IGtlcm5pbmcgcmVtYWluaW5nLgogICAg
ICAgICBpZiAoaXRlcmF0b3IucnVuKCkucmVuZGVyaW5nQ29udGV4dCgpICYmICh0eXBlc2V0dGlu
Z0ZlYXR1cmVzICYgS2VybmluZykpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBw
YXNzIHRoZSBuZWNlc3NhcnkgY29udGV4dCBkb3duIHRvIHRoaXMgbGV2ZWwgc28gd2UgY2FuIGxh
emlseSBjcmVhdGUgcmVuZGVyaW5nIGNvbnRleHRzIGF0IHRoaXMgcG9pbnQuCiAgICAgICAgICAg
ICAvLyBIb3dldmVyLCBhIGxhcmdlciByZWZhY3RvcmluZyBvZiBTVkcgZm9udHMgbWlnaHQgbmVj
ZXNzYXJ5IHRvIHNpZGVzdGVwIHRoaXMgcHJvYmxlbSBjb21wbGV0ZWx5LgotICAgICAgICAgICAg
aXRlcmF0b3IucnVuKCkucmVuZGVyaW5nQ29udGV4dCgpLT5hcHBseVNWR0tlcm5pbmcoZm9udERh
dGEsIGl0ZXJhdG9yLCBnbHlwaEJ1ZmZlciwgbGFzdEdseXBoQ291bnQpOworICAgICAgICAgICAg
aXRlcmF0b3IucnVuKCkucmVuZGVyaW5nQ29udGV4dCgpLT5hcHBseVNWR0tlcm5pbmcoZm9udCwg
aXRlcmF0b3IsIGdseXBoQnVmZmVyLCBsYXN0R2x5cGhDb3VudCk7CiAgICAgICAgIH0KICAgICB9
IGVsc2UKICNlbmRpZgotICAgICAgICBmb250RGF0YS0+YXBwbHlUcmFuc2Zvcm1zKGdseXBoQnVm
ZmVyLT5nbHlwaHMobGFzdEdseXBoQ291bnQpLCBhZHZhbmNlcyArIGxhc3RHbHlwaENvdW50LCBn
bHlwaEJ1ZmZlclNpemUgLSBsYXN0R2x5cGhDb3VudCwgdHlwZXNldHRpbmdGZWF0dXJlcyk7Cisg
ICAgICAgIGZvbnQtPmFwcGx5VHJhbnNmb3JtcyhnbHlwaEJ1ZmZlci0+Z2x5cGhzKGxhc3RHbHlw
aENvdW50KSwgYWR2YW5jZXMgKyBsYXN0R2x5cGhDb3VudCwgZ2x5cGhCdWZmZXJTaXplIC0gbGFz
dEdseXBoQ291bnQsIHR5cGVzZXR0aW5nRmVhdHVyZXMpOwogCiAgICAgaWYgKCFsdHIpCiAgICAg
ICAgIGdseXBoQnVmZmVyLT5yZXZlcnNlKGxhc3RHbHlwaENvdW50LCBnbHlwaEJ1ZmZlclNpemUg
LSBsYXN0R2x5cGhDb3VudCk7CkBAIC0xNjYsOCArMTY2LDggQEAgaW5saW5lIHVuc2lnbmVkIFdp
ZHRoSXRlcmF0b3I6OmFkdmFuY2VJbgogICAgIGZsb2F0IGxhc3RSb3VuZGluZ1dpZHRoID0gbV9m
aW5hbFJvdW5kaW5nV2lkdGg7CiAgICAgRmxvYXRSZWN0IGJvdW5kczsKIAotICAgIGNvbnN0IFNp
bXBsZUZvbnREYXRhJiBwcmltYXJ5Rm9udERhdGEgPSBtX2ZvbnQtPnByaW1hcnlGb250RGF0YSgp
OwotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBsYXN0Rm9udERhdGEgPSAmcHJpbWFyeUZvbnRE
YXRhOworICAgIGNvbnN0IEZvbnQmIHByaW1hcnlGb250ID0gbV9mb250LT5wcmltYXJ5Rm9udCgp
OworICAgIGNvbnN0IEZvbnQqIGxhc3RGb250RGF0YSA9ICZwcmltYXJ5Rm9udDsKICAgICBpbnQg
bGFzdEdseXBoQ291bnQgPSBnbHlwaEJ1ZmZlciA/IGdseXBoQnVmZmVyLT5zaXplKCkgOiAwOwog
CiAgICAgVUNoYXIzMiBjaGFyYWN0ZXIgPSAwOwpAQCAtMTgzLDE1ICsxODMsMTUgQEAgaW5saW5l
IHVuc2lnbmVkIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2VJbgogICAgICAgICAgICAgdGV4dEl0ZXJh
dG9yLmFkdmFuY2UoYWR2YW5jZUxlbmd0aCk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgfQotICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEgPSBnbHlwaERhdGEu
Zm9udERhdGE7Ci0gICAgICAgIEFTU0VSVChmb250RGF0YSk7CisgICAgICAgIGNvbnN0IEZvbnQq
IGZvbnQgPSBnbHlwaERhdGEuZm9udDsKKyAgICAgICAgQVNTRVJUKGZvbnQpOwogCiAgICAgICAg
IC8vIE5vdyB0aGF0IHdlIGhhdmUgYSBnbHlwaCBhbmQgZm9udCBkYXRhLCBnZXQgaXRzIHdpZHRo
LgogICAgICAgICBmbG9hdCB3aWR0aDsKICAgICAgICAgaWYgKGNoYXJhY3RlciA9PSAnXHQnICYm
IG1fcnVuLmFsbG93VGFicygpKQotICAgICAgICAgICAgd2lkdGggPSBtX2ZvbnQtPnRhYldpZHRo
KCpmb250RGF0YSwgbV9ydW4udGFiU2l6ZSgpLCBtX3J1bi54UG9zKCkgKyBtX3J1bldpZHRoU29G
YXIgKyB3aWR0aFNpbmNlTGFzdFJvdW5kaW5nKTsKKyAgICAgICAgICAgIHdpZHRoID0gbV9mb250
LT50YWJXaWR0aCgqZm9udCwgbV9ydW4udGFiU2l6ZSgpLCBtX3J1bi54UG9zKCkgKyBtX3J1bldp
ZHRoU29GYXIgKyB3aWR0aFNpbmNlTGFzdFJvdW5kaW5nKTsKICAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICB3aWR0aCA9IGZvbnREYXRhLT53aWR0aEZvckdseXBoKGdseXBoKTsKKyAgICAgICAg
ICAgIHdpZHRoID0gZm9udC0+d2lkdGhGb3JHbHlwaChnbHlwaCk7CiAKICAgICAgICAgICAgIC8v
IFNWRyB1c2VzIGhvcml6b250YWxHbHlwaFN0cmV0Y2goKSwgd2hlbiB0ZXh0TGVuZ3RoIGlzIHVz
ZWQgdG8gc3RyZXRjaC9zcXVlZXplIHRleHQuCiAgICAgICAgICAgICB3aWR0aCAqPSBtX3J1bi5o
b3Jpem9udGFsR2x5cGhTdHJldGNoKCk7CkBAIC0yMDAsMjYgKzIwMCwyNiBAQCBpbmxpbmUgdW5z
aWduZWQgV2lkdGhJdGVyYXRvcjo6YWR2YW5jZUluCiAgICAgICAgICAgICAvLyBGaXJzdCwgd2Ug
cm91bmQgc3BhY2VzIHRvIGFuIGFkanVzdGVkIHdpZHRoIGluIGFsbCBmb250cy4KICAgICAgICAg
ICAgIC8vIFNlY29uZCwgaW4gZml4ZWQtcGl0Y2ggZm9udHMgd2UgZW5zdXJlIHRoYXQgYWxsIGNo
YXJhY3RlcnMgdGhhdAogICAgICAgICAgICAgLy8gbWF0Y2ggdGhlIHdpZHRoIG9mIHRoZSBzcGFj
ZSBjaGFyYWN0ZXIgaGF2ZSB0aGUgc2FtZSB3aWR0aCBhcyB0aGUgc3BhY2UgY2hhcmFjdGVyLgot
ICAgICAgICAgICAgaWYgKG1fcnVuLmFwcGx5V29yZFJvdW5kaW5nKCkgJiYgd2lkdGggPT0gZm9u
dERhdGEtPnNwYWNlV2lkdGgoKSAmJiAoZm9udERhdGEtPnBpdGNoKCkgPT0gRml4ZWRQaXRjaCB8
fCBnbHlwaCA9PSBmb250RGF0YS0+c3BhY2VHbHlwaCgpKSkKLSAgICAgICAgICAgICAgICB3aWR0
aCA9IGZvbnREYXRhLT5hZGp1c3RlZFNwYWNlV2lkdGgoKTsKKyAgICAgICAgICAgIGlmIChtX3J1
bi5hcHBseVdvcmRSb3VuZGluZygpICYmIHdpZHRoID09IGZvbnQtPnNwYWNlV2lkdGgoKSAmJiAo
Zm9udC0+cGl0Y2goKSA9PSBGaXhlZFBpdGNoIHx8IGdseXBoID09IGZvbnQtPnNwYWNlR2x5cGgo
KSkpCisgICAgICAgICAgICAgICAgd2lkdGggPSBmb250LT5hZGp1c3RlZFNwYWNlV2lkdGgoKTsK
ICAgICAgICAgfQogCi0gICAgICAgIGlmIChmb250RGF0YSAhPSBsYXN0Rm9udERhdGEgJiYgd2lk
dGgpIHsKKyAgICAgICAgaWYgKGZvbnQgIT0gbGFzdEZvbnREYXRhICYmIHdpZHRoKSB7CiAgICAg
ICAgICAgICBpZiAoc2hvdWxkQXBwbHlGb250VHJhbnNmb3JtcygpKSB7CiAgICAgICAgICAgICAg
ICAgbV9ydW5XaWR0aFNvRmFyICs9IGFwcGx5Rm9udFRyYW5zZm9ybXMoZ2x5cGhCdWZmZXIsIG1f
cnVuLmx0cigpLCBsYXN0R2x5cGhDb3VudCwgbGFzdEZvbnREYXRhLCAqdGhpcywgbV90eXBlc2V0
dGluZ0ZlYXR1cmVzLCBjaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UpOwogICAgICAgICAgICAgICAg
IGxhc3RHbHlwaENvdW50ID0gZ2x5cGhCdWZmZXItPnNpemUoKTsgLy8gYXBwbHlGb250VHJhbnNm
b3JtcyBkb2Vzbid0IHVwZGF0ZSB3aGVuIHRoZXJlIGhhZCBiZWVuIG9ubHkgb25lIGdseXBoLgog
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBsYXN0Rm9udERhdGEgPSBmb250RGF0YTsKLSAg
ICAgICAgICAgIGlmIChtX2ZhbGxiYWNrRm9udHMgJiYgZm9udERhdGEgIT0gJnByaW1hcnlGb250
RGF0YSkgeworICAgICAgICAgICAgbGFzdEZvbnREYXRhID0gZm9udDsKKyAgICAgICAgICAgIGlm
IChtX2ZhbGxiYWNrRm9udHMgJiYgZm9udCAhPSAmcHJpbWFyeUZvbnQpIHsKICAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogVGhpcyBkb2VzIGEgbGl0dGxlIGV4dHJhIHdvcmsgdGhhdCBjb3VsZCBi
ZSBhdm9pZGVkIGlmCiAgICAgICAgICAgICAgICAgLy8gZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKCkg
cmV0dXJuZWQgd2hldGhlciBpdCBjaG9zZSB0byB1c2UgYSBzbWFsbCBjYXBzIGZvbnQuCiAgICAg
ICAgICAgICAgICAgaWYgKCFtX2ZvbnQtPmlzU21hbGxDYXBzKCkgfHwgY2hhcmFjdGVyID09IHVf
dG91cHBlcihjaGFyYWN0ZXIpKQotICAgICAgICAgICAgICAgICAgICBtX2ZhbGxiYWNrRm9udHMt
PmFkZChmb250RGF0YSk7CisgICAgICAgICAgICAgICAgICAgIG1fZmFsbGJhY2tGb250cy0+YWRk
KGZvbnQpOwogICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICBjb25z
dCBHbHlwaERhdGEmIHVwcGVyY2FzZUdseXBoRGF0YSA9IG1fZm9udC0+Z2x5cGhEYXRhRm9yQ2hh
cmFjdGVyKHVfdG91cHBlcihjaGFyYWN0ZXIpLCBydGwpOwotICAgICAgICAgICAgICAgICAgICBp
ZiAodXBwZXJjYXNlR2x5cGhEYXRhLmZvbnREYXRhICE9ICZwcmltYXJ5Rm9udERhdGEpCi0gICAg
ICAgICAgICAgICAgICAgICAgICBtX2ZhbGxiYWNrRm9udHMtPmFkZCh1cHBlcmNhc2VHbHlwaERh
dGEuZm9udERhdGEpOworICAgICAgICAgICAgICAgICAgICBpZiAodXBwZXJjYXNlR2x5cGhEYXRh
LmZvbnQgIT0gJnByaW1hcnlGb250KQorICAgICAgICAgICAgICAgICAgICAgICAgbV9mYWxsYmFj
a0ZvbnRzLT5hZGQodXBwZXJjYXNlR2x5cGhEYXRhLmZvbnQpOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjQzLDkgKzI0Myw5IEBAIGlubGluZSB1bnNp
Z25lZCBXaWR0aEl0ZXJhdG9yOjphZHZhbmNlSW4KICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChnbHlwaEJ1ZmZlcikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnbHlwaEJ1
ZmZlci0+aXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICht
X2ZvclRleHRFbXBoYXNpcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGds
eXBoQnVmZmVyLT5hZGQoZm9udERhdGEtPnplcm9XaWR0aFNwYWNlR2x5cGgoKSwgZm9udERhdGEs
IG1fZXhwYW5zaW9uUGVyT3Bwb3J0dW5pdHksIGN1cnJlbnRDaGFyYWN0ZXIpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhCdWZmZXItPmFkZChmb250LT56ZXJvV2lk
dGhTcGFjZUdseXBoKCksIGZvbnQsIG1fZXhwYW5zaW9uUGVyT3Bwb3J0dW5pdHksIGN1cnJlbnRD
aGFyYWN0ZXIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+YWRkKGZvbnREYXRhLT5z
cGFjZUdseXBoKCksIGZvbnREYXRhLCBleHBhbnNpb25BdFRoaXNPcHBvcnR1bml0eSwgY3VycmVu
dENoYXJhY3Rlcik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaEJ1
ZmZlci0+YWRkKGZvbnQtPnNwYWNlR2x5cGgoKSwgZm9udCwgZXhwYW5zaW9uQXRUaGlzT3Bwb3J0
dW5pdHksIGN1cnJlbnRDaGFyYWN0ZXIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+ZXhwYW5k
TGFzdEFkdmFuY2UoZXhwYW5zaW9uQXRUaGlzT3Bwb3J0dW5pdHkpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgfQpAQCAtMjc0LDcgKzI3NCw3IEBAIGlubGluZSB1bnNpZ25lZCBXaWR0aEl0ZXJh
dG9yOjphZHZhbmNlSW4KICAgICAgICAgfQogCiAgICAgICAgIGlmIChtX2FjY291bnRGb3JHbHlw
aEJvdW5kcykgewotICAgICAgICAgICAgYm91bmRzID0gZm9udERhdGEtPmJvdW5kc0ZvckdseXBo
KGdseXBoKTsKKyAgICAgICAgICAgIGJvdW5kcyA9IGZvbnQtPmJvdW5kc0ZvckdseXBoKGdseXBo
KTsKICAgICAgICAgICAgIGlmICghY3VycmVudENoYXJhY3RlcikKICAgICAgICAgICAgICAgICBt
X2ZpcnN0R2x5cGhPdmVyZmxvdyA9IHN0ZDo6bWF4PGZsb2F0PigwLCAtYm91bmRzLngoKSk7CiAg
ICAgICAgIH0KQEAgLTMxNCw3ICszMTQsNyBAQCBpbmxpbmUgdW5zaWduZWQgV2lkdGhJdGVyYXRv
cjo6YWR2YW5jZUluCiAgICAgICAgIH0KIAogICAgICAgICBpZiAoZ2x5cGhCdWZmZXIpCi0gICAg
ICAgICAgICBnbHlwaEJ1ZmZlci0+YWRkKGdseXBoLCBmb250RGF0YSwgKHJ0bCA/IG9sZFdpZHRo
ICsgbGFzdFJvdW5kaW5nV2lkdGggOiB3aWR0aCksIGN1cnJlbnRDaGFyYWN0ZXIpOworICAgICAg
ICAgICAgZ2x5cGhCdWZmZXItPmFkZChnbHlwaCwgZm9udCwgKHJ0bCA/IG9sZFdpZHRoICsgbGFz
dFJvdW5kaW5nV2lkdGggOiB3aWR0aCksIGN1cnJlbnRDaGFyYWN0ZXIpOwogCiAgICAgICAgIGxh
c3RSb3VuZGluZ1dpZHRoID0gd2lkdGggLSBvbGRXaWR0aDsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuaAkocmV2aXNpb24gMTc4
ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxNCArMzIsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBGb250Q2FzY2FkZTsKIGNsYXNzIEdseXBoQnVmZmVyOwotY2xhc3MgU2ltcGxlRm9u
dERhdGE7CitjbGFzcyBGb250OwogY2xhc3MgVGV4dFJ1bjsKIHN0cnVjdCBHbHlwaERhdGE7CiAK
IHN0cnVjdCBXaWR0aEl0ZXJhdG9yIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1
YmxpYzoKLSAgICBXaWR0aEl0ZXJhdG9yKGNvbnN0IEZvbnRDYXNjYWRlKiwgY29uc3QgVGV4dFJ1
biYsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDAsIGJv
b2wgYWNjb3VudEZvckdseXBoQm91bmRzID0gZmFsc2UsIGJvb2wgZm9yVGV4dEVtcGhhc2lzID0g
ZmFsc2UpOworICAgIFdpZHRoSXRlcmF0b3IoY29uc3QgRm9udENhc2NhZGUqLCBjb25zdCBUZXh0
UnVuJiwgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMgPSAwLCBib29sIGFjY291
bnRGb3JHbHlwaEJvdW5kcyA9IGZhbHNlLCBib29sIGZvclRleHRFbXBoYXNpcyA9IGZhbHNlKTsK
IAogICAgIHVuc2lnbmVkIGFkdmFuY2UoaW50IHRvLCBHbHlwaEJ1ZmZlciopOwogICAgIGJvb2wg
YWR2YW5jZU9uZUNoYXJhY3RlcihmbG9hdCYgd2lkdGgsIEdseXBoQnVmZmVyJik7CkBAIC05NCw3
ICs5NCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBzaG91bGRBcHBseUZvbnRUcmFuc2Zvcm1zKCkg
Y29uc3QgeyByZXR1cm4gbV9ydW4ubGVuZ3RoKCkgPiAxICYmIChtX3R5cGVzZXR0aW5nRmVhdHVy
ZXMgJiAoS2VybmluZyB8IExpZ2F0dXJlcykpOyB9CiAKICAgICBUeXBlc2V0dGluZ0ZlYXR1cmVz
IG1fdHlwZXNldHRpbmdGZWF0dXJlczsKLSAgICBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRh
Kj4qIG1fZmFsbGJhY2tGb250czsKKyAgICBIYXNoU2V0PGNvbnN0IEZvbnQqPiogbV9mYWxsYmFj
a0ZvbnRzOwogICAgIGJvb2wgbV9hY2NvdW50Rm9yR2x5cGhCb3VuZHM7CiAgICAgZmxvYXQgbV9t
YXhHbHlwaEJvdW5kaW5nQm94WTsKICAgICBmbG9hdCBtX21pbkdseXBoQm91bmRpbmdCb3hZOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9G
b250Q2Fpcm8uY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICsz
Myw3IEBACiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJDYWlyb1V0
aWxpdGllcy5oIgorI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgog
I2luY2x1ZGUgIkdyYWRpZW50LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCkBAIC00
MSwxMSArNDIsMTAgQEAKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgogI2luY2x1
ZGUgIlBsYXRmb3JtUGF0aENhaXJvLmgiCiAjaW5jbHVkZSAiU2hhZG93Qmx1ci5oIgotI2luY2x1
ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIHZv
aWQgZHJhd0dseXBoc1RvQ29udGV4dChjYWlyb190KiBjb250ZXh0LCBjb25zdCBTaW1wbGVGb250
RGF0YSogZm9udCwgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBpbnQgbnVtR2x5cGhzKQorc3Rh
dGljIHZvaWQgZHJhd0dseXBoc1RvQ29udGV4dChjYWlyb190KiBjb250ZXh0LCBjb25zdCBGb250
KiBmb250LCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGludCBudW1HbHlwaHMpCiB7CiAgICAg
Y2Fpcm9fbWF0cml4X3Qgb3JpZ2luYWxUcmFuc2Zvcm07CiAgICAgZmxvYXQgc3ludGhldGljQm9s
ZE9mZnNldCA9IGZvbnQtPnN5bnRoZXRpY0JvbGRPZmZzZXQoKTsKQEAgLTY0LDcgKzY0LDcgQEAg
c3RhdGljIHZvaWQgZHJhd0dseXBoc1RvQ29udGV4dChjYWlyb190KgogICAgICAgICBjYWlyb19z
ZXRfbWF0cml4KGNvbnRleHQsICZvcmlnaW5hbFRyYW5zZm9ybSk7CiB9CiAKLXN0YXRpYyB2b2lk
IGRyYXdHbHlwaHNTaGFkb3coR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgR2x5cGhCdWZm
ZXJHbHlwaCogZ2x5cGhzLCBpbnQgbnVtR2x5cGhzKQorc3RhdGljIHZvaWQgZHJhd0dseXBoc1No
YWRvdyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQsIGNvbnN0IEZvbnQqIGZvbnQsIEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgaW50IG51
bUdseXBocykKIHsKICAgICBTaGFkb3dCbHVyJiBzaGFkb3cgPSBncmFwaGljc0NvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpLT5zaGFkb3dCbHVyKCk7CiAKQEAgLTk1LDcgKzk1LDcgQEAgc3RhdGlj
IHZvaWQgZHJhd0dseXBoc1NoYWRvdyhHcmFwaGljc0NvbgogICAgIH0KIH0KIAotdm9pZCBGb250
Q2FzY2FkZTo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFNpbXBs
ZUZvbnREYXRhKiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsCit2b2lkIEZv
bnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRm9u
dCogZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLAogICAgIGludCBmcm9tLCBp
bnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKIHsKICAgICBpZiAo
IWZvbnQtPnBsYXRmb3JtRGF0YSgpLnNpemUoKSkKQEAgLTIxNiw3ICsyMTYsNyBAQCBwdWJsaWM6
CiAgICAgICAgIDogbV9pbmRleCgwKQogICAgICAgICAsIG1fdGV4dFJ1bih0ZXh0UnVuKQogICAg
ICAgICAsIG1fZ2x5cGhCdWZmZXIoZ2x5cGhCdWZmZXIpCi0gICAgICAgICwgbV9mb250RGF0YShn
bHlwaEJ1ZmZlci5mb250RGF0YUF0KG1faW5kZXgpKQorICAgICAgICAsIG1fZm9udERhdGEoZ2x5
cGhCdWZmZXIuZm9udEF0KG1faW5kZXgpKQogICAgICAgICAsIG1fdHJhbnNsYXRpb24oQWZmaW5l
VHJhbnNmb3JtKCkudHJhbnNsYXRlKHRleHRPcmlnaW4ueCgpLCB0ZXh0T3JpZ2luLnkoKSkpCiAg
ICAgewogICAgICAgICBtb3ZlVG9OZXh0VmFsaWRHbHlwaCgpOwpAQCAtMjM1LDcgKzIzNSw3IEBA
IHByaXZhdGU6CiAgICAgaW50IG1faW5kZXg7CiAgICAgY29uc3QgVGV4dFJ1biYgbV90ZXh0UnVu
OwogICAgIGNvbnN0IEdseXBoQnVmZmVyJiBtX2dseXBoQnVmZmVyOwotICAgIGNvbnN0IFNpbXBs
ZUZvbnREYXRhKiBtX2ZvbnREYXRhOworICAgIGNvbnN0IEZvbnQqIG1fZm9udERhdGE7CiAgICAg
QWZmaW5lVHJhbnNmb3JtIG1fdHJhbnNsYXRpb247CiB9OwogCkBAIC0yODYsNyArMjg2LDcgQEAg
dm9pZCBDYWlyb0dseXBoVG9QYXRoVHJhbnNsYXRvcjo6YWR2YW5jZQogICAgICAgICArK21faW5k
ZXg7CiAgICAgICAgIGlmIChtX2luZGV4ID49IG1fZ2x5cGhCdWZmZXIuc2l6ZSgpKQogICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIG1fZm9udERhdGEgPSBtX2dseXBoQnVmZmVyLmZvbnREYXRh
QXQobV9pbmRleCk7CisgICAgICAgIG1fZm9udERhdGEgPSBtX2dseXBoQnVmZmVyLmZvbnRBdCht
X2luZGV4KTsKICAgICB9IHdoaWxlIChtX2ZvbnREYXRhLT5pc1NWR0ZvbnQoKSAmJiBtX2luZGV4
IDwgbV9nbHlwaEJ1ZmZlci5zaXplKCkpOwogfQogCkBAIC0zMDcsNyArMzA3LDcgQEAgRGFzaEFy
cmF5IEZvbnRDYXNjYWRlOjpkYXNoZXNGb3JJbnRlcnNlYwogICAgICAgICByZXR1cm4gRGFzaEFy
cmF5KCk7CiAKICAgICAvLyBGSVhNRTogSGFuZGxlIFNWRyArIG5vbi1TVkcgaW50ZXJsZWF2ZWQg
cnVucy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzc3OAotICAg
IGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSA9IGdseXBoQnVmZmVyLmZvbnREYXRhQXQo
MCk7CisgICAgY29uc3QgRm9udCogZm9udERhdGEgPSBnbHlwaEJ1ZmZlci5mb250QXQoMCk7CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPEdseXBoVG9QYXRoVHJhbnNsYXRvcj4gdHJhbnNsYXRvcjsKICAg
ICBib29sIGlzU1ZHID0gZmFsc2U7CiAgICAgRmxvYXRQb2ludCBvcmlnaW4gPSBGbG9hdFBvaW50
KHRleHRPcmlnaW4ueCgpICsgZGVsdGFYLCB0ZXh0T3JpZ2luLnkoKSk7CkBAIC0zMjYsNyArMzI2
LDcgQEAgRGFzaEFycmF5IEZvbnRDYXNjYWRlOjpkYXNoZXNGb3JJbnRlcnNlYwogICAgIGZvciAo
aW50IGluZGV4ID0gMDsgdHJhbnNsYXRvci0+Y29udGFpbnNNb3JlUGF0aHMoKTsgKytpbmRleCwg
dHJhbnNsYXRvci0+YWR2YW5jZSgpKSB7CiAgICAgICAgIGZsb2F0IGNlbnRlck9mTGluZSA9IGxp
bmVFeHRlbnRzLnkoKSArIChsaW5lRXh0ZW50cy5oZWlnaHQoKSAvIDIpOwogICAgICAgICBHbHlw
aEl0ZXJhdGlvblN0YXRlIGluZm8gPSBHbHlwaEl0ZXJhdGlvblN0YXRlKEZsb2F0UG9pbnQoKSwg
RmxvYXRQb2ludCgpLCBjZW50ZXJPZkxpbmUsIGxpbmVFeHRlbnRzLngoKSArIGxpbmVFeHRlbnRz
LndpZHRoKCksIGxpbmVFeHRlbnRzLngoKSk7Ci0gICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRh
KiBsb2NhbEZvbnREYXRhID0gZ2x5cGhCdWZmZXIuZm9udERhdGFBdChpbmRleCk7CisgICAgICAg
IGNvbnN0IEZvbnQqIGxvY2FsRm9udERhdGEgPSBnbHlwaEJ1ZmZlci5mb250QXQoaW5kZXgpOwog
ICAgICAgICBpZiAoIWxvY2FsRm9udERhdGEgfHwgKCFpc1NWRyAmJiBsb2NhbEZvbnREYXRhLT5p
c1NWR0ZvbnQoKSkgfHwgKGlzU1ZHICYmIGxvY2FsRm9udERhdGEgIT0gZm9udERhdGEpKSB7CiAg
ICAgICAgICAgICAvLyBUaGUgYWR2YW5jZXMgd2lsbCBnZXQgYWxsIG1lc3NlZCB1cCBpZiB3ZSBk
byBhbnl0aGluZyBvdGhlciB0aGFuIGJhaWwgaGVyZS4KICAgICAgICAgICAgIHJlc3VsdC5jbGVh
cigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENh
aXJvSGFyZmJ1enpORy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvSGFyZmJ1enpORy5jcHAJKHJldmlzaW9uIDE3ODg1NykK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyb0hhcmZi
dXp6TkcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMyArMjcsMTMgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogCisjaW5jbHVkZSAiRm9udC5oIgog
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhhcmZCdXp6U2hhcGVyLmgi
CiAjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRl
ICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCi0j
aW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKICNpbmNsdWRlIDxjYWlyby5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CkBAIC04Myw3ICs4Myw3IEBAIGJvb2wgRm9udENhc2NhZGU6OmNhbkV4cGFu
ZEFyb3VuZElkZW9ncmEKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWZsb2F0IEZvbnRDYXNjYWRl
OjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNv
bnN0IFNpbXBsZUZvbnREYXRhKj4qLCBHbHlwaE92ZXJmbG93KikgY29uc3QKK2Zsb2F0IEZvbnRD
YXNjYWRlOjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNo
U2V0PGNvbnN0IEZvbnQqPiosIEdseXBoT3ZlcmZsb3cqKSBjb25zdAogewogICAgIEhhcmZCdXp6
U2hhcGVyIHNoYXBlcih0aGlzLCBydW4pOwogICAgIGlmIChzaGFwZXIuc2hhcGUoKSkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENh
aXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgIkZsb2F0Q29udmVy
c2lvbi5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkZsb2F0Um91bmRlZFJl
Y3QuaCIKKyNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlQ2Fpcm8uaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiTm90SW1w
bGVtZW50ZWQuaCIKQEAgLTUxLDcgKzUyLDYgQEAKICNpbmNsdWRlICJQbGF0Zm9ybVBhdGhDYWly
by5oIgogI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCiAjaW5jbHVkZSAiU2hhZG93Qmx1ci5oIgot
I2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRy
aXguaCIKICNpbmNsdWRlIDxjYWlyby5oPgogI2luY2x1ZGUgPG1hdGguaD4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYXNjYWRlQ29jb2EubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENh
c2NhZGVDb2NvYS5tbQkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvRm9udENhc2NhZGVDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAt
MjcsMTEgKzI3LDExIEBACiAjaW1wb3J0ICJDb3JlR3JhcGhpY3NTUEkuaCIKICNpbXBvcnQgIkNv
cmVUZXh0U1BJLmgiCiAjaW1wb3J0ICJEYXNoQXJyYXkuaCIKKyNpbXBvcnQgIkZvbnQuaCIKICNp
bXBvcnQgIkdseXBoQnVmZmVyLmgiCiAjaW1wb3J0ICJHcmFwaGljc0NvbnRleHQuaCIKICNpbXBv
cnQgIkxheW91dFJlY3QuaCIKICNpbXBvcnQgIkxvZ2dpbmcuaCIKLSNpbXBvcnQgIlNpbXBsZUZv
bnREYXRhLmgiCiAjaW1wb3J0ICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCiAjaWYgVVNFKEFQ
UEtJVCkKICNpbXBvcnQgPEFwcEtpdC9BcHBLaXQuaD4KQEAgLTkxLDcgKzkxLDcgQEAgc3RhdGlj
IGlubGluZSBib29sIHNob3VsZFVzZUxldHRlcnByZXNzRQogI2VuZGlmCiB9CiAKLXN0YXRpYyB2
b2lkIHNob3dMZXR0ZXJwcmVzc2VkR2x5cGhzV2l0aEFkdmFuY2VzKGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgQ0dDb250ZXh0UmVmIGNvbnRleHQs
IGNvbnN0IENHR2x5cGgqIGdseXBocywgY29uc3QgQ0dTaXplKiBhZHZhbmNlcywgc2l6ZV90IGNv
dW50KQorc3RhdGljIHZvaWQgc2hvd0xldHRlcnByZXNzZWRHbHlwaHNXaXRoQWR2YW5jZXMoY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IEZvbnQqIGZvbnQsIENHQ29udGV4dFJlZiBjb250
ZXh0LCBjb25zdCBDR0dseXBoKiBnbHlwaHMsIGNvbnN0IENHU2l6ZSogYWR2YW5jZXMsIHNpemVf
dCBjb3VudCkKIHsKICNpZiBFTkFCTEUoTEVUVEVSUFJFU1MpCiAgICAgaWYgKCFjb3VudCkKQEAg
LTEzMSw3ICsxMzEsNyBAQCBzdGF0aWMgdm9pZCBzaG93TGV0dGVycHJlc3NlZEdseXBoc1dpdGhB
CiAjZW5kaWYKIH0KIAotc3RhdGljIHZvaWQgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhjb25zdCBG
bG9hdFBvaW50JiBwb2ludCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsIENHQ29udGV4dFJl
ZiBjb250ZXh0LCBjb25zdCBDR0dseXBoKiBnbHlwaHMsIGNvbnN0IENHU2l6ZSogYWR2YW5jZXMs
IHNpemVfdCBjb3VudCkKK3N0YXRpYyB2b2lkIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMoY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IEZvbnQqIGZvbnQsIENHQ29udGV4dFJlZiBjb250ZXh0
LCBjb25zdCBDR0dseXBoKiBnbHlwaHMsIGNvbnN0IENHU2l6ZSogYWR2YW5jZXMsIHNpemVfdCBj
b3VudCkKIHsKICAgICBpZiAoIWNvdW50KQogICAgICAgICByZXR1cm47CkBAIC0xOTcsNyArMTk3
LDcgQEAgc3RhdGljIHZvaWQgc2V0Q0dGb250UmVuZGVyaW5nTW9kZShDR0NvbgogfQogI2VuZGlm
CiAKLXZvaWQgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVm
ZmVyLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgYW5jaG9yUG9p
bnQpIGNvbnN0Cit2b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgY29uc3QgRm9udCogZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVy
LCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgYW5jaG9yUG9pbnQp
IGNvbnN0CiB7CiAgICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhID0gZm9u
dC0+cGxhdGZvcm1EYXRhKCk7CiAgICAgaWYgKCFwbGF0Zm9ybURhdGEuc2l6ZSgpKQpAQCAtNDY4
LDcgKzQ2OCw3IEBAIHB1YmxpYzoKICAgICAgICAgOiBtX2luZGV4KDApCiAgICAgICAgICwgbV90
ZXh0UnVuKHRleHRSdW4pCiAgICAgICAgICwgbV9nbHlwaEJ1ZmZlcihnbHlwaEJ1ZmZlcikKLSAg
ICAgICAgLCBtX2ZvbnREYXRhKGdseXBoQnVmZmVyLmZvbnREYXRhQXQobV9pbmRleCkpCisgICAg
ICAgICwgbV9mb250RGF0YShnbHlwaEJ1ZmZlci5mb250QXQobV9pbmRleCkpCiAgICAgICAgICwg
bV90cmFuc2xhdGlvbihDR0FmZmluZVRyYW5zZm9ybVNjYWxlKENHQWZmaW5lVHJhbnNmb3JtTWFr
ZVRyYW5zbGF0aW9uKHRleHRPcmlnaW4ueCgpLCB0ZXh0T3JpZ2luLnkoKSksIDEsIC0xKSkKICAg
ICB7CiAgICAgICAgIG1vdmVUb05leHRWYWxpZEdseXBoKCk7CkBAIC00ODcsNyArNDg3LDcgQEAg
cHJpdmF0ZToKICAgICBpbnQgbV9pbmRleDsKICAgICBjb25zdCBUZXh0UnVuJiBtX3RleHRSdW47
CiAgICAgY29uc3QgR2x5cGhCdWZmZXImIG1fZ2x5cGhCdWZmZXI7Ci0gICAgY29uc3QgU2ltcGxl
Rm9udERhdGEqIG1fZm9udERhdGE7CisgICAgY29uc3QgRm9udCogbV9mb250RGF0YTsKICAgICBD
R0FmZmluZVRyYW5zZm9ybSBtX3RyYW5zbGF0aW9uOwogfTsKIApAQCAtNTI0LDcgKzUyNCw3IEBA
IHZvaWQgTWFjR2x5cGhUb1BhdGhUcmFuc2xhdG9yOjphZHZhbmNlKCkKICAgICAgICAgKyttX2lu
ZGV4OwogICAgICAgICBpZiAobV9pbmRleCA+PSBtX2dseXBoQnVmZmVyLnNpemUoKSkKICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBtX2ZvbnREYXRhID0gbV9nbHlwaEJ1ZmZlci5mb250RGF0
YUF0KG1faW5kZXgpOworICAgICAgICBtX2ZvbnREYXRhID0gbV9nbHlwaEJ1ZmZlci5mb250QXQo
bV9pbmRleCk7CiAgICAgfSB3aGlsZSAobV9mb250RGF0YS0+aXNTVkdGb250KCkgJiYgbV9pbmRl
eCA8IG1fZ2x5cGhCdWZmZXIuc2l6ZSgpKTsKIH0KIApAQCAtNTQ1LDcgKzU0NSw3IEBAIERhc2hB
cnJheSBGb250Q2FzY2FkZTo6ZGFzaGVzRm9ySW50ZXJzZWMKICAgICAgICAgcmV0dXJuIERhc2hB
cnJheSgpOwogICAgIAogICAgIC8vIEZJWE1FOiBIYW5kbGUgU1ZHICsgbm9uLVNWRyBpbnRlcmxl
YXZlZCBydW5zLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzNzc4
Ci0gICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhID0gZ2x5cGhCdWZmZXIuZm9udERh
dGFBdCgwKTsKKyAgICBjb25zdCBGb250KiBmb250RGF0YSA9IGdseXBoQnVmZmVyLmZvbnRBdCgw
KTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8R2x5cGhUb1BhdGhUcmFuc2xhdG9yPiB0cmFuc2xhdG9y
OwogICAgIGJvb2wgaXNTVkcgPSBmYWxzZTsKICAgICBGbG9hdFBvaW50IG9yaWdpbiA9IEZsb2F0
UG9pbnQodGV4dE9yaWdpbi54KCkgKyBkZWx0YVgsIHRleHRPcmlnaW4ueSgpKTsKQEAgLTU2MSw4
ICs1NjEsOCBAQCBEYXNoQXJyYXkgRm9udENhc2NhZGU6OmRhc2hlc0ZvckludGVyc2VjCiAgICAg
RGFzaEFycmF5IHJlc3VsdDsKICAgICBmb3IgKGludCBpbmRleCA9IDA7IHRyYW5zbGF0b3ItPmNv
bnRhaW5zTW9yZVBhdGhzKCk7ICsraW5kZXgsIHRyYW5zbGF0b3ItPmFkdmFuY2UoKSkgewogICAg
ICAgICBHbHlwaEl0ZXJhdGlvblN0YXRlIGluZm8gPSBHbHlwaEl0ZXJhdGlvblN0YXRlKENHUG9p
bnRNYWtlKDAsIDApLCBDR1BvaW50TWFrZSgwLCAwKSwgbGluZUV4dGVudHMueSgpLCBsaW5lRXh0
ZW50cy55KCkgKyBsaW5lRXh0ZW50cy5oZWlnaHQoKSwgbGluZUV4dGVudHMueCgpICsgbGluZUV4
dGVudHMud2lkdGgoKSwgbGluZUV4dGVudHMueCgpKTsKLSAgICAgICAgY29uc3QgU2ltcGxlRm9u
dERhdGEqIGxvY2FsRm9udERhdGEgPSBnbHlwaEJ1ZmZlci5mb250RGF0YUF0KGluZGV4KTsKLSAg
ICAgICAgaWYgKCFsb2NhbEZvbnREYXRhIHx8ICghaXNTVkcgJiYgbG9jYWxGb250RGF0YS0+aXNT
VkdGb250KCkpIHx8IChpc1NWRyAmJiBsb2NhbEZvbnREYXRhICE9IGZvbnREYXRhKSkgeworICAg
ICAgICBjb25zdCBGb250KiBsb2NhbEZvbnQgPSBnbHlwaEJ1ZmZlci5mb250QXQoaW5kZXgpOwor
ICAgICAgICBpZiAoIWxvY2FsRm9udCB8fCAoIWlzU1ZHICYmIGxvY2FsRm9udC0+aXNTVkdGb250
KCkpIHx8IChpc1NWRyAmJiBsb2NhbEZvbnQgIT0gZm9udERhdGEpKSB7CiAgICAgICAgICAgICAv
LyBUaGUgYWR2YW5jZXMgd2lsbCBnZXQgYWxsIG1lc3NlZCB1cCBpZiB3ZSBkbyBhbnl0aGluZyBv
dGhlciB0aGFuIGJhaWwgaGVyZS4KICAgICAgICAgICAgIHJlc3VsdC5jbGVhcigpOwogICAgICAg
ICAgICAgYnJlYWs7CkBAIC01OTIsMTAgKzU5MiwxMCBAQCBEYXNoQXJyYXkgRm9udENhc2NhZGU6
OmRhc2hlc0ZvckludGVyc2VjCiB9CiAjZW5kaWYKIAotYm9vbCBGb250Q2FzY2FkZTo6cHJpbWFy
eUZvbnREYXRhSXNTeXN0ZW1Gb250KCkgY29uc3QKK2Jvb2wgRm9udENhc2NhZGU6OnByaW1hcnlG
b250SXNTeXN0ZW1Gb250KCkgY29uc3QKIHsKICNpZiBQTEFURk9STShJT1MpIHx8IF9fTUFDX09T
X1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPiAxMDkwCi0gICAgY29uc3QgYXV0byYgZm9udERhdGEg
PSBwcmltYXJ5Rm9udERhdGEoKTsKKyAgICBjb25zdCBhdXRvJiBmb250RGF0YSA9IHByaW1hcnlG
b250KCk7CiAgICAgcmV0dXJuICFmb250RGF0YS5pc1NWR0ZvbnQoKSAmJiBDVEZvbnREZXNjcmlw
dG9ySXNTeXN0ZW1VSUZvbnQoYWRvcHRDRihDVEZvbnRDb3B5Rm9udERlc2NyaXB0b3IoZm9udERh
dGEucGxhdGZvcm1EYXRhKCkuY3RGb250KCkpKS5nZXQoKSk7CiAjZWxzZQogICAgIC8vIFN5c3Rl
bSBmb250cyBhcmUgaGlkZGVuIGJ5IGhhdmluZyBhIG5hbWUgdGhhdCBiZWdpbnMgd2l0aCBhIHBl
cmlvZCwgc28gc2ltcGx5IHNlYXJjaApAQCAtNjcxLDcgKzY3MSw3IEBAIHZvaWQgRm9udENhc2Nh
ZGU6OmRyYXdFbXBoYXNpc01hcmtzRm9yQ28KICAgICBkcmF3RW1waGFzaXNNYXJrcyhjb250ZXh0
LCBydW4sIGdseXBoQnVmZmVyLCBtYXJrLCBGbG9hdFBvaW50KHBvaW50LngoKSArIGluaXRpYWxB
ZHZhbmNlLCBwb2ludC55KCkpKTsKIH0KIAotZmxvYXQgRm9udENhc2NhZGU6OmZsb2F0V2lkdGhG
b3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9u
dERhdGEqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29u
c3QKK2Zsb2F0IEZvbnRDYXNjYWRlOjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4
dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVy
ZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKIHsKICAgICBDb21wbGV4VGV4dENvbnRyb2xsZXIg
Y29udHJvbGxlcih0aGlzLCBydW4sIHRydWUsIGZhbGxiYWNrRm9udHMpOwogICAgIGlmIChnbHlw
aE92ZXJmbG93KSB7CkBAIC02ODksNyArNjg5LDcgQEAgaW50IEZvbnRDYXNjYWRlOjpvZmZzZXRG
b3JQb3NpdGlvbkZvckNvbQogICAgIHJldHVybiBjb250cm9sbGVyLm9mZnNldEZvclBvc2l0aW9u
KHgsIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKTsKIH0KIAotY29uc3QgU2ltcGxlRm9udERhdGEqIEZv
bnRDYXNjYWRlOjpmb250RGF0YUZvckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVD
aGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBGb250RGF0YVZhcmlhbnQgdmFyaWFudCkg
Y29uc3QKK2NvbnN0IEZvbnQqIEZvbnRDYXNjYWRlOjpmb250Rm9yQ29tYmluaW5nQ2hhcmFjdGVy
U2VxdWVuY2UoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIEZvbnRWYXJp
YW50IHZhcmlhbnQpIGNvbnN0CiB7CiAgICAgVUNoYXIzMiBiYXNlQ2hhcmFjdGVyOwogICAgIHNp
emVfdCBiYXNlQ2hhcmFjdGVyTGVuZ3RoID0gMDsKQEAgLTcwMSw1MSArNzAxLDUxIEBAIGNvbnN0
IFNpbXBsZUZvbnREYXRhKiBGb250Q2FzY2FkZTo6Zm9udEQKICAgICAgICAgcmV0dXJuIDA7CiAK
ICAgICBpZiAobGVuZ3RoID09IGJhc2VDaGFyYWN0ZXJMZW5ndGgpCi0gICAgICAgIHJldHVybiBi
YXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmZvbnREYXRhOworICAgICAgICByZXR1cm4gYmFzZUNoYXJh
Y3RlckdseXBoRGF0YS5mb250OwogCi0gICAgYm9vbCB0cmllZEJhc2VDaGFyYWN0ZXJGb250RGF0
YSA9IGZhbHNlOworICAgIGJvb2wgdHJpZWRCYXNlQ2hhcmFjdGVyRm9udCA9IGZhbHNlOwogCiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgIWZhbGxiYWNrUmFuZ2VzQXQoaSkuaXNOdWxsKCk7ICsr
aSkgewotICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogc2ltcGxlRm9udERhdGEgPSBmYWxs
YmFja1Jhbmdlc0F0KGkpLmZvbnREYXRhRm9yQ2hhcmFjdGVyKGJhc2VDaGFyYWN0ZXIpOwotICAg
ICAgICBpZiAoIXNpbXBsZUZvbnREYXRhKQorICAgICAgICBjb25zdCBGb250KiBmb250ID0gZmFs
bGJhY2tSYW5nZXNBdChpKS5mb250Rm9yQ2hhcmFjdGVyKGJhc2VDaGFyYWN0ZXIpOworICAgICAg
ICBpZiAoIWZvbnQpCiAgICAgICAgICAgICBjb250aW51ZTsKICNpZiBQTEFURk9STShJT1MpCi0g
ICAgICAgIGlmIChiYXNlQ2hhcmFjdGVyID49IDB4MDYwMCAmJiBiYXNlQ2hhcmFjdGVyIDw9IDB4
MDZmZiAmJiBzaW1wbGVGb250RGF0YS0+c2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKCkpCisgICAg
ICAgIGlmIChiYXNlQ2hhcmFjdGVyID49IDB4MDYwMCAmJiBiYXNlQ2hhcmFjdGVyIDw9IDB4MDZm
ZiAmJiBmb250LT5zaG91bGROb3RCZVVzZWRGb3JBcmFiaWMoKSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogI2VuZGlmCiAgICAgICAgIGlmICh2YXJpYW50ID09IE5vcm1hbFZhcmlhbnQpIHsKLSAg
ICAgICAgICAgIGlmIChzaW1wbGVGb250RGF0YS0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24o
KSA9PSBWZXJ0aWNhbCkgewotICAgICAgICAgICAgICAgIGlmIChpc0NKS0lkZW9ncmFwaE9yU3lt
Ym9sKGJhc2VDaGFyYWN0ZXIpICYmICFzaW1wbGVGb250RGF0YS0+aGFzVmVydGljYWxHbHlwaHMo
KSkgeworICAgICAgICAgICAgaWYgKGZvbnQtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkg
PT0gVmVydGljYWwpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNDSktJZGVvZ3JhcGhPclN5bWJv
bChiYXNlQ2hhcmFjdGVyKSAmJiAhZm9udC0+aGFzVmVydGljYWxHbHlwaHMoKSkgewogICAgICAg
ICAgICAgICAgICAgICB2YXJpYW50ID0gQnJva2VuSWRlb2dyYXBoVmFyaWFudDsKLSAgICAgICAg
ICAgICAgICAgICAgc2ltcGxlRm9udERhdGEgPSBzaW1wbGVGb250RGF0YS0+YnJva2VuSWRlb2dy
YXBoRm9udERhdGEoKS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgZm9udCA9IGZvbnQtPmJy
b2tlbklkZW9ncmFwaEZvbnQoKS5nZXQoKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1f
Zm9udERlc2NyaXB0aW9uLm5vbkNKS0dseXBoT3JpZW50YXRpb24oKSA9PSBOb25DSktHbHlwaE9y
aWVudGF0aW9uVmVydGljYWxSaWdodCkgewotICAgICAgICAgICAgICAgICAgICBTaW1wbGVGb250
RGF0YSogdmVydGljYWxSaWdodEZvbnREYXRhID0gc2ltcGxlRm9udERhdGEtPnZlcnRpY2FsUmln
aHRPcmllbnRhdGlvbkZvbnREYXRhKCkuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIEdseXBo
IHZlcnRpY2FsUmlnaHRHbHlwaCA9IHZlcnRpY2FsUmlnaHRGb250RGF0YS0+Z2x5cGhGb3JDaGFy
YWN0ZXIoYmFzZUNoYXJhY3Rlcik7CisgICAgICAgICAgICAgICAgICAgIEZvbnQqIHZlcnRpY2Fs
UmlnaHRGb250ID0gZm9udC0+dmVydGljYWxSaWdodE9yaWVudGF0aW9uRm9udCgpLmdldCgpOwor
ICAgICAgICAgICAgICAgICAgICBHbHlwaCB2ZXJ0aWNhbFJpZ2h0R2x5cGggPSB2ZXJ0aWNhbFJp
Z2h0Rm9udC0+Z2x5cGhGb3JDaGFyYWN0ZXIoYmFzZUNoYXJhY3Rlcik7CiAgICAgICAgICAgICAg
ICAgICAgIGlmICh2ZXJ0aWNhbFJpZ2h0R2x5cGggPT0gYmFzZUNoYXJhY3RlckdseXBoRGF0YS5n
bHlwaCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gdmVydGljYWxS
aWdodEZvbnREYXRhOworICAgICAgICAgICAgICAgICAgICAgICAgZm9udCA9IHZlcnRpY2FsUmln
aHRGb250OwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIFNp
bXBsZUZvbnREYXRhKiB1cHJpZ2h0Rm9udERhdGEgPSBzaW1wbGVGb250RGF0YS0+dXByaWdodE9y
aWVudGF0aW9uRm9udERhdGEoKS5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgR2x5cGggdXBy
aWdodEdseXBoID0gdXByaWdodEZvbnREYXRhLT5nbHlwaEZvckNoYXJhY3RlcihiYXNlQ2hhcmFj
dGVyKTsKKyAgICAgICAgICAgICAgICAgICAgRm9udCogdXByaWdodEZvbnQgPSBmb250LT51cHJp
Z2h0T3JpZW50YXRpb25Gb250KCkuZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgIEdseXBoIHVw
cmlnaHRHbHlwaCA9IHVwcmlnaHRGb250LT5nbHlwaEZvckNoYXJhY3RlcihiYXNlQ2hhcmFjdGVy
KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHVwcmlnaHRHbHlwaCAhPSBiYXNlQ2hhcmFjdGVy
R2x5cGhEYXRhLmdseXBoKQotICAgICAgICAgICAgICAgICAgICAgICAgc2ltcGxlRm9udERhdGEg
PSB1cHJpZ2h0Rm9udERhdGE7CisgICAgICAgICAgICAgICAgICAgICAgICBmb250ID0gdXByaWdo
dEZvbnQ7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgaWYgKGNvbnN0IFNpbXBsZUZvbnREYXRhKiB2YXJpYW50Rm9udERhdGEg
PSBzaW1wbGVGb250RGF0YS0+dmFyaWFudEZvbnREYXRhKG1fZm9udERlc2NyaXB0aW9uLCB2YXJp
YW50KS5nZXQoKSkKLSAgICAgICAgICAgICAgICBzaW1wbGVGb250RGF0YSA9IHZhcmlhbnRGb250
RGF0YTsKKyAgICAgICAgICAgIGlmIChjb25zdCBGb250KiB2YXJpYW50Rm9udCA9IGZvbnQtPnZh
cmlhbnRGb250KG1fZm9udERlc2NyaXB0aW9uLCB2YXJpYW50KS5nZXQoKSkKKyAgICAgICAgICAg
ICAgICBmb250ID0gdmFyaWFudEZvbnQ7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoc2ltcGxl
Rm9udERhdGEgPT0gYmFzZUNoYXJhY3RlckdseXBoRGF0YS5mb250RGF0YSkKLSAgICAgICAgICAg
IHRyaWVkQmFzZUNoYXJhY3RlckZvbnREYXRhID0gdHJ1ZTsKKyAgICAgICAgaWYgKGZvbnQgPT0g
YmFzZUNoYXJhY3RlckdseXBoRGF0YS5mb250KQorICAgICAgICAgICAgdHJpZWRCYXNlQ2hhcmFj
dGVyRm9udCA9IHRydWU7CiAKLSAgICAgICAgaWYgKHNpbXBsZUZvbnREYXRhLT5jYW5SZW5kZXJD
b21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjaGFyYWN0ZXJzLCBsZW5ndGgpKQotICAgICAgICAg
ICAgcmV0dXJuIHNpbXBsZUZvbnREYXRhOworICAgICAgICBpZiAoZm9udC0+Y2FuUmVuZGVyQ29t
YmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY2hhcmFjdGVycywgbGVuZ3RoKSkKKyAgICAgICAgICAg
IHJldHVybiBmb250OwogICAgIH0KIAotICAgIGlmICghdHJpZWRCYXNlQ2hhcmFjdGVyRm9udERh
dGEgJiYgYmFzZUNoYXJhY3RlckdseXBoRGF0YS5mb250RGF0YSAmJiBiYXNlQ2hhcmFjdGVyR2x5
cGhEYXRhLmZvbnREYXRhLT5jYW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjaGFy
YWN0ZXJzLCBsZW5ndGgpKQotICAgICAgICByZXR1cm4gYmFzZUNoYXJhY3RlckdseXBoRGF0YS5m
b250RGF0YTsKKyAgICBpZiAoIXRyaWVkQmFzZUNoYXJhY3RlckZvbnQgJiYgYmFzZUNoYXJhY3Rl
ckdseXBoRGF0YS5mb250ICYmIGJhc2VDaGFyYWN0ZXJHbHlwaERhdGEuZm9udC0+Y2FuUmVuZGVy
Q29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY2hhcmFjdGVycywgbGVuZ3RoKSkKKyAgICAgICAg
cmV0dXJuIGJhc2VDaGFyYWN0ZXJHbHlwaERhdGEuZm9udDsKIAotICAgIHJldHVybiBTaW1wbGVG
b250RGF0YTo6c3lzdGVtRmFsbGJhY2soKTsKKyAgICByZXR1cm4gRm9udDo6c3lzdGVtRmFsbGJh
Y2soKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJl
ZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcAkocmV2aXNp
b24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUv
Rm9udENhY2hlRnJlZVR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw5ICsyMiw5IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCiAKKyNpbmNsdWRlICJG
b250LmgiCiAjaW5jbHVkZSAiT3duUHRyQ2Fpcm8uaCIKICNpbmNsdWRlICJSZWZQdHJDYWlyby5o
IgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5jbHVkZSAiVVRGMTZVQ2hhcjMySXRl
cmF0b3IuaCIKICNpbmNsdWRlIDxjYWlyby1mdC5oPgogI2luY2x1ZGUgPGNhaXJvLmg+CkBAIC04
MCw3ICs4MCw3IEBAIEZjUGF0dGVybiogZmluZEJlc3RGb250R2l2ZW5GYWxsYmFja3MoY28KICAg
ICByZXR1cm4gRmNGb250U2V0TWF0Y2goMCwgc2V0cywgMSwgcGF0dGVybiwgJmZvbnRDb25maWdS
ZXN1bHQpOwogfQogCi1SZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6c3lzdGVtRmFs
bGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGNv
bnN0IFNpbXBsZUZvbnREYXRhKiBvcmlnaW5hbEZvbnREYXRhLCBib29sLCBjb25zdCBVQ2hhciog
Y2hhcmFjdGVycywgaW50IGxlbmd0aCkKK1JlZlB0cjxGb250PiBGb250Q2FjaGU6OnN5c3RlbUZh
bGxiYWNrRm9yQ2hhcmFjdGVycyhjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBj
b25zdCBGb250KiBvcmlnaW5hbEZvbnREYXRhLCBib29sLCBjb25zdCBVQ2hhciogY2hhcmFjdGVy
cywgaW50IGxlbmd0aCkKIHsKICAgICBSZWZQdHI8RmNQYXR0ZXJuPiBwYXR0ZXJuID0gYWRvcHRS
ZWYoY3JlYXRlRm9udENvbmZpZ1BhdHRlcm5Gb3JDaGFyYWN0ZXJzKGNoYXJhY3RlcnMsIGxlbmd0
aCkpOwogICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnREYXRhID0gb3JpZ2luYWxGb250
RGF0YS0+cGxhdGZvcm1EYXRhKCk7CkBAIC05OSw3ICs5OSw3IEBAIFJlZlB0cjxTaW1wbGVGb250
RGF0YT4gRm9udENhY2hlOjpzeXN0ZW0KICAgICByZXR1cm4gZm9udEZvclBsYXRmb3JtRGF0YShh
bHRlcm5hdGVGb250RGF0YSk7CiB9CiAKLVJlZjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjps
YXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0
aW9uKQorUmVmPEZvbnQ+IEZvbnRDYWNoZTo6bGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBG
b250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikKIHsKICAgICAvLyBXZSB3YW50IHRvIHJl
dHVybiBhIGZhbGxiYWNrIGZvbnQgaGVyZSwgb3RoZXJ3aXNlIHRoZSBsb2dpYyBwcmV2ZW50aW5n
IEZvbnRDb25maWcKICAgICAvLyBtYXRjaGVzIGZvciBub24tZmFsbGJhY2sgZm9udHMgbWlnaHQg
cmV0dXJuIDAuIFNlZSBpc0ZhbGxiYWNrRm9udEFsbG93ZWQuCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9HbHlwaFBhZ2VUcmVlTm9kZUZyZWVUeXBlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlw
ZS9HbHlwaFBhZ2VUcmVlTm9kZUZyZWVUeXBlLmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvR2x5cGhQYWdlVHJlZU5vZGVG
cmVlVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJHbHlwaFBhZ2UuaCIKIAotI2luY2x1ZGUgIlNpbXBsZUZvbnRE
YXRhLmgiCisjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIlVURjE2VUNoYXIzMkl0ZXJhdG9y
LmgiCiAjaW5jbHVkZSA8Y2Fpcm8tZnQuaD4KICNpbmNsdWRlIDxjYWlyby5oPgpAQCAtMzksNyAr
MzksNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wgR2x5cGhQYWdlOjpmaWxsKHVu
c2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBi
dWZmZXJMZW5ndGgsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSkKK2Jvb2wgR2x5cGhQ
YWdlOjpmaWxsKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVy
LCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IEZvbnQqIGZvbnREYXRhKQogewogICAgIGNh
aXJvX3NjYWxlZF9mb250X3QqIHNjYWxlZEZvbnQgPSBmb250RGF0YS0+cGxhdGZvcm1EYXRhKCku
c2NhbGVkRm9udCgpOwogICAgIEFTU0VSVChzY2FsZWRGb250KTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL1NpbXBsZUZvbnREYXRhRnJlZVR5cGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBl
L1NpbXBsZUZvbnREYXRhRnJlZVR5cGUuY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9TaW1wbGVGb250RGF0YUZyZWVUeXBl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogICovCiAKICNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgorI2luY2x1ZGUgIkZvbnQuaCIK
IAogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgpA
QCAtNTEsNyArNTEsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgU2ltcGxlRm9u
dERhdGE6OnBsYXRmb3JtSW5pdCgpCit2b2lkIEZvbnQ6OnBsYXRmb3JtSW5pdCgpCiB7CiAgICAg
aWYgKCFtX3BsYXRmb3JtRGF0YS5tX3NpemUpCiAgICAgICAgIHJldHVybjsKQEAgLTkzLDE3ICs5
MywxNyBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUluaXQoKQogICAgIG1fc3ludGhl
dGljQm9sZE9mZnNldCA9IG1fcGxhdGZvcm1EYXRhLnN5bnRoZXRpY0JvbGQoKSA/IDEuMGYgOiAw
LmY7CiB9CiAKLXZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpCit2
b2lkIEZvbnQ6OnBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpCiB7CiAgICAgbV9hdmdDaGFyV2lkdGgg
PSAwLmY7CiAgICAgbV9tYXhDaGFyV2lkdGggPSAwLmY7CiAgICAgaW5pdENoYXJXaWR0aHMoKTsK
IH0KIAotUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OnBsYXRmb3Jt
Q3JlYXRlU2NhbGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24sIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAorUGFzc1JlZlB0cjxGb250PiBGb250OjpwbGF0
Zm9ybUNyZWF0ZVNjYWxlZEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2Ny
aXB0aW9uLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3QKIHsKICAgICBBU1NFUlQobV9wbGF0Zm9y
bURhdGEuc2NhbGVkRm9udCgpKTsKLSAgICByZXR1cm4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZShG
b250UGxhdGZvcm1EYXRhKGNhaXJvX3NjYWxlZF9mb250X2dldF9mb250X2ZhY2UobV9wbGF0Zm9y
bURhdGEuc2NhbGVkRm9udCgpKSwKKyAgICByZXR1cm4gRm9udDo6Y3JlYXRlKEZvbnRQbGF0Zm9y
bURhdGEoY2Fpcm9fc2NhbGVkX2ZvbnRfZ2V0X2ZvbnRfZmFjZShtX3BsYXRmb3JtRGF0YS5zY2Fs
ZWRGb250KCkpLAogICAgICAgICBzY2FsZUZhY3RvciAqIGZvbnREZXNjcmlwdGlvbi5jb21wdXRl
ZFNpemUoKSwKICAgICAgICAgbV9wbGF0Zm9ybURhdGEuc3ludGhldGljQm9sZCgpLAogICAgICAg
ICBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNPYmxpcXVlKCksCkBAIC0xMTEsMTIgKzExMSwxMiBA
QCBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0CiAgICAgICAgIGlzQ3Vz
dG9tRm9udCgpLCBmYWxzZSk7CiB9CiAKLXZvaWQgU2ltcGxlRm9udERhdGE6OmRldGVybWluZVBp
dGNoKCkKK3ZvaWQgRm9udDo6ZGV0ZXJtaW5lUGl0Y2goKQogewogICAgIG1fdHJlYXRBc0ZpeGVk
UGl0Y2ggPSBtX3BsYXRmb3JtRGF0YS5pc0ZpeGVkUGl0Y2goKTsKIH0KIAotRmxvYXRSZWN0IFNp
bXBsZUZvbnREYXRhOjpwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAor
RmxvYXRSZWN0IEZvbnQ6OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0
CiB7CiAgICAgaWYgKCFtX3BsYXRmb3JtRGF0YS5zaXplKCkpCiAgICAgICAgIHJldHVybiBGbG9h
dFJlY3QoKTsKQEAgLTEzMSw3ICsxMzEsNyBAQCBGbG9hdFJlY3QgU2ltcGxlRm9udERhdGE6OnBs
YXRmb3JtQm91bmRzCiAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwogfQogCi1mbG9hdCBTaW1wbGVG
b250RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAorZmxvYXQg
Rm9udDo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAogewogICAgIGlm
ICghbV9wbGF0Zm9ybURhdGEuc2l6ZSgpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTE0Nyw3ICsx
NDcsNyBAQCBmbG9hdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdsCiB9CiAKICNp
ZiBVU0UoSEFSRkJVWlopCi1ib29sIFNpbXBsZUZvbnREYXRhOjpjYW5SZW5kZXJDb21iaW5pbmdD
aGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkg
Y29uc3QKK2Jvb2wgRm9udDo6Y2FuUmVuZGVyQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpIGNvbnN0CiB7CiAgICAgaWYgKCFt
X2NvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlU3VwcG9ydCkKICAgICAgICAgbV9jb21iaW5pbmdD
aGFyYWN0ZXJTZXF1ZW5jZVN1cHBvcnQgPSBzdGQ6Om1ha2VfdW5pcXVlPEhhc2hNYXA8U3RyaW5n
LCBib29sPj4oKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZi
dXp6L0hhcmZCdXp6RmFjZUNhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6ekZhY2VDYWlyby5jcHAJKHJldmlzaW9u
IDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hh
cmZCdXp6RmFjZUNhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTAgKzMyLDEwIEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSGFyZkJ1enpGYWNlLmgiCiAKKyNpbmNsdWRl
ICJGb250LmgiCiAjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgogI2luY2x1ZGUgIkdseXBo
QnVmZmVyLmgiCiAjaW5jbHVkZSAiSGFyZkJ1enpTaGFwZXIuaCIKLSNpbmNsdWRlICJTaW1wbGVG
b250RGF0YS5oIgogI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgogI2luY2x1ZGUgPGNhaXJvLWZ0
Lmg+CiAjaW5jbHVkZSA8Y2Fpcm8uaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6RmFjZUNvcmVUZXh0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6ekZhY2VDb3Jl
VGV4dC5jcHAJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6RmFjZUNvcmVUZXh0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzEsOSArMzEsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkhhcmZCdXp6
RmFjZS5oIgogCisjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEu
aCIKICNpbmNsdWRlICJIYXJmQnV6elNoYXBlci5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRh
LmgiCiAjaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+
CiAjaW5jbHVkZSA8aGIuaD4KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2hhcGVyLmNwcAkocmV2aXNp
b24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enov
SGFyZkJ1enpTaGFwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3IEBAIHN0YXRp
YyBpbmxpbmUgZmxvYXQgaGFyZkJ1enpQb3NpdGlvblRvRmwKICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8ZmxvYXQ+KHZhbHVlKSAvICgxIDw8IDE2KTsKIH0KIAotSGFyZkJ1enpTaGFwZXI6OkhhcmZC
dXp6UnVuOjpIYXJmQnV6elJ1bihjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsIHVuc2ln
bmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIG51bUNoYXJhY3RlcnMsIFRleHREaXJlY3Rpb24gZGly
ZWN0aW9uLCBoYl9zY3JpcHRfdCBzY3JpcHQpCitIYXJmQnV6elNoYXBlcjo6SGFyZkJ1enpSdW46
OkhhcmZCdXp6UnVuKGNvbnN0IEZvbnQqIGZvbnREYXRhLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1
bnNpZ25lZCBudW1DaGFyYWN0ZXJzLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgaGJfc2NyaXB0
X3Qgc2NyaXB0KQogICAgIDogbV9mb250RGF0YShmb250RGF0YSkKICAgICAsIG1fc3RhcnRJbmRl
eChzdGFydEluZGV4KQogICAgICwgbV9udW1DaGFyYWN0ZXJzKG51bUNoYXJhY3RlcnMpCkBAIC00
MDEsNyArNDAxLDcgQEAgYm9vbCBIYXJmQnV6elNoYXBlcjo6Y29sbGVjdEhhcmZCdXp6UnVucwog
ICAgIGlmICghaXRlcmF0b3IuY29uc3VtZShjaGFyYWN0ZXIsIGNsdXN0ZXJMZW5ndGgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBjb25zdCBTaW1wbGVGb250RGF0YSogbmV4dEZvbnRE
YXRhID0gbV9mb250LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyLCBmYWxzZSkuZm9u
dERhdGE7CisgICAgY29uc3QgRm9udCogbmV4dEZvbnREYXRhID0gbV9mb250LT5nbHlwaERhdGFG
b3JDaGFyYWN0ZXIoY2hhcmFjdGVyLCBmYWxzZSkuZm9udDsKICAgICBVRXJyb3JDb2RlIGVycm9y
Q29kZSA9IFVfWkVST19FUlJPUjsKICAgICBVU2NyaXB0Q29kZSBuZXh0U2NyaXB0ID0gdXNjcmlw
dF9nZXRTY3JpcHQoY2hhcmFjdGVyLCAmZXJyb3JDb2RlKTsKICAgICBpZiAoVV9GQUlMVVJFKGVy
cm9yQ29kZSkpCkBAIC00MDksNyArNDA5LDcgQEAgYm9vbCBIYXJmQnV6elNoYXBlcjo6Y29sbGVj
dEhhcmZCdXp6UnVucwogCiAgICAgZG8gewogICAgICAgICBjb25zdCBVQ2hhciogY3VycmVudENo
YXJhY3RlclBvc2l0aW9uID0gaXRlcmF0b3IuY2hhcmFjdGVycygpOwotICAgICAgICBjb25zdCBT
aW1wbGVGb250RGF0YSogY3VycmVudEZvbnREYXRhID0gbmV4dEZvbnREYXRhOworICAgICAgICBj
b25zdCBGb250KiBjdXJyZW50Rm9udERhdGEgPSBuZXh0Rm9udERhdGE7CiAgICAgICAgIGlmICgh
Y3VycmVudEZvbnREYXRhKQogICAgICAgICAgICAgY3VycmVudEZvbnREYXRhID0gJm1fZm9udC0+
cHJpbWFyeUZvbnREYXRhKCk7CiAgICAgICAgIFVTY3JpcHRDb2RlIGN1cnJlbnRTY3JpcHQgPSBu
ZXh0U2NyaXB0OwpAQCAtNDY3LDcgKzQ2Nyw3IEBAIGJvb2wgSGFyZkJ1enpTaGFwZXI6OnNoYXBl
SGFyZkJ1enpSdW5zKGIKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9oYXJmQnV6elJ1
bnMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgdW5zaWduZWQgcnVuSW5kZXggPSBtX3J1bi5ydGwo
KSA/IG1faGFyZkJ1enpSdW5zLnNpemUoKSAtIGkgLSAxIDogaTsKICAgICAgICAgSGFyZkJ1enpS
dW4qIGN1cnJlbnRSdW4gPSBtX2hhcmZCdXp6UnVuc1tydW5JbmRleF0uZ2V0KCk7Ci0gICAgICAg
IGNvbnN0IFNpbXBsZUZvbnREYXRhKiBjdXJyZW50Rm9udERhdGEgPSBjdXJyZW50UnVuLT5mb250
RGF0YSgpOworICAgICAgICBjb25zdCBGb250KiBjdXJyZW50Rm9udERhdGEgPSBjdXJyZW50UnVu
LT5mb250RGF0YSgpOwogICAgICAgICBpZiAoY3VycmVudEZvbnREYXRhLT5pc1NWR0ZvbnQoKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtNTE0LDcgKzUxNCw3IEBAIGJvb2wgSGFy
ZkJ1enpTaGFwZXI6OnNoYXBlSGFyZkJ1enpSdW5zKGIKIAogdm9pZCBIYXJmQnV6elNoYXBlcjo6
c2V0R2x5cGhQb3NpdGlvbnNGb3JIYXJmQnV6elJ1bihIYXJmQnV6elJ1biogY3VycmVudFJ1biwg
aGJfYnVmZmVyX3QqIGhhcmZCdXp6QnVmZmVyKQogewotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRh
KiBjdXJyZW50Rm9udERhdGEgPSBjdXJyZW50UnVuLT5mb250RGF0YSgpOworICAgIGNvbnN0IEZv
bnQqIGN1cnJlbnRGb250RGF0YSA9IGN1cnJlbnRSdW4tPmZvbnREYXRhKCk7CiAgICAgaGJfZ2x5
cGhfaW5mb190KiBnbHlwaEluZm9zID0gaGJfYnVmZmVyX2dldF9nbHlwaF9pbmZvcyhoYXJmQnV6
ekJ1ZmZlciwgMCk7CiAgICAgaGJfZ2x5cGhfcG9zaXRpb25fdCogZ2x5cGhQb3NpdGlvbnMgPSBo
Yl9idWZmZXJfZ2V0X2dseXBoX3Bvc2l0aW9ucyhoYXJmQnV6ekJ1ZmZlciwgMCk7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2hhcGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1
enovSGFyZkJ1enpTaGFwZXIuaAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtNDQsOCArNDQsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEZvbnQ7
CiBjbGFzcyBGb250Q2FzY2FkZTsKLWNsYXNzIFNpbXBsZUZvbnREYXRhOwogCiBjbGFzcyBIYXJm
QnV6elNoYXBlciB7CiBwdWJsaWM6CkBAIC02Niw3ICs2Niw3IEBAIHB1YmxpYzoKIHByaXZhdGU6
CiAgICAgY2xhc3MgSGFyZkJ1enpSdW4gewogICAgIHB1YmxpYzoKLSAgICAgICAgSGFyZkJ1enpS
dW4oY29uc3QgU2ltcGxlRm9udERhdGEqLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBu
dW1DaGFyYWN0ZXJzLCBUZXh0RGlyZWN0aW9uLCBoYl9zY3JpcHRfdCk7CisgICAgICAgIEhhcmZC
dXp6UnVuKGNvbnN0IEZvbnQqLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBudW1DaGFy
YWN0ZXJzLCBUZXh0RGlyZWN0aW9uLCBoYl9zY3JpcHRfdCk7CiAKICAgICAgICAgdm9pZCBhcHBs
eVNoYXBlUmVzdWx0KGhiX2J1ZmZlcl90Kik7CiAgICAgICAgIHZvaWQgc2V0R2x5cGhBbmRQb3Np
dGlvbnModW5zaWduZWQgaW5kZXgsIHVpbnQxNl90IGdseXBoSWQsIGZsb2F0IGFkdmFuY2UsIGZs
b2F0IG9mZnNldFgsIGZsb2F0IG9mZnNldFkpOwpAQCAtNzUsNyArNzUsNyBAQCBwcml2YXRlOgog
ICAgICAgICBpbnQgY2hhcmFjdGVySW5kZXhGb3JYUG9zaXRpb24oZmxvYXQgdGFyZ2V0WCk7CiAg
ICAgICAgIGZsb2F0IHhQb3NpdGlvbkZvck9mZnNldCh1bnNpZ25lZCBvZmZzZXQpOwogCi0gICAg
ICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSgpIHsgcmV0dXJuIG1fZm9udERhdGE7
IH0KKyAgICAgICAgY29uc3QgRm9udCogZm9udERhdGEoKSB7IHJldHVybiBtX2ZvbnREYXRhOyB9
CiAgICAgICAgIHVuc2lnbmVkIHN0YXJ0SW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0SW5k
ZXg7IH0KICAgICAgICAgdW5zaWduZWQgbnVtQ2hhcmFjdGVycygpIGNvbnN0IHsgcmV0dXJuIG1f
bnVtQ2hhcmFjdGVyczsgfQogICAgICAgICB1bnNpZ25lZCBudW1HbHlwaHMoKSBjb25zdCB7IHJl
dHVybiBtX251bUdseXBoczsgfQpAQCAtODgsNyArODgsNyBAQCBwcml2YXRlOgogICAgICAgICBo
Yl9zY3JpcHRfdCBzY3JpcHQoKSB7IHJldHVybiBtX3NjcmlwdDsgfQogCiAgICAgcHJpdmF0ZToK
LSAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIG1fZm9udERhdGE7CisgICAgICAgIGNvbnN0
IEZvbnQqIG1fZm9udERhdGE7CiAgICAgICAgIHVuc2lnbmVkIG1fc3RhcnRJbmRleDsKICAgICAg
ICAgc2l6ZV90IG1fbnVtQ2hhcmFjdGVyczsKICAgICAgICAgdW5zaWduZWQgbV9udW1HbHlwaHM7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvRm9udENhY2hlSU9T
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9G
b250Q2FjaGVJT1MubW0JKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2lvcy9Gb250Q2FjaGVJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTczLDcg
KzczLDcgQEAgc3RhdGljIENGQ2hhcmFjdGVyU2V0UmVmIHBob25lRmFsbGJhY2tDaAogICAgIHJl
dHVybiBjaGFyYWN0ZXJTZXQ7CiB9CiAKLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRD
YWNoZTo6Z2V0U3lzdGVtRm9udEZhbGxiYWNrRm9yQ2hhcmFjdGVycyhjb25zdCBGb250RGVzY3Jp
cHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBTaW1wbGVGb250RGF0YSogb3JpZ2luYWxGb250RGF0
YSwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCitQYXNzUmVmUHRyPEZvbnQ+
IEZvbnRDYWNoZTo6Z2V0U3lzdGVtRm9udEZhbGxiYWNrRm9yQ2hhcmFjdGVycyhjb25zdCBGb250
RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBGb250KiBvcmlnaW5hbEZvbnREYXRhLCBj
b25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKIHsKICAgICBjb25zdCBGb250UGxh
dGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEgPSBvcmlnaW5hbEZvbnREYXRhLT5wbGF0Zm9ybURhdGEo
KTsKICAgICBDVEZvbnRSZWYgY3RGb250ID0gcGxhdGZvcm1EYXRhLmZvbnQoKTsKQEAgLTE5NCw3
ICsxOTQsNyBAQCBzdGF0aWMgTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQgbGFuZ3VhZ2VTcGVjCiAgICAg
cmV0dXJuIExhbmd1YWdlU3BlY2lmaWNGb250OjpOb25lOwogfQogCi1SZWZQdHI8U2ltcGxlRm9u
dERhdGE+IEZvbnRDYWNoZTo6c3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBvcmlnaW5hbEZv
bnREYXRhLCBib29sLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKK1JlZlB0
cjxGb250PiBGb250Q2FjaGU6OnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhjb25zdCBGb250
RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBGb250KiBvcmlnaW5hbEZvbnREYXRhLCBi
b29sLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKIHsKICAgICAvLyBVbmxp
a2UgT1MgWCwgb3VyIGZhbGxiYWNrIGZvbnQgb24gaVBob25lIGlzIEFyaWFsIFVuaWNvZGUsIHdo
aWNoIGRvZXNuJ3QgaGF2ZSBzb21lIGFwcGxlLXNwZWNpZmljIGdseXBocyBsaWtlIEY4RkYuCiAg
ICAgLy8gRmFsbCBiYWNrIHRvIHRoZSBBcHBsZSBGYWxsYmFjayBmb250IGluIHRoaXMgY2FzZS4K
QEAgLTIyMCw3ICsyMjAsNyBAQCBSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6c3lz
dGVtCiAgICAgaWYgKGxlbmd0aCA+IDApCiAgICAgICAgIGxhbmd1YWdlU3BlY2lmaWNGb250ID0g
bGFuZ3VhZ2VTcGVjaWZpY0ZhbGxiYWNrRm9udChjKTsKIAotICAgIFJlZlB0cjxTaW1wbGVGb250
RGF0YT4gc2ltcGxlRm9udERhdGE7CisgICAgUmVmUHRyPEZvbnQ+IGZvbnQ7CiAKICAgICBzd2l0
Y2ggKGxhbmd1YWdlU3BlY2lmaWNGb250KSB7CiAgICAgY2FzZSBMYW5ndWFnZVNwZWNpZmljRm9u
dDo6Q2hpbmVzZUphcGFuZXNlOiB7CkBAIC0yOTgsNDMgKzI5OCw0MyBAQCBSZWZQdHI8U2ltcGxl
Rm9udERhdGE+IEZvbnRDYWNoZTo6c3lzdGVtCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAot
ICAgICAgICBzaW1wbGVGb250RGF0YSA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGlzRm9u
dFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gKmNqa0JvbGRbcHJlZmVycmVkQ0pL
Rm9udF0gOiAqY2prUGxhaW5bcHJlZmVycmVkQ0pLRm9udF0sIGZhbHNlKTsKKyAgICAgICAgZm9u
dCA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRp
b24ud2VpZ2h0KCkpID8gKmNqa0JvbGRbcHJlZmVycmVkQ0pLRm9udF0gOiAqY2prUGxhaW5bcHJl
ZmVycmVkQ0pLRm9udF0sIGZhbHNlKTsKICAgICAgICAgYm9vbCB1c2VTZWNvbmRhcnlGb250ID0g
dHJ1ZTsKLSAgICAgICAgaWYgKHNpbXBsZUZvbnREYXRhKSB7CisgICAgICAgIGlmIChmb250KSB7
CiAgICAgICAgICAgICBDR0dseXBoIGdseXBoc1syXTsKICAgICAgICAgICAgIC8vIENHRm9udEdl
dEdseXBoc0ZvclVuaWNoYXJzIHRha2VzIFVURi0xNiBidWZmZXIuIFNob3VsZCBvbmx5IGJlIDEg
Y29kZXBvaW50IGJ1dCBzaW5jZSB3ZSBtYXkgcGFzcyBpbiB0d28gVVRGLTE2IGNoYXJhY3RlcnMs
CiAgICAgICAgICAgICAvLyBtYWtlIHJvb20gZm9yIDIgZ2x5cGhzIGp1c3QgdG8gYmUgc2FmZS4K
LSAgICAgICAgICAgIENHRm9udEdldEdseXBoc0ZvclVuaWNoYXJzKHNpbXBsZUZvbnREYXRhLT5w
bGF0Zm9ybURhdGEoKS5jZ0ZvbnQoKSwgY2hhcmFjdGVycywgZ2x5cGhzLCBsZW5ndGgpOworICAg
ICAgICAgICAgQ0dGb250R2V0R2x5cGhzRm9yVW5pY2hhcnMoZm9udC0+cGxhdGZvcm1EYXRhKCku
Y2dGb250KCksIGNoYXJhY3RlcnMsIGdseXBocywgbGVuZ3RoKTsKIAogICAgICAgICAgICAgdXNl
U2Vjb25kYXJ5Rm9udCA9IChnbHlwaHNbMF0gPT0gMCk7CiAgICAgICAgIH0KIAogICAgICAgICBp
ZiAodXNlU2Vjb25kYXJ5Rm9udCkKLSAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gZm9udEZv
ckZhbWlseShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQo
KSkgPyAqY2prQm9sZFtzZWNvbmRhcnlDSktGb250XSA6ICpjamtQbGFpbltzZWNvbmRhcnlDSktG
b250XSwgZmFsc2UpOworICAgICAgICAgICAgZm9udCA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRp
b24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gKmNqa0JvbGRbc2Vj
b25kYXJ5Q0pLRm9udF0gOiAqY2prUGxhaW5bc2Vjb25kYXJ5Q0pLRm9udF0sIGZhbHNlKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6OktvcmVh
bjogewogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBrb3JlYW5Q
bGFpbigiQXBwbGVTREdvdGhpY05lby1NZWRpdW0iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZy
b21MaXRlcmFsKTsKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4g
a29yZWFuQm9sZCgiQXBwbGVTREdvdGhpY05lby1Cb2xkIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1
Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgICAgIHNpbXBsZUZvbnREYXRhID0gZm9udEZvckZhbWlseShk
ZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBrb3Jl
YW5Cb2xkIDoga29yZWFuUGxhaW4sIGZhbHNlKTsKKyAgICAgICAgZm9udCA9IGZvbnRGb3JGYW1p
bHkoZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8g
a29yZWFuQm9sZCA6IGtvcmVhblBsYWluLCBmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
ICAgICBjYXNlIExhbmd1YWdlU3BlY2lmaWNGb250OjpDeXJpbGxpYzogewogICAgICAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBjeXJpbGxpY1BsYWluKCJIZWx2ZXRpY2FO
ZXVlIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CiAgICAgICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGN5cmlsbGljQm9sZCgiSGVsdmV0aWNhTmV1
ZS1Cb2xkIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgICAgIHNp
bXBsZUZvbnREYXRhID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9s
ZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBjeXJpbGxpY0JvbGQgOiBjeXJpbGxpY1BsYWluLCBm
YWxzZSk7CisgICAgICAgIGZvbnQgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBpc0ZvbnRX
ZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/IGN5cmlsbGljQm9sZCA6IGN5cmlsbGlj
UGxhaW4sIGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgTGFuZ3VhZ2VT
cGVjaWZpY0ZvbnQ6OkFyYWJpYzogewogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRv
bWljU3RyaW5nPiBhcmFiaWNQbGFpbigiR2VlemFQcm8iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKTsKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmlu
Zz4gYXJhYmljQm9sZCgiR2VlemFQcm8tQm9sZCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpOwotICAgICAgICBzaW1wbGVGb250RGF0YSA9IGZvbnRGb3JGYW1pbHkoZGVzY3Jp
cHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gYXJhYmljQm9s
ZCA6IGFyYWJpY1BsYWluLCBmYWxzZSk7CisgICAgICAgIGZvbnQgPSBmb250Rm9yRmFtaWx5KGRl
c2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/IGFyYWJp
Y0JvbGQgOiBhcmFiaWNQbGFpbiwgZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
Y2FzZSBMYW5ndWFnZVNwZWNpZmljRm9udDo6SGVicmV3OiB7CiAgICAgICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGhlYnJld1BsYWluKCJBcmlhbEhlYnJldyIsIEF0b21p
Y1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8QXRvbWljU3RyaW5nPiBoZWJyZXdCb2xkKCJBcmlhbEhlYnJldy1Cb2xkIiwgQXRvbWlj
U3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgICAgIHNpbXBsZUZvbnREYXRhID0g
Zm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53
ZWlnaHQoKSkgPyBoZWJyZXdCb2xkIDogaGVicmV3UGxhaW4sIGZhbHNlKTsKKyAgICAgICAgZm9u
dCA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRp
b24ud2VpZ2h0KCkpID8gaGVicmV3Qm9sZCA6IGhlYnJld1BsYWluLCBmYWxzZSk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICBjYXNlIExhbmd1YWdlU3BlY2lmaWNGb250OjpJbmRpYzogewpA
QCAtMzkwLDM2ICszOTAsMzYgQEAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OnN5
c3RlbQogICAgICAgICBpZiAoaW5kaWNQYWdlT3JkZXJJbmRleCA8IChzaXplb2YoaW5kaWNVbmlj
b2RlUGFnZUZvbnRzKSAvIHNpemVvZihBdG9taWNTdHJpbmcqKSkpIHsKICAgICAgICAgICAgIEF0
b21pY1N0cmluZyogaW5kaWNGb250U3RyaW5nID0gaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlv
bi53ZWlnaHQoKSkgPyBpbmRpY1VuaWNvZGVQYWdlRm9udHNCb2xkW2luZGljUGFnZU9yZGVySW5k
ZXhdIDogaW5kaWNVbmljb2RlUGFnZUZvbnRzW2luZGljUGFnZU9yZGVySW5kZXhdOwogICAgICAg
ICAgICAgaWYgKGluZGljRm9udFN0cmluZykKLSAgICAgICAgICAgICAgICBzaW1wbGVGb250RGF0
YSA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sICppbmRpY0ZvbnRTdHJpbmcsIGZhbHNlKTsK
KyAgICAgICAgICAgICAgICBmb250ID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgKmluZGlj
Rm9udFN0cmluZywgZmFsc2UpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAg
ICBjYXNlIExhbmd1YWdlU3BlY2lmaWNGb250OjpUaGFpOiB7CiAgICAgICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHRoYWlQbGFpbigiVGhvbmJ1cmkiLCBBdG9taWNTdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PEF0b21pY1N0cmluZz4gdGhhaUJvbGQoIlRob25idXJpLUJvbGQiLCBBdG9taWNTdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAgc2ltcGxlRm9udERhdGEgPSBmb250Rm9yRmFt
aWx5KGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/
IHRoYWlCb2xkIDogdGhhaVBsYWluLCBmYWxzZSk7CisgICAgICAgIGZvbnQgPSBmb250Rm9yRmFt
aWx5KGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/
IHRoYWlCb2xkIDogdGhhaVBsYWluLCBmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAg
ICBjYXNlIExhbmd1YWdlU3BlY2lmaWNGb250OjpUaWJldGFuOiB7CiAgICAgICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHRpYmV0YW5QbGFpbigiS2FpbGFzYSIsIEF0b21p
Y1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8QXRvbWljU3RyaW5nPiB0aWJldGFuQm9sZCgiS2FpbGFzYS1Cb2xkIiwgQXRvbWljU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgICAgIHNpbXBsZUZvbnREYXRhID0gZm9u
dEZvckZhbWlseShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWln
aHQoKSkgPyB0aWJldGFuQm9sZCA6IHRpYmV0YW5QbGFpbiwgZmFsc2UpOworICAgICAgICBmb250
ID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlv
bi53ZWlnaHQoKSkgPyB0aWJldGFuQm9sZCA6IHRpYmV0YW5QbGFpbiwgZmFsc2UpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgY2FzZSBMYW5ndWFnZVNwZWNpZmljRm9udDo6Q2FuYWRpYW5B
Ym9yaWdpbmFsU3lsbGFiaWM6IHsKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21p
Y1N0cmluZz4gY2FzUGxhaW4oIkV1cGhlbWlhVUNBUyIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpOwogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5n
PiBjYXNCb2xkKCJFdXBoZW1pYVVDQVMtQm9sZCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpOwotICAgICAgICBzaW1wbGVGb250RGF0YSA9IGZvbnRGb3JGYW1pbHkoZGVzY3Jp
cHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gY2FzQm9sZCA6
IGNhc1BsYWluLCBmYWxzZSk7CisgICAgICAgIGZvbnQgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0
aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/IGNhc0JvbGQgOiBj
YXNQbGFpbiwgZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBMYW5ndWFn
ZVNwZWNpZmljRm9udDo6S2htZXI6IHsKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0
b21pY1N0cmluZz4ga2htZXIoIktobWVyU2FuZ2FtTU4iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKTsKLSAgICAgICAgc2ltcGxlRm9udERhdGEgPSBmb250Rm9yRmFtaWx5KGRl
c2NyaXB0aW9uLCBraG1lciwgZmFsc2UpOworICAgICAgICBmb250ID0gZm9udEZvckZhbWlseShk
ZXNjcmlwdGlvbiwga2htZXIsIGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNh
c2UgTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6OkxhbzogewogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8QXRvbWljU3RyaW5nPiBsYW8oIkxhb1NhbmdhbU1OIiwgQXRvbWljU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgICAgIHNpbXBsZUZvbnREYXRhID0gZm9udEZvckZhbWls
eShkZXNjcmlwdGlvbiwgbGFvLCBmYWxzZSk7CisgICAgICAgIGZvbnQgPSBmb250Rm9yRmFtaWx5
KGRlc2NyaXB0aW9uLCBsYW8sIGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGRl
ZmF1bHQ6IHsKQEAgLTQzMCwyNyArNDMwLDI3IEBAIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9u
dENhY2hlOjpzeXN0ZW0KICAgICAgICAgICAgICAgICB1c2VFbW9qaUZvbnQgPSBDRkNoYXJhY3Rl
clNldElzTG9uZ0NoYXJhY3Rlck1lbWJlcihhcHBsZUNvbG9yRW1vamlDaGFyYWN0ZXJTZXQoKSwg
Yyk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHVzZUVtb2ppRm9udCkKLSAgICAgICAgICAgIHNp
bXBsZUZvbnREYXRhID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgYXBwbGVDb2xvckVtb2pp
LCBmYWxzZSk7CisgICAgICAgICAgICBmb250ID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwg
YXBwbGVDb2xvckVtb2ppLCBmYWxzZSk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgUmV0
YWluUHRyPENURm9udFJlZj4gZmFsbGJhY2tGb250ID0gYWRvcHRDRihDVEZvbnRDcmVhdGVGb3JD
aGFyYWN0ZXJzKG9yaWdpbmFsRm9udERhdGEtPmdldENURm9udCgpLCBjaGFyYWN0ZXJzLCBsZW5n
dGgsIG51bGxwdHIpKTsKICAgICAgICAgICAgIGlmIChSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGZv
dW5kRm9udE5hbWUgPSBhZG9wdENGKENURm9udENvcHlQb3N0U2NyaXB0TmFtZShmYWxsYmFja0Zv
bnQuZ2V0KCkpKSkKLSAgICAgICAgICAgICAgICBzaW1wbGVGb250RGF0YSA9IGZvbnRGb3JGYW1p
bHkoZGVzY3JpcHRpb24sIGZvdW5kRm9udE5hbWUuZ2V0KCksIGZhbHNlKTsKKyAgICAgICAgICAg
ICAgICBmb250ID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgZm91bmRGb250TmFtZS5nZXQo
KSwgZmFsc2UpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICB9CiAKLSAg
ICBpZiAoc2ltcGxlRm9udERhdGEpCi0gICAgICAgIHJldHVybiBzaW1wbGVGb250RGF0YS5yZWxl
YXNlKCk7CisgICAgaWYgKGZvbnQpCisgICAgICAgIHJldHVybiBmb250LnJlbGVhc2UoKTsKIAog
ICAgIHJldHVybiBsYXN0UmVzb3J0RmFsbGJhY2tGb250KGRlc2NyaXB0aW9uKTsKIH0KIAotUmVm
UHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OnNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCitSZWZQdHI8Rm9udD4gRm9udENhY2hl
OjpzaW1pbGFyRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQogewogICAg
IC8vIEF0dGVtcHQgdG8gZmluZCBhbiBhcHByb3ByaWF0ZSBmb250IHVzaW5nIGEgbWF0Y2ggYmFz
ZWQgb24gdGhlIHByZXNlbmNlIG9mIGtleXdvcmRzIGluCiAgICAgLy8gdGhlIHJlcXVlc3RlZCBu
YW1lcy4gRm9yIGV4YW1wbGUsIHdlJ2xsIG1hdGNoIGFueSBuYW1lIHRoYXQgY29udGFpbnMgIkFy
YWJpYyIgdG8gR2VlemEgUHJvLgotICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gc2ltcGxlRm9u
dERhdGE7CisgICAgUmVmUHRyPEZvbnQ+IGZvbnQ7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGRlc2NyaXB0aW9uLmZhbWlseUNvdW50KCk7ICsraSkgewogICAgICAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIGZhbWlseSA9IGRlc2NyaXB0aW9uLmZhbWlseUF0KGkpOwogICAgICAgICBpZiAo
ZmFtaWx5LmlzRW1wdHkoKSkKQEAgLTQ2MSw3ICs0NjEsNyBAQCBSZWZQdHI8U2ltcGxlRm9udERh
dGE+IEZvbnRDYWNoZTo6c2ltaWxhCiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9t
aWNTdHJpbmc+IG1lbmxvKCJtZW5sbyIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVy
YWwpOwogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBjb3VyaWVy
KCJjb3VyaWVyIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CiAgICAgICAg
IGlmIChlcXVhbElnbm9yaW5nQ2FzZShmYW1pbHksIG1vbmFjbykgfHwgZXF1YWxJZ25vcmluZ0Nh
c2UoZmFtaWx5LCBtZW5sbykpIHsKLSAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gZm9udEZv
ckZhbWlseShkZXNjcmlwdGlvbiwgY291cmllcik7CisgICAgICAgICAgICBmb250ID0gZm9udEZv
ckZhbWlseShkZXNjcmlwdGlvbiwgY291cmllcik7CiAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgfQogCkBAIC00NjksNyArNDY5LDcgQEAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250
Q2FjaGU6OnNpbWlsYQogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5n
PiBsdWNpZGFHcmFuZGUoImx1Y2lkYSBncmFuZGUiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZy
b21MaXRlcmFsKTsKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4g
dmVyZGFuYSgidmVyZGFuYSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwog
ICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZmFtaWx5LCBsdWNpZGFHcmFuZGUpKSB7Ci0g
ICAgICAgICAgICBzaW1wbGVGb250RGF0YSA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIHZl
cmRhbmEpOworICAgICAgICAgICAgZm9udCA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIHZl
cmRhbmEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIApAQCAtNDc5LDE1ICs0
NzksMTYgQEAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OnNpbWlsYQogICAgICAg
ICBzdGF0aWMgU3RyaW5nKiBtYXRjaFdvcmRzWzNdID0geyAmYXJhYmljLmdldCgpLCAmcGFzaHRv
LmdldCgpLCAmdXJkdS5nZXQoKSB9OwogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRv
bWljU3RyaW5nPiBnZWV6YVBsYWluKCJHZWV6YVBybyIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpOwogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5n
PiBnZWV6YUJvbGQoIkdlZXphUHJvLUJvbGQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKTsKLSAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCAzICYmICFzaW1wbGVGb250RGF0
YTsgKytqKQorICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDMgJiYgIWZvbnQ7ICsraikgewog
ICAgICAgICAgICAgaWYgKGZhbWlseS5jb250YWlucygqbWF0Y2hXb3Jkc1tqXSwgZmFsc2UpKQot
ICAgICAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlv
biwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBnZWV6YUJvbGQgOiBn
ZWV6YVBsYWluKTsKKyAgICAgICAgICAgICAgICBmb250ID0gZm9udEZvckZhbWlseShkZXNjcmlw
dGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBnZWV6YUJvbGQg
OiBnZWV6YVBsYWluKTsKKyAgICAgICAgfQogICAgIH0KIAotICAgIHJldHVybiBzaW1wbGVGb250
RGF0YS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIGZvbnQucmVsZWFzZSgpOwogfQogCi1SZWY8U2lt
cGxlRm9udERhdGE+IEZvbnRDYWNoZTo6bGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250
RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikKK1JlZjxGb250PiBGb250Q2FjaGU6Omxhc3RS
ZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24p
CiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gZmFsbGJhY2tGb250
RmFtaWx5KCIuUGhvbmVGYWxsYmFjayIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVy
YWwpOwogICAgIHJldHVybiAqZm9udEZvckZhbWlseShmb250RGVzY3JpcHRpb24sIGZhbGxiYWNr
Rm9udEZhbWlseSwgZmFsc2UpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaW9zL1NpbXBsZUZvbnREYXRhSU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9TaW1wbGVGb250RGF0YUlPUy5tbQkocmV2aXNpb24gMTc4
ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL1NpbXBsZUZvbnRE
YXRhSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiAgKi8KIAogI2ltcG9y
dCAiY29uZmlnLmgiCi0jaW1wb3J0ICJTaW1wbGVGb250RGF0YS5oIgorI2ltcG9ydCAiRm9udC5o
IgogCiAjaW1wb3J0ICJCbG9ja0V4Y2VwdGlvbnMuaCIKICNpbXBvcnQgIkNvcmVHcmFwaGljc1NQ
SS5oIgpAQCAtNjcsNyArNjcsNyBAQCBzdGF0aWMgYm9vbCBmb250SGFzVmVydGljYWxHbHlwaHMo
Q1RGb250CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0
Zm9ybUluaXQoKQordm9pZCBGb250OjpwbGF0Zm9ybUluaXQoKQogewogICAgIG1fc3ludGhldGlj
Qm9sZE9mZnNldCA9IG1fcGxhdGZvcm1EYXRhLm1fc3ludGhldGljQm9sZCA/IGNlaWxmKG1fcGxh
dGZvcm1EYXRhLnNpemUoKSAgLyAyNC4wZikgOiAwLmY7CiAgICAgbV9zcGFjZUdseXBoID0gMDsK
QEAgLTEyOCw3ICsxMjgsNyBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUluaXQoKQog
ICAgIG1fZm9udE1ldHJpY3Muc2V0TGluZVNwYWNpbmcoMCk7CiB9CiAKLXZvaWQgU2ltcGxlRm9u
dERhdGE6OnBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpCit2b2lkIEZvbnQ6OnBsYXRmb3JtQ2hhcldp
ZHRoSW5pdCgpCiB7CiAgICAgbV9hdmdDaGFyV2lkdGggPSAwOwogICAgIG1fbWF4Q2hhcldpZHRo
ID0gMDsKQEAgLTEzNywxMiArMTM3LDEyIEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3Jt
Q2hhcldpZHRoSW4KICAgICBpbml0Q2hhcldpZHRocygpOwogfQogCi1QYXNzUmVmUHRyPFNpbXBs
ZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1DcmVhdGVTY2FsZWRGb250RGF0YShj
b25zdCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3QKK1Bhc3NSZWZQ
dHI8Rm9udD4gRm9udDo6cGxhdGZvcm1DcmVhdGVTY2FsZWRGb250KGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYsIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAogewogICAgIGlmIChpc0N1c3RvbUZvbnQo
KSkgewogICAgICAgICBGb250UGxhdGZvcm1EYXRhIHNjYWxlZEZvbnREYXRhKG1fcGxhdGZvcm1E
YXRhKTsKICAgICAgICAgc2NhbGVkRm9udERhdGEubV9zaXplID0gc2NhbGVkRm9udERhdGEubV9z
aXplICogc2NhbGVGYWN0b3I7Ci0gICAgICAgIHJldHVybiBTaW1wbGVGb250RGF0YTo6Y3JlYXRl
KHNjYWxlZEZvbnREYXRhLCB0cnVlLCBmYWxzZSk7CisgICAgICAgIHJldHVybiBGb250OjpjcmVh
dGUoc2NhbGVkRm9udERhdGEsIHRydWUsIGZhbHNlKTsKICAgICB9CiAKICAgICBmbG9hdCBzaXpl
ID0gbV9wbGF0Zm9ybURhdGEuc2l6ZSgpICogc2NhbGVGYWN0b3I7CkBAIC0xNjcsNyArMTY3LDcg
QEAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdAogICAgIHJldHVybiBu
dWxscHRyOwogfQogCi12b2lkIFNpbXBsZUZvbnREYXRhOjpkZXRlcm1pbmVQaXRjaCgpCit2b2lk
IEZvbnQ6OmRldGVybWluZVBpdGNoKCkKIHsKICAgICBDVEZvbnRSZWYgY3RGb250ID0gbV9wbGF0
Zm9ybURhdGEuZm9udCgpOwogICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSBmYWxzZTsKQEAgLTE4
NCwxMiArMTg0LDEyIEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OmRldGVybWluZVBpdGNoKCkKICAg
ICB9CiB9CiAKLUNHRm9udFJlbmRlcmluZ1N0eWxlIFNpbXBsZUZvbnREYXRhOjpyZW5kZXJpbmdT
dHlsZSgpIGNvbnN0CitDR0ZvbnRSZW5kZXJpbmdTdHlsZSBGb250OjpyZW5kZXJpbmdTdHlsZSgp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIGtDR0ZvbnRSZW5kZXJpbmdTdHlsZUFudGlhbGlhc2luZyB8
IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZVN1YnBpeGVsUG9zaXRpb25pbmcgfCBrQ0dGb250UmVuZGVy
aW5nU3R5bGVTdWJwaXhlbFF1YW50aXphdGlvbiB8IGtDR0ZvbnRBbnRpYWxpYXNpbmdTdHlsZVVu
ZmlsdGVyZWQ7CiB9CiAKLWJvb2wgU2ltcGxlRm9udERhdGE6OmFkdmFuY2VGb3JDb2xvckJpdG1h
cEZvbnQoR2x5cGgsIENHU2l6ZSYpIGNvbnN0Citib29sIEZvbnQ6OmFkdmFuY2VGb3JDb2xvckJp
dG1hcEZvbnQoR2x5cGgsIENHU2l6ZSYpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29u
dHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDE3ODg1NykKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAg
fQogCi0gICAgZmxvYXQgd2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBIYXNoU2V0
PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMpCisgICAgZmxvYXQgd2lkdGgo
dW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJh
Y2tGb250cykKICAgICB7CiAgICAgICAgIG1fY29udHJvbGxlci0+YWR2YW5jZShmcm9tLCAwLCBC
eVdob2xlR2x5cGhzLCBmYWxsYmFja0ZvbnRzKTsKICAgICAgICAgZmxvYXQgYmVmb3JlV2lkdGgg
PSBtX2NvbnRyb2xsZXItPnJ1bldpZHRoU29GYXIoKTsKQEAgLTk2LDcgKzk2LDcgQEAgdm9pZCBG
b250Q2FzY2FkZTo6ZGVsZXRlTGF5b3V0KFRleHRMYXlvdQogICAgIGRlbGV0ZSBsYXlvdXQ7CiB9
CiAKLWZsb2F0IEZvbnRDYXNjYWRlOjp3aWR0aChUZXh0TGF5b3V0JiBsYXlvdXQsIHVuc2lnbmVk
IGZyb20sIHVuc2lnbmVkIGxlbiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxs
YmFja0ZvbnRzKQorZmxvYXQgRm9udENhc2NhZGU6OndpZHRoKFRleHRMYXlvdXQmIGxheW91dCwg
dW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJh
Y2tGb250cykKIHsKICAgICByZXR1cm4gbGF5b3V0LndpZHRoKGZyb20sIGxlbiwgZmFsbGJhY2tG
b250cyk7CiB9CkBAIC0xMTUsNyArMTE1LDcgQEAgc3RhdGljIGlubGluZSBDR0Zsb2F0IGNlaWxD
R0Zsb2F0KENHRmxvYQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxDR0Zsb2F0PihjZWlsKGYpKTsK
IH0KIAotQ29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dENvbnRyb2xsZXIoY29uc3Qg
Rm9udENhc2NhZGUqIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgYm9vbCBtYXlVc2VOYXR1cmFs
V3JpdGluZ0RpcmVjdGlvbiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFj
a0ZvbnRzLCBib29sIGZvclRleHRFbXBoYXNpcykKK0NvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29t
cGxleFRleHRDb250cm9sbGVyKGNvbnN0IEZvbnRDYXNjYWRlKiBmb250LCBjb25zdCBUZXh0UnVu
JiBydW4sIGJvb2wgbWF5VXNlTmF0dXJhbFdyaXRpbmdEaXJlY3Rpb24sIEhhc2hTZXQ8Y29uc3Qg
Rm9udCo+KiBmYWxsYmFja0ZvbnRzLCBib29sIGZvclRleHRFbXBoYXNpcykKICAgICA6IG1fZm9u
dCgqZm9udCkKICAgICAsIG1fcnVuKHJ1bikKICAgICAsIG1faXNMVFJPbmx5KHRydWUpCkBAIC0y
OTEsNyArMjkxLDcgQEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RDb21wbAog
ICAgIGlmICghbV9lbmQpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIFdlIGJyZWFrIHVwIGds
eXBoIHJ1biBnZW5lcmF0aW9uIGZvciB0aGUgc3RyaW5nIGJ5IEZvbnREYXRhLgorICAgIC8vIFdl
IGJyZWFrIHVwIGdseXBoIHJ1biBnZW5lcmF0aW9uIGZvciB0aGUgc3RyaW5nIGJ5IEZvbnQuCiAg
ICAgY29uc3QgVUNoYXIqIGNwOwogCiAgICAgaWYgKG1fcnVuLmlzOEJpdCgpKSB7CkBAIC0zMDgs
OSArMzA4LDkgQEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RDb21wbAogICAg
IGNvbnN0IFVDaGFyKiBjdXJyID0gY3A7CiAgICAgY29uc3QgVUNoYXIqIGVuZCA9IGNwICsgbV9l
bmQ7CiAKLSAgICBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGE7CisgICAgY29uc3QgRm9u
dCogZm9udDsKICAgICBib29sIGlzTWlzc2luZ0dseXBoOwotICAgIGNvbnN0IFNpbXBsZUZvbnRE
YXRhKiBuZXh0Rm9udERhdGE7CisgICAgY29uc3QgRm9udCogbmV4dEZvbnQ7CiAgICAgYm9vbCBu
ZXh0SXNNaXNzaW5nR2x5cGg7CiAKICAgICB1bnNpZ25lZCBtYXJrQ291bnQ7CkBAIC0zMzIsMTIg
KzMzMiwxMiBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Y29sbGVjdENvbXBsCiAgICAg
fQogCiAgICAgbmV4dElzTWlzc2luZ0dseXBoID0gZmFsc2U7Ci0gICAgbmV4dEZvbnREYXRhID0g
bV9mb250LmZvbnREYXRhRm9yQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2Uoc2VxdWVuY2VTdGFy
dCwgY3VyciAtIHNlcXVlbmNlU3RhcnQsIG5leHRJc1NtYWxsQ2FwcyA/IFNtYWxsQ2Fwc1Zhcmlh
bnQgOiBOb3JtYWxWYXJpYW50KTsKLSAgICBpZiAoIW5leHRGb250RGF0YSkKKyAgICBuZXh0Rm9u
dCA9IG1fZm9udC5mb250Rm9yQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2Uoc2VxdWVuY2VTdGFy
dCwgY3VyciAtIHNlcXVlbmNlU3RhcnQsIG5leHRJc1NtYWxsQ2FwcyA/IFNtYWxsQ2Fwc1Zhcmlh
bnQgOiBOb3JtYWxWYXJpYW50KTsKKyAgICBpZiAoIW5leHRGb250KQogICAgICAgICBuZXh0SXNN
aXNzaW5nR2x5cGggPSB0cnVlOwogCiAgICAgd2hpbGUgKGN1cnIgPCBlbmQpIHsKLSAgICAgICAg
Zm9udERhdGEgPSBuZXh0Rm9udERhdGE7CisgICAgICAgIGZvbnQgPSBuZXh0Rm9udDsKICAgICAg
ICAgaXNNaXNzaW5nR2x5cGggPSBuZXh0SXNNaXNzaW5nR2x5cGg7CiAgICAgICAgIGlzU21hbGxD
YXBzID0gbmV4dElzU21hbGxDYXBzOwogICAgICAgICBpbnQgaW5kZXggPSBjdXJyIC0gY3A7CkBA
IC0zNTgsMTcgKzM1OCwxNyBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Y29sbGVjdENv
bXBsCiAKICAgICAgICAgbmV4dElzTWlzc2luZ0dseXBoID0gZmFsc2U7CiAgICAgICAgIGlmIChi
YXNlQ2hhcmFjdGVyID09IHplcm9XaWR0aEpvaW5lcikKLSAgICAgICAgICAgIG5leHRGb250RGF0
YSA9IGZvbnREYXRhOworICAgICAgICAgICAgbmV4dEZvbnQgPSBmb250OwogICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgIG5leHRGb250RGF0YSA9IG1fZm9udC5mb250RGF0YUZvckNvbWJpbmlu
Z0NoYXJhY3RlclNlcXVlbmNlKGNwICsgaW5kZXgsIGN1cnIgLSBjcCAtIGluZGV4LCBuZXh0SXNT
bWFsbENhcHMgPyBTbWFsbENhcHNWYXJpYW50IDogTm9ybWFsVmFyaWFudCk7Ci0gICAgICAgICAg
ICBpZiAoIW5leHRGb250RGF0YSkKKyAgICAgICAgICAgIG5leHRGb250ID0gbV9mb250LmZvbnRG
b3JDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjcCArIGluZGV4LCBjdXJyIC0gY3AgLSBpbmRl
eCwgbmV4dElzU21hbGxDYXBzID8gU21hbGxDYXBzVmFyaWFudCA6IE5vcm1hbFZhcmlhbnQpOwor
ICAgICAgICAgICAgaWYgKCFuZXh0Rm9udCkKICAgICAgICAgICAgICAgICBuZXh0SXNNaXNzaW5n
R2x5cGggPSB0cnVlOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG5leHRGb250RGF0YSAhPSBm
b250RGF0YSB8fCBuZXh0SXNNaXNzaW5nR2x5cGggIT0gaXNNaXNzaW5nR2x5cGgpIHsKKyAgICAg
ICAgaWYgKG5leHRGb250ICE9IGZvbnQgfHwgbmV4dElzTWlzc2luZ0dseXBoICE9IGlzTWlzc2lu
Z0dseXBoKSB7CiAgICAgICAgICAgICBpbnQgaXRlbVN0YXJ0ID0gc3RhdGljX2Nhc3Q8aW50Pihp
bmRleE9mRm9udFRyYW5zaXRpb24pOwogICAgICAgICAgICAgaW50IGl0ZW1MZW5ndGggPSBpbmRl
eCAtIGluZGV4T2ZGb250VHJhbnNpdGlvbjsKLSAgICAgICAgICAgIGNvbGxlY3RDb21wbGV4VGV4
dFJ1bnNGb3JDaGFyYWN0ZXJzKChpc1NtYWxsQ2FwcyA/IG1fc21hbGxDYXBzQnVmZmVyLmRhdGEo
KSA6IGNwKSArIGl0ZW1TdGFydCwgaXRlbUxlbmd0aCwgaXRlbVN0YXJ0LCAhaXNNaXNzaW5nR2x5
cGggPyBmb250RGF0YSA6IDApOworICAgICAgICAgICAgY29sbGVjdENvbXBsZXhUZXh0UnVuc0Zv
ckNoYXJhY3RlcnMoKGlzU21hbGxDYXBzID8gbV9zbWFsbENhcHNCdWZmZXIuZGF0YSgpIDogY3Ap
ICsgaXRlbVN0YXJ0LCBpdGVtTGVuZ3RoLCBpdGVtU3RhcnQsICFpc01pc3NpbmdHbHlwaCA/IGZv
bnQgOiAwKTsKICAgICAgICAgICAgIGluZGV4T2ZGb250VHJhbnNpdGlvbiA9IGluZGV4OwogICAg
ICAgICB9CiAgICAgfQpAQCAtMzc2LDcgKzM3Niw3IEBAIHZvaWQgQ29tcGxleFRleHRDb250cm9s
bGVyOjpjb2xsZWN0Q29tcGwKICAgICBpbnQgaXRlbUxlbmd0aCA9IG1fZW5kIC0gaW5kZXhPZkZv
bnRUcmFuc2l0aW9uOwogICAgIGlmIChpdGVtTGVuZ3RoKSB7CiAgICAgICAgIGludCBpdGVtU3Rh
cnQgPSBpbmRleE9mRm9udFRyYW5zaXRpb247Ci0gICAgICAgIGNvbGxlY3RDb21wbGV4VGV4dFJ1
bnNGb3JDaGFyYWN0ZXJzKChuZXh0SXNTbWFsbENhcHMgPyBtX3NtYWxsQ2Fwc0J1ZmZlci5kYXRh
KCkgOiBjcCkgKyBpdGVtU3RhcnQsIGl0ZW1MZW5ndGgsIGl0ZW1TdGFydCwgIW5leHRJc01pc3Np
bmdHbHlwaCA/IG5leHRGb250RGF0YSA6IDApOworICAgICAgICBjb2xsZWN0Q29tcGxleFRleHRS
dW5zRm9yQ2hhcmFjdGVycygobmV4dElzU21hbGxDYXBzID8gbV9zbWFsbENhcHNCdWZmZXIuZGF0
YSgpIDogY3ApICsgaXRlbVN0YXJ0LCBpdGVtTGVuZ3RoLCBpdGVtU3RhcnQsICFuZXh0SXNNaXNz
aW5nR2x5cGggPyBuZXh0Rm9udCA6IDApOwogICAgIH0KIAogICAgIGlmICghbV9ydW4ubHRyKCkp
CkBAIC00NjksNyArNDY5LDcgQEAgdW5zaWduZWQgQ29tcGxleFRleHRDb250cm9sbGVyOjppbmNy
ZW1lbgogICAgIHJldHVybiBpbmRleE9mQ3VycmVudFJ1bihsZWZ0bW9zdEdseXBoKTsKIH0KIAot
dm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmFkdmFuY2UodW5zaWduZWQgb2Zmc2V0LCBHbHlw
aEJ1ZmZlciogZ2x5cGhCdWZmZXIsIEdseXBoSXRlcmF0aW9uU3R5bGUgaXRlcmF0aW9uU3R5bGUs
IEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cykKK3ZvaWQgQ29t
cGxleFRleHRDb250cm9sbGVyOjphZHZhbmNlKHVuc2lnbmVkIG9mZnNldCwgR2x5cGhCdWZmZXIq
IGdseXBoQnVmZmVyLCBHbHlwaEl0ZXJhdGlvblN0eWxlIGl0ZXJhdGlvblN0eWxlLCBIYXNoU2V0
PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cykKIHsKICAgICBpZiAoc3RhdGljX2Nhc3Q8aW50
PihvZmZzZXQpID4gbV9lbmQpCiAgICAgICAgIG9mZnNldCA9IG1fZW5kOwpAQCAtNDk0LDggKzQ5
NCw4IEBAIHZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjphZHZhbmNlKHVuc2kKICAgICAgICAg
c2l6ZV90IGdseXBoQ291bnQgPSBjb21wbGV4VGV4dFJ1bi5nbHlwaENvdW50KCk7CiAgICAgICAg
IHVuc2lnbmVkIGcgPSBsdHIgPyBtX2dseXBoSW5DdXJyZW50UnVuIDogZ2x5cGhDb3VudCAtIDEg
LSBtX2dseXBoSW5DdXJyZW50UnVuOwogICAgICAgICB1bnNpZ25lZCBrID0gbGVmdG1vc3RHbHlw
aCArIGc7Ci0gICAgICAgIGlmIChmYWxsYmFja0ZvbnRzICYmICZjb21wbGV4VGV4dFJ1bi5mb250
RGF0YSgpICE9ICZtX2ZvbnQucHJpbWFyeUZvbnREYXRhKCkpCi0gICAgICAgICAgICBmYWxsYmFj
a0ZvbnRzLT5hZGQoJmNvbXBsZXhUZXh0UnVuLmZvbnREYXRhKCkpOworICAgICAgICBpZiAoZmFs
bGJhY2tGb250cyAmJiAmY29tcGxleFRleHRSdW4uZm9udCgpICE9ICZtX2ZvbnQucHJpbWFyeUZv
bnQoKSkKKyAgICAgICAgICAgIGZhbGxiYWNrRm9udHMtPmFkZCgmY29tcGxleFRleHRSdW4uZm9u
dCgpKTsKIAogICAgICAgICAvLyBXZSBtdXN0IHN0b3JlIHRoZSBpbml0aWFsIGFkdmFuY2UgZm9y
IHRoZSBmaXJzdCBnbHlwaCB3ZSBhcmUgZ29pbmcgdG8gZHJhdy4KICAgICAgICAgLy8gV2hlbiBs
ZWZ0bW9zdEdseXBoIGlzIDAsIGl0IHJlcHJlc2VudHMgdGhlIGZpcnN0IGdseXBoIHRvIGRyYXcs
IHRha2luZyBpbnRvCkBAIC01MjAsNyArNTIwLDcgQEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xs
ZXI6OmFkdmFuY2UodW5zaQogICAgICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAgICAg
aWYgKGdseXBoQnVmZmVyICYmICFtX2NoYXJhY3RlckluQ3VycmVudEdseXBoKQotICAgICAgICAg
ICAgICAgIGdseXBoQnVmZmVyLT5hZGQobV9hZGp1c3RlZEdseXBoc1trXSwgJmNvbXBsZXhUZXh0
UnVuLmZvbnREYXRhKCksIGFkanVzdGVkQWR2YW5jZSwgY29tcGxleFRleHRSdW4uaW5kZXhBdCht
X2dseXBoSW5DdXJyZW50UnVuKSk7CisgICAgICAgICAgICAgICAgZ2x5cGhCdWZmZXItPmFkZCht
X2FkanVzdGVkR2x5cGhzW2tdLCAmY29tcGxleFRleHRSdW4uZm9udCgpLCBhZGp1c3RlZEFkdmFu
Y2UsIGNvbXBsZXhUZXh0UnVuLmluZGV4QXQobV9nbHlwaEluQ3VycmVudFJ1bikpOwogCiAgICAg
ICAgICAgICB1bnNpZ25lZCBvbGRDaGFyYWN0ZXJJbkN1cnJlbnRHbHlwaCA9IG1fY2hhcmFjdGVy
SW5DdXJyZW50R2x5cGg7CiAgICAgICAgICAgICBtX2NoYXJhY3RlckluQ3VycmVudEdseXBoID0g
c3RkOjptaW4obV9jdXJyZW50Q2hhcmFjdGVyIC0gY29tcGxleFRleHRSdW4uc3RyaW5nTG9jYXRp
b24oKSwgZ2x5cGhFbmRPZmZzZXQpIC0gZ2x5cGhTdGFydE9mZnNldDsKQEAgLTU2Niw5ICs1NjYs
OSBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6YWRqdXN0R2x5cGhzCiAgICAgZm9yIChz
aXplX3QgciA9IDA7IHIgPCBydW5Db3VudDsgKytyKSB7CiAgICAgICAgIENvbXBsZXhUZXh0UnVu
JiBjb21wbGV4VGV4dFJ1biA9ICptX2NvbXBsZXhUZXh0UnVuc1tyXTsKICAgICAgICAgdW5zaWdu
ZWQgZ2x5cGhDb3VudCA9IGNvbXBsZXhUZXh0UnVuLmdseXBoQ291bnQoKTsKLSAgICAgICAgY29u
c3QgU2ltcGxlRm9udERhdGEmIGZvbnREYXRhID0gY29tcGxleFRleHRSdW4uZm9udERhdGEoKTsK
KyAgICAgICAgY29uc3QgRm9udCYgZm9udCA9IGNvbXBsZXhUZXh0UnVuLmZvbnQoKTsKICNpZiBQ
TEFURk9STShJT1MpCi0gICAgICAgIGJvb2wgaXNFbW9qaSA9IGZvbnREYXRhLnBsYXRmb3JtRGF0
YSgpLm1faXNFbW9qaTsKKyAgICAgICAgYm9vbCBpc0Vtb2ppID0gZm9udC5wbGF0Zm9ybURhdGEo
KS5tX2lzRW1vamk7CiAjZW5kaWYKIAogICAgICAgICAvLyBSZXByZXNlbnQgdGhlIGluaXRpYWwg
YWR2YW5jZSBmb3IgYSB0ZXh0IHJ1biBieSBhZGp1c3RpbmcgdGhlIGFkdmFuY2UKQEAgLTU4OCw4
ICs1ODgsOCBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6YWRqdXN0R2x5cGhzCiAgICAg
ICAgIGNvbnN0IENHU2l6ZSogYWR2YW5jZXMgPSBjb21wbGV4VGV4dFJ1bi5hZHZhbmNlcygpOwog
CiAgICAgICAgIGJvb2wgbGFzdFJ1biA9IHIgKyAxID09IHJ1bkNvdW50OwotICAgICAgICBib29s
IHJvdW5kc0FkdmFuY2VzID0gIW1fZm9udC5pc1ByaW50ZXJGb250KCkgJiYgZm9udERhdGEucGxh
dGZvcm1EYXRhKCkucm91bmRzR2x5cGhBZHZhbmNlcygpOwotICAgICAgICBmbG9hdCBzcGFjZVdp
ZHRoID0gZm9udERhdGEuc3BhY2VXaWR0aCgpIC0gZm9udERhdGEuc3ludGhldGljQm9sZE9mZnNl
dCgpOworICAgICAgICBib29sIHJvdW5kc0FkdmFuY2VzID0gIW1fZm9udC5pc1ByaW50ZXJGb250
KCkgJiYgZm9udC5wbGF0Zm9ybURhdGEoKS5yb3VuZHNHbHlwaEFkdmFuY2VzKCk7CisgICAgICAg
IGZsb2F0IHNwYWNlV2lkdGggPSBmb250LnNwYWNlV2lkdGgoKSAtIGZvbnQuc3ludGhldGljQm9s
ZE9mZnNldCgpOwogICAgICAgICBDR0Zsb2F0IHJvdW5kZWRTcGFjZVdpZHRoID0gcm91bmRDR0Zs
b2F0KHNwYWNlV2lkdGgpOwogICAgICAgICBjb25zdCBVQ2hhciogY3AgPSBjb21wbGV4VGV4dFJ1
bi5jaGFyYWN0ZXJzKCk7CiAgICAgICAgIENHUG9pbnQgZ2x5cGhPcmlnaW4gPSBDR1BvaW50WmVy
bzsKQEAgLTYxNiwzMyArNjE2LDMzIEBAIHZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjphZGp1
c3RHbHlwaHMKICAgICAgICAgICAgICAgICBuZXh0Q2ggPSAqKG1fY29tcGxleFRleHRSdW5zW3Ig
KyAxXS0+Y2hhcmFjdGVycygpICsgbV9jb21wbGV4VGV4dFJ1bnNbciArIDFdLT5pbmRleEF0KDAp
KTsKIAogICAgICAgICAgICAgYm9vbCB0cmVhdEFzU3BhY2UgPSBGb250Q2FzY2FkZTo6dHJlYXRB
c1NwYWNlKGNoKTsKLSAgICAgICAgICAgIENHR2x5cGggZ2x5cGggPSB0cmVhdEFzU3BhY2UgPyBm
b250RGF0YS5zcGFjZUdseXBoKCkgOiBnbHlwaHNbaV07CisgICAgICAgICAgICBDR0dseXBoIGds
eXBoID0gdHJlYXRBc1NwYWNlID8gZm9udC5zcGFjZUdseXBoKCkgOiBnbHlwaHNbaV07CiAgICAg
ICAgICAgICBDR1NpemUgYWR2YW5jZSA9IHRyZWF0QXNTcGFjZSA/IENHU2l6ZU1ha2Uoc3BhY2VX
aWR0aCwgYWR2YW5jZXNbaV0uaGVpZ2h0KSA6IGFkdmFuY2VzW2ldOwogI2lmIFBMQVRGT1JNKElP
UykKICAgICAgICAgICAgIGlmIChpc0Vtb2ppICYmIGFkdmFuY2Uud2lkdGgpCi0gICAgICAgICAg
ICAgICAgYWR2YW5jZS53aWR0aCA9IGZvbnREYXRhLndpZHRoRm9yR2x5cGgoZ2x5cGgpOworICAg
ICAgICAgICAgICAgIGFkdmFuY2Uud2lkdGggPSBmb250LndpZHRoRm9yR2x5cGgoZ2x5cGgpOwog
I2VuZGlmCiAKICAgICAgICAgICAgIGlmIChjaCA9PSAnXHQnICYmIG1fcnVuLmFsbG93VGFicygp
KQotICAgICAgICAgICAgICAgIGFkdmFuY2Uud2lkdGggPSBtX2ZvbnQudGFiV2lkdGgoZm9udERh
dGEsIG1fcnVuLnRhYlNpemUoKSwgbV9ydW4ueFBvcygpICsgbV90b3RhbFdpZHRoICsgd2lkdGhT
aW5jZUxhc3RDb21taXQpOworICAgICAgICAgICAgICAgIGFkdmFuY2Uud2lkdGggPSBtX2ZvbnQu
dGFiV2lkdGgoZm9udCwgbV9ydW4udGFiU2l6ZSgpLCBtX3J1bi54UG9zKCkgKyBtX3RvdGFsV2lk
dGggKyB3aWR0aFNpbmNlTGFzdENvbW1pdCk7CiAgICAgICAgICAgICBlbHNlIGlmIChGb250Q2Fz
Y2FkZTo6dHJlYXRBc1plcm9XaWR0aFNwYWNlKGNoKSAmJiAhdHJlYXRBc1NwYWNlKSB7CiAgICAg
ICAgICAgICAgICAgYWR2YW5jZS53aWR0aCA9IDA7Ci0gICAgICAgICAgICAgICAgZ2x5cGggPSBm
b250RGF0YS5zcGFjZUdseXBoKCk7CisgICAgICAgICAgICAgICAgZ2x5cGggPSBmb250LnNwYWNl
R2x5cGgoKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgZmxvYXQgcm91bmRlZEFkdmFu
Y2VXaWR0aCA9IHJvdW5kZihhZHZhbmNlLndpZHRoKTsKICAgICAgICAgICAgIGlmIChyb3VuZHNB
ZHZhbmNlcykKICAgICAgICAgICAgICAgICBhZHZhbmNlLndpZHRoID0gcm91bmRlZEFkdmFuY2VX
aWR0aDsKIAotICAgICAgICAgICAgYWR2YW5jZS53aWR0aCArPSBmb250RGF0YS5zeW50aGV0aWNC
b2xkT2Zmc2V0KCk7CisgICAgICAgICAgICBhZHZhbmNlLndpZHRoICs9IGZvbnQuc3ludGhldGlj
Qm9sZE9mZnNldCgpOwogCiAgCiAgICAgICAgICAgICAvLyBXZSBzcGVjaWFsIGNhc2Ugc3BhY2Vz
IGluIHR3byB3YXlzIHdoZW4gYXBwbHlpbmcgd29yZCByb3VuZGluZy4gCiAgICAgICAgICAgICAv
LyBGaXJzdCwgd2Ugcm91bmQgc3BhY2VzIHRvIGFuIGFkanVzdGVkIHdpZHRoIGluIGFsbCBmb250
cy4gCiAgICAgICAgICAgICAvLyBTZWNvbmQsIGluIGZpeGVkLXBpdGNoIGZvbnRzIHdlIGVuc3Vy
ZSB0aGF0IGFsbCBnbHlwaHMgdGhhdCAKICAgICAgICAgICAgIC8vIG1hdGNoIHRoZSB3aWR0aCBv
ZiB0aGUgc3BhY2UgZ2x5cGggaGF2ZSB0aGUgc2FtZSB3aWR0aCBhcyB0aGUgc3BhY2UgZ2x5cGgu
IAotICAgICAgICAgICAgaWYgKG1fcnVuLmFwcGx5V29yZFJvdW5kaW5nKCkgJiYgcm91bmRlZEFk
dmFuY2VXaWR0aCA9PSByb3VuZGVkU3BhY2VXaWR0aCAmJiAoZm9udERhdGEucGl0Y2goKSA9PSBG
aXhlZFBpdGNoIHx8IGdseXBoID09IGZvbnREYXRhLnNwYWNlR2x5cGgoKSkpCi0gICAgICAgICAg
ICAgICAgYWR2YW5jZS53aWR0aCA9IGZvbnREYXRhLmFkanVzdGVkU3BhY2VXaWR0aCgpOworICAg
ICAgICAgICAgaWYgKG1fcnVuLmFwcGx5V29yZFJvdW5kaW5nKCkgJiYgcm91bmRlZEFkdmFuY2VX
aWR0aCA9PSByb3VuZGVkU3BhY2VXaWR0aCAmJiAoZm9udC5waXRjaCgpID09IEZpeGVkUGl0Y2gg
fHwgZ2x5cGggPT0gZm9udC5zcGFjZUdseXBoKCkpKQorICAgICAgICAgICAgICAgIGFkdmFuY2Uu
d2lkdGggPSBmb250LmFkanVzdGVkU3BhY2VXaWR0aCgpOwogCiAgICAgICAgICAgICBpZiAoaGFz
RXh0cmFTcGFjaW5nKSB7CiAgICAgICAgICAgICAgICAgLy8gSWYgd2UncmUgYSBnbHlwaCB3aXRo
IGFuIGFkdmFuY2UsIGdvIGFoZWFkIGFuZCBhZGQgaW4gbGV0dGVyLXNwYWNpbmcuCkBAIC03MTcs
NyArNzE3LDcgQEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmFkanVzdEdseXBocwogICAg
ICAgICAgICAgbV9hZGp1c3RlZEFkdmFuY2VzLmFwcGVuZChhZHZhbmNlKTsKICAgICAgICAgICAg
IG1fYWRqdXN0ZWRHbHlwaHMuYXBwZW5kKGdseXBoKTsKICAgICAgICAgICAgIAotICAgICAgICAg
ICAgRmxvYXRSZWN0IGdseXBoQm91bmRzID0gZm9udERhdGEuYm91bmRzRm9yR2x5cGgoZ2x5cGgp
OworICAgICAgICAgICAgRmxvYXRSZWN0IGdseXBoQm91bmRzID0gZm9udC5ib3VuZHNGb3JHbHlw
aChnbHlwaCk7CiAgICAgICAgICAgICBnbHlwaEJvdW5kcy5tb3ZlKGdseXBoT3JpZ2luLngsIGds
eXBoT3JpZ2luLnkpOwogICAgICAgICAgICAgbV9taW5HbHlwaEJvdW5kaW5nQm94WCA9IHN0ZDo6
bWluKG1fbWluR2x5cGhCb3VuZGluZ0JveFgsIGdseXBoQm91bmRzLngoKSk7CiAgICAgICAgICAg
ICBtX21heEdseXBoQm91bmRpbmdCb3hYID0gc3RkOjptYXgobV9tYXhHbHlwaEJvdW5kaW5nQm94
WCwgZ2x5cGhCb3VuZHMubWF4WCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyLmgJKHJl
dmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9D
b21wbGV4VGV4dENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCB0
eXBlZGVmIGNvbnN0IHN0cnVjdCBfX0NUTGluZSAqIENUTGluZVJlCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIEZvbnRDYXNjYWRlOwotY2xhc3MgU2ltcGxlRm9udERhdGE7CitjbGFzcyBG
b250OwogY2xhc3MgVGV4dFJ1bjsKIAogZW51bSBHbHlwaEl0ZXJhdGlvblN0eWxlIHsgSW5jbHVk
ZVBhcnRpYWxHbHlwaHMsIEJ5V2hvbGVHbHlwaHMgfTsKQEAgLTUwLDEwICs1MCwxMCBAQCBlbnVt
IEdseXBoSXRlcmF0aW9uU3R5bGUgeyBJbmNsdWRlUGFydGlhCiAvLyBjb21wbGV4IHNjcmlwdHMg
b24gT1MgWC4KIGNsYXNzIENvbXBsZXhUZXh0Q29udHJvbGxlciB7CiBwdWJsaWM6Ci0gICAgQ29t
cGxleFRleHRDb250cm9sbGVyKGNvbnN0IEZvbnRDYXNjYWRlKiwgY29uc3QgVGV4dFJ1biYsIGJv
b2wgbWF5VXNlTmF0dXJhbFdyaXRpbmdEaXJlY3Rpb24gPSBmYWxzZSwgSGFzaFNldDxjb25zdCBT
aW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgYm9vbCBmb3JUZXh0RW1waGFzaXMg
PSBmYWxzZSk7CisgICAgQ29tcGxleFRleHRDb250cm9sbGVyKGNvbnN0IEZvbnRDYXNjYWRlKiwg
Y29uc3QgVGV4dFJ1biYsIGJvb2wgbWF5VXNlTmF0dXJhbFdyaXRpbmdEaXJlY3Rpb24gPSBmYWxz
ZSwgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMgPSAwLCBib29sIGZvclRleHRF
bXBoYXNpcyA9IGZhbHNlKTsKIAogICAgIC8vIEFkdmFuY2UgYW5kIGVtaXQgZ2x5cGhzIHVwIHRv
IHRoZSBzcGVjaWZpZWQgY2hhcmFjdGVyLgotICAgIHZvaWQgYWR2YW5jZSh1bnNpZ25lZCB0bywg
R2x5cGhCdWZmZXIqID0gMCwgR2x5cGhJdGVyYXRpb25TdHlsZSA9IEluY2x1ZGVQYXJ0aWFsR2x5
cGhzLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwKTsK
KyAgICB2b2lkIGFkdmFuY2UodW5zaWduZWQgdG8sIEdseXBoQnVmZmVyKiA9IDAsIEdseXBoSXRl
cmF0aW9uU3R5bGUgPSBJbmNsdWRlUGFydGlhbEdseXBocywgSGFzaFNldDxjb25zdCBGb250Kj4q
IGZhbGxiYWNrRm9udHMgPSAwKTsKIAogICAgIC8vIENvbXB1dGUgdGhlIGNoYXJhY3RlciBvZmZz
ZXQgZm9yIGEgZ2l2ZW4geCBjb29yZGluYXRlLgogICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbihm
bG9hdCB4LCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKTsKQEAgLTczLDE4ICs3MywxOCBAQCBw
dWJsaWM6CiBwcml2YXRlOgogICAgIGNsYXNzIENvbXBsZXhUZXh0UnVuIDogcHVibGljIFJlZkNv
dW50ZWQ8Q29tcGxleFRleHRSdW4+IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBSZWY8
Q29tcGxleFRleHRSdW4+IGNyZWF0ZShDVFJ1blJlZiBjdFJ1biwgY29uc3QgU2ltcGxlRm9udERh
dGEmIGZvbnREYXRhLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgc3RyaW5nTG9j
YXRpb24sIHNpemVfdCBzdHJpbmdMZW5ndGgsIENGUmFuZ2UgcnVuUmFuZ2UpCisgICAgICAgIHN0
YXRpYyBSZWY8Q29tcGxleFRleHRSdW4+IGNyZWF0ZShDVFJ1blJlZiBjdFJ1biwgY29uc3QgRm9u
dCYgZm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIHN0cmluZ0xvY2F0aW9u
LCBzaXplX3Qgc3RyaW5nTGVuZ3RoLCBDRlJhbmdlIHJ1blJhbmdlKQogICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDb21wbGV4VGV4dFJ1bihjdFJ1biwgZm9udERh
dGEsIGNoYXJhY3RlcnMsIHN0cmluZ0xvY2F0aW9uLCBzdHJpbmdMZW5ndGgsIHJ1blJhbmdlKSk7
CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDb21wbGV4VGV4dFJ1bihjdFJ1biwg
Zm9udCwgY2hhcmFjdGVycywgc3RyaW5nTG9jYXRpb24sIHN0cmluZ0xlbmd0aCwgcnVuUmFuZ2Up
KTsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyBSZWY8Q29tcGxleFRleHRSdW4+IGNyZWF0
ZShjb25zdCBTaW1wbGVGb250RGF0YSYgZm9udERhdGEsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
LCB1bnNpZ25lZCBzdHJpbmdMb2NhdGlvbiwgc2l6ZV90IHN0cmluZ0xlbmd0aCwgYm9vbCBsdHIp
CisgICAgICAgIHN0YXRpYyBSZWY8Q29tcGxleFRleHRSdW4+IGNyZWF0ZShjb25zdCBGb250JiBm
b250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24sIHNp
emVfdCBzdHJpbmdMZW5ndGgsIGJvb2wgbHRyKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBDb21wbGV4VGV4dFJ1bihmb250RGF0YSwgY2hhcmFjdGVycywgc3Ry
aW5nTG9jYXRpb24sIHN0cmluZ0xlbmd0aCwgbHRyKSk7CisgICAgICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBDb21wbGV4VGV4dFJ1bihmb250LCBjaGFyYWN0ZXJzLCBzdHJpbmdMb2NhdGlv
biwgc3RyaW5nTGVuZ3RoLCBsdHIpKTsKICAgICAgICAgfQogCiAgICAgICAgIHVuc2lnbmVkIGds
eXBoQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2dseXBoQ291bnQ7IH0KLSAgICAgICAgY29uc3Qg
U2ltcGxlRm9udERhdGEmIGZvbnREYXRhKCkgY29uc3QgeyByZXR1cm4gbV9mb250RGF0YTsgfQor
ICAgICAgICBjb25zdCBGb250JiBmb250KCkgY29uc3QgeyByZXR1cm4gbV9mb250OyB9CiAgICAg
ICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9jaGFyYWN0ZXJz
OyB9CiAgICAgICAgIHVuc2lnbmVkIHN0cmluZ0xvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9z
dHJpbmdMb2NhdGlvbjsgfQogICAgICAgICBzaXplX3Qgc3RyaW5nTGVuZ3RoKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdHJpbmdMZW5ndGg7IH0KQEAgLTEwMCwxMSArMTAwLDExIEBAIHByaXZhdGU6CiAg
ICAgICAgIHZvaWQgc2V0SXNOb25Nb25vdG9uaWMoKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAg
IENvbXBsZXhUZXh0UnVuKENUUnVuUmVmLCBjb25zdCBTaW1wbGVGb250RGF0YSYsIGNvbnN0IFVD
aGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBzdHJpbmdMb2NhdGlvbiwgc2l6ZV90IHN0cmluZ0xl
bmd0aCwgQ0ZSYW5nZSBydW5SYW5nZSk7Ci0gICAgICAgIENvbXBsZXhUZXh0UnVuKGNvbnN0IFNp
bXBsZUZvbnREYXRhJiwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIHN0cmluZ0xv
Y2F0aW9uLCBzaXplX3Qgc3RyaW5nTGVuZ3RoLCBib29sIGx0cik7CisgICAgICAgIENvbXBsZXhU
ZXh0UnVuKENUUnVuUmVmLCBjb25zdCBGb250JiwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVu
c2lnbmVkIHN0cmluZ0xvY2F0aW9uLCBzaXplX3Qgc3RyaW5nTGVuZ3RoLCBDRlJhbmdlIHJ1blJh
bmdlKTsKKyAgICAgICAgQ29tcGxleFRleHRSdW4oY29uc3QgRm9udCYsIGNvbnN0IFVDaGFyKiBj
aGFyYWN0ZXJzLCB1bnNpZ25lZCBzdHJpbmdMb2NhdGlvbiwgc2l6ZV90IHN0cmluZ0xlbmd0aCwg
Ym9vbCBsdHIpOwogCiAgICAgICAgIHVuc2lnbmVkIG1fZ2x5cGhDb3VudDsKLSAgICAgICAgY29u
c3QgU2ltcGxlRm9udERhdGEmIG1fZm9udERhdGE7CisgICAgICAgIGNvbnN0IEZvbnQmIG1fZm9u
dDsKICAgICAgICAgY29uc3QgVUNoYXIqIG1fY2hhcmFjdGVyczsKICAgICAgICAgdW5zaWduZWQg
bV9zdHJpbmdMb2NhdGlvbjsKICAgICAgICAgc2l6ZV90IG1fc3RyaW5nTGVuZ3RoOwpAQCAtMTI3
LDcgKzEyNyw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGNvbGxlY3RDb21wbGV4VGV4dFJ1bnMo
KTsKIAotICAgIHZvaWQgY29sbGVjdENvbXBsZXhUZXh0UnVuc0ZvckNoYXJhY3RlcnMoY29uc3Qg
VUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0cmluZ0xvY2F0aW9uLCBjb25zdCBT
aW1wbGVGb250RGF0YSopOworICAgIHZvaWQgY29sbGVjdENvbXBsZXhUZXh0UnVuc0ZvckNoYXJh
Y3RlcnMoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0cmluZ0xvY2F0
aW9uLCBjb25zdCBGb250Kik7CiAgICAgdm9pZCBhZGp1c3RHbHlwaHNBbmRBZHZhbmNlcygpOwog
CiAgICAgdW5zaWduZWQgaW5kZXhPZkN1cnJlbnRSdW4odW5zaWduZWQmIGxlZnRtb3N0R2x5cGgp
OwpAQCAtMTY5LDcgKzE2OSw3IEBAIHByaXZhdGU6CiAgICAgZmxvYXQgbV9sZWFkaW5nRXhwYW5z
aW9uOwogICAgIGJvb2wgbV9hZnRlckV4cGFuc2lvbjsKIAotICAgIEhhc2hTZXQ8Y29uc3QgU2lt
cGxlRm9udERhdGEqPiogbV9mYWxsYmFja0ZvbnRzOworICAgIEhhc2hTZXQ8Y29uc3QgRm9udCo+
KiBtX2ZhbGxiYWNrRm9udHM7CiAKICAgICBmbG9hdCBtX21pbkdseXBoQm91bmRpbmdCb3hYOwog
ICAgIGZsb2F0IG1fbWF4R2x5cGhCb3VuZGluZ0JveFg7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyQ29yZVRleHQubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhU
ZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyQ29yZVRleHQu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcgQEAgLSAoaWQpaW5pdFdpdGhGb250Oihj
b25zdCBXZWJDb3JlOjpGb250QwogICAgIF9jaGFyYWN0ZXIgPSBjaGFyYWN0ZXI7CiAKICAgICAv
LyBCeSB0aGUgdGltZSBhIFdlYkNhc2NhZGVMaXN0IGlzIHVzZWQsIHRoZSBGb250Q2FzY2FkZSBo
YXMgYWxyZWFkeSBiZWVuIGFza2VkIHRvIHJlYWxpemUgYWxsIG9mIGl0cwotICAgIC8vIEZvbnRE
YXRhLCBzbyB0aGlzIGxvb3AgZG9lcyBub3QgaGl0IHRoZSBGb250Q2FjaGUuCisgICAgLy8gRm9u
dHMsIHNvIHRoaXMgbG9vcCBkb2VzIG5vdCBoaXQgdGhlIEZvbnRDYWNoZS4KICAgICB3aGlsZSAo
IV9mb250LT5mYWxsYmFja1Jhbmdlc0F0KF9jb3VudCkuaXNOdWxsKCkpCiAgICAgICAgIF9jb3Vu
dCsrOwogCkBAIC04MiwxMCArODIsMTAgQEAgLSAoaWQpb2JqZWN0QXRJbmRleDooTlNVSW50ZWdl
cilpbmRleAogICAgIH0gZWxzZQogICAgICAgICBfZm9udERlc2NyaXB0b3JzLmdyb3coaW5kZXgg
KyAxKTsKIAotICAgIGNvbnN0IFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhKiBzaW1wbGVGb250RGF0
YSA9IF9mb250LT5mYWxsYmFja1Jhbmdlc0F0KGluZGV4KS5mb250RGF0YUZvckNoYXJhY3Rlcihf
Y2hhcmFjdGVyKTsKLSAgICBpZiAoIXNpbXBsZUZvbnREYXRhKQotICAgICAgICBzaW1wbGVGb250
RGF0YSA9ICZfZm9udC0+ZmFsbGJhY2tSYW5nZXNBdChpbmRleCkuZm9udERhdGFGb3JGaXJzdFJh
bmdlKCk7Ci0gICAgZm9udERlc2NyaXB0b3IgPSBDVEZvbnRDb3B5Rm9udERlc2NyaXB0b3Ioc2lt
cGxlRm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLmN0Rm9udCgpKTsKKyAgICBjb25zdCBXZWJDb3Jl
OjpGb250KiBmb250ID0gX2ZvbnQtPmZhbGxiYWNrUmFuZ2VzQXQoaW5kZXgpLmZvbnRGb3JDaGFy
YWN0ZXIoX2NoYXJhY3Rlcik7CisgICAgaWYgKCFmb250KQorICAgICAgICBmb250ID0gJl9mb250
LT5mYWxsYmFja1Jhbmdlc0F0KGluZGV4KS5mb250Rm9yRmlyc3RSYW5nZSgpOworICAgIGZvbnRE
ZXNjcmlwdG9yID0gQ1RGb250Q29weUZvbnREZXNjcmlwdG9yKGZvbnQtPnBsYXRmb3JtRGF0YSgp
LmN0Rm9udCgpKTsKICAgICBfZm9udERlc2NyaXB0b3JzW2luZGV4XSA9IGFkb3B0Q0YoZm9udERl
c2NyaXB0b3IpOwogICAgIHJldHVybiAoaWQpZm9udERlc2NyaXB0b3I7CiB9CkBAIC05NCw4ICs5
NCw4IEBAIC0gKGlkKW9iamVjdEF0SW5kZXg6KE5TVUludGVnZXIpaW5kZXgKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1Db21wbGV4VGV4dENvbnRyb2xsZXI6OkNvbXBsZXhUZXh0UnVuOjpDb21w
bGV4VGV4dFJ1bihDVFJ1blJlZiBjdFJ1biwgY29uc3QgU2ltcGxlRm9udERhdGEmIGZvbnREYXRh
LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24sIHNpemVf
dCBzdHJpbmdMZW5ndGgsIENGUmFuZ2UgcnVuUmFuZ2UpCi0gICAgOiBtX2ZvbnREYXRhKGZvbnRE
YXRhKQorQ29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dFJ1bjo6Q29tcGxleFRleHRS
dW4oQ1RSdW5SZWYgY3RSdW4sIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0
ZXJzLCB1bnNpZ25lZCBzdHJpbmdMb2NhdGlvbiwgc2l6ZV90IHN0cmluZ0xlbmd0aCwgQ0ZSYW5n
ZSBydW5SYW5nZSkKKyAgICA6IG1fZm9udChmb250KQogICAgICwgbV9jaGFyYWN0ZXJzKGNoYXJh
Y3RlcnMpCiAgICAgLCBtX3N0cmluZ0xvY2F0aW9uKHN0cmluZ0xvY2F0aW9uKQogICAgICwgbV9z
dHJpbmdMZW5ndGgoc3RyaW5nTGVuZ3RoKQpAQCAtMTMwLDggKzEzMCw4IEBAIENvbXBsZXhUZXh0
Q29udHJvbGxlcjo6Q29tcGxleFRleHRSdW46OkMKIAogLy8gTWlzc2luZyBnbHlwaHMgcnVuIGNv
bnN0cnVjdG9yLiBDb3JlIFRleHQgd2lsbCBub3QgZ2VuZXJhdGUgYSBydW4gb2YgbWlzc2luZyBn
bHlwaHMsIGluc3RlYWQgZmFsbGluZyBiYWNrIG9uCiAvLyBnbHlwaHMgZnJvbSBMYXN0UmVzb3J0
LiBXZSB3YW50IHRvIHVzZSB0aGUgcHJpbWFyeSBmb250J3MgbWlzc2luZyBnbHlwaCBpbiBvcmRl
ciB0byBtYXRjaCB0aGUgZmFzdCB0ZXh0IGNvZGUgcGF0aC4KLUNvbXBsZXhUZXh0Q29udHJvbGxl
cjo6Q29tcGxleFRleHRSdW46OkNvbXBsZXhUZXh0UnVuKGNvbnN0IFNpbXBsZUZvbnREYXRhJiBm
b250RGF0YSwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIHN0cmluZ0xvY2F0aW9u
LCBzaXplX3Qgc3RyaW5nTGVuZ3RoLCBib29sIGx0cikKLSAgICA6IG1fZm9udERhdGEoZm9udERh
dGEpCitDb21wbGV4VGV4dENvbnRyb2xsZXI6OkNvbXBsZXhUZXh0UnVuOjpDb21wbGV4VGV4dFJ1
bihjb25zdCBGb250JiBmb250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgc3Ry
aW5nTG9jYXRpb24sIHNpemVfdCBzdHJpbmdMZW5ndGgsIGJvb2wgbHRyKQorICAgIDogbV9mb250
KGZvbnQpCiAgICAgLCBtX2NoYXJhY3RlcnMoY2hhcmFjdGVycykKICAgICAsIG1fc3RyaW5nTG9j
YXRpb24oc3RyaW5nTG9jYXRpb24pCiAgICAgLCBtX3N0cmluZ0xlbmd0aChzdHJpbmdMZW5ndGgp
CkBAIC0xNjMsNyArMTYzLDcgQEAgQ29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dFJ1
bjo6QwogICAgIC8vIFN5bnRoZXNpemUgYSBydW4gb2YgbWlzc2luZyBnbHlwaHMuCiAgICAgbV9n
bHlwaHNWZWN0b3IuZmlsbCgwLCBtX2dseXBoQ291bnQpOwogICAgIG1fZ2x5cGhzID0gbV9nbHlw
aHNWZWN0b3IuZGF0YSgpOwotICAgIG1fYWR2YW5jZXNWZWN0b3IuZmlsbChDR1NpemVNYWtlKG1f
Zm9udERhdGEud2lkdGhGb3JHbHlwaCgwKSwgMCksIG1fZ2x5cGhDb3VudCk7CisgICAgbV9hZHZh
bmNlc1ZlY3Rvci5maWxsKENHU2l6ZU1ha2UobV9mb250LndpZHRoRm9yR2x5cGgoMCksIDApLCBt
X2dseXBoQ291bnQpOwogICAgIG1fYWR2YW5jZXMgPSBtX2FkdmFuY2VzVmVjdG9yLmRhdGEoKTsK
IH0KIApAQCAtMTg0LDExICsxODQsMTEgQEAgc3RhdGljIGNvbnN0IFVuaUNoYXIqIHByb3ZpZGVT
dHJpbmdBbmRBdAogICAgIHJldHVybiBpbmZvLT5jcCArIHN0cmluZ0luZGV4OwogfQogCi12b2lk
IENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Y29sbGVjdENvbXBsZXhUZXh0UnVuc0ZvckNoYXJhY3Rl
cnMoY29uc3QgVUNoYXIqIGNwLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0cmluZ0xvY2F0
aW9uLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEpCit2b2lkIENvbXBsZXhUZXh0Q29u
dHJvbGxlcjo6Y29sbGVjdENvbXBsZXhUZXh0UnVuc0ZvckNoYXJhY3RlcnMoY29uc3QgVUNoYXIq
IGNwLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0cmluZ0xvY2F0aW9uLCBjb25zdCBGb250
KiBmb250KQogewotICAgIGlmICghZm9udERhdGEpIHsKKyAgICBpZiAoIWZvbnQpIHsKICAgICAg
ICAgLy8gQ3JlYXRlIGEgcnVuIG9mIG1pc3NpbmcgZ2x5cGhzIGZyb20gdGhlIHByaW1hcnkgZm9u
dC4KLSAgICAgICAgbV9jb21wbGV4VGV4dFJ1bnMuYXBwZW5kKENvbXBsZXhUZXh0UnVuOjpjcmVh
dGUobV9mb250LnByaW1hcnlGb250RGF0YSgpLCBjcCwgc3RyaW5nTG9jYXRpb24sIGxlbmd0aCwg
bV9ydW4ubHRyKCkpKTsKKyAgICAgICAgbV9jb21wbGV4VGV4dFJ1bnMuYXBwZW5kKENvbXBsZXhU
ZXh0UnVuOjpjcmVhdGUobV9mb250LnByaW1hcnlGb250KCksIGNwLCBzdHJpbmdMb2NhdGlvbiwg
bGVuZ3RoLCBtX3J1bi5sdHIoKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xOTYs
MjYgKzE5NiwyNiBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Y29sbGVjdENvbXBsCiAK
ICAgICBVQ2hhcjMyIGJhc2VDaGFyYWN0ZXIgPSAwOwogICAgIFJldGFpblB0cjxDRkRpY3Rpb25h
cnlSZWY+IHN0cmluZ0F0dHJpYnV0ZXM7Ci0gICAgaWYgKGZvbnREYXRhID09IFNpbXBsZUZvbnRE
YXRhOjpzeXN0ZW1GYWxsYmFjaygpKSB7CisgICAgaWYgKGZvbnQgPT0gRm9udDo6c3lzdGVtRmFs
bGJhY2soKSkgewogICAgICAgICAvLyBGSVhNRTogVGhpcyBjb2RlIHBhdGggZG9lcyBub3Qgc3Vw
cG9ydCBzbWFsbCBjYXBzLgogICAgICAgICBpc1N5c3RlbUZhbGxiYWNrID0gdHJ1ZTsKIAogICAg
ICAgICBVMTZfR0VUKGNwLCAwLCAwLCBsZW5ndGgsIGJhc2VDaGFyYWN0ZXIpOwotICAgICAgICBm
b250RGF0YSA9IG1fZm9udC5mYWxsYmFja1Jhbmdlc0F0KDApLmZvbnREYXRhRm9yQ2hhcmFjdGVy
KGJhc2VDaGFyYWN0ZXIpOwotICAgICAgICBpZiAoIWZvbnREYXRhKQotICAgICAgICAgICAgZm9u
dERhdGEgPSAmbV9mb250LmZhbGxiYWNrUmFuZ2VzQXQoMCkuZm9udERhdGFGb3JGaXJzdFJhbmdl
KCk7CisgICAgICAgIGZvbnQgPSBtX2ZvbnQuZmFsbGJhY2tSYW5nZXNBdCgwKS5mb250Rm9yQ2hh
cmFjdGVyKGJhc2VDaGFyYWN0ZXIpOworICAgICAgICBpZiAoIWZvbnQpCisgICAgICAgICAgICBm
b250ID0gJm1fZm9udC5mYWxsYmFja1Jhbmdlc0F0KDApLmZvbnRGb3JGaXJzdFJhbmdlKCk7CiAK
ICAgICAgICAgUmV0YWluUHRyPFdlYkNhc2NhZGVMaXN0PiBjYXNjYWRlTGlzdCA9IGFkb3B0TlMo
W1tXZWJDYXNjYWRlTGlzdCBhbGxvY10gaW5pdFdpdGhGb250OiZtX2ZvbnQgY2hhcmFjdGVyOmJh
c2VDaGFyYWN0ZXJdKTsKIAotICAgICAgICBzdHJpbmdBdHRyaWJ1dGVzID0gYWRvcHRDRihDRkRp
Y3Rpb25hcnlDcmVhdGVNdXRhYmxlQ29weShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwLCBmb250RGF0
YS0+Z2V0Q0ZTdHJpbmdBdHRyaWJ1dGVzKG1fZm9udC50eXBlc2V0dGluZ0ZlYXR1cmVzKCksIGZv
bnREYXRhLT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpKSkpOworICAgICAgICBzdHJpbmdB
dHRyaWJ1dGVzID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxlQ29weShrQ0ZBbGxv
Y2F0b3JEZWZhdWx0LCAwLCBmb250LT5nZXRDRlN0cmluZ0F0dHJpYnV0ZXMobV9mb250LnR5cGVz
ZXR0aW5nRmVhdHVyZXMoKSwgZm9udC0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSkpKTsK
ICAgICAgICAgc3RhdGljIGNvbnN0IHZvaWQqIGF0dHJpYnV0ZUtleXNbXSA9IHsga0NURm9udENh
c2NhZGVMaXN0QXR0cmlidXRlIH07CiAgICAgICAgIGNvbnN0IHZvaWQqIHZhbHVlc1tdID0geyBj
YXNjYWRlTGlzdC5nZXQoKSB9OwogICAgICAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBh
dHRyaWJ1dGVzID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVs
dCwgYXR0cmlidXRlS2V5cywgdmFsdWVzLCBzaXplb2YoYXR0cmlidXRlS2V5cykgLyBzaXplb2Yo
KmF0dHJpYnV0ZUtleXMpLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBl
RGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CiAgICAgICAgIFJldGFpblB0cjxDVEZvbnREZXNj
cmlwdG9yUmVmPiBmb250RGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0
ZVdpdGhBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMuZ2V0KCkpKTsKLSAgICAgICAgUmV0YWluUHRyPENU
Rm9udFJlZj4gZm9udFdpdGhDYXNjYWRlTGlzdCA9IGFkb3B0Q0YoQ1RGb250Q3JlYXRlQ29weVdp
dGhBdHRyaWJ1dGVzKGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSwgbV9mb250LnBp
eGVsU2l6ZSgpLCAwLCBmb250RGVzY3JpcHRvci5nZXQoKSkpOworICAgICAgICBSZXRhaW5QdHI8
Q1RGb250UmVmPiBmb250V2l0aENhc2NhZGVMaXN0ID0gYWRvcHRDRihDVEZvbnRDcmVhdGVDb3B5
V2l0aEF0dHJpYnV0ZXMoZm9udC0+cGxhdGZvcm1EYXRhKCkuY3RGb250KCksIG1fZm9udC5waXhl
bFNpemUoKSwgMCwgZm9udERlc2NyaXB0b3IuZ2V0KCkpKTsKICAgICAgICAgQ0ZEaWN0aW9uYXJ5
U2V0VmFsdWUoY29uc3RfY2FzdDxDRk11dGFibGVEaWN0aW9uYXJ5UmVmPihzdHJpbmdBdHRyaWJ1
dGVzLmdldCgpKSwga0NURm9udEF0dHJpYnV0ZU5hbWUsIGZvbnRXaXRoQ2FzY2FkZUxpc3QuZ2V0
KCkpOwogICAgIH0gZWxzZQotICAgICAgICBzdHJpbmdBdHRyaWJ1dGVzID0gZm9udERhdGEtPmdl
dENGU3RyaW5nQXR0cmlidXRlcyhtX2ZvbnQudHlwZXNldHRpbmdGZWF0dXJlcygpLCBmb250RGF0
YS0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSk7CisgICAgICAgIHN0cmluZ0F0dHJpYnV0
ZXMgPSBmb250LT5nZXRDRlN0cmluZ0F0dHJpYnV0ZXMobV9mb250LnR5cGVzZXR0aW5nRmVhdHVy
ZXMoKSwgZm9udC0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSk7CiAKICAgICBSZXRhaW5Q
dHI8Q1RMaW5lUmVmPiBsaW5lOwogCkBAIC0yNDgsNTUgKzI0OCw1NSBAQCB2b2lkIENvbXBsZXhU
ZXh0Q29udHJvbGxlcjo6Y29sbGVjdENvbXBsCiAgICAgICAgIENUUnVuUmVmIGN0UnVuID0gc3Rh
dGljX2Nhc3Q8Q1RSdW5SZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgocnVuQXJyYXksIG1fcnVu
Lmx0cigpID8gciA6IHJ1bkNvdW50IC0gMSAtIHIpKTsKICAgICAgICAgQVNTRVJUKENGR2V0VHlw
ZUlEKGN0UnVuKSA9PSBDVFJ1bkdldFR5cGVJRCgpKTsKICAgICAgICAgQ0ZSYW5nZSBydW5SYW5n
ZSA9IENUUnVuR2V0U3RyaW5nUmFuZ2UoY3RSdW4pOwotICAgICAgICBjb25zdCBTaW1wbGVGb250
RGF0YSogcnVuRm9udERhdGEgPSBmb250RGF0YTsKKyAgICAgICAgY29uc3QgRm9udCogcnVuRm9u
dCA9IGZvbnQ7CiAgICAgICAgIGlmIChpc1N5c3RlbUZhbGxiYWNrKSB7CiAgICAgICAgICAgICBD
RkRpY3Rpb25hcnlSZWYgcnVuQXR0cmlidXRlcyA9IENUUnVuR2V0QXR0cmlidXRlcyhjdFJ1bik7
Ci0gICAgICAgICAgICBDVEZvbnRSZWYgcnVuRm9udCA9IHN0YXRpY19jYXN0PENURm9udFJlZj4o
Q0ZEaWN0aW9uYXJ5R2V0VmFsdWUocnVuQXR0cmlidXRlcywga0NURm9udEF0dHJpYnV0ZU5hbWUp
KTsKLSAgICAgICAgICAgIEFTU0VSVChDRkdldFR5cGVJRChydW5Gb250KSA9PSBDVEZvbnRHZXRU
eXBlSUQoKSk7Ci0gICAgICAgICAgICBSZXRhaW5QdHI8Q0ZUeXBlUmVmPiBydW5Gb250RXF1YWxp
dHlPYmplY3QgPSBGb250UGxhdGZvcm1EYXRhOjpvYmplY3RGb3JFcXVhbGl0eUNoZWNrKHJ1bkZv
bnQpOwotICAgICAgICAgICAgaWYgKCFDRkVxdWFsKHJ1bkZvbnRFcXVhbGl0eU9iamVjdC5nZXQo
KSwgZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm9iamVjdEZvckVxdWFsaXR5Q2hlY2soKS5nZXQo
KSkpIHsKKyAgICAgICAgICAgIENURm9udFJlZiBydW5DVEZvbnQgPSBzdGF0aWNfY2FzdDxDVEZv
bnRSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKHJ1bkF0dHJpYnV0ZXMsIGtDVEZvbnRBdHRyaWJ1
dGVOYW1lKSk7CisgICAgICAgICAgICBBU1NFUlQoQ0ZHZXRUeXBlSUQocnVuQ1RGb250KSA9PSBD
VEZvbnRHZXRUeXBlSUQoKSk7CisgICAgICAgICAgICBSZXRhaW5QdHI8Q0ZUeXBlUmVmPiBydW5G
b250RXF1YWxpdHlPYmplY3QgPSBGb250UGxhdGZvcm1EYXRhOjpvYmplY3RGb3JFcXVhbGl0eUNo
ZWNrKHJ1bkNURm9udCk7CisgICAgICAgICAgICBpZiAoIUNGRXF1YWwocnVuRm9udEVxdWFsaXR5
T2JqZWN0LmdldCgpLCBmb250LT5wbGF0Zm9ybURhdGEoKS5vYmplY3RGb3JFcXVhbGl0eUNoZWNr
KCkuZ2V0KCkpKSB7CiAgICAgICAgICAgICAgICAgLy8gQmVnaW4gdHJ5aW5nIHRvIHNlZSBpZiBy
dW5Gb250IG1hdGNoZXMgYW55IG9mIHRoZSBmb250cyBpbiB0aGUgZmFsbGJhY2sgbGlzdC4KIAog
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7ICFtX2ZvbnQuZmFsbGJhY2tSYW5n
ZXNBdChpKS5pc051bGwoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJ1bkZvbnREYXRh
ID0gbV9mb250LmZhbGxiYWNrUmFuZ2VzQXQoaSkuZm9udERhdGFGb3JDaGFyYWN0ZXIoYmFzZUNo
YXJhY3Rlcik7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghcnVuRm9udERhdGEpCisgICAgICAg
ICAgICAgICAgICAgIHJ1bkZvbnQgPSBtX2ZvbnQuZmFsbGJhY2tSYW5nZXNBdChpKS5mb250Rm9y
Q2hhcmFjdGVyKGJhc2VDaGFyYWN0ZXIpOworICAgICAgICAgICAgICAgICAgICBpZiAoIXJ1bkZv
bnQpCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAg
ICAgUmV0YWluUHRyPENGVHlwZVJlZj4gcnVuRm9udEVxdWFsaXR5T2JqZWN0ID0gcnVuRm9udERh
dGEtPnBsYXRmb3JtRGF0YSgpLm9iamVjdEZvckVxdWFsaXR5Q2hlY2soKTsKKyAgICAgICAgICAg
ICAgICAgICAgUmV0YWluUHRyPENGVHlwZVJlZj4gcnVuRm9udEVxdWFsaXR5T2JqZWN0ID0gcnVu
Rm9udC0+cGxhdGZvcm1EYXRhKCkub2JqZWN0Rm9yRXF1YWxpdHlDaGVjaygpOwogICAgICAgICAg
ICAgICAgICAgICBpZiAoQ0ZFcXVhbChydW5Gb250RXF1YWxpdHlPYmplY3QuZ2V0KCksIHJ1bkZv
bnRFcXVhbGl0eU9iamVjdC5nZXQoKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgcnVuRm9udERhdGEgPSAwOworICAgICAgICAgICAgICAgICAg
ICBydW5Gb250ID0gbnVsbHB0cjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
Ly8gSWYgdGhlcmUgaXMgbm8gbWF0Y2hpbmcgZm9udCwgbG9vayB1cCBieSBuYW1lIGluIHRoZSBm
b250IGNhY2hlLgotICAgICAgICAgICAgICAgIGlmICghcnVuRm9udERhdGEpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoIXJ1bkZvbnQpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gUmF0aGVyIHRo
YW4gdXNpbmcgcnVuRm9udCBhcyBhbiBOU0ZvbnQgYW5kIHdyYXBwaW5nIGl0IGluIGEgRm9udFBs
YXRmb3JtRGF0YSwgZ28gdGhyb3VnaAogICAgICAgICAgICAgICAgICAgICAvLyB0aGUgZm9udCBj
YWNoZSBhbmQgdWx0aW1hdGVseSB0aHJvdWdoIE5TRm9udE1hbmFnZXIgaW4gb3JkZXIgdG8gZ2V0
IGFuIE5TRm9udCB3aXRoIHRoZSByaWdodAogICAgICAgICAgICAgICAgICAgICAvLyBOU0ZvbnRS
ZW5kZXJpbmdNb2RlLgotICAgICAgICAgICAgICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+
IGZvbnROYW1lID0gYWRvcHRDRihDVEZvbnRDb3B5UG9zdFNjcmlwdE5hbWUocnVuRm9udCkpOwor
ICAgICAgICAgICAgICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGZvbnROYW1lID0gYWRv
cHRDRihDVEZvbnRDb3B5UG9zdFNjcmlwdE5hbWUocnVuQ1RGb250KSk7CiAgICAgICAgICAgICAg
ICAgICAgIGlmIChDRkVxdWFsKGZvbnROYW1lLmdldCgpLCBDRlNUUigiTGFzdFJlc29ydCIpKSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgbV9jb21wbGV4VGV4dFJ1bnMuYXBwZW5kKENvbXBs
ZXhUZXh0UnVuOjpjcmVhdGUobV9mb250LnByaW1hcnlGb250RGF0YSgpLCBjcCwgc3RyaW5nTG9j
YXRpb24gKyBydW5SYW5nZS5sb2NhdGlvbiwgcnVuUmFuZ2UubGVuZ3RoLCBtX3J1bi5sdHIoKSkp
OworICAgICAgICAgICAgICAgICAgICAgICAgbV9jb21wbGV4VGV4dFJ1bnMuYXBwZW5kKENvbXBs
ZXhUZXh0UnVuOjpjcmVhdGUobV9mb250LnByaW1hcnlGb250KCksIGNwLCBzdHJpbmdMb2NhdGlv
biArIHJ1blJhbmdlLmxvY2F0aW9uLCBydW5SYW5nZS5sZW5ndGgsIG1fcnVuLmx0cigpKSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICBydW5Gb250RGF0YSA9IGZvbnRDYWNoZSgpLmZvbnRGb3JGYW1p
bHkobV9mb250LmZvbnREZXNjcmlwdGlvbigpLCBmb250TmFtZS5nZXQoKSwgZmFsc2UpLmdldCgp
OworICAgICAgICAgICAgICAgICAgICBydW5Gb250ID0gZm9udENhY2hlKCkuZm9udEZvckZhbWls
eShtX2ZvbnQuZm9udERlc2NyaXB0aW9uKCksIGZvbnROYW1lLmdldCgpLCBmYWxzZSkuZ2V0KCk7
CiAjaWYgIVBMQVRGT1JNKElPUykKICAgICAgICAgICAgICAgICAgICAgLy8gQ29yZSBUZXh0IG1h
eSBoYXZlIHVzZWQgYSBmb250IHRoYXQgaXMgbm90IGtub3duIHRvIE5TRm9udE1hbmFnZXIuIElu
IHRoYXQgY2FzZSwgZmFsbCBiYWNrIG9uCiAgICAgICAgICAgICAgICAgICAgIC8vIHVzaW5nIHRo
ZSBmb250IGFzIHJldHVybmVkLCBldmVuIHRob3VnaCBpdCBtYXkgbm90IGhhdmUgdGhlIGJlc3Qg
TlNGb250UmVuZGVyaW5nTW9kZS4KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFydW5Gb250RGF0
YSkgewotICAgICAgICAgICAgICAgICAgICAgICAgRm9udFBsYXRmb3JtRGF0YSBydW5Gb250UGxh
dGZvcm1EYXRhKChOU0ZvbnQgKilydW5Gb250LCBDVEZvbnRHZXRTaXplKHJ1bkZvbnQpLCBtX2Zv
bnQuZm9udERlc2NyaXB0aW9uKCkudXNlUHJpbnRlckZvbnQoKSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBydW5Gb250RGF0YSA9ICZmb250Q2FjaGUoKS5mb250Rm9yUGxhdGZvcm1EYXRhKHJ1
bkZvbnRQbGF0Zm9ybURhdGEpLmdldCgpOworICAgICAgICAgICAgICAgICAgICBpZiAoIXJ1bkZv
bnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEgcnVuRm9udFBs
YXRmb3JtRGF0YSgoTlNGb250ICopcnVuQ1RGb250LCBDVEZvbnRHZXRTaXplKHJ1bkNURm9udCks
IG1fZm9udC5mb250RGVzY3JpcHRpb24oKS51c2VQcmludGVyRm9udCgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJ1bkZvbnQgPSAmZm9udENhY2hlKCkuZm9udEZvclBsYXRmb3JtRGF0YShy
dW5Gb250UGxhdGZvcm1EYXRhKS5nZXQoKTsKICAgICAgICAgICAgICAgICAgICAgfQogI2Vsc2UK
ICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IEp1c3QgYXNzZXJ0IGZvciBub3csIHVudGls
IHdlIGNhbiBkZXZpc2UgYSBiZXR0ZXIgZml4IHRoYXQgd29ya3Mgd2l0aCBpT1MuCi0gICAgICAg
ICAgICAgICAgICAgIEFTU0VSVChydW5Gb250RGF0YSk7CisgICAgICAgICAgICAgICAgICAgIEFT
U0VSVChydW5Gb250KTsKICNlbmRpZgogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBpZiAobV9mYWxsYmFja0ZvbnRzICYmIHJ1bkZvbnREYXRhICE9ICZtX2ZvbnQucHJpbWFyeUZv
bnREYXRhKCkpCi0gICAgICAgICAgICAgICAgICAgIG1fZmFsbGJhY2tGb250cy0+YWRkKHJ1bkZv
bnREYXRhKTsKKyAgICAgICAgICAgICAgICBpZiAobV9mYWxsYmFja0ZvbnRzICYmIHJ1bkZvbnQg
IT0gJm1fZm9udC5wcmltYXJ5Rm9udCgpKQorICAgICAgICAgICAgICAgICAgICBtX2ZhbGxiYWNr
Rm9udHMtPmFkZChydW5Gb250KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBp
ZiAobV9mYWxsYmFja0ZvbnRzICYmIHJ1bkZvbnREYXRhICE9ICZtX2ZvbnQucHJpbWFyeUZvbnRE
YXRhKCkpCi0gICAgICAgICAgICBtX2ZhbGxiYWNrRm9udHMtPmFkZChmb250RGF0YSk7CisgICAg
ICAgIGlmIChtX2ZhbGxiYWNrRm9udHMgJiYgcnVuRm9udCAhPSAmbV9mb250LnByaW1hcnlGb250
KCkpCisgICAgICAgICAgICBtX2ZhbGxiYWNrRm9udHMtPmFkZChmb250KTsKIAotICAgICAgICBt
X2NvbXBsZXhUZXh0UnVucy5hcHBlbmQoQ29tcGxleFRleHRSdW46OmNyZWF0ZShjdFJ1biwgKnJ1
bkZvbnREYXRhLCBjcCwgc3RyaW5nTG9jYXRpb24sIGxlbmd0aCwgcnVuUmFuZ2UpKTsKKyAgICAg
ICAgbV9jb21wbGV4VGV4dFJ1bnMuYXBwZW5kKENvbXBsZXhUZXh0UnVuOjpjcmVhdGUoY3RSdW4s
ICpydW5Gb250LCBjcCwgc3RyaW5nTG9jYXRpb24sIGxlbmd0aCwgcnVuUmFuZ2UpKTsKICAgICB9
CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q2Fj
aGVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0ZvbnRDYWNoZU1hYy5tbQkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDYWNoZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAt
MzMsOCArMzMsOCBAQAogI2lmICFQTEFURk9STShJT1MpCiAKICNpbXBvcnQgIkNvcmVHcmFwaGlj
c1NQSS5oIgorI2ltcG9ydCAiRm9udC5oIgogI2ltcG9ydCAiRm9udENhc2NhZGUuaCIKLSNpbXBv
cnQgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW1wb3J0ICJGb250UGxhdGZvcm1EYXRhLmgiCiAjaW1w
b3J0ICJOU0ZvbnRTUEkuaCIKICNpbXBvcnQgIldlYkNvcmVOU1N0cmluZ0V4dHJhcy5oIgpAQCAt
MzM3LDcgKzMzNyw3IEBAIHN0YXRpYyBib29sIHNob3VsZEF1dG9BY3RpdmF0ZUZvbnRJZk5lZWQK
ICAgICByZXR1cm4ga25vd25GYW1pbGllcy5nZXQoKS5hZGQoZmFtaWx5KS5pc05ld0VudHJ5Owog
fQogCi1SZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6c3lzdGVtRmFsbGJhY2tGb3JD
aGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IFNpbXBs
ZUZvbnREYXRhKiBvcmlnaW5hbEZvbnREYXRhLCBib29sIGlzUGxhdGZvcm1Gb250LCBjb25zdCBV
Q2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKK1JlZlB0cjxGb250PiBGb250Q2FjaGU6OnN5
c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0
aW9uLCBjb25zdCBGb250KiBvcmlnaW5hbEZvbnREYXRhLCBib29sIGlzUGxhdGZvcm1Gb250LCBj
b25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKIHsKICAgICBVQ2hhcjMyIGNoYXJh
Y3RlcjsKICAgICBVMTZfR0VUKGNoYXJhY3RlcnMsIDAsIDAsIGxlbmd0aCwgY2hhcmFjdGVyKTsK
QEAgLTQwNSwzNCArNDA1LDM1IEBAIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpz
eXN0ZW0KICAgICByZXR1cm4gZm9udEZvclBsYXRmb3JtRGF0YShhbHRlcm5hdGVGb250KTsKIH0K
IAotUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OnNpbWlsYXJGb250UGxhdGZvcm1E
YXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCitSZWZQdHI8Rm9udD4gRm9u
dENhY2hlOjpzaW1pbGFyRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQog
ewogICAgIC8vIEF0dGVtcHQgdG8gZmluZCBhbiBhcHByb3ByaWF0ZSBmb250IHVzaW5nIGEgbWF0
Y2ggYmFzZWQgb24gCiAgICAgLy8gdGhlIHByZXNlbmNlIG9mIGtleXdvcmRzIGluIHRoZSB0aGUg
cmVxdWVzdGVkIG5hbWVzLiAgRm9yIGV4YW1wbGUsIHdlJ2xsCiAgICAgLy8gbWF0Y2ggYW55IG5h
bWUgdGhhdCBjb250YWlucyAiQXJhYmljIiB0byBHZWV6YSBQcm8uCi0gICAgUmVmUHRyPFNpbXBs
ZUZvbnREYXRhPiBzaW1wbGVGb250RGF0YTsKKyAgICBSZWZQdHI8Rm9udD4gZm9udDsKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVzY3JpcHRpb24uZmFtaWx5Q291bnQoKTsgKytpKSB7
CiAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5ID0gZGVzY3JpcHRpb24uZmFtaWx5
QXQoaSk7CiAgICAgICAgIGlmIChmYW1pbHkuaXNFbXB0eSgpKQogICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgIHN0YXRpYyBTdHJpbmcqIG1hdGNoV29yZHNbM10gPSB7IG5ldyBTdHJpbmco
IkFyYWJpYyIpLCBuZXcgU3RyaW5nKCJQYXNodG8iKSwgbmV3IFN0cmluZygiVXJkdSIpIH07CiAg
ICAgICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIGdlZXph
U3RyLCAoIkdlZXphIFBybyIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsK
LSAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCAzICYmICFzaW1wbGVGb250RGF0YTsgKytqKQor
ICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDMgJiYgIWZvbnQ7ICsraikgewogICAgICAgICAg
ICAgaWYgKGZhbWlseS5jb250YWlucygqbWF0Y2hXb3Jkc1tqXSwgZmFsc2UpKQotICAgICAgICAg
ICAgICAgIHNpbXBsZUZvbnREYXRhID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgZ2VlemFT
dHIpOworICAgICAgICAgICAgICAgIGZvbnQgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBn
ZWV6YVN0cik7CisgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIHNpbXBsZUZvbnREYXRhLnJl
bGVhc2UoKTsKKyAgICByZXR1cm4gZm9udC5yZWxlYXNlKCk7CiB9CiAKLVJlZjxTaW1wbGVGb250
RGF0YT4gRm9udENhY2hlOjpsYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZm9udERlc2NyaXB0aW9uKQorUmVmPEZvbnQ+IEZvbnRDYWNoZTo6bGFzdFJlc29ydEZh
bGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikKIHsKICAg
ICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCB0aW1lc1N0ciwg
KCJUaW1lcyIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKIAogICAgIC8v
IEZJWE1FOiBXb3VsZCBiZSBldmVuIGJldHRlciB0byBzb21laG93IGdldCB0aGUgdXNlcidzIGRl
ZmF1bHQgZm9udCBoZXJlLiAgRm9yIG5vdyB3ZSdsbCBwaWNrCiAgICAgLy8gdGhlIGRlZmF1bHQg
dGhhdCB0aGUgdXNlciB3b3VsZCBnZXQgd2l0aG91dCBjaGFuZ2luZyBhbnkgcHJlZnMuCi0gICAg
UmVmUHRyPFNpbXBsZUZvbnREYXRhPiBzaW1wbGVGb250RGF0YSA9IGZvbnRGb3JGYW1pbHkoZm9u
dERlc2NyaXB0aW9uLCB0aW1lc1N0ciwgZmFsc2UpOwotICAgIGlmIChzaW1wbGVGb250RGF0YSkK
LSAgICAgICAgcmV0dXJuICpzaW1wbGVGb250RGF0YTsKKyAgICBSZWZQdHI8Rm9udD4gZm9udCA9
IGZvbnRGb3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCB0aW1lc1N0ciwgZmFsc2UpOworICAgIGlm
IChmb250KQorICAgICAgICByZXR1cm4gKmZvbnQ7CiAKICAgICAvLyBUaGUgVGltZXMgZmFsbGJh
Y2sgd2lsbCBhbG1vc3QgYWx3YXlzIHdvcmssIGJ1dCBpbiB0aGUgaGlnaGx5IHVudXN1YWwgY2Fz
ZSB3aGVyZQogICAgIC8vIHRoZSB1c2VyIGRvZXNuJ3QgaGF2ZSBpdCwgd2UgZmFsbCBiYWNrIG9u
IEx1Y2lkYSBHcmFuZGUgYmVjYXVzZSB0aGF0J3MKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL21hYy9HbHlwaFBhZ2VNYWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HbHlwaFBhZ2VNYWMuY3BwCShyZXZpc2lvbiAx
Nzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR2x5cGhQYWdl
TWFjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsOCArMzEsOCBAQAogCiAjaW5jbHVkZSAiQ29y
ZUdyYXBoaWNzU1BJLmgiCiAjaW5jbHVkZSAiQ29yZVRleHRTUEkuaCIKKyNpbmNsdWRlICJGb250
LmgiCiAjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5o
IgogI2luY2x1ZGUgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKICNpZiAhUExBVEZPUk0oSU9T
KQogI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgpA
QCAtNDAsNyArNDAsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBib29sIHNo
b3VsZFVzZUNvcmVUZXh0KGNvbnN0IFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0
aCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQorc3RhdGljIGJvb2wgc2hvdWxkVXNl
Q29yZVRleHQoY29uc3QgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25z
dCBGb250KiBmb250RGF0YSkKIHsKICAgICBpZiAoZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLmlz
Q29tcG9zaXRlRm9udFJlZmVyZW5jZSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTU1LDcg
KzU1LDcgQEAgc3RhdGljIGJvb2wgc2hvdWxkVXNlQ29yZVRleHQoY29uc3QgVUNoYQogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotYm9vbCBHbHlwaFBhZ2U6Om1heVVzZU1peGVkRm9udERhdGFXaGVu
RmlsbGluZyhjb25zdCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0
IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSkKK2Jvb2wgR2x5cGhQYWdlOjptYXlVc2VNaXhlZEZv
bnRzV2hlbkZpbGxpbmcoY29uc3QgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3Ro
LCBjb25zdCBGb250KiBmb250RGF0YSkKIHsKICNpZiBVU0UoQVBQS0lUKQogICAgIC8vIEZJWE1F
OiBUaGlzIGlzIG9ubHkgcmVhbGx5IG5lZWRlZCBmb3IgY29tcG9zaXRlIGZvbnQgcmVmZXJlbmNl
cy4KQEAgLTY4LDcgKzY4LDcgQEAgYm9vbCBHbHlwaFBhZ2U6Om1heVVzZU1peGVkRm9udERhdGFX
aGVuRgogI2VuZGlmCiB9CiAKLWJvb2wgR2x5cGhQYWdlOjpmaWxsKHVuc2lnbmVkIG9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNv
bnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSkKK2Jvb2wgR2x5cGhQYWdlOjpmaWxsKHVuc2ln
bmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZm
ZXJMZW5ndGgsIGNvbnN0IEZvbnQqIGZvbnREYXRhKQogewogICAgIGJvb2wgaGF2ZUdseXBocyA9
IGZhbHNlOwogCkBAIC0xNjMsNyArMTYzLDcgQEAgYm9vbCBHbHlwaFBhZ2U6OmZpbGwodW5zaWdu
ZWQgb2Zmc2V0LCB1bgogICAgICAgICAgICAgICAgICAgICB9CiAjaWYgVVNFKEFQUEtJVCkKICAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBjb25zdCBTaW1wbGVG
b250RGF0YSogcnVuU2ltcGxlID0gZm9udERhdGEtPmNvbXBvc2l0ZUZvbnRSZWZlcmVuY2VGb250
RGF0YSgoTlNGb250ICopcnVuRm9udCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZvbnQq
IHJ1blNpbXBsZSA9IGZvbnREYXRhLT5jb21wb3NpdGVGb250UmVmZXJlbmNlRm9udCgoTlNGb250
ICopcnVuRm9udCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChydW5TaW1wbGUpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IGdseXBoQ291bnQ7ICsr
aSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJpbmdJbmRpY2VzW2ldID49
IHN0YXRpY19jYXN0PENGSW5kZXg+KGJ1ZmZlckxlbmd0aCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YUNvcmVUZXh0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9u
dERhdGFDb3JlVGV4dC5jcHAJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YUNvcmVUZXh0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjUsNyArMjUsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJTaW1wbGVGb250RGF0YS5oIgorI2luY2x1ZGUgIkZvbnQuaCIKIAogI2lmICFQTEFURk9S
TShJT1MpCiAjaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2Vz
Lmg+CkBAIC0zNSw3ICszNSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ0ZEaWN0aW9u
YXJ5UmVmIFNpbXBsZUZvbnREYXRhOjpnZXRDRlN0cmluZ0F0dHJpYnV0ZXMoVHlwZXNldHRpbmdG
ZWF0dXJlcyB0eXBlc2V0dGluZ0ZlYXR1cmVzLCBGb250T3JpZW50YXRpb24gb3JpZW50YXRpb24p
IGNvbnN0CitDRkRpY3Rpb25hcnlSZWYgRm9udDo6Z2V0Q0ZTdHJpbmdBdHRyaWJ1dGVzKFR5cGVz
ZXR0aW5nRmVhdHVyZXMgdHlwZXNldHRpbmdGZWF0dXJlcywgRm9udE9yaWVudGF0aW9uIG9yaWVu
dGF0aW9uKSBjb25zdAogewogICAgIHVuc2lnbmVkIGtleSA9IHR5cGVzZXR0aW5nRmVhdHVyZXMg
KyAxOwogICAgIEhhc2hNYXA8dW5zaWduZWQsIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+Pjo6
QWRkUmVzdWx0IGFkZFJlc3VsdCA9IG1fQ0ZTdHJpbmdBdHRyaWJ1dGVzLmFkZChrZXksIFJldGFp
blB0cjxDRkRpY3Rpb25hcnlSZWY+KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YU1hYy5tbQkocmV2aXNp
b24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBs
ZUZvbnREYXRhTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiAgKi8KIAog
I2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJTaW1wbGVGb250RGF0YS5oIgorI2ltcG9ydCAi
Rm9udC5oIgogCiAjaW1wb3J0ICJCbG9ja0V4Y2VwdGlvbnMuaCIKICNpbXBvcnQgIkNvbG9yLmgi
CkBAIC03MSw3ICs3MSw3IEBAIHN0YXRpYyBib29sIGZvbnRIYXNWZXJ0aWNhbEdseXBocyhDVEZv
bnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBib29sIGluaXRGb250RGF0YShTaW1w
bGVGb250RGF0YSogZm9udERhdGEpCitzdGF0aWMgYm9vbCBpbml0Rm9udERhdGEoRm9udCogZm9u
dERhdGEpCiB7CiAgICAgaWYgKCFmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkuY2dGb250KCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTg1LDcgKzg1LDcgQEAgc3RhdGljIE5TU3RyaW5nICp3
ZWJGYWxsYmFja0ZvbnRGYW1pbHkodgogICAgIHJldHVybiB3ZWJGYWxsYmFja0ZvbnRGYW1pbHk7
CiB9CiAKLWNvbnN0IFNpbXBsZUZvbnREYXRhKiBTaW1wbGVGb250RGF0YTo6Y29tcG9zaXRlRm9u
dFJlZmVyZW5jZUZvbnREYXRhKE5TRm9udCAqa2V5KSBjb25zdAorY29uc3QgRm9udCogRm9udDo6
Y29tcG9zaXRlRm9udFJlZmVyZW5jZUZvbnQoTlNGb250ICprZXkpIGNvbnN0CiB7CiAgICAgaWYg
KCFrZXkgfHwgQ0ZFcXVhbChhZG9wdENGKENURm9udENvcHlQb3N0U2NyaXB0TmFtZShDVEZvbnRS
ZWYoa2V5KSkpLmdldCgpLCBDRlNUUigiTGFzdFJlc29ydCIpKSkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CkBAIC0xMDMsMTIgKzEwMywxMiBAQCBjb25zdCBTaW1wbGVGb250RGF0YSogU2ltcGxl
Rm9udERhdGE6OmNvCiAgICAgICAgIGJvb2wgc3ludGhldGljT2JsaXF1ZSA9IHBsYXRmb3JtRGF0
YSgpLnN5bnRoZXRpY09ibGlxdWUoKSAmJiAhKHRyYWl0cyAmIGtDVEZvbnRJdGFsaWNUcmFpdCk7
CiAKICAgICAgICAgRm9udFBsYXRmb3JtRGF0YSBzdWJzdGl0dXRlUGxhdGZvcm0oc3Vic3RpdHV0
ZUZvbnQsIHBsYXRmb3JtRGF0YSgpLnNpemUoKSwgaXNVc2luZ1ByaW50ZXJGb250LCBzeW50aGV0
aWNCb2xkLCBzeW50aGV0aWNPYmxpcXVlLCBwbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpLCBw
bGF0Zm9ybURhdGEoKS53aWR0aFZhcmlhbnQoKSk7Ci0gICAgICAgIGFkZFJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUgPSBTaW1wbGVGb250RGF0YTo6Y3JlYXRlKHN1YnN0aXR1dGVQbGF0Zm9ybSwgaXND
dXN0b21Gb250KCkpOworICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gRm9udDo6
Y3JlYXRlKHN1YnN0aXR1dGVQbGF0Zm9ybSwgaXNDdXN0b21Gb250KCkpOwogICAgIH0KICAgICBy
ZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKIH0KIAotdm9pZCBTaW1wbGVG
b250RGF0YTo6cGxhdGZvcm1Jbml0KCkKK3ZvaWQgRm9udDo6cGxhdGZvcm1Jbml0KCkKIHsKICAg
ICBtX3N5bnRoZXRpY0JvbGRPZmZzZXQgPSBtX3BsYXRmb3JtRGF0YS5tX3N5bnRoZXRpY0JvbGQg
PyAxLjBmIDogMC5mOwogCkBAIC0yMjYsNyArMjI2LDcgQEAgdm9pZCBTaW1wbGVGb250RGF0YTo6
cGxhdGZvcm1Jbml0KCkKICAgICAgICAgZWxzZQogICAgICAgICAgICAgeEhlaWdodCA9IHNjYWxl
RW1Ub1VuaXRzKENHRm9udEdldFhIZWlnaHQobV9wbGF0Zm9ybURhdGEuY2dGb250KCkpLCB1bml0
c1BlckVtKSAqIHBvaW50U2l6ZTsKICAgICB9IGVsc2UKLSAgICAgICAgeEhlaWdodCA9IHZlcnRp
Y2FsUmlnaHRPcmllbnRhdGlvbkZvbnREYXRhKCktPmZvbnRNZXRyaWNzKCkueEhlaWdodCgpOwor
ICAgICAgICB4SGVpZ2h0ID0gdmVydGljYWxSaWdodE9yaWVudGF0aW9uRm9udCgpLT5mb250TWV0
cmljcygpLnhIZWlnaHQoKTsKIAogICAgIG1fZm9udE1ldHJpY3Muc2V0VW5pdHNQZXJFbSh1bml0
c1BlckVtKTsKICAgICBtX2ZvbnRNZXRyaWNzLnNldEFzY2VudChhc2NlbnQpOwpAQCAtMjQxLDcg
KzI0MSw3IEBAIHN0YXRpYyBDRkRhdGFSZWYgY29weUZvbnRUYWJsZUZvclRhZyhGb24KICAgICBy
ZXR1cm4gQ0dGb250Q29weVRhYmxlRm9yVGFnKHBsYXRmb3JtRGF0YS5jZ0ZvbnQoKSwgdGFibGVO
YW1lKTsKIH0KIAotdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1DaGFyV2lkdGhJbml0KCkK
K3ZvaWQgRm9udDo6cGxhdGZvcm1DaGFyV2lkdGhJbml0KCkKIHsKICAgICBtX2F2Z0NoYXJXaWR0
aCA9IDA7CiAgICAgbV9tYXhDaGFyV2lkdGggPSAwOwpAQCAtMjY5LDE3ICsyNjksMTcgQEAgdm9p
ZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1DaGFyV2lkdGhJbgogfQogI2VuZGlmIC8vIFVTRShB
UFBLSVQpCiAKLXZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtRGVzdHJveSgpCit2b2lkIEZv
bnQ6OnBsYXRmb3JtRGVzdHJveSgpCiB7CiB9CiAKICNpZiAhUExBVEZPUk0oSU9TKQotUGFzc1Jl
ZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQ3JlYXRlU2NhbGVk
Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNj
YWxlRmFjdG9yKSBjb25zdAorUGFzc1JlZlB0cjxGb250PiBGb250OjpwbGF0Zm9ybUNyZWF0ZVNj
YWxlZEZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNj
YWxlRmFjdG9yKSBjb25zdAogewogICAgIGlmIChpc0N1c3RvbUZvbnQoKSkgewogICAgICAgICBG
b250UGxhdGZvcm1EYXRhIHNjYWxlZEZvbnREYXRhKG1fcGxhdGZvcm1EYXRhKTsKICAgICAgICAg
c2NhbGVkRm9udERhdGEubV9zaXplID0gc2NhbGVkRm9udERhdGEubV9zaXplICogc2NhbGVGYWN0
b3I7Ci0gICAgICAgIHJldHVybiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlKHNjYWxlZEZvbnREYXRh
LCB0cnVlLCBmYWxzZSk7CisgICAgICAgIHJldHVybiBGb250OjpjcmVhdGUoc2NhbGVkRm9udERh
dGEsIHRydWUsIGZhbHNlKTsKICAgICB9CiAKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElP
TlM7CkBAIC0zMTAsNyArMzEwLDcgQEAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxl
Rm9udERhdAogICAgIHJldHVybiAwOwogfQogCi12b2lkIFNpbXBsZUZvbnREYXRhOjpkZXRlcm1p
bmVQaXRjaCgpCit2b2lkIEZvbnQ6OmRldGVybWluZVBpdGNoKCkKIHsKICAgICBOU0ZvbnQqIGYg
PSBtX3BsYXRmb3JtRGF0YS5uc0ZvbnQoKTsKICAgICAvLyBTcGVjaWFsIGNhc2UgT3Nha2EtTW9u
by4KQEAgLTMzMyw3ICszMzMsNyBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpkZXRlcm1pbmVQaXRj
aCgpCiB9CiAjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAotRmxvYXRSZWN0IFNpbXBsZUZvbnRE
YXRhOjpwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAorRmxvYXRSZWN0
IEZvbnQ6OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CiB7CiAgICAg
RmxvYXRSZWN0IGJvdW5kaW5nQm94OwogICAgIGJvdW5kaW5nQm94ID0gQ1RGb250R2V0Qm91bmRp
bmdSZWN0c0ZvckdseXBocyhtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSwgcGxhdGZvcm1EYXRhKCku
b3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCA/IGtDVEZvbnRWZXJ0aWNhbE9yaWVudGF0aW9uIDog
a0NURm9udEhvcml6b250YWxPcmllbnRhdGlvbiwgJmdseXBoLCAwLCAxKTsKQEAgLTM0NSw3ICsz
NDUsNyBAQCBGbG9hdFJlY3QgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQm91bmRzCiB9CiAKICNp
ZiBQTEFURk9STShNQUMpCi1pbmxpbmUgQ0dGb250UmVuZGVyaW5nU3R5bGUgU2ltcGxlRm9udERh
dGE6OnJlbmRlcmluZ1N0eWxlKCkgY29uc3QKK2lubGluZSBDR0ZvbnRSZW5kZXJpbmdTdHlsZSBG
b250OjpyZW5kZXJpbmdTdHlsZSgpIGNvbnN0CiB7CiAgICAgQ0dGb250UmVuZGVyaW5nU3R5bGUg
c3R5bGUgPSBrQ0dGb250UmVuZGVyaW5nU3R5bGVBbnRpYWxpYXNpbmcgfCBrQ0dGb250UmVuZGVy
aW5nU3R5bGVTdWJwaXhlbFBvc2l0aW9uaW5nIHwga0NHRm9udFJlbmRlcmluZ1N0eWxlU3VicGl4
ZWxRdWFudGl6YXRpb247CiAgICAgTlNGb250ICpmb250ID0gcGxhdGZvcm1EYXRhKCkubnNGb250
KCk7CkBAIC0zNjQsNyArMzY0LDcgQEAgaW5saW5lIENHRm9udFJlbmRlcmluZ1N0eWxlIFNpbXBs
ZUZvbnREYQogICAgIHJldHVybiBzdHlsZTsKIH0KIAotaW5saW5lIGJvb2wgU2ltcGxlRm9udERh
dGE6OmFkdmFuY2VGb3JDb2xvckJpdG1hcEZvbnQoR2x5cGggZ2x5cGgsIENHU2l6ZSYgYWR2YW5j
ZSkgY29uc3QKK2lubGluZSBib29sIEZvbnQ6OmFkdmFuY2VGb3JDb2xvckJpdG1hcEZvbnQoR2x5
cGggZ2x5cGgsIENHU2l6ZSYgYWR2YW5jZSkgY29uc3QKIHsKICAgICBOU0ZvbnQgKmZvbnQgPSBw
bGF0Zm9ybURhdGEoKS5uc0ZvbnQoKTsKICAgICBpZiAoIWZvbnQgfHwgIXBsYXRmb3JtRGF0YSgp
LmlzQ29sb3JCaXRtYXBGb250KCkpCkBAIC0zOTQsNyArMzk0LDcgQEAgc3RhdGljIGlubGluZSBi
b29sIGlzRW1vamkoY29uc3QgRm9udFBsYQogI2VuZGlmCiB9CiAKLWlubGluZSBib29sIFNpbXBs
ZUZvbnREYXRhOjpjYW5Vc2VGYXN0R2x5cGhBZHZhbmNlR2V0dGVyKEdseXBoIGdseXBoLCBDR1Np
emUmIGFkdmFuY2UsIGJvb2wmIHBvcHVsYXRlZEFkdmFuY2UpIGNvbnN0CitpbmxpbmUgYm9vbCBG
b250OjpjYW5Vc2VGYXN0R2x5cGhBZHZhbmNlR2V0dGVyKEdseXBoIGdseXBoLCBDR1NpemUmIGFk
dmFuY2UsIGJvb2wmIHBvcHVsYXRlZEFkdmFuY2UpIGNvbnN0CiB7CiAgICAgLy8gRmFzdCBnZXR0
ZXIgZG9lc24ndCB0YWtlIGN1c3RvbSB0cmFja2luZyBpbnRvIGFjY291bnQKICAgICBpZiAoaGFz
Q3VzdG9tVHJhY2tpbmcocGxhdGZvcm1EYXRhKCkuY3RGb250KCkpKQpAQCAtNDEwLDcgKzQxMCw3
IEBAIGlubGluZSBib29sIFNpbXBsZUZvbnREYXRhOjpjYW5Vc2VGYXN0R2wKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotZmxvYXQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtV2lkdGhGb3JHbHlwaChH
bHlwaCBnbHlwaCkgY29uc3QKK2Zsb2F0IEZvbnQ6OnBsYXRmb3JtV2lkdGhGb3JHbHlwaChHbHlw
aCBnbHlwaCkgY29uc3QKIHsKICAgICBDR1NpemUgYWR2YW5jZSA9IENHU2l6ZVplcm87CiAgICAg
Ym9vbCBob3Jpem9udGFsID0gcGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBIb3Jpem9u
dGFsOwpAQCAtNDQ2LDcgKzQ0Niw3IEBAIHN0YXRpYyBjb25zdCBVbmlDaGFyKiBwcm92aWRlU3Ry
aW5nQW5kQXQKICAgICByZXR1cm4gaW5mby0+Y2hhcmFjdGVycyArIHN0cmluZ0luZGV4OwogfQog
Ci1ib29sIFNpbXBsZUZvbnREYXRhOjpjYW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5j
ZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkgY29uc3QKK2Jvb2wgRm9u
dDo6Y2FuUmVuZGVyQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY29uc3QgVUNoYXIqIGNoYXJh
Y3RlcnMsIHNpemVfdCBsZW5ndGgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3Bl
blR5cGVNYXRoRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVNYXRoRGF0YS5jcHAJKHJldmlzaW9uIDE3ODg1NykK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlTWF0
aERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMiArMjYsMTIgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJPcGVuVHlwZU1hdGhEYXRhLmgiCiAKKyNpbmNsdWRlICJGb250
LmgiCiAjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgogI2lmIEVOQUJMRShPUEVOVFlQRV9N
QVRIKQogI2luY2x1ZGUgIk9wZW5UeXBlVHlwZXMuaCIKICNlbmRpZgogI2luY2x1ZGUgIlNoYXJl
ZEJ1ZmZlci5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAKIHVzaW5nIG5hbWVzcGFj
ZSBzdGQ7CiAKQEAgLTIzNSw5ICsyMzUsOSBAQCBzdHJ1Y3QgTUFUSFRhYmxlIDogVGFibGVCYXNl
IHsKICNlbmRpZiAvLyBFTkFCTEUoT1BFTlRZUEVfTUFUSCkKIAogI2lmIEVOQUJMRShPUEVOVFlQ
RV9NQVRIKQotT3BlblR5cGVNYXRoRGF0YTo6T3BlblR5cGVNYXRoRGF0YShjb25zdCBGb250UGxh
dGZvcm1EYXRhJiBmb250RGF0YSkKK09wZW5UeXBlTWF0aERhdGE6Ok9wZW5UeXBlTWF0aERhdGEo
Y29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZm9udCkKIHsKLSAgICBtX21hdGhCdWZmZXIgPSBmb250
RGF0YS5vcGVuVHlwZVRhYmxlKE9wZW5UeXBlOjpNQVRIVGFnKTsKKyAgICBtX21hdGhCdWZmZXIg
PSBmb250Lm9wZW5UeXBlVGFibGUoT3BlblR5cGU6Ok1BVEhUYWcpOwogICAgIGNvbnN0IE9wZW5U
eXBlOjpNQVRIVGFibGUqIG1hdGggPSBPcGVuVHlwZTo6dmFsaWRhdGVUYWJsZTxPcGVuVHlwZTo6
TUFUSFRhYmxlPihtX21hdGhCdWZmZXIpOwogICAgIGlmICghbWF0aCkgewogICAgICAgICBtX21h
dGhCdWZmZXIgPSBudWxscHRyOwpAQCAtMjY1LDcgKzI2NSw3IEBAIE9wZW5UeXBlTWF0aERhdGE6
On5PcGVuVHlwZU1hdGhEYXRhKCkKIH0KIAogI2lmIEVOQUJMRShPUEVOVFlQRV9NQVRIKQotZmxv
YXQgT3BlblR5cGVNYXRoRGF0YTo6Z2V0TWF0aENvbnN0YW50KGNvbnN0IFNpbXBsZUZvbnREYXRh
JiBmb250LCBNYXRoQ29uc3RhbnQgY29uc3RhbnQpIGNvbnN0CitmbG9hdCBPcGVuVHlwZU1hdGhE
YXRhOjpnZXRNYXRoQ29uc3RhbnQoY29uc3QgRm9udCYgZm9udCwgTWF0aENvbnN0YW50IGNvbnN0
YW50KSBjb25zdAogewogICAgIGludDMyX3QgdmFsdWUgPSAwOwogCkBAIC0yODgsNyArMjg4LDcg
QEAgZmxvYXQgT3BlblR5cGVNYXRoRGF0YTo6Z2V0TWF0aENvbnN0YW50KAogCiAgICAgcmV0dXJu
IHZhbHVlICogZm9udC5zaXplUGVyVW5pdCgpOwogI2Vsc2UKLWZsb2F0IE9wZW5UeXBlTWF0aERh
dGE6OmdldE1hdGhDb25zdGFudChjb25zdCBTaW1wbGVGb250RGF0YSYsIE1hdGhDb25zdGFudCkg
Y29uc3QKK2Zsb2F0IE9wZW5UeXBlTWF0aERhdGE6OmdldE1hdGhDb25zdGFudChjb25zdCBGb250
JiwgTWF0aENvbnN0YW50KSBjb25zdAogewogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
IHJldHVybiAwOwpAQCAtMjk2LDcgKzI5Niw3IEBAIGZsb2F0IE9wZW5UeXBlTWF0aERhdGE6Omdl
dE1hdGhDb25zdGFudCgKIH0KIAogI2lmIEVOQUJMRShPUEVOVFlQRV9NQVRIKQotZmxvYXQgT3Bl
blR5cGVNYXRoRGF0YTo6Z2V0SXRhbGljQ29ycmVjdGlvbihjb25zdCBTaW1wbGVGb250RGF0YSYg
Zm9udCwgR2x5cGggZ2x5cGgpIGNvbnN0CitmbG9hdCBPcGVuVHlwZU1hdGhEYXRhOjpnZXRJdGFs
aWNDb3JyZWN0aW9uKGNvbnN0IEZvbnQmIGZvbnQsIEdseXBoIGdseXBoKSBjb25zdAogewogICAg
IGNvbnN0IE9wZW5UeXBlOjpNQVRIVGFibGUqIG1hdGggPSBPcGVuVHlwZTo6dmFsaWRhdGVUYWJs
ZTxPcGVuVHlwZTo6TUFUSFRhYmxlPihtX21hdGhCdWZmZXIpOwogICAgIEFTU0VSVChtYXRoKTsK
QEAgLTMxMCw3ICszMTAsNyBAQCBmbG9hdCBPcGVuVHlwZU1hdGhEYXRhOjpnZXRJdGFsaWNDb3Jy
ZWN0CiAKICAgICByZXR1cm4gbWF0aEl0YWxpY3NDb3JyZWN0aW9uSW5mby0+Z2V0SXRhbGljQ29y
cmVjdGlvbigqbV9tYXRoQnVmZmVyLCBnbHlwaCkgKiBmb250LnNpemVQZXJVbml0KCk7CiAjZWxz
ZQotZmxvYXQgT3BlblR5cGVNYXRoRGF0YTo6Z2V0SXRhbGljQ29ycmVjdGlvbihjb25zdCBTaW1w
bGVGb250RGF0YSYsIEdseXBoKSBjb25zdAorZmxvYXQgT3BlblR5cGVNYXRoRGF0YTo6Z2V0SXRh
bGljQ29ycmVjdGlvbihjb25zdCBGb250JiwgR2x5cGgpIGNvbnN0CiB7CiAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZU1hdGhEYXRhLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVNYXRoRGF0YS5o
CShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVudHlwZS9PcGVuVHlwZU1hdGhEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEzICszNSwx
MyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZvbnRQbGF0Zm9ybURhdGE7CiBjbGFz
cyBTaGFyZWRCdWZmZXI7Ci1jbGFzcyBTaW1wbGVGb250RGF0YTsKK2NsYXNzIEZvbnQ7CiAKIGNs
YXNzIE9wZW5UeXBlTWF0aERhdGEgOiBwdWJsaWMgUmVmQ291bnRlZDxPcGVuVHlwZU1hdGhEYXRh
PiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8T3BlblR5cGVNYXRoRGF0YT4gY3Jl
YXRlKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnREYXRhKQorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPE9wZW5UeXBlTWF0aERhdGE+IGNyZWF0ZShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBmb250
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBPcGVuVHlwZU1hdGhEYXRhKGZv
bnREYXRhKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgT3BlblR5cGVNYXRoRGF0YShm
b250KSk7CiAgICAgfQogICAgIH5PcGVuVHlwZU1hdGhEYXRhKCk7CiAKQEAgLTExMyw4ICsxMTMs
OCBAQCBwdWJsaWM6CiAgICAgICAgIGJvb2wgaXNFeHRlbmRlcjsKICAgICB9OwogCi0gICAgZmxv
YXQgZ2V0TWF0aENvbnN0YW50KGNvbnN0IFNpbXBsZUZvbnREYXRhJiwgTWF0aENvbnN0YW50KSBj
b25zdDsKLSAgICBmbG9hdCBnZXRJdGFsaWNDb3JyZWN0aW9uKGNvbnN0IFNpbXBsZUZvbnREYXRh
JiwgR2x5cGgpIGNvbnN0OworICAgIGZsb2F0IGdldE1hdGhDb25zdGFudChjb25zdCBGb250Jiwg
TWF0aENvbnN0YW50KSBjb25zdDsKKyAgICBmbG9hdCBnZXRJdGFsaWNDb3JyZWN0aW9uKGNvbnN0
IEZvbnQmLCBHbHlwaCkgY29uc3Q7CiAgICAgdm9pZCBnZXRNYXRoVmFyaWFudHMoR2x5cGgsIGJv
b2wgaXNWZXJ0aWNhbCwgVmVjdG9yPEdseXBoPiYgc2l6ZVZhcmlhbnRzLCBWZWN0b3I8QXNzZW1i
bHlQYXJ0PiYgYXNzZW1ibHlQYXJ0cykgY29uc3Q7CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVZlcnRpY2FsRGF0YS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5
cGUvT3BlblR5cGVWZXJ0aWNhbERhdGEuY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVZlcnRpY2FsRGF0YS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDEwICsyNywxMCBAQAogI2luY2x1ZGUgIk9wZW5UeXBl
VmVydGljYWxEYXRhLmgiCiAKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJGb250
LmgiCiAjaW5jbHVkZSAiR2x5cGhQYWdlLmgiCiAjaW5jbHVkZSAiT3BlblR5cGVUeXBlcy5oIgog
I2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwpAQCAtNDc5LDcg
KzQ3OSw3IEBAIHZvaWQgT3BlblR5cGVWZXJ0aWNhbERhdGE6OmxvYWRWZXJ0aWNhbEcKICAgICAg
ICAgZ3N1Yi0+Z2V0VmVydGljYWxHbHlwaFN1YnN0aXR1dGlvbnMoJm1fdmVydGljYWxHbHlwaE1h
cCwgKmJ1ZmZlci5nZXQoKSk7CiB9CiAKLWZsb2F0IE9wZW5UeXBlVmVydGljYWxEYXRhOjphZHZh
bmNlSGVpZ2h0KGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LCBHbHlwaCBnbHlwaCkgY29uc3QK
K2Zsb2F0IE9wZW5UeXBlVmVydGljYWxEYXRhOjphZHZhbmNlSGVpZ2h0KGNvbnN0IEZvbnQqIGZv
bnQsIEdseXBoIGdseXBoKSBjb25zdAogewogICAgIHNpemVfdCBjb3VudEhlaWdodHMgPSBtX2Fk
dmFuY2VIZWlnaHRzLnNpemUoKTsKICAgICBpZiAoY291bnRIZWlnaHRzKSB7CkBAIC00OTIsNyAr
NDkyLDcgQEAgZmxvYXQgT3BlblR5cGVWZXJ0aWNhbERhdGE6OmFkdmFuY2VIZWlnaAogICAgIHJl
dHVybiBmb250LT5mb250TWV0cmljcygpLmhlaWdodCgpOwogfQogCi12b2lkIE9wZW5UeXBlVmVy
dGljYWxEYXRhOjpnZXRWZXJ0aWNhbFRyYW5zbGF0aW9uc0ZvckdseXBocyhjb25zdCBTaW1wbGVG
b250RGF0YSogZm9udCwgY29uc3QgR2x5cGgqIGdseXBocywgc2l6ZV90IGNvdW50LCBmbG9hdCog
b3V0WFlBcnJheSkgY29uc3QKK3ZvaWQgT3BlblR5cGVWZXJ0aWNhbERhdGE6OmdldFZlcnRpY2Fs
VHJhbnNsYXRpb25zRm9yR2x5cGhzKGNvbnN0IEZvbnQqIGZvbnQsIGNvbnN0IEdseXBoKiBnbHlw
aHMsIHNpemVfdCBjb3VudCwgZmxvYXQqIG91dFhZQXJyYXkpIGNvbnN0CiB7CiAgICAgc2l6ZV90
IGNvdW50V2lkdGhzID0gbV9hZHZhbmNlV2lkdGhzLnNpemUoKTsKICAgICBBU1NFUlQoY291bnRX
aWR0aHMgPiAwKTsKQEAgLTUzNSw3ICs1MzUsNyBAQCB2b2lkIE9wZW5UeXBlVmVydGljYWxEYXRh
OjpnZXRWZXJ0aWNhbFRyCiAgICAgfQogfQogCi12b2lkIE9wZW5UeXBlVmVydGljYWxEYXRhOjpz
dWJzdGl0dXRlV2l0aFZlcnRpY2FsR2x5cGhzKGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LCBH
bHlwaFBhZ2UqIGdseXBoUGFnZSwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpIGNv
bnN0Cit2b2lkIE9wZW5UeXBlVmVydGljYWxEYXRhOjpzdWJzdGl0dXRlV2l0aFZlcnRpY2FsR2x5
cGhzKGNvbnN0IEZvbnQqIGZvbnQsIEdseXBoUGFnZSogZ2x5cGhQYWdlLCB1bnNpZ25lZCBvZmZz
ZXQsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3QKIHsKICAgICBjb25zdCBIYXNoTWFwPEdseXBoLCBH
bHlwaD4mIG1hcCA9IG1fdmVydGljYWxHbHlwaE1hcDsKICAgICBpZiAobWFwLmlzRW1wdHkoKSkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBl
VmVydGljYWxEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVWZXJ0aWNhbERhdGEuaAkocmV2aXNpb24gMTc4ODU3KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVWZXJ0
aWNhbERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsOSArMzUsOSBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKK2NsYXNzIEZvbnQ7CiBjbGFzcyBGb250UGxhdGZvcm1EYXRhOwogY2xhc3Mg
R2x5cGhQYWdlOwotY2xhc3MgU2ltcGxlRm9udERhdGE7CiAKIGNsYXNzIE9wZW5UeXBlVmVydGlj
YWxEYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8T3BlblR5cGVWZXJ0aWNhbERhdGE+IHsKIHB1Ymxp
YzoKQEAgLTQ4LDkgKzQ4LDkgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc09wZW5UeXBlKCkgY29u
c3QgeyByZXR1cm4gIW1fYWR2YW5jZVdpZHRocy5pc0VtcHR5KCk7IH0KICAgICBib29sIGhhc1Zl
cnRpY2FsTWV0cmljcygpIGNvbnN0IHsgcmV0dXJuICFtX2FkdmFuY2VIZWlnaHRzLmlzRW1wdHko
KTsgfQotICAgIGZsb2F0IGFkdmFuY2VIZWlnaHQoY29uc3QgU2ltcGxlRm9udERhdGEqLCBHbHlw
aCkgY29uc3Q7Ci0gICAgdm9pZCBnZXRWZXJ0aWNhbFRyYW5zbGF0aW9uc0ZvckdseXBocyhjb25z
dCBTaW1wbGVGb250RGF0YSosIGNvbnN0IEdseXBoKiwgc2l6ZV90LCBmbG9hdCogb3V0WFlBcnJh
eSkgY29uc3Q7Ci0gICAgdm9pZCBzdWJzdGl0dXRlV2l0aFZlcnRpY2FsR2x5cGhzKGNvbnN0IFNp
bXBsZUZvbnREYXRhKiwgR2x5cGhQYWdlKiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgpIGNvbnN0OworICAgIGZsb2F0IGFkdmFuY2VIZWlnaHQoY29uc3QgRm9udCosIEdseXBoKSBj
b25zdDsKKyAgICB2b2lkIGdldFZlcnRpY2FsVHJhbnNsYXRpb25zRm9yR2x5cGhzKGNvbnN0IEZv
bnQqLCBjb25zdCBHbHlwaCosIHNpemVfdCwgZmxvYXQqIG91dFhZQXJyYXkpIGNvbnN0OworICAg
IHZvaWQgc3Vic3RpdHV0ZVdpdGhWZXJ0aWNhbEdseXBocyhjb25zdCBGb250KiwgR2x5cGhQYWdl
KiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0OwogCiBwcml2YXRlOgog
ICAgIGV4cGxpY2l0IE9wZW5UeXBlVmVydGljYWxEYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEm
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9G
b250Q0dXaW4uY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vRm9udENHV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTAgKzI4
LDEwIEBACiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJGbG9hdENv
bnZlcnNpb24uaCIKKyNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5j
bHVkZSAiU2ltcGxlRm9udERhdGEuaCIKICNpbmNsdWRlICJVbmlzY3JpYmVDb250cm9sbGVyLmgi
CiAjaW5jbHVkZSAiV2ViQ29yZVRleHRSZW5kZXJlci5oIgogI2luY2x1ZGUgPEFwcGxpY2F0aW9u
U2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgpAQCAtMTI3LDcgKzEyNyw3IEBAIHN0YXRp
YyBDR1BhdGhSZWYgY3JlYXRlUGF0aEZvckdseXBoKEhEQyAKICAgICByZXR1cm4gcGF0aDsKIH0K
IAotdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNz
Q29udGV4dCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBn
bHlwaEJ1ZmZlciwKK3ZvaWQgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0
KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEZvbnQqIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBn
bHlwaEJ1ZmZlciwKICAgICBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQpIGNvbnN0CiB7CiAgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IGdyYXBoaWNz
Q29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcAkocmV2aXNpb24gMTc4
ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdp
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDkgKzI4LDkgQEAKIAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUg
IkZvbnRDYWNoZS5oIgogI2luY2x1ZGUgIkhXbmREQy5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnRE
YXRhLmgiCiAjaW5jbHVkZSA8bWxhbmcuaD4KICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAjaW5jbHVk
ZSA8d3RmL0hhc2hTZXQuaD4KQEAgLTE5OSwxMCArMTk5LDEwIEBAIHN0YXRpYyBIRk9OVCBjcmVh
dGVNTGFuZ0ZvbnQoSU1MYW5nRm9udEwKICAgICByZXR1cm4gaGZvbnQ7CiB9CiAKLVJlZlB0cjxT
aW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpzeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoY29u
c3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgY29uc3QgU2ltcGxlRm9udERhdGEqIG9y
aWdpbmFsRm9udERhdGEsIGJvb2wsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3Ro
KQorUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6c3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IEZvbnQqIG9yaWdpbmFsRm9u
dERhdGEsIGJvb2wsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQogewogICAg
IFVDaGFyIGNoYXJhY3RlciA9IGNoYXJhY3RlcnNbMF07Ci0gICAgUmVmUHRyPFNpbXBsZUZvbnRE
YXRhPiBmb250RGF0YTsKKyAgICBSZWZQdHI8Rm9udD4gZm9udERhdGE7CiAgICAgSFduZERDIGhk
YygwKTsKICAgICBIRk9OVCBwcmltYXJ5Rm9udCA9IG9yaWdpbmFsRm9udERhdGEtPnBsYXRmb3Jt
RGF0YSgpLmhmb250KCk7CiAgICAgSEdESU9CSiBvbGRGb250ID0gU2VsZWN0T2JqZWN0KGhkYywg
cHJpbWFyeUZvbnQpOwpAQCAtMzA5LDE2ICszMDksMTYgQEAgUmVmUHRyPFNpbXBsZUZvbnREYXRh
PiBGb250Q2FjaGU6OnN5c3RlbQogICAgIHJldHVybiBmb250RGF0YS5yZWxlYXNlKCk7CiB9CiAK
LVJlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpmb250RGF0YUZyb21EZXNjcmlwdGlv
bkFuZExvZ0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0
IExPR0ZPTlQmIGZvbnQsIEF0b21pY1N0cmluZyYgb3V0Rm9udEZhbWlseU5hbWUpCitSZWZQdHI8
Rm9udD4gRm9udENhY2hlOjpmb250RGF0YUZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IExPR0ZPTlQmIGZvbnQsIEF0
b21pY1N0cmluZyYgb3V0Rm9udEZhbWlseU5hbWUpCiB7CiAgICAgQXRvbWljU3RyaW5nIGZhbWls
eU5hbWUgPSBTdHJpbmcoZm9udC5sZkZhY2VOYW1lLCB3Y3NubGVuKGZvbnQubGZGYWNlTmFtZSwg
TEZfRkFDRVNJWkUpKTsKLSAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IGZvbnREYXRhID0gZm9u
dEZvckZhbWlseShmb250RGVzY3JpcHRpb24sIGZhbWlseU5hbWUpOworICAgIFJlZlB0cjxGb250
PiBmb250RGF0YSA9IGZvbnRGb3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCBmYW1pbHlOYW1lKTsK
ICAgICBpZiAoZm9udERhdGEpCiAgICAgICAgIG91dEZvbnRGYW1pbHlOYW1lID0gZmFtaWx5TmFt
ZTsKICAgICByZXR1cm4gZm9udERhdGE7CiB9CiAKLVJlZjxTaW1wbGVGb250RGF0YT4gRm9udENh
Y2hlOjpsYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERl
c2NyaXB0aW9uKQorUmVmPEZvbnQ+IEZvbnRDYWNoZTo6bGFzdFJlc29ydEZhbGxiYWNrRm9udChj
b25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikKIHsKICAgICBERVBSRUNBVEVE
X0RFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBmYWxsYmFja0ZvbnROYW1lLCAoKSk7
CiAgICAgaWYgKCFmYWxsYmFja0ZvbnROYW1lLmlzRW1wdHkoKSkKQEAgLTMzNyw3ICszMzcsNyBA
QCBSZWY8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6bGFzdFJlc29yCiAgICAgICAgIEF0b21p
Y1N0cmluZygiTHVjaWRhIFNhbnMgVW5pY29kZSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpLAogICAgICAgICBBdG9taWNTdHJpbmcoIkFyaWFsIiwgQXRvbWljU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCkKICAgICB9OwotICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4g
c2ltcGxlRm9udDsKKyAgICBSZWZQdHI8Rm9udD4gc2ltcGxlRm9udDsKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IFdURl9BUlJBWV9MRU5HVEgoZmFsbGJhY2tGb250cyk7ICsraSkgewogICAg
ICAgICBpZiAoc2ltcGxlRm9udCA9IGZvbnRGb3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCBmYWxs
YmFja0ZvbnRzW2ldKSkgewogICAgICAgICAgICAgZmFsbGJhY2tGb250TmFtZSA9IGZhbGxiYWNr
Rm9udHNbaV07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9u
dFdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ZvbnRXaW4uY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vRm9udFdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEzICsy
NiwxMyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAK
KyNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9udEdseXBocy5oIgogI2luY2x1ZGUgIkds
eXBoQnVmZmVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW50
UmVjdC5oIgogI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCi0j
aW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKICNpbmNsdWRlICJUZXh0UnVuLmgiCiAjaW5jbHVk
ZSAiVW5pc2NyaWJlQ29udHJvbGxlci5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CkBA
IC0xMjAsNyArMTIwLDcgQEAgdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0VtcGhhc2lzTWFya3NGb3JD
bwogICAgIGRyYXdFbXBoYXNpc01hcmtzKGNvbnRleHQsIHJ1biwgZ2x5cGhCdWZmZXIsIG1hcmss
IEZsb2F0UG9pbnQocG9pbnQueCgpICsgaW5pdGlhbEFkdmFuY2UsIHBvaW50LnkoKSkpOwogfQog
Ci1mbG9hdCBGb250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRS
dW4mIHJ1biwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBH
bHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAorZmxvYXQgRm9udENhc2NhZGU6OmZs
b2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3Qg
Rm9udCo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25z
dAogewogICAgIFVuaXNjcmliZUNvbnRyb2xsZXIgY29udHJvbGxlcih0aGlzLCBydW4sIGZhbGxi
YWNrRm9udHMpOwogICAgIGNvbnRyb2xsZXIuYWR2YW5jZShydW4ubGVuZ3RoKCkpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2RlQ0dX
aW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9HbHlwaFBhZ2VUcmVlTm9kZUNHV2luLmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2RlQ0dXaW4uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMiArMjksMTIgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJHbHlwaFBhZ2UuaCIKIAotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisj
aW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgPFdlYktpdFN5c3RlbUludGVyZmFjZS9XZWJLaXRT
eXN0ZW1JbnRlcmZhY2UuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIEdseXBoUGFn
ZTo6ZmlsbCh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwg
dW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEpCiti
b29sIEdseXBoUGFnZTo6ZmlsbCh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNo
YXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBGb250KiBmb250RGF0YSkK
IHsKICAgICAvLyBidWZmZXJMZW5ndGggd2lsbCBiZSBncmVhdGVyIHRoYW4gdGhlIHJlcXVlc3Rl
ZCBudW1iZXIgb2YgZ2x5cGhzIGlmIHRoZSBidWZmZXIgY29udGFpbnMgc3Vycm9nYXRlIHBhaXJz
LgogICAgIC8vIFdlIHdvbid0IHN1cHBvcnQgdGhpcyBmb3Igbm93LgpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2RlQ2Fpcm9XaW4uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlw
aFBhZ2VUcmVlTm9kZUNhaXJvV2luLmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2RlQ2Fpcm9XaW4uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMiArMjksMTIgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJHbHlwaFBhZ2UuaCIKIAorI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJI
V25kREMuaCIKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLWJvb2wgR2x5cGhQYWdlOjpmaWxsKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVu
Z3RoLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IFNpbXBsZUZv
bnREYXRhKiBmb250RGF0YSkKK2Jvb2wgR2x5cGhQYWdlOjpmaWxsKHVuc2lnbmVkIG9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNv
bnN0IEZvbnQqIGZvbnREYXRhKQogewogICAgIC8vIGJ1ZmZlckxlbmd0aCB3aWxsIGJlIGdyZWF0
ZXIgdGhhbiB0aGUgcmVxdWVzdGVkIG51bWJlciBvZiBnbHlwaHMgaWYgdGhlIGJ1ZmZlciBjb250
YWlucyBzdXJyb2dhdGUgcGFpcnMuCiAgICAgLy8gV2Ugd29uJ3Qgc3VwcG9ydCB0aGlzIGZvciBu
b3cuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9u
dERhdGFDR1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhQ0dXaW4uY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFDR1dpbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKKyNpbmNsdWRlICJGb250LmgiCiAK
ICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJGb250Q2FjaGUuaCIKQEAgLTQ4LDcg
KzQ4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCi12
b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUluaXQoKQordm9pZCBGb250OjpwbGF0Zm9ybUlu
aXQoKQogewogICAgIG1fc3ludGhldGljQm9sZE9mZnNldCA9IG1fcGxhdGZvcm1EYXRhLnN5bnRo
ZXRpY0JvbGQoKSA/IDEuMGYgOiAwLmY7CiAgICAgbV9zY3JpcHRDYWNoZSA9IDA7CkBAIC0xMDMs
NyArMTAzLDcgQEAgdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Jbml0KCkKICAgICBtX2Zv
bnRNZXRyaWNzLnNldFVuaXRzUGVyRW0odW5pdHNQZXJFbSk7CiB9CiAKLUZsb2F0UmVjdCBTaW1w
bGVGb250RGF0YTo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKK0Zs
b2F0UmVjdCBGb250OjpwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAog
ewogICAgIGlmICghcGxhdGZvcm1EYXRhKCkuc2l6ZSgpKQogICAgICAgICByZXR1cm4gRmxvYXRS
ZWN0KCk7CkBAIC0xMjIsNyArMTIyLDcgQEAgRmxvYXRSZWN0IFNpbXBsZUZvbnREYXRhOjpwbGF0
Zm9ybUJvdW5kcwogICAgIHJldHVybiBib3VuZGluZ0JveDsKIH0KIAotZmxvYXQgU2ltcGxlRm9u
dERhdGE6OnBsYXRmb3JtV2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKK2Zsb2F0IEZv
bnQ6OnBsYXRmb3JtV2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKIHsKICAgICBpZiAo
IXBsYXRmb3JtRGF0YSgpLnNpemUoKSkKICAgICAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFDYWlyb1dpbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBs
ZUZvbnREYXRhQ2Fpcm9XaW4uY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFDYWlyb1dpbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKKyNpbmNsdWRlICJGb250LmgiCiAKICNpbmNsdWRl
IDx3aW5kb3dzLmg+CiAKQEAgLTQxLDcgKzQxLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci12b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUluaXQoKQordm9pZCBGb250OjpwbGF0Zm9y
bUluaXQoKQogewogICAgIG1fc3ludGhldGljQm9sZE9mZnNldCA9IG1fcGxhdGZvcm1EYXRhLnN5
bnRoZXRpY0JvbGQoKSA/IDEuMGYgOiAwLmY7CiAgICAgbV9zY3JpcHRDYWNoZSA9IDA7CkBAIC0x
MDMsNyArMTAzLDcgQEAgdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Jbml0KCkKICAgICBS
ZXN0b3JlREMoZGMsIC0xKTsKIH0KIAotRmxvYXRSZWN0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9y
bUJvdW5kc0ZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAorRmxvYXRSZWN0IEZvbnQ6OnBsYXRm
b3JtQm91bmRzRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CiB7CiAgICAgaWYgKG1fcGxhdGZv
cm1EYXRhLnVzZUdESSgpKQogICAgICAgICByZXR1cm4gYm91bmRzRm9yR0RJR2x5cGgoZ2x5cGgp
OwpAQCAtMTExLDcgKzExMSw3IEBAIEZsb2F0UmVjdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1C
b3VuZHMKICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CiB9CiAgICAgCi1mbG9hdCBTaW1wbGVGb250
RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAorZmxvYXQgRm9u
dDo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAogewogICAgIGlmICht
X3BsYXRmb3JtRGF0YS51c2VHREkoKSkKICAgICAgICByZXR1cm4gd2lkdGhGb3JHRElHbHlwaChn
bHlwaCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxl
Rm9udERhdGFXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YVdpbi5jcHAJKHJldmlzaW9uIDE3ODg1NykKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YVdpbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKKyNpbmNsdWRlICJGb250LmgiCiAKICNp
bmNsdWRlICJGb250Q2FjaGUuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKQEAgLTQzLDE3ICs0
MywxNyBAQCBjb25zdCBmbG9hdCBjU21hbGxDYXBzRm9udFNpemVNdWx0aXBsaWVyCiAKIHN0YXRp
YyBib29sIGdfc2hvdWxkQXBwbHlNYWNBc2NlbnRIYWNrOwogCi12b2lkIFNpbXBsZUZvbnREYXRh
OjpzZXRTaG91bGRBcHBseU1hY0FzY2VudEhhY2soYm9vbCBiKQordm9pZCBGb250OjpzZXRTaG91
bGRBcHBseU1hY0FzY2VudEhhY2soYm9vbCBiKQogewogICAgIGdfc2hvdWxkQXBwbHlNYWNBc2Nl
bnRIYWNrID0gYjsKIH0KIAotYm9vbCBTaW1wbGVGb250RGF0YTo6c2hvdWxkQXBwbHlNYWNBc2Nl
bnRIYWNrKCkKK2Jvb2wgRm9udDo6c2hvdWxkQXBwbHlNYWNBc2NlbnRIYWNrKCkKIHsKICAgICBy
ZXR1cm4gZ19zaG91bGRBcHBseU1hY0FzY2VudEhhY2s7CiB9CiAKLWZsb2F0IFNpbXBsZUZvbnRE
YXRhOjphc2NlbnRDb25zaWRlcmluZ01hY0FzY2VudEhhY2soY29uc3QgV0NIQVIqIGZhY2VOYW1l
LCBmbG9hdCBhc2NlbnQsIGZsb2F0IGRlc2NlbnQpCitmbG9hdCBGb250Ojphc2NlbnRDb25zaWRl
cmluZ01hY0FzY2VudEhhY2soY29uc3QgV0NIQVIqIGZhY2VOYW1lLCBmbG9hdCBhc2NlbnQsIGZs
b2F0IGRlc2NlbnQpCiB7CiAgICAgaWYgKCFzaG91bGRBcHBseU1hY0FzY2VudEhhY2soKSkKICAg
ICAgICAgcmV0dXJuIGFzY2VudDsKQEAgLTcxLDcgKzcxLDcgQEAgZmxvYXQgU2ltcGxlRm9udERh
dGE6OmFzY2VudENvbnNpZGVyaW5nTQogICAgIHJldHVybiBhc2NlbnQ7CiB9CiAKLXZvaWQgU2lt
cGxlRm9udERhdGE6OmluaXRHRElGb250KCkKK3ZvaWQgRm9udDo6aW5pdEdESUZvbnQoKQogewog
ICAgIGlmICghbV9wbGF0Zm9ybURhdGEuc2l6ZSgpKSB7CiAgICAgICAgIG1fZm9udE1ldHJpY3Mu
cmVzZXQoKTsKQEAgLTEwNiw3ICsxMDYsNyBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjppbml0R0RJ
Rm9udCgpCiAgICAgU2VsZWN0T2JqZWN0KGhkYywgb2xkRm9udCk7CiB9CiAKLXZvaWQgU2ltcGxl
Rm9udERhdGE6OnBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpCit2b2lkIEZvbnQ6OnBsYXRmb3JtQ2hh
cldpZHRoSW5pdCgpCiB7CiAgICAgLy8gR0RJIEZvbnRzIGluaXQgY2hhcndpZHRocyBpbiBpbml0
R0RJRm9udC4KICAgICBpZiAoIW1fcGxhdGZvcm1EYXRhLnVzZUdESSgpKSB7CkBAIC0xMTYsMjkg
KzExNiwyOSBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUNoYXJXaWR0aEluCiAgICAg
fQogfQogCi12b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybURlc3Ryb3koKQordm9pZCBGb250
OjpwbGF0Zm9ybURlc3Ryb3koKQogewogICAgIFNjcmlwdEZyZWVDYWNoZSgmbV9zY3JpcHRDYWNo
ZSk7CiAgICAgZGVsZXRlIG1fc2NyaXB0Rm9udFByb3BlcnRpZXM7CiB9CiAKLVBhc3NSZWZQdHI8
U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZvbnRE
YXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBzY2FsZUZh
Y3RvcikgY29uc3QKK1Bhc3NSZWZQdHI8Rm9udD4gRm9udDo6cGxhdGZvcm1DcmVhdGVTY2FsZWRG
b250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2Nh
bGVGYWN0b3IpIGNvbnN0CiB7CiAgICAgZmxvYXQgc2NhbGVkU2l6ZSA9IHNjYWxlRmFjdG9yICog
bV9wbGF0Zm9ybURhdGEuc2l6ZSgpOwogICAgIGlmIChpc0N1c3RvbUZvbnQoKSkgewogICAgICAg
ICBGb250UGxhdGZvcm1EYXRhIHNjYWxlZEZvbnQobV9wbGF0Zm9ybURhdGEpOwogICAgICAgICBz
Y2FsZWRGb250LnNldFNpemUoc2NhbGVkU2l6ZSk7Ci0gICAgICAgIHJldHVybiBTaW1wbGVGb250
RGF0YTo6Y3JlYXRlKHNjYWxlZEZvbnQsIHRydWUsIGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIEZv
bnQ6OmNyZWF0ZShzY2FsZWRGb250LCB0cnVlLCBmYWxzZSk7CiAgICAgfQogCiAgICAgTE9HRk9O
VCB3aW5mb250OwogICAgIEdldE9iamVjdChtX3BsYXRmb3JtRGF0YS5oZm9udCgpLCBzaXplb2Yo
TE9HRk9OVCksICZ3aW5mb250KTsKICAgICB3aW5mb250LmxmSGVpZ2h0ID0gLWxyb3VuZGYoc2Nh
bGVkU2l6ZSAqIChtX3BsYXRmb3JtRGF0YS51c2VHREkoKSA/IDEgOiAzMikpOwogICAgIGF1dG8g
aGZvbnQgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZUZvbnRJbmRpcmVjdCgmd2luZm9udCkpOwot
ICAgIHJldHVybiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlKEZvbnRQbGF0Zm9ybURhdGEoV1RGOjpt
b3ZlKGhmb250KSwgc2NhbGVkU2l6ZSwgbV9wbGF0Zm9ybURhdGEuc3ludGhldGljQm9sZCgpLCBt
X3BsYXRmb3JtRGF0YS5zeW50aGV0aWNPYmxpcXVlKCksIG1fcGxhdGZvcm1EYXRhLnVzZUdESSgp
KSwgaXNDdXN0b21Gb250KCksIGZhbHNlKTsKKyAgICByZXR1cm4gRm9udDo6Y3JlYXRlKEZvbnRQ
bGF0Zm9ybURhdGEoV1RGOjptb3ZlKGhmb250KSwgc2NhbGVkU2l6ZSwgbV9wbGF0Zm9ybURhdGEu
c3ludGhldGljQm9sZCgpLCBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNPYmxpcXVlKCksIG1fcGxh
dGZvcm1EYXRhLnVzZUdESSgpKSwgaXNDdXN0b21Gb250KCksIGZhbHNlKTsKIH0KIAotdm9pZCBT
aW1wbGVGb250RGF0YTo6ZGV0ZXJtaW5lUGl0Y2goKQordm9pZCBGb250OjpkZXRlcm1pbmVQaXRj
aCgpCiB7CiAgICAgaWYgKGlzQ3VzdG9tRm9udCgpKSB7CiAgICAgICAgIG1fdHJlYXRBc0ZpeGVk
UGl0Y2ggPSBmYWxzZTsKQEAgLTE1OSw3ICsxNTksNyBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpk
ZXRlcm1pbmVQaXRjaCgpCiAgICAgUmVzdG9yZURDKGRjLCAtMSk7CiB9CiAKLUZsb2F0UmVjdCBT
aW1wbGVGb250RGF0YTo6Ym91bmRzRm9yR0RJR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CitGbG9h
dFJlY3QgRm9udDo6Ym91bmRzRm9yR0RJR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CiB7CiAgICAg
SFduZERDIGhkYygwKTsKICAgICBTZXRHcmFwaGljc01vZGUoaGRjLCBHTV9BRFZBTkNFRCk7CkBA
IC0xNzUsNyArMTc1LDcgQEAgRmxvYXRSZWN0IFNpbXBsZUZvbnREYXRhOjpib3VuZHNGb3JHRElH
bAogICAgICAgICBnZGlNZXRyaWNzLmdtQmxhY2tCb3hYICsgbV9zeW50aGV0aWNCb2xkT2Zmc2V0
LCBnZGlNZXRyaWNzLmdtQmxhY2tCb3hZKTsgCiB9CiAKLWZsb2F0IFNpbXBsZUZvbnREYXRhOjp3
aWR0aEZvckdESUdseXBoKEdseXBoIGdseXBoKSBjb25zdAorZmxvYXQgRm9udDo6d2lkdGhGb3JH
RElHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKIHsKICAgICBIV25kREMgaGRjKDApOwogICAgIFNl
dEdyYXBoaWNzTW9kZShoZGMsIEdNX0FEVkFOQ0VEKTsKQEAgLTE5MSw3ICsxOTEsNyBAQCBmbG9h
dCBTaW1wbGVGb250RGF0YTo6d2lkdGhGb3JHRElHbHlwaChHCiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAotU0NSSVBUX0ZPTlRQUk9QRVJUSUVTKiBTaW1wbGVGb250RGF0YTo6c2NyaXB0Rm9udFBy
b3BlcnRpZXMoKSBjb25zdAorU0NSSVBUX0ZPTlRQUk9QRVJUSUVTKiBGb250OjpzY3JpcHRGb250
UHJvcGVydGllcygpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3NjcmlwdEZvbnRQcm9wZXJ0aWVzKSB7
CiAgICAgICAgIG1fc2NyaXB0Rm9udFByb3BlcnRpZXMgPSBuZXcgU0NSSVBUX0ZPTlRQUk9QRVJU
SUVTOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1VuaXNjcmli
ZUNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9VbmlzY3JpYmVDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1VuaXNjcmliZUNvbnRyb2xsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw5ICsyNSwxMCBAQAogCiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiVW5pc2NyaWJlQ29udHJvbGxlci5oIgorCisjaW5jbHVkZSAiRm9udC5o
IgogI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiSFduZERDLmgiCi0jaW5jbHVk
ZSAiU2ltcGxlRm9udERhdGEuaCIKICNpbmNsdWRlICJUZXh0UnVuLmgiCiAjaW5jbHVkZSA8d3Rm
L01hdGhFeHRyYXMuaD4KIApAQCAtNDEsNyArNDIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAv
LyB0aGF0IGRvZXMgc3R1ZmYgaW4gdGhhdCBtZXRob2QgaW5zdGVhZCBvZiBkb2luZyBldmVyeXRo
aW5nIGluIHRoZSBjb25zdHJ1Y3Rvci4gIEhhdmUgYWR2YW5jZSgpCiAvLyB0YWtlIHRoZSBHbHlw
aEJ1ZmZlciBhcyBhbiBhcmcgc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIHBvcHVsYXRlIHRoZSBn
bHlwaCBidWZmZXIgd2hlbgogLy8gbWVhc3VyaW5nLgotVW5pc2NyaWJlQ29udHJvbGxlcjo6VW5p
c2NyaWJlQ29udHJvbGxlcihjb25zdCBGb250Q2FzY2FkZSogZm9udCwgY29uc3QgVGV4dFJ1biYg
cnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMpCitVbmlz
Y3JpYmVDb250cm9sbGVyOjpVbmlzY3JpYmVDb250cm9sbGVyKGNvbnN0IEZvbnRDYXNjYWRlKiBm
b250LCBjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0Zv
bnRzKQogICAgIDogbV9mb250KCpmb250KQogICAgICwgbV9ydW4ocnVuKQogICAgICwgbV9mYWxs
YmFja0ZvbnRzKGZhbGxiYWNrRm9udHMpCkBAIC0xMzYsOCArMTM3LDggQEAgdm9pZCBVbmlzY3Jp
YmVDb250cm9sbGVyOjphZHZhbmNlKHVuc2lnbgogICAgIGNvbnN0IFVDaGFyKiBjdXJyID0gbV9y
dW4ucnRsKCkgPyBjcCArIGxlbmd0aCAgLSAxIDogY3A7CiAgICAgY29uc3QgVUNoYXIqIGVuZCA9
IG1fcnVuLnJ0bCgpID8gY3AgLSAxIDogY3AgKyBsZW5ndGg7CiAKLSAgICBjb25zdCBTaW1wbGVG
b250RGF0YSogZm9udERhdGE7Ci0gICAgY29uc3QgU2ltcGxlRm9udERhdGEqIG5leHRGb250RGF0
YSA9IG1fZm9udC5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoKmN1cnIsIGZhbHNlKS5mb250RGF0YTsK
KyAgICBjb25zdCBGb250KiBmb250RGF0YTsKKyAgICBjb25zdCBGb250KiBuZXh0Rm9udERhdGEg
PSBtX2ZvbnQuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKCpjdXJyLCBmYWxzZSkuZm9udERhdGE7CiAK
ICAgICBVQ2hhciBuZXdDID0gMDsKIApAQCAtMTkwLDcgKzE5MSw3IEBAIHZvaWQgVW5pc2NyaWJl
Q29udHJvbGxlcjo6YWR2YW5jZSh1bnNpZ24KICAgICBtX2N1cnJlbnRDaGFyYWN0ZXIgPSBiYXNl
Q2hhcmFjdGVyICsgbGVuZ3RoOwogfQogCi12b2lkIFVuaXNjcmliZUNvbnRyb2xsZXI6Oml0ZW1p
emVTaGFwZUFuZFBsYWNlKGNvbnN0IFVDaGFyKiBjcCwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBT
aW1wbGVGb250RGF0YSogZm9udERhdGEsIEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZlcikKK3ZvaWQg
VW5pc2NyaWJlQ29udHJvbGxlcjo6aXRlbWl6ZVNoYXBlQW5kUGxhY2UoY29uc3QgVUNoYXIqIGNw
LCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IEZvbnQqIGZvbnREYXRhLCBHbHlwaEJ1ZmZlciogZ2x5
cGhCdWZmZXIpCiB7CiAgICAgLy8gU2NyaXB0SXRlbWl6ZSAoaW4gV2luZG93cyBYUCB2ZXJzaW9u
cyBwcmlvciB0byBTUDIpIGNhbiBvdmVyZmxvdyBieSAxLiAgVGhpcyBpcyB3aHkgdGhlcmUgaXMg
YW4gZXh0cmEgZW1wdHkgaXRlbQogICAgIC8vIGhhbmdpbmcgb3V0IGF0IHRoZSBlbmQgb2YgdGhl
IGFycmF5CkBAIC0yMzIsNyArMjMzLDcgQEAgdm9pZCBVbmlzY3JpYmVDb250cm9sbGVyOjpyZXNl
dENvbnRyb2xBbgogICAgIG1fc3RhdGUuZk92ZXJyaWRlRGlyZWN0aW9uID0gbV9ydW4uZGlyZWN0
aW9uYWxPdmVycmlkZSgpOwogfQogCi1ib29sIFVuaXNjcmliZUNvbnRyb2xsZXI6OnNoYXBlQW5k
UGxhY2VJdGVtKGNvbnN0IFVDaGFyKiBjcCwgdW5zaWduZWQgaSwgY29uc3QgU2ltcGxlRm9udERh
dGEqIGZvbnREYXRhLCBHbHlwaEJ1ZmZlciogZ2x5cGhCdWZmZXIpCitib29sIFVuaXNjcmliZUNv
bnRyb2xsZXI6OnNoYXBlQW5kUGxhY2VJdGVtKGNvbnN0IFVDaGFyKiBjcCwgdW5zaWduZWQgaSwg
Y29uc3QgRm9udCogZm9udERhdGEsIEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZlcikKIHsKICAgICAv
LyBEZXRlcm1pbmUgdGhlIHN0cmluZyBmb3IgdGhpcyBpdGVtLgogICAgIGNvbnN0IFVDaGFyKiBz
dHIgPSBjcCArIG1faXRlbXNbaV0uaUNoYXJQb3M7CkBAIC00MDQsNyArNDA1LDcgQEAgYm9vbCBV
bmlzY3JpYmVDb250cm9sbGVyOjpzaGFwZUFuZFBsYWNlSQogICAgIHJldHVybiB0cnVlOwogfQog
Ci1ib29sIFVuaXNjcmliZUNvbnRyb2xsZXI6OnNoYXBlKGNvbnN0IFVDaGFyKiBzdHIsIGludCBs
ZW4sIFNDUklQVF9JVEVNIGl0ZW0sIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwKK2Jv
b2wgVW5pc2NyaWJlQ29udHJvbGxlcjo6c2hhcGUoY29uc3QgVUNoYXIqIHN0ciwgaW50IGxlbiwg
U0NSSVBUX0lURU0gaXRlbSwgY29uc3QgRm9udCogZm9udERhdGEsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFZlY3RvcjxXT1JEPiYgZ2x5cGhzLCBWZWN0b3I8V09SRD4mIGNsdXN0
ZXJzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8U0NSSVBUX1ZJU0FU
VFI+JiB2aXN1YWxBdHRyaWJ1dGVzKQogewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL1VuaXNjcmliZUNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVW5pc2NyaWJlQ29udHJvbGxlci5oCShyZXZp
c2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVW5p
c2NyaWJlQ29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgVW5pc2NyaWJlQ29udHJvbGxlciB7CiBwdWJsaWM6Ci0g
ICAgVW5pc2NyaWJlQ29udHJvbGxlcihjb25zdCBGb250Q2FzY2FkZSosIGNvbnN0IFRleHRSdW4m
LCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwKTsKKyAg
ICBVbmlzY3JpYmVDb250cm9sbGVyKGNvbnN0IEZvbnRDYXNjYWRlKiwgY29uc3QgVGV4dFJ1biYs
IEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzID0gMCk7CiAKICAgICAvLyBBZHZh
bmNlIGFuZCBtZWFzdXJlL3BsYWNlIHVwIHRvIHRoZSBzcGVjaWZpZWQgY2hhcmFjdGVyLgogICAg
IHZvaWQgYWR2YW5jZSh1bnNpZ25lZCB0bywgR2x5cGhCdWZmZXIqID0gMCk7CkBAIC01NCwxNSAr
NTQsMTUgQEAgcHVibGljOgogcHJpdmF0ZTogICAgCiAgICAgdm9pZCByZXNldENvbnRyb2xBbmRT
dGF0ZSgpOwogCi0gICAgdm9pZCBpdGVtaXplU2hhcGVBbmRQbGFjZShjb25zdCBVQ2hhciosIHVu
c2lnbmVkIGxlbmd0aCwgY29uc3QgU2ltcGxlRm9udERhdGEqLCBHbHlwaEJ1ZmZlciopOwotICAg
IGJvb2wgc2hhcGVBbmRQbGFjZUl0ZW0oY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBpbmRleCwgY29u
c3QgU2ltcGxlRm9udERhdGEqLCBHbHlwaEJ1ZmZlciopOwotICAgIGJvb2wgc2hhcGUoY29uc3Qg
VUNoYXIqIHN0ciwgaW50IGxlbiwgU0NSSVBUX0lURU0gaXRlbSwgY29uc3QgU2ltcGxlRm9udERh
dGEqIGZvbnREYXRhLAorICAgIHZvaWQgaXRlbWl6ZVNoYXBlQW5kUGxhY2UoY29uc3QgVUNoYXIq
LCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IEZvbnQqLCBHbHlwaEJ1ZmZlciopOworICAgIGJvb2wg
c2hhcGVBbmRQbGFjZUl0ZW0oY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBpbmRleCwgY29uc3QgRm9u
dCosIEdseXBoQnVmZmVyKik7CisgICAgYm9vbCBzaGFwZShjb25zdCBVQ2hhciogc3RyLCBpbnQg
bGVuLCBTQ1JJUFRfSVRFTSBpdGVtLCBjb25zdCBGb250KiBmb250RGF0YSwKICAgICAgICAgICAg
ICAgIFZlY3RvcjxXT1JEPiYgZ2x5cGhzLCBWZWN0b3I8V09SRD4mIGNsdXN0ZXJzLAogICAgICAg
ICAgICAgICAgVmVjdG9yPFNDUklQVF9WSVNBVFRSPiYgdmlzdWFsQXR0cmlidXRlcyk7CiAKICAg
ICBjb25zdCBGb250Q2FzY2FkZSYgbV9mb250OwogICAgIGNvbnN0IFRleHRSdW4mIG1fcnVuOwot
ICAgIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogbV9mYWxsYmFja0ZvbnRzOworICAg
IEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBtX2ZhbGxiYWNrRm9udHM7CiAgICAgRmxvYXRQb2ludCBt
X2dseXBoT3JpZ2luOwogICAgIGZsb2F0IG1fbWluR2x5cGhCb3VuZGluZ0JveFg7CiAgICAgZmxv
YXQgbV9tYXhHbHlwaEJvdW5kaW5nQm94WDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3dpbi9Qb3B1cE1lbnVXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYs
NiArMjYsNyBAQAogI2luY2x1ZGUgIkJpdG1hcEluZm8uaCIKICNpbmNsdWRlICJEb2N1bWVudC5o
IgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJG
b250U2VsZWN0b3IuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5o
IgpAQCAtNDIsNyArNDMsNiBAQAogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJT
Y3JvbGxiYXIuaCIKICNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgotI2luY2x1ZGUgIlNpbXBs
ZUZvbnREYXRhLmgiCiAjaW5jbHVkZSAiVGV4dFJ1bi5oIgogI2luY2x1ZGUgIldlYkNvcmVJbnN0
YW5jZUhhbmRsZS5oIgogI2luY2x1ZGUgPHd0Zi9XaW5kb3dzRXh0cmFzLmg+CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCShyZXZpc2lvbiAxNzg4NTcp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ0OSw3ICs0NDksNyBAQCBib29sIElubGluZUZsb3dCb3g6OnJlcXVpcmVzSWRl
b2dyYXBoaWNCCiAKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgbGluZVN0eWxlID0gdGhpcy0+bGlu
ZVN0eWxlKCk7CiAgICAgaWYgKGxpbmVTdHlsZS5mb250RGVzY3JpcHRpb24oKS5ub25DSktHbHlw
aE9yaWVudGF0aW9uKCkgPT0gTm9uQ0pLR2x5cGhPcmllbnRhdGlvblVwcmlnaHQKLSAgICAgICAg
fHwgbGluZVN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkuaGFzVmVydGljYWxH
bHlwaHMoKSkKKyAgICAgICAgfHwgbGluZVN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQo
KS5oYXNWZXJ0aWNhbEdseXBocygpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGZvciAo
SW5saW5lQm94KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5l
eHRPbkxpbmUoKSkgewpAQCAtNDYwLDE4ICs0NjAsMTggQEAgYm9vbCBJbmxpbmVGbG93Qm94Ojpy
ZXF1aXJlc0lkZW9ncmFwaGljQgogICAgICAgICAgICAgaWYgKGRvd25jYXN0PElubGluZUZsb3dC
b3g+KCpjaGlsZCkucmVxdWlyZXNJZGVvZ3JhcGhpY0Jhc2VsaW5lKHRleHRCb3hEYXRhTWFwKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIGlmIChjaGlsZC0+bGluZVN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEo
KS5oYXNWZXJ0aWNhbEdseXBocygpKQorICAgICAgICAgICAgaWYgKGNoaWxkLT5saW5lU3R5bGUo
KS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCkuaGFzVmVydGljYWxHbHlwaHMoKSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgY29uc3Qg
VmVjdG9yPGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIHVzZWRGb250cyA9IG51bGxwdHI7CisgICAg
ICAgICAgICBjb25zdCBWZWN0b3I8Y29uc3QgRm9udCo+KiB1c2VkRm9udHMgPSBudWxscHRyOwog
ICAgICAgICAgICAgaWYgKGlzPElubGluZVRleHRCb3g+KCpjaGlsZCkpIHsKICAgICAgICAgICAg
ICAgICBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSB0ZXh0Qm94RGF0YU1hcC5maW5kKGRvd25jYXN0PElubGluZVRleHRCb3g+KGNoaWxkKSk7CiAg
ICAgICAgICAgICAgICAgdXNlZEZvbnRzID0gaXQgPT0gdGV4dEJveERhdGFNYXAuZW5kKCkgPyBu
dWxscHRyIDogJml0LT52YWx1ZS5maXJzdDsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
aWYgKHVzZWRGb250cykgewotICAgICAgICAgICAgICAgIGZvciAoY29uc3QgU2ltcGxlRm9udERh
dGEqIGZvbnREYXRhIDogKnVzZWRGb250cykgewotICAgICAgICAgICAgICAgICAgICBpZiAoZm9u
dERhdGEtPmhhc1ZlcnRpY2FsR2x5cGhzKCkpCisgICAgICAgICAgICAgICAgZm9yIChjb25zdCBG
b250KiBmb250IDogKnVzZWRGb250cykgeworICAgICAgICAgICAgICAgICAgICBpZiAoZm9udC0+
aGFzVmVydGljYWxHbHlwaHMoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0lubGluZUZsb3dCb3guaAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTIg
KzMxLDEyIEBAIGNsYXNzIEhpdFRlc3RSZXF1ZXN0OwogY2xhc3MgSGl0VGVzdFJlc3VsdDsKIGNs
YXNzIElubGluZVRleHRCb3g7CiBjbGFzcyBSZW5kZXJMaW5lQm94TGlzdDsKLWNsYXNzIFNpbXBs
ZUZvbnREYXRhOworY2xhc3MgRm9udDsKIGNsYXNzIFZlcnRpY2FsUG9zaXRpb25DYWNoZTsKIAog
c3RydWN0IEdseXBoT3ZlcmZsb3c7CiAKLXR5cGVkZWYgSGFzaE1hcDxjb25zdCBJbmxpbmVUZXh0
Qm94Kiwgc3RkOjpwYWlyPFZlY3Rvcjxjb25zdCBTaW1wbGVGb250RGF0YSo+LCBHbHlwaE92ZXJm
bG93Pj4gR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXA7Cit0eXBlZGVmIEhhc2hNYXA8
Y29uc3QgSW5saW5lVGV4dEJveCosIHN0ZDo6cGFpcjxWZWN0b3I8Y29uc3QgRm9udCo+LCBHbHlw
aE92ZXJmbG93Pj4gR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXA7CiAKIGNsYXNzIElu
bGluZUZsb3dCb3ggOiBwdWJsaWMgSW5saW5lQm94IHsKIHB1YmxpYzoKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHJldmlzaW9uIDE3ODg1NykKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTM4MSw3ICsxMzgxLDcgQEAgVGV4dFJ1biBJbmxpbmVUZXh0Qm94Ojpjb25zdHJ1Y3RU
ZXh0UnVuKAogCiAgICAgVGV4dFJ1biBydW4oc3RyaW5nLCB0ZXh0UG9zKCksIGV4cGFuc2lvbigp
LCBleHBhbnNpb25CZWhhdmlvcigpLCBkaXJlY3Rpb24oKSwgZGlyT3ZlcnJpZGUoKSB8fCBzdHls
ZS5ydGxPcmRlcmluZygpID09IFZpc3VhbE9yZGVyLCAhcmVuZGVyZXIoKS5jYW5Vc2VTaW1wbGVG
b250Q29kZVBhdGgoKSk7CiAgICAgcnVuLnNldFRhYlNpemUoIXN0eWxlLmNvbGxhcHNlV2hpdGVT
cGFjZSgpLCBzdHlsZS50YWJTaXplKCkpOwotICAgIGlmIChmb250LnByaW1hcnlGb250RGF0YSgp
LmlzU1ZHRm9udCgpKQorICAgIGlmIChmb250LnByaW1hcnlGb250KCkuaXNTVkdGb250KCkpCiAg
ICAgICAgIHJ1bi5zZXRSZW5kZXJpbmdDb250ZXh0KFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0
OjpjcmVhdGUocmVuZGVyZXIoKSkpOwogCiAgICAgLy8gUHJvcGFnYXRlIHRoZSBtYXhpbXVtIGxl
bmd0aCBvZiB0aGUgY2hhcmFjdGVycyBidWZmZXIgdG8gdGhlIFRleHRSdW4sIGV2ZW4gd2hlbiB3
ZSdyZSBvbmx5IHByb2Nlc3NpbmcgYSBzdWJzdHJpbmcuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMjUsNyAr
MjMyNSw3IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2s6OmFkanVzdExvZ2ljYWxMZWYKICAgICAg
ICAgcmV0dXJuIGxlZnQ7CiAKICAgICAvLyBGSVhNRTogU2hvdWxkIGxldHRlci1zcGFjaW5nIGFw
cGx5PyBUaGlzIGlzIGNvbXBsaWNhdGVkIHNpbmNlIGl0IGRvZXNuJ3QgYXBwbHkgYXQgdGhlIGVk
Z2U/Ci0gICAgZmxvYXQgbWF4Q2hhcldpZHRoID0gbGluZUdyaWQtPnN0eWxlKCkuZm9udENhc2Nh
ZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5tYXhDaGFyV2lkdGgoKTsKKyAgICBmbG9hdCBtYXhDaGFy
V2lkdGggPSBsaW5lR3JpZC0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCkubWF4
Q2hhcldpZHRoKCk7CiAgICAgaWYgKCFtYXhDaGFyV2lkdGgpCiAgICAgICAgIHJldHVybiBsZWZ0
OwogCkBAIC0yMzY1LDcgKzIzNjUsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjphZGp1c3RM
b2dpY2FsUmlnCiAgICAgICAgIHJldHVybiByaWdodDsKIAogICAgIC8vIEZJWE1FOiBTaG91bGQg
bGV0dGVyLXNwYWNpbmcgYXBwbHk/IFRoaXMgaXMgY29tcGxpY2F0ZWQgc2luY2UgaXQgZG9lc24n
dCBhcHBseSBhdCB0aGUgZWRnZT8KLSAgICBmbG9hdCBtYXhDaGFyV2lkdGggPSBsaW5lR3JpZC0+
c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLm1heENoYXJXaWR0aCgpOwor
ICAgIGZsb2F0IG1heENoYXJXaWR0aCA9IGxpbmVHcmlkLT5zdHlsZSgpLmZvbnRDYXNjYWRlKCku
cHJpbWFyeUZvbnQoKS5tYXhDaGFyV2lkdGgoKTsKICAgICBpZiAoIW1heENoYXJXaWR0aCkKICAg
ICAgICAgcmV0dXJuIHJpZ2h0OwogCkBAIC0zNzA1LDcgKzM3MDUsNyBAQCBzdGF0aWMgaW5saW5l
IFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bkluCiAgICAgYm9vbCBkaXJlY3Rpb25hbE92ZXJyaWRl
ID0gc3R5bGUucnRsT3JkZXJpbmcoKSA9PSBWaXN1YWxPcmRlcjsKIAogICAgIFRleHRSdW4gcnVu
KGNoYXJhY3RlcnMsIGxlbmd0aCwgMCwgMCwgZXhwYW5zaW9uLCB0ZXh0RGlyZWN0aW9uLCBkaXJl
Y3Rpb25hbE92ZXJyaWRlKTsKLSAgICBpZiAoZm9udC5wcmltYXJ5Rm9udERhdGEoKS5pc1NWR0Zv
bnQoKSkgeworICAgIGlmIChmb250LnByaW1hcnlGb250KCkuaXNTVkdGb250KCkpIHsKICAgICAg
ICAgQVNTRVJUKGNvbnRleHQpOyAvLyBGSVhNRTogVGhyZWFkIGEgUmVuZGVyT2JqZWN0JiB0byB0
aGlzIHBvaW50IHNvIHdlIGRvbid0IGhhdmUgdG8gZGVyZWZlcmVuY2UgYW55dGhpbmcuCiAgICAg
ICAgIHJ1bi5zZXRSZW5kZXJpbmdDb250ZXh0KFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0Ojpj
cmVhdGUoKmNvbnRleHQpKTsKICAgICB9CkBAIC0zNzI1LDcgKzM3MjUsNyBAQCBzdGF0aWMgaW5s
aW5lIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bkluCiAgICAgICAgICAgICBkaXJlY3Rpb25hbE92
ZXJyaWRlIHw9IGlzT3ZlcnJpZGUoc3R5bGUudW5pY29kZUJpZGkoKSk7CiAgICAgfQogICAgIFRl
eHRSdW4gcnVuKGNoYXJhY3RlcnMsIGxlbmd0aCwgMCwgMCwgZXhwYW5zaW9uLCB0ZXh0RGlyZWN0
aW9uLCBkaXJlY3Rpb25hbE92ZXJyaWRlKTsKLSAgICBpZiAoZm9udC5wcmltYXJ5Rm9udERhdGEo
KS5pc1NWR0ZvbnQoKSkgeworICAgIGlmIChmb250LnByaW1hcnlGb250KCkuaXNTVkdGb250KCkp
IHsKICAgICAgICAgQVNTRVJUKGNvbnRleHQpOyAvLyBGSVhNRTogVGhyZWFkIGEgUmVuZGVyT2Jq
ZWN0JiB0byB0aGlzIHBvaW50IHNvIHdlIGRvbid0IGhhdmUgdG8gZGVyZWZlcmVuY2UgYW55dGhp
bmcuCiAgICAgICAgIHJ1bi5zZXRSZW5kZXJpbmdDb250ZXh0KFNWR1RleHRSdW5SZW5kZXJpbmdD
b250ZXh0OjpjcmVhdGUoKmNvbnRleHQpKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAkocmV2aXNpb24gMTc4
ODU3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1OCw3ICs0NTgsNyBAQCB2b2lkIFJlbmRlckJsb2NrRmxv
dzo6c2V0TWFyZ2luc0ZvclJ1YnlSCiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0TG9naWNhbFdpZHRo
Rm9yVGV4dFJ1bihSb290SW5saW5lQm94KiBsaW5lQm94LCBCaWRpUnVuKiBydW4sIFJlbmRlclRl
eHQqIHJlbmRlcmVyLCBmbG9hdCB4UG9zLCBjb25zdCBMaW5lSW5mbyYgbGluZUluZm8sCiAgICAg
R2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXAmIHRleHRCb3hEYXRhTWFwLCBWZXJ0aWNh
bFBvc2l0aW9uQ2FjaGUmIHZlcnRpY2FsUG9zaXRpb25DYWNoZSwgV29yZE1lYXN1cmVtZW50cyYg
d29yZE1lYXN1cmVtZW50cykKIHsKLSAgICBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4g
ZmFsbGJhY2tGb250czsKKyAgICBIYXNoU2V0PGNvbnN0IEZvbnQqPiBmYWxsYmFja0ZvbnRzOwog
ICAgIEdseXBoT3ZlcmZsb3cgZ2x5cGhPdmVyZmxvdzsKIAogICAgIGNvbnN0IEZvbnRDYXNjYWRl
JiBmb250ID0gbGluZVN0eWxlKCpyZW5kZXJlci0+cGFyZW50KCksIGxpbmVJbmZvKS5mb250Q2Fz
Y2FkZSgpOwpAQCAtNTA5LDggKzUwOSw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRMb2dpY2Fs
V2lkdGhGb3JUZXgKICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIG1lYXN1cmVk
V2lkdGggKz0gd29yZE1lYXN1cmVtZW50LndpZHRoOwogICAgICAgICAgICAgaWYgKCF3b3JkTWVh
c3VyZW1lbnQuZmFsbGJhY2tGb250cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBIYXNo
U2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHdvcmRNZWFz
dXJlbWVudC5mYWxsYmFja0ZvbnRzLmVuZCgpOwotICAgICAgICAgICAgICAgIGZvciAoSGFzaFNl
dDxjb25zdCBTaW1wbGVGb250RGF0YSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHdvcmRNZWFzdXJl
bWVudC5mYWxsYmFja0ZvbnRzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAg
ICAgICBIYXNoU2V0PGNvbnN0IEZvbnQqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gd29yZE1lYXN1
cmVtZW50LmZhbGxiYWNrRm9udHMuZW5kKCk7CisgICAgICAgICAgICAgICAgZm9yIChIYXNoU2V0
PGNvbnN0IEZvbnQqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSB3b3JkTWVhc3VyZW1lbnQuZmFsbGJh
Y2tGb250cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCiAgICAgICAgICAgICAgICAgICAgIGZh
bGxiYWNrRm9udHMuYWRkKCppdCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTUyNyw3
ICs1MjcsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0TG9naWNhbFdpZHRoRm9yVGV4CiAgICAg
cnVuLT5ib3goKS0+c2V0TG9naWNhbFdpZHRoKG1lYXN1cmVkV2lkdGggKyBoeXBoZW5XaWR0aCk7
CiAgICAgaWYgKCFmYWxsYmFja0ZvbnRzLmlzRW1wdHkoKSkgewogICAgICAgICBBU1NFUlQocnVu
LT5ib3goKS0+YmVoYXZlc0xpa2VUZXh0KCkpOwotICAgICAgICBHbHlwaE92ZXJmbG93QW5kRmFs
bGJhY2tGb250c01hcDo6aXRlcmF0b3IgaXQgPSB0ZXh0Qm94RGF0YU1hcC5hZGQoZG93bmNhc3Q8
SW5saW5lVGV4dEJveD4ocnVuLT5ib3goKSksIHN0ZDo6bWFrZV9wYWlyKFZlY3Rvcjxjb25zdCBT
aW1wbGVGb250RGF0YSo+KCksIEdseXBoT3ZlcmZsb3coKSkpLml0ZXJhdG9yOworICAgICAgICBH
bHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcDo6aXRlcmF0b3IgaXQgPSB0ZXh0Qm94RGF0
YU1hcC5hZGQoZG93bmNhc3Q8SW5saW5lVGV4dEJveD4ocnVuLT5ib3goKSksIHN0ZDo6bWFrZV9w
YWlyKFZlY3Rvcjxjb25zdCBGb250Kj4oKSwgR2x5cGhPdmVyZmxvdygpKSkuaXRlcmF0b3I7CiAg
ICAgICAgIEFTU0VSVChpdC0+dmFsdWUuZmlyc3QuaXNFbXB0eSgpKTsKICAgICAgICAgY29weVRv
VmVjdG9yKGZhbGxiYWNrRm9udHMsIGl0LT52YWx1ZS5maXJzdCk7CiAgICAgICAgIHJ1bi0+Ym94
KCktPnBhcmVudCgpLT5jbGVhckRlc2NlbmRhbnRzSGF2ZVNhbWVMaW5lSGVpZ2h0QW5kQmFzZWxp
bmUoKTsKQEAgLTUzOSw3ICs1MzksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0TG9naWNhbFdp
ZHRoRm9yVGV4CiAKICAgICBpZiAoIWdseXBoT3ZlcmZsb3cuaXNFbXB0eSgpKSB7CiAgICAgICAg
IEFTU0VSVChydW4tPmJveCgpLT5iZWhhdmVzTGlrZVRleHQoKSk7Ci0gICAgICAgIEdseXBoT3Zl
cmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwOjppdGVyYXRvciBpdCA9IHRleHRCb3hEYXRhTWFwLmFk
ZChkb3duY2FzdDxJbmxpbmVUZXh0Qm94PihydW4tPmJveCgpKSwgc3RkOjptYWtlX3BhaXIoVmVj
dG9yPGNvbnN0IFNpbXBsZUZvbnREYXRhKj4oKSwgR2x5cGhPdmVyZmxvdygpKSkuaXRlcmF0b3I7
CisgICAgICAgIEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwOjppdGVyYXRvciBpdCA9
IHRleHRCb3hEYXRhTWFwLmFkZChkb3duY2FzdDxJbmxpbmVUZXh0Qm94PihydW4tPmJveCgpKSwg
c3RkOjptYWtlX3BhaXIoVmVjdG9yPGNvbnN0IEZvbnQqPigpLCBHbHlwaE92ZXJmbG93KCkpKS5p
dGVyYXRvcjsKICAgICAgICAgaXQtPnZhbHVlLnNlY29uZCA9IGdseXBoT3ZlcmZsb3c7CiAgICAg
ICAgIHJ1bi0+Ym94KCktPmNsZWFyS25vd25Ub0hhdmVOb092ZXJmbG93KCk7CiAgICAgfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuY3BwCShy
ZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29tYmlu
ZVRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIHZvaWQgUmVuZGVyQ29t
YmluZVRleHQ6OnNldFJlbmRlcmVkVGV4dCgKICAgICBtX25lZWRzRm9udFVwZGF0ZSA9IHRydWU7
CiB9CiAKLWZsb2F0IFJlbmRlckNvbWJpbmVUZXh0Ojp3aWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNp
Z25lZCBsZW5ndGgsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBmbG9hdCB4UG9zaXRpb24sIEhh
c2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxv
dyogZ2x5cGhPdmVyZmxvdykgY29uc3QKK2Zsb2F0IFJlbmRlckNvbWJpbmVUZXh0Ojp3aWR0aCh1
bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBm
bG9hdCB4UG9zaXRpb24sIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzLCBHbHlw
aE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAogewogICAgIGlmIChtX2lzQ29tYmluZWQp
CiAgICAgICAgIHJldHVybiBmb250LnNpemUoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJDb21iaW5lVGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJDb21iaW5lVGV4dC5oCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuaAkod29ya2luZyBjb3B5KQpAQCAt
NDYsNyArNDYsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgbm9kZSgpIGNvbnN0ID0gZGVsZXRlOwog
CiAgICAgdmlydHVhbCBib29sIGlzQ29tYmluZVRleHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biB0cnVlOyB9Ci0gICAgdmlydHVhbCBmbG9hdCB3aWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25l
ZCBsZW5ndGgsIGNvbnN0IEZvbnRDYXNjYWRlJiwgZmxvYXQgeFBvc2l0aW9uLCBIYXNoU2V0PGNv
bnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93KiA9
IDApIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgZmxvYXQgd2lkdGgodW5zaWduZWQgZnJv
bSwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBGb250Q2FzY2FkZSYsIGZsb2F0IHhQb3NpdGlvbiwg
SGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93KiA9
IDApIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICJSZW5kZXJDb21iaW5lVGV4dCI7IH0KICAgICB2aXJ0
dWFsIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHls
ZSogb2xkU3R5bGUpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBzZXRSZW5kZXJlZFRleHQo
Y29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU2VhcmNoRmllbGQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJTZWFyY2hGaWVsZC5jcHAJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJDU1NGb250U2VsZWN0b3IuaCIKICNpbmNsdWRlICJD
U1NWYWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCisjaW5jbHVkZSAiRm9udC5o
IgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKICNpbmNs
dWRlICJGcmFtZVZpZXcuaCIKQEAgLTQyLDcgKzQzLDYgQEAKICNpbmNsdWRlICJSZW5kZXJWaWV3
LmgiCiAjaW5jbHVkZSAiU2VhcmNoUG9wdXBNZW51LmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIK
LSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIK
ICNpbmNsdWRlICJUZXh0Q29udHJvbElubmVyRWxlbWVudHMuaCIKIApJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTEs
NyArNDUxLDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJUZXh0Ojpsb2NhbENhcmV0UmVjdChJbgogICAg
IHJldHVybiBib3gucm9vdCgpLmNvbXB1dGVDYXJldFJlY3QobGVmdCwgY2FyZXRXaWR0aCwgZXh0
cmFXaWR0aFRvRW5kT2ZMaW5lKTsKIH0KIAotQUxXQVlTX0lOTElORSBmbG9hdCBSZW5kZXJUZXh0
Ojp3aWR0aEZyb21DYWNoZShjb25zdCBGb250Q2FzY2FkZSYgZiwgaW50IHN0YXJ0LCBpbnQgbGVu
LCBmbG9hdCB4UG9zLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9u
dHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3csIGNvbnN0IFJlbmRlclN0eWxlJiBzdHls
ZSkgY29uc3QKK0FMV0FZU19JTkxJTkUgZmxvYXQgUmVuZGVyVGV4dDo6d2lkdGhGcm9tQ2FjaGUo
Y29uc3QgRm9udENhc2NhZGUmIGYsIGludCBzdGFydCwgaW50IGxlbiwgZmxvYXQgeFBvcywgSGFz
aFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3Zl
cmZsb3csIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKIHsKICAgICBpZiAoc3R5bGUu
aGFzVGV4dENvbWJpbmUoKSAmJiBpczxSZW5kZXJDb21iaW5lVGV4dD4oKnRoaXMpKSB7CiAgICAg
ICAgIGNvbnN0IFJlbmRlckNvbWJpbmVUZXh0JiBjb21iaW5lVGV4dCA9IGRvd25jYXN0PFJlbmRl
ckNvbWJpbmVUZXh0PigqdGhpcyk7CkBAIC02MzAsNyArNjMwLDcgQEAgTGluZUJyZWFrSXRlcmF0
b3JNb2RlIG1hcExpbmVCcmVha1RvSXRlcgogCiB2b2lkIFJlbmRlclRleHQ6OmNvbXB1dGVQcmVm
ZXJyZWRMb2dpY2FsV2lkdGhzKGZsb2F0IGxlYWRXaWR0aCkKIHsKLSAgICBIYXNoU2V0PGNvbnN0
IFNpbXBsZUZvbnREYXRhKj4gZmFsbGJhY2tGb250czsKKyAgICBIYXNoU2V0PGNvbnN0IEZvbnQq
PiBmYWxsYmFja0ZvbnRzOwogICAgIEdseXBoT3ZlcmZsb3cgZ2x5cGhPdmVyZmxvdzsKICAgICBj
b21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyhsZWFkV2lkdGgsIGZhbGxiYWNrRm9udHMsIGds
eXBoT3ZlcmZsb3cpOwogICAgIGlmIChmYWxsYmFja0ZvbnRzLmlzRW1wdHkoKSAmJiAhZ2x5cGhP
dmVyZmxvdy5sZWZ0ICYmICFnbHlwaE92ZXJmbG93LnJpZ2h0ICYmICFnbHlwaE92ZXJmbG93LnRv
cCAmJiAhZ2x5cGhPdmVyZmxvdy5ib3R0b20pCkBAIC02NDMsNyArNjQzLDcgQEAgc3RhdGljIGlu
bGluZSBmbG9hdCBoeXBoZW5XaWR0aChSZW5kZXJUZQogICAgIHJldHVybiBmb250LndpZHRoKFJl
bmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHJlbmRlcmVyLCBmb250LCBzdHlsZS5oeXBoZW5T
dHJpbmcoKS5zdHJpbmcoKSwgc3R5bGUpKTsKIH0KIAotc3RhdGljIGZsb2F0IG1heFdvcmRGcmFn
bWVudFdpZHRoKFJlbmRlclRleHQqIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUs
IGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBTdHJpbmdWaWV3IHdvcmQsIGludCBtaW5pbXVtUHJl
Zml4TGVuZ3RoLCB1bnNpZ25lZCBtaW5pbXVtU3VmZml4TGVuZ3RoLCBpbnQmIHN1ZmZpeFN0YXJ0
LCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4mIGZhbGxiYWNrRm9udHMsIEdseXBoT3Zl
cmZsb3cmIGdseXBoT3ZlcmZsb3cpCitzdGF0aWMgZmxvYXQgbWF4V29yZEZyYWdtZW50V2lkdGgo
UmVuZGVyVGV4dCogcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRm9u
dENhc2NhZGUmIGZvbnQsIFN0cmluZ1ZpZXcgd29yZCwgaW50IG1pbmltdW1QcmVmaXhMZW5ndGgs
IHVuc2lnbmVkIG1pbmltdW1TdWZmaXhMZW5ndGgsIGludCYgc3VmZml4U3RhcnQsIEhhc2hTZXQ8
Y29uc3QgRm9udCo+JiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93JiBnbHlwaE92ZXJmbG93
KQogewogICAgIHN1ZmZpeFN0YXJ0ID0gMDsKICAgICBpZiAod29yZC5sZW5ndGgoKSA8PSBtaW5p
bXVtU3VmZml4TGVuZ3RoKQpAQCAtNjgzLDcgKzY4Myw3IEBAIHN0YXRpYyBmbG9hdCBtYXhXb3Jk
RnJhZ21lbnRXaWR0aChSZW5kZXIKICAgICByZXR1cm4gbWF4RnJhZ21lbnRXaWR0aDsKIH0KIAot
dm9pZCBSZW5kZXJUZXh0Ojpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyhmbG9hdCBsZWFk
V2lkdGgsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiYgZmFsbGJhY2tGb250cywgR2x5
cGhPdmVyZmxvdyYgZ2x5cGhPdmVyZmxvdykKK3ZvaWQgUmVuZGVyVGV4dDo6Y29tcHV0ZVByZWZl
cnJlZExvZ2ljYWxXaWR0aHMoZmxvYXQgbGVhZFdpZHRoLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiYg
ZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyYgZ2x5cGhPdmVyZmxvdykKIHsKICAgICBBU1NF
UlQobV9oYXNUYWIgfHwgcHJlZmVycmVkTG9naWNhbFdpZHRoc0RpcnR5KCkgfHwgIW1fa25vd25U
b0hhdmVOb092ZXJmbG93QW5kTm9GYWxsYmFja0ZvbnRzKTsKIApAQCAtMTIwNiw3ICsxMjA2LDcg
QEAgY29uc3QgU2ltcGxlTGluZUxheW91dDo6TGF5b3V0KiBSZW5kZXJUZQogICAgIHJldHVybiBk
b3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+KCpwYXJlbnQoKSkuc2ltcGxlTGluZUxheW91dCgpOwog
fQogCi1mbG9hdCBSZW5kZXJUZXh0Ojp3aWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4s
IGZsb2F0IHhQb3MsIGJvb2wgZmlyc3RMaW5lLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRh
Kj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0Citm
bG9hdCBSZW5kZXJUZXh0Ojp3aWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIGZsb2F0
IHhQb3MsIGJvb2wgZmlyc3RMaW5lLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250
cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKIHsKICAgICBpZiAoZnJvbSA+
PSB0ZXh0TGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMTIxOCw3ICsxMjE4LDcgQEAg
ZmxvYXQgUmVuZGVyVGV4dDo6d2lkdGgodW5zaWduZWQgZnJvbSwgdQogICAgIHJldHVybiB3aWR0
aChmcm9tLCBsZW4sIGxpbmVTdHlsZS5mb250Q2FzY2FkZSgpLCB4UG9zLCBmYWxsYmFja0ZvbnRz
LCBnbHlwaE92ZXJmbG93KTsKIH0KIAotZmxvYXQgUmVuZGVyVGV4dDo6d2lkdGgodW5zaWduZWQg
ZnJvbSwgdW5zaWduZWQgbGVuLCBjb25zdCBGb250Q2FzY2FkZSYgZiwgZmxvYXQgeFBvcywgSGFz
aFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93
KiBnbHlwaE92ZXJmbG93KSBjb25zdAorZmxvYXQgUmVuZGVyVGV4dDo6d2lkdGgodW5zaWduZWQg
ZnJvbSwgdW5zaWduZWQgbGVuLCBjb25zdCBGb250Q2FzY2FkZSYgZiwgZmxvYXQgeFBvcywgSGFz
aFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3Zl
cmZsb3cpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGZyb20gKyBsZW4gPD0gdGV4dExlbmd0aCgpKTsK
ICAgICBpZiAoIXRleHRMZW5ndGgoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRleHQuaAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtODksOCArODksOCBAQCBwdWJsaWM6CiAgICAg
dW5zaWduZWQgdGV4dExlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dC5pbXBsKCktPmxlbmd0
aCgpOyB9IC8vIG5vbiB2aXJ0dWFsIGltcGxlbWVudGF0aW9uIG9mIGxlbmd0aCgpCiAgICAgdm9p
ZCBwb3NpdGlvbkxpbmVCb3goSW5saW5lVGV4dEJveCYpOwogCi0gICAgdmlydHVhbCBmbG9hdCB3
aWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIGNvbnN0IEZvbnRDYXNjYWRlJiwgZmxv
YXQgeFBvcywgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0g
MCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsKLSAgICB2aXJ0dWFsIGZsb2F0IHdpZHRoKHVu
c2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgZmxvYXQgeFBvcywgYm9vbCBmaXJzdExpbmUgPSBm
YWxzZSwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwg
R2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsKKyAgICB2aXJ0dWFsIGZsb2F0IHdpZHRoKHVuc2ln
bmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgY29uc3QgRm9udENhc2NhZGUmLCBmbG9hdCB4UG9zLCBI
YXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0g
MCkgY29uc3Q7CisgICAgdmlydHVhbCBmbG9hdCB3aWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25l
ZCBsZW4sIGZsb2F0IHhQb3MsIGJvb2wgZmlyc3RMaW5lID0gZmFsc2UsIEhhc2hTZXQ8Y29uc3Qg
Rm9udCo+KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsKIAog
ICAgIGZsb2F0IG1pbkxvZ2ljYWxXaWR0aCgpIGNvbnN0OwogICAgIGZsb2F0IG1heExvZ2ljYWxX
aWR0aCgpIGNvbnN0OwpAQCAtMTgwLDcgKzE4MCw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFs
IGJvb2wgY2FuSGF2ZUNoaWxkcmVuKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWwgeyByZXR1cm4gZmFs
c2U7IH0KIAotICAgIHZvaWQgY29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoZmxvYXQgbGVh
ZFdpZHRoLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4mIGZhbGxiYWNrRm9udHMsIEds
eXBoT3ZlcmZsb3cmKTsKKyAgICB2b2lkIGNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKGZs
b2F0IGxlYWRXaWR0aCwgSGFzaFNldDxjb25zdCBGb250Kj4mIGZhbGxiYWNrRm9udHMsIEdseXBo
T3ZlcmZsb3cmKTsKIAogICAgIGJvb2wgY29tcHV0ZUNhblVzZVNpbXBsZUZvbnRDb2RlUGF0aCgp
IGNvbnN0OwogICAgIApAQCAtMTkyLDcgKzE5Miw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBi
b29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNv
bnN0IEhpdFRlc3RMb2NhdGlvbiYsIGNvbnN0IExheW91dFBvaW50JiwgSGl0VGVzdEFjdGlvbikg
b3ZlcnJpZGUgZmluYWwgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIGZhbHNlOyB9CiAK
ICAgICBib29sIGNvbnRhaW5zT25seVdoaXRlc3BhY2UodW5zaWduZWQgZnJvbSwgdW5zaWduZWQg
bGVuKSBjb25zdDsKLSAgICBmbG9hdCB3aWR0aEZyb21DYWNoZShjb25zdCBGb250Q2FzY2FkZSYs
IGludCBzdGFydCwgaW50IGxlbiwgZmxvYXQgeFBvcywgSGFzaFNldDxjb25zdCBTaW1wbGVGb250
RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiwgY29uc3QgUmVuZGVyU3R5bGUm
KSBjb25zdDsKKyAgICBmbG9hdCB3aWR0aEZyb21DYWNoZShjb25zdCBGb250Q2FzY2FkZSYsIGlu
dCBzdGFydCwgaW50IGxlbiwgZmxvYXQgeFBvcywgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxi
YWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqLCBjb25zdCBSZW5kZXJTdHlsZSYpIGNvbnN0OwogICAg
IGJvb2wgaXNBbGxBU0NJSSgpIGNvbnN0IHsgcmV0dXJuIG1faXNBbGxBU0NJSTsgfQogICAgIGJv
b2wgY29tcHV0ZVVzZUJhY2tzbGFzaEFzWWVuU3ltYm9sKCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmUuY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiAr
MjcsNyBAQAogI2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1ZhbHVl
S2V5d29yZHMuaCIKICNpbmNsdWRlICJDaHJvbWUuaCIKKyNpbmNsdWRlICJGb250LmgiCiAjaW5j
bHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgIkZy
YW1lVmlldy5oIgpAQCAtNDAsNyArNDEsNiBAQAogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAj
aW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAi
U2ltcGxlRm9udERhdGEuaCIKICNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAi
VGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmgiCiAjaW5jbHVkZSA8d3RmL1N0YWNrU3RhdHMuaD4K
QEAgLTM0Niw3ICszNDYsNyBAQCBMYXlvdXRVbml0IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZTo6CiAgICAgaWYgKGZhbWlseSA9PSAiTHVjaWRhIEdyYW5kZSIpCiAgICAgICAgIG1heENoYXJX
aWR0aCA9IHNjYWxlRW1Ub1VuaXRzKDQwMjcpOwogICAgIGVsc2UgaWYgKHN0eWxlKCkuZm9udENh
c2NhZGUoKS5oYXNWYWxpZEF2ZXJhZ2VDaGFyV2lkdGgoKSkKLSAgICAgICAgbWF4Q2hhcldpZHRo
ID0gcm91bmRmKHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5tYXhDaGFy
V2lkdGgoKSk7CisgICAgICAgIG1heENoYXJXaWR0aCA9IHJvdW5kZihzdHlsZSgpLmZvbnRDYXNj
YWRlKCkucHJpbWFyeUZvbnQoKS5tYXhDaGFyV2lkdGgoKSk7CiAjZW5kaWYKIAogICAgIC8vIEZv
ciB0ZXh0IGlucHV0cywgSUUgYWRkcyBzb21lIGV4dHJhIHdpZHRoLgpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQkocmV2aXNpb24gMTc4ODU3KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC01ODAsNyArNTgwLDcgQEAgc3RhdGljIHZvaWQgYWRqdXN0SW5wdXRFbGVtZW50QnV0dG9u
U3R5bAogICAgIEZvbnRDYXNjYWRlIGZvbnQgPSBzdHlsZS5mb250Q2FzY2FkZSgpOwogICAgIAog
ICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBpbnB1dEVsZW1lbnQucmVuZGVyZXIoKTsKLSAg
ICBpZiAoZm9udC5wcmltYXJ5Rm9udERhdGEoKS5pc1NWR0ZvbnQoKSAmJiAhcmVuZGVyZXIpCisg
ICAgaWYgKGZvbnQucHJpbWFyeUZvbnQoKS5pc1NWR0ZvbnQoKSAmJiAhcmVuZGVyZXIpCiAgICAg
ICAgIHJldHVybjsKICAgICAKICAgICBmbG9hdCBtYXhpbXVtV2lkdGggPSBsb2NhbGl6ZWREYXRl
Q2FjaGUoKS5tYXhpbXVtV2lkdGhGb3JEYXRlVHlwZShkYXRlVHlwZSwgZm9udCwgUmVuZGVyVGhl
bWVNZWFzdXJlVGV4dENsaWVudChmb250LCAqcmVuZGVyZXIsIHN0eWxlKSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCShyZXZpc2lvbiAxNzg4NTcp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTg4NSw3ICs4ODUsNyBAQCB2b2lkIFJvb3RJbmxpbmVCb3g6OmFzY2VudEFuZERl
c2NlbnRGb3JCCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBWZWN0b3I8Y29uc3QgU2lt
cGxlRm9udERhdGEqPiogdXNlZEZvbnRzID0gbnVsbHB0cjsKKyAgICBWZWN0b3I8Y29uc3QgRm9u
dCo+KiB1c2VkRm9udHMgPSBudWxscHRyOwogICAgIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZs
b3cgPSBudWxscHRyOwogICAgIGlmIChpczxJbmxpbmVUZXh0Qm94Pihib3gpKSB7CiAgICAgICAg
IEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwOjppdGVyYXRvciBpdCA9IHRleHRCb3hE
YXRhTWFwLmZpbmQoJmRvd25jYXN0PElubGluZVRleHRCb3g+KGJveCkpOwpAQCAtOTAxLDcgKzkw
MSw3IEBAIHZvaWQgUm9vdElubGluZUJveDo6YXNjZW50QW5kRGVzY2VudEZvckIKIAogICAgIGNv
bnN0IFJlbmRlclN0eWxlJiBib3hMaW5lU3R5bGUgPSBib3gubGluZVN0eWxlKCk7CiAgICAgaWYg
KHVzZWRGb250cyAmJiAhdXNlZEZvbnRzLT5pc0VtcHR5KCkgJiYgKGluY2x1ZGVGb250IHx8IChi
b3hMaW5lU3R5bGUubGluZUhlaWdodCgpLmlzTmVnYXRpdmUoKSAmJiBpbmNsdWRlTGVhZGluZykp
KSB7Ci0gICAgICAgIHVzZWRGb250cy0+YXBwZW5kKCZib3hMaW5lU3R5bGUuZm9udENhc2NhZGUo
KS5wcmltYXJ5Rm9udERhdGEoKSk7CisgICAgICAgIHVzZWRGb250cy0+YXBwZW5kKCZib3hMaW5l
U3R5bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpKTsKICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCB1c2VkRm9udHMtPnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBjb25zdCBG
b250TWV0cmljcyYgZm9udE1ldHJpY3MgPSB1c2VkRm9udHMtPmF0KGkpLT5mb250TWV0cmljcygp
OwogICAgICAgICAgICAgaW50IHVzZWRGb250QXNjZW50ID0gZm9udE1ldHJpY3MuYXNjZW50KGJh
c2VsaW5lVHlwZSgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5l
TGF5b3V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxl
TGluZUxheW91dC5jcHAJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9TaW1wbGVMaW5lTGF5b3V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgU2ltcGxlTGluZUxheW91dCB7CiAKIHRl
bXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIGJvb2wgY2FuVXNlRm9yVGV4
dChjb25zdCBDaGFyYWN0ZXJUeXBlKiB0ZXh0LCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFNpbXBs
ZUZvbnREYXRhJiBmb250RGF0YSkKK3N0YXRpYyBib29sIGNhblVzZUZvclRleHQoY29uc3QgQ2hh
cmFjdGVyVHlwZSogdGV4dCwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBGb250JiBmb250KQogewog
ICAgIC8vIEZJWE1FOiA8dGV4dGFyZWEgbWF4bGVuZ3RoPTA+IGdlbmVyYXRlcyBlbXB0eSB0ZXh0
IG5vZGUuCiAgICAgaWYgKCFsZW5ndGgpCkBAIC03NSwxNyArNzUsMTcgQEAgc3RhdGljIGJvb2wg
Y2FuVXNlRm9yVGV4dChjb25zdCBDaGFyYWN0ZQogICAgICAgICAgICAgfHwgZGlyZWN0aW9uID09
IFVfUE9QX0RJUkVDVElPTkFMX0ZPUk1BVCB8fCBkaXJlY3Rpb24gPT0gVV9CT1VOREFSWV9ORVVU
UkFMKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGlmICghZm9udERhdGEu
Z2x5cGhGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyKSkKKyAgICAgICAgaWYgKCFmb250LmdseXBoRm9y
Q2hhcmFjdGVyKGNoYXJhY3RlcikpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
ICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCBjYW5Vc2VGb3JUZXh0KGNvbnN0IFJl
bmRlclRleHQmIHRleHRSZW5kZXJlciwgY29uc3QgU2ltcGxlRm9udERhdGEmIGZvbnREYXRhKQor
c3RhdGljIGJvb2wgY2FuVXNlRm9yVGV4dChjb25zdCBSZW5kZXJUZXh0JiB0ZXh0UmVuZGVyZXIs
IGNvbnN0IEZvbnQmIGZvbnQpCiB7CiAgICAgaWYgKHRleHRSZW5kZXJlci5pczhCaXQoKSkKLSAg
ICAgICAgcmV0dXJuIGNhblVzZUZvclRleHQodGV4dFJlbmRlcmVyLmNoYXJhY3RlcnM4KCksIHRl
eHRSZW5kZXJlci50ZXh0TGVuZ3RoKCksIGZvbnREYXRhKTsKLSAgICByZXR1cm4gY2FuVXNlRm9y
VGV4dCh0ZXh0UmVuZGVyZXIuY2hhcmFjdGVyczE2KCksIHRleHRSZW5kZXJlci50ZXh0TGVuZ3Ro
KCksIGZvbnREYXRhKTsKKyAgICAgICAgcmV0dXJuIGNhblVzZUZvclRleHQodGV4dFJlbmRlcmVy
LmNoYXJhY3RlcnM4KCksIHRleHRSZW5kZXJlci50ZXh0TGVuZ3RoKCksIGZvbnQpOworICAgIHJl
dHVybiBjYW5Vc2VGb3JUZXh0KHRleHRSZW5kZXJlci5jaGFyYWN0ZXJzMTYoKSwgdGV4dFJlbmRl
cmVyLnRleHRMZW5ndGgoKSwgZm9udCk7CiB9CiAKIGJvb2wgY2FuVXNlRm9yKGNvbnN0IFJlbmRl
ckJsb2NrRmxvdyYgZmxvdykKQEAgLTE4NCwxMSArMTg0LDExIEBAIGJvb2wgY2FuVXNlRm9yKGNv
bnN0IFJlbmRlckJsb2NrRmxvdyYgZmwKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0K
LSAgICBpZiAoc3R5bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5pc1NWR0ZvbnQo
KSkKKyAgICBpZiAoc3R5bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpLmlzU1ZHRm9udCgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgLy8gV2UgYXNzdW1lIHRoYXQgYWxsIGxpbmVz
IGhhdmUgbWV0cmljcyBiYXNlZCBwdXJlbHkgb24gdGhlIHByaW1hcnkgZm9udC4KLSAgICBhdXRv
JiBwcmltYXJ5Rm9udERhdGEgPSBzdHlsZS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgp
OwotICAgIGlmIChwcmltYXJ5Rm9udERhdGEuaXNMb2FkaW5nKCkpCisgICAgYXV0byYgcHJpbWFy
eUZvbnQgPSBzdHlsZS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCk7CisgICAgaWYgKHByaW1h
cnlGb250LmlzTG9hZGluZygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgZm9yIChjb25z
dCBhdXRvJiB0ZXh0UmVuZGVyZXIgOiBjaGlsZHJlbk9mVHlwZTxSZW5kZXJUZXh0PihmbG93KSkg
ewogICAgICAgICBpZiAodGV4dFJlbmRlcmVyLmlzQ29tYmluZVRleHQoKSB8fCB0ZXh0UmVuZGVy
ZXIuaXNDb3VudGVyKCkgfHwgdGV4dFJlbmRlcmVyLmlzUXVvdGUoKSB8fCB0ZXh0UmVuZGVyZXIu
aXNUZXh0RnJhZ21lbnQoKQpAQCAtMTk2LDcgKzE5Niw3IEBAIGJvb2wgY2FuVXNlRm9yKGNvbnN0
IFJlbmRlckJsb2NrRmxvdyYgZmwKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
aWYgKHN0eWxlLmZvbnRDYXNjYWRlKCkuY29kZVBhdGgoVGV4dFJ1bih0ZXh0UmVuZGVyZXIudGV4
dCgpKSkgIT0gRm9udENhc2NhZGU6OlNpbXBsZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgaWYgKCFjYW5Vc2VGb3JUZXh0KHRleHRSZW5kZXJlciwgcHJpbWFyeUZvbnREYXRh
KSkKKyAgICAgICAgaWYgKCFjYW5Vc2VGb3JUZXh0KHRleHRSZW5kZXJlciwgcHJpbWFyeUZvbnQp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0JyZWFraW5nQ29udGV4dElubGluZUhl
YWRlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9CcmVh
a2luZ0NvbnRleHRJbmxpbmVIZWFkZXJzLmgJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9saW5lL0JyZWFraW5nQ29udGV4dElubGluZUhlYWRlcnMuaAkod29y
a2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBzdHJ1Y3QgV29yZE1lYXN1cmVtZW50IHsKICAg
ICBmbG9hdCB3aWR0aDsKICAgICBpbnQgc3RhcnRPZmZzZXQ7CiAgICAgaW50IGVuZE9mZnNldDsK
LSAgICBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4gZmFsbGJhY2tGb250czsKKyAgICBI
YXNoU2V0PGNvbnN0IEZvbnQqPiBmYWxsYmFja0ZvbnRzOwogfTsKIAogY2xhc3MgQnJlYWtpbmdD
b250ZXh0IHsKQEAgLTQ4NiwxMyArNDg2LDEzIEBAIGlubGluZSB2b2lkIHVwZGF0ZUNvdW50ZXJJ
Zk5lZWRlZChSZW5kZXIKICAgICBkb3duY2FzdDxSZW5kZXJDb3VudGVyPihyZW5kZXJUZXh0KS51
cGRhdGVDb3VudGVyKCk7CiB9CiAKLWlubGluZSBmbG9hdCBtZWFzdXJlSHlwaGVuV2lkdGgoUmVu
ZGVyVGV4dCogcmVuZGVyZXIsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBIYXNoU2V0PGNvbnN0
IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwKQoraW5saW5lIGZsb2F0IG1lYXN1
cmVIeXBoZW5XaWR0aChSZW5kZXJUZXh0KiByZW5kZXJlciwgY29uc3QgRm9udENhc2NhZGUmIGZv
bnQsIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzID0gMCkKIHsKICAgICBjb25z
dCBSZW5kZXJTdHlsZSYgc3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKTsKICAgICByZXR1cm4gZm9u
dC53aWR0aChSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bihyZW5kZXJlciwgZm9udCwgc3R5
bGUuaHlwaGVuU3RyaW5nKCkuc3RyaW5nKCksIHN0eWxlKSwgZmFsbGJhY2tGb250cyk7CiB9CiAK
LUFMV0FZU19JTkxJTkUgZmxvYXQgdGV4dFdpZHRoKFJlbmRlclRleHQqIHRleHQsIHVuc2lnbmVk
IGZyb20sIHVuc2lnbmVkIGxlbiwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGZsb2F0IHhQb3Ms
IGJvb2wgaXNGaXhlZFBpdGNoLCBib29sIGNvbGxhcHNlV2hpdGVTcGFjZSwgSGFzaFNldDxjb25z
dCBTaW1wbGVGb250RGF0YSo+JiBmYWxsYmFja0ZvbnRzLCBUZXh0TGF5b3V0KiBsYXlvdXQgPSAw
KQorQUxXQVlTX0lOTElORSBmbG9hdCB0ZXh0V2lkdGgoUmVuZGVyVGV4dCogdGV4dCwgdW5zaWdu
ZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgZmxvYXQgeFBv
cywgYm9vbCBpc0ZpeGVkUGl0Y2gsIGJvb2wgY29sbGFwc2VXaGl0ZVNwYWNlLCBIYXNoU2V0PGNv
bnN0IEZvbnQqPiYgZmFsbGJhY2tGb250cywgVGV4dExheW91dCogbGF5b3V0ID0gMCkKIHsKICAg
ICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUgPSB0ZXh0LT5zdHlsZSgpOwogCkBAIC01NzgsNyAr
NTc4LDcgQEAgaW5saW5lIHZvaWQgdHJ5SHlwaGVuYXRpbmcoUmVuZGVyVGV4dCogdAogICAgIEFT
U0VSVChwb3MgLSBsYXN0U3BhY2UgLSBwcmVmaXhMZW5ndGggPj0gbWluaW11bVN1ZmZpeExlbmd0
aCk7CiAKICNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgSGFzaFNldDxjb25zdCBTaW1wbGVGb250
RGF0YSo+IGZhbGxiYWNrRm9udHM7CisgICAgSGFzaFNldDxjb25zdCBGb250Kj4gZmFsbGJhY2tG
b250czsKICAgICBmbG9hdCBwcmVmaXhXaWR0aCA9IGh5cGhlbldpZHRoICsgdGV4dFdpZHRoKHRl
eHQsIGxhc3RTcGFjZSwgcHJlZml4TGVuZ3RoLCBmb250LCB4UG9zLCBpc0ZpeGVkUGl0Y2gsIGNv
bGxhcHNlV2hpdGVTcGFjZSwgZmFsbGJhY2tGb250cykgKyBsYXN0U3BhY2VXb3JkU3BhY2luZzsK
ICAgICBBU1NFUlQoeFBvcyArIHByZWZpeFdpZHRoIDw9IGF2YWlsYWJsZVdpZHRoKTsKICNlbHNl
CkBAIC02NTYsNyArNjU2LDcgQEAgaW5saW5lIGJvb2wgQnJlYWtpbmdDb250ZXh0OjpoYW5kbGVU
ZXh0KAogCiAgICAgLy8gTm9uLXplcm8gb25seSB3aGVuIGtlcm5pbmcgaXMgZW5hYmxlZCBhbmQg
VGV4dExheW91dCBpc24ndCB1c2VkLCBpbiB3aGljaCBjYXNlIHdlIG1lYXN1cmUKICAgICAvLyB3
b3JkcyB3aXRoIHRoZWlyIHRyYWlsaW5nIHNwYWNlLCB0aGVuIHN1YnRyYWN0IGl0cyB3aWR0aC4K
LSAgICBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4gZmFsbGJhY2tGb250czsKKyAgICBI
YXNoU2V0PGNvbnN0IEZvbnQqPiBmYWxsYmFja0ZvbnRzOwogICAgIGZsb2F0IHdvcmRUcmFpbGlu
Z1NwYWNlV2lkdGggPSAoZm9udC50eXBlc2V0dGluZ0ZlYXR1cmVzKCkgJiBLZXJuaW5nKSAmJiAh
dGV4dExheW91dCA/IGZvbnQud2lkdGgoUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4oJnJl
bmRlclRleHQsIGZvbnQsICZzcGFjZSwgMSwgc3R5bGUpLCAmZmFsbGJhY2tGb250cykgKyB3b3Jk
U3BhY2luZyA6IDA7CiAKICAgICBVQ2hhciBsYXN0Q2hhcmFjdGVyID0gbV9yZW5kZXJUZXh0SW5m
by5tX2xpbmVCcmVha0l0ZXJhdG9yLmxhc3RDaGFyYWN0ZXIoKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3Iu
Y3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1s
L1JlbmRlck1hdGhNTE9wZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMzMyw3ICsxMzMz
LDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6cmVzZXRTdHJldGNoUwogCiBGbG9hdFJl
Y3QgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmJvdW5kc0ZvckdseXBoKGNvbnN0IEdseXBoRGF0YSYg
ZGF0YSkgY29uc3QKIHsKLSAgICByZXR1cm4gZGF0YS5mb250RGF0YS0+Ym91bmRzRm9yR2x5cGgo
ZGF0YS5nbHlwaCk7CisgICAgcmV0dXJuIGRhdGEuZm9udC0+Ym91bmRzRm9yR2x5cGgoZGF0YS5n
bHlwaCk7CiB9CiAKIGZsb2F0IFJlbmRlck1hdGhNTE9wZXJhdG9yOjpoZWlnaHRGb3JHbHlwaChj
b25zdCBHbHlwaERhdGEmIGRhdGEpIGNvbnN0CkBAIC0xMzQzLDcgKzEzNDMsNyBAQCBmbG9hdCBS
ZW5kZXJNYXRoTUxPcGVyYXRvcjo6aGVpZ2h0Rm9yR2x5CiAKIGZsb2F0IFJlbmRlck1hdGhNTE9w
ZXJhdG9yOjphZHZhbmNlRm9yR2x5cGgoY29uc3QgR2x5cGhEYXRhJiBkYXRhKSBjb25zdAogewot
ICAgIHJldHVybiBkYXRhLmZvbnREYXRhLT53aWR0aEZvckdseXBoKGRhdGEuZ2x5cGgpOworICAg
IHJldHVybiBkYXRhLmZvbnQtPndpZHRoRm9yR2x5cGgoZGF0YS5nbHlwaCk7CiB9CiAKIHZvaWQg
UmVuZGVyTWF0aE1MT3BlcmF0b3I6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCkKQEAg
LTE1MjEsMTEgKzE1MjEsMTEgQEAgYm9vbCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Z2V0R2x5cGhB
c3NlbQogICAgIGlmICghYm90dG9tLmdseXBoKQogICAgICAgICBib3R0b20uZ2x5cGggPSBleHRl
bnNpb24uZ2x5cGg7CiAKLSAgICB0b3AuZm9udERhdGEgPSAmc3R5bGUoKS5mb250Q2FzY2FkZSgp
LnByaW1hcnlGb250RGF0YSgpOwotICAgIGV4dGVuc2lvbi5mb250RGF0YSA9IHRvcC5mb250RGF0
YTsKLSAgICBib3R0b20uZm9udERhdGEgPSB0b3AuZm9udERhdGE7CisgICAgdG9wLmZvbnQgPSAm
c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCk7CisgICAgZXh0ZW5zaW9uLmZvbnQg
PSB0b3AuZm9udDsKKyAgICBib3R0b20uZm9udCA9IHRvcC5mb250OwogICAgIGlmIChtaWRkbGUu
Z2x5cGgpCi0gICAgICAgIG1pZGRsZS5mb250RGF0YSA9IHRvcC5mb250RGF0YTsKKyAgICAgICAg
bWlkZGxlLmZvbnQgPSB0b3AuZm9udDsKIAogICAgIHN0cmV0Y2h5RGF0YS5zZXRHbHlwaEFzc2Vt
Ymx5TW9kZSh0b3AsIGV4dGVuc2lvbiwgYm90dG9tLCBtaWRkbGUpOwogCkBAIC0xNTM4LDI0ICsx
NTM4LDI0IEBAIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpTdHJldGNoeURhdGEgUmVuZGUKIAogICAg
IEFTU0VSVChtX2lzVmVydGljYWwgJiYgaXNMYXJnZU9wZXJhdG9ySW5EaXNwbGF5U3R5bGUoKSk7
CiAKLSAgICBjb25zdCBhdXRvJiBwcmltYXJ5Rm9udERhdGEgPSBzdHlsZSgpLmZvbnRDYXNjYWRl
KCkucHJpbWFyeUZvbnREYXRhKCk7CisgICAgY29uc3QgYXV0byYgcHJpbWFyeUZvbnQgPSBzdHls
ZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKTsKICAgICBHbHlwaERhdGEgYmFzZUdseXBo
ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpLmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIs
ICFzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSk7Ci0gICAgaWYgKCFwcmltYXJ5Rm9u
dERhdGEubWF0aERhdGEoKSB8fCBiYXNlR2x5cGguZm9udERhdGEgIT0gJnByaW1hcnlGb250RGF0
YSkKKyAgICBpZiAoIXByaW1hcnlGb250Lm1hdGhEYXRhKCkgfHwgYmFzZUdseXBoLmZvbnQgIT0g
JnByaW1hcnlGb250KQogICAgICAgICByZXR1cm4gZGF0YTsKIAogICAgIFZlY3RvcjxHbHlwaD4g
c2l6ZVZhcmlhbnRzOwogICAgIFZlY3RvcjxPcGVuVHlwZU1hdGhEYXRhOjpBc3NlbWJseVBhcnQ+
IGFzc2VtYmx5UGFydHM7CiAKICAgICAvLyBUaGUgdmFsdWUgb2YgZGlzcGxheU9wZXJhdG9yTWlu
SGVpZ2h0IGlzIHNvbWV0aW1lcyB0b28gc21hbGwsIHNvIHdlIGVuc3VyZSB0aGF0IGl0IGlzIGF0
IGxlYXN0IFxzcXJ0ezJ9IHRpbWVzIHRoZSBzaXplIG9mIHRoZSBiYXNlIGdseXBoLgotICAgIGZs
b2F0IGRpc3BsYXlPcGVyYXRvck1pbkhlaWdodCA9IHN0ZDo6bWF4KGJhc2VHbHlwaC5mb250RGF0
YS0+Ym91bmRzRm9yR2x5cGgoYmFzZUdseXBoLmdseXBoKS5oZWlnaHQoKSAqIHNxcnRPZlR3b0Zs
b2F0LCBwcmltYXJ5Rm9udERhdGEubWF0aERhdGEoKS0+Z2V0TWF0aENvbnN0YW50KHByaW1hcnlG
b250RGF0YSwgT3BlblR5cGVNYXRoRGF0YTo6RGlzcGxheU9wZXJhdG9yTWluSGVpZ2h0KSk7Cisg
ICAgZmxvYXQgZGlzcGxheU9wZXJhdG9yTWluSGVpZ2h0ID0gc3RkOjptYXgoYmFzZUdseXBoLmZv
bnQtPmJvdW5kc0ZvckdseXBoKGJhc2VHbHlwaC5nbHlwaCkuaGVpZ2h0KCkgKiBzcXJ0T2ZUd29G
bG9hdCwgcHJpbWFyeUZvbnQubWF0aERhdGEoKS0+Z2V0TWF0aENvbnN0YW50KHByaW1hcnlGb250
LCBPcGVuVHlwZU1hdGhEYXRhOjpEaXNwbGF5T3BlcmF0b3JNaW5IZWlnaHQpKTsKIAotICAgIHBy
aW1hcnlGb250RGF0YS5tYXRoRGF0YSgpLT5nZXRNYXRoVmFyaWFudHMoYmFzZUdseXBoLmdseXBo
LCB0cnVlLCBzaXplVmFyaWFudHMsIGFzc2VtYmx5UGFydHMpOworICAgIHByaW1hcnlGb250Lm1h
dGhEYXRhKCktPmdldE1hdGhWYXJpYW50cyhiYXNlR2x5cGguZ2x5cGgsIHRydWUsIHNpemVWYXJp
YW50cywgYXNzZW1ibHlQYXJ0cyk7CiAKICAgICAvLyBXZSBjaG9vc2UgdGhlIGZpcnN0IHNpemUg
dmFyaWFudCB0aGF0IGlzIGxhcmdlciB0aGFuIHRoZSBleHBlY3RlZCBkaXNwbGF5T3BlcmF0b3JN
aW5IZWlnaHQgYW5kIG90aGVyd2lzZSBmYWxsYmFjayB0byB0aGUgbGFyZ2VzdCB2YXJpYW50Lgog
ICAgIGZvciAoYXV0byYgdmFyaWFudCA6IHNpemVWYXJpYW50cykgewogICAgICAgICBHbHlwaERh
dGEgc2l6ZVZhcmlhbnQ7CiAgICAgICAgIHNpemVWYXJpYW50LmdseXBoID0gdmFyaWFudDsKLSAg
ICAgICAgc2l6ZVZhcmlhbnQuZm9udERhdGEgPSAmcHJpbWFyeUZvbnREYXRhOworICAgICAgICBz
aXplVmFyaWFudC5mb250ID0gJnByaW1hcnlGb250OwogICAgICAgICBkYXRhLnNldFNpemVWYXJp
YW50TW9kZShzaXplVmFyaWFudCk7CiAgICAgICAgIGlmIChib3VuZHNGb3JHbHlwaChzaXplVmFy
aWFudCkuaGVpZ2h0KCkgPj0gZGlzcGxheU9wZXJhdG9yTWluSGVpZ2h0KQogICAgICAgICAgICAg
cmV0dXJuIGRhdGE7CkBAIC0xNTcwLDE4ICsxNTcwLDE4IEBAIFJlbmRlck1hdGhNTE9wZXJhdG9y
OjpTdHJldGNoeURhdGEgUmVuZGUKICAgICBTdHJldGNoeURhdGEgZGF0YTsKICAgICBTdHJldGNo
eURhdGEgYXNzZW1ibHlEYXRhOwogCi0gICAgY29uc3QgYXV0byYgcHJpbWFyeUZvbnREYXRhID0g
c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpOworICAgIGNvbnN0IGF1dG8m
IHByaW1hcnlGb250ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCk7CiAgICAg
R2x5cGhEYXRhIGJhc2VHbHlwaCA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5nbHlwaERhdGFGb3JD
aGFyYWN0ZXIoY2hhcmFjdGVyLCAhc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpOwog
ICAgIAotICAgIGlmIChwcmltYXJ5Rm9udERhdGEubWF0aERhdGEoKSAmJiBiYXNlR2x5cGguZm9u
dERhdGEgPT0gJnByaW1hcnlGb250RGF0YSkgeworICAgIGlmIChwcmltYXJ5Rm9udC5tYXRoRGF0
YSgpICYmIGJhc2VHbHlwaC5mb250ID09ICZwcmltYXJ5Rm9udCkgewogICAgICAgICBWZWN0b3I8
R2x5cGg+IHNpemVWYXJpYW50czsKICAgICAgICAgVmVjdG9yPE9wZW5UeXBlTWF0aERhdGE6OkFz
c2VtYmx5UGFydD4gYXNzZW1ibHlQYXJ0czsKLSAgICAgICAgcHJpbWFyeUZvbnREYXRhLm1hdGhE
YXRhKCktPmdldE1hdGhWYXJpYW50cyhiYXNlR2x5cGguZ2x5cGgsIG1faXNWZXJ0aWNhbCwgc2l6
ZVZhcmlhbnRzLCBhc3NlbWJseVBhcnRzKTsKKyAgICAgICAgcHJpbWFyeUZvbnQubWF0aERhdGEo
KS0+Z2V0TWF0aFZhcmlhbnRzKGJhc2VHbHlwaC5nbHlwaCwgbV9pc1ZlcnRpY2FsLCBzaXplVmFy
aWFudHMsIGFzc2VtYmx5UGFydHMpOwogICAgICAgICAvLyBXZSB2ZXJpZnkgdGhlIHNpemUgdmFy
aWFudHMuCiAgICAgICAgIGZvciAoYXV0byYgdmFyaWFudCA6IHNpemVWYXJpYW50cykgewogICAg
ICAgICAgICAgR2x5cGhEYXRhIHNpemVWYXJpYW50OwogICAgICAgICAgICAgc2l6ZVZhcmlhbnQu
Z2x5cGggPSB2YXJpYW50OwotICAgICAgICAgICAgc2l6ZVZhcmlhbnQuZm9udERhdGEgPSAmcHJp
bWFyeUZvbnREYXRhOworICAgICAgICAgICAgc2l6ZVZhcmlhbnQuZm9udCA9ICZwcmltYXJ5Rm9u
dDsKICAgICAgICAgICAgIGlmIChtYXhpbXVtR2x5cGhXaWR0aCkKICAgICAgICAgICAgICAgICAq
bWF4aW11bUdseXBoV2lkdGggPSBzdGQ6Om1heCgqbWF4aW11bUdseXBoV2lkdGgsIGFkdmFuY2VG
b3JHbHlwaChzaXplVmFyaWFudCkpOwogICAgICAgICAgICAgZWxzZSB7CkBAIC0xODAxLDggKzE4
MDEsOCBAQCBMYXlvdXRSZWN0IFJlbmRlck1hdGhNTE9wZXJhdG9yOjpwYWludEdsCiAgICAgaW5m
by5jb250ZXh0LT5jbGlwKGNsaXBCb3VuZHMpOwogCiAgICAgR2x5cGhCdWZmZXIgYnVmZmVyOwot
ICAgIGJ1ZmZlci5hZGQoZGF0YS5nbHlwaCwgZGF0YS5mb250RGF0YSwgYWR2YW5jZUZvckdseXBo
KGRhdGEpKTsKLSAgICBpbmZvLmNvbnRleHQtPmRyYXdHbHlwaHMoc3R5bGUoKS5mb250Q2FzY2Fk
ZSgpLCAqZGF0YS5mb250RGF0YSwgYnVmZmVyLCAwLCAxLCBvcmlnaW4pOworICAgIGJ1ZmZlci5h
ZGQoZGF0YS5nbHlwaCwgZGF0YS5mb250LCBhZHZhbmNlRm9yR2x5cGgoZGF0YSkpOworICAgIGlu
Zm8uY29udGV4dC0+ZHJhd0dseXBocyhzdHlsZSgpLmZvbnRDYXNjYWRlKCksICpkYXRhLmZvbnQs
IGJ1ZmZlciwgMCwgMSwgb3JpZ2luKTsKIAogICAgIHJldHVybiBnbHlwaFBhaW50UmVjdDsKIH0K
QEAgLTE4OTQsMTEgKzE4OTQsMTEgQEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6cGFpbnQo
UGFpbnRJbgogICAgIGlmIChtX3N0cmV0Y2h5RGF0YS5tb2RlKCkgPT0gRHJhd1NpemVWYXJpYW50
KSB7CiAgICAgICAgIEFTU0VSVChtX3N0cmV0Y2h5RGF0YS52YXJpYW50KCkuZ2x5cGgpOwogICAg
ICAgICBHbHlwaEJ1ZmZlciBidWZmZXI7Ci0gICAgICAgIGJ1ZmZlci5hZGQobV9zdHJldGNoeURh
dGEudmFyaWFudCgpLmdseXBoLCBtX3N0cmV0Y2h5RGF0YS52YXJpYW50KCkuZm9udERhdGEsIGFk
dmFuY2VGb3JHbHlwaChtX3N0cmV0Y2h5RGF0YS52YXJpYW50KCkpKTsKKyAgICAgICAgYnVmZmVy
LmFkZChtX3N0cmV0Y2h5RGF0YS52YXJpYW50KCkuZ2x5cGgsIG1fc3RyZXRjaHlEYXRhLnZhcmlh
bnQoKS5mb250LCBhZHZhbmNlRm9yR2x5cGgobV9zdHJldGNoeURhdGEudmFyaWFudCgpKSk7CiAg
ICAgICAgIExheW91dFBvaW50IG9wZXJhdG9yVG9wTGVmdCA9IGNlaWxlZEludFBvaW50KHBhaW50
T2Zmc2V0ICsgbG9jYXRpb24oKSk7CiAgICAgICAgIEZsb2F0UmVjdCBnbHlwaEJvdW5kcyA9IGJv
dW5kc0ZvckdseXBoKG1fc3RyZXRjaHlEYXRhLnZhcmlhbnQoKSk7CiAgICAgICAgIExheW91dFBv
aW50IG9wZXJhdG9yT3JpZ2luKG9wZXJhdG9yVG9wTGVmdC54KCksIG9wZXJhdG9yVG9wTGVmdC55
KCkgLSBnbHlwaEJvdW5kcy55KCkpOwotICAgICAgICBpbmZvLmNvbnRleHQtPmRyYXdHbHlwaHMo
c3R5bGUoKS5mb250Q2FzY2FkZSgpLCAqbV9zdHJldGNoeURhdGEudmFyaWFudCgpLmZvbnREYXRh
LCBidWZmZXIsIDAsIDEsIG9wZXJhdG9yT3JpZ2luKTsKKyAgICAgICAgaW5mby5jb250ZXh0LT5k
cmF3R2x5cGhzKHN0eWxlKCkuZm9udENhc2NhZGUoKSwgKm1fc3RyZXRjaHlEYXRhLnZhcmlhbnQo
KS5mb250LCBidWZmZXIsIDAsIDEsIG9wZXJhdG9yT3JpZ2luKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIApAQCAtMTk4MCw4ICsxOTgwLDggQEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6
cGFpbnRDaGlsZHJlbgogCiBMYXlvdXRVbml0IFJlbmRlck1hdGhNTE9wZXJhdG9yOjp0cmFpbGlu
Z1NwYWNlRXJyb3IoKQogewotICAgIGNvbnN0IGF1dG8mIHByaW1hcnlGb250RGF0YSA9IHN0eWxl
KCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKTsKLSAgICBpZiAoIXByaW1hcnlGb250
RGF0YS5tYXRoRGF0YSgpKQorICAgIGNvbnN0IGF1dG8mIHByaW1hcnlGb250ID0gc3R5bGUoKS5m
b250Q2FzY2FkZSgpLnByaW1hcnlGb250KCk7CisgICAgaWYgKCFwcmltYXJ5Rm9udC5tYXRoRGF0
YSgpKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIC8vIEZvciBPcGVuVHlwZSBNQVRIIGZvbnQs
IHRoZSBsYXlvdXQgaXMgYmFzZWQgb24gUmVuZGVyTWF0aE9wZXJhdG9yIGZvciB3aGljaCB0aGUg
cHJlZmVycmVkIHdpZHRoIGlzIHNvbWV0aW1lcyBvdmVyZXN0aW1hdGVkIChidWcgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMDMyNikuCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5o
CShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1Jl
bmRlck1hdGhNTE9wZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDExICsyOCwxMSBAQAog
CiAjaWYgRU5BQkxFKE1BVEhNTCkKIAorI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJHbHlw
aFBhZ2UuaCIKICNpbmNsdWRlICJNYXRoTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiT3BlblR5cGVN
YXRoRGF0YS5oIgogI2luY2x1ZGUgIlJlbmRlck1hdGhNTFRva2VuLmgiCi0jaW5jbHVkZSAiU2lt
cGxlRm9udERhdGEuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJhZGljYWxPcGVyYXRvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxS
YWRpY2FsT3BlcmF0b3IuY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJhZGljYWxPcGVyYXRvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTYzLDcgKzYzLDcgQEAgUmVuZGVyTWF0aE1MUmFkaWNhbE9wZXJhdG9yOjpSZW5k
ZXJNYXRoTQogCiB2b2lkIFJlbmRlck1hdGhNTFJhZGljYWxPcGVyYXRvcjo6c3RyZXRjaFRvKExh
eW91dFVuaXQgaGVpZ2h0QWJvdmVCYXNlbGluZSwgTGF5b3V0VW5pdCBkZXB0aEJlbG93QmFzZWxp
bmUpCiB7Ci0gICAgaWYgKCFzdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCku
bWF0aERhdGEoKSkgeworICAgIGlmICghc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250
KCkubWF0aERhdGEoKSkgewogICAgICAgICAvLyBJZiB3ZSBkbyBub3QgaGF2ZSBhbiBPcGVuVHlw
ZSBNQVRIIGZvbnQsIHdlIGFsd2F5cyBtYWtlIHRoZSByYWRpY2FsIGRlcHRoIGEgYml0IGxhcmdl
ciB0aGFuIHRoZSB0YXJnZXQuCiAgICAgICAgIGRlcHRoQmVsb3dCYXNlbGluZSArPSBnUmFkaWNh
bEJvdHRvbVBvaW50TG93ZXI7CiAgICAgfQpAQCAtODMsNyArODMsNyBAQCB2b2lkIFJlbmRlck1h
dGhNTFJhZGljYWxPcGVyYXRvcjo6Y29tcHV0CiB7CiAgICAgQVNTRVJUKHByZWZlcnJlZExvZ2lj
YWxXaWR0aHNEaXJ0eSgpKTsKIAotICAgIGlmIChzdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFy
eUZvbnREYXRhKCkubWF0aERhdGEoKSkgeworICAgIGlmIChzdHlsZSgpLmZvbnRDYXNjYWRlKCku
cHJpbWFyeUZvbnQoKS5tYXRoRGF0YSgpKSB7CiAgICAgICAgIFJlbmRlck1hdGhNTE9wZXJhdG9y
Ojpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpOwogICAgICAgICByZXR1cm47CiAgICAg
fQpAQCAtOTYsNyArOTYsNyBAQCB2b2lkIFJlbmRlck1hdGhNTFJhZGljYWxPcGVyYXRvcjo6Y29t
cHV0CiAKIHZvaWQgUmVuZGVyTWF0aE1MUmFkaWNhbE9wZXJhdG9yOjpjb21wdXRlTG9naWNhbEhl
aWdodChMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIExheW91dFVuaXQgbG9naWNhbFRvcCwgTG9n
aWNhbEV4dGVudENvbXB1dGVkVmFsdWVzJiBjb21wdXRlZFZhbHVlcykgY29uc3QKIHsKLSAgICBp
ZiAoc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLm1hdGhEYXRhKCkpIHsK
KyAgICBpZiAoc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCkubWF0aERhdGEoKSkg
ewogICAgICAgICBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Y29tcHV0ZUxvZ2ljYWxIZWlnaHQobG9n
aWNhbEhlaWdodCwgbG9naWNhbFRvcCwgY29tcHV0ZWRWYWx1ZXMpOwogICAgICAgICByZXR1cm47
CiAgICAgfQpAQCAtMTExLDcgKzExMSw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MUmFkaWNhbE9wZXJh
dG9yOjpwYWludCgKICAgICBpZiAoaW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkgfHwg
aW5mby5waGFzZSAhPSBQYWludFBoYXNlRm9yZWdyb3VuZCB8fCBzdHlsZSgpLnZpc2liaWxpdHko
KSAhPSBWSVNJQkxFKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoc3R5bGUoKS5mb250Q2Fz
Y2FkZSgpLnByaW1hcnlGb250RGF0YSgpLm1hdGhEYXRhKCkpIHsKKyAgICBpZiAoc3R5bGUoKS5m
b250Q2FzY2FkZSgpLnByaW1hcnlGb250KCkubWF0aERhdGEoKSkgewogICAgICAgICBSZW5kZXJN
YXRoTUxPcGVyYXRvcjo6cGFpbnQoaW5mbywgcGFpbnRPZmZzZXQpOwogICAgICAgICByZXR1cm47
CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRo
TUxSb290LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1s
L1JlbmRlck1hdGhNTFJvb3QuY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMDgsMTcgKzIwOCwxNyBAQCB2b2lkIFJlbmRlck1hdGhNTFJvb3Q6OnVwZGF0ZVN0eWxlKCkK
ICAgICBMYXlvdXRVbml0IGtlcm5BZnRlckRlZ3JlZSA9IC0xMCAqIHN0eWxlKCkuZm9udENhc2Nh
ZGUoKS5zaXplKCkgLyAxODsKICAgICBtX2RlZ3JlZUJvdHRvbVJhaXNlUGVyY2VudCA9IDAuNmY7
CiAKLSAgICBjb25zdCBhdXRvJiBwcmltYXJ5Rm9udERhdGEgPSBzdHlsZSgpLmZvbnRDYXNjYWRl
KCkucHJpbWFyeUZvbnREYXRhKCk7Ci0gICAgaWYgKGF1dG8qIG1hdGhEYXRhID0gc3R5bGUoKS5m
b250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLm1hdGhEYXRhKCkpIHsKKyAgICBjb25zdCBh
dXRvJiBwcmltYXJ5Rm9udCA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpOwor
ICAgIGlmIChhdXRvKiBtYXRoRGF0YSA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9u
dCgpLm1hdGhEYXRhKCkpIHsKICAgICAgICAgLy8gRklYTUU6IG1fdmVydGljYWxHYXAgc2hvdWxk
IHVzZSBSYWRpY2FsRGlzcGxheVN0eWxlVmVydGljYWwgaW4gZGlzcGxheSBtb2RlIChodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE4NzM3KS4KLSAgICAgICAgbV92ZXJ0
aWNhbEdhcCA9IG1hdGhEYXRhLT5nZXRNYXRoQ29uc3RhbnQocHJpbWFyeUZvbnREYXRhLCBPcGVu
VHlwZU1hdGhEYXRhOjpSYWRpY2FsVmVydGljYWxHYXApOwotICAgICAgICBtX3J1bGVUaGlja25l
c3MgPSBtYXRoRGF0YS0+Z2V0TWF0aENvbnN0YW50KHByaW1hcnlGb250RGF0YSwgT3BlblR5cGVN
YXRoRGF0YTo6UmFkaWNhbFJ1bGVUaGlja25lc3MpOwotICAgICAgICBtX2V4dHJhQXNjZW5kZXIg
PSBtYXRoRGF0YS0+Z2V0TWF0aENvbnN0YW50KHByaW1hcnlGb250RGF0YSwgT3BlblR5cGVNYXRo
RGF0YTo6UmFkaWNhbEV4dHJhQXNjZW5kZXIpOworICAgICAgICBtX3ZlcnRpY2FsR2FwID0gbWF0
aERhdGEtPmdldE1hdGhDb25zdGFudChwcmltYXJ5Rm9udCwgT3BlblR5cGVNYXRoRGF0YTo6UmFk
aWNhbFZlcnRpY2FsR2FwKTsKKyAgICAgICAgbV9ydWxlVGhpY2tuZXNzID0gbWF0aERhdGEtPmdl
dE1hdGhDb25zdGFudChwcmltYXJ5Rm9udCwgT3BlblR5cGVNYXRoRGF0YTo6UmFkaWNhbFJ1bGVU
aGlja25lc3MpOworICAgICAgICBtX2V4dHJhQXNjZW5kZXIgPSBtYXRoRGF0YS0+Z2V0TWF0aENv
bnN0YW50KHByaW1hcnlGb250LCBPcGVuVHlwZU1hdGhEYXRhOjpSYWRpY2FsRXh0cmFBc2NlbmRl
cik7CiAKICAgICAgICAgaWYgKCFpc1JlbmRlck1hdGhNTFNxdWFyZVJvb3QoKSkgewotICAgICAg
ICAgICAga2VybkJlZm9yZURlZ3JlZSA9IG1hdGhEYXRhLT5nZXRNYXRoQ29uc3RhbnQocHJpbWFy
eUZvbnREYXRhLCBPcGVuVHlwZU1hdGhEYXRhOjpSYWRpY2FsS2VybkJlZm9yZURlZ3JlZSk7Ci0g
ICAgICAgICAgICBrZXJuQWZ0ZXJEZWdyZWUgPSBtYXRoRGF0YS0+Z2V0TWF0aENvbnN0YW50KHBy
aW1hcnlGb250RGF0YSwgT3BlblR5cGVNYXRoRGF0YTo6UmFkaWNhbEtlcm5BZnRlckRlZ3JlZSk7
Ci0gICAgICAgICAgICBtX2RlZ3JlZUJvdHRvbVJhaXNlUGVyY2VudCA9IG1hdGhEYXRhLT5nZXRN
YXRoQ29uc3RhbnQocHJpbWFyeUZvbnREYXRhLCBPcGVuVHlwZU1hdGhEYXRhOjpSYWRpY2FsRGVn
cmVlQm90dG9tUmFpc2VQZXJjZW50KTsKKyAgICAgICAgICAgIGtlcm5CZWZvcmVEZWdyZWUgPSBt
YXRoRGF0YS0+Z2V0TWF0aENvbnN0YW50KHByaW1hcnlGb250LCBPcGVuVHlwZU1hdGhEYXRhOjpS
YWRpY2FsS2VybkJlZm9yZURlZ3JlZSk7CisgICAgICAgICAgICBrZXJuQWZ0ZXJEZWdyZWUgPSBt
YXRoRGF0YS0+Z2V0TWF0aENvbnN0YW50KHByaW1hcnlGb250LCBPcGVuVHlwZU1hdGhEYXRhOjpS
YWRpY2FsS2VybkFmdGVyRGVncmVlKTsKKyAgICAgICAgICAgIG1fZGVncmVlQm90dG9tUmFpc2VQ
ZXJjZW50ID0gbWF0aERhdGEtPmdldE1hdGhDb25zdGFudChwcmltYXJ5Rm9udCwgT3BlblR5cGVN
YXRoRGF0YTo6UmFkaWNhbERlZ3JlZUJvdHRvbVJhaXNlUGVyY2VudCk7CiAgICAgICAgIH0KICAg
ICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0
eWxlLmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL1JlbmRlclN0eWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4NCw3ICsxMTg0LDcgQEAg
Y29uc3QgQXRvbWljU3RyaW5nJiBSZW5kZXJTdHlsZTo6aHlwaGVuUwogICAgIC8vIEZJWE1FOiBU
aGlzIHNob3VsZCBkZXBlbmQgb24gbG9jYWxlLgogICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJ
Q19MT0NBTChBdG9taWNTdHJpbmcsIGh5cGhlbk1pbnVzU3RyaW5nLCAoJmh5cGhlbk1pbnVzLCAx
KSk7CiAgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgaHlw
aGVuU3RyaW5nLCAoJmh5cGhlbiwgMSkpOwotICAgIHJldHVybiBmb250Q2FzY2FkZSgpLnByaW1h
cnlGb250RGF0YSgpLmdseXBoRm9yQ2hhcmFjdGVyKGh5cGhlbikgPyBoeXBoZW5TdHJpbmcgOiBo
eXBoZW5NaW51c1N0cmluZzsKKyAgICByZXR1cm4gZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgp
LmdseXBoRm9yQ2hhcmFjdGVyKGh5cGhlbikgPyBoeXBoZW5TdHJpbmcgOiBoeXBoZW5NaW51c1N0
cmluZzsKIH0KIAogY29uc3QgQXRvbWljU3RyaW5nJiBSZW5kZXJTdHlsZTo6dGV4dEVtcGhhc2lz
TWFya1N0cmluZygpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHVGV4dC5jcHAJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYg
KzI4LDcgQEAKICNpbmNsdWRlICJSZW5kZXJTVkdUZXh0LmgiCiAKICNpbmNsdWRlICJGbG9hdFF1
YWQuaCIKKyNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAj
aW5jbHVkZSAiSGl0VGVzdFJlcXVlc3QuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCkBA
IC00NSw3ICs0Niw2IEBACiAjaW5jbHVkZSAiU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuaCIK
ICNpbmNsdWRlICJTVkdUcmFuc2Zvcm1MaXN0LmgiCiAjaW5jbHVkZSAiU1ZHVVJJUmVmZXJlbmNl
LmgiCi0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1TdGF0
ZS5oIgogI2luY2x1ZGUgIlZpc2libGVQb3NpdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9TdGFja1N0
YXRzLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRC
b3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5s
aW5lVGV4dEJveC5jcHAJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxOSw3ICs0
MTksNyBAQCBUZXh0UnVuIFNWR0lubGluZVRleHRCb3g6OmNvbnN0cnVjdFRleHRSCiAgICAgICAg
ICAgICAgICAgLCBkaXJlY3Rpb24oKQogICAgICAgICAgICAgICAgICwgZGlyT3ZlcnJpZGUoKSB8
fCBzdHlsZS0+cnRsT3JkZXJpbmcoKSA9PSBWaXN1YWxPcmRlciAvKiBkaXJlY3Rpb25hbE92ZXJy
aWRlICovKTsKIAotICAgIGlmIChzdHlsZS0+Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEo
KS5pc1NWR0ZvbnQoKSkKKyAgICBpZiAoc3R5bGUtPmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQo
KS5pc1NWR0ZvbnQoKSkKICAgICAgICAgcnVuLnNldFJlbmRlcmluZ0NvbnRleHQoU1ZHVGV4dFJ1
blJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZShyZW5kZXJlcigpKSk7CiAKICAgICBydW4uZGlzYWJs
ZVJvdW5kaW5nSGFja3MoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
VGV4dExheW91dEVuZ2luZVNwYWNpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcuY3BwCShyZXZpc2lvbiAx
Nzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdp
bmVTcGFjaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTYgKzQxLDE2IEBAIFNWR1RleHRM
YXlvdXRFbmdpbmVTcGFjaW5nOjpTVkdUZXh0TGF5b3UKIGZsb2F0IFNWR1RleHRMYXlvdXRFbmdp
bmVTcGFjaW5nOjpjYWxjdWxhdGVTVkdLZXJuaW5nKGJvb2wgaXNWZXJ0aWNhbFRleHQsIGNvbnN0
IFNWR1RleHRNZXRyaWNzOjpHbHlwaCYgY3VycmVudEdseXBoKQogewogI2lmIEVOQUJMRShTVkdf
Rk9OVFMpCi0gICAgY29uc3QgU2ltcGxlRm9udERhdGEmIGZvbnREYXRhID0gbV9mb250LnByaW1h
cnlGb250RGF0YSgpOwotICAgIGlmICghZm9udERhdGEuaXNTVkdGb250KCkpIHsKKyAgICBjb25z
dCBGb250JiBmb250ID0gbV9mb250LnByaW1hcnlGb250KCk7CisgICAgaWYgKCFmb250LmlzU1ZH
Rm9udCgpKSB7CiAgICAgICAgIG1fbGFzdEdseXBoLmlzVmFsaWQgPSBmYWxzZTsKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgfQogCi0gICAgQVNTRVJUKGZvbnREYXRhLmlzQ3VzdG9tRm9udCgpKTsK
LSAgICBBU1NFUlQoZm9udERhdGEuaXNTVkdGb250KCkpOworICAgIEFTU0VSVChmb250LmlzQ3Vz
dG9tRm9udCgpKTsKKyAgICBBU1NFUlQoZm9udC5pc1NWR0ZvbnQoKSk7CiAKLSAgICBhdXRvKiBz
dmdGb250RGF0YSA9IHN0YXRpY19jYXN0PGNvbnN0IFNWR0ZvbnREYXRhKj4oZm9udERhdGEuc3Zn
RGF0YSgpKTsKKyAgICBhdXRvKiBzdmdGb250RGF0YSA9IHN0YXRpY19jYXN0PGNvbnN0IFNWR0Zv
bnREYXRhKj4oZm9udC5zdmdEYXRhKCkpOwogICAgIFNWR0ZvbnRGYWNlRWxlbWVudCogc3ZnRm9u
dEZhY2UgPSBzdmdGb250RGF0YS0+c3ZnRm9udEZhY2VFbGVtZW50KCk7CiAgICAgQVNTRVJUKHN2
Z0ZvbnRGYWNlKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0
TWV0cmljcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdUZXh0TWV0cmljcy5jcHAJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCw3ICs3
MCw3IEBAIFRleHRSdW4gU1ZHVGV4dE1ldHJpY3M6OmNvbnN0cnVjdFRleHRSdW4KICAgICAgICAg
ICAgICAgICAsIHN0eWxlLmRpcmVjdGlvbigpCiAgICAgICAgICAgICAgICAgLCBpc092ZXJyaWRl
KHN0eWxlLnVuaWNvZGVCaWRpKCkpIC8qIGRpcmVjdGlvbmFsT3ZlcnJpZGUgKi8pOwogCi0gICAg
aWYgKHN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkuaXNTVkdGb250KCkpCisg
ICAgaWYgKHN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKS5pc1NWR0ZvbnQoKSkKICAg
ICAgICAgcnVuLnNldFJlbmRlcmluZ0NvbnRleHQoU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6
OmNyZWF0ZSh0ZXh0KSk7CiAKICAgICBydW4uZGlzYWJsZVJvdW5kaW5nSGFja3MoKTsKQEAgLTkx
LDcgKzkxLDcgQEAgU1ZHVGV4dE1ldHJpY3MgU1ZHVGV4dE1ldHJpY3M6Om1lYXN1cmVDaAogCiBT
VkdUZXh0TWV0cmljczo6U1ZHVGV4dE1ldHJpY3MoUmVuZGVyU1ZHSW5saW5lVGV4dCYgdGV4dCwg
dW5zaWduZWQgcG9zaXRpb24sIHVuc2lnbmVkIGxlbmd0aCwgZmxvYXQgd2lkdGgsIGNvbnN0IFN0
cmluZyYgZ2x5cGhOYW1lKQogewotICAgIGJvb2wgbmVlZHNDb250ZXh0ID0gdGV4dC5zdHlsZSgp
LmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkuaXNTVkdGb250KCk7CisgICAgYm9vbCBu
ZWVkc0NvbnRleHQgPSB0ZXh0LnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpLmlz
U1ZHRm9udCgpOwogICAgIGZsb2F0IHNjYWxpbmdGYWN0b3IgPSB0ZXh0LnNjYWxpbmdGYWN0b3Io
KTsKICAgICBBU1NFUlQoc2NhbGluZ0ZhY3Rvcik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQu
Y3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTggKzM3
LDE4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGlubGluZSBjb25zdCBTVkdG
b250RGF0YSogc3ZnRm9udEFuZEZvbnRGYWNlRWxlbWVudEZvckZvbnREYXRhKGNvbnN0IFNpbXBs
ZUZvbnREYXRhKiBmb250RGF0YSwgU1ZHRm9udEZhY2VFbGVtZW50KiYgZm9udEZhY2UsIFNWR0Zv
bnRFbGVtZW50KiYgZm9udCkKK3N0YXRpYyBpbmxpbmUgY29uc3QgU1ZHRm9udERhdGEqIHN2Z0Zv
bnRBbmRGb250RmFjZUVsZW1lbnRGb3JGb250RGF0YShjb25zdCBGb250KiBmb250LCBTVkdGb250
RmFjZUVsZW1lbnQqJiBzdmdGb250RmFjZUVsZW1lbnQsIFNWR0ZvbnRFbGVtZW50KiYgc3ZnRm9u
dEVsZW1lbnQpCiB7Ci0gICAgQVNTRVJUKGZvbnREYXRhKTsKLSAgICBBU1NFUlQoZm9udERhdGEt
PmlzQ3VzdG9tRm9udCgpKTsKLSAgICBBU1NFUlQoZm9udERhdGEtPmlzU1ZHRm9udCgpKTsKKyAg
ICBBU1NFUlQoZm9udCk7CisgICAgQVNTRVJUKGZvbnQtPmlzQ3VzdG9tRm9udCgpKTsKKyAgICBB
U1NFUlQoZm9udC0+aXNTVkdGb250KCkpOwogCi0gICAgYXV0byogc3ZnRm9udERhdGEgPSBzdGF0
aWNfY2FzdDxjb25zdCBTVkdGb250RGF0YSo+KGZvbnREYXRhLT5zdmdEYXRhKCkpOworICAgIGF1
dG8qIHN2Z0ZvbnREYXRhID0gc3RhdGljX2Nhc3Q8Y29uc3QgU1ZHRm9udERhdGEqPihmb250LT5z
dmdEYXRhKCkpOwogCi0gICAgZm9udEZhY2UgPSBzdmdGb250RGF0YS0+c3ZnRm9udEZhY2VFbGVt
ZW50KCk7Ci0gICAgQVNTRVJUKGZvbnRGYWNlKTsKKyAgICBzdmdGb250RmFjZUVsZW1lbnQgPSBz
dmdGb250RGF0YS0+c3ZnRm9udEZhY2VFbGVtZW50KCk7CisgICAgQVNTRVJUKHN2Z0ZvbnRGYWNl
RWxlbWVudCk7CiAKLSAgICBmb250ID0gZm9udEZhY2UtPmFzc29jaWF0ZWRGb250RWxlbWVudCgp
OworICAgIHN2Z0ZvbnRFbGVtZW50ID0gc3ZnRm9udEZhY2VFbGVtZW50LT5hc3NvY2lhdGVkRm9u
dEVsZW1lbnQoKTsKICAgICByZXR1cm4gc3ZnRm9udERhdGE7CiB9CiAKQEAgLTYxLDIxICs2MSwy
MSBAQCBmbG9hdCBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6ZmxvYXRXCiAgICAgcmV0dXJu
IGl0LnJ1bldpZHRoU29GYXIoKTsKIH0KIAotYm9vbCBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4
dDo6YXBwbHlTVkdLZXJuaW5nKGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwgV2lkdGhJ
dGVyYXRvciYgaXRlcmF0b3IsIEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZlciwgaW50IGZyb20pIGNv
bnN0Citib29sIFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0OjphcHBseVNWR0tlcm5pbmcoY29u
c3QgRm9udCogZm9udCwgV2lkdGhJdGVyYXRvciYgaXRlcmF0b3IsIEdseXBoQnVmZmVyKiBnbHlw
aEJ1ZmZlciwgaW50IGZyb20pIGNvbnN0CiB7CiAgICAgQVNTRVJUKGdseXBoQnVmZmVyKTsKICAg
ICBBU1NFUlQoZ2x5cGhCdWZmZXItPnNpemUoKSA+IDEpOwogICAgIFNWR0ZvbnRFbGVtZW50KiBm
b250RWxlbWVudCA9IDA7CiAgICAgU1ZHRm9udEZhY2VFbGVtZW50KiBmb250RmFjZUVsZW1lbnQg
PSAwOwogCi0gICAgc3ZnRm9udEFuZEZvbnRGYWNlRWxlbWVudEZvckZvbnREYXRhKGZvbnREYXRh
LCBmb250RmFjZUVsZW1lbnQsIGZvbnRFbGVtZW50KTsKKyAgICBzdmdGb250QW5kRm9udEZhY2VF
bGVtZW50Rm9yRm9udERhdGEoZm9udCwgZm9udEZhY2VFbGVtZW50LCBmb250RWxlbWVudCk7CiAg
ICAgaWYgKCFmb250RWxlbWVudCB8fCAhZm9udEZhY2VFbGVtZW50KQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICBpZiAoZm9udEVsZW1lbnQtPmhvcml6b250YWxLZXJuaW5nTWFwSXNFbXB0
eSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGZsb2F0IHNjYWxlID0gc2NhbGVFbVRv
VW5pdHMoZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLnNpemUoKSwgZm9udEZhY2VFbGVtZW50LT51
bml0c1BlckVtKCkpOworICAgIGZsb2F0IHNjYWxlID0gc2NhbGVFbVRvVW5pdHMoZm9udC0+cGxh
dGZvcm1EYXRhKCkuc2l6ZSgpLCBmb250RmFjZUVsZW1lbnQtPnVuaXRzUGVyRW0oKSk7CiAKICAg
ICBTdHJpbmcgbGFzdEdseXBoTmFtZTsKICAgICBTdHJpbmcgbGFzdFVuaWNvZGVTdHJpbmc7CkBA
IC0yMDUsNyArMjA1LDcgQEAgdm9pZCBTVkdHbHlwaFRvUGF0aFRyYW5zbGF0b3I6OmFkdmFuY2Uo
KQogICAgICAgICB9CiAKICAgICAgICAgKyttX2luZGV4OwotICAgICAgICBpZiAobV9pbmRleCA+
PSBtX3N0b3BwaW5nUG9pbnQgfHwgIW1fZ2x5cGhCdWZmZXIuZm9udERhdGFBdChtX2luZGV4KS0+
aXNTVkdGb250KCkpCisgICAgICAgIGlmIChtX2luZGV4ID49IG1fc3RvcHBpbmdQb2ludCB8fCAh
bV9nbHlwaEJ1ZmZlci5mb250QXQobV9pbmRleCktPmlzU1ZHRm9udCgpKQogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIG1fZ2x5cGggPSBtX2dseXBoQnVmZmVyLmdseXBoQXQobV9pbmRleCk7
CiAgICAgICAgIGlmICghbV9nbHlwaCkKQEAgLTI0NCwxMiArMjQ0LDEyIEBAIGNsYXNzIER1bW15
R2x5cGhUb1BhdGhUcmFuc2xhdG9yIGZpbmFsIDoKICAgICB9CiB9OwogCi1zdGQ6OnVuaXF1ZV9w
dHI8R2x5cGhUb1BhdGhUcmFuc2xhdG9yPiBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6Y3Jl
YXRlR2x5cGhUb1BhdGhUcmFuc2xhdG9yKGNvbnN0IFNpbXBsZUZvbnREYXRhJiBmb250RGF0YSwg
Y29uc3QgVGV4dFJ1biogdGV4dFJ1biwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBp
bnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Citz
dGQ6OnVuaXF1ZV9wdHI8R2x5cGhUb1BhdGhUcmFuc2xhdG9yPiBTVkdUZXh0UnVuUmVuZGVyaW5n
Q29udGV4dDo6Y3JlYXRlR2x5cGhUb1BhdGhUcmFuc2xhdG9yKGNvbnN0IEZvbnQmIGZvbnQsIGNv
bnN0IFRleHRSdW4qIHRleHRSdW4sIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgaW50
IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAogewog
ICAgIFNWR0ZvbnRFbGVtZW50KiBmb250RWxlbWVudCA9IG51bGxwdHI7CiAgICAgU1ZHRm9udEZh
Y2VFbGVtZW50KiBmb250RmFjZUVsZW1lbnQgPSBudWxscHRyOwogCi0gICAgY29uc3QgU1ZHRm9u
dERhdGEqIHN2Z0ZvbnREYXRhID0gc3ZnRm9udEFuZEZvbnRGYWNlRWxlbWVudEZvckZvbnREYXRh
KCZmb250RGF0YSwgZm9udEZhY2VFbGVtZW50LCBmb250RWxlbWVudCk7CisgICAgY29uc3QgU1ZH
Rm9udERhdGEqIHN2Z0ZvbnREYXRhID0gc3ZnRm9udEFuZEZvbnRGYWNlRWxlbWVudEZvckZvbnRE
YXRhKCZmb250LCBmb250RmFjZUVsZW1lbnQsIGZvbnRFbGVtZW50KTsKICAgICBpZiAoIWZvbnRF
bGVtZW50IHx8ICFmb250RmFjZUVsZW1lbnQpCiAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5p
cXVlPER1bW15R2x5cGhUb1BhdGhUcmFuc2xhdG9yPigpOwogCkBAIC0yNTcsMTIgKzI1NywxMiBA
QCBzdGQ6OnVuaXF1ZV9wdHI8R2x5cGhUb1BhdGhUcmFuc2xhdG9yPiBTCiAgICAgUmVuZGVyU3R5
bGUmIHN0eWxlID0gZWxlbWVudFJlbmRlcmVyLnN0eWxlKCk7CiAgICAgYm9vbCBpc1ZlcnRpY2Fs
VGV4dCA9IHN0eWxlLnN2Z1N0eWxlKCkuaXNWZXJ0aWNhbFdyaXRpbmdNb2RlKCk7CiAKLSAgICBm
bG9hdCBzY2FsZSA9IHNjYWxlRW1Ub1VuaXRzKGZvbnREYXRhLnBsYXRmb3JtRGF0YSgpLnNpemUo
KSwgZm9udEZhY2VFbGVtZW50LT51bml0c1BlckVtKCkpOworICAgIGZsb2F0IHNjYWxlID0gc2Nh
bGVFbVRvVW5pdHMoZm9udC5wbGF0Zm9ybURhdGEoKS5zaXplKCksIGZvbnRGYWNlRWxlbWVudC0+
dW5pdHNQZXJFbSgpKTsKIAogICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFNWR0dseXBoVG9Q
YXRoVHJhbnNsYXRvcj4odGV4dFJ1biwgZ2x5cGhCdWZmZXIsIHBvaW50LCAqc3ZnRm9udERhdGEs
ICpmb250RWxlbWVudCwgZnJvbSwgbnVtR2x5cGhzLCBzY2FsZSwgaXNWZXJ0aWNhbFRleHQpOwog
fQogCi12b2lkIFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0OjpkcmF3U1ZHR2x5cGhzKEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhLCBjb25z
dCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25z
dCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKK3ZvaWQgU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRl
eHQ6OmRyYXdTVkdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGb250KiBm
b250LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGludCBmcm9tLCBpbnQgbnVtR2x5
cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKIHsKICAgICBhdXRvIGFjdGl2ZVBh
aW50aW5nUmVzb3VyY2UgPSB0aGlzLT5hY3RpdmVQYWludGluZ1Jlc291cmNlKCk7CiAgICAgaWYg
KCFhY3RpdmVQYWludGluZ1Jlc291cmNlKSB7CkBAIC0yNzgsNyArMjc4LDcgQEAgdm9pZCBTVkdU
ZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6ZHJhd1NWRwogICAgIEFTU0VSVChhY3RpdmVQYWludGlu
Z1Jlc291cmNlKTsKIAogICAgIFJlbmRlclNWR1Jlc291cmNlTW9kZSByZXNvdXJjZU1vZGUgPSBj
b250ZXh0LT50ZXh0RHJhd2luZ01vZGUoKSA9PSBUZXh0TW9kZVN0cm9rZSA/IEFwcGx5VG9TdHJv
a2VNb2RlIDogQXBwbHlUb0ZpbGxNb2RlOwotICAgIGZvciAoYXV0byB0cmFuc2xhdG9yID0gY3Jl
YXRlR2x5cGhUb1BhdGhUcmFuc2xhdG9yKCpmb250RGF0YSwgbnVsbHB0ciwgZ2x5cGhCdWZmZXIs
IGZyb20sIG51bUdseXBocywgcG9pbnQpOyB0cmFuc2xhdG9yLT5jb250YWluc01vcmVQYXRocygp
OyB0cmFuc2xhdG9yLT5hZHZhbmNlKCkpIHsKKyAgICBmb3IgKGF1dG8gdHJhbnNsYXRvciA9IGNy
ZWF0ZUdseXBoVG9QYXRoVHJhbnNsYXRvcigqZm9udCwgbnVsbHB0ciwgZ2x5cGhCdWZmZXIsIGZy
b20sIG51bUdseXBocywgcG9pbnQpOyB0cmFuc2xhdG9yLT5jb250YWluc01vcmVQYXRocygpOyB0
cmFuc2xhdG9yLT5hZHZhbmNlKCkpIHsKICAgICAgICAgUGF0aCBnbHlwaFBhdGggPSB0cmFuc2xh
dG9yLT5wYXRoKCk7CiAgICAgICAgIGlmIChhY3RpdmVQYWludGluZ1Jlc291cmNlLT5hcHBseVJl
c291cmNlKGVsZW1lbnRSZW5kZXJlciwgc3R5bGUsIGNvbnRleHQsIHJlc291cmNlTW9kZSkpIHsK
ICAgICAgICAgICAgIGZsb2F0IHN0cm9rZVRoaWNrbmVzcyA9IGNvbnRleHQtPnN0cm9rZVRoaWNr
bmVzcygpOwpAQCAtMjkyLDEzICsyOTIsMTMgQEAgdm9pZCBTVkdUZXh0UnVuUmVuZGVyaW5nQ29u
dGV4dDo6ZHJhd1NWRwogCiBzdGF0aWMgR2x5cGhEYXRhIG1pc3NpbmdHbHlwaEZvckZvbnQoY29u
c3QgRm9udENhc2NhZGUmIGZvbnQpCiB7Ci0gICAgY29uc3QgU2ltcGxlRm9udERhdGEmIHByaW1h
cnlGb250RGF0YSA9IGZvbnQucHJpbWFyeUZvbnREYXRhKCk7Ci0gICAgaWYgKCFwcmltYXJ5Rm9u
dERhdGEuaXNTVkdGb250KCkpCisgICAgY29uc3QgRm9udCYgcHJpbWFyeUZvbnQgPSBmb250LnBy
aW1hcnlGb250KCk7CisgICAgaWYgKCFwcmltYXJ5Rm9udC5pc1NWR0ZvbnQoKSkKICAgICAgICAg
cmV0dXJuIEdseXBoRGF0YSgpOwogICAgIFNWR0ZvbnRFbGVtZW50KiBmb250RWxlbWVudDsKICAg
ICBTVkdGb250RmFjZUVsZW1lbnQqIGZvbnRGYWNlRWxlbWVudDsKLSAgICBzdmdGb250QW5kRm9u
dEZhY2VFbGVtZW50Rm9yRm9udERhdGEoJnByaW1hcnlGb250RGF0YSwgZm9udEZhY2VFbGVtZW50
LCBmb250RWxlbWVudCk7Ci0gICAgcmV0dXJuIEdseXBoRGF0YShmb250RWxlbWVudC0+bWlzc2lu
Z0dseXBoKCksICZwcmltYXJ5Rm9udERhdGEpOworICAgIHN2Z0ZvbnRBbmRGb250RmFjZUVsZW1l
bnRGb3JGb250RGF0YSgmcHJpbWFyeUZvbnQsIGZvbnRGYWNlRWxlbWVudCwgZm9udEVsZW1lbnQp
OworICAgIHJldHVybiBHbHlwaERhdGEoZm9udEVsZW1lbnQtPm1pc3NpbmdHbHlwaCgpLCAmcHJp
bWFyeUZvbnQpOwogfQogCiBHbHlwaERhdGEgU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6Omds
eXBoRGF0YUZvckNoYXJhY3Rlcihjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgV2lkdGhJdGVyYXRv
ciYgaXRlcmF0b3IsIFVDaGFyMzIgY2hhcmFjdGVyLCBib29sIG1pcnJvciwgaW50IGN1cnJlbnRD
aGFyYWN0ZXIsIHVuc2lnbmVkJiBhZHZhbmNlTGVuZ3RoLCBTdHJpbmcmIG5vcm1hbGl6ZWRTcGFj
ZXNTdHJpbmdDYWNoZSkKQEAgLTMwNywyMyArMzA3LDIzIEBAIEdseXBoRGF0YSBTVkdUZXh0UnVu
UmVuZGVyaW5nQ29udGV4dDo6Z2wKICAgICBpZiAoIWdseXBoRGF0YS5nbHlwaCkKICAgICAgICAg
cmV0dXJuIG1pc3NpbmdHbHlwaEZvckZvbnQoZm9udCk7CiAKLSAgICBBU1NFUlQoZ2x5cGhEYXRh
LmZvbnREYXRhKTsKKyAgICBBU1NFUlQoZ2x5cGhEYXRhLmZvbnQpOwogCiAgICAgLy8gQ2hhcmFj
dGVycyBlbmNsb3NlZCBieSBhbiA8YWx0R2x5cGg+IGVsZW1lbnQsIG1heSBub3QgYmUgcmVnaXN0
ZXJlZCBpbiB0aGUgR2x5cGhQYWdlLgotICAgIGlmICghZ2x5cGhEYXRhLmZvbnREYXRhLT5pc1NW
R0ZvbnQoKSkgeworICAgIGlmICghZ2x5cGhEYXRhLmZvbnQtPmlzU1ZHRm9udCgpKSB7CiAgICAg
ICAgIGF1dG8mIGVsZW1lbnRSZW5kZXJlciA9IGlzPFJlbmRlckVsZW1lbnQ+KHJlbmRlcmVyKCkp
ID8gZG93bmNhc3Q8UmVuZGVyRWxlbWVudD4ocmVuZGVyZXIoKSkgOiAqcmVuZGVyZXIoKS5wYXJl
bnQoKTsKICAgICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudFJlbmRlcmVyRWxlbWVudCA9IGVsZW1l
bnRSZW5kZXJlci5lbGVtZW50KCkpIHsKICAgICAgICAgICAgIGlmIChpczxTVkdBbHRHbHlwaEVs
ZW1lbnQ+KCpwYXJlbnRSZW5kZXJlckVsZW1lbnQpKQotICAgICAgICAgICAgICAgIGdseXBoRGF0
YS5mb250RGF0YSA9ICZmb250LnByaW1hcnlGb250RGF0YSgpOworICAgICAgICAgICAgICAgIGds
eXBoRGF0YS5mb250ID0gJmZvbnQucHJpbWFyeUZvbnQoKTsKICAgICAgICAgfQogICAgIH0KIAot
ICAgIGlmICghZ2x5cGhEYXRhLmZvbnREYXRhLT5pc1NWR0ZvbnQoKSkKKyAgICBpZiAoIWdseXBo
RGF0YS5mb250LT5pc1NWR0ZvbnQoKSkKICAgICAgICAgcmV0dXJuIGdseXBoRGF0YTsKIAogICAg
IFNWR0ZvbnRFbGVtZW50KiBmb250RWxlbWVudCA9IG51bGxwdHI7CiAgICAgU1ZHRm9udEZhY2VF
bGVtZW50KiBmb250RmFjZUVsZW1lbnQgPSBudWxscHRyOwotICAgIGNvbnN0IFNWR0ZvbnREYXRh
KiBzdmdGb250RGF0YSA9IHN2Z0ZvbnRBbmRGb250RmFjZUVsZW1lbnRGb3JGb250RGF0YShnbHlw
aERhdGEuZm9udERhdGEsIGZvbnRGYWNlRWxlbWVudCwgZm9udEVsZW1lbnQpOworICAgIGNvbnN0
IFNWR0ZvbnREYXRhKiBzdmdGb250RGF0YSA9IHN2Z0ZvbnRBbmRGb250RmFjZUVsZW1lbnRGb3JG
b250RGF0YShnbHlwaERhdGEuZm9udCwgZm9udEZhY2VFbGVtZW50LCBmb250RWxlbWVudCk7CiAg
ICAgaWYgKCFzdmdGb250RGF0YSkKICAgICAgICAgcmV0dXJuIGdseXBoRGF0YTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJl
bmRlcmluZ0NvbnRleHQuaAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBA
IC00Myw5ICs0Myw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEFjdGl2ZVBhaW50aW5nUmVzb3Vy
Y2UoUmVuZGVyU1ZHUmVzb3VyY2UqIG9iamVjdCkgeyBtX2FjdGl2ZVBhaW50aW5nUmVzb3VyY2Ug
PSBvYmplY3Q7IH0KIAogICAgIHZpcnR1YWwgR2x5cGhEYXRhIGdseXBoRGF0YUZvckNoYXJhY3Rl
cihjb25zdCBGb250Q2FzY2FkZSYsIFdpZHRoSXRlcmF0b3ImLCBVQ2hhcjMyIGNoYXJhY3Rlciwg
Ym9vbCBtaXJyb3IsIGludCBjdXJyZW50Q2hhcmFjdGVyLCB1bnNpZ25lZCYgYWR2YW5jZUxlbmd0
aCwgU3RyaW5nJiBub3JtYWxpemVkU3BhY2VzU3RyaW5nQ2FjaGUpIG92ZXJyaWRlOwotICAgIHZp
cnR1YWwgdm9pZCBkcmF3U1ZHR2x5cGhzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFNpbXBsZUZv
bnREYXRhKiwgY29uc3QgR2x5cGhCdWZmZXImLCBpbnQgZnJvbSwgaW50IHRvLCBjb25zdCBGbG9h
dFBvaW50JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRyYXdTVkdHbHlwaHMo
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRm9udCosIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZy
b20sIGludCB0bywgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1
YWwgZmxvYXQgZmxvYXRXaWR0aFVzaW5nU1ZHRm9udChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0
IFRleHRSdW4mLCBpbnQmIGNoYXJzQ29uc3VtZWQsIFN0cmluZyYgZ2x5cGhOYW1lKSBjb25zdCBv
dmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgYXBwbHlTVkdLZXJuaW5nKGNvbnN0IFNpbXBsZUZv
bnREYXRhKiwgV2lkdGhJdGVyYXRvciYsIEdseXBoQnVmZmVyKiwgaW50IGZyb20pIGNvbnN0IG92
ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBhcHBseVNWR0tlcm5pbmcoY29uc3QgRm9udCosIFdp
ZHRoSXRlcmF0b3ImLCBHbHlwaEJ1ZmZlciosIGludCBmcm9tKSBjb25zdCBvdmVycmlkZTsKICNl
bmRpZgogCiBwcml2YXRlOgpAQCAtNjAsNyArNjAsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwg
flNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0KCkgeyB9CiAKICNpZiBFTkFCTEUoU1ZHX0ZPTlRT
KQotICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPEdseXBoVG9QYXRoVHJhbnNsYXRvcj4gY3Jl
YXRlR2x5cGhUb1BhdGhUcmFuc2xhdG9yKGNvbnN0IFNpbXBsZUZvbnREYXRhJiwgY29uc3QgVGV4
dFJ1biosIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0
IEZsb2F0UG9pbnQmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0
cjxHbHlwaFRvUGF0aFRyYW5zbGF0b3I+IGNyZWF0ZUdseXBoVG9QYXRoVHJhbnNsYXRvcihjb25z
dCBGb250JiwgY29uc3QgVGV4dFJ1biosIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGlu
dCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdCBvdmVycmlkZTsKICNlbmRpZgog
CiAgICAgUmVuZGVyT2JqZWN0JiBtX3JlbmRlcmVyOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZvbnREYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9u
dERhdGEuY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9u
dERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NywxNSArNTcsMTUgQEAgU1ZHRm9udERhdGE6
OlNWR0ZvbnREYXRhKFNWR0ZvbnRGYWNlRWxlbQogICAgIEFTU0VSVF9BUkcoZm9udEZhY2VFbGVt
ZW50LCBmb250RmFjZUVsZW1lbnQpOwogfQogCi12b2lkIFNWR0ZvbnREYXRhOjppbml0aWFsaXpl
Rm9udERhdGEoU2ltcGxlRm9udERhdGEqIGZvbnREYXRhLCBmbG9hdCBmb250U2l6ZSkKK3ZvaWQg
U1ZHRm9udERhdGE6OmluaXRpYWxpemVGb250KEZvbnQqIGZvbnQsIGZsb2F0IGZvbnRTaXplKQog
ewotICAgIEFTU0VSVChmb250RGF0YSk7CisgICAgQVNTRVJUKGZvbnQpOwogCiAgICAgU1ZHRm9u
dEZhY2VFbGVtZW50KiBzdmdGb250RmFjZUVsZW1lbnQgPSB0aGlzLT5zdmdGb250RmFjZUVsZW1l
bnQoKTsKICAgICBBU1NFUlQoc3ZnRm9udEZhY2VFbGVtZW50KTsKIAotICAgIGZvbnREYXRhLT5z
ZXRaZXJvV2lkdGhTcGFjZUdseXBoKDApOwotICAgIGZvbnREYXRhLT5kZXRlcm1pbmVQaXRjaCgp
OworICAgIGZvbnQtPnNldFplcm9XaWR0aFNwYWNlR2x5cGgoMCk7CisgICAgZm9udC0+ZGV0ZXJt
aW5lUGl0Y2goKTsKIAogICAgIHVuc2lnbmVkIHVuaXRzUGVyRW0gPSBzdmdGb250RmFjZUVsZW1l
bnQtPnVuaXRzUGVyRW0oKTsKICAgICBmbG9hdCBzY2FsZSA9IHNjYWxlRW1Ub1VuaXRzKGZvbnRT
aXplLCB1bml0c1BlckVtKTsKQEAgLTc0LDE1ICs3NCwxNSBAQCB2b2lkIFNWR0ZvbnREYXRhOjpp
bml0aWFsaXplRm9udERhdGEoU2ltCiAgICAgZmxvYXQgZGVzY2VudCA9IHN2Z0ZvbnRGYWNlRWxl
bWVudC0+ZGVzY2VudCgpICogc2NhbGU7CiAgICAgZmxvYXQgbGluZUdhcCA9IDAuMWYgKiBmb250
U2l6ZTsKIAotICAgIGNvbnN0IEdseXBoUGFnZSogZ2x5cGhQYWdlWmVybyA9IGZvbnREYXRhLT5n
bHlwaFBhZ2UoMCk7CisgICAgY29uc3QgR2x5cGhQYWdlKiBnbHlwaFBhZ2VaZXJvID0gZm9udC0+
Z2x5cGhQYWdlKDApOwogCiAgICAgaWYgKCF4SGVpZ2h0ICYmIGdseXBoUGFnZVplcm8pIHsKICAg
ICAgICAgLy8gRmFsbGJhY2sgaWYgeF9oZWlnaHRBdHRyIGlzIG5vdCBzcGVjaWZpZWQgZm9yIHRo
ZSBmb250IGVsZW1lbnQuCiAgICAgICAgIEdseXBoIGxldHRlclhHbHlwaCA9IGdseXBoUGFnZVpl
cm8tPmdseXBoRGF0YUZvckNoYXJhY3RlcigneCcpLmdseXBoOwotICAgICAgICB4SGVpZ2h0ID0g
bGV0dGVyWEdseXBoID8gZm9udERhdGEtPndpZHRoRm9yR2x5cGgobGV0dGVyWEdseXBoKSA6IDIg
KiBhc2NlbnQgLyAzOworICAgICAgICB4SGVpZ2h0ID0gbGV0dGVyWEdseXBoID8gZm9udC0+d2lk
dGhGb3JHbHlwaChsZXR0ZXJYR2x5cGgpIDogMiAqIGFzY2VudCAvIDM7CiAgICAgfQogCi0gICAg
Rm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzID0gZm9udERhdGEtPmZvbnRNZXRyaWNzKCk7CisgICAg
Rm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzID0gZm9udC0+Zm9udE1ldHJpY3MoKTsKICAgICBmb250
TWV0cmljcy5zZXRVbml0c1BlckVtKHVuaXRzUGVyRW0pOwogICAgIGZvbnRNZXRyaWNzLnNldEFz
Y2VudChhc2NlbnQpOwogICAgIGZvbnRNZXRyaWNzLnNldERlc2NlbnQoZGVzY2VudCk7CkBAIC05
MSwyNSArOTEsMjUgQEAgdm9pZCBTVkdGb250RGF0YTo6aW5pdGlhbGl6ZUZvbnREYXRhKFNpbQog
ICAgIGZvbnRNZXRyaWNzLnNldFhIZWlnaHQoeEhlaWdodCk7CiAKICAgICBpZiAoIWdseXBoUGFn
ZVplcm8pIHsKLSAgICAgICAgZm9udERhdGEtPnNldFNwYWNlR2x5cGgoMCk7Ci0gICAgICAgIGZv
bnREYXRhLT5zZXRTcGFjZVdpZHRocygwKTsKLSAgICAgICAgZm9udERhdGEtPnNldEF2Z0NoYXJX
aWR0aCgwKTsKLSAgICAgICAgZm9udERhdGEtPnNldE1heENoYXJXaWR0aChhc2NlbnQpOworICAg
ICAgICBmb250LT5zZXRTcGFjZUdseXBoKDApOworICAgICAgICBmb250LT5zZXRTcGFjZVdpZHRo
cygwKTsKKyAgICAgICAgZm9udC0+c2V0QXZnQ2hhcldpZHRoKDApOworICAgICAgICBmb250LT5z
ZXRNYXhDaGFyV2lkdGgoYXNjZW50KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8v
IENhbGN1bGF0ZSBzcGFjZSB3aWR0aC4KICAgICBHbHlwaCBzcGFjZUdseXBoID0gZ2x5cGhQYWdl
WmVyby0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKCcgJykuZ2x5cGg7Ci0gICAgZm9udERhdGEtPnNl
dFNwYWNlR2x5cGgoc3BhY2VHbHlwaCk7Ci0gICAgZm9udERhdGEtPnNldFNwYWNlV2lkdGhzKGZv
bnREYXRhLT53aWR0aEZvckdseXBoKHNwYWNlR2x5cGgpKTsKKyAgICBmb250LT5zZXRTcGFjZUds
eXBoKHNwYWNlR2x5cGgpOworICAgIGZvbnQtPnNldFNwYWNlV2lkdGhzKGZvbnQtPndpZHRoRm9y
R2x5cGgoc3BhY2VHbHlwaCkpOwogCiAgICAgLy8gRXN0aW1hdGUgYXZlcmFnZSBjaGFyYWN0ZXIg
d2lkdGguCiAgICAgR2x5cGggbnVtZXJhbFplcm9HbHlwaCA9IGdseXBoUGFnZVplcm8tPmdseXBo
RGF0YUZvckNoYXJhY3RlcignMCcpLmdseXBoOwotICAgIGZvbnREYXRhLT5zZXRBdmdDaGFyV2lk
dGgobnVtZXJhbFplcm9HbHlwaCA/IGZvbnREYXRhLT53aWR0aEZvckdseXBoKG51bWVyYWxaZXJv
R2x5cGgpIDogZm9udERhdGEtPnNwYWNlV2lkdGgoKSk7CisgICAgZm9udC0+c2V0QXZnQ2hhcldp
ZHRoKG51bWVyYWxaZXJvR2x5cGggPyBmb250LT53aWR0aEZvckdseXBoKG51bWVyYWxaZXJvR2x5
cGgpIDogZm9udC0+c3BhY2VXaWR0aCgpKTsKIAogICAgIC8vIEVzdGltYXRlIG1heGltdW0gY2hh
cmFjdGVyIHdpZHRoLgogICAgIEdseXBoIGxldHRlcldHbHlwaCA9IGdseXBoUGFnZVplcm8tPmds
eXBoRGF0YUZvckNoYXJhY3RlcignVycpLmdseXBoOwotICAgIGZvbnREYXRhLT5zZXRNYXhDaGFy
V2lkdGgobGV0dGVyV0dseXBoID8gZm9udERhdGEtPndpZHRoRm9yR2x5cGgobGV0dGVyV0dseXBo
KSA6IGFzY2VudCk7CisgICAgZm9udC0+c2V0TWF4Q2hhcldpZHRoKGxldHRlcldHbHlwaCA/IGZv
bnQtPndpZHRoRm9yR2x5cGgobGV0dGVyV0dseXBoKSA6IGFzY2VudCk7CiB9CiAKIGZsb2F0IFNW
R0ZvbnREYXRhOjp3aWR0aEZvclNWR0dseXBoKEdseXBoIGdseXBoLCBmbG9hdCBmb250U2l6ZSkg
Y29uc3QKQEAgLTIwOCwxMCArMjA4LDEwIEBAIGJvb2wgU1ZHRm9udERhdGE6OmFwcGx5U1ZHR2x5
cGhTZWxlY3Rpb24KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgU1ZHRm9udERhdGE6OmZp
bGxTVkdHbHlwaFBhZ2UoR2x5cGhQYWdlKiBwYWdlVG9GaWxsLCB1bnNpZ25lZCBvZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25z
dCBTaW1wbGVGb250RGF0YSogZm9udERhdGEpIGNvbnN0Citib29sIFNWR0ZvbnREYXRhOjpmaWxs
U1ZHR2x5cGhQYWdlKEdseXBoUGFnZSogcGFnZVRvRmlsbCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNp
Z25lZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3Qg
Rm9udCogZm9udCkgY29uc3QKIHsKLSAgICBBU1NFUlQoZm9udERhdGEtPmlzQ3VzdG9tRm9udCgp
KTsKLSAgICBBU1NFUlQoZm9udERhdGEtPmlzU1ZHRm9udCgpKTsKKyAgICBBU1NFUlQoZm9udC0+
aXNDdXN0b21Gb250KCkpOworICAgIEFTU0VSVChmb250LT5pc1NWR0ZvbnQoKSk7CiAKICAgICBT
VkdGb250RmFjZUVsZW1lbnQqIGZvbnRGYWNlRWxlbWVudCA9IHRoaXMtPnN2Z0ZvbnRGYWNlRWxl
bWVudCgpOwogICAgIEFTU0VSVChmb250RmFjZUVsZW1lbnQpOwpAQCAtMjIwLDEzICsyMjAsMTMg
QEAgYm9vbCBTVkdGb250RGF0YTo6ZmlsbFNWR0dseXBoUGFnZShHbHlwaAogICAgIEFTU0VSVChm
b250RWxlbWVudCk7CiAKICAgICBpZiAoYnVmZmVyTGVuZ3RoID09IGxlbmd0aCkKLSAgICAgICAg
cmV0dXJuIGZpbGxCTVBHbHlwaHMoZm9udEVsZW1lbnQsIHBhZ2VUb0ZpbGwsIG9mZnNldCwgbGVu
Z3RoLCBidWZmZXIsIGZvbnREYXRhKTsKKyAgICAgICAgcmV0dXJuIGZpbGxCTVBHbHlwaHMoZm9u
dEVsZW1lbnQsIHBhZ2VUb0ZpbGwsIG9mZnNldCwgbGVuZ3RoLCBidWZmZXIsIGZvbnQpOwogCiAg
ICAgQVNTRVJUKGJ1ZmZlckxlbmd0aCA9PSAyICogbGVuZ3RoKTsKLSAgICByZXR1cm4gZmlsbE5v
bkJNUEdseXBocyhmb250RWxlbWVudCwgcGFnZVRvRmlsbCwgb2Zmc2V0LCBsZW5ndGgsIGJ1ZmZl
ciwgZm9udERhdGEpOworICAgIHJldHVybiBmaWxsTm9uQk1QR2x5cGhzKGZvbnRFbGVtZW50LCBw
YWdlVG9GaWxsLCBvZmZzZXQsIGxlbmd0aCwgYnVmZmVyLCBmb250KTsKIH0KIAotYm9vbCBTVkdG
b250RGF0YTo6ZmlsbEJNUEdseXBocyhTVkdGb250RWxlbWVudCogZm9udEVsZW1lbnQsIEdseXBo
UGFnZSogcGFnZVRvRmlsbCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFy
KiBidWZmZXIsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSkgY29uc3QKK2Jvb2wgU1ZH
Rm9udERhdGE6OmZpbGxCTVBHbHlwaHMoU1ZHRm9udEVsZW1lbnQqIGZvbnRFbGVtZW50LCBHbHlw
aFBhZ2UqIHBhZ2VUb0ZpbGwsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hh
ciogYnVmZmVyLCBjb25zdCBGb250KiBmb250KSBjb25zdAogewogICAgIGJvb2wgaGF2ZUdseXBo
cyA9IGZhbHNlOwogICAgIFZlY3RvcjxTVkdHbHlwaD4gZ2x5cGhzOwpAQCAtMjQzLDE0ICsyNDMs
MTQgQEAgYm9vbCBTVkdGb250RGF0YTo6ZmlsbEJNUEdseXBocyhTVkdGb250RQogICAgICAgICAv
LyBjYXJlIG9mIG1hdGNoaW5nIHRvIHRoZSBjb3JyZWN0IGdseXBoLCBpZiBtdWx0aXBsZSBvbmVz
IGFyZSBhdmFpbGFibGUsIGFzIHRoYXQncwogICAgICAgICAvLyBvbmx5IHBvc3NpYmxlIHdpdGhp
biB0aGUgY29udGV4dCBvZiBhIHN0cmluZyAoZWcuIGFyYWJpYyBmb3JtIG1hdGNoaW5nKS4KICAg
ICAgICAgaGF2ZUdseXBocyA9IHRydWU7Ci0gICAgICAgIHBhZ2VUb0ZpbGwtPnNldEdseXBoRGF0
YUZvckluZGV4KG9mZnNldCArIGksIGdseXBocy5maXJzdCgpLnRhYmxlRW50cnksIGZvbnREYXRh
KTsKKyAgICAgICAgcGFnZVRvRmlsbC0+c2V0R2x5cGhEYXRhRm9ySW5kZXgob2Zmc2V0ICsgaSwg
Z2x5cGhzLmZpcnN0KCkudGFibGVFbnRyeSwgZm9udCk7CiAgICAgICAgIGdseXBocy5jbGVhcigp
OwogICAgIH0KIAogICAgIHJldHVybiBoYXZlR2x5cGhzOwogfQogCi1ib29sIFNWR0ZvbnREYXRh
OjpmaWxsTm9uQk1QR2x5cGhzKFNWR0ZvbnRFbGVtZW50KiBmb250RWxlbWVudCwgR2x5cGhQYWdl
KiBwYWdlVG9GaWxsLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1
ZmZlciwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKSBjb25zdAorYm9vbCBTVkdGb250
RGF0YTo6ZmlsbE5vbkJNUEdseXBocyhTVkdGb250RWxlbWVudCogZm9udEVsZW1lbnQsIEdseXBo
UGFnZSogcGFnZVRvRmlsbCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFy
KiBidWZmZXIsIGNvbnN0IEZvbnQqIGZvbnQpIGNvbnN0CiB7CiAgICAgYm9vbCBoYXZlR2x5cGhz
ID0gZmFsc2U7CiAgICAgVmVjdG9yPFNWR0dseXBoPiBnbHlwaHM7CkBAIC0yNjgsNyArMjY4LDcg
QEAgYm9vbCBTVkdGb250RGF0YTo6ZmlsbE5vbkJNUEdseXBocyhTVkdGbwogICAgICAgICAvLyBj
YXJlIG9mIG1hdGNoaW5nIHRvIHRoZSBjb3JyZWN0IGdseXBoLCBpZiBtdWx0aXBsZSBvbmVzIGFy
ZSBhdmFpbGFibGUsIGFzIHRoYXQncwogICAgICAgICAvLyBvbmx5IHBvc3NpYmxlIHdpdGhpbiB0
aGUgY29udGV4dCBvZiBhIHN0cmluZyAoZWcuIGFyYWJpYyBmb3JtIG1hdGNoaW5nKS4KICAgICAg
ICAgaGF2ZUdseXBocyA9IHRydWU7Ci0gICAgICAgIHBhZ2VUb0ZpbGwtPnNldEdseXBoRGF0YUZv
ckluZGV4KG9mZnNldCArIGksIGdseXBocy5maXJzdCgpLnRhYmxlRW50cnksIGZvbnREYXRhKTsK
KyAgICAgICAgcGFnZVRvRmlsbC0+c2V0R2x5cGhEYXRhRm9ySW5kZXgob2Zmc2V0ICsgaSwgZ2x5
cGhzLmZpcnN0KCkudGFibGVFbnRyeSwgZm9udCk7CiAgICAgICAgIGdseXBocy5jbGVhcigpOwog
ICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnREYXRhLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnREYXRhLmgJKHJldmlzaW9uIDE3ODg1NykK
KysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MSwyMSArMjEsMjEgQEAKICNkZWZpbmUgU1ZHRm9udERhdGFfaAogCiAjaWYgRU5BQkxFKFNWR19G
T05UUykKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgorI2luY2x1ZGUgIkZvbnQuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTVkdGb250RWxlbWVudDsKIGNsYXNzIFNWR0Zv
bnRGYWNlRWxlbWVudDsKIAotY2xhc3MgU1ZHRm9udERhdGEgOiBwdWJsaWMgU2ltcGxlRm9udERh
dGE6OlNWR0RhdGEgeworY2xhc3MgU1ZHRm9udERhdGEgOiBwdWJsaWMgRm9udDo6U1ZHRGF0YSB7
CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgU1ZHRm9udERhdGEoU1ZHRm9udEZhY2VFbGVtZW50Kik7
CiAgICAgdmlydHVhbCB+U1ZHRm9udERhdGEoKSB7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBpbml0
aWFsaXplRm9udERhdGEoU2ltcGxlRm9udERhdGEqLCBmbG9hdCBmb250U2l6ZSkgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVGb250KEZvbnQqLCBmbG9hdCBmb250U2l6ZSkg
b3ZlcnJpZGU7CiAgICAgdmlydHVhbCBmbG9hdCB3aWR0aEZvclNWR0dseXBoKEdseXBoLCBmbG9h
dCBmb250U2l6ZSkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIGZpbGxTVkdHbHlw
aFBhZ2UoR2x5cGhQYWdlKiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFy
KiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgU2ltcGxlRm9udERhdGEqKSBj
b25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgZmlsbFNWR0dseXBoUGFnZShHbHlwaFBh
Z2UqLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgdW5z
aWduZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBGb250KikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBi
b29sIGFwcGx5U1ZHR2x5cGhTZWxlY3Rpb24oV2lkdGhJdGVyYXRvciYsIEdseXBoRGF0YSYsIGJv
b2wgbWlycm9yLCBpbnQgY3VycmVudENoYXJhY3RlciwgdW5zaWduZWQmIGFkdmFuY2VMZW5ndGgs
IFN0cmluZyYgbm9ybWFsaXplZFNwYWNlc1N0cmluZ0NhY2hlKSBjb25zdDsKIApAQCAtNTAsOCAr
NTAsOCBAQCBwdWJsaWM6CiAgICAgZmxvYXQgdmVydGljYWxBZHZhbmNlWSgpIGNvbnN0IHsgcmV0
dXJuIG1fdmVydGljYWxBZHZhbmNlWTsgfQogCiBwcml2YXRlOgotICAgIGJvb2wgZmlsbEJNUEds
eXBocyhTVkdGb250RWxlbWVudCosIEdseXBoUGFnZSogLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2ln
bmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgY29uc3QgU2ltcGxlRm9udERhdGEqKSBjb25zdDsK
LSAgICBib29sIGZpbGxOb25CTVBHbHlwaHMoU1ZHRm9udEVsZW1lbnQqLCBHbHlwaFBhZ2UqICwg
dW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIsIGNvbnN0IFNp
bXBsZUZvbnREYXRhKikgY29uc3Q7CisgICAgYm9vbCBmaWxsQk1QR2x5cGhzKFNWR0ZvbnRFbGVt
ZW50KiwgR2x5cGhQYWdlKiAsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hh
ciogYnVmZmVyLCBjb25zdCBGb250KikgY29uc3Q7CisgICAgYm9vbCBmaWxsTm9uQk1QR2x5cGhz
KFNWR0ZvbnRFbGVtZW50KiwgR2x5cGhQYWdlKiAsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQg
bGVuZ3RoLCBVQ2hhciogYnVmZmVyLCBjb25zdCBGb250KikgY29uc3Q7CiAKICAgICBib29sIGFw
cGx5VHJhbnNmb3JtcyhHbHlwaEJ1ZmZlckdseXBoKiwgR2x5cGhCdWZmZXJBZHZhbmNlKiwgc2l6
ZV90LCBUeXBlc2V0dGluZ0ZlYXR1cmVzKSBjb25zdCA9IGRlbGV0ZTsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZvbnRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZvbnRFbGVtZW50LmgJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGb250RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Niw3ICs3Niw3IEBA
IHB1YmxpYzoKICAgICBmbG9hdCBob3Jpem9udGFsS2VybmluZ0ZvclBhaXJPZlN0cmluZ3NBbmRH
bHlwaHMoY29uc3QgU3RyaW5nJiB1MSwgY29uc3QgU3RyaW5nJiBnMSwgY29uc3QgU3RyaW5nJiB1
MiwgY29uc3QgU3RyaW5nJiBnMikgY29uc3Q7CiAgICAgZmxvYXQgdmVydGljYWxLZXJuaW5nRm9y
UGFpck9mU3RyaW5nc0FuZEdseXBocyhjb25zdCBTdHJpbmcmIHUxLCBjb25zdCBTdHJpbmcmIGcx
LCBjb25zdCBTdHJpbmcmIHUyLCBjb25zdCBTdHJpbmcmIGcyKSBjb25zdDsKIAotICAgIC8vIFVz
ZWQgYnkgU2ltcGxlRm9udERhdGEvV2lkdGhJdGVyYXRvci4KKyAgICAvLyBVc2VkIGJ5IEZvbnQv
V2lkdGhJdGVyYXRvci4KICAgICBTVkdHbHlwaCBzdmdHbHlwaEZvckdseXBoKEdseXBoKTsKICAg
ICBHbHlwaCBtaXNzaW5nR2x5cGgoKTsKIApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQcm9jZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlByb2Nlc3MuY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlByb2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MjcsOCArOTI3LDggQEAg
dm9pZCBXZWJQcm9jZXNzOjpnZXRXZWJDb3JlU3RhdGlzdGljcyh1aQogICAgIGRhdGEuc3RhdGlz
dGljc051bWJlcnMuc2V0KEFTQ0lJTGl0ZXJhbCgiSWNvbnNXaXRoRGF0YUNvdW50IiksIGljb25E
YXRhYmFzZSgpLmljb25SZWNvcmRDb3VudFdpdGhEYXRhKCkpOwogICAgIAogICAgIC8vIEdhdGhl
ciBmb250IHN0YXRpc3RpY3MuCi0gICAgZGF0YS5zdGF0aXN0aWNzTnVtYmVycy5zZXQoQVNDSUlM
aXRlcmFsKCJDYWNoZWRGb250RGF0YUNvdW50IiksIGZvbnRDYWNoZSgpLmZvbnREYXRhQ291bnQo
KSk7Ci0gICAgZGF0YS5zdGF0aXN0aWNzTnVtYmVycy5zZXQoQVNDSUlMaXRlcmFsKCJDYWNoZWRG
b250RGF0YUluYWN0aXZlQ291bnQiKSwgZm9udENhY2hlKCkuaW5hY3RpdmVGb250RGF0YUNvdW50
KCkpOworICAgIGRhdGEuc3RhdGlzdGljc051bWJlcnMuc2V0KEFTQ0lJTGl0ZXJhbCgiQ2FjaGVk
Rm9udERhdGFDb3VudCIpLCBmb250Q2FjaGUoKS5mb250Q291bnQoKSk7CisgICAgZGF0YS5zdGF0
aXN0aWNzTnVtYmVycy5zZXQoQVNDSUlMaXRlcmFsKCJDYWNoZWRGb250RGF0YUluYWN0aXZlQ291
bnQiKSwgZm9udENhY2hlKCkuaW5hY3RpdmVGb250Q291bnQoKSk7CiAgICAgCiAgICAgLy8gR2F0
aGVyIGdseXBoIHBhZ2Ugc3RhdGlzdGljcy4KICAgICBkYXRhLnN0YXRpc3RpY3NOdW1iZXJzLnNl
dChBU0NJSUxpdGVyYWwoIkdseXBoUGFnZUNvdW50IiksIEdseXBoUGFnZTo6Y291bnQoKSk7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJQb3B1
cE1lbnVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9tYWMvV2ViUG9wdXBNZW51TWFjLm1tCShyZXZpc2lvbiAxNzg4NTcpCisrKyBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJQb3B1cE1lbnVN
YWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgdm9pZCBXZWJQb3B1cE1lbnU6
OnNldFVwUGxhdGZvcm1EYXRhKGNvbgogewogI2lmIFVTRShBUFBLSVQpCiAgICAgLy8gRklYTUU6
IGZvbnQgd2lsbCBiZSBuaWwgaGVyZSBmb3IgY3VzdG9tIGZvbnRzLCB3ZSBzaG91bGQgZml4IHRo
YXQuCi0gICAgTlNGb250ICpmb250ID0gbV9wb3B1cENsaWVudC0+bWVudVN0eWxlKCkuZm9udCgp
LnByaW1hcnlGb250RGF0YSgpLmdldE5TRm9udCgpOworICAgIE5TRm9udCAqZm9udCA9IG1fcG9w
dXBDbGllbnQtPm1lbnVTdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udCgpLmdldE5TRm9udCgpOwog
ICAgIGlmICghZm9udCkKICAgICAgICAgcmV0dXJuOwogICAgIApJbmRleDogU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQkocmV2aXNp
b24gMTc4ODU3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQ
YWdlSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNzkwLDggKzE3OTAsOCBAQCB2b2lkIFdlYlBh
Z2U6OnJlcXVlc3RBdXRvY29ycmVjdGlvbkRhdGEoCiAKICAgICBib29sIG11bHRpcGxlRm9udHMg
PSBmYWxzZTsKICAgICBDVEZvbnRSZWYgZm9udCA9IG5pbDsKLSAgICBpZiAoY29uc3QgU2ltcGxl
Rm9udERhdGEqIGZvbnREYXRhID0gZnJhbWUuZWRpdG9yKCkuZm9udEZvclNlbGVjdGlvbihtdWx0
aXBsZUZvbnRzKSkKLSAgICAgICAgZm9udCA9IGZvbnREYXRhLT5nZXRDVEZvbnQoKTsKKyAgICBp
ZiAoYXV0byogY29yZUZvbnQgPSBmcmFtZS5lZGl0b3IoKS5mb250Rm9yU2VsZWN0aW9uKG11bHRp
cGxlRm9udHMpKQorICAgICAgICBmb250ID0gY29yZUZvbnQtPmdldENURm9udCgpOwogCiAgICAg
Q0dGbG9hdCBmb250U2l6ZSA9IENURm9udEdldFNpemUoZm9udCk7CiAgICAgdWludDY0X3QgZm9u
dFRyYWl0cyA9IENURm9udEdldFN5bWJvbGljVHJhaXRzKGZvbnQpOwpJbmRleDogU291cmNlL1dl
YktpdC9pb3MvTWlzYy9FbW9qaUZhbGxiYWNrRm9udFNlbGVjdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L2lvcy9NaXNjL0Vtb2ppRmFsbGJhY2tGb250U2VsZWN0b3IuY3BwCShy
ZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViS2l0L2lvcy9NaXNjL0Vtb2ppRmFsbGJhY2tG
b250U2VsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxNyArMjcsMTcgQEAKIAogI2lu
Y2x1ZGUgIkVtb2ppRmFsbGJhY2tGb250U2VsZWN0b3IuaCIKIAorI2luY2x1ZGUgPFdlYkNvcmUv
Rm9udC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRm9udENhY2hlLmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9TaW1wbGVGb250RGF0YS5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwog
Ci1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBFbW9qaUZhbGxiYWNrRm9udFNlbGVjdG9yOjpm
YWxsYmFja0ZvbnREYXRhQXQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24s
IHNpemVfdCkKK1Bhc3NSZWZQdHI8Rm9udD4gRW1vamlGYWxsYmFja0ZvbnRTZWxlY3Rvcjo6ZmFs
bGJhY2tGb250QXQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIHNpemVf
dCkKIHsKICAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBh
cHBsZUNvbG9yRW1vamksICgiQXBwbGUgQ29sb3IgRW1vamkiKSk7Ci0gICAgUmVmUHRyPFNpbXBs
ZUZvbnREYXRhPiBmb250RGF0YSA9IGZvbnRDYWNoZSgpLmZvbnRGb3JGYW1pbHkoZm9udERlc2Ny
aXB0aW9uLCBhcHBsZUNvbG9yRW1vamkpOworICAgIFJlZlB0cjxGb250PiBmb250RGF0YSA9IGZv
bnRDYWNoZSgpLmZvbnRGb3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCBhcHBsZUNvbG9yRW1vamkp
OwogICAgIGlmICghZm9udERhdGEpIHsKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZ2V0
IFwiQXBwbGUgQ29sb3IgRW1vamlcIiBmcm9tIHRoZSBmb250IGNhY2hlLiBVc2luZyB0aGUgbGFz
dCByZXNvcnQgZmFsbGJhY2sgZm9udCBpbnN0ZWFkLiIpOwogICAgICAgICBmb250RGF0YSA9IGZv
bnRDYWNoZSgpLmxhc3RSZXNvcnRGYWxsYmFja0ZvbnQoZm9udERlc2NyaXB0aW9uKTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvaW9zL01pc2MvRW1vamlGYWxsYmFja0ZvbnRTZWxlY3Rvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvaW9zL01pc2MvRW1vamlGYWxsYmFja0ZvbnRTZWxlY3Rv
ci5oCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViS2l0L2lvcy9NaXNjL0Vtb2ppRmFs
bGJhY2tGb250U2VsZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCBXZWJDb3JlOjpGb250UmFuZ2VzIGZvbnRSYW5nZXNGb3JGYW1pbHko
Y29uc3QgV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbWljU3RyaW5nJikgb3Zl
cnJpZGUgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIFdlYkNvcmU6OkZvbnRSYW5nZXMo
KTsgfQogICAgIHZpcnR1YWwgYm9vbCByZXNvbHZlc0ZhbWlseUZvcihjb25zdCBXZWJDb3JlOjpG
b250RGVzY3JpcHRpb24mKSBjb25zdCBvdmVycmlkZSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyBy
ZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIHNpemVfdCBmYWxsYmFja0ZvbnREYXRhQ291bnQo
KSBvdmVycmlkZSB7IHJldHVybiAxOyB9OwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3Jl
OjpTaW1wbGVGb250RGF0YT4gZmFsbGJhY2tGb250RGF0YUF0KGNvbnN0IFdlYkNvcmU6OkZvbnRE
ZXNjcmlwdGlvbiYsIHNpemVfdCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdl
YkNvcmU6OkZvbnQ+IGZhbGxiYWNrRm9udEF0KGNvbnN0IFdlYkNvcmU6OkZvbnREZXNjcmlwdGlv
biYsIHNpemVfdCkgb3ZlcnJpZGU7CiAKICAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJGb3JJbnZh
bGlkYXRpb25DYWxsYmFja3MoV2ViQ29yZTo6Rm9udFNlbGVjdG9yQ2xpZW50Kikgb3ZlcnJpZGUg
eyB9CiAgICAgdmlydHVhbCB2b2lkIHVucmVnaXN0ZXJGb3JJbnZhbGlkYXRpb25DYWxsYmFja3Mo
V2ViQ29yZTo6Rm9udFNlbGVjdG9yQ2xpZW50Kikgb3ZlcnJpZGUgeyB9CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW0JKHJldmlzaW9uIDE3ODg1NykK
KysrIFNvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTE0NywxMiArMTQ3LDEyIEBAICsgKHNpemVfdClpY29uc1dpdGhEYXRhQ291bnQK
IAogKyAoc2l6ZV90KWNhY2hlZEZvbnREYXRhQ291bnQKIHsKLSAgICByZXR1cm4gZm9udENhY2hl
KCkuZm9udERhdGFDb3VudCgpOworICAgIHJldHVybiBmb250Q2FjaGUoKS5mb250Q291bnQoKTsK
IH0KIAogKyAoc2l6ZV90KWNhY2hlZEZvbnREYXRhSW5hY3RpdmVDb3VudAogewotICAgIHJldHVy
biBmb250Q2FjaGUoKS5pbmFjdGl2ZUZvbnREYXRhQ291bnQoKTsKKyAgICByZXR1cm4gZm9udENh
Y2hlKCkuaW5hY3RpdmVGb250Q291bnQoKTsKIH0KIAogKyAodm9pZClwdXJnZUluYWN0aXZlRm9u
dERhdGEKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1BvcHVwTWVudU1h
Yy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9Qb3B1
cE1lbnVNYWMubW0JKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNv
cmVTdXBwb3J0L1BvcHVwTWVudU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjgsMTEgKzI4LDEx
IEBACiAjaW1wb3J0IDxXZWJDb3JlL0Nocm9tZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9DaHJvbWVD
bGllbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvRXZlbnRIYW5kbGVyLmg+CisjaW1wb3J0IDxXZWJD
b3JlL0ZvbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvRnJhbWUuaD4KICNpbXBvcnQgPFdlYkNvcmUv
RnJhbWVWaWV3Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BhZ2UuaD4KICNpbXBvcnQgPFdlYkNvcmUv
UG9wdXBNZW51Q2xpZW50Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1NpbXBsZUZvbnREYXRhLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaD4KIAogdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CkBAIC04MSw5ICs4MSw5IEBAIHZvaWQgUG9wdXBNZW51TWFjOjpwb3B1bGF0
ZSgpCiAgICAgICAgIFBvcHVwTWVudVN0eWxlIHN0eWxlID0gbV9jbGllbnQtPml0ZW1TdHlsZShp
KTsKICAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZURpY3Rpb25hcnk+IGF0dHJpYnV0ZXMgPSBh
ZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF0pOwogICAgICAgICBpZiAo
c3R5bGUuZm9udCgpICE9IEZvbnRDYXNjYWRlKCkpIHsKLSAgICAgICAgICAgIE5TRm9udCAqZm9u
dCA9IHN0eWxlLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXROU0ZvbnQoKTsKKyAgICAgICAg
ICAgIE5TRm9udCAqZm9udCA9IHN0eWxlLmZvbnQoKS5wcmltYXJ5Rm9udCgpLmdldE5TRm9udCgp
OwogICAgICAgICAgICAgaWYgKCFmb250KSB7Ci0gICAgICAgICAgICAgICAgQ0dGbG9hdCBzaXpl
ID0gc3R5bGUuZm9udCgpLnByaW1hcnlGb250RGF0YSgpLnBsYXRmb3JtRGF0YSgpLnNpemUoKTsK
KyAgICAgICAgICAgICAgICBDR0Zsb2F0IHNpemUgPSBzdHlsZS5mb250KCkucHJpbWFyeUZvbnQo
KS5wbGF0Zm9ybURhdGEoKS5zaXplKCk7CiAgICAgICAgICAgICAgICAgZm9udCA9IHN0eWxlLmZv
bnQoKS53ZWlnaHQoKSA8IEZvbnRXZWlnaHRCb2xkID8gW05TRm9udCBzeXN0ZW1Gb250T2ZTaXpl
OnNpemVdIDogW05TRm9udCBib2xkU3lzdGVtRm9udE9mU2l6ZTpzaXplXTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIFthdHRyaWJ1dGVzIHNldE9iamVjdDpmb250IGZvcktleTpOU0ZvbnRB
dHRyaWJ1dGVOYW1lXTsKQEAgLTE0OCw3ICsxNDgsNyBAQCB2b2lkIFBvcHVwTWVudU1hYzo6c2hv
dyhjb25zdCBJbnRSZWN0JiByCiAgICAgTlNNZW51KiBtZW51ID0gW21fcG9wdXAgbWVudV07CiAg
ICAgCiAgICAgTlNQb2ludCBsb2NhdGlvbjsKLSAgICBOU0ZvbnQqIGZvbnQgPSBtX2NsaWVudC0+
bWVudVN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250RGF0YSgpLmdldE5TRm9udCgpOworICAgIE5T
Rm9udCogZm9udCA9IG1fY2xpZW50LT5tZW51U3R5bGUoKS5mb250KCkucHJpbWFyeUZvbnQoKS5n
ZXROU0ZvbnQoKTsKIAogICAgIC8vIFRoZXNlIHZhbHVlcyB3ZXJlIGJvcnJvd2VkIGZyb20gQXBw
S2l0IHRvIG1hdGNoIHRoZWlyIHBsYWNlbWVudCBvZiB0aGUgbWVudS4KICAgICBjb25zdCBpbnQg
cG9wT3Zlckhvcml6b250YWxBZGp1c3QgPSAtMTA7CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYkZyYW1lLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZp
ZXcvV2ViRnJhbWUubW0JKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViRnJhbWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTExNCwxMSArMTE0LDExIEBACiAj
aW1wb3J0IDxXZWJDb3JlL0VkaXRvci5oPgogI2ltcG9ydCA8V2ViQ29yZS9FZGl0b3JDbGllbnQu
aD4KICNpbXBvcnQgPFdlYkNvcmUvRm9jdXNDb250cm9sbGVyLmg+CisjaW1wb3J0IDxXZWJDb3Jl
L0ZvbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVTZWxlY3Rpb24uaD4KICNpbXBvcnQgPFdl
YkNvcmUvSGlzdG9yeUNvbnRyb2xsZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvTm9kZVRyYXZlcnNh
bC5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJMYXllci5oPgotI2ltcG9ydCA8V2ViQ29yZS9T
aW1wbGVGb250RGF0YS5oPgogI2ltcG9ydCA8V2ViQ29yZS9UZXh0UmVzb3VyY2VEZWNvZGVyLmg+
CiAjaW1wb3J0IDxXZWJDb3JlL1dBS1Njcm9sbFZpZXcuaD4KICNpbXBvcnQgPFdlYkNvcmUvV0FL
Vmlld1ByaXZhdGUuaD4KQEAgLTE4NjksNyArMTg2OSw4IEBAIC0gKENURm9udFJlZilmb250Rm9y
U2VsZWN0aW9uOihCT09MICopaGEKICAgICBib29sIG11bHRpcGxlRm9udHMgPSBmYWxzZTsKICAg
ICBDVEZvbnRSZWYgZm9udCA9IG5pbDsKICAgICBpZiAoX3ByaXZhdGUtPmNvcmVGcmFtZSkgewot
ICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogZmQgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5l
ZGl0b3IoKS5mb250Rm9yU2VsZWN0aW9uKG11bHRpcGxlRm9udHMpOworICAgICAgICBjb25zdCBG
b250CisgICAgICAgICogZmQgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5lZGl0b3IoKS5mb250Rm9y
U2VsZWN0aW9uKG11bHRpcGxlRm9udHMpOwogICAgICAgICBpZiAoZmQpCiAgICAgICAgICAgICBm
b250ID0gZmQtPmdldENURm9udCgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViSFRNTFZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2Vi
Vmlldy9XZWJIVE1MVmlldy5tbQkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYktpdC9t
YWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtOTIsNiArOTIsNyBA
QAogI2ltcG9ydCA8V2ViQ29yZS9FeGNlcHRpb25IYW5kbGVycy5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9GbG9hdFJlY3QuaD4KICNpbXBvcnQgPFdlYkNvcmUvRm9jdXNDb250cm9sbGVyLmg+CisjaW1w
b3J0IDxXZWJDb3JlL0ZvbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvRm9udENhY2hlLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lTG9hZGVyLmg+CkBA
IC0xMTIsNyArMTEzLDYgQEAKICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyV2lkZ2V0Lmg+CiAjaW1w
b3J0IDxXZWJDb3JlL1J1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9TaGFyZWRCdWZmZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvU2ltcGxlRm9udERhdGEuaD4KICNp
bXBvcnQgPFdlYkNvcmUvU3R5bGVQcm9wZXJ0aWVzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1RleHQu
aD4KICNpbXBvcnQgPFdlYkNvcmUvVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlLmg+CkBAIC00ODc4
LDggKzQ4NzgsOCBAQCBzdGF0aWMgTlNTdHJpbmcgKmZvbnROYW1lRm9yRGVzY3JpcHRpb24oCiAg
ICAgZm9udERlc2NyaXB0aW9uLnNldElzSXRhbGljKGl0YWxpYyk7CiAgICAgZm9udERlc2NyaXB0
aW9uLnNldFdlaWdodChib2xkID8gRm9udFdlaWdodDkwMCA6IEZvbnRXZWlnaHQ1MDApOwogICAg
IGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKHBvaW50U2l6ZSk7Ci0gICAgUmVmUHRy
PFNpbXBsZUZvbnREYXRhPiBzaW1wbGVGb250RGF0YSA9IGZvbnRDYWNoZSgpLmZvbnRGb3JGYW1p
bHkoZm9udERlc2NyaXB0aW9uLCBmYW1pbHlOYW1lKTsKLSAgICByZXR1cm4gW3NpbXBsZUZvbnRE
YXRhLT5wbGF0Zm9ybURhdGEoKS5uc0ZvbnQoKSBmb250TmFtZV07CisgICAgUmVmUHRyPEZvbnQ+
IGZvbnQgPSBmb250Q2FjaGUoKS5mb250Rm9yRmFtaWx5KGZvbnREZXNjcmlwdGlvbiwgZmFtaWx5
TmFtZSk7CisgICAgcmV0dXJuIFtmb250LT5wbGF0Zm9ybURhdGEoKS5uc0ZvbnQoKSBmb250TmFt
ZV07CiB9CiAKIC0gKHZvaWQpX2FkZFRvU3R5bGU6KERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKilz
dHlsZSBmb250QTooTlNGb250ICopYSBmb250QjooTlNGb250ICopYgpAQCAtNTQ0Miw3ICs1NDQy
LDcgQEAgLSAodm9pZClfdXBkYXRlRm9udFBhbmVsCiAgICAgYm9vbCBtdWx0aXBsZUZvbnRzID0g
ZmFsc2U7CiAgICAgTlNGb250ICpmb250ID0gbmlsOwogICAgIGlmIChGcmFtZSogY29yZUZyYW1l
ID0gY29yZShbc2VsZiBfZnJhbWVdKSkgewotICAgICAgICBpZiAoY29uc3QgU2ltcGxlRm9udERh
dGEqIGZkID0gY29yZUZyYW1lLT5lZGl0b3IoKS5mb250Rm9yU2VsZWN0aW9uKG11bHRpcGxlRm9u
dHMpKQorICAgICAgICBpZiAoY29uc3QgRm9udCogZmQgPSBjb3JlRnJhbWUtPmVkaXRvcigpLmZv
bnRGb3JTZWxlY3Rpb24obXVsdGlwbGVGb250cykpCiAgICAgICAgICAgICBmb250ID0gZmQtPmdl
dE5TRm9udCgpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYktpdC93aW4vRE9NQ29yZUNsYXNz
ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL0RPTUNvcmVDbGFzc2VzLmNw
cAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYktpdC93aW4vRE9NQ29yZUNsYXNzZXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9E
b2N1bWVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRHJhZ0ltYWdlLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9FbGVtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Gb250Lmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9Gb250Q2FzY2FkZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL0hUTUxGb3JtRWxlbWVudC5oPgpAQCAtNDgsNyArNDksNiBAQAogI2luY2x1ZGUg
PFdlYkNvcmUvTm9kZUxpc3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlckVsZW1lbnQuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlclRyZWVBc1RleHQuaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L1NpbXBsZUZvbnREYXRhLmg+CiAKICNpbmNsdWRlIDxpbml0Z3VpZC5oPgogLy8gezNCMEMwRUZG
LTQ3OEItNGIwYi04MjkwLUQyMzIxRTA4RTIzRX0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL1dl
YlZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcuY3BwCShy
ZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTYsNiArOTYsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRRdWFkLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Gb2N1
c0NvbnRyb2xsZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZvbnQuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL0ZyYW1lTG9hZGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZVNlbGVjdGlvbi5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVUcmVlLmg+CkBAIC0xNDgsNyArMTQ5LDYgQEAKICNpbmNs
dWRlIDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TZWN1cml0
eVBvbGljeS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2V0dGluZ3MuaD4KLSNpbmNsdWRlIDxXZWJD
b3JlL1NpbXBsZUZvbnREYXRhLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TeXN0ZW1JbmZvLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9XaW5kb3dNZXNzYWdlQnJvYWRjYXN0ZXIuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL1dpbmRvd3NUb3VjaC5oPgpAQCAtNTUwNSw3ICs1NTA1LDcgQEAgSFJFU1VMVCBXZWJW
aWV3OjpzZXRQcm9oaWJpdHNNYWluRnJhbWVTYwogCiBIUkVTVUxUIFdlYlZpZXc6OnNldFNob3Vs
ZEFwcGx5TWFjRm9udEFzY2VudEhhY2soQk9PTCBiKQogewotICAgIFNpbXBsZUZvbnREYXRhOjpz
ZXRTaG91bGRBcHBseU1hY0FzY2VudEhhY2soYik7CisgICAgRm9udDo6c2V0U2hvdWxkQXBwbHlN
YWNBc2NlbnRIYWNrKGIpOwogICAgIHJldHVybiBTX09LOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245148</attachid>
            <date>2015-01-22 10:58:19 -0800</date>
            <delta_ts>2015-01-22 11:13:57 -0800</delta_ts>
            <desc>another</desc>
            <filename>simplefontdata-rename-8.patch</filename>
            <type>text/plain</type>
            <size>381282</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDE1LTAxLTIxICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgU2ltcGxlRm9udERh
dGEgdG8gRm9udAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTQwNDk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhlIGZhbGxiYWNrIHN1cHBvcnRpbmcgRm9udCB0eXBlIHdhcyByZW5hbWVkIEZvbnRDYXNj
YWRlLgorICAgICAgICBXZSBjYW4gbm93IHJlbmFtZSBTaW1wbGVGb250RGF0YSB0byBqdXN0IEZv
bnQgbWF0Y2hpbmcgdGhlIHVzdWFsIGRlZmluaXRpb24uCisKIDIwMTUtMDEtMjEgIEJlbmphbWlu
IFBvdWxhaW4gIDxiZW5qYW1pbkB3ZWJraXQub3JnPgogCiAgICAgICAgIEhhbmRsZSB0aGUgdHJh
bnNpdGlvbiBvbiBhbnkgY2hhcmFjdGVyIGFzIGEgc2VwYXJhdGUgdHlwZSBvZiB0cmFuc2l0aW9u
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dl
YkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTIwNTQsNiArMjA1NCw3IEBA
IHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3Bw
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSb3VuZGVkUmVjdC5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9GbG9hdFNpemUuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhc2NhZGUuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERlc2NyaXB0aW9u
LmNwcApAQCAtMjA4OSw3ICsyMDkwLDYgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL1JvdW5kZWRSZWN0LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1NWR0ds
eXBoLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCi0gICAgcGxhdGZv
cm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvU3Ry
aW5nVHJ1bmNhdG9yLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1N1cnJvZ2F0ZVBhaXJBd2Fy
ZVRleHRJdGVyYXRvci5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVuLmNwcApJbmRl
eDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC00NjksNyArNDY5LDYgQEAgX19aTjdX
ZWJDb3JlMTRTZWN1cml0eVBvbGljeTIyZ2VuZXJhdGVSZQogX19aTjdXZWJDb3JlMTRTZWN1cml0
eVBvbGljeTI3cmVzZXRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RzRXYKIF9fWk43V2ViQ29yZTE0U2Vj
dXJpdHlQb2xpY3kyOWFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5RVJLTlNfMTRTZWN1cml0
eU9yaWdpbkVSS04zV1RGNlN0cmluZ0VTN19iCiBfX1pON1dlYkNvcmUxNFNlY3VyaXR5UG9saWN5
MzJyZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeUVSS05TXzE0U2VjdXJpdHlPcmlnaW5F
UktOM1dURjZTdHJpbmdFUzdfYgotX19aTjdXZWJDb3JlMTRTaW1wbGVGb250RGF0YUQxRXYKIF9f
Wk43V2ViQ29yZTE0U3ViZnJhbWVMb2FkZXIxMmFsbG93UGx1Z2luc0VOU18yOFJlYXNvbkZvckNh
bGxpbmdBbGxvd1BsdWdpbnNFCiBfX1pON1dlYkNvcmUxNFRpbGVDb250cm9sbGVyMTRzZXRUaWxl
c09wYXF1ZUViCiBfX1pON1dlYkNvcmUxNFRpbGVDb250cm9sbGVyMTVjb250YWluZXJMYXllcnNF
dgpAQCAtMTE3OSw2ICsxMTc4LDcgQEAgX19aTjdXZWJDb3JlNDBkZWZhdWx0VGV4dEVuY29kaW5n
TmFtZUZvcgogX19aTjdXZWJDb3JlNDByZXN0cmljdE1pbmltdW1TY2FsZUZhY3RvclRvVmlld3Bv
cnRTaXplRVJOU18xOFZpZXdwb3J0QXR0cmlidXRlc0VOU183SW50U2l6ZUVmCiBfX1pON1dlYkNv
cmU0MlVSTEJ5VHJ1bmNhdGluZ09uZUNoYXJhY3RlckJlZm9yZUNvbXBvbmVudEVQNU5TVVJMMThD
RlVSTENvbXBvbmVudFR5cGUKIF9fWk43V2ViQ29yZTQ3YXR0cmlidXRlZFN0cmluZ0J5U3RyaXBw
aW5nQXR0YWNobWVudENoYXJhY3RlcnNFUDE4TlNBdHRyaWJ1dGVkU3RyaW5nCitfX1pON1dlYkNv
cmU0Rm9udEQxRXYKIF9fWk43V2ViQ29yZTRJY29uMThjcmVhdGVJY29uRm9yRmlsZXNFUktOM1dU
RjZWZWN0b3JJTlMxXzZTdHJpbmdFTG0wRU5TMV8xNUNyYXNoT25PdmVyZmxvd0VFRQogX19aTjdX
ZWJDb3JlNEljb25EMUV2CiBfX1pON1dlYkNvcmU0Tm9kZTEwcmVuZGVyUmVjdEVQYgpAQCAtMTQ5
MiwxMSArMTQ5MiwxMSBAQCBfX1pON1dlYkNvcmU5RmxvYXRSZWN0QzFFUktOU183SW50UmVjdEUK
IF9fWk43V2ViQ29yZTlGbG9hdFNpemVDMUVSSzZDR1NpemUKIF9fWk43V2ViQ29yZTlGbG9hdFNp
emVDMUVSS05TXzdJbnRTaXplRQogX19aTjdXZWJDb3JlOUZvbnRDYWNoZTEwaW52YWxpZGF0ZUV2
Ci1fX1pON1dlYkNvcmU5Rm9udENhY2hlMTNmb250RGF0YUNvdW50RXYKIF9fWk43V2ViQ29yZTlG
b250Q2FjaGUxM2ZvbnRGb3JGYW1pbHlFUktOU18xNUZvbnREZXNjcmlwdGlvbkVSS04zV1RGMTJB
dG9taWNTdHJpbmdFYgotX19aTjdXZWJDb3JlOUZvbnRDYWNoZTIxaW5hY3RpdmVGb250RGF0YUNv
dW50RXYKK19fWk43V2ViQ29yZTlGb250Q2FjaGUxN2luYWN0aXZlRm9udENvdW50RXYKIF9fWk43
V2ViQ29yZTlGb250Q2FjaGUyMXB1cmdlSW5hY3RpdmVGb250RGF0YUVpCiBfX1pON1dlYkNvcmU5
Rm9udENhY2hlMjlwdXJnZUluYWN0aXZlRm9udERhdGFJZk5lZWRlZEV2CitfX1pON1dlYkNvcmU5
Rm9udENhY2hlOWZvbnRDb3VudEV2CiBfX1pON1dlYkNvcmU5RnJhbWVUcmVlMTFhcHBlbmRDaGls
ZEVOM1dURjEwUGFzc1JlZlB0cklOU181RnJhbWVFRUUKIF9fWk43V2ViQ29yZTlGcmFtZVRyZWU3
c2V0TmFtZUVSS04zV1RGMTJBdG9taWNTdHJpbmdFCiBfX1pON1dlYkNvcmU5RnJhbWVUcmVlOWNs
ZWFyTmFtZUV2CkBAIC0xNjM0LDggKzE2MzQsOCBAQCBfX1pOSzNXVEY2U3RyaW5nMTRjcmVhdGVD
RlN0cmluZ0V2CiBfX1pOSzdXZWJDb3JlMTBDcmVkZW50aWFsMTJuc0NyZWRlbnRpYWxFdgogX19a
Tks3V2ViQ29yZTEwQ3JlZGVudGlhbDdpc0VtcHR5RXYKIF9fWk5LN1dlYkNvcmUxMEZsb2F0UG9p
bnRjdjdDR1BvaW50RXYKLV9fWk5LN1dlYkNvcmUxMEZvbnRSYW5nZXMyMGZvbnREYXRhRm9yQ2hh
cmFjdGVyRWkKLV9fWk5LN1dlYkNvcmUxMEZvbnRSYW5nZXMyMWZvbnREYXRhRm9yRmlyc3RSYW5n
ZUV2CitfX1pOSzdXZWJDb3JlMTBGb250UmFuZ2VzMTZmb250Rm9yQ2hhcmFjdGVyRWkKK19fWk5L
N1dlYkNvcmUxMEZvbnRSYW5nZXMxN2ZvbnRGb3JGaXJzdFJhbmdlRXYKIF9fWk5LN1dlYkNvcmUx
MExheW91dFJlY3Q4Y29udGFpbnNFUktTMF8KIF9fWk5LN1dlYkNvcmUxMFBsdWdpbkRhdGExNnN1
cHBvcnRzTWltZVR5cGVFUktOM1dURjZTdHJpbmdFTlMwXzE4QWxsb3dlZFBsdWdpblR5cGVzRQog
X19aTks3V2ViQ29yZTEwUmVuZGVyVGV4dDE2Zmlyc3RSdW5Mb2NhdGlvbkV2CkBAIC0xNjY1LDcg
KzE2NjUsNyBAQCBfX1pOSzdXZWJDb3JlMTBUaW1lUmFuZ2VzM2VuZEVqUmkKIF9fWk5LN1dlYkNv
cmUxMFRpbWVSYW5nZXM0Y29weUV2CiBfX1pOSzdXZWJDb3JlMTBUaW1lUmFuZ2VzNXN0YXJ0RWpS
aQogX19aTks3V2ViQ29yZTEwVGltZVJhbmdlczZsZW5ndGhFdgotX19aTks3V2ViQ29yZTExRm9u
dENhc2NhZGU1d2lkdGhFUktOU183VGV4dFJ1bkVQTjNXVEY3SGFzaFNldElQS05TXzE0U2ltcGxl
Rm9udERhdGFFTlM0XzdQdHJIYXNoSVM4X0VFTlM0XzEwSGFzaFRyYWl0c0lTOF9FRUVFUE5TXzEz
R2x5cGhPdmVyZmxvd0UKK19fWk5LN1dlYkNvcmUxMUZvbnRDYXNjYWRlNXdpZHRoRVJLTlNfN1Rl
eHRSdW5FUE4zV1RGN0hhc2hTZXRJUEtOU180Rm9udEVOUzRfN1B0ckhhc2hJUzhfRUVOUzRfMTBI
YXNoVHJhaXRzSVM4X0VFRUVQTlNfMTNHbHlwaE92ZXJmbG93RQogX19aTks3V2ViQ29yZTExRm9u
dENhc2NhZGU4ZHJhd1RleHRFUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfN1RleHRSdW5FUktO
U18xMEZsb2F0UG9pbnRFaWlOUzBfMjRDdXN0b21Gb250Tm90UmVhZHlBY3Rpb25FCiBfX1pOSzdX
ZWJDb3JlMTFGb250Q2FzY2FkZWVxRVJLUzBfCiBfX1pOSzdXZWJDb3JlMTFGcmFtZUxvYWRlcjEw
aXNDb21wbGV0ZUV2CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29y
ZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9X
ZWJDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTgwMjcsNiArODAy
Nyw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGbG9h
dFJlY3QuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhp
Y3NcRmxvYXRSb3VuZGVkUmVjdC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxw
bGF0Zm9ybVxncmFwaGljc1xGbG9hdFNpemUuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGb250Q2FjaGUuY3BwIiAvPgogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udENhc2NhZGUuY3BwIiAvPgogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udERlc2NyaXB0aW9u
LmNwcCIgLz4KQEAgLTgwNjksNyArODA3MCw2IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxwbGF0Zm9ybVxncmFwaGljc1xSZWdpb24uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcUm91bmRlZFJlY3QuY3BwIiAvPgogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcU2hhZG93Qmx1ci5jcHAiIC8+Ci0gICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xTaW1wbGVGb250RGF0YS5j
cHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xUZXh0
UnVuLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNz
XFRleHRUcmFja1JlcHJlc2VudGF0aW9uLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXFdPRkZGaWxlRm9ybWF0LmNwcCIgLz4KQEAgLTE5NTE2LDYg
KzE5NTE2LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNz
XEZsb2F0Um91bmRlZFJlY3QuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRm
b3JtXGdyYXBoaWNzXEZsb2F0U2l6ZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cGxhdGZvcm1cZ3JhcGhpY3NcRmxvYXRTaXplSGFzaC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udENhY2hlLmgiIC8+CiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGb250Q2FzY2FkZS5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udERlc2NyaXB0aW9uLmgi
IC8+CkBAIC0xOTU2OCw3ICsxOTU2OSw2IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxw
bGF0Zm9ybVxncmFwaGljc1xSZWdpb24uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHBsYXRmb3JtXGdyYXBoaWNzXFJvdW5kZWRSZWN0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xTaGFkb3dCbHVyLmgiIC8+Ci0gICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xTaW1wbGVGb250RGF0YS5oIiAvPgogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcVGV4dFJ1bi5oIiAvPgog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcVGV4dFRyYWNrUmVw
cmVzZW50YXRpb24uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdy
YXBoaWNzXFVuaXRCZXppZXIuaCIgLz4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtNDcwNSw4ICs0NzA1LDggQEAKIAkJQjJDM0RBNjEwRDAwNkNENjAwRUY2RjI2IC8qIEZv
bnRDYXNjYWRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCMkMzREE1MDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCMkMzREE2MjBEMDA2Q0Q2MDBF
RjZGMjYgLyogRm9udENhY2hlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEIyQzNEQTUxMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FjaGUuY3BwICov
OyB9OwogCQlCMkMzREE2MzBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhY2hlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkMzREE1MjBEMDA2Q0Q2MDBF
RjZGMjYgLyogRm9udENhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKLQkJQjJDM0RBNjQwRDAwNkNENjAwRUY2RjI2IC8qIFNpbXBsZUZvbnREYXRh
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNE
QTUzMEQwMDZDRDYwMEVGNkYyNiAvKiBTaW1wbGVGb250RGF0YS5jcHAgKi87IH07Ci0JCUIyQzNE
QTY1MEQwMDZDRDYwMEVGNkYyNiAvKiBTaW1wbGVGb250RGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBNTQwRDAwNkNENjAwRUY2RjI2IC8q
IFNpbXBsZUZvbnREYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJQjJDM0RBNjQwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBNTMwRDAwNkNENjAw
RUY2RjI2IC8qIEZvbnQuY3BwICovOyB9OworCQlCMkMzREE2NTBEMDA2Q0Q2MDBFRjZGMjYgLyog
Rm9udC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJD
M0RBNTQwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCMkMzREE2NjBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9u
dERlc2NyaXB0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCMkMzREE1NTBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udERlc2NyaXB0aW9uLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjJDM0RBNjcwRDAw
NkNENjAwRUY2RjI2IC8qIEZvbnRHbHlwaHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBNTYwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRHbHlw
aHMuY3BwICovOyB9OwogCQlCMkMzREE2ODBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udEdseXBocy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBNTcw
RDAwNkNENjAwRUY2RjI2IC8qIEZvbnRHbHlwaHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTIwODYsOCArMTIwODYsOCBAQAogCQlCMkMzREE1
MDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEZvbnRDYXNjYWRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUIyQzNEQTUxMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FjaGUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRDYWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUIyQzNEQTUyMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FjaGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRDYWNoZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlCMkMzREE1MzBEMDA2Q0Q2MDBFRjZGMjYgLyogU2ltcGxlRm9udERh
dGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpbXBsZUZvbnRE
YXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjJDM0RBNTQwRDAwNkNENjAw
RUY2RjI2IC8qIFNpbXBsZUZvbnREYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTaW1wbGVGb250RGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCMkMz
REE1MzBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRm9udC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUIy
QzNEQTU0MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBGb250Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQzNEQTU1
MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250RGVzY3JpcHRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEZvbnREZXNjcmlwdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlCMkMzREE1NjBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udEdseXBocy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udEdseXBocy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQzNEQTU3MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250R2x5
cGhzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb250R2x5cGhzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMDU2Myw4ICsyMDU2Myw4IEBACiAJCQkJMzcx
RjRGRkEwRDI1RTdGMzAwRUNFMEQ1IC8qIEZvbnRSYW5nZXMuaCAqLywKIAkJCQkwRjNERDQ0RDEy
RjVFQTFCMDAwRDkxOTAgLyogU2hhZG93Qmx1ci5jcHAgKi8sCiAJCQkJMEYzREQ0NEUxMkY1RUEx
QjAwMEQ5MTkwIC8qIFNoYWRvd0JsdXIuaCAqLywKLQkJCQlCMkMzREE1MzBEMDA2Q0Q2MDBFRjZG
MjYgLyogU2ltcGxlRm9udERhdGEuY3BwICovLAotCQkJCUIyQzNEQTU0MEQwMDZDRDYwMEVGNkYy
NiAvKiBTaW1wbGVGb250RGF0YS5oICovLAorCQkJCUIyQzNEQTUzMEQwMDZDRDYwMEVGNkYyNiAv
KiBGb250LmNwcCAqLywKKwkJCQlCMkMzREE1NDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5oICov
LAogCQkJCUNENjQxRUIyMTgxOEY1RUQwMEVFNEM0MSAvKiBTb3VyY2VCdWZmZXJQcml2YXRlLmgg
Ki8sCiAJCQkJQ0RDOEI1QUMxODA0QUU1RDAwMTZFNjg1IC8qIFNvdXJjZUJ1ZmZlclByaXZhdGVD
bGllbnQuaCAqLywKIAkJCQlCMjM1NDBGMDBEMDA3ODJFMDAyMzgyRkEgLyogU3RyaW5nVHJ1bmNh
dG9yLmNwcCAqLywKQEAgLTI2MDIyLDcgKzI2MDIyLDcgQEAKIAkJCQkxQTRBOTU0RTBCNEVEQ0NC
MDAyRDhDM0MgLyogU2hhcmVkQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0IxRjAyRjEz
QjAyNUQyMDBGNTEwM0YgLyogU2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTkzMzA5RUEzMDk5RUI3OEMwMDU2RTU4MSAvKiBTaGFyZWRUaW1lci5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJQjJDM0RBNjUwRDAwNkNENjAwRUY2RjI2IC8qIFNpbXBsZUZvbnREYXRhLmgg
aW4gSGVhZGVycyAqLywKKwkJCQlCMkMzREE2NTBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRTQ4OTQ0QTMxODBCNTdEODAwRjE2NUQ4IC8qIFNpbXBsZUxpbmVM
YXlvdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0RTlCMTFEMTgxNDU2OUMwMDNBQ0NERiAvKiBT
aW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNEU5QjExOTE4
MTA5MTZGMDAzQUNDREYgLyogU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmggaW4gSGVhZGVycyAq
LywKQEAgLTI5NDU0LDcgKzI5NDU0LDcgQEAKIAkJCQkxQTRBOTU1MjBCNEVEQ0ZGMDAyRDhDM0Mg
LyogU2hhcmVkQnVmZmVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRTQ1MzkwNDYwRUFGRDYz
NzAwMzY5NUM4IC8qIFNoYXJlZFRpbWVySU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlF
QTIwOTlFQjc4QzAwNTZFNTgxIC8qIFNoYXJlZFRpbWVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCi0J
CQkJQjJDM0RBNjQwRDAwNkNENjAwRUY2RjI2IC8qIFNpbXBsZUZvbnREYXRhLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCUIyQzNEQTY0MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTE2M0U4OEY3MTE4QTM5RDIwMEVEOTIzMSAvKiBTaW1wbGVGb250RGF0YUNv
cmVUZXh0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTM3RTY1OTUwMTYzQjEwQzIwMEVCNDU3NCAv
KiBTaW1wbGVGb250RGF0YUlPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUIyQUZGQzdGMEQwMEE1
QzEwMDMwMDc0RCAvKiBTaW1wbGVGb250RGF0YU1hYy5tbSBpbiBTb3VyY2VzICovLApJbmRleDog
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXJJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9p
b3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0JKHJldmlzaW9uIDE3ODg1NykK
KysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVySU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNzU4LDcgKzE3NTgsNyBAQCBzdGF0
aWMgdm9pZCBBWEF0dHJpYnV0ZVN0cmluZ1NldFN0eWxlKE5TCiAgICAgUmVuZGVyU3R5bGUmIHN0
eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7CiAgICAgCiAgICAgLy8gc2V0IGJhc2ljIGZvbnQgaW5m
bwotICAgIEFYQXR0cmlidXRlU3RyaW5nU2V0Rm9udChhdHRyU3RyaW5nLCBzdHlsZS5mb250Q2Fz
Y2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmdldENURm9udCgpLCByYW5nZSk7CisgICAgQVhBdHRy
aWJ1dGVTdHJpbmdTZXRGb250KGF0dHJTdHJpbmcsIHN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFy
eUZvbnQoKS5nZXRDVEZvbnQoKSwgcmFuZ2UpOwogICAgICAgICAgICAgICAgIAogICAgIGludCBk
ZWNvciA9IHN0eWxlLnRleHREZWNvcmF0aW9uc0luRWZmZWN0KCk7CiAgICAgaWYgKChkZWNvciAm
IChUZXh0RGVjb3JhdGlvblVuZGVybGluZSB8IFRleHREZWNvcmF0aW9uTGluZVRocm91Z2gpKSAh
PSAwKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlckJhc2UubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlLm1tCShy
ZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYg
KzQ2LDcgQEAKICNpbXBvcnQgIkNocm9tZUNsaWVudC5oIgogI2ltcG9ydCAiQ29sb3JNYWMuaCIK
ICNpbXBvcnQgIkNvbnRleHRNZW51Q29udHJvbGxlci5oIgorI2ltcG9ydCAiRm9udC5oIgogI2lt
cG9ydCAiRm9udENhc2NhZGUuaCIKICNpbXBvcnQgIkZyYW1lLmgiCiAjaW1wb3J0ICJGcmFtZUxv
YWRlckNsaWVudC5oIgpAQCAtNjMsNyArNjQsNiBAQAogI2ltcG9ydCAiUmVuZGVyVmlldy5oIgog
I2ltcG9ydCAiUmVuZGVyV2lkZ2V0LmgiCiAjaW1wb3J0ICJTY3JvbGxWaWV3LmgiCi0jaW1wb3J0
ICJTaW1wbGVGb250RGF0YS5oIgogI2ltcG9ydCAiVGV4dENoZWNrZXJDbGllbnQuaCIKICNpbXBv
cnQgIlRleHRDaGVja2luZ0hlbHBlci5oIgogI2ltcG9ydCAiVmlzaWJsZVVuaXRzLmgiCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQkocmV2aXNpb24gMTc4ODU3
KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbXBv
cnQgIkNvbG9yTWFjLmgiCiAjaW1wb3J0ICJDb250ZXh0TWVudUNvbnRyb2xsZXIuaCIKICNpbXBv
cnQgIkVkaXRvci5oIgorI2ltcG9ydCAiRm9udC5oIgogI2ltcG9ydCAiRm9udENhc2NhZGUuaCIK
ICNpbXBvcnQgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW1wb3J0ICJGcmFtZVNlbGVjdGlvbi5o
IgpAQCAtNjQsNyArNjUsNiBAQAogI2ltcG9ydCAiUmVuZGVyVmlldy5oIgogI2ltcG9ydCAiUmVu
ZGVyV2lkZ2V0LmgiCiAjaW1wb3J0ICJTY3JvbGxWaWV3LmgiCi0jaW1wb3J0ICJTaW1wbGVGb250
RGF0YS5oIgogI2ltcG9ydCAiVGV4dENoZWNrZXJDbGllbnQuaCIKICNpbXBvcnQgIlRleHRDaGVj
a2luZ0hlbHBlci5oIgogI2ltcG9ydCAiVGV4dEl0ZXJhdG9yLmgiCkBAIC04NDgsNyArODQ4LDcg
QEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVTdHJpbmdTZXRTdHlsZShOUwogICAgIGNvbnN0IFJl
bmRlclN0eWxlJiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwogICAgIAogICAgIC8vIHNldCBi
YXNpYyBmb250IGluZm8KLSAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldEZvbnQoYXR0clN0cmluZywg
TlNBY2Nlc3NpYmlsaXR5Rm9udFRleHRBdHRyaWJ1dGUsIHN0eWxlLmZvbnRDYXNjYWRlKCkucHJp
bWFyeUZvbnREYXRhKCkuZ2V0TlNGb250KCksIHJhbmdlKTsKKyAgICBBWEF0dHJpYnV0ZVN0cmlu
Z1NldEZvbnQoYXR0clN0cmluZywgTlNBY2Nlc3NpYmlsaXR5Rm9udFRleHRBdHRyaWJ1dGUsIHN0
eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKS5nZXROU0ZvbnQoKSwgcmFuZ2UpOwogICAg
IAogICAgIC8vIHNldCBiYXNpYyBjb2xvcnMKICAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldENvbG9y
KGF0dHJTdHJpbmcsIE5TQWNjZXNzaWJpbGl0eUZvcmVncm91bmRDb2xvclRleHRBdHRyaWJ1dGUs
IG5zQ29sb3Ioc3R5bGUudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpKSwg
cmFuZ2UpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0JKHJldmlzaW9uIDE3
ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC02NjksNyArNjY5LDcgQEAgLSAoTlNGb250ICopX2ZvbnQKICAgICBhdXRvIHJlbmRl
cmVyID0gY29yZShzZWxmKS0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAg
ICByZXR1cm4gbmlsOwotICAgIHJldHVybiByZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgp
LnByaW1hcnlGb250RGF0YSgpLmdldE5TRm9udCgpOworICAgIHJldHVybiByZW5kZXJlci0+c3R5
bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCkuZ2V0TlNGb250KCk7CiB9CiAjZWxzZQog
LSAoQ1RGb250UmVmKV9mb250CkBAIC02NzcsNyArNjc3LDcgQEAgLSAoQ1RGb250UmVmKV9mb250
CiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNvcmUoc2VsZiktPnJlbmRlcmVyKCk7CiAg
ICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4gcmVuZGVy
ZXItPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXRDVEZvbnQoKTsK
KyAgICByZXR1cm4gcmVuZGVyZXItPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgp
LmdldENURm9udCgpOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NG
b250RmFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNl
LmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTAgKzMwLDEwIEBACiAjaW5jbHVkZSAiQ1NTRm9u
dFNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ1NTU2VnbWVudGVkRm9udEZhY2UuaCIKICNpbmNsdWRl
ICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGb250RGVzY3JpcHRp
b24uaCIKICNpbmNsdWRlICJGb250TG9hZGVyLmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRG
ZWF0dXJlcy5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtMTA4LDcgKzEwOCw3IEBAIHZvaWQgQ1NTRm9udEZhY2U6OmZvbnRMb2FkZWQo
Q1NTRm9udEZhY2UKICNlbmRpZgogfQogCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBDU1NG
b250RmFjZTo6Z2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24sIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpCitSZWZQdHI8Rm9u
dD4gQ1NTRm9udEZhY2U6OmZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24sIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpCiB7CiAgICAgbV9h
Y3RpdmVTb3VyY2UgPSAwOwogICAgIGlmICghaXNWYWxpZCgpKQpAQCAtMTI0LDcgKzEyNCw3IEBA
IFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IENTU0ZvbnRGYWNlOjoKIAogICAgIHNpemVfdCBz
aXplID0gbV9zb3VyY2VzLnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7
ICsraSkgewotICAgICAgICBpZiAoUmVmUHRyPFNpbXBsZUZvbnREYXRhPiByZXN1bHQgPSBtX3Nv
dXJjZXNbaV0tPmdldEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgc3ludGhldGljQm9sZCwgc3lu
dGhldGljSXRhbGljLCBmb250U2VsZWN0b3IpKSB7CisgICAgICAgIGlmIChSZWZQdHI8Rm9udD4g
cmVzdWx0ID0gbV9zb3VyY2VzW2ldLT5mb250KGZvbnREZXNjcmlwdGlvbiwgc3ludGhldGljQm9s
ZCwgc3ludGhldGljSXRhbGljLCBmb250U2VsZWN0b3IpKSB7CiAgICAgICAgICAgICBtX2FjdGl2
ZVNvdXJjZSA9IG1fc291cmNlc1tpXS5nZXQoKTsKICNpZiBFTkFCTEUoRk9OVF9MT0FEX0VWRU5U
UykKICAgICAgICAgICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLmZvbnRMb2FkRXZlbnRzRW5hYmxlZCgpICYmIG1fbG9hZFN0YXRlID09IExvYWRpbmcgJiYg
bV9zb3VyY2VzW2ldLT5pc0xvYWRlZCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
Rm9udEZhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2Uu
aAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBDU1NTZWdtZW50ZWRGb250RmFjZTsKIGNsYXNzIEZvbnREZXNjcmlwdGlvbjsKLWNsYXNz
IFNpbXBsZUZvbnREYXRhOworY2xhc3MgRm9udDsKIAogY2xhc3MgQ1NTRm9udEZhY2UgOiBwdWJs
aWMgUmVmQ291bnRlZDxDU1NGb250RmFjZT4gewogcHVibGljOgpAQCAtNjUsNyArNjUsNyBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIGZvbnRMb2FkZWQoQ1NTRm9udEZhY2VTb3VyY2UqKTsKIAotICAg
IFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IGdldEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpOworICAgIFJl
ZlB0cjxGb250PiBmb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGJvb2wgc3ludGhldGljQm9s
ZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpOwogCiAgICAgc3RydWN0IFVuaWNvZGVSYW5nZSB7CiAg
ICAgICAgIFVuaWNvZGVSYW5nZShVQ2hhcjMyIGZyb20sIFVDaGFyMzIgdG8pCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5jcHAJKHJldmlzaW9uIDE3ODg1NykKKysr
IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDkgKzMyLDkgQEAKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgogI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRWxlbWVudEl0ZXJhdG9yLmgiCisjaW5jbHVk
ZSAiRm9udC5oIgogI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgogI2luY2x1ZGUgIkZvbnREZXNjcmlw
dGlvbi5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAKICNpZiBFTkFCTEUoU1ZHX09U
Rl9DT05WRVJURVIpCiAjaW5jbHVkZSAiRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oIgpAQCAtNzQs
MTAgKzc0LDEwIEBAIENTU0ZvbnRGYWNlU291cmNlOjp+Q1NTRm9udEZhY2VTb3VyY2UoKQogCiB2
b2lkIENTU0ZvbnRGYWNlU291cmNlOjpwcnVuZVRhYmxlKCkKIHsKLSAgICBpZiAobV9mb250RGF0
YVRhYmxlLmlzRW1wdHkoKSkKKyAgICBpZiAobV9mb250VGFibGUuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBtX2ZvbnREYXRhVGFibGUuY2xlYXIoKTsKKyAgICBtX2ZvbnRUYWJs
ZS5jbGVhcigpOwogfQogCiBib29sIENTU0ZvbnRGYWNlU291cmNlOjppc0xvYWRlZCgpIGNvbnN0
CkBAIC0xMDEsNyArMTAxLDcgQEAgdm9pZCBDU1NGb250RmFjZVNvdXJjZTo6Zm9udExvYWRlZChD
YWNoZQogICAgICAgICBtX2ZhY2UtPmZvbnRMb2FkZWQodGhpcyk7CiB9CiAKLVBhc3NSZWZQdHI8
U2ltcGxlRm9udERhdGE+IENTU0ZvbnRGYWNlU291cmNlOjpnZXRGb250RGF0YShjb25zdCBGb250
RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5
bnRoZXRpY0l0YWxpYywgQ1NTRm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IpCitSZWZQdHI8Rm9u
dD4gQ1NTRm9udEZhY2VTb3VyY2U6OmZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVz
Y3JpcHRpb24sIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMsIENTU0Zv
bnRTZWxlY3RvciogZm9udFNlbGVjdG9yKQogewogICAgIC8vIElmIHRoZSBmb250IGhhc24ndCBs
b2FkZWQgb3IgYW4gZXJyb3Igb2NjdXJyZWQsIHRoZW4gd2UndmUgZ290IG5vdGhpbmcuCiAgICAg
aWYgKCFpc1ZhbGlkKCkpCkBAIC0xMTIsMTggKzExMiwxNyBAQCBQYXNzUmVmUHRyPFNpbXBsZUZv
bnREYXRhPiBDU1NGb250RmFjZVNvCiAgICAgICAgICAgICAmJiAhbV9zdmdGb250RmFjZUVsZW1l
bnQKICNlbmRpZgogICAgICkgewotICAgICAgICAvLyBXZSdyZSBsb2NhbC4gSnVzdCByZXR1cm4g
YSBTaW1wbGVGb250RGF0YSBmcm9tIHRoZSBub3JtYWwgY2FjaGUuCisgICAgICAgIC8vIFdlJ3Jl
IGxvY2FsLiBKdXN0IHJldHVybiBhIEZvbnQgZnJvbSB0aGUgbm9ybWFsIGNhY2hlLgogICAgICAg
ICAvLyBXZSBkb24ndCB3YW50IHRvIGNoZWNrIGFsdGVybmF0ZSBmb250IGZhbWlseSBuYW1lcyBo
ZXJlLCBzbyBwYXNzIHRydWUgYXMgdGhlIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSBwYXJhbWV0ZXIu
CiAgICAgICAgIHJldHVybiBmb250Q2FjaGUoKS5mb250Rm9yRmFtaWx5KGZvbnREZXNjcmlwdGlv
biwgbV9zdHJpbmcsIHRydWUpOwogICAgIH0KIAotICAgIC8vIFNlZSBpZiB3ZSBoYXZlIGEgbWFw
cGluZyBpbiBvdXIgRm9udERhdGEgY2FjaGUuCiAgICAgdW5zaWduZWQgaGFzaEtleSA9IChmb250
RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSArIDEpIDw8IDUgfCBmb250RGVzY3JpcHRp
b24ud2lkdGhWYXJpYW50KCkgPDwgMwogICAgICAgICAgICAgICAgICAgICAgICB8IChmb250RGVz
Y3JpcHRpb24ub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCA/IDQgOiAwKSB8IChzeW50aGV0aWNC
b2xkID8gMiA6IDApIHwgKHN5bnRoZXRpY0l0YWxpYyA/IDEgOiAwKTsKIAotICAgIFJlZlB0cjxT
aW1wbGVGb250RGF0YT4gZm9udERhdGEgPSBtX2ZvbnREYXRhVGFibGUuYWRkKGhhc2hLZXksIG51
bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKLSAgICBpZiAoZm9udERhdGEpCi0gICAgICAgIHJldHVy
biBmb250RGF0YS5yZWxlYXNlKCk7CisgICAgUmVmUHRyPEZvbnQ+IGZvbnQgPSBtX2ZvbnRUYWJs
ZS5hZGQoaGFzaEtleSwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOworICAgIGlmIChmb250KQor
ICAgICAgICByZXR1cm4gZm9udC5yZWxlYXNlKCk7CiAKICAgICAvLyBJZiB3ZSBhcmUgc3RpbGwg
bG9hZGluZywgdGhlbiB3ZSBsZXQgdGhlIHN5c3RlbSBwaWNrIGEgZm9udC4KICAgICBpZiAoaXNM
b2FkZWQoKSkgewpAQCAtMTM2LDcgKzEzNSw3IEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+
IENTU0ZvbnRGYWNlU28KICAgICAgICAgICAgIGlmICghbV9mb250LT5lbnN1cmVDdXN0b21Gb250
RGF0YShoYXNFeHRlcm5hbFNWR0ZvbnQsIG1fc3RyaW5nKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAotICAgICAgICAgICAgZm9udERhdGEgPSBtX2ZvbnQtPmdldEZvbnREYXRh
KGZvbnREZXNjcmlwdGlvbiwgbV9zdHJpbmcsIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxp
YywgaGFzRXh0ZXJuYWxTVkdGb250KTsKKyAgICAgICAgICAgIGZvbnQgPSBtX2ZvbnQtPmNyZWF0
ZUZvbnQoZm9udERlc2NyaXB0aW9uLCBtX3N0cmluZywgc3ludGhldGljQm9sZCwgc3ludGhldGlj
SXRhbGljLCBoYXNFeHRlcm5hbFNWR0ZvbnQpOwogICAgICAgICB9IGVsc2UgewogI2lmIEVOQUJM
RShTVkdfRk9OVFMpCiAgICAgICAgICAgICAvLyBJbi1Eb2N1bWVudCBTVkcgRm9udHMKQEAgLTE1
Miw5ICsxNTEsOSBAQCBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBDU1NGb250RmFjZVNvCiAg
ICAgICAgICAgICAgICAgaWYgKCFtX2dlbmVyYXRlZE9URkJ1ZmZlcikKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEZv
bnRDdXN0b21QbGF0Zm9ybURhdGE+IGN1c3RvbVBsYXRmb3JtRGF0YSA9IGNyZWF0ZUZvbnRDdXN0
b21QbGF0Zm9ybURhdGEoKm1fZ2VuZXJhdGVkT1RGQnVmZmVyKTsKLSAgICAgICAgICAgICAgICBm
b250RGF0YSA9IFNpbXBsZUZvbnREYXRhOjpjcmVhdGUoY3VzdG9tUGxhdGZvcm1EYXRhLT5mb250
UGxhdGZvcm1EYXRhKHN0YXRpY19jYXN0PGludD4oZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4
ZWxTaXplKCkpLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMsIGZvbnREZXNjcmlwdGlv
bi5vcmllbnRhdGlvbigpLCBmb250RGVzY3JpcHRpb24ud2lkdGhWYXJpYW50KCksIGZvbnREZXNj
cmlwdGlvbi5yZW5kZXJpbmdNb2RlKCkpLCB0cnVlLCBmYWxzZSk7CisgICAgICAgICAgICAgICAg
Zm9udCA9IEZvbnQ6OmNyZWF0ZShjdXN0b21QbGF0Zm9ybURhdGEtPmZvbnRQbGF0Zm9ybURhdGEo
c3RhdGljX2Nhc3Q8aW50Pihmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSksIHN5
bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYywgZm9udERlc2NyaXB0aW9uLm9yaWVudGF0aW9u
KCksIGZvbnREZXNjcmlwdGlvbi53aWR0aFZhcmlhbnQoKSwgZm9udERlc2NyaXB0aW9uLnJlbmRl
cmluZ01vZGUoKSksIHRydWUsIGZhbHNlKTsKICNlbHNlCi0gICAgICAgICAgICAgICAgZm9udERh
dGEgPSBTaW1wbGVGb250RGF0YTo6Y3JlYXRlKHN0ZDo6bWFrZV91bmlxdWU8U1ZHRm9udERhdGE+
KG1fc3ZnRm9udEZhY2VFbGVtZW50LmdldCgpKSwgZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4
ZWxTaXplKCksIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYyk7CisgICAgICAgICAgICAg
ICAgZm9udCA9IEZvbnQ6OmNyZWF0ZShzdGQ6Om1ha2VfdW5pcXVlPFNWR0ZvbnREYXRhPihtX3N2
Z0ZvbnRGYWNlRWxlbWVudC5nZXQoKSksIGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6
ZSgpLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMpOwogI2VuZGlmCiAgICAgICAgICAg
ICB9CiAjZW5kaWYKQEAgLTE2NCwxMiArMTYzLDEyIEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERh
dGE+IENTU0ZvbnRGYWNlU28KICAgICAgICAgLy8gYW5kIHRoZSBsb2FkZXIgbWF5IGludm9rZSBh
cmJpdHJhcnkgZGVsZWdhdGUgb3IgZXZlbnQgaGFuZGxlciBjb2RlLgogICAgICAgICBmb250U2Vs
ZWN0b3ItPmJlZ2luTG9hZGluZ0ZvbnRTb29uKG1fZm9udC5nZXQoKSk7CiAKLSAgICAgICAgUmVm
PFNpbXBsZUZvbnREYXRhPiBwbGFjZWhvbGRlckZvbnQgPSBmb250Q2FjaGUoKS5sYXN0UmVzb3J0
RmFsbGJhY2tGb250KGZvbnREZXNjcmlwdGlvbik7Ci0gICAgICAgIFJlZjxTaW1wbGVGb250RGF0
YT4gcGxhY2Vob2xkZXJGb250Q29weUluTG9hZGluZ1N0YXRlID0gU2ltcGxlRm9udERhdGE6OmNy
ZWF0ZShwbGFjZWhvbGRlckZvbnQtPnBsYXRmb3JtRGF0YSgpLCB0cnVlLCB0cnVlKTsKKyAgICAg
ICAgUmVmPEZvbnQ+IHBsYWNlaG9sZGVyRm9udCA9IGZvbnRDYWNoZSgpLmxhc3RSZXNvcnRGYWxs
YmFja0ZvbnQoZm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgUmVmPEZvbnQ+IHBsYWNlaG9sZGVy
Rm9udENvcHlJbkxvYWRpbmdTdGF0ZSA9IEZvbnQ6OmNyZWF0ZShwbGFjZWhvbGRlckZvbnQtPnBs
YXRmb3JtRGF0YSgpLCB0cnVlLCB0cnVlKTsKICAgICAgICAgcmV0dXJuIFdURjo6bW92ZShwbGFj
ZWhvbGRlckZvbnRDb3B5SW5Mb2FkaW5nU3RhdGUpOwogICAgIH0KIAotICAgIHJldHVybiBmb250
RGF0YS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIGZvbnQucmVsZWFzZSgpOwogfQogCiAjaWYgRU5B
QkxFKEZPTlRfTE9BRF9FVkVOVFMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZh
Y2VTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VT
b3VyY2UuaAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRG
YWNlU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDggKzQyLDggQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogY2xhc3MgQ2FjaGVkRm9udDsKIGNsYXNzIENTU0ZvbnRGYWNlOwogY2xhc3MgQ1NT
Rm9udFNlbGVjdG9yOworY2xhc3MgRm9udDsKIGNsYXNzIEZvbnREZXNjcmlwdGlvbjsKLWNsYXNz
IFNpbXBsZUZvbnREYXRhOwogCiBjbGFzcyBDU1NGb250RmFjZVNvdXJjZSBmaW5hbCA6IHB1Ymxp
YyBDYWNoZWRGb250Q2xpZW50IHsKIHB1YmxpYzoKQEAgLTU5LDcgKzU5LDcgQEAgcHVibGljOgog
CiAgICAgdmlydHVhbCB2b2lkIGZvbnRMb2FkZWQoQ2FjaGVkRm9udCopIG92ZXJyaWRlOwogCi0g
ICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gZ2V0Rm9udERhdGEoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYywgQ1NTRm9u
dFNlbGVjdG9yKik7CisgICAgUmVmUHRyPEZvbnQ+IGZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9u
JiwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYywgQ1NTRm9udFNlbGVj
dG9yKik7CiAKICAgICB2b2lkIHBydW5lVGFibGUoKTsKIApAQCAtODEsNyArODEsNyBAQCBwcml2
YXRlOgogICAgIEF0b21pY1N0cmluZyBtX3N0cmluZzsgLy8gVVJJIGZvciByZW1vdGUsIGJ1aWx0
LWluIGZvbnQgbmFtZSBmb3IgbG9jYWwuCiAgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVk
Rm9udD4gbV9mb250OyAvLyBGb3IgcmVtb3RlIGZvbnRzLCBhIHBvaW50ZXIgdG8gb3VyIGNhY2hl
ZCByZXNvdXJjZS4KICAgICBDU1NGb250RmFjZSogbV9mYWNlOyAvLyBPdXIgb3duaW5nIGZvbnQg
ZmFjZS4KLSAgICBIYXNoTWFwPHVuc2lnbmVkLCBSZWZQdHI8U2ltcGxlRm9udERhdGE+PiBtX2Zv
bnREYXRhVGFibGU7IC8vIFRoZSBoYXNoIGtleSBpcyBjb21wb3NlZCBvZiBzaXplIHN5bnRoZXRp
YyBzdHlsZXMuCisgICAgSGFzaE1hcDx1bnNpZ25lZCwgUmVmUHRyPEZvbnQ+PiBtX2ZvbnRUYWJs
ZTsgLy8gVGhlIGhhc2gga2V5IGlzIGNvbXBvc2VkIG9mIHNpemUgc3ludGhldGljIHN0eWxlcy4K
IAogI2lmIEVOQUJMRShTVkdfT1RGX0NPTlZFUlRFUikKICAgICBSZWZQdHI8U2hhcmVkQnVmZmVy
PiBtX2dlbmVyYXRlZE9URkJ1ZmZlcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250
U2VsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2Vs
ZWN0b3IuY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9u
dFNlbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTMgKzQwLDEzIEBACiAjaW5jbHVk
ZSAiQ1NTVmFsdWVMaXN0LmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKICNp
bmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGb250Q2Fj
aGUuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5j
bHVkZSAiU1ZHRm9udEZhY2VFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNs
dWRlICJTZXR0aW5ncy5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5jbHVkZSAi
U3R5bGVQcm9wZXJ0aWVzLmgiCiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUg
IlN0eWxlUnVsZS5oIgpAQCAtNjEyLDcgKzYxMiw3IEBAIGJvb2wgQ1NTRm9udFNlbGVjdG9yOjpy
ZXNvbHZlc0ZhbWlseUZvcigKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXNpemVfdCBDU1NGb250
U2VsZWN0b3I6OmZhbGxiYWNrRm9udERhdGFDb3VudCgpCitzaXplX3QgQ1NTRm9udFNlbGVjdG9y
OjpmYWxsYmFja0ZvbnRDb3VudCgpCiB7CiAgICAgaWYgKCFtX2RvY3VtZW50KQogICAgICAgICBy
ZXR1cm4gMDsKQEAgLTYyMyw3ICs2MjMsNyBAQCBzaXplX3QgQ1NTRm9udFNlbGVjdG9yOjpmYWxs
YmFja0ZvbnREYXRhCiAgICAgcmV0dXJuIDA7CiB9CiAKLVBhc3NSZWZQdHI8U2ltcGxlRm9udERh
dGE+IENTU0ZvbnRTZWxlY3Rvcjo6ZmFsbGJhY2tGb250RGF0YUF0KGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZm9udERlc2NyaXB0aW9uLCBzaXplX3QgaW5kZXgpCitQYXNzUmVmUHRyPEZvbnQ+IENT
U0ZvbnRTZWxlY3Rvcjo6ZmFsbGJhY2tGb250QXQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHRpb24sIHNpemVfdCBpbmRleCkKIHsKICAgICBBU1NFUlRfVU5VU0VEKGluZGV4LCAh
aW5kZXgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5oCShyZXZpc2lv
biAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI3LDggKzI3LDggQEAKICNkZWZpbmUgQ1NTRm9udFNlbGVjdG9yX2gKIAog
I2luY2x1ZGUgIkNhY2hlZFJlc291cmNlSGFuZGxlLmgiCisjaW5jbHVkZSAiRm9udC5oIgogI2lu
Y2x1ZGUgIkZvbnRTZWxlY3Rvci5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5j
bHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KQEAgLTU5LDggKzU5LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdW5zaWduZWQgdW5pcXVl
SWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3VuaXF1ZUlkOyB9CiAKICAgICB2aXJ0dWFs
IEZvbnRSYW5nZXMgZm9udFJhbmdlc0ZvckZhbWlseShjb25zdCBGb250RGVzY3JpcHRpb24mLCBj
b25zdCBBdG9taWNTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHNpemVfdCBmYWxsYmFj
a0ZvbnREYXRhQ291bnQoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U2ltcGxl
Rm9udERhdGE+IGZhbGxiYWNrRm9udERhdGFBdChjb25zdCBGb250RGVzY3JpcHRpb24mLCBzaXpl
X3QpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgc2l6ZV90IGZhbGxiYWNrRm9udENvdW50KCkgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEZvbnQ+IGZhbGxiYWNrRm9udEF0KGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYsIHNpemVfdCkgb3ZlcnJpZGU7CiAgICAgQ1NTU2VnbWVudGVkRm9u
dEZhY2UqIGdldEZvbnRGYWNlKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0
cmluZyYgZmFtaWx5KTsKIAogICAgIHZpcnR1YWwgYm9vbCByZXNvbHZlc0ZhbWlseUZvcihjb25z
dCBGb250RGVzY3JpcHRpb24mKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291
cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzAsOSArMzAsOSBAQAogI2luY2x1ZGUgIkNTU0ZvbnRGYWNlU291cmNlLmgiCiAjaW5jbHVk
ZSAiQ1NTRm9udFNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJG
b250LmgiCiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiUnVudGltZUVu
YWJsZWRGZWF0dXJlcy5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApAQCAtOTAsMjEgKzkwLDIxIEBAIHZvaWQgQ1NTU2VnbWVudGVkRm9udEZh
Y2U6OmFwcGVuZEZvbnRGYWMKICAgICBtX2ZvbnRGYWNlcy5hcHBlbmQoZm9udEZhY2UpOwogfQog
Ci1zdGF0aWMgdm9pZCBhcHBlbmRGb250RGF0YVdpdGhJbnZhbGlkVW5pY29kZVJhbmdlSWZMb2Fk
aW5nKEZvbnRSYW5nZXMmIHJhbmdlcywgUmVmPFNpbXBsZUZvbnREYXRhPiYmIGZvbnREYXRhLCBj
b25zdCBWZWN0b3I8Q1NTRm9udEZhY2U6OlVuaWNvZGVSYW5nZT4mIHVuaWNvZGVSYW5nZXMpCitz
dGF0aWMgdm9pZCBhcHBlbmRGb250V2l0aEludmFsaWRVbmljb2RlUmFuZ2VJZkxvYWRpbmcoRm9u
dFJhbmdlcyYgcmFuZ2VzLCBSZWY8Rm9udD4mJiBmb250LCBjb25zdCBWZWN0b3I8Q1NTRm9udEZh
Y2U6OlVuaWNvZGVSYW5nZT4mIHVuaWNvZGVSYW5nZXMpCiB7Ci0gICAgaWYgKGZvbnREYXRhLT5p
c0xvYWRpbmcoKSkgewotICAgICAgICByYW5nZXMuYXBwZW5kUmFuZ2UoRm9udFJhbmdlczo6UmFu
Z2UoMCwgMCwgV1RGOjptb3ZlKGZvbnREYXRhKSkpOworICAgIGlmIChmb250LT5pc0xvYWRpbmco
KSkgeworICAgICAgICByYW5nZXMuYXBwZW5kUmFuZ2UoRm9udFJhbmdlczo6UmFuZ2UoMCwgMCwg
V1RGOjptb3ZlKGZvbnQpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICB1bnNpZ25l
ZCBudW1SYW5nZXMgPSB1bmljb2RlUmFuZ2VzLnNpemUoKTsKICAgICBpZiAoIW51bVJhbmdlcykg
ewotICAgICAgICByYW5nZXMuYXBwZW5kUmFuZ2UoRm9udFJhbmdlczo6UmFuZ2UoMCwgMHg3RkZG
RkZGRiwgV1RGOjptb3ZlKGZvbnREYXRhKSkpOworICAgICAgICByYW5nZXMuYXBwZW5kUmFuZ2Uo
Rm9udFJhbmdlczo6UmFuZ2UoMCwgMHg3RkZGRkZGRiwgV1RGOjptb3ZlKGZvbnQpKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgbnVtUmFu
Z2VzOyArK2opCi0gICAgICAgIHJhbmdlcy5hcHBlbmRSYW5nZShGb250UmFuZ2VzOjpSYW5nZSh1
bmljb2RlUmFuZ2VzW2pdLmZyb20oKSwgdW5pY29kZVJhbmdlc1tqXS50bygpLCBmb250RGF0YS5j
b3B5UmVmKCkpKTsKKyAgICAgICAgcmFuZ2VzLmFwcGVuZFJhbmdlKEZvbnRSYW5nZXM6OlJhbmdl
KHVuaWNvZGVSYW5nZXNbal0uZnJvbSgpLCB1bmljb2RlUmFuZ2VzW2pdLnRvKCksIGZvbnQuY29w
eVJlZigpKSk7CiB9CiAKIEZvbnRSYW5nZXMgQ1NTU2VnbWVudGVkRm9udEZhY2U6OmZvbnRSYW5n
ZXMoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pCkBAIC0xMjgsOCArMTI4
LDggQEAgRm9udFJhbmdlcyBDU1NTZWdtZW50ZWRGb250RmFjZTo6Zm9udFJhbgogICAgICAgICAg
ICAgRm9udFRyYWl0c01hc2sgdHJhaXRzTWFzayA9IGZhY2UtPnRyYWl0c01hc2soKTsKICAgICAg
ICAgICAgIGJvb2wgc3ludGhldGljQm9sZCA9ICEodHJhaXRzTWFzayAmIChGb250V2VpZ2h0NjAw
TWFzayB8IEZvbnRXZWlnaHQ3MDBNYXNrIHwgRm9udFdlaWdodDgwME1hc2sgfCBGb250V2VpZ2h0
OTAwTWFzaykpICYmIChkZXNpcmVkVHJhaXRzTWFzayAmIChGb250V2VpZ2h0NjAwTWFzayB8IEZv
bnRXZWlnaHQ3MDBNYXNrIHwgRm9udFdlaWdodDgwME1hc2sgfCBGb250V2VpZ2h0OTAwTWFzaykp
OwogICAgICAgICAgICAgYm9vbCBzeW50aGV0aWNJdGFsaWMgPSAhKHRyYWl0c01hc2sgJiBGb250
U3R5bGVJdGFsaWNNYXNrKSAmJiAoZGVzaXJlZFRyYWl0c01hc2sgJiBGb250U3R5bGVJdGFsaWNN
YXNrKTsKLSAgICAgICAgICAgIGlmIChSZWZQdHI8U2ltcGxlRm9udERhdGE+IGZhY2VGb250RGF0
YSA9IGZhY2UtPmdldEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgc3ludGhldGljQm9sZCwgc3lu
dGhldGljSXRhbGljKSkKLSAgICAgICAgICAgICAgICBhcHBlbmRGb250RGF0YVdpdGhJbnZhbGlk
VW5pY29kZVJhbmdlSWZMb2FkaW5nKGZvbnRSYW5nZXMsIGZhY2VGb250RGF0YS5yZWxlYXNlTm9u
TnVsbCgpLCBmYWNlLT5yYW5nZXMoKSk7CisgICAgICAgICAgICBpZiAoUmVmUHRyPEZvbnQ+IGZh
Y2VGb250ID0gZmFjZS0+Zm9udChmb250RGVzY3JpcHRpb24sIHN5bnRoZXRpY0JvbGQsIHN5bnRo
ZXRpY0l0YWxpYykpCisgICAgICAgICAgICAgICAgYXBwZW5kRm9udFdpdGhJbnZhbGlkVW5pY29k
ZVJhbmdlSWZMb2FkaW5nKGZvbnRSYW5nZXMsIGZhY2VGb250LnJlbGVhc2VOb25OdWxsKCksIGZh
Y2UtPnJhbmdlcygpKTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gZm9udFJhbmdlczsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBA
QCBjbGFzcyBIaXRUZXN0UmVzdWx0OwogY2xhc3MgS2lsbFJpbmc7CiBjbGFzcyBQYXN0ZWJvYXJk
OwogY2xhc3MgU2hhcmVkQnVmZmVyOwotY2xhc3MgU2ltcGxlRm9udERhdGE7CitjbGFzcyBGb250
OwogY2xhc3MgU3BlbGxDaGVja1JlcXVlc3Q7CiBjbGFzcyBTcGVsbENoZWNrZXI7CiBjbGFzcyBT
dHlsZVByb3BlcnRpZXM7CkBAIC00MjIsNyArNDIyLDcgQEAgcHVibGljOgogI2lmIFBMQVRGT1JN
KENPQ09BKQogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZW5kZXJTdHlsZSogc3R5bGVGb3JT
ZWxlY3Rpb25TdGFydChGcmFtZSogLCBOb2RlICombm9kZVRvUmVtb3ZlKTsKICAgICBXRUJDT1JF
X0VYUE9SVCBib29sIGluc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVvdGVkQ29udGVudCgpOwot
ICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250Rm9yU2VsZWN0aW9u
KGJvb2wmKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBGb250KiBmb250Rm9yU2Vs
ZWN0aW9uKGJvb2wmKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBOU0RpY3Rpb25hcnkgKmZv
bnRBdHRyaWJ1dGVzRm9yU2VsZWN0aW9uU3RhcnQoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9S
VCBTdHJpbmcgc3RyaW5nU2VsZWN0aW9uRm9yUGFzdGVib2FyZCgpOwogICAgIFN0cmluZyBzdHJp
bmdTZWxlY3Rpb25Gb3JQYXN0ZWJvYXJkV2l0aEltYWdlQWx0VGV4dCgpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbQkocmV2aXNpb24gMTc4
ODU3KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTE0LDcgKzExMTQsNyBAQCBzdGF0aWMgUGxhdGZvcm1Gb250ICpf
Zm9udChFbGVtZW50JiBlbGVtCiAgICAgYXV0byByZW5kZXJlciA9IGVsZW1lbnQucmVuZGVyZXIo
KTsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiBy
ZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmdldE5TRm9u
dCgpOworICAgIHJldHVybiByZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlG
b250KCkuZ2V0TlNGb250KCk7CiB9CiAjZWxzZQogc3RhdGljIFBsYXRmb3JtRm9udCAqX2ZvbnQo
RWxlbWVudCYgZWxlbWVudCkKQEAgLTExMjIsNyArMTEyMiw3IEBAIHN0YXRpYyBQbGF0Zm9ybUZv
bnQgKl9mb250KEVsZW1lbnQmIGVsZW0KICAgICBhdXRvIHJlbmRlcmVyID0gZWxlbWVudC5yZW5k
ZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgcmV0
dXJuIChQbGF0Zm9ybUZvbnQgKilyZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1h
cnlGb250RGF0YSgpLmdldENURm9udCgpOworICAgIHJldHVybiAoUGxhdGZvcm1Gb250ICopcmVu
ZGVyZXItPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpLmdldENURm9udCgpOwog
fQogI2VuZGlmCiAKQEAgLTI1OTQsMTAgKzI1OTQsMTAgQEAgTlNBdHRyaWJ1dGVkU3RyaW5nICpl
ZGl0aW5nQXR0cmlidXRlZFN0cgogICAgICAgICAgICAgW2F0dHJzLmdldCgpIHNldE9iamVjdDpb
TlNOdW1iZXIgbnVtYmVyV2l0aEludGVnZXI6TlNVbmRlcmxpbmVTdHlsZVNpbmdsZV0gZm9yS2V5
Ok5TVW5kZXJsaW5lU3R5bGVBdHRyaWJ1dGVOYW1lXTsKICAgICAgICAgaWYgKHN0eWxlLnRleHRE
ZWNvcmF0aW9uc0luRWZmZWN0KCkgJiBUZXh0RGVjb3JhdGlvbkxpbmVUaHJvdWdoKQogICAgICAg
ICAgICAgW2F0dHJzLmdldCgpIHNldE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aEludGVnZXI6
TlNVbmRlcmxpbmVTdHlsZVNpbmdsZV0gZm9yS2V5Ok5TU3RyaWtldGhyb3VnaFN0eWxlQXR0cmli
dXRlTmFtZV07Ci0gICAgICAgIGlmIChOU0ZvbnQgKmZvbnQgPSBzdHlsZS5mb250Q2FzY2FkZSgp
LnByaW1hcnlGb250RGF0YSgpLmdldE5TRm9udCgpKQorICAgICAgICBpZiAoTlNGb250ICpmb250
ID0gc3R5bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpLmdldE5TRm9udCgpKQogICAgICAg
ICAgICAgW2F0dHJzLmdldCgpIHNldE9iamVjdDpmb250IGZvcktleTpOU0ZvbnRBdHRyaWJ1dGVO
YW1lXTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgW2F0dHJzLmdldCgpIHNldE9iamVjdDpb
Zm9udE1hbmFnZXIgY29udmVydEZvbnQ6V2ViRGVmYXVsdEZvbnQoKSB0b1NpemU6c3R5bGUuZm9u
dENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5wbGF0Zm9ybURhdGEoKS5zaXplKCldIGZvcktl
eTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKKyAgICAgICAgICAgIFthdHRycy5nZXQoKSBzZXRPYmpl
Y3Q6W2ZvbnRNYW5hZ2VyIGNvbnZlcnRGb250OldlYkRlZmF1bHRGb250KCkgdG9TaXplOnN0eWxl
LmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKS5wbGF0Zm9ybURhdGEoKS5zaXplKCldIGZvcktl
eTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKICAgICAgICAgaWYgKHN0eWxlLnZpc2l0ZWREZXBlbmRl
bnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKS5hbHBoYSgpKQogICAgICAgICAgICAgW2F0dHJzLmdl
dCgpIHNldE9iamVjdDpuc0NvbG9yKHN0eWxlLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9w
ZXJ0eUNvbG9yKSkgZm9yS2V5Ok5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07CiAgICAg
ICAgIGVsc2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0JKHJl
dmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5t
bQkod29ya2luZyBjb3B5KQpAQCAtMjAzLDcgKzIwMyw3IEBAIGJvb2wgRWRpdG9yOjppbnNlcnRQ
YXJhZ3JhcGhTZXBhcmF0b3JJblEKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotY29uc3QgU2ltcGxl
Rm9udERhdGEqIEVkaXRvcjo6Zm9udEZvclNlbGVjdGlvbihib29sJiBoYXNNdWx0aXBsZUZvbnRz
KSBjb25zdAorY29uc3QgRm9udCogRWRpdG9yOjpmb250Rm9yU2VsZWN0aW9uKGJvb2wmIGhhc011
bHRpcGxlRm9udHMpIGNvbnN0CiB7CiAgICAgaGFzTXVsdGlwbGVGb250cyA9IGZhbHNlOwogCkBA
IC0yMTEsOSArMjExLDkgQEAgY29uc3QgU2ltcGxlRm9udERhdGEqIEVkaXRvcjo6Zm9udEZvclNl
bAogICAgICAgICBOb2RlKiBub2RlVG9SZW1vdmU7CiAgICAgICAgIFJlbmRlclN0eWxlKiBzdHls
ZSA9IHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQoJm1fZnJhbWUsIG5vZGVUb1JlbW92ZSk7IC8vIHNl
dHMgbm9kZVRvUmVtb3ZlCiAKLSAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIHJlc3VsdCA9
IG51bGxwdHI7CisgICAgICAgIGNvbnN0IEZvbnQqIHJlc3VsdCA9IG51bGxwdHI7CiAgICAgICAg
IGlmIChzdHlsZSkKLSAgICAgICAgICAgIHJlc3VsdCA9ICZzdHlsZS0+Zm9udENhc2NhZGUoKS5w
cmltYXJ5Rm9udERhdGEoKTsKKyAgICAgICAgICAgIHJlc3VsdCA9ICZzdHlsZS0+Zm9udENhc2Nh
ZGUoKS5wcmltYXJ5Rm9udCgpOwogCiAgICAgICAgIGlmIChub2RlVG9SZW1vdmUpIHsKICAgICAg
ICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7CkBAIC0yMjQsNyArMjI0LDcgQEAgY29uc3QgU2ltcGxl
Rm9udERhdGEqIEVkaXRvcjo6Zm9udEZvclNlbAogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
IH0KIAotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250ID0gMDsKKyAgICBjb25zdCBGb250
KiBmb250ID0gMDsKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gbV9mcmFtZS5zZWxlY3Rpb24o
KS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmIChOb2RlKiBzdGFydE5vZGUgPSBhZGp1c3Rl
ZFNlbGVjdGlvblN0YXJ0Rm9yU3R5bGVDb21wdXRhdGlvbihtX2ZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpKS5kZXByZWNhdGVkTm9kZSgpKSB7CiAgICAgICAgIE5vZGUqIHBhc3RFbmQgPSBy
YW5nZS0+cGFzdExhc3ROb2RlKCk7CkBAIC0yMzUsNyArMjM1LDcgQEAgY29uc3QgU2ltcGxlRm9u
dERhdGEqIEVkaXRvcjo6Zm9udEZvclNlbAogICAgICAgICAgICAgaWYgKCFyZW5kZXJlcikKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBBcmUgdGhlcmUg
YW55IG5vZGUgdHlwZXMgdGhhdCBoYXZlIHJlbmRlcmVycywgYnV0IHRoYXQgd2Ugc2hvdWxkIGJl
IHNraXBwaW5nPwotICAgICAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEmIHByaW1hcnlGb250
ID0gcmVuZGVyZXItPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKTsKKyAg
ICAgICAgICAgIGNvbnN0IEZvbnQmIHByaW1hcnlGb250ID0gcmVuZGVyZXItPnN0eWxlKCkuZm9u
dENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpOwogICAgICAgICAgICAgaWYgKCFmb250KQogICAgICAg
ICAgICAgICAgIGZvbnQgPSAmcHJpbWFyeUZvbnQ7CiAgICAgICAgICAgICBlbHNlIGlmIChmb250
ICE9ICZwcmltYXJ5Rm9udCkgewpAQCAtMjU3LDcgKzI1Nyw3IEBAIE5TRGljdGlvbmFyeSogRWRp
dG9yOjpmb250QXR0cmlidXRlc0ZvclMKIAogICAgIE5TTXV0YWJsZURpY3Rpb25hcnkqIHJlc3Vs
dCA9IFtOU011dGFibGVEaWN0aW9uYXJ5IGRpY3Rpb25hcnldOwogICAgIAotICAgIENURm9udFJl
ZiBmb250ID0gc3R5bGUtPmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0Q1RGb250
KCk7CisgICAgQ1RGb250UmVmIGZvbnQgPSBzdHlsZS0+Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9u
dCgpLmdldENURm9udCgpOwogICAgIGlmIChmb250KQogICAgICAgICBbcmVzdWx0IHNldE9iamVj
dDooaWQpZm9udCBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0JKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTA1
LDcgKzEwNSw3IEBAIGJvb2wgRWRpdG9yOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJblEKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotY29uc3QgU2ltcGxlRm9udERhdGEqIEVkaXRvcjo6Zm9udEZv
clNlbGVjdGlvbihib29sJiBoYXNNdWx0aXBsZUZvbnRzKSBjb25zdAorY29uc3QgRm9udCogRWRp
dG9yOjpmb250Rm9yU2VsZWN0aW9uKGJvb2wmIGhhc011bHRpcGxlRm9udHMpIGNvbnN0CiB7CiAg
ICAgaGFzTXVsdGlwbGVGb250cyA9IGZhbHNlOwogCkBAIC0xMTMsOSArMTEzLDkgQEAgY29uc3Qg
U2ltcGxlRm9udERhdGEqIEVkaXRvcjo6Zm9udEZvclNlbAogICAgICAgICBOb2RlKiBub2RlVG9S
ZW1vdmU7CiAgICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHN0eWxlRm9yU2VsZWN0aW9uU3Rh
cnQoJm1fZnJhbWUsIG5vZGVUb1JlbW92ZSk7IC8vIHNldHMgbm9kZVRvUmVtb3ZlCiAKLSAgICAg
ICAgY29uc3QgU2ltcGxlRm9udERhdGEqIHJlc3VsdCA9IG51bGxwdHI7CisgICAgICAgIGNvbnN0
IEZvbnQqIHJlc3VsdCA9IG51bGxwdHI7CiAgICAgICAgIGlmIChzdHlsZSkKLSAgICAgICAgICAg
IHJlc3VsdCA9ICZzdHlsZS0+Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKTsKKyAgICAg
ICAgICAgIHJlc3VsdCA9ICZzdHlsZS0+Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpOwogCiAg
ICAgICAgIGlmIChub2RlVG9SZW1vdmUpCiAgICAgICAgICAgICBub2RlVG9SZW1vdmUtPnJlbW92
ZShBU1NFUlRfTk9fRVhDRVBUSU9OKTsKQEAgLTEyMyw3ICsxMjMsNyBAQCBjb25zdCBTaW1wbGVG
b250RGF0YSogRWRpdG9yOjpmb250Rm9yU2VsCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
fQogCi0gICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQgPSAwOworICAgIGNvbnN0IEZvbnQq
IGZvbnQgPSAwOwogICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigp
LnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgTm9kZSogc3RhcnROb2RlID0gYWRqdXN0ZWRTZWxl
Y3Rpb25TdGFydEZvclN0eWxlQ29tcHV0YXRpb24obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKSkuZGVwcmVjYXRlZE5vZGUoKTsKICAgICBpZiAocmFuZ2UgJiYgc3RhcnROb2RlKSB7CkBA
IC0xMzUsNyArMTM1LDcgQEAgY29uc3QgU2ltcGxlRm9udERhdGEqIEVkaXRvcjo6Zm9udEZvclNl
bAogICAgICAgICAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIC8vIEZJWE1FOiBBcmUgdGhlcmUgYW55IG5vZGUgdHlwZXMgdGhhdCBoYXZl
IHJlbmRlcmVycywgYnV0IHRoYXQgd2Ugc2hvdWxkIGJlIHNraXBwaW5nPwotICAgICAgICAgICAg
Y29uc3QgU2ltcGxlRm9udERhdGEmIHByaW1hcnlGb250ID0gcmVuZGVyZXItPnN0eWxlKCkuZm9u
dENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKTsKKyAgICAgICAgICAgIGNvbnN0IEZvbnQmIHBy
aW1hcnlGb250ID0gcmVuZGVyZXItPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgp
OwogICAgICAgICAgICAgaWYgKCFmb250KQogICAgICAgICAgICAgICAgIGZvbnQgPSAmcHJpbWFy
eUZvbnQ7CiAgICAgICAgICAgICBlbHNlIGlmIChmb250ICE9ICZwcmltYXJ5Rm9udCkgewpAQCAt
MTYwLDggKzE2MCw4IEBAIE5TRGljdGlvbmFyeSogRWRpdG9yOjpmb250QXR0cmlidXRlc0ZvclMK
ICAgICBpZiAoc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91
bmRDb2xvcikuaXNWYWxpZCgpICYmIHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJv
cGVydHlCYWNrZ3JvdW5kQ29sb3IpLmFscGhhKCkgIT0gMCkKICAgICAgICAgW3Jlc3VsdCBzZXRP
YmplY3Q6bnNDb2xvcihzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFj
a2dyb3VuZENvbG9yKSkgZm9yS2V5Ok5TQmFja2dyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07CiAK
LSAgICBpZiAoc3R5bGUtPmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0TlNGb250
KCkpCi0gICAgICAgIFtyZXN1bHQgc2V0T2JqZWN0OnN0eWxlLT5mb250Q2FzY2FkZSgpLnByaW1h
cnlGb250RGF0YSgpLmdldE5TRm9udCgpIGZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKKyAg
ICBpZiAoc3R5bGUtPmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKS5nZXROU0ZvbnQoKSkKKyAg
ICAgICAgW3Jlc3VsdCBzZXRPYmplY3Q6c3R5bGUtPmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQo
KS5nZXROU0ZvbnQoKSBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CiAKICAgICBpZiAoc3R5
bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKS5pc1ZhbGlkKCkgJiYg
c3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSAhPSBDb2xvcjo6
YmxhY2spCiAgICAgICAgIFtyZXN1bHQgc2V0T2JqZWN0Om5zQ29sb3Ioc3R5bGUtPnZpc2l0ZWRE
ZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSkgZm9yS2V5Ok5TRm9yZWdyb3VuZENvbG9y
QXR0cmlidXRlTmFtZV07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVk
Rm9udC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hl
ZEZvbnQuY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2Fj
aGUvQ2FjaGVkRm9udC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5LDcgKzk5LDcgQEAgYm9vbCBD
YWNoZWRGb250OjplbnN1cmVDdXN0b21Gb250RGF0YShibwogCiBib29sIENhY2hlZEZvbnQ6OmVu
c3VyZUN1c3RvbUZvbnREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSkKIHsKLSAgICBpZiAoIW1fZm9u
dERhdGEgJiYgIWVycm9yT2NjdXJyZWQoKSAmJiAhaXNMb2FkaW5nKCkgJiYgZGF0YSkgeworICAg
IGlmICghbV9mb250Q3VzdG9tUGxhdGZvcm1EYXRhICYmICFlcnJvck9jY3VycmVkKCkgJiYgIWlz
TG9hZGluZygpICYmIGRhdGEpIHsKICAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVy
KGRhdGEpOwogCiAjaWYgKCFQTEFURk9STShNQUMpIHx8IF9fTUFDX09TX1hfVkVSU0lPTl9NSU5f
UkVRVUlSRUQgPD0gMTA5MCkgJiYgKCFQTEFURk9STShJT1MpIHx8IF9fSVBIT05FX09TX1ZFUlNJ
T05fTUlOX1JFUVVJUkVEIDwgODAwMDApCkBAIC0xMTIsMzAgKzExMiwzMCBAQCBib29sIENhY2hl
ZEZvbnQ6OmVuc3VyZUN1c3RvbUZvbnREYXRhKFNoCiAgICAgICAgIH0KICNlbmRpZgogCi0gICAg
ICAgIG1fZm9udERhdGEgPSBidWZmZXIgPyBjcmVhdGVGb250Q3VzdG9tUGxhdGZvcm1EYXRhKCpi
dWZmZXIpIDogbnVsbHB0cjsKLSAgICAgICAgbV9oYXNDcmVhdGVkRm9udERhdGFXcmFwcGluZ1Jl
c291cmNlID0gbV9mb250RGF0YSAmJiAoYnVmZmVyID09IG1fZGF0YSk7Ci0gICAgICAgIGlmICgh
bV9mb250RGF0YSkKKyAgICAgICAgbV9mb250Q3VzdG9tUGxhdGZvcm1EYXRhID0gYnVmZmVyID8g
Y3JlYXRlRm9udEN1c3RvbVBsYXRmb3JtRGF0YSgqYnVmZmVyKSA6IG51bGxwdHI7CisgICAgICAg
IG1faGFzQ3JlYXRlZEZvbnREYXRhV3JhcHBpbmdSZXNvdXJjZSA9IG1fZm9udEN1c3RvbVBsYXRm
b3JtRGF0YSAmJiAoYnVmZmVyID09IG1fZGF0YSk7CisgICAgICAgIGlmICghbV9mb250Q3VzdG9t
UGxhdGZvcm1EYXRhKQogICAgICAgICAgICAgc2V0U3RhdHVzKERlY29kZUVycm9yKTsKICAgICB9
CiAKLSAgICByZXR1cm4gbV9mb250RGF0YS5nZXQoKTsKKyAgICByZXR1cm4gbV9mb250Q3VzdG9t
UGxhdGZvcm1EYXRhLmdldCgpOwogfQogCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBDYWNo
ZWRGb250OjpnZXRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlv
biwgY29uc3QgQXRvbWljU3RyaW5nJiwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRp
Y0l0YWxpYywgYm9vbCkKK1JlZlB0cjxGb250PiBDYWNoZWRGb250OjpjcmVhdGVGb250KGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmLCBi
b29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljLCBib29sKQogewotICAgIHJl
dHVybiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlKHBsYXRmb3JtRGF0YUZyb21DdXN0b21EYXRhKGZv
bnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0
aWNJdGFsaWMsCisgICAgcmV0dXJuIEZvbnQ6OmNyZWF0ZShwbGF0Zm9ybURhdGFGcm9tQ3VzdG9t
RGF0YShmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSwgc3ludGhldGljQm9sZCwg
c3ludGhldGljSXRhbGljLAogICAgICAgICBmb250RGVzY3JpcHRpb24ub3JpZW50YXRpb24oKSwg
Zm9udERlc2NyaXB0aW9uLndpZHRoVmFyaWFudCgpLCBmb250RGVzY3JpcHRpb24ucmVuZGVyaW5n
TW9kZSgpKSwgdHJ1ZSwgZmFsc2UpOwogfQogCiBGb250UGxhdGZvcm1EYXRhIENhY2hlZEZvbnQ6
OnBsYXRmb3JtRGF0YUZyb21DdXN0b21EYXRhKGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBp
dGFsaWMsIEZvbnRPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgRm9udFdpZHRoVmFyaWFudCB3aWR0
aFZhcmlhbnQsIEZvbnRSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUpCiB7Ci0gICAgQVNTRVJU
KG1fZm9udERhdGEpOwotICAgIHJldHVybiBtX2ZvbnREYXRhLT5mb250UGxhdGZvcm1EYXRhKHN0
YXRpY19jYXN0PGludD4oc2l6ZSksIGJvbGQsIGl0YWxpYywgb3JpZW50YXRpb24sIHdpZHRoVmFy
aWFudCwgcmVuZGVyaW5nTW9kZSk7CisgICAgQVNTRVJUKG1fZm9udEN1c3RvbVBsYXRmb3JtRGF0
YSk7CisgICAgcmV0dXJuIG1fZm9udEN1c3RvbVBsYXRmb3JtRGF0YS0+Zm9udFBsYXRmb3JtRGF0
YShzdGF0aWNfY2FzdDxpbnQ+KHNpemUpLCBib2xkLCBpdGFsaWMsIG9yaWVudGF0aW9uLCB3aWR0
aFZhcmlhbnQsIHJlbmRlcmluZ01vZGUpOwogfQogCiB2b2lkIENhY2hlZEZvbnQ6OmFsbENsaWVu
dHNSZW1vdmVkKCkKIHsKLSAgICBtX2ZvbnREYXRhID0gbnVsbHB0cjsKKyAgICBtX2ZvbnRDdXN0
b21QbGF0Zm9ybURhdGEgPSBudWxscHRyOwogfQogCiB2b2lkIENhY2hlZEZvbnQ6OmNoZWNrTm90
aWZ5KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRGb250LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQuaAkocmV2
aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTAgKzI4LDEwIEBACiAKICNpbmNsdWRlICJDYWNoZWRS
ZXNvdXJjZS5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCisjaW5jbHVkZSAi
Rm9udC5oIgogI2luY2x1ZGUgIkZvbnRPcmllbnRhdGlvbi5oIgogI2luY2x1ZGUgIkZvbnRSZW5k
ZXJpbmdNb2RlLmgiCiAjaW5jbHVkZSAiRm9udFdpZHRoVmFyaWFudC5oIgotI2luY2x1ZGUgIlNp
bXBsZUZvbnREYXRhLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTIsNyArNTIsNyBA
QCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgZW5zdXJlQ3VzdG9tRm9udERhdGEoYm9vbCBl
eHRlcm5hbFNWRywgY29uc3QgQXRvbWljU3RyaW5nJiByZW1vdGVVUkkpOwogCi0gICAgdmlydHVh
bCBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBnZXRGb250RGF0YShjb25zdCBGb250RGVzY3Jp
cHRpb24mLCBjb25zdCBBdG9taWNTdHJpbmcmIHJlbW90ZVVSSSwgYm9vbCBzeW50aGV0aWNCb2xk
LCBib29sIHN5bnRoZXRpY0l0YWxpYywgYm9vbCBleHRlcm5hbFNWRyk7CisgICAgdmlydHVhbCBS
ZWZQdHI8Rm9udD4gY3JlYXRlRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9t
aWNTdHJpbmcmIHJlbW90ZVVSSSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0
YWxpYywgYm9vbCBleHRlcm5hbFNWRyk7CiAKIHByb3RlY3RlZDoKICAgICBGb250UGxhdGZvcm1E
YXRhIHBsYXRmb3JtRGF0YUZyb21DdXN0b21EYXRhKGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9v
bCBpdGFsaWMsIEZvbnRPcmllbnRhdGlvbiA9IEhvcml6b250YWwsIEZvbnRXaWR0aFZhcmlhbnQg
PSBSZWd1bGFyV2lkdGgsIEZvbnRSZW5kZXJpbmdNb2RlID0gTm9ybWFsUmVuZGVyaW5nTW9kZSk7
CkBAIC03MCw3ICs3MCw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgYWxsQ2xpZW50
c1JlbW92ZWQoKSBvdmVycmlkZTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxGb250Q3VzdG9tUGxh
dGZvcm1EYXRhPiBtX2ZvbnREYXRhOworICAgIHN0ZDo6dW5pcXVlX3B0cjxGb250Q3VzdG9tUGxh
dGZvcm1EYXRhPiBtX2ZvbnRDdXN0b21QbGF0Zm9ybURhdGE7CiAgICAgYm9vbCBtX2xvYWRJbml0
aWF0ZWQ7CiAgICAgYm9vbCBtX2hhc0NyZWF0ZWRGb250RGF0YVdyYXBwaW5nUmVzb3VyY2U7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTVkdGb250LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU1ZHRm9udC5jcHAJ
KHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRT
VkdGb250LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsMTcgKzUxLDE3IEBAIENhY2hlZFNWR0Zv
bnQ6OkNhY2hlZFNWR0ZvbnQoY29uc3QgUmVzb3UKIHsKIH0KIAotUGFzc1JlZlB0cjxTaW1wbGVG
b250RGF0YT4gQ2FjaGVkU1ZHRm9udDo6Z2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgcmVtb3RlVVJJLCBib29sIHN5
bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljLCBib29sIGV4dGVybmFsU1ZHKQorUmVm
UHRyPEZvbnQ+IENhY2hlZFNWR0ZvbnQ6OmNyZWF0ZUZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgcmVtb3RlVVJJLCBib29sIHN5
bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljLCBib29sIGV4dGVybmFsU1ZHKQogewog
I2lmIEVOQUJMRShTVkdfT1RGX0NPTlZFUlRFUikKICAgICBpZiAoIWV4dGVybmFsU1ZHIHx8IGZp
cnN0Rm9udEZhY2UocmVtb3RlVVJJKSkKLSAgICAgICAgcmV0dXJuIENhY2hlZEZvbnQ6OmdldEZv
bnREYXRhKGZvbnREZXNjcmlwdGlvbiwgcmVtb3RlVVJJLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0
aWNJdGFsaWMsIGV4dGVybmFsU1ZHKTsKKyAgICAgICAgcmV0dXJuIENhY2hlZEZvbnQ6OmNyZWF0
ZUZvbnQoZm9udERlc2NyaXB0aW9uLCByZW1vdGVVUkksIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRp
Y0l0YWxpYywgZXh0ZXJuYWxTVkcpOwogI2Vsc2UKICAgICBpZiAoIWV4dGVybmFsU1ZHKQotICAg
ICAgICByZXR1cm4gQ2FjaGVkRm9udDo6Z2V0Rm9udERhdGEoZm9udERlc2NyaXB0aW9uLCByZW1v
dGVVUkksIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYywgZXh0ZXJuYWxTVkcpOworICAg
ICAgICByZXR1cm4gQ2FjaGVkRm9udDo6Y3JlYXRlRm9udChmb250RGVzY3JpcHRpb24sIHJlbW90
ZVVSSSwgc3ludGhldGljQm9sZCwgc3ludGhldGljSXRhbGljLCBleHRlcm5hbFNWRyk7CiAKICAg
ICBpZiAoU1ZHRm9udEZhY2VFbGVtZW50KiBmaXJzdEZvbnRGYWNlID0gdGhpcy0+Zmlyc3RGb250
RmFjZShyZW1vdGVVUkkpKQotICAgICAgICByZXR1cm4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZShz
dGQ6Om1ha2VfdW5pcXVlPFNWR0ZvbnREYXRhPihmaXJzdEZvbnRGYWNlKSwgZm9udERlc2NyaXB0
aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCksIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYyk7
CisgICAgICAgIHJldHVybiBGb250OjpjcmVhdGUoc3RkOjptYWtlX3VuaXF1ZTxTVkdGb250RGF0
YT4oZmlyc3RGb250RmFjZSksIGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpLCBz
eW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMpOwogI2VuZGlmCiAgICAgcmV0dXJuIG51bGxw
dHI7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU1ZHRm9udC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTVkdGb250
LmgJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRTVkdGb250LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogCiAg
ICAgdmlydHVhbCBib29sIGVuc3VyZUN1c3RvbUZvbnREYXRhKGJvb2wgZXh0ZXJuYWxTVkcsIGNv
bnN0IEF0b21pY1N0cmluZyYgcmVtb3RlVVJJKSBvdmVycmlkZTsKICAgICAKLSAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IGdldEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYgcmVtb3RlVVJJLCBib29sIHN5bnRoZXRpY0JvbGQs
IGJvb2wgc3ludGhldGljSXRhbGljLCBib29sIGV4dGVybmFsU1ZHKSBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIFJlZlB0cjxGb250PiBjcmVhdGVGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNv
bnN0IEF0b21pY1N0cmluZyYgcmVtb3RlVVJJLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3lu
dGhldGljSXRhbGljLCBib29sIGV4dGVybmFsU1ZHKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAg
ICBGb250UGxhdGZvcm1EYXRhIHBsYXRmb3JtRGF0YUZyb21DdXN0b21EYXRhKGZsb2F0IHNpemUs
IGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMsIEZvbnRPcmllbnRhdGlvbiA9IEhvcml6b250YWwsIEZv
bnRXaWR0aFZhcmlhbnQgPSBSZWd1bGFyV2lkdGgsIEZvbnRSZW5kZXJpbmdNb2RlID0gTm9ybWFs
UmVuZGVyaW5nTW9kZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250LmNwcAkocmV2aXNpb24gMTc4NjUwKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9TaW1wbGVGb250RGF0YS5jcHA6MTc4NjUwKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NTYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDgsIDIwMTAsIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3Vy
eWFrb3YKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBw
bGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAq
ICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgorCisjaWYgUExB
VEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JF
UVVJUkVEID4gMTA4MCkKKyNpbmNsdWRlICJDb3JlVGV4dFNQSS5oIgorI2VuZGlmCisjaW5jbHVk
ZSAiRm9udENhY2hlLmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKKyNpbmNsdWRlICJPcGVu
VHlwZU1hdGhEYXRhLmgiCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3
dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKworI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKKyNp
bmNsdWRlICJPcGVuVHlwZVZlcnRpY2FsRGF0YS5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKwordW5zaWduZWQgR2x5cGhQYWdlOjpzX2NvdW50ID0gMDsKKworY29uc3QgZmxvYXQg
c21hbGxDYXBzRm9udFNpemVNdWx0aXBsaWVyID0gMC43ZjsKK2NvbnN0IGZsb2F0IGVtcGhhc2lz
TWFya0ZvbnRTaXplTXVsdGlwbGllciA9IDAuNWY7CisKK1NpbXBsZUZvbnREYXRhOjpTaW1wbGVG
b250RGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEsIGJvb2wgaXNDdXN0
b21Gb250LCBib29sIGlzTG9hZGluZywgYm9vbCBpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKQor
ICAgIDogbV9tYXhDaGFyV2lkdGgoLTEpCisgICAgLCBtX2F2Z0NoYXJXaWR0aCgtMSkKKyAgICAs
IG1fcGxhdGZvcm1EYXRhKHBsYXRmb3JtRGF0YSkKKyAgICAsIG1fdHJlYXRBc0ZpeGVkUGl0Y2go
ZmFsc2UpCisgICAgLCBtX2lzQ3VzdG9tRm9udChpc0N1c3RvbUZvbnQpCisgICAgLCBtX2lzTG9h
ZGluZyhpc0xvYWRpbmcpCisgICAgLCBtX2lzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2soaXNUZXh0
T3JpZW50YXRpb25GYWxsYmFjaykKKyAgICAsIG1faXNCcm9rZW5JZGVvZ3JhcGhGYWxsYmFjayhm
YWxzZSkKKyAgICAsIG1fbWF0aERhdGEobnVsbHB0cikKKyNpZiBFTkFCTEUoT1BFTlRZUEVfVkVS
VElDQUwpCisgICAgLCBtX3ZlcnRpY2FsRGF0YSgwKQorI2VuZGlmCisgICAgLCBtX2hhc1ZlcnRp
Y2FsR2x5cGhzKGZhbHNlKQoreworICAgIHBsYXRmb3JtSW5pdCgpOworICAgIHBsYXRmb3JtR2x5
cGhJbml0KCk7CisgICAgcGxhdGZvcm1DaGFyV2lkdGhJbml0KCk7CisjaWYgRU5BQkxFKE9QRU5U
WVBFX1ZFUlRJQ0FMKQorICAgIGlmIChwbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSA9PSBWZXJ0
aWNhbCAmJiAhaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaykgeworICAgICAgICBtX3ZlcnRpY2Fs
RGF0YSA9IHBsYXRmb3JtRGF0YS52ZXJ0aWNhbERhdGEoKTsKKyAgICAgICAgbV9oYXNWZXJ0aWNh
bEdseXBocyA9IG1fdmVydGljYWxEYXRhLmdldCgpICYmIG1fdmVydGljYWxEYXRhLT5oYXNWZXJ0
aWNhbE1ldHJpY3MoKTsKKyAgICB9CisjZW5kaWYKK30KKworU2ltcGxlRm9udERhdGE6OlNpbXBs
ZUZvbnREYXRhKHN0ZDo6dW5pcXVlX3B0cjxTVkdEYXRhPiBzdmdEYXRhLCBmbG9hdCBmb250U2l6
ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYykKKyAgICA6IG1fcGxh
dGZvcm1EYXRhKEZvbnRQbGF0Zm9ybURhdGEoZm9udFNpemUsIHN5bnRoZXRpY0JvbGQsIHN5bnRo
ZXRpY0l0YWxpYykpCisgICAgLCBtX3N2Z0RhdGEoV1RGOjptb3ZlKHN2Z0RhdGEpKQorICAgICwg
bV90cmVhdEFzRml4ZWRQaXRjaChmYWxzZSkKKyAgICAsIG1faXNDdXN0b21Gb250KHRydWUpCisg
ICAgLCBtX2lzTG9hZGluZyhmYWxzZSkKKyAgICAsIG1faXNUZXh0T3JpZW50YXRpb25GYWxsYmFj
ayhmYWxzZSkKKyAgICAsIG1faXNCcm9rZW5JZGVvZ3JhcGhGYWxsYmFjayhmYWxzZSkKKyAgICAs
IG1fbWF0aERhdGEobnVsbHB0cikKKyNpZiBFTkFCTEUoT1BFTlRZUEVfVkVSVElDQUwpCisgICAg
LCBtX3ZlcnRpY2FsRGF0YSgwKQorI2VuZGlmCisgICAgLCBtX2hhc1ZlcnRpY2FsR2x5cGhzKGZh
bHNlKQorI2lmIFBMQVRGT1JNKElPUykKKyAgICAsIG1fc2hvdWxkTm90QmVVc2VkRm9yQXJhYmlj
KGZhbHNlKQorI2VuZGlmCit7CisgICAgbV9zdmdEYXRhLT5pbml0aWFsaXplRm9udERhdGEodGhp
cywgZm9udFNpemUpOworfQorCisvLyBFc3RpbWF0ZXMgb2YgYXZnQ2hhcldpZHRoIGFuZCBtYXhD
aGFyV2lkdGggZm9yIHBsYXRmb3JtcyB0aGF0IGRvbid0IHN1cHBvcnQgYWNjZXNzaW5nIHRoZXNl
IHZhbHVlcyBmcm9tIHRoZSBmb250Lgordm9pZCBTaW1wbGVGb250RGF0YTo6aW5pdENoYXJXaWR0
aHMoKQoreworICAgIGF1dG8qIGdseXBoUGFnZVplcm8gPSBnbHlwaFBhZ2UoMCk7CisKKyAgICAv
LyBUcmVhdCB0aGUgd2lkdGggb2YgYSAnMCcgYXMgdGhlIGF2Z0NoYXJXaWR0aC4KKyAgICBpZiAo
bV9hdmdDaGFyV2lkdGggPD0gMC5mICYmIGdseXBoUGFnZVplcm8pIHsKKyAgICAgICAgc3RhdGlj
IGNvbnN0IFVDaGFyMzIgZGlnaXRaZXJvQ2hhciA9ICcwJzsKKyAgICAgICAgR2x5cGggZGlnaXRa
ZXJvR2x5cGggPSBnbHlwaFBhZ2VaZXJvLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoZGlnaXRaZXJv
Q2hhcikuZ2x5cGg7CisgICAgICAgIGlmIChkaWdpdFplcm9HbHlwaCkKKyAgICAgICAgICAgIG1f
YXZnQ2hhcldpZHRoID0gd2lkdGhGb3JHbHlwaChkaWdpdFplcm9HbHlwaCk7CisgICAgfQorCisg
ICAgLy8gSWYgd2UgY2FuJ3QgcmV0cmlldmUgdGhlIHdpZHRoIG9mIGEgJzAnLCBmYWxsIGJhY2sg
dG8gdGhlIHggaGVpZ2h0LgorICAgIGlmIChtX2F2Z0NoYXJXaWR0aCA8PSAwLmYpCisgICAgICAg
IG1fYXZnQ2hhcldpZHRoID0gbV9mb250TWV0cmljcy54SGVpZ2h0KCk7CisKKyAgICBpZiAobV9t
YXhDaGFyV2lkdGggPD0gMC5mKQorICAgICAgICBtX21heENoYXJXaWR0aCA9IHN0ZDo6bWF4KG1f
YXZnQ2hhcldpZHRoLCBtX2ZvbnRNZXRyaWNzLmZsb2F0QXNjZW50KCkpOworfQorCit2b2lkIFNp
bXBsZUZvbnREYXRhOjpwbGF0Zm9ybUdseXBoSW5pdCgpCit7CisgICAgYXV0byogZ2x5cGhQYWdl
WmVybyA9IGdseXBoUGFnZSgwKTsKKyAgICBpZiAoIWdseXBoUGFnZVplcm8pIHsKKyAgICAgICAg
bV9zcGFjZUdseXBoID0gMDsKKyAgICAgICAgbV9zcGFjZVdpZHRoID0gMDsKKyAgICAgICAgbV96
ZXJvR2x5cGggPSAwOworICAgICAgICBtX2FkanVzdGVkU3BhY2VXaWR0aCA9IDA7CisgICAgICAg
IGRldGVybWluZVBpdGNoKCk7CisgICAgICAgIG1femVyb1dpZHRoU3BhY2VHbHlwaCA9IDA7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBBc2sgZm9yIHRoZSBnbHlwaCBmb3IgMCB0
byBhdm9pZCBwYWdpbmcgaW4gWkVSTyBXSURUSCBTUEFDRS4gQ29udHJvbCBjaGFyYWN0ZXJzLCBp
bmNsdWRpbmcgMCwKKyAgICAvLyBhcmUgbWFwcGVkIHRvIHRoZSBaRVJPIFdJRFRIIFNQQUNFIGds
eXBoLgorICAgIG1femVyb1dpZHRoU3BhY2VHbHlwaCA9IGdseXBoUGFnZVplcm8tPmdseXBoRGF0
YUZvckNoYXJhY3RlcigwKS5nbHlwaDsKKworICAgIC8vIE5hc3R5IGhhY2sgdG8gZGV0ZXJtaW5l
IGlmIHdlIHNob3VsZCByb3VuZCBvciBjZWlsIHNwYWNlIHdpZHRocy4KKyAgICAvLyBJZiB0aGUg
Zm9udCBpcyBtb25vc3BhY2Ugb3IgZmFrZSBtb25vc3BhY2Ugd2UgY2VpbCB0byBlbnN1cmUgdGhh
dCAKKyAgICAvLyBldmVyeSBjaGFyYWN0ZXIgYW5kIHRoZSBzcGFjZSBhcmUgdGhlIHNhbWUgd2lk
dGguICBPdGhlcndpc2Ugd2Ugcm91bmQuCisgICAgbV9zcGFjZUdseXBoID0gZ2x5cGhQYWdlWmVy
by0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKCcgJykuZ2x5cGg7CisgICAgZmxvYXQgd2lkdGggPSB3
aWR0aEZvckdseXBoKG1fc3BhY2VHbHlwaCk7CisgICAgbV9zcGFjZVdpZHRoID0gd2lkdGg7Cisg
ICAgbV96ZXJvR2x5cGggPSBnbHlwaFBhZ2VaZXJvLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoJzAn
KS5nbHlwaDsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldFplcm9XaWR0aCh3aWR0aEZvckdseXBoKG1f
emVyb0dseXBoKSk7CisgICAgZGV0ZXJtaW5lUGl0Y2goKTsKKyAgICBtX2FkanVzdGVkU3BhY2VX
aWR0aCA9IG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPyBjZWlsZih3aWR0aCkgOiByb3VuZGYod2lkdGgp
OworCisgICAgLy8gRm9yY2UgdGhlIGdseXBoIGZvciBaRVJPIFdJRFRIIFNQQUNFIHRvIGhhdmUg
emVybyB3aWR0aCwgdW5sZXNzIGl0IGlzIHNoYXJlZCB3aXRoIFNQQUNFLgorICAgIC8vIEhlbHZl
dGljYSBpcyBhbiBleGFtcGxlIG9mIGEgbm9uLXplcm8gd2lkdGggWkVSTyBXSURUSCBTUEFDRSBn
bHlwaC4KKyAgICAvLyBTZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEzMTc4PiBhbmQgU2ltcGxlRm9udERhdGE6OmlzWmVyb1dpZHRoU3BhY2VHbHlwaCgpCisgICAg
aWYgKG1femVyb1dpZHRoU3BhY2VHbHlwaCA9PSBtX3NwYWNlR2x5cGgpCisgICAgICAgIG1femVy
b1dpZHRoU3BhY2VHbHlwaCA9IDA7Cit9CisKK1NpbXBsZUZvbnREYXRhOjp+U2ltcGxlRm9udERh
dGEoKQoreworICAgIHJlbW92ZUZyb21TeXN0ZW1GYWxsYmFja0NhY2hlKCk7Cit9CisKK3N0YXRp
YyBib29sIGZpbGxHbHlwaFBhZ2UoR2x5cGhQYWdlJiBwYWdlVG9GaWxsLCB1bnNpZ25lZCBvZmZz
ZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3Ro
LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEpCit7CisjaWYgRU5BQkxFKFNWR19GT05U
UykKKyAgICBpZiAoYXV0byogc3ZnRGF0YSA9IGZvbnREYXRhLT5zdmdEYXRhKCkpCisgICAgICAg
IHJldHVybiBzdmdEYXRhLT5maWxsU1ZHR2x5cGhQYWdlKCZwYWdlVG9GaWxsLCBvZmZzZXQsIGxl
bmd0aCwgYnVmZmVyLCBidWZmZXJMZW5ndGgsIGZvbnREYXRhKTsKKyNlbmRpZgorICAgIGJvb2wg
aGFzR2x5cGhzID0gcGFnZVRvRmlsbC5maWxsKG9mZnNldCwgbGVuZ3RoLCBidWZmZXIsIGJ1ZmZl
ckxlbmd0aCwgZm9udERhdGEpOworI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKKyAgICBp
ZiAoaGFzR2x5cGhzICYmIGZvbnREYXRhLT52ZXJ0aWNhbERhdGEoKSkKKyAgICAgICAgZm9udERh
dGEtPnZlcnRpY2FsRGF0YSgpLT5zdWJzdGl0dXRlV2l0aFZlcnRpY2FsR2x5cGhzKGZvbnREYXRh
LCAmcGFnZVRvRmlsbCwgb2Zmc2V0LCBsZW5ndGgpOworI2VuZGlmCisgICAgcmV0dXJuIGhhc0ds
eXBoczsKK30KKworc3RhdGljIFJlZlB0cjxHbHlwaFBhZ2U+IGNyZWF0ZUFuZEZpbGxHbHlwaFBh
Z2UodW5zaWduZWQgcGFnZU51bWJlciwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQor
eworI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBGSVhNRTogVGltZXMgTmV3IFJvbWFuIGNvbnRh
aW5zIEFyYWJpYyBnbHlwaHMsIGJ1dCBDb3JlIFRleHQgZG9lc24ndCBrbm93IGhvdyB0byBzaGFw
ZSB0aGVtLiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzk4MjM5NzU+LgorICAgIC8vIE9uY2Ugd2UgaGF2
ZSB0aGUgZml4IGZvciA8cmRhcjovL3Byb2JsZW0vOTgyMzk3NT4gdGhlbiByZW1vdmUgdGhpcyBj
b2RlIHRvZ2V0aGVyIHdpdGggU2ltcGxlRm9udERhdGE6OnNob3VsZE5vdEJlVXNlZEZvckFyYWJp
YygpCisgICAgLy8gaW4gPHJkYXI6Ly9wcm9ibGVtLzEyMDk2ODM1Pi4KKyAgICBpZiAocGFnZU51
bWJlciA9PSA2ICYmIGZvbnREYXRhLT5zaG91bGROb3RCZVVzZWRGb3JBcmFiaWMoKSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisjZW5kaWYKKworICAgIHVuc2lnbmVkIHN0YXJ0ID0gcGFnZU51
bWJlciAqIEdseXBoUGFnZTo6c2l6ZTsKKyAgICBVQ2hhciBidWZmZXJbR2x5cGhQYWdlOjpzaXpl
ICogMiArIDJdOworICAgIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aDsKKyAgICAvLyBGaWxsIGluIGEg
YnVmZmVyIHdpdGggdGhlIGVudGlyZSAicGFnZSIgb2YgY2hhcmFjdGVycyB0aGF0IHdlIHdhbnQg
dG8gbG9vayB1cCBnbHlwaHMgZm9yLgorICAgIGlmIChVX0lTX0JNUChzdGFydCkpIHsKKyAgICAg
ICAgYnVmZmVyTGVuZ3RoID0gR2x5cGhQYWdlOjpzaXplOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgR2x5cGhQYWdlOjpzaXplOyBpKyspCisgICAgICAgICAgICBidWZmZXJbaV0g
PSBzdGFydCArIGk7CisKKyAgICAgICAgaWYgKHN0YXJ0ID09IDApIHsKKyAgICAgICAgICAgIC8v
IENvbnRyb2wgY2hhcmFjdGVycyBtdXN0IG5vdCByZW5kZXIgYXQgYWxsLgorICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDB4MjA7ICsraSkKKyAgICAgICAgICAgICAgICBidWZm
ZXJbaV0gPSB6ZXJvV2lkdGhTcGFjZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDB4
N0Y7IGkgPCAweEEwOyBpKyspCisgICAgICAgICAgICAgICAgYnVmZmVyW2ldID0gemVyb1dpZHRo
U3BhY2U7CisgICAgICAgICAgICBidWZmZXJbc29mdEh5cGhlbl0gPSB6ZXJvV2lkdGhTcGFjZTsK
KworICAgICAgICAgICAgLy8gXG4sIFx0LCBhbmQgbm9uYnJlYWtpbmcgc3BhY2UgbXVzdCByZW5k
ZXIgYXMgYSBzcGFjZS4KKyAgICAgICAgICAgIGJ1ZmZlclsoaW50KSdcbiddID0gJyAnOworICAg
ICAgICAgICAgYnVmZmVyWyhpbnQpJ1x0J10gPSAnICc7CisgICAgICAgICAgICBidWZmZXJbbm9C
cmVha1NwYWNlXSA9ICcgJzsKKyAgICAgICAgfSBlbHNlIGlmIChzdGFydCA9PSAobGVmdFRvUmln
aHRNYXJrICYgfihHbHlwaFBhZ2U6OnNpemUgLSAxKSkpIHsKKyAgICAgICAgICAgIC8vIExSTSwg
UkxNLCBMUkUsIFJMRSwgWldOSiwgWldKLCBhbmQgUERGIG11c3Qgbm90IHJlbmRlciBhdCBhbGwu
CisgICAgICAgICAgICBidWZmZXJbbGVmdFRvUmlnaHRNYXJrIC0gc3RhcnRdID0gemVyb1dpZHRo
U3BhY2U7CisgICAgICAgICAgICBidWZmZXJbcmlnaHRUb0xlZnRNYXJrIC0gc3RhcnRdID0gemVy
b1dpZHRoU3BhY2U7CisgICAgICAgICAgICBidWZmZXJbbGVmdFRvUmlnaHRFbWJlZCAtIHN0YXJ0
XSA9IHplcm9XaWR0aFNwYWNlOworICAgICAgICAgICAgYnVmZmVyW3JpZ2h0VG9MZWZ0RW1iZWQg
LSBzdGFydF0gPSB6ZXJvV2lkdGhTcGFjZTsKKyAgICAgICAgICAgIGJ1ZmZlcltsZWZ0VG9SaWdo
dE92ZXJyaWRlIC0gc3RhcnRdID0gemVyb1dpZHRoU3BhY2U7CisgICAgICAgICAgICBidWZmZXJb
cmlnaHRUb0xlZnRPdmVycmlkZSAtIHN0YXJ0XSA9IHplcm9XaWR0aFNwYWNlOworICAgICAgICAg
ICAgYnVmZmVyW3plcm9XaWR0aE5vbkpvaW5lciAtIHN0YXJ0XSA9IHplcm9XaWR0aFNwYWNlOwor
ICAgICAgICAgICAgYnVmZmVyW3plcm9XaWR0aEpvaW5lciAtIHN0YXJ0XSA9IHplcm9XaWR0aFNw
YWNlOworICAgICAgICAgICAgYnVmZmVyW3BvcERpcmVjdGlvbmFsRm9ybWF0dGluZyAtIHN0YXJ0
XSA9IHplcm9XaWR0aFNwYWNlOworICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0ID09IChvYmplY3RS
ZXBsYWNlbWVudENoYXJhY3RlciAmIH4oR2x5cGhQYWdlOjpzaXplIC0gMSkpKSB7CisgICAgICAg
ICAgICAvLyBPYmplY3QgcmVwbGFjZW1lbnQgY2hhcmFjdGVyIG11c3Qgbm90IHJlbmRlciBhdCBh
bGwuCisgICAgICAgICAgICBidWZmZXJbb2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXIgLSBzdGFy
dF0gPSB6ZXJvV2lkdGhTcGFjZTsKKyAgICAgICAgfSBlbHNlIGlmIChzdGFydCA9PSAoemVyb1dp
ZHRoTm9CcmVha1NwYWNlICYgfihHbHlwaFBhZ2U6OnNpemUgLSAxKSkpIHsKKyAgICAgICAgICAg
IC8vIFpXTkJTL0JPTSBtdXN0IG5vdCByZW5kZXIgYXQgYWxsLgorICAgICAgICAgICAgYnVmZmVy
W3plcm9XaWR0aE5vQnJlYWtTcGFjZSAtIHN0YXJ0XSA9IHplcm9XaWR0aFNwYWNlOworICAgICAg
ICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgYnVmZmVyTGVuZ3RoID0gR2x5cGhQYWdlOjpzaXpl
ICogMjsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdseXBoUGFnZTo6c2l6ZTsg
aSsrKSB7CisgICAgICAgICAgICBpbnQgYyA9IGkgKyBzdGFydDsKKyAgICAgICAgICAgIGJ1ZmZl
cltpICogMl0gPSBVMTZfTEVBRChjKTsKKyAgICAgICAgICAgIGJ1ZmZlcltpICogMiArIDFdID0g
VTE2X1RSQUlMKGMpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gTm93IHRoYXQgd2UgaGF2
ZSBhIGJ1ZmZlciBmdWxsIG9mIGNoYXJhY3RlcnMsIHdlIHdhbnQgdG8gZ2V0IGJhY2sgYW4gYXJy
YXkKKyAgICAvLyBvZiBnbHlwaCBpbmRpY2VzLiBUaGlzIHBhcnQgaW52b2x2ZXMgY2FsbGluZyBp
bnRvIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYworICAgIC8vIHJvdXRpbmUgb2Ygb3VyIGdseXBoIG1h
cCBmb3IgYWN0dWFsbHkgZmlsbGluZyBpbiB0aGUgcGFnZSB3aXRoIHRoZSBnbHlwaHMuCisgICAg
Ly8gU3VjY2VzcyBpcyBub3QgZ3VhcmFudGVlZC4gRm9yIGV4YW1wbGUsIFRpbWVzIGZhaWxzIHRv
IGZpbGwgcGFnZSAyNjAsIGdpdmluZyBnbHlwaCBkYXRhCisgICAgLy8gZm9yIG9ubHkgMTI4IG91
dCBvZiAyNTYgY2hhcmFjdGVycy4KKyAgICBSZWZQdHI8R2x5cGhQYWdlPiBnbHlwaFBhZ2U7Cisg
ICAgaWYgKEdseXBoUGFnZTo6bWF5VXNlTWl4ZWRGb250RGF0YVdoZW5GaWxsaW5nKGJ1ZmZlciwg
YnVmZmVyTGVuZ3RoLCBmb250RGF0YSkpCisgICAgICAgIGdseXBoUGFnZSA9IEdseXBoUGFnZTo6
Y3JlYXRlRm9yTWl4ZWRGb250RGF0YSgpOworICAgIGVsc2UKKyAgICAgICAgZ2x5cGhQYWdlID0g
R2x5cGhQYWdlOjpjcmVhdGVGb3JTaW5nbGVGb250RGF0YShmb250RGF0YSk7CisKKyAgICBib29s
IGhhdmVHbHlwaHMgPSBmaWxsR2x5cGhQYWdlKCpnbHlwaFBhZ2UsIDAsIEdseXBoUGFnZTo6c2l6
ZSwgYnVmZmVyLCBidWZmZXJMZW5ndGgsIGZvbnREYXRhKTsKKyAgICBpZiAoIWhhdmVHbHlwaHMp
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgZ2x5cGhQYWdlLT5zZXRJbW11dGFibGUo
KTsKKyAgICByZXR1cm4gZ2x5cGhQYWdlOworfQorCitjb25zdCBHbHlwaFBhZ2UqIFNpbXBsZUZv
bnREYXRhOjpnbHlwaFBhZ2UodW5zaWduZWQgcGFnZU51bWJlcikgY29uc3QKK3sKKyAgICBpZiAo
cGFnZU51bWJlciA9PSAwKSB7CisgICAgICAgIGlmICghbV9nbHlwaFBhZ2VaZXJvKQorICAgICAg
ICAgICAgbV9nbHlwaFBhZ2VaZXJvID0gY3JlYXRlQW5kRmlsbEdseXBoUGFnZSgwLCB0aGlzKTsK
KyAgICAgICAgcmV0dXJuIG1fZ2x5cGhQYWdlWmVyby5nZXQoKTsKKyAgICB9CisgICAgYXV0byBh
ZGRSZXN1bHQgPSBtX2dseXBoUGFnZXMuYWRkKHBhZ2VOdW1iZXIsIG51bGxwdHIpOworICAgIGlm
IChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZSA9IGNyZWF0ZUFuZEZpbGxHbHlwaFBhZ2UocGFnZU51bWJlciwgdGhpcyk7CisKKyAgICByZXR1
cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKK30KKworR2x5cGggU2ltcGxlRm9u
dERhdGE6OmdseXBoRm9yQ2hhcmFjdGVyKFVDaGFyMzIgY2hhcmFjdGVyKSBjb25zdAoreworICAg
IGF1dG8qIHBhZ2UgPSBnbHlwaFBhZ2UoY2hhcmFjdGVyIC8gR2x5cGhQYWdlOjpzaXplKTsKKyAg
ICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBwYWdlLT5nbHlwaEF0
KGNoYXJhY3RlciAlIEdseXBoUGFnZTo6c2l6ZSk7Cit9CisKK0dseXBoRGF0YSBTaW1wbGVGb250
RGF0YTo6Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgY2hhcmFjdGVyKSBjb25zdAorewor
ICAgIGF1dG8qIHBhZ2UgPSBnbHlwaFBhZ2UoY2hhcmFjdGVyIC8gR2x5cGhQYWdlOjpzaXplKTsK
KyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybiBHbHlwaERhdGEoKTsKKyAgICByZXR1cm4g
cGFnZS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3Rlcik7Cit9CisKK1Bhc3NSZWZQdHI8
U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjp2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25G
b250RGF0YSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKKyAgICAgICAg
bV9kZXJpdmVkRm9udERhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPERlcml2ZWRGb250RGF0YT4oaXND
dXN0b21Gb250KCkpOworICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEtPnZlcnRpY2FsUmlnaHRP
cmllbnRhdGlvbikgeworICAgICAgICBGb250UGxhdGZvcm1EYXRhIHZlcnRpY2FsUmlnaHRQbGF0
Zm9ybURhdGEobV9wbGF0Zm9ybURhdGEpOworICAgICAgICB2ZXJ0aWNhbFJpZ2h0UGxhdGZvcm1E
YXRhLnNldE9yaWVudGF0aW9uKEhvcml6b250YWwpOworICAgICAgICBtX2Rlcml2ZWRGb250RGF0
YS0+dmVydGljYWxSaWdodE9yaWVudGF0aW9uID0gY3JlYXRlKHZlcnRpY2FsUmlnaHRQbGF0Zm9y
bURhdGEsIGlzQ3VzdG9tRm9udCgpLCBmYWxzZSwgdHJ1ZSk7CisgICAgfQorICAgIHJldHVybiBt
X2Rlcml2ZWRGb250RGF0YS0+dmVydGljYWxSaWdodE9yaWVudGF0aW9uOworfQorCitQYXNzUmVm
UHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6dXByaWdodE9yaWVudGF0aW9uRm9u
dERhdGEoKSBjb25zdAoreworICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEpCisgICAgICAgIG1f
ZGVyaXZlZEZvbnREYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxEZXJpdmVkRm9udERhdGE+KGlzQ3Vz
dG9tRm9udCgpKTsKKyAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhLT51cHJpZ2h0T3JpZW50YXRp
b24pCisgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT51cHJpZ2h0T3JpZW50YXRpb24gPSBjcmVh
dGUobV9wbGF0Zm9ybURhdGEsIGlzQ3VzdG9tRm9udCgpLCBmYWxzZSwgdHJ1ZSk7CisgICAgcmV0
dXJuIG1fZGVyaXZlZEZvbnREYXRhLT51cHJpZ2h0T3JpZW50YXRpb247Cit9CisKK1Bhc3NSZWZQ
dHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YShjb25z
dCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKK3sKKyAgICBpZiAoIW1f
ZGVyaXZlZEZvbnREYXRhKQorICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IHN0ZDo6bWFrZV91
bmlxdWU8RGVyaXZlZEZvbnREYXRhPihpc0N1c3RvbUZvbnQoKSk7CisgICAgaWYgKCFtX2Rlcml2
ZWRGb250RGF0YS0+c21hbGxDYXBzKQorICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxD
YXBzID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9uLCBzbWFsbENhcHNGb250
U2l6ZU11bHRpcGxpZXIpOworCisgICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENh
cHM7Cit9CisKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjplbXBo
YXNpc01hcmtGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikg
Y29uc3QKK3sKKyAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQorICAgICAgICBtX2Rlcml2ZWRG
b250RGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8RGVyaXZlZEZvbnREYXRhPihpc0N1c3RvbUZvbnQo
KSk7CisgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrKQorICAgICAgICBt
X2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9u
dERlc2NyaXB0aW9uLCBlbXBoYXNpc01hcmtGb250U2l6ZU11bHRpcGxpZXIpOworCisgICAgcmV0
dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcms7Cit9CisKK1Bhc3NSZWZQdHI8U2lt
cGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpicm9rZW5JZGVvZ3JhcGhGb250RGF0YSgpIGNv
bnN0Cit7CisgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKKyAgICAgICAgbV9kZXJpdmVkRm9u
dERhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPERlcml2ZWRGb250RGF0YT4oaXNDdXN0b21Gb250KCkp
OworICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEtPmJyb2tlbklkZW9ncmFwaCkgeworICAgICAg
ICBtX2Rlcml2ZWRGb250RGF0YS0+YnJva2VuSWRlb2dyYXBoID0gY3JlYXRlKG1fcGxhdGZvcm1E
YXRhLCBpc0N1c3RvbUZvbnQoKSwgZmFsc2UpOworICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+
YnJva2VuSWRlb2dyYXBoLT5tX2lzQnJva2VuSWRlb2dyYXBoRmFsbGJhY2sgPSB0cnVlOworICAg
IH0KKyAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPmJyb2tlbklkZW9ncmFwaDsKK30KKwor
UGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6Om5vblN5bnRoZXRpY0l0
YWxpY0ZvbnREYXRhKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQorICAg
ICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8RGVyaXZlZEZvbnREYXRh
Pihpc0N1c3RvbUZvbnQoKSk7CisgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+bm9uU3ludGhl
dGljSXRhbGljKSB7CisgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEgbm9uU3ludGhldGljSXRhbGlj
Rm9udFBsYXRmb3JtRGF0YShtX3BsYXRmb3JtRGF0YSk7CisjaWYgUExBVEZPUk0oQ09DT0EpCisg
ICAgICAgIG5vblN5bnRoZXRpY0l0YWxpY0ZvbnRQbGF0Zm9ybURhdGEubV9zeW50aGV0aWNPYmxp
cXVlID0gZmFsc2U7CisjZW5kaWYKKyAgICAgICAgbV9kZXJpdmVkRm9udERhdGEtPm5vblN5bnRo
ZXRpY0l0YWxpYyA9IGNyZWF0ZShub25TeW50aGV0aWNJdGFsaWNGb250UGxhdGZvcm1EYXRhLCBp
c0N1c3RvbUZvbnQoKSk7CisgICAgfQorICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+bm9u
U3ludGhldGljSXRhbGljOworfQorCisjaWZuZGVmIE5ERUJVRworU3RyaW5nIFNpbXBsZUZvbnRE
YXRhOjpkZXNjcmlwdGlvbigpIGNvbnN0Cit7CisgICAgaWYgKGlzU1ZHRm9udCgpKQorICAgICAg
ICByZXR1cm4gIltTVkcgZm9udF0iOworICAgIGlmIChpc0N1c3RvbUZvbnQoKSkKKyAgICAgICAg
cmV0dXJuICJbY3VzdG9tIGZvbnRdIjsKKworICAgIHJldHVybiBwbGF0Zm9ybURhdGEoKS5kZXNj
cmlwdGlvbigpOworfQorI2VuZGlmCisKK2NvbnN0IE9wZW5UeXBlTWF0aERhdGEqIFNpbXBsZUZv
bnREYXRhOjptYXRoRGF0YSgpIGNvbnN0Cit7CisgICAgaWYgKG1faXNMb2FkaW5nKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoIW1fbWF0aERhdGEpIHsKKyAgICAgICAgbV9tYXRo
RGF0YSA9IE9wZW5UeXBlTWF0aERhdGE6OmNyZWF0ZShtX3BsYXRmb3JtRGF0YSk7CisgICAgICAg
IGlmICghbV9tYXRoRGF0YS0+aGFzTWF0aERhdGEoKSkKKyAgICAgICAgICAgIG1fbWF0aERhdGEu
Y2xlYXIoKTsKKyAgICB9CisgICAgcmV0dXJuIG1fbWF0aERhdGEuZ2V0KCk7Cit9CisKK1NpbXBs
ZUZvbnREYXRhOjpEZXJpdmVkRm9udERhdGE6On5EZXJpdmVkRm9udERhdGEoKQoreworfQorCitQ
YXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlU2NhbGVkRm9u
dERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNjYWxl
RmFjdG9yKSBjb25zdAoreworICAgIGlmIChpc1NWR0ZvbnQoKSkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICByZXR1cm4gcGxhdGZvcm1DcmVhdGVTY2FsZWRGb250RGF0YShmb250RGVz
Y3JpcHRpb24sIHNjYWxlRmFjdG9yKTsKK30KKworYm9vbCBTaW1wbGVGb250RGF0YTo6YXBwbHlU
cmFuc2Zvcm1zKEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgR2x5cGhCdWZmZXJBZHZhbmNlKiBh
ZHZhbmNlcywgc2l6ZV90IGdseXBoQ291bnQsIFR5cGVzZXR0aW5nRmVhdHVyZXMgdHlwZXNldHRp
bmdGZWF0dXJlcykgY29uc3QKK3sKKyAgICAvLyBXZSBuZWVkIHRvIGhhbmRsZSB0cmFuc2Zvcm1z
IG9uIFNWRyBmb250cyBpbnRlcm5hbGx5LCBzaW5jZSB0aGV5IGFyZSByZW5kZXJlZCBpbnRlcm5h
bGx5LgorICAgIEFTU0VSVCghaXNTVkdGb250KCkpOworI2lmIFBMQVRGT1JNKElPUykgfHwgKFBM
QVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+IDEwODApCisg
ICAgQ1RGb250VHJhbnNmb3JtT3B0aW9ucyBvcHRpb25zID0gKHR5cGVzZXR0aW5nRmVhdHVyZXMg
JiBLZXJuaW5nID8ga0NURm9udFRyYW5zZm9ybUFwcGx5UG9zaXRpb25pbmcgOiAwKSB8ICh0eXBl
c2V0dGluZ0ZlYXR1cmVzICYgTGlnYXR1cmVzID8ga0NURm9udFRyYW5zZm9ybUFwcGx5U2hhcGlu
ZyA6IDApOworICAgIHJldHVybiBDVEZvbnRUcmFuc2Zvcm1HbHlwaHMobV9wbGF0Zm9ybURhdGEu
Y3RGb250KCksIGdseXBocywgcmVpbnRlcnByZXRfY2FzdDxDR1NpemUqPihhZHZhbmNlcyksIGds
eXBoQ291bnQsIG9wdGlvbnMpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZ2x5cGhzKTsKKyAg
ICBVTlVTRURfUEFSQU0oYWR2YW5jZXMpOworICAgIFVOVVNFRF9QQVJBTShnbHlwaENvdW50KTsK
KyAgICBVTlVTRURfUEFSQU0odHlwZXNldHRpbmdGZWF0dXJlcyk7CisgICAgcmV0dXJuIGZhbHNl
OworI2VuZGlmCit9CisKKy8vIEZvbnREYXRhcyBhcmUgbm90IHJlZmNvdW50ZWQgdG8gYXZvaWQg
Y3ljbGVzLgordHlwZWRlZiBIYXNoTWFwPHN0ZDo6cGFpcjxVQ2hhcjMyLCB1bnNpZ25lZD4sIFNp
bXBsZUZvbnREYXRhKj4gQ2hhcmFjdGVyRmFsbGJhY2tNYXA7Cit0eXBlZGVmIEhhc2hNYXA8Y29u
c3QgU2ltcGxlRm9udERhdGEqLCBDaGFyYWN0ZXJGYWxsYmFja01hcD4gU3lzdGVtRmFsbGJhY2tD
YWNoZTsKKworc3RhdGljIFN5c3RlbUZhbGxiYWNrQ2FjaGUmIHN5c3RlbUZhbGxiYWNrQ2FjaGUo
KQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTeXN0ZW1GYWxsYmFja0NhY2hlPiBtYXA7
CisgICAgcmV0dXJuIG1hcC5nZXQoKTsKK30KKworUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1w
bGVGb250RGF0YTo6c3lzdGVtRmFsbGJhY2tGb250RGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGNo
YXJhY3RlciwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgYm9vbCBpc0ZvclBs
YXRmb3JtRm9udCkgY29uc3QKK3sKKyAgICBhdXRvIGZvbnRBZGRSZXN1bHQgPSBzeXN0ZW1GYWxs
YmFja0NhY2hlKCkuYWRkKHRoaXMsIENoYXJhY3RlckZhbGxiYWNrTWFwKCkpOworCisgICAgYXV0
byBrZXkgPSBzdGQ6Om1ha2VfcGFpcihjaGFyYWN0ZXIsIGlzRm9yUGxhdGZvcm1Gb250KTsKKyAg
ICBhdXRvIGNoYXJhY3RlckFkZFJlc3VsdCA9IGZvbnRBZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVl
LmFkZChrZXksIG51bGxwdHIpOworCisgICAgU2ltcGxlRm9udERhdGEqJiBmYWxsYmFja0ZvbnRE
YXRhID0gY2hhcmFjdGVyQWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKKworICAgIGlmICghZmFs
bGJhY2tGb250RGF0YSkgeworICAgICAgICBVQ2hhciBjb2RlVW5pdHNbMl07CisgICAgICAgIGlu
dCBjb2RlVW5pdHNMZW5ndGg7CisgICAgICAgIGlmIChVX0lTX0JNUChjaGFyYWN0ZXIpKSB7Cisg
ICAgICAgICAgICBjb2RlVW5pdHNbMF0gPSBGb250Q2FzY2FkZTo6bm9ybWFsaXplU3BhY2VzKGNo
YXJhY3Rlcik7CisgICAgICAgICAgICBjb2RlVW5pdHNMZW5ndGggPSAxOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgY29kZVVuaXRzWzBdID0gVTE2X0xFQUQoY2hhcmFjdGVyKTsKKyAg
ICAgICAgICAgIGNvZGVVbml0c1sxXSA9IFUxNl9UUkFJTChjaGFyYWN0ZXIpOworICAgICAgICAg
ICAgY29kZVVuaXRzTGVuZ3RoID0gMjsKKyAgICAgICAgfQorCisgICAgICAgIGZhbGxiYWNrRm9u
dERhdGEgPSBmb250Q2FjaGUoKS5zeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoZGVzY3JpcHRp
b24sIHRoaXMsIGlzRm9yUGxhdGZvcm1Gb250LCBjb2RlVW5pdHMsIGNvZGVVbml0c0xlbmd0aCku
Z2V0KCk7CisgICAgICAgIGlmIChmYWxsYmFja0ZvbnREYXRhKQorICAgICAgICAgICAgZmFsbGJh
Y2tGb250RGF0YS0+bV9pc1VzZWRJblN5c3RlbUZhbGxiYWNrQ2FjaGUgPSB0cnVlOworICAgIH0K
KworICAgIHJldHVybiBmYWxsYmFja0ZvbnREYXRhOworfQorCit2b2lkIFNpbXBsZUZvbnREYXRh
OjpyZW1vdmVGcm9tU3lzdGVtRmFsbGJhY2tDYWNoZSgpCit7CisgICAgc3lzdGVtRmFsbGJhY2tD
YWNoZSgpLnJlbW92ZSh0aGlzKTsKKworICAgIGlmICghbV9pc1VzZWRJblN5c3RlbUZhbGxiYWNr
Q2FjaGUpCisgICAgICAgIHJldHVybjsKKworICAgIGZvciAoYXV0byYgY2hhcmFjdGVyTWFwIDog
c3lzdGVtRmFsbGJhY2tDYWNoZSgpLnZhbHVlcygpKSB7CisgICAgICAgIFZlY3RvcjxzdGQ6OnBh
aXI8VUNoYXIzMiwgdW5zaWduZWQ+LCA1MTI+IHRvUmVtb3ZlOworICAgICAgICBmb3IgKGF1dG8m
IGVudHJ5IDogY2hhcmFjdGVyTWFwKSB7CisgICAgICAgICAgICBpZiAoZW50cnkudmFsdWUgPT0g
dGhpcykKKyAgICAgICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQoZW50cnkua2V5KTsKKyAgICAg
ICAgfQorICAgICAgICBmb3IgKGF1dG8mIGtleSA6IHRvUmVtb3ZlKQorICAgICAgICAgICAgY2hh
cmFjdGVyTWFwLnJlbW92ZShrZXkpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAJKHdvcmtp
bmcgY29weSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisjaW5jbHVkZSAiRm9udC5oIgogCiAjaWYg
UExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlO
X1JFUVVJUkVEID4gMTA4MCkKICNpbmNsdWRlICJDb3JlVGV4dFNQSS5oIgpAQCAtNTAsNyArNTAs
NyBAQCB1bnNpZ25lZCBHbHlwaFBhZ2U6OnNfY291bnQgPSAwOwogY29uc3QgZmxvYXQgc21hbGxD
YXBzRm9udFNpemVNdWx0aXBsaWVyID0gMC43ZjsKIGNvbnN0IGZsb2F0IGVtcGhhc2lzTWFya0Zv
bnRTaXplTXVsdGlwbGllciA9IDAuNWY7CiAKLVNpbXBsZUZvbnREYXRhOjpTaW1wbGVGb250RGF0
YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEsIGJvb2wgaXNDdXN0b21Gb250
LCBib29sIGlzTG9hZGluZywgYm9vbCBpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKQorRm9udDo6
Rm9udChjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEsIGJvb2wgaXNDdXN0b21G
b250LCBib29sIGlzTG9hZGluZywgYm9vbCBpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKQogICAg
IDogbV9tYXhDaGFyV2lkdGgoLTEpCiAgICAgLCBtX2F2Z0NoYXJXaWR0aCgtMSkKICAgICAsIG1f
cGxhdGZvcm1EYXRhKHBsYXRmb3JtRGF0YSkKQEAgLTc2LDcgKzc2LDcgQEAgU2ltcGxlRm9udERh
dGE6OlNpbXBsZUZvbnREYXRhKGNvbnN0IEZvbgogI2VuZGlmCiB9CiAKLVNpbXBsZUZvbnREYXRh
OjpTaW1wbGVGb250RGF0YShzdGQ6OnVuaXF1ZV9wdHI8U1ZHRGF0YT4gc3ZnRGF0YSwgZmxvYXQg
Zm9udFNpemUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpCitGb250
OjpGb250KHN0ZDo6dW5pcXVlX3B0cjxTVkdEYXRhPiBzdmdEYXRhLCBmbG9hdCBmb250U2l6ZSwg
Ym9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYykKICAgICA6IG1fcGxhdGZv
cm1EYXRhKEZvbnRQbGF0Zm9ybURhdGEoZm9udFNpemUsIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRp
Y0l0YWxpYykpCiAgICAgLCBtX3N2Z0RhdGEoV1RGOjptb3ZlKHN2Z0RhdGEpKQogICAgICwgbV90
cmVhdEFzRml4ZWRQaXRjaChmYWxzZSkKQEAgLTkzLDExICs5MywxMSBAQCBTaW1wbGVGb250RGF0
YTo6U2ltcGxlRm9udERhdGEoc3RkOjp1bmlxCiAgICAgLCBtX3Nob3VsZE5vdEJlVXNlZEZvckFy
YWJpYyhmYWxzZSkKICNlbmRpZgogewotICAgIG1fc3ZnRGF0YS0+aW5pdGlhbGl6ZUZvbnREYXRh
KHRoaXMsIGZvbnRTaXplKTsKKyAgICBtX3N2Z0RhdGEtPmluaXRpYWxpemVGb250KHRoaXMsIGZv
bnRTaXplKTsKIH0KIAogLy8gRXN0aW1hdGVzIG9mIGF2Z0NoYXJXaWR0aCBhbmQgbWF4Q2hhcldp
ZHRoIGZvciBwbGF0Zm9ybXMgdGhhdCBkb24ndCBzdXBwb3J0IGFjY2Vzc2luZyB0aGVzZSB2YWx1
ZXMgZnJvbSB0aGUgZm9udC4KLXZvaWQgU2ltcGxlRm9udERhdGE6OmluaXRDaGFyV2lkdGhzKCkK
K3ZvaWQgRm9udDo6aW5pdENoYXJXaWR0aHMoKQogewogICAgIGF1dG8qIGdseXBoUGFnZVplcm8g
PSBnbHlwaFBhZ2UoMCk7CiAKQEAgLTExNyw3ICsxMTcsNyBAQCB2b2lkIFNpbXBsZUZvbnREYXRh
Ojppbml0Q2hhcldpZHRocygpCiAgICAgICAgIG1fbWF4Q2hhcldpZHRoID0gc3RkOjptYXgobV9h
dmdDaGFyV2lkdGgsIG1fZm9udE1ldHJpY3MuZmxvYXRBc2NlbnQoKSk7CiB9CiAKLXZvaWQgU2lt
cGxlRm9udERhdGE6OnBsYXRmb3JtR2x5cGhJbml0KCkKK3ZvaWQgRm9udDo6cGxhdGZvcm1HbHlw
aEluaXQoKQogewogICAgIGF1dG8qIGdseXBoUGFnZVplcm8gPSBnbHlwaFBhZ2UoMCk7CiAgICAg
aWYgKCFnbHlwaFBhZ2VaZXJvKSB7CkBAIC0xMzYsNyArMTM2LDcgQEAgdm9pZCBTaW1wbGVGb250
RGF0YTo6cGxhdGZvcm1HbHlwaEluaXQoKQogCiAgICAgLy8gTmFzdHkgaGFjayB0byBkZXRlcm1p
bmUgaWYgd2Ugc2hvdWxkIHJvdW5kIG9yIGNlaWwgc3BhY2Ugd2lkdGhzLgogICAgIC8vIElmIHRo
ZSBmb250IGlzIG1vbm9zcGFjZSBvciBmYWtlIG1vbm9zcGFjZSB3ZSBjZWlsIHRvIGVuc3VyZSB0
aGF0IAotICAgIC8vIGV2ZXJ5IGNoYXJhY3RlciBhbmQgdGhlIHNwYWNlIGFyZSB0aGUgc2FtZSB3
aWR0aC4gIE90aGVyd2lzZSB3ZSByb3VuZC4KKyAgICAvLyBldmVyeSBjaGFyYWN0ZXIgYW5kIHRo
ZSBzcGFjZSBhcmUgdGhlIHNhbWUgd2lkdGguIE90aGVyd2lzZSB3ZSByb3VuZC4KICAgICBtX3Nw
YWNlR2x5cGggPSBnbHlwaFBhZ2VaZXJvLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoJyAnKS5nbHlw
aDsKICAgICBmbG9hdCB3aWR0aCA9IHdpZHRoRm9yR2x5cGgobV9zcGFjZUdseXBoKTsKICAgICBt
X3NwYWNlV2lkdGggPSB3aWR0aDsKQEAgLTE0NywzNyArMTQ3LDM3IEBAIHZvaWQgU2ltcGxlRm9u
dERhdGE6OnBsYXRmb3JtR2x5cGhJbml0KCkKIAogICAgIC8vIEZvcmNlIHRoZSBnbHlwaCBmb3Ig
WkVSTyBXSURUSCBTUEFDRSB0byBoYXZlIHplcm8gd2lkdGgsIHVubGVzcyBpdCBpcyBzaGFyZWQg
d2l0aCBTUEFDRS4KICAgICAvLyBIZWx2ZXRpY2EgaXMgYW4gZXhhbXBsZSBvZiBhIG5vbi16ZXJv
IHdpZHRoIFpFUk8gV0lEVEggU1BBQ0UgZ2x5cGguCi0gICAgLy8gU2VlIDxodHRwOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzE3OD4gYW5kIFNpbXBsZUZvbnREYXRhOjppc1pl
cm9XaWR0aFNwYWNlR2x5cGgoKQorICAgIC8vIFNlZSA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTMxNzg+IGFuZCBGb250Ojppc1plcm9XaWR0aFNwYWNlR2x5cGgoKQog
ICAgIGlmIChtX3plcm9XaWR0aFNwYWNlR2x5cGggPT0gbV9zcGFjZUdseXBoKQogICAgICAgICBt
X3plcm9XaWR0aFNwYWNlR2x5cGggPSAwOwogfQogCi1TaW1wbGVGb250RGF0YTo6flNpbXBsZUZv
bnREYXRhKCkKK0ZvbnQ6On5Gb250KCkKIHsKICAgICByZW1vdmVGcm9tU3lzdGVtRmFsbGJhY2tD
YWNoZSgpOwogfQogCi1zdGF0aWMgYm9vbCBmaWxsR2x5cGhQYWdlKEdseXBoUGFnZSYgcGFnZVRv
RmlsbCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIsIHVu
c2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQorc3Rh
dGljIGJvb2wgZmlsbEdseXBoUGFnZShHbHlwaFBhZ2UmIHBhZ2VUb0ZpbGwsIHVuc2lnbmVkIG9m
ZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5n
dGgsIGNvbnN0IEZvbnQqIGZvbnQpCiB7CiAjaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICBpZiAo
YXV0byogc3ZnRGF0YSA9IGZvbnREYXRhLT5zdmdEYXRhKCkpCi0gICAgICAgIHJldHVybiBzdmdE
YXRhLT5maWxsU1ZHR2x5cGhQYWdlKCZwYWdlVG9GaWxsLCBvZmZzZXQsIGxlbmd0aCwgYnVmZmVy
LCBidWZmZXJMZW5ndGgsIGZvbnREYXRhKTsKKyAgICBpZiAoYXV0byogc3ZnRGF0YSA9IGZvbnQt
PnN2Z0RhdGEoKSkKKyAgICAgICAgcmV0dXJuIHN2Z0RhdGEtPmZpbGxTVkdHbHlwaFBhZ2UoJnBh
Z2VUb0ZpbGwsIG9mZnNldCwgbGVuZ3RoLCBidWZmZXIsIGJ1ZmZlckxlbmd0aCwgZm9udCk7CiAj
ZW5kaWYKLSAgICBib29sIGhhc0dseXBocyA9IHBhZ2VUb0ZpbGwuZmlsbChvZmZzZXQsIGxlbmd0
aCwgYnVmZmVyLCBidWZmZXJMZW5ndGgsIGZvbnREYXRhKTsKKyAgICBib29sIGhhc0dseXBocyA9
IHBhZ2VUb0ZpbGwuZmlsbChvZmZzZXQsIGxlbmd0aCwgYnVmZmVyLCBidWZmZXJMZW5ndGgsIGZv
bnQpOwogI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKLSAgICBpZiAoaGFzR2x5cGhzICYm
IGZvbnREYXRhLT52ZXJ0aWNhbERhdGEoKSkKLSAgICAgICAgZm9udERhdGEtPnZlcnRpY2FsRGF0
YSgpLT5zdWJzdGl0dXRlV2l0aFZlcnRpY2FsR2x5cGhzKGZvbnREYXRhLCAmcGFnZVRvRmlsbCwg
b2Zmc2V0LCBsZW5ndGgpOworICAgIGlmIChoYXNHbHlwaHMgJiYgZm9udC0+dmVydGljYWxEYXRh
KCkpCisgICAgICAgIGZvbnQtPnZlcnRpY2FsRGF0YSgpLT5zdWJzdGl0dXRlV2l0aFZlcnRpY2Fs
R2x5cGhzKGZvbnQsICZwYWdlVG9GaWxsLCBvZmZzZXQsIGxlbmd0aCk7CiAjZW5kaWYKICAgICBy
ZXR1cm4gaGFzR2x5cGhzOwogfQogCi1zdGF0aWMgUmVmUHRyPEdseXBoUGFnZT4gY3JlYXRlQW5k
RmlsbEdseXBoUGFnZSh1bnNpZ25lZCBwYWdlTnVtYmVyLCBjb25zdCBTaW1wbGVGb250RGF0YSog
Zm9udERhdGEpCitzdGF0aWMgUmVmUHRyPEdseXBoUGFnZT4gY3JlYXRlQW5kRmlsbEdseXBoUGFn
ZSh1bnNpZ25lZCBwYWdlTnVtYmVyLCBjb25zdCBGb250KiBmb250KQogewogI2lmIFBMQVRGT1JN
KElPUykKICAgICAvLyBGSVhNRTogVGltZXMgTmV3IFJvbWFuIGNvbnRhaW5zIEFyYWJpYyBnbHlw
aHMsIGJ1dCBDb3JlIFRleHQgZG9lc24ndCBrbm93IGhvdyB0byBzaGFwZSB0aGVtLiBTZWUgPHJk
YXI6Ly9wcm9ibGVtLzk4MjM5NzU+LgotICAgIC8vIE9uY2Ugd2UgaGF2ZSB0aGUgZml4IGZvciA8
cmRhcjovL3Byb2JsZW0vOTgyMzk3NT4gdGhlbiByZW1vdmUgdGhpcyBjb2RlIHRvZ2V0aGVyIHdp
dGggU2ltcGxlRm9udERhdGE6OnNob3VsZE5vdEJlVXNlZEZvckFyYWJpYygpCisgICAgLy8gT25j
ZSB3ZSBoYXZlIHRoZSBmaXggZm9yIDxyZGFyOi8vcHJvYmxlbS85ODIzOTc1PiB0aGVuIHJlbW92
ZSB0aGlzIGNvZGUgdG9nZXRoZXIgd2l0aCBGb250OjpzaG91bGROb3RCZVVzZWRGb3JBcmFiaWMo
KQogICAgIC8vIGluIDxyZGFyOi8vcHJvYmxlbS8xMjA5NjgzNT4uCi0gICAgaWYgKHBhZ2VOdW1i
ZXIgPT0gNiAmJiBmb250RGF0YS0+c2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKCkpCisgICAgaWYg
KHBhZ2VOdW1iZXIgPT0gNiAmJiBmb250LT5zaG91bGROb3RCZVVzZWRGb3JBcmFiaWMoKSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAjZW5kaWYKIApAQCAtMTkwLDcgKzE5MCw3IEBAIHN0YXRp
YyBSZWZQdHI8R2x5cGhQYWdlPiBjcmVhdGVBbmRGaWxsR2wKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IEdseXBoUGFnZTo6c2l6ZTsgaSsrKQogICAgICAgICAgICAgYnVmZmVyW2ld
ID0gc3RhcnQgKyBpOwogCi0gICAgICAgIGlmIChzdGFydCA9PSAwKSB7CisgICAgICAgIGlmICgh
c3RhcnQpIHsKICAgICAgICAgICAgIC8vIENvbnRyb2wgY2hhcmFjdGVycyBtdXN0IG5vdCByZW5k
ZXIgYXQgYWxsLgogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDB4MjA7ICsr
aSkKICAgICAgICAgICAgICAgICBidWZmZXJbaV0gPSB6ZXJvV2lkdGhTcGFjZTsKQEAgLTIzNSwx
MiArMjM1LDEyIEBAIHN0YXRpYyBSZWZQdHI8R2x5cGhQYWdlPiBjcmVhdGVBbmRGaWxsR2wKICAg
ICAvLyBTdWNjZXNzIGlzIG5vdCBndWFyYW50ZWVkLiBGb3IgZXhhbXBsZSwgVGltZXMgZmFpbHMg
dG8gZmlsbCBwYWdlIDI2MCwgZ2l2aW5nIGdseXBoIGRhdGEKICAgICAvLyBmb3Igb25seSAxMjgg
b3V0IG9mIDI1NiBjaGFyYWN0ZXJzLgogICAgIFJlZlB0cjxHbHlwaFBhZ2U+IGdseXBoUGFnZTsK
LSAgICBpZiAoR2x5cGhQYWdlOjptYXlVc2VNaXhlZEZvbnREYXRhV2hlbkZpbGxpbmcoYnVmZmVy
LCBidWZmZXJMZW5ndGgsIGZvbnREYXRhKSkKLSAgICAgICAgZ2x5cGhQYWdlID0gR2x5cGhQYWdl
OjpjcmVhdGVGb3JNaXhlZEZvbnREYXRhKCk7CisgICAgaWYgKEdseXBoUGFnZTo6bWF5VXNlTWl4
ZWRGb250c1doZW5GaWxsaW5nKGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCBmb250KSkKKyAgICAgICAg
Z2x5cGhQYWdlID0gR2x5cGhQYWdlOjpjcmVhdGVGb3JNaXhlZEZvbnRzKCk7CiAgICAgZWxzZQot
ICAgICAgICBnbHlwaFBhZ2UgPSBHbHlwaFBhZ2U6OmNyZWF0ZUZvclNpbmdsZUZvbnREYXRhKGZv
bnREYXRhKTsKKyAgICAgICAgZ2x5cGhQYWdlID0gR2x5cGhQYWdlOjpjcmVhdGVGb3JTaW5nbGVG
b250KGZvbnQpOwogCi0gICAgYm9vbCBoYXZlR2x5cGhzID0gZmlsbEdseXBoUGFnZSgqZ2x5cGhQ
YWdlLCAwLCBHbHlwaFBhZ2U6OnNpemUsIGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCBmb250RGF0YSk7
CisgICAgYm9vbCBoYXZlR2x5cGhzID0gZmlsbEdseXBoUGFnZSgqZ2x5cGhQYWdlLCAwLCBHbHlw
aFBhZ2U6OnNpemUsIGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCBmb250KTsKICAgICBpZiAoIWhhdmVH
bHlwaHMpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0yNDgsOSArMjQ4LDkgQEAgc3Rh
dGljIFJlZlB0cjxHbHlwaFBhZ2U+IGNyZWF0ZUFuZEZpbGxHbAogICAgIHJldHVybiBnbHlwaFBh
Z2U7CiB9CiAKLWNvbnN0IEdseXBoUGFnZSogU2ltcGxlRm9udERhdGE6OmdseXBoUGFnZSh1bnNp
Z25lZCBwYWdlTnVtYmVyKSBjb25zdAorY29uc3QgR2x5cGhQYWdlKiBGb250OjpnbHlwaFBhZ2Uo
dW5zaWduZWQgcGFnZU51bWJlcikgY29uc3QKIHsKLSAgICBpZiAocGFnZU51bWJlciA9PSAwKSB7
CisgICAgaWYgKCFwYWdlTnVtYmVyKSB7CiAgICAgICAgIGlmICghbV9nbHlwaFBhZ2VaZXJvKQog
ICAgICAgICAgICAgbV9nbHlwaFBhZ2VaZXJvID0gY3JlYXRlQW5kRmlsbEdseXBoUGFnZSgwLCB0
aGlzKTsKICAgICAgICAgcmV0dXJuIG1fZ2x5cGhQYWdlWmVyby5nZXQoKTsKQEAgLTI2Miw3ICsy
NjIsNyBAQCBjb25zdCBHbHlwaFBhZ2UqIFNpbXBsZUZvbnREYXRhOjpnbHlwaFBhCiAgICAgcmV0
dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7CiB9CiAKLUdseXBoIFNpbXBsZUZv
bnREYXRhOjpnbHlwaEZvckNoYXJhY3RlcihVQ2hhcjMyIGNoYXJhY3RlcikgY29uc3QKK0dseXBo
IEZvbnQ6OmdseXBoRm9yQ2hhcmFjdGVyKFVDaGFyMzIgY2hhcmFjdGVyKSBjb25zdAogewogICAg
IGF1dG8qIHBhZ2UgPSBnbHlwaFBhZ2UoY2hhcmFjdGVyIC8gR2x5cGhQYWdlOjpzaXplKTsKICAg
ICBpZiAoIXBhZ2UpCkBAIC0yNzAsNyArMjcwLDcgQEAgR2x5cGggU2ltcGxlRm9udERhdGE6Omds
eXBoRm9yQ2hhcmFjdGVyKAogICAgIHJldHVybiBwYWdlLT5nbHlwaEF0KGNoYXJhY3RlciAlIEds
eXBoUGFnZTo6c2l6ZSk7CiB9CiAKLUdseXBoRGF0YSBTaW1wbGVGb250RGF0YTo6Z2x5cGhEYXRh
Rm9yQ2hhcmFjdGVyKFVDaGFyMzIgY2hhcmFjdGVyKSBjb25zdAorR2x5cGhEYXRhIEZvbnQ6Omds
eXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGNoYXJhY3RlcikgY29uc3QKIHsKICAgICBhdXRv
KiBwYWdlID0gZ2x5cGhQYWdlKGNoYXJhY3RlciAvIEdseXBoUGFnZTo6c2l6ZSk7CiAgICAgaWYg
KCFwYWdlKQpAQCAtMjc4LDcgKzI3OCw3IEBAIEdseXBoRGF0YSBTaW1wbGVGb250RGF0YTo6Z2x5
cGhEYXRhRm9yQ2gKICAgICByZXR1cm4gcGFnZS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJh
Y3Rlcik7CiB9CiAKLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjp2
ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250RGF0YSgpIGNvbnN0CitQYXNzUmVmUHRyPEZvbnQ+
IEZvbnQ6OnZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbkZvbnQoKSBjb25zdAogewogICAgIGlmICgh
bV9kZXJpdmVkRm9udERhdGEpCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gc3RkOjptYWtl
X3VuaXF1ZTxEZXJpdmVkRm9udERhdGE+KGlzQ3VzdG9tRm9udCgpKTsKQEAgLTI5MCw3ICsyOTAs
NyBAQCBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0CiAgICAgcmV0dXJu
IG1fZGVyaXZlZEZvbnREYXRhLT52ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb247CiB9CiAKLVBhc3NS
ZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjp1cHJpZ2h0T3JpZW50YXRpb25G
b250RGF0YSgpIGNvbnN0CitQYXNzUmVmUHRyPEZvbnQ+IEZvbnQ6OnVwcmlnaHRPcmllbnRhdGlv
bkZvbnQoKSBjb25zdAogewogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEpCiAgICAgICAgIG1f
ZGVyaXZlZEZvbnREYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxEZXJpdmVkRm9udERhdGE+KGlzQ3Vz
dG9tRm9udCgpKTsKQEAgLTI5OSwyNyArMjk5LDI3IEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERh
dGE+IFNpbXBsZUZvbnREYXQKICAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPnVwcmlnaHRP
cmllbnRhdGlvbjsKIH0KIAotUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERh
dGE6OnNtYWxsQ2Fwc0ZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0
aW9uKSBjb25zdAorUGFzc1JlZlB0cjxGb250PiBGb250OjpzbWFsbENhcHNGb250KGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAogewogICAgIGlmICghbV9kZXJp
dmVkRm9udERhdGEpCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gc3RkOjptYWtlX3VuaXF1
ZTxEZXJpdmVkRm9udERhdGE+KGlzQ3VzdG9tRm9udCgpKTsKICAgICBpZiAoIW1fZGVyaXZlZEZv
bnREYXRhLT5zbWFsbENhcHMpCi0gICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMg
PSBjcmVhdGVTY2FsZWRGb250RGF0YShmb250RGVzY3JpcHRpb24sIHNtYWxsQ2Fwc0ZvbnRTaXpl
TXVsdGlwbGllcik7CisgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMgPSBjcmVh
dGVTY2FsZWRGb250KGZvbnREZXNjcmlwdGlvbiwgc21hbGxDYXBzRm9udFNpemVNdWx0aXBsaWVy
KTsKIAogICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzOwogfQogCi1QYXNz
UmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6ZW1waGFzaXNNYXJrRm9udERh
dGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0CitQYXNzUmVm
UHRyPEZvbnQ+IEZvbnQ6OmVtcGhhc2lzTWFya0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBm
b250RGVzY3JpcHRpb24pIGNvbnN0CiB7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKICAg
ICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPERlcml2ZWRGb250RGF0
YT4oaXNDdXN0b21Gb250KCkpOwogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lz
TWFyaykKLSAgICAgICAgbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyayA9IGNyZWF0ZVNj
YWxlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgZW1waGFzaXNNYXJrRm9udFNpemVNdWx0aXBs
aWVyKTsKKyAgICAgICAgbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyayA9IGNyZWF0ZVNj
YWxlZEZvbnQoZm9udERlc2NyaXB0aW9uLCBlbXBoYXNpc01hcmtGb250U2l6ZU11bHRpcGxpZXIp
OwogCiAgICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcms7CiB9CiAKLVBh
c3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpicm9rZW5JZGVvZ3JhcGhG
b250RGF0YSgpIGNvbnN0CitQYXNzUmVmUHRyPEZvbnQ+IEZvbnQ6OmJyb2tlbklkZW9ncmFwaEZv
bnQoKSBjb25zdAogewogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEpCiAgICAgICAgIG1fZGVy
aXZlZEZvbnREYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxEZXJpdmVkRm9udERhdGE+KGlzQ3VzdG9t
Rm9udCgpKTsKQEAgLTMzMCw3ICszMzAsNyBAQCBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBT
aW1wbGVGb250RGF0CiAgICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5icm9rZW5JZGVvZ3Jh
cGg7CiB9CiAKLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpub25T
eW50aGV0aWNJdGFsaWNGb250RGF0YSgpIGNvbnN0CitQYXNzUmVmUHRyPEZvbnQ+IEZvbnQ6Om5v
blN5bnRoZXRpY0l0YWxpY0ZvbnQoKSBjb25zdAogewogICAgIGlmICghbV9kZXJpdmVkRm9udERh
dGEpCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxEZXJpdmVk
Rm9udERhdGE+KGlzQ3VzdG9tRm9udCgpKTsKQEAgLTM0NSw3ICszNDUsNyBAQCBQYXNzUmVmUHRy
PFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0CiB9CiAKICNpZm5kZWYgTkRFQlVHCi1TdHJp
bmcgU2ltcGxlRm9udERhdGE6OmRlc2NyaXB0aW9uKCkgY29uc3QKK1N0cmluZyBGb250OjpkZXNj
cmlwdGlvbigpIGNvbnN0CiB7CiAgICAgaWYgKGlzU1ZHRm9udCgpKQogICAgICAgICByZXR1cm4g
IltTVkcgZm9udF0iOwpAQCAtMzU2LDcgKzM1Niw3IEBAIFN0cmluZyBTaW1wbGVGb250RGF0YTo6
ZGVzY3JpcHRpb24oKSBjb24KIH0KICNlbmRpZgogCi1jb25zdCBPcGVuVHlwZU1hdGhEYXRhKiBT
aW1wbGVGb250RGF0YTo6bWF0aERhdGEoKSBjb25zdAorY29uc3QgT3BlblR5cGVNYXRoRGF0YSog
Rm9udDo6bWF0aERhdGEoKSBjb25zdAogewogICAgIGlmIChtX2lzTG9hZGluZykKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CkBAIC0zNjgsMTkgKzM2OCwxOSBAQCBjb25zdCBPcGVuVHlwZU1hdGhE
YXRhKiBTaW1wbGVGb250RGF0YTo6CiAgICAgcmV0dXJuIG1fbWF0aERhdGEuZ2V0KCk7CiB9CiAK
LVNpbXBsZUZvbnREYXRhOjpEZXJpdmVkRm9udERhdGE6On5EZXJpdmVkRm9udERhdGEoKQorRm9u
dDo6RGVyaXZlZEZvbnREYXRhOjp+RGVyaXZlZEZvbnREYXRhKCkKIHsKIH0KIAotUGFzc1JlZlB0
cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZVNjYWxlZEZvbnREYXRhKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBzY2FsZUZhY3Rvcikg
Y29uc3QKK1Bhc3NSZWZQdHI8Rm9udD4gRm9udDo6Y3JlYXRlU2NhbGVkRm9udChjb25zdCBGb250
RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0CiB7
CiAgICAgaWYgKGlzU1ZHRm9udCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJl
dHVybiBwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgc2NhbGVG
YWN0b3IpOworICAgIHJldHVybiBwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZvbnQoZm9udERlc2NyaXB0
aW9uLCBzY2FsZUZhY3Rvcik7CiB9CiAKLWJvb2wgU2ltcGxlRm9udERhdGE6OmFwcGx5VHJhbnNm
b3JtcyhHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5j
ZXMsIHNpemVfdCBnbHlwaENvdW50LCBUeXBlc2V0dGluZ0ZlYXR1cmVzIHR5cGVzZXR0aW5nRmVh
dHVyZXMpIGNvbnN0Citib29sIEZvbnQ6OmFwcGx5VHJhbnNmb3JtcyhHbHlwaEJ1ZmZlckdseXBo
KiBnbHlwaHMsIEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHNpemVfdCBnbHlwaENvdW50
LCBUeXBlc2V0dGluZ0ZlYXR1cmVzIHR5cGVzZXR0aW5nRmVhdHVyZXMpIGNvbnN0CiB7CiAgICAg
Ly8gV2UgbmVlZCB0byBoYW5kbGUgdHJhbnNmb3JtcyBvbiBTVkcgZm9udHMgaW50ZXJuYWxseSwg
c2luY2UgdGhleSBhcmUgcmVuZGVyZWQgaW50ZXJuYWxseS4KICAgICBBU1NFUlQoIWlzU1ZHRm9u
dCgpKTsKQEAgLTM5Niw5ICszOTYsOSBAQCBib29sIFNpbXBsZUZvbnREYXRhOjphcHBseVRyYW5z
Zm9ybXMoR2x5CiAjZW5kaWYKIH0KIAotLy8gRm9udERhdGFzIGFyZSBub3QgcmVmY291bnRlZCB0
byBhdm9pZCBjeWNsZXMuCi10eXBlZGVmIEhhc2hNYXA8c3RkOjpwYWlyPFVDaGFyMzIsIHVuc2ln
bmVkPiwgU2ltcGxlRm9udERhdGEqPiBDaGFyYWN0ZXJGYWxsYmFja01hcDsKLXR5cGVkZWYgSGFz
aE1hcDxjb25zdCBTaW1wbGVGb250RGF0YSosIENoYXJhY3RlckZhbGxiYWNrTWFwPiBTeXN0ZW1G
YWxsYmFja0NhY2hlOworLy8gRm9udHMgYXJlIG5vdCByZWYnZCB0byBhdm9pZCBjeWNsZXMuCit0
eXBlZGVmIEhhc2hNYXA8c3RkOjpwYWlyPFVDaGFyMzIsIHVuc2lnbmVkPiwgRm9udCo+IENoYXJh
Y3RlckZhbGxiYWNrTWFwOwordHlwZWRlZiBIYXNoTWFwPGNvbnN0IEZvbnQqLCBDaGFyYWN0ZXJG
YWxsYmFja01hcD4gU3lzdGVtRmFsbGJhY2tDYWNoZTsKIAogc3RhdGljIFN5c3RlbUZhbGxiYWNr
Q2FjaGUmIHN5c3RlbUZhbGxiYWNrQ2FjaGUoKQogewpAQCAtNDA2LDE2ICs0MDYsMTYgQEAgc3Rh
dGljIFN5c3RlbUZhbGxiYWNrQ2FjaGUmIHN5c3RlbUZhbGxiYQogICAgIHJldHVybiBtYXAuZ2V0
KCk7CiB9CiAKLVJlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OnN5c3RlbUZh
bGxiYWNrRm9udERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjaGFyYWN0ZXIsIGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGJvb2wgaXNGb3JQbGF0Zm9ybUZvbnQpIGNvbnN0CitS
ZWZQdHI8Rm9udD4gRm9udDo6c3lzdGVtRmFsbGJhY2tGb250Rm9yQ2hhcmFjdGVyKFVDaGFyMzIg
Y2hhcmFjdGVyLCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBib29sIGlzRm9y
UGxhdGZvcm1Gb250KSBjb25zdAogewogICAgIGF1dG8gZm9udEFkZFJlc3VsdCA9IHN5c3RlbUZh
bGxiYWNrQ2FjaGUoKS5hZGQodGhpcywgQ2hhcmFjdGVyRmFsbGJhY2tNYXAoKSk7CiAKICAgICBh
dXRvIGtleSA9IHN0ZDo6bWFrZV9wYWlyKGNoYXJhY3RlciwgaXNGb3JQbGF0Zm9ybUZvbnQpOwog
ICAgIGF1dG8gY2hhcmFjdGVyQWRkUmVzdWx0ID0gZm9udEFkZFJlc3VsdC5pdGVyYXRvci0+dmFs
dWUuYWRkKGtleSwgbnVsbHB0cik7CiAKLSAgICBTaW1wbGVGb250RGF0YSomIGZhbGxiYWNrRm9u
dERhdGEgPSBjaGFyYWN0ZXJBZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOworICAgIEZvbnQqJiBm
YWxsYmFja0ZvbnQgPSBjaGFyYWN0ZXJBZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogCi0gICAg
aWYgKCFmYWxsYmFja0ZvbnREYXRhKSB7CisgICAgaWYgKCFmYWxsYmFja0ZvbnQpIHsKICAgICAg
ICAgVUNoYXIgY29kZVVuaXRzWzJdOwogICAgICAgICBpbnQgY29kZVVuaXRzTGVuZ3RoOwogICAg
ICAgICBpZiAoVV9JU19CTVAoY2hhcmFjdGVyKSkgewpAQCAtNDI3LDE1ICs0MjcsMTUgQEAgUmVm
UHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6cwogICAgICAgICAgICAgY29kZVVu
aXRzTGVuZ3RoID0gMjsKICAgICAgICAgfQogCi0gICAgICAgIGZhbGxiYWNrRm9udERhdGEgPSBm
b250Q2FjaGUoKS5zeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoZGVzY3JpcHRpb24sIHRoaXMs
IGlzRm9yUGxhdGZvcm1Gb250LCBjb2RlVW5pdHMsIGNvZGVVbml0c0xlbmd0aCkuZ2V0KCk7Ci0g
ICAgICAgIGlmIChmYWxsYmFja0ZvbnREYXRhKQotICAgICAgICAgICAgZmFsbGJhY2tGb250RGF0
YS0+bV9pc1VzZWRJblN5c3RlbUZhbGxiYWNrQ2FjaGUgPSB0cnVlOworICAgICAgICBmYWxsYmFj
a0ZvbnQgPSBmb250Q2FjaGUoKS5zeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoZGVzY3JpcHRp
b24sIHRoaXMsIGlzRm9yUGxhdGZvcm1Gb250LCBjb2RlVW5pdHMsIGNvZGVVbml0c0xlbmd0aCku
Z2V0KCk7CisgICAgICAgIGlmIChmYWxsYmFja0ZvbnQpCisgICAgICAgICAgICBmYWxsYmFja0Zv
bnQtPm1faXNVc2VkSW5TeXN0ZW1GYWxsYmFja0NhY2hlID0gdHJ1ZTsKICAgICB9CiAKLSAgICBy
ZXR1cm4gZmFsbGJhY2tGb250RGF0YTsKKyAgICByZXR1cm4gZmFsbGJhY2tGb250OwogfQogCi12
b2lkIFNpbXBsZUZvbnREYXRhOjpyZW1vdmVGcm9tU3lzdGVtRmFsbGJhY2tDYWNoZSgpCit2b2lk
IEZvbnQ6OnJlbW92ZUZyb21TeXN0ZW1GYWxsYmFja0NhY2hlKCkKIHsKICAgICBzeXN0ZW1GYWxs
YmFja0NhY2hlKCkucmVtb3ZlKHRoaXMpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udC5oCShyZXZpc2lvbiAxNzg2NTApCShmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmg6MTc4NjUwKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzY5
IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIGludGVybmFsIGZvbnQgaW1wbGVt
ZW50YXRpb24uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4LCAyMDEwLCAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4
IFRvcmNoIE1vYmlsZSwgSW5jLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBTaW1wbGVGb250RGF0YV9oCisjZGVmaW5l
IFNpbXBsZUZvbnREYXRhX2gKKworI2luY2x1ZGUgIkZvbnRCYXNlbGluZS5oIgorI2luY2x1ZGUg
IkZvbnRNZXRyaWNzLmgiCisjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgorI2luY2x1ZGUg
IkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCisjaW5jbHVkZSAiR2x5cGhN
ZXRyaWNzTWFwLmgiCisjaW5jbHVkZSAiR2x5cGhQYWdlLmgiCisjaW5jbHVkZSAiT3BlblR5cGVN
YXRoRGF0YS5oIgorI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKKyNpbmNsdWRlICJPcGVu
VHlwZVZlcnRpY2FsRGF0YS5oIgorI2VuZGlmCisjaW5jbHVkZSAiVHlwZXNldHRpbmdGZWF0dXJl
cy5oIgorI2luY2x1ZGUgPHd0Zi9UeXBlQ2FzdHMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdIYXNoLmg+CisKKyNpZiBQTEFURk9STShDT0NPQSkKKyNpbmNsdWRlICJXZWJDb3JlU3lzdGVt
SW50ZXJmYWNlLmgiCisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2VuZGlmCisKKyNpZiBQ
TEFURk9STShXSU4pCisjaW5jbHVkZSA8dXNwMTAuaD4KKyNlbmRpZgorCisjaWYgVVNFKENBSVJP
KQorI2luY2x1ZGUgPGNhaXJvLmg+CisjZW5kaWYKKworI2lmIFVTRShDRykKKyNpbmNsdWRlIDxX
ZWJDb3JlL0NvcmVHcmFwaGljc1NQSS5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgR2x5cGhQYWdlOworY2xhc3MgRm9udERlc2NyaXB0aW9uOworY2xhc3MgU2hhcmVk
QnVmZmVyOworc3RydWN0IEdseXBoRGF0YTsKK3N0cnVjdCBXaWR0aEl0ZXJhdG9yOworCitlbnVt
IEZvbnREYXRhVmFyaWFudCB7IEF1dG9WYXJpYW50LCBOb3JtYWxWYXJpYW50LCBTbWFsbENhcHNW
YXJpYW50LCBFbXBoYXNpc01hcmtWYXJpYW50LCBCcm9rZW5JZGVvZ3JhcGhWYXJpYW50IH07Citl
bnVtIFBpdGNoIHsgVW5rbm93blBpdGNoLCBGaXhlZFBpdGNoLCBWYXJpYWJsZVBpdGNoIH07CisK
K2NsYXNzIFNpbXBsZUZvbnREYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8U2ltcGxlRm9udERhdGE+
IHsKK3B1YmxpYzoKKyAgICBjbGFzcyBTVkdEYXRhIHsKKyAgICAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIH5TVkdEYXRhKCkgeyB9CisK
KyAgICAgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVGb250RGF0YShTaW1wbGVGb250RGF0YSos
IGZsb2F0IGZvbnRTaXplKSA9IDA7CisgICAgICAgIHZpcnR1YWwgZmxvYXQgd2lkdGhGb3JTVkdH
bHlwaChHbHlwaCwgZmxvYXQgZm9udFNpemUpIGNvbnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCBi
b29sIGZpbGxTVkdHbHlwaFBhZ2UoR2x5cGhQYWdlKiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25l
ZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgU2lt
cGxlRm9udERhdGEqKSBjb25zdCA9IDA7CisgICAgfTsKKworICAgIC8vIFVzZWQgdG8gY3JlYXRl
IHBsYXRmb3JtIGZvbnRzLgorICAgIHN0YXRpYyBSZWY8U2ltcGxlRm9udERhdGE+IGNyZWF0ZShj
b25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEsIGJvb2wgaXNDdXN0b21Gb250ID0g
ZmFsc2UsIGJvb2wgaXNMb2FkaW5nID0gZmFsc2UsIGJvb2wgaXNUZXh0T3JpZW50YXRpb25GYWxs
YmFjayA9IGZhbHNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2ltcGxl
Rm9udERhdGEocGxhdGZvcm1EYXRhLCBpc0N1c3RvbUZvbnQsIGlzTG9hZGluZywgaXNUZXh0T3Jp
ZW50YXRpb25GYWxsYmFjaykpOworICAgIH0KKworICAgIC8vIFVzZWQgdG8gY3JlYXRlIFNWRyBG
b250cy4KKyAgICBzdGF0aWMgUmVmPFNpbXBsZUZvbnREYXRhPiBjcmVhdGUoc3RkOjp1bmlxdWVf
cHRyPFNWR0RhdGE+IHN2Z0RhdGEsIGZsb2F0IGZvbnRTaXplLCBib29sIHN5bnRoZXRpY0JvbGQs
IGJvb2wgc3ludGhldGljSXRhbGljKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgU2ltcGxlRm9udERhdGEoV1RGOjptb3ZlKHN2Z0RhdGEpLCBmb250U2l6ZSwgc3ludGhldGlj
Qm9sZCwgc3ludGhldGljSXRhbGljKSk7CisgICAgfQorCisgICAgflNpbXBsZUZvbnREYXRhKCk7
CisKKyAgICBzdGF0aWMgY29uc3QgU2ltcGxlRm9udERhdGEqIHN5c3RlbUZhbGxiYWNrKCkgeyBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBTaW1wbGVGb250RGF0YSo+KC0xKTsgfQorCisg
ICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhKCkgY29uc3QgeyByZXR1cm4g
bV9wbGF0Zm9ybURhdGE7IH0KKyAgICBjb25zdCBPcGVuVHlwZU1hdGhEYXRhKiBtYXRoRGF0YSgp
IGNvbnN0OworI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKKyAgICBjb25zdCBPcGVuVHlw
ZVZlcnRpY2FsRGF0YSogdmVydGljYWxEYXRhKCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0aWNhbERh
dGEuZ2V0KCk7IH0KKyNlbmRpZgorCisgICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gc21h
bGxDYXBzRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJikgY29uc3Q7CisgICAgUGFzc1Jl
ZlB0cjxTaW1wbGVGb250RGF0YT4gZW1waGFzaXNNYXJrRm9udERhdGEoY29uc3QgRm9udERlc2Ny
aXB0aW9uJikgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gYnJva2VuSWRl
b2dyYXBoRm9udERhdGEoKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBu
b25TeW50aGV0aWNJdGFsaWNGb250RGF0YSgpIGNvbnN0OworCisgICAgUGFzc1JlZlB0cjxTaW1w
bGVGb250RGF0YT4gdmFyaWFudEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3Jp
cHRpb24sIEZvbnREYXRhVmFyaWFudCB2YXJpYW50KSBjb25zdAorICAgIHsKKyAgICAgICAgc3dp
dGNoICh2YXJpYW50KSB7CisgICAgICAgIGNhc2UgU21hbGxDYXBzVmFyaWFudDoKKyAgICAgICAg
ICAgIHJldHVybiBzbWFsbENhcHNGb250RGF0YShkZXNjcmlwdGlvbik7CisgICAgICAgIGNhc2Ug
RW1waGFzaXNNYXJrVmFyaWFudDoKKyAgICAgICAgICAgIHJldHVybiBlbXBoYXNpc01hcmtGb250
RGF0YShkZXNjcmlwdGlvbik7CisgICAgICAgIGNhc2UgQnJva2VuSWRlb2dyYXBoVmFyaWFudDoK
KyAgICAgICAgICAgIHJldHVybiBicm9rZW5JZGVvZ3JhcGhGb250RGF0YSgpOworICAgICAgICBj
YXNlIEF1dG9WYXJpYW50OgorICAgICAgICBjYXNlIE5vcm1hbFZhcmlhbnQ6CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgcmV0dXJuIGNvbnN0X2Nhc3Q8U2ltcGxlRm9udERhdGEqPih0aGlzKTsKKyAgICB9CisKKyAg
ICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiB2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250
RGF0YSgpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IHVwcmlnaHRPcmll
bnRhdGlvbkZvbnREYXRhKCkgY29uc3Q7CisKKyAgICBib29sIGhhc1ZlcnRpY2FsR2x5cGhzKCkg
Y29uc3QgeyByZXR1cm4gbV9oYXNWZXJ0aWNhbEdseXBoczsgfQorICAgIGJvb2wgaXNUZXh0T3Jp
ZW50YXRpb25GYWxsYmFjaygpIGNvbnN0IHsgcmV0dXJuIG1faXNUZXh0T3JpZW50YXRpb25GYWxs
YmFjazsgfQorCisgICAgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzKCkgeyByZXR1cm4gbV9mb250
TWV0cmljczsgfQorICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBmb250TWV0cmljcygpIGNvbnN0IHsg
cmV0dXJuIG1fZm9udE1ldHJpY3M7IH0KKyAgICBmbG9hdCBzaXplUGVyVW5pdCgpIGNvbnN0IHsg
cmV0dXJuIHBsYXRmb3JtRGF0YSgpLnNpemUoKSAvIChmb250TWV0cmljcygpLnVuaXRzUGVyRW0o
KSA/IGZvbnRNZXRyaWNzKCkudW5pdHNQZXJFbSgpIDogMSk7IH0KKworICAgIGZsb2F0IG1heENo
YXJXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4Q2hhcldpZHRoOyB9CisgICAgdm9pZCBzZXRN
YXhDaGFyV2lkdGgoZmxvYXQgbWF4Q2hhcldpZHRoKSB7IG1fbWF4Q2hhcldpZHRoID0gbWF4Q2hh
cldpZHRoOyB9CisKKyAgICBmbG9hdCBhdmdDaGFyV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2F2
Z0NoYXJXaWR0aDsgfQorICAgIHZvaWQgc2V0QXZnQ2hhcldpZHRoKGZsb2F0IGF2Z0NoYXJXaWR0
aCkgeyBtX2F2Z0NoYXJXaWR0aCA9IGF2Z0NoYXJXaWR0aDsgfQorCisgICAgRmxvYXRSZWN0IGJv
dW5kc0ZvckdseXBoKEdseXBoKSBjb25zdDsKKyAgICBmbG9hdCB3aWR0aEZvckdseXBoKEdseXBo
IGdseXBoKSBjb25zdDsKKyAgICBGbG9hdFJlY3QgcGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlw
aCkgY29uc3Q7CisgICAgZmxvYXQgcGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoKSBjb25zdDsK
KworICAgIGZsb2F0IHNwYWNlV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3NwYWNlV2lkdGg7IH0K
KyAgICBmbG9hdCBhZGp1c3RlZFNwYWNlV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2FkanVzdGVk
U3BhY2VXaWR0aDsgfQorICAgIHZvaWQgc2V0U3BhY2VXaWR0aHMoZmxvYXQgc3BhY2VXaWR0aCkK
KyAgICB7CisgICAgICAgIG1fc3BhY2VXaWR0aCA9IHNwYWNlV2lkdGg7CisgICAgICAgIG1fYWRq
dXN0ZWRTcGFjZVdpZHRoID0gc3BhY2VXaWR0aDsKKyAgICB9CisKKyNpZiBVU0UoQ0cpIHx8IFVT
RShDQUlSTykKKyAgICBmbG9hdCBzeW50aGV0aWNCb2xkT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4g
bV9zeW50aGV0aWNCb2xkT2Zmc2V0OyB9CisjZW5kaWYKKworICAgIEdseXBoIHNwYWNlR2x5cGgo
KSBjb25zdCB7IHJldHVybiBtX3NwYWNlR2x5cGg7IH0KKyAgICB2b2lkIHNldFNwYWNlR2x5cGgo
R2x5cGggc3BhY2VHbHlwaCkgeyBtX3NwYWNlR2x5cGggPSBzcGFjZUdseXBoOyB9CisgICAgR2x5
cGggemVyb1dpZHRoU3BhY2VHbHlwaCgpIGNvbnN0IHsgcmV0dXJuIG1femVyb1dpZHRoU3BhY2VH
bHlwaDsgfQorICAgIHZvaWQgc2V0WmVyb1dpZHRoU3BhY2VHbHlwaChHbHlwaCBzcGFjZUdseXBo
KSB7IG1femVyb1dpZHRoU3BhY2VHbHlwaCA9IHNwYWNlR2x5cGg7IH0KKyAgICBib29sIGlzWmVy
b1dpZHRoU3BhY2VHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QgeyByZXR1cm4gZ2x5cGggPT0gbV96
ZXJvV2lkdGhTcGFjZUdseXBoICYmIGdseXBoOyB9CisgICAgR2x5cGggemVyb0dseXBoKCkgY29u
c3QgeyByZXR1cm4gbV96ZXJvR2x5cGg7IH0KKyAgICB2b2lkIHNldFplcm9HbHlwaChHbHlwaCB6
ZXJvR2x5cGgpIHsgbV96ZXJvR2x5cGggPSB6ZXJvR2x5cGg7IH0KKworICAgIEdseXBoRGF0YSBn
bHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMikgY29uc3Q7CisgICAgR2x5cGggZ2x5cGhGb3JD
aGFyYWN0ZXIoVUNoYXIzMikgY29uc3Q7CisKKyAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IHN5
c3RlbUZhbGxiYWNrRm9udERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiwgY29uc3QgRm9udERlc2Ny
aXB0aW9uJiwgYm9vbCBpc0ZvclBsYXRmb3JtRm9udCkgY29uc3Q7CisKKyAgICBjb25zdCBHbHlw
aFBhZ2UqIGdseXBoUGFnZSh1bnNpZ25lZCBwYWdlTnVtYmVyKSBjb25zdDsKKworICAgIHZvaWQg
ZGV0ZXJtaW5lUGl0Y2goKTsKKyAgICBQaXRjaCBwaXRjaCgpIGNvbnN0IHsgcmV0dXJuIG1fdHJl
YXRBc0ZpeGVkUGl0Y2ggPyBGaXhlZFBpdGNoIDogVmFyaWFibGVQaXRjaDsgfQorCisgICAgY29u
c3QgU1ZHRGF0YSogc3ZnRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fc3ZnRGF0YS5nZXQoKTsgfQor
ICAgIGJvb2wgaXNTVkdGb250KCkgY29uc3QgeyByZXR1cm4gISFtX3N2Z0RhdGE7IH0KKworICAg
IGJvb2wgaXNDdXN0b21Gb250KCkgY29uc3QgeyByZXR1cm4gbV9pc0N1c3RvbUZvbnQ7IH0KKyAg
ICBib29sIGlzTG9hZGluZygpIGNvbnN0IHsgcmV0dXJuIG1faXNMb2FkaW5nOyB9CisKKyNpZm5k
ZWYgTkRFQlVHCisgICAgU3RyaW5nIGRlc2NyaXB0aW9uKCkgY29uc3Q7CisjZW5kaWYKKworI2lm
IFVTRShBUFBLSVQpCisgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGNvbXBvc2l0ZUZvbnRSZWZl
cmVuY2VGb250RGF0YShOU0ZvbnQgKmtleSkgY29uc3Q7CisgICAgTlNGb250KiBnZXROU0ZvbnQo
KSBjb25zdCB7IHJldHVybiBtX3BsYXRmb3JtRGF0YS5uc0ZvbnQoKTsgfQorI2VuZGlmCisKKyNp
ZiBQTEFURk9STShJT1MpCisgICAgQ1RGb250UmVmIGdldENURm9udCgpIGNvbnN0IHsgcmV0dXJu
IG1fcGxhdGZvcm1EYXRhLmZvbnQoKTsgfQorICAgIGJvb2wgc2hvdWxkTm90QmVVc2VkRm9yQXJh
YmljKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGROb3RCZVVzZWRGb3JBcmFiaWM7IH07CisjZW5k
aWYKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBDRkRpY3Rpb25hcnlSZWYgZ2V0Q0ZTdHJpbmdB
dHRyaWJ1dGVzKFR5cGVzZXR0aW5nRmVhdHVyZXMsIEZvbnRPcmllbnRhdGlvbikgY29uc3Q7Cisj
ZW5kaWYKKworI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBVU0UoSEFSRkJVWlopCisgICAgYm9vbCBj
YW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBVQ2hhciosIHNpemVfdCkg
Y29uc3Q7CisjZW5kaWYKKworICAgIGJvb2wgYXBwbHlUcmFuc2Zvcm1zKEdseXBoQnVmZmVyR2x5
cGgqLCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCBzaXplX3QgZ2x5cGhDb3VudCwgVHlwZXNldHRpbmdG
ZWF0dXJlcykgY29uc3Q7CisKKyNpZiBQTEFURk9STShXSU4pCisgICAgYm9vbCBpc1N5c3RlbUZv
bnQoKSBjb25zdCB7IHJldHVybiBtX2lzU3lzdGVtRm9udDsgfQorICAgIFNDUklQVF9GT05UUFJP
UEVSVElFUyogc2NyaXB0Rm9udFByb3BlcnRpZXMoKSBjb25zdDsKKyAgICBTQ1JJUFRfQ0FDSEUq
IHNjcmlwdENhY2hlKCkgY29uc3QgeyByZXR1cm4gJm1fc2NyaXB0Q2FjaGU7IH0KKyAgICBzdGF0
aWMgdm9pZCBzZXRTaG91bGRBcHBseU1hY0FzY2VudEhhY2soYm9vbCk7CisgICAgc3RhdGljIGJv
b2wgc2hvdWxkQXBwbHlNYWNBc2NlbnRIYWNrKCk7CisgICAgc3RhdGljIGZsb2F0IGFzY2VudENv
bnNpZGVyaW5nTWFjQXNjZW50SGFjayhjb25zdCBXQ0hBUiosIGZsb2F0IGFzY2VudCwgZmxvYXQg
ZGVzY2VudCk7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBTaW1wbGVGb250RGF0YShjb25zdCBG
b250UGxhdGZvcm1EYXRhJiwgYm9vbCBpc0N1c3RvbUZvbnQgPSBmYWxzZSwgYm9vbCBpc0xvYWRp
bmcgPSBmYWxzZSwgYm9vbCBpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrID0gZmFsc2UpOworCisg
ICAgU2ltcGxlRm9udERhdGEoc3RkOjp1bmlxdWVfcHRyPFNWR0RhdGE+LCBmbG9hdCBmb250U2l6
ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYyk7CisKKyAgICB2b2lk
IHBsYXRmb3JtSW5pdCgpOworICAgIHZvaWQgcGxhdGZvcm1HbHlwaEluaXQoKTsKKyAgICB2b2lk
IHBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpOworICAgIHZvaWQgcGxhdGZvcm1EZXN0cm95KCk7CisK
KyAgICB2b2lkIGluaXRDaGFyV2lkdGhzKCk7CisKKyAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnRE
YXRhPiBjcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBz
Y2FsZUZhY3RvcikgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gcGxhdGZv
cm1DcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBzY2Fs
ZUZhY3RvcikgY29uc3Q7CisKKyAgICB2b2lkIHJlbW92ZUZyb21TeXN0ZW1GYWxsYmFja0NhY2hl
KCk7CisKKyNpZiBQTEFURk9STShXSU4pCisgICAgdm9pZCBpbml0R0RJRm9udCgpOworICAgIHZv
aWQgcGxhdGZvcm1Db21tb25EZXN0cm95KCk7CisgICAgRmxvYXRSZWN0IGJvdW5kc0ZvckdESUds
eXBoKEdseXBoIGdseXBoKSBjb25zdDsKKyAgICBmbG9hdCB3aWR0aEZvckdESUdseXBoKEdseXBo
IGdseXBoKSBjb25zdDsKKyNlbmRpZgorCisjaWYgVVNFKENHKQorICAgIGJvb2wgY2FuVXNlRmFz
dEdseXBoQWR2YW5jZUdldHRlcihHbHlwaCBnbHlwaCwgQ0dTaXplJiBhZHZhbmNlLCBib29sJiBw
b3B1bGF0ZWRBZHZhbmNlKSBjb25zdDsKKyAgICBDR0ZvbnRSZW5kZXJpbmdTdHlsZSByZW5kZXJp
bmdTdHlsZSgpIGNvbnN0OworICAgIGJvb2wgYWR2YW5jZUZvckNvbG9yQml0bWFwRm9udChHbHlw
aCwgQ0dTaXplJiByZXN1bHQpIGNvbnN0OyAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGZvbnQgaXMg
YSBjb2xvciBiaXRtYXAgZm9udAorI2VuZGlmCisKKyAgICBGb250TWV0cmljcyBtX2ZvbnRNZXRy
aWNzOworICAgIGZsb2F0IG1fbWF4Q2hhcldpZHRoOworICAgIGZsb2F0IG1fYXZnQ2hhcldpZHRo
OworCisgICAgRm9udFBsYXRmb3JtRGF0YSBtX3BsYXRmb3JtRGF0YTsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8U1ZHRGF0YT4gbV9zdmdEYXRhOworCisgICAgbXV0YWJsZSBSZWZQdHI8R2x5cGhQYWdl
PiBtX2dseXBoUGFnZVplcm87CisgICAgbXV0YWJsZSBIYXNoTWFwPHVuc2lnbmVkLCBSZWZQdHI8
R2x5cGhQYWdlPj4gbV9nbHlwaFBhZ2VzOworICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPEds
eXBoTWV0cmljc01hcDxGbG9hdFJlY3Q+PiBtX2dseXBoVG9Cb3VuZHNNYXA7CisgICAgbXV0YWJs
ZSBHbHlwaE1ldHJpY3NNYXA8ZmxvYXQ+IG1fZ2x5cGhUb1dpZHRoTWFwOworCisgICAgYm9vbCBt
X3RyZWF0QXNGaXhlZFBpdGNoOworICAgIGJvb2wgbV9pc0N1c3RvbUZvbnQ7ICAvLyBXaGV0aGVy
IG9yIG5vdCB3ZSBhcmUgY3VzdG9tIGZvbnQgbG9hZGVkIHZpYSBAZm9udC1mYWNlCisgICAgYm9v
bCBtX2lzTG9hZGluZzsgLy8gV2hldGhlciBvciBub3QgdGhpcyBjdXN0b20gZm9udCBpcyBzdGls
bCBpbiB0aGUgYWN0IG9mIGxvYWRpbmcuCisKKyAgICBib29sIG1faXNUZXh0T3JpZW50YXRpb25G
YWxsYmFjazsKKyAgICBib29sIG1faXNCcm9rZW5JZGVvZ3JhcGhGYWxsYmFjazsKKworICAgIGJv
b2wgbV9pc1VzZWRJblN5c3RlbUZhbGxiYWNrQ2FjaGUgeyBmYWxzZSB9OworCisgICAgbXV0YWJs
ZSBSZWZQdHI8T3BlblR5cGVNYXRoRGF0YT4gbV9tYXRoRGF0YTsKKyNpZiBFTkFCTEUoT1BFTlRZ
UEVfVkVSVElDQUwpCisgICAgUmVmUHRyPE9wZW5UeXBlVmVydGljYWxEYXRhPiBtX3ZlcnRpY2Fs
RGF0YTsKKyNlbmRpZgorICAgIGJvb2wgbV9oYXNWZXJ0aWNhbEdseXBoczsKKworICAgIEdseXBo
IG1fc3BhY2VHbHlwaDsKKyAgICBmbG9hdCBtX3NwYWNlV2lkdGg7CisgICAgR2x5cGggbV96ZXJv
R2x5cGg7CisgICAgZmxvYXQgbV9hZGp1c3RlZFNwYWNlV2lkdGg7CisKKyAgICBHbHlwaCBtX3pl
cm9XaWR0aFNwYWNlR2x5cGg7CisKKyAgICBzdHJ1Y3QgRGVyaXZlZEZvbnREYXRhIHsKKyAgICAg
ICAgZXhwbGljaXQgRGVyaXZlZEZvbnREYXRhKGJvb2wgY3VzdG9tKQorICAgICAgICAgICAgOiBm
b3JDdXN0b21Gb250KGN1c3RvbSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIH5EZXJp
dmVkRm9udERhdGEoKTsKKworICAgICAgICBib29sIGZvckN1c3RvbUZvbnQ7CisgICAgICAgIFJl
ZlB0cjxTaW1wbGVGb250RGF0YT4gc21hbGxDYXBzOworICAgICAgICBSZWZQdHI8U2ltcGxlRm9u
dERhdGE+IGVtcGhhc2lzTWFyazsKKyAgICAgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBicm9r
ZW5JZGVvZ3JhcGg7CisgICAgICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gdmVydGljYWxSaWdo
dE9yaWVudGF0aW9uOworICAgICAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IHVwcmlnaHRPcmll
bnRhdGlvbjsKKyAgICAgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBub25TeW50aGV0aWNJdGFs
aWM7CisjaWYgVVNFKEFQUEtJVCkKKyAgICAgICAgSGFzaE1hcDxOU0ZvbnQqLCBSZWZQdHI8U2lt
cGxlRm9udERhdGE+PiBjb21wb3NpdGVGb250UmVmZXJlbmNlczsKKyNlbmRpZgorICAgIH07CisK
KyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxEZXJpdmVkRm9udERhdGE+IG1fZGVyaXZlZEZv
bnREYXRhOworCisjaWYgVVNFKENHKSB8fCBVU0UoQ0FJUk8pCisgICAgZmxvYXQgbV9zeW50aGV0
aWNCb2xkT2Zmc2V0OworI2VuZGlmCisKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBtdXRhYmxl
IEhhc2hNYXA8dW5zaWduZWQsIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+PiBtX0NGU3RyaW5n
QXR0cmlidXRlczsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFVTRShIQVJGQlVa
WikKKyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxIYXNoTWFwPFN0cmluZywgYm9vbD4+IG1f
Y29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2VTdXBwb3J0OworI2VuZGlmCisKKyNpZiBQTEFURk9S
TShXSU4pCisgICAgYm9vbCBtX2lzU3lzdGVtRm9udDsKKyAgICBtdXRhYmxlIFNDUklQVF9DQUNI
RSBtX3NjcmlwdENhY2hlOworICAgIG11dGFibGUgU0NSSVBUX0ZPTlRQUk9QRVJUSUVTKiBtX3Nj
cmlwdEZvbnRQcm9wZXJ0aWVzOworI2VuZGlmCisjaWYgUExBVEZPUk0oSU9TKQorICAgIGJvb2wg
bV9zaG91bGROb3RCZVVzZWRGb3JBcmFiaWM7CisjZW5kaWYKK307CisKK0FMV0FZU19JTkxJTkUg
RmxvYXRSZWN0IFNpbXBsZUZvbnREYXRhOjpib3VuZHNGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29u
c3QKK3sKKyAgICBpZiAoaXNaZXJvV2lkdGhTcGFjZUdseXBoKGdseXBoKSkKKyAgICAgICAgcmV0
dXJuIEZsb2F0UmVjdCgpOworCisgICAgRmxvYXRSZWN0IGJvdW5kczsKKyAgICBpZiAobV9nbHlw
aFRvQm91bmRzTWFwKSB7CisgICAgICAgIGJvdW5kcyA9IG1fZ2x5cGhUb0JvdW5kc01hcC0+bWV0
cmljc0ZvckdseXBoKGdseXBoKTsKKyAgICAgICAgaWYgKGJvdW5kcy53aWR0aCgpICE9IGNHbHlw
aFNpemVVbmtub3duKQorICAgICAgICAgICAgcmV0dXJuIGJvdW5kczsKKyAgICB9CisKKyAgICBi
b3VuZHMgPSBwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKGdseXBoKTsKKyAgICBpZiAoIW1fZ2x5cGhU
b0JvdW5kc01hcCkKKyAgICAgICAgbV9nbHlwaFRvQm91bmRzTWFwID0gc3RkOjptYWtlX3VuaXF1
ZTxHbHlwaE1ldHJpY3NNYXA8RmxvYXRSZWN0Pj4oKTsKKyAgICBtX2dseXBoVG9Cb3VuZHNNYXAt
PnNldE1ldHJpY3NGb3JHbHlwaChnbHlwaCwgYm91bmRzKTsKKyAgICByZXR1cm4gYm91bmRzOwor
fQorCitBTFdBWVNfSU5MSU5FIGZsb2F0IFNpbXBsZUZvbnREYXRhOjp3aWR0aEZvckdseXBoKEds
eXBoIGdseXBoKSBjb25zdAoreworICAgIGlmIChpc1plcm9XaWR0aFNwYWNlR2x5cGgoZ2x5cGgp
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIGZsb2F0IHdpZHRoID0gbV9nbHlwaFRvV2lkdGhN
YXAubWV0cmljc0ZvckdseXBoKGdseXBoKTsKKyAgICBpZiAod2lkdGggIT0gY0dseXBoU2l6ZVVu
a25vd24pCisgICAgICAgIHJldHVybiB3aWR0aDsKKworICAgIGlmIChpc1NWR0ZvbnQoKSkKKyAg
ICAgICAgd2lkdGggPSBtX3N2Z0RhdGEtPndpZHRoRm9yU1ZHR2x5cGgoZ2x5cGgsIG1fcGxhdGZv
cm1EYXRhLnNpemUoKSk7CisjaWYgRU5BQkxFKE9QRU5UWVBFX1ZFUlRJQ0FMKQorICAgIGVsc2Ug
aWYgKG1fdmVydGljYWxEYXRhKQorI2lmIFVTRShDRykgfHwgVVNFKENBSVJPKQorICAgICAgICB3
aWR0aCA9IG1fdmVydGljYWxEYXRhLT5hZHZhbmNlSGVpZ2h0KHRoaXMsIGdseXBoKSArIG1fc3lu
dGhldGljQm9sZE9mZnNldDsKKyNlbHNlCisgICAgICAgIHdpZHRoID0gbV92ZXJ0aWNhbERhdGEt
PmFkdmFuY2VIZWlnaHQodGhpcywgZ2x5cGgpOworI2VuZGlmCisjZW5kaWYKKyAgICBlbHNlCisg
ICAgICAgIHdpZHRoID0gcGxhdGZvcm1XaWR0aEZvckdseXBoKGdseXBoKTsKKworICAgIG1fZ2x5
cGhUb1dpZHRoTWFwLnNldE1ldHJpY3NGb3JHbHlwaChnbHlwaCwgd2lkdGgpOworICAgIHJldHVy
biB3aWR0aDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU2ltcGxl
Rm9udERhdGFfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAko
d29ya2luZyBjb3B5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMSwxMyArMjEsMTMgQEAKICAqCiAgKi8KIAotI2lmbmRlZiBT
aW1wbGVGb250RGF0YV9oCi0jZGVmaW5lIFNpbXBsZUZvbnREYXRhX2gKKyNpZm5kZWYgRm9udF9o
CisjZGVmaW5lIEZvbnRfaAogCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiRm9u
dEJhc2VsaW5lLmgiCiAjaW5jbHVkZSAiRm9udE1ldHJpY3MuaCIKICNpbmNsdWRlICJGb250UGxh
dGZvcm1EYXRhLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiR2x5cGhCdWZm
ZXIuaCIKICNpbmNsdWRlICJHbHlwaE1ldHJpY3NNYXAuaCIKICNpbmNsdWRlICJHbHlwaFBhZ2Uu
aCIKQEAgLTY0LDM2ICs2NCwzNiBAQCBjbGFzcyBTaGFyZWRCdWZmZXI7CiBzdHJ1Y3QgR2x5cGhE
YXRhOwogc3RydWN0IFdpZHRoSXRlcmF0b3I7CiAKLWVudW0gRm9udERhdGFWYXJpYW50IHsgQXV0
b1ZhcmlhbnQsIE5vcm1hbFZhcmlhbnQsIFNtYWxsQ2Fwc1ZhcmlhbnQsIEVtcGhhc2lzTWFya1Zh
cmlhbnQsIEJyb2tlbklkZW9ncmFwaFZhcmlhbnQgfTsKK2VudW0gRm9udFZhcmlhbnQgeyBBdXRv
VmFyaWFudCwgTm9ybWFsVmFyaWFudCwgU21hbGxDYXBzVmFyaWFudCwgRW1waGFzaXNNYXJrVmFy
aWFudCwgQnJva2VuSWRlb2dyYXBoVmFyaWFudCB9OwogZW51bSBQaXRjaCB7IFVua25vd25QaXRj
aCwgRml4ZWRQaXRjaCwgVmFyaWFibGVQaXRjaCB9OwogCi1jbGFzcyBTaW1wbGVGb250RGF0YSA6
IHB1YmxpYyBSZWZDb3VudGVkPFNpbXBsZUZvbnREYXRhPiB7CitjbGFzcyBGb250IDogcHVibGlj
IFJlZkNvdW50ZWQ8Rm9udD4gewogcHVibGljOgogICAgIGNsYXNzIFNWR0RhdGEgewogICAgICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwg
flNWR0RhdGEoKSB7IH0KIAotICAgICAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZUZvbnREYXRh
KFNpbXBsZUZvbnREYXRhKiwgZmxvYXQgZm9udFNpemUpID0gMDsKKyAgICAgICAgdmlydHVhbCB2
b2lkIGluaXRpYWxpemVGb250KEZvbnQqLCBmbG9hdCBmb250U2l6ZSkgPSAwOwogICAgICAgICB2
aXJ0dWFsIGZsb2F0IHdpZHRoRm9yU1ZHR2x5cGgoR2x5cGgsIGZsb2F0IGZvbnRTaXplKSBjb25z
dCA9IDA7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBmaWxsU1ZHR2x5cGhQYWdlKEdseXBoUGFnZSos
IHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25l
ZCBidWZmZXJMZW5ndGgsIGNvbnN0IFNpbXBsZUZvbnREYXRhKikgY29uc3QgPSAwOworICAgICAg
ICB2aXJ0dWFsIGJvb2wgZmlsbFNWR0dseXBoUGFnZShHbHlwaFBhZ2UqLCB1bnNpZ25lZCBvZmZz
ZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3Ro
LCBjb25zdCBGb250KikgY29uc3QgPSAwOwogICAgIH07CiAKICAgICAvLyBVc2VkIHRvIGNyZWF0
ZSBwbGF0Zm9ybSBmb250cy4KLSAgICBzdGF0aWMgUmVmPFNpbXBsZUZvbnREYXRhPiBjcmVhdGUo
Y29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhLCBib29sIGlzQ3VzdG9tRm9udCA9
IGZhbHNlLCBib29sIGlzTG9hZGluZyA9IGZhbHNlLCBib29sIGlzVGV4dE9yaWVudGF0aW9uRmFs
bGJhY2sgPSBmYWxzZSkKKyAgICBzdGF0aWMgUmVmPEZvbnQ+IGNyZWF0ZShjb25zdCBGb250UGxh
dGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEsIGJvb2wgaXNDdXN0b21Gb250ID0gZmFsc2UsIGJvb2wg
aXNMb2FkaW5nID0gZmFsc2UsIGJvb2wgaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjayA9IGZhbHNl
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2ltcGxlRm9udERhdGEocGxh
dGZvcm1EYXRhLCBpc0N1c3RvbUZvbnQsIGlzTG9hZGluZywgaXNUZXh0T3JpZW50YXRpb25GYWxs
YmFjaykpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGb250KHBsYXRmb3JtRGF0YSwg
aXNDdXN0b21Gb250LCBpc0xvYWRpbmcsIGlzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2spKTsKICAg
ICB9CiAKICAgICAvLyBVc2VkIHRvIGNyZWF0ZSBTVkcgRm9udHMuCi0gICAgc3RhdGljIFJlZjxT
aW1wbGVGb250RGF0YT4gY3JlYXRlKHN0ZDo6dW5pcXVlX3B0cjxTVkdEYXRhPiBzdmdEYXRhLCBm
bG9hdCBmb250U2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYykK
KyAgICBzdGF0aWMgUmVmPEZvbnQ+IGNyZWF0ZShzdGQ6OnVuaXF1ZV9wdHI8U1ZHRGF0YT4gc3Zn
RGF0YSwgZmxvYXQgZm9udFNpemUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJ
dGFsaWMpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTaW1wbGVGb250RGF0
YShXVEY6Om1vdmUoc3ZnRGF0YSksIGZvbnRTaXplLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJ
dGFsaWMpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRm9udChXVEY6Om1vdmUoc3Zn
RGF0YSksIGZvbnRTaXplLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMpKTsKICAgICB9
CiAKLSAgICB+U2ltcGxlRm9udERhdGEoKTsKKyAgICB+Rm9udCgpOwogCi0gICAgc3RhdGljIGNv
bnN0IFNpbXBsZUZvbnREYXRhKiBzeXN0ZW1GYWxsYmFjaygpIHsgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgU2ltcGxlRm9udERhdGEqPigtMSk7IH0KKyAgICBzdGF0aWMgY29uc3QgRm9u
dCogc3lzdGVtRmFsbGJhY2soKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IEZvbnQq
PigtMSk7IH0KIAogICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSgpIGNv
bnN0IHsgcmV0dXJuIG1fcGxhdGZvcm1EYXRhOyB9CiAgICAgY29uc3QgT3BlblR5cGVNYXRoRGF0
YSogbWF0aERhdGEoKSBjb25zdDsKQEAgLTEwMSwzMCArMTAxLDMwIEBAIHB1YmxpYzoKICAgICBj
b25zdCBPcGVuVHlwZVZlcnRpY2FsRGF0YSogdmVydGljYWxEYXRhKCkgY29uc3QgeyByZXR1cm4g
bV92ZXJ0aWNhbERhdGEuZ2V0KCk7IH0KICNlbmRpZgogCi0gICAgUGFzc1JlZlB0cjxTaW1wbGVG
b250RGF0YT4gc21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJikgY29uc3Q7
Ci0gICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gZW1waGFzaXNNYXJrRm9udERhdGEoY29u
c3QgRm9udERlc2NyaXB0aW9uJikgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0
YT4gYnJva2VuSWRlb2dyYXBoRm9udERhdGEoKSBjb25zdDsKLSAgICBQYXNzUmVmUHRyPFNpbXBs
ZUZvbnREYXRhPiBub25TeW50aGV0aWNJdGFsaWNGb250RGF0YSgpIGNvbnN0OworICAgIFBhc3NS
ZWZQdHI8Rm9udD4gc21hbGxDYXBzRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mKSBjb25zdDsK
KyAgICBQYXNzUmVmUHRyPEZvbnQ+IGVtcGhhc2lzTWFya0ZvbnQoY29uc3QgRm9udERlc2NyaXB0
aW9uJikgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxGb250PiBicm9rZW5JZGVvZ3JhcGhGb250KCkg
Y29uc3Q7CisgICAgUGFzc1JlZlB0cjxGb250PiBub25TeW50aGV0aWNJdGFsaWNGb250KCkgY29u
c3Q7CiAKLSAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiB2YXJpYW50Rm9udERhdGEoY29u
c3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udERhdGFWYXJpYW50IHZhcmlhbnQp
IGNvbnN0CisgICAgUGFzc1JlZlB0cjxGb250PiB2YXJpYW50Rm9udChjb25zdCBGb250RGVzY3Jp
cHRpb24mIGRlc2NyaXB0aW9uLCBGb250VmFyaWFudCB2YXJpYW50KSBjb25zdAogICAgIHsKICAg
ICAgICAgc3dpdGNoICh2YXJpYW50KSB7CiAgICAgICAgIGNhc2UgU21hbGxDYXBzVmFyaWFudDoK
LSAgICAgICAgICAgIHJldHVybiBzbWFsbENhcHNGb250RGF0YShkZXNjcmlwdGlvbik7CisgICAg
ICAgICAgICByZXR1cm4gc21hbGxDYXBzRm9udChkZXNjcmlwdGlvbik7CiAgICAgICAgIGNhc2Ug
RW1waGFzaXNNYXJrVmFyaWFudDoKLSAgICAgICAgICAgIHJldHVybiBlbXBoYXNpc01hcmtGb250
RGF0YShkZXNjcmlwdGlvbik7CisgICAgICAgICAgICByZXR1cm4gZW1waGFzaXNNYXJrRm9udChk
ZXNjcmlwdGlvbik7CiAgICAgICAgIGNhc2UgQnJva2VuSWRlb2dyYXBoVmFyaWFudDoKLSAgICAg
ICAgICAgIHJldHVybiBicm9rZW5JZGVvZ3JhcGhGb250RGF0YSgpOworICAgICAgICAgICAgcmV0
dXJuIGJyb2tlbklkZW9ncmFwaEZvbnQoKTsKICAgICAgICAgY2FzZSBBdXRvVmFyaWFudDoKICAg
ICAgICAgY2FzZSBOb3JtYWxWYXJpYW50OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBjb25zdF9jYXN0
PFNpbXBsZUZvbnREYXRhKj4odGhpcyk7CisgICAgICAgIHJldHVybiBjb25zdF9jYXN0PEZvbnQq
Pih0aGlzKTsKICAgICB9CiAKLSAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiB2ZXJ0aWNh
bFJpZ2h0T3JpZW50YXRpb25Gb250RGF0YSgpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8U2ltcGxl
Rm9udERhdGE+IHVwcmlnaHRPcmllbnRhdGlvbkZvbnREYXRhKCkgY29uc3Q7CisgICAgUGFzc1Jl
ZlB0cjxGb250PiB2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250KCkgY29uc3Q7CisgICAgUGFz
c1JlZlB0cjxGb250PiB1cHJpZ2h0T3JpZW50YXRpb25Gb250KCkgY29uc3Q7CiAKICAgICBib29s
IGhhc1ZlcnRpY2FsR2x5cGhzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNWZXJ0aWNhbEdseXBoczsg
fQogICAgIGJvb2wgaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaygpIGNvbnN0IHsgcmV0dXJuIG1f
aXNUZXh0T3JpZW50YXRpb25GYWxsYmFjazsgfQpAQCAtMTQwLDcgKzE0MCw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNldEF2Z0NoYXJXaWR0aChmbG9hdCBhdmdDaGFyV2lkdGgpIHsgbV9hdmdDaGFy
V2lkdGggPSBhdmdDaGFyV2lkdGg7IH0KIAogICAgIEZsb2F0UmVjdCBib3VuZHNGb3JHbHlwaChH
bHlwaCkgY29uc3Q7Ci0gICAgZmxvYXQgd2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3Q7
CisgICAgZmxvYXQgd2lkdGhGb3JHbHlwaChHbHlwaCkgY29uc3Q7CiAgICAgRmxvYXRSZWN0IHBs
YXRmb3JtQm91bmRzRm9yR2x5cGgoR2x5cGgpIGNvbnN0OwogICAgIGZsb2F0IHBsYXRmb3JtV2lk
dGhGb3JHbHlwaChHbHlwaCkgY29uc3Q7CiAKQEAgLTE2Nyw3ICsxNjcsNyBAQCBwdWJsaWM6CiAg
ICAgR2x5cGhEYXRhIGdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyKSBjb25zdDsKICAgICBH
bHlwaCBnbHlwaEZvckNoYXJhY3RlcihVQ2hhcjMyKSBjb25zdDsKIAotICAgIFJlZlB0cjxTaW1w
bGVGb250RGF0YT4gc3lzdGVtRmFsbGJhY2tGb250RGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyLCBj
b25zdCBGb250RGVzY3JpcHRpb24mLCBib29sIGlzRm9yUGxhdGZvcm1Gb250KSBjb25zdDsKKyAg
ICBSZWZQdHI8Rm9udD4gc3lzdGVtRmFsbGJhY2tGb250Rm9yQ2hhcmFjdGVyKFVDaGFyMzIsIGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYsIGJvb2wgaXNGb3JQbGF0Zm9ybUZvbnQpIGNvbnN0OwogCiAg
ICAgY29uc3QgR2x5cGhQYWdlKiBnbHlwaFBhZ2UodW5zaWduZWQgcGFnZU51bWJlcikgY29uc3Q7
CiAKQEAgLTE4NSw3ICsxODUsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lmIFVTRShBUFBLSVQp
Ci0gICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGNvbXBvc2l0ZUZvbnRSZWZlcmVuY2VGb250RGF0
YShOU0ZvbnQgKmtleSkgY29uc3Q7CisgICAgY29uc3QgRm9udCogY29tcG9zaXRlRm9udFJlZmVy
ZW5jZUZvbnQoTlNGb250ICprZXkpIGNvbnN0OwogICAgIE5TRm9udCogZ2V0TlNGb250KCkgY29u
c3QgeyByZXR1cm4gbV9wbGF0Zm9ybURhdGEubnNGb250KCk7IH0KICNlbmRpZgogCkBAIC0yMTMs
OSArMjEzLDkgQEAgcHVibGljOgogI2VuZGlmCiAKIHByaXZhdGU6Ci0gICAgU2ltcGxlRm9udERh
dGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYsIGJvb2wgaXNDdXN0b21Gb250ID0gZmFsc2UsIGJv
b2wgaXNMb2FkaW5nID0gZmFsc2UsIGJvb2wgaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjayA9IGZh
bHNlKTsKKyAgICBGb250KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmLCBib29sIGlzQ3VzdG9tRm9u
dCA9IGZhbHNlLCBib29sIGlzTG9hZGluZyA9IGZhbHNlLCBib29sIGlzVGV4dE9yaWVudGF0aW9u
RmFsbGJhY2sgPSBmYWxzZSk7CiAKLSAgICBTaW1wbGVGb250RGF0YShzdGQ6OnVuaXF1ZV9wdHI8
U1ZHRGF0YT4sIGZsb2F0IGZvbnRTaXplLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhl
dGljSXRhbGljKTsKKyAgICBGb250KHN0ZDo6dW5pcXVlX3B0cjxTVkdEYXRhPiwgZmxvYXQgZm9u
dFNpemUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpOwogCiAgICAg
dm9pZCBwbGF0Zm9ybUluaXQoKTsKICAgICB2b2lkIHBsYXRmb3JtR2x5cGhJbml0KCk7CkBAIC0y
MjQsMjAgKzIyNCwyMCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBpbml0Q2hhcldpZHRocygpOwog
Ci0gICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gY3JlYXRlU2NhbGVkRm9udERhdGEoY29u
c3QgRm9udERlc2NyaXB0aW9uJiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0OwotICAgIFBhc3NS
ZWZQdHI8U2ltcGxlRm9udERhdGE+IHBsYXRmb3JtQ3JlYXRlU2NhbGVkRm9udERhdGEoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0OworICAgIFBhc3NSZWZQ
dHI8Rm9udD4gY3JlYXRlU2NhbGVkRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBz
Y2FsZUZhY3RvcikgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxGb250PiBwbGF0Zm9ybUNyZWF0ZVNj
YWxlZEZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0
OwogCiAgICAgdm9pZCByZW1vdmVGcm9tU3lzdGVtRmFsbGJhY2tDYWNoZSgpOwogCiAjaWYgUExB
VEZPUk0oV0lOKQogICAgIHZvaWQgaW5pdEdESUZvbnQoKTsKICAgICB2b2lkIHBsYXRmb3JtQ29t
bW9uRGVzdHJveSgpOwotICAgIEZsb2F0UmVjdCBib3VuZHNGb3JHRElHbHlwaChHbHlwaCBnbHlw
aCkgY29uc3Q7Ci0gICAgZmxvYXQgd2lkdGhGb3JHRElHbHlwaChHbHlwaCBnbHlwaCkgY29uc3Q7
CisgICAgRmxvYXRSZWN0IGJvdW5kc0ZvckdESUdseXBoKEdseXBoKSBjb25zdDsKKyAgICBmbG9h
dCB3aWR0aEZvckdESUdseXBoKEdseXBoKSBjb25zdDsKICNlbmRpZgogCiAjaWYgVVNFKENHKQot
ICAgIGJvb2wgY2FuVXNlRmFzdEdseXBoQWR2YW5jZUdldHRlcihHbHlwaCBnbHlwaCwgQ0dTaXpl
JiBhZHZhbmNlLCBib29sJiBwb3B1bGF0ZWRBZHZhbmNlKSBjb25zdDsKKyAgICBib29sIGNhblVz
ZUZhc3RHbHlwaEFkdmFuY2VHZXR0ZXIoR2x5cGgsIENHU2l6ZSYgYWR2YW5jZSwgYm9vbCYgcG9w
dWxhdGVkQWR2YW5jZSkgY29uc3Q7CiAgICAgQ0dGb250UmVuZGVyaW5nU3R5bGUgcmVuZGVyaW5n
U3R5bGUoKSBjb25zdDsKICAgICBib29sIGFkdmFuY2VGb3JDb2xvckJpdG1hcEZvbnQoR2x5cGgs
IENHU2l6ZSYgcmVzdWx0KSBjb25zdDsgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBmb250IGlzIGEg
Y29sb3IgYml0bWFwIGZvbnQKICNlbmRpZgpAQCAtMjU1LDcgKzI1NSw3IEBAIHByaXZhdGU6CiAg
ICAgbXV0YWJsZSBHbHlwaE1ldHJpY3NNYXA8ZmxvYXQ+IG1fZ2x5cGhUb1dpZHRoTWFwOwogCiAg
ICAgYm9vbCBtX3RyZWF0QXNGaXhlZFBpdGNoOwotICAgIGJvb2wgbV9pc0N1c3RvbUZvbnQ7ICAv
LyBXaGV0aGVyIG9yIG5vdCB3ZSBhcmUgY3VzdG9tIGZvbnQgbG9hZGVkIHZpYSBAZm9udC1mYWNl
CisgICAgYm9vbCBtX2lzQ3VzdG9tRm9udDsgLy8gV2hldGhlciBvciBub3Qgd2UgYXJlIGN1c3Rv
bSBmb250IGxvYWRlZCB2aWEgQGZvbnQtZmFjZQogICAgIGJvb2wgbV9pc0xvYWRpbmc7IC8vIFdo
ZXRoZXIgb3Igbm90IHRoaXMgY3VzdG9tIGZvbnQgaXMgc3RpbGwgaW4gdGhlIGFjdCBvZiBsb2Fk
aW5nLgogCiAgICAgYm9vbCBtX2lzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2s7CkBAIC0yODQsMTQg
KzI4NCwxNCBAQCBwcml2YXRlOgogICAgICAgICB+RGVyaXZlZEZvbnREYXRhKCk7CiAKICAgICAg
ICAgYm9vbCBmb3JDdXN0b21Gb250OwotICAgICAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IHNt
YWxsQ2FwczsKLSAgICAgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBlbXBoYXNpc01hcms7Ci0g
ICAgICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gYnJva2VuSWRlb2dyYXBoOwotICAgICAgICBS
ZWZQdHI8U2ltcGxlRm9udERhdGE+IHZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbjsKLSAgICAgICAg
UmVmUHRyPFNpbXBsZUZvbnREYXRhPiB1cHJpZ2h0T3JpZW50YXRpb247Ci0gICAgICAgIFJlZlB0
cjxTaW1wbGVGb250RGF0YT4gbm9uU3ludGhldGljSXRhbGljOworICAgICAgICBSZWZQdHI8Rm9u
dD4gc21hbGxDYXBzOworICAgICAgICBSZWZQdHI8Rm9udD4gZW1waGFzaXNNYXJrOworICAgICAg
ICBSZWZQdHI8Rm9udD4gYnJva2VuSWRlb2dyYXBoOworICAgICAgICBSZWZQdHI8Rm9udD4gdmVy
dGljYWxSaWdodE9yaWVudGF0aW9uOworICAgICAgICBSZWZQdHI8Rm9udD4gdXByaWdodE9yaWVu
dGF0aW9uOworICAgICAgICBSZWZQdHI8Rm9udD4gbm9uU3ludGhldGljSXRhbGljOwogI2lmIFVT
RShBUFBLSVQpCi0gICAgICAgIEhhc2hNYXA8TlNGb250KiwgUmVmUHRyPFNpbXBsZUZvbnREYXRh
Pj4gY29tcG9zaXRlRm9udFJlZmVyZW5jZXM7CisgICAgICAgIEhhc2hNYXA8TlNGb250KiwgUmVm
UHRyPEZvbnQ+PiBjb21wb3NpdGVGb250UmVmZXJlbmNlczsKICNlbmRpZgogICAgIH07CiAKQEAg
LTMxOSw3ICszMTksNyBAQCBwcml2YXRlOgogI2VuZGlmCiB9OwogCi1BTFdBWVNfSU5MSU5FIEZs
b2F0UmVjdCBTaW1wbGVGb250RGF0YTo6Ym91bmRzRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0
CitBTFdBWVNfSU5MSU5FIEZsb2F0UmVjdCBGb250Ojpib3VuZHNGb3JHbHlwaChHbHlwaCBnbHlw
aCkgY29uc3QKIHsKICAgICBpZiAoaXNaZXJvV2lkdGhTcGFjZUdseXBoKGdseXBoKSkKICAgICAg
ICAgcmV0dXJuIEZsb2F0UmVjdCgpOwpAQCAtMzM4LDcgKzMzOCw3IEBAIEFMV0FZU19JTkxJTkUg
RmxvYXRSZWN0IFNpbXBsZUZvbnREYXRhOjoKICAgICByZXR1cm4gYm91bmRzOwogfQogCi1BTFdB
WVNfSU5MSU5FIGZsb2F0IFNpbXBsZUZvbnREYXRhOjp3aWR0aEZvckdseXBoKEdseXBoIGdseXBo
KSBjb25zdAorQUxXQVlTX0lOTElORSBmbG9hdCBGb250Ojp3aWR0aEZvckdseXBoKEdseXBoIGds
eXBoKSBjb25zdAogewogICAgIGlmIChpc1plcm9XaWR0aFNwYWNlR2x5cGgoZ2x5cGgpKQogICAg
ICAgICByZXR1cm4gMDsKQEAgLTM2Niw0ICszNjYsNCBAQCBBTFdBWVNfSU5MSU5FIGZsb2F0IFNp
bXBsZUZvbnREYXRhOjp3aWR0CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8v
IFNpbXBsZUZvbnREYXRhX2gKKyNlbmRpZiAvLyBGb250X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAkocmV2aXNpb24gMTc4ODU3KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTIsMTQgKzUyLDE0IEBACiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+
CiAKIC8vIEZJWE1FOiBXZSBtYXkgYmUgYWJsZSB0byBzaW1wbGlmeSB0aGlzIGNvZGUgdXNpbmcg
QysrMTEgdGhyZWFkaW5nIHByaW1pdGl2ZXMsIGluY2x1ZGluZyBzdGQ6OmNhbGxfb25jZSgpLgot
c3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBmb250RGF0YUxvY2s7CitzdGF0aWMgcHRocmVhZF9tdXRl
eF90IGZvbnRMb2NrOwogCiBzdGF0aWMgdm9pZCBpbml0Rm9udENhY2hlTG9ja09uY2UoKQogewog
ICAgIHB0aHJlYWRfbXV0ZXhhdHRyX3QgbXV0ZXhBdHRyaWJ1dGU7CiAgICAgcHRocmVhZF9tdXRl
eGF0dHJfaW5pdCgmbXV0ZXhBdHRyaWJ1dGUpOwogICAgIHB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5
cGUoJm11dGV4QXR0cmlidXRlLCBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRSk7Ci0gICAgcHRocmVh
ZF9tdXRleF9pbml0KCZmb250RGF0YUxvY2ssICZtdXRleEF0dHJpYnV0ZSk7CisgICAgcHRocmVh
ZF9tdXRleF9pbml0KCZmb250TG9jaywgJm11dGV4QXR0cmlidXRlKTsKICAgICBwdGhyZWFkX211
dGV4YXR0cl9kZXN0cm95KCZtdXRleEF0dHJpYnV0ZSk7CiB9CiAKQEAgLTcxLDEzICs3MSwxMyBA
QCBwdWJsaWM6CiAgICAgRm9udExvY2tlcigpCiAgICAgewogICAgICAgICBwdGhyZWFkX29uY2Uo
JmluaXRGb250TG9ja0NvbnRyb2wsIGluaXRGb250Q2FjaGVMb2NrT25jZSk7Ci0gICAgICAgIGlu
dCBsb2NrY29kZSA9IHB0aHJlYWRfbXV0ZXhfbG9jaygmZm9udERhdGFMb2NrKTsKLSAgICAgICAg
QVNTRVJUX1dJVEhfTUVTU0FHRV9VTlVTRUQobG9ja2NvZGUsICFsb2NrY29kZSwgImZvbnREYXRh
TG9jayBsb2NrIGZhaWxlZCB3aXRoIGNvZGU6JWQiLCBsb2NrY29kZSk7ICAgIAorICAgICAgICBp
bnQgbG9ja2NvZGUgPSBwdGhyZWFkX211dGV4X2xvY2soJmZvbnRMb2NrKTsKKyAgICAgICAgQVNT
RVJUX1dJVEhfTUVTU0FHRV9VTlVTRUQobG9ja2NvZGUsICFsb2NrY29kZSwgImZvbnRMb2NrIGxv
Y2sgZmFpbGVkIHdpdGggY29kZTolZCIsIGxvY2tjb2RlKTsgICAgCiAgICAgfQogICAgIH5Gb250
TG9ja2VyKCkKICAgICB7Ci0gICAgICAgIGludCBsb2NrY29kZSA9IHB0aHJlYWRfbXV0ZXhfdW5s
b2NrKCZmb250RGF0YUxvY2spOwotICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFX1VOVVNFRChs
b2NrY29kZSwgIWxvY2tjb2RlLCAiZm9udERhdGFMb2NrIHVubG9jayBmYWlsZWQgd2l0aCBjb2Rl
OiVkIiwgbG9ja2NvZGUpOworICAgICAgICBpbnQgbG9ja2NvZGUgPSBwdGhyZWFkX211dGV4X3Vu
bG9jaygmZm9udExvY2spOworICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFX1VOVVNFRChsb2Nr
Y29kZSwgIWxvY2tjb2RlLCAiZm9udExvY2sgdW5sb2NrIGZhaWxlZCB3aXRoIGNvZGU6JWQiLCBs
b2NrY29kZSk7CiAgICAgfQogfTsKICNlbmRpZiAvLyBQTEFURk9STShJT1MpCkBAIC0zNTksNyAr
MzU5LDcgQEAgc3RydWN0IEZvbnREYXRhQ2FjaGVLZXlUcmFpdHMgOiBXVEY6OkdlbgogICAgIH0K
IH07CiAKLXR5cGVkZWYgSGFzaE1hcDxGb250UGxhdGZvcm1EYXRhLCBSZWZQdHI8U2ltcGxlRm9u
dERhdGE+LCBGb250RGF0YUNhY2hlS2V5SGFzaCwgRm9udERhdGFDYWNoZUtleVRyYWl0cz4gRm9u
dERhdGFDYWNoZTsKK3R5cGVkZWYgSGFzaE1hcDxGb250UGxhdGZvcm1EYXRhLCBSZWZQdHI8Rm9u
dD4sIEZvbnREYXRhQ2FjaGVLZXlIYXNoLCBGb250RGF0YUNhY2hlS2V5VHJhaXRzPiBGb250RGF0
YUNhY2hlOwogCiBzdGF0aWMgRm9udERhdGFDYWNoZSYgY2FjaGVkRm9udHMoKQogewpAQCAtMzc5
LDcgKzM3OSw3IEBAIGNvbnN0IGludCBjVGFyZ2V0SW5hY3RpdmVGb250RGF0YSA9IDIwMDsKIGNv
bnN0IGludCBjTWF4VW5kZXJNZW1vcnlQcmVzc3VyZUluYWN0aXZlRm9udERhdGEgPSA1MDsKIGNv
bnN0IGludCBjVGFyZ2V0VW5kZXJNZW1vcnlQcmVzc3VyZUluYWN0aXZlRm9udERhdGEgPSAzMDsK
IAotUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmZvbnRGb3JGYW1pbHkoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFt
aWx5LCBib29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSkKK1JlZlB0cjxGb250PiBGb250Q2FjaGU6
OmZvbnRGb3JGYW1pbHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNv
bnN0IEF0b21pY1N0cmluZyYgZmFtaWx5LCBib29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSkKIHsK
ICAgICBpZiAoIW1fcHVyZ2VUaW1lci5pc0FjdGl2ZSgpKQogICAgICAgICBtX3B1cmdlVGltZXIu
c3RhcnRPbmVTaG90KHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM6Onplcm8oKSk7CkBAIC0zOTEs
NyArMzkxLDcgQEAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmZvbnRGbwogICAg
IHJldHVybiBmb250Rm9yUGxhdGZvcm1EYXRhKCpwbGF0Zm9ybURhdGEpOwogfQogCi1SZWY8U2lt
cGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Zm9udEZvclBsYXRmb3JtRGF0YShjb25zdCBGb250UGxh
dGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEpCitSZWY8Rm9udD4gRm9udENhY2hlOjpmb250Rm9yUGxh
dGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSkKIHsKICNpZiBQ
TEFURk9STShJT1MpCiAgICAgRm9udExvY2tlciBmb250TG9ja2VyOwpAQCAtMzk5LDcgKzM5OSw3
IEBAIFJlZjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpmb250Rm9yUGwKICAgICAKICAgICBh
dXRvIGFkZFJlc3VsdCA9IGNhY2hlZEZvbnRzKCkuYWRkKHBsYXRmb3JtRGF0YSwgbnVsbHB0cik7
CiAgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICBhZGRSZXN1bHQuaXRlcmF0
b3ItPnZhbHVlID0gU2ltcGxlRm9udERhdGE6OmNyZWF0ZShwbGF0Zm9ybURhdGEpOworICAgICAg
ICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gRm9udDo6Y3JlYXRlKHBsYXRmb3JtRGF0YSk7
CiAKICAgICByZXR1cm4gKmFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiB9CkBAIC00MTYsNyAr
NDE2LDcgQEAgdm9pZCBGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YUlmTgogCiAgICAg
aWYgKGNhY2hlZEZvbnRzKCkuc2l6ZSgpIDwgaW5hY3RpdmVGb250RGF0YUxpbWl0KQogICAgICAg
ICByZXR1cm47Ci0gICAgaW50IGluYWN0aXZlQ291bnQgPSBpbmFjdGl2ZUZvbnREYXRhQ291bnQo
KTsKKyAgICBpbnQgaW5hY3RpdmVDb3VudCA9IGluYWN0aXZlRm9udENvdW50KCk7CiAgICAgaWYg
KGluYWN0aXZlQ291bnQgPD0gaW5hY3RpdmVGb250RGF0YUxpbWl0KQogICAgICAgICByZXR1cm47
CiAKQEAgLTQzNCw3ICs0MzQsNyBAQCB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnRE
YXRhKGluCiAjZW5kaWYKIAogICAgIHdoaWxlIChwdXJnZUNvdW50KSB7Ci0gICAgICAgIFZlY3Rv
cjxSZWZQdHI8U2ltcGxlRm9udERhdGE+LCAyMD4gZm9udHNUb0RlbGV0ZTsKKyAgICAgICAgVmVj
dG9yPFJlZlB0cjxGb250PiwgMjA+IGZvbnRzVG9EZWxldGU7CiAgICAgICAgIGZvciAoYXV0byYg
Zm9udCA6IGNhY2hlZEZvbnRzKCkudmFsdWVzKCkpIHsKICAgICAgICAgICAgIGlmICghZm9udC0+
aGFzT25lUmVmKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC00NjYsOCArNDY2LDgg
QEAgdm9pZCBGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YShpbgogICAgICAgICAgICAg
aWYgKHZlcnRpY2FsRGF0YSkKICAgICAgICAgICAgICAgICB2ZXJ0aWNhbERhdGEtPm1faW5Gb250
Q2FjaGUgPSBmYWxzZTsKICAgICAgICAgfQotICAgICAgICBmb3IgKGF1dG8mIGZvbnREYXRhIDog
Y2FjaGVkRm9udHMoKS52YWx1ZXMoKSkgewotICAgICAgICAgICAgYXV0byogdmVydGljYWxEYXRh
ID0gY29uc3RfY2FzdDxPcGVuVHlwZVZlcnRpY2FsRGF0YSo+KGZvbnREYXRhLT52ZXJ0aWNhbERh
dGEoKSk7CisgICAgICAgIGZvciAoYXV0byYgZm9udCA6IGNhY2hlZEZvbnRzKCkudmFsdWVzKCkp
IHsKKyAgICAgICAgICAgIGF1dG8qIHZlcnRpY2FsRGF0YSA9IGNvbnN0X2Nhc3Q8T3BlblR5cGVW
ZXJ0aWNhbERhdGEqPihmb250LT52ZXJ0aWNhbERhdGEoKSk7CiAgICAgICAgICAgICBpZiAodmVy
dGljYWxEYXRhKQogICAgICAgICAgICAgICAgIHZlcnRpY2FsRGF0YS0+bV9pbkZvbnRDYWNoZSA9
IHRydWU7CiAgICAgICAgIH0KQEAgLTQ4MywxMiArNDgzLDEyIEBAIHZvaWQgRm9udENhY2hlOjpw
dXJnZUluYWN0aXZlRm9udERhdGEoaW4KICNlbmRpZgogfQogCi1zaXplX3QgRm9udENhY2hlOjpm
b250RGF0YUNvdW50KCkKK3NpemVfdCBGb250Q2FjaGU6OmZvbnRDb3VudCgpCiB7CiAgICAgcmV0
dXJuIGNhY2hlZEZvbnRzKCkuc2l6ZSgpOwogfQogCi1zaXplX3QgRm9udENhY2hlOjppbmFjdGl2
ZUZvbnREYXRhQ291bnQoKQorc2l6ZV90IEZvbnRDYWNoZTo6aW5hY3RpdmVGb250Q291bnQoKQog
ewogI2lmIFBMQVRGT1JNKElPUykKICAgICBGb250TG9ja2VyIGZvbnRMb2NrZXI7CkBAIC01NTEs
NyArNTUxLDcgQEAgdm9pZCBGb250Q2FjaGU6OmludmFsaWRhdGUoKQogfQogCiAjaWYgIVBMQVRG
T1JNKENPQ09BKQotUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OnNpbWlsYXJGb250
UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpCitSZWZQdHI8Rm9udD4gRm9udENh
Y2hlOjpzaW1pbGFyRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mKQogewogICAgIHJldHVybiBu
dWxscHRyOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
Y2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhY2hlLmgJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIGNsYXNz
IEZvbnRDYXNjYWRlOwogY2xhc3MgRm9udFBsYXRmb3JtRGF0YTsKIGNsYXNzIEZvbnRTZWxlY3Rv
cjsKIGNsYXNzIE9wZW5UeXBlVmVydGljYWxEYXRhOwotY2xhc3MgU2ltcGxlRm9udERhdGE7Citj
bGFzcyBGb250OwogCiAjaWYgUExBVEZPUk0oV0lOKQogI2lmIFVTRShJTUxBTkdfRk9OVF9MSU5L
MikKQEAgLTExMSw3ICsxMTEsNyBAQCBwdWJsaWM6CiAgICAgZnJpZW5kIEZvbnRDYWNoZSYgZm9u
dENhY2hlKCk7CiAKICAgICAvLyBUaGlzIG1ldGhvZCBpcyBpbXBsZW1lbnRlZCBieSB0aGUgcGxh
dGZvcm0uCi0gICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBzeXN0ZW1GYWxsYmFja0ZvckNoYXJh
Y3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgU2ltcGxlRm9udERhdGEqIG9yaWdp
bmFsRm9udERhdGEsIGJvb2wgaXNQbGF0Zm9ybUZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
LCBpbnQgbGVuZ3RoKTsKKyAgICBSZWZQdHI8Rm9udD4gc3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0
ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEZvbnQqIG9yaWdpbmFsRm9udERhdGEs
IGJvb2wgaXNQbGF0Zm9ybUZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3Ro
KTsKIAogICAgIC8vIEFsc28gaW1wbGVtZW50ZWQgYnkgdGhlIHBsYXRmb3JtLgogICAgIHZvaWQg
cGxhdGZvcm1Jbml0KCk7CkBAIC0xMjgsMTAgKzEyOCwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IGdldFRyYWl0c0luRmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYsIFZlY3Rvcjx1bnNpZ25lZD4m
KTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gZm9udEZvckZh
bWlseShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9taWNTdHJpbmcmLCBib29sIGNo
ZWNraW5nQWx0ZXJuYXRlTmFtZSA9IGZhbHNlKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWY8U2lt
cGxlRm9udERhdGE+IGxhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9u
Jik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgUmVmPFNpbXBsZUZvbnREYXRhPiBmb250Rm9yUGxhdGZv
cm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsKLSAgICBSZWZQdHI8U2ltcGxlRm9udERh
dGE+IHNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpOworICAg
IFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxGb250PiBmb250Rm9yRmFtaWx5KGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYsIGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1l
ID0gZmFsc2UpOworICAgIFdFQkNPUkVfRVhQT1JUIFJlZjxGb250PiBsYXN0UmVzb3J0RmFsbGJh
Y2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpOworICAgIFdFQkNPUkVfRVhQT1JUIFJlZjxG
b250PiBmb250Rm9yUGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsKKyAgICBS
ZWZQdHI8Rm9udD4gc2ltaWxhckZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJik7CiAKICAgICB2
b2lkIGFkZENsaWVudChGb250U2VsZWN0b3IqKTsKICAgICB2b2lkIHJlbW92ZUNsaWVudChGb250
U2VsZWN0b3IqKTsKQEAgLTEzOSwxMiArMTM5LDEyIEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBz
aG9ydCBnZW5lcmF0aW9uKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBpbnZhbGlkYXRlKCk7
CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBzaXplX3QgZm9udERhdGFDb3VudCgpOwotICAgIFdFQkNP
UkVfRVhQT1JUIHNpemVfdCBpbmFjdGl2ZUZvbnREYXRhQ291bnQoKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCBzaXplX3QgZm9udENvdW50KCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc2l6ZV90IGluYWN0
aXZlRm9udENvdW50KCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwdXJnZUluYWN0aXZlRm9u
dERhdGEoaW50IGNvdW50ID0gSU5UX01BWCk7CiAKICNpZiBQTEFURk9STShXSU4pCi0gICAgUmVm
UHRyPFNpbXBsZUZvbnREYXRhPiBmb250RGF0YUZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoY29u
c3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgTE9HRk9OVCYsIEF0b21pY1N0cmluZyYgb3V0Rm9u
dEZhbWlseU5hbWUpOworICAgIFJlZlB0cjxGb250PiBmb250RnJvbURlc2NyaXB0aW9uQW5kTG9n
Rm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBMT0dGT05UJiwgQXRvbWljU3RyaW5n
JiBvdXRGb250RmFtaWx5TmFtZSk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJU
SUNBTCkKQEAgLTE3Myw3ICsxNzMsNyBAQCBwcml2YXRlOgogICAgIC8vIFRoZXNlIG1ldGhvZHMg
YXJlIGltcGxlbWVudGVkIGJ5IGVhY2ggcGxhdGZvcm0uCiAjaWYgUExBVEZPUk0oSU9TKQogICAg
IEZvbnRQbGF0Zm9ybURhdGEqIGdldEN1c3RvbUZhbGxiYWNrRm9udChjb25zdCBVSW50MzIsIGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYpOwotICAgIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IGdl
dFN5c3RlbUZvbnRGYWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9uJiwg
Y29uc3QgU2ltcGxlRm9udERhdGEqLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0
aCk7CisgICAgUGFzc1JlZlB0cjxGb250PiBnZXRTeXN0ZW1Gb250RmFsbGJhY2tGb3JDaGFyYWN0
ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEZvbnQqLCBjb25zdCBVQ2hhciogY2hh
cmFjdGVycywgaW50IGxlbmd0aCk7CiAjZW5kaWYKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBs
YXRmb3JtRGF0YT4gY3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24m
LCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSk7CiAKQEAgLTE4Miw3ICsxODIsNyBAQCBwcml2
YXRlOgogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIGZyaWVuZCBjbGFzcyBDb21wbGV4VGV4dENv
bnRyb2xsZXI7CiAjZW5kaWYKLSAgICBmcmllbmQgY2xhc3MgU2ltcGxlRm9udERhdGE7CisgICAg
ZnJpZW5kIGNsYXNzIEZvbnQ7CiB9OwogCiAvLyBHZXQgdGhlIGdsb2JhbCBmb250Q2FjaGUuCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUu
Y3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250Q2FzY2FkZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNCw4ICsxMjQsOCBAQCBGb250
Q2FzY2FkZTo6Rm9udENhc2NhZGUoY29uc3QgRm9udERlc2NyCiB9CiAKIC8vIEZJWE1FOiBXZSBz
aG91bGQgbWFrZSB0aGlzIGNvbnN0cnVjdG9yIHBsYXRmb3JtLWluZGVwZW5kZW50LgotRm9udENh
c2NhZGU6OkZvbnRDYXNjYWRlKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnREYXRhLCBib29s
IGlzUHJpbnRlckZvbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmdNb2RlKQotICAg
IDogbV9nbHlwaHMoRm9udEdseXBoczo6Y3JlYXRlRm9yUGxhdGZvcm1Gb250KGZvbnREYXRhKSkK
K0ZvbnRDYXNjYWRlOjpGb250Q2FzY2FkZShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBmb250LCBi
b29sIGlzUHJpbnRlckZvbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmdNb2RlKQor
ICAgIDogbV9nbHlwaHMoRm9udEdseXBoczo6Y3JlYXRlRm9yUGxhdGZvcm1Gb250KGZvbnQpKQog
ICAgICwgbV9sZXR0ZXJTcGFjaW5nKDApCiAgICAgLCBtX3dvcmRTcGFjaW5nKDApCiAgICAgLCBt
X3VzZUJhY2tzbGFzaEFzWWVuU3ltYm9sKGZhbHNlKQpAQCAtMTM0LDI3ICsxMzQsMjcgQEAgRm9u
dENhc2NhZGU6OkZvbnRDYXNjYWRlKGNvbnN0IEZvbnRQbGF0ZgogICAgIG1fZm9udERlc2NyaXB0
aW9uLnNldFVzZVByaW50ZXJGb250KGlzUHJpbnRlckZvbnQpOwogICAgIG1fZm9udERlc2NyaXB0
aW9uLnNldEZvbnRTbW9vdGhpbmcoZm9udFNtb290aGluZ01vZGUpOwogI2lmIFBMQVRGT1JNKElP
UykKLSAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKENURm9udEdldFNpemUo
Zm9udERhdGEuZm9udCgpKSk7Ci0gICAgbV9mb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXpl
KENURm9udEdldFNpemUoZm9udERhdGEuZm9udCgpKSk7Ci0gICAgbV9mb250RGVzY3JpcHRpb24u
c2V0SXNJdGFsaWMoQ1RGb250R2V0U3ltYm9saWNUcmFpdHMoZm9udERhdGEuZm9udCgpKSAmIGtD
VEZvbnRUcmFpdEl0YWxpYyk7Ci0gICAgbV9mb250RGVzY3JpcHRpb24uc2V0V2VpZ2h0KChDVEZv
bnRHZXRTeW1ib2xpY1RyYWl0cyhmb250RGF0YS5mb250KCkpICYga0NURm9udFRyYWl0Qm9sZCkg
PyBGb250V2VpZ2h0Qm9sZCA6IEZvbnRXZWlnaHROb3JtYWwpOworICAgIG1fZm9udERlc2NyaXB0
aW9uLnNldFNwZWNpZmllZFNpemUoQ1RGb250R2V0U2l6ZShmb250LmZvbnQoKSkpOworICAgIG1f
Zm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShDVEZvbnRHZXRTaXplKGZvbnQuZm9udCgp
KSk7CisgICAgbV9mb250RGVzY3JpcHRpb24uc2V0SXNJdGFsaWMoQ1RGb250R2V0U3ltYm9saWNU
cmFpdHMoZm9udC5mb250KCkpICYga0NURm9udFRyYWl0SXRhbGljKTsKKyAgICBtX2ZvbnREZXNj
cmlwdGlvbi5zZXRXZWlnaHQoKENURm9udEdldFN5bWJvbGljVHJhaXRzKGZvbnQuZm9udCgpKSAm
IGtDVEZvbnRUcmFpdEJvbGQpID8gRm9udFdlaWdodEJvbGQgOiBGb250V2VpZ2h0Tm9ybWFsKTsK
ICNlbmRpZgogfQogCiAvLyBGSVhNRTogV2Ugc2hvdWxkIG1ha2UgdGhpcyBjb25zdHJ1Y3RvciBw
bGF0Zm9ybS1pbmRlcGVuZGVudC4KICNpZiBQTEFURk9STShJT1MpCi1Gb250Q2FzY2FkZTo6Rm9u
dENhc2NhZGUoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZm9udERhdGEsIFBhc3NSZWZQdHI8Rm9u
dFNlbGVjdG9yPiBmb250U2VsZWN0b3IpCi0gICAgOiBtX2dseXBocyhGb250R2x5cGhzOjpjcmVh
dGVGb3JQbGF0Zm9ybUZvbnQoZm9udERhdGEpKQorRm9udENhc2NhZGU6OkZvbnRDYXNjYWRlKGNv
bnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnQsIFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPiBmb250
U2VsZWN0b3IpCisgICAgOiBtX2dseXBocyhGb250R2x5cGhzOjpjcmVhdGVGb3JQbGF0Zm9ybUZv
bnQoZm9udCkpCiAgICAgLCBtX2xldHRlclNwYWNpbmcoMCkKICAgICAsIG1fd29yZFNwYWNpbmco
MCkKICAgICAsIG1fdHlwZXNldHRpbmdGZWF0dXJlcyhjb21wdXRlVHlwZXNldHRpbmdGZWF0dXJl
cygpKQogewotICAgIENURm9udFJlZiBwcmltYXJ5Rm9udCA9IGZvbnREYXRhLmZvbnQoKTsKKyAg
ICBDVEZvbnRSZWYgcHJpbWFyeUZvbnQgPSBmb250LmZvbnQoKTsKICAgICBtX2ZvbnREZXNjcmlw
dGlvbi5zZXRTcGVjaWZpZWRTaXplKENURm9udEdldFNpemUocHJpbWFyeUZvbnQpKTsKICAgICBt
X2ZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoQ1RGb250R2V0U2l6ZShwcmltYXJ5Rm9u
dCkpOwogICAgIG1fZm9udERlc2NyaXB0aW9uLnNldElzSXRhbGljKENURm9udEdldFN5bWJvbGlj
VHJhaXRzKHByaW1hcnlGb250KSAmIGtDVEZvbnRUcmFpdEl0YWxpYyk7CiAgICAgbV9mb250RGVz
Y3JpcHRpb24uc2V0V2VpZ2h0KChDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhwcmltYXJ5Rm9udCkg
JiBrQ1RGb250VHJhaXRCb2xkKSA/IEZvbnRXZWlnaHRCb2xkIDogRm9udFdlaWdodE5vcm1hbCk7
Ci0gICAgbV9mb250RGVzY3JpcHRpb24uc2V0VXNlUHJpbnRlckZvbnQoZm9udERhdGEuaXNQcmlu
dGVyRm9udCgpKTsKKyAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRVc2VQcmludGVyRm9udChmb250
LmlzUHJpbnRlckZvbnQoKSk7CiAgICAgbV9nbHlwaHMgPSByZXRyaWV2ZU9yQWRkQ2FjaGVkRm9u
dEdseXBocyhtX2ZvbnREZXNjcmlwdGlvbiwgZm9udFNlbGVjdG9yLmdldCgpKTsKIH0KICNlbmRp
ZgpAQCAtMzcxLDcgKzM3MSw3IEBAIHZvaWQgRm9udENhc2NhZGU6OmRyYXdFbXBoYXNpc01hcmtz
KEdyYXAKICAgICAgICAgZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChjb250ZXh0LCBy
dW4sIG1hcmssIHBvaW50LCBmcm9tLCB0byk7CiB9CiAKLWZsb2F0IEZvbnRDYXNjYWRlOjp3aWR0
aChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFs
bGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKK2Zsb2F0IEZv
bnRDYXNjYWRlOjp3aWR0aChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgRm9udCo+
KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAogewog
ICAgIENvZGVQYXRoIGNvZGVQYXRoVG9Vc2UgPSBjb2RlUGF0aChydW4pOwogICAgIGlmIChjb2Rl
UGF0aFRvVXNlICE9IENvbXBsZXgpIHsKQEAgLTM4OSw3ICszODksNyBAQCBmbG9hdCBGb250Q2Fz
Y2FkZTo6d2lkdGgoY29uc3QgVGV4dFJ1biYgCiAgICAgaWYgKGNhY2hlRW50cnkgJiYgIXN0ZDo6
aXNuYW4oKmNhY2hlRW50cnkpKQogICAgICAgICByZXR1cm4gKmNhY2hlRW50cnk7CiAKLSAgICBI
YXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4gbG9jYWxGYWxsYmFja0ZvbnRzOworICAgIEhh
c2hTZXQ8Y29uc3QgRm9udCo+IGxvY2FsRmFsbGJhY2tGb250czsKICAgICBpZiAoIWZhbGxiYWNr
Rm9udHMpCiAgICAgICAgIGZhbGxiYWNrRm9udHMgPSAmbG9jYWxGYWxsYmFja0ZvbnRzOwogCkBA
IC00MTYsMTAgKzQxNiwxMCBAQCBmbG9hdCBGb250Q2FzY2FkZTo6d2lkdGgoY29uc3QgVGV4dFJ1
biYgCiAgICAgcmV0dXJuIHdpZHRoKHJ1bik7CiB9CiAKLUdseXBoRGF0YSBGb250Q2FzY2FkZTo6
Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYywgYm9vbCBtaXJyb3IsIEZvbnREYXRhVmFy
aWFudCB2YXJpYW50KSBjb25zdAorR2x5cGhEYXRhIEZvbnRDYXNjYWRlOjpnbHlwaERhdGFGb3JD
aGFyYWN0ZXIoVUNoYXIzMiBjLCBib29sIG1pcnJvciwgRm9udFZhcmlhbnQgdmFyaWFudCkgY29u
c3QKIHsKICAgICBpZiAodmFyaWFudCA9PSBBdXRvVmFyaWFudCkgewotICAgICAgICBpZiAobV9m
b250RGVzY3JpcHRpb24uc21hbGxDYXBzKCkgJiYgIXByaW1hcnlGb250RGF0YSgpLmlzU1ZHRm9u
dCgpKSB7CisgICAgICAgIGlmIChtX2ZvbnREZXNjcmlwdGlvbi5zbWFsbENhcHMoKSAmJiAhcHJp
bWFyeUZvbnQoKS5pc1NWR0ZvbnQoKSkgewogICAgICAgICAgICAgVUNoYXIzMiB1cHBlckMgPSB1
X3RvdXBwZXIoYyk7CiAgICAgICAgICAgICBpZiAodXBwZXJDICE9IGMpIHsKICAgICAgICAgICAg
ICAgICBjID0gdXBwZXJDOwpAQCAtNDQ2LDcgKzQ0Niw3IEBAIHZvaWQgRm9udENhc2NhZGU6OmRl
bGV0ZUxheW91dChUZXh0TGF5b3UKIHsKIH0KIAotZmxvYXQgRm9udENhc2NhZGU6OndpZHRoKFRl
eHRMYXlvdXQmLCB1bnNpZ25lZCwgdW5zaWduZWQsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERh
dGEqPiopCitmbG9hdCBGb250Q2FzY2FkZTo6d2lkdGgoVGV4dExheW91dCYsIHVuc2lnbmVkLCB1
bnNpZ25lZCwgSGFzaFNldDxjb25zdCBGb250Kj4qKQogewogICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgIHJldHVybiAwOwpAQCAtNTA1LDcgKzUwNSw3IEBAIGJvb2wgRm9udENhc2NhZGU6
Omhhc1ZhbGlkQXZlcmFnZUNoYXJXaWQKIAogI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0o
SU9TKQogICAgIC8vIEludGVybmFsIGZvbnRzIG9uIE9TIFggYW5kIGlPUyBhbHNvIGhhdmUgYW4g
aW52YWxpZCBlbnRyeSBpbiB0aGUgdGFibGUgZm9yIGF2Z0NoYXJXaWR0aC4KLSAgICBpZiAocHJp
bWFyeUZvbnREYXRhSXNTeXN0ZW1Gb250KCkpCisgICAgaWYgKHByaW1hcnlGb250SXNTeXN0ZW1G
b250KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgogCkBAIC01MjUsNyArNTI1LDcg
QEAgYm9vbCBGb250Q2FzY2FkZTo6ZmFzdEF2ZXJhZ2VDaGFyV2lkdGhJZgogewogICAgIGJvb2wg
c3VjY2VzcyA9IGhhc1ZhbGlkQXZlcmFnZUNoYXJXaWR0aCgpOwogICAgIGlmIChzdWNjZXNzKQot
ICAgICAgICB3aWR0aCA9IHJvdW5kZihwcmltYXJ5Rm9udERhdGEoKS5hdmdDaGFyV2lkdGgoKSk7
IC8vIEZJWE1FOiBwcmltYXJ5Rm9udERhdGEoKSBtaWdodCBub3QgY29ycmVzcG9uZCB0byBmaXJz
dEZhbWlseSgpLgorICAgICAgICB3aWR0aCA9IHJvdW5kZihwcmltYXJ5Rm9udCgpLmF2Z0NoYXJX
aWR0aCgpKTsgLy8gRklYTUU6IHByaW1hcnlGb250KCkgbWlnaHQgbm90IGNvcnJlc3BvbmQgdG8g
Zmlyc3RGYW1pbHkoKS4KICAgICByZXR1cm4gc3VjY2VzczsKIH0KIApAQCAtMTE3Myw3ICsxMTcz
LDcgQEAgaW50IEZvbnRDYXNjYWRlOjplbXBoYXNpc01hcmtBc2NlbnQoY29ucwogICAgIGlmICgh
Z2V0RW1waGFzaXNNYXJrR2x5cGhEYXRhKG1hcmssIG1hcmtHbHlwaERhdGEpKQogICAgICAgICBy
ZXR1cm4gMDsKIAotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBtYXJrRm9udERhdGEgPSBtYXJr
R2x5cGhEYXRhLmZvbnREYXRhOworICAgIGNvbnN0IEZvbnQqIG1hcmtGb250RGF0YSA9IG1hcmtH
bHlwaERhdGEuZm9udDsKICAgICBBU1NFUlQobWFya0ZvbnREYXRhKTsKICAgICBpZiAoIW1hcmtG
b250RGF0YSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMTg3LDcgKzExODcsNyBAQCBpbnQgRm9u
dENhc2NhZGU6OmVtcGhhc2lzTWFya0Rlc2NlbnQoY29uCiAgICAgaWYgKCFnZXRFbXBoYXNpc01h
cmtHbHlwaERhdGEobWFyaywgbWFya0dseXBoRGF0YSkpCiAgICAgICAgIHJldHVybiAwOwogCi0g
ICAgY29uc3QgU2ltcGxlRm9udERhdGEqIG1hcmtGb250RGF0YSA9IG1hcmtHbHlwaERhdGEuZm9u
dERhdGE7CisgICAgY29uc3QgRm9udCogbWFya0ZvbnREYXRhID0gbWFya0dseXBoRGF0YS5mb250
OwogICAgIEFTU0VSVChtYXJrRm9udERhdGEpOwogICAgIGlmICghbWFya0ZvbnREYXRhKQogICAg
ICAgICByZXR1cm4gMDsKQEAgLTEyMDEsNyArMTIwMSw3IEBAIGludCBGb250Q2FzY2FkZTo6ZW1w
aGFzaXNNYXJrSGVpZ2h0KGNvbnMKICAgICBpZiAoIWdldEVtcGhhc2lzTWFya0dseXBoRGF0YSht
YXJrLCBtYXJrR2x5cGhEYXRhKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBjb25zdCBTaW1w
bGVGb250RGF0YSogbWFya0ZvbnREYXRhID0gbWFya0dseXBoRGF0YS5mb250RGF0YTsKKyAgICBj
b25zdCBGb250KiBtYXJrRm9udERhdGEgPSBtYXJrR2x5cGhEYXRhLmZvbnQ7CiAgICAgQVNTRVJU
KG1hcmtGb250RGF0YSk7CiAgICAgaWYgKCFtYXJrRm9udERhdGEpCiAgICAgICAgIHJldHVybiAw
OwpAQCAtMTI3Myw3ICsxMjczLDcgQEAgdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBoQnVmZmVy
KEdyYXBoaQogI2VuZGlmCiAKICAgICAvLyBEcmF3IGVhY2ggY29udGlndW91cyBydW4gb2YgZ2x5
cGhzIHRoYXQgdXNlIHRoZSBzYW1lIGZvbnQgZGF0YS4KLSAgICBjb25zdCBTaW1wbGVGb250RGF0
YSogZm9udERhdGEgPSBnbHlwaEJ1ZmZlci5mb250RGF0YUF0KDApOworICAgIGNvbnN0IEZvbnQq
IGZvbnREYXRhID0gZ2x5cGhCdWZmZXIuZm9udEF0KDApOwogICAgIEZsb2F0U2l6ZSBvZmZzZXQg
PSBnbHlwaEJ1ZmZlci5vZmZzZXRBdCgwKTsKICAgICBGbG9hdFBvaW50IHN0YXJ0UG9pbnQocG9p
bnQueCgpLCBwb2ludC55KCkgLSBnbHlwaEJ1ZmZlci5pbml0aWFsQWR2YW5jZSgpLmhlaWdodCgp
KTsKICAgICBmbG9hdCBuZXh0WCA9IHN0YXJ0UG9pbnQueCgpICsgZ2x5cGhCdWZmZXIuYWR2YW5j
ZUF0KDApLndpZHRoKCk7CkBAIC0xMjg0LDcgKzEyODQsNyBAQCB2b2lkIEZvbnRDYXNjYWRlOjpk
cmF3R2x5cGhCdWZmZXIoR3JhcGhpCiAgICAgVGV4dFJ1bjo6UmVuZGVyaW5nQ29udGV4dCogcmVu
ZGVyaW5nQ29udGV4dCA9IHJ1bi5yZW5kZXJpbmdDb250ZXh0KCk7CiAjZW5kaWYKICAgICB3aGls
ZSAobmV4dEdseXBoIDwgZ2x5cGhCdWZmZXIuc2l6ZSgpKSB7Ci0gICAgICAgIGNvbnN0IFNpbXBs
ZUZvbnREYXRhKiBuZXh0Rm9udERhdGEgPSBnbHlwaEJ1ZmZlci5mb250RGF0YUF0KG5leHRHbHlw
aCk7CisgICAgICAgIGNvbnN0IEZvbnQqIG5leHRGb250RGF0YSA9IGdseXBoQnVmZmVyLmZvbnRB
dChuZXh0R2x5cGgpOwogICAgICAgICBGbG9hdFNpemUgbmV4dE9mZnNldCA9IGdseXBoQnVmZmVy
Lm9mZnNldEF0KG5leHRHbHlwaCk7CiAKICAgICAgICAgaWYgKG5leHRGb250RGF0YSAhPSBmb250
RGF0YSB8fCBuZXh0T2Zmc2V0ICE9IG9mZnNldCkgewpAQCAtMTMxNyw3ICsxMzE3LDcgQEAgdm9p
ZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBoQnVmZmVyKEdyYXBoaQogICAgIH0KIH0KIAotaW5saW5l
IHN0YXRpYyBmbG9hdCBvZmZzZXRUb01pZGRsZU9mR2x5cGgoY29uc3QgU2ltcGxlRm9udERhdGEq
IGZvbnREYXRhLCBHbHlwaCBnbHlwaCkKK2lubGluZSBzdGF0aWMgZmxvYXQgb2Zmc2V0VG9NaWRk
bGVPZkdseXBoKGNvbnN0IEZvbnQqIGZvbnREYXRhLCBHbHlwaCBnbHlwaCkKIHsKICAgICBpZiAo
Zm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbCkgewog
ICAgICAgICBGbG9hdFJlY3QgYm91bmRzID0gZm9udERhdGEtPmJvdW5kc0ZvckdseXBoKGdseXBo
KTsKQEAgLTEzMjksNyArMTMyOSw3IEBAIGlubGluZSBzdGF0aWMgZmxvYXQgb2Zmc2V0VG9NaWRk
bGVPZkdseXAKIAogaW5saW5lIHN0YXRpYyBmbG9hdCBvZmZzZXRUb01pZGRsZU9mR2x5cGhBdElu
ZGV4KGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgc2l6ZV90IGkpCiB7Ci0gICAgcmV0
dXJuIG9mZnNldFRvTWlkZGxlT2ZHbHlwaChnbHlwaEJ1ZmZlci5mb250RGF0YUF0KGkpLCBnbHlw
aEJ1ZmZlci5nbHlwaEF0KGkpKTsKKyAgICByZXR1cm4gb2Zmc2V0VG9NaWRkbGVPZkdseXBoKGds
eXBoQnVmZmVyLmZvbnRBdChpKSwgZ2x5cGhCdWZmZXIuZ2x5cGhBdChpKSk7CiB9CiAKIHZvaWQg
Rm9udENhc2NhZGU6OmRyYXdFbXBoYXNpc01hcmtzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
Y29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGNvbnN0
IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0CkBAIC0x
MzM4LDcgKzEzMzgsNyBAQCB2b2lkIEZvbnRDYXNjYWRlOjpkcmF3RW1waGFzaXNNYXJrcyhHcmFw
CiAgICAgaWYgKCFnZXRFbXBoYXNpc01hcmtHbHlwaERhdGEobWFyaywgbWFya0dseXBoRGF0YSkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBtYXJrRm9udERh
dGEgPSBtYXJrR2x5cGhEYXRhLmZvbnREYXRhOworICAgIGNvbnN0IEZvbnQqIG1hcmtGb250RGF0
YSA9IG1hcmtHbHlwaERhdGEuZm9udDsKICAgICBBU1NFUlQobWFya0ZvbnREYXRhKTsKICAgICBp
ZiAoIW1hcmtGb250RGF0YSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTM2MSw3ICsxMzYxLDcgQEAg
dm9pZCBGb250Q2FzY2FkZTo6ZHJhd0VtcGhhc2lzTWFya3MoR3JhcAogICAgIGRyYXdHbHlwaEJ1
ZmZlcihjb250ZXh0LCBydW4sIG1hcmtCdWZmZXIsIHN0YXJ0UG9pbnQpOwogfQogCi1mbG9hdCBG
b250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBI
YXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZs
b3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0CitmbG9hdCBGb250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZv
clNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFs
bGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKIHsKICAgICBX
aWR0aEl0ZXJhdG9yIGl0KHRoaXMsIHJ1biwgZmFsbGJhY2tGb250cywgZ2x5cGhPdmVyZmxvdyk7
CiAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgJKHJldmlzaW9uIDE3ODg1NykKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDEwICsyNiwxMCBAQAogI2RlZmluZSBGb250Q2FzY2FkZV9oCiAKICNpbmNsdWRl
ICJEYXNoQXJyYXkuaCIKKyNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9udERlc2NyaXB0
aW9uLmgiCiAjaW5jbHVkZSAiRm9udEdseXBocy5oIgogI2luY2x1ZGUgIlBhdGguaCIKLSNpbmNs
dWRlICJTaW1wbGVGb250RGF0YS5oIgogI2luY2x1ZGUgIlRleHREaXJlY3Rpb24uaCIKICNpbmNs
dWRlICJUeXBlc2V0dGluZ0ZlYXR1cmVzLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAg
LTEzNCwxNyArMTM0LDE3IEBAIHB1YmxpYzoKIAogICAgIGVudW0gQ3VzdG9tRm9udE5vdFJlYWR5
QWN0aW9uIHsgRG9Ob3RQYWludElmRm9udE5vdFJlYWR5LCBVc2VGYWxsYmFja0lmRm9udE5vdFJl
YWR5IH07CiAgICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQgZHJhd1RleHQoR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGludCB0
byA9IC0xLCBDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPSBEb05vdFBhaW50SWZGb250Tm90UmVh
ZHkpIGNvbnN0OwotICAgIHZvaWQgZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBT
aW1wbGVGb250RGF0YSosIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCBudW1HbHlw
aHMsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKKyAgICB2b2lkIGRyYXdHbHlwaHMoR3JhcGhp
Y3NDb250ZXh0KiwgY29uc3QgRm9udCosIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGlu
dCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKICAgICB2b2lkIGRyYXdFbXBo
YXNpc01hcmtzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9taWNT
dHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0x
KSBjb25zdDsKIAogICAgIERhc2hBcnJheSBkYXNoZXNGb3JJbnRlcnNlY3Rpb25zV2l0aFJlY3Qo
Y29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIGNvbnN0IEZsb2F0
UmVjdCYgbGluZUV4dGVudHMpIGNvbnN0OwogCi0gICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQgd2lk
dGgoY29uc3QgVGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJh
Y2tGb250cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBP
UlQgZmxvYXQgd2lkdGgoY29uc3QgVGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxs
YmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsKICAgICBmbG9hdCB3aWR0
aChjb25zdCBUZXh0UnVuJiwgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcmIGdseXBoTmFtZSkg
Y29uc3Q7CiAKICAgICBQYXNzT3duUHRyPFRleHRMYXlvdXQ+IGNyZWF0ZUxheW91dChSZW5kZXJU
ZXh0KiwgZmxvYXQgeFBvcywgYm9vbCBjb2xsYXBzZVdoaXRlU3BhY2UpIGNvbnN0OwogICAgIHN0
YXRpYyB2b2lkIGRlbGV0ZUxheW91dChUZXh0TGF5b3V0Kik7Ci0gICAgc3RhdGljIGZsb2F0IHdp
ZHRoKFRleHRMYXlvdXQmLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIEhhc2hTZXQ8Y29u
c3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDApOworICAgIHN0YXRpYyBmbG9h
dCB3aWR0aChUZXh0TGF5b3V0JiwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBIYXNoU2V0
PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cyA9IDApOwogCiAgICAgaW50IG9mZnNldEZvclBv
c2l0aW9uKGNvbnN0IFRleHRSdW4mLCBmbG9hdCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlh
bEdseXBocykgY29uc3Q7CiAgICAgdm9pZCBhZGp1c3RTZWxlY3Rpb25SZWN0Rm9yVGV4dChjb25z
dCBUZXh0UnVuJiwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgaW50IGZyb20gPSAwLCBpbnQg
dG8gPSAtMSkgY29uc3Q7CkBAIC0xNzIsMTAgKzE3MiwxMCBAQCBwdWJsaWM6CiAKICAgICBib29s
IGlzUGxhdGZvcm1Gb250KCkgY29uc3QgeyByZXR1cm4gbV9nbHlwaHMtPmlzRm9yUGxhdGZvcm1G
b250KCk7IH0KIAotICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBmb250TWV0cmljcygpIGNvbnN0IHsg
cmV0dXJuIHByaW1hcnlGb250RGF0YSgpLmZvbnRNZXRyaWNzKCk7IH0KLSAgICBmbG9hdCBzcGFj
ZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gcHJpbWFyeUZvbnREYXRhKCkuc3BhY2VXaWR0aCgpICsg
bV9sZXR0ZXJTcGFjaW5nOyB9Ci0gICAgZmxvYXQgdGFiV2lkdGgoY29uc3QgU2ltcGxlRm9udERh
dGEmLCB1bnNpZ25lZCB0YWJTaXplLCBmbG9hdCBwb3NpdGlvbikgY29uc3Q7Ci0gICAgZmxvYXQg
dGFiV2lkdGgodW5zaWduZWQgdGFiU2l6ZSwgZmxvYXQgcG9zaXRpb24pIGNvbnN0IHsgcmV0dXJu
IHRhYldpZHRoKHByaW1hcnlGb250RGF0YSgpLCB0YWJTaXplLCBwb3NpdGlvbik7IH0KKyAgICBj
b25zdCBGb250TWV0cmljcyYgZm9udE1ldHJpY3MoKSBjb25zdCB7IHJldHVybiBwcmltYXJ5Rm9u
dCgpLmZvbnRNZXRyaWNzKCk7IH0KKyAgICBmbG9hdCBzcGFjZVdpZHRoKCkgY29uc3QgeyByZXR1
cm4gcHJpbWFyeUZvbnQoKS5zcGFjZVdpZHRoKCkgKyBtX2xldHRlclNwYWNpbmc7IH0KKyAgICBm
bG9hdCB0YWJXaWR0aChjb25zdCBGb250JiwgdW5zaWduZWQgdGFiU2l6ZSwgZmxvYXQgcG9zaXRp
b24pIGNvbnN0OworICAgIGZsb2F0IHRhYldpZHRoKHVuc2lnbmVkIHRhYlNpemUsIGZsb2F0IHBv
c2l0aW9uKSBjb25zdCB7IHJldHVybiB0YWJXaWR0aChwcmltYXJ5Rm9udCgpLCB0YWJTaXplLCBw
b3NpdGlvbik7IH0KICAgICBib29sIGhhc1ZhbGlkQXZlcmFnZUNoYXJXaWR0aCgpIGNvbnN0Owog
ICAgIGJvb2wgZmFzdEF2ZXJhZ2VDaGFyV2lkdGhJZkF2YWlsYWJsZShmbG9hdCAmd2lkdGgpIGNv
bnN0OyAvLyByZXR1cm5zIHRydWUgb24gc3VjY2VzcwogCkBAIC0xODMsMTIgKzE4MywxMiBAQCBw
dWJsaWM6CiAgICAgaW50IGVtcGhhc2lzTWFya0Rlc2NlbnQoY29uc3QgQXRvbWljU3RyaW5nJikg
Y29uc3Q7CiAgICAgaW50IGVtcGhhc2lzTWFya0hlaWdodChjb25zdCBBdG9taWNTdHJpbmcmKSBj
b25zdDsKIAotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhJiBwcmltYXJ5Rm9udERhdGEoKSBjb25z
dDsKKyAgICBjb25zdCBGb250JiBwcmltYXJ5Rm9udCgpIGNvbnN0OwogICAgIGNvbnN0IEZvbnRS
YW5nZXMmIGZhbGxiYWNrUmFuZ2VzQXQodW5zaWduZWQpIGNvbnN0OwotICAgIEdseXBoRGF0YSBn
bHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiwgYm9vbCBtaXJyb3IsIEZvbnREYXRhVmFyaWFu
dCA9IEF1dG9WYXJpYW50KSBjb25zdDsKKyAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yQ2hhcmFj
dGVyKFVDaGFyMzIsIGJvb2wgbWlycm9yLCBGb250VmFyaWFudCA9IEF1dG9WYXJpYW50KSBjb25z
dDsKICAgICAKICNpZiBQTEFURk9STShDT0NPQSkKLSAgICBjb25zdCBTaW1wbGVGb250RGF0YSog
Zm9udERhdGFGb3JDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBVQ2hhciosIHNpemVf
dCBsZW5ndGgsIEZvbnREYXRhVmFyaWFudCkgY29uc3Q7CisgICAgY29uc3QgRm9udCogZm9udEZv
ckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVDaGFyKiwgc2l6ZV90IGxlbmd0aCwg
Rm9udFZhcmlhbnQpIGNvbnN0OwogI2VuZGlmCiAKICAgICBzdGF0aWMgYm9vbCBpc0NKS0lkZW9n
cmFwaChVQ2hhcjMyKTsKQEAgLTIwNyw3ICsyMDcsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIENv
ZGVQYXRoIGNoYXJhY3RlclJhbmdlQ29kZVBhdGgoY29uc3QgTENoYXIqLCB1bnNpZ25lZCkgeyBy
ZXR1cm4gU2ltcGxlOyB9CiAgICAgc3RhdGljIENvZGVQYXRoIGNoYXJhY3RlclJhbmdlQ29kZVBh
dGgoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW4pOwogCi0gICAgYm9vbCBwcmltYXJ5Rm9udERh
dGFJc1N5c3RlbUZvbnQoKSBjb25zdDsKKyAgICBib29sIHByaW1hcnlGb250SXNTeXN0ZW1Gb250
KCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgZW51bSBGb3JUZXh0RW1waGFzaXNPck5vdCB7IE5v
dEZvclRleHRFbXBoYXNpcywgRm9yVGV4dEVtcGhhc2lzIH07CkBAIC0yMTgsNyArMjE4LDcgQEAg
cHJpdmF0ZToKICAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzRm9yU2ltcGxlVGV4dChHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25z
dCBGbG9hdFBvaW50JiwgaW50IGZyb20sIGludCB0bykgY29uc3Q7CiAgICAgdm9pZCBkcmF3R2x5
cGhCdWZmZXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEdseXBoQnVm
ZmVyJiwgRmxvYXRQb2ludCYpIGNvbnN0OwogICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3MoR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEdseXBoQnVmZmVyJiwgY29uc3Qg
QXRvbWljU3RyaW5nJiwgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OwotICAgIGZsb2F0IGZsb2F0
V2lkdGhGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZv
bnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93KiA9IDApIGNvbnN0Owor
ICAgIGZsb2F0IGZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mLCBIYXNoU2V0
PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29u
c3Q7CiAgICAgaW50IG9mZnNldEZvclBvc2l0aW9uRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVu
JiwgZmxvYXQgcG9zaXRpb24sIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0OwogICAg
IHZvaWQgYWRqdXN0U2VsZWN0aW9uUmVjdEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYsIExh
eW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0OwogCkBAIC0y
MzEsNyArMjMxLDcgQEAgcHJpdmF0ZToKICAgICBmbG9hdCBnZXRHbHlwaHNBbmRBZHZhbmNlc0Zv
ckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBpbnQgZnJvbSwgaW50IHRvLCBHbHlwaEJ1ZmZl
ciYsIEZvclRleHRFbXBoYXNpc09yTm90ID0gTm90Rm9yVGV4dEVtcGhhc2lzKSBjb25zdDsKICAg
ICBmbG9hdCBkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYs
IGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdDsKICAgICB2b2lkIGRy
YXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4
dFJ1biYsIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIGludCBm
cm9tLCBpbnQgdG8pIGNvbnN0OwotICAgIGZsb2F0IGZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChj
b25zdCBUZXh0UnVuJiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0Zv
bnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsKKyAgICBmbG9hdCBmbG9hdFdpZHRo
Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxs
YmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsKICAgICBpbnQgb2Zmc2V0
Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwgZmxvYXQgcG9zaXRpb24s
IGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0OwogICAgIHZvaWQgYWRqdXN0U2VsZWN0
aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBMYXlvdXRSZWN0JiBzZWxlY3Rp
b25SZWN0LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdDsKIApAQCAtMzUyLDEwICszNTIsMTAgQEAg
aW5saW5lIEZvbnRDYXNjYWRlOjp+Rm9udENhc2NhZGUoKQogewogfQogCi1pbmxpbmUgY29uc3Qg
U2ltcGxlRm9udERhdGEmIEZvbnRDYXNjYWRlOjpwcmltYXJ5Rm9udERhdGEoKSBjb25zdAoraW5s
aW5lIGNvbnN0IEZvbnQmIEZvbnRDYXNjYWRlOjpwcmltYXJ5Rm9udCgpIGNvbnN0CiB7CiAgICAg
QVNTRVJUKG1fZ2x5cGhzKTsKLSAgICByZXR1cm4gbV9nbHlwaHMtPnByaW1hcnlTaW1wbGVGb250
RGF0YShtX2ZvbnREZXNjcmlwdGlvbik7CisgICAgcmV0dXJuIG1fZ2x5cGhzLT5wcmltYXJ5Rm9u
dChtX2ZvbnREZXNjcmlwdGlvbik7CiB9CiAKIGlubGluZSBjb25zdCBGb250UmFuZ2VzJiBGb250
Q2FzY2FkZTo6ZmFsbGJhY2tSYW5nZXNBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QKQEAgLTM3NSwx
MyArMzc1LDEzIEBAIGlubGluZSBGb250U2VsZWN0b3IqIEZvbnRDYXNjYWRlOjpmb250U2UKICAg
ICByZXR1cm4gbV9nbHlwaHMgPyBtX2dseXBocy0+Zm9udFNlbGVjdG9yKCkgOiAwOwogfQogCi1p
bmxpbmUgZmxvYXQgRm9udENhc2NhZGU6OnRhYldpZHRoKGNvbnN0IFNpbXBsZUZvbnREYXRhJiBm
b250RGF0YSwgdW5zaWduZWQgdGFiU2l6ZSwgZmxvYXQgcG9zaXRpb24pIGNvbnN0CitpbmxpbmUg
ZmxvYXQgRm9udENhc2NhZGU6OnRhYldpZHRoKGNvbnN0IEZvbnQmIGZvbnQsIHVuc2lnbmVkIHRh
YlNpemUsIGZsb2F0IHBvc2l0aW9uKSBjb25zdAogewogICAgIGlmICghdGFiU2l6ZSkKICAgICAg
ICAgcmV0dXJuIGxldHRlclNwYWNpbmcoKTsKLSAgICBmbG9hdCB0YWJXaWR0aCA9IHRhYlNpemUg
KiBmb250RGF0YS5zcGFjZVdpZHRoKCkgKyBsZXR0ZXJTcGFjaW5nKCk7CisgICAgZmxvYXQgdGFi
V2lkdGggPSB0YWJTaXplICogZm9udC5zcGFjZVdpZHRoKCkgKyBsZXR0ZXJTcGFjaW5nKCk7CiAg
ICAgZmxvYXQgdGFiRGVsdGFXaWR0aCA9IHRhYldpZHRoIC0gZm1vZGYocG9zaXRpb24sIHRhYldp
ZHRoKTsKLSAgICByZXR1cm4gKHRhYkRlbHRhV2lkdGggPCBmb250RGF0YS5zcGFjZVdpZHRoKCkg
LyAyKSA/IHRhYldpZHRoIDogdGFiRGVsdGFXaWR0aDsKKyAgICByZXR1cm4gKHRhYkRlbHRhV2lk
dGggPCBmb250LnNwYWNlV2lkdGgoKSAvIDIpID8gdGFiV2lkdGggOiB0YWJEZWx0YVdpZHRoOwog
fQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250R2x5cGhz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
R2x5cGhzLmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udEdseXBocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiAKIEZvbnRHbHlwaHM6OkZvbnRHbHlwaHMoUGFzc1JlZlB0
cjxGb250U2VsZWN0b3I+IGZvbnRTZWxlY3RvcikKLSAgICA6IG1fY2FjaGVkUHJpbWFyeVNpbXBs
ZUZvbnREYXRhKDApCisgICAgOiBtX2NhY2hlZFByaW1hcnlGb250KDApCiAgICAgLCBtX2ZvbnRT
ZWxlY3Rvcihmb250U2VsZWN0b3IpCiAgICAgLCBtX2ZvbnRTZWxlY3RvclZlcnNpb24obV9mb250
U2VsZWN0b3IgPyBtX2ZvbnRTZWxlY3Rvci0+dmVyc2lvbigpIDogMCkKICAgICAsIG1fZ2VuZXJh
dGlvbihmb250Q2FjaGUoKS5nZW5lcmF0aW9uKCkpCkBAIC00NSw3ICs0NSw3IEBAIEZvbnRHbHlw
aHM6OkZvbnRHbHlwaHMoUGFzc1JlZlB0cjxGb250U2UKIH0KIAogRm9udEdseXBoczo6Rm9udEds
eXBocyhjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEpCi0gICAgOiBtX2NhY2hl
ZFByaW1hcnlTaW1wbGVGb250RGF0YSgwKQorICAgIDogbV9jYWNoZWRQcmltYXJ5Rm9udCgwKQog
ICAgICwgbV9mb250U2VsZWN0b3IoMCkKICAgICAsIG1fZm9udFNlbGVjdG9yVmVyc2lvbigwKQog
ICAgICwgbV9nZW5lcmF0aW9uKGZvbnRDYWNoZSgpLmdlbmVyYXRpb24oKSkKQEAgLTYzLDcgKzYz
LDcgQEAgdm9pZCBGb250R2x5cGhzOjpkZXRlcm1pbmVQaXRjaChjb25zdCBGbwogICAgIGF1dG8m
IHByaW1hcnlSYW5nZXMgPSByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChkZXNjcmlwdGlvbiwgMCk7
CiAgICAgdW5zaWduZWQgbnVtUmFuZ2VzID0gcHJpbWFyeVJhbmdlcy5zaXplKCk7CiAgICAgaWYg
KG51bVJhbmdlcyA9PSAxKQotICAgICAgICBtX3BpdGNoID0gcHJpbWFyeVJhbmdlcy5yYW5nZUF0
KDApLmZvbnREYXRhKCkucGl0Y2goKTsKKyAgICAgICAgbV9waXRjaCA9IHByaW1hcnlSYW5nZXMu
cmFuZ2VBdCgwKS5mb250KCkucGl0Y2goKTsKICAgICBlbHNlCiAgICAgICAgIG1fcGl0Y2ggPSBW
YXJpYWJsZVBpdGNoOwogfQpAQCAtOTYsNyArOTYsNyBAQCBzdGF0aWMgRm9udFJhbmdlcyByZWFs
aXplTmV4dEZhbGxiYWNrKGNvCiAgICAgLy8gV2UgZGlkbid0IGZpbmQgYSBmb250LiBUcnkgdG8g
ZmluZCBhIHNpbWlsYXIgZm9udCB1c2luZyBvdXIgb3duIHNwZWNpZmljIGtub3dsZWRnZSBhYm91
dCBvdXIgcGxhdGZvcm0uCiAgICAgLy8gRm9yIGV4YW1wbGUgb24gT1MgWCwgd2Uga25vdyB0byBt
YXAgYW55IGZhbWlsaWVzIGNvbnRhaW5pbmcgdGhlIHdvcmRzIEFyYWJpYywgUGFzaHRvLCBvciBV
cmR1IHRvIHRoZQogICAgIC8vIEdlZXphIFBybyBmb250LgotICAgIHJldHVybiBGb250UmFuZ2Vz
KGZvbnRDYWNoZSgpLnNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGRlc2NyaXB0aW9uKSk7CisgICAg
cmV0dXJuIEZvbnRSYW5nZXMoZm9udENhY2hlKCkuc2ltaWxhckZvbnQoZGVzY3JpcHRpb24pKTsK
IH0KIAogY29uc3QgRm9udFJhbmdlcyYgRm9udEdseXBoczo6cmVhbGl6ZUZhbGxiYWNrUmFuZ2Vz
QXQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgdW5zaWduZWQgaW5kZXgpCkBA
IC0xMjYsMTAgKzEyNiwxMCBAQCBjb25zdCBGb250UmFuZ2VzJiBGb250R2x5cGhzOjpyZWFsaXpl
RmFsCiAgICAgICAgIEFTU0VSVChtX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXggPj0gZGVzY3Jp
cHRpb24uZmFtaWx5Q291bnQoKSk7CiAKICAgICAgICAgdW5zaWduZWQgZm9udFNlbGVjdG9yRmFs
bGJhY2tJbmRleCA9IG1fbGFzdFJlYWxpemVkRmFsbGJhY2tJbmRleCAtIGRlc2NyaXB0aW9uLmZh
bWlseUNvdW50KCk7Ci0gICAgICAgIGlmIChmb250U2VsZWN0b3JGYWxsYmFja0luZGV4ID09IG1f
Zm9udFNlbGVjdG9yLT5mYWxsYmFja0ZvbnREYXRhQ291bnQoKSkKKyAgICAgICAgaWYgKGZvbnRT
ZWxlY3RvckZhbGxiYWNrSW5kZXggPT0gbV9mb250U2VsZWN0b3ItPmZhbGxiYWNrRm9udENvdW50
KCkpCiAgICAgICAgICAgICByZXR1cm4gZm9udFJhbmdlczsKICAgICAgICAgKyttX2xhc3RSZWFs
aXplZEZhbGxiYWNrSW5kZXg7Ci0gICAgICAgIGZvbnRSYW5nZXMgPSBGb250UmFuZ2VzKG1fZm9u
dFNlbGVjdG9yLT5mYWxsYmFja0ZvbnREYXRhQXQoZGVzY3JpcHRpb24sIGZvbnRTZWxlY3RvckZh
bGxiYWNrSW5kZXgpKTsKKyAgICAgICAgZm9udFJhbmdlcyA9IEZvbnRSYW5nZXMobV9mb250U2Vs
ZWN0b3ItPmZhbGxiYWNrRm9udEF0KGRlc2NyaXB0aW9uLCBmb250U2VsZWN0b3JGYWxsYmFja0lu
ZGV4KSk7CiAgICAgfQogCiAgICAgcmV0dXJuIGZvbnRSYW5nZXM7CkBAIC0yMjEsOCArMjIxLDgg
QEAgc3RhdGljIGJvb2wgc2hvdWxkSWdub3JlUm90YXRpb24oVUNoYXIzMgogI2lmIFBMQVRGT1JN
KENPQ09BKQogc3RhdGljIEdseXBoRGF0YSBnbHlwaERhdGFGb3JDSktDaGFyYWN0ZXJXaXRob3V0
U3ludGhldGljSXRhbGljKFVDaGFyMzIgY2hhcmFjdGVyLCBHbHlwaERhdGEmIGRhdGEpCiB7Ci0g
ICAgR2x5cGhEYXRhIG5vbkl0YWxpY0RhdGEgPSBkYXRhLmZvbnREYXRhLT5ub25TeW50aGV0aWNJ
dGFsaWNGb250RGF0YSgpLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyKTsKLSAgICBp
ZiAobm9uSXRhbGljRGF0YS5mb250RGF0YSkKKyAgICBHbHlwaERhdGEgbm9uSXRhbGljRGF0YSA9
IGRhdGEuZm9udC0+bm9uU3ludGhldGljSXRhbGljRm9udCgpLT5nbHlwaERhdGFGb3JDaGFyYWN0
ZXIoY2hhcmFjdGVyKTsKKyAgICBpZiAobm9uSXRhbGljRGF0YS5mb250KQogICAgICAgICByZXR1
cm4gbm9uSXRhbGljRGF0YTsKICAgICByZXR1cm4gZGF0YTsKIH0KQEAgLTIzMSw3NiArMjMxLDc2
IEBAIHN0YXRpYyBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yQ0pLQ2hhcmFjdGUKIHN0YXRpYyBHbHlw
aERhdGEgZ2x5cGhEYXRhRm9yTm9uQ0pLQ2hhcmFjdGVyV2l0aEdseXBoT3JpZW50YXRpb24oVUNo
YXIzMiBjaGFyYWN0ZXIsIE5vbkNKS0dseXBoT3JpZW50YXRpb24gb3JpZW50YXRpb24sIGNvbnN0
IEdseXBoRGF0YSYgZGF0YSkKIHsKICAgICBpZiAob3JpZW50YXRpb24gPT0gTm9uQ0pLR2x5cGhP
cmllbnRhdGlvblVwcmlnaHQgfHwgc2hvdWxkSWdub3JlUm90YXRpb24oY2hhcmFjdGVyKSkgewot
ICAgICAgICBHbHlwaERhdGEgdXByaWdodERhdGEgPSBkYXRhLmZvbnREYXRhLT51cHJpZ2h0T3Jp
ZW50YXRpb25Gb250RGF0YSgpLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyKTsKKyAg
ICAgICAgR2x5cGhEYXRhIHVwcmlnaHREYXRhID0gZGF0YS5mb250LT51cHJpZ2h0T3JpZW50YXRp
b25Gb250KCktPmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIpOwogICAgICAgICAvLyBJ
ZiB0aGUgZ2x5cGhzIGFyZSB0aGUgc2FtZSwgdGhlbiB3ZSBrbm93IHdlIGNhbiBqdXN0IHVzZSB0
aGUgaG9yaXpvbnRhbCBnbHlwaCByb3RhdGVkIHZlcnRpY2FsbHkgdG8gYmUgdXByaWdodC4KICAg
ICAgICAgaWYgKGRhdGEuZ2x5cGggPT0gdXByaWdodERhdGEuZ2x5cGgpCiAgICAgICAgICAgICBy
ZXR1cm4gZGF0YTsKICAgICAgICAgLy8gVGhlIGdseXBocyBhcmUgZGlzdGluY3QsIG1lYW5pbmcg
dGhhdCB0aGUgZm9udCBoYXMgYSB2ZXJ0aWNhbC1yaWdodCBnbHlwaCBiYWtlZCBpbnRvIGl0LiBX
ZSBjYW4ndCB1c2UgdGhhdAogICAgICAgICAvLyBnbHlwaCwgc28gd2UgZmFsbCBiYWNrIHRvIHRo
ZSB1cHJpZ2h0IGRhdGEgYW5kIHVzZSB0aGUgaG9yaXpvbnRhbCBnbHlwaC4KLSAgICAgICAgaWYg
KHVwcmlnaHREYXRhLmZvbnREYXRhKQorICAgICAgICBpZiAodXByaWdodERhdGEuZm9udCkKICAg
ICAgICAgICAgIHJldHVybiB1cHJpZ2h0RGF0YTsKICAgICB9IGVsc2UgaWYgKG9yaWVudGF0aW9u
ID09IE5vbkNKS0dseXBoT3JpZW50YXRpb25WZXJ0aWNhbFJpZ2h0KSB7Ci0gICAgICAgIEdseXBo
RGF0YSB2ZXJ0aWNhbFJpZ2h0RGF0YSA9IGRhdGEuZm9udERhdGEtPnZlcnRpY2FsUmlnaHRPcmll
bnRhdGlvbkZvbnREYXRhKCktPmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIpOworICAg
ICAgICBHbHlwaERhdGEgdmVydGljYWxSaWdodERhdGEgPSBkYXRhLmZvbnQtPnZlcnRpY2FsUmln
aHRPcmllbnRhdGlvbkZvbnQoKS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3Rlcik7CiAg
ICAgICAgIC8vIElmIHRoZSBnbHlwaHMgYXJlIGRpc3RpbmN0LCB3ZSB3aWxsIG1ha2UgdGhlIGFz
c3VtcHRpb24gdGhhdCB0aGUgZm9udCBoYXMgYSB2ZXJ0aWNhbC1yaWdodCBnbHlwaCBiYWtlZAog
ICAgICAgICAvLyBpbnRvIGl0LgogICAgICAgICBpZiAoZGF0YS5nbHlwaCAhPSB2ZXJ0aWNhbFJp
Z2h0RGF0YS5nbHlwaCkKICAgICAgICAgICAgIHJldHVybiBkYXRhOwogICAgICAgICAvLyBUaGUg
Z2x5cGhzIGFyZSBpZGVudGljYWwsIG1lYW5pbmcgdGhhdCB3ZSBzaG91bGQganVzdCB1c2UgdGhl
IGhvcml6b250YWwgZ2x5cGguCi0gICAgICAgIGlmICh2ZXJ0aWNhbFJpZ2h0RGF0YS5mb250RGF0
YSkKKyAgICAgICAgaWYgKHZlcnRpY2FsUmlnaHREYXRhLmZvbnQpCiAgICAgICAgICAgICByZXR1
cm4gdmVydGljYWxSaWdodERhdGE7CiAgICAgfQogICAgIHJldHVybiBkYXRhOwogfQogCi1HbHlw
aERhdGEgRm9udEdseXBoczo6Z2x5cGhEYXRhRm9yU3lzdGVtRmFsbGJhY2soVUNoYXIzMiBjLCBj
b25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250RGF0YVZhcmlhbnQgdmFyaWFu
dCkKK0dseXBoRGF0YSBGb250R2x5cGhzOjpnbHlwaERhdGFGb3JTeXN0ZW1GYWxsYmFjayhVQ2hh
cjMyIGMsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIEZvbnRWYXJpYW50IHZh
cmlhbnQpCiB7CiAgICAgLy8gU3lzdGVtIGZhbGxiYWNrIGlzIGNoYXJhY3Rlci1kZXBlbmRlbnQu
CiAgICAgYXV0byYgcHJpbWFyeVJhbmdlcyA9IHJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGRlc2Ny
aXB0aW9uLCAwKTsKLSAgICBhdXRvKiBvcmlnaW5hbEZvbnREYXRhID0gcHJpbWFyeVJhbmdlcy5m
b250RGF0YUZvckNoYXJhY3RlcihjKTsKLSAgICBpZiAoIW9yaWdpbmFsRm9udERhdGEpCi0gICAg
ICAgIG9yaWdpbmFsRm9udERhdGEgPSAmcHJpbWFyeVJhbmdlcy5mb250RGF0YUZvckZpcnN0UmFu
Z2UoKTsKKyAgICBhdXRvKiBvcmlnaW5hbEZvbnQgPSBwcmltYXJ5UmFuZ2VzLmZvbnRGb3JDaGFy
YWN0ZXIoYyk7CisgICAgaWYgKCFvcmlnaW5hbEZvbnQpCisgICAgICAgIG9yaWdpbmFsRm9udCA9
ICZwcmltYXJ5UmFuZ2VzLmZvbnRGb3JGaXJzdFJhbmdlKCk7CiAKLSAgICBSZWZQdHI8U2ltcGxl
Rm9udERhdGE+IHN5c3RlbUZhbGxiYWNrRm9udERhdGEgPSBvcmlnaW5hbEZvbnREYXRhLT5zeXN0
ZW1GYWxsYmFja0ZvbnREYXRhRm9yQ2hhcmFjdGVyKGMsIGRlc2NyaXB0aW9uLCBtX2lzRm9yUGxh
dGZvcm1Gb250KTsKLSAgICBpZiAoIXN5c3RlbUZhbGxiYWNrRm9udERhdGEpCisgICAgUmVmUHRy
PEZvbnQ+IHN5c3RlbUZhbGxiYWNrRm9udCA9IG9yaWdpbmFsRm9udC0+c3lzdGVtRmFsbGJhY2tG
b250Rm9yQ2hhcmFjdGVyKGMsIGRlc2NyaXB0aW9uLCBtX2lzRm9yUGxhdGZvcm1Gb250KTsKKyAg
ICBpZiAoIXN5c3RlbUZhbGxiYWNrRm9udCkKICAgICAgICAgcmV0dXJuIEdseXBoRGF0YSgpOwog
Ci0gICAgaWYgKHN5c3RlbUZhbGxiYWNrRm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0
aW9uKCkgPT0gVmVydGljYWwgJiYgIXN5c3RlbUZhbGxiYWNrRm9udERhdGEtPmhhc1ZlcnRpY2Fs
R2x5cGhzKCkgJiYgRm9udENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woYykpCisgICAg
aWYgKHN5c3RlbUZhbGxiYWNrRm9udC0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBW
ZXJ0aWNhbCAmJiAhc3lzdGVtRmFsbGJhY2tGb250LT5oYXNWZXJ0aWNhbEdseXBocygpICYmIEZv
bnRDYXNjYWRlOjppc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGMpKQogICAgICAgICB2YXJpYW50ID0g
QnJva2VuSWRlb2dyYXBoVmFyaWFudDsKIAogICAgIEdseXBoRGF0YSBmYWxsYmFja0dseXBoRGF0
YTsKICAgICBpZiAodmFyaWFudCA9PSBOb3JtYWxWYXJpYW50KQotICAgICAgICBmYWxsYmFja0ds
eXBoRGF0YSA9IHN5c3RlbUZhbGxiYWNrRm9udERhdGEtPmdseXBoRGF0YUZvckNoYXJhY3Rlcihj
KTsKKyAgICAgICAgZmFsbGJhY2tHbHlwaERhdGEgPSBzeXN0ZW1GYWxsYmFja0ZvbnQtPmdseXBo
RGF0YUZvckNoYXJhY3RlcihjKTsKICAgICBlbHNlCi0gICAgICAgIGZhbGxiYWNrR2x5cGhEYXRh
ID0gc3lzdGVtRmFsbGJhY2tGb250RGF0YS0+dmFyaWFudEZvbnREYXRhKGRlc2NyaXB0aW9uLCB2
YXJpYW50KS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMpOworICAgICAgICBmYWxsYmFja0dseXBo
RGF0YSA9IHN5c3RlbUZhbGxiYWNrRm9udC0+dmFyaWFudEZvbnQoZGVzY3JpcHRpb24sIHZhcmlh
bnQpLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYyk7CiAKLSAgICBpZiAodmFyaWFudCA9PSBOb3Jt
YWxWYXJpYW50ICYmIGZhbGxiYWNrR2x5cGhEYXRhLmZvbnREYXRhKSB7Ci0gICAgICAgIGlmICgh
Rm9udENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woYykgJiYgZmFsbGJhY2tHbHlwaERh
dGEuZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwgJiYg
IWZhbGxiYWNrR2x5cGhEYXRhLmZvbnREYXRhLT5pc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKCkp
CisgICAgaWYgKHZhcmlhbnQgPT0gTm9ybWFsVmFyaWFudCAmJiBmYWxsYmFja0dseXBoRGF0YS5m
b250KSB7CisgICAgICAgIGlmICghRm9udENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2wo
YykgJiYgZmFsbGJhY2tHbHlwaERhdGEuZm9udC0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24o
KSA9PSBWZXJ0aWNhbCAmJiAhZmFsbGJhY2tHbHlwaERhdGEuZm9udC0+aXNUZXh0T3JpZW50YXRp
b25GYWxsYmFjaygpKQogICAgICAgICAgICAgZmFsbGJhY2tHbHlwaERhdGEgPSBnbHlwaERhdGFG
b3JOb25DSktDaGFyYWN0ZXJXaXRoR2x5cGhPcmllbnRhdGlvbihjLCBkZXNjcmlwdGlvbi5ub25D
SktHbHlwaE9yaWVudGF0aW9uKCksIGZhbGxiYWNrR2x5cGhEYXRhKTsKICAgICB9CiAKICAgICAv
LyBLZWVwIHRoZSBzeXN0ZW0gZmFsbGJhY2sgZm9udHMgd2UgdXNlIGFsaXZlLgogICAgIGlmIChm
YWxsYmFja0dseXBoRGF0YS5nbHlwaCkKLSAgICAgICAgbV9zeXN0ZW1GYWxsYmFja0ZvbnREYXRh
U2V0LmFkZChzeXN0ZW1GYWxsYmFja0ZvbnREYXRhLnJlbGVhc2UoKSk7CisgICAgICAgIG1fc3lz
dGVtRmFsbGJhY2tGb250U2V0LmFkZChzeXN0ZW1GYWxsYmFja0ZvbnQucmVsZWFzZSgpKTsKIAog
ICAgIHJldHVybiBmYWxsYmFja0dseXBoRGF0YTsKIH0KIAotR2x5cGhEYXRhIEZvbnRHbHlwaHM6
OmdseXBoRGF0YUZvclZhcmlhbnQoVUNoYXIzMiBjLCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRl
c2NyaXB0aW9uLCBGb250RGF0YVZhcmlhbnQgdmFyaWFudCwgdW5zaWduZWQgZmFsbGJhY2tJbmRl
eCkKK0dseXBoRGF0YSBGb250R2x5cGhzOjpnbHlwaERhdGFGb3JWYXJpYW50KFVDaGFyMzIgYywg
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udFZhcmlhbnQgdmFyaWFudCwg
dW5zaWduZWQgZmFsbGJhY2tJbmRleCkKIHsKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICBh
dXRvJiBmb250UmFuZ2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIGZh
bGxiYWNrSW5kZXgrKyk7CiAgICAgICAgIGlmIChmb250UmFuZ2VzLmlzTnVsbCgpKQogICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGF1dG8qIGZvbnREYXRhID0gZm9udFJhbmdlcy5mb250RGF0
YUZvckNoYXJhY3RlcihjKTsKLSAgICAgICAgR2x5cGhEYXRhIGRhdGEgPSBmb250RGF0YSA/IGZv
bnREYXRhLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYykgOiBHbHlwaERhdGEoKTsKLSAgICAgICAg
aWYgKGRhdGEuZm9udERhdGEpIHsKLSAgICAgICAgICAgIC8vIFRoZSB2YXJpYW50Rm9udERhdGEg
ZnVuY3Rpb24gc2hvdWxkIG5vdCBub3JtYWxseSByZXR1cm4gMC4KKyAgICAgICAgYXV0byogZm9u
dCA9IGZvbnRSYW5nZXMuZm9udEZvckNoYXJhY3RlcihjKTsKKyAgICAgICAgR2x5cGhEYXRhIGRh
dGEgPSBmb250ID8gZm9udC0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMpIDogR2x5cGhEYXRhKCk7
CisgICAgICAgIGlmIChkYXRhLmZvbnQpIHsKKyAgICAgICAgICAgIC8vIFRoZSB2YXJpYW50Rm9u
dCBmdW5jdGlvbiBzaG91bGQgbm90IG5vcm1hbGx5IHJldHVybiAwLgogICAgICAgICAgICAgLy8g
QnV0IGlmIGl0IGRvZXMsIHdlIHdpbGwganVzdCByZW5kZXIgdGhlIGNhcGl0YWwgbGV0dGVyIGJp
Zy4KLSAgICAgICAgICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gdmFyaWFudEZvbnREYXRhID0g
ZGF0YS5mb250RGF0YS0+dmFyaWFudEZvbnREYXRhKGRlc2NyaXB0aW9uLCB2YXJpYW50KTsKLSAg
ICAgICAgICAgIGlmICghdmFyaWFudEZvbnREYXRhKQorICAgICAgICAgICAgUmVmUHRyPEZvbnQ+
IHZhcmlhbnRGb250ID0gZGF0YS5mb250LT52YXJpYW50Rm9udChkZXNjcmlwdGlvbiwgdmFyaWFu
dCk7CisgICAgICAgICAgICBpZiAoIXZhcmlhbnRGb250KQogICAgICAgICAgICAgICAgIHJldHVy
biBkYXRhOwogCi0gICAgICAgICAgICByZXR1cm4gdmFyaWFudEZvbnREYXRhLT5nbHlwaERhdGFG
b3JDaGFyYWN0ZXIoYyk7CisgICAgICAgICAgICByZXR1cm4gdmFyaWFudEZvbnQtPmdseXBoRGF0
YUZvckNoYXJhY3RlcihjKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzE1LDIzICszMTUsMjMg
QEAgR2x5cGhEYXRhIEZvbnRHbHlwaHM6OmdseXBoRGF0YUZvck5vcm1hbAogICAgICAgICBhdXRv
JiBmb250UmFuZ2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIGZhbGxi
YWNrSW5kZXgpOwogICAgICAgICBpZiAoZm9udFJhbmdlcy5pc051bGwoKSkKICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBhdXRvKiBzaW1wbGVGb250RGF0YSA9IGZvbnRSYW5nZXMuZm9udERh
dGFGb3JDaGFyYWN0ZXIoYyk7Ci0gICAgICAgIGF1dG8qIHBhZ2UgPSBzaW1wbGVGb250RGF0YSA/
IHNpbXBsZUZvbnREYXRhLT5nbHlwaFBhZ2UocGFnZU51bWJlcikgOiBudWxscHRyOworICAgICAg
ICBhdXRvKiBmb250ID0gZm9udFJhbmdlcy5mb250Rm9yQ2hhcmFjdGVyKGMpOworICAgICAgICBh
dXRvKiBwYWdlID0gZm9udCA/IGZvbnQtPmdseXBoUGFnZShwYWdlTnVtYmVyKSA6IG51bGxwdHI7
CiAgICAgICAgIGlmICghcGFnZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBHbHlw
aERhdGEgZGF0YSA9IHBhZ2UtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjKTsKLSAgICAgICAgaWYg
KGRhdGEuZm9udERhdGEpIHsKLSAgICAgICAgICAgIGlmIChkYXRhLmZvbnREYXRhLT5wbGF0Zm9y
bURhdGEoKS5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsICYmICFkYXRhLmZvbnREYXRhLT5pc1Rl
eHRPcmllbnRhdGlvbkZhbGxiYWNrKCkpIHsKKyAgICAgICAgaWYgKGRhdGEuZm9udCkgeworICAg
ICAgICAgICAgaWYgKGRhdGEuZm9udC0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBW
ZXJ0aWNhbCAmJiAhZGF0YS5mb250LT5pc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKCkpIHsKICAg
ICAgICAgICAgICAgICBpZiAoIUZvbnRDYXNjYWRlOjppc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGMp
KQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2x5cGhEYXRhRm9yTm9uQ0pLQ2hhcmFjdGVy
V2l0aEdseXBoT3JpZW50YXRpb24oYywgZGVzY3JpcHRpb24ubm9uQ0pLR2x5cGhPcmllbnRhdGlv
bigpLCBkYXRhKTsKIAotICAgICAgICAgICAgICAgIGlmICghZGF0YS5mb250RGF0YS0+aGFzVmVy
dGljYWxHbHlwaHMoKSkgeworICAgICAgICAgICAgICAgIGlmICghZGF0YS5mb250LT5oYXNWZXJ0
aWNhbEdseXBocygpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFVzZSB0aGUgYnJva2VuIGlk
ZW9ncmFwaCBmb250IGRhdGEuIFRoZSBicm9rZW4gaWRlb2dyYXBoIGZvbnQgd2lsbCB1c2UgdGhl
IGhvcml6b250YWwgd2lkdGggb2YgZ2x5cGhzCiAgICAgICAgICAgICAgICAgICAgIC8vIHRvIG1h
a2Ugc3VyZSB5b3UgZ2V0IGEgc3F1YXJlIChldmVuIGZvciBicm9rZW4gZ2x5cGhzIGxpa2Ugc3lt
Ym9scyB1c2VkIGZvciBwdW5jdHVhdGlvbikuCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBn
bHlwaERhdGFGb3JWYXJpYW50KGMsIGRlc2NyaXB0aW9uLCBCcm9rZW5JZGVvZ3JhcGhWYXJpYW50
LCBmYWxsYmFja0luZGV4KTsKICAgICAgICAgICAgICAgICB9CiAjaWYgUExBVEZPUk0oQ09DT0Ep
Ci0gICAgICAgICAgICAgICAgaWYgKGRhdGEuZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLnN5bnRo
ZXRpY09ibGlxdWUoKSkKKyAgICAgICAgICAgICAgICBpZiAoZGF0YS5mb250LT5wbGF0Zm9ybURh
dGEoKS5zeW50aGV0aWNPYmxpcXVlKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbHlw
aERhdGFGb3JDSktDaGFyYWN0ZXJXaXRob3V0U3ludGhldGljSXRhbGljKGMsIGRhdGEpOwogI2Vu
ZGlmCiAgICAgICAgICAgICB9CkBAIC0zNDUsMjcgKzM0NSwyNyBAQCBHbHlwaERhdGEgRm9udEds
eXBoczo6Z2x5cGhEYXRhRm9yTm9ybWFsCiAKIHN0YXRpYyBSZWZQdHI8R2x5cGhQYWdlPiBnbHlw
aFBhZ2VGcm9tRm9udFJhbmdlcyh1bnNpZ25lZCBwYWdlTnVtYmVyLCBjb25zdCBGb250UmFuZ2Vz
JiBmb250UmFuZ2VzKQogewotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBzaW1wbGVGb250RGF0
YSA9IG51bGxwdHI7CisgICAgY29uc3QgRm9udCogZm9udCA9IG51bGxwdHI7CiAgICAgVUNoYXIz
MiBwYWdlUmFuZ2VGcm9tID0gcGFnZU51bWJlciAqIEdseXBoUGFnZTo6c2l6ZTsKICAgICBVQ2hh
cjMyIHBhZ2VSYW5nZVRvID0gcGFnZVJhbmdlRnJvbSArIEdseXBoUGFnZTo6c2l6ZSAtIDE7CiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZvbnRSYW5nZXMuc2l6ZSgpOyArK2kpIHsKICAg
ICAgICAgYXV0byYgcmFuZ2UgPSBmb250UmFuZ2VzLnJhbmdlQXQoaSk7CiAgICAgICAgIGlmIChy
YW5nZS50bygpKSB7CiAgICAgICAgICAgICBpZiAocmFuZ2UuZnJvbSgpIDw9IHBhZ2VSYW5nZUZy
b20gJiYgcGFnZVJhbmdlVG8gPD0gcmFuZ2UudG8oKSkKLSAgICAgICAgICAgICAgICBzaW1wbGVG
b250RGF0YSA9ICZyYW5nZS5mb250RGF0YSgpOworICAgICAgICAgICAgICAgIGZvbnQgPSAmcmFu
Z2UuZm9udCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYg
KCFzaW1wbGVGb250RGF0YSkKKyAgICBpZiAoIWZvbnQpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogCi0gICAgaWYgKHNpbXBsZUZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigp
ID09IFZlcnRpY2FsKQorICAgIGlmIChmb250LT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigp
ID09IFZlcnRpY2FsKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBjb25z
dF9jYXN0PEdseXBoUGFnZSo+KHNpbXBsZUZvbnREYXRhLT5nbHlwaFBhZ2UocGFnZU51bWJlcikp
OworICAgIHJldHVybiBjb25zdF9jYXN0PEdseXBoUGFnZSo+KGZvbnQtPmdseXBoUGFnZShwYWdl
TnVtYmVyKSk7CiB9CiAKLUdseXBoRGF0YSBGb250R2x5cGhzOjpnbHlwaERhdGFGb3JDaGFyYWN0
ZXIoVUNoYXIzMiBjLCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250RGF0
YVZhcmlhbnQgdmFyaWFudCkKK0dseXBoRGF0YSBGb250R2x5cGhzOjpnbHlwaERhdGFGb3JDaGFy
YWN0ZXIoVUNoYXIzMiBjLCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250
VmFyaWFudCB2YXJpYW50KQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgQVNT
RVJUKHZhcmlhbnQgIT0gQXV0b1ZhcmlhbnQpOwpAQCAtMzgyLDE5ICszODIsMTkgQEAgR2x5cGhE
YXRhIEZvbnRHbHlwaHM6OmdseXBoRGF0YUZvckNoYXJhYwogICAgIEdseXBoRGF0YSBnbHlwaERh
dGEgPSBjYWNoZWRQYWdlID8gY2FjaGVkUGFnZS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMpIDog
R2x5cGhEYXRhKCk7CiAgICAgaWYgKCFnbHlwaERhdGEuZ2x5cGgpIHsKICAgICAgICAgaWYgKCFj
YWNoZWRQYWdlKQotICAgICAgICAgICAgY2FjaGVkUGFnZSA9IEdseXBoUGFnZTo6Y3JlYXRlRm9y
TWl4ZWRGb250RGF0YSgpOworICAgICAgICAgICAgY2FjaGVkUGFnZSA9IEdseXBoUGFnZTo6Y3Jl
YXRlRm9yTWl4ZWRGb250cygpOwogICAgICAgICBlbHNlIGlmIChjYWNoZWRQYWdlLT5pc0ltbXV0
YWJsZSgpKQotICAgICAgICAgICAgY2FjaGVkUGFnZSA9IEdseXBoUGFnZTo6Y3JlYXRlQ29weUZv
ck1peGVkRm9udERhdGEoKmNhY2hlZFBhZ2UpOworICAgICAgICAgICAgY2FjaGVkUGFnZSA9IEds
eXBoUGFnZTo6Y3JlYXRlQ29weUZvck1peGVkRm9udHMoKmNhY2hlZFBhZ2UpOwogCiAgICAgICAg
IGdseXBoRGF0YSA9IGdseXBoRGF0YUZvck5vcm1hbFZhcmlhbnQoYywgZGVzY3JpcHRpb24pOwot
ICAgICAgICBjYWNoZWRQYWdlLT5zZXRHbHlwaERhdGFGb3JDaGFyYWN0ZXIoYywgZ2x5cGhEYXRh
LmdseXBoLCBnbHlwaERhdGEuZm9udERhdGEpOworICAgICAgICBjYWNoZWRQYWdlLT5zZXRHbHlw
aERhdGFGb3JDaGFyYWN0ZXIoYywgZ2x5cGhEYXRhLmdseXBoLCBnbHlwaERhdGEuZm9udCk7CiAg
ICAgfQogICAgIHJldHVybiBnbHlwaERhdGE7CiB9CiAKIHZvaWQgRm9udEdseXBoczo6cHJ1bmVT
eXN0ZW1GYWxsYmFja3MoKQogewotICAgIGlmIChtX3N5c3RlbUZhbGxiYWNrRm9udERhdGFTZXQu
aXNFbXB0eSgpKQorICAgIGlmIChtX3N5c3RlbUZhbGxiYWNrRm9udFNldC5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybjsKICAgICAvLyBNdXRhYmxlIGdseXBoIHBhZ2VzIG1heSByZWZlcmVuY2Ug
ZmFsbGJhY2sgZm9udHMuCiAgICAgaWYgKG1fY2FjaGVkUGFnZVplcm8gJiYgIW1fY2FjaGVkUGFn
ZVplcm8tPmlzSW1tdXRhYmxlKCkpCkBAIC00MDIsNyArNDAyLDcgQEAgdm9pZCBGb250R2x5cGhz
OjpwcnVuZVN5c3RlbUZhbGxiYWNrcygpCiAgICAgbV9jYWNoZWRQYWdlcy5yZW1vdmVJZihbXShk
ZWNsdHlwZShtX2NhY2hlZFBhZ2VzKTo6S2V5VmFsdWVQYWlyVHlwZSYga2V5QW5kVmFsdWUpIHsK
ICAgICAgICAgcmV0dXJuICFrZXlBbmRWYWx1ZS52YWx1ZS0+aXNJbW11dGFibGUoKTsKICAgICB9
KTsKLSAgICBtX3N5c3RlbUZhbGxiYWNrRm9udERhdGFTZXQuY2xlYXIoKTsKKyAgICBtX3N5c3Rl
bUZhbGxiYWNrRm9udFNldC5jbGVhcigpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250R2x5cGhzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEdseXBocy5oCShyZXZpc2lvbiAxNzg4NTcpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250R2x5cGhzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIxLDEwICsyMSwxMCBAQAogI2lmbmRlZiBGb250R2x5cGhzX2gKICNkZWZpbmUgRm9u
dEdseXBoc19oCiAKKyNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9udFJhbmdlcy5oIgog
I2luY2x1ZGUgIkZvbnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkdseXBoUGFnZS5oIgotI2luY2x1
ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5jbHVkZSAiV2lkdGhDYWNoZS5oIgogI2luY2x1ZGUg
PHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KQEAgLTUxLDcgKzUx
LDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc0ZvclBsYXRmb3JtRm9udCgpIGNvbnN0IHsgcmV0
dXJuIG1faXNGb3JQbGF0Zm9ybUZvbnQ7IH0KIAotICAgIEdseXBoRGF0YSBnbHlwaERhdGFGb3JD
aGFyYWN0ZXIoVUNoYXIzMiwgY29uc3QgRm9udERlc2NyaXB0aW9uJiwgRm9udERhdGFWYXJpYW50
KTsKKyAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIsIGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYsIEZvbnRWYXJpYW50KTsKIAogICAgIGJvb2wgaXNGaXhlZFBpdGNoKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYpOwogICAgIHZvaWQgZGV0ZXJtaW5lUGl0Y2goY29uc3QgRm9u
dERlc2NyaXB0aW9uJik7CkBAIC02Niw3ICs2Niw3IEBAIHB1YmxpYzoKICAgICBXaWR0aENhY2hl
JiB3aWR0aENhY2hlKCkgeyByZXR1cm4gbV93aWR0aENhY2hlOyB9CiAgICAgY29uc3QgV2lkdGhD
YWNoZSYgd2lkdGhDYWNoZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGhDYWNoZTsgfQogCi0gICAg
Y29uc3QgU2ltcGxlRm9udERhdGEmIHByaW1hcnlTaW1wbGVGb250RGF0YShjb25zdCBGb250RGVz
Y3JpcHRpb24mKTsKKyAgICBjb25zdCBGb250JiBwcmltYXJ5Rm9udChjb25zdCBGb250RGVzY3Jp
cHRpb24mKTsKICAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBGb250UmFuZ2VzJiByZWFsaXplRmFs
bGJhY2tSYW5nZXNBdChjb25zdCBGb250RGVzY3JpcHRpb24mLCB1bnNpZ25lZCBmYWxsYmFja0lu
ZGV4KTsKIAogICAgIHZvaWQgcHJ1bmVTeXN0ZW1GYWxsYmFja3MoKTsKQEAgLTc1LDkgKzc1LDkg
QEAgcHJpdmF0ZToKICAgICBGb250R2x5cGhzKFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPik7CiAg
ICAgRm9udEdseXBocyhjb25zdCBGb250UGxhdGZvcm1EYXRhJik7CiAKLSAgICBHbHlwaERhdGEg
Z2x5cGhEYXRhRm9yU3lzdGVtRmFsbGJhY2soVUNoYXIzMiwgY29uc3QgRm9udERlc2NyaXB0aW9u
JiwgRm9udERhdGFWYXJpYW50KTsKKyAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yU3lzdGVtRmFs
bGJhY2soVUNoYXIzMiwgY29uc3QgRm9udERlc2NyaXB0aW9uJiwgRm9udFZhcmlhbnQpOwogICAg
IEdseXBoRGF0YSBnbHlwaERhdGFGb3JOb3JtYWxWYXJpYW50KFVDaGFyMzIsIGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYpOwotICAgIEdseXBoRGF0YSBnbHlwaERhdGFGb3JWYXJpYW50KFVDaGFyMzIs
IGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIEZvbnREYXRhVmFyaWFudCwgdW5zaWduZWQgZmFsbGJh
Y2tJbmRleCk7CisgICAgR2x5cGhEYXRhIGdseXBoRGF0YUZvclZhcmlhbnQoVUNoYXIzMiwgY29u
c3QgRm9udERlc2NyaXB0aW9uJiwgRm9udFZhcmlhbnQsIHVuc2lnbmVkIGZhbGxiYWNrSW5kZXgp
OwogCiAgICAgVmVjdG9yPEZvbnRSYW5nZXMsIDE+IG1fcmVhbGl6ZWRGYWxsYmFja1JhbmdlczsK
ICAgICB1bnNpZ25lZCBtX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXggeyAwIH07CkBAIC04NSw5
ICs4NSw5IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPEdseXBoUGFnZT4gbV9jYWNoZWRQYWdlWmVy
bzsKICAgICBIYXNoTWFwPGludCwgUmVmUHRyPEdseXBoUGFnZT4+IG1fY2FjaGVkUGFnZXM7CiAK
LSAgICBIYXNoU2V0PFJlZlB0cjxTaW1wbGVGb250RGF0YT4+IG1fc3lzdGVtRmFsbGJhY2tGb250
RGF0YVNldDsKKyAgICBIYXNoU2V0PFJlZlB0cjxGb250Pj4gbV9zeXN0ZW1GYWxsYmFja0ZvbnRT
ZXQ7CiAKLSAgICBjb25zdCBTaW1wbGVGb250RGF0YSogbV9jYWNoZWRQcmltYXJ5U2ltcGxlRm9u
dERhdGE7CisgICAgY29uc3QgRm9udCogbV9jYWNoZWRQcmltYXJ5Rm9udDsKICAgICBSZWZQdHI8
Rm9udFNlbGVjdG9yPiBtX2ZvbnRTZWxlY3RvcjsKIAogICAgIFdpZHRoQ2FjaGUgbV93aWR0aENh
Y2hlOwpAQCAtMTA1LDE2ICsxMDUsMTYgQEAgaW5saW5lIGJvb2wgRm9udEdseXBoczo6aXNGaXhl
ZFBpdGNoKGNvbgogICAgIHJldHVybiBtX3BpdGNoID09IEZpeGVkUGl0Y2g7CiB9OwogCi1pbmxp
bmUgY29uc3QgU2ltcGxlRm9udERhdGEmIEZvbnRHbHlwaHM6OnByaW1hcnlTaW1wbGVGb250RGF0
YShjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQoraW5saW5lIGNvbnN0IEZvbnQm
IEZvbnRHbHlwaHM6OnByaW1hcnlGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRp
b24pCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBpZiAoIW1fY2FjaGVkUHJp
bWFyeVNpbXBsZUZvbnREYXRhKSB7CisgICAgaWYgKCFtX2NhY2hlZFByaW1hcnlGb250KSB7CiAg
ICAgICAgIGF1dG8mIHByaW1hcnlSYW5nZXMgPSByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChkZXNj
cmlwdGlvbiwgMCk7Ci0gICAgICAgIG1fY2FjaGVkUHJpbWFyeVNpbXBsZUZvbnREYXRhID0gcHJp
bWFyeVJhbmdlcy5mb250RGF0YUZvckNoYXJhY3RlcignICcpOwotICAgICAgICBpZiAoIW1fY2Fj
aGVkUHJpbWFyeVNpbXBsZUZvbnREYXRhKQotICAgICAgICAgICAgbV9jYWNoZWRQcmltYXJ5U2lt
cGxlRm9udERhdGEgPSAmcHJpbWFyeVJhbmdlcy5mb250RGF0YUZvckZpcnN0UmFuZ2UoKTsKKyAg
ICAgICAgbV9jYWNoZWRQcmltYXJ5Rm9udCA9IHByaW1hcnlSYW5nZXMuZm9udEZvckNoYXJhY3Rl
cignICcpOworICAgICAgICBpZiAoIW1fY2FjaGVkUHJpbWFyeUZvbnQpCisgICAgICAgICAgICBt
X2NhY2hlZFByaW1hcnlGb250ID0gJnByaW1hcnlSYW5nZXMuZm9udEZvckZpcnN0UmFuZ2UoKTsK
ICAgICB9Ci0gICAgcmV0dXJuICptX2NhY2hlZFByaW1hcnlTaW1wbGVGb250RGF0YTsKKyAgICBy
ZXR1cm4gKm1fY2FjaGVkUHJpbWFyeUZvbnQ7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRNZXRyaWNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udE1ldHJpY3MuaAkocmV2aXNpb24gMTc4ODU3KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udE1ldHJpY3MuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTMzLDcgKzEzMyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEhhc1plcm9X
aWR0aChib29sIGhhc1plcm9XaWR0aCkgeyBtX2hhc1plcm9XaWR0aCA9IGhhc1plcm9XaWR0aDsg
fQogCiBwcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBTaW1wbGVGb250RGF0YTsKKyAgICBmcmll
bmQgY2xhc3MgRm9udDsKIAogICAgIHZvaWQgcmVzZXQoKQogICAgIHsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRSYW5nZXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRSYW5nZXMuY3BwCShyZXZpc2lvbiAx
Nzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UmFuZ2VzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkZvbnRSYW5nZXMuaCIKIAotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisj
aW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTM2LDM0ICszNiwzNCBAQCBGb250UmFuZ2VzOjpG
b250UmFuZ2VzKCkKIHsKIH0KIAotRm9udFJhbmdlczo6Rm9udFJhbmdlcyhSZWZQdHI8U2ltcGxl
Rm9udERhdGE+JiYgZm9udERhdGEpCitGb250UmFuZ2VzOjpGb250UmFuZ2VzKFJlZlB0cjxGb250
PiYmIGZvbnQpCiB7Ci0gICAgaWYgKGZvbnREYXRhKQotICAgICAgICBtX3Jhbmdlcy5hcHBlbmQo
UmFuZ2UgeyAwLCAweDdGRkZGRkZGLCBmb250RGF0YS5yZWxlYXNlTm9uTnVsbCgpIH0pOworICAg
IGlmIChmb250KQorICAgICAgICBtX3Jhbmdlcy5hcHBlbmQoUmFuZ2UgeyAwLCAweDdGRkZGRkZG
LCBmb250LnJlbGVhc2VOb25OdWxsKCkgfSk7CiB9CiAKIEZvbnRSYW5nZXM6On5Gb250UmFuZ2Vz
KCkKIHsKIH0KIAotY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRSYW5nZXM6OmZvbnREYXRhRm9y
Q2hhcmFjdGVyKFVDaGFyMzIgYykgY29uc3QKK2NvbnN0IEZvbnQqIEZvbnRSYW5nZXM6OmZvbnRG
b3JDaGFyYWN0ZXIoVUNoYXIzMiBjKSBjb25zdAogewogICAgIGZvciAoYXV0byYgcmFuZ2UgOiBt
X3JhbmdlcykgewogICAgICAgICBpZiAocmFuZ2UuZnJvbSgpIDw9IGMgJiYgYyA8PSByYW5nZS50
bygpKQotICAgICAgICAgICAgcmV0dXJuICZyYW5nZS5mb250RGF0YSgpOworICAgICAgICAgICAg
cmV0dXJuICZyYW5nZS5mb250KCk7CiAgICAgfQogICAgIHJldHVybiBudWxscHRyOwogfQogCi1j
b25zdCBTaW1wbGVGb250RGF0YSYgRm9udFJhbmdlczo6Zm9udERhdGFGb3JGaXJzdFJhbmdlKCkg
Y29uc3QKK2NvbnN0IEZvbnQmIEZvbnRSYW5nZXM6OmZvbnRGb3JGaXJzdFJhbmdlKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gbV9yYW5nZXNbMF0uZm9udERhdGEoKTsKKyAgICByZXR1cm4gbV9yYW5n
ZXNbMF0uZm9udCgpOwogfQogCiBib29sIEZvbnRSYW5nZXM6OmlzTG9hZGluZygpIGNvbnN0CiB7
CiAgICAgZm9yIChhdXRvJiByYW5nZSA6IG1fcmFuZ2VzKSB7Ci0gICAgICAgIGlmIChyYW5nZS5m
b250RGF0YSgpLmlzTG9hZGluZygpKQorICAgICAgICBpZiAocmFuZ2UuZm9udCgpLmlzTG9hZGlu
ZygpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRSYW5nZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UmFuZ2VzLmgJ
KHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRSYW5nZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBGb250
UmFuZ2VzX2gKICNkZWZpbmUgRm9udFJhbmdlc19oCiAKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0
YS5oIgorI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC0zNSwyNSArMzUsMjUgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogY2xhc3MgRm9udFJhbmdlcyB7CiBwdWJsaWM6CiAgICAgc3RydWN0IFJhbmdlIHsKLSAg
ICAgICAgUmFuZ2UoVUNoYXIzMiBmcm9tLCBVQ2hhcjMyIHRvLCBSZWY8U2ltcGxlRm9udERhdGE+
JiYgZm9udERhdGEpCisgICAgICAgIFJhbmdlKFVDaGFyMzIgZnJvbSwgVUNoYXIzMiB0bywgUmVm
PEZvbnQ+JiYgZm9udCkKICAgICAgICAgICAgIDogbV9mcm9tKGZyb20pCiAgICAgICAgICAgICAs
IG1fdG8odG8pCi0gICAgICAgICAgICAsIG1fZm9udERhdGEoV1RGOjptb3ZlKGZvbnREYXRhKSkK
KyAgICAgICAgICAgICwgbV9mb250KFdURjo6bW92ZShmb250KSkKICAgICAgICAgewogICAgICAg
ICB9CiAKICAgICAgICAgVUNoYXIzMiBmcm9tKCkgY29uc3QgeyByZXR1cm4gbV9mcm9tOyB9CiAg
ICAgICAgIFVDaGFyMzIgdG8oKSBjb25zdCB7IHJldHVybiBtX3RvOyB9Ci0gICAgICAgIGNvbnN0
IFNpbXBsZUZvbnREYXRhJiBmb250RGF0YSgpIGNvbnN0IHsgcmV0dXJuICptX2ZvbnREYXRhOyB9
CisgICAgICAgIGNvbnN0IEZvbnQmIGZvbnQoKSBjb25zdCB7IHJldHVybiAqbV9mb250OyB9CiAK
ICAgICBwcml2YXRlOgogICAgICAgICBVQ2hhcjMyIG1fZnJvbTsKICAgICAgICAgVUNoYXIzMiBt
X3RvOwotICAgICAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IG1fZm9udERhdGE7CisgICAgICAg
IFJlZlB0cjxGb250PiBtX2ZvbnQ7CiAgICAgfTsKIAogICAgIEZvbnRSYW5nZXMoKTsKLSAgICBl
eHBsaWNpdCBGb250UmFuZ2VzKFJlZlB0cjxTaW1wbGVGb250RGF0YT4mJik7CisgICAgZXhwbGlj
aXQgRm9udFJhbmdlcyhSZWZQdHI8Rm9udD4mJik7CiAgICAgfkZvbnRSYW5nZXMoKTsKIAogICAg
IGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gbV9yYW5nZXMuaXNFbXB0eSgpOyB9CkBAIC02
Miw4ICs2Miw4IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4g
bV9yYW5nZXMuc2l6ZSgpOyB9CiAgICAgY29uc3QgUmFuZ2UmIHJhbmdlQXQodW5zaWduZWQgaSkg
Y29uc3QgeyByZXR1cm4gbV9yYW5nZXNbaV07IH0KIAotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRh
KiBmb250RGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyKSBjb25zdDsKLSAgICBjb25zdCBTaW1wbGVG
b250RGF0YSYgZm9udERhdGFGb3JGaXJzdFJhbmdlKCkgY29uc3Q7CisgICAgY29uc3QgRm9udCog
Zm9udEZvckNoYXJhY3RlcihVQ2hhcjMyKSBjb25zdDsKKyAgICBjb25zdCBGb250JiBmb250Rm9y
Rmlyc3RSYW5nZSgpIGNvbnN0OwogICAgIGJvb2wgaXNMb2FkaW5nKCkgY29uc3Q7CiAKIHByaXZh
dGU6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250U2Vs
ZWN0b3IuaAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udFNlbGVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDkgKzQxLDkgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgfkZvbnRTZWxlY3RvcigpIHsgfQogCiAgICAgdmlydHVhbCBGb250
UmFuZ2VzIGZvbnRSYW5nZXNGb3JGYW1pbHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3Qg
QXRvbWljU3RyaW5nJikgPSAwOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0
YT4gZmFsbGJhY2tGb250RGF0YUF0KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIHNpemVfdCkgPSAw
OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGb250PiBmYWxsYmFja0ZvbnRBdChjb25zdCBGb250
RGVzY3JpcHRpb24mLCBzaXplX3QpID0gMDsKIAotICAgIHZpcnR1YWwgc2l6ZV90IGZhbGxiYWNr
Rm9udERhdGFDb3VudCgpID0gMDsKKyAgICB2aXJ0dWFsIHNpemVfdCBmYWxsYmFja0ZvbnRDb3Vu
dCgpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgcmVzb2x2ZXNGYW1pbHlGb3IoY29uc3QgRm9udERl
c2NyaXB0aW9uJikgY29uc3QgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkIGZvbnRDYWNoZUludmFs
aWRhdGVkKCkgeyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlw
aEJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dseXBoQnVmZmVyLmgJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dseXBoQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBTaW1wbGVGb250RGF0YTsKK2NsYXNz
IEZvbnQ7CiAKICNpZiBVU0UoQ0FJUk8pCiAvLyBGSVhNRTogV2h5IGRvZXMgQ2Fpcm8gdXNlIHN1
Y2ggYSBodWdlIHN0cnVjdCBpbnN0ZWFkIG9mIGp1c3QgYW4gb2Zmc2V0IGludG8gYW4gYXJyYXk/
CkBAIC03NiwxMiArNzYsMTIgQEAgdHlwZWRlZiBGbG9hdFNpemUgR2x5cGhCdWZmZXJBZHZhbmNl
OwogCiBjbGFzcyBHbHlwaEJ1ZmZlciB7CiBwdWJsaWM6Ci0gICAgYm9vbCBpc0VtcHR5KCkgY29u
c3QgeyByZXR1cm4gbV9mb250RGF0YS5pc0VtcHR5KCk7IH0KLSAgICBpbnQgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fZm9udERhdGEuc2l6ZSgpOyB9CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Qg
eyByZXR1cm4gbV9mb250LmlzRW1wdHkoKTsgfQorICAgIGludCBzaXplKCkgY29uc3QgeyByZXR1
cm4gbV9mb250LnNpemUoKTsgfQogICAgIAogICAgIHZvaWQgY2xlYXIoKQogICAgIHsKLSAgICAg
ICAgbV9mb250RGF0YS5jbGVhcigpOworICAgICAgICBtX2ZvbnQuY2xlYXIoKTsKICAgICAgICAg
bV9nbHlwaHMuY2xlYXIoKTsKICAgICAgICAgbV9hZHZhbmNlcy5jbGVhcigpOwogICAgICAgICBp
ZiAobV9vZmZzZXRzSW5TdHJpbmcpCkBAIC05Niw3ICs5Niw3IEBAIHB1YmxpYzoKICAgICBjb25z
dCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMoaW50IGZyb20pIGNvbnN0IHsgcmV0dXJuIG1fZ2x5
cGhzLmRhdGEoKSArIGZyb207IH0KICAgICBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFu
Y2VzKGludCBmcm9tKSBjb25zdCB7IHJldHVybiBtX2FkdmFuY2VzLmRhdGEoKSArIGZyb207IH0K
IAotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YUF0KGludCBpbmRleCkgY29uc3Qg
eyByZXR1cm4gbV9mb250RGF0YVtpbmRleF07IH0KKyAgICBjb25zdCBGb250KiBmb250QXQoaW50
IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2ZvbnRbaW5kZXhdOyB9CiAKICAgICB2b2lkIHNldElu
aXRpYWxBZHZhbmNlKEdseXBoQnVmZmVyQWR2YW5jZSBpbml0aWFsQWR2YW5jZSkgeyBtX2luaXRp
YWxBZHZhbmNlID0gaW5pdGlhbEFkdmFuY2U7IH0KICAgICBjb25zdCBHbHlwaEJ1ZmZlckFkdmFu
Y2UmIGluaXRpYWxBZHZhbmNlKCkgY29uc3QgeyByZXR1cm4gbV9pbml0aWFsQWR2YW5jZTsgfQpA
QCAtMTI2LDkgKzEyNiw5IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIG5vT2Zmc2V0ID0gVUlOVF9NQVg7Ci0gICAgdm9pZCBhZGQoR2x5cGggZ2x5cGgs
IGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LCBmbG9hdCB3aWR0aCwgdW5zaWduZWQgb2Zmc2V0
SW5TdHJpbmcgPSBub09mZnNldCwgY29uc3QgRmxvYXRTaXplKiBvZmZzZXQgPSAwKQorICAgIHZv
aWQgYWRkKEdseXBoIGdseXBoLCBjb25zdCBGb250KiBmb250LCBmbG9hdCB3aWR0aCwgdW5zaWdu
ZWQgb2Zmc2V0SW5TdHJpbmcgPSBub09mZnNldCwgY29uc3QgRmxvYXRTaXplKiBvZmZzZXQgPSAw
KQogICAgIHsKLSAgICAgICAgbV9mb250RGF0YS5hcHBlbmQoZm9udCk7CisgICAgICAgIG1fZm9u
dC5hcHBlbmQoZm9udCk7CiAKICNpZiBVU0UoQ0FJUk8pCiAgICAgICAgIGNhaXJvX2dseXBoX3Qg
Y2Fpcm9HbHlwaDsKQEAgLTE1OSw5ICsxNTksOSBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogI2lm
ICFVU0UoV0lOR0RJKQotICAgIHZvaWQgYWRkKEdseXBoIGdseXBoLCBjb25zdCBTaW1wbGVGb250
RGF0YSogZm9udCwgR2x5cGhCdWZmZXJBZHZhbmNlIGFkdmFuY2UsIHVuc2lnbmVkIG9mZnNldElu
U3RyaW5nID0gbm9PZmZzZXQpCisgICAgdm9pZCBhZGQoR2x5cGggZ2x5cGgsIGNvbnN0IEZvbnQq
IGZvbnQsIEdseXBoQnVmZmVyQWR2YW5jZSBhZHZhbmNlLCB1bnNpZ25lZCBvZmZzZXRJblN0cmlu
ZyA9IG5vT2Zmc2V0KQogICAgIHsKLSAgICAgICAgbV9mb250RGF0YS5hcHBlbmQoZm9udCk7Cisg
ICAgICAgIG1fZm9udC5hcHBlbmQoZm9udCk7CiAjaWYgVVNFKENBSVJPKQogICAgICAgICBjYWly
b19nbHlwaF90IGNhaXJvR2x5cGg7CiAgICAgICAgIGNhaXJvR2x5cGguaW5kZXggPSBnbHlwaDsK
QEAgLTIwNSw5ICsyMDUsOSBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHZvaWQgc3dhcChpbnQg
aW5kZXgxLCBpbnQgaW5kZXgyKQogICAgIHsKLSAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEq
IGYgPSBtX2ZvbnREYXRhW2luZGV4MV07Ci0gICAgICAgIG1fZm9udERhdGFbaW5kZXgxXSA9IG1f
Zm9udERhdGFbaW5kZXgyXTsKLSAgICAgICAgbV9mb250RGF0YVtpbmRleDJdID0gZjsKKyAgICAg
ICAgY29uc3QgRm9udCogZiA9IG1fZm9udFtpbmRleDFdOworICAgICAgICBtX2ZvbnRbaW5kZXgx
XSA9IG1fZm9udFtpbmRleDJdOworICAgICAgICBtX2ZvbnRbaW5kZXgyXSA9IGY7CiAKICAgICAg
ICAgR2x5cGhCdWZmZXJHbHlwaCBnID0gbV9nbHlwaHNbaW5kZXgxXTsKICAgICAgICAgbV9nbHlw
aHNbaW5kZXgxXSA9IG1fZ2x5cGhzW2luZGV4Ml07CkBAIC0yMjQsNyArMjI0LDcgQEAgcHJpdmF0
ZToKICNlbmRpZgogICAgIH0KIAotICAgIFZlY3Rvcjxjb25zdCBTaW1wbGVGb250RGF0YSosIDIw
NDg+IG1fZm9udERhdGE7CisgICAgVmVjdG9yPGNvbnN0IEZvbnQqLCAyMDQ4PiBtX2ZvbnQ7CiAg
ICAgVmVjdG9yPEdseXBoQnVmZmVyR2x5cGgsIDIwNDg+IG1fZ2x5cGhzOwogICAgIFZlY3RvcjxH
bHlwaEJ1ZmZlckFkdmFuY2UsIDIwNDg+IG1fYWR2YW5jZXM7CiAgICAgR2x5cGhCdWZmZXJBZHZh
bmNlIG1faW5pdGlhbEFkdmFuY2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HbHlwaFBhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HbHlwaFBhZ2UuaAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDE4ICsz
OSwxOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFNpbXBsZUZvbnREYXRhOwor
Y2xhc3MgRm9udDsKIAotLy8gSG9sZHMgdGhlIGdseXBoIGluZGV4IGFuZCB0aGUgY29ycmVzcG9u
ZGluZyBTaW1wbGVGb250RGF0YSBpbmZvcm1hdGlvbiBmb3IgYSBnaXZlbgorLy8gSG9sZHMgdGhl
IGdseXBoIGluZGV4IGFuZCB0aGUgY29ycmVzcG9uZGluZyBGb250IGluZm9ybWF0aW9uIGZvciBh
IGdpdmVuCiAvLyBjaGFyYWN0ZXIuCiBzdHJ1Y3QgR2x5cGhEYXRhIHsKLSAgICBHbHlwaERhdGEo
R2x5cGggZyA9IDAsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmID0gMCkKKyAgICBHbHlwaERhdGEo
R2x5cGggZyA9IDAsIGNvbnN0IEZvbnQqIGYgPSAwKQogICAgICAgICA6IGdseXBoKGcpCi0gICAg
ICAgICwgZm9udERhdGEoZikKKyAgICAgICAgLCBmb250KGYpCiAgICAgewogICAgIH0KICAgICBH
bHlwaCBnbHlwaDsKLSAgICBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGE7CisgICAgY29u
c3QgRm9udCogZm9udDsKIH07CiAKICNpZiBDT01QSUxFUihNU1ZDKQpAQCAtNjYsMjQgKzY2LDI0
IEBAIHN0cnVjdCBHbHlwaERhdGEgewogLy8gbWlzc2luZyBpbiB0aGUgcHJpbWFyeSBmb250Lgog
Y2xhc3MgR2x5cGhQYWdlIDogcHVibGljIFJlZkNvdW50ZWQ8R2x5cGhQYWdlPiB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8R2x5cGhQYWdlPiBjcmVhdGVGb3JNaXhlZEZvbnREYXRh
KCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxHbHlwaFBhZ2U+IGNyZWF0ZUZvck1peGVkRm9udHMo
KQogICAgIHsKLSAgICAgICAgdm9pZCogc2xvdCA9IGZhc3RNYWxsb2Moc2l6ZW9mKEdseXBoUGFn
ZSkgKyBzaXplb2YoU2ltcGxlRm9udERhdGEqKSAqIEdseXBoUGFnZTo6c2l6ZSk7CisgICAgICAg
IHZvaWQqIHNsb3QgPSBmYXN0TWFsbG9jKHNpemVvZihHbHlwaFBhZ2UpICsgc2l6ZW9mKEZvbnQq
KSAqIEdseXBoUGFnZTo6c2l6ZSk7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgKE5vdE51
bGwsIHNsb3QpIEdseXBoUGFnZShudWxscHRyKSk7CiAgICAgfQogCi0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8R2x5cGhQYWdlPiBjcmVhdGVDb3B5Rm9yTWl4ZWRGb250RGF0YShjb25zdCBHbHlwaFBh
Z2UmIG9yaWdpbmFsKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdseXBoUGFnZT4gY3JlYXRlQ29w
eUZvck1peGVkRm9udHMoY29uc3QgR2x5cGhQYWdlJiBvcmlnaW5hbCkKICAgICB7Ci0gICAgICAg
IFJlZlB0cjxHbHlwaFBhZ2U+IHBhZ2UgPSBjcmVhdGVGb3JNaXhlZEZvbnREYXRhKCk7CisgICAg
ICAgIFJlZlB0cjxHbHlwaFBhZ2U+IHBhZ2UgPSBjcmVhdGVGb3JNaXhlZEZvbnRzKCk7CiAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHbHlwaFBhZ2U6OnNpemU7ICsraSkKICAgICAg
ICAgICAgIHBhZ2UtPnNldEdseXBoRGF0YUZvckluZGV4KGksIG9yaWdpbmFsLmdseXBoRGF0YUZv
ckluZGV4KGkpKTsKICAgICAgICAgcmV0dXJuIHBhZ2UucmVsZWFzZSgpOwogICAgIH0KIAotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEdseXBoUGFnZT4gY3JlYXRlRm9yU2luZ2xlRm9udERhdGEoY29u
c3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdseXBo
UGFnZT4gY3JlYXRlRm9yU2luZ2xlRm9udChjb25zdCBGb250KiBmb250KQogICAgIHsKLSAgICAg
ICAgQVNTRVJUKGZvbnREYXRhKTsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHbHlwaFBh
Z2UoZm9udERhdGEpKTsKKyAgICAgICAgQVNTRVJUKGZvbnQpOworICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEdseXBoUGFnZShmb250KSk7CiAgICAgfQogCiAgICAgfkdseXBoUGFnZSgpCkBA
IC0xMTEsNyArMTExLDcgQEAgcHVibGljOgogICAgICAgICBHbHlwaCBnbHlwaCA9IG1fZ2x5cGhz
W2luZGV4XTsKICAgICAgICAgaWYgKGhhc1BlckdseXBoRm9udERhdGEoKSkKICAgICAgICAgICAg
IHJldHVybiBHbHlwaERhdGEoZ2x5cGgsIG1fcGVyR2x5cGhGb250RGF0YVtpbmRleF0pOwotICAg
ICAgICByZXR1cm4gR2x5cGhEYXRhKGdseXBoLCBnbHlwaCA/IG1fZm9udERhdGFGb3JBbGxHbHlw
aHMgOiAwKTsKKyAgICAgICAgcmV0dXJuIEdseXBoRGF0YShnbHlwaCwgZ2x5cGggPyBtX2ZvbnRG
b3JBbGxHbHlwaHMgOiAwKTsKICAgICB9CiAKICAgICBBTFdBWVNfSU5MSU5FIEdseXBoIGdseXBo
QXQodW5zaWduZWQgaW5kZXgpIGNvbnN0CkBAIC0xMjAsNjcgKzEyMCw2NyBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBtX2dseXBoc1tpbmRleF07CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElO
RSBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjKSBj
b25zdAorICAgIEFMV0FZU19JTkxJTkUgY29uc3QgRm9udCogZm9udEZvckNoYXJhY3RlcihVQ2hh
cjMyIGMpIGNvbnN0CiAgICAgewogICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGluZGV4Rm9yQ2hh
cmFjdGVyKGMpOwogICAgICAgICBpZiAoaGFzUGVyR2x5cGhGb250RGF0YSgpKQogICAgICAgICAg
ICAgcmV0dXJuIG1fcGVyR2x5cGhGb250RGF0YVtpbmRleF07Ci0gICAgICAgIHJldHVybiBtX2ds
eXBoc1tpbmRleF0gPyBtX2ZvbnREYXRhRm9yQWxsR2x5cGhzIDogMDsKKyAgICAgICAgcmV0dXJu
IG1fZ2x5cGhzW2luZGV4XSA/IG1fZm9udEZvckFsbEdseXBocyA6IDA7CiAgICAgfQogCi0gICAg
dm9pZCBzZXRHbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjLCBHbHlwaCBnLCBjb25zdCBT
aW1wbGVGb250RGF0YSogZikKKyAgICB2b2lkIHNldEdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hh
cjMyIGMsIEdseXBoIGcsIGNvbnN0IEZvbnQqIGYpCiAgICAgewogICAgICAgICBzZXRHbHlwaERh
dGFGb3JJbmRleChpbmRleEZvckNoYXJhY3RlcihjKSwgZywgZik7CiAgICAgfQogCi0gICAgdm9p
ZCBzZXRHbHlwaERhdGFGb3JJbmRleCh1bnNpZ25lZCBpbmRleCwgR2x5cGggZ2x5cGgsIGNvbnN0
IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSkKKyAgICB2b2lkIHNldEdseXBoRGF0YUZvckluZGV4
KHVuc2lnbmVkIGluZGV4LCBHbHlwaCBnbHlwaCwgY29uc3QgRm9udCogZm9udCkKICAgICB7CiAg
ICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGluZGV4IDwgc2l6ZSk7CiAg
ICAgICAgIEFTU0VSVCghbV9pc0ltbXV0YWJsZSk7CiAgICAgICAgIAogICAgICAgICBtX2dseXBo
c1tpbmRleF0gPSBnbHlwaDsKIAotICAgICAgICAvLyBHbHlwaFBhZ2UgZ2V0dGVycyB3aWxsIGFs
d2F5cyByZXR1cm4gYSBudWxsIFNpbXBsZUZvbnREYXRhKiBmb3IgZ2x5cGggIzAgaWYgdGhlcmUn
cyBubyBwZXItZ2x5cGggZm9udCBhcnJheS4KKyAgICAgICAgLy8gR2x5cGhQYWdlIGdldHRlcnMg
d2lsbCBhbHdheXMgcmV0dXJuIGEgbnVsbCBGb250KiBmb3IgZ2x5cGggIzAgaWYgdGhlcmUncyBu
byBwZXItZ2x5cGggZm9udCBhcnJheS4KICAgICAgICAgaWYgKGhhc1BlckdseXBoRm9udERhdGEo
KSkgewotICAgICAgICAgICAgbV9wZXJHbHlwaEZvbnREYXRhW2luZGV4XSA9IGdseXBoID8gZm9u
dERhdGEgOiAwOworICAgICAgICAgICAgbV9wZXJHbHlwaEZvbnREYXRhW2luZGV4XSA9IGdseXBo
ID8gZm9udCA6IDA7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICAv
LyBBIHNpbmdsZS1mb250IEdseXBoUGFnZSBhbHJlYWR5IGFzc2lnbmVkIG1fZm9udERhdGFGb3JB
bGxHbHlwaHMgaW4gdGhlIGNvbnN0cnVjdG9yLgotICAgICAgICBBU1NFUlQoIWdseXBoIHx8IGZv
bnREYXRhID09IG1fZm9udERhdGFGb3JBbGxHbHlwaHMpOworICAgICAgICAvLyBBIHNpbmdsZS1m
b250IEdseXBoUGFnZSBhbHJlYWR5IGFzc2lnbmVkIG1fZm9udEZvckFsbEdseXBocyBpbiB0aGUg
Y29uc3RydWN0b3IuCisgICAgICAgIEFTU0VSVCghZ2x5cGggfHwgZm9udCA9PSBtX2ZvbnRGb3JB
bGxHbHlwaHMpOwogICAgIH0KIAogICAgIHZvaWQgc2V0R2x5cGhEYXRhRm9ySW5kZXgodW5zaWdu
ZWQgaW5kZXgsIGNvbnN0IEdseXBoRGF0YSYgZ2x5cGhEYXRhKQogICAgIHsKLSAgICAgICAgc2V0
R2x5cGhEYXRhRm9ySW5kZXgoaW5kZXgsIGdseXBoRGF0YS5nbHlwaCwgZ2x5cGhEYXRhLmZvbnRE
YXRhKTsKKyAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgoaW5kZXgsIGdseXBoRGF0YS5nbHlw
aCwgZ2x5cGhEYXRhLmZvbnQpOwogICAgIH0KIAogICAgIC8vIEltcGxlbWVudGVkIGJ5IHRoZSBw
bGF0Zm9ybS4KLSAgICBib29sIGZpbGwodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgs
IFVDaGFyKiBjaGFyYWN0ZXJCdWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgU2lt
cGxlRm9udERhdGEqKTsKKyAgICBib29sIGZpbGwodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgsIFVDaGFyKiBjaGFyYWN0ZXJCdWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29u
c3QgRm9udCopOwogI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIHN0YXRpYyBib29sIG1heVVzZU1p
eGVkRm9udERhdGFXaGVuRmlsbGluZyhjb25zdCBVQ2hhciogY2hhcmFjdGVyQnVmZmVyLCB1bnNp
Z25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IFNpbXBsZUZvbnREYXRhKik7CisgICAgc3RhdGljIGJv
b2wgbWF5VXNlTWl4ZWRGb250c1doZW5GaWxsaW5nKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJCdWZm
ZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgRm9udCopOwogI2Vsc2UKLSAgICBzdGF0
aWMgYm9vbCBtYXlVc2VNaXhlZEZvbnREYXRhV2hlbkZpbGxpbmcoY29uc3QgVUNoYXIqLCB1bnNp
Z25lZCwgY29uc3QgU2ltcGxlRm9udERhdGEqKSB7IHJldHVybiBmYWxzZTsgfQorICAgIHN0YXRp
YyBib29sIG1heVVzZU1peGVkRm9udHNXaGVuRmlsbGluZyhjb25zdCBVQ2hhciosIHVuc2lnbmVk
LCBjb25zdCBGb250KikgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCiBwcml2YXRlOgotICAg
IGV4cGxpY2l0IEdseXBoUGFnZShjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGFGb3JBbGxH
bHlwaHMpCi0gICAgICAgIDogbV9mb250RGF0YUZvckFsbEdseXBocyhmb250RGF0YUZvckFsbEds
eXBocykKKyAgICBleHBsaWNpdCBHbHlwaFBhZ2UoY29uc3QgRm9udCogZm9udEZvckFsbEdseXBo
cykKKyAgICAgICAgOiBtX2ZvbnRGb3JBbGxHbHlwaHMoZm9udEZvckFsbEdseXBocykKICAgICB7
CiAgICAgICAgIG1lbXNldChtX2dseXBocywgMCwgc2l6ZW9mKG1fZ2x5cGhzKSk7CiAgICAgICAg
IGlmIChoYXNQZXJHbHlwaEZvbnREYXRhKCkpCi0gICAgICAgICAgICBtZW1zZXQobV9wZXJHbHlw
aEZvbnREYXRhLCAwLCBzaXplb2YoU2ltcGxlRm9udERhdGEqKSAqIEdseXBoUGFnZTo6c2l6ZSk7
CisgICAgICAgICAgICBtZW1zZXQobV9wZXJHbHlwaEZvbnREYXRhLCAwLCBzaXplb2YoRm9udCop
ICogR2x5cGhQYWdlOjpzaXplKTsKICAgICAgICAgKytzX2NvdW50OwogICAgIH0KIAotICAgIGJv
b2wgaGFzUGVyR2x5cGhGb250RGF0YSgpIGNvbnN0IHsgcmV0dXJuICFtX2ZvbnREYXRhRm9yQWxs
R2x5cGhzOyB9CisgICAgYm9vbCBoYXNQZXJHbHlwaEZvbnREYXRhKCkgY29uc3QgeyByZXR1cm4g
IW1fZm9udEZvckFsbEdseXBoczsgfQogCi0gICAgY29uc3QgU2ltcGxlRm9udERhdGEqIG1fZm9u
dERhdGFGb3JBbGxHbHlwaHM7CisgICAgY29uc3QgRm9udCogbV9mb250Rm9yQWxsR2x5cGhzOwog
ICAgIEdseXBoIG1fZ2x5cGhzW3NpemVdOwogCiAgICAgYm9vbCBtX2lzSW1tdXRhYmxlIHsgZmFs
c2UgfTsKLSAgICAvLyBOT1RFOiBUaGlzIGFycmF5IGhhcyAoR2x5cGhQYWdlOjpzaXplKSBlbGVt
ZW50cyBpZiBtX2ZvbnREYXRhRm9yQWxsR2x5cGhzIGlzIG51bGwuCi0gICAgY29uc3QgU2ltcGxl
Rm9udERhdGEqIG1fcGVyR2x5cGhGb250RGF0YVswXTsKKyAgICAvLyBOT1RFOiBUaGlzIGFycmF5
IGhhcyAoR2x5cGhQYWdlOjpzaXplKSBlbGVtZW50cyBpZiBtX2ZvbnRGb3JBbGxHbHlwaHMgaXMg
bnVsbC4KKyAgICBjb25zdCBGb250KiBtX3BlckdseXBoRm9udERhdGFbMF07CiAKICAgICBzdGF0
aWMgdW5zaWduZWQgc19jb3VudDsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAJKHJldmlzaW9uIDE3ODg1NykK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ0OCwxMiArNDQ4LDEyIEBAIGZsb2F0IEdyYXBoaWNzQ29udGV4
dDo6ZHJhd1RleHQoY29uc3QgRm8KIH0KICNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0dseXBocyhjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29u
c3QgU2ltcGxlRm9udERhdGEmIGZvbnREYXRhLCBjb25zdCBHbHlwaEJ1ZmZlciYgYnVmZmVyLCBp
bnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0dseXBocyhjb25zdCBGb250Q2FzY2FkZSYgZm9udENhc2NhZGUs
IGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBidWZmZXIsIGludCBmcm9tLCBp
bnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKIHsKICAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBmb250LmRyYXdHbHlwaHModGhp
cywgJmZvbnREYXRhLCBidWZmZXIsIGZyb20sIG51bUdseXBocywgcG9pbnQpOworICAgIGZvbnRD
YXNjYWRlLmRyYXdHbHlwaHModGhpcywgJmZvbnQsIGJ1ZmZlciwgZnJvbSwgbnVtR2x5cGhzLCBw
b2ludCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RW1waGFzaXNNYXJrcyhjb25z
dCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJp
bmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0LmgJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogI2lmIFVTRShXSU5HREkpCiAgICAgY2xhc3MgU2hhcmVkQml0
bWFwOwotICAgIGNsYXNzIFNpbXBsZUZvbnREYXRhOworICAgIGNsYXNzIEZvbnQ7CiAgICAgY2xh
c3MgR2x5cGhCdWZmZXI7CiAjZW5kaWYKIApAQCAtMzYwLDcgKzM2MCw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICNlbHNlCiAgICAgICAgIGZsb2F0IGRyYXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRl
JiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGludCB0
byA9IC0xKTsKICNlbmRpZgotICAgICAgICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udENhc2Nh
ZGUmLCBjb25zdCBTaW1wbGVGb250RGF0YSYsIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20s
IGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICAgICAgdm9pZCBkcmF3R2x5
cGhzKGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyJiwg
aW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmKTsKICAgICAgICAgdm9p
ZCBkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mICwg
Y29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20gPSAw
LCBpbnQgdG8gPSAtMSk7CiAjaWYgIVBMQVRGT1JNKElPUykKICAgICAgICAgdm9pZCBkcmF3Qmlk
aVRleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2lu
dCYsIEZvbnRDYXNjYWRlOjpDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPSBGb250Q2FzY2FkZTo6
RG9Ob3RQYWludElmRm9udE5vdFJlYWR5KTsKQEAgLTQ3OSw3ICs0NzksNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIEFmZmluZVRyYW5zZm9ybSYgYWZmaW5lVHJhbnNmb3JtKCk7CiAg
ICAgICAgIHZvaWQgcmVzZXRBZmZpbmVUcmFuc2Zvcm0oKTsKICAgICAgICAgdm9pZCBmaWxsUmVj
dChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBHcmFkaWVudCopOwotICAgICAgICB2b2lkIGRyYXdU
ZXh0KGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwgY29uc3QgR2x5cGhCdWZmZXImIGds
eXBoQnVmZmVyLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQpOworICAgICAgICB2b2lkIGRyYXdUZXh0KGNvbnN0IEZvbnQqLCBjb25zdCBHbHlwaEJ1ZmZl
ciYsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50Jik7CiAgICAgICAg
IHZvaWQgZHJhd0ZyYW1lQ29udHJvbChjb25zdCBJbnRSZWN0JiByZWN0LCB1bnNpZ25lZCB0eXBl
LCB1bnNpZ25lZCBzdGF0ZSk7CiAgICAgICAgIHZvaWQgZHJhd0ZvY3VzUmVjdChjb25zdCBJbnRS
ZWN0JiByZWN0KTsKICAgICAgICAgdm9pZCBwYWludFRleHRGaWVsZChjb25zdCBJbnRSZWN0JiBy
ZWN0LCB1bnNpZ25lZCBzdGF0ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9TaW1wbGVGb250RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNDU2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIw
MDgsIDIwMTAsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICog
My4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1l
cyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJT
aW1wbGVGb250RGF0YS5oIgotCi0jaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAm
JiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID4gMTA4MCkKLSNpbmNsdWRlICJDb3Jl
VGV4dFNQSS5oIgotI2VuZGlmCi0jaW5jbHVkZSAiRm9udENhY2hlLmgiCi0jaW5jbHVkZSAiRm9u
dENhc2NhZGUuaCIKLSNpbmNsdWRlICJPcGVuVHlwZU1hdGhEYXRhLmgiCi0jaW5jbHVkZSA8d3Rm
L01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLQotI2lmIEVO
QUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKLSNpbmNsdWRlICJPcGVuVHlwZVZlcnRpY2FsRGF0YS5o
IgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdW5zaWduZWQgR2x5cGhQYWdlOjpz
X2NvdW50ID0gMDsKLQotY29uc3QgZmxvYXQgc21hbGxDYXBzRm9udFNpemVNdWx0aXBsaWVyID0g
MC43ZjsKLWNvbnN0IGZsb2F0IGVtcGhhc2lzTWFya0ZvbnRTaXplTXVsdGlwbGllciA9IDAuNWY7
Ci0KLVNpbXBsZUZvbnREYXRhOjpTaW1wbGVGb250RGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRh
JiBwbGF0Zm9ybURhdGEsIGJvb2wgaXNDdXN0b21Gb250LCBib29sIGlzTG9hZGluZywgYm9vbCBp
c1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKQotICAgIDogbV9tYXhDaGFyV2lkdGgoLTEpCi0gICAg
LCBtX2F2Z0NoYXJXaWR0aCgtMSkKLSAgICAsIG1fcGxhdGZvcm1EYXRhKHBsYXRmb3JtRGF0YSkK
LSAgICAsIG1fdHJlYXRBc0ZpeGVkUGl0Y2goZmFsc2UpCi0gICAgLCBtX2lzQ3VzdG9tRm9udChp
c0N1c3RvbUZvbnQpCi0gICAgLCBtX2lzTG9hZGluZyhpc0xvYWRpbmcpCi0gICAgLCBtX2lzVGV4
dE9yaWVudGF0aW9uRmFsbGJhY2soaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaykKLSAgICAsIG1f
aXNCcm9rZW5JZGVvZ3JhcGhGYWxsYmFjayhmYWxzZSkKLSAgICAsIG1fbWF0aERhdGEobnVsbHB0
cikKLSNpZiBFTkFCTEUoT1BFTlRZUEVfVkVSVElDQUwpCi0gICAgLCBtX3ZlcnRpY2FsRGF0YSgw
KQotI2VuZGlmCi0gICAgLCBtX2hhc1ZlcnRpY2FsR2x5cGhzKGZhbHNlKQotewotICAgIHBsYXRm
b3JtSW5pdCgpOwotICAgIHBsYXRmb3JtR2x5cGhJbml0KCk7Ci0gICAgcGxhdGZvcm1DaGFyV2lk
dGhJbml0KCk7Ci0jaWYgRU5BQkxFKE9QRU5UWVBFX1ZFUlRJQ0FMKQotICAgIGlmIChwbGF0Zm9y
bURhdGEub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCAmJiAhaXNUZXh0T3JpZW50YXRpb25GYWxs
YmFjaykgewotICAgICAgICBtX3ZlcnRpY2FsRGF0YSA9IHBsYXRmb3JtRGF0YS52ZXJ0aWNhbERh
dGEoKTsKLSAgICAgICAgbV9oYXNWZXJ0aWNhbEdseXBocyA9IG1fdmVydGljYWxEYXRhLmdldCgp
ICYmIG1fdmVydGljYWxEYXRhLT5oYXNWZXJ0aWNhbE1ldHJpY3MoKTsKLSAgICB9Ci0jZW5kaWYK
LX0KLQotU2ltcGxlRm9udERhdGE6OlNpbXBsZUZvbnREYXRhKHN0ZDo6dW5pcXVlX3B0cjxTVkdE
YXRhPiBzdmdEYXRhLCBmbG9hdCBmb250U2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5
bnRoZXRpY0l0YWxpYykKLSAgICA6IG1fcGxhdGZvcm1EYXRhKEZvbnRQbGF0Zm9ybURhdGEoZm9u
dFNpemUsIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYykpCi0gICAgLCBtX3N2Z0RhdGEo
V1RGOjptb3ZlKHN2Z0RhdGEpKQotICAgICwgbV90cmVhdEFzRml4ZWRQaXRjaChmYWxzZSkKLSAg
ICAsIG1faXNDdXN0b21Gb250KHRydWUpCi0gICAgLCBtX2lzTG9hZGluZyhmYWxzZSkKLSAgICAs
IG1faXNUZXh0T3JpZW50YXRpb25GYWxsYmFjayhmYWxzZSkKLSAgICAsIG1faXNCcm9rZW5JZGVv
Z3JhcGhGYWxsYmFjayhmYWxzZSkKLSAgICAsIG1fbWF0aERhdGEobnVsbHB0cikKLSNpZiBFTkFC
TEUoT1BFTlRZUEVfVkVSVElDQUwpCi0gICAgLCBtX3ZlcnRpY2FsRGF0YSgwKQotI2VuZGlmCi0g
ICAgLCBtX2hhc1ZlcnRpY2FsR2x5cGhzKGZhbHNlKQotI2lmIFBMQVRGT1JNKElPUykKLSAgICAs
IG1fc2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKGZhbHNlKQotI2VuZGlmCi17Ci0gICAgbV9zdmdE
YXRhLT5pbml0aWFsaXplRm9udERhdGEodGhpcywgZm9udFNpemUpOwotfQotCi0vLyBFc3RpbWF0
ZXMgb2YgYXZnQ2hhcldpZHRoIGFuZCBtYXhDaGFyV2lkdGggZm9yIHBsYXRmb3JtcyB0aGF0IGRv
bid0IHN1cHBvcnQgYWNjZXNzaW5nIHRoZXNlIHZhbHVlcyBmcm9tIHRoZSBmb250Lgotdm9pZCBT
aW1wbGVGb250RGF0YTo6aW5pdENoYXJXaWR0aHMoKQotewotICAgIGF1dG8qIGdseXBoUGFnZVpl
cm8gPSBnbHlwaFBhZ2UoMCk7Ci0KLSAgICAvLyBUcmVhdCB0aGUgd2lkdGggb2YgYSAnMCcgYXMg
dGhlIGF2Z0NoYXJXaWR0aC4KLSAgICBpZiAobV9hdmdDaGFyV2lkdGggPD0gMC5mICYmIGdseXBo
UGFnZVplcm8pIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IFVDaGFyMzIgZGlnaXRaZXJvQ2hhciA9
ICcwJzsKLSAgICAgICAgR2x5cGggZGlnaXRaZXJvR2x5cGggPSBnbHlwaFBhZ2VaZXJvLT5nbHlw
aERhdGFGb3JDaGFyYWN0ZXIoZGlnaXRaZXJvQ2hhcikuZ2x5cGg7Ci0gICAgICAgIGlmIChkaWdp
dFplcm9HbHlwaCkKLSAgICAgICAgICAgIG1fYXZnQ2hhcldpZHRoID0gd2lkdGhGb3JHbHlwaChk
aWdpdFplcm9HbHlwaCk7Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgY2FuJ3QgcmV0cmlldmUgdGhl
IHdpZHRoIG9mIGEgJzAnLCBmYWxsIGJhY2sgdG8gdGhlIHggaGVpZ2h0LgotICAgIGlmIChtX2F2
Z0NoYXJXaWR0aCA8PSAwLmYpCi0gICAgICAgIG1fYXZnQ2hhcldpZHRoID0gbV9mb250TWV0cmlj
cy54SGVpZ2h0KCk7Ci0KLSAgICBpZiAobV9tYXhDaGFyV2lkdGggPD0gMC5mKQotICAgICAgICBt
X21heENoYXJXaWR0aCA9IHN0ZDo6bWF4KG1fYXZnQ2hhcldpZHRoLCBtX2ZvbnRNZXRyaWNzLmZs
b2F0QXNjZW50KCkpOwotfQotCi12b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUdseXBoSW5p
dCgpCi17Ci0gICAgYXV0byogZ2x5cGhQYWdlWmVybyA9IGdseXBoUGFnZSgwKTsKLSAgICBpZiAo
IWdseXBoUGFnZVplcm8pIHsKLSAgICAgICAgbV9zcGFjZUdseXBoID0gMDsKLSAgICAgICAgbV9z
cGFjZVdpZHRoID0gMDsKLSAgICAgICAgbV96ZXJvR2x5cGggPSAwOwotICAgICAgICBtX2FkanVz
dGVkU3BhY2VXaWR0aCA9IDA7Ci0gICAgICAgIGRldGVybWluZVBpdGNoKCk7Ci0gICAgICAgIG1f
emVyb1dpZHRoU3BhY2VHbHlwaCA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAv
LyBBc2sgZm9yIHRoZSBnbHlwaCBmb3IgMCB0byBhdm9pZCBwYWdpbmcgaW4gWkVSTyBXSURUSCBT
UEFDRS4gQ29udHJvbCBjaGFyYWN0ZXJzLCBpbmNsdWRpbmcgMCwKLSAgICAvLyBhcmUgbWFwcGVk
IHRvIHRoZSBaRVJPIFdJRFRIIFNQQUNFIGdseXBoLgotICAgIG1femVyb1dpZHRoU3BhY2VHbHlw
aCA9IGdseXBoUGFnZVplcm8tPmdseXBoRGF0YUZvckNoYXJhY3RlcigwKS5nbHlwaDsKLQotICAg
IC8vIE5hc3R5IGhhY2sgdG8gZGV0ZXJtaW5lIGlmIHdlIHNob3VsZCByb3VuZCBvciBjZWlsIHNw
YWNlIHdpZHRocy4KLSAgICAvLyBJZiB0aGUgZm9udCBpcyBtb25vc3BhY2Ugb3IgZmFrZSBtb25v
c3BhY2Ugd2UgY2VpbCB0byBlbnN1cmUgdGhhdCAKLSAgICAvLyBldmVyeSBjaGFyYWN0ZXIgYW5k
IHRoZSBzcGFjZSBhcmUgdGhlIHNhbWUgd2lkdGguICBPdGhlcndpc2Ugd2Ugcm91bmQuCi0gICAg
bV9zcGFjZUdseXBoID0gZ2x5cGhQYWdlWmVyby0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKCcgJyku
Z2x5cGg7Ci0gICAgZmxvYXQgd2lkdGggPSB3aWR0aEZvckdseXBoKG1fc3BhY2VHbHlwaCk7Ci0g
ICAgbV9zcGFjZVdpZHRoID0gd2lkdGg7Ci0gICAgbV96ZXJvR2x5cGggPSBnbHlwaFBhZ2VaZXJv
LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoJzAnKS5nbHlwaDsKLSAgICBtX2ZvbnRNZXRyaWNzLnNl
dFplcm9XaWR0aCh3aWR0aEZvckdseXBoKG1femVyb0dseXBoKSk7Ci0gICAgZGV0ZXJtaW5lUGl0
Y2goKTsKLSAgICBtX2FkanVzdGVkU3BhY2VXaWR0aCA9IG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPyBj
ZWlsZih3aWR0aCkgOiByb3VuZGYod2lkdGgpOwotCi0gICAgLy8gRm9yY2UgdGhlIGdseXBoIGZv
ciBaRVJPIFdJRFRIIFNQQUNFIHRvIGhhdmUgemVybyB3aWR0aCwgdW5sZXNzIGl0IGlzIHNoYXJl
ZCB3aXRoIFNQQUNFLgotICAgIC8vIEhlbHZldGljYSBpcyBhbiBleGFtcGxlIG9mIGEgbm9uLXpl
cm8gd2lkdGggWkVSTyBXSURUSCBTUEFDRSBnbHlwaC4KLSAgICAvLyBTZWUgPGh0dHA6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMTc4PiBhbmQgU2ltcGxlRm9udERhdGE6Omlz
WmVyb1dpZHRoU3BhY2VHbHlwaCgpCi0gICAgaWYgKG1femVyb1dpZHRoU3BhY2VHbHlwaCA9PSBt
X3NwYWNlR2x5cGgpCi0gICAgICAgIG1femVyb1dpZHRoU3BhY2VHbHlwaCA9IDA7Ci19Ci0KLVNp
bXBsZUZvbnREYXRhOjp+U2ltcGxlRm9udERhdGEoKQotewotICAgIHJlbW92ZUZyb21TeXN0ZW1G
YWxsYmFja0NhY2hlKCk7Ci19Ci0KLXN0YXRpYyBib29sIGZpbGxHbHlwaFBhZ2UoR2x5cGhQYWdl
JiBwYWdlVG9GaWxsLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1
ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERh
dGEpCi17Ci0jaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICBpZiAoYXV0byogc3ZnRGF0YSA9IGZv
bnREYXRhLT5zdmdEYXRhKCkpCi0gICAgICAgIHJldHVybiBzdmdEYXRhLT5maWxsU1ZHR2x5cGhQ
YWdlKCZwYWdlVG9GaWxsLCBvZmZzZXQsIGxlbmd0aCwgYnVmZmVyLCBidWZmZXJMZW5ndGgsIGZv
bnREYXRhKTsKLSNlbmRpZgotICAgIGJvb2wgaGFzR2x5cGhzID0gcGFnZVRvRmlsbC5maWxsKG9m
ZnNldCwgbGVuZ3RoLCBidWZmZXIsIGJ1ZmZlckxlbmd0aCwgZm9udERhdGEpOwotI2lmIEVOQUJM
RShPUEVOVFlQRV9WRVJUSUNBTCkKLSAgICBpZiAoaGFzR2x5cGhzICYmIGZvbnREYXRhLT52ZXJ0
aWNhbERhdGEoKSkKLSAgICAgICAgZm9udERhdGEtPnZlcnRpY2FsRGF0YSgpLT5zdWJzdGl0dXRl
V2l0aFZlcnRpY2FsR2x5cGhzKGZvbnREYXRhLCAmcGFnZVRvRmlsbCwgb2Zmc2V0LCBsZW5ndGgp
OwotI2VuZGlmCi0gICAgcmV0dXJuIGhhc0dseXBoczsKLX0KLQotc3RhdGljIFJlZlB0cjxHbHlw
aFBhZ2U+IGNyZWF0ZUFuZEZpbGxHbHlwaFBhZ2UodW5zaWduZWQgcGFnZU51bWJlciwgY29uc3Qg
U2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQotewotI2lmIFBMQVRGT1JNKElPUykKLSAgICAvLyBG
SVhNRTogVGltZXMgTmV3IFJvbWFuIGNvbnRhaW5zIEFyYWJpYyBnbHlwaHMsIGJ1dCBDb3JlIFRl
eHQgZG9lc24ndCBrbm93IGhvdyB0byBzaGFwZSB0aGVtLiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzk4
MjM5NzU+LgotICAgIC8vIE9uY2Ugd2UgaGF2ZSB0aGUgZml4IGZvciA8cmRhcjovL3Byb2JsZW0v
OTgyMzk3NT4gdGhlbiByZW1vdmUgdGhpcyBjb2RlIHRvZ2V0aGVyIHdpdGggU2ltcGxlRm9udERh
dGE6OnNob3VsZE5vdEJlVXNlZEZvckFyYWJpYygpCi0gICAgLy8gaW4gPHJkYXI6Ly9wcm9ibGVt
LzEyMDk2ODM1Pi4KLSAgICBpZiAocGFnZU51bWJlciA9PSA2ICYmIGZvbnREYXRhLT5zaG91bGRO
b3RCZVVzZWRGb3JBcmFiaWMoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0jZW5kaWYKLQot
ICAgIHVuc2lnbmVkIHN0YXJ0ID0gcGFnZU51bWJlciAqIEdseXBoUGFnZTo6c2l6ZTsKLSAgICBV
Q2hhciBidWZmZXJbR2x5cGhQYWdlOjpzaXplICogMiArIDJdOwotICAgIHVuc2lnbmVkIGJ1ZmZl
ckxlbmd0aDsKLSAgICAvLyBGaWxsIGluIGEgYnVmZmVyIHdpdGggdGhlIGVudGlyZSAicGFnZSIg
b2YgY2hhcmFjdGVycyB0aGF0IHdlIHdhbnQgdG8gbG9vayB1cCBnbHlwaHMgZm9yLgotICAgIGlm
IChVX0lTX0JNUChzdGFydCkpIHsKLSAgICAgICAgYnVmZmVyTGVuZ3RoID0gR2x5cGhQYWdlOjpz
aXplOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR2x5cGhQYWdlOjpzaXplOyBp
KyspCi0gICAgICAgICAgICBidWZmZXJbaV0gPSBzdGFydCArIGk7Ci0KLSAgICAgICAgaWYgKHN0
YXJ0ID09IDApIHsKLSAgICAgICAgICAgIC8vIENvbnRyb2wgY2hhcmFjdGVycyBtdXN0IG5vdCBy
ZW5kZXIgYXQgYWxsLgotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDB4MjA7
ICsraSkKLSAgICAgICAgICAgICAgICBidWZmZXJbaV0gPSB6ZXJvV2lkdGhTcGFjZTsKLSAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDB4N0Y7IGkgPCAweEEwOyBpKyspCi0gICAgICAgICAg
ICAgICAgYnVmZmVyW2ldID0gemVyb1dpZHRoU3BhY2U7Ci0gICAgICAgICAgICBidWZmZXJbc29m
dEh5cGhlbl0gPSB6ZXJvV2lkdGhTcGFjZTsKLQotICAgICAgICAgICAgLy8gXG4sIFx0LCBhbmQg
bm9uYnJlYWtpbmcgc3BhY2UgbXVzdCByZW5kZXIgYXMgYSBzcGFjZS4KLSAgICAgICAgICAgIGJ1
ZmZlclsoaW50KSdcbiddID0gJyAnOwotICAgICAgICAgICAgYnVmZmVyWyhpbnQpJ1x0J10gPSAn
ICc7Ci0gICAgICAgICAgICBidWZmZXJbbm9CcmVha1NwYWNlXSA9ICcgJzsKLSAgICAgICAgfSBl
bHNlIGlmIChzdGFydCA9PSAobGVmdFRvUmlnaHRNYXJrICYgfihHbHlwaFBhZ2U6OnNpemUgLSAx
KSkpIHsKLSAgICAgICAgICAgIC8vIExSTSwgUkxNLCBMUkUsIFJMRSwgWldOSiwgWldKLCBhbmQg
UERGIG11c3Qgbm90IHJlbmRlciBhdCBhbGwuCi0gICAgICAgICAgICBidWZmZXJbbGVmdFRvUmln
aHRNYXJrIC0gc3RhcnRdID0gemVyb1dpZHRoU3BhY2U7Ci0gICAgICAgICAgICBidWZmZXJbcmln
aHRUb0xlZnRNYXJrIC0gc3RhcnRdID0gemVyb1dpZHRoU3BhY2U7Ci0gICAgICAgICAgICBidWZm
ZXJbbGVmdFRvUmlnaHRFbWJlZCAtIHN0YXJ0XSA9IHplcm9XaWR0aFNwYWNlOwotICAgICAgICAg
ICAgYnVmZmVyW3JpZ2h0VG9MZWZ0RW1iZWQgLSBzdGFydF0gPSB6ZXJvV2lkdGhTcGFjZTsKLSAg
ICAgICAgICAgIGJ1ZmZlcltsZWZ0VG9SaWdodE92ZXJyaWRlIC0gc3RhcnRdID0gemVyb1dpZHRo
U3BhY2U7Ci0gICAgICAgICAgICBidWZmZXJbcmlnaHRUb0xlZnRPdmVycmlkZSAtIHN0YXJ0XSA9
IHplcm9XaWR0aFNwYWNlOwotICAgICAgICAgICAgYnVmZmVyW3plcm9XaWR0aE5vbkpvaW5lciAt
IHN0YXJ0XSA9IHplcm9XaWR0aFNwYWNlOwotICAgICAgICAgICAgYnVmZmVyW3plcm9XaWR0aEpv
aW5lciAtIHN0YXJ0XSA9IHplcm9XaWR0aFNwYWNlOwotICAgICAgICAgICAgYnVmZmVyW3BvcERp
cmVjdGlvbmFsRm9ybWF0dGluZyAtIHN0YXJ0XSA9IHplcm9XaWR0aFNwYWNlOwotICAgICAgICB9
IGVsc2UgaWYgKHN0YXJ0ID09IChvYmplY3RSZXBsYWNlbWVudENoYXJhY3RlciAmIH4oR2x5cGhQ
YWdlOjpzaXplIC0gMSkpKSB7Ci0gICAgICAgICAgICAvLyBPYmplY3QgcmVwbGFjZW1lbnQgY2hh
cmFjdGVyIG11c3Qgbm90IHJlbmRlciBhdCBhbGwuCi0gICAgICAgICAgICBidWZmZXJbb2JqZWN0
UmVwbGFjZW1lbnRDaGFyYWN0ZXIgLSBzdGFydF0gPSB6ZXJvV2lkdGhTcGFjZTsKLSAgICAgICAg
fSBlbHNlIGlmIChzdGFydCA9PSAoemVyb1dpZHRoTm9CcmVha1NwYWNlICYgfihHbHlwaFBhZ2U6
OnNpemUgLSAxKSkpIHsKLSAgICAgICAgICAgIC8vIFpXTkJTL0JPTSBtdXN0IG5vdCByZW5kZXIg
YXQgYWxsLgotICAgICAgICAgICAgYnVmZmVyW3plcm9XaWR0aE5vQnJlYWtTcGFjZSAtIHN0YXJ0
XSA9IHplcm9XaWR0aFNwYWNlOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgYnVm
ZmVyTGVuZ3RoID0gR2x5cGhQYWdlOjpzaXplICogMjsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IEdseXBoUGFnZTo6c2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICBpbnQgYyA9IGkg
KyBzdGFydDsKLSAgICAgICAgICAgIGJ1ZmZlcltpICogMl0gPSBVMTZfTEVBRChjKTsKLSAgICAg
ICAgICAgIGJ1ZmZlcltpICogMiArIDFdID0gVTE2X1RSQUlMKGMpOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgLy8gTm93IHRoYXQgd2UgaGF2ZSBhIGJ1ZmZlciBmdWxsIG9mIGNoYXJhY3RlcnMs
IHdlIHdhbnQgdG8gZ2V0IGJhY2sgYW4gYXJyYXkKLSAgICAvLyBvZiBnbHlwaCBpbmRpY2VzLiBU
aGlzIHBhcnQgaW52b2x2ZXMgY2FsbGluZyBpbnRvIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYwotICAg
IC8vIHJvdXRpbmUgb2Ygb3VyIGdseXBoIG1hcCBmb3IgYWN0dWFsbHkgZmlsbGluZyBpbiB0aGUg
cGFnZSB3aXRoIHRoZSBnbHlwaHMuCi0gICAgLy8gU3VjY2VzcyBpcyBub3QgZ3VhcmFudGVlZC4g
Rm9yIGV4YW1wbGUsIFRpbWVzIGZhaWxzIHRvIGZpbGwgcGFnZSAyNjAsIGdpdmluZyBnbHlwaCBk
YXRhCi0gICAgLy8gZm9yIG9ubHkgMTI4IG91dCBvZiAyNTYgY2hhcmFjdGVycy4KLSAgICBSZWZQ
dHI8R2x5cGhQYWdlPiBnbHlwaFBhZ2U7Ci0gICAgaWYgKEdseXBoUGFnZTo6bWF5VXNlTWl4ZWRG
b250RGF0YVdoZW5GaWxsaW5nKGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCBmb250RGF0YSkpCi0gICAg
ICAgIGdseXBoUGFnZSA9IEdseXBoUGFnZTo6Y3JlYXRlRm9yTWl4ZWRGb250RGF0YSgpOwotICAg
IGVsc2UKLSAgICAgICAgZ2x5cGhQYWdlID0gR2x5cGhQYWdlOjpjcmVhdGVGb3JTaW5nbGVGb250
RGF0YShmb250RGF0YSk7Ci0KLSAgICBib29sIGhhdmVHbHlwaHMgPSBmaWxsR2x5cGhQYWdlKCpn
bHlwaFBhZ2UsIDAsIEdseXBoUGFnZTo6c2l6ZSwgYnVmZmVyLCBidWZmZXJMZW5ndGgsIGZvbnRE
YXRhKTsKLSAgICBpZiAoIWhhdmVHbHlwaHMpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0g
ICAgZ2x5cGhQYWdlLT5zZXRJbW11dGFibGUoKTsKLSAgICByZXR1cm4gZ2x5cGhQYWdlOwotfQot
Ci1jb25zdCBHbHlwaFBhZ2UqIFNpbXBsZUZvbnREYXRhOjpnbHlwaFBhZ2UodW5zaWduZWQgcGFn
ZU51bWJlcikgY29uc3QKLXsKLSAgICBpZiAocGFnZU51bWJlciA9PSAwKSB7Ci0gICAgICAgIGlm
ICghbV9nbHlwaFBhZ2VaZXJvKQotICAgICAgICAgICAgbV9nbHlwaFBhZ2VaZXJvID0gY3JlYXRl
QW5kRmlsbEdseXBoUGFnZSgwLCB0aGlzKTsKLSAgICAgICAgcmV0dXJuIG1fZ2x5cGhQYWdlWmVy
by5nZXQoKTsKLSAgICB9Ci0gICAgYXV0byBhZGRSZXN1bHQgPSBtX2dseXBoUGFnZXMuYWRkKHBh
Z2VOdW1iZXIsIG51bGxwdHIpOwotICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAg
ICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGNyZWF0ZUFuZEZpbGxHbHlwaFBhZ2UocGFn
ZU51bWJlciwgdGhpcyk7Ci0KLSAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5n
ZXQoKTsKLX0KLQotR2x5cGggU2ltcGxlRm9udERhdGE6OmdseXBoRm9yQ2hhcmFjdGVyKFVDaGFy
MzIgY2hhcmFjdGVyKSBjb25zdAotewotICAgIGF1dG8qIHBhZ2UgPSBnbHlwaFBhZ2UoY2hhcmFj
dGVyIC8gR2x5cGhQYWdlOjpzaXplKTsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVybiAw
OwotICAgIHJldHVybiBwYWdlLT5nbHlwaEF0KGNoYXJhY3RlciAlIEdseXBoUGFnZTo6c2l6ZSk7
Ci19Ci0KLUdseXBoRGF0YSBTaW1wbGVGb250RGF0YTo6Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVD
aGFyMzIgY2hhcmFjdGVyKSBjb25zdAotewotICAgIGF1dG8qIHBhZ2UgPSBnbHlwaFBhZ2UoY2hh
cmFjdGVyIC8gR2x5cGhQYWdlOjpzaXplKTsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVy
biBHbHlwaERhdGEoKTsKLSAgICByZXR1cm4gcGFnZS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNo
YXJhY3Rlcik7Ci19Ci0KLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRh
Ojp2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250RGF0YSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFt
X2Rlcml2ZWRGb250RGF0YSkKLSAgICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBzdGQ6Om1ha2Vf
dW5pcXVlPERlcml2ZWRGb250RGF0YT4oaXNDdXN0b21Gb250KCkpOwotICAgIGlmICghbV9kZXJp
dmVkRm9udERhdGEtPnZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbikgewotICAgICAgICBGb250UGxh
dGZvcm1EYXRhIHZlcnRpY2FsUmlnaHRQbGF0Zm9ybURhdGEobV9wbGF0Zm9ybURhdGEpOwotICAg
ICAgICB2ZXJ0aWNhbFJpZ2h0UGxhdGZvcm1EYXRhLnNldE9yaWVudGF0aW9uKEhvcml6b250YWwp
OwotICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+dmVydGljYWxSaWdodE9yaWVudGF0aW9uID0g
Y3JlYXRlKHZlcnRpY2FsUmlnaHRQbGF0Zm9ybURhdGEsIGlzQ3VzdG9tRm9udCgpLCBmYWxzZSwg
dHJ1ZSk7Ci0gICAgfQotICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+dmVydGljYWxSaWdo
dE9yaWVudGF0aW9uOwotfQotCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250
RGF0YTo6dXByaWdodE9yaWVudGF0aW9uRm9udERhdGEoKSBjb25zdAotewotICAgIGlmICghbV9k
ZXJpdmVkRm9udERhdGEpCi0gICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gc3RkOjptYWtlX3Vu
aXF1ZTxEZXJpdmVkRm9udERhdGE+KGlzQ3VzdG9tRm9udCgpKTsKLSAgICBpZiAoIW1fZGVyaXZl
ZEZvbnREYXRhLT51cHJpZ2h0T3JpZW50YXRpb24pCi0gICAgICAgIG1fZGVyaXZlZEZvbnREYXRh
LT51cHJpZ2h0T3JpZW50YXRpb24gPSBjcmVhdGUobV9wbGF0Zm9ybURhdGEsIGlzQ3VzdG9tRm9u
dCgpLCBmYWxzZSwgdHJ1ZSk7Ci0gICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT51cHJpZ2h0
T3JpZW50YXRpb247Ci19Ci0KLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnRE
YXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlw
dGlvbikgY29uc3QKLXsKLSAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQotICAgICAgICBtX2Rl
cml2ZWRGb250RGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8RGVyaXZlZEZvbnREYXRhPihpc0N1c3Rv
bUZvbnQoKSk7Ci0gICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzKQotICAgICAg
ICBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9u
dERlc2NyaXB0aW9uLCBzbWFsbENhcHNGb250U2l6ZU11bHRpcGxpZXIpOwotCi0gICAgcmV0dXJu
IG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHM7Ci19Ci0KLVBhc3NSZWZQdHI8U2ltcGxlRm9u
dERhdGE+IFNpbXBsZUZvbnREYXRhOjplbXBoYXNpc01hcmtGb250RGF0YShjb25zdCBGb250RGVz
Y3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKLXsKLSAgICBpZiAoIW1fZGVyaXZlZEZv
bnREYXRhKQotICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8RGVy
aXZlZEZvbnREYXRhPihpc0N1c3RvbUZvbnQoKSk7Ci0gICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0
YS0+ZW1waGFzaXNNYXJrKQotICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJr
ID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9uLCBlbXBoYXNpc01hcmtGb250
U2l6ZU11bHRpcGxpZXIpOwotCi0gICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNp
c01hcms7Ci19Ci0KLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpi
cm9rZW5JZGVvZ3JhcGhGb250RGF0YSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2Rlcml2ZWRGb250
RGF0YSkKLSAgICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPERlcml2
ZWRGb250RGF0YT4oaXNDdXN0b21Gb250KCkpOwotICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEt
PmJyb2tlbklkZW9ncmFwaCkgewotICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+YnJva2VuSWRl
b2dyYXBoID0gY3JlYXRlKG1fcGxhdGZvcm1EYXRhLCBpc0N1c3RvbUZvbnQoKSwgZmFsc2UpOwot
ICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+YnJva2VuSWRlb2dyYXBoLT5tX2lzQnJva2VuSWRl
b2dyYXBoRmFsbGJhY2sgPSB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gbV9kZXJpdmVkRm9udERh
dGEtPmJyb2tlbklkZW9ncmFwaDsKLX0KLQotUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2lt
cGxlRm9udERhdGE6Om5vblN5bnRoZXRpY0l0YWxpY0ZvbnREYXRhKCkgY29uc3QKLXsKLSAgICBp
ZiAoIW1fZGVyaXZlZEZvbnREYXRhKQotICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IHN0ZDo6
bWFrZV91bmlxdWU8RGVyaXZlZEZvbnREYXRhPihpc0N1c3RvbUZvbnQoKSk7Ci0gICAgaWYgKCFt
X2Rlcml2ZWRGb250RGF0YS0+bm9uU3ludGhldGljSXRhbGljKSB7Ci0gICAgICAgIEZvbnRQbGF0
Zm9ybURhdGEgbm9uU3ludGhldGljSXRhbGljRm9udFBsYXRmb3JtRGF0YShtX3BsYXRmb3JtRGF0
YSk7Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgICAgIG5vblN5bnRoZXRpY0l0YWxpY0ZvbnRQ
bGF0Zm9ybURhdGEubV9zeW50aGV0aWNPYmxpcXVlID0gZmFsc2U7Ci0jZW5kaWYKLSAgICAgICAg
bV9kZXJpdmVkRm9udERhdGEtPm5vblN5bnRoZXRpY0l0YWxpYyA9IGNyZWF0ZShub25TeW50aGV0
aWNJdGFsaWNGb250UGxhdGZvcm1EYXRhLCBpc0N1c3RvbUZvbnQoKSk7Ci0gICAgfQotICAgIHJl
dHVybiBtX2Rlcml2ZWRGb250RGF0YS0+bm9uU3ludGhldGljSXRhbGljOwotfQotCi0jaWZuZGVm
IE5ERUJVRwotU3RyaW5nIFNpbXBsZUZvbnREYXRhOjpkZXNjcmlwdGlvbigpIGNvbnN0Ci17Ci0g
ICAgaWYgKGlzU1ZHRm9udCgpKQotICAgICAgICByZXR1cm4gIltTVkcgZm9udF0iOwotICAgIGlm
IChpc0N1c3RvbUZvbnQoKSkKLSAgICAgICAgcmV0dXJuICJbY3VzdG9tIGZvbnRdIjsKLQotICAg
IHJldHVybiBwbGF0Zm9ybURhdGEoKS5kZXNjcmlwdGlvbigpOwotfQotI2VuZGlmCi0KLWNvbnN0
IE9wZW5UeXBlTWF0aERhdGEqIFNpbXBsZUZvbnREYXRhOjptYXRoRGF0YSgpIGNvbnN0Ci17Ci0g
ICAgaWYgKG1faXNMb2FkaW5nKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIW1f
bWF0aERhdGEpIHsKLSAgICAgICAgbV9tYXRoRGF0YSA9IE9wZW5UeXBlTWF0aERhdGE6OmNyZWF0
ZShtX3BsYXRmb3JtRGF0YSk7Ci0gICAgICAgIGlmICghbV9tYXRoRGF0YS0+aGFzTWF0aERhdGEo
KSkKLSAgICAgICAgICAgIG1fbWF0aERhdGEuY2xlYXIoKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1f
bWF0aERhdGEuZ2V0KCk7Ci19Ci0KLVNpbXBsZUZvbnREYXRhOjpEZXJpdmVkRm9udERhdGE6On5E
ZXJpdmVkRm9udERhdGEoKQotewotfQotCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1w
bGVGb250RGF0YTo6Y3JlYXRlU2NhbGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBm
b250RGVzY3JpcHRpb24sIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAotewotICAgIGlmIChpc1NW
R0ZvbnQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gcGxhdGZvcm1D
cmVhdGVTY2FsZWRGb250RGF0YShmb250RGVzY3JpcHRpb24sIHNjYWxlRmFjdG9yKTsKLX0KLQot
Ym9vbCBTaW1wbGVGb250RGF0YTo6YXBwbHlUcmFuc2Zvcm1zKEdseXBoQnVmZmVyR2x5cGgqIGds
eXBocywgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgc2l6ZV90IGdseXBoQ291bnQsIFR5
cGVzZXR0aW5nRmVhdHVyZXMgdHlwZXNldHRpbmdGZWF0dXJlcykgY29uc3QKLXsKLSAgICAvLyBX
ZSBuZWVkIHRvIGhhbmRsZSB0cmFuc2Zvcm1zIG9uIFNWRyBmb250cyBpbnRlcm5hbGx5LCBzaW5j
ZSB0aGV5IGFyZSByZW5kZXJlZCBpbnRlcm5hbGx5LgotICAgIEFTU0VSVCghaXNTVkdGb250KCkp
OwotI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJT
SU9OX01JTl9SRVFVSVJFRCA+IDEwODApCi0gICAgQ1RGb250VHJhbnNmb3JtT3B0aW9ucyBvcHRp
b25zID0gKHR5cGVzZXR0aW5nRmVhdHVyZXMgJiBLZXJuaW5nID8ga0NURm9udFRyYW5zZm9ybUFw
cGx5UG9zaXRpb25pbmcgOiAwKSB8ICh0eXBlc2V0dGluZ0ZlYXR1cmVzICYgTGlnYXR1cmVzID8g
a0NURm9udFRyYW5zZm9ybUFwcGx5U2hhcGluZyA6IDApOwotICAgIHJldHVybiBDVEZvbnRUcmFu
c2Zvcm1HbHlwaHMobV9wbGF0Zm9ybURhdGEuY3RGb250KCksIGdseXBocywgcmVpbnRlcnByZXRf
Y2FzdDxDR1NpemUqPihhZHZhbmNlcyksIGdseXBoQ291bnQsIG9wdGlvbnMpOwotI2Vsc2UKLSAg
ICBVTlVTRURfUEFSQU0oZ2x5cGhzKTsKLSAgICBVTlVTRURfUEFSQU0oYWR2YW5jZXMpOwotICAg
IFVOVVNFRF9QQVJBTShnbHlwaENvdW50KTsKLSAgICBVTlVTRURfUEFSQU0odHlwZXNldHRpbmdG
ZWF0dXJlcyk7Ci0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLS8vIEZvbnREYXRhcyBh
cmUgbm90IHJlZmNvdW50ZWQgdG8gYXZvaWQgY3ljbGVzLgotdHlwZWRlZiBIYXNoTWFwPHN0ZDo6
cGFpcjxVQ2hhcjMyLCB1bnNpZ25lZD4sIFNpbXBsZUZvbnREYXRhKj4gQ2hhcmFjdGVyRmFsbGJh
Y2tNYXA7Ci10eXBlZGVmIEhhc2hNYXA8Y29uc3QgU2ltcGxlRm9udERhdGEqLCBDaGFyYWN0ZXJG
YWxsYmFja01hcD4gU3lzdGVtRmFsbGJhY2tDYWNoZTsKLQotc3RhdGljIFN5c3RlbUZhbGxiYWNr
Q2FjaGUmIHN5c3RlbUZhbGxiYWNrQ2FjaGUoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxTeXN0ZW1GYWxsYmFja0NhY2hlPiBtYXA7Ci0gICAgcmV0dXJuIG1hcC5nZXQoKTsKLX0KLQot
UmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6c3lzdGVtRmFsbGJhY2tGb250
RGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGNoYXJhY3RlciwgY29uc3QgRm9udERlc2NyaXB0aW9u
JiBkZXNjcmlwdGlvbiwgYm9vbCBpc0ZvclBsYXRmb3JtRm9udCkgY29uc3QKLXsKLSAgICBhdXRv
IGZvbnRBZGRSZXN1bHQgPSBzeXN0ZW1GYWxsYmFja0NhY2hlKCkuYWRkKHRoaXMsIENoYXJhY3Rl
ckZhbGxiYWNrTWFwKCkpOwotCi0gICAgYXV0byBrZXkgPSBzdGQ6Om1ha2VfcGFpcihjaGFyYWN0
ZXIsIGlzRm9yUGxhdGZvcm1Gb250KTsKLSAgICBhdXRvIGNoYXJhY3RlckFkZFJlc3VsdCA9IGZv
bnRBZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFkZChrZXksIG51bGxwdHIpOwotCi0gICAgU2lt
cGxlRm9udERhdGEqJiBmYWxsYmFja0ZvbnREYXRhID0gY2hhcmFjdGVyQWRkUmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZTsKLQotICAgIGlmICghZmFsbGJhY2tGb250RGF0YSkgewotICAgICAgICBVQ2hh
ciBjb2RlVW5pdHNbMl07Ci0gICAgICAgIGludCBjb2RlVW5pdHNMZW5ndGg7Ci0gICAgICAgIGlm
IChVX0lTX0JNUChjaGFyYWN0ZXIpKSB7Ci0gICAgICAgICAgICBjb2RlVW5pdHNbMF0gPSBGb250
Q2FzY2FkZTo6bm9ybWFsaXplU3BhY2VzKGNoYXJhY3Rlcik7Ci0gICAgICAgICAgICBjb2RlVW5p
dHNMZW5ndGggPSAxOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29kZVVuaXRzWzBd
ID0gVTE2X0xFQUQoY2hhcmFjdGVyKTsKLSAgICAgICAgICAgIGNvZGVVbml0c1sxXSA9IFUxNl9U
UkFJTChjaGFyYWN0ZXIpOwotICAgICAgICAgICAgY29kZVVuaXRzTGVuZ3RoID0gMjsKLSAgICAg
ICAgfQotCi0gICAgICAgIGZhbGxiYWNrRm9udERhdGEgPSBmb250Q2FjaGUoKS5zeXN0ZW1GYWxs
YmFja0ZvckNoYXJhY3RlcnMoZGVzY3JpcHRpb24sIHRoaXMsIGlzRm9yUGxhdGZvcm1Gb250LCBj
b2RlVW5pdHMsIGNvZGVVbml0c0xlbmd0aCkuZ2V0KCk7Ci0gICAgICAgIGlmIChmYWxsYmFja0Zv
bnREYXRhKQotICAgICAgICAgICAgZmFsbGJhY2tGb250RGF0YS0+bV9pc1VzZWRJblN5c3RlbUZh
bGxiYWNrQ2FjaGUgPSB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxsYmFja0ZvbnREYXRh
OwotfQotCi12b2lkIFNpbXBsZUZvbnREYXRhOjpyZW1vdmVGcm9tU3lzdGVtRmFsbGJhY2tDYWNo
ZSgpCi17Ci0gICAgc3lzdGVtRmFsbGJhY2tDYWNoZSgpLnJlbW92ZSh0aGlzKTsKLQotICAgIGlm
ICghbV9pc1VzZWRJblN5c3RlbUZhbGxiYWNrQ2FjaGUpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGZvciAoYXV0byYgY2hhcmFjdGVyTWFwIDogc3lzdGVtRmFsbGJhY2tDYWNoZSgpLnZhbHVlcygp
KSB7Ci0gICAgICAgIFZlY3RvcjxzdGQ6OnBhaXI8VUNoYXIzMiwgdW5zaWduZWQ+LCA1MTI+IHRv
UmVtb3ZlOwotICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogY2hhcmFjdGVyTWFwKSB7Ci0gICAg
ICAgICAgICBpZiAoZW50cnkudmFsdWUgPT0gdGhpcykKLSAgICAgICAgICAgICAgICB0b1JlbW92
ZS5hcHBlbmQoZW50cnkua2V5KTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKGF1dG8mIGtleSA6
IHRvUmVtb3ZlKQotICAgICAgICAgICAgY2hhcmFjdGVyTWFwLnJlbW92ZShrZXkpOwotICAgIH0K
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCShyZXZpc2lvbiAxNzg4NTcpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDM2OSArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIGludGVybmFsIGZvbnQgaW1wbGVtZW50YXRpb24uCi0gKgotICogQ29weXJpZ2h0IChDKSAy
MDA2LCAyMDA4LCAyMDEwLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAwNy0yMDA4IFRvcmNoIE1vYmlsZSwgSW5jLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBT
aW1wbGVGb250RGF0YV9oCi0jZGVmaW5lIFNpbXBsZUZvbnREYXRhX2gKLQotI2luY2x1ZGUgIkZv
bnRCYXNlbGluZS5oIgotI2luY2x1ZGUgIkZvbnRNZXRyaWNzLmgiCi0jaW5jbHVkZSAiRm9udFBs
YXRmb3JtRGF0YS5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkdseXBoQnVm
ZmVyLmgiCi0jaW5jbHVkZSAiR2x5cGhNZXRyaWNzTWFwLmgiCi0jaW5jbHVkZSAiR2x5cGhQYWdl
LmgiCi0jaW5jbHVkZSAiT3BlblR5cGVNYXRoRGF0YS5oIgotI2lmIEVOQUJMRShPUEVOVFlQRV9W
RVJUSUNBTCkKLSNpbmNsdWRlICJPcGVuVHlwZVZlcnRpY2FsRGF0YS5oIgotI2VuZGlmCi0jaW5j
bHVkZSAiVHlwZXNldHRpbmdGZWF0dXJlcy5oIgotI2luY2x1ZGUgPHd0Zi9UeXBlQ2FzdHMuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0KLSNpZiBQTEFURk9STShDT0NPQSkK
LSNpbmNsdWRlICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCi0jaW5jbHVkZSA8d3RmL1JldGFp
blB0ci5oPgotI2VuZGlmCi0KLSNpZiBQTEFURk9STShXSU4pCi0jaW5jbHVkZSA8dXNwMTAuaD4K
LSNlbmRpZgotCi0jaWYgVVNFKENBSVJPKQotI2luY2x1ZGUgPGNhaXJvLmg+Ci0jZW5kaWYKLQot
I2lmIFVTRShDRykKLSNpbmNsdWRlIDxXZWJDb3JlL0NvcmVHcmFwaGljc1NQSS5oPgotI2VuZGlm
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgR2x5cGhQYWdlOwotY2xhc3MgRm9udERl
c2NyaXB0aW9uOwotY2xhc3MgU2hhcmVkQnVmZmVyOwotc3RydWN0IEdseXBoRGF0YTsKLXN0cnVj
dCBXaWR0aEl0ZXJhdG9yOwotCi1lbnVtIEZvbnREYXRhVmFyaWFudCB7IEF1dG9WYXJpYW50LCBO
b3JtYWxWYXJpYW50LCBTbWFsbENhcHNWYXJpYW50LCBFbXBoYXNpc01hcmtWYXJpYW50LCBCcm9r
ZW5JZGVvZ3JhcGhWYXJpYW50IH07Ci1lbnVtIFBpdGNoIHsgVW5rbm93blBpdGNoLCBGaXhlZFBp
dGNoLCBWYXJpYWJsZVBpdGNoIH07Ci0KLWNsYXNzIFNpbXBsZUZvbnREYXRhIDogcHVibGljIFJl
ZkNvdW50ZWQ8U2ltcGxlRm9udERhdGE+IHsKLXB1YmxpYzoKLSAgICBjbGFzcyBTVkdEYXRhIHsK
LSAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgcHVibGljOgotICAgICAgICB2
aXJ0dWFsIH5TVkdEYXRhKCkgeyB9Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVG
b250RGF0YShTaW1wbGVGb250RGF0YSosIGZsb2F0IGZvbnRTaXplKSA9IDA7Ci0gICAgICAgIHZp
cnR1YWwgZmxvYXQgd2lkdGhGb3JTVkdHbHlwaChHbHlwaCwgZmxvYXQgZm9udFNpemUpIGNvbnN0
ID0gMDsKLSAgICAgICAgdmlydHVhbCBib29sIGZpbGxTVkdHbHlwaFBhZ2UoR2x5cGhQYWdlKiwg
dW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIsIHVuc2lnbmVk
IGJ1ZmZlckxlbmd0aCwgY29uc3QgU2ltcGxlRm9udERhdGEqKSBjb25zdCA9IDA7Ci0gICAgfTsK
LQotICAgIC8vIFVzZWQgdG8gY3JlYXRlIHBsYXRmb3JtIGZvbnRzLgotICAgIHN0YXRpYyBSZWY8
U2ltcGxlRm9udERhdGE+IGNyZWF0ZShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURh
dGEsIGJvb2wgaXNDdXN0b21Gb250ID0gZmFsc2UsIGJvb2wgaXNMb2FkaW5nID0gZmFsc2UsIGJv
b2wgaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjayA9IGZhbHNlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgU2ltcGxlRm9udERhdGEocGxhdGZvcm1EYXRhLCBpc0N1c3RvbUZv
bnQsIGlzTG9hZGluZywgaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaykpOwotICAgIH0KLQotICAg
IC8vIFVzZWQgdG8gY3JlYXRlIFNWRyBGb250cy4KLSAgICBzdGF0aWMgUmVmPFNpbXBsZUZvbnRE
YXRhPiBjcmVhdGUoc3RkOjp1bmlxdWVfcHRyPFNWR0RhdGE+IHN2Z0RhdGEsIGZsb2F0IGZvbnRT
aXplLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2ltcGxlRm9udERhdGEoV1RGOjptb3ZlKHN2Z0Rh
dGEpLCBmb250U2l6ZSwgc3ludGhldGljQm9sZCwgc3ludGhldGljSXRhbGljKSk7Ci0gICAgfQot
Ci0gICAgflNpbXBsZUZvbnREYXRhKCk7Ci0KLSAgICBzdGF0aWMgY29uc3QgU2ltcGxlRm9udERh
dGEqIHN5c3RlbUZhbGxiYWNrKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBTaW1w
bGVGb250RGF0YSo+KC0xKTsgfQotCi0gICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZv
cm1EYXRhKCkgY29uc3QgeyByZXR1cm4gbV9wbGF0Zm9ybURhdGE7IH0KLSAgICBjb25zdCBPcGVu
VHlwZU1hdGhEYXRhKiBtYXRoRGF0YSgpIGNvbnN0OwotI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJU
SUNBTCkKLSAgICBjb25zdCBPcGVuVHlwZVZlcnRpY2FsRGF0YSogdmVydGljYWxEYXRhKCkgY29u
c3QgeyByZXR1cm4gbV92ZXJ0aWNhbERhdGEuZ2V0KCk7IH0KLSNlbmRpZgotCi0gICAgUGFzc1Jl
ZlB0cjxTaW1wbGVGb250RGF0YT4gc21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0
aW9uJikgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gZW1waGFzaXNNYXJr
Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJikgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxT
aW1wbGVGb250RGF0YT4gYnJva2VuSWRlb2dyYXBoRm9udERhdGEoKSBjb25zdDsKLSAgICBQYXNz
UmVmUHRyPFNpbXBsZUZvbnREYXRhPiBub25TeW50aGV0aWNJdGFsaWNGb250RGF0YSgpIGNvbnN0
OwotCi0gICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gdmFyaWFudEZvbnREYXRhKGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIEZvbnREYXRhVmFyaWFudCB2YXJpYW50KSBj
b25zdAotICAgIHsKLSAgICAgICAgc3dpdGNoICh2YXJpYW50KSB7Ci0gICAgICAgIGNhc2UgU21h
bGxDYXBzVmFyaWFudDoKLSAgICAgICAgICAgIHJldHVybiBzbWFsbENhcHNGb250RGF0YShkZXNj
cmlwdGlvbik7Ci0gICAgICAgIGNhc2UgRW1waGFzaXNNYXJrVmFyaWFudDoKLSAgICAgICAgICAg
IHJldHVybiBlbXBoYXNpc01hcmtGb250RGF0YShkZXNjcmlwdGlvbik7Ci0gICAgICAgIGNhc2Ug
QnJva2VuSWRlb2dyYXBoVmFyaWFudDoKLSAgICAgICAgICAgIHJldHVybiBicm9rZW5JZGVvZ3Jh
cGhGb250RGF0YSgpOwotICAgICAgICBjYXNlIEF1dG9WYXJpYW50OgotICAgICAgICBjYXNlIE5v
cm1hbFZhcmlhbnQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8U2ltcGxlRm9udERh
dGEqPih0aGlzKTsKLSAgICB9Ci0KLSAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiB2ZXJ0
aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250RGF0YSgpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8U2lt
cGxlRm9udERhdGE+IHVwcmlnaHRPcmllbnRhdGlvbkZvbnREYXRhKCkgY29uc3Q7Ci0KLSAgICBi
b29sIGhhc1ZlcnRpY2FsR2x5cGhzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNWZXJ0aWNhbEdseXBo
czsgfQotICAgIGJvb2wgaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaygpIGNvbnN0IHsgcmV0dXJu
IG1faXNUZXh0T3JpZW50YXRpb25GYWxsYmFjazsgfQotCi0gICAgRm9udE1ldHJpY3MmIGZvbnRN
ZXRyaWNzKCkgeyByZXR1cm4gbV9mb250TWV0cmljczsgfQotICAgIGNvbnN0IEZvbnRNZXRyaWNz
JiBmb250TWV0cmljcygpIGNvbnN0IHsgcmV0dXJuIG1fZm9udE1ldHJpY3M7IH0KLSAgICBmbG9h
dCBzaXplUGVyVW5pdCgpIGNvbnN0IHsgcmV0dXJuIHBsYXRmb3JtRGF0YSgpLnNpemUoKSAvIChm
b250TWV0cmljcygpLnVuaXRzUGVyRW0oKSA/IGZvbnRNZXRyaWNzKCkudW5pdHNQZXJFbSgpIDog
MSk7IH0KLQotICAgIGZsb2F0IG1heENoYXJXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4Q2hh
cldpZHRoOyB9Ci0gICAgdm9pZCBzZXRNYXhDaGFyV2lkdGgoZmxvYXQgbWF4Q2hhcldpZHRoKSB7
IG1fbWF4Q2hhcldpZHRoID0gbWF4Q2hhcldpZHRoOyB9Ci0KLSAgICBmbG9hdCBhdmdDaGFyV2lk
dGgoKSBjb25zdCB7IHJldHVybiBtX2F2Z0NoYXJXaWR0aDsgfQotICAgIHZvaWQgc2V0QXZnQ2hh
cldpZHRoKGZsb2F0IGF2Z0NoYXJXaWR0aCkgeyBtX2F2Z0NoYXJXaWR0aCA9IGF2Z0NoYXJXaWR0
aDsgfQotCi0gICAgRmxvYXRSZWN0IGJvdW5kc0ZvckdseXBoKEdseXBoKSBjb25zdDsKLSAgICBm
bG9hdCB3aWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdDsKLSAgICBGbG9hdFJlY3QgcGxh
dGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCkgY29uc3Q7Ci0gICAgZmxvYXQgcGxhdGZvcm1XaWR0
aEZvckdseXBoKEdseXBoKSBjb25zdDsKLQotICAgIGZsb2F0IHNwYWNlV2lkdGgoKSBjb25zdCB7
IHJldHVybiBtX3NwYWNlV2lkdGg7IH0KLSAgICBmbG9hdCBhZGp1c3RlZFNwYWNlV2lkdGgoKSBj
b25zdCB7IHJldHVybiBtX2FkanVzdGVkU3BhY2VXaWR0aDsgfQotICAgIHZvaWQgc2V0U3BhY2VX
aWR0aHMoZmxvYXQgc3BhY2VXaWR0aCkKLSAgICB7Ci0gICAgICAgIG1fc3BhY2VXaWR0aCA9IHNw
YWNlV2lkdGg7Ci0gICAgICAgIG1fYWRqdXN0ZWRTcGFjZVdpZHRoID0gc3BhY2VXaWR0aDsKLSAg
ICB9Ci0KLSNpZiBVU0UoQ0cpIHx8IFVTRShDQUlSTykKLSAgICBmbG9hdCBzeW50aGV0aWNCb2xk
T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9zeW50aGV0aWNCb2xkT2Zmc2V0OyB9Ci0jZW5kaWYK
LQotICAgIEdseXBoIHNwYWNlR2x5cGgoKSBjb25zdCB7IHJldHVybiBtX3NwYWNlR2x5cGg7IH0K
LSAgICB2b2lkIHNldFNwYWNlR2x5cGgoR2x5cGggc3BhY2VHbHlwaCkgeyBtX3NwYWNlR2x5cGgg
PSBzcGFjZUdseXBoOyB9Ci0gICAgR2x5cGggemVyb1dpZHRoU3BhY2VHbHlwaCgpIGNvbnN0IHsg
cmV0dXJuIG1femVyb1dpZHRoU3BhY2VHbHlwaDsgfQotICAgIHZvaWQgc2V0WmVyb1dpZHRoU3Bh
Y2VHbHlwaChHbHlwaCBzcGFjZUdseXBoKSB7IG1femVyb1dpZHRoU3BhY2VHbHlwaCA9IHNwYWNl
R2x5cGg7IH0KLSAgICBib29sIGlzWmVyb1dpZHRoU3BhY2VHbHlwaChHbHlwaCBnbHlwaCkgY29u
c3QgeyByZXR1cm4gZ2x5cGggPT0gbV96ZXJvV2lkdGhTcGFjZUdseXBoICYmIGdseXBoOyB9Ci0g
ICAgR2x5cGggemVyb0dseXBoKCkgY29uc3QgeyByZXR1cm4gbV96ZXJvR2x5cGg7IH0KLSAgICB2
b2lkIHNldFplcm9HbHlwaChHbHlwaCB6ZXJvR2x5cGgpIHsgbV96ZXJvR2x5cGggPSB6ZXJvR2x5
cGg7IH0KLQotICAgIEdseXBoRGF0YSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMikgY29u
c3Q7Ci0gICAgR2x5cGggZ2x5cGhGb3JDaGFyYWN0ZXIoVUNoYXIzMikgY29uc3Q7Ci0KLSAgICBS
ZWZQdHI8U2ltcGxlRm9udERhdGE+IHN5c3RlbUZhbGxiYWNrRm9udERhdGFGb3JDaGFyYWN0ZXIo
VUNoYXIzMiwgY29uc3QgRm9udERlc2NyaXB0aW9uJiwgYm9vbCBpc0ZvclBsYXRmb3JtRm9udCkg
Y29uc3Q7Ci0KLSAgICBjb25zdCBHbHlwaFBhZ2UqIGdseXBoUGFnZSh1bnNpZ25lZCBwYWdlTnVt
YmVyKSBjb25zdDsKLQotICAgIHZvaWQgZGV0ZXJtaW5lUGl0Y2goKTsKLSAgICBQaXRjaCBwaXRj
aCgpIGNvbnN0IHsgcmV0dXJuIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPyBGaXhlZFBpdGNoIDogVmFy
aWFibGVQaXRjaDsgfQotCi0gICAgY29uc3QgU1ZHRGF0YSogc3ZnRGF0YSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3ZnRGF0YS5nZXQoKTsgfQotICAgIGJvb2wgaXNTVkdGb250KCkgY29uc3QgeyByZXR1
cm4gISFtX3N2Z0RhdGE7IH0KLQotICAgIGJvb2wgaXNDdXN0b21Gb250KCkgY29uc3QgeyByZXR1
cm4gbV9pc0N1c3RvbUZvbnQ7IH0KLSAgICBib29sIGlzTG9hZGluZygpIGNvbnN0IHsgcmV0dXJu
IG1faXNMb2FkaW5nOyB9Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgU3RyaW5nIGRlc2NyaXB0aW9u
KCkgY29uc3Q7Ci0jZW5kaWYKLQotI2lmIFVTRShBUFBLSVQpCi0gICAgY29uc3QgU2ltcGxlRm9u
dERhdGEqIGNvbXBvc2l0ZUZvbnRSZWZlcmVuY2VGb250RGF0YShOU0ZvbnQgKmtleSkgY29uc3Q7
Ci0gICAgTlNGb250KiBnZXROU0ZvbnQoKSBjb25zdCB7IHJldHVybiBtX3BsYXRmb3JtRGF0YS5u
c0ZvbnQoKTsgfQotI2VuZGlmCi0KLSNpZiBQTEFURk9STShJT1MpCi0gICAgQ1RGb250UmVmIGdl
dENURm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fcGxhdGZvcm1EYXRhLmZvbnQoKTsgfQotICAgIGJv
b2wgc2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGROb3RC
ZVVzZWRGb3JBcmFiaWM7IH07Ci0jZW5kaWYKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBDRkRp
Y3Rpb25hcnlSZWYgZ2V0Q0ZTdHJpbmdBdHRyaWJ1dGVzKFR5cGVzZXR0aW5nRmVhdHVyZXMsIEZv
bnRPcmllbnRhdGlvbikgY29uc3Q7Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBV
U0UoSEFSRkJVWlopCi0gICAgYm9vbCBjYW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5j
ZShjb25zdCBVQ2hhciosIHNpemVfdCkgY29uc3Q7Ci0jZW5kaWYKLQotICAgIGJvb2wgYXBwbHlU
cmFuc2Zvcm1zKEdseXBoQnVmZmVyR2x5cGgqLCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCBzaXplX3Qg
Z2x5cGhDb3VudCwgVHlwZXNldHRpbmdGZWF0dXJlcykgY29uc3Q7Ci0KLSNpZiBQTEFURk9STShX
SU4pCi0gICAgYm9vbCBpc1N5c3RlbUZvbnQoKSBjb25zdCB7IHJldHVybiBtX2lzU3lzdGVtRm9u
dDsgfQotICAgIFNDUklQVF9GT05UUFJPUEVSVElFUyogc2NyaXB0Rm9udFByb3BlcnRpZXMoKSBj
b25zdDsKLSAgICBTQ1JJUFRfQ0FDSEUqIHNjcmlwdENhY2hlKCkgY29uc3QgeyByZXR1cm4gJm1f
c2NyaXB0Q2FjaGU7IH0KLSAgICBzdGF0aWMgdm9pZCBzZXRTaG91bGRBcHBseU1hY0FzY2VudEhh
Y2soYm9vbCk7Ci0gICAgc3RhdGljIGJvb2wgc2hvdWxkQXBwbHlNYWNBc2NlbnRIYWNrKCk7Ci0g
ICAgc3RhdGljIGZsb2F0IGFzY2VudENvbnNpZGVyaW5nTWFjQXNjZW50SGFjayhjb25zdCBXQ0hB
UiosIGZsb2F0IGFzY2VudCwgZmxvYXQgZGVzY2VudCk7Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAg
ICBTaW1wbGVGb250RGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiwgYm9vbCBpc0N1c3RvbUZv
bnQgPSBmYWxzZSwgYm9vbCBpc0xvYWRpbmcgPSBmYWxzZSwgYm9vbCBpc1RleHRPcmllbnRhdGlv
bkZhbGxiYWNrID0gZmFsc2UpOwotCi0gICAgU2ltcGxlRm9udERhdGEoc3RkOjp1bmlxdWVfcHRy
PFNWR0RhdGE+LCBmbG9hdCBmb250U2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRo
ZXRpY0l0YWxpYyk7Ci0KLSAgICB2b2lkIHBsYXRmb3JtSW5pdCgpOwotICAgIHZvaWQgcGxhdGZv
cm1HbHlwaEluaXQoKTsKLSAgICB2b2lkIHBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpOwotICAgIHZv
aWQgcGxhdGZvcm1EZXN0cm95KCk7Ci0KLSAgICB2b2lkIGluaXRDaGFyV2lkdGhzKCk7Ci0KLSAg
ICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBjcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBG
b250RGVzY3JpcHRpb24mLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3Q7Ci0gICAgUGFzc1JlZlB0
cjxTaW1wbGVGb250RGF0YT4gcGxhdGZvcm1DcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGb250
RGVzY3JpcHRpb24mLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3Q7Ci0KLSAgICB2b2lkIHJlbW92
ZUZyb21TeXN0ZW1GYWxsYmFja0NhY2hlKCk7Ci0KLSNpZiBQTEFURk9STShXSU4pCi0gICAgdm9p
ZCBpbml0R0RJRm9udCgpOwotICAgIHZvaWQgcGxhdGZvcm1Db21tb25EZXN0cm95KCk7Ci0gICAg
RmxvYXRSZWN0IGJvdW5kc0ZvckdESUdseXBoKEdseXBoIGdseXBoKSBjb25zdDsKLSAgICBmbG9h
dCB3aWR0aEZvckdESUdseXBoKEdseXBoIGdseXBoKSBjb25zdDsKLSNlbmRpZgotCi0jaWYgVVNF
KENHKQotICAgIGJvb2wgY2FuVXNlRmFzdEdseXBoQWR2YW5jZUdldHRlcihHbHlwaCBnbHlwaCwg
Q0dTaXplJiBhZHZhbmNlLCBib29sJiBwb3B1bGF0ZWRBZHZhbmNlKSBjb25zdDsKLSAgICBDR0Zv
bnRSZW5kZXJpbmdTdHlsZSByZW5kZXJpbmdTdHlsZSgpIGNvbnN0OwotICAgIGJvb2wgYWR2YW5j
ZUZvckNvbG9yQml0bWFwRm9udChHbHlwaCwgQ0dTaXplJiByZXN1bHQpIGNvbnN0OyAvLyBSZXR1
cm5zIHRydWUgaWYgdGhlIGZvbnQgaXMgYSBjb2xvciBiaXRtYXAgZm9udAotI2VuZGlmCi0KLSAg
ICBGb250TWV0cmljcyBtX2ZvbnRNZXRyaWNzOwotICAgIGZsb2F0IG1fbWF4Q2hhcldpZHRoOwot
ICAgIGZsb2F0IG1fYXZnQ2hhcldpZHRoOwotCi0gICAgRm9udFBsYXRmb3JtRGF0YSBtX3BsYXRm
b3JtRGF0YTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U1ZHRGF0YT4gbV9zdmdEYXRhOwotCi0gICAg
bXV0YWJsZSBSZWZQdHI8R2x5cGhQYWdlPiBtX2dseXBoUGFnZVplcm87Ci0gICAgbXV0YWJsZSBI
YXNoTWFwPHVuc2lnbmVkLCBSZWZQdHI8R2x5cGhQYWdlPj4gbV9nbHlwaFBhZ2VzOwotICAgIG11
dGFibGUgc3RkOjp1bmlxdWVfcHRyPEdseXBoTWV0cmljc01hcDxGbG9hdFJlY3Q+PiBtX2dseXBo
VG9Cb3VuZHNNYXA7Ci0gICAgbXV0YWJsZSBHbHlwaE1ldHJpY3NNYXA8ZmxvYXQ+IG1fZ2x5cGhU
b1dpZHRoTWFwOwotCi0gICAgYm9vbCBtX3RyZWF0QXNGaXhlZFBpdGNoOwotICAgIGJvb2wgbV9p
c0N1c3RvbUZvbnQ7ICAvLyBXaGV0aGVyIG9yIG5vdCB3ZSBhcmUgY3VzdG9tIGZvbnQgbG9hZGVk
IHZpYSBAZm9udC1mYWNlCi0gICAgYm9vbCBtX2lzTG9hZGluZzsgLy8gV2hldGhlciBvciBub3Qg
dGhpcyBjdXN0b20gZm9udCBpcyBzdGlsbCBpbiB0aGUgYWN0IG9mIGxvYWRpbmcuCi0KLSAgICBi
b29sIG1faXNUZXh0T3JpZW50YXRpb25GYWxsYmFjazsKLSAgICBib29sIG1faXNCcm9rZW5JZGVv
Z3JhcGhGYWxsYmFjazsKLQotICAgIGJvb2wgbV9pc1VzZWRJblN5c3RlbUZhbGxiYWNrQ2FjaGUg
eyBmYWxzZSB9OwotCi0gICAgbXV0YWJsZSBSZWZQdHI8T3BlblR5cGVNYXRoRGF0YT4gbV9tYXRo
RGF0YTsKLSNpZiBFTkFCTEUoT1BFTlRZUEVfVkVSVElDQUwpCi0gICAgUmVmUHRyPE9wZW5UeXBl
VmVydGljYWxEYXRhPiBtX3ZlcnRpY2FsRGF0YTsKLSNlbmRpZgotICAgIGJvb2wgbV9oYXNWZXJ0
aWNhbEdseXBoczsKLQotICAgIEdseXBoIG1fc3BhY2VHbHlwaDsKLSAgICBmbG9hdCBtX3NwYWNl
V2lkdGg7Ci0gICAgR2x5cGggbV96ZXJvR2x5cGg7Ci0gICAgZmxvYXQgbV9hZGp1c3RlZFNwYWNl
V2lkdGg7Ci0KLSAgICBHbHlwaCBtX3plcm9XaWR0aFNwYWNlR2x5cGg7Ci0KLSAgICBzdHJ1Y3Qg
RGVyaXZlZEZvbnREYXRhIHsKLSAgICAgICAgZXhwbGljaXQgRGVyaXZlZEZvbnREYXRhKGJvb2wg
Y3VzdG9tKQotICAgICAgICAgICAgOiBmb3JDdXN0b21Gb250KGN1c3RvbSkKLSAgICAgICAgewot
ICAgICAgICB9Ci0gICAgICAgIH5EZXJpdmVkRm9udERhdGEoKTsKLQotICAgICAgICBib29sIGZv
ckN1c3RvbUZvbnQ7Ci0gICAgICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gc21hbGxDYXBzOwot
ICAgICAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IGVtcGhhc2lzTWFyazsKLSAgICAgICAgUmVm
UHRyPFNpbXBsZUZvbnREYXRhPiBicm9rZW5JZGVvZ3JhcGg7Ci0gICAgICAgIFJlZlB0cjxTaW1w
bGVGb250RGF0YT4gdmVydGljYWxSaWdodE9yaWVudGF0aW9uOwotICAgICAgICBSZWZQdHI8U2lt
cGxlRm9udERhdGE+IHVwcmlnaHRPcmllbnRhdGlvbjsKLSAgICAgICAgUmVmUHRyPFNpbXBsZUZv
bnREYXRhPiBub25TeW50aGV0aWNJdGFsaWM7Ci0jaWYgVVNFKEFQUEtJVCkKLSAgICAgICAgSGFz
aE1hcDxOU0ZvbnQqLCBSZWZQdHI8U2ltcGxlRm9udERhdGE+PiBjb21wb3NpdGVGb250UmVmZXJl
bmNlczsKLSNlbmRpZgotICAgIH07Ci0KLSAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxEZXJp
dmVkRm9udERhdGE+IG1fZGVyaXZlZEZvbnREYXRhOwotCi0jaWYgVVNFKENHKSB8fCBVU0UoQ0FJ
Uk8pCi0gICAgZmxvYXQgbV9zeW50aGV0aWNCb2xkT2Zmc2V0OwotI2VuZGlmCi0KLSNpZiBQTEFU
Rk9STShDT0NPQSkKLSAgICBtdXRhYmxlIEhhc2hNYXA8dW5zaWduZWQsIFJldGFpblB0cjxDRkRp
Y3Rpb25hcnlSZWY+PiBtX0NGU3RyaW5nQXR0cmlidXRlczsKLSNlbmRpZgotCi0jaWYgUExBVEZP
Uk0oQ09DT0EpIHx8IFVTRShIQVJGQlVaWikKLSAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxI
YXNoTWFwPFN0cmluZywgYm9vbD4+IG1fY29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2VTdXBwb3J0
OwotI2VuZGlmCi0KLSNpZiBQTEFURk9STShXSU4pCi0gICAgYm9vbCBtX2lzU3lzdGVtRm9udDsK
LSAgICBtdXRhYmxlIFNDUklQVF9DQUNIRSBtX3NjcmlwdENhY2hlOwotICAgIG11dGFibGUgU0NS
SVBUX0ZPTlRQUk9QRVJUSUVTKiBtX3NjcmlwdEZvbnRQcm9wZXJ0aWVzOwotI2VuZGlmCi0jaWYg
UExBVEZPUk0oSU9TKQotICAgIGJvb2wgbV9zaG91bGROb3RCZVVzZWRGb3JBcmFiaWM7Ci0jZW5k
aWYKLX07Ci0KLUFMV0FZU19JTkxJTkUgRmxvYXRSZWN0IFNpbXBsZUZvbnREYXRhOjpib3VuZHNG
b3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKLXsKLSAgICBpZiAoaXNaZXJvV2lkdGhTcGFjZUds
eXBoKGdseXBoKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwotCi0gICAgRmxvYXRSZWN0
IGJvdW5kczsKLSAgICBpZiAobV9nbHlwaFRvQm91bmRzTWFwKSB7Ci0gICAgICAgIGJvdW5kcyA9
IG1fZ2x5cGhUb0JvdW5kc01hcC0+bWV0cmljc0ZvckdseXBoKGdseXBoKTsKLSAgICAgICAgaWYg
KGJvdW5kcy53aWR0aCgpICE9IGNHbHlwaFNpemVVbmtub3duKQotICAgICAgICAgICAgcmV0dXJu
IGJvdW5kczsKLSAgICB9Ci0KLSAgICBib3VuZHMgPSBwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKGds
eXBoKTsKLSAgICBpZiAoIW1fZ2x5cGhUb0JvdW5kc01hcCkKLSAgICAgICAgbV9nbHlwaFRvQm91
bmRzTWFwID0gc3RkOjptYWtlX3VuaXF1ZTxHbHlwaE1ldHJpY3NNYXA8RmxvYXRSZWN0Pj4oKTsK
LSAgICBtX2dseXBoVG9Cb3VuZHNNYXAtPnNldE1ldHJpY3NGb3JHbHlwaChnbHlwaCwgYm91bmRz
KTsKLSAgICByZXR1cm4gYm91bmRzOwotfQotCi1BTFdBWVNfSU5MSU5FIGZsb2F0IFNpbXBsZUZv
bnREYXRhOjp3aWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAotewotICAgIGlmIChpc1pl
cm9XaWR0aFNwYWNlR2x5cGgoZ2x5cGgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGZsb2F0
IHdpZHRoID0gbV9nbHlwaFRvV2lkdGhNYXAubWV0cmljc0ZvckdseXBoKGdseXBoKTsKLSAgICBp
ZiAod2lkdGggIT0gY0dseXBoU2l6ZVVua25vd24pCi0gICAgICAgIHJldHVybiB3aWR0aDsKLQot
ICAgIGlmIChpc1NWR0ZvbnQoKSkKLSAgICAgICAgd2lkdGggPSBtX3N2Z0RhdGEtPndpZHRoRm9y
U1ZHR2x5cGgoZ2x5cGgsIG1fcGxhdGZvcm1EYXRhLnNpemUoKSk7Ci0jaWYgRU5BQkxFKE9QRU5U
WVBFX1ZFUlRJQ0FMKQotICAgIGVsc2UgaWYgKG1fdmVydGljYWxEYXRhKQotI2lmIFVTRShDRykg
fHwgVVNFKENBSVJPKQotICAgICAgICB3aWR0aCA9IG1fdmVydGljYWxEYXRhLT5hZHZhbmNlSGVp
Z2h0KHRoaXMsIGdseXBoKSArIG1fc3ludGhldGljQm9sZE9mZnNldDsKLSNlbHNlCi0gICAgICAg
IHdpZHRoID0gbV92ZXJ0aWNhbERhdGEtPmFkdmFuY2VIZWlnaHQodGhpcywgZ2x5cGgpOwotI2Vu
ZGlmCi0jZW5kaWYKLSAgICBlbHNlCi0gICAgICAgIHdpZHRoID0gcGxhdGZvcm1XaWR0aEZvckds
eXBoKGdseXBoKTsKLQotICAgIG1fZ2x5cGhUb1dpZHRoTWFwLnNldE1ldHJpY3NGb3JHbHlwaChn
bHlwaCwgd2lkdGgpOwotICAgIHJldHVybiB3aWR0aDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gU2ltcGxlRm9udERhdGFfaApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uaAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Niw3ICszNiw3IEBAIGNsYXNzIEZvbnRDYXNjYWRlOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0Owog
Y2xhc3MgR2x5cGhCdWZmZXI7CiBjbGFzcyBHbHlwaFRvUGF0aFRyYW5zbGF0b3I7Ci1jbGFzcyBT
aW1wbGVGb250RGF0YTsKK2NsYXNzIEZvbnQ7CiAKIHN0cnVjdCBHbHlwaERhdGE7CiBzdHJ1Y3Qg
V2lkdGhJdGVyYXRvcjsKQEAgLTE5OCwxMCArMTk4LDEwIEBAIHB1YmxpYzoKIAogI2lmIEVOQUJM
RShTVkdfRk9OVFMpCiAgICAgICAgIHZpcnR1YWwgR2x5cGhEYXRhIGdseXBoRGF0YUZvckNoYXJh
Y3Rlcihjb25zdCBGb250Q2FzY2FkZSYsIFdpZHRoSXRlcmF0b3ImLCBVQ2hhcjMyIGNoYXJhY3Rl
ciwgYm9vbCBtaXJyb3IsIGludCBjdXJyZW50Q2hhcmFjdGVyLCB1bnNpZ25lZCYgYWR2YW5jZUxl
bmd0aCwgU3RyaW5nJiBub3JtYWxpemVkU3BhY2VzU3RyaW5nQ2FjaGUpID0gMDsKLSAgICAgICAg
dmlydHVhbCB2b2lkIGRyYXdTVkdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgU2ltcGxl
Rm9udERhdGEqLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBmcm9tLCBpbnQgdG8sIGNvbnN0IEZs
b2F0UG9pbnQmKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkcmF3U1ZHR2x5cGhz
KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZvbnQqLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBm
cm9tLCBpbnQgdG8sIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1
YWwgZmxvYXQgZmxvYXRXaWR0aFVzaW5nU1ZHRm9udChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0
IFRleHRSdW4mLCBpbnQmIGNoYXJzQ29uc3VtZWQsIFN0cmluZyYgZ2x5cGhOYW1lKSBjb25zdCA9
IDA7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBhcHBseVNWR0tlcm5pbmcoY29uc3QgU2ltcGxlRm9u
dERhdGEqLCBXaWR0aEl0ZXJhdG9yJiwgR2x5cGhCdWZmZXIqLCBpbnQgZnJvbSkgY29uc3QgPSAw
OwotICAgICAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxHbHlwaFRvUGF0aFRyYW5zbGF0b3I+
IGNyZWF0ZUdseXBoVG9QYXRoVHJhbnNsYXRvcihjb25zdCBTaW1wbGVGb250RGF0YSYsIGNvbnN0
IFRleHRSdW4qLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBj
b25zdCBGbG9hdFBvaW50JikgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlT
VkdLZXJuaW5nKGNvbnN0IEZvbnQqLCBXaWR0aEl0ZXJhdG9yJiwgR2x5cGhCdWZmZXIqLCBpbnQg
ZnJvbSkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxHbHlwaFRv
UGF0aFRyYW5zbGF0b3I+IGNyZWF0ZUdseXBoVG9QYXRoVHJhbnNsYXRvcihjb25zdCBGb250Jiwg
Y29uc3QgVGV4dFJ1biosIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCBudW1HbHlw
aHMsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdCA9IDA7CiAjZW5kaWYKICAgICB9OwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9y
LmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvV2lkdGhJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDEwICsyMiwxMCBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldpZHRoSXRlcmF0b3IuaCIKIAorI2luY2x1
ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkdseXBoQnVm
ZmVyLmgiCiAjaW5jbHVkZSAiTGF0aW4xVGV4dEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiU2ltcGxl
Rm9udERhdGEuaCIKICNpbmNsdWRlICJTdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IuaCIK
ICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCkBAIC0zNCw3ICszNCw3IEBAIHVzaW5nIG5h
bWVzcGFjZSBVbmljb2RlOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVdpZHRoSXRlcmF0b3I6
OldpZHRoSXRlcmF0b3IoY29uc3QgRm9udENhc2NhZGUqIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1
biwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBib29sIGFj
Y291bnRGb3JHbHlwaEJvdW5kcywgYm9vbCBmb3JUZXh0RW1waGFzaXMpCitXaWR0aEl0ZXJhdG9y
OjpXaWR0aEl0ZXJhdG9yKGNvbnN0IEZvbnRDYXNjYWRlKiBmb250LCBjb25zdCBUZXh0UnVuJiBy
dW4sIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzLCBib29sIGFjY291bnRGb3JH
bHlwaEJvdW5kcywgYm9vbCBmb3JUZXh0RW1waGFzaXMpCiAgICAgOiBtX2ZvbnQoZm9udCkKICAg
ICAsIG1fcnVuKHJ1bikKICAgICAsIG1fY3VycmVudENoYXJhY3RlcigwKQpAQCAtMTAwLDcgKzEw
MCw3IEBAIHB1YmxpYzoKIAogdHlwZWRlZiBWZWN0b3I8c3RkOjpwYWlyPGludCwgT3JpZ2luYWxB
ZHZhbmNlc0ZvckNoYXJhY3RlclRyZWF0ZWRBc1NwYWNlPiwgNjQ+IENoYXJhY3RlcnNUcmVhdGVk
QXNTcGFjZTsKIAotc3RhdGljIGlubGluZSBmbG9hdCBhcHBseUZvbnRUcmFuc2Zvcm1zKEdseXBo
QnVmZmVyKiBnbHlwaEJ1ZmZlciwgYm9vbCBsdHIsIGludCYgbGFzdEdseXBoQ291bnQsIGNvbnN0
IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwgV2lkdGhJdGVyYXRvciYgaXRlcmF0b3IsIFR5cGVz
ZXR0aW5nRmVhdHVyZXMgdHlwZXNldHRpbmdGZWF0dXJlcywgQ2hhcmFjdGVyc1RyZWF0ZWRBc1Nw
YWNlJiBjaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UpCitzdGF0aWMgaW5saW5lIGZsb2F0IGFwcGx5
Rm9udFRyYW5zZm9ybXMoR2x5cGhCdWZmZXIqIGdseXBoQnVmZmVyLCBib29sIGx0ciwgaW50JiBs
YXN0R2x5cGhDb3VudCwgY29uc3QgRm9udCogZm9udCwgV2lkdGhJdGVyYXRvciYgaXRlcmF0b3Is
IFR5cGVzZXR0aW5nRmVhdHVyZXMgdHlwZXNldHRpbmdGZWF0dXJlcywgQ2hhcmFjdGVyc1RyZWF0
ZWRBc1NwYWNlJiBjaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UpCiB7CiAgICAgQVNTRVJUKHR5cGVz
ZXR0aW5nRmVhdHVyZXMgJiAoS2VybmluZyB8IExpZ2F0dXJlcykpOwogCkBAIC0xMjMsMTYgKzEy
MywxNiBAQCBzdGF0aWMgaW5saW5lIGZsb2F0IGFwcGx5Rm9udFRyYW5zZm9ybXMoCiAgICAgVU5V
U0VEX1BBUkFNKGl0ZXJhdG9yKTsKICNlbHNlCiAgICAgLy8gV2UgbmVlZCB0byBoYW5kbGUgdHJh
bnNmb3JtcyBvbiBTVkcgZm9udHMgaW50ZXJuYWxseSwgc2luY2UgdGhleSBhcmUgcmVuZGVyZWQg
aW50ZXJuYWxseS4KLSAgICBpZiAoZm9udERhdGEtPmlzU1ZHRm9udCgpKSB7CisgICAgaWYgKGZv
bnQtPmlzU1ZHRm9udCgpKSB7CiAgICAgICAgIC8vIFNWRyBmb250IGxpZ2F0dXJlcyBhcmUgaGFu
ZGxlZCBkdXJpbmcgZ2x5cGggc2VsZWN0aW9uLCBvbmx5IGtlcm5pbmcgcmVtYWluaW5nLgogICAg
ICAgICBpZiAoaXRlcmF0b3IucnVuKCkucmVuZGVyaW5nQ29udGV4dCgpICYmICh0eXBlc2V0dGlu
Z0ZlYXR1cmVzICYgS2VybmluZykpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBw
YXNzIHRoZSBuZWNlc3NhcnkgY29udGV4dCBkb3duIHRvIHRoaXMgbGV2ZWwgc28gd2UgY2FuIGxh
emlseSBjcmVhdGUgcmVuZGVyaW5nIGNvbnRleHRzIGF0IHRoaXMgcG9pbnQuCiAgICAgICAgICAg
ICAvLyBIb3dldmVyLCBhIGxhcmdlciByZWZhY3RvcmluZyBvZiBTVkcgZm9udHMgbWlnaHQgbmVj
ZXNzYXJ5IHRvIHNpZGVzdGVwIHRoaXMgcHJvYmxlbSBjb21wbGV0ZWx5LgotICAgICAgICAgICAg
aXRlcmF0b3IucnVuKCkucmVuZGVyaW5nQ29udGV4dCgpLT5hcHBseVNWR0tlcm5pbmcoZm9udERh
dGEsIGl0ZXJhdG9yLCBnbHlwaEJ1ZmZlciwgbGFzdEdseXBoQ291bnQpOworICAgICAgICAgICAg
aXRlcmF0b3IucnVuKCkucmVuZGVyaW5nQ29udGV4dCgpLT5hcHBseVNWR0tlcm5pbmcoZm9udCwg
aXRlcmF0b3IsIGdseXBoQnVmZmVyLCBsYXN0R2x5cGhDb3VudCk7CiAgICAgICAgIH0KICAgICB9
IGVsc2UKICNlbmRpZgotICAgICAgICBmb250RGF0YS0+YXBwbHlUcmFuc2Zvcm1zKGdseXBoQnVm
ZmVyLT5nbHlwaHMobGFzdEdseXBoQ291bnQpLCBhZHZhbmNlcyArIGxhc3RHbHlwaENvdW50LCBn
bHlwaEJ1ZmZlclNpemUgLSBsYXN0R2x5cGhDb3VudCwgdHlwZXNldHRpbmdGZWF0dXJlcyk7Cisg
ICAgICAgIGZvbnQtPmFwcGx5VHJhbnNmb3JtcyhnbHlwaEJ1ZmZlci0+Z2x5cGhzKGxhc3RHbHlw
aENvdW50KSwgYWR2YW5jZXMgKyBsYXN0R2x5cGhDb3VudCwgZ2x5cGhCdWZmZXJTaXplIC0gbGFz
dEdseXBoQ291bnQsIHR5cGVzZXR0aW5nRmVhdHVyZXMpOwogCiAgICAgaWYgKCFsdHIpCiAgICAg
ICAgIGdseXBoQnVmZmVyLT5yZXZlcnNlKGxhc3RHbHlwaENvdW50LCBnbHlwaEJ1ZmZlclNpemUg
LSBsYXN0R2x5cGhDb3VudCk7CkBAIC0xNjYsOCArMTY2LDggQEAgaW5saW5lIHVuc2lnbmVkIFdp
ZHRoSXRlcmF0b3I6OmFkdmFuY2VJbgogICAgIGZsb2F0IGxhc3RSb3VuZGluZ1dpZHRoID0gbV9m
aW5hbFJvdW5kaW5nV2lkdGg7CiAgICAgRmxvYXRSZWN0IGJvdW5kczsKIAotICAgIGNvbnN0IFNp
bXBsZUZvbnREYXRhJiBwcmltYXJ5Rm9udERhdGEgPSBtX2ZvbnQtPnByaW1hcnlGb250RGF0YSgp
OwotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBsYXN0Rm9udERhdGEgPSAmcHJpbWFyeUZvbnRE
YXRhOworICAgIGNvbnN0IEZvbnQmIHByaW1hcnlGb250ID0gbV9mb250LT5wcmltYXJ5Rm9udCgp
OworICAgIGNvbnN0IEZvbnQqIGxhc3RGb250RGF0YSA9ICZwcmltYXJ5Rm9udDsKICAgICBpbnQg
bGFzdEdseXBoQ291bnQgPSBnbHlwaEJ1ZmZlciA/IGdseXBoQnVmZmVyLT5zaXplKCkgOiAwOwog
CiAgICAgVUNoYXIzMiBjaGFyYWN0ZXIgPSAwOwpAQCAtMTgzLDE1ICsxODMsMTUgQEAgaW5saW5l
IHVuc2lnbmVkIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2VJbgogICAgICAgICAgICAgdGV4dEl0ZXJh
dG9yLmFkdmFuY2UoYWR2YW5jZUxlbmd0aCk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgfQotICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEgPSBnbHlwaERhdGEu
Zm9udERhdGE7Ci0gICAgICAgIEFTU0VSVChmb250RGF0YSk7CisgICAgICAgIGNvbnN0IEZvbnQq
IGZvbnQgPSBnbHlwaERhdGEuZm9udDsKKyAgICAgICAgQVNTRVJUKGZvbnQpOwogCiAgICAgICAg
IC8vIE5vdyB0aGF0IHdlIGhhdmUgYSBnbHlwaCBhbmQgZm9udCBkYXRhLCBnZXQgaXRzIHdpZHRo
LgogICAgICAgICBmbG9hdCB3aWR0aDsKICAgICAgICAgaWYgKGNoYXJhY3RlciA9PSAnXHQnICYm
IG1fcnVuLmFsbG93VGFicygpKQotICAgICAgICAgICAgd2lkdGggPSBtX2ZvbnQtPnRhYldpZHRo
KCpmb250RGF0YSwgbV9ydW4udGFiU2l6ZSgpLCBtX3J1bi54UG9zKCkgKyBtX3J1bldpZHRoU29G
YXIgKyB3aWR0aFNpbmNlTGFzdFJvdW5kaW5nKTsKKyAgICAgICAgICAgIHdpZHRoID0gbV9mb250
LT50YWJXaWR0aCgqZm9udCwgbV9ydW4udGFiU2l6ZSgpLCBtX3J1bi54UG9zKCkgKyBtX3J1bldp
ZHRoU29GYXIgKyB3aWR0aFNpbmNlTGFzdFJvdW5kaW5nKTsKICAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICB3aWR0aCA9IGZvbnREYXRhLT53aWR0aEZvckdseXBoKGdseXBoKTsKKyAgICAgICAg
ICAgIHdpZHRoID0gZm9udC0+d2lkdGhGb3JHbHlwaChnbHlwaCk7CiAKICAgICAgICAgICAgIC8v
IFNWRyB1c2VzIGhvcml6b250YWxHbHlwaFN0cmV0Y2goKSwgd2hlbiB0ZXh0TGVuZ3RoIGlzIHVz
ZWQgdG8gc3RyZXRjaC9zcXVlZXplIHRleHQuCiAgICAgICAgICAgICB3aWR0aCAqPSBtX3J1bi5o
b3Jpem9udGFsR2x5cGhTdHJldGNoKCk7CkBAIC0yMDAsMjYgKzIwMCwyNiBAQCBpbmxpbmUgdW5z
aWduZWQgV2lkdGhJdGVyYXRvcjo6YWR2YW5jZUluCiAgICAgICAgICAgICAvLyBGaXJzdCwgd2Ug
cm91bmQgc3BhY2VzIHRvIGFuIGFkanVzdGVkIHdpZHRoIGluIGFsbCBmb250cy4KICAgICAgICAg
ICAgIC8vIFNlY29uZCwgaW4gZml4ZWQtcGl0Y2ggZm9udHMgd2UgZW5zdXJlIHRoYXQgYWxsIGNo
YXJhY3RlcnMgdGhhdAogICAgICAgICAgICAgLy8gbWF0Y2ggdGhlIHdpZHRoIG9mIHRoZSBzcGFj
ZSBjaGFyYWN0ZXIgaGF2ZSB0aGUgc2FtZSB3aWR0aCBhcyB0aGUgc3BhY2UgY2hhcmFjdGVyLgot
ICAgICAgICAgICAgaWYgKG1fcnVuLmFwcGx5V29yZFJvdW5kaW5nKCkgJiYgd2lkdGggPT0gZm9u
dERhdGEtPnNwYWNlV2lkdGgoKSAmJiAoZm9udERhdGEtPnBpdGNoKCkgPT0gRml4ZWRQaXRjaCB8
fCBnbHlwaCA9PSBmb250RGF0YS0+c3BhY2VHbHlwaCgpKSkKLSAgICAgICAgICAgICAgICB3aWR0
aCA9IGZvbnREYXRhLT5hZGp1c3RlZFNwYWNlV2lkdGgoKTsKKyAgICAgICAgICAgIGlmIChtX3J1
bi5hcHBseVdvcmRSb3VuZGluZygpICYmIHdpZHRoID09IGZvbnQtPnNwYWNlV2lkdGgoKSAmJiAo
Zm9udC0+cGl0Y2goKSA9PSBGaXhlZFBpdGNoIHx8IGdseXBoID09IGZvbnQtPnNwYWNlR2x5cGgo
KSkpCisgICAgICAgICAgICAgICAgd2lkdGggPSBmb250LT5hZGp1c3RlZFNwYWNlV2lkdGgoKTsK
ICAgICAgICAgfQogCi0gICAgICAgIGlmIChmb250RGF0YSAhPSBsYXN0Rm9udERhdGEgJiYgd2lk
dGgpIHsKKyAgICAgICAgaWYgKGZvbnQgIT0gbGFzdEZvbnREYXRhICYmIHdpZHRoKSB7CiAgICAg
ICAgICAgICBpZiAoc2hvdWxkQXBwbHlGb250VHJhbnNmb3JtcygpKSB7CiAgICAgICAgICAgICAg
ICAgbV9ydW5XaWR0aFNvRmFyICs9IGFwcGx5Rm9udFRyYW5zZm9ybXMoZ2x5cGhCdWZmZXIsIG1f
cnVuLmx0cigpLCBsYXN0R2x5cGhDb3VudCwgbGFzdEZvbnREYXRhLCAqdGhpcywgbV90eXBlc2V0
dGluZ0ZlYXR1cmVzLCBjaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UpOwogICAgICAgICAgICAgICAg
IGxhc3RHbHlwaENvdW50ID0gZ2x5cGhCdWZmZXItPnNpemUoKTsgLy8gYXBwbHlGb250VHJhbnNm
b3JtcyBkb2Vzbid0IHVwZGF0ZSB3aGVuIHRoZXJlIGhhZCBiZWVuIG9ubHkgb25lIGdseXBoLgog
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBsYXN0Rm9udERhdGEgPSBmb250RGF0YTsKLSAg
ICAgICAgICAgIGlmIChtX2ZhbGxiYWNrRm9udHMgJiYgZm9udERhdGEgIT0gJnByaW1hcnlGb250
RGF0YSkgeworICAgICAgICAgICAgbGFzdEZvbnREYXRhID0gZm9udDsKKyAgICAgICAgICAgIGlm
IChtX2ZhbGxiYWNrRm9udHMgJiYgZm9udCAhPSAmcHJpbWFyeUZvbnQpIHsKICAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogVGhpcyBkb2VzIGEgbGl0dGxlIGV4dHJhIHdvcmsgdGhhdCBjb3VsZCBi
ZSBhdm9pZGVkIGlmCiAgICAgICAgICAgICAgICAgLy8gZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKCkg
cmV0dXJuZWQgd2hldGhlciBpdCBjaG9zZSB0byB1c2UgYSBzbWFsbCBjYXBzIGZvbnQuCiAgICAg
ICAgICAgICAgICAgaWYgKCFtX2ZvbnQtPmlzU21hbGxDYXBzKCkgfHwgY2hhcmFjdGVyID09IHVf
dG91cHBlcihjaGFyYWN0ZXIpKQotICAgICAgICAgICAgICAgICAgICBtX2ZhbGxiYWNrRm9udHMt
PmFkZChmb250RGF0YSk7CisgICAgICAgICAgICAgICAgICAgIG1fZmFsbGJhY2tGb250cy0+YWRk
KGZvbnQpOwogICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICBjb25z
dCBHbHlwaERhdGEmIHVwcGVyY2FzZUdseXBoRGF0YSA9IG1fZm9udC0+Z2x5cGhEYXRhRm9yQ2hh
cmFjdGVyKHVfdG91cHBlcihjaGFyYWN0ZXIpLCBydGwpOwotICAgICAgICAgICAgICAgICAgICBp
ZiAodXBwZXJjYXNlR2x5cGhEYXRhLmZvbnREYXRhICE9ICZwcmltYXJ5Rm9udERhdGEpCi0gICAg
ICAgICAgICAgICAgICAgICAgICBtX2ZhbGxiYWNrRm9udHMtPmFkZCh1cHBlcmNhc2VHbHlwaERh
dGEuZm9udERhdGEpOworICAgICAgICAgICAgICAgICAgICBpZiAodXBwZXJjYXNlR2x5cGhEYXRh
LmZvbnQgIT0gJnByaW1hcnlGb250KQorICAgICAgICAgICAgICAgICAgICAgICAgbV9mYWxsYmFj
a0ZvbnRzLT5hZGQodXBwZXJjYXNlR2x5cGhEYXRhLmZvbnQpOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjQzLDkgKzI0Myw5IEBAIGlubGluZSB1bnNp
Z25lZCBXaWR0aEl0ZXJhdG9yOjphZHZhbmNlSW4KICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChnbHlwaEJ1ZmZlcikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnbHlwaEJ1
ZmZlci0+aXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICht
X2ZvclRleHRFbXBoYXNpcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGds
eXBoQnVmZmVyLT5hZGQoZm9udERhdGEtPnplcm9XaWR0aFNwYWNlR2x5cGgoKSwgZm9udERhdGEs
IG1fZXhwYW5zaW9uUGVyT3Bwb3J0dW5pdHksIGN1cnJlbnRDaGFyYWN0ZXIpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhCdWZmZXItPmFkZChmb250LT56ZXJvV2lk
dGhTcGFjZUdseXBoKCksIGZvbnQsIG1fZXhwYW5zaW9uUGVyT3Bwb3J0dW5pdHksIGN1cnJlbnRD
aGFyYWN0ZXIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+YWRkKGZvbnREYXRhLT5z
cGFjZUdseXBoKCksIGZvbnREYXRhLCBleHBhbnNpb25BdFRoaXNPcHBvcnR1bml0eSwgY3VycmVu
dENoYXJhY3Rlcik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaEJ1
ZmZlci0+YWRkKGZvbnQtPnNwYWNlR2x5cGgoKSwgZm9udCwgZXhwYW5zaW9uQXRUaGlzT3Bwb3J0
dW5pdHksIGN1cnJlbnRDaGFyYWN0ZXIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+ZXhwYW5k
TGFzdEFkdmFuY2UoZXhwYW5zaW9uQXRUaGlzT3Bwb3J0dW5pdHkpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgfQpAQCAtMjc0LDcgKzI3NCw3IEBAIGlubGluZSB1bnNpZ25lZCBXaWR0aEl0ZXJh
dG9yOjphZHZhbmNlSW4KICAgICAgICAgfQogCiAgICAgICAgIGlmIChtX2FjY291bnRGb3JHbHlw
aEJvdW5kcykgewotICAgICAgICAgICAgYm91bmRzID0gZm9udERhdGEtPmJvdW5kc0ZvckdseXBo
KGdseXBoKTsKKyAgICAgICAgICAgIGJvdW5kcyA9IGZvbnQtPmJvdW5kc0ZvckdseXBoKGdseXBo
KTsKICAgICAgICAgICAgIGlmICghY3VycmVudENoYXJhY3RlcikKICAgICAgICAgICAgICAgICBt
X2ZpcnN0R2x5cGhPdmVyZmxvdyA9IHN0ZDo6bWF4PGZsb2F0PigwLCAtYm91bmRzLngoKSk7CiAg
ICAgICAgIH0KQEAgLTMxNCw3ICszMTQsNyBAQCBpbmxpbmUgdW5zaWduZWQgV2lkdGhJdGVyYXRv
cjo6YWR2YW5jZUluCiAgICAgICAgIH0KIAogICAgICAgICBpZiAoZ2x5cGhCdWZmZXIpCi0gICAg
ICAgICAgICBnbHlwaEJ1ZmZlci0+YWRkKGdseXBoLCBmb250RGF0YSwgKHJ0bCA/IG9sZFdpZHRo
ICsgbGFzdFJvdW5kaW5nV2lkdGggOiB3aWR0aCksIGN1cnJlbnRDaGFyYWN0ZXIpOworICAgICAg
ICAgICAgZ2x5cGhCdWZmZXItPmFkZChnbHlwaCwgZm9udCwgKHJ0bCA/IG9sZFdpZHRoICsgbGFz
dFJvdW5kaW5nV2lkdGggOiB3aWR0aCksIGN1cnJlbnRDaGFyYWN0ZXIpOwogCiAgICAgICAgIGxh
c3RSb3VuZGluZ1dpZHRoID0gd2lkdGggLSBvbGRXaWR0aDsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuaAkocmV2aXNpb24gMTc4
ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxNCArMzIsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBGb250Q2FzY2FkZTsKIGNsYXNzIEdseXBoQnVmZmVyOwotY2xhc3MgU2ltcGxlRm9u
dERhdGE7CitjbGFzcyBGb250OwogY2xhc3MgVGV4dFJ1bjsKIHN0cnVjdCBHbHlwaERhdGE7CiAK
IHN0cnVjdCBXaWR0aEl0ZXJhdG9yIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1
YmxpYzoKLSAgICBXaWR0aEl0ZXJhdG9yKGNvbnN0IEZvbnRDYXNjYWRlKiwgY29uc3QgVGV4dFJ1
biYsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDAsIGJv
b2wgYWNjb3VudEZvckdseXBoQm91bmRzID0gZmFsc2UsIGJvb2wgZm9yVGV4dEVtcGhhc2lzID0g
ZmFsc2UpOworICAgIFdpZHRoSXRlcmF0b3IoY29uc3QgRm9udENhc2NhZGUqLCBjb25zdCBUZXh0
UnVuJiwgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMgPSAwLCBib29sIGFjY291
bnRGb3JHbHlwaEJvdW5kcyA9IGZhbHNlLCBib29sIGZvclRleHRFbXBoYXNpcyA9IGZhbHNlKTsK
IAogICAgIHVuc2lnbmVkIGFkdmFuY2UoaW50IHRvLCBHbHlwaEJ1ZmZlciopOwogICAgIGJvb2wg
YWR2YW5jZU9uZUNoYXJhY3RlcihmbG9hdCYgd2lkdGgsIEdseXBoQnVmZmVyJik7CkBAIC05NCw3
ICs5NCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBzaG91bGRBcHBseUZvbnRUcmFuc2Zvcm1zKCkg
Y29uc3QgeyByZXR1cm4gbV9ydW4ubGVuZ3RoKCkgPiAxICYmIChtX3R5cGVzZXR0aW5nRmVhdHVy
ZXMgJiAoS2VybmluZyB8IExpZ2F0dXJlcykpOyB9CiAKICAgICBUeXBlc2V0dGluZ0ZlYXR1cmVz
IG1fdHlwZXNldHRpbmdGZWF0dXJlczsKLSAgICBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRh
Kj4qIG1fZmFsbGJhY2tGb250czsKKyAgICBIYXNoU2V0PGNvbnN0IEZvbnQqPiogbV9mYWxsYmFj
a0ZvbnRzOwogICAgIGJvb2wgbV9hY2NvdW50Rm9yR2x5cGhCb3VuZHM7CiAgICAgZmxvYXQgbV9t
YXhHbHlwaEJvdW5kaW5nQm94WTsKICAgICBmbG9hdCBtX21pbkdseXBoQm91bmRpbmdCb3hZOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9G
b250Q2Fpcm8uY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICsz
Myw3IEBACiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJDYWlyb1V0
aWxpdGllcy5oIgorI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgog
I2luY2x1ZGUgIkdyYWRpZW50LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCkBAIC00
MSwxMSArNDIsMTAgQEAKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgogI2luY2x1
ZGUgIlBsYXRmb3JtUGF0aENhaXJvLmgiCiAjaW5jbHVkZSAiU2hhZG93Qmx1ci5oIgotI2luY2x1
ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIHZv
aWQgZHJhd0dseXBoc1RvQ29udGV4dChjYWlyb190KiBjb250ZXh0LCBjb25zdCBTaW1wbGVGb250
RGF0YSogZm9udCwgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBpbnQgbnVtR2x5cGhzKQorc3Rh
dGljIHZvaWQgZHJhd0dseXBoc1RvQ29udGV4dChjYWlyb190KiBjb250ZXh0LCBjb25zdCBGb250
KiBmb250LCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGludCBudW1HbHlwaHMpCiB7CiAgICAg
Y2Fpcm9fbWF0cml4X3Qgb3JpZ2luYWxUcmFuc2Zvcm07CiAgICAgZmxvYXQgc3ludGhldGljQm9s
ZE9mZnNldCA9IGZvbnQtPnN5bnRoZXRpY0JvbGRPZmZzZXQoKTsKQEAgLTY0LDcgKzY0LDcgQEAg
c3RhdGljIHZvaWQgZHJhd0dseXBoc1RvQ29udGV4dChjYWlyb190KgogICAgICAgICBjYWlyb19z
ZXRfbWF0cml4KGNvbnRleHQsICZvcmlnaW5hbFRyYW5zZm9ybSk7CiB9CiAKLXN0YXRpYyB2b2lk
IGRyYXdHbHlwaHNTaGFkb3coR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgR2x5cGhCdWZm
ZXJHbHlwaCogZ2x5cGhzLCBpbnQgbnVtR2x5cGhzKQorc3RhdGljIHZvaWQgZHJhd0dseXBoc1No
YWRvdyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQsIGNvbnN0IEZvbnQqIGZvbnQsIEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgaW50IG51
bUdseXBocykKIHsKICAgICBTaGFkb3dCbHVyJiBzaGFkb3cgPSBncmFwaGljc0NvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpLT5zaGFkb3dCbHVyKCk7CiAKQEAgLTk1LDcgKzk1LDcgQEAgc3RhdGlj
IHZvaWQgZHJhd0dseXBoc1NoYWRvdyhHcmFwaGljc0NvbgogICAgIH0KIH0KIAotdm9pZCBGb250
Q2FzY2FkZTo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFNpbXBs
ZUZvbnREYXRhKiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsCit2b2lkIEZv
bnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRm9u
dCogZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLAogICAgIGludCBmcm9tLCBp
bnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKIHsKICAgICBpZiAo
IWZvbnQtPnBsYXRmb3JtRGF0YSgpLnNpemUoKSkKQEAgLTIxNiw3ICsyMTYsNyBAQCBwdWJsaWM6
CiAgICAgICAgIDogbV9pbmRleCgwKQogICAgICAgICAsIG1fdGV4dFJ1bih0ZXh0UnVuKQogICAg
ICAgICAsIG1fZ2x5cGhCdWZmZXIoZ2x5cGhCdWZmZXIpCi0gICAgICAgICwgbV9mb250RGF0YShn
bHlwaEJ1ZmZlci5mb250RGF0YUF0KG1faW5kZXgpKQorICAgICAgICAsIG1fZm9udERhdGEoZ2x5
cGhCdWZmZXIuZm9udEF0KG1faW5kZXgpKQogICAgICAgICAsIG1fdHJhbnNsYXRpb24oQWZmaW5l
VHJhbnNmb3JtKCkudHJhbnNsYXRlKHRleHRPcmlnaW4ueCgpLCB0ZXh0T3JpZ2luLnkoKSkpCiAg
ICAgewogICAgICAgICBtb3ZlVG9OZXh0VmFsaWRHbHlwaCgpOwpAQCAtMjM1LDcgKzIzNSw3IEBA
IHByaXZhdGU6CiAgICAgaW50IG1faW5kZXg7CiAgICAgY29uc3QgVGV4dFJ1biYgbV90ZXh0UnVu
OwogICAgIGNvbnN0IEdseXBoQnVmZmVyJiBtX2dseXBoQnVmZmVyOwotICAgIGNvbnN0IFNpbXBs
ZUZvbnREYXRhKiBtX2ZvbnREYXRhOworICAgIGNvbnN0IEZvbnQqIG1fZm9udERhdGE7CiAgICAg
QWZmaW5lVHJhbnNmb3JtIG1fdHJhbnNsYXRpb247CiB9OwogCkBAIC0yODYsNyArMjg2LDcgQEAg
dm9pZCBDYWlyb0dseXBoVG9QYXRoVHJhbnNsYXRvcjo6YWR2YW5jZQogICAgICAgICArK21faW5k
ZXg7CiAgICAgICAgIGlmIChtX2luZGV4ID49IG1fZ2x5cGhCdWZmZXIuc2l6ZSgpKQogICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIG1fZm9udERhdGEgPSBtX2dseXBoQnVmZmVyLmZvbnREYXRh
QXQobV9pbmRleCk7CisgICAgICAgIG1fZm9udERhdGEgPSBtX2dseXBoQnVmZmVyLmZvbnRBdCht
X2luZGV4KTsKICAgICB9IHdoaWxlIChtX2ZvbnREYXRhLT5pc1NWR0ZvbnQoKSAmJiBtX2luZGV4
IDwgbV9nbHlwaEJ1ZmZlci5zaXplKCkpOwogfQogCkBAIC0zMDcsNyArMzA3LDcgQEAgRGFzaEFy
cmF5IEZvbnRDYXNjYWRlOjpkYXNoZXNGb3JJbnRlcnNlYwogICAgICAgICByZXR1cm4gRGFzaEFy
cmF5KCk7CiAKICAgICAvLyBGSVhNRTogSGFuZGxlIFNWRyArIG5vbi1TVkcgaW50ZXJsZWF2ZWQg
cnVucy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzc3OAotICAg
IGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSA9IGdseXBoQnVmZmVyLmZvbnREYXRhQXQo
MCk7CisgICAgY29uc3QgRm9udCogZm9udERhdGEgPSBnbHlwaEJ1ZmZlci5mb250QXQoMCk7CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPEdseXBoVG9QYXRoVHJhbnNsYXRvcj4gdHJhbnNsYXRvcjsKICAg
ICBib29sIGlzU1ZHID0gZmFsc2U7CiAgICAgRmxvYXRQb2ludCBvcmlnaW4gPSBGbG9hdFBvaW50
KHRleHRPcmlnaW4ueCgpICsgZGVsdGFYLCB0ZXh0T3JpZ2luLnkoKSk7CkBAIC0zMjYsNyArMzI2
LDcgQEAgRGFzaEFycmF5IEZvbnRDYXNjYWRlOjpkYXNoZXNGb3JJbnRlcnNlYwogICAgIGZvciAo
aW50IGluZGV4ID0gMDsgdHJhbnNsYXRvci0+Y29udGFpbnNNb3JlUGF0aHMoKTsgKytpbmRleCwg
dHJhbnNsYXRvci0+YWR2YW5jZSgpKSB7CiAgICAgICAgIGZsb2F0IGNlbnRlck9mTGluZSA9IGxp
bmVFeHRlbnRzLnkoKSArIChsaW5lRXh0ZW50cy5oZWlnaHQoKSAvIDIpOwogICAgICAgICBHbHlw
aEl0ZXJhdGlvblN0YXRlIGluZm8gPSBHbHlwaEl0ZXJhdGlvblN0YXRlKEZsb2F0UG9pbnQoKSwg
RmxvYXRQb2ludCgpLCBjZW50ZXJPZkxpbmUsIGxpbmVFeHRlbnRzLngoKSArIGxpbmVFeHRlbnRz
LndpZHRoKCksIGxpbmVFeHRlbnRzLngoKSk7Ci0gICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRh
KiBsb2NhbEZvbnREYXRhID0gZ2x5cGhCdWZmZXIuZm9udERhdGFBdChpbmRleCk7CisgICAgICAg
IGNvbnN0IEZvbnQqIGxvY2FsRm9udERhdGEgPSBnbHlwaEJ1ZmZlci5mb250QXQoaW5kZXgpOwog
ICAgICAgICBpZiAoIWxvY2FsRm9udERhdGEgfHwgKCFpc1NWRyAmJiBsb2NhbEZvbnREYXRhLT5p
c1NWR0ZvbnQoKSkgfHwgKGlzU1ZHICYmIGxvY2FsRm9udERhdGEgIT0gZm9udERhdGEpKSB7CiAg
ICAgICAgICAgICAvLyBUaGUgYWR2YW5jZXMgd2lsbCBnZXQgYWxsIG1lc3NlZCB1cCBpZiB3ZSBk
byBhbnl0aGluZyBvdGhlciB0aGFuIGJhaWwgaGVyZS4KICAgICAgICAgICAgIHJlc3VsdC5jbGVh
cigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENh
aXJvSGFyZmJ1enpORy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvSGFyZmJ1enpORy5jcHAJKHJldmlzaW9uIDE3ODg1NykK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyb0hhcmZi
dXp6TkcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMyArMjcsMTMgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogCisjaW5jbHVkZSAiRm9udC5oIgog
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhhcmZCdXp6U2hhcGVyLmgi
CiAjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRl
ICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCi0j
aW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKICNpbmNsdWRlIDxjYWlyby5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CkBAIC04Myw3ICs4Myw3IEBAIGJvb2wgRm9udENhc2NhZGU6OmNhbkV4cGFu
ZEFyb3VuZElkZW9ncmEKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWZsb2F0IEZvbnRDYXNjYWRl
OjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNv
bnN0IFNpbXBsZUZvbnREYXRhKj4qLCBHbHlwaE92ZXJmbG93KikgY29uc3QKK2Zsb2F0IEZvbnRD
YXNjYWRlOjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNo
U2V0PGNvbnN0IEZvbnQqPiosIEdseXBoT3ZlcmZsb3cqKSBjb25zdAogewogICAgIEhhcmZCdXp6
U2hhcGVyIHNoYXBlcih0aGlzLCBydW4pOwogICAgIGlmIChzaGFwZXIuc2hhcGUoKSkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENh
aXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgIkZsb2F0Q29udmVy
c2lvbi5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkZsb2F0Um91bmRlZFJl
Y3QuaCIKKyNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlQ2Fpcm8uaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiTm90SW1w
bGVtZW50ZWQuaCIKQEAgLTUxLDcgKzUyLDYgQEAKICNpbmNsdWRlICJQbGF0Zm9ybVBhdGhDYWly
by5oIgogI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCiAjaW5jbHVkZSAiU2hhZG93Qmx1ci5oIgot
I2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRy
aXguaCIKICNpbmNsdWRlIDxjYWlyby5oPgogI2luY2x1ZGUgPG1hdGguaD4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYXNjYWRlQ29jb2EubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENh
c2NhZGVDb2NvYS5tbQkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvRm9udENhc2NhZGVDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAt
MjcsMTEgKzI3LDExIEBACiAjaW1wb3J0ICJDb3JlR3JhcGhpY3NTUEkuaCIKICNpbXBvcnQgIkNv
cmVUZXh0U1BJLmgiCiAjaW1wb3J0ICJEYXNoQXJyYXkuaCIKKyNpbXBvcnQgIkZvbnQuaCIKICNp
bXBvcnQgIkdseXBoQnVmZmVyLmgiCiAjaW1wb3J0ICJHcmFwaGljc0NvbnRleHQuaCIKICNpbXBv
cnQgIkxheW91dFJlY3QuaCIKICNpbXBvcnQgIkxvZ2dpbmcuaCIKLSNpbXBvcnQgIlNpbXBsZUZv
bnREYXRhLmgiCiAjaW1wb3J0ICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCiAjaWYgVVNFKEFQ
UEtJVCkKICNpbXBvcnQgPEFwcEtpdC9BcHBLaXQuaD4KQEAgLTkxLDcgKzkxLDcgQEAgc3RhdGlj
IGlubGluZSBib29sIHNob3VsZFVzZUxldHRlcnByZXNzRQogI2VuZGlmCiB9CiAKLXN0YXRpYyB2
b2lkIHNob3dMZXR0ZXJwcmVzc2VkR2x5cGhzV2l0aEFkdmFuY2VzKGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgQ0dDb250ZXh0UmVmIGNvbnRleHQs
IGNvbnN0IENHR2x5cGgqIGdseXBocywgY29uc3QgQ0dTaXplKiBhZHZhbmNlcywgc2l6ZV90IGNv
dW50KQorc3RhdGljIHZvaWQgc2hvd0xldHRlcnByZXNzZWRHbHlwaHNXaXRoQWR2YW5jZXMoY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IEZvbnQqIGZvbnQsIENHQ29udGV4dFJlZiBjb250
ZXh0LCBjb25zdCBDR0dseXBoKiBnbHlwaHMsIGNvbnN0IENHU2l6ZSogYWR2YW5jZXMsIHNpemVf
dCBjb3VudCkKIHsKICNpZiBFTkFCTEUoTEVUVEVSUFJFU1MpCiAgICAgaWYgKCFjb3VudCkKQEAg
LTEzMSw3ICsxMzEsNyBAQCBzdGF0aWMgdm9pZCBzaG93TGV0dGVycHJlc3NlZEdseXBoc1dpdGhB
CiAjZW5kaWYKIH0KIAotc3RhdGljIHZvaWQgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhjb25zdCBG
bG9hdFBvaW50JiBwb2ludCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsIENHQ29udGV4dFJl
ZiBjb250ZXh0LCBjb25zdCBDR0dseXBoKiBnbHlwaHMsIGNvbnN0IENHU2l6ZSogYWR2YW5jZXMs
IHNpemVfdCBjb3VudCkKK3N0YXRpYyB2b2lkIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMoY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IEZvbnQqIGZvbnQsIENHQ29udGV4dFJlZiBjb250ZXh0
LCBjb25zdCBDR0dseXBoKiBnbHlwaHMsIGNvbnN0IENHU2l6ZSogYWR2YW5jZXMsIHNpemVfdCBj
b3VudCkKIHsKICAgICBpZiAoIWNvdW50KQogICAgICAgICByZXR1cm47CkBAIC0xOTcsNyArMTk3
LDcgQEAgc3RhdGljIHZvaWQgc2V0Q0dGb250UmVuZGVyaW5nTW9kZShDR0NvbgogfQogI2VuZGlm
CiAKLXZvaWQgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVm
ZmVyLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgYW5jaG9yUG9p
bnQpIGNvbnN0Cit2b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgY29uc3QgRm9udCogZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVy
LCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgYW5jaG9yUG9pbnQp
IGNvbnN0CiB7CiAgICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhID0gZm9u
dC0+cGxhdGZvcm1EYXRhKCk7CiAgICAgaWYgKCFwbGF0Zm9ybURhdGEuc2l6ZSgpKQpAQCAtNDY4
LDcgKzQ2OCw3IEBAIHB1YmxpYzoKICAgICAgICAgOiBtX2luZGV4KDApCiAgICAgICAgICwgbV90
ZXh0UnVuKHRleHRSdW4pCiAgICAgICAgICwgbV9nbHlwaEJ1ZmZlcihnbHlwaEJ1ZmZlcikKLSAg
ICAgICAgLCBtX2ZvbnREYXRhKGdseXBoQnVmZmVyLmZvbnREYXRhQXQobV9pbmRleCkpCisgICAg
ICAgICwgbV9mb250RGF0YShnbHlwaEJ1ZmZlci5mb250QXQobV9pbmRleCkpCiAgICAgICAgICwg
bV90cmFuc2xhdGlvbihDR0FmZmluZVRyYW5zZm9ybVNjYWxlKENHQWZmaW5lVHJhbnNmb3JtTWFr
ZVRyYW5zbGF0aW9uKHRleHRPcmlnaW4ueCgpLCB0ZXh0T3JpZ2luLnkoKSksIDEsIC0xKSkKICAg
ICB7CiAgICAgICAgIG1vdmVUb05leHRWYWxpZEdseXBoKCk7CkBAIC00ODcsNyArNDg3LDcgQEAg
cHJpdmF0ZToKICAgICBpbnQgbV9pbmRleDsKICAgICBjb25zdCBUZXh0UnVuJiBtX3RleHRSdW47
CiAgICAgY29uc3QgR2x5cGhCdWZmZXImIG1fZ2x5cGhCdWZmZXI7Ci0gICAgY29uc3QgU2ltcGxl
Rm9udERhdGEqIG1fZm9udERhdGE7CisgICAgY29uc3QgRm9udCogbV9mb250RGF0YTsKICAgICBD
R0FmZmluZVRyYW5zZm9ybSBtX3RyYW5zbGF0aW9uOwogfTsKIApAQCAtNTI0LDcgKzUyNCw3IEBA
IHZvaWQgTWFjR2x5cGhUb1BhdGhUcmFuc2xhdG9yOjphZHZhbmNlKCkKICAgICAgICAgKyttX2lu
ZGV4OwogICAgICAgICBpZiAobV9pbmRleCA+PSBtX2dseXBoQnVmZmVyLnNpemUoKSkKICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBtX2ZvbnREYXRhID0gbV9nbHlwaEJ1ZmZlci5mb250RGF0
YUF0KG1faW5kZXgpOworICAgICAgICBtX2ZvbnREYXRhID0gbV9nbHlwaEJ1ZmZlci5mb250QXQo
bV9pbmRleCk7CiAgICAgfSB3aGlsZSAobV9mb250RGF0YS0+aXNTVkdGb250KCkgJiYgbV9pbmRl
eCA8IG1fZ2x5cGhCdWZmZXIuc2l6ZSgpKTsKIH0KIApAQCAtNTQ1LDcgKzU0NSw3IEBAIERhc2hB
cnJheSBGb250Q2FzY2FkZTo6ZGFzaGVzRm9ySW50ZXJzZWMKICAgICAgICAgcmV0dXJuIERhc2hB
cnJheSgpOwogICAgIAogICAgIC8vIEZJWE1FOiBIYW5kbGUgU1ZHICsgbm9uLVNWRyBpbnRlcmxl
YXZlZCBydW5zLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzNzc4
Ci0gICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhID0gZ2x5cGhCdWZmZXIuZm9udERh
dGFBdCgwKTsKKyAgICBjb25zdCBGb250KiBmb250RGF0YSA9IGdseXBoQnVmZmVyLmZvbnRBdCgw
KTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8R2x5cGhUb1BhdGhUcmFuc2xhdG9yPiB0cmFuc2xhdG9y
OwogICAgIGJvb2wgaXNTVkcgPSBmYWxzZTsKICAgICBGbG9hdFBvaW50IG9yaWdpbiA9IEZsb2F0
UG9pbnQodGV4dE9yaWdpbi54KCkgKyBkZWx0YVgsIHRleHRPcmlnaW4ueSgpKTsKQEAgLTU2MSw4
ICs1NjEsOCBAQCBEYXNoQXJyYXkgRm9udENhc2NhZGU6OmRhc2hlc0ZvckludGVyc2VjCiAgICAg
RGFzaEFycmF5IHJlc3VsdDsKICAgICBmb3IgKGludCBpbmRleCA9IDA7IHRyYW5zbGF0b3ItPmNv
bnRhaW5zTW9yZVBhdGhzKCk7ICsraW5kZXgsIHRyYW5zbGF0b3ItPmFkdmFuY2UoKSkgewogICAg
ICAgICBHbHlwaEl0ZXJhdGlvblN0YXRlIGluZm8gPSBHbHlwaEl0ZXJhdGlvblN0YXRlKENHUG9p
bnRNYWtlKDAsIDApLCBDR1BvaW50TWFrZSgwLCAwKSwgbGluZUV4dGVudHMueSgpLCBsaW5lRXh0
ZW50cy55KCkgKyBsaW5lRXh0ZW50cy5oZWlnaHQoKSwgbGluZUV4dGVudHMueCgpICsgbGluZUV4
dGVudHMud2lkdGgoKSwgbGluZUV4dGVudHMueCgpKTsKLSAgICAgICAgY29uc3QgU2ltcGxlRm9u
dERhdGEqIGxvY2FsRm9udERhdGEgPSBnbHlwaEJ1ZmZlci5mb250RGF0YUF0KGluZGV4KTsKLSAg
ICAgICAgaWYgKCFsb2NhbEZvbnREYXRhIHx8ICghaXNTVkcgJiYgbG9jYWxGb250RGF0YS0+aXNT
VkdGb250KCkpIHx8IChpc1NWRyAmJiBsb2NhbEZvbnREYXRhICE9IGZvbnREYXRhKSkgeworICAg
ICAgICBjb25zdCBGb250KiBsb2NhbEZvbnQgPSBnbHlwaEJ1ZmZlci5mb250QXQoaW5kZXgpOwor
ICAgICAgICBpZiAoIWxvY2FsRm9udCB8fCAoIWlzU1ZHICYmIGxvY2FsRm9udC0+aXNTVkdGb250
KCkpIHx8IChpc1NWRyAmJiBsb2NhbEZvbnQgIT0gZm9udERhdGEpKSB7CiAgICAgICAgICAgICAv
LyBUaGUgYWR2YW5jZXMgd2lsbCBnZXQgYWxsIG1lc3NlZCB1cCBpZiB3ZSBkbyBhbnl0aGluZyBv
dGhlciB0aGFuIGJhaWwgaGVyZS4KICAgICAgICAgICAgIHJlc3VsdC5jbGVhcigpOwogICAgICAg
ICAgICAgYnJlYWs7CkBAIC01OTIsMTAgKzU5MiwxMCBAQCBEYXNoQXJyYXkgRm9udENhc2NhZGU6
OmRhc2hlc0ZvckludGVyc2VjCiB9CiAjZW5kaWYKIAotYm9vbCBGb250Q2FzY2FkZTo6cHJpbWFy
eUZvbnREYXRhSXNTeXN0ZW1Gb250KCkgY29uc3QKK2Jvb2wgRm9udENhc2NhZGU6OnByaW1hcnlG
b250SXNTeXN0ZW1Gb250KCkgY29uc3QKIHsKICNpZiBQTEFURk9STShJT1MpIHx8IF9fTUFDX09T
X1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPiAxMDkwCi0gICAgY29uc3QgYXV0byYgZm9udERhdGEg
PSBwcmltYXJ5Rm9udERhdGEoKTsKKyAgICBjb25zdCBhdXRvJiBmb250RGF0YSA9IHByaW1hcnlG
b250KCk7CiAgICAgcmV0dXJuICFmb250RGF0YS5pc1NWR0ZvbnQoKSAmJiBDVEZvbnREZXNjcmlw
dG9ySXNTeXN0ZW1VSUZvbnQoYWRvcHRDRihDVEZvbnRDb3B5Rm9udERlc2NyaXB0b3IoZm9udERh
dGEucGxhdGZvcm1EYXRhKCkuY3RGb250KCkpKS5nZXQoKSk7CiAjZWxzZQogICAgIC8vIFN5c3Rl
bSBmb250cyBhcmUgaGlkZGVuIGJ5IGhhdmluZyBhIG5hbWUgdGhhdCBiZWdpbnMgd2l0aCBhIHBl
cmlvZCwgc28gc2ltcGx5IHNlYXJjaApAQCAtNjcxLDcgKzY3MSw3IEBAIHZvaWQgRm9udENhc2Nh
ZGU6OmRyYXdFbXBoYXNpc01hcmtzRm9yQ28KICAgICBkcmF3RW1waGFzaXNNYXJrcyhjb250ZXh0
LCBydW4sIGdseXBoQnVmZmVyLCBtYXJrLCBGbG9hdFBvaW50KHBvaW50LngoKSArIGluaXRpYWxB
ZHZhbmNlLCBwb2ludC55KCkpKTsKIH0KIAotZmxvYXQgRm9udENhc2NhZGU6OmZsb2F0V2lkdGhG
b3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9u
dERhdGEqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29u
c3QKK2Zsb2F0IEZvbnRDYXNjYWRlOjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4
dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVy
ZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKIHsKICAgICBDb21wbGV4VGV4dENvbnRyb2xsZXIg
Y29udHJvbGxlcih0aGlzLCBydW4sIHRydWUsIGZhbGxiYWNrRm9udHMpOwogICAgIGlmIChnbHlw
aE92ZXJmbG93KSB7CkBAIC02ODksNyArNjg5LDcgQEAgaW50IEZvbnRDYXNjYWRlOjpvZmZzZXRG
b3JQb3NpdGlvbkZvckNvbQogICAgIHJldHVybiBjb250cm9sbGVyLm9mZnNldEZvclBvc2l0aW9u
KHgsIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKTsKIH0KIAotY29uc3QgU2ltcGxlRm9udERhdGEqIEZv
bnRDYXNjYWRlOjpmb250RGF0YUZvckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVD
aGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBGb250RGF0YVZhcmlhbnQgdmFyaWFudCkg
Y29uc3QKK2NvbnN0IEZvbnQqIEZvbnRDYXNjYWRlOjpmb250Rm9yQ29tYmluaW5nQ2hhcmFjdGVy
U2VxdWVuY2UoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIEZvbnRWYXJp
YW50IHZhcmlhbnQpIGNvbnN0CiB7CiAgICAgVUNoYXIzMiBiYXNlQ2hhcmFjdGVyOwogICAgIHNp
emVfdCBiYXNlQ2hhcmFjdGVyTGVuZ3RoID0gMDsKQEAgLTcwMSw1MSArNzAxLDUxIEBAIGNvbnN0
IFNpbXBsZUZvbnREYXRhKiBGb250Q2FzY2FkZTo6Zm9udEQKICAgICAgICAgcmV0dXJuIDA7CiAK
ICAgICBpZiAobGVuZ3RoID09IGJhc2VDaGFyYWN0ZXJMZW5ndGgpCi0gICAgICAgIHJldHVybiBi
YXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmZvbnREYXRhOworICAgICAgICByZXR1cm4gYmFzZUNoYXJh
Y3RlckdseXBoRGF0YS5mb250OwogCi0gICAgYm9vbCB0cmllZEJhc2VDaGFyYWN0ZXJGb250RGF0
YSA9IGZhbHNlOworICAgIGJvb2wgdHJpZWRCYXNlQ2hhcmFjdGVyRm9udCA9IGZhbHNlOwogCiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgIWZhbGxiYWNrUmFuZ2VzQXQoaSkuaXNOdWxsKCk7ICsr
aSkgewotICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogc2ltcGxlRm9udERhdGEgPSBmYWxs
YmFja1Jhbmdlc0F0KGkpLmZvbnREYXRhRm9yQ2hhcmFjdGVyKGJhc2VDaGFyYWN0ZXIpOwotICAg
ICAgICBpZiAoIXNpbXBsZUZvbnREYXRhKQorICAgICAgICBjb25zdCBGb250KiBmb250ID0gZmFs
bGJhY2tSYW5nZXNBdChpKS5mb250Rm9yQ2hhcmFjdGVyKGJhc2VDaGFyYWN0ZXIpOworICAgICAg
ICBpZiAoIWZvbnQpCiAgICAgICAgICAgICBjb250aW51ZTsKICNpZiBQTEFURk9STShJT1MpCi0g
ICAgICAgIGlmIChiYXNlQ2hhcmFjdGVyID49IDB4MDYwMCAmJiBiYXNlQ2hhcmFjdGVyIDw9IDB4
MDZmZiAmJiBzaW1wbGVGb250RGF0YS0+c2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKCkpCisgICAg
ICAgIGlmIChiYXNlQ2hhcmFjdGVyID49IDB4MDYwMCAmJiBiYXNlQ2hhcmFjdGVyIDw9IDB4MDZm
ZiAmJiBmb250LT5zaG91bGROb3RCZVVzZWRGb3JBcmFiaWMoKSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogI2VuZGlmCiAgICAgICAgIGlmICh2YXJpYW50ID09IE5vcm1hbFZhcmlhbnQpIHsKLSAg
ICAgICAgICAgIGlmIChzaW1wbGVGb250RGF0YS0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24o
KSA9PSBWZXJ0aWNhbCkgewotICAgICAgICAgICAgICAgIGlmIChpc0NKS0lkZW9ncmFwaE9yU3lt
Ym9sKGJhc2VDaGFyYWN0ZXIpICYmICFzaW1wbGVGb250RGF0YS0+aGFzVmVydGljYWxHbHlwaHMo
KSkgeworICAgICAgICAgICAgaWYgKGZvbnQtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkg
PT0gVmVydGljYWwpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNDSktJZGVvZ3JhcGhPclN5bWJv
bChiYXNlQ2hhcmFjdGVyKSAmJiAhZm9udC0+aGFzVmVydGljYWxHbHlwaHMoKSkgewogICAgICAg
ICAgICAgICAgICAgICB2YXJpYW50ID0gQnJva2VuSWRlb2dyYXBoVmFyaWFudDsKLSAgICAgICAg
ICAgICAgICAgICAgc2ltcGxlRm9udERhdGEgPSBzaW1wbGVGb250RGF0YS0+YnJva2VuSWRlb2dy
YXBoRm9udERhdGEoKS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgZm9udCA9IGZvbnQtPmJy
b2tlbklkZW9ncmFwaEZvbnQoKS5nZXQoKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1f
Zm9udERlc2NyaXB0aW9uLm5vbkNKS0dseXBoT3JpZW50YXRpb24oKSA9PSBOb25DSktHbHlwaE9y
aWVudGF0aW9uVmVydGljYWxSaWdodCkgewotICAgICAgICAgICAgICAgICAgICBTaW1wbGVGb250
RGF0YSogdmVydGljYWxSaWdodEZvbnREYXRhID0gc2ltcGxlRm9udERhdGEtPnZlcnRpY2FsUmln
aHRPcmllbnRhdGlvbkZvbnREYXRhKCkuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIEdseXBo
IHZlcnRpY2FsUmlnaHRHbHlwaCA9IHZlcnRpY2FsUmlnaHRGb250RGF0YS0+Z2x5cGhGb3JDaGFy
YWN0ZXIoYmFzZUNoYXJhY3Rlcik7CisgICAgICAgICAgICAgICAgICAgIEZvbnQqIHZlcnRpY2Fs
UmlnaHRGb250ID0gZm9udC0+dmVydGljYWxSaWdodE9yaWVudGF0aW9uRm9udCgpLmdldCgpOwor
ICAgICAgICAgICAgICAgICAgICBHbHlwaCB2ZXJ0aWNhbFJpZ2h0R2x5cGggPSB2ZXJ0aWNhbFJp
Z2h0Rm9udC0+Z2x5cGhGb3JDaGFyYWN0ZXIoYmFzZUNoYXJhY3Rlcik7CiAgICAgICAgICAgICAg
ICAgICAgIGlmICh2ZXJ0aWNhbFJpZ2h0R2x5cGggPT0gYmFzZUNoYXJhY3RlckdseXBoRGF0YS5n
bHlwaCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gdmVydGljYWxS
aWdodEZvbnREYXRhOworICAgICAgICAgICAgICAgICAgICAgICAgZm9udCA9IHZlcnRpY2FsUmln
aHRGb250OwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIFNp
bXBsZUZvbnREYXRhKiB1cHJpZ2h0Rm9udERhdGEgPSBzaW1wbGVGb250RGF0YS0+dXByaWdodE9y
aWVudGF0aW9uRm9udERhdGEoKS5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgR2x5cGggdXBy
aWdodEdseXBoID0gdXByaWdodEZvbnREYXRhLT5nbHlwaEZvckNoYXJhY3RlcihiYXNlQ2hhcmFj
dGVyKTsKKyAgICAgICAgICAgICAgICAgICAgRm9udCogdXByaWdodEZvbnQgPSBmb250LT51cHJp
Z2h0T3JpZW50YXRpb25Gb250KCkuZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgIEdseXBoIHVw
cmlnaHRHbHlwaCA9IHVwcmlnaHRGb250LT5nbHlwaEZvckNoYXJhY3RlcihiYXNlQ2hhcmFjdGVy
KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHVwcmlnaHRHbHlwaCAhPSBiYXNlQ2hhcmFjdGVy
R2x5cGhEYXRhLmdseXBoKQotICAgICAgICAgICAgICAgICAgICAgICAgc2ltcGxlRm9udERhdGEg
PSB1cHJpZ2h0Rm9udERhdGE7CisgICAgICAgICAgICAgICAgICAgICAgICBmb250ID0gdXByaWdo
dEZvbnQ7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgaWYgKGNvbnN0IFNpbXBsZUZvbnREYXRhKiB2YXJpYW50Rm9udERhdGEg
PSBzaW1wbGVGb250RGF0YS0+dmFyaWFudEZvbnREYXRhKG1fZm9udERlc2NyaXB0aW9uLCB2YXJp
YW50KS5nZXQoKSkKLSAgICAgICAgICAgICAgICBzaW1wbGVGb250RGF0YSA9IHZhcmlhbnRGb250
RGF0YTsKKyAgICAgICAgICAgIGlmIChjb25zdCBGb250KiB2YXJpYW50Rm9udCA9IGZvbnQtPnZh
cmlhbnRGb250KG1fZm9udERlc2NyaXB0aW9uLCB2YXJpYW50KS5nZXQoKSkKKyAgICAgICAgICAg
ICAgICBmb250ID0gdmFyaWFudEZvbnQ7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoc2ltcGxl
Rm9udERhdGEgPT0gYmFzZUNoYXJhY3RlckdseXBoRGF0YS5mb250RGF0YSkKLSAgICAgICAgICAg
IHRyaWVkQmFzZUNoYXJhY3RlckZvbnREYXRhID0gdHJ1ZTsKKyAgICAgICAgaWYgKGZvbnQgPT0g
YmFzZUNoYXJhY3RlckdseXBoRGF0YS5mb250KQorICAgICAgICAgICAgdHJpZWRCYXNlQ2hhcmFj
dGVyRm9udCA9IHRydWU7CiAKLSAgICAgICAgaWYgKHNpbXBsZUZvbnREYXRhLT5jYW5SZW5kZXJD
b21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjaGFyYWN0ZXJzLCBsZW5ndGgpKQotICAgICAgICAg
ICAgcmV0dXJuIHNpbXBsZUZvbnREYXRhOworICAgICAgICBpZiAoZm9udC0+Y2FuUmVuZGVyQ29t
YmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY2hhcmFjdGVycywgbGVuZ3RoKSkKKyAgICAgICAgICAg
IHJldHVybiBmb250OwogICAgIH0KIAotICAgIGlmICghdHJpZWRCYXNlQ2hhcmFjdGVyRm9udERh
dGEgJiYgYmFzZUNoYXJhY3RlckdseXBoRGF0YS5mb250RGF0YSAmJiBiYXNlQ2hhcmFjdGVyR2x5
cGhEYXRhLmZvbnREYXRhLT5jYW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjaGFy
YWN0ZXJzLCBsZW5ndGgpKQotICAgICAgICByZXR1cm4gYmFzZUNoYXJhY3RlckdseXBoRGF0YS5m
b250RGF0YTsKKyAgICBpZiAoIXRyaWVkQmFzZUNoYXJhY3RlckZvbnQgJiYgYmFzZUNoYXJhY3Rl
ckdseXBoRGF0YS5mb250ICYmIGJhc2VDaGFyYWN0ZXJHbHlwaERhdGEuZm9udC0+Y2FuUmVuZGVy
Q29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY2hhcmFjdGVycywgbGVuZ3RoKSkKKyAgICAgICAg
cmV0dXJuIGJhc2VDaGFyYWN0ZXJHbHlwaERhdGEuZm9udDsKIAotICAgIHJldHVybiBTaW1wbGVG
b250RGF0YTo6c3lzdGVtRmFsbGJhY2soKTsKKyAgICByZXR1cm4gRm9udDo6c3lzdGVtRmFsbGJh
Y2soKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJl
ZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcAkocmV2aXNp
b24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUv
Rm9udENhY2hlRnJlZVR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw5ICsyMiw5IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCiAKKyNpbmNsdWRlICJG
b250LmgiCiAjaW5jbHVkZSAiT3duUHRyQ2Fpcm8uaCIKICNpbmNsdWRlICJSZWZQdHJDYWlyby5o
IgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5jbHVkZSAiVVRGMTZVQ2hhcjMySXRl
cmF0b3IuaCIKICNpbmNsdWRlIDxjYWlyby1mdC5oPgogI2luY2x1ZGUgPGNhaXJvLmg+CkBAIC04
MCw3ICs4MCw3IEBAIEZjUGF0dGVybiogZmluZEJlc3RGb250R2l2ZW5GYWxsYmFja3MoY28KICAg
ICByZXR1cm4gRmNGb250U2V0TWF0Y2goMCwgc2V0cywgMSwgcGF0dGVybiwgJmZvbnRDb25maWdS
ZXN1bHQpOwogfQogCi1SZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6c3lzdGVtRmFs
bGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGNv
bnN0IFNpbXBsZUZvbnREYXRhKiBvcmlnaW5hbEZvbnREYXRhLCBib29sLCBjb25zdCBVQ2hhciog
Y2hhcmFjdGVycywgaW50IGxlbmd0aCkKK1JlZlB0cjxGb250PiBGb250Q2FjaGU6OnN5c3RlbUZh
bGxiYWNrRm9yQ2hhcmFjdGVycyhjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBj
b25zdCBGb250KiBvcmlnaW5hbEZvbnREYXRhLCBib29sLCBjb25zdCBVQ2hhciogY2hhcmFjdGVy
cywgaW50IGxlbmd0aCkKIHsKICAgICBSZWZQdHI8RmNQYXR0ZXJuPiBwYXR0ZXJuID0gYWRvcHRS
ZWYoY3JlYXRlRm9udENvbmZpZ1BhdHRlcm5Gb3JDaGFyYWN0ZXJzKGNoYXJhY3RlcnMsIGxlbmd0
aCkpOwogICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnREYXRhID0gb3JpZ2luYWxGb250
RGF0YS0+cGxhdGZvcm1EYXRhKCk7CkBAIC05OSw3ICs5OSw3IEBAIFJlZlB0cjxTaW1wbGVGb250
RGF0YT4gRm9udENhY2hlOjpzeXN0ZW0KICAgICByZXR1cm4gZm9udEZvclBsYXRmb3JtRGF0YShh
bHRlcm5hdGVGb250RGF0YSk7CiB9CiAKLVJlZjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjps
YXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0
aW9uKQorUmVmPEZvbnQ+IEZvbnRDYWNoZTo6bGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBG
b250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikKIHsKICAgICAvLyBXZSB3YW50IHRvIHJl
dHVybiBhIGZhbGxiYWNrIGZvbnQgaGVyZSwgb3RoZXJ3aXNlIHRoZSBsb2dpYyBwcmV2ZW50aW5n
IEZvbnRDb25maWcKICAgICAvLyBtYXRjaGVzIGZvciBub24tZmFsbGJhY2sgZm9udHMgbWlnaHQg
cmV0dXJuIDAuIFNlZSBpc0ZhbGxiYWNrRm9udEFsbG93ZWQuCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9HbHlwaFBhZ2VUcmVlTm9kZUZyZWVUeXBlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlw
ZS9HbHlwaFBhZ2VUcmVlTm9kZUZyZWVUeXBlLmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvR2x5cGhQYWdlVHJlZU5vZGVG
cmVlVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJHbHlwaFBhZ2UuaCIKIAotI2luY2x1ZGUgIlNpbXBsZUZvbnRE
YXRhLmgiCisjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIlVURjE2VUNoYXIzMkl0ZXJhdG9y
LmgiCiAjaW5jbHVkZSA8Y2Fpcm8tZnQuaD4KICNpbmNsdWRlIDxjYWlyby5oPgpAQCAtMzksNyAr
MzksNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wgR2x5cGhQYWdlOjpmaWxsKHVu
c2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBi
dWZmZXJMZW5ndGgsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSkKK2Jvb2wgR2x5cGhQ
YWdlOjpmaWxsKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVy
LCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IEZvbnQqIGZvbnREYXRhKQogewogICAgIGNh
aXJvX3NjYWxlZF9mb250X3QqIHNjYWxlZEZvbnQgPSBmb250RGF0YS0+cGxhdGZvcm1EYXRhKCku
c2NhbGVkRm9udCgpOwogICAgIEFTU0VSVChzY2FsZWRGb250KTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL1NpbXBsZUZvbnREYXRhRnJlZVR5cGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBl
L1NpbXBsZUZvbnREYXRhRnJlZVR5cGUuY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9TaW1wbGVGb250RGF0YUZyZWVUeXBl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogICovCiAKICNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgorI2luY2x1ZGUgIkZvbnQuaCIK
IAogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgpA
QCAtNTEsNyArNTEsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgU2ltcGxlRm9u
dERhdGE6OnBsYXRmb3JtSW5pdCgpCit2b2lkIEZvbnQ6OnBsYXRmb3JtSW5pdCgpCiB7CiAgICAg
aWYgKCFtX3BsYXRmb3JtRGF0YS5tX3NpemUpCiAgICAgICAgIHJldHVybjsKQEAgLTkzLDE3ICs5
MywxNyBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUluaXQoKQogICAgIG1fc3ludGhl
dGljQm9sZE9mZnNldCA9IG1fcGxhdGZvcm1EYXRhLnN5bnRoZXRpY0JvbGQoKSA/IDEuMGYgOiAw
LmY7CiB9CiAKLXZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpCit2
b2lkIEZvbnQ6OnBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpCiB7CiAgICAgbV9hdmdDaGFyV2lkdGgg
PSAwLmY7CiAgICAgbV9tYXhDaGFyV2lkdGggPSAwLmY7CiAgICAgaW5pdENoYXJXaWR0aHMoKTsK
IH0KIAotUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OnBsYXRmb3Jt
Q3JlYXRlU2NhbGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24sIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAorUGFzc1JlZlB0cjxGb250PiBGb250OjpwbGF0
Zm9ybUNyZWF0ZVNjYWxlZEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2Ny
aXB0aW9uLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3QKIHsKICAgICBBU1NFUlQobV9wbGF0Zm9y
bURhdGEuc2NhbGVkRm9udCgpKTsKLSAgICByZXR1cm4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZShG
b250UGxhdGZvcm1EYXRhKGNhaXJvX3NjYWxlZF9mb250X2dldF9mb250X2ZhY2UobV9wbGF0Zm9y
bURhdGEuc2NhbGVkRm9udCgpKSwKKyAgICByZXR1cm4gRm9udDo6Y3JlYXRlKEZvbnRQbGF0Zm9y
bURhdGEoY2Fpcm9fc2NhbGVkX2ZvbnRfZ2V0X2ZvbnRfZmFjZShtX3BsYXRmb3JtRGF0YS5zY2Fs
ZWRGb250KCkpLAogICAgICAgICBzY2FsZUZhY3RvciAqIGZvbnREZXNjcmlwdGlvbi5jb21wdXRl
ZFNpemUoKSwKICAgICAgICAgbV9wbGF0Zm9ybURhdGEuc3ludGhldGljQm9sZCgpLAogICAgICAg
ICBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNPYmxpcXVlKCksCkBAIC0xMTEsMTIgKzExMSwxMiBA
QCBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0CiAgICAgICAgIGlzQ3Vz
dG9tRm9udCgpLCBmYWxzZSk7CiB9CiAKLXZvaWQgU2ltcGxlRm9udERhdGE6OmRldGVybWluZVBp
dGNoKCkKK3ZvaWQgRm9udDo6ZGV0ZXJtaW5lUGl0Y2goKQogewogICAgIG1fdHJlYXRBc0ZpeGVk
UGl0Y2ggPSBtX3BsYXRmb3JtRGF0YS5pc0ZpeGVkUGl0Y2goKTsKIH0KIAotRmxvYXRSZWN0IFNp
bXBsZUZvbnREYXRhOjpwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAor
RmxvYXRSZWN0IEZvbnQ6OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0
CiB7CiAgICAgaWYgKCFtX3BsYXRmb3JtRGF0YS5zaXplKCkpCiAgICAgICAgIHJldHVybiBGbG9h
dFJlY3QoKTsKQEAgLTEzMSw3ICsxMzEsNyBAQCBGbG9hdFJlY3QgU2ltcGxlRm9udERhdGE6OnBs
YXRmb3JtQm91bmRzCiAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwogfQogCi1mbG9hdCBTaW1wbGVG
b250RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAorZmxvYXQg
Rm9udDo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAogewogICAgIGlm
ICghbV9wbGF0Zm9ybURhdGEuc2l6ZSgpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTE0Nyw3ICsx
NDcsNyBAQCBmbG9hdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdsCiB9CiAKICNp
ZiBVU0UoSEFSRkJVWlopCi1ib29sIFNpbXBsZUZvbnREYXRhOjpjYW5SZW5kZXJDb21iaW5pbmdD
aGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkg
Y29uc3QKK2Jvb2wgRm9udDo6Y2FuUmVuZGVyQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpIGNvbnN0CiB7CiAgICAgaWYgKCFt
X2NvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlU3VwcG9ydCkKICAgICAgICAgbV9jb21iaW5pbmdD
aGFyYWN0ZXJTZXF1ZW5jZVN1cHBvcnQgPSBzdGQ6Om1ha2VfdW5pcXVlPEhhc2hNYXA8U3RyaW5n
LCBib29sPj4oKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZi
dXp6L0hhcmZCdXp6RmFjZUNhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6ekZhY2VDYWlyby5jcHAJKHJldmlzaW9u
IDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hh
cmZCdXp6RmFjZUNhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTAgKzMyLDEwIEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSGFyZkJ1enpGYWNlLmgiCiAKKyNpbmNsdWRl
ICJGb250LmgiCiAjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgogI2luY2x1ZGUgIkdseXBo
QnVmZmVyLmgiCiAjaW5jbHVkZSAiSGFyZkJ1enpTaGFwZXIuaCIKLSNpbmNsdWRlICJTaW1wbGVG
b250RGF0YS5oIgogI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgogI2luY2x1ZGUgPGNhaXJvLWZ0
Lmg+CiAjaW5jbHVkZSA8Y2Fpcm8uaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6RmFjZUNvcmVUZXh0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6ekZhY2VDb3Jl
VGV4dC5jcHAJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6RmFjZUNvcmVUZXh0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzEsOSArMzEsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkhhcmZCdXp6
RmFjZS5oIgogCisjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEu
aCIKICNpbmNsdWRlICJIYXJmQnV6elNoYXBlci5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRh
LmgiCiAjaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+
CiAjaW5jbHVkZSA8aGIuaD4KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2hhcGVyLmNwcAkocmV2aXNp
b24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enov
SGFyZkJ1enpTaGFwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3IEBAIHN0YXRp
YyBpbmxpbmUgZmxvYXQgaGFyZkJ1enpQb3NpdGlvblRvRmwKICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8ZmxvYXQ+KHZhbHVlKSAvICgxIDw8IDE2KTsKIH0KIAotSGFyZkJ1enpTaGFwZXI6OkhhcmZC
dXp6UnVuOjpIYXJmQnV6elJ1bihjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsIHVuc2ln
bmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIG51bUNoYXJhY3RlcnMsIFRleHREaXJlY3Rpb24gZGly
ZWN0aW9uLCBoYl9zY3JpcHRfdCBzY3JpcHQpCitIYXJmQnV6elNoYXBlcjo6SGFyZkJ1enpSdW46
OkhhcmZCdXp6UnVuKGNvbnN0IEZvbnQqIGZvbnREYXRhLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1
bnNpZ25lZCBudW1DaGFyYWN0ZXJzLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgaGJfc2NyaXB0
X3Qgc2NyaXB0KQogICAgIDogbV9mb250RGF0YShmb250RGF0YSkKICAgICAsIG1fc3RhcnRJbmRl
eChzdGFydEluZGV4KQogICAgICwgbV9udW1DaGFyYWN0ZXJzKG51bUNoYXJhY3RlcnMpCkBAIC00
MDEsNyArNDAxLDcgQEAgYm9vbCBIYXJmQnV6elNoYXBlcjo6Y29sbGVjdEhhcmZCdXp6UnVucwog
ICAgIGlmICghaXRlcmF0b3IuY29uc3VtZShjaGFyYWN0ZXIsIGNsdXN0ZXJMZW5ndGgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBjb25zdCBTaW1wbGVGb250RGF0YSogbmV4dEZvbnRE
YXRhID0gbV9mb250LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyLCBmYWxzZSkuZm9u
dERhdGE7CisgICAgY29uc3QgRm9udCogbmV4dEZvbnREYXRhID0gbV9mb250LT5nbHlwaERhdGFG
b3JDaGFyYWN0ZXIoY2hhcmFjdGVyLCBmYWxzZSkuZm9udDsKICAgICBVRXJyb3JDb2RlIGVycm9y
Q29kZSA9IFVfWkVST19FUlJPUjsKICAgICBVU2NyaXB0Q29kZSBuZXh0U2NyaXB0ID0gdXNjcmlw
dF9nZXRTY3JpcHQoY2hhcmFjdGVyLCAmZXJyb3JDb2RlKTsKICAgICBpZiAoVV9GQUlMVVJFKGVy
cm9yQ29kZSkpCkBAIC00MDksOSArNDA5LDkgQEAgYm9vbCBIYXJmQnV6elNoYXBlcjo6Y29sbGVj
dEhhcmZCdXp6UnVucwogCiAgICAgZG8gewogICAgICAgICBjb25zdCBVQ2hhciogY3VycmVudENo
YXJhY3RlclBvc2l0aW9uID0gaXRlcmF0b3IuY2hhcmFjdGVycygpOwotICAgICAgICBjb25zdCBT
aW1wbGVGb250RGF0YSogY3VycmVudEZvbnREYXRhID0gbmV4dEZvbnREYXRhOworICAgICAgICBj
b25zdCBGb250KiBjdXJyZW50Rm9udERhdGEgPSBuZXh0Rm9udERhdGE7CiAgICAgICAgIGlmICgh
Y3VycmVudEZvbnREYXRhKQotICAgICAgICAgICAgY3VycmVudEZvbnREYXRhID0gJm1fZm9udC0+
cHJpbWFyeUZvbnREYXRhKCk7CisgICAgICAgICAgICBjdXJyZW50Rm9udERhdGEgPSAmbV9mb250
LT5wcmltYXJ5Rm9udCgpOwogICAgICAgICBVU2NyaXB0Q29kZSBjdXJyZW50U2NyaXB0ID0gbmV4
dFNjcmlwdDsKIAogICAgICAgICBmb3IgKGl0ZXJhdG9yLmFkdmFuY2UoY2x1c3Rlckxlbmd0aCk7
IGl0ZXJhdG9yLmNvbnN1bWUoY2hhcmFjdGVyLCBjbHVzdGVyTGVuZ3RoKTsgaXRlcmF0b3IuYWR2
YW5jZShjbHVzdGVyTGVuZ3RoKSkgewpAQCAtNDY3LDcgKzQ2Nyw3IEBAIGJvb2wgSGFyZkJ1enpT
aGFwZXI6OnNoYXBlSGFyZkJ1enpSdW5zKGIKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9oYXJmQnV6elJ1bnMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgdW5zaWduZWQgcnVuSW5kZXgg
PSBtX3J1bi5ydGwoKSA/IG1faGFyZkJ1enpSdW5zLnNpemUoKSAtIGkgLSAxIDogaTsKICAgICAg
ICAgSGFyZkJ1enpSdW4qIGN1cnJlbnRSdW4gPSBtX2hhcmZCdXp6UnVuc1tydW5JbmRleF0uZ2V0
KCk7Ci0gICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBjdXJyZW50Rm9udERhdGEgPSBjdXJy
ZW50UnVuLT5mb250RGF0YSgpOworICAgICAgICBjb25zdCBGb250KiBjdXJyZW50Rm9udERhdGEg
PSBjdXJyZW50UnVuLT5mb250RGF0YSgpOwogICAgICAgICBpZiAoY3VycmVudEZvbnREYXRhLT5p
c1NWR0ZvbnQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtNTE0LDcgKzUxNCw3
IEBAIGJvb2wgSGFyZkJ1enpTaGFwZXI6OnNoYXBlSGFyZkJ1enpSdW5zKGIKIAogdm9pZCBIYXJm
QnV6elNoYXBlcjo6c2V0R2x5cGhQb3NpdGlvbnNGb3JIYXJmQnV6elJ1bihIYXJmQnV6elJ1biog
Y3VycmVudFJ1biwgaGJfYnVmZmVyX3QqIGhhcmZCdXp6QnVmZmVyKQogewotICAgIGNvbnN0IFNp
bXBsZUZvbnREYXRhKiBjdXJyZW50Rm9udERhdGEgPSBjdXJyZW50UnVuLT5mb250RGF0YSgpOwor
ICAgIGNvbnN0IEZvbnQqIGN1cnJlbnRGb250RGF0YSA9IGN1cnJlbnRSdW4tPmZvbnREYXRhKCk7
CiAgICAgaGJfZ2x5cGhfaW5mb190KiBnbHlwaEluZm9zID0gaGJfYnVmZmVyX2dldF9nbHlwaF9p
bmZvcyhoYXJmQnV6ekJ1ZmZlciwgMCk7CiAgICAgaGJfZ2x5cGhfcG9zaXRpb25fdCogZ2x5cGhQ
b3NpdGlvbnMgPSBoYl9idWZmZXJfZ2V0X2dseXBoX3Bvc2l0aW9ucyhoYXJmQnV6ekJ1ZmZlciwg
MCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hh
cmZCdXp6U2hhcGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXIuaAkocmV2aXNpb24gMTc4ODU3KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtNDQsOCArNDQsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
K2NsYXNzIEZvbnQ7CiBjbGFzcyBGb250Q2FzY2FkZTsKLWNsYXNzIFNpbXBsZUZvbnREYXRhOwog
CiBjbGFzcyBIYXJmQnV6elNoYXBlciB7CiBwdWJsaWM6CkBAIC02Niw3ICs2Niw3IEBAIHB1Ymxp
YzoKIHByaXZhdGU6CiAgICAgY2xhc3MgSGFyZkJ1enpSdW4gewogICAgIHB1YmxpYzoKLSAgICAg
ICAgSGFyZkJ1enpSdW4oY29uc3QgU2ltcGxlRm9udERhdGEqLCB1bnNpZ25lZCBzdGFydEluZGV4
LCB1bnNpZ25lZCBudW1DaGFyYWN0ZXJzLCBUZXh0RGlyZWN0aW9uLCBoYl9zY3JpcHRfdCk7Cisg
ICAgICAgIEhhcmZCdXp6UnVuKGNvbnN0IEZvbnQqLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNp
Z25lZCBudW1DaGFyYWN0ZXJzLCBUZXh0RGlyZWN0aW9uLCBoYl9zY3JpcHRfdCk7CiAKICAgICAg
ICAgdm9pZCBhcHBseVNoYXBlUmVzdWx0KGhiX2J1ZmZlcl90Kik7CiAgICAgICAgIHZvaWQgc2V0
R2x5cGhBbmRQb3NpdGlvbnModW5zaWduZWQgaW5kZXgsIHVpbnQxNl90IGdseXBoSWQsIGZsb2F0
IGFkdmFuY2UsIGZsb2F0IG9mZnNldFgsIGZsb2F0IG9mZnNldFkpOwpAQCAtNzUsNyArNzUsNyBA
QCBwcml2YXRlOgogICAgICAgICBpbnQgY2hhcmFjdGVySW5kZXhGb3JYUG9zaXRpb24oZmxvYXQg
dGFyZ2V0WCk7CiAgICAgICAgIGZsb2F0IHhQb3NpdGlvbkZvck9mZnNldCh1bnNpZ25lZCBvZmZz
ZXQpOwogCi0gICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSgpIHsgcmV0dXJu
IG1fZm9udERhdGE7IH0KKyAgICAgICAgY29uc3QgRm9udCogZm9udERhdGEoKSB7IHJldHVybiBt
X2ZvbnREYXRhOyB9CiAgICAgICAgIHVuc2lnbmVkIHN0YXJ0SW5kZXgoKSBjb25zdCB7IHJldHVy
biBtX3N0YXJ0SW5kZXg7IH0KICAgICAgICAgdW5zaWduZWQgbnVtQ2hhcmFjdGVycygpIGNvbnN0
IHsgcmV0dXJuIG1fbnVtQ2hhcmFjdGVyczsgfQogICAgICAgICB1bnNpZ25lZCBudW1HbHlwaHMo
KSBjb25zdCB7IHJldHVybiBtX251bUdseXBoczsgfQpAQCAtODgsNyArODgsNyBAQCBwcml2YXRl
OgogICAgICAgICBoYl9zY3JpcHRfdCBzY3JpcHQoKSB7IHJldHVybiBtX3NjcmlwdDsgfQogCiAg
ICAgcHJpdmF0ZToKLSAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIG1fZm9udERhdGE7Cisg
ICAgICAgIGNvbnN0IEZvbnQqIG1fZm9udERhdGE7CiAgICAgICAgIHVuc2lnbmVkIG1fc3RhcnRJ
bmRleDsKICAgICAgICAgc2l6ZV90IG1fbnVtQ2hhcmFjdGVyczsKICAgICAgICAgdW5zaWduZWQg
bV9udW1HbHlwaHM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3Mv
Rm9udENhY2hlSU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2lvcy9Gb250Q2FjaGVJT1MubW0JKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9Gb250Q2FjaGVJT1MubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTczLDcgKzczLDcgQEAgc3RhdGljIENGQ2hhcmFjdGVyU2V0UmVmIHBob25lRmFsbGJh
Y2tDaAogICAgIHJldHVybiBjaGFyYWN0ZXJTZXQ7CiB9CiAKLVBhc3NSZWZQdHI8U2ltcGxlRm9u
dERhdGE+IEZvbnRDYWNoZTo6Z2V0U3lzdGVtRm9udEZhbGxiYWNrRm9yQ2hhcmFjdGVycyhjb25z
dCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBTaW1wbGVGb250RGF0YSogb3Jp
Z2luYWxGb250RGF0YSwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCitQYXNz
UmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6Z2V0U3lzdGVtRm9udEZhbGxiYWNrRm9yQ2hhcmFjdGVy
cyhjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBGb250KiBvcmlnaW5h
bEZvbnREYXRhLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKIHsKICAgICBj
b25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEgPSBvcmlnaW5hbEZvbnREYXRhLT5w
bGF0Zm9ybURhdGEoKTsKICAgICBDVEZvbnRSZWYgY3RGb250ID0gcGxhdGZvcm1EYXRhLmZvbnQo
KTsKQEAgLTE5NCw3ICsxOTQsNyBAQCBzdGF0aWMgTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQgbGFuZ3Vh
Z2VTcGVjCiAgICAgcmV0dXJuIExhbmd1YWdlU3BlY2lmaWNGb250OjpOb25lOwogfQogCi1SZWZQ
dHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6c3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJz
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IFNpbXBsZUZvbnREYXRh
KiBvcmlnaW5hbEZvbnREYXRhLCBib29sLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxl
bmd0aCkKK1JlZlB0cjxGb250PiBGb250Q2FjaGU6OnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVy
cyhjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBGb250KiBvcmlnaW5h
bEZvbnREYXRhLCBib29sLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKIHsK
ICAgICAvLyBVbmxpa2UgT1MgWCwgb3VyIGZhbGxiYWNrIGZvbnQgb24gaVBob25lIGlzIEFyaWFs
IFVuaWNvZGUsIHdoaWNoIGRvZXNuJ3QgaGF2ZSBzb21lIGFwcGxlLXNwZWNpZmljIGdseXBocyBs
aWtlIEY4RkYuCiAgICAgLy8gRmFsbCBiYWNrIHRvIHRoZSBBcHBsZSBGYWxsYmFjayBmb250IGlu
IHRoaXMgY2FzZS4KQEAgLTIyMCw3ICsyMjAsNyBAQCBSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZv
bnRDYWNoZTo6c3lzdGVtCiAgICAgaWYgKGxlbmd0aCA+IDApCiAgICAgICAgIGxhbmd1YWdlU3Bl
Y2lmaWNGb250ID0gbGFuZ3VhZ2VTcGVjaWZpY0ZhbGxiYWNrRm9udChjKTsKIAotICAgIFJlZlB0
cjxTaW1wbGVGb250RGF0YT4gc2ltcGxlRm9udERhdGE7CisgICAgUmVmUHRyPEZvbnQ+IGZvbnQ7
CiAKICAgICBzd2l0Y2ggKGxhbmd1YWdlU3BlY2lmaWNGb250KSB7CiAgICAgY2FzZSBMYW5ndWFn
ZVNwZWNpZmljRm9udDo6Q2hpbmVzZUphcGFuZXNlOiB7CkBAIC0yOTgsNDMgKzI5OCw0MyBAQCBS
ZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6c3lzdGVtCiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KIAotICAgICAgICBzaW1wbGVGb250RGF0YSA9IGZvbnRGb3JGYW1pbHkoZGVzY3Jp
cHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gKmNqa0JvbGRb
cHJlZmVycmVkQ0pLRm9udF0gOiAqY2prUGxhaW5bcHJlZmVycmVkQ0pLRm9udF0sIGZhbHNlKTsK
KyAgICAgICAgZm9udCA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJv
bGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gKmNqa0JvbGRbcHJlZmVycmVkQ0pLRm9udF0gOiAq
Y2prUGxhaW5bcHJlZmVycmVkQ0pLRm9udF0sIGZhbHNlKTsKICAgICAgICAgYm9vbCB1c2VTZWNv
bmRhcnlGb250ID0gdHJ1ZTsKLSAgICAgICAgaWYgKHNpbXBsZUZvbnREYXRhKSB7CisgICAgICAg
IGlmIChmb250KSB7CiAgICAgICAgICAgICBDR0dseXBoIGdseXBoc1syXTsKICAgICAgICAgICAg
IC8vIENHRm9udEdldEdseXBoc0ZvclVuaWNoYXJzIHRha2VzIFVURi0xNiBidWZmZXIuIFNob3Vs
ZCBvbmx5IGJlIDEgY29kZXBvaW50IGJ1dCBzaW5jZSB3ZSBtYXkgcGFzcyBpbiB0d28gVVRGLTE2
IGNoYXJhY3RlcnMsCiAgICAgICAgICAgICAvLyBtYWtlIHJvb20gZm9yIDIgZ2x5cGhzIGp1c3Qg
dG8gYmUgc2FmZS4KLSAgICAgICAgICAgIENHRm9udEdldEdseXBoc0ZvclVuaWNoYXJzKHNpbXBs
ZUZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5jZ0ZvbnQoKSwgY2hhcmFjdGVycywgZ2x5cGhzLCBs
ZW5ndGgpOworICAgICAgICAgICAgQ0dGb250R2V0R2x5cGhzRm9yVW5pY2hhcnMoZm9udC0+cGxh
dGZvcm1EYXRhKCkuY2dGb250KCksIGNoYXJhY3RlcnMsIGdseXBocywgbGVuZ3RoKTsKIAogICAg
ICAgICAgICAgdXNlU2Vjb25kYXJ5Rm9udCA9IChnbHlwaHNbMF0gPT0gMCk7CiAgICAgICAgIH0K
IAogICAgICAgICBpZiAodXNlU2Vjb25kYXJ5Rm9udCkKLSAgICAgICAgICAgIHNpbXBsZUZvbnRE
YXRhID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlw
dGlvbi53ZWlnaHQoKSkgPyAqY2prQm9sZFtzZWNvbmRhcnlDSktGb250XSA6ICpjamtQbGFpbltz
ZWNvbmRhcnlDSktGb250XSwgZmFsc2UpOworICAgICAgICAgICAgZm9udCA9IGZvbnRGb3JGYW1p
bHkoZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8g
KmNqa0JvbGRbc2Vjb25kYXJ5Q0pLRm9udF0gOiAqY2prUGxhaW5bc2Vjb25kYXJ5Q0pLRm9udF0s
IGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgTGFuZ3VhZ2VTcGVjaWZp
Y0ZvbnQ6OktvcmVhbjogewogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3Ry
aW5nPiBrb3JlYW5QbGFpbigiQXBwbGVTREdvdGhpY05lby1NZWRpdW0iLCBBdG9taWNTdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0
b21pY1N0cmluZz4ga29yZWFuQm9sZCgiQXBwbGVTREdvdGhpY05lby1Cb2xkIiwgQXRvbWljU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgICAgIHNpbXBsZUZvbnREYXRhID0gZm9u
dEZvckZhbWlseShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWln
aHQoKSkgPyBrb3JlYW5Cb2xkIDoga29yZWFuUGxhaW4sIGZhbHNlKTsKKyAgICAgICAgZm9udCA9
IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24u
d2VpZ2h0KCkpID8ga29yZWFuQm9sZCA6IGtvcmVhblBsYWluLCBmYWxzZSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICBjYXNlIExhbmd1YWdlU3BlY2lmaWNGb250OjpDeXJpbGxpYzogewog
ICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBjeXJpbGxpY1BsYWlu
KCJIZWx2ZXRpY2FOZXVlIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CiAg
ICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGN5cmlsbGljQm9sZCgi
SGVsdmV0aWNhTmV1ZS1Cb2xkIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7
Ci0gICAgICAgIHNpbXBsZUZvbnREYXRhID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgaXNG
b250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBjeXJpbGxpY0JvbGQgOiBjeXJp
bGxpY1BsYWluLCBmYWxzZSk7CisgICAgICAgIGZvbnQgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0
aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/IGN5cmlsbGljQm9s
ZCA6IGN5cmlsbGljUGxhaW4sIGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNh
c2UgTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6OkFyYWJpYzogewogICAgICAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBhcmFiaWNQbGFpbigiR2VlemFQcm8iLCBBdG9taWNTdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PEF0b21pY1N0cmluZz4gYXJhYmljQm9sZCgiR2VlemFQcm8tQm9sZCIsIEF0b21pY1N0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgICAgICBzaW1wbGVGb250RGF0YSA9IGZvbnRGb3JG
YW1pbHkoZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkp
ID8gYXJhYmljQm9sZCA6IGFyYWJpY1BsYWluLCBmYWxzZSk7CisgICAgICAgIGZvbnQgPSBmb250
Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdo
dCgpKSA/IGFyYWJpY0JvbGQgOiBhcmFiaWNQbGFpbiwgZmFsc2UpOwogICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgY2FzZSBMYW5ndWFnZVNwZWNpZmljRm9udDo6SGVicmV3OiB7CiAgICAgICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGhlYnJld1BsYWluKCJBcmlhbEhl
YnJldyIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwogICAgICAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBoZWJyZXdCb2xkKCJBcmlhbEhlYnJldy1C
b2xkIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgICAgIHNpbXBs
ZUZvbnREYXRhID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChk
ZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBoZWJyZXdCb2xkIDogaGVicmV3UGxhaW4sIGZhbHNlKTsK
KyAgICAgICAgZm9udCA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJv
bGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gaGVicmV3Qm9sZCA6IGhlYnJld1BsYWluLCBmYWxz
ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIExhbmd1YWdlU3BlY2lmaWNGb250
OjpJbmRpYzogewpAQCAtMzkwLDM2ICszOTAsMzYgQEAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBG
b250Q2FjaGU6OnN5c3RlbQogICAgICAgICBpZiAoaW5kaWNQYWdlT3JkZXJJbmRleCA8IChzaXpl
b2YoaW5kaWNVbmljb2RlUGFnZUZvbnRzKSAvIHNpemVvZihBdG9taWNTdHJpbmcqKSkpIHsKICAg
ICAgICAgICAgIEF0b21pY1N0cmluZyogaW5kaWNGb250U3RyaW5nID0gaXNGb250V2VpZ2h0Qm9s
ZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBpbmRpY1VuaWNvZGVQYWdlRm9udHNCb2xkW2luZGlj
UGFnZU9yZGVySW5kZXhdIDogaW5kaWNVbmljb2RlUGFnZUZvbnRzW2luZGljUGFnZU9yZGVySW5k
ZXhdOwogICAgICAgICAgICAgaWYgKGluZGljRm9udFN0cmluZykKLSAgICAgICAgICAgICAgICBz
aW1wbGVGb250RGF0YSA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sICppbmRpY0ZvbnRTdHJp
bmcsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBmb250ID0gZm9udEZvckZhbWlseShkZXNjcmlw
dGlvbiwgKmluZGljRm9udFN0cmluZywgZmFsc2UpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFr
OwogICAgIH0KICAgICBjYXNlIExhbmd1YWdlU3BlY2lmaWNGb250OjpUaGFpOiB7CiAgICAgICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHRoYWlQbGFpbigiVGhvbmJ1cmki
LCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKICAgICAgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gdGhhaUJvbGQoIlRob25idXJpLUJvbGQiLCBBdG9t
aWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAgc2ltcGxlRm9udERhdGEg
PSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9u
LndlaWdodCgpKSA/IHRoYWlCb2xkIDogdGhhaVBsYWluLCBmYWxzZSk7CisgICAgICAgIGZvbnQg
PSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9u
LndlaWdodCgpKSA/IHRoYWlCb2xkIDogdGhhaVBsYWluLCBmYWxzZSk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KICAgICBjYXNlIExhbmd1YWdlU3BlY2lmaWNGb250OjpUaWJldGFuOiB7CiAgICAg
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHRpYmV0YW5QbGFpbigiS2Fp
bGFzYSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwogICAgICAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiB0aWJldGFuQm9sZCgiS2FpbGFzYS1Cb2xk
IiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgICAgIHNpbXBsZUZv
bnREYXRhID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNj
cmlwdGlvbi53ZWlnaHQoKSkgPyB0aWJldGFuQm9sZCA6IHRpYmV0YW5QbGFpbiwgZmFsc2UpOwor
ICAgICAgICBmb250ID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9s
ZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyB0aWJldGFuQm9sZCA6IHRpYmV0YW5QbGFpbiwgZmFs
c2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBMYW5ndWFnZVNwZWNpZmljRm9u
dDo6Q2FuYWRpYW5BYm9yaWdpbmFsU3lsbGFiaWM6IHsKICAgICAgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPEF0b21pY1N0cmluZz4gY2FzUGxhaW4oIkV1cGhlbWlhVUNBUyIsIEF0b21pY1N0cmlu
Zzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
QXRvbWljU3RyaW5nPiBjYXNCb2xkKCJFdXBoZW1pYVVDQVMtQm9sZCIsIEF0b21pY1N0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgICAgICBzaW1wbGVGb250RGF0YSA9IGZvbnRGb3JG
YW1pbHkoZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkp
ID8gY2FzQm9sZCA6IGNhc1BsYWluLCBmYWxzZSk7CisgICAgICAgIGZvbnQgPSBmb250Rm9yRmFt
aWx5KGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/
IGNhc0JvbGQgOiBjYXNQbGFpbiwgZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
Y2FzZSBMYW5ndWFnZVNwZWNpZmljRm9udDo6S2htZXI6IHsKICAgICAgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPEF0b21pY1N0cmluZz4ga2htZXIoIktobWVyU2FuZ2FtTU4iLCBBdG9taWNTdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAgc2ltcGxlRm9udERhdGEgPSBmb250
Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBraG1lciwgZmFsc2UpOworICAgICAgICBmb250ID0gZm9u
dEZvckZhbWlseShkZXNjcmlwdGlvbiwga2htZXIsIGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogICAgIGNhc2UgTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6OkxhbzogewogICAgICAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBsYW8oIkxhb1NhbmdhbU1OIiwgQXRvbWlj
U3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgICAgIHNpbXBsZUZvbnREYXRhID0g
Zm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgbGFvLCBmYWxzZSk7CisgICAgICAgIGZvbnQgPSBm
b250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBsYW8sIGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogICAgIGRlZmF1bHQ6IHsKQEAgLTQzMCwyNyArNDMwLDI3IEBAIFJlZlB0cjxTaW1wbGVG
b250RGF0YT4gRm9udENhY2hlOjpzeXN0ZW0KICAgICAgICAgICAgICAgICB1c2VFbW9qaUZvbnQg
PSBDRkNoYXJhY3RlclNldElzTG9uZ0NoYXJhY3Rlck1lbWJlcihhcHBsZUNvbG9yRW1vamlDaGFy
YWN0ZXJTZXQoKSwgYyk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHVzZUVtb2ppRm9udCkKLSAg
ICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgYXBw
bGVDb2xvckVtb2ppLCBmYWxzZSk7CisgICAgICAgICAgICBmb250ID0gZm9udEZvckZhbWlseShk
ZXNjcmlwdGlvbiwgYXBwbGVDb2xvckVtb2ppLCBmYWxzZSk7CiAgICAgICAgIGVsc2UgewogICAg
ICAgICAgICAgUmV0YWluUHRyPENURm9udFJlZj4gZmFsbGJhY2tGb250ID0gYWRvcHRDRihDVEZv
bnRDcmVhdGVGb3JDaGFyYWN0ZXJzKG9yaWdpbmFsRm9udERhdGEtPmdldENURm9udCgpLCBjaGFy
YWN0ZXJzLCBsZW5ndGgsIG51bGxwdHIpKTsKICAgICAgICAgICAgIGlmIChSZXRhaW5QdHI8Q0ZT
dHJpbmdSZWY+IGZvdW5kRm9udE5hbWUgPSBhZG9wdENGKENURm9udENvcHlQb3N0U2NyaXB0TmFt
ZShmYWxsYmFja0ZvbnQuZ2V0KCkpKSkKLSAgICAgICAgICAgICAgICBzaW1wbGVGb250RGF0YSA9
IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGZvdW5kRm9udE5hbWUuZ2V0KCksIGZhbHNlKTsK
KyAgICAgICAgICAgICAgICBmb250ID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgZm91bmRG
b250TmFtZS5nZXQoKSwgZmFsc2UpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0K
ICAgICB9CiAKLSAgICBpZiAoc2ltcGxlRm9udERhdGEpCi0gICAgICAgIHJldHVybiBzaW1wbGVG
b250RGF0YS5yZWxlYXNlKCk7CisgICAgaWYgKGZvbnQpCisgICAgICAgIHJldHVybiBmb250LnJl
bGVhc2UoKTsKIAogICAgIHJldHVybiBsYXN0UmVzb3J0RmFsbGJhY2tGb250KGRlc2NyaXB0aW9u
KTsKIH0KIAotUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OnNpbWlsYXJGb250UGxh
dGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCitSZWZQdHI8Rm9u
dD4gRm9udENhY2hlOjpzaW1pbGFyRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0
aW9uKQogewogICAgIC8vIEF0dGVtcHQgdG8gZmluZCBhbiBhcHByb3ByaWF0ZSBmb250IHVzaW5n
IGEgbWF0Y2ggYmFzZWQgb24gdGhlIHByZXNlbmNlIG9mIGtleXdvcmRzIGluCiAgICAgLy8gdGhl
IHJlcXVlc3RlZCBuYW1lcy4gRm9yIGV4YW1wbGUsIHdlJ2xsIG1hdGNoIGFueSBuYW1lIHRoYXQg
Y29udGFpbnMgIkFyYWJpYyIgdG8gR2VlemEgUHJvLgotICAgIFJlZlB0cjxTaW1wbGVGb250RGF0
YT4gc2ltcGxlRm9udERhdGE7CisgICAgUmVmUHRyPEZvbnQ+IGZvbnQ7CiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGRlc2NyaXB0aW9uLmZhbWlseUNvdW50KCk7ICsraSkgewogICAgICAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSA9IGRlc2NyaXB0aW9uLmZhbWlseUF0KGkpOwog
ICAgICAgICBpZiAoZmFtaWx5LmlzRW1wdHkoKSkKQEAgLTQ2MSw3ICs0NjEsNyBAQCBSZWZQdHI8
U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6c2ltaWxhCiAgICAgICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxBdG9taWNTdHJpbmc+IG1lbmxvKCJtZW5sbyIsIEF0b21pY1N0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpOwogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3Ry
aW5nPiBjb3VyaWVyKCJjb3VyaWVyIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJh
bCk7CiAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShmYW1pbHksIG1vbmFjbykgfHwgZXF1
YWxJZ25vcmluZ0Nhc2UoZmFtaWx5LCBtZW5sbykpIHsKLSAgICAgICAgICAgIHNpbXBsZUZvbnRE
YXRhID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgY291cmllcik7CisgICAgICAgICAgICBm
b250ID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgY291cmllcik7CiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgfQogCkBAIC00NjksNyArNDY5LDcgQEAgUmVmUHRyPFNpbXBsZUZv
bnREYXRhPiBGb250Q2FjaGU6OnNpbWlsYQogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
QXRvbWljU3RyaW5nPiBsdWNpZGFHcmFuZGUoImx1Y2lkYSBncmFuZGUiLCBBdG9taWNTdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0
b21pY1N0cmluZz4gdmVyZGFuYSgidmVyZGFuYSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpOwogICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZmFtaWx5LCBsdWNpZGFH
cmFuZGUpKSB7Ci0gICAgICAgICAgICBzaW1wbGVGb250RGF0YSA9IGZvbnRGb3JGYW1pbHkoZGVz
Y3JpcHRpb24sIHZlcmRhbmEpOworICAgICAgICAgICAgZm9udCA9IGZvbnRGb3JGYW1pbHkoZGVz
Y3JpcHRpb24sIHZlcmRhbmEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIApA
QCAtNDc5LDE1ICs0NzksMTYgQEAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OnNp
bWlsYQogICAgICAgICBzdGF0aWMgU3RyaW5nKiBtYXRjaFdvcmRzWzNdID0geyAmYXJhYmljLmdl
dCgpLCAmcGFzaHRvLmdldCgpLCAmdXJkdS5nZXQoKSB9OwogICAgICAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBnZWV6YVBsYWluKCJHZWV6YVBybyIsIEF0b21pY1N0cmlu
Zzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
QXRvbWljU3RyaW5nPiBnZWV6YUJvbGQoIkdlZXphUHJvLUJvbGQiLCBBdG9taWNTdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCAzICYmICFz
aW1wbGVGb250RGF0YTsgKytqKQorICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDMgJiYgIWZv
bnQ7ICsraikgewogICAgICAgICAgICAgaWYgKGZhbWlseS5jb250YWlucygqbWF0Y2hXb3Jkc1tq
XSwgZmFsc2UpKQotICAgICAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gZm9udEZvckZhbWls
eShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBn
ZWV6YUJvbGQgOiBnZWV6YVBsYWluKTsKKyAgICAgICAgICAgICAgICBmb250ID0gZm9udEZvckZh
bWlseShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkg
PyBnZWV6YUJvbGQgOiBnZWV6YVBsYWluKTsKKyAgICAgICAgfQogICAgIH0KIAotICAgIHJldHVy
biBzaW1wbGVGb250RGF0YS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIGZvbnQucmVsZWFzZSgpOwog
fQogCi1SZWY8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6bGFzdFJlc29ydEZhbGxiYWNrRm9u
dChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikKK1JlZjxGb250PiBGb250
Q2FjaGU6Omxhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHRpb24pCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4g
ZmFsbGJhY2tGb250RmFtaWx5KCIuUGhvbmVGYWxsYmFjayIsIEF0b21pY1N0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpOwogICAgIHJldHVybiAqZm9udEZvckZhbWlseShmb250RGVzY3JpcHRp
b24sIGZhbGxiYWNrRm9udEZhbWlseSwgZmFsc2UpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvaW9zL1NpbXBsZUZvbnREYXRhSU9TLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9TaW1wbGVGb250RGF0YUlPUy5tbQko
cmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9z
L1NpbXBsZUZvbnREYXRhSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiAg
Ki8KIAogI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJTaW1wbGVGb250RGF0YS5oIgorI2lt
cG9ydCAiRm9udC5oIgogCiAjaW1wb3J0ICJCbG9ja0V4Y2VwdGlvbnMuaCIKICNpbXBvcnQgIkNv
cmVHcmFwaGljc1NQSS5oIgpAQCAtNjcsNyArNjcsNyBAQCBzdGF0aWMgYm9vbCBmb250SGFzVmVy
dGljYWxHbHlwaHMoQ1RGb250CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFNpbXBsZUZv
bnREYXRhOjpwbGF0Zm9ybUluaXQoKQordm9pZCBGb250OjpwbGF0Zm9ybUluaXQoKQogewogICAg
IG1fc3ludGhldGljQm9sZE9mZnNldCA9IG1fcGxhdGZvcm1EYXRhLm1fc3ludGhldGljQm9sZCA/
IGNlaWxmKG1fcGxhdGZvcm1EYXRhLnNpemUoKSAgLyAyNC4wZikgOiAwLmY7CiAgICAgbV9zcGFj
ZUdseXBoID0gMDsKQEAgLTEyOCw3ICsxMjgsNyBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0
Zm9ybUluaXQoKQogICAgIG1fZm9udE1ldHJpY3Muc2V0TGluZVNwYWNpbmcoMCk7CiB9CiAKLXZv
aWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpCit2b2lkIEZvbnQ6OnBs
YXRmb3JtQ2hhcldpZHRoSW5pdCgpCiB7CiAgICAgbV9hdmdDaGFyV2lkdGggPSAwOwogICAgIG1f
bWF4Q2hhcldpZHRoID0gMDsKQEAgLTEzNywxMiArMTM3LDEyIEBAIHZvaWQgU2ltcGxlRm9udERh
dGE6OnBsYXRmb3JtQ2hhcldpZHRoSW4KICAgICBpbml0Q2hhcldpZHRocygpOwogfQogCi1QYXNz
UmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1DcmVhdGVTY2Fs
ZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBzY2FsZUZhY3RvcikgY29u
c3QKK1Bhc3NSZWZQdHI8Rm9udD4gRm9udDo6cGxhdGZvcm1DcmVhdGVTY2FsZWRGb250KGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYsIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAogewogICAgIGlmIChp
c0N1c3RvbUZvbnQoKSkgewogICAgICAgICBGb250UGxhdGZvcm1EYXRhIHNjYWxlZEZvbnREYXRh
KG1fcGxhdGZvcm1EYXRhKTsKICAgICAgICAgc2NhbGVkRm9udERhdGEubV9zaXplID0gc2NhbGVk
Rm9udERhdGEubV9zaXplICogc2NhbGVGYWN0b3I7Ci0gICAgICAgIHJldHVybiBTaW1wbGVGb250
RGF0YTo6Y3JlYXRlKHNjYWxlZEZvbnREYXRhLCB0cnVlLCBmYWxzZSk7CisgICAgICAgIHJldHVy
biBGb250OjpjcmVhdGUoc2NhbGVkRm9udERhdGEsIHRydWUsIGZhbHNlKTsKICAgICB9CiAKICAg
ICBmbG9hdCBzaXplID0gbV9wbGF0Zm9ybURhdGEuc2l6ZSgpICogc2NhbGVGYWN0b3I7CkBAIC0x
NjcsNyArMTY3LDcgQEAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdAog
ICAgIHJldHVybiBudWxscHRyOwogfQogCi12b2lkIFNpbXBsZUZvbnREYXRhOjpkZXRlcm1pbmVQ
aXRjaCgpCit2b2lkIEZvbnQ6OmRldGVybWluZVBpdGNoKCkKIHsKICAgICBDVEZvbnRSZWYgY3RG
b250ID0gbV9wbGF0Zm9ybURhdGEuZm9udCgpOwogICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSBm
YWxzZTsKQEAgLTE4NCwxMiArMTg0LDEyIEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OmRldGVybWlu
ZVBpdGNoKCkKICAgICB9CiB9CiAKLUNHRm9udFJlbmRlcmluZ1N0eWxlIFNpbXBsZUZvbnREYXRh
OjpyZW5kZXJpbmdTdHlsZSgpIGNvbnN0CitDR0ZvbnRSZW5kZXJpbmdTdHlsZSBGb250OjpyZW5k
ZXJpbmdTdHlsZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGtDR0ZvbnRSZW5kZXJpbmdTdHlsZUFu
dGlhbGlhc2luZyB8IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZVN1YnBpeGVsUG9zaXRpb25pbmcgfCBr
Q0dGb250UmVuZGVyaW5nU3R5bGVTdWJwaXhlbFF1YW50aXphdGlvbiB8IGtDR0ZvbnRBbnRpYWxp
YXNpbmdTdHlsZVVuZmlsdGVyZWQ7CiB9CiAKLWJvb2wgU2ltcGxlRm9udERhdGE6OmFkdmFuY2VG
b3JDb2xvckJpdG1hcEZvbnQoR2x5cGgsIENHU2l6ZSYpIGNvbnN0Citib29sIEZvbnQ6OmFkdmFu
Y2VGb3JDb2xvckJpdG1hcEZvbnQoR2x5cGgsIENHU2l6ZSYpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IGZhbHNlOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Nv
bXBsZXhUZXh0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDE3
ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4
dENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgfQogCi0gICAgZmxvYXQgd2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQg
bGVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMpCisgICAg
ZmxvYXQgd2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBIYXNoU2V0PGNvbnN0IEZv
bnQqPiogZmFsbGJhY2tGb250cykKICAgICB7CiAgICAgICAgIG1fY29udHJvbGxlci0+YWR2YW5j
ZShmcm9tLCAwLCBCeVdob2xlR2x5cGhzLCBmYWxsYmFja0ZvbnRzKTsKICAgICAgICAgZmxvYXQg
YmVmb3JlV2lkdGggPSBtX2NvbnRyb2xsZXItPnJ1bldpZHRoU29GYXIoKTsKQEAgLTk2LDcgKzk2
LDcgQEAgdm9pZCBGb250Q2FzY2FkZTo6ZGVsZXRlTGF5b3V0KFRleHRMYXlvdQogICAgIGRlbGV0
ZSBsYXlvdXQ7CiB9CiAKLWZsb2F0IEZvbnRDYXNjYWRlOjp3aWR0aChUZXh0TGF5b3V0JiBsYXlv
dXQsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250
RGF0YSo+KiBmYWxsYmFja0ZvbnRzKQorZmxvYXQgRm9udENhc2NhZGU6OndpZHRoKFRleHRMYXlv
dXQmIGxheW91dCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBIYXNoU2V0PGNvbnN0IEZv
bnQqPiogZmFsbGJhY2tGb250cykKIHsKICAgICByZXR1cm4gbGF5b3V0LndpZHRoKGZyb20sIGxl
biwgZmFsbGJhY2tGb250cyk7CiB9CkBAIC0xMTUsNyArMTE1LDcgQEAgc3RhdGljIGlubGluZSBD
R0Zsb2F0IGNlaWxDR0Zsb2F0KENHRmxvYQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxDR0Zsb2F0
PihjZWlsKGYpKTsKIH0KIAotQ29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dENvbnRy
b2xsZXIoY29uc3QgRm9udENhc2NhZGUqIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgYm9vbCBt
YXlVc2VOYXR1cmFsV3JpdGluZ0RpcmVjdGlvbiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0
YSo+KiBmYWxsYmFja0ZvbnRzLCBib29sIGZvclRleHRFbXBoYXNpcykKK0NvbXBsZXhUZXh0Q29u
dHJvbGxlcjo6Q29tcGxleFRleHRDb250cm9sbGVyKGNvbnN0IEZvbnRDYXNjYWRlKiBmb250LCBj
b25zdCBUZXh0UnVuJiBydW4sIGJvb2wgbWF5VXNlTmF0dXJhbFdyaXRpbmdEaXJlY3Rpb24sIEhh
c2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzLCBib29sIGZvclRleHRFbXBoYXNpcykK
ICAgICA6IG1fZm9udCgqZm9udCkKICAgICAsIG1fcnVuKHJ1bikKICAgICAsIG1faXNMVFJPbmx5
KHRydWUpCkBAIC0yOTEsNyArMjkxLDcgQEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNv
bGxlY3RDb21wbAogICAgIGlmICghbV9lbmQpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIFdl
IGJyZWFrIHVwIGdseXBoIHJ1biBnZW5lcmF0aW9uIGZvciB0aGUgc3RyaW5nIGJ5IEZvbnREYXRh
LgorICAgIC8vIFdlIGJyZWFrIHVwIGdseXBoIHJ1biBnZW5lcmF0aW9uIGZvciB0aGUgc3RyaW5n
IGJ5IEZvbnQuCiAgICAgY29uc3QgVUNoYXIqIGNwOwogCiAgICAgaWYgKG1fcnVuLmlzOEJpdCgp
KSB7CkBAIC0zMDgsOSArMzA4LDkgQEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbGxl
Y3RDb21wbAogICAgIGNvbnN0IFVDaGFyKiBjdXJyID0gY3A7CiAgICAgY29uc3QgVUNoYXIqIGVu
ZCA9IGNwICsgbV9lbmQ7CiAKLSAgICBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGE7Cisg
ICAgY29uc3QgRm9udCogZm9udDsKICAgICBib29sIGlzTWlzc2luZ0dseXBoOwotICAgIGNvbnN0
IFNpbXBsZUZvbnREYXRhKiBuZXh0Rm9udERhdGE7CisgICAgY29uc3QgRm9udCogbmV4dEZvbnQ7
CiAgICAgYm9vbCBuZXh0SXNNaXNzaW5nR2x5cGg7CiAKICAgICB1bnNpZ25lZCBtYXJrQ291bnQ7
CkBAIC0zMzIsMTIgKzMzMiwxMiBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Y29sbGVj
dENvbXBsCiAgICAgfQogCiAgICAgbmV4dElzTWlzc2luZ0dseXBoID0gZmFsc2U7Ci0gICAgbmV4
dEZvbnREYXRhID0gbV9mb250LmZvbnREYXRhRm9yQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2Uo
c2VxdWVuY2VTdGFydCwgY3VyciAtIHNlcXVlbmNlU3RhcnQsIG5leHRJc1NtYWxsQ2FwcyA/IFNt
YWxsQ2Fwc1ZhcmlhbnQgOiBOb3JtYWxWYXJpYW50KTsKLSAgICBpZiAoIW5leHRGb250RGF0YSkK
KyAgICBuZXh0Rm9udCA9IG1fZm9udC5mb250Rm9yQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2Uo
c2VxdWVuY2VTdGFydCwgY3VyciAtIHNlcXVlbmNlU3RhcnQsIG5leHRJc1NtYWxsQ2FwcyA/IFNt
YWxsQ2Fwc1ZhcmlhbnQgOiBOb3JtYWxWYXJpYW50KTsKKyAgICBpZiAoIW5leHRGb250KQogICAg
ICAgICBuZXh0SXNNaXNzaW5nR2x5cGggPSB0cnVlOwogCiAgICAgd2hpbGUgKGN1cnIgPCBlbmQp
IHsKLSAgICAgICAgZm9udERhdGEgPSBuZXh0Rm9udERhdGE7CisgICAgICAgIGZvbnQgPSBuZXh0
Rm9udDsKICAgICAgICAgaXNNaXNzaW5nR2x5cGggPSBuZXh0SXNNaXNzaW5nR2x5cGg7CiAgICAg
ICAgIGlzU21hbGxDYXBzID0gbmV4dElzU21hbGxDYXBzOwogICAgICAgICBpbnQgaW5kZXggPSBj
dXJyIC0gY3A7CkBAIC0zNTgsMTcgKzM1OCwxNyBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxl
cjo6Y29sbGVjdENvbXBsCiAKICAgICAgICAgbmV4dElzTWlzc2luZ0dseXBoID0gZmFsc2U7CiAg
ICAgICAgIGlmIChiYXNlQ2hhcmFjdGVyID09IHplcm9XaWR0aEpvaW5lcikKLSAgICAgICAgICAg
IG5leHRGb250RGF0YSA9IGZvbnREYXRhOworICAgICAgICAgICAgbmV4dEZvbnQgPSBmb250Owog
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIG5leHRGb250RGF0YSA9IG1fZm9udC5mb250RGF0
YUZvckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNwICsgaW5kZXgsIGN1cnIgLSBjcCAtIGlu
ZGV4LCBuZXh0SXNTbWFsbENhcHMgPyBTbWFsbENhcHNWYXJpYW50IDogTm9ybWFsVmFyaWFudCk7
Ci0gICAgICAgICAgICBpZiAoIW5leHRGb250RGF0YSkKKyAgICAgICAgICAgIG5leHRGb250ID0g
bV9mb250LmZvbnRGb3JDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjcCArIGluZGV4LCBjdXJy
IC0gY3AgLSBpbmRleCwgbmV4dElzU21hbGxDYXBzID8gU21hbGxDYXBzVmFyaWFudCA6IE5vcm1h
bFZhcmlhbnQpOworICAgICAgICAgICAgaWYgKCFuZXh0Rm9udCkKICAgICAgICAgICAgICAgICBu
ZXh0SXNNaXNzaW5nR2x5cGggPSB0cnVlOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG5leHRG
b250RGF0YSAhPSBmb250RGF0YSB8fCBuZXh0SXNNaXNzaW5nR2x5cGggIT0gaXNNaXNzaW5nR2x5
cGgpIHsKKyAgICAgICAgaWYgKG5leHRGb250ICE9IGZvbnQgfHwgbmV4dElzTWlzc2luZ0dseXBo
ICE9IGlzTWlzc2luZ0dseXBoKSB7CiAgICAgICAgICAgICBpbnQgaXRlbVN0YXJ0ID0gc3RhdGlj
X2Nhc3Q8aW50PihpbmRleE9mRm9udFRyYW5zaXRpb24pOwogICAgICAgICAgICAgaW50IGl0ZW1M
ZW5ndGggPSBpbmRleCAtIGluZGV4T2ZGb250VHJhbnNpdGlvbjsKLSAgICAgICAgICAgIGNvbGxl
Y3RDb21wbGV4VGV4dFJ1bnNGb3JDaGFyYWN0ZXJzKChpc1NtYWxsQ2FwcyA/IG1fc21hbGxDYXBz
QnVmZmVyLmRhdGEoKSA6IGNwKSArIGl0ZW1TdGFydCwgaXRlbUxlbmd0aCwgaXRlbVN0YXJ0LCAh
aXNNaXNzaW5nR2x5cGggPyBmb250RGF0YSA6IDApOworICAgICAgICAgICAgY29sbGVjdENvbXBs
ZXhUZXh0UnVuc0ZvckNoYXJhY3RlcnMoKGlzU21hbGxDYXBzID8gbV9zbWFsbENhcHNCdWZmZXIu
ZGF0YSgpIDogY3ApICsgaXRlbVN0YXJ0LCBpdGVtTGVuZ3RoLCBpdGVtU3RhcnQsICFpc01pc3Np
bmdHbHlwaCA/IGZvbnQgOiAwKTsKICAgICAgICAgICAgIGluZGV4T2ZGb250VHJhbnNpdGlvbiA9
IGluZGV4OwogICAgICAgICB9CiAgICAgfQpAQCAtMzc2LDcgKzM3Niw3IEBAIHZvaWQgQ29tcGxl
eFRleHRDb250cm9sbGVyOjpjb2xsZWN0Q29tcGwKICAgICBpbnQgaXRlbUxlbmd0aCA9IG1fZW5k
IC0gaW5kZXhPZkZvbnRUcmFuc2l0aW9uOwogICAgIGlmIChpdGVtTGVuZ3RoKSB7CiAgICAgICAg
IGludCBpdGVtU3RhcnQgPSBpbmRleE9mRm9udFRyYW5zaXRpb247Ci0gICAgICAgIGNvbGxlY3RD
b21wbGV4VGV4dFJ1bnNGb3JDaGFyYWN0ZXJzKChuZXh0SXNTbWFsbENhcHMgPyBtX3NtYWxsQ2Fw
c0J1ZmZlci5kYXRhKCkgOiBjcCkgKyBpdGVtU3RhcnQsIGl0ZW1MZW5ndGgsIGl0ZW1TdGFydCwg
IW5leHRJc01pc3NpbmdHbHlwaCA/IG5leHRGb250RGF0YSA6IDApOworICAgICAgICBjb2xsZWN0
Q29tcGxleFRleHRSdW5zRm9yQ2hhcmFjdGVycygobmV4dElzU21hbGxDYXBzID8gbV9zbWFsbENh
cHNCdWZmZXIuZGF0YSgpIDogY3ApICsgaXRlbVN0YXJ0LCBpdGVtTGVuZ3RoLCBpdGVtU3RhcnQs
ICFuZXh0SXNNaXNzaW5nR2x5cGggPyBuZXh0Rm9udCA6IDApOwogICAgIH0KIAogICAgIGlmICgh
bV9ydW4ubHRyKCkpCkBAIC00NjksNyArNDY5LDcgQEAgdW5zaWduZWQgQ29tcGxleFRleHRDb250
cm9sbGVyOjppbmNyZW1lbgogICAgIHJldHVybiBpbmRleE9mQ3VycmVudFJ1bihsZWZ0bW9zdEds
eXBoKTsKIH0KIAotdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmFkdmFuY2UodW5zaWduZWQg
b2Zmc2V0LCBHbHlwaEJ1ZmZlciogZ2x5cGhCdWZmZXIsIEdseXBoSXRlcmF0aW9uU3R5bGUgaXRl
cmF0aW9uU3R5bGUsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250
cykKK3ZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjphZHZhbmNlKHVuc2lnbmVkIG9mZnNldCwg
R2x5cGhCdWZmZXIqIGdseXBoQnVmZmVyLCBHbHlwaEl0ZXJhdGlvblN0eWxlIGl0ZXJhdGlvblN0
eWxlLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cykKIHsKICAgICBpZiAoc3Rh
dGljX2Nhc3Q8aW50PihvZmZzZXQpID4gbV9lbmQpCiAgICAgICAgIG9mZnNldCA9IG1fZW5kOwpA
QCAtNDk0LDggKzQ5NCw4IEBAIHZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjphZHZhbmNlKHVu
c2kKICAgICAgICAgc2l6ZV90IGdseXBoQ291bnQgPSBjb21wbGV4VGV4dFJ1bi5nbHlwaENvdW50
KCk7CiAgICAgICAgIHVuc2lnbmVkIGcgPSBsdHIgPyBtX2dseXBoSW5DdXJyZW50UnVuIDogZ2x5
cGhDb3VudCAtIDEgLSBtX2dseXBoSW5DdXJyZW50UnVuOwogICAgICAgICB1bnNpZ25lZCBrID0g
bGVmdG1vc3RHbHlwaCArIGc7Ci0gICAgICAgIGlmIChmYWxsYmFja0ZvbnRzICYmICZjb21wbGV4
VGV4dFJ1bi5mb250RGF0YSgpICE9ICZtX2ZvbnQucHJpbWFyeUZvbnREYXRhKCkpCi0gICAgICAg
ICAgICBmYWxsYmFja0ZvbnRzLT5hZGQoJmNvbXBsZXhUZXh0UnVuLmZvbnREYXRhKCkpOworICAg
ICAgICBpZiAoZmFsbGJhY2tGb250cyAmJiAmY29tcGxleFRleHRSdW4uZm9udCgpICE9ICZtX2Zv
bnQucHJpbWFyeUZvbnQoKSkKKyAgICAgICAgICAgIGZhbGxiYWNrRm9udHMtPmFkZCgmY29tcGxl
eFRleHRSdW4uZm9udCgpKTsKIAogICAgICAgICAvLyBXZSBtdXN0IHN0b3JlIHRoZSBpbml0aWFs
IGFkdmFuY2UgZm9yIHRoZSBmaXJzdCBnbHlwaCB3ZSBhcmUgZ29pbmcgdG8gZHJhdy4KICAgICAg
ICAgLy8gV2hlbiBsZWZ0bW9zdEdseXBoIGlzIDAsIGl0IHJlcHJlc2VudHMgdGhlIGZpcnN0IGds
eXBoIHRvIGRyYXcsIHRha2luZyBpbnRvCkBAIC01MjAsNyArNTIwLDcgQEAgdm9pZCBDb21wbGV4
VGV4dENvbnRyb2xsZXI6OmFkdmFuY2UodW5zaQogICAgICAgICAgICAgICAgIHJldHVybjsKIAog
ICAgICAgICAgICAgaWYgKGdseXBoQnVmZmVyICYmICFtX2NoYXJhY3RlckluQ3VycmVudEdseXBo
KQotICAgICAgICAgICAgICAgIGdseXBoQnVmZmVyLT5hZGQobV9hZGp1c3RlZEdseXBoc1trXSwg
JmNvbXBsZXhUZXh0UnVuLmZvbnREYXRhKCksIGFkanVzdGVkQWR2YW5jZSwgY29tcGxleFRleHRS
dW4uaW5kZXhBdChtX2dseXBoSW5DdXJyZW50UnVuKSk7CisgICAgICAgICAgICAgICAgZ2x5cGhC
dWZmZXItPmFkZChtX2FkanVzdGVkR2x5cGhzW2tdLCAmY29tcGxleFRleHRSdW4uZm9udCgpLCBh
ZGp1c3RlZEFkdmFuY2UsIGNvbXBsZXhUZXh0UnVuLmluZGV4QXQobV9nbHlwaEluQ3VycmVudFJ1
bikpOwogCiAgICAgICAgICAgICB1bnNpZ25lZCBvbGRDaGFyYWN0ZXJJbkN1cnJlbnRHbHlwaCA9
IG1fY2hhcmFjdGVySW5DdXJyZW50R2x5cGg7CiAgICAgICAgICAgICBtX2NoYXJhY3RlckluQ3Vy
cmVudEdseXBoID0gc3RkOjptaW4obV9jdXJyZW50Q2hhcmFjdGVyIC0gY29tcGxleFRleHRSdW4u
c3RyaW5nTG9jYXRpb24oKSwgZ2x5cGhFbmRPZmZzZXQpIC0gZ2x5cGhTdGFydE9mZnNldDsKQEAg
LTU2Niw5ICs1NjYsOSBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6YWRqdXN0R2x5cGhz
CiAgICAgZm9yIChzaXplX3QgciA9IDA7IHIgPCBydW5Db3VudDsgKytyKSB7CiAgICAgICAgIENv
bXBsZXhUZXh0UnVuJiBjb21wbGV4VGV4dFJ1biA9ICptX2NvbXBsZXhUZXh0UnVuc1tyXTsKICAg
ICAgICAgdW5zaWduZWQgZ2x5cGhDb3VudCA9IGNvbXBsZXhUZXh0UnVuLmdseXBoQ291bnQoKTsK
LSAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEmIGZvbnREYXRhID0gY29tcGxleFRleHRSdW4u
Zm9udERhdGEoKTsKKyAgICAgICAgY29uc3QgRm9udCYgZm9udCA9IGNvbXBsZXhUZXh0UnVuLmZv
bnQoKTsKICNpZiBQTEFURk9STShJT1MpCi0gICAgICAgIGJvb2wgaXNFbW9qaSA9IGZvbnREYXRh
LnBsYXRmb3JtRGF0YSgpLm1faXNFbW9qaTsKKyAgICAgICAgYm9vbCBpc0Vtb2ppID0gZm9udC5w
bGF0Zm9ybURhdGEoKS5tX2lzRW1vamk7CiAjZW5kaWYKIAogICAgICAgICAvLyBSZXByZXNlbnQg
dGhlIGluaXRpYWwgYWR2YW5jZSBmb3IgYSB0ZXh0IHJ1biBieSBhZGp1c3RpbmcgdGhlIGFkdmFu
Y2UKQEAgLTU4OCw4ICs1ODgsOCBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6YWRqdXN0
R2x5cGhzCiAgICAgICAgIGNvbnN0IENHU2l6ZSogYWR2YW5jZXMgPSBjb21wbGV4VGV4dFJ1bi5h
ZHZhbmNlcygpOwogCiAgICAgICAgIGJvb2wgbGFzdFJ1biA9IHIgKyAxID09IHJ1bkNvdW50Owot
ICAgICAgICBib29sIHJvdW5kc0FkdmFuY2VzID0gIW1fZm9udC5pc1ByaW50ZXJGb250KCkgJiYg
Zm9udERhdGEucGxhdGZvcm1EYXRhKCkucm91bmRzR2x5cGhBZHZhbmNlcygpOwotICAgICAgICBm
bG9hdCBzcGFjZVdpZHRoID0gZm9udERhdGEuc3BhY2VXaWR0aCgpIC0gZm9udERhdGEuc3ludGhl
dGljQm9sZE9mZnNldCgpOworICAgICAgICBib29sIHJvdW5kc0FkdmFuY2VzID0gIW1fZm9udC5p
c1ByaW50ZXJGb250KCkgJiYgZm9udC5wbGF0Zm9ybURhdGEoKS5yb3VuZHNHbHlwaEFkdmFuY2Vz
KCk7CisgICAgICAgIGZsb2F0IHNwYWNlV2lkdGggPSBmb250LnNwYWNlV2lkdGgoKSAtIGZvbnQu
c3ludGhldGljQm9sZE9mZnNldCgpOwogICAgICAgICBDR0Zsb2F0IHJvdW5kZWRTcGFjZVdpZHRo
ID0gcm91bmRDR0Zsb2F0KHNwYWNlV2lkdGgpOwogICAgICAgICBjb25zdCBVQ2hhciogY3AgPSBj
b21wbGV4VGV4dFJ1bi5jaGFyYWN0ZXJzKCk7CiAgICAgICAgIENHUG9pbnQgZ2x5cGhPcmlnaW4g
PSBDR1BvaW50WmVybzsKQEAgLTYxNiwzMyArNjE2LDMzIEBAIHZvaWQgQ29tcGxleFRleHRDb250
cm9sbGVyOjphZGp1c3RHbHlwaHMKICAgICAgICAgICAgICAgICBuZXh0Q2ggPSAqKG1fY29tcGxl
eFRleHRSdW5zW3IgKyAxXS0+Y2hhcmFjdGVycygpICsgbV9jb21wbGV4VGV4dFJ1bnNbciArIDFd
LT5pbmRleEF0KDApKTsKIAogICAgICAgICAgICAgYm9vbCB0cmVhdEFzU3BhY2UgPSBGb250Q2Fz
Y2FkZTo6dHJlYXRBc1NwYWNlKGNoKTsKLSAgICAgICAgICAgIENHR2x5cGggZ2x5cGggPSB0cmVh
dEFzU3BhY2UgPyBmb250RGF0YS5zcGFjZUdseXBoKCkgOiBnbHlwaHNbaV07CisgICAgICAgICAg
ICBDR0dseXBoIGdseXBoID0gdHJlYXRBc1NwYWNlID8gZm9udC5zcGFjZUdseXBoKCkgOiBnbHlw
aHNbaV07CiAgICAgICAgICAgICBDR1NpemUgYWR2YW5jZSA9IHRyZWF0QXNTcGFjZSA/IENHU2l6
ZU1ha2Uoc3BhY2VXaWR0aCwgYWR2YW5jZXNbaV0uaGVpZ2h0KSA6IGFkdmFuY2VzW2ldOwogI2lm
IFBMQVRGT1JNKElPUykKICAgICAgICAgICAgIGlmIChpc0Vtb2ppICYmIGFkdmFuY2Uud2lkdGgp
Ci0gICAgICAgICAgICAgICAgYWR2YW5jZS53aWR0aCA9IGZvbnREYXRhLndpZHRoRm9yR2x5cGgo
Z2x5cGgpOworICAgICAgICAgICAgICAgIGFkdmFuY2Uud2lkdGggPSBmb250LndpZHRoRm9yR2x5
cGgoZ2x5cGgpOwogI2VuZGlmCiAKICAgICAgICAgICAgIGlmIChjaCA9PSAnXHQnICYmIG1fcnVu
LmFsbG93VGFicygpKQotICAgICAgICAgICAgICAgIGFkdmFuY2Uud2lkdGggPSBtX2ZvbnQudGFi
V2lkdGgoZm9udERhdGEsIG1fcnVuLnRhYlNpemUoKSwgbV9ydW4ueFBvcygpICsgbV90b3RhbFdp
ZHRoICsgd2lkdGhTaW5jZUxhc3RDb21taXQpOworICAgICAgICAgICAgICAgIGFkdmFuY2Uud2lk
dGggPSBtX2ZvbnQudGFiV2lkdGgoZm9udCwgbV9ydW4udGFiU2l6ZSgpLCBtX3J1bi54UG9zKCkg
KyBtX3RvdGFsV2lkdGggKyB3aWR0aFNpbmNlTGFzdENvbW1pdCk7CiAgICAgICAgICAgICBlbHNl
IGlmIChGb250Q2FzY2FkZTo6dHJlYXRBc1plcm9XaWR0aFNwYWNlKGNoKSAmJiAhdHJlYXRBc1Nw
YWNlKSB7CiAgICAgICAgICAgICAgICAgYWR2YW5jZS53aWR0aCA9IDA7Ci0gICAgICAgICAgICAg
ICAgZ2x5cGggPSBmb250RGF0YS5zcGFjZUdseXBoKCk7CisgICAgICAgICAgICAgICAgZ2x5cGgg
PSBmb250LnNwYWNlR2x5cGgoKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgZmxvYXQg
cm91bmRlZEFkdmFuY2VXaWR0aCA9IHJvdW5kZihhZHZhbmNlLndpZHRoKTsKICAgICAgICAgICAg
IGlmIChyb3VuZHNBZHZhbmNlcykKICAgICAgICAgICAgICAgICBhZHZhbmNlLndpZHRoID0gcm91
bmRlZEFkdmFuY2VXaWR0aDsKIAotICAgICAgICAgICAgYWR2YW5jZS53aWR0aCArPSBmb250RGF0
YS5zeW50aGV0aWNCb2xkT2Zmc2V0KCk7CisgICAgICAgICAgICBhZHZhbmNlLndpZHRoICs9IGZv
bnQuc3ludGhldGljQm9sZE9mZnNldCgpOwogCiAgCiAgICAgICAgICAgICAvLyBXZSBzcGVjaWFs
IGNhc2Ugc3BhY2VzIGluIHR3byB3YXlzIHdoZW4gYXBwbHlpbmcgd29yZCByb3VuZGluZy4gCiAg
ICAgICAgICAgICAvLyBGaXJzdCwgd2Ugcm91bmQgc3BhY2VzIHRvIGFuIGFkanVzdGVkIHdpZHRo
IGluIGFsbCBmb250cy4gCiAgICAgICAgICAgICAvLyBTZWNvbmQsIGluIGZpeGVkLXBpdGNoIGZv
bnRzIHdlIGVuc3VyZSB0aGF0IGFsbCBnbHlwaHMgdGhhdCAKICAgICAgICAgICAgIC8vIG1hdGNo
IHRoZSB3aWR0aCBvZiB0aGUgc3BhY2UgZ2x5cGggaGF2ZSB0aGUgc2FtZSB3aWR0aCBhcyB0aGUg
c3BhY2UgZ2x5cGguIAotICAgICAgICAgICAgaWYgKG1fcnVuLmFwcGx5V29yZFJvdW5kaW5nKCkg
JiYgcm91bmRlZEFkdmFuY2VXaWR0aCA9PSByb3VuZGVkU3BhY2VXaWR0aCAmJiAoZm9udERhdGEu
cGl0Y2goKSA9PSBGaXhlZFBpdGNoIHx8IGdseXBoID09IGZvbnREYXRhLnNwYWNlR2x5cGgoKSkp
Ci0gICAgICAgICAgICAgICAgYWR2YW5jZS53aWR0aCA9IGZvbnREYXRhLmFkanVzdGVkU3BhY2VX
aWR0aCgpOworICAgICAgICAgICAgaWYgKG1fcnVuLmFwcGx5V29yZFJvdW5kaW5nKCkgJiYgcm91
bmRlZEFkdmFuY2VXaWR0aCA9PSByb3VuZGVkU3BhY2VXaWR0aCAmJiAoZm9udC5waXRjaCgpID09
IEZpeGVkUGl0Y2ggfHwgZ2x5cGggPT0gZm9udC5zcGFjZUdseXBoKCkpKQorICAgICAgICAgICAg
ICAgIGFkdmFuY2Uud2lkdGggPSBmb250LmFkanVzdGVkU3BhY2VXaWR0aCgpOwogCiAgICAgICAg
ICAgICBpZiAoaGFzRXh0cmFTcGFjaW5nKSB7CiAgICAgICAgICAgICAgICAgLy8gSWYgd2UncmUg
YSBnbHlwaCB3aXRoIGFuIGFkdmFuY2UsIGdvIGFoZWFkIGFuZCBhZGQgaW4gbGV0dGVyLXNwYWNp
bmcuCkBAIC03MTcsNyArNzE3LDcgQEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmFkanVz
dEdseXBocwogICAgICAgICAgICAgbV9hZGp1c3RlZEFkdmFuY2VzLmFwcGVuZChhZHZhbmNlKTsK
ICAgICAgICAgICAgIG1fYWRqdXN0ZWRHbHlwaHMuYXBwZW5kKGdseXBoKTsKICAgICAgICAgICAg
IAotICAgICAgICAgICAgRmxvYXRSZWN0IGdseXBoQm91bmRzID0gZm9udERhdGEuYm91bmRzRm9y
R2x5cGgoZ2x5cGgpOworICAgICAgICAgICAgRmxvYXRSZWN0IGdseXBoQm91bmRzID0gZm9udC5i
b3VuZHNGb3JHbHlwaChnbHlwaCk7CiAgICAgICAgICAgICBnbHlwaEJvdW5kcy5tb3ZlKGdseXBo
T3JpZ2luLngsIGdseXBoT3JpZ2luLnkpOwogICAgICAgICAgICAgbV9taW5HbHlwaEJvdW5kaW5n
Qm94WCA9IHN0ZDo6bWluKG1fbWluR2x5cGhCb3VuZGluZ0JveFgsIGdseXBoQm91bmRzLngoKSk7
CiAgICAgICAgICAgICBtX21heEdseXBoQm91bmRpbmdCb3hYID0gc3RkOjptYXgobV9tYXhHbHlw
aEJvdW5kaW5nQm94WCwgZ2x5cGhCb3VuZHMubWF4WCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250
cm9sbGVyLmgJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDEs
NyArNDEsNyBAQCB0eXBlZGVmIGNvbnN0IHN0cnVjdCBfX0NUTGluZSAqIENUTGluZVJlCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZvbnRDYXNjYWRlOwotY2xhc3MgU2ltcGxlRm9udERh
dGE7CitjbGFzcyBGb250OwogY2xhc3MgVGV4dFJ1bjsKIAogZW51bSBHbHlwaEl0ZXJhdGlvblN0
eWxlIHsgSW5jbHVkZVBhcnRpYWxHbHlwaHMsIEJ5V2hvbGVHbHlwaHMgfTsKQEAgLTUwLDEwICs1
MCwxMCBAQCBlbnVtIEdseXBoSXRlcmF0aW9uU3R5bGUgeyBJbmNsdWRlUGFydGlhCiAvLyBjb21w
bGV4IHNjcmlwdHMgb24gT1MgWC4KIGNsYXNzIENvbXBsZXhUZXh0Q29udHJvbGxlciB7CiBwdWJs
aWM6Ci0gICAgQ29tcGxleFRleHRDb250cm9sbGVyKGNvbnN0IEZvbnRDYXNjYWRlKiwgY29uc3Qg
VGV4dFJ1biYsIGJvb2wgbWF5VXNlTmF0dXJhbFdyaXRpbmdEaXJlY3Rpb24gPSBmYWxzZSwgSGFz
aFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgYm9vbCBmb3JU
ZXh0RW1waGFzaXMgPSBmYWxzZSk7CisgICAgQ29tcGxleFRleHRDb250cm9sbGVyKGNvbnN0IEZv
bnRDYXNjYWRlKiwgY29uc3QgVGV4dFJ1biYsIGJvb2wgbWF5VXNlTmF0dXJhbFdyaXRpbmdEaXJl
Y3Rpb24gPSBmYWxzZSwgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMgPSAwLCBi
b29sIGZvclRleHRFbXBoYXNpcyA9IGZhbHNlKTsKIAogICAgIC8vIEFkdmFuY2UgYW5kIGVtaXQg
Z2x5cGhzIHVwIHRvIHRoZSBzcGVjaWZpZWQgY2hhcmFjdGVyLgotICAgIHZvaWQgYWR2YW5jZSh1
bnNpZ25lZCB0bywgR2x5cGhCdWZmZXIqID0gMCwgR2x5cGhJdGVyYXRpb25TdHlsZSA9IEluY2x1
ZGVQYXJ0aWFsR2x5cGhzLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNr
Rm9udHMgPSAwKTsKKyAgICB2b2lkIGFkdmFuY2UodW5zaWduZWQgdG8sIEdseXBoQnVmZmVyKiA9
IDAsIEdseXBoSXRlcmF0aW9uU3R5bGUgPSBJbmNsdWRlUGFydGlhbEdseXBocywgSGFzaFNldDxj
b25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMgPSAwKTsKIAogICAgIC8vIENvbXB1dGUgdGhlIGNo
YXJhY3RlciBvZmZzZXQgZm9yIGEgZ2l2ZW4geCBjb29yZGluYXRlLgogICAgIGludCBvZmZzZXRG
b3JQb3NpdGlvbihmbG9hdCB4LCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKTsKQEAgLTczLDE4
ICs3MywxOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGNsYXNzIENvbXBsZXhUZXh0UnVuIDog
cHVibGljIFJlZkNvdW50ZWQ8Q29tcGxleFRleHRSdW4+IHsKICAgICBwdWJsaWM6Ci0gICAgICAg
IHN0YXRpYyBSZWY8Q29tcGxleFRleHRSdW4+IGNyZWF0ZShDVFJ1blJlZiBjdFJ1biwgY29uc3Qg
U2ltcGxlRm9udERhdGEmIGZvbnREYXRhLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWdu
ZWQgc3RyaW5nTG9jYXRpb24sIHNpemVfdCBzdHJpbmdMZW5ndGgsIENGUmFuZ2UgcnVuUmFuZ2Up
CisgICAgICAgIHN0YXRpYyBSZWY8Q29tcGxleFRleHRSdW4+IGNyZWF0ZShDVFJ1blJlZiBjdFJ1
biwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIHN0
cmluZ0xvY2F0aW9uLCBzaXplX3Qgc3RyaW5nTGVuZ3RoLCBDRlJhbmdlIHJ1blJhbmdlKQogICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDb21wbGV4VGV4dFJ1bihj
dFJ1biwgZm9udERhdGEsIGNoYXJhY3RlcnMsIHN0cmluZ0xvY2F0aW9uLCBzdHJpbmdMZW5ndGgs
IHJ1blJhbmdlKSk7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDb21wbGV4VGV4
dFJ1bihjdFJ1biwgZm9udCwgY2hhcmFjdGVycywgc3RyaW5nTG9jYXRpb24sIHN0cmluZ0xlbmd0
aCwgcnVuUmFuZ2UpKTsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyBSZWY8Q29tcGxleFRl
eHRSdW4+IGNyZWF0ZShjb25zdCBTaW1wbGVGb250RGF0YSYgZm9udERhdGEsIGNvbnN0IFVDaGFy
KiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBzdHJpbmdMb2NhdGlvbiwgc2l6ZV90IHN0cmluZ0xlbmd0
aCwgYm9vbCBsdHIpCisgICAgICAgIHN0YXRpYyBSZWY8Q29tcGxleFRleHRSdW4+IGNyZWF0ZShj
b25zdCBGb250JiBmb250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgc3RyaW5n
TG9jYXRpb24sIHNpemVfdCBzdHJpbmdMZW5ndGgsIGJvb2wgbHRyKQogICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDb21wbGV4VGV4dFJ1bihmb250RGF0YSwgY2hh
cmFjdGVycywgc3RyaW5nTG9jYXRpb24sIHN0cmluZ0xlbmd0aCwgbHRyKSk7CisgICAgICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDb21wbGV4VGV4dFJ1bihmb250LCBjaGFyYWN0ZXJzLCBz
dHJpbmdMb2NhdGlvbiwgc3RyaW5nTGVuZ3RoLCBsdHIpKTsKICAgICAgICAgfQogCiAgICAgICAg
IHVuc2lnbmVkIGdseXBoQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2dseXBoQ291bnQ7IH0KLSAg
ICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEmIGZvbnREYXRhKCkgY29uc3QgeyByZXR1cm4gbV9m
b250RGF0YTsgfQorICAgICAgICBjb25zdCBGb250JiBmb250KCkgY29uc3QgeyByZXR1cm4gbV9m
b250OyB9CiAgICAgICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzKCkgY29uc3QgeyByZXR1cm4g
bV9jaGFyYWN0ZXJzOyB9CiAgICAgICAgIHVuc2lnbmVkIHN0cmluZ0xvY2F0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9zdHJpbmdMb2NhdGlvbjsgfQogICAgICAgICBzaXplX3Qgc3RyaW5nTGVuZ3Ro
KCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmdMZW5ndGg7IH0KQEAgLTEwMCwxMSArMTAwLDExIEBA
IHByaXZhdGU6CiAgICAgICAgIHZvaWQgc2V0SXNOb25Nb25vdG9uaWMoKTsKIAogICAgIHByaXZh
dGU6Ci0gICAgICAgIENvbXBsZXhUZXh0UnVuKENUUnVuUmVmLCBjb25zdCBTaW1wbGVGb250RGF0
YSYsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBzdHJpbmdMb2NhdGlvbiwgc2l6
ZV90IHN0cmluZ0xlbmd0aCwgQ0ZSYW5nZSBydW5SYW5nZSk7Ci0gICAgICAgIENvbXBsZXhUZXh0
UnVuKGNvbnN0IFNpbXBsZUZvbnREYXRhJiwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2ln
bmVkIHN0cmluZ0xvY2F0aW9uLCBzaXplX3Qgc3RyaW5nTGVuZ3RoLCBib29sIGx0cik7CisgICAg
ICAgIENvbXBsZXhUZXh0UnVuKENUUnVuUmVmLCBjb25zdCBGb250JiwgY29uc3QgVUNoYXIqIGNo
YXJhY3RlcnMsIHVuc2lnbmVkIHN0cmluZ0xvY2F0aW9uLCBzaXplX3Qgc3RyaW5nTGVuZ3RoLCBD
RlJhbmdlIHJ1blJhbmdlKTsKKyAgICAgICAgQ29tcGxleFRleHRSdW4oY29uc3QgRm9udCYsIGNv
bnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBzdHJpbmdMb2NhdGlvbiwgc2l6ZV90IHN0
cmluZ0xlbmd0aCwgYm9vbCBsdHIpOwogCiAgICAgICAgIHVuc2lnbmVkIG1fZ2x5cGhDb3VudDsK
LSAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEmIG1fZm9udERhdGE7CisgICAgICAgIGNvbnN0
IEZvbnQmIG1fZm9udDsKICAgICAgICAgY29uc3QgVUNoYXIqIG1fY2hhcmFjdGVyczsKICAgICAg
ICAgdW5zaWduZWQgbV9zdHJpbmdMb2NhdGlvbjsKICAgICAgICAgc2l6ZV90IG1fc3RyaW5nTGVu
Z3RoOwpAQCAtMTI3LDcgKzEyNyw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGNvbGxlY3RDb21w
bGV4VGV4dFJ1bnMoKTsKIAotICAgIHZvaWQgY29sbGVjdENvbXBsZXhUZXh0UnVuc0ZvckNoYXJh
Y3RlcnMoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0cmluZ0xvY2F0
aW9uLCBjb25zdCBTaW1wbGVGb250RGF0YSopOworICAgIHZvaWQgY29sbGVjdENvbXBsZXhUZXh0
UnVuc0ZvckNoYXJhY3RlcnMoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVk
IHN0cmluZ0xvY2F0aW9uLCBjb25zdCBGb250Kik7CiAgICAgdm9pZCBhZGp1c3RHbHlwaHNBbmRB
ZHZhbmNlcygpOwogCiAgICAgdW5zaWduZWQgaW5kZXhPZkN1cnJlbnRSdW4odW5zaWduZWQmIGxl
ZnRtb3N0R2x5cGgpOwpAQCAtMTY5LDcgKzE2OSw3IEBAIHByaXZhdGU6CiAgICAgZmxvYXQgbV9s
ZWFkaW5nRXhwYW5zaW9uOwogICAgIGJvb2wgbV9hZnRlckV4cGFuc2lvbjsKIAotICAgIEhhc2hT
ZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogbV9mYWxsYmFja0ZvbnRzOworICAgIEhhc2hTZXQ8
Y29uc3QgRm9udCo+KiBtX2ZhbGxiYWNrRm9udHM7CiAKICAgICBmbG9hdCBtX21pbkdseXBoQm91
bmRpbmdCb3hYOwogICAgIGZsb2F0IG1fbWF4R2x5cGhCb3VuZGluZ0JveFg7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyQ29y
ZVRleHQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tCShyZXZpc2lvbiAxNzg4NTcpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9s
bGVyQ29yZVRleHQubW0JKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcgQEAgLSAoaWQpaW5p
dFdpdGhGb250Oihjb25zdCBXZWJDb3JlOjpGb250QwogICAgIF9jaGFyYWN0ZXIgPSBjaGFyYWN0
ZXI7CiAKICAgICAvLyBCeSB0aGUgdGltZSBhIFdlYkNhc2NhZGVMaXN0IGlzIHVzZWQsIHRoZSBG
b250Q2FzY2FkZSBoYXMgYWxyZWFkeSBiZWVuIGFza2VkIHRvIHJlYWxpemUgYWxsIG9mIGl0cwot
ICAgIC8vIEZvbnREYXRhLCBzbyB0aGlzIGxvb3AgZG9lcyBub3QgaGl0IHRoZSBGb250Q2FjaGUu
CisgICAgLy8gRm9udHMsIHNvIHRoaXMgbG9vcCBkb2VzIG5vdCBoaXQgdGhlIEZvbnRDYWNoZS4K
ICAgICB3aGlsZSAoIV9mb250LT5mYWxsYmFja1Jhbmdlc0F0KF9jb3VudCkuaXNOdWxsKCkpCiAg
ICAgICAgIF9jb3VudCsrOwogCkBAIC04MiwxMCArODIsMTAgQEAgLSAoaWQpb2JqZWN0QXRJbmRl
eDooTlNVSW50ZWdlcilpbmRleAogICAgIH0gZWxzZQogICAgICAgICBfZm9udERlc2NyaXB0b3Jz
Lmdyb3coaW5kZXggKyAxKTsKIAotICAgIGNvbnN0IFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhKiBz
aW1wbGVGb250RGF0YSA9IF9mb250LT5mYWxsYmFja1Jhbmdlc0F0KGluZGV4KS5mb250RGF0YUZv
ckNoYXJhY3RlcihfY2hhcmFjdGVyKTsKLSAgICBpZiAoIXNpbXBsZUZvbnREYXRhKQotICAgICAg
ICBzaW1wbGVGb250RGF0YSA9ICZfZm9udC0+ZmFsbGJhY2tSYW5nZXNBdChpbmRleCkuZm9udERh
dGFGb3JGaXJzdFJhbmdlKCk7Ci0gICAgZm9udERlc2NyaXB0b3IgPSBDVEZvbnRDb3B5Rm9udERl
c2NyaXB0b3Ioc2ltcGxlRm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLmN0Rm9udCgpKTsKKyAgICBj
b25zdCBXZWJDb3JlOjpGb250KiBmb250ID0gX2ZvbnQtPmZhbGxiYWNrUmFuZ2VzQXQoaW5kZXgp
LmZvbnRGb3JDaGFyYWN0ZXIoX2NoYXJhY3Rlcik7CisgICAgaWYgKCFmb250KQorICAgICAgICBm
b250ID0gJl9mb250LT5mYWxsYmFja1Jhbmdlc0F0KGluZGV4KS5mb250Rm9yRmlyc3RSYW5nZSgp
OworICAgIGZvbnREZXNjcmlwdG9yID0gQ1RGb250Q29weUZvbnREZXNjcmlwdG9yKGZvbnQtPnBs
YXRmb3JtRGF0YSgpLmN0Rm9udCgpKTsKICAgICBfZm9udERlc2NyaXB0b3JzW2luZGV4XSA9IGFk
b3B0Q0YoZm9udERlc2NyaXB0b3IpOwogICAgIHJldHVybiAoaWQpZm9udERlc2NyaXB0b3I7CiB9
CkBAIC05NCw4ICs5NCw4IEBAIC0gKGlkKW9iamVjdEF0SW5kZXg6KE5TVUludGVnZXIpaW5kZXgK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1Db21wbGV4VGV4dENvbnRyb2xsZXI6OkNvbXBsZXhU
ZXh0UnVuOjpDb21wbGV4VGV4dFJ1bihDVFJ1blJlZiBjdFJ1biwgY29uc3QgU2ltcGxlRm9udERh
dGEmIGZvbnREYXRhLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgc3RyaW5nTG9j
YXRpb24sIHNpemVfdCBzdHJpbmdMZW5ndGgsIENGUmFuZ2UgcnVuUmFuZ2UpCi0gICAgOiBtX2Zv
bnREYXRhKGZvbnREYXRhKQorQ29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dFJ1bjo6
Q29tcGxleFRleHRSdW4oQ1RSdW5SZWYgY3RSdW4sIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVD
aGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBzdHJpbmdMb2NhdGlvbiwgc2l6ZV90IHN0cmluZ0xl
bmd0aCwgQ0ZSYW5nZSBydW5SYW5nZSkKKyAgICA6IG1fZm9udChmb250KQogICAgICwgbV9jaGFy
YWN0ZXJzKGNoYXJhY3RlcnMpCiAgICAgLCBtX3N0cmluZ0xvY2F0aW9uKHN0cmluZ0xvY2F0aW9u
KQogICAgICwgbV9zdHJpbmdMZW5ndGgoc3RyaW5nTGVuZ3RoKQpAQCAtMTMwLDggKzEzMCw4IEBA
IENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRSdW46OkMKIAogLy8gTWlzc2luZyBn
bHlwaHMgcnVuIGNvbnN0cnVjdG9yLiBDb3JlIFRleHQgd2lsbCBub3QgZ2VuZXJhdGUgYSBydW4g
b2YgbWlzc2luZyBnbHlwaHMsIGluc3RlYWQgZmFsbGluZyBiYWNrIG9uCiAvLyBnbHlwaHMgZnJv
bSBMYXN0UmVzb3J0LiBXZSB3YW50IHRvIHVzZSB0aGUgcHJpbWFyeSBmb250J3MgbWlzc2luZyBn
bHlwaCBpbiBvcmRlciB0byBtYXRjaCB0aGUgZmFzdCB0ZXh0IGNvZGUgcGF0aC4KLUNvbXBsZXhU
ZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRSdW46OkNvbXBsZXhUZXh0UnVuKGNvbnN0IFNpbXBs
ZUZvbnREYXRhJiBmb250RGF0YSwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIHN0
cmluZ0xvY2F0aW9uLCBzaXplX3Qgc3RyaW5nTGVuZ3RoLCBib29sIGx0cikKLSAgICA6IG1fZm9u
dERhdGEoZm9udERhdGEpCitDb21wbGV4VGV4dENvbnRyb2xsZXI6OkNvbXBsZXhUZXh0UnVuOjpD
b21wbGV4VGV4dFJ1bihjb25zdCBGb250JiBmb250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywg
dW5zaWduZWQgc3RyaW5nTG9jYXRpb24sIHNpemVfdCBzdHJpbmdMZW5ndGgsIGJvb2wgbHRyKQor
ICAgIDogbV9mb250KGZvbnQpCiAgICAgLCBtX2NoYXJhY3RlcnMoY2hhcmFjdGVycykKICAgICAs
IG1fc3RyaW5nTG9jYXRpb24oc3RyaW5nTG9jYXRpb24pCiAgICAgLCBtX3N0cmluZ0xlbmd0aChz
dHJpbmdMZW5ndGgpCkBAIC0xNjMsNyArMTYzLDcgQEAgQ29tcGxleFRleHRDb250cm9sbGVyOjpD
b21wbGV4VGV4dFJ1bjo6QwogICAgIC8vIFN5bnRoZXNpemUgYSBydW4gb2YgbWlzc2luZyBnbHlw
aHMuCiAgICAgbV9nbHlwaHNWZWN0b3IuZmlsbCgwLCBtX2dseXBoQ291bnQpOwogICAgIG1fZ2x5
cGhzID0gbV9nbHlwaHNWZWN0b3IuZGF0YSgpOwotICAgIG1fYWR2YW5jZXNWZWN0b3IuZmlsbChD
R1NpemVNYWtlKG1fZm9udERhdGEud2lkdGhGb3JHbHlwaCgwKSwgMCksIG1fZ2x5cGhDb3VudCk7
CisgICAgbV9hZHZhbmNlc1ZlY3Rvci5maWxsKENHU2l6ZU1ha2UobV9mb250LndpZHRoRm9yR2x5
cGgoMCksIDApLCBtX2dseXBoQ291bnQpOwogICAgIG1fYWR2YW5jZXMgPSBtX2FkdmFuY2VzVmVj
dG9yLmRhdGEoKTsKIH0KIApAQCAtMTg0LDExICsxODQsMTEgQEAgc3RhdGljIGNvbnN0IFVuaUNo
YXIqIHByb3ZpZGVTdHJpbmdBbmRBdAogICAgIHJldHVybiBpbmZvLT5jcCArIHN0cmluZ0luZGV4
OwogfQogCi12b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Y29sbGVjdENvbXBsZXhUZXh0UnVu
c0ZvckNoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNwLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVk
IHN0cmluZ0xvY2F0aW9uLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEpCit2b2lkIENv
bXBsZXhUZXh0Q29udHJvbGxlcjo6Y29sbGVjdENvbXBsZXhUZXh0UnVuc0ZvckNoYXJhY3RlcnMo
Y29uc3QgVUNoYXIqIGNwLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0cmluZ0xvY2F0aW9u
LCBjb25zdCBGb250KiBmb250KQogewotICAgIGlmICghZm9udERhdGEpIHsKKyAgICBpZiAoIWZv
bnQpIHsKICAgICAgICAgLy8gQ3JlYXRlIGEgcnVuIG9mIG1pc3NpbmcgZ2x5cGhzIGZyb20gdGhl
IHByaW1hcnkgZm9udC4KLSAgICAgICAgbV9jb21wbGV4VGV4dFJ1bnMuYXBwZW5kKENvbXBsZXhU
ZXh0UnVuOjpjcmVhdGUobV9mb250LnByaW1hcnlGb250RGF0YSgpLCBjcCwgc3RyaW5nTG9jYXRp
b24sIGxlbmd0aCwgbV9ydW4ubHRyKCkpKTsKKyAgICAgICAgbV9jb21wbGV4VGV4dFJ1bnMuYXBw
ZW5kKENvbXBsZXhUZXh0UnVuOjpjcmVhdGUobV9mb250LnByaW1hcnlGb250KCksIGNwLCBzdHJp
bmdMb2NhdGlvbiwgbGVuZ3RoLCBtX3J1bi5sdHIoKSkpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCkBAIC0xOTYsMjYgKzE5NiwyNiBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Y29s
bGVjdENvbXBsCiAKICAgICBVQ2hhcjMyIGJhc2VDaGFyYWN0ZXIgPSAwOwogICAgIFJldGFpblB0
cjxDRkRpY3Rpb25hcnlSZWY+IHN0cmluZ0F0dHJpYnV0ZXM7Ci0gICAgaWYgKGZvbnREYXRhID09
IFNpbXBsZUZvbnREYXRhOjpzeXN0ZW1GYWxsYmFjaygpKSB7CisgICAgaWYgKGZvbnQgPT0gRm9u
dDo6c3lzdGVtRmFsbGJhY2soKSkgewogICAgICAgICAvLyBGSVhNRTogVGhpcyBjb2RlIHBhdGgg
ZG9lcyBub3Qgc3VwcG9ydCBzbWFsbCBjYXBzLgogICAgICAgICBpc1N5c3RlbUZhbGxiYWNrID0g
dHJ1ZTsKIAogICAgICAgICBVMTZfR0VUKGNwLCAwLCAwLCBsZW5ndGgsIGJhc2VDaGFyYWN0ZXIp
OwotICAgICAgICBmb250RGF0YSA9IG1fZm9udC5mYWxsYmFja1Jhbmdlc0F0KDApLmZvbnREYXRh
Rm9yQ2hhcmFjdGVyKGJhc2VDaGFyYWN0ZXIpOwotICAgICAgICBpZiAoIWZvbnREYXRhKQotICAg
ICAgICAgICAgZm9udERhdGEgPSAmbV9mb250LmZhbGxiYWNrUmFuZ2VzQXQoMCkuZm9udERhdGFG
b3JGaXJzdFJhbmdlKCk7CisgICAgICAgIGZvbnQgPSBtX2ZvbnQuZmFsbGJhY2tSYW5nZXNBdCgw
KS5mb250Rm9yQ2hhcmFjdGVyKGJhc2VDaGFyYWN0ZXIpOworICAgICAgICBpZiAoIWZvbnQpCisg
ICAgICAgICAgICBmb250ID0gJm1fZm9udC5mYWxsYmFja1Jhbmdlc0F0KDApLmZvbnRGb3JGaXJz
dFJhbmdlKCk7CiAKICAgICAgICAgUmV0YWluUHRyPFdlYkNhc2NhZGVMaXN0PiBjYXNjYWRlTGlz
dCA9IGFkb3B0TlMoW1tXZWJDYXNjYWRlTGlzdCBhbGxvY10gaW5pdFdpdGhGb250OiZtX2ZvbnQg
Y2hhcmFjdGVyOmJhc2VDaGFyYWN0ZXJdKTsKIAotICAgICAgICBzdHJpbmdBdHRyaWJ1dGVzID0g
YWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxlQ29weShrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCAwLCBmb250RGF0YS0+Z2V0Q0ZTdHJpbmdBdHRyaWJ1dGVzKG1fZm9udC50eXBlc2V0dGluZ0Zl
YXR1cmVzKCksIGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpKSkpOworICAg
ICAgICBzdHJpbmdBdHRyaWJ1dGVzID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxl
Q29weShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwLCBmb250LT5nZXRDRlN0cmluZ0F0dHJpYnV0ZXMo
bV9mb250LnR5cGVzZXR0aW5nRmVhdHVyZXMoKSwgZm9udC0+cGxhdGZvcm1EYXRhKCkub3JpZW50
YXRpb24oKSkpKTsKICAgICAgICAgc3RhdGljIGNvbnN0IHZvaWQqIGF0dHJpYnV0ZUtleXNbXSA9
IHsga0NURm9udENhc2NhZGVMaXN0QXR0cmlidXRlIH07CiAgICAgICAgIGNvbnN0IHZvaWQqIHZh
bHVlc1tdID0geyBjYXNjYWRlTGlzdC5nZXQoKSB9OwogICAgICAgICBSZXRhaW5QdHI8Q0ZEaWN0
aW9uYXJ5UmVmPiBhdHRyaWJ1dGVzID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoa0NGQWxs
b2NhdG9yRGVmYXVsdCwgYXR0cmlidXRlS2V5cywgdmFsdWVzLCBzaXplb2YoYXR0cmlidXRlS2V5
cykgLyBzaXplb2YoKmF0dHJpYnV0ZUtleXMpLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFj
a3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CiAgICAgICAgIFJldGFpblB0
cjxDVEZvbnREZXNjcmlwdG9yUmVmPiBmb250RGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250RGVz
Y3JpcHRvckNyZWF0ZVdpdGhBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMuZ2V0KCkpKTsKLSAgICAgICAg
UmV0YWluUHRyPENURm9udFJlZj4gZm9udFdpdGhDYXNjYWRlTGlzdCA9IGFkb3B0Q0YoQ1RGb250
Q3JlYXRlQ29weVdpdGhBdHRyaWJ1dGVzKGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5jdEZvbnQo
KSwgbV9mb250LnBpeGVsU2l6ZSgpLCAwLCBmb250RGVzY3JpcHRvci5nZXQoKSkpOworICAgICAg
ICBSZXRhaW5QdHI8Q1RGb250UmVmPiBmb250V2l0aENhc2NhZGVMaXN0ID0gYWRvcHRDRihDVEZv
bnRDcmVhdGVDb3B5V2l0aEF0dHJpYnV0ZXMoZm9udC0+cGxhdGZvcm1EYXRhKCkuY3RGb250KCks
IG1fZm9udC5waXhlbFNpemUoKSwgMCwgZm9udERlc2NyaXB0b3IuZ2V0KCkpKTsKICAgICAgICAg
Q0ZEaWN0aW9uYXJ5U2V0VmFsdWUoY29uc3RfY2FzdDxDRk11dGFibGVEaWN0aW9uYXJ5UmVmPihz
dHJpbmdBdHRyaWJ1dGVzLmdldCgpKSwga0NURm9udEF0dHJpYnV0ZU5hbWUsIGZvbnRXaXRoQ2Fz
Y2FkZUxpc3QuZ2V0KCkpOwogICAgIH0gZWxzZQotICAgICAgICBzdHJpbmdBdHRyaWJ1dGVzID0g
Zm9udERhdGEtPmdldENGU3RyaW5nQXR0cmlidXRlcyhtX2ZvbnQudHlwZXNldHRpbmdGZWF0dXJl
cygpLCBmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSk7CisgICAgICAgIHN0
cmluZ0F0dHJpYnV0ZXMgPSBmb250LT5nZXRDRlN0cmluZ0F0dHJpYnV0ZXMobV9mb250LnR5cGVz
ZXR0aW5nRmVhdHVyZXMoKSwgZm9udC0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSk7CiAK
ICAgICBSZXRhaW5QdHI8Q1RMaW5lUmVmPiBsaW5lOwogCkBAIC0yNDgsNTUgKzI0OCw1NSBAQCB2
b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Y29sbGVjdENvbXBsCiAgICAgICAgIENUUnVuUmVm
IGN0UnVuID0gc3RhdGljX2Nhc3Q8Q1RSdW5SZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgocnVu
QXJyYXksIG1fcnVuLmx0cigpID8gciA6IHJ1bkNvdW50IC0gMSAtIHIpKTsKICAgICAgICAgQVNT
RVJUKENGR2V0VHlwZUlEKGN0UnVuKSA9PSBDVFJ1bkdldFR5cGVJRCgpKTsKICAgICAgICAgQ0ZS
YW5nZSBydW5SYW5nZSA9IENUUnVuR2V0U3RyaW5nUmFuZ2UoY3RSdW4pOwotICAgICAgICBjb25z
dCBTaW1wbGVGb250RGF0YSogcnVuRm9udERhdGEgPSBmb250RGF0YTsKKyAgICAgICAgY29uc3Qg
Rm9udCogcnVuRm9udCA9IGZvbnQ7CiAgICAgICAgIGlmIChpc1N5c3RlbUZhbGxiYWNrKSB7CiAg
ICAgICAgICAgICBDRkRpY3Rpb25hcnlSZWYgcnVuQXR0cmlidXRlcyA9IENUUnVuR2V0QXR0cmli
dXRlcyhjdFJ1bik7Ci0gICAgICAgICAgICBDVEZvbnRSZWYgcnVuRm9udCA9IHN0YXRpY19jYXN0
PENURm9udFJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocnVuQXR0cmlidXRlcywga0NURm9udEF0
dHJpYnV0ZU5hbWUpKTsKLSAgICAgICAgICAgIEFTU0VSVChDRkdldFR5cGVJRChydW5Gb250KSA9
PSBDVEZvbnRHZXRUeXBlSUQoKSk7Ci0gICAgICAgICAgICBSZXRhaW5QdHI8Q0ZUeXBlUmVmPiBy
dW5Gb250RXF1YWxpdHlPYmplY3QgPSBGb250UGxhdGZvcm1EYXRhOjpvYmplY3RGb3JFcXVhbGl0
eUNoZWNrKHJ1bkZvbnQpOwotICAgICAgICAgICAgaWYgKCFDRkVxdWFsKHJ1bkZvbnRFcXVhbGl0
eU9iamVjdC5nZXQoKSwgZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm9iamVjdEZvckVxdWFsaXR5
Q2hlY2soKS5nZXQoKSkpIHsKKyAgICAgICAgICAgIENURm9udFJlZiBydW5DVEZvbnQgPSBzdGF0
aWNfY2FzdDxDVEZvbnRSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKHJ1bkF0dHJpYnV0ZXMsIGtD
VEZvbnRBdHRyaWJ1dGVOYW1lKSk7CisgICAgICAgICAgICBBU1NFUlQoQ0ZHZXRUeXBlSUQocnVu
Q1RGb250KSA9PSBDVEZvbnRHZXRUeXBlSUQoKSk7CisgICAgICAgICAgICBSZXRhaW5QdHI8Q0ZU
eXBlUmVmPiBydW5Gb250RXF1YWxpdHlPYmplY3QgPSBGb250UGxhdGZvcm1EYXRhOjpvYmplY3RG
b3JFcXVhbGl0eUNoZWNrKHJ1bkNURm9udCk7CisgICAgICAgICAgICBpZiAoIUNGRXF1YWwocnVu
Rm9udEVxdWFsaXR5T2JqZWN0LmdldCgpLCBmb250LT5wbGF0Zm9ybURhdGEoKS5vYmplY3RGb3JF
cXVhbGl0eUNoZWNrKCkuZ2V0KCkpKSB7CiAgICAgICAgICAgICAgICAgLy8gQmVnaW4gdHJ5aW5n
IHRvIHNlZSBpZiBydW5Gb250IG1hdGNoZXMgYW55IG9mIHRoZSBmb250cyBpbiB0aGUgZmFsbGJh
Y2sgbGlzdC4KIAogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7ICFtX2ZvbnQu
ZmFsbGJhY2tSYW5nZXNBdChpKS5pc051bGwoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHJ1bkZvbnREYXRhID0gbV9mb250LmZhbGxiYWNrUmFuZ2VzQXQoaSkuZm9udERhdGFGb3JDaGFy
YWN0ZXIoYmFzZUNoYXJhY3Rlcik7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghcnVuRm9udERh
dGEpCisgICAgICAgICAgICAgICAgICAgIHJ1bkZvbnQgPSBtX2ZvbnQuZmFsbGJhY2tSYW5nZXNB
dChpKS5mb250Rm9yQ2hhcmFjdGVyKGJhc2VDaGFyYWN0ZXIpOworICAgICAgICAgICAgICAgICAg
ICBpZiAoIXJ1bkZvbnQpCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgICAgICAgICAgUmV0YWluUHRyPENGVHlwZVJlZj4gcnVuRm9udEVxdWFsaXR5T2JqZWN0
ID0gcnVuRm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm9iamVjdEZvckVxdWFsaXR5Q2hlY2soKTsK
KyAgICAgICAgICAgICAgICAgICAgUmV0YWluUHRyPENGVHlwZVJlZj4gcnVuRm9udEVxdWFsaXR5
T2JqZWN0ID0gcnVuRm9udC0+cGxhdGZvcm1EYXRhKCkub2JqZWN0Rm9yRXF1YWxpdHlDaGVjaygp
OwogICAgICAgICAgICAgICAgICAgICBpZiAoQ0ZFcXVhbChydW5Gb250RXF1YWxpdHlPYmplY3Qu
Z2V0KCksIHJ1bkZvbnRFcXVhbGl0eU9iamVjdC5nZXQoKSkpCiAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgcnVuRm9udERhdGEgPSAwOworICAgICAg
ICAgICAgICAgICAgICBydW5Gb250ID0gbnVsbHB0cjsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gbWF0Y2hpbmcgZm9udCwgbG9vayB1cCBieSBu
YW1lIGluIHRoZSBmb250IGNhY2hlLgotICAgICAgICAgICAgICAgIGlmICghcnVuRm9udERhdGEp
IHsKKyAgICAgICAgICAgICAgICBpZiAoIXJ1bkZvbnQpIHsKICAgICAgICAgICAgICAgICAgICAg
Ly8gUmF0aGVyIHRoYW4gdXNpbmcgcnVuRm9udCBhcyBhbiBOU0ZvbnQgYW5kIHdyYXBwaW5nIGl0
IGluIGEgRm9udFBsYXRmb3JtRGF0YSwgZ28gdGhyb3VnaAogICAgICAgICAgICAgICAgICAgICAv
LyB0aGUgZm9udCBjYWNoZSBhbmQgdWx0aW1hdGVseSB0aHJvdWdoIE5TRm9udE1hbmFnZXIgaW4g
b3JkZXIgdG8gZ2V0IGFuIE5TRm9udCB3aXRoIHRoZSByaWdodAogICAgICAgICAgICAgICAgICAg
ICAvLyBOU0ZvbnRSZW5kZXJpbmdNb2RlLgotICAgICAgICAgICAgICAgICAgICBSZXRhaW5QdHI8
Q0ZTdHJpbmdSZWY+IGZvbnROYW1lID0gYWRvcHRDRihDVEZvbnRDb3B5UG9zdFNjcmlwdE5hbWUo
cnVuRm9udCkpOworICAgICAgICAgICAgICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGZv
bnROYW1lID0gYWRvcHRDRihDVEZvbnRDb3B5UG9zdFNjcmlwdE5hbWUocnVuQ1RGb250KSk7CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChDRkVxdWFsKGZvbnROYW1lLmdldCgpLCBDRlNUUigiTGFz
dFJlc29ydCIpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbV9jb21wbGV4VGV4dFJ1bnMu
YXBwZW5kKENvbXBsZXhUZXh0UnVuOjpjcmVhdGUobV9mb250LnByaW1hcnlGb250RGF0YSgpLCBj
cCwgc3RyaW5nTG9jYXRpb24gKyBydW5SYW5nZS5sb2NhdGlvbiwgcnVuUmFuZ2UubGVuZ3RoLCBt
X3J1bi5sdHIoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9jb21wbGV4VGV4dFJ1bnMu
YXBwZW5kKENvbXBsZXhUZXh0UnVuOjpjcmVhdGUobV9mb250LnByaW1hcnlGb250KCksIGNwLCBz
dHJpbmdMb2NhdGlvbiArIHJ1blJhbmdlLmxvY2F0aW9uLCBydW5SYW5nZS5sZW5ndGgsIG1fcnVu
Lmx0cigpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBydW5Gb250RGF0YSA9IGZvbnRDYWNoZSgp
LmZvbnRGb3JGYW1pbHkobV9mb250LmZvbnREZXNjcmlwdGlvbigpLCBmb250TmFtZS5nZXQoKSwg
ZmFsc2UpLmdldCgpOworICAgICAgICAgICAgICAgICAgICBydW5Gb250ID0gZm9udENhY2hlKCku
Zm9udEZvckZhbWlseShtX2ZvbnQuZm9udERlc2NyaXB0aW9uKCksIGZvbnROYW1lLmdldCgpLCBm
YWxzZSkuZ2V0KCk7CiAjaWYgIVBMQVRGT1JNKElPUykKICAgICAgICAgICAgICAgICAgICAgLy8g
Q29yZSBUZXh0IG1heSBoYXZlIHVzZWQgYSBmb250IHRoYXQgaXMgbm90IGtub3duIHRvIE5TRm9u
dE1hbmFnZXIuIEluIHRoYXQgY2FzZSwgZmFsbCBiYWNrIG9uCiAgICAgICAgICAgICAgICAgICAg
IC8vIHVzaW5nIHRoZSBmb250IGFzIHJldHVybmVkLCBldmVuIHRob3VnaCBpdCBtYXkgbm90IGhh
dmUgdGhlIGJlc3QgTlNGb250UmVuZGVyaW5nTW9kZS4KLSAgICAgICAgICAgICAgICAgICAgaWYg
KCFydW5Gb250RGF0YSkgewotICAgICAgICAgICAgICAgICAgICAgICAgRm9udFBsYXRmb3JtRGF0
YSBydW5Gb250UGxhdGZvcm1EYXRhKChOU0ZvbnQgKilydW5Gb250LCBDVEZvbnRHZXRTaXplKHJ1
bkZvbnQpLCBtX2ZvbnQuZm9udERlc2NyaXB0aW9uKCkudXNlUHJpbnRlckZvbnQoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBydW5Gb250RGF0YSA9ICZmb250Q2FjaGUoKS5mb250Rm9yUGxh
dGZvcm1EYXRhKHJ1bkZvbnRQbGF0Zm9ybURhdGEpLmdldCgpOworICAgICAgICAgICAgICAgICAg
ICBpZiAoIXJ1bkZvbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEZvbnRQbGF0Zm9ybURh
dGEgcnVuRm9udFBsYXRmb3JtRGF0YSgoTlNGb250ICopcnVuQ1RGb250LCBDVEZvbnRHZXRTaXpl
KHJ1bkNURm9udCksIG1fZm9udC5mb250RGVzY3JpcHRpb24oKS51c2VQcmludGVyRm9udCgpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJ1bkZvbnQgPSAmZm9udENhY2hlKCkuZm9udEZvclBs
YXRmb3JtRGF0YShydW5Gb250UGxhdGZvcm1EYXRhKS5nZXQoKTsKICAgICAgICAgICAgICAgICAg
ICAgfQogI2Vsc2UKICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IEp1c3QgYXNzZXJ0IGZv
ciBub3csIHVudGlsIHdlIGNhbiBkZXZpc2UgYSBiZXR0ZXIgZml4IHRoYXQgd29ya3Mgd2l0aCBp
T1MuCi0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChydW5Gb250RGF0YSk7CisgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChydW5Gb250KTsKICNlbmRpZgogICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBpZiAobV9mYWxsYmFja0ZvbnRzICYmIHJ1bkZvbnREYXRhICE9ICZtX2Zv
bnQucHJpbWFyeUZvbnREYXRhKCkpCi0gICAgICAgICAgICAgICAgICAgIG1fZmFsbGJhY2tGb250
cy0+YWRkKHJ1bkZvbnREYXRhKTsKKyAgICAgICAgICAgICAgICBpZiAobV9mYWxsYmFja0ZvbnRz
ICYmIHJ1bkZvbnQgIT0gJm1fZm9udC5wcmltYXJ5Rm9udCgpKQorICAgICAgICAgICAgICAgICAg
ICBtX2ZhbGxiYWNrRm9udHMtPmFkZChydW5Gb250KTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQotICAgICAgICBpZiAobV9mYWxsYmFja0ZvbnRzICYmIHJ1bkZvbnREYXRhICE9ICZtX2ZvbnQu
cHJpbWFyeUZvbnREYXRhKCkpCi0gICAgICAgICAgICBtX2ZhbGxiYWNrRm9udHMtPmFkZChmb250
RGF0YSk7CisgICAgICAgIGlmIChtX2ZhbGxiYWNrRm9udHMgJiYgcnVuRm9udCAhPSAmbV9mb250
LnByaW1hcnlGb250KCkpCisgICAgICAgICAgICBtX2ZhbGxiYWNrRm9udHMtPmFkZChmb250KTsK
IAotICAgICAgICBtX2NvbXBsZXhUZXh0UnVucy5hcHBlbmQoQ29tcGxleFRleHRSdW46OmNyZWF0
ZShjdFJ1biwgKnJ1bkZvbnREYXRhLCBjcCwgc3RyaW5nTG9jYXRpb24sIGxlbmd0aCwgcnVuUmFu
Z2UpKTsKKyAgICAgICAgbV9jb21wbGV4VGV4dFJ1bnMuYXBwZW5kKENvbXBsZXhUZXh0UnVuOjpj
cmVhdGUoY3RSdW4sICpydW5Gb250LCBjcCwgc3RyaW5nTG9jYXRpb24sIGxlbmd0aCwgcnVuUmFu
Z2UpKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9Gb250Q2FjaGVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL0ZvbnRDYWNoZU1hYy5tbQkocmV2aXNpb24gMTc4ODU3KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDYWNoZU1hYy5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMzMsOCArMzMsOCBAQAogI2lmICFQTEFURk9STShJT1MpCiAKICNpbXBvcnQg
IkNvcmVHcmFwaGljc1NQSS5oIgorI2ltcG9ydCAiRm9udC5oIgogI2ltcG9ydCAiRm9udENhc2Nh
ZGUuaCIKLSNpbXBvcnQgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW1wb3J0ICJGb250UGxhdGZvcm1E
YXRhLmgiCiAjaW1wb3J0ICJOU0ZvbnRTUEkuaCIKICNpbXBvcnQgIldlYkNvcmVOU1N0cmluZ0V4
dHJhcy5oIgpAQCAtMzM3LDcgKzMzNyw3IEBAIHN0YXRpYyBib29sIHNob3VsZEF1dG9BY3RpdmF0
ZUZvbnRJZk5lZWQKICAgICByZXR1cm4ga25vd25GYW1pbGllcy5nZXQoKS5hZGQoZmFtaWx5KS5p
c05ld0VudHJ5OwogfQogCi1SZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6c3lzdGVt
RmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24s
IGNvbnN0IFNpbXBsZUZvbnREYXRhKiBvcmlnaW5hbEZvbnREYXRhLCBib29sIGlzUGxhdGZvcm1G
b250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKK1JlZlB0cjxGb250PiBG
b250Q2FjaGU6OnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhjb25zdCBGb250RGVzY3JpcHRp
b24mIGRlc2NyaXB0aW9uLCBjb25zdCBGb250KiBvcmlnaW5hbEZvbnREYXRhLCBib29sIGlzUGxh
dGZvcm1Gb250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKIHsKICAgICBV
Q2hhcjMyIGNoYXJhY3RlcjsKICAgICBVMTZfR0VUKGNoYXJhY3RlcnMsIDAsIDAsIGxlbmd0aCwg
Y2hhcmFjdGVyKTsKQEAgLTQwNSwzNCArNDA1LDM1IEBAIFJlZlB0cjxTaW1wbGVGb250RGF0YT4g
Rm9udENhY2hlOjpzeXN0ZW0KICAgICByZXR1cm4gZm9udEZvclBsYXRmb3JtRGF0YShhbHRlcm5h
dGVGb250KTsKIH0KIAotUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OnNpbWlsYXJG
b250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCitSZWZQ
dHI8Rm9udD4gRm9udENhY2hlOjpzaW1pbGFyRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGRl
c2NyaXB0aW9uKQogewogICAgIC8vIEF0dGVtcHQgdG8gZmluZCBhbiBhcHByb3ByaWF0ZSBmb250
IHVzaW5nIGEgbWF0Y2ggYmFzZWQgb24gCiAgICAgLy8gdGhlIHByZXNlbmNlIG9mIGtleXdvcmRz
IGluIHRoZSB0aGUgcmVxdWVzdGVkIG5hbWVzLiAgRm9yIGV4YW1wbGUsIHdlJ2xsCiAgICAgLy8g
bWF0Y2ggYW55IG5hbWUgdGhhdCBjb250YWlucyAiQXJhYmljIiB0byBHZWV6YSBQcm8uCi0gICAg
UmVmUHRyPFNpbXBsZUZvbnREYXRhPiBzaW1wbGVGb250RGF0YTsKKyAgICBSZWZQdHI8Rm9udD4g
Zm9udDsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVzY3JpcHRpb24uZmFtaWx5Q291
bnQoKTsgKytpKSB7CiAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5ID0gZGVzY3Jp
cHRpb24uZmFtaWx5QXQoaSk7CiAgICAgICAgIGlmIChmYW1pbHkuaXNFbXB0eSgpKQogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIHN0YXRpYyBTdHJpbmcqIG1hdGNoV29yZHNbM10gPSB7
IG5ldyBTdHJpbmcoIkFyYWJpYyIpLCBuZXcgU3RyaW5nKCJQYXNodG8iKSwgbmV3IFN0cmluZygi
VXJkdSIpIH07CiAgICAgICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNT
dHJpbmcsIGdlZXphU3RyLCAoIkdlZXphIFBybyIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpKTsKLSAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCAzICYmICFzaW1wbGVGb250
RGF0YTsgKytqKQorICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDMgJiYgIWZvbnQ7ICsraikg
ewogICAgICAgICAgICAgaWYgKGZhbWlseS5jb250YWlucygqbWF0Y2hXb3Jkc1tqXSwgZmFsc2Up
KQotICAgICAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gZm9udEZvckZhbWlseShkZXNjcmlw
dGlvbiwgZ2VlemFTdHIpOworICAgICAgICAgICAgICAgIGZvbnQgPSBmb250Rm9yRmFtaWx5KGRl
c2NyaXB0aW9uLCBnZWV6YVN0cik7CisgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIHNpbXBs
ZUZvbnREYXRhLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gZm9udC5yZWxlYXNlKCk7CiB9CiAKLVJl
ZjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpsYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKQorUmVmPEZvbnQ+IEZvbnRDYWNoZTo6
bGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlw
dGlvbikKIHsKICAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5n
LCB0aW1lc1N0ciwgKCJUaW1lcyIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwp
KTsKIAogICAgIC8vIEZJWE1FOiBXb3VsZCBiZSBldmVuIGJldHRlciB0byBzb21laG93IGdldCB0
aGUgdXNlcidzIGRlZmF1bHQgZm9udCBoZXJlLiAgRm9yIG5vdyB3ZSdsbCBwaWNrCiAgICAgLy8g
dGhlIGRlZmF1bHQgdGhhdCB0aGUgdXNlciB3b3VsZCBnZXQgd2l0aG91dCBjaGFuZ2luZyBhbnkg
cHJlZnMuCi0gICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBzaW1wbGVGb250RGF0YSA9IGZvbnRG
b3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCB0aW1lc1N0ciwgZmFsc2UpOwotICAgIGlmIChzaW1w
bGVGb250RGF0YSkKLSAgICAgICAgcmV0dXJuICpzaW1wbGVGb250RGF0YTsKKyAgICBSZWZQdHI8
Rm9udD4gZm9udCA9IGZvbnRGb3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCB0aW1lc1N0ciwgZmFs
c2UpOworICAgIGlmIChmb250KQorICAgICAgICByZXR1cm4gKmZvbnQ7CiAKICAgICAvLyBUaGUg
VGltZXMgZmFsbGJhY2sgd2lsbCBhbG1vc3QgYWx3YXlzIHdvcmssIGJ1dCBpbiB0aGUgaGlnaGx5
IHVudXN1YWwgY2FzZSB3aGVyZQogICAgIC8vIHRoZSB1c2VyIGRvZXNuJ3QgaGF2ZSBpdCwgd2Ug
ZmFsbCBiYWNrIG9uIEx1Y2lkYSBHcmFuZGUgYmVjYXVzZSB0aGF0J3MKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HbHlwaFBhZ2VNYWMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HbHlwaFBhZ2VNYWMuY3Bw
CShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvR2x5cGhQYWdlTWFjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsOCArMzEsOCBAQAogCiAj
aW5jbHVkZSAiQ29yZUdyYXBoaWNzU1BJLmgiCiAjaW5jbHVkZSAiQ29yZVRleHRTUEkuaCIKKyNp
bmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKLSNpbmNsdWRlICJTaW1w
bGVGb250RGF0YS5oIgogI2luY2x1ZGUgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKICNpZiAh
UExBVEZPUk0oSU9TKQogI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25T
ZXJ2aWNlcy5oPgpAQCAtNDAsNyArNDAsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0
YXRpYyBib29sIHNob3VsZFVzZUNvcmVUZXh0KGNvbnN0IFVDaGFyKiBidWZmZXIsIHVuc2lnbmVk
IGJ1ZmZlckxlbmd0aCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQorc3RhdGljIGJv
b2wgc2hvdWxkVXNlQ29yZVRleHQoY29uc3QgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVy
TGVuZ3RoLCBjb25zdCBGb250KiBmb250RGF0YSkKIHsKICAgICBpZiAoZm9udERhdGEtPnBsYXRm
b3JtRGF0YSgpLmlzQ29tcG9zaXRlRm9udFJlZmVyZW5jZSgpKQogICAgICAgICByZXR1cm4gdHJ1
ZTsKQEAgLTU1LDcgKzU1LDcgQEAgc3RhdGljIGJvb2wgc2hvdWxkVXNlQ29yZVRleHQoY29uc3Qg
VUNoYQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBHbHlwaFBhZ2U6Om1heVVzZU1peGVk
Rm9udERhdGFXaGVuRmlsbGluZyhjb25zdCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJM
ZW5ndGgsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSkKK2Jvb2wgR2x5cGhQYWdlOjpt
YXlVc2VNaXhlZEZvbnRzV2hlbkZpbGxpbmcoY29uc3QgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQg
YnVmZmVyTGVuZ3RoLCBjb25zdCBGb250KiBmb250RGF0YSkKIHsKICNpZiBVU0UoQVBQS0lUKQog
ICAgIC8vIEZJWE1FOiBUaGlzIGlzIG9ubHkgcmVhbGx5IG5lZWRlZCBmb3IgY29tcG9zaXRlIGZv
bnQgcmVmZXJlbmNlcy4KQEAgLTY4LDcgKzY4LDcgQEAgYm9vbCBHbHlwaFBhZ2U6Om1heVVzZU1p
eGVkRm9udERhdGFXaGVuRgogI2VuZGlmCiB9CiAKLWJvb2wgR2x5cGhQYWdlOjpmaWxsKHVuc2ln
bmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZm
ZXJMZW5ndGgsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSkKK2Jvb2wgR2x5cGhQYWdl
OjpmaWxsKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1
bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IEZvbnQqIGZvbnREYXRhKQogewogICAgIGJvb2wg
aGF2ZUdseXBocyA9IGZhbHNlOwogCkBAIC0xNjMsNyArMTYzLDcgQEAgYm9vbCBHbHlwaFBhZ2U6
OmZpbGwodW5zaWduZWQgb2Zmc2V0LCB1bgogICAgICAgICAgICAgICAgICAgICB9CiAjaWYgVVNF
KEFQUEtJVCkKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBj
b25zdCBTaW1wbGVGb250RGF0YSogcnVuU2ltcGxlID0gZm9udERhdGEtPmNvbXBvc2l0ZUZvbnRS
ZWZlcmVuY2VGb250RGF0YSgoTlNGb250ICopcnVuRm9udCk7CisgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEZvbnQqIHJ1blNpbXBsZSA9IGZvbnREYXRhLT5jb21wb3NpdGVGb250UmVmZXJlbmNl
Rm9udCgoTlNGb250ICopcnVuRm9udCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChydW5TaW1w
bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IGds
eXBoQ291bnQ7ICsraSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJpbmdJ
bmRpY2VzW2ldID49IHN0YXRpY19jYXN0PENGSW5kZXg+KGJ1ZmZlckxlbmd0aCkpIHsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YUNvcmVU
ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvU2ltcGxlRm9udERhdGFDb3JlVGV4dC5jcHAJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YUNvcmVUZXh0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgorI2luY2x1ZGUgIkZvbnQuaCIKIAog
I2lmICFQTEFURk9STShJT1MpCiAjaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNh
dGlvblNlcnZpY2VzLmg+CkBAIC0zNSw3ICszNSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotQ0ZEaWN0aW9uYXJ5UmVmIFNpbXBsZUZvbnREYXRhOjpnZXRDRlN0cmluZ0F0dHJpYnV0ZXMo
VHlwZXNldHRpbmdGZWF0dXJlcyB0eXBlc2V0dGluZ0ZlYXR1cmVzLCBGb250T3JpZW50YXRpb24g
b3JpZW50YXRpb24pIGNvbnN0CitDRkRpY3Rpb25hcnlSZWYgRm9udDo6Z2V0Q0ZTdHJpbmdBdHRy
aWJ1dGVzKFR5cGVzZXR0aW5nRmVhdHVyZXMgdHlwZXNldHRpbmdGZWF0dXJlcywgRm9udE9yaWVu
dGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdAogewogICAgIHVuc2lnbmVkIGtleSA9IHR5cGVzZXR0
aW5nRmVhdHVyZXMgKyAxOwogICAgIEhhc2hNYXA8dW5zaWduZWQsIFJldGFpblB0cjxDRkRpY3Rp
b25hcnlSZWY+Pjo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IG1fQ0ZTdHJpbmdBdHRyaWJ1dGVzLmFk
ZChrZXksIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+KCkpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhTWFjLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YU1h
Yy5tbQkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL1NpbXBsZUZvbnREYXRhTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3
IEBACiAgKi8KIAogI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJTaW1wbGVGb250RGF0YS5o
IgorI2ltcG9ydCAiRm9udC5oIgogCiAjaW1wb3J0ICJCbG9ja0V4Y2VwdGlvbnMuaCIKICNpbXBv
cnQgIkNvbG9yLmgiCkBAIC03MSw3ICs3MSw3IEBAIHN0YXRpYyBib29sIGZvbnRIYXNWZXJ0aWNh
bEdseXBocyhDVEZvbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBib29sIGluaXRG
b250RGF0YShTaW1wbGVGb250RGF0YSogZm9udERhdGEpCitzdGF0aWMgYm9vbCBpbml0Rm9udERh
dGEoRm9udCogZm9udERhdGEpCiB7CiAgICAgaWYgKCFmb250RGF0YS0+cGxhdGZvcm1EYXRhKCku
Y2dGb250KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTg1LDcgKzg1LDcgQEAgc3RhdGlj
IE5TU3RyaW5nICp3ZWJGYWxsYmFja0ZvbnRGYW1pbHkodgogICAgIHJldHVybiB3ZWJGYWxsYmFj
a0ZvbnRGYW1pbHk7CiB9CiAKLWNvbnN0IFNpbXBsZUZvbnREYXRhKiBTaW1wbGVGb250RGF0YTo6
Y29tcG9zaXRlRm9udFJlZmVyZW5jZUZvbnREYXRhKE5TRm9udCAqa2V5KSBjb25zdAorY29uc3Qg
Rm9udCogRm9udDo6Y29tcG9zaXRlRm9udFJlZmVyZW5jZUZvbnQoTlNGb250ICprZXkpIGNvbnN0
CiB7CiAgICAgaWYgKCFrZXkgfHwgQ0ZFcXVhbChhZG9wdENGKENURm9udENvcHlQb3N0U2NyaXB0
TmFtZShDVEZvbnRSZWYoa2V5KSkpLmdldCgpLCBDRlNUUigiTGFzdFJlc29ydCIpKSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xMDMsMTIgKzEwMywxMiBAQCBjb25zdCBTaW1wbGVGb250
RGF0YSogU2ltcGxlRm9udERhdGE6OmNvCiAgICAgICAgIGJvb2wgc3ludGhldGljT2JsaXF1ZSA9
IHBsYXRmb3JtRGF0YSgpLnN5bnRoZXRpY09ibGlxdWUoKSAmJiAhKHRyYWl0cyAmIGtDVEZvbnRJ
dGFsaWNUcmFpdCk7CiAKICAgICAgICAgRm9udFBsYXRmb3JtRGF0YSBzdWJzdGl0dXRlUGxhdGZv
cm0oc3Vic3RpdHV0ZUZvbnQsIHBsYXRmb3JtRGF0YSgpLnNpemUoKSwgaXNVc2luZ1ByaW50ZXJG
b250LCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNPYmxpcXVlLCBwbGF0Zm9ybURhdGEoKS5vcmll
bnRhdGlvbigpLCBwbGF0Zm9ybURhdGEoKS53aWR0aFZhcmlhbnQoKSk7Ci0gICAgICAgIGFkZFJl
c3VsdC5pdGVyYXRvci0+dmFsdWUgPSBTaW1wbGVGb250RGF0YTo6Y3JlYXRlKHN1YnN0aXR1dGVQ
bGF0Zm9ybSwgaXNDdXN0b21Gb250KCkpOworICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZh
bHVlID0gRm9udDo6Y3JlYXRlKHN1YnN0aXR1dGVQbGF0Zm9ybSwgaXNDdXN0b21Gb250KCkpOwog
ICAgIH0KICAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKIH0KIAot
dm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Jbml0KCkKK3ZvaWQgRm9udDo6cGxhdGZvcm1J
bml0KCkKIHsKICAgICBtX3N5bnRoZXRpY0JvbGRPZmZzZXQgPSBtX3BsYXRmb3JtRGF0YS5tX3N5
bnRoZXRpY0JvbGQgPyAxLjBmIDogMC5mOwogCkBAIC0yMjYsNyArMjI2LDcgQEAgdm9pZCBTaW1w
bGVGb250RGF0YTo6cGxhdGZvcm1Jbml0KCkKICAgICAgICAgZWxzZQogICAgICAgICAgICAgeEhl
aWdodCA9IHNjYWxlRW1Ub1VuaXRzKENHRm9udEdldFhIZWlnaHQobV9wbGF0Zm9ybURhdGEuY2dG
b250KCkpLCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZTsKICAgICB9IGVsc2UKLSAgICAgICAgeEhl
aWdodCA9IHZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbkZvbnREYXRhKCktPmZvbnRNZXRyaWNzKCku
eEhlaWdodCgpOworICAgICAgICB4SGVpZ2h0ID0gdmVydGljYWxSaWdodE9yaWVudGF0aW9uRm9u
dCgpLT5mb250TWV0cmljcygpLnhIZWlnaHQoKTsKIAogICAgIG1fZm9udE1ldHJpY3Muc2V0VW5p
dHNQZXJFbSh1bml0c1BlckVtKTsKICAgICBtX2ZvbnRNZXRyaWNzLnNldEFzY2VudChhc2NlbnQp
OwpAQCAtMjQxLDcgKzI0MSw3IEBAIHN0YXRpYyBDRkRhdGFSZWYgY29weUZvbnRUYWJsZUZvclRh
ZyhGb24KICAgICByZXR1cm4gQ0dGb250Q29weVRhYmxlRm9yVGFnKHBsYXRmb3JtRGF0YS5jZ0Zv
bnQoKSwgdGFibGVOYW1lKTsKIH0KIAotdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1DaGFy
V2lkdGhJbml0KCkKK3ZvaWQgRm9udDo6cGxhdGZvcm1DaGFyV2lkdGhJbml0KCkKIHsKICAgICBt
X2F2Z0NoYXJXaWR0aCA9IDA7CiAgICAgbV9tYXhDaGFyV2lkdGggPSAwOwpAQCAtMjY5LDE3ICsy
NjksMTcgQEAgdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1DaGFyV2lkdGhJbgogfQogI2Vu
ZGlmIC8vIFVTRShBUFBLSVQpCiAKLXZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtRGVzdHJv
eSgpCit2b2lkIEZvbnQ6OnBsYXRmb3JtRGVzdHJveSgpCiB7CiB9CiAKICNpZiAhUExBVEZPUk0o
SU9TKQotUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OnBsYXRmb3Jt
Q3JlYXRlU2NhbGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24sIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAorUGFzc1JlZlB0cjxGb250PiBGb250OjpwbGF0
Zm9ybUNyZWF0ZVNjYWxlZEZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24sIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAogewogICAgIGlmIChpc0N1c3RvbUZvbnQoKSkg
ewogICAgICAgICBGb250UGxhdGZvcm1EYXRhIHNjYWxlZEZvbnREYXRhKG1fcGxhdGZvcm1EYXRh
KTsKICAgICAgICAgc2NhbGVkRm9udERhdGEubV9zaXplID0gc2NhbGVkRm9udERhdGEubV9zaXpl
ICogc2NhbGVGYWN0b3I7Ci0gICAgICAgIHJldHVybiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlKHNj
YWxlZEZvbnREYXRhLCB0cnVlLCBmYWxzZSk7CisgICAgICAgIHJldHVybiBGb250OjpjcmVhdGUo
c2NhbGVkRm9udERhdGEsIHRydWUsIGZhbHNlKTsKICAgICB9CiAKICAgICBCRUdJTl9CTE9DS19P
QkpDX0VYQ0VQVElPTlM7CkBAIC0zMTAsNyArMzEwLDcgQEAgUGFzc1JlZlB0cjxTaW1wbGVGb250
RGF0YT4gU2ltcGxlRm9udERhdAogICAgIHJldHVybiAwOwogfQogCi12b2lkIFNpbXBsZUZvbnRE
YXRhOjpkZXRlcm1pbmVQaXRjaCgpCit2b2lkIEZvbnQ6OmRldGVybWluZVBpdGNoKCkKIHsKICAg
ICBOU0ZvbnQqIGYgPSBtX3BsYXRmb3JtRGF0YS5uc0ZvbnQoKTsKICAgICAvLyBTcGVjaWFsIGNh
c2UgT3Nha2EtTW9uby4KQEAgLTMzMyw3ICszMzMsNyBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpk
ZXRlcm1pbmVQaXRjaCgpCiB9CiAjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAotRmxvYXRSZWN0
IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKEdseXBoIGdseXBoKSBjb25z
dAorRmxvYXRSZWN0IEZvbnQ6OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNv
bnN0CiB7CiAgICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94OwogICAgIGJvdW5kaW5nQm94ID0gQ1RG
b250R2V0Qm91bmRpbmdSZWN0c0ZvckdseXBocyhtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSwgcGxh
dGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCA/IGtDVEZvbnRWZXJ0aWNhbE9y
aWVudGF0aW9uIDoga0NURm9udEhvcml6b250YWxPcmllbnRhdGlvbiwgJmdseXBoLCAwLCAxKTsK
QEAgLTM0NSw3ICszNDUsNyBAQCBGbG9hdFJlY3QgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQm91
bmRzCiB9CiAKICNpZiBQTEFURk9STShNQUMpCi1pbmxpbmUgQ0dGb250UmVuZGVyaW5nU3R5bGUg
U2ltcGxlRm9udERhdGE6OnJlbmRlcmluZ1N0eWxlKCkgY29uc3QKK2lubGluZSBDR0ZvbnRSZW5k
ZXJpbmdTdHlsZSBGb250OjpyZW5kZXJpbmdTdHlsZSgpIGNvbnN0CiB7CiAgICAgQ0dGb250UmVu
ZGVyaW5nU3R5bGUgc3R5bGUgPSBrQ0dGb250UmVuZGVyaW5nU3R5bGVBbnRpYWxpYXNpbmcgfCBr
Q0dGb250UmVuZGVyaW5nU3R5bGVTdWJwaXhlbFBvc2l0aW9uaW5nIHwga0NHRm9udFJlbmRlcmlu
Z1N0eWxlU3VicGl4ZWxRdWFudGl6YXRpb247CiAgICAgTlNGb250ICpmb250ID0gcGxhdGZvcm1E
YXRhKCkubnNGb250KCk7CkBAIC0zNjQsNyArMzY0LDcgQEAgaW5saW5lIENHRm9udFJlbmRlcmlu
Z1N0eWxlIFNpbXBsZUZvbnREYQogICAgIHJldHVybiBzdHlsZTsKIH0KIAotaW5saW5lIGJvb2wg
U2ltcGxlRm9udERhdGE6OmFkdmFuY2VGb3JDb2xvckJpdG1hcEZvbnQoR2x5cGggZ2x5cGgsIENH
U2l6ZSYgYWR2YW5jZSkgY29uc3QKK2lubGluZSBib29sIEZvbnQ6OmFkdmFuY2VGb3JDb2xvckJp
dG1hcEZvbnQoR2x5cGggZ2x5cGgsIENHU2l6ZSYgYWR2YW5jZSkgY29uc3QKIHsKICAgICBOU0Zv
bnQgKmZvbnQgPSBwbGF0Zm9ybURhdGEoKS5uc0ZvbnQoKTsKICAgICBpZiAoIWZvbnQgfHwgIXBs
YXRmb3JtRGF0YSgpLmlzQ29sb3JCaXRtYXBGb250KCkpCkBAIC0zOTQsNyArMzk0LDcgQEAgc3Rh
dGljIGlubGluZSBib29sIGlzRW1vamkoY29uc3QgRm9udFBsYQogI2VuZGlmCiB9CiAKLWlubGlu
ZSBib29sIFNpbXBsZUZvbnREYXRhOjpjYW5Vc2VGYXN0R2x5cGhBZHZhbmNlR2V0dGVyKEdseXBo
IGdseXBoLCBDR1NpemUmIGFkdmFuY2UsIGJvb2wmIHBvcHVsYXRlZEFkdmFuY2UpIGNvbnN0Citp
bmxpbmUgYm9vbCBGb250OjpjYW5Vc2VGYXN0R2x5cGhBZHZhbmNlR2V0dGVyKEdseXBoIGdseXBo
LCBDR1NpemUmIGFkdmFuY2UsIGJvb2wmIHBvcHVsYXRlZEFkdmFuY2UpIGNvbnN0CiB7CiAgICAg
Ly8gRmFzdCBnZXR0ZXIgZG9lc24ndCB0YWtlIGN1c3RvbSB0cmFja2luZyBpbnRvIGFjY291bnQK
ICAgICBpZiAoaGFzQ3VzdG9tVHJhY2tpbmcocGxhdGZvcm1EYXRhKCkuY3RGb250KCkpKQpAQCAt
NDEwLDcgKzQxMCw3IEBAIGlubGluZSBib29sIFNpbXBsZUZvbnREYXRhOjpjYW5Vc2VGYXN0R2wK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotZmxvYXQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtV2lk
dGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKK2Zsb2F0IEZvbnQ6OnBsYXRmb3JtV2lkdGhG
b3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKIHsKICAgICBDR1NpemUgYWR2YW5jZSA9IENHU2l6
ZVplcm87CiAgICAgYm9vbCBob3Jpem9udGFsID0gcGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24o
KSA9PSBIb3Jpem9udGFsOwpAQCAtNDQ2LDcgKzQ0Niw3IEBAIHN0YXRpYyBjb25zdCBVbmlDaGFy
KiBwcm92aWRlU3RyaW5nQW5kQXQKICAgICByZXR1cm4gaW5mby0+Y2hhcmFjdGVycyArIHN0cmlu
Z0luZGV4OwogfQogCi1ib29sIFNpbXBsZUZvbnREYXRhOjpjYW5SZW5kZXJDb21iaW5pbmdDaGFy
YWN0ZXJTZXF1ZW5jZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkgY29u
c3QKK2Jvb2wgRm9udDo6Y2FuUmVuZGVyQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY29uc3Qg
VUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbnR5cGUvT3BlblR5cGVNYXRoRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVNYXRoRGF0YS5jcHAJKHJldmlz
aW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBl
L09wZW5UeXBlTWF0aERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMiArMjYsMTIgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJPcGVuVHlwZU1hdGhEYXRhLmgiCiAKKyNp
bmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgogI2lmIEVOQUJM
RShPUEVOVFlQRV9NQVRIKQogI2luY2x1ZGUgIk9wZW5UeXBlVHlwZXMuaCIKICNlbmRpZgogI2lu
Y2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAKIHVz
aW5nIG5hbWVzcGFjZSBzdGQ7CiAKQEAgLTIzNSw5ICsyMzUsOSBAQCBzdHJ1Y3QgTUFUSFRhYmxl
IDogVGFibGVCYXNlIHsKICNlbmRpZiAvLyBFTkFCTEUoT1BFTlRZUEVfTUFUSCkKIAogI2lmIEVO
QUJMRShPUEVOVFlQRV9NQVRIKQotT3BlblR5cGVNYXRoRGF0YTo6T3BlblR5cGVNYXRoRGF0YShj
b25zdCBGb250UGxhdGZvcm1EYXRhJiBmb250RGF0YSkKK09wZW5UeXBlTWF0aERhdGE6Ok9wZW5U
eXBlTWF0aERhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZm9udCkKIHsKLSAgICBtX21hdGhC
dWZmZXIgPSBmb250RGF0YS5vcGVuVHlwZVRhYmxlKE9wZW5UeXBlOjpNQVRIVGFnKTsKKyAgICBt
X21hdGhCdWZmZXIgPSBmb250Lm9wZW5UeXBlVGFibGUoT3BlblR5cGU6Ok1BVEhUYWcpOwogICAg
IGNvbnN0IE9wZW5UeXBlOjpNQVRIVGFibGUqIG1hdGggPSBPcGVuVHlwZTo6dmFsaWRhdGVUYWJs
ZTxPcGVuVHlwZTo6TUFUSFRhYmxlPihtX21hdGhCdWZmZXIpOwogICAgIGlmICghbWF0aCkgewog
ICAgICAgICBtX21hdGhCdWZmZXIgPSBudWxscHRyOwpAQCAtMjY1LDcgKzI2NSw3IEBAIE9wZW5U
eXBlTWF0aERhdGE6On5PcGVuVHlwZU1hdGhEYXRhKCkKIH0KIAogI2lmIEVOQUJMRShPUEVOVFlQ
RV9NQVRIKQotZmxvYXQgT3BlblR5cGVNYXRoRGF0YTo6Z2V0TWF0aENvbnN0YW50KGNvbnN0IFNp
bXBsZUZvbnREYXRhJiBmb250LCBNYXRoQ29uc3RhbnQgY29uc3RhbnQpIGNvbnN0CitmbG9hdCBP
cGVuVHlwZU1hdGhEYXRhOjpnZXRNYXRoQ29uc3RhbnQoY29uc3QgRm9udCYgZm9udCwgTWF0aENv
bnN0YW50IGNvbnN0YW50KSBjb25zdAogewogICAgIGludDMyX3QgdmFsdWUgPSAwOwogCkBAIC0y
ODgsNyArMjg4LDcgQEAgZmxvYXQgT3BlblR5cGVNYXRoRGF0YTo6Z2V0TWF0aENvbnN0YW50KAog
CiAgICAgcmV0dXJuIHZhbHVlICogZm9udC5zaXplUGVyVW5pdCgpOwogI2Vsc2UKLWZsb2F0IE9w
ZW5UeXBlTWF0aERhdGE6OmdldE1hdGhDb25zdGFudChjb25zdCBTaW1wbGVGb250RGF0YSYsIE1h
dGhDb25zdGFudCkgY29uc3QKK2Zsb2F0IE9wZW5UeXBlTWF0aERhdGE6OmdldE1hdGhDb25zdGFu
dChjb25zdCBGb250JiwgTWF0aENvbnN0YW50KSBjb25zdAogewogICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgIHJldHVybiAwOwpAQCAtMjk2LDcgKzI5Niw3IEBAIGZsb2F0IE9wZW5UeXBl
TWF0aERhdGE6OmdldE1hdGhDb25zdGFudCgKIH0KIAogI2lmIEVOQUJMRShPUEVOVFlQRV9NQVRI
KQotZmxvYXQgT3BlblR5cGVNYXRoRGF0YTo6Z2V0SXRhbGljQ29ycmVjdGlvbihjb25zdCBTaW1w
bGVGb250RGF0YSYgZm9udCwgR2x5cGggZ2x5cGgpIGNvbnN0CitmbG9hdCBPcGVuVHlwZU1hdGhE
YXRhOjpnZXRJdGFsaWNDb3JyZWN0aW9uKGNvbnN0IEZvbnQmIGZvbnQsIEdseXBoIGdseXBoKSBj
b25zdAogewogICAgIGNvbnN0IE9wZW5UeXBlOjpNQVRIVGFibGUqIG1hdGggPSBPcGVuVHlwZTo6
dmFsaWRhdGVUYWJsZTxPcGVuVHlwZTo6TUFUSFRhYmxlPihtX21hdGhCdWZmZXIpOwogICAgIEFT
U0VSVChtYXRoKTsKQEAgLTMxMCw3ICszMTAsNyBAQCBmbG9hdCBPcGVuVHlwZU1hdGhEYXRhOjpn
ZXRJdGFsaWNDb3JyZWN0CiAKICAgICByZXR1cm4gbWF0aEl0YWxpY3NDb3JyZWN0aW9uSW5mby0+
Z2V0SXRhbGljQ29ycmVjdGlvbigqbV9tYXRoQnVmZmVyLCBnbHlwaCkgKiBmb250LnNpemVQZXJV
bml0KCk7CiAjZWxzZQotZmxvYXQgT3BlblR5cGVNYXRoRGF0YTo6Z2V0SXRhbGljQ29ycmVjdGlv
bihjb25zdCBTaW1wbGVGb250RGF0YSYsIEdseXBoKSBjb25zdAorZmxvYXQgT3BlblR5cGVNYXRo
RGF0YTo6Z2V0SXRhbGljQ29ycmVjdGlvbihjb25zdCBGb250JiwgR2x5cGgpIGNvbnN0CiB7CiAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZU1hdGhEYXRhLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5
cGVNYXRoRGF0YS5oCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZU1hdGhEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM1LDEzICszNSwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZvbnRQbGF0Zm9y
bURhdGE7CiBjbGFzcyBTaGFyZWRCdWZmZXI7Ci1jbGFzcyBTaW1wbGVGb250RGF0YTsKK2NsYXNz
IEZvbnQ7CiAKIGNsYXNzIE9wZW5UeXBlTWF0aERhdGEgOiBwdWJsaWMgUmVmQ291bnRlZDxPcGVu
VHlwZU1hdGhEYXRhPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8T3BlblR5cGVN
YXRoRGF0YT4gY3JlYXRlKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnREYXRhKQorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPE9wZW5UeXBlTWF0aERhdGE+IGNyZWF0ZShjb25zdCBGb250UGxhdGZv
cm1EYXRhJiBmb250KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBPcGVuVHlw
ZU1hdGhEYXRhKGZvbnREYXRhKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgT3BlblR5
cGVNYXRoRGF0YShmb250KSk7CiAgICAgfQogICAgIH5PcGVuVHlwZU1hdGhEYXRhKCk7CiAKQEAg
LTExMyw4ICsxMTMsOCBAQCBwdWJsaWM6CiAgICAgICAgIGJvb2wgaXNFeHRlbmRlcjsKICAgICB9
OwogCi0gICAgZmxvYXQgZ2V0TWF0aENvbnN0YW50KGNvbnN0IFNpbXBsZUZvbnREYXRhJiwgTWF0
aENvbnN0YW50KSBjb25zdDsKLSAgICBmbG9hdCBnZXRJdGFsaWNDb3JyZWN0aW9uKGNvbnN0IFNp
bXBsZUZvbnREYXRhJiwgR2x5cGgpIGNvbnN0OworICAgIGZsb2F0IGdldE1hdGhDb25zdGFudChj
b25zdCBGb250JiwgTWF0aENvbnN0YW50KSBjb25zdDsKKyAgICBmbG9hdCBnZXRJdGFsaWNDb3Jy
ZWN0aW9uKGNvbnN0IEZvbnQmLCBHbHlwaCkgY29uc3Q7CiAgICAgdm9pZCBnZXRNYXRoVmFyaWFu
dHMoR2x5cGgsIGJvb2wgaXNWZXJ0aWNhbCwgVmVjdG9yPEdseXBoPiYgc2l6ZVZhcmlhbnRzLCBW
ZWN0b3I8QXNzZW1ibHlQYXJ0PiYgYXNzZW1ibHlQYXJ0cykgY29uc3Q7CiAKIHByaXZhdGU6Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVZl
cnRpY2FsRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVWZXJ0aWNhbERhdGEuY3BwCShyZXZpc2lvbiAxNzg4NTcp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVZl
cnRpY2FsRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDEwICsyNywxMCBAQAogI2luY2x1
ZGUgIk9wZW5UeXBlVmVydGljYWxEYXRhLmgiCiAKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNp
bmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiR2x5cGhQYWdlLmgiCiAjaW5jbHVkZSAiT3BlblR5
cGVUeXBlcy5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgotI2luY2x1ZGUgIlNpbXBsZUZv
bnREYXRhLmgiCiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3Rk
OwpAQCAtNDc5LDcgKzQ3OSw3IEBAIHZvaWQgT3BlblR5cGVWZXJ0aWNhbERhdGE6OmxvYWRWZXJ0
aWNhbEcKICAgICAgICAgZ3N1Yi0+Z2V0VmVydGljYWxHbHlwaFN1YnN0aXR1dGlvbnMoJm1fdmVy
dGljYWxHbHlwaE1hcCwgKmJ1ZmZlci5nZXQoKSk7CiB9CiAKLWZsb2F0IE9wZW5UeXBlVmVydGlj
YWxEYXRhOjphZHZhbmNlSGVpZ2h0KGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LCBHbHlwaCBn
bHlwaCkgY29uc3QKK2Zsb2F0IE9wZW5UeXBlVmVydGljYWxEYXRhOjphZHZhbmNlSGVpZ2h0KGNv
bnN0IEZvbnQqIGZvbnQsIEdseXBoIGdseXBoKSBjb25zdAogewogICAgIHNpemVfdCBjb3VudEhl
aWdodHMgPSBtX2FkdmFuY2VIZWlnaHRzLnNpemUoKTsKICAgICBpZiAoY291bnRIZWlnaHRzKSB7
CkBAIC00OTIsNyArNDkyLDcgQEAgZmxvYXQgT3BlblR5cGVWZXJ0aWNhbERhdGE6OmFkdmFuY2VI
ZWlnaAogICAgIHJldHVybiBmb250LT5mb250TWV0cmljcygpLmhlaWdodCgpOwogfQogCi12b2lk
IE9wZW5UeXBlVmVydGljYWxEYXRhOjpnZXRWZXJ0aWNhbFRyYW5zbGF0aW9uc0ZvckdseXBocyhj
b25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgY29uc3QgR2x5cGgqIGdseXBocywgc2l6ZV90IGNv
dW50LCBmbG9hdCogb3V0WFlBcnJheSkgY29uc3QKK3ZvaWQgT3BlblR5cGVWZXJ0aWNhbERhdGE6
OmdldFZlcnRpY2FsVHJhbnNsYXRpb25zRm9yR2x5cGhzKGNvbnN0IEZvbnQqIGZvbnQsIGNvbnN0
IEdseXBoKiBnbHlwaHMsIHNpemVfdCBjb3VudCwgZmxvYXQqIG91dFhZQXJyYXkpIGNvbnN0CiB7
CiAgICAgc2l6ZV90IGNvdW50V2lkdGhzID0gbV9hZHZhbmNlV2lkdGhzLnNpemUoKTsKICAgICBB
U1NFUlQoY291bnRXaWR0aHMgPiAwKTsKQEAgLTUzNSw3ICs1MzUsNyBAQCB2b2lkIE9wZW5UeXBl
VmVydGljYWxEYXRhOjpnZXRWZXJ0aWNhbFRyCiAgICAgfQogfQogCi12b2lkIE9wZW5UeXBlVmVy
dGljYWxEYXRhOjpzdWJzdGl0dXRlV2l0aFZlcnRpY2FsR2x5cGhzKGNvbnN0IFNpbXBsZUZvbnRE
YXRhKiBmb250LCBHbHlwaFBhZ2UqIGdseXBoUGFnZSwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25l
ZCBsZW5ndGgpIGNvbnN0Cit2b2lkIE9wZW5UeXBlVmVydGljYWxEYXRhOjpzdWJzdGl0dXRlV2l0
aFZlcnRpY2FsR2x5cGhzKGNvbnN0IEZvbnQqIGZvbnQsIEdseXBoUGFnZSogZ2x5cGhQYWdlLCB1
bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3QKIHsKICAgICBjb25zdCBIYXNo
TWFwPEdseXBoLCBHbHlwaD4mIG1hcCA9IG1fdmVydGljYWxHbHlwaE1hcDsKICAgICBpZiAobWFw
LmlzRW1wdHkoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW50
eXBlL09wZW5UeXBlVmVydGljYWxEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVWZXJ0aWNhbERhdGEuaAkocmV2aXNp
b24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUv
T3BlblR5cGVWZXJ0aWNhbERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsOSArMzUsOSBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEZvbnQ7CiBjbGFzcyBGb250UGxhdGZvcm1E
YXRhOwogY2xhc3MgR2x5cGhQYWdlOwotY2xhc3MgU2ltcGxlRm9udERhdGE7CiAKIGNsYXNzIE9w
ZW5UeXBlVmVydGljYWxEYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8T3BlblR5cGVWZXJ0aWNhbERh
dGE+IHsKIHB1YmxpYzoKQEAgLTQ4LDkgKzQ4LDkgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc09w
ZW5UeXBlKCkgY29uc3QgeyByZXR1cm4gIW1fYWR2YW5jZVdpZHRocy5pc0VtcHR5KCk7IH0KICAg
ICBib29sIGhhc1ZlcnRpY2FsTWV0cmljcygpIGNvbnN0IHsgcmV0dXJuICFtX2FkdmFuY2VIZWln
aHRzLmlzRW1wdHkoKTsgfQotICAgIGZsb2F0IGFkdmFuY2VIZWlnaHQoY29uc3QgU2ltcGxlRm9u
dERhdGEqLCBHbHlwaCkgY29uc3Q7Ci0gICAgdm9pZCBnZXRWZXJ0aWNhbFRyYW5zbGF0aW9uc0Zv
ckdseXBocyhjb25zdCBTaW1wbGVGb250RGF0YSosIGNvbnN0IEdseXBoKiwgc2l6ZV90LCBmbG9h
dCogb3V0WFlBcnJheSkgY29uc3Q7Ci0gICAgdm9pZCBzdWJzdGl0dXRlV2l0aFZlcnRpY2FsR2x5
cGhzKGNvbnN0IFNpbXBsZUZvbnREYXRhKiwgR2x5cGhQYWdlKiwgdW5zaWduZWQgb2Zmc2V0LCB1
bnNpZ25lZCBsZW5ndGgpIGNvbnN0OworICAgIGZsb2F0IGFkdmFuY2VIZWlnaHQoY29uc3QgRm9u
dCosIEdseXBoKSBjb25zdDsKKyAgICB2b2lkIGdldFZlcnRpY2FsVHJhbnNsYXRpb25zRm9yR2x5
cGhzKGNvbnN0IEZvbnQqLCBjb25zdCBHbHlwaCosIHNpemVfdCwgZmxvYXQqIG91dFhZQXJyYXkp
IGNvbnN0OworICAgIHZvaWQgc3Vic3RpdHV0ZVdpdGhWZXJ0aWNhbEdseXBocyhjb25zdCBGb250
KiwgR2x5cGhQYWdlKiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0Owog
CiBwcml2YXRlOgogICAgIGV4cGxpY2l0IE9wZW5UeXBlVmVydGljYWxEYXRhKGNvbnN0IEZvbnRQ
bGF0Zm9ybURhdGEmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9Gb250Q0dXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENHV2luLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjgsMTAgKzI4LDEwIEBACiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNs
dWRlICJGbG9hdENvbnZlcnNpb24uaCIKKyNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiR2x5
cGhCdWZmZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbnRS
ZWN0LmgiCi0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKICNpbmNsdWRlICJVbmlzY3JpYmVD
b250cm9sbGVyLmgiCiAjaW5jbHVkZSAiV2ViQ29yZVRleHRSZW5kZXJlci5oIgogI2luY2x1ZGUg
PEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgpAQCAtMTI3LDcgKzEy
Nyw3IEBAIHN0YXRpYyBDR1BhdGhSZWYgY3JlYXRlUGF0aEZvckdseXBoKEhEQyAKICAgICByZXR1
cm4gcGF0aDsKIH0KIAotdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRl
eHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsIGNvbnN0IEds
eXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwKK3ZvaWQgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMoR3Jh
cGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEZvbnQqIGZvbnQsIGNvbnN0IEds
eXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwKICAgICBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0CiB7CiAgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4
dCA9IGdyYXBoaWNzQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcAko
cmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ZvbnRDYWNoZVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDkgKzI4LDkgQEAKIAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjaW5jbHVkZSAiRm9udC5o
IgogI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgogI2luY2x1ZGUgIkhXbmREQy5oIgotI2luY2x1ZGUg
IlNpbXBsZUZvbnREYXRhLmgiCiAjaW5jbHVkZSA8bWxhbmcuaD4KICNpbmNsdWRlIDx3aW5kb3dz
Lmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KQEAgLTE5OSwxMCArMTk5LDEwIEBAIHN0YXRp
YyBIRk9OVCBjcmVhdGVNTGFuZ0ZvbnQoSU1MYW5nRm9udEwKICAgICByZXR1cm4gaGZvbnQ7CiB9
CiAKLVJlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpzeXN0ZW1GYWxsYmFja0ZvckNo
YXJhY3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgY29uc3QgU2ltcGxl
Rm9udERhdGEqIG9yaWdpbmFsRm9udERhdGEsIGJvb2wsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
LCBpbnQgbGVuZ3RoKQorUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6c3lzdGVtRmFsbGJhY2tGb3JD
aGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IEZvbnQq
IG9yaWdpbmFsRm9udERhdGEsIGJvb2wsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVu
Z3RoKQogewogICAgIFVDaGFyIGNoYXJhY3RlciA9IGNoYXJhY3RlcnNbMF07Ci0gICAgUmVmUHRy
PFNpbXBsZUZvbnREYXRhPiBmb250RGF0YTsKKyAgICBSZWZQdHI8Rm9udD4gZm9udERhdGE7CiAg
ICAgSFduZERDIGhkYygwKTsKICAgICBIRk9OVCBwcmltYXJ5Rm9udCA9IG9yaWdpbmFsRm9udERh
dGEtPnBsYXRmb3JtRGF0YSgpLmhmb250KCk7CiAgICAgSEdESU9CSiBvbGRGb250ID0gU2VsZWN0
T2JqZWN0KGhkYywgcHJpbWFyeUZvbnQpOwpAQCAtMzA5LDE2ICszMDksMTYgQEAgUmVmUHRyPFNp
bXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OnN5c3RlbQogICAgIHJldHVybiBmb250RGF0YS5yZWxl
YXNlKCk7CiB9CiAKLVJlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpmb250RGF0YUZy
b21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3Jp
cHRpb24sIGNvbnN0IExPR0ZPTlQmIGZvbnQsIEF0b21pY1N0cmluZyYgb3V0Rm9udEZhbWlseU5h
bWUpCitSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpmb250RGF0YUZyb21EZXNjcmlwdGlvbkFuZExv
Z0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IExPR0ZP
TlQmIGZvbnQsIEF0b21pY1N0cmluZyYgb3V0Rm9udEZhbWlseU5hbWUpCiB7CiAgICAgQXRvbWlj
U3RyaW5nIGZhbWlseU5hbWUgPSBTdHJpbmcoZm9udC5sZkZhY2VOYW1lLCB3Y3NubGVuKGZvbnQu
bGZGYWNlTmFtZSwgTEZfRkFDRVNJWkUpKTsKLSAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IGZv
bnREYXRhID0gZm9udEZvckZhbWlseShmb250RGVzY3JpcHRpb24sIGZhbWlseU5hbWUpOworICAg
IFJlZlB0cjxGb250PiBmb250RGF0YSA9IGZvbnRGb3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCBm
YW1pbHlOYW1lKTsKICAgICBpZiAoZm9udERhdGEpCiAgICAgICAgIG91dEZvbnRGYW1pbHlOYW1l
ID0gZmFtaWx5TmFtZTsKICAgICByZXR1cm4gZm9udERhdGE7CiB9CiAKLVJlZjxTaW1wbGVGb250
RGF0YT4gRm9udENhY2hlOjpsYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZm9udERlc2NyaXB0aW9uKQorUmVmPEZvbnQ+IEZvbnRDYWNoZTo6bGFzdFJlc29ydEZh
bGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikKIHsKICAg
ICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBmYWxsYmFja0Zv
bnROYW1lLCAoKSk7CiAgICAgaWYgKCFmYWxsYmFja0ZvbnROYW1lLmlzRW1wdHkoKSkKQEAgLTMz
Nyw3ICszMzcsNyBAQCBSZWY8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6bGFzdFJlc29yCiAg
ICAgICAgIEF0b21pY1N0cmluZygiTHVjaWRhIFNhbnMgVW5pY29kZSIsIEF0b21pY1N0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpLAogICAgICAgICBBdG9taWNTdHJpbmcoIkFyaWFsIiwgQXRv
bWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkKICAgICB9OwotICAgIFJlZlB0cjxTaW1w
bGVGb250RGF0YT4gc2ltcGxlRm9udDsKKyAgICBSZWZQdHI8Rm9udD4gc2ltcGxlRm9udDsKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFdURl9BUlJBWV9MRU5HVEgoZmFsbGJhY2tGb250cyk7
ICsraSkgewogICAgICAgICBpZiAoc2ltcGxlRm9udCA9IGZvbnRGb3JGYW1pbHkoZm9udERlc2Ny
aXB0aW9uLCBmYWxsYmFja0ZvbnRzW2ldKSkgewogICAgICAgICAgICAgZmFsbGJhY2tGb250TmFt
ZSA9IGZhbGxiYWNrRm9udHNbaV07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vRm9udFdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0ZvbnRXaW4uY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFdpbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDEzICsyNiwxMyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZvbnRD
YXNjYWRlLmgiCiAKKyNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9udEdseXBocy5oIgog
I2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAj
aW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKICNpbmNsdWRlICJM
b2dnaW5nLmgiCi0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKICNpbmNsdWRlICJUZXh0UnVu
LmgiCiAjaW5jbHVkZSAiVW5pc2NyaWJlQ29udHJvbGxlci5oIgogI2luY2x1ZGUgPHd0Zi9NYXRo
RXh0cmFzLmg+CkBAIC0xMjAsNyArMTIwLDcgQEAgdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0VtcGhh
c2lzTWFya3NGb3JDbwogICAgIGRyYXdFbXBoYXNpc01hcmtzKGNvbnRleHQsIHJ1biwgZ2x5cGhC
dWZmZXIsIG1hcmssIEZsb2F0UG9pbnQocG9pbnQueCgpICsgaW5pdGlhbEFkdmFuY2UsIHBvaW50
LnkoKSkpOwogfQogCi1mbG9hdCBGb250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0
KGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxs
YmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAorZmxvYXQgRm9u
dENhc2NhZGU6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIEhh
c2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92
ZXJmbG93KSBjb25zdAogewogICAgIFVuaXNjcmliZUNvbnRyb2xsZXIgY29udHJvbGxlcih0aGlz
LCBydW4sIGZhbGxiYWNrRm9udHMpOwogICAgIGNvbnRyb2xsZXIuYWR2YW5jZShydW4ubGVuZ3Ro
KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFn
ZVRyZWVOb2RlQ0dXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVlTm9kZUNHV2luLmNwcAkocmV2aXNpb24gMTc4ODU3
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVO
b2RlQ0dXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMiArMjksMTIgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJHbHlwaFBhZ2UuaCIKIAotI2luY2x1ZGUgIlNpbXBsZUZv
bnREYXRhLmgiCisjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgPFdlYktpdFN5c3RlbUludGVy
ZmFjZS9XZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1i
b29sIEdseXBoUGFnZTo6ZmlsbCh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNo
YXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBTaW1wbGVGb250RGF0YSog
Zm9udERhdGEpCitib29sIEdseXBoUGFnZTo6ZmlsbCh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVk
IGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBGb250
KiBmb250RGF0YSkKIHsKICAgICAvLyBidWZmZXJMZW5ndGggd2lsbCBiZSBncmVhdGVyIHRoYW4g
dGhlIHJlcXVlc3RlZCBudW1iZXIgb2YgZ2x5cGhzIGlmIHRoZSBidWZmZXIgY29udGFpbnMgc3Vy
cm9nYXRlIHBhaXJzLgogICAgIC8vIFdlIHdvbid0IHN1cHBvcnQgdGhpcyBmb3Igbm93LgpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2Rl
Q2Fpcm9XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9HbHlwaFBhZ2VUcmVlTm9kZUNhaXJvV2luLmNwcAkocmV2aXNpb24gMTc4ODU3KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2Rl
Q2Fpcm9XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMiArMjksMTIgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJHbHlwaFBhZ2UuaCIKIAorI2luY2x1ZGUgIkZvbnQuaCIK
ICNpbmNsdWRlICJIV25kREMuaCIKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wgR2x5cGhQYWdlOjpmaWxsKHVuc2lnbmVkIG9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNv
bnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSkKK2Jvb2wgR2x5cGhQYWdlOjpmaWxsKHVuc2ln
bmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZm
ZXJMZW5ndGgsIGNvbnN0IEZvbnQqIGZvbnREYXRhKQogewogICAgIC8vIGJ1ZmZlckxlbmd0aCB3
aWxsIGJlIGdyZWF0ZXIgdGhhbiB0aGUgcmVxdWVzdGVkIG51bWJlciBvZiBnbHlwaHMgaWYgdGhl
IGJ1ZmZlciBjb250YWlucyBzdXJyb2dhdGUgcGFpcnMuCiAgICAgLy8gV2Ugd29uJ3Qgc3VwcG9y
dCB0aGlzIGZvciBub3cuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vU2ltcGxlRm9udERhdGFDR1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhQ0dXaW4uY3BwCShyZXZpc2lvbiAx
Nzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9u
dERhdGFDR1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICAqLwogCiAj
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKKyNpbmNsdWRl
ICJGb250LmgiCiAKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJGb250Q2FjaGUu
aCIKQEAgLTQ4LDcgKzQ4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3Bh
Y2Ugc3RkOwogCi12b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUluaXQoKQordm9pZCBGb250
OjpwbGF0Zm9ybUluaXQoKQogewogICAgIG1fc3ludGhldGljQm9sZE9mZnNldCA9IG1fcGxhdGZv
cm1EYXRhLnN5bnRoZXRpY0JvbGQoKSA/IDEuMGYgOiAwLmY7CiAgICAgbV9zY3JpcHRDYWNoZSA9
IDA7CkBAIC0xMDMsNyArMTAzLDcgQEAgdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Jbml0
KCkKICAgICBtX2ZvbnRNZXRyaWNzLnNldFVuaXRzUGVyRW0odW5pdHNQZXJFbSk7CiB9CiAKLUZs
b2F0UmVjdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCBnbHlw
aCkgY29uc3QKK0Zsb2F0UmVjdCBGb250OjpwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKEdseXBoIGds
eXBoKSBjb25zdAogewogICAgIGlmICghcGxhdGZvcm1EYXRhKCkuc2l6ZSgpKQogICAgICAgICBy
ZXR1cm4gRmxvYXRSZWN0KCk7CkBAIC0xMjIsNyArMTIyLDcgQEAgRmxvYXRSZWN0IFNpbXBsZUZv
bnREYXRhOjpwbGF0Zm9ybUJvdW5kcwogICAgIHJldHVybiBib3VuZGluZ0JveDsKIH0KIAotZmxv
YXQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtV2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29u
c3QKK2Zsb2F0IEZvbnQ6OnBsYXRmb3JtV2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QK
IHsKICAgICBpZiAoIXBsYXRmb3JtRGF0YSgpLnNpemUoKSkKICAgICAgICAgcmV0dXJuIDA7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFD
YWlyb1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL1NpbXBsZUZvbnREYXRhQ2Fpcm9XaW4uY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFDYWlyb1dp
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICAqLwogCiAjaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKKyNpbmNsdWRlICJGb250Lmgi
CiAKICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAKQEAgLTQxLDcgKzQxLDcgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi12b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUluaXQoKQordm9pZCBG
b250OjpwbGF0Zm9ybUluaXQoKQogewogICAgIG1fc3ludGhldGljQm9sZE9mZnNldCA9IG1fcGxh
dGZvcm1EYXRhLnN5bnRoZXRpY0JvbGQoKSA/IDEuMGYgOiAwLmY7CiAgICAgbV9zY3JpcHRDYWNo
ZSA9IDA7CkBAIC0xMDMsNyArMTAzLDcgQEAgdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1J
bml0KCkKICAgICBSZXN0b3JlREMoZGMsIC0xKTsKIH0KIAotRmxvYXRSZWN0IFNpbXBsZUZvbnRE
YXRhOjpwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAorRmxvYXRSZWN0
IEZvbnQ6OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CiB7CiAgICAg
aWYgKG1fcGxhdGZvcm1EYXRhLnVzZUdESSgpKQogICAgICAgICByZXR1cm4gYm91bmRzRm9yR0RJ
R2x5cGgoZ2x5cGgpOwpAQCAtMTExLDcgKzExMSw3IEBAIEZsb2F0UmVjdCBTaW1wbGVGb250RGF0
YTo6cGxhdGZvcm1Cb3VuZHMKICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CiB9CiAgICAgCi1mbG9h
dCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25z
dAorZmxvYXQgRm9udDo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAog
ewogICAgIGlmIChtX3BsYXRmb3JtRGF0YS51c2VHREkoKSkKICAgICAgICByZXR1cm4gd2lkdGhG
b3JHRElHbHlwaChnbHlwaCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vU2ltcGxlRm9udERhdGFXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YVdpbi5jcHAJKHJldmlzaW9uIDE3
ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250
RGF0YVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICAqLwogCiAjaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKKyNpbmNsdWRlICJG
b250LmgiCiAKICNpbmNsdWRlICJGb250Q2FjaGUuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
QEAgLTQzLDE3ICs0MywxNyBAQCBjb25zdCBmbG9hdCBjU21hbGxDYXBzRm9udFNpemVNdWx0aXBs
aWVyCiAKIHN0YXRpYyBib29sIGdfc2hvdWxkQXBwbHlNYWNBc2NlbnRIYWNrOwogCi12b2lkIFNp
bXBsZUZvbnREYXRhOjpzZXRTaG91bGRBcHBseU1hY0FzY2VudEhhY2soYm9vbCBiKQordm9pZCBG
b250OjpzZXRTaG91bGRBcHBseU1hY0FzY2VudEhhY2soYm9vbCBiKQogewogICAgIGdfc2hvdWxk
QXBwbHlNYWNBc2NlbnRIYWNrID0gYjsKIH0KIAotYm9vbCBTaW1wbGVGb250RGF0YTo6c2hvdWxk
QXBwbHlNYWNBc2NlbnRIYWNrKCkKK2Jvb2wgRm9udDo6c2hvdWxkQXBwbHlNYWNBc2NlbnRIYWNr
KCkKIHsKICAgICByZXR1cm4gZ19zaG91bGRBcHBseU1hY0FzY2VudEhhY2s7CiB9CiAKLWZsb2F0
IFNpbXBsZUZvbnREYXRhOjphc2NlbnRDb25zaWRlcmluZ01hY0FzY2VudEhhY2soY29uc3QgV0NI
QVIqIGZhY2VOYW1lLCBmbG9hdCBhc2NlbnQsIGZsb2F0IGRlc2NlbnQpCitmbG9hdCBGb250Ojph
c2NlbnRDb25zaWRlcmluZ01hY0FzY2VudEhhY2soY29uc3QgV0NIQVIqIGZhY2VOYW1lLCBmbG9h
dCBhc2NlbnQsIGZsb2F0IGRlc2NlbnQpCiB7CiAgICAgaWYgKCFzaG91bGRBcHBseU1hY0FzY2Vu
dEhhY2soKSkKICAgICAgICAgcmV0dXJuIGFzY2VudDsKQEAgLTcxLDcgKzcxLDcgQEAgZmxvYXQg
U2ltcGxlRm9udERhdGE6OmFzY2VudENvbnNpZGVyaW5nTQogICAgIHJldHVybiBhc2NlbnQ7CiB9
CiAKLXZvaWQgU2ltcGxlRm9udERhdGE6OmluaXRHRElGb250KCkKK3ZvaWQgRm9udDo6aW5pdEdE
SUZvbnQoKQogewogICAgIGlmICghbV9wbGF0Zm9ybURhdGEuc2l6ZSgpKSB7CiAgICAgICAgIG1f
Zm9udE1ldHJpY3MucmVzZXQoKTsKQEAgLTEwNiw3ICsxMDYsNyBAQCB2b2lkIFNpbXBsZUZvbnRE
YXRhOjppbml0R0RJRm9udCgpCiAgICAgU2VsZWN0T2JqZWN0KGhkYywgb2xkRm9udCk7CiB9CiAK
LXZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpCit2b2lkIEZvbnQ6
OnBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpCiB7CiAgICAgLy8gR0RJIEZvbnRzIGluaXQgY2hhcndp
ZHRocyBpbiBpbml0R0RJRm9udC4KICAgICBpZiAoIW1fcGxhdGZvcm1EYXRhLnVzZUdESSgpKSB7
CkBAIC0xMTYsMjkgKzExNiwyOSBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUNoYXJX
aWR0aEluCiAgICAgfQogfQogCi12b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybURlc3Ryb3ko
KQordm9pZCBGb250OjpwbGF0Zm9ybURlc3Ryb3koKQogewogICAgIFNjcmlwdEZyZWVDYWNoZSgm
bV9zY3JpcHRDYWNoZSk7CiAgICAgZGVsZXRlIG1fc2NyaXB0Rm9udFByb3BlcnRpZXM7CiB9CiAK
LVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUNyZWF0
ZVNjYWxlZEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBm
bG9hdCBzY2FsZUZhY3RvcikgY29uc3QKK1Bhc3NSZWZQdHI8Rm9udD4gRm9udDo6cGxhdGZvcm1D
cmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlv
biwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0CiB7CiAgICAgZmxvYXQgc2NhbGVkU2l6ZSA9IHNj
YWxlRmFjdG9yICogbV9wbGF0Zm9ybURhdGEuc2l6ZSgpOwogICAgIGlmIChpc0N1c3RvbUZvbnQo
KSkgewogICAgICAgICBGb250UGxhdGZvcm1EYXRhIHNjYWxlZEZvbnQobV9wbGF0Zm9ybURhdGEp
OwogICAgICAgICBzY2FsZWRGb250LnNldFNpemUoc2NhbGVkU2l6ZSk7Ci0gICAgICAgIHJldHVy
biBTaW1wbGVGb250RGF0YTo6Y3JlYXRlKHNjYWxlZEZvbnQsIHRydWUsIGZhbHNlKTsKKyAgICAg
ICAgcmV0dXJuIEZvbnQ6OmNyZWF0ZShzY2FsZWRGb250LCB0cnVlLCBmYWxzZSk7CiAgICAgfQog
CiAgICAgTE9HRk9OVCB3aW5mb250OwogICAgIEdldE9iamVjdChtX3BsYXRmb3JtRGF0YS5oZm9u
dCgpLCBzaXplb2YoTE9HRk9OVCksICZ3aW5mb250KTsKICAgICB3aW5mb250LmxmSGVpZ2h0ID0g
LWxyb3VuZGYoc2NhbGVkU2l6ZSAqIChtX3BsYXRmb3JtRGF0YS51c2VHREkoKSA/IDEgOiAzMikp
OwogICAgIGF1dG8gaGZvbnQgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZUZvbnRJbmRpcmVjdCgm
d2luZm9udCkpOwotICAgIHJldHVybiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlKEZvbnRQbGF0Zm9y
bURhdGEoV1RGOjptb3ZlKGhmb250KSwgc2NhbGVkU2l6ZSwgbV9wbGF0Zm9ybURhdGEuc3ludGhl
dGljQm9sZCgpLCBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNPYmxpcXVlKCksIG1fcGxhdGZvcm1E
YXRhLnVzZUdESSgpKSwgaXNDdXN0b21Gb250KCksIGZhbHNlKTsKKyAgICByZXR1cm4gRm9udDo6
Y3JlYXRlKEZvbnRQbGF0Zm9ybURhdGEoV1RGOjptb3ZlKGhmb250KSwgc2NhbGVkU2l6ZSwgbV9w
bGF0Zm9ybURhdGEuc3ludGhldGljQm9sZCgpLCBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNPYmxp
cXVlKCksIG1fcGxhdGZvcm1EYXRhLnVzZUdESSgpKSwgaXNDdXN0b21Gb250KCksIGZhbHNlKTsK
IH0KIAotdm9pZCBTaW1wbGVGb250RGF0YTo6ZGV0ZXJtaW5lUGl0Y2goKQordm9pZCBGb250Ojpk
ZXRlcm1pbmVQaXRjaCgpCiB7CiAgICAgaWYgKGlzQ3VzdG9tRm9udCgpKSB7CiAgICAgICAgIG1f
dHJlYXRBc0ZpeGVkUGl0Y2ggPSBmYWxzZTsKQEAgLTE1OSw3ICsxNTksNyBAQCB2b2lkIFNpbXBs
ZUZvbnREYXRhOjpkZXRlcm1pbmVQaXRjaCgpCiAgICAgUmVzdG9yZURDKGRjLCAtMSk7CiB9CiAK
LUZsb2F0UmVjdCBTaW1wbGVGb250RGF0YTo6Ym91bmRzRm9yR0RJR2x5cGgoR2x5cGggZ2x5cGgp
IGNvbnN0CitGbG9hdFJlY3QgRm9udDo6Ym91bmRzRm9yR0RJR2x5cGgoR2x5cGggZ2x5cGgpIGNv
bnN0CiB7CiAgICAgSFduZERDIGhkYygwKTsKICAgICBTZXRHcmFwaGljc01vZGUoaGRjLCBHTV9B
RFZBTkNFRCk7CkBAIC0xNzUsNyArMTc1LDcgQEAgRmxvYXRSZWN0IFNpbXBsZUZvbnREYXRhOjpi
b3VuZHNGb3JHRElHbAogICAgICAgICBnZGlNZXRyaWNzLmdtQmxhY2tCb3hYICsgbV9zeW50aGV0
aWNCb2xkT2Zmc2V0LCBnZGlNZXRyaWNzLmdtQmxhY2tCb3hZKTsgCiB9CiAKLWZsb2F0IFNpbXBs
ZUZvbnREYXRhOjp3aWR0aEZvckdESUdseXBoKEdseXBoIGdseXBoKSBjb25zdAorZmxvYXQgRm9u
dDo6d2lkdGhGb3JHRElHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKIHsKICAgICBIV25kREMgaGRj
KDApOwogICAgIFNldEdyYXBoaWNzTW9kZShoZGMsIEdNX0FEVkFOQ0VEKTsKQEAgLTE5MSw3ICsx
OTEsNyBAQCBmbG9hdCBTaW1wbGVGb250RGF0YTo6d2lkdGhGb3JHRElHbHlwaChHCiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotU0NSSVBUX0ZPTlRQUk9QRVJUSUVTKiBTaW1wbGVGb250RGF0YTo6
c2NyaXB0Rm9udFByb3BlcnRpZXMoKSBjb25zdAorU0NSSVBUX0ZPTlRQUk9QRVJUSUVTKiBGb250
OjpzY3JpcHRGb250UHJvcGVydGllcygpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3NjcmlwdEZvbnRQ
cm9wZXJ0aWVzKSB7CiAgICAgICAgIG1fc2NyaXB0Rm9udFByb3BlcnRpZXMgPSBuZXcgU0NSSVBU
X0ZPTlRQUk9QRVJUSUVTOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL1VuaXNjcmliZUNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9VbmlzY3JpYmVDb250cm9sbGVyLmNwcAkocmV2aXNpb24g
MTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1VuaXNjcmli
ZUNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw5ICsyNSwxMCBAQAogCiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVW5pc2NyaWJlQ29udHJvbGxlci5oIgorCisjaW5j
bHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiSFduZERD
LmgiCi0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKICNpbmNsdWRlICJUZXh0UnVuLmgiCiAj
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIApAQCAtNDEsNyArNDIsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAvLyB0aGF0IGRvZXMgc3R1ZmYgaW4gdGhhdCBtZXRob2QgaW5zdGVhZCBvZiBk
b2luZyBldmVyeXRoaW5nIGluIHRoZSBjb25zdHJ1Y3Rvci4gIEhhdmUgYWR2YW5jZSgpCiAvLyB0
YWtlIHRoZSBHbHlwaEJ1ZmZlciBhcyBhbiBhcmcgc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIHBv
cHVsYXRlIHRoZSBnbHlwaCBidWZmZXIgd2hlbgogLy8gbWVhc3VyaW5nLgotVW5pc2NyaWJlQ29u
dHJvbGxlcjo6VW5pc2NyaWJlQ29udHJvbGxlcihjb25zdCBGb250Q2FzY2FkZSogZm9udCwgY29u
c3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNr
Rm9udHMpCitVbmlzY3JpYmVDb250cm9sbGVyOjpVbmlzY3JpYmVDb250cm9sbGVyKGNvbnN0IEZv
bnRDYXNjYWRlKiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgRm9udCo+
KiBmYWxsYmFja0ZvbnRzKQogICAgIDogbV9mb250KCpmb250KQogICAgICwgbV9ydW4ocnVuKQog
ICAgICwgbV9mYWxsYmFja0ZvbnRzKGZhbGxiYWNrRm9udHMpCkBAIC0xMzYsOCArMTM3LDggQEAg
dm9pZCBVbmlzY3JpYmVDb250cm9sbGVyOjphZHZhbmNlKHVuc2lnbgogICAgIGNvbnN0IFVDaGFy
KiBjdXJyID0gbV9ydW4ucnRsKCkgPyBjcCArIGxlbmd0aCAgLSAxIDogY3A7CiAgICAgY29uc3Qg
VUNoYXIqIGVuZCA9IG1fcnVuLnJ0bCgpID8gY3AgLSAxIDogY3AgKyBsZW5ndGg7CiAKLSAgICBj
b25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGE7Ci0gICAgY29uc3QgU2ltcGxlRm9udERhdGEq
IG5leHRGb250RGF0YSA9IG1fZm9udC5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoKmN1cnIsIGZhbHNl
KS5mb250RGF0YTsKKyAgICBjb25zdCBGb250KiBmb250RGF0YTsKKyAgICBjb25zdCBGb250KiBu
ZXh0Rm9udERhdGEgPSBtX2ZvbnQuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKCpjdXJyLCBmYWxzZSku
Zm9udERhdGE7CiAKICAgICBVQ2hhciBuZXdDID0gMDsKIApAQCAtMTY1LDcgKzE2Niw3IEBAIHZv
aWQgVW5pc2NyaWJlQ29udHJvbGxlcjo6YWR2YW5jZSh1bnNpZ24KICAgICAgICAgICAgICAgICBz
bWFsbENhcHNCdWZmZXJbaW5kZXhdID0gZm9yY2VTbWFsbENhcHMgPyBjIDogbmV3QzsKICAgICAg
ICAgfQogCi0gICAgICAgIGlmIChtX2ZhbGxiYWNrRm9udHMgJiYgZm9udERhdGEgJiYgbmV4dEZv
bnREYXRhICE9IGZvbnREYXRhICYmIGZvbnREYXRhICE9ICZtX2ZvbnQucHJpbWFyeUZvbnREYXRh
KCkpCisgICAgICAgIGlmIChtX2ZhbGxiYWNrRm9udHMgJiYgZm9udERhdGEgJiYgbmV4dEZvbnRE
YXRhICE9IGZvbnREYXRhICYmIGZvbnREYXRhICE9ICZtX2ZvbnQucHJpbWFyeUZvbnQoKSkKICAg
ICAgICAgICAgIG1fZmFsbGJhY2tGb250cy0+YWRkKGZvbnREYXRhKTsKIAogICAgICAgICBpZiAo
bmV4dEZvbnREYXRhICE9IGZvbnREYXRhIHx8IG5leHRJc1NtYWxsQ2FwcyAhPSBpc1NtYWxsQ2Fw
cykgewpAQCAtMTc5LDcgKzE4MCw3IEBAIHZvaWQgVW5pc2NyaWJlQ29udHJvbGxlcjo6YWR2YW5j
ZSh1bnNpZ24KICAgICAKICAgICBpbnQgaXRlbUxlbmd0aCA9IG1fcnVuLnJ0bCgpID8gaW5kZXhP
ZkZvbnRUcmFuc2l0aW9uICsgMSA6IGxlbmd0aCAtIGluZGV4T2ZGb250VHJhbnNpdGlvbjsKICAg
ICBpZiAoaXRlbUxlbmd0aCkgewotICAgICAgICBpZiAobV9mYWxsYmFja0ZvbnRzICYmIG5leHRG
b250RGF0YSAmJiBuZXh0Rm9udERhdGEgIT0gJm1fZm9udC5wcmltYXJ5Rm9udERhdGEoKSkKKyAg
ICAgICAgaWYgKG1fZmFsbGJhY2tGb250cyAmJiBuZXh0Rm9udERhdGEgJiYgbmV4dEZvbnREYXRh
ICE9ICZtX2ZvbnQucHJpbWFyeUZvbnQoKSkKICAgICAgICAgICAgIG1fZmFsbGJhY2tGb250cy0+
YWRkKG5leHRGb250RGF0YSk7CiAKICAgICAgICAgaW50IGl0ZW1TdGFydCA9IG1fcnVuLnJ0bCgp
ID8gMCA6IGluZGV4T2ZGb250VHJhbnNpdGlvbjsKQEAgLTE5MCw3ICsxOTEsNyBAQCB2b2lkIFVu
aXNjcmliZUNvbnRyb2xsZXI6OmFkdmFuY2UodW5zaWduCiAgICAgbV9jdXJyZW50Q2hhcmFjdGVy
ID0gYmFzZUNoYXJhY3RlciArIGxlbmd0aDsKIH0KIAotdm9pZCBVbmlzY3JpYmVDb250cm9sbGVy
OjppdGVtaXplU2hhcGVBbmRQbGFjZShjb25zdCBVQ2hhciogY3AsIHVuc2lnbmVkIGxlbmd0aCwg
Y29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhLCBHbHlwaEJ1ZmZlciogZ2x5cGhCdWZmZXIp
Cit2b2lkIFVuaXNjcmliZUNvbnRyb2xsZXI6Oml0ZW1pemVTaGFwZUFuZFBsYWNlKGNvbnN0IFVD
aGFyKiBjcCwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBGb250KiBmb250RGF0YSwgR2x5cGhCdWZm
ZXIqIGdseXBoQnVmZmVyKQogewogICAgIC8vIFNjcmlwdEl0ZW1pemUgKGluIFdpbmRvd3MgWFAg
dmVyc2lvbnMgcHJpb3IgdG8gU1AyKSBjYW4gb3ZlcmZsb3cgYnkgMS4gIFRoaXMgaXMgd2h5IHRo
ZXJlIGlzIGFuIGV4dHJhIGVtcHR5IGl0ZW0KICAgICAvLyBoYW5naW5nIG91dCBhdCB0aGUgZW5k
IG9mIHRoZSBhcnJheQpAQCAtMjMyLDcgKzIzMyw3IEBAIHZvaWQgVW5pc2NyaWJlQ29udHJvbGxl
cjo6cmVzZXRDb250cm9sQW4KICAgICBtX3N0YXRlLmZPdmVycmlkZURpcmVjdGlvbiA9IG1fcnVu
LmRpcmVjdGlvbmFsT3ZlcnJpZGUoKTsKIH0KIAotYm9vbCBVbmlzY3JpYmVDb250cm9sbGVyOjpz
aGFwZUFuZFBsYWNlSXRlbShjb25zdCBVQ2hhciogY3AsIHVuc2lnbmVkIGksIGNvbnN0IFNpbXBs
ZUZvbnREYXRhKiBmb250RGF0YSwgR2x5cGhCdWZmZXIqIGdseXBoQnVmZmVyKQorYm9vbCBVbmlz
Y3JpYmVDb250cm9sbGVyOjpzaGFwZUFuZFBsYWNlSXRlbShjb25zdCBVQ2hhciogY3AsIHVuc2ln
bmVkIGksIGNvbnN0IEZvbnQqIGZvbnREYXRhLCBHbHlwaEJ1ZmZlciogZ2x5cGhCdWZmZXIpCiB7
CiAgICAgLy8gRGV0ZXJtaW5lIHRoZSBzdHJpbmcgZm9yIHRoaXMgaXRlbS4KICAgICBjb25zdCBV
Q2hhciogc3RyID0gY3AgKyBtX2l0ZW1zW2ldLmlDaGFyUG9zOwpAQCAtNDA0LDcgKzQwNSw3IEBA
IGJvb2wgVW5pc2NyaWJlQ29udHJvbGxlcjo6c2hhcGVBbmRQbGFjZUkKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotYm9vbCBVbmlzY3JpYmVDb250cm9sbGVyOjpzaGFwZShjb25zdCBVQ2hhciogc3Ry
LCBpbnQgbGVuLCBTQ1JJUFRfSVRFTSBpdGVtLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERh
dGEsCitib29sIFVuaXNjcmliZUNvbnRyb2xsZXI6OnNoYXBlKGNvbnN0IFVDaGFyKiBzdHIsIGlu
dCBsZW4sIFNDUklQVF9JVEVNIGl0ZW0sIGNvbnN0IEZvbnQqIGZvbnREYXRhLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8V09SRD4mIGdseXBocywgVmVjdG9yPFdPUkQ+
JiBjbHVzdGVycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPFNDUklQ
VF9WSVNBVFRSPiYgdmlzdWFsQXR0cmlidXRlcykKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9VbmlzY3JpYmVDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1VuaXNjcmliZUNvbnRyb2xsZXIu
aAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL1VuaXNjcmliZUNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFVuaXNjcmliZUNvbnRyb2xsZXIgewogcHVi
bGljOgotICAgIFVuaXNjcmliZUNvbnRyb2xsZXIoY29uc3QgRm9udENhc2NhZGUqLCBjb25zdCBU
ZXh0UnVuJiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0g
MCk7CisgICAgVW5pc2NyaWJlQ29udHJvbGxlcihjb25zdCBGb250Q2FzY2FkZSosIGNvbnN0IFRl
eHRSdW4mLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cyA9IDApOwogCiAgICAg
Ly8gQWR2YW5jZSBhbmQgbWVhc3VyZS9wbGFjZSB1cCB0byB0aGUgc3BlY2lmaWVkIGNoYXJhY3Rl
ci4KICAgICB2b2lkIGFkdmFuY2UodW5zaWduZWQgdG8sIEdseXBoQnVmZmVyKiA9IDApOwpAQCAt
NTQsMTUgKzU0LDE1IEBAIHB1YmxpYzoKIHByaXZhdGU6ICAgIAogICAgIHZvaWQgcmVzZXRDb250
cm9sQW5kU3RhdGUoKTsKIAotICAgIHZvaWQgaXRlbWl6ZVNoYXBlQW5kUGxhY2UoY29uc3QgVUNo
YXIqLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiwgR2x5cGhCdWZmZXIq
KTsKLSAgICBib29sIHNoYXBlQW5kUGxhY2VJdGVtKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgaW5k
ZXgsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiwgR2x5cGhCdWZmZXIqKTsKLSAgICBib29sIHNoYXBl
KGNvbnN0IFVDaGFyKiBzdHIsIGludCBsZW4sIFNDUklQVF9JVEVNIGl0ZW0sIGNvbnN0IFNpbXBs
ZUZvbnREYXRhKiBmb250RGF0YSwKKyAgICB2b2lkIGl0ZW1pemVTaGFwZUFuZFBsYWNlKGNvbnN0
IFVDaGFyKiwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBGb250KiwgR2x5cGhCdWZmZXIqKTsKKyAg
ICBib29sIHNoYXBlQW5kUGxhY2VJdGVtKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgaW5kZXgsIGNv
bnN0IEZvbnQqLCBHbHlwaEJ1ZmZlciopOworICAgIGJvb2wgc2hhcGUoY29uc3QgVUNoYXIqIHN0
ciwgaW50IGxlbiwgU0NSSVBUX0lURU0sIGNvbnN0IEZvbnQqLAogICAgICAgICAgICAgICAgVmVj
dG9yPFdPUkQ+JiBnbHlwaHMsIFZlY3RvcjxXT1JEPiYgY2x1c3RlcnMsCiAgICAgICAgICAgICAg
ICBWZWN0b3I8U0NSSVBUX1ZJU0FUVFI+JiB2aXN1YWxBdHRyaWJ1dGVzKTsKIAogICAgIGNvbnN0
IEZvbnRDYXNjYWRlJiBtX2ZvbnQ7CiAgICAgY29uc3QgVGV4dFJ1biYgbV9ydW47Ci0gICAgSGFz
aFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBtX2ZhbGxiYWNrRm9udHM7CisgICAgSGFzaFNl
dDxjb25zdCBGb250Kj4qIG1fZmFsbGJhY2tGb250czsKICAgICBGbG9hdFBvaW50IG1fZ2x5cGhP
cmlnaW47CiAgICAgZmxvYXQgbV9taW5HbHlwaEJvdW5kaW5nQm94WDsKICAgICBmbG9hdCBtX21h
eEdseXBoQm91bmRpbmdCb3hYOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Bv
cHVwTWVudVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2lu
L1BvcHVwTWVudVdpbi5jcHAJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3
IEBACiAjaW5jbHVkZSAiQml0bWFwSW5mby5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5j
bHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkZvbnRTZWxl
Y3Rvci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCkBAIC00
Miw3ICs0Myw2IEBACiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNjcm9sbGJh
ci5oIgogI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCi0jaW5jbHVkZSAiU2ltcGxlRm9udERh
dGEuaCIKICNpbmNsdWRlICJUZXh0UnVuLmgiCiAjaW5jbHVkZSAiV2ViQ29yZUluc3RhbmNlSGFu
ZGxlLmgiCiAjaW5jbHVkZSA8d3RmL1dpbmRvd3NFeHRyYXMuaD4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHJldmlzaW9uIDE3ODg1NykKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDQ5LDcgKzQ0OSw3IEBAIGJvb2wgSW5saW5lRmxvd0JveDo6cmVxdWlyZXNJZGVvZ3JhcGhp
Y0IKIAogICAgIGNvbnN0IFJlbmRlclN0eWxlJiBsaW5lU3R5bGUgPSB0aGlzLT5saW5lU3R5bGUo
KTsKICAgICBpZiAobGluZVN0eWxlLmZvbnREZXNjcmlwdGlvbigpLm5vbkNKS0dseXBoT3JpZW50
YXRpb24oKSA9PSBOb25DSktHbHlwaE9yaWVudGF0aW9uVXByaWdodAotICAgICAgICB8fCBsaW5l
U3R5bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5oYXNWZXJ0aWNhbEdseXBocygp
KQorICAgICAgICB8fCBsaW5lU3R5bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpLmhhc1Zl
cnRpY2FsR2x5cGhzKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgZm9yIChJbmxpbmVC
b3gqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dE9uTGlu
ZSgpKSB7CkBAIC00NjAsMTggKzQ2MCwxOCBAQCBib29sIElubGluZUZsb3dCb3g6OnJlcXVpcmVz
SWRlb2dyYXBoaWNCCiAgICAgICAgICAgICBpZiAoZG93bmNhc3Q8SW5saW5lRmxvd0JveD4oKmNo
aWxkKS5yZXF1aXJlc0lkZW9ncmFwaGljQmFzZWxpbmUodGV4dEJveERhdGFNYXApKQogICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYg
KGNoaWxkLT5saW5lU3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmhhc1Zl
cnRpY2FsR2x5cGhzKCkpCisgICAgICAgICAgICBpZiAoY2hpbGQtPmxpbmVTdHlsZSgpLmZvbnRD
YXNjYWRlKCkucHJpbWFyeUZvbnQoKS5oYXNWZXJ0aWNhbEdseXBocygpKQogICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBjb25zdCBWZWN0b3I8
Y29uc3QgU2ltcGxlRm9udERhdGEqPiogdXNlZEZvbnRzID0gbnVsbHB0cjsKKyAgICAgICAgICAg
IGNvbnN0IFZlY3Rvcjxjb25zdCBGb250Kj4qIHVzZWRGb250cyA9IG51bGxwdHI7CiAgICAgICAg
ICAgICBpZiAoaXM8SW5saW5lVGV4dEJveD4oKmNoaWxkKSkgewogICAgICAgICAgICAgICAgIEds
eXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHRleHRC
b3hEYXRhTWFwLmZpbmQoZG93bmNhc3Q8SW5saW5lVGV4dEJveD4oY2hpbGQpKTsKICAgICAgICAg
ICAgICAgICB1c2VkRm9udHMgPSBpdCA9PSB0ZXh0Qm94RGF0YU1hcC5lbmQoKSA/IG51bGxwdHIg
OiAmaXQtPnZhbHVlLmZpcnN0OwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAodXNl
ZEZvbnRzKSB7Ci0gICAgICAgICAgICAgICAgZm9yIChjb25zdCBTaW1wbGVGb250RGF0YSogZm9u
dERhdGEgOiAqdXNlZEZvbnRzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChmb250RGF0YS0+
aGFzVmVydGljYWxHbHlwaHMoKSkKKyAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IEZvbnQqIGZv
bnQgOiAqdXNlZEZvbnRzKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChmb250LT5oYXNWZXJ0
aWNhbEdseXBocygpKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0lubGluZUZsb3dCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSW5saW5lRmxvd0JveC5oCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMiArMzEsMTIg
QEAgY2xhc3MgSGl0VGVzdFJlcXVlc3Q7CiBjbGFzcyBIaXRUZXN0UmVzdWx0OwogY2xhc3MgSW5s
aW5lVGV4dEJveDsKIGNsYXNzIFJlbmRlckxpbmVCb3hMaXN0OwotY2xhc3MgU2ltcGxlRm9udERh
dGE7CitjbGFzcyBGb250OwogY2xhc3MgVmVydGljYWxQb3NpdGlvbkNhY2hlOwogCiBzdHJ1Y3Qg
R2x5cGhPdmVyZmxvdzsKIAotdHlwZWRlZiBIYXNoTWFwPGNvbnN0IElubGluZVRleHRCb3gqLCBz
dGQ6OnBhaXI8VmVjdG9yPGNvbnN0IFNpbXBsZUZvbnREYXRhKj4sIEdseXBoT3ZlcmZsb3c+PiBH
bHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcDsKK3R5cGVkZWYgSGFzaE1hcDxjb25zdCBJ
bmxpbmVUZXh0Qm94Kiwgc3RkOjpwYWlyPFZlY3Rvcjxjb25zdCBGb250Kj4sIEdseXBoT3ZlcmZs
b3c+PiBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcDsKIAogY2xhc3MgSW5saW5lRmxv
d0JveCA6IHB1YmxpYyBJbmxpbmVCb3ggewogcHVibGljOgpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzgxLDcgKzEzODEsNyBAQCBUZXh0UnVuIElubGluZVRleHRCb3g6OmNvbnN0cnVjdFRleHRSdW4o
CiAKICAgICBUZXh0UnVuIHJ1bihzdHJpbmcsIHRleHRQb3MoKSwgZXhwYW5zaW9uKCksIGV4cGFu
c2lvbkJlaGF2aW9yKCksIGRpcmVjdGlvbigpLCBkaXJPdmVycmlkZSgpIHx8IHN0eWxlLnJ0bE9y
ZGVyaW5nKCkgPT0gVmlzdWFsT3JkZXIsICFyZW5kZXJlcigpLmNhblVzZVNpbXBsZUZvbnRDb2Rl
UGF0aCgpKTsKICAgICBydW4uc2V0VGFiU2l6ZSghc3R5bGUuY29sbGFwc2VXaGl0ZVNwYWNlKCks
IHN0eWxlLnRhYlNpemUoKSk7Ci0gICAgaWYgKGZvbnQucHJpbWFyeUZvbnREYXRhKCkuaXNTVkdG
b250KCkpCisgICAgaWYgKGZvbnQucHJpbWFyeUZvbnQoKS5pc1NWR0ZvbnQoKSkKICAgICAgICAg
cnVuLnNldFJlbmRlcmluZ0NvbnRleHQoU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0
ZShyZW5kZXJlcigpKSk7CiAKICAgICAvLyBQcm9wYWdhdGUgdGhlIG1heGltdW0gbGVuZ3RoIG9m
IHRoZSBjaGFyYWN0ZXJzIGJ1ZmZlciB0byB0aGUgVGV4dFJ1biwgZXZlbiB3aGVuIHdlJ3JlIG9u
bHkgcHJvY2Vzc2luZyBhIHN1YnN0cmluZy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMyNSw3ICsyMzI1LDcg
QEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6YWRqdXN0TG9naWNhbExlZgogICAgICAgICByZXR1
cm4gbGVmdDsKIAogICAgIC8vIEZJWE1FOiBTaG91bGQgbGV0dGVyLXNwYWNpbmcgYXBwbHk/IFRo
aXMgaXMgY29tcGxpY2F0ZWQgc2luY2UgaXQgZG9lc24ndCBhcHBseSBhdCB0aGUgZWRnZT8KLSAg
ICBmbG9hdCBtYXhDaGFyV2lkdGggPSBsaW5lR3JpZC0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnBy
aW1hcnlGb250RGF0YSgpLm1heENoYXJXaWR0aCgpOworICAgIGZsb2F0IG1heENoYXJXaWR0aCA9
IGxpbmVHcmlkLT5zdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKS5tYXhDaGFyV2lk
dGgoKTsKICAgICBpZiAoIW1heENoYXJXaWR0aCkKICAgICAgICAgcmV0dXJuIGxlZnQ7CiAKQEAg
LTIzNjUsNyArMjM2NSw3IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2s6OmFkanVzdExvZ2ljYWxS
aWcKICAgICAgICAgcmV0dXJuIHJpZ2h0OwogCiAgICAgLy8gRklYTUU6IFNob3VsZCBsZXR0ZXIt
c3BhY2luZyBhcHBseT8gVGhpcyBpcyBjb21wbGljYXRlZCBzaW5jZSBpdCBkb2Vzbid0IGFwcGx5
IGF0IHRoZSBlZGdlPwotICAgIGZsb2F0IG1heENoYXJXaWR0aCA9IGxpbmVHcmlkLT5zdHlsZSgp
LmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkubWF4Q2hhcldpZHRoKCk7CisgICAgZmxv
YXQgbWF4Q2hhcldpZHRoID0gbGluZUdyaWQtPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5
Rm9udCgpLm1heENoYXJXaWR0aCgpOwogICAgIGlmICghbWF4Q2hhcldpZHRoKQogICAgICAgICBy
ZXR1cm4gcmlnaHQ7CiAKQEAgLTM3MDUsNyArMzcwNSw3IEBAIHN0YXRpYyBpbmxpbmUgVGV4dFJ1
biBjb25zdHJ1Y3RUZXh0UnVuSW4KICAgICBib29sIGRpcmVjdGlvbmFsT3ZlcnJpZGUgPSBzdHls
ZS5ydGxPcmRlcmluZygpID09IFZpc3VhbE9yZGVyOwogCiAgICAgVGV4dFJ1biBydW4oY2hhcmFj
dGVycywgbGVuZ3RoLCAwLCAwLCBleHBhbnNpb24sIHRleHREaXJlY3Rpb24sIGRpcmVjdGlvbmFs
T3ZlcnJpZGUpOwotICAgIGlmIChmb250LnByaW1hcnlGb250RGF0YSgpLmlzU1ZHRm9udCgpKSB7
CisgICAgaWYgKGZvbnQucHJpbWFyeUZvbnQoKS5pc1NWR0ZvbnQoKSkgewogICAgICAgICBBU1NF
UlQoY29udGV4dCk7IC8vIEZJWE1FOiBUaHJlYWQgYSBSZW5kZXJPYmplY3QmIHRvIHRoaXMgcG9p
bnQgc28gd2UgZG9uJ3QgaGF2ZSB0byBkZXJlZmVyZW5jZSBhbnl0aGluZy4KICAgICAgICAgcnVu
LnNldFJlbmRlcmluZ0NvbnRleHQoU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZSgq
Y29udGV4dCkpOwogICAgIH0KQEAgLTM3MjUsNyArMzcyNSw3IEBAIHN0YXRpYyBpbmxpbmUgVGV4
dFJ1biBjb25zdHJ1Y3RUZXh0UnVuSW4KICAgICAgICAgICAgIGRpcmVjdGlvbmFsT3ZlcnJpZGUg
fD0gaXNPdmVycmlkZShzdHlsZS51bmljb2RlQmlkaSgpKTsKICAgICB9CiAgICAgVGV4dFJ1biBy
dW4oY2hhcmFjdGVycywgbGVuZ3RoLCAwLCAwLCBleHBhbnNpb24sIHRleHREaXJlY3Rpb24sIGRp
cmVjdGlvbmFsT3ZlcnJpZGUpOwotICAgIGlmIChmb250LnByaW1hcnlGb250RGF0YSgpLmlzU1ZH
Rm9udCgpKSB7CisgICAgaWYgKGZvbnQucHJpbWFyeUZvbnQoKS5pc1NWR0ZvbnQoKSkgewogICAg
ICAgICBBU1NFUlQoY29udGV4dCk7IC8vIEZJWE1FOiBUaHJlYWQgYSBSZW5kZXJPYmplY3QmIHRv
IHRoaXMgcG9pbnQgc28gd2UgZG9uJ3QgaGF2ZSB0byBkZXJlZmVyZW5jZSBhbnl0aGluZy4KICAg
ICAgICAgcnVuLnNldFJlbmRlcmluZ0NvbnRleHQoU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6
OmNyZWF0ZSgqY29udGV4dCkpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCShyZXZpc2lvbiAxNzg4NTcpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDU4LDcgKzQ1OCw3IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjpzZXRN
YXJnaW5zRm9yUnVieVIKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRMb2dpY2FsV2lkdGhGb3JUZXh0
UnVuKFJvb3RJbmxpbmVCb3gqIGxpbmVCb3gsIEJpZGlSdW4qIHJ1biwgUmVuZGVyVGV4dCogcmVu
ZGVyZXIsIGZsb2F0IHhQb3MsIGNvbnN0IExpbmVJbmZvJiBsaW5lSW5mbywKICAgICBHbHlwaE92
ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcCYgdGV4dEJveERhdGFNYXAsIFZlcnRpY2FsUG9zaXRp
b25DYWNoZSYgdmVydGljYWxQb3NpdGlvbkNhY2hlLCBXb3JkTWVhc3VyZW1lbnRzJiB3b3JkTWVh
c3VyZW1lbnRzKQogewotICAgIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiBmYWxsYmFj
a0ZvbnRzOworICAgIEhhc2hTZXQ8Y29uc3QgRm9udCo+IGZhbGxiYWNrRm9udHM7CiAgICAgR2x5
cGhPdmVyZmxvdyBnbHlwaE92ZXJmbG93OwogCiAgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQg
PSBsaW5lU3R5bGUoKnJlbmRlcmVyLT5wYXJlbnQoKSwgbGluZUluZm8pLmZvbnRDYXNjYWRlKCk7
CkBAIC01MDksOCArNTA5LDggQEAgc3RhdGljIGlubGluZSB2b2lkIHNldExvZ2ljYWxXaWR0aEZv
clRleAogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgbWVhc3VyZWRXaWR0aCAr
PSB3b3JkTWVhc3VyZW1lbnQud2lkdGg7CiAgICAgICAgICAgICBpZiAoIXdvcmRNZWFzdXJlbWVu
dC5mYWxsYmFja0ZvbnRzLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIEhhc2hTZXQ8Y29u
c3QgU2ltcGxlRm9udERhdGEqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gd29yZE1lYXN1cmVtZW50
LmZhbGxiYWNrRm9udHMuZW5kKCk7Ci0gICAgICAgICAgICAgICAgZm9yIChIYXNoU2V0PGNvbnN0
IFNpbXBsZUZvbnREYXRhKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gd29yZE1lYXN1cmVtZW50LmZh
bGxiYWNrRm9udHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgICAgIEhh
c2hTZXQ8Y29uc3QgRm9udCo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSB3b3JkTWVhc3VyZW1lbnQu
ZmFsbGJhY2tGb250cy5lbmQoKTsKKyAgICAgICAgICAgICAgICBmb3IgKEhhc2hTZXQ8Y29uc3Qg
Rm9udCo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHdvcmRNZWFzdXJlbWVudC5mYWxsYmFja0ZvbnRz
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKICAgICAgICAgICAgICAgICAgICAgZmFsbGJhY2tG
b250cy5hZGQoKml0KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNTI3LDcgKzUyNyw3
IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRMb2dpY2FsV2lkdGhGb3JUZXgKICAgICBydW4tPmJv
eCgpLT5zZXRMb2dpY2FsV2lkdGgobWVhc3VyZWRXaWR0aCArIGh5cGhlbldpZHRoKTsKICAgICBp
ZiAoIWZhbGxiYWNrRm9udHMuaXNFbXB0eSgpKSB7CiAgICAgICAgIEFTU0VSVChydW4tPmJveCgp
LT5iZWhhdmVzTGlrZVRleHQoKSk7Ci0gICAgICAgIEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0Zv
bnRzTWFwOjppdGVyYXRvciBpdCA9IHRleHRCb3hEYXRhTWFwLmFkZChkb3duY2FzdDxJbmxpbmVU
ZXh0Qm94PihydW4tPmJveCgpKSwgc3RkOjptYWtlX3BhaXIoVmVjdG9yPGNvbnN0IFNpbXBsZUZv
bnREYXRhKj4oKSwgR2x5cGhPdmVyZmxvdygpKSkuaXRlcmF0b3I7CisgICAgICAgIEdseXBoT3Zl
cmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwOjppdGVyYXRvciBpdCA9IHRleHRCb3hEYXRhTWFwLmFk
ZChkb3duY2FzdDxJbmxpbmVUZXh0Qm94PihydW4tPmJveCgpKSwgc3RkOjptYWtlX3BhaXIoVmVj
dG9yPGNvbnN0IEZvbnQqPigpLCBHbHlwaE92ZXJmbG93KCkpKS5pdGVyYXRvcjsKICAgICAgICAg
QVNTRVJUKGl0LT52YWx1ZS5maXJzdC5pc0VtcHR5KCkpOwogICAgICAgICBjb3B5VG9WZWN0b3Io
ZmFsbGJhY2tGb250cywgaXQtPnZhbHVlLmZpcnN0KTsKICAgICAgICAgcnVuLT5ib3goKS0+cGFy
ZW50KCktPmNsZWFyRGVzY2VuZGFudHNIYXZlU2FtZUxpbmVIZWlnaHRBbmRCYXNlbGluZSgpOwpA
QCAtNTM5LDcgKzUzOSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRMb2dpY2FsV2lkdGhGb3JU
ZXgKIAogICAgIGlmICghZ2x5cGhPdmVyZmxvdy5pc0VtcHR5KCkpIHsKICAgICAgICAgQVNTRVJU
KHJ1bi0+Ym94KCktPmJlaGF2ZXNMaWtlVGV4dCgpKTsKLSAgICAgICAgR2x5cGhPdmVyZmxvd0Fu
ZEZhbGxiYWNrRm9udHNNYXA6Oml0ZXJhdG9yIGl0ID0gdGV4dEJveERhdGFNYXAuYWRkKGRvd25j
YXN0PElubGluZVRleHRCb3g+KHJ1bi0+Ym94KCkpLCBzdGQ6Om1ha2VfcGFpcihWZWN0b3I8Y29u
c3QgU2ltcGxlRm9udERhdGEqPigpLCBHbHlwaE92ZXJmbG93KCkpKS5pdGVyYXRvcjsKKyAgICAg
ICAgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXA6Oml0ZXJhdG9yIGl0ID0gdGV4dEJv
eERhdGFNYXAuYWRkKGRvd25jYXN0PElubGluZVRleHRCb3g+KHJ1bi0+Ym94KCkpLCBzdGQ6Om1h
a2VfcGFpcihWZWN0b3I8Y29uc3QgRm9udCo+KCksIEdseXBoT3ZlcmZsb3coKSkpLml0ZXJhdG9y
OwogICAgICAgICBpdC0+dmFsdWUuc2Vjb25kID0gZ2x5cGhPdmVyZmxvdzsKICAgICAgICAgcnVu
LT5ib3goKS0+Y2xlYXJLbm93blRvSGF2ZU5vT3ZlcmZsb3coKTsKICAgICB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb21iaW5lVGV4dC5jcHAJKHJldmlzaW9u
IDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb21iaW5lVGV4dC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgdm9pZCBSZW5kZXJDb21iaW5lVGV4
dDo6c2V0UmVuZGVyZWRUZXh0KAogICAgIG1fbmVlZHNGb250VXBkYXRlID0gdHJ1ZTsKIH0KIAot
ZmxvYXQgUmVuZGVyQ29tYmluZVRleHQ6OndpZHRoKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxl
bmd0aCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGZsb2F0IHhQb3NpdGlvbiwgSGFzaFNldDxj
b25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlw
aE92ZXJmbG93KSBjb25zdAorZmxvYXQgUmVuZGVyQ29tYmluZVRleHQ6OndpZHRoKHVuc2lnbmVk
IGZyb20sIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGZsb2F0IHhQ
b3NpdGlvbiwgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZs
b3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0CiB7CiAgICAgaWYgKG1faXNDb21iaW5lZCkKICAgICAg
ICAgcmV0dXJuIGZvbnQuc2l6ZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckNvbWJpbmVUZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckNvbWJpbmVUZXh0LmgJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJDb21iaW5lVGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0
Niw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBub2RlKCkgY29uc3QgPSBkZWxldGU7CiAKICAgICB2
aXJ0dWFsIGJvb2wgaXNDb21iaW5lVGV4dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7
IH0KLSAgICB2aXJ0dWFsIGZsb2F0IHdpZHRoKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbmd0
aCwgY29uc3QgRm9udENhc2NhZGUmLCBmbG9hdCB4UG9zaXRpb24sIEhhc2hTZXQ8Y29uc3QgU2lt
cGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29u
c3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBmbG9hdCB3aWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNp
Z25lZCBsZW5ndGgsIGNvbnN0IEZvbnRDYXNjYWRlJiwgZmxvYXQgeFBvc2l0aW9uLCBIYXNoU2V0
PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29u
c3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gIlJlbmRlckNvbWJpbmVUZXh0IjsgfQogICAgIHZpcnR1YWwgdm9p
ZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRT
dHlsZSkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNldFJlbmRlcmVkVGV4dChjb25zdCBT
dHJpbmcmKSBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJT
ZWFyY2hGaWVsZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclNlYXJjaEZpZWxkLmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclNlYXJjaEZpZWxkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiAr
MjcsNyBAQAogI2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1ZhbHVl
S2V5d29yZHMuaCIKICNpbmNsdWRlICJDaHJvbWUuaCIKKyNpbmNsdWRlICJGb250LmgiCiAjaW5j
bHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgIkZy
YW1lVmlldy5oIgpAQCAtNDIsNyArNDMsNiBAQAogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNp
bmNsdWRlICJTZWFyY2hQb3B1cE1lbnUuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2luY2x1
ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1
ZGUgIlRleHRDb250cm9sSW5uZXJFbGVtZW50cy5oIgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHQuY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1MSw3ICs0NTEs
NyBAQCBMYXlvdXRSZWN0IFJlbmRlclRleHQ6OmxvY2FsQ2FyZXRSZWN0KEluCiAgICAgcmV0dXJu
IGJveC5yb290KCkuY29tcHV0ZUNhcmV0UmVjdChsZWZ0LCBjYXJldFdpZHRoLCBleHRyYVdpZHRo
VG9FbmRPZkxpbmUpOwogfQogCi1BTFdBWVNfSU5MSU5FIGZsb2F0IFJlbmRlclRleHQ6OndpZHRo
RnJvbUNhY2hlKGNvbnN0IEZvbnRDYXNjYWRlJiBmLCBpbnQgc3RhcnQsIGludCBsZW4sIGZsb2F0
IHhQb3MsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cywgR2x5
cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdywgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25z
dAorQUxXQVlTX0lOTElORSBmbG9hdCBSZW5kZXJUZXh0Ojp3aWR0aEZyb21DYWNoZShjb25zdCBG
b250Q2FzY2FkZSYgZiwgaW50IHN0YXJ0LCBpbnQgbGVuLCBmbG9hdCB4UG9zLCBIYXNoU2V0PGNv
bnN0IEZvbnQqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdywg
Y29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAogewogICAgIGlmIChzdHlsZS5oYXNUZXh0
Q29tYmluZSgpICYmIGlzPFJlbmRlckNvbWJpbmVUZXh0PigqdGhpcykpIHsKICAgICAgICAgY29u
c3QgUmVuZGVyQ29tYmluZVRleHQmIGNvbWJpbmVUZXh0ID0gZG93bmNhc3Q8UmVuZGVyQ29tYmlu
ZVRleHQ+KCp0aGlzKTsKQEAgLTYzMCw3ICs2MzAsNyBAQCBMaW5lQnJlYWtJdGVyYXRvck1vZGUg
bWFwTGluZUJyZWFrVG9JdGVyCiAKIHZvaWQgUmVuZGVyVGV4dDo6Y29tcHV0ZVByZWZlcnJlZExv
Z2ljYWxXaWR0aHMoZmxvYXQgbGVhZFdpZHRoKQogewotICAgIEhhc2hTZXQ8Y29uc3QgU2ltcGxl
Rm9udERhdGEqPiBmYWxsYmFja0ZvbnRzOworICAgIEhhc2hTZXQ8Y29uc3QgRm9udCo+IGZhbGxi
YWNrRm9udHM7CiAgICAgR2x5cGhPdmVyZmxvdyBnbHlwaE92ZXJmbG93OwogICAgIGNvbXB1dGVQ
cmVmZXJyZWRMb2dpY2FsV2lkdGhzKGxlYWRXaWR0aCwgZmFsbGJhY2tGb250cywgZ2x5cGhPdmVy
Zmxvdyk7CiAgICAgaWYgKGZhbGxiYWNrRm9udHMuaXNFbXB0eSgpICYmICFnbHlwaE92ZXJmbG93
LmxlZnQgJiYgIWdseXBoT3ZlcmZsb3cucmlnaHQgJiYgIWdseXBoT3ZlcmZsb3cudG9wICYmICFn
bHlwaE92ZXJmbG93LmJvdHRvbSkKQEAgLTY0Myw3ICs2NDMsNyBAQCBzdGF0aWMgaW5saW5lIGZs
b2F0IGh5cGhlbldpZHRoKFJlbmRlclRlCiAgICAgcmV0dXJuIGZvbnQud2lkdGgoUmVuZGVyQmxv
Y2s6OmNvbnN0cnVjdFRleHRSdW4ocmVuZGVyZXIsIGZvbnQsIHN0eWxlLmh5cGhlblN0cmluZygp
LnN0cmluZygpLCBzdHlsZSkpOwogfQogCi1zdGF0aWMgZmxvYXQgbWF4V29yZEZyYWdtZW50V2lk
dGgoUmVuZGVyVGV4dCogcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3Qg
Rm9udENhc2NhZGUmIGZvbnQsIFN0cmluZ1ZpZXcgd29yZCwgaW50IG1pbmltdW1QcmVmaXhMZW5n
dGgsIHVuc2lnbmVkIG1pbmltdW1TdWZmaXhMZW5ndGgsIGludCYgc3VmZml4U3RhcnQsIEhhc2hT
ZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiYgZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyYg
Z2x5cGhPdmVyZmxvdykKK3N0YXRpYyBmbG9hdCBtYXhXb3JkRnJhZ21lbnRXaWR0aChSZW5kZXJU
ZXh0KiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGb250Q2FzY2Fk
ZSYgZm9udCwgU3RyaW5nVmlldyB3b3JkLCBpbnQgbWluaW11bVByZWZpeExlbmd0aCwgdW5zaWdu
ZWQgbWluaW11bVN1ZmZpeExlbmd0aCwgaW50JiBzdWZmaXhTdGFydCwgSGFzaFNldDxjb25zdCBG
b250Kj4mIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cmIGdseXBoT3ZlcmZsb3cpCiB7CiAg
ICAgc3VmZml4U3RhcnQgPSAwOwogICAgIGlmICh3b3JkLmxlbmd0aCgpIDw9IG1pbmltdW1TdWZm
aXhMZW5ndGgpCkBAIC02ODMsNyArNjgzLDcgQEAgc3RhdGljIGZsb2F0IG1heFdvcmRGcmFnbWVu
dFdpZHRoKFJlbmRlcgogICAgIHJldHVybiBtYXhGcmFnbWVudFdpZHRoOwogfQogCi12b2lkIFJl
bmRlclRleHQ6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKGZsb2F0IGxlYWRXaWR0aCwg
SGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+JiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJm
bG93JiBnbHlwaE92ZXJmbG93KQordm9pZCBSZW5kZXJUZXh0Ojpjb21wdXRlUHJlZmVycmVkTG9n
aWNhbFdpZHRocyhmbG9hdCBsZWFkV2lkdGgsIEhhc2hTZXQ8Y29uc3QgRm9udCo+JiBmYWxsYmFj
a0ZvbnRzLCBHbHlwaE92ZXJmbG93JiBnbHlwaE92ZXJmbG93KQogewogICAgIEFTU0VSVChtX2hh
c1RhYiB8fCBwcmVmZXJyZWRMb2dpY2FsV2lkdGhzRGlydHkoKSB8fCAhbV9rbm93blRvSGF2ZU5v
T3ZlcmZsb3dBbmROb0ZhbGxiYWNrRm9udHMpOwogCkBAIC0xMjA2LDcgKzEyMDYsNyBAQCBjb25z
dCBTaW1wbGVMaW5lTGF5b3V0OjpMYXlvdXQqIFJlbmRlclRlCiAgICAgcmV0dXJuIGRvd25jYXN0
PFJlbmRlckJsb2NrRmxvdz4oKnBhcmVudCgpKS5zaW1wbGVMaW5lTGF5b3V0KCk7CiB9CiAKLWZs
b2F0IFJlbmRlclRleHQ6OndpZHRoKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgZmxvYXQg
eFBvcywgYm9vbCBmaXJzdExpbmUsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFs
bGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKK2Zsb2F0IFJl
bmRlclRleHQ6OndpZHRoKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgZmxvYXQgeFBvcywg
Ym9vbCBmaXJzdExpbmUsIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzLCBHbHlw
aE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAogewogICAgIGlmIChmcm9tID49IHRleHRM
ZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMjE4LDcgKzEyMTgsNyBAQCBmbG9hdCBS
ZW5kZXJUZXh0Ojp3aWR0aCh1bnNpZ25lZCBmcm9tLCB1CiAgICAgcmV0dXJuIHdpZHRoKGZyb20s
IGxlbiwgbGluZVN0eWxlLmZvbnRDYXNjYWRlKCksIHhQb3MsIGZhbGxiYWNrRm9udHMsIGdseXBo
T3ZlcmZsb3cpOwogfQogCi1mbG9hdCBSZW5kZXJUZXh0Ojp3aWR0aCh1bnNpZ25lZCBmcm9tLCB1
bnNpZ25lZCBsZW4sIGNvbnN0IEZvbnRDYXNjYWRlJiBmLCBmbG9hdCB4UG9zLCBIYXNoU2V0PGNv
bnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBo
T3ZlcmZsb3cpIGNvbnN0CitmbG9hdCBSZW5kZXJUZXh0Ojp3aWR0aCh1bnNpZ25lZCBmcm9tLCB1
bnNpZ25lZCBsZW4sIGNvbnN0IEZvbnRDYXNjYWRlJiBmLCBmbG9hdCB4UG9zLCBIYXNoU2V0PGNv
bnN0IEZvbnQqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykg
Y29uc3QKIHsKICAgICBBU1NFUlQoZnJvbSArIGxlbiA8PSB0ZXh0TGVuZ3RoKCkpOwogICAgIGlm
ICghdGV4dExlbmd0aCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRl
eHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5o
CShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC04OSw4ICs4OSw4IEBAIHB1YmxpYzoKICAgICB1bnNpZ25l
ZCB0ZXh0TGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0LmltcGwoKS0+bGVuZ3RoKCk7IH0g
Ly8gbm9uIHZpcnR1YWwgaW1wbGVtZW50YXRpb24gb2YgbGVuZ3RoKCkKICAgICB2b2lkIHBvc2l0
aW9uTGluZUJveChJbmxpbmVUZXh0Qm94Jik7CiAKLSAgICB2aXJ0dWFsIGZsb2F0IHdpZHRoKHVu
c2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgY29uc3QgRm9udENhc2NhZGUmLCBmbG9hdCB4UG9z
LCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwLCBHbHlw
aE92ZXJmbG93KiA9IDApIGNvbnN0OwotICAgIHZpcnR1YWwgZmxvYXQgd2lkdGgodW5zaWduZWQg
ZnJvbSwgdW5zaWduZWQgbGVuLCBmbG9hdCB4UG9zLCBib29sIGZpcnN0TGluZSA9IGZhbHNlLCBI
YXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwLCBHbHlwaE92
ZXJmbG93KiA9IDApIGNvbnN0OworICAgIHZpcnR1YWwgZmxvYXQgd2lkdGgodW5zaWduZWQgZnJv
bSwgdW5zaWduZWQgbGVuLCBjb25zdCBGb250Q2FzY2FkZSYsIGZsb2F0IHhQb3MsIEhhc2hTZXQ8
Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25z
dDsKKyAgICB2aXJ0dWFsIGZsb2F0IHdpZHRoKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbiwg
ZmxvYXQgeFBvcywgYm9vbCBmaXJzdExpbmUgPSBmYWxzZSwgSGFzaFNldDxjb25zdCBGb250Kj4q
IGZhbGxiYWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93KiA9IDApIGNvbnN0OwogCiAgICAgZmxv
YXQgbWluTG9naWNhbFdpZHRoKCkgY29uc3Q7CiAgICAgZmxvYXQgbWF4TG9naWNhbFdpZHRoKCkg
Y29uc3Q7CkBAIC0xODAsNyArMTgwLDcgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgYm9vbCBj
YW5IYXZlQ2hpbGRyZW4oKSBjb25zdCBvdmVycmlkZSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQog
Ci0gICAgdm9pZCBjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyhmbG9hdCBsZWFkV2lkdGgs
IEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiYgZmFsbGJhY2tGb250cywgR2x5cGhPdmVy
ZmxvdyYpOworICAgIHZvaWQgY29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoZmxvYXQgbGVh
ZFdpZHRoLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiYgZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxv
dyYpOwogCiAgICAgYm9vbCBjb21wdXRlQ2FuVXNlU2ltcGxlRm9udENvZGVQYXRoKCkgY29uc3Q7
CiAgICAgCkBAIC0xOTIsNyArMTkyLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgbm9k
ZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0
VGVzdExvY2F0aW9uJiwgY29uc3QgTGF5b3V0UG9pbnQmLCBIaXRUZXN0QWN0aW9uKSBvdmVycmlk
ZSBmaW5hbCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gZmFsc2U7IH0KIAogICAgIGJv
b2wgY29udGFpbnNPbmx5V2hpdGVzcGFjZSh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4pIGNv
bnN0OwotICAgIGZsb2F0IHdpZHRoRnJvbUNhY2hlKGNvbnN0IEZvbnRDYXNjYWRlJiwgaW50IHN0
YXJ0LCBpbnQgbGVuLCBmbG9hdCB4UG9zLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4q
IGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqLCBjb25zdCBSZW5kZXJTdHlsZSYpIGNvbnN0
OworICAgIGZsb2F0IHdpZHRoRnJvbUNhY2hlKGNvbnN0IEZvbnRDYXNjYWRlJiwgaW50IHN0YXJ0
LCBpbnQgbGVuLCBmbG9hdCB4UG9zLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250
cywgR2x5cGhPdmVyZmxvdyosIGNvbnN0IFJlbmRlclN0eWxlJikgY29uc3Q7CiAgICAgYm9vbCBp
c0FsbEFTQ0lJKCkgY29uc3QgeyByZXR1cm4gbV9pc0FsbEFTQ0lJOyB9CiAgICAgYm9vbCBjb21w
dXRlVXNlQmFja3NsYXNoQXNZZW5TeW1ib2woKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5j
cHAJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBA
CiAjaW5jbHVkZSAiQ1NTRm9udFNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jk
cy5oIgogI2luY2x1ZGUgIkNocm9tZS5oIgorI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJG
cmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3
LmgiCkBAIC00MCw3ICs0MSw2IEBACiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRl
ICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJTaW1wbGVG
b250RGF0YS5oIgogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJUZXh0Q29u
dHJvbElubmVyRWxlbWVudHMuaCIKICNpbmNsdWRlIDx3dGYvU3RhY2tTdGF0cy5oPgpAQCAtMzQ2
LDcgKzM0Niw3IEBAIExheW91dFVuaXQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjoKICAg
ICBpZiAoZmFtaWx5ID09ICJMdWNpZGEgR3JhbmRlIikKICAgICAgICAgbWF4Q2hhcldpZHRoID0g
c2NhbGVFbVRvVW5pdHMoNDAyNyk7CiAgICAgZWxzZSBpZiAoc3R5bGUoKS5mb250Q2FzY2FkZSgp
Lmhhc1ZhbGlkQXZlcmFnZUNoYXJXaWR0aCgpKQotICAgICAgICBtYXhDaGFyV2lkdGggPSByb3Vu
ZGYoc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLm1heENoYXJXaWR0aCgp
KTsKKyAgICAgICAgbWF4Q2hhcldpZHRoID0gcm91bmRmKHN0eWxlKCkuZm9udENhc2NhZGUoKS5w
cmltYXJ5Rm9udCgpLm1heENoYXJXaWR0aCgpKTsKICNlbmRpZgogCiAgICAgLy8gRm9yIHRleHQg
aW5wdXRzLCBJRSBhZGRzIHNvbWUgZXh0cmEgd2lkdGguCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTU4
MCw3ICs1ODAsNyBAQCBzdGF0aWMgdm9pZCBhZGp1c3RJbnB1dEVsZW1lbnRCdXR0b25TdHlsCiAg
ICAgRm9udENhc2NhZGUgZm9udCA9IHN0eWxlLmZvbnRDYXNjYWRlKCk7CiAgICAgCiAgICAgUmVu
ZGVyT2JqZWN0KiByZW5kZXJlciA9IGlucHV0RWxlbWVudC5yZW5kZXJlcigpOwotICAgIGlmIChm
b250LnByaW1hcnlGb250RGF0YSgpLmlzU1ZHRm9udCgpICYmICFyZW5kZXJlcikKKyAgICBpZiAo
Zm9udC5wcmltYXJ5Rm9udCgpLmlzU1ZHRm9udCgpICYmICFyZW5kZXJlcikKICAgICAgICAgcmV0
dXJuOwogICAgIAogICAgIGZsb2F0IG1heGltdW1XaWR0aCA9IGxvY2FsaXplZERhdGVDYWNoZSgp
Lm1heGltdW1XaWR0aEZvckRhdGVUeXBlKGRhdGVUeXBlLCBmb250LCBSZW5kZXJUaGVtZU1lYXN1
cmVUZXh0Q2xpZW50KGZvbnQsICpyZW5kZXJlciwgc3R5bGUpKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAJKHJldmlzaW9uIDE3ODg1NykKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODg1LDcgKzg4NSw3IEBAIHZvaWQgUm9vdElubGluZUJveDo6YXNjZW50QW5kRGVzY2VudEZv
ckIKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFZlY3Rvcjxjb25zdCBTaW1wbGVGb250
RGF0YSo+KiB1c2VkRm9udHMgPSBudWxscHRyOworICAgIFZlY3Rvcjxjb25zdCBGb250Kj4qIHVz
ZWRGb250cyA9IG51bGxwdHI7CiAgICAgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdyA9IG51
bGxwdHI7CiAgICAgaWYgKGlzPElubGluZVRleHRCb3g+KGJveCkpIHsKICAgICAgICAgR2x5cGhP
dmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXA6Oml0ZXJhdG9yIGl0ID0gdGV4dEJveERhdGFNYXAu
ZmluZCgmZG93bmNhc3Q8SW5saW5lVGV4dEJveD4oYm94KSk7CkBAIC05MDEsNyArOTAxLDcgQEAg
dm9pZCBSb290SW5saW5lQm94Ojphc2NlbnRBbmREZXNjZW50Rm9yQgogCiAgICAgY29uc3QgUmVu
ZGVyU3R5bGUmIGJveExpbmVTdHlsZSA9IGJveC5saW5lU3R5bGUoKTsKICAgICBpZiAodXNlZEZv
bnRzICYmICF1c2VkRm9udHMtPmlzRW1wdHkoKSAmJiAoaW5jbHVkZUZvbnQgfHwgKGJveExpbmVT
dHlsZS5saW5lSGVpZ2h0KCkuaXNOZWdhdGl2ZSgpICYmIGluY2x1ZGVMZWFkaW5nKSkpIHsKLSAg
ICAgICAgdXNlZEZvbnRzLT5hcHBlbmQoJmJveExpbmVTdHlsZS5mb250Q2FzY2FkZSgpLnByaW1h
cnlGb250RGF0YSgpKTsKKyAgICAgICAgdXNlZEZvbnRzLT5hcHBlbmQoJmJveExpbmVTdHlsZS5m
b250Q2FzY2FkZSgpLnByaW1hcnlGb250KCkpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHVzZWRGb250cy0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIGNvbnN0IEZvbnRNZXRy
aWNzJiBmb250TWV0cmljcyA9IHVzZWRGb250cy0+YXQoaSktPmZvbnRNZXRyaWNzKCk7CiAgICAg
ICAgICAgICBpbnQgdXNlZEZvbnRBc2NlbnQgPSBmb250TWV0cmljcy5hc2NlbnQoYmFzZWxpbmVU
eXBlKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5
b3V0LmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Np
bXBsZUxpbmVMYXlvdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBTaW1wbGVMaW5lTGF5b3V0IHsKIAogdGVtcGxhdGUg
PHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgYm9vbCBjYW5Vc2VGb3JUZXh0KGNvbnN0
IENoYXJhY3RlclR5cGUqIHRleHQsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU2ltcGxlRm9udERh
dGEmIGZvbnREYXRhKQorc3RhdGljIGJvb2wgY2FuVXNlRm9yVGV4dChjb25zdCBDaGFyYWN0ZXJU
eXBlKiB0ZXh0LCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IEZvbnQmIGZvbnQpCiB7CiAgICAgLy8g
RklYTUU6IDx0ZXh0YXJlYSBtYXhsZW5ndGg9MD4gZ2VuZXJhdGVzIGVtcHR5IHRleHQgbm9kZS4K
ICAgICBpZiAoIWxlbmd0aCkKQEAgLTc1LDE3ICs3NSwxNyBAQCBzdGF0aWMgYm9vbCBjYW5Vc2VG
b3JUZXh0KGNvbnN0IENoYXJhY3RlCiAgICAgICAgICAgICB8fCBkaXJlY3Rpb24gPT0gVV9QT1Bf
RElSRUNUSU9OQUxfRk9STUFUIHx8IGRpcmVjdGlvbiA9PSBVX0JPVU5EQVJZX05FVVRSQUwpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgaWYgKCFmb250RGF0YS5nbHlwaEZv
ckNoYXJhY3RlcihjaGFyYWN0ZXIpKQorICAgICAgICBpZiAoIWZvbnQuZ2x5cGhGb3JDaGFyYWN0
ZXIoY2hhcmFjdGVyKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBib29sIGNhblVzZUZvclRleHQoY29uc3QgUmVuZGVyVGV4
dCYgdGV4dFJlbmRlcmVyLCBjb25zdCBTaW1wbGVGb250RGF0YSYgZm9udERhdGEpCitzdGF0aWMg
Ym9vbCBjYW5Vc2VGb3JUZXh0KGNvbnN0IFJlbmRlclRleHQmIHRleHRSZW5kZXJlciwgY29uc3Qg
Rm9udCYgZm9udCkKIHsKICAgICBpZiAodGV4dFJlbmRlcmVyLmlzOEJpdCgpKQotICAgICAgICBy
ZXR1cm4gY2FuVXNlRm9yVGV4dCh0ZXh0UmVuZGVyZXIuY2hhcmFjdGVyczgoKSwgdGV4dFJlbmRl
cmVyLnRleHRMZW5ndGgoKSwgZm9udERhdGEpOwotICAgIHJldHVybiBjYW5Vc2VGb3JUZXh0KHRl
eHRSZW5kZXJlci5jaGFyYWN0ZXJzMTYoKSwgdGV4dFJlbmRlcmVyLnRleHRMZW5ndGgoKSwgZm9u
dERhdGEpOworICAgICAgICByZXR1cm4gY2FuVXNlRm9yVGV4dCh0ZXh0UmVuZGVyZXIuY2hhcmFj
dGVyczgoKSwgdGV4dFJlbmRlcmVyLnRleHRMZW5ndGgoKSwgZm9udCk7CisgICAgcmV0dXJuIGNh
blVzZUZvclRleHQodGV4dFJlbmRlcmVyLmNoYXJhY3RlcnMxNigpLCB0ZXh0UmVuZGVyZXIudGV4
dExlbmd0aCgpLCBmb250KTsKIH0KIAogYm9vbCBjYW5Vc2VGb3IoY29uc3QgUmVuZGVyQmxvY2tG
bG93JiBmbG93KQpAQCAtMTg0LDExICsxODQsMTEgQEAgYm9vbCBjYW5Vc2VGb3IoY29uc3QgUmVu
ZGVyQmxvY2tGbG93JiBmbAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIGlm
IChzdHlsZS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmlzU1ZHRm9udCgpKQorICAg
IGlmIChzdHlsZS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCkuaXNTVkdGb250KCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAvLyBXZSBhc3N1bWUgdGhhdCBhbGwgbGluZXMgaGF2ZSBt
ZXRyaWNzIGJhc2VkIHB1cmVseSBvbiB0aGUgcHJpbWFyeSBmb250LgotICAgIGF1dG8mIHByaW1h
cnlGb250RGF0YSA9IHN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCk7Ci0gICAg
aWYgKHByaW1hcnlGb250RGF0YS5pc0xvYWRpbmcoKSkKKyAgICBhdXRvJiBwcmltYXJ5Rm9udCA9
IHN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKTsKKyAgICBpZiAocHJpbWFyeUZvbnQu
aXNMb2FkaW5nKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBmb3IgKGNvbnN0IGF1dG8m
IHRleHRSZW5kZXJlciA6IGNoaWxkcmVuT2ZUeXBlPFJlbmRlclRleHQ+KGZsb3cpKSB7CiAgICAg
ICAgIGlmICh0ZXh0UmVuZGVyZXIuaXNDb21iaW5lVGV4dCgpIHx8IHRleHRSZW5kZXJlci5pc0Nv
dW50ZXIoKSB8fCB0ZXh0UmVuZGVyZXIuaXNRdW90ZSgpIHx8IHRleHRSZW5kZXJlci5pc1RleHRG
cmFnbWVudCgpCkBAIC0xOTYsNyArMTk2LDcgQEAgYm9vbCBjYW5Vc2VGb3IoY29uc3QgUmVuZGVy
QmxvY2tGbG93JiBmbAogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAoc3R5
bGUuZm9udENhc2NhZGUoKS5jb2RlUGF0aChUZXh0UnVuKHRleHRSZW5kZXJlci50ZXh0KCkpKSAh
PSBGb250Q2FzY2FkZTo6U2ltcGxlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICBpZiAoIWNhblVzZUZvclRleHQodGV4dFJlbmRlcmVyLCBwcmltYXJ5Rm9udERhdGEpKQorICAg
ICAgICBpZiAoIWNhblVzZUZvclRleHQodGV4dFJlbmRlcmVyLCBwcmltYXJ5Rm9udCkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvQnJlYWtpbmdDb250ZXh0SW5saW5lSGVhZGVycy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0JyZWFraW5nQ29u
dGV4dElubGluZUhlYWRlcnMuaAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL2xpbmUvQnJlYWtpbmdDb250ZXh0SW5saW5lSGVhZGVycy5oCSh3b3JraW5nIGNv
cHkpCkBAIC01OSw3ICs1OSw3IEBAIHN0cnVjdCBXb3JkTWVhc3VyZW1lbnQgewogICAgIGZsb2F0
IHdpZHRoOwogICAgIGludCBzdGFydE9mZnNldDsKICAgICBpbnQgZW5kT2Zmc2V0OwotICAgIEhh
c2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiBmYWxsYmFja0ZvbnRzOworICAgIEhhc2hTZXQ8
Y29uc3QgRm9udCo+IGZhbGxiYWNrRm9udHM7CiB9OwogCiBjbGFzcyBCcmVha2luZ0NvbnRleHQg
ewpAQCAtNDg2LDEzICs0ODYsMTMgQEAgaW5saW5lIHZvaWQgdXBkYXRlQ291bnRlcklmTmVlZGVk
KFJlbmRlcgogICAgIGRvd25jYXN0PFJlbmRlckNvdW50ZXI+KHJlbmRlclRleHQpLnVwZGF0ZUNv
dW50ZXIoKTsKIH0KIAotaW5saW5lIGZsb2F0IG1lYXN1cmVIeXBoZW5XaWR0aChSZW5kZXJUZXh0
KiByZW5kZXJlciwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIEhhc2hTZXQ8Y29uc3QgU2ltcGxl
Rm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDApCitpbmxpbmUgZmxvYXQgbWVhc3VyZUh5cGhl
bldpZHRoKFJlbmRlclRleHQqIHJlbmRlcmVyLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgSGFz
aFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMgPSAwKQogewogICAgIGNvbnN0IFJlbmRl
clN0eWxlJiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwogICAgIHJldHVybiBmb250LndpZHRo
KFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHJlbmRlcmVyLCBmb250LCBzdHlsZS5oeXBo
ZW5TdHJpbmcoKS5zdHJpbmcoKSwgc3R5bGUpLCBmYWxsYmFja0ZvbnRzKTsKIH0KIAotQUxXQVlT
X0lOTElORSBmbG9hdCB0ZXh0V2lkdGgoUmVuZGVyVGV4dCogdGV4dCwgdW5zaWduZWQgZnJvbSwg
dW5zaWduZWQgbGVuLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgZmxvYXQgeFBvcywgYm9vbCBp
c0ZpeGVkUGl0Y2gsIGJvb2wgY29sbGFwc2VXaGl0ZVNwYWNlLCBIYXNoU2V0PGNvbnN0IFNpbXBs
ZUZvbnREYXRhKj4mIGZhbGxiYWNrRm9udHMsIFRleHRMYXlvdXQqIGxheW91dCA9IDApCitBTFdB
WVNfSU5MSU5FIGZsb2F0IHRleHRXaWR0aChSZW5kZXJUZXh0KiB0ZXh0LCB1bnNpZ25lZCBmcm9t
LCB1bnNpZ25lZCBsZW4sIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBmbG9hdCB4UG9zLCBib29s
IGlzRml4ZWRQaXRjaCwgYm9vbCBjb2xsYXBzZVdoaXRlU3BhY2UsIEhhc2hTZXQ8Y29uc3QgRm9u
dCo+JiBmYWxsYmFja0ZvbnRzLCBUZXh0TGF5b3V0KiBsYXlvdXQgPSAwKQogewogICAgIGNvbnN0
IFJlbmRlclN0eWxlJiBzdHlsZSA9IHRleHQtPnN0eWxlKCk7CiAKQEAgLTU3OCw3ICs1NzgsNyBA
QCBpbmxpbmUgdm9pZCB0cnlIeXBoZW5hdGluZyhSZW5kZXJUZXh0KiB0CiAgICAgQVNTRVJUKHBv
cyAtIGxhc3RTcGFjZSAtIHByZWZpeExlbmd0aCA+PSBtaW5pbXVtU3VmZml4TGVuZ3RoKTsKIAog
I2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4g
ZmFsbGJhY2tGb250czsKKyAgICBIYXNoU2V0PGNvbnN0IEZvbnQqPiBmYWxsYmFja0ZvbnRzOwog
ICAgIGZsb2F0IHByZWZpeFdpZHRoID0gaHlwaGVuV2lkdGggKyB0ZXh0V2lkdGgodGV4dCwgbGFz
dFNwYWNlLCBwcmVmaXhMZW5ndGgsIGZvbnQsIHhQb3MsIGlzRml4ZWRQaXRjaCwgY29sbGFwc2VX
aGl0ZVNwYWNlLCBmYWxsYmFja0ZvbnRzKSArIGxhc3RTcGFjZVdvcmRTcGFjaW5nOwogICAgIEFT
U0VSVCh4UG9zICsgcHJlZml4V2lkdGggPD0gYXZhaWxhYmxlV2lkdGgpOwogI2Vsc2UKQEAgLTY1
Niw3ICs2NTYsNyBAQCBpbmxpbmUgYm9vbCBCcmVha2luZ0NvbnRleHQ6OmhhbmRsZVRleHQoCiAK
ICAgICAvLyBOb24temVybyBvbmx5IHdoZW4ga2VybmluZyBpcyBlbmFibGVkIGFuZCBUZXh0TGF5
b3V0IGlzbid0IHVzZWQsIGluIHdoaWNoIGNhc2Ugd2UgbWVhc3VyZQogICAgIC8vIHdvcmRzIHdp
dGggdGhlaXIgdHJhaWxpbmcgc3BhY2UsIHRoZW4gc3VidHJhY3QgaXRzIHdpZHRoLgotICAgIEhh
c2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiBmYWxsYmFja0ZvbnRzOworICAgIEhhc2hTZXQ8
Y29uc3QgRm9udCo+IGZhbGxiYWNrRm9udHM7CiAgICAgZmxvYXQgd29yZFRyYWlsaW5nU3BhY2VX
aWR0aCA9IChmb250LnR5cGVzZXR0aW5nRmVhdHVyZXMoKSAmIEtlcm5pbmcpICYmICF0ZXh0TGF5
b3V0ID8gZm9udC53aWR0aChSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bigmcmVuZGVyVGV4
dCwgZm9udCwgJnNwYWNlLCAxLCBzdHlsZSksICZmYWxsYmFja0ZvbnRzKSArIHdvcmRTcGFjaW5n
IDogMDsKIAogICAgIFVDaGFyIGxhc3RDaGFyYWN0ZXIgPSBtX3JlbmRlclRleHRJbmZvLm1fbGlu
ZUJyZWFrSXRlcmF0b3IubGFzdENoYXJhY3RlcigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAJKHJl
dmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVy
TWF0aE1MT3BlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMzLDcgKzEzMzMsNyBAQCB2
b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpyZXNldFN0cmV0Y2hTCiAKIEZsb2F0UmVjdCBSZW5k
ZXJNYXRoTUxPcGVyYXRvcjo6Ym91bmRzRm9yR2x5cGgoY29uc3QgR2x5cGhEYXRhJiBkYXRhKSBj
b25zdAogewotICAgIHJldHVybiBkYXRhLmZvbnREYXRhLT5ib3VuZHNGb3JHbHlwaChkYXRhLmds
eXBoKTsKKyAgICByZXR1cm4gZGF0YS5mb250LT5ib3VuZHNGb3JHbHlwaChkYXRhLmdseXBoKTsK
IH0KIAogZmxvYXQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmhlaWdodEZvckdseXBoKGNvbnN0IEds
eXBoRGF0YSYgZGF0YSkgY29uc3QKQEAgLTEzNDMsNyArMTM0Myw3IEBAIGZsb2F0IFJlbmRlck1h
dGhNTE9wZXJhdG9yOjpoZWlnaHRGb3JHbHkKIAogZmxvYXQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6
OmFkdmFuY2VGb3JHbHlwaChjb25zdCBHbHlwaERhdGEmIGRhdGEpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIGRhdGEuZm9udERhdGEtPndpZHRoRm9yR2x5cGgoZGF0YS5nbHlwaCk7CisgICAgcmV0dXJu
IGRhdGEuZm9udC0+d2lkdGhGb3JHbHlwaChkYXRhLmdseXBoKTsKIH0KIAogdm9pZCBSZW5kZXJN
YXRoTUxPcGVyYXRvcjo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKQpAQCAtMTUyMSwx
MSArMTUyMSwxMSBAQCBib29sIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpnZXRHbHlwaEFzc2VtCiAg
ICAgaWYgKCFib3R0b20uZ2x5cGgpCiAgICAgICAgIGJvdHRvbS5nbHlwaCA9IGV4dGVuc2lvbi5n
bHlwaDsKIAotICAgIHRvcC5mb250RGF0YSA9ICZzdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFy
eUZvbnREYXRhKCk7Ci0gICAgZXh0ZW5zaW9uLmZvbnREYXRhID0gdG9wLmZvbnREYXRhOwotICAg
IGJvdHRvbS5mb250RGF0YSA9IHRvcC5mb250RGF0YTsKKyAgICB0b3AuZm9udCA9ICZzdHlsZSgp
LmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKTsKKyAgICBleHRlbnNpb24uZm9udCA9IHRvcC5m
b250OworICAgIGJvdHRvbS5mb250ID0gdG9wLmZvbnQ7CiAgICAgaWYgKG1pZGRsZS5nbHlwaCkK
LSAgICAgICAgbWlkZGxlLmZvbnREYXRhID0gdG9wLmZvbnREYXRhOworICAgICAgICBtaWRkbGUu
Zm9udCA9IHRvcC5mb250OwogCiAgICAgc3RyZXRjaHlEYXRhLnNldEdseXBoQXNzZW1ibHlNb2Rl
KHRvcCwgZXh0ZW5zaW9uLCBib3R0b20sIG1pZGRsZSk7CiAKQEAgLTE1MzgsMjQgKzE1MzgsMjQg
QEAgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OlN0cmV0Y2h5RGF0YSBSZW5kZQogCiAgICAgQVNTRVJU
KG1faXNWZXJ0aWNhbCAmJiBpc0xhcmdlT3BlcmF0b3JJbkRpc3BsYXlTdHlsZSgpKTsKIAotICAg
IGNvbnN0IGF1dG8mIHByaW1hcnlGb250RGF0YSA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmlt
YXJ5Rm9udERhdGEoKTsKKyAgICBjb25zdCBhdXRvJiBwcmltYXJ5Rm9udCA9IHN0eWxlKCkuZm9u
dENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpOwogICAgIEdseXBoRGF0YSBiYXNlR2x5cGggPSBzdHls
ZSgpLmZvbnRDYXNjYWRlKCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3RlciwgIXN0eWxl
KCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKTsKLSAgICBpZiAoIXByaW1hcnlGb250RGF0YS5t
YXRoRGF0YSgpIHx8IGJhc2VHbHlwaC5mb250RGF0YSAhPSAmcHJpbWFyeUZvbnREYXRhKQorICAg
IGlmICghcHJpbWFyeUZvbnQubWF0aERhdGEoKSB8fCBiYXNlR2x5cGguZm9udCAhPSAmcHJpbWFy
eUZvbnQpCiAgICAgICAgIHJldHVybiBkYXRhOwogCiAgICAgVmVjdG9yPEdseXBoPiBzaXplVmFy
aWFudHM7CiAgICAgVmVjdG9yPE9wZW5UeXBlTWF0aERhdGE6OkFzc2VtYmx5UGFydD4gYXNzZW1i
bHlQYXJ0czsKIAogICAgIC8vIFRoZSB2YWx1ZSBvZiBkaXNwbGF5T3BlcmF0b3JNaW5IZWlnaHQg
aXMgc29tZXRpbWVzIHRvbyBzbWFsbCwgc28gd2UgZW5zdXJlIHRoYXQgaXQgaXMgYXQgbGVhc3Qg
XHNxcnR7Mn0gdGltZXMgdGhlIHNpemUgb2YgdGhlIGJhc2UgZ2x5cGguCi0gICAgZmxvYXQgZGlz
cGxheU9wZXJhdG9yTWluSGVpZ2h0ID0gc3RkOjptYXgoYmFzZUdseXBoLmZvbnREYXRhLT5ib3Vu
ZHNGb3JHbHlwaChiYXNlR2x5cGguZ2x5cGgpLmhlaWdodCgpICogc3FydE9mVHdvRmxvYXQsIHBy
aW1hcnlGb250RGF0YS5tYXRoRGF0YSgpLT5nZXRNYXRoQ29uc3RhbnQocHJpbWFyeUZvbnREYXRh
LCBPcGVuVHlwZU1hdGhEYXRhOjpEaXNwbGF5T3BlcmF0b3JNaW5IZWlnaHQpKTsKKyAgICBmbG9h
dCBkaXNwbGF5T3BlcmF0b3JNaW5IZWlnaHQgPSBzdGQ6Om1heChiYXNlR2x5cGguZm9udC0+Ym91
bmRzRm9yR2x5cGgoYmFzZUdseXBoLmdseXBoKS5oZWlnaHQoKSAqIHNxcnRPZlR3b0Zsb2F0LCBw
cmltYXJ5Rm9udC5tYXRoRGF0YSgpLT5nZXRNYXRoQ29uc3RhbnQocHJpbWFyeUZvbnQsIE9wZW5U
eXBlTWF0aERhdGE6OkRpc3BsYXlPcGVyYXRvck1pbkhlaWdodCkpOwogCi0gICAgcHJpbWFyeUZv
bnREYXRhLm1hdGhEYXRhKCktPmdldE1hdGhWYXJpYW50cyhiYXNlR2x5cGguZ2x5cGgsIHRydWUs
IHNpemVWYXJpYW50cywgYXNzZW1ibHlQYXJ0cyk7CisgICAgcHJpbWFyeUZvbnQubWF0aERhdGEo
KS0+Z2V0TWF0aFZhcmlhbnRzKGJhc2VHbHlwaC5nbHlwaCwgdHJ1ZSwgc2l6ZVZhcmlhbnRzLCBh
c3NlbWJseVBhcnRzKTsKIAogICAgIC8vIFdlIGNob29zZSB0aGUgZmlyc3Qgc2l6ZSB2YXJpYW50
IHRoYXQgaXMgbGFyZ2VyIHRoYW4gdGhlIGV4cGVjdGVkIGRpc3BsYXlPcGVyYXRvck1pbkhlaWdo
dCBhbmQgb3RoZXJ3aXNlIGZhbGxiYWNrIHRvIHRoZSBsYXJnZXN0IHZhcmlhbnQuCiAgICAgZm9y
IChhdXRvJiB2YXJpYW50IDogc2l6ZVZhcmlhbnRzKSB7CiAgICAgICAgIEdseXBoRGF0YSBzaXpl
VmFyaWFudDsKICAgICAgICAgc2l6ZVZhcmlhbnQuZ2x5cGggPSB2YXJpYW50OwotICAgICAgICBz
aXplVmFyaWFudC5mb250RGF0YSA9ICZwcmltYXJ5Rm9udERhdGE7CisgICAgICAgIHNpemVWYXJp
YW50LmZvbnQgPSAmcHJpbWFyeUZvbnQ7CiAgICAgICAgIGRhdGEuc2V0U2l6ZVZhcmlhbnRNb2Rl
KHNpemVWYXJpYW50KTsKICAgICAgICAgaWYgKGJvdW5kc0ZvckdseXBoKHNpemVWYXJpYW50KS5o
ZWlnaHQoKSA+PSBkaXNwbGF5T3BlcmF0b3JNaW5IZWlnaHQpCiAgICAgICAgICAgICByZXR1cm4g
ZGF0YTsKQEAgLTE1NzAsMTggKzE1NzAsMTggQEAgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OlN0cmV0
Y2h5RGF0YSBSZW5kZQogICAgIFN0cmV0Y2h5RGF0YSBkYXRhOwogICAgIFN0cmV0Y2h5RGF0YSBh
c3NlbWJseURhdGE7CiAKLSAgICBjb25zdCBhdXRvJiBwcmltYXJ5Rm9udERhdGEgPSBzdHlsZSgp
LmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCk7CisgICAgY29uc3QgYXV0byYgcHJpbWFy
eUZvbnQgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKTsKICAgICBHbHlwaERh
dGEgYmFzZUdseXBoID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpLmdseXBoRGF0YUZvckNoYXJhY3Rl
cihjaGFyYWN0ZXIsICFzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSk7CiAgICAgCi0g
ICAgaWYgKHByaW1hcnlGb250RGF0YS5tYXRoRGF0YSgpICYmIGJhc2VHbHlwaC5mb250RGF0YSA9
PSAmcHJpbWFyeUZvbnREYXRhKSB7CisgICAgaWYgKHByaW1hcnlGb250Lm1hdGhEYXRhKCkgJiYg
YmFzZUdseXBoLmZvbnQgPT0gJnByaW1hcnlGb250KSB7CiAgICAgICAgIFZlY3RvcjxHbHlwaD4g
c2l6ZVZhcmlhbnRzOwogICAgICAgICBWZWN0b3I8T3BlblR5cGVNYXRoRGF0YTo6QXNzZW1ibHlQ
YXJ0PiBhc3NlbWJseVBhcnRzOwotICAgICAgICBwcmltYXJ5Rm9udERhdGEubWF0aERhdGEoKS0+
Z2V0TWF0aFZhcmlhbnRzKGJhc2VHbHlwaC5nbHlwaCwgbV9pc1ZlcnRpY2FsLCBzaXplVmFyaWFu
dHMsIGFzc2VtYmx5UGFydHMpOworICAgICAgICBwcmltYXJ5Rm9udC5tYXRoRGF0YSgpLT5nZXRN
YXRoVmFyaWFudHMoYmFzZUdseXBoLmdseXBoLCBtX2lzVmVydGljYWwsIHNpemVWYXJpYW50cywg
YXNzZW1ibHlQYXJ0cyk7CiAgICAgICAgIC8vIFdlIHZlcmlmeSB0aGUgc2l6ZSB2YXJpYW50cy4K
ICAgICAgICAgZm9yIChhdXRvJiB2YXJpYW50IDogc2l6ZVZhcmlhbnRzKSB7CiAgICAgICAgICAg
ICBHbHlwaERhdGEgc2l6ZVZhcmlhbnQ7CiAgICAgICAgICAgICBzaXplVmFyaWFudC5nbHlwaCA9
IHZhcmlhbnQ7Ci0gICAgICAgICAgICBzaXplVmFyaWFudC5mb250RGF0YSA9ICZwcmltYXJ5Rm9u
dERhdGE7CisgICAgICAgICAgICBzaXplVmFyaWFudC5mb250ID0gJnByaW1hcnlGb250OwogICAg
ICAgICAgICAgaWYgKG1heGltdW1HbHlwaFdpZHRoKQogICAgICAgICAgICAgICAgICptYXhpbXVt
R2x5cGhXaWR0aCA9IHN0ZDo6bWF4KCptYXhpbXVtR2x5cGhXaWR0aCwgYWR2YW5jZUZvckdseXBo
KHNpemVWYXJpYW50KSk7CiAgICAgICAgICAgICBlbHNlIHsKQEAgLTE4MDEsOCArMTgwMSw4IEBA
IExheW91dFJlY3QgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBhaW50R2wKICAgICBpbmZvLmNvbnRl
eHQtPmNsaXAoY2xpcEJvdW5kcyk7CiAKICAgICBHbHlwaEJ1ZmZlciBidWZmZXI7Ci0gICAgYnVm
ZmVyLmFkZChkYXRhLmdseXBoLCBkYXRhLmZvbnREYXRhLCBhZHZhbmNlRm9yR2x5cGgoZGF0YSkp
OwotICAgIGluZm8uY29udGV4dC0+ZHJhd0dseXBocyhzdHlsZSgpLmZvbnRDYXNjYWRlKCksICpk
YXRhLmZvbnREYXRhLCBidWZmZXIsIDAsIDEsIG9yaWdpbik7CisgICAgYnVmZmVyLmFkZChkYXRh
LmdseXBoLCBkYXRhLmZvbnQsIGFkdmFuY2VGb3JHbHlwaChkYXRhKSk7CisgICAgaW5mby5jb250
ZXh0LT5kcmF3R2x5cGhzKHN0eWxlKCkuZm9udENhc2NhZGUoKSwgKmRhdGEuZm9udCwgYnVmZmVy
LCAwLCAxLCBvcmlnaW4pOwogCiAgICAgcmV0dXJuIGdseXBoUGFpbnRSZWN0OwogfQpAQCAtMTg5
NCwxMSArMTg5NCwxMSBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpwYWludChQYWludElu
CiAgICAgaWYgKG1fc3RyZXRjaHlEYXRhLm1vZGUoKSA9PSBEcmF3U2l6ZVZhcmlhbnQpIHsKICAg
ICAgICAgQVNTRVJUKG1fc3RyZXRjaHlEYXRhLnZhcmlhbnQoKS5nbHlwaCk7CiAgICAgICAgIEds
eXBoQnVmZmVyIGJ1ZmZlcjsKLSAgICAgICAgYnVmZmVyLmFkZChtX3N0cmV0Y2h5RGF0YS52YXJp
YW50KCkuZ2x5cGgsIG1fc3RyZXRjaHlEYXRhLnZhcmlhbnQoKS5mb250RGF0YSwgYWR2YW5jZUZv
ckdseXBoKG1fc3RyZXRjaHlEYXRhLnZhcmlhbnQoKSkpOworICAgICAgICBidWZmZXIuYWRkKG1f
c3RyZXRjaHlEYXRhLnZhcmlhbnQoKS5nbHlwaCwgbV9zdHJldGNoeURhdGEudmFyaWFudCgpLmZv
bnQsIGFkdmFuY2VGb3JHbHlwaChtX3N0cmV0Y2h5RGF0YS52YXJpYW50KCkpKTsKICAgICAgICAg
TGF5b3V0UG9pbnQgb3BlcmF0b3JUb3BMZWZ0ID0gY2VpbGVkSW50UG9pbnQocGFpbnRPZmZzZXQg
KyBsb2NhdGlvbigpKTsKICAgICAgICAgRmxvYXRSZWN0IGdseXBoQm91bmRzID0gYm91bmRzRm9y
R2x5cGgobV9zdHJldGNoeURhdGEudmFyaWFudCgpKTsKICAgICAgICAgTGF5b3V0UG9pbnQgb3Bl
cmF0b3JPcmlnaW4ob3BlcmF0b3JUb3BMZWZ0LngoKSwgb3BlcmF0b3JUb3BMZWZ0LnkoKSAtIGds
eXBoQm91bmRzLnkoKSk7Ci0gICAgICAgIGluZm8uY29udGV4dC0+ZHJhd0dseXBocyhzdHlsZSgp
LmZvbnRDYXNjYWRlKCksICptX3N0cmV0Y2h5RGF0YS52YXJpYW50KCkuZm9udERhdGEsIGJ1ZmZl
ciwgMCwgMSwgb3BlcmF0b3JPcmlnaW4pOworICAgICAgICBpbmZvLmNvbnRleHQtPmRyYXdHbHlw
aHMoc3R5bGUoKS5mb250Q2FzY2FkZSgpLCAqbV9zdHJldGNoeURhdGEudmFyaWFudCgpLmZvbnQs
IGJ1ZmZlciwgMCwgMSwgb3BlcmF0b3JPcmlnaW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CkBAIC0xOTgwLDggKzE5ODAsOCBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpwYWludENo
aWxkcmVuCiAKIExheW91dFVuaXQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnRyYWlsaW5nU3BhY2VF
cnJvcigpCiB7Ci0gICAgY29uc3QgYXV0byYgcHJpbWFyeUZvbnREYXRhID0gc3R5bGUoKS5mb250
Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpOwotICAgIGlmICghcHJpbWFyeUZvbnREYXRhLm1h
dGhEYXRhKCkpCisgICAgY29uc3QgYXV0byYgcHJpbWFyeUZvbnQgPSBzdHlsZSgpLmZvbnRDYXNj
YWRlKCkucHJpbWFyeUZvbnQoKTsKKyAgICBpZiAoIXByaW1hcnlGb250Lm1hdGhEYXRhKCkpCiAg
ICAgICAgIHJldHVybiAwOwogCiAgICAgLy8gRm9yIE9wZW5UeXBlIE1BVEggZm9udCwgdGhlIGxh
eW91dCBpcyBiYXNlZCBvbiBSZW5kZXJNYXRoT3BlcmF0b3IgZm9yIHdoaWNoIHRoZSBwcmVmZXJy
ZWQgd2lkdGggaXMgc29tZXRpbWVzIG92ZXJlc3RpbWF0ZWQgKGJ1ZyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMwMzI2KS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmgJKHJldmlz
aW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0
aE1MT3BlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTEgKzI4LDExIEBACiAKICNpZiBF
TkFCTEUoTUFUSE1MKQogCisjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkdseXBoUGFnZS5o
IgogI2luY2x1ZGUgIk1hdGhNTEVsZW1lbnQuaCIKICNpbmNsdWRlICJPcGVuVHlwZU1hdGhEYXRh
LmgiCiAjaW5jbHVkZSAiUmVuZGVyTWF0aE1MVG9rZW4uaCIKLSNpbmNsdWRlICJTaW1wbGVGb250
RGF0YS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUmFkaWNhbE9wZXJhdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJhZGljYWxP
cGVyYXRvci5jcHAJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9tYXRobWwvUmVuZGVyTWF0aE1MUmFkaWNhbE9wZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjMsNyArNjMsNyBAQCBSZW5kZXJNYXRoTUxSYWRpY2FsT3BlcmF0b3I6OlJlbmRlck1hdGhN
CiAKIHZvaWQgUmVuZGVyTWF0aE1MUmFkaWNhbE9wZXJhdG9yOjpzdHJldGNoVG8oTGF5b3V0VW5p
dCBoZWlnaHRBYm92ZUJhc2VsaW5lLCBMYXlvdXRVbml0IGRlcHRoQmVsb3dCYXNlbGluZSkKIHsK
LSAgICBpZiAoIXN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5tYXRoRGF0
YSgpKSB7CisgICAgaWYgKCFzdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKS5tYXRo
RGF0YSgpKSB7CiAgICAgICAgIC8vIElmIHdlIGRvIG5vdCBoYXZlIGFuIE9wZW5UeXBlIE1BVEgg
Zm9udCwgd2UgYWx3YXlzIG1ha2UgdGhlIHJhZGljYWwgZGVwdGggYSBiaXQgbGFyZ2VyIHRoYW4g
dGhlIHRhcmdldC4KICAgICAgICAgZGVwdGhCZWxvd0Jhc2VsaW5lICs9IGdSYWRpY2FsQm90dG9t
UG9pbnRMb3dlcjsKICAgICB9CkBAIC04Myw3ICs4Myw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MUmFk
aWNhbE9wZXJhdG9yOjpjb21wdXQKIHsKICAgICBBU1NFUlQocHJlZmVycmVkTG9naWNhbFdpZHRo
c0RpcnR5KCkpOwogCi0gICAgaWYgKHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERh
dGEoKS5tYXRoRGF0YSgpKSB7CisgICAgaWYgKHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5
Rm9udCgpLm1hdGhEYXRhKCkpIHsKICAgICAgICAgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmNvbXB1
dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC05
Niw3ICs5Niw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MUmFkaWNhbE9wZXJhdG9yOjpjb21wdXQKIAog
dm9pZCBSZW5kZXJNYXRoTUxSYWRpY2FsT3BlcmF0b3I6OmNvbXB1dGVMb2dpY2FsSGVpZ2h0KExh
eW91dFVuaXQgbG9naWNhbEhlaWdodCwgTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMb2dpY2FsRXh0
ZW50Q29tcHV0ZWRWYWx1ZXMmIGNvbXB1dGVkVmFsdWVzKSBjb25zdAogewotICAgIGlmIChzdHls
ZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkubWF0aERhdGEoKSkgeworICAgIGlm
IChzdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKS5tYXRoRGF0YSgpKSB7CiAgICAg
ICAgIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpjb21wdXRlTG9naWNhbEhlaWdodChsb2dpY2FsSGVp
Z2h0LCBsb2dpY2FsVG9wLCBjb21wdXRlZFZhbHVlcyk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CkBAIC0xMTEsNyArMTExLDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxSYWRpY2FsT3BlcmF0b3I6OnBh
aW50KAogICAgIGlmIChpbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSB8fCBpbmZvLnBo
YXNlICE9IFBhaW50UGhhc2VGb3JlZ3JvdW5kIHx8IHN0eWxlKCkudmlzaWJpbGl0eSgpICE9IFZJ
U0lCTEUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChzdHlsZSgpLmZvbnRDYXNjYWRlKCku
cHJpbWFyeUZvbnREYXRhKCkubWF0aERhdGEoKSkgeworICAgIGlmIChzdHlsZSgpLmZvbnRDYXNj
YWRlKCkucHJpbWFyeUZvbnQoKS5tYXRoRGF0YSgpKSB7CiAgICAgICAgIFJlbmRlck1hdGhNTE9w
ZXJhdG9yOjpwYWludChpbmZvLCBwYWludE9mZnNldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvb3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVy
TWF0aE1MUm9vdC5jcHAJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwOCwx
NyArMjA4LDE3IEBAIHZvaWQgUmVuZGVyTWF0aE1MUm9vdDo6dXBkYXRlU3R5bGUoKQogICAgIExh
eW91dFVuaXQga2VybkFmdGVyRGVncmVlID0gLTEwICogc3R5bGUoKS5mb250Q2FzY2FkZSgpLnNp
emUoKSAvIDE4OwogICAgIG1fZGVncmVlQm90dG9tUmFpc2VQZXJjZW50ID0gMC42ZjsKIAotICAg
IGNvbnN0IGF1dG8mIHByaW1hcnlGb250RGF0YSA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmlt
YXJ5Rm9udERhdGEoKTsKLSAgICBpZiAoYXV0byogbWF0aERhdGEgPSBzdHlsZSgpLmZvbnRDYXNj
YWRlKCkucHJpbWFyeUZvbnREYXRhKCkubWF0aERhdGEoKSkgeworICAgIGNvbnN0IGF1dG8mIHBy
aW1hcnlGb250ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCk7CisgICAgaWYg
KGF1dG8qIG1hdGhEYXRhID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCkubWF0
aERhdGEoKSkgewogICAgICAgICAvLyBGSVhNRTogbV92ZXJ0aWNhbEdhcCBzaG91bGQgdXNlIFJh
ZGljYWxEaXNwbGF5U3R5bGVWZXJ0aWNhbCBpbiBkaXNwbGF5IG1vZGUgKGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTg3MzcpLgotICAgICAgICBtX3ZlcnRpY2FsR2Fw
ID0gbWF0aERhdGEtPmdldE1hdGhDb25zdGFudChwcmltYXJ5Rm9udERhdGEsIE9wZW5UeXBlTWF0
aERhdGE6OlJhZGljYWxWZXJ0aWNhbEdhcCk7Ci0gICAgICAgIG1fcnVsZVRoaWNrbmVzcyA9IG1h
dGhEYXRhLT5nZXRNYXRoQ29uc3RhbnQocHJpbWFyeUZvbnREYXRhLCBPcGVuVHlwZU1hdGhEYXRh
OjpSYWRpY2FsUnVsZVRoaWNrbmVzcyk7Ci0gICAgICAgIG1fZXh0cmFBc2NlbmRlciA9IG1hdGhE
YXRhLT5nZXRNYXRoQ29uc3RhbnQocHJpbWFyeUZvbnREYXRhLCBPcGVuVHlwZU1hdGhEYXRhOjpS
YWRpY2FsRXh0cmFBc2NlbmRlcik7CisgICAgICAgIG1fdmVydGljYWxHYXAgPSBtYXRoRGF0YS0+
Z2V0TWF0aENvbnN0YW50KHByaW1hcnlGb250LCBPcGVuVHlwZU1hdGhEYXRhOjpSYWRpY2FsVmVy
dGljYWxHYXApOworICAgICAgICBtX3J1bGVUaGlja25lc3MgPSBtYXRoRGF0YS0+Z2V0TWF0aENv
bnN0YW50KHByaW1hcnlGb250LCBPcGVuVHlwZU1hdGhEYXRhOjpSYWRpY2FsUnVsZVRoaWNrbmVz
cyk7CisgICAgICAgIG1fZXh0cmFBc2NlbmRlciA9IG1hdGhEYXRhLT5nZXRNYXRoQ29uc3RhbnQo
cHJpbWFyeUZvbnQsIE9wZW5UeXBlTWF0aERhdGE6OlJhZGljYWxFeHRyYUFzY2VuZGVyKTsKIAog
ICAgICAgICBpZiAoIWlzUmVuZGVyTWF0aE1MU3F1YXJlUm9vdCgpKSB7Ci0gICAgICAgICAgICBr
ZXJuQmVmb3JlRGVncmVlID0gbWF0aERhdGEtPmdldE1hdGhDb25zdGFudChwcmltYXJ5Rm9udERh
dGEsIE9wZW5UeXBlTWF0aERhdGE6OlJhZGljYWxLZXJuQmVmb3JlRGVncmVlKTsKLSAgICAgICAg
ICAgIGtlcm5BZnRlckRlZ3JlZSA9IG1hdGhEYXRhLT5nZXRNYXRoQ29uc3RhbnQocHJpbWFyeUZv
bnREYXRhLCBPcGVuVHlwZU1hdGhEYXRhOjpSYWRpY2FsS2VybkFmdGVyRGVncmVlKTsKLSAgICAg
ICAgICAgIG1fZGVncmVlQm90dG9tUmFpc2VQZXJjZW50ID0gbWF0aERhdGEtPmdldE1hdGhDb25z
dGFudChwcmltYXJ5Rm9udERhdGEsIE9wZW5UeXBlTWF0aERhdGE6OlJhZGljYWxEZWdyZWVCb3R0
b21SYWlzZVBlcmNlbnQpOworICAgICAgICAgICAga2VybkJlZm9yZURlZ3JlZSA9IG1hdGhEYXRh
LT5nZXRNYXRoQ29uc3RhbnQocHJpbWFyeUZvbnQsIE9wZW5UeXBlTWF0aERhdGE6OlJhZGljYWxL
ZXJuQmVmb3JlRGVncmVlKTsKKyAgICAgICAgICAgIGtlcm5BZnRlckRlZ3JlZSA9IG1hdGhEYXRh
LT5nZXRNYXRoQ29uc3RhbnQocHJpbWFyeUZvbnQsIE9wZW5UeXBlTWF0aERhdGE6OlJhZGljYWxL
ZXJuQWZ0ZXJEZWdyZWUpOworICAgICAgICAgICAgbV9kZWdyZWVCb3R0b21SYWlzZVBlcmNlbnQg
PSBtYXRoRGF0YS0+Z2V0TWF0aENvbnN0YW50KHByaW1hcnlGb250LCBPcGVuVHlwZU1hdGhEYXRh
OjpSYWRpY2FsRGVncmVlQm90dG9tUmFpc2VQZXJjZW50KTsKICAgICAgICAgfQogICAgIH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3Bw
CShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVu
ZGVyU3R5bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTg0LDcgKzExODQsNyBAQCBjb25zdCBB
dG9taWNTdHJpbmcmIFJlbmRlclN0eWxlOjpoeXBoZW5TCiAgICAgLy8gRklYTUU6IFRoaXMgc2hv
dWxkIGRlcGVuZCBvbiBsb2NhbGUuCiAgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FM
KEF0b21pY1N0cmluZywgaHlwaGVuTWludXNTdHJpbmcsICgmaHlwaGVuTWludXMsIDEpKTsKICAg
ICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBoeXBoZW5TdHJp
bmcsICgmaHlwaGVuLCAxKSk7Ci0gICAgcmV0dXJuIGZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnRE
YXRhKCkuZ2x5cGhGb3JDaGFyYWN0ZXIoaHlwaGVuKSA/IGh5cGhlblN0cmluZyA6IGh5cGhlbk1p
bnVzU3RyaW5nOworICAgIHJldHVybiBmb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCkuZ2x5cGhG
b3JDaGFyYWN0ZXIoaHlwaGVuKSA/IGh5cGhlblN0cmluZyA6IGh5cGhlbk1pbnVzU3RyaW5nOwog
fQogCiBjb25zdCBBdG9taWNTdHJpbmcmIFJlbmRlclN0eWxlOjp0ZXh0RW1waGFzaXNNYXJrU3Ry
aW5nKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
VGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdUZXh0LmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBA
QAogI2luY2x1ZGUgIlJlbmRlclNWR1RleHQuaCIKIAogI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgor
I2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRl
ICJIaXRUZXN0UmVxdWVzdC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKQEAgLTQ1LDcg
KzQ2LDYgQEAKICNpbmNsdWRlICJTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5oIgogI2luY2x1
ZGUgIlNWR1RyYW5zZm9ybUxpc3QuaCIKICNpbmNsdWRlICJTVkdVUklSZWZlcmVuY2UuaCIKLSNp
bmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybVN0YXRlLmgiCiAj
aW5jbHVkZSAiVmlzaWJsZVBvc2l0aW9uLmgiCiAjaW5jbHVkZSA8d3RmL1N0YWNrU3RhdHMuaD4K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0
Qm94LmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDE5LDcgKzQxOSw3IEBA
IFRleHRSdW4gU1ZHSW5saW5lVGV4dEJveDo6Y29uc3RydWN0VGV4dFIKICAgICAgICAgICAgICAg
ICAsIGRpcmVjdGlvbigpCiAgICAgICAgICAgICAgICAgLCBkaXJPdmVycmlkZSgpIHx8IHN0eWxl
LT5ydGxPcmRlcmluZygpID09IFZpc3VhbE9yZGVyIC8qIGRpcmVjdGlvbmFsT3ZlcnJpZGUgKi8p
OwogCi0gICAgaWYgKHN0eWxlLT5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmlzU1ZH
Rm9udCgpKQorICAgIGlmIChzdHlsZS0+Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpLmlzU1ZH
Rm9udCgpKQogICAgICAgICBydW4uc2V0UmVuZGVyaW5nQ29udGV4dChTVkdUZXh0UnVuUmVuZGVy
aW5nQ29udGV4dDo6Y3JlYXRlKHJlbmRlcmVyKCkpKTsKIAogICAgIHJ1bi5kaXNhYmxlUm91bmRp
bmdIYWNrcygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5
b3V0RW5naW5lU3BhY2luZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZy5jcHAJKHJldmlzaW9uIDE3ODg1NykK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZVNwYWNp
bmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxNiArNDEsMTYgQEAgU1ZHVGV4dExheW91dEVu
Z2luZVNwYWNpbmc6OlNWR1RleHRMYXlvdQogZmxvYXQgU1ZHVGV4dExheW91dEVuZ2luZVNwYWNp
bmc6OmNhbGN1bGF0ZVNWR0tlcm5pbmcoYm9vbCBpc1ZlcnRpY2FsVGV4dCwgY29uc3QgU1ZHVGV4
dE1ldHJpY3M6OkdseXBoJiBjdXJyZW50R2x5cGgpCiB7CiAjaWYgRU5BQkxFKFNWR19GT05UUykK
LSAgICBjb25zdCBTaW1wbGVGb250RGF0YSYgZm9udERhdGEgPSBtX2ZvbnQucHJpbWFyeUZvbnRE
YXRhKCk7Ci0gICAgaWYgKCFmb250RGF0YS5pc1NWR0ZvbnQoKSkgeworICAgIGNvbnN0IEZvbnQm
IGZvbnQgPSBtX2ZvbnQucHJpbWFyeUZvbnQoKTsKKyAgICBpZiAoIWZvbnQuaXNTVkdGb250KCkp
IHsKICAgICAgICAgbV9sYXN0R2x5cGguaXNWYWxpZCA9IGZhbHNlOwogICAgICAgICByZXR1cm4g
MDsKICAgICB9CiAKLSAgICBBU1NFUlQoZm9udERhdGEuaXNDdXN0b21Gb250KCkpOwotICAgIEFT
U0VSVChmb250RGF0YS5pc1NWR0ZvbnQoKSk7CisgICAgQVNTRVJUKGZvbnQuaXNDdXN0b21Gb250
KCkpOworICAgIEFTU0VSVChmb250LmlzU1ZHRm9udCgpKTsKIAotICAgIGF1dG8qIHN2Z0ZvbnRE
YXRhID0gc3RhdGljX2Nhc3Q8Y29uc3QgU1ZHRm9udERhdGEqPihmb250RGF0YS5zdmdEYXRhKCkp
OworICAgIGF1dG8qIHN2Z0ZvbnREYXRhID0gc3RhdGljX2Nhc3Q8Y29uc3QgU1ZHRm9udERhdGEq
Pihmb250LnN2Z0RhdGEoKSk7CiAgICAgU1ZHRm9udEZhY2VFbGVtZW50KiBzdmdGb250RmFjZSA9
IHN2Z0ZvbnREYXRhLT5zdmdGb250RmFjZUVsZW1lbnQoKTsKICAgICBBU1NFUlQoc3ZnRm9udEZh
Y2UpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRN
ZXRyaWNzLmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdUZXh0TWV0cmljcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwLDcgKzcwLDcgQEAg
VGV4dFJ1biBTVkdUZXh0TWV0cmljczo6Y29uc3RydWN0VGV4dFJ1bgogICAgICAgICAgICAgICAg
ICwgc3R5bGUuZGlyZWN0aW9uKCkKICAgICAgICAgICAgICAgICAsIGlzT3ZlcnJpZGUoc3R5bGUu
dW5pY29kZUJpZGkoKSkgLyogZGlyZWN0aW9uYWxPdmVycmlkZSAqLyk7CiAKLSAgICBpZiAoc3R5
bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5pc1NWR0ZvbnQoKSkKKyAgICBpZiAo
c3R5bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpLmlzU1ZHRm9udCgpKQogICAgICAgICBy
dW4uc2V0UmVuZGVyaW5nQ29udGV4dChTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRl
KHRleHQpKTsKIAogICAgIHJ1bi5kaXNhYmxlUm91bmRpbmdIYWNrcygpOwpAQCAtOTEsNyArOTEs
NyBAQCBTVkdUZXh0TWV0cmljcyBTVkdUZXh0TWV0cmljczo6bWVhc3VyZUNoCiAKIFNWR1RleHRN
ZXRyaWNzOjpTVkdUZXh0TWV0cmljcyhSZW5kZXJTVkdJbmxpbmVUZXh0JiB0ZXh0LCB1bnNpZ25l
ZCBwb3NpdGlvbiwgdW5zaWduZWQgbGVuZ3RoLCBmbG9hdCB3aWR0aCwgY29uc3QgU3RyaW5nJiBn
bHlwaE5hbWUpCiB7Ci0gICAgYm9vbCBuZWVkc0NvbnRleHQgPSB0ZXh0LnN0eWxlKCkuZm9udENh
c2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5pc1NWR0ZvbnQoKTsKKyAgICBib29sIG5lZWRzQ29u
dGV4dCA9IHRleHQuc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCkuaXNTVkdGb250
KCk7CiAgICAgZmxvYXQgc2NhbGluZ0ZhY3RvciA9IHRleHQuc2NhbGluZ0ZhY3RvcigpOwogICAg
IEFTU0VSVChzY2FsaW5nRmFjdG9yKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJl
dmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1
blJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxOCArMzcsMTggQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgaW5saW5lIGNvbnN0IFNWR0ZvbnREYXRh
KiBzdmdGb250QW5kRm9udEZhY2VFbGVtZW50Rm9yRm9udERhdGEoY29uc3QgU2ltcGxlRm9udERh
dGEqIGZvbnREYXRhLCBTVkdGb250RmFjZUVsZW1lbnQqJiBmb250RmFjZSwgU1ZHRm9udEVsZW1l
bnQqJiBmb250KQorc3RhdGljIGlubGluZSBjb25zdCBTVkdGb250RGF0YSogc3ZnRm9udEFuZEZv
bnRGYWNlRWxlbWVudEZvckZvbnREYXRhKGNvbnN0IEZvbnQqIGZvbnQsIFNWR0ZvbnRGYWNlRWxl
bWVudComIHN2Z0ZvbnRGYWNlRWxlbWVudCwgU1ZHRm9udEVsZW1lbnQqJiBzdmdGb250RWxlbWVu
dCkKIHsKLSAgICBBU1NFUlQoZm9udERhdGEpOwotICAgIEFTU0VSVChmb250RGF0YS0+aXNDdXN0
b21Gb250KCkpOwotICAgIEFTU0VSVChmb250RGF0YS0+aXNTVkdGb250KCkpOworICAgIEFTU0VS
VChmb250KTsKKyAgICBBU1NFUlQoZm9udC0+aXNDdXN0b21Gb250KCkpOworICAgIEFTU0VSVChm
b250LT5pc1NWR0ZvbnQoKSk7CiAKLSAgICBhdXRvKiBzdmdGb250RGF0YSA9IHN0YXRpY19jYXN0
PGNvbnN0IFNWR0ZvbnREYXRhKj4oZm9udERhdGEtPnN2Z0RhdGEoKSk7CisgICAgYXV0byogc3Zn
Rm9udERhdGEgPSBzdGF0aWNfY2FzdDxjb25zdCBTVkdGb250RGF0YSo+KGZvbnQtPnN2Z0RhdGEo
KSk7CiAKLSAgICBmb250RmFjZSA9IHN2Z0ZvbnREYXRhLT5zdmdGb250RmFjZUVsZW1lbnQoKTsK
LSAgICBBU1NFUlQoZm9udEZhY2UpOworICAgIHN2Z0ZvbnRGYWNlRWxlbWVudCA9IHN2Z0ZvbnRE
YXRhLT5zdmdGb250RmFjZUVsZW1lbnQoKTsKKyAgICBBU1NFUlQoc3ZnRm9udEZhY2VFbGVtZW50
KTsKIAotICAgIGZvbnQgPSBmb250RmFjZS0+YXNzb2NpYXRlZEZvbnRFbGVtZW50KCk7CisgICAg
c3ZnRm9udEVsZW1lbnQgPSBzdmdGb250RmFjZUVsZW1lbnQtPmFzc29jaWF0ZWRGb250RWxlbWVu
dCgpOwogICAgIHJldHVybiBzdmdGb250RGF0YTsKIH0KIApAQCAtNjEsMjEgKzYxLDIxIEBAIGZs
b2F0IFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0OjpmbG9hdFcKICAgICByZXR1cm4gaXQucnVu
V2lkdGhTb0ZhcigpOwogfQogCi1ib29sIFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0OjphcHBs
eVNWR0tlcm5pbmcoY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhLCBXaWR0aEl0ZXJhdG9y
JiBpdGVyYXRvciwgR2x5cGhCdWZmZXIqIGdseXBoQnVmZmVyLCBpbnQgZnJvbSkgY29uc3QKK2Jv
b2wgU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmFwcGx5U1ZHS2VybmluZyhjb25zdCBGb250
KiBmb250LCBXaWR0aEl0ZXJhdG9yJiBpdGVyYXRvciwgR2x5cGhCdWZmZXIqIGdseXBoQnVmZmVy
LCBpbnQgZnJvbSkgY29uc3QKIHsKICAgICBBU1NFUlQoZ2x5cGhCdWZmZXIpOwogICAgIEFTU0VS
VChnbHlwaEJ1ZmZlci0+c2l6ZSgpID4gMSk7CiAgICAgU1ZHRm9udEVsZW1lbnQqIGZvbnRFbGVt
ZW50ID0gMDsKICAgICBTVkdGb250RmFjZUVsZW1lbnQqIGZvbnRGYWNlRWxlbWVudCA9IDA7CiAK
LSAgICBzdmdGb250QW5kRm9udEZhY2VFbGVtZW50Rm9yRm9udERhdGEoZm9udERhdGEsIGZvbnRG
YWNlRWxlbWVudCwgZm9udEVsZW1lbnQpOworICAgIHN2Z0ZvbnRBbmRGb250RmFjZUVsZW1lbnRG
b3JGb250RGF0YShmb250LCBmb250RmFjZUVsZW1lbnQsIGZvbnRFbGVtZW50KTsKICAgICBpZiAo
IWZvbnRFbGVtZW50IHx8ICFmb250RmFjZUVsZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIGlmIChmb250RWxlbWVudC0+aG9yaXpvbnRhbEtlcm5pbmdNYXBJc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgZmxvYXQgc2NhbGUgPSBzY2FsZUVtVG9Vbml0cyhm
b250RGF0YS0+cGxhdGZvcm1EYXRhKCkuc2l6ZSgpLCBmb250RmFjZUVsZW1lbnQtPnVuaXRzUGVy
RW0oKSk7CisgICAgZmxvYXQgc2NhbGUgPSBzY2FsZUVtVG9Vbml0cyhmb250LT5wbGF0Zm9ybURh
dGEoKS5zaXplKCksIGZvbnRGYWNlRWxlbWVudC0+dW5pdHNQZXJFbSgpKTsKIAogICAgIFN0cmlu
ZyBsYXN0R2x5cGhOYW1lOwogICAgIFN0cmluZyBsYXN0VW5pY29kZVN0cmluZzsKQEAgLTIwNSw3
ICsyMDUsNyBAQCB2b2lkIFNWR0dseXBoVG9QYXRoVHJhbnNsYXRvcjo6YWR2YW5jZSgpCiAgICAg
ICAgIH0KIAogICAgICAgICArK21faW5kZXg7Ci0gICAgICAgIGlmIChtX2luZGV4ID49IG1fc3Rv
cHBpbmdQb2ludCB8fCAhbV9nbHlwaEJ1ZmZlci5mb250RGF0YUF0KG1faW5kZXgpLT5pc1NWR0Zv
bnQoKSkKKyAgICAgICAgaWYgKG1faW5kZXggPj0gbV9zdG9wcGluZ1BvaW50IHx8ICFtX2dseXBo
QnVmZmVyLmZvbnRBdChtX2luZGV4KS0+aXNTVkdGb250KCkpCiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgbV9nbHlwaCA9IG1fZ2x5cGhCdWZmZXIuZ2x5cGhBdChtX2luZGV4KTsKICAgICAg
ICAgaWYgKCFtX2dseXBoKQpAQCAtMjQ0LDEyICsyNDQsMTIgQEAgY2xhc3MgRHVtbXlHbHlwaFRv
UGF0aFRyYW5zbGF0b3IgZmluYWwgOgogICAgIH0KIH07CiAKLXN0ZDo6dW5pcXVlX3B0cjxHbHlw
aFRvUGF0aFRyYW5zbGF0b3I+IFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVHbHlw
aFRvUGF0aFRyYW5zbGF0b3IoY29uc3QgU2ltcGxlRm9udERhdGEmIGZvbnREYXRhLCBjb25zdCBU
ZXh0UnVuKiB0ZXh0UnVuLCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGludCBmcm9t
LCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKK3N0ZDo6dW5p
cXVlX3B0cjxHbHlwaFRvUGF0aFRyYW5zbGF0b3I+IFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0
OjpjcmVhdGVHbHlwaFRvUGF0aFRyYW5zbGF0b3IoY29uc3QgRm9udCYgZm9udCwgY29uc3QgVGV4
dFJ1biogdGV4dFJ1biwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBpbnQgZnJvbSwg
aW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0CiB7CiAgICAgU1ZH
Rm9udEVsZW1lbnQqIGZvbnRFbGVtZW50ID0gbnVsbHB0cjsKICAgICBTVkdGb250RmFjZUVsZW1l
bnQqIGZvbnRGYWNlRWxlbWVudCA9IG51bGxwdHI7CiAKLSAgICBjb25zdCBTVkdGb250RGF0YSog
c3ZnRm9udERhdGEgPSBzdmdGb250QW5kRm9udEZhY2VFbGVtZW50Rm9yRm9udERhdGEoJmZvbnRE
YXRhLCBmb250RmFjZUVsZW1lbnQsIGZvbnRFbGVtZW50KTsKKyAgICBjb25zdCBTVkdGb250RGF0
YSogc3ZnRm9udERhdGEgPSBzdmdGb250QW5kRm9udEZhY2VFbGVtZW50Rm9yRm9udERhdGEoJmZv
bnQsIGZvbnRGYWNlRWxlbWVudCwgZm9udEVsZW1lbnQpOwogICAgIGlmICghZm9udEVsZW1lbnQg
fHwgIWZvbnRGYWNlRWxlbWVudCkKICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8RHVt
bXlHbHlwaFRvUGF0aFRyYW5zbGF0b3I+KCk7CiAKQEAgLTI1NywxMiArMjU3LDEyIEBAIHN0ZDo6
dW5pcXVlX3B0cjxHbHlwaFRvUGF0aFRyYW5zbGF0b3I+IFMKICAgICBSZW5kZXJTdHlsZSYgc3R5
bGUgPSBlbGVtZW50UmVuZGVyZXIuc3R5bGUoKTsKICAgICBib29sIGlzVmVydGljYWxUZXh0ID0g
c3R5bGUuc3ZnU3R5bGUoKS5pc1ZlcnRpY2FsV3JpdGluZ01vZGUoKTsKIAotICAgIGZsb2F0IHNj
YWxlID0gc2NhbGVFbVRvVW5pdHMoZm9udERhdGEucGxhdGZvcm1EYXRhKCkuc2l6ZSgpLCBmb250
RmFjZUVsZW1lbnQtPnVuaXRzUGVyRW0oKSk7CisgICAgZmxvYXQgc2NhbGUgPSBzY2FsZUVtVG9V
bml0cyhmb250LnBsYXRmb3JtRGF0YSgpLnNpemUoKSwgZm9udEZhY2VFbGVtZW50LT51bml0c1Bl
ckVtKCkpOwogCiAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8U1ZHR2x5cGhUb1BhdGhUcmFu
c2xhdG9yPih0ZXh0UnVuLCBnbHlwaEJ1ZmZlciwgcG9pbnQsICpzdmdGb250RGF0YSwgKmZvbnRF
bGVtZW50LCBmcm9tLCBudW1HbHlwaHMsIHNjYWxlLCBpc1ZlcnRpY2FsVGV4dCk7CiB9CiAKLXZv
aWQgU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmRyYXdTVkdHbHlwaHMoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsIGNvbnN0IEdseXBo
QnVmZmVyJiBnbHlwaEJ1ZmZlciwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50KSBjb25zdAordm9pZCBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6ZHJh
d1NWR0dseXBocyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZvbnQqIGZvbnQsIGNv
bnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAogewogICAgIGF1dG8gYWN0aXZlUGFpbnRpbmdS
ZXNvdXJjZSA9IHRoaXMtPmFjdGl2ZVBhaW50aW5nUmVzb3VyY2UoKTsKICAgICBpZiAoIWFjdGl2
ZVBhaW50aW5nUmVzb3VyY2UpIHsKQEAgLTI3OCw3ICsyNzgsNyBAQCB2b2lkIFNWR1RleHRSdW5S
ZW5kZXJpbmdDb250ZXh0OjpkcmF3U1ZHCiAgICAgQVNTRVJUKGFjdGl2ZVBhaW50aW5nUmVzb3Vy
Y2UpOwogCiAgICAgUmVuZGVyU1ZHUmVzb3VyY2VNb2RlIHJlc291cmNlTW9kZSA9IGNvbnRleHQt
PnRleHREcmF3aW5nTW9kZSgpID09IFRleHRNb2RlU3Ryb2tlID8gQXBwbHlUb1N0cm9rZU1vZGUg
OiBBcHBseVRvRmlsbE1vZGU7Ci0gICAgZm9yIChhdXRvIHRyYW5zbGF0b3IgPSBjcmVhdGVHbHlw
aFRvUGF0aFRyYW5zbGF0b3IoKmZvbnREYXRhLCBudWxscHRyLCBnbHlwaEJ1ZmZlciwgZnJvbSwg
bnVtR2x5cGhzLCBwb2ludCk7IHRyYW5zbGF0b3ItPmNvbnRhaW5zTW9yZVBhdGhzKCk7IHRyYW5z
bGF0b3ItPmFkdmFuY2UoKSkgeworICAgIGZvciAoYXV0byB0cmFuc2xhdG9yID0gY3JlYXRlR2x5
cGhUb1BhdGhUcmFuc2xhdG9yKCpmb250LCBudWxscHRyLCBnbHlwaEJ1ZmZlciwgZnJvbSwgbnVt
R2x5cGhzLCBwb2ludCk7IHRyYW5zbGF0b3ItPmNvbnRhaW5zTW9yZVBhdGhzKCk7IHRyYW5zbGF0
b3ItPmFkdmFuY2UoKSkgewogICAgICAgICBQYXRoIGdseXBoUGF0aCA9IHRyYW5zbGF0b3ItPnBh
dGgoKTsKICAgICAgICAgaWYgKGFjdGl2ZVBhaW50aW5nUmVzb3VyY2UtPmFwcGx5UmVzb3VyY2Uo
ZWxlbWVudFJlbmRlcmVyLCBzdHlsZSwgY29udGV4dCwgcmVzb3VyY2VNb2RlKSkgewogICAgICAg
ICAgICAgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzID0gY29udGV4dC0+c3Ryb2tlVGhpY2tuZXNzKCk7
CkBAIC0yOTIsMTMgKzI5MiwxMyBAQCB2b2lkIFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0Ojpk
cmF3U1ZHCiAKIHN0YXRpYyBHbHlwaERhdGEgbWlzc2luZ0dseXBoRm9yRm9udChjb25zdCBGb250
Q2FzY2FkZSYgZm9udCkKIHsKLSAgICBjb25zdCBTaW1wbGVGb250RGF0YSYgcHJpbWFyeUZvbnRE
YXRhID0gZm9udC5wcmltYXJ5Rm9udERhdGEoKTsKLSAgICBpZiAoIXByaW1hcnlGb250RGF0YS5p
c1NWR0ZvbnQoKSkKKyAgICBjb25zdCBGb250JiBwcmltYXJ5Rm9udCA9IGZvbnQucHJpbWFyeUZv
bnQoKTsKKyAgICBpZiAoIXByaW1hcnlGb250LmlzU1ZHRm9udCgpKQogICAgICAgICByZXR1cm4g
R2x5cGhEYXRhKCk7CiAgICAgU1ZHRm9udEVsZW1lbnQqIGZvbnRFbGVtZW50OwogICAgIFNWR0Zv
bnRGYWNlRWxlbWVudCogZm9udEZhY2VFbGVtZW50OwotICAgIHN2Z0ZvbnRBbmRGb250RmFjZUVs
ZW1lbnRGb3JGb250RGF0YSgmcHJpbWFyeUZvbnREYXRhLCBmb250RmFjZUVsZW1lbnQsIGZvbnRF
bGVtZW50KTsKLSAgICByZXR1cm4gR2x5cGhEYXRhKGZvbnRFbGVtZW50LT5taXNzaW5nR2x5cGgo
KSwgJnByaW1hcnlGb250RGF0YSk7CisgICAgc3ZnRm9udEFuZEZvbnRGYWNlRWxlbWVudEZvckZv
bnREYXRhKCZwcmltYXJ5Rm9udCwgZm9udEZhY2VFbGVtZW50LCBmb250RWxlbWVudCk7CisgICAg
cmV0dXJuIEdseXBoRGF0YShmb250RWxlbWVudC0+bWlzc2luZ0dseXBoKCksICZwcmltYXJ5Rm9u
dCk7CiB9CiAKIEdseXBoRGF0YSBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6Z2x5cGhEYXRh
Rm9yQ2hhcmFjdGVyKGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBXaWR0aEl0ZXJhdG9yJiBpdGVy
YXRvciwgVUNoYXIzMiBjaGFyYWN0ZXIsIGJvb2wgbWlycm9yLCBpbnQgY3VycmVudENoYXJhY3Rl
ciwgdW5zaWduZWQmIGFkdmFuY2VMZW5ndGgsIFN0cmluZyYgbm9ybWFsaXplZFNwYWNlc1N0cmlu
Z0NhY2hlKQpAQCAtMzA3LDIzICszMDcsMjMgQEAgR2x5cGhEYXRhIFNWR1RleHRSdW5SZW5kZXJp
bmdDb250ZXh0OjpnbAogICAgIGlmICghZ2x5cGhEYXRhLmdseXBoKQogICAgICAgICByZXR1cm4g
bWlzc2luZ0dseXBoRm9yRm9udChmb250KTsKIAotICAgIEFTU0VSVChnbHlwaERhdGEuZm9udERh
dGEpOworICAgIEFTU0VSVChnbHlwaERhdGEuZm9udCk7CiAKICAgICAvLyBDaGFyYWN0ZXJzIGVu
Y2xvc2VkIGJ5IGFuIDxhbHRHbHlwaD4gZWxlbWVudCwgbWF5IG5vdCBiZSByZWdpc3RlcmVkIGlu
IHRoZSBHbHlwaFBhZ2UuCi0gICAgaWYgKCFnbHlwaERhdGEuZm9udERhdGEtPmlzU1ZHRm9udCgp
KSB7CisgICAgaWYgKCFnbHlwaERhdGEuZm9udC0+aXNTVkdGb250KCkpIHsKICAgICAgICAgYXV0
byYgZWxlbWVudFJlbmRlcmVyID0gaXM8UmVuZGVyRWxlbWVudD4ocmVuZGVyZXIoKSkgPyBkb3du
Y2FzdDxSZW5kZXJFbGVtZW50PihyZW5kZXJlcigpKSA6ICpyZW5kZXJlcigpLnBhcmVudCgpOwog
ICAgICAgICBpZiAoRWxlbWVudCogcGFyZW50UmVuZGVyZXJFbGVtZW50ID0gZWxlbWVudFJlbmRl
cmVyLmVsZW1lbnQoKSkgewogICAgICAgICAgICAgaWYgKGlzPFNWR0FsdEdseXBoRWxlbWVudD4o
KnBhcmVudFJlbmRlcmVyRWxlbWVudCkpCi0gICAgICAgICAgICAgICAgZ2x5cGhEYXRhLmZvbnRE
YXRhID0gJmZvbnQucHJpbWFyeUZvbnREYXRhKCk7CisgICAgICAgICAgICAgICAgZ2x5cGhEYXRh
LmZvbnQgPSAmZm9udC5wcmltYXJ5Rm9udCgpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYg
KCFnbHlwaERhdGEuZm9udERhdGEtPmlzU1ZHRm9udCgpKQorICAgIGlmICghZ2x5cGhEYXRhLmZv
bnQtPmlzU1ZHRm9udCgpKQogICAgICAgICByZXR1cm4gZ2x5cGhEYXRhOwogCiAgICAgU1ZHRm9u
dEVsZW1lbnQqIGZvbnRFbGVtZW50ID0gbnVsbHB0cjsKICAgICBTVkdGb250RmFjZUVsZW1lbnQq
IGZvbnRGYWNlRWxlbWVudCA9IG51bGxwdHI7Ci0gICAgY29uc3QgU1ZHRm9udERhdGEqIHN2Z0Zv
bnREYXRhID0gc3ZnRm9udEFuZEZvbnRGYWNlRWxlbWVudEZvckZvbnREYXRhKGdseXBoRGF0YS5m
b250RGF0YSwgZm9udEZhY2VFbGVtZW50LCBmb250RWxlbWVudCk7CisgICAgY29uc3QgU1ZHRm9u
dERhdGEqIHN2Z0ZvbnREYXRhID0gc3ZnRm9udEFuZEZvbnRGYWNlRWxlbWVudEZvckZvbnREYXRh
KGdseXBoRGF0YS5mb250LCBmb250RmFjZUVsZW1lbnQsIGZvbnRFbGVtZW50KTsKICAgICBpZiAo
IXN2Z0ZvbnREYXRhKQogICAgICAgICByZXR1cm4gZ2x5cGhEYXRhOwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5n
Q29udGV4dC5oCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDkg
KzQzLDkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0QWN0aXZlUGFpbnRpbmdSZXNvdXJjZShSZW5k
ZXJTVkdSZXNvdXJjZSogb2JqZWN0KSB7IG1fYWN0aXZlUGFpbnRpbmdSZXNvdXJjZSA9IG9iamVj
dDsgfQogCiAgICAgdmlydHVhbCBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNvbnN0
IEZvbnRDYXNjYWRlJiwgV2lkdGhJdGVyYXRvciYsIFVDaGFyMzIgY2hhcmFjdGVyLCBib29sIG1p
cnJvciwgaW50IGN1cnJlbnRDaGFyYWN0ZXIsIHVuc2lnbmVkJiBhZHZhbmNlTGVuZ3RoLCBTdHJp
bmcmIG5vcm1hbGl6ZWRTcGFjZXNTdHJpbmdDYWNoZSkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2
b2lkIGRyYXdTVkdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgU2ltcGxlRm9udERhdGEq
LCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBmcm9tLCBpbnQgdG8sIGNvbnN0IEZsb2F0UG9pbnQm
KSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1NWR0dseXBocyhHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBGb250KiwgY29uc3QgR2x5cGhCdWZmZXImLCBpbnQgZnJvbSwgaW50
IHRvLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBmbG9h
dCBmbG9hdFdpZHRoVXNpbmdTVkdGb250KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1
biYsIGludCYgY2hhcnNDb25zdW1lZCwgU3RyaW5nJiBnbHlwaE5hbWUpIGNvbnN0IG92ZXJyaWRl
OwotICAgIHZpcnR1YWwgYm9vbCBhcHBseVNWR0tlcm5pbmcoY29uc3QgU2ltcGxlRm9udERhdGEq
LCBXaWR0aEl0ZXJhdG9yJiwgR2x5cGhCdWZmZXIqLCBpbnQgZnJvbSkgY29uc3Qgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCBib29sIGFwcGx5U1ZHS2VybmluZyhjb25zdCBGb250KiwgV2lkdGhJdGVy
YXRvciYsIEdseXBoQnVmZmVyKiwgaW50IGZyb20pIGNvbnN0IG92ZXJyaWRlOwogI2VuZGlmCiAK
IHByaXZhdGU6CkBAIC02MCw3ICs2MCw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB+U1ZHVGV4
dFJ1blJlbmRlcmluZ0NvbnRleHQoKSB7IH0KIAogI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0gICAg
dmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8R2x5cGhUb1BhdGhUcmFuc2xhdG9yPiBjcmVhdGVHbHlw
aFRvUGF0aFRyYW5zbGF0b3IoY29uc3QgU2ltcGxlRm9udERhdGEmLCBjb25zdCBUZXh0UnVuKiwg
Y29uc3QgR2x5cGhCdWZmZXImLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQ
b2ludCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPEdseXBo
VG9QYXRoVHJhbnNsYXRvcj4gY3JlYXRlR2x5cGhUb1BhdGhUcmFuc2xhdG9yKGNvbnN0IEZvbnQm
LCBjb25zdCBUZXh0UnVuKiwgY29uc3QgR2x5cGhCdWZmZXImLCBpbnQgZnJvbSwgaW50IG51bUds
eXBocywgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0IG92ZXJyaWRlOwogI2VuZGlmCiAKICAgICBS
ZW5kZXJPYmplY3QmIG1fcmVuZGVyZXI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9u
dERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RGF0YS5j
cHAJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RGF0YS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDE1ICs1NywxNSBAQCBTVkdGb250RGF0YTo6U1ZHRm9u
dERhdGEoU1ZHRm9udEZhY2VFbGVtCiAgICAgQVNTRVJUX0FSRyhmb250RmFjZUVsZW1lbnQsIGZv
bnRGYWNlRWxlbWVudCk7CiB9CiAKLXZvaWQgU1ZHRm9udERhdGE6OmluaXRpYWxpemVGb250RGF0
YShTaW1wbGVGb250RGF0YSogZm9udERhdGEsIGZsb2F0IGZvbnRTaXplKQordm9pZCBTVkdGb250
RGF0YTo6aW5pdGlhbGl6ZUZvbnQoRm9udCogZm9udCwgZmxvYXQgZm9udFNpemUpCiB7Ci0gICAg
QVNTRVJUKGZvbnREYXRhKTsKKyAgICBBU1NFUlQoZm9udCk7CiAKICAgICBTVkdGb250RmFjZUVs
ZW1lbnQqIHN2Z0ZvbnRGYWNlRWxlbWVudCA9IHRoaXMtPnN2Z0ZvbnRGYWNlRWxlbWVudCgpOwog
ICAgIEFTU0VSVChzdmdGb250RmFjZUVsZW1lbnQpOwogCi0gICAgZm9udERhdGEtPnNldFplcm9X
aWR0aFNwYWNlR2x5cGgoMCk7Ci0gICAgZm9udERhdGEtPmRldGVybWluZVBpdGNoKCk7CisgICAg
Zm9udC0+c2V0WmVyb1dpZHRoU3BhY2VHbHlwaCgwKTsKKyAgICBmb250LT5kZXRlcm1pbmVQaXRj
aCgpOwogCiAgICAgdW5zaWduZWQgdW5pdHNQZXJFbSA9IHN2Z0ZvbnRGYWNlRWxlbWVudC0+dW5p
dHNQZXJFbSgpOwogICAgIGZsb2F0IHNjYWxlID0gc2NhbGVFbVRvVW5pdHMoZm9udFNpemUsIHVu
aXRzUGVyRW0pOwpAQCAtNzQsMTUgKzc0LDE1IEBAIHZvaWQgU1ZHRm9udERhdGE6OmluaXRpYWxp
emVGb250RGF0YShTaW0KICAgICBmbG9hdCBkZXNjZW50ID0gc3ZnRm9udEZhY2VFbGVtZW50LT5k
ZXNjZW50KCkgKiBzY2FsZTsKICAgICBmbG9hdCBsaW5lR2FwID0gMC4xZiAqIGZvbnRTaXplOwog
Ci0gICAgY29uc3QgR2x5cGhQYWdlKiBnbHlwaFBhZ2VaZXJvID0gZm9udERhdGEtPmdseXBoUGFn
ZSgwKTsKKyAgICBjb25zdCBHbHlwaFBhZ2UqIGdseXBoUGFnZVplcm8gPSBmb250LT5nbHlwaFBh
Z2UoMCk7CiAKICAgICBpZiAoIXhIZWlnaHQgJiYgZ2x5cGhQYWdlWmVybykgewogICAgICAgICAv
LyBGYWxsYmFjayBpZiB4X2hlaWdodEF0dHIgaXMgbm90IHNwZWNpZmllZCBmb3IgdGhlIGZvbnQg
ZWxlbWVudC4KICAgICAgICAgR2x5cGggbGV0dGVyWEdseXBoID0gZ2x5cGhQYWdlWmVyby0+Z2x5
cGhEYXRhRm9yQ2hhcmFjdGVyKCd4JykuZ2x5cGg7Ci0gICAgICAgIHhIZWlnaHQgPSBsZXR0ZXJY
R2x5cGggPyBmb250RGF0YS0+d2lkdGhGb3JHbHlwaChsZXR0ZXJYR2x5cGgpIDogMiAqIGFzY2Vu
dCAvIDM7CisgICAgICAgIHhIZWlnaHQgPSBsZXR0ZXJYR2x5cGggPyBmb250LT53aWR0aEZvckds
eXBoKGxldHRlclhHbHlwaCkgOiAyICogYXNjZW50IC8gMzsKICAgICB9CiAKLSAgICBGb250TWV0
cmljcyYgZm9udE1ldHJpY3MgPSBmb250RGF0YS0+Zm9udE1ldHJpY3MoKTsKKyAgICBGb250TWV0
cmljcyYgZm9udE1ldHJpY3MgPSBmb250LT5mb250TWV0cmljcygpOwogICAgIGZvbnRNZXRyaWNz
LnNldFVuaXRzUGVyRW0odW5pdHNQZXJFbSk7CiAgICAgZm9udE1ldHJpY3Muc2V0QXNjZW50KGFz
Y2VudCk7CiAgICAgZm9udE1ldHJpY3Muc2V0RGVzY2VudChkZXNjZW50KTsKQEAgLTkxLDI1ICs5
MSwyNSBAQCB2b2lkIFNWR0ZvbnREYXRhOjppbml0aWFsaXplRm9udERhdGEoU2ltCiAgICAgZm9u
dE1ldHJpY3Muc2V0WEhlaWdodCh4SGVpZ2h0KTsKIAogICAgIGlmICghZ2x5cGhQYWdlWmVybykg
ewotICAgICAgICBmb250RGF0YS0+c2V0U3BhY2VHbHlwaCgwKTsKLSAgICAgICAgZm9udERhdGEt
PnNldFNwYWNlV2lkdGhzKDApOwotICAgICAgICBmb250RGF0YS0+c2V0QXZnQ2hhcldpZHRoKDAp
OwotICAgICAgICBmb250RGF0YS0+c2V0TWF4Q2hhcldpZHRoKGFzY2VudCk7CisgICAgICAgIGZv
bnQtPnNldFNwYWNlR2x5cGgoMCk7CisgICAgICAgIGZvbnQtPnNldFNwYWNlV2lkdGhzKDApOwor
ICAgICAgICBmb250LT5zZXRBdmdDaGFyV2lkdGgoMCk7CisgICAgICAgIGZvbnQtPnNldE1heENo
YXJXaWR0aChhc2NlbnQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgLy8gQ2FsY3Vs
YXRlIHNwYWNlIHdpZHRoLgogICAgIEdseXBoIHNwYWNlR2x5cGggPSBnbHlwaFBhZ2VaZXJvLT5n
bHlwaERhdGFGb3JDaGFyYWN0ZXIoJyAnKS5nbHlwaDsKLSAgICBmb250RGF0YS0+c2V0U3BhY2VH
bHlwaChzcGFjZUdseXBoKTsKLSAgICBmb250RGF0YS0+c2V0U3BhY2VXaWR0aHMoZm9udERhdGEt
PndpZHRoRm9yR2x5cGgoc3BhY2VHbHlwaCkpOworICAgIGZvbnQtPnNldFNwYWNlR2x5cGgoc3Bh
Y2VHbHlwaCk7CisgICAgZm9udC0+c2V0U3BhY2VXaWR0aHMoZm9udC0+d2lkdGhGb3JHbHlwaChz
cGFjZUdseXBoKSk7CiAKICAgICAvLyBFc3RpbWF0ZSBhdmVyYWdlIGNoYXJhY3RlciB3aWR0aC4K
ICAgICBHbHlwaCBudW1lcmFsWmVyb0dseXBoID0gZ2x5cGhQYWdlWmVyby0+Z2x5cGhEYXRhRm9y
Q2hhcmFjdGVyKCcwJykuZ2x5cGg7Ci0gICAgZm9udERhdGEtPnNldEF2Z0NoYXJXaWR0aChudW1l
cmFsWmVyb0dseXBoID8gZm9udERhdGEtPndpZHRoRm9yR2x5cGgobnVtZXJhbFplcm9HbHlwaCkg
OiBmb250RGF0YS0+c3BhY2VXaWR0aCgpKTsKKyAgICBmb250LT5zZXRBdmdDaGFyV2lkdGgobnVt
ZXJhbFplcm9HbHlwaCA/IGZvbnQtPndpZHRoRm9yR2x5cGgobnVtZXJhbFplcm9HbHlwaCkgOiBm
b250LT5zcGFjZVdpZHRoKCkpOwogCiAgICAgLy8gRXN0aW1hdGUgbWF4aW11bSBjaGFyYWN0ZXIg
d2lkdGguCiAgICAgR2x5cGggbGV0dGVyV0dseXBoID0gZ2x5cGhQYWdlWmVyby0+Z2x5cGhEYXRh
Rm9yQ2hhcmFjdGVyKCdXJykuZ2x5cGg7Ci0gICAgZm9udERhdGEtPnNldE1heENoYXJXaWR0aChs
ZXR0ZXJXR2x5cGggPyBmb250RGF0YS0+d2lkdGhGb3JHbHlwaChsZXR0ZXJXR2x5cGgpIDogYXNj
ZW50KTsKKyAgICBmb250LT5zZXRNYXhDaGFyV2lkdGgobGV0dGVyV0dseXBoID8gZm9udC0+d2lk
dGhGb3JHbHlwaChsZXR0ZXJXR2x5cGgpIDogYXNjZW50KTsKIH0KIAogZmxvYXQgU1ZHRm9udERh
dGE6OndpZHRoRm9yU1ZHR2x5cGgoR2x5cGggZ2x5cGgsIGZsb2F0IGZvbnRTaXplKSBjb25zdApA
QCAtMjA4LDEwICsyMDgsMTAgQEAgYm9vbCBTVkdGb250RGF0YTo6YXBwbHlTVkdHbHlwaFNlbGVj
dGlvbgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBTVkdGb250RGF0YTo6ZmlsbFNWR0ds
eXBoUGFnZShHbHlwaFBhZ2UqIHBhZ2VUb0ZpbGwsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQg
bGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IFNpbXBs
ZUZvbnREYXRhKiBmb250RGF0YSkgY29uc3QKK2Jvb2wgU1ZHRm9udERhdGE6OmZpbGxTVkdHbHlw
aFBhZ2UoR2x5cGhQYWdlKiBwYWdlVG9GaWxsLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxl
bmd0aCwgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBGb250KiBm
b250KSBjb25zdAogewotICAgIEFTU0VSVChmb250RGF0YS0+aXNDdXN0b21Gb250KCkpOwotICAg
IEFTU0VSVChmb250RGF0YS0+aXNTVkdGb250KCkpOworICAgIEFTU0VSVChmb250LT5pc0N1c3Rv
bUZvbnQoKSk7CisgICAgQVNTRVJUKGZvbnQtPmlzU1ZHRm9udCgpKTsKIAogICAgIFNWR0ZvbnRG
YWNlRWxlbWVudCogZm9udEZhY2VFbGVtZW50ID0gdGhpcy0+c3ZnRm9udEZhY2VFbGVtZW50KCk7
CiAgICAgQVNTRVJUKGZvbnRGYWNlRWxlbWVudCk7CkBAIC0yMjAsMTMgKzIyMCwxMyBAQCBib29s
IFNWR0ZvbnREYXRhOjpmaWxsU1ZHR2x5cGhQYWdlKEdseXBoCiAgICAgQVNTRVJUKGZvbnRFbGVt
ZW50KTsKIAogICAgIGlmIChidWZmZXJMZW5ndGggPT0gbGVuZ3RoKQotICAgICAgICByZXR1cm4g
ZmlsbEJNUEdseXBocyhmb250RWxlbWVudCwgcGFnZVRvRmlsbCwgb2Zmc2V0LCBsZW5ndGgsIGJ1
ZmZlciwgZm9udERhdGEpOworICAgICAgICByZXR1cm4gZmlsbEJNUEdseXBocyhmb250RWxlbWVu
dCwgcGFnZVRvRmlsbCwgb2Zmc2V0LCBsZW5ndGgsIGJ1ZmZlciwgZm9udCk7CiAKICAgICBBU1NF
UlQoYnVmZmVyTGVuZ3RoID09IDIgKiBsZW5ndGgpOwotICAgIHJldHVybiBmaWxsTm9uQk1QR2x5
cGhzKGZvbnRFbGVtZW50LCBwYWdlVG9GaWxsLCBvZmZzZXQsIGxlbmd0aCwgYnVmZmVyLCBmb250
RGF0YSk7CisgICAgcmV0dXJuIGZpbGxOb25CTVBHbHlwaHMoZm9udEVsZW1lbnQsIHBhZ2VUb0Zp
bGwsIG9mZnNldCwgbGVuZ3RoLCBidWZmZXIsIGZvbnQpOwogfQogCi1ib29sIFNWR0ZvbnREYXRh
OjpmaWxsQk1QR2x5cGhzKFNWR0ZvbnRFbGVtZW50KiBmb250RWxlbWVudCwgR2x5cGhQYWdlKiBw
YWdlVG9GaWxsLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZl
ciwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKSBjb25zdAorYm9vbCBTVkdGb250RGF0
YTo6ZmlsbEJNUEdseXBocyhTVkdGb250RWxlbWVudCogZm9udEVsZW1lbnQsIEdseXBoUGFnZSog
cGFnZVRvRmlsbCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBidWZm
ZXIsIGNvbnN0IEZvbnQqIGZvbnQpIGNvbnN0CiB7CiAgICAgYm9vbCBoYXZlR2x5cGhzID0gZmFs
c2U7CiAgICAgVmVjdG9yPFNWR0dseXBoPiBnbHlwaHM7CkBAIC0yNDMsMTQgKzI0MywxNCBAQCBi
b29sIFNWR0ZvbnREYXRhOjpmaWxsQk1QR2x5cGhzKFNWR0ZvbnRFCiAgICAgICAgIC8vIGNhcmUg
b2YgbWF0Y2hpbmcgdG8gdGhlIGNvcnJlY3QgZ2x5cGgsIGlmIG11bHRpcGxlIG9uZXMgYXJlIGF2
YWlsYWJsZSwgYXMgdGhhdCdzCiAgICAgICAgIC8vIG9ubHkgcG9zc2libGUgd2l0aGluIHRoZSBj
b250ZXh0IG9mIGEgc3RyaW5nIChlZy4gYXJhYmljIGZvcm0gbWF0Y2hpbmcpLgogICAgICAgICBo
YXZlR2x5cGhzID0gdHJ1ZTsKLSAgICAgICAgcGFnZVRvRmlsbC0+c2V0R2x5cGhEYXRhRm9ySW5k
ZXgob2Zmc2V0ICsgaSwgZ2x5cGhzLmZpcnN0KCkudGFibGVFbnRyeSwgZm9udERhdGEpOworICAg
ICAgICBwYWdlVG9GaWxsLT5zZXRHbHlwaERhdGFGb3JJbmRleChvZmZzZXQgKyBpLCBnbHlwaHMu
Zmlyc3QoKS50YWJsZUVudHJ5LCBmb250KTsKICAgICAgICAgZ2x5cGhzLmNsZWFyKCk7CiAgICAg
fQogCiAgICAgcmV0dXJuIGhhdmVHbHlwaHM7CiB9CiAKLWJvb2wgU1ZHRm9udERhdGE6OmZpbGxO
b25CTVBHbHlwaHMoU1ZHRm9udEVsZW1lbnQqIGZvbnRFbGVtZW50LCBHbHlwaFBhZ2UqIHBhZ2VU
b0ZpbGwsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCBj
b25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEpIGNvbnN0Citib29sIFNWR0ZvbnREYXRhOjpm
aWxsTm9uQk1QR2x5cGhzKFNWR0ZvbnRFbGVtZW50KiBmb250RWxlbWVudCwgR2x5cGhQYWdlKiBw
YWdlVG9GaWxsLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZl
ciwgY29uc3QgRm9udCogZm9udCkgY29uc3QKIHsKICAgICBib29sIGhhdmVHbHlwaHMgPSBmYWxz
ZTsKICAgICBWZWN0b3I8U1ZHR2x5cGg+IGdseXBoczsKQEAgLTI2OCw3ICsyNjgsNyBAQCBib29s
IFNWR0ZvbnREYXRhOjpmaWxsTm9uQk1QR2x5cGhzKFNWR0ZvCiAgICAgICAgIC8vIGNhcmUgb2Yg
bWF0Y2hpbmcgdG8gdGhlIGNvcnJlY3QgZ2x5cGgsIGlmIG11bHRpcGxlIG9uZXMgYXJlIGF2YWls
YWJsZSwgYXMgdGhhdCdzCiAgICAgICAgIC8vIG9ubHkgcG9zc2libGUgd2l0aGluIHRoZSBjb250
ZXh0IG9mIGEgc3RyaW5nIChlZy4gYXJhYmljIGZvcm0gbWF0Y2hpbmcpLgogICAgICAgICBoYXZl
R2x5cGhzID0gdHJ1ZTsKLSAgICAgICAgcGFnZVRvRmlsbC0+c2V0R2x5cGhEYXRhRm9ySW5kZXgo
b2Zmc2V0ICsgaSwgZ2x5cGhzLmZpcnN0KCkudGFibGVFbnRyeSwgZm9udERhdGEpOworICAgICAg
ICBwYWdlVG9GaWxsLT5zZXRHbHlwaERhdGFGb3JJbmRleChvZmZzZXQgKyBpLCBnbHlwaHMuZmly
c3QoKS50YWJsZUVudHJ5LCBmb250KTsKICAgICAgICAgZ2x5cGhzLmNsZWFyKCk7CiAgICAgfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udERhdGEuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udERhdGEuaAkocmV2aXNpb24gMTc4ODU3KQorKysgU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnREYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDIxICsy
MSwyMSBAQAogI2RlZmluZSBTVkdGb250RGF0YV9oCiAKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQot
I2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisjaW5jbHVkZSAiRm9udC5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNWR0ZvbnRFbGVtZW50OwogY2xhc3MgU1ZHRm9udEZhY2VF
bGVtZW50OwogCi1jbGFzcyBTVkdGb250RGF0YSA6IHB1YmxpYyBTaW1wbGVGb250RGF0YTo6U1ZH
RGF0YSB7CitjbGFzcyBTVkdGb250RGF0YSA6IHB1YmxpYyBGb250OjpTVkdEYXRhIHsKIHB1Ymxp
YzoKICAgICBleHBsaWNpdCBTVkdGb250RGF0YShTVkdGb250RmFjZUVsZW1lbnQqKTsKICAgICB2
aXJ0dWFsIH5TVkdGb250RGF0YSgpIHsgfQogCi0gICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVG
b250RGF0YShTaW1wbGVGb250RGF0YSosIGZsb2F0IGZvbnRTaXplKSBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZUZvbnQoRm9udCosIGZsb2F0IGZvbnRTaXplKSBvdmVycmlk
ZTsKICAgICB2aXJ0dWFsIGZsb2F0IHdpZHRoRm9yU1ZHR2x5cGgoR2x5cGgsIGZsb2F0IGZvbnRT
aXplKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgZmlsbFNWR0dseXBoUGFnZShH
bHlwaFBhZ2UqLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZl
ciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBTaW1wbGVGb250RGF0YSopIGNvbnN0IG92
ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBmaWxsU1ZHR2x5cGhQYWdlKEdseXBoUGFnZSosIHVu
c2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBi
dWZmZXJMZW5ndGgsIGNvbnN0IEZvbnQqKSBjb25zdCBvdmVycmlkZTsKIAogICAgIGJvb2wgYXBw
bHlTVkdHbHlwaFNlbGVjdGlvbihXaWR0aEl0ZXJhdG9yJiwgR2x5cGhEYXRhJiwgYm9vbCBtaXJy
b3IsIGludCBjdXJyZW50Q2hhcmFjdGVyLCB1bnNpZ25lZCYgYWR2YW5jZUxlbmd0aCwgU3RyaW5n
JiBub3JtYWxpemVkU3BhY2VzU3RyaW5nQ2FjaGUpIGNvbnN0OwogCkBAIC01MCw4ICs1MCw4IEBA
IHB1YmxpYzoKICAgICBmbG9hdCB2ZXJ0aWNhbEFkdmFuY2VZKCkgY29uc3QgeyByZXR1cm4gbV92
ZXJ0aWNhbEFkdmFuY2VZOyB9CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBmaWxsQk1QR2x5cGhzKFNW
R0ZvbnRFbGVtZW50KiwgR2x5cGhQYWdlKiAsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVu
Z3RoLCBVQ2hhciogYnVmZmVyLCBjb25zdCBTaW1wbGVGb250RGF0YSopIGNvbnN0OwotICAgIGJv
b2wgZmlsbE5vbkJNUEdseXBocyhTVkdGb250RWxlbWVudCosIEdseXBoUGFnZSogLCB1bnNpZ25l
ZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgY29uc3QgU2ltcGxlRm9u
dERhdGEqKSBjb25zdDsKKyAgICBib29sIGZpbGxCTVBHbHlwaHMoU1ZHRm9udEVsZW1lbnQqLCBH
bHlwaFBhZ2UqICwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBidWZm
ZXIsIGNvbnN0IEZvbnQqKSBjb25zdDsKKyAgICBib29sIGZpbGxOb25CTVBHbHlwaHMoU1ZHRm9u
dEVsZW1lbnQqLCBHbHlwaFBhZ2UqICwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgs
IFVDaGFyKiBidWZmZXIsIGNvbnN0IEZvbnQqKSBjb25zdDsKIAogICAgIGJvb2wgYXBwbHlUcmFu
c2Zvcm1zKEdseXBoQnVmZmVyR2x5cGgqLCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCBzaXplX3QsIFR5
cGVzZXR0aW5nRmVhdHVyZXMpIGNvbnN0ID0gZGVsZXRlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRm9udEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRm9udEVsZW1lbnQuaAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZvbnRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTc2LDcgKzc2LDcgQEAgcHVibGlj
OgogICAgIGZsb2F0IGhvcml6b250YWxLZXJuaW5nRm9yUGFpck9mU3RyaW5nc0FuZEdseXBocyhj
b25zdCBTdHJpbmcmIHUxLCBjb25zdCBTdHJpbmcmIGcxLCBjb25zdCBTdHJpbmcmIHUyLCBjb25z
dCBTdHJpbmcmIGcyKSBjb25zdDsKICAgICBmbG9hdCB2ZXJ0aWNhbEtlcm5pbmdGb3JQYWlyT2ZT
dHJpbmdzQW5kR2x5cGhzKGNvbnN0IFN0cmluZyYgdTEsIGNvbnN0IFN0cmluZyYgZzEsIGNvbnN0
IFN0cmluZyYgdTIsIGNvbnN0IFN0cmluZyYgZzIpIGNvbnN0OwogCi0gICAgLy8gVXNlZCBieSBT
aW1wbGVGb250RGF0YS9XaWR0aEl0ZXJhdG9yLgorICAgIC8vIFVzZWQgYnkgRm9udC9XaWR0aEl0
ZXJhdG9yLgogICAgIFNWR0dseXBoIHN2Z0dseXBoRm9yR2x5cGgoR2x5cGgpOwogICAgIEdseXBo
IG1pc3NpbmdHbHlwaCgpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBy
b2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJv
Y2Vzcy5jcHAJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUHJvY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyNyw4ICs5MjcsOCBAQCB2b2lkIFdl
YlByb2Nlc3M6OmdldFdlYkNvcmVTdGF0aXN0aWNzKHVpCiAgICAgZGF0YS5zdGF0aXN0aWNzTnVt
YmVycy5zZXQoQVNDSUlMaXRlcmFsKCJJY29uc1dpdGhEYXRhQ291bnQiKSwgaWNvbkRhdGFiYXNl
KCkuaWNvblJlY29yZENvdW50V2l0aERhdGEoKSk7CiAgICAgCiAgICAgLy8gR2F0aGVyIGZvbnQg
c3RhdGlzdGljcy4KLSAgICBkYXRhLnN0YXRpc3RpY3NOdW1iZXJzLnNldChBU0NJSUxpdGVyYWwo
IkNhY2hlZEZvbnREYXRhQ291bnQiKSwgZm9udENhY2hlKCkuZm9udERhdGFDb3VudCgpKTsKLSAg
ICBkYXRhLnN0YXRpc3RpY3NOdW1iZXJzLnNldChBU0NJSUxpdGVyYWwoIkNhY2hlZEZvbnREYXRh
SW5hY3RpdmVDb3VudCIpLCBmb250Q2FjaGUoKS5pbmFjdGl2ZUZvbnREYXRhQ291bnQoKSk7Cisg
ICAgZGF0YS5zdGF0aXN0aWNzTnVtYmVycy5zZXQoQVNDSUlMaXRlcmFsKCJDYWNoZWRGb250RGF0
YUNvdW50IiksIGZvbnRDYWNoZSgpLmZvbnRDb3VudCgpKTsKKyAgICBkYXRhLnN0YXRpc3RpY3NO
dW1iZXJzLnNldChBU0NJSUxpdGVyYWwoIkNhY2hlZEZvbnREYXRhSW5hY3RpdmVDb3VudCIpLCBm
b250Q2FjaGUoKS5pbmFjdGl2ZUZvbnRDb3VudCgpKTsKICAgICAKICAgICAvLyBHYXRoZXIgZ2x5
cGggcGFnZSBzdGF0aXN0aWNzLgogICAgIGRhdGEuc3RhdGlzdGljc051bWJlcnMuc2V0KEFTQ0lJ
TGl0ZXJhbCgiR2x5cGhQYWdlQ291bnQiKSwgR2x5cGhQYWdlOjpjb3VudCgpKTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYlBvcHVwTWVudU1h
Yy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L21hYy9XZWJQb3B1cE1lbnVNYWMubW0JKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYlBvcHVwTWVudU1hYy5tbQko
d29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCB2b2lkIFdlYlBvcHVwTWVudTo6c2V0VXBQ
bGF0Zm9ybURhdGEoY29uCiB7CiAjaWYgVVNFKEFQUEtJVCkKICAgICAvLyBGSVhNRTogZm9udCB3
aWxsIGJlIG5pbCBoZXJlIGZvciBjdXN0b20gZm9udHMsIHdlIHNob3VsZCBmaXggdGhhdC4KLSAg
ICBOU0ZvbnQgKmZvbnQgPSBtX3BvcHVwQ2xpZW50LT5tZW51U3R5bGUoKS5mb250KCkucHJpbWFy
eUZvbnREYXRhKCkuZ2V0TlNGb250KCk7CisgICAgTlNGb250ICpmb250ID0gbV9wb3B1cENsaWVu
dC0+bWVudVN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250KCkuZ2V0TlNGb250KCk7CiAgICAgaWYg
KCFmb250KQogICAgICAgICByZXR1cm47CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTc5Niw3ICs3OTYsNyBAQCBFZGl0b3JTdGF0ZSBXZWJQYWdlOjplZGl0b3JTdGF0ZSgpIGNv
bnN0CiAgICAgaWYgKCFzZWxlY3Rpb24uaXNOb25lKCkpIHsKICAgICAgICAgTm9kZSogbm9kZVRv
UmVtb3ZlOwogICAgICAgICBpZiAoUmVuZGVyU3R5bGUqIHN0eWxlID0gRWRpdG9yOjpzdHlsZUZv
clNlbGVjdGlvblN0YXJ0KCZmcmFtZSwgbm9kZVRvUmVtb3ZlKSkgewotICAgICAgICAgICAgQ1RG
b250UmVmIGZvbnQgPSBzdHlsZS0+Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXRD
VEZvbnQoKTsKKyAgICAgICAgICAgIENURm9udFJlZiBmb250ID0gc3R5bGUtPmZvbnRDYXNjYWRl
KCkucHJpbWFyeUZvbnQoKS5nZXRDVEZvbnQoKTsKICAgICAgICAgICAgIENURm9udFN5bWJvbGlj
VHJhaXRzIHRyYWl0cyA9IGZvbnQgPyBDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhmb250KSA6IDA7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICh0cmFpdHMgJiBrQ1RGb250VHJhaXRCb2xk
KQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9T
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3Mv
V2ViUGFnZUlPUy5tbQkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNzkwLDgg
KzE3OTAsOCBAQCB2b2lkIFdlYlBhZ2U6OnJlcXVlc3RBdXRvY29ycmVjdGlvbkRhdGEoCiAKICAg
ICBib29sIG11bHRpcGxlRm9udHMgPSBmYWxzZTsKICAgICBDVEZvbnRSZWYgZm9udCA9IG5pbDsK
LSAgICBpZiAoY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhID0gZnJhbWUuZWRpdG9yKCku
Zm9udEZvclNlbGVjdGlvbihtdWx0aXBsZUZvbnRzKSkKLSAgICAgICAgZm9udCA9IGZvbnREYXRh
LT5nZXRDVEZvbnQoKTsKKyAgICBpZiAoYXV0byogY29yZUZvbnQgPSBmcmFtZS5lZGl0b3IoKS5m
b250Rm9yU2VsZWN0aW9uKG11bHRpcGxlRm9udHMpKQorICAgICAgICBmb250ID0gY29yZUZvbnQt
PmdldENURm9udCgpOwogCiAgICAgQ0dGbG9hdCBmb250U2l6ZSA9IENURm9udEdldFNpemUoZm9u
dCk7CiAgICAgdWludDY0X3QgZm9udFRyYWl0cyA9IENURm9udEdldFN5bWJvbGljVHJhaXRzKGZv
bnQpOwpJbmRleDogU291cmNlL1dlYktpdC9pb3MvTWlzYy9FbW9qaUZhbGxiYWNrRm9udFNlbGVj
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2lvcy9NaXNjL0Vtb2ppRmFsbGJh
Y2tGb250U2VsZWN0b3IuY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViS2l0L2lv
cy9NaXNjL0Vtb2ppRmFsbGJhY2tGb250U2VsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NywxNyArMjcsMTcgQEAKIAogI2luY2x1ZGUgIkVtb2ppRmFsbGJhY2tGb250U2VsZWN0b3IuaCIK
IAorI2luY2x1ZGUgPFdlYkNvcmUvRm9udC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRm9udENhY2hl
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TaW1wbGVGb250RGF0YS5oPgogI2luY2x1ZGUgPHd0Zi9B
c3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CiAKIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwogCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBFbW9qaUZh
bGxiYWNrRm9udFNlbGVjdG9yOjpmYWxsYmFja0ZvbnREYXRhQXQoY29uc3QgRm9udERlc2NyaXB0
aW9uJiBmb250RGVzY3JpcHRpb24sIHNpemVfdCkKK1Bhc3NSZWZQdHI8Rm9udD4gRW1vamlGYWxs
YmFja0ZvbnRTZWxlY3Rvcjo6ZmFsbGJhY2tGb250QXQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBm
b250RGVzY3JpcHRpb24sIHNpemVfdCkKIHsKICAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNf
TE9DQUwoQXRvbWljU3RyaW5nLCBhcHBsZUNvbG9yRW1vamksICgiQXBwbGUgQ29sb3IgRW1vamki
KSk7Ci0gICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBmb250RGF0YSA9IGZvbnRDYWNoZSgpLmZv
bnRGb3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCBhcHBsZUNvbG9yRW1vamkpOworICAgIFJlZlB0
cjxGb250PiBmb250RGF0YSA9IGZvbnRDYWNoZSgpLmZvbnRGb3JGYW1pbHkoZm9udERlc2NyaXB0
aW9uLCBhcHBsZUNvbG9yRW1vamkpOwogICAgIGlmICghZm9udERhdGEpIHsKICAgICAgICAgTE9H
X0VSUk9SKCJGYWlsZWQgdG8gZ2V0IFwiQXBwbGUgQ29sb3IgRW1vamlcIiBmcm9tIHRoZSBmb250
IGNhY2hlLiBVc2luZyB0aGUgbGFzdCByZXNvcnQgZmFsbGJhY2sgZm9udCBpbnN0ZWFkLiIpOwog
ICAgICAgICBmb250RGF0YSA9IGZvbnRDYWNoZSgpLmxhc3RSZXNvcnRGYWxsYmFja0ZvbnQoZm9u
dERlc2NyaXB0aW9uKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvaW9zL01pc2MvRW1vamlGYWxsYmFj
a0ZvbnRTZWxlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvaW9zL01pc2MvRW1v
amlGYWxsYmFja0ZvbnRTZWxlY3Rvci5oCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2Vi
S2l0L2lvcy9NaXNjL0Vtb2ppRmFsbGJhY2tGb250U2VsZWN0b3IuaAkod29ya2luZyBjb3B5KQpA
QCAtMzUsOCArMzUsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+RW1vamlGYWxsYmFja0ZvbnRT
ZWxlY3RvcigpIG92ZXJyaWRlIHsgfQogICAgIHZpcnR1YWwgV2ViQ29yZTo6Rm9udFJhbmdlcyBm
b250UmFuZ2VzRm9yRmFtaWx5KGNvbnN0IFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbiYsIGNvbnN0
IEF0b21pY1N0cmluZyYpIG92ZXJyaWRlIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBX
ZWJDb3JlOjpGb250UmFuZ2VzKCk7IH0KICAgICB2aXJ0dWFsIGJvb2wgcmVzb2x2ZXNGYW1pbHlG
b3IoY29uc3QgV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uJikgY29uc3Qgb3ZlcnJpZGUgeyBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBzaXplX3QgZmFs
bGJhY2tGb250RGF0YUNvdW50KCkgb3ZlcnJpZGUgeyByZXR1cm4gMTsgfTsKLSAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8V2ViQ29yZTo6U2ltcGxlRm9udERhdGE+IGZhbGxiYWNrRm9udERhdGFBdChj
b25zdCBXZWJDb3JlOjpGb250RGVzY3JpcHRpb24mLCBzaXplX3QpIG92ZXJyaWRlOworICAgIHZp
cnR1YWwgc2l6ZV90IGZhbGxiYWNrRm9udENvdW50KCkgb3ZlcnJpZGUgeyByZXR1cm4gMTsgfTsK
KyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6Rm9udD4gZmFsbGJhY2tGb250QXQoY29u
c3QgV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uJiwgc2l6ZV90KSBvdmVycmlkZTsKIAogICAgIHZp
cnR1YWwgdm9pZCByZWdpc3RlckZvckludmFsaWRhdGlvbkNhbGxiYWNrcyhXZWJDb3JlOjpGb250
U2VsZWN0b3JDbGllbnQqKSBvdmVycmlkZSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgdW5yZWdpc3Rl
ckZvckludmFsaWRhdGlvbkNhbGxiYWNrcyhXZWJDb3JlOjpGb250U2VsZWN0b3JDbGllbnQqKSBv
dmVycmlkZSB7IH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3Rp
Y3MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDb3JlU3RhdGlz
dGljcy5tbQkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJD
b3JlU3RhdGlzdGljcy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDEyICsxNDcsMTIgQEAgKyAo
c2l6ZV90KWljb25zV2l0aERhdGFDb3VudAogCiArIChzaXplX3QpY2FjaGVkRm9udERhdGFDb3Vu
dAogewotICAgIHJldHVybiBmb250Q2FjaGUoKS5mb250RGF0YUNvdW50KCk7CisgICAgcmV0dXJu
IGZvbnRDYWNoZSgpLmZvbnRDb3VudCgpOwogfQogCiArIChzaXplX3QpY2FjaGVkRm9udERhdGFJ
bmFjdGl2ZUNvdW50CiB7Ci0gICAgcmV0dXJuIGZvbnRDYWNoZSgpLmluYWN0aXZlRm9udERhdGFD
b3VudCgpOworICAgIHJldHVybiBmb250Q2FjaGUoKS5pbmFjdGl2ZUZvbnRDb3VudCgpOwogfQog
CiArICh2b2lkKXB1cmdlSW5hY3RpdmVGb250RGF0YQpJbmRleDogU291cmNlL1dlYktpdC9tYWMv
V2ViQ29yZVN1cHBvcnQvUG9wdXBNZW51TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvbWFjL1dlYkNvcmVTdXBwb3J0L1BvcHVwTWVudU1hYy5tbQkocmV2aXNpb24gMTc4ODU3KQor
KysgU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvUG9wdXBNZW51TWFjLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCwxMSArMjgsMTEgQEAKICNpbXBvcnQgPFdlYkNvcmUvQ2hyb21lLmg+
CiAjaW1wb3J0IDxXZWJDb3JlL0Nocm9tZUNsaWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9FdmVu
dEhhbmRsZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRm9udC5oPgogI2ltcG9ydCA8V2ViQ29yZS9G
cmFtZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KICNpbXBvcnQgPFdlYkNvcmUv
UGFnZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9Qb3B1cE1lbnVDbGllbnQuaD4KLSNpbXBvcnQgPFdl
YkNvcmUvU2ltcGxlRm9udERhdGEuaD4KICNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZVN5c3RlbUlu
dGVyZmFjZS5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTgxLDkgKzgxLDkgQEAg
dm9pZCBQb3B1cE1lbnVNYWM6OnBvcHVsYXRlKCkKICAgICAgICAgUG9wdXBNZW51U3R5bGUgc3R5
bGUgPSBtX2NsaWVudC0+aXRlbVN0eWxlKGkpOwogICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxl
RGljdGlvbmFyeT4gYXR0cmlidXRlcyA9IGFkb3B0TlMoW1tOU011dGFibGVEaWN0aW9uYXJ5IGFs
bG9jXSBpbml0XSk7CiAgICAgICAgIGlmIChzdHlsZS5mb250KCkgIT0gRm9udENhc2NhZGUoKSkg
ewotICAgICAgICAgICAgTlNGb250ICpmb250ID0gc3R5bGUuZm9udCgpLnByaW1hcnlGb250RGF0
YSgpLmdldE5TRm9udCgpOworICAgICAgICAgICAgTlNGb250ICpmb250ID0gc3R5bGUuZm9udCgp
LnByaW1hcnlGb250KCkuZ2V0TlNGb250KCk7CiAgICAgICAgICAgICBpZiAoIWZvbnQpIHsKLSAg
ICAgICAgICAgICAgICBDR0Zsb2F0IHNpemUgPSBzdHlsZS5mb250KCkucHJpbWFyeUZvbnREYXRh
KCkucGxhdGZvcm1EYXRhKCkuc2l6ZSgpOworICAgICAgICAgICAgICAgIENHRmxvYXQgc2l6ZSA9
IHN0eWxlLmZvbnQoKS5wcmltYXJ5Rm9udCgpLnBsYXRmb3JtRGF0YSgpLnNpemUoKTsKICAgICAg
ICAgICAgICAgICBmb250ID0gc3R5bGUuZm9udCgpLndlaWdodCgpIDwgRm9udFdlaWdodEJvbGQg
PyBbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6c2l6ZV0gOiBbTlNGb250IGJvbGRTeXN0ZW1Gb250
T2ZTaXplOnNpemVdOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgW2F0dHJpYnV0ZXMgc2V0
T2JqZWN0OmZvbnQgZm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVdOwpAQCAtMTQ4LDcgKzE0OCw3
IEBAIHZvaWQgUG9wdXBNZW51TWFjOjpzaG93KGNvbnN0IEludFJlY3QmIHIKICAgICBOU01lbnUq
IG1lbnUgPSBbbV9wb3B1cCBtZW51XTsKICAgICAKICAgICBOU1BvaW50IGxvY2F0aW9uOwotICAg
IE5TRm9udCogZm9udCA9IG1fY2xpZW50LT5tZW51U3R5bGUoKS5mb250KCkucHJpbWFyeUZvbnRE
YXRhKCkuZ2V0TlNGb250KCk7CisgICAgTlNGb250KiBmb250ID0gbV9jbGllbnQtPm1lbnVTdHls
ZSgpLmZvbnQoKS5wcmltYXJ5Rm9udCgpLmdldE5TRm9udCgpOwogCiAgICAgLy8gVGhlc2UgdmFs
dWVzIHdlcmUgYm9ycm93ZWQgZnJvbSBBcHBLaXQgdG8gbWF0Y2ggdGhlaXIgcGxhY2VtZW50IG9m
IHRoZSBtZW51LgogICAgIGNvbnN0IGludCBwb3BPdmVySG9yaXpvbnRhbEFkanVzdCA9IC0xMDsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQkocmV2aXNpb24gMTc4ODU3
KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQkod29ya2luZyBjb3B5
KQpAQCAtMTE0LDExICsxMTQsMTEgQEAKICNpbXBvcnQgPFdlYkNvcmUvRWRpdG9yLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL0VkaXRvckNsaWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9Gb2N1c0NvbnRy
b2xsZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRm9udC5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFt
ZVNlbGVjdGlvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9IaXN0b3J5Q29udHJvbGxlci5oPgogI2lt
cG9ydCA8V2ViQ29yZS9Ob2RlVHJhdmVyc2FsLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRlckxh
eWVyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1NpbXBsZUZvbnREYXRhLmg+CiAjaW1wb3J0IDxXZWJD
b3JlL1RleHRSZXNvdXJjZURlY29kZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvV0FLU2Nyb2xsVmll
dy5oPgogI2ltcG9ydCA8V2ViQ29yZS9XQUtWaWV3UHJpdmF0ZS5oPgpAQCAtMTg2OSw3ICsxODY5
LDggQEAgLSAoQ1RGb250UmVmKWZvbnRGb3JTZWxlY3Rpb246KEJPT0wgKiloYQogICAgIGJvb2wg
bXVsdGlwbGVGb250cyA9IGZhbHNlOwogICAgIENURm9udFJlZiBmb250ID0gbmlsOwogICAgIGlm
IChfcHJpdmF0ZS0+Y29yZUZyYW1lKSB7Ci0gICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBm
ZCA9IF9wcml2YXRlLT5jb3JlRnJhbWUtPmVkaXRvcigpLmZvbnRGb3JTZWxlY3Rpb24obXVsdGlw
bGVGb250cyk7CisgICAgICAgIGNvbnN0IEZvbnQKKyAgICAgICAgKiBmZCA9IF9wcml2YXRlLT5j
b3JlRnJhbWUtPmVkaXRvcigpLmZvbnRGb3JTZWxlY3Rpb24obXVsdGlwbGVGb250cyk7CiAgICAg
ICAgIGlmIChmZCkKICAgICAgICAgICAgIGZvbnQgPSBmZC0+Z2V0Q1RGb250KCk7CiAgICAgfQpJ
bmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCShyZXZpc2lvbiAx
Nzg4NTcpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC05Miw2ICs5Miw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0V4Y2VwdGlvbkhh
bmRsZXJzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9Gb2N1c0NvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRm9udC5oPgogI2ltcG9ydCA8
V2ViQ29yZS9Gb250Q2FjaGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvRnJhbWUuaD4KICNpbXBvcnQg
PFdlYkNvcmUvRnJhbWVMb2FkZXIuaD4KQEAgLTExMiw3ICsxMTMsNiBAQAogI2ltcG9ydCA8V2Vi
Q29yZS9SZW5kZXJXaWRnZXQuaD4KICNpbXBvcnQgPFdlYkNvcmUvUnVudGltZUFwcGxpY2F0aW9u
Q2hlY2tzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgotI2ltcG9ydCA8V2Vi
Q29yZS9TaW1wbGVGb250RGF0YS5oPgogI2ltcG9ydCA8V2ViQ29yZS9TdHlsZVByb3BlcnRpZXMu
aD4KICNpbXBvcnQgPFdlYkNvcmUvVGV4dC5oPgogI2ltcG9ydCA8V2ViQ29yZS9UZXh0QWx0ZXJu
YXRpdmVXaXRoUmFuZ2UuaD4KQEAgLTQ4NzgsOCArNDg3OCw4IEBAIHN0YXRpYyBOU1N0cmluZyAq
Zm9udE5hbWVGb3JEZXNjcmlwdGlvbigKICAgICBmb250RGVzY3JpcHRpb24uc2V0SXNJdGFsaWMo
aXRhbGljKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0V2VpZ2h0KGJvbGQgPyBGb250V2VpZ2h0
OTAwIDogRm9udFdlaWdodDUwMCk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNp
emUocG9pbnRTaXplKTsKLSAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IHNpbXBsZUZvbnREYXRh
ID0gZm9udENhY2hlKCkuZm9udEZvckZhbWlseShmb250RGVzY3JpcHRpb24sIGZhbWlseU5hbWUp
OwotICAgIHJldHVybiBbc2ltcGxlRm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm5zRm9udCgpIGZv
bnROYW1lXTsKKyAgICBSZWZQdHI8Rm9udD4gZm9udCA9IGZvbnRDYWNoZSgpLmZvbnRGb3JGYW1p
bHkoZm9udERlc2NyaXB0aW9uLCBmYW1pbHlOYW1lKTsKKyAgICByZXR1cm4gW2ZvbnQtPnBsYXRm
b3JtRGF0YSgpLm5zRm9udCgpIGZvbnROYW1lXTsKIH0KIAogLSAodm9pZClfYWRkVG9TdHlsZToo
RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqKXN0eWxlIGZvbnRBOihOU0ZvbnQgKilhIGZvbnRCOihO
U0ZvbnQgKiliCkBAIC01NDQyLDcgKzU0NDIsNyBAQCAtICh2b2lkKV91cGRhdGVGb250UGFuZWwK
ICAgICBib29sIG11bHRpcGxlRm9udHMgPSBmYWxzZTsKICAgICBOU0ZvbnQgKmZvbnQgPSBuaWw7
CiAgICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKSB7Ci0gICAg
ICAgIGlmIChjb25zdCBTaW1wbGVGb250RGF0YSogZmQgPSBjb3JlRnJhbWUtPmVkaXRvcigpLmZv
bnRGb3JTZWxlY3Rpb24obXVsdGlwbGVGb250cykpCisgICAgICAgIGlmIChjb25zdCBGb250KiBm
ZCA9IGNvcmVGcmFtZS0+ZWRpdG9yKCkuZm9udEZvclNlbGVjdGlvbihtdWx0aXBsZUZvbnRzKSkK
ICAgICAgICAgICAgIGZvbnQgPSBmZC0+Z2V0TlNGb250KCk7CiAgICAgfQogCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L3dpbi9ET01Db3JlQ2xhc3Nlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC93aW4vRE9NQ29yZUNsYXNzZXMuY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2Uv
V2ViS2l0L3dpbi9ET01Db3JlQ2xhc3Nlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3
LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9E
cmFnSW1hZ2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0VsZW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0ZvbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZvbnRDYXNjYWRlLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9GcmFtZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSFRNTEZvcm1FbGVtZW50Lmg+CkBA
IC00OCw3ICs0OSw2IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9Ob2RlTGlzdC5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvUmVuZGVyRWxlbWVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyVHJlZUFz
VGV4dC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU2ltcGxlRm9udERhdGEuaD4KIAogI2luY2x1ZGUg
PGluaXRndWlkLmg+CiAvLyB7M0IwQzBFRkYtNDc4Qi00YjBiLTgyOTAtRDIzMjFFMDhFMjNFfQpJ
bmRleDogU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC93aW4vV2ViVmlldy5jcHAJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJL
aXQvd2luL1dlYlZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Niw2ICs5Niw3IEBACiAjaW5j
bHVkZSA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFF1YWQu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZvY3VzQ29udHJvbGxlci5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvRm9udC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVMb2FkZXIuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0ZyYW1lU2VsZWN0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZVRyZWUuaD4K
QEAgLTE0OCw3ICsxNDksNiBAQAogI2luY2x1ZGUgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW4uaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5UG9saWN5Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9T
ZXR0aW5ncy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU2ltcGxlRm9udERhdGEuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1N5c3RlbUluZm8uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1dpbmRvd01lc3NhZ2VC
cm9hZGNhc3Rlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvV2luZG93c1RvdWNoLmg+CkBAIC01NTA1
LDcgKzU1MDUsNyBAQCBIUkVTVUxUIFdlYlZpZXc6OnNldFByb2hpYml0c01haW5GcmFtZVNjCiAK
IEhSRVNVTFQgV2ViVmlldzo6c2V0U2hvdWxkQXBwbHlNYWNGb250QXNjZW50SGFjayhCT09MIGIp
CiB7Ci0gICAgU2ltcGxlRm9udERhdGE6OnNldFNob3VsZEFwcGx5TWFjQXNjZW50SGFjayhiKTsK
KyAgICBGb250OjpzZXRTaG91bGRBcHBseU1hY0FzY2VudEhhY2soYik7CiAgICAgcmV0dXJuIFNf
T0s7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245149</attachid>
            <date>2015-01-22 11:13:57 -0800</date>
            <delta_ts>2015-01-22 11:30:39 -0800</delta_ts>
            <desc>another</desc>
            <filename>simplefontdata-rename-9.patch</filename>
            <type>text/plain</type>
            <size>383197</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDE1LTAxLTIxICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgU2ltcGxlRm9udERh
dGEgdG8gRm9udAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTQwNDk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhlIGZhbGxiYWNrIHN1cHBvcnRpbmcgRm9udCB0eXBlIHdhcyByZW5hbWVkIEZvbnRDYXNj
YWRlLgorICAgICAgICBXZSBjYW4gbm93IHJlbmFtZSBTaW1wbGVGb250RGF0YSB0byBqdXN0IEZv
bnQgbWF0Y2hpbmcgdGhlIHVzdWFsIGRlZmluaXRpb24uCisKIDIwMTUtMDEtMjEgIEJlbmphbWlu
IFBvdWxhaW4gIDxiZW5qYW1pbkB3ZWJraXQub3JnPgogCiAgICAgICAgIEhhbmRsZSB0aGUgdHJh
bnNpdGlvbiBvbiBhbnkgY2hhcmFjdGVyIGFzIGEgc2VwYXJhdGUgdHlwZSBvZiB0cmFuc2l0aW9u
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dl
YkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTIwNTQsNiArMjA1NCw3IEBA
IHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3Bw
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSb3VuZGVkUmVjdC5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9GbG9hdFNpemUuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhc2NhZGUuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERlc2NyaXB0aW9u
LmNwcApAQCAtMjA4OSw3ICsyMDkwLDYgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL1JvdW5kZWRSZWN0LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1NWR0ds
eXBoLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCi0gICAgcGxhdGZv
cm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvU3Ry
aW5nVHJ1bmNhdG9yLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1N1cnJvZ2F0ZVBhaXJBd2Fy
ZVRleHRJdGVyYXRvci5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVuLmNwcApJbmRl
eDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC00NjksNyArNDY5LDYgQEAgX19aTjdX
ZWJDb3JlMTRTZWN1cml0eVBvbGljeTIyZ2VuZXJhdGVSZQogX19aTjdXZWJDb3JlMTRTZWN1cml0
eVBvbGljeTI3cmVzZXRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RzRXYKIF9fWk43V2ViQ29yZTE0U2Vj
dXJpdHlQb2xpY3kyOWFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5RVJLTlNfMTRTZWN1cml0
eU9yaWdpbkVSS04zV1RGNlN0cmluZ0VTN19iCiBfX1pON1dlYkNvcmUxNFNlY3VyaXR5UG9saWN5
MzJyZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeUVSS05TXzE0U2VjdXJpdHlPcmlnaW5F
UktOM1dURjZTdHJpbmdFUzdfYgotX19aTjdXZWJDb3JlMTRTaW1wbGVGb250RGF0YUQxRXYKIF9f
Wk43V2ViQ29yZTE0U3ViZnJhbWVMb2FkZXIxMmFsbG93UGx1Z2luc0VOU18yOFJlYXNvbkZvckNh
bGxpbmdBbGxvd1BsdWdpbnNFCiBfX1pON1dlYkNvcmUxNFRpbGVDb250cm9sbGVyMTRzZXRUaWxl
c09wYXF1ZUViCiBfX1pON1dlYkNvcmUxNFRpbGVDb250cm9sbGVyMTVjb250YWluZXJMYXllcnNF
dgpAQCAtMTE3OSw2ICsxMTc4LDcgQEAgX19aTjdXZWJDb3JlNDBkZWZhdWx0VGV4dEVuY29kaW5n
TmFtZUZvcgogX19aTjdXZWJDb3JlNDByZXN0cmljdE1pbmltdW1TY2FsZUZhY3RvclRvVmlld3Bv
cnRTaXplRVJOU18xOFZpZXdwb3J0QXR0cmlidXRlc0VOU183SW50U2l6ZUVmCiBfX1pON1dlYkNv
cmU0MlVSTEJ5VHJ1bmNhdGluZ09uZUNoYXJhY3RlckJlZm9yZUNvbXBvbmVudEVQNU5TVVJMMThD
RlVSTENvbXBvbmVudFR5cGUKIF9fWk43V2ViQ29yZTQ3YXR0cmlidXRlZFN0cmluZ0J5U3RyaXBw
aW5nQXR0YWNobWVudENoYXJhY3RlcnNFUDE4TlNBdHRyaWJ1dGVkU3RyaW5nCitfX1pON1dlYkNv
cmU0Rm9udEQxRXYKIF9fWk43V2ViQ29yZTRJY29uMThjcmVhdGVJY29uRm9yRmlsZXNFUktOM1dU
RjZWZWN0b3JJTlMxXzZTdHJpbmdFTG0wRU5TMV8xNUNyYXNoT25PdmVyZmxvd0VFRQogX19aTjdX
ZWJDb3JlNEljb25EMUV2CiBfX1pON1dlYkNvcmU0Tm9kZTEwcmVuZGVyUmVjdEVQYgpAQCAtMTQ5
MiwxMSArMTQ5MiwxMSBAQCBfX1pON1dlYkNvcmU5RmxvYXRSZWN0QzFFUktOU183SW50UmVjdEUK
IF9fWk43V2ViQ29yZTlGbG9hdFNpemVDMUVSSzZDR1NpemUKIF9fWk43V2ViQ29yZTlGbG9hdFNp
emVDMUVSS05TXzdJbnRTaXplRQogX19aTjdXZWJDb3JlOUZvbnRDYWNoZTEwaW52YWxpZGF0ZUV2
Ci1fX1pON1dlYkNvcmU5Rm9udENhY2hlMTNmb250RGF0YUNvdW50RXYKIF9fWk43V2ViQ29yZTlG
b250Q2FjaGUxM2ZvbnRGb3JGYW1pbHlFUktOU18xNUZvbnREZXNjcmlwdGlvbkVSS04zV1RGMTJB
dG9taWNTdHJpbmdFYgotX19aTjdXZWJDb3JlOUZvbnRDYWNoZTIxaW5hY3RpdmVGb250RGF0YUNv
dW50RXYKK19fWk43V2ViQ29yZTlGb250Q2FjaGUxN2luYWN0aXZlRm9udENvdW50RXYKIF9fWk43
V2ViQ29yZTlGb250Q2FjaGUyMXB1cmdlSW5hY3RpdmVGb250RGF0YUVpCiBfX1pON1dlYkNvcmU5
Rm9udENhY2hlMjlwdXJnZUluYWN0aXZlRm9udERhdGFJZk5lZWRlZEV2CitfX1pON1dlYkNvcmU5
Rm9udENhY2hlOWZvbnRDb3VudEV2CiBfX1pON1dlYkNvcmU5RnJhbWVUcmVlMTFhcHBlbmRDaGls
ZEVOM1dURjEwUGFzc1JlZlB0cklOU181RnJhbWVFRUUKIF9fWk43V2ViQ29yZTlGcmFtZVRyZWU3
c2V0TmFtZUVSS04zV1RGMTJBdG9taWNTdHJpbmdFCiBfX1pON1dlYkNvcmU5RnJhbWVUcmVlOWNs
ZWFyTmFtZUV2CkBAIC0xNjM0LDggKzE2MzQsOCBAQCBfX1pOSzNXVEY2U3RyaW5nMTRjcmVhdGVD
RlN0cmluZ0V2CiBfX1pOSzdXZWJDb3JlMTBDcmVkZW50aWFsMTJuc0NyZWRlbnRpYWxFdgogX19a
Tks3V2ViQ29yZTEwQ3JlZGVudGlhbDdpc0VtcHR5RXYKIF9fWk5LN1dlYkNvcmUxMEZsb2F0UG9p
bnRjdjdDR1BvaW50RXYKLV9fWk5LN1dlYkNvcmUxMEZvbnRSYW5nZXMyMGZvbnREYXRhRm9yQ2hh
cmFjdGVyRWkKLV9fWk5LN1dlYkNvcmUxMEZvbnRSYW5nZXMyMWZvbnREYXRhRm9yRmlyc3RSYW5n
ZUV2CitfX1pOSzdXZWJDb3JlMTBGb250UmFuZ2VzMTZmb250Rm9yQ2hhcmFjdGVyRWkKK19fWk5L
N1dlYkNvcmUxMEZvbnRSYW5nZXMxN2ZvbnRGb3JGaXJzdFJhbmdlRXYKIF9fWk5LN1dlYkNvcmUx
MExheW91dFJlY3Q4Y29udGFpbnNFUktTMF8KIF9fWk5LN1dlYkNvcmUxMFBsdWdpbkRhdGExNnN1
cHBvcnRzTWltZVR5cGVFUktOM1dURjZTdHJpbmdFTlMwXzE4QWxsb3dlZFBsdWdpblR5cGVzRQog
X19aTks3V2ViQ29yZTEwUmVuZGVyVGV4dDE2Zmlyc3RSdW5Mb2NhdGlvbkV2CkBAIC0xNjY1LDcg
KzE2NjUsNyBAQCBfX1pOSzdXZWJDb3JlMTBUaW1lUmFuZ2VzM2VuZEVqUmkKIF9fWk5LN1dlYkNv
cmUxMFRpbWVSYW5nZXM0Y29weUV2CiBfX1pOSzdXZWJDb3JlMTBUaW1lUmFuZ2VzNXN0YXJ0RWpS
aQogX19aTks3V2ViQ29yZTEwVGltZVJhbmdlczZsZW5ndGhFdgotX19aTks3V2ViQ29yZTExRm9u
dENhc2NhZGU1d2lkdGhFUktOU183VGV4dFJ1bkVQTjNXVEY3SGFzaFNldElQS05TXzE0U2ltcGxl
Rm9udERhdGFFTlM0XzdQdHJIYXNoSVM4X0VFTlM0XzEwSGFzaFRyYWl0c0lTOF9FRUVFUE5TXzEz
R2x5cGhPdmVyZmxvd0UKK19fWk5LN1dlYkNvcmUxMUZvbnRDYXNjYWRlNXdpZHRoRVJLTlNfN1Rl
eHRSdW5FUE4zV1RGN0hhc2hTZXRJUEtOU180Rm9udEVOUzRfN1B0ckhhc2hJUzhfRUVOUzRfMTBI
YXNoVHJhaXRzSVM4X0VFRUVQTlNfMTNHbHlwaE92ZXJmbG93RQogX19aTks3V2ViQ29yZTExRm9u
dENhc2NhZGU4ZHJhd1RleHRFUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfN1RleHRSdW5FUktO
U18xMEZsb2F0UG9pbnRFaWlOUzBfMjRDdXN0b21Gb250Tm90UmVhZHlBY3Rpb25FCiBfX1pOSzdX
ZWJDb3JlMTFGb250Q2FzY2FkZWVxRVJLUzBfCiBfX1pOSzdXZWJDb3JlMTFGcmFtZUxvYWRlcjEw
aXNDb21wbGV0ZUV2CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29y
ZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9X
ZWJDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTgwMjcsNiArODAy
Nyw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGbG9h
dFJlY3QuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhp
Y3NcRmxvYXRSb3VuZGVkUmVjdC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxw
bGF0Zm9ybVxncmFwaGljc1xGbG9hdFNpemUuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGb250Q2FjaGUuY3BwIiAvPgogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udENhc2NhZGUuY3BwIiAvPgogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udERlc2NyaXB0aW9u
LmNwcCIgLz4KQEAgLTgwNjksNyArODA3MCw2IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxwbGF0Zm9ybVxncmFwaGljc1xSZWdpb24uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcUm91bmRlZFJlY3QuY3BwIiAvPgogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcU2hhZG93Qmx1ci5jcHAiIC8+Ci0gICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xTaW1wbGVGb250RGF0YS5j
cHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xUZXh0
UnVuLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNz
XFRleHRUcmFja1JlcHJlc2VudGF0aW9uLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXFdPRkZGaWxlRm9ybWF0LmNwcCIgLz4KQEAgLTE5NTE2LDYg
KzE5NTE2LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNz
XEZsb2F0Um91bmRlZFJlY3QuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRm
b3JtXGdyYXBoaWNzXEZsb2F0U2l6ZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cGxhdGZvcm1cZ3JhcGhpY3NcRmxvYXRTaXplSGFzaC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udENhY2hlLmgiIC8+CiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGb250Q2FzY2FkZS5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udERlc2NyaXB0aW9uLmgi
IC8+CkBAIC0xOTU2OCw3ICsxOTU2OSw2IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxw
bGF0Zm9ybVxncmFwaGljc1xSZWdpb24uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHBsYXRmb3JtXGdyYXBoaWNzXFJvdW5kZWRSZWN0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xTaGFkb3dCbHVyLmgiIC8+Ci0gICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xTaW1wbGVGb250RGF0YS5oIiAvPgogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcVGV4dFJ1bi5oIiAvPgog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcVGV4dFRyYWNrUmVw
cmVzZW50YXRpb24uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdy
YXBoaWNzXFVuaXRCZXppZXIuaCIgLz4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtNDcwNSw4ICs0NzA1LDggQEAKIAkJQjJDM0RBNjEwRDAwNkNENjAwRUY2RjI2IC8qIEZv
bnRDYXNjYWRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCMkMzREE1MDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCMkMzREE2MjBEMDA2Q0Q2MDBF
RjZGMjYgLyogRm9udENhY2hlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEIyQzNEQTUxMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FjaGUuY3BwICov
OyB9OwogCQlCMkMzREE2MzBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhY2hlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkMzREE1MjBEMDA2Q0Q2MDBF
RjZGMjYgLyogRm9udENhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKLQkJQjJDM0RBNjQwRDAwNkNENjAwRUY2RjI2IC8qIFNpbXBsZUZvbnREYXRh
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNE
QTUzMEQwMDZDRDYwMEVGNkYyNiAvKiBTaW1wbGVGb250RGF0YS5jcHAgKi87IH07Ci0JCUIyQzNE
QTY1MEQwMDZDRDYwMEVGNkYyNiAvKiBTaW1wbGVGb250RGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBNTQwRDAwNkNENjAwRUY2RjI2IC8q
IFNpbXBsZUZvbnREYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJQjJDM0RBNjQwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBNTMwRDAwNkNENjAw
RUY2RjI2IC8qIEZvbnQuY3BwICovOyB9OworCQlCMkMzREE2NTBEMDA2Q0Q2MDBFRjZGMjYgLyog
Rm9udC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJD
M0RBNTQwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCMkMzREE2NjBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9u
dERlc2NyaXB0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCMkMzREE1NTBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udERlc2NyaXB0aW9uLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjJDM0RBNjcwRDAw
NkNENjAwRUY2RjI2IC8qIEZvbnRHbHlwaHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBNTYwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRHbHlw
aHMuY3BwICovOyB9OwogCQlCMkMzREE2ODBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udEdseXBocy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBNTcw
RDAwNkNENjAwRUY2RjI2IC8qIEZvbnRHbHlwaHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTIwODYsOCArMTIwODYsOCBAQAogCQlCMkMzREE1
MDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEZvbnRDYXNjYWRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUIyQzNEQTUxMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FjaGUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRDYWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUIyQzNEQTUyMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FjaGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRDYWNoZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlCMkMzREE1MzBEMDA2Q0Q2MDBFRjZGMjYgLyogU2ltcGxlRm9udERh
dGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpbXBsZUZvbnRE
YXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjJDM0RBNTQwRDAwNkNENjAw
RUY2RjI2IC8qIFNpbXBsZUZvbnREYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTaW1wbGVGb250RGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCMkMz
REE1MzBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRm9udC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUIy
QzNEQTU0MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBGb250Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQzNEQTU1
MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250RGVzY3JpcHRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEZvbnREZXNjcmlwdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlCMkMzREE1NjBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udEdseXBocy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udEdseXBocy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQzNEQTU3MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250R2x5
cGhzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb250R2x5cGhzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMDU2Myw4ICsyMDU2Myw4IEBACiAJCQkJMzcx
RjRGRkEwRDI1RTdGMzAwRUNFMEQ1IC8qIEZvbnRSYW5nZXMuaCAqLywKIAkJCQkwRjNERDQ0RDEy
RjVFQTFCMDAwRDkxOTAgLyogU2hhZG93Qmx1ci5jcHAgKi8sCiAJCQkJMEYzREQ0NEUxMkY1RUEx
QjAwMEQ5MTkwIC8qIFNoYWRvd0JsdXIuaCAqLywKLQkJCQlCMkMzREE1MzBEMDA2Q0Q2MDBFRjZG
MjYgLyogU2ltcGxlRm9udERhdGEuY3BwICovLAotCQkJCUIyQzNEQTU0MEQwMDZDRDYwMEVGNkYy
NiAvKiBTaW1wbGVGb250RGF0YS5oICovLAorCQkJCUIyQzNEQTUzMEQwMDZDRDYwMEVGNkYyNiAv
KiBGb250LmNwcCAqLywKKwkJCQlCMkMzREE1NDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5oICov
LAogCQkJCUNENjQxRUIyMTgxOEY1RUQwMEVFNEM0MSAvKiBTb3VyY2VCdWZmZXJQcml2YXRlLmgg
Ki8sCiAJCQkJQ0RDOEI1QUMxODA0QUU1RDAwMTZFNjg1IC8qIFNvdXJjZUJ1ZmZlclByaXZhdGVD
bGllbnQuaCAqLywKIAkJCQlCMjM1NDBGMDBEMDA3ODJFMDAyMzgyRkEgLyogU3RyaW5nVHJ1bmNh
dG9yLmNwcCAqLywKQEAgLTI2MDIyLDcgKzI2MDIyLDcgQEAKIAkJCQkxQTRBOTU0RTBCNEVEQ0NC
MDAyRDhDM0MgLyogU2hhcmVkQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0IxRjAyRjEz
QjAyNUQyMDBGNTEwM0YgLyogU2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTkzMzA5RUEzMDk5RUI3OEMwMDU2RTU4MSAvKiBTaGFyZWRUaW1lci5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJQjJDM0RBNjUwRDAwNkNENjAwRUY2RjI2IC8qIFNpbXBsZUZvbnREYXRhLmgg
aW4gSGVhZGVycyAqLywKKwkJCQlCMkMzREE2NTBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRTQ4OTQ0QTMxODBCNTdEODAwRjE2NUQ4IC8qIFNpbXBsZUxpbmVM
YXlvdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0RTlCMTFEMTgxNDU2OUMwMDNBQ0NERiAvKiBT
aW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNEU5QjExOTE4
MTA5MTZGMDAzQUNDREYgLyogU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmggaW4gSGVhZGVycyAq
LywKQEAgLTI5NDU0LDcgKzI5NDU0LDcgQEAKIAkJCQkxQTRBOTU1MjBCNEVEQ0ZGMDAyRDhDM0Mg
LyogU2hhcmVkQnVmZmVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRTQ1MzkwNDYwRUFGRDYz
NzAwMzY5NUM4IC8qIFNoYXJlZFRpbWVySU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlF
QTIwOTlFQjc4QzAwNTZFNTgxIC8qIFNoYXJlZFRpbWVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCi0J
CQkJQjJDM0RBNjQwRDAwNkNENjAwRUY2RjI2IC8qIFNpbXBsZUZvbnREYXRhLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCUIyQzNEQTY0MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTE2M0U4OEY3MTE4QTM5RDIwMEVEOTIzMSAvKiBTaW1wbGVGb250RGF0YUNv
cmVUZXh0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTM3RTY1OTUwMTYzQjEwQzIwMEVCNDU3NCAv
KiBTaW1wbGVGb250RGF0YUlPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUIyQUZGQzdGMEQwMEE1
QzEwMDMwMDc0RCAvKiBTaW1wbGVGb250RGF0YU1hYy5tbSBpbiBTb3VyY2VzICovLApJbmRleDog
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXJJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9p
b3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0JKHJldmlzaW9uIDE3ODg1NykK
KysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVySU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNzU4LDcgKzE3NTgsNyBAQCBzdGF0
aWMgdm9pZCBBWEF0dHJpYnV0ZVN0cmluZ1NldFN0eWxlKE5TCiAgICAgUmVuZGVyU3R5bGUmIHN0
eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7CiAgICAgCiAgICAgLy8gc2V0IGJhc2ljIGZvbnQgaW5m
bwotICAgIEFYQXR0cmlidXRlU3RyaW5nU2V0Rm9udChhdHRyU3RyaW5nLCBzdHlsZS5mb250Q2Fz
Y2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmdldENURm9udCgpLCByYW5nZSk7CisgICAgQVhBdHRy
aWJ1dGVTdHJpbmdTZXRGb250KGF0dHJTdHJpbmcsIHN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFy
eUZvbnQoKS5nZXRDVEZvbnQoKSwgcmFuZ2UpOwogICAgICAgICAgICAgICAgIAogICAgIGludCBk
ZWNvciA9IHN0eWxlLnRleHREZWNvcmF0aW9uc0luRWZmZWN0KCk7CiAgICAgaWYgKChkZWNvciAm
IChUZXh0RGVjb3JhdGlvblVuZGVybGluZSB8IFRleHREZWNvcmF0aW9uTGluZVRocm91Z2gpKSAh
PSAwKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlckJhc2UubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlLm1tCShy
ZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYg
KzQ2LDcgQEAKICNpbXBvcnQgIkNocm9tZUNsaWVudC5oIgogI2ltcG9ydCAiQ29sb3JNYWMuaCIK
ICNpbXBvcnQgIkNvbnRleHRNZW51Q29udHJvbGxlci5oIgorI2ltcG9ydCAiRm9udC5oIgogI2lt
cG9ydCAiRm9udENhc2NhZGUuaCIKICNpbXBvcnQgIkZyYW1lLmgiCiAjaW1wb3J0ICJGcmFtZUxv
YWRlckNsaWVudC5oIgpAQCAtNjMsNyArNjQsNiBAQAogI2ltcG9ydCAiUmVuZGVyVmlldy5oIgog
I2ltcG9ydCAiUmVuZGVyV2lkZ2V0LmgiCiAjaW1wb3J0ICJTY3JvbGxWaWV3LmgiCi0jaW1wb3J0
ICJTaW1wbGVGb250RGF0YS5oIgogI2ltcG9ydCAiVGV4dENoZWNrZXJDbGllbnQuaCIKICNpbXBv
cnQgIlRleHRDaGVja2luZ0hlbHBlci5oIgogI2ltcG9ydCAiVmlzaWJsZVVuaXRzLmgiCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQkocmV2aXNpb24gMTc4ODU3
KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbXBv
cnQgIkNvbG9yTWFjLmgiCiAjaW1wb3J0ICJDb250ZXh0TWVudUNvbnRyb2xsZXIuaCIKICNpbXBv
cnQgIkVkaXRvci5oIgorI2ltcG9ydCAiRm9udC5oIgogI2ltcG9ydCAiRm9udENhc2NhZGUuaCIK
ICNpbXBvcnQgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW1wb3J0ICJGcmFtZVNlbGVjdGlvbi5o
IgpAQCAtNjQsNyArNjUsNiBAQAogI2ltcG9ydCAiUmVuZGVyVmlldy5oIgogI2ltcG9ydCAiUmVu
ZGVyV2lkZ2V0LmgiCiAjaW1wb3J0ICJTY3JvbGxWaWV3LmgiCi0jaW1wb3J0ICJTaW1wbGVGb250
RGF0YS5oIgogI2ltcG9ydCAiVGV4dENoZWNrZXJDbGllbnQuaCIKICNpbXBvcnQgIlRleHRDaGVj
a2luZ0hlbHBlci5oIgogI2ltcG9ydCAiVGV4dEl0ZXJhdG9yLmgiCkBAIC04NDgsNyArODQ4LDcg
QEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVTdHJpbmdTZXRTdHlsZShOUwogICAgIGNvbnN0IFJl
bmRlclN0eWxlJiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwogICAgIAogICAgIC8vIHNldCBi
YXNpYyBmb250IGluZm8KLSAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldEZvbnQoYXR0clN0cmluZywg
TlNBY2Nlc3NpYmlsaXR5Rm9udFRleHRBdHRyaWJ1dGUsIHN0eWxlLmZvbnRDYXNjYWRlKCkucHJp
bWFyeUZvbnREYXRhKCkuZ2V0TlNGb250KCksIHJhbmdlKTsKKyAgICBBWEF0dHJpYnV0ZVN0cmlu
Z1NldEZvbnQoYXR0clN0cmluZywgTlNBY2Nlc3NpYmlsaXR5Rm9udFRleHRBdHRyaWJ1dGUsIHN0
eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKS5nZXROU0ZvbnQoKSwgcmFuZ2UpOwogICAg
IAogICAgIC8vIHNldCBiYXNpYyBjb2xvcnMKICAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldENvbG9y
KGF0dHJTdHJpbmcsIE5TQWNjZXNzaWJpbGl0eUZvcmVncm91bmRDb2xvclRleHRBdHRyaWJ1dGUs
IG5zQ29sb3Ioc3R5bGUudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpKSwg
cmFuZ2UpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0JKHJldmlzaW9uIDE3
ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC02NjksNyArNjY5LDcgQEAgLSAoTlNGb250ICopX2ZvbnQKICAgICBhdXRvIHJlbmRl
cmVyID0gY29yZShzZWxmKS0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAg
ICByZXR1cm4gbmlsOwotICAgIHJldHVybiByZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgp
LnByaW1hcnlGb250RGF0YSgpLmdldE5TRm9udCgpOworICAgIHJldHVybiByZW5kZXJlci0+c3R5
bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCkuZ2V0TlNGb250KCk7CiB9CiAjZWxzZQog
LSAoQ1RGb250UmVmKV9mb250CkBAIC02NzcsNyArNjc3LDcgQEAgLSAoQ1RGb250UmVmKV9mb250
CiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNvcmUoc2VsZiktPnJlbmRlcmVyKCk7CiAg
ICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4gcmVuZGVy
ZXItPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXRDVEZvbnQoKTsK
KyAgICByZXR1cm4gcmVuZGVyZXItPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgp
LmdldENURm9udCgpOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NG
b250RmFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNl
LmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTAgKzMwLDEwIEBACiAjaW5jbHVkZSAiQ1NTRm9u
dFNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ1NTU2VnbWVudGVkRm9udEZhY2UuaCIKICNpbmNsdWRl
ICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGb250RGVzY3JpcHRp
b24uaCIKICNpbmNsdWRlICJGb250TG9hZGVyLmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRG
ZWF0dXJlcy5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtMTA4LDcgKzEwOCw3IEBAIHZvaWQgQ1NTRm9udEZhY2U6OmZvbnRMb2FkZWQo
Q1NTRm9udEZhY2UKICNlbmRpZgogfQogCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBDU1NG
b250RmFjZTo6Z2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24sIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpCitSZWZQdHI8Rm9u
dD4gQ1NTRm9udEZhY2U6OmZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24sIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpCiB7CiAgICAgbV9h
Y3RpdmVTb3VyY2UgPSAwOwogICAgIGlmICghaXNWYWxpZCgpKQpAQCAtMTI0LDcgKzEyNCw3IEBA
IFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IENTU0ZvbnRGYWNlOjoKIAogICAgIHNpemVfdCBz
aXplID0gbV9zb3VyY2VzLnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7
ICsraSkgewotICAgICAgICBpZiAoUmVmUHRyPFNpbXBsZUZvbnREYXRhPiByZXN1bHQgPSBtX3Nv
dXJjZXNbaV0tPmdldEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgc3ludGhldGljQm9sZCwgc3lu
dGhldGljSXRhbGljLCBmb250U2VsZWN0b3IpKSB7CisgICAgICAgIGlmIChSZWZQdHI8Rm9udD4g
cmVzdWx0ID0gbV9zb3VyY2VzW2ldLT5mb250KGZvbnREZXNjcmlwdGlvbiwgc3ludGhldGljQm9s
ZCwgc3ludGhldGljSXRhbGljLCBmb250U2VsZWN0b3IpKSB7CiAgICAgICAgICAgICBtX2FjdGl2
ZVNvdXJjZSA9IG1fc291cmNlc1tpXS5nZXQoKTsKICNpZiBFTkFCTEUoRk9OVF9MT0FEX0VWRU5U
UykKICAgICAgICAgICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLmZvbnRMb2FkRXZlbnRzRW5hYmxlZCgpICYmIG1fbG9hZFN0YXRlID09IExvYWRpbmcgJiYg
bV9zb3VyY2VzW2ldLT5pc0xvYWRlZCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
Rm9udEZhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2Uu
aAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBDU1NTZWdtZW50ZWRGb250RmFjZTsKIGNsYXNzIEZvbnREZXNjcmlwdGlvbjsKLWNsYXNz
IFNpbXBsZUZvbnREYXRhOworY2xhc3MgRm9udDsKIAogY2xhc3MgQ1NTRm9udEZhY2UgOiBwdWJs
aWMgUmVmQ291bnRlZDxDU1NGb250RmFjZT4gewogcHVibGljOgpAQCAtNjUsNyArNjUsNyBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIGZvbnRMb2FkZWQoQ1NTRm9udEZhY2VTb3VyY2UqKTsKIAotICAg
IFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IGdldEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpOworICAgIFJl
ZlB0cjxGb250PiBmb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGJvb2wgc3ludGhldGljQm9s
ZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpOwogCiAgICAgc3RydWN0IFVuaWNvZGVSYW5nZSB7CiAg
ICAgICAgIFVuaWNvZGVSYW5nZShVQ2hhcjMyIGZyb20sIFVDaGFyMzIgdG8pCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5jcHAJKHJldmlzaW9uIDE3ODg1NykKKysr
IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDkgKzMyLDkgQEAKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgogI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRWxlbWVudEl0ZXJhdG9yLmgiCisjaW5jbHVk
ZSAiRm9udC5oIgogI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgogI2luY2x1ZGUgIkZvbnREZXNjcmlw
dGlvbi5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAKICNpZiBFTkFCTEUoU1ZHX09U
Rl9DT05WRVJURVIpCiAjaW5jbHVkZSAiRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oIgpAQCAtNzQs
MTAgKzc0LDEwIEBAIENTU0ZvbnRGYWNlU291cmNlOjp+Q1NTRm9udEZhY2VTb3VyY2UoKQogCiB2
b2lkIENTU0ZvbnRGYWNlU291cmNlOjpwcnVuZVRhYmxlKCkKIHsKLSAgICBpZiAobV9mb250RGF0
YVRhYmxlLmlzRW1wdHkoKSkKKyAgICBpZiAobV9mb250VGFibGUuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBtX2ZvbnREYXRhVGFibGUuY2xlYXIoKTsKKyAgICBtX2ZvbnRUYWJs
ZS5jbGVhcigpOwogfQogCiBib29sIENTU0ZvbnRGYWNlU291cmNlOjppc0xvYWRlZCgpIGNvbnN0
CkBAIC0xMDEsNyArMTAxLDcgQEAgdm9pZCBDU1NGb250RmFjZVNvdXJjZTo6Zm9udExvYWRlZChD
YWNoZQogICAgICAgICBtX2ZhY2UtPmZvbnRMb2FkZWQodGhpcyk7CiB9CiAKLVBhc3NSZWZQdHI8
U2ltcGxlRm9udERhdGE+IENTU0ZvbnRGYWNlU291cmNlOjpnZXRGb250RGF0YShjb25zdCBGb250
RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5
bnRoZXRpY0l0YWxpYywgQ1NTRm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IpCitSZWZQdHI8Rm9u
dD4gQ1NTRm9udEZhY2VTb3VyY2U6OmZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVz
Y3JpcHRpb24sIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMsIENTU0Zv
bnRTZWxlY3RvciogZm9udFNlbGVjdG9yKQogewogICAgIC8vIElmIHRoZSBmb250IGhhc24ndCBs
b2FkZWQgb3IgYW4gZXJyb3Igb2NjdXJyZWQsIHRoZW4gd2UndmUgZ290IG5vdGhpbmcuCiAgICAg
aWYgKCFpc1ZhbGlkKCkpCkBAIC0xMTIsMTggKzExMiwxNyBAQCBQYXNzUmVmUHRyPFNpbXBsZUZv
bnREYXRhPiBDU1NGb250RmFjZVNvCiAgICAgICAgICAgICAmJiAhbV9zdmdGb250RmFjZUVsZW1l
bnQKICNlbmRpZgogICAgICkgewotICAgICAgICAvLyBXZSdyZSBsb2NhbC4gSnVzdCByZXR1cm4g
YSBTaW1wbGVGb250RGF0YSBmcm9tIHRoZSBub3JtYWwgY2FjaGUuCisgICAgICAgIC8vIFdlJ3Jl
IGxvY2FsLiBKdXN0IHJldHVybiBhIEZvbnQgZnJvbSB0aGUgbm9ybWFsIGNhY2hlLgogICAgICAg
ICAvLyBXZSBkb24ndCB3YW50IHRvIGNoZWNrIGFsdGVybmF0ZSBmb250IGZhbWlseSBuYW1lcyBo
ZXJlLCBzbyBwYXNzIHRydWUgYXMgdGhlIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSBwYXJhbWV0ZXIu
CiAgICAgICAgIHJldHVybiBmb250Q2FjaGUoKS5mb250Rm9yRmFtaWx5KGZvbnREZXNjcmlwdGlv
biwgbV9zdHJpbmcsIHRydWUpOwogICAgIH0KIAotICAgIC8vIFNlZSBpZiB3ZSBoYXZlIGEgbWFw
cGluZyBpbiBvdXIgRm9udERhdGEgY2FjaGUuCiAgICAgdW5zaWduZWQgaGFzaEtleSA9IChmb250
RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSArIDEpIDw8IDUgfCBmb250RGVzY3JpcHRp
b24ud2lkdGhWYXJpYW50KCkgPDwgMwogICAgICAgICAgICAgICAgICAgICAgICB8IChmb250RGVz
Y3JpcHRpb24ub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCA/IDQgOiAwKSB8IChzeW50aGV0aWNC
b2xkID8gMiA6IDApIHwgKHN5bnRoZXRpY0l0YWxpYyA/IDEgOiAwKTsKIAotICAgIFJlZlB0cjxT
aW1wbGVGb250RGF0YT4gZm9udERhdGEgPSBtX2ZvbnREYXRhVGFibGUuYWRkKGhhc2hLZXksIG51
bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKLSAgICBpZiAoZm9udERhdGEpCi0gICAgICAgIHJldHVy
biBmb250RGF0YS5yZWxlYXNlKCk7CisgICAgUmVmUHRyPEZvbnQ+IGZvbnQgPSBtX2ZvbnRUYWJs
ZS5hZGQoaGFzaEtleSwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOworICAgIGlmIChmb250KQor
ICAgICAgICByZXR1cm4gZm9udC5yZWxlYXNlKCk7CiAKICAgICAvLyBJZiB3ZSBhcmUgc3RpbGwg
bG9hZGluZywgdGhlbiB3ZSBsZXQgdGhlIHN5c3RlbSBwaWNrIGEgZm9udC4KICAgICBpZiAoaXNM
b2FkZWQoKSkgewpAQCAtMTM2LDcgKzEzNSw3IEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+
IENTU0ZvbnRGYWNlU28KICAgICAgICAgICAgIGlmICghbV9mb250LT5lbnN1cmVDdXN0b21Gb250
RGF0YShoYXNFeHRlcm5hbFNWR0ZvbnQsIG1fc3RyaW5nKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAotICAgICAgICAgICAgZm9udERhdGEgPSBtX2ZvbnQtPmdldEZvbnREYXRh
KGZvbnREZXNjcmlwdGlvbiwgbV9zdHJpbmcsIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxp
YywgaGFzRXh0ZXJuYWxTVkdGb250KTsKKyAgICAgICAgICAgIGZvbnQgPSBtX2ZvbnQtPmNyZWF0
ZUZvbnQoZm9udERlc2NyaXB0aW9uLCBtX3N0cmluZywgc3ludGhldGljQm9sZCwgc3ludGhldGlj
SXRhbGljLCBoYXNFeHRlcm5hbFNWR0ZvbnQpOwogICAgICAgICB9IGVsc2UgewogI2lmIEVOQUJM
RShTVkdfRk9OVFMpCiAgICAgICAgICAgICAvLyBJbi1Eb2N1bWVudCBTVkcgRm9udHMKQEAgLTE1
Miw5ICsxNTEsOSBAQCBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBDU1NGb250RmFjZVNvCiAg
ICAgICAgICAgICAgICAgaWYgKCFtX2dlbmVyYXRlZE9URkJ1ZmZlcikKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEZv
bnRDdXN0b21QbGF0Zm9ybURhdGE+IGN1c3RvbVBsYXRmb3JtRGF0YSA9IGNyZWF0ZUZvbnRDdXN0
b21QbGF0Zm9ybURhdGEoKm1fZ2VuZXJhdGVkT1RGQnVmZmVyKTsKLSAgICAgICAgICAgICAgICBm
b250RGF0YSA9IFNpbXBsZUZvbnREYXRhOjpjcmVhdGUoY3VzdG9tUGxhdGZvcm1EYXRhLT5mb250
UGxhdGZvcm1EYXRhKHN0YXRpY19jYXN0PGludD4oZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4
ZWxTaXplKCkpLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMsIGZvbnREZXNjcmlwdGlv
bi5vcmllbnRhdGlvbigpLCBmb250RGVzY3JpcHRpb24ud2lkdGhWYXJpYW50KCksIGZvbnREZXNj
cmlwdGlvbi5yZW5kZXJpbmdNb2RlKCkpLCB0cnVlLCBmYWxzZSk7CisgICAgICAgICAgICAgICAg
Zm9udCA9IEZvbnQ6OmNyZWF0ZShjdXN0b21QbGF0Zm9ybURhdGEtPmZvbnRQbGF0Zm9ybURhdGEo
c3RhdGljX2Nhc3Q8aW50Pihmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSksIHN5
bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYywgZm9udERlc2NyaXB0aW9uLm9yaWVudGF0aW9u
KCksIGZvbnREZXNjcmlwdGlvbi53aWR0aFZhcmlhbnQoKSwgZm9udERlc2NyaXB0aW9uLnJlbmRl
cmluZ01vZGUoKSksIHRydWUsIGZhbHNlKTsKICNlbHNlCi0gICAgICAgICAgICAgICAgZm9udERh
dGEgPSBTaW1wbGVGb250RGF0YTo6Y3JlYXRlKHN0ZDo6bWFrZV91bmlxdWU8U1ZHRm9udERhdGE+
KG1fc3ZnRm9udEZhY2VFbGVtZW50LmdldCgpKSwgZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4
ZWxTaXplKCksIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYyk7CisgICAgICAgICAgICAg
ICAgZm9udCA9IEZvbnQ6OmNyZWF0ZShzdGQ6Om1ha2VfdW5pcXVlPFNWR0ZvbnREYXRhPihtX3N2
Z0ZvbnRGYWNlRWxlbWVudC5nZXQoKSksIGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6
ZSgpLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMpOwogI2VuZGlmCiAgICAgICAgICAg
ICB9CiAjZW5kaWYKQEAgLTE2NCwxMiArMTYzLDEyIEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERh
dGE+IENTU0ZvbnRGYWNlU28KICAgICAgICAgLy8gYW5kIHRoZSBsb2FkZXIgbWF5IGludm9rZSBh
cmJpdHJhcnkgZGVsZWdhdGUgb3IgZXZlbnQgaGFuZGxlciBjb2RlLgogICAgICAgICBmb250U2Vs
ZWN0b3ItPmJlZ2luTG9hZGluZ0ZvbnRTb29uKG1fZm9udC5nZXQoKSk7CiAKLSAgICAgICAgUmVm
PFNpbXBsZUZvbnREYXRhPiBwbGFjZWhvbGRlckZvbnQgPSBmb250Q2FjaGUoKS5sYXN0UmVzb3J0
RmFsbGJhY2tGb250KGZvbnREZXNjcmlwdGlvbik7Ci0gICAgICAgIFJlZjxTaW1wbGVGb250RGF0
YT4gcGxhY2Vob2xkZXJGb250Q29weUluTG9hZGluZ1N0YXRlID0gU2ltcGxlRm9udERhdGE6OmNy
ZWF0ZShwbGFjZWhvbGRlckZvbnQtPnBsYXRmb3JtRGF0YSgpLCB0cnVlLCB0cnVlKTsKKyAgICAg
ICAgUmVmPEZvbnQ+IHBsYWNlaG9sZGVyRm9udCA9IGZvbnRDYWNoZSgpLmxhc3RSZXNvcnRGYWxs
YmFja0ZvbnQoZm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgUmVmPEZvbnQ+IHBsYWNlaG9sZGVy
Rm9udENvcHlJbkxvYWRpbmdTdGF0ZSA9IEZvbnQ6OmNyZWF0ZShwbGFjZWhvbGRlckZvbnQtPnBs
YXRmb3JtRGF0YSgpLCB0cnVlLCB0cnVlKTsKICAgICAgICAgcmV0dXJuIFdURjo6bW92ZShwbGFj
ZWhvbGRlckZvbnRDb3B5SW5Mb2FkaW5nU3RhdGUpOwogICAgIH0KIAotICAgIHJldHVybiBmb250
RGF0YS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIGZvbnQucmVsZWFzZSgpOwogfQogCiAjaWYgRU5B
QkxFKEZPTlRfTE9BRF9FVkVOVFMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZh
Y2VTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VT
b3VyY2UuaAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRG
YWNlU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDggKzQyLDggQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogY2xhc3MgQ2FjaGVkRm9udDsKIGNsYXNzIENTU0ZvbnRGYWNlOwogY2xhc3MgQ1NT
Rm9udFNlbGVjdG9yOworY2xhc3MgRm9udDsKIGNsYXNzIEZvbnREZXNjcmlwdGlvbjsKLWNsYXNz
IFNpbXBsZUZvbnREYXRhOwogCiBjbGFzcyBDU1NGb250RmFjZVNvdXJjZSBmaW5hbCA6IHB1Ymxp
YyBDYWNoZWRGb250Q2xpZW50IHsKIHB1YmxpYzoKQEAgLTU5LDcgKzU5LDcgQEAgcHVibGljOgog
CiAgICAgdmlydHVhbCB2b2lkIGZvbnRMb2FkZWQoQ2FjaGVkRm9udCopIG92ZXJyaWRlOwogCi0g
ICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gZ2V0Rm9udERhdGEoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYywgQ1NTRm9u
dFNlbGVjdG9yKik7CisgICAgUmVmUHRyPEZvbnQ+IGZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9u
JiwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYywgQ1NTRm9udFNlbGVj
dG9yKik7CiAKICAgICB2b2lkIHBydW5lVGFibGUoKTsKIApAQCAtODEsNyArODEsNyBAQCBwcml2
YXRlOgogICAgIEF0b21pY1N0cmluZyBtX3N0cmluZzsgLy8gVVJJIGZvciByZW1vdGUsIGJ1aWx0
LWluIGZvbnQgbmFtZSBmb3IgbG9jYWwuCiAgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVk
Rm9udD4gbV9mb250OyAvLyBGb3IgcmVtb3RlIGZvbnRzLCBhIHBvaW50ZXIgdG8gb3VyIGNhY2hl
ZCByZXNvdXJjZS4KICAgICBDU1NGb250RmFjZSogbV9mYWNlOyAvLyBPdXIgb3duaW5nIGZvbnQg
ZmFjZS4KLSAgICBIYXNoTWFwPHVuc2lnbmVkLCBSZWZQdHI8U2ltcGxlRm9udERhdGE+PiBtX2Zv
bnREYXRhVGFibGU7IC8vIFRoZSBoYXNoIGtleSBpcyBjb21wb3NlZCBvZiBzaXplIHN5bnRoZXRp
YyBzdHlsZXMuCisgICAgSGFzaE1hcDx1bnNpZ25lZCwgUmVmUHRyPEZvbnQ+PiBtX2ZvbnRUYWJs
ZTsgLy8gVGhlIGhhc2gga2V5IGlzIGNvbXBvc2VkIG9mIHNpemUgc3ludGhldGljIHN0eWxlcy4K
IAogI2lmIEVOQUJMRShTVkdfT1RGX0NPTlZFUlRFUikKICAgICBSZWZQdHI8U2hhcmVkQnVmZmVy
PiBtX2dlbmVyYXRlZE9URkJ1ZmZlcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250
U2VsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2Vs
ZWN0b3IuY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9u
dFNlbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTMgKzQwLDEzIEBACiAjaW5jbHVk
ZSAiQ1NTVmFsdWVMaXN0LmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKICNp
bmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGb250Q2Fj
aGUuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5j
bHVkZSAiU1ZHRm9udEZhY2VFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNs
dWRlICJTZXR0aW5ncy5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5jbHVkZSAi
U3R5bGVQcm9wZXJ0aWVzLmgiCiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUg
IlN0eWxlUnVsZS5oIgpAQCAtNjEyLDcgKzYxMiw3IEBAIGJvb2wgQ1NTRm9udFNlbGVjdG9yOjpy
ZXNvbHZlc0ZhbWlseUZvcigKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXNpemVfdCBDU1NGb250
U2VsZWN0b3I6OmZhbGxiYWNrRm9udERhdGFDb3VudCgpCitzaXplX3QgQ1NTRm9udFNlbGVjdG9y
OjpmYWxsYmFja0ZvbnRDb3VudCgpCiB7CiAgICAgaWYgKCFtX2RvY3VtZW50KQogICAgICAgICBy
ZXR1cm4gMDsKQEAgLTYyMyw3ICs2MjMsNyBAQCBzaXplX3QgQ1NTRm9udFNlbGVjdG9yOjpmYWxs
YmFja0ZvbnREYXRhCiAgICAgcmV0dXJuIDA7CiB9CiAKLVBhc3NSZWZQdHI8U2ltcGxlRm9udERh
dGE+IENTU0ZvbnRTZWxlY3Rvcjo6ZmFsbGJhY2tGb250RGF0YUF0KGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZm9udERlc2NyaXB0aW9uLCBzaXplX3QgaW5kZXgpCitQYXNzUmVmUHRyPEZvbnQ+IENT
U0ZvbnRTZWxlY3Rvcjo6ZmFsbGJhY2tGb250QXQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHRpb24sIHNpemVfdCBpbmRleCkKIHsKICAgICBBU1NFUlRfVU5VU0VEKGluZGV4LCAh
aW5kZXgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5oCShyZXZpc2lv
biAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI3LDggKzI3LDggQEAKICNkZWZpbmUgQ1NTRm9udFNlbGVjdG9yX2gKIAog
I2luY2x1ZGUgIkNhY2hlZFJlc291cmNlSGFuZGxlLmgiCisjaW5jbHVkZSAiRm9udC5oIgogI2lu
Y2x1ZGUgIkZvbnRTZWxlY3Rvci5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5j
bHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KQEAgLTU5LDggKzU5LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdW5zaWduZWQgdW5pcXVl
SWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3VuaXF1ZUlkOyB9CiAKICAgICB2aXJ0dWFs
IEZvbnRSYW5nZXMgZm9udFJhbmdlc0ZvckZhbWlseShjb25zdCBGb250RGVzY3JpcHRpb24mLCBj
b25zdCBBdG9taWNTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHNpemVfdCBmYWxsYmFj
a0ZvbnREYXRhQ291bnQoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U2ltcGxl
Rm9udERhdGE+IGZhbGxiYWNrRm9udERhdGFBdChjb25zdCBGb250RGVzY3JpcHRpb24mLCBzaXpl
X3QpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgc2l6ZV90IGZhbGxiYWNrRm9udENvdW50KCkgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEZvbnQ+IGZhbGxiYWNrRm9udEF0KGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYsIHNpemVfdCkgb3ZlcnJpZGU7CiAgICAgQ1NTU2VnbWVudGVkRm9u
dEZhY2UqIGdldEZvbnRGYWNlKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0
cmluZyYgZmFtaWx5KTsKIAogICAgIHZpcnR1YWwgYm9vbCByZXNvbHZlc0ZhbWlseUZvcihjb25z
dCBGb250RGVzY3JpcHRpb24mKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291
cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzAsOSArMzAsOSBAQAogI2luY2x1ZGUgIkNTU0ZvbnRGYWNlU291cmNlLmgiCiAjaW5jbHVk
ZSAiQ1NTRm9udFNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJG
b250LmgiCiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiUnVudGltZUVu
YWJsZWRGZWF0dXJlcy5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApAQCAtOTAsMjEgKzkwLDIxIEBAIHZvaWQgQ1NTU2VnbWVudGVkRm9udEZh
Y2U6OmFwcGVuZEZvbnRGYWMKICAgICBtX2ZvbnRGYWNlcy5hcHBlbmQoZm9udEZhY2UpOwogfQog
Ci1zdGF0aWMgdm9pZCBhcHBlbmRGb250RGF0YVdpdGhJbnZhbGlkVW5pY29kZVJhbmdlSWZMb2Fk
aW5nKEZvbnRSYW5nZXMmIHJhbmdlcywgUmVmPFNpbXBsZUZvbnREYXRhPiYmIGZvbnREYXRhLCBj
b25zdCBWZWN0b3I8Q1NTRm9udEZhY2U6OlVuaWNvZGVSYW5nZT4mIHVuaWNvZGVSYW5nZXMpCitz
dGF0aWMgdm9pZCBhcHBlbmRGb250V2l0aEludmFsaWRVbmljb2RlUmFuZ2VJZkxvYWRpbmcoRm9u
dFJhbmdlcyYgcmFuZ2VzLCBSZWY8Rm9udD4mJiBmb250LCBjb25zdCBWZWN0b3I8Q1NTRm9udEZh
Y2U6OlVuaWNvZGVSYW5nZT4mIHVuaWNvZGVSYW5nZXMpCiB7Ci0gICAgaWYgKGZvbnREYXRhLT5p
c0xvYWRpbmcoKSkgewotICAgICAgICByYW5nZXMuYXBwZW5kUmFuZ2UoRm9udFJhbmdlczo6UmFu
Z2UoMCwgMCwgV1RGOjptb3ZlKGZvbnREYXRhKSkpOworICAgIGlmIChmb250LT5pc0xvYWRpbmco
KSkgeworICAgICAgICByYW5nZXMuYXBwZW5kUmFuZ2UoRm9udFJhbmdlczo6UmFuZ2UoMCwgMCwg
V1RGOjptb3ZlKGZvbnQpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICB1bnNpZ25l
ZCBudW1SYW5nZXMgPSB1bmljb2RlUmFuZ2VzLnNpemUoKTsKICAgICBpZiAoIW51bVJhbmdlcykg
ewotICAgICAgICByYW5nZXMuYXBwZW5kUmFuZ2UoRm9udFJhbmdlczo6UmFuZ2UoMCwgMHg3RkZG
RkZGRiwgV1RGOjptb3ZlKGZvbnREYXRhKSkpOworICAgICAgICByYW5nZXMuYXBwZW5kUmFuZ2Uo
Rm9udFJhbmdlczo6UmFuZ2UoMCwgMHg3RkZGRkZGRiwgV1RGOjptb3ZlKGZvbnQpKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgbnVtUmFu
Z2VzOyArK2opCi0gICAgICAgIHJhbmdlcy5hcHBlbmRSYW5nZShGb250UmFuZ2VzOjpSYW5nZSh1
bmljb2RlUmFuZ2VzW2pdLmZyb20oKSwgdW5pY29kZVJhbmdlc1tqXS50bygpLCBmb250RGF0YS5j
b3B5UmVmKCkpKTsKKyAgICAgICAgcmFuZ2VzLmFwcGVuZFJhbmdlKEZvbnRSYW5nZXM6OlJhbmdl
KHVuaWNvZGVSYW5nZXNbal0uZnJvbSgpLCB1bmljb2RlUmFuZ2VzW2pdLnRvKCksIGZvbnQuY29w
eVJlZigpKSk7CiB9CiAKIEZvbnRSYW5nZXMgQ1NTU2VnbWVudGVkRm9udEZhY2U6OmZvbnRSYW5n
ZXMoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pCkBAIC0xMjgsOCArMTI4
LDggQEAgRm9udFJhbmdlcyBDU1NTZWdtZW50ZWRGb250RmFjZTo6Zm9udFJhbgogICAgICAgICAg
ICAgRm9udFRyYWl0c01hc2sgdHJhaXRzTWFzayA9IGZhY2UtPnRyYWl0c01hc2soKTsKICAgICAg
ICAgICAgIGJvb2wgc3ludGhldGljQm9sZCA9ICEodHJhaXRzTWFzayAmIChGb250V2VpZ2h0NjAw
TWFzayB8IEZvbnRXZWlnaHQ3MDBNYXNrIHwgRm9udFdlaWdodDgwME1hc2sgfCBGb250V2VpZ2h0
OTAwTWFzaykpICYmIChkZXNpcmVkVHJhaXRzTWFzayAmIChGb250V2VpZ2h0NjAwTWFzayB8IEZv
bnRXZWlnaHQ3MDBNYXNrIHwgRm9udFdlaWdodDgwME1hc2sgfCBGb250V2VpZ2h0OTAwTWFzaykp
OwogICAgICAgICAgICAgYm9vbCBzeW50aGV0aWNJdGFsaWMgPSAhKHRyYWl0c01hc2sgJiBGb250
U3R5bGVJdGFsaWNNYXNrKSAmJiAoZGVzaXJlZFRyYWl0c01hc2sgJiBGb250U3R5bGVJdGFsaWNN
YXNrKTsKLSAgICAgICAgICAgIGlmIChSZWZQdHI8U2ltcGxlRm9udERhdGE+IGZhY2VGb250RGF0
YSA9IGZhY2UtPmdldEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgc3ludGhldGljQm9sZCwgc3lu
dGhldGljSXRhbGljKSkKLSAgICAgICAgICAgICAgICBhcHBlbmRGb250RGF0YVdpdGhJbnZhbGlk
VW5pY29kZVJhbmdlSWZMb2FkaW5nKGZvbnRSYW5nZXMsIGZhY2VGb250RGF0YS5yZWxlYXNlTm9u
TnVsbCgpLCBmYWNlLT5yYW5nZXMoKSk7CisgICAgICAgICAgICBpZiAoUmVmUHRyPEZvbnQ+IGZh
Y2VGb250ID0gZmFjZS0+Zm9udChmb250RGVzY3JpcHRpb24sIHN5bnRoZXRpY0JvbGQsIHN5bnRo
ZXRpY0l0YWxpYykpCisgICAgICAgICAgICAgICAgYXBwZW5kRm9udFdpdGhJbnZhbGlkVW5pY29k
ZVJhbmdlSWZMb2FkaW5nKGZvbnRSYW5nZXMsIGZhY2VGb250LnJlbGVhc2VOb25OdWxsKCksIGZh
Y2UtPnJhbmdlcygpKTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gZm9udFJhbmdlczsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBA
QCBjbGFzcyBIaXRUZXN0UmVzdWx0OwogY2xhc3MgS2lsbFJpbmc7CiBjbGFzcyBQYXN0ZWJvYXJk
OwogY2xhc3MgU2hhcmVkQnVmZmVyOwotY2xhc3MgU2ltcGxlRm9udERhdGE7CitjbGFzcyBGb250
OwogY2xhc3MgU3BlbGxDaGVja1JlcXVlc3Q7CiBjbGFzcyBTcGVsbENoZWNrZXI7CiBjbGFzcyBT
dHlsZVByb3BlcnRpZXM7CkBAIC00MjIsNyArNDIyLDcgQEAgcHVibGljOgogI2lmIFBMQVRGT1JN
KENPQ09BKQogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZW5kZXJTdHlsZSogc3R5bGVGb3JT
ZWxlY3Rpb25TdGFydChGcmFtZSogLCBOb2RlICombm9kZVRvUmVtb3ZlKTsKICAgICBXRUJDT1JF
X0VYUE9SVCBib29sIGluc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVvdGVkQ29udGVudCgpOwot
ICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250Rm9yU2VsZWN0aW9u
KGJvb2wmKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBGb250KiBmb250Rm9yU2Vs
ZWN0aW9uKGJvb2wmKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBOU0RpY3Rpb25hcnkgKmZv
bnRBdHRyaWJ1dGVzRm9yU2VsZWN0aW9uU3RhcnQoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9S
VCBTdHJpbmcgc3RyaW5nU2VsZWN0aW9uRm9yUGFzdGVib2FyZCgpOwogICAgIFN0cmluZyBzdHJp
bmdTZWxlY3Rpb25Gb3JQYXN0ZWJvYXJkV2l0aEltYWdlQWx0VGV4dCgpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbQkocmV2aXNpb24gMTc4
ODU3KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTE0LDcgKzExMTQsNyBAQCBzdGF0aWMgUGxhdGZvcm1Gb250ICpf
Zm9udChFbGVtZW50JiBlbGVtCiAgICAgYXV0byByZW5kZXJlciA9IGVsZW1lbnQucmVuZGVyZXIo
KTsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiBy
ZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmdldE5TRm9u
dCgpOworICAgIHJldHVybiByZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlG
b250KCkuZ2V0TlNGb250KCk7CiB9CiAjZWxzZQogc3RhdGljIFBsYXRmb3JtRm9udCAqX2ZvbnQo
RWxlbWVudCYgZWxlbWVudCkKQEAgLTExMjIsNyArMTEyMiw3IEBAIHN0YXRpYyBQbGF0Zm9ybUZv
bnQgKl9mb250KEVsZW1lbnQmIGVsZW0KICAgICBhdXRvIHJlbmRlcmVyID0gZWxlbWVudC5yZW5k
ZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgcmV0
dXJuIChQbGF0Zm9ybUZvbnQgKilyZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1h
cnlGb250RGF0YSgpLmdldENURm9udCgpOworICAgIHJldHVybiAoUGxhdGZvcm1Gb250ICopcmVu
ZGVyZXItPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpLmdldENURm9udCgpOwog
fQogI2VuZGlmCiAKQEAgLTI1OTQsMTAgKzI1OTQsMTAgQEAgTlNBdHRyaWJ1dGVkU3RyaW5nICpl
ZGl0aW5nQXR0cmlidXRlZFN0cgogICAgICAgICAgICAgW2F0dHJzLmdldCgpIHNldE9iamVjdDpb
TlNOdW1iZXIgbnVtYmVyV2l0aEludGVnZXI6TlNVbmRlcmxpbmVTdHlsZVNpbmdsZV0gZm9yS2V5
Ok5TVW5kZXJsaW5lU3R5bGVBdHRyaWJ1dGVOYW1lXTsKICAgICAgICAgaWYgKHN0eWxlLnRleHRE
ZWNvcmF0aW9uc0luRWZmZWN0KCkgJiBUZXh0RGVjb3JhdGlvbkxpbmVUaHJvdWdoKQogICAgICAg
ICAgICAgW2F0dHJzLmdldCgpIHNldE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aEludGVnZXI6
TlNVbmRlcmxpbmVTdHlsZVNpbmdsZV0gZm9yS2V5Ok5TU3RyaWtldGhyb3VnaFN0eWxlQXR0cmli
dXRlTmFtZV07Ci0gICAgICAgIGlmIChOU0ZvbnQgKmZvbnQgPSBzdHlsZS5mb250Q2FzY2FkZSgp
LnByaW1hcnlGb250RGF0YSgpLmdldE5TRm9udCgpKQorICAgICAgICBpZiAoTlNGb250ICpmb250
ID0gc3R5bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpLmdldE5TRm9udCgpKQogICAgICAg
ICAgICAgW2F0dHJzLmdldCgpIHNldE9iamVjdDpmb250IGZvcktleTpOU0ZvbnRBdHRyaWJ1dGVO
YW1lXTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgW2F0dHJzLmdldCgpIHNldE9iamVjdDpb
Zm9udE1hbmFnZXIgY29udmVydEZvbnQ6V2ViRGVmYXVsdEZvbnQoKSB0b1NpemU6c3R5bGUuZm9u
dENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5wbGF0Zm9ybURhdGEoKS5zaXplKCldIGZvcktl
eTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKKyAgICAgICAgICAgIFthdHRycy5nZXQoKSBzZXRPYmpl
Y3Q6W2ZvbnRNYW5hZ2VyIGNvbnZlcnRGb250OldlYkRlZmF1bHRGb250KCkgdG9TaXplOnN0eWxl
LmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKS5wbGF0Zm9ybURhdGEoKS5zaXplKCldIGZvcktl
eTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKICAgICAgICAgaWYgKHN0eWxlLnZpc2l0ZWREZXBlbmRl
bnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKS5hbHBoYSgpKQogICAgICAgICAgICAgW2F0dHJzLmdl
dCgpIHNldE9iamVjdDpuc0NvbG9yKHN0eWxlLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9w
ZXJ0eUNvbG9yKSkgZm9yS2V5Ok5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07CiAgICAg
ICAgIGVsc2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0JKHJl
dmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5t
bQkod29ya2luZyBjb3B5KQpAQCAtMjAzLDcgKzIwMyw3IEBAIGJvb2wgRWRpdG9yOjppbnNlcnRQ
YXJhZ3JhcGhTZXBhcmF0b3JJblEKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotY29uc3QgU2ltcGxl
Rm9udERhdGEqIEVkaXRvcjo6Zm9udEZvclNlbGVjdGlvbihib29sJiBoYXNNdWx0aXBsZUZvbnRz
KSBjb25zdAorY29uc3QgRm9udCogRWRpdG9yOjpmb250Rm9yU2VsZWN0aW9uKGJvb2wmIGhhc011
bHRpcGxlRm9udHMpIGNvbnN0CiB7CiAgICAgaGFzTXVsdGlwbGVGb250cyA9IGZhbHNlOwogCkBA
IC0yMTEsOSArMjExLDkgQEAgY29uc3QgU2ltcGxlRm9udERhdGEqIEVkaXRvcjo6Zm9udEZvclNl
bAogICAgICAgICBOb2RlKiBub2RlVG9SZW1vdmU7CiAgICAgICAgIFJlbmRlclN0eWxlKiBzdHls
ZSA9IHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQoJm1fZnJhbWUsIG5vZGVUb1JlbW92ZSk7IC8vIHNl
dHMgbm9kZVRvUmVtb3ZlCiAKLSAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIHJlc3VsdCA9
IG51bGxwdHI7CisgICAgICAgIGNvbnN0IEZvbnQqIHJlc3VsdCA9IG51bGxwdHI7CiAgICAgICAg
IGlmIChzdHlsZSkKLSAgICAgICAgICAgIHJlc3VsdCA9ICZzdHlsZS0+Zm9udENhc2NhZGUoKS5w
cmltYXJ5Rm9udERhdGEoKTsKKyAgICAgICAgICAgIHJlc3VsdCA9ICZzdHlsZS0+Zm9udENhc2Nh
ZGUoKS5wcmltYXJ5Rm9udCgpOwogCiAgICAgICAgIGlmIChub2RlVG9SZW1vdmUpIHsKICAgICAg
ICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7CkBAIC0yMjQsNyArMjI0LDcgQEAgY29uc3QgU2ltcGxl
Rm9udERhdGEqIEVkaXRvcjo6Zm9udEZvclNlbAogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
IH0KIAotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250ID0gMDsKKyAgICBjb25zdCBGb250
KiBmb250ID0gMDsKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gbV9mcmFtZS5zZWxlY3Rpb24o
KS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmIChOb2RlKiBzdGFydE5vZGUgPSBhZGp1c3Rl
ZFNlbGVjdGlvblN0YXJ0Rm9yU3R5bGVDb21wdXRhdGlvbihtX2ZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpKS5kZXByZWNhdGVkTm9kZSgpKSB7CiAgICAgICAgIE5vZGUqIHBhc3RFbmQgPSBy
YW5nZS0+cGFzdExhc3ROb2RlKCk7CkBAIC0yMzUsNyArMjM1LDcgQEAgY29uc3QgU2ltcGxlRm9u
dERhdGEqIEVkaXRvcjo6Zm9udEZvclNlbAogICAgICAgICAgICAgaWYgKCFyZW5kZXJlcikKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBBcmUgdGhlcmUg
YW55IG5vZGUgdHlwZXMgdGhhdCBoYXZlIHJlbmRlcmVycywgYnV0IHRoYXQgd2Ugc2hvdWxkIGJl
IHNraXBwaW5nPwotICAgICAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEmIHByaW1hcnlGb250
ID0gcmVuZGVyZXItPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKTsKKyAg
ICAgICAgICAgIGNvbnN0IEZvbnQmIHByaW1hcnlGb250ID0gcmVuZGVyZXItPnN0eWxlKCkuZm9u
dENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpOwogICAgICAgICAgICAgaWYgKCFmb250KQogICAgICAg
ICAgICAgICAgIGZvbnQgPSAmcHJpbWFyeUZvbnQ7CiAgICAgICAgICAgICBlbHNlIGlmIChmb250
ICE9ICZwcmltYXJ5Rm9udCkgewpAQCAtMjU3LDcgKzI1Nyw3IEBAIE5TRGljdGlvbmFyeSogRWRp
dG9yOjpmb250QXR0cmlidXRlc0ZvclMKIAogICAgIE5TTXV0YWJsZURpY3Rpb25hcnkqIHJlc3Vs
dCA9IFtOU011dGFibGVEaWN0aW9uYXJ5IGRpY3Rpb25hcnldOwogICAgIAotICAgIENURm9udFJl
ZiBmb250ID0gc3R5bGUtPmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0Q1RGb250
KCk7CisgICAgQ1RGb250UmVmIGZvbnQgPSBzdHlsZS0+Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9u
dCgpLmdldENURm9udCgpOwogICAgIGlmIChmb250KQogICAgICAgICBbcmVzdWx0IHNldE9iamVj
dDooaWQpZm9udCBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0JKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTA1
LDcgKzEwNSw3IEBAIGJvb2wgRWRpdG9yOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJblEKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotY29uc3QgU2ltcGxlRm9udERhdGEqIEVkaXRvcjo6Zm9udEZv
clNlbGVjdGlvbihib29sJiBoYXNNdWx0aXBsZUZvbnRzKSBjb25zdAorY29uc3QgRm9udCogRWRp
dG9yOjpmb250Rm9yU2VsZWN0aW9uKGJvb2wmIGhhc011bHRpcGxlRm9udHMpIGNvbnN0CiB7CiAg
ICAgaGFzTXVsdGlwbGVGb250cyA9IGZhbHNlOwogCkBAIC0xMTMsOSArMTEzLDkgQEAgY29uc3Qg
U2ltcGxlRm9udERhdGEqIEVkaXRvcjo6Zm9udEZvclNlbAogICAgICAgICBOb2RlKiBub2RlVG9S
ZW1vdmU7CiAgICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHN0eWxlRm9yU2VsZWN0aW9uU3Rh
cnQoJm1fZnJhbWUsIG5vZGVUb1JlbW92ZSk7IC8vIHNldHMgbm9kZVRvUmVtb3ZlCiAKLSAgICAg
ICAgY29uc3QgU2ltcGxlRm9udERhdGEqIHJlc3VsdCA9IG51bGxwdHI7CisgICAgICAgIGNvbnN0
IEZvbnQqIHJlc3VsdCA9IG51bGxwdHI7CiAgICAgICAgIGlmIChzdHlsZSkKLSAgICAgICAgICAg
IHJlc3VsdCA9ICZzdHlsZS0+Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKTsKKyAgICAg
ICAgICAgIHJlc3VsdCA9ICZzdHlsZS0+Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpOwogCiAg
ICAgICAgIGlmIChub2RlVG9SZW1vdmUpCiAgICAgICAgICAgICBub2RlVG9SZW1vdmUtPnJlbW92
ZShBU1NFUlRfTk9fRVhDRVBUSU9OKTsKQEAgLTEyMyw3ICsxMjMsNyBAQCBjb25zdCBTaW1wbGVG
b250RGF0YSogRWRpdG9yOjpmb250Rm9yU2VsCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
fQogCi0gICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQgPSAwOworICAgIGNvbnN0IEZvbnQq
IGZvbnQgPSAwOwogICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigp
LnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgTm9kZSogc3RhcnROb2RlID0gYWRqdXN0ZWRTZWxl
Y3Rpb25TdGFydEZvclN0eWxlQ29tcHV0YXRpb24obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKSkuZGVwcmVjYXRlZE5vZGUoKTsKICAgICBpZiAocmFuZ2UgJiYgc3RhcnROb2RlKSB7CkBA
IC0xMzUsNyArMTM1LDcgQEAgY29uc3QgU2ltcGxlRm9udERhdGEqIEVkaXRvcjo6Zm9udEZvclNl
bAogICAgICAgICAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIC8vIEZJWE1FOiBBcmUgdGhlcmUgYW55IG5vZGUgdHlwZXMgdGhhdCBoYXZl
IHJlbmRlcmVycywgYnV0IHRoYXQgd2Ugc2hvdWxkIGJlIHNraXBwaW5nPwotICAgICAgICAgICAg
Y29uc3QgU2ltcGxlRm9udERhdGEmIHByaW1hcnlGb250ID0gcmVuZGVyZXItPnN0eWxlKCkuZm9u
dENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKTsKKyAgICAgICAgICAgIGNvbnN0IEZvbnQmIHBy
aW1hcnlGb250ID0gcmVuZGVyZXItPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgp
OwogICAgICAgICAgICAgaWYgKCFmb250KQogICAgICAgICAgICAgICAgIGZvbnQgPSAmcHJpbWFy
eUZvbnQ7CiAgICAgICAgICAgICBlbHNlIGlmIChmb250ICE9ICZwcmltYXJ5Rm9udCkgewpAQCAt
MTYwLDggKzE2MCw4IEBAIE5TRGljdGlvbmFyeSogRWRpdG9yOjpmb250QXR0cmlidXRlc0ZvclMK
ICAgICBpZiAoc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91
bmRDb2xvcikuaXNWYWxpZCgpICYmIHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJv
cGVydHlCYWNrZ3JvdW5kQ29sb3IpLmFscGhhKCkgIT0gMCkKICAgICAgICAgW3Jlc3VsdCBzZXRP
YmplY3Q6bnNDb2xvcihzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFj
a2dyb3VuZENvbG9yKSkgZm9yS2V5Ok5TQmFja2dyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07CiAK
LSAgICBpZiAoc3R5bGUtPmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0TlNGb250
KCkpCi0gICAgICAgIFtyZXN1bHQgc2V0T2JqZWN0OnN0eWxlLT5mb250Q2FzY2FkZSgpLnByaW1h
cnlGb250RGF0YSgpLmdldE5TRm9udCgpIGZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKKyAg
ICBpZiAoc3R5bGUtPmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKS5nZXROU0ZvbnQoKSkKKyAg
ICAgICAgW3Jlc3VsdCBzZXRPYmplY3Q6c3R5bGUtPmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQo
KS5nZXROU0ZvbnQoKSBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CiAKICAgICBpZiAoc3R5
bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKS5pc1ZhbGlkKCkgJiYg
c3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSAhPSBDb2xvcjo6
YmxhY2spCiAgICAgICAgIFtyZXN1bHQgc2V0T2JqZWN0Om5zQ29sb3Ioc3R5bGUtPnZpc2l0ZWRE
ZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSkgZm9yS2V5Ok5TRm9yZWdyb3VuZENvbG9y
QXR0cmlidXRlTmFtZV07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVk
Rm9udC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hl
ZEZvbnQuY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2Fj
aGUvQ2FjaGVkRm9udC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5LDcgKzk5LDcgQEAgYm9vbCBD
YWNoZWRGb250OjplbnN1cmVDdXN0b21Gb250RGF0YShibwogCiBib29sIENhY2hlZEZvbnQ6OmVu
c3VyZUN1c3RvbUZvbnREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSkKIHsKLSAgICBpZiAoIW1fZm9u
dERhdGEgJiYgIWVycm9yT2NjdXJyZWQoKSAmJiAhaXNMb2FkaW5nKCkgJiYgZGF0YSkgeworICAg
IGlmICghbV9mb250Q3VzdG9tUGxhdGZvcm1EYXRhICYmICFlcnJvck9jY3VycmVkKCkgJiYgIWlz
TG9hZGluZygpICYmIGRhdGEpIHsKICAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVy
KGRhdGEpOwogCiAjaWYgKCFQTEFURk9STShNQUMpIHx8IF9fTUFDX09TX1hfVkVSU0lPTl9NSU5f
UkVRVUlSRUQgPD0gMTA5MCkgJiYgKCFQTEFURk9STShJT1MpIHx8IF9fSVBIT05FX09TX1ZFUlNJ
T05fTUlOX1JFUVVJUkVEIDwgODAwMDApCkBAIC0xMTIsMzAgKzExMiwzMCBAQCBib29sIENhY2hl
ZEZvbnQ6OmVuc3VyZUN1c3RvbUZvbnREYXRhKFNoCiAgICAgICAgIH0KICNlbmRpZgogCi0gICAg
ICAgIG1fZm9udERhdGEgPSBidWZmZXIgPyBjcmVhdGVGb250Q3VzdG9tUGxhdGZvcm1EYXRhKCpi
dWZmZXIpIDogbnVsbHB0cjsKLSAgICAgICAgbV9oYXNDcmVhdGVkRm9udERhdGFXcmFwcGluZ1Jl
c291cmNlID0gbV9mb250RGF0YSAmJiAoYnVmZmVyID09IG1fZGF0YSk7Ci0gICAgICAgIGlmICgh
bV9mb250RGF0YSkKKyAgICAgICAgbV9mb250Q3VzdG9tUGxhdGZvcm1EYXRhID0gYnVmZmVyID8g
Y3JlYXRlRm9udEN1c3RvbVBsYXRmb3JtRGF0YSgqYnVmZmVyKSA6IG51bGxwdHI7CisgICAgICAg
IG1faGFzQ3JlYXRlZEZvbnREYXRhV3JhcHBpbmdSZXNvdXJjZSA9IG1fZm9udEN1c3RvbVBsYXRm
b3JtRGF0YSAmJiAoYnVmZmVyID09IG1fZGF0YSk7CisgICAgICAgIGlmICghbV9mb250Q3VzdG9t
UGxhdGZvcm1EYXRhKQogICAgICAgICAgICAgc2V0U3RhdHVzKERlY29kZUVycm9yKTsKICAgICB9
CiAKLSAgICByZXR1cm4gbV9mb250RGF0YS5nZXQoKTsKKyAgICByZXR1cm4gbV9mb250Q3VzdG9t
UGxhdGZvcm1EYXRhLmdldCgpOwogfQogCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBDYWNo
ZWRGb250OjpnZXRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlv
biwgY29uc3QgQXRvbWljU3RyaW5nJiwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRp
Y0l0YWxpYywgYm9vbCkKK1JlZlB0cjxGb250PiBDYWNoZWRGb250OjpjcmVhdGVGb250KGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmLCBi
b29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljLCBib29sKQogewotICAgIHJl
dHVybiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlKHBsYXRmb3JtRGF0YUZyb21DdXN0b21EYXRhKGZv
bnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0
aWNJdGFsaWMsCisgICAgcmV0dXJuIEZvbnQ6OmNyZWF0ZShwbGF0Zm9ybURhdGFGcm9tQ3VzdG9t
RGF0YShmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSwgc3ludGhldGljQm9sZCwg
c3ludGhldGljSXRhbGljLAogICAgICAgICBmb250RGVzY3JpcHRpb24ub3JpZW50YXRpb24oKSwg
Zm9udERlc2NyaXB0aW9uLndpZHRoVmFyaWFudCgpLCBmb250RGVzY3JpcHRpb24ucmVuZGVyaW5n
TW9kZSgpKSwgdHJ1ZSwgZmFsc2UpOwogfQogCiBGb250UGxhdGZvcm1EYXRhIENhY2hlZEZvbnQ6
OnBsYXRmb3JtRGF0YUZyb21DdXN0b21EYXRhKGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBp
dGFsaWMsIEZvbnRPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgRm9udFdpZHRoVmFyaWFudCB3aWR0
aFZhcmlhbnQsIEZvbnRSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUpCiB7Ci0gICAgQVNTRVJU
KG1fZm9udERhdGEpOwotICAgIHJldHVybiBtX2ZvbnREYXRhLT5mb250UGxhdGZvcm1EYXRhKHN0
YXRpY19jYXN0PGludD4oc2l6ZSksIGJvbGQsIGl0YWxpYywgb3JpZW50YXRpb24sIHdpZHRoVmFy
aWFudCwgcmVuZGVyaW5nTW9kZSk7CisgICAgQVNTRVJUKG1fZm9udEN1c3RvbVBsYXRmb3JtRGF0
YSk7CisgICAgcmV0dXJuIG1fZm9udEN1c3RvbVBsYXRmb3JtRGF0YS0+Zm9udFBsYXRmb3JtRGF0
YShzdGF0aWNfY2FzdDxpbnQ+KHNpemUpLCBib2xkLCBpdGFsaWMsIG9yaWVudGF0aW9uLCB3aWR0
aFZhcmlhbnQsIHJlbmRlcmluZ01vZGUpOwogfQogCiB2b2lkIENhY2hlZEZvbnQ6OmFsbENsaWVu
dHNSZW1vdmVkKCkKIHsKLSAgICBtX2ZvbnREYXRhID0gbnVsbHB0cjsKKyAgICBtX2ZvbnRDdXN0
b21QbGF0Zm9ybURhdGEgPSBudWxscHRyOwogfQogCiB2b2lkIENhY2hlZEZvbnQ6OmNoZWNrTm90
aWZ5KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRGb250LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQuaAkocmV2
aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTAgKzI4LDEwIEBACiAKICNpbmNsdWRlICJDYWNoZWRS
ZXNvdXJjZS5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCisjaW5jbHVkZSAi
Rm9udC5oIgogI2luY2x1ZGUgIkZvbnRPcmllbnRhdGlvbi5oIgogI2luY2x1ZGUgIkZvbnRSZW5k
ZXJpbmdNb2RlLmgiCiAjaW5jbHVkZSAiRm9udFdpZHRoVmFyaWFudC5oIgotI2luY2x1ZGUgIlNp
bXBsZUZvbnREYXRhLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTIsNyArNTIsNyBA
QCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgZW5zdXJlQ3VzdG9tRm9udERhdGEoYm9vbCBl
eHRlcm5hbFNWRywgY29uc3QgQXRvbWljU3RyaW5nJiByZW1vdGVVUkkpOwogCi0gICAgdmlydHVh
bCBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBnZXRGb250RGF0YShjb25zdCBGb250RGVzY3Jp
cHRpb24mLCBjb25zdCBBdG9taWNTdHJpbmcmIHJlbW90ZVVSSSwgYm9vbCBzeW50aGV0aWNCb2xk
LCBib29sIHN5bnRoZXRpY0l0YWxpYywgYm9vbCBleHRlcm5hbFNWRyk7CisgICAgdmlydHVhbCBS
ZWZQdHI8Rm9udD4gY3JlYXRlRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9t
aWNTdHJpbmcmIHJlbW90ZVVSSSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0
YWxpYywgYm9vbCBleHRlcm5hbFNWRyk7CiAKIHByb3RlY3RlZDoKICAgICBGb250UGxhdGZvcm1E
YXRhIHBsYXRmb3JtRGF0YUZyb21DdXN0b21EYXRhKGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9v
bCBpdGFsaWMsIEZvbnRPcmllbnRhdGlvbiA9IEhvcml6b250YWwsIEZvbnRXaWR0aFZhcmlhbnQg
PSBSZWd1bGFyV2lkdGgsIEZvbnRSZW5kZXJpbmdNb2RlID0gTm9ybWFsUmVuZGVyaW5nTW9kZSk7
CkBAIC03MCw3ICs3MCw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgYWxsQ2xpZW50
c1JlbW92ZWQoKSBvdmVycmlkZTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxGb250Q3VzdG9tUGxh
dGZvcm1EYXRhPiBtX2ZvbnREYXRhOworICAgIHN0ZDo6dW5pcXVlX3B0cjxGb250Q3VzdG9tUGxh
dGZvcm1EYXRhPiBtX2ZvbnRDdXN0b21QbGF0Zm9ybURhdGE7CiAgICAgYm9vbCBtX2xvYWRJbml0
aWF0ZWQ7CiAgICAgYm9vbCBtX2hhc0NyZWF0ZWRGb250RGF0YVdyYXBwaW5nUmVzb3VyY2U7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTVkdGb250LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU1ZHRm9udC5jcHAJ
KHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRT
VkdGb250LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsMTcgKzUxLDE3IEBAIENhY2hlZFNWR0Zv
bnQ6OkNhY2hlZFNWR0ZvbnQoY29uc3QgUmVzb3UKIHsKIH0KIAotUGFzc1JlZlB0cjxTaW1wbGVG
b250RGF0YT4gQ2FjaGVkU1ZHRm9udDo6Z2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgcmVtb3RlVVJJLCBib29sIHN5
bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljLCBib29sIGV4dGVybmFsU1ZHKQorUmVm
UHRyPEZvbnQ+IENhY2hlZFNWR0ZvbnQ6OmNyZWF0ZUZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgcmVtb3RlVVJJLCBib29sIHN5
bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljLCBib29sIGV4dGVybmFsU1ZHKQogewog
I2lmIEVOQUJMRShTVkdfT1RGX0NPTlZFUlRFUikKICAgICBpZiAoIWV4dGVybmFsU1ZHIHx8IGZp
cnN0Rm9udEZhY2UocmVtb3RlVVJJKSkKLSAgICAgICAgcmV0dXJuIENhY2hlZEZvbnQ6OmdldEZv
bnREYXRhKGZvbnREZXNjcmlwdGlvbiwgcmVtb3RlVVJJLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0
aWNJdGFsaWMsIGV4dGVybmFsU1ZHKTsKKyAgICAgICAgcmV0dXJuIENhY2hlZEZvbnQ6OmNyZWF0
ZUZvbnQoZm9udERlc2NyaXB0aW9uLCByZW1vdGVVUkksIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRp
Y0l0YWxpYywgZXh0ZXJuYWxTVkcpOwogI2Vsc2UKICAgICBpZiAoIWV4dGVybmFsU1ZHKQotICAg
ICAgICByZXR1cm4gQ2FjaGVkRm9udDo6Z2V0Rm9udERhdGEoZm9udERlc2NyaXB0aW9uLCByZW1v
dGVVUkksIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYywgZXh0ZXJuYWxTVkcpOworICAg
ICAgICByZXR1cm4gQ2FjaGVkRm9udDo6Y3JlYXRlRm9udChmb250RGVzY3JpcHRpb24sIHJlbW90
ZVVSSSwgc3ludGhldGljQm9sZCwgc3ludGhldGljSXRhbGljLCBleHRlcm5hbFNWRyk7CiAKICAg
ICBpZiAoU1ZHRm9udEZhY2VFbGVtZW50KiBmaXJzdEZvbnRGYWNlID0gdGhpcy0+Zmlyc3RGb250
RmFjZShyZW1vdGVVUkkpKQotICAgICAgICByZXR1cm4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZShz
dGQ6Om1ha2VfdW5pcXVlPFNWR0ZvbnREYXRhPihmaXJzdEZvbnRGYWNlKSwgZm9udERlc2NyaXB0
aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCksIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYyk7
CisgICAgICAgIHJldHVybiBGb250OjpjcmVhdGUoc3RkOjptYWtlX3VuaXF1ZTxTVkdGb250RGF0
YT4oZmlyc3RGb250RmFjZSksIGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpLCBz
eW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMpOwogI2VuZGlmCiAgICAgcmV0dXJuIG51bGxw
dHI7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU1ZHRm9udC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTVkdGb250
LmgJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRTVkdGb250LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogCiAg
ICAgdmlydHVhbCBib29sIGVuc3VyZUN1c3RvbUZvbnREYXRhKGJvb2wgZXh0ZXJuYWxTVkcsIGNv
bnN0IEF0b21pY1N0cmluZyYgcmVtb3RlVVJJKSBvdmVycmlkZTsKICAgICAKLSAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IGdldEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYgcmVtb3RlVVJJLCBib29sIHN5bnRoZXRpY0JvbGQs
IGJvb2wgc3ludGhldGljSXRhbGljLCBib29sIGV4dGVybmFsU1ZHKSBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIFJlZlB0cjxGb250PiBjcmVhdGVGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNv
bnN0IEF0b21pY1N0cmluZyYgcmVtb3RlVVJJLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3lu
dGhldGljSXRhbGljLCBib29sIGV4dGVybmFsU1ZHKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAg
ICBGb250UGxhdGZvcm1EYXRhIHBsYXRmb3JtRGF0YUZyb21DdXN0b21EYXRhKGZsb2F0IHNpemUs
IGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMsIEZvbnRPcmllbnRhdGlvbiA9IEhvcml6b250YWwsIEZv
bnRXaWR0aFZhcmlhbnQgPSBSZWd1bGFyV2lkdGgsIEZvbnRSZW5kZXJpbmdNb2RlID0gTm9ybWFs
UmVuZGVyaW5nTW9kZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250LmNwcAkocmV2aXNpb24gMTc4NjUwKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9TaW1wbGVGb250RGF0YS5jcHA6MTc4NjUwKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NTYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDgsIDIwMTAsIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3Vy
eWFrb3YKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBw
bGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAq
ICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgorCisjaWYgUExB
VEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JF
UVVJUkVEID4gMTA4MCkKKyNpbmNsdWRlICJDb3JlVGV4dFNQSS5oIgorI2VuZGlmCisjaW5jbHVk
ZSAiRm9udENhY2hlLmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKKyNpbmNsdWRlICJPcGVu
VHlwZU1hdGhEYXRhLmgiCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3
dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKworI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKKyNp
bmNsdWRlICJPcGVuVHlwZVZlcnRpY2FsRGF0YS5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKwordW5zaWduZWQgR2x5cGhQYWdlOjpzX2NvdW50ID0gMDsKKworY29uc3QgZmxvYXQg
c21hbGxDYXBzRm9udFNpemVNdWx0aXBsaWVyID0gMC43ZjsKK2NvbnN0IGZsb2F0IGVtcGhhc2lz
TWFya0ZvbnRTaXplTXVsdGlwbGllciA9IDAuNWY7CisKK1NpbXBsZUZvbnREYXRhOjpTaW1wbGVG
b250RGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEsIGJvb2wgaXNDdXN0
b21Gb250LCBib29sIGlzTG9hZGluZywgYm9vbCBpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKQor
ICAgIDogbV9tYXhDaGFyV2lkdGgoLTEpCisgICAgLCBtX2F2Z0NoYXJXaWR0aCgtMSkKKyAgICAs
IG1fcGxhdGZvcm1EYXRhKHBsYXRmb3JtRGF0YSkKKyAgICAsIG1fdHJlYXRBc0ZpeGVkUGl0Y2go
ZmFsc2UpCisgICAgLCBtX2lzQ3VzdG9tRm9udChpc0N1c3RvbUZvbnQpCisgICAgLCBtX2lzTG9h
ZGluZyhpc0xvYWRpbmcpCisgICAgLCBtX2lzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2soaXNUZXh0
T3JpZW50YXRpb25GYWxsYmFjaykKKyAgICAsIG1faXNCcm9rZW5JZGVvZ3JhcGhGYWxsYmFjayhm
YWxzZSkKKyAgICAsIG1fbWF0aERhdGEobnVsbHB0cikKKyNpZiBFTkFCTEUoT1BFTlRZUEVfVkVS
VElDQUwpCisgICAgLCBtX3ZlcnRpY2FsRGF0YSgwKQorI2VuZGlmCisgICAgLCBtX2hhc1ZlcnRp
Y2FsR2x5cGhzKGZhbHNlKQoreworICAgIHBsYXRmb3JtSW5pdCgpOworICAgIHBsYXRmb3JtR2x5
cGhJbml0KCk7CisgICAgcGxhdGZvcm1DaGFyV2lkdGhJbml0KCk7CisjaWYgRU5BQkxFKE9QRU5U
WVBFX1ZFUlRJQ0FMKQorICAgIGlmIChwbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSA9PSBWZXJ0
aWNhbCAmJiAhaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaykgeworICAgICAgICBtX3ZlcnRpY2Fs
RGF0YSA9IHBsYXRmb3JtRGF0YS52ZXJ0aWNhbERhdGEoKTsKKyAgICAgICAgbV9oYXNWZXJ0aWNh
bEdseXBocyA9IG1fdmVydGljYWxEYXRhLmdldCgpICYmIG1fdmVydGljYWxEYXRhLT5oYXNWZXJ0
aWNhbE1ldHJpY3MoKTsKKyAgICB9CisjZW5kaWYKK30KKworU2ltcGxlRm9udERhdGE6OlNpbXBs
ZUZvbnREYXRhKHN0ZDo6dW5pcXVlX3B0cjxTVkdEYXRhPiBzdmdEYXRhLCBmbG9hdCBmb250U2l6
ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYykKKyAgICA6IG1fcGxh
dGZvcm1EYXRhKEZvbnRQbGF0Zm9ybURhdGEoZm9udFNpemUsIHN5bnRoZXRpY0JvbGQsIHN5bnRo
ZXRpY0l0YWxpYykpCisgICAgLCBtX3N2Z0RhdGEoV1RGOjptb3ZlKHN2Z0RhdGEpKQorICAgICwg
bV90cmVhdEFzRml4ZWRQaXRjaChmYWxzZSkKKyAgICAsIG1faXNDdXN0b21Gb250KHRydWUpCisg
ICAgLCBtX2lzTG9hZGluZyhmYWxzZSkKKyAgICAsIG1faXNUZXh0T3JpZW50YXRpb25GYWxsYmFj
ayhmYWxzZSkKKyAgICAsIG1faXNCcm9rZW5JZGVvZ3JhcGhGYWxsYmFjayhmYWxzZSkKKyAgICAs
IG1fbWF0aERhdGEobnVsbHB0cikKKyNpZiBFTkFCTEUoT1BFTlRZUEVfVkVSVElDQUwpCisgICAg
LCBtX3ZlcnRpY2FsRGF0YSgwKQorI2VuZGlmCisgICAgLCBtX2hhc1ZlcnRpY2FsR2x5cGhzKGZh
bHNlKQorI2lmIFBMQVRGT1JNKElPUykKKyAgICAsIG1fc2hvdWxkTm90QmVVc2VkRm9yQXJhYmlj
KGZhbHNlKQorI2VuZGlmCit7CisgICAgbV9zdmdEYXRhLT5pbml0aWFsaXplRm9udERhdGEodGhp
cywgZm9udFNpemUpOworfQorCisvLyBFc3RpbWF0ZXMgb2YgYXZnQ2hhcldpZHRoIGFuZCBtYXhD
aGFyV2lkdGggZm9yIHBsYXRmb3JtcyB0aGF0IGRvbid0IHN1cHBvcnQgYWNjZXNzaW5nIHRoZXNl
IHZhbHVlcyBmcm9tIHRoZSBmb250Lgordm9pZCBTaW1wbGVGb250RGF0YTo6aW5pdENoYXJXaWR0
aHMoKQoreworICAgIGF1dG8qIGdseXBoUGFnZVplcm8gPSBnbHlwaFBhZ2UoMCk7CisKKyAgICAv
LyBUcmVhdCB0aGUgd2lkdGggb2YgYSAnMCcgYXMgdGhlIGF2Z0NoYXJXaWR0aC4KKyAgICBpZiAo
bV9hdmdDaGFyV2lkdGggPD0gMC5mICYmIGdseXBoUGFnZVplcm8pIHsKKyAgICAgICAgc3RhdGlj
IGNvbnN0IFVDaGFyMzIgZGlnaXRaZXJvQ2hhciA9ICcwJzsKKyAgICAgICAgR2x5cGggZGlnaXRa
ZXJvR2x5cGggPSBnbHlwaFBhZ2VaZXJvLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoZGlnaXRaZXJv
Q2hhcikuZ2x5cGg7CisgICAgICAgIGlmIChkaWdpdFplcm9HbHlwaCkKKyAgICAgICAgICAgIG1f
YXZnQ2hhcldpZHRoID0gd2lkdGhGb3JHbHlwaChkaWdpdFplcm9HbHlwaCk7CisgICAgfQorCisg
ICAgLy8gSWYgd2UgY2FuJ3QgcmV0cmlldmUgdGhlIHdpZHRoIG9mIGEgJzAnLCBmYWxsIGJhY2sg
dG8gdGhlIHggaGVpZ2h0LgorICAgIGlmIChtX2F2Z0NoYXJXaWR0aCA8PSAwLmYpCisgICAgICAg
IG1fYXZnQ2hhcldpZHRoID0gbV9mb250TWV0cmljcy54SGVpZ2h0KCk7CisKKyAgICBpZiAobV9t
YXhDaGFyV2lkdGggPD0gMC5mKQorICAgICAgICBtX21heENoYXJXaWR0aCA9IHN0ZDo6bWF4KG1f
YXZnQ2hhcldpZHRoLCBtX2ZvbnRNZXRyaWNzLmZsb2F0QXNjZW50KCkpOworfQorCit2b2lkIFNp
bXBsZUZvbnREYXRhOjpwbGF0Zm9ybUdseXBoSW5pdCgpCit7CisgICAgYXV0byogZ2x5cGhQYWdl
WmVybyA9IGdseXBoUGFnZSgwKTsKKyAgICBpZiAoIWdseXBoUGFnZVplcm8pIHsKKyAgICAgICAg
bV9zcGFjZUdseXBoID0gMDsKKyAgICAgICAgbV9zcGFjZVdpZHRoID0gMDsKKyAgICAgICAgbV96
ZXJvR2x5cGggPSAwOworICAgICAgICBtX2FkanVzdGVkU3BhY2VXaWR0aCA9IDA7CisgICAgICAg
IGRldGVybWluZVBpdGNoKCk7CisgICAgICAgIG1femVyb1dpZHRoU3BhY2VHbHlwaCA9IDA7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBBc2sgZm9yIHRoZSBnbHlwaCBmb3IgMCB0
byBhdm9pZCBwYWdpbmcgaW4gWkVSTyBXSURUSCBTUEFDRS4gQ29udHJvbCBjaGFyYWN0ZXJzLCBp
bmNsdWRpbmcgMCwKKyAgICAvLyBhcmUgbWFwcGVkIHRvIHRoZSBaRVJPIFdJRFRIIFNQQUNFIGds
eXBoLgorICAgIG1femVyb1dpZHRoU3BhY2VHbHlwaCA9IGdseXBoUGFnZVplcm8tPmdseXBoRGF0
YUZvckNoYXJhY3RlcigwKS5nbHlwaDsKKworICAgIC8vIE5hc3R5IGhhY2sgdG8gZGV0ZXJtaW5l
IGlmIHdlIHNob3VsZCByb3VuZCBvciBjZWlsIHNwYWNlIHdpZHRocy4KKyAgICAvLyBJZiB0aGUg
Zm9udCBpcyBtb25vc3BhY2Ugb3IgZmFrZSBtb25vc3BhY2Ugd2UgY2VpbCB0byBlbnN1cmUgdGhh
dCAKKyAgICAvLyBldmVyeSBjaGFyYWN0ZXIgYW5kIHRoZSBzcGFjZSBhcmUgdGhlIHNhbWUgd2lk
dGguICBPdGhlcndpc2Ugd2Ugcm91bmQuCisgICAgbV9zcGFjZUdseXBoID0gZ2x5cGhQYWdlWmVy
by0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKCcgJykuZ2x5cGg7CisgICAgZmxvYXQgd2lkdGggPSB3
aWR0aEZvckdseXBoKG1fc3BhY2VHbHlwaCk7CisgICAgbV9zcGFjZVdpZHRoID0gd2lkdGg7Cisg
ICAgbV96ZXJvR2x5cGggPSBnbHlwaFBhZ2VaZXJvLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoJzAn
KS5nbHlwaDsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldFplcm9XaWR0aCh3aWR0aEZvckdseXBoKG1f
emVyb0dseXBoKSk7CisgICAgZGV0ZXJtaW5lUGl0Y2goKTsKKyAgICBtX2FkanVzdGVkU3BhY2VX
aWR0aCA9IG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPyBjZWlsZih3aWR0aCkgOiByb3VuZGYod2lkdGgp
OworCisgICAgLy8gRm9yY2UgdGhlIGdseXBoIGZvciBaRVJPIFdJRFRIIFNQQUNFIHRvIGhhdmUg
emVybyB3aWR0aCwgdW5sZXNzIGl0IGlzIHNoYXJlZCB3aXRoIFNQQUNFLgorICAgIC8vIEhlbHZl
dGljYSBpcyBhbiBleGFtcGxlIG9mIGEgbm9uLXplcm8gd2lkdGggWkVSTyBXSURUSCBTUEFDRSBn
bHlwaC4KKyAgICAvLyBTZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEzMTc4PiBhbmQgU2ltcGxlRm9udERhdGE6OmlzWmVyb1dpZHRoU3BhY2VHbHlwaCgpCisgICAg
aWYgKG1femVyb1dpZHRoU3BhY2VHbHlwaCA9PSBtX3NwYWNlR2x5cGgpCisgICAgICAgIG1femVy
b1dpZHRoU3BhY2VHbHlwaCA9IDA7Cit9CisKK1NpbXBsZUZvbnREYXRhOjp+U2ltcGxlRm9udERh
dGEoKQoreworICAgIHJlbW92ZUZyb21TeXN0ZW1GYWxsYmFja0NhY2hlKCk7Cit9CisKK3N0YXRp
YyBib29sIGZpbGxHbHlwaFBhZ2UoR2x5cGhQYWdlJiBwYWdlVG9GaWxsLCB1bnNpZ25lZCBvZmZz
ZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3Ro
LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEpCit7CisjaWYgRU5BQkxFKFNWR19GT05U
UykKKyAgICBpZiAoYXV0byogc3ZnRGF0YSA9IGZvbnREYXRhLT5zdmdEYXRhKCkpCisgICAgICAg
IHJldHVybiBzdmdEYXRhLT5maWxsU1ZHR2x5cGhQYWdlKCZwYWdlVG9GaWxsLCBvZmZzZXQsIGxl
bmd0aCwgYnVmZmVyLCBidWZmZXJMZW5ndGgsIGZvbnREYXRhKTsKKyNlbmRpZgorICAgIGJvb2wg
aGFzR2x5cGhzID0gcGFnZVRvRmlsbC5maWxsKG9mZnNldCwgbGVuZ3RoLCBidWZmZXIsIGJ1ZmZl
ckxlbmd0aCwgZm9udERhdGEpOworI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKKyAgICBp
ZiAoaGFzR2x5cGhzICYmIGZvbnREYXRhLT52ZXJ0aWNhbERhdGEoKSkKKyAgICAgICAgZm9udERh
dGEtPnZlcnRpY2FsRGF0YSgpLT5zdWJzdGl0dXRlV2l0aFZlcnRpY2FsR2x5cGhzKGZvbnREYXRh
LCAmcGFnZVRvRmlsbCwgb2Zmc2V0LCBsZW5ndGgpOworI2VuZGlmCisgICAgcmV0dXJuIGhhc0ds
eXBoczsKK30KKworc3RhdGljIFJlZlB0cjxHbHlwaFBhZ2U+IGNyZWF0ZUFuZEZpbGxHbHlwaFBh
Z2UodW5zaWduZWQgcGFnZU51bWJlciwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQor
eworI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBGSVhNRTogVGltZXMgTmV3IFJvbWFuIGNvbnRh
aW5zIEFyYWJpYyBnbHlwaHMsIGJ1dCBDb3JlIFRleHQgZG9lc24ndCBrbm93IGhvdyB0byBzaGFw
ZSB0aGVtLiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzk4MjM5NzU+LgorICAgIC8vIE9uY2Ugd2UgaGF2
ZSB0aGUgZml4IGZvciA8cmRhcjovL3Byb2JsZW0vOTgyMzk3NT4gdGhlbiByZW1vdmUgdGhpcyBj
b2RlIHRvZ2V0aGVyIHdpdGggU2ltcGxlRm9udERhdGE6OnNob3VsZE5vdEJlVXNlZEZvckFyYWJp
YygpCisgICAgLy8gaW4gPHJkYXI6Ly9wcm9ibGVtLzEyMDk2ODM1Pi4KKyAgICBpZiAocGFnZU51
bWJlciA9PSA2ICYmIGZvbnREYXRhLT5zaG91bGROb3RCZVVzZWRGb3JBcmFiaWMoKSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisjZW5kaWYKKworICAgIHVuc2lnbmVkIHN0YXJ0ID0gcGFnZU51
bWJlciAqIEdseXBoUGFnZTo6c2l6ZTsKKyAgICBVQ2hhciBidWZmZXJbR2x5cGhQYWdlOjpzaXpl
ICogMiArIDJdOworICAgIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aDsKKyAgICAvLyBGaWxsIGluIGEg
YnVmZmVyIHdpdGggdGhlIGVudGlyZSAicGFnZSIgb2YgY2hhcmFjdGVycyB0aGF0IHdlIHdhbnQg
dG8gbG9vayB1cCBnbHlwaHMgZm9yLgorICAgIGlmIChVX0lTX0JNUChzdGFydCkpIHsKKyAgICAg
ICAgYnVmZmVyTGVuZ3RoID0gR2x5cGhQYWdlOjpzaXplOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgR2x5cGhQYWdlOjpzaXplOyBpKyspCisgICAgICAgICAgICBidWZmZXJbaV0g
PSBzdGFydCArIGk7CisKKyAgICAgICAgaWYgKHN0YXJ0ID09IDApIHsKKyAgICAgICAgICAgIC8v
IENvbnRyb2wgY2hhcmFjdGVycyBtdXN0IG5vdCByZW5kZXIgYXQgYWxsLgorICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDB4MjA7ICsraSkKKyAgICAgICAgICAgICAgICBidWZm
ZXJbaV0gPSB6ZXJvV2lkdGhTcGFjZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDB4
N0Y7IGkgPCAweEEwOyBpKyspCisgICAgICAgICAgICAgICAgYnVmZmVyW2ldID0gemVyb1dpZHRo
U3BhY2U7CisgICAgICAgICAgICBidWZmZXJbc29mdEh5cGhlbl0gPSB6ZXJvV2lkdGhTcGFjZTsK
KworICAgICAgICAgICAgLy8gXG4sIFx0LCBhbmQgbm9uYnJlYWtpbmcgc3BhY2UgbXVzdCByZW5k
ZXIgYXMgYSBzcGFjZS4KKyAgICAgICAgICAgIGJ1ZmZlclsoaW50KSdcbiddID0gJyAnOworICAg
ICAgICAgICAgYnVmZmVyWyhpbnQpJ1x0J10gPSAnICc7CisgICAgICAgICAgICBidWZmZXJbbm9C
cmVha1NwYWNlXSA9ICcgJzsKKyAgICAgICAgfSBlbHNlIGlmIChzdGFydCA9PSAobGVmdFRvUmln
aHRNYXJrICYgfihHbHlwaFBhZ2U6OnNpemUgLSAxKSkpIHsKKyAgICAgICAgICAgIC8vIExSTSwg
UkxNLCBMUkUsIFJMRSwgWldOSiwgWldKLCBhbmQgUERGIG11c3Qgbm90IHJlbmRlciBhdCBhbGwu
CisgICAgICAgICAgICBidWZmZXJbbGVmdFRvUmlnaHRNYXJrIC0gc3RhcnRdID0gemVyb1dpZHRo
U3BhY2U7CisgICAgICAgICAgICBidWZmZXJbcmlnaHRUb0xlZnRNYXJrIC0gc3RhcnRdID0gemVy
b1dpZHRoU3BhY2U7CisgICAgICAgICAgICBidWZmZXJbbGVmdFRvUmlnaHRFbWJlZCAtIHN0YXJ0
XSA9IHplcm9XaWR0aFNwYWNlOworICAgICAgICAgICAgYnVmZmVyW3JpZ2h0VG9MZWZ0RW1iZWQg
LSBzdGFydF0gPSB6ZXJvV2lkdGhTcGFjZTsKKyAgICAgICAgICAgIGJ1ZmZlcltsZWZ0VG9SaWdo
dE92ZXJyaWRlIC0gc3RhcnRdID0gemVyb1dpZHRoU3BhY2U7CisgICAgICAgICAgICBidWZmZXJb
cmlnaHRUb0xlZnRPdmVycmlkZSAtIHN0YXJ0XSA9IHplcm9XaWR0aFNwYWNlOworICAgICAgICAg
ICAgYnVmZmVyW3plcm9XaWR0aE5vbkpvaW5lciAtIHN0YXJ0XSA9IHplcm9XaWR0aFNwYWNlOwor
ICAgICAgICAgICAgYnVmZmVyW3plcm9XaWR0aEpvaW5lciAtIHN0YXJ0XSA9IHplcm9XaWR0aFNw
YWNlOworICAgICAgICAgICAgYnVmZmVyW3BvcERpcmVjdGlvbmFsRm9ybWF0dGluZyAtIHN0YXJ0
XSA9IHplcm9XaWR0aFNwYWNlOworICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0ID09IChvYmplY3RS
ZXBsYWNlbWVudENoYXJhY3RlciAmIH4oR2x5cGhQYWdlOjpzaXplIC0gMSkpKSB7CisgICAgICAg
ICAgICAvLyBPYmplY3QgcmVwbGFjZW1lbnQgY2hhcmFjdGVyIG11c3Qgbm90IHJlbmRlciBhdCBh
bGwuCisgICAgICAgICAgICBidWZmZXJbb2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXIgLSBzdGFy
dF0gPSB6ZXJvV2lkdGhTcGFjZTsKKyAgICAgICAgfSBlbHNlIGlmIChzdGFydCA9PSAoemVyb1dp
ZHRoTm9CcmVha1NwYWNlICYgfihHbHlwaFBhZ2U6OnNpemUgLSAxKSkpIHsKKyAgICAgICAgICAg
IC8vIFpXTkJTL0JPTSBtdXN0IG5vdCByZW5kZXIgYXQgYWxsLgorICAgICAgICAgICAgYnVmZmVy
W3plcm9XaWR0aE5vQnJlYWtTcGFjZSAtIHN0YXJ0XSA9IHplcm9XaWR0aFNwYWNlOworICAgICAg
ICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgYnVmZmVyTGVuZ3RoID0gR2x5cGhQYWdlOjpzaXpl
ICogMjsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdseXBoUGFnZTo6c2l6ZTsg
aSsrKSB7CisgICAgICAgICAgICBpbnQgYyA9IGkgKyBzdGFydDsKKyAgICAgICAgICAgIGJ1ZmZl
cltpICogMl0gPSBVMTZfTEVBRChjKTsKKyAgICAgICAgICAgIGJ1ZmZlcltpICogMiArIDFdID0g
VTE2X1RSQUlMKGMpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gTm93IHRoYXQgd2UgaGF2
ZSBhIGJ1ZmZlciBmdWxsIG9mIGNoYXJhY3RlcnMsIHdlIHdhbnQgdG8gZ2V0IGJhY2sgYW4gYXJy
YXkKKyAgICAvLyBvZiBnbHlwaCBpbmRpY2VzLiBUaGlzIHBhcnQgaW52b2x2ZXMgY2FsbGluZyBp
bnRvIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYworICAgIC8vIHJvdXRpbmUgb2Ygb3VyIGdseXBoIG1h
cCBmb3IgYWN0dWFsbHkgZmlsbGluZyBpbiB0aGUgcGFnZSB3aXRoIHRoZSBnbHlwaHMuCisgICAg
Ly8gU3VjY2VzcyBpcyBub3QgZ3VhcmFudGVlZC4gRm9yIGV4YW1wbGUsIFRpbWVzIGZhaWxzIHRv
IGZpbGwgcGFnZSAyNjAsIGdpdmluZyBnbHlwaCBkYXRhCisgICAgLy8gZm9yIG9ubHkgMTI4IG91
dCBvZiAyNTYgY2hhcmFjdGVycy4KKyAgICBSZWZQdHI8R2x5cGhQYWdlPiBnbHlwaFBhZ2U7Cisg
ICAgaWYgKEdseXBoUGFnZTo6bWF5VXNlTWl4ZWRGb250RGF0YVdoZW5GaWxsaW5nKGJ1ZmZlciwg
YnVmZmVyTGVuZ3RoLCBmb250RGF0YSkpCisgICAgICAgIGdseXBoUGFnZSA9IEdseXBoUGFnZTo6
Y3JlYXRlRm9yTWl4ZWRGb250RGF0YSgpOworICAgIGVsc2UKKyAgICAgICAgZ2x5cGhQYWdlID0g
R2x5cGhQYWdlOjpjcmVhdGVGb3JTaW5nbGVGb250RGF0YShmb250RGF0YSk7CisKKyAgICBib29s
IGhhdmVHbHlwaHMgPSBmaWxsR2x5cGhQYWdlKCpnbHlwaFBhZ2UsIDAsIEdseXBoUGFnZTo6c2l6
ZSwgYnVmZmVyLCBidWZmZXJMZW5ndGgsIGZvbnREYXRhKTsKKyAgICBpZiAoIWhhdmVHbHlwaHMp
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgZ2x5cGhQYWdlLT5zZXRJbW11dGFibGUo
KTsKKyAgICByZXR1cm4gZ2x5cGhQYWdlOworfQorCitjb25zdCBHbHlwaFBhZ2UqIFNpbXBsZUZv
bnREYXRhOjpnbHlwaFBhZ2UodW5zaWduZWQgcGFnZU51bWJlcikgY29uc3QKK3sKKyAgICBpZiAo
cGFnZU51bWJlciA9PSAwKSB7CisgICAgICAgIGlmICghbV9nbHlwaFBhZ2VaZXJvKQorICAgICAg
ICAgICAgbV9nbHlwaFBhZ2VaZXJvID0gY3JlYXRlQW5kRmlsbEdseXBoUGFnZSgwLCB0aGlzKTsK
KyAgICAgICAgcmV0dXJuIG1fZ2x5cGhQYWdlWmVyby5nZXQoKTsKKyAgICB9CisgICAgYXV0byBh
ZGRSZXN1bHQgPSBtX2dseXBoUGFnZXMuYWRkKHBhZ2VOdW1iZXIsIG51bGxwdHIpOworICAgIGlm
IChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZSA9IGNyZWF0ZUFuZEZpbGxHbHlwaFBhZ2UocGFnZU51bWJlciwgdGhpcyk7CisKKyAgICByZXR1
cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKK30KKworR2x5cGggU2ltcGxlRm9u
dERhdGE6OmdseXBoRm9yQ2hhcmFjdGVyKFVDaGFyMzIgY2hhcmFjdGVyKSBjb25zdAoreworICAg
IGF1dG8qIHBhZ2UgPSBnbHlwaFBhZ2UoY2hhcmFjdGVyIC8gR2x5cGhQYWdlOjpzaXplKTsKKyAg
ICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBwYWdlLT5nbHlwaEF0
KGNoYXJhY3RlciAlIEdseXBoUGFnZTo6c2l6ZSk7Cit9CisKK0dseXBoRGF0YSBTaW1wbGVGb250
RGF0YTo6Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgY2hhcmFjdGVyKSBjb25zdAorewor
ICAgIGF1dG8qIHBhZ2UgPSBnbHlwaFBhZ2UoY2hhcmFjdGVyIC8gR2x5cGhQYWdlOjpzaXplKTsK
KyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybiBHbHlwaERhdGEoKTsKKyAgICByZXR1cm4g
cGFnZS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3Rlcik7Cit9CisKK1Bhc3NSZWZQdHI8
U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjp2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25G
b250RGF0YSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKKyAgICAgICAg
bV9kZXJpdmVkRm9udERhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPERlcml2ZWRGb250RGF0YT4oaXND
dXN0b21Gb250KCkpOworICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEtPnZlcnRpY2FsUmlnaHRP
cmllbnRhdGlvbikgeworICAgICAgICBGb250UGxhdGZvcm1EYXRhIHZlcnRpY2FsUmlnaHRQbGF0
Zm9ybURhdGEobV9wbGF0Zm9ybURhdGEpOworICAgICAgICB2ZXJ0aWNhbFJpZ2h0UGxhdGZvcm1E
YXRhLnNldE9yaWVudGF0aW9uKEhvcml6b250YWwpOworICAgICAgICBtX2Rlcml2ZWRGb250RGF0
YS0+dmVydGljYWxSaWdodE9yaWVudGF0aW9uID0gY3JlYXRlKHZlcnRpY2FsUmlnaHRQbGF0Zm9y
bURhdGEsIGlzQ3VzdG9tRm9udCgpLCBmYWxzZSwgdHJ1ZSk7CisgICAgfQorICAgIHJldHVybiBt
X2Rlcml2ZWRGb250RGF0YS0+dmVydGljYWxSaWdodE9yaWVudGF0aW9uOworfQorCitQYXNzUmVm
UHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6dXByaWdodE9yaWVudGF0aW9uRm9u
dERhdGEoKSBjb25zdAoreworICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEpCisgICAgICAgIG1f
ZGVyaXZlZEZvbnREYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxEZXJpdmVkRm9udERhdGE+KGlzQ3Vz
dG9tRm9udCgpKTsKKyAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhLT51cHJpZ2h0T3JpZW50YXRp
b24pCisgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT51cHJpZ2h0T3JpZW50YXRpb24gPSBjcmVh
dGUobV9wbGF0Zm9ybURhdGEsIGlzQ3VzdG9tRm9udCgpLCBmYWxzZSwgdHJ1ZSk7CisgICAgcmV0
dXJuIG1fZGVyaXZlZEZvbnREYXRhLT51cHJpZ2h0T3JpZW50YXRpb247Cit9CisKK1Bhc3NSZWZQ
dHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YShjb25z
dCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKK3sKKyAgICBpZiAoIW1f
ZGVyaXZlZEZvbnREYXRhKQorICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IHN0ZDo6bWFrZV91
bmlxdWU8RGVyaXZlZEZvbnREYXRhPihpc0N1c3RvbUZvbnQoKSk7CisgICAgaWYgKCFtX2Rlcml2
ZWRGb250RGF0YS0+c21hbGxDYXBzKQorICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxD
YXBzID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9uLCBzbWFsbENhcHNGb250
U2l6ZU11bHRpcGxpZXIpOworCisgICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENh
cHM7Cit9CisKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjplbXBo
YXNpc01hcmtGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikg
Y29uc3QKK3sKKyAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQorICAgICAgICBtX2Rlcml2ZWRG
b250RGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8RGVyaXZlZEZvbnREYXRhPihpc0N1c3RvbUZvbnQo
KSk7CisgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrKQorICAgICAgICBt
X2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9u
dERlc2NyaXB0aW9uLCBlbXBoYXNpc01hcmtGb250U2l6ZU11bHRpcGxpZXIpOworCisgICAgcmV0
dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcms7Cit9CisKK1Bhc3NSZWZQdHI8U2lt
cGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpicm9rZW5JZGVvZ3JhcGhGb250RGF0YSgpIGNv
bnN0Cit7CisgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKKyAgICAgICAgbV9kZXJpdmVkRm9u
dERhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPERlcml2ZWRGb250RGF0YT4oaXNDdXN0b21Gb250KCkp
OworICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEtPmJyb2tlbklkZW9ncmFwaCkgeworICAgICAg
ICBtX2Rlcml2ZWRGb250RGF0YS0+YnJva2VuSWRlb2dyYXBoID0gY3JlYXRlKG1fcGxhdGZvcm1E
YXRhLCBpc0N1c3RvbUZvbnQoKSwgZmFsc2UpOworICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+
YnJva2VuSWRlb2dyYXBoLT5tX2lzQnJva2VuSWRlb2dyYXBoRmFsbGJhY2sgPSB0cnVlOworICAg
IH0KKyAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPmJyb2tlbklkZW9ncmFwaDsKK30KKwor
UGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6Om5vblN5bnRoZXRpY0l0
YWxpY0ZvbnREYXRhKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQorICAg
ICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8RGVyaXZlZEZvbnREYXRh
Pihpc0N1c3RvbUZvbnQoKSk7CisgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+bm9uU3ludGhl
dGljSXRhbGljKSB7CisgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEgbm9uU3ludGhldGljSXRhbGlj
Rm9udFBsYXRmb3JtRGF0YShtX3BsYXRmb3JtRGF0YSk7CisjaWYgUExBVEZPUk0oQ09DT0EpCisg
ICAgICAgIG5vblN5bnRoZXRpY0l0YWxpY0ZvbnRQbGF0Zm9ybURhdGEubV9zeW50aGV0aWNPYmxp
cXVlID0gZmFsc2U7CisjZW5kaWYKKyAgICAgICAgbV9kZXJpdmVkRm9udERhdGEtPm5vblN5bnRo
ZXRpY0l0YWxpYyA9IGNyZWF0ZShub25TeW50aGV0aWNJdGFsaWNGb250UGxhdGZvcm1EYXRhLCBp
c0N1c3RvbUZvbnQoKSk7CisgICAgfQorICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+bm9u
U3ludGhldGljSXRhbGljOworfQorCisjaWZuZGVmIE5ERUJVRworU3RyaW5nIFNpbXBsZUZvbnRE
YXRhOjpkZXNjcmlwdGlvbigpIGNvbnN0Cit7CisgICAgaWYgKGlzU1ZHRm9udCgpKQorICAgICAg
ICByZXR1cm4gIltTVkcgZm9udF0iOworICAgIGlmIChpc0N1c3RvbUZvbnQoKSkKKyAgICAgICAg
cmV0dXJuICJbY3VzdG9tIGZvbnRdIjsKKworICAgIHJldHVybiBwbGF0Zm9ybURhdGEoKS5kZXNj
cmlwdGlvbigpOworfQorI2VuZGlmCisKK2NvbnN0IE9wZW5UeXBlTWF0aERhdGEqIFNpbXBsZUZv
bnREYXRhOjptYXRoRGF0YSgpIGNvbnN0Cit7CisgICAgaWYgKG1faXNMb2FkaW5nKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoIW1fbWF0aERhdGEpIHsKKyAgICAgICAgbV9tYXRo
RGF0YSA9IE9wZW5UeXBlTWF0aERhdGE6OmNyZWF0ZShtX3BsYXRmb3JtRGF0YSk7CisgICAgICAg
IGlmICghbV9tYXRoRGF0YS0+aGFzTWF0aERhdGEoKSkKKyAgICAgICAgICAgIG1fbWF0aERhdGEu
Y2xlYXIoKTsKKyAgICB9CisgICAgcmV0dXJuIG1fbWF0aERhdGEuZ2V0KCk7Cit9CisKK1NpbXBs
ZUZvbnREYXRhOjpEZXJpdmVkRm9udERhdGE6On5EZXJpdmVkRm9udERhdGEoKQoreworfQorCitQ
YXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlU2NhbGVkRm9u
dERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNjYWxl
RmFjdG9yKSBjb25zdAoreworICAgIGlmIChpc1NWR0ZvbnQoKSkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICByZXR1cm4gcGxhdGZvcm1DcmVhdGVTY2FsZWRGb250RGF0YShmb250RGVz
Y3JpcHRpb24sIHNjYWxlRmFjdG9yKTsKK30KKworYm9vbCBTaW1wbGVGb250RGF0YTo6YXBwbHlU
cmFuc2Zvcm1zKEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgR2x5cGhCdWZmZXJBZHZhbmNlKiBh
ZHZhbmNlcywgc2l6ZV90IGdseXBoQ291bnQsIFR5cGVzZXR0aW5nRmVhdHVyZXMgdHlwZXNldHRp
bmdGZWF0dXJlcykgY29uc3QKK3sKKyAgICAvLyBXZSBuZWVkIHRvIGhhbmRsZSB0cmFuc2Zvcm1z
IG9uIFNWRyBmb250cyBpbnRlcm5hbGx5LCBzaW5jZSB0aGV5IGFyZSByZW5kZXJlZCBpbnRlcm5h
bGx5LgorICAgIEFTU0VSVCghaXNTVkdGb250KCkpOworI2lmIFBMQVRGT1JNKElPUykgfHwgKFBM
QVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+IDEwODApCisg
ICAgQ1RGb250VHJhbnNmb3JtT3B0aW9ucyBvcHRpb25zID0gKHR5cGVzZXR0aW5nRmVhdHVyZXMg
JiBLZXJuaW5nID8ga0NURm9udFRyYW5zZm9ybUFwcGx5UG9zaXRpb25pbmcgOiAwKSB8ICh0eXBl
c2V0dGluZ0ZlYXR1cmVzICYgTGlnYXR1cmVzID8ga0NURm9udFRyYW5zZm9ybUFwcGx5U2hhcGlu
ZyA6IDApOworICAgIHJldHVybiBDVEZvbnRUcmFuc2Zvcm1HbHlwaHMobV9wbGF0Zm9ybURhdGEu
Y3RGb250KCksIGdseXBocywgcmVpbnRlcnByZXRfY2FzdDxDR1NpemUqPihhZHZhbmNlcyksIGds
eXBoQ291bnQsIG9wdGlvbnMpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZ2x5cGhzKTsKKyAg
ICBVTlVTRURfUEFSQU0oYWR2YW5jZXMpOworICAgIFVOVVNFRF9QQVJBTShnbHlwaENvdW50KTsK
KyAgICBVTlVTRURfUEFSQU0odHlwZXNldHRpbmdGZWF0dXJlcyk7CisgICAgcmV0dXJuIGZhbHNl
OworI2VuZGlmCit9CisKKy8vIEZvbnREYXRhcyBhcmUgbm90IHJlZmNvdW50ZWQgdG8gYXZvaWQg
Y3ljbGVzLgordHlwZWRlZiBIYXNoTWFwPHN0ZDo6cGFpcjxVQ2hhcjMyLCB1bnNpZ25lZD4sIFNp
bXBsZUZvbnREYXRhKj4gQ2hhcmFjdGVyRmFsbGJhY2tNYXA7Cit0eXBlZGVmIEhhc2hNYXA8Y29u
c3QgU2ltcGxlRm9udERhdGEqLCBDaGFyYWN0ZXJGYWxsYmFja01hcD4gU3lzdGVtRmFsbGJhY2tD
YWNoZTsKKworc3RhdGljIFN5c3RlbUZhbGxiYWNrQ2FjaGUmIHN5c3RlbUZhbGxiYWNrQ2FjaGUo
KQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTeXN0ZW1GYWxsYmFja0NhY2hlPiBtYXA7
CisgICAgcmV0dXJuIG1hcC5nZXQoKTsKK30KKworUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1w
bGVGb250RGF0YTo6c3lzdGVtRmFsbGJhY2tGb250RGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGNo
YXJhY3RlciwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgYm9vbCBpc0ZvclBs
YXRmb3JtRm9udCkgY29uc3QKK3sKKyAgICBhdXRvIGZvbnRBZGRSZXN1bHQgPSBzeXN0ZW1GYWxs
YmFja0NhY2hlKCkuYWRkKHRoaXMsIENoYXJhY3RlckZhbGxiYWNrTWFwKCkpOworCisgICAgYXV0
byBrZXkgPSBzdGQ6Om1ha2VfcGFpcihjaGFyYWN0ZXIsIGlzRm9yUGxhdGZvcm1Gb250KTsKKyAg
ICBhdXRvIGNoYXJhY3RlckFkZFJlc3VsdCA9IGZvbnRBZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVl
LmFkZChrZXksIG51bGxwdHIpOworCisgICAgU2ltcGxlRm9udERhdGEqJiBmYWxsYmFja0ZvbnRE
YXRhID0gY2hhcmFjdGVyQWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKKworICAgIGlmICghZmFs
bGJhY2tGb250RGF0YSkgeworICAgICAgICBVQ2hhciBjb2RlVW5pdHNbMl07CisgICAgICAgIGlu
dCBjb2RlVW5pdHNMZW5ndGg7CisgICAgICAgIGlmIChVX0lTX0JNUChjaGFyYWN0ZXIpKSB7Cisg
ICAgICAgICAgICBjb2RlVW5pdHNbMF0gPSBGb250Q2FzY2FkZTo6bm9ybWFsaXplU3BhY2VzKGNo
YXJhY3Rlcik7CisgICAgICAgICAgICBjb2RlVW5pdHNMZW5ndGggPSAxOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgY29kZVVuaXRzWzBdID0gVTE2X0xFQUQoY2hhcmFjdGVyKTsKKyAg
ICAgICAgICAgIGNvZGVVbml0c1sxXSA9IFUxNl9UUkFJTChjaGFyYWN0ZXIpOworICAgICAgICAg
ICAgY29kZVVuaXRzTGVuZ3RoID0gMjsKKyAgICAgICAgfQorCisgICAgICAgIGZhbGxiYWNrRm9u
dERhdGEgPSBmb250Q2FjaGUoKS5zeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoZGVzY3JpcHRp
b24sIHRoaXMsIGlzRm9yUGxhdGZvcm1Gb250LCBjb2RlVW5pdHMsIGNvZGVVbml0c0xlbmd0aCku
Z2V0KCk7CisgICAgICAgIGlmIChmYWxsYmFja0ZvbnREYXRhKQorICAgICAgICAgICAgZmFsbGJh
Y2tGb250RGF0YS0+bV9pc1VzZWRJblN5c3RlbUZhbGxiYWNrQ2FjaGUgPSB0cnVlOworICAgIH0K
KworICAgIHJldHVybiBmYWxsYmFja0ZvbnREYXRhOworfQorCit2b2lkIFNpbXBsZUZvbnREYXRh
OjpyZW1vdmVGcm9tU3lzdGVtRmFsbGJhY2tDYWNoZSgpCit7CisgICAgc3lzdGVtRmFsbGJhY2tD
YWNoZSgpLnJlbW92ZSh0aGlzKTsKKworICAgIGlmICghbV9pc1VzZWRJblN5c3RlbUZhbGxiYWNr
Q2FjaGUpCisgICAgICAgIHJldHVybjsKKworICAgIGZvciAoYXV0byYgY2hhcmFjdGVyTWFwIDog
c3lzdGVtRmFsbGJhY2tDYWNoZSgpLnZhbHVlcygpKSB7CisgICAgICAgIFZlY3RvcjxzdGQ6OnBh
aXI8VUNoYXIzMiwgdW5zaWduZWQ+LCA1MTI+IHRvUmVtb3ZlOworICAgICAgICBmb3IgKGF1dG8m
IGVudHJ5IDogY2hhcmFjdGVyTWFwKSB7CisgICAgICAgICAgICBpZiAoZW50cnkudmFsdWUgPT0g
dGhpcykKKyAgICAgICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQoZW50cnkua2V5KTsKKyAgICAg
ICAgfQorICAgICAgICBmb3IgKGF1dG8mIGtleSA6IHRvUmVtb3ZlKQorICAgICAgICAgICAgY2hh
cmFjdGVyTWFwLnJlbW92ZShrZXkpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAJKHdvcmtp
bmcgY29weSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisjaW5jbHVkZSAiRm9udC5oIgogCiAjaWYg
UExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlO
X1JFUVVJUkVEID4gMTA4MCkKICNpbmNsdWRlICJDb3JlVGV4dFNQSS5oIgpAQCAtNTAsNyArNTAs
NyBAQCB1bnNpZ25lZCBHbHlwaFBhZ2U6OnNfY291bnQgPSAwOwogY29uc3QgZmxvYXQgc21hbGxD
YXBzRm9udFNpemVNdWx0aXBsaWVyID0gMC43ZjsKIGNvbnN0IGZsb2F0IGVtcGhhc2lzTWFya0Zv
bnRTaXplTXVsdGlwbGllciA9IDAuNWY7CiAKLVNpbXBsZUZvbnREYXRhOjpTaW1wbGVGb250RGF0
YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEsIGJvb2wgaXNDdXN0b21Gb250
LCBib29sIGlzTG9hZGluZywgYm9vbCBpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKQorRm9udDo6
Rm9udChjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEsIGJvb2wgaXNDdXN0b21G
b250LCBib29sIGlzTG9hZGluZywgYm9vbCBpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKQogICAg
IDogbV9tYXhDaGFyV2lkdGgoLTEpCiAgICAgLCBtX2F2Z0NoYXJXaWR0aCgtMSkKICAgICAsIG1f
cGxhdGZvcm1EYXRhKHBsYXRmb3JtRGF0YSkKQEAgLTc2LDcgKzc2LDcgQEAgU2ltcGxlRm9udERh
dGE6OlNpbXBsZUZvbnREYXRhKGNvbnN0IEZvbgogI2VuZGlmCiB9CiAKLVNpbXBsZUZvbnREYXRh
OjpTaW1wbGVGb250RGF0YShzdGQ6OnVuaXF1ZV9wdHI8U1ZHRGF0YT4gc3ZnRGF0YSwgZmxvYXQg
Zm9udFNpemUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpCitGb250
OjpGb250KHN0ZDo6dW5pcXVlX3B0cjxTVkdEYXRhPiBzdmdEYXRhLCBmbG9hdCBmb250U2l6ZSwg
Ym9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYykKICAgICA6IG1fcGxhdGZv
cm1EYXRhKEZvbnRQbGF0Zm9ybURhdGEoZm9udFNpemUsIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRp
Y0l0YWxpYykpCiAgICAgLCBtX3N2Z0RhdGEoV1RGOjptb3ZlKHN2Z0RhdGEpKQogICAgICwgbV90
cmVhdEFzRml4ZWRQaXRjaChmYWxzZSkKQEAgLTkzLDExICs5MywxMSBAQCBTaW1wbGVGb250RGF0
YTo6U2ltcGxlRm9udERhdGEoc3RkOjp1bmlxCiAgICAgLCBtX3Nob3VsZE5vdEJlVXNlZEZvckFy
YWJpYyhmYWxzZSkKICNlbmRpZgogewotICAgIG1fc3ZnRGF0YS0+aW5pdGlhbGl6ZUZvbnREYXRh
KHRoaXMsIGZvbnRTaXplKTsKKyAgICBtX3N2Z0RhdGEtPmluaXRpYWxpemVGb250KHRoaXMsIGZv
bnRTaXplKTsKIH0KIAogLy8gRXN0aW1hdGVzIG9mIGF2Z0NoYXJXaWR0aCBhbmQgbWF4Q2hhcldp
ZHRoIGZvciBwbGF0Zm9ybXMgdGhhdCBkb24ndCBzdXBwb3J0IGFjY2Vzc2luZyB0aGVzZSB2YWx1
ZXMgZnJvbSB0aGUgZm9udC4KLXZvaWQgU2ltcGxlRm9udERhdGE6OmluaXRDaGFyV2lkdGhzKCkK
K3ZvaWQgRm9udDo6aW5pdENoYXJXaWR0aHMoKQogewogICAgIGF1dG8qIGdseXBoUGFnZVplcm8g
PSBnbHlwaFBhZ2UoMCk7CiAKQEAgLTExNyw3ICsxMTcsNyBAQCB2b2lkIFNpbXBsZUZvbnREYXRh
Ojppbml0Q2hhcldpZHRocygpCiAgICAgICAgIG1fbWF4Q2hhcldpZHRoID0gc3RkOjptYXgobV9h
dmdDaGFyV2lkdGgsIG1fZm9udE1ldHJpY3MuZmxvYXRBc2NlbnQoKSk7CiB9CiAKLXZvaWQgU2lt
cGxlRm9udERhdGE6OnBsYXRmb3JtR2x5cGhJbml0KCkKK3ZvaWQgRm9udDo6cGxhdGZvcm1HbHlw
aEluaXQoKQogewogICAgIGF1dG8qIGdseXBoUGFnZVplcm8gPSBnbHlwaFBhZ2UoMCk7CiAgICAg
aWYgKCFnbHlwaFBhZ2VaZXJvKSB7CkBAIC0xMzYsNyArMTM2LDcgQEAgdm9pZCBTaW1wbGVGb250
RGF0YTo6cGxhdGZvcm1HbHlwaEluaXQoKQogCiAgICAgLy8gTmFzdHkgaGFjayB0byBkZXRlcm1p
bmUgaWYgd2Ugc2hvdWxkIHJvdW5kIG9yIGNlaWwgc3BhY2Ugd2lkdGhzLgogICAgIC8vIElmIHRo
ZSBmb250IGlzIG1vbm9zcGFjZSBvciBmYWtlIG1vbm9zcGFjZSB3ZSBjZWlsIHRvIGVuc3VyZSB0
aGF0IAotICAgIC8vIGV2ZXJ5IGNoYXJhY3RlciBhbmQgdGhlIHNwYWNlIGFyZSB0aGUgc2FtZSB3
aWR0aC4gIE90aGVyd2lzZSB3ZSByb3VuZC4KKyAgICAvLyBldmVyeSBjaGFyYWN0ZXIgYW5kIHRo
ZSBzcGFjZSBhcmUgdGhlIHNhbWUgd2lkdGguIE90aGVyd2lzZSB3ZSByb3VuZC4KICAgICBtX3Nw
YWNlR2x5cGggPSBnbHlwaFBhZ2VaZXJvLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoJyAnKS5nbHlw
aDsKICAgICBmbG9hdCB3aWR0aCA9IHdpZHRoRm9yR2x5cGgobV9zcGFjZUdseXBoKTsKICAgICBt
X3NwYWNlV2lkdGggPSB3aWR0aDsKQEAgLTE0NywzNyArMTQ3LDM3IEBAIHZvaWQgU2ltcGxlRm9u
dERhdGE6OnBsYXRmb3JtR2x5cGhJbml0KCkKIAogICAgIC8vIEZvcmNlIHRoZSBnbHlwaCBmb3Ig
WkVSTyBXSURUSCBTUEFDRSB0byBoYXZlIHplcm8gd2lkdGgsIHVubGVzcyBpdCBpcyBzaGFyZWQg
d2l0aCBTUEFDRS4KICAgICAvLyBIZWx2ZXRpY2EgaXMgYW4gZXhhbXBsZSBvZiBhIG5vbi16ZXJv
IHdpZHRoIFpFUk8gV0lEVEggU1BBQ0UgZ2x5cGguCi0gICAgLy8gU2VlIDxodHRwOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzE3OD4gYW5kIFNpbXBsZUZvbnREYXRhOjppc1pl
cm9XaWR0aFNwYWNlR2x5cGgoKQorICAgIC8vIFNlZSA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTMxNzg+IGFuZCBGb250Ojppc1plcm9XaWR0aFNwYWNlR2x5cGgoKQog
ICAgIGlmIChtX3plcm9XaWR0aFNwYWNlR2x5cGggPT0gbV9zcGFjZUdseXBoKQogICAgICAgICBt
X3plcm9XaWR0aFNwYWNlR2x5cGggPSAwOwogfQogCi1TaW1wbGVGb250RGF0YTo6flNpbXBsZUZv
bnREYXRhKCkKK0ZvbnQ6On5Gb250KCkKIHsKICAgICByZW1vdmVGcm9tU3lzdGVtRmFsbGJhY2tD
YWNoZSgpOwogfQogCi1zdGF0aWMgYm9vbCBmaWxsR2x5cGhQYWdlKEdseXBoUGFnZSYgcGFnZVRv
RmlsbCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIsIHVu
c2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQorc3Rh
dGljIGJvb2wgZmlsbEdseXBoUGFnZShHbHlwaFBhZ2UmIHBhZ2VUb0ZpbGwsIHVuc2lnbmVkIG9m
ZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5n
dGgsIGNvbnN0IEZvbnQqIGZvbnQpCiB7CiAjaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICBpZiAo
YXV0byogc3ZnRGF0YSA9IGZvbnREYXRhLT5zdmdEYXRhKCkpCi0gICAgICAgIHJldHVybiBzdmdE
YXRhLT5maWxsU1ZHR2x5cGhQYWdlKCZwYWdlVG9GaWxsLCBvZmZzZXQsIGxlbmd0aCwgYnVmZmVy
LCBidWZmZXJMZW5ndGgsIGZvbnREYXRhKTsKKyAgICBpZiAoYXV0byogc3ZnRGF0YSA9IGZvbnQt
PnN2Z0RhdGEoKSkKKyAgICAgICAgcmV0dXJuIHN2Z0RhdGEtPmZpbGxTVkdHbHlwaFBhZ2UoJnBh
Z2VUb0ZpbGwsIG9mZnNldCwgbGVuZ3RoLCBidWZmZXIsIGJ1ZmZlckxlbmd0aCwgZm9udCk7CiAj
ZW5kaWYKLSAgICBib29sIGhhc0dseXBocyA9IHBhZ2VUb0ZpbGwuZmlsbChvZmZzZXQsIGxlbmd0
aCwgYnVmZmVyLCBidWZmZXJMZW5ndGgsIGZvbnREYXRhKTsKKyAgICBib29sIGhhc0dseXBocyA9
IHBhZ2VUb0ZpbGwuZmlsbChvZmZzZXQsIGxlbmd0aCwgYnVmZmVyLCBidWZmZXJMZW5ndGgsIGZv
bnQpOwogI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKLSAgICBpZiAoaGFzR2x5cGhzICYm
IGZvbnREYXRhLT52ZXJ0aWNhbERhdGEoKSkKLSAgICAgICAgZm9udERhdGEtPnZlcnRpY2FsRGF0
YSgpLT5zdWJzdGl0dXRlV2l0aFZlcnRpY2FsR2x5cGhzKGZvbnREYXRhLCAmcGFnZVRvRmlsbCwg
b2Zmc2V0LCBsZW5ndGgpOworICAgIGlmIChoYXNHbHlwaHMgJiYgZm9udC0+dmVydGljYWxEYXRh
KCkpCisgICAgICAgIGZvbnQtPnZlcnRpY2FsRGF0YSgpLT5zdWJzdGl0dXRlV2l0aFZlcnRpY2Fs
R2x5cGhzKGZvbnQsICZwYWdlVG9GaWxsLCBvZmZzZXQsIGxlbmd0aCk7CiAjZW5kaWYKICAgICBy
ZXR1cm4gaGFzR2x5cGhzOwogfQogCi1zdGF0aWMgUmVmUHRyPEdseXBoUGFnZT4gY3JlYXRlQW5k
RmlsbEdseXBoUGFnZSh1bnNpZ25lZCBwYWdlTnVtYmVyLCBjb25zdCBTaW1wbGVGb250RGF0YSog
Zm9udERhdGEpCitzdGF0aWMgUmVmUHRyPEdseXBoUGFnZT4gY3JlYXRlQW5kRmlsbEdseXBoUGFn
ZSh1bnNpZ25lZCBwYWdlTnVtYmVyLCBjb25zdCBGb250KiBmb250KQogewogI2lmIFBMQVRGT1JN
KElPUykKICAgICAvLyBGSVhNRTogVGltZXMgTmV3IFJvbWFuIGNvbnRhaW5zIEFyYWJpYyBnbHlw
aHMsIGJ1dCBDb3JlIFRleHQgZG9lc24ndCBrbm93IGhvdyB0byBzaGFwZSB0aGVtLiBTZWUgPHJk
YXI6Ly9wcm9ibGVtLzk4MjM5NzU+LgotICAgIC8vIE9uY2Ugd2UgaGF2ZSB0aGUgZml4IGZvciA8
cmRhcjovL3Byb2JsZW0vOTgyMzk3NT4gdGhlbiByZW1vdmUgdGhpcyBjb2RlIHRvZ2V0aGVyIHdp
dGggU2ltcGxlRm9udERhdGE6OnNob3VsZE5vdEJlVXNlZEZvckFyYWJpYygpCisgICAgLy8gT25j
ZSB3ZSBoYXZlIHRoZSBmaXggZm9yIDxyZGFyOi8vcHJvYmxlbS85ODIzOTc1PiB0aGVuIHJlbW92
ZSB0aGlzIGNvZGUgdG9nZXRoZXIgd2l0aCBGb250OjpzaG91bGROb3RCZVVzZWRGb3JBcmFiaWMo
KQogICAgIC8vIGluIDxyZGFyOi8vcHJvYmxlbS8xMjA5NjgzNT4uCi0gICAgaWYgKHBhZ2VOdW1i
ZXIgPT0gNiAmJiBmb250RGF0YS0+c2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKCkpCisgICAgaWYg
KHBhZ2VOdW1iZXIgPT0gNiAmJiBmb250LT5zaG91bGROb3RCZVVzZWRGb3JBcmFiaWMoKSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAjZW5kaWYKIApAQCAtMTkwLDcgKzE5MCw3IEBAIHN0YXRp
YyBSZWZQdHI8R2x5cGhQYWdlPiBjcmVhdGVBbmRGaWxsR2wKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IEdseXBoUGFnZTo6c2l6ZTsgaSsrKQogICAgICAgICAgICAgYnVmZmVyW2ld
ID0gc3RhcnQgKyBpOwogCi0gICAgICAgIGlmIChzdGFydCA9PSAwKSB7CisgICAgICAgIGlmICgh
c3RhcnQpIHsKICAgICAgICAgICAgIC8vIENvbnRyb2wgY2hhcmFjdGVycyBtdXN0IG5vdCByZW5k
ZXIgYXQgYWxsLgogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDB4MjA7ICsr
aSkKICAgICAgICAgICAgICAgICBidWZmZXJbaV0gPSB6ZXJvV2lkdGhTcGFjZTsKQEAgLTIzNSwx
MiArMjM1LDEyIEBAIHN0YXRpYyBSZWZQdHI8R2x5cGhQYWdlPiBjcmVhdGVBbmRGaWxsR2wKICAg
ICAvLyBTdWNjZXNzIGlzIG5vdCBndWFyYW50ZWVkLiBGb3IgZXhhbXBsZSwgVGltZXMgZmFpbHMg
dG8gZmlsbCBwYWdlIDI2MCwgZ2l2aW5nIGdseXBoIGRhdGEKICAgICAvLyBmb3Igb25seSAxMjgg
b3V0IG9mIDI1NiBjaGFyYWN0ZXJzLgogICAgIFJlZlB0cjxHbHlwaFBhZ2U+IGdseXBoUGFnZTsK
LSAgICBpZiAoR2x5cGhQYWdlOjptYXlVc2VNaXhlZEZvbnREYXRhV2hlbkZpbGxpbmcoYnVmZmVy
LCBidWZmZXJMZW5ndGgsIGZvbnREYXRhKSkKLSAgICAgICAgZ2x5cGhQYWdlID0gR2x5cGhQYWdl
OjpjcmVhdGVGb3JNaXhlZEZvbnREYXRhKCk7CisgICAgaWYgKEdseXBoUGFnZTo6bWF5VXNlTWl4
ZWRGb250c1doZW5GaWxsaW5nKGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCBmb250KSkKKyAgICAgICAg
Z2x5cGhQYWdlID0gR2x5cGhQYWdlOjpjcmVhdGVGb3JNaXhlZEZvbnRzKCk7CiAgICAgZWxzZQot
ICAgICAgICBnbHlwaFBhZ2UgPSBHbHlwaFBhZ2U6OmNyZWF0ZUZvclNpbmdsZUZvbnREYXRhKGZv
bnREYXRhKTsKKyAgICAgICAgZ2x5cGhQYWdlID0gR2x5cGhQYWdlOjpjcmVhdGVGb3JTaW5nbGVG
b250KGZvbnQpOwogCi0gICAgYm9vbCBoYXZlR2x5cGhzID0gZmlsbEdseXBoUGFnZSgqZ2x5cGhQ
YWdlLCAwLCBHbHlwaFBhZ2U6OnNpemUsIGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCBmb250RGF0YSk7
CisgICAgYm9vbCBoYXZlR2x5cGhzID0gZmlsbEdseXBoUGFnZSgqZ2x5cGhQYWdlLCAwLCBHbHlw
aFBhZ2U6OnNpemUsIGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCBmb250KTsKICAgICBpZiAoIWhhdmVH
bHlwaHMpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0yNDgsOSArMjQ4LDkgQEAgc3Rh
dGljIFJlZlB0cjxHbHlwaFBhZ2U+IGNyZWF0ZUFuZEZpbGxHbAogICAgIHJldHVybiBnbHlwaFBh
Z2U7CiB9CiAKLWNvbnN0IEdseXBoUGFnZSogU2ltcGxlRm9udERhdGE6OmdseXBoUGFnZSh1bnNp
Z25lZCBwYWdlTnVtYmVyKSBjb25zdAorY29uc3QgR2x5cGhQYWdlKiBGb250OjpnbHlwaFBhZ2Uo
dW5zaWduZWQgcGFnZU51bWJlcikgY29uc3QKIHsKLSAgICBpZiAocGFnZU51bWJlciA9PSAwKSB7
CisgICAgaWYgKCFwYWdlTnVtYmVyKSB7CiAgICAgICAgIGlmICghbV9nbHlwaFBhZ2VaZXJvKQog
ICAgICAgICAgICAgbV9nbHlwaFBhZ2VaZXJvID0gY3JlYXRlQW5kRmlsbEdseXBoUGFnZSgwLCB0
aGlzKTsKICAgICAgICAgcmV0dXJuIG1fZ2x5cGhQYWdlWmVyby5nZXQoKTsKQEAgLTI2Miw3ICsy
NjIsNyBAQCBjb25zdCBHbHlwaFBhZ2UqIFNpbXBsZUZvbnREYXRhOjpnbHlwaFBhCiAgICAgcmV0
dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7CiB9CiAKLUdseXBoIFNpbXBsZUZv
bnREYXRhOjpnbHlwaEZvckNoYXJhY3RlcihVQ2hhcjMyIGNoYXJhY3RlcikgY29uc3QKK0dseXBo
IEZvbnQ6OmdseXBoRm9yQ2hhcmFjdGVyKFVDaGFyMzIgY2hhcmFjdGVyKSBjb25zdAogewogICAg
IGF1dG8qIHBhZ2UgPSBnbHlwaFBhZ2UoY2hhcmFjdGVyIC8gR2x5cGhQYWdlOjpzaXplKTsKICAg
ICBpZiAoIXBhZ2UpCkBAIC0yNzAsNyArMjcwLDcgQEAgR2x5cGggU2ltcGxlRm9udERhdGE6Omds
eXBoRm9yQ2hhcmFjdGVyKAogICAgIHJldHVybiBwYWdlLT5nbHlwaEF0KGNoYXJhY3RlciAlIEds
eXBoUGFnZTo6c2l6ZSk7CiB9CiAKLUdseXBoRGF0YSBTaW1wbGVGb250RGF0YTo6Z2x5cGhEYXRh
Rm9yQ2hhcmFjdGVyKFVDaGFyMzIgY2hhcmFjdGVyKSBjb25zdAorR2x5cGhEYXRhIEZvbnQ6Omds
eXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGNoYXJhY3RlcikgY29uc3QKIHsKICAgICBhdXRv
KiBwYWdlID0gZ2x5cGhQYWdlKGNoYXJhY3RlciAvIEdseXBoUGFnZTo6c2l6ZSk7CiAgICAgaWYg
KCFwYWdlKQpAQCAtMjc4LDcgKzI3OCw3IEBAIEdseXBoRGF0YSBTaW1wbGVGb250RGF0YTo6Z2x5
cGhEYXRhRm9yQ2gKICAgICByZXR1cm4gcGFnZS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJh
Y3Rlcik7CiB9CiAKLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjp2
ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250RGF0YSgpIGNvbnN0CitQYXNzUmVmUHRyPEZvbnQ+
IEZvbnQ6OnZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbkZvbnQoKSBjb25zdAogewogICAgIGlmICgh
bV9kZXJpdmVkRm9udERhdGEpCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gc3RkOjptYWtl
X3VuaXF1ZTxEZXJpdmVkRm9udERhdGE+KGlzQ3VzdG9tRm9udCgpKTsKQEAgLTI5MCw3ICsyOTAs
NyBAQCBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0CiAgICAgcmV0dXJu
IG1fZGVyaXZlZEZvbnREYXRhLT52ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb247CiB9CiAKLVBhc3NS
ZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjp1cHJpZ2h0T3JpZW50YXRpb25G
b250RGF0YSgpIGNvbnN0CitQYXNzUmVmUHRyPEZvbnQ+IEZvbnQ6OnVwcmlnaHRPcmllbnRhdGlv
bkZvbnQoKSBjb25zdAogewogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEpCiAgICAgICAgIG1f
ZGVyaXZlZEZvbnREYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxEZXJpdmVkRm9udERhdGE+KGlzQ3Vz
dG9tRm9udCgpKTsKQEAgLTI5OSwyNyArMjk5LDI3IEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERh
dGE+IFNpbXBsZUZvbnREYXQKICAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPnVwcmlnaHRP
cmllbnRhdGlvbjsKIH0KIAotUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERh
dGE6OnNtYWxsQ2Fwc0ZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0
aW9uKSBjb25zdAorUGFzc1JlZlB0cjxGb250PiBGb250OjpzbWFsbENhcHNGb250KGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAogewogICAgIGlmICghbV9kZXJp
dmVkRm9udERhdGEpCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gc3RkOjptYWtlX3VuaXF1
ZTxEZXJpdmVkRm9udERhdGE+KGlzQ3VzdG9tRm9udCgpKTsKICAgICBpZiAoIW1fZGVyaXZlZEZv
bnREYXRhLT5zbWFsbENhcHMpCi0gICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMg
PSBjcmVhdGVTY2FsZWRGb250RGF0YShmb250RGVzY3JpcHRpb24sIHNtYWxsQ2Fwc0ZvbnRTaXpl
TXVsdGlwbGllcik7CisgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMgPSBjcmVh
dGVTY2FsZWRGb250KGZvbnREZXNjcmlwdGlvbiwgc21hbGxDYXBzRm9udFNpemVNdWx0aXBsaWVy
KTsKIAogICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzOwogfQogCi1QYXNz
UmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6ZW1waGFzaXNNYXJrRm9udERh
dGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0CitQYXNzUmVm
UHRyPEZvbnQ+IEZvbnQ6OmVtcGhhc2lzTWFya0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBm
b250RGVzY3JpcHRpb24pIGNvbnN0CiB7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKICAg
ICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPERlcml2ZWRGb250RGF0
YT4oaXNDdXN0b21Gb250KCkpOwogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lz
TWFyaykKLSAgICAgICAgbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyayA9IGNyZWF0ZVNj
YWxlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgZW1waGFzaXNNYXJrRm9udFNpemVNdWx0aXBs
aWVyKTsKKyAgICAgICAgbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyayA9IGNyZWF0ZVNj
YWxlZEZvbnQoZm9udERlc2NyaXB0aW9uLCBlbXBoYXNpc01hcmtGb250U2l6ZU11bHRpcGxpZXIp
OwogCiAgICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcms7CiB9CiAKLVBh
c3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpicm9rZW5JZGVvZ3JhcGhG
b250RGF0YSgpIGNvbnN0CitQYXNzUmVmUHRyPEZvbnQ+IEZvbnQ6OmJyb2tlbklkZW9ncmFwaEZv
bnQoKSBjb25zdAogewogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEpCiAgICAgICAgIG1fZGVy
aXZlZEZvbnREYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxEZXJpdmVkRm9udERhdGE+KGlzQ3VzdG9t
Rm9udCgpKTsKQEAgLTMzMCw3ICszMzAsNyBAQCBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBT
aW1wbGVGb250RGF0CiAgICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5icm9rZW5JZGVvZ3Jh
cGg7CiB9CiAKLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpub25T
eW50aGV0aWNJdGFsaWNGb250RGF0YSgpIGNvbnN0CitQYXNzUmVmUHRyPEZvbnQ+IEZvbnQ6Om5v
blN5bnRoZXRpY0l0YWxpY0ZvbnQoKSBjb25zdAogewogICAgIGlmICghbV9kZXJpdmVkRm9udERh
dGEpCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxEZXJpdmVk
Rm9udERhdGE+KGlzQ3VzdG9tRm9udCgpKTsKQEAgLTM0NSw3ICszNDUsNyBAQCBQYXNzUmVmUHRy
PFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0CiB9CiAKICNpZm5kZWYgTkRFQlVHCi1TdHJp
bmcgU2ltcGxlRm9udERhdGE6OmRlc2NyaXB0aW9uKCkgY29uc3QKK1N0cmluZyBGb250OjpkZXNj
cmlwdGlvbigpIGNvbnN0CiB7CiAgICAgaWYgKGlzU1ZHRm9udCgpKQogICAgICAgICByZXR1cm4g
IltTVkcgZm9udF0iOwpAQCAtMzU2LDcgKzM1Niw3IEBAIFN0cmluZyBTaW1wbGVGb250RGF0YTo6
ZGVzY3JpcHRpb24oKSBjb24KIH0KICNlbmRpZgogCi1jb25zdCBPcGVuVHlwZU1hdGhEYXRhKiBT
aW1wbGVGb250RGF0YTo6bWF0aERhdGEoKSBjb25zdAorY29uc3QgT3BlblR5cGVNYXRoRGF0YSog
Rm9udDo6bWF0aERhdGEoKSBjb25zdAogewogICAgIGlmIChtX2lzTG9hZGluZykKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CkBAIC0zNjgsMTkgKzM2OCwxOSBAQCBjb25zdCBPcGVuVHlwZU1hdGhE
YXRhKiBTaW1wbGVGb250RGF0YTo6CiAgICAgcmV0dXJuIG1fbWF0aERhdGEuZ2V0KCk7CiB9CiAK
LVNpbXBsZUZvbnREYXRhOjpEZXJpdmVkRm9udERhdGE6On5EZXJpdmVkRm9udERhdGEoKQorRm9u
dDo6RGVyaXZlZEZvbnREYXRhOjp+RGVyaXZlZEZvbnREYXRhKCkKIHsKIH0KIAotUGFzc1JlZlB0
cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZVNjYWxlZEZvbnREYXRhKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBzY2FsZUZhY3Rvcikg
Y29uc3QKK1Bhc3NSZWZQdHI8Rm9udD4gRm9udDo6Y3JlYXRlU2NhbGVkRm9udChjb25zdCBGb250
RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0CiB7
CiAgICAgaWYgKGlzU1ZHRm9udCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJl
dHVybiBwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgc2NhbGVG
YWN0b3IpOworICAgIHJldHVybiBwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZvbnQoZm9udERlc2NyaXB0
aW9uLCBzY2FsZUZhY3Rvcik7CiB9CiAKLWJvb2wgU2ltcGxlRm9udERhdGE6OmFwcGx5VHJhbnNm
b3JtcyhHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5j
ZXMsIHNpemVfdCBnbHlwaENvdW50LCBUeXBlc2V0dGluZ0ZlYXR1cmVzIHR5cGVzZXR0aW5nRmVh
dHVyZXMpIGNvbnN0Citib29sIEZvbnQ6OmFwcGx5VHJhbnNmb3JtcyhHbHlwaEJ1ZmZlckdseXBo
KiBnbHlwaHMsIEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHNpemVfdCBnbHlwaENvdW50
LCBUeXBlc2V0dGluZ0ZlYXR1cmVzIHR5cGVzZXR0aW5nRmVhdHVyZXMpIGNvbnN0CiB7CiAgICAg
Ly8gV2UgbmVlZCB0byBoYW5kbGUgdHJhbnNmb3JtcyBvbiBTVkcgZm9udHMgaW50ZXJuYWxseSwg
c2luY2UgdGhleSBhcmUgcmVuZGVyZWQgaW50ZXJuYWxseS4KICAgICBBU1NFUlQoIWlzU1ZHRm9u
dCgpKTsKQEAgLTM5Niw5ICszOTYsOSBAQCBib29sIFNpbXBsZUZvbnREYXRhOjphcHBseVRyYW5z
Zm9ybXMoR2x5CiAjZW5kaWYKIH0KIAotLy8gRm9udERhdGFzIGFyZSBub3QgcmVmY291bnRlZCB0
byBhdm9pZCBjeWNsZXMuCi10eXBlZGVmIEhhc2hNYXA8c3RkOjpwYWlyPFVDaGFyMzIsIHVuc2ln
bmVkPiwgU2ltcGxlRm9udERhdGEqPiBDaGFyYWN0ZXJGYWxsYmFja01hcDsKLXR5cGVkZWYgSGFz
aE1hcDxjb25zdCBTaW1wbGVGb250RGF0YSosIENoYXJhY3RlckZhbGxiYWNrTWFwPiBTeXN0ZW1G
YWxsYmFja0NhY2hlOworLy8gRm9udHMgYXJlIG5vdCByZWYnZCB0byBhdm9pZCBjeWNsZXMuCit0
eXBlZGVmIEhhc2hNYXA8c3RkOjpwYWlyPFVDaGFyMzIsIHVuc2lnbmVkPiwgRm9udCo+IENoYXJh
Y3RlckZhbGxiYWNrTWFwOwordHlwZWRlZiBIYXNoTWFwPGNvbnN0IEZvbnQqLCBDaGFyYWN0ZXJG
YWxsYmFja01hcD4gU3lzdGVtRmFsbGJhY2tDYWNoZTsKIAogc3RhdGljIFN5c3RlbUZhbGxiYWNr
Q2FjaGUmIHN5c3RlbUZhbGxiYWNrQ2FjaGUoKQogewpAQCAtNDA2LDE2ICs0MDYsMTYgQEAgc3Rh
dGljIFN5c3RlbUZhbGxiYWNrQ2FjaGUmIHN5c3RlbUZhbGxiYQogICAgIHJldHVybiBtYXAuZ2V0
KCk7CiB9CiAKLVJlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OnN5c3RlbUZh
bGxiYWNrRm9udERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjaGFyYWN0ZXIsIGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGJvb2wgaXNGb3JQbGF0Zm9ybUZvbnQpIGNvbnN0CitS
ZWZQdHI8Rm9udD4gRm9udDo6c3lzdGVtRmFsbGJhY2tGb250Rm9yQ2hhcmFjdGVyKFVDaGFyMzIg
Y2hhcmFjdGVyLCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBib29sIGlzRm9y
UGxhdGZvcm1Gb250KSBjb25zdAogewogICAgIGF1dG8gZm9udEFkZFJlc3VsdCA9IHN5c3RlbUZh
bGxiYWNrQ2FjaGUoKS5hZGQodGhpcywgQ2hhcmFjdGVyRmFsbGJhY2tNYXAoKSk7CiAKICAgICBh
dXRvIGtleSA9IHN0ZDo6bWFrZV9wYWlyKGNoYXJhY3RlciwgaXNGb3JQbGF0Zm9ybUZvbnQpOwog
ICAgIGF1dG8gY2hhcmFjdGVyQWRkUmVzdWx0ID0gZm9udEFkZFJlc3VsdC5pdGVyYXRvci0+dmFs
dWUuYWRkKGtleSwgbnVsbHB0cik7CiAKLSAgICBTaW1wbGVGb250RGF0YSomIGZhbGxiYWNrRm9u
dERhdGEgPSBjaGFyYWN0ZXJBZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOworICAgIEZvbnQqJiBm
YWxsYmFja0ZvbnQgPSBjaGFyYWN0ZXJBZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogCi0gICAg
aWYgKCFmYWxsYmFja0ZvbnREYXRhKSB7CisgICAgaWYgKCFmYWxsYmFja0ZvbnQpIHsKICAgICAg
ICAgVUNoYXIgY29kZVVuaXRzWzJdOwogICAgICAgICBpbnQgY29kZVVuaXRzTGVuZ3RoOwogICAg
ICAgICBpZiAoVV9JU19CTVAoY2hhcmFjdGVyKSkgewpAQCAtNDI3LDE1ICs0MjcsMTUgQEAgUmVm
UHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6cwogICAgICAgICAgICAgY29kZVVu
aXRzTGVuZ3RoID0gMjsKICAgICAgICAgfQogCi0gICAgICAgIGZhbGxiYWNrRm9udERhdGEgPSBm
b250Q2FjaGUoKS5zeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoZGVzY3JpcHRpb24sIHRoaXMs
IGlzRm9yUGxhdGZvcm1Gb250LCBjb2RlVW5pdHMsIGNvZGVVbml0c0xlbmd0aCkuZ2V0KCk7Ci0g
ICAgICAgIGlmIChmYWxsYmFja0ZvbnREYXRhKQotICAgICAgICAgICAgZmFsbGJhY2tGb250RGF0
YS0+bV9pc1VzZWRJblN5c3RlbUZhbGxiYWNrQ2FjaGUgPSB0cnVlOworICAgICAgICBmYWxsYmFj
a0ZvbnQgPSBmb250Q2FjaGUoKS5zeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoZGVzY3JpcHRp
b24sIHRoaXMsIGlzRm9yUGxhdGZvcm1Gb250LCBjb2RlVW5pdHMsIGNvZGVVbml0c0xlbmd0aCku
Z2V0KCk7CisgICAgICAgIGlmIChmYWxsYmFja0ZvbnQpCisgICAgICAgICAgICBmYWxsYmFja0Zv
bnQtPm1faXNVc2VkSW5TeXN0ZW1GYWxsYmFja0NhY2hlID0gdHJ1ZTsKICAgICB9CiAKLSAgICBy
ZXR1cm4gZmFsbGJhY2tGb250RGF0YTsKKyAgICByZXR1cm4gZmFsbGJhY2tGb250OwogfQogCi12
b2lkIFNpbXBsZUZvbnREYXRhOjpyZW1vdmVGcm9tU3lzdGVtRmFsbGJhY2tDYWNoZSgpCit2b2lk
IEZvbnQ6OnJlbW92ZUZyb21TeXN0ZW1GYWxsYmFja0NhY2hlKCkKIHsKICAgICBzeXN0ZW1GYWxs
YmFja0NhY2hlKCkucmVtb3ZlKHRoaXMpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udC5oCShyZXZpc2lvbiAxNzg2NTApCShmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmg6MTc4NjUwKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzY5
IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIGludGVybmFsIGZvbnQgaW1wbGVt
ZW50YXRpb24uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4LCAyMDEwLCAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4
IFRvcmNoIE1vYmlsZSwgSW5jLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBTaW1wbGVGb250RGF0YV9oCisjZGVmaW5l
IFNpbXBsZUZvbnREYXRhX2gKKworI2luY2x1ZGUgIkZvbnRCYXNlbGluZS5oIgorI2luY2x1ZGUg
IkZvbnRNZXRyaWNzLmgiCisjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgorI2luY2x1ZGUg
IkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCisjaW5jbHVkZSAiR2x5cGhN
ZXRyaWNzTWFwLmgiCisjaW5jbHVkZSAiR2x5cGhQYWdlLmgiCisjaW5jbHVkZSAiT3BlblR5cGVN
YXRoRGF0YS5oIgorI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKKyNpbmNsdWRlICJPcGVu
VHlwZVZlcnRpY2FsRGF0YS5oIgorI2VuZGlmCisjaW5jbHVkZSAiVHlwZXNldHRpbmdGZWF0dXJl
cy5oIgorI2luY2x1ZGUgPHd0Zi9UeXBlQ2FzdHMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdIYXNoLmg+CisKKyNpZiBQTEFURk9STShDT0NPQSkKKyNpbmNsdWRlICJXZWJDb3JlU3lzdGVt
SW50ZXJmYWNlLmgiCisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2VuZGlmCisKKyNpZiBQ
TEFURk9STShXSU4pCisjaW5jbHVkZSA8dXNwMTAuaD4KKyNlbmRpZgorCisjaWYgVVNFKENBSVJP
KQorI2luY2x1ZGUgPGNhaXJvLmg+CisjZW5kaWYKKworI2lmIFVTRShDRykKKyNpbmNsdWRlIDxX
ZWJDb3JlL0NvcmVHcmFwaGljc1NQSS5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgR2x5cGhQYWdlOworY2xhc3MgRm9udERlc2NyaXB0aW9uOworY2xhc3MgU2hhcmVk
QnVmZmVyOworc3RydWN0IEdseXBoRGF0YTsKK3N0cnVjdCBXaWR0aEl0ZXJhdG9yOworCitlbnVt
IEZvbnREYXRhVmFyaWFudCB7IEF1dG9WYXJpYW50LCBOb3JtYWxWYXJpYW50LCBTbWFsbENhcHNW
YXJpYW50LCBFbXBoYXNpc01hcmtWYXJpYW50LCBCcm9rZW5JZGVvZ3JhcGhWYXJpYW50IH07Citl
bnVtIFBpdGNoIHsgVW5rbm93blBpdGNoLCBGaXhlZFBpdGNoLCBWYXJpYWJsZVBpdGNoIH07CisK
K2NsYXNzIFNpbXBsZUZvbnREYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8U2ltcGxlRm9udERhdGE+
IHsKK3B1YmxpYzoKKyAgICBjbGFzcyBTVkdEYXRhIHsKKyAgICAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIH5TVkdEYXRhKCkgeyB9CisK
KyAgICAgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVGb250RGF0YShTaW1wbGVGb250RGF0YSos
IGZsb2F0IGZvbnRTaXplKSA9IDA7CisgICAgICAgIHZpcnR1YWwgZmxvYXQgd2lkdGhGb3JTVkdH
bHlwaChHbHlwaCwgZmxvYXQgZm9udFNpemUpIGNvbnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCBi
b29sIGZpbGxTVkdHbHlwaFBhZ2UoR2x5cGhQYWdlKiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25l
ZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgU2lt
cGxlRm9udERhdGEqKSBjb25zdCA9IDA7CisgICAgfTsKKworICAgIC8vIFVzZWQgdG8gY3JlYXRl
IHBsYXRmb3JtIGZvbnRzLgorICAgIHN0YXRpYyBSZWY8U2ltcGxlRm9udERhdGE+IGNyZWF0ZShj
b25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEsIGJvb2wgaXNDdXN0b21Gb250ID0g
ZmFsc2UsIGJvb2wgaXNMb2FkaW5nID0gZmFsc2UsIGJvb2wgaXNUZXh0T3JpZW50YXRpb25GYWxs
YmFjayA9IGZhbHNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2ltcGxl
Rm9udERhdGEocGxhdGZvcm1EYXRhLCBpc0N1c3RvbUZvbnQsIGlzTG9hZGluZywgaXNUZXh0T3Jp
ZW50YXRpb25GYWxsYmFjaykpOworICAgIH0KKworICAgIC8vIFVzZWQgdG8gY3JlYXRlIFNWRyBG
b250cy4KKyAgICBzdGF0aWMgUmVmPFNpbXBsZUZvbnREYXRhPiBjcmVhdGUoc3RkOjp1bmlxdWVf
cHRyPFNWR0RhdGE+IHN2Z0RhdGEsIGZsb2F0IGZvbnRTaXplLCBib29sIHN5bnRoZXRpY0JvbGQs
IGJvb2wgc3ludGhldGljSXRhbGljKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgU2ltcGxlRm9udERhdGEoV1RGOjptb3ZlKHN2Z0RhdGEpLCBmb250U2l6ZSwgc3ludGhldGlj
Qm9sZCwgc3ludGhldGljSXRhbGljKSk7CisgICAgfQorCisgICAgflNpbXBsZUZvbnREYXRhKCk7
CisKKyAgICBzdGF0aWMgY29uc3QgU2ltcGxlRm9udERhdGEqIHN5c3RlbUZhbGxiYWNrKCkgeyBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBTaW1wbGVGb250RGF0YSo+KC0xKTsgfQorCisg
ICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhKCkgY29uc3QgeyByZXR1cm4g
bV9wbGF0Zm9ybURhdGE7IH0KKyAgICBjb25zdCBPcGVuVHlwZU1hdGhEYXRhKiBtYXRoRGF0YSgp
IGNvbnN0OworI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKKyAgICBjb25zdCBPcGVuVHlw
ZVZlcnRpY2FsRGF0YSogdmVydGljYWxEYXRhKCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0aWNhbERh
dGEuZ2V0KCk7IH0KKyNlbmRpZgorCisgICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gc21h
bGxDYXBzRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJikgY29uc3Q7CisgICAgUGFzc1Jl
ZlB0cjxTaW1wbGVGb250RGF0YT4gZW1waGFzaXNNYXJrRm9udERhdGEoY29uc3QgRm9udERlc2Ny
aXB0aW9uJikgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gYnJva2VuSWRl
b2dyYXBoRm9udERhdGEoKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBu
b25TeW50aGV0aWNJdGFsaWNGb250RGF0YSgpIGNvbnN0OworCisgICAgUGFzc1JlZlB0cjxTaW1w
bGVGb250RGF0YT4gdmFyaWFudEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3Jp
cHRpb24sIEZvbnREYXRhVmFyaWFudCB2YXJpYW50KSBjb25zdAorICAgIHsKKyAgICAgICAgc3dp
dGNoICh2YXJpYW50KSB7CisgICAgICAgIGNhc2UgU21hbGxDYXBzVmFyaWFudDoKKyAgICAgICAg
ICAgIHJldHVybiBzbWFsbENhcHNGb250RGF0YShkZXNjcmlwdGlvbik7CisgICAgICAgIGNhc2Ug
RW1waGFzaXNNYXJrVmFyaWFudDoKKyAgICAgICAgICAgIHJldHVybiBlbXBoYXNpc01hcmtGb250
RGF0YShkZXNjcmlwdGlvbik7CisgICAgICAgIGNhc2UgQnJva2VuSWRlb2dyYXBoVmFyaWFudDoK
KyAgICAgICAgICAgIHJldHVybiBicm9rZW5JZGVvZ3JhcGhGb250RGF0YSgpOworICAgICAgICBj
YXNlIEF1dG9WYXJpYW50OgorICAgICAgICBjYXNlIE5vcm1hbFZhcmlhbnQ6CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgcmV0dXJuIGNvbnN0X2Nhc3Q8U2ltcGxlRm9udERhdGEqPih0aGlzKTsKKyAgICB9CisKKyAg
ICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiB2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250
RGF0YSgpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IHVwcmlnaHRPcmll
bnRhdGlvbkZvbnREYXRhKCkgY29uc3Q7CisKKyAgICBib29sIGhhc1ZlcnRpY2FsR2x5cGhzKCkg
Y29uc3QgeyByZXR1cm4gbV9oYXNWZXJ0aWNhbEdseXBoczsgfQorICAgIGJvb2wgaXNUZXh0T3Jp
ZW50YXRpb25GYWxsYmFjaygpIGNvbnN0IHsgcmV0dXJuIG1faXNUZXh0T3JpZW50YXRpb25GYWxs
YmFjazsgfQorCisgICAgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzKCkgeyByZXR1cm4gbV9mb250
TWV0cmljczsgfQorICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBmb250TWV0cmljcygpIGNvbnN0IHsg
cmV0dXJuIG1fZm9udE1ldHJpY3M7IH0KKyAgICBmbG9hdCBzaXplUGVyVW5pdCgpIGNvbnN0IHsg
cmV0dXJuIHBsYXRmb3JtRGF0YSgpLnNpemUoKSAvIChmb250TWV0cmljcygpLnVuaXRzUGVyRW0o
KSA/IGZvbnRNZXRyaWNzKCkudW5pdHNQZXJFbSgpIDogMSk7IH0KKworICAgIGZsb2F0IG1heENo
YXJXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4Q2hhcldpZHRoOyB9CisgICAgdm9pZCBzZXRN
YXhDaGFyV2lkdGgoZmxvYXQgbWF4Q2hhcldpZHRoKSB7IG1fbWF4Q2hhcldpZHRoID0gbWF4Q2hh
cldpZHRoOyB9CisKKyAgICBmbG9hdCBhdmdDaGFyV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2F2
Z0NoYXJXaWR0aDsgfQorICAgIHZvaWQgc2V0QXZnQ2hhcldpZHRoKGZsb2F0IGF2Z0NoYXJXaWR0
aCkgeyBtX2F2Z0NoYXJXaWR0aCA9IGF2Z0NoYXJXaWR0aDsgfQorCisgICAgRmxvYXRSZWN0IGJv
dW5kc0ZvckdseXBoKEdseXBoKSBjb25zdDsKKyAgICBmbG9hdCB3aWR0aEZvckdseXBoKEdseXBo
IGdseXBoKSBjb25zdDsKKyAgICBGbG9hdFJlY3QgcGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlw
aCkgY29uc3Q7CisgICAgZmxvYXQgcGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoKSBjb25zdDsK
KworICAgIGZsb2F0IHNwYWNlV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3NwYWNlV2lkdGg7IH0K
KyAgICBmbG9hdCBhZGp1c3RlZFNwYWNlV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2FkanVzdGVk
U3BhY2VXaWR0aDsgfQorICAgIHZvaWQgc2V0U3BhY2VXaWR0aHMoZmxvYXQgc3BhY2VXaWR0aCkK
KyAgICB7CisgICAgICAgIG1fc3BhY2VXaWR0aCA9IHNwYWNlV2lkdGg7CisgICAgICAgIG1fYWRq
dXN0ZWRTcGFjZVdpZHRoID0gc3BhY2VXaWR0aDsKKyAgICB9CisKKyNpZiBVU0UoQ0cpIHx8IFVT
RShDQUlSTykKKyAgICBmbG9hdCBzeW50aGV0aWNCb2xkT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4g
bV9zeW50aGV0aWNCb2xkT2Zmc2V0OyB9CisjZW5kaWYKKworICAgIEdseXBoIHNwYWNlR2x5cGgo
KSBjb25zdCB7IHJldHVybiBtX3NwYWNlR2x5cGg7IH0KKyAgICB2b2lkIHNldFNwYWNlR2x5cGgo
R2x5cGggc3BhY2VHbHlwaCkgeyBtX3NwYWNlR2x5cGggPSBzcGFjZUdseXBoOyB9CisgICAgR2x5
cGggemVyb1dpZHRoU3BhY2VHbHlwaCgpIGNvbnN0IHsgcmV0dXJuIG1femVyb1dpZHRoU3BhY2VH
bHlwaDsgfQorICAgIHZvaWQgc2V0WmVyb1dpZHRoU3BhY2VHbHlwaChHbHlwaCBzcGFjZUdseXBo
KSB7IG1femVyb1dpZHRoU3BhY2VHbHlwaCA9IHNwYWNlR2x5cGg7IH0KKyAgICBib29sIGlzWmVy
b1dpZHRoU3BhY2VHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QgeyByZXR1cm4gZ2x5cGggPT0gbV96
ZXJvV2lkdGhTcGFjZUdseXBoICYmIGdseXBoOyB9CisgICAgR2x5cGggemVyb0dseXBoKCkgY29u
c3QgeyByZXR1cm4gbV96ZXJvR2x5cGg7IH0KKyAgICB2b2lkIHNldFplcm9HbHlwaChHbHlwaCB6
ZXJvR2x5cGgpIHsgbV96ZXJvR2x5cGggPSB6ZXJvR2x5cGg7IH0KKworICAgIEdseXBoRGF0YSBn
bHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMikgY29uc3Q7CisgICAgR2x5cGggZ2x5cGhGb3JD
aGFyYWN0ZXIoVUNoYXIzMikgY29uc3Q7CisKKyAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IHN5
c3RlbUZhbGxiYWNrRm9udERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiwgY29uc3QgRm9udERlc2Ny
aXB0aW9uJiwgYm9vbCBpc0ZvclBsYXRmb3JtRm9udCkgY29uc3Q7CisKKyAgICBjb25zdCBHbHlw
aFBhZ2UqIGdseXBoUGFnZSh1bnNpZ25lZCBwYWdlTnVtYmVyKSBjb25zdDsKKworICAgIHZvaWQg
ZGV0ZXJtaW5lUGl0Y2goKTsKKyAgICBQaXRjaCBwaXRjaCgpIGNvbnN0IHsgcmV0dXJuIG1fdHJl
YXRBc0ZpeGVkUGl0Y2ggPyBGaXhlZFBpdGNoIDogVmFyaWFibGVQaXRjaDsgfQorCisgICAgY29u
c3QgU1ZHRGF0YSogc3ZnRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fc3ZnRGF0YS5nZXQoKTsgfQor
ICAgIGJvb2wgaXNTVkdGb250KCkgY29uc3QgeyByZXR1cm4gISFtX3N2Z0RhdGE7IH0KKworICAg
IGJvb2wgaXNDdXN0b21Gb250KCkgY29uc3QgeyByZXR1cm4gbV9pc0N1c3RvbUZvbnQ7IH0KKyAg
ICBib29sIGlzTG9hZGluZygpIGNvbnN0IHsgcmV0dXJuIG1faXNMb2FkaW5nOyB9CisKKyNpZm5k
ZWYgTkRFQlVHCisgICAgU3RyaW5nIGRlc2NyaXB0aW9uKCkgY29uc3Q7CisjZW5kaWYKKworI2lm
IFVTRShBUFBLSVQpCisgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGNvbXBvc2l0ZUZvbnRSZWZl
cmVuY2VGb250RGF0YShOU0ZvbnQgKmtleSkgY29uc3Q7CisgICAgTlNGb250KiBnZXROU0ZvbnQo
KSBjb25zdCB7IHJldHVybiBtX3BsYXRmb3JtRGF0YS5uc0ZvbnQoKTsgfQorI2VuZGlmCisKKyNp
ZiBQTEFURk9STShJT1MpCisgICAgQ1RGb250UmVmIGdldENURm9udCgpIGNvbnN0IHsgcmV0dXJu
IG1fcGxhdGZvcm1EYXRhLmZvbnQoKTsgfQorICAgIGJvb2wgc2hvdWxkTm90QmVVc2VkRm9yQXJh
YmljKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGROb3RCZVVzZWRGb3JBcmFiaWM7IH07CisjZW5k
aWYKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBDRkRpY3Rpb25hcnlSZWYgZ2V0Q0ZTdHJpbmdB
dHRyaWJ1dGVzKFR5cGVzZXR0aW5nRmVhdHVyZXMsIEZvbnRPcmllbnRhdGlvbikgY29uc3Q7Cisj
ZW5kaWYKKworI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBVU0UoSEFSRkJVWlopCisgICAgYm9vbCBj
YW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBVQ2hhciosIHNpemVfdCkg
Y29uc3Q7CisjZW5kaWYKKworICAgIGJvb2wgYXBwbHlUcmFuc2Zvcm1zKEdseXBoQnVmZmVyR2x5
cGgqLCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCBzaXplX3QgZ2x5cGhDb3VudCwgVHlwZXNldHRpbmdG
ZWF0dXJlcykgY29uc3Q7CisKKyNpZiBQTEFURk9STShXSU4pCisgICAgYm9vbCBpc1N5c3RlbUZv
bnQoKSBjb25zdCB7IHJldHVybiBtX2lzU3lzdGVtRm9udDsgfQorICAgIFNDUklQVF9GT05UUFJP
UEVSVElFUyogc2NyaXB0Rm9udFByb3BlcnRpZXMoKSBjb25zdDsKKyAgICBTQ1JJUFRfQ0FDSEUq
IHNjcmlwdENhY2hlKCkgY29uc3QgeyByZXR1cm4gJm1fc2NyaXB0Q2FjaGU7IH0KKyAgICBzdGF0
aWMgdm9pZCBzZXRTaG91bGRBcHBseU1hY0FzY2VudEhhY2soYm9vbCk7CisgICAgc3RhdGljIGJv
b2wgc2hvdWxkQXBwbHlNYWNBc2NlbnRIYWNrKCk7CisgICAgc3RhdGljIGZsb2F0IGFzY2VudENv
bnNpZGVyaW5nTWFjQXNjZW50SGFjayhjb25zdCBXQ0hBUiosIGZsb2F0IGFzY2VudCwgZmxvYXQg
ZGVzY2VudCk7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBTaW1wbGVGb250RGF0YShjb25zdCBG
b250UGxhdGZvcm1EYXRhJiwgYm9vbCBpc0N1c3RvbUZvbnQgPSBmYWxzZSwgYm9vbCBpc0xvYWRp
bmcgPSBmYWxzZSwgYm9vbCBpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrID0gZmFsc2UpOworCisg
ICAgU2ltcGxlRm9udERhdGEoc3RkOjp1bmlxdWVfcHRyPFNWR0RhdGE+LCBmbG9hdCBmb250U2l6
ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYyk7CisKKyAgICB2b2lk
IHBsYXRmb3JtSW5pdCgpOworICAgIHZvaWQgcGxhdGZvcm1HbHlwaEluaXQoKTsKKyAgICB2b2lk
IHBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpOworICAgIHZvaWQgcGxhdGZvcm1EZXN0cm95KCk7CisK
KyAgICB2b2lkIGluaXRDaGFyV2lkdGhzKCk7CisKKyAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnRE
YXRhPiBjcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBz
Y2FsZUZhY3RvcikgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gcGxhdGZv
cm1DcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBzY2Fs
ZUZhY3RvcikgY29uc3Q7CisKKyAgICB2b2lkIHJlbW92ZUZyb21TeXN0ZW1GYWxsYmFja0NhY2hl
KCk7CisKKyNpZiBQTEFURk9STShXSU4pCisgICAgdm9pZCBpbml0R0RJRm9udCgpOworICAgIHZv
aWQgcGxhdGZvcm1Db21tb25EZXN0cm95KCk7CisgICAgRmxvYXRSZWN0IGJvdW5kc0ZvckdESUds
eXBoKEdseXBoIGdseXBoKSBjb25zdDsKKyAgICBmbG9hdCB3aWR0aEZvckdESUdseXBoKEdseXBo
IGdseXBoKSBjb25zdDsKKyNlbmRpZgorCisjaWYgVVNFKENHKQorICAgIGJvb2wgY2FuVXNlRmFz
dEdseXBoQWR2YW5jZUdldHRlcihHbHlwaCBnbHlwaCwgQ0dTaXplJiBhZHZhbmNlLCBib29sJiBw
b3B1bGF0ZWRBZHZhbmNlKSBjb25zdDsKKyAgICBDR0ZvbnRSZW5kZXJpbmdTdHlsZSByZW5kZXJp
bmdTdHlsZSgpIGNvbnN0OworICAgIGJvb2wgYWR2YW5jZUZvckNvbG9yQml0bWFwRm9udChHbHlw
aCwgQ0dTaXplJiByZXN1bHQpIGNvbnN0OyAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGZvbnQgaXMg
YSBjb2xvciBiaXRtYXAgZm9udAorI2VuZGlmCisKKyAgICBGb250TWV0cmljcyBtX2ZvbnRNZXRy
aWNzOworICAgIGZsb2F0IG1fbWF4Q2hhcldpZHRoOworICAgIGZsb2F0IG1fYXZnQ2hhcldpZHRo
OworCisgICAgRm9udFBsYXRmb3JtRGF0YSBtX3BsYXRmb3JtRGF0YTsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8U1ZHRGF0YT4gbV9zdmdEYXRhOworCisgICAgbXV0YWJsZSBSZWZQdHI8R2x5cGhQYWdl
PiBtX2dseXBoUGFnZVplcm87CisgICAgbXV0YWJsZSBIYXNoTWFwPHVuc2lnbmVkLCBSZWZQdHI8
R2x5cGhQYWdlPj4gbV9nbHlwaFBhZ2VzOworICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPEds
eXBoTWV0cmljc01hcDxGbG9hdFJlY3Q+PiBtX2dseXBoVG9Cb3VuZHNNYXA7CisgICAgbXV0YWJs
ZSBHbHlwaE1ldHJpY3NNYXA8ZmxvYXQ+IG1fZ2x5cGhUb1dpZHRoTWFwOworCisgICAgYm9vbCBt
X3RyZWF0QXNGaXhlZFBpdGNoOworICAgIGJvb2wgbV9pc0N1c3RvbUZvbnQ7ICAvLyBXaGV0aGVy
IG9yIG5vdCB3ZSBhcmUgY3VzdG9tIGZvbnQgbG9hZGVkIHZpYSBAZm9udC1mYWNlCisgICAgYm9v
bCBtX2lzTG9hZGluZzsgLy8gV2hldGhlciBvciBub3QgdGhpcyBjdXN0b20gZm9udCBpcyBzdGls
bCBpbiB0aGUgYWN0IG9mIGxvYWRpbmcuCisKKyAgICBib29sIG1faXNUZXh0T3JpZW50YXRpb25G
YWxsYmFjazsKKyAgICBib29sIG1faXNCcm9rZW5JZGVvZ3JhcGhGYWxsYmFjazsKKworICAgIGJv
b2wgbV9pc1VzZWRJblN5c3RlbUZhbGxiYWNrQ2FjaGUgeyBmYWxzZSB9OworCisgICAgbXV0YWJs
ZSBSZWZQdHI8T3BlblR5cGVNYXRoRGF0YT4gbV9tYXRoRGF0YTsKKyNpZiBFTkFCTEUoT1BFTlRZ
UEVfVkVSVElDQUwpCisgICAgUmVmUHRyPE9wZW5UeXBlVmVydGljYWxEYXRhPiBtX3ZlcnRpY2Fs
RGF0YTsKKyNlbmRpZgorICAgIGJvb2wgbV9oYXNWZXJ0aWNhbEdseXBoczsKKworICAgIEdseXBo
IG1fc3BhY2VHbHlwaDsKKyAgICBmbG9hdCBtX3NwYWNlV2lkdGg7CisgICAgR2x5cGggbV96ZXJv
R2x5cGg7CisgICAgZmxvYXQgbV9hZGp1c3RlZFNwYWNlV2lkdGg7CisKKyAgICBHbHlwaCBtX3pl
cm9XaWR0aFNwYWNlR2x5cGg7CisKKyAgICBzdHJ1Y3QgRGVyaXZlZEZvbnREYXRhIHsKKyAgICAg
ICAgZXhwbGljaXQgRGVyaXZlZEZvbnREYXRhKGJvb2wgY3VzdG9tKQorICAgICAgICAgICAgOiBm
b3JDdXN0b21Gb250KGN1c3RvbSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIH5EZXJp
dmVkRm9udERhdGEoKTsKKworICAgICAgICBib29sIGZvckN1c3RvbUZvbnQ7CisgICAgICAgIFJl
ZlB0cjxTaW1wbGVGb250RGF0YT4gc21hbGxDYXBzOworICAgICAgICBSZWZQdHI8U2ltcGxlRm9u
dERhdGE+IGVtcGhhc2lzTWFyazsKKyAgICAgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBicm9r
ZW5JZGVvZ3JhcGg7CisgICAgICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gdmVydGljYWxSaWdo
dE9yaWVudGF0aW9uOworICAgICAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IHVwcmlnaHRPcmll
bnRhdGlvbjsKKyAgICAgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBub25TeW50aGV0aWNJdGFs
aWM7CisjaWYgVVNFKEFQUEtJVCkKKyAgICAgICAgSGFzaE1hcDxOU0ZvbnQqLCBSZWZQdHI8U2lt
cGxlRm9udERhdGE+PiBjb21wb3NpdGVGb250UmVmZXJlbmNlczsKKyNlbmRpZgorICAgIH07CisK
KyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxEZXJpdmVkRm9udERhdGE+IG1fZGVyaXZlZEZv
bnREYXRhOworCisjaWYgVVNFKENHKSB8fCBVU0UoQ0FJUk8pCisgICAgZmxvYXQgbV9zeW50aGV0
aWNCb2xkT2Zmc2V0OworI2VuZGlmCisKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBtdXRhYmxl
IEhhc2hNYXA8dW5zaWduZWQsIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+PiBtX0NGU3RyaW5n
QXR0cmlidXRlczsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFVTRShIQVJGQlVa
WikKKyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxIYXNoTWFwPFN0cmluZywgYm9vbD4+IG1f
Y29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2VTdXBwb3J0OworI2VuZGlmCisKKyNpZiBQTEFURk9S
TShXSU4pCisgICAgYm9vbCBtX2lzU3lzdGVtRm9udDsKKyAgICBtdXRhYmxlIFNDUklQVF9DQUNI
RSBtX3NjcmlwdENhY2hlOworICAgIG11dGFibGUgU0NSSVBUX0ZPTlRQUk9QRVJUSUVTKiBtX3Nj
cmlwdEZvbnRQcm9wZXJ0aWVzOworI2VuZGlmCisjaWYgUExBVEZPUk0oSU9TKQorICAgIGJvb2wg
bV9zaG91bGROb3RCZVVzZWRGb3JBcmFiaWM7CisjZW5kaWYKK307CisKK0FMV0FZU19JTkxJTkUg
RmxvYXRSZWN0IFNpbXBsZUZvbnREYXRhOjpib3VuZHNGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29u
c3QKK3sKKyAgICBpZiAoaXNaZXJvV2lkdGhTcGFjZUdseXBoKGdseXBoKSkKKyAgICAgICAgcmV0
dXJuIEZsb2F0UmVjdCgpOworCisgICAgRmxvYXRSZWN0IGJvdW5kczsKKyAgICBpZiAobV9nbHlw
aFRvQm91bmRzTWFwKSB7CisgICAgICAgIGJvdW5kcyA9IG1fZ2x5cGhUb0JvdW5kc01hcC0+bWV0
cmljc0ZvckdseXBoKGdseXBoKTsKKyAgICAgICAgaWYgKGJvdW5kcy53aWR0aCgpICE9IGNHbHlw
aFNpemVVbmtub3duKQorICAgICAgICAgICAgcmV0dXJuIGJvdW5kczsKKyAgICB9CisKKyAgICBi
b3VuZHMgPSBwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKGdseXBoKTsKKyAgICBpZiAoIW1fZ2x5cGhU
b0JvdW5kc01hcCkKKyAgICAgICAgbV9nbHlwaFRvQm91bmRzTWFwID0gc3RkOjptYWtlX3VuaXF1
ZTxHbHlwaE1ldHJpY3NNYXA8RmxvYXRSZWN0Pj4oKTsKKyAgICBtX2dseXBoVG9Cb3VuZHNNYXAt
PnNldE1ldHJpY3NGb3JHbHlwaChnbHlwaCwgYm91bmRzKTsKKyAgICByZXR1cm4gYm91bmRzOwor
fQorCitBTFdBWVNfSU5MSU5FIGZsb2F0IFNpbXBsZUZvbnREYXRhOjp3aWR0aEZvckdseXBoKEds
eXBoIGdseXBoKSBjb25zdAoreworICAgIGlmIChpc1plcm9XaWR0aFNwYWNlR2x5cGgoZ2x5cGgp
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIGZsb2F0IHdpZHRoID0gbV9nbHlwaFRvV2lkdGhN
YXAubWV0cmljc0ZvckdseXBoKGdseXBoKTsKKyAgICBpZiAod2lkdGggIT0gY0dseXBoU2l6ZVVu
a25vd24pCisgICAgICAgIHJldHVybiB3aWR0aDsKKworICAgIGlmIChpc1NWR0ZvbnQoKSkKKyAg
ICAgICAgd2lkdGggPSBtX3N2Z0RhdGEtPndpZHRoRm9yU1ZHR2x5cGgoZ2x5cGgsIG1fcGxhdGZv
cm1EYXRhLnNpemUoKSk7CisjaWYgRU5BQkxFKE9QRU5UWVBFX1ZFUlRJQ0FMKQorICAgIGVsc2Ug
aWYgKG1fdmVydGljYWxEYXRhKQorI2lmIFVTRShDRykgfHwgVVNFKENBSVJPKQorICAgICAgICB3
aWR0aCA9IG1fdmVydGljYWxEYXRhLT5hZHZhbmNlSGVpZ2h0KHRoaXMsIGdseXBoKSArIG1fc3lu
dGhldGljQm9sZE9mZnNldDsKKyNlbHNlCisgICAgICAgIHdpZHRoID0gbV92ZXJ0aWNhbERhdGEt
PmFkdmFuY2VIZWlnaHQodGhpcywgZ2x5cGgpOworI2VuZGlmCisjZW5kaWYKKyAgICBlbHNlCisg
ICAgICAgIHdpZHRoID0gcGxhdGZvcm1XaWR0aEZvckdseXBoKGdseXBoKTsKKworICAgIG1fZ2x5
cGhUb1dpZHRoTWFwLnNldE1ldHJpY3NGb3JHbHlwaChnbHlwaCwgd2lkdGgpOworICAgIHJldHVy
biB3aWR0aDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU2ltcGxl
Rm9udERhdGFfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAko
d29ya2luZyBjb3B5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMSwxMyArMjEsMTMgQEAKICAqCiAgKi8KIAotI2lmbmRlZiBT
aW1wbGVGb250RGF0YV9oCi0jZGVmaW5lIFNpbXBsZUZvbnREYXRhX2gKKyNpZm5kZWYgRm9udF9o
CisjZGVmaW5lIEZvbnRfaAogCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiRm9u
dEJhc2VsaW5lLmgiCiAjaW5jbHVkZSAiRm9udE1ldHJpY3MuaCIKICNpbmNsdWRlICJGb250UGxh
dGZvcm1EYXRhLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiR2x5cGhCdWZm
ZXIuaCIKICNpbmNsdWRlICJHbHlwaE1ldHJpY3NNYXAuaCIKICNpbmNsdWRlICJHbHlwaFBhZ2Uu
aCIKQEAgLTY0LDM2ICs2NCwzNiBAQCBjbGFzcyBTaGFyZWRCdWZmZXI7CiBzdHJ1Y3QgR2x5cGhE
YXRhOwogc3RydWN0IFdpZHRoSXRlcmF0b3I7CiAKLWVudW0gRm9udERhdGFWYXJpYW50IHsgQXV0
b1ZhcmlhbnQsIE5vcm1hbFZhcmlhbnQsIFNtYWxsQ2Fwc1ZhcmlhbnQsIEVtcGhhc2lzTWFya1Zh
cmlhbnQsIEJyb2tlbklkZW9ncmFwaFZhcmlhbnQgfTsKK2VudW0gRm9udFZhcmlhbnQgeyBBdXRv
VmFyaWFudCwgTm9ybWFsVmFyaWFudCwgU21hbGxDYXBzVmFyaWFudCwgRW1waGFzaXNNYXJrVmFy
aWFudCwgQnJva2VuSWRlb2dyYXBoVmFyaWFudCB9OwogZW51bSBQaXRjaCB7IFVua25vd25QaXRj
aCwgRml4ZWRQaXRjaCwgVmFyaWFibGVQaXRjaCB9OwogCi1jbGFzcyBTaW1wbGVGb250RGF0YSA6
IHB1YmxpYyBSZWZDb3VudGVkPFNpbXBsZUZvbnREYXRhPiB7CitjbGFzcyBGb250IDogcHVibGlj
IFJlZkNvdW50ZWQ8Rm9udD4gewogcHVibGljOgogICAgIGNsYXNzIFNWR0RhdGEgewogICAgICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwg
flNWR0RhdGEoKSB7IH0KIAotICAgICAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZUZvbnREYXRh
KFNpbXBsZUZvbnREYXRhKiwgZmxvYXQgZm9udFNpemUpID0gMDsKKyAgICAgICAgdmlydHVhbCB2
b2lkIGluaXRpYWxpemVGb250KEZvbnQqLCBmbG9hdCBmb250U2l6ZSkgPSAwOwogICAgICAgICB2
aXJ0dWFsIGZsb2F0IHdpZHRoRm9yU1ZHR2x5cGgoR2x5cGgsIGZsb2F0IGZvbnRTaXplKSBjb25z
dCA9IDA7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBmaWxsU1ZHR2x5cGhQYWdlKEdseXBoUGFnZSos
IHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25l
ZCBidWZmZXJMZW5ndGgsIGNvbnN0IFNpbXBsZUZvbnREYXRhKikgY29uc3QgPSAwOworICAgICAg
ICB2aXJ0dWFsIGJvb2wgZmlsbFNWR0dseXBoUGFnZShHbHlwaFBhZ2UqLCB1bnNpZ25lZCBvZmZz
ZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3Ro
LCBjb25zdCBGb250KikgY29uc3QgPSAwOwogICAgIH07CiAKICAgICAvLyBVc2VkIHRvIGNyZWF0
ZSBwbGF0Zm9ybSBmb250cy4KLSAgICBzdGF0aWMgUmVmPFNpbXBsZUZvbnREYXRhPiBjcmVhdGUo
Y29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhLCBib29sIGlzQ3VzdG9tRm9udCA9
IGZhbHNlLCBib29sIGlzTG9hZGluZyA9IGZhbHNlLCBib29sIGlzVGV4dE9yaWVudGF0aW9uRmFs
bGJhY2sgPSBmYWxzZSkKKyAgICBzdGF0aWMgUmVmPEZvbnQ+IGNyZWF0ZShjb25zdCBGb250UGxh
dGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEsIGJvb2wgaXNDdXN0b21Gb250ID0gZmFsc2UsIGJvb2wg
aXNMb2FkaW5nID0gZmFsc2UsIGJvb2wgaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjayA9IGZhbHNl
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2ltcGxlRm9udERhdGEocGxh
dGZvcm1EYXRhLCBpc0N1c3RvbUZvbnQsIGlzTG9hZGluZywgaXNUZXh0T3JpZW50YXRpb25GYWxs
YmFjaykpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGb250KHBsYXRmb3JtRGF0YSwg
aXNDdXN0b21Gb250LCBpc0xvYWRpbmcsIGlzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2spKTsKICAg
ICB9CiAKICAgICAvLyBVc2VkIHRvIGNyZWF0ZSBTVkcgRm9udHMuCi0gICAgc3RhdGljIFJlZjxT
aW1wbGVGb250RGF0YT4gY3JlYXRlKHN0ZDo6dW5pcXVlX3B0cjxTVkdEYXRhPiBzdmdEYXRhLCBm
bG9hdCBmb250U2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYykK
KyAgICBzdGF0aWMgUmVmPEZvbnQ+IGNyZWF0ZShzdGQ6OnVuaXF1ZV9wdHI8U1ZHRGF0YT4gc3Zn
RGF0YSwgZmxvYXQgZm9udFNpemUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJ
dGFsaWMpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTaW1wbGVGb250RGF0
YShXVEY6Om1vdmUoc3ZnRGF0YSksIGZvbnRTaXplLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJ
dGFsaWMpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRm9udChXVEY6Om1vdmUoc3Zn
RGF0YSksIGZvbnRTaXplLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMpKTsKICAgICB9
CiAKLSAgICB+U2ltcGxlRm9udERhdGEoKTsKKyAgICB+Rm9udCgpOwogCi0gICAgc3RhdGljIGNv
bnN0IFNpbXBsZUZvbnREYXRhKiBzeXN0ZW1GYWxsYmFjaygpIHsgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgU2ltcGxlRm9udERhdGEqPigtMSk7IH0KKyAgICBzdGF0aWMgY29uc3QgRm9u
dCogc3lzdGVtRmFsbGJhY2soKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IEZvbnQq
PigtMSk7IH0KIAogICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSgpIGNv
bnN0IHsgcmV0dXJuIG1fcGxhdGZvcm1EYXRhOyB9CiAgICAgY29uc3QgT3BlblR5cGVNYXRoRGF0
YSogbWF0aERhdGEoKSBjb25zdDsKQEAgLTEwMSwzMCArMTAxLDMwIEBAIHB1YmxpYzoKICAgICBj
b25zdCBPcGVuVHlwZVZlcnRpY2FsRGF0YSogdmVydGljYWxEYXRhKCkgY29uc3QgeyByZXR1cm4g
bV92ZXJ0aWNhbERhdGEuZ2V0KCk7IH0KICNlbmRpZgogCi0gICAgUGFzc1JlZlB0cjxTaW1wbGVG
b250RGF0YT4gc21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJikgY29uc3Q7
Ci0gICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gZW1waGFzaXNNYXJrRm9udERhdGEoY29u
c3QgRm9udERlc2NyaXB0aW9uJikgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0
YT4gYnJva2VuSWRlb2dyYXBoRm9udERhdGEoKSBjb25zdDsKLSAgICBQYXNzUmVmUHRyPFNpbXBs
ZUZvbnREYXRhPiBub25TeW50aGV0aWNJdGFsaWNGb250RGF0YSgpIGNvbnN0OworICAgIFBhc3NS
ZWZQdHI8Rm9udD4gc21hbGxDYXBzRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mKSBjb25zdDsK
KyAgICBQYXNzUmVmUHRyPEZvbnQ+IGVtcGhhc2lzTWFya0ZvbnQoY29uc3QgRm9udERlc2NyaXB0
aW9uJikgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxGb250PiBicm9rZW5JZGVvZ3JhcGhGb250KCkg
Y29uc3Q7CisgICAgUGFzc1JlZlB0cjxGb250PiBub25TeW50aGV0aWNJdGFsaWNGb250KCkgY29u
c3Q7CiAKLSAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiB2YXJpYW50Rm9udERhdGEoY29u
c3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udERhdGFWYXJpYW50IHZhcmlhbnQp
IGNvbnN0CisgICAgUGFzc1JlZlB0cjxGb250PiB2YXJpYW50Rm9udChjb25zdCBGb250RGVzY3Jp
cHRpb24mIGRlc2NyaXB0aW9uLCBGb250VmFyaWFudCB2YXJpYW50KSBjb25zdAogICAgIHsKICAg
ICAgICAgc3dpdGNoICh2YXJpYW50KSB7CiAgICAgICAgIGNhc2UgU21hbGxDYXBzVmFyaWFudDoK
LSAgICAgICAgICAgIHJldHVybiBzbWFsbENhcHNGb250RGF0YShkZXNjcmlwdGlvbik7CisgICAg
ICAgICAgICByZXR1cm4gc21hbGxDYXBzRm9udChkZXNjcmlwdGlvbik7CiAgICAgICAgIGNhc2Ug
RW1waGFzaXNNYXJrVmFyaWFudDoKLSAgICAgICAgICAgIHJldHVybiBlbXBoYXNpc01hcmtGb250
RGF0YShkZXNjcmlwdGlvbik7CisgICAgICAgICAgICByZXR1cm4gZW1waGFzaXNNYXJrRm9udChk
ZXNjcmlwdGlvbik7CiAgICAgICAgIGNhc2UgQnJva2VuSWRlb2dyYXBoVmFyaWFudDoKLSAgICAg
ICAgICAgIHJldHVybiBicm9rZW5JZGVvZ3JhcGhGb250RGF0YSgpOworICAgICAgICAgICAgcmV0
dXJuIGJyb2tlbklkZW9ncmFwaEZvbnQoKTsKICAgICAgICAgY2FzZSBBdXRvVmFyaWFudDoKICAg
ICAgICAgY2FzZSBOb3JtYWxWYXJpYW50OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBjb25zdF9jYXN0
PFNpbXBsZUZvbnREYXRhKj4odGhpcyk7CisgICAgICAgIHJldHVybiBjb25zdF9jYXN0PEZvbnQq
Pih0aGlzKTsKICAgICB9CiAKLSAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiB2ZXJ0aWNh
bFJpZ2h0T3JpZW50YXRpb25Gb250RGF0YSgpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8U2ltcGxl
Rm9udERhdGE+IHVwcmlnaHRPcmllbnRhdGlvbkZvbnREYXRhKCkgY29uc3Q7CisgICAgUGFzc1Jl
ZlB0cjxGb250PiB2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250KCkgY29uc3Q7CisgICAgUGFz
c1JlZlB0cjxGb250PiB1cHJpZ2h0T3JpZW50YXRpb25Gb250KCkgY29uc3Q7CiAKICAgICBib29s
IGhhc1ZlcnRpY2FsR2x5cGhzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNWZXJ0aWNhbEdseXBoczsg
fQogICAgIGJvb2wgaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaygpIGNvbnN0IHsgcmV0dXJuIG1f
aXNUZXh0T3JpZW50YXRpb25GYWxsYmFjazsgfQpAQCAtMTQwLDcgKzE0MCw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNldEF2Z0NoYXJXaWR0aChmbG9hdCBhdmdDaGFyV2lkdGgpIHsgbV9hdmdDaGFy
V2lkdGggPSBhdmdDaGFyV2lkdGg7IH0KIAogICAgIEZsb2F0UmVjdCBib3VuZHNGb3JHbHlwaChH
bHlwaCkgY29uc3Q7Ci0gICAgZmxvYXQgd2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3Q7
CisgICAgZmxvYXQgd2lkdGhGb3JHbHlwaChHbHlwaCkgY29uc3Q7CiAgICAgRmxvYXRSZWN0IHBs
YXRmb3JtQm91bmRzRm9yR2x5cGgoR2x5cGgpIGNvbnN0OwogICAgIGZsb2F0IHBsYXRmb3JtV2lk
dGhGb3JHbHlwaChHbHlwaCkgY29uc3Q7CiAKQEAgLTE2Nyw3ICsxNjcsNyBAQCBwdWJsaWM6CiAg
ICAgR2x5cGhEYXRhIGdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyKSBjb25zdDsKICAgICBH
bHlwaCBnbHlwaEZvckNoYXJhY3RlcihVQ2hhcjMyKSBjb25zdDsKIAotICAgIFJlZlB0cjxTaW1w
bGVGb250RGF0YT4gc3lzdGVtRmFsbGJhY2tGb250RGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyLCBj
b25zdCBGb250RGVzY3JpcHRpb24mLCBib29sIGlzRm9yUGxhdGZvcm1Gb250KSBjb25zdDsKKyAg
ICBSZWZQdHI8Rm9udD4gc3lzdGVtRmFsbGJhY2tGb250Rm9yQ2hhcmFjdGVyKFVDaGFyMzIsIGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYsIGJvb2wgaXNGb3JQbGF0Zm9ybUZvbnQpIGNvbnN0OwogCiAg
ICAgY29uc3QgR2x5cGhQYWdlKiBnbHlwaFBhZ2UodW5zaWduZWQgcGFnZU51bWJlcikgY29uc3Q7
CiAKQEAgLTE4NSw3ICsxODUsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lmIFVTRShBUFBLSVQp
Ci0gICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGNvbXBvc2l0ZUZvbnRSZWZlcmVuY2VGb250RGF0
YShOU0ZvbnQgKmtleSkgY29uc3Q7CisgICAgY29uc3QgRm9udCogY29tcG9zaXRlRm9udFJlZmVy
ZW5jZUZvbnQoTlNGb250ICprZXkpIGNvbnN0OwogICAgIE5TRm9udCogZ2V0TlNGb250KCkgY29u
c3QgeyByZXR1cm4gbV9wbGF0Zm9ybURhdGEubnNGb250KCk7IH0KICNlbmRpZgogCkBAIC0yMTMs
OSArMjEzLDkgQEAgcHVibGljOgogI2VuZGlmCiAKIHByaXZhdGU6Ci0gICAgU2ltcGxlRm9udERh
dGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYsIGJvb2wgaXNDdXN0b21Gb250ID0gZmFsc2UsIGJv
b2wgaXNMb2FkaW5nID0gZmFsc2UsIGJvb2wgaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjayA9IGZh
bHNlKTsKKyAgICBGb250KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmLCBib29sIGlzQ3VzdG9tRm9u
dCA9IGZhbHNlLCBib29sIGlzTG9hZGluZyA9IGZhbHNlLCBib29sIGlzVGV4dE9yaWVudGF0aW9u
RmFsbGJhY2sgPSBmYWxzZSk7CiAKLSAgICBTaW1wbGVGb250RGF0YShzdGQ6OnVuaXF1ZV9wdHI8
U1ZHRGF0YT4sIGZsb2F0IGZvbnRTaXplLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhl
dGljSXRhbGljKTsKKyAgICBGb250KHN0ZDo6dW5pcXVlX3B0cjxTVkdEYXRhPiwgZmxvYXQgZm9u
dFNpemUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpOwogCiAgICAg
dm9pZCBwbGF0Zm9ybUluaXQoKTsKICAgICB2b2lkIHBsYXRmb3JtR2x5cGhJbml0KCk7CkBAIC0y
MjQsMjAgKzIyNCwyMCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBpbml0Q2hhcldpZHRocygpOwog
Ci0gICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gY3JlYXRlU2NhbGVkRm9udERhdGEoY29u
c3QgRm9udERlc2NyaXB0aW9uJiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0OwotICAgIFBhc3NS
ZWZQdHI8U2ltcGxlRm9udERhdGE+IHBsYXRmb3JtQ3JlYXRlU2NhbGVkRm9udERhdGEoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0OworICAgIFBhc3NSZWZQ
dHI8Rm9udD4gY3JlYXRlU2NhbGVkRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBz
Y2FsZUZhY3RvcikgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxGb250PiBwbGF0Zm9ybUNyZWF0ZVNj
YWxlZEZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0
OwogCiAgICAgdm9pZCByZW1vdmVGcm9tU3lzdGVtRmFsbGJhY2tDYWNoZSgpOwogCiAjaWYgUExB
VEZPUk0oV0lOKQogICAgIHZvaWQgaW5pdEdESUZvbnQoKTsKICAgICB2b2lkIHBsYXRmb3JtQ29t
bW9uRGVzdHJveSgpOwotICAgIEZsb2F0UmVjdCBib3VuZHNGb3JHRElHbHlwaChHbHlwaCBnbHlw
aCkgY29uc3Q7Ci0gICAgZmxvYXQgd2lkdGhGb3JHRElHbHlwaChHbHlwaCBnbHlwaCkgY29uc3Q7
CisgICAgRmxvYXRSZWN0IGJvdW5kc0ZvckdESUdseXBoKEdseXBoKSBjb25zdDsKKyAgICBmbG9h
dCB3aWR0aEZvckdESUdseXBoKEdseXBoKSBjb25zdDsKICNlbmRpZgogCiAjaWYgVVNFKENHKQot
ICAgIGJvb2wgY2FuVXNlRmFzdEdseXBoQWR2YW5jZUdldHRlcihHbHlwaCBnbHlwaCwgQ0dTaXpl
JiBhZHZhbmNlLCBib29sJiBwb3B1bGF0ZWRBZHZhbmNlKSBjb25zdDsKKyAgICBib29sIGNhblVz
ZUZhc3RHbHlwaEFkdmFuY2VHZXR0ZXIoR2x5cGgsIENHU2l6ZSYgYWR2YW5jZSwgYm9vbCYgcG9w
dWxhdGVkQWR2YW5jZSkgY29uc3Q7CiAgICAgQ0dGb250UmVuZGVyaW5nU3R5bGUgcmVuZGVyaW5n
U3R5bGUoKSBjb25zdDsKICAgICBib29sIGFkdmFuY2VGb3JDb2xvckJpdG1hcEZvbnQoR2x5cGgs
IENHU2l6ZSYgcmVzdWx0KSBjb25zdDsgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBmb250IGlzIGEg
Y29sb3IgYml0bWFwIGZvbnQKICNlbmRpZgpAQCAtMjU1LDcgKzI1NSw3IEBAIHByaXZhdGU6CiAg
ICAgbXV0YWJsZSBHbHlwaE1ldHJpY3NNYXA8ZmxvYXQ+IG1fZ2x5cGhUb1dpZHRoTWFwOwogCiAg
ICAgYm9vbCBtX3RyZWF0QXNGaXhlZFBpdGNoOwotICAgIGJvb2wgbV9pc0N1c3RvbUZvbnQ7ICAv
LyBXaGV0aGVyIG9yIG5vdCB3ZSBhcmUgY3VzdG9tIGZvbnQgbG9hZGVkIHZpYSBAZm9udC1mYWNl
CisgICAgYm9vbCBtX2lzQ3VzdG9tRm9udDsgLy8gV2hldGhlciBvciBub3Qgd2UgYXJlIGN1c3Rv
bSBmb250IGxvYWRlZCB2aWEgQGZvbnQtZmFjZQogICAgIGJvb2wgbV9pc0xvYWRpbmc7IC8vIFdo
ZXRoZXIgb3Igbm90IHRoaXMgY3VzdG9tIGZvbnQgaXMgc3RpbGwgaW4gdGhlIGFjdCBvZiBsb2Fk
aW5nLgogCiAgICAgYm9vbCBtX2lzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2s7CkBAIC0yODQsMTQg
KzI4NCwxNCBAQCBwcml2YXRlOgogICAgICAgICB+RGVyaXZlZEZvbnREYXRhKCk7CiAKICAgICAg
ICAgYm9vbCBmb3JDdXN0b21Gb250OwotICAgICAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IHNt
YWxsQ2FwczsKLSAgICAgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBlbXBoYXNpc01hcms7Ci0g
ICAgICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gYnJva2VuSWRlb2dyYXBoOwotICAgICAgICBS
ZWZQdHI8U2ltcGxlRm9udERhdGE+IHZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbjsKLSAgICAgICAg
UmVmUHRyPFNpbXBsZUZvbnREYXRhPiB1cHJpZ2h0T3JpZW50YXRpb247Ci0gICAgICAgIFJlZlB0
cjxTaW1wbGVGb250RGF0YT4gbm9uU3ludGhldGljSXRhbGljOworICAgICAgICBSZWZQdHI8Rm9u
dD4gc21hbGxDYXBzOworICAgICAgICBSZWZQdHI8Rm9udD4gZW1waGFzaXNNYXJrOworICAgICAg
ICBSZWZQdHI8Rm9udD4gYnJva2VuSWRlb2dyYXBoOworICAgICAgICBSZWZQdHI8Rm9udD4gdmVy
dGljYWxSaWdodE9yaWVudGF0aW9uOworICAgICAgICBSZWZQdHI8Rm9udD4gdXByaWdodE9yaWVu
dGF0aW9uOworICAgICAgICBSZWZQdHI8Rm9udD4gbm9uU3ludGhldGljSXRhbGljOwogI2lmIFVT
RShBUFBLSVQpCi0gICAgICAgIEhhc2hNYXA8TlNGb250KiwgUmVmUHRyPFNpbXBsZUZvbnREYXRh
Pj4gY29tcG9zaXRlRm9udFJlZmVyZW5jZXM7CisgICAgICAgIEhhc2hNYXA8TlNGb250KiwgUmVm
UHRyPEZvbnQ+PiBjb21wb3NpdGVGb250UmVmZXJlbmNlczsKICNlbmRpZgogICAgIH07CiAKQEAg
LTMxOSw3ICszMTksNyBAQCBwcml2YXRlOgogI2VuZGlmCiB9OwogCi1BTFdBWVNfSU5MSU5FIEZs
b2F0UmVjdCBTaW1wbGVGb250RGF0YTo6Ym91bmRzRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0
CitBTFdBWVNfSU5MSU5FIEZsb2F0UmVjdCBGb250Ojpib3VuZHNGb3JHbHlwaChHbHlwaCBnbHlw
aCkgY29uc3QKIHsKICAgICBpZiAoaXNaZXJvV2lkdGhTcGFjZUdseXBoKGdseXBoKSkKICAgICAg
ICAgcmV0dXJuIEZsb2F0UmVjdCgpOwpAQCAtMzM4LDcgKzMzOCw3IEBAIEFMV0FZU19JTkxJTkUg
RmxvYXRSZWN0IFNpbXBsZUZvbnREYXRhOjoKICAgICByZXR1cm4gYm91bmRzOwogfQogCi1BTFdB
WVNfSU5MSU5FIGZsb2F0IFNpbXBsZUZvbnREYXRhOjp3aWR0aEZvckdseXBoKEdseXBoIGdseXBo
KSBjb25zdAorQUxXQVlTX0lOTElORSBmbG9hdCBGb250Ojp3aWR0aEZvckdseXBoKEdseXBoIGds
eXBoKSBjb25zdAogewogICAgIGlmIChpc1plcm9XaWR0aFNwYWNlR2x5cGgoZ2x5cGgpKQogICAg
ICAgICByZXR1cm4gMDsKQEAgLTM2Niw0ICszNjYsNCBAQCBBTFdBWVNfSU5MSU5FIGZsb2F0IFNp
bXBsZUZvbnREYXRhOjp3aWR0CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8v
IFNpbXBsZUZvbnREYXRhX2gKKyNlbmRpZiAvLyBGb250X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAkocmV2aXNpb24gMTc4ODU3KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTIsMTQgKzUyLDE0IEBACiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+
CiAKIC8vIEZJWE1FOiBXZSBtYXkgYmUgYWJsZSB0byBzaW1wbGlmeSB0aGlzIGNvZGUgdXNpbmcg
QysrMTEgdGhyZWFkaW5nIHByaW1pdGl2ZXMsIGluY2x1ZGluZyBzdGQ6OmNhbGxfb25jZSgpLgot
c3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBmb250RGF0YUxvY2s7CitzdGF0aWMgcHRocmVhZF9tdXRl
eF90IGZvbnRMb2NrOwogCiBzdGF0aWMgdm9pZCBpbml0Rm9udENhY2hlTG9ja09uY2UoKQogewog
ICAgIHB0aHJlYWRfbXV0ZXhhdHRyX3QgbXV0ZXhBdHRyaWJ1dGU7CiAgICAgcHRocmVhZF9tdXRl
eGF0dHJfaW5pdCgmbXV0ZXhBdHRyaWJ1dGUpOwogICAgIHB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5
cGUoJm11dGV4QXR0cmlidXRlLCBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRSk7Ci0gICAgcHRocmVh
ZF9tdXRleF9pbml0KCZmb250RGF0YUxvY2ssICZtdXRleEF0dHJpYnV0ZSk7CisgICAgcHRocmVh
ZF9tdXRleF9pbml0KCZmb250TG9jaywgJm11dGV4QXR0cmlidXRlKTsKICAgICBwdGhyZWFkX211
dGV4YXR0cl9kZXN0cm95KCZtdXRleEF0dHJpYnV0ZSk7CiB9CiAKQEAgLTcxLDEzICs3MSwxMyBA
QCBwdWJsaWM6CiAgICAgRm9udExvY2tlcigpCiAgICAgewogICAgICAgICBwdGhyZWFkX29uY2Uo
JmluaXRGb250TG9ja0NvbnRyb2wsIGluaXRGb250Q2FjaGVMb2NrT25jZSk7Ci0gICAgICAgIGlu
dCBsb2NrY29kZSA9IHB0aHJlYWRfbXV0ZXhfbG9jaygmZm9udERhdGFMb2NrKTsKLSAgICAgICAg
QVNTRVJUX1dJVEhfTUVTU0FHRV9VTlVTRUQobG9ja2NvZGUsICFsb2NrY29kZSwgImZvbnREYXRh
TG9jayBsb2NrIGZhaWxlZCB3aXRoIGNvZGU6JWQiLCBsb2NrY29kZSk7ICAgIAorICAgICAgICBp
bnQgbG9ja2NvZGUgPSBwdGhyZWFkX211dGV4X2xvY2soJmZvbnRMb2NrKTsKKyAgICAgICAgQVNT
RVJUX1dJVEhfTUVTU0FHRV9VTlVTRUQobG9ja2NvZGUsICFsb2NrY29kZSwgImZvbnRMb2NrIGxv
Y2sgZmFpbGVkIHdpdGggY29kZTolZCIsIGxvY2tjb2RlKTsgICAgCiAgICAgfQogICAgIH5Gb250
TG9ja2VyKCkKICAgICB7Ci0gICAgICAgIGludCBsb2NrY29kZSA9IHB0aHJlYWRfbXV0ZXhfdW5s
b2NrKCZmb250RGF0YUxvY2spOwotICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFX1VOVVNFRChs
b2NrY29kZSwgIWxvY2tjb2RlLCAiZm9udERhdGFMb2NrIHVubG9jayBmYWlsZWQgd2l0aCBjb2Rl
OiVkIiwgbG9ja2NvZGUpOworICAgICAgICBpbnQgbG9ja2NvZGUgPSBwdGhyZWFkX211dGV4X3Vu
bG9jaygmZm9udExvY2spOworICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFX1VOVVNFRChsb2Nr
Y29kZSwgIWxvY2tjb2RlLCAiZm9udExvY2sgdW5sb2NrIGZhaWxlZCB3aXRoIGNvZGU6JWQiLCBs
b2NrY29kZSk7CiAgICAgfQogfTsKICNlbmRpZiAvLyBQTEFURk9STShJT1MpCkBAIC0zNTksNyAr
MzU5LDcgQEAgc3RydWN0IEZvbnREYXRhQ2FjaGVLZXlUcmFpdHMgOiBXVEY6OkdlbgogICAgIH0K
IH07CiAKLXR5cGVkZWYgSGFzaE1hcDxGb250UGxhdGZvcm1EYXRhLCBSZWZQdHI8U2ltcGxlRm9u
dERhdGE+LCBGb250RGF0YUNhY2hlS2V5SGFzaCwgRm9udERhdGFDYWNoZUtleVRyYWl0cz4gRm9u
dERhdGFDYWNoZTsKK3R5cGVkZWYgSGFzaE1hcDxGb250UGxhdGZvcm1EYXRhLCBSZWZQdHI8Rm9u
dD4sIEZvbnREYXRhQ2FjaGVLZXlIYXNoLCBGb250RGF0YUNhY2hlS2V5VHJhaXRzPiBGb250RGF0
YUNhY2hlOwogCiBzdGF0aWMgRm9udERhdGFDYWNoZSYgY2FjaGVkRm9udHMoKQogewpAQCAtMzc5
LDcgKzM3OSw3IEBAIGNvbnN0IGludCBjVGFyZ2V0SW5hY3RpdmVGb250RGF0YSA9IDIwMDsKIGNv
bnN0IGludCBjTWF4VW5kZXJNZW1vcnlQcmVzc3VyZUluYWN0aXZlRm9udERhdGEgPSA1MDsKIGNv
bnN0IGludCBjVGFyZ2V0VW5kZXJNZW1vcnlQcmVzc3VyZUluYWN0aXZlRm9udERhdGEgPSAzMDsK
IAotUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmZvbnRGb3JGYW1pbHkoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFt
aWx5LCBib29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSkKK1JlZlB0cjxGb250PiBGb250Q2FjaGU6
OmZvbnRGb3JGYW1pbHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNv
bnN0IEF0b21pY1N0cmluZyYgZmFtaWx5LCBib29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSkKIHsK
ICAgICBpZiAoIW1fcHVyZ2VUaW1lci5pc0FjdGl2ZSgpKQogICAgICAgICBtX3B1cmdlVGltZXIu
c3RhcnRPbmVTaG90KHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM6Onplcm8oKSk7CkBAIC0zOTEs
NyArMzkxLDcgQEAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmZvbnRGbwogICAg
IHJldHVybiBmb250Rm9yUGxhdGZvcm1EYXRhKCpwbGF0Zm9ybURhdGEpOwogfQogCi1SZWY8U2lt
cGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Zm9udEZvclBsYXRmb3JtRGF0YShjb25zdCBGb250UGxh
dGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEpCitSZWY8Rm9udD4gRm9udENhY2hlOjpmb250Rm9yUGxh
dGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSkKIHsKICNpZiBQ
TEFURk9STShJT1MpCiAgICAgRm9udExvY2tlciBmb250TG9ja2VyOwpAQCAtMzk5LDcgKzM5OSw3
IEBAIFJlZjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpmb250Rm9yUGwKICAgICAKICAgICBh
dXRvIGFkZFJlc3VsdCA9IGNhY2hlZEZvbnRzKCkuYWRkKHBsYXRmb3JtRGF0YSwgbnVsbHB0cik7
CiAgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICBhZGRSZXN1bHQuaXRlcmF0
b3ItPnZhbHVlID0gU2ltcGxlRm9udERhdGE6OmNyZWF0ZShwbGF0Zm9ybURhdGEpOworICAgICAg
ICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gRm9udDo6Y3JlYXRlKHBsYXRmb3JtRGF0YSk7
CiAKICAgICByZXR1cm4gKmFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiB9CkBAIC00MTYsNyAr
NDE2LDcgQEAgdm9pZCBGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YUlmTgogCiAgICAg
aWYgKGNhY2hlZEZvbnRzKCkuc2l6ZSgpIDwgaW5hY3RpdmVGb250RGF0YUxpbWl0KQogICAgICAg
ICByZXR1cm47Ci0gICAgaW50IGluYWN0aXZlQ291bnQgPSBpbmFjdGl2ZUZvbnREYXRhQ291bnQo
KTsKKyAgICBpbnQgaW5hY3RpdmVDb3VudCA9IGluYWN0aXZlRm9udENvdW50KCk7CiAgICAgaWYg
KGluYWN0aXZlQ291bnQgPD0gaW5hY3RpdmVGb250RGF0YUxpbWl0KQogICAgICAgICByZXR1cm47
CiAKQEAgLTQzNCw3ICs0MzQsNyBAQCB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnRE
YXRhKGluCiAjZW5kaWYKIAogICAgIHdoaWxlIChwdXJnZUNvdW50KSB7Ci0gICAgICAgIFZlY3Rv
cjxSZWZQdHI8U2ltcGxlRm9udERhdGE+LCAyMD4gZm9udHNUb0RlbGV0ZTsKKyAgICAgICAgVmVj
dG9yPFJlZlB0cjxGb250PiwgMjA+IGZvbnRzVG9EZWxldGU7CiAgICAgICAgIGZvciAoYXV0byYg
Zm9udCA6IGNhY2hlZEZvbnRzKCkudmFsdWVzKCkpIHsKICAgICAgICAgICAgIGlmICghZm9udC0+
aGFzT25lUmVmKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC00NjYsOCArNDY2LDgg
QEAgdm9pZCBGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YShpbgogICAgICAgICAgICAg
aWYgKHZlcnRpY2FsRGF0YSkKICAgICAgICAgICAgICAgICB2ZXJ0aWNhbERhdGEtPm1faW5Gb250
Q2FjaGUgPSBmYWxzZTsKICAgICAgICAgfQotICAgICAgICBmb3IgKGF1dG8mIGZvbnREYXRhIDog
Y2FjaGVkRm9udHMoKS52YWx1ZXMoKSkgewotICAgICAgICAgICAgYXV0byogdmVydGljYWxEYXRh
ID0gY29uc3RfY2FzdDxPcGVuVHlwZVZlcnRpY2FsRGF0YSo+KGZvbnREYXRhLT52ZXJ0aWNhbERh
dGEoKSk7CisgICAgICAgIGZvciAoYXV0byYgZm9udCA6IGNhY2hlZEZvbnRzKCkudmFsdWVzKCkp
IHsKKyAgICAgICAgICAgIGF1dG8qIHZlcnRpY2FsRGF0YSA9IGNvbnN0X2Nhc3Q8T3BlblR5cGVW
ZXJ0aWNhbERhdGEqPihmb250LT52ZXJ0aWNhbERhdGEoKSk7CiAgICAgICAgICAgICBpZiAodmVy
dGljYWxEYXRhKQogICAgICAgICAgICAgICAgIHZlcnRpY2FsRGF0YS0+bV9pbkZvbnRDYWNoZSA9
IHRydWU7CiAgICAgICAgIH0KQEAgLTQ4MywxMiArNDgzLDEyIEBAIHZvaWQgRm9udENhY2hlOjpw
dXJnZUluYWN0aXZlRm9udERhdGEoaW4KICNlbmRpZgogfQogCi1zaXplX3QgRm9udENhY2hlOjpm
b250RGF0YUNvdW50KCkKK3NpemVfdCBGb250Q2FjaGU6OmZvbnRDb3VudCgpCiB7CiAgICAgcmV0
dXJuIGNhY2hlZEZvbnRzKCkuc2l6ZSgpOwogfQogCi1zaXplX3QgRm9udENhY2hlOjppbmFjdGl2
ZUZvbnREYXRhQ291bnQoKQorc2l6ZV90IEZvbnRDYWNoZTo6aW5hY3RpdmVGb250Q291bnQoKQog
ewogI2lmIFBMQVRGT1JNKElPUykKICAgICBGb250TG9ja2VyIGZvbnRMb2NrZXI7CkBAIC01NTEs
NyArNTUxLDcgQEAgdm9pZCBGb250Q2FjaGU6OmludmFsaWRhdGUoKQogfQogCiAjaWYgIVBMQVRG
T1JNKENPQ09BKQotUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OnNpbWlsYXJGb250
UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpCitSZWZQdHI8Rm9udD4gRm9udENh
Y2hlOjpzaW1pbGFyRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mKQogewogICAgIHJldHVybiBu
dWxscHRyOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
Y2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhY2hlLmgJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIGNsYXNz
IEZvbnRDYXNjYWRlOwogY2xhc3MgRm9udFBsYXRmb3JtRGF0YTsKIGNsYXNzIEZvbnRTZWxlY3Rv
cjsKIGNsYXNzIE9wZW5UeXBlVmVydGljYWxEYXRhOwotY2xhc3MgU2ltcGxlRm9udERhdGE7Citj
bGFzcyBGb250OwogCiAjaWYgUExBVEZPUk0oV0lOKQogI2lmIFVTRShJTUxBTkdfRk9OVF9MSU5L
MikKQEAgLTExMSw3ICsxMTEsNyBAQCBwdWJsaWM6CiAgICAgZnJpZW5kIEZvbnRDYWNoZSYgZm9u
dENhY2hlKCk7CiAKICAgICAvLyBUaGlzIG1ldGhvZCBpcyBpbXBsZW1lbnRlZCBieSB0aGUgcGxh
dGZvcm0uCi0gICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBzeXN0ZW1GYWxsYmFja0ZvckNoYXJh
Y3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgU2ltcGxlRm9udERhdGEqIG9yaWdp
bmFsRm9udERhdGEsIGJvb2wgaXNQbGF0Zm9ybUZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
LCBpbnQgbGVuZ3RoKTsKKyAgICBSZWZQdHI8Rm9udD4gc3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0
ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEZvbnQqIG9yaWdpbmFsRm9udERhdGEs
IGJvb2wgaXNQbGF0Zm9ybUZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3Ro
KTsKIAogICAgIC8vIEFsc28gaW1wbGVtZW50ZWQgYnkgdGhlIHBsYXRmb3JtLgogICAgIHZvaWQg
cGxhdGZvcm1Jbml0KCk7CkBAIC0xMjgsMTAgKzEyOCwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IGdldFRyYWl0c0luRmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYsIFZlY3Rvcjx1bnNpZ25lZD4m
KTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gZm9udEZvckZh
bWlseShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9taWNTdHJpbmcmLCBib29sIGNo
ZWNraW5nQWx0ZXJuYXRlTmFtZSA9IGZhbHNlKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWY8U2lt
cGxlRm9udERhdGE+IGxhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9u
Jik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgUmVmPFNpbXBsZUZvbnREYXRhPiBmb250Rm9yUGxhdGZv
cm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsKLSAgICBSZWZQdHI8U2ltcGxlRm9udERh
dGE+IHNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpOworICAg
IFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxGb250PiBmb250Rm9yRmFtaWx5KGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYsIGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1l
ID0gZmFsc2UpOworICAgIFdFQkNPUkVfRVhQT1JUIFJlZjxGb250PiBsYXN0UmVzb3J0RmFsbGJh
Y2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpOworICAgIFdFQkNPUkVfRVhQT1JUIFJlZjxG
b250PiBmb250Rm9yUGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsKKyAgICBS
ZWZQdHI8Rm9udD4gc2ltaWxhckZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJik7CiAKICAgICB2
b2lkIGFkZENsaWVudChGb250U2VsZWN0b3IqKTsKICAgICB2b2lkIHJlbW92ZUNsaWVudChGb250
U2VsZWN0b3IqKTsKQEAgLTEzOSwxMiArMTM5LDEyIEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBz
aG9ydCBnZW5lcmF0aW9uKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBpbnZhbGlkYXRlKCk7
CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBzaXplX3QgZm9udERhdGFDb3VudCgpOwotICAgIFdFQkNP
UkVfRVhQT1JUIHNpemVfdCBpbmFjdGl2ZUZvbnREYXRhQ291bnQoKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCBzaXplX3QgZm9udENvdW50KCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc2l6ZV90IGluYWN0
aXZlRm9udENvdW50KCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwdXJnZUluYWN0aXZlRm9u
dERhdGEoaW50IGNvdW50ID0gSU5UX01BWCk7CiAKICNpZiBQTEFURk9STShXSU4pCi0gICAgUmVm
UHRyPFNpbXBsZUZvbnREYXRhPiBmb250RGF0YUZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoY29u
c3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgTE9HRk9OVCYsIEF0b21pY1N0cmluZyYgb3V0Rm9u
dEZhbWlseU5hbWUpOworICAgIFJlZlB0cjxGb250PiBmb250RnJvbURlc2NyaXB0aW9uQW5kTG9n
Rm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBMT0dGT05UJiwgQXRvbWljU3RyaW5n
JiBvdXRGb250RmFtaWx5TmFtZSk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJU
SUNBTCkKQEAgLTE3Myw3ICsxNzMsNyBAQCBwcml2YXRlOgogICAgIC8vIFRoZXNlIG1ldGhvZHMg
YXJlIGltcGxlbWVudGVkIGJ5IGVhY2ggcGxhdGZvcm0uCiAjaWYgUExBVEZPUk0oSU9TKQogICAg
IEZvbnRQbGF0Zm9ybURhdGEqIGdldEN1c3RvbUZhbGxiYWNrRm9udChjb25zdCBVSW50MzIsIGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYpOwotICAgIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IGdl
dFN5c3RlbUZvbnRGYWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9uJiwg
Y29uc3QgU2ltcGxlRm9udERhdGEqLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0
aCk7CisgICAgUGFzc1JlZlB0cjxGb250PiBnZXRTeXN0ZW1Gb250RmFsbGJhY2tGb3JDaGFyYWN0
ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEZvbnQqLCBjb25zdCBVQ2hhciogY2hh
cmFjdGVycywgaW50IGxlbmd0aCk7CiAjZW5kaWYKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBs
YXRmb3JtRGF0YT4gY3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24m
LCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSk7CiAKQEAgLTE4Miw3ICsxODIsNyBAQCBwcml2
YXRlOgogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIGZyaWVuZCBjbGFzcyBDb21wbGV4VGV4dENv
bnRyb2xsZXI7CiAjZW5kaWYKLSAgICBmcmllbmQgY2xhc3MgU2ltcGxlRm9udERhdGE7CisgICAg
ZnJpZW5kIGNsYXNzIEZvbnQ7CiB9OwogCiAvLyBHZXQgdGhlIGdsb2JhbCBmb250Q2FjaGUuCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUu
Y3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250Q2FzY2FkZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNCw4ICsxMjQsOCBAQCBGb250
Q2FzY2FkZTo6Rm9udENhc2NhZGUoY29uc3QgRm9udERlc2NyCiB9CiAKIC8vIEZJWE1FOiBXZSBz
aG91bGQgbWFrZSB0aGlzIGNvbnN0cnVjdG9yIHBsYXRmb3JtLWluZGVwZW5kZW50LgotRm9udENh
c2NhZGU6OkZvbnRDYXNjYWRlKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnREYXRhLCBib29s
IGlzUHJpbnRlckZvbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmdNb2RlKQotICAg
IDogbV9nbHlwaHMoRm9udEdseXBoczo6Y3JlYXRlRm9yUGxhdGZvcm1Gb250KGZvbnREYXRhKSkK
K0ZvbnRDYXNjYWRlOjpGb250Q2FzY2FkZShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBmb250LCBi
b29sIGlzUHJpbnRlckZvbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmdNb2RlKQor
ICAgIDogbV9nbHlwaHMoRm9udEdseXBoczo6Y3JlYXRlRm9yUGxhdGZvcm1Gb250KGZvbnQpKQog
ICAgICwgbV9sZXR0ZXJTcGFjaW5nKDApCiAgICAgLCBtX3dvcmRTcGFjaW5nKDApCiAgICAgLCBt
X3VzZUJhY2tzbGFzaEFzWWVuU3ltYm9sKGZhbHNlKQpAQCAtMTM0LDI3ICsxMzQsMjcgQEAgRm9u
dENhc2NhZGU6OkZvbnRDYXNjYWRlKGNvbnN0IEZvbnRQbGF0ZgogICAgIG1fZm9udERlc2NyaXB0
aW9uLnNldFVzZVByaW50ZXJGb250KGlzUHJpbnRlckZvbnQpOwogICAgIG1fZm9udERlc2NyaXB0
aW9uLnNldEZvbnRTbW9vdGhpbmcoZm9udFNtb290aGluZ01vZGUpOwogI2lmIFBMQVRGT1JNKElP
UykKLSAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKENURm9udEdldFNpemUo
Zm9udERhdGEuZm9udCgpKSk7Ci0gICAgbV9mb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXpl
KENURm9udEdldFNpemUoZm9udERhdGEuZm9udCgpKSk7Ci0gICAgbV9mb250RGVzY3JpcHRpb24u
c2V0SXNJdGFsaWMoQ1RGb250R2V0U3ltYm9saWNUcmFpdHMoZm9udERhdGEuZm9udCgpKSAmIGtD
VEZvbnRUcmFpdEl0YWxpYyk7Ci0gICAgbV9mb250RGVzY3JpcHRpb24uc2V0V2VpZ2h0KChDVEZv
bnRHZXRTeW1ib2xpY1RyYWl0cyhmb250RGF0YS5mb250KCkpICYga0NURm9udFRyYWl0Qm9sZCkg
PyBGb250V2VpZ2h0Qm9sZCA6IEZvbnRXZWlnaHROb3JtYWwpOworICAgIG1fZm9udERlc2NyaXB0
aW9uLnNldFNwZWNpZmllZFNpemUoQ1RGb250R2V0U2l6ZShmb250LmZvbnQoKSkpOworICAgIG1f
Zm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShDVEZvbnRHZXRTaXplKGZvbnQuZm9udCgp
KSk7CisgICAgbV9mb250RGVzY3JpcHRpb24uc2V0SXNJdGFsaWMoQ1RGb250R2V0U3ltYm9saWNU
cmFpdHMoZm9udC5mb250KCkpICYga0NURm9udFRyYWl0SXRhbGljKTsKKyAgICBtX2ZvbnREZXNj
cmlwdGlvbi5zZXRXZWlnaHQoKENURm9udEdldFN5bWJvbGljVHJhaXRzKGZvbnQuZm9udCgpKSAm
IGtDVEZvbnRUcmFpdEJvbGQpID8gRm9udFdlaWdodEJvbGQgOiBGb250V2VpZ2h0Tm9ybWFsKTsK
ICNlbmRpZgogfQogCiAvLyBGSVhNRTogV2Ugc2hvdWxkIG1ha2UgdGhpcyBjb25zdHJ1Y3RvciBw
bGF0Zm9ybS1pbmRlcGVuZGVudC4KICNpZiBQTEFURk9STShJT1MpCi1Gb250Q2FzY2FkZTo6Rm9u
dENhc2NhZGUoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZm9udERhdGEsIFBhc3NSZWZQdHI8Rm9u
dFNlbGVjdG9yPiBmb250U2VsZWN0b3IpCi0gICAgOiBtX2dseXBocyhGb250R2x5cGhzOjpjcmVh
dGVGb3JQbGF0Zm9ybUZvbnQoZm9udERhdGEpKQorRm9udENhc2NhZGU6OkZvbnRDYXNjYWRlKGNv
bnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnQsIFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPiBmb250
U2VsZWN0b3IpCisgICAgOiBtX2dseXBocyhGb250R2x5cGhzOjpjcmVhdGVGb3JQbGF0Zm9ybUZv
bnQoZm9udCkpCiAgICAgLCBtX2xldHRlclNwYWNpbmcoMCkKICAgICAsIG1fd29yZFNwYWNpbmco
MCkKICAgICAsIG1fdHlwZXNldHRpbmdGZWF0dXJlcyhjb21wdXRlVHlwZXNldHRpbmdGZWF0dXJl
cygpKQogewotICAgIENURm9udFJlZiBwcmltYXJ5Rm9udCA9IGZvbnREYXRhLmZvbnQoKTsKKyAg
ICBDVEZvbnRSZWYgcHJpbWFyeUZvbnQgPSBmb250LmZvbnQoKTsKICAgICBtX2ZvbnREZXNjcmlw
dGlvbi5zZXRTcGVjaWZpZWRTaXplKENURm9udEdldFNpemUocHJpbWFyeUZvbnQpKTsKICAgICBt
X2ZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoQ1RGb250R2V0U2l6ZShwcmltYXJ5Rm9u
dCkpOwogICAgIG1fZm9udERlc2NyaXB0aW9uLnNldElzSXRhbGljKENURm9udEdldFN5bWJvbGlj
VHJhaXRzKHByaW1hcnlGb250KSAmIGtDVEZvbnRUcmFpdEl0YWxpYyk7CiAgICAgbV9mb250RGVz
Y3JpcHRpb24uc2V0V2VpZ2h0KChDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhwcmltYXJ5Rm9udCkg
JiBrQ1RGb250VHJhaXRCb2xkKSA/IEZvbnRXZWlnaHRCb2xkIDogRm9udFdlaWdodE5vcm1hbCk7
Ci0gICAgbV9mb250RGVzY3JpcHRpb24uc2V0VXNlUHJpbnRlckZvbnQoZm9udERhdGEuaXNQcmlu
dGVyRm9udCgpKTsKKyAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRVc2VQcmludGVyRm9udChmb250
LmlzUHJpbnRlckZvbnQoKSk7CiAgICAgbV9nbHlwaHMgPSByZXRyaWV2ZU9yQWRkQ2FjaGVkRm9u
dEdseXBocyhtX2ZvbnREZXNjcmlwdGlvbiwgZm9udFNlbGVjdG9yLmdldCgpKTsKIH0KICNlbmRp
ZgpAQCAtMzcxLDcgKzM3MSw3IEBAIHZvaWQgRm9udENhc2NhZGU6OmRyYXdFbXBoYXNpc01hcmtz
KEdyYXAKICAgICAgICAgZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChjb250ZXh0LCBy
dW4sIG1hcmssIHBvaW50LCBmcm9tLCB0byk7CiB9CiAKLWZsb2F0IEZvbnRDYXNjYWRlOjp3aWR0
aChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFs
bGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKK2Zsb2F0IEZv
bnRDYXNjYWRlOjp3aWR0aChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgRm9udCo+
KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAogewog
ICAgIENvZGVQYXRoIGNvZGVQYXRoVG9Vc2UgPSBjb2RlUGF0aChydW4pOwogICAgIGlmIChjb2Rl
UGF0aFRvVXNlICE9IENvbXBsZXgpIHsKQEAgLTM4OSw3ICszODksNyBAQCBmbG9hdCBGb250Q2Fz
Y2FkZTo6d2lkdGgoY29uc3QgVGV4dFJ1biYgCiAgICAgaWYgKGNhY2hlRW50cnkgJiYgIXN0ZDo6
aXNuYW4oKmNhY2hlRW50cnkpKQogICAgICAgICByZXR1cm4gKmNhY2hlRW50cnk7CiAKLSAgICBI
YXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4gbG9jYWxGYWxsYmFja0ZvbnRzOworICAgIEhh
c2hTZXQ8Y29uc3QgRm9udCo+IGxvY2FsRmFsbGJhY2tGb250czsKICAgICBpZiAoIWZhbGxiYWNr
Rm9udHMpCiAgICAgICAgIGZhbGxiYWNrRm9udHMgPSAmbG9jYWxGYWxsYmFja0ZvbnRzOwogCkBA
IC00MTYsMTAgKzQxNiwxMCBAQCBmbG9hdCBGb250Q2FzY2FkZTo6d2lkdGgoY29uc3QgVGV4dFJ1
biYgCiAgICAgcmV0dXJuIHdpZHRoKHJ1bik7CiB9CiAKLUdseXBoRGF0YSBGb250Q2FzY2FkZTo6
Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYywgYm9vbCBtaXJyb3IsIEZvbnREYXRhVmFy
aWFudCB2YXJpYW50KSBjb25zdAorR2x5cGhEYXRhIEZvbnRDYXNjYWRlOjpnbHlwaERhdGFGb3JD
aGFyYWN0ZXIoVUNoYXIzMiBjLCBib29sIG1pcnJvciwgRm9udFZhcmlhbnQgdmFyaWFudCkgY29u
c3QKIHsKICAgICBpZiAodmFyaWFudCA9PSBBdXRvVmFyaWFudCkgewotICAgICAgICBpZiAobV9m
b250RGVzY3JpcHRpb24uc21hbGxDYXBzKCkgJiYgIXByaW1hcnlGb250RGF0YSgpLmlzU1ZHRm9u
dCgpKSB7CisgICAgICAgIGlmIChtX2ZvbnREZXNjcmlwdGlvbi5zbWFsbENhcHMoKSAmJiAhcHJp
bWFyeUZvbnQoKS5pc1NWR0ZvbnQoKSkgewogICAgICAgICAgICAgVUNoYXIzMiB1cHBlckMgPSB1
X3RvdXBwZXIoYyk7CiAgICAgICAgICAgICBpZiAodXBwZXJDICE9IGMpIHsKICAgICAgICAgICAg
ICAgICBjID0gdXBwZXJDOwpAQCAtNDQ2LDcgKzQ0Niw3IEBAIHZvaWQgRm9udENhc2NhZGU6OmRl
bGV0ZUxheW91dChUZXh0TGF5b3UKIHsKIH0KIAotZmxvYXQgRm9udENhc2NhZGU6OndpZHRoKFRl
eHRMYXlvdXQmLCB1bnNpZ25lZCwgdW5zaWduZWQsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERh
dGEqPiopCitmbG9hdCBGb250Q2FzY2FkZTo6d2lkdGgoVGV4dExheW91dCYsIHVuc2lnbmVkLCB1
bnNpZ25lZCwgSGFzaFNldDxjb25zdCBGb250Kj4qKQogewogICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgIHJldHVybiAwOwpAQCAtNTA1LDcgKzUwNSw3IEBAIGJvb2wgRm9udENhc2NhZGU6
Omhhc1ZhbGlkQXZlcmFnZUNoYXJXaWQKIAogI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0o
SU9TKQogICAgIC8vIEludGVybmFsIGZvbnRzIG9uIE9TIFggYW5kIGlPUyBhbHNvIGhhdmUgYW4g
aW52YWxpZCBlbnRyeSBpbiB0aGUgdGFibGUgZm9yIGF2Z0NoYXJXaWR0aC4KLSAgICBpZiAocHJp
bWFyeUZvbnREYXRhSXNTeXN0ZW1Gb250KCkpCisgICAgaWYgKHByaW1hcnlGb250SXNTeXN0ZW1G
b250KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgogCkBAIC01MjUsNyArNTI1LDcg
QEAgYm9vbCBGb250Q2FzY2FkZTo6ZmFzdEF2ZXJhZ2VDaGFyV2lkdGhJZgogewogICAgIGJvb2wg
c3VjY2VzcyA9IGhhc1ZhbGlkQXZlcmFnZUNoYXJXaWR0aCgpOwogICAgIGlmIChzdWNjZXNzKQot
ICAgICAgICB3aWR0aCA9IHJvdW5kZihwcmltYXJ5Rm9udERhdGEoKS5hdmdDaGFyV2lkdGgoKSk7
IC8vIEZJWE1FOiBwcmltYXJ5Rm9udERhdGEoKSBtaWdodCBub3QgY29ycmVzcG9uZCB0byBmaXJz
dEZhbWlseSgpLgorICAgICAgICB3aWR0aCA9IHJvdW5kZihwcmltYXJ5Rm9udCgpLmF2Z0NoYXJX
aWR0aCgpKTsgLy8gRklYTUU6IHByaW1hcnlGb250KCkgbWlnaHQgbm90IGNvcnJlc3BvbmQgdG8g
Zmlyc3RGYW1pbHkoKS4KICAgICByZXR1cm4gc3VjY2VzczsKIH0KIApAQCAtMTE3Myw3ICsxMTcz
LDcgQEAgaW50IEZvbnRDYXNjYWRlOjplbXBoYXNpc01hcmtBc2NlbnQoY29ucwogICAgIGlmICgh
Z2V0RW1waGFzaXNNYXJrR2x5cGhEYXRhKG1hcmssIG1hcmtHbHlwaERhdGEpKQogICAgICAgICBy
ZXR1cm4gMDsKIAotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBtYXJrRm9udERhdGEgPSBtYXJr
R2x5cGhEYXRhLmZvbnREYXRhOworICAgIGNvbnN0IEZvbnQqIG1hcmtGb250RGF0YSA9IG1hcmtH
bHlwaERhdGEuZm9udDsKICAgICBBU1NFUlQobWFya0ZvbnREYXRhKTsKICAgICBpZiAoIW1hcmtG
b250RGF0YSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMTg3LDcgKzExODcsNyBAQCBpbnQgRm9u
dENhc2NhZGU6OmVtcGhhc2lzTWFya0Rlc2NlbnQoY29uCiAgICAgaWYgKCFnZXRFbXBoYXNpc01h
cmtHbHlwaERhdGEobWFyaywgbWFya0dseXBoRGF0YSkpCiAgICAgICAgIHJldHVybiAwOwogCi0g
ICAgY29uc3QgU2ltcGxlRm9udERhdGEqIG1hcmtGb250RGF0YSA9IG1hcmtHbHlwaERhdGEuZm9u
dERhdGE7CisgICAgY29uc3QgRm9udCogbWFya0ZvbnREYXRhID0gbWFya0dseXBoRGF0YS5mb250
OwogICAgIEFTU0VSVChtYXJrRm9udERhdGEpOwogICAgIGlmICghbWFya0ZvbnREYXRhKQogICAg
ICAgICByZXR1cm4gMDsKQEAgLTEyMDEsNyArMTIwMSw3IEBAIGludCBGb250Q2FzY2FkZTo6ZW1w
aGFzaXNNYXJrSGVpZ2h0KGNvbnMKICAgICBpZiAoIWdldEVtcGhhc2lzTWFya0dseXBoRGF0YSht
YXJrLCBtYXJrR2x5cGhEYXRhKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBjb25zdCBTaW1w
bGVGb250RGF0YSogbWFya0ZvbnREYXRhID0gbWFya0dseXBoRGF0YS5mb250RGF0YTsKKyAgICBj
b25zdCBGb250KiBtYXJrRm9udERhdGEgPSBtYXJrR2x5cGhEYXRhLmZvbnQ7CiAgICAgQVNTRVJU
KG1hcmtGb250RGF0YSk7CiAgICAgaWYgKCFtYXJrRm9udERhdGEpCiAgICAgICAgIHJldHVybiAw
OwpAQCAtMTI3Myw3ICsxMjczLDcgQEAgdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBoQnVmZmVy
KEdyYXBoaQogI2VuZGlmCiAKICAgICAvLyBEcmF3IGVhY2ggY29udGlndW91cyBydW4gb2YgZ2x5
cGhzIHRoYXQgdXNlIHRoZSBzYW1lIGZvbnQgZGF0YS4KLSAgICBjb25zdCBTaW1wbGVGb250RGF0
YSogZm9udERhdGEgPSBnbHlwaEJ1ZmZlci5mb250RGF0YUF0KDApOworICAgIGNvbnN0IEZvbnQq
IGZvbnREYXRhID0gZ2x5cGhCdWZmZXIuZm9udEF0KDApOwogICAgIEZsb2F0U2l6ZSBvZmZzZXQg
PSBnbHlwaEJ1ZmZlci5vZmZzZXRBdCgwKTsKICAgICBGbG9hdFBvaW50IHN0YXJ0UG9pbnQocG9p
bnQueCgpLCBwb2ludC55KCkgLSBnbHlwaEJ1ZmZlci5pbml0aWFsQWR2YW5jZSgpLmhlaWdodCgp
KTsKICAgICBmbG9hdCBuZXh0WCA9IHN0YXJ0UG9pbnQueCgpICsgZ2x5cGhCdWZmZXIuYWR2YW5j
ZUF0KDApLndpZHRoKCk7CkBAIC0xMjg0LDcgKzEyODQsNyBAQCB2b2lkIEZvbnRDYXNjYWRlOjpk
cmF3R2x5cGhCdWZmZXIoR3JhcGhpCiAgICAgVGV4dFJ1bjo6UmVuZGVyaW5nQ29udGV4dCogcmVu
ZGVyaW5nQ29udGV4dCA9IHJ1bi5yZW5kZXJpbmdDb250ZXh0KCk7CiAjZW5kaWYKICAgICB3aGls
ZSAobmV4dEdseXBoIDwgZ2x5cGhCdWZmZXIuc2l6ZSgpKSB7Ci0gICAgICAgIGNvbnN0IFNpbXBs
ZUZvbnREYXRhKiBuZXh0Rm9udERhdGEgPSBnbHlwaEJ1ZmZlci5mb250RGF0YUF0KG5leHRHbHlw
aCk7CisgICAgICAgIGNvbnN0IEZvbnQqIG5leHRGb250RGF0YSA9IGdseXBoQnVmZmVyLmZvbnRB
dChuZXh0R2x5cGgpOwogICAgICAgICBGbG9hdFNpemUgbmV4dE9mZnNldCA9IGdseXBoQnVmZmVy
Lm9mZnNldEF0KG5leHRHbHlwaCk7CiAKICAgICAgICAgaWYgKG5leHRGb250RGF0YSAhPSBmb250
RGF0YSB8fCBuZXh0T2Zmc2V0ICE9IG9mZnNldCkgewpAQCAtMTMxNyw3ICsxMzE3LDcgQEAgdm9p
ZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBoQnVmZmVyKEdyYXBoaQogICAgIH0KIH0KIAotaW5saW5l
IHN0YXRpYyBmbG9hdCBvZmZzZXRUb01pZGRsZU9mR2x5cGgoY29uc3QgU2ltcGxlRm9udERhdGEq
IGZvbnREYXRhLCBHbHlwaCBnbHlwaCkKK2lubGluZSBzdGF0aWMgZmxvYXQgb2Zmc2V0VG9NaWRk
bGVPZkdseXBoKGNvbnN0IEZvbnQqIGZvbnREYXRhLCBHbHlwaCBnbHlwaCkKIHsKICAgICBpZiAo
Zm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbCkgewog
ICAgICAgICBGbG9hdFJlY3QgYm91bmRzID0gZm9udERhdGEtPmJvdW5kc0ZvckdseXBoKGdseXBo
KTsKQEAgLTEzMjksNyArMTMyOSw3IEBAIGlubGluZSBzdGF0aWMgZmxvYXQgb2Zmc2V0VG9NaWRk
bGVPZkdseXAKIAogaW5saW5lIHN0YXRpYyBmbG9hdCBvZmZzZXRUb01pZGRsZU9mR2x5cGhBdElu
ZGV4KGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgc2l6ZV90IGkpCiB7Ci0gICAgcmV0
dXJuIG9mZnNldFRvTWlkZGxlT2ZHbHlwaChnbHlwaEJ1ZmZlci5mb250RGF0YUF0KGkpLCBnbHlw
aEJ1ZmZlci5nbHlwaEF0KGkpKTsKKyAgICByZXR1cm4gb2Zmc2V0VG9NaWRkbGVPZkdseXBoKGds
eXBoQnVmZmVyLmZvbnRBdChpKSwgZ2x5cGhCdWZmZXIuZ2x5cGhBdChpKSk7CiB9CiAKIHZvaWQg
Rm9udENhc2NhZGU6OmRyYXdFbXBoYXNpc01hcmtzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
Y29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGNvbnN0
IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0CkBAIC0x
MzM4LDcgKzEzMzgsNyBAQCB2b2lkIEZvbnRDYXNjYWRlOjpkcmF3RW1waGFzaXNNYXJrcyhHcmFw
CiAgICAgaWYgKCFnZXRFbXBoYXNpc01hcmtHbHlwaERhdGEobWFyaywgbWFya0dseXBoRGF0YSkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBtYXJrRm9udERh
dGEgPSBtYXJrR2x5cGhEYXRhLmZvbnREYXRhOworICAgIGNvbnN0IEZvbnQqIG1hcmtGb250RGF0
YSA9IG1hcmtHbHlwaERhdGEuZm9udDsKICAgICBBU1NFUlQobWFya0ZvbnREYXRhKTsKICAgICBp
ZiAoIW1hcmtGb250RGF0YSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTM2MSw3ICsxMzYxLDcgQEAg
dm9pZCBGb250Q2FzY2FkZTo6ZHJhd0VtcGhhc2lzTWFya3MoR3JhcAogICAgIGRyYXdHbHlwaEJ1
ZmZlcihjb250ZXh0LCBydW4sIG1hcmtCdWZmZXIsIHN0YXJ0UG9pbnQpOwogfQogCi1mbG9hdCBG
b250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBI
YXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZs
b3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0CitmbG9hdCBGb250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZv
clNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFs
bGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKIHsKICAgICBX
aWR0aEl0ZXJhdG9yIGl0KHRoaXMsIHJ1biwgZmFsbGJhY2tGb250cywgZ2x5cGhPdmVyZmxvdyk7
CiAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgJKHJldmlzaW9uIDE3ODg1NykKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDEwICsyNiwxMCBAQAogI2RlZmluZSBGb250Q2FzY2FkZV9oCiAKICNpbmNsdWRl
ICJEYXNoQXJyYXkuaCIKKyNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9udERlc2NyaXB0
aW9uLmgiCiAjaW5jbHVkZSAiRm9udEdseXBocy5oIgogI2luY2x1ZGUgIlBhdGguaCIKLSNpbmNs
dWRlICJTaW1wbGVGb250RGF0YS5oIgogI2luY2x1ZGUgIlRleHREaXJlY3Rpb24uaCIKICNpbmNs
dWRlICJUeXBlc2V0dGluZ0ZlYXR1cmVzLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAg
LTEzNCwxNyArMTM0LDE3IEBAIHB1YmxpYzoKIAogICAgIGVudW0gQ3VzdG9tRm9udE5vdFJlYWR5
QWN0aW9uIHsgRG9Ob3RQYWludElmRm9udE5vdFJlYWR5LCBVc2VGYWxsYmFja0lmRm9udE5vdFJl
YWR5IH07CiAgICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQgZHJhd1RleHQoR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGludCB0
byA9IC0xLCBDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPSBEb05vdFBhaW50SWZGb250Tm90UmVh
ZHkpIGNvbnN0OwotICAgIHZvaWQgZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBT
aW1wbGVGb250RGF0YSosIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCBudW1HbHlw
aHMsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKKyAgICB2b2lkIGRyYXdHbHlwaHMoR3JhcGhp
Y3NDb250ZXh0KiwgY29uc3QgRm9udCosIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGlu
dCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKICAgICB2b2lkIGRyYXdFbXBo
YXNpc01hcmtzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9taWNT
dHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0x
KSBjb25zdDsKIAogICAgIERhc2hBcnJheSBkYXNoZXNGb3JJbnRlcnNlY3Rpb25zV2l0aFJlY3Qo
Y29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIGNvbnN0IEZsb2F0
UmVjdCYgbGluZUV4dGVudHMpIGNvbnN0OwogCi0gICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQgd2lk
dGgoY29uc3QgVGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJh
Y2tGb250cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBP
UlQgZmxvYXQgd2lkdGgoY29uc3QgVGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxs
YmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsKICAgICBmbG9hdCB3aWR0
aChjb25zdCBUZXh0UnVuJiwgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcmIGdseXBoTmFtZSkg
Y29uc3Q7CiAKICAgICBQYXNzT3duUHRyPFRleHRMYXlvdXQ+IGNyZWF0ZUxheW91dChSZW5kZXJU
ZXh0KiwgZmxvYXQgeFBvcywgYm9vbCBjb2xsYXBzZVdoaXRlU3BhY2UpIGNvbnN0OwogICAgIHN0
YXRpYyB2b2lkIGRlbGV0ZUxheW91dChUZXh0TGF5b3V0Kik7Ci0gICAgc3RhdGljIGZsb2F0IHdp
ZHRoKFRleHRMYXlvdXQmLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIEhhc2hTZXQ8Y29u
c3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDApOworICAgIHN0YXRpYyBmbG9h
dCB3aWR0aChUZXh0TGF5b3V0JiwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBIYXNoU2V0
PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cyA9IDApOwogCiAgICAgaW50IG9mZnNldEZvclBv
c2l0aW9uKGNvbnN0IFRleHRSdW4mLCBmbG9hdCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlh
bEdseXBocykgY29uc3Q7CiAgICAgdm9pZCBhZGp1c3RTZWxlY3Rpb25SZWN0Rm9yVGV4dChjb25z
dCBUZXh0UnVuJiwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgaW50IGZyb20gPSAwLCBpbnQg
dG8gPSAtMSkgY29uc3Q7CkBAIC0xNzIsMTAgKzE3MiwxMCBAQCBwdWJsaWM6CiAKICAgICBib29s
IGlzUGxhdGZvcm1Gb250KCkgY29uc3QgeyByZXR1cm4gbV9nbHlwaHMtPmlzRm9yUGxhdGZvcm1G
b250KCk7IH0KIAotICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBmb250TWV0cmljcygpIGNvbnN0IHsg
cmV0dXJuIHByaW1hcnlGb250RGF0YSgpLmZvbnRNZXRyaWNzKCk7IH0KLSAgICBmbG9hdCBzcGFj
ZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gcHJpbWFyeUZvbnREYXRhKCkuc3BhY2VXaWR0aCgpICsg
bV9sZXR0ZXJTcGFjaW5nOyB9Ci0gICAgZmxvYXQgdGFiV2lkdGgoY29uc3QgU2ltcGxlRm9udERh
dGEmLCB1bnNpZ25lZCB0YWJTaXplLCBmbG9hdCBwb3NpdGlvbikgY29uc3Q7Ci0gICAgZmxvYXQg
dGFiV2lkdGgodW5zaWduZWQgdGFiU2l6ZSwgZmxvYXQgcG9zaXRpb24pIGNvbnN0IHsgcmV0dXJu
IHRhYldpZHRoKHByaW1hcnlGb250RGF0YSgpLCB0YWJTaXplLCBwb3NpdGlvbik7IH0KKyAgICBj
b25zdCBGb250TWV0cmljcyYgZm9udE1ldHJpY3MoKSBjb25zdCB7IHJldHVybiBwcmltYXJ5Rm9u
dCgpLmZvbnRNZXRyaWNzKCk7IH0KKyAgICBmbG9hdCBzcGFjZVdpZHRoKCkgY29uc3QgeyByZXR1
cm4gcHJpbWFyeUZvbnQoKS5zcGFjZVdpZHRoKCkgKyBtX2xldHRlclNwYWNpbmc7IH0KKyAgICBm
bG9hdCB0YWJXaWR0aChjb25zdCBGb250JiwgdW5zaWduZWQgdGFiU2l6ZSwgZmxvYXQgcG9zaXRp
b24pIGNvbnN0OworICAgIGZsb2F0IHRhYldpZHRoKHVuc2lnbmVkIHRhYlNpemUsIGZsb2F0IHBv
c2l0aW9uKSBjb25zdCB7IHJldHVybiB0YWJXaWR0aChwcmltYXJ5Rm9udCgpLCB0YWJTaXplLCBw
b3NpdGlvbik7IH0KICAgICBib29sIGhhc1ZhbGlkQXZlcmFnZUNoYXJXaWR0aCgpIGNvbnN0Owog
ICAgIGJvb2wgZmFzdEF2ZXJhZ2VDaGFyV2lkdGhJZkF2YWlsYWJsZShmbG9hdCAmd2lkdGgpIGNv
bnN0OyAvLyByZXR1cm5zIHRydWUgb24gc3VjY2VzcwogCkBAIC0xODMsMTIgKzE4MywxMiBAQCBw
dWJsaWM6CiAgICAgaW50IGVtcGhhc2lzTWFya0Rlc2NlbnQoY29uc3QgQXRvbWljU3RyaW5nJikg
Y29uc3Q7CiAgICAgaW50IGVtcGhhc2lzTWFya0hlaWdodChjb25zdCBBdG9taWNTdHJpbmcmKSBj
b25zdDsKIAotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhJiBwcmltYXJ5Rm9udERhdGEoKSBjb25z
dDsKKyAgICBjb25zdCBGb250JiBwcmltYXJ5Rm9udCgpIGNvbnN0OwogICAgIGNvbnN0IEZvbnRS
YW5nZXMmIGZhbGxiYWNrUmFuZ2VzQXQodW5zaWduZWQpIGNvbnN0OwotICAgIEdseXBoRGF0YSBn
bHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiwgYm9vbCBtaXJyb3IsIEZvbnREYXRhVmFyaWFu
dCA9IEF1dG9WYXJpYW50KSBjb25zdDsKKyAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yQ2hhcmFj
dGVyKFVDaGFyMzIsIGJvb2wgbWlycm9yLCBGb250VmFyaWFudCA9IEF1dG9WYXJpYW50KSBjb25z
dDsKICAgICAKICNpZiBQTEFURk9STShDT0NPQSkKLSAgICBjb25zdCBTaW1wbGVGb250RGF0YSog
Zm9udERhdGFGb3JDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBVQ2hhciosIHNpemVf
dCBsZW5ndGgsIEZvbnREYXRhVmFyaWFudCkgY29uc3Q7CisgICAgY29uc3QgRm9udCogZm9udEZv
ckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVDaGFyKiwgc2l6ZV90IGxlbmd0aCwg
Rm9udFZhcmlhbnQpIGNvbnN0OwogI2VuZGlmCiAKICAgICBzdGF0aWMgYm9vbCBpc0NKS0lkZW9n
cmFwaChVQ2hhcjMyKTsKQEAgLTIwNyw3ICsyMDcsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIENv
ZGVQYXRoIGNoYXJhY3RlclJhbmdlQ29kZVBhdGgoY29uc3QgTENoYXIqLCB1bnNpZ25lZCkgeyBy
ZXR1cm4gU2ltcGxlOyB9CiAgICAgc3RhdGljIENvZGVQYXRoIGNoYXJhY3RlclJhbmdlQ29kZVBh
dGgoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW4pOwogCi0gICAgYm9vbCBwcmltYXJ5Rm9udERh
dGFJc1N5c3RlbUZvbnQoKSBjb25zdDsKKyAgICBib29sIHByaW1hcnlGb250SXNTeXN0ZW1Gb250
KCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgZW51bSBGb3JUZXh0RW1waGFzaXNPck5vdCB7IE5v
dEZvclRleHRFbXBoYXNpcywgRm9yVGV4dEVtcGhhc2lzIH07CkBAIC0yMTgsNyArMjE4LDcgQEAg
cHJpdmF0ZToKICAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzRm9yU2ltcGxlVGV4dChHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25z
dCBGbG9hdFBvaW50JiwgaW50IGZyb20sIGludCB0bykgY29uc3Q7CiAgICAgdm9pZCBkcmF3R2x5
cGhCdWZmZXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEdseXBoQnVm
ZmVyJiwgRmxvYXRQb2ludCYpIGNvbnN0OwogICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3MoR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEdseXBoQnVmZmVyJiwgY29uc3Qg
QXRvbWljU3RyaW5nJiwgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OwotICAgIGZsb2F0IGZsb2F0
V2lkdGhGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZv
bnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93KiA9IDApIGNvbnN0Owor
ICAgIGZsb2F0IGZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mLCBIYXNoU2V0
PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29u
c3Q7CiAgICAgaW50IG9mZnNldEZvclBvc2l0aW9uRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVu
JiwgZmxvYXQgcG9zaXRpb24sIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0OwogICAg
IHZvaWQgYWRqdXN0U2VsZWN0aW9uUmVjdEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYsIExh
eW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0OwogCkBAIC0y
MzEsNyArMjMxLDcgQEAgcHJpdmF0ZToKICAgICBmbG9hdCBnZXRHbHlwaHNBbmRBZHZhbmNlc0Zv
ckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBpbnQgZnJvbSwgaW50IHRvLCBHbHlwaEJ1ZmZl
ciYsIEZvclRleHRFbXBoYXNpc09yTm90ID0gTm90Rm9yVGV4dEVtcGhhc2lzKSBjb25zdDsKICAg
ICBmbG9hdCBkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYs
IGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdDsKICAgICB2b2lkIGRy
YXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4
dFJ1biYsIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIGludCBm
cm9tLCBpbnQgdG8pIGNvbnN0OwotICAgIGZsb2F0IGZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChj
b25zdCBUZXh0UnVuJiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0Zv
bnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsKKyAgICBmbG9hdCBmbG9hdFdpZHRo
Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxs
YmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsKICAgICBpbnQgb2Zmc2V0
Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwgZmxvYXQgcG9zaXRpb24s
IGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0OwogICAgIHZvaWQgYWRqdXN0U2VsZWN0
aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBMYXlvdXRSZWN0JiBzZWxlY3Rp
b25SZWN0LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdDsKIApAQCAtMzUyLDEwICszNTIsMTAgQEAg
aW5saW5lIEZvbnRDYXNjYWRlOjp+Rm9udENhc2NhZGUoKQogewogfQogCi1pbmxpbmUgY29uc3Qg
U2ltcGxlRm9udERhdGEmIEZvbnRDYXNjYWRlOjpwcmltYXJ5Rm9udERhdGEoKSBjb25zdAoraW5s
aW5lIGNvbnN0IEZvbnQmIEZvbnRDYXNjYWRlOjpwcmltYXJ5Rm9udCgpIGNvbnN0CiB7CiAgICAg
QVNTRVJUKG1fZ2x5cGhzKTsKLSAgICByZXR1cm4gbV9nbHlwaHMtPnByaW1hcnlTaW1wbGVGb250
RGF0YShtX2ZvbnREZXNjcmlwdGlvbik7CisgICAgcmV0dXJuIG1fZ2x5cGhzLT5wcmltYXJ5Rm9u
dChtX2ZvbnREZXNjcmlwdGlvbik7CiB9CiAKIGlubGluZSBjb25zdCBGb250UmFuZ2VzJiBGb250
Q2FzY2FkZTo6ZmFsbGJhY2tSYW5nZXNBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QKQEAgLTM3NSwx
MyArMzc1LDEzIEBAIGlubGluZSBGb250U2VsZWN0b3IqIEZvbnRDYXNjYWRlOjpmb250U2UKICAg
ICByZXR1cm4gbV9nbHlwaHMgPyBtX2dseXBocy0+Zm9udFNlbGVjdG9yKCkgOiAwOwogfQogCi1p
bmxpbmUgZmxvYXQgRm9udENhc2NhZGU6OnRhYldpZHRoKGNvbnN0IFNpbXBsZUZvbnREYXRhJiBm
b250RGF0YSwgdW5zaWduZWQgdGFiU2l6ZSwgZmxvYXQgcG9zaXRpb24pIGNvbnN0CitpbmxpbmUg
ZmxvYXQgRm9udENhc2NhZGU6OnRhYldpZHRoKGNvbnN0IEZvbnQmIGZvbnQsIHVuc2lnbmVkIHRh
YlNpemUsIGZsb2F0IHBvc2l0aW9uKSBjb25zdAogewogICAgIGlmICghdGFiU2l6ZSkKICAgICAg
ICAgcmV0dXJuIGxldHRlclNwYWNpbmcoKTsKLSAgICBmbG9hdCB0YWJXaWR0aCA9IHRhYlNpemUg
KiBmb250RGF0YS5zcGFjZVdpZHRoKCkgKyBsZXR0ZXJTcGFjaW5nKCk7CisgICAgZmxvYXQgdGFi
V2lkdGggPSB0YWJTaXplICogZm9udC5zcGFjZVdpZHRoKCkgKyBsZXR0ZXJTcGFjaW5nKCk7CiAg
ICAgZmxvYXQgdGFiRGVsdGFXaWR0aCA9IHRhYldpZHRoIC0gZm1vZGYocG9zaXRpb24sIHRhYldp
ZHRoKTsKLSAgICByZXR1cm4gKHRhYkRlbHRhV2lkdGggPCBmb250RGF0YS5zcGFjZVdpZHRoKCkg
LyAyKSA/IHRhYldpZHRoIDogdGFiRGVsdGFXaWR0aDsKKyAgICByZXR1cm4gKHRhYkRlbHRhV2lk
dGggPCBmb250LnNwYWNlV2lkdGgoKSAvIDIpID8gdGFiV2lkdGggOiB0YWJEZWx0YVdpZHRoOwog
fQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250R2x5cGhz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
R2x5cGhzLmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udEdseXBocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiAKIEZvbnRHbHlwaHM6OkZvbnRHbHlwaHMoUGFzc1JlZlB0
cjxGb250U2VsZWN0b3I+IGZvbnRTZWxlY3RvcikKLSAgICA6IG1fY2FjaGVkUHJpbWFyeVNpbXBs
ZUZvbnREYXRhKDApCisgICAgOiBtX2NhY2hlZFByaW1hcnlGb250KDApCiAgICAgLCBtX2ZvbnRT
ZWxlY3Rvcihmb250U2VsZWN0b3IpCiAgICAgLCBtX2ZvbnRTZWxlY3RvclZlcnNpb24obV9mb250
U2VsZWN0b3IgPyBtX2ZvbnRTZWxlY3Rvci0+dmVyc2lvbigpIDogMCkKICAgICAsIG1fZ2VuZXJh
dGlvbihmb250Q2FjaGUoKS5nZW5lcmF0aW9uKCkpCkBAIC00NSw3ICs0NSw3IEBAIEZvbnRHbHlw
aHM6OkZvbnRHbHlwaHMoUGFzc1JlZlB0cjxGb250U2UKIH0KIAogRm9udEdseXBoczo6Rm9udEds
eXBocyhjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEpCi0gICAgOiBtX2NhY2hl
ZFByaW1hcnlTaW1wbGVGb250RGF0YSgwKQorICAgIDogbV9jYWNoZWRQcmltYXJ5Rm9udCgwKQog
ICAgICwgbV9mb250U2VsZWN0b3IoMCkKICAgICAsIG1fZm9udFNlbGVjdG9yVmVyc2lvbigwKQog
ICAgICwgbV9nZW5lcmF0aW9uKGZvbnRDYWNoZSgpLmdlbmVyYXRpb24oKSkKQEAgLTYzLDcgKzYz
LDcgQEAgdm9pZCBGb250R2x5cGhzOjpkZXRlcm1pbmVQaXRjaChjb25zdCBGbwogICAgIGF1dG8m
IHByaW1hcnlSYW5nZXMgPSByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChkZXNjcmlwdGlvbiwgMCk7
CiAgICAgdW5zaWduZWQgbnVtUmFuZ2VzID0gcHJpbWFyeVJhbmdlcy5zaXplKCk7CiAgICAgaWYg
KG51bVJhbmdlcyA9PSAxKQotICAgICAgICBtX3BpdGNoID0gcHJpbWFyeVJhbmdlcy5yYW5nZUF0
KDApLmZvbnREYXRhKCkucGl0Y2goKTsKKyAgICAgICAgbV9waXRjaCA9IHByaW1hcnlSYW5nZXMu
cmFuZ2VBdCgwKS5mb250KCkucGl0Y2goKTsKICAgICBlbHNlCiAgICAgICAgIG1fcGl0Y2ggPSBW
YXJpYWJsZVBpdGNoOwogfQpAQCAtOTYsNyArOTYsNyBAQCBzdGF0aWMgRm9udFJhbmdlcyByZWFs
aXplTmV4dEZhbGxiYWNrKGNvCiAgICAgLy8gV2UgZGlkbid0IGZpbmQgYSBmb250LiBUcnkgdG8g
ZmluZCBhIHNpbWlsYXIgZm9udCB1c2luZyBvdXIgb3duIHNwZWNpZmljIGtub3dsZWRnZSBhYm91
dCBvdXIgcGxhdGZvcm0uCiAgICAgLy8gRm9yIGV4YW1wbGUgb24gT1MgWCwgd2Uga25vdyB0byBt
YXAgYW55IGZhbWlsaWVzIGNvbnRhaW5pbmcgdGhlIHdvcmRzIEFyYWJpYywgUGFzaHRvLCBvciBV
cmR1IHRvIHRoZQogICAgIC8vIEdlZXphIFBybyBmb250LgotICAgIHJldHVybiBGb250UmFuZ2Vz
KGZvbnRDYWNoZSgpLnNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGRlc2NyaXB0aW9uKSk7CisgICAg
cmV0dXJuIEZvbnRSYW5nZXMoZm9udENhY2hlKCkuc2ltaWxhckZvbnQoZGVzY3JpcHRpb24pKTsK
IH0KIAogY29uc3QgRm9udFJhbmdlcyYgRm9udEdseXBoczo6cmVhbGl6ZUZhbGxiYWNrUmFuZ2Vz
QXQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgdW5zaWduZWQgaW5kZXgpCkBA
IC0xMjYsMTAgKzEyNiwxMCBAQCBjb25zdCBGb250UmFuZ2VzJiBGb250R2x5cGhzOjpyZWFsaXpl
RmFsCiAgICAgICAgIEFTU0VSVChtX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXggPj0gZGVzY3Jp
cHRpb24uZmFtaWx5Q291bnQoKSk7CiAKICAgICAgICAgdW5zaWduZWQgZm9udFNlbGVjdG9yRmFs
bGJhY2tJbmRleCA9IG1fbGFzdFJlYWxpemVkRmFsbGJhY2tJbmRleCAtIGRlc2NyaXB0aW9uLmZh
bWlseUNvdW50KCk7Ci0gICAgICAgIGlmIChmb250U2VsZWN0b3JGYWxsYmFja0luZGV4ID09IG1f
Zm9udFNlbGVjdG9yLT5mYWxsYmFja0ZvbnREYXRhQ291bnQoKSkKKyAgICAgICAgaWYgKGZvbnRT
ZWxlY3RvckZhbGxiYWNrSW5kZXggPT0gbV9mb250U2VsZWN0b3ItPmZhbGxiYWNrRm9udENvdW50
KCkpCiAgICAgICAgICAgICByZXR1cm4gZm9udFJhbmdlczsKICAgICAgICAgKyttX2xhc3RSZWFs
aXplZEZhbGxiYWNrSW5kZXg7Ci0gICAgICAgIGZvbnRSYW5nZXMgPSBGb250UmFuZ2VzKG1fZm9u
dFNlbGVjdG9yLT5mYWxsYmFja0ZvbnREYXRhQXQoZGVzY3JpcHRpb24sIGZvbnRTZWxlY3RvckZh
bGxiYWNrSW5kZXgpKTsKKyAgICAgICAgZm9udFJhbmdlcyA9IEZvbnRSYW5nZXMobV9mb250U2Vs
ZWN0b3ItPmZhbGxiYWNrRm9udEF0KGRlc2NyaXB0aW9uLCBmb250U2VsZWN0b3JGYWxsYmFja0lu
ZGV4KSk7CiAgICAgfQogCiAgICAgcmV0dXJuIGZvbnRSYW5nZXM7CkBAIC0yMjEsOCArMjIxLDgg
QEAgc3RhdGljIGJvb2wgc2hvdWxkSWdub3JlUm90YXRpb24oVUNoYXIzMgogI2lmIFBMQVRGT1JN
KENPQ09BKQogc3RhdGljIEdseXBoRGF0YSBnbHlwaERhdGFGb3JDSktDaGFyYWN0ZXJXaXRob3V0
U3ludGhldGljSXRhbGljKFVDaGFyMzIgY2hhcmFjdGVyLCBHbHlwaERhdGEmIGRhdGEpCiB7Ci0g
ICAgR2x5cGhEYXRhIG5vbkl0YWxpY0RhdGEgPSBkYXRhLmZvbnREYXRhLT5ub25TeW50aGV0aWNJ
dGFsaWNGb250RGF0YSgpLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyKTsKLSAgICBp
ZiAobm9uSXRhbGljRGF0YS5mb250RGF0YSkKKyAgICBHbHlwaERhdGEgbm9uSXRhbGljRGF0YSA9
IGRhdGEuZm9udC0+bm9uU3ludGhldGljSXRhbGljRm9udCgpLT5nbHlwaERhdGFGb3JDaGFyYWN0
ZXIoY2hhcmFjdGVyKTsKKyAgICBpZiAobm9uSXRhbGljRGF0YS5mb250KQogICAgICAgICByZXR1
cm4gbm9uSXRhbGljRGF0YTsKICAgICByZXR1cm4gZGF0YTsKIH0KQEAgLTIzMSw3NiArMjMxLDc2
IEBAIHN0YXRpYyBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yQ0pLQ2hhcmFjdGUKIHN0YXRpYyBHbHlw
aERhdGEgZ2x5cGhEYXRhRm9yTm9uQ0pLQ2hhcmFjdGVyV2l0aEdseXBoT3JpZW50YXRpb24oVUNo
YXIzMiBjaGFyYWN0ZXIsIE5vbkNKS0dseXBoT3JpZW50YXRpb24gb3JpZW50YXRpb24sIGNvbnN0
IEdseXBoRGF0YSYgZGF0YSkKIHsKICAgICBpZiAob3JpZW50YXRpb24gPT0gTm9uQ0pLR2x5cGhP
cmllbnRhdGlvblVwcmlnaHQgfHwgc2hvdWxkSWdub3JlUm90YXRpb24oY2hhcmFjdGVyKSkgewot
ICAgICAgICBHbHlwaERhdGEgdXByaWdodERhdGEgPSBkYXRhLmZvbnREYXRhLT51cHJpZ2h0T3Jp
ZW50YXRpb25Gb250RGF0YSgpLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyKTsKKyAg
ICAgICAgR2x5cGhEYXRhIHVwcmlnaHREYXRhID0gZGF0YS5mb250LT51cHJpZ2h0T3JpZW50YXRp
b25Gb250KCktPmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIpOwogICAgICAgICAvLyBJ
ZiB0aGUgZ2x5cGhzIGFyZSB0aGUgc2FtZSwgdGhlbiB3ZSBrbm93IHdlIGNhbiBqdXN0IHVzZSB0
aGUgaG9yaXpvbnRhbCBnbHlwaCByb3RhdGVkIHZlcnRpY2FsbHkgdG8gYmUgdXByaWdodC4KICAg
ICAgICAgaWYgKGRhdGEuZ2x5cGggPT0gdXByaWdodERhdGEuZ2x5cGgpCiAgICAgICAgICAgICBy
ZXR1cm4gZGF0YTsKICAgICAgICAgLy8gVGhlIGdseXBocyBhcmUgZGlzdGluY3QsIG1lYW5pbmcg
dGhhdCB0aGUgZm9udCBoYXMgYSB2ZXJ0aWNhbC1yaWdodCBnbHlwaCBiYWtlZCBpbnRvIGl0LiBX
ZSBjYW4ndCB1c2UgdGhhdAogICAgICAgICAvLyBnbHlwaCwgc28gd2UgZmFsbCBiYWNrIHRvIHRo
ZSB1cHJpZ2h0IGRhdGEgYW5kIHVzZSB0aGUgaG9yaXpvbnRhbCBnbHlwaC4KLSAgICAgICAgaWYg
KHVwcmlnaHREYXRhLmZvbnREYXRhKQorICAgICAgICBpZiAodXByaWdodERhdGEuZm9udCkKICAg
ICAgICAgICAgIHJldHVybiB1cHJpZ2h0RGF0YTsKICAgICB9IGVsc2UgaWYgKG9yaWVudGF0aW9u
ID09IE5vbkNKS0dseXBoT3JpZW50YXRpb25WZXJ0aWNhbFJpZ2h0KSB7Ci0gICAgICAgIEdseXBo
RGF0YSB2ZXJ0aWNhbFJpZ2h0RGF0YSA9IGRhdGEuZm9udERhdGEtPnZlcnRpY2FsUmlnaHRPcmll
bnRhdGlvbkZvbnREYXRhKCktPmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIpOworICAg
ICAgICBHbHlwaERhdGEgdmVydGljYWxSaWdodERhdGEgPSBkYXRhLmZvbnQtPnZlcnRpY2FsUmln
aHRPcmllbnRhdGlvbkZvbnQoKS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3Rlcik7CiAg
ICAgICAgIC8vIElmIHRoZSBnbHlwaHMgYXJlIGRpc3RpbmN0LCB3ZSB3aWxsIG1ha2UgdGhlIGFz
c3VtcHRpb24gdGhhdCB0aGUgZm9udCBoYXMgYSB2ZXJ0aWNhbC1yaWdodCBnbHlwaCBiYWtlZAog
ICAgICAgICAvLyBpbnRvIGl0LgogICAgICAgICBpZiAoZGF0YS5nbHlwaCAhPSB2ZXJ0aWNhbFJp
Z2h0RGF0YS5nbHlwaCkKICAgICAgICAgICAgIHJldHVybiBkYXRhOwogICAgICAgICAvLyBUaGUg
Z2x5cGhzIGFyZSBpZGVudGljYWwsIG1lYW5pbmcgdGhhdCB3ZSBzaG91bGQganVzdCB1c2UgdGhl
IGhvcml6b250YWwgZ2x5cGguCi0gICAgICAgIGlmICh2ZXJ0aWNhbFJpZ2h0RGF0YS5mb250RGF0
YSkKKyAgICAgICAgaWYgKHZlcnRpY2FsUmlnaHREYXRhLmZvbnQpCiAgICAgICAgICAgICByZXR1
cm4gdmVydGljYWxSaWdodERhdGE7CiAgICAgfQogICAgIHJldHVybiBkYXRhOwogfQogCi1HbHlw
aERhdGEgRm9udEdseXBoczo6Z2x5cGhEYXRhRm9yU3lzdGVtRmFsbGJhY2soVUNoYXIzMiBjLCBj
b25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250RGF0YVZhcmlhbnQgdmFyaWFu
dCkKK0dseXBoRGF0YSBGb250R2x5cGhzOjpnbHlwaERhdGFGb3JTeXN0ZW1GYWxsYmFjayhVQ2hh
cjMyIGMsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIEZvbnRWYXJpYW50IHZh
cmlhbnQpCiB7CiAgICAgLy8gU3lzdGVtIGZhbGxiYWNrIGlzIGNoYXJhY3Rlci1kZXBlbmRlbnQu
CiAgICAgYXV0byYgcHJpbWFyeVJhbmdlcyA9IHJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGRlc2Ny
aXB0aW9uLCAwKTsKLSAgICBhdXRvKiBvcmlnaW5hbEZvbnREYXRhID0gcHJpbWFyeVJhbmdlcy5m
b250RGF0YUZvckNoYXJhY3RlcihjKTsKLSAgICBpZiAoIW9yaWdpbmFsRm9udERhdGEpCi0gICAg
ICAgIG9yaWdpbmFsRm9udERhdGEgPSAmcHJpbWFyeVJhbmdlcy5mb250RGF0YUZvckZpcnN0UmFu
Z2UoKTsKKyAgICBhdXRvKiBvcmlnaW5hbEZvbnQgPSBwcmltYXJ5UmFuZ2VzLmZvbnRGb3JDaGFy
YWN0ZXIoYyk7CisgICAgaWYgKCFvcmlnaW5hbEZvbnQpCisgICAgICAgIG9yaWdpbmFsRm9udCA9
ICZwcmltYXJ5UmFuZ2VzLmZvbnRGb3JGaXJzdFJhbmdlKCk7CiAKLSAgICBSZWZQdHI8U2ltcGxl
Rm9udERhdGE+IHN5c3RlbUZhbGxiYWNrRm9udERhdGEgPSBvcmlnaW5hbEZvbnREYXRhLT5zeXN0
ZW1GYWxsYmFja0ZvbnREYXRhRm9yQ2hhcmFjdGVyKGMsIGRlc2NyaXB0aW9uLCBtX2lzRm9yUGxh
dGZvcm1Gb250KTsKLSAgICBpZiAoIXN5c3RlbUZhbGxiYWNrRm9udERhdGEpCisgICAgUmVmUHRy
PEZvbnQ+IHN5c3RlbUZhbGxiYWNrRm9udCA9IG9yaWdpbmFsRm9udC0+c3lzdGVtRmFsbGJhY2tG
b250Rm9yQ2hhcmFjdGVyKGMsIGRlc2NyaXB0aW9uLCBtX2lzRm9yUGxhdGZvcm1Gb250KTsKKyAg
ICBpZiAoIXN5c3RlbUZhbGxiYWNrRm9udCkKICAgICAgICAgcmV0dXJuIEdseXBoRGF0YSgpOwog
Ci0gICAgaWYgKHN5c3RlbUZhbGxiYWNrRm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0
aW9uKCkgPT0gVmVydGljYWwgJiYgIXN5c3RlbUZhbGxiYWNrRm9udERhdGEtPmhhc1ZlcnRpY2Fs
R2x5cGhzKCkgJiYgRm9udENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woYykpCisgICAg
aWYgKHN5c3RlbUZhbGxiYWNrRm9udC0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBW
ZXJ0aWNhbCAmJiAhc3lzdGVtRmFsbGJhY2tGb250LT5oYXNWZXJ0aWNhbEdseXBocygpICYmIEZv
bnRDYXNjYWRlOjppc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGMpKQogICAgICAgICB2YXJpYW50ID0g
QnJva2VuSWRlb2dyYXBoVmFyaWFudDsKIAogICAgIEdseXBoRGF0YSBmYWxsYmFja0dseXBoRGF0
YTsKICAgICBpZiAodmFyaWFudCA9PSBOb3JtYWxWYXJpYW50KQotICAgICAgICBmYWxsYmFja0ds
eXBoRGF0YSA9IHN5c3RlbUZhbGxiYWNrRm9udERhdGEtPmdseXBoRGF0YUZvckNoYXJhY3Rlcihj
KTsKKyAgICAgICAgZmFsbGJhY2tHbHlwaERhdGEgPSBzeXN0ZW1GYWxsYmFja0ZvbnQtPmdseXBo
RGF0YUZvckNoYXJhY3RlcihjKTsKICAgICBlbHNlCi0gICAgICAgIGZhbGxiYWNrR2x5cGhEYXRh
ID0gc3lzdGVtRmFsbGJhY2tGb250RGF0YS0+dmFyaWFudEZvbnREYXRhKGRlc2NyaXB0aW9uLCB2
YXJpYW50KS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMpOworICAgICAgICBmYWxsYmFja0dseXBo
RGF0YSA9IHN5c3RlbUZhbGxiYWNrRm9udC0+dmFyaWFudEZvbnQoZGVzY3JpcHRpb24sIHZhcmlh
bnQpLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYyk7CiAKLSAgICBpZiAodmFyaWFudCA9PSBOb3Jt
YWxWYXJpYW50ICYmIGZhbGxiYWNrR2x5cGhEYXRhLmZvbnREYXRhKSB7Ci0gICAgICAgIGlmICgh
Rm9udENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woYykgJiYgZmFsbGJhY2tHbHlwaERh
dGEuZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwgJiYg
IWZhbGxiYWNrR2x5cGhEYXRhLmZvbnREYXRhLT5pc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKCkp
CisgICAgaWYgKHZhcmlhbnQgPT0gTm9ybWFsVmFyaWFudCAmJiBmYWxsYmFja0dseXBoRGF0YS5m
b250KSB7CisgICAgICAgIGlmICghRm9udENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2wo
YykgJiYgZmFsbGJhY2tHbHlwaERhdGEuZm9udC0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24o
KSA9PSBWZXJ0aWNhbCAmJiAhZmFsbGJhY2tHbHlwaERhdGEuZm9udC0+aXNUZXh0T3JpZW50YXRp
b25GYWxsYmFjaygpKQogICAgICAgICAgICAgZmFsbGJhY2tHbHlwaERhdGEgPSBnbHlwaERhdGFG
b3JOb25DSktDaGFyYWN0ZXJXaXRoR2x5cGhPcmllbnRhdGlvbihjLCBkZXNjcmlwdGlvbi5ub25D
SktHbHlwaE9yaWVudGF0aW9uKCksIGZhbGxiYWNrR2x5cGhEYXRhKTsKICAgICB9CiAKICAgICAv
LyBLZWVwIHRoZSBzeXN0ZW0gZmFsbGJhY2sgZm9udHMgd2UgdXNlIGFsaXZlLgogICAgIGlmIChm
YWxsYmFja0dseXBoRGF0YS5nbHlwaCkKLSAgICAgICAgbV9zeXN0ZW1GYWxsYmFja0ZvbnREYXRh
U2V0LmFkZChzeXN0ZW1GYWxsYmFja0ZvbnREYXRhLnJlbGVhc2UoKSk7CisgICAgICAgIG1fc3lz
dGVtRmFsbGJhY2tGb250U2V0LmFkZChzeXN0ZW1GYWxsYmFja0ZvbnQucmVsZWFzZSgpKTsKIAog
ICAgIHJldHVybiBmYWxsYmFja0dseXBoRGF0YTsKIH0KIAotR2x5cGhEYXRhIEZvbnRHbHlwaHM6
OmdseXBoRGF0YUZvclZhcmlhbnQoVUNoYXIzMiBjLCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRl
c2NyaXB0aW9uLCBGb250RGF0YVZhcmlhbnQgdmFyaWFudCwgdW5zaWduZWQgZmFsbGJhY2tJbmRl
eCkKK0dseXBoRGF0YSBGb250R2x5cGhzOjpnbHlwaERhdGFGb3JWYXJpYW50KFVDaGFyMzIgYywg
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udFZhcmlhbnQgdmFyaWFudCwg
dW5zaWduZWQgZmFsbGJhY2tJbmRleCkKIHsKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICBh
dXRvJiBmb250UmFuZ2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIGZh
bGxiYWNrSW5kZXgrKyk7CiAgICAgICAgIGlmIChmb250UmFuZ2VzLmlzTnVsbCgpKQogICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGF1dG8qIGZvbnREYXRhID0gZm9udFJhbmdlcy5mb250RGF0
YUZvckNoYXJhY3RlcihjKTsKLSAgICAgICAgR2x5cGhEYXRhIGRhdGEgPSBmb250RGF0YSA/IGZv
bnREYXRhLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYykgOiBHbHlwaERhdGEoKTsKLSAgICAgICAg
aWYgKGRhdGEuZm9udERhdGEpIHsKLSAgICAgICAgICAgIC8vIFRoZSB2YXJpYW50Rm9udERhdGEg
ZnVuY3Rpb24gc2hvdWxkIG5vdCBub3JtYWxseSByZXR1cm4gMC4KKyAgICAgICAgYXV0byogZm9u
dCA9IGZvbnRSYW5nZXMuZm9udEZvckNoYXJhY3RlcihjKTsKKyAgICAgICAgR2x5cGhEYXRhIGRh
dGEgPSBmb250ID8gZm9udC0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMpIDogR2x5cGhEYXRhKCk7
CisgICAgICAgIGlmIChkYXRhLmZvbnQpIHsKKyAgICAgICAgICAgIC8vIFRoZSB2YXJpYW50Rm9u
dCBmdW5jdGlvbiBzaG91bGQgbm90IG5vcm1hbGx5IHJldHVybiAwLgogICAgICAgICAgICAgLy8g
QnV0IGlmIGl0IGRvZXMsIHdlIHdpbGwganVzdCByZW5kZXIgdGhlIGNhcGl0YWwgbGV0dGVyIGJp
Zy4KLSAgICAgICAgICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gdmFyaWFudEZvbnREYXRhID0g
ZGF0YS5mb250RGF0YS0+dmFyaWFudEZvbnREYXRhKGRlc2NyaXB0aW9uLCB2YXJpYW50KTsKLSAg
ICAgICAgICAgIGlmICghdmFyaWFudEZvbnREYXRhKQorICAgICAgICAgICAgUmVmUHRyPEZvbnQ+
IHZhcmlhbnRGb250ID0gZGF0YS5mb250LT52YXJpYW50Rm9udChkZXNjcmlwdGlvbiwgdmFyaWFu
dCk7CisgICAgICAgICAgICBpZiAoIXZhcmlhbnRGb250KQogICAgICAgICAgICAgICAgIHJldHVy
biBkYXRhOwogCi0gICAgICAgICAgICByZXR1cm4gdmFyaWFudEZvbnREYXRhLT5nbHlwaERhdGFG
b3JDaGFyYWN0ZXIoYyk7CisgICAgICAgICAgICByZXR1cm4gdmFyaWFudEZvbnQtPmdseXBoRGF0
YUZvckNoYXJhY3RlcihjKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzE1LDIzICszMTUsMjMg
QEAgR2x5cGhEYXRhIEZvbnRHbHlwaHM6OmdseXBoRGF0YUZvck5vcm1hbAogICAgICAgICBhdXRv
JiBmb250UmFuZ2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIGZhbGxi
YWNrSW5kZXgpOwogICAgICAgICBpZiAoZm9udFJhbmdlcy5pc051bGwoKSkKICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBhdXRvKiBzaW1wbGVGb250RGF0YSA9IGZvbnRSYW5nZXMuZm9udERh
dGFGb3JDaGFyYWN0ZXIoYyk7Ci0gICAgICAgIGF1dG8qIHBhZ2UgPSBzaW1wbGVGb250RGF0YSA/
IHNpbXBsZUZvbnREYXRhLT5nbHlwaFBhZ2UocGFnZU51bWJlcikgOiBudWxscHRyOworICAgICAg
ICBhdXRvKiBmb250ID0gZm9udFJhbmdlcy5mb250Rm9yQ2hhcmFjdGVyKGMpOworICAgICAgICBh
dXRvKiBwYWdlID0gZm9udCA/IGZvbnQtPmdseXBoUGFnZShwYWdlTnVtYmVyKSA6IG51bGxwdHI7
CiAgICAgICAgIGlmICghcGFnZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBHbHlw
aERhdGEgZGF0YSA9IHBhZ2UtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjKTsKLSAgICAgICAgaWYg
KGRhdGEuZm9udERhdGEpIHsKLSAgICAgICAgICAgIGlmIChkYXRhLmZvbnREYXRhLT5wbGF0Zm9y
bURhdGEoKS5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsICYmICFkYXRhLmZvbnREYXRhLT5pc1Rl
eHRPcmllbnRhdGlvbkZhbGxiYWNrKCkpIHsKKyAgICAgICAgaWYgKGRhdGEuZm9udCkgeworICAg
ICAgICAgICAgaWYgKGRhdGEuZm9udC0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBW
ZXJ0aWNhbCAmJiAhZGF0YS5mb250LT5pc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKCkpIHsKICAg
ICAgICAgICAgICAgICBpZiAoIUZvbnRDYXNjYWRlOjppc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGMp
KQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2x5cGhEYXRhRm9yTm9uQ0pLQ2hhcmFjdGVy
V2l0aEdseXBoT3JpZW50YXRpb24oYywgZGVzY3JpcHRpb24ubm9uQ0pLR2x5cGhPcmllbnRhdGlv
bigpLCBkYXRhKTsKIAotICAgICAgICAgICAgICAgIGlmICghZGF0YS5mb250RGF0YS0+aGFzVmVy
dGljYWxHbHlwaHMoKSkgeworICAgICAgICAgICAgICAgIGlmICghZGF0YS5mb250LT5oYXNWZXJ0
aWNhbEdseXBocygpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFVzZSB0aGUgYnJva2VuIGlk
ZW9ncmFwaCBmb250IGRhdGEuIFRoZSBicm9rZW4gaWRlb2dyYXBoIGZvbnQgd2lsbCB1c2UgdGhl
IGhvcml6b250YWwgd2lkdGggb2YgZ2x5cGhzCiAgICAgICAgICAgICAgICAgICAgIC8vIHRvIG1h
a2Ugc3VyZSB5b3UgZ2V0IGEgc3F1YXJlIChldmVuIGZvciBicm9rZW4gZ2x5cGhzIGxpa2Ugc3lt
Ym9scyB1c2VkIGZvciBwdW5jdHVhdGlvbikuCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBn
bHlwaERhdGFGb3JWYXJpYW50KGMsIGRlc2NyaXB0aW9uLCBCcm9rZW5JZGVvZ3JhcGhWYXJpYW50
LCBmYWxsYmFja0luZGV4KTsKICAgICAgICAgICAgICAgICB9CiAjaWYgUExBVEZPUk0oQ09DT0Ep
Ci0gICAgICAgICAgICAgICAgaWYgKGRhdGEuZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLnN5bnRo
ZXRpY09ibGlxdWUoKSkKKyAgICAgICAgICAgICAgICBpZiAoZGF0YS5mb250LT5wbGF0Zm9ybURh
dGEoKS5zeW50aGV0aWNPYmxpcXVlKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbHlw
aERhdGFGb3JDSktDaGFyYWN0ZXJXaXRob3V0U3ludGhldGljSXRhbGljKGMsIGRhdGEpOwogI2Vu
ZGlmCiAgICAgICAgICAgICB9CkBAIC0zNDUsMjcgKzM0NSwyNyBAQCBHbHlwaERhdGEgRm9udEds
eXBoczo6Z2x5cGhEYXRhRm9yTm9ybWFsCiAKIHN0YXRpYyBSZWZQdHI8R2x5cGhQYWdlPiBnbHlw
aFBhZ2VGcm9tRm9udFJhbmdlcyh1bnNpZ25lZCBwYWdlTnVtYmVyLCBjb25zdCBGb250UmFuZ2Vz
JiBmb250UmFuZ2VzKQogewotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBzaW1wbGVGb250RGF0
YSA9IG51bGxwdHI7CisgICAgY29uc3QgRm9udCogZm9udCA9IG51bGxwdHI7CiAgICAgVUNoYXIz
MiBwYWdlUmFuZ2VGcm9tID0gcGFnZU51bWJlciAqIEdseXBoUGFnZTo6c2l6ZTsKICAgICBVQ2hh
cjMyIHBhZ2VSYW5nZVRvID0gcGFnZVJhbmdlRnJvbSArIEdseXBoUGFnZTo6c2l6ZSAtIDE7CiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZvbnRSYW5nZXMuc2l6ZSgpOyArK2kpIHsKICAg
ICAgICAgYXV0byYgcmFuZ2UgPSBmb250UmFuZ2VzLnJhbmdlQXQoaSk7CiAgICAgICAgIGlmIChy
YW5nZS50bygpKSB7CiAgICAgICAgICAgICBpZiAocmFuZ2UuZnJvbSgpIDw9IHBhZ2VSYW5nZUZy
b20gJiYgcGFnZVJhbmdlVG8gPD0gcmFuZ2UudG8oKSkKLSAgICAgICAgICAgICAgICBzaW1wbGVG
b250RGF0YSA9ICZyYW5nZS5mb250RGF0YSgpOworICAgICAgICAgICAgICAgIGZvbnQgPSAmcmFu
Z2UuZm9udCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYg
KCFzaW1wbGVGb250RGF0YSkKKyAgICBpZiAoIWZvbnQpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogCi0gICAgaWYgKHNpbXBsZUZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigp
ID09IFZlcnRpY2FsKQorICAgIGlmIChmb250LT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigp
ID09IFZlcnRpY2FsKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBjb25z
dF9jYXN0PEdseXBoUGFnZSo+KHNpbXBsZUZvbnREYXRhLT5nbHlwaFBhZ2UocGFnZU51bWJlcikp
OworICAgIHJldHVybiBjb25zdF9jYXN0PEdseXBoUGFnZSo+KGZvbnQtPmdseXBoUGFnZShwYWdl
TnVtYmVyKSk7CiB9CiAKLUdseXBoRGF0YSBGb250R2x5cGhzOjpnbHlwaERhdGFGb3JDaGFyYWN0
ZXIoVUNoYXIzMiBjLCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250RGF0
YVZhcmlhbnQgdmFyaWFudCkKK0dseXBoRGF0YSBGb250R2x5cGhzOjpnbHlwaERhdGFGb3JDaGFy
YWN0ZXIoVUNoYXIzMiBjLCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250
VmFyaWFudCB2YXJpYW50KQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgQVNT
RVJUKHZhcmlhbnQgIT0gQXV0b1ZhcmlhbnQpOwpAQCAtMzgyLDE5ICszODIsMTkgQEAgR2x5cGhE
YXRhIEZvbnRHbHlwaHM6OmdseXBoRGF0YUZvckNoYXJhYwogICAgIEdseXBoRGF0YSBnbHlwaERh
dGEgPSBjYWNoZWRQYWdlID8gY2FjaGVkUGFnZS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMpIDog
R2x5cGhEYXRhKCk7CiAgICAgaWYgKCFnbHlwaERhdGEuZ2x5cGgpIHsKICAgICAgICAgaWYgKCFj
YWNoZWRQYWdlKQotICAgICAgICAgICAgY2FjaGVkUGFnZSA9IEdseXBoUGFnZTo6Y3JlYXRlRm9y
TWl4ZWRGb250RGF0YSgpOworICAgICAgICAgICAgY2FjaGVkUGFnZSA9IEdseXBoUGFnZTo6Y3Jl
YXRlRm9yTWl4ZWRGb250cygpOwogICAgICAgICBlbHNlIGlmIChjYWNoZWRQYWdlLT5pc0ltbXV0
YWJsZSgpKQotICAgICAgICAgICAgY2FjaGVkUGFnZSA9IEdseXBoUGFnZTo6Y3JlYXRlQ29weUZv
ck1peGVkRm9udERhdGEoKmNhY2hlZFBhZ2UpOworICAgICAgICAgICAgY2FjaGVkUGFnZSA9IEds
eXBoUGFnZTo6Y3JlYXRlQ29weUZvck1peGVkRm9udHMoKmNhY2hlZFBhZ2UpOwogCiAgICAgICAg
IGdseXBoRGF0YSA9IGdseXBoRGF0YUZvck5vcm1hbFZhcmlhbnQoYywgZGVzY3JpcHRpb24pOwot
ICAgICAgICBjYWNoZWRQYWdlLT5zZXRHbHlwaERhdGFGb3JDaGFyYWN0ZXIoYywgZ2x5cGhEYXRh
LmdseXBoLCBnbHlwaERhdGEuZm9udERhdGEpOworICAgICAgICBjYWNoZWRQYWdlLT5zZXRHbHlw
aERhdGFGb3JDaGFyYWN0ZXIoYywgZ2x5cGhEYXRhLmdseXBoLCBnbHlwaERhdGEuZm9udCk7CiAg
ICAgfQogICAgIHJldHVybiBnbHlwaERhdGE7CiB9CiAKIHZvaWQgRm9udEdseXBoczo6cHJ1bmVT
eXN0ZW1GYWxsYmFja3MoKQogewotICAgIGlmIChtX3N5c3RlbUZhbGxiYWNrRm9udERhdGFTZXQu
aXNFbXB0eSgpKQorICAgIGlmIChtX3N5c3RlbUZhbGxiYWNrRm9udFNldC5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybjsKICAgICAvLyBNdXRhYmxlIGdseXBoIHBhZ2VzIG1heSByZWZlcmVuY2Ug
ZmFsbGJhY2sgZm9udHMuCiAgICAgaWYgKG1fY2FjaGVkUGFnZVplcm8gJiYgIW1fY2FjaGVkUGFn
ZVplcm8tPmlzSW1tdXRhYmxlKCkpCkBAIC00MDIsNyArNDAyLDcgQEAgdm9pZCBGb250R2x5cGhz
OjpwcnVuZVN5c3RlbUZhbGxiYWNrcygpCiAgICAgbV9jYWNoZWRQYWdlcy5yZW1vdmVJZihbXShk
ZWNsdHlwZShtX2NhY2hlZFBhZ2VzKTo6S2V5VmFsdWVQYWlyVHlwZSYga2V5QW5kVmFsdWUpIHsK
ICAgICAgICAgcmV0dXJuICFrZXlBbmRWYWx1ZS52YWx1ZS0+aXNJbW11dGFibGUoKTsKICAgICB9
KTsKLSAgICBtX3N5c3RlbUZhbGxiYWNrRm9udERhdGFTZXQuY2xlYXIoKTsKKyAgICBtX3N5c3Rl
bUZhbGxiYWNrRm9udFNldC5jbGVhcigpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250R2x5cGhzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEdseXBocy5oCShyZXZpc2lvbiAxNzg4NTcpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250R2x5cGhzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIxLDEwICsyMSwxMCBAQAogI2lmbmRlZiBGb250R2x5cGhzX2gKICNkZWZpbmUgRm9u
dEdseXBoc19oCiAKKyNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9udFJhbmdlcy5oIgog
I2luY2x1ZGUgIkZvbnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkdseXBoUGFnZS5oIgotI2luY2x1
ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5jbHVkZSAiV2lkdGhDYWNoZS5oIgogI2luY2x1ZGUg
PHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KQEAgLTUxLDcgKzUx
LDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc0ZvclBsYXRmb3JtRm9udCgpIGNvbnN0IHsgcmV0
dXJuIG1faXNGb3JQbGF0Zm9ybUZvbnQ7IH0KIAotICAgIEdseXBoRGF0YSBnbHlwaERhdGFGb3JD
aGFyYWN0ZXIoVUNoYXIzMiwgY29uc3QgRm9udERlc2NyaXB0aW9uJiwgRm9udERhdGFWYXJpYW50
KTsKKyAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIsIGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYsIEZvbnRWYXJpYW50KTsKIAogICAgIGJvb2wgaXNGaXhlZFBpdGNoKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYpOwogICAgIHZvaWQgZGV0ZXJtaW5lUGl0Y2goY29uc3QgRm9u
dERlc2NyaXB0aW9uJik7CkBAIC02Niw3ICs2Niw3IEBAIHB1YmxpYzoKICAgICBXaWR0aENhY2hl
JiB3aWR0aENhY2hlKCkgeyByZXR1cm4gbV93aWR0aENhY2hlOyB9CiAgICAgY29uc3QgV2lkdGhD
YWNoZSYgd2lkdGhDYWNoZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGhDYWNoZTsgfQogCi0gICAg
Y29uc3QgU2ltcGxlRm9udERhdGEmIHByaW1hcnlTaW1wbGVGb250RGF0YShjb25zdCBGb250RGVz
Y3JpcHRpb24mKTsKKyAgICBjb25zdCBGb250JiBwcmltYXJ5Rm9udChjb25zdCBGb250RGVzY3Jp
cHRpb24mKTsKICAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBGb250UmFuZ2VzJiByZWFsaXplRmFs
bGJhY2tSYW5nZXNBdChjb25zdCBGb250RGVzY3JpcHRpb24mLCB1bnNpZ25lZCBmYWxsYmFja0lu
ZGV4KTsKIAogICAgIHZvaWQgcHJ1bmVTeXN0ZW1GYWxsYmFja3MoKTsKQEAgLTc1LDkgKzc1LDkg
QEAgcHJpdmF0ZToKICAgICBGb250R2x5cGhzKFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPik7CiAg
ICAgRm9udEdseXBocyhjb25zdCBGb250UGxhdGZvcm1EYXRhJik7CiAKLSAgICBHbHlwaERhdGEg
Z2x5cGhEYXRhRm9yU3lzdGVtRmFsbGJhY2soVUNoYXIzMiwgY29uc3QgRm9udERlc2NyaXB0aW9u
JiwgRm9udERhdGFWYXJpYW50KTsKKyAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yU3lzdGVtRmFs
bGJhY2soVUNoYXIzMiwgY29uc3QgRm9udERlc2NyaXB0aW9uJiwgRm9udFZhcmlhbnQpOwogICAg
IEdseXBoRGF0YSBnbHlwaERhdGFGb3JOb3JtYWxWYXJpYW50KFVDaGFyMzIsIGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYpOwotICAgIEdseXBoRGF0YSBnbHlwaERhdGFGb3JWYXJpYW50KFVDaGFyMzIs
IGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIEZvbnREYXRhVmFyaWFudCwgdW5zaWduZWQgZmFsbGJh
Y2tJbmRleCk7CisgICAgR2x5cGhEYXRhIGdseXBoRGF0YUZvclZhcmlhbnQoVUNoYXIzMiwgY29u
c3QgRm9udERlc2NyaXB0aW9uJiwgRm9udFZhcmlhbnQsIHVuc2lnbmVkIGZhbGxiYWNrSW5kZXgp
OwogCiAgICAgVmVjdG9yPEZvbnRSYW5nZXMsIDE+IG1fcmVhbGl6ZWRGYWxsYmFja1JhbmdlczsK
ICAgICB1bnNpZ25lZCBtX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXggeyAwIH07CkBAIC04NSw5
ICs4NSw5IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPEdseXBoUGFnZT4gbV9jYWNoZWRQYWdlWmVy
bzsKICAgICBIYXNoTWFwPGludCwgUmVmUHRyPEdseXBoUGFnZT4+IG1fY2FjaGVkUGFnZXM7CiAK
LSAgICBIYXNoU2V0PFJlZlB0cjxTaW1wbGVGb250RGF0YT4+IG1fc3lzdGVtRmFsbGJhY2tGb250
RGF0YVNldDsKKyAgICBIYXNoU2V0PFJlZlB0cjxGb250Pj4gbV9zeXN0ZW1GYWxsYmFja0ZvbnRT
ZXQ7CiAKLSAgICBjb25zdCBTaW1wbGVGb250RGF0YSogbV9jYWNoZWRQcmltYXJ5U2ltcGxlRm9u
dERhdGE7CisgICAgY29uc3QgRm9udCogbV9jYWNoZWRQcmltYXJ5Rm9udDsKICAgICBSZWZQdHI8
Rm9udFNlbGVjdG9yPiBtX2ZvbnRTZWxlY3RvcjsKIAogICAgIFdpZHRoQ2FjaGUgbV93aWR0aENh
Y2hlOwpAQCAtMTA1LDE2ICsxMDUsMTYgQEAgaW5saW5lIGJvb2wgRm9udEdseXBoczo6aXNGaXhl
ZFBpdGNoKGNvbgogICAgIHJldHVybiBtX3BpdGNoID09IEZpeGVkUGl0Y2g7CiB9OwogCi1pbmxp
bmUgY29uc3QgU2ltcGxlRm9udERhdGEmIEZvbnRHbHlwaHM6OnByaW1hcnlTaW1wbGVGb250RGF0
YShjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQoraW5saW5lIGNvbnN0IEZvbnQm
IEZvbnRHbHlwaHM6OnByaW1hcnlGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRp
b24pCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBpZiAoIW1fY2FjaGVkUHJp
bWFyeVNpbXBsZUZvbnREYXRhKSB7CisgICAgaWYgKCFtX2NhY2hlZFByaW1hcnlGb250KSB7CiAg
ICAgICAgIGF1dG8mIHByaW1hcnlSYW5nZXMgPSByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChkZXNj
cmlwdGlvbiwgMCk7Ci0gICAgICAgIG1fY2FjaGVkUHJpbWFyeVNpbXBsZUZvbnREYXRhID0gcHJp
bWFyeVJhbmdlcy5mb250RGF0YUZvckNoYXJhY3RlcignICcpOwotICAgICAgICBpZiAoIW1fY2Fj
aGVkUHJpbWFyeVNpbXBsZUZvbnREYXRhKQotICAgICAgICAgICAgbV9jYWNoZWRQcmltYXJ5U2lt
cGxlRm9udERhdGEgPSAmcHJpbWFyeVJhbmdlcy5mb250RGF0YUZvckZpcnN0UmFuZ2UoKTsKKyAg
ICAgICAgbV9jYWNoZWRQcmltYXJ5Rm9udCA9IHByaW1hcnlSYW5nZXMuZm9udEZvckNoYXJhY3Rl
cignICcpOworICAgICAgICBpZiAoIW1fY2FjaGVkUHJpbWFyeUZvbnQpCisgICAgICAgICAgICBt
X2NhY2hlZFByaW1hcnlGb250ID0gJnByaW1hcnlSYW5nZXMuZm9udEZvckZpcnN0UmFuZ2UoKTsK
ICAgICB9Ci0gICAgcmV0dXJuICptX2NhY2hlZFByaW1hcnlTaW1wbGVGb250RGF0YTsKKyAgICBy
ZXR1cm4gKm1fY2FjaGVkUHJpbWFyeUZvbnQ7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRNZXRyaWNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udE1ldHJpY3MuaAkocmV2aXNpb24gMTc4ODU3KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udE1ldHJpY3MuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTMzLDcgKzEzMyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEhhc1plcm9X
aWR0aChib29sIGhhc1plcm9XaWR0aCkgeyBtX2hhc1plcm9XaWR0aCA9IGhhc1plcm9XaWR0aDsg
fQogCiBwcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBTaW1wbGVGb250RGF0YTsKKyAgICBmcmll
bmQgY2xhc3MgRm9udDsKIAogICAgIHZvaWQgcmVzZXQoKQogICAgIHsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRSYW5nZXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRSYW5nZXMuY3BwCShyZXZpc2lvbiAx
Nzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UmFuZ2VzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkZvbnRSYW5nZXMuaCIKIAotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisj
aW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTM2LDM0ICszNiwzNCBAQCBGb250UmFuZ2VzOjpG
b250UmFuZ2VzKCkKIHsKIH0KIAotRm9udFJhbmdlczo6Rm9udFJhbmdlcyhSZWZQdHI8U2ltcGxl
Rm9udERhdGE+JiYgZm9udERhdGEpCitGb250UmFuZ2VzOjpGb250UmFuZ2VzKFJlZlB0cjxGb250
PiYmIGZvbnQpCiB7Ci0gICAgaWYgKGZvbnREYXRhKQotICAgICAgICBtX3Jhbmdlcy5hcHBlbmQo
UmFuZ2UgeyAwLCAweDdGRkZGRkZGLCBmb250RGF0YS5yZWxlYXNlTm9uTnVsbCgpIH0pOworICAg
IGlmIChmb250KQorICAgICAgICBtX3Jhbmdlcy5hcHBlbmQoUmFuZ2UgeyAwLCAweDdGRkZGRkZG
LCBmb250LnJlbGVhc2VOb25OdWxsKCkgfSk7CiB9CiAKIEZvbnRSYW5nZXM6On5Gb250UmFuZ2Vz
KCkKIHsKIH0KIAotY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRSYW5nZXM6OmZvbnREYXRhRm9y
Q2hhcmFjdGVyKFVDaGFyMzIgYykgY29uc3QKK2NvbnN0IEZvbnQqIEZvbnRSYW5nZXM6OmZvbnRG
b3JDaGFyYWN0ZXIoVUNoYXIzMiBjKSBjb25zdAogewogICAgIGZvciAoYXV0byYgcmFuZ2UgOiBt
X3JhbmdlcykgewogICAgICAgICBpZiAocmFuZ2UuZnJvbSgpIDw9IGMgJiYgYyA8PSByYW5nZS50
bygpKQotICAgICAgICAgICAgcmV0dXJuICZyYW5nZS5mb250RGF0YSgpOworICAgICAgICAgICAg
cmV0dXJuICZyYW5nZS5mb250KCk7CiAgICAgfQogICAgIHJldHVybiBudWxscHRyOwogfQogCi1j
b25zdCBTaW1wbGVGb250RGF0YSYgRm9udFJhbmdlczo6Zm9udERhdGFGb3JGaXJzdFJhbmdlKCkg
Y29uc3QKK2NvbnN0IEZvbnQmIEZvbnRSYW5nZXM6OmZvbnRGb3JGaXJzdFJhbmdlKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gbV9yYW5nZXNbMF0uZm9udERhdGEoKTsKKyAgICByZXR1cm4gbV9yYW5n
ZXNbMF0uZm9udCgpOwogfQogCiBib29sIEZvbnRSYW5nZXM6OmlzTG9hZGluZygpIGNvbnN0CiB7
CiAgICAgZm9yIChhdXRvJiByYW5nZSA6IG1fcmFuZ2VzKSB7Ci0gICAgICAgIGlmIChyYW5nZS5m
b250RGF0YSgpLmlzTG9hZGluZygpKQorICAgICAgICBpZiAocmFuZ2UuZm9udCgpLmlzTG9hZGlu
ZygpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRSYW5nZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UmFuZ2VzLmgJ
KHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRSYW5nZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBGb250
UmFuZ2VzX2gKICNkZWZpbmUgRm9udFJhbmdlc19oCiAKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0
YS5oIgorI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC0zNSwyNSArMzUsMjUgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogY2xhc3MgRm9udFJhbmdlcyB7CiBwdWJsaWM6CiAgICAgc3RydWN0IFJhbmdlIHsKLSAg
ICAgICAgUmFuZ2UoVUNoYXIzMiBmcm9tLCBVQ2hhcjMyIHRvLCBSZWY8U2ltcGxlRm9udERhdGE+
JiYgZm9udERhdGEpCisgICAgICAgIFJhbmdlKFVDaGFyMzIgZnJvbSwgVUNoYXIzMiB0bywgUmVm
PEZvbnQ+JiYgZm9udCkKICAgICAgICAgICAgIDogbV9mcm9tKGZyb20pCiAgICAgICAgICAgICAs
IG1fdG8odG8pCi0gICAgICAgICAgICAsIG1fZm9udERhdGEoV1RGOjptb3ZlKGZvbnREYXRhKSkK
KyAgICAgICAgICAgICwgbV9mb250KFdURjo6bW92ZShmb250KSkKICAgICAgICAgewogICAgICAg
ICB9CiAKICAgICAgICAgVUNoYXIzMiBmcm9tKCkgY29uc3QgeyByZXR1cm4gbV9mcm9tOyB9CiAg
ICAgICAgIFVDaGFyMzIgdG8oKSBjb25zdCB7IHJldHVybiBtX3RvOyB9Ci0gICAgICAgIGNvbnN0
IFNpbXBsZUZvbnREYXRhJiBmb250RGF0YSgpIGNvbnN0IHsgcmV0dXJuICptX2ZvbnREYXRhOyB9
CisgICAgICAgIGNvbnN0IEZvbnQmIGZvbnQoKSBjb25zdCB7IHJldHVybiAqbV9mb250OyB9CiAK
ICAgICBwcml2YXRlOgogICAgICAgICBVQ2hhcjMyIG1fZnJvbTsKICAgICAgICAgVUNoYXIzMiBt
X3RvOwotICAgICAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IG1fZm9udERhdGE7CisgICAgICAg
IFJlZlB0cjxGb250PiBtX2ZvbnQ7CiAgICAgfTsKIAogICAgIEZvbnRSYW5nZXMoKTsKLSAgICBl
eHBsaWNpdCBGb250UmFuZ2VzKFJlZlB0cjxTaW1wbGVGb250RGF0YT4mJik7CisgICAgZXhwbGlj
aXQgRm9udFJhbmdlcyhSZWZQdHI8Rm9udD4mJik7CiAgICAgfkZvbnRSYW5nZXMoKTsKIAogICAg
IGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gbV9yYW5nZXMuaXNFbXB0eSgpOyB9CkBAIC02
Miw4ICs2Miw4IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4g
bV9yYW5nZXMuc2l6ZSgpOyB9CiAgICAgY29uc3QgUmFuZ2UmIHJhbmdlQXQodW5zaWduZWQgaSkg
Y29uc3QgeyByZXR1cm4gbV9yYW5nZXNbaV07IH0KIAotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRh
KiBmb250RGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyKSBjb25zdDsKLSAgICBjb25zdCBTaW1wbGVG
b250RGF0YSYgZm9udERhdGFGb3JGaXJzdFJhbmdlKCkgY29uc3Q7CisgICAgY29uc3QgRm9udCog
Zm9udEZvckNoYXJhY3RlcihVQ2hhcjMyKSBjb25zdDsKKyAgICBjb25zdCBGb250JiBmb250Rm9y
Rmlyc3RSYW5nZSgpIGNvbnN0OwogICAgIGJvb2wgaXNMb2FkaW5nKCkgY29uc3Q7CiAKIHByaXZh
dGU6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250U2Vs
ZWN0b3IuaAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udFNlbGVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDkgKzQxLDkgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgfkZvbnRTZWxlY3RvcigpIHsgfQogCiAgICAgdmlydHVhbCBGb250
UmFuZ2VzIGZvbnRSYW5nZXNGb3JGYW1pbHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3Qg
QXRvbWljU3RyaW5nJikgPSAwOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0
YT4gZmFsbGJhY2tGb250RGF0YUF0KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIHNpemVfdCkgPSAw
OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGb250PiBmYWxsYmFja0ZvbnRBdChjb25zdCBGb250
RGVzY3JpcHRpb24mLCBzaXplX3QpID0gMDsKIAotICAgIHZpcnR1YWwgc2l6ZV90IGZhbGxiYWNr
Rm9udERhdGFDb3VudCgpID0gMDsKKyAgICB2aXJ0dWFsIHNpemVfdCBmYWxsYmFja0ZvbnRDb3Vu
dCgpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgcmVzb2x2ZXNGYW1pbHlGb3IoY29uc3QgRm9udERl
c2NyaXB0aW9uJikgY29uc3QgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkIGZvbnRDYWNoZUludmFs
aWRhdGVkKCkgeyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlw
aEJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dseXBoQnVmZmVyLmgJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dseXBoQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBTaW1wbGVGb250RGF0YTsKK2NsYXNz
IEZvbnQ7CiAKICNpZiBVU0UoQ0FJUk8pCiAvLyBGSVhNRTogV2h5IGRvZXMgQ2Fpcm8gdXNlIHN1
Y2ggYSBodWdlIHN0cnVjdCBpbnN0ZWFkIG9mIGp1c3QgYW4gb2Zmc2V0IGludG8gYW4gYXJyYXk/
CkBAIC03NiwxMiArNzYsMTIgQEAgdHlwZWRlZiBGbG9hdFNpemUgR2x5cGhCdWZmZXJBZHZhbmNl
OwogCiBjbGFzcyBHbHlwaEJ1ZmZlciB7CiBwdWJsaWM6Ci0gICAgYm9vbCBpc0VtcHR5KCkgY29u
c3QgeyByZXR1cm4gbV9mb250RGF0YS5pc0VtcHR5KCk7IH0KLSAgICBpbnQgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fZm9udERhdGEuc2l6ZSgpOyB9CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Qg
eyByZXR1cm4gbV9mb250LmlzRW1wdHkoKTsgfQorICAgIGludCBzaXplKCkgY29uc3QgeyByZXR1
cm4gbV9mb250LnNpemUoKTsgfQogICAgIAogICAgIHZvaWQgY2xlYXIoKQogICAgIHsKLSAgICAg
ICAgbV9mb250RGF0YS5jbGVhcigpOworICAgICAgICBtX2ZvbnQuY2xlYXIoKTsKICAgICAgICAg
bV9nbHlwaHMuY2xlYXIoKTsKICAgICAgICAgbV9hZHZhbmNlcy5jbGVhcigpOwogICAgICAgICBp
ZiAobV9vZmZzZXRzSW5TdHJpbmcpCkBAIC05Niw3ICs5Niw3IEBAIHB1YmxpYzoKICAgICBjb25z
dCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMoaW50IGZyb20pIGNvbnN0IHsgcmV0dXJuIG1fZ2x5
cGhzLmRhdGEoKSArIGZyb207IH0KICAgICBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFu
Y2VzKGludCBmcm9tKSBjb25zdCB7IHJldHVybiBtX2FkdmFuY2VzLmRhdGEoKSArIGZyb207IH0K
IAotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YUF0KGludCBpbmRleCkgY29uc3Qg
eyByZXR1cm4gbV9mb250RGF0YVtpbmRleF07IH0KKyAgICBjb25zdCBGb250KiBmb250QXQoaW50
IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2ZvbnRbaW5kZXhdOyB9CiAKICAgICB2b2lkIHNldElu
aXRpYWxBZHZhbmNlKEdseXBoQnVmZmVyQWR2YW5jZSBpbml0aWFsQWR2YW5jZSkgeyBtX2luaXRp
YWxBZHZhbmNlID0gaW5pdGlhbEFkdmFuY2U7IH0KICAgICBjb25zdCBHbHlwaEJ1ZmZlckFkdmFu
Y2UmIGluaXRpYWxBZHZhbmNlKCkgY29uc3QgeyByZXR1cm4gbV9pbml0aWFsQWR2YW5jZTsgfQpA
QCAtMTI2LDkgKzEyNiw5IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIG5vT2Zmc2V0ID0gVUlOVF9NQVg7Ci0gICAgdm9pZCBhZGQoR2x5cGggZ2x5cGgs
IGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LCBmbG9hdCB3aWR0aCwgdW5zaWduZWQgb2Zmc2V0
SW5TdHJpbmcgPSBub09mZnNldCwgY29uc3QgRmxvYXRTaXplKiBvZmZzZXQgPSAwKQorICAgIHZv
aWQgYWRkKEdseXBoIGdseXBoLCBjb25zdCBGb250KiBmb250LCBmbG9hdCB3aWR0aCwgdW5zaWdu
ZWQgb2Zmc2V0SW5TdHJpbmcgPSBub09mZnNldCwgY29uc3QgRmxvYXRTaXplKiBvZmZzZXQgPSAw
KQogICAgIHsKLSAgICAgICAgbV9mb250RGF0YS5hcHBlbmQoZm9udCk7CisgICAgICAgIG1fZm9u
dC5hcHBlbmQoZm9udCk7CiAKICNpZiBVU0UoQ0FJUk8pCiAgICAgICAgIGNhaXJvX2dseXBoX3Qg
Y2Fpcm9HbHlwaDsKQEAgLTE1OSw5ICsxNTksOSBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogI2lm
ICFVU0UoV0lOR0RJKQotICAgIHZvaWQgYWRkKEdseXBoIGdseXBoLCBjb25zdCBTaW1wbGVGb250
RGF0YSogZm9udCwgR2x5cGhCdWZmZXJBZHZhbmNlIGFkdmFuY2UsIHVuc2lnbmVkIG9mZnNldElu
U3RyaW5nID0gbm9PZmZzZXQpCisgICAgdm9pZCBhZGQoR2x5cGggZ2x5cGgsIGNvbnN0IEZvbnQq
IGZvbnQsIEdseXBoQnVmZmVyQWR2YW5jZSBhZHZhbmNlLCB1bnNpZ25lZCBvZmZzZXRJblN0cmlu
ZyA9IG5vT2Zmc2V0KQogICAgIHsKLSAgICAgICAgbV9mb250RGF0YS5hcHBlbmQoZm9udCk7Cisg
ICAgICAgIG1fZm9udC5hcHBlbmQoZm9udCk7CiAjaWYgVVNFKENBSVJPKQogICAgICAgICBjYWly
b19nbHlwaF90IGNhaXJvR2x5cGg7CiAgICAgICAgIGNhaXJvR2x5cGguaW5kZXggPSBnbHlwaDsK
QEAgLTIwNSw5ICsyMDUsOSBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHZvaWQgc3dhcChpbnQg
aW5kZXgxLCBpbnQgaW5kZXgyKQogICAgIHsKLSAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEq
IGYgPSBtX2ZvbnREYXRhW2luZGV4MV07Ci0gICAgICAgIG1fZm9udERhdGFbaW5kZXgxXSA9IG1f
Zm9udERhdGFbaW5kZXgyXTsKLSAgICAgICAgbV9mb250RGF0YVtpbmRleDJdID0gZjsKKyAgICAg
ICAgY29uc3QgRm9udCogZiA9IG1fZm9udFtpbmRleDFdOworICAgICAgICBtX2ZvbnRbaW5kZXgx
XSA9IG1fZm9udFtpbmRleDJdOworICAgICAgICBtX2ZvbnRbaW5kZXgyXSA9IGY7CiAKICAgICAg
ICAgR2x5cGhCdWZmZXJHbHlwaCBnID0gbV9nbHlwaHNbaW5kZXgxXTsKICAgICAgICAgbV9nbHlw
aHNbaW5kZXgxXSA9IG1fZ2x5cGhzW2luZGV4Ml07CkBAIC0yMjQsNyArMjI0LDcgQEAgcHJpdmF0
ZToKICNlbmRpZgogICAgIH0KIAotICAgIFZlY3Rvcjxjb25zdCBTaW1wbGVGb250RGF0YSosIDIw
NDg+IG1fZm9udERhdGE7CisgICAgVmVjdG9yPGNvbnN0IEZvbnQqLCAyMDQ4PiBtX2ZvbnQ7CiAg
ICAgVmVjdG9yPEdseXBoQnVmZmVyR2x5cGgsIDIwNDg+IG1fZ2x5cGhzOwogICAgIFZlY3RvcjxH
bHlwaEJ1ZmZlckFkdmFuY2UsIDIwNDg+IG1fYWR2YW5jZXM7CiAgICAgR2x5cGhCdWZmZXJBZHZh
bmNlIG1faW5pdGlhbEFkdmFuY2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HbHlwaFBhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HbHlwaFBhZ2UuaAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDE4ICsz
OSwxOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFNpbXBsZUZvbnREYXRhOwor
Y2xhc3MgRm9udDsKIAotLy8gSG9sZHMgdGhlIGdseXBoIGluZGV4IGFuZCB0aGUgY29ycmVzcG9u
ZGluZyBTaW1wbGVGb250RGF0YSBpbmZvcm1hdGlvbiBmb3IgYSBnaXZlbgorLy8gSG9sZHMgdGhl
IGdseXBoIGluZGV4IGFuZCB0aGUgY29ycmVzcG9uZGluZyBGb250IGluZm9ybWF0aW9uIGZvciBh
IGdpdmVuCiAvLyBjaGFyYWN0ZXIuCiBzdHJ1Y3QgR2x5cGhEYXRhIHsKLSAgICBHbHlwaERhdGEo
R2x5cGggZyA9IDAsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmID0gMCkKKyAgICBHbHlwaERhdGEo
R2x5cGggZyA9IDAsIGNvbnN0IEZvbnQqIGYgPSAwKQogICAgICAgICA6IGdseXBoKGcpCi0gICAg
ICAgICwgZm9udERhdGEoZikKKyAgICAgICAgLCBmb250KGYpCiAgICAgewogICAgIH0KICAgICBH
bHlwaCBnbHlwaDsKLSAgICBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGE7CisgICAgY29u
c3QgRm9udCogZm9udDsKIH07CiAKICNpZiBDT01QSUxFUihNU1ZDKQpAQCAtNjYsMjQgKzY2LDI0
IEBAIHN0cnVjdCBHbHlwaERhdGEgewogLy8gbWlzc2luZyBpbiB0aGUgcHJpbWFyeSBmb250Lgog
Y2xhc3MgR2x5cGhQYWdlIDogcHVibGljIFJlZkNvdW50ZWQ8R2x5cGhQYWdlPiB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8R2x5cGhQYWdlPiBjcmVhdGVGb3JNaXhlZEZvbnREYXRh
KCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxHbHlwaFBhZ2U+IGNyZWF0ZUZvck1peGVkRm9udHMo
KQogICAgIHsKLSAgICAgICAgdm9pZCogc2xvdCA9IGZhc3RNYWxsb2Moc2l6ZW9mKEdseXBoUGFn
ZSkgKyBzaXplb2YoU2ltcGxlRm9udERhdGEqKSAqIEdseXBoUGFnZTo6c2l6ZSk7CisgICAgICAg
IHZvaWQqIHNsb3QgPSBmYXN0TWFsbG9jKHNpemVvZihHbHlwaFBhZ2UpICsgc2l6ZW9mKEZvbnQq
KSAqIEdseXBoUGFnZTo6c2l6ZSk7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgKE5vdE51
bGwsIHNsb3QpIEdseXBoUGFnZShudWxscHRyKSk7CiAgICAgfQogCi0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8R2x5cGhQYWdlPiBjcmVhdGVDb3B5Rm9yTWl4ZWRGb250RGF0YShjb25zdCBHbHlwaFBh
Z2UmIG9yaWdpbmFsKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdseXBoUGFnZT4gY3JlYXRlQ29w
eUZvck1peGVkRm9udHMoY29uc3QgR2x5cGhQYWdlJiBvcmlnaW5hbCkKICAgICB7Ci0gICAgICAg
IFJlZlB0cjxHbHlwaFBhZ2U+IHBhZ2UgPSBjcmVhdGVGb3JNaXhlZEZvbnREYXRhKCk7CisgICAg
ICAgIFJlZlB0cjxHbHlwaFBhZ2U+IHBhZ2UgPSBjcmVhdGVGb3JNaXhlZEZvbnRzKCk7CiAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHbHlwaFBhZ2U6OnNpemU7ICsraSkKICAgICAg
ICAgICAgIHBhZ2UtPnNldEdseXBoRGF0YUZvckluZGV4KGksIG9yaWdpbmFsLmdseXBoRGF0YUZv
ckluZGV4KGkpKTsKICAgICAgICAgcmV0dXJuIHBhZ2UucmVsZWFzZSgpOwogICAgIH0KIAotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEdseXBoUGFnZT4gY3JlYXRlRm9yU2luZ2xlRm9udERhdGEoY29u
c3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdseXBo
UGFnZT4gY3JlYXRlRm9yU2luZ2xlRm9udChjb25zdCBGb250KiBmb250KQogICAgIHsKLSAgICAg
ICAgQVNTRVJUKGZvbnREYXRhKTsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHbHlwaFBh
Z2UoZm9udERhdGEpKTsKKyAgICAgICAgQVNTRVJUKGZvbnQpOworICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEdseXBoUGFnZShmb250KSk7CiAgICAgfQogCiAgICAgfkdseXBoUGFnZSgpCkBA
IC0xMTEsNyArMTExLDcgQEAgcHVibGljOgogICAgICAgICBHbHlwaCBnbHlwaCA9IG1fZ2x5cGhz
W2luZGV4XTsKICAgICAgICAgaWYgKGhhc1BlckdseXBoRm9udERhdGEoKSkKICAgICAgICAgICAg
IHJldHVybiBHbHlwaERhdGEoZ2x5cGgsIG1fcGVyR2x5cGhGb250RGF0YVtpbmRleF0pOwotICAg
ICAgICByZXR1cm4gR2x5cGhEYXRhKGdseXBoLCBnbHlwaCA/IG1fZm9udERhdGFGb3JBbGxHbHlw
aHMgOiAwKTsKKyAgICAgICAgcmV0dXJuIEdseXBoRGF0YShnbHlwaCwgZ2x5cGggPyBtX2ZvbnRG
b3JBbGxHbHlwaHMgOiAwKTsKICAgICB9CiAKICAgICBBTFdBWVNfSU5MSU5FIEdseXBoIGdseXBo
QXQodW5zaWduZWQgaW5kZXgpIGNvbnN0CkBAIC0xMjAsNjcgKzEyMCw2NyBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBtX2dseXBoc1tpbmRleF07CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElO
RSBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjKSBj
b25zdAorICAgIEFMV0FZU19JTkxJTkUgY29uc3QgRm9udCogZm9udEZvckNoYXJhY3RlcihVQ2hh
cjMyIGMpIGNvbnN0CiAgICAgewogICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGluZGV4Rm9yQ2hh
cmFjdGVyKGMpOwogICAgICAgICBpZiAoaGFzUGVyR2x5cGhGb250RGF0YSgpKQogICAgICAgICAg
ICAgcmV0dXJuIG1fcGVyR2x5cGhGb250RGF0YVtpbmRleF07Ci0gICAgICAgIHJldHVybiBtX2ds
eXBoc1tpbmRleF0gPyBtX2ZvbnREYXRhRm9yQWxsR2x5cGhzIDogMDsKKyAgICAgICAgcmV0dXJu
IG1fZ2x5cGhzW2luZGV4XSA/IG1fZm9udEZvckFsbEdseXBocyA6IDA7CiAgICAgfQogCi0gICAg
dm9pZCBzZXRHbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjLCBHbHlwaCBnLCBjb25zdCBT
aW1wbGVGb250RGF0YSogZikKKyAgICB2b2lkIHNldEdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hh
cjMyIGMsIEdseXBoIGcsIGNvbnN0IEZvbnQqIGYpCiAgICAgewogICAgICAgICBzZXRHbHlwaERh
dGFGb3JJbmRleChpbmRleEZvckNoYXJhY3RlcihjKSwgZywgZik7CiAgICAgfQogCi0gICAgdm9p
ZCBzZXRHbHlwaERhdGFGb3JJbmRleCh1bnNpZ25lZCBpbmRleCwgR2x5cGggZ2x5cGgsIGNvbnN0
IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSkKKyAgICB2b2lkIHNldEdseXBoRGF0YUZvckluZGV4
KHVuc2lnbmVkIGluZGV4LCBHbHlwaCBnbHlwaCwgY29uc3QgRm9udCogZm9udCkKICAgICB7CiAg
ICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGluZGV4IDwgc2l6ZSk7CiAg
ICAgICAgIEFTU0VSVCghbV9pc0ltbXV0YWJsZSk7CiAgICAgICAgIAogICAgICAgICBtX2dseXBo
c1tpbmRleF0gPSBnbHlwaDsKIAotICAgICAgICAvLyBHbHlwaFBhZ2UgZ2V0dGVycyB3aWxsIGFs
d2F5cyByZXR1cm4gYSBudWxsIFNpbXBsZUZvbnREYXRhKiBmb3IgZ2x5cGggIzAgaWYgdGhlcmUn
cyBubyBwZXItZ2x5cGggZm9udCBhcnJheS4KKyAgICAgICAgLy8gR2x5cGhQYWdlIGdldHRlcnMg
d2lsbCBhbHdheXMgcmV0dXJuIGEgbnVsbCBGb250KiBmb3IgZ2x5cGggIzAgaWYgdGhlcmUncyBu
byBwZXItZ2x5cGggZm9udCBhcnJheS4KICAgICAgICAgaWYgKGhhc1BlckdseXBoRm9udERhdGEo
KSkgewotICAgICAgICAgICAgbV9wZXJHbHlwaEZvbnREYXRhW2luZGV4XSA9IGdseXBoID8gZm9u
dERhdGEgOiAwOworICAgICAgICAgICAgbV9wZXJHbHlwaEZvbnREYXRhW2luZGV4XSA9IGdseXBo
ID8gZm9udCA6IDA7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICAv
LyBBIHNpbmdsZS1mb250IEdseXBoUGFnZSBhbHJlYWR5IGFzc2lnbmVkIG1fZm9udERhdGFGb3JB
bGxHbHlwaHMgaW4gdGhlIGNvbnN0cnVjdG9yLgotICAgICAgICBBU1NFUlQoIWdseXBoIHx8IGZv
bnREYXRhID09IG1fZm9udERhdGFGb3JBbGxHbHlwaHMpOworICAgICAgICAvLyBBIHNpbmdsZS1m
b250IEdseXBoUGFnZSBhbHJlYWR5IGFzc2lnbmVkIG1fZm9udEZvckFsbEdseXBocyBpbiB0aGUg
Y29uc3RydWN0b3IuCisgICAgICAgIEFTU0VSVCghZ2x5cGggfHwgZm9udCA9PSBtX2ZvbnRGb3JB
bGxHbHlwaHMpOwogICAgIH0KIAogICAgIHZvaWQgc2V0R2x5cGhEYXRhRm9ySW5kZXgodW5zaWdu
ZWQgaW5kZXgsIGNvbnN0IEdseXBoRGF0YSYgZ2x5cGhEYXRhKQogICAgIHsKLSAgICAgICAgc2V0
R2x5cGhEYXRhRm9ySW5kZXgoaW5kZXgsIGdseXBoRGF0YS5nbHlwaCwgZ2x5cGhEYXRhLmZvbnRE
YXRhKTsKKyAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgoaW5kZXgsIGdseXBoRGF0YS5nbHlw
aCwgZ2x5cGhEYXRhLmZvbnQpOwogICAgIH0KIAogICAgIC8vIEltcGxlbWVudGVkIGJ5IHRoZSBw
bGF0Zm9ybS4KLSAgICBib29sIGZpbGwodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgs
IFVDaGFyKiBjaGFyYWN0ZXJCdWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgU2lt
cGxlRm9udERhdGEqKTsKKyAgICBib29sIGZpbGwodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgsIFVDaGFyKiBjaGFyYWN0ZXJCdWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29u
c3QgRm9udCopOwogI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIHN0YXRpYyBib29sIG1heVVzZU1p
eGVkRm9udERhdGFXaGVuRmlsbGluZyhjb25zdCBVQ2hhciogY2hhcmFjdGVyQnVmZmVyLCB1bnNp
Z25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IFNpbXBsZUZvbnREYXRhKik7CisgICAgc3RhdGljIGJv
b2wgbWF5VXNlTWl4ZWRGb250c1doZW5GaWxsaW5nKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJCdWZm
ZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgRm9udCopOwogI2Vsc2UKLSAgICBzdGF0
aWMgYm9vbCBtYXlVc2VNaXhlZEZvbnREYXRhV2hlbkZpbGxpbmcoY29uc3QgVUNoYXIqLCB1bnNp
Z25lZCwgY29uc3QgU2ltcGxlRm9udERhdGEqKSB7IHJldHVybiBmYWxzZTsgfQorICAgIHN0YXRp
YyBib29sIG1heVVzZU1peGVkRm9udHNXaGVuRmlsbGluZyhjb25zdCBVQ2hhciosIHVuc2lnbmVk
LCBjb25zdCBGb250KikgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCiBwcml2YXRlOgotICAg
IGV4cGxpY2l0IEdseXBoUGFnZShjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGFGb3JBbGxH
bHlwaHMpCi0gICAgICAgIDogbV9mb250RGF0YUZvckFsbEdseXBocyhmb250RGF0YUZvckFsbEds
eXBocykKKyAgICBleHBsaWNpdCBHbHlwaFBhZ2UoY29uc3QgRm9udCogZm9udEZvckFsbEdseXBo
cykKKyAgICAgICAgOiBtX2ZvbnRGb3JBbGxHbHlwaHMoZm9udEZvckFsbEdseXBocykKICAgICB7
CiAgICAgICAgIG1lbXNldChtX2dseXBocywgMCwgc2l6ZW9mKG1fZ2x5cGhzKSk7CiAgICAgICAg
IGlmIChoYXNQZXJHbHlwaEZvbnREYXRhKCkpCi0gICAgICAgICAgICBtZW1zZXQobV9wZXJHbHlw
aEZvbnREYXRhLCAwLCBzaXplb2YoU2ltcGxlRm9udERhdGEqKSAqIEdseXBoUGFnZTo6c2l6ZSk7
CisgICAgICAgICAgICBtZW1zZXQobV9wZXJHbHlwaEZvbnREYXRhLCAwLCBzaXplb2YoRm9udCop
ICogR2x5cGhQYWdlOjpzaXplKTsKICAgICAgICAgKytzX2NvdW50OwogICAgIH0KIAotICAgIGJv
b2wgaGFzUGVyR2x5cGhGb250RGF0YSgpIGNvbnN0IHsgcmV0dXJuICFtX2ZvbnREYXRhRm9yQWxs
R2x5cGhzOyB9CisgICAgYm9vbCBoYXNQZXJHbHlwaEZvbnREYXRhKCkgY29uc3QgeyByZXR1cm4g
IW1fZm9udEZvckFsbEdseXBoczsgfQogCi0gICAgY29uc3QgU2ltcGxlRm9udERhdGEqIG1fZm9u
dERhdGFGb3JBbGxHbHlwaHM7CisgICAgY29uc3QgRm9udCogbV9mb250Rm9yQWxsR2x5cGhzOwog
ICAgIEdseXBoIG1fZ2x5cGhzW3NpemVdOwogCiAgICAgYm9vbCBtX2lzSW1tdXRhYmxlIHsgZmFs
c2UgfTsKLSAgICAvLyBOT1RFOiBUaGlzIGFycmF5IGhhcyAoR2x5cGhQYWdlOjpzaXplKSBlbGVt
ZW50cyBpZiBtX2ZvbnREYXRhRm9yQWxsR2x5cGhzIGlzIG51bGwuCi0gICAgY29uc3QgU2ltcGxl
Rm9udERhdGEqIG1fcGVyR2x5cGhGb250RGF0YVswXTsKKyAgICAvLyBOT1RFOiBUaGlzIGFycmF5
IGhhcyAoR2x5cGhQYWdlOjpzaXplKSBlbGVtZW50cyBpZiBtX2ZvbnRGb3JBbGxHbHlwaHMgaXMg
bnVsbC4KKyAgICBjb25zdCBGb250KiBtX3BlckdseXBoRm9udERhdGFbMF07CiAKICAgICBzdGF0
aWMgdW5zaWduZWQgc19jb3VudDsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAJKHJldmlzaW9uIDE3ODg1NykK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ0OCwxMiArNDQ4LDEyIEBAIGZsb2F0IEdyYXBoaWNzQ29udGV4
dDo6ZHJhd1RleHQoY29uc3QgRm8KIH0KICNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0dseXBocyhjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29u
c3QgU2ltcGxlRm9udERhdGEmIGZvbnREYXRhLCBjb25zdCBHbHlwaEJ1ZmZlciYgYnVmZmVyLCBp
bnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0dseXBocyhjb25zdCBGb250Q2FzY2FkZSYgZm9udENhc2NhZGUs
IGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBidWZmZXIsIGludCBmcm9tLCBp
bnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKIHsKICAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBmb250LmRyYXdHbHlwaHModGhp
cywgJmZvbnREYXRhLCBidWZmZXIsIGZyb20sIG51bUdseXBocywgcG9pbnQpOworICAgIGZvbnRD
YXNjYWRlLmRyYXdHbHlwaHModGhpcywgJmZvbnQsIGJ1ZmZlciwgZnJvbSwgbnVtR2x5cGhzLCBw
b2ludCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RW1waGFzaXNNYXJrcyhjb25z
dCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJp
bmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0LmgJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogI2lmIFVTRShXSU5HREkpCiAgICAgY2xhc3MgU2hhcmVkQml0
bWFwOwotICAgIGNsYXNzIFNpbXBsZUZvbnREYXRhOworICAgIGNsYXNzIEZvbnQ7CiAgICAgY2xh
c3MgR2x5cGhCdWZmZXI7CiAjZW5kaWYKIApAQCAtMzYwLDcgKzM2MCw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICNlbHNlCiAgICAgICAgIGZsb2F0IGRyYXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRl
JiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGludCB0
byA9IC0xKTsKICNlbmRpZgotICAgICAgICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udENhc2Nh
ZGUmLCBjb25zdCBTaW1wbGVGb250RGF0YSYsIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20s
IGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICAgICAgdm9pZCBkcmF3R2x5
cGhzKGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyJiwg
aW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmKTsKICAgICAgICAgdm9p
ZCBkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mICwg
Y29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20gPSAw
LCBpbnQgdG8gPSAtMSk7CiAjaWYgIVBMQVRGT1JNKElPUykKICAgICAgICAgdm9pZCBkcmF3Qmlk
aVRleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2lu
dCYsIEZvbnRDYXNjYWRlOjpDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPSBGb250Q2FzY2FkZTo6
RG9Ob3RQYWludElmRm9udE5vdFJlYWR5KTsKQEAgLTQ3OSw3ICs0NzksNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIEFmZmluZVRyYW5zZm9ybSYgYWZmaW5lVHJhbnNmb3JtKCk7CiAg
ICAgICAgIHZvaWQgcmVzZXRBZmZpbmVUcmFuc2Zvcm0oKTsKICAgICAgICAgdm9pZCBmaWxsUmVj
dChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBHcmFkaWVudCopOwotICAgICAgICB2b2lkIGRyYXdU
ZXh0KGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwgY29uc3QgR2x5cGhCdWZmZXImIGds
eXBoQnVmZmVyLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQpOworICAgICAgICB2b2lkIGRyYXdUZXh0KGNvbnN0IEZvbnQqLCBjb25zdCBHbHlwaEJ1ZmZl
ciYsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50Jik7CiAgICAgICAg
IHZvaWQgZHJhd0ZyYW1lQ29udHJvbChjb25zdCBJbnRSZWN0JiByZWN0LCB1bnNpZ25lZCB0eXBl
LCB1bnNpZ25lZCBzdGF0ZSk7CiAgICAgICAgIHZvaWQgZHJhd0ZvY3VzUmVjdChjb25zdCBJbnRS
ZWN0JiByZWN0KTsKICAgICAgICAgdm9pZCBwYWludFRleHRGaWVsZChjb25zdCBJbnRSZWN0JiBy
ZWN0LCB1bnNpZ25lZCBzdGF0ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9TaW1wbGVGb250RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNDU2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIw
MDgsIDIwMTAsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICog
My4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1l
cyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJT
aW1wbGVGb250RGF0YS5oIgotCi0jaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAm
JiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID4gMTA4MCkKLSNpbmNsdWRlICJDb3Jl
VGV4dFNQSS5oIgotI2VuZGlmCi0jaW5jbHVkZSAiRm9udENhY2hlLmgiCi0jaW5jbHVkZSAiRm9u
dENhc2NhZGUuaCIKLSNpbmNsdWRlICJPcGVuVHlwZU1hdGhEYXRhLmgiCi0jaW5jbHVkZSA8d3Rm
L01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLQotI2lmIEVO
QUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKLSNpbmNsdWRlICJPcGVuVHlwZVZlcnRpY2FsRGF0YS5o
IgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdW5zaWduZWQgR2x5cGhQYWdlOjpz
X2NvdW50ID0gMDsKLQotY29uc3QgZmxvYXQgc21hbGxDYXBzRm9udFNpemVNdWx0aXBsaWVyID0g
MC43ZjsKLWNvbnN0IGZsb2F0IGVtcGhhc2lzTWFya0ZvbnRTaXplTXVsdGlwbGllciA9IDAuNWY7
Ci0KLVNpbXBsZUZvbnREYXRhOjpTaW1wbGVGb250RGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRh
JiBwbGF0Zm9ybURhdGEsIGJvb2wgaXNDdXN0b21Gb250LCBib29sIGlzTG9hZGluZywgYm9vbCBp
c1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKQotICAgIDogbV9tYXhDaGFyV2lkdGgoLTEpCi0gICAg
LCBtX2F2Z0NoYXJXaWR0aCgtMSkKLSAgICAsIG1fcGxhdGZvcm1EYXRhKHBsYXRmb3JtRGF0YSkK
LSAgICAsIG1fdHJlYXRBc0ZpeGVkUGl0Y2goZmFsc2UpCi0gICAgLCBtX2lzQ3VzdG9tRm9udChp
c0N1c3RvbUZvbnQpCi0gICAgLCBtX2lzTG9hZGluZyhpc0xvYWRpbmcpCi0gICAgLCBtX2lzVGV4
dE9yaWVudGF0aW9uRmFsbGJhY2soaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaykKLSAgICAsIG1f
aXNCcm9rZW5JZGVvZ3JhcGhGYWxsYmFjayhmYWxzZSkKLSAgICAsIG1fbWF0aERhdGEobnVsbHB0
cikKLSNpZiBFTkFCTEUoT1BFTlRZUEVfVkVSVElDQUwpCi0gICAgLCBtX3ZlcnRpY2FsRGF0YSgw
KQotI2VuZGlmCi0gICAgLCBtX2hhc1ZlcnRpY2FsR2x5cGhzKGZhbHNlKQotewotICAgIHBsYXRm
b3JtSW5pdCgpOwotICAgIHBsYXRmb3JtR2x5cGhJbml0KCk7Ci0gICAgcGxhdGZvcm1DaGFyV2lk
dGhJbml0KCk7Ci0jaWYgRU5BQkxFKE9QRU5UWVBFX1ZFUlRJQ0FMKQotICAgIGlmIChwbGF0Zm9y
bURhdGEub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCAmJiAhaXNUZXh0T3JpZW50YXRpb25GYWxs
YmFjaykgewotICAgICAgICBtX3ZlcnRpY2FsRGF0YSA9IHBsYXRmb3JtRGF0YS52ZXJ0aWNhbERh
dGEoKTsKLSAgICAgICAgbV9oYXNWZXJ0aWNhbEdseXBocyA9IG1fdmVydGljYWxEYXRhLmdldCgp
ICYmIG1fdmVydGljYWxEYXRhLT5oYXNWZXJ0aWNhbE1ldHJpY3MoKTsKLSAgICB9Ci0jZW5kaWYK
LX0KLQotU2ltcGxlRm9udERhdGE6OlNpbXBsZUZvbnREYXRhKHN0ZDo6dW5pcXVlX3B0cjxTVkdE
YXRhPiBzdmdEYXRhLCBmbG9hdCBmb250U2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5
bnRoZXRpY0l0YWxpYykKLSAgICA6IG1fcGxhdGZvcm1EYXRhKEZvbnRQbGF0Zm9ybURhdGEoZm9u
dFNpemUsIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYykpCi0gICAgLCBtX3N2Z0RhdGEo
V1RGOjptb3ZlKHN2Z0RhdGEpKQotICAgICwgbV90cmVhdEFzRml4ZWRQaXRjaChmYWxzZSkKLSAg
ICAsIG1faXNDdXN0b21Gb250KHRydWUpCi0gICAgLCBtX2lzTG9hZGluZyhmYWxzZSkKLSAgICAs
IG1faXNUZXh0T3JpZW50YXRpb25GYWxsYmFjayhmYWxzZSkKLSAgICAsIG1faXNCcm9rZW5JZGVv
Z3JhcGhGYWxsYmFjayhmYWxzZSkKLSAgICAsIG1fbWF0aERhdGEobnVsbHB0cikKLSNpZiBFTkFC
TEUoT1BFTlRZUEVfVkVSVElDQUwpCi0gICAgLCBtX3ZlcnRpY2FsRGF0YSgwKQotI2VuZGlmCi0g
ICAgLCBtX2hhc1ZlcnRpY2FsR2x5cGhzKGZhbHNlKQotI2lmIFBMQVRGT1JNKElPUykKLSAgICAs
IG1fc2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKGZhbHNlKQotI2VuZGlmCi17Ci0gICAgbV9zdmdE
YXRhLT5pbml0aWFsaXplRm9udERhdGEodGhpcywgZm9udFNpemUpOwotfQotCi0vLyBFc3RpbWF0
ZXMgb2YgYXZnQ2hhcldpZHRoIGFuZCBtYXhDaGFyV2lkdGggZm9yIHBsYXRmb3JtcyB0aGF0IGRv
bid0IHN1cHBvcnQgYWNjZXNzaW5nIHRoZXNlIHZhbHVlcyBmcm9tIHRoZSBmb250Lgotdm9pZCBT
aW1wbGVGb250RGF0YTo6aW5pdENoYXJXaWR0aHMoKQotewotICAgIGF1dG8qIGdseXBoUGFnZVpl
cm8gPSBnbHlwaFBhZ2UoMCk7Ci0KLSAgICAvLyBUcmVhdCB0aGUgd2lkdGggb2YgYSAnMCcgYXMg
dGhlIGF2Z0NoYXJXaWR0aC4KLSAgICBpZiAobV9hdmdDaGFyV2lkdGggPD0gMC5mICYmIGdseXBo
UGFnZVplcm8pIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IFVDaGFyMzIgZGlnaXRaZXJvQ2hhciA9
ICcwJzsKLSAgICAgICAgR2x5cGggZGlnaXRaZXJvR2x5cGggPSBnbHlwaFBhZ2VaZXJvLT5nbHlw
aERhdGFGb3JDaGFyYWN0ZXIoZGlnaXRaZXJvQ2hhcikuZ2x5cGg7Ci0gICAgICAgIGlmIChkaWdp
dFplcm9HbHlwaCkKLSAgICAgICAgICAgIG1fYXZnQ2hhcldpZHRoID0gd2lkdGhGb3JHbHlwaChk
aWdpdFplcm9HbHlwaCk7Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgY2FuJ3QgcmV0cmlldmUgdGhl
IHdpZHRoIG9mIGEgJzAnLCBmYWxsIGJhY2sgdG8gdGhlIHggaGVpZ2h0LgotICAgIGlmIChtX2F2
Z0NoYXJXaWR0aCA8PSAwLmYpCi0gICAgICAgIG1fYXZnQ2hhcldpZHRoID0gbV9mb250TWV0cmlj
cy54SGVpZ2h0KCk7Ci0KLSAgICBpZiAobV9tYXhDaGFyV2lkdGggPD0gMC5mKQotICAgICAgICBt
X21heENoYXJXaWR0aCA9IHN0ZDo6bWF4KG1fYXZnQ2hhcldpZHRoLCBtX2ZvbnRNZXRyaWNzLmZs
b2F0QXNjZW50KCkpOwotfQotCi12b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUdseXBoSW5p
dCgpCi17Ci0gICAgYXV0byogZ2x5cGhQYWdlWmVybyA9IGdseXBoUGFnZSgwKTsKLSAgICBpZiAo
IWdseXBoUGFnZVplcm8pIHsKLSAgICAgICAgbV9zcGFjZUdseXBoID0gMDsKLSAgICAgICAgbV9z
cGFjZVdpZHRoID0gMDsKLSAgICAgICAgbV96ZXJvR2x5cGggPSAwOwotICAgICAgICBtX2FkanVz
dGVkU3BhY2VXaWR0aCA9IDA7Ci0gICAgICAgIGRldGVybWluZVBpdGNoKCk7Ci0gICAgICAgIG1f
emVyb1dpZHRoU3BhY2VHbHlwaCA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAv
LyBBc2sgZm9yIHRoZSBnbHlwaCBmb3IgMCB0byBhdm9pZCBwYWdpbmcgaW4gWkVSTyBXSURUSCBT
UEFDRS4gQ29udHJvbCBjaGFyYWN0ZXJzLCBpbmNsdWRpbmcgMCwKLSAgICAvLyBhcmUgbWFwcGVk
IHRvIHRoZSBaRVJPIFdJRFRIIFNQQUNFIGdseXBoLgotICAgIG1femVyb1dpZHRoU3BhY2VHbHlw
aCA9IGdseXBoUGFnZVplcm8tPmdseXBoRGF0YUZvckNoYXJhY3RlcigwKS5nbHlwaDsKLQotICAg
IC8vIE5hc3R5IGhhY2sgdG8gZGV0ZXJtaW5lIGlmIHdlIHNob3VsZCByb3VuZCBvciBjZWlsIHNw
YWNlIHdpZHRocy4KLSAgICAvLyBJZiB0aGUgZm9udCBpcyBtb25vc3BhY2Ugb3IgZmFrZSBtb25v
c3BhY2Ugd2UgY2VpbCB0byBlbnN1cmUgdGhhdCAKLSAgICAvLyBldmVyeSBjaGFyYWN0ZXIgYW5k
IHRoZSBzcGFjZSBhcmUgdGhlIHNhbWUgd2lkdGguICBPdGhlcndpc2Ugd2Ugcm91bmQuCi0gICAg
bV9zcGFjZUdseXBoID0gZ2x5cGhQYWdlWmVyby0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKCcgJyku
Z2x5cGg7Ci0gICAgZmxvYXQgd2lkdGggPSB3aWR0aEZvckdseXBoKG1fc3BhY2VHbHlwaCk7Ci0g
ICAgbV9zcGFjZVdpZHRoID0gd2lkdGg7Ci0gICAgbV96ZXJvR2x5cGggPSBnbHlwaFBhZ2VaZXJv
LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoJzAnKS5nbHlwaDsKLSAgICBtX2ZvbnRNZXRyaWNzLnNl
dFplcm9XaWR0aCh3aWR0aEZvckdseXBoKG1femVyb0dseXBoKSk7Ci0gICAgZGV0ZXJtaW5lUGl0
Y2goKTsKLSAgICBtX2FkanVzdGVkU3BhY2VXaWR0aCA9IG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPyBj
ZWlsZih3aWR0aCkgOiByb3VuZGYod2lkdGgpOwotCi0gICAgLy8gRm9yY2UgdGhlIGdseXBoIGZv
ciBaRVJPIFdJRFRIIFNQQUNFIHRvIGhhdmUgemVybyB3aWR0aCwgdW5sZXNzIGl0IGlzIHNoYXJl
ZCB3aXRoIFNQQUNFLgotICAgIC8vIEhlbHZldGljYSBpcyBhbiBleGFtcGxlIG9mIGEgbm9uLXpl
cm8gd2lkdGggWkVSTyBXSURUSCBTUEFDRSBnbHlwaC4KLSAgICAvLyBTZWUgPGh0dHA6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMTc4PiBhbmQgU2ltcGxlRm9udERhdGE6Omlz
WmVyb1dpZHRoU3BhY2VHbHlwaCgpCi0gICAgaWYgKG1femVyb1dpZHRoU3BhY2VHbHlwaCA9PSBt
X3NwYWNlR2x5cGgpCi0gICAgICAgIG1femVyb1dpZHRoU3BhY2VHbHlwaCA9IDA7Ci19Ci0KLVNp
bXBsZUZvbnREYXRhOjp+U2ltcGxlRm9udERhdGEoKQotewotICAgIHJlbW92ZUZyb21TeXN0ZW1G
YWxsYmFja0NhY2hlKCk7Ci19Ci0KLXN0YXRpYyBib29sIGZpbGxHbHlwaFBhZ2UoR2x5cGhQYWdl
JiBwYWdlVG9GaWxsLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1
ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERh
dGEpCi17Ci0jaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICBpZiAoYXV0byogc3ZnRGF0YSA9IGZv
bnREYXRhLT5zdmdEYXRhKCkpCi0gICAgICAgIHJldHVybiBzdmdEYXRhLT5maWxsU1ZHR2x5cGhQ
YWdlKCZwYWdlVG9GaWxsLCBvZmZzZXQsIGxlbmd0aCwgYnVmZmVyLCBidWZmZXJMZW5ndGgsIGZv
bnREYXRhKTsKLSNlbmRpZgotICAgIGJvb2wgaGFzR2x5cGhzID0gcGFnZVRvRmlsbC5maWxsKG9m
ZnNldCwgbGVuZ3RoLCBidWZmZXIsIGJ1ZmZlckxlbmd0aCwgZm9udERhdGEpOwotI2lmIEVOQUJM
RShPUEVOVFlQRV9WRVJUSUNBTCkKLSAgICBpZiAoaGFzR2x5cGhzICYmIGZvbnREYXRhLT52ZXJ0
aWNhbERhdGEoKSkKLSAgICAgICAgZm9udERhdGEtPnZlcnRpY2FsRGF0YSgpLT5zdWJzdGl0dXRl
V2l0aFZlcnRpY2FsR2x5cGhzKGZvbnREYXRhLCAmcGFnZVRvRmlsbCwgb2Zmc2V0LCBsZW5ndGgp
OwotI2VuZGlmCi0gICAgcmV0dXJuIGhhc0dseXBoczsKLX0KLQotc3RhdGljIFJlZlB0cjxHbHlw
aFBhZ2U+IGNyZWF0ZUFuZEZpbGxHbHlwaFBhZ2UodW5zaWduZWQgcGFnZU51bWJlciwgY29uc3Qg
U2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQotewotI2lmIFBMQVRGT1JNKElPUykKLSAgICAvLyBG
SVhNRTogVGltZXMgTmV3IFJvbWFuIGNvbnRhaW5zIEFyYWJpYyBnbHlwaHMsIGJ1dCBDb3JlIFRl
eHQgZG9lc24ndCBrbm93IGhvdyB0byBzaGFwZSB0aGVtLiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzk4
MjM5NzU+LgotICAgIC8vIE9uY2Ugd2UgaGF2ZSB0aGUgZml4IGZvciA8cmRhcjovL3Byb2JsZW0v
OTgyMzk3NT4gdGhlbiByZW1vdmUgdGhpcyBjb2RlIHRvZ2V0aGVyIHdpdGggU2ltcGxlRm9udERh
dGE6OnNob3VsZE5vdEJlVXNlZEZvckFyYWJpYygpCi0gICAgLy8gaW4gPHJkYXI6Ly9wcm9ibGVt
LzEyMDk2ODM1Pi4KLSAgICBpZiAocGFnZU51bWJlciA9PSA2ICYmIGZvbnREYXRhLT5zaG91bGRO
b3RCZVVzZWRGb3JBcmFiaWMoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0jZW5kaWYKLQot
ICAgIHVuc2lnbmVkIHN0YXJ0ID0gcGFnZU51bWJlciAqIEdseXBoUGFnZTo6c2l6ZTsKLSAgICBV
Q2hhciBidWZmZXJbR2x5cGhQYWdlOjpzaXplICogMiArIDJdOwotICAgIHVuc2lnbmVkIGJ1ZmZl
ckxlbmd0aDsKLSAgICAvLyBGaWxsIGluIGEgYnVmZmVyIHdpdGggdGhlIGVudGlyZSAicGFnZSIg
b2YgY2hhcmFjdGVycyB0aGF0IHdlIHdhbnQgdG8gbG9vayB1cCBnbHlwaHMgZm9yLgotICAgIGlm
IChVX0lTX0JNUChzdGFydCkpIHsKLSAgICAgICAgYnVmZmVyTGVuZ3RoID0gR2x5cGhQYWdlOjpz
aXplOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR2x5cGhQYWdlOjpzaXplOyBp
KyspCi0gICAgICAgICAgICBidWZmZXJbaV0gPSBzdGFydCArIGk7Ci0KLSAgICAgICAgaWYgKHN0
YXJ0ID09IDApIHsKLSAgICAgICAgICAgIC8vIENvbnRyb2wgY2hhcmFjdGVycyBtdXN0IG5vdCBy
ZW5kZXIgYXQgYWxsLgotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDB4MjA7
ICsraSkKLSAgICAgICAgICAgICAgICBidWZmZXJbaV0gPSB6ZXJvV2lkdGhTcGFjZTsKLSAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDB4N0Y7IGkgPCAweEEwOyBpKyspCi0gICAgICAgICAg
ICAgICAgYnVmZmVyW2ldID0gemVyb1dpZHRoU3BhY2U7Ci0gICAgICAgICAgICBidWZmZXJbc29m
dEh5cGhlbl0gPSB6ZXJvV2lkdGhTcGFjZTsKLQotICAgICAgICAgICAgLy8gXG4sIFx0LCBhbmQg
bm9uYnJlYWtpbmcgc3BhY2UgbXVzdCByZW5kZXIgYXMgYSBzcGFjZS4KLSAgICAgICAgICAgIGJ1
ZmZlclsoaW50KSdcbiddID0gJyAnOwotICAgICAgICAgICAgYnVmZmVyWyhpbnQpJ1x0J10gPSAn
ICc7Ci0gICAgICAgICAgICBidWZmZXJbbm9CcmVha1NwYWNlXSA9ICcgJzsKLSAgICAgICAgfSBl
bHNlIGlmIChzdGFydCA9PSAobGVmdFRvUmlnaHRNYXJrICYgfihHbHlwaFBhZ2U6OnNpemUgLSAx
KSkpIHsKLSAgICAgICAgICAgIC8vIExSTSwgUkxNLCBMUkUsIFJMRSwgWldOSiwgWldKLCBhbmQg
UERGIG11c3Qgbm90IHJlbmRlciBhdCBhbGwuCi0gICAgICAgICAgICBidWZmZXJbbGVmdFRvUmln
aHRNYXJrIC0gc3RhcnRdID0gemVyb1dpZHRoU3BhY2U7Ci0gICAgICAgICAgICBidWZmZXJbcmln
aHRUb0xlZnRNYXJrIC0gc3RhcnRdID0gemVyb1dpZHRoU3BhY2U7Ci0gICAgICAgICAgICBidWZm
ZXJbbGVmdFRvUmlnaHRFbWJlZCAtIHN0YXJ0XSA9IHplcm9XaWR0aFNwYWNlOwotICAgICAgICAg
ICAgYnVmZmVyW3JpZ2h0VG9MZWZ0RW1iZWQgLSBzdGFydF0gPSB6ZXJvV2lkdGhTcGFjZTsKLSAg
ICAgICAgICAgIGJ1ZmZlcltsZWZ0VG9SaWdodE92ZXJyaWRlIC0gc3RhcnRdID0gemVyb1dpZHRo
U3BhY2U7Ci0gICAgICAgICAgICBidWZmZXJbcmlnaHRUb0xlZnRPdmVycmlkZSAtIHN0YXJ0XSA9
IHplcm9XaWR0aFNwYWNlOwotICAgICAgICAgICAgYnVmZmVyW3plcm9XaWR0aE5vbkpvaW5lciAt
IHN0YXJ0XSA9IHplcm9XaWR0aFNwYWNlOwotICAgICAgICAgICAgYnVmZmVyW3plcm9XaWR0aEpv
aW5lciAtIHN0YXJ0XSA9IHplcm9XaWR0aFNwYWNlOwotICAgICAgICAgICAgYnVmZmVyW3BvcERp
cmVjdGlvbmFsRm9ybWF0dGluZyAtIHN0YXJ0XSA9IHplcm9XaWR0aFNwYWNlOwotICAgICAgICB9
IGVsc2UgaWYgKHN0YXJ0ID09IChvYmplY3RSZXBsYWNlbWVudENoYXJhY3RlciAmIH4oR2x5cGhQ
YWdlOjpzaXplIC0gMSkpKSB7Ci0gICAgICAgICAgICAvLyBPYmplY3QgcmVwbGFjZW1lbnQgY2hh
cmFjdGVyIG11c3Qgbm90IHJlbmRlciBhdCBhbGwuCi0gICAgICAgICAgICBidWZmZXJbb2JqZWN0
UmVwbGFjZW1lbnRDaGFyYWN0ZXIgLSBzdGFydF0gPSB6ZXJvV2lkdGhTcGFjZTsKLSAgICAgICAg
fSBlbHNlIGlmIChzdGFydCA9PSAoemVyb1dpZHRoTm9CcmVha1NwYWNlICYgfihHbHlwaFBhZ2U6
OnNpemUgLSAxKSkpIHsKLSAgICAgICAgICAgIC8vIFpXTkJTL0JPTSBtdXN0IG5vdCByZW5kZXIg
YXQgYWxsLgotICAgICAgICAgICAgYnVmZmVyW3plcm9XaWR0aE5vQnJlYWtTcGFjZSAtIHN0YXJ0
XSA9IHplcm9XaWR0aFNwYWNlOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgYnVm
ZmVyTGVuZ3RoID0gR2x5cGhQYWdlOjpzaXplICogMjsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IEdseXBoUGFnZTo6c2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICBpbnQgYyA9IGkg
KyBzdGFydDsKLSAgICAgICAgICAgIGJ1ZmZlcltpICogMl0gPSBVMTZfTEVBRChjKTsKLSAgICAg
ICAgICAgIGJ1ZmZlcltpICogMiArIDFdID0gVTE2X1RSQUlMKGMpOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgLy8gTm93IHRoYXQgd2UgaGF2ZSBhIGJ1ZmZlciBmdWxsIG9mIGNoYXJhY3RlcnMs
IHdlIHdhbnQgdG8gZ2V0IGJhY2sgYW4gYXJyYXkKLSAgICAvLyBvZiBnbHlwaCBpbmRpY2VzLiBU
aGlzIHBhcnQgaW52b2x2ZXMgY2FsbGluZyBpbnRvIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYwotICAg
IC8vIHJvdXRpbmUgb2Ygb3VyIGdseXBoIG1hcCBmb3IgYWN0dWFsbHkgZmlsbGluZyBpbiB0aGUg
cGFnZSB3aXRoIHRoZSBnbHlwaHMuCi0gICAgLy8gU3VjY2VzcyBpcyBub3QgZ3VhcmFudGVlZC4g
Rm9yIGV4YW1wbGUsIFRpbWVzIGZhaWxzIHRvIGZpbGwgcGFnZSAyNjAsIGdpdmluZyBnbHlwaCBk
YXRhCi0gICAgLy8gZm9yIG9ubHkgMTI4IG91dCBvZiAyNTYgY2hhcmFjdGVycy4KLSAgICBSZWZQ
dHI8R2x5cGhQYWdlPiBnbHlwaFBhZ2U7Ci0gICAgaWYgKEdseXBoUGFnZTo6bWF5VXNlTWl4ZWRG
b250RGF0YVdoZW5GaWxsaW5nKGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCBmb250RGF0YSkpCi0gICAg
ICAgIGdseXBoUGFnZSA9IEdseXBoUGFnZTo6Y3JlYXRlRm9yTWl4ZWRGb250RGF0YSgpOwotICAg
IGVsc2UKLSAgICAgICAgZ2x5cGhQYWdlID0gR2x5cGhQYWdlOjpjcmVhdGVGb3JTaW5nbGVGb250
RGF0YShmb250RGF0YSk7Ci0KLSAgICBib29sIGhhdmVHbHlwaHMgPSBmaWxsR2x5cGhQYWdlKCpn
bHlwaFBhZ2UsIDAsIEdseXBoUGFnZTo6c2l6ZSwgYnVmZmVyLCBidWZmZXJMZW5ndGgsIGZvbnRE
YXRhKTsKLSAgICBpZiAoIWhhdmVHbHlwaHMpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0g
ICAgZ2x5cGhQYWdlLT5zZXRJbW11dGFibGUoKTsKLSAgICByZXR1cm4gZ2x5cGhQYWdlOwotfQot
Ci1jb25zdCBHbHlwaFBhZ2UqIFNpbXBsZUZvbnREYXRhOjpnbHlwaFBhZ2UodW5zaWduZWQgcGFn
ZU51bWJlcikgY29uc3QKLXsKLSAgICBpZiAocGFnZU51bWJlciA9PSAwKSB7Ci0gICAgICAgIGlm
ICghbV9nbHlwaFBhZ2VaZXJvKQotICAgICAgICAgICAgbV9nbHlwaFBhZ2VaZXJvID0gY3JlYXRl
QW5kRmlsbEdseXBoUGFnZSgwLCB0aGlzKTsKLSAgICAgICAgcmV0dXJuIG1fZ2x5cGhQYWdlWmVy
by5nZXQoKTsKLSAgICB9Ci0gICAgYXV0byBhZGRSZXN1bHQgPSBtX2dseXBoUGFnZXMuYWRkKHBh
Z2VOdW1iZXIsIG51bGxwdHIpOwotICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAg
ICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGNyZWF0ZUFuZEZpbGxHbHlwaFBhZ2UocGFn
ZU51bWJlciwgdGhpcyk7Ci0KLSAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5n
ZXQoKTsKLX0KLQotR2x5cGggU2ltcGxlRm9udERhdGE6OmdseXBoRm9yQ2hhcmFjdGVyKFVDaGFy
MzIgY2hhcmFjdGVyKSBjb25zdAotewotICAgIGF1dG8qIHBhZ2UgPSBnbHlwaFBhZ2UoY2hhcmFj
dGVyIC8gR2x5cGhQYWdlOjpzaXplKTsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVybiAw
OwotICAgIHJldHVybiBwYWdlLT5nbHlwaEF0KGNoYXJhY3RlciAlIEdseXBoUGFnZTo6c2l6ZSk7
Ci19Ci0KLUdseXBoRGF0YSBTaW1wbGVGb250RGF0YTo6Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVD
aGFyMzIgY2hhcmFjdGVyKSBjb25zdAotewotICAgIGF1dG8qIHBhZ2UgPSBnbHlwaFBhZ2UoY2hh
cmFjdGVyIC8gR2x5cGhQYWdlOjpzaXplKTsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVy
biBHbHlwaERhdGEoKTsKLSAgICByZXR1cm4gcGFnZS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNo
YXJhY3Rlcik7Ci19Ci0KLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRh
Ojp2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250RGF0YSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFt
X2Rlcml2ZWRGb250RGF0YSkKLSAgICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBzdGQ6Om1ha2Vf
dW5pcXVlPERlcml2ZWRGb250RGF0YT4oaXNDdXN0b21Gb250KCkpOwotICAgIGlmICghbV9kZXJp
dmVkRm9udERhdGEtPnZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbikgewotICAgICAgICBGb250UGxh
dGZvcm1EYXRhIHZlcnRpY2FsUmlnaHRQbGF0Zm9ybURhdGEobV9wbGF0Zm9ybURhdGEpOwotICAg
ICAgICB2ZXJ0aWNhbFJpZ2h0UGxhdGZvcm1EYXRhLnNldE9yaWVudGF0aW9uKEhvcml6b250YWwp
OwotICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+dmVydGljYWxSaWdodE9yaWVudGF0aW9uID0g
Y3JlYXRlKHZlcnRpY2FsUmlnaHRQbGF0Zm9ybURhdGEsIGlzQ3VzdG9tRm9udCgpLCBmYWxzZSwg
dHJ1ZSk7Ci0gICAgfQotICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+dmVydGljYWxSaWdo
dE9yaWVudGF0aW9uOwotfQotCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250
RGF0YTo6dXByaWdodE9yaWVudGF0aW9uRm9udERhdGEoKSBjb25zdAotewotICAgIGlmICghbV9k
ZXJpdmVkRm9udERhdGEpCi0gICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gc3RkOjptYWtlX3Vu
aXF1ZTxEZXJpdmVkRm9udERhdGE+KGlzQ3VzdG9tRm9udCgpKTsKLSAgICBpZiAoIW1fZGVyaXZl
ZEZvbnREYXRhLT51cHJpZ2h0T3JpZW50YXRpb24pCi0gICAgICAgIG1fZGVyaXZlZEZvbnREYXRh
LT51cHJpZ2h0T3JpZW50YXRpb24gPSBjcmVhdGUobV9wbGF0Zm9ybURhdGEsIGlzQ3VzdG9tRm9u
dCgpLCBmYWxzZSwgdHJ1ZSk7Ci0gICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT51cHJpZ2h0
T3JpZW50YXRpb247Ci19Ci0KLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnRE
YXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlw
dGlvbikgY29uc3QKLXsKLSAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQotICAgICAgICBtX2Rl
cml2ZWRGb250RGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8RGVyaXZlZEZvbnREYXRhPihpc0N1c3Rv
bUZvbnQoKSk7Ci0gICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzKQotICAgICAg
ICBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9u
dERlc2NyaXB0aW9uLCBzbWFsbENhcHNGb250U2l6ZU11bHRpcGxpZXIpOwotCi0gICAgcmV0dXJu
IG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHM7Ci19Ci0KLVBhc3NSZWZQdHI8U2ltcGxlRm9u
dERhdGE+IFNpbXBsZUZvbnREYXRhOjplbXBoYXNpc01hcmtGb250RGF0YShjb25zdCBGb250RGVz
Y3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKLXsKLSAgICBpZiAoIW1fZGVyaXZlZEZv
bnREYXRhKQotICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8RGVy
aXZlZEZvbnREYXRhPihpc0N1c3RvbUZvbnQoKSk7Ci0gICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0
YS0+ZW1waGFzaXNNYXJrKQotICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJr
ID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9uLCBlbXBoYXNpc01hcmtGb250
U2l6ZU11bHRpcGxpZXIpOwotCi0gICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNp
c01hcms7Ci19Ci0KLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpi
cm9rZW5JZGVvZ3JhcGhGb250RGF0YSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2Rlcml2ZWRGb250
RGF0YSkKLSAgICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPERlcml2
ZWRGb250RGF0YT4oaXNDdXN0b21Gb250KCkpOwotICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEt
PmJyb2tlbklkZW9ncmFwaCkgewotICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+YnJva2VuSWRl
b2dyYXBoID0gY3JlYXRlKG1fcGxhdGZvcm1EYXRhLCBpc0N1c3RvbUZvbnQoKSwgZmFsc2UpOwot
ICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+YnJva2VuSWRlb2dyYXBoLT5tX2lzQnJva2VuSWRl
b2dyYXBoRmFsbGJhY2sgPSB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gbV9kZXJpdmVkRm9udERh
dGEtPmJyb2tlbklkZW9ncmFwaDsKLX0KLQotUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2lt
cGxlRm9udERhdGE6Om5vblN5bnRoZXRpY0l0YWxpY0ZvbnREYXRhKCkgY29uc3QKLXsKLSAgICBp
ZiAoIW1fZGVyaXZlZEZvbnREYXRhKQotICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IHN0ZDo6
bWFrZV91bmlxdWU8RGVyaXZlZEZvbnREYXRhPihpc0N1c3RvbUZvbnQoKSk7Ci0gICAgaWYgKCFt
X2Rlcml2ZWRGb250RGF0YS0+bm9uU3ludGhldGljSXRhbGljKSB7Ci0gICAgICAgIEZvbnRQbGF0
Zm9ybURhdGEgbm9uU3ludGhldGljSXRhbGljRm9udFBsYXRmb3JtRGF0YShtX3BsYXRmb3JtRGF0
YSk7Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgICAgIG5vblN5bnRoZXRpY0l0YWxpY0ZvbnRQ
bGF0Zm9ybURhdGEubV9zeW50aGV0aWNPYmxpcXVlID0gZmFsc2U7Ci0jZW5kaWYKLSAgICAgICAg
bV9kZXJpdmVkRm9udERhdGEtPm5vblN5bnRoZXRpY0l0YWxpYyA9IGNyZWF0ZShub25TeW50aGV0
aWNJdGFsaWNGb250UGxhdGZvcm1EYXRhLCBpc0N1c3RvbUZvbnQoKSk7Ci0gICAgfQotICAgIHJl
dHVybiBtX2Rlcml2ZWRGb250RGF0YS0+bm9uU3ludGhldGljSXRhbGljOwotfQotCi0jaWZuZGVm
IE5ERUJVRwotU3RyaW5nIFNpbXBsZUZvbnREYXRhOjpkZXNjcmlwdGlvbigpIGNvbnN0Ci17Ci0g
ICAgaWYgKGlzU1ZHRm9udCgpKQotICAgICAgICByZXR1cm4gIltTVkcgZm9udF0iOwotICAgIGlm
IChpc0N1c3RvbUZvbnQoKSkKLSAgICAgICAgcmV0dXJuICJbY3VzdG9tIGZvbnRdIjsKLQotICAg
IHJldHVybiBwbGF0Zm9ybURhdGEoKS5kZXNjcmlwdGlvbigpOwotfQotI2VuZGlmCi0KLWNvbnN0
IE9wZW5UeXBlTWF0aERhdGEqIFNpbXBsZUZvbnREYXRhOjptYXRoRGF0YSgpIGNvbnN0Ci17Ci0g
ICAgaWYgKG1faXNMb2FkaW5nKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIW1f
bWF0aERhdGEpIHsKLSAgICAgICAgbV9tYXRoRGF0YSA9IE9wZW5UeXBlTWF0aERhdGE6OmNyZWF0
ZShtX3BsYXRmb3JtRGF0YSk7Ci0gICAgICAgIGlmICghbV9tYXRoRGF0YS0+aGFzTWF0aERhdGEo
KSkKLSAgICAgICAgICAgIG1fbWF0aERhdGEuY2xlYXIoKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1f
bWF0aERhdGEuZ2V0KCk7Ci19Ci0KLVNpbXBsZUZvbnREYXRhOjpEZXJpdmVkRm9udERhdGE6On5E
ZXJpdmVkRm9udERhdGEoKQotewotfQotCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1w
bGVGb250RGF0YTo6Y3JlYXRlU2NhbGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBm
b250RGVzY3JpcHRpb24sIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAotewotICAgIGlmIChpc1NW
R0ZvbnQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gcGxhdGZvcm1D
cmVhdGVTY2FsZWRGb250RGF0YShmb250RGVzY3JpcHRpb24sIHNjYWxlRmFjdG9yKTsKLX0KLQot
Ym9vbCBTaW1wbGVGb250RGF0YTo6YXBwbHlUcmFuc2Zvcm1zKEdseXBoQnVmZmVyR2x5cGgqIGds
eXBocywgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgc2l6ZV90IGdseXBoQ291bnQsIFR5
cGVzZXR0aW5nRmVhdHVyZXMgdHlwZXNldHRpbmdGZWF0dXJlcykgY29uc3QKLXsKLSAgICAvLyBX
ZSBuZWVkIHRvIGhhbmRsZSB0cmFuc2Zvcm1zIG9uIFNWRyBmb250cyBpbnRlcm5hbGx5LCBzaW5j
ZSB0aGV5IGFyZSByZW5kZXJlZCBpbnRlcm5hbGx5LgotICAgIEFTU0VSVCghaXNTVkdGb250KCkp
OwotI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJT
SU9OX01JTl9SRVFVSVJFRCA+IDEwODApCi0gICAgQ1RGb250VHJhbnNmb3JtT3B0aW9ucyBvcHRp
b25zID0gKHR5cGVzZXR0aW5nRmVhdHVyZXMgJiBLZXJuaW5nID8ga0NURm9udFRyYW5zZm9ybUFw
cGx5UG9zaXRpb25pbmcgOiAwKSB8ICh0eXBlc2V0dGluZ0ZlYXR1cmVzICYgTGlnYXR1cmVzID8g
a0NURm9udFRyYW5zZm9ybUFwcGx5U2hhcGluZyA6IDApOwotICAgIHJldHVybiBDVEZvbnRUcmFu
c2Zvcm1HbHlwaHMobV9wbGF0Zm9ybURhdGEuY3RGb250KCksIGdseXBocywgcmVpbnRlcnByZXRf
Y2FzdDxDR1NpemUqPihhZHZhbmNlcyksIGdseXBoQ291bnQsIG9wdGlvbnMpOwotI2Vsc2UKLSAg
ICBVTlVTRURfUEFSQU0oZ2x5cGhzKTsKLSAgICBVTlVTRURfUEFSQU0oYWR2YW5jZXMpOwotICAg
IFVOVVNFRF9QQVJBTShnbHlwaENvdW50KTsKLSAgICBVTlVTRURfUEFSQU0odHlwZXNldHRpbmdG
ZWF0dXJlcyk7Ci0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLS8vIEZvbnREYXRhcyBh
cmUgbm90IHJlZmNvdW50ZWQgdG8gYXZvaWQgY3ljbGVzLgotdHlwZWRlZiBIYXNoTWFwPHN0ZDo6
cGFpcjxVQ2hhcjMyLCB1bnNpZ25lZD4sIFNpbXBsZUZvbnREYXRhKj4gQ2hhcmFjdGVyRmFsbGJh
Y2tNYXA7Ci10eXBlZGVmIEhhc2hNYXA8Y29uc3QgU2ltcGxlRm9udERhdGEqLCBDaGFyYWN0ZXJG
YWxsYmFja01hcD4gU3lzdGVtRmFsbGJhY2tDYWNoZTsKLQotc3RhdGljIFN5c3RlbUZhbGxiYWNr
Q2FjaGUmIHN5c3RlbUZhbGxiYWNrQ2FjaGUoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxTeXN0ZW1GYWxsYmFja0NhY2hlPiBtYXA7Ci0gICAgcmV0dXJuIG1hcC5nZXQoKTsKLX0KLQot
UmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6c3lzdGVtRmFsbGJhY2tGb250
RGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGNoYXJhY3RlciwgY29uc3QgRm9udERlc2NyaXB0aW9u
JiBkZXNjcmlwdGlvbiwgYm9vbCBpc0ZvclBsYXRmb3JtRm9udCkgY29uc3QKLXsKLSAgICBhdXRv
IGZvbnRBZGRSZXN1bHQgPSBzeXN0ZW1GYWxsYmFja0NhY2hlKCkuYWRkKHRoaXMsIENoYXJhY3Rl
ckZhbGxiYWNrTWFwKCkpOwotCi0gICAgYXV0byBrZXkgPSBzdGQ6Om1ha2VfcGFpcihjaGFyYWN0
ZXIsIGlzRm9yUGxhdGZvcm1Gb250KTsKLSAgICBhdXRvIGNoYXJhY3RlckFkZFJlc3VsdCA9IGZv
bnRBZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFkZChrZXksIG51bGxwdHIpOwotCi0gICAgU2lt
cGxlRm9udERhdGEqJiBmYWxsYmFja0ZvbnREYXRhID0gY2hhcmFjdGVyQWRkUmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZTsKLQotICAgIGlmICghZmFsbGJhY2tGb250RGF0YSkgewotICAgICAgICBVQ2hh
ciBjb2RlVW5pdHNbMl07Ci0gICAgICAgIGludCBjb2RlVW5pdHNMZW5ndGg7Ci0gICAgICAgIGlm
IChVX0lTX0JNUChjaGFyYWN0ZXIpKSB7Ci0gICAgICAgICAgICBjb2RlVW5pdHNbMF0gPSBGb250
Q2FzY2FkZTo6bm9ybWFsaXplU3BhY2VzKGNoYXJhY3Rlcik7Ci0gICAgICAgICAgICBjb2RlVW5p
dHNMZW5ndGggPSAxOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29kZVVuaXRzWzBd
ID0gVTE2X0xFQUQoY2hhcmFjdGVyKTsKLSAgICAgICAgICAgIGNvZGVVbml0c1sxXSA9IFUxNl9U
UkFJTChjaGFyYWN0ZXIpOwotICAgICAgICAgICAgY29kZVVuaXRzTGVuZ3RoID0gMjsKLSAgICAg
ICAgfQotCi0gICAgICAgIGZhbGxiYWNrRm9udERhdGEgPSBmb250Q2FjaGUoKS5zeXN0ZW1GYWxs
YmFja0ZvckNoYXJhY3RlcnMoZGVzY3JpcHRpb24sIHRoaXMsIGlzRm9yUGxhdGZvcm1Gb250LCBj
b2RlVW5pdHMsIGNvZGVVbml0c0xlbmd0aCkuZ2V0KCk7Ci0gICAgICAgIGlmIChmYWxsYmFja0Zv
bnREYXRhKQotICAgICAgICAgICAgZmFsbGJhY2tGb250RGF0YS0+bV9pc1VzZWRJblN5c3RlbUZh
bGxiYWNrQ2FjaGUgPSB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxsYmFja0ZvbnREYXRh
OwotfQotCi12b2lkIFNpbXBsZUZvbnREYXRhOjpyZW1vdmVGcm9tU3lzdGVtRmFsbGJhY2tDYWNo
ZSgpCi17Ci0gICAgc3lzdGVtRmFsbGJhY2tDYWNoZSgpLnJlbW92ZSh0aGlzKTsKLQotICAgIGlm
ICghbV9pc1VzZWRJblN5c3RlbUZhbGxiYWNrQ2FjaGUpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGZvciAoYXV0byYgY2hhcmFjdGVyTWFwIDogc3lzdGVtRmFsbGJhY2tDYWNoZSgpLnZhbHVlcygp
KSB7Ci0gICAgICAgIFZlY3RvcjxzdGQ6OnBhaXI8VUNoYXIzMiwgdW5zaWduZWQ+LCA1MTI+IHRv
UmVtb3ZlOwotICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogY2hhcmFjdGVyTWFwKSB7Ci0gICAg
ICAgICAgICBpZiAoZW50cnkudmFsdWUgPT0gdGhpcykKLSAgICAgICAgICAgICAgICB0b1JlbW92
ZS5hcHBlbmQoZW50cnkua2V5KTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKGF1dG8mIGtleSA6
IHRvUmVtb3ZlKQotICAgICAgICAgICAgY2hhcmFjdGVyTWFwLnJlbW92ZShrZXkpOwotICAgIH0K
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCShyZXZpc2lvbiAxNzg4NTcpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDM2OSArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIGludGVybmFsIGZvbnQgaW1wbGVtZW50YXRpb24uCi0gKgotICogQ29weXJpZ2h0IChDKSAy
MDA2LCAyMDA4LCAyMDEwLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAwNy0yMDA4IFRvcmNoIE1vYmlsZSwgSW5jLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBT
aW1wbGVGb250RGF0YV9oCi0jZGVmaW5lIFNpbXBsZUZvbnREYXRhX2gKLQotI2luY2x1ZGUgIkZv
bnRCYXNlbGluZS5oIgotI2luY2x1ZGUgIkZvbnRNZXRyaWNzLmgiCi0jaW5jbHVkZSAiRm9udFBs
YXRmb3JtRGF0YS5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkdseXBoQnVm
ZmVyLmgiCi0jaW5jbHVkZSAiR2x5cGhNZXRyaWNzTWFwLmgiCi0jaW5jbHVkZSAiR2x5cGhQYWdl
LmgiCi0jaW5jbHVkZSAiT3BlblR5cGVNYXRoRGF0YS5oIgotI2lmIEVOQUJMRShPUEVOVFlQRV9W
RVJUSUNBTCkKLSNpbmNsdWRlICJPcGVuVHlwZVZlcnRpY2FsRGF0YS5oIgotI2VuZGlmCi0jaW5j
bHVkZSAiVHlwZXNldHRpbmdGZWF0dXJlcy5oIgotI2luY2x1ZGUgPHd0Zi9UeXBlQ2FzdHMuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0KLSNpZiBQTEFURk9STShDT0NPQSkK
LSNpbmNsdWRlICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCi0jaW5jbHVkZSA8d3RmL1JldGFp
blB0ci5oPgotI2VuZGlmCi0KLSNpZiBQTEFURk9STShXSU4pCi0jaW5jbHVkZSA8dXNwMTAuaD4K
LSNlbmRpZgotCi0jaWYgVVNFKENBSVJPKQotI2luY2x1ZGUgPGNhaXJvLmg+Ci0jZW5kaWYKLQot
I2lmIFVTRShDRykKLSNpbmNsdWRlIDxXZWJDb3JlL0NvcmVHcmFwaGljc1NQSS5oPgotI2VuZGlm
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgR2x5cGhQYWdlOwotY2xhc3MgRm9udERl
c2NyaXB0aW9uOwotY2xhc3MgU2hhcmVkQnVmZmVyOwotc3RydWN0IEdseXBoRGF0YTsKLXN0cnVj
dCBXaWR0aEl0ZXJhdG9yOwotCi1lbnVtIEZvbnREYXRhVmFyaWFudCB7IEF1dG9WYXJpYW50LCBO
b3JtYWxWYXJpYW50LCBTbWFsbENhcHNWYXJpYW50LCBFbXBoYXNpc01hcmtWYXJpYW50LCBCcm9r
ZW5JZGVvZ3JhcGhWYXJpYW50IH07Ci1lbnVtIFBpdGNoIHsgVW5rbm93blBpdGNoLCBGaXhlZFBp
dGNoLCBWYXJpYWJsZVBpdGNoIH07Ci0KLWNsYXNzIFNpbXBsZUZvbnREYXRhIDogcHVibGljIFJl
ZkNvdW50ZWQ8U2ltcGxlRm9udERhdGE+IHsKLXB1YmxpYzoKLSAgICBjbGFzcyBTVkdEYXRhIHsK
LSAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgcHVibGljOgotICAgICAgICB2
aXJ0dWFsIH5TVkdEYXRhKCkgeyB9Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVG
b250RGF0YShTaW1wbGVGb250RGF0YSosIGZsb2F0IGZvbnRTaXplKSA9IDA7Ci0gICAgICAgIHZp
cnR1YWwgZmxvYXQgd2lkdGhGb3JTVkdHbHlwaChHbHlwaCwgZmxvYXQgZm9udFNpemUpIGNvbnN0
ID0gMDsKLSAgICAgICAgdmlydHVhbCBib29sIGZpbGxTVkdHbHlwaFBhZ2UoR2x5cGhQYWdlKiwg
dW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIsIHVuc2lnbmVk
IGJ1ZmZlckxlbmd0aCwgY29uc3QgU2ltcGxlRm9udERhdGEqKSBjb25zdCA9IDA7Ci0gICAgfTsK
LQotICAgIC8vIFVzZWQgdG8gY3JlYXRlIHBsYXRmb3JtIGZvbnRzLgotICAgIHN0YXRpYyBSZWY8
U2ltcGxlRm9udERhdGE+IGNyZWF0ZShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURh
dGEsIGJvb2wgaXNDdXN0b21Gb250ID0gZmFsc2UsIGJvb2wgaXNMb2FkaW5nID0gZmFsc2UsIGJv
b2wgaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjayA9IGZhbHNlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgU2ltcGxlRm9udERhdGEocGxhdGZvcm1EYXRhLCBpc0N1c3RvbUZv
bnQsIGlzTG9hZGluZywgaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaykpOwotICAgIH0KLQotICAg
IC8vIFVzZWQgdG8gY3JlYXRlIFNWRyBGb250cy4KLSAgICBzdGF0aWMgUmVmPFNpbXBsZUZvbnRE
YXRhPiBjcmVhdGUoc3RkOjp1bmlxdWVfcHRyPFNWR0RhdGE+IHN2Z0RhdGEsIGZsb2F0IGZvbnRT
aXplLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2ltcGxlRm9udERhdGEoV1RGOjptb3ZlKHN2Z0Rh
dGEpLCBmb250U2l6ZSwgc3ludGhldGljQm9sZCwgc3ludGhldGljSXRhbGljKSk7Ci0gICAgfQot
Ci0gICAgflNpbXBsZUZvbnREYXRhKCk7Ci0KLSAgICBzdGF0aWMgY29uc3QgU2ltcGxlRm9udERh
dGEqIHN5c3RlbUZhbGxiYWNrKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBTaW1w
bGVGb250RGF0YSo+KC0xKTsgfQotCi0gICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZv
cm1EYXRhKCkgY29uc3QgeyByZXR1cm4gbV9wbGF0Zm9ybURhdGE7IH0KLSAgICBjb25zdCBPcGVu
VHlwZU1hdGhEYXRhKiBtYXRoRGF0YSgpIGNvbnN0OwotI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJU
SUNBTCkKLSAgICBjb25zdCBPcGVuVHlwZVZlcnRpY2FsRGF0YSogdmVydGljYWxEYXRhKCkgY29u
c3QgeyByZXR1cm4gbV92ZXJ0aWNhbERhdGEuZ2V0KCk7IH0KLSNlbmRpZgotCi0gICAgUGFzc1Jl
ZlB0cjxTaW1wbGVGb250RGF0YT4gc21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0
aW9uJikgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gZW1waGFzaXNNYXJr
Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJikgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxT
aW1wbGVGb250RGF0YT4gYnJva2VuSWRlb2dyYXBoRm9udERhdGEoKSBjb25zdDsKLSAgICBQYXNz
UmVmUHRyPFNpbXBsZUZvbnREYXRhPiBub25TeW50aGV0aWNJdGFsaWNGb250RGF0YSgpIGNvbnN0
OwotCi0gICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gdmFyaWFudEZvbnREYXRhKGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIEZvbnREYXRhVmFyaWFudCB2YXJpYW50KSBj
b25zdAotICAgIHsKLSAgICAgICAgc3dpdGNoICh2YXJpYW50KSB7Ci0gICAgICAgIGNhc2UgU21h
bGxDYXBzVmFyaWFudDoKLSAgICAgICAgICAgIHJldHVybiBzbWFsbENhcHNGb250RGF0YShkZXNj
cmlwdGlvbik7Ci0gICAgICAgIGNhc2UgRW1waGFzaXNNYXJrVmFyaWFudDoKLSAgICAgICAgICAg
IHJldHVybiBlbXBoYXNpc01hcmtGb250RGF0YShkZXNjcmlwdGlvbik7Ci0gICAgICAgIGNhc2Ug
QnJva2VuSWRlb2dyYXBoVmFyaWFudDoKLSAgICAgICAgICAgIHJldHVybiBicm9rZW5JZGVvZ3Jh
cGhGb250RGF0YSgpOwotICAgICAgICBjYXNlIEF1dG9WYXJpYW50OgotICAgICAgICBjYXNlIE5v
cm1hbFZhcmlhbnQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8U2ltcGxlRm9udERh
dGEqPih0aGlzKTsKLSAgICB9Ci0KLSAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiB2ZXJ0
aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250RGF0YSgpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8U2lt
cGxlRm9udERhdGE+IHVwcmlnaHRPcmllbnRhdGlvbkZvbnREYXRhKCkgY29uc3Q7Ci0KLSAgICBi
b29sIGhhc1ZlcnRpY2FsR2x5cGhzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNWZXJ0aWNhbEdseXBo
czsgfQotICAgIGJvb2wgaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaygpIGNvbnN0IHsgcmV0dXJu
IG1faXNUZXh0T3JpZW50YXRpb25GYWxsYmFjazsgfQotCi0gICAgRm9udE1ldHJpY3MmIGZvbnRN
ZXRyaWNzKCkgeyByZXR1cm4gbV9mb250TWV0cmljczsgfQotICAgIGNvbnN0IEZvbnRNZXRyaWNz
JiBmb250TWV0cmljcygpIGNvbnN0IHsgcmV0dXJuIG1fZm9udE1ldHJpY3M7IH0KLSAgICBmbG9h
dCBzaXplUGVyVW5pdCgpIGNvbnN0IHsgcmV0dXJuIHBsYXRmb3JtRGF0YSgpLnNpemUoKSAvIChm
b250TWV0cmljcygpLnVuaXRzUGVyRW0oKSA/IGZvbnRNZXRyaWNzKCkudW5pdHNQZXJFbSgpIDog
MSk7IH0KLQotICAgIGZsb2F0IG1heENoYXJXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4Q2hh
cldpZHRoOyB9Ci0gICAgdm9pZCBzZXRNYXhDaGFyV2lkdGgoZmxvYXQgbWF4Q2hhcldpZHRoKSB7
IG1fbWF4Q2hhcldpZHRoID0gbWF4Q2hhcldpZHRoOyB9Ci0KLSAgICBmbG9hdCBhdmdDaGFyV2lk
dGgoKSBjb25zdCB7IHJldHVybiBtX2F2Z0NoYXJXaWR0aDsgfQotICAgIHZvaWQgc2V0QXZnQ2hh
cldpZHRoKGZsb2F0IGF2Z0NoYXJXaWR0aCkgeyBtX2F2Z0NoYXJXaWR0aCA9IGF2Z0NoYXJXaWR0
aDsgfQotCi0gICAgRmxvYXRSZWN0IGJvdW5kc0ZvckdseXBoKEdseXBoKSBjb25zdDsKLSAgICBm
bG9hdCB3aWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdDsKLSAgICBGbG9hdFJlY3QgcGxh
dGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCkgY29uc3Q7Ci0gICAgZmxvYXQgcGxhdGZvcm1XaWR0
aEZvckdseXBoKEdseXBoKSBjb25zdDsKLQotICAgIGZsb2F0IHNwYWNlV2lkdGgoKSBjb25zdCB7
IHJldHVybiBtX3NwYWNlV2lkdGg7IH0KLSAgICBmbG9hdCBhZGp1c3RlZFNwYWNlV2lkdGgoKSBj
b25zdCB7IHJldHVybiBtX2FkanVzdGVkU3BhY2VXaWR0aDsgfQotICAgIHZvaWQgc2V0U3BhY2VX
aWR0aHMoZmxvYXQgc3BhY2VXaWR0aCkKLSAgICB7Ci0gICAgICAgIG1fc3BhY2VXaWR0aCA9IHNw
YWNlV2lkdGg7Ci0gICAgICAgIG1fYWRqdXN0ZWRTcGFjZVdpZHRoID0gc3BhY2VXaWR0aDsKLSAg
ICB9Ci0KLSNpZiBVU0UoQ0cpIHx8IFVTRShDQUlSTykKLSAgICBmbG9hdCBzeW50aGV0aWNCb2xk
T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9zeW50aGV0aWNCb2xkT2Zmc2V0OyB9Ci0jZW5kaWYK
LQotICAgIEdseXBoIHNwYWNlR2x5cGgoKSBjb25zdCB7IHJldHVybiBtX3NwYWNlR2x5cGg7IH0K
LSAgICB2b2lkIHNldFNwYWNlR2x5cGgoR2x5cGggc3BhY2VHbHlwaCkgeyBtX3NwYWNlR2x5cGgg
PSBzcGFjZUdseXBoOyB9Ci0gICAgR2x5cGggemVyb1dpZHRoU3BhY2VHbHlwaCgpIGNvbnN0IHsg
cmV0dXJuIG1femVyb1dpZHRoU3BhY2VHbHlwaDsgfQotICAgIHZvaWQgc2V0WmVyb1dpZHRoU3Bh
Y2VHbHlwaChHbHlwaCBzcGFjZUdseXBoKSB7IG1femVyb1dpZHRoU3BhY2VHbHlwaCA9IHNwYWNl
R2x5cGg7IH0KLSAgICBib29sIGlzWmVyb1dpZHRoU3BhY2VHbHlwaChHbHlwaCBnbHlwaCkgY29u
c3QgeyByZXR1cm4gZ2x5cGggPT0gbV96ZXJvV2lkdGhTcGFjZUdseXBoICYmIGdseXBoOyB9Ci0g
ICAgR2x5cGggemVyb0dseXBoKCkgY29uc3QgeyByZXR1cm4gbV96ZXJvR2x5cGg7IH0KLSAgICB2
b2lkIHNldFplcm9HbHlwaChHbHlwaCB6ZXJvR2x5cGgpIHsgbV96ZXJvR2x5cGggPSB6ZXJvR2x5
cGg7IH0KLQotICAgIEdseXBoRGF0YSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMikgY29u
c3Q7Ci0gICAgR2x5cGggZ2x5cGhGb3JDaGFyYWN0ZXIoVUNoYXIzMikgY29uc3Q7Ci0KLSAgICBS
ZWZQdHI8U2ltcGxlRm9udERhdGE+IHN5c3RlbUZhbGxiYWNrRm9udERhdGFGb3JDaGFyYWN0ZXIo
VUNoYXIzMiwgY29uc3QgRm9udERlc2NyaXB0aW9uJiwgYm9vbCBpc0ZvclBsYXRmb3JtRm9udCkg
Y29uc3Q7Ci0KLSAgICBjb25zdCBHbHlwaFBhZ2UqIGdseXBoUGFnZSh1bnNpZ25lZCBwYWdlTnVt
YmVyKSBjb25zdDsKLQotICAgIHZvaWQgZGV0ZXJtaW5lUGl0Y2goKTsKLSAgICBQaXRjaCBwaXRj
aCgpIGNvbnN0IHsgcmV0dXJuIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPyBGaXhlZFBpdGNoIDogVmFy
aWFibGVQaXRjaDsgfQotCi0gICAgY29uc3QgU1ZHRGF0YSogc3ZnRGF0YSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3ZnRGF0YS5nZXQoKTsgfQotICAgIGJvb2wgaXNTVkdGb250KCkgY29uc3QgeyByZXR1
cm4gISFtX3N2Z0RhdGE7IH0KLQotICAgIGJvb2wgaXNDdXN0b21Gb250KCkgY29uc3QgeyByZXR1
cm4gbV9pc0N1c3RvbUZvbnQ7IH0KLSAgICBib29sIGlzTG9hZGluZygpIGNvbnN0IHsgcmV0dXJu
IG1faXNMb2FkaW5nOyB9Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgU3RyaW5nIGRlc2NyaXB0aW9u
KCkgY29uc3Q7Ci0jZW5kaWYKLQotI2lmIFVTRShBUFBLSVQpCi0gICAgY29uc3QgU2ltcGxlRm9u
dERhdGEqIGNvbXBvc2l0ZUZvbnRSZWZlcmVuY2VGb250RGF0YShOU0ZvbnQgKmtleSkgY29uc3Q7
Ci0gICAgTlNGb250KiBnZXROU0ZvbnQoKSBjb25zdCB7IHJldHVybiBtX3BsYXRmb3JtRGF0YS5u
c0ZvbnQoKTsgfQotI2VuZGlmCi0KLSNpZiBQTEFURk9STShJT1MpCi0gICAgQ1RGb250UmVmIGdl
dENURm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fcGxhdGZvcm1EYXRhLmZvbnQoKTsgfQotICAgIGJv
b2wgc2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGROb3RC
ZVVzZWRGb3JBcmFiaWM7IH07Ci0jZW5kaWYKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBDRkRp
Y3Rpb25hcnlSZWYgZ2V0Q0ZTdHJpbmdBdHRyaWJ1dGVzKFR5cGVzZXR0aW5nRmVhdHVyZXMsIEZv
bnRPcmllbnRhdGlvbikgY29uc3Q7Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBV
U0UoSEFSRkJVWlopCi0gICAgYm9vbCBjYW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5j
ZShjb25zdCBVQ2hhciosIHNpemVfdCkgY29uc3Q7Ci0jZW5kaWYKLQotICAgIGJvb2wgYXBwbHlU
cmFuc2Zvcm1zKEdseXBoQnVmZmVyR2x5cGgqLCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCBzaXplX3Qg
Z2x5cGhDb3VudCwgVHlwZXNldHRpbmdGZWF0dXJlcykgY29uc3Q7Ci0KLSNpZiBQTEFURk9STShX
SU4pCi0gICAgYm9vbCBpc1N5c3RlbUZvbnQoKSBjb25zdCB7IHJldHVybiBtX2lzU3lzdGVtRm9u
dDsgfQotICAgIFNDUklQVF9GT05UUFJPUEVSVElFUyogc2NyaXB0Rm9udFByb3BlcnRpZXMoKSBj
b25zdDsKLSAgICBTQ1JJUFRfQ0FDSEUqIHNjcmlwdENhY2hlKCkgY29uc3QgeyByZXR1cm4gJm1f
c2NyaXB0Q2FjaGU7IH0KLSAgICBzdGF0aWMgdm9pZCBzZXRTaG91bGRBcHBseU1hY0FzY2VudEhh
Y2soYm9vbCk7Ci0gICAgc3RhdGljIGJvb2wgc2hvdWxkQXBwbHlNYWNBc2NlbnRIYWNrKCk7Ci0g
ICAgc3RhdGljIGZsb2F0IGFzY2VudENvbnNpZGVyaW5nTWFjQXNjZW50SGFjayhjb25zdCBXQ0hB
UiosIGZsb2F0IGFzY2VudCwgZmxvYXQgZGVzY2VudCk7Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAg
ICBTaW1wbGVGb250RGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiwgYm9vbCBpc0N1c3RvbUZv
bnQgPSBmYWxzZSwgYm9vbCBpc0xvYWRpbmcgPSBmYWxzZSwgYm9vbCBpc1RleHRPcmllbnRhdGlv
bkZhbGxiYWNrID0gZmFsc2UpOwotCi0gICAgU2ltcGxlRm9udERhdGEoc3RkOjp1bmlxdWVfcHRy
PFNWR0RhdGE+LCBmbG9hdCBmb250U2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRo
ZXRpY0l0YWxpYyk7Ci0KLSAgICB2b2lkIHBsYXRmb3JtSW5pdCgpOwotICAgIHZvaWQgcGxhdGZv
cm1HbHlwaEluaXQoKTsKLSAgICB2b2lkIHBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpOwotICAgIHZv
aWQgcGxhdGZvcm1EZXN0cm95KCk7Ci0KLSAgICB2b2lkIGluaXRDaGFyV2lkdGhzKCk7Ci0KLSAg
ICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBjcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBG
b250RGVzY3JpcHRpb24mLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3Q7Ci0gICAgUGFzc1JlZlB0
cjxTaW1wbGVGb250RGF0YT4gcGxhdGZvcm1DcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGb250
RGVzY3JpcHRpb24mLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3Q7Ci0KLSAgICB2b2lkIHJlbW92
ZUZyb21TeXN0ZW1GYWxsYmFja0NhY2hlKCk7Ci0KLSNpZiBQTEFURk9STShXSU4pCi0gICAgdm9p
ZCBpbml0R0RJRm9udCgpOwotICAgIHZvaWQgcGxhdGZvcm1Db21tb25EZXN0cm95KCk7Ci0gICAg
RmxvYXRSZWN0IGJvdW5kc0ZvckdESUdseXBoKEdseXBoIGdseXBoKSBjb25zdDsKLSAgICBmbG9h
dCB3aWR0aEZvckdESUdseXBoKEdseXBoIGdseXBoKSBjb25zdDsKLSNlbmRpZgotCi0jaWYgVVNF
KENHKQotICAgIGJvb2wgY2FuVXNlRmFzdEdseXBoQWR2YW5jZUdldHRlcihHbHlwaCBnbHlwaCwg
Q0dTaXplJiBhZHZhbmNlLCBib29sJiBwb3B1bGF0ZWRBZHZhbmNlKSBjb25zdDsKLSAgICBDR0Zv
bnRSZW5kZXJpbmdTdHlsZSByZW5kZXJpbmdTdHlsZSgpIGNvbnN0OwotICAgIGJvb2wgYWR2YW5j
ZUZvckNvbG9yQml0bWFwRm9udChHbHlwaCwgQ0dTaXplJiByZXN1bHQpIGNvbnN0OyAvLyBSZXR1
cm5zIHRydWUgaWYgdGhlIGZvbnQgaXMgYSBjb2xvciBiaXRtYXAgZm9udAotI2VuZGlmCi0KLSAg
ICBGb250TWV0cmljcyBtX2ZvbnRNZXRyaWNzOwotICAgIGZsb2F0IG1fbWF4Q2hhcldpZHRoOwot
ICAgIGZsb2F0IG1fYXZnQ2hhcldpZHRoOwotCi0gICAgRm9udFBsYXRmb3JtRGF0YSBtX3BsYXRm
b3JtRGF0YTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U1ZHRGF0YT4gbV9zdmdEYXRhOwotCi0gICAg
bXV0YWJsZSBSZWZQdHI8R2x5cGhQYWdlPiBtX2dseXBoUGFnZVplcm87Ci0gICAgbXV0YWJsZSBI
YXNoTWFwPHVuc2lnbmVkLCBSZWZQdHI8R2x5cGhQYWdlPj4gbV9nbHlwaFBhZ2VzOwotICAgIG11
dGFibGUgc3RkOjp1bmlxdWVfcHRyPEdseXBoTWV0cmljc01hcDxGbG9hdFJlY3Q+PiBtX2dseXBo
VG9Cb3VuZHNNYXA7Ci0gICAgbXV0YWJsZSBHbHlwaE1ldHJpY3NNYXA8ZmxvYXQ+IG1fZ2x5cGhU
b1dpZHRoTWFwOwotCi0gICAgYm9vbCBtX3RyZWF0QXNGaXhlZFBpdGNoOwotICAgIGJvb2wgbV9p
c0N1c3RvbUZvbnQ7ICAvLyBXaGV0aGVyIG9yIG5vdCB3ZSBhcmUgY3VzdG9tIGZvbnQgbG9hZGVk
IHZpYSBAZm9udC1mYWNlCi0gICAgYm9vbCBtX2lzTG9hZGluZzsgLy8gV2hldGhlciBvciBub3Qg
dGhpcyBjdXN0b20gZm9udCBpcyBzdGlsbCBpbiB0aGUgYWN0IG9mIGxvYWRpbmcuCi0KLSAgICBi
b29sIG1faXNUZXh0T3JpZW50YXRpb25GYWxsYmFjazsKLSAgICBib29sIG1faXNCcm9rZW5JZGVv
Z3JhcGhGYWxsYmFjazsKLQotICAgIGJvb2wgbV9pc1VzZWRJblN5c3RlbUZhbGxiYWNrQ2FjaGUg
eyBmYWxzZSB9OwotCi0gICAgbXV0YWJsZSBSZWZQdHI8T3BlblR5cGVNYXRoRGF0YT4gbV9tYXRo
RGF0YTsKLSNpZiBFTkFCTEUoT1BFTlRZUEVfVkVSVElDQUwpCi0gICAgUmVmUHRyPE9wZW5UeXBl
VmVydGljYWxEYXRhPiBtX3ZlcnRpY2FsRGF0YTsKLSNlbmRpZgotICAgIGJvb2wgbV9oYXNWZXJ0
aWNhbEdseXBoczsKLQotICAgIEdseXBoIG1fc3BhY2VHbHlwaDsKLSAgICBmbG9hdCBtX3NwYWNl
V2lkdGg7Ci0gICAgR2x5cGggbV96ZXJvR2x5cGg7Ci0gICAgZmxvYXQgbV9hZGp1c3RlZFNwYWNl
V2lkdGg7Ci0KLSAgICBHbHlwaCBtX3plcm9XaWR0aFNwYWNlR2x5cGg7Ci0KLSAgICBzdHJ1Y3Qg
RGVyaXZlZEZvbnREYXRhIHsKLSAgICAgICAgZXhwbGljaXQgRGVyaXZlZEZvbnREYXRhKGJvb2wg
Y3VzdG9tKQotICAgICAgICAgICAgOiBmb3JDdXN0b21Gb250KGN1c3RvbSkKLSAgICAgICAgewot
ICAgICAgICB9Ci0gICAgICAgIH5EZXJpdmVkRm9udERhdGEoKTsKLQotICAgICAgICBib29sIGZv
ckN1c3RvbUZvbnQ7Ci0gICAgICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gc21hbGxDYXBzOwot
ICAgICAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IGVtcGhhc2lzTWFyazsKLSAgICAgICAgUmVm
UHRyPFNpbXBsZUZvbnREYXRhPiBicm9rZW5JZGVvZ3JhcGg7Ci0gICAgICAgIFJlZlB0cjxTaW1w
bGVGb250RGF0YT4gdmVydGljYWxSaWdodE9yaWVudGF0aW9uOwotICAgICAgICBSZWZQdHI8U2lt
cGxlRm9udERhdGE+IHVwcmlnaHRPcmllbnRhdGlvbjsKLSAgICAgICAgUmVmUHRyPFNpbXBsZUZv
bnREYXRhPiBub25TeW50aGV0aWNJdGFsaWM7Ci0jaWYgVVNFKEFQUEtJVCkKLSAgICAgICAgSGFz
aE1hcDxOU0ZvbnQqLCBSZWZQdHI8U2ltcGxlRm9udERhdGE+PiBjb21wb3NpdGVGb250UmVmZXJl
bmNlczsKLSNlbmRpZgotICAgIH07Ci0KLSAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxEZXJp
dmVkRm9udERhdGE+IG1fZGVyaXZlZEZvbnREYXRhOwotCi0jaWYgVVNFKENHKSB8fCBVU0UoQ0FJ
Uk8pCi0gICAgZmxvYXQgbV9zeW50aGV0aWNCb2xkT2Zmc2V0OwotI2VuZGlmCi0KLSNpZiBQTEFU
Rk9STShDT0NPQSkKLSAgICBtdXRhYmxlIEhhc2hNYXA8dW5zaWduZWQsIFJldGFpblB0cjxDRkRp
Y3Rpb25hcnlSZWY+PiBtX0NGU3RyaW5nQXR0cmlidXRlczsKLSNlbmRpZgotCi0jaWYgUExBVEZP
Uk0oQ09DT0EpIHx8IFVTRShIQVJGQlVaWikKLSAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxI
YXNoTWFwPFN0cmluZywgYm9vbD4+IG1fY29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2VTdXBwb3J0
OwotI2VuZGlmCi0KLSNpZiBQTEFURk9STShXSU4pCi0gICAgYm9vbCBtX2lzU3lzdGVtRm9udDsK
LSAgICBtdXRhYmxlIFNDUklQVF9DQUNIRSBtX3NjcmlwdENhY2hlOwotICAgIG11dGFibGUgU0NS
SVBUX0ZPTlRQUk9QRVJUSUVTKiBtX3NjcmlwdEZvbnRQcm9wZXJ0aWVzOwotI2VuZGlmCi0jaWYg
UExBVEZPUk0oSU9TKQotICAgIGJvb2wgbV9zaG91bGROb3RCZVVzZWRGb3JBcmFiaWM7Ci0jZW5k
aWYKLX07Ci0KLUFMV0FZU19JTkxJTkUgRmxvYXRSZWN0IFNpbXBsZUZvbnREYXRhOjpib3VuZHNG
b3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKLXsKLSAgICBpZiAoaXNaZXJvV2lkdGhTcGFjZUds
eXBoKGdseXBoKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwotCi0gICAgRmxvYXRSZWN0
IGJvdW5kczsKLSAgICBpZiAobV9nbHlwaFRvQm91bmRzTWFwKSB7Ci0gICAgICAgIGJvdW5kcyA9
IG1fZ2x5cGhUb0JvdW5kc01hcC0+bWV0cmljc0ZvckdseXBoKGdseXBoKTsKLSAgICAgICAgaWYg
KGJvdW5kcy53aWR0aCgpICE9IGNHbHlwaFNpemVVbmtub3duKQotICAgICAgICAgICAgcmV0dXJu
IGJvdW5kczsKLSAgICB9Ci0KLSAgICBib3VuZHMgPSBwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKGds
eXBoKTsKLSAgICBpZiAoIW1fZ2x5cGhUb0JvdW5kc01hcCkKLSAgICAgICAgbV9nbHlwaFRvQm91
bmRzTWFwID0gc3RkOjptYWtlX3VuaXF1ZTxHbHlwaE1ldHJpY3NNYXA8RmxvYXRSZWN0Pj4oKTsK
LSAgICBtX2dseXBoVG9Cb3VuZHNNYXAtPnNldE1ldHJpY3NGb3JHbHlwaChnbHlwaCwgYm91bmRz
KTsKLSAgICByZXR1cm4gYm91bmRzOwotfQotCi1BTFdBWVNfSU5MSU5FIGZsb2F0IFNpbXBsZUZv
bnREYXRhOjp3aWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAotewotICAgIGlmIChpc1pl
cm9XaWR0aFNwYWNlR2x5cGgoZ2x5cGgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGZsb2F0
IHdpZHRoID0gbV9nbHlwaFRvV2lkdGhNYXAubWV0cmljc0ZvckdseXBoKGdseXBoKTsKLSAgICBp
ZiAod2lkdGggIT0gY0dseXBoU2l6ZVVua25vd24pCi0gICAgICAgIHJldHVybiB3aWR0aDsKLQot
ICAgIGlmIChpc1NWR0ZvbnQoKSkKLSAgICAgICAgd2lkdGggPSBtX3N2Z0RhdGEtPndpZHRoRm9y
U1ZHR2x5cGgoZ2x5cGgsIG1fcGxhdGZvcm1EYXRhLnNpemUoKSk7Ci0jaWYgRU5BQkxFKE9QRU5U
WVBFX1ZFUlRJQ0FMKQotICAgIGVsc2UgaWYgKG1fdmVydGljYWxEYXRhKQotI2lmIFVTRShDRykg
fHwgVVNFKENBSVJPKQotICAgICAgICB3aWR0aCA9IG1fdmVydGljYWxEYXRhLT5hZHZhbmNlSGVp
Z2h0KHRoaXMsIGdseXBoKSArIG1fc3ludGhldGljQm9sZE9mZnNldDsKLSNlbHNlCi0gICAgICAg
IHdpZHRoID0gbV92ZXJ0aWNhbERhdGEtPmFkdmFuY2VIZWlnaHQodGhpcywgZ2x5cGgpOwotI2Vu
ZGlmCi0jZW5kaWYKLSAgICBlbHNlCi0gICAgICAgIHdpZHRoID0gcGxhdGZvcm1XaWR0aEZvckds
eXBoKGdseXBoKTsKLQotICAgIG1fZ2x5cGhUb1dpZHRoTWFwLnNldE1ldHJpY3NGb3JHbHlwaChn
bHlwaCwgd2lkdGgpOwotICAgIHJldHVybiB3aWR0aDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gU2ltcGxlRm9udERhdGFfaApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uaAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Niw3ICszNiw3IEBAIGNsYXNzIEZvbnRDYXNjYWRlOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0Owog
Y2xhc3MgR2x5cGhCdWZmZXI7CiBjbGFzcyBHbHlwaFRvUGF0aFRyYW5zbGF0b3I7Ci1jbGFzcyBT
aW1wbGVGb250RGF0YTsKK2NsYXNzIEZvbnQ7CiAKIHN0cnVjdCBHbHlwaERhdGE7CiBzdHJ1Y3Qg
V2lkdGhJdGVyYXRvcjsKQEAgLTE5OCwxMCArMTk4LDEwIEBAIHB1YmxpYzoKIAogI2lmIEVOQUJM
RShTVkdfRk9OVFMpCiAgICAgICAgIHZpcnR1YWwgR2x5cGhEYXRhIGdseXBoRGF0YUZvckNoYXJh
Y3Rlcihjb25zdCBGb250Q2FzY2FkZSYsIFdpZHRoSXRlcmF0b3ImLCBVQ2hhcjMyIGNoYXJhY3Rl
ciwgYm9vbCBtaXJyb3IsIGludCBjdXJyZW50Q2hhcmFjdGVyLCB1bnNpZ25lZCYgYWR2YW5jZUxl
bmd0aCwgU3RyaW5nJiBub3JtYWxpemVkU3BhY2VzU3RyaW5nQ2FjaGUpID0gMDsKLSAgICAgICAg
dmlydHVhbCB2b2lkIGRyYXdTVkdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgU2ltcGxl
Rm9udERhdGEqLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBmcm9tLCBpbnQgdG8sIGNvbnN0IEZs
b2F0UG9pbnQmKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkcmF3U1ZHR2x5cGhz
KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZvbnQqLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBm
cm9tLCBpbnQgdG8sIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1
YWwgZmxvYXQgZmxvYXRXaWR0aFVzaW5nU1ZHRm9udChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0
IFRleHRSdW4mLCBpbnQmIGNoYXJzQ29uc3VtZWQsIFN0cmluZyYgZ2x5cGhOYW1lKSBjb25zdCA9
IDA7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBhcHBseVNWR0tlcm5pbmcoY29uc3QgU2ltcGxlRm9u
dERhdGEqLCBXaWR0aEl0ZXJhdG9yJiwgR2x5cGhCdWZmZXIqLCBpbnQgZnJvbSkgY29uc3QgPSAw
OwotICAgICAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxHbHlwaFRvUGF0aFRyYW5zbGF0b3I+
IGNyZWF0ZUdseXBoVG9QYXRoVHJhbnNsYXRvcihjb25zdCBTaW1wbGVGb250RGF0YSYsIGNvbnN0
IFRleHRSdW4qLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBj
b25zdCBGbG9hdFBvaW50JikgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlT
VkdLZXJuaW5nKGNvbnN0IEZvbnQqLCBXaWR0aEl0ZXJhdG9yJiwgR2x5cGhCdWZmZXIqLCBpbnQg
ZnJvbSkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxHbHlwaFRv
UGF0aFRyYW5zbGF0b3I+IGNyZWF0ZUdseXBoVG9QYXRoVHJhbnNsYXRvcihjb25zdCBGb250Jiwg
Y29uc3QgVGV4dFJ1biosIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCBudW1HbHlw
aHMsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdCA9IDA7CiAjZW5kaWYKICAgICB9OwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9y
LmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvV2lkdGhJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDEwICsyMiwxMCBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldpZHRoSXRlcmF0b3IuaCIKIAorI2luY2x1
ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkdseXBoQnVm
ZmVyLmgiCiAjaW5jbHVkZSAiTGF0aW4xVGV4dEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiU2ltcGxl
Rm9udERhdGEuaCIKICNpbmNsdWRlICJTdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IuaCIK
ICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCkBAIC0zNCw3ICszNCw3IEBAIHVzaW5nIG5h
bWVzcGFjZSBVbmljb2RlOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVdpZHRoSXRlcmF0b3I6
OldpZHRoSXRlcmF0b3IoY29uc3QgRm9udENhc2NhZGUqIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1
biwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBib29sIGFj
Y291bnRGb3JHbHlwaEJvdW5kcywgYm9vbCBmb3JUZXh0RW1waGFzaXMpCitXaWR0aEl0ZXJhdG9y
OjpXaWR0aEl0ZXJhdG9yKGNvbnN0IEZvbnRDYXNjYWRlKiBmb250LCBjb25zdCBUZXh0UnVuJiBy
dW4sIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzLCBib29sIGFjY291bnRGb3JH
bHlwaEJvdW5kcywgYm9vbCBmb3JUZXh0RW1waGFzaXMpCiAgICAgOiBtX2ZvbnQoZm9udCkKICAg
ICAsIG1fcnVuKHJ1bikKICAgICAsIG1fY3VycmVudENoYXJhY3RlcigwKQpAQCAtMTAwLDcgKzEw
MCw3IEBAIHB1YmxpYzoKIAogdHlwZWRlZiBWZWN0b3I8c3RkOjpwYWlyPGludCwgT3JpZ2luYWxB
ZHZhbmNlc0ZvckNoYXJhY3RlclRyZWF0ZWRBc1NwYWNlPiwgNjQ+IENoYXJhY3RlcnNUcmVhdGVk
QXNTcGFjZTsKIAotc3RhdGljIGlubGluZSBmbG9hdCBhcHBseUZvbnRUcmFuc2Zvcm1zKEdseXBo
QnVmZmVyKiBnbHlwaEJ1ZmZlciwgYm9vbCBsdHIsIGludCYgbGFzdEdseXBoQ291bnQsIGNvbnN0
IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwgV2lkdGhJdGVyYXRvciYgaXRlcmF0b3IsIFR5cGVz
ZXR0aW5nRmVhdHVyZXMgdHlwZXNldHRpbmdGZWF0dXJlcywgQ2hhcmFjdGVyc1RyZWF0ZWRBc1Nw
YWNlJiBjaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UpCitzdGF0aWMgaW5saW5lIGZsb2F0IGFwcGx5
Rm9udFRyYW5zZm9ybXMoR2x5cGhCdWZmZXIqIGdseXBoQnVmZmVyLCBib29sIGx0ciwgaW50JiBs
YXN0R2x5cGhDb3VudCwgY29uc3QgRm9udCogZm9udCwgV2lkdGhJdGVyYXRvciYgaXRlcmF0b3Is
IFR5cGVzZXR0aW5nRmVhdHVyZXMgdHlwZXNldHRpbmdGZWF0dXJlcywgQ2hhcmFjdGVyc1RyZWF0
ZWRBc1NwYWNlJiBjaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UpCiB7CiAgICAgQVNTRVJUKHR5cGVz
ZXR0aW5nRmVhdHVyZXMgJiAoS2VybmluZyB8IExpZ2F0dXJlcykpOwogCkBAIC0xMjMsMTYgKzEy
MywxNiBAQCBzdGF0aWMgaW5saW5lIGZsb2F0IGFwcGx5Rm9udFRyYW5zZm9ybXMoCiAgICAgVU5V
U0VEX1BBUkFNKGl0ZXJhdG9yKTsKICNlbHNlCiAgICAgLy8gV2UgbmVlZCB0byBoYW5kbGUgdHJh
bnNmb3JtcyBvbiBTVkcgZm9udHMgaW50ZXJuYWxseSwgc2luY2UgdGhleSBhcmUgcmVuZGVyZWQg
aW50ZXJuYWxseS4KLSAgICBpZiAoZm9udERhdGEtPmlzU1ZHRm9udCgpKSB7CisgICAgaWYgKGZv
bnQtPmlzU1ZHRm9udCgpKSB7CiAgICAgICAgIC8vIFNWRyBmb250IGxpZ2F0dXJlcyBhcmUgaGFu
ZGxlZCBkdXJpbmcgZ2x5cGggc2VsZWN0aW9uLCBvbmx5IGtlcm5pbmcgcmVtYWluaW5nLgogICAg
ICAgICBpZiAoaXRlcmF0b3IucnVuKCkucmVuZGVyaW5nQ29udGV4dCgpICYmICh0eXBlc2V0dGlu
Z0ZlYXR1cmVzICYgS2VybmluZykpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBw
YXNzIHRoZSBuZWNlc3NhcnkgY29udGV4dCBkb3duIHRvIHRoaXMgbGV2ZWwgc28gd2UgY2FuIGxh
emlseSBjcmVhdGUgcmVuZGVyaW5nIGNvbnRleHRzIGF0IHRoaXMgcG9pbnQuCiAgICAgICAgICAg
ICAvLyBIb3dldmVyLCBhIGxhcmdlciByZWZhY3RvcmluZyBvZiBTVkcgZm9udHMgbWlnaHQgbmVj
ZXNzYXJ5IHRvIHNpZGVzdGVwIHRoaXMgcHJvYmxlbSBjb21wbGV0ZWx5LgotICAgICAgICAgICAg
aXRlcmF0b3IucnVuKCkucmVuZGVyaW5nQ29udGV4dCgpLT5hcHBseVNWR0tlcm5pbmcoZm9udERh
dGEsIGl0ZXJhdG9yLCBnbHlwaEJ1ZmZlciwgbGFzdEdseXBoQ291bnQpOworICAgICAgICAgICAg
aXRlcmF0b3IucnVuKCkucmVuZGVyaW5nQ29udGV4dCgpLT5hcHBseVNWR0tlcm5pbmcoZm9udCwg
aXRlcmF0b3IsIGdseXBoQnVmZmVyLCBsYXN0R2x5cGhDb3VudCk7CiAgICAgICAgIH0KICAgICB9
IGVsc2UKICNlbmRpZgotICAgICAgICBmb250RGF0YS0+YXBwbHlUcmFuc2Zvcm1zKGdseXBoQnVm
ZmVyLT5nbHlwaHMobGFzdEdseXBoQ291bnQpLCBhZHZhbmNlcyArIGxhc3RHbHlwaENvdW50LCBn
bHlwaEJ1ZmZlclNpemUgLSBsYXN0R2x5cGhDb3VudCwgdHlwZXNldHRpbmdGZWF0dXJlcyk7Cisg
ICAgICAgIGZvbnQtPmFwcGx5VHJhbnNmb3JtcyhnbHlwaEJ1ZmZlci0+Z2x5cGhzKGxhc3RHbHlw
aENvdW50KSwgYWR2YW5jZXMgKyBsYXN0R2x5cGhDb3VudCwgZ2x5cGhCdWZmZXJTaXplIC0gbGFz
dEdseXBoQ291bnQsIHR5cGVzZXR0aW5nRmVhdHVyZXMpOwogCiAgICAgaWYgKCFsdHIpCiAgICAg
ICAgIGdseXBoQnVmZmVyLT5yZXZlcnNlKGxhc3RHbHlwaENvdW50LCBnbHlwaEJ1ZmZlclNpemUg
LSBsYXN0R2x5cGhDb3VudCk7CkBAIC0xNjYsOCArMTY2LDggQEAgaW5saW5lIHVuc2lnbmVkIFdp
ZHRoSXRlcmF0b3I6OmFkdmFuY2VJbgogICAgIGZsb2F0IGxhc3RSb3VuZGluZ1dpZHRoID0gbV9m
aW5hbFJvdW5kaW5nV2lkdGg7CiAgICAgRmxvYXRSZWN0IGJvdW5kczsKIAotICAgIGNvbnN0IFNp
bXBsZUZvbnREYXRhJiBwcmltYXJ5Rm9udERhdGEgPSBtX2ZvbnQtPnByaW1hcnlGb250RGF0YSgp
OwotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBsYXN0Rm9udERhdGEgPSAmcHJpbWFyeUZvbnRE
YXRhOworICAgIGNvbnN0IEZvbnQmIHByaW1hcnlGb250ID0gbV9mb250LT5wcmltYXJ5Rm9udCgp
OworICAgIGNvbnN0IEZvbnQqIGxhc3RGb250RGF0YSA9ICZwcmltYXJ5Rm9udDsKICAgICBpbnQg
bGFzdEdseXBoQ291bnQgPSBnbHlwaEJ1ZmZlciA/IGdseXBoQnVmZmVyLT5zaXplKCkgOiAwOwog
CiAgICAgVUNoYXIzMiBjaGFyYWN0ZXIgPSAwOwpAQCAtMTgzLDE1ICsxODMsMTUgQEAgaW5saW5l
IHVuc2lnbmVkIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2VJbgogICAgICAgICAgICAgdGV4dEl0ZXJh
dG9yLmFkdmFuY2UoYWR2YW5jZUxlbmd0aCk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgfQotICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEgPSBnbHlwaERhdGEu
Zm9udERhdGE7Ci0gICAgICAgIEFTU0VSVChmb250RGF0YSk7CisgICAgICAgIGNvbnN0IEZvbnQq
IGZvbnQgPSBnbHlwaERhdGEuZm9udDsKKyAgICAgICAgQVNTRVJUKGZvbnQpOwogCiAgICAgICAg
IC8vIE5vdyB0aGF0IHdlIGhhdmUgYSBnbHlwaCBhbmQgZm9udCBkYXRhLCBnZXQgaXRzIHdpZHRo
LgogICAgICAgICBmbG9hdCB3aWR0aDsKICAgICAgICAgaWYgKGNoYXJhY3RlciA9PSAnXHQnICYm
IG1fcnVuLmFsbG93VGFicygpKQotICAgICAgICAgICAgd2lkdGggPSBtX2ZvbnQtPnRhYldpZHRo
KCpmb250RGF0YSwgbV9ydW4udGFiU2l6ZSgpLCBtX3J1bi54UG9zKCkgKyBtX3J1bldpZHRoU29G
YXIgKyB3aWR0aFNpbmNlTGFzdFJvdW5kaW5nKTsKKyAgICAgICAgICAgIHdpZHRoID0gbV9mb250
LT50YWJXaWR0aCgqZm9udCwgbV9ydW4udGFiU2l6ZSgpLCBtX3J1bi54UG9zKCkgKyBtX3J1bldp
ZHRoU29GYXIgKyB3aWR0aFNpbmNlTGFzdFJvdW5kaW5nKTsKICAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICB3aWR0aCA9IGZvbnREYXRhLT53aWR0aEZvckdseXBoKGdseXBoKTsKKyAgICAgICAg
ICAgIHdpZHRoID0gZm9udC0+d2lkdGhGb3JHbHlwaChnbHlwaCk7CiAKICAgICAgICAgICAgIC8v
IFNWRyB1c2VzIGhvcml6b250YWxHbHlwaFN0cmV0Y2goKSwgd2hlbiB0ZXh0TGVuZ3RoIGlzIHVz
ZWQgdG8gc3RyZXRjaC9zcXVlZXplIHRleHQuCiAgICAgICAgICAgICB3aWR0aCAqPSBtX3J1bi5o
b3Jpem9udGFsR2x5cGhTdHJldGNoKCk7CkBAIC0yMDAsMjYgKzIwMCwyNiBAQCBpbmxpbmUgdW5z
aWduZWQgV2lkdGhJdGVyYXRvcjo6YWR2YW5jZUluCiAgICAgICAgICAgICAvLyBGaXJzdCwgd2Ug
cm91bmQgc3BhY2VzIHRvIGFuIGFkanVzdGVkIHdpZHRoIGluIGFsbCBmb250cy4KICAgICAgICAg
ICAgIC8vIFNlY29uZCwgaW4gZml4ZWQtcGl0Y2ggZm9udHMgd2UgZW5zdXJlIHRoYXQgYWxsIGNo
YXJhY3RlcnMgdGhhdAogICAgICAgICAgICAgLy8gbWF0Y2ggdGhlIHdpZHRoIG9mIHRoZSBzcGFj
ZSBjaGFyYWN0ZXIgaGF2ZSB0aGUgc2FtZSB3aWR0aCBhcyB0aGUgc3BhY2UgY2hhcmFjdGVyLgot
ICAgICAgICAgICAgaWYgKG1fcnVuLmFwcGx5V29yZFJvdW5kaW5nKCkgJiYgd2lkdGggPT0gZm9u
dERhdGEtPnNwYWNlV2lkdGgoKSAmJiAoZm9udERhdGEtPnBpdGNoKCkgPT0gRml4ZWRQaXRjaCB8
fCBnbHlwaCA9PSBmb250RGF0YS0+c3BhY2VHbHlwaCgpKSkKLSAgICAgICAgICAgICAgICB3aWR0
aCA9IGZvbnREYXRhLT5hZGp1c3RlZFNwYWNlV2lkdGgoKTsKKyAgICAgICAgICAgIGlmIChtX3J1
bi5hcHBseVdvcmRSb3VuZGluZygpICYmIHdpZHRoID09IGZvbnQtPnNwYWNlV2lkdGgoKSAmJiAo
Zm9udC0+cGl0Y2goKSA9PSBGaXhlZFBpdGNoIHx8IGdseXBoID09IGZvbnQtPnNwYWNlR2x5cGgo
KSkpCisgICAgICAgICAgICAgICAgd2lkdGggPSBmb250LT5hZGp1c3RlZFNwYWNlV2lkdGgoKTsK
ICAgICAgICAgfQogCi0gICAgICAgIGlmIChmb250RGF0YSAhPSBsYXN0Rm9udERhdGEgJiYgd2lk
dGgpIHsKKyAgICAgICAgaWYgKGZvbnQgIT0gbGFzdEZvbnREYXRhICYmIHdpZHRoKSB7CiAgICAg
ICAgICAgICBpZiAoc2hvdWxkQXBwbHlGb250VHJhbnNmb3JtcygpKSB7CiAgICAgICAgICAgICAg
ICAgbV9ydW5XaWR0aFNvRmFyICs9IGFwcGx5Rm9udFRyYW5zZm9ybXMoZ2x5cGhCdWZmZXIsIG1f
cnVuLmx0cigpLCBsYXN0R2x5cGhDb3VudCwgbGFzdEZvbnREYXRhLCAqdGhpcywgbV90eXBlc2V0
dGluZ0ZlYXR1cmVzLCBjaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UpOwogICAgICAgICAgICAgICAg
IGxhc3RHbHlwaENvdW50ID0gZ2x5cGhCdWZmZXItPnNpemUoKTsgLy8gYXBwbHlGb250VHJhbnNm
b3JtcyBkb2Vzbid0IHVwZGF0ZSB3aGVuIHRoZXJlIGhhZCBiZWVuIG9ubHkgb25lIGdseXBoLgog
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBsYXN0Rm9udERhdGEgPSBmb250RGF0YTsKLSAg
ICAgICAgICAgIGlmIChtX2ZhbGxiYWNrRm9udHMgJiYgZm9udERhdGEgIT0gJnByaW1hcnlGb250
RGF0YSkgeworICAgICAgICAgICAgbGFzdEZvbnREYXRhID0gZm9udDsKKyAgICAgICAgICAgIGlm
IChtX2ZhbGxiYWNrRm9udHMgJiYgZm9udCAhPSAmcHJpbWFyeUZvbnQpIHsKICAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogVGhpcyBkb2VzIGEgbGl0dGxlIGV4dHJhIHdvcmsgdGhhdCBjb3VsZCBi
ZSBhdm9pZGVkIGlmCiAgICAgICAgICAgICAgICAgLy8gZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKCkg
cmV0dXJuZWQgd2hldGhlciBpdCBjaG9zZSB0byB1c2UgYSBzbWFsbCBjYXBzIGZvbnQuCiAgICAg
ICAgICAgICAgICAgaWYgKCFtX2ZvbnQtPmlzU21hbGxDYXBzKCkgfHwgY2hhcmFjdGVyID09IHVf
dG91cHBlcihjaGFyYWN0ZXIpKQotICAgICAgICAgICAgICAgICAgICBtX2ZhbGxiYWNrRm9udHMt
PmFkZChmb250RGF0YSk7CisgICAgICAgICAgICAgICAgICAgIG1fZmFsbGJhY2tGb250cy0+YWRk
KGZvbnQpOwogICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICBjb25z
dCBHbHlwaERhdGEmIHVwcGVyY2FzZUdseXBoRGF0YSA9IG1fZm9udC0+Z2x5cGhEYXRhRm9yQ2hh
cmFjdGVyKHVfdG91cHBlcihjaGFyYWN0ZXIpLCBydGwpOwotICAgICAgICAgICAgICAgICAgICBp
ZiAodXBwZXJjYXNlR2x5cGhEYXRhLmZvbnREYXRhICE9ICZwcmltYXJ5Rm9udERhdGEpCi0gICAg
ICAgICAgICAgICAgICAgICAgICBtX2ZhbGxiYWNrRm9udHMtPmFkZCh1cHBlcmNhc2VHbHlwaERh
dGEuZm9udERhdGEpOworICAgICAgICAgICAgICAgICAgICBpZiAodXBwZXJjYXNlR2x5cGhEYXRh
LmZvbnQgIT0gJnByaW1hcnlGb250KQorICAgICAgICAgICAgICAgICAgICAgICAgbV9mYWxsYmFj
a0ZvbnRzLT5hZGQodXBwZXJjYXNlR2x5cGhEYXRhLmZvbnQpOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjQzLDkgKzI0Myw5IEBAIGlubGluZSB1bnNp
Z25lZCBXaWR0aEl0ZXJhdG9yOjphZHZhbmNlSW4KICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChnbHlwaEJ1ZmZlcikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnbHlwaEJ1
ZmZlci0+aXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICht
X2ZvclRleHRFbXBoYXNpcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGds
eXBoQnVmZmVyLT5hZGQoZm9udERhdGEtPnplcm9XaWR0aFNwYWNlR2x5cGgoKSwgZm9udERhdGEs
IG1fZXhwYW5zaW9uUGVyT3Bwb3J0dW5pdHksIGN1cnJlbnRDaGFyYWN0ZXIpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhCdWZmZXItPmFkZChmb250LT56ZXJvV2lk
dGhTcGFjZUdseXBoKCksIGZvbnQsIG1fZXhwYW5zaW9uUGVyT3Bwb3J0dW5pdHksIGN1cnJlbnRD
aGFyYWN0ZXIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+YWRkKGZvbnREYXRhLT5z
cGFjZUdseXBoKCksIGZvbnREYXRhLCBleHBhbnNpb25BdFRoaXNPcHBvcnR1bml0eSwgY3VycmVu
dENoYXJhY3Rlcik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaEJ1
ZmZlci0+YWRkKGZvbnQtPnNwYWNlR2x5cGgoKSwgZm9udCwgZXhwYW5zaW9uQXRUaGlzT3Bwb3J0
dW5pdHksIGN1cnJlbnRDaGFyYWN0ZXIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+ZXhwYW5k
TGFzdEFkdmFuY2UoZXhwYW5zaW9uQXRUaGlzT3Bwb3J0dW5pdHkpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgfQpAQCAtMjc0LDcgKzI3NCw3IEBAIGlubGluZSB1bnNpZ25lZCBXaWR0aEl0ZXJh
dG9yOjphZHZhbmNlSW4KICAgICAgICAgfQogCiAgICAgICAgIGlmIChtX2FjY291bnRGb3JHbHlw
aEJvdW5kcykgewotICAgICAgICAgICAgYm91bmRzID0gZm9udERhdGEtPmJvdW5kc0ZvckdseXBo
KGdseXBoKTsKKyAgICAgICAgICAgIGJvdW5kcyA9IGZvbnQtPmJvdW5kc0ZvckdseXBoKGdseXBo
KTsKICAgICAgICAgICAgIGlmICghY3VycmVudENoYXJhY3RlcikKICAgICAgICAgICAgICAgICBt
X2ZpcnN0R2x5cGhPdmVyZmxvdyA9IHN0ZDo6bWF4PGZsb2F0PigwLCAtYm91bmRzLngoKSk7CiAg
ICAgICAgIH0KQEAgLTMxNCw3ICszMTQsNyBAQCBpbmxpbmUgdW5zaWduZWQgV2lkdGhJdGVyYXRv
cjo6YWR2YW5jZUluCiAgICAgICAgIH0KIAogICAgICAgICBpZiAoZ2x5cGhCdWZmZXIpCi0gICAg
ICAgICAgICBnbHlwaEJ1ZmZlci0+YWRkKGdseXBoLCBmb250RGF0YSwgKHJ0bCA/IG9sZFdpZHRo
ICsgbGFzdFJvdW5kaW5nV2lkdGggOiB3aWR0aCksIGN1cnJlbnRDaGFyYWN0ZXIpOworICAgICAg
ICAgICAgZ2x5cGhCdWZmZXItPmFkZChnbHlwaCwgZm9udCwgKHJ0bCA/IG9sZFdpZHRoICsgbGFz
dFJvdW5kaW5nV2lkdGggOiB3aWR0aCksIGN1cnJlbnRDaGFyYWN0ZXIpOwogCiAgICAgICAgIGxh
c3RSb3VuZGluZ1dpZHRoID0gd2lkdGggLSBvbGRXaWR0aDsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuaAkocmV2aXNpb24gMTc4
ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxNCArMzIsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBGb250Q2FzY2FkZTsKIGNsYXNzIEdseXBoQnVmZmVyOwotY2xhc3MgU2ltcGxlRm9u
dERhdGE7CitjbGFzcyBGb250OwogY2xhc3MgVGV4dFJ1bjsKIHN0cnVjdCBHbHlwaERhdGE7CiAK
IHN0cnVjdCBXaWR0aEl0ZXJhdG9yIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1
YmxpYzoKLSAgICBXaWR0aEl0ZXJhdG9yKGNvbnN0IEZvbnRDYXNjYWRlKiwgY29uc3QgVGV4dFJ1
biYsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDAsIGJv
b2wgYWNjb3VudEZvckdseXBoQm91bmRzID0gZmFsc2UsIGJvb2wgZm9yVGV4dEVtcGhhc2lzID0g
ZmFsc2UpOworICAgIFdpZHRoSXRlcmF0b3IoY29uc3QgRm9udENhc2NhZGUqLCBjb25zdCBUZXh0
UnVuJiwgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMgPSAwLCBib29sIGFjY291
bnRGb3JHbHlwaEJvdW5kcyA9IGZhbHNlLCBib29sIGZvclRleHRFbXBoYXNpcyA9IGZhbHNlKTsK
IAogICAgIHVuc2lnbmVkIGFkdmFuY2UoaW50IHRvLCBHbHlwaEJ1ZmZlciopOwogICAgIGJvb2wg
YWR2YW5jZU9uZUNoYXJhY3RlcihmbG9hdCYgd2lkdGgsIEdseXBoQnVmZmVyJik7CkBAIC05NCw3
ICs5NCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBzaG91bGRBcHBseUZvbnRUcmFuc2Zvcm1zKCkg
Y29uc3QgeyByZXR1cm4gbV9ydW4ubGVuZ3RoKCkgPiAxICYmIChtX3R5cGVzZXR0aW5nRmVhdHVy
ZXMgJiAoS2VybmluZyB8IExpZ2F0dXJlcykpOyB9CiAKICAgICBUeXBlc2V0dGluZ0ZlYXR1cmVz
IG1fdHlwZXNldHRpbmdGZWF0dXJlczsKLSAgICBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRh
Kj4qIG1fZmFsbGJhY2tGb250czsKKyAgICBIYXNoU2V0PGNvbnN0IEZvbnQqPiogbV9mYWxsYmFj
a0ZvbnRzOwogICAgIGJvb2wgbV9hY2NvdW50Rm9yR2x5cGhCb3VuZHM7CiAgICAgZmxvYXQgbV9t
YXhHbHlwaEJvdW5kaW5nQm94WTsKICAgICBmbG9hdCBtX21pbkdseXBoQm91bmRpbmdCb3hZOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9G
b250Q2Fpcm8uY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICsz
Myw3IEBACiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJDYWlyb1V0
aWxpdGllcy5oIgorI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgog
I2luY2x1ZGUgIkdyYWRpZW50LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCkBAIC00
MSwxMSArNDIsMTAgQEAKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgogI2luY2x1
ZGUgIlBsYXRmb3JtUGF0aENhaXJvLmgiCiAjaW5jbHVkZSAiU2hhZG93Qmx1ci5oIgotI2luY2x1
ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIHZv
aWQgZHJhd0dseXBoc1RvQ29udGV4dChjYWlyb190KiBjb250ZXh0LCBjb25zdCBTaW1wbGVGb250
RGF0YSogZm9udCwgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBpbnQgbnVtR2x5cGhzKQorc3Rh
dGljIHZvaWQgZHJhd0dseXBoc1RvQ29udGV4dChjYWlyb190KiBjb250ZXh0LCBjb25zdCBGb250
KiBmb250LCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGludCBudW1HbHlwaHMpCiB7CiAgICAg
Y2Fpcm9fbWF0cml4X3Qgb3JpZ2luYWxUcmFuc2Zvcm07CiAgICAgZmxvYXQgc3ludGhldGljQm9s
ZE9mZnNldCA9IGZvbnQtPnN5bnRoZXRpY0JvbGRPZmZzZXQoKTsKQEAgLTY0LDcgKzY0LDcgQEAg
c3RhdGljIHZvaWQgZHJhd0dseXBoc1RvQ29udGV4dChjYWlyb190KgogICAgICAgICBjYWlyb19z
ZXRfbWF0cml4KGNvbnRleHQsICZvcmlnaW5hbFRyYW5zZm9ybSk7CiB9CiAKLXN0YXRpYyB2b2lk
IGRyYXdHbHlwaHNTaGFkb3coR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgR2x5cGhCdWZm
ZXJHbHlwaCogZ2x5cGhzLCBpbnQgbnVtR2x5cGhzKQorc3RhdGljIHZvaWQgZHJhd0dseXBoc1No
YWRvdyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQsIGNvbnN0IEZvbnQqIGZvbnQsIEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgaW50IG51
bUdseXBocykKIHsKICAgICBTaGFkb3dCbHVyJiBzaGFkb3cgPSBncmFwaGljc0NvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpLT5zaGFkb3dCbHVyKCk7CiAKQEAgLTk1LDcgKzk1LDcgQEAgc3RhdGlj
IHZvaWQgZHJhd0dseXBoc1NoYWRvdyhHcmFwaGljc0NvbgogICAgIH0KIH0KIAotdm9pZCBGb250
Q2FzY2FkZTo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFNpbXBs
ZUZvbnREYXRhKiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsCit2b2lkIEZv
bnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRm9u
dCogZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLAogICAgIGludCBmcm9tLCBp
bnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKIHsKICAgICBpZiAo
IWZvbnQtPnBsYXRmb3JtRGF0YSgpLnNpemUoKSkKQEAgLTIxNiw3ICsyMTYsNyBAQCBwdWJsaWM6
CiAgICAgICAgIDogbV9pbmRleCgwKQogICAgICAgICAsIG1fdGV4dFJ1bih0ZXh0UnVuKQogICAg
ICAgICAsIG1fZ2x5cGhCdWZmZXIoZ2x5cGhCdWZmZXIpCi0gICAgICAgICwgbV9mb250RGF0YShn
bHlwaEJ1ZmZlci5mb250RGF0YUF0KG1faW5kZXgpKQorICAgICAgICAsIG1fZm9udERhdGEoZ2x5
cGhCdWZmZXIuZm9udEF0KG1faW5kZXgpKQogICAgICAgICAsIG1fdHJhbnNsYXRpb24oQWZmaW5l
VHJhbnNmb3JtKCkudHJhbnNsYXRlKHRleHRPcmlnaW4ueCgpLCB0ZXh0T3JpZ2luLnkoKSkpCiAg
ICAgewogICAgICAgICBtb3ZlVG9OZXh0VmFsaWRHbHlwaCgpOwpAQCAtMjM1LDcgKzIzNSw3IEBA
IHByaXZhdGU6CiAgICAgaW50IG1faW5kZXg7CiAgICAgY29uc3QgVGV4dFJ1biYgbV90ZXh0UnVu
OwogICAgIGNvbnN0IEdseXBoQnVmZmVyJiBtX2dseXBoQnVmZmVyOwotICAgIGNvbnN0IFNpbXBs
ZUZvbnREYXRhKiBtX2ZvbnREYXRhOworICAgIGNvbnN0IEZvbnQqIG1fZm9udERhdGE7CiAgICAg
QWZmaW5lVHJhbnNmb3JtIG1fdHJhbnNsYXRpb247CiB9OwogCkBAIC0yODYsNyArMjg2LDcgQEAg
dm9pZCBDYWlyb0dseXBoVG9QYXRoVHJhbnNsYXRvcjo6YWR2YW5jZQogICAgICAgICArK21faW5k
ZXg7CiAgICAgICAgIGlmIChtX2luZGV4ID49IG1fZ2x5cGhCdWZmZXIuc2l6ZSgpKQogICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIG1fZm9udERhdGEgPSBtX2dseXBoQnVmZmVyLmZvbnREYXRh
QXQobV9pbmRleCk7CisgICAgICAgIG1fZm9udERhdGEgPSBtX2dseXBoQnVmZmVyLmZvbnRBdCht
X2luZGV4KTsKICAgICB9IHdoaWxlIChtX2ZvbnREYXRhLT5pc1NWR0ZvbnQoKSAmJiBtX2luZGV4
IDwgbV9nbHlwaEJ1ZmZlci5zaXplKCkpOwogfQogCkBAIC0zMDcsNyArMzA3LDcgQEAgRGFzaEFy
cmF5IEZvbnRDYXNjYWRlOjpkYXNoZXNGb3JJbnRlcnNlYwogICAgICAgICByZXR1cm4gRGFzaEFy
cmF5KCk7CiAKICAgICAvLyBGSVhNRTogSGFuZGxlIFNWRyArIG5vbi1TVkcgaW50ZXJsZWF2ZWQg
cnVucy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzc3OAotICAg
IGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSA9IGdseXBoQnVmZmVyLmZvbnREYXRhQXQo
MCk7CisgICAgY29uc3QgRm9udCogZm9udERhdGEgPSBnbHlwaEJ1ZmZlci5mb250QXQoMCk7CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPEdseXBoVG9QYXRoVHJhbnNsYXRvcj4gdHJhbnNsYXRvcjsKICAg
ICBib29sIGlzU1ZHID0gZmFsc2U7CiAgICAgRmxvYXRQb2ludCBvcmlnaW4gPSBGbG9hdFBvaW50
KHRleHRPcmlnaW4ueCgpICsgZGVsdGFYLCB0ZXh0T3JpZ2luLnkoKSk7CkBAIC0zMjYsNyArMzI2
LDcgQEAgRGFzaEFycmF5IEZvbnRDYXNjYWRlOjpkYXNoZXNGb3JJbnRlcnNlYwogICAgIGZvciAo
aW50IGluZGV4ID0gMDsgdHJhbnNsYXRvci0+Y29udGFpbnNNb3JlUGF0aHMoKTsgKytpbmRleCwg
dHJhbnNsYXRvci0+YWR2YW5jZSgpKSB7CiAgICAgICAgIGZsb2F0IGNlbnRlck9mTGluZSA9IGxp
bmVFeHRlbnRzLnkoKSArIChsaW5lRXh0ZW50cy5oZWlnaHQoKSAvIDIpOwogICAgICAgICBHbHlw
aEl0ZXJhdGlvblN0YXRlIGluZm8gPSBHbHlwaEl0ZXJhdGlvblN0YXRlKEZsb2F0UG9pbnQoKSwg
RmxvYXRQb2ludCgpLCBjZW50ZXJPZkxpbmUsIGxpbmVFeHRlbnRzLngoKSArIGxpbmVFeHRlbnRz
LndpZHRoKCksIGxpbmVFeHRlbnRzLngoKSk7Ci0gICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRh
KiBsb2NhbEZvbnREYXRhID0gZ2x5cGhCdWZmZXIuZm9udERhdGFBdChpbmRleCk7CisgICAgICAg
IGNvbnN0IEZvbnQqIGxvY2FsRm9udERhdGEgPSBnbHlwaEJ1ZmZlci5mb250QXQoaW5kZXgpOwog
ICAgICAgICBpZiAoIWxvY2FsRm9udERhdGEgfHwgKCFpc1NWRyAmJiBsb2NhbEZvbnREYXRhLT5p
c1NWR0ZvbnQoKSkgfHwgKGlzU1ZHICYmIGxvY2FsRm9udERhdGEgIT0gZm9udERhdGEpKSB7CiAg
ICAgICAgICAgICAvLyBUaGUgYWR2YW5jZXMgd2lsbCBnZXQgYWxsIG1lc3NlZCB1cCBpZiB3ZSBk
byBhbnl0aGluZyBvdGhlciB0aGFuIGJhaWwgaGVyZS4KICAgICAgICAgICAgIHJlc3VsdC5jbGVh
cigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENh
aXJvSGFyZmJ1enpORy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvSGFyZmJ1enpORy5jcHAJKHJldmlzaW9uIDE3ODg1NykK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyb0hhcmZi
dXp6TkcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMyArMjcsMTMgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogCisjaW5jbHVkZSAiRm9udC5oIgog
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhhcmZCdXp6U2hhcGVyLmgi
CiAjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRl
ICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCi0j
aW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKICNpbmNsdWRlIDxjYWlyby5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CkBAIC04Myw3ICs4Myw3IEBAIGJvb2wgRm9udENhc2NhZGU6OmNhbkV4cGFu
ZEFyb3VuZElkZW9ncmEKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWZsb2F0IEZvbnRDYXNjYWRl
OjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNv
bnN0IFNpbXBsZUZvbnREYXRhKj4qLCBHbHlwaE92ZXJmbG93KikgY29uc3QKK2Zsb2F0IEZvbnRD
YXNjYWRlOjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNo
U2V0PGNvbnN0IEZvbnQqPiosIEdseXBoT3ZlcmZsb3cqKSBjb25zdAogewogICAgIEhhcmZCdXp6
U2hhcGVyIHNoYXBlcih0aGlzLCBydW4pOwogICAgIGlmIChzaGFwZXIuc2hhcGUoKSkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENh
aXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgIkZsb2F0Q29udmVy
c2lvbi5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkZsb2F0Um91bmRlZFJl
Y3QuaCIKKyNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlQ2Fpcm8uaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiTm90SW1w
bGVtZW50ZWQuaCIKQEAgLTUxLDcgKzUyLDYgQEAKICNpbmNsdWRlICJQbGF0Zm9ybVBhdGhDYWly
by5oIgogI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCiAjaW5jbHVkZSAiU2hhZG93Qmx1ci5oIgot
I2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRy
aXguaCIKICNpbmNsdWRlIDxjYWlyby5oPgogI2luY2x1ZGUgPG1hdGguaD4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYXNjYWRlQ29jb2EubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENh
c2NhZGVDb2NvYS5tbQkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvRm9udENhc2NhZGVDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAt
MjcsMTEgKzI3LDExIEBACiAjaW1wb3J0ICJDb3JlR3JhcGhpY3NTUEkuaCIKICNpbXBvcnQgIkNv
cmVUZXh0U1BJLmgiCiAjaW1wb3J0ICJEYXNoQXJyYXkuaCIKKyNpbXBvcnQgIkZvbnQuaCIKICNp
bXBvcnQgIkdseXBoQnVmZmVyLmgiCiAjaW1wb3J0ICJHcmFwaGljc0NvbnRleHQuaCIKICNpbXBv
cnQgIkxheW91dFJlY3QuaCIKICNpbXBvcnQgIkxvZ2dpbmcuaCIKLSNpbXBvcnQgIlNpbXBsZUZv
bnREYXRhLmgiCiAjaW1wb3J0ICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCiAjaWYgVVNFKEFQ
UEtJVCkKICNpbXBvcnQgPEFwcEtpdC9BcHBLaXQuaD4KQEAgLTkxLDcgKzkxLDcgQEAgc3RhdGlj
IGlubGluZSBib29sIHNob3VsZFVzZUxldHRlcnByZXNzRQogI2VuZGlmCiB9CiAKLXN0YXRpYyB2
b2lkIHNob3dMZXR0ZXJwcmVzc2VkR2x5cGhzV2l0aEFkdmFuY2VzKGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgQ0dDb250ZXh0UmVmIGNvbnRleHQs
IGNvbnN0IENHR2x5cGgqIGdseXBocywgY29uc3QgQ0dTaXplKiBhZHZhbmNlcywgc2l6ZV90IGNv
dW50KQorc3RhdGljIHZvaWQgc2hvd0xldHRlcnByZXNzZWRHbHlwaHNXaXRoQWR2YW5jZXMoY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IEZvbnQqIGZvbnQsIENHQ29udGV4dFJlZiBjb250
ZXh0LCBjb25zdCBDR0dseXBoKiBnbHlwaHMsIGNvbnN0IENHU2l6ZSogYWR2YW5jZXMsIHNpemVf
dCBjb3VudCkKIHsKICNpZiBFTkFCTEUoTEVUVEVSUFJFU1MpCiAgICAgaWYgKCFjb3VudCkKQEAg
LTEzMSw3ICsxMzEsNyBAQCBzdGF0aWMgdm9pZCBzaG93TGV0dGVycHJlc3NlZEdseXBoc1dpdGhB
CiAjZW5kaWYKIH0KIAotc3RhdGljIHZvaWQgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhjb25zdCBG
bG9hdFBvaW50JiBwb2ludCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsIENHQ29udGV4dFJl
ZiBjb250ZXh0LCBjb25zdCBDR0dseXBoKiBnbHlwaHMsIGNvbnN0IENHU2l6ZSogYWR2YW5jZXMs
IHNpemVfdCBjb3VudCkKK3N0YXRpYyB2b2lkIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMoY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IEZvbnQqIGZvbnQsIENHQ29udGV4dFJlZiBjb250ZXh0
LCBjb25zdCBDR0dseXBoKiBnbHlwaHMsIGNvbnN0IENHU2l6ZSogYWR2YW5jZXMsIHNpemVfdCBj
b3VudCkKIHsKICAgICBpZiAoIWNvdW50KQogICAgICAgICByZXR1cm47CkBAIC0xOTcsNyArMTk3
LDcgQEAgc3RhdGljIHZvaWQgc2V0Q0dGb250UmVuZGVyaW5nTW9kZShDR0NvbgogfQogI2VuZGlm
CiAKLXZvaWQgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVm
ZmVyLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgYW5jaG9yUG9p
bnQpIGNvbnN0Cit2b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgY29uc3QgRm9udCogZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVy
LCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgYW5jaG9yUG9pbnQp
IGNvbnN0CiB7CiAgICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhID0gZm9u
dC0+cGxhdGZvcm1EYXRhKCk7CiAgICAgaWYgKCFwbGF0Zm9ybURhdGEuc2l6ZSgpKQpAQCAtNDY4
LDcgKzQ2OCw3IEBAIHB1YmxpYzoKICAgICAgICAgOiBtX2luZGV4KDApCiAgICAgICAgICwgbV90
ZXh0UnVuKHRleHRSdW4pCiAgICAgICAgICwgbV9nbHlwaEJ1ZmZlcihnbHlwaEJ1ZmZlcikKLSAg
ICAgICAgLCBtX2ZvbnREYXRhKGdseXBoQnVmZmVyLmZvbnREYXRhQXQobV9pbmRleCkpCisgICAg
ICAgICwgbV9mb250RGF0YShnbHlwaEJ1ZmZlci5mb250QXQobV9pbmRleCkpCiAgICAgICAgICwg
bV90cmFuc2xhdGlvbihDR0FmZmluZVRyYW5zZm9ybVNjYWxlKENHQWZmaW5lVHJhbnNmb3JtTWFr
ZVRyYW5zbGF0aW9uKHRleHRPcmlnaW4ueCgpLCB0ZXh0T3JpZ2luLnkoKSksIDEsIC0xKSkKICAg
ICB7CiAgICAgICAgIG1vdmVUb05leHRWYWxpZEdseXBoKCk7CkBAIC00ODcsNyArNDg3LDcgQEAg
cHJpdmF0ZToKICAgICBpbnQgbV9pbmRleDsKICAgICBjb25zdCBUZXh0UnVuJiBtX3RleHRSdW47
CiAgICAgY29uc3QgR2x5cGhCdWZmZXImIG1fZ2x5cGhCdWZmZXI7Ci0gICAgY29uc3QgU2ltcGxl
Rm9udERhdGEqIG1fZm9udERhdGE7CisgICAgY29uc3QgRm9udCogbV9mb250RGF0YTsKICAgICBD
R0FmZmluZVRyYW5zZm9ybSBtX3RyYW5zbGF0aW9uOwogfTsKIApAQCAtNTI0LDcgKzUyNCw3IEBA
IHZvaWQgTWFjR2x5cGhUb1BhdGhUcmFuc2xhdG9yOjphZHZhbmNlKCkKICAgICAgICAgKyttX2lu
ZGV4OwogICAgICAgICBpZiAobV9pbmRleCA+PSBtX2dseXBoQnVmZmVyLnNpemUoKSkKICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBtX2ZvbnREYXRhID0gbV9nbHlwaEJ1ZmZlci5mb250RGF0
YUF0KG1faW5kZXgpOworICAgICAgICBtX2ZvbnREYXRhID0gbV9nbHlwaEJ1ZmZlci5mb250QXQo
bV9pbmRleCk7CiAgICAgfSB3aGlsZSAobV9mb250RGF0YS0+aXNTVkdGb250KCkgJiYgbV9pbmRl
eCA8IG1fZ2x5cGhCdWZmZXIuc2l6ZSgpKTsKIH0KIApAQCAtNTQ1LDcgKzU0NSw3IEBAIERhc2hB
cnJheSBGb250Q2FzY2FkZTo6ZGFzaGVzRm9ySW50ZXJzZWMKICAgICAgICAgcmV0dXJuIERhc2hB
cnJheSgpOwogICAgIAogICAgIC8vIEZJWE1FOiBIYW5kbGUgU1ZHICsgbm9uLVNWRyBpbnRlcmxl
YXZlZCBydW5zLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzNzc4
Ci0gICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhID0gZ2x5cGhCdWZmZXIuZm9udERh
dGFBdCgwKTsKKyAgICBjb25zdCBGb250KiBmb250RGF0YSA9IGdseXBoQnVmZmVyLmZvbnRBdCgw
KTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8R2x5cGhUb1BhdGhUcmFuc2xhdG9yPiB0cmFuc2xhdG9y
OwogICAgIGJvb2wgaXNTVkcgPSBmYWxzZTsKICAgICBGbG9hdFBvaW50IG9yaWdpbiA9IEZsb2F0
UG9pbnQodGV4dE9yaWdpbi54KCkgKyBkZWx0YVgsIHRleHRPcmlnaW4ueSgpKTsKQEAgLTU2MSw4
ICs1NjEsOCBAQCBEYXNoQXJyYXkgRm9udENhc2NhZGU6OmRhc2hlc0ZvckludGVyc2VjCiAgICAg
RGFzaEFycmF5IHJlc3VsdDsKICAgICBmb3IgKGludCBpbmRleCA9IDA7IHRyYW5zbGF0b3ItPmNv
bnRhaW5zTW9yZVBhdGhzKCk7ICsraW5kZXgsIHRyYW5zbGF0b3ItPmFkdmFuY2UoKSkgewogICAg
ICAgICBHbHlwaEl0ZXJhdGlvblN0YXRlIGluZm8gPSBHbHlwaEl0ZXJhdGlvblN0YXRlKENHUG9p
bnRNYWtlKDAsIDApLCBDR1BvaW50TWFrZSgwLCAwKSwgbGluZUV4dGVudHMueSgpLCBsaW5lRXh0
ZW50cy55KCkgKyBsaW5lRXh0ZW50cy5oZWlnaHQoKSwgbGluZUV4dGVudHMueCgpICsgbGluZUV4
dGVudHMud2lkdGgoKSwgbGluZUV4dGVudHMueCgpKTsKLSAgICAgICAgY29uc3QgU2ltcGxlRm9u
dERhdGEqIGxvY2FsRm9udERhdGEgPSBnbHlwaEJ1ZmZlci5mb250RGF0YUF0KGluZGV4KTsKLSAg
ICAgICAgaWYgKCFsb2NhbEZvbnREYXRhIHx8ICghaXNTVkcgJiYgbG9jYWxGb250RGF0YS0+aXNT
VkdGb250KCkpIHx8IChpc1NWRyAmJiBsb2NhbEZvbnREYXRhICE9IGZvbnREYXRhKSkgeworICAg
ICAgICBjb25zdCBGb250KiBsb2NhbEZvbnQgPSBnbHlwaEJ1ZmZlci5mb250QXQoaW5kZXgpOwor
ICAgICAgICBpZiAoIWxvY2FsRm9udCB8fCAoIWlzU1ZHICYmIGxvY2FsRm9udC0+aXNTVkdGb250
KCkpIHx8IChpc1NWRyAmJiBsb2NhbEZvbnQgIT0gZm9udERhdGEpKSB7CiAgICAgICAgICAgICAv
LyBUaGUgYWR2YW5jZXMgd2lsbCBnZXQgYWxsIG1lc3NlZCB1cCBpZiB3ZSBkbyBhbnl0aGluZyBv
dGhlciB0aGFuIGJhaWwgaGVyZS4KICAgICAgICAgICAgIHJlc3VsdC5jbGVhcigpOwogICAgICAg
ICAgICAgYnJlYWs7CkBAIC01OTIsMTAgKzU5MiwxMCBAQCBEYXNoQXJyYXkgRm9udENhc2NhZGU6
OmRhc2hlc0ZvckludGVyc2VjCiB9CiAjZW5kaWYKIAotYm9vbCBGb250Q2FzY2FkZTo6cHJpbWFy
eUZvbnREYXRhSXNTeXN0ZW1Gb250KCkgY29uc3QKK2Jvb2wgRm9udENhc2NhZGU6OnByaW1hcnlG
b250SXNTeXN0ZW1Gb250KCkgY29uc3QKIHsKICNpZiBQTEFURk9STShJT1MpIHx8IF9fTUFDX09T
X1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPiAxMDkwCi0gICAgY29uc3QgYXV0byYgZm9udERhdGEg
PSBwcmltYXJ5Rm9udERhdGEoKTsKKyAgICBjb25zdCBhdXRvJiBmb250RGF0YSA9IHByaW1hcnlG
b250KCk7CiAgICAgcmV0dXJuICFmb250RGF0YS5pc1NWR0ZvbnQoKSAmJiBDVEZvbnREZXNjcmlw
dG9ySXNTeXN0ZW1VSUZvbnQoYWRvcHRDRihDVEZvbnRDb3B5Rm9udERlc2NyaXB0b3IoZm9udERh
dGEucGxhdGZvcm1EYXRhKCkuY3RGb250KCkpKS5nZXQoKSk7CiAjZWxzZQogICAgIC8vIFN5c3Rl
bSBmb250cyBhcmUgaGlkZGVuIGJ5IGhhdmluZyBhIG5hbWUgdGhhdCBiZWdpbnMgd2l0aCBhIHBl
cmlvZCwgc28gc2ltcGx5IHNlYXJjaApAQCAtNjcxLDcgKzY3MSw3IEBAIHZvaWQgRm9udENhc2Nh
ZGU6OmRyYXdFbXBoYXNpc01hcmtzRm9yQ28KICAgICBkcmF3RW1waGFzaXNNYXJrcyhjb250ZXh0
LCBydW4sIGdseXBoQnVmZmVyLCBtYXJrLCBGbG9hdFBvaW50KHBvaW50LngoKSArIGluaXRpYWxB
ZHZhbmNlLCBwb2ludC55KCkpKTsKIH0KIAotZmxvYXQgRm9udENhc2NhZGU6OmZsb2F0V2lkdGhG
b3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9u
dERhdGEqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29u
c3QKK2Zsb2F0IEZvbnRDYXNjYWRlOjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4
dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVy
ZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKIHsKICAgICBDb21wbGV4VGV4dENvbnRyb2xsZXIg
Y29udHJvbGxlcih0aGlzLCBydW4sIHRydWUsIGZhbGxiYWNrRm9udHMpOwogICAgIGlmIChnbHlw
aE92ZXJmbG93KSB7CkBAIC02ODksNyArNjg5LDcgQEAgaW50IEZvbnRDYXNjYWRlOjpvZmZzZXRG
b3JQb3NpdGlvbkZvckNvbQogICAgIHJldHVybiBjb250cm9sbGVyLm9mZnNldEZvclBvc2l0aW9u
KHgsIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKTsKIH0KIAotY29uc3QgU2ltcGxlRm9udERhdGEqIEZv
bnRDYXNjYWRlOjpmb250RGF0YUZvckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVD
aGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBGb250RGF0YVZhcmlhbnQgdmFyaWFudCkg
Y29uc3QKK2NvbnN0IEZvbnQqIEZvbnRDYXNjYWRlOjpmb250Rm9yQ29tYmluaW5nQ2hhcmFjdGVy
U2VxdWVuY2UoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIEZvbnRWYXJp
YW50IHZhcmlhbnQpIGNvbnN0CiB7CiAgICAgVUNoYXIzMiBiYXNlQ2hhcmFjdGVyOwogICAgIHNp
emVfdCBiYXNlQ2hhcmFjdGVyTGVuZ3RoID0gMDsKQEAgLTcwMSw1MSArNzAxLDUxIEBAIGNvbnN0
IFNpbXBsZUZvbnREYXRhKiBGb250Q2FzY2FkZTo6Zm9udEQKICAgICAgICAgcmV0dXJuIDA7CiAK
ICAgICBpZiAobGVuZ3RoID09IGJhc2VDaGFyYWN0ZXJMZW5ndGgpCi0gICAgICAgIHJldHVybiBi
YXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmZvbnREYXRhOworICAgICAgICByZXR1cm4gYmFzZUNoYXJh
Y3RlckdseXBoRGF0YS5mb250OwogCi0gICAgYm9vbCB0cmllZEJhc2VDaGFyYWN0ZXJGb250RGF0
YSA9IGZhbHNlOworICAgIGJvb2wgdHJpZWRCYXNlQ2hhcmFjdGVyRm9udCA9IGZhbHNlOwogCiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgIWZhbGxiYWNrUmFuZ2VzQXQoaSkuaXNOdWxsKCk7ICsr
aSkgewotICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogc2ltcGxlRm9udERhdGEgPSBmYWxs
YmFja1Jhbmdlc0F0KGkpLmZvbnREYXRhRm9yQ2hhcmFjdGVyKGJhc2VDaGFyYWN0ZXIpOwotICAg
ICAgICBpZiAoIXNpbXBsZUZvbnREYXRhKQorICAgICAgICBjb25zdCBGb250KiBmb250ID0gZmFs
bGJhY2tSYW5nZXNBdChpKS5mb250Rm9yQ2hhcmFjdGVyKGJhc2VDaGFyYWN0ZXIpOworICAgICAg
ICBpZiAoIWZvbnQpCiAgICAgICAgICAgICBjb250aW51ZTsKICNpZiBQTEFURk9STShJT1MpCi0g
ICAgICAgIGlmIChiYXNlQ2hhcmFjdGVyID49IDB4MDYwMCAmJiBiYXNlQ2hhcmFjdGVyIDw9IDB4
MDZmZiAmJiBzaW1wbGVGb250RGF0YS0+c2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKCkpCisgICAg
ICAgIGlmIChiYXNlQ2hhcmFjdGVyID49IDB4MDYwMCAmJiBiYXNlQ2hhcmFjdGVyIDw9IDB4MDZm
ZiAmJiBmb250LT5zaG91bGROb3RCZVVzZWRGb3JBcmFiaWMoKSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogI2VuZGlmCiAgICAgICAgIGlmICh2YXJpYW50ID09IE5vcm1hbFZhcmlhbnQpIHsKLSAg
ICAgICAgICAgIGlmIChzaW1wbGVGb250RGF0YS0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24o
KSA9PSBWZXJ0aWNhbCkgewotICAgICAgICAgICAgICAgIGlmIChpc0NKS0lkZW9ncmFwaE9yU3lt
Ym9sKGJhc2VDaGFyYWN0ZXIpICYmICFzaW1wbGVGb250RGF0YS0+aGFzVmVydGljYWxHbHlwaHMo
KSkgeworICAgICAgICAgICAgaWYgKGZvbnQtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkg
PT0gVmVydGljYWwpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNDSktJZGVvZ3JhcGhPclN5bWJv
bChiYXNlQ2hhcmFjdGVyKSAmJiAhZm9udC0+aGFzVmVydGljYWxHbHlwaHMoKSkgewogICAgICAg
ICAgICAgICAgICAgICB2YXJpYW50ID0gQnJva2VuSWRlb2dyYXBoVmFyaWFudDsKLSAgICAgICAg
ICAgICAgICAgICAgc2ltcGxlRm9udERhdGEgPSBzaW1wbGVGb250RGF0YS0+YnJva2VuSWRlb2dy
YXBoRm9udERhdGEoKS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgZm9udCA9IGZvbnQtPmJy
b2tlbklkZW9ncmFwaEZvbnQoKS5nZXQoKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1f
Zm9udERlc2NyaXB0aW9uLm5vbkNKS0dseXBoT3JpZW50YXRpb24oKSA9PSBOb25DSktHbHlwaE9y
aWVudGF0aW9uVmVydGljYWxSaWdodCkgewotICAgICAgICAgICAgICAgICAgICBTaW1wbGVGb250
RGF0YSogdmVydGljYWxSaWdodEZvbnREYXRhID0gc2ltcGxlRm9udERhdGEtPnZlcnRpY2FsUmln
aHRPcmllbnRhdGlvbkZvbnREYXRhKCkuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIEdseXBo
IHZlcnRpY2FsUmlnaHRHbHlwaCA9IHZlcnRpY2FsUmlnaHRGb250RGF0YS0+Z2x5cGhGb3JDaGFy
YWN0ZXIoYmFzZUNoYXJhY3Rlcik7CisgICAgICAgICAgICAgICAgICAgIEZvbnQqIHZlcnRpY2Fs
UmlnaHRGb250ID0gZm9udC0+dmVydGljYWxSaWdodE9yaWVudGF0aW9uRm9udCgpLmdldCgpOwor
ICAgICAgICAgICAgICAgICAgICBHbHlwaCB2ZXJ0aWNhbFJpZ2h0R2x5cGggPSB2ZXJ0aWNhbFJp
Z2h0Rm9udC0+Z2x5cGhGb3JDaGFyYWN0ZXIoYmFzZUNoYXJhY3Rlcik7CiAgICAgICAgICAgICAg
ICAgICAgIGlmICh2ZXJ0aWNhbFJpZ2h0R2x5cGggPT0gYmFzZUNoYXJhY3RlckdseXBoRGF0YS5n
bHlwaCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gdmVydGljYWxS
aWdodEZvbnREYXRhOworICAgICAgICAgICAgICAgICAgICAgICAgZm9udCA9IHZlcnRpY2FsUmln
aHRGb250OwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIFNp
bXBsZUZvbnREYXRhKiB1cHJpZ2h0Rm9udERhdGEgPSBzaW1wbGVGb250RGF0YS0+dXByaWdodE9y
aWVudGF0aW9uRm9udERhdGEoKS5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgR2x5cGggdXBy
aWdodEdseXBoID0gdXByaWdodEZvbnREYXRhLT5nbHlwaEZvckNoYXJhY3RlcihiYXNlQ2hhcmFj
dGVyKTsKKyAgICAgICAgICAgICAgICAgICAgRm9udCogdXByaWdodEZvbnQgPSBmb250LT51cHJp
Z2h0T3JpZW50YXRpb25Gb250KCkuZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgIEdseXBoIHVw
cmlnaHRHbHlwaCA9IHVwcmlnaHRGb250LT5nbHlwaEZvckNoYXJhY3RlcihiYXNlQ2hhcmFjdGVy
KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHVwcmlnaHRHbHlwaCAhPSBiYXNlQ2hhcmFjdGVy
R2x5cGhEYXRhLmdseXBoKQotICAgICAgICAgICAgICAgICAgICAgICAgc2ltcGxlRm9udERhdGEg
PSB1cHJpZ2h0Rm9udERhdGE7CisgICAgICAgICAgICAgICAgICAgICAgICBmb250ID0gdXByaWdo
dEZvbnQ7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgaWYgKGNvbnN0IFNpbXBsZUZvbnREYXRhKiB2YXJpYW50Rm9udERhdGEg
PSBzaW1wbGVGb250RGF0YS0+dmFyaWFudEZvbnREYXRhKG1fZm9udERlc2NyaXB0aW9uLCB2YXJp
YW50KS5nZXQoKSkKLSAgICAgICAgICAgICAgICBzaW1wbGVGb250RGF0YSA9IHZhcmlhbnRGb250
RGF0YTsKKyAgICAgICAgICAgIGlmIChjb25zdCBGb250KiB2YXJpYW50Rm9udCA9IGZvbnQtPnZh
cmlhbnRGb250KG1fZm9udERlc2NyaXB0aW9uLCB2YXJpYW50KS5nZXQoKSkKKyAgICAgICAgICAg
ICAgICBmb250ID0gdmFyaWFudEZvbnQ7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoc2ltcGxl
Rm9udERhdGEgPT0gYmFzZUNoYXJhY3RlckdseXBoRGF0YS5mb250RGF0YSkKLSAgICAgICAgICAg
IHRyaWVkQmFzZUNoYXJhY3RlckZvbnREYXRhID0gdHJ1ZTsKKyAgICAgICAgaWYgKGZvbnQgPT0g
YmFzZUNoYXJhY3RlckdseXBoRGF0YS5mb250KQorICAgICAgICAgICAgdHJpZWRCYXNlQ2hhcmFj
dGVyRm9udCA9IHRydWU7CiAKLSAgICAgICAgaWYgKHNpbXBsZUZvbnREYXRhLT5jYW5SZW5kZXJD
b21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjaGFyYWN0ZXJzLCBsZW5ndGgpKQotICAgICAgICAg
ICAgcmV0dXJuIHNpbXBsZUZvbnREYXRhOworICAgICAgICBpZiAoZm9udC0+Y2FuUmVuZGVyQ29t
YmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY2hhcmFjdGVycywgbGVuZ3RoKSkKKyAgICAgICAgICAg
IHJldHVybiBmb250OwogICAgIH0KIAotICAgIGlmICghdHJpZWRCYXNlQ2hhcmFjdGVyRm9udERh
dGEgJiYgYmFzZUNoYXJhY3RlckdseXBoRGF0YS5mb250RGF0YSAmJiBiYXNlQ2hhcmFjdGVyR2x5
cGhEYXRhLmZvbnREYXRhLT5jYW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjaGFy
YWN0ZXJzLCBsZW5ndGgpKQotICAgICAgICByZXR1cm4gYmFzZUNoYXJhY3RlckdseXBoRGF0YS5m
b250RGF0YTsKKyAgICBpZiAoIXRyaWVkQmFzZUNoYXJhY3RlckZvbnQgJiYgYmFzZUNoYXJhY3Rl
ckdseXBoRGF0YS5mb250ICYmIGJhc2VDaGFyYWN0ZXJHbHlwaERhdGEuZm9udC0+Y2FuUmVuZGVy
Q29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY2hhcmFjdGVycywgbGVuZ3RoKSkKKyAgICAgICAg
cmV0dXJuIGJhc2VDaGFyYWN0ZXJHbHlwaERhdGEuZm9udDsKIAotICAgIHJldHVybiBTaW1wbGVG
b250RGF0YTo6c3lzdGVtRmFsbGJhY2soKTsKKyAgICByZXR1cm4gRm9udDo6c3lzdGVtRmFsbGJh
Y2soKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJl
ZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcAkocmV2aXNp
b24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUv
Rm9udENhY2hlRnJlZVR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw5ICsyMiw5IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCiAKKyNpbmNsdWRlICJG
b250LmgiCiAjaW5jbHVkZSAiT3duUHRyQ2Fpcm8uaCIKICNpbmNsdWRlICJSZWZQdHJDYWlyby5o
IgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5jbHVkZSAiVVRGMTZVQ2hhcjMySXRl
cmF0b3IuaCIKICNpbmNsdWRlIDxjYWlyby1mdC5oPgogI2luY2x1ZGUgPGNhaXJvLmg+CkBAIC04
MCw3ICs4MCw3IEBAIEZjUGF0dGVybiogZmluZEJlc3RGb250R2l2ZW5GYWxsYmFja3MoY28KICAg
ICByZXR1cm4gRmNGb250U2V0TWF0Y2goMCwgc2V0cywgMSwgcGF0dGVybiwgJmZvbnRDb25maWdS
ZXN1bHQpOwogfQogCi1SZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6c3lzdGVtRmFs
bGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGNv
bnN0IFNpbXBsZUZvbnREYXRhKiBvcmlnaW5hbEZvbnREYXRhLCBib29sLCBjb25zdCBVQ2hhciog
Y2hhcmFjdGVycywgaW50IGxlbmd0aCkKK1JlZlB0cjxGb250PiBGb250Q2FjaGU6OnN5c3RlbUZh
bGxiYWNrRm9yQ2hhcmFjdGVycyhjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBj
b25zdCBGb250KiBvcmlnaW5hbEZvbnREYXRhLCBib29sLCBjb25zdCBVQ2hhciogY2hhcmFjdGVy
cywgaW50IGxlbmd0aCkKIHsKICAgICBSZWZQdHI8RmNQYXR0ZXJuPiBwYXR0ZXJuID0gYWRvcHRS
ZWYoY3JlYXRlRm9udENvbmZpZ1BhdHRlcm5Gb3JDaGFyYWN0ZXJzKGNoYXJhY3RlcnMsIGxlbmd0
aCkpOwogICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnREYXRhID0gb3JpZ2luYWxGb250
RGF0YS0+cGxhdGZvcm1EYXRhKCk7CkBAIC05OSw3ICs5OSw3IEBAIFJlZlB0cjxTaW1wbGVGb250
RGF0YT4gRm9udENhY2hlOjpzeXN0ZW0KICAgICByZXR1cm4gZm9udEZvclBsYXRmb3JtRGF0YShh
bHRlcm5hdGVGb250RGF0YSk7CiB9CiAKLVJlZjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjps
YXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0
aW9uKQorUmVmPEZvbnQ+IEZvbnRDYWNoZTo6bGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBG
b250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikKIHsKICAgICAvLyBXZSB3YW50IHRvIHJl
dHVybiBhIGZhbGxiYWNrIGZvbnQgaGVyZSwgb3RoZXJ3aXNlIHRoZSBsb2dpYyBwcmV2ZW50aW5n
IEZvbnRDb25maWcKICAgICAvLyBtYXRjaGVzIGZvciBub24tZmFsbGJhY2sgZm9udHMgbWlnaHQg
cmV0dXJuIDAuIFNlZSBpc0ZhbGxiYWNrRm9udEFsbG93ZWQuCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9HbHlwaFBhZ2VUcmVlTm9kZUZyZWVUeXBlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlw
ZS9HbHlwaFBhZ2VUcmVlTm9kZUZyZWVUeXBlLmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvR2x5cGhQYWdlVHJlZU5vZGVG
cmVlVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJHbHlwaFBhZ2UuaCIKIAotI2luY2x1ZGUgIlNpbXBsZUZvbnRE
YXRhLmgiCisjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIlVURjE2VUNoYXIzMkl0ZXJhdG9y
LmgiCiAjaW5jbHVkZSA8Y2Fpcm8tZnQuaD4KICNpbmNsdWRlIDxjYWlyby5oPgpAQCAtMzksNyAr
MzksNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wgR2x5cGhQYWdlOjpmaWxsKHVu
c2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBi
dWZmZXJMZW5ndGgsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSkKK2Jvb2wgR2x5cGhQ
YWdlOjpmaWxsKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVy
LCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IEZvbnQqIGZvbnREYXRhKQogewogICAgIGNh
aXJvX3NjYWxlZF9mb250X3QqIHNjYWxlZEZvbnQgPSBmb250RGF0YS0+cGxhdGZvcm1EYXRhKCku
c2NhbGVkRm9udCgpOwogICAgIEFTU0VSVChzY2FsZWRGb250KTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL1NpbXBsZUZvbnREYXRhRnJlZVR5cGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBl
L1NpbXBsZUZvbnREYXRhRnJlZVR5cGUuY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9TaW1wbGVGb250RGF0YUZyZWVUeXBl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogICovCiAKICNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgorI2luY2x1ZGUgIkZvbnQuaCIK
IAogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgpA
QCAtNTEsNyArNTEsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgU2ltcGxlRm9u
dERhdGE6OnBsYXRmb3JtSW5pdCgpCit2b2lkIEZvbnQ6OnBsYXRmb3JtSW5pdCgpCiB7CiAgICAg
aWYgKCFtX3BsYXRmb3JtRGF0YS5tX3NpemUpCiAgICAgICAgIHJldHVybjsKQEAgLTkzLDE3ICs5
MywxNyBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUluaXQoKQogICAgIG1fc3ludGhl
dGljQm9sZE9mZnNldCA9IG1fcGxhdGZvcm1EYXRhLnN5bnRoZXRpY0JvbGQoKSA/IDEuMGYgOiAw
LmY7CiB9CiAKLXZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpCit2
b2lkIEZvbnQ6OnBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpCiB7CiAgICAgbV9hdmdDaGFyV2lkdGgg
PSAwLmY7CiAgICAgbV9tYXhDaGFyV2lkdGggPSAwLmY7CiAgICAgaW5pdENoYXJXaWR0aHMoKTsK
IH0KIAotUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OnBsYXRmb3Jt
Q3JlYXRlU2NhbGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24sIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAorUGFzc1JlZlB0cjxGb250PiBGb250OjpwbGF0
Zm9ybUNyZWF0ZVNjYWxlZEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2Ny
aXB0aW9uLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3QKIHsKICAgICBBU1NFUlQobV9wbGF0Zm9y
bURhdGEuc2NhbGVkRm9udCgpKTsKLSAgICByZXR1cm4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZShG
b250UGxhdGZvcm1EYXRhKGNhaXJvX3NjYWxlZF9mb250X2dldF9mb250X2ZhY2UobV9wbGF0Zm9y
bURhdGEuc2NhbGVkRm9udCgpKSwKKyAgICByZXR1cm4gRm9udDo6Y3JlYXRlKEZvbnRQbGF0Zm9y
bURhdGEoY2Fpcm9fc2NhbGVkX2ZvbnRfZ2V0X2ZvbnRfZmFjZShtX3BsYXRmb3JtRGF0YS5zY2Fs
ZWRGb250KCkpLAogICAgICAgICBzY2FsZUZhY3RvciAqIGZvbnREZXNjcmlwdGlvbi5jb21wdXRl
ZFNpemUoKSwKICAgICAgICAgbV9wbGF0Zm9ybURhdGEuc3ludGhldGljQm9sZCgpLAogICAgICAg
ICBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNPYmxpcXVlKCksCkBAIC0xMTEsMTIgKzExMSwxMiBA
QCBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0CiAgICAgICAgIGlzQ3Vz
dG9tRm9udCgpLCBmYWxzZSk7CiB9CiAKLXZvaWQgU2ltcGxlRm9udERhdGE6OmRldGVybWluZVBp
dGNoKCkKK3ZvaWQgRm9udDo6ZGV0ZXJtaW5lUGl0Y2goKQogewogICAgIG1fdHJlYXRBc0ZpeGVk
UGl0Y2ggPSBtX3BsYXRmb3JtRGF0YS5pc0ZpeGVkUGl0Y2goKTsKIH0KIAotRmxvYXRSZWN0IFNp
bXBsZUZvbnREYXRhOjpwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAor
RmxvYXRSZWN0IEZvbnQ6OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0
CiB7CiAgICAgaWYgKCFtX3BsYXRmb3JtRGF0YS5zaXplKCkpCiAgICAgICAgIHJldHVybiBGbG9h
dFJlY3QoKTsKQEAgLTEzMSw3ICsxMzEsNyBAQCBGbG9hdFJlY3QgU2ltcGxlRm9udERhdGE6OnBs
YXRmb3JtQm91bmRzCiAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwogfQogCi1mbG9hdCBTaW1wbGVG
b250RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAorZmxvYXQg
Rm9udDo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAogewogICAgIGlm
ICghbV9wbGF0Zm9ybURhdGEuc2l6ZSgpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTE0Nyw3ICsx
NDcsNyBAQCBmbG9hdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdsCiB9CiAKICNp
ZiBVU0UoSEFSRkJVWlopCi1ib29sIFNpbXBsZUZvbnREYXRhOjpjYW5SZW5kZXJDb21iaW5pbmdD
aGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkg
Y29uc3QKK2Jvb2wgRm9udDo6Y2FuUmVuZGVyQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpIGNvbnN0CiB7CiAgICAgaWYgKCFt
X2NvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlU3VwcG9ydCkKICAgICAgICAgbV9jb21iaW5pbmdD
aGFyYWN0ZXJTZXF1ZW5jZVN1cHBvcnQgPSBzdGQ6Om1ha2VfdW5pcXVlPEhhc2hNYXA8U3RyaW5n
LCBib29sPj4oKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZi
dXp6L0hhcmZCdXp6RmFjZUNhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6ekZhY2VDYWlyby5jcHAJKHJldmlzaW9u
IDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hh
cmZCdXp6RmFjZUNhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTAgKzMyLDEwIEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSGFyZkJ1enpGYWNlLmgiCiAKKyNpbmNsdWRl
ICJGb250LmgiCiAjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgogI2luY2x1ZGUgIkdseXBo
QnVmZmVyLmgiCiAjaW5jbHVkZSAiSGFyZkJ1enpTaGFwZXIuaCIKLSNpbmNsdWRlICJTaW1wbGVG
b250RGF0YS5oIgogI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgogI2luY2x1ZGUgPGNhaXJvLWZ0
Lmg+CiAjaW5jbHVkZSA8Y2Fpcm8uaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6RmFjZUNvcmVUZXh0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6ekZhY2VDb3Jl
VGV4dC5jcHAJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6RmFjZUNvcmVUZXh0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzEsOSArMzEsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkhhcmZCdXp6
RmFjZS5oIgogCisjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEu
aCIKICNpbmNsdWRlICJIYXJmQnV6elNoYXBlci5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRh
LmgiCiAjaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+
CiAjaW5jbHVkZSA8aGIuaD4KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2hhcGVyLmNwcAkocmV2aXNp
b24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enov
SGFyZkJ1enpTaGFwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3IEBAIHN0YXRp
YyBpbmxpbmUgZmxvYXQgaGFyZkJ1enpQb3NpdGlvblRvRmwKICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8ZmxvYXQ+KHZhbHVlKSAvICgxIDw8IDE2KTsKIH0KIAotSGFyZkJ1enpTaGFwZXI6OkhhcmZC
dXp6UnVuOjpIYXJmQnV6elJ1bihjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsIHVuc2ln
bmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIG51bUNoYXJhY3RlcnMsIFRleHREaXJlY3Rpb24gZGly
ZWN0aW9uLCBoYl9zY3JpcHRfdCBzY3JpcHQpCitIYXJmQnV6elNoYXBlcjo6SGFyZkJ1enpSdW46
OkhhcmZCdXp6UnVuKGNvbnN0IEZvbnQqIGZvbnREYXRhLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1
bnNpZ25lZCBudW1DaGFyYWN0ZXJzLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgaGJfc2NyaXB0
X3Qgc2NyaXB0KQogICAgIDogbV9mb250RGF0YShmb250RGF0YSkKICAgICAsIG1fc3RhcnRJbmRl
eChzdGFydEluZGV4KQogICAgICwgbV9udW1DaGFyYWN0ZXJzKG51bUNoYXJhY3RlcnMpCkBAIC00
MDEsNyArNDAxLDcgQEAgYm9vbCBIYXJmQnV6elNoYXBlcjo6Y29sbGVjdEhhcmZCdXp6UnVucwog
ICAgIGlmICghaXRlcmF0b3IuY29uc3VtZShjaGFyYWN0ZXIsIGNsdXN0ZXJMZW5ndGgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBjb25zdCBTaW1wbGVGb250RGF0YSogbmV4dEZvbnRE
YXRhID0gbV9mb250LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyLCBmYWxzZSkuZm9u
dERhdGE7CisgICAgY29uc3QgRm9udCogbmV4dEZvbnREYXRhID0gbV9mb250LT5nbHlwaERhdGFG
b3JDaGFyYWN0ZXIoY2hhcmFjdGVyLCBmYWxzZSkuZm9udDsKICAgICBVRXJyb3JDb2RlIGVycm9y
Q29kZSA9IFVfWkVST19FUlJPUjsKICAgICBVU2NyaXB0Q29kZSBuZXh0U2NyaXB0ID0gdXNjcmlw
dF9nZXRTY3JpcHQoY2hhcmFjdGVyLCAmZXJyb3JDb2RlKTsKICAgICBpZiAoVV9GQUlMVVJFKGVy
cm9yQ29kZSkpCkBAIC00MDksOSArNDA5LDkgQEAgYm9vbCBIYXJmQnV6elNoYXBlcjo6Y29sbGVj
dEhhcmZCdXp6UnVucwogCiAgICAgZG8gewogICAgICAgICBjb25zdCBVQ2hhciogY3VycmVudENo
YXJhY3RlclBvc2l0aW9uID0gaXRlcmF0b3IuY2hhcmFjdGVycygpOwotICAgICAgICBjb25zdCBT
aW1wbGVGb250RGF0YSogY3VycmVudEZvbnREYXRhID0gbmV4dEZvbnREYXRhOworICAgICAgICBj
b25zdCBGb250KiBjdXJyZW50Rm9udERhdGEgPSBuZXh0Rm9udERhdGE7CiAgICAgICAgIGlmICgh
Y3VycmVudEZvbnREYXRhKQotICAgICAgICAgICAgY3VycmVudEZvbnREYXRhID0gJm1fZm9udC0+
cHJpbWFyeUZvbnREYXRhKCk7CisgICAgICAgICAgICBjdXJyZW50Rm9udERhdGEgPSAmbV9mb250
LT5wcmltYXJ5Rm9udCgpOwogICAgICAgICBVU2NyaXB0Q29kZSBjdXJyZW50U2NyaXB0ID0gbmV4
dFNjcmlwdDsKIAogICAgICAgICBmb3IgKGl0ZXJhdG9yLmFkdmFuY2UoY2x1c3Rlckxlbmd0aCk7
IGl0ZXJhdG9yLmNvbnN1bWUoY2hhcmFjdGVyLCBjbHVzdGVyTGVuZ3RoKTsgaXRlcmF0b3IuYWR2
YW5jZShjbHVzdGVyTGVuZ3RoKSkgewpAQCAtNDM1LDkgKzQzNSw5IEBAIGJvb2wgSGFyZkJ1enpT
aGFwZXI6OmNvbGxlY3RIYXJmQnV6elJ1bnMKICAgICAgICAgICAgICAgICAgICAgY2x1c3Rlckxl
bmd0aCA9IG1hcmtMZW5ndGg7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBuZXh0Rm9udERhdGEgPSBtX2ZvbnQtPmdseXBo
RGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIsIGZhbHNlKS5mb250RGF0YTsKKyAgICAgICAgICAg
ICAgICBuZXh0Rm9udERhdGEgPSBtX2ZvbnQtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0
ZXIsIGZhbHNlKS5mb250OwogICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgbmV4
dEZvbnREYXRhID0gbV9mb250LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyLCBmYWxz
ZSkuZm9udERhdGE7CisgICAgICAgICAgICAgICAgbmV4dEZvbnREYXRhID0gbV9mb250LT5nbHlw
aERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyLCBmYWxzZSkuZm9udDsKIAogICAgICAgICAgICAg
bmV4dFNjcmlwdCA9IHVzY3JpcHRfZ2V0U2NyaXB0KGNoYXJhY3RlciwgJmVycm9yQ29kZSk7CiAg
ICAgICAgICAgICBpZiAoVV9GQUlMVVJFKGVycm9yQ29kZSkpCkBAIC00NjcsNyArNDY3LDcgQEAg
Ym9vbCBIYXJmQnV6elNoYXBlcjo6c2hhcGVIYXJmQnV6elJ1bnMoYgogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX2hhcmZCdXp6UnVucy5zaXplKCk7ICsraSkgewogICAgICAgICB1bnNp
Z25lZCBydW5JbmRleCA9IG1fcnVuLnJ0bCgpID8gbV9oYXJmQnV6elJ1bnMuc2l6ZSgpIC0gaSAt
IDEgOiBpOwogICAgICAgICBIYXJmQnV6elJ1biogY3VycmVudFJ1biA9IG1faGFyZkJ1enpSdW5z
W3J1bkluZGV4XS5nZXQoKTsKLSAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGN1cnJlbnRG
b250RGF0YSA9IGN1cnJlbnRSdW4tPmZvbnREYXRhKCk7CisgICAgICAgIGNvbnN0IEZvbnQqIGN1
cnJlbnRGb250RGF0YSA9IGN1cnJlbnRSdW4tPmZvbnREYXRhKCk7CiAgICAgICAgIGlmIChjdXJy
ZW50Rm9udERhdGEtPmlzU1ZHRm9udCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBA
IC00ODUsNyArNDg1LDcgQEAgYm9vbCBIYXJmQnV6elNoYXBlcjo6c2hhcGVIYXJmQnV6elJ1bnMo
YgogCiAgICAgICAgIGlmIChtX2ZvbnQtPmlzU21hbGxDYXBzKCkgJiYgdV9pc2xvd2VyKG1fbm9y
bWFsaXplZEJ1ZmZlcltjdXJyZW50UnVuLT5zdGFydEluZGV4KCldKSkgewogICAgICAgICAgICAg
U3RyaW5nIHVwcGVyVGV4dCA9IFN0cmluZyhtX25vcm1hbGl6ZWRCdWZmZXIuZ2V0KCkgKyBjdXJy
ZW50UnVuLT5zdGFydEluZGV4KCksIGN1cnJlbnRSdW4tPm51bUNoYXJhY3RlcnMoKSkudXBwZXIo
KTsKLSAgICAgICAgICAgIGN1cnJlbnRGb250RGF0YSA9IG1fZm9udC0+Z2x5cGhEYXRhRm9yQ2hh
cmFjdGVyKHVwcGVyVGV4dFswXSwgZmFsc2UsIFNtYWxsQ2Fwc1ZhcmlhbnQpLmZvbnREYXRhOwor
ICAgICAgICAgICAgY3VycmVudEZvbnREYXRhID0gbV9mb250LT5nbHlwaERhdGFGb3JDaGFyYWN0
ZXIodXBwZXJUZXh0WzBdLCBmYWxzZSwgU21hbGxDYXBzVmFyaWFudCkuZm9udDsKICAgICAgICAg
ICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gU3RyaW5nVmlldyh1cHBlclRleHQpLnVwY29u
dmVydGVkQ2hhcmFjdGVycygpOwogICAgICAgICAgICAgaGJfYnVmZmVyX2FkZF91dGYxNihoYXJm
QnV6ekJ1ZmZlci5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MTZfdCo+KGNoYXJh
Y3RlcnMpLCBjdXJyZW50UnVuLT5udW1DaGFyYWN0ZXJzKCksIDAsIGN1cnJlbnRSdW4tPm51bUNo
YXJhY3RlcnMoKSk7CiAgICAgICAgIH0gZWxzZQpAQCAtNTE0LDcgKzUxNCw3IEBAIGJvb2wgSGFy
ZkJ1enpTaGFwZXI6OnNoYXBlSGFyZkJ1enpSdW5zKGIKIAogdm9pZCBIYXJmQnV6elNoYXBlcjo6
c2V0R2x5cGhQb3NpdGlvbnNGb3JIYXJmQnV6elJ1bihIYXJmQnV6elJ1biogY3VycmVudFJ1biwg
aGJfYnVmZmVyX3QqIGhhcmZCdXp6QnVmZmVyKQogewotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRh
KiBjdXJyZW50Rm9udERhdGEgPSBjdXJyZW50UnVuLT5mb250RGF0YSgpOworICAgIGNvbnN0IEZv
bnQqIGN1cnJlbnRGb250RGF0YSA9IGN1cnJlbnRSdW4tPmZvbnREYXRhKCk7CiAgICAgaGJfZ2x5
cGhfaW5mb190KiBnbHlwaEluZm9zID0gaGJfYnVmZmVyX2dldF9nbHlwaF9pbmZvcyhoYXJmQnV6
ekJ1ZmZlciwgMCk7CiAgICAgaGJfZ2x5cGhfcG9zaXRpb25fdCogZ2x5cGhQb3NpdGlvbnMgPSBo
Yl9idWZmZXJfZ2V0X2dseXBoX3Bvc2l0aW9ucyhoYXJmQnV6ekJ1ZmZlciwgMCk7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2hhcGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1
enovSGFyZkJ1enpTaGFwZXIuaAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtNDQsOCArNDQsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEZvbnQ7
CiBjbGFzcyBGb250Q2FzY2FkZTsKLWNsYXNzIFNpbXBsZUZvbnREYXRhOwogCiBjbGFzcyBIYXJm
QnV6elNoYXBlciB7CiBwdWJsaWM6CkBAIC02Niw3ICs2Niw3IEBAIHB1YmxpYzoKIHByaXZhdGU6
CiAgICAgY2xhc3MgSGFyZkJ1enpSdW4gewogICAgIHB1YmxpYzoKLSAgICAgICAgSGFyZkJ1enpS
dW4oY29uc3QgU2ltcGxlRm9udERhdGEqLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBu
dW1DaGFyYWN0ZXJzLCBUZXh0RGlyZWN0aW9uLCBoYl9zY3JpcHRfdCk7CisgICAgICAgIEhhcmZC
dXp6UnVuKGNvbnN0IEZvbnQqLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBudW1DaGFy
YWN0ZXJzLCBUZXh0RGlyZWN0aW9uLCBoYl9zY3JpcHRfdCk7CiAKICAgICAgICAgdm9pZCBhcHBs
eVNoYXBlUmVzdWx0KGhiX2J1ZmZlcl90Kik7CiAgICAgICAgIHZvaWQgc2V0R2x5cGhBbmRQb3Np
dGlvbnModW5zaWduZWQgaW5kZXgsIHVpbnQxNl90IGdseXBoSWQsIGZsb2F0IGFkdmFuY2UsIGZs
b2F0IG9mZnNldFgsIGZsb2F0IG9mZnNldFkpOwpAQCAtNzUsNyArNzUsNyBAQCBwcml2YXRlOgog
ICAgICAgICBpbnQgY2hhcmFjdGVySW5kZXhGb3JYUG9zaXRpb24oZmxvYXQgdGFyZ2V0WCk7CiAg
ICAgICAgIGZsb2F0IHhQb3NpdGlvbkZvck9mZnNldCh1bnNpZ25lZCBvZmZzZXQpOwogCi0gICAg
ICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSgpIHsgcmV0dXJuIG1fZm9udERhdGE7
IH0KKyAgICAgICAgY29uc3QgRm9udCogZm9udERhdGEoKSB7IHJldHVybiBtX2ZvbnREYXRhOyB9
CiAgICAgICAgIHVuc2lnbmVkIHN0YXJ0SW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0SW5k
ZXg7IH0KICAgICAgICAgdW5zaWduZWQgbnVtQ2hhcmFjdGVycygpIGNvbnN0IHsgcmV0dXJuIG1f
bnVtQ2hhcmFjdGVyczsgfQogICAgICAgICB1bnNpZ25lZCBudW1HbHlwaHMoKSBjb25zdCB7IHJl
dHVybiBtX251bUdseXBoczsgfQpAQCAtODgsNyArODgsNyBAQCBwcml2YXRlOgogICAgICAgICBo
Yl9zY3JpcHRfdCBzY3JpcHQoKSB7IHJldHVybiBtX3NjcmlwdDsgfQogCiAgICAgcHJpdmF0ZToK
LSAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIG1fZm9udERhdGE7CisgICAgICAgIGNvbnN0
IEZvbnQqIG1fZm9udERhdGE7CiAgICAgICAgIHVuc2lnbmVkIG1fc3RhcnRJbmRleDsKICAgICAg
ICAgc2l6ZV90IG1fbnVtQ2hhcmFjdGVyczsKICAgICAgICAgdW5zaWduZWQgbV9udW1HbHlwaHM7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvRm9udENhY2hlSU9T
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9G
b250Q2FjaGVJT1MubW0JKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2lvcy9Gb250Q2FjaGVJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTczLDcg
KzczLDcgQEAgc3RhdGljIENGQ2hhcmFjdGVyU2V0UmVmIHBob25lRmFsbGJhY2tDaAogICAgIHJl
dHVybiBjaGFyYWN0ZXJTZXQ7CiB9CiAKLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRD
YWNoZTo6Z2V0U3lzdGVtRm9udEZhbGxiYWNrRm9yQ2hhcmFjdGVycyhjb25zdCBGb250RGVzY3Jp
cHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBTaW1wbGVGb250RGF0YSogb3JpZ2luYWxGb250RGF0
YSwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCitQYXNzUmVmUHRyPEZvbnQ+
IEZvbnRDYWNoZTo6Z2V0U3lzdGVtRm9udEZhbGxiYWNrRm9yQ2hhcmFjdGVycyhjb25zdCBGb250
RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBGb250KiBvcmlnaW5hbEZvbnREYXRhLCBj
b25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKIHsKICAgICBjb25zdCBGb250UGxh
dGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEgPSBvcmlnaW5hbEZvbnREYXRhLT5wbGF0Zm9ybURhdGEo
KTsKICAgICBDVEZvbnRSZWYgY3RGb250ID0gcGxhdGZvcm1EYXRhLmZvbnQoKTsKQEAgLTE5NCw3
ICsxOTQsNyBAQCBzdGF0aWMgTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQgbGFuZ3VhZ2VTcGVjCiAgICAg
cmV0dXJuIExhbmd1YWdlU3BlY2lmaWNGb250OjpOb25lOwogfQogCi1SZWZQdHI8U2ltcGxlRm9u
dERhdGE+IEZvbnRDYWNoZTo6c3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBvcmlnaW5hbEZv
bnREYXRhLCBib29sLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKK1JlZlB0
cjxGb250PiBGb250Q2FjaGU6OnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhjb25zdCBGb250
RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBGb250KiBvcmlnaW5hbEZvbnREYXRhLCBi
b29sLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKIHsKICAgICAvLyBVbmxp
a2UgT1MgWCwgb3VyIGZhbGxiYWNrIGZvbnQgb24gaVBob25lIGlzIEFyaWFsIFVuaWNvZGUsIHdo
aWNoIGRvZXNuJ3QgaGF2ZSBzb21lIGFwcGxlLXNwZWNpZmljIGdseXBocyBsaWtlIEY4RkYuCiAg
ICAgLy8gRmFsbCBiYWNrIHRvIHRoZSBBcHBsZSBGYWxsYmFjayBmb250IGluIHRoaXMgY2FzZS4K
QEAgLTIyMCw3ICsyMjAsNyBAQCBSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6c3lz
dGVtCiAgICAgaWYgKGxlbmd0aCA+IDApCiAgICAgICAgIGxhbmd1YWdlU3BlY2lmaWNGb250ID0g
bGFuZ3VhZ2VTcGVjaWZpY0ZhbGxiYWNrRm9udChjKTsKIAotICAgIFJlZlB0cjxTaW1wbGVGb250
RGF0YT4gc2ltcGxlRm9udERhdGE7CisgICAgUmVmUHRyPEZvbnQ+IGZvbnQ7CiAKICAgICBzd2l0
Y2ggKGxhbmd1YWdlU3BlY2lmaWNGb250KSB7CiAgICAgY2FzZSBMYW5ndWFnZVNwZWNpZmljRm9u
dDo6Q2hpbmVzZUphcGFuZXNlOiB7CkBAIC0yOTgsNDMgKzI5OCw0MyBAQCBSZWZQdHI8U2ltcGxl
Rm9udERhdGE+IEZvbnRDYWNoZTo6c3lzdGVtCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAot
ICAgICAgICBzaW1wbGVGb250RGF0YSA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGlzRm9u
dFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gKmNqa0JvbGRbcHJlZmVycmVkQ0pL
Rm9udF0gOiAqY2prUGxhaW5bcHJlZmVycmVkQ0pLRm9udF0sIGZhbHNlKTsKKyAgICAgICAgZm9u
dCA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRp
b24ud2VpZ2h0KCkpID8gKmNqa0JvbGRbcHJlZmVycmVkQ0pLRm9udF0gOiAqY2prUGxhaW5bcHJl
ZmVycmVkQ0pLRm9udF0sIGZhbHNlKTsKICAgICAgICAgYm9vbCB1c2VTZWNvbmRhcnlGb250ID0g
dHJ1ZTsKLSAgICAgICAgaWYgKHNpbXBsZUZvbnREYXRhKSB7CisgICAgICAgIGlmIChmb250KSB7
CiAgICAgICAgICAgICBDR0dseXBoIGdseXBoc1syXTsKICAgICAgICAgICAgIC8vIENHRm9udEdl
dEdseXBoc0ZvclVuaWNoYXJzIHRha2VzIFVURi0xNiBidWZmZXIuIFNob3VsZCBvbmx5IGJlIDEg
Y29kZXBvaW50IGJ1dCBzaW5jZSB3ZSBtYXkgcGFzcyBpbiB0d28gVVRGLTE2IGNoYXJhY3RlcnMs
CiAgICAgICAgICAgICAvLyBtYWtlIHJvb20gZm9yIDIgZ2x5cGhzIGp1c3QgdG8gYmUgc2FmZS4K
LSAgICAgICAgICAgIENHRm9udEdldEdseXBoc0ZvclVuaWNoYXJzKHNpbXBsZUZvbnREYXRhLT5w
bGF0Zm9ybURhdGEoKS5jZ0ZvbnQoKSwgY2hhcmFjdGVycywgZ2x5cGhzLCBsZW5ndGgpOworICAg
ICAgICAgICAgQ0dGb250R2V0R2x5cGhzRm9yVW5pY2hhcnMoZm9udC0+cGxhdGZvcm1EYXRhKCku
Y2dGb250KCksIGNoYXJhY3RlcnMsIGdseXBocywgbGVuZ3RoKTsKIAogICAgICAgICAgICAgdXNl
U2Vjb25kYXJ5Rm9udCA9IChnbHlwaHNbMF0gPT0gMCk7CiAgICAgICAgIH0KIAogICAgICAgICBp
ZiAodXNlU2Vjb25kYXJ5Rm9udCkKLSAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gZm9udEZv
ckZhbWlseShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQo
KSkgPyAqY2prQm9sZFtzZWNvbmRhcnlDSktGb250XSA6ICpjamtQbGFpbltzZWNvbmRhcnlDSktG
b250XSwgZmFsc2UpOworICAgICAgICAgICAgZm9udCA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRp
b24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gKmNqa0JvbGRbc2Vj
b25kYXJ5Q0pLRm9udF0gOiAqY2prUGxhaW5bc2Vjb25kYXJ5Q0pLRm9udF0sIGZhbHNlKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6OktvcmVh
bjogewogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBrb3JlYW5Q
bGFpbigiQXBwbGVTREdvdGhpY05lby1NZWRpdW0iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZy
b21MaXRlcmFsKTsKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4g
a29yZWFuQm9sZCgiQXBwbGVTREdvdGhpY05lby1Cb2xkIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1
Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgICAgIHNpbXBsZUZvbnREYXRhID0gZm9udEZvckZhbWlseShk
ZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBrb3Jl
YW5Cb2xkIDoga29yZWFuUGxhaW4sIGZhbHNlKTsKKyAgICAgICAgZm9udCA9IGZvbnRGb3JGYW1p
bHkoZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8g
a29yZWFuQm9sZCA6IGtvcmVhblBsYWluLCBmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
ICAgICBjYXNlIExhbmd1YWdlU3BlY2lmaWNGb250OjpDeXJpbGxpYzogewogICAgICAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBjeXJpbGxpY1BsYWluKCJIZWx2ZXRpY2FO
ZXVlIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CiAgICAgICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGN5cmlsbGljQm9sZCgiSGVsdmV0aWNhTmV1
ZS1Cb2xkIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgICAgIHNp
bXBsZUZvbnREYXRhID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9s
ZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBjeXJpbGxpY0JvbGQgOiBjeXJpbGxpY1BsYWluLCBm
YWxzZSk7CisgICAgICAgIGZvbnQgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBpc0ZvbnRX
ZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/IGN5cmlsbGljQm9sZCA6IGN5cmlsbGlj
UGxhaW4sIGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgTGFuZ3VhZ2VT
cGVjaWZpY0ZvbnQ6OkFyYWJpYzogewogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRv
bWljU3RyaW5nPiBhcmFiaWNQbGFpbigiR2VlemFQcm8iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKTsKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmlu
Zz4gYXJhYmljQm9sZCgiR2VlemFQcm8tQm9sZCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpOwotICAgICAgICBzaW1wbGVGb250RGF0YSA9IGZvbnRGb3JGYW1pbHkoZGVzY3Jp
cHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gYXJhYmljQm9s
ZCA6IGFyYWJpY1BsYWluLCBmYWxzZSk7CisgICAgICAgIGZvbnQgPSBmb250Rm9yRmFtaWx5KGRl
c2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/IGFyYWJp
Y0JvbGQgOiBhcmFiaWNQbGFpbiwgZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
Y2FzZSBMYW5ndWFnZVNwZWNpZmljRm9udDo6SGVicmV3OiB7CiAgICAgICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGhlYnJld1BsYWluKCJBcmlhbEhlYnJldyIsIEF0b21p
Y1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8QXRvbWljU3RyaW5nPiBoZWJyZXdCb2xkKCJBcmlhbEhlYnJldy1Cb2xkIiwgQXRvbWlj
U3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgICAgIHNpbXBsZUZvbnREYXRhID0g
Zm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53
ZWlnaHQoKSkgPyBoZWJyZXdCb2xkIDogaGVicmV3UGxhaW4sIGZhbHNlKTsKKyAgICAgICAgZm9u
dCA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRp
b24ud2VpZ2h0KCkpID8gaGVicmV3Qm9sZCA6IGhlYnJld1BsYWluLCBmYWxzZSk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICBjYXNlIExhbmd1YWdlU3BlY2lmaWNGb250OjpJbmRpYzogewpA
QCAtMzkwLDM2ICszOTAsMzYgQEAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OnN5
c3RlbQogICAgICAgICBpZiAoaW5kaWNQYWdlT3JkZXJJbmRleCA8IChzaXplb2YoaW5kaWNVbmlj
b2RlUGFnZUZvbnRzKSAvIHNpemVvZihBdG9taWNTdHJpbmcqKSkpIHsKICAgICAgICAgICAgIEF0
b21pY1N0cmluZyogaW5kaWNGb250U3RyaW5nID0gaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlv
bi53ZWlnaHQoKSkgPyBpbmRpY1VuaWNvZGVQYWdlRm9udHNCb2xkW2luZGljUGFnZU9yZGVySW5k
ZXhdIDogaW5kaWNVbmljb2RlUGFnZUZvbnRzW2luZGljUGFnZU9yZGVySW5kZXhdOwogICAgICAg
ICAgICAgaWYgKGluZGljRm9udFN0cmluZykKLSAgICAgICAgICAgICAgICBzaW1wbGVGb250RGF0
YSA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sICppbmRpY0ZvbnRTdHJpbmcsIGZhbHNlKTsK
KyAgICAgICAgICAgICAgICBmb250ID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgKmluZGlj
Rm9udFN0cmluZywgZmFsc2UpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAg
ICBjYXNlIExhbmd1YWdlU3BlY2lmaWNGb250OjpUaGFpOiB7CiAgICAgICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHRoYWlQbGFpbigiVGhvbmJ1cmkiLCBBdG9taWNTdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PEF0b21pY1N0cmluZz4gdGhhaUJvbGQoIlRob25idXJpLUJvbGQiLCBBdG9taWNTdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAgc2ltcGxlRm9udERhdGEgPSBmb250Rm9yRmFt
aWx5KGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/
IHRoYWlCb2xkIDogdGhhaVBsYWluLCBmYWxzZSk7CisgICAgICAgIGZvbnQgPSBmb250Rm9yRmFt
aWx5KGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/
IHRoYWlCb2xkIDogdGhhaVBsYWluLCBmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAg
ICBjYXNlIExhbmd1YWdlU3BlY2lmaWNGb250OjpUaWJldGFuOiB7CiAgICAgICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHRpYmV0YW5QbGFpbigiS2FpbGFzYSIsIEF0b21p
Y1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8QXRvbWljU3RyaW5nPiB0aWJldGFuQm9sZCgiS2FpbGFzYS1Cb2xkIiwgQXRvbWljU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgICAgIHNpbXBsZUZvbnREYXRhID0gZm9u
dEZvckZhbWlseShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWln
aHQoKSkgPyB0aWJldGFuQm9sZCA6IHRpYmV0YW5QbGFpbiwgZmFsc2UpOworICAgICAgICBmb250
ID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlv
bi53ZWlnaHQoKSkgPyB0aWJldGFuQm9sZCA6IHRpYmV0YW5QbGFpbiwgZmFsc2UpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgY2FzZSBMYW5ndWFnZVNwZWNpZmljRm9udDo6Q2FuYWRpYW5B
Ym9yaWdpbmFsU3lsbGFiaWM6IHsKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21p
Y1N0cmluZz4gY2FzUGxhaW4oIkV1cGhlbWlhVUNBUyIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpOwogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5n
PiBjYXNCb2xkKCJFdXBoZW1pYVVDQVMtQm9sZCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpOwotICAgICAgICBzaW1wbGVGb250RGF0YSA9IGZvbnRGb3JGYW1pbHkoZGVzY3Jp
cHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gY2FzQm9sZCA6
IGNhc1BsYWluLCBmYWxzZSk7CisgICAgICAgIGZvbnQgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0
aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/IGNhc0JvbGQgOiBj
YXNQbGFpbiwgZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBMYW5ndWFn
ZVNwZWNpZmljRm9udDo6S2htZXI6IHsKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0
b21pY1N0cmluZz4ga2htZXIoIktobWVyU2FuZ2FtTU4iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKTsKLSAgICAgICAgc2ltcGxlRm9udERhdGEgPSBmb250Rm9yRmFtaWx5KGRl
c2NyaXB0aW9uLCBraG1lciwgZmFsc2UpOworICAgICAgICBmb250ID0gZm9udEZvckZhbWlseShk
ZXNjcmlwdGlvbiwga2htZXIsIGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNh
c2UgTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6OkxhbzogewogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8QXRvbWljU3RyaW5nPiBsYW8oIkxhb1NhbmdhbU1OIiwgQXRvbWljU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgICAgIHNpbXBsZUZvbnREYXRhID0gZm9udEZvckZhbWls
eShkZXNjcmlwdGlvbiwgbGFvLCBmYWxzZSk7CisgICAgICAgIGZvbnQgPSBmb250Rm9yRmFtaWx5
KGRlc2NyaXB0aW9uLCBsYW8sIGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGRl
ZmF1bHQ6IHsKQEAgLTQzMCwyNyArNDMwLDI3IEBAIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9u
dENhY2hlOjpzeXN0ZW0KICAgICAgICAgICAgICAgICB1c2VFbW9qaUZvbnQgPSBDRkNoYXJhY3Rl
clNldElzTG9uZ0NoYXJhY3Rlck1lbWJlcihhcHBsZUNvbG9yRW1vamlDaGFyYWN0ZXJTZXQoKSwg
Yyk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHVzZUVtb2ppRm9udCkKLSAgICAgICAgICAgIHNp
bXBsZUZvbnREYXRhID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgYXBwbGVDb2xvckVtb2pp
LCBmYWxzZSk7CisgICAgICAgICAgICBmb250ID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwg
YXBwbGVDb2xvckVtb2ppLCBmYWxzZSk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgUmV0
YWluUHRyPENURm9udFJlZj4gZmFsbGJhY2tGb250ID0gYWRvcHRDRihDVEZvbnRDcmVhdGVGb3JD
aGFyYWN0ZXJzKG9yaWdpbmFsRm9udERhdGEtPmdldENURm9udCgpLCBjaGFyYWN0ZXJzLCBsZW5n
dGgsIG51bGxwdHIpKTsKICAgICAgICAgICAgIGlmIChSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGZv
dW5kRm9udE5hbWUgPSBhZG9wdENGKENURm9udENvcHlQb3N0U2NyaXB0TmFtZShmYWxsYmFja0Zv
bnQuZ2V0KCkpKSkKLSAgICAgICAgICAgICAgICBzaW1wbGVGb250RGF0YSA9IGZvbnRGb3JGYW1p
bHkoZGVzY3JpcHRpb24sIGZvdW5kRm9udE5hbWUuZ2V0KCksIGZhbHNlKTsKKyAgICAgICAgICAg
ICAgICBmb250ID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgZm91bmRGb250TmFtZS5nZXQo
KSwgZmFsc2UpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICB9CiAKLSAg
ICBpZiAoc2ltcGxlRm9udERhdGEpCi0gICAgICAgIHJldHVybiBzaW1wbGVGb250RGF0YS5yZWxl
YXNlKCk7CisgICAgaWYgKGZvbnQpCisgICAgICAgIHJldHVybiBmb250LnJlbGVhc2UoKTsKIAog
ICAgIHJldHVybiBsYXN0UmVzb3J0RmFsbGJhY2tGb250KGRlc2NyaXB0aW9uKTsKIH0KIAotUmVm
UHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OnNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCitSZWZQdHI8Rm9udD4gRm9udENhY2hl
OjpzaW1pbGFyRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQogewogICAg
IC8vIEF0dGVtcHQgdG8gZmluZCBhbiBhcHByb3ByaWF0ZSBmb250IHVzaW5nIGEgbWF0Y2ggYmFz
ZWQgb24gdGhlIHByZXNlbmNlIG9mIGtleXdvcmRzIGluCiAgICAgLy8gdGhlIHJlcXVlc3RlZCBu
YW1lcy4gRm9yIGV4YW1wbGUsIHdlJ2xsIG1hdGNoIGFueSBuYW1lIHRoYXQgY29udGFpbnMgIkFy
YWJpYyIgdG8gR2VlemEgUHJvLgotICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gc2ltcGxlRm9u
dERhdGE7CisgICAgUmVmUHRyPEZvbnQ+IGZvbnQ7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGRlc2NyaXB0aW9uLmZhbWlseUNvdW50KCk7ICsraSkgewogICAgICAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIGZhbWlseSA9IGRlc2NyaXB0aW9uLmZhbWlseUF0KGkpOwogICAgICAgICBpZiAo
ZmFtaWx5LmlzRW1wdHkoKSkKQEAgLTQ2MSw3ICs0NjEsNyBAQCBSZWZQdHI8U2ltcGxlRm9udERh
dGE+IEZvbnRDYWNoZTo6c2ltaWxhCiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9t
aWNTdHJpbmc+IG1lbmxvKCJtZW5sbyIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVy
YWwpOwogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBjb3VyaWVy
KCJjb3VyaWVyIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CiAgICAgICAg
IGlmIChlcXVhbElnbm9yaW5nQ2FzZShmYW1pbHksIG1vbmFjbykgfHwgZXF1YWxJZ25vcmluZ0Nh
c2UoZmFtaWx5LCBtZW5sbykpIHsKLSAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gZm9udEZv
ckZhbWlseShkZXNjcmlwdGlvbiwgY291cmllcik7CisgICAgICAgICAgICBmb250ID0gZm9udEZv
ckZhbWlseShkZXNjcmlwdGlvbiwgY291cmllcik7CiAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgfQogCkBAIC00NjksNyArNDY5LDcgQEAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250
Q2FjaGU6OnNpbWlsYQogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5n
PiBsdWNpZGFHcmFuZGUoImx1Y2lkYSBncmFuZGUiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZy
b21MaXRlcmFsKTsKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4g
dmVyZGFuYSgidmVyZGFuYSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwog
ICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZmFtaWx5LCBsdWNpZGFHcmFuZGUpKSB7Ci0g
ICAgICAgICAgICBzaW1wbGVGb250RGF0YSA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIHZl
cmRhbmEpOworICAgICAgICAgICAgZm9udCA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIHZl
cmRhbmEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIApAQCAtNDc5LDE1ICs0
NzksMTYgQEAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OnNpbWlsYQogICAgICAg
ICBzdGF0aWMgU3RyaW5nKiBtYXRjaFdvcmRzWzNdID0geyAmYXJhYmljLmdldCgpLCAmcGFzaHRv
LmdldCgpLCAmdXJkdS5nZXQoKSB9OwogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRv
bWljU3RyaW5nPiBnZWV6YVBsYWluKCJHZWV6YVBybyIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpOwogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5n
PiBnZWV6YUJvbGQoIkdlZXphUHJvLUJvbGQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKTsKLSAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCAzICYmICFzaW1wbGVGb250RGF0
YTsgKytqKQorICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDMgJiYgIWZvbnQ7ICsraikgewog
ICAgICAgICAgICAgaWYgKGZhbWlseS5jb250YWlucygqbWF0Y2hXb3Jkc1tqXSwgZmFsc2UpKQot
ICAgICAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlv
biwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBnZWV6YUJvbGQgOiBn
ZWV6YVBsYWluKTsKKyAgICAgICAgICAgICAgICBmb250ID0gZm9udEZvckZhbWlseShkZXNjcmlw
dGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBnZWV6YUJvbGQg
OiBnZWV6YVBsYWluKTsKKyAgICAgICAgfQogICAgIH0KIAotICAgIHJldHVybiBzaW1wbGVGb250
RGF0YS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIGZvbnQucmVsZWFzZSgpOwogfQogCi1SZWY8U2lt
cGxlRm9udERhdGE+IEZvbnRDYWNoZTo6bGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250
RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikKK1JlZjxGb250PiBGb250Q2FjaGU6Omxhc3RS
ZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24p
CiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gZmFsbGJhY2tGb250
RmFtaWx5KCIuUGhvbmVGYWxsYmFjayIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVy
YWwpOwogICAgIHJldHVybiAqZm9udEZvckZhbWlseShmb250RGVzY3JpcHRpb24sIGZhbGxiYWNr
Rm9udEZhbWlseSwgZmFsc2UpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaW9zL1NpbXBsZUZvbnREYXRhSU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9TaW1wbGVGb250RGF0YUlPUy5tbQkocmV2aXNpb24gMTc4
ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL1NpbXBsZUZvbnRE
YXRhSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiAgKi8KIAogI2ltcG9y
dCAiY29uZmlnLmgiCi0jaW1wb3J0ICJTaW1wbGVGb250RGF0YS5oIgorI2ltcG9ydCAiRm9udC5o
IgogCiAjaW1wb3J0ICJCbG9ja0V4Y2VwdGlvbnMuaCIKICNpbXBvcnQgIkNvcmVHcmFwaGljc1NQ
SS5oIgpAQCAtNjcsNyArNjcsNyBAQCBzdGF0aWMgYm9vbCBmb250SGFzVmVydGljYWxHbHlwaHMo
Q1RGb250CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0
Zm9ybUluaXQoKQordm9pZCBGb250OjpwbGF0Zm9ybUluaXQoKQogewogICAgIG1fc3ludGhldGlj
Qm9sZE9mZnNldCA9IG1fcGxhdGZvcm1EYXRhLm1fc3ludGhldGljQm9sZCA/IGNlaWxmKG1fcGxh
dGZvcm1EYXRhLnNpemUoKSAgLyAyNC4wZikgOiAwLmY7CiAgICAgbV9zcGFjZUdseXBoID0gMDsK
QEAgLTEyOCw3ICsxMjgsNyBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUluaXQoKQog
ICAgIG1fZm9udE1ldHJpY3Muc2V0TGluZVNwYWNpbmcoMCk7CiB9CiAKLXZvaWQgU2ltcGxlRm9u
dERhdGE6OnBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpCit2b2lkIEZvbnQ6OnBsYXRmb3JtQ2hhcldp
ZHRoSW5pdCgpCiB7CiAgICAgbV9hdmdDaGFyV2lkdGggPSAwOwogICAgIG1fbWF4Q2hhcldpZHRo
ID0gMDsKQEAgLTEzNywxMiArMTM3LDEyIEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3Jt
Q2hhcldpZHRoSW4KICAgICBpbml0Q2hhcldpZHRocygpOwogfQogCi1QYXNzUmVmUHRyPFNpbXBs
ZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1DcmVhdGVTY2FsZWRGb250RGF0YShj
b25zdCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3QKK1Bhc3NSZWZQ
dHI8Rm9udD4gRm9udDo6cGxhdGZvcm1DcmVhdGVTY2FsZWRGb250KGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYsIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAogewogICAgIGlmIChpc0N1c3RvbUZvbnQo
KSkgewogICAgICAgICBGb250UGxhdGZvcm1EYXRhIHNjYWxlZEZvbnREYXRhKG1fcGxhdGZvcm1E
YXRhKTsKICAgICAgICAgc2NhbGVkRm9udERhdGEubV9zaXplID0gc2NhbGVkRm9udERhdGEubV9z
aXplICogc2NhbGVGYWN0b3I7Ci0gICAgICAgIHJldHVybiBTaW1wbGVGb250RGF0YTo6Y3JlYXRl
KHNjYWxlZEZvbnREYXRhLCB0cnVlLCBmYWxzZSk7CisgICAgICAgIHJldHVybiBGb250OjpjcmVh
dGUoc2NhbGVkRm9udERhdGEsIHRydWUsIGZhbHNlKTsKICAgICB9CiAKICAgICBmbG9hdCBzaXpl
ID0gbV9wbGF0Zm9ybURhdGEuc2l6ZSgpICogc2NhbGVGYWN0b3I7CkBAIC0xNjcsNyArMTY3LDcg
QEAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdAogICAgIHJldHVybiBu
dWxscHRyOwogfQogCi12b2lkIFNpbXBsZUZvbnREYXRhOjpkZXRlcm1pbmVQaXRjaCgpCit2b2lk
IEZvbnQ6OmRldGVybWluZVBpdGNoKCkKIHsKICAgICBDVEZvbnRSZWYgY3RGb250ID0gbV9wbGF0
Zm9ybURhdGEuZm9udCgpOwogICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSBmYWxzZTsKQEAgLTE4
NCwxMiArMTg0LDEyIEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OmRldGVybWluZVBpdGNoKCkKICAg
ICB9CiB9CiAKLUNHRm9udFJlbmRlcmluZ1N0eWxlIFNpbXBsZUZvbnREYXRhOjpyZW5kZXJpbmdT
dHlsZSgpIGNvbnN0CitDR0ZvbnRSZW5kZXJpbmdTdHlsZSBGb250OjpyZW5kZXJpbmdTdHlsZSgp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIGtDR0ZvbnRSZW5kZXJpbmdTdHlsZUFudGlhbGlhc2luZyB8
IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZVN1YnBpeGVsUG9zaXRpb25pbmcgfCBrQ0dGb250UmVuZGVy
aW5nU3R5bGVTdWJwaXhlbFF1YW50aXphdGlvbiB8IGtDR0ZvbnRBbnRpYWxpYXNpbmdTdHlsZVVu
ZmlsdGVyZWQ7CiB9CiAKLWJvb2wgU2ltcGxlRm9udERhdGE6OmFkdmFuY2VGb3JDb2xvckJpdG1h
cEZvbnQoR2x5cGgsIENHU2l6ZSYpIGNvbnN0Citib29sIEZvbnQ6OmFkdmFuY2VGb3JDb2xvckJp
dG1hcEZvbnQoR2x5cGgsIENHU2l6ZSYpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29u
dHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDE3ODg1NykKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAg
fQogCi0gICAgZmxvYXQgd2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBIYXNoU2V0
PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMpCisgICAgZmxvYXQgd2lkdGgo
dW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJh
Y2tGb250cykKICAgICB7CiAgICAgICAgIG1fY29udHJvbGxlci0+YWR2YW5jZShmcm9tLCAwLCBC
eVdob2xlR2x5cGhzLCBmYWxsYmFja0ZvbnRzKTsKICAgICAgICAgZmxvYXQgYmVmb3JlV2lkdGgg
PSBtX2NvbnRyb2xsZXItPnJ1bldpZHRoU29GYXIoKTsKQEAgLTk2LDcgKzk2LDcgQEAgdm9pZCBG
b250Q2FzY2FkZTo6ZGVsZXRlTGF5b3V0KFRleHRMYXlvdQogICAgIGRlbGV0ZSBsYXlvdXQ7CiB9
CiAKLWZsb2F0IEZvbnRDYXNjYWRlOjp3aWR0aChUZXh0TGF5b3V0JiBsYXlvdXQsIHVuc2lnbmVk
IGZyb20sIHVuc2lnbmVkIGxlbiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxs
YmFja0ZvbnRzKQorZmxvYXQgRm9udENhc2NhZGU6OndpZHRoKFRleHRMYXlvdXQmIGxheW91dCwg
dW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJh
Y2tGb250cykKIHsKICAgICByZXR1cm4gbGF5b3V0LndpZHRoKGZyb20sIGxlbiwgZmFsbGJhY2tG
b250cyk7CiB9CkBAIC0xMTUsNyArMTE1LDcgQEAgc3RhdGljIGlubGluZSBDR0Zsb2F0IGNlaWxD
R0Zsb2F0KENHRmxvYQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxDR0Zsb2F0PihjZWlsKGYpKTsK
IH0KIAotQ29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dENvbnRyb2xsZXIoY29uc3Qg
Rm9udENhc2NhZGUqIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgYm9vbCBtYXlVc2VOYXR1cmFs
V3JpdGluZ0RpcmVjdGlvbiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFj
a0ZvbnRzLCBib29sIGZvclRleHRFbXBoYXNpcykKK0NvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29t
cGxleFRleHRDb250cm9sbGVyKGNvbnN0IEZvbnRDYXNjYWRlKiBmb250LCBjb25zdCBUZXh0UnVu
JiBydW4sIGJvb2wgbWF5VXNlTmF0dXJhbFdyaXRpbmdEaXJlY3Rpb24sIEhhc2hTZXQ8Y29uc3Qg
Rm9udCo+KiBmYWxsYmFja0ZvbnRzLCBib29sIGZvclRleHRFbXBoYXNpcykKICAgICA6IG1fZm9u
dCgqZm9udCkKICAgICAsIG1fcnVuKHJ1bikKICAgICAsIG1faXNMVFJPbmx5KHRydWUpCkBAIC0y
OTEsNyArMjkxLDcgQEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RDb21wbAog
ICAgIGlmICghbV9lbmQpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIFdlIGJyZWFrIHVwIGds
eXBoIHJ1biBnZW5lcmF0aW9uIGZvciB0aGUgc3RyaW5nIGJ5IEZvbnREYXRhLgorICAgIC8vIFdl
IGJyZWFrIHVwIGdseXBoIHJ1biBnZW5lcmF0aW9uIGZvciB0aGUgc3RyaW5nIGJ5IEZvbnQuCiAg
ICAgY29uc3QgVUNoYXIqIGNwOwogCiAgICAgaWYgKG1fcnVuLmlzOEJpdCgpKSB7CkBAIC0zMDgs
OSArMzA4LDkgQEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RDb21wbAogICAg
IGNvbnN0IFVDaGFyKiBjdXJyID0gY3A7CiAgICAgY29uc3QgVUNoYXIqIGVuZCA9IGNwICsgbV9l
bmQ7CiAKLSAgICBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGE7CisgICAgY29uc3QgRm9u
dCogZm9udDsKICAgICBib29sIGlzTWlzc2luZ0dseXBoOwotICAgIGNvbnN0IFNpbXBsZUZvbnRE
YXRhKiBuZXh0Rm9udERhdGE7CisgICAgY29uc3QgRm9udCogbmV4dEZvbnQ7CiAgICAgYm9vbCBu
ZXh0SXNNaXNzaW5nR2x5cGg7CiAKICAgICB1bnNpZ25lZCBtYXJrQ291bnQ7CkBAIC0zMzIsMTIg
KzMzMiwxMiBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Y29sbGVjdENvbXBsCiAgICAg
fQogCiAgICAgbmV4dElzTWlzc2luZ0dseXBoID0gZmFsc2U7Ci0gICAgbmV4dEZvbnREYXRhID0g
bV9mb250LmZvbnREYXRhRm9yQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2Uoc2VxdWVuY2VTdGFy
dCwgY3VyciAtIHNlcXVlbmNlU3RhcnQsIG5leHRJc1NtYWxsQ2FwcyA/IFNtYWxsQ2Fwc1Zhcmlh
bnQgOiBOb3JtYWxWYXJpYW50KTsKLSAgICBpZiAoIW5leHRGb250RGF0YSkKKyAgICBuZXh0Rm9u
dCA9IG1fZm9udC5mb250Rm9yQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2Uoc2VxdWVuY2VTdGFy
dCwgY3VyciAtIHNlcXVlbmNlU3RhcnQsIG5leHRJc1NtYWxsQ2FwcyA/IFNtYWxsQ2Fwc1Zhcmlh
bnQgOiBOb3JtYWxWYXJpYW50KTsKKyAgICBpZiAoIW5leHRGb250KQogICAgICAgICBuZXh0SXNN
aXNzaW5nR2x5cGggPSB0cnVlOwogCiAgICAgd2hpbGUgKGN1cnIgPCBlbmQpIHsKLSAgICAgICAg
Zm9udERhdGEgPSBuZXh0Rm9udERhdGE7CisgICAgICAgIGZvbnQgPSBuZXh0Rm9udDsKICAgICAg
ICAgaXNNaXNzaW5nR2x5cGggPSBuZXh0SXNNaXNzaW5nR2x5cGg7CiAgICAgICAgIGlzU21hbGxD
YXBzID0gbmV4dElzU21hbGxDYXBzOwogICAgICAgICBpbnQgaW5kZXggPSBjdXJyIC0gY3A7CkBA
IC0zNTgsMTcgKzM1OCwxNyBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Y29sbGVjdENv
bXBsCiAKICAgICAgICAgbmV4dElzTWlzc2luZ0dseXBoID0gZmFsc2U7CiAgICAgICAgIGlmIChi
YXNlQ2hhcmFjdGVyID09IHplcm9XaWR0aEpvaW5lcikKLSAgICAgICAgICAgIG5leHRGb250RGF0
YSA9IGZvbnREYXRhOworICAgICAgICAgICAgbmV4dEZvbnQgPSBmb250OwogICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgIG5leHRGb250RGF0YSA9IG1fZm9udC5mb250RGF0YUZvckNvbWJpbmlu
Z0NoYXJhY3RlclNlcXVlbmNlKGNwICsgaW5kZXgsIGN1cnIgLSBjcCAtIGluZGV4LCBuZXh0SXNT
bWFsbENhcHMgPyBTbWFsbENhcHNWYXJpYW50IDogTm9ybWFsVmFyaWFudCk7Ci0gICAgICAgICAg
ICBpZiAoIW5leHRGb250RGF0YSkKKyAgICAgICAgICAgIG5leHRGb250ID0gbV9mb250LmZvbnRG
b3JDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjcCArIGluZGV4LCBjdXJyIC0gY3AgLSBpbmRl
eCwgbmV4dElzU21hbGxDYXBzID8gU21hbGxDYXBzVmFyaWFudCA6IE5vcm1hbFZhcmlhbnQpOwor
ICAgICAgICAgICAgaWYgKCFuZXh0Rm9udCkKICAgICAgICAgICAgICAgICBuZXh0SXNNaXNzaW5n
R2x5cGggPSB0cnVlOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG5leHRGb250RGF0YSAhPSBm
b250RGF0YSB8fCBuZXh0SXNNaXNzaW5nR2x5cGggIT0gaXNNaXNzaW5nR2x5cGgpIHsKKyAgICAg
ICAgaWYgKG5leHRGb250ICE9IGZvbnQgfHwgbmV4dElzTWlzc2luZ0dseXBoICE9IGlzTWlzc2lu
Z0dseXBoKSB7CiAgICAgICAgICAgICBpbnQgaXRlbVN0YXJ0ID0gc3RhdGljX2Nhc3Q8aW50Pihp
bmRleE9mRm9udFRyYW5zaXRpb24pOwogICAgICAgICAgICAgaW50IGl0ZW1MZW5ndGggPSBpbmRl
eCAtIGluZGV4T2ZGb250VHJhbnNpdGlvbjsKLSAgICAgICAgICAgIGNvbGxlY3RDb21wbGV4VGV4
dFJ1bnNGb3JDaGFyYWN0ZXJzKChpc1NtYWxsQ2FwcyA/IG1fc21hbGxDYXBzQnVmZmVyLmRhdGEo
KSA6IGNwKSArIGl0ZW1TdGFydCwgaXRlbUxlbmd0aCwgaXRlbVN0YXJ0LCAhaXNNaXNzaW5nR2x5
cGggPyBmb250RGF0YSA6IDApOworICAgICAgICAgICAgY29sbGVjdENvbXBsZXhUZXh0UnVuc0Zv
ckNoYXJhY3RlcnMoKGlzU21hbGxDYXBzID8gbV9zbWFsbENhcHNCdWZmZXIuZGF0YSgpIDogY3Ap
ICsgaXRlbVN0YXJ0LCBpdGVtTGVuZ3RoLCBpdGVtU3RhcnQsICFpc01pc3NpbmdHbHlwaCA/IGZv
bnQgOiAwKTsKICAgICAgICAgICAgIGluZGV4T2ZGb250VHJhbnNpdGlvbiA9IGluZGV4OwogICAg
ICAgICB9CiAgICAgfQpAQCAtMzc2LDcgKzM3Niw3IEBAIHZvaWQgQ29tcGxleFRleHRDb250cm9s
bGVyOjpjb2xsZWN0Q29tcGwKICAgICBpbnQgaXRlbUxlbmd0aCA9IG1fZW5kIC0gaW5kZXhPZkZv
bnRUcmFuc2l0aW9uOwogICAgIGlmIChpdGVtTGVuZ3RoKSB7CiAgICAgICAgIGludCBpdGVtU3Rh
cnQgPSBpbmRleE9mRm9udFRyYW5zaXRpb247Ci0gICAgICAgIGNvbGxlY3RDb21wbGV4VGV4dFJ1
bnNGb3JDaGFyYWN0ZXJzKChuZXh0SXNTbWFsbENhcHMgPyBtX3NtYWxsQ2Fwc0J1ZmZlci5kYXRh
KCkgOiBjcCkgKyBpdGVtU3RhcnQsIGl0ZW1MZW5ndGgsIGl0ZW1TdGFydCwgIW5leHRJc01pc3Np
bmdHbHlwaCA/IG5leHRGb250RGF0YSA6IDApOworICAgICAgICBjb2xsZWN0Q29tcGxleFRleHRS
dW5zRm9yQ2hhcmFjdGVycygobmV4dElzU21hbGxDYXBzID8gbV9zbWFsbENhcHNCdWZmZXIuZGF0
YSgpIDogY3ApICsgaXRlbVN0YXJ0LCBpdGVtTGVuZ3RoLCBpdGVtU3RhcnQsICFuZXh0SXNNaXNz
aW5nR2x5cGggPyBuZXh0Rm9udCA6IDApOwogICAgIH0KIAogICAgIGlmICghbV9ydW4ubHRyKCkp
CkBAIC00NjksNyArNDY5LDcgQEAgdW5zaWduZWQgQ29tcGxleFRleHRDb250cm9sbGVyOjppbmNy
ZW1lbgogICAgIHJldHVybiBpbmRleE9mQ3VycmVudFJ1bihsZWZ0bW9zdEdseXBoKTsKIH0KIAot
dm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmFkdmFuY2UodW5zaWduZWQgb2Zmc2V0LCBHbHlw
aEJ1ZmZlciogZ2x5cGhCdWZmZXIsIEdseXBoSXRlcmF0aW9uU3R5bGUgaXRlcmF0aW9uU3R5bGUs
IEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cykKK3ZvaWQgQ29t
cGxleFRleHRDb250cm9sbGVyOjphZHZhbmNlKHVuc2lnbmVkIG9mZnNldCwgR2x5cGhCdWZmZXIq
IGdseXBoQnVmZmVyLCBHbHlwaEl0ZXJhdGlvblN0eWxlIGl0ZXJhdGlvblN0eWxlLCBIYXNoU2V0
PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cykKIHsKICAgICBpZiAoc3RhdGljX2Nhc3Q8aW50
PihvZmZzZXQpID4gbV9lbmQpCiAgICAgICAgIG9mZnNldCA9IG1fZW5kOwpAQCAtNDk0LDggKzQ5
NCw4IEBAIHZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjphZHZhbmNlKHVuc2kKICAgICAgICAg
c2l6ZV90IGdseXBoQ291bnQgPSBjb21wbGV4VGV4dFJ1bi5nbHlwaENvdW50KCk7CiAgICAgICAg
IHVuc2lnbmVkIGcgPSBsdHIgPyBtX2dseXBoSW5DdXJyZW50UnVuIDogZ2x5cGhDb3VudCAtIDEg
LSBtX2dseXBoSW5DdXJyZW50UnVuOwogICAgICAgICB1bnNpZ25lZCBrID0gbGVmdG1vc3RHbHlw
aCArIGc7Ci0gICAgICAgIGlmIChmYWxsYmFja0ZvbnRzICYmICZjb21wbGV4VGV4dFJ1bi5mb250
RGF0YSgpICE9ICZtX2ZvbnQucHJpbWFyeUZvbnREYXRhKCkpCi0gICAgICAgICAgICBmYWxsYmFj
a0ZvbnRzLT5hZGQoJmNvbXBsZXhUZXh0UnVuLmZvbnREYXRhKCkpOworICAgICAgICBpZiAoZmFs
bGJhY2tGb250cyAmJiAmY29tcGxleFRleHRSdW4uZm9udCgpICE9ICZtX2ZvbnQucHJpbWFyeUZv
bnQoKSkKKyAgICAgICAgICAgIGZhbGxiYWNrRm9udHMtPmFkZCgmY29tcGxleFRleHRSdW4uZm9u
dCgpKTsKIAogICAgICAgICAvLyBXZSBtdXN0IHN0b3JlIHRoZSBpbml0aWFsIGFkdmFuY2UgZm9y
IHRoZSBmaXJzdCBnbHlwaCB3ZSBhcmUgZ29pbmcgdG8gZHJhdy4KICAgICAgICAgLy8gV2hlbiBs
ZWZ0bW9zdEdseXBoIGlzIDAsIGl0IHJlcHJlc2VudHMgdGhlIGZpcnN0IGdseXBoIHRvIGRyYXcs
IHRha2luZyBpbnRvCkBAIC01MjAsNyArNTIwLDcgQEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xs
ZXI6OmFkdmFuY2UodW5zaQogICAgICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAgICAg
aWYgKGdseXBoQnVmZmVyICYmICFtX2NoYXJhY3RlckluQ3VycmVudEdseXBoKQotICAgICAgICAg
ICAgICAgIGdseXBoQnVmZmVyLT5hZGQobV9hZGp1c3RlZEdseXBoc1trXSwgJmNvbXBsZXhUZXh0
UnVuLmZvbnREYXRhKCksIGFkanVzdGVkQWR2YW5jZSwgY29tcGxleFRleHRSdW4uaW5kZXhBdCht
X2dseXBoSW5DdXJyZW50UnVuKSk7CisgICAgICAgICAgICAgICAgZ2x5cGhCdWZmZXItPmFkZCht
X2FkanVzdGVkR2x5cGhzW2tdLCAmY29tcGxleFRleHRSdW4uZm9udCgpLCBhZGp1c3RlZEFkdmFu
Y2UsIGNvbXBsZXhUZXh0UnVuLmluZGV4QXQobV9nbHlwaEluQ3VycmVudFJ1bikpOwogCiAgICAg
ICAgICAgICB1bnNpZ25lZCBvbGRDaGFyYWN0ZXJJbkN1cnJlbnRHbHlwaCA9IG1fY2hhcmFjdGVy
SW5DdXJyZW50R2x5cGg7CiAgICAgICAgICAgICBtX2NoYXJhY3RlckluQ3VycmVudEdseXBoID0g
c3RkOjptaW4obV9jdXJyZW50Q2hhcmFjdGVyIC0gY29tcGxleFRleHRSdW4uc3RyaW5nTG9jYXRp
b24oKSwgZ2x5cGhFbmRPZmZzZXQpIC0gZ2x5cGhTdGFydE9mZnNldDsKQEAgLTU2Niw5ICs1NjYs
OSBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6YWRqdXN0R2x5cGhzCiAgICAgZm9yIChz
aXplX3QgciA9IDA7IHIgPCBydW5Db3VudDsgKytyKSB7CiAgICAgICAgIENvbXBsZXhUZXh0UnVu
JiBjb21wbGV4VGV4dFJ1biA9ICptX2NvbXBsZXhUZXh0UnVuc1tyXTsKICAgICAgICAgdW5zaWdu
ZWQgZ2x5cGhDb3VudCA9IGNvbXBsZXhUZXh0UnVuLmdseXBoQ291bnQoKTsKLSAgICAgICAgY29u
c3QgU2ltcGxlRm9udERhdGEmIGZvbnREYXRhID0gY29tcGxleFRleHRSdW4uZm9udERhdGEoKTsK
KyAgICAgICAgY29uc3QgRm9udCYgZm9udCA9IGNvbXBsZXhUZXh0UnVuLmZvbnQoKTsKICNpZiBQ
TEFURk9STShJT1MpCi0gICAgICAgIGJvb2wgaXNFbW9qaSA9IGZvbnREYXRhLnBsYXRmb3JtRGF0
YSgpLm1faXNFbW9qaTsKKyAgICAgICAgYm9vbCBpc0Vtb2ppID0gZm9udC5wbGF0Zm9ybURhdGEo
KS5tX2lzRW1vamk7CiAjZW5kaWYKIAogICAgICAgICAvLyBSZXByZXNlbnQgdGhlIGluaXRpYWwg
YWR2YW5jZSBmb3IgYSB0ZXh0IHJ1biBieSBhZGp1c3RpbmcgdGhlIGFkdmFuY2UKQEAgLTU4OCw4
ICs1ODgsOCBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6YWRqdXN0R2x5cGhzCiAgICAg
ICAgIGNvbnN0IENHU2l6ZSogYWR2YW5jZXMgPSBjb21wbGV4VGV4dFJ1bi5hZHZhbmNlcygpOwog
CiAgICAgICAgIGJvb2wgbGFzdFJ1biA9IHIgKyAxID09IHJ1bkNvdW50OwotICAgICAgICBib29s
IHJvdW5kc0FkdmFuY2VzID0gIW1fZm9udC5pc1ByaW50ZXJGb250KCkgJiYgZm9udERhdGEucGxh
dGZvcm1EYXRhKCkucm91bmRzR2x5cGhBZHZhbmNlcygpOwotICAgICAgICBmbG9hdCBzcGFjZVdp
ZHRoID0gZm9udERhdGEuc3BhY2VXaWR0aCgpIC0gZm9udERhdGEuc3ludGhldGljQm9sZE9mZnNl
dCgpOworICAgICAgICBib29sIHJvdW5kc0FkdmFuY2VzID0gIW1fZm9udC5pc1ByaW50ZXJGb250
KCkgJiYgZm9udC5wbGF0Zm9ybURhdGEoKS5yb3VuZHNHbHlwaEFkdmFuY2VzKCk7CisgICAgICAg
IGZsb2F0IHNwYWNlV2lkdGggPSBmb250LnNwYWNlV2lkdGgoKSAtIGZvbnQuc3ludGhldGljQm9s
ZE9mZnNldCgpOwogICAgICAgICBDR0Zsb2F0IHJvdW5kZWRTcGFjZVdpZHRoID0gcm91bmRDR0Zs
b2F0KHNwYWNlV2lkdGgpOwogICAgICAgICBjb25zdCBVQ2hhciogY3AgPSBjb21wbGV4VGV4dFJ1
bi5jaGFyYWN0ZXJzKCk7CiAgICAgICAgIENHUG9pbnQgZ2x5cGhPcmlnaW4gPSBDR1BvaW50WmVy
bzsKQEAgLTYxNiwzMyArNjE2LDMzIEBAIHZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjphZGp1
c3RHbHlwaHMKICAgICAgICAgICAgICAgICBuZXh0Q2ggPSAqKG1fY29tcGxleFRleHRSdW5zW3Ig
KyAxXS0+Y2hhcmFjdGVycygpICsgbV9jb21wbGV4VGV4dFJ1bnNbciArIDFdLT5pbmRleEF0KDAp
KTsKIAogICAgICAgICAgICAgYm9vbCB0cmVhdEFzU3BhY2UgPSBGb250Q2FzY2FkZTo6dHJlYXRB
c1NwYWNlKGNoKTsKLSAgICAgICAgICAgIENHR2x5cGggZ2x5cGggPSB0cmVhdEFzU3BhY2UgPyBm
b250RGF0YS5zcGFjZUdseXBoKCkgOiBnbHlwaHNbaV07CisgICAgICAgICAgICBDR0dseXBoIGds
eXBoID0gdHJlYXRBc1NwYWNlID8gZm9udC5zcGFjZUdseXBoKCkgOiBnbHlwaHNbaV07CiAgICAg
ICAgICAgICBDR1NpemUgYWR2YW5jZSA9IHRyZWF0QXNTcGFjZSA/IENHU2l6ZU1ha2Uoc3BhY2VX
aWR0aCwgYWR2YW5jZXNbaV0uaGVpZ2h0KSA6IGFkdmFuY2VzW2ldOwogI2lmIFBMQVRGT1JNKElP
UykKICAgICAgICAgICAgIGlmIChpc0Vtb2ppICYmIGFkdmFuY2Uud2lkdGgpCi0gICAgICAgICAg
ICAgICAgYWR2YW5jZS53aWR0aCA9IGZvbnREYXRhLndpZHRoRm9yR2x5cGgoZ2x5cGgpOworICAg
ICAgICAgICAgICAgIGFkdmFuY2Uud2lkdGggPSBmb250LndpZHRoRm9yR2x5cGgoZ2x5cGgpOwog
I2VuZGlmCiAKICAgICAgICAgICAgIGlmIChjaCA9PSAnXHQnICYmIG1fcnVuLmFsbG93VGFicygp
KQotICAgICAgICAgICAgICAgIGFkdmFuY2Uud2lkdGggPSBtX2ZvbnQudGFiV2lkdGgoZm9udERh
dGEsIG1fcnVuLnRhYlNpemUoKSwgbV9ydW4ueFBvcygpICsgbV90b3RhbFdpZHRoICsgd2lkdGhT
aW5jZUxhc3RDb21taXQpOworICAgICAgICAgICAgICAgIGFkdmFuY2Uud2lkdGggPSBtX2ZvbnQu
dGFiV2lkdGgoZm9udCwgbV9ydW4udGFiU2l6ZSgpLCBtX3J1bi54UG9zKCkgKyBtX3RvdGFsV2lk
dGggKyB3aWR0aFNpbmNlTGFzdENvbW1pdCk7CiAgICAgICAgICAgICBlbHNlIGlmIChGb250Q2Fz
Y2FkZTo6dHJlYXRBc1plcm9XaWR0aFNwYWNlKGNoKSAmJiAhdHJlYXRBc1NwYWNlKSB7CiAgICAg
ICAgICAgICAgICAgYWR2YW5jZS53aWR0aCA9IDA7Ci0gICAgICAgICAgICAgICAgZ2x5cGggPSBm
b250RGF0YS5zcGFjZUdseXBoKCk7CisgICAgICAgICAgICAgICAgZ2x5cGggPSBmb250LnNwYWNl
R2x5cGgoKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgZmxvYXQgcm91bmRlZEFkdmFu
Y2VXaWR0aCA9IHJvdW5kZihhZHZhbmNlLndpZHRoKTsKICAgICAgICAgICAgIGlmIChyb3VuZHNB
ZHZhbmNlcykKICAgICAgICAgICAgICAgICBhZHZhbmNlLndpZHRoID0gcm91bmRlZEFkdmFuY2VX
aWR0aDsKIAotICAgICAgICAgICAgYWR2YW5jZS53aWR0aCArPSBmb250RGF0YS5zeW50aGV0aWNC
b2xkT2Zmc2V0KCk7CisgICAgICAgICAgICBhZHZhbmNlLndpZHRoICs9IGZvbnQuc3ludGhldGlj
Qm9sZE9mZnNldCgpOwogCiAgCiAgICAgICAgICAgICAvLyBXZSBzcGVjaWFsIGNhc2Ugc3BhY2Vz
IGluIHR3byB3YXlzIHdoZW4gYXBwbHlpbmcgd29yZCByb3VuZGluZy4gCiAgICAgICAgICAgICAv
LyBGaXJzdCwgd2Ugcm91bmQgc3BhY2VzIHRvIGFuIGFkanVzdGVkIHdpZHRoIGluIGFsbCBmb250
cy4gCiAgICAgICAgICAgICAvLyBTZWNvbmQsIGluIGZpeGVkLXBpdGNoIGZvbnRzIHdlIGVuc3Vy
ZSB0aGF0IGFsbCBnbHlwaHMgdGhhdCAKICAgICAgICAgICAgIC8vIG1hdGNoIHRoZSB3aWR0aCBv
ZiB0aGUgc3BhY2UgZ2x5cGggaGF2ZSB0aGUgc2FtZSB3aWR0aCBhcyB0aGUgc3BhY2UgZ2x5cGgu
IAotICAgICAgICAgICAgaWYgKG1fcnVuLmFwcGx5V29yZFJvdW5kaW5nKCkgJiYgcm91bmRlZEFk
dmFuY2VXaWR0aCA9PSByb3VuZGVkU3BhY2VXaWR0aCAmJiAoZm9udERhdGEucGl0Y2goKSA9PSBG
aXhlZFBpdGNoIHx8IGdseXBoID09IGZvbnREYXRhLnNwYWNlR2x5cGgoKSkpCi0gICAgICAgICAg
ICAgICAgYWR2YW5jZS53aWR0aCA9IGZvbnREYXRhLmFkanVzdGVkU3BhY2VXaWR0aCgpOworICAg
ICAgICAgICAgaWYgKG1fcnVuLmFwcGx5V29yZFJvdW5kaW5nKCkgJiYgcm91bmRlZEFkdmFuY2VX
aWR0aCA9PSByb3VuZGVkU3BhY2VXaWR0aCAmJiAoZm9udC5waXRjaCgpID09IEZpeGVkUGl0Y2gg
fHwgZ2x5cGggPT0gZm9udC5zcGFjZUdseXBoKCkpKQorICAgICAgICAgICAgICAgIGFkdmFuY2Uu
d2lkdGggPSBmb250LmFkanVzdGVkU3BhY2VXaWR0aCgpOwogCiAgICAgICAgICAgICBpZiAoaGFz
RXh0cmFTcGFjaW5nKSB7CiAgICAgICAgICAgICAgICAgLy8gSWYgd2UncmUgYSBnbHlwaCB3aXRo
IGFuIGFkdmFuY2UsIGdvIGFoZWFkIGFuZCBhZGQgaW4gbGV0dGVyLXNwYWNpbmcuCkBAIC03MTcs
NyArNzE3LDcgQEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmFkanVzdEdseXBocwogICAg
ICAgICAgICAgbV9hZGp1c3RlZEFkdmFuY2VzLmFwcGVuZChhZHZhbmNlKTsKICAgICAgICAgICAg
IG1fYWRqdXN0ZWRHbHlwaHMuYXBwZW5kKGdseXBoKTsKICAgICAgICAgICAgIAotICAgICAgICAg
ICAgRmxvYXRSZWN0IGdseXBoQm91bmRzID0gZm9udERhdGEuYm91bmRzRm9yR2x5cGgoZ2x5cGgp
OworICAgICAgICAgICAgRmxvYXRSZWN0IGdseXBoQm91bmRzID0gZm9udC5ib3VuZHNGb3JHbHlw
aChnbHlwaCk7CiAgICAgICAgICAgICBnbHlwaEJvdW5kcy5tb3ZlKGdseXBoT3JpZ2luLngsIGds
eXBoT3JpZ2luLnkpOwogICAgICAgICAgICAgbV9taW5HbHlwaEJvdW5kaW5nQm94WCA9IHN0ZDo6
bWluKG1fbWluR2x5cGhCb3VuZGluZ0JveFgsIGdseXBoQm91bmRzLngoKSk7CiAgICAgICAgICAg
ICBtX21heEdseXBoQm91bmRpbmdCb3hYID0gc3RkOjptYXgobV9tYXhHbHlwaEJvdW5kaW5nQm94
WCwgZ2x5cGhCb3VuZHMubWF4WCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyLmgJKHJl
dmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9D
b21wbGV4VGV4dENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCB0
eXBlZGVmIGNvbnN0IHN0cnVjdCBfX0NUTGluZSAqIENUTGluZVJlCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIEZvbnRDYXNjYWRlOwotY2xhc3MgU2ltcGxlRm9udERhdGE7CitjbGFzcyBG
b250OwogY2xhc3MgVGV4dFJ1bjsKIAogZW51bSBHbHlwaEl0ZXJhdGlvblN0eWxlIHsgSW5jbHVk
ZVBhcnRpYWxHbHlwaHMsIEJ5V2hvbGVHbHlwaHMgfTsKQEAgLTUwLDEwICs1MCwxMCBAQCBlbnVt
IEdseXBoSXRlcmF0aW9uU3R5bGUgeyBJbmNsdWRlUGFydGlhCiAvLyBjb21wbGV4IHNjcmlwdHMg
b24gT1MgWC4KIGNsYXNzIENvbXBsZXhUZXh0Q29udHJvbGxlciB7CiBwdWJsaWM6Ci0gICAgQ29t
cGxleFRleHRDb250cm9sbGVyKGNvbnN0IEZvbnRDYXNjYWRlKiwgY29uc3QgVGV4dFJ1biYsIGJv
b2wgbWF5VXNlTmF0dXJhbFdyaXRpbmdEaXJlY3Rpb24gPSBmYWxzZSwgSGFzaFNldDxjb25zdCBT
aW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgYm9vbCBmb3JUZXh0RW1waGFzaXMg
PSBmYWxzZSk7CisgICAgQ29tcGxleFRleHRDb250cm9sbGVyKGNvbnN0IEZvbnRDYXNjYWRlKiwg
Y29uc3QgVGV4dFJ1biYsIGJvb2wgbWF5VXNlTmF0dXJhbFdyaXRpbmdEaXJlY3Rpb24gPSBmYWxz
ZSwgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMgPSAwLCBib29sIGZvclRleHRF
bXBoYXNpcyA9IGZhbHNlKTsKIAogICAgIC8vIEFkdmFuY2UgYW5kIGVtaXQgZ2x5cGhzIHVwIHRv
IHRoZSBzcGVjaWZpZWQgY2hhcmFjdGVyLgotICAgIHZvaWQgYWR2YW5jZSh1bnNpZ25lZCB0bywg
R2x5cGhCdWZmZXIqID0gMCwgR2x5cGhJdGVyYXRpb25TdHlsZSA9IEluY2x1ZGVQYXJ0aWFsR2x5
cGhzLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwKTsK
KyAgICB2b2lkIGFkdmFuY2UodW5zaWduZWQgdG8sIEdseXBoQnVmZmVyKiA9IDAsIEdseXBoSXRl
cmF0aW9uU3R5bGUgPSBJbmNsdWRlUGFydGlhbEdseXBocywgSGFzaFNldDxjb25zdCBGb250Kj4q
IGZhbGxiYWNrRm9udHMgPSAwKTsKIAogICAgIC8vIENvbXB1dGUgdGhlIGNoYXJhY3RlciBvZmZz
ZXQgZm9yIGEgZ2l2ZW4geCBjb29yZGluYXRlLgogICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbihm
bG9hdCB4LCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKTsKQEAgLTczLDE4ICs3MywxOCBAQCBw
dWJsaWM6CiBwcml2YXRlOgogICAgIGNsYXNzIENvbXBsZXhUZXh0UnVuIDogcHVibGljIFJlZkNv
dW50ZWQ8Q29tcGxleFRleHRSdW4+IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBSZWY8
Q29tcGxleFRleHRSdW4+IGNyZWF0ZShDVFJ1blJlZiBjdFJ1biwgY29uc3QgU2ltcGxlRm9udERh
dGEmIGZvbnREYXRhLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgc3RyaW5nTG9j
YXRpb24sIHNpemVfdCBzdHJpbmdMZW5ndGgsIENGUmFuZ2UgcnVuUmFuZ2UpCisgICAgICAgIHN0
YXRpYyBSZWY8Q29tcGxleFRleHRSdW4+IGNyZWF0ZShDVFJ1blJlZiBjdFJ1biwgY29uc3QgRm9u
dCYgZm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIHN0cmluZ0xvY2F0aW9u
LCBzaXplX3Qgc3RyaW5nTGVuZ3RoLCBDRlJhbmdlIHJ1blJhbmdlKQogICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDb21wbGV4VGV4dFJ1bihjdFJ1biwgZm9udERh
dGEsIGNoYXJhY3RlcnMsIHN0cmluZ0xvY2F0aW9uLCBzdHJpbmdMZW5ndGgsIHJ1blJhbmdlKSk7
CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDb21wbGV4VGV4dFJ1bihjdFJ1biwg
Zm9udCwgY2hhcmFjdGVycywgc3RyaW5nTG9jYXRpb24sIHN0cmluZ0xlbmd0aCwgcnVuUmFuZ2Up
KTsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyBSZWY8Q29tcGxleFRleHRSdW4+IGNyZWF0
ZShjb25zdCBTaW1wbGVGb250RGF0YSYgZm9udERhdGEsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
LCB1bnNpZ25lZCBzdHJpbmdMb2NhdGlvbiwgc2l6ZV90IHN0cmluZ0xlbmd0aCwgYm9vbCBsdHIp
CisgICAgICAgIHN0YXRpYyBSZWY8Q29tcGxleFRleHRSdW4+IGNyZWF0ZShjb25zdCBGb250JiBm
b250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24sIHNp
emVfdCBzdHJpbmdMZW5ndGgsIGJvb2wgbHRyKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBDb21wbGV4VGV4dFJ1bihmb250RGF0YSwgY2hhcmFjdGVycywgc3Ry
aW5nTG9jYXRpb24sIHN0cmluZ0xlbmd0aCwgbHRyKSk7CisgICAgICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBDb21wbGV4VGV4dFJ1bihmb250LCBjaGFyYWN0ZXJzLCBzdHJpbmdMb2NhdGlv
biwgc3RyaW5nTGVuZ3RoLCBsdHIpKTsKICAgICAgICAgfQogCiAgICAgICAgIHVuc2lnbmVkIGds
eXBoQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2dseXBoQ291bnQ7IH0KLSAgICAgICAgY29uc3Qg
U2ltcGxlRm9udERhdGEmIGZvbnREYXRhKCkgY29uc3QgeyByZXR1cm4gbV9mb250RGF0YTsgfQor
ICAgICAgICBjb25zdCBGb250JiBmb250KCkgY29uc3QgeyByZXR1cm4gbV9mb250OyB9CiAgICAg
ICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9jaGFyYWN0ZXJz
OyB9CiAgICAgICAgIHVuc2lnbmVkIHN0cmluZ0xvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9z
dHJpbmdMb2NhdGlvbjsgfQogICAgICAgICBzaXplX3Qgc3RyaW5nTGVuZ3RoKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdHJpbmdMZW5ndGg7IH0KQEAgLTEwMCwxMSArMTAwLDExIEBAIHByaXZhdGU6CiAg
ICAgICAgIHZvaWQgc2V0SXNOb25Nb25vdG9uaWMoKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAg
IENvbXBsZXhUZXh0UnVuKENUUnVuUmVmLCBjb25zdCBTaW1wbGVGb250RGF0YSYsIGNvbnN0IFVD
aGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBzdHJpbmdMb2NhdGlvbiwgc2l6ZV90IHN0cmluZ0xl
bmd0aCwgQ0ZSYW5nZSBydW5SYW5nZSk7Ci0gICAgICAgIENvbXBsZXhUZXh0UnVuKGNvbnN0IFNp
bXBsZUZvbnREYXRhJiwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIHN0cmluZ0xv
Y2F0aW9uLCBzaXplX3Qgc3RyaW5nTGVuZ3RoLCBib29sIGx0cik7CisgICAgICAgIENvbXBsZXhU
ZXh0UnVuKENUUnVuUmVmLCBjb25zdCBGb250JiwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVu
c2lnbmVkIHN0cmluZ0xvY2F0aW9uLCBzaXplX3Qgc3RyaW5nTGVuZ3RoLCBDRlJhbmdlIHJ1blJh
bmdlKTsKKyAgICAgICAgQ29tcGxleFRleHRSdW4oY29uc3QgRm9udCYsIGNvbnN0IFVDaGFyKiBj
aGFyYWN0ZXJzLCB1bnNpZ25lZCBzdHJpbmdMb2NhdGlvbiwgc2l6ZV90IHN0cmluZ0xlbmd0aCwg
Ym9vbCBsdHIpOwogCiAgICAgICAgIHVuc2lnbmVkIG1fZ2x5cGhDb3VudDsKLSAgICAgICAgY29u
c3QgU2ltcGxlRm9udERhdGEmIG1fZm9udERhdGE7CisgICAgICAgIGNvbnN0IEZvbnQmIG1fZm9u
dDsKICAgICAgICAgY29uc3QgVUNoYXIqIG1fY2hhcmFjdGVyczsKICAgICAgICAgdW5zaWduZWQg
bV9zdHJpbmdMb2NhdGlvbjsKICAgICAgICAgc2l6ZV90IG1fc3RyaW5nTGVuZ3RoOwpAQCAtMTI3
LDcgKzEyNyw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGNvbGxlY3RDb21wbGV4VGV4dFJ1bnMo
KTsKIAotICAgIHZvaWQgY29sbGVjdENvbXBsZXhUZXh0UnVuc0ZvckNoYXJhY3RlcnMoY29uc3Qg
VUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0cmluZ0xvY2F0aW9uLCBjb25zdCBT
aW1wbGVGb250RGF0YSopOworICAgIHZvaWQgY29sbGVjdENvbXBsZXhUZXh0UnVuc0ZvckNoYXJh
Y3RlcnMoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0cmluZ0xvY2F0
aW9uLCBjb25zdCBGb250Kik7CiAgICAgdm9pZCBhZGp1c3RHbHlwaHNBbmRBZHZhbmNlcygpOwog
CiAgICAgdW5zaWduZWQgaW5kZXhPZkN1cnJlbnRSdW4odW5zaWduZWQmIGxlZnRtb3N0R2x5cGgp
OwpAQCAtMTY5LDcgKzE2OSw3IEBAIHByaXZhdGU6CiAgICAgZmxvYXQgbV9sZWFkaW5nRXhwYW5z
aW9uOwogICAgIGJvb2wgbV9hZnRlckV4cGFuc2lvbjsKIAotICAgIEhhc2hTZXQ8Y29uc3QgU2lt
cGxlRm9udERhdGEqPiogbV9mYWxsYmFja0ZvbnRzOworICAgIEhhc2hTZXQ8Y29uc3QgRm9udCo+
KiBtX2ZhbGxiYWNrRm9udHM7CiAKICAgICBmbG9hdCBtX21pbkdseXBoQm91bmRpbmdCb3hYOwog
ICAgIGZsb2F0IG1fbWF4R2x5cGhCb3VuZGluZ0JveFg7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyQ29yZVRleHQubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhU
ZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyQ29yZVRleHQu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcgQEAgLSAoaWQpaW5pdFdpdGhGb250Oihj
b25zdCBXZWJDb3JlOjpGb250QwogICAgIF9jaGFyYWN0ZXIgPSBjaGFyYWN0ZXI7CiAKICAgICAv
LyBCeSB0aGUgdGltZSBhIFdlYkNhc2NhZGVMaXN0IGlzIHVzZWQsIHRoZSBGb250Q2FzY2FkZSBo
YXMgYWxyZWFkeSBiZWVuIGFza2VkIHRvIHJlYWxpemUgYWxsIG9mIGl0cwotICAgIC8vIEZvbnRE
YXRhLCBzbyB0aGlzIGxvb3AgZG9lcyBub3QgaGl0IHRoZSBGb250Q2FjaGUuCisgICAgLy8gRm9u
dHMsIHNvIHRoaXMgbG9vcCBkb2VzIG5vdCBoaXQgdGhlIEZvbnRDYWNoZS4KICAgICB3aGlsZSAo
IV9mb250LT5mYWxsYmFja1Jhbmdlc0F0KF9jb3VudCkuaXNOdWxsKCkpCiAgICAgICAgIF9jb3Vu
dCsrOwogCkBAIC04MiwxMCArODIsMTAgQEAgLSAoaWQpb2JqZWN0QXRJbmRleDooTlNVSW50ZWdl
cilpbmRleAogICAgIH0gZWxzZQogICAgICAgICBfZm9udERlc2NyaXB0b3JzLmdyb3coaW5kZXgg
KyAxKTsKIAotICAgIGNvbnN0IFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhKiBzaW1wbGVGb250RGF0
YSA9IF9mb250LT5mYWxsYmFja1Jhbmdlc0F0KGluZGV4KS5mb250RGF0YUZvckNoYXJhY3Rlcihf
Y2hhcmFjdGVyKTsKLSAgICBpZiAoIXNpbXBsZUZvbnREYXRhKQotICAgICAgICBzaW1wbGVGb250
RGF0YSA9ICZfZm9udC0+ZmFsbGJhY2tSYW5nZXNBdChpbmRleCkuZm9udERhdGFGb3JGaXJzdFJh
bmdlKCk7Ci0gICAgZm9udERlc2NyaXB0b3IgPSBDVEZvbnRDb3B5Rm9udERlc2NyaXB0b3Ioc2lt
cGxlRm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLmN0Rm9udCgpKTsKKyAgICBjb25zdCBXZWJDb3Jl
OjpGb250KiBmb250ID0gX2ZvbnQtPmZhbGxiYWNrUmFuZ2VzQXQoaW5kZXgpLmZvbnRGb3JDaGFy
YWN0ZXIoX2NoYXJhY3Rlcik7CisgICAgaWYgKCFmb250KQorICAgICAgICBmb250ID0gJl9mb250
LT5mYWxsYmFja1Jhbmdlc0F0KGluZGV4KS5mb250Rm9yRmlyc3RSYW5nZSgpOworICAgIGZvbnRE
ZXNjcmlwdG9yID0gQ1RGb250Q29weUZvbnREZXNjcmlwdG9yKGZvbnQtPnBsYXRmb3JtRGF0YSgp
LmN0Rm9udCgpKTsKICAgICBfZm9udERlc2NyaXB0b3JzW2luZGV4XSA9IGFkb3B0Q0YoZm9udERl
c2NyaXB0b3IpOwogICAgIHJldHVybiAoaWQpZm9udERlc2NyaXB0b3I7CiB9CkBAIC05NCw4ICs5
NCw4IEBAIC0gKGlkKW9iamVjdEF0SW5kZXg6KE5TVUludGVnZXIpaW5kZXgKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1Db21wbGV4VGV4dENvbnRyb2xsZXI6OkNvbXBsZXhUZXh0UnVuOjpDb21w
bGV4VGV4dFJ1bihDVFJ1blJlZiBjdFJ1biwgY29uc3QgU2ltcGxlRm9udERhdGEmIGZvbnREYXRh
LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24sIHNpemVf
dCBzdHJpbmdMZW5ndGgsIENGUmFuZ2UgcnVuUmFuZ2UpCi0gICAgOiBtX2ZvbnREYXRhKGZvbnRE
YXRhKQorQ29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dFJ1bjo6Q29tcGxleFRleHRS
dW4oQ1RSdW5SZWYgY3RSdW4sIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0
ZXJzLCB1bnNpZ25lZCBzdHJpbmdMb2NhdGlvbiwgc2l6ZV90IHN0cmluZ0xlbmd0aCwgQ0ZSYW5n
ZSBydW5SYW5nZSkKKyAgICA6IG1fZm9udChmb250KQogICAgICwgbV9jaGFyYWN0ZXJzKGNoYXJh
Y3RlcnMpCiAgICAgLCBtX3N0cmluZ0xvY2F0aW9uKHN0cmluZ0xvY2F0aW9uKQogICAgICwgbV9z
dHJpbmdMZW5ndGgoc3RyaW5nTGVuZ3RoKQpAQCAtMTMwLDggKzEzMCw4IEBAIENvbXBsZXhUZXh0
Q29udHJvbGxlcjo6Q29tcGxleFRleHRSdW46OkMKIAogLy8gTWlzc2luZyBnbHlwaHMgcnVuIGNv
bnN0cnVjdG9yLiBDb3JlIFRleHQgd2lsbCBub3QgZ2VuZXJhdGUgYSBydW4gb2YgbWlzc2luZyBn
bHlwaHMsIGluc3RlYWQgZmFsbGluZyBiYWNrIG9uCiAvLyBnbHlwaHMgZnJvbSBMYXN0UmVzb3J0
LiBXZSB3YW50IHRvIHVzZSB0aGUgcHJpbWFyeSBmb250J3MgbWlzc2luZyBnbHlwaCBpbiBvcmRl
ciB0byBtYXRjaCB0aGUgZmFzdCB0ZXh0IGNvZGUgcGF0aC4KLUNvbXBsZXhUZXh0Q29udHJvbGxl
cjo6Q29tcGxleFRleHRSdW46OkNvbXBsZXhUZXh0UnVuKGNvbnN0IFNpbXBsZUZvbnREYXRhJiBm
b250RGF0YSwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIHN0cmluZ0xvY2F0aW9u
LCBzaXplX3Qgc3RyaW5nTGVuZ3RoLCBib29sIGx0cikKLSAgICA6IG1fZm9udERhdGEoZm9udERh
dGEpCitDb21wbGV4VGV4dENvbnRyb2xsZXI6OkNvbXBsZXhUZXh0UnVuOjpDb21wbGV4VGV4dFJ1
bihjb25zdCBGb250JiBmb250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgc3Ry
aW5nTG9jYXRpb24sIHNpemVfdCBzdHJpbmdMZW5ndGgsIGJvb2wgbHRyKQorICAgIDogbV9mb250
KGZvbnQpCiAgICAgLCBtX2NoYXJhY3RlcnMoY2hhcmFjdGVycykKICAgICAsIG1fc3RyaW5nTG9j
YXRpb24oc3RyaW5nTG9jYXRpb24pCiAgICAgLCBtX3N0cmluZ0xlbmd0aChzdHJpbmdMZW5ndGgp
CkBAIC0xNjMsNyArMTYzLDcgQEAgQ29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dFJ1
bjo6QwogICAgIC8vIFN5bnRoZXNpemUgYSBydW4gb2YgbWlzc2luZyBnbHlwaHMuCiAgICAgbV9n
bHlwaHNWZWN0b3IuZmlsbCgwLCBtX2dseXBoQ291bnQpOwogICAgIG1fZ2x5cGhzID0gbV9nbHlw
aHNWZWN0b3IuZGF0YSgpOwotICAgIG1fYWR2YW5jZXNWZWN0b3IuZmlsbChDR1NpemVNYWtlKG1f
Zm9udERhdGEud2lkdGhGb3JHbHlwaCgwKSwgMCksIG1fZ2x5cGhDb3VudCk7CisgICAgbV9hZHZh
bmNlc1ZlY3Rvci5maWxsKENHU2l6ZU1ha2UobV9mb250LndpZHRoRm9yR2x5cGgoMCksIDApLCBt
X2dseXBoQ291bnQpOwogICAgIG1fYWR2YW5jZXMgPSBtX2FkdmFuY2VzVmVjdG9yLmRhdGEoKTsK
IH0KIApAQCAtMTg0LDExICsxODQsMTEgQEAgc3RhdGljIGNvbnN0IFVuaUNoYXIqIHByb3ZpZGVT
dHJpbmdBbmRBdAogICAgIHJldHVybiBpbmZvLT5jcCArIHN0cmluZ0luZGV4OwogfQogCi12b2lk
IENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Y29sbGVjdENvbXBsZXhUZXh0UnVuc0ZvckNoYXJhY3Rl
cnMoY29uc3QgVUNoYXIqIGNwLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0cmluZ0xvY2F0
aW9uLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEpCit2b2lkIENvbXBsZXhUZXh0Q29u
dHJvbGxlcjo6Y29sbGVjdENvbXBsZXhUZXh0UnVuc0ZvckNoYXJhY3RlcnMoY29uc3QgVUNoYXIq
IGNwLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0cmluZ0xvY2F0aW9uLCBjb25zdCBGb250
KiBmb250KQogewotICAgIGlmICghZm9udERhdGEpIHsKKyAgICBpZiAoIWZvbnQpIHsKICAgICAg
ICAgLy8gQ3JlYXRlIGEgcnVuIG9mIG1pc3NpbmcgZ2x5cGhzIGZyb20gdGhlIHByaW1hcnkgZm9u
dC4KLSAgICAgICAgbV9jb21wbGV4VGV4dFJ1bnMuYXBwZW5kKENvbXBsZXhUZXh0UnVuOjpjcmVh
dGUobV9mb250LnByaW1hcnlGb250RGF0YSgpLCBjcCwgc3RyaW5nTG9jYXRpb24sIGxlbmd0aCwg
bV9ydW4ubHRyKCkpKTsKKyAgICAgICAgbV9jb21wbGV4VGV4dFJ1bnMuYXBwZW5kKENvbXBsZXhU
ZXh0UnVuOjpjcmVhdGUobV9mb250LnByaW1hcnlGb250KCksIGNwLCBzdHJpbmdMb2NhdGlvbiwg
bGVuZ3RoLCBtX3J1bi5sdHIoKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xOTYs
MjYgKzE5NiwyNiBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Y29sbGVjdENvbXBsCiAK
ICAgICBVQ2hhcjMyIGJhc2VDaGFyYWN0ZXIgPSAwOwogICAgIFJldGFpblB0cjxDRkRpY3Rpb25h
cnlSZWY+IHN0cmluZ0F0dHJpYnV0ZXM7Ci0gICAgaWYgKGZvbnREYXRhID09IFNpbXBsZUZvbnRE
YXRhOjpzeXN0ZW1GYWxsYmFjaygpKSB7CisgICAgaWYgKGZvbnQgPT0gRm9udDo6c3lzdGVtRmFs
bGJhY2soKSkgewogICAgICAgICAvLyBGSVhNRTogVGhpcyBjb2RlIHBhdGggZG9lcyBub3Qgc3Vw
cG9ydCBzbWFsbCBjYXBzLgogICAgICAgICBpc1N5c3RlbUZhbGxiYWNrID0gdHJ1ZTsKIAogICAg
ICAgICBVMTZfR0VUKGNwLCAwLCAwLCBsZW5ndGgsIGJhc2VDaGFyYWN0ZXIpOwotICAgICAgICBm
b250RGF0YSA9IG1fZm9udC5mYWxsYmFja1Jhbmdlc0F0KDApLmZvbnREYXRhRm9yQ2hhcmFjdGVy
KGJhc2VDaGFyYWN0ZXIpOwotICAgICAgICBpZiAoIWZvbnREYXRhKQotICAgICAgICAgICAgZm9u
dERhdGEgPSAmbV9mb250LmZhbGxiYWNrUmFuZ2VzQXQoMCkuZm9udERhdGFGb3JGaXJzdFJhbmdl
KCk7CisgICAgICAgIGZvbnQgPSBtX2ZvbnQuZmFsbGJhY2tSYW5nZXNBdCgwKS5mb250Rm9yQ2hh
cmFjdGVyKGJhc2VDaGFyYWN0ZXIpOworICAgICAgICBpZiAoIWZvbnQpCisgICAgICAgICAgICBm
b250ID0gJm1fZm9udC5mYWxsYmFja1Jhbmdlc0F0KDApLmZvbnRGb3JGaXJzdFJhbmdlKCk7CiAK
ICAgICAgICAgUmV0YWluUHRyPFdlYkNhc2NhZGVMaXN0PiBjYXNjYWRlTGlzdCA9IGFkb3B0TlMo
W1tXZWJDYXNjYWRlTGlzdCBhbGxvY10gaW5pdFdpdGhGb250OiZtX2ZvbnQgY2hhcmFjdGVyOmJh
c2VDaGFyYWN0ZXJdKTsKIAotICAgICAgICBzdHJpbmdBdHRyaWJ1dGVzID0gYWRvcHRDRihDRkRp
Y3Rpb25hcnlDcmVhdGVNdXRhYmxlQ29weShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwLCBmb250RGF0
YS0+Z2V0Q0ZTdHJpbmdBdHRyaWJ1dGVzKG1fZm9udC50eXBlc2V0dGluZ0ZlYXR1cmVzKCksIGZv
bnREYXRhLT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpKSkpOworICAgICAgICBzdHJpbmdB
dHRyaWJ1dGVzID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxlQ29weShrQ0ZBbGxv
Y2F0b3JEZWZhdWx0LCAwLCBmb250LT5nZXRDRlN0cmluZ0F0dHJpYnV0ZXMobV9mb250LnR5cGVz
ZXR0aW5nRmVhdHVyZXMoKSwgZm9udC0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSkpKTsK
ICAgICAgICAgc3RhdGljIGNvbnN0IHZvaWQqIGF0dHJpYnV0ZUtleXNbXSA9IHsga0NURm9udENh
c2NhZGVMaXN0QXR0cmlidXRlIH07CiAgICAgICAgIGNvbnN0IHZvaWQqIHZhbHVlc1tdID0geyBj
YXNjYWRlTGlzdC5nZXQoKSB9OwogICAgICAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBh
dHRyaWJ1dGVzID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVs
dCwgYXR0cmlidXRlS2V5cywgdmFsdWVzLCBzaXplb2YoYXR0cmlidXRlS2V5cykgLyBzaXplb2Yo
KmF0dHJpYnV0ZUtleXMpLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBl
RGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CiAgICAgICAgIFJldGFpblB0cjxDVEZvbnREZXNj
cmlwdG9yUmVmPiBmb250RGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0
ZVdpdGhBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMuZ2V0KCkpKTsKLSAgICAgICAgUmV0YWluUHRyPENU
Rm9udFJlZj4gZm9udFdpdGhDYXNjYWRlTGlzdCA9IGFkb3B0Q0YoQ1RGb250Q3JlYXRlQ29weVdp
dGhBdHRyaWJ1dGVzKGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSwgbV9mb250LnBp
eGVsU2l6ZSgpLCAwLCBmb250RGVzY3JpcHRvci5nZXQoKSkpOworICAgICAgICBSZXRhaW5QdHI8
Q1RGb250UmVmPiBmb250V2l0aENhc2NhZGVMaXN0ID0gYWRvcHRDRihDVEZvbnRDcmVhdGVDb3B5
V2l0aEF0dHJpYnV0ZXMoZm9udC0+cGxhdGZvcm1EYXRhKCkuY3RGb250KCksIG1fZm9udC5waXhl
bFNpemUoKSwgMCwgZm9udERlc2NyaXB0b3IuZ2V0KCkpKTsKICAgICAgICAgQ0ZEaWN0aW9uYXJ5
U2V0VmFsdWUoY29uc3RfY2FzdDxDRk11dGFibGVEaWN0aW9uYXJ5UmVmPihzdHJpbmdBdHRyaWJ1
dGVzLmdldCgpKSwga0NURm9udEF0dHJpYnV0ZU5hbWUsIGZvbnRXaXRoQ2FzY2FkZUxpc3QuZ2V0
KCkpOwogICAgIH0gZWxzZQotICAgICAgICBzdHJpbmdBdHRyaWJ1dGVzID0gZm9udERhdGEtPmdl
dENGU3RyaW5nQXR0cmlidXRlcyhtX2ZvbnQudHlwZXNldHRpbmdGZWF0dXJlcygpLCBmb250RGF0
YS0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSk7CisgICAgICAgIHN0cmluZ0F0dHJpYnV0
ZXMgPSBmb250LT5nZXRDRlN0cmluZ0F0dHJpYnV0ZXMobV9mb250LnR5cGVzZXR0aW5nRmVhdHVy
ZXMoKSwgZm9udC0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSk7CiAKICAgICBSZXRhaW5Q
dHI8Q1RMaW5lUmVmPiBsaW5lOwogCkBAIC0yNDgsNTUgKzI0OCw1NSBAQCB2b2lkIENvbXBsZXhU
ZXh0Q29udHJvbGxlcjo6Y29sbGVjdENvbXBsCiAgICAgICAgIENUUnVuUmVmIGN0UnVuID0gc3Rh
dGljX2Nhc3Q8Q1RSdW5SZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgocnVuQXJyYXksIG1fcnVu
Lmx0cigpID8gciA6IHJ1bkNvdW50IC0gMSAtIHIpKTsKICAgICAgICAgQVNTRVJUKENGR2V0VHlw
ZUlEKGN0UnVuKSA9PSBDVFJ1bkdldFR5cGVJRCgpKTsKICAgICAgICAgQ0ZSYW5nZSBydW5SYW5n
ZSA9IENUUnVuR2V0U3RyaW5nUmFuZ2UoY3RSdW4pOwotICAgICAgICBjb25zdCBTaW1wbGVGb250
RGF0YSogcnVuRm9udERhdGEgPSBmb250RGF0YTsKKyAgICAgICAgY29uc3QgRm9udCogcnVuRm9u
dCA9IGZvbnQ7CiAgICAgICAgIGlmIChpc1N5c3RlbUZhbGxiYWNrKSB7CiAgICAgICAgICAgICBD
RkRpY3Rpb25hcnlSZWYgcnVuQXR0cmlidXRlcyA9IENUUnVuR2V0QXR0cmlidXRlcyhjdFJ1bik7
Ci0gICAgICAgICAgICBDVEZvbnRSZWYgcnVuRm9udCA9IHN0YXRpY19jYXN0PENURm9udFJlZj4o
Q0ZEaWN0aW9uYXJ5R2V0VmFsdWUocnVuQXR0cmlidXRlcywga0NURm9udEF0dHJpYnV0ZU5hbWUp
KTsKLSAgICAgICAgICAgIEFTU0VSVChDRkdldFR5cGVJRChydW5Gb250KSA9PSBDVEZvbnRHZXRU
eXBlSUQoKSk7Ci0gICAgICAgICAgICBSZXRhaW5QdHI8Q0ZUeXBlUmVmPiBydW5Gb250RXF1YWxp
dHlPYmplY3QgPSBGb250UGxhdGZvcm1EYXRhOjpvYmplY3RGb3JFcXVhbGl0eUNoZWNrKHJ1bkZv
bnQpOwotICAgICAgICAgICAgaWYgKCFDRkVxdWFsKHJ1bkZvbnRFcXVhbGl0eU9iamVjdC5nZXQo
KSwgZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm9iamVjdEZvckVxdWFsaXR5Q2hlY2soKS5nZXQo
KSkpIHsKKyAgICAgICAgICAgIENURm9udFJlZiBydW5DVEZvbnQgPSBzdGF0aWNfY2FzdDxDVEZv
bnRSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKHJ1bkF0dHJpYnV0ZXMsIGtDVEZvbnRBdHRyaWJ1
dGVOYW1lKSk7CisgICAgICAgICAgICBBU1NFUlQoQ0ZHZXRUeXBlSUQocnVuQ1RGb250KSA9PSBD
VEZvbnRHZXRUeXBlSUQoKSk7CisgICAgICAgICAgICBSZXRhaW5QdHI8Q0ZUeXBlUmVmPiBydW5G
b250RXF1YWxpdHlPYmplY3QgPSBGb250UGxhdGZvcm1EYXRhOjpvYmplY3RGb3JFcXVhbGl0eUNo
ZWNrKHJ1bkNURm9udCk7CisgICAgICAgICAgICBpZiAoIUNGRXF1YWwocnVuRm9udEVxdWFsaXR5
T2JqZWN0LmdldCgpLCBmb250LT5wbGF0Zm9ybURhdGEoKS5vYmplY3RGb3JFcXVhbGl0eUNoZWNr
KCkuZ2V0KCkpKSB7CiAgICAgICAgICAgICAgICAgLy8gQmVnaW4gdHJ5aW5nIHRvIHNlZSBpZiBy
dW5Gb250IG1hdGNoZXMgYW55IG9mIHRoZSBmb250cyBpbiB0aGUgZmFsbGJhY2sgbGlzdC4KIAog
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7ICFtX2ZvbnQuZmFsbGJhY2tSYW5n
ZXNBdChpKS5pc051bGwoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJ1bkZvbnREYXRh
ID0gbV9mb250LmZhbGxiYWNrUmFuZ2VzQXQoaSkuZm9udERhdGFGb3JDaGFyYWN0ZXIoYmFzZUNo
YXJhY3Rlcik7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghcnVuRm9udERhdGEpCisgICAgICAg
ICAgICAgICAgICAgIHJ1bkZvbnQgPSBtX2ZvbnQuZmFsbGJhY2tSYW5nZXNBdChpKS5mb250Rm9y
Q2hhcmFjdGVyKGJhc2VDaGFyYWN0ZXIpOworICAgICAgICAgICAgICAgICAgICBpZiAoIXJ1bkZv
bnQpCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAg
ICAgUmV0YWluUHRyPENGVHlwZVJlZj4gcnVuRm9udEVxdWFsaXR5T2JqZWN0ID0gcnVuRm9udERh
dGEtPnBsYXRmb3JtRGF0YSgpLm9iamVjdEZvckVxdWFsaXR5Q2hlY2soKTsKKyAgICAgICAgICAg
ICAgICAgICAgUmV0YWluUHRyPENGVHlwZVJlZj4gcnVuRm9udEVxdWFsaXR5T2JqZWN0ID0gcnVu
Rm9udC0+cGxhdGZvcm1EYXRhKCkub2JqZWN0Rm9yRXF1YWxpdHlDaGVjaygpOwogICAgICAgICAg
ICAgICAgICAgICBpZiAoQ0ZFcXVhbChydW5Gb250RXF1YWxpdHlPYmplY3QuZ2V0KCksIHJ1bkZv
bnRFcXVhbGl0eU9iamVjdC5nZXQoKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgcnVuRm9udERhdGEgPSAwOworICAgICAgICAgICAgICAgICAg
ICBydW5Gb250ID0gbnVsbHB0cjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
Ly8gSWYgdGhlcmUgaXMgbm8gbWF0Y2hpbmcgZm9udCwgbG9vayB1cCBieSBuYW1lIGluIHRoZSBm
b250IGNhY2hlLgotICAgICAgICAgICAgICAgIGlmICghcnVuRm9udERhdGEpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoIXJ1bkZvbnQpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gUmF0aGVyIHRo
YW4gdXNpbmcgcnVuRm9udCBhcyBhbiBOU0ZvbnQgYW5kIHdyYXBwaW5nIGl0IGluIGEgRm9udFBs
YXRmb3JtRGF0YSwgZ28gdGhyb3VnaAogICAgICAgICAgICAgICAgICAgICAvLyB0aGUgZm9udCBj
YWNoZSBhbmQgdWx0aW1hdGVseSB0aHJvdWdoIE5TRm9udE1hbmFnZXIgaW4gb3JkZXIgdG8gZ2V0
IGFuIE5TRm9udCB3aXRoIHRoZSByaWdodAogICAgICAgICAgICAgICAgICAgICAvLyBOU0ZvbnRS
ZW5kZXJpbmdNb2RlLgotICAgICAgICAgICAgICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+
IGZvbnROYW1lID0gYWRvcHRDRihDVEZvbnRDb3B5UG9zdFNjcmlwdE5hbWUocnVuRm9udCkpOwor
ICAgICAgICAgICAgICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGZvbnROYW1lID0gYWRv
cHRDRihDVEZvbnRDb3B5UG9zdFNjcmlwdE5hbWUocnVuQ1RGb250KSk7CiAgICAgICAgICAgICAg
ICAgICAgIGlmIChDRkVxdWFsKGZvbnROYW1lLmdldCgpLCBDRlNUUigiTGFzdFJlc29ydCIpKSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgbV9jb21wbGV4VGV4dFJ1bnMuYXBwZW5kKENvbXBs
ZXhUZXh0UnVuOjpjcmVhdGUobV9mb250LnByaW1hcnlGb250RGF0YSgpLCBjcCwgc3RyaW5nTG9j
YXRpb24gKyBydW5SYW5nZS5sb2NhdGlvbiwgcnVuUmFuZ2UubGVuZ3RoLCBtX3J1bi5sdHIoKSkp
OworICAgICAgICAgICAgICAgICAgICAgICAgbV9jb21wbGV4VGV4dFJ1bnMuYXBwZW5kKENvbXBs
ZXhUZXh0UnVuOjpjcmVhdGUobV9mb250LnByaW1hcnlGb250KCksIGNwLCBzdHJpbmdMb2NhdGlv
biArIHJ1blJhbmdlLmxvY2F0aW9uLCBydW5SYW5nZS5sZW5ndGgsIG1fcnVuLmx0cigpKSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICBydW5Gb250RGF0YSA9IGZvbnRDYWNoZSgpLmZvbnRGb3JGYW1p
bHkobV9mb250LmZvbnREZXNjcmlwdGlvbigpLCBmb250TmFtZS5nZXQoKSwgZmFsc2UpLmdldCgp
OworICAgICAgICAgICAgICAgICAgICBydW5Gb250ID0gZm9udENhY2hlKCkuZm9udEZvckZhbWls
eShtX2ZvbnQuZm9udERlc2NyaXB0aW9uKCksIGZvbnROYW1lLmdldCgpLCBmYWxzZSkuZ2V0KCk7
CiAjaWYgIVBMQVRGT1JNKElPUykKICAgICAgICAgICAgICAgICAgICAgLy8gQ29yZSBUZXh0IG1h
eSBoYXZlIHVzZWQgYSBmb250IHRoYXQgaXMgbm90IGtub3duIHRvIE5TRm9udE1hbmFnZXIuIElu
IHRoYXQgY2FzZSwgZmFsbCBiYWNrIG9uCiAgICAgICAgICAgICAgICAgICAgIC8vIHVzaW5nIHRo
ZSBmb250IGFzIHJldHVybmVkLCBldmVuIHRob3VnaCBpdCBtYXkgbm90IGhhdmUgdGhlIGJlc3Qg
TlNGb250UmVuZGVyaW5nTW9kZS4KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFydW5Gb250RGF0
YSkgewotICAgICAgICAgICAgICAgICAgICAgICAgRm9udFBsYXRmb3JtRGF0YSBydW5Gb250UGxh
dGZvcm1EYXRhKChOU0ZvbnQgKilydW5Gb250LCBDVEZvbnRHZXRTaXplKHJ1bkZvbnQpLCBtX2Zv
bnQuZm9udERlc2NyaXB0aW9uKCkudXNlUHJpbnRlckZvbnQoKSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBydW5Gb250RGF0YSA9ICZmb250Q2FjaGUoKS5mb250Rm9yUGxhdGZvcm1EYXRhKHJ1
bkZvbnRQbGF0Zm9ybURhdGEpLmdldCgpOworICAgICAgICAgICAgICAgICAgICBpZiAoIXJ1bkZv
bnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEgcnVuRm9udFBs
YXRmb3JtRGF0YSgoTlNGb250ICopcnVuQ1RGb250LCBDVEZvbnRHZXRTaXplKHJ1bkNURm9udCks
IG1fZm9udC5mb250RGVzY3JpcHRpb24oKS51c2VQcmludGVyRm9udCgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJ1bkZvbnQgPSAmZm9udENhY2hlKCkuZm9udEZvclBsYXRmb3JtRGF0YShy
dW5Gb250UGxhdGZvcm1EYXRhKS5nZXQoKTsKICAgICAgICAgICAgICAgICAgICAgfQogI2Vsc2UK
ICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IEp1c3QgYXNzZXJ0IGZvciBub3csIHVudGls
IHdlIGNhbiBkZXZpc2UgYSBiZXR0ZXIgZml4IHRoYXQgd29ya3Mgd2l0aCBpT1MuCi0gICAgICAg
ICAgICAgICAgICAgIEFTU0VSVChydW5Gb250RGF0YSk7CisgICAgICAgICAgICAgICAgICAgIEFT
U0VSVChydW5Gb250KTsKICNlbmRpZgogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBpZiAobV9mYWxsYmFja0ZvbnRzICYmIHJ1bkZvbnREYXRhICE9ICZtX2ZvbnQucHJpbWFyeUZv
bnREYXRhKCkpCi0gICAgICAgICAgICAgICAgICAgIG1fZmFsbGJhY2tGb250cy0+YWRkKHJ1bkZv
bnREYXRhKTsKKyAgICAgICAgICAgICAgICBpZiAobV9mYWxsYmFja0ZvbnRzICYmIHJ1bkZvbnQg
IT0gJm1fZm9udC5wcmltYXJ5Rm9udCgpKQorICAgICAgICAgICAgICAgICAgICBtX2ZhbGxiYWNr
Rm9udHMtPmFkZChydW5Gb250KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBp
ZiAobV9mYWxsYmFja0ZvbnRzICYmIHJ1bkZvbnREYXRhICE9ICZtX2ZvbnQucHJpbWFyeUZvbnRE
YXRhKCkpCi0gICAgICAgICAgICBtX2ZhbGxiYWNrRm9udHMtPmFkZChmb250RGF0YSk7CisgICAg
ICAgIGlmIChtX2ZhbGxiYWNrRm9udHMgJiYgcnVuRm9udCAhPSAmbV9mb250LnByaW1hcnlGb250
KCkpCisgICAgICAgICAgICBtX2ZhbGxiYWNrRm9udHMtPmFkZChmb250KTsKIAotICAgICAgICBt
X2NvbXBsZXhUZXh0UnVucy5hcHBlbmQoQ29tcGxleFRleHRSdW46OmNyZWF0ZShjdFJ1biwgKnJ1
bkZvbnREYXRhLCBjcCwgc3RyaW5nTG9jYXRpb24sIGxlbmd0aCwgcnVuUmFuZ2UpKTsKKyAgICAg
ICAgbV9jb21wbGV4VGV4dFJ1bnMuYXBwZW5kKENvbXBsZXhUZXh0UnVuOjpjcmVhdGUoY3RSdW4s
ICpydW5Gb250LCBjcCwgc3RyaW5nTG9jYXRpb24sIGxlbmd0aCwgcnVuUmFuZ2UpKTsKICAgICB9
CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q2Fj
aGVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0ZvbnRDYWNoZU1hYy5tbQkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDYWNoZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAt
MzMsOCArMzMsOCBAQAogI2lmICFQTEFURk9STShJT1MpCiAKICNpbXBvcnQgIkNvcmVHcmFwaGlj
c1NQSS5oIgorI2ltcG9ydCAiRm9udC5oIgogI2ltcG9ydCAiRm9udENhc2NhZGUuaCIKLSNpbXBv
cnQgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW1wb3J0ICJGb250UGxhdGZvcm1EYXRhLmgiCiAjaW1w
b3J0ICJOU0ZvbnRTUEkuaCIKICNpbXBvcnQgIldlYkNvcmVOU1N0cmluZ0V4dHJhcy5oIgpAQCAt
MzM3LDcgKzMzNyw3IEBAIHN0YXRpYyBib29sIHNob3VsZEF1dG9BY3RpdmF0ZUZvbnRJZk5lZWQK
ICAgICByZXR1cm4ga25vd25GYW1pbGllcy5nZXQoKS5hZGQoZmFtaWx5KS5pc05ld0VudHJ5Owog
fQogCi1SZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6c3lzdGVtRmFsbGJhY2tGb3JD
aGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IFNpbXBs
ZUZvbnREYXRhKiBvcmlnaW5hbEZvbnREYXRhLCBib29sIGlzUGxhdGZvcm1Gb250LCBjb25zdCBV
Q2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKK1JlZlB0cjxGb250PiBGb250Q2FjaGU6OnN5
c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0
aW9uLCBjb25zdCBGb250KiBvcmlnaW5hbEZvbnREYXRhLCBib29sIGlzUGxhdGZvcm1Gb250LCBj
b25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKIHsKICAgICBVQ2hhcjMyIGNoYXJh
Y3RlcjsKICAgICBVMTZfR0VUKGNoYXJhY3RlcnMsIDAsIDAsIGxlbmd0aCwgY2hhcmFjdGVyKTsK
QEAgLTQwNSwzNCArNDA1LDM1IEBAIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpz
eXN0ZW0KICAgICByZXR1cm4gZm9udEZvclBsYXRmb3JtRGF0YShhbHRlcm5hdGVGb250KTsKIH0K
IAotUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OnNpbWlsYXJGb250UGxhdGZvcm1E
YXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCitSZWZQdHI8Rm9udD4gRm9u
dENhY2hlOjpzaW1pbGFyRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQog
ewogICAgIC8vIEF0dGVtcHQgdG8gZmluZCBhbiBhcHByb3ByaWF0ZSBmb250IHVzaW5nIGEgbWF0
Y2ggYmFzZWQgb24gCiAgICAgLy8gdGhlIHByZXNlbmNlIG9mIGtleXdvcmRzIGluIHRoZSB0aGUg
cmVxdWVzdGVkIG5hbWVzLiAgRm9yIGV4YW1wbGUsIHdlJ2xsCiAgICAgLy8gbWF0Y2ggYW55IG5h
bWUgdGhhdCBjb250YWlucyAiQXJhYmljIiB0byBHZWV6YSBQcm8uCi0gICAgUmVmUHRyPFNpbXBs
ZUZvbnREYXRhPiBzaW1wbGVGb250RGF0YTsKKyAgICBSZWZQdHI8Rm9udD4gZm9udDsKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVzY3JpcHRpb24uZmFtaWx5Q291bnQoKTsgKytpKSB7
CiAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5ID0gZGVzY3JpcHRpb24uZmFtaWx5
QXQoaSk7CiAgICAgICAgIGlmIChmYW1pbHkuaXNFbXB0eSgpKQogICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgIHN0YXRpYyBTdHJpbmcqIG1hdGNoV29yZHNbM10gPSB7IG5ldyBTdHJpbmco
IkFyYWJpYyIpLCBuZXcgU3RyaW5nKCJQYXNodG8iKSwgbmV3IFN0cmluZygiVXJkdSIpIH07CiAg
ICAgICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIGdlZXph
U3RyLCAoIkdlZXphIFBybyIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsK
LSAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCAzICYmICFzaW1wbGVGb250RGF0YTsgKytqKQor
ICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDMgJiYgIWZvbnQ7ICsraikgewogICAgICAgICAg
ICAgaWYgKGZhbWlseS5jb250YWlucygqbWF0Y2hXb3Jkc1tqXSwgZmFsc2UpKQotICAgICAgICAg
ICAgICAgIHNpbXBsZUZvbnREYXRhID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgZ2VlemFT
dHIpOworICAgICAgICAgICAgICAgIGZvbnQgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBn
ZWV6YVN0cik7CisgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIHNpbXBsZUZvbnREYXRhLnJl
bGVhc2UoKTsKKyAgICByZXR1cm4gZm9udC5yZWxlYXNlKCk7CiB9CiAKLVJlZjxTaW1wbGVGb250
RGF0YT4gRm9udENhY2hlOjpsYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZm9udERlc2NyaXB0aW9uKQorUmVmPEZvbnQ+IEZvbnRDYWNoZTo6bGFzdFJlc29ydEZh
bGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikKIHsKICAg
ICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCB0aW1lc1N0ciwg
KCJUaW1lcyIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKIAogICAgIC8v
IEZJWE1FOiBXb3VsZCBiZSBldmVuIGJldHRlciB0byBzb21laG93IGdldCB0aGUgdXNlcidzIGRl
ZmF1bHQgZm9udCBoZXJlLiAgRm9yIG5vdyB3ZSdsbCBwaWNrCiAgICAgLy8gdGhlIGRlZmF1bHQg
dGhhdCB0aGUgdXNlciB3b3VsZCBnZXQgd2l0aG91dCBjaGFuZ2luZyBhbnkgcHJlZnMuCi0gICAg
UmVmUHRyPFNpbXBsZUZvbnREYXRhPiBzaW1wbGVGb250RGF0YSA9IGZvbnRGb3JGYW1pbHkoZm9u
dERlc2NyaXB0aW9uLCB0aW1lc1N0ciwgZmFsc2UpOwotICAgIGlmIChzaW1wbGVGb250RGF0YSkK
LSAgICAgICAgcmV0dXJuICpzaW1wbGVGb250RGF0YTsKKyAgICBSZWZQdHI8Rm9udD4gZm9udCA9
IGZvbnRGb3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCB0aW1lc1N0ciwgZmFsc2UpOworICAgIGlm
IChmb250KQorICAgICAgICByZXR1cm4gKmZvbnQ7CiAKICAgICAvLyBUaGUgVGltZXMgZmFsbGJh
Y2sgd2lsbCBhbG1vc3QgYWx3YXlzIHdvcmssIGJ1dCBpbiB0aGUgaGlnaGx5IHVudXN1YWwgY2Fz
ZSB3aGVyZQogICAgIC8vIHRoZSB1c2VyIGRvZXNuJ3QgaGF2ZSBpdCwgd2UgZmFsbCBiYWNrIG9u
IEx1Y2lkYSBHcmFuZGUgYmVjYXVzZSB0aGF0J3MKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL21hYy9HbHlwaFBhZ2VNYWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HbHlwaFBhZ2VNYWMuY3BwCShyZXZpc2lvbiAx
Nzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR2x5cGhQYWdl
TWFjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsOCArMzEsOCBAQAogCiAjaW5jbHVkZSAiQ29y
ZUdyYXBoaWNzU1BJLmgiCiAjaW5jbHVkZSAiQ29yZVRleHRTUEkuaCIKKyNpbmNsdWRlICJGb250
LmgiCiAjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5o
IgogI2luY2x1ZGUgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKICNpZiAhUExBVEZPUk0oSU9T
KQogI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgpA
QCAtNDAsNyArNDAsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBib29sIHNo
b3VsZFVzZUNvcmVUZXh0KGNvbnN0IFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0
aCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQorc3RhdGljIGJvb2wgc2hvdWxkVXNl
Q29yZVRleHQoY29uc3QgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25z
dCBGb250KiBmb250RGF0YSkKIHsKICAgICBpZiAoZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLmlz
Q29tcG9zaXRlRm9udFJlZmVyZW5jZSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTU1LDcg
KzU1LDcgQEAgc3RhdGljIGJvb2wgc2hvdWxkVXNlQ29yZVRleHQoY29uc3QgVUNoYQogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotYm9vbCBHbHlwaFBhZ2U6Om1heVVzZU1peGVkRm9udERhdGFXaGVu
RmlsbGluZyhjb25zdCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0
IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSkKK2Jvb2wgR2x5cGhQYWdlOjptYXlVc2VNaXhlZEZv
bnRzV2hlbkZpbGxpbmcoY29uc3QgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3Ro
LCBjb25zdCBGb250KiBmb250RGF0YSkKIHsKICNpZiBVU0UoQVBQS0lUKQogICAgIC8vIEZJWE1F
OiBUaGlzIGlzIG9ubHkgcmVhbGx5IG5lZWRlZCBmb3IgY29tcG9zaXRlIGZvbnQgcmVmZXJlbmNl
cy4KQEAgLTY4LDcgKzY4LDcgQEAgYm9vbCBHbHlwaFBhZ2U6Om1heVVzZU1peGVkRm9udERhdGFX
aGVuRgogI2VuZGlmCiB9CiAKLWJvb2wgR2x5cGhQYWdlOjpmaWxsKHVuc2lnbmVkIG9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNv
bnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSkKK2Jvb2wgR2x5cGhQYWdlOjpmaWxsKHVuc2ln
bmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZm
ZXJMZW5ndGgsIGNvbnN0IEZvbnQqIGZvbnREYXRhKQogewogICAgIGJvb2wgaGF2ZUdseXBocyA9
IGZhbHNlOwogCkBAIC0xNjMsNyArMTYzLDcgQEAgYm9vbCBHbHlwaFBhZ2U6OmZpbGwodW5zaWdu
ZWQgb2Zmc2V0LCB1bgogICAgICAgICAgICAgICAgICAgICB9CiAjaWYgVVNFKEFQUEtJVCkKICAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBjb25zdCBTaW1wbGVG
b250RGF0YSogcnVuU2ltcGxlID0gZm9udERhdGEtPmNvbXBvc2l0ZUZvbnRSZWZlcmVuY2VGb250
RGF0YSgoTlNGb250ICopcnVuRm9udCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZvbnQq
IHJ1blNpbXBsZSA9IGZvbnREYXRhLT5jb21wb3NpdGVGb250UmVmZXJlbmNlRm9udCgoTlNGb250
ICopcnVuRm9udCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChydW5TaW1wbGUpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IGdseXBoQ291bnQ7ICsr
aSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJpbmdJbmRpY2VzW2ldID49
IHN0YXRpY19jYXN0PENGSW5kZXg+KGJ1ZmZlckxlbmd0aCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YUNvcmVUZXh0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9u
dERhdGFDb3JlVGV4dC5jcHAJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YUNvcmVUZXh0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjUsNyArMjUsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJTaW1wbGVGb250RGF0YS5oIgorI2luY2x1ZGUgIkZvbnQuaCIKIAogI2lmICFQTEFURk9S
TShJT1MpCiAjaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2Vz
Lmg+CkBAIC0zNSw3ICszNSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ0ZEaWN0aW9u
YXJ5UmVmIFNpbXBsZUZvbnREYXRhOjpnZXRDRlN0cmluZ0F0dHJpYnV0ZXMoVHlwZXNldHRpbmdG
ZWF0dXJlcyB0eXBlc2V0dGluZ0ZlYXR1cmVzLCBGb250T3JpZW50YXRpb24gb3JpZW50YXRpb24p
IGNvbnN0CitDRkRpY3Rpb25hcnlSZWYgRm9udDo6Z2V0Q0ZTdHJpbmdBdHRyaWJ1dGVzKFR5cGVz
ZXR0aW5nRmVhdHVyZXMgdHlwZXNldHRpbmdGZWF0dXJlcywgRm9udE9yaWVudGF0aW9uIG9yaWVu
dGF0aW9uKSBjb25zdAogewogICAgIHVuc2lnbmVkIGtleSA9IHR5cGVzZXR0aW5nRmVhdHVyZXMg
KyAxOwogICAgIEhhc2hNYXA8dW5zaWduZWQsIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+Pjo6
QWRkUmVzdWx0IGFkZFJlc3VsdCA9IG1fQ0ZTdHJpbmdBdHRyaWJ1dGVzLmFkZChrZXksIFJldGFp
blB0cjxDRkRpY3Rpb25hcnlSZWY+KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YU1hYy5tbQkocmV2aXNp
b24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBs
ZUZvbnREYXRhTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiAgKi8KIAog
I2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJTaW1wbGVGb250RGF0YS5oIgorI2ltcG9ydCAi
Rm9udC5oIgogCiAjaW1wb3J0ICJCbG9ja0V4Y2VwdGlvbnMuaCIKICNpbXBvcnQgIkNvbG9yLmgi
CkBAIC03MSw3ICs3MSw3IEBAIHN0YXRpYyBib29sIGZvbnRIYXNWZXJ0aWNhbEdseXBocyhDVEZv
bnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBib29sIGluaXRGb250RGF0YShTaW1w
bGVGb250RGF0YSogZm9udERhdGEpCitzdGF0aWMgYm9vbCBpbml0Rm9udERhdGEoRm9udCogZm9u
dERhdGEpCiB7CiAgICAgaWYgKCFmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkuY2dGb250KCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTg1LDcgKzg1LDcgQEAgc3RhdGljIE5TU3RyaW5nICp3
ZWJGYWxsYmFja0ZvbnRGYW1pbHkodgogICAgIHJldHVybiB3ZWJGYWxsYmFja0ZvbnRGYW1pbHk7
CiB9CiAKLWNvbnN0IFNpbXBsZUZvbnREYXRhKiBTaW1wbGVGb250RGF0YTo6Y29tcG9zaXRlRm9u
dFJlZmVyZW5jZUZvbnREYXRhKE5TRm9udCAqa2V5KSBjb25zdAorY29uc3QgRm9udCogRm9udDo6
Y29tcG9zaXRlRm9udFJlZmVyZW5jZUZvbnQoTlNGb250ICprZXkpIGNvbnN0CiB7CiAgICAgaWYg
KCFrZXkgfHwgQ0ZFcXVhbChhZG9wdENGKENURm9udENvcHlQb3N0U2NyaXB0TmFtZShDVEZvbnRS
ZWYoa2V5KSkpLmdldCgpLCBDRlNUUigiTGFzdFJlc29ydCIpKSkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CkBAIC0xMDMsMTIgKzEwMywxMiBAQCBjb25zdCBTaW1wbGVGb250RGF0YSogU2ltcGxl
Rm9udERhdGE6OmNvCiAgICAgICAgIGJvb2wgc3ludGhldGljT2JsaXF1ZSA9IHBsYXRmb3JtRGF0
YSgpLnN5bnRoZXRpY09ibGlxdWUoKSAmJiAhKHRyYWl0cyAmIGtDVEZvbnRJdGFsaWNUcmFpdCk7
CiAKICAgICAgICAgRm9udFBsYXRmb3JtRGF0YSBzdWJzdGl0dXRlUGxhdGZvcm0oc3Vic3RpdHV0
ZUZvbnQsIHBsYXRmb3JtRGF0YSgpLnNpemUoKSwgaXNVc2luZ1ByaW50ZXJGb250LCBzeW50aGV0
aWNCb2xkLCBzeW50aGV0aWNPYmxpcXVlLCBwbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpLCBw
bGF0Zm9ybURhdGEoKS53aWR0aFZhcmlhbnQoKSk7Ci0gICAgICAgIGFkZFJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUgPSBTaW1wbGVGb250RGF0YTo6Y3JlYXRlKHN1YnN0aXR1dGVQbGF0Zm9ybSwgaXND
dXN0b21Gb250KCkpOworICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gRm9udDo6
Y3JlYXRlKHN1YnN0aXR1dGVQbGF0Zm9ybSwgaXNDdXN0b21Gb250KCkpOwogICAgIH0KICAgICBy
ZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKIH0KIAotdm9pZCBTaW1wbGVG
b250RGF0YTo6cGxhdGZvcm1Jbml0KCkKK3ZvaWQgRm9udDo6cGxhdGZvcm1Jbml0KCkKIHsKICAg
ICBtX3N5bnRoZXRpY0JvbGRPZmZzZXQgPSBtX3BsYXRmb3JtRGF0YS5tX3N5bnRoZXRpY0JvbGQg
PyAxLjBmIDogMC5mOwogCkBAIC0yMjYsNyArMjI2LDcgQEAgdm9pZCBTaW1wbGVGb250RGF0YTo6
cGxhdGZvcm1Jbml0KCkKICAgICAgICAgZWxzZQogICAgICAgICAgICAgeEhlaWdodCA9IHNjYWxl
RW1Ub1VuaXRzKENHRm9udEdldFhIZWlnaHQobV9wbGF0Zm9ybURhdGEuY2dGb250KCkpLCB1bml0
c1BlckVtKSAqIHBvaW50U2l6ZTsKICAgICB9IGVsc2UKLSAgICAgICAgeEhlaWdodCA9IHZlcnRp
Y2FsUmlnaHRPcmllbnRhdGlvbkZvbnREYXRhKCktPmZvbnRNZXRyaWNzKCkueEhlaWdodCgpOwor
ICAgICAgICB4SGVpZ2h0ID0gdmVydGljYWxSaWdodE9yaWVudGF0aW9uRm9udCgpLT5mb250TWV0
cmljcygpLnhIZWlnaHQoKTsKIAogICAgIG1fZm9udE1ldHJpY3Muc2V0VW5pdHNQZXJFbSh1bml0
c1BlckVtKTsKICAgICBtX2ZvbnRNZXRyaWNzLnNldEFzY2VudChhc2NlbnQpOwpAQCAtMjQxLDcg
KzI0MSw3IEBAIHN0YXRpYyBDRkRhdGFSZWYgY29weUZvbnRUYWJsZUZvclRhZyhGb24KICAgICBy
ZXR1cm4gQ0dGb250Q29weVRhYmxlRm9yVGFnKHBsYXRmb3JtRGF0YS5jZ0ZvbnQoKSwgdGFibGVO
YW1lKTsKIH0KIAotdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1DaGFyV2lkdGhJbml0KCkK
K3ZvaWQgRm9udDo6cGxhdGZvcm1DaGFyV2lkdGhJbml0KCkKIHsKICAgICBtX2F2Z0NoYXJXaWR0
aCA9IDA7CiAgICAgbV9tYXhDaGFyV2lkdGggPSAwOwpAQCAtMjY5LDE3ICsyNjksMTcgQEAgdm9p
ZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1DaGFyV2lkdGhJbgogfQogI2VuZGlmIC8vIFVTRShB
UFBLSVQpCiAKLXZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtRGVzdHJveSgpCit2b2lkIEZv
bnQ6OnBsYXRmb3JtRGVzdHJveSgpCiB7CiB9CiAKICNpZiAhUExBVEZPUk0oSU9TKQotUGFzc1Jl
ZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQ3JlYXRlU2NhbGVk
Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNj
YWxlRmFjdG9yKSBjb25zdAorUGFzc1JlZlB0cjxGb250PiBGb250OjpwbGF0Zm9ybUNyZWF0ZVNj
YWxlZEZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNj
YWxlRmFjdG9yKSBjb25zdAogewogICAgIGlmIChpc0N1c3RvbUZvbnQoKSkgewogICAgICAgICBG
b250UGxhdGZvcm1EYXRhIHNjYWxlZEZvbnREYXRhKG1fcGxhdGZvcm1EYXRhKTsKICAgICAgICAg
c2NhbGVkRm9udERhdGEubV9zaXplID0gc2NhbGVkRm9udERhdGEubV9zaXplICogc2NhbGVGYWN0
b3I7Ci0gICAgICAgIHJldHVybiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlKHNjYWxlZEZvbnREYXRh
LCB0cnVlLCBmYWxzZSk7CisgICAgICAgIHJldHVybiBGb250OjpjcmVhdGUoc2NhbGVkRm9udERh
dGEsIHRydWUsIGZhbHNlKTsKICAgICB9CiAKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElP
TlM7CkBAIC0zMTAsNyArMzEwLDcgQEAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxl
Rm9udERhdAogICAgIHJldHVybiAwOwogfQogCi12b2lkIFNpbXBsZUZvbnREYXRhOjpkZXRlcm1p
bmVQaXRjaCgpCit2b2lkIEZvbnQ6OmRldGVybWluZVBpdGNoKCkKIHsKICAgICBOU0ZvbnQqIGYg
PSBtX3BsYXRmb3JtRGF0YS5uc0ZvbnQoKTsKICAgICAvLyBTcGVjaWFsIGNhc2UgT3Nha2EtTW9u
by4KQEAgLTMzMyw3ICszMzMsNyBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpkZXRlcm1pbmVQaXRj
aCgpCiB9CiAjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAotRmxvYXRSZWN0IFNpbXBsZUZvbnRE
YXRhOjpwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAorRmxvYXRSZWN0
IEZvbnQ6OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CiB7CiAgICAg
RmxvYXRSZWN0IGJvdW5kaW5nQm94OwogICAgIGJvdW5kaW5nQm94ID0gQ1RGb250R2V0Qm91bmRp
bmdSZWN0c0ZvckdseXBocyhtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSwgcGxhdGZvcm1EYXRhKCku
b3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCA/IGtDVEZvbnRWZXJ0aWNhbE9yaWVudGF0aW9uIDog
a0NURm9udEhvcml6b250YWxPcmllbnRhdGlvbiwgJmdseXBoLCAwLCAxKTsKQEAgLTM0NSw3ICsz
NDUsNyBAQCBGbG9hdFJlY3QgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQm91bmRzCiB9CiAKICNp
ZiBQTEFURk9STShNQUMpCi1pbmxpbmUgQ0dGb250UmVuZGVyaW5nU3R5bGUgU2ltcGxlRm9udERh
dGE6OnJlbmRlcmluZ1N0eWxlKCkgY29uc3QKK2lubGluZSBDR0ZvbnRSZW5kZXJpbmdTdHlsZSBG
b250OjpyZW5kZXJpbmdTdHlsZSgpIGNvbnN0CiB7CiAgICAgQ0dGb250UmVuZGVyaW5nU3R5bGUg
c3R5bGUgPSBrQ0dGb250UmVuZGVyaW5nU3R5bGVBbnRpYWxpYXNpbmcgfCBrQ0dGb250UmVuZGVy
aW5nU3R5bGVTdWJwaXhlbFBvc2l0aW9uaW5nIHwga0NHRm9udFJlbmRlcmluZ1N0eWxlU3VicGl4
ZWxRdWFudGl6YXRpb247CiAgICAgTlNGb250ICpmb250ID0gcGxhdGZvcm1EYXRhKCkubnNGb250
KCk7CkBAIC0zNjQsNyArMzY0LDcgQEAgaW5saW5lIENHRm9udFJlbmRlcmluZ1N0eWxlIFNpbXBs
ZUZvbnREYQogICAgIHJldHVybiBzdHlsZTsKIH0KIAotaW5saW5lIGJvb2wgU2ltcGxlRm9udERh
dGE6OmFkdmFuY2VGb3JDb2xvckJpdG1hcEZvbnQoR2x5cGggZ2x5cGgsIENHU2l6ZSYgYWR2YW5j
ZSkgY29uc3QKK2lubGluZSBib29sIEZvbnQ6OmFkdmFuY2VGb3JDb2xvckJpdG1hcEZvbnQoR2x5
cGggZ2x5cGgsIENHU2l6ZSYgYWR2YW5jZSkgY29uc3QKIHsKICAgICBOU0ZvbnQgKmZvbnQgPSBw
bGF0Zm9ybURhdGEoKS5uc0ZvbnQoKTsKICAgICBpZiAoIWZvbnQgfHwgIXBsYXRmb3JtRGF0YSgp
LmlzQ29sb3JCaXRtYXBGb250KCkpCkBAIC0zOTQsNyArMzk0LDcgQEAgc3RhdGljIGlubGluZSBi
b29sIGlzRW1vamkoY29uc3QgRm9udFBsYQogI2VuZGlmCiB9CiAKLWlubGluZSBib29sIFNpbXBs
ZUZvbnREYXRhOjpjYW5Vc2VGYXN0R2x5cGhBZHZhbmNlR2V0dGVyKEdseXBoIGdseXBoLCBDR1Np
emUmIGFkdmFuY2UsIGJvb2wmIHBvcHVsYXRlZEFkdmFuY2UpIGNvbnN0CitpbmxpbmUgYm9vbCBG
b250OjpjYW5Vc2VGYXN0R2x5cGhBZHZhbmNlR2V0dGVyKEdseXBoIGdseXBoLCBDR1NpemUmIGFk
dmFuY2UsIGJvb2wmIHBvcHVsYXRlZEFkdmFuY2UpIGNvbnN0CiB7CiAgICAgLy8gRmFzdCBnZXR0
ZXIgZG9lc24ndCB0YWtlIGN1c3RvbSB0cmFja2luZyBpbnRvIGFjY291bnQKICAgICBpZiAoaGFz
Q3VzdG9tVHJhY2tpbmcocGxhdGZvcm1EYXRhKCkuY3RGb250KCkpKQpAQCAtNDEwLDcgKzQxMCw3
IEBAIGlubGluZSBib29sIFNpbXBsZUZvbnREYXRhOjpjYW5Vc2VGYXN0R2wKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotZmxvYXQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtV2lkdGhGb3JHbHlwaChH
bHlwaCBnbHlwaCkgY29uc3QKK2Zsb2F0IEZvbnQ6OnBsYXRmb3JtV2lkdGhGb3JHbHlwaChHbHlw
aCBnbHlwaCkgY29uc3QKIHsKICAgICBDR1NpemUgYWR2YW5jZSA9IENHU2l6ZVplcm87CiAgICAg
Ym9vbCBob3Jpem9udGFsID0gcGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBIb3Jpem9u
dGFsOwpAQCAtNDQ2LDcgKzQ0Niw3IEBAIHN0YXRpYyBjb25zdCBVbmlDaGFyKiBwcm92aWRlU3Ry
aW5nQW5kQXQKICAgICByZXR1cm4gaW5mby0+Y2hhcmFjdGVycyArIHN0cmluZ0luZGV4OwogfQog
Ci1ib29sIFNpbXBsZUZvbnREYXRhOjpjYW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5j
ZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkgY29uc3QKK2Jvb2wgRm9u
dDo6Y2FuUmVuZGVyQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY29uc3QgVUNoYXIqIGNoYXJh
Y3RlcnMsIHNpemVfdCBsZW5ndGgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3Bl
blR5cGVNYXRoRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVNYXRoRGF0YS5jcHAJKHJldmlzaW9uIDE3ODg1NykK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlTWF0
aERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMiArMjYsMTIgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJPcGVuVHlwZU1hdGhEYXRhLmgiCiAKKyNpbmNsdWRlICJGb250
LmgiCiAjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgogI2lmIEVOQUJMRShPUEVOVFlQRV9N
QVRIKQogI2luY2x1ZGUgIk9wZW5UeXBlVHlwZXMuaCIKICNlbmRpZgogI2luY2x1ZGUgIlNoYXJl
ZEJ1ZmZlci5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAKIHVzaW5nIG5hbWVzcGFj
ZSBzdGQ7CiAKQEAgLTIzNSw5ICsyMzUsOSBAQCBzdHJ1Y3QgTUFUSFRhYmxlIDogVGFibGVCYXNl
IHsKICNlbmRpZiAvLyBFTkFCTEUoT1BFTlRZUEVfTUFUSCkKIAogI2lmIEVOQUJMRShPUEVOVFlQ
RV9NQVRIKQotT3BlblR5cGVNYXRoRGF0YTo6T3BlblR5cGVNYXRoRGF0YShjb25zdCBGb250UGxh
dGZvcm1EYXRhJiBmb250RGF0YSkKK09wZW5UeXBlTWF0aERhdGE6Ok9wZW5UeXBlTWF0aERhdGEo
Y29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZm9udCkKIHsKLSAgICBtX21hdGhCdWZmZXIgPSBmb250
RGF0YS5vcGVuVHlwZVRhYmxlKE9wZW5UeXBlOjpNQVRIVGFnKTsKKyAgICBtX21hdGhCdWZmZXIg
PSBmb250Lm9wZW5UeXBlVGFibGUoT3BlblR5cGU6Ok1BVEhUYWcpOwogICAgIGNvbnN0IE9wZW5U
eXBlOjpNQVRIVGFibGUqIG1hdGggPSBPcGVuVHlwZTo6dmFsaWRhdGVUYWJsZTxPcGVuVHlwZTo6
TUFUSFRhYmxlPihtX21hdGhCdWZmZXIpOwogICAgIGlmICghbWF0aCkgewogICAgICAgICBtX21h
dGhCdWZmZXIgPSBudWxscHRyOwpAQCAtMjY1LDcgKzI2NSw3IEBAIE9wZW5UeXBlTWF0aERhdGE6
On5PcGVuVHlwZU1hdGhEYXRhKCkKIH0KIAogI2lmIEVOQUJMRShPUEVOVFlQRV9NQVRIKQotZmxv
YXQgT3BlblR5cGVNYXRoRGF0YTo6Z2V0TWF0aENvbnN0YW50KGNvbnN0IFNpbXBsZUZvbnREYXRh
JiBmb250LCBNYXRoQ29uc3RhbnQgY29uc3RhbnQpIGNvbnN0CitmbG9hdCBPcGVuVHlwZU1hdGhE
YXRhOjpnZXRNYXRoQ29uc3RhbnQoY29uc3QgRm9udCYgZm9udCwgTWF0aENvbnN0YW50IGNvbnN0
YW50KSBjb25zdAogewogICAgIGludDMyX3QgdmFsdWUgPSAwOwogCkBAIC0yODgsNyArMjg4LDcg
QEAgZmxvYXQgT3BlblR5cGVNYXRoRGF0YTo6Z2V0TWF0aENvbnN0YW50KAogCiAgICAgcmV0dXJu
IHZhbHVlICogZm9udC5zaXplUGVyVW5pdCgpOwogI2Vsc2UKLWZsb2F0IE9wZW5UeXBlTWF0aERh
dGE6OmdldE1hdGhDb25zdGFudChjb25zdCBTaW1wbGVGb250RGF0YSYsIE1hdGhDb25zdGFudCkg
Y29uc3QKK2Zsb2F0IE9wZW5UeXBlTWF0aERhdGE6OmdldE1hdGhDb25zdGFudChjb25zdCBGb250
JiwgTWF0aENvbnN0YW50KSBjb25zdAogewogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
IHJldHVybiAwOwpAQCAtMjk2LDcgKzI5Niw3IEBAIGZsb2F0IE9wZW5UeXBlTWF0aERhdGE6Omdl
dE1hdGhDb25zdGFudCgKIH0KIAogI2lmIEVOQUJMRShPUEVOVFlQRV9NQVRIKQotZmxvYXQgT3Bl
blR5cGVNYXRoRGF0YTo6Z2V0SXRhbGljQ29ycmVjdGlvbihjb25zdCBTaW1wbGVGb250RGF0YSYg
Zm9udCwgR2x5cGggZ2x5cGgpIGNvbnN0CitmbG9hdCBPcGVuVHlwZU1hdGhEYXRhOjpnZXRJdGFs
aWNDb3JyZWN0aW9uKGNvbnN0IEZvbnQmIGZvbnQsIEdseXBoIGdseXBoKSBjb25zdAogewogICAg
IGNvbnN0IE9wZW5UeXBlOjpNQVRIVGFibGUqIG1hdGggPSBPcGVuVHlwZTo6dmFsaWRhdGVUYWJs
ZTxPcGVuVHlwZTo6TUFUSFRhYmxlPihtX21hdGhCdWZmZXIpOwogICAgIEFTU0VSVChtYXRoKTsK
QEAgLTMxMCw3ICszMTAsNyBAQCBmbG9hdCBPcGVuVHlwZU1hdGhEYXRhOjpnZXRJdGFsaWNDb3Jy
ZWN0CiAKICAgICByZXR1cm4gbWF0aEl0YWxpY3NDb3JyZWN0aW9uSW5mby0+Z2V0SXRhbGljQ29y
cmVjdGlvbigqbV9tYXRoQnVmZmVyLCBnbHlwaCkgKiBmb250LnNpemVQZXJVbml0KCk7CiAjZWxz
ZQotZmxvYXQgT3BlblR5cGVNYXRoRGF0YTo6Z2V0SXRhbGljQ29ycmVjdGlvbihjb25zdCBTaW1w
bGVGb250RGF0YSYsIEdseXBoKSBjb25zdAorZmxvYXQgT3BlblR5cGVNYXRoRGF0YTo6Z2V0SXRh
bGljQ29ycmVjdGlvbihjb25zdCBGb250JiwgR2x5cGgpIGNvbnN0CiB7CiAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZU1hdGhEYXRhLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVNYXRoRGF0YS5o
CShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVudHlwZS9PcGVuVHlwZU1hdGhEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEzICszNSwx
MyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZvbnRQbGF0Zm9ybURhdGE7CiBjbGFz
cyBTaGFyZWRCdWZmZXI7Ci1jbGFzcyBTaW1wbGVGb250RGF0YTsKK2NsYXNzIEZvbnQ7CiAKIGNs
YXNzIE9wZW5UeXBlTWF0aERhdGEgOiBwdWJsaWMgUmVmQ291bnRlZDxPcGVuVHlwZU1hdGhEYXRh
PiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8T3BlblR5cGVNYXRoRGF0YT4gY3Jl
YXRlKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnREYXRhKQorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPE9wZW5UeXBlTWF0aERhdGE+IGNyZWF0ZShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBmb250
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBPcGVuVHlwZU1hdGhEYXRhKGZv
bnREYXRhKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgT3BlblR5cGVNYXRoRGF0YShm
b250KSk7CiAgICAgfQogICAgIH5PcGVuVHlwZU1hdGhEYXRhKCk7CiAKQEAgLTExMyw4ICsxMTMs
OCBAQCBwdWJsaWM6CiAgICAgICAgIGJvb2wgaXNFeHRlbmRlcjsKICAgICB9OwogCi0gICAgZmxv
YXQgZ2V0TWF0aENvbnN0YW50KGNvbnN0IFNpbXBsZUZvbnREYXRhJiwgTWF0aENvbnN0YW50KSBj
b25zdDsKLSAgICBmbG9hdCBnZXRJdGFsaWNDb3JyZWN0aW9uKGNvbnN0IFNpbXBsZUZvbnREYXRh
JiwgR2x5cGgpIGNvbnN0OworICAgIGZsb2F0IGdldE1hdGhDb25zdGFudChjb25zdCBGb250Jiwg
TWF0aENvbnN0YW50KSBjb25zdDsKKyAgICBmbG9hdCBnZXRJdGFsaWNDb3JyZWN0aW9uKGNvbnN0
IEZvbnQmLCBHbHlwaCkgY29uc3Q7CiAgICAgdm9pZCBnZXRNYXRoVmFyaWFudHMoR2x5cGgsIGJv
b2wgaXNWZXJ0aWNhbCwgVmVjdG9yPEdseXBoPiYgc2l6ZVZhcmlhbnRzLCBWZWN0b3I8QXNzZW1i
bHlQYXJ0PiYgYXNzZW1ibHlQYXJ0cykgY29uc3Q7CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVZlcnRpY2FsRGF0YS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5
cGUvT3BlblR5cGVWZXJ0aWNhbERhdGEuY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVZlcnRpY2FsRGF0YS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDEwICsyNywxMCBAQAogI2luY2x1ZGUgIk9wZW5UeXBl
VmVydGljYWxEYXRhLmgiCiAKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJGb250
LmgiCiAjaW5jbHVkZSAiR2x5cGhQYWdlLmgiCiAjaW5jbHVkZSAiT3BlblR5cGVUeXBlcy5oIgog
I2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwpAQCAtNDc5LDcg
KzQ3OSw3IEBAIHZvaWQgT3BlblR5cGVWZXJ0aWNhbERhdGE6OmxvYWRWZXJ0aWNhbEcKICAgICAg
ICAgZ3N1Yi0+Z2V0VmVydGljYWxHbHlwaFN1YnN0aXR1dGlvbnMoJm1fdmVydGljYWxHbHlwaE1h
cCwgKmJ1ZmZlci5nZXQoKSk7CiB9CiAKLWZsb2F0IE9wZW5UeXBlVmVydGljYWxEYXRhOjphZHZh
bmNlSGVpZ2h0KGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LCBHbHlwaCBnbHlwaCkgY29uc3QK
K2Zsb2F0IE9wZW5UeXBlVmVydGljYWxEYXRhOjphZHZhbmNlSGVpZ2h0KGNvbnN0IEZvbnQqIGZv
bnQsIEdseXBoIGdseXBoKSBjb25zdAogewogICAgIHNpemVfdCBjb3VudEhlaWdodHMgPSBtX2Fk
dmFuY2VIZWlnaHRzLnNpemUoKTsKICAgICBpZiAoY291bnRIZWlnaHRzKSB7CkBAIC00OTIsNyAr
NDkyLDcgQEAgZmxvYXQgT3BlblR5cGVWZXJ0aWNhbERhdGE6OmFkdmFuY2VIZWlnaAogICAgIHJl
dHVybiBmb250LT5mb250TWV0cmljcygpLmhlaWdodCgpOwogfQogCi12b2lkIE9wZW5UeXBlVmVy
dGljYWxEYXRhOjpnZXRWZXJ0aWNhbFRyYW5zbGF0aW9uc0ZvckdseXBocyhjb25zdCBTaW1wbGVG
b250RGF0YSogZm9udCwgY29uc3QgR2x5cGgqIGdseXBocywgc2l6ZV90IGNvdW50LCBmbG9hdCog
b3V0WFlBcnJheSkgY29uc3QKK3ZvaWQgT3BlblR5cGVWZXJ0aWNhbERhdGE6OmdldFZlcnRpY2Fs
VHJhbnNsYXRpb25zRm9yR2x5cGhzKGNvbnN0IEZvbnQqIGZvbnQsIGNvbnN0IEdseXBoKiBnbHlw
aHMsIHNpemVfdCBjb3VudCwgZmxvYXQqIG91dFhZQXJyYXkpIGNvbnN0CiB7CiAgICAgc2l6ZV90
IGNvdW50V2lkdGhzID0gbV9hZHZhbmNlV2lkdGhzLnNpemUoKTsKICAgICBBU1NFUlQoY291bnRX
aWR0aHMgPiAwKTsKQEAgLTUzNSw3ICs1MzUsNyBAQCB2b2lkIE9wZW5UeXBlVmVydGljYWxEYXRh
OjpnZXRWZXJ0aWNhbFRyCiAgICAgfQogfQogCi12b2lkIE9wZW5UeXBlVmVydGljYWxEYXRhOjpz
dWJzdGl0dXRlV2l0aFZlcnRpY2FsR2x5cGhzKGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LCBH
bHlwaFBhZ2UqIGdseXBoUGFnZSwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpIGNv
bnN0Cit2b2lkIE9wZW5UeXBlVmVydGljYWxEYXRhOjpzdWJzdGl0dXRlV2l0aFZlcnRpY2FsR2x5
cGhzKGNvbnN0IEZvbnQqIGZvbnQsIEdseXBoUGFnZSogZ2x5cGhQYWdlLCB1bnNpZ25lZCBvZmZz
ZXQsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3QKIHsKICAgICBjb25zdCBIYXNoTWFwPEdseXBoLCBH
bHlwaD4mIG1hcCA9IG1fdmVydGljYWxHbHlwaE1hcDsKICAgICBpZiAobWFwLmlzRW1wdHkoKSkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBl
VmVydGljYWxEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVWZXJ0aWNhbERhdGEuaAkocmV2aXNpb24gMTc4ODU3KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVWZXJ0
aWNhbERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsOSArMzUsOSBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKK2NsYXNzIEZvbnQ7CiBjbGFzcyBGb250UGxhdGZvcm1EYXRhOwogY2xhc3Mg
R2x5cGhQYWdlOwotY2xhc3MgU2ltcGxlRm9udERhdGE7CiAKIGNsYXNzIE9wZW5UeXBlVmVydGlj
YWxEYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8T3BlblR5cGVWZXJ0aWNhbERhdGE+IHsKIHB1Ymxp
YzoKQEAgLTQ4LDkgKzQ4LDkgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc09wZW5UeXBlKCkgY29u
c3QgeyByZXR1cm4gIW1fYWR2YW5jZVdpZHRocy5pc0VtcHR5KCk7IH0KICAgICBib29sIGhhc1Zl
cnRpY2FsTWV0cmljcygpIGNvbnN0IHsgcmV0dXJuICFtX2FkdmFuY2VIZWlnaHRzLmlzRW1wdHko
KTsgfQotICAgIGZsb2F0IGFkdmFuY2VIZWlnaHQoY29uc3QgU2ltcGxlRm9udERhdGEqLCBHbHlw
aCkgY29uc3Q7Ci0gICAgdm9pZCBnZXRWZXJ0aWNhbFRyYW5zbGF0aW9uc0ZvckdseXBocyhjb25z
dCBTaW1wbGVGb250RGF0YSosIGNvbnN0IEdseXBoKiwgc2l6ZV90LCBmbG9hdCogb3V0WFlBcnJh
eSkgY29uc3Q7Ci0gICAgdm9pZCBzdWJzdGl0dXRlV2l0aFZlcnRpY2FsR2x5cGhzKGNvbnN0IFNp
bXBsZUZvbnREYXRhKiwgR2x5cGhQYWdlKiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgpIGNvbnN0OworICAgIGZsb2F0IGFkdmFuY2VIZWlnaHQoY29uc3QgRm9udCosIEdseXBoKSBj
b25zdDsKKyAgICB2b2lkIGdldFZlcnRpY2FsVHJhbnNsYXRpb25zRm9yR2x5cGhzKGNvbnN0IEZv
bnQqLCBjb25zdCBHbHlwaCosIHNpemVfdCwgZmxvYXQqIG91dFhZQXJyYXkpIGNvbnN0OworICAg
IHZvaWQgc3Vic3RpdHV0ZVdpdGhWZXJ0aWNhbEdseXBocyhjb25zdCBGb250KiwgR2x5cGhQYWdl
KiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0OwogCiBwcml2YXRlOgog
ICAgIGV4cGxpY2l0IE9wZW5UeXBlVmVydGljYWxEYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEm
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9G
b250Q0dXaW4uY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vRm9udENHV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTAgKzI4
LDEwIEBACiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJGbG9hdENv
bnZlcnNpb24uaCIKKyNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5j
bHVkZSAiU2ltcGxlRm9udERhdGEuaCIKICNpbmNsdWRlICJVbmlzY3JpYmVDb250cm9sbGVyLmgi
CiAjaW5jbHVkZSAiV2ViQ29yZVRleHRSZW5kZXJlci5oIgogI2luY2x1ZGUgPEFwcGxpY2F0aW9u
U2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgpAQCAtMTI3LDcgKzEyNyw3IEBAIHN0YXRp
YyBDR1BhdGhSZWYgY3JlYXRlUGF0aEZvckdseXBoKEhEQyAKICAgICByZXR1cm4gcGF0aDsKIH0K
IAotdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNz
Q29udGV4dCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBn
bHlwaEJ1ZmZlciwKK3ZvaWQgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0
KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEZvbnQqIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBn
bHlwaEJ1ZmZlciwKICAgICBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQpIGNvbnN0CiB7CiAgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IGdyYXBoaWNz
Q29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcAkocmV2aXNpb24gMTc4
ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdp
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDkgKzI4LDkgQEAKIAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUg
IkZvbnRDYWNoZS5oIgogI2luY2x1ZGUgIkhXbmREQy5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnRE
YXRhLmgiCiAjaW5jbHVkZSA8bWxhbmcuaD4KICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAjaW5jbHVk
ZSA8d3RmL0hhc2hTZXQuaD4KQEAgLTE5OSwxMCArMTk5LDEwIEBAIHN0YXRpYyBIRk9OVCBjcmVh
dGVNTGFuZ0ZvbnQoSU1MYW5nRm9udEwKICAgICByZXR1cm4gaGZvbnQ7CiB9CiAKLVJlZlB0cjxT
aW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpzeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoY29u
c3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgY29uc3QgU2ltcGxlRm9udERhdGEqIG9y
aWdpbmFsRm9udERhdGEsIGJvb2wsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3Ro
KQorUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6c3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IEZvbnQqIG9yaWdpbmFsRm9u
dERhdGEsIGJvb2wsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQogewogICAg
IFVDaGFyIGNoYXJhY3RlciA9IGNoYXJhY3RlcnNbMF07Ci0gICAgUmVmUHRyPFNpbXBsZUZvbnRE
YXRhPiBmb250RGF0YTsKKyAgICBSZWZQdHI8Rm9udD4gZm9udERhdGE7CiAgICAgSFduZERDIGhk
YygwKTsKICAgICBIRk9OVCBwcmltYXJ5Rm9udCA9IG9yaWdpbmFsRm9udERhdGEtPnBsYXRmb3Jt
RGF0YSgpLmhmb250KCk7CiAgICAgSEdESU9CSiBvbGRGb250ID0gU2VsZWN0T2JqZWN0KGhkYywg
cHJpbWFyeUZvbnQpOwpAQCAtMzA5LDE2ICszMDksMTYgQEAgUmVmUHRyPFNpbXBsZUZvbnREYXRh
PiBGb250Q2FjaGU6OnN5c3RlbQogICAgIHJldHVybiBmb250RGF0YS5yZWxlYXNlKCk7CiB9CiAK
LVJlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpmb250RGF0YUZyb21EZXNjcmlwdGlv
bkFuZExvZ0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0
IExPR0ZPTlQmIGZvbnQsIEF0b21pY1N0cmluZyYgb3V0Rm9udEZhbWlseU5hbWUpCitSZWZQdHI8
Rm9udD4gRm9udENhY2hlOjpmb250RGF0YUZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IExPR0ZPTlQmIGZvbnQsIEF0
b21pY1N0cmluZyYgb3V0Rm9udEZhbWlseU5hbWUpCiB7CiAgICAgQXRvbWljU3RyaW5nIGZhbWls
eU5hbWUgPSBTdHJpbmcoZm9udC5sZkZhY2VOYW1lLCB3Y3NubGVuKGZvbnQubGZGYWNlTmFtZSwg
TEZfRkFDRVNJWkUpKTsKLSAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IGZvbnREYXRhID0gZm9u
dEZvckZhbWlseShmb250RGVzY3JpcHRpb24sIGZhbWlseU5hbWUpOworICAgIFJlZlB0cjxGb250
PiBmb250RGF0YSA9IGZvbnRGb3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCBmYW1pbHlOYW1lKTsK
ICAgICBpZiAoZm9udERhdGEpCiAgICAgICAgIG91dEZvbnRGYW1pbHlOYW1lID0gZmFtaWx5TmFt
ZTsKICAgICByZXR1cm4gZm9udERhdGE7CiB9CiAKLVJlZjxTaW1wbGVGb250RGF0YT4gRm9udENh
Y2hlOjpsYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERl
c2NyaXB0aW9uKQorUmVmPEZvbnQ+IEZvbnRDYWNoZTo6bGFzdFJlc29ydEZhbGxiYWNrRm9udChj
b25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikKIHsKICAgICBERVBSRUNBVEVE
X0RFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBmYWxsYmFja0ZvbnROYW1lLCAoKSk7
CiAgICAgaWYgKCFmYWxsYmFja0ZvbnROYW1lLmlzRW1wdHkoKSkKQEAgLTMzNyw3ICszMzcsNyBA
QCBSZWY8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6bGFzdFJlc29yCiAgICAgICAgIEF0b21p
Y1N0cmluZygiTHVjaWRhIFNhbnMgVW5pY29kZSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpLAogICAgICAgICBBdG9taWNTdHJpbmcoIkFyaWFsIiwgQXRvbWljU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCkKICAgICB9OwotICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4g
c2ltcGxlRm9udDsKKyAgICBSZWZQdHI8Rm9udD4gc2ltcGxlRm9udDsKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IFdURl9BUlJBWV9MRU5HVEgoZmFsbGJhY2tGb250cyk7ICsraSkgewogICAg
ICAgICBpZiAoc2ltcGxlRm9udCA9IGZvbnRGb3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCBmYWxs
YmFja0ZvbnRzW2ldKSkgewogICAgICAgICAgICAgZmFsbGJhY2tGb250TmFtZSA9IGZhbGxiYWNr
Rm9udHNbaV07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9u
dFdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ZvbnRXaW4uY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vRm9udFdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEzICsy
NiwxMyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAK
KyNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9udEdseXBocy5oIgogI2luY2x1ZGUgIkds
eXBoQnVmZmVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW50
UmVjdC5oIgogI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCi0j
aW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKICNpbmNsdWRlICJUZXh0UnVuLmgiCiAjaW5jbHVk
ZSAiVW5pc2NyaWJlQ29udHJvbGxlci5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CkBA
IC0xMjAsNyArMTIwLDcgQEAgdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0VtcGhhc2lzTWFya3NGb3JD
bwogICAgIGRyYXdFbXBoYXNpc01hcmtzKGNvbnRleHQsIHJ1biwgZ2x5cGhCdWZmZXIsIG1hcmss
IEZsb2F0UG9pbnQocG9pbnQueCgpICsgaW5pdGlhbEFkdmFuY2UsIHBvaW50LnkoKSkpOwogfQog
Ci1mbG9hdCBGb250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRS
dW4mIHJ1biwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBH
bHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAorZmxvYXQgRm9udENhc2NhZGU6OmZs
b2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3Qg
Rm9udCo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25z
dAogewogICAgIFVuaXNjcmliZUNvbnRyb2xsZXIgY29udHJvbGxlcih0aGlzLCBydW4sIGZhbGxi
YWNrRm9udHMpOwogICAgIGNvbnRyb2xsZXIuYWR2YW5jZShydW4ubGVuZ3RoKCkpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2RlQ0dX
aW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9HbHlwaFBhZ2VUcmVlTm9kZUNHV2luLmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2RlQ0dXaW4uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMiArMjksMTIgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJHbHlwaFBhZ2UuaCIKIAotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisj
aW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgPFdlYktpdFN5c3RlbUludGVyZmFjZS9XZWJLaXRT
eXN0ZW1JbnRlcmZhY2UuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIEdseXBoUGFn
ZTo6ZmlsbCh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwg
dW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEpCiti
b29sIEdseXBoUGFnZTo6ZmlsbCh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNo
YXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBGb250KiBmb250RGF0YSkK
IHsKICAgICAvLyBidWZmZXJMZW5ndGggd2lsbCBiZSBncmVhdGVyIHRoYW4gdGhlIHJlcXVlc3Rl
ZCBudW1iZXIgb2YgZ2x5cGhzIGlmIHRoZSBidWZmZXIgY29udGFpbnMgc3Vycm9nYXRlIHBhaXJz
LgogICAgIC8vIFdlIHdvbid0IHN1cHBvcnQgdGhpcyBmb3Igbm93LgpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2RlQ2Fpcm9XaW4uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlw
aFBhZ2VUcmVlTm9kZUNhaXJvV2luLmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2RlQ2Fpcm9XaW4uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMiArMjksMTIgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJHbHlwaFBhZ2UuaCIKIAorI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJI
V25kREMuaCIKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLWJvb2wgR2x5cGhQYWdlOjpmaWxsKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVu
Z3RoLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IFNpbXBsZUZv
bnREYXRhKiBmb250RGF0YSkKK2Jvb2wgR2x5cGhQYWdlOjpmaWxsKHVuc2lnbmVkIG9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNv
bnN0IEZvbnQqIGZvbnREYXRhKQogewogICAgIC8vIGJ1ZmZlckxlbmd0aCB3aWxsIGJlIGdyZWF0
ZXIgdGhhbiB0aGUgcmVxdWVzdGVkIG51bWJlciBvZiBnbHlwaHMgaWYgdGhlIGJ1ZmZlciBjb250
YWlucyBzdXJyb2dhdGUgcGFpcnMuCiAgICAgLy8gV2Ugd29uJ3Qgc3VwcG9ydCB0aGlzIGZvciBu
b3cuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9u
dERhdGFDR1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhQ0dXaW4uY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFDR1dpbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKKyNpbmNsdWRlICJGb250LmgiCiAK
ICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJGb250Q2FjaGUuaCIKQEAgLTQ4LDcg
KzQ4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCi12
b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUluaXQoKQordm9pZCBGb250OjpwbGF0Zm9ybUlu
aXQoKQogewogICAgIG1fc3ludGhldGljQm9sZE9mZnNldCA9IG1fcGxhdGZvcm1EYXRhLnN5bnRo
ZXRpY0JvbGQoKSA/IDEuMGYgOiAwLmY7CiAgICAgbV9zY3JpcHRDYWNoZSA9IDA7CkBAIC0xMDMs
NyArMTAzLDcgQEAgdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Jbml0KCkKICAgICBtX2Zv
bnRNZXRyaWNzLnNldFVuaXRzUGVyRW0odW5pdHNQZXJFbSk7CiB9CiAKLUZsb2F0UmVjdCBTaW1w
bGVGb250RGF0YTo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKK0Zs
b2F0UmVjdCBGb250OjpwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAog
ewogICAgIGlmICghcGxhdGZvcm1EYXRhKCkuc2l6ZSgpKQogICAgICAgICByZXR1cm4gRmxvYXRS
ZWN0KCk7CkBAIC0xMjIsNyArMTIyLDcgQEAgRmxvYXRSZWN0IFNpbXBsZUZvbnREYXRhOjpwbGF0
Zm9ybUJvdW5kcwogICAgIHJldHVybiBib3VuZGluZ0JveDsKIH0KIAotZmxvYXQgU2ltcGxlRm9u
dERhdGE6OnBsYXRmb3JtV2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKK2Zsb2F0IEZv
bnQ6OnBsYXRmb3JtV2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKIHsKICAgICBpZiAo
IXBsYXRmb3JtRGF0YSgpLnNpemUoKSkKICAgICAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFDYWlyb1dpbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBs
ZUZvbnREYXRhQ2Fpcm9XaW4uY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFDYWlyb1dpbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKKyNpbmNsdWRlICJGb250LmgiCiAKICNpbmNsdWRl
IDx3aW5kb3dzLmg+CiAKQEAgLTQxLDcgKzQxLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci12b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUluaXQoKQordm9pZCBGb250OjpwbGF0Zm9y
bUluaXQoKQogewogICAgIG1fc3ludGhldGljQm9sZE9mZnNldCA9IG1fcGxhdGZvcm1EYXRhLnN5
bnRoZXRpY0JvbGQoKSA/IDEuMGYgOiAwLmY7CiAgICAgbV9zY3JpcHRDYWNoZSA9IDA7CkBAIC0x
MDMsNyArMTAzLDcgQEAgdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Jbml0KCkKICAgICBS
ZXN0b3JlREMoZGMsIC0xKTsKIH0KIAotRmxvYXRSZWN0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9y
bUJvdW5kc0ZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAorRmxvYXRSZWN0IEZvbnQ6OnBsYXRm
b3JtQm91bmRzRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CiB7CiAgICAgaWYgKG1fcGxhdGZv
cm1EYXRhLnVzZUdESSgpKQogICAgICAgICByZXR1cm4gYm91bmRzRm9yR0RJR2x5cGgoZ2x5cGgp
OwpAQCAtMTExLDcgKzExMSw3IEBAIEZsb2F0UmVjdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1C
b3VuZHMKICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CiB9CiAgICAgCi1mbG9hdCBTaW1wbGVGb250
RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAorZmxvYXQgRm9u
dDo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAogewogICAgIGlmICht
X3BsYXRmb3JtRGF0YS51c2VHREkoKSkKICAgICAgICByZXR1cm4gd2lkdGhGb3JHRElHbHlwaChn
bHlwaCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxl
Rm9udERhdGFXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YVdpbi5jcHAJKHJldmlzaW9uIDE3ODg1NykKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YVdpbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKKyNpbmNsdWRlICJGb250LmgiCiAKICNp
bmNsdWRlICJGb250Q2FjaGUuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKQEAgLTQzLDE3ICs0
MywxNyBAQCBjb25zdCBmbG9hdCBjU21hbGxDYXBzRm9udFNpemVNdWx0aXBsaWVyCiAKIHN0YXRp
YyBib29sIGdfc2hvdWxkQXBwbHlNYWNBc2NlbnRIYWNrOwogCi12b2lkIFNpbXBsZUZvbnREYXRh
OjpzZXRTaG91bGRBcHBseU1hY0FzY2VudEhhY2soYm9vbCBiKQordm9pZCBGb250OjpzZXRTaG91
bGRBcHBseU1hY0FzY2VudEhhY2soYm9vbCBiKQogewogICAgIGdfc2hvdWxkQXBwbHlNYWNBc2Nl
bnRIYWNrID0gYjsKIH0KIAotYm9vbCBTaW1wbGVGb250RGF0YTo6c2hvdWxkQXBwbHlNYWNBc2Nl
bnRIYWNrKCkKK2Jvb2wgRm9udDo6c2hvdWxkQXBwbHlNYWNBc2NlbnRIYWNrKCkKIHsKICAgICBy
ZXR1cm4gZ19zaG91bGRBcHBseU1hY0FzY2VudEhhY2s7CiB9CiAKLWZsb2F0IFNpbXBsZUZvbnRE
YXRhOjphc2NlbnRDb25zaWRlcmluZ01hY0FzY2VudEhhY2soY29uc3QgV0NIQVIqIGZhY2VOYW1l
LCBmbG9hdCBhc2NlbnQsIGZsb2F0IGRlc2NlbnQpCitmbG9hdCBGb250Ojphc2NlbnRDb25zaWRl
cmluZ01hY0FzY2VudEhhY2soY29uc3QgV0NIQVIqIGZhY2VOYW1lLCBmbG9hdCBhc2NlbnQsIGZs
b2F0IGRlc2NlbnQpCiB7CiAgICAgaWYgKCFzaG91bGRBcHBseU1hY0FzY2VudEhhY2soKSkKICAg
ICAgICAgcmV0dXJuIGFzY2VudDsKQEAgLTcxLDcgKzcxLDcgQEAgZmxvYXQgU2ltcGxlRm9udERh
dGE6OmFzY2VudENvbnNpZGVyaW5nTQogICAgIHJldHVybiBhc2NlbnQ7CiB9CiAKLXZvaWQgU2lt
cGxlRm9udERhdGE6OmluaXRHRElGb250KCkKK3ZvaWQgRm9udDo6aW5pdEdESUZvbnQoKQogewog
ICAgIGlmICghbV9wbGF0Zm9ybURhdGEuc2l6ZSgpKSB7CiAgICAgICAgIG1fZm9udE1ldHJpY3Mu
cmVzZXQoKTsKQEAgLTEwNiw3ICsxMDYsNyBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjppbml0R0RJ
Rm9udCgpCiAgICAgU2VsZWN0T2JqZWN0KGhkYywgb2xkRm9udCk7CiB9CiAKLXZvaWQgU2ltcGxl
Rm9udERhdGE6OnBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpCit2b2lkIEZvbnQ6OnBsYXRmb3JtQ2hh
cldpZHRoSW5pdCgpCiB7CiAgICAgLy8gR0RJIEZvbnRzIGluaXQgY2hhcndpZHRocyBpbiBpbml0
R0RJRm9udC4KICAgICBpZiAoIW1fcGxhdGZvcm1EYXRhLnVzZUdESSgpKSB7CkBAIC0xMTYsMjkg
KzExNiwyOSBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUNoYXJXaWR0aEluCiAgICAg
fQogfQogCi12b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybURlc3Ryb3koKQordm9pZCBGb250
OjpwbGF0Zm9ybURlc3Ryb3koKQogewogICAgIFNjcmlwdEZyZWVDYWNoZSgmbV9zY3JpcHRDYWNo
ZSk7CiAgICAgZGVsZXRlIG1fc2NyaXB0Rm9udFByb3BlcnRpZXM7CiB9CiAKLVBhc3NSZWZQdHI8
U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZvbnRE
YXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBzY2FsZUZh
Y3RvcikgY29uc3QKK1Bhc3NSZWZQdHI8Rm9udD4gRm9udDo6cGxhdGZvcm1DcmVhdGVTY2FsZWRG
b250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2Nh
bGVGYWN0b3IpIGNvbnN0CiB7CiAgICAgZmxvYXQgc2NhbGVkU2l6ZSA9IHNjYWxlRmFjdG9yICog
bV9wbGF0Zm9ybURhdGEuc2l6ZSgpOwogICAgIGlmIChpc0N1c3RvbUZvbnQoKSkgewogICAgICAg
ICBGb250UGxhdGZvcm1EYXRhIHNjYWxlZEZvbnQobV9wbGF0Zm9ybURhdGEpOwogICAgICAgICBz
Y2FsZWRGb250LnNldFNpemUoc2NhbGVkU2l6ZSk7Ci0gICAgICAgIHJldHVybiBTaW1wbGVGb250
RGF0YTo6Y3JlYXRlKHNjYWxlZEZvbnQsIHRydWUsIGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIEZv
bnQ6OmNyZWF0ZShzY2FsZWRGb250LCB0cnVlLCBmYWxzZSk7CiAgICAgfQogCiAgICAgTE9HRk9O
VCB3aW5mb250OwogICAgIEdldE9iamVjdChtX3BsYXRmb3JtRGF0YS5oZm9udCgpLCBzaXplb2Yo
TE9HRk9OVCksICZ3aW5mb250KTsKICAgICB3aW5mb250LmxmSGVpZ2h0ID0gLWxyb3VuZGYoc2Nh
bGVkU2l6ZSAqIChtX3BsYXRmb3JtRGF0YS51c2VHREkoKSA/IDEgOiAzMikpOwogICAgIGF1dG8g
aGZvbnQgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZUZvbnRJbmRpcmVjdCgmd2luZm9udCkpOwot
ICAgIHJldHVybiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlKEZvbnRQbGF0Zm9ybURhdGEoV1RGOjpt
b3ZlKGhmb250KSwgc2NhbGVkU2l6ZSwgbV9wbGF0Zm9ybURhdGEuc3ludGhldGljQm9sZCgpLCBt
X3BsYXRmb3JtRGF0YS5zeW50aGV0aWNPYmxpcXVlKCksIG1fcGxhdGZvcm1EYXRhLnVzZUdESSgp
KSwgaXNDdXN0b21Gb250KCksIGZhbHNlKTsKKyAgICByZXR1cm4gRm9udDo6Y3JlYXRlKEZvbnRQ
bGF0Zm9ybURhdGEoV1RGOjptb3ZlKGhmb250KSwgc2NhbGVkU2l6ZSwgbV9wbGF0Zm9ybURhdGEu
c3ludGhldGljQm9sZCgpLCBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNPYmxpcXVlKCksIG1fcGxh
dGZvcm1EYXRhLnVzZUdESSgpKSwgaXNDdXN0b21Gb250KCksIGZhbHNlKTsKIH0KIAotdm9pZCBT
aW1wbGVGb250RGF0YTo6ZGV0ZXJtaW5lUGl0Y2goKQordm9pZCBGb250OjpkZXRlcm1pbmVQaXRj
aCgpCiB7CiAgICAgaWYgKGlzQ3VzdG9tRm9udCgpKSB7CiAgICAgICAgIG1fdHJlYXRBc0ZpeGVk
UGl0Y2ggPSBmYWxzZTsKQEAgLTE1OSw3ICsxNTksNyBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpk
ZXRlcm1pbmVQaXRjaCgpCiAgICAgUmVzdG9yZURDKGRjLCAtMSk7CiB9CiAKLUZsb2F0UmVjdCBT
aW1wbGVGb250RGF0YTo6Ym91bmRzRm9yR0RJR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CitGbG9h
dFJlY3QgRm9udDo6Ym91bmRzRm9yR0RJR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CiB7CiAgICAg
SFduZERDIGhkYygwKTsKICAgICBTZXRHcmFwaGljc01vZGUoaGRjLCBHTV9BRFZBTkNFRCk7CkBA
IC0xNzUsNyArMTc1LDcgQEAgRmxvYXRSZWN0IFNpbXBsZUZvbnREYXRhOjpib3VuZHNGb3JHRElH
bAogICAgICAgICBnZGlNZXRyaWNzLmdtQmxhY2tCb3hYICsgbV9zeW50aGV0aWNCb2xkT2Zmc2V0
LCBnZGlNZXRyaWNzLmdtQmxhY2tCb3hZKTsgCiB9CiAKLWZsb2F0IFNpbXBsZUZvbnREYXRhOjp3
aWR0aEZvckdESUdseXBoKEdseXBoIGdseXBoKSBjb25zdAorZmxvYXQgRm9udDo6d2lkdGhGb3JH
RElHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKIHsKICAgICBIV25kREMgaGRjKDApOwogICAgIFNl
dEdyYXBoaWNzTW9kZShoZGMsIEdNX0FEVkFOQ0VEKTsKQEAgLTE5MSw3ICsxOTEsNyBAQCBmbG9h
dCBTaW1wbGVGb250RGF0YTo6d2lkdGhGb3JHRElHbHlwaChHCiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAotU0NSSVBUX0ZPTlRQUk9QRVJUSUVTKiBTaW1wbGVGb250RGF0YTo6c2NyaXB0Rm9udFBy
b3BlcnRpZXMoKSBjb25zdAorU0NSSVBUX0ZPTlRQUk9QRVJUSUVTKiBGb250OjpzY3JpcHRGb250
UHJvcGVydGllcygpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3NjcmlwdEZvbnRQcm9wZXJ0aWVzKSB7
CiAgICAgICAgIG1fc2NyaXB0Rm9udFByb3BlcnRpZXMgPSBuZXcgU0NSSVBUX0ZPTlRQUk9QRVJU
SUVTOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1VuaXNjcmli
ZUNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9VbmlzY3JpYmVDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1VuaXNjcmliZUNvbnRyb2xsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw5ICsyNSwxMCBAQAogCiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiVW5pc2NyaWJlQ29udHJvbGxlci5oIgorCisjaW5jbHVkZSAiRm9udC5o
IgogI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiSFduZERDLmgiCi0jaW5jbHVk
ZSAiU2ltcGxlRm9udERhdGEuaCIKICNpbmNsdWRlICJUZXh0UnVuLmgiCiAjaW5jbHVkZSA8d3Rm
L01hdGhFeHRyYXMuaD4KIApAQCAtNDEsNyArNDIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAv
LyB0aGF0IGRvZXMgc3R1ZmYgaW4gdGhhdCBtZXRob2QgaW5zdGVhZCBvZiBkb2luZyBldmVyeXRo
aW5nIGluIHRoZSBjb25zdHJ1Y3Rvci4gIEhhdmUgYWR2YW5jZSgpCiAvLyB0YWtlIHRoZSBHbHlw
aEJ1ZmZlciBhcyBhbiBhcmcgc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIHBvcHVsYXRlIHRoZSBn
bHlwaCBidWZmZXIgd2hlbgogLy8gbWVhc3VyaW5nLgotVW5pc2NyaWJlQ29udHJvbGxlcjo6VW5p
c2NyaWJlQ29udHJvbGxlcihjb25zdCBGb250Q2FzY2FkZSogZm9udCwgY29uc3QgVGV4dFJ1biYg
cnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMpCitVbmlz
Y3JpYmVDb250cm9sbGVyOjpVbmlzY3JpYmVDb250cm9sbGVyKGNvbnN0IEZvbnRDYXNjYWRlKiBm
b250LCBjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0Zv
bnRzKQogICAgIDogbV9mb250KCpmb250KQogICAgICwgbV9ydW4ocnVuKQogICAgICwgbV9mYWxs
YmFja0ZvbnRzKGZhbGxiYWNrRm9udHMpCkBAIC0xMzYsOCArMTM3LDggQEAgdm9pZCBVbmlzY3Jp
YmVDb250cm9sbGVyOjphZHZhbmNlKHVuc2lnbgogICAgIGNvbnN0IFVDaGFyKiBjdXJyID0gbV9y
dW4ucnRsKCkgPyBjcCArIGxlbmd0aCAgLSAxIDogY3A7CiAgICAgY29uc3QgVUNoYXIqIGVuZCA9
IG1fcnVuLnJ0bCgpID8gY3AgLSAxIDogY3AgKyBsZW5ndGg7CiAKLSAgICBjb25zdCBTaW1wbGVG
b250RGF0YSogZm9udERhdGE7Ci0gICAgY29uc3QgU2ltcGxlRm9udERhdGEqIG5leHRGb250RGF0
YSA9IG1fZm9udC5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoKmN1cnIsIGZhbHNlKS5mb250RGF0YTsK
KyAgICBjb25zdCBGb250KiBmb250RGF0YTsKKyAgICBjb25zdCBGb250KiBuZXh0Rm9udERhdGEg
PSBtX2ZvbnQuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKCpjdXJyLCBmYWxzZSkuZm9udDsKIAogICAg
IFVDaGFyIG5ld0MgPSAwOwogCkBAIC0xNTgsMTQgKzE1OSwxNCBAQCB2b2lkIFVuaXNjcmliZUNv
bnRyb2xsZXI6OmFkdmFuY2UodW5zaWduCiAgICAgICAgIFVDaGFyIGMgPSAqY3VycjsKIAogICAg
ICAgICBib29sIGZvcmNlU21hbGxDYXBzID0gaXNTbWFsbENhcHMgJiYgKFVfR0VUX0dDX01BU0so
YykgJiBVX0dDX01fTUFTSyk7Ci0gICAgICAgIG5leHRGb250RGF0YSA9IG1fZm9udC5nbHlwaERh
dGFGb3JDaGFyYWN0ZXIoKmN1cnIsIGZhbHNlLCBmb3JjZVNtYWxsQ2FwcyA/IFNtYWxsQ2Fwc1Zh
cmlhbnQgOiBBdXRvVmFyaWFudCkuZm9udERhdGE7CisgICAgICAgIG5leHRGb250RGF0YSA9IG1f
Zm9udC5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoKmN1cnIsIGZhbHNlLCBmb3JjZVNtYWxsQ2FwcyA/
IFNtYWxsQ2Fwc1ZhcmlhbnQgOiBBdXRvVmFyaWFudCkuZm9udDsKICAgICAgICAgaWYgKG1fZm9u
dC5pc1NtYWxsQ2FwcygpKSB7CiAgICAgICAgICAgICBuZXh0SXNTbWFsbENhcHMgPSBmb3JjZVNt
YWxsQ2FwcyB8fCAobmV3QyA9IHVfdG91cHBlcihjKSkgIT0gYzsKICAgICAgICAgICAgIGlmIChu
ZXh0SXNTbWFsbENhcHMpCiAgICAgICAgICAgICAgICAgc21hbGxDYXBzQnVmZmVyW2luZGV4XSA9
IGZvcmNlU21hbGxDYXBzID8gYyA6IG5ld0M7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobV9m
YWxsYmFja0ZvbnRzICYmIGZvbnREYXRhICYmIG5leHRGb250RGF0YSAhPSBmb250RGF0YSAmJiBm
b250RGF0YSAhPSAmbV9mb250LnByaW1hcnlGb250RGF0YSgpKQorICAgICAgICBpZiAobV9mYWxs
YmFja0ZvbnRzICYmIGZvbnREYXRhICYmIG5leHRGb250RGF0YSAhPSBmb250RGF0YSAmJiBmb250
RGF0YSAhPSAmbV9mb250LnByaW1hcnlGb250KCkpCiAgICAgICAgICAgICBtX2ZhbGxiYWNrRm9u
dHMtPmFkZChmb250RGF0YSk7CiAKICAgICAgICAgaWYgKG5leHRGb250RGF0YSAhPSBmb250RGF0
YSB8fCBuZXh0SXNTbWFsbENhcHMgIT0gaXNTbWFsbENhcHMpIHsKQEAgLTE3OSw3ICsxODAsNyBA
QCB2b2lkIFVuaXNjcmliZUNvbnRyb2xsZXI6OmFkdmFuY2UodW5zaWduCiAgICAgCiAgICAgaW50
IGl0ZW1MZW5ndGggPSBtX3J1bi5ydGwoKSA/IGluZGV4T2ZGb250VHJhbnNpdGlvbiArIDEgOiBs
ZW5ndGggLSBpbmRleE9mRm9udFRyYW5zaXRpb247CiAgICAgaWYgKGl0ZW1MZW5ndGgpIHsKLSAg
ICAgICAgaWYgKG1fZmFsbGJhY2tGb250cyAmJiBuZXh0Rm9udERhdGEgJiYgbmV4dEZvbnREYXRh
ICE9ICZtX2ZvbnQucHJpbWFyeUZvbnREYXRhKCkpCisgICAgICAgIGlmIChtX2ZhbGxiYWNrRm9u
dHMgJiYgbmV4dEZvbnREYXRhICYmIG5leHRGb250RGF0YSAhPSAmbV9mb250LnByaW1hcnlGb250
KCkpCiAgICAgICAgICAgICBtX2ZhbGxiYWNrRm9udHMtPmFkZChuZXh0Rm9udERhdGEpOwogCiAg
ICAgICAgIGludCBpdGVtU3RhcnQgPSBtX3J1bi5ydGwoKSA/IDAgOiBpbmRleE9mRm9udFRyYW5z
aXRpb247CkBAIC0xOTAsNyArMTkxLDcgQEAgdm9pZCBVbmlzY3JpYmVDb250cm9sbGVyOjphZHZh
bmNlKHVuc2lnbgogICAgIG1fY3VycmVudENoYXJhY3RlciA9IGJhc2VDaGFyYWN0ZXIgKyBsZW5n
dGg7CiB9CiAKLXZvaWQgVW5pc2NyaWJlQ29udHJvbGxlcjo6aXRlbWl6ZVNoYXBlQW5kUGxhY2Uo
Y29uc3QgVUNoYXIqIGNwLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBm
b250RGF0YSwgR2x5cGhCdWZmZXIqIGdseXBoQnVmZmVyKQordm9pZCBVbmlzY3JpYmVDb250cm9s
bGVyOjppdGVtaXplU2hhcGVBbmRQbGFjZShjb25zdCBVQ2hhciogY3AsIHVuc2lnbmVkIGxlbmd0
aCwgY29uc3QgRm9udCogZm9udERhdGEsIEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZlcikKIHsKICAg
ICAvLyBTY3JpcHRJdGVtaXplIChpbiBXaW5kb3dzIFhQIHZlcnNpb25zIHByaW9yIHRvIFNQMikg
Y2FuIG92ZXJmbG93IGJ5IDEuICBUaGlzIGlzIHdoeSB0aGVyZSBpcyBhbiBleHRyYSBlbXB0eSBp
dGVtCiAgICAgLy8gaGFuZ2luZyBvdXQgYXQgdGhlIGVuZCBvZiB0aGUgYXJyYXkKQEAgLTIzMiw3
ICsyMzMsNyBAQCB2b2lkIFVuaXNjcmliZUNvbnRyb2xsZXI6OnJlc2V0Q29udHJvbEFuCiAgICAg
bV9zdGF0ZS5mT3ZlcnJpZGVEaXJlY3Rpb24gPSBtX3J1bi5kaXJlY3Rpb25hbE92ZXJyaWRlKCk7
CiB9CiAKLWJvb2wgVW5pc2NyaWJlQ29udHJvbGxlcjo6c2hhcGVBbmRQbGFjZUl0ZW0oY29uc3Qg
VUNoYXIqIGNwLCB1bnNpZ25lZCBpLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsIEds
eXBoQnVmZmVyKiBnbHlwaEJ1ZmZlcikKK2Jvb2wgVW5pc2NyaWJlQ29udHJvbGxlcjo6c2hhcGVB
bmRQbGFjZUl0ZW0oY29uc3QgVUNoYXIqIGNwLCB1bnNpZ25lZCBpLCBjb25zdCBGb250KiBmb250
RGF0YSwgR2x5cGhCdWZmZXIqIGdseXBoQnVmZmVyKQogewogICAgIC8vIERldGVybWluZSB0aGUg
c3RyaW5nIGZvciB0aGlzIGl0ZW0uCiAgICAgY29uc3QgVUNoYXIqIHN0ciA9IGNwICsgbV9pdGVt
c1tpXS5pQ2hhclBvczsKQEAgLTQwNCw3ICs0MDUsNyBAQCBib29sIFVuaXNjcmliZUNvbnRyb2xs
ZXI6OnNoYXBlQW5kUGxhY2VJCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgVW5pc2NyaWJl
Q29udHJvbGxlcjo6c2hhcGUoY29uc3QgVUNoYXIqIHN0ciwgaW50IGxlbiwgU0NSSVBUX0lURU0g
aXRlbSwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhLAorYm9vbCBVbmlzY3JpYmVDb250
cm9sbGVyOjpzaGFwZShjb25zdCBVQ2hhciogc3RyLCBpbnQgbGVuLCBTQ1JJUFRfSVRFTSBpdGVt
LCBjb25zdCBGb250KiBmb250RGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VmVjdG9yPFdPUkQ+JiBnbHlwaHMsIFZlY3RvcjxXT1JEPiYgY2x1c3RlcnMsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxTQ1JJUFRfVklTQVRUUj4mIHZpc3VhbEF0dHJp
YnV0ZXMpCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVW5p
c2NyaWJlQ29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9VbmlzY3JpYmVDb250cm9sbGVyLmgJKHJldmlzaW9uIDE3ODg1NykKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9VbmlzY3JpYmVDb250cm9sbGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBVbmlzY3JpYmVDb250cm9sbGVyIHsKIHB1YmxpYzoKLSAgICBVbmlzY3JpYmVDb250
cm9sbGVyKGNvbnN0IEZvbnRDYXNjYWRlKiwgY29uc3QgVGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3Qg
U2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDApOworICAgIFVuaXNjcmliZUNvbnRy
b2xsZXIoY29uc3QgRm9udENhc2NhZGUqLCBjb25zdCBUZXh0UnVuJiwgSGFzaFNldDxjb25zdCBG
b250Kj4qIGZhbGxiYWNrRm9udHMgPSAwKTsKIAogICAgIC8vIEFkdmFuY2UgYW5kIG1lYXN1cmUv
cGxhY2UgdXAgdG8gdGhlIHNwZWNpZmllZCBjaGFyYWN0ZXIuCiAgICAgdm9pZCBhZHZhbmNlKHVu
c2lnbmVkIHRvLCBHbHlwaEJ1ZmZlciogPSAwKTsKQEAgLTU0LDE1ICs1NCwxNSBAQCBwdWJsaWM6
CiBwcml2YXRlOiAgICAKICAgICB2b2lkIHJlc2V0Q29udHJvbEFuZFN0YXRlKCk7CiAKLSAgICB2
b2lkIGl0ZW1pemVTaGFwZUFuZFBsYWNlKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgbGVuZ3RoLCBj
b25zdCBTaW1wbGVGb250RGF0YSosIEdseXBoQnVmZmVyKik7Ci0gICAgYm9vbCBzaGFwZUFuZFBs
YWNlSXRlbShjb25zdCBVQ2hhciosIHVuc2lnbmVkIGluZGV4LCBjb25zdCBTaW1wbGVGb250RGF0
YSosIEdseXBoQnVmZmVyKik7Ci0gICAgYm9vbCBzaGFwZShjb25zdCBVQ2hhciogc3RyLCBpbnQg
bGVuLCBTQ1JJUFRfSVRFTSBpdGVtLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsCisg
ICAgdm9pZCBpdGVtaXplU2hhcGVBbmRQbGFjZShjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxlbmd0
aCwgY29uc3QgRm9udCosIEdseXBoQnVmZmVyKik7CisgICAgYm9vbCBzaGFwZUFuZFBsYWNlSXRl
bShjb25zdCBVQ2hhciosIHVuc2lnbmVkIGluZGV4LCBjb25zdCBGb250KiwgR2x5cGhCdWZmZXIq
KTsKKyAgICBib29sIHNoYXBlKGNvbnN0IFVDaGFyKiBzdHIsIGludCBsZW4sIFNDUklQVF9JVEVN
LCBjb25zdCBGb250KiwKICAgICAgICAgICAgICAgIFZlY3RvcjxXT1JEPiYgZ2x5cGhzLCBWZWN0
b3I8V09SRD4mIGNsdXN0ZXJzLAogICAgICAgICAgICAgICAgVmVjdG9yPFNDUklQVF9WSVNBVFRS
PiYgdmlzdWFsQXR0cmlidXRlcyk7CiAKICAgICBjb25zdCBGb250Q2FzY2FkZSYgbV9mb250Owog
ICAgIGNvbnN0IFRleHRSdW4mIG1fcnVuOwotICAgIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERh
dGEqPiogbV9mYWxsYmFja0ZvbnRzOworICAgIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBtX2ZhbGxi
YWNrRm9udHM7CiAgICAgRmxvYXRQb2ludCBtX2dseXBoT3JpZ2luOwogICAgIGZsb2F0IG1fbWlu
R2x5cGhCb3VuZGluZ0JveFg7CiAgICAgZmxvYXQgbV9tYXhHbHlwaEJvdW5kaW5nQm94WDsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwCShyZXZp
c2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUG9wdXBNZW51V2lu
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgIkJpdG1hcElu
Zm8uaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2lu
Y2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGb250U2VsZWN0b3IuaCIKICNpbmNsdWRlICJGcmFt
ZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgpAQCAtNDIsNyArNDMsNiBAQAogI2luY2x1ZGUg
IlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJTY3JvbGxiYXIuaCIKICNpbmNsdWRlICJTY3JvbGxi
YXJUaGVtZS5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5jbHVkZSAiVGV4dFJ1
bi5oIgogI2luY2x1ZGUgIldlYkNvcmVJbnN0YW5jZUhhbmRsZS5oIgogI2luY2x1ZGUgPHd0Zi9X
aW5kb3dzRXh0cmFzLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxv
d0JveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZs
b3dCb3guY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
SW5saW5lRmxvd0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0OSw3ICs0NDksNyBAQCBib29s
IElubGluZUZsb3dCb3g6OnJlcXVpcmVzSWRlb2dyYXBoaWNCCiAKICAgICBjb25zdCBSZW5kZXJT
dHlsZSYgbGluZVN0eWxlID0gdGhpcy0+bGluZVN0eWxlKCk7CiAgICAgaWYgKGxpbmVTdHlsZS5m
b250RGVzY3JpcHRpb24oKS5ub25DSktHbHlwaE9yaWVudGF0aW9uKCkgPT0gTm9uQ0pLR2x5cGhP
cmllbnRhdGlvblVwcmlnaHQKLSAgICAgICAgfHwgbGluZVN0eWxlLmZvbnRDYXNjYWRlKCkucHJp
bWFyeUZvbnREYXRhKCkuaGFzVmVydGljYWxHbHlwaHMoKSkKKyAgICAgICAgfHwgbGluZVN0eWxl
LmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKS5oYXNWZXJ0aWNhbEdseXBocygpKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKIAogICAgIGZvciAoSW5saW5lQm94KiBjaGlsZCA9IGZpcnN0Q2hpbGQo
KTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRPbkxpbmUoKSkgewpAQCAtNDYwLDE4ICs0NjAs
MTggQEAgYm9vbCBJbmxpbmVGbG93Qm94OjpyZXF1aXJlc0lkZW9ncmFwaGljQgogICAgICAgICAg
ICAgaWYgKGRvd25jYXN0PElubGluZUZsb3dCb3g+KCpjaGlsZCkucmVxdWlyZXNJZGVvZ3JhcGhp
Y0Jhc2VsaW5lKHRleHRCb3hEYXRhTWFwKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChjaGlsZC0+bGluZVN0eWxlKCkuZm9u
dENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5oYXNWZXJ0aWNhbEdseXBocygpKQorICAgICAg
ICAgICAgaWYgKGNoaWxkLT5saW5lU3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCku
aGFzVmVydGljYWxHbHlwaHMoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgICAgIAotICAgICAgICAgICAgY29uc3QgVmVjdG9yPGNvbnN0IFNpbXBsZUZvbnREYXRhKj4q
IHVzZWRGb250cyA9IG51bGxwdHI7CisgICAgICAgICAgICBjb25zdCBWZWN0b3I8Y29uc3QgRm9u
dCo+KiB1c2VkRm9udHMgPSBudWxscHRyOwogICAgICAgICAgICAgaWYgKGlzPElubGluZVRleHRC
b3g+KCpjaGlsZCkpIHsKICAgICAgICAgICAgICAgICBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tG
b250c01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0ZXh0Qm94RGF0YU1hcC5maW5kKGRvd25jYXN0
PElubGluZVRleHRCb3g+KGNoaWxkKSk7CiAgICAgICAgICAgICAgICAgdXNlZEZvbnRzID0gaXQg
PT0gdGV4dEJveERhdGFNYXAuZW5kKCkgPyBudWxscHRyIDogJml0LT52YWx1ZS5maXJzdDsKICAg
ICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKHVzZWRGb250cykgewotICAgICAgICAgICAg
ICAgIGZvciAoY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhIDogKnVzZWRGb250cykgewot
ICAgICAgICAgICAgICAgICAgICBpZiAoZm9udERhdGEtPmhhc1ZlcnRpY2FsR2x5cGhzKCkpCisg
ICAgICAgICAgICAgICAgZm9yIChjb25zdCBGb250KiBmb250IDogKnVzZWRGb250cykgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoZm9udC0+aGFzVmVydGljYWxHbHlwaHMoKSkKICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guaAkocmV2
aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3gu
aAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTIgKzMxLDEyIEBAIGNsYXNzIEhpdFRlc3RSZXF1ZXN0
OwogY2xhc3MgSGl0VGVzdFJlc3VsdDsKIGNsYXNzIElubGluZVRleHRCb3g7CiBjbGFzcyBSZW5k
ZXJMaW5lQm94TGlzdDsKLWNsYXNzIFNpbXBsZUZvbnREYXRhOworY2xhc3MgRm9udDsKIGNsYXNz
IFZlcnRpY2FsUG9zaXRpb25DYWNoZTsKIAogc3RydWN0IEdseXBoT3ZlcmZsb3c7CiAKLXR5cGVk
ZWYgSGFzaE1hcDxjb25zdCBJbmxpbmVUZXh0Qm94Kiwgc3RkOjpwYWlyPFZlY3Rvcjxjb25zdCBT
aW1wbGVGb250RGF0YSo+LCBHbHlwaE92ZXJmbG93Pj4gR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNr
Rm9udHNNYXA7Cit0eXBlZGVmIEhhc2hNYXA8Y29uc3QgSW5saW5lVGV4dEJveCosIHN0ZDo6cGFp
cjxWZWN0b3I8Y29uc3QgRm9udCo+LCBHbHlwaE92ZXJmbG93Pj4gR2x5cGhPdmVyZmxvd0FuZEZh
bGxiYWNrRm9udHNNYXA7CiAKIGNsYXNzIElubGluZUZsb3dCb3ggOiBwdWJsaWMgSW5saW5lQm94
IHsKIHB1YmxpYzoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJv
eC5jcHAJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Jbmxp
bmVUZXh0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM4MSw3ICsxMzgxLDcgQEAgVGV4dFJ1
biBJbmxpbmVUZXh0Qm94Ojpjb25zdHJ1Y3RUZXh0UnVuKAogCiAgICAgVGV4dFJ1biBydW4oc3Ry
aW5nLCB0ZXh0UG9zKCksIGV4cGFuc2lvbigpLCBleHBhbnNpb25CZWhhdmlvcigpLCBkaXJlY3Rp
b24oKSwgZGlyT3ZlcnJpZGUoKSB8fCBzdHlsZS5ydGxPcmRlcmluZygpID09IFZpc3VhbE9yZGVy
LCAhcmVuZGVyZXIoKS5jYW5Vc2VTaW1wbGVGb250Q29kZVBhdGgoKSk7CiAgICAgcnVuLnNldFRh
YlNpemUoIXN0eWxlLmNvbGxhcHNlV2hpdGVTcGFjZSgpLCBzdHlsZS50YWJTaXplKCkpOwotICAg
IGlmIChmb250LnByaW1hcnlGb250RGF0YSgpLmlzU1ZHRm9udCgpKQorICAgIGlmIChmb250LnBy
aW1hcnlGb250KCkuaXNTVkdGb250KCkpCiAgICAgICAgIHJ1bi5zZXRSZW5kZXJpbmdDb250ZXh0
KFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUocmVuZGVyZXIoKSkpOwogCiAgICAg
Ly8gUHJvcGFnYXRlIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiB0aGUgY2hhcmFjdGVycyBidWZmZXIg
dG8gdGhlIFRleHRSdW4sIGV2ZW4gd2hlbiB3ZSdyZSBvbmx5IHByb2Nlc3NpbmcgYSBzdWJzdHJp
bmcuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHJldmlz
aW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIzMjUsNyArMjMyNSw3IEBAIExheW91dFVuaXQgUmVuZGVyQmxv
Y2s6OmFkanVzdExvZ2ljYWxMZWYKICAgICAgICAgcmV0dXJuIGxlZnQ7CiAKICAgICAvLyBGSVhN
RTogU2hvdWxkIGxldHRlci1zcGFjaW5nIGFwcGx5PyBUaGlzIGlzIGNvbXBsaWNhdGVkIHNpbmNl
IGl0IGRvZXNuJ3QgYXBwbHkgYXQgdGhlIGVkZ2U/Ci0gICAgZmxvYXQgbWF4Q2hhcldpZHRoID0g
bGluZUdyaWQtPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5tYXhDaGFy
V2lkdGgoKTsKKyAgICBmbG9hdCBtYXhDaGFyV2lkdGggPSBsaW5lR3JpZC0+c3R5bGUoKS5mb250
Q2FzY2FkZSgpLnByaW1hcnlGb250KCkubWF4Q2hhcldpZHRoKCk7CiAgICAgaWYgKCFtYXhDaGFy
V2lkdGgpCiAgICAgICAgIHJldHVybiBsZWZ0OwogCkBAIC0yMzY1LDcgKzIzNjUsNyBAQCBMYXlv
dXRVbml0IFJlbmRlckJsb2NrOjphZGp1c3RMb2dpY2FsUmlnCiAgICAgICAgIHJldHVybiByaWdo
dDsKIAogICAgIC8vIEZJWE1FOiBTaG91bGQgbGV0dGVyLXNwYWNpbmcgYXBwbHk/IFRoaXMgaXMg
Y29tcGxpY2F0ZWQgc2luY2UgaXQgZG9lc24ndCBhcHBseSBhdCB0aGUgZWRnZT8KLSAgICBmbG9h
dCBtYXhDaGFyV2lkdGggPSBsaW5lR3JpZC0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlG
b250RGF0YSgpLm1heENoYXJXaWR0aCgpOworICAgIGZsb2F0IG1heENoYXJXaWR0aCA9IGxpbmVH
cmlkLT5zdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKS5tYXhDaGFyV2lkdGgoKTsK
ICAgICBpZiAoIW1heENoYXJXaWR0aCkKICAgICAgICAgcmV0dXJuIHJpZ2h0OwogCkBAIC0zNzA1
LDcgKzM3MDUsNyBAQCBzdGF0aWMgaW5saW5lIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bkluCiAg
ICAgYm9vbCBkaXJlY3Rpb25hbE92ZXJyaWRlID0gc3R5bGUucnRsT3JkZXJpbmcoKSA9PSBWaXN1
YWxPcmRlcjsKIAogICAgIFRleHRSdW4gcnVuKGNoYXJhY3RlcnMsIGxlbmd0aCwgMCwgMCwgZXhw
YW5zaW9uLCB0ZXh0RGlyZWN0aW9uLCBkaXJlY3Rpb25hbE92ZXJyaWRlKTsKLSAgICBpZiAoZm9u
dC5wcmltYXJ5Rm9udERhdGEoKS5pc1NWR0ZvbnQoKSkgeworICAgIGlmIChmb250LnByaW1hcnlG
b250KCkuaXNTVkdGb250KCkpIHsKICAgICAgICAgQVNTRVJUKGNvbnRleHQpOyAvLyBGSVhNRTog
VGhyZWFkIGEgUmVuZGVyT2JqZWN0JiB0byB0aGlzIHBvaW50IHNvIHdlIGRvbid0IGhhdmUgdG8g
ZGVyZWZlcmVuY2UgYW55dGhpbmcuCiAgICAgICAgIHJ1bi5zZXRSZW5kZXJpbmdDb250ZXh0KFNW
R1RleHRSdW5SZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUoKmNvbnRleHQpKTsKICAgICB9CkBAIC0z
NzI1LDcgKzM3MjUsNyBAQCBzdGF0aWMgaW5saW5lIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bklu
CiAgICAgICAgICAgICBkaXJlY3Rpb25hbE92ZXJyaWRlIHw9IGlzT3ZlcnJpZGUoc3R5bGUudW5p
Y29kZUJpZGkoKSk7CiAgICAgfQogICAgIFRleHRSdW4gcnVuKGNoYXJhY3RlcnMsIGxlbmd0aCwg
MCwgMCwgZXhwYW5zaW9uLCB0ZXh0RGlyZWN0aW9uLCBkaXJlY3Rpb25hbE92ZXJyaWRlKTsKLSAg
ICBpZiAoZm9udC5wcmltYXJ5Rm9udERhdGEoKS5pc1NWR0ZvbnQoKSkgeworICAgIGlmIChmb250
LnByaW1hcnlGb250KCkuaXNTVkdGb250KCkpIHsKICAgICAgICAgQVNTRVJUKGNvbnRleHQpOyAv
LyBGSVhNRTogVGhyZWFkIGEgUmVuZGVyT2JqZWN0JiB0byB0aGlzIHBvaW50IHNvIHdlIGRvbid0
IGhhdmUgdG8gZGVyZWZlcmVuY2UgYW55dGhpbmcuCiAgICAgICAgIHJ1bi5zZXRSZW5kZXJpbmdD
b250ZXh0KFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUoKmNvbnRleHQpKTsKICAg
ICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tM
aW5lTGF5b3V0LmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1OCw3ICs0
NTgsNyBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6c2V0TWFyZ2luc0ZvclJ1YnlSCiBzdGF0aWMg
aW5saW5lIHZvaWQgc2V0TG9naWNhbFdpZHRoRm9yVGV4dFJ1bihSb290SW5saW5lQm94KiBsaW5l
Qm94LCBCaWRpUnVuKiBydW4sIFJlbmRlclRleHQqIHJlbmRlcmVyLCBmbG9hdCB4UG9zLCBjb25z
dCBMaW5lSW5mbyYgbGluZUluZm8sCiAgICAgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNN
YXAmIHRleHRCb3hEYXRhTWFwLCBWZXJ0aWNhbFBvc2l0aW9uQ2FjaGUmIHZlcnRpY2FsUG9zaXRp
b25DYWNoZSwgV29yZE1lYXN1cmVtZW50cyYgd29yZE1lYXN1cmVtZW50cykKIHsKLSAgICBIYXNo
U2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4gZmFsbGJhY2tGb250czsKKyAgICBIYXNoU2V0PGNv
bnN0IEZvbnQqPiBmYWxsYmFja0ZvbnRzOwogICAgIEdseXBoT3ZlcmZsb3cgZ2x5cGhPdmVyZmxv
dzsKIAogICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0gbGluZVN0eWxlKCpyZW5kZXJlci0+
cGFyZW50KCksIGxpbmVJbmZvKS5mb250Q2FzY2FkZSgpOwpAQCAtNTA5LDggKzUwOSw4IEBAIHN0
YXRpYyBpbmxpbmUgdm9pZCBzZXRMb2dpY2FsV2lkdGhGb3JUZXgKICAgICAgICAgICAgIH0gZWxz
ZQogICAgICAgICAgICAgICAgIG1lYXN1cmVkV2lkdGggKz0gd29yZE1lYXN1cmVtZW50LndpZHRo
OwogICAgICAgICAgICAgaWYgKCF3b3JkTWVhc3VyZW1lbnQuZmFsbGJhY2tGb250cy5pc0VtcHR5
KCkpIHsKLSAgICAgICAgICAgICAgICBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj46OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IHdvcmRNZWFzdXJlbWVudC5mYWxsYmFja0ZvbnRzLmVuZCgpOwot
ICAgICAgICAgICAgICAgIGZvciAoSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+Ojpjb25z
dF9pdGVyYXRvciBpdCA9IHdvcmRNZWFzdXJlbWVudC5mYWxsYmFja0ZvbnRzLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgICAgICBIYXNoU2V0PGNvbnN0IEZvbnQqPjo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gd29yZE1lYXN1cmVtZW50LmZhbGxiYWNrRm9udHMuZW5kKCk7Cisg
ICAgICAgICAgICAgICAgZm9yIChIYXNoU2V0PGNvbnN0IEZvbnQqPjo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSB3b3JkTWVhc3VyZW1lbnQuZmFsbGJhY2tGb250cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpCiAgICAgICAgICAgICAgICAgICAgIGZhbGxiYWNrRm9udHMuYWRkKCppdCk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KQEAgLTUyNyw3ICs1MjcsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQg
c2V0TG9naWNhbFdpZHRoRm9yVGV4CiAgICAgcnVuLT5ib3goKS0+c2V0TG9naWNhbFdpZHRoKG1l
YXN1cmVkV2lkdGggKyBoeXBoZW5XaWR0aCk7CiAgICAgaWYgKCFmYWxsYmFja0ZvbnRzLmlzRW1w
dHkoKSkgewogICAgICAgICBBU1NFUlQocnVuLT5ib3goKS0+YmVoYXZlc0xpa2VUZXh0KCkpOwot
ICAgICAgICBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcDo6aXRlcmF0b3IgaXQgPSB0
ZXh0Qm94RGF0YU1hcC5hZGQoZG93bmNhc3Q8SW5saW5lVGV4dEJveD4ocnVuLT5ib3goKSksIHN0
ZDo6bWFrZV9wYWlyKFZlY3Rvcjxjb25zdCBTaW1wbGVGb250RGF0YSo+KCksIEdseXBoT3ZlcmZs
b3coKSkpLml0ZXJhdG9yOworICAgICAgICBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01h
cDo6aXRlcmF0b3IgaXQgPSB0ZXh0Qm94RGF0YU1hcC5hZGQoZG93bmNhc3Q8SW5saW5lVGV4dEJv
eD4ocnVuLT5ib3goKSksIHN0ZDo6bWFrZV9wYWlyKFZlY3Rvcjxjb25zdCBGb250Kj4oKSwgR2x5
cGhPdmVyZmxvdygpKSkuaXRlcmF0b3I7CiAgICAgICAgIEFTU0VSVChpdC0+dmFsdWUuZmlyc3Qu
aXNFbXB0eSgpKTsKICAgICAgICAgY29weVRvVmVjdG9yKGZhbGxiYWNrRm9udHMsIGl0LT52YWx1
ZS5maXJzdCk7CiAgICAgICAgIHJ1bi0+Ym94KCktPnBhcmVudCgpLT5jbGVhckRlc2NlbmRhbnRz
SGF2ZVNhbWVMaW5lSGVpZ2h0QW5kQmFzZWxpbmUoKTsKQEAgLTUzOSw3ICs1MzksNyBAQCBzdGF0
aWMgaW5saW5lIHZvaWQgc2V0TG9naWNhbFdpZHRoRm9yVGV4CiAKICAgICBpZiAoIWdseXBoT3Zl
cmZsb3cuaXNFbXB0eSgpKSB7CiAgICAgICAgIEFTU0VSVChydW4tPmJveCgpLT5iZWhhdmVzTGlr
ZVRleHQoKSk7Ci0gICAgICAgIEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwOjppdGVy
YXRvciBpdCA9IHRleHRCb3hEYXRhTWFwLmFkZChkb3duY2FzdDxJbmxpbmVUZXh0Qm94PihydW4t
PmJveCgpKSwgc3RkOjptYWtlX3BhaXIoVmVjdG9yPGNvbnN0IFNpbXBsZUZvbnREYXRhKj4oKSwg
R2x5cGhPdmVyZmxvdygpKSkuaXRlcmF0b3I7CisgICAgICAgIEdseXBoT3ZlcmZsb3dBbmRGYWxs
YmFja0ZvbnRzTWFwOjppdGVyYXRvciBpdCA9IHRleHRCb3hEYXRhTWFwLmFkZChkb3duY2FzdDxJ
bmxpbmVUZXh0Qm94PihydW4tPmJveCgpKSwgc3RkOjptYWtlX3BhaXIoVmVjdG9yPGNvbnN0IEZv
bnQqPigpLCBHbHlwaE92ZXJmbG93KCkpKS5pdGVyYXRvcjsKICAgICAgICAgaXQtPnZhbHVlLnNl
Y29uZCA9IGdseXBoT3ZlcmZsb3c7CiAgICAgICAgIHJ1bi0+Ym94KCktPmNsZWFyS25vd25Ub0hh
dmVOb092ZXJmbG93KCk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckNvbWJpbmVUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQ29tYmluZVRleHQuY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
Nyw3ICs1Nyw3IEBAIHZvaWQgUmVuZGVyQ29tYmluZVRleHQ6OnNldFJlbmRlcmVkVGV4dCgKICAg
ICBtX25lZWRzRm9udFVwZGF0ZSA9IHRydWU7CiB9CiAKLWZsb2F0IFJlbmRlckNvbWJpbmVUZXh0
Ojp3aWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IEZvbnRDYXNjYWRl
JiBmb250LCBmbG9hdCB4UG9zaXRpb24sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiog
ZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKK2Zsb2F0
IFJlbmRlckNvbWJpbmVUZXh0Ojp3aWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW5ndGgs
IGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBmbG9hdCB4UG9zaXRpb24sIEhhc2hTZXQ8Y29uc3Qg
Rm9udCo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25z
dAogewogICAgIGlmIChtX2lzQ29tYmluZWQpCiAgICAgICAgIHJldHVybiBmb250LnNpemUoKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb21iaW5lVGV4dC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb21iaW5lVGV4dC5oCShy
ZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29tYmlu
ZVRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBwcml2YXRlOgogICAgIHZv
aWQgbm9kZSgpIGNvbnN0ID0gZGVsZXRlOwogCiAgICAgdmlydHVhbCBib29sIGlzQ29tYmluZVRl
eHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBmbG9hdCB3
aWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IEZvbnRDYXNjYWRlJiwg
ZmxvYXQgeFBvc2l0aW9uLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNr
Rm9udHMgPSAwLCBHbHlwaE92ZXJmbG93KiA9IDApIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1
YWwgZmxvYXQgd2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBGb250
Q2FzY2FkZSYsIGZsb2F0IHhQb3NpdGlvbiwgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNr
Rm9udHMgPSAwLCBHbHlwaE92ZXJmbG93KiA9IDApIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1
YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICJSZW5k
ZXJDb21iaW5lVGV4dCI7IH0KICAgICB2aXJ0dWFsIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVE
aWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpIG92ZXJyaWRlOwogICAgIHZp
cnR1YWwgdm9pZCBzZXRSZW5kZXJlZFRleHQoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5jcHAJKHJl
dmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTZWFyY2hG
aWVsZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJDU1NG
b250U2VsZWN0b3IuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVkZSAi
Q2hyb21lLmgiCisjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVk
ZSAiRnJhbWVTZWxlY3Rpb24uaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKQEAgLTQyLDcgKzQz
LDYgQEAKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU2VhcmNoUG9wdXBNZW51
LmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgog
I2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJUZXh0Q29udHJvbElubmVyRWxl
bWVudHMuaCIKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAko
cmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTEsNyArNDUxLDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJU
ZXh0Ojpsb2NhbENhcmV0UmVjdChJbgogICAgIHJldHVybiBib3gucm9vdCgpLmNvbXB1dGVDYXJl
dFJlY3QobGVmdCwgY2FyZXRXaWR0aCwgZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKTsKIH0KIAotQUxX
QVlTX0lOTElORSBmbG9hdCBSZW5kZXJUZXh0Ojp3aWR0aEZyb21DYWNoZShjb25zdCBGb250Q2Fz
Y2FkZSYgZiwgaW50IHN0YXJ0LCBpbnQgbGVuLCBmbG9hdCB4UG9zLCBIYXNoU2V0PGNvbnN0IFNp
bXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZs
b3csIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKK0FMV0FZU19JTkxJTkUgZmxvYXQg
UmVuZGVyVGV4dDo6d2lkdGhGcm9tQ2FjaGUoY29uc3QgRm9udENhc2NhZGUmIGYsIGludCBzdGFy
dCwgaW50IGxlbiwgZmxvYXQgeFBvcywgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9u
dHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3csIGNvbnN0IFJlbmRlclN0eWxlJiBzdHls
ZSkgY29uc3QKIHsKICAgICBpZiAoc3R5bGUuaGFzVGV4dENvbWJpbmUoKSAmJiBpczxSZW5kZXJD
b21iaW5lVGV4dD4oKnRoaXMpKSB7CiAgICAgICAgIGNvbnN0IFJlbmRlckNvbWJpbmVUZXh0JiBj
b21iaW5lVGV4dCA9IGRvd25jYXN0PFJlbmRlckNvbWJpbmVUZXh0PigqdGhpcyk7CkBAIC02MzAs
NyArNjMwLDcgQEAgTGluZUJyZWFrSXRlcmF0b3JNb2RlIG1hcExpbmVCcmVha1RvSXRlcgogCiB2
b2lkIFJlbmRlclRleHQ6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKGZsb2F0IGxlYWRX
aWR0aCkKIHsKLSAgICBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4gZmFsbGJhY2tGb250
czsKKyAgICBIYXNoU2V0PGNvbnN0IEZvbnQqPiBmYWxsYmFja0ZvbnRzOwogICAgIEdseXBoT3Zl
cmZsb3cgZ2x5cGhPdmVyZmxvdzsKICAgICBjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyhs
ZWFkV2lkdGgsIGZhbGxiYWNrRm9udHMsIGdseXBoT3ZlcmZsb3cpOwogICAgIGlmIChmYWxsYmFj
a0ZvbnRzLmlzRW1wdHkoKSAmJiAhZ2x5cGhPdmVyZmxvdy5sZWZ0ICYmICFnbHlwaE92ZXJmbG93
LnJpZ2h0ICYmICFnbHlwaE92ZXJmbG93LnRvcCAmJiAhZ2x5cGhPdmVyZmxvdy5ib3R0b20pCkBA
IC02NDMsNyArNjQzLDcgQEAgc3RhdGljIGlubGluZSBmbG9hdCBoeXBoZW5XaWR0aChSZW5kZXJU
ZQogICAgIHJldHVybiBmb250LndpZHRoKFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHJl
bmRlcmVyLCBmb250LCBzdHlsZS5oeXBoZW5TdHJpbmcoKS5zdHJpbmcoKSwgc3R5bGUpKTsKIH0K
IAotc3RhdGljIGZsb2F0IG1heFdvcmRGcmFnbWVudFdpZHRoKFJlbmRlclRleHQqIHJlbmRlcmVy
LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBTdHJp
bmdWaWV3IHdvcmQsIGludCBtaW5pbXVtUHJlZml4TGVuZ3RoLCB1bnNpZ25lZCBtaW5pbXVtU3Vm
Zml4TGVuZ3RoLCBpbnQmIHN1ZmZpeFN0YXJ0LCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRh
Kj4mIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cmIGdseXBoT3ZlcmZsb3cpCitzdGF0aWMg
ZmxvYXQgbWF4V29yZEZyYWdtZW50V2lkdGgoUmVuZGVyVGV4dCogcmVuZGVyZXIsIGNvbnN0IFJl
bmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIFN0cmluZ1ZpZXcgd29y
ZCwgaW50IG1pbmltdW1QcmVmaXhMZW5ndGgsIHVuc2lnbmVkIG1pbmltdW1TdWZmaXhMZW5ndGgs
IGludCYgc3VmZml4U3RhcnQsIEhhc2hTZXQ8Y29uc3QgRm9udCo+JiBmYWxsYmFja0ZvbnRzLCBH
bHlwaE92ZXJmbG93JiBnbHlwaE92ZXJmbG93KQogewogICAgIHN1ZmZpeFN0YXJ0ID0gMDsKICAg
ICBpZiAod29yZC5sZW5ndGgoKSA8PSBtaW5pbXVtU3VmZml4TGVuZ3RoKQpAQCAtNjgzLDcgKzY4
Myw3IEBAIHN0YXRpYyBmbG9hdCBtYXhXb3JkRnJhZ21lbnRXaWR0aChSZW5kZXIKICAgICByZXR1
cm4gbWF4RnJhZ21lbnRXaWR0aDsKIH0KIAotdm9pZCBSZW5kZXJUZXh0Ojpjb21wdXRlUHJlZmVy
cmVkTG9naWNhbFdpZHRocyhmbG9hdCBsZWFkV2lkdGgsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9u
dERhdGEqPiYgZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyYgZ2x5cGhPdmVyZmxvdykKK3Zv
aWQgUmVuZGVyVGV4dDo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoZmxvYXQgbGVhZFdp
ZHRoLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiYgZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyYg
Z2x5cGhPdmVyZmxvdykKIHsKICAgICBBU1NFUlQobV9oYXNUYWIgfHwgcHJlZmVycmVkTG9naWNh
bFdpZHRoc0RpcnR5KCkgfHwgIW1fa25vd25Ub0hhdmVOb092ZXJmbG93QW5kTm9GYWxsYmFja0Zv
bnRzKTsKIApAQCAtMTIwNiw3ICsxMjA2LDcgQEAgY29uc3QgU2ltcGxlTGluZUxheW91dDo6TGF5
b3V0KiBSZW5kZXJUZQogICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+KCpwYXJl
bnQoKSkuc2ltcGxlTGluZUxheW91dCgpOwogfQogCi1mbG9hdCBSZW5kZXJUZXh0Ojp3aWR0aCh1
bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIGZsb2F0IHhQb3MsIGJvb2wgZmlyc3RMaW5lLCBI
YXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZs
b3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0CitmbG9hdCBSZW5kZXJUZXh0Ojp3aWR0aCh1bnNpZ25l
ZCBmcm9tLCB1bnNpZ25lZCBsZW4sIGZsb2F0IHhQb3MsIGJvb2wgZmlyc3RMaW5lLCBIYXNoU2V0
PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxv
dykgY29uc3QKIHsKICAgICBpZiAoZnJvbSA+PSB0ZXh0TGVuZ3RoKCkpCiAgICAgICAgIHJldHVy
biAwOwpAQCAtMTIxOCw3ICsxMjE4LDcgQEAgZmxvYXQgUmVuZGVyVGV4dDo6d2lkdGgodW5zaWdu
ZWQgZnJvbSwgdQogICAgIHJldHVybiB3aWR0aChmcm9tLCBsZW4sIGxpbmVTdHlsZS5mb250Q2Fz
Y2FkZSgpLCB4UG9zLCBmYWxsYmFja0ZvbnRzLCBnbHlwaE92ZXJmbG93KTsKIH0KIAotZmxvYXQg
UmVuZGVyVGV4dDo6d2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBjb25zdCBGb250
Q2FzY2FkZSYgZiwgZmxvYXQgeFBvcywgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBm
YWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAorZmxvYXQg
UmVuZGVyVGV4dDo6d2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBjb25zdCBGb250
Q2FzY2FkZSYgZiwgZmxvYXQgeFBvcywgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9u
dHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGZy
b20gKyBsZW4gPD0gdGV4dExlbmd0aCgpKTsKICAgICBpZiAoIXRleHRMZW5ndGgoKSkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAkocmV2aXNpb24gMTc4ODU3KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAkod29ya2luZyBjb3B5KQpAQCAt
ODksOCArODksOCBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgdGV4dExlbmd0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fdGV4dC5pbXBsKCktPmxlbmd0aCgpOyB9IC8vIG5vbiB2aXJ0dWFsIGltcGxlbWVu
dGF0aW9uIG9mIGxlbmd0aCgpCiAgICAgdm9pZCBwb3NpdGlvbkxpbmVCb3goSW5saW5lVGV4dEJv
eCYpOwogCi0gICAgdmlydHVhbCBmbG9hdCB3aWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBs
ZW4sIGNvbnN0IEZvbnRDYXNjYWRlJiwgZmxvYXQgeFBvcywgSGFzaFNldDxjb25zdCBTaW1wbGVG
b250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsK
LSAgICB2aXJ0dWFsIGZsb2F0IHdpZHRoKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgZmxv
YXQgeFBvcywgYm9vbCBmaXJzdExpbmUgPSBmYWxzZSwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250
RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIGZsb2F0IHdpZHRoKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgY29uc3Qg
Rm9udENhc2NhZGUmLCBmbG9hdCB4UG9zLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tG
b250cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29uc3Q7CisgICAgdmlydHVhbCBmbG9hdCB3
aWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIGZsb2F0IHhQb3MsIGJvb2wgZmlyc3RM
aW5lID0gZmFsc2UsIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5
cGhPdmVyZmxvdyogPSAwKSBjb25zdDsKIAogICAgIGZsb2F0IG1pbkxvZ2ljYWxXaWR0aCgpIGNv
bnN0OwogICAgIGZsb2F0IG1heExvZ2ljYWxXaWR0aCgpIGNvbnN0OwpAQCAtMTgwLDcgKzE4MCw3
IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIGJvb2wgY2FuSGF2ZUNoaWxkcmVuKCkgY29uc3Qg
b3ZlcnJpZGUgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIHZvaWQgY29tcHV0ZVByZWZl
cnJlZExvZ2ljYWxXaWR0aHMoZmxvYXQgbGVhZFdpZHRoLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZv
bnREYXRhKj4mIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cmKTsKKyAgICB2b2lkIGNvbXB1
dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKGZsb2F0IGxlYWRXaWR0aCwgSGFzaFNldDxjb25zdCBG
b250Kj4mIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cmKTsKIAogICAgIGJvb2wgY29tcHV0
ZUNhblVzZVNpbXBsZUZvbnRDb2RlUGF0aCgpIGNvbnN0OwogICAgIApAQCAtMTkyLDcgKzE5Miw3
IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RS
ZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIGNvbnN0IExh
eW91dFBvaW50JiwgSGl0VGVzdEFjdGlvbikgb3ZlcnJpZGUgZmluYWwgeyBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICBib29sIGNvbnRhaW5zT25seVdoaXRlc3Bh
Y2UodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuKSBjb25zdDsKLSAgICBmbG9hdCB3aWR0aEZy
b21DYWNoZShjb25zdCBGb250Q2FzY2FkZSYsIGludCBzdGFydCwgaW50IGxlbiwgZmxvYXQgeFBv
cywgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92
ZXJmbG93KiwgY29uc3QgUmVuZGVyU3R5bGUmKSBjb25zdDsKKyAgICBmbG9hdCB3aWR0aEZyb21D
YWNoZShjb25zdCBGb250Q2FzY2FkZSYsIGludCBzdGFydCwgaW50IGxlbiwgZmxvYXQgeFBvcywg
SGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqLCBjb25z
dCBSZW5kZXJTdHlsZSYpIGNvbnN0OwogICAgIGJvb2wgaXNBbGxBU0NJSSgpIGNvbnN0IHsgcmV0
dXJuIG1faXNBbGxBU0NJSTsgfQogICAgIGJvb2wgY29tcHV0ZVVzZUJhY2tzbGFzaEFzWWVuU3lt
Ym9sKCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCShyZXZpc2lvbiAxNzg4NTcpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkNTU0ZvbnRTZWxl
Y3Rvci5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKICNpbmNsdWRlICJDaHJvbWUu
aCIKKyNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFt
ZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgpAQCAtNDAsNyArNDEsNiBAQAog
I2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1
ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKICNpbmNsdWRlICJT
dHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmgiCiAj
aW5jbHVkZSA8d3RmL1N0YWNrU3RhdHMuaD4KQEAgLTM0Niw3ICszNDYsNyBAQCBMYXlvdXRVbml0
IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6CiAgICAgaWYgKGZhbWlseSA9PSAiTHVjaWRh
IEdyYW5kZSIpCiAgICAgICAgIG1heENoYXJXaWR0aCA9IHNjYWxlRW1Ub1VuaXRzKDQwMjcpOwog
ICAgIGVsc2UgaWYgKHN0eWxlKCkuZm9udENhc2NhZGUoKS5oYXNWYWxpZEF2ZXJhZ2VDaGFyV2lk
dGgoKSkKLSAgICAgICAgbWF4Q2hhcldpZHRoID0gcm91bmRmKHN0eWxlKCkuZm9udENhc2NhZGUo
KS5wcmltYXJ5Rm9udERhdGEoKS5tYXhDaGFyV2lkdGgoKSk7CisgICAgICAgIG1heENoYXJXaWR0
aCA9IHJvdW5kZihzdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKS5tYXhDaGFyV2lk
dGgoKSk7CiAjZW5kaWYKIAogICAgIC8vIEZvciB0ZXh0IGlucHV0cywgSUUgYWRkcyBzb21lIGV4
dHJhIHdpZHRoLgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9T
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlP
Uy5tbQkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01ODAsNyArNTgwLDcgQEAgc3RhdGljIHZv
aWQgYWRqdXN0SW5wdXRFbGVtZW50QnV0dG9uU3R5bAogICAgIEZvbnRDYXNjYWRlIGZvbnQgPSBz
dHlsZS5mb250Q2FzY2FkZSgpOwogICAgIAogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBp
bnB1dEVsZW1lbnQucmVuZGVyZXIoKTsKLSAgICBpZiAoZm9udC5wcmltYXJ5Rm9udERhdGEoKS5p
c1NWR0ZvbnQoKSAmJiAhcmVuZGVyZXIpCisgICAgaWYgKGZvbnQucHJpbWFyeUZvbnQoKS5pc1NW
R0ZvbnQoKSAmJiAhcmVuZGVyZXIpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBmbG9hdCBt
YXhpbXVtV2lkdGggPSBsb2NhbGl6ZWREYXRlQ2FjaGUoKS5tYXhpbXVtV2lkdGhGb3JEYXRlVHlw
ZShkYXRlVHlwZSwgZm9udCwgUmVuZGVyVGhlbWVNZWFzdXJlVGV4dENsaWVudChmb250LCAqcmVu
ZGVyZXIsIHN0eWxlKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGlu
ZUJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxp
bmVCb3guY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
Um9vdElubGluZUJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4NSw3ICs4ODUsNyBAQCB2b2lk
IFJvb3RJbmxpbmVCb3g6OmFzY2VudEFuZERlc2NlbnRGb3JCCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBWZWN0b3I8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogdXNlZEZvbnRzID0gbnVs
bHB0cjsKKyAgICBWZWN0b3I8Y29uc3QgRm9udCo+KiB1c2VkRm9udHMgPSBudWxscHRyOwogICAg
IEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cgPSBudWxscHRyOwogICAgIGlmIChpczxJbmxp
bmVUZXh0Qm94Pihib3gpKSB7CiAgICAgICAgIEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRz
TWFwOjppdGVyYXRvciBpdCA9IHRleHRCb3hEYXRhTWFwLmZpbmQoJmRvd25jYXN0PElubGluZVRl
eHRCb3g+KGJveCkpOwpAQCAtOTAxLDcgKzkwMSw3IEBAIHZvaWQgUm9vdElubGluZUJveDo6YXNj
ZW50QW5kRGVzY2VudEZvckIKIAogICAgIGNvbnN0IFJlbmRlclN0eWxlJiBib3hMaW5lU3R5bGUg
PSBib3gubGluZVN0eWxlKCk7CiAgICAgaWYgKHVzZWRGb250cyAmJiAhdXNlZEZvbnRzLT5pc0Vt
cHR5KCkgJiYgKGluY2x1ZGVGb250IHx8IChib3hMaW5lU3R5bGUubGluZUhlaWdodCgpLmlzTmVn
YXRpdmUoKSAmJiBpbmNsdWRlTGVhZGluZykpKSB7Ci0gICAgICAgIHVzZWRGb250cy0+YXBwZW5k
KCZib3hMaW5lU3R5bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKSk7CisgICAgICAg
IHVzZWRGb250cy0+YXBwZW5kKCZib3hMaW5lU3R5bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9u
dCgpKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB1c2VkRm9udHMtPnNpemUoKTsg
KytpKSB7CiAgICAgICAgICAgICBjb25zdCBGb250TWV0cmljcyYgZm9udE1ldHJpY3MgPSB1c2Vk
Rm9udHMtPmF0KGkpLT5mb250TWV0cmljcygpOwogICAgICAgICAgICAgaW50IHVzZWRGb250QXNj
ZW50ID0gZm9udE1ldHJpY3MuYXNjZW50KGJhc2VsaW5lVHlwZSgpKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5jcHAJKHJldmlzaW9uIDE3ODg1
NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3Bh
Y2UgU2ltcGxlTGluZUxheW91dCB7CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBl
Pgotc3RhdGljIGJvb2wgY2FuVXNlRm9yVGV4dChjb25zdCBDaGFyYWN0ZXJUeXBlKiB0ZXh0LCB1
bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFNpbXBsZUZvbnREYXRhJiBmb250RGF0YSkKK3N0YXRpYyBi
b29sIGNhblVzZUZvclRleHQoY29uc3QgQ2hhcmFjdGVyVHlwZSogdGV4dCwgdW5zaWduZWQgbGVu
Z3RoLCBjb25zdCBGb250JiBmb250KQogewogICAgIC8vIEZJWE1FOiA8dGV4dGFyZWEgbWF4bGVu
Z3RoPTA+IGdlbmVyYXRlcyBlbXB0eSB0ZXh0IG5vZGUuCiAgICAgaWYgKCFsZW5ndGgpCkBAIC03
NSwxNyArNzUsMTcgQEAgc3RhdGljIGJvb2wgY2FuVXNlRm9yVGV4dChjb25zdCBDaGFyYWN0ZQog
ICAgICAgICAgICAgfHwgZGlyZWN0aW9uID09IFVfUE9QX0RJUkVDVElPTkFMX0ZPUk1BVCB8fCBk
aXJlY3Rpb24gPT0gVV9CT1VOREFSWV9ORVVUUkFMKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgICAgIGlmICghZm9udERhdGEuZ2x5cGhGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyKSkK
KyAgICAgICAgaWYgKCFmb250LmdseXBoRm9yQ2hhcmFjdGVyKGNoYXJhY3RlcikpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMg
Ym9vbCBjYW5Vc2VGb3JUZXh0KGNvbnN0IFJlbmRlclRleHQmIHRleHRSZW5kZXJlciwgY29uc3Qg
U2ltcGxlRm9udERhdGEmIGZvbnREYXRhKQorc3RhdGljIGJvb2wgY2FuVXNlRm9yVGV4dChjb25z
dCBSZW5kZXJUZXh0JiB0ZXh0UmVuZGVyZXIsIGNvbnN0IEZvbnQmIGZvbnQpCiB7CiAgICAgaWYg
KHRleHRSZW5kZXJlci5pczhCaXQoKSkKLSAgICAgICAgcmV0dXJuIGNhblVzZUZvclRleHQodGV4
dFJlbmRlcmVyLmNoYXJhY3RlcnM4KCksIHRleHRSZW5kZXJlci50ZXh0TGVuZ3RoKCksIGZvbnRE
YXRhKTsKLSAgICByZXR1cm4gY2FuVXNlRm9yVGV4dCh0ZXh0UmVuZGVyZXIuY2hhcmFjdGVyczE2
KCksIHRleHRSZW5kZXJlci50ZXh0TGVuZ3RoKCksIGZvbnREYXRhKTsKKyAgICAgICAgcmV0dXJu
IGNhblVzZUZvclRleHQodGV4dFJlbmRlcmVyLmNoYXJhY3RlcnM4KCksIHRleHRSZW5kZXJlci50
ZXh0TGVuZ3RoKCksIGZvbnQpOworICAgIHJldHVybiBjYW5Vc2VGb3JUZXh0KHRleHRSZW5kZXJl
ci5jaGFyYWN0ZXJzMTYoKSwgdGV4dFJlbmRlcmVyLnRleHRMZW5ndGgoKSwgZm9udCk7CiB9CiAK
IGJvb2wgY2FuVXNlRm9yKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmxvdykKQEAgLTE4NCwxMSAr
MTg0LDExIEBAIGJvb2wgY2FuVXNlRm9yKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmwKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICBpZiAoc3R5bGUuZm9udENhc2NhZGUoKS5w
cmltYXJ5Rm9udERhdGEoKS5pc1NWR0ZvbnQoKSkKKyAgICBpZiAoc3R5bGUuZm9udENhc2NhZGUo
KS5wcmltYXJ5Rm9udCgpLmlzU1ZHRm9udCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
Ly8gV2UgYXNzdW1lIHRoYXQgYWxsIGxpbmVzIGhhdmUgbWV0cmljcyBiYXNlZCBwdXJlbHkgb24g
dGhlIHByaW1hcnkgZm9udC4KLSAgICBhdXRvJiBwcmltYXJ5Rm9udERhdGEgPSBzdHlsZS5mb250
Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpOwotICAgIGlmIChwcmltYXJ5Rm9udERhdGEuaXNM
b2FkaW5nKCkpCisgICAgYXV0byYgcHJpbWFyeUZvbnQgPSBzdHlsZS5mb250Q2FzY2FkZSgpLnBy
aW1hcnlGb250KCk7CisgICAgaWYgKHByaW1hcnlGb250LmlzTG9hZGluZygpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgZm9yIChjb25zdCBhdXRvJiB0ZXh0UmVuZGVyZXIgOiBjaGlsZHJl
bk9mVHlwZTxSZW5kZXJUZXh0PihmbG93KSkgewogICAgICAgICBpZiAodGV4dFJlbmRlcmVyLmlz
Q29tYmluZVRleHQoKSB8fCB0ZXh0UmVuZGVyZXIuaXNDb3VudGVyKCkgfHwgdGV4dFJlbmRlcmVy
LmlzUXVvdGUoKSB8fCB0ZXh0UmVuZGVyZXIuaXNUZXh0RnJhZ21lbnQoKQpAQCAtMTk2LDcgKzE5
Niw3IEBAIGJvb2wgY2FuVXNlRm9yKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmwKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKHN0eWxlLmZvbnRDYXNjYWRlKCkuY29kZVBh
dGgoVGV4dFJ1bih0ZXh0UmVuZGVyZXIudGV4dCgpKSkgIT0gRm9udENhc2NhZGU6OlNpbXBsZSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFjYW5Vc2VGb3JUZXh0KHRl
eHRSZW5kZXJlciwgcHJpbWFyeUZvbnREYXRhKSkKKyAgICAgICAgaWYgKCFjYW5Vc2VGb3JUZXh0
KHRleHRSZW5kZXJlciwgcHJpbWFyeUZvbnQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9s
aW5lL0JyZWFraW5nQ29udGV4dElubGluZUhlYWRlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvbGluZS9CcmVha2luZ0NvbnRleHRJbmxpbmVIZWFkZXJzLmgJKHJl
dmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0JyZWFraW5n
Q29udGV4dElubGluZUhlYWRlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBz
dHJ1Y3QgV29yZE1lYXN1cmVtZW50IHsKICAgICBmbG9hdCB3aWR0aDsKICAgICBpbnQgc3RhcnRP
ZmZzZXQ7CiAgICAgaW50IGVuZE9mZnNldDsKLSAgICBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnRE
YXRhKj4gZmFsbGJhY2tGb250czsKKyAgICBIYXNoU2V0PGNvbnN0IEZvbnQqPiBmYWxsYmFja0Zv
bnRzOwogfTsKIAogY2xhc3MgQnJlYWtpbmdDb250ZXh0IHsKQEAgLTQ4NiwxMyArNDg2LDEzIEBA
IGlubGluZSB2b2lkIHVwZGF0ZUNvdW50ZXJJZk5lZWRlZChSZW5kZXIKICAgICBkb3duY2FzdDxS
ZW5kZXJDb3VudGVyPihyZW5kZXJUZXh0KS51cGRhdGVDb3VudGVyKCk7CiB9CiAKLWlubGluZSBm
bG9hdCBtZWFzdXJlSHlwaGVuV2lkdGgoUmVuZGVyVGV4dCogcmVuZGVyZXIsIGNvbnN0IEZvbnRD
YXNjYWRlJiBmb250LCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9u
dHMgPSAwKQoraW5saW5lIGZsb2F0IG1lYXN1cmVIeXBoZW5XaWR0aChSZW5kZXJUZXh0KiByZW5k
ZXJlciwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxs
YmFja0ZvbnRzID0gMCkKIHsKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUgPSByZW5kZXJl
ci0+c3R5bGUoKTsKICAgICByZXR1cm4gZm9udC53aWR0aChSZW5kZXJCbG9jazo6Y29uc3RydWN0
VGV4dFJ1bihyZW5kZXJlciwgZm9udCwgc3R5bGUuaHlwaGVuU3RyaW5nKCkuc3RyaW5nKCksIHN0
eWxlKSwgZmFsbGJhY2tGb250cyk7CiB9CiAKLUFMV0FZU19JTkxJTkUgZmxvYXQgdGV4dFdpZHRo
KFJlbmRlclRleHQqIHRleHQsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgY29uc3QgRm9u
dENhc2NhZGUmIGZvbnQsIGZsb2F0IHhQb3MsIGJvb2wgaXNGaXhlZFBpdGNoLCBib29sIGNvbGxh
cHNlV2hpdGVTcGFjZSwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+JiBmYWxsYmFja0Zv
bnRzLCBUZXh0TGF5b3V0KiBsYXlvdXQgPSAwKQorQUxXQVlTX0lOTElORSBmbG9hdCB0ZXh0V2lk
dGgoUmVuZGVyVGV4dCogdGV4dCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBjb25zdCBG
b250Q2FzY2FkZSYgZm9udCwgZmxvYXQgeFBvcywgYm9vbCBpc0ZpeGVkUGl0Y2gsIGJvb2wgY29s
bGFwc2VXaGl0ZVNwYWNlLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiYgZmFsbGJhY2tGb250cywgVGV4
dExheW91dCogbGF5b3V0ID0gMCkKIHsKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUgPSB0
ZXh0LT5zdHlsZSgpOwogCkBAIC01NzgsNyArNTc4LDcgQEAgaW5saW5lIHZvaWQgdHJ5SHlwaGVu
YXRpbmcoUmVuZGVyVGV4dCogdAogICAgIEFTU0VSVChwb3MgLSBsYXN0U3BhY2UgLSBwcmVmaXhM
ZW5ndGggPj0gbWluaW11bVN1ZmZpeExlbmd0aCk7CiAKICNpZiAhQVNTRVJUX0RJU0FCTEVECi0g
ICAgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+IGZhbGxiYWNrRm9udHM7CisgICAgSGFz
aFNldDxjb25zdCBGb250Kj4gZmFsbGJhY2tGb250czsKICAgICBmbG9hdCBwcmVmaXhXaWR0aCA9
IGh5cGhlbldpZHRoICsgdGV4dFdpZHRoKHRleHQsIGxhc3RTcGFjZSwgcHJlZml4TGVuZ3RoLCBm
b250LCB4UG9zLCBpc0ZpeGVkUGl0Y2gsIGNvbGxhcHNlV2hpdGVTcGFjZSwgZmFsbGJhY2tGb250
cykgKyBsYXN0U3BhY2VXb3JkU3BhY2luZzsKICAgICBBU1NFUlQoeFBvcyArIHByZWZpeFdpZHRo
IDw9IGF2YWlsYWJsZVdpZHRoKTsKICNlbHNlCkBAIC02NTYsNyArNjU2LDcgQEAgaW5saW5lIGJv
b2wgQnJlYWtpbmdDb250ZXh0OjpoYW5kbGVUZXh0KAogCiAgICAgLy8gTm9uLXplcm8gb25seSB3
aGVuIGtlcm5pbmcgaXMgZW5hYmxlZCBhbmQgVGV4dExheW91dCBpc24ndCB1c2VkLCBpbiB3aGlj
aCBjYXNlIHdlIG1lYXN1cmUKICAgICAvLyB3b3JkcyB3aXRoIHRoZWlyIHRyYWlsaW5nIHNwYWNl
LCB0aGVuIHN1YnRyYWN0IGl0cyB3aWR0aC4KLSAgICBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnRE
YXRhKj4gZmFsbGJhY2tGb250czsKKyAgICBIYXNoU2V0PGNvbnN0IEZvbnQqPiBmYWxsYmFja0Zv
bnRzOwogICAgIGZsb2F0IHdvcmRUcmFpbGluZ1NwYWNlV2lkdGggPSAoZm9udC50eXBlc2V0dGlu
Z0ZlYXR1cmVzKCkgJiBLZXJuaW5nKSAmJiAhdGV4dExheW91dCA/IGZvbnQud2lkdGgoUmVuZGVy
QmxvY2s6OmNvbnN0cnVjdFRleHRSdW4oJnJlbmRlclRleHQsIGZvbnQsICZzcGFjZSwgMSwgc3R5
bGUpLCAmZmFsbGJhY2tGb250cykgKyB3b3JkU3BhY2luZyA6IDA7CiAKICAgICBVQ2hhciBsYXN0
Q2hhcmFjdGVyID0gbV9yZW5kZXJUZXh0SW5mby5tX2xpbmVCcmVha0l0ZXJhdG9yLmxhc3RDaGFy
YWN0ZXIoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0
aE1MT3BlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9t
YXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTMzMyw3ICsxMzMzLDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRv
cjo6cmVzZXRTdHJldGNoUwogCiBGbG9hdFJlY3QgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmJvdW5k
c0ZvckdseXBoKGNvbnN0IEdseXBoRGF0YSYgZGF0YSkgY29uc3QKIHsKLSAgICByZXR1cm4gZGF0
YS5mb250RGF0YS0+Ym91bmRzRm9yR2x5cGgoZGF0YS5nbHlwaCk7CisgICAgcmV0dXJuIGRhdGEu
Zm9udC0+Ym91bmRzRm9yR2x5cGgoZGF0YS5nbHlwaCk7CiB9CiAKIGZsb2F0IFJlbmRlck1hdGhN
TE9wZXJhdG9yOjpoZWlnaHRGb3JHbHlwaChjb25zdCBHbHlwaERhdGEmIGRhdGEpIGNvbnN0CkBA
IC0xMzQzLDcgKzEzNDMsNyBAQCBmbG9hdCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6aGVpZ2h0Rm9y
R2x5CiAKIGZsb2F0IFJlbmRlck1hdGhNTE9wZXJhdG9yOjphZHZhbmNlRm9yR2x5cGgoY29uc3Qg
R2x5cGhEYXRhJiBkYXRhKSBjb25zdAogewotICAgIHJldHVybiBkYXRhLmZvbnREYXRhLT53aWR0
aEZvckdseXBoKGRhdGEuZ2x5cGgpOworICAgIHJldHVybiBkYXRhLmZvbnQtPndpZHRoRm9yR2x5
cGgoZGF0YS5nbHlwaCk7CiB9CiAKIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmNvbXB1dGVQ
cmVmZXJyZWRMb2dpY2FsV2lkdGhzKCkKQEAgLTE1MjEsMTEgKzE1MjEsMTEgQEAgYm9vbCBSZW5k
ZXJNYXRoTUxPcGVyYXRvcjo6Z2V0R2x5cGhBc3NlbQogICAgIGlmICghYm90dG9tLmdseXBoKQog
ICAgICAgICBib3R0b20uZ2x5cGggPSBleHRlbnNpb24uZ2x5cGg7CiAKLSAgICB0b3AuZm9udERh
dGEgPSAmc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpOwotICAgIGV4dGVu
c2lvbi5mb250RGF0YSA9IHRvcC5mb250RGF0YTsKLSAgICBib3R0b20uZm9udERhdGEgPSB0b3Au
Zm9udERhdGE7CisgICAgdG9wLmZvbnQgPSAmc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlG
b250KCk7CisgICAgZXh0ZW5zaW9uLmZvbnQgPSB0b3AuZm9udDsKKyAgICBib3R0b20uZm9udCA9
IHRvcC5mb250OwogICAgIGlmIChtaWRkbGUuZ2x5cGgpCi0gICAgICAgIG1pZGRsZS5mb250RGF0
YSA9IHRvcC5mb250RGF0YTsKKyAgICAgICAgbWlkZGxlLmZvbnQgPSB0b3AuZm9udDsKIAogICAg
IHN0cmV0Y2h5RGF0YS5zZXRHbHlwaEFzc2VtYmx5TW9kZSh0b3AsIGV4dGVuc2lvbiwgYm90dG9t
LCBtaWRkbGUpOwogCkBAIC0xNTM4LDI0ICsxNTM4LDI0IEBAIFJlbmRlck1hdGhNTE9wZXJhdG9y
OjpTdHJldGNoeURhdGEgUmVuZGUKIAogICAgIEFTU0VSVChtX2lzVmVydGljYWwgJiYgaXNMYXJn
ZU9wZXJhdG9ySW5EaXNwbGF5U3R5bGUoKSk7CiAKLSAgICBjb25zdCBhdXRvJiBwcmltYXJ5Rm9u
dERhdGEgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCk7CisgICAgY29u
c3QgYXV0byYgcHJpbWFyeUZvbnQgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQo
KTsKICAgICBHbHlwaERhdGEgYmFzZUdseXBoID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpLmdseXBo
RGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIsICFzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rp
b24oKSk7Ci0gICAgaWYgKCFwcmltYXJ5Rm9udERhdGEubWF0aERhdGEoKSB8fCBiYXNlR2x5cGgu
Zm9udERhdGEgIT0gJnByaW1hcnlGb250RGF0YSkKKyAgICBpZiAoIXByaW1hcnlGb250Lm1hdGhE
YXRhKCkgfHwgYmFzZUdseXBoLmZvbnQgIT0gJnByaW1hcnlGb250KQogICAgICAgICByZXR1cm4g
ZGF0YTsKIAogICAgIFZlY3RvcjxHbHlwaD4gc2l6ZVZhcmlhbnRzOwogICAgIFZlY3RvcjxPcGVu
VHlwZU1hdGhEYXRhOjpBc3NlbWJseVBhcnQ+IGFzc2VtYmx5UGFydHM7CiAKICAgICAvLyBUaGUg
dmFsdWUgb2YgZGlzcGxheU9wZXJhdG9yTWluSGVpZ2h0IGlzIHNvbWV0aW1lcyB0b28gc21hbGws
IHNvIHdlIGVuc3VyZSB0aGF0IGl0IGlzIGF0IGxlYXN0IFxzcXJ0ezJ9IHRpbWVzIHRoZSBzaXpl
IG9mIHRoZSBiYXNlIGdseXBoLgotICAgIGZsb2F0IGRpc3BsYXlPcGVyYXRvck1pbkhlaWdodCA9
IHN0ZDo6bWF4KGJhc2VHbHlwaC5mb250RGF0YS0+Ym91bmRzRm9yR2x5cGgoYmFzZUdseXBoLmds
eXBoKS5oZWlnaHQoKSAqIHNxcnRPZlR3b0Zsb2F0LCBwcmltYXJ5Rm9udERhdGEubWF0aERhdGEo
KS0+Z2V0TWF0aENvbnN0YW50KHByaW1hcnlGb250RGF0YSwgT3BlblR5cGVNYXRoRGF0YTo6RGlz
cGxheU9wZXJhdG9yTWluSGVpZ2h0KSk7CisgICAgZmxvYXQgZGlzcGxheU9wZXJhdG9yTWluSGVp
Z2h0ID0gc3RkOjptYXgoYmFzZUdseXBoLmZvbnQtPmJvdW5kc0ZvckdseXBoKGJhc2VHbHlwaC5n
bHlwaCkuaGVpZ2h0KCkgKiBzcXJ0T2ZUd29GbG9hdCwgcHJpbWFyeUZvbnQubWF0aERhdGEoKS0+
Z2V0TWF0aENvbnN0YW50KHByaW1hcnlGb250LCBPcGVuVHlwZU1hdGhEYXRhOjpEaXNwbGF5T3Bl
cmF0b3JNaW5IZWlnaHQpKTsKIAotICAgIHByaW1hcnlGb250RGF0YS5tYXRoRGF0YSgpLT5nZXRN
YXRoVmFyaWFudHMoYmFzZUdseXBoLmdseXBoLCB0cnVlLCBzaXplVmFyaWFudHMsIGFzc2VtYmx5
UGFydHMpOworICAgIHByaW1hcnlGb250Lm1hdGhEYXRhKCktPmdldE1hdGhWYXJpYW50cyhiYXNl
R2x5cGguZ2x5cGgsIHRydWUsIHNpemVWYXJpYW50cywgYXNzZW1ibHlQYXJ0cyk7CiAKICAgICAv
LyBXZSBjaG9vc2UgdGhlIGZpcnN0IHNpemUgdmFyaWFudCB0aGF0IGlzIGxhcmdlciB0aGFuIHRo
ZSBleHBlY3RlZCBkaXNwbGF5T3BlcmF0b3JNaW5IZWlnaHQgYW5kIG90aGVyd2lzZSBmYWxsYmFj
ayB0byB0aGUgbGFyZ2VzdCB2YXJpYW50LgogICAgIGZvciAoYXV0byYgdmFyaWFudCA6IHNpemVW
YXJpYW50cykgewogICAgICAgICBHbHlwaERhdGEgc2l6ZVZhcmlhbnQ7CiAgICAgICAgIHNpemVW
YXJpYW50LmdseXBoID0gdmFyaWFudDsKLSAgICAgICAgc2l6ZVZhcmlhbnQuZm9udERhdGEgPSAm
cHJpbWFyeUZvbnREYXRhOworICAgICAgICBzaXplVmFyaWFudC5mb250ID0gJnByaW1hcnlGb250
OwogICAgICAgICBkYXRhLnNldFNpemVWYXJpYW50TW9kZShzaXplVmFyaWFudCk7CiAgICAgICAg
IGlmIChib3VuZHNGb3JHbHlwaChzaXplVmFyaWFudCkuaGVpZ2h0KCkgPj0gZGlzcGxheU9wZXJh
dG9yTWluSGVpZ2h0KQogICAgICAgICAgICAgcmV0dXJuIGRhdGE7CkBAIC0xNTcwLDE4ICsxNTcw
LDE4IEBAIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpTdHJldGNoeURhdGEgUmVuZGUKICAgICBTdHJl
dGNoeURhdGEgZGF0YTsKICAgICBTdHJldGNoeURhdGEgYXNzZW1ibHlEYXRhOwogCi0gICAgY29u
c3QgYXV0byYgcHJpbWFyeUZvbnREYXRhID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlG
b250RGF0YSgpOworICAgIGNvbnN0IGF1dG8mIHByaW1hcnlGb250ID0gc3R5bGUoKS5mb250Q2Fz
Y2FkZSgpLnByaW1hcnlGb250KCk7CiAgICAgR2x5cGhEYXRhIGJhc2VHbHlwaCA9IHN0eWxlKCku
Zm9udENhc2NhZGUoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyLCAhc3R5bGUoKS5p
c0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpOwogICAgIAotICAgIGlmIChwcmltYXJ5Rm9udERhdGEu
bWF0aERhdGEoKSAmJiBiYXNlR2x5cGguZm9udERhdGEgPT0gJnByaW1hcnlGb250RGF0YSkgewor
ICAgIGlmIChwcmltYXJ5Rm9udC5tYXRoRGF0YSgpICYmIGJhc2VHbHlwaC5mb250ID09ICZwcmlt
YXJ5Rm9udCkgewogICAgICAgICBWZWN0b3I8R2x5cGg+IHNpemVWYXJpYW50czsKICAgICAgICAg
VmVjdG9yPE9wZW5UeXBlTWF0aERhdGE6OkFzc2VtYmx5UGFydD4gYXNzZW1ibHlQYXJ0czsKLSAg
ICAgICAgcHJpbWFyeUZvbnREYXRhLm1hdGhEYXRhKCktPmdldE1hdGhWYXJpYW50cyhiYXNlR2x5
cGguZ2x5cGgsIG1faXNWZXJ0aWNhbCwgc2l6ZVZhcmlhbnRzLCBhc3NlbWJseVBhcnRzKTsKKyAg
ICAgICAgcHJpbWFyeUZvbnQubWF0aERhdGEoKS0+Z2V0TWF0aFZhcmlhbnRzKGJhc2VHbHlwaC5n
bHlwaCwgbV9pc1ZlcnRpY2FsLCBzaXplVmFyaWFudHMsIGFzc2VtYmx5UGFydHMpOwogICAgICAg
ICAvLyBXZSB2ZXJpZnkgdGhlIHNpemUgdmFyaWFudHMuCiAgICAgICAgIGZvciAoYXV0byYgdmFy
aWFudCA6IHNpemVWYXJpYW50cykgewogICAgICAgICAgICAgR2x5cGhEYXRhIHNpemVWYXJpYW50
OwogICAgICAgICAgICAgc2l6ZVZhcmlhbnQuZ2x5cGggPSB2YXJpYW50OwotICAgICAgICAgICAg
c2l6ZVZhcmlhbnQuZm9udERhdGEgPSAmcHJpbWFyeUZvbnREYXRhOworICAgICAgICAgICAgc2l6
ZVZhcmlhbnQuZm9udCA9ICZwcmltYXJ5Rm9udDsKICAgICAgICAgICAgIGlmIChtYXhpbXVtR2x5
cGhXaWR0aCkKICAgICAgICAgICAgICAgICAqbWF4aW11bUdseXBoV2lkdGggPSBzdGQ6Om1heCgq
bWF4aW11bUdseXBoV2lkdGgsIGFkdmFuY2VGb3JHbHlwaChzaXplVmFyaWFudCkpOwogICAgICAg
ICAgICAgZWxzZSB7CkBAIC0xODAxLDggKzE4MDEsOCBAQCBMYXlvdXRSZWN0IFJlbmRlck1hdGhN
TE9wZXJhdG9yOjpwYWludEdsCiAgICAgaW5mby5jb250ZXh0LT5jbGlwKGNsaXBCb3VuZHMpOwog
CiAgICAgR2x5cGhCdWZmZXIgYnVmZmVyOwotICAgIGJ1ZmZlci5hZGQoZGF0YS5nbHlwaCwgZGF0
YS5mb250RGF0YSwgYWR2YW5jZUZvckdseXBoKGRhdGEpKTsKLSAgICBpbmZvLmNvbnRleHQtPmRy
YXdHbHlwaHMoc3R5bGUoKS5mb250Q2FzY2FkZSgpLCAqZGF0YS5mb250RGF0YSwgYnVmZmVyLCAw
LCAxLCBvcmlnaW4pOworICAgIGJ1ZmZlci5hZGQoZGF0YS5nbHlwaCwgZGF0YS5mb250LCBhZHZh
bmNlRm9yR2x5cGgoZGF0YSkpOworICAgIGluZm8uY29udGV4dC0+ZHJhd0dseXBocyhzdHlsZSgp
LmZvbnRDYXNjYWRlKCksICpkYXRhLmZvbnQsIGJ1ZmZlciwgMCwgMSwgb3JpZ2luKTsKIAogICAg
IHJldHVybiBnbHlwaFBhaW50UmVjdDsKIH0KQEAgLTE4OTQsMTEgKzE4OTQsMTEgQEAgdm9pZCBS
ZW5kZXJNYXRoTUxPcGVyYXRvcjo6cGFpbnQoUGFpbnRJbgogICAgIGlmIChtX3N0cmV0Y2h5RGF0
YS5tb2RlKCkgPT0gRHJhd1NpemVWYXJpYW50KSB7CiAgICAgICAgIEFTU0VSVChtX3N0cmV0Y2h5
RGF0YS52YXJpYW50KCkuZ2x5cGgpOwogICAgICAgICBHbHlwaEJ1ZmZlciBidWZmZXI7Ci0gICAg
ICAgIGJ1ZmZlci5hZGQobV9zdHJldGNoeURhdGEudmFyaWFudCgpLmdseXBoLCBtX3N0cmV0Y2h5
RGF0YS52YXJpYW50KCkuZm9udERhdGEsIGFkdmFuY2VGb3JHbHlwaChtX3N0cmV0Y2h5RGF0YS52
YXJpYW50KCkpKTsKKyAgICAgICAgYnVmZmVyLmFkZChtX3N0cmV0Y2h5RGF0YS52YXJpYW50KCku
Z2x5cGgsIG1fc3RyZXRjaHlEYXRhLnZhcmlhbnQoKS5mb250LCBhZHZhbmNlRm9yR2x5cGgobV9z
dHJldGNoeURhdGEudmFyaWFudCgpKSk7CiAgICAgICAgIExheW91dFBvaW50IG9wZXJhdG9yVG9w
TGVmdCA9IGNlaWxlZEludFBvaW50KHBhaW50T2Zmc2V0ICsgbG9jYXRpb24oKSk7CiAgICAgICAg
IEZsb2F0UmVjdCBnbHlwaEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1fc3RyZXRjaHlEYXRhLnZh
cmlhbnQoKSk7CiAgICAgICAgIExheW91dFBvaW50IG9wZXJhdG9yT3JpZ2luKG9wZXJhdG9yVG9w
TGVmdC54KCksIG9wZXJhdG9yVG9wTGVmdC55KCkgLSBnbHlwaEJvdW5kcy55KCkpOwotICAgICAg
ICBpbmZvLmNvbnRleHQtPmRyYXdHbHlwaHMoc3R5bGUoKS5mb250Q2FzY2FkZSgpLCAqbV9zdHJl
dGNoeURhdGEudmFyaWFudCgpLmZvbnREYXRhLCBidWZmZXIsIDAsIDEsIG9wZXJhdG9yT3JpZ2lu
KTsKKyAgICAgICAgaW5mby5jb250ZXh0LT5kcmF3R2x5cGhzKHN0eWxlKCkuZm9udENhc2NhZGUo
KSwgKm1fc3RyZXRjaHlEYXRhLnZhcmlhbnQoKS5mb250LCBidWZmZXIsIDAsIDEsIG9wZXJhdG9y
T3JpZ2luKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTk4MCw4ICsxOTgwLDggQEAg
dm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6cGFpbnRDaGlsZHJlbgogCiBMYXlvdXRVbml0IFJl
bmRlck1hdGhNTE9wZXJhdG9yOjp0cmFpbGluZ1NwYWNlRXJyb3IoKQogewotICAgIGNvbnN0IGF1
dG8mIHByaW1hcnlGb250RGF0YSA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERh
dGEoKTsKLSAgICBpZiAoIXByaW1hcnlGb250RGF0YS5tYXRoRGF0YSgpKQorICAgIGNvbnN0IGF1
dG8mIHByaW1hcnlGb250ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCk7Cisg
ICAgaWYgKCFwcmltYXJ5Rm9udC5tYXRoRGF0YSgpKQogICAgICAgICByZXR1cm4gMDsKIAogICAg
IC8vIEZvciBPcGVuVHlwZSBNQVRIIGZvbnQsIHRoZSBsYXlvdXQgaXMgYmFzZWQgb24gUmVuZGVy
TWF0aE9wZXJhdG9yIGZvciB3aGljaCB0aGUgcHJlZmVycmVkIHdpZHRoIGlzIHNvbWV0aW1lcyBv
dmVyZXN0aW1hdGVkIChidWcgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEzMDMyNikuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1h
dGhNTE9wZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21h
dGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5oCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDExICsyOCwxMSBAQAogCiAjaWYgRU5BQkxFKE1BVEhNTCkKIAorI2luY2x1
ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJHbHlwaFBhZ2UuaCIKICNpbmNsdWRlICJNYXRoTUxFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiT3BlblR5cGVNYXRoRGF0YS5oIgogI2luY2x1ZGUgIlJlbmRlck1h
dGhNTFRva2VuLmgiCi0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1h
dGhNTFJhZGljYWxPcGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSYWRpY2FsT3BlcmF0b3IuY3BwCShyZXZpc2lvbiAx
Nzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJh
ZGljYWxPcGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgUmVuZGVy
TWF0aE1MUmFkaWNhbE9wZXJhdG9yOjpSZW5kZXJNYXRoTQogCiB2b2lkIFJlbmRlck1hdGhNTFJh
ZGljYWxPcGVyYXRvcjo6c3RyZXRjaFRvKExheW91dFVuaXQgaGVpZ2h0QWJvdmVCYXNlbGluZSwg
TGF5b3V0VW5pdCBkZXB0aEJlbG93QmFzZWxpbmUpCiB7Ci0gICAgaWYgKCFzdHlsZSgpLmZvbnRD
YXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkubWF0aERhdGEoKSkgeworICAgIGlmICghc3R5bGUo
KS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCkubWF0aERhdGEoKSkgewogICAgICAgICAvLyBJ
ZiB3ZSBkbyBub3QgaGF2ZSBhbiBPcGVuVHlwZSBNQVRIIGZvbnQsIHdlIGFsd2F5cyBtYWtlIHRo
ZSByYWRpY2FsIGRlcHRoIGEgYml0IGxhcmdlciB0aGFuIHRoZSB0YXJnZXQuCiAgICAgICAgIGRl
cHRoQmVsb3dCYXNlbGluZSArPSBnUmFkaWNhbEJvdHRvbVBvaW50TG93ZXI7CiAgICAgfQpAQCAt
ODMsNyArODMsNyBAQCB2b2lkIFJlbmRlck1hdGhNTFJhZGljYWxPcGVyYXRvcjo6Y29tcHV0CiB7
CiAgICAgQVNTRVJUKHByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eSgpKTsKIAotICAgIGlmIChz
dHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkubWF0aERhdGEoKSkgeworICAg
IGlmIChzdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKS5tYXRoRGF0YSgpKSB7CiAg
ICAgICAgIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRo
cygpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtOTYsNyArOTYsNyBAQCB2b2lkIFJlbmRl
ck1hdGhNTFJhZGljYWxPcGVyYXRvcjo6Y29tcHV0CiAKIHZvaWQgUmVuZGVyTWF0aE1MUmFkaWNh
bE9wZXJhdG9yOjpjb21wdXRlTG9naWNhbEhlaWdodChMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQs
IExheW91dFVuaXQgbG9naWNhbFRvcCwgTG9naWNhbEV4dGVudENvbXB1dGVkVmFsdWVzJiBjb21w
dXRlZFZhbHVlcykgY29uc3QKIHsKLSAgICBpZiAoc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1h
cnlGb250RGF0YSgpLm1hdGhEYXRhKCkpIHsKKyAgICBpZiAoc3R5bGUoKS5mb250Q2FzY2FkZSgp
LnByaW1hcnlGb250KCkubWF0aERhdGEoKSkgewogICAgICAgICBSZW5kZXJNYXRoTUxPcGVyYXRv
cjo6Y29tcHV0ZUxvZ2ljYWxIZWlnaHQobG9naWNhbEhlaWdodCwgbG9naWNhbFRvcCwgY29tcHV0
ZWRWYWx1ZXMpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTExLDcgKzExMSw3IEBAIHZv
aWQgUmVuZGVyTWF0aE1MUmFkaWNhbE9wZXJhdG9yOjpwYWludCgKICAgICBpZiAoaW5mby5jb250
ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkgfHwgaW5mby5waGFzZSAhPSBQYWludFBoYXNlRm9yZWdy
b3VuZCB8fCBzdHlsZSgpLnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKQogICAgICAgICByZXR1cm47
CiAKLSAgICBpZiAoc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLm1hdGhE
YXRhKCkpIHsKKyAgICBpZiAoc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCkubWF0
aERhdGEoKSkgewogICAgICAgICBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6cGFpbnQoaW5mbywgcGFp
bnRPZmZzZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvb3QuY3BwCShyZXZpc2lv
biAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhN
TFJvb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDgsMTcgKzIwOCwxNyBAQCB2b2lkIFJlbmRl
ck1hdGhNTFJvb3Q6OnVwZGF0ZVN0eWxlKCkKICAgICBMYXlvdXRVbml0IGtlcm5BZnRlckRlZ3Jl
ZSA9IC0xMCAqIHN0eWxlKCkuZm9udENhc2NhZGUoKS5zaXplKCkgLyAxODsKICAgICBtX2RlZ3Jl
ZUJvdHRvbVJhaXNlUGVyY2VudCA9IDAuNmY7CiAKLSAgICBjb25zdCBhdXRvJiBwcmltYXJ5Rm9u
dERhdGEgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCk7Ci0gICAgaWYg
KGF1dG8qIG1hdGhEYXRhID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgp
Lm1hdGhEYXRhKCkpIHsKKyAgICBjb25zdCBhdXRvJiBwcmltYXJ5Rm9udCA9IHN0eWxlKCkuZm9u
dENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpOworICAgIGlmIChhdXRvKiBtYXRoRGF0YSA9IHN0eWxl
KCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpLm1hdGhEYXRhKCkpIHsKICAgICAgICAgLy8g
RklYTUU6IG1fdmVydGljYWxHYXAgc2hvdWxkIHVzZSBSYWRpY2FsRGlzcGxheVN0eWxlVmVydGlj
YWwgaW4gZGlzcGxheSBtb2RlIChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTE4NzM3KS4KLSAgICAgICAgbV92ZXJ0aWNhbEdhcCA9IG1hdGhEYXRhLT5nZXRNYXRoQ29u
c3RhbnQocHJpbWFyeUZvbnREYXRhLCBPcGVuVHlwZU1hdGhEYXRhOjpSYWRpY2FsVmVydGljYWxH
YXApOwotICAgICAgICBtX3J1bGVUaGlja25lc3MgPSBtYXRoRGF0YS0+Z2V0TWF0aENvbnN0YW50
KHByaW1hcnlGb250RGF0YSwgT3BlblR5cGVNYXRoRGF0YTo6UmFkaWNhbFJ1bGVUaGlja25lc3Mp
OwotICAgICAgICBtX2V4dHJhQXNjZW5kZXIgPSBtYXRoRGF0YS0+Z2V0TWF0aENvbnN0YW50KHBy
aW1hcnlGb250RGF0YSwgT3BlblR5cGVNYXRoRGF0YTo6UmFkaWNhbEV4dHJhQXNjZW5kZXIpOwor
ICAgICAgICBtX3ZlcnRpY2FsR2FwID0gbWF0aERhdGEtPmdldE1hdGhDb25zdGFudChwcmltYXJ5
Rm9udCwgT3BlblR5cGVNYXRoRGF0YTo6UmFkaWNhbFZlcnRpY2FsR2FwKTsKKyAgICAgICAgbV9y
dWxlVGhpY2tuZXNzID0gbWF0aERhdGEtPmdldE1hdGhDb25zdGFudChwcmltYXJ5Rm9udCwgT3Bl
blR5cGVNYXRoRGF0YTo6UmFkaWNhbFJ1bGVUaGlja25lc3MpOworICAgICAgICBtX2V4dHJhQXNj
ZW5kZXIgPSBtYXRoRGF0YS0+Z2V0TWF0aENvbnN0YW50KHByaW1hcnlGb250LCBPcGVuVHlwZU1h
dGhEYXRhOjpSYWRpY2FsRXh0cmFBc2NlbmRlcik7CiAKICAgICAgICAgaWYgKCFpc1JlbmRlck1h
dGhNTFNxdWFyZVJvb3QoKSkgewotICAgICAgICAgICAga2VybkJlZm9yZURlZ3JlZSA9IG1hdGhE
YXRhLT5nZXRNYXRoQ29uc3RhbnQocHJpbWFyeUZvbnREYXRhLCBPcGVuVHlwZU1hdGhEYXRhOjpS
YWRpY2FsS2VybkJlZm9yZURlZ3JlZSk7Ci0gICAgICAgICAgICBrZXJuQWZ0ZXJEZWdyZWUgPSBt
YXRoRGF0YS0+Z2V0TWF0aENvbnN0YW50KHByaW1hcnlGb250RGF0YSwgT3BlblR5cGVNYXRoRGF0
YTo6UmFkaWNhbEtlcm5BZnRlckRlZ3JlZSk7Ci0gICAgICAgICAgICBtX2RlZ3JlZUJvdHRvbVJh
aXNlUGVyY2VudCA9IG1hdGhEYXRhLT5nZXRNYXRoQ29uc3RhbnQocHJpbWFyeUZvbnREYXRhLCBP
cGVuVHlwZU1hdGhEYXRhOjpSYWRpY2FsRGVncmVlQm90dG9tUmFpc2VQZXJjZW50KTsKKyAgICAg
ICAgICAgIGtlcm5CZWZvcmVEZWdyZWUgPSBtYXRoRGF0YS0+Z2V0TWF0aENvbnN0YW50KHByaW1h
cnlGb250LCBPcGVuVHlwZU1hdGhEYXRhOjpSYWRpY2FsS2VybkJlZm9yZURlZ3JlZSk7CisgICAg
ICAgICAgICBrZXJuQWZ0ZXJEZWdyZWUgPSBtYXRoRGF0YS0+Z2V0TWF0aENvbnN0YW50KHByaW1h
cnlGb250LCBPcGVuVHlwZU1hdGhEYXRhOjpSYWRpY2FsS2VybkFmdGVyRGVncmVlKTsKKyAgICAg
ICAgICAgIG1fZGVncmVlQm90dG9tUmFpc2VQZXJjZW50ID0gbWF0aERhdGEtPmdldE1hdGhDb25z
dGFudChwcmltYXJ5Rm9udCwgT3BlblR5cGVNYXRoRGF0YTo6UmFkaWNhbERlZ3JlZUJvdHRvbVJh
aXNlUGVyY2VudCk7CiAgICAgICAgIH0KICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTE4NCw3ICsxMTg0LDcgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBSZW5kZXJTdHls
ZTo6aHlwaGVuUwogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBkZXBlbmQgb24gbG9jYWxlLgog
ICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIGh5cGhlbk1p
bnVzU3RyaW5nLCAoJmh5cGhlbk1pbnVzLCAxKSk7CiAgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RB
VElDX0xPQ0FMKEF0b21pY1N0cmluZywgaHlwaGVuU3RyaW5nLCAoJmh5cGhlbiwgMSkpOwotICAg
IHJldHVybiBmb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmdseXBoRm9yQ2hhcmFjdGVy
KGh5cGhlbikgPyBoeXBoZW5TdHJpbmcgOiBoeXBoZW5NaW51c1N0cmluZzsKKyAgICByZXR1cm4g
Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpLmdseXBoRm9yQ2hhcmFjdGVyKGh5cGhlbikgPyBo
eXBoZW5TdHJpbmcgOiBoeXBoZW5NaW51c1N0cmluZzsKIH0KIAogY29uc3QgQXRvbWljU3RyaW5n
JiBSZW5kZXJTdHlsZTo6dGV4dEVtcGhhc2lzTWFya1N0cmluZygpIGNvbnN0CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAJKHJldmlzaW9u
IDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJSZW5kZXJTVkdU
ZXh0LmgiCiAKICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRlICJGb250LmgiCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlcXVlc3QuaCIKICNp
bmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCkBAIC00NSw3ICs0Niw2IEBACiAjaW5jbHVkZSAiU1ZH
VGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuaCIKICNpbmNsdWRlICJTVkdUcmFuc2Zvcm1MaXN0Lmgi
CiAjaW5jbHVkZSAiU1ZHVVJJUmVmZXJlbmNlLmgiCi0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEu
aCIKICNpbmNsdWRlICJUcmFuc2Zvcm1TdGF0ZS5oIgogI2luY2x1ZGUgIlZpc2libGVQb3NpdGlv
bi5oIgogI2luY2x1ZGUgPHd0Zi9TdGFja1N0YXRzLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAJKHJldmlzaW9uIDE3ODg1
NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQxOSw3ICs0MTksNyBAQCBUZXh0UnVuIFNWR0lubGluZVRleHRC
b3g6OmNvbnN0cnVjdFRleHRSCiAgICAgICAgICAgICAgICAgLCBkaXJlY3Rpb24oKQogICAgICAg
ICAgICAgICAgICwgZGlyT3ZlcnJpZGUoKSB8fCBzdHlsZS0+cnRsT3JkZXJpbmcoKSA9PSBWaXN1
YWxPcmRlciAvKiBkaXJlY3Rpb25hbE92ZXJyaWRlICovKTsKIAotICAgIGlmIChzdHlsZS0+Zm9u
dENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5pc1NWR0ZvbnQoKSkKKyAgICBpZiAoc3R5bGUt
PmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKS5pc1NWR0ZvbnQoKSkKICAgICAgICAgcnVuLnNl
dFJlbmRlcmluZ0NvbnRleHQoU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZShyZW5k
ZXJlcigpKSk7CiAKICAgICBydW4uZGlzYWJsZVJvdW5kaW5nSGFja3MoKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVu
Z2luZVNwYWNpbmcuY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDEsMTYgKzQxLDE2IEBAIFNWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nOjpTVkdUZXh0TGF5
b3UKIGZsb2F0IFNWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nOjpjYWxjdWxhdGVTVkdLZXJuaW5n
KGJvb2wgaXNWZXJ0aWNhbFRleHQsIGNvbnN0IFNWR1RleHRNZXRyaWNzOjpHbHlwaCYgY3VycmVu
dEdseXBoKQogewogI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0gICAgY29uc3QgU2ltcGxlRm9udERh
dGEmIGZvbnREYXRhID0gbV9mb250LnByaW1hcnlGb250RGF0YSgpOwotICAgIGlmICghZm9udERh
dGEuaXNTVkdGb250KCkpIHsKKyAgICBjb25zdCBGb250JiBmb250ID0gbV9mb250LnByaW1hcnlG
b250KCk7CisgICAgaWYgKCFmb250LmlzU1ZHRm9udCgpKSB7CiAgICAgICAgIG1fbGFzdEdseXBo
LmlzVmFsaWQgPSBmYWxzZTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgQVNTRVJU
KGZvbnREYXRhLmlzQ3VzdG9tRm9udCgpKTsKLSAgICBBU1NFUlQoZm9udERhdGEuaXNTVkdGb250
KCkpOworICAgIEFTU0VSVChmb250LmlzQ3VzdG9tRm9udCgpKTsKKyAgICBBU1NFUlQoZm9udC5p
c1NWR0ZvbnQoKSk7CiAKLSAgICBhdXRvKiBzdmdGb250RGF0YSA9IHN0YXRpY19jYXN0PGNvbnN0
IFNWR0ZvbnREYXRhKj4oZm9udERhdGEuc3ZnRGF0YSgpKTsKKyAgICBhdXRvKiBzdmdGb250RGF0
YSA9IHN0YXRpY19jYXN0PGNvbnN0IFNWR0ZvbnREYXRhKj4oZm9udC5zdmdEYXRhKCkpOwogICAg
IFNWR0ZvbnRGYWNlRWxlbWVudCogc3ZnRm9udEZhY2UgPSBzdmdGb250RGF0YS0+c3ZnRm9udEZh
Y2VFbGVtZW50KCk7CiAgICAgQVNTRVJUKHN2Z0ZvbnRGYWNlKTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljcy5jcHAJKHJldmlzaW9uIDE3
ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3MuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03MCw3ICs3MCw3IEBAIFRleHRSdW4gU1ZHVGV4dE1ldHJpY3M6
OmNvbnN0cnVjdFRleHRSdW4KICAgICAgICAgICAgICAgICAsIHN0eWxlLmRpcmVjdGlvbigpCiAg
ICAgICAgICAgICAgICAgLCBpc092ZXJyaWRlKHN0eWxlLnVuaWNvZGVCaWRpKCkpIC8qIGRpcmVj
dGlvbmFsT3ZlcnJpZGUgKi8pOwogCi0gICAgaWYgKHN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFy
eUZvbnREYXRhKCkuaXNTVkdGb250KCkpCisgICAgaWYgKHN0eWxlLmZvbnRDYXNjYWRlKCkucHJp
bWFyeUZvbnQoKS5pc1NWR0ZvbnQoKSkKICAgICAgICAgcnVuLnNldFJlbmRlcmluZ0NvbnRleHQo
U1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZSh0ZXh0KSk7CiAKICAgICBydW4uZGlz
YWJsZVJvdW5kaW5nSGFja3MoKTsKQEAgLTkxLDcgKzkxLDcgQEAgU1ZHVGV4dE1ldHJpY3MgU1ZH
VGV4dE1ldHJpY3M6Om1lYXN1cmVDaAogCiBTVkdUZXh0TWV0cmljczo6U1ZHVGV4dE1ldHJpY3Mo
UmVuZGVyU1ZHSW5saW5lVGV4dCYgdGV4dCwgdW5zaWduZWQgcG9zaXRpb24sIHVuc2lnbmVkIGxl
bmd0aCwgZmxvYXQgd2lkdGgsIGNvbnN0IFN0cmluZyYgZ2x5cGhOYW1lKQogewotICAgIGJvb2wg
bmVlZHNDb250ZXh0ID0gdGV4dC5zdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRh
KCkuaXNTVkdGb250KCk7CisgICAgYm9vbCBuZWVkc0NvbnRleHQgPSB0ZXh0LnN0eWxlKCkuZm9u
dENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpLmlzU1ZHRm9udCgpOwogICAgIGZsb2F0IHNjYWxpbmdG
YWN0b3IgPSB0ZXh0LnNjYWxpbmdGYWN0b3IoKTsKICAgICBBU1NFUlQoc2NhbGluZ0ZhY3Rvcik7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmlu
Z0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzcsMTggKzM3LDE4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotc3RhdGljIGlubGluZSBjb25zdCBTVkdGb250RGF0YSogc3ZnRm9udEFuZEZvbnRGYWNlRWxl
bWVudEZvckZvbnREYXRhKGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwgU1ZHRm9udEZh
Y2VFbGVtZW50KiYgZm9udEZhY2UsIFNWR0ZvbnRFbGVtZW50KiYgZm9udCkKK3N0YXRpYyBpbmxp
bmUgY29uc3QgU1ZHRm9udERhdGEqIHN2Z0ZvbnRBbmRGb250RmFjZUVsZW1lbnRGb3JGb250RGF0
YShjb25zdCBGb250KiBmb250LCBTVkdGb250RmFjZUVsZW1lbnQqJiBzdmdGb250RmFjZUVsZW1l
bnQsIFNWR0ZvbnRFbGVtZW50KiYgc3ZnRm9udEVsZW1lbnQpCiB7Ci0gICAgQVNTRVJUKGZvbnRE
YXRhKTsKLSAgICBBU1NFUlQoZm9udERhdGEtPmlzQ3VzdG9tRm9udCgpKTsKLSAgICBBU1NFUlQo
Zm9udERhdGEtPmlzU1ZHRm9udCgpKTsKKyAgICBBU1NFUlQoZm9udCk7CisgICAgQVNTRVJUKGZv
bnQtPmlzQ3VzdG9tRm9udCgpKTsKKyAgICBBU1NFUlQoZm9udC0+aXNTVkdGb250KCkpOwogCi0g
ICAgYXV0byogc3ZnRm9udERhdGEgPSBzdGF0aWNfY2FzdDxjb25zdCBTVkdGb250RGF0YSo+KGZv
bnREYXRhLT5zdmdEYXRhKCkpOworICAgIGF1dG8qIHN2Z0ZvbnREYXRhID0gc3RhdGljX2Nhc3Q8
Y29uc3QgU1ZHRm9udERhdGEqPihmb250LT5zdmdEYXRhKCkpOwogCi0gICAgZm9udEZhY2UgPSBz
dmdGb250RGF0YS0+c3ZnRm9udEZhY2VFbGVtZW50KCk7Ci0gICAgQVNTRVJUKGZvbnRGYWNlKTsK
KyAgICBzdmdGb250RmFjZUVsZW1lbnQgPSBzdmdGb250RGF0YS0+c3ZnRm9udEZhY2VFbGVtZW50
KCk7CisgICAgQVNTRVJUKHN2Z0ZvbnRGYWNlRWxlbWVudCk7CiAKLSAgICBmb250ID0gZm9udEZh
Y2UtPmFzc29jaWF0ZWRGb250RWxlbWVudCgpOworICAgIHN2Z0ZvbnRFbGVtZW50ID0gc3ZnRm9u
dEZhY2VFbGVtZW50LT5hc3NvY2lhdGVkRm9udEVsZW1lbnQoKTsKICAgICByZXR1cm4gc3ZnRm9u
dERhdGE7CiB9CiAKQEAgLTYxLDIxICs2MSwyMSBAQCBmbG9hdCBTVkdUZXh0UnVuUmVuZGVyaW5n
Q29udGV4dDo6ZmxvYXRXCiAgICAgcmV0dXJuIGl0LnJ1bldpZHRoU29GYXIoKTsKIH0KIAotYm9v
bCBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6YXBwbHlTVkdLZXJuaW5nKGNvbnN0IFNpbXBs
ZUZvbnREYXRhKiBmb250RGF0YSwgV2lkdGhJdGVyYXRvciYgaXRlcmF0b3IsIEdseXBoQnVmZmVy
KiBnbHlwaEJ1ZmZlciwgaW50IGZyb20pIGNvbnN0Citib29sIFNWR1RleHRSdW5SZW5kZXJpbmdD
b250ZXh0OjphcHBseVNWR0tlcm5pbmcoY29uc3QgRm9udCogZm9udCwgV2lkdGhJdGVyYXRvciYg
aXRlcmF0b3IsIEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZlciwgaW50IGZyb20pIGNvbnN0CiB7CiAg
ICAgQVNTRVJUKGdseXBoQnVmZmVyKTsKICAgICBBU1NFUlQoZ2x5cGhCdWZmZXItPnNpemUoKSA+
IDEpOwogICAgIFNWR0ZvbnRFbGVtZW50KiBmb250RWxlbWVudCA9IDA7CiAgICAgU1ZHRm9udEZh
Y2VFbGVtZW50KiBmb250RmFjZUVsZW1lbnQgPSAwOwogCi0gICAgc3ZnRm9udEFuZEZvbnRGYWNl
RWxlbWVudEZvckZvbnREYXRhKGZvbnREYXRhLCBmb250RmFjZUVsZW1lbnQsIGZvbnRFbGVtZW50
KTsKKyAgICBzdmdGb250QW5kRm9udEZhY2VFbGVtZW50Rm9yRm9udERhdGEoZm9udCwgZm9udEZh
Y2VFbGVtZW50LCBmb250RWxlbWVudCk7CiAgICAgaWYgKCFmb250RWxlbWVudCB8fCAhZm9udEZh
Y2VFbGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoZm9udEVsZW1lbnQt
Pmhvcml6b250YWxLZXJuaW5nTWFwSXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAot
ICAgIGZsb2F0IHNjYWxlID0gc2NhbGVFbVRvVW5pdHMoZm9udERhdGEtPnBsYXRmb3JtRGF0YSgp
LnNpemUoKSwgZm9udEZhY2VFbGVtZW50LT51bml0c1BlckVtKCkpOworICAgIGZsb2F0IHNjYWxl
ID0gc2NhbGVFbVRvVW5pdHMoZm9udC0+cGxhdGZvcm1EYXRhKCkuc2l6ZSgpLCBmb250RmFjZUVs
ZW1lbnQtPnVuaXRzUGVyRW0oKSk7CiAKICAgICBTdHJpbmcgbGFzdEdseXBoTmFtZTsKICAgICBT
dHJpbmcgbGFzdFVuaWNvZGVTdHJpbmc7CkBAIC0yMDUsNyArMjA1LDcgQEAgdm9pZCBTVkdHbHlw
aFRvUGF0aFRyYW5zbGF0b3I6OmFkdmFuY2UoKQogICAgICAgICB9CiAKICAgICAgICAgKyttX2lu
ZGV4OwotICAgICAgICBpZiAobV9pbmRleCA+PSBtX3N0b3BwaW5nUG9pbnQgfHwgIW1fZ2x5cGhC
dWZmZXIuZm9udERhdGFBdChtX2luZGV4KS0+aXNTVkdGb250KCkpCisgICAgICAgIGlmIChtX2lu
ZGV4ID49IG1fc3RvcHBpbmdQb2ludCB8fCAhbV9nbHlwaEJ1ZmZlci5mb250QXQobV9pbmRleCkt
PmlzU1ZHRm9udCgpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIG1fZ2x5cGggPSBtX2ds
eXBoQnVmZmVyLmdseXBoQXQobV9pbmRleCk7CiAgICAgICAgIGlmICghbV9nbHlwaCkKQEAgLTI0
NCwxMiArMjQ0LDEyIEBAIGNsYXNzIER1bW15R2x5cGhUb1BhdGhUcmFuc2xhdG9yIGZpbmFsIDoK
ICAgICB9CiB9OwogCi1zdGQ6OnVuaXF1ZV9wdHI8R2x5cGhUb1BhdGhUcmFuc2xhdG9yPiBTVkdU
ZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlR2x5cGhUb1BhdGhUcmFuc2xhdG9yKGNvbnN0
IFNpbXBsZUZvbnREYXRhJiBmb250RGF0YSwgY29uc3QgVGV4dFJ1biogdGV4dFJ1biwgY29uc3Qg
R2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0CitzdGQ6OnVuaXF1ZV9wdHI8R2x5cGhUb1BhdGhUcmFu
c2xhdG9yPiBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlR2x5cGhUb1BhdGhUcmFu
c2xhdG9yKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFRleHRSdW4qIHRleHRSdW4sIGNvbnN0IEds
eXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50KSBjb25zdAogewogICAgIFNWR0ZvbnRFbGVtZW50KiBmb250RWxlbWVu
dCA9IG51bGxwdHI7CiAgICAgU1ZHRm9udEZhY2VFbGVtZW50KiBmb250RmFjZUVsZW1lbnQgPSBu
dWxscHRyOwogCi0gICAgY29uc3QgU1ZHRm9udERhdGEqIHN2Z0ZvbnREYXRhID0gc3ZnRm9udEFu
ZEZvbnRGYWNlRWxlbWVudEZvckZvbnREYXRhKCZmb250RGF0YSwgZm9udEZhY2VFbGVtZW50LCBm
b250RWxlbWVudCk7CisgICAgY29uc3QgU1ZHRm9udERhdGEqIHN2Z0ZvbnREYXRhID0gc3ZnRm9u
dEFuZEZvbnRGYWNlRWxlbWVudEZvckZvbnREYXRhKCZmb250LCBmb250RmFjZUVsZW1lbnQsIGZv
bnRFbGVtZW50KTsKICAgICBpZiAoIWZvbnRFbGVtZW50IHx8ICFmb250RmFjZUVsZW1lbnQpCiAg
ICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPER1bW15R2x5cGhUb1BhdGhUcmFuc2xhdG9y
PigpOwogCkBAIC0yNTcsMTIgKzI1NywxMiBAQCBzdGQ6OnVuaXF1ZV9wdHI8R2x5cGhUb1BhdGhU
cmFuc2xhdG9yPiBTCiAgICAgUmVuZGVyU3R5bGUmIHN0eWxlID0gZWxlbWVudFJlbmRlcmVyLnN0
eWxlKCk7CiAgICAgYm9vbCBpc1ZlcnRpY2FsVGV4dCA9IHN0eWxlLnN2Z1N0eWxlKCkuaXNWZXJ0
aWNhbFdyaXRpbmdNb2RlKCk7CiAKLSAgICBmbG9hdCBzY2FsZSA9IHNjYWxlRW1Ub1VuaXRzKGZv
bnREYXRhLnBsYXRmb3JtRGF0YSgpLnNpemUoKSwgZm9udEZhY2VFbGVtZW50LT51bml0c1BlckVt
KCkpOworICAgIGZsb2F0IHNjYWxlID0gc2NhbGVFbVRvVW5pdHMoZm9udC5wbGF0Zm9ybURhdGEo
KS5zaXplKCksIGZvbnRGYWNlRWxlbWVudC0+dW5pdHNQZXJFbSgpKTsKIAogICAgIHJldHVybiBz
dGQ6Om1ha2VfdW5pcXVlPFNWR0dseXBoVG9QYXRoVHJhbnNsYXRvcj4odGV4dFJ1biwgZ2x5cGhC
dWZmZXIsIHBvaW50LCAqc3ZnRm9udERhdGEsICpmb250RWxlbWVudCwgZnJvbSwgbnVtR2x5cGhz
LCBzY2FsZSwgaXNWZXJ0aWNhbFRleHQpOwogfQogCi12b2lkIFNWR1RleHRSdW5SZW5kZXJpbmdD
b250ZXh0OjpkcmF3U1ZHR2x5cGhzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgU2lt
cGxlRm9udERhdGEqIGZvbnREYXRhLCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGlu
dCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKK3Zv
aWQgU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmRyYXdTVkdHbHlwaHMoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBGb250KiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhC
dWZmZXIsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkg
Y29uc3QKIHsKICAgICBhdXRvIGFjdGl2ZVBhaW50aW5nUmVzb3VyY2UgPSB0aGlzLT5hY3RpdmVQ
YWludGluZ1Jlc291cmNlKCk7CiAgICAgaWYgKCFhY3RpdmVQYWludGluZ1Jlc291cmNlKSB7CkBA
IC0yNzgsNyArMjc4LDcgQEAgdm9pZCBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6ZHJhd1NW
RwogICAgIEFTU0VSVChhY3RpdmVQYWludGluZ1Jlc291cmNlKTsKIAogICAgIFJlbmRlclNWR1Jl
c291cmNlTW9kZSByZXNvdXJjZU1vZGUgPSBjb250ZXh0LT50ZXh0RHJhd2luZ01vZGUoKSA9PSBU
ZXh0TW9kZVN0cm9rZSA/IEFwcGx5VG9TdHJva2VNb2RlIDogQXBwbHlUb0ZpbGxNb2RlOwotICAg
IGZvciAoYXV0byB0cmFuc2xhdG9yID0gY3JlYXRlR2x5cGhUb1BhdGhUcmFuc2xhdG9yKCpmb250
RGF0YSwgbnVsbHB0ciwgZ2x5cGhCdWZmZXIsIGZyb20sIG51bUdseXBocywgcG9pbnQpOyB0cmFu
c2xhdG9yLT5jb250YWluc01vcmVQYXRocygpOyB0cmFuc2xhdG9yLT5hZHZhbmNlKCkpIHsKKyAg
ICBmb3IgKGF1dG8gdHJhbnNsYXRvciA9IGNyZWF0ZUdseXBoVG9QYXRoVHJhbnNsYXRvcigqZm9u
dCwgbnVsbHB0ciwgZ2x5cGhCdWZmZXIsIGZyb20sIG51bUdseXBocywgcG9pbnQpOyB0cmFuc2xh
dG9yLT5jb250YWluc01vcmVQYXRocygpOyB0cmFuc2xhdG9yLT5hZHZhbmNlKCkpIHsKICAgICAg
ICAgUGF0aCBnbHlwaFBhdGggPSB0cmFuc2xhdG9yLT5wYXRoKCk7CiAgICAgICAgIGlmIChhY3Rp
dmVQYWludGluZ1Jlc291cmNlLT5hcHBseVJlc291cmNlKGVsZW1lbnRSZW5kZXJlciwgc3R5bGUs
IGNvbnRleHQsIHJlc291cmNlTW9kZSkpIHsKICAgICAgICAgICAgIGZsb2F0IHN0cm9rZVRoaWNr
bmVzcyA9IGNvbnRleHQtPnN0cm9rZVRoaWNrbmVzcygpOwpAQCAtMjkyLDEzICsyOTIsMTMgQEAg
dm9pZCBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6ZHJhd1NWRwogCiBzdGF0aWMgR2x5cGhE
YXRhIG1pc3NpbmdHbHlwaEZvckZvbnQoY29uc3QgRm9udENhc2NhZGUmIGZvbnQpCiB7Ci0gICAg
Y29uc3QgU2ltcGxlRm9udERhdGEmIHByaW1hcnlGb250RGF0YSA9IGZvbnQucHJpbWFyeUZvbnRE
YXRhKCk7Ci0gICAgaWYgKCFwcmltYXJ5Rm9udERhdGEuaXNTVkdGb250KCkpCisgICAgY29uc3Qg
Rm9udCYgcHJpbWFyeUZvbnQgPSBmb250LnByaW1hcnlGb250KCk7CisgICAgaWYgKCFwcmltYXJ5
Rm9udC5pc1NWR0ZvbnQoKSkKICAgICAgICAgcmV0dXJuIEdseXBoRGF0YSgpOwogICAgIFNWR0Zv
bnRFbGVtZW50KiBmb250RWxlbWVudDsKICAgICBTVkdGb250RmFjZUVsZW1lbnQqIGZvbnRGYWNl
RWxlbWVudDsKLSAgICBzdmdGb250QW5kRm9udEZhY2VFbGVtZW50Rm9yRm9udERhdGEoJnByaW1h
cnlGb250RGF0YSwgZm9udEZhY2VFbGVtZW50LCBmb250RWxlbWVudCk7Ci0gICAgcmV0dXJuIEds
eXBoRGF0YShmb250RWxlbWVudC0+bWlzc2luZ0dseXBoKCksICZwcmltYXJ5Rm9udERhdGEpOwor
ICAgIHN2Z0ZvbnRBbmRGb250RmFjZUVsZW1lbnRGb3JGb250RGF0YSgmcHJpbWFyeUZvbnQsIGZv
bnRGYWNlRWxlbWVudCwgZm9udEVsZW1lbnQpOworICAgIHJldHVybiBHbHlwaERhdGEoZm9udEVs
ZW1lbnQtPm1pc3NpbmdHbHlwaCgpLCAmcHJpbWFyeUZvbnQpOwogfQogCiBHbHlwaERhdGEgU1ZH
VGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmdseXBoRGF0YUZvckNoYXJhY3Rlcihjb25zdCBGb250
Q2FzY2FkZSYgZm9udCwgV2lkdGhJdGVyYXRvciYgaXRlcmF0b3IsIFVDaGFyMzIgY2hhcmFjdGVy
LCBib29sIG1pcnJvciwgaW50IGN1cnJlbnRDaGFyYWN0ZXIsIHVuc2lnbmVkJiBhZHZhbmNlTGVu
Z3RoLCBTdHJpbmcmIG5vcm1hbGl6ZWRTcGFjZXNTdHJpbmdDYWNoZSkKQEAgLTMwNywyMyArMzA3
LDIzIEBAIEdseXBoRGF0YSBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6Z2wKICAgICBpZiAo
IWdseXBoRGF0YS5nbHlwaCkKICAgICAgICAgcmV0dXJuIG1pc3NpbmdHbHlwaEZvckZvbnQoZm9u
dCk7CiAKLSAgICBBU1NFUlQoZ2x5cGhEYXRhLmZvbnREYXRhKTsKKyAgICBBU1NFUlQoZ2x5cGhE
YXRhLmZvbnQpOwogCiAgICAgLy8gQ2hhcmFjdGVycyBlbmNsb3NlZCBieSBhbiA8YWx0R2x5cGg+
IGVsZW1lbnQsIG1heSBub3QgYmUgcmVnaXN0ZXJlZCBpbiB0aGUgR2x5cGhQYWdlLgotICAgIGlm
ICghZ2x5cGhEYXRhLmZvbnREYXRhLT5pc1NWR0ZvbnQoKSkgeworICAgIGlmICghZ2x5cGhEYXRh
LmZvbnQtPmlzU1ZHRm9udCgpKSB7CiAgICAgICAgIGF1dG8mIGVsZW1lbnRSZW5kZXJlciA9IGlz
PFJlbmRlckVsZW1lbnQ+KHJlbmRlcmVyKCkpID8gZG93bmNhc3Q8UmVuZGVyRWxlbWVudD4ocmVu
ZGVyZXIoKSkgOiAqcmVuZGVyZXIoKS5wYXJlbnQoKTsKICAgICAgICAgaWYgKEVsZW1lbnQqIHBh
cmVudFJlbmRlcmVyRWxlbWVudCA9IGVsZW1lbnRSZW5kZXJlci5lbGVtZW50KCkpIHsKICAgICAg
ICAgICAgIGlmIChpczxTVkdBbHRHbHlwaEVsZW1lbnQ+KCpwYXJlbnRSZW5kZXJlckVsZW1lbnQp
KQotICAgICAgICAgICAgICAgIGdseXBoRGF0YS5mb250RGF0YSA9ICZmb250LnByaW1hcnlGb250
RGF0YSgpOworICAgICAgICAgICAgICAgIGdseXBoRGF0YS5mb250ID0gJmZvbnQucHJpbWFyeUZv
bnQoKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmICghZ2x5cGhEYXRhLmZvbnREYXRhLT5p
c1NWR0ZvbnQoKSkKKyAgICBpZiAoIWdseXBoRGF0YS5mb250LT5pc1NWR0ZvbnQoKSkKICAgICAg
ICAgcmV0dXJuIGdseXBoRGF0YTsKIAogICAgIFNWR0ZvbnRFbGVtZW50KiBmb250RWxlbWVudCA9
IG51bGxwdHI7CiAgICAgU1ZHRm9udEZhY2VFbGVtZW50KiBmb250RmFjZUVsZW1lbnQgPSBudWxs
cHRyOwotICAgIGNvbnN0IFNWR0ZvbnREYXRhKiBzdmdGb250RGF0YSA9IHN2Z0ZvbnRBbmRGb250
RmFjZUVsZW1lbnRGb3JGb250RGF0YShnbHlwaERhdGEuZm9udERhdGEsIGZvbnRGYWNlRWxlbWVu
dCwgZm9udEVsZW1lbnQpOworICAgIGNvbnN0IFNWR0ZvbnREYXRhKiBzdmdGb250RGF0YSA9IHN2
Z0ZvbnRBbmRGb250RmFjZUVsZW1lbnRGb3JGb250RGF0YShnbHlwaERhdGEuZm9udCwgZm9udEZh
Y2VFbGVtZW50LCBmb250RWxlbWVudCk7CiAgICAgaWYgKCFzdmdGb250RGF0YSkKICAgICAgICAg
cmV0dXJuIGdseXBoRGF0YTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuaAkocmV2aXNpb24gMTc4
ODU3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5n
Q29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw5ICs0Myw5IEBAIHB1YmxpYzoKICAgICB2
b2lkIHNldEFjdGl2ZVBhaW50aW5nUmVzb3VyY2UoUmVuZGVyU1ZHUmVzb3VyY2UqIG9iamVjdCkg
eyBtX2FjdGl2ZVBhaW50aW5nUmVzb3VyY2UgPSBvYmplY3Q7IH0KIAogICAgIHZpcnR1YWwgR2x5
cGhEYXRhIGdseXBoRGF0YUZvckNoYXJhY3Rlcihjb25zdCBGb250Q2FzY2FkZSYsIFdpZHRoSXRl
cmF0b3ImLCBVQ2hhcjMyIGNoYXJhY3RlciwgYm9vbCBtaXJyb3IsIGludCBjdXJyZW50Q2hhcmFj
dGVyLCB1bnNpZ25lZCYgYWR2YW5jZUxlbmd0aCwgU3RyaW5nJiBub3JtYWxpemVkU3BhY2VzU3Ry
aW5nQ2FjaGUpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3U1ZHR2x5cGhzKEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IFNpbXBsZUZvbnREYXRhKiwgY29uc3QgR2x5cGhCdWZmZXImLCBp
bnQgZnJvbSwgaW50IHRvLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCB2b2lkIGRyYXdTVkdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRm9udCos
IGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCB0bywgY29uc3QgRmxvYXRQb2ludCYp
IGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgZmxvYXQgZmxvYXRXaWR0aFVzaW5nU1ZHRm9u
dChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBpbnQmIGNoYXJzQ29uc3VtZWQs
IFN0cmluZyYgZ2x5cGhOYW1lKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgYXBw
bHlTVkdLZXJuaW5nKGNvbnN0IFNpbXBsZUZvbnREYXRhKiwgV2lkdGhJdGVyYXRvciYsIEdseXBo
QnVmZmVyKiwgaW50IGZyb20pIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBhcHBs
eVNWR0tlcm5pbmcoY29uc3QgRm9udCosIFdpZHRoSXRlcmF0b3ImLCBHbHlwaEJ1ZmZlciosIGlu
dCBmcm9tKSBjb25zdCBvdmVycmlkZTsKICNlbmRpZgogCiBwcml2YXRlOgpAQCAtNjAsNyArNjAs
NyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgflNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0KCkg
eyB9CiAKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRy
PEdseXBoVG9QYXRoVHJhbnNsYXRvcj4gY3JlYXRlR2x5cGhUb1BhdGhUcmFuc2xhdG9yKGNvbnN0
IFNpbXBsZUZvbnREYXRhJiwgY29uc3QgVGV4dFJ1biosIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50
IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdCBvdmVycmlkZTsK
KyAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxHbHlwaFRvUGF0aFRyYW5zbGF0b3I+IGNyZWF0
ZUdseXBoVG9QYXRoVHJhbnNsYXRvcihjb25zdCBGb250JiwgY29uc3QgVGV4dFJ1biosIGNvbnN0
IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQm
KSBjb25zdCBvdmVycmlkZTsKICNlbmRpZgogCiAgICAgUmVuZGVyT2JqZWN0JiBtX3JlbmRlcmVy
OwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnREYXRhLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udERhdGEuY3BwCShyZXZpc2lvbiAxNzg4NTcpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
NywxNSArNTcsMTUgQEAgU1ZHRm9udERhdGE6OlNWR0ZvbnREYXRhKFNWR0ZvbnRGYWNlRWxlbQog
ICAgIEFTU0VSVF9BUkcoZm9udEZhY2VFbGVtZW50LCBmb250RmFjZUVsZW1lbnQpOwogfQogCi12
b2lkIFNWR0ZvbnREYXRhOjppbml0aWFsaXplRm9udERhdGEoU2ltcGxlRm9udERhdGEqIGZvbnRE
YXRhLCBmbG9hdCBmb250U2l6ZSkKK3ZvaWQgU1ZHRm9udERhdGE6OmluaXRpYWxpemVGb250KEZv
bnQqIGZvbnQsIGZsb2F0IGZvbnRTaXplKQogewotICAgIEFTU0VSVChmb250RGF0YSk7CisgICAg
QVNTRVJUKGZvbnQpOwogCiAgICAgU1ZHRm9udEZhY2VFbGVtZW50KiBzdmdGb250RmFjZUVsZW1l
bnQgPSB0aGlzLT5zdmdGb250RmFjZUVsZW1lbnQoKTsKICAgICBBU1NFUlQoc3ZnRm9udEZhY2VF
bGVtZW50KTsKIAotICAgIGZvbnREYXRhLT5zZXRaZXJvV2lkdGhTcGFjZUdseXBoKDApOwotICAg
IGZvbnREYXRhLT5kZXRlcm1pbmVQaXRjaCgpOworICAgIGZvbnQtPnNldFplcm9XaWR0aFNwYWNl
R2x5cGgoMCk7CisgICAgZm9udC0+ZGV0ZXJtaW5lUGl0Y2goKTsKIAogICAgIHVuc2lnbmVkIHVu
aXRzUGVyRW0gPSBzdmdGb250RmFjZUVsZW1lbnQtPnVuaXRzUGVyRW0oKTsKICAgICBmbG9hdCBz
Y2FsZSA9IHNjYWxlRW1Ub1VuaXRzKGZvbnRTaXplLCB1bml0c1BlckVtKTsKQEAgLTc0LDE1ICs3
NCwxNSBAQCB2b2lkIFNWR0ZvbnREYXRhOjppbml0aWFsaXplRm9udERhdGEoU2ltCiAgICAgZmxv
YXQgZGVzY2VudCA9IHN2Z0ZvbnRGYWNlRWxlbWVudC0+ZGVzY2VudCgpICogc2NhbGU7CiAgICAg
ZmxvYXQgbGluZUdhcCA9IDAuMWYgKiBmb250U2l6ZTsKIAotICAgIGNvbnN0IEdseXBoUGFnZSog
Z2x5cGhQYWdlWmVybyA9IGZvbnREYXRhLT5nbHlwaFBhZ2UoMCk7CisgICAgY29uc3QgR2x5cGhQ
YWdlKiBnbHlwaFBhZ2VaZXJvID0gZm9udC0+Z2x5cGhQYWdlKDApOwogCiAgICAgaWYgKCF4SGVp
Z2h0ICYmIGdseXBoUGFnZVplcm8pIHsKICAgICAgICAgLy8gRmFsbGJhY2sgaWYgeF9oZWlnaHRB
dHRyIGlzIG5vdCBzcGVjaWZpZWQgZm9yIHRoZSBmb250IGVsZW1lbnQuCiAgICAgICAgIEdseXBo
IGxldHRlclhHbHlwaCA9IGdseXBoUGFnZVplcm8tPmdseXBoRGF0YUZvckNoYXJhY3RlcigneCcp
LmdseXBoOwotICAgICAgICB4SGVpZ2h0ID0gbGV0dGVyWEdseXBoID8gZm9udERhdGEtPndpZHRo
Rm9yR2x5cGgobGV0dGVyWEdseXBoKSA6IDIgKiBhc2NlbnQgLyAzOworICAgICAgICB4SGVpZ2h0
ID0gbGV0dGVyWEdseXBoID8gZm9udC0+d2lkdGhGb3JHbHlwaChsZXR0ZXJYR2x5cGgpIDogMiAq
IGFzY2VudCAvIDM7CiAgICAgfQogCi0gICAgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzID0gZm9u
dERhdGEtPmZvbnRNZXRyaWNzKCk7CisgICAgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzID0gZm9u
dC0+Zm9udE1ldHJpY3MoKTsKICAgICBmb250TWV0cmljcy5zZXRVbml0c1BlckVtKHVuaXRzUGVy
RW0pOwogICAgIGZvbnRNZXRyaWNzLnNldEFzY2VudChhc2NlbnQpOwogICAgIGZvbnRNZXRyaWNz
LnNldERlc2NlbnQoZGVzY2VudCk7CkBAIC05MSwyNSArOTEsMjUgQEAgdm9pZCBTVkdGb250RGF0
YTo6aW5pdGlhbGl6ZUZvbnREYXRhKFNpbQogICAgIGZvbnRNZXRyaWNzLnNldFhIZWlnaHQoeEhl
aWdodCk7CiAKICAgICBpZiAoIWdseXBoUGFnZVplcm8pIHsKLSAgICAgICAgZm9udERhdGEtPnNl
dFNwYWNlR2x5cGgoMCk7Ci0gICAgICAgIGZvbnREYXRhLT5zZXRTcGFjZVdpZHRocygwKTsKLSAg
ICAgICAgZm9udERhdGEtPnNldEF2Z0NoYXJXaWR0aCgwKTsKLSAgICAgICAgZm9udERhdGEtPnNl
dE1heENoYXJXaWR0aChhc2NlbnQpOworICAgICAgICBmb250LT5zZXRTcGFjZUdseXBoKDApOwor
ICAgICAgICBmb250LT5zZXRTcGFjZVdpZHRocygwKTsKKyAgICAgICAgZm9udC0+c2V0QXZnQ2hh
cldpZHRoKDApOworICAgICAgICBmb250LT5zZXRNYXhDaGFyV2lkdGgoYXNjZW50KTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8vIENhbGN1bGF0ZSBzcGFjZSB3aWR0aC4KICAgICBH
bHlwaCBzcGFjZUdseXBoID0gZ2x5cGhQYWdlWmVyby0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKCcg
JykuZ2x5cGg7Ci0gICAgZm9udERhdGEtPnNldFNwYWNlR2x5cGgoc3BhY2VHbHlwaCk7Ci0gICAg
Zm9udERhdGEtPnNldFNwYWNlV2lkdGhzKGZvbnREYXRhLT53aWR0aEZvckdseXBoKHNwYWNlR2x5
cGgpKTsKKyAgICBmb250LT5zZXRTcGFjZUdseXBoKHNwYWNlR2x5cGgpOworICAgIGZvbnQtPnNl
dFNwYWNlV2lkdGhzKGZvbnQtPndpZHRoRm9yR2x5cGgoc3BhY2VHbHlwaCkpOwogCiAgICAgLy8g
RXN0aW1hdGUgYXZlcmFnZSBjaGFyYWN0ZXIgd2lkdGguCiAgICAgR2x5cGggbnVtZXJhbFplcm9H
bHlwaCA9IGdseXBoUGFnZVplcm8tPmdseXBoRGF0YUZvckNoYXJhY3RlcignMCcpLmdseXBoOwot
ICAgIGZvbnREYXRhLT5zZXRBdmdDaGFyV2lkdGgobnVtZXJhbFplcm9HbHlwaCA/IGZvbnREYXRh
LT53aWR0aEZvckdseXBoKG51bWVyYWxaZXJvR2x5cGgpIDogZm9udERhdGEtPnNwYWNlV2lkdGgo
KSk7CisgICAgZm9udC0+c2V0QXZnQ2hhcldpZHRoKG51bWVyYWxaZXJvR2x5cGggPyBmb250LT53
aWR0aEZvckdseXBoKG51bWVyYWxaZXJvR2x5cGgpIDogZm9udC0+c3BhY2VXaWR0aCgpKTsKIAog
ICAgIC8vIEVzdGltYXRlIG1heGltdW0gY2hhcmFjdGVyIHdpZHRoLgogICAgIEdseXBoIGxldHRl
cldHbHlwaCA9IGdseXBoUGFnZVplcm8tPmdseXBoRGF0YUZvckNoYXJhY3RlcignVycpLmdseXBo
OwotICAgIGZvbnREYXRhLT5zZXRNYXhDaGFyV2lkdGgobGV0dGVyV0dseXBoID8gZm9udERhdGEt
PndpZHRoRm9yR2x5cGgobGV0dGVyV0dseXBoKSA6IGFzY2VudCk7CisgICAgZm9udC0+c2V0TWF4
Q2hhcldpZHRoKGxldHRlcldHbHlwaCA/IGZvbnQtPndpZHRoRm9yR2x5cGgobGV0dGVyV0dseXBo
KSA6IGFzY2VudCk7CiB9CiAKIGZsb2F0IFNWR0ZvbnREYXRhOjp3aWR0aEZvclNWR0dseXBoKEds
eXBoIGdseXBoLCBmbG9hdCBmb250U2l6ZSkgY29uc3QKQEAgLTIwOCwxMCArMjA4LDEwIEBAIGJv
b2wgU1ZHRm9udERhdGE6OmFwcGx5U1ZHR2x5cGhTZWxlY3Rpb24KICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLWJvb2wgU1ZHRm9udERhdGE6OmZpbGxTVkdHbHlwaFBhZ2UoR2x5cGhQYWdlKiBwYWdl
VG9GaWxsLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwg
dW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEpIGNv
bnN0Citib29sIFNWR0ZvbnREYXRhOjpmaWxsU1ZHR2x5cGhQYWdlKEdseXBoUGFnZSogcGFnZVRv
RmlsbCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIsIHVu
c2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgRm9udCogZm9udCkgY29uc3QKIHsKLSAgICBBU1NF
UlQoZm9udERhdGEtPmlzQ3VzdG9tRm9udCgpKTsKLSAgICBBU1NFUlQoZm9udERhdGEtPmlzU1ZH
Rm9udCgpKTsKKyAgICBBU1NFUlQoZm9udC0+aXNDdXN0b21Gb250KCkpOworICAgIEFTU0VSVChm
b250LT5pc1NWR0ZvbnQoKSk7CiAKICAgICBTVkdGb250RmFjZUVsZW1lbnQqIGZvbnRGYWNlRWxl
bWVudCA9IHRoaXMtPnN2Z0ZvbnRGYWNlRWxlbWVudCgpOwogICAgIEFTU0VSVChmb250RmFjZUVs
ZW1lbnQpOwpAQCAtMjIwLDEzICsyMjAsMTMgQEAgYm9vbCBTVkdGb250RGF0YTo6ZmlsbFNWR0ds
eXBoUGFnZShHbHlwaAogICAgIEFTU0VSVChmb250RWxlbWVudCk7CiAKICAgICBpZiAoYnVmZmVy
TGVuZ3RoID09IGxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGZpbGxCTVBHbHlwaHMoZm9udEVsZW1l
bnQsIHBhZ2VUb0ZpbGwsIG9mZnNldCwgbGVuZ3RoLCBidWZmZXIsIGZvbnREYXRhKTsKKyAgICAg
ICAgcmV0dXJuIGZpbGxCTVBHbHlwaHMoZm9udEVsZW1lbnQsIHBhZ2VUb0ZpbGwsIG9mZnNldCwg
bGVuZ3RoLCBidWZmZXIsIGZvbnQpOwogCiAgICAgQVNTRVJUKGJ1ZmZlckxlbmd0aCA9PSAyICog
bGVuZ3RoKTsKLSAgICByZXR1cm4gZmlsbE5vbkJNUEdseXBocyhmb250RWxlbWVudCwgcGFnZVRv
RmlsbCwgb2Zmc2V0LCBsZW5ndGgsIGJ1ZmZlciwgZm9udERhdGEpOworICAgIHJldHVybiBmaWxs
Tm9uQk1QR2x5cGhzKGZvbnRFbGVtZW50LCBwYWdlVG9GaWxsLCBvZmZzZXQsIGxlbmd0aCwgYnVm
ZmVyLCBmb250KTsKIH0KIAotYm9vbCBTVkdGb250RGF0YTo6ZmlsbEJNUEdseXBocyhTVkdGb250
RWxlbWVudCogZm9udEVsZW1lbnQsIEdseXBoUGFnZSogcGFnZVRvRmlsbCwgdW5zaWduZWQgb2Zm
c2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIsIGNvbnN0IFNpbXBsZUZvbnREYXRh
KiBmb250RGF0YSkgY29uc3QKK2Jvb2wgU1ZHRm9udERhdGE6OmZpbGxCTVBHbHlwaHMoU1ZHRm9u
dEVsZW1lbnQqIGZvbnRFbGVtZW50LCBHbHlwaFBhZ2UqIHBhZ2VUb0ZpbGwsIHVuc2lnbmVkIG9m
ZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCBjb25zdCBGb250KiBmb250KSBj
b25zdAogewogICAgIGJvb2wgaGF2ZUdseXBocyA9IGZhbHNlOwogICAgIFZlY3RvcjxTVkdHbHlw
aD4gZ2x5cGhzOwpAQCAtMjQzLDE0ICsyNDMsMTQgQEAgYm9vbCBTVkdGb250RGF0YTo6ZmlsbEJN
UEdseXBocyhTVkdGb250RQogICAgICAgICAvLyBjYXJlIG9mIG1hdGNoaW5nIHRvIHRoZSBjb3Jy
ZWN0IGdseXBoLCBpZiBtdWx0aXBsZSBvbmVzIGFyZSBhdmFpbGFibGUsIGFzIHRoYXQncwogICAg
ICAgICAvLyBvbmx5IHBvc3NpYmxlIHdpdGhpbiB0aGUgY29udGV4dCBvZiBhIHN0cmluZyAoZWcu
IGFyYWJpYyBmb3JtIG1hdGNoaW5nKS4KICAgICAgICAgaGF2ZUdseXBocyA9IHRydWU7Ci0gICAg
ICAgIHBhZ2VUb0ZpbGwtPnNldEdseXBoRGF0YUZvckluZGV4KG9mZnNldCArIGksIGdseXBocy5m
aXJzdCgpLnRhYmxlRW50cnksIGZvbnREYXRhKTsKKyAgICAgICAgcGFnZVRvRmlsbC0+c2V0R2x5
cGhEYXRhRm9ySW5kZXgob2Zmc2V0ICsgaSwgZ2x5cGhzLmZpcnN0KCkudGFibGVFbnRyeSwgZm9u
dCk7CiAgICAgICAgIGdseXBocy5jbGVhcigpOwogICAgIH0KIAogICAgIHJldHVybiBoYXZlR2x5
cGhzOwogfQogCi1ib29sIFNWR0ZvbnREYXRhOjpmaWxsTm9uQk1QR2x5cGhzKFNWR0ZvbnRFbGVt
ZW50KiBmb250RWxlbWVudCwgR2x5cGhQYWdlKiBwYWdlVG9GaWxsLCB1bnNpZ25lZCBvZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZv
bnREYXRhKSBjb25zdAorYm9vbCBTVkdGb250RGF0YTo6ZmlsbE5vbkJNUEdseXBocyhTVkdGb250
RWxlbWVudCogZm9udEVsZW1lbnQsIEdseXBoUGFnZSogcGFnZVRvRmlsbCwgdW5zaWduZWQgb2Zm
c2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIsIGNvbnN0IEZvbnQqIGZvbnQpIGNv
bnN0CiB7CiAgICAgYm9vbCBoYXZlR2x5cGhzID0gZmFsc2U7CiAgICAgVmVjdG9yPFNWR0dseXBo
PiBnbHlwaHM7CkBAIC0yNjgsNyArMjY4LDcgQEAgYm9vbCBTVkdGb250RGF0YTo6ZmlsbE5vbkJN
UEdseXBocyhTVkdGbwogICAgICAgICAvLyBjYXJlIG9mIG1hdGNoaW5nIHRvIHRoZSBjb3JyZWN0
IGdseXBoLCBpZiBtdWx0aXBsZSBvbmVzIGFyZSBhdmFpbGFibGUsIGFzIHRoYXQncwogICAgICAg
ICAvLyBvbmx5IHBvc3NpYmxlIHdpdGhpbiB0aGUgY29udGV4dCBvZiBhIHN0cmluZyAoZWcuIGFy
YWJpYyBmb3JtIG1hdGNoaW5nKS4KICAgICAgICAgaGF2ZUdseXBocyA9IHRydWU7Ci0gICAgICAg
IHBhZ2VUb0ZpbGwtPnNldEdseXBoRGF0YUZvckluZGV4KG9mZnNldCArIGksIGdseXBocy5maXJz
dCgpLnRhYmxlRW50cnksIGZvbnREYXRhKTsKKyAgICAgICAgcGFnZVRvRmlsbC0+c2V0R2x5cGhE
YXRhRm9ySW5kZXgob2Zmc2V0ICsgaSwgZ2x5cGhzLmZpcnN0KCkudGFibGVFbnRyeSwgZm9udCk7
CiAgICAgICAgIGdseXBocy5jbGVhcigpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZvbnREYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Zv
bnREYXRhLmgJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250
RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSwyMSArMjEsMjEgQEAKICNkZWZpbmUgU1ZHRm9u
dERhdGFfaAogCiAjaWYgRU5BQkxFKFNWR19GT05UUykKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0
YS5oIgorI2luY2x1ZGUgIkZvbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBT
VkdGb250RWxlbWVudDsKIGNsYXNzIFNWR0ZvbnRGYWNlRWxlbWVudDsKIAotY2xhc3MgU1ZHRm9u
dERhdGEgOiBwdWJsaWMgU2ltcGxlRm9udERhdGE6OlNWR0RhdGEgeworY2xhc3MgU1ZHRm9udERh
dGEgOiBwdWJsaWMgRm9udDo6U1ZHRGF0YSB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgU1ZHRm9u
dERhdGEoU1ZHRm9udEZhY2VFbGVtZW50Kik7CiAgICAgdmlydHVhbCB+U1ZHRm9udERhdGEoKSB7
IH0KIAotICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplRm9udERhdGEoU2ltcGxlRm9udERhdGEq
LCBmbG9hdCBmb250U2l6ZSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVG
b250KEZvbnQqLCBmbG9hdCBmb250U2l6ZSkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBmbG9hdCB3
aWR0aEZvclNWR0dseXBoKEdseXBoLCBmbG9hdCBmb250U2l6ZSkgY29uc3Qgb3ZlcnJpZGU7Ci0g
ICAgdmlydHVhbCBib29sIGZpbGxTVkdHbHlwaFBhZ2UoR2x5cGhQYWdlKiwgdW5zaWduZWQgb2Zm
c2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0
aCwgY29uc3QgU2ltcGxlRm9udERhdGEqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJv
b2wgZmlsbFNWR0dseXBoUGFnZShHbHlwaFBhZ2UqLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVk
IGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBGb250
KikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBib29sIGFwcGx5U1ZHR2x5cGhTZWxlY3Rpb24oV2lk
dGhJdGVyYXRvciYsIEdseXBoRGF0YSYsIGJvb2wgbWlycm9yLCBpbnQgY3VycmVudENoYXJhY3Rl
ciwgdW5zaWduZWQmIGFkdmFuY2VMZW5ndGgsIFN0cmluZyYgbm9ybWFsaXplZFNwYWNlc1N0cmlu
Z0NhY2hlKSBjb25zdDsKIApAQCAtNTAsOCArNTAsOCBAQCBwdWJsaWM6CiAgICAgZmxvYXQgdmVy
dGljYWxBZHZhbmNlWSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVydGljYWxBZHZhbmNlWTsgfQogCiBw
cml2YXRlOgotICAgIGJvb2wgZmlsbEJNUEdseXBocyhTVkdGb250RWxlbWVudCosIEdseXBoUGFn
ZSogLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgY29u
c3QgU2ltcGxlRm9udERhdGEqKSBjb25zdDsKLSAgICBib29sIGZpbGxOb25CTVBHbHlwaHMoU1ZH
Rm9udEVsZW1lbnQqLCBHbHlwaFBhZ2UqICwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgsIFVDaGFyKiBidWZmZXIsIGNvbnN0IFNpbXBsZUZvbnREYXRhKikgY29uc3Q7CisgICAgYm9v
bCBmaWxsQk1QR2x5cGhzKFNWR0ZvbnRFbGVtZW50KiwgR2x5cGhQYWdlKiAsIHVuc2lnbmVkIG9m
ZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCBjb25zdCBGb250KikgY29uc3Q7
CisgICAgYm9vbCBmaWxsTm9uQk1QR2x5cGhzKFNWR0ZvbnRFbGVtZW50KiwgR2x5cGhQYWdlKiAs
IHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCBjb25zdCBG
b250KikgY29uc3Q7CiAKICAgICBib29sIGFwcGx5VHJhbnNmb3JtcyhHbHlwaEJ1ZmZlckdseXBo
KiwgR2x5cGhCdWZmZXJBZHZhbmNlKiwgc2l6ZV90LCBUeXBlc2V0dGluZ0ZlYXR1cmVzKSBjb25z
dCA9IGRlbGV0ZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRFbGVtZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRFbGVtZW50LmgJKHJldmlz
aW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RWxlbWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03Niw3ICs3Niw3IEBAIHB1YmxpYzoKICAgICBmbG9hdCBob3Jpem9udGFs
S2VybmluZ0ZvclBhaXJPZlN0cmluZ3NBbmRHbHlwaHMoY29uc3QgU3RyaW5nJiB1MSwgY29uc3Qg
U3RyaW5nJiBnMSwgY29uc3QgU3RyaW5nJiB1MiwgY29uc3QgU3RyaW5nJiBnMikgY29uc3Q7CiAg
ICAgZmxvYXQgdmVydGljYWxLZXJuaW5nRm9yUGFpck9mU3RyaW5nc0FuZEdseXBocyhjb25zdCBT
dHJpbmcmIHUxLCBjb25zdCBTdHJpbmcmIGcxLCBjb25zdCBTdHJpbmcmIHUyLCBjb25zdCBTdHJp
bmcmIGcyKSBjb25zdDsKIAotICAgIC8vIFVzZWQgYnkgU2ltcGxlRm9udERhdGEvV2lkdGhJdGVy
YXRvci4KKyAgICAvLyBVc2VkIGJ5IEZvbnQvV2lkdGhJdGVyYXRvci4KICAgICBTVkdHbHlwaCBz
dmdHbHlwaEZvckdseXBoKEdseXBoKTsKICAgICBHbHlwaCBtaXNzaW5nR2x5cGgoKTsKIApJbmRl
eDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCShyZXZpc2lvbiAxNzg4
NTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05MjcsOCArOTI3LDggQEAgdm9pZCBXZWJQcm9jZXNzOjpnZXRXZWJDb3JlU3Rh
dGlzdGljcyh1aQogICAgIGRhdGEuc3RhdGlzdGljc051bWJlcnMuc2V0KEFTQ0lJTGl0ZXJhbCgi
SWNvbnNXaXRoRGF0YUNvdW50IiksIGljb25EYXRhYmFzZSgpLmljb25SZWNvcmRDb3VudFdpdGhE
YXRhKCkpOwogICAgIAogICAgIC8vIEdhdGhlciBmb250IHN0YXRpc3RpY3MuCi0gICAgZGF0YS5z
dGF0aXN0aWNzTnVtYmVycy5zZXQoQVNDSUlMaXRlcmFsKCJDYWNoZWRGb250RGF0YUNvdW50Iiks
IGZvbnRDYWNoZSgpLmZvbnREYXRhQ291bnQoKSk7Ci0gICAgZGF0YS5zdGF0aXN0aWNzTnVtYmVy
cy5zZXQoQVNDSUlMaXRlcmFsKCJDYWNoZWRGb250RGF0YUluYWN0aXZlQ291bnQiKSwgZm9udENh
Y2hlKCkuaW5hY3RpdmVGb250RGF0YUNvdW50KCkpOworICAgIGRhdGEuc3RhdGlzdGljc051bWJl
cnMuc2V0KEFTQ0lJTGl0ZXJhbCgiQ2FjaGVkRm9udERhdGFDb3VudCIpLCBmb250Q2FjaGUoKS5m
b250Q291bnQoKSk7CisgICAgZGF0YS5zdGF0aXN0aWNzTnVtYmVycy5zZXQoQVNDSUlMaXRlcmFs
KCJDYWNoZWRGb250RGF0YUluYWN0aXZlQ291bnQiKSwgZm9udENhY2hlKCkuaW5hY3RpdmVGb250
Q291bnQoKSk7CiAgICAgCiAgICAgLy8gR2F0aGVyIGdseXBoIHBhZ2Ugc3RhdGlzdGljcy4KICAg
ICBkYXRhLnN0YXRpc3RpY3NOdW1iZXJzLnNldChBU0NJSUxpdGVyYWwoIkdseXBoUGFnZUNvdW50
IiksIEdseXBoUGFnZTo6Y291bnQoKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L21hYy9XZWJQb3B1cE1lbnVNYWMubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViUG9wdXBNZW51TWFj
Lm1tCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L21hYy9XZWJQb3B1cE1lbnVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTM5LDcg
KzM5LDcgQEAgdm9pZCBXZWJQb3B1cE1lbnU6OnNldFVwUGxhdGZvcm1EYXRhKGNvbgogewogI2lm
IFVTRShBUFBLSVQpCiAgICAgLy8gRklYTUU6IGZvbnQgd2lsbCBiZSBuaWwgaGVyZSBmb3IgY3Vz
dG9tIGZvbnRzLCB3ZSBzaG91bGQgZml4IHRoYXQuCi0gICAgTlNGb250ICpmb250ID0gbV9wb3B1
cENsaWVudC0+bWVudVN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250RGF0YSgpLmdldE5TRm9udCgp
OworICAgIE5TRm9udCAqZm9udCA9IG1fcG9wdXBDbGllbnQtPm1lbnVTdHlsZSgpLmZvbnQoKS5w
cmltYXJ5Rm9udCgpLmdldE5TRm9udCgpOwogICAgIGlmICghZm9udCkKICAgICAgICAgcmV0dXJu
OwogICAgIApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OTYsNyArNzk2LDcgQEAgRWRp
dG9yU3RhdGUgV2ViUGFnZTo6ZWRpdG9yU3RhdGUoKSBjb25zdAogICAgIGlmICghc2VsZWN0aW9u
LmlzTm9uZSgpKSB7CiAgICAgICAgIE5vZGUqIG5vZGVUb1JlbW92ZTsKICAgICAgICAgaWYgKFJl
bmRlclN0eWxlKiBzdHlsZSA9IEVkaXRvcjo6c3R5bGVGb3JTZWxlY3Rpb25TdGFydCgmZnJhbWUs
IG5vZGVUb1JlbW92ZSkpIHsKLSAgICAgICAgICAgIENURm9udFJlZiBmb250ID0gc3R5bGUtPmZv
bnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0Q1RGb250KCk7CisgICAgICAgICAgICBD
VEZvbnRSZWYgZm9udCA9IHN0eWxlLT5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCkuZ2V0Q1RG
b250KCk7CiAgICAgICAgICAgICBDVEZvbnRTeW1ib2xpY1RyYWl0cyB0cmFpdHMgPSBmb250ID8g
Q1RGb250R2V0U3ltYm9saWNUcmFpdHMoZm9udCkgOiAwOwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBpZiAodHJhaXRzICYga0NURm9udFRyYWl0Qm9sZCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0JKHJldmlzaW9u
IDE3ODg1NykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFn
ZUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTc5MCw4ICsxNzkwLDggQEAgdm9pZCBXZWJQYWdl
OjpyZXF1ZXN0QXV0b2NvcnJlY3Rpb25EYXRhKAogCiAgICAgYm9vbCBtdWx0aXBsZUZvbnRzID0g
ZmFsc2U7CiAgICAgQ1RGb250UmVmIGZvbnQgPSBuaWw7Ci0gICAgaWYgKGNvbnN0IFNpbXBsZUZv
bnREYXRhKiBmb250RGF0YSA9IGZyYW1lLmVkaXRvcigpLmZvbnRGb3JTZWxlY3Rpb24obXVsdGlw
bGVGb250cykpCi0gICAgICAgIGZvbnQgPSBmb250RGF0YS0+Z2V0Q1RGb250KCk7CisgICAgaWYg
KGF1dG8qIGNvcmVGb250ID0gZnJhbWUuZWRpdG9yKCkuZm9udEZvclNlbGVjdGlvbihtdWx0aXBs
ZUZvbnRzKSkKKyAgICAgICAgZm9udCA9IGNvcmVGb250LT5nZXRDVEZvbnQoKTsKIAogICAgIENH
RmxvYXQgZm9udFNpemUgPSBDVEZvbnRHZXRTaXplKGZvbnQpOwogICAgIHVpbnQ2NF90IGZvbnRU
cmFpdHMgPSBDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhmb250KTsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvaW9zL01pc2MvRW1vamlGYWxsYmFja0ZvbnRTZWxlY3Rvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9pb3MvTWlzYy9FbW9qaUZhbGxiYWNrRm9udFNlbGVjdG9yLmNwcAkocmV2
aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYktpdC9pb3MvTWlzYy9FbW9qaUZhbGxiYWNrRm9u
dFNlbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTcgKzI3LDE3IEBACiAKICNpbmNs
dWRlICJFbW9qaUZhbGxiYWNrRm9udFNlbGVjdG9yLmgiCiAKKyNpbmNsdWRlIDxXZWJDb3JlL0Zv
bnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZvbnRDYWNoZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUv
U2ltcGxlRm9udERhdGEuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAot
UGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRW1vamlGYWxsYmFja0ZvbnRTZWxlY3Rvcjo6ZmFs
bGJhY2tGb250RGF0YUF0KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBz
aXplX3QpCitQYXNzUmVmUHRyPEZvbnQ+IEVtb2ppRmFsbGJhY2tGb250U2VsZWN0b3I6OmZhbGxi
YWNrRm9udEF0KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBzaXplX3Qp
CiB7CiAgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgYXBw
bGVDb2xvckVtb2ppLCAoIkFwcGxlIENvbG9yIEVtb2ppIikpOwotICAgIFJlZlB0cjxTaW1wbGVG
b250RGF0YT4gZm9udERhdGEgPSBmb250Q2FjaGUoKS5mb250Rm9yRmFtaWx5KGZvbnREZXNjcmlw
dGlvbiwgYXBwbGVDb2xvckVtb2ppKTsKKyAgICBSZWZQdHI8Rm9udD4gZm9udERhdGEgPSBmb250
Q2FjaGUoKS5mb250Rm9yRmFtaWx5KGZvbnREZXNjcmlwdGlvbiwgYXBwbGVDb2xvckVtb2ppKTsK
ICAgICBpZiAoIWZvbnREYXRhKSB7CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGdldCBc
IkFwcGxlIENvbG9yIEVtb2ppXCIgZnJvbSB0aGUgZm9udCBjYWNoZS4gVXNpbmcgdGhlIGxhc3Qg
cmVzb3J0IGZhbGxiYWNrIGZvbnQgaW5zdGVhZC4iKTsKICAgICAgICAgZm9udERhdGEgPSBmb250
Q2FjaGUoKS5sYXN0UmVzb3J0RmFsbGJhY2tGb250KGZvbnREZXNjcmlwdGlvbik7CkluZGV4OiBT
b3VyY2UvV2ViS2l0L2lvcy9NaXNjL0Vtb2ppRmFsbGJhY2tGb250U2VsZWN0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2lvcy9NaXNjL0Vtb2ppRmFsbGJhY2tGb250U2VsZWN0b3Iu
aAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYktpdC9pb3MvTWlzYy9FbW9qaUZhbGxi
YWNrRm9udFNlbGVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDggKzM1LDggQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgfkVtb2ppRmFsbGJhY2tGb250U2VsZWN0b3IoKSBvdmVycmlkZSB7IH0K
ICAgICB2aXJ0dWFsIFdlYkNvcmU6OkZvbnRSYW5nZXMgZm9udFJhbmdlc0ZvckZhbWlseShjb25z
dCBXZWJDb3JlOjpGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9taWNTdHJpbmcmKSBvdmVycmlk
ZSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gV2ViQ29yZTo6Rm9udFJhbmdlcygpOyB9
CiAgICAgdmlydHVhbCBib29sIHJlc29sdmVzRmFtaWx5Rm9yKGNvbnN0IFdlYkNvcmU6OkZvbnRE
ZXNjcmlwdGlvbiYpIGNvbnN0IG92ZXJyaWRlIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVy
biBmYWxzZTsgfQotICAgIHZpcnR1YWwgc2l6ZV90IGZhbGxiYWNrRm9udERhdGFDb3VudCgpIG92
ZXJyaWRlIHsgcmV0dXJuIDE7IH07Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNp
bXBsZUZvbnREYXRhPiBmYWxsYmFja0ZvbnREYXRhQXQoY29uc3QgV2ViQ29yZTo6Rm9udERlc2Ny
aXB0aW9uJiwgc2l6ZV90KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHNpemVfdCBmYWxsYmFja0Zv
bnRDb3VudCgpIG92ZXJyaWRlIHsgcmV0dXJuIDE7IH07CisgICAgdmlydHVhbCBQYXNzUmVmUHRy
PFdlYkNvcmU6OkZvbnQ+IGZhbGxiYWNrRm9udEF0KGNvbnN0IFdlYkNvcmU6OkZvbnREZXNjcmlw
dGlvbiYsIHNpemVfdCkgb3ZlcnJpZGU7CiAKICAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJGb3JJ
bnZhbGlkYXRpb25DYWxsYmFja3MoV2ViQ29yZTo6Rm9udFNlbGVjdG9yQ2xpZW50Kikgb3ZlcnJp
ZGUgeyB9CiAgICAgdmlydHVhbCB2b2lkIHVucmVnaXN0ZXJGb3JJbnZhbGlkYXRpb25DYWxsYmFj
a3MoV2ViQ29yZTo6Rm9udFNlbGVjdG9yQ2xpZW50Kikgb3ZlcnJpZGUgeyB9CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW0JKHJldmlzaW9uIDE3ODg1
NykKKysrIFNvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW0JKHdvcmtp
bmcgY29weSkKQEAgLTE0NywxMiArMTQ3LDEyIEBAICsgKHNpemVfdClpY29uc1dpdGhEYXRhQ291
bnQKIAogKyAoc2l6ZV90KWNhY2hlZEZvbnREYXRhQ291bnQKIHsKLSAgICByZXR1cm4gZm9udENh
Y2hlKCkuZm9udERhdGFDb3VudCgpOworICAgIHJldHVybiBmb250Q2FjaGUoKS5mb250Q291bnQo
KTsKIH0KIAogKyAoc2l6ZV90KWNhY2hlZEZvbnREYXRhSW5hY3RpdmVDb3VudAogewotICAgIHJl
dHVybiBmb250Q2FjaGUoKS5pbmFjdGl2ZUZvbnREYXRhQ291bnQoKTsKKyAgICByZXR1cm4gZm9u
dENhY2hlKCkuaW5hY3RpdmVGb250Q291bnQoKTsKIH0KIAogKyAodm9pZClwdXJnZUluYWN0aXZl
Rm9udERhdGEKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1BvcHVwTWVu
dU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9Q
b3B1cE1lbnVNYWMubW0JKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dl
YkNvcmVTdXBwb3J0L1BvcHVwTWVudU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjgsMTEgKzI4
LDExIEBACiAjaW1wb3J0IDxXZWJDb3JlL0Nocm9tZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9DaHJv
bWVDbGllbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvRXZlbnRIYW5kbGVyLmg+CisjaW1wb3J0IDxX
ZWJDb3JlL0ZvbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvRnJhbWUuaD4KICNpbXBvcnQgPFdlYkNv
cmUvRnJhbWVWaWV3Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BhZ2UuaD4KICNpbXBvcnQgPFdlYkNv
cmUvUG9wdXBNZW51Q2xpZW50Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1NpbXBsZUZvbnREYXRhLmg+
CiAjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaD4KIAogdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CkBAIC04MSw5ICs4MSw5IEBAIHZvaWQgUG9wdXBNZW51TWFjOjpwb3B1
bGF0ZSgpCiAgICAgICAgIFBvcHVwTWVudVN0eWxlIHN0eWxlID0gbV9jbGllbnQtPml0ZW1TdHls
ZShpKTsKICAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZURpY3Rpb25hcnk+IGF0dHJpYnV0ZXMg
PSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF0pOwogICAgICAgICBp
ZiAoc3R5bGUuZm9udCgpICE9IEZvbnRDYXNjYWRlKCkpIHsKLSAgICAgICAgICAgIE5TRm9udCAq
Zm9udCA9IHN0eWxlLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXROU0ZvbnQoKTsKKyAgICAg
ICAgICAgIE5TRm9udCAqZm9udCA9IHN0eWxlLmZvbnQoKS5wcmltYXJ5Rm9udCgpLmdldE5TRm9u
dCgpOwogICAgICAgICAgICAgaWYgKCFmb250KSB7Ci0gICAgICAgICAgICAgICAgQ0dGbG9hdCBz
aXplID0gc3R5bGUuZm9udCgpLnByaW1hcnlGb250RGF0YSgpLnBsYXRmb3JtRGF0YSgpLnNpemUo
KTsKKyAgICAgICAgICAgICAgICBDR0Zsb2F0IHNpemUgPSBzdHlsZS5mb250KCkucHJpbWFyeUZv
bnQoKS5wbGF0Zm9ybURhdGEoKS5zaXplKCk7CiAgICAgICAgICAgICAgICAgZm9udCA9IHN0eWxl
LmZvbnQoKS53ZWlnaHQoKSA8IEZvbnRXZWlnaHRCb2xkID8gW05TRm9udCBzeXN0ZW1Gb250T2ZT
aXplOnNpemVdIDogW05TRm9udCBib2xkU3lzdGVtRm9udE9mU2l6ZTpzaXplXTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIFthdHRyaWJ1dGVzIHNldE9iamVjdDpmb250IGZvcktleTpOU0Zv
bnRBdHRyaWJ1dGVOYW1lXTsKQEAgLTE0OCw3ICsxNDgsNyBAQCB2b2lkIFBvcHVwTWVudU1hYzo6
c2hvdyhjb25zdCBJbnRSZWN0JiByCiAgICAgTlNNZW51KiBtZW51ID0gW21fcG9wdXAgbWVudV07
CiAgICAgCiAgICAgTlNQb2ludCBsb2NhdGlvbjsKLSAgICBOU0ZvbnQqIGZvbnQgPSBtX2NsaWVu
dC0+bWVudVN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250RGF0YSgpLmdldE5TRm9udCgpOworICAg
IE5TRm9udCogZm9udCA9IG1fY2xpZW50LT5tZW51U3R5bGUoKS5mb250KCkucHJpbWFyeUZvbnQo
KS5nZXROU0ZvbnQoKTsKIAogICAgIC8vIFRoZXNlIHZhbHVlcyB3ZXJlIGJvcnJvd2VkIGZyb20g
QXBwS2l0IHRvIG1hdGNoIHRoZWlyIHBsYWNlbWVudCBvZiB0aGUgbWVudS4KICAgICBjb25zdCBp
bnQgcG9wT3Zlckhvcml6b250YWxBZGp1c3QgPSAtMTA7CkluZGV4OiBTb3VyY2UvV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYkZyYW1lLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViRnJhbWUubW0JKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJLaXQvbWFj
L1dlYlZpZXcvV2ViRnJhbWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTExNCwxMSArMTE0LDExIEBA
CiAjaW1wb3J0IDxXZWJDb3JlL0VkaXRvci5oPgogI2ltcG9ydCA8V2ViQ29yZS9FZGl0b3JDbGll
bnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvRm9jdXNDb250cm9sbGVyLmg+CisjaW1wb3J0IDxXZWJD
b3JlL0ZvbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVTZWxlY3Rpb24uaD4KICNpbXBvcnQg
PFdlYkNvcmUvSGlzdG9yeUNvbnRyb2xsZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvTm9kZVRyYXZl
cnNhbC5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJMYXllci5oPgotI2ltcG9ydCA8V2ViQ29y
ZS9TaW1wbGVGb250RGF0YS5oPgogI2ltcG9ydCA8V2ViQ29yZS9UZXh0UmVzb3VyY2VEZWNvZGVy
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dBS1Njcm9sbFZpZXcuaD4KICNpbXBvcnQgPFdlYkNvcmUv
V0FLVmlld1ByaXZhdGUuaD4KQEAgLTE4NjksNyArMTg2OSw4IEBAIC0gKENURm9udFJlZilmb250
Rm9yU2VsZWN0aW9uOihCT09MICopaGEKICAgICBib29sIG11bHRpcGxlRm9udHMgPSBmYWxzZTsK
ICAgICBDVEZvbnRSZWYgZm9udCA9IG5pbDsKICAgICBpZiAoX3ByaXZhdGUtPmNvcmVGcmFtZSkg
ewotICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogZmQgPSBfcHJpdmF0ZS0+Y29yZUZyYW1l
LT5lZGl0b3IoKS5mb250Rm9yU2VsZWN0aW9uKG11bHRpcGxlRm9udHMpOworICAgICAgICBjb25z
dCBGb250CisgICAgICAgICogZmQgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5lZGl0b3IoKS5mb250
Rm9yU2VsZWN0aW9uKG11bHRpcGxlRm9udHMpOwogICAgICAgICBpZiAoZmQpCiAgICAgICAgICAg
ICBmb250ID0gZmQtPmdldENURm9udCgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFj
L1dlYlZpZXcvV2ViSFRNTFZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMv
V2ViVmlldy9XZWJIVE1MVmlldy5tbQkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYktp
dC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtOTIsNiArOTIs
NyBAQAogI2ltcG9ydCA8V2ViQ29yZS9FeGNlcHRpb25IYW5kbGVycy5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9GbG9hdFJlY3QuaD4KICNpbXBvcnQgPFdlYkNvcmUvRm9jdXNDb250cm9sbGVyLmg+Cisj
aW1wb3J0IDxXZWJDb3JlL0ZvbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvRm9udENhY2hlLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lTG9hZGVyLmg+
CkBAIC0xMTIsNyArMTEzLDYgQEAKICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyV2lkZ2V0Lmg+CiAj
aW1wb3J0IDxXZWJDb3JlL1J1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9TaGFyZWRCdWZmZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvU2ltcGxlRm9udERhdGEuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvU3R5bGVQcm9wZXJ0aWVzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Rl
eHQuaD4KICNpbXBvcnQgPFdlYkNvcmUvVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlLmg+CkBAIC00
ODc4LDggKzQ4NzgsOCBAQCBzdGF0aWMgTlNTdHJpbmcgKmZvbnROYW1lRm9yRGVzY3JpcHRpb24o
CiAgICAgZm9udERlc2NyaXB0aW9uLnNldElzSXRhbGljKGl0YWxpYyk7CiAgICAgZm9udERlc2Ny
aXB0aW9uLnNldFdlaWdodChib2xkID8gRm9udFdlaWdodDkwMCA6IEZvbnRXZWlnaHQ1MDApOwog
ICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKHBvaW50U2l6ZSk7Ci0gICAgUmVm
UHRyPFNpbXBsZUZvbnREYXRhPiBzaW1wbGVGb250RGF0YSA9IGZvbnRDYWNoZSgpLmZvbnRGb3JG
YW1pbHkoZm9udERlc2NyaXB0aW9uLCBmYW1pbHlOYW1lKTsKLSAgICByZXR1cm4gW3NpbXBsZUZv
bnREYXRhLT5wbGF0Zm9ybURhdGEoKS5uc0ZvbnQoKSBmb250TmFtZV07CisgICAgUmVmUHRyPEZv
bnQ+IGZvbnQgPSBmb250Q2FjaGUoKS5mb250Rm9yRmFtaWx5KGZvbnREZXNjcmlwdGlvbiwgZmFt
aWx5TmFtZSk7CisgICAgcmV0dXJuIFtmb250LT5wbGF0Zm9ybURhdGEoKS5uc0ZvbnQoKSBmb250
TmFtZV07CiB9CiAKIC0gKHZvaWQpX2FkZFRvU3R5bGU6KERPTUNTU1N0eWxlRGVjbGFyYXRpb24g
KilzdHlsZSBmb250QTooTlNGb250ICopYSBmb250QjooTlNGb250ICopYgpAQCAtNTQ0Miw3ICs1
NDQyLDcgQEAgLSAodm9pZClfdXBkYXRlRm9udFBhbmVsCiAgICAgYm9vbCBtdWx0aXBsZUZvbnRz
ID0gZmFsc2U7CiAgICAgTlNGb250ICpmb250ID0gbmlsOwogICAgIGlmIChGcmFtZSogY29yZUZy
YW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkgewotICAgICAgICBpZiAoY29uc3QgU2ltcGxlRm9u
dERhdGEqIGZkID0gY29yZUZyYW1lLT5lZGl0b3IoKS5mb250Rm9yU2VsZWN0aW9uKG11bHRpcGxl
Rm9udHMpKQorICAgICAgICBpZiAoY29uc3QgRm9udCogZmQgPSBjb3JlRnJhbWUtPmVkaXRvcigp
LmZvbnRGb3JTZWxlY3Rpb24obXVsdGlwbGVGb250cykpCiAgICAgICAgICAgICBmb250ID0gZmQt
PmdldE5TRm9udCgpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYktpdC93aW4vRE9NQ29yZUNs
YXNzZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL0RPTUNvcmVDbGFzc2Vz
LmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYktpdC93aW4vRE9NQ29yZUNsYXNz
ZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSA8V2ViQ29y
ZS9Eb2N1bWVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRHJhZ0ltYWdlLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9FbGVtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Gb250Lmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9Gb250Q2FzY2FkZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL0hUTUxGb3JtRWxlbWVudC5oPgpAQCAtNDgsNyArNDksNiBAQAogI2luY2x1
ZGUgPFdlYkNvcmUvTm9kZUxpc3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlckVsZW1lbnQu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlclRyZWVBc1RleHQuaD4KLSNpbmNsdWRlIDxXZWJD
b3JlL1NpbXBsZUZvbnREYXRhLmg+CiAKICNpbmNsdWRlIDxpbml0Z3VpZC5oPgogLy8gezNCMEMw
RUZGLTQ3OEItNGIwYi04MjkwLUQyMzIxRTA4RTIzRX0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2lu
L1dlYlZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcuY3Bw
CShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTYsNiArOTYsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3Rl
bS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRRdWFkLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9G
b2N1c0NvbnRyb2xsZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZvbnQuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0ZyYW1lTG9hZGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZVNlbGVjdGlvbi5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVUcmVlLmg+CkBAIC0xNDgsNyArMTQ5LDYgQEAKICNp
bmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TZWN1
cml0eVBvbGljeS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2V0dGluZ3MuaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL1NpbXBsZUZvbnREYXRhLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TeXN0ZW1JbmZvLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9XaW5kb3dNZXNzYWdlQnJvYWRjYXN0ZXIuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1dpbmRvd3NUb3VjaC5oPgpAQCAtNTUwNSw3ICs1NTA1LDcgQEAgSFJFU1VMVCBX
ZWJWaWV3OjpzZXRQcm9oaWJpdHNNYWluRnJhbWVTYwogCiBIUkVTVUxUIFdlYlZpZXc6OnNldFNo
b3VsZEFwcGx5TWFjRm9udEFzY2VudEhhY2soQk9PTCBiKQogewotICAgIFNpbXBsZUZvbnREYXRh
OjpzZXRTaG91bGRBcHBseU1hY0FzY2VudEhhY2soYik7CisgICAgRm9udDo6c2V0U2hvdWxkQXBw
bHlNYWNBc2NlbnRIYWNrKGIpOwogICAgIHJldHVybiBTX09LOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245151</attachid>
            <date>2015-01-22 11:30:39 -0800</date>
            <delta_ts>2015-01-22 13:10:00 -0800</delta_ts>
            <desc>another</desc>
            <filename>simplefontdata-rename-10.patch</filename>
            <type>text/plain</type>
            <size>383189</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDE1LTAxLTIxICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgU2ltcGxlRm9udERh
dGEgdG8gRm9udAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTQwNDk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhlIGZhbGxiYWNrIHN1cHBvcnRpbmcgRm9udCB0eXBlIHdhcyByZW5hbWVkIEZvbnRDYXNj
YWRlLgorICAgICAgICBXZSBjYW4gbm93IHJlbmFtZSBTaW1wbGVGb250RGF0YSB0byBqdXN0IEZv
bnQgbWF0Y2hpbmcgdGhlIHVzdWFsIGRlZmluaXRpb24uCisKIDIwMTUtMDEtMjEgIEJlbmphbWlu
IFBvdWxhaW4gIDxiZW5qYW1pbkB3ZWJraXQub3JnPgogCiAgICAgICAgIEhhbmRsZSB0aGUgdHJh
bnNpdGlvbiBvbiBhbnkgY2hhcmFjdGVyIGFzIGEgc2VwYXJhdGUgdHlwZSBvZiB0cmFuc2l0aW9u
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dl
YkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTIwNTQsNiArMjA1NCw3IEBA
IHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3Bw
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSb3VuZGVkUmVjdC5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9GbG9hdFNpemUuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhc2NhZGUuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERlc2NyaXB0aW9u
LmNwcApAQCAtMjA4OSw3ICsyMDkwLDYgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL1JvdW5kZWRSZWN0LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1NWR0ds
eXBoLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCi0gICAgcGxhdGZv
cm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvU3Ry
aW5nVHJ1bmNhdG9yLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1N1cnJvZ2F0ZVBhaXJBd2Fy
ZVRleHRJdGVyYXRvci5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVuLmNwcApJbmRl
eDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC00NjksNyArNDY5LDYgQEAgX19aTjdX
ZWJDb3JlMTRTZWN1cml0eVBvbGljeTIyZ2VuZXJhdGVSZQogX19aTjdXZWJDb3JlMTRTZWN1cml0
eVBvbGljeTI3cmVzZXRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RzRXYKIF9fWk43V2ViQ29yZTE0U2Vj
dXJpdHlQb2xpY3kyOWFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5RVJLTlNfMTRTZWN1cml0
eU9yaWdpbkVSS04zV1RGNlN0cmluZ0VTN19iCiBfX1pON1dlYkNvcmUxNFNlY3VyaXR5UG9saWN5
MzJyZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeUVSS05TXzE0U2VjdXJpdHlPcmlnaW5F
UktOM1dURjZTdHJpbmdFUzdfYgotX19aTjdXZWJDb3JlMTRTaW1wbGVGb250RGF0YUQxRXYKIF9f
Wk43V2ViQ29yZTE0U3ViZnJhbWVMb2FkZXIxMmFsbG93UGx1Z2luc0VOU18yOFJlYXNvbkZvckNh
bGxpbmdBbGxvd1BsdWdpbnNFCiBfX1pON1dlYkNvcmUxNFRpbGVDb250cm9sbGVyMTRzZXRUaWxl
c09wYXF1ZUViCiBfX1pON1dlYkNvcmUxNFRpbGVDb250cm9sbGVyMTVjb250YWluZXJMYXllcnNF
dgpAQCAtMTE3OSw2ICsxMTc4LDcgQEAgX19aTjdXZWJDb3JlNDBkZWZhdWx0VGV4dEVuY29kaW5n
TmFtZUZvcgogX19aTjdXZWJDb3JlNDByZXN0cmljdE1pbmltdW1TY2FsZUZhY3RvclRvVmlld3Bv
cnRTaXplRVJOU18xOFZpZXdwb3J0QXR0cmlidXRlc0VOU183SW50U2l6ZUVmCiBfX1pON1dlYkNv
cmU0MlVSTEJ5VHJ1bmNhdGluZ09uZUNoYXJhY3RlckJlZm9yZUNvbXBvbmVudEVQNU5TVVJMMThD
RlVSTENvbXBvbmVudFR5cGUKIF9fWk43V2ViQ29yZTQ3YXR0cmlidXRlZFN0cmluZ0J5U3RyaXBw
aW5nQXR0YWNobWVudENoYXJhY3RlcnNFUDE4TlNBdHRyaWJ1dGVkU3RyaW5nCitfX1pON1dlYkNv
cmU0Rm9udEQxRXYKIF9fWk43V2ViQ29yZTRJY29uMThjcmVhdGVJY29uRm9yRmlsZXNFUktOM1dU
RjZWZWN0b3JJTlMxXzZTdHJpbmdFTG0wRU5TMV8xNUNyYXNoT25PdmVyZmxvd0VFRQogX19aTjdX
ZWJDb3JlNEljb25EMUV2CiBfX1pON1dlYkNvcmU0Tm9kZTEwcmVuZGVyUmVjdEVQYgpAQCAtMTQ5
MiwxMSArMTQ5MiwxMSBAQCBfX1pON1dlYkNvcmU5RmxvYXRSZWN0QzFFUktOU183SW50UmVjdEUK
IF9fWk43V2ViQ29yZTlGbG9hdFNpemVDMUVSSzZDR1NpemUKIF9fWk43V2ViQ29yZTlGbG9hdFNp
emVDMUVSS05TXzdJbnRTaXplRQogX19aTjdXZWJDb3JlOUZvbnRDYWNoZTEwaW52YWxpZGF0ZUV2
Ci1fX1pON1dlYkNvcmU5Rm9udENhY2hlMTNmb250RGF0YUNvdW50RXYKIF9fWk43V2ViQ29yZTlG
b250Q2FjaGUxM2ZvbnRGb3JGYW1pbHlFUktOU18xNUZvbnREZXNjcmlwdGlvbkVSS04zV1RGMTJB
dG9taWNTdHJpbmdFYgotX19aTjdXZWJDb3JlOUZvbnRDYWNoZTIxaW5hY3RpdmVGb250RGF0YUNv
dW50RXYKK19fWk43V2ViQ29yZTlGb250Q2FjaGUxN2luYWN0aXZlRm9udENvdW50RXYKIF9fWk43
V2ViQ29yZTlGb250Q2FjaGUyMXB1cmdlSW5hY3RpdmVGb250RGF0YUVpCiBfX1pON1dlYkNvcmU5
Rm9udENhY2hlMjlwdXJnZUluYWN0aXZlRm9udERhdGFJZk5lZWRlZEV2CitfX1pON1dlYkNvcmU5
Rm9udENhY2hlOWZvbnRDb3VudEV2CiBfX1pON1dlYkNvcmU5RnJhbWVUcmVlMTFhcHBlbmRDaGls
ZEVOM1dURjEwUGFzc1JlZlB0cklOU181RnJhbWVFRUUKIF9fWk43V2ViQ29yZTlGcmFtZVRyZWU3
c2V0TmFtZUVSS04zV1RGMTJBdG9taWNTdHJpbmdFCiBfX1pON1dlYkNvcmU5RnJhbWVUcmVlOWNs
ZWFyTmFtZUV2CkBAIC0xNjM0LDggKzE2MzQsOCBAQCBfX1pOSzNXVEY2U3RyaW5nMTRjcmVhdGVD
RlN0cmluZ0V2CiBfX1pOSzdXZWJDb3JlMTBDcmVkZW50aWFsMTJuc0NyZWRlbnRpYWxFdgogX19a
Tks3V2ViQ29yZTEwQ3JlZGVudGlhbDdpc0VtcHR5RXYKIF9fWk5LN1dlYkNvcmUxMEZsb2F0UG9p
bnRjdjdDR1BvaW50RXYKLV9fWk5LN1dlYkNvcmUxMEZvbnRSYW5nZXMyMGZvbnREYXRhRm9yQ2hh
cmFjdGVyRWkKLV9fWk5LN1dlYkNvcmUxMEZvbnRSYW5nZXMyMWZvbnREYXRhRm9yRmlyc3RSYW5n
ZUV2CitfX1pOSzdXZWJDb3JlMTBGb250UmFuZ2VzMTZmb250Rm9yQ2hhcmFjdGVyRWkKK19fWk5L
N1dlYkNvcmUxMEZvbnRSYW5nZXMxN2ZvbnRGb3JGaXJzdFJhbmdlRXYKIF9fWk5LN1dlYkNvcmUx
MExheW91dFJlY3Q4Y29udGFpbnNFUktTMF8KIF9fWk5LN1dlYkNvcmUxMFBsdWdpbkRhdGExNnN1
cHBvcnRzTWltZVR5cGVFUktOM1dURjZTdHJpbmdFTlMwXzE4QWxsb3dlZFBsdWdpblR5cGVzRQog
X19aTks3V2ViQ29yZTEwUmVuZGVyVGV4dDE2Zmlyc3RSdW5Mb2NhdGlvbkV2CkBAIC0xNjY1LDcg
KzE2NjUsNyBAQCBfX1pOSzdXZWJDb3JlMTBUaW1lUmFuZ2VzM2VuZEVqUmkKIF9fWk5LN1dlYkNv
cmUxMFRpbWVSYW5nZXM0Y29weUV2CiBfX1pOSzdXZWJDb3JlMTBUaW1lUmFuZ2VzNXN0YXJ0RWpS
aQogX19aTks3V2ViQ29yZTEwVGltZVJhbmdlczZsZW5ndGhFdgotX19aTks3V2ViQ29yZTExRm9u
dENhc2NhZGU1d2lkdGhFUktOU183VGV4dFJ1bkVQTjNXVEY3SGFzaFNldElQS05TXzE0U2ltcGxl
Rm9udERhdGFFTlM0XzdQdHJIYXNoSVM4X0VFTlM0XzEwSGFzaFRyYWl0c0lTOF9FRUVFUE5TXzEz
R2x5cGhPdmVyZmxvd0UKK19fWk5LN1dlYkNvcmUxMUZvbnRDYXNjYWRlNXdpZHRoRVJLTlNfN1Rl
eHRSdW5FUE4zV1RGN0hhc2hTZXRJUEtOU180Rm9udEVOUzRfN1B0ckhhc2hJUzhfRUVOUzRfMTBI
YXNoVHJhaXRzSVM4X0VFRUVQTlNfMTNHbHlwaE92ZXJmbG93RQogX19aTks3V2ViQ29yZTExRm9u
dENhc2NhZGU4ZHJhd1RleHRFUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfN1RleHRSdW5FUktO
U18xMEZsb2F0UG9pbnRFaWlOUzBfMjRDdXN0b21Gb250Tm90UmVhZHlBY3Rpb25FCiBfX1pOSzdX
ZWJDb3JlMTFGb250Q2FzY2FkZWVxRVJLUzBfCiBfX1pOSzdXZWJDb3JlMTFGcmFtZUxvYWRlcjEw
aXNDb21wbGV0ZUV2CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29y
ZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9X
ZWJDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTgwMjcsNiArODAy
Nyw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGbG9h
dFJlY3QuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhp
Y3NcRmxvYXRSb3VuZGVkUmVjdC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxw
bGF0Zm9ybVxncmFwaGljc1xGbG9hdFNpemUuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGb250Q2FjaGUuY3BwIiAvPgogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udENhc2NhZGUuY3BwIiAvPgogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udERlc2NyaXB0aW9u
LmNwcCIgLz4KQEAgLTgwNjksNyArODA3MCw2IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxwbGF0Zm9ybVxncmFwaGljc1xSZWdpb24uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcUm91bmRlZFJlY3QuY3BwIiAvPgogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcU2hhZG93Qmx1ci5jcHAiIC8+Ci0gICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xTaW1wbGVGb250RGF0YS5j
cHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xUZXh0
UnVuLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNz
XFRleHRUcmFja1JlcHJlc2VudGF0aW9uLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXFdPRkZGaWxlRm9ybWF0LmNwcCIgLz4KQEAgLTE5NTE2LDYg
KzE5NTE2LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNz
XEZsb2F0Um91bmRlZFJlY3QuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRm
b3JtXGdyYXBoaWNzXEZsb2F0U2l6ZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cGxhdGZvcm1cZ3JhcGhpY3NcRmxvYXRTaXplSGFzaC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udENhY2hlLmgiIC8+CiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGb250Q2FzY2FkZS5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udERlc2NyaXB0aW9uLmgi
IC8+CkBAIC0xOTU2OCw3ICsxOTU2OSw2IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxw
bGF0Zm9ybVxncmFwaGljc1xSZWdpb24uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHBsYXRmb3JtXGdyYXBoaWNzXFJvdW5kZWRSZWN0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xTaGFkb3dCbHVyLmgiIC8+Ci0gICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xTaW1wbGVGb250RGF0YS5oIiAvPgogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcVGV4dFJ1bi5oIiAvPgog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcVGV4dFRyYWNrUmVw
cmVzZW50YXRpb24uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdy
YXBoaWNzXFVuaXRCZXppZXIuaCIgLz4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtNDcwNSw4ICs0NzA1LDggQEAKIAkJQjJDM0RBNjEwRDAwNkNENjAwRUY2RjI2IC8qIEZv
bnRDYXNjYWRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCMkMzREE1MDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCMkMzREE2MjBEMDA2Q0Q2MDBF
RjZGMjYgLyogRm9udENhY2hlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEIyQzNEQTUxMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FjaGUuY3BwICov
OyB9OwogCQlCMkMzREE2MzBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhY2hlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkMzREE1MjBEMDA2Q0Q2MDBF
RjZGMjYgLyogRm9udENhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKLQkJQjJDM0RBNjQwRDAwNkNENjAwRUY2RjI2IC8qIFNpbXBsZUZvbnREYXRh
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNE
QTUzMEQwMDZDRDYwMEVGNkYyNiAvKiBTaW1wbGVGb250RGF0YS5jcHAgKi87IH07Ci0JCUIyQzNE
QTY1MEQwMDZDRDYwMEVGNkYyNiAvKiBTaW1wbGVGb250RGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBNTQwRDAwNkNENjAwRUY2RjI2IC8q
IFNpbXBsZUZvbnREYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJQjJDM0RBNjQwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBNTMwRDAwNkNENjAw
RUY2RjI2IC8qIEZvbnQuY3BwICovOyB9OworCQlCMkMzREE2NTBEMDA2Q0Q2MDBFRjZGMjYgLyog
Rm9udC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJD
M0RBNTQwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCMkMzREE2NjBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9u
dERlc2NyaXB0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCMkMzREE1NTBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udERlc2NyaXB0aW9uLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjJDM0RBNjcwRDAw
NkNENjAwRUY2RjI2IC8qIEZvbnRHbHlwaHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBNTYwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRHbHlw
aHMuY3BwICovOyB9OwogCQlCMkMzREE2ODBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udEdseXBocy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBNTcw
RDAwNkNENjAwRUY2RjI2IC8qIEZvbnRHbHlwaHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTIwODYsOCArMTIwODYsOCBAQAogCQlCMkMzREE1
MDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEZvbnRDYXNjYWRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUIyQzNEQTUxMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FjaGUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRDYWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUIyQzNEQTUyMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FjaGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRDYWNoZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlCMkMzREE1MzBEMDA2Q0Q2MDBFRjZGMjYgLyogU2ltcGxlRm9udERh
dGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpbXBsZUZvbnRE
YXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjJDM0RBNTQwRDAwNkNENjAw
RUY2RjI2IC8qIFNpbXBsZUZvbnREYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTaW1wbGVGb250RGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCMkMz
REE1MzBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRm9udC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUIy
QzNEQTU0MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBGb250Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQzNEQTU1
MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250RGVzY3JpcHRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEZvbnREZXNjcmlwdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlCMkMzREE1NjBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udEdseXBocy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udEdseXBocy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQzNEQTU3MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250R2x5
cGhzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb250R2x5cGhzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMDU2Myw4ICsyMDU2Myw4IEBACiAJCQkJMzcx
RjRGRkEwRDI1RTdGMzAwRUNFMEQ1IC8qIEZvbnRSYW5nZXMuaCAqLywKIAkJCQkwRjNERDQ0RDEy
RjVFQTFCMDAwRDkxOTAgLyogU2hhZG93Qmx1ci5jcHAgKi8sCiAJCQkJMEYzREQ0NEUxMkY1RUEx
QjAwMEQ5MTkwIC8qIFNoYWRvd0JsdXIuaCAqLywKLQkJCQlCMkMzREE1MzBEMDA2Q0Q2MDBFRjZG
MjYgLyogU2ltcGxlRm9udERhdGEuY3BwICovLAotCQkJCUIyQzNEQTU0MEQwMDZDRDYwMEVGNkYy
NiAvKiBTaW1wbGVGb250RGF0YS5oICovLAorCQkJCUIyQzNEQTUzMEQwMDZDRDYwMEVGNkYyNiAv
KiBGb250LmNwcCAqLywKKwkJCQlCMkMzREE1NDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5oICov
LAogCQkJCUNENjQxRUIyMTgxOEY1RUQwMEVFNEM0MSAvKiBTb3VyY2VCdWZmZXJQcml2YXRlLmgg
Ki8sCiAJCQkJQ0RDOEI1QUMxODA0QUU1RDAwMTZFNjg1IC8qIFNvdXJjZUJ1ZmZlclByaXZhdGVD
bGllbnQuaCAqLywKIAkJCQlCMjM1NDBGMDBEMDA3ODJFMDAyMzgyRkEgLyogU3RyaW5nVHJ1bmNh
dG9yLmNwcCAqLywKQEAgLTI2MDIyLDcgKzI2MDIyLDcgQEAKIAkJCQkxQTRBOTU0RTBCNEVEQ0NC
MDAyRDhDM0MgLyogU2hhcmVkQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0IxRjAyRjEz
QjAyNUQyMDBGNTEwM0YgLyogU2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTkzMzA5RUEzMDk5RUI3OEMwMDU2RTU4MSAvKiBTaGFyZWRUaW1lci5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJQjJDM0RBNjUwRDAwNkNENjAwRUY2RjI2IC8qIFNpbXBsZUZvbnREYXRhLmgg
aW4gSGVhZGVycyAqLywKKwkJCQlCMkMzREE2NTBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRTQ4OTQ0QTMxODBCNTdEODAwRjE2NUQ4IC8qIFNpbXBsZUxpbmVM
YXlvdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0RTlCMTFEMTgxNDU2OUMwMDNBQ0NERiAvKiBT
aW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNEU5QjExOTE4
MTA5MTZGMDAzQUNDREYgLyogU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmggaW4gSGVhZGVycyAq
LywKQEAgLTI5NDU0LDcgKzI5NDU0LDcgQEAKIAkJCQkxQTRBOTU1MjBCNEVEQ0ZGMDAyRDhDM0Mg
LyogU2hhcmVkQnVmZmVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRTQ1MzkwNDYwRUFGRDYz
NzAwMzY5NUM4IC8qIFNoYXJlZFRpbWVySU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlF
QTIwOTlFQjc4QzAwNTZFNTgxIC8qIFNoYXJlZFRpbWVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCi0J
CQkJQjJDM0RBNjQwRDAwNkNENjAwRUY2RjI2IC8qIFNpbXBsZUZvbnREYXRhLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCUIyQzNEQTY0MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTE2M0U4OEY3MTE4QTM5RDIwMEVEOTIzMSAvKiBTaW1wbGVGb250RGF0YUNv
cmVUZXh0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTM3RTY1OTUwMTYzQjEwQzIwMEVCNDU3NCAv
KiBTaW1wbGVGb250RGF0YUlPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUIyQUZGQzdGMEQwMEE1
QzEwMDMwMDc0RCAvKiBTaW1wbGVGb250RGF0YU1hYy5tbSBpbiBTb3VyY2VzICovLApJbmRleDog
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXJJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9p
b3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0JKHJldmlzaW9uIDE3ODg1NykK
KysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVySU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNzU4LDcgKzE3NTgsNyBAQCBzdGF0
aWMgdm9pZCBBWEF0dHJpYnV0ZVN0cmluZ1NldFN0eWxlKE5TCiAgICAgUmVuZGVyU3R5bGUmIHN0
eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7CiAgICAgCiAgICAgLy8gc2V0IGJhc2ljIGZvbnQgaW5m
bwotICAgIEFYQXR0cmlidXRlU3RyaW5nU2V0Rm9udChhdHRyU3RyaW5nLCBzdHlsZS5mb250Q2Fz
Y2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmdldENURm9udCgpLCByYW5nZSk7CisgICAgQVhBdHRy
aWJ1dGVTdHJpbmdTZXRGb250KGF0dHJTdHJpbmcsIHN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFy
eUZvbnQoKS5nZXRDVEZvbnQoKSwgcmFuZ2UpOwogICAgICAgICAgICAgICAgIAogICAgIGludCBk
ZWNvciA9IHN0eWxlLnRleHREZWNvcmF0aW9uc0luRWZmZWN0KCk7CiAgICAgaWYgKChkZWNvciAm
IChUZXh0RGVjb3JhdGlvblVuZGVybGluZSB8IFRleHREZWNvcmF0aW9uTGluZVRocm91Z2gpKSAh
PSAwKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlckJhc2UubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlLm1tCShy
ZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYg
KzQ2LDcgQEAKICNpbXBvcnQgIkNocm9tZUNsaWVudC5oIgogI2ltcG9ydCAiQ29sb3JNYWMuaCIK
ICNpbXBvcnQgIkNvbnRleHRNZW51Q29udHJvbGxlci5oIgorI2ltcG9ydCAiRm9udC5oIgogI2lt
cG9ydCAiRm9udENhc2NhZGUuaCIKICNpbXBvcnQgIkZyYW1lLmgiCiAjaW1wb3J0ICJGcmFtZUxv
YWRlckNsaWVudC5oIgpAQCAtNjMsNyArNjQsNiBAQAogI2ltcG9ydCAiUmVuZGVyVmlldy5oIgog
I2ltcG9ydCAiUmVuZGVyV2lkZ2V0LmgiCiAjaW1wb3J0ICJTY3JvbGxWaWV3LmgiCi0jaW1wb3J0
ICJTaW1wbGVGb250RGF0YS5oIgogI2ltcG9ydCAiVGV4dENoZWNrZXJDbGllbnQuaCIKICNpbXBv
cnQgIlRleHRDaGVja2luZ0hlbHBlci5oIgogI2ltcG9ydCAiVmlzaWJsZVVuaXRzLmgiCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQkocmV2aXNpb24gMTc4ODU3
KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbXBv
cnQgIkNvbG9yTWFjLmgiCiAjaW1wb3J0ICJDb250ZXh0TWVudUNvbnRyb2xsZXIuaCIKICNpbXBv
cnQgIkVkaXRvci5oIgorI2ltcG9ydCAiRm9udC5oIgogI2ltcG9ydCAiRm9udENhc2NhZGUuaCIK
ICNpbXBvcnQgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW1wb3J0ICJGcmFtZVNlbGVjdGlvbi5o
IgpAQCAtNjQsNyArNjUsNiBAQAogI2ltcG9ydCAiUmVuZGVyVmlldy5oIgogI2ltcG9ydCAiUmVu
ZGVyV2lkZ2V0LmgiCiAjaW1wb3J0ICJTY3JvbGxWaWV3LmgiCi0jaW1wb3J0ICJTaW1wbGVGb250
RGF0YS5oIgogI2ltcG9ydCAiVGV4dENoZWNrZXJDbGllbnQuaCIKICNpbXBvcnQgIlRleHRDaGVj
a2luZ0hlbHBlci5oIgogI2ltcG9ydCAiVGV4dEl0ZXJhdG9yLmgiCkBAIC04NDgsNyArODQ4LDcg
QEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVTdHJpbmdTZXRTdHlsZShOUwogICAgIGNvbnN0IFJl
bmRlclN0eWxlJiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwogICAgIAogICAgIC8vIHNldCBi
YXNpYyBmb250IGluZm8KLSAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldEZvbnQoYXR0clN0cmluZywg
TlNBY2Nlc3NpYmlsaXR5Rm9udFRleHRBdHRyaWJ1dGUsIHN0eWxlLmZvbnRDYXNjYWRlKCkucHJp
bWFyeUZvbnREYXRhKCkuZ2V0TlNGb250KCksIHJhbmdlKTsKKyAgICBBWEF0dHJpYnV0ZVN0cmlu
Z1NldEZvbnQoYXR0clN0cmluZywgTlNBY2Nlc3NpYmlsaXR5Rm9udFRleHRBdHRyaWJ1dGUsIHN0
eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKS5nZXROU0ZvbnQoKSwgcmFuZ2UpOwogICAg
IAogICAgIC8vIHNldCBiYXNpYyBjb2xvcnMKICAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldENvbG9y
KGF0dHJTdHJpbmcsIE5TQWNjZXNzaWJpbGl0eUZvcmVncm91bmRDb2xvclRleHRBdHRyaWJ1dGUs
IG5zQ29sb3Ioc3R5bGUudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpKSwg
cmFuZ2UpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0JKHJldmlzaW9uIDE3
ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC02NjksNyArNjY5LDcgQEAgLSAoTlNGb250ICopX2ZvbnQKICAgICBhdXRvIHJlbmRl
cmVyID0gY29yZShzZWxmKS0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAg
ICByZXR1cm4gbmlsOwotICAgIHJldHVybiByZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgp
LnByaW1hcnlGb250RGF0YSgpLmdldE5TRm9udCgpOworICAgIHJldHVybiByZW5kZXJlci0+c3R5
bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCkuZ2V0TlNGb250KCk7CiB9CiAjZWxzZQog
LSAoQ1RGb250UmVmKV9mb250CkBAIC02NzcsNyArNjc3LDcgQEAgLSAoQ1RGb250UmVmKV9mb250
CiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNvcmUoc2VsZiktPnJlbmRlcmVyKCk7CiAg
ICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4gcmVuZGVy
ZXItPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXRDVEZvbnQoKTsK
KyAgICByZXR1cm4gcmVuZGVyZXItPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgp
LmdldENURm9udCgpOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NG
b250RmFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNl
LmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTAgKzMwLDEwIEBACiAjaW5jbHVkZSAiQ1NTRm9u
dFNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ1NTU2VnbWVudGVkRm9udEZhY2UuaCIKICNpbmNsdWRl
ICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGb250RGVzY3JpcHRp
b24uaCIKICNpbmNsdWRlICJGb250TG9hZGVyLmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRG
ZWF0dXJlcy5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtMTA4LDcgKzEwOCw3IEBAIHZvaWQgQ1NTRm9udEZhY2U6OmZvbnRMb2FkZWQo
Q1NTRm9udEZhY2UKICNlbmRpZgogfQogCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBDU1NG
b250RmFjZTo6Z2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24sIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpCitSZWZQdHI8Rm9u
dD4gQ1NTRm9udEZhY2U6OmZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24sIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpCiB7CiAgICAgbV9h
Y3RpdmVTb3VyY2UgPSAwOwogICAgIGlmICghaXNWYWxpZCgpKQpAQCAtMTI0LDcgKzEyNCw3IEBA
IFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IENTU0ZvbnRGYWNlOjoKIAogICAgIHNpemVfdCBz
aXplID0gbV9zb3VyY2VzLnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7
ICsraSkgewotICAgICAgICBpZiAoUmVmUHRyPFNpbXBsZUZvbnREYXRhPiByZXN1bHQgPSBtX3Nv
dXJjZXNbaV0tPmdldEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgc3ludGhldGljQm9sZCwgc3lu
dGhldGljSXRhbGljLCBmb250U2VsZWN0b3IpKSB7CisgICAgICAgIGlmIChSZWZQdHI8Rm9udD4g
cmVzdWx0ID0gbV9zb3VyY2VzW2ldLT5mb250KGZvbnREZXNjcmlwdGlvbiwgc3ludGhldGljQm9s
ZCwgc3ludGhldGljSXRhbGljLCBmb250U2VsZWN0b3IpKSB7CiAgICAgICAgICAgICBtX2FjdGl2
ZVNvdXJjZSA9IG1fc291cmNlc1tpXS5nZXQoKTsKICNpZiBFTkFCTEUoRk9OVF9MT0FEX0VWRU5U
UykKICAgICAgICAgICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLmZvbnRMb2FkRXZlbnRzRW5hYmxlZCgpICYmIG1fbG9hZFN0YXRlID09IExvYWRpbmcgJiYg
bV9zb3VyY2VzW2ldLT5pc0xvYWRlZCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
Rm9udEZhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2Uu
aAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBDU1NTZWdtZW50ZWRGb250RmFjZTsKIGNsYXNzIEZvbnREZXNjcmlwdGlvbjsKLWNsYXNz
IFNpbXBsZUZvbnREYXRhOworY2xhc3MgRm9udDsKIAogY2xhc3MgQ1NTRm9udEZhY2UgOiBwdWJs
aWMgUmVmQ291bnRlZDxDU1NGb250RmFjZT4gewogcHVibGljOgpAQCAtNjUsNyArNjUsNyBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIGZvbnRMb2FkZWQoQ1NTRm9udEZhY2VTb3VyY2UqKTsKIAotICAg
IFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IGdldEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpOworICAgIFJl
ZlB0cjxGb250PiBmb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGJvb2wgc3ludGhldGljQm9s
ZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpOwogCiAgICAgc3RydWN0IFVuaWNvZGVSYW5nZSB7CiAg
ICAgICAgIFVuaWNvZGVSYW5nZShVQ2hhcjMyIGZyb20sIFVDaGFyMzIgdG8pCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5jcHAJKHJldmlzaW9uIDE3ODg1NykKKysr
IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDkgKzMyLDkgQEAKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgogI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRWxlbWVudEl0ZXJhdG9yLmgiCisjaW5jbHVk
ZSAiRm9udC5oIgogI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgogI2luY2x1ZGUgIkZvbnREZXNjcmlw
dGlvbi5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAKICNpZiBFTkFCTEUoU1ZHX09U
Rl9DT05WRVJURVIpCiAjaW5jbHVkZSAiRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oIgpAQCAtNzQs
MTAgKzc0LDEwIEBAIENTU0ZvbnRGYWNlU291cmNlOjp+Q1NTRm9udEZhY2VTb3VyY2UoKQogCiB2
b2lkIENTU0ZvbnRGYWNlU291cmNlOjpwcnVuZVRhYmxlKCkKIHsKLSAgICBpZiAobV9mb250RGF0
YVRhYmxlLmlzRW1wdHkoKSkKKyAgICBpZiAobV9mb250VGFibGUuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBtX2ZvbnREYXRhVGFibGUuY2xlYXIoKTsKKyAgICBtX2ZvbnRUYWJs
ZS5jbGVhcigpOwogfQogCiBib29sIENTU0ZvbnRGYWNlU291cmNlOjppc0xvYWRlZCgpIGNvbnN0
CkBAIC0xMDEsNyArMTAxLDcgQEAgdm9pZCBDU1NGb250RmFjZVNvdXJjZTo6Zm9udExvYWRlZChD
YWNoZQogICAgICAgICBtX2ZhY2UtPmZvbnRMb2FkZWQodGhpcyk7CiB9CiAKLVBhc3NSZWZQdHI8
U2ltcGxlRm9udERhdGE+IENTU0ZvbnRGYWNlU291cmNlOjpnZXRGb250RGF0YShjb25zdCBGb250
RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5
bnRoZXRpY0l0YWxpYywgQ1NTRm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IpCitSZWZQdHI8Rm9u
dD4gQ1NTRm9udEZhY2VTb3VyY2U6OmZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVz
Y3JpcHRpb24sIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMsIENTU0Zv
bnRTZWxlY3RvciogZm9udFNlbGVjdG9yKQogewogICAgIC8vIElmIHRoZSBmb250IGhhc24ndCBs
b2FkZWQgb3IgYW4gZXJyb3Igb2NjdXJyZWQsIHRoZW4gd2UndmUgZ290IG5vdGhpbmcuCiAgICAg
aWYgKCFpc1ZhbGlkKCkpCkBAIC0xMTIsMTggKzExMiwxNyBAQCBQYXNzUmVmUHRyPFNpbXBsZUZv
bnREYXRhPiBDU1NGb250RmFjZVNvCiAgICAgICAgICAgICAmJiAhbV9zdmdGb250RmFjZUVsZW1l
bnQKICNlbmRpZgogICAgICkgewotICAgICAgICAvLyBXZSdyZSBsb2NhbC4gSnVzdCByZXR1cm4g
YSBTaW1wbGVGb250RGF0YSBmcm9tIHRoZSBub3JtYWwgY2FjaGUuCisgICAgICAgIC8vIFdlJ3Jl
IGxvY2FsLiBKdXN0IHJldHVybiBhIEZvbnQgZnJvbSB0aGUgbm9ybWFsIGNhY2hlLgogICAgICAg
ICAvLyBXZSBkb24ndCB3YW50IHRvIGNoZWNrIGFsdGVybmF0ZSBmb250IGZhbWlseSBuYW1lcyBo
ZXJlLCBzbyBwYXNzIHRydWUgYXMgdGhlIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSBwYXJhbWV0ZXIu
CiAgICAgICAgIHJldHVybiBmb250Q2FjaGUoKS5mb250Rm9yRmFtaWx5KGZvbnREZXNjcmlwdGlv
biwgbV9zdHJpbmcsIHRydWUpOwogICAgIH0KIAotICAgIC8vIFNlZSBpZiB3ZSBoYXZlIGEgbWFw
cGluZyBpbiBvdXIgRm9udERhdGEgY2FjaGUuCiAgICAgdW5zaWduZWQgaGFzaEtleSA9IChmb250
RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSArIDEpIDw8IDUgfCBmb250RGVzY3JpcHRp
b24ud2lkdGhWYXJpYW50KCkgPDwgMwogICAgICAgICAgICAgICAgICAgICAgICB8IChmb250RGVz
Y3JpcHRpb24ub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCA/IDQgOiAwKSB8IChzeW50aGV0aWNC
b2xkID8gMiA6IDApIHwgKHN5bnRoZXRpY0l0YWxpYyA/IDEgOiAwKTsKIAotICAgIFJlZlB0cjxT
aW1wbGVGb250RGF0YT4gZm9udERhdGEgPSBtX2ZvbnREYXRhVGFibGUuYWRkKGhhc2hLZXksIG51
bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKLSAgICBpZiAoZm9udERhdGEpCi0gICAgICAgIHJldHVy
biBmb250RGF0YS5yZWxlYXNlKCk7CisgICAgUmVmUHRyPEZvbnQ+IGZvbnQgPSBtX2ZvbnRUYWJs
ZS5hZGQoaGFzaEtleSwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOworICAgIGlmIChmb250KQor
ICAgICAgICByZXR1cm4gZm9udC5yZWxlYXNlKCk7CiAKICAgICAvLyBJZiB3ZSBhcmUgc3RpbGwg
bG9hZGluZywgdGhlbiB3ZSBsZXQgdGhlIHN5c3RlbSBwaWNrIGEgZm9udC4KICAgICBpZiAoaXNM
b2FkZWQoKSkgewpAQCAtMTM2LDcgKzEzNSw3IEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+
IENTU0ZvbnRGYWNlU28KICAgICAgICAgICAgIGlmICghbV9mb250LT5lbnN1cmVDdXN0b21Gb250
RGF0YShoYXNFeHRlcm5hbFNWR0ZvbnQsIG1fc3RyaW5nKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAotICAgICAgICAgICAgZm9udERhdGEgPSBtX2ZvbnQtPmdldEZvbnREYXRh
KGZvbnREZXNjcmlwdGlvbiwgbV9zdHJpbmcsIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxp
YywgaGFzRXh0ZXJuYWxTVkdGb250KTsKKyAgICAgICAgICAgIGZvbnQgPSBtX2ZvbnQtPmNyZWF0
ZUZvbnQoZm9udERlc2NyaXB0aW9uLCBtX3N0cmluZywgc3ludGhldGljQm9sZCwgc3ludGhldGlj
SXRhbGljLCBoYXNFeHRlcm5hbFNWR0ZvbnQpOwogICAgICAgICB9IGVsc2UgewogI2lmIEVOQUJM
RShTVkdfRk9OVFMpCiAgICAgICAgICAgICAvLyBJbi1Eb2N1bWVudCBTVkcgRm9udHMKQEAgLTE1
Miw5ICsxNTEsOSBAQCBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBDU1NGb250RmFjZVNvCiAg
ICAgICAgICAgICAgICAgaWYgKCFtX2dlbmVyYXRlZE9URkJ1ZmZlcikKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEZv
bnRDdXN0b21QbGF0Zm9ybURhdGE+IGN1c3RvbVBsYXRmb3JtRGF0YSA9IGNyZWF0ZUZvbnRDdXN0
b21QbGF0Zm9ybURhdGEoKm1fZ2VuZXJhdGVkT1RGQnVmZmVyKTsKLSAgICAgICAgICAgICAgICBm
b250RGF0YSA9IFNpbXBsZUZvbnREYXRhOjpjcmVhdGUoY3VzdG9tUGxhdGZvcm1EYXRhLT5mb250
UGxhdGZvcm1EYXRhKHN0YXRpY19jYXN0PGludD4oZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4
ZWxTaXplKCkpLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMsIGZvbnREZXNjcmlwdGlv
bi5vcmllbnRhdGlvbigpLCBmb250RGVzY3JpcHRpb24ud2lkdGhWYXJpYW50KCksIGZvbnREZXNj
cmlwdGlvbi5yZW5kZXJpbmdNb2RlKCkpLCB0cnVlLCBmYWxzZSk7CisgICAgICAgICAgICAgICAg
Zm9udCA9IEZvbnQ6OmNyZWF0ZShjdXN0b21QbGF0Zm9ybURhdGEtPmZvbnRQbGF0Zm9ybURhdGEo
c3RhdGljX2Nhc3Q8aW50Pihmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSksIHN5
bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYywgZm9udERlc2NyaXB0aW9uLm9yaWVudGF0aW9u
KCksIGZvbnREZXNjcmlwdGlvbi53aWR0aFZhcmlhbnQoKSwgZm9udERlc2NyaXB0aW9uLnJlbmRl
cmluZ01vZGUoKSksIHRydWUsIGZhbHNlKTsKICNlbHNlCi0gICAgICAgICAgICAgICAgZm9udERh
dGEgPSBTaW1wbGVGb250RGF0YTo6Y3JlYXRlKHN0ZDo6bWFrZV91bmlxdWU8U1ZHRm9udERhdGE+
KG1fc3ZnRm9udEZhY2VFbGVtZW50LmdldCgpKSwgZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4
ZWxTaXplKCksIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYyk7CisgICAgICAgICAgICAg
ICAgZm9udCA9IEZvbnQ6OmNyZWF0ZShzdGQ6Om1ha2VfdW5pcXVlPFNWR0ZvbnREYXRhPihtX3N2
Z0ZvbnRGYWNlRWxlbWVudC5nZXQoKSksIGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6
ZSgpLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMpOwogI2VuZGlmCiAgICAgICAgICAg
ICB9CiAjZW5kaWYKQEAgLTE2NCwxMiArMTYzLDEyIEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERh
dGE+IENTU0ZvbnRGYWNlU28KICAgICAgICAgLy8gYW5kIHRoZSBsb2FkZXIgbWF5IGludm9rZSBh
cmJpdHJhcnkgZGVsZWdhdGUgb3IgZXZlbnQgaGFuZGxlciBjb2RlLgogICAgICAgICBmb250U2Vs
ZWN0b3ItPmJlZ2luTG9hZGluZ0ZvbnRTb29uKG1fZm9udC5nZXQoKSk7CiAKLSAgICAgICAgUmVm
PFNpbXBsZUZvbnREYXRhPiBwbGFjZWhvbGRlckZvbnQgPSBmb250Q2FjaGUoKS5sYXN0UmVzb3J0
RmFsbGJhY2tGb250KGZvbnREZXNjcmlwdGlvbik7Ci0gICAgICAgIFJlZjxTaW1wbGVGb250RGF0
YT4gcGxhY2Vob2xkZXJGb250Q29weUluTG9hZGluZ1N0YXRlID0gU2ltcGxlRm9udERhdGE6OmNy
ZWF0ZShwbGFjZWhvbGRlckZvbnQtPnBsYXRmb3JtRGF0YSgpLCB0cnVlLCB0cnVlKTsKKyAgICAg
ICAgUmVmPEZvbnQ+IHBsYWNlaG9sZGVyRm9udCA9IGZvbnRDYWNoZSgpLmxhc3RSZXNvcnRGYWxs
YmFja0ZvbnQoZm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgUmVmPEZvbnQ+IHBsYWNlaG9sZGVy
Rm9udENvcHlJbkxvYWRpbmdTdGF0ZSA9IEZvbnQ6OmNyZWF0ZShwbGFjZWhvbGRlckZvbnQtPnBs
YXRmb3JtRGF0YSgpLCB0cnVlLCB0cnVlKTsKICAgICAgICAgcmV0dXJuIFdURjo6bW92ZShwbGFj
ZWhvbGRlckZvbnRDb3B5SW5Mb2FkaW5nU3RhdGUpOwogICAgIH0KIAotICAgIHJldHVybiBmb250
RGF0YS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIGZvbnQucmVsZWFzZSgpOwogfQogCiAjaWYgRU5B
QkxFKEZPTlRfTE9BRF9FVkVOVFMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZh
Y2VTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VT
b3VyY2UuaAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRG
YWNlU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDggKzQyLDggQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogY2xhc3MgQ2FjaGVkRm9udDsKIGNsYXNzIENTU0ZvbnRGYWNlOwogY2xhc3MgQ1NT
Rm9udFNlbGVjdG9yOworY2xhc3MgRm9udDsKIGNsYXNzIEZvbnREZXNjcmlwdGlvbjsKLWNsYXNz
IFNpbXBsZUZvbnREYXRhOwogCiBjbGFzcyBDU1NGb250RmFjZVNvdXJjZSBmaW5hbCA6IHB1Ymxp
YyBDYWNoZWRGb250Q2xpZW50IHsKIHB1YmxpYzoKQEAgLTU5LDcgKzU5LDcgQEAgcHVibGljOgog
CiAgICAgdmlydHVhbCB2b2lkIGZvbnRMb2FkZWQoQ2FjaGVkRm9udCopIG92ZXJyaWRlOwogCi0g
ICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gZ2V0Rm9udERhdGEoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYywgQ1NTRm9u
dFNlbGVjdG9yKik7CisgICAgUmVmUHRyPEZvbnQ+IGZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9u
JiwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYywgQ1NTRm9udFNlbGVj
dG9yKik7CiAKICAgICB2b2lkIHBydW5lVGFibGUoKTsKIApAQCAtODEsNyArODEsNyBAQCBwcml2
YXRlOgogICAgIEF0b21pY1N0cmluZyBtX3N0cmluZzsgLy8gVVJJIGZvciByZW1vdGUsIGJ1aWx0
LWluIGZvbnQgbmFtZSBmb3IgbG9jYWwuCiAgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVk
Rm9udD4gbV9mb250OyAvLyBGb3IgcmVtb3RlIGZvbnRzLCBhIHBvaW50ZXIgdG8gb3VyIGNhY2hl
ZCByZXNvdXJjZS4KICAgICBDU1NGb250RmFjZSogbV9mYWNlOyAvLyBPdXIgb3duaW5nIGZvbnQg
ZmFjZS4KLSAgICBIYXNoTWFwPHVuc2lnbmVkLCBSZWZQdHI8U2ltcGxlRm9udERhdGE+PiBtX2Zv
bnREYXRhVGFibGU7IC8vIFRoZSBoYXNoIGtleSBpcyBjb21wb3NlZCBvZiBzaXplIHN5bnRoZXRp
YyBzdHlsZXMuCisgICAgSGFzaE1hcDx1bnNpZ25lZCwgUmVmUHRyPEZvbnQ+PiBtX2ZvbnRUYWJs
ZTsgLy8gVGhlIGhhc2gga2V5IGlzIGNvbXBvc2VkIG9mIHNpemUgc3ludGhldGljIHN0eWxlcy4K
IAogI2lmIEVOQUJMRShTVkdfT1RGX0NPTlZFUlRFUikKICAgICBSZWZQdHI8U2hhcmVkQnVmZmVy
PiBtX2dlbmVyYXRlZE9URkJ1ZmZlcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250
U2VsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2Vs
ZWN0b3IuY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9u
dFNlbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTMgKzQwLDEzIEBACiAjaW5jbHVk
ZSAiQ1NTVmFsdWVMaXN0LmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKICNp
bmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGb250Q2Fj
aGUuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5j
bHVkZSAiU1ZHRm9udEZhY2VFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNs
dWRlICJTZXR0aW5ncy5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5jbHVkZSAi
U3R5bGVQcm9wZXJ0aWVzLmgiCiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUg
IlN0eWxlUnVsZS5oIgpAQCAtNjEyLDcgKzYxMiw3IEBAIGJvb2wgQ1NTRm9udFNlbGVjdG9yOjpy
ZXNvbHZlc0ZhbWlseUZvcigKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXNpemVfdCBDU1NGb250
U2VsZWN0b3I6OmZhbGxiYWNrRm9udERhdGFDb3VudCgpCitzaXplX3QgQ1NTRm9udFNlbGVjdG9y
OjpmYWxsYmFja0ZvbnRDb3VudCgpCiB7CiAgICAgaWYgKCFtX2RvY3VtZW50KQogICAgICAgICBy
ZXR1cm4gMDsKQEAgLTYyMyw3ICs2MjMsNyBAQCBzaXplX3QgQ1NTRm9udFNlbGVjdG9yOjpmYWxs
YmFja0ZvbnREYXRhCiAgICAgcmV0dXJuIDA7CiB9CiAKLVBhc3NSZWZQdHI8U2ltcGxlRm9udERh
dGE+IENTU0ZvbnRTZWxlY3Rvcjo6ZmFsbGJhY2tGb250RGF0YUF0KGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZm9udERlc2NyaXB0aW9uLCBzaXplX3QgaW5kZXgpCitQYXNzUmVmUHRyPEZvbnQ+IENT
U0ZvbnRTZWxlY3Rvcjo6ZmFsbGJhY2tGb250QXQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHRpb24sIHNpemVfdCBpbmRleCkKIHsKICAgICBBU1NFUlRfVU5VU0VEKGluZGV4LCAh
aW5kZXgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5oCShyZXZpc2lv
biAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI3LDggKzI3LDggQEAKICNkZWZpbmUgQ1NTRm9udFNlbGVjdG9yX2gKIAog
I2luY2x1ZGUgIkNhY2hlZFJlc291cmNlSGFuZGxlLmgiCisjaW5jbHVkZSAiRm9udC5oIgogI2lu
Y2x1ZGUgIkZvbnRTZWxlY3Rvci5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5j
bHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KQEAgLTU5LDggKzU5LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdW5zaWduZWQgdW5pcXVl
SWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3VuaXF1ZUlkOyB9CiAKICAgICB2aXJ0dWFs
IEZvbnRSYW5nZXMgZm9udFJhbmdlc0ZvckZhbWlseShjb25zdCBGb250RGVzY3JpcHRpb24mLCBj
b25zdCBBdG9taWNTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHNpemVfdCBmYWxsYmFj
a0ZvbnREYXRhQ291bnQoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U2ltcGxl
Rm9udERhdGE+IGZhbGxiYWNrRm9udERhdGFBdChjb25zdCBGb250RGVzY3JpcHRpb24mLCBzaXpl
X3QpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgc2l6ZV90IGZhbGxiYWNrRm9udENvdW50KCkgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEZvbnQ+IGZhbGxiYWNrRm9udEF0KGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYsIHNpemVfdCkgb3ZlcnJpZGU7CiAgICAgQ1NTU2VnbWVudGVkRm9u
dEZhY2UqIGdldEZvbnRGYWNlKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0
cmluZyYgZmFtaWx5KTsKIAogICAgIHZpcnR1YWwgYm9vbCByZXNvbHZlc0ZhbWlseUZvcihjb25z
dCBGb250RGVzY3JpcHRpb24mKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291
cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzAsOSArMzAsOSBAQAogI2luY2x1ZGUgIkNTU0ZvbnRGYWNlU291cmNlLmgiCiAjaW5jbHVk
ZSAiQ1NTRm9udFNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJG
b250LmgiCiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiUnVudGltZUVu
YWJsZWRGZWF0dXJlcy5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApAQCAtOTAsMjEgKzkwLDIxIEBAIHZvaWQgQ1NTU2VnbWVudGVkRm9udEZh
Y2U6OmFwcGVuZEZvbnRGYWMKICAgICBtX2ZvbnRGYWNlcy5hcHBlbmQoZm9udEZhY2UpOwogfQog
Ci1zdGF0aWMgdm9pZCBhcHBlbmRGb250RGF0YVdpdGhJbnZhbGlkVW5pY29kZVJhbmdlSWZMb2Fk
aW5nKEZvbnRSYW5nZXMmIHJhbmdlcywgUmVmPFNpbXBsZUZvbnREYXRhPiYmIGZvbnREYXRhLCBj
b25zdCBWZWN0b3I8Q1NTRm9udEZhY2U6OlVuaWNvZGVSYW5nZT4mIHVuaWNvZGVSYW5nZXMpCitz
dGF0aWMgdm9pZCBhcHBlbmRGb250V2l0aEludmFsaWRVbmljb2RlUmFuZ2VJZkxvYWRpbmcoRm9u
dFJhbmdlcyYgcmFuZ2VzLCBSZWY8Rm9udD4mJiBmb250LCBjb25zdCBWZWN0b3I8Q1NTRm9udEZh
Y2U6OlVuaWNvZGVSYW5nZT4mIHVuaWNvZGVSYW5nZXMpCiB7Ci0gICAgaWYgKGZvbnREYXRhLT5p
c0xvYWRpbmcoKSkgewotICAgICAgICByYW5nZXMuYXBwZW5kUmFuZ2UoRm9udFJhbmdlczo6UmFu
Z2UoMCwgMCwgV1RGOjptb3ZlKGZvbnREYXRhKSkpOworICAgIGlmIChmb250LT5pc0xvYWRpbmco
KSkgeworICAgICAgICByYW5nZXMuYXBwZW5kUmFuZ2UoRm9udFJhbmdlczo6UmFuZ2UoMCwgMCwg
V1RGOjptb3ZlKGZvbnQpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICB1bnNpZ25l
ZCBudW1SYW5nZXMgPSB1bmljb2RlUmFuZ2VzLnNpemUoKTsKICAgICBpZiAoIW51bVJhbmdlcykg
ewotICAgICAgICByYW5nZXMuYXBwZW5kUmFuZ2UoRm9udFJhbmdlczo6UmFuZ2UoMCwgMHg3RkZG
RkZGRiwgV1RGOjptb3ZlKGZvbnREYXRhKSkpOworICAgICAgICByYW5nZXMuYXBwZW5kUmFuZ2Uo
Rm9udFJhbmdlczo6UmFuZ2UoMCwgMHg3RkZGRkZGRiwgV1RGOjptb3ZlKGZvbnQpKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgbnVtUmFu
Z2VzOyArK2opCi0gICAgICAgIHJhbmdlcy5hcHBlbmRSYW5nZShGb250UmFuZ2VzOjpSYW5nZSh1
bmljb2RlUmFuZ2VzW2pdLmZyb20oKSwgdW5pY29kZVJhbmdlc1tqXS50bygpLCBmb250RGF0YS5j
b3B5UmVmKCkpKTsKKyAgICAgICAgcmFuZ2VzLmFwcGVuZFJhbmdlKEZvbnRSYW5nZXM6OlJhbmdl
KHVuaWNvZGVSYW5nZXNbal0uZnJvbSgpLCB1bmljb2RlUmFuZ2VzW2pdLnRvKCksIGZvbnQuY29w
eVJlZigpKSk7CiB9CiAKIEZvbnRSYW5nZXMgQ1NTU2VnbWVudGVkRm9udEZhY2U6OmZvbnRSYW5n
ZXMoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pCkBAIC0xMjgsOCArMTI4
LDggQEAgRm9udFJhbmdlcyBDU1NTZWdtZW50ZWRGb250RmFjZTo6Zm9udFJhbgogICAgICAgICAg
ICAgRm9udFRyYWl0c01hc2sgdHJhaXRzTWFzayA9IGZhY2UtPnRyYWl0c01hc2soKTsKICAgICAg
ICAgICAgIGJvb2wgc3ludGhldGljQm9sZCA9ICEodHJhaXRzTWFzayAmIChGb250V2VpZ2h0NjAw
TWFzayB8IEZvbnRXZWlnaHQ3MDBNYXNrIHwgRm9udFdlaWdodDgwME1hc2sgfCBGb250V2VpZ2h0
OTAwTWFzaykpICYmIChkZXNpcmVkVHJhaXRzTWFzayAmIChGb250V2VpZ2h0NjAwTWFzayB8IEZv
bnRXZWlnaHQ3MDBNYXNrIHwgRm9udFdlaWdodDgwME1hc2sgfCBGb250V2VpZ2h0OTAwTWFzaykp
OwogICAgICAgICAgICAgYm9vbCBzeW50aGV0aWNJdGFsaWMgPSAhKHRyYWl0c01hc2sgJiBGb250
U3R5bGVJdGFsaWNNYXNrKSAmJiAoZGVzaXJlZFRyYWl0c01hc2sgJiBGb250U3R5bGVJdGFsaWNN
YXNrKTsKLSAgICAgICAgICAgIGlmIChSZWZQdHI8U2ltcGxlRm9udERhdGE+IGZhY2VGb250RGF0
YSA9IGZhY2UtPmdldEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgc3ludGhldGljQm9sZCwgc3lu
dGhldGljSXRhbGljKSkKLSAgICAgICAgICAgICAgICBhcHBlbmRGb250RGF0YVdpdGhJbnZhbGlk
VW5pY29kZVJhbmdlSWZMb2FkaW5nKGZvbnRSYW5nZXMsIGZhY2VGb250RGF0YS5yZWxlYXNlTm9u
TnVsbCgpLCBmYWNlLT5yYW5nZXMoKSk7CisgICAgICAgICAgICBpZiAoUmVmUHRyPEZvbnQ+IGZh
Y2VGb250ID0gZmFjZS0+Zm9udChmb250RGVzY3JpcHRpb24sIHN5bnRoZXRpY0JvbGQsIHN5bnRo
ZXRpY0l0YWxpYykpCisgICAgICAgICAgICAgICAgYXBwZW5kRm9udFdpdGhJbnZhbGlkVW5pY29k
ZVJhbmdlSWZMb2FkaW5nKGZvbnRSYW5nZXMsIGZhY2VGb250LnJlbGVhc2VOb25OdWxsKCksIGZh
Y2UtPnJhbmdlcygpKTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gZm9udFJhbmdlczsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBA
QCBjbGFzcyBIaXRUZXN0UmVzdWx0OwogY2xhc3MgS2lsbFJpbmc7CiBjbGFzcyBQYXN0ZWJvYXJk
OwogY2xhc3MgU2hhcmVkQnVmZmVyOwotY2xhc3MgU2ltcGxlRm9udERhdGE7CitjbGFzcyBGb250
OwogY2xhc3MgU3BlbGxDaGVja1JlcXVlc3Q7CiBjbGFzcyBTcGVsbENoZWNrZXI7CiBjbGFzcyBT
dHlsZVByb3BlcnRpZXM7CkBAIC00MjIsNyArNDIyLDcgQEAgcHVibGljOgogI2lmIFBMQVRGT1JN
KENPQ09BKQogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZW5kZXJTdHlsZSogc3R5bGVGb3JT
ZWxlY3Rpb25TdGFydChGcmFtZSogLCBOb2RlICombm9kZVRvUmVtb3ZlKTsKICAgICBXRUJDT1JF
X0VYUE9SVCBib29sIGluc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVvdGVkQ29udGVudCgpOwot
ICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250Rm9yU2VsZWN0aW9u
KGJvb2wmKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBGb250KiBmb250Rm9yU2Vs
ZWN0aW9uKGJvb2wmKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBOU0RpY3Rpb25hcnkgKmZv
bnRBdHRyaWJ1dGVzRm9yU2VsZWN0aW9uU3RhcnQoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9S
VCBTdHJpbmcgc3RyaW5nU2VsZWN0aW9uRm9yUGFzdGVib2FyZCgpOwogICAgIFN0cmluZyBzdHJp
bmdTZWxlY3Rpb25Gb3JQYXN0ZWJvYXJkV2l0aEltYWdlQWx0VGV4dCgpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbQkocmV2aXNpb24gMTc4
ODU3KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTE0LDcgKzExMTQsNyBAQCBzdGF0aWMgUGxhdGZvcm1Gb250ICpf
Zm9udChFbGVtZW50JiBlbGVtCiAgICAgYXV0byByZW5kZXJlciA9IGVsZW1lbnQucmVuZGVyZXIo
KTsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiBy
ZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmdldE5TRm9u
dCgpOworICAgIHJldHVybiByZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlG
b250KCkuZ2V0TlNGb250KCk7CiB9CiAjZWxzZQogc3RhdGljIFBsYXRmb3JtRm9udCAqX2ZvbnQo
RWxlbWVudCYgZWxlbWVudCkKQEAgLTExMjIsNyArMTEyMiw3IEBAIHN0YXRpYyBQbGF0Zm9ybUZv
bnQgKl9mb250KEVsZW1lbnQmIGVsZW0KICAgICBhdXRvIHJlbmRlcmVyID0gZWxlbWVudC5yZW5k
ZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgcmV0
dXJuIChQbGF0Zm9ybUZvbnQgKilyZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1h
cnlGb250RGF0YSgpLmdldENURm9udCgpOworICAgIHJldHVybiAoUGxhdGZvcm1Gb250ICopcmVu
ZGVyZXItPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpLmdldENURm9udCgpOwog
fQogI2VuZGlmCiAKQEAgLTI1OTQsMTAgKzI1OTQsMTAgQEAgTlNBdHRyaWJ1dGVkU3RyaW5nICpl
ZGl0aW5nQXR0cmlidXRlZFN0cgogICAgICAgICAgICAgW2F0dHJzLmdldCgpIHNldE9iamVjdDpb
TlNOdW1iZXIgbnVtYmVyV2l0aEludGVnZXI6TlNVbmRlcmxpbmVTdHlsZVNpbmdsZV0gZm9yS2V5
Ok5TVW5kZXJsaW5lU3R5bGVBdHRyaWJ1dGVOYW1lXTsKICAgICAgICAgaWYgKHN0eWxlLnRleHRE
ZWNvcmF0aW9uc0luRWZmZWN0KCkgJiBUZXh0RGVjb3JhdGlvbkxpbmVUaHJvdWdoKQogICAgICAg
ICAgICAgW2F0dHJzLmdldCgpIHNldE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aEludGVnZXI6
TlNVbmRlcmxpbmVTdHlsZVNpbmdsZV0gZm9yS2V5Ok5TU3RyaWtldGhyb3VnaFN0eWxlQXR0cmli
dXRlTmFtZV07Ci0gICAgICAgIGlmIChOU0ZvbnQgKmZvbnQgPSBzdHlsZS5mb250Q2FzY2FkZSgp
LnByaW1hcnlGb250RGF0YSgpLmdldE5TRm9udCgpKQorICAgICAgICBpZiAoTlNGb250ICpmb250
ID0gc3R5bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpLmdldE5TRm9udCgpKQogICAgICAg
ICAgICAgW2F0dHJzLmdldCgpIHNldE9iamVjdDpmb250IGZvcktleTpOU0ZvbnRBdHRyaWJ1dGVO
YW1lXTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgW2F0dHJzLmdldCgpIHNldE9iamVjdDpb
Zm9udE1hbmFnZXIgY29udmVydEZvbnQ6V2ViRGVmYXVsdEZvbnQoKSB0b1NpemU6c3R5bGUuZm9u
dENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5wbGF0Zm9ybURhdGEoKS5zaXplKCldIGZvcktl
eTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKKyAgICAgICAgICAgIFthdHRycy5nZXQoKSBzZXRPYmpl
Y3Q6W2ZvbnRNYW5hZ2VyIGNvbnZlcnRGb250OldlYkRlZmF1bHRGb250KCkgdG9TaXplOnN0eWxl
LmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKS5wbGF0Zm9ybURhdGEoKS5zaXplKCldIGZvcktl
eTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKICAgICAgICAgaWYgKHN0eWxlLnZpc2l0ZWREZXBlbmRl
bnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKS5hbHBoYSgpKQogICAgICAgICAgICAgW2F0dHJzLmdl
dCgpIHNldE9iamVjdDpuc0NvbG9yKHN0eWxlLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9w
ZXJ0eUNvbG9yKSkgZm9yS2V5Ok5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07CiAgICAg
ICAgIGVsc2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0JKHJl
dmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5t
bQkod29ya2luZyBjb3B5KQpAQCAtMjAzLDcgKzIwMyw3IEBAIGJvb2wgRWRpdG9yOjppbnNlcnRQ
YXJhZ3JhcGhTZXBhcmF0b3JJblEKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotY29uc3QgU2ltcGxl
Rm9udERhdGEqIEVkaXRvcjo6Zm9udEZvclNlbGVjdGlvbihib29sJiBoYXNNdWx0aXBsZUZvbnRz
KSBjb25zdAorY29uc3QgRm9udCogRWRpdG9yOjpmb250Rm9yU2VsZWN0aW9uKGJvb2wmIGhhc011
bHRpcGxlRm9udHMpIGNvbnN0CiB7CiAgICAgaGFzTXVsdGlwbGVGb250cyA9IGZhbHNlOwogCkBA
IC0yMTEsOSArMjExLDkgQEAgY29uc3QgU2ltcGxlRm9udERhdGEqIEVkaXRvcjo6Zm9udEZvclNl
bAogICAgICAgICBOb2RlKiBub2RlVG9SZW1vdmU7CiAgICAgICAgIFJlbmRlclN0eWxlKiBzdHls
ZSA9IHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQoJm1fZnJhbWUsIG5vZGVUb1JlbW92ZSk7IC8vIHNl
dHMgbm9kZVRvUmVtb3ZlCiAKLSAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIHJlc3VsdCA9
IG51bGxwdHI7CisgICAgICAgIGNvbnN0IEZvbnQqIHJlc3VsdCA9IG51bGxwdHI7CiAgICAgICAg
IGlmIChzdHlsZSkKLSAgICAgICAgICAgIHJlc3VsdCA9ICZzdHlsZS0+Zm9udENhc2NhZGUoKS5w
cmltYXJ5Rm9udERhdGEoKTsKKyAgICAgICAgICAgIHJlc3VsdCA9ICZzdHlsZS0+Zm9udENhc2Nh
ZGUoKS5wcmltYXJ5Rm9udCgpOwogCiAgICAgICAgIGlmIChub2RlVG9SZW1vdmUpIHsKICAgICAg
ICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7CkBAIC0yMjQsNyArMjI0LDcgQEAgY29uc3QgU2ltcGxl
Rm9udERhdGEqIEVkaXRvcjo6Zm9udEZvclNlbAogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
IH0KIAotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250ID0gMDsKKyAgICBjb25zdCBGb250
KiBmb250ID0gMDsKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gbV9mcmFtZS5zZWxlY3Rpb24o
KS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmIChOb2RlKiBzdGFydE5vZGUgPSBhZGp1c3Rl
ZFNlbGVjdGlvblN0YXJ0Rm9yU3R5bGVDb21wdXRhdGlvbihtX2ZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpKS5kZXByZWNhdGVkTm9kZSgpKSB7CiAgICAgICAgIE5vZGUqIHBhc3RFbmQgPSBy
YW5nZS0+cGFzdExhc3ROb2RlKCk7CkBAIC0yMzUsNyArMjM1LDcgQEAgY29uc3QgU2ltcGxlRm9u
dERhdGEqIEVkaXRvcjo6Zm9udEZvclNlbAogICAgICAgICAgICAgaWYgKCFyZW5kZXJlcikKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBBcmUgdGhlcmUg
YW55IG5vZGUgdHlwZXMgdGhhdCBoYXZlIHJlbmRlcmVycywgYnV0IHRoYXQgd2Ugc2hvdWxkIGJl
IHNraXBwaW5nPwotICAgICAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEmIHByaW1hcnlGb250
ID0gcmVuZGVyZXItPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKTsKKyAg
ICAgICAgICAgIGNvbnN0IEZvbnQmIHByaW1hcnlGb250ID0gcmVuZGVyZXItPnN0eWxlKCkuZm9u
dENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpOwogICAgICAgICAgICAgaWYgKCFmb250KQogICAgICAg
ICAgICAgICAgIGZvbnQgPSAmcHJpbWFyeUZvbnQ7CiAgICAgICAgICAgICBlbHNlIGlmIChmb250
ICE9ICZwcmltYXJ5Rm9udCkgewpAQCAtMjU3LDcgKzI1Nyw3IEBAIE5TRGljdGlvbmFyeSogRWRp
dG9yOjpmb250QXR0cmlidXRlc0ZvclMKIAogICAgIE5TTXV0YWJsZURpY3Rpb25hcnkqIHJlc3Vs
dCA9IFtOU011dGFibGVEaWN0aW9uYXJ5IGRpY3Rpb25hcnldOwogICAgIAotICAgIENURm9udFJl
ZiBmb250ID0gc3R5bGUtPmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0Q1RGb250
KCk7CisgICAgQ1RGb250UmVmIGZvbnQgPSBzdHlsZS0+Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9u
dCgpLmdldENURm9udCgpOwogICAgIGlmIChmb250KQogICAgICAgICBbcmVzdWx0IHNldE9iamVj
dDooaWQpZm9udCBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0JKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTA1
LDcgKzEwNSw3IEBAIGJvb2wgRWRpdG9yOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJblEKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotY29uc3QgU2ltcGxlRm9udERhdGEqIEVkaXRvcjo6Zm9udEZv
clNlbGVjdGlvbihib29sJiBoYXNNdWx0aXBsZUZvbnRzKSBjb25zdAorY29uc3QgRm9udCogRWRp
dG9yOjpmb250Rm9yU2VsZWN0aW9uKGJvb2wmIGhhc011bHRpcGxlRm9udHMpIGNvbnN0CiB7CiAg
ICAgaGFzTXVsdGlwbGVGb250cyA9IGZhbHNlOwogCkBAIC0xMTMsOSArMTEzLDkgQEAgY29uc3Qg
U2ltcGxlRm9udERhdGEqIEVkaXRvcjo6Zm9udEZvclNlbAogICAgICAgICBOb2RlKiBub2RlVG9S
ZW1vdmU7CiAgICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHN0eWxlRm9yU2VsZWN0aW9uU3Rh
cnQoJm1fZnJhbWUsIG5vZGVUb1JlbW92ZSk7IC8vIHNldHMgbm9kZVRvUmVtb3ZlCiAKLSAgICAg
ICAgY29uc3QgU2ltcGxlRm9udERhdGEqIHJlc3VsdCA9IG51bGxwdHI7CisgICAgICAgIGNvbnN0
IEZvbnQqIHJlc3VsdCA9IG51bGxwdHI7CiAgICAgICAgIGlmIChzdHlsZSkKLSAgICAgICAgICAg
IHJlc3VsdCA9ICZzdHlsZS0+Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKTsKKyAgICAg
ICAgICAgIHJlc3VsdCA9ICZzdHlsZS0+Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpOwogCiAg
ICAgICAgIGlmIChub2RlVG9SZW1vdmUpCiAgICAgICAgICAgICBub2RlVG9SZW1vdmUtPnJlbW92
ZShBU1NFUlRfTk9fRVhDRVBUSU9OKTsKQEAgLTEyMyw3ICsxMjMsNyBAQCBjb25zdCBTaW1wbGVG
b250RGF0YSogRWRpdG9yOjpmb250Rm9yU2VsCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
fQogCi0gICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQgPSAwOworICAgIGNvbnN0IEZvbnQq
IGZvbnQgPSAwOwogICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigp
LnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgTm9kZSogc3RhcnROb2RlID0gYWRqdXN0ZWRTZWxl
Y3Rpb25TdGFydEZvclN0eWxlQ29tcHV0YXRpb24obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKSkuZGVwcmVjYXRlZE5vZGUoKTsKICAgICBpZiAocmFuZ2UgJiYgc3RhcnROb2RlKSB7CkBA
IC0xMzUsNyArMTM1LDcgQEAgY29uc3QgU2ltcGxlRm9udERhdGEqIEVkaXRvcjo6Zm9udEZvclNl
bAogICAgICAgICAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIC8vIEZJWE1FOiBBcmUgdGhlcmUgYW55IG5vZGUgdHlwZXMgdGhhdCBoYXZl
IHJlbmRlcmVycywgYnV0IHRoYXQgd2Ugc2hvdWxkIGJlIHNraXBwaW5nPwotICAgICAgICAgICAg
Y29uc3QgU2ltcGxlRm9udERhdGEmIHByaW1hcnlGb250ID0gcmVuZGVyZXItPnN0eWxlKCkuZm9u
dENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKTsKKyAgICAgICAgICAgIGNvbnN0IEZvbnQmIHBy
aW1hcnlGb250ID0gcmVuZGVyZXItPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgp
OwogICAgICAgICAgICAgaWYgKCFmb250KQogICAgICAgICAgICAgICAgIGZvbnQgPSAmcHJpbWFy
eUZvbnQ7CiAgICAgICAgICAgICBlbHNlIGlmIChmb250ICE9ICZwcmltYXJ5Rm9udCkgewpAQCAt
MTYwLDggKzE2MCw4IEBAIE5TRGljdGlvbmFyeSogRWRpdG9yOjpmb250QXR0cmlidXRlc0ZvclMK
ICAgICBpZiAoc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91
bmRDb2xvcikuaXNWYWxpZCgpICYmIHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJv
cGVydHlCYWNrZ3JvdW5kQ29sb3IpLmFscGhhKCkgIT0gMCkKICAgICAgICAgW3Jlc3VsdCBzZXRP
YmplY3Q6bnNDb2xvcihzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFj
a2dyb3VuZENvbG9yKSkgZm9yS2V5Ok5TQmFja2dyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07CiAK
LSAgICBpZiAoc3R5bGUtPmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0TlNGb250
KCkpCi0gICAgICAgIFtyZXN1bHQgc2V0T2JqZWN0OnN0eWxlLT5mb250Q2FzY2FkZSgpLnByaW1h
cnlGb250RGF0YSgpLmdldE5TRm9udCgpIGZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKKyAg
ICBpZiAoc3R5bGUtPmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKS5nZXROU0ZvbnQoKSkKKyAg
ICAgICAgW3Jlc3VsdCBzZXRPYmplY3Q6c3R5bGUtPmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQo
KS5nZXROU0ZvbnQoKSBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CiAKICAgICBpZiAoc3R5
bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKS5pc1ZhbGlkKCkgJiYg
c3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSAhPSBDb2xvcjo6
YmxhY2spCiAgICAgICAgIFtyZXN1bHQgc2V0T2JqZWN0Om5zQ29sb3Ioc3R5bGUtPnZpc2l0ZWRE
ZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSkgZm9yS2V5Ok5TRm9yZWdyb3VuZENvbG9y
QXR0cmlidXRlTmFtZV07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVk
Rm9udC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hl
ZEZvbnQuY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2Fj
aGUvQ2FjaGVkRm9udC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5LDcgKzk5LDcgQEAgYm9vbCBD
YWNoZWRGb250OjplbnN1cmVDdXN0b21Gb250RGF0YShibwogCiBib29sIENhY2hlZEZvbnQ6OmVu
c3VyZUN1c3RvbUZvbnREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSkKIHsKLSAgICBpZiAoIW1fZm9u
dERhdGEgJiYgIWVycm9yT2NjdXJyZWQoKSAmJiAhaXNMb2FkaW5nKCkgJiYgZGF0YSkgeworICAg
IGlmICghbV9mb250Q3VzdG9tUGxhdGZvcm1EYXRhICYmICFlcnJvck9jY3VycmVkKCkgJiYgIWlz
TG9hZGluZygpICYmIGRhdGEpIHsKICAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVy
KGRhdGEpOwogCiAjaWYgKCFQTEFURk9STShNQUMpIHx8IF9fTUFDX09TX1hfVkVSU0lPTl9NSU5f
UkVRVUlSRUQgPD0gMTA5MCkgJiYgKCFQTEFURk9STShJT1MpIHx8IF9fSVBIT05FX09TX1ZFUlNJ
T05fTUlOX1JFUVVJUkVEIDwgODAwMDApCkBAIC0xMTIsMzAgKzExMiwzMCBAQCBib29sIENhY2hl
ZEZvbnQ6OmVuc3VyZUN1c3RvbUZvbnREYXRhKFNoCiAgICAgICAgIH0KICNlbmRpZgogCi0gICAg
ICAgIG1fZm9udERhdGEgPSBidWZmZXIgPyBjcmVhdGVGb250Q3VzdG9tUGxhdGZvcm1EYXRhKCpi
dWZmZXIpIDogbnVsbHB0cjsKLSAgICAgICAgbV9oYXNDcmVhdGVkRm9udERhdGFXcmFwcGluZ1Jl
c291cmNlID0gbV9mb250RGF0YSAmJiAoYnVmZmVyID09IG1fZGF0YSk7Ci0gICAgICAgIGlmICgh
bV9mb250RGF0YSkKKyAgICAgICAgbV9mb250Q3VzdG9tUGxhdGZvcm1EYXRhID0gYnVmZmVyID8g
Y3JlYXRlRm9udEN1c3RvbVBsYXRmb3JtRGF0YSgqYnVmZmVyKSA6IG51bGxwdHI7CisgICAgICAg
IG1faGFzQ3JlYXRlZEZvbnREYXRhV3JhcHBpbmdSZXNvdXJjZSA9IG1fZm9udEN1c3RvbVBsYXRm
b3JtRGF0YSAmJiAoYnVmZmVyID09IG1fZGF0YSk7CisgICAgICAgIGlmICghbV9mb250Q3VzdG9t
UGxhdGZvcm1EYXRhKQogICAgICAgICAgICAgc2V0U3RhdHVzKERlY29kZUVycm9yKTsKICAgICB9
CiAKLSAgICByZXR1cm4gbV9mb250RGF0YS5nZXQoKTsKKyAgICByZXR1cm4gbV9mb250Q3VzdG9t
UGxhdGZvcm1EYXRhLmdldCgpOwogfQogCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBDYWNo
ZWRGb250OjpnZXRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlv
biwgY29uc3QgQXRvbWljU3RyaW5nJiwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRp
Y0l0YWxpYywgYm9vbCkKK1JlZlB0cjxGb250PiBDYWNoZWRGb250OjpjcmVhdGVGb250KGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmLCBi
b29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljLCBib29sKQogewotICAgIHJl
dHVybiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlKHBsYXRmb3JtRGF0YUZyb21DdXN0b21EYXRhKGZv
bnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0
aWNJdGFsaWMsCisgICAgcmV0dXJuIEZvbnQ6OmNyZWF0ZShwbGF0Zm9ybURhdGFGcm9tQ3VzdG9t
RGF0YShmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSwgc3ludGhldGljQm9sZCwg
c3ludGhldGljSXRhbGljLAogICAgICAgICBmb250RGVzY3JpcHRpb24ub3JpZW50YXRpb24oKSwg
Zm9udERlc2NyaXB0aW9uLndpZHRoVmFyaWFudCgpLCBmb250RGVzY3JpcHRpb24ucmVuZGVyaW5n
TW9kZSgpKSwgdHJ1ZSwgZmFsc2UpOwogfQogCiBGb250UGxhdGZvcm1EYXRhIENhY2hlZEZvbnQ6
OnBsYXRmb3JtRGF0YUZyb21DdXN0b21EYXRhKGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBp
dGFsaWMsIEZvbnRPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgRm9udFdpZHRoVmFyaWFudCB3aWR0
aFZhcmlhbnQsIEZvbnRSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUpCiB7Ci0gICAgQVNTRVJU
KG1fZm9udERhdGEpOwotICAgIHJldHVybiBtX2ZvbnREYXRhLT5mb250UGxhdGZvcm1EYXRhKHN0
YXRpY19jYXN0PGludD4oc2l6ZSksIGJvbGQsIGl0YWxpYywgb3JpZW50YXRpb24sIHdpZHRoVmFy
aWFudCwgcmVuZGVyaW5nTW9kZSk7CisgICAgQVNTRVJUKG1fZm9udEN1c3RvbVBsYXRmb3JtRGF0
YSk7CisgICAgcmV0dXJuIG1fZm9udEN1c3RvbVBsYXRmb3JtRGF0YS0+Zm9udFBsYXRmb3JtRGF0
YShzdGF0aWNfY2FzdDxpbnQ+KHNpemUpLCBib2xkLCBpdGFsaWMsIG9yaWVudGF0aW9uLCB3aWR0
aFZhcmlhbnQsIHJlbmRlcmluZ01vZGUpOwogfQogCiB2b2lkIENhY2hlZEZvbnQ6OmFsbENsaWVu
dHNSZW1vdmVkKCkKIHsKLSAgICBtX2ZvbnREYXRhID0gbnVsbHB0cjsKKyAgICBtX2ZvbnRDdXN0
b21QbGF0Zm9ybURhdGEgPSBudWxscHRyOwogfQogCiB2b2lkIENhY2hlZEZvbnQ6OmNoZWNrTm90
aWZ5KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRGb250LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQuaAkocmV2
aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTAgKzI4LDEwIEBACiAKICNpbmNsdWRlICJDYWNoZWRS
ZXNvdXJjZS5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCisjaW5jbHVkZSAi
Rm9udC5oIgogI2luY2x1ZGUgIkZvbnRPcmllbnRhdGlvbi5oIgogI2luY2x1ZGUgIkZvbnRSZW5k
ZXJpbmdNb2RlLmgiCiAjaW5jbHVkZSAiRm9udFdpZHRoVmFyaWFudC5oIgotI2luY2x1ZGUgIlNp
bXBsZUZvbnREYXRhLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTIsNyArNTIsNyBA
QCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgZW5zdXJlQ3VzdG9tRm9udERhdGEoYm9vbCBl
eHRlcm5hbFNWRywgY29uc3QgQXRvbWljU3RyaW5nJiByZW1vdGVVUkkpOwogCi0gICAgdmlydHVh
bCBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBnZXRGb250RGF0YShjb25zdCBGb250RGVzY3Jp
cHRpb24mLCBjb25zdCBBdG9taWNTdHJpbmcmIHJlbW90ZVVSSSwgYm9vbCBzeW50aGV0aWNCb2xk
LCBib29sIHN5bnRoZXRpY0l0YWxpYywgYm9vbCBleHRlcm5hbFNWRyk7CisgICAgdmlydHVhbCBS
ZWZQdHI8Rm9udD4gY3JlYXRlRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9t
aWNTdHJpbmcmIHJlbW90ZVVSSSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0
YWxpYywgYm9vbCBleHRlcm5hbFNWRyk7CiAKIHByb3RlY3RlZDoKICAgICBGb250UGxhdGZvcm1E
YXRhIHBsYXRmb3JtRGF0YUZyb21DdXN0b21EYXRhKGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9v
bCBpdGFsaWMsIEZvbnRPcmllbnRhdGlvbiA9IEhvcml6b250YWwsIEZvbnRXaWR0aFZhcmlhbnQg
PSBSZWd1bGFyV2lkdGgsIEZvbnRSZW5kZXJpbmdNb2RlID0gTm9ybWFsUmVuZGVyaW5nTW9kZSk7
CkBAIC03MCw3ICs3MCw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgYWxsQ2xpZW50
c1JlbW92ZWQoKSBvdmVycmlkZTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxGb250Q3VzdG9tUGxh
dGZvcm1EYXRhPiBtX2ZvbnREYXRhOworICAgIHN0ZDo6dW5pcXVlX3B0cjxGb250Q3VzdG9tUGxh
dGZvcm1EYXRhPiBtX2ZvbnRDdXN0b21QbGF0Zm9ybURhdGE7CiAgICAgYm9vbCBtX2xvYWRJbml0
aWF0ZWQ7CiAgICAgYm9vbCBtX2hhc0NyZWF0ZWRGb250RGF0YVdyYXBwaW5nUmVzb3VyY2U7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTVkdGb250LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU1ZHRm9udC5jcHAJ
KHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRT
VkdGb250LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsMTcgKzUxLDE3IEBAIENhY2hlZFNWR0Zv
bnQ6OkNhY2hlZFNWR0ZvbnQoY29uc3QgUmVzb3UKIHsKIH0KIAotUGFzc1JlZlB0cjxTaW1wbGVG
b250RGF0YT4gQ2FjaGVkU1ZHRm9udDo6Z2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgcmVtb3RlVVJJLCBib29sIHN5
bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljLCBib29sIGV4dGVybmFsU1ZHKQorUmVm
UHRyPEZvbnQ+IENhY2hlZFNWR0ZvbnQ6OmNyZWF0ZUZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgcmVtb3RlVVJJLCBib29sIHN5
bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljLCBib29sIGV4dGVybmFsU1ZHKQogewog
I2lmIEVOQUJMRShTVkdfT1RGX0NPTlZFUlRFUikKICAgICBpZiAoIWV4dGVybmFsU1ZHIHx8IGZp
cnN0Rm9udEZhY2UocmVtb3RlVVJJKSkKLSAgICAgICAgcmV0dXJuIENhY2hlZEZvbnQ6OmdldEZv
bnREYXRhKGZvbnREZXNjcmlwdGlvbiwgcmVtb3RlVVJJLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0
aWNJdGFsaWMsIGV4dGVybmFsU1ZHKTsKKyAgICAgICAgcmV0dXJuIENhY2hlZEZvbnQ6OmNyZWF0
ZUZvbnQoZm9udERlc2NyaXB0aW9uLCByZW1vdGVVUkksIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRp
Y0l0YWxpYywgZXh0ZXJuYWxTVkcpOwogI2Vsc2UKICAgICBpZiAoIWV4dGVybmFsU1ZHKQotICAg
ICAgICByZXR1cm4gQ2FjaGVkRm9udDo6Z2V0Rm9udERhdGEoZm9udERlc2NyaXB0aW9uLCByZW1v
dGVVUkksIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYywgZXh0ZXJuYWxTVkcpOworICAg
ICAgICByZXR1cm4gQ2FjaGVkRm9udDo6Y3JlYXRlRm9udChmb250RGVzY3JpcHRpb24sIHJlbW90
ZVVSSSwgc3ludGhldGljQm9sZCwgc3ludGhldGljSXRhbGljLCBleHRlcm5hbFNWRyk7CiAKICAg
ICBpZiAoU1ZHRm9udEZhY2VFbGVtZW50KiBmaXJzdEZvbnRGYWNlID0gdGhpcy0+Zmlyc3RGb250
RmFjZShyZW1vdGVVUkkpKQotICAgICAgICByZXR1cm4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZShz
dGQ6Om1ha2VfdW5pcXVlPFNWR0ZvbnREYXRhPihmaXJzdEZvbnRGYWNlKSwgZm9udERlc2NyaXB0
aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCksIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYyk7
CisgICAgICAgIHJldHVybiBGb250OjpjcmVhdGUoc3RkOjptYWtlX3VuaXF1ZTxTVkdGb250RGF0
YT4oZmlyc3RGb250RmFjZSksIGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpLCBz
eW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMpOwogI2VuZGlmCiAgICAgcmV0dXJuIG51bGxw
dHI7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU1ZHRm9udC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTVkdGb250
LmgJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRTVkdGb250LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogCiAg
ICAgdmlydHVhbCBib29sIGVuc3VyZUN1c3RvbUZvbnREYXRhKGJvb2wgZXh0ZXJuYWxTVkcsIGNv
bnN0IEF0b21pY1N0cmluZyYgcmVtb3RlVVJJKSBvdmVycmlkZTsKICAgICAKLSAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IGdldEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYgcmVtb3RlVVJJLCBib29sIHN5bnRoZXRpY0JvbGQs
IGJvb2wgc3ludGhldGljSXRhbGljLCBib29sIGV4dGVybmFsU1ZHKSBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIFJlZlB0cjxGb250PiBjcmVhdGVGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNv
bnN0IEF0b21pY1N0cmluZyYgcmVtb3RlVVJJLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3lu
dGhldGljSXRhbGljLCBib29sIGV4dGVybmFsU1ZHKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAg
ICBGb250UGxhdGZvcm1EYXRhIHBsYXRmb3JtRGF0YUZyb21DdXN0b21EYXRhKGZsb2F0IHNpemUs
IGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMsIEZvbnRPcmllbnRhdGlvbiA9IEhvcml6b250YWwsIEZv
bnRXaWR0aFZhcmlhbnQgPSBSZWd1bGFyV2lkdGgsIEZvbnRSZW5kZXJpbmdNb2RlID0gTm9ybWFs
UmVuZGVyaW5nTW9kZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250LmNwcAkocmV2aXNpb24gMTc4NjUwKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9TaW1wbGVGb250RGF0YS5jcHA6MTc4NjUwKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NTYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDgsIDIwMTAsIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3Vy
eWFrb3YKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBw
bGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAq
ICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgorCisjaWYgUExB
VEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JF
UVVJUkVEID4gMTA4MCkKKyNpbmNsdWRlICJDb3JlVGV4dFNQSS5oIgorI2VuZGlmCisjaW5jbHVk
ZSAiRm9udENhY2hlLmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKKyNpbmNsdWRlICJPcGVu
VHlwZU1hdGhEYXRhLmgiCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3
dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKworI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKKyNp
bmNsdWRlICJPcGVuVHlwZVZlcnRpY2FsRGF0YS5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKwordW5zaWduZWQgR2x5cGhQYWdlOjpzX2NvdW50ID0gMDsKKworY29uc3QgZmxvYXQg
c21hbGxDYXBzRm9udFNpemVNdWx0aXBsaWVyID0gMC43ZjsKK2NvbnN0IGZsb2F0IGVtcGhhc2lz
TWFya0ZvbnRTaXplTXVsdGlwbGllciA9IDAuNWY7CisKK1NpbXBsZUZvbnREYXRhOjpTaW1wbGVG
b250RGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEsIGJvb2wgaXNDdXN0
b21Gb250LCBib29sIGlzTG9hZGluZywgYm9vbCBpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKQor
ICAgIDogbV9tYXhDaGFyV2lkdGgoLTEpCisgICAgLCBtX2F2Z0NoYXJXaWR0aCgtMSkKKyAgICAs
IG1fcGxhdGZvcm1EYXRhKHBsYXRmb3JtRGF0YSkKKyAgICAsIG1fdHJlYXRBc0ZpeGVkUGl0Y2go
ZmFsc2UpCisgICAgLCBtX2lzQ3VzdG9tRm9udChpc0N1c3RvbUZvbnQpCisgICAgLCBtX2lzTG9h
ZGluZyhpc0xvYWRpbmcpCisgICAgLCBtX2lzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2soaXNUZXh0
T3JpZW50YXRpb25GYWxsYmFjaykKKyAgICAsIG1faXNCcm9rZW5JZGVvZ3JhcGhGYWxsYmFjayhm
YWxzZSkKKyAgICAsIG1fbWF0aERhdGEobnVsbHB0cikKKyNpZiBFTkFCTEUoT1BFTlRZUEVfVkVS
VElDQUwpCisgICAgLCBtX3ZlcnRpY2FsRGF0YSgwKQorI2VuZGlmCisgICAgLCBtX2hhc1ZlcnRp
Y2FsR2x5cGhzKGZhbHNlKQoreworICAgIHBsYXRmb3JtSW5pdCgpOworICAgIHBsYXRmb3JtR2x5
cGhJbml0KCk7CisgICAgcGxhdGZvcm1DaGFyV2lkdGhJbml0KCk7CisjaWYgRU5BQkxFKE9QRU5U
WVBFX1ZFUlRJQ0FMKQorICAgIGlmIChwbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSA9PSBWZXJ0
aWNhbCAmJiAhaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaykgeworICAgICAgICBtX3ZlcnRpY2Fs
RGF0YSA9IHBsYXRmb3JtRGF0YS52ZXJ0aWNhbERhdGEoKTsKKyAgICAgICAgbV9oYXNWZXJ0aWNh
bEdseXBocyA9IG1fdmVydGljYWxEYXRhLmdldCgpICYmIG1fdmVydGljYWxEYXRhLT5oYXNWZXJ0
aWNhbE1ldHJpY3MoKTsKKyAgICB9CisjZW5kaWYKK30KKworU2ltcGxlRm9udERhdGE6OlNpbXBs
ZUZvbnREYXRhKHN0ZDo6dW5pcXVlX3B0cjxTVkdEYXRhPiBzdmdEYXRhLCBmbG9hdCBmb250U2l6
ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYykKKyAgICA6IG1fcGxh
dGZvcm1EYXRhKEZvbnRQbGF0Zm9ybURhdGEoZm9udFNpemUsIHN5bnRoZXRpY0JvbGQsIHN5bnRo
ZXRpY0l0YWxpYykpCisgICAgLCBtX3N2Z0RhdGEoV1RGOjptb3ZlKHN2Z0RhdGEpKQorICAgICwg
bV90cmVhdEFzRml4ZWRQaXRjaChmYWxzZSkKKyAgICAsIG1faXNDdXN0b21Gb250KHRydWUpCisg
ICAgLCBtX2lzTG9hZGluZyhmYWxzZSkKKyAgICAsIG1faXNUZXh0T3JpZW50YXRpb25GYWxsYmFj
ayhmYWxzZSkKKyAgICAsIG1faXNCcm9rZW5JZGVvZ3JhcGhGYWxsYmFjayhmYWxzZSkKKyAgICAs
IG1fbWF0aERhdGEobnVsbHB0cikKKyNpZiBFTkFCTEUoT1BFTlRZUEVfVkVSVElDQUwpCisgICAg
LCBtX3ZlcnRpY2FsRGF0YSgwKQorI2VuZGlmCisgICAgLCBtX2hhc1ZlcnRpY2FsR2x5cGhzKGZh
bHNlKQorI2lmIFBMQVRGT1JNKElPUykKKyAgICAsIG1fc2hvdWxkTm90QmVVc2VkRm9yQXJhYmlj
KGZhbHNlKQorI2VuZGlmCit7CisgICAgbV9zdmdEYXRhLT5pbml0aWFsaXplRm9udERhdGEodGhp
cywgZm9udFNpemUpOworfQorCisvLyBFc3RpbWF0ZXMgb2YgYXZnQ2hhcldpZHRoIGFuZCBtYXhD
aGFyV2lkdGggZm9yIHBsYXRmb3JtcyB0aGF0IGRvbid0IHN1cHBvcnQgYWNjZXNzaW5nIHRoZXNl
IHZhbHVlcyBmcm9tIHRoZSBmb250Lgordm9pZCBTaW1wbGVGb250RGF0YTo6aW5pdENoYXJXaWR0
aHMoKQoreworICAgIGF1dG8qIGdseXBoUGFnZVplcm8gPSBnbHlwaFBhZ2UoMCk7CisKKyAgICAv
LyBUcmVhdCB0aGUgd2lkdGggb2YgYSAnMCcgYXMgdGhlIGF2Z0NoYXJXaWR0aC4KKyAgICBpZiAo
bV9hdmdDaGFyV2lkdGggPD0gMC5mICYmIGdseXBoUGFnZVplcm8pIHsKKyAgICAgICAgc3RhdGlj
IGNvbnN0IFVDaGFyMzIgZGlnaXRaZXJvQ2hhciA9ICcwJzsKKyAgICAgICAgR2x5cGggZGlnaXRa
ZXJvR2x5cGggPSBnbHlwaFBhZ2VaZXJvLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoZGlnaXRaZXJv
Q2hhcikuZ2x5cGg7CisgICAgICAgIGlmIChkaWdpdFplcm9HbHlwaCkKKyAgICAgICAgICAgIG1f
YXZnQ2hhcldpZHRoID0gd2lkdGhGb3JHbHlwaChkaWdpdFplcm9HbHlwaCk7CisgICAgfQorCisg
ICAgLy8gSWYgd2UgY2FuJ3QgcmV0cmlldmUgdGhlIHdpZHRoIG9mIGEgJzAnLCBmYWxsIGJhY2sg
dG8gdGhlIHggaGVpZ2h0LgorICAgIGlmIChtX2F2Z0NoYXJXaWR0aCA8PSAwLmYpCisgICAgICAg
IG1fYXZnQ2hhcldpZHRoID0gbV9mb250TWV0cmljcy54SGVpZ2h0KCk7CisKKyAgICBpZiAobV9t
YXhDaGFyV2lkdGggPD0gMC5mKQorICAgICAgICBtX21heENoYXJXaWR0aCA9IHN0ZDo6bWF4KG1f
YXZnQ2hhcldpZHRoLCBtX2ZvbnRNZXRyaWNzLmZsb2F0QXNjZW50KCkpOworfQorCit2b2lkIFNp
bXBsZUZvbnREYXRhOjpwbGF0Zm9ybUdseXBoSW5pdCgpCit7CisgICAgYXV0byogZ2x5cGhQYWdl
WmVybyA9IGdseXBoUGFnZSgwKTsKKyAgICBpZiAoIWdseXBoUGFnZVplcm8pIHsKKyAgICAgICAg
bV9zcGFjZUdseXBoID0gMDsKKyAgICAgICAgbV9zcGFjZVdpZHRoID0gMDsKKyAgICAgICAgbV96
ZXJvR2x5cGggPSAwOworICAgICAgICBtX2FkanVzdGVkU3BhY2VXaWR0aCA9IDA7CisgICAgICAg
IGRldGVybWluZVBpdGNoKCk7CisgICAgICAgIG1femVyb1dpZHRoU3BhY2VHbHlwaCA9IDA7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBBc2sgZm9yIHRoZSBnbHlwaCBmb3IgMCB0
byBhdm9pZCBwYWdpbmcgaW4gWkVSTyBXSURUSCBTUEFDRS4gQ29udHJvbCBjaGFyYWN0ZXJzLCBp
bmNsdWRpbmcgMCwKKyAgICAvLyBhcmUgbWFwcGVkIHRvIHRoZSBaRVJPIFdJRFRIIFNQQUNFIGds
eXBoLgorICAgIG1femVyb1dpZHRoU3BhY2VHbHlwaCA9IGdseXBoUGFnZVplcm8tPmdseXBoRGF0
YUZvckNoYXJhY3RlcigwKS5nbHlwaDsKKworICAgIC8vIE5hc3R5IGhhY2sgdG8gZGV0ZXJtaW5l
IGlmIHdlIHNob3VsZCByb3VuZCBvciBjZWlsIHNwYWNlIHdpZHRocy4KKyAgICAvLyBJZiB0aGUg
Zm9udCBpcyBtb25vc3BhY2Ugb3IgZmFrZSBtb25vc3BhY2Ugd2UgY2VpbCB0byBlbnN1cmUgdGhh
dCAKKyAgICAvLyBldmVyeSBjaGFyYWN0ZXIgYW5kIHRoZSBzcGFjZSBhcmUgdGhlIHNhbWUgd2lk
dGguICBPdGhlcndpc2Ugd2Ugcm91bmQuCisgICAgbV9zcGFjZUdseXBoID0gZ2x5cGhQYWdlWmVy
by0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKCcgJykuZ2x5cGg7CisgICAgZmxvYXQgd2lkdGggPSB3
aWR0aEZvckdseXBoKG1fc3BhY2VHbHlwaCk7CisgICAgbV9zcGFjZVdpZHRoID0gd2lkdGg7Cisg
ICAgbV96ZXJvR2x5cGggPSBnbHlwaFBhZ2VaZXJvLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoJzAn
KS5nbHlwaDsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldFplcm9XaWR0aCh3aWR0aEZvckdseXBoKG1f
emVyb0dseXBoKSk7CisgICAgZGV0ZXJtaW5lUGl0Y2goKTsKKyAgICBtX2FkanVzdGVkU3BhY2VX
aWR0aCA9IG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPyBjZWlsZih3aWR0aCkgOiByb3VuZGYod2lkdGgp
OworCisgICAgLy8gRm9yY2UgdGhlIGdseXBoIGZvciBaRVJPIFdJRFRIIFNQQUNFIHRvIGhhdmUg
emVybyB3aWR0aCwgdW5sZXNzIGl0IGlzIHNoYXJlZCB3aXRoIFNQQUNFLgorICAgIC8vIEhlbHZl
dGljYSBpcyBhbiBleGFtcGxlIG9mIGEgbm9uLXplcm8gd2lkdGggWkVSTyBXSURUSCBTUEFDRSBn
bHlwaC4KKyAgICAvLyBTZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEzMTc4PiBhbmQgU2ltcGxlRm9udERhdGE6OmlzWmVyb1dpZHRoU3BhY2VHbHlwaCgpCisgICAg
aWYgKG1femVyb1dpZHRoU3BhY2VHbHlwaCA9PSBtX3NwYWNlR2x5cGgpCisgICAgICAgIG1femVy
b1dpZHRoU3BhY2VHbHlwaCA9IDA7Cit9CisKK1NpbXBsZUZvbnREYXRhOjp+U2ltcGxlRm9udERh
dGEoKQoreworICAgIHJlbW92ZUZyb21TeXN0ZW1GYWxsYmFja0NhY2hlKCk7Cit9CisKK3N0YXRp
YyBib29sIGZpbGxHbHlwaFBhZ2UoR2x5cGhQYWdlJiBwYWdlVG9GaWxsLCB1bnNpZ25lZCBvZmZz
ZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3Ro
LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEpCit7CisjaWYgRU5BQkxFKFNWR19GT05U
UykKKyAgICBpZiAoYXV0byogc3ZnRGF0YSA9IGZvbnREYXRhLT5zdmdEYXRhKCkpCisgICAgICAg
IHJldHVybiBzdmdEYXRhLT5maWxsU1ZHR2x5cGhQYWdlKCZwYWdlVG9GaWxsLCBvZmZzZXQsIGxl
bmd0aCwgYnVmZmVyLCBidWZmZXJMZW5ndGgsIGZvbnREYXRhKTsKKyNlbmRpZgorICAgIGJvb2wg
aGFzR2x5cGhzID0gcGFnZVRvRmlsbC5maWxsKG9mZnNldCwgbGVuZ3RoLCBidWZmZXIsIGJ1ZmZl
ckxlbmd0aCwgZm9udERhdGEpOworI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKKyAgICBp
ZiAoaGFzR2x5cGhzICYmIGZvbnREYXRhLT52ZXJ0aWNhbERhdGEoKSkKKyAgICAgICAgZm9udERh
dGEtPnZlcnRpY2FsRGF0YSgpLT5zdWJzdGl0dXRlV2l0aFZlcnRpY2FsR2x5cGhzKGZvbnREYXRh
LCAmcGFnZVRvRmlsbCwgb2Zmc2V0LCBsZW5ndGgpOworI2VuZGlmCisgICAgcmV0dXJuIGhhc0ds
eXBoczsKK30KKworc3RhdGljIFJlZlB0cjxHbHlwaFBhZ2U+IGNyZWF0ZUFuZEZpbGxHbHlwaFBh
Z2UodW5zaWduZWQgcGFnZU51bWJlciwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQor
eworI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBGSVhNRTogVGltZXMgTmV3IFJvbWFuIGNvbnRh
aW5zIEFyYWJpYyBnbHlwaHMsIGJ1dCBDb3JlIFRleHQgZG9lc24ndCBrbm93IGhvdyB0byBzaGFw
ZSB0aGVtLiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzk4MjM5NzU+LgorICAgIC8vIE9uY2Ugd2UgaGF2
ZSB0aGUgZml4IGZvciA8cmRhcjovL3Byb2JsZW0vOTgyMzk3NT4gdGhlbiByZW1vdmUgdGhpcyBj
b2RlIHRvZ2V0aGVyIHdpdGggU2ltcGxlRm9udERhdGE6OnNob3VsZE5vdEJlVXNlZEZvckFyYWJp
YygpCisgICAgLy8gaW4gPHJkYXI6Ly9wcm9ibGVtLzEyMDk2ODM1Pi4KKyAgICBpZiAocGFnZU51
bWJlciA9PSA2ICYmIGZvbnREYXRhLT5zaG91bGROb3RCZVVzZWRGb3JBcmFiaWMoKSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisjZW5kaWYKKworICAgIHVuc2lnbmVkIHN0YXJ0ID0gcGFnZU51
bWJlciAqIEdseXBoUGFnZTo6c2l6ZTsKKyAgICBVQ2hhciBidWZmZXJbR2x5cGhQYWdlOjpzaXpl
ICogMiArIDJdOworICAgIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aDsKKyAgICAvLyBGaWxsIGluIGEg
YnVmZmVyIHdpdGggdGhlIGVudGlyZSAicGFnZSIgb2YgY2hhcmFjdGVycyB0aGF0IHdlIHdhbnQg
dG8gbG9vayB1cCBnbHlwaHMgZm9yLgorICAgIGlmIChVX0lTX0JNUChzdGFydCkpIHsKKyAgICAg
ICAgYnVmZmVyTGVuZ3RoID0gR2x5cGhQYWdlOjpzaXplOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgR2x5cGhQYWdlOjpzaXplOyBpKyspCisgICAgICAgICAgICBidWZmZXJbaV0g
PSBzdGFydCArIGk7CisKKyAgICAgICAgaWYgKHN0YXJ0ID09IDApIHsKKyAgICAgICAgICAgIC8v
IENvbnRyb2wgY2hhcmFjdGVycyBtdXN0IG5vdCByZW5kZXIgYXQgYWxsLgorICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDB4MjA7ICsraSkKKyAgICAgICAgICAgICAgICBidWZm
ZXJbaV0gPSB6ZXJvV2lkdGhTcGFjZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDB4
N0Y7IGkgPCAweEEwOyBpKyspCisgICAgICAgICAgICAgICAgYnVmZmVyW2ldID0gemVyb1dpZHRo
U3BhY2U7CisgICAgICAgICAgICBidWZmZXJbc29mdEh5cGhlbl0gPSB6ZXJvV2lkdGhTcGFjZTsK
KworICAgICAgICAgICAgLy8gXG4sIFx0LCBhbmQgbm9uYnJlYWtpbmcgc3BhY2UgbXVzdCByZW5k
ZXIgYXMgYSBzcGFjZS4KKyAgICAgICAgICAgIGJ1ZmZlclsoaW50KSdcbiddID0gJyAnOworICAg
ICAgICAgICAgYnVmZmVyWyhpbnQpJ1x0J10gPSAnICc7CisgICAgICAgICAgICBidWZmZXJbbm9C
cmVha1NwYWNlXSA9ICcgJzsKKyAgICAgICAgfSBlbHNlIGlmIChzdGFydCA9PSAobGVmdFRvUmln
aHRNYXJrICYgfihHbHlwaFBhZ2U6OnNpemUgLSAxKSkpIHsKKyAgICAgICAgICAgIC8vIExSTSwg
UkxNLCBMUkUsIFJMRSwgWldOSiwgWldKLCBhbmQgUERGIG11c3Qgbm90IHJlbmRlciBhdCBhbGwu
CisgICAgICAgICAgICBidWZmZXJbbGVmdFRvUmlnaHRNYXJrIC0gc3RhcnRdID0gemVyb1dpZHRo
U3BhY2U7CisgICAgICAgICAgICBidWZmZXJbcmlnaHRUb0xlZnRNYXJrIC0gc3RhcnRdID0gemVy
b1dpZHRoU3BhY2U7CisgICAgICAgICAgICBidWZmZXJbbGVmdFRvUmlnaHRFbWJlZCAtIHN0YXJ0
XSA9IHplcm9XaWR0aFNwYWNlOworICAgICAgICAgICAgYnVmZmVyW3JpZ2h0VG9MZWZ0RW1iZWQg
LSBzdGFydF0gPSB6ZXJvV2lkdGhTcGFjZTsKKyAgICAgICAgICAgIGJ1ZmZlcltsZWZ0VG9SaWdo
dE92ZXJyaWRlIC0gc3RhcnRdID0gemVyb1dpZHRoU3BhY2U7CisgICAgICAgICAgICBidWZmZXJb
cmlnaHRUb0xlZnRPdmVycmlkZSAtIHN0YXJ0XSA9IHplcm9XaWR0aFNwYWNlOworICAgICAgICAg
ICAgYnVmZmVyW3plcm9XaWR0aE5vbkpvaW5lciAtIHN0YXJ0XSA9IHplcm9XaWR0aFNwYWNlOwor
ICAgICAgICAgICAgYnVmZmVyW3plcm9XaWR0aEpvaW5lciAtIHN0YXJ0XSA9IHplcm9XaWR0aFNw
YWNlOworICAgICAgICAgICAgYnVmZmVyW3BvcERpcmVjdGlvbmFsRm9ybWF0dGluZyAtIHN0YXJ0
XSA9IHplcm9XaWR0aFNwYWNlOworICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0ID09IChvYmplY3RS
ZXBsYWNlbWVudENoYXJhY3RlciAmIH4oR2x5cGhQYWdlOjpzaXplIC0gMSkpKSB7CisgICAgICAg
ICAgICAvLyBPYmplY3QgcmVwbGFjZW1lbnQgY2hhcmFjdGVyIG11c3Qgbm90IHJlbmRlciBhdCBh
bGwuCisgICAgICAgICAgICBidWZmZXJbb2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXIgLSBzdGFy
dF0gPSB6ZXJvV2lkdGhTcGFjZTsKKyAgICAgICAgfSBlbHNlIGlmIChzdGFydCA9PSAoemVyb1dp
ZHRoTm9CcmVha1NwYWNlICYgfihHbHlwaFBhZ2U6OnNpemUgLSAxKSkpIHsKKyAgICAgICAgICAg
IC8vIFpXTkJTL0JPTSBtdXN0IG5vdCByZW5kZXIgYXQgYWxsLgorICAgICAgICAgICAgYnVmZmVy
W3plcm9XaWR0aE5vQnJlYWtTcGFjZSAtIHN0YXJ0XSA9IHplcm9XaWR0aFNwYWNlOworICAgICAg
ICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgYnVmZmVyTGVuZ3RoID0gR2x5cGhQYWdlOjpzaXpl
ICogMjsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdseXBoUGFnZTo6c2l6ZTsg
aSsrKSB7CisgICAgICAgICAgICBpbnQgYyA9IGkgKyBzdGFydDsKKyAgICAgICAgICAgIGJ1ZmZl
cltpICogMl0gPSBVMTZfTEVBRChjKTsKKyAgICAgICAgICAgIGJ1ZmZlcltpICogMiArIDFdID0g
VTE2X1RSQUlMKGMpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gTm93IHRoYXQgd2UgaGF2
ZSBhIGJ1ZmZlciBmdWxsIG9mIGNoYXJhY3RlcnMsIHdlIHdhbnQgdG8gZ2V0IGJhY2sgYW4gYXJy
YXkKKyAgICAvLyBvZiBnbHlwaCBpbmRpY2VzLiBUaGlzIHBhcnQgaW52b2x2ZXMgY2FsbGluZyBp
bnRvIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYworICAgIC8vIHJvdXRpbmUgb2Ygb3VyIGdseXBoIG1h
cCBmb3IgYWN0dWFsbHkgZmlsbGluZyBpbiB0aGUgcGFnZSB3aXRoIHRoZSBnbHlwaHMuCisgICAg
Ly8gU3VjY2VzcyBpcyBub3QgZ3VhcmFudGVlZC4gRm9yIGV4YW1wbGUsIFRpbWVzIGZhaWxzIHRv
IGZpbGwgcGFnZSAyNjAsIGdpdmluZyBnbHlwaCBkYXRhCisgICAgLy8gZm9yIG9ubHkgMTI4IG91
dCBvZiAyNTYgY2hhcmFjdGVycy4KKyAgICBSZWZQdHI8R2x5cGhQYWdlPiBnbHlwaFBhZ2U7Cisg
ICAgaWYgKEdseXBoUGFnZTo6bWF5VXNlTWl4ZWRGb250RGF0YVdoZW5GaWxsaW5nKGJ1ZmZlciwg
YnVmZmVyTGVuZ3RoLCBmb250RGF0YSkpCisgICAgICAgIGdseXBoUGFnZSA9IEdseXBoUGFnZTo6
Y3JlYXRlRm9yTWl4ZWRGb250RGF0YSgpOworICAgIGVsc2UKKyAgICAgICAgZ2x5cGhQYWdlID0g
R2x5cGhQYWdlOjpjcmVhdGVGb3JTaW5nbGVGb250RGF0YShmb250RGF0YSk7CisKKyAgICBib29s
IGhhdmVHbHlwaHMgPSBmaWxsR2x5cGhQYWdlKCpnbHlwaFBhZ2UsIDAsIEdseXBoUGFnZTo6c2l6
ZSwgYnVmZmVyLCBidWZmZXJMZW5ndGgsIGZvbnREYXRhKTsKKyAgICBpZiAoIWhhdmVHbHlwaHMp
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgZ2x5cGhQYWdlLT5zZXRJbW11dGFibGUo
KTsKKyAgICByZXR1cm4gZ2x5cGhQYWdlOworfQorCitjb25zdCBHbHlwaFBhZ2UqIFNpbXBsZUZv
bnREYXRhOjpnbHlwaFBhZ2UodW5zaWduZWQgcGFnZU51bWJlcikgY29uc3QKK3sKKyAgICBpZiAo
cGFnZU51bWJlciA9PSAwKSB7CisgICAgICAgIGlmICghbV9nbHlwaFBhZ2VaZXJvKQorICAgICAg
ICAgICAgbV9nbHlwaFBhZ2VaZXJvID0gY3JlYXRlQW5kRmlsbEdseXBoUGFnZSgwLCB0aGlzKTsK
KyAgICAgICAgcmV0dXJuIG1fZ2x5cGhQYWdlWmVyby5nZXQoKTsKKyAgICB9CisgICAgYXV0byBh
ZGRSZXN1bHQgPSBtX2dseXBoUGFnZXMuYWRkKHBhZ2VOdW1iZXIsIG51bGxwdHIpOworICAgIGlm
IChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZSA9IGNyZWF0ZUFuZEZpbGxHbHlwaFBhZ2UocGFnZU51bWJlciwgdGhpcyk7CisKKyAgICByZXR1
cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKK30KKworR2x5cGggU2ltcGxlRm9u
dERhdGE6OmdseXBoRm9yQ2hhcmFjdGVyKFVDaGFyMzIgY2hhcmFjdGVyKSBjb25zdAoreworICAg
IGF1dG8qIHBhZ2UgPSBnbHlwaFBhZ2UoY2hhcmFjdGVyIC8gR2x5cGhQYWdlOjpzaXplKTsKKyAg
ICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBwYWdlLT5nbHlwaEF0
KGNoYXJhY3RlciAlIEdseXBoUGFnZTo6c2l6ZSk7Cit9CisKK0dseXBoRGF0YSBTaW1wbGVGb250
RGF0YTo6Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgY2hhcmFjdGVyKSBjb25zdAorewor
ICAgIGF1dG8qIHBhZ2UgPSBnbHlwaFBhZ2UoY2hhcmFjdGVyIC8gR2x5cGhQYWdlOjpzaXplKTsK
KyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybiBHbHlwaERhdGEoKTsKKyAgICByZXR1cm4g
cGFnZS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3Rlcik7Cit9CisKK1Bhc3NSZWZQdHI8
U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjp2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25G
b250RGF0YSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKKyAgICAgICAg
bV9kZXJpdmVkRm9udERhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPERlcml2ZWRGb250RGF0YT4oaXND
dXN0b21Gb250KCkpOworICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEtPnZlcnRpY2FsUmlnaHRP
cmllbnRhdGlvbikgeworICAgICAgICBGb250UGxhdGZvcm1EYXRhIHZlcnRpY2FsUmlnaHRQbGF0
Zm9ybURhdGEobV9wbGF0Zm9ybURhdGEpOworICAgICAgICB2ZXJ0aWNhbFJpZ2h0UGxhdGZvcm1E
YXRhLnNldE9yaWVudGF0aW9uKEhvcml6b250YWwpOworICAgICAgICBtX2Rlcml2ZWRGb250RGF0
YS0+dmVydGljYWxSaWdodE9yaWVudGF0aW9uID0gY3JlYXRlKHZlcnRpY2FsUmlnaHRQbGF0Zm9y
bURhdGEsIGlzQ3VzdG9tRm9udCgpLCBmYWxzZSwgdHJ1ZSk7CisgICAgfQorICAgIHJldHVybiBt
X2Rlcml2ZWRGb250RGF0YS0+dmVydGljYWxSaWdodE9yaWVudGF0aW9uOworfQorCitQYXNzUmVm
UHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6dXByaWdodE9yaWVudGF0aW9uRm9u
dERhdGEoKSBjb25zdAoreworICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEpCisgICAgICAgIG1f
ZGVyaXZlZEZvbnREYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxEZXJpdmVkRm9udERhdGE+KGlzQ3Vz
dG9tRm9udCgpKTsKKyAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhLT51cHJpZ2h0T3JpZW50YXRp
b24pCisgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT51cHJpZ2h0T3JpZW50YXRpb24gPSBjcmVh
dGUobV9wbGF0Zm9ybURhdGEsIGlzQ3VzdG9tRm9udCgpLCBmYWxzZSwgdHJ1ZSk7CisgICAgcmV0
dXJuIG1fZGVyaXZlZEZvbnREYXRhLT51cHJpZ2h0T3JpZW50YXRpb247Cit9CisKK1Bhc3NSZWZQ
dHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YShjb25z
dCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKK3sKKyAgICBpZiAoIW1f
ZGVyaXZlZEZvbnREYXRhKQorICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IHN0ZDo6bWFrZV91
bmlxdWU8RGVyaXZlZEZvbnREYXRhPihpc0N1c3RvbUZvbnQoKSk7CisgICAgaWYgKCFtX2Rlcml2
ZWRGb250RGF0YS0+c21hbGxDYXBzKQorICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxD
YXBzID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9uLCBzbWFsbENhcHNGb250
U2l6ZU11bHRpcGxpZXIpOworCisgICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENh
cHM7Cit9CisKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjplbXBo
YXNpc01hcmtGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikg
Y29uc3QKK3sKKyAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQorICAgICAgICBtX2Rlcml2ZWRG
b250RGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8RGVyaXZlZEZvbnREYXRhPihpc0N1c3RvbUZvbnQo
KSk7CisgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrKQorICAgICAgICBt
X2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9u
dERlc2NyaXB0aW9uLCBlbXBoYXNpc01hcmtGb250U2l6ZU11bHRpcGxpZXIpOworCisgICAgcmV0
dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcms7Cit9CisKK1Bhc3NSZWZQdHI8U2lt
cGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpicm9rZW5JZGVvZ3JhcGhGb250RGF0YSgpIGNv
bnN0Cit7CisgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKKyAgICAgICAgbV9kZXJpdmVkRm9u
dERhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPERlcml2ZWRGb250RGF0YT4oaXNDdXN0b21Gb250KCkp
OworICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEtPmJyb2tlbklkZW9ncmFwaCkgeworICAgICAg
ICBtX2Rlcml2ZWRGb250RGF0YS0+YnJva2VuSWRlb2dyYXBoID0gY3JlYXRlKG1fcGxhdGZvcm1E
YXRhLCBpc0N1c3RvbUZvbnQoKSwgZmFsc2UpOworICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+
YnJva2VuSWRlb2dyYXBoLT5tX2lzQnJva2VuSWRlb2dyYXBoRmFsbGJhY2sgPSB0cnVlOworICAg
IH0KKyAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPmJyb2tlbklkZW9ncmFwaDsKK30KKwor
UGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6Om5vblN5bnRoZXRpY0l0
YWxpY0ZvbnREYXRhKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQorICAg
ICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8RGVyaXZlZEZvbnREYXRh
Pihpc0N1c3RvbUZvbnQoKSk7CisgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+bm9uU3ludGhl
dGljSXRhbGljKSB7CisgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEgbm9uU3ludGhldGljSXRhbGlj
Rm9udFBsYXRmb3JtRGF0YShtX3BsYXRmb3JtRGF0YSk7CisjaWYgUExBVEZPUk0oQ09DT0EpCisg
ICAgICAgIG5vblN5bnRoZXRpY0l0YWxpY0ZvbnRQbGF0Zm9ybURhdGEubV9zeW50aGV0aWNPYmxp
cXVlID0gZmFsc2U7CisjZW5kaWYKKyAgICAgICAgbV9kZXJpdmVkRm9udERhdGEtPm5vblN5bnRo
ZXRpY0l0YWxpYyA9IGNyZWF0ZShub25TeW50aGV0aWNJdGFsaWNGb250UGxhdGZvcm1EYXRhLCBp
c0N1c3RvbUZvbnQoKSk7CisgICAgfQorICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+bm9u
U3ludGhldGljSXRhbGljOworfQorCisjaWZuZGVmIE5ERUJVRworU3RyaW5nIFNpbXBsZUZvbnRE
YXRhOjpkZXNjcmlwdGlvbigpIGNvbnN0Cit7CisgICAgaWYgKGlzU1ZHRm9udCgpKQorICAgICAg
ICByZXR1cm4gIltTVkcgZm9udF0iOworICAgIGlmIChpc0N1c3RvbUZvbnQoKSkKKyAgICAgICAg
cmV0dXJuICJbY3VzdG9tIGZvbnRdIjsKKworICAgIHJldHVybiBwbGF0Zm9ybURhdGEoKS5kZXNj
cmlwdGlvbigpOworfQorI2VuZGlmCisKK2NvbnN0IE9wZW5UeXBlTWF0aERhdGEqIFNpbXBsZUZv
bnREYXRhOjptYXRoRGF0YSgpIGNvbnN0Cit7CisgICAgaWYgKG1faXNMb2FkaW5nKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoIW1fbWF0aERhdGEpIHsKKyAgICAgICAgbV9tYXRo
RGF0YSA9IE9wZW5UeXBlTWF0aERhdGE6OmNyZWF0ZShtX3BsYXRmb3JtRGF0YSk7CisgICAgICAg
IGlmICghbV9tYXRoRGF0YS0+aGFzTWF0aERhdGEoKSkKKyAgICAgICAgICAgIG1fbWF0aERhdGEu
Y2xlYXIoKTsKKyAgICB9CisgICAgcmV0dXJuIG1fbWF0aERhdGEuZ2V0KCk7Cit9CisKK1NpbXBs
ZUZvbnREYXRhOjpEZXJpdmVkRm9udERhdGE6On5EZXJpdmVkRm9udERhdGEoKQoreworfQorCitQ
YXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlU2NhbGVkRm9u
dERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNjYWxl
RmFjdG9yKSBjb25zdAoreworICAgIGlmIChpc1NWR0ZvbnQoKSkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICByZXR1cm4gcGxhdGZvcm1DcmVhdGVTY2FsZWRGb250RGF0YShmb250RGVz
Y3JpcHRpb24sIHNjYWxlRmFjdG9yKTsKK30KKworYm9vbCBTaW1wbGVGb250RGF0YTo6YXBwbHlU
cmFuc2Zvcm1zKEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgR2x5cGhCdWZmZXJBZHZhbmNlKiBh
ZHZhbmNlcywgc2l6ZV90IGdseXBoQ291bnQsIFR5cGVzZXR0aW5nRmVhdHVyZXMgdHlwZXNldHRp
bmdGZWF0dXJlcykgY29uc3QKK3sKKyAgICAvLyBXZSBuZWVkIHRvIGhhbmRsZSB0cmFuc2Zvcm1z
IG9uIFNWRyBmb250cyBpbnRlcm5hbGx5LCBzaW5jZSB0aGV5IGFyZSByZW5kZXJlZCBpbnRlcm5h
bGx5LgorICAgIEFTU0VSVCghaXNTVkdGb250KCkpOworI2lmIFBMQVRGT1JNKElPUykgfHwgKFBM
QVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+IDEwODApCisg
ICAgQ1RGb250VHJhbnNmb3JtT3B0aW9ucyBvcHRpb25zID0gKHR5cGVzZXR0aW5nRmVhdHVyZXMg
JiBLZXJuaW5nID8ga0NURm9udFRyYW5zZm9ybUFwcGx5UG9zaXRpb25pbmcgOiAwKSB8ICh0eXBl
c2V0dGluZ0ZlYXR1cmVzICYgTGlnYXR1cmVzID8ga0NURm9udFRyYW5zZm9ybUFwcGx5U2hhcGlu
ZyA6IDApOworICAgIHJldHVybiBDVEZvbnRUcmFuc2Zvcm1HbHlwaHMobV9wbGF0Zm9ybURhdGEu
Y3RGb250KCksIGdseXBocywgcmVpbnRlcnByZXRfY2FzdDxDR1NpemUqPihhZHZhbmNlcyksIGds
eXBoQ291bnQsIG9wdGlvbnMpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZ2x5cGhzKTsKKyAg
ICBVTlVTRURfUEFSQU0oYWR2YW5jZXMpOworICAgIFVOVVNFRF9QQVJBTShnbHlwaENvdW50KTsK
KyAgICBVTlVTRURfUEFSQU0odHlwZXNldHRpbmdGZWF0dXJlcyk7CisgICAgcmV0dXJuIGZhbHNl
OworI2VuZGlmCit9CisKKy8vIEZvbnREYXRhcyBhcmUgbm90IHJlZmNvdW50ZWQgdG8gYXZvaWQg
Y3ljbGVzLgordHlwZWRlZiBIYXNoTWFwPHN0ZDo6cGFpcjxVQ2hhcjMyLCB1bnNpZ25lZD4sIFNp
bXBsZUZvbnREYXRhKj4gQ2hhcmFjdGVyRmFsbGJhY2tNYXA7Cit0eXBlZGVmIEhhc2hNYXA8Y29u
c3QgU2ltcGxlRm9udERhdGEqLCBDaGFyYWN0ZXJGYWxsYmFja01hcD4gU3lzdGVtRmFsbGJhY2tD
YWNoZTsKKworc3RhdGljIFN5c3RlbUZhbGxiYWNrQ2FjaGUmIHN5c3RlbUZhbGxiYWNrQ2FjaGUo
KQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTeXN0ZW1GYWxsYmFja0NhY2hlPiBtYXA7
CisgICAgcmV0dXJuIG1hcC5nZXQoKTsKK30KKworUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1w
bGVGb250RGF0YTo6c3lzdGVtRmFsbGJhY2tGb250RGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGNo
YXJhY3RlciwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgYm9vbCBpc0ZvclBs
YXRmb3JtRm9udCkgY29uc3QKK3sKKyAgICBhdXRvIGZvbnRBZGRSZXN1bHQgPSBzeXN0ZW1GYWxs
YmFja0NhY2hlKCkuYWRkKHRoaXMsIENoYXJhY3RlckZhbGxiYWNrTWFwKCkpOworCisgICAgYXV0
byBrZXkgPSBzdGQ6Om1ha2VfcGFpcihjaGFyYWN0ZXIsIGlzRm9yUGxhdGZvcm1Gb250KTsKKyAg
ICBhdXRvIGNoYXJhY3RlckFkZFJlc3VsdCA9IGZvbnRBZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVl
LmFkZChrZXksIG51bGxwdHIpOworCisgICAgU2ltcGxlRm9udERhdGEqJiBmYWxsYmFja0ZvbnRE
YXRhID0gY2hhcmFjdGVyQWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKKworICAgIGlmICghZmFs
bGJhY2tGb250RGF0YSkgeworICAgICAgICBVQ2hhciBjb2RlVW5pdHNbMl07CisgICAgICAgIGlu
dCBjb2RlVW5pdHNMZW5ndGg7CisgICAgICAgIGlmIChVX0lTX0JNUChjaGFyYWN0ZXIpKSB7Cisg
ICAgICAgICAgICBjb2RlVW5pdHNbMF0gPSBGb250Q2FzY2FkZTo6bm9ybWFsaXplU3BhY2VzKGNo
YXJhY3Rlcik7CisgICAgICAgICAgICBjb2RlVW5pdHNMZW5ndGggPSAxOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgY29kZVVuaXRzWzBdID0gVTE2X0xFQUQoY2hhcmFjdGVyKTsKKyAg
ICAgICAgICAgIGNvZGVVbml0c1sxXSA9IFUxNl9UUkFJTChjaGFyYWN0ZXIpOworICAgICAgICAg
ICAgY29kZVVuaXRzTGVuZ3RoID0gMjsKKyAgICAgICAgfQorCisgICAgICAgIGZhbGxiYWNrRm9u
dERhdGEgPSBmb250Q2FjaGUoKS5zeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoZGVzY3JpcHRp
b24sIHRoaXMsIGlzRm9yUGxhdGZvcm1Gb250LCBjb2RlVW5pdHMsIGNvZGVVbml0c0xlbmd0aCku
Z2V0KCk7CisgICAgICAgIGlmIChmYWxsYmFja0ZvbnREYXRhKQorICAgICAgICAgICAgZmFsbGJh
Y2tGb250RGF0YS0+bV9pc1VzZWRJblN5c3RlbUZhbGxiYWNrQ2FjaGUgPSB0cnVlOworICAgIH0K
KworICAgIHJldHVybiBmYWxsYmFja0ZvbnREYXRhOworfQorCit2b2lkIFNpbXBsZUZvbnREYXRh
OjpyZW1vdmVGcm9tU3lzdGVtRmFsbGJhY2tDYWNoZSgpCit7CisgICAgc3lzdGVtRmFsbGJhY2tD
YWNoZSgpLnJlbW92ZSh0aGlzKTsKKworICAgIGlmICghbV9pc1VzZWRJblN5c3RlbUZhbGxiYWNr
Q2FjaGUpCisgICAgICAgIHJldHVybjsKKworICAgIGZvciAoYXV0byYgY2hhcmFjdGVyTWFwIDog
c3lzdGVtRmFsbGJhY2tDYWNoZSgpLnZhbHVlcygpKSB7CisgICAgICAgIFZlY3RvcjxzdGQ6OnBh
aXI8VUNoYXIzMiwgdW5zaWduZWQ+LCA1MTI+IHRvUmVtb3ZlOworICAgICAgICBmb3IgKGF1dG8m
IGVudHJ5IDogY2hhcmFjdGVyTWFwKSB7CisgICAgICAgICAgICBpZiAoZW50cnkudmFsdWUgPT0g
dGhpcykKKyAgICAgICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQoZW50cnkua2V5KTsKKyAgICAg
ICAgfQorICAgICAgICBmb3IgKGF1dG8mIGtleSA6IHRvUmVtb3ZlKQorICAgICAgICAgICAgY2hh
cmFjdGVyTWFwLnJlbW92ZShrZXkpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAJKHdvcmtp
bmcgY29weSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisjaW5jbHVkZSAiRm9udC5oIgogCiAjaWYg
UExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlO
X1JFUVVJUkVEID4gMTA4MCkKICNpbmNsdWRlICJDb3JlVGV4dFNQSS5oIgpAQCAtNTAsNyArNTAs
NyBAQCB1bnNpZ25lZCBHbHlwaFBhZ2U6OnNfY291bnQgPSAwOwogY29uc3QgZmxvYXQgc21hbGxD
YXBzRm9udFNpemVNdWx0aXBsaWVyID0gMC43ZjsKIGNvbnN0IGZsb2F0IGVtcGhhc2lzTWFya0Zv
bnRTaXplTXVsdGlwbGllciA9IDAuNWY7CiAKLVNpbXBsZUZvbnREYXRhOjpTaW1wbGVGb250RGF0
YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEsIGJvb2wgaXNDdXN0b21Gb250
LCBib29sIGlzTG9hZGluZywgYm9vbCBpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKQorRm9udDo6
Rm9udChjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEsIGJvb2wgaXNDdXN0b21G
b250LCBib29sIGlzTG9hZGluZywgYm9vbCBpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKQogICAg
IDogbV9tYXhDaGFyV2lkdGgoLTEpCiAgICAgLCBtX2F2Z0NoYXJXaWR0aCgtMSkKICAgICAsIG1f
cGxhdGZvcm1EYXRhKHBsYXRmb3JtRGF0YSkKQEAgLTc2LDcgKzc2LDcgQEAgU2ltcGxlRm9udERh
dGE6OlNpbXBsZUZvbnREYXRhKGNvbnN0IEZvbgogI2VuZGlmCiB9CiAKLVNpbXBsZUZvbnREYXRh
OjpTaW1wbGVGb250RGF0YShzdGQ6OnVuaXF1ZV9wdHI8U1ZHRGF0YT4gc3ZnRGF0YSwgZmxvYXQg
Zm9udFNpemUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpCitGb250
OjpGb250KHN0ZDo6dW5pcXVlX3B0cjxTVkdEYXRhPiBzdmdEYXRhLCBmbG9hdCBmb250U2l6ZSwg
Ym9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYykKICAgICA6IG1fcGxhdGZv
cm1EYXRhKEZvbnRQbGF0Zm9ybURhdGEoZm9udFNpemUsIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRp
Y0l0YWxpYykpCiAgICAgLCBtX3N2Z0RhdGEoV1RGOjptb3ZlKHN2Z0RhdGEpKQogICAgICwgbV90
cmVhdEFzRml4ZWRQaXRjaChmYWxzZSkKQEAgLTkzLDExICs5MywxMSBAQCBTaW1wbGVGb250RGF0
YTo6U2ltcGxlRm9udERhdGEoc3RkOjp1bmlxCiAgICAgLCBtX3Nob3VsZE5vdEJlVXNlZEZvckFy
YWJpYyhmYWxzZSkKICNlbmRpZgogewotICAgIG1fc3ZnRGF0YS0+aW5pdGlhbGl6ZUZvbnREYXRh
KHRoaXMsIGZvbnRTaXplKTsKKyAgICBtX3N2Z0RhdGEtPmluaXRpYWxpemVGb250KHRoaXMsIGZv
bnRTaXplKTsKIH0KIAogLy8gRXN0aW1hdGVzIG9mIGF2Z0NoYXJXaWR0aCBhbmQgbWF4Q2hhcldp
ZHRoIGZvciBwbGF0Zm9ybXMgdGhhdCBkb24ndCBzdXBwb3J0IGFjY2Vzc2luZyB0aGVzZSB2YWx1
ZXMgZnJvbSB0aGUgZm9udC4KLXZvaWQgU2ltcGxlRm9udERhdGE6OmluaXRDaGFyV2lkdGhzKCkK
K3ZvaWQgRm9udDo6aW5pdENoYXJXaWR0aHMoKQogewogICAgIGF1dG8qIGdseXBoUGFnZVplcm8g
PSBnbHlwaFBhZ2UoMCk7CiAKQEAgLTExNyw3ICsxMTcsNyBAQCB2b2lkIFNpbXBsZUZvbnREYXRh
Ojppbml0Q2hhcldpZHRocygpCiAgICAgICAgIG1fbWF4Q2hhcldpZHRoID0gc3RkOjptYXgobV9h
dmdDaGFyV2lkdGgsIG1fZm9udE1ldHJpY3MuZmxvYXRBc2NlbnQoKSk7CiB9CiAKLXZvaWQgU2lt
cGxlRm9udERhdGE6OnBsYXRmb3JtR2x5cGhJbml0KCkKK3ZvaWQgRm9udDo6cGxhdGZvcm1HbHlw
aEluaXQoKQogewogICAgIGF1dG8qIGdseXBoUGFnZVplcm8gPSBnbHlwaFBhZ2UoMCk7CiAgICAg
aWYgKCFnbHlwaFBhZ2VaZXJvKSB7CkBAIC0xMzYsNyArMTM2LDcgQEAgdm9pZCBTaW1wbGVGb250
RGF0YTo6cGxhdGZvcm1HbHlwaEluaXQoKQogCiAgICAgLy8gTmFzdHkgaGFjayB0byBkZXRlcm1p
bmUgaWYgd2Ugc2hvdWxkIHJvdW5kIG9yIGNlaWwgc3BhY2Ugd2lkdGhzLgogICAgIC8vIElmIHRo
ZSBmb250IGlzIG1vbm9zcGFjZSBvciBmYWtlIG1vbm9zcGFjZSB3ZSBjZWlsIHRvIGVuc3VyZSB0
aGF0IAotICAgIC8vIGV2ZXJ5IGNoYXJhY3RlciBhbmQgdGhlIHNwYWNlIGFyZSB0aGUgc2FtZSB3
aWR0aC4gIE90aGVyd2lzZSB3ZSByb3VuZC4KKyAgICAvLyBldmVyeSBjaGFyYWN0ZXIgYW5kIHRo
ZSBzcGFjZSBhcmUgdGhlIHNhbWUgd2lkdGguIE90aGVyd2lzZSB3ZSByb3VuZC4KICAgICBtX3Nw
YWNlR2x5cGggPSBnbHlwaFBhZ2VaZXJvLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoJyAnKS5nbHlw
aDsKICAgICBmbG9hdCB3aWR0aCA9IHdpZHRoRm9yR2x5cGgobV9zcGFjZUdseXBoKTsKICAgICBt
X3NwYWNlV2lkdGggPSB3aWR0aDsKQEAgLTE0NywzNyArMTQ3LDM3IEBAIHZvaWQgU2ltcGxlRm9u
dERhdGE6OnBsYXRmb3JtR2x5cGhJbml0KCkKIAogICAgIC8vIEZvcmNlIHRoZSBnbHlwaCBmb3Ig
WkVSTyBXSURUSCBTUEFDRSB0byBoYXZlIHplcm8gd2lkdGgsIHVubGVzcyBpdCBpcyBzaGFyZWQg
d2l0aCBTUEFDRS4KICAgICAvLyBIZWx2ZXRpY2EgaXMgYW4gZXhhbXBsZSBvZiBhIG5vbi16ZXJv
IHdpZHRoIFpFUk8gV0lEVEggU1BBQ0UgZ2x5cGguCi0gICAgLy8gU2VlIDxodHRwOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzE3OD4gYW5kIFNpbXBsZUZvbnREYXRhOjppc1pl
cm9XaWR0aFNwYWNlR2x5cGgoKQorICAgIC8vIFNlZSA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTMxNzg+IGFuZCBGb250Ojppc1plcm9XaWR0aFNwYWNlR2x5cGgoKQog
ICAgIGlmIChtX3plcm9XaWR0aFNwYWNlR2x5cGggPT0gbV9zcGFjZUdseXBoKQogICAgICAgICBt
X3plcm9XaWR0aFNwYWNlR2x5cGggPSAwOwogfQogCi1TaW1wbGVGb250RGF0YTo6flNpbXBsZUZv
bnREYXRhKCkKK0ZvbnQ6On5Gb250KCkKIHsKICAgICByZW1vdmVGcm9tU3lzdGVtRmFsbGJhY2tD
YWNoZSgpOwogfQogCi1zdGF0aWMgYm9vbCBmaWxsR2x5cGhQYWdlKEdseXBoUGFnZSYgcGFnZVRv
RmlsbCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIsIHVu
c2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQorc3Rh
dGljIGJvb2wgZmlsbEdseXBoUGFnZShHbHlwaFBhZ2UmIHBhZ2VUb0ZpbGwsIHVuc2lnbmVkIG9m
ZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5n
dGgsIGNvbnN0IEZvbnQqIGZvbnQpCiB7CiAjaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICBpZiAo
YXV0byogc3ZnRGF0YSA9IGZvbnREYXRhLT5zdmdEYXRhKCkpCi0gICAgICAgIHJldHVybiBzdmdE
YXRhLT5maWxsU1ZHR2x5cGhQYWdlKCZwYWdlVG9GaWxsLCBvZmZzZXQsIGxlbmd0aCwgYnVmZmVy
LCBidWZmZXJMZW5ndGgsIGZvbnREYXRhKTsKKyAgICBpZiAoYXV0byogc3ZnRGF0YSA9IGZvbnQt
PnN2Z0RhdGEoKSkKKyAgICAgICAgcmV0dXJuIHN2Z0RhdGEtPmZpbGxTVkdHbHlwaFBhZ2UoJnBh
Z2VUb0ZpbGwsIG9mZnNldCwgbGVuZ3RoLCBidWZmZXIsIGJ1ZmZlckxlbmd0aCwgZm9udCk7CiAj
ZW5kaWYKLSAgICBib29sIGhhc0dseXBocyA9IHBhZ2VUb0ZpbGwuZmlsbChvZmZzZXQsIGxlbmd0
aCwgYnVmZmVyLCBidWZmZXJMZW5ndGgsIGZvbnREYXRhKTsKKyAgICBib29sIGhhc0dseXBocyA9
IHBhZ2VUb0ZpbGwuZmlsbChvZmZzZXQsIGxlbmd0aCwgYnVmZmVyLCBidWZmZXJMZW5ndGgsIGZv
bnQpOwogI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKLSAgICBpZiAoaGFzR2x5cGhzICYm
IGZvbnREYXRhLT52ZXJ0aWNhbERhdGEoKSkKLSAgICAgICAgZm9udERhdGEtPnZlcnRpY2FsRGF0
YSgpLT5zdWJzdGl0dXRlV2l0aFZlcnRpY2FsR2x5cGhzKGZvbnREYXRhLCAmcGFnZVRvRmlsbCwg
b2Zmc2V0LCBsZW5ndGgpOworICAgIGlmIChoYXNHbHlwaHMgJiYgZm9udC0+dmVydGljYWxEYXRh
KCkpCisgICAgICAgIGZvbnQtPnZlcnRpY2FsRGF0YSgpLT5zdWJzdGl0dXRlV2l0aFZlcnRpY2Fs
R2x5cGhzKGZvbnQsICZwYWdlVG9GaWxsLCBvZmZzZXQsIGxlbmd0aCk7CiAjZW5kaWYKICAgICBy
ZXR1cm4gaGFzR2x5cGhzOwogfQogCi1zdGF0aWMgUmVmUHRyPEdseXBoUGFnZT4gY3JlYXRlQW5k
RmlsbEdseXBoUGFnZSh1bnNpZ25lZCBwYWdlTnVtYmVyLCBjb25zdCBTaW1wbGVGb250RGF0YSog
Zm9udERhdGEpCitzdGF0aWMgUmVmUHRyPEdseXBoUGFnZT4gY3JlYXRlQW5kRmlsbEdseXBoUGFn
ZSh1bnNpZ25lZCBwYWdlTnVtYmVyLCBjb25zdCBGb250KiBmb250KQogewogI2lmIFBMQVRGT1JN
KElPUykKICAgICAvLyBGSVhNRTogVGltZXMgTmV3IFJvbWFuIGNvbnRhaW5zIEFyYWJpYyBnbHlw
aHMsIGJ1dCBDb3JlIFRleHQgZG9lc24ndCBrbm93IGhvdyB0byBzaGFwZSB0aGVtLiBTZWUgPHJk
YXI6Ly9wcm9ibGVtLzk4MjM5NzU+LgotICAgIC8vIE9uY2Ugd2UgaGF2ZSB0aGUgZml4IGZvciA8
cmRhcjovL3Byb2JsZW0vOTgyMzk3NT4gdGhlbiByZW1vdmUgdGhpcyBjb2RlIHRvZ2V0aGVyIHdp
dGggU2ltcGxlRm9udERhdGE6OnNob3VsZE5vdEJlVXNlZEZvckFyYWJpYygpCisgICAgLy8gT25j
ZSB3ZSBoYXZlIHRoZSBmaXggZm9yIDxyZGFyOi8vcHJvYmxlbS85ODIzOTc1PiB0aGVuIHJlbW92
ZSB0aGlzIGNvZGUgdG9nZXRoZXIgd2l0aCBGb250OjpzaG91bGROb3RCZVVzZWRGb3JBcmFiaWMo
KQogICAgIC8vIGluIDxyZGFyOi8vcHJvYmxlbS8xMjA5NjgzNT4uCi0gICAgaWYgKHBhZ2VOdW1i
ZXIgPT0gNiAmJiBmb250RGF0YS0+c2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKCkpCisgICAgaWYg
KHBhZ2VOdW1iZXIgPT0gNiAmJiBmb250LT5zaG91bGROb3RCZVVzZWRGb3JBcmFiaWMoKSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAjZW5kaWYKIApAQCAtMTkwLDcgKzE5MCw3IEBAIHN0YXRp
YyBSZWZQdHI8R2x5cGhQYWdlPiBjcmVhdGVBbmRGaWxsR2wKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IEdseXBoUGFnZTo6c2l6ZTsgaSsrKQogICAgICAgICAgICAgYnVmZmVyW2ld
ID0gc3RhcnQgKyBpOwogCi0gICAgICAgIGlmIChzdGFydCA9PSAwKSB7CisgICAgICAgIGlmICgh
c3RhcnQpIHsKICAgICAgICAgICAgIC8vIENvbnRyb2wgY2hhcmFjdGVycyBtdXN0IG5vdCByZW5k
ZXIgYXQgYWxsLgogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDB4MjA7ICsr
aSkKICAgICAgICAgICAgICAgICBidWZmZXJbaV0gPSB6ZXJvV2lkdGhTcGFjZTsKQEAgLTIzNSwx
MiArMjM1LDEyIEBAIHN0YXRpYyBSZWZQdHI8R2x5cGhQYWdlPiBjcmVhdGVBbmRGaWxsR2wKICAg
ICAvLyBTdWNjZXNzIGlzIG5vdCBndWFyYW50ZWVkLiBGb3IgZXhhbXBsZSwgVGltZXMgZmFpbHMg
dG8gZmlsbCBwYWdlIDI2MCwgZ2l2aW5nIGdseXBoIGRhdGEKICAgICAvLyBmb3Igb25seSAxMjgg
b3V0IG9mIDI1NiBjaGFyYWN0ZXJzLgogICAgIFJlZlB0cjxHbHlwaFBhZ2U+IGdseXBoUGFnZTsK
LSAgICBpZiAoR2x5cGhQYWdlOjptYXlVc2VNaXhlZEZvbnREYXRhV2hlbkZpbGxpbmcoYnVmZmVy
LCBidWZmZXJMZW5ndGgsIGZvbnREYXRhKSkKLSAgICAgICAgZ2x5cGhQYWdlID0gR2x5cGhQYWdl
OjpjcmVhdGVGb3JNaXhlZEZvbnREYXRhKCk7CisgICAgaWYgKEdseXBoUGFnZTo6bWF5VXNlTWl4
ZWRGb250c1doZW5GaWxsaW5nKGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCBmb250KSkKKyAgICAgICAg
Z2x5cGhQYWdlID0gR2x5cGhQYWdlOjpjcmVhdGVGb3JNaXhlZEZvbnRzKCk7CiAgICAgZWxzZQot
ICAgICAgICBnbHlwaFBhZ2UgPSBHbHlwaFBhZ2U6OmNyZWF0ZUZvclNpbmdsZUZvbnREYXRhKGZv
bnREYXRhKTsKKyAgICAgICAgZ2x5cGhQYWdlID0gR2x5cGhQYWdlOjpjcmVhdGVGb3JTaW5nbGVG
b250KGZvbnQpOwogCi0gICAgYm9vbCBoYXZlR2x5cGhzID0gZmlsbEdseXBoUGFnZSgqZ2x5cGhQ
YWdlLCAwLCBHbHlwaFBhZ2U6OnNpemUsIGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCBmb250RGF0YSk7
CisgICAgYm9vbCBoYXZlR2x5cGhzID0gZmlsbEdseXBoUGFnZSgqZ2x5cGhQYWdlLCAwLCBHbHlw
aFBhZ2U6OnNpemUsIGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCBmb250KTsKICAgICBpZiAoIWhhdmVH
bHlwaHMpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0yNDgsOSArMjQ4LDkgQEAgc3Rh
dGljIFJlZlB0cjxHbHlwaFBhZ2U+IGNyZWF0ZUFuZEZpbGxHbAogICAgIHJldHVybiBnbHlwaFBh
Z2U7CiB9CiAKLWNvbnN0IEdseXBoUGFnZSogU2ltcGxlRm9udERhdGE6OmdseXBoUGFnZSh1bnNp
Z25lZCBwYWdlTnVtYmVyKSBjb25zdAorY29uc3QgR2x5cGhQYWdlKiBGb250OjpnbHlwaFBhZ2Uo
dW5zaWduZWQgcGFnZU51bWJlcikgY29uc3QKIHsKLSAgICBpZiAocGFnZU51bWJlciA9PSAwKSB7
CisgICAgaWYgKCFwYWdlTnVtYmVyKSB7CiAgICAgICAgIGlmICghbV9nbHlwaFBhZ2VaZXJvKQog
ICAgICAgICAgICAgbV9nbHlwaFBhZ2VaZXJvID0gY3JlYXRlQW5kRmlsbEdseXBoUGFnZSgwLCB0
aGlzKTsKICAgICAgICAgcmV0dXJuIG1fZ2x5cGhQYWdlWmVyby5nZXQoKTsKQEAgLTI2Miw3ICsy
NjIsNyBAQCBjb25zdCBHbHlwaFBhZ2UqIFNpbXBsZUZvbnREYXRhOjpnbHlwaFBhCiAgICAgcmV0
dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7CiB9CiAKLUdseXBoIFNpbXBsZUZv
bnREYXRhOjpnbHlwaEZvckNoYXJhY3RlcihVQ2hhcjMyIGNoYXJhY3RlcikgY29uc3QKK0dseXBo
IEZvbnQ6OmdseXBoRm9yQ2hhcmFjdGVyKFVDaGFyMzIgY2hhcmFjdGVyKSBjb25zdAogewogICAg
IGF1dG8qIHBhZ2UgPSBnbHlwaFBhZ2UoY2hhcmFjdGVyIC8gR2x5cGhQYWdlOjpzaXplKTsKICAg
ICBpZiAoIXBhZ2UpCkBAIC0yNzAsNyArMjcwLDcgQEAgR2x5cGggU2ltcGxlRm9udERhdGE6Omds
eXBoRm9yQ2hhcmFjdGVyKAogICAgIHJldHVybiBwYWdlLT5nbHlwaEF0KGNoYXJhY3RlciAlIEds
eXBoUGFnZTo6c2l6ZSk7CiB9CiAKLUdseXBoRGF0YSBTaW1wbGVGb250RGF0YTo6Z2x5cGhEYXRh
Rm9yQ2hhcmFjdGVyKFVDaGFyMzIgY2hhcmFjdGVyKSBjb25zdAorR2x5cGhEYXRhIEZvbnQ6Omds
eXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGNoYXJhY3RlcikgY29uc3QKIHsKICAgICBhdXRv
KiBwYWdlID0gZ2x5cGhQYWdlKGNoYXJhY3RlciAvIEdseXBoUGFnZTo6c2l6ZSk7CiAgICAgaWYg
KCFwYWdlKQpAQCAtMjc4LDcgKzI3OCw3IEBAIEdseXBoRGF0YSBTaW1wbGVGb250RGF0YTo6Z2x5
cGhEYXRhRm9yQ2gKICAgICByZXR1cm4gcGFnZS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJh
Y3Rlcik7CiB9CiAKLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjp2
ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250RGF0YSgpIGNvbnN0CitQYXNzUmVmUHRyPEZvbnQ+
IEZvbnQ6OnZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbkZvbnQoKSBjb25zdAogewogICAgIGlmICgh
bV9kZXJpdmVkRm9udERhdGEpCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gc3RkOjptYWtl
X3VuaXF1ZTxEZXJpdmVkRm9udERhdGE+KGlzQ3VzdG9tRm9udCgpKTsKQEAgLTI5MCw3ICsyOTAs
NyBAQCBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0CiAgICAgcmV0dXJu
IG1fZGVyaXZlZEZvbnREYXRhLT52ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb247CiB9CiAKLVBhc3NS
ZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjp1cHJpZ2h0T3JpZW50YXRpb25G
b250RGF0YSgpIGNvbnN0CitQYXNzUmVmUHRyPEZvbnQ+IEZvbnQ6OnVwcmlnaHRPcmllbnRhdGlv
bkZvbnQoKSBjb25zdAogewogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEpCiAgICAgICAgIG1f
ZGVyaXZlZEZvbnREYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxEZXJpdmVkRm9udERhdGE+KGlzQ3Vz
dG9tRm9udCgpKTsKQEAgLTI5OSwyNyArMjk5LDI3IEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERh
dGE+IFNpbXBsZUZvbnREYXQKICAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPnVwcmlnaHRP
cmllbnRhdGlvbjsKIH0KIAotUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERh
dGE6OnNtYWxsQ2Fwc0ZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0
aW9uKSBjb25zdAorUGFzc1JlZlB0cjxGb250PiBGb250OjpzbWFsbENhcHNGb250KGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAogewogICAgIGlmICghbV9kZXJp
dmVkRm9udERhdGEpCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gc3RkOjptYWtlX3VuaXF1
ZTxEZXJpdmVkRm9udERhdGE+KGlzQ3VzdG9tRm9udCgpKTsKICAgICBpZiAoIW1fZGVyaXZlZEZv
bnREYXRhLT5zbWFsbENhcHMpCi0gICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMg
PSBjcmVhdGVTY2FsZWRGb250RGF0YShmb250RGVzY3JpcHRpb24sIHNtYWxsQ2Fwc0ZvbnRTaXpl
TXVsdGlwbGllcik7CisgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMgPSBjcmVh
dGVTY2FsZWRGb250KGZvbnREZXNjcmlwdGlvbiwgc21hbGxDYXBzRm9udFNpemVNdWx0aXBsaWVy
KTsKIAogICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzOwogfQogCi1QYXNz
UmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6ZW1waGFzaXNNYXJrRm9udERh
dGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0CitQYXNzUmVm
UHRyPEZvbnQ+IEZvbnQ6OmVtcGhhc2lzTWFya0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBm
b250RGVzY3JpcHRpb24pIGNvbnN0CiB7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKICAg
ICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPERlcml2ZWRGb250RGF0
YT4oaXNDdXN0b21Gb250KCkpOwogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lz
TWFyaykKLSAgICAgICAgbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyayA9IGNyZWF0ZVNj
YWxlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgZW1waGFzaXNNYXJrRm9udFNpemVNdWx0aXBs
aWVyKTsKKyAgICAgICAgbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyayA9IGNyZWF0ZVNj
YWxlZEZvbnQoZm9udERlc2NyaXB0aW9uLCBlbXBoYXNpc01hcmtGb250U2l6ZU11bHRpcGxpZXIp
OwogCiAgICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcms7CiB9CiAKLVBh
c3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpicm9rZW5JZGVvZ3JhcGhG
b250RGF0YSgpIGNvbnN0CitQYXNzUmVmUHRyPEZvbnQ+IEZvbnQ6OmJyb2tlbklkZW9ncmFwaEZv
bnQoKSBjb25zdAogewogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEpCiAgICAgICAgIG1fZGVy
aXZlZEZvbnREYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxEZXJpdmVkRm9udERhdGE+KGlzQ3VzdG9t
Rm9udCgpKTsKQEAgLTMzMCw3ICszMzAsNyBAQCBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBT
aW1wbGVGb250RGF0CiAgICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5icm9rZW5JZGVvZ3Jh
cGg7CiB9CiAKLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpub25T
eW50aGV0aWNJdGFsaWNGb250RGF0YSgpIGNvbnN0CitQYXNzUmVmUHRyPEZvbnQ+IEZvbnQ6Om5v
blN5bnRoZXRpY0l0YWxpY0ZvbnQoKSBjb25zdAogewogICAgIGlmICghbV9kZXJpdmVkRm9udERh
dGEpCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxEZXJpdmVk
Rm9udERhdGE+KGlzQ3VzdG9tRm9udCgpKTsKQEAgLTM0NSw3ICszNDUsNyBAQCBQYXNzUmVmUHRy
PFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0CiB9CiAKICNpZm5kZWYgTkRFQlVHCi1TdHJp
bmcgU2ltcGxlRm9udERhdGE6OmRlc2NyaXB0aW9uKCkgY29uc3QKK1N0cmluZyBGb250OjpkZXNj
cmlwdGlvbigpIGNvbnN0CiB7CiAgICAgaWYgKGlzU1ZHRm9udCgpKQogICAgICAgICByZXR1cm4g
IltTVkcgZm9udF0iOwpAQCAtMzU2LDcgKzM1Niw3IEBAIFN0cmluZyBTaW1wbGVGb250RGF0YTo6
ZGVzY3JpcHRpb24oKSBjb24KIH0KICNlbmRpZgogCi1jb25zdCBPcGVuVHlwZU1hdGhEYXRhKiBT
aW1wbGVGb250RGF0YTo6bWF0aERhdGEoKSBjb25zdAorY29uc3QgT3BlblR5cGVNYXRoRGF0YSog
Rm9udDo6bWF0aERhdGEoKSBjb25zdAogewogICAgIGlmIChtX2lzTG9hZGluZykKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CkBAIC0zNjgsMTkgKzM2OCwxOSBAQCBjb25zdCBPcGVuVHlwZU1hdGhE
YXRhKiBTaW1wbGVGb250RGF0YTo6CiAgICAgcmV0dXJuIG1fbWF0aERhdGEuZ2V0KCk7CiB9CiAK
LVNpbXBsZUZvbnREYXRhOjpEZXJpdmVkRm9udERhdGE6On5EZXJpdmVkRm9udERhdGEoKQorRm9u
dDo6RGVyaXZlZEZvbnREYXRhOjp+RGVyaXZlZEZvbnREYXRhKCkKIHsKIH0KIAotUGFzc1JlZlB0
cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZVNjYWxlZEZvbnREYXRhKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBzY2FsZUZhY3Rvcikg
Y29uc3QKK1Bhc3NSZWZQdHI8Rm9udD4gRm9udDo6Y3JlYXRlU2NhbGVkRm9udChjb25zdCBGb250
RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0CiB7
CiAgICAgaWYgKGlzU1ZHRm9udCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJl
dHVybiBwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgc2NhbGVG
YWN0b3IpOworICAgIHJldHVybiBwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZvbnQoZm9udERlc2NyaXB0
aW9uLCBzY2FsZUZhY3Rvcik7CiB9CiAKLWJvb2wgU2ltcGxlRm9udERhdGE6OmFwcGx5VHJhbnNm
b3JtcyhHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5j
ZXMsIHNpemVfdCBnbHlwaENvdW50LCBUeXBlc2V0dGluZ0ZlYXR1cmVzIHR5cGVzZXR0aW5nRmVh
dHVyZXMpIGNvbnN0Citib29sIEZvbnQ6OmFwcGx5VHJhbnNmb3JtcyhHbHlwaEJ1ZmZlckdseXBo
KiBnbHlwaHMsIEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHNpemVfdCBnbHlwaENvdW50
LCBUeXBlc2V0dGluZ0ZlYXR1cmVzIHR5cGVzZXR0aW5nRmVhdHVyZXMpIGNvbnN0CiB7CiAgICAg
Ly8gV2UgbmVlZCB0byBoYW5kbGUgdHJhbnNmb3JtcyBvbiBTVkcgZm9udHMgaW50ZXJuYWxseSwg
c2luY2UgdGhleSBhcmUgcmVuZGVyZWQgaW50ZXJuYWxseS4KICAgICBBU1NFUlQoIWlzU1ZHRm9u
dCgpKTsKQEAgLTM5Niw5ICszOTYsOSBAQCBib29sIFNpbXBsZUZvbnREYXRhOjphcHBseVRyYW5z
Zm9ybXMoR2x5CiAjZW5kaWYKIH0KIAotLy8gRm9udERhdGFzIGFyZSBub3QgcmVmY291bnRlZCB0
byBhdm9pZCBjeWNsZXMuCi10eXBlZGVmIEhhc2hNYXA8c3RkOjpwYWlyPFVDaGFyMzIsIHVuc2ln
bmVkPiwgU2ltcGxlRm9udERhdGEqPiBDaGFyYWN0ZXJGYWxsYmFja01hcDsKLXR5cGVkZWYgSGFz
aE1hcDxjb25zdCBTaW1wbGVGb250RGF0YSosIENoYXJhY3RlckZhbGxiYWNrTWFwPiBTeXN0ZW1G
YWxsYmFja0NhY2hlOworLy8gRm9udHMgYXJlIG5vdCByZWYnZCB0byBhdm9pZCBjeWNsZXMuCit0
eXBlZGVmIEhhc2hNYXA8c3RkOjpwYWlyPFVDaGFyMzIsIHVuc2lnbmVkPiwgRm9udCo+IENoYXJh
Y3RlckZhbGxiYWNrTWFwOwordHlwZWRlZiBIYXNoTWFwPGNvbnN0IEZvbnQqLCBDaGFyYWN0ZXJG
YWxsYmFja01hcD4gU3lzdGVtRmFsbGJhY2tDYWNoZTsKIAogc3RhdGljIFN5c3RlbUZhbGxiYWNr
Q2FjaGUmIHN5c3RlbUZhbGxiYWNrQ2FjaGUoKQogewpAQCAtNDA2LDE2ICs0MDYsMTYgQEAgc3Rh
dGljIFN5c3RlbUZhbGxiYWNrQ2FjaGUmIHN5c3RlbUZhbGxiYQogICAgIHJldHVybiBtYXAuZ2V0
KCk7CiB9CiAKLVJlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OnN5c3RlbUZh
bGxiYWNrRm9udERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjaGFyYWN0ZXIsIGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGJvb2wgaXNGb3JQbGF0Zm9ybUZvbnQpIGNvbnN0CitS
ZWZQdHI8Rm9udD4gRm9udDo6c3lzdGVtRmFsbGJhY2tGb250Rm9yQ2hhcmFjdGVyKFVDaGFyMzIg
Y2hhcmFjdGVyLCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBib29sIGlzRm9y
UGxhdGZvcm1Gb250KSBjb25zdAogewogICAgIGF1dG8gZm9udEFkZFJlc3VsdCA9IHN5c3RlbUZh
bGxiYWNrQ2FjaGUoKS5hZGQodGhpcywgQ2hhcmFjdGVyRmFsbGJhY2tNYXAoKSk7CiAKICAgICBh
dXRvIGtleSA9IHN0ZDo6bWFrZV9wYWlyKGNoYXJhY3RlciwgaXNGb3JQbGF0Zm9ybUZvbnQpOwog
ICAgIGF1dG8gY2hhcmFjdGVyQWRkUmVzdWx0ID0gZm9udEFkZFJlc3VsdC5pdGVyYXRvci0+dmFs
dWUuYWRkKGtleSwgbnVsbHB0cik7CiAKLSAgICBTaW1wbGVGb250RGF0YSomIGZhbGxiYWNrRm9u
dERhdGEgPSBjaGFyYWN0ZXJBZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOworICAgIEZvbnQqJiBm
YWxsYmFja0ZvbnQgPSBjaGFyYWN0ZXJBZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogCi0gICAg
aWYgKCFmYWxsYmFja0ZvbnREYXRhKSB7CisgICAgaWYgKCFmYWxsYmFja0ZvbnQpIHsKICAgICAg
ICAgVUNoYXIgY29kZVVuaXRzWzJdOwogICAgICAgICBpbnQgY29kZVVuaXRzTGVuZ3RoOwogICAg
ICAgICBpZiAoVV9JU19CTVAoY2hhcmFjdGVyKSkgewpAQCAtNDI3LDE1ICs0MjcsMTUgQEAgUmVm
UHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6cwogICAgICAgICAgICAgY29kZVVu
aXRzTGVuZ3RoID0gMjsKICAgICAgICAgfQogCi0gICAgICAgIGZhbGxiYWNrRm9udERhdGEgPSBm
b250Q2FjaGUoKS5zeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoZGVzY3JpcHRpb24sIHRoaXMs
IGlzRm9yUGxhdGZvcm1Gb250LCBjb2RlVW5pdHMsIGNvZGVVbml0c0xlbmd0aCkuZ2V0KCk7Ci0g
ICAgICAgIGlmIChmYWxsYmFja0ZvbnREYXRhKQotICAgICAgICAgICAgZmFsbGJhY2tGb250RGF0
YS0+bV9pc1VzZWRJblN5c3RlbUZhbGxiYWNrQ2FjaGUgPSB0cnVlOworICAgICAgICBmYWxsYmFj
a0ZvbnQgPSBmb250Q2FjaGUoKS5zeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoZGVzY3JpcHRp
b24sIHRoaXMsIGlzRm9yUGxhdGZvcm1Gb250LCBjb2RlVW5pdHMsIGNvZGVVbml0c0xlbmd0aCku
Z2V0KCk7CisgICAgICAgIGlmIChmYWxsYmFja0ZvbnQpCisgICAgICAgICAgICBmYWxsYmFja0Zv
bnQtPm1faXNVc2VkSW5TeXN0ZW1GYWxsYmFja0NhY2hlID0gdHJ1ZTsKICAgICB9CiAKLSAgICBy
ZXR1cm4gZmFsbGJhY2tGb250RGF0YTsKKyAgICByZXR1cm4gZmFsbGJhY2tGb250OwogfQogCi12
b2lkIFNpbXBsZUZvbnREYXRhOjpyZW1vdmVGcm9tU3lzdGVtRmFsbGJhY2tDYWNoZSgpCit2b2lk
IEZvbnQ6OnJlbW92ZUZyb21TeXN0ZW1GYWxsYmFja0NhY2hlKCkKIHsKICAgICBzeXN0ZW1GYWxs
YmFja0NhY2hlKCkucmVtb3ZlKHRoaXMpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udC5oCShyZXZpc2lvbiAxNzg2NTApCShmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmg6MTc4NjUwKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzY5
IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIGludGVybmFsIGZvbnQgaW1wbGVt
ZW50YXRpb24uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4LCAyMDEwLCAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4
IFRvcmNoIE1vYmlsZSwgSW5jLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBTaW1wbGVGb250RGF0YV9oCisjZGVmaW5l
IFNpbXBsZUZvbnREYXRhX2gKKworI2luY2x1ZGUgIkZvbnRCYXNlbGluZS5oIgorI2luY2x1ZGUg
IkZvbnRNZXRyaWNzLmgiCisjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgorI2luY2x1ZGUg
IkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCisjaW5jbHVkZSAiR2x5cGhN
ZXRyaWNzTWFwLmgiCisjaW5jbHVkZSAiR2x5cGhQYWdlLmgiCisjaW5jbHVkZSAiT3BlblR5cGVN
YXRoRGF0YS5oIgorI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKKyNpbmNsdWRlICJPcGVu
VHlwZVZlcnRpY2FsRGF0YS5oIgorI2VuZGlmCisjaW5jbHVkZSAiVHlwZXNldHRpbmdGZWF0dXJl
cy5oIgorI2luY2x1ZGUgPHd0Zi9UeXBlQ2FzdHMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdIYXNoLmg+CisKKyNpZiBQTEFURk9STShDT0NPQSkKKyNpbmNsdWRlICJXZWJDb3JlU3lzdGVt
SW50ZXJmYWNlLmgiCisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2VuZGlmCisKKyNpZiBQ
TEFURk9STShXSU4pCisjaW5jbHVkZSA8dXNwMTAuaD4KKyNlbmRpZgorCisjaWYgVVNFKENBSVJP
KQorI2luY2x1ZGUgPGNhaXJvLmg+CisjZW5kaWYKKworI2lmIFVTRShDRykKKyNpbmNsdWRlIDxX
ZWJDb3JlL0NvcmVHcmFwaGljc1NQSS5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgR2x5cGhQYWdlOworY2xhc3MgRm9udERlc2NyaXB0aW9uOworY2xhc3MgU2hhcmVk
QnVmZmVyOworc3RydWN0IEdseXBoRGF0YTsKK3N0cnVjdCBXaWR0aEl0ZXJhdG9yOworCitlbnVt
IEZvbnREYXRhVmFyaWFudCB7IEF1dG9WYXJpYW50LCBOb3JtYWxWYXJpYW50LCBTbWFsbENhcHNW
YXJpYW50LCBFbXBoYXNpc01hcmtWYXJpYW50LCBCcm9rZW5JZGVvZ3JhcGhWYXJpYW50IH07Citl
bnVtIFBpdGNoIHsgVW5rbm93blBpdGNoLCBGaXhlZFBpdGNoLCBWYXJpYWJsZVBpdGNoIH07CisK
K2NsYXNzIFNpbXBsZUZvbnREYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8U2ltcGxlRm9udERhdGE+
IHsKK3B1YmxpYzoKKyAgICBjbGFzcyBTVkdEYXRhIHsKKyAgICAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIH5TVkdEYXRhKCkgeyB9CisK
KyAgICAgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVGb250RGF0YShTaW1wbGVGb250RGF0YSos
IGZsb2F0IGZvbnRTaXplKSA9IDA7CisgICAgICAgIHZpcnR1YWwgZmxvYXQgd2lkdGhGb3JTVkdH
bHlwaChHbHlwaCwgZmxvYXQgZm9udFNpemUpIGNvbnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCBi
b29sIGZpbGxTVkdHbHlwaFBhZ2UoR2x5cGhQYWdlKiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25l
ZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgU2lt
cGxlRm9udERhdGEqKSBjb25zdCA9IDA7CisgICAgfTsKKworICAgIC8vIFVzZWQgdG8gY3JlYXRl
IHBsYXRmb3JtIGZvbnRzLgorICAgIHN0YXRpYyBSZWY8U2ltcGxlRm9udERhdGE+IGNyZWF0ZShj
b25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEsIGJvb2wgaXNDdXN0b21Gb250ID0g
ZmFsc2UsIGJvb2wgaXNMb2FkaW5nID0gZmFsc2UsIGJvb2wgaXNUZXh0T3JpZW50YXRpb25GYWxs
YmFjayA9IGZhbHNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2ltcGxl
Rm9udERhdGEocGxhdGZvcm1EYXRhLCBpc0N1c3RvbUZvbnQsIGlzTG9hZGluZywgaXNUZXh0T3Jp
ZW50YXRpb25GYWxsYmFjaykpOworICAgIH0KKworICAgIC8vIFVzZWQgdG8gY3JlYXRlIFNWRyBG
b250cy4KKyAgICBzdGF0aWMgUmVmPFNpbXBsZUZvbnREYXRhPiBjcmVhdGUoc3RkOjp1bmlxdWVf
cHRyPFNWR0RhdGE+IHN2Z0RhdGEsIGZsb2F0IGZvbnRTaXplLCBib29sIHN5bnRoZXRpY0JvbGQs
IGJvb2wgc3ludGhldGljSXRhbGljKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgU2ltcGxlRm9udERhdGEoV1RGOjptb3ZlKHN2Z0RhdGEpLCBmb250U2l6ZSwgc3ludGhldGlj
Qm9sZCwgc3ludGhldGljSXRhbGljKSk7CisgICAgfQorCisgICAgflNpbXBsZUZvbnREYXRhKCk7
CisKKyAgICBzdGF0aWMgY29uc3QgU2ltcGxlRm9udERhdGEqIHN5c3RlbUZhbGxiYWNrKCkgeyBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBTaW1wbGVGb250RGF0YSo+KC0xKTsgfQorCisg
ICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhKCkgY29uc3QgeyByZXR1cm4g
bV9wbGF0Zm9ybURhdGE7IH0KKyAgICBjb25zdCBPcGVuVHlwZU1hdGhEYXRhKiBtYXRoRGF0YSgp
IGNvbnN0OworI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKKyAgICBjb25zdCBPcGVuVHlw
ZVZlcnRpY2FsRGF0YSogdmVydGljYWxEYXRhKCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0aWNhbERh
dGEuZ2V0KCk7IH0KKyNlbmRpZgorCisgICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gc21h
bGxDYXBzRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJikgY29uc3Q7CisgICAgUGFzc1Jl
ZlB0cjxTaW1wbGVGb250RGF0YT4gZW1waGFzaXNNYXJrRm9udERhdGEoY29uc3QgRm9udERlc2Ny
aXB0aW9uJikgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gYnJva2VuSWRl
b2dyYXBoRm9udERhdGEoKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBu
b25TeW50aGV0aWNJdGFsaWNGb250RGF0YSgpIGNvbnN0OworCisgICAgUGFzc1JlZlB0cjxTaW1w
bGVGb250RGF0YT4gdmFyaWFudEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3Jp
cHRpb24sIEZvbnREYXRhVmFyaWFudCB2YXJpYW50KSBjb25zdAorICAgIHsKKyAgICAgICAgc3dp
dGNoICh2YXJpYW50KSB7CisgICAgICAgIGNhc2UgU21hbGxDYXBzVmFyaWFudDoKKyAgICAgICAg
ICAgIHJldHVybiBzbWFsbENhcHNGb250RGF0YShkZXNjcmlwdGlvbik7CisgICAgICAgIGNhc2Ug
RW1waGFzaXNNYXJrVmFyaWFudDoKKyAgICAgICAgICAgIHJldHVybiBlbXBoYXNpc01hcmtGb250
RGF0YShkZXNjcmlwdGlvbik7CisgICAgICAgIGNhc2UgQnJva2VuSWRlb2dyYXBoVmFyaWFudDoK
KyAgICAgICAgICAgIHJldHVybiBicm9rZW5JZGVvZ3JhcGhGb250RGF0YSgpOworICAgICAgICBj
YXNlIEF1dG9WYXJpYW50OgorICAgICAgICBjYXNlIE5vcm1hbFZhcmlhbnQ6CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgcmV0dXJuIGNvbnN0X2Nhc3Q8U2ltcGxlRm9udERhdGEqPih0aGlzKTsKKyAgICB9CisKKyAg
ICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiB2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250
RGF0YSgpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IHVwcmlnaHRPcmll
bnRhdGlvbkZvbnREYXRhKCkgY29uc3Q7CisKKyAgICBib29sIGhhc1ZlcnRpY2FsR2x5cGhzKCkg
Y29uc3QgeyByZXR1cm4gbV9oYXNWZXJ0aWNhbEdseXBoczsgfQorICAgIGJvb2wgaXNUZXh0T3Jp
ZW50YXRpb25GYWxsYmFjaygpIGNvbnN0IHsgcmV0dXJuIG1faXNUZXh0T3JpZW50YXRpb25GYWxs
YmFjazsgfQorCisgICAgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzKCkgeyByZXR1cm4gbV9mb250
TWV0cmljczsgfQorICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBmb250TWV0cmljcygpIGNvbnN0IHsg
cmV0dXJuIG1fZm9udE1ldHJpY3M7IH0KKyAgICBmbG9hdCBzaXplUGVyVW5pdCgpIGNvbnN0IHsg
cmV0dXJuIHBsYXRmb3JtRGF0YSgpLnNpemUoKSAvIChmb250TWV0cmljcygpLnVuaXRzUGVyRW0o
KSA/IGZvbnRNZXRyaWNzKCkudW5pdHNQZXJFbSgpIDogMSk7IH0KKworICAgIGZsb2F0IG1heENo
YXJXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4Q2hhcldpZHRoOyB9CisgICAgdm9pZCBzZXRN
YXhDaGFyV2lkdGgoZmxvYXQgbWF4Q2hhcldpZHRoKSB7IG1fbWF4Q2hhcldpZHRoID0gbWF4Q2hh
cldpZHRoOyB9CisKKyAgICBmbG9hdCBhdmdDaGFyV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2F2
Z0NoYXJXaWR0aDsgfQorICAgIHZvaWQgc2V0QXZnQ2hhcldpZHRoKGZsb2F0IGF2Z0NoYXJXaWR0
aCkgeyBtX2F2Z0NoYXJXaWR0aCA9IGF2Z0NoYXJXaWR0aDsgfQorCisgICAgRmxvYXRSZWN0IGJv
dW5kc0ZvckdseXBoKEdseXBoKSBjb25zdDsKKyAgICBmbG9hdCB3aWR0aEZvckdseXBoKEdseXBo
IGdseXBoKSBjb25zdDsKKyAgICBGbG9hdFJlY3QgcGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlw
aCkgY29uc3Q7CisgICAgZmxvYXQgcGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoKSBjb25zdDsK
KworICAgIGZsb2F0IHNwYWNlV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3NwYWNlV2lkdGg7IH0K
KyAgICBmbG9hdCBhZGp1c3RlZFNwYWNlV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2FkanVzdGVk
U3BhY2VXaWR0aDsgfQorICAgIHZvaWQgc2V0U3BhY2VXaWR0aHMoZmxvYXQgc3BhY2VXaWR0aCkK
KyAgICB7CisgICAgICAgIG1fc3BhY2VXaWR0aCA9IHNwYWNlV2lkdGg7CisgICAgICAgIG1fYWRq
dXN0ZWRTcGFjZVdpZHRoID0gc3BhY2VXaWR0aDsKKyAgICB9CisKKyNpZiBVU0UoQ0cpIHx8IFVT
RShDQUlSTykKKyAgICBmbG9hdCBzeW50aGV0aWNCb2xkT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4g
bV9zeW50aGV0aWNCb2xkT2Zmc2V0OyB9CisjZW5kaWYKKworICAgIEdseXBoIHNwYWNlR2x5cGgo
KSBjb25zdCB7IHJldHVybiBtX3NwYWNlR2x5cGg7IH0KKyAgICB2b2lkIHNldFNwYWNlR2x5cGgo
R2x5cGggc3BhY2VHbHlwaCkgeyBtX3NwYWNlR2x5cGggPSBzcGFjZUdseXBoOyB9CisgICAgR2x5
cGggemVyb1dpZHRoU3BhY2VHbHlwaCgpIGNvbnN0IHsgcmV0dXJuIG1femVyb1dpZHRoU3BhY2VH
bHlwaDsgfQorICAgIHZvaWQgc2V0WmVyb1dpZHRoU3BhY2VHbHlwaChHbHlwaCBzcGFjZUdseXBo
KSB7IG1femVyb1dpZHRoU3BhY2VHbHlwaCA9IHNwYWNlR2x5cGg7IH0KKyAgICBib29sIGlzWmVy
b1dpZHRoU3BhY2VHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QgeyByZXR1cm4gZ2x5cGggPT0gbV96
ZXJvV2lkdGhTcGFjZUdseXBoICYmIGdseXBoOyB9CisgICAgR2x5cGggemVyb0dseXBoKCkgY29u
c3QgeyByZXR1cm4gbV96ZXJvR2x5cGg7IH0KKyAgICB2b2lkIHNldFplcm9HbHlwaChHbHlwaCB6
ZXJvR2x5cGgpIHsgbV96ZXJvR2x5cGggPSB6ZXJvR2x5cGg7IH0KKworICAgIEdseXBoRGF0YSBn
bHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMikgY29uc3Q7CisgICAgR2x5cGggZ2x5cGhGb3JD
aGFyYWN0ZXIoVUNoYXIzMikgY29uc3Q7CisKKyAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IHN5
c3RlbUZhbGxiYWNrRm9udERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiwgY29uc3QgRm9udERlc2Ny
aXB0aW9uJiwgYm9vbCBpc0ZvclBsYXRmb3JtRm9udCkgY29uc3Q7CisKKyAgICBjb25zdCBHbHlw
aFBhZ2UqIGdseXBoUGFnZSh1bnNpZ25lZCBwYWdlTnVtYmVyKSBjb25zdDsKKworICAgIHZvaWQg
ZGV0ZXJtaW5lUGl0Y2goKTsKKyAgICBQaXRjaCBwaXRjaCgpIGNvbnN0IHsgcmV0dXJuIG1fdHJl
YXRBc0ZpeGVkUGl0Y2ggPyBGaXhlZFBpdGNoIDogVmFyaWFibGVQaXRjaDsgfQorCisgICAgY29u
c3QgU1ZHRGF0YSogc3ZnRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fc3ZnRGF0YS5nZXQoKTsgfQor
ICAgIGJvb2wgaXNTVkdGb250KCkgY29uc3QgeyByZXR1cm4gISFtX3N2Z0RhdGE7IH0KKworICAg
IGJvb2wgaXNDdXN0b21Gb250KCkgY29uc3QgeyByZXR1cm4gbV9pc0N1c3RvbUZvbnQ7IH0KKyAg
ICBib29sIGlzTG9hZGluZygpIGNvbnN0IHsgcmV0dXJuIG1faXNMb2FkaW5nOyB9CisKKyNpZm5k
ZWYgTkRFQlVHCisgICAgU3RyaW5nIGRlc2NyaXB0aW9uKCkgY29uc3Q7CisjZW5kaWYKKworI2lm
IFVTRShBUFBLSVQpCisgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGNvbXBvc2l0ZUZvbnRSZWZl
cmVuY2VGb250RGF0YShOU0ZvbnQgKmtleSkgY29uc3Q7CisgICAgTlNGb250KiBnZXROU0ZvbnQo
KSBjb25zdCB7IHJldHVybiBtX3BsYXRmb3JtRGF0YS5uc0ZvbnQoKTsgfQorI2VuZGlmCisKKyNp
ZiBQTEFURk9STShJT1MpCisgICAgQ1RGb250UmVmIGdldENURm9udCgpIGNvbnN0IHsgcmV0dXJu
IG1fcGxhdGZvcm1EYXRhLmZvbnQoKTsgfQorICAgIGJvb2wgc2hvdWxkTm90QmVVc2VkRm9yQXJh
YmljKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGROb3RCZVVzZWRGb3JBcmFiaWM7IH07CisjZW5k
aWYKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBDRkRpY3Rpb25hcnlSZWYgZ2V0Q0ZTdHJpbmdB
dHRyaWJ1dGVzKFR5cGVzZXR0aW5nRmVhdHVyZXMsIEZvbnRPcmllbnRhdGlvbikgY29uc3Q7Cisj
ZW5kaWYKKworI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBVU0UoSEFSRkJVWlopCisgICAgYm9vbCBj
YW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBVQ2hhciosIHNpemVfdCkg
Y29uc3Q7CisjZW5kaWYKKworICAgIGJvb2wgYXBwbHlUcmFuc2Zvcm1zKEdseXBoQnVmZmVyR2x5
cGgqLCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCBzaXplX3QgZ2x5cGhDb3VudCwgVHlwZXNldHRpbmdG
ZWF0dXJlcykgY29uc3Q7CisKKyNpZiBQTEFURk9STShXSU4pCisgICAgYm9vbCBpc1N5c3RlbUZv
bnQoKSBjb25zdCB7IHJldHVybiBtX2lzU3lzdGVtRm9udDsgfQorICAgIFNDUklQVF9GT05UUFJP
UEVSVElFUyogc2NyaXB0Rm9udFByb3BlcnRpZXMoKSBjb25zdDsKKyAgICBTQ1JJUFRfQ0FDSEUq
IHNjcmlwdENhY2hlKCkgY29uc3QgeyByZXR1cm4gJm1fc2NyaXB0Q2FjaGU7IH0KKyAgICBzdGF0
aWMgdm9pZCBzZXRTaG91bGRBcHBseU1hY0FzY2VudEhhY2soYm9vbCk7CisgICAgc3RhdGljIGJv
b2wgc2hvdWxkQXBwbHlNYWNBc2NlbnRIYWNrKCk7CisgICAgc3RhdGljIGZsb2F0IGFzY2VudENv
bnNpZGVyaW5nTWFjQXNjZW50SGFjayhjb25zdCBXQ0hBUiosIGZsb2F0IGFzY2VudCwgZmxvYXQg
ZGVzY2VudCk7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBTaW1wbGVGb250RGF0YShjb25zdCBG
b250UGxhdGZvcm1EYXRhJiwgYm9vbCBpc0N1c3RvbUZvbnQgPSBmYWxzZSwgYm9vbCBpc0xvYWRp
bmcgPSBmYWxzZSwgYm9vbCBpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrID0gZmFsc2UpOworCisg
ICAgU2ltcGxlRm9udERhdGEoc3RkOjp1bmlxdWVfcHRyPFNWR0RhdGE+LCBmbG9hdCBmb250U2l6
ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYyk7CisKKyAgICB2b2lk
IHBsYXRmb3JtSW5pdCgpOworICAgIHZvaWQgcGxhdGZvcm1HbHlwaEluaXQoKTsKKyAgICB2b2lk
IHBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpOworICAgIHZvaWQgcGxhdGZvcm1EZXN0cm95KCk7CisK
KyAgICB2b2lkIGluaXRDaGFyV2lkdGhzKCk7CisKKyAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnRE
YXRhPiBjcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBz
Y2FsZUZhY3RvcikgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gcGxhdGZv
cm1DcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBzY2Fs
ZUZhY3RvcikgY29uc3Q7CisKKyAgICB2b2lkIHJlbW92ZUZyb21TeXN0ZW1GYWxsYmFja0NhY2hl
KCk7CisKKyNpZiBQTEFURk9STShXSU4pCisgICAgdm9pZCBpbml0R0RJRm9udCgpOworICAgIHZv
aWQgcGxhdGZvcm1Db21tb25EZXN0cm95KCk7CisgICAgRmxvYXRSZWN0IGJvdW5kc0ZvckdESUds
eXBoKEdseXBoIGdseXBoKSBjb25zdDsKKyAgICBmbG9hdCB3aWR0aEZvckdESUdseXBoKEdseXBo
IGdseXBoKSBjb25zdDsKKyNlbmRpZgorCisjaWYgVVNFKENHKQorICAgIGJvb2wgY2FuVXNlRmFz
dEdseXBoQWR2YW5jZUdldHRlcihHbHlwaCBnbHlwaCwgQ0dTaXplJiBhZHZhbmNlLCBib29sJiBw
b3B1bGF0ZWRBZHZhbmNlKSBjb25zdDsKKyAgICBDR0ZvbnRSZW5kZXJpbmdTdHlsZSByZW5kZXJp
bmdTdHlsZSgpIGNvbnN0OworICAgIGJvb2wgYWR2YW5jZUZvckNvbG9yQml0bWFwRm9udChHbHlw
aCwgQ0dTaXplJiByZXN1bHQpIGNvbnN0OyAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGZvbnQgaXMg
YSBjb2xvciBiaXRtYXAgZm9udAorI2VuZGlmCisKKyAgICBGb250TWV0cmljcyBtX2ZvbnRNZXRy
aWNzOworICAgIGZsb2F0IG1fbWF4Q2hhcldpZHRoOworICAgIGZsb2F0IG1fYXZnQ2hhcldpZHRo
OworCisgICAgRm9udFBsYXRmb3JtRGF0YSBtX3BsYXRmb3JtRGF0YTsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8U1ZHRGF0YT4gbV9zdmdEYXRhOworCisgICAgbXV0YWJsZSBSZWZQdHI8R2x5cGhQYWdl
PiBtX2dseXBoUGFnZVplcm87CisgICAgbXV0YWJsZSBIYXNoTWFwPHVuc2lnbmVkLCBSZWZQdHI8
R2x5cGhQYWdlPj4gbV9nbHlwaFBhZ2VzOworICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPEds
eXBoTWV0cmljc01hcDxGbG9hdFJlY3Q+PiBtX2dseXBoVG9Cb3VuZHNNYXA7CisgICAgbXV0YWJs
ZSBHbHlwaE1ldHJpY3NNYXA8ZmxvYXQ+IG1fZ2x5cGhUb1dpZHRoTWFwOworCisgICAgYm9vbCBt
X3RyZWF0QXNGaXhlZFBpdGNoOworICAgIGJvb2wgbV9pc0N1c3RvbUZvbnQ7ICAvLyBXaGV0aGVy
IG9yIG5vdCB3ZSBhcmUgY3VzdG9tIGZvbnQgbG9hZGVkIHZpYSBAZm9udC1mYWNlCisgICAgYm9v
bCBtX2lzTG9hZGluZzsgLy8gV2hldGhlciBvciBub3QgdGhpcyBjdXN0b20gZm9udCBpcyBzdGls
bCBpbiB0aGUgYWN0IG9mIGxvYWRpbmcuCisKKyAgICBib29sIG1faXNUZXh0T3JpZW50YXRpb25G
YWxsYmFjazsKKyAgICBib29sIG1faXNCcm9rZW5JZGVvZ3JhcGhGYWxsYmFjazsKKworICAgIGJv
b2wgbV9pc1VzZWRJblN5c3RlbUZhbGxiYWNrQ2FjaGUgeyBmYWxzZSB9OworCisgICAgbXV0YWJs
ZSBSZWZQdHI8T3BlblR5cGVNYXRoRGF0YT4gbV9tYXRoRGF0YTsKKyNpZiBFTkFCTEUoT1BFTlRZ
UEVfVkVSVElDQUwpCisgICAgUmVmUHRyPE9wZW5UeXBlVmVydGljYWxEYXRhPiBtX3ZlcnRpY2Fs
RGF0YTsKKyNlbmRpZgorICAgIGJvb2wgbV9oYXNWZXJ0aWNhbEdseXBoczsKKworICAgIEdseXBo
IG1fc3BhY2VHbHlwaDsKKyAgICBmbG9hdCBtX3NwYWNlV2lkdGg7CisgICAgR2x5cGggbV96ZXJv
R2x5cGg7CisgICAgZmxvYXQgbV9hZGp1c3RlZFNwYWNlV2lkdGg7CisKKyAgICBHbHlwaCBtX3pl
cm9XaWR0aFNwYWNlR2x5cGg7CisKKyAgICBzdHJ1Y3QgRGVyaXZlZEZvbnREYXRhIHsKKyAgICAg
ICAgZXhwbGljaXQgRGVyaXZlZEZvbnREYXRhKGJvb2wgY3VzdG9tKQorICAgICAgICAgICAgOiBm
b3JDdXN0b21Gb250KGN1c3RvbSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIH5EZXJp
dmVkRm9udERhdGEoKTsKKworICAgICAgICBib29sIGZvckN1c3RvbUZvbnQ7CisgICAgICAgIFJl
ZlB0cjxTaW1wbGVGb250RGF0YT4gc21hbGxDYXBzOworICAgICAgICBSZWZQdHI8U2ltcGxlRm9u
dERhdGE+IGVtcGhhc2lzTWFyazsKKyAgICAgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBicm9r
ZW5JZGVvZ3JhcGg7CisgICAgICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gdmVydGljYWxSaWdo
dE9yaWVudGF0aW9uOworICAgICAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IHVwcmlnaHRPcmll
bnRhdGlvbjsKKyAgICAgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBub25TeW50aGV0aWNJdGFs
aWM7CisjaWYgVVNFKEFQUEtJVCkKKyAgICAgICAgSGFzaE1hcDxOU0ZvbnQqLCBSZWZQdHI8U2lt
cGxlRm9udERhdGE+PiBjb21wb3NpdGVGb250UmVmZXJlbmNlczsKKyNlbmRpZgorICAgIH07CisK
KyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxEZXJpdmVkRm9udERhdGE+IG1fZGVyaXZlZEZv
bnREYXRhOworCisjaWYgVVNFKENHKSB8fCBVU0UoQ0FJUk8pCisgICAgZmxvYXQgbV9zeW50aGV0
aWNCb2xkT2Zmc2V0OworI2VuZGlmCisKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBtdXRhYmxl
IEhhc2hNYXA8dW5zaWduZWQsIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+PiBtX0NGU3RyaW5n
QXR0cmlidXRlczsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFVTRShIQVJGQlVa
WikKKyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxIYXNoTWFwPFN0cmluZywgYm9vbD4+IG1f
Y29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2VTdXBwb3J0OworI2VuZGlmCisKKyNpZiBQTEFURk9S
TShXSU4pCisgICAgYm9vbCBtX2lzU3lzdGVtRm9udDsKKyAgICBtdXRhYmxlIFNDUklQVF9DQUNI
RSBtX3NjcmlwdENhY2hlOworICAgIG11dGFibGUgU0NSSVBUX0ZPTlRQUk9QRVJUSUVTKiBtX3Nj
cmlwdEZvbnRQcm9wZXJ0aWVzOworI2VuZGlmCisjaWYgUExBVEZPUk0oSU9TKQorICAgIGJvb2wg
bV9zaG91bGROb3RCZVVzZWRGb3JBcmFiaWM7CisjZW5kaWYKK307CisKK0FMV0FZU19JTkxJTkUg
RmxvYXRSZWN0IFNpbXBsZUZvbnREYXRhOjpib3VuZHNGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29u
c3QKK3sKKyAgICBpZiAoaXNaZXJvV2lkdGhTcGFjZUdseXBoKGdseXBoKSkKKyAgICAgICAgcmV0
dXJuIEZsb2F0UmVjdCgpOworCisgICAgRmxvYXRSZWN0IGJvdW5kczsKKyAgICBpZiAobV9nbHlw
aFRvQm91bmRzTWFwKSB7CisgICAgICAgIGJvdW5kcyA9IG1fZ2x5cGhUb0JvdW5kc01hcC0+bWV0
cmljc0ZvckdseXBoKGdseXBoKTsKKyAgICAgICAgaWYgKGJvdW5kcy53aWR0aCgpICE9IGNHbHlw
aFNpemVVbmtub3duKQorICAgICAgICAgICAgcmV0dXJuIGJvdW5kczsKKyAgICB9CisKKyAgICBi
b3VuZHMgPSBwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKGdseXBoKTsKKyAgICBpZiAoIW1fZ2x5cGhU
b0JvdW5kc01hcCkKKyAgICAgICAgbV9nbHlwaFRvQm91bmRzTWFwID0gc3RkOjptYWtlX3VuaXF1
ZTxHbHlwaE1ldHJpY3NNYXA8RmxvYXRSZWN0Pj4oKTsKKyAgICBtX2dseXBoVG9Cb3VuZHNNYXAt
PnNldE1ldHJpY3NGb3JHbHlwaChnbHlwaCwgYm91bmRzKTsKKyAgICByZXR1cm4gYm91bmRzOwor
fQorCitBTFdBWVNfSU5MSU5FIGZsb2F0IFNpbXBsZUZvbnREYXRhOjp3aWR0aEZvckdseXBoKEds
eXBoIGdseXBoKSBjb25zdAoreworICAgIGlmIChpc1plcm9XaWR0aFNwYWNlR2x5cGgoZ2x5cGgp
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIGZsb2F0IHdpZHRoID0gbV9nbHlwaFRvV2lkdGhN
YXAubWV0cmljc0ZvckdseXBoKGdseXBoKTsKKyAgICBpZiAod2lkdGggIT0gY0dseXBoU2l6ZVVu
a25vd24pCisgICAgICAgIHJldHVybiB3aWR0aDsKKworICAgIGlmIChpc1NWR0ZvbnQoKSkKKyAg
ICAgICAgd2lkdGggPSBtX3N2Z0RhdGEtPndpZHRoRm9yU1ZHR2x5cGgoZ2x5cGgsIG1fcGxhdGZv
cm1EYXRhLnNpemUoKSk7CisjaWYgRU5BQkxFKE9QRU5UWVBFX1ZFUlRJQ0FMKQorICAgIGVsc2Ug
aWYgKG1fdmVydGljYWxEYXRhKQorI2lmIFVTRShDRykgfHwgVVNFKENBSVJPKQorICAgICAgICB3
aWR0aCA9IG1fdmVydGljYWxEYXRhLT5hZHZhbmNlSGVpZ2h0KHRoaXMsIGdseXBoKSArIG1fc3lu
dGhldGljQm9sZE9mZnNldDsKKyNlbHNlCisgICAgICAgIHdpZHRoID0gbV92ZXJ0aWNhbERhdGEt
PmFkdmFuY2VIZWlnaHQodGhpcywgZ2x5cGgpOworI2VuZGlmCisjZW5kaWYKKyAgICBlbHNlCisg
ICAgICAgIHdpZHRoID0gcGxhdGZvcm1XaWR0aEZvckdseXBoKGdseXBoKTsKKworICAgIG1fZ2x5
cGhUb1dpZHRoTWFwLnNldE1ldHJpY3NGb3JHbHlwaChnbHlwaCwgd2lkdGgpOworICAgIHJldHVy
biB3aWR0aDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU2ltcGxl
Rm9udERhdGFfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAko
d29ya2luZyBjb3B5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMSwxMyArMjEsMTMgQEAKICAqCiAgKi8KIAotI2lmbmRlZiBT
aW1wbGVGb250RGF0YV9oCi0jZGVmaW5lIFNpbXBsZUZvbnREYXRhX2gKKyNpZm5kZWYgRm9udF9o
CisjZGVmaW5lIEZvbnRfaAogCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiRm9u
dEJhc2VsaW5lLmgiCiAjaW5jbHVkZSAiRm9udE1ldHJpY3MuaCIKICNpbmNsdWRlICJGb250UGxh
dGZvcm1EYXRhLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiR2x5cGhCdWZm
ZXIuaCIKICNpbmNsdWRlICJHbHlwaE1ldHJpY3NNYXAuaCIKICNpbmNsdWRlICJHbHlwaFBhZ2Uu
aCIKQEAgLTY0LDM2ICs2NCwzNiBAQCBjbGFzcyBTaGFyZWRCdWZmZXI7CiBzdHJ1Y3QgR2x5cGhE
YXRhOwogc3RydWN0IFdpZHRoSXRlcmF0b3I7CiAKLWVudW0gRm9udERhdGFWYXJpYW50IHsgQXV0
b1ZhcmlhbnQsIE5vcm1hbFZhcmlhbnQsIFNtYWxsQ2Fwc1ZhcmlhbnQsIEVtcGhhc2lzTWFya1Zh
cmlhbnQsIEJyb2tlbklkZW9ncmFwaFZhcmlhbnQgfTsKK2VudW0gRm9udFZhcmlhbnQgeyBBdXRv
VmFyaWFudCwgTm9ybWFsVmFyaWFudCwgU21hbGxDYXBzVmFyaWFudCwgRW1waGFzaXNNYXJrVmFy
aWFudCwgQnJva2VuSWRlb2dyYXBoVmFyaWFudCB9OwogZW51bSBQaXRjaCB7IFVua25vd25QaXRj
aCwgRml4ZWRQaXRjaCwgVmFyaWFibGVQaXRjaCB9OwogCi1jbGFzcyBTaW1wbGVGb250RGF0YSA6
IHB1YmxpYyBSZWZDb3VudGVkPFNpbXBsZUZvbnREYXRhPiB7CitjbGFzcyBGb250IDogcHVibGlj
IFJlZkNvdW50ZWQ8Rm9udD4gewogcHVibGljOgogICAgIGNsYXNzIFNWR0RhdGEgewogICAgICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwg
flNWR0RhdGEoKSB7IH0KIAotICAgICAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZUZvbnREYXRh
KFNpbXBsZUZvbnREYXRhKiwgZmxvYXQgZm9udFNpemUpID0gMDsKKyAgICAgICAgdmlydHVhbCB2
b2lkIGluaXRpYWxpemVGb250KEZvbnQqLCBmbG9hdCBmb250U2l6ZSkgPSAwOwogICAgICAgICB2
aXJ0dWFsIGZsb2F0IHdpZHRoRm9yU1ZHR2x5cGgoR2x5cGgsIGZsb2F0IGZvbnRTaXplKSBjb25z
dCA9IDA7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBmaWxsU1ZHR2x5cGhQYWdlKEdseXBoUGFnZSos
IHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25l
ZCBidWZmZXJMZW5ndGgsIGNvbnN0IFNpbXBsZUZvbnREYXRhKikgY29uc3QgPSAwOworICAgICAg
ICB2aXJ0dWFsIGJvb2wgZmlsbFNWR0dseXBoUGFnZShHbHlwaFBhZ2UqLCB1bnNpZ25lZCBvZmZz
ZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3Ro
LCBjb25zdCBGb250KikgY29uc3QgPSAwOwogICAgIH07CiAKICAgICAvLyBVc2VkIHRvIGNyZWF0
ZSBwbGF0Zm9ybSBmb250cy4KLSAgICBzdGF0aWMgUmVmPFNpbXBsZUZvbnREYXRhPiBjcmVhdGUo
Y29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhLCBib29sIGlzQ3VzdG9tRm9udCA9
IGZhbHNlLCBib29sIGlzTG9hZGluZyA9IGZhbHNlLCBib29sIGlzVGV4dE9yaWVudGF0aW9uRmFs
bGJhY2sgPSBmYWxzZSkKKyAgICBzdGF0aWMgUmVmPEZvbnQ+IGNyZWF0ZShjb25zdCBGb250UGxh
dGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEsIGJvb2wgaXNDdXN0b21Gb250ID0gZmFsc2UsIGJvb2wg
aXNMb2FkaW5nID0gZmFsc2UsIGJvb2wgaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjayA9IGZhbHNl
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2ltcGxlRm9udERhdGEocGxh
dGZvcm1EYXRhLCBpc0N1c3RvbUZvbnQsIGlzTG9hZGluZywgaXNUZXh0T3JpZW50YXRpb25GYWxs
YmFjaykpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGb250KHBsYXRmb3JtRGF0YSwg
aXNDdXN0b21Gb250LCBpc0xvYWRpbmcsIGlzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2spKTsKICAg
ICB9CiAKICAgICAvLyBVc2VkIHRvIGNyZWF0ZSBTVkcgRm9udHMuCi0gICAgc3RhdGljIFJlZjxT
aW1wbGVGb250RGF0YT4gY3JlYXRlKHN0ZDo6dW5pcXVlX3B0cjxTVkdEYXRhPiBzdmdEYXRhLCBm
bG9hdCBmb250U2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYykK
KyAgICBzdGF0aWMgUmVmPEZvbnQ+IGNyZWF0ZShzdGQ6OnVuaXF1ZV9wdHI8U1ZHRGF0YT4gc3Zn
RGF0YSwgZmxvYXQgZm9udFNpemUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJ
dGFsaWMpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTaW1wbGVGb250RGF0
YShXVEY6Om1vdmUoc3ZnRGF0YSksIGZvbnRTaXplLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJ
dGFsaWMpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRm9udChXVEY6Om1vdmUoc3Zn
RGF0YSksIGZvbnRTaXplLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMpKTsKICAgICB9
CiAKLSAgICB+U2ltcGxlRm9udERhdGEoKTsKKyAgICB+Rm9udCgpOwogCi0gICAgc3RhdGljIGNv
bnN0IFNpbXBsZUZvbnREYXRhKiBzeXN0ZW1GYWxsYmFjaygpIHsgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgU2ltcGxlRm9udERhdGEqPigtMSk7IH0KKyAgICBzdGF0aWMgY29uc3QgRm9u
dCogc3lzdGVtRmFsbGJhY2soKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IEZvbnQq
PigtMSk7IH0KIAogICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSgpIGNv
bnN0IHsgcmV0dXJuIG1fcGxhdGZvcm1EYXRhOyB9CiAgICAgY29uc3QgT3BlblR5cGVNYXRoRGF0
YSogbWF0aERhdGEoKSBjb25zdDsKQEAgLTEwMSwzMCArMTAxLDMwIEBAIHB1YmxpYzoKICAgICBj
b25zdCBPcGVuVHlwZVZlcnRpY2FsRGF0YSogdmVydGljYWxEYXRhKCkgY29uc3QgeyByZXR1cm4g
bV92ZXJ0aWNhbERhdGEuZ2V0KCk7IH0KICNlbmRpZgogCi0gICAgUGFzc1JlZlB0cjxTaW1wbGVG
b250RGF0YT4gc21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJikgY29uc3Q7
Ci0gICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gZW1waGFzaXNNYXJrRm9udERhdGEoY29u
c3QgRm9udERlc2NyaXB0aW9uJikgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0
YT4gYnJva2VuSWRlb2dyYXBoRm9udERhdGEoKSBjb25zdDsKLSAgICBQYXNzUmVmUHRyPFNpbXBs
ZUZvbnREYXRhPiBub25TeW50aGV0aWNJdGFsaWNGb250RGF0YSgpIGNvbnN0OworICAgIFBhc3NS
ZWZQdHI8Rm9udD4gc21hbGxDYXBzRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mKSBjb25zdDsK
KyAgICBQYXNzUmVmUHRyPEZvbnQ+IGVtcGhhc2lzTWFya0ZvbnQoY29uc3QgRm9udERlc2NyaXB0
aW9uJikgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxGb250PiBicm9rZW5JZGVvZ3JhcGhGb250KCkg
Y29uc3Q7CisgICAgUGFzc1JlZlB0cjxGb250PiBub25TeW50aGV0aWNJdGFsaWNGb250KCkgY29u
c3Q7CiAKLSAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiB2YXJpYW50Rm9udERhdGEoY29u
c3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udERhdGFWYXJpYW50IHZhcmlhbnQp
IGNvbnN0CisgICAgUGFzc1JlZlB0cjxGb250PiB2YXJpYW50Rm9udChjb25zdCBGb250RGVzY3Jp
cHRpb24mIGRlc2NyaXB0aW9uLCBGb250VmFyaWFudCB2YXJpYW50KSBjb25zdAogICAgIHsKICAg
ICAgICAgc3dpdGNoICh2YXJpYW50KSB7CiAgICAgICAgIGNhc2UgU21hbGxDYXBzVmFyaWFudDoK
LSAgICAgICAgICAgIHJldHVybiBzbWFsbENhcHNGb250RGF0YShkZXNjcmlwdGlvbik7CisgICAg
ICAgICAgICByZXR1cm4gc21hbGxDYXBzRm9udChkZXNjcmlwdGlvbik7CiAgICAgICAgIGNhc2Ug
RW1waGFzaXNNYXJrVmFyaWFudDoKLSAgICAgICAgICAgIHJldHVybiBlbXBoYXNpc01hcmtGb250
RGF0YShkZXNjcmlwdGlvbik7CisgICAgICAgICAgICByZXR1cm4gZW1waGFzaXNNYXJrRm9udChk
ZXNjcmlwdGlvbik7CiAgICAgICAgIGNhc2UgQnJva2VuSWRlb2dyYXBoVmFyaWFudDoKLSAgICAg
ICAgICAgIHJldHVybiBicm9rZW5JZGVvZ3JhcGhGb250RGF0YSgpOworICAgICAgICAgICAgcmV0
dXJuIGJyb2tlbklkZW9ncmFwaEZvbnQoKTsKICAgICAgICAgY2FzZSBBdXRvVmFyaWFudDoKICAg
ICAgICAgY2FzZSBOb3JtYWxWYXJpYW50OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBjb25zdF9jYXN0
PFNpbXBsZUZvbnREYXRhKj4odGhpcyk7CisgICAgICAgIHJldHVybiBjb25zdF9jYXN0PEZvbnQq
Pih0aGlzKTsKICAgICB9CiAKLSAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiB2ZXJ0aWNh
bFJpZ2h0T3JpZW50YXRpb25Gb250RGF0YSgpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8U2ltcGxl
Rm9udERhdGE+IHVwcmlnaHRPcmllbnRhdGlvbkZvbnREYXRhKCkgY29uc3Q7CisgICAgUGFzc1Jl
ZlB0cjxGb250PiB2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250KCkgY29uc3Q7CisgICAgUGFz
c1JlZlB0cjxGb250PiB1cHJpZ2h0T3JpZW50YXRpb25Gb250KCkgY29uc3Q7CiAKICAgICBib29s
IGhhc1ZlcnRpY2FsR2x5cGhzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNWZXJ0aWNhbEdseXBoczsg
fQogICAgIGJvb2wgaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaygpIGNvbnN0IHsgcmV0dXJuIG1f
aXNUZXh0T3JpZW50YXRpb25GYWxsYmFjazsgfQpAQCAtMTQwLDcgKzE0MCw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNldEF2Z0NoYXJXaWR0aChmbG9hdCBhdmdDaGFyV2lkdGgpIHsgbV9hdmdDaGFy
V2lkdGggPSBhdmdDaGFyV2lkdGg7IH0KIAogICAgIEZsb2F0UmVjdCBib3VuZHNGb3JHbHlwaChH
bHlwaCkgY29uc3Q7Ci0gICAgZmxvYXQgd2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3Q7
CisgICAgZmxvYXQgd2lkdGhGb3JHbHlwaChHbHlwaCkgY29uc3Q7CiAgICAgRmxvYXRSZWN0IHBs
YXRmb3JtQm91bmRzRm9yR2x5cGgoR2x5cGgpIGNvbnN0OwogICAgIGZsb2F0IHBsYXRmb3JtV2lk
dGhGb3JHbHlwaChHbHlwaCkgY29uc3Q7CiAKQEAgLTE2Nyw3ICsxNjcsNyBAQCBwdWJsaWM6CiAg
ICAgR2x5cGhEYXRhIGdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyKSBjb25zdDsKICAgICBH
bHlwaCBnbHlwaEZvckNoYXJhY3RlcihVQ2hhcjMyKSBjb25zdDsKIAotICAgIFJlZlB0cjxTaW1w
bGVGb250RGF0YT4gc3lzdGVtRmFsbGJhY2tGb250RGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyLCBj
b25zdCBGb250RGVzY3JpcHRpb24mLCBib29sIGlzRm9yUGxhdGZvcm1Gb250KSBjb25zdDsKKyAg
ICBSZWZQdHI8Rm9udD4gc3lzdGVtRmFsbGJhY2tGb250Rm9yQ2hhcmFjdGVyKFVDaGFyMzIsIGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYsIGJvb2wgaXNGb3JQbGF0Zm9ybUZvbnQpIGNvbnN0OwogCiAg
ICAgY29uc3QgR2x5cGhQYWdlKiBnbHlwaFBhZ2UodW5zaWduZWQgcGFnZU51bWJlcikgY29uc3Q7
CiAKQEAgLTE4NSw3ICsxODUsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lmIFVTRShBUFBLSVQp
Ci0gICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGNvbXBvc2l0ZUZvbnRSZWZlcmVuY2VGb250RGF0
YShOU0ZvbnQgKmtleSkgY29uc3Q7CisgICAgY29uc3QgRm9udCogY29tcG9zaXRlRm9udFJlZmVy
ZW5jZUZvbnQoTlNGb250ICprZXkpIGNvbnN0OwogICAgIE5TRm9udCogZ2V0TlNGb250KCkgY29u
c3QgeyByZXR1cm4gbV9wbGF0Zm9ybURhdGEubnNGb250KCk7IH0KICNlbmRpZgogCkBAIC0yMTMs
OSArMjEzLDkgQEAgcHVibGljOgogI2VuZGlmCiAKIHByaXZhdGU6Ci0gICAgU2ltcGxlRm9udERh
dGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYsIGJvb2wgaXNDdXN0b21Gb250ID0gZmFsc2UsIGJv
b2wgaXNMb2FkaW5nID0gZmFsc2UsIGJvb2wgaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjayA9IGZh
bHNlKTsKKyAgICBGb250KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmLCBib29sIGlzQ3VzdG9tRm9u
dCA9IGZhbHNlLCBib29sIGlzTG9hZGluZyA9IGZhbHNlLCBib29sIGlzVGV4dE9yaWVudGF0aW9u
RmFsbGJhY2sgPSBmYWxzZSk7CiAKLSAgICBTaW1wbGVGb250RGF0YShzdGQ6OnVuaXF1ZV9wdHI8
U1ZHRGF0YT4sIGZsb2F0IGZvbnRTaXplLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhl
dGljSXRhbGljKTsKKyAgICBGb250KHN0ZDo6dW5pcXVlX3B0cjxTVkdEYXRhPiwgZmxvYXQgZm9u
dFNpemUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpOwogCiAgICAg
dm9pZCBwbGF0Zm9ybUluaXQoKTsKICAgICB2b2lkIHBsYXRmb3JtR2x5cGhJbml0KCk7CkBAIC0y
MjQsMjAgKzIyNCwyMCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBpbml0Q2hhcldpZHRocygpOwog
Ci0gICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gY3JlYXRlU2NhbGVkRm9udERhdGEoY29u
c3QgRm9udERlc2NyaXB0aW9uJiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0OwotICAgIFBhc3NS
ZWZQdHI8U2ltcGxlRm9udERhdGE+IHBsYXRmb3JtQ3JlYXRlU2NhbGVkRm9udERhdGEoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0OworICAgIFBhc3NSZWZQ
dHI8Rm9udD4gY3JlYXRlU2NhbGVkRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBz
Y2FsZUZhY3RvcikgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxGb250PiBwbGF0Zm9ybUNyZWF0ZVNj
YWxlZEZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0
OwogCiAgICAgdm9pZCByZW1vdmVGcm9tU3lzdGVtRmFsbGJhY2tDYWNoZSgpOwogCiAjaWYgUExB
VEZPUk0oV0lOKQogICAgIHZvaWQgaW5pdEdESUZvbnQoKTsKICAgICB2b2lkIHBsYXRmb3JtQ29t
bW9uRGVzdHJveSgpOwotICAgIEZsb2F0UmVjdCBib3VuZHNGb3JHRElHbHlwaChHbHlwaCBnbHlw
aCkgY29uc3Q7Ci0gICAgZmxvYXQgd2lkdGhGb3JHRElHbHlwaChHbHlwaCBnbHlwaCkgY29uc3Q7
CisgICAgRmxvYXRSZWN0IGJvdW5kc0ZvckdESUdseXBoKEdseXBoKSBjb25zdDsKKyAgICBmbG9h
dCB3aWR0aEZvckdESUdseXBoKEdseXBoKSBjb25zdDsKICNlbmRpZgogCiAjaWYgVVNFKENHKQot
ICAgIGJvb2wgY2FuVXNlRmFzdEdseXBoQWR2YW5jZUdldHRlcihHbHlwaCBnbHlwaCwgQ0dTaXpl
JiBhZHZhbmNlLCBib29sJiBwb3B1bGF0ZWRBZHZhbmNlKSBjb25zdDsKKyAgICBib29sIGNhblVz
ZUZhc3RHbHlwaEFkdmFuY2VHZXR0ZXIoR2x5cGgsIENHU2l6ZSYgYWR2YW5jZSwgYm9vbCYgcG9w
dWxhdGVkQWR2YW5jZSkgY29uc3Q7CiAgICAgQ0dGb250UmVuZGVyaW5nU3R5bGUgcmVuZGVyaW5n
U3R5bGUoKSBjb25zdDsKICAgICBib29sIGFkdmFuY2VGb3JDb2xvckJpdG1hcEZvbnQoR2x5cGgs
IENHU2l6ZSYgcmVzdWx0KSBjb25zdDsgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBmb250IGlzIGEg
Y29sb3IgYml0bWFwIGZvbnQKICNlbmRpZgpAQCAtMjU1LDcgKzI1NSw3IEBAIHByaXZhdGU6CiAg
ICAgbXV0YWJsZSBHbHlwaE1ldHJpY3NNYXA8ZmxvYXQ+IG1fZ2x5cGhUb1dpZHRoTWFwOwogCiAg
ICAgYm9vbCBtX3RyZWF0QXNGaXhlZFBpdGNoOwotICAgIGJvb2wgbV9pc0N1c3RvbUZvbnQ7ICAv
LyBXaGV0aGVyIG9yIG5vdCB3ZSBhcmUgY3VzdG9tIGZvbnQgbG9hZGVkIHZpYSBAZm9udC1mYWNl
CisgICAgYm9vbCBtX2lzQ3VzdG9tRm9udDsgLy8gV2hldGhlciBvciBub3Qgd2UgYXJlIGN1c3Rv
bSBmb250IGxvYWRlZCB2aWEgQGZvbnQtZmFjZQogICAgIGJvb2wgbV9pc0xvYWRpbmc7IC8vIFdo
ZXRoZXIgb3Igbm90IHRoaXMgY3VzdG9tIGZvbnQgaXMgc3RpbGwgaW4gdGhlIGFjdCBvZiBsb2Fk
aW5nLgogCiAgICAgYm9vbCBtX2lzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2s7CkBAIC0yODQsMTQg
KzI4NCwxNCBAQCBwcml2YXRlOgogICAgICAgICB+RGVyaXZlZEZvbnREYXRhKCk7CiAKICAgICAg
ICAgYm9vbCBmb3JDdXN0b21Gb250OwotICAgICAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IHNt
YWxsQ2FwczsKLSAgICAgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBlbXBoYXNpc01hcms7Ci0g
ICAgICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gYnJva2VuSWRlb2dyYXBoOwotICAgICAgICBS
ZWZQdHI8U2ltcGxlRm9udERhdGE+IHZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbjsKLSAgICAgICAg
UmVmUHRyPFNpbXBsZUZvbnREYXRhPiB1cHJpZ2h0T3JpZW50YXRpb247Ci0gICAgICAgIFJlZlB0
cjxTaW1wbGVGb250RGF0YT4gbm9uU3ludGhldGljSXRhbGljOworICAgICAgICBSZWZQdHI8Rm9u
dD4gc21hbGxDYXBzOworICAgICAgICBSZWZQdHI8Rm9udD4gZW1waGFzaXNNYXJrOworICAgICAg
ICBSZWZQdHI8Rm9udD4gYnJva2VuSWRlb2dyYXBoOworICAgICAgICBSZWZQdHI8Rm9udD4gdmVy
dGljYWxSaWdodE9yaWVudGF0aW9uOworICAgICAgICBSZWZQdHI8Rm9udD4gdXByaWdodE9yaWVu
dGF0aW9uOworICAgICAgICBSZWZQdHI8Rm9udD4gbm9uU3ludGhldGljSXRhbGljOwogI2lmIFVT
RShBUFBLSVQpCi0gICAgICAgIEhhc2hNYXA8TlNGb250KiwgUmVmUHRyPFNpbXBsZUZvbnREYXRh
Pj4gY29tcG9zaXRlRm9udFJlZmVyZW5jZXM7CisgICAgICAgIEhhc2hNYXA8TlNGb250KiwgUmVm
UHRyPEZvbnQ+PiBjb21wb3NpdGVGb250UmVmZXJlbmNlczsKICNlbmRpZgogICAgIH07CiAKQEAg
LTMxOSw3ICszMTksNyBAQCBwcml2YXRlOgogI2VuZGlmCiB9OwogCi1BTFdBWVNfSU5MSU5FIEZs
b2F0UmVjdCBTaW1wbGVGb250RGF0YTo6Ym91bmRzRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0
CitBTFdBWVNfSU5MSU5FIEZsb2F0UmVjdCBGb250Ojpib3VuZHNGb3JHbHlwaChHbHlwaCBnbHlw
aCkgY29uc3QKIHsKICAgICBpZiAoaXNaZXJvV2lkdGhTcGFjZUdseXBoKGdseXBoKSkKICAgICAg
ICAgcmV0dXJuIEZsb2F0UmVjdCgpOwpAQCAtMzM4LDcgKzMzOCw3IEBAIEFMV0FZU19JTkxJTkUg
RmxvYXRSZWN0IFNpbXBsZUZvbnREYXRhOjoKICAgICByZXR1cm4gYm91bmRzOwogfQogCi1BTFdB
WVNfSU5MSU5FIGZsb2F0IFNpbXBsZUZvbnREYXRhOjp3aWR0aEZvckdseXBoKEdseXBoIGdseXBo
KSBjb25zdAorQUxXQVlTX0lOTElORSBmbG9hdCBGb250Ojp3aWR0aEZvckdseXBoKEdseXBoIGds
eXBoKSBjb25zdAogewogICAgIGlmIChpc1plcm9XaWR0aFNwYWNlR2x5cGgoZ2x5cGgpKQogICAg
ICAgICByZXR1cm4gMDsKQEAgLTM2Niw0ICszNjYsNCBAQCBBTFdBWVNfSU5MSU5FIGZsb2F0IFNp
bXBsZUZvbnREYXRhOjp3aWR0CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8v
IFNpbXBsZUZvbnREYXRhX2gKKyNlbmRpZiAvLyBGb250X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAkocmV2aXNpb24gMTc4ODU3KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTIsMTQgKzUyLDE0IEBACiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+
CiAKIC8vIEZJWE1FOiBXZSBtYXkgYmUgYWJsZSB0byBzaW1wbGlmeSB0aGlzIGNvZGUgdXNpbmcg
QysrMTEgdGhyZWFkaW5nIHByaW1pdGl2ZXMsIGluY2x1ZGluZyBzdGQ6OmNhbGxfb25jZSgpLgot
c3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBmb250RGF0YUxvY2s7CitzdGF0aWMgcHRocmVhZF9tdXRl
eF90IGZvbnRMb2NrOwogCiBzdGF0aWMgdm9pZCBpbml0Rm9udENhY2hlTG9ja09uY2UoKQogewog
ICAgIHB0aHJlYWRfbXV0ZXhhdHRyX3QgbXV0ZXhBdHRyaWJ1dGU7CiAgICAgcHRocmVhZF9tdXRl
eGF0dHJfaW5pdCgmbXV0ZXhBdHRyaWJ1dGUpOwogICAgIHB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5
cGUoJm11dGV4QXR0cmlidXRlLCBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRSk7Ci0gICAgcHRocmVh
ZF9tdXRleF9pbml0KCZmb250RGF0YUxvY2ssICZtdXRleEF0dHJpYnV0ZSk7CisgICAgcHRocmVh
ZF9tdXRleF9pbml0KCZmb250TG9jaywgJm11dGV4QXR0cmlidXRlKTsKICAgICBwdGhyZWFkX211
dGV4YXR0cl9kZXN0cm95KCZtdXRleEF0dHJpYnV0ZSk7CiB9CiAKQEAgLTcxLDEzICs3MSwxMyBA
QCBwdWJsaWM6CiAgICAgRm9udExvY2tlcigpCiAgICAgewogICAgICAgICBwdGhyZWFkX29uY2Uo
JmluaXRGb250TG9ja0NvbnRyb2wsIGluaXRGb250Q2FjaGVMb2NrT25jZSk7Ci0gICAgICAgIGlu
dCBsb2NrY29kZSA9IHB0aHJlYWRfbXV0ZXhfbG9jaygmZm9udERhdGFMb2NrKTsKLSAgICAgICAg
QVNTRVJUX1dJVEhfTUVTU0FHRV9VTlVTRUQobG9ja2NvZGUsICFsb2NrY29kZSwgImZvbnREYXRh
TG9jayBsb2NrIGZhaWxlZCB3aXRoIGNvZGU6JWQiLCBsb2NrY29kZSk7ICAgIAorICAgICAgICBp
bnQgbG9ja2NvZGUgPSBwdGhyZWFkX211dGV4X2xvY2soJmZvbnRMb2NrKTsKKyAgICAgICAgQVNT
RVJUX1dJVEhfTUVTU0FHRV9VTlVTRUQobG9ja2NvZGUsICFsb2NrY29kZSwgImZvbnRMb2NrIGxv
Y2sgZmFpbGVkIHdpdGggY29kZTolZCIsIGxvY2tjb2RlKTsgICAgCiAgICAgfQogICAgIH5Gb250
TG9ja2VyKCkKICAgICB7Ci0gICAgICAgIGludCBsb2NrY29kZSA9IHB0aHJlYWRfbXV0ZXhfdW5s
b2NrKCZmb250RGF0YUxvY2spOwotICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFX1VOVVNFRChs
b2NrY29kZSwgIWxvY2tjb2RlLCAiZm9udERhdGFMb2NrIHVubG9jayBmYWlsZWQgd2l0aCBjb2Rl
OiVkIiwgbG9ja2NvZGUpOworICAgICAgICBpbnQgbG9ja2NvZGUgPSBwdGhyZWFkX211dGV4X3Vu
bG9jaygmZm9udExvY2spOworICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFX1VOVVNFRChsb2Nr
Y29kZSwgIWxvY2tjb2RlLCAiZm9udExvY2sgdW5sb2NrIGZhaWxlZCB3aXRoIGNvZGU6JWQiLCBs
b2NrY29kZSk7CiAgICAgfQogfTsKICNlbmRpZiAvLyBQTEFURk9STShJT1MpCkBAIC0zNTksNyAr
MzU5LDcgQEAgc3RydWN0IEZvbnREYXRhQ2FjaGVLZXlUcmFpdHMgOiBXVEY6OkdlbgogICAgIH0K
IH07CiAKLXR5cGVkZWYgSGFzaE1hcDxGb250UGxhdGZvcm1EYXRhLCBSZWZQdHI8U2ltcGxlRm9u
dERhdGE+LCBGb250RGF0YUNhY2hlS2V5SGFzaCwgRm9udERhdGFDYWNoZUtleVRyYWl0cz4gRm9u
dERhdGFDYWNoZTsKK3R5cGVkZWYgSGFzaE1hcDxGb250UGxhdGZvcm1EYXRhLCBSZWZQdHI8Rm9u
dD4sIEZvbnREYXRhQ2FjaGVLZXlIYXNoLCBGb250RGF0YUNhY2hlS2V5VHJhaXRzPiBGb250RGF0
YUNhY2hlOwogCiBzdGF0aWMgRm9udERhdGFDYWNoZSYgY2FjaGVkRm9udHMoKQogewpAQCAtMzc5
LDcgKzM3OSw3IEBAIGNvbnN0IGludCBjVGFyZ2V0SW5hY3RpdmVGb250RGF0YSA9IDIwMDsKIGNv
bnN0IGludCBjTWF4VW5kZXJNZW1vcnlQcmVzc3VyZUluYWN0aXZlRm9udERhdGEgPSA1MDsKIGNv
bnN0IGludCBjVGFyZ2V0VW5kZXJNZW1vcnlQcmVzc3VyZUluYWN0aXZlRm9udERhdGEgPSAzMDsK
IAotUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmZvbnRGb3JGYW1pbHkoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFt
aWx5LCBib29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSkKK1JlZlB0cjxGb250PiBGb250Q2FjaGU6
OmZvbnRGb3JGYW1pbHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNv
bnN0IEF0b21pY1N0cmluZyYgZmFtaWx5LCBib29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSkKIHsK
ICAgICBpZiAoIW1fcHVyZ2VUaW1lci5pc0FjdGl2ZSgpKQogICAgICAgICBtX3B1cmdlVGltZXIu
c3RhcnRPbmVTaG90KHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM6Onplcm8oKSk7CkBAIC0zOTEs
NyArMzkxLDcgQEAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmZvbnRGbwogICAg
IHJldHVybiBmb250Rm9yUGxhdGZvcm1EYXRhKCpwbGF0Zm9ybURhdGEpOwogfQogCi1SZWY8U2lt
cGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Zm9udEZvclBsYXRmb3JtRGF0YShjb25zdCBGb250UGxh
dGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEpCitSZWY8Rm9udD4gRm9udENhY2hlOjpmb250Rm9yUGxh
dGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSkKIHsKICNpZiBQ
TEFURk9STShJT1MpCiAgICAgRm9udExvY2tlciBmb250TG9ja2VyOwpAQCAtMzk5LDcgKzM5OSw3
IEBAIFJlZjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpmb250Rm9yUGwKICAgICAKICAgICBh
dXRvIGFkZFJlc3VsdCA9IGNhY2hlZEZvbnRzKCkuYWRkKHBsYXRmb3JtRGF0YSwgbnVsbHB0cik7
CiAgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICBhZGRSZXN1bHQuaXRlcmF0
b3ItPnZhbHVlID0gU2ltcGxlRm9udERhdGE6OmNyZWF0ZShwbGF0Zm9ybURhdGEpOworICAgICAg
ICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gRm9udDo6Y3JlYXRlKHBsYXRmb3JtRGF0YSk7
CiAKICAgICByZXR1cm4gKmFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiB9CkBAIC00MTYsNyAr
NDE2LDcgQEAgdm9pZCBGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YUlmTgogCiAgICAg
aWYgKGNhY2hlZEZvbnRzKCkuc2l6ZSgpIDwgaW5hY3RpdmVGb250RGF0YUxpbWl0KQogICAgICAg
ICByZXR1cm47Ci0gICAgaW50IGluYWN0aXZlQ291bnQgPSBpbmFjdGl2ZUZvbnREYXRhQ291bnQo
KTsKKyAgICBpbnQgaW5hY3RpdmVDb3VudCA9IGluYWN0aXZlRm9udENvdW50KCk7CiAgICAgaWYg
KGluYWN0aXZlQ291bnQgPD0gaW5hY3RpdmVGb250RGF0YUxpbWl0KQogICAgICAgICByZXR1cm47
CiAKQEAgLTQzNCw3ICs0MzQsNyBAQCB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnRE
YXRhKGluCiAjZW5kaWYKIAogICAgIHdoaWxlIChwdXJnZUNvdW50KSB7Ci0gICAgICAgIFZlY3Rv
cjxSZWZQdHI8U2ltcGxlRm9udERhdGE+LCAyMD4gZm9udHNUb0RlbGV0ZTsKKyAgICAgICAgVmVj
dG9yPFJlZlB0cjxGb250PiwgMjA+IGZvbnRzVG9EZWxldGU7CiAgICAgICAgIGZvciAoYXV0byYg
Zm9udCA6IGNhY2hlZEZvbnRzKCkudmFsdWVzKCkpIHsKICAgICAgICAgICAgIGlmICghZm9udC0+
aGFzT25lUmVmKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC00NjYsOCArNDY2LDgg
QEAgdm9pZCBGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YShpbgogICAgICAgICAgICAg
aWYgKHZlcnRpY2FsRGF0YSkKICAgICAgICAgICAgICAgICB2ZXJ0aWNhbERhdGEtPm1faW5Gb250
Q2FjaGUgPSBmYWxzZTsKICAgICAgICAgfQotICAgICAgICBmb3IgKGF1dG8mIGZvbnREYXRhIDog
Y2FjaGVkRm9udHMoKS52YWx1ZXMoKSkgewotICAgICAgICAgICAgYXV0byogdmVydGljYWxEYXRh
ID0gY29uc3RfY2FzdDxPcGVuVHlwZVZlcnRpY2FsRGF0YSo+KGZvbnREYXRhLT52ZXJ0aWNhbERh
dGEoKSk7CisgICAgICAgIGZvciAoYXV0byYgZm9udCA6IGNhY2hlZEZvbnRzKCkudmFsdWVzKCkp
IHsKKyAgICAgICAgICAgIGF1dG8qIHZlcnRpY2FsRGF0YSA9IGNvbnN0X2Nhc3Q8T3BlblR5cGVW
ZXJ0aWNhbERhdGEqPihmb250LT52ZXJ0aWNhbERhdGEoKSk7CiAgICAgICAgICAgICBpZiAodmVy
dGljYWxEYXRhKQogICAgICAgICAgICAgICAgIHZlcnRpY2FsRGF0YS0+bV9pbkZvbnRDYWNoZSA9
IHRydWU7CiAgICAgICAgIH0KQEAgLTQ4MywxMiArNDgzLDEyIEBAIHZvaWQgRm9udENhY2hlOjpw
dXJnZUluYWN0aXZlRm9udERhdGEoaW4KICNlbmRpZgogfQogCi1zaXplX3QgRm9udENhY2hlOjpm
b250RGF0YUNvdW50KCkKK3NpemVfdCBGb250Q2FjaGU6OmZvbnRDb3VudCgpCiB7CiAgICAgcmV0
dXJuIGNhY2hlZEZvbnRzKCkuc2l6ZSgpOwogfQogCi1zaXplX3QgRm9udENhY2hlOjppbmFjdGl2
ZUZvbnREYXRhQ291bnQoKQorc2l6ZV90IEZvbnRDYWNoZTo6aW5hY3RpdmVGb250Q291bnQoKQog
ewogI2lmIFBMQVRGT1JNKElPUykKICAgICBGb250TG9ja2VyIGZvbnRMb2NrZXI7CkBAIC01NTEs
NyArNTUxLDcgQEAgdm9pZCBGb250Q2FjaGU6OmludmFsaWRhdGUoKQogfQogCiAjaWYgIVBMQVRG
T1JNKENPQ09BKQotUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OnNpbWlsYXJGb250
UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpCitSZWZQdHI8Rm9udD4gRm9udENh
Y2hlOjpzaW1pbGFyRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mKQogewogICAgIHJldHVybiBu
dWxscHRyOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
Y2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhY2hlLmgJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIGNsYXNz
IEZvbnRDYXNjYWRlOwogY2xhc3MgRm9udFBsYXRmb3JtRGF0YTsKIGNsYXNzIEZvbnRTZWxlY3Rv
cjsKIGNsYXNzIE9wZW5UeXBlVmVydGljYWxEYXRhOwotY2xhc3MgU2ltcGxlRm9udERhdGE7Citj
bGFzcyBGb250OwogCiAjaWYgUExBVEZPUk0oV0lOKQogI2lmIFVTRShJTUxBTkdfRk9OVF9MSU5L
MikKQEAgLTExMSw3ICsxMTEsNyBAQCBwdWJsaWM6CiAgICAgZnJpZW5kIEZvbnRDYWNoZSYgZm9u
dENhY2hlKCk7CiAKICAgICAvLyBUaGlzIG1ldGhvZCBpcyBpbXBsZW1lbnRlZCBieSB0aGUgcGxh
dGZvcm0uCi0gICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBzeXN0ZW1GYWxsYmFja0ZvckNoYXJh
Y3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgU2ltcGxlRm9udERhdGEqIG9yaWdp
bmFsRm9udERhdGEsIGJvb2wgaXNQbGF0Zm9ybUZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
LCBpbnQgbGVuZ3RoKTsKKyAgICBSZWZQdHI8Rm9udD4gc3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0
ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEZvbnQqIG9yaWdpbmFsRm9udERhdGEs
IGJvb2wgaXNQbGF0Zm9ybUZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3Ro
KTsKIAogICAgIC8vIEFsc28gaW1wbGVtZW50ZWQgYnkgdGhlIHBsYXRmb3JtLgogICAgIHZvaWQg
cGxhdGZvcm1Jbml0KCk7CkBAIC0xMjgsMTAgKzEyOCwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IGdldFRyYWl0c0luRmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYsIFZlY3Rvcjx1bnNpZ25lZD4m
KTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gZm9udEZvckZh
bWlseShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9taWNTdHJpbmcmLCBib29sIGNo
ZWNraW5nQWx0ZXJuYXRlTmFtZSA9IGZhbHNlKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWY8U2lt
cGxlRm9udERhdGE+IGxhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9u
Jik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgUmVmPFNpbXBsZUZvbnREYXRhPiBmb250Rm9yUGxhdGZv
cm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsKLSAgICBSZWZQdHI8U2ltcGxlRm9udERh
dGE+IHNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpOworICAg
IFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxGb250PiBmb250Rm9yRmFtaWx5KGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYsIGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1l
ID0gZmFsc2UpOworICAgIFdFQkNPUkVfRVhQT1JUIFJlZjxGb250PiBsYXN0UmVzb3J0RmFsbGJh
Y2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpOworICAgIFdFQkNPUkVfRVhQT1JUIFJlZjxG
b250PiBmb250Rm9yUGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsKKyAgICBS
ZWZQdHI8Rm9udD4gc2ltaWxhckZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJik7CiAKICAgICB2
b2lkIGFkZENsaWVudChGb250U2VsZWN0b3IqKTsKICAgICB2b2lkIHJlbW92ZUNsaWVudChGb250
U2VsZWN0b3IqKTsKQEAgLTEzOSwxMiArMTM5LDEyIEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBz
aG9ydCBnZW5lcmF0aW9uKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBpbnZhbGlkYXRlKCk7
CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBzaXplX3QgZm9udERhdGFDb3VudCgpOwotICAgIFdFQkNP
UkVfRVhQT1JUIHNpemVfdCBpbmFjdGl2ZUZvbnREYXRhQ291bnQoKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCBzaXplX3QgZm9udENvdW50KCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc2l6ZV90IGluYWN0
aXZlRm9udENvdW50KCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwdXJnZUluYWN0aXZlRm9u
dERhdGEoaW50IGNvdW50ID0gSU5UX01BWCk7CiAKICNpZiBQTEFURk9STShXSU4pCi0gICAgUmVm
UHRyPFNpbXBsZUZvbnREYXRhPiBmb250RGF0YUZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoY29u
c3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgTE9HRk9OVCYsIEF0b21pY1N0cmluZyYgb3V0Rm9u
dEZhbWlseU5hbWUpOworICAgIFJlZlB0cjxGb250PiBmb250RnJvbURlc2NyaXB0aW9uQW5kTG9n
Rm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBMT0dGT05UJiwgQXRvbWljU3RyaW5n
JiBvdXRGb250RmFtaWx5TmFtZSk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJU
SUNBTCkKQEAgLTE3Myw3ICsxNzMsNyBAQCBwcml2YXRlOgogICAgIC8vIFRoZXNlIG1ldGhvZHMg
YXJlIGltcGxlbWVudGVkIGJ5IGVhY2ggcGxhdGZvcm0uCiAjaWYgUExBVEZPUk0oSU9TKQogICAg
IEZvbnRQbGF0Zm9ybURhdGEqIGdldEN1c3RvbUZhbGxiYWNrRm9udChjb25zdCBVSW50MzIsIGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYpOwotICAgIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IGdl
dFN5c3RlbUZvbnRGYWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9uJiwg
Y29uc3QgU2ltcGxlRm9udERhdGEqLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0
aCk7CisgICAgUGFzc1JlZlB0cjxGb250PiBnZXRTeXN0ZW1Gb250RmFsbGJhY2tGb3JDaGFyYWN0
ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEZvbnQqLCBjb25zdCBVQ2hhciogY2hh
cmFjdGVycywgaW50IGxlbmd0aCk7CiAjZW5kaWYKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBs
YXRmb3JtRGF0YT4gY3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24m
LCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSk7CiAKQEAgLTE4Miw3ICsxODIsNyBAQCBwcml2
YXRlOgogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIGZyaWVuZCBjbGFzcyBDb21wbGV4VGV4dENv
bnRyb2xsZXI7CiAjZW5kaWYKLSAgICBmcmllbmQgY2xhc3MgU2ltcGxlRm9udERhdGE7CisgICAg
ZnJpZW5kIGNsYXNzIEZvbnQ7CiB9OwogCiAvLyBHZXQgdGhlIGdsb2JhbCBmb250Q2FjaGUuCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUu
Y3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250Q2FzY2FkZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNCw4ICsxMjQsOCBAQCBGb250
Q2FzY2FkZTo6Rm9udENhc2NhZGUoY29uc3QgRm9udERlc2NyCiB9CiAKIC8vIEZJWE1FOiBXZSBz
aG91bGQgbWFrZSB0aGlzIGNvbnN0cnVjdG9yIHBsYXRmb3JtLWluZGVwZW5kZW50LgotRm9udENh
c2NhZGU6OkZvbnRDYXNjYWRlKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnREYXRhLCBib29s
IGlzUHJpbnRlckZvbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmdNb2RlKQotICAg
IDogbV9nbHlwaHMoRm9udEdseXBoczo6Y3JlYXRlRm9yUGxhdGZvcm1Gb250KGZvbnREYXRhKSkK
K0ZvbnRDYXNjYWRlOjpGb250Q2FzY2FkZShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBmb250LCBi
b29sIGlzUHJpbnRlckZvbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmdNb2RlKQor
ICAgIDogbV9nbHlwaHMoRm9udEdseXBoczo6Y3JlYXRlRm9yUGxhdGZvcm1Gb250KGZvbnQpKQog
ICAgICwgbV9sZXR0ZXJTcGFjaW5nKDApCiAgICAgLCBtX3dvcmRTcGFjaW5nKDApCiAgICAgLCBt
X3VzZUJhY2tzbGFzaEFzWWVuU3ltYm9sKGZhbHNlKQpAQCAtMTM0LDI3ICsxMzQsMjcgQEAgRm9u
dENhc2NhZGU6OkZvbnRDYXNjYWRlKGNvbnN0IEZvbnRQbGF0ZgogICAgIG1fZm9udERlc2NyaXB0
aW9uLnNldFVzZVByaW50ZXJGb250KGlzUHJpbnRlckZvbnQpOwogICAgIG1fZm9udERlc2NyaXB0
aW9uLnNldEZvbnRTbW9vdGhpbmcoZm9udFNtb290aGluZ01vZGUpOwogI2lmIFBMQVRGT1JNKElP
UykKLSAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKENURm9udEdldFNpemUo
Zm9udERhdGEuZm9udCgpKSk7Ci0gICAgbV9mb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXpl
KENURm9udEdldFNpemUoZm9udERhdGEuZm9udCgpKSk7Ci0gICAgbV9mb250RGVzY3JpcHRpb24u
c2V0SXNJdGFsaWMoQ1RGb250R2V0U3ltYm9saWNUcmFpdHMoZm9udERhdGEuZm9udCgpKSAmIGtD
VEZvbnRUcmFpdEl0YWxpYyk7Ci0gICAgbV9mb250RGVzY3JpcHRpb24uc2V0V2VpZ2h0KChDVEZv
bnRHZXRTeW1ib2xpY1RyYWl0cyhmb250RGF0YS5mb250KCkpICYga0NURm9udFRyYWl0Qm9sZCkg
PyBGb250V2VpZ2h0Qm9sZCA6IEZvbnRXZWlnaHROb3JtYWwpOworICAgIG1fZm9udERlc2NyaXB0
aW9uLnNldFNwZWNpZmllZFNpemUoQ1RGb250R2V0U2l6ZShmb250LmZvbnQoKSkpOworICAgIG1f
Zm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShDVEZvbnRHZXRTaXplKGZvbnQuZm9udCgp
KSk7CisgICAgbV9mb250RGVzY3JpcHRpb24uc2V0SXNJdGFsaWMoQ1RGb250R2V0U3ltYm9saWNU
cmFpdHMoZm9udC5mb250KCkpICYga0NURm9udFRyYWl0SXRhbGljKTsKKyAgICBtX2ZvbnREZXNj
cmlwdGlvbi5zZXRXZWlnaHQoKENURm9udEdldFN5bWJvbGljVHJhaXRzKGZvbnQuZm9udCgpKSAm
IGtDVEZvbnRUcmFpdEJvbGQpID8gRm9udFdlaWdodEJvbGQgOiBGb250V2VpZ2h0Tm9ybWFsKTsK
ICNlbmRpZgogfQogCiAvLyBGSVhNRTogV2Ugc2hvdWxkIG1ha2UgdGhpcyBjb25zdHJ1Y3RvciBw
bGF0Zm9ybS1pbmRlcGVuZGVudC4KICNpZiBQTEFURk9STShJT1MpCi1Gb250Q2FzY2FkZTo6Rm9u
dENhc2NhZGUoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZm9udERhdGEsIFBhc3NSZWZQdHI8Rm9u
dFNlbGVjdG9yPiBmb250U2VsZWN0b3IpCi0gICAgOiBtX2dseXBocyhGb250R2x5cGhzOjpjcmVh
dGVGb3JQbGF0Zm9ybUZvbnQoZm9udERhdGEpKQorRm9udENhc2NhZGU6OkZvbnRDYXNjYWRlKGNv
bnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnQsIFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPiBmb250
U2VsZWN0b3IpCisgICAgOiBtX2dseXBocyhGb250R2x5cGhzOjpjcmVhdGVGb3JQbGF0Zm9ybUZv
bnQoZm9udCkpCiAgICAgLCBtX2xldHRlclNwYWNpbmcoMCkKICAgICAsIG1fd29yZFNwYWNpbmco
MCkKICAgICAsIG1fdHlwZXNldHRpbmdGZWF0dXJlcyhjb21wdXRlVHlwZXNldHRpbmdGZWF0dXJl
cygpKQogewotICAgIENURm9udFJlZiBwcmltYXJ5Rm9udCA9IGZvbnREYXRhLmZvbnQoKTsKKyAg
ICBDVEZvbnRSZWYgcHJpbWFyeUZvbnQgPSBmb250LmZvbnQoKTsKICAgICBtX2ZvbnREZXNjcmlw
dGlvbi5zZXRTcGVjaWZpZWRTaXplKENURm9udEdldFNpemUocHJpbWFyeUZvbnQpKTsKICAgICBt
X2ZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoQ1RGb250R2V0U2l6ZShwcmltYXJ5Rm9u
dCkpOwogICAgIG1fZm9udERlc2NyaXB0aW9uLnNldElzSXRhbGljKENURm9udEdldFN5bWJvbGlj
VHJhaXRzKHByaW1hcnlGb250KSAmIGtDVEZvbnRUcmFpdEl0YWxpYyk7CiAgICAgbV9mb250RGVz
Y3JpcHRpb24uc2V0V2VpZ2h0KChDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhwcmltYXJ5Rm9udCkg
JiBrQ1RGb250VHJhaXRCb2xkKSA/IEZvbnRXZWlnaHRCb2xkIDogRm9udFdlaWdodE5vcm1hbCk7
Ci0gICAgbV9mb250RGVzY3JpcHRpb24uc2V0VXNlUHJpbnRlckZvbnQoZm9udERhdGEuaXNQcmlu
dGVyRm9udCgpKTsKKyAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRVc2VQcmludGVyRm9udChmb250
LmlzUHJpbnRlckZvbnQoKSk7CiAgICAgbV9nbHlwaHMgPSByZXRyaWV2ZU9yQWRkQ2FjaGVkRm9u
dEdseXBocyhtX2ZvbnREZXNjcmlwdGlvbiwgZm9udFNlbGVjdG9yLmdldCgpKTsKIH0KICNlbmRp
ZgpAQCAtMzcxLDcgKzM3MSw3IEBAIHZvaWQgRm9udENhc2NhZGU6OmRyYXdFbXBoYXNpc01hcmtz
KEdyYXAKICAgICAgICAgZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChjb250ZXh0LCBy
dW4sIG1hcmssIHBvaW50LCBmcm9tLCB0byk7CiB9CiAKLWZsb2F0IEZvbnRDYXNjYWRlOjp3aWR0
aChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFs
bGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKK2Zsb2F0IEZv
bnRDYXNjYWRlOjp3aWR0aChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgRm9udCo+
KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAogewog
ICAgIENvZGVQYXRoIGNvZGVQYXRoVG9Vc2UgPSBjb2RlUGF0aChydW4pOwogICAgIGlmIChjb2Rl
UGF0aFRvVXNlICE9IENvbXBsZXgpIHsKQEAgLTM4OSw3ICszODksNyBAQCBmbG9hdCBGb250Q2Fz
Y2FkZTo6d2lkdGgoY29uc3QgVGV4dFJ1biYgCiAgICAgaWYgKGNhY2hlRW50cnkgJiYgIXN0ZDo6
aXNuYW4oKmNhY2hlRW50cnkpKQogICAgICAgICByZXR1cm4gKmNhY2hlRW50cnk7CiAKLSAgICBI
YXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4gbG9jYWxGYWxsYmFja0ZvbnRzOworICAgIEhh
c2hTZXQ8Y29uc3QgRm9udCo+IGxvY2FsRmFsbGJhY2tGb250czsKICAgICBpZiAoIWZhbGxiYWNr
Rm9udHMpCiAgICAgICAgIGZhbGxiYWNrRm9udHMgPSAmbG9jYWxGYWxsYmFja0ZvbnRzOwogCkBA
IC00MTYsMTAgKzQxNiwxMCBAQCBmbG9hdCBGb250Q2FzY2FkZTo6d2lkdGgoY29uc3QgVGV4dFJ1
biYgCiAgICAgcmV0dXJuIHdpZHRoKHJ1bik7CiB9CiAKLUdseXBoRGF0YSBGb250Q2FzY2FkZTo6
Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYywgYm9vbCBtaXJyb3IsIEZvbnREYXRhVmFy
aWFudCB2YXJpYW50KSBjb25zdAorR2x5cGhEYXRhIEZvbnRDYXNjYWRlOjpnbHlwaERhdGFGb3JD
aGFyYWN0ZXIoVUNoYXIzMiBjLCBib29sIG1pcnJvciwgRm9udFZhcmlhbnQgdmFyaWFudCkgY29u
c3QKIHsKICAgICBpZiAodmFyaWFudCA9PSBBdXRvVmFyaWFudCkgewotICAgICAgICBpZiAobV9m
b250RGVzY3JpcHRpb24uc21hbGxDYXBzKCkgJiYgIXByaW1hcnlGb250RGF0YSgpLmlzU1ZHRm9u
dCgpKSB7CisgICAgICAgIGlmIChtX2ZvbnREZXNjcmlwdGlvbi5zbWFsbENhcHMoKSAmJiAhcHJp
bWFyeUZvbnQoKS5pc1NWR0ZvbnQoKSkgewogICAgICAgICAgICAgVUNoYXIzMiB1cHBlckMgPSB1
X3RvdXBwZXIoYyk7CiAgICAgICAgICAgICBpZiAodXBwZXJDICE9IGMpIHsKICAgICAgICAgICAg
ICAgICBjID0gdXBwZXJDOwpAQCAtNDQ2LDcgKzQ0Niw3IEBAIHZvaWQgRm9udENhc2NhZGU6OmRl
bGV0ZUxheW91dChUZXh0TGF5b3UKIHsKIH0KIAotZmxvYXQgRm9udENhc2NhZGU6OndpZHRoKFRl
eHRMYXlvdXQmLCB1bnNpZ25lZCwgdW5zaWduZWQsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERh
dGEqPiopCitmbG9hdCBGb250Q2FzY2FkZTo6d2lkdGgoVGV4dExheW91dCYsIHVuc2lnbmVkLCB1
bnNpZ25lZCwgSGFzaFNldDxjb25zdCBGb250Kj4qKQogewogICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgIHJldHVybiAwOwpAQCAtNTA1LDcgKzUwNSw3IEBAIGJvb2wgRm9udENhc2NhZGU6
Omhhc1ZhbGlkQXZlcmFnZUNoYXJXaWQKIAogI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0o
SU9TKQogICAgIC8vIEludGVybmFsIGZvbnRzIG9uIE9TIFggYW5kIGlPUyBhbHNvIGhhdmUgYW4g
aW52YWxpZCBlbnRyeSBpbiB0aGUgdGFibGUgZm9yIGF2Z0NoYXJXaWR0aC4KLSAgICBpZiAocHJp
bWFyeUZvbnREYXRhSXNTeXN0ZW1Gb250KCkpCisgICAgaWYgKHByaW1hcnlGb250SXNTeXN0ZW1G
b250KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgogCkBAIC01MjUsNyArNTI1LDcg
QEAgYm9vbCBGb250Q2FzY2FkZTo6ZmFzdEF2ZXJhZ2VDaGFyV2lkdGhJZgogewogICAgIGJvb2wg
c3VjY2VzcyA9IGhhc1ZhbGlkQXZlcmFnZUNoYXJXaWR0aCgpOwogICAgIGlmIChzdWNjZXNzKQot
ICAgICAgICB3aWR0aCA9IHJvdW5kZihwcmltYXJ5Rm9udERhdGEoKS5hdmdDaGFyV2lkdGgoKSk7
IC8vIEZJWE1FOiBwcmltYXJ5Rm9udERhdGEoKSBtaWdodCBub3QgY29ycmVzcG9uZCB0byBmaXJz
dEZhbWlseSgpLgorICAgICAgICB3aWR0aCA9IHJvdW5kZihwcmltYXJ5Rm9udCgpLmF2Z0NoYXJX
aWR0aCgpKTsgLy8gRklYTUU6IHByaW1hcnlGb250KCkgbWlnaHQgbm90IGNvcnJlc3BvbmQgdG8g
Zmlyc3RGYW1pbHkoKS4KICAgICByZXR1cm4gc3VjY2VzczsKIH0KIApAQCAtMTE3Myw3ICsxMTcz
LDcgQEAgaW50IEZvbnRDYXNjYWRlOjplbXBoYXNpc01hcmtBc2NlbnQoY29ucwogICAgIGlmICgh
Z2V0RW1waGFzaXNNYXJrR2x5cGhEYXRhKG1hcmssIG1hcmtHbHlwaERhdGEpKQogICAgICAgICBy
ZXR1cm4gMDsKIAotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBtYXJrRm9udERhdGEgPSBtYXJr
R2x5cGhEYXRhLmZvbnREYXRhOworICAgIGNvbnN0IEZvbnQqIG1hcmtGb250RGF0YSA9IG1hcmtH
bHlwaERhdGEuZm9udDsKICAgICBBU1NFUlQobWFya0ZvbnREYXRhKTsKICAgICBpZiAoIW1hcmtG
b250RGF0YSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMTg3LDcgKzExODcsNyBAQCBpbnQgRm9u
dENhc2NhZGU6OmVtcGhhc2lzTWFya0Rlc2NlbnQoY29uCiAgICAgaWYgKCFnZXRFbXBoYXNpc01h
cmtHbHlwaERhdGEobWFyaywgbWFya0dseXBoRGF0YSkpCiAgICAgICAgIHJldHVybiAwOwogCi0g
ICAgY29uc3QgU2ltcGxlRm9udERhdGEqIG1hcmtGb250RGF0YSA9IG1hcmtHbHlwaERhdGEuZm9u
dERhdGE7CisgICAgY29uc3QgRm9udCogbWFya0ZvbnREYXRhID0gbWFya0dseXBoRGF0YS5mb250
OwogICAgIEFTU0VSVChtYXJrRm9udERhdGEpOwogICAgIGlmICghbWFya0ZvbnREYXRhKQogICAg
ICAgICByZXR1cm4gMDsKQEAgLTEyMDEsNyArMTIwMSw3IEBAIGludCBGb250Q2FzY2FkZTo6ZW1w
aGFzaXNNYXJrSGVpZ2h0KGNvbnMKICAgICBpZiAoIWdldEVtcGhhc2lzTWFya0dseXBoRGF0YSht
YXJrLCBtYXJrR2x5cGhEYXRhKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBjb25zdCBTaW1w
bGVGb250RGF0YSogbWFya0ZvbnREYXRhID0gbWFya0dseXBoRGF0YS5mb250RGF0YTsKKyAgICBj
b25zdCBGb250KiBtYXJrRm9udERhdGEgPSBtYXJrR2x5cGhEYXRhLmZvbnQ7CiAgICAgQVNTRVJU
KG1hcmtGb250RGF0YSk7CiAgICAgaWYgKCFtYXJrRm9udERhdGEpCiAgICAgICAgIHJldHVybiAw
OwpAQCAtMTI3Myw3ICsxMjczLDcgQEAgdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBoQnVmZmVy
KEdyYXBoaQogI2VuZGlmCiAKICAgICAvLyBEcmF3IGVhY2ggY29udGlndW91cyBydW4gb2YgZ2x5
cGhzIHRoYXQgdXNlIHRoZSBzYW1lIGZvbnQgZGF0YS4KLSAgICBjb25zdCBTaW1wbGVGb250RGF0
YSogZm9udERhdGEgPSBnbHlwaEJ1ZmZlci5mb250RGF0YUF0KDApOworICAgIGNvbnN0IEZvbnQq
IGZvbnREYXRhID0gZ2x5cGhCdWZmZXIuZm9udEF0KDApOwogICAgIEZsb2F0U2l6ZSBvZmZzZXQg
PSBnbHlwaEJ1ZmZlci5vZmZzZXRBdCgwKTsKICAgICBGbG9hdFBvaW50IHN0YXJ0UG9pbnQocG9p
bnQueCgpLCBwb2ludC55KCkgLSBnbHlwaEJ1ZmZlci5pbml0aWFsQWR2YW5jZSgpLmhlaWdodCgp
KTsKICAgICBmbG9hdCBuZXh0WCA9IHN0YXJ0UG9pbnQueCgpICsgZ2x5cGhCdWZmZXIuYWR2YW5j
ZUF0KDApLndpZHRoKCk7CkBAIC0xMjg0LDcgKzEyODQsNyBAQCB2b2lkIEZvbnRDYXNjYWRlOjpk
cmF3R2x5cGhCdWZmZXIoR3JhcGhpCiAgICAgVGV4dFJ1bjo6UmVuZGVyaW5nQ29udGV4dCogcmVu
ZGVyaW5nQ29udGV4dCA9IHJ1bi5yZW5kZXJpbmdDb250ZXh0KCk7CiAjZW5kaWYKICAgICB3aGls
ZSAobmV4dEdseXBoIDwgZ2x5cGhCdWZmZXIuc2l6ZSgpKSB7Ci0gICAgICAgIGNvbnN0IFNpbXBs
ZUZvbnREYXRhKiBuZXh0Rm9udERhdGEgPSBnbHlwaEJ1ZmZlci5mb250RGF0YUF0KG5leHRHbHlw
aCk7CisgICAgICAgIGNvbnN0IEZvbnQqIG5leHRGb250RGF0YSA9IGdseXBoQnVmZmVyLmZvbnRB
dChuZXh0R2x5cGgpOwogICAgICAgICBGbG9hdFNpemUgbmV4dE9mZnNldCA9IGdseXBoQnVmZmVy
Lm9mZnNldEF0KG5leHRHbHlwaCk7CiAKICAgICAgICAgaWYgKG5leHRGb250RGF0YSAhPSBmb250
RGF0YSB8fCBuZXh0T2Zmc2V0ICE9IG9mZnNldCkgewpAQCAtMTMxNyw3ICsxMzE3LDcgQEAgdm9p
ZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBoQnVmZmVyKEdyYXBoaQogICAgIH0KIH0KIAotaW5saW5l
IHN0YXRpYyBmbG9hdCBvZmZzZXRUb01pZGRsZU9mR2x5cGgoY29uc3QgU2ltcGxlRm9udERhdGEq
IGZvbnREYXRhLCBHbHlwaCBnbHlwaCkKK2lubGluZSBzdGF0aWMgZmxvYXQgb2Zmc2V0VG9NaWRk
bGVPZkdseXBoKGNvbnN0IEZvbnQqIGZvbnREYXRhLCBHbHlwaCBnbHlwaCkKIHsKICAgICBpZiAo
Zm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbCkgewog
ICAgICAgICBGbG9hdFJlY3QgYm91bmRzID0gZm9udERhdGEtPmJvdW5kc0ZvckdseXBoKGdseXBo
KTsKQEAgLTEzMjksNyArMTMyOSw3IEBAIGlubGluZSBzdGF0aWMgZmxvYXQgb2Zmc2V0VG9NaWRk
bGVPZkdseXAKIAogaW5saW5lIHN0YXRpYyBmbG9hdCBvZmZzZXRUb01pZGRsZU9mR2x5cGhBdElu
ZGV4KGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgc2l6ZV90IGkpCiB7Ci0gICAgcmV0
dXJuIG9mZnNldFRvTWlkZGxlT2ZHbHlwaChnbHlwaEJ1ZmZlci5mb250RGF0YUF0KGkpLCBnbHlw
aEJ1ZmZlci5nbHlwaEF0KGkpKTsKKyAgICByZXR1cm4gb2Zmc2V0VG9NaWRkbGVPZkdseXBoKGds
eXBoQnVmZmVyLmZvbnRBdChpKSwgZ2x5cGhCdWZmZXIuZ2x5cGhBdChpKSk7CiB9CiAKIHZvaWQg
Rm9udENhc2NhZGU6OmRyYXdFbXBoYXNpc01hcmtzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
Y29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGNvbnN0
IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0CkBAIC0x
MzM4LDcgKzEzMzgsNyBAQCB2b2lkIEZvbnRDYXNjYWRlOjpkcmF3RW1waGFzaXNNYXJrcyhHcmFw
CiAgICAgaWYgKCFnZXRFbXBoYXNpc01hcmtHbHlwaERhdGEobWFyaywgbWFya0dseXBoRGF0YSkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBtYXJrRm9udERh
dGEgPSBtYXJrR2x5cGhEYXRhLmZvbnREYXRhOworICAgIGNvbnN0IEZvbnQqIG1hcmtGb250RGF0
YSA9IG1hcmtHbHlwaERhdGEuZm9udDsKICAgICBBU1NFUlQobWFya0ZvbnREYXRhKTsKICAgICBp
ZiAoIW1hcmtGb250RGF0YSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTM2MSw3ICsxMzYxLDcgQEAg
dm9pZCBGb250Q2FzY2FkZTo6ZHJhd0VtcGhhc2lzTWFya3MoR3JhcAogICAgIGRyYXdHbHlwaEJ1
ZmZlcihjb250ZXh0LCBydW4sIG1hcmtCdWZmZXIsIHN0YXJ0UG9pbnQpOwogfQogCi1mbG9hdCBG
b250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBI
YXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZs
b3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0CitmbG9hdCBGb250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZv
clNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFs
bGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKIHsKICAgICBX
aWR0aEl0ZXJhdG9yIGl0KHRoaXMsIHJ1biwgZmFsbGJhY2tGb250cywgZ2x5cGhPdmVyZmxvdyk7
CiAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgJKHJldmlzaW9uIDE3ODg1NykKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDEwICsyNiwxMCBAQAogI2RlZmluZSBGb250Q2FzY2FkZV9oCiAKICNpbmNsdWRl
ICJEYXNoQXJyYXkuaCIKKyNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9udERlc2NyaXB0
aW9uLmgiCiAjaW5jbHVkZSAiRm9udEdseXBocy5oIgogI2luY2x1ZGUgIlBhdGguaCIKLSNpbmNs
dWRlICJTaW1wbGVGb250RGF0YS5oIgogI2luY2x1ZGUgIlRleHREaXJlY3Rpb24uaCIKICNpbmNs
dWRlICJUeXBlc2V0dGluZ0ZlYXR1cmVzLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAg
LTEzNCwxNyArMTM0LDE3IEBAIHB1YmxpYzoKIAogICAgIGVudW0gQ3VzdG9tRm9udE5vdFJlYWR5
QWN0aW9uIHsgRG9Ob3RQYWludElmRm9udE5vdFJlYWR5LCBVc2VGYWxsYmFja0lmRm9udE5vdFJl
YWR5IH07CiAgICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQgZHJhd1RleHQoR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGludCB0
byA9IC0xLCBDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPSBEb05vdFBhaW50SWZGb250Tm90UmVh
ZHkpIGNvbnN0OwotICAgIHZvaWQgZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBT
aW1wbGVGb250RGF0YSosIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCBudW1HbHlw
aHMsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKKyAgICB2b2lkIGRyYXdHbHlwaHMoR3JhcGhp
Y3NDb250ZXh0KiwgY29uc3QgRm9udCosIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGlu
dCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKICAgICB2b2lkIGRyYXdFbXBo
YXNpc01hcmtzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9taWNT
dHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0x
KSBjb25zdDsKIAogICAgIERhc2hBcnJheSBkYXNoZXNGb3JJbnRlcnNlY3Rpb25zV2l0aFJlY3Qo
Y29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIGNvbnN0IEZsb2F0
UmVjdCYgbGluZUV4dGVudHMpIGNvbnN0OwogCi0gICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQgd2lk
dGgoY29uc3QgVGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJh
Y2tGb250cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBP
UlQgZmxvYXQgd2lkdGgoY29uc3QgVGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxs
YmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsKICAgICBmbG9hdCB3aWR0
aChjb25zdCBUZXh0UnVuJiwgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcmIGdseXBoTmFtZSkg
Y29uc3Q7CiAKICAgICBQYXNzT3duUHRyPFRleHRMYXlvdXQ+IGNyZWF0ZUxheW91dChSZW5kZXJU
ZXh0KiwgZmxvYXQgeFBvcywgYm9vbCBjb2xsYXBzZVdoaXRlU3BhY2UpIGNvbnN0OwogICAgIHN0
YXRpYyB2b2lkIGRlbGV0ZUxheW91dChUZXh0TGF5b3V0Kik7Ci0gICAgc3RhdGljIGZsb2F0IHdp
ZHRoKFRleHRMYXlvdXQmLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIEhhc2hTZXQ8Y29u
c3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDApOworICAgIHN0YXRpYyBmbG9h
dCB3aWR0aChUZXh0TGF5b3V0JiwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBIYXNoU2V0
PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cyA9IDApOwogCiAgICAgaW50IG9mZnNldEZvclBv
c2l0aW9uKGNvbnN0IFRleHRSdW4mLCBmbG9hdCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlh
bEdseXBocykgY29uc3Q7CiAgICAgdm9pZCBhZGp1c3RTZWxlY3Rpb25SZWN0Rm9yVGV4dChjb25z
dCBUZXh0UnVuJiwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgaW50IGZyb20gPSAwLCBpbnQg
dG8gPSAtMSkgY29uc3Q7CkBAIC0xNzIsMTAgKzE3MiwxMCBAQCBwdWJsaWM6CiAKICAgICBib29s
IGlzUGxhdGZvcm1Gb250KCkgY29uc3QgeyByZXR1cm4gbV9nbHlwaHMtPmlzRm9yUGxhdGZvcm1G
b250KCk7IH0KIAotICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBmb250TWV0cmljcygpIGNvbnN0IHsg
cmV0dXJuIHByaW1hcnlGb250RGF0YSgpLmZvbnRNZXRyaWNzKCk7IH0KLSAgICBmbG9hdCBzcGFj
ZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gcHJpbWFyeUZvbnREYXRhKCkuc3BhY2VXaWR0aCgpICsg
bV9sZXR0ZXJTcGFjaW5nOyB9Ci0gICAgZmxvYXQgdGFiV2lkdGgoY29uc3QgU2ltcGxlRm9udERh
dGEmLCB1bnNpZ25lZCB0YWJTaXplLCBmbG9hdCBwb3NpdGlvbikgY29uc3Q7Ci0gICAgZmxvYXQg
dGFiV2lkdGgodW5zaWduZWQgdGFiU2l6ZSwgZmxvYXQgcG9zaXRpb24pIGNvbnN0IHsgcmV0dXJu
IHRhYldpZHRoKHByaW1hcnlGb250RGF0YSgpLCB0YWJTaXplLCBwb3NpdGlvbik7IH0KKyAgICBj
b25zdCBGb250TWV0cmljcyYgZm9udE1ldHJpY3MoKSBjb25zdCB7IHJldHVybiBwcmltYXJ5Rm9u
dCgpLmZvbnRNZXRyaWNzKCk7IH0KKyAgICBmbG9hdCBzcGFjZVdpZHRoKCkgY29uc3QgeyByZXR1
cm4gcHJpbWFyeUZvbnQoKS5zcGFjZVdpZHRoKCkgKyBtX2xldHRlclNwYWNpbmc7IH0KKyAgICBm
bG9hdCB0YWJXaWR0aChjb25zdCBGb250JiwgdW5zaWduZWQgdGFiU2l6ZSwgZmxvYXQgcG9zaXRp
b24pIGNvbnN0OworICAgIGZsb2F0IHRhYldpZHRoKHVuc2lnbmVkIHRhYlNpemUsIGZsb2F0IHBv
c2l0aW9uKSBjb25zdCB7IHJldHVybiB0YWJXaWR0aChwcmltYXJ5Rm9udCgpLCB0YWJTaXplLCBw
b3NpdGlvbik7IH0KICAgICBib29sIGhhc1ZhbGlkQXZlcmFnZUNoYXJXaWR0aCgpIGNvbnN0Owog
ICAgIGJvb2wgZmFzdEF2ZXJhZ2VDaGFyV2lkdGhJZkF2YWlsYWJsZShmbG9hdCAmd2lkdGgpIGNv
bnN0OyAvLyByZXR1cm5zIHRydWUgb24gc3VjY2VzcwogCkBAIC0xODMsMTIgKzE4MywxMiBAQCBw
dWJsaWM6CiAgICAgaW50IGVtcGhhc2lzTWFya0Rlc2NlbnQoY29uc3QgQXRvbWljU3RyaW5nJikg
Y29uc3Q7CiAgICAgaW50IGVtcGhhc2lzTWFya0hlaWdodChjb25zdCBBdG9taWNTdHJpbmcmKSBj
b25zdDsKIAotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhJiBwcmltYXJ5Rm9udERhdGEoKSBjb25z
dDsKKyAgICBjb25zdCBGb250JiBwcmltYXJ5Rm9udCgpIGNvbnN0OwogICAgIGNvbnN0IEZvbnRS
YW5nZXMmIGZhbGxiYWNrUmFuZ2VzQXQodW5zaWduZWQpIGNvbnN0OwotICAgIEdseXBoRGF0YSBn
bHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiwgYm9vbCBtaXJyb3IsIEZvbnREYXRhVmFyaWFu
dCA9IEF1dG9WYXJpYW50KSBjb25zdDsKKyAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yQ2hhcmFj
dGVyKFVDaGFyMzIsIGJvb2wgbWlycm9yLCBGb250VmFyaWFudCA9IEF1dG9WYXJpYW50KSBjb25z
dDsKICAgICAKICNpZiBQTEFURk9STShDT0NPQSkKLSAgICBjb25zdCBTaW1wbGVGb250RGF0YSog
Zm9udERhdGFGb3JDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBVQ2hhciosIHNpemVf
dCBsZW5ndGgsIEZvbnREYXRhVmFyaWFudCkgY29uc3Q7CisgICAgY29uc3QgRm9udCogZm9udEZv
ckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVDaGFyKiwgc2l6ZV90IGxlbmd0aCwg
Rm9udFZhcmlhbnQpIGNvbnN0OwogI2VuZGlmCiAKICAgICBzdGF0aWMgYm9vbCBpc0NKS0lkZW9n
cmFwaChVQ2hhcjMyKTsKQEAgLTIwNyw3ICsyMDcsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIENv
ZGVQYXRoIGNoYXJhY3RlclJhbmdlQ29kZVBhdGgoY29uc3QgTENoYXIqLCB1bnNpZ25lZCkgeyBy
ZXR1cm4gU2ltcGxlOyB9CiAgICAgc3RhdGljIENvZGVQYXRoIGNoYXJhY3RlclJhbmdlQ29kZVBh
dGgoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW4pOwogCi0gICAgYm9vbCBwcmltYXJ5Rm9udERh
dGFJc1N5c3RlbUZvbnQoKSBjb25zdDsKKyAgICBib29sIHByaW1hcnlGb250SXNTeXN0ZW1Gb250
KCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgZW51bSBGb3JUZXh0RW1waGFzaXNPck5vdCB7IE5v
dEZvclRleHRFbXBoYXNpcywgRm9yVGV4dEVtcGhhc2lzIH07CkBAIC0yMTgsNyArMjE4LDcgQEAg
cHJpdmF0ZToKICAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzRm9yU2ltcGxlVGV4dChHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25z
dCBGbG9hdFBvaW50JiwgaW50IGZyb20sIGludCB0bykgY29uc3Q7CiAgICAgdm9pZCBkcmF3R2x5
cGhCdWZmZXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEdseXBoQnVm
ZmVyJiwgRmxvYXRQb2ludCYpIGNvbnN0OwogICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3MoR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEdseXBoQnVmZmVyJiwgY29uc3Qg
QXRvbWljU3RyaW5nJiwgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OwotICAgIGZsb2F0IGZsb2F0
V2lkdGhGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZv
bnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93KiA9IDApIGNvbnN0Owor
ICAgIGZsb2F0IGZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mLCBIYXNoU2V0
PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29u
c3Q7CiAgICAgaW50IG9mZnNldEZvclBvc2l0aW9uRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVu
JiwgZmxvYXQgcG9zaXRpb24sIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0OwogICAg
IHZvaWQgYWRqdXN0U2VsZWN0aW9uUmVjdEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYsIExh
eW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0OwogCkBAIC0y
MzEsNyArMjMxLDcgQEAgcHJpdmF0ZToKICAgICBmbG9hdCBnZXRHbHlwaHNBbmRBZHZhbmNlc0Zv
ckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBpbnQgZnJvbSwgaW50IHRvLCBHbHlwaEJ1ZmZl
ciYsIEZvclRleHRFbXBoYXNpc09yTm90ID0gTm90Rm9yVGV4dEVtcGhhc2lzKSBjb25zdDsKICAg
ICBmbG9hdCBkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYs
IGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdDsKICAgICB2b2lkIGRy
YXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4
dFJ1biYsIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIGludCBm
cm9tLCBpbnQgdG8pIGNvbnN0OwotICAgIGZsb2F0IGZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChj
b25zdCBUZXh0UnVuJiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0Zv
bnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsKKyAgICBmbG9hdCBmbG9hdFdpZHRo
Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxs
YmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsKICAgICBpbnQgb2Zmc2V0
Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwgZmxvYXQgcG9zaXRpb24s
IGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0OwogICAgIHZvaWQgYWRqdXN0U2VsZWN0
aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBMYXlvdXRSZWN0JiBzZWxlY3Rp
b25SZWN0LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdDsKIApAQCAtMzUyLDEwICszNTIsMTAgQEAg
aW5saW5lIEZvbnRDYXNjYWRlOjp+Rm9udENhc2NhZGUoKQogewogfQogCi1pbmxpbmUgY29uc3Qg
U2ltcGxlRm9udERhdGEmIEZvbnRDYXNjYWRlOjpwcmltYXJ5Rm9udERhdGEoKSBjb25zdAoraW5s
aW5lIGNvbnN0IEZvbnQmIEZvbnRDYXNjYWRlOjpwcmltYXJ5Rm9udCgpIGNvbnN0CiB7CiAgICAg
QVNTRVJUKG1fZ2x5cGhzKTsKLSAgICByZXR1cm4gbV9nbHlwaHMtPnByaW1hcnlTaW1wbGVGb250
RGF0YShtX2ZvbnREZXNjcmlwdGlvbik7CisgICAgcmV0dXJuIG1fZ2x5cGhzLT5wcmltYXJ5Rm9u
dChtX2ZvbnREZXNjcmlwdGlvbik7CiB9CiAKIGlubGluZSBjb25zdCBGb250UmFuZ2VzJiBGb250
Q2FzY2FkZTo6ZmFsbGJhY2tSYW5nZXNBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QKQEAgLTM3NSwx
MyArMzc1LDEzIEBAIGlubGluZSBGb250U2VsZWN0b3IqIEZvbnRDYXNjYWRlOjpmb250U2UKICAg
ICByZXR1cm4gbV9nbHlwaHMgPyBtX2dseXBocy0+Zm9udFNlbGVjdG9yKCkgOiAwOwogfQogCi1p
bmxpbmUgZmxvYXQgRm9udENhc2NhZGU6OnRhYldpZHRoKGNvbnN0IFNpbXBsZUZvbnREYXRhJiBm
b250RGF0YSwgdW5zaWduZWQgdGFiU2l6ZSwgZmxvYXQgcG9zaXRpb24pIGNvbnN0CitpbmxpbmUg
ZmxvYXQgRm9udENhc2NhZGU6OnRhYldpZHRoKGNvbnN0IEZvbnQmIGZvbnQsIHVuc2lnbmVkIHRh
YlNpemUsIGZsb2F0IHBvc2l0aW9uKSBjb25zdAogewogICAgIGlmICghdGFiU2l6ZSkKICAgICAg
ICAgcmV0dXJuIGxldHRlclNwYWNpbmcoKTsKLSAgICBmbG9hdCB0YWJXaWR0aCA9IHRhYlNpemUg
KiBmb250RGF0YS5zcGFjZVdpZHRoKCkgKyBsZXR0ZXJTcGFjaW5nKCk7CisgICAgZmxvYXQgdGFi
V2lkdGggPSB0YWJTaXplICogZm9udC5zcGFjZVdpZHRoKCkgKyBsZXR0ZXJTcGFjaW5nKCk7CiAg
ICAgZmxvYXQgdGFiRGVsdGFXaWR0aCA9IHRhYldpZHRoIC0gZm1vZGYocG9zaXRpb24sIHRhYldp
ZHRoKTsKLSAgICByZXR1cm4gKHRhYkRlbHRhV2lkdGggPCBmb250RGF0YS5zcGFjZVdpZHRoKCkg
LyAyKSA/IHRhYldpZHRoIDogdGFiRGVsdGFXaWR0aDsKKyAgICByZXR1cm4gKHRhYkRlbHRhV2lk
dGggPCBmb250LnNwYWNlV2lkdGgoKSAvIDIpID8gdGFiV2lkdGggOiB0YWJEZWx0YVdpZHRoOwog
fQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250R2x5cGhz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
R2x5cGhzLmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udEdseXBocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiAKIEZvbnRHbHlwaHM6OkZvbnRHbHlwaHMoUGFzc1JlZlB0
cjxGb250U2VsZWN0b3I+IGZvbnRTZWxlY3RvcikKLSAgICA6IG1fY2FjaGVkUHJpbWFyeVNpbXBs
ZUZvbnREYXRhKDApCisgICAgOiBtX2NhY2hlZFByaW1hcnlGb250KDApCiAgICAgLCBtX2ZvbnRT
ZWxlY3Rvcihmb250U2VsZWN0b3IpCiAgICAgLCBtX2ZvbnRTZWxlY3RvclZlcnNpb24obV9mb250
U2VsZWN0b3IgPyBtX2ZvbnRTZWxlY3Rvci0+dmVyc2lvbigpIDogMCkKICAgICAsIG1fZ2VuZXJh
dGlvbihmb250Q2FjaGUoKS5nZW5lcmF0aW9uKCkpCkBAIC00NSw3ICs0NSw3IEBAIEZvbnRHbHlw
aHM6OkZvbnRHbHlwaHMoUGFzc1JlZlB0cjxGb250U2UKIH0KIAogRm9udEdseXBoczo6Rm9udEds
eXBocyhjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEpCi0gICAgOiBtX2NhY2hl
ZFByaW1hcnlTaW1wbGVGb250RGF0YSgwKQorICAgIDogbV9jYWNoZWRQcmltYXJ5Rm9udCgwKQog
ICAgICwgbV9mb250U2VsZWN0b3IoMCkKICAgICAsIG1fZm9udFNlbGVjdG9yVmVyc2lvbigwKQog
ICAgICwgbV9nZW5lcmF0aW9uKGZvbnRDYWNoZSgpLmdlbmVyYXRpb24oKSkKQEAgLTYzLDcgKzYz
LDcgQEAgdm9pZCBGb250R2x5cGhzOjpkZXRlcm1pbmVQaXRjaChjb25zdCBGbwogICAgIGF1dG8m
IHByaW1hcnlSYW5nZXMgPSByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChkZXNjcmlwdGlvbiwgMCk7
CiAgICAgdW5zaWduZWQgbnVtUmFuZ2VzID0gcHJpbWFyeVJhbmdlcy5zaXplKCk7CiAgICAgaWYg
KG51bVJhbmdlcyA9PSAxKQotICAgICAgICBtX3BpdGNoID0gcHJpbWFyeVJhbmdlcy5yYW5nZUF0
KDApLmZvbnREYXRhKCkucGl0Y2goKTsKKyAgICAgICAgbV9waXRjaCA9IHByaW1hcnlSYW5nZXMu
cmFuZ2VBdCgwKS5mb250KCkucGl0Y2goKTsKICAgICBlbHNlCiAgICAgICAgIG1fcGl0Y2ggPSBW
YXJpYWJsZVBpdGNoOwogfQpAQCAtOTYsNyArOTYsNyBAQCBzdGF0aWMgRm9udFJhbmdlcyByZWFs
aXplTmV4dEZhbGxiYWNrKGNvCiAgICAgLy8gV2UgZGlkbid0IGZpbmQgYSBmb250LiBUcnkgdG8g
ZmluZCBhIHNpbWlsYXIgZm9udCB1c2luZyBvdXIgb3duIHNwZWNpZmljIGtub3dsZWRnZSBhYm91
dCBvdXIgcGxhdGZvcm0uCiAgICAgLy8gRm9yIGV4YW1wbGUgb24gT1MgWCwgd2Uga25vdyB0byBt
YXAgYW55IGZhbWlsaWVzIGNvbnRhaW5pbmcgdGhlIHdvcmRzIEFyYWJpYywgUGFzaHRvLCBvciBV
cmR1IHRvIHRoZQogICAgIC8vIEdlZXphIFBybyBmb250LgotICAgIHJldHVybiBGb250UmFuZ2Vz
KGZvbnRDYWNoZSgpLnNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGRlc2NyaXB0aW9uKSk7CisgICAg
cmV0dXJuIEZvbnRSYW5nZXMoZm9udENhY2hlKCkuc2ltaWxhckZvbnQoZGVzY3JpcHRpb24pKTsK
IH0KIAogY29uc3QgRm9udFJhbmdlcyYgRm9udEdseXBoczo6cmVhbGl6ZUZhbGxiYWNrUmFuZ2Vz
QXQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgdW5zaWduZWQgaW5kZXgpCkBA
IC0xMjYsMTAgKzEyNiwxMCBAQCBjb25zdCBGb250UmFuZ2VzJiBGb250R2x5cGhzOjpyZWFsaXpl
RmFsCiAgICAgICAgIEFTU0VSVChtX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXggPj0gZGVzY3Jp
cHRpb24uZmFtaWx5Q291bnQoKSk7CiAKICAgICAgICAgdW5zaWduZWQgZm9udFNlbGVjdG9yRmFs
bGJhY2tJbmRleCA9IG1fbGFzdFJlYWxpemVkRmFsbGJhY2tJbmRleCAtIGRlc2NyaXB0aW9uLmZh
bWlseUNvdW50KCk7Ci0gICAgICAgIGlmIChmb250U2VsZWN0b3JGYWxsYmFja0luZGV4ID09IG1f
Zm9udFNlbGVjdG9yLT5mYWxsYmFja0ZvbnREYXRhQ291bnQoKSkKKyAgICAgICAgaWYgKGZvbnRT
ZWxlY3RvckZhbGxiYWNrSW5kZXggPT0gbV9mb250U2VsZWN0b3ItPmZhbGxiYWNrRm9udENvdW50
KCkpCiAgICAgICAgICAgICByZXR1cm4gZm9udFJhbmdlczsKICAgICAgICAgKyttX2xhc3RSZWFs
aXplZEZhbGxiYWNrSW5kZXg7Ci0gICAgICAgIGZvbnRSYW5nZXMgPSBGb250UmFuZ2VzKG1fZm9u
dFNlbGVjdG9yLT5mYWxsYmFja0ZvbnREYXRhQXQoZGVzY3JpcHRpb24sIGZvbnRTZWxlY3RvckZh
bGxiYWNrSW5kZXgpKTsKKyAgICAgICAgZm9udFJhbmdlcyA9IEZvbnRSYW5nZXMobV9mb250U2Vs
ZWN0b3ItPmZhbGxiYWNrRm9udEF0KGRlc2NyaXB0aW9uLCBmb250U2VsZWN0b3JGYWxsYmFja0lu
ZGV4KSk7CiAgICAgfQogCiAgICAgcmV0dXJuIGZvbnRSYW5nZXM7CkBAIC0yMjEsOCArMjIxLDgg
QEAgc3RhdGljIGJvb2wgc2hvdWxkSWdub3JlUm90YXRpb24oVUNoYXIzMgogI2lmIFBMQVRGT1JN
KENPQ09BKQogc3RhdGljIEdseXBoRGF0YSBnbHlwaERhdGFGb3JDSktDaGFyYWN0ZXJXaXRob3V0
U3ludGhldGljSXRhbGljKFVDaGFyMzIgY2hhcmFjdGVyLCBHbHlwaERhdGEmIGRhdGEpCiB7Ci0g
ICAgR2x5cGhEYXRhIG5vbkl0YWxpY0RhdGEgPSBkYXRhLmZvbnREYXRhLT5ub25TeW50aGV0aWNJ
dGFsaWNGb250RGF0YSgpLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyKTsKLSAgICBp
ZiAobm9uSXRhbGljRGF0YS5mb250RGF0YSkKKyAgICBHbHlwaERhdGEgbm9uSXRhbGljRGF0YSA9
IGRhdGEuZm9udC0+bm9uU3ludGhldGljSXRhbGljRm9udCgpLT5nbHlwaERhdGFGb3JDaGFyYWN0
ZXIoY2hhcmFjdGVyKTsKKyAgICBpZiAobm9uSXRhbGljRGF0YS5mb250KQogICAgICAgICByZXR1
cm4gbm9uSXRhbGljRGF0YTsKICAgICByZXR1cm4gZGF0YTsKIH0KQEAgLTIzMSw3NiArMjMxLDc2
IEBAIHN0YXRpYyBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yQ0pLQ2hhcmFjdGUKIHN0YXRpYyBHbHlw
aERhdGEgZ2x5cGhEYXRhRm9yTm9uQ0pLQ2hhcmFjdGVyV2l0aEdseXBoT3JpZW50YXRpb24oVUNo
YXIzMiBjaGFyYWN0ZXIsIE5vbkNKS0dseXBoT3JpZW50YXRpb24gb3JpZW50YXRpb24sIGNvbnN0
IEdseXBoRGF0YSYgZGF0YSkKIHsKICAgICBpZiAob3JpZW50YXRpb24gPT0gTm9uQ0pLR2x5cGhP
cmllbnRhdGlvblVwcmlnaHQgfHwgc2hvdWxkSWdub3JlUm90YXRpb24oY2hhcmFjdGVyKSkgewot
ICAgICAgICBHbHlwaERhdGEgdXByaWdodERhdGEgPSBkYXRhLmZvbnREYXRhLT51cHJpZ2h0T3Jp
ZW50YXRpb25Gb250RGF0YSgpLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyKTsKKyAg
ICAgICAgR2x5cGhEYXRhIHVwcmlnaHREYXRhID0gZGF0YS5mb250LT51cHJpZ2h0T3JpZW50YXRp
b25Gb250KCktPmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIpOwogICAgICAgICAvLyBJ
ZiB0aGUgZ2x5cGhzIGFyZSB0aGUgc2FtZSwgdGhlbiB3ZSBrbm93IHdlIGNhbiBqdXN0IHVzZSB0
aGUgaG9yaXpvbnRhbCBnbHlwaCByb3RhdGVkIHZlcnRpY2FsbHkgdG8gYmUgdXByaWdodC4KICAg
ICAgICAgaWYgKGRhdGEuZ2x5cGggPT0gdXByaWdodERhdGEuZ2x5cGgpCiAgICAgICAgICAgICBy
ZXR1cm4gZGF0YTsKICAgICAgICAgLy8gVGhlIGdseXBocyBhcmUgZGlzdGluY3QsIG1lYW5pbmcg
dGhhdCB0aGUgZm9udCBoYXMgYSB2ZXJ0aWNhbC1yaWdodCBnbHlwaCBiYWtlZCBpbnRvIGl0LiBX
ZSBjYW4ndCB1c2UgdGhhdAogICAgICAgICAvLyBnbHlwaCwgc28gd2UgZmFsbCBiYWNrIHRvIHRo
ZSB1cHJpZ2h0IGRhdGEgYW5kIHVzZSB0aGUgaG9yaXpvbnRhbCBnbHlwaC4KLSAgICAgICAgaWYg
KHVwcmlnaHREYXRhLmZvbnREYXRhKQorICAgICAgICBpZiAodXByaWdodERhdGEuZm9udCkKICAg
ICAgICAgICAgIHJldHVybiB1cHJpZ2h0RGF0YTsKICAgICB9IGVsc2UgaWYgKG9yaWVudGF0aW9u
ID09IE5vbkNKS0dseXBoT3JpZW50YXRpb25WZXJ0aWNhbFJpZ2h0KSB7Ci0gICAgICAgIEdseXBo
RGF0YSB2ZXJ0aWNhbFJpZ2h0RGF0YSA9IGRhdGEuZm9udERhdGEtPnZlcnRpY2FsUmlnaHRPcmll
bnRhdGlvbkZvbnREYXRhKCktPmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIpOworICAg
ICAgICBHbHlwaERhdGEgdmVydGljYWxSaWdodERhdGEgPSBkYXRhLmZvbnQtPnZlcnRpY2FsUmln
aHRPcmllbnRhdGlvbkZvbnQoKS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3Rlcik7CiAg
ICAgICAgIC8vIElmIHRoZSBnbHlwaHMgYXJlIGRpc3RpbmN0LCB3ZSB3aWxsIG1ha2UgdGhlIGFz
c3VtcHRpb24gdGhhdCB0aGUgZm9udCBoYXMgYSB2ZXJ0aWNhbC1yaWdodCBnbHlwaCBiYWtlZAog
ICAgICAgICAvLyBpbnRvIGl0LgogICAgICAgICBpZiAoZGF0YS5nbHlwaCAhPSB2ZXJ0aWNhbFJp
Z2h0RGF0YS5nbHlwaCkKICAgICAgICAgICAgIHJldHVybiBkYXRhOwogICAgICAgICAvLyBUaGUg
Z2x5cGhzIGFyZSBpZGVudGljYWwsIG1lYW5pbmcgdGhhdCB3ZSBzaG91bGQganVzdCB1c2UgdGhl
IGhvcml6b250YWwgZ2x5cGguCi0gICAgICAgIGlmICh2ZXJ0aWNhbFJpZ2h0RGF0YS5mb250RGF0
YSkKKyAgICAgICAgaWYgKHZlcnRpY2FsUmlnaHREYXRhLmZvbnQpCiAgICAgICAgICAgICByZXR1
cm4gdmVydGljYWxSaWdodERhdGE7CiAgICAgfQogICAgIHJldHVybiBkYXRhOwogfQogCi1HbHlw
aERhdGEgRm9udEdseXBoczo6Z2x5cGhEYXRhRm9yU3lzdGVtRmFsbGJhY2soVUNoYXIzMiBjLCBj
b25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250RGF0YVZhcmlhbnQgdmFyaWFu
dCkKK0dseXBoRGF0YSBGb250R2x5cGhzOjpnbHlwaERhdGFGb3JTeXN0ZW1GYWxsYmFjayhVQ2hh
cjMyIGMsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIEZvbnRWYXJpYW50IHZh
cmlhbnQpCiB7CiAgICAgLy8gU3lzdGVtIGZhbGxiYWNrIGlzIGNoYXJhY3Rlci1kZXBlbmRlbnQu
CiAgICAgYXV0byYgcHJpbWFyeVJhbmdlcyA9IHJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGRlc2Ny
aXB0aW9uLCAwKTsKLSAgICBhdXRvKiBvcmlnaW5hbEZvbnREYXRhID0gcHJpbWFyeVJhbmdlcy5m
b250RGF0YUZvckNoYXJhY3RlcihjKTsKLSAgICBpZiAoIW9yaWdpbmFsRm9udERhdGEpCi0gICAg
ICAgIG9yaWdpbmFsRm9udERhdGEgPSAmcHJpbWFyeVJhbmdlcy5mb250RGF0YUZvckZpcnN0UmFu
Z2UoKTsKKyAgICBhdXRvKiBvcmlnaW5hbEZvbnQgPSBwcmltYXJ5UmFuZ2VzLmZvbnRGb3JDaGFy
YWN0ZXIoYyk7CisgICAgaWYgKCFvcmlnaW5hbEZvbnQpCisgICAgICAgIG9yaWdpbmFsRm9udCA9
ICZwcmltYXJ5UmFuZ2VzLmZvbnRGb3JGaXJzdFJhbmdlKCk7CiAKLSAgICBSZWZQdHI8U2ltcGxl
Rm9udERhdGE+IHN5c3RlbUZhbGxiYWNrRm9udERhdGEgPSBvcmlnaW5hbEZvbnREYXRhLT5zeXN0
ZW1GYWxsYmFja0ZvbnREYXRhRm9yQ2hhcmFjdGVyKGMsIGRlc2NyaXB0aW9uLCBtX2lzRm9yUGxh
dGZvcm1Gb250KTsKLSAgICBpZiAoIXN5c3RlbUZhbGxiYWNrRm9udERhdGEpCisgICAgUmVmUHRy
PEZvbnQ+IHN5c3RlbUZhbGxiYWNrRm9udCA9IG9yaWdpbmFsRm9udC0+c3lzdGVtRmFsbGJhY2tG
b250Rm9yQ2hhcmFjdGVyKGMsIGRlc2NyaXB0aW9uLCBtX2lzRm9yUGxhdGZvcm1Gb250KTsKKyAg
ICBpZiAoIXN5c3RlbUZhbGxiYWNrRm9udCkKICAgICAgICAgcmV0dXJuIEdseXBoRGF0YSgpOwog
Ci0gICAgaWYgKHN5c3RlbUZhbGxiYWNrRm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0
aW9uKCkgPT0gVmVydGljYWwgJiYgIXN5c3RlbUZhbGxiYWNrRm9udERhdGEtPmhhc1ZlcnRpY2Fs
R2x5cGhzKCkgJiYgRm9udENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woYykpCisgICAg
aWYgKHN5c3RlbUZhbGxiYWNrRm9udC0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBW
ZXJ0aWNhbCAmJiAhc3lzdGVtRmFsbGJhY2tGb250LT5oYXNWZXJ0aWNhbEdseXBocygpICYmIEZv
bnRDYXNjYWRlOjppc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGMpKQogICAgICAgICB2YXJpYW50ID0g
QnJva2VuSWRlb2dyYXBoVmFyaWFudDsKIAogICAgIEdseXBoRGF0YSBmYWxsYmFja0dseXBoRGF0
YTsKICAgICBpZiAodmFyaWFudCA9PSBOb3JtYWxWYXJpYW50KQotICAgICAgICBmYWxsYmFja0ds
eXBoRGF0YSA9IHN5c3RlbUZhbGxiYWNrRm9udERhdGEtPmdseXBoRGF0YUZvckNoYXJhY3Rlcihj
KTsKKyAgICAgICAgZmFsbGJhY2tHbHlwaERhdGEgPSBzeXN0ZW1GYWxsYmFja0ZvbnQtPmdseXBo
RGF0YUZvckNoYXJhY3RlcihjKTsKICAgICBlbHNlCi0gICAgICAgIGZhbGxiYWNrR2x5cGhEYXRh
ID0gc3lzdGVtRmFsbGJhY2tGb250RGF0YS0+dmFyaWFudEZvbnREYXRhKGRlc2NyaXB0aW9uLCB2
YXJpYW50KS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMpOworICAgICAgICBmYWxsYmFja0dseXBo
RGF0YSA9IHN5c3RlbUZhbGxiYWNrRm9udC0+dmFyaWFudEZvbnQoZGVzY3JpcHRpb24sIHZhcmlh
bnQpLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYyk7CiAKLSAgICBpZiAodmFyaWFudCA9PSBOb3Jt
YWxWYXJpYW50ICYmIGZhbGxiYWNrR2x5cGhEYXRhLmZvbnREYXRhKSB7Ci0gICAgICAgIGlmICgh
Rm9udENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woYykgJiYgZmFsbGJhY2tHbHlwaERh
dGEuZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwgJiYg
IWZhbGxiYWNrR2x5cGhEYXRhLmZvbnREYXRhLT5pc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKCkp
CisgICAgaWYgKHZhcmlhbnQgPT0gTm9ybWFsVmFyaWFudCAmJiBmYWxsYmFja0dseXBoRGF0YS5m
b250KSB7CisgICAgICAgIGlmICghRm9udENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2wo
YykgJiYgZmFsbGJhY2tHbHlwaERhdGEuZm9udC0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24o
KSA9PSBWZXJ0aWNhbCAmJiAhZmFsbGJhY2tHbHlwaERhdGEuZm9udC0+aXNUZXh0T3JpZW50YXRp
b25GYWxsYmFjaygpKQogICAgICAgICAgICAgZmFsbGJhY2tHbHlwaERhdGEgPSBnbHlwaERhdGFG
b3JOb25DSktDaGFyYWN0ZXJXaXRoR2x5cGhPcmllbnRhdGlvbihjLCBkZXNjcmlwdGlvbi5ub25D
SktHbHlwaE9yaWVudGF0aW9uKCksIGZhbGxiYWNrR2x5cGhEYXRhKTsKICAgICB9CiAKICAgICAv
LyBLZWVwIHRoZSBzeXN0ZW0gZmFsbGJhY2sgZm9udHMgd2UgdXNlIGFsaXZlLgogICAgIGlmIChm
YWxsYmFja0dseXBoRGF0YS5nbHlwaCkKLSAgICAgICAgbV9zeXN0ZW1GYWxsYmFja0ZvbnREYXRh
U2V0LmFkZChzeXN0ZW1GYWxsYmFja0ZvbnREYXRhLnJlbGVhc2UoKSk7CisgICAgICAgIG1fc3lz
dGVtRmFsbGJhY2tGb250U2V0LmFkZChzeXN0ZW1GYWxsYmFja0ZvbnQucmVsZWFzZSgpKTsKIAog
ICAgIHJldHVybiBmYWxsYmFja0dseXBoRGF0YTsKIH0KIAotR2x5cGhEYXRhIEZvbnRHbHlwaHM6
OmdseXBoRGF0YUZvclZhcmlhbnQoVUNoYXIzMiBjLCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRl
c2NyaXB0aW9uLCBGb250RGF0YVZhcmlhbnQgdmFyaWFudCwgdW5zaWduZWQgZmFsbGJhY2tJbmRl
eCkKK0dseXBoRGF0YSBGb250R2x5cGhzOjpnbHlwaERhdGFGb3JWYXJpYW50KFVDaGFyMzIgYywg
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udFZhcmlhbnQgdmFyaWFudCwg
dW5zaWduZWQgZmFsbGJhY2tJbmRleCkKIHsKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICBh
dXRvJiBmb250UmFuZ2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIGZh
bGxiYWNrSW5kZXgrKyk7CiAgICAgICAgIGlmIChmb250UmFuZ2VzLmlzTnVsbCgpKQogICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGF1dG8qIGZvbnREYXRhID0gZm9udFJhbmdlcy5mb250RGF0
YUZvckNoYXJhY3RlcihjKTsKLSAgICAgICAgR2x5cGhEYXRhIGRhdGEgPSBmb250RGF0YSA/IGZv
bnREYXRhLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYykgOiBHbHlwaERhdGEoKTsKLSAgICAgICAg
aWYgKGRhdGEuZm9udERhdGEpIHsKLSAgICAgICAgICAgIC8vIFRoZSB2YXJpYW50Rm9udERhdGEg
ZnVuY3Rpb24gc2hvdWxkIG5vdCBub3JtYWxseSByZXR1cm4gMC4KKyAgICAgICAgYXV0byogZm9u
dCA9IGZvbnRSYW5nZXMuZm9udEZvckNoYXJhY3RlcihjKTsKKyAgICAgICAgR2x5cGhEYXRhIGRh
dGEgPSBmb250ID8gZm9udC0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMpIDogR2x5cGhEYXRhKCk7
CisgICAgICAgIGlmIChkYXRhLmZvbnQpIHsKKyAgICAgICAgICAgIC8vIFRoZSB2YXJpYW50Rm9u
dCBmdW5jdGlvbiBzaG91bGQgbm90IG5vcm1hbGx5IHJldHVybiAwLgogICAgICAgICAgICAgLy8g
QnV0IGlmIGl0IGRvZXMsIHdlIHdpbGwganVzdCByZW5kZXIgdGhlIGNhcGl0YWwgbGV0dGVyIGJp
Zy4KLSAgICAgICAgICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gdmFyaWFudEZvbnREYXRhID0g
ZGF0YS5mb250RGF0YS0+dmFyaWFudEZvbnREYXRhKGRlc2NyaXB0aW9uLCB2YXJpYW50KTsKLSAg
ICAgICAgICAgIGlmICghdmFyaWFudEZvbnREYXRhKQorICAgICAgICAgICAgUmVmUHRyPEZvbnQ+
IHZhcmlhbnRGb250ID0gZGF0YS5mb250LT52YXJpYW50Rm9udChkZXNjcmlwdGlvbiwgdmFyaWFu
dCk7CisgICAgICAgICAgICBpZiAoIXZhcmlhbnRGb250KQogICAgICAgICAgICAgICAgIHJldHVy
biBkYXRhOwogCi0gICAgICAgICAgICByZXR1cm4gdmFyaWFudEZvbnREYXRhLT5nbHlwaERhdGFG
b3JDaGFyYWN0ZXIoYyk7CisgICAgICAgICAgICByZXR1cm4gdmFyaWFudEZvbnQtPmdseXBoRGF0
YUZvckNoYXJhY3RlcihjKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzE1LDIzICszMTUsMjMg
QEAgR2x5cGhEYXRhIEZvbnRHbHlwaHM6OmdseXBoRGF0YUZvck5vcm1hbAogICAgICAgICBhdXRv
JiBmb250UmFuZ2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIGZhbGxi
YWNrSW5kZXgpOwogICAgICAgICBpZiAoZm9udFJhbmdlcy5pc051bGwoKSkKICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBhdXRvKiBzaW1wbGVGb250RGF0YSA9IGZvbnRSYW5nZXMuZm9udERh
dGFGb3JDaGFyYWN0ZXIoYyk7Ci0gICAgICAgIGF1dG8qIHBhZ2UgPSBzaW1wbGVGb250RGF0YSA/
IHNpbXBsZUZvbnREYXRhLT5nbHlwaFBhZ2UocGFnZU51bWJlcikgOiBudWxscHRyOworICAgICAg
ICBhdXRvKiBmb250ID0gZm9udFJhbmdlcy5mb250Rm9yQ2hhcmFjdGVyKGMpOworICAgICAgICBh
dXRvKiBwYWdlID0gZm9udCA/IGZvbnQtPmdseXBoUGFnZShwYWdlTnVtYmVyKSA6IG51bGxwdHI7
CiAgICAgICAgIGlmICghcGFnZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBHbHlw
aERhdGEgZGF0YSA9IHBhZ2UtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjKTsKLSAgICAgICAgaWYg
KGRhdGEuZm9udERhdGEpIHsKLSAgICAgICAgICAgIGlmIChkYXRhLmZvbnREYXRhLT5wbGF0Zm9y
bURhdGEoKS5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsICYmICFkYXRhLmZvbnREYXRhLT5pc1Rl
eHRPcmllbnRhdGlvbkZhbGxiYWNrKCkpIHsKKyAgICAgICAgaWYgKGRhdGEuZm9udCkgeworICAg
ICAgICAgICAgaWYgKGRhdGEuZm9udC0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBW
ZXJ0aWNhbCAmJiAhZGF0YS5mb250LT5pc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKCkpIHsKICAg
ICAgICAgICAgICAgICBpZiAoIUZvbnRDYXNjYWRlOjppc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGMp
KQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2x5cGhEYXRhRm9yTm9uQ0pLQ2hhcmFjdGVy
V2l0aEdseXBoT3JpZW50YXRpb24oYywgZGVzY3JpcHRpb24ubm9uQ0pLR2x5cGhPcmllbnRhdGlv
bigpLCBkYXRhKTsKIAotICAgICAgICAgICAgICAgIGlmICghZGF0YS5mb250RGF0YS0+aGFzVmVy
dGljYWxHbHlwaHMoKSkgeworICAgICAgICAgICAgICAgIGlmICghZGF0YS5mb250LT5oYXNWZXJ0
aWNhbEdseXBocygpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFVzZSB0aGUgYnJva2VuIGlk
ZW9ncmFwaCBmb250IGRhdGEuIFRoZSBicm9rZW4gaWRlb2dyYXBoIGZvbnQgd2lsbCB1c2UgdGhl
IGhvcml6b250YWwgd2lkdGggb2YgZ2x5cGhzCiAgICAgICAgICAgICAgICAgICAgIC8vIHRvIG1h
a2Ugc3VyZSB5b3UgZ2V0IGEgc3F1YXJlIChldmVuIGZvciBicm9rZW4gZ2x5cGhzIGxpa2Ugc3lt
Ym9scyB1c2VkIGZvciBwdW5jdHVhdGlvbikuCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBn
bHlwaERhdGFGb3JWYXJpYW50KGMsIGRlc2NyaXB0aW9uLCBCcm9rZW5JZGVvZ3JhcGhWYXJpYW50
LCBmYWxsYmFja0luZGV4KTsKICAgICAgICAgICAgICAgICB9CiAjaWYgUExBVEZPUk0oQ09DT0Ep
Ci0gICAgICAgICAgICAgICAgaWYgKGRhdGEuZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLnN5bnRo
ZXRpY09ibGlxdWUoKSkKKyAgICAgICAgICAgICAgICBpZiAoZGF0YS5mb250LT5wbGF0Zm9ybURh
dGEoKS5zeW50aGV0aWNPYmxpcXVlKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbHlw
aERhdGFGb3JDSktDaGFyYWN0ZXJXaXRob3V0U3ludGhldGljSXRhbGljKGMsIGRhdGEpOwogI2Vu
ZGlmCiAgICAgICAgICAgICB9CkBAIC0zNDUsMjcgKzM0NSwyNyBAQCBHbHlwaERhdGEgRm9udEds
eXBoczo6Z2x5cGhEYXRhRm9yTm9ybWFsCiAKIHN0YXRpYyBSZWZQdHI8R2x5cGhQYWdlPiBnbHlw
aFBhZ2VGcm9tRm9udFJhbmdlcyh1bnNpZ25lZCBwYWdlTnVtYmVyLCBjb25zdCBGb250UmFuZ2Vz
JiBmb250UmFuZ2VzKQogewotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBzaW1wbGVGb250RGF0
YSA9IG51bGxwdHI7CisgICAgY29uc3QgRm9udCogZm9udCA9IG51bGxwdHI7CiAgICAgVUNoYXIz
MiBwYWdlUmFuZ2VGcm9tID0gcGFnZU51bWJlciAqIEdseXBoUGFnZTo6c2l6ZTsKICAgICBVQ2hh
cjMyIHBhZ2VSYW5nZVRvID0gcGFnZVJhbmdlRnJvbSArIEdseXBoUGFnZTo6c2l6ZSAtIDE7CiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZvbnRSYW5nZXMuc2l6ZSgpOyArK2kpIHsKICAg
ICAgICAgYXV0byYgcmFuZ2UgPSBmb250UmFuZ2VzLnJhbmdlQXQoaSk7CiAgICAgICAgIGlmIChy
YW5nZS50bygpKSB7CiAgICAgICAgICAgICBpZiAocmFuZ2UuZnJvbSgpIDw9IHBhZ2VSYW5nZUZy
b20gJiYgcGFnZVJhbmdlVG8gPD0gcmFuZ2UudG8oKSkKLSAgICAgICAgICAgICAgICBzaW1wbGVG
b250RGF0YSA9ICZyYW5nZS5mb250RGF0YSgpOworICAgICAgICAgICAgICAgIGZvbnQgPSAmcmFu
Z2UuZm9udCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYg
KCFzaW1wbGVGb250RGF0YSkKKyAgICBpZiAoIWZvbnQpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogCi0gICAgaWYgKHNpbXBsZUZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigp
ID09IFZlcnRpY2FsKQorICAgIGlmIChmb250LT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigp
ID09IFZlcnRpY2FsKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBjb25z
dF9jYXN0PEdseXBoUGFnZSo+KHNpbXBsZUZvbnREYXRhLT5nbHlwaFBhZ2UocGFnZU51bWJlcikp
OworICAgIHJldHVybiBjb25zdF9jYXN0PEdseXBoUGFnZSo+KGZvbnQtPmdseXBoUGFnZShwYWdl
TnVtYmVyKSk7CiB9CiAKLUdseXBoRGF0YSBGb250R2x5cGhzOjpnbHlwaERhdGFGb3JDaGFyYWN0
ZXIoVUNoYXIzMiBjLCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250RGF0
YVZhcmlhbnQgdmFyaWFudCkKK0dseXBoRGF0YSBGb250R2x5cGhzOjpnbHlwaERhdGFGb3JDaGFy
YWN0ZXIoVUNoYXIzMiBjLCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250
VmFyaWFudCB2YXJpYW50KQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgQVNT
RVJUKHZhcmlhbnQgIT0gQXV0b1ZhcmlhbnQpOwpAQCAtMzgyLDE5ICszODIsMTkgQEAgR2x5cGhE
YXRhIEZvbnRHbHlwaHM6OmdseXBoRGF0YUZvckNoYXJhYwogICAgIEdseXBoRGF0YSBnbHlwaERh
dGEgPSBjYWNoZWRQYWdlID8gY2FjaGVkUGFnZS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMpIDog
R2x5cGhEYXRhKCk7CiAgICAgaWYgKCFnbHlwaERhdGEuZ2x5cGgpIHsKICAgICAgICAgaWYgKCFj
YWNoZWRQYWdlKQotICAgICAgICAgICAgY2FjaGVkUGFnZSA9IEdseXBoUGFnZTo6Y3JlYXRlRm9y
TWl4ZWRGb250RGF0YSgpOworICAgICAgICAgICAgY2FjaGVkUGFnZSA9IEdseXBoUGFnZTo6Y3Jl
YXRlRm9yTWl4ZWRGb250cygpOwogICAgICAgICBlbHNlIGlmIChjYWNoZWRQYWdlLT5pc0ltbXV0
YWJsZSgpKQotICAgICAgICAgICAgY2FjaGVkUGFnZSA9IEdseXBoUGFnZTo6Y3JlYXRlQ29weUZv
ck1peGVkRm9udERhdGEoKmNhY2hlZFBhZ2UpOworICAgICAgICAgICAgY2FjaGVkUGFnZSA9IEds
eXBoUGFnZTo6Y3JlYXRlQ29weUZvck1peGVkRm9udHMoKmNhY2hlZFBhZ2UpOwogCiAgICAgICAg
IGdseXBoRGF0YSA9IGdseXBoRGF0YUZvck5vcm1hbFZhcmlhbnQoYywgZGVzY3JpcHRpb24pOwot
ICAgICAgICBjYWNoZWRQYWdlLT5zZXRHbHlwaERhdGFGb3JDaGFyYWN0ZXIoYywgZ2x5cGhEYXRh
LmdseXBoLCBnbHlwaERhdGEuZm9udERhdGEpOworICAgICAgICBjYWNoZWRQYWdlLT5zZXRHbHlw
aERhdGFGb3JDaGFyYWN0ZXIoYywgZ2x5cGhEYXRhLmdseXBoLCBnbHlwaERhdGEuZm9udCk7CiAg
ICAgfQogICAgIHJldHVybiBnbHlwaERhdGE7CiB9CiAKIHZvaWQgRm9udEdseXBoczo6cHJ1bmVT
eXN0ZW1GYWxsYmFja3MoKQogewotICAgIGlmIChtX3N5c3RlbUZhbGxiYWNrRm9udERhdGFTZXQu
aXNFbXB0eSgpKQorICAgIGlmIChtX3N5c3RlbUZhbGxiYWNrRm9udFNldC5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybjsKICAgICAvLyBNdXRhYmxlIGdseXBoIHBhZ2VzIG1heSByZWZlcmVuY2Ug
ZmFsbGJhY2sgZm9udHMuCiAgICAgaWYgKG1fY2FjaGVkUGFnZVplcm8gJiYgIW1fY2FjaGVkUGFn
ZVplcm8tPmlzSW1tdXRhYmxlKCkpCkBAIC00MDIsNyArNDAyLDcgQEAgdm9pZCBGb250R2x5cGhz
OjpwcnVuZVN5c3RlbUZhbGxiYWNrcygpCiAgICAgbV9jYWNoZWRQYWdlcy5yZW1vdmVJZihbXShk
ZWNsdHlwZShtX2NhY2hlZFBhZ2VzKTo6S2V5VmFsdWVQYWlyVHlwZSYga2V5QW5kVmFsdWUpIHsK
ICAgICAgICAgcmV0dXJuICFrZXlBbmRWYWx1ZS52YWx1ZS0+aXNJbW11dGFibGUoKTsKICAgICB9
KTsKLSAgICBtX3N5c3RlbUZhbGxiYWNrRm9udERhdGFTZXQuY2xlYXIoKTsKKyAgICBtX3N5c3Rl
bUZhbGxiYWNrRm9udFNldC5jbGVhcigpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250R2x5cGhzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEdseXBocy5oCShyZXZpc2lvbiAxNzg4NTcpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250R2x5cGhzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIxLDEwICsyMSwxMCBAQAogI2lmbmRlZiBGb250R2x5cGhzX2gKICNkZWZpbmUgRm9u
dEdseXBoc19oCiAKKyNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9udFJhbmdlcy5oIgog
I2luY2x1ZGUgIkZvbnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkdseXBoUGFnZS5oIgotI2luY2x1
ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5jbHVkZSAiV2lkdGhDYWNoZS5oIgogI2luY2x1ZGUg
PHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KQEAgLTUxLDcgKzUx
LDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc0ZvclBsYXRmb3JtRm9udCgpIGNvbnN0IHsgcmV0
dXJuIG1faXNGb3JQbGF0Zm9ybUZvbnQ7IH0KIAotICAgIEdseXBoRGF0YSBnbHlwaERhdGFGb3JD
aGFyYWN0ZXIoVUNoYXIzMiwgY29uc3QgRm9udERlc2NyaXB0aW9uJiwgRm9udERhdGFWYXJpYW50
KTsKKyAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIsIGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYsIEZvbnRWYXJpYW50KTsKIAogICAgIGJvb2wgaXNGaXhlZFBpdGNoKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYpOwogICAgIHZvaWQgZGV0ZXJtaW5lUGl0Y2goY29uc3QgRm9u
dERlc2NyaXB0aW9uJik7CkBAIC02Niw3ICs2Niw3IEBAIHB1YmxpYzoKICAgICBXaWR0aENhY2hl
JiB3aWR0aENhY2hlKCkgeyByZXR1cm4gbV93aWR0aENhY2hlOyB9CiAgICAgY29uc3QgV2lkdGhD
YWNoZSYgd2lkdGhDYWNoZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGhDYWNoZTsgfQogCi0gICAg
Y29uc3QgU2ltcGxlRm9udERhdGEmIHByaW1hcnlTaW1wbGVGb250RGF0YShjb25zdCBGb250RGVz
Y3JpcHRpb24mKTsKKyAgICBjb25zdCBGb250JiBwcmltYXJ5Rm9udChjb25zdCBGb250RGVzY3Jp
cHRpb24mKTsKICAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBGb250UmFuZ2VzJiByZWFsaXplRmFs
bGJhY2tSYW5nZXNBdChjb25zdCBGb250RGVzY3JpcHRpb24mLCB1bnNpZ25lZCBmYWxsYmFja0lu
ZGV4KTsKIAogICAgIHZvaWQgcHJ1bmVTeXN0ZW1GYWxsYmFja3MoKTsKQEAgLTc1LDkgKzc1LDkg
QEAgcHJpdmF0ZToKICAgICBGb250R2x5cGhzKFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPik7CiAg
ICAgRm9udEdseXBocyhjb25zdCBGb250UGxhdGZvcm1EYXRhJik7CiAKLSAgICBHbHlwaERhdGEg
Z2x5cGhEYXRhRm9yU3lzdGVtRmFsbGJhY2soVUNoYXIzMiwgY29uc3QgRm9udERlc2NyaXB0aW9u
JiwgRm9udERhdGFWYXJpYW50KTsKKyAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yU3lzdGVtRmFs
bGJhY2soVUNoYXIzMiwgY29uc3QgRm9udERlc2NyaXB0aW9uJiwgRm9udFZhcmlhbnQpOwogICAg
IEdseXBoRGF0YSBnbHlwaERhdGFGb3JOb3JtYWxWYXJpYW50KFVDaGFyMzIsIGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYpOwotICAgIEdseXBoRGF0YSBnbHlwaERhdGFGb3JWYXJpYW50KFVDaGFyMzIs
IGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIEZvbnREYXRhVmFyaWFudCwgdW5zaWduZWQgZmFsbGJh
Y2tJbmRleCk7CisgICAgR2x5cGhEYXRhIGdseXBoRGF0YUZvclZhcmlhbnQoVUNoYXIzMiwgY29u
c3QgRm9udERlc2NyaXB0aW9uJiwgRm9udFZhcmlhbnQsIHVuc2lnbmVkIGZhbGxiYWNrSW5kZXgp
OwogCiAgICAgVmVjdG9yPEZvbnRSYW5nZXMsIDE+IG1fcmVhbGl6ZWRGYWxsYmFja1JhbmdlczsK
ICAgICB1bnNpZ25lZCBtX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXggeyAwIH07CkBAIC04NSw5
ICs4NSw5IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPEdseXBoUGFnZT4gbV9jYWNoZWRQYWdlWmVy
bzsKICAgICBIYXNoTWFwPGludCwgUmVmUHRyPEdseXBoUGFnZT4+IG1fY2FjaGVkUGFnZXM7CiAK
LSAgICBIYXNoU2V0PFJlZlB0cjxTaW1wbGVGb250RGF0YT4+IG1fc3lzdGVtRmFsbGJhY2tGb250
RGF0YVNldDsKKyAgICBIYXNoU2V0PFJlZlB0cjxGb250Pj4gbV9zeXN0ZW1GYWxsYmFja0ZvbnRT
ZXQ7CiAKLSAgICBjb25zdCBTaW1wbGVGb250RGF0YSogbV9jYWNoZWRQcmltYXJ5U2ltcGxlRm9u
dERhdGE7CisgICAgY29uc3QgRm9udCogbV9jYWNoZWRQcmltYXJ5Rm9udDsKICAgICBSZWZQdHI8
Rm9udFNlbGVjdG9yPiBtX2ZvbnRTZWxlY3RvcjsKIAogICAgIFdpZHRoQ2FjaGUgbV93aWR0aENh
Y2hlOwpAQCAtMTA1LDE2ICsxMDUsMTYgQEAgaW5saW5lIGJvb2wgRm9udEdseXBoczo6aXNGaXhl
ZFBpdGNoKGNvbgogICAgIHJldHVybiBtX3BpdGNoID09IEZpeGVkUGl0Y2g7CiB9OwogCi1pbmxp
bmUgY29uc3QgU2ltcGxlRm9udERhdGEmIEZvbnRHbHlwaHM6OnByaW1hcnlTaW1wbGVGb250RGF0
YShjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQoraW5saW5lIGNvbnN0IEZvbnQm
IEZvbnRHbHlwaHM6OnByaW1hcnlGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRp
b24pCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBpZiAoIW1fY2FjaGVkUHJp
bWFyeVNpbXBsZUZvbnREYXRhKSB7CisgICAgaWYgKCFtX2NhY2hlZFByaW1hcnlGb250KSB7CiAg
ICAgICAgIGF1dG8mIHByaW1hcnlSYW5nZXMgPSByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChkZXNj
cmlwdGlvbiwgMCk7Ci0gICAgICAgIG1fY2FjaGVkUHJpbWFyeVNpbXBsZUZvbnREYXRhID0gcHJp
bWFyeVJhbmdlcy5mb250RGF0YUZvckNoYXJhY3RlcignICcpOwotICAgICAgICBpZiAoIW1fY2Fj
aGVkUHJpbWFyeVNpbXBsZUZvbnREYXRhKQotICAgICAgICAgICAgbV9jYWNoZWRQcmltYXJ5U2lt
cGxlRm9udERhdGEgPSAmcHJpbWFyeVJhbmdlcy5mb250RGF0YUZvckZpcnN0UmFuZ2UoKTsKKyAg
ICAgICAgbV9jYWNoZWRQcmltYXJ5Rm9udCA9IHByaW1hcnlSYW5nZXMuZm9udEZvckNoYXJhY3Rl
cignICcpOworICAgICAgICBpZiAoIW1fY2FjaGVkUHJpbWFyeUZvbnQpCisgICAgICAgICAgICBt
X2NhY2hlZFByaW1hcnlGb250ID0gJnByaW1hcnlSYW5nZXMuZm9udEZvckZpcnN0UmFuZ2UoKTsK
ICAgICB9Ci0gICAgcmV0dXJuICptX2NhY2hlZFByaW1hcnlTaW1wbGVGb250RGF0YTsKKyAgICBy
ZXR1cm4gKm1fY2FjaGVkUHJpbWFyeUZvbnQ7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRNZXRyaWNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udE1ldHJpY3MuaAkocmV2aXNpb24gMTc4ODU3KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udE1ldHJpY3MuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTMzLDcgKzEzMyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEhhc1plcm9X
aWR0aChib29sIGhhc1plcm9XaWR0aCkgeyBtX2hhc1plcm9XaWR0aCA9IGhhc1plcm9XaWR0aDsg
fQogCiBwcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBTaW1wbGVGb250RGF0YTsKKyAgICBmcmll
bmQgY2xhc3MgRm9udDsKIAogICAgIHZvaWQgcmVzZXQoKQogICAgIHsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRSYW5nZXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRSYW5nZXMuY3BwCShyZXZpc2lvbiAx
Nzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UmFuZ2VzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkZvbnRSYW5nZXMuaCIKIAotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisj
aW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTM2LDM0ICszNiwzNCBAQCBGb250UmFuZ2VzOjpG
b250UmFuZ2VzKCkKIHsKIH0KIAotRm9udFJhbmdlczo6Rm9udFJhbmdlcyhSZWZQdHI8U2ltcGxl
Rm9udERhdGE+JiYgZm9udERhdGEpCitGb250UmFuZ2VzOjpGb250UmFuZ2VzKFJlZlB0cjxGb250
PiYmIGZvbnQpCiB7Ci0gICAgaWYgKGZvbnREYXRhKQotICAgICAgICBtX3Jhbmdlcy5hcHBlbmQo
UmFuZ2UgeyAwLCAweDdGRkZGRkZGLCBmb250RGF0YS5yZWxlYXNlTm9uTnVsbCgpIH0pOworICAg
IGlmIChmb250KQorICAgICAgICBtX3Jhbmdlcy5hcHBlbmQoUmFuZ2UgeyAwLCAweDdGRkZGRkZG
LCBmb250LnJlbGVhc2VOb25OdWxsKCkgfSk7CiB9CiAKIEZvbnRSYW5nZXM6On5Gb250UmFuZ2Vz
KCkKIHsKIH0KIAotY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRSYW5nZXM6OmZvbnREYXRhRm9y
Q2hhcmFjdGVyKFVDaGFyMzIgYykgY29uc3QKK2NvbnN0IEZvbnQqIEZvbnRSYW5nZXM6OmZvbnRG
b3JDaGFyYWN0ZXIoVUNoYXIzMiBjKSBjb25zdAogewogICAgIGZvciAoYXV0byYgcmFuZ2UgOiBt
X3JhbmdlcykgewogICAgICAgICBpZiAocmFuZ2UuZnJvbSgpIDw9IGMgJiYgYyA8PSByYW5nZS50
bygpKQotICAgICAgICAgICAgcmV0dXJuICZyYW5nZS5mb250RGF0YSgpOworICAgICAgICAgICAg
cmV0dXJuICZyYW5nZS5mb250KCk7CiAgICAgfQogICAgIHJldHVybiBudWxscHRyOwogfQogCi1j
b25zdCBTaW1wbGVGb250RGF0YSYgRm9udFJhbmdlczo6Zm9udERhdGFGb3JGaXJzdFJhbmdlKCkg
Y29uc3QKK2NvbnN0IEZvbnQmIEZvbnRSYW5nZXM6OmZvbnRGb3JGaXJzdFJhbmdlKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gbV9yYW5nZXNbMF0uZm9udERhdGEoKTsKKyAgICByZXR1cm4gbV9yYW5n
ZXNbMF0uZm9udCgpOwogfQogCiBib29sIEZvbnRSYW5nZXM6OmlzTG9hZGluZygpIGNvbnN0CiB7
CiAgICAgZm9yIChhdXRvJiByYW5nZSA6IG1fcmFuZ2VzKSB7Ci0gICAgICAgIGlmIChyYW5nZS5m
b250RGF0YSgpLmlzTG9hZGluZygpKQorICAgICAgICBpZiAocmFuZ2UuZm9udCgpLmlzTG9hZGlu
ZygpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRSYW5nZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UmFuZ2VzLmgJ
KHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRSYW5nZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBGb250
UmFuZ2VzX2gKICNkZWZpbmUgRm9udFJhbmdlc19oCiAKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0
YS5oIgorI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC0zNSwyNSArMzUsMjUgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogY2xhc3MgRm9udFJhbmdlcyB7CiBwdWJsaWM6CiAgICAgc3RydWN0IFJhbmdlIHsKLSAg
ICAgICAgUmFuZ2UoVUNoYXIzMiBmcm9tLCBVQ2hhcjMyIHRvLCBSZWY8U2ltcGxlRm9udERhdGE+
JiYgZm9udERhdGEpCisgICAgICAgIFJhbmdlKFVDaGFyMzIgZnJvbSwgVUNoYXIzMiB0bywgUmVm
PEZvbnQ+JiYgZm9udCkKICAgICAgICAgICAgIDogbV9mcm9tKGZyb20pCiAgICAgICAgICAgICAs
IG1fdG8odG8pCi0gICAgICAgICAgICAsIG1fZm9udERhdGEoV1RGOjptb3ZlKGZvbnREYXRhKSkK
KyAgICAgICAgICAgICwgbV9mb250KFdURjo6bW92ZShmb250KSkKICAgICAgICAgewogICAgICAg
ICB9CiAKICAgICAgICAgVUNoYXIzMiBmcm9tKCkgY29uc3QgeyByZXR1cm4gbV9mcm9tOyB9CiAg
ICAgICAgIFVDaGFyMzIgdG8oKSBjb25zdCB7IHJldHVybiBtX3RvOyB9Ci0gICAgICAgIGNvbnN0
IFNpbXBsZUZvbnREYXRhJiBmb250RGF0YSgpIGNvbnN0IHsgcmV0dXJuICptX2ZvbnREYXRhOyB9
CisgICAgICAgIGNvbnN0IEZvbnQmIGZvbnQoKSBjb25zdCB7IHJldHVybiAqbV9mb250OyB9CiAK
ICAgICBwcml2YXRlOgogICAgICAgICBVQ2hhcjMyIG1fZnJvbTsKICAgICAgICAgVUNoYXIzMiBt
X3RvOwotICAgICAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IG1fZm9udERhdGE7CisgICAgICAg
IFJlZlB0cjxGb250PiBtX2ZvbnQ7CiAgICAgfTsKIAogICAgIEZvbnRSYW5nZXMoKTsKLSAgICBl
eHBsaWNpdCBGb250UmFuZ2VzKFJlZlB0cjxTaW1wbGVGb250RGF0YT4mJik7CisgICAgZXhwbGlj
aXQgRm9udFJhbmdlcyhSZWZQdHI8Rm9udD4mJik7CiAgICAgfkZvbnRSYW5nZXMoKTsKIAogICAg
IGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gbV9yYW5nZXMuaXNFbXB0eSgpOyB9CkBAIC02
Miw4ICs2Miw4IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4g
bV9yYW5nZXMuc2l6ZSgpOyB9CiAgICAgY29uc3QgUmFuZ2UmIHJhbmdlQXQodW5zaWduZWQgaSkg
Y29uc3QgeyByZXR1cm4gbV9yYW5nZXNbaV07IH0KIAotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRh
KiBmb250RGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyKSBjb25zdDsKLSAgICBjb25zdCBTaW1wbGVG
b250RGF0YSYgZm9udERhdGFGb3JGaXJzdFJhbmdlKCkgY29uc3Q7CisgICAgY29uc3QgRm9udCog
Zm9udEZvckNoYXJhY3RlcihVQ2hhcjMyKSBjb25zdDsKKyAgICBjb25zdCBGb250JiBmb250Rm9y
Rmlyc3RSYW5nZSgpIGNvbnN0OwogICAgIGJvb2wgaXNMb2FkaW5nKCkgY29uc3Q7CiAKIHByaXZh
dGU6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250U2Vs
ZWN0b3IuaAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udFNlbGVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDkgKzQxLDkgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgfkZvbnRTZWxlY3RvcigpIHsgfQogCiAgICAgdmlydHVhbCBGb250
UmFuZ2VzIGZvbnRSYW5nZXNGb3JGYW1pbHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3Qg
QXRvbWljU3RyaW5nJikgPSAwOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0
YT4gZmFsbGJhY2tGb250RGF0YUF0KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIHNpemVfdCkgPSAw
OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGb250PiBmYWxsYmFja0ZvbnRBdChjb25zdCBGb250
RGVzY3JpcHRpb24mLCBzaXplX3QpID0gMDsKIAotICAgIHZpcnR1YWwgc2l6ZV90IGZhbGxiYWNr
Rm9udERhdGFDb3VudCgpID0gMDsKKyAgICB2aXJ0dWFsIHNpemVfdCBmYWxsYmFja0ZvbnRDb3Vu
dCgpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgcmVzb2x2ZXNGYW1pbHlGb3IoY29uc3QgRm9udERl
c2NyaXB0aW9uJikgY29uc3QgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkIGZvbnRDYWNoZUludmFs
aWRhdGVkKCkgeyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlw
aEJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dseXBoQnVmZmVyLmgJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dseXBoQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBTaW1wbGVGb250RGF0YTsKK2NsYXNz
IEZvbnQ7CiAKICNpZiBVU0UoQ0FJUk8pCiAvLyBGSVhNRTogV2h5IGRvZXMgQ2Fpcm8gdXNlIHN1
Y2ggYSBodWdlIHN0cnVjdCBpbnN0ZWFkIG9mIGp1c3QgYW4gb2Zmc2V0IGludG8gYW4gYXJyYXk/
CkBAIC03NiwxMiArNzYsMTIgQEAgdHlwZWRlZiBGbG9hdFNpemUgR2x5cGhCdWZmZXJBZHZhbmNl
OwogCiBjbGFzcyBHbHlwaEJ1ZmZlciB7CiBwdWJsaWM6Ci0gICAgYm9vbCBpc0VtcHR5KCkgY29u
c3QgeyByZXR1cm4gbV9mb250RGF0YS5pc0VtcHR5KCk7IH0KLSAgICBpbnQgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fZm9udERhdGEuc2l6ZSgpOyB9CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Qg
eyByZXR1cm4gbV9mb250LmlzRW1wdHkoKTsgfQorICAgIGludCBzaXplKCkgY29uc3QgeyByZXR1
cm4gbV9mb250LnNpemUoKTsgfQogICAgIAogICAgIHZvaWQgY2xlYXIoKQogICAgIHsKLSAgICAg
ICAgbV9mb250RGF0YS5jbGVhcigpOworICAgICAgICBtX2ZvbnQuY2xlYXIoKTsKICAgICAgICAg
bV9nbHlwaHMuY2xlYXIoKTsKICAgICAgICAgbV9hZHZhbmNlcy5jbGVhcigpOwogICAgICAgICBp
ZiAobV9vZmZzZXRzSW5TdHJpbmcpCkBAIC05Niw3ICs5Niw3IEBAIHB1YmxpYzoKICAgICBjb25z
dCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMoaW50IGZyb20pIGNvbnN0IHsgcmV0dXJuIG1fZ2x5
cGhzLmRhdGEoKSArIGZyb207IH0KICAgICBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFu
Y2VzKGludCBmcm9tKSBjb25zdCB7IHJldHVybiBtX2FkdmFuY2VzLmRhdGEoKSArIGZyb207IH0K
IAotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YUF0KGludCBpbmRleCkgY29uc3Qg
eyByZXR1cm4gbV9mb250RGF0YVtpbmRleF07IH0KKyAgICBjb25zdCBGb250KiBmb250QXQoaW50
IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2ZvbnRbaW5kZXhdOyB9CiAKICAgICB2b2lkIHNldElu
aXRpYWxBZHZhbmNlKEdseXBoQnVmZmVyQWR2YW5jZSBpbml0aWFsQWR2YW5jZSkgeyBtX2luaXRp
YWxBZHZhbmNlID0gaW5pdGlhbEFkdmFuY2U7IH0KICAgICBjb25zdCBHbHlwaEJ1ZmZlckFkdmFu
Y2UmIGluaXRpYWxBZHZhbmNlKCkgY29uc3QgeyByZXR1cm4gbV9pbml0aWFsQWR2YW5jZTsgfQpA
QCAtMTI2LDkgKzEyNiw5IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIG5vT2Zmc2V0ID0gVUlOVF9NQVg7Ci0gICAgdm9pZCBhZGQoR2x5cGggZ2x5cGgs
IGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LCBmbG9hdCB3aWR0aCwgdW5zaWduZWQgb2Zmc2V0
SW5TdHJpbmcgPSBub09mZnNldCwgY29uc3QgRmxvYXRTaXplKiBvZmZzZXQgPSAwKQorICAgIHZv
aWQgYWRkKEdseXBoIGdseXBoLCBjb25zdCBGb250KiBmb250LCBmbG9hdCB3aWR0aCwgdW5zaWdu
ZWQgb2Zmc2V0SW5TdHJpbmcgPSBub09mZnNldCwgY29uc3QgRmxvYXRTaXplKiBvZmZzZXQgPSAw
KQogICAgIHsKLSAgICAgICAgbV9mb250RGF0YS5hcHBlbmQoZm9udCk7CisgICAgICAgIG1fZm9u
dC5hcHBlbmQoZm9udCk7CiAKICNpZiBVU0UoQ0FJUk8pCiAgICAgICAgIGNhaXJvX2dseXBoX3Qg
Y2Fpcm9HbHlwaDsKQEAgLTE1OSw5ICsxNTksOSBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogI2lm
ICFVU0UoV0lOR0RJKQotICAgIHZvaWQgYWRkKEdseXBoIGdseXBoLCBjb25zdCBTaW1wbGVGb250
RGF0YSogZm9udCwgR2x5cGhCdWZmZXJBZHZhbmNlIGFkdmFuY2UsIHVuc2lnbmVkIG9mZnNldElu
U3RyaW5nID0gbm9PZmZzZXQpCisgICAgdm9pZCBhZGQoR2x5cGggZ2x5cGgsIGNvbnN0IEZvbnQq
IGZvbnQsIEdseXBoQnVmZmVyQWR2YW5jZSBhZHZhbmNlLCB1bnNpZ25lZCBvZmZzZXRJblN0cmlu
ZyA9IG5vT2Zmc2V0KQogICAgIHsKLSAgICAgICAgbV9mb250RGF0YS5hcHBlbmQoZm9udCk7Cisg
ICAgICAgIG1fZm9udC5hcHBlbmQoZm9udCk7CiAjaWYgVVNFKENBSVJPKQogICAgICAgICBjYWly
b19nbHlwaF90IGNhaXJvR2x5cGg7CiAgICAgICAgIGNhaXJvR2x5cGguaW5kZXggPSBnbHlwaDsK
QEAgLTIwNSw5ICsyMDUsOSBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHZvaWQgc3dhcChpbnQg
aW5kZXgxLCBpbnQgaW5kZXgyKQogICAgIHsKLSAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEq
IGYgPSBtX2ZvbnREYXRhW2luZGV4MV07Ci0gICAgICAgIG1fZm9udERhdGFbaW5kZXgxXSA9IG1f
Zm9udERhdGFbaW5kZXgyXTsKLSAgICAgICAgbV9mb250RGF0YVtpbmRleDJdID0gZjsKKyAgICAg
ICAgY29uc3QgRm9udCogZiA9IG1fZm9udFtpbmRleDFdOworICAgICAgICBtX2ZvbnRbaW5kZXgx
XSA9IG1fZm9udFtpbmRleDJdOworICAgICAgICBtX2ZvbnRbaW5kZXgyXSA9IGY7CiAKICAgICAg
ICAgR2x5cGhCdWZmZXJHbHlwaCBnID0gbV9nbHlwaHNbaW5kZXgxXTsKICAgICAgICAgbV9nbHlw
aHNbaW5kZXgxXSA9IG1fZ2x5cGhzW2luZGV4Ml07CkBAIC0yMjQsNyArMjI0LDcgQEAgcHJpdmF0
ZToKICNlbmRpZgogICAgIH0KIAotICAgIFZlY3Rvcjxjb25zdCBTaW1wbGVGb250RGF0YSosIDIw
NDg+IG1fZm9udERhdGE7CisgICAgVmVjdG9yPGNvbnN0IEZvbnQqLCAyMDQ4PiBtX2ZvbnQ7CiAg
ICAgVmVjdG9yPEdseXBoQnVmZmVyR2x5cGgsIDIwNDg+IG1fZ2x5cGhzOwogICAgIFZlY3RvcjxH
bHlwaEJ1ZmZlckFkdmFuY2UsIDIwNDg+IG1fYWR2YW5jZXM7CiAgICAgR2x5cGhCdWZmZXJBZHZh
bmNlIG1faW5pdGlhbEFkdmFuY2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HbHlwaFBhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HbHlwaFBhZ2UuaAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDE4ICsz
OSwxOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFNpbXBsZUZvbnREYXRhOwor
Y2xhc3MgRm9udDsKIAotLy8gSG9sZHMgdGhlIGdseXBoIGluZGV4IGFuZCB0aGUgY29ycmVzcG9u
ZGluZyBTaW1wbGVGb250RGF0YSBpbmZvcm1hdGlvbiBmb3IgYSBnaXZlbgorLy8gSG9sZHMgdGhl
IGdseXBoIGluZGV4IGFuZCB0aGUgY29ycmVzcG9uZGluZyBGb250IGluZm9ybWF0aW9uIGZvciBh
IGdpdmVuCiAvLyBjaGFyYWN0ZXIuCiBzdHJ1Y3QgR2x5cGhEYXRhIHsKLSAgICBHbHlwaERhdGEo
R2x5cGggZyA9IDAsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmID0gMCkKKyAgICBHbHlwaERhdGEo
R2x5cGggZyA9IDAsIGNvbnN0IEZvbnQqIGYgPSAwKQogICAgICAgICA6IGdseXBoKGcpCi0gICAg
ICAgICwgZm9udERhdGEoZikKKyAgICAgICAgLCBmb250KGYpCiAgICAgewogICAgIH0KICAgICBH
bHlwaCBnbHlwaDsKLSAgICBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGE7CisgICAgY29u
c3QgRm9udCogZm9udDsKIH07CiAKICNpZiBDT01QSUxFUihNU1ZDKQpAQCAtNjYsMjQgKzY2LDI0
IEBAIHN0cnVjdCBHbHlwaERhdGEgewogLy8gbWlzc2luZyBpbiB0aGUgcHJpbWFyeSBmb250Lgog
Y2xhc3MgR2x5cGhQYWdlIDogcHVibGljIFJlZkNvdW50ZWQ8R2x5cGhQYWdlPiB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8R2x5cGhQYWdlPiBjcmVhdGVGb3JNaXhlZEZvbnREYXRh
KCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxHbHlwaFBhZ2U+IGNyZWF0ZUZvck1peGVkRm9udHMo
KQogICAgIHsKLSAgICAgICAgdm9pZCogc2xvdCA9IGZhc3RNYWxsb2Moc2l6ZW9mKEdseXBoUGFn
ZSkgKyBzaXplb2YoU2ltcGxlRm9udERhdGEqKSAqIEdseXBoUGFnZTo6c2l6ZSk7CisgICAgICAg
IHZvaWQqIHNsb3QgPSBmYXN0TWFsbG9jKHNpemVvZihHbHlwaFBhZ2UpICsgc2l6ZW9mKEZvbnQq
KSAqIEdseXBoUGFnZTo6c2l6ZSk7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgKE5vdE51
bGwsIHNsb3QpIEdseXBoUGFnZShudWxscHRyKSk7CiAgICAgfQogCi0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8R2x5cGhQYWdlPiBjcmVhdGVDb3B5Rm9yTWl4ZWRGb250RGF0YShjb25zdCBHbHlwaFBh
Z2UmIG9yaWdpbmFsKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdseXBoUGFnZT4gY3JlYXRlQ29w
eUZvck1peGVkRm9udHMoY29uc3QgR2x5cGhQYWdlJiBvcmlnaW5hbCkKICAgICB7Ci0gICAgICAg
IFJlZlB0cjxHbHlwaFBhZ2U+IHBhZ2UgPSBjcmVhdGVGb3JNaXhlZEZvbnREYXRhKCk7CisgICAg
ICAgIFJlZlB0cjxHbHlwaFBhZ2U+IHBhZ2UgPSBjcmVhdGVGb3JNaXhlZEZvbnRzKCk7CiAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHbHlwaFBhZ2U6OnNpemU7ICsraSkKICAgICAg
ICAgICAgIHBhZ2UtPnNldEdseXBoRGF0YUZvckluZGV4KGksIG9yaWdpbmFsLmdseXBoRGF0YUZv
ckluZGV4KGkpKTsKICAgICAgICAgcmV0dXJuIHBhZ2UucmVsZWFzZSgpOwogICAgIH0KIAotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEdseXBoUGFnZT4gY3JlYXRlRm9yU2luZ2xlRm9udERhdGEoY29u
c3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdseXBo
UGFnZT4gY3JlYXRlRm9yU2luZ2xlRm9udChjb25zdCBGb250KiBmb250KQogICAgIHsKLSAgICAg
ICAgQVNTRVJUKGZvbnREYXRhKTsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHbHlwaFBh
Z2UoZm9udERhdGEpKTsKKyAgICAgICAgQVNTRVJUKGZvbnQpOworICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEdseXBoUGFnZShmb250KSk7CiAgICAgfQogCiAgICAgfkdseXBoUGFnZSgpCkBA
IC0xMTEsNyArMTExLDcgQEAgcHVibGljOgogICAgICAgICBHbHlwaCBnbHlwaCA9IG1fZ2x5cGhz
W2luZGV4XTsKICAgICAgICAgaWYgKGhhc1BlckdseXBoRm9udERhdGEoKSkKICAgICAgICAgICAg
IHJldHVybiBHbHlwaERhdGEoZ2x5cGgsIG1fcGVyR2x5cGhGb250RGF0YVtpbmRleF0pOwotICAg
ICAgICByZXR1cm4gR2x5cGhEYXRhKGdseXBoLCBnbHlwaCA/IG1fZm9udERhdGFGb3JBbGxHbHlw
aHMgOiAwKTsKKyAgICAgICAgcmV0dXJuIEdseXBoRGF0YShnbHlwaCwgZ2x5cGggPyBtX2ZvbnRG
b3JBbGxHbHlwaHMgOiAwKTsKICAgICB9CiAKICAgICBBTFdBWVNfSU5MSU5FIEdseXBoIGdseXBo
QXQodW5zaWduZWQgaW5kZXgpIGNvbnN0CkBAIC0xMjAsNjcgKzEyMCw2NyBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBtX2dseXBoc1tpbmRleF07CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElO
RSBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjKSBj
b25zdAorICAgIEFMV0FZU19JTkxJTkUgY29uc3QgRm9udCogZm9udEZvckNoYXJhY3RlcihVQ2hh
cjMyIGMpIGNvbnN0CiAgICAgewogICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGluZGV4Rm9yQ2hh
cmFjdGVyKGMpOwogICAgICAgICBpZiAoaGFzUGVyR2x5cGhGb250RGF0YSgpKQogICAgICAgICAg
ICAgcmV0dXJuIG1fcGVyR2x5cGhGb250RGF0YVtpbmRleF07Ci0gICAgICAgIHJldHVybiBtX2ds
eXBoc1tpbmRleF0gPyBtX2ZvbnREYXRhRm9yQWxsR2x5cGhzIDogMDsKKyAgICAgICAgcmV0dXJu
IG1fZ2x5cGhzW2luZGV4XSA/IG1fZm9udEZvckFsbEdseXBocyA6IDA7CiAgICAgfQogCi0gICAg
dm9pZCBzZXRHbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjLCBHbHlwaCBnLCBjb25zdCBT
aW1wbGVGb250RGF0YSogZikKKyAgICB2b2lkIHNldEdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hh
cjMyIGMsIEdseXBoIGcsIGNvbnN0IEZvbnQqIGYpCiAgICAgewogICAgICAgICBzZXRHbHlwaERh
dGFGb3JJbmRleChpbmRleEZvckNoYXJhY3RlcihjKSwgZywgZik7CiAgICAgfQogCi0gICAgdm9p
ZCBzZXRHbHlwaERhdGFGb3JJbmRleCh1bnNpZ25lZCBpbmRleCwgR2x5cGggZ2x5cGgsIGNvbnN0
IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSkKKyAgICB2b2lkIHNldEdseXBoRGF0YUZvckluZGV4
KHVuc2lnbmVkIGluZGV4LCBHbHlwaCBnbHlwaCwgY29uc3QgRm9udCogZm9udCkKICAgICB7CiAg
ICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGluZGV4IDwgc2l6ZSk7CiAg
ICAgICAgIEFTU0VSVCghbV9pc0ltbXV0YWJsZSk7CiAgICAgICAgIAogICAgICAgICBtX2dseXBo
c1tpbmRleF0gPSBnbHlwaDsKIAotICAgICAgICAvLyBHbHlwaFBhZ2UgZ2V0dGVycyB3aWxsIGFs
d2F5cyByZXR1cm4gYSBudWxsIFNpbXBsZUZvbnREYXRhKiBmb3IgZ2x5cGggIzAgaWYgdGhlcmUn
cyBubyBwZXItZ2x5cGggZm9udCBhcnJheS4KKyAgICAgICAgLy8gR2x5cGhQYWdlIGdldHRlcnMg
d2lsbCBhbHdheXMgcmV0dXJuIGEgbnVsbCBGb250KiBmb3IgZ2x5cGggIzAgaWYgdGhlcmUncyBu
byBwZXItZ2x5cGggZm9udCBhcnJheS4KICAgICAgICAgaWYgKGhhc1BlckdseXBoRm9udERhdGEo
KSkgewotICAgICAgICAgICAgbV9wZXJHbHlwaEZvbnREYXRhW2luZGV4XSA9IGdseXBoID8gZm9u
dERhdGEgOiAwOworICAgICAgICAgICAgbV9wZXJHbHlwaEZvbnREYXRhW2luZGV4XSA9IGdseXBo
ID8gZm9udCA6IDA7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICAv
LyBBIHNpbmdsZS1mb250IEdseXBoUGFnZSBhbHJlYWR5IGFzc2lnbmVkIG1fZm9udERhdGFGb3JB
bGxHbHlwaHMgaW4gdGhlIGNvbnN0cnVjdG9yLgotICAgICAgICBBU1NFUlQoIWdseXBoIHx8IGZv
bnREYXRhID09IG1fZm9udERhdGFGb3JBbGxHbHlwaHMpOworICAgICAgICAvLyBBIHNpbmdsZS1m
b250IEdseXBoUGFnZSBhbHJlYWR5IGFzc2lnbmVkIG1fZm9udEZvckFsbEdseXBocyBpbiB0aGUg
Y29uc3RydWN0b3IuCisgICAgICAgIEFTU0VSVCghZ2x5cGggfHwgZm9udCA9PSBtX2ZvbnRGb3JB
bGxHbHlwaHMpOwogICAgIH0KIAogICAgIHZvaWQgc2V0R2x5cGhEYXRhRm9ySW5kZXgodW5zaWdu
ZWQgaW5kZXgsIGNvbnN0IEdseXBoRGF0YSYgZ2x5cGhEYXRhKQogICAgIHsKLSAgICAgICAgc2V0
R2x5cGhEYXRhRm9ySW5kZXgoaW5kZXgsIGdseXBoRGF0YS5nbHlwaCwgZ2x5cGhEYXRhLmZvbnRE
YXRhKTsKKyAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgoaW5kZXgsIGdseXBoRGF0YS5nbHlw
aCwgZ2x5cGhEYXRhLmZvbnQpOwogICAgIH0KIAogICAgIC8vIEltcGxlbWVudGVkIGJ5IHRoZSBw
bGF0Zm9ybS4KLSAgICBib29sIGZpbGwodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgs
IFVDaGFyKiBjaGFyYWN0ZXJCdWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgU2lt
cGxlRm9udERhdGEqKTsKKyAgICBib29sIGZpbGwodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgsIFVDaGFyKiBjaGFyYWN0ZXJCdWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29u
c3QgRm9udCopOwogI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIHN0YXRpYyBib29sIG1heVVzZU1p
eGVkRm9udERhdGFXaGVuRmlsbGluZyhjb25zdCBVQ2hhciogY2hhcmFjdGVyQnVmZmVyLCB1bnNp
Z25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IFNpbXBsZUZvbnREYXRhKik7CisgICAgc3RhdGljIGJv
b2wgbWF5VXNlTWl4ZWRGb250c1doZW5GaWxsaW5nKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJCdWZm
ZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgRm9udCopOwogI2Vsc2UKLSAgICBzdGF0
aWMgYm9vbCBtYXlVc2VNaXhlZEZvbnREYXRhV2hlbkZpbGxpbmcoY29uc3QgVUNoYXIqLCB1bnNp
Z25lZCwgY29uc3QgU2ltcGxlRm9udERhdGEqKSB7IHJldHVybiBmYWxzZTsgfQorICAgIHN0YXRp
YyBib29sIG1heVVzZU1peGVkRm9udHNXaGVuRmlsbGluZyhjb25zdCBVQ2hhciosIHVuc2lnbmVk
LCBjb25zdCBGb250KikgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCiBwcml2YXRlOgotICAg
IGV4cGxpY2l0IEdseXBoUGFnZShjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGFGb3JBbGxH
bHlwaHMpCi0gICAgICAgIDogbV9mb250RGF0YUZvckFsbEdseXBocyhmb250RGF0YUZvckFsbEds
eXBocykKKyAgICBleHBsaWNpdCBHbHlwaFBhZ2UoY29uc3QgRm9udCogZm9udEZvckFsbEdseXBo
cykKKyAgICAgICAgOiBtX2ZvbnRGb3JBbGxHbHlwaHMoZm9udEZvckFsbEdseXBocykKICAgICB7
CiAgICAgICAgIG1lbXNldChtX2dseXBocywgMCwgc2l6ZW9mKG1fZ2x5cGhzKSk7CiAgICAgICAg
IGlmIChoYXNQZXJHbHlwaEZvbnREYXRhKCkpCi0gICAgICAgICAgICBtZW1zZXQobV9wZXJHbHlw
aEZvbnREYXRhLCAwLCBzaXplb2YoU2ltcGxlRm9udERhdGEqKSAqIEdseXBoUGFnZTo6c2l6ZSk7
CisgICAgICAgICAgICBtZW1zZXQobV9wZXJHbHlwaEZvbnREYXRhLCAwLCBzaXplb2YoRm9udCop
ICogR2x5cGhQYWdlOjpzaXplKTsKICAgICAgICAgKytzX2NvdW50OwogICAgIH0KIAotICAgIGJv
b2wgaGFzUGVyR2x5cGhGb250RGF0YSgpIGNvbnN0IHsgcmV0dXJuICFtX2ZvbnREYXRhRm9yQWxs
R2x5cGhzOyB9CisgICAgYm9vbCBoYXNQZXJHbHlwaEZvbnREYXRhKCkgY29uc3QgeyByZXR1cm4g
IW1fZm9udEZvckFsbEdseXBoczsgfQogCi0gICAgY29uc3QgU2ltcGxlRm9udERhdGEqIG1fZm9u
dERhdGFGb3JBbGxHbHlwaHM7CisgICAgY29uc3QgRm9udCogbV9mb250Rm9yQWxsR2x5cGhzOwog
ICAgIEdseXBoIG1fZ2x5cGhzW3NpemVdOwogCiAgICAgYm9vbCBtX2lzSW1tdXRhYmxlIHsgZmFs
c2UgfTsKLSAgICAvLyBOT1RFOiBUaGlzIGFycmF5IGhhcyAoR2x5cGhQYWdlOjpzaXplKSBlbGVt
ZW50cyBpZiBtX2ZvbnREYXRhRm9yQWxsR2x5cGhzIGlzIG51bGwuCi0gICAgY29uc3QgU2ltcGxl
Rm9udERhdGEqIG1fcGVyR2x5cGhGb250RGF0YVswXTsKKyAgICAvLyBOT1RFOiBUaGlzIGFycmF5
IGhhcyAoR2x5cGhQYWdlOjpzaXplKSBlbGVtZW50cyBpZiBtX2ZvbnRGb3JBbGxHbHlwaHMgaXMg
bnVsbC4KKyAgICBjb25zdCBGb250KiBtX3BlckdseXBoRm9udERhdGFbMF07CiAKICAgICBzdGF0
aWMgdW5zaWduZWQgc19jb3VudDsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAJKHJldmlzaW9uIDE3ODg1NykK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ0OCwxMiArNDQ4LDEyIEBAIGZsb2F0IEdyYXBoaWNzQ29udGV4
dDo6ZHJhd1RleHQoY29uc3QgRm8KIH0KICNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0dseXBocyhjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29u
c3QgU2ltcGxlRm9udERhdGEmIGZvbnREYXRhLCBjb25zdCBHbHlwaEJ1ZmZlciYgYnVmZmVyLCBp
bnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0dseXBocyhjb25zdCBGb250Q2FzY2FkZSYgZm9udENhc2NhZGUs
IGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBidWZmZXIsIGludCBmcm9tLCBp
bnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKIHsKICAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBmb250LmRyYXdHbHlwaHModGhp
cywgJmZvbnREYXRhLCBidWZmZXIsIGZyb20sIG51bUdseXBocywgcG9pbnQpOworICAgIGZvbnRD
YXNjYWRlLmRyYXdHbHlwaHModGhpcywgJmZvbnQsIGJ1ZmZlciwgZnJvbSwgbnVtR2x5cGhzLCBw
b2ludCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RW1waGFzaXNNYXJrcyhjb25z
dCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJp
bmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0LmgJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogI2lmIFVTRShXSU5HREkpCiAgICAgY2xhc3MgU2hhcmVkQml0
bWFwOwotICAgIGNsYXNzIFNpbXBsZUZvbnREYXRhOworICAgIGNsYXNzIEZvbnQ7CiAgICAgY2xh
c3MgR2x5cGhCdWZmZXI7CiAjZW5kaWYKIApAQCAtMzYwLDcgKzM2MCw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICNlbHNlCiAgICAgICAgIGZsb2F0IGRyYXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRl
JiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGludCB0
byA9IC0xKTsKICNlbmRpZgotICAgICAgICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udENhc2Nh
ZGUmLCBjb25zdCBTaW1wbGVGb250RGF0YSYsIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20s
IGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICAgICAgdm9pZCBkcmF3R2x5
cGhzKGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyJiwg
aW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmKTsKICAgICAgICAgdm9p
ZCBkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mICwg
Y29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20gPSAw
LCBpbnQgdG8gPSAtMSk7CiAjaWYgIVBMQVRGT1JNKElPUykKICAgICAgICAgdm9pZCBkcmF3Qmlk
aVRleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2lu
dCYsIEZvbnRDYXNjYWRlOjpDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPSBGb250Q2FzY2FkZTo6
RG9Ob3RQYWludElmRm9udE5vdFJlYWR5KTsKQEAgLTQ3OSw3ICs0NzksNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIEFmZmluZVRyYW5zZm9ybSYgYWZmaW5lVHJhbnNmb3JtKCk7CiAg
ICAgICAgIHZvaWQgcmVzZXRBZmZpbmVUcmFuc2Zvcm0oKTsKICAgICAgICAgdm9pZCBmaWxsUmVj
dChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBHcmFkaWVudCopOwotICAgICAgICB2b2lkIGRyYXdU
ZXh0KGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwgY29uc3QgR2x5cGhCdWZmZXImIGds
eXBoQnVmZmVyLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQpOworICAgICAgICB2b2lkIGRyYXdUZXh0KGNvbnN0IEZvbnQqLCBjb25zdCBHbHlwaEJ1ZmZl
ciYsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50Jik7CiAgICAgICAg
IHZvaWQgZHJhd0ZyYW1lQ29udHJvbChjb25zdCBJbnRSZWN0JiByZWN0LCB1bnNpZ25lZCB0eXBl
LCB1bnNpZ25lZCBzdGF0ZSk7CiAgICAgICAgIHZvaWQgZHJhd0ZvY3VzUmVjdChjb25zdCBJbnRS
ZWN0JiByZWN0KTsKICAgICAgICAgdm9pZCBwYWludFRleHRGaWVsZChjb25zdCBJbnRSZWN0JiBy
ZWN0LCB1bnNpZ25lZCBzdGF0ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9TaW1wbGVGb250RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNDU2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIw
MDgsIDIwMTAsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICog
My4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1l
cyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJT
aW1wbGVGb250RGF0YS5oIgotCi0jaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAm
JiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID4gMTA4MCkKLSNpbmNsdWRlICJDb3Jl
VGV4dFNQSS5oIgotI2VuZGlmCi0jaW5jbHVkZSAiRm9udENhY2hlLmgiCi0jaW5jbHVkZSAiRm9u
dENhc2NhZGUuaCIKLSNpbmNsdWRlICJPcGVuVHlwZU1hdGhEYXRhLmgiCi0jaW5jbHVkZSA8d3Rm
L01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLQotI2lmIEVO
QUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKLSNpbmNsdWRlICJPcGVuVHlwZVZlcnRpY2FsRGF0YS5o
IgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdW5zaWduZWQgR2x5cGhQYWdlOjpz
X2NvdW50ID0gMDsKLQotY29uc3QgZmxvYXQgc21hbGxDYXBzRm9udFNpemVNdWx0aXBsaWVyID0g
MC43ZjsKLWNvbnN0IGZsb2F0IGVtcGhhc2lzTWFya0ZvbnRTaXplTXVsdGlwbGllciA9IDAuNWY7
Ci0KLVNpbXBsZUZvbnREYXRhOjpTaW1wbGVGb250RGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRh
JiBwbGF0Zm9ybURhdGEsIGJvb2wgaXNDdXN0b21Gb250LCBib29sIGlzTG9hZGluZywgYm9vbCBp
c1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKQotICAgIDogbV9tYXhDaGFyV2lkdGgoLTEpCi0gICAg
LCBtX2F2Z0NoYXJXaWR0aCgtMSkKLSAgICAsIG1fcGxhdGZvcm1EYXRhKHBsYXRmb3JtRGF0YSkK
LSAgICAsIG1fdHJlYXRBc0ZpeGVkUGl0Y2goZmFsc2UpCi0gICAgLCBtX2lzQ3VzdG9tRm9udChp
c0N1c3RvbUZvbnQpCi0gICAgLCBtX2lzTG9hZGluZyhpc0xvYWRpbmcpCi0gICAgLCBtX2lzVGV4
dE9yaWVudGF0aW9uRmFsbGJhY2soaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaykKLSAgICAsIG1f
aXNCcm9rZW5JZGVvZ3JhcGhGYWxsYmFjayhmYWxzZSkKLSAgICAsIG1fbWF0aERhdGEobnVsbHB0
cikKLSNpZiBFTkFCTEUoT1BFTlRZUEVfVkVSVElDQUwpCi0gICAgLCBtX3ZlcnRpY2FsRGF0YSgw
KQotI2VuZGlmCi0gICAgLCBtX2hhc1ZlcnRpY2FsR2x5cGhzKGZhbHNlKQotewotICAgIHBsYXRm
b3JtSW5pdCgpOwotICAgIHBsYXRmb3JtR2x5cGhJbml0KCk7Ci0gICAgcGxhdGZvcm1DaGFyV2lk
dGhJbml0KCk7Ci0jaWYgRU5BQkxFKE9QRU5UWVBFX1ZFUlRJQ0FMKQotICAgIGlmIChwbGF0Zm9y
bURhdGEub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCAmJiAhaXNUZXh0T3JpZW50YXRpb25GYWxs
YmFjaykgewotICAgICAgICBtX3ZlcnRpY2FsRGF0YSA9IHBsYXRmb3JtRGF0YS52ZXJ0aWNhbERh
dGEoKTsKLSAgICAgICAgbV9oYXNWZXJ0aWNhbEdseXBocyA9IG1fdmVydGljYWxEYXRhLmdldCgp
ICYmIG1fdmVydGljYWxEYXRhLT5oYXNWZXJ0aWNhbE1ldHJpY3MoKTsKLSAgICB9Ci0jZW5kaWYK
LX0KLQotU2ltcGxlRm9udERhdGE6OlNpbXBsZUZvbnREYXRhKHN0ZDo6dW5pcXVlX3B0cjxTVkdE
YXRhPiBzdmdEYXRhLCBmbG9hdCBmb250U2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5
bnRoZXRpY0l0YWxpYykKLSAgICA6IG1fcGxhdGZvcm1EYXRhKEZvbnRQbGF0Zm9ybURhdGEoZm9u
dFNpemUsIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYykpCi0gICAgLCBtX3N2Z0RhdGEo
V1RGOjptb3ZlKHN2Z0RhdGEpKQotICAgICwgbV90cmVhdEFzRml4ZWRQaXRjaChmYWxzZSkKLSAg
ICAsIG1faXNDdXN0b21Gb250KHRydWUpCi0gICAgLCBtX2lzTG9hZGluZyhmYWxzZSkKLSAgICAs
IG1faXNUZXh0T3JpZW50YXRpb25GYWxsYmFjayhmYWxzZSkKLSAgICAsIG1faXNCcm9rZW5JZGVv
Z3JhcGhGYWxsYmFjayhmYWxzZSkKLSAgICAsIG1fbWF0aERhdGEobnVsbHB0cikKLSNpZiBFTkFC
TEUoT1BFTlRZUEVfVkVSVElDQUwpCi0gICAgLCBtX3ZlcnRpY2FsRGF0YSgwKQotI2VuZGlmCi0g
ICAgLCBtX2hhc1ZlcnRpY2FsR2x5cGhzKGZhbHNlKQotI2lmIFBMQVRGT1JNKElPUykKLSAgICAs
IG1fc2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKGZhbHNlKQotI2VuZGlmCi17Ci0gICAgbV9zdmdE
YXRhLT5pbml0aWFsaXplRm9udERhdGEodGhpcywgZm9udFNpemUpOwotfQotCi0vLyBFc3RpbWF0
ZXMgb2YgYXZnQ2hhcldpZHRoIGFuZCBtYXhDaGFyV2lkdGggZm9yIHBsYXRmb3JtcyB0aGF0IGRv
bid0IHN1cHBvcnQgYWNjZXNzaW5nIHRoZXNlIHZhbHVlcyBmcm9tIHRoZSBmb250Lgotdm9pZCBT
aW1wbGVGb250RGF0YTo6aW5pdENoYXJXaWR0aHMoKQotewotICAgIGF1dG8qIGdseXBoUGFnZVpl
cm8gPSBnbHlwaFBhZ2UoMCk7Ci0KLSAgICAvLyBUcmVhdCB0aGUgd2lkdGggb2YgYSAnMCcgYXMg
dGhlIGF2Z0NoYXJXaWR0aC4KLSAgICBpZiAobV9hdmdDaGFyV2lkdGggPD0gMC5mICYmIGdseXBo
UGFnZVplcm8pIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IFVDaGFyMzIgZGlnaXRaZXJvQ2hhciA9
ICcwJzsKLSAgICAgICAgR2x5cGggZGlnaXRaZXJvR2x5cGggPSBnbHlwaFBhZ2VaZXJvLT5nbHlw
aERhdGFGb3JDaGFyYWN0ZXIoZGlnaXRaZXJvQ2hhcikuZ2x5cGg7Ci0gICAgICAgIGlmIChkaWdp
dFplcm9HbHlwaCkKLSAgICAgICAgICAgIG1fYXZnQ2hhcldpZHRoID0gd2lkdGhGb3JHbHlwaChk
aWdpdFplcm9HbHlwaCk7Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgY2FuJ3QgcmV0cmlldmUgdGhl
IHdpZHRoIG9mIGEgJzAnLCBmYWxsIGJhY2sgdG8gdGhlIHggaGVpZ2h0LgotICAgIGlmIChtX2F2
Z0NoYXJXaWR0aCA8PSAwLmYpCi0gICAgICAgIG1fYXZnQ2hhcldpZHRoID0gbV9mb250TWV0cmlj
cy54SGVpZ2h0KCk7Ci0KLSAgICBpZiAobV9tYXhDaGFyV2lkdGggPD0gMC5mKQotICAgICAgICBt
X21heENoYXJXaWR0aCA9IHN0ZDo6bWF4KG1fYXZnQ2hhcldpZHRoLCBtX2ZvbnRNZXRyaWNzLmZs
b2F0QXNjZW50KCkpOwotfQotCi12b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUdseXBoSW5p
dCgpCi17Ci0gICAgYXV0byogZ2x5cGhQYWdlWmVybyA9IGdseXBoUGFnZSgwKTsKLSAgICBpZiAo
IWdseXBoUGFnZVplcm8pIHsKLSAgICAgICAgbV9zcGFjZUdseXBoID0gMDsKLSAgICAgICAgbV9z
cGFjZVdpZHRoID0gMDsKLSAgICAgICAgbV96ZXJvR2x5cGggPSAwOwotICAgICAgICBtX2FkanVz
dGVkU3BhY2VXaWR0aCA9IDA7Ci0gICAgICAgIGRldGVybWluZVBpdGNoKCk7Ci0gICAgICAgIG1f
emVyb1dpZHRoU3BhY2VHbHlwaCA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAv
LyBBc2sgZm9yIHRoZSBnbHlwaCBmb3IgMCB0byBhdm9pZCBwYWdpbmcgaW4gWkVSTyBXSURUSCBT
UEFDRS4gQ29udHJvbCBjaGFyYWN0ZXJzLCBpbmNsdWRpbmcgMCwKLSAgICAvLyBhcmUgbWFwcGVk
IHRvIHRoZSBaRVJPIFdJRFRIIFNQQUNFIGdseXBoLgotICAgIG1femVyb1dpZHRoU3BhY2VHbHlw
aCA9IGdseXBoUGFnZVplcm8tPmdseXBoRGF0YUZvckNoYXJhY3RlcigwKS5nbHlwaDsKLQotICAg
IC8vIE5hc3R5IGhhY2sgdG8gZGV0ZXJtaW5lIGlmIHdlIHNob3VsZCByb3VuZCBvciBjZWlsIHNw
YWNlIHdpZHRocy4KLSAgICAvLyBJZiB0aGUgZm9udCBpcyBtb25vc3BhY2Ugb3IgZmFrZSBtb25v
c3BhY2Ugd2UgY2VpbCB0byBlbnN1cmUgdGhhdCAKLSAgICAvLyBldmVyeSBjaGFyYWN0ZXIgYW5k
IHRoZSBzcGFjZSBhcmUgdGhlIHNhbWUgd2lkdGguICBPdGhlcndpc2Ugd2Ugcm91bmQuCi0gICAg
bV9zcGFjZUdseXBoID0gZ2x5cGhQYWdlWmVyby0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKCcgJyku
Z2x5cGg7Ci0gICAgZmxvYXQgd2lkdGggPSB3aWR0aEZvckdseXBoKG1fc3BhY2VHbHlwaCk7Ci0g
ICAgbV9zcGFjZVdpZHRoID0gd2lkdGg7Ci0gICAgbV96ZXJvR2x5cGggPSBnbHlwaFBhZ2VaZXJv
LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoJzAnKS5nbHlwaDsKLSAgICBtX2ZvbnRNZXRyaWNzLnNl
dFplcm9XaWR0aCh3aWR0aEZvckdseXBoKG1femVyb0dseXBoKSk7Ci0gICAgZGV0ZXJtaW5lUGl0
Y2goKTsKLSAgICBtX2FkanVzdGVkU3BhY2VXaWR0aCA9IG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPyBj
ZWlsZih3aWR0aCkgOiByb3VuZGYod2lkdGgpOwotCi0gICAgLy8gRm9yY2UgdGhlIGdseXBoIGZv
ciBaRVJPIFdJRFRIIFNQQUNFIHRvIGhhdmUgemVybyB3aWR0aCwgdW5sZXNzIGl0IGlzIHNoYXJl
ZCB3aXRoIFNQQUNFLgotICAgIC8vIEhlbHZldGljYSBpcyBhbiBleGFtcGxlIG9mIGEgbm9uLXpl
cm8gd2lkdGggWkVSTyBXSURUSCBTUEFDRSBnbHlwaC4KLSAgICAvLyBTZWUgPGh0dHA6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMTc4PiBhbmQgU2ltcGxlRm9udERhdGE6Omlz
WmVyb1dpZHRoU3BhY2VHbHlwaCgpCi0gICAgaWYgKG1femVyb1dpZHRoU3BhY2VHbHlwaCA9PSBt
X3NwYWNlR2x5cGgpCi0gICAgICAgIG1femVyb1dpZHRoU3BhY2VHbHlwaCA9IDA7Ci19Ci0KLVNp
bXBsZUZvbnREYXRhOjp+U2ltcGxlRm9udERhdGEoKQotewotICAgIHJlbW92ZUZyb21TeXN0ZW1G
YWxsYmFja0NhY2hlKCk7Ci19Ci0KLXN0YXRpYyBib29sIGZpbGxHbHlwaFBhZ2UoR2x5cGhQYWdl
JiBwYWdlVG9GaWxsLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1
ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERh
dGEpCi17Ci0jaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICBpZiAoYXV0byogc3ZnRGF0YSA9IGZv
bnREYXRhLT5zdmdEYXRhKCkpCi0gICAgICAgIHJldHVybiBzdmdEYXRhLT5maWxsU1ZHR2x5cGhQ
YWdlKCZwYWdlVG9GaWxsLCBvZmZzZXQsIGxlbmd0aCwgYnVmZmVyLCBidWZmZXJMZW5ndGgsIGZv
bnREYXRhKTsKLSNlbmRpZgotICAgIGJvb2wgaGFzR2x5cGhzID0gcGFnZVRvRmlsbC5maWxsKG9m
ZnNldCwgbGVuZ3RoLCBidWZmZXIsIGJ1ZmZlckxlbmd0aCwgZm9udERhdGEpOwotI2lmIEVOQUJM
RShPUEVOVFlQRV9WRVJUSUNBTCkKLSAgICBpZiAoaGFzR2x5cGhzICYmIGZvbnREYXRhLT52ZXJ0
aWNhbERhdGEoKSkKLSAgICAgICAgZm9udERhdGEtPnZlcnRpY2FsRGF0YSgpLT5zdWJzdGl0dXRl
V2l0aFZlcnRpY2FsR2x5cGhzKGZvbnREYXRhLCAmcGFnZVRvRmlsbCwgb2Zmc2V0LCBsZW5ndGgp
OwotI2VuZGlmCi0gICAgcmV0dXJuIGhhc0dseXBoczsKLX0KLQotc3RhdGljIFJlZlB0cjxHbHlw
aFBhZ2U+IGNyZWF0ZUFuZEZpbGxHbHlwaFBhZ2UodW5zaWduZWQgcGFnZU51bWJlciwgY29uc3Qg
U2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQotewotI2lmIFBMQVRGT1JNKElPUykKLSAgICAvLyBG
SVhNRTogVGltZXMgTmV3IFJvbWFuIGNvbnRhaW5zIEFyYWJpYyBnbHlwaHMsIGJ1dCBDb3JlIFRl
eHQgZG9lc24ndCBrbm93IGhvdyB0byBzaGFwZSB0aGVtLiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzk4
MjM5NzU+LgotICAgIC8vIE9uY2Ugd2UgaGF2ZSB0aGUgZml4IGZvciA8cmRhcjovL3Byb2JsZW0v
OTgyMzk3NT4gdGhlbiByZW1vdmUgdGhpcyBjb2RlIHRvZ2V0aGVyIHdpdGggU2ltcGxlRm9udERh
dGE6OnNob3VsZE5vdEJlVXNlZEZvckFyYWJpYygpCi0gICAgLy8gaW4gPHJkYXI6Ly9wcm9ibGVt
LzEyMDk2ODM1Pi4KLSAgICBpZiAocGFnZU51bWJlciA9PSA2ICYmIGZvbnREYXRhLT5zaG91bGRO
b3RCZVVzZWRGb3JBcmFiaWMoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0jZW5kaWYKLQot
ICAgIHVuc2lnbmVkIHN0YXJ0ID0gcGFnZU51bWJlciAqIEdseXBoUGFnZTo6c2l6ZTsKLSAgICBV
Q2hhciBidWZmZXJbR2x5cGhQYWdlOjpzaXplICogMiArIDJdOwotICAgIHVuc2lnbmVkIGJ1ZmZl
ckxlbmd0aDsKLSAgICAvLyBGaWxsIGluIGEgYnVmZmVyIHdpdGggdGhlIGVudGlyZSAicGFnZSIg
b2YgY2hhcmFjdGVycyB0aGF0IHdlIHdhbnQgdG8gbG9vayB1cCBnbHlwaHMgZm9yLgotICAgIGlm
IChVX0lTX0JNUChzdGFydCkpIHsKLSAgICAgICAgYnVmZmVyTGVuZ3RoID0gR2x5cGhQYWdlOjpz
aXplOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR2x5cGhQYWdlOjpzaXplOyBp
KyspCi0gICAgICAgICAgICBidWZmZXJbaV0gPSBzdGFydCArIGk7Ci0KLSAgICAgICAgaWYgKHN0
YXJ0ID09IDApIHsKLSAgICAgICAgICAgIC8vIENvbnRyb2wgY2hhcmFjdGVycyBtdXN0IG5vdCBy
ZW5kZXIgYXQgYWxsLgotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDB4MjA7
ICsraSkKLSAgICAgICAgICAgICAgICBidWZmZXJbaV0gPSB6ZXJvV2lkdGhTcGFjZTsKLSAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDB4N0Y7IGkgPCAweEEwOyBpKyspCi0gICAgICAgICAg
ICAgICAgYnVmZmVyW2ldID0gemVyb1dpZHRoU3BhY2U7Ci0gICAgICAgICAgICBidWZmZXJbc29m
dEh5cGhlbl0gPSB6ZXJvV2lkdGhTcGFjZTsKLQotICAgICAgICAgICAgLy8gXG4sIFx0LCBhbmQg
bm9uYnJlYWtpbmcgc3BhY2UgbXVzdCByZW5kZXIgYXMgYSBzcGFjZS4KLSAgICAgICAgICAgIGJ1
ZmZlclsoaW50KSdcbiddID0gJyAnOwotICAgICAgICAgICAgYnVmZmVyWyhpbnQpJ1x0J10gPSAn
ICc7Ci0gICAgICAgICAgICBidWZmZXJbbm9CcmVha1NwYWNlXSA9ICcgJzsKLSAgICAgICAgfSBl
bHNlIGlmIChzdGFydCA9PSAobGVmdFRvUmlnaHRNYXJrICYgfihHbHlwaFBhZ2U6OnNpemUgLSAx
KSkpIHsKLSAgICAgICAgICAgIC8vIExSTSwgUkxNLCBMUkUsIFJMRSwgWldOSiwgWldKLCBhbmQg
UERGIG11c3Qgbm90IHJlbmRlciBhdCBhbGwuCi0gICAgICAgICAgICBidWZmZXJbbGVmdFRvUmln
aHRNYXJrIC0gc3RhcnRdID0gemVyb1dpZHRoU3BhY2U7Ci0gICAgICAgICAgICBidWZmZXJbcmln
aHRUb0xlZnRNYXJrIC0gc3RhcnRdID0gemVyb1dpZHRoU3BhY2U7Ci0gICAgICAgICAgICBidWZm
ZXJbbGVmdFRvUmlnaHRFbWJlZCAtIHN0YXJ0XSA9IHplcm9XaWR0aFNwYWNlOwotICAgICAgICAg
ICAgYnVmZmVyW3JpZ2h0VG9MZWZ0RW1iZWQgLSBzdGFydF0gPSB6ZXJvV2lkdGhTcGFjZTsKLSAg
ICAgICAgICAgIGJ1ZmZlcltsZWZ0VG9SaWdodE92ZXJyaWRlIC0gc3RhcnRdID0gemVyb1dpZHRo
U3BhY2U7Ci0gICAgICAgICAgICBidWZmZXJbcmlnaHRUb0xlZnRPdmVycmlkZSAtIHN0YXJ0XSA9
IHplcm9XaWR0aFNwYWNlOwotICAgICAgICAgICAgYnVmZmVyW3plcm9XaWR0aE5vbkpvaW5lciAt
IHN0YXJ0XSA9IHplcm9XaWR0aFNwYWNlOwotICAgICAgICAgICAgYnVmZmVyW3plcm9XaWR0aEpv
aW5lciAtIHN0YXJ0XSA9IHplcm9XaWR0aFNwYWNlOwotICAgICAgICAgICAgYnVmZmVyW3BvcERp
cmVjdGlvbmFsRm9ybWF0dGluZyAtIHN0YXJ0XSA9IHplcm9XaWR0aFNwYWNlOwotICAgICAgICB9
IGVsc2UgaWYgKHN0YXJ0ID09IChvYmplY3RSZXBsYWNlbWVudENoYXJhY3RlciAmIH4oR2x5cGhQ
YWdlOjpzaXplIC0gMSkpKSB7Ci0gICAgICAgICAgICAvLyBPYmplY3QgcmVwbGFjZW1lbnQgY2hh
cmFjdGVyIG11c3Qgbm90IHJlbmRlciBhdCBhbGwuCi0gICAgICAgICAgICBidWZmZXJbb2JqZWN0
UmVwbGFjZW1lbnRDaGFyYWN0ZXIgLSBzdGFydF0gPSB6ZXJvV2lkdGhTcGFjZTsKLSAgICAgICAg
fSBlbHNlIGlmIChzdGFydCA9PSAoemVyb1dpZHRoTm9CcmVha1NwYWNlICYgfihHbHlwaFBhZ2U6
OnNpemUgLSAxKSkpIHsKLSAgICAgICAgICAgIC8vIFpXTkJTL0JPTSBtdXN0IG5vdCByZW5kZXIg
YXQgYWxsLgotICAgICAgICAgICAgYnVmZmVyW3plcm9XaWR0aE5vQnJlYWtTcGFjZSAtIHN0YXJ0
XSA9IHplcm9XaWR0aFNwYWNlOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgYnVm
ZmVyTGVuZ3RoID0gR2x5cGhQYWdlOjpzaXplICogMjsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IEdseXBoUGFnZTo6c2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICBpbnQgYyA9IGkg
KyBzdGFydDsKLSAgICAgICAgICAgIGJ1ZmZlcltpICogMl0gPSBVMTZfTEVBRChjKTsKLSAgICAg
ICAgICAgIGJ1ZmZlcltpICogMiArIDFdID0gVTE2X1RSQUlMKGMpOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgLy8gTm93IHRoYXQgd2UgaGF2ZSBhIGJ1ZmZlciBmdWxsIG9mIGNoYXJhY3RlcnMs
IHdlIHdhbnQgdG8gZ2V0IGJhY2sgYW4gYXJyYXkKLSAgICAvLyBvZiBnbHlwaCBpbmRpY2VzLiBU
aGlzIHBhcnQgaW52b2x2ZXMgY2FsbGluZyBpbnRvIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYwotICAg
IC8vIHJvdXRpbmUgb2Ygb3VyIGdseXBoIG1hcCBmb3IgYWN0dWFsbHkgZmlsbGluZyBpbiB0aGUg
cGFnZSB3aXRoIHRoZSBnbHlwaHMuCi0gICAgLy8gU3VjY2VzcyBpcyBub3QgZ3VhcmFudGVlZC4g
Rm9yIGV4YW1wbGUsIFRpbWVzIGZhaWxzIHRvIGZpbGwgcGFnZSAyNjAsIGdpdmluZyBnbHlwaCBk
YXRhCi0gICAgLy8gZm9yIG9ubHkgMTI4IG91dCBvZiAyNTYgY2hhcmFjdGVycy4KLSAgICBSZWZQ
dHI8R2x5cGhQYWdlPiBnbHlwaFBhZ2U7Ci0gICAgaWYgKEdseXBoUGFnZTo6bWF5VXNlTWl4ZWRG
b250RGF0YVdoZW5GaWxsaW5nKGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCBmb250RGF0YSkpCi0gICAg
ICAgIGdseXBoUGFnZSA9IEdseXBoUGFnZTo6Y3JlYXRlRm9yTWl4ZWRGb250RGF0YSgpOwotICAg
IGVsc2UKLSAgICAgICAgZ2x5cGhQYWdlID0gR2x5cGhQYWdlOjpjcmVhdGVGb3JTaW5nbGVGb250
RGF0YShmb250RGF0YSk7Ci0KLSAgICBib29sIGhhdmVHbHlwaHMgPSBmaWxsR2x5cGhQYWdlKCpn
bHlwaFBhZ2UsIDAsIEdseXBoUGFnZTo6c2l6ZSwgYnVmZmVyLCBidWZmZXJMZW5ndGgsIGZvbnRE
YXRhKTsKLSAgICBpZiAoIWhhdmVHbHlwaHMpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0g
ICAgZ2x5cGhQYWdlLT5zZXRJbW11dGFibGUoKTsKLSAgICByZXR1cm4gZ2x5cGhQYWdlOwotfQot
Ci1jb25zdCBHbHlwaFBhZ2UqIFNpbXBsZUZvbnREYXRhOjpnbHlwaFBhZ2UodW5zaWduZWQgcGFn
ZU51bWJlcikgY29uc3QKLXsKLSAgICBpZiAocGFnZU51bWJlciA9PSAwKSB7Ci0gICAgICAgIGlm
ICghbV9nbHlwaFBhZ2VaZXJvKQotICAgICAgICAgICAgbV9nbHlwaFBhZ2VaZXJvID0gY3JlYXRl
QW5kRmlsbEdseXBoUGFnZSgwLCB0aGlzKTsKLSAgICAgICAgcmV0dXJuIG1fZ2x5cGhQYWdlWmVy
by5nZXQoKTsKLSAgICB9Ci0gICAgYXV0byBhZGRSZXN1bHQgPSBtX2dseXBoUGFnZXMuYWRkKHBh
Z2VOdW1iZXIsIG51bGxwdHIpOwotICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAg
ICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGNyZWF0ZUFuZEZpbGxHbHlwaFBhZ2UocGFn
ZU51bWJlciwgdGhpcyk7Ci0KLSAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5n
ZXQoKTsKLX0KLQotR2x5cGggU2ltcGxlRm9udERhdGE6OmdseXBoRm9yQ2hhcmFjdGVyKFVDaGFy
MzIgY2hhcmFjdGVyKSBjb25zdAotewotICAgIGF1dG8qIHBhZ2UgPSBnbHlwaFBhZ2UoY2hhcmFj
dGVyIC8gR2x5cGhQYWdlOjpzaXplKTsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVybiAw
OwotICAgIHJldHVybiBwYWdlLT5nbHlwaEF0KGNoYXJhY3RlciAlIEdseXBoUGFnZTo6c2l6ZSk7
Ci19Ci0KLUdseXBoRGF0YSBTaW1wbGVGb250RGF0YTo6Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVD
aGFyMzIgY2hhcmFjdGVyKSBjb25zdAotewotICAgIGF1dG8qIHBhZ2UgPSBnbHlwaFBhZ2UoY2hh
cmFjdGVyIC8gR2x5cGhQYWdlOjpzaXplKTsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVy
biBHbHlwaERhdGEoKTsKLSAgICByZXR1cm4gcGFnZS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNo
YXJhY3Rlcik7Ci19Ci0KLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRh
Ojp2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250RGF0YSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFt
X2Rlcml2ZWRGb250RGF0YSkKLSAgICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBzdGQ6Om1ha2Vf
dW5pcXVlPERlcml2ZWRGb250RGF0YT4oaXNDdXN0b21Gb250KCkpOwotICAgIGlmICghbV9kZXJp
dmVkRm9udERhdGEtPnZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbikgewotICAgICAgICBGb250UGxh
dGZvcm1EYXRhIHZlcnRpY2FsUmlnaHRQbGF0Zm9ybURhdGEobV9wbGF0Zm9ybURhdGEpOwotICAg
ICAgICB2ZXJ0aWNhbFJpZ2h0UGxhdGZvcm1EYXRhLnNldE9yaWVudGF0aW9uKEhvcml6b250YWwp
OwotICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+dmVydGljYWxSaWdodE9yaWVudGF0aW9uID0g
Y3JlYXRlKHZlcnRpY2FsUmlnaHRQbGF0Zm9ybURhdGEsIGlzQ3VzdG9tRm9udCgpLCBmYWxzZSwg
dHJ1ZSk7Ci0gICAgfQotICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+dmVydGljYWxSaWdo
dE9yaWVudGF0aW9uOwotfQotCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250
RGF0YTo6dXByaWdodE9yaWVudGF0aW9uRm9udERhdGEoKSBjb25zdAotewotICAgIGlmICghbV9k
ZXJpdmVkRm9udERhdGEpCi0gICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gc3RkOjptYWtlX3Vu
aXF1ZTxEZXJpdmVkRm9udERhdGE+KGlzQ3VzdG9tRm9udCgpKTsKLSAgICBpZiAoIW1fZGVyaXZl
ZEZvbnREYXRhLT51cHJpZ2h0T3JpZW50YXRpb24pCi0gICAgICAgIG1fZGVyaXZlZEZvbnREYXRh
LT51cHJpZ2h0T3JpZW50YXRpb24gPSBjcmVhdGUobV9wbGF0Zm9ybURhdGEsIGlzQ3VzdG9tRm9u
dCgpLCBmYWxzZSwgdHJ1ZSk7Ci0gICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT51cHJpZ2h0
T3JpZW50YXRpb247Ci19Ci0KLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnRE
YXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlw
dGlvbikgY29uc3QKLXsKLSAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQotICAgICAgICBtX2Rl
cml2ZWRGb250RGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8RGVyaXZlZEZvbnREYXRhPihpc0N1c3Rv
bUZvbnQoKSk7Ci0gICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzKQotICAgICAg
ICBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9u
dERlc2NyaXB0aW9uLCBzbWFsbENhcHNGb250U2l6ZU11bHRpcGxpZXIpOwotCi0gICAgcmV0dXJu
IG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHM7Ci19Ci0KLVBhc3NSZWZQdHI8U2ltcGxlRm9u
dERhdGE+IFNpbXBsZUZvbnREYXRhOjplbXBoYXNpc01hcmtGb250RGF0YShjb25zdCBGb250RGVz
Y3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKLXsKLSAgICBpZiAoIW1fZGVyaXZlZEZv
bnREYXRhKQotICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8RGVy
aXZlZEZvbnREYXRhPihpc0N1c3RvbUZvbnQoKSk7Ci0gICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0
YS0+ZW1waGFzaXNNYXJrKQotICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJr
ID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9uLCBlbXBoYXNpc01hcmtGb250
U2l6ZU11bHRpcGxpZXIpOwotCi0gICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNp
c01hcms7Ci19Ci0KLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpi
cm9rZW5JZGVvZ3JhcGhGb250RGF0YSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2Rlcml2ZWRGb250
RGF0YSkKLSAgICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPERlcml2
ZWRGb250RGF0YT4oaXNDdXN0b21Gb250KCkpOwotICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEt
PmJyb2tlbklkZW9ncmFwaCkgewotICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+YnJva2VuSWRl
b2dyYXBoID0gY3JlYXRlKG1fcGxhdGZvcm1EYXRhLCBpc0N1c3RvbUZvbnQoKSwgZmFsc2UpOwot
ICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+YnJva2VuSWRlb2dyYXBoLT5tX2lzQnJva2VuSWRl
b2dyYXBoRmFsbGJhY2sgPSB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gbV9kZXJpdmVkRm9udERh
dGEtPmJyb2tlbklkZW9ncmFwaDsKLX0KLQotUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2lt
cGxlRm9udERhdGE6Om5vblN5bnRoZXRpY0l0YWxpY0ZvbnREYXRhKCkgY29uc3QKLXsKLSAgICBp
ZiAoIW1fZGVyaXZlZEZvbnREYXRhKQotICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IHN0ZDo6
bWFrZV91bmlxdWU8RGVyaXZlZEZvbnREYXRhPihpc0N1c3RvbUZvbnQoKSk7Ci0gICAgaWYgKCFt
X2Rlcml2ZWRGb250RGF0YS0+bm9uU3ludGhldGljSXRhbGljKSB7Ci0gICAgICAgIEZvbnRQbGF0
Zm9ybURhdGEgbm9uU3ludGhldGljSXRhbGljRm9udFBsYXRmb3JtRGF0YShtX3BsYXRmb3JtRGF0
YSk7Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgICAgIG5vblN5bnRoZXRpY0l0YWxpY0ZvbnRQ
bGF0Zm9ybURhdGEubV9zeW50aGV0aWNPYmxpcXVlID0gZmFsc2U7Ci0jZW5kaWYKLSAgICAgICAg
bV9kZXJpdmVkRm9udERhdGEtPm5vblN5bnRoZXRpY0l0YWxpYyA9IGNyZWF0ZShub25TeW50aGV0
aWNJdGFsaWNGb250UGxhdGZvcm1EYXRhLCBpc0N1c3RvbUZvbnQoKSk7Ci0gICAgfQotICAgIHJl
dHVybiBtX2Rlcml2ZWRGb250RGF0YS0+bm9uU3ludGhldGljSXRhbGljOwotfQotCi0jaWZuZGVm
IE5ERUJVRwotU3RyaW5nIFNpbXBsZUZvbnREYXRhOjpkZXNjcmlwdGlvbigpIGNvbnN0Ci17Ci0g
ICAgaWYgKGlzU1ZHRm9udCgpKQotICAgICAgICByZXR1cm4gIltTVkcgZm9udF0iOwotICAgIGlm
IChpc0N1c3RvbUZvbnQoKSkKLSAgICAgICAgcmV0dXJuICJbY3VzdG9tIGZvbnRdIjsKLQotICAg
IHJldHVybiBwbGF0Zm9ybURhdGEoKS5kZXNjcmlwdGlvbigpOwotfQotI2VuZGlmCi0KLWNvbnN0
IE9wZW5UeXBlTWF0aERhdGEqIFNpbXBsZUZvbnREYXRhOjptYXRoRGF0YSgpIGNvbnN0Ci17Ci0g
ICAgaWYgKG1faXNMb2FkaW5nKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIW1f
bWF0aERhdGEpIHsKLSAgICAgICAgbV9tYXRoRGF0YSA9IE9wZW5UeXBlTWF0aERhdGE6OmNyZWF0
ZShtX3BsYXRmb3JtRGF0YSk7Ci0gICAgICAgIGlmICghbV9tYXRoRGF0YS0+aGFzTWF0aERhdGEo
KSkKLSAgICAgICAgICAgIG1fbWF0aERhdGEuY2xlYXIoKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1f
bWF0aERhdGEuZ2V0KCk7Ci19Ci0KLVNpbXBsZUZvbnREYXRhOjpEZXJpdmVkRm9udERhdGE6On5E
ZXJpdmVkRm9udERhdGEoKQotewotfQotCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1w
bGVGb250RGF0YTo6Y3JlYXRlU2NhbGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBm
b250RGVzY3JpcHRpb24sIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAotewotICAgIGlmIChpc1NW
R0ZvbnQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gcGxhdGZvcm1D
cmVhdGVTY2FsZWRGb250RGF0YShmb250RGVzY3JpcHRpb24sIHNjYWxlRmFjdG9yKTsKLX0KLQot
Ym9vbCBTaW1wbGVGb250RGF0YTo6YXBwbHlUcmFuc2Zvcm1zKEdseXBoQnVmZmVyR2x5cGgqIGds
eXBocywgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgc2l6ZV90IGdseXBoQ291bnQsIFR5
cGVzZXR0aW5nRmVhdHVyZXMgdHlwZXNldHRpbmdGZWF0dXJlcykgY29uc3QKLXsKLSAgICAvLyBX
ZSBuZWVkIHRvIGhhbmRsZSB0cmFuc2Zvcm1zIG9uIFNWRyBmb250cyBpbnRlcm5hbGx5LCBzaW5j
ZSB0aGV5IGFyZSByZW5kZXJlZCBpbnRlcm5hbGx5LgotICAgIEFTU0VSVCghaXNTVkdGb250KCkp
OwotI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJT
SU9OX01JTl9SRVFVSVJFRCA+IDEwODApCi0gICAgQ1RGb250VHJhbnNmb3JtT3B0aW9ucyBvcHRp
b25zID0gKHR5cGVzZXR0aW5nRmVhdHVyZXMgJiBLZXJuaW5nID8ga0NURm9udFRyYW5zZm9ybUFw
cGx5UG9zaXRpb25pbmcgOiAwKSB8ICh0eXBlc2V0dGluZ0ZlYXR1cmVzICYgTGlnYXR1cmVzID8g
a0NURm9udFRyYW5zZm9ybUFwcGx5U2hhcGluZyA6IDApOwotICAgIHJldHVybiBDVEZvbnRUcmFu
c2Zvcm1HbHlwaHMobV9wbGF0Zm9ybURhdGEuY3RGb250KCksIGdseXBocywgcmVpbnRlcnByZXRf
Y2FzdDxDR1NpemUqPihhZHZhbmNlcyksIGdseXBoQ291bnQsIG9wdGlvbnMpOwotI2Vsc2UKLSAg
ICBVTlVTRURfUEFSQU0oZ2x5cGhzKTsKLSAgICBVTlVTRURfUEFSQU0oYWR2YW5jZXMpOwotICAg
IFVOVVNFRF9QQVJBTShnbHlwaENvdW50KTsKLSAgICBVTlVTRURfUEFSQU0odHlwZXNldHRpbmdG
ZWF0dXJlcyk7Ci0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLS8vIEZvbnREYXRhcyBh
cmUgbm90IHJlZmNvdW50ZWQgdG8gYXZvaWQgY3ljbGVzLgotdHlwZWRlZiBIYXNoTWFwPHN0ZDo6
cGFpcjxVQ2hhcjMyLCB1bnNpZ25lZD4sIFNpbXBsZUZvbnREYXRhKj4gQ2hhcmFjdGVyRmFsbGJh
Y2tNYXA7Ci10eXBlZGVmIEhhc2hNYXA8Y29uc3QgU2ltcGxlRm9udERhdGEqLCBDaGFyYWN0ZXJG
YWxsYmFja01hcD4gU3lzdGVtRmFsbGJhY2tDYWNoZTsKLQotc3RhdGljIFN5c3RlbUZhbGxiYWNr
Q2FjaGUmIHN5c3RlbUZhbGxiYWNrQ2FjaGUoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxTeXN0ZW1GYWxsYmFja0NhY2hlPiBtYXA7Ci0gICAgcmV0dXJuIG1hcC5nZXQoKTsKLX0KLQot
UmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6c3lzdGVtRmFsbGJhY2tGb250
RGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGNoYXJhY3RlciwgY29uc3QgRm9udERlc2NyaXB0aW9u
JiBkZXNjcmlwdGlvbiwgYm9vbCBpc0ZvclBsYXRmb3JtRm9udCkgY29uc3QKLXsKLSAgICBhdXRv
IGZvbnRBZGRSZXN1bHQgPSBzeXN0ZW1GYWxsYmFja0NhY2hlKCkuYWRkKHRoaXMsIENoYXJhY3Rl
ckZhbGxiYWNrTWFwKCkpOwotCi0gICAgYXV0byBrZXkgPSBzdGQ6Om1ha2VfcGFpcihjaGFyYWN0
ZXIsIGlzRm9yUGxhdGZvcm1Gb250KTsKLSAgICBhdXRvIGNoYXJhY3RlckFkZFJlc3VsdCA9IGZv
bnRBZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFkZChrZXksIG51bGxwdHIpOwotCi0gICAgU2lt
cGxlRm9udERhdGEqJiBmYWxsYmFja0ZvbnREYXRhID0gY2hhcmFjdGVyQWRkUmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZTsKLQotICAgIGlmICghZmFsbGJhY2tGb250RGF0YSkgewotICAgICAgICBVQ2hh
ciBjb2RlVW5pdHNbMl07Ci0gICAgICAgIGludCBjb2RlVW5pdHNMZW5ndGg7Ci0gICAgICAgIGlm
IChVX0lTX0JNUChjaGFyYWN0ZXIpKSB7Ci0gICAgICAgICAgICBjb2RlVW5pdHNbMF0gPSBGb250
Q2FzY2FkZTo6bm9ybWFsaXplU3BhY2VzKGNoYXJhY3Rlcik7Ci0gICAgICAgICAgICBjb2RlVW5p
dHNMZW5ndGggPSAxOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29kZVVuaXRzWzBd
ID0gVTE2X0xFQUQoY2hhcmFjdGVyKTsKLSAgICAgICAgICAgIGNvZGVVbml0c1sxXSA9IFUxNl9U
UkFJTChjaGFyYWN0ZXIpOwotICAgICAgICAgICAgY29kZVVuaXRzTGVuZ3RoID0gMjsKLSAgICAg
ICAgfQotCi0gICAgICAgIGZhbGxiYWNrRm9udERhdGEgPSBmb250Q2FjaGUoKS5zeXN0ZW1GYWxs
YmFja0ZvckNoYXJhY3RlcnMoZGVzY3JpcHRpb24sIHRoaXMsIGlzRm9yUGxhdGZvcm1Gb250LCBj
b2RlVW5pdHMsIGNvZGVVbml0c0xlbmd0aCkuZ2V0KCk7Ci0gICAgICAgIGlmIChmYWxsYmFja0Zv
bnREYXRhKQotICAgICAgICAgICAgZmFsbGJhY2tGb250RGF0YS0+bV9pc1VzZWRJblN5c3RlbUZh
bGxiYWNrQ2FjaGUgPSB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxsYmFja0ZvbnREYXRh
OwotfQotCi12b2lkIFNpbXBsZUZvbnREYXRhOjpyZW1vdmVGcm9tU3lzdGVtRmFsbGJhY2tDYWNo
ZSgpCi17Ci0gICAgc3lzdGVtRmFsbGJhY2tDYWNoZSgpLnJlbW92ZSh0aGlzKTsKLQotICAgIGlm
ICghbV9pc1VzZWRJblN5c3RlbUZhbGxiYWNrQ2FjaGUpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGZvciAoYXV0byYgY2hhcmFjdGVyTWFwIDogc3lzdGVtRmFsbGJhY2tDYWNoZSgpLnZhbHVlcygp
KSB7Ci0gICAgICAgIFZlY3RvcjxzdGQ6OnBhaXI8VUNoYXIzMiwgdW5zaWduZWQ+LCA1MTI+IHRv
UmVtb3ZlOwotICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogY2hhcmFjdGVyTWFwKSB7Ci0gICAg
ICAgICAgICBpZiAoZW50cnkudmFsdWUgPT0gdGhpcykKLSAgICAgICAgICAgICAgICB0b1JlbW92
ZS5hcHBlbmQoZW50cnkua2V5KTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKGF1dG8mIGtleSA6
IHRvUmVtb3ZlKQotICAgICAgICAgICAgY2hhcmFjdGVyTWFwLnJlbW92ZShrZXkpOwotICAgIH0K
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCShyZXZpc2lvbiAxNzg4NTcpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDM2OSArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIGludGVybmFsIGZvbnQgaW1wbGVtZW50YXRpb24uCi0gKgotICogQ29weXJpZ2h0IChDKSAy
MDA2LCAyMDA4LCAyMDEwLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAwNy0yMDA4IFRvcmNoIE1vYmlsZSwgSW5jLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBT
aW1wbGVGb250RGF0YV9oCi0jZGVmaW5lIFNpbXBsZUZvbnREYXRhX2gKLQotI2luY2x1ZGUgIkZv
bnRCYXNlbGluZS5oIgotI2luY2x1ZGUgIkZvbnRNZXRyaWNzLmgiCi0jaW5jbHVkZSAiRm9udFBs
YXRmb3JtRGF0YS5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkdseXBoQnVm
ZmVyLmgiCi0jaW5jbHVkZSAiR2x5cGhNZXRyaWNzTWFwLmgiCi0jaW5jbHVkZSAiR2x5cGhQYWdl
LmgiCi0jaW5jbHVkZSAiT3BlblR5cGVNYXRoRGF0YS5oIgotI2lmIEVOQUJMRShPUEVOVFlQRV9W
RVJUSUNBTCkKLSNpbmNsdWRlICJPcGVuVHlwZVZlcnRpY2FsRGF0YS5oIgotI2VuZGlmCi0jaW5j
bHVkZSAiVHlwZXNldHRpbmdGZWF0dXJlcy5oIgotI2luY2x1ZGUgPHd0Zi9UeXBlQ2FzdHMuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0KLSNpZiBQTEFURk9STShDT0NPQSkK
LSNpbmNsdWRlICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCi0jaW5jbHVkZSA8d3RmL1JldGFp
blB0ci5oPgotI2VuZGlmCi0KLSNpZiBQTEFURk9STShXSU4pCi0jaW5jbHVkZSA8dXNwMTAuaD4K
LSNlbmRpZgotCi0jaWYgVVNFKENBSVJPKQotI2luY2x1ZGUgPGNhaXJvLmg+Ci0jZW5kaWYKLQot
I2lmIFVTRShDRykKLSNpbmNsdWRlIDxXZWJDb3JlL0NvcmVHcmFwaGljc1NQSS5oPgotI2VuZGlm
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgR2x5cGhQYWdlOwotY2xhc3MgRm9udERl
c2NyaXB0aW9uOwotY2xhc3MgU2hhcmVkQnVmZmVyOwotc3RydWN0IEdseXBoRGF0YTsKLXN0cnVj
dCBXaWR0aEl0ZXJhdG9yOwotCi1lbnVtIEZvbnREYXRhVmFyaWFudCB7IEF1dG9WYXJpYW50LCBO
b3JtYWxWYXJpYW50LCBTbWFsbENhcHNWYXJpYW50LCBFbXBoYXNpc01hcmtWYXJpYW50LCBCcm9r
ZW5JZGVvZ3JhcGhWYXJpYW50IH07Ci1lbnVtIFBpdGNoIHsgVW5rbm93blBpdGNoLCBGaXhlZFBp
dGNoLCBWYXJpYWJsZVBpdGNoIH07Ci0KLWNsYXNzIFNpbXBsZUZvbnREYXRhIDogcHVibGljIFJl
ZkNvdW50ZWQ8U2ltcGxlRm9udERhdGE+IHsKLXB1YmxpYzoKLSAgICBjbGFzcyBTVkdEYXRhIHsK
LSAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgcHVibGljOgotICAgICAgICB2
aXJ0dWFsIH5TVkdEYXRhKCkgeyB9Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVG
b250RGF0YShTaW1wbGVGb250RGF0YSosIGZsb2F0IGZvbnRTaXplKSA9IDA7Ci0gICAgICAgIHZp
cnR1YWwgZmxvYXQgd2lkdGhGb3JTVkdHbHlwaChHbHlwaCwgZmxvYXQgZm9udFNpemUpIGNvbnN0
ID0gMDsKLSAgICAgICAgdmlydHVhbCBib29sIGZpbGxTVkdHbHlwaFBhZ2UoR2x5cGhQYWdlKiwg
dW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIsIHVuc2lnbmVk
IGJ1ZmZlckxlbmd0aCwgY29uc3QgU2ltcGxlRm9udERhdGEqKSBjb25zdCA9IDA7Ci0gICAgfTsK
LQotICAgIC8vIFVzZWQgdG8gY3JlYXRlIHBsYXRmb3JtIGZvbnRzLgotICAgIHN0YXRpYyBSZWY8
U2ltcGxlRm9udERhdGE+IGNyZWF0ZShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURh
dGEsIGJvb2wgaXNDdXN0b21Gb250ID0gZmFsc2UsIGJvb2wgaXNMb2FkaW5nID0gZmFsc2UsIGJv
b2wgaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjayA9IGZhbHNlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgU2ltcGxlRm9udERhdGEocGxhdGZvcm1EYXRhLCBpc0N1c3RvbUZv
bnQsIGlzTG9hZGluZywgaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaykpOwotICAgIH0KLQotICAg
IC8vIFVzZWQgdG8gY3JlYXRlIFNWRyBGb250cy4KLSAgICBzdGF0aWMgUmVmPFNpbXBsZUZvbnRE
YXRhPiBjcmVhdGUoc3RkOjp1bmlxdWVfcHRyPFNWR0RhdGE+IHN2Z0RhdGEsIGZsb2F0IGZvbnRT
aXplLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2ltcGxlRm9udERhdGEoV1RGOjptb3ZlKHN2Z0Rh
dGEpLCBmb250U2l6ZSwgc3ludGhldGljQm9sZCwgc3ludGhldGljSXRhbGljKSk7Ci0gICAgfQot
Ci0gICAgflNpbXBsZUZvbnREYXRhKCk7Ci0KLSAgICBzdGF0aWMgY29uc3QgU2ltcGxlRm9udERh
dGEqIHN5c3RlbUZhbGxiYWNrKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBTaW1w
bGVGb250RGF0YSo+KC0xKTsgfQotCi0gICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZv
cm1EYXRhKCkgY29uc3QgeyByZXR1cm4gbV9wbGF0Zm9ybURhdGE7IH0KLSAgICBjb25zdCBPcGVu
VHlwZU1hdGhEYXRhKiBtYXRoRGF0YSgpIGNvbnN0OwotI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJU
SUNBTCkKLSAgICBjb25zdCBPcGVuVHlwZVZlcnRpY2FsRGF0YSogdmVydGljYWxEYXRhKCkgY29u
c3QgeyByZXR1cm4gbV92ZXJ0aWNhbERhdGEuZ2V0KCk7IH0KLSNlbmRpZgotCi0gICAgUGFzc1Jl
ZlB0cjxTaW1wbGVGb250RGF0YT4gc21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0
aW9uJikgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gZW1waGFzaXNNYXJr
Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJikgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxT
aW1wbGVGb250RGF0YT4gYnJva2VuSWRlb2dyYXBoRm9udERhdGEoKSBjb25zdDsKLSAgICBQYXNz
UmVmUHRyPFNpbXBsZUZvbnREYXRhPiBub25TeW50aGV0aWNJdGFsaWNGb250RGF0YSgpIGNvbnN0
OwotCi0gICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gdmFyaWFudEZvbnREYXRhKGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIEZvbnREYXRhVmFyaWFudCB2YXJpYW50KSBj
b25zdAotICAgIHsKLSAgICAgICAgc3dpdGNoICh2YXJpYW50KSB7Ci0gICAgICAgIGNhc2UgU21h
bGxDYXBzVmFyaWFudDoKLSAgICAgICAgICAgIHJldHVybiBzbWFsbENhcHNGb250RGF0YShkZXNj
cmlwdGlvbik7Ci0gICAgICAgIGNhc2UgRW1waGFzaXNNYXJrVmFyaWFudDoKLSAgICAgICAgICAg
IHJldHVybiBlbXBoYXNpc01hcmtGb250RGF0YShkZXNjcmlwdGlvbik7Ci0gICAgICAgIGNhc2Ug
QnJva2VuSWRlb2dyYXBoVmFyaWFudDoKLSAgICAgICAgICAgIHJldHVybiBicm9rZW5JZGVvZ3Jh
cGhGb250RGF0YSgpOwotICAgICAgICBjYXNlIEF1dG9WYXJpYW50OgotICAgICAgICBjYXNlIE5v
cm1hbFZhcmlhbnQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8U2ltcGxlRm9udERh
dGEqPih0aGlzKTsKLSAgICB9Ci0KLSAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiB2ZXJ0
aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250RGF0YSgpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8U2lt
cGxlRm9udERhdGE+IHVwcmlnaHRPcmllbnRhdGlvbkZvbnREYXRhKCkgY29uc3Q7Ci0KLSAgICBi
b29sIGhhc1ZlcnRpY2FsR2x5cGhzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNWZXJ0aWNhbEdseXBo
czsgfQotICAgIGJvb2wgaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaygpIGNvbnN0IHsgcmV0dXJu
IG1faXNUZXh0T3JpZW50YXRpb25GYWxsYmFjazsgfQotCi0gICAgRm9udE1ldHJpY3MmIGZvbnRN
ZXRyaWNzKCkgeyByZXR1cm4gbV9mb250TWV0cmljczsgfQotICAgIGNvbnN0IEZvbnRNZXRyaWNz
JiBmb250TWV0cmljcygpIGNvbnN0IHsgcmV0dXJuIG1fZm9udE1ldHJpY3M7IH0KLSAgICBmbG9h
dCBzaXplUGVyVW5pdCgpIGNvbnN0IHsgcmV0dXJuIHBsYXRmb3JtRGF0YSgpLnNpemUoKSAvIChm
b250TWV0cmljcygpLnVuaXRzUGVyRW0oKSA/IGZvbnRNZXRyaWNzKCkudW5pdHNQZXJFbSgpIDog
MSk7IH0KLQotICAgIGZsb2F0IG1heENoYXJXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4Q2hh
cldpZHRoOyB9Ci0gICAgdm9pZCBzZXRNYXhDaGFyV2lkdGgoZmxvYXQgbWF4Q2hhcldpZHRoKSB7
IG1fbWF4Q2hhcldpZHRoID0gbWF4Q2hhcldpZHRoOyB9Ci0KLSAgICBmbG9hdCBhdmdDaGFyV2lk
dGgoKSBjb25zdCB7IHJldHVybiBtX2F2Z0NoYXJXaWR0aDsgfQotICAgIHZvaWQgc2V0QXZnQ2hh
cldpZHRoKGZsb2F0IGF2Z0NoYXJXaWR0aCkgeyBtX2F2Z0NoYXJXaWR0aCA9IGF2Z0NoYXJXaWR0
aDsgfQotCi0gICAgRmxvYXRSZWN0IGJvdW5kc0ZvckdseXBoKEdseXBoKSBjb25zdDsKLSAgICBm
bG9hdCB3aWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdDsKLSAgICBGbG9hdFJlY3QgcGxh
dGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCkgY29uc3Q7Ci0gICAgZmxvYXQgcGxhdGZvcm1XaWR0
aEZvckdseXBoKEdseXBoKSBjb25zdDsKLQotICAgIGZsb2F0IHNwYWNlV2lkdGgoKSBjb25zdCB7
IHJldHVybiBtX3NwYWNlV2lkdGg7IH0KLSAgICBmbG9hdCBhZGp1c3RlZFNwYWNlV2lkdGgoKSBj
b25zdCB7IHJldHVybiBtX2FkanVzdGVkU3BhY2VXaWR0aDsgfQotICAgIHZvaWQgc2V0U3BhY2VX
aWR0aHMoZmxvYXQgc3BhY2VXaWR0aCkKLSAgICB7Ci0gICAgICAgIG1fc3BhY2VXaWR0aCA9IHNw
YWNlV2lkdGg7Ci0gICAgICAgIG1fYWRqdXN0ZWRTcGFjZVdpZHRoID0gc3BhY2VXaWR0aDsKLSAg
ICB9Ci0KLSNpZiBVU0UoQ0cpIHx8IFVTRShDQUlSTykKLSAgICBmbG9hdCBzeW50aGV0aWNCb2xk
T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9zeW50aGV0aWNCb2xkT2Zmc2V0OyB9Ci0jZW5kaWYK
LQotICAgIEdseXBoIHNwYWNlR2x5cGgoKSBjb25zdCB7IHJldHVybiBtX3NwYWNlR2x5cGg7IH0K
LSAgICB2b2lkIHNldFNwYWNlR2x5cGgoR2x5cGggc3BhY2VHbHlwaCkgeyBtX3NwYWNlR2x5cGgg
PSBzcGFjZUdseXBoOyB9Ci0gICAgR2x5cGggemVyb1dpZHRoU3BhY2VHbHlwaCgpIGNvbnN0IHsg
cmV0dXJuIG1femVyb1dpZHRoU3BhY2VHbHlwaDsgfQotICAgIHZvaWQgc2V0WmVyb1dpZHRoU3Bh
Y2VHbHlwaChHbHlwaCBzcGFjZUdseXBoKSB7IG1femVyb1dpZHRoU3BhY2VHbHlwaCA9IHNwYWNl
R2x5cGg7IH0KLSAgICBib29sIGlzWmVyb1dpZHRoU3BhY2VHbHlwaChHbHlwaCBnbHlwaCkgY29u
c3QgeyByZXR1cm4gZ2x5cGggPT0gbV96ZXJvV2lkdGhTcGFjZUdseXBoICYmIGdseXBoOyB9Ci0g
ICAgR2x5cGggemVyb0dseXBoKCkgY29uc3QgeyByZXR1cm4gbV96ZXJvR2x5cGg7IH0KLSAgICB2
b2lkIHNldFplcm9HbHlwaChHbHlwaCB6ZXJvR2x5cGgpIHsgbV96ZXJvR2x5cGggPSB6ZXJvR2x5
cGg7IH0KLQotICAgIEdseXBoRGF0YSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMikgY29u
c3Q7Ci0gICAgR2x5cGggZ2x5cGhGb3JDaGFyYWN0ZXIoVUNoYXIzMikgY29uc3Q7Ci0KLSAgICBS
ZWZQdHI8U2ltcGxlRm9udERhdGE+IHN5c3RlbUZhbGxiYWNrRm9udERhdGFGb3JDaGFyYWN0ZXIo
VUNoYXIzMiwgY29uc3QgRm9udERlc2NyaXB0aW9uJiwgYm9vbCBpc0ZvclBsYXRmb3JtRm9udCkg
Y29uc3Q7Ci0KLSAgICBjb25zdCBHbHlwaFBhZ2UqIGdseXBoUGFnZSh1bnNpZ25lZCBwYWdlTnVt
YmVyKSBjb25zdDsKLQotICAgIHZvaWQgZGV0ZXJtaW5lUGl0Y2goKTsKLSAgICBQaXRjaCBwaXRj
aCgpIGNvbnN0IHsgcmV0dXJuIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPyBGaXhlZFBpdGNoIDogVmFy
aWFibGVQaXRjaDsgfQotCi0gICAgY29uc3QgU1ZHRGF0YSogc3ZnRGF0YSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3ZnRGF0YS5nZXQoKTsgfQotICAgIGJvb2wgaXNTVkdGb250KCkgY29uc3QgeyByZXR1
cm4gISFtX3N2Z0RhdGE7IH0KLQotICAgIGJvb2wgaXNDdXN0b21Gb250KCkgY29uc3QgeyByZXR1
cm4gbV9pc0N1c3RvbUZvbnQ7IH0KLSAgICBib29sIGlzTG9hZGluZygpIGNvbnN0IHsgcmV0dXJu
IG1faXNMb2FkaW5nOyB9Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgU3RyaW5nIGRlc2NyaXB0aW9u
KCkgY29uc3Q7Ci0jZW5kaWYKLQotI2lmIFVTRShBUFBLSVQpCi0gICAgY29uc3QgU2ltcGxlRm9u
dERhdGEqIGNvbXBvc2l0ZUZvbnRSZWZlcmVuY2VGb250RGF0YShOU0ZvbnQgKmtleSkgY29uc3Q7
Ci0gICAgTlNGb250KiBnZXROU0ZvbnQoKSBjb25zdCB7IHJldHVybiBtX3BsYXRmb3JtRGF0YS5u
c0ZvbnQoKTsgfQotI2VuZGlmCi0KLSNpZiBQTEFURk9STShJT1MpCi0gICAgQ1RGb250UmVmIGdl
dENURm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fcGxhdGZvcm1EYXRhLmZvbnQoKTsgfQotICAgIGJv
b2wgc2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGROb3RC
ZVVzZWRGb3JBcmFiaWM7IH07Ci0jZW5kaWYKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBDRkRp
Y3Rpb25hcnlSZWYgZ2V0Q0ZTdHJpbmdBdHRyaWJ1dGVzKFR5cGVzZXR0aW5nRmVhdHVyZXMsIEZv
bnRPcmllbnRhdGlvbikgY29uc3Q7Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBV
U0UoSEFSRkJVWlopCi0gICAgYm9vbCBjYW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5j
ZShjb25zdCBVQ2hhciosIHNpemVfdCkgY29uc3Q7Ci0jZW5kaWYKLQotICAgIGJvb2wgYXBwbHlU
cmFuc2Zvcm1zKEdseXBoQnVmZmVyR2x5cGgqLCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCBzaXplX3Qg
Z2x5cGhDb3VudCwgVHlwZXNldHRpbmdGZWF0dXJlcykgY29uc3Q7Ci0KLSNpZiBQTEFURk9STShX
SU4pCi0gICAgYm9vbCBpc1N5c3RlbUZvbnQoKSBjb25zdCB7IHJldHVybiBtX2lzU3lzdGVtRm9u
dDsgfQotICAgIFNDUklQVF9GT05UUFJPUEVSVElFUyogc2NyaXB0Rm9udFByb3BlcnRpZXMoKSBj
b25zdDsKLSAgICBTQ1JJUFRfQ0FDSEUqIHNjcmlwdENhY2hlKCkgY29uc3QgeyByZXR1cm4gJm1f
c2NyaXB0Q2FjaGU7IH0KLSAgICBzdGF0aWMgdm9pZCBzZXRTaG91bGRBcHBseU1hY0FzY2VudEhh
Y2soYm9vbCk7Ci0gICAgc3RhdGljIGJvb2wgc2hvdWxkQXBwbHlNYWNBc2NlbnRIYWNrKCk7Ci0g
ICAgc3RhdGljIGZsb2F0IGFzY2VudENvbnNpZGVyaW5nTWFjQXNjZW50SGFjayhjb25zdCBXQ0hB
UiosIGZsb2F0IGFzY2VudCwgZmxvYXQgZGVzY2VudCk7Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAg
ICBTaW1wbGVGb250RGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiwgYm9vbCBpc0N1c3RvbUZv
bnQgPSBmYWxzZSwgYm9vbCBpc0xvYWRpbmcgPSBmYWxzZSwgYm9vbCBpc1RleHRPcmllbnRhdGlv
bkZhbGxiYWNrID0gZmFsc2UpOwotCi0gICAgU2ltcGxlRm9udERhdGEoc3RkOjp1bmlxdWVfcHRy
PFNWR0RhdGE+LCBmbG9hdCBmb250U2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRo
ZXRpY0l0YWxpYyk7Ci0KLSAgICB2b2lkIHBsYXRmb3JtSW5pdCgpOwotICAgIHZvaWQgcGxhdGZv
cm1HbHlwaEluaXQoKTsKLSAgICB2b2lkIHBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpOwotICAgIHZv
aWQgcGxhdGZvcm1EZXN0cm95KCk7Ci0KLSAgICB2b2lkIGluaXRDaGFyV2lkdGhzKCk7Ci0KLSAg
ICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBjcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBG
b250RGVzY3JpcHRpb24mLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3Q7Ci0gICAgUGFzc1JlZlB0
cjxTaW1wbGVGb250RGF0YT4gcGxhdGZvcm1DcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGb250
RGVzY3JpcHRpb24mLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3Q7Ci0KLSAgICB2b2lkIHJlbW92
ZUZyb21TeXN0ZW1GYWxsYmFja0NhY2hlKCk7Ci0KLSNpZiBQTEFURk9STShXSU4pCi0gICAgdm9p
ZCBpbml0R0RJRm9udCgpOwotICAgIHZvaWQgcGxhdGZvcm1Db21tb25EZXN0cm95KCk7Ci0gICAg
RmxvYXRSZWN0IGJvdW5kc0ZvckdESUdseXBoKEdseXBoIGdseXBoKSBjb25zdDsKLSAgICBmbG9h
dCB3aWR0aEZvckdESUdseXBoKEdseXBoIGdseXBoKSBjb25zdDsKLSNlbmRpZgotCi0jaWYgVVNF
KENHKQotICAgIGJvb2wgY2FuVXNlRmFzdEdseXBoQWR2YW5jZUdldHRlcihHbHlwaCBnbHlwaCwg
Q0dTaXplJiBhZHZhbmNlLCBib29sJiBwb3B1bGF0ZWRBZHZhbmNlKSBjb25zdDsKLSAgICBDR0Zv
bnRSZW5kZXJpbmdTdHlsZSByZW5kZXJpbmdTdHlsZSgpIGNvbnN0OwotICAgIGJvb2wgYWR2YW5j
ZUZvckNvbG9yQml0bWFwRm9udChHbHlwaCwgQ0dTaXplJiByZXN1bHQpIGNvbnN0OyAvLyBSZXR1
cm5zIHRydWUgaWYgdGhlIGZvbnQgaXMgYSBjb2xvciBiaXRtYXAgZm9udAotI2VuZGlmCi0KLSAg
ICBGb250TWV0cmljcyBtX2ZvbnRNZXRyaWNzOwotICAgIGZsb2F0IG1fbWF4Q2hhcldpZHRoOwot
ICAgIGZsb2F0IG1fYXZnQ2hhcldpZHRoOwotCi0gICAgRm9udFBsYXRmb3JtRGF0YSBtX3BsYXRm
b3JtRGF0YTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U1ZHRGF0YT4gbV9zdmdEYXRhOwotCi0gICAg
bXV0YWJsZSBSZWZQdHI8R2x5cGhQYWdlPiBtX2dseXBoUGFnZVplcm87Ci0gICAgbXV0YWJsZSBI
YXNoTWFwPHVuc2lnbmVkLCBSZWZQdHI8R2x5cGhQYWdlPj4gbV9nbHlwaFBhZ2VzOwotICAgIG11
dGFibGUgc3RkOjp1bmlxdWVfcHRyPEdseXBoTWV0cmljc01hcDxGbG9hdFJlY3Q+PiBtX2dseXBo
VG9Cb3VuZHNNYXA7Ci0gICAgbXV0YWJsZSBHbHlwaE1ldHJpY3NNYXA8ZmxvYXQ+IG1fZ2x5cGhU
b1dpZHRoTWFwOwotCi0gICAgYm9vbCBtX3RyZWF0QXNGaXhlZFBpdGNoOwotICAgIGJvb2wgbV9p
c0N1c3RvbUZvbnQ7ICAvLyBXaGV0aGVyIG9yIG5vdCB3ZSBhcmUgY3VzdG9tIGZvbnQgbG9hZGVk
IHZpYSBAZm9udC1mYWNlCi0gICAgYm9vbCBtX2lzTG9hZGluZzsgLy8gV2hldGhlciBvciBub3Qg
dGhpcyBjdXN0b20gZm9udCBpcyBzdGlsbCBpbiB0aGUgYWN0IG9mIGxvYWRpbmcuCi0KLSAgICBi
b29sIG1faXNUZXh0T3JpZW50YXRpb25GYWxsYmFjazsKLSAgICBib29sIG1faXNCcm9rZW5JZGVv
Z3JhcGhGYWxsYmFjazsKLQotICAgIGJvb2wgbV9pc1VzZWRJblN5c3RlbUZhbGxiYWNrQ2FjaGUg
eyBmYWxzZSB9OwotCi0gICAgbXV0YWJsZSBSZWZQdHI8T3BlblR5cGVNYXRoRGF0YT4gbV9tYXRo
RGF0YTsKLSNpZiBFTkFCTEUoT1BFTlRZUEVfVkVSVElDQUwpCi0gICAgUmVmUHRyPE9wZW5UeXBl
VmVydGljYWxEYXRhPiBtX3ZlcnRpY2FsRGF0YTsKLSNlbmRpZgotICAgIGJvb2wgbV9oYXNWZXJ0
aWNhbEdseXBoczsKLQotICAgIEdseXBoIG1fc3BhY2VHbHlwaDsKLSAgICBmbG9hdCBtX3NwYWNl
V2lkdGg7Ci0gICAgR2x5cGggbV96ZXJvR2x5cGg7Ci0gICAgZmxvYXQgbV9hZGp1c3RlZFNwYWNl
V2lkdGg7Ci0KLSAgICBHbHlwaCBtX3plcm9XaWR0aFNwYWNlR2x5cGg7Ci0KLSAgICBzdHJ1Y3Qg
RGVyaXZlZEZvbnREYXRhIHsKLSAgICAgICAgZXhwbGljaXQgRGVyaXZlZEZvbnREYXRhKGJvb2wg
Y3VzdG9tKQotICAgICAgICAgICAgOiBmb3JDdXN0b21Gb250KGN1c3RvbSkKLSAgICAgICAgewot
ICAgICAgICB9Ci0gICAgICAgIH5EZXJpdmVkRm9udERhdGEoKTsKLQotICAgICAgICBib29sIGZv
ckN1c3RvbUZvbnQ7Ci0gICAgICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gc21hbGxDYXBzOwot
ICAgICAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IGVtcGhhc2lzTWFyazsKLSAgICAgICAgUmVm
UHRyPFNpbXBsZUZvbnREYXRhPiBicm9rZW5JZGVvZ3JhcGg7Ci0gICAgICAgIFJlZlB0cjxTaW1w
bGVGb250RGF0YT4gdmVydGljYWxSaWdodE9yaWVudGF0aW9uOwotICAgICAgICBSZWZQdHI8U2lt
cGxlRm9udERhdGE+IHVwcmlnaHRPcmllbnRhdGlvbjsKLSAgICAgICAgUmVmUHRyPFNpbXBsZUZv
bnREYXRhPiBub25TeW50aGV0aWNJdGFsaWM7Ci0jaWYgVVNFKEFQUEtJVCkKLSAgICAgICAgSGFz
aE1hcDxOU0ZvbnQqLCBSZWZQdHI8U2ltcGxlRm9udERhdGE+PiBjb21wb3NpdGVGb250UmVmZXJl
bmNlczsKLSNlbmRpZgotICAgIH07Ci0KLSAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxEZXJp
dmVkRm9udERhdGE+IG1fZGVyaXZlZEZvbnREYXRhOwotCi0jaWYgVVNFKENHKSB8fCBVU0UoQ0FJ
Uk8pCi0gICAgZmxvYXQgbV9zeW50aGV0aWNCb2xkT2Zmc2V0OwotI2VuZGlmCi0KLSNpZiBQTEFU
Rk9STShDT0NPQSkKLSAgICBtdXRhYmxlIEhhc2hNYXA8dW5zaWduZWQsIFJldGFpblB0cjxDRkRp
Y3Rpb25hcnlSZWY+PiBtX0NGU3RyaW5nQXR0cmlidXRlczsKLSNlbmRpZgotCi0jaWYgUExBVEZP
Uk0oQ09DT0EpIHx8IFVTRShIQVJGQlVaWikKLSAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxI
YXNoTWFwPFN0cmluZywgYm9vbD4+IG1fY29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2VTdXBwb3J0
OwotI2VuZGlmCi0KLSNpZiBQTEFURk9STShXSU4pCi0gICAgYm9vbCBtX2lzU3lzdGVtRm9udDsK
LSAgICBtdXRhYmxlIFNDUklQVF9DQUNIRSBtX3NjcmlwdENhY2hlOwotICAgIG11dGFibGUgU0NS
SVBUX0ZPTlRQUk9QRVJUSUVTKiBtX3NjcmlwdEZvbnRQcm9wZXJ0aWVzOwotI2VuZGlmCi0jaWYg
UExBVEZPUk0oSU9TKQotICAgIGJvb2wgbV9zaG91bGROb3RCZVVzZWRGb3JBcmFiaWM7Ci0jZW5k
aWYKLX07Ci0KLUFMV0FZU19JTkxJTkUgRmxvYXRSZWN0IFNpbXBsZUZvbnREYXRhOjpib3VuZHNG
b3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKLXsKLSAgICBpZiAoaXNaZXJvV2lkdGhTcGFjZUds
eXBoKGdseXBoKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwotCi0gICAgRmxvYXRSZWN0
IGJvdW5kczsKLSAgICBpZiAobV9nbHlwaFRvQm91bmRzTWFwKSB7Ci0gICAgICAgIGJvdW5kcyA9
IG1fZ2x5cGhUb0JvdW5kc01hcC0+bWV0cmljc0ZvckdseXBoKGdseXBoKTsKLSAgICAgICAgaWYg
KGJvdW5kcy53aWR0aCgpICE9IGNHbHlwaFNpemVVbmtub3duKQotICAgICAgICAgICAgcmV0dXJu
IGJvdW5kczsKLSAgICB9Ci0KLSAgICBib3VuZHMgPSBwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKGds
eXBoKTsKLSAgICBpZiAoIW1fZ2x5cGhUb0JvdW5kc01hcCkKLSAgICAgICAgbV9nbHlwaFRvQm91
bmRzTWFwID0gc3RkOjptYWtlX3VuaXF1ZTxHbHlwaE1ldHJpY3NNYXA8RmxvYXRSZWN0Pj4oKTsK
LSAgICBtX2dseXBoVG9Cb3VuZHNNYXAtPnNldE1ldHJpY3NGb3JHbHlwaChnbHlwaCwgYm91bmRz
KTsKLSAgICByZXR1cm4gYm91bmRzOwotfQotCi1BTFdBWVNfSU5MSU5FIGZsb2F0IFNpbXBsZUZv
bnREYXRhOjp3aWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAotewotICAgIGlmIChpc1pl
cm9XaWR0aFNwYWNlR2x5cGgoZ2x5cGgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGZsb2F0
IHdpZHRoID0gbV9nbHlwaFRvV2lkdGhNYXAubWV0cmljc0ZvckdseXBoKGdseXBoKTsKLSAgICBp
ZiAod2lkdGggIT0gY0dseXBoU2l6ZVVua25vd24pCi0gICAgICAgIHJldHVybiB3aWR0aDsKLQot
ICAgIGlmIChpc1NWR0ZvbnQoKSkKLSAgICAgICAgd2lkdGggPSBtX3N2Z0RhdGEtPndpZHRoRm9y
U1ZHR2x5cGgoZ2x5cGgsIG1fcGxhdGZvcm1EYXRhLnNpemUoKSk7Ci0jaWYgRU5BQkxFKE9QRU5U
WVBFX1ZFUlRJQ0FMKQotICAgIGVsc2UgaWYgKG1fdmVydGljYWxEYXRhKQotI2lmIFVTRShDRykg
fHwgVVNFKENBSVJPKQotICAgICAgICB3aWR0aCA9IG1fdmVydGljYWxEYXRhLT5hZHZhbmNlSGVp
Z2h0KHRoaXMsIGdseXBoKSArIG1fc3ludGhldGljQm9sZE9mZnNldDsKLSNlbHNlCi0gICAgICAg
IHdpZHRoID0gbV92ZXJ0aWNhbERhdGEtPmFkdmFuY2VIZWlnaHQodGhpcywgZ2x5cGgpOwotI2Vu
ZGlmCi0jZW5kaWYKLSAgICBlbHNlCi0gICAgICAgIHdpZHRoID0gcGxhdGZvcm1XaWR0aEZvckds
eXBoKGdseXBoKTsKLQotICAgIG1fZ2x5cGhUb1dpZHRoTWFwLnNldE1ldHJpY3NGb3JHbHlwaChn
bHlwaCwgd2lkdGgpOwotICAgIHJldHVybiB3aWR0aDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gU2ltcGxlRm9udERhdGFfaApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uaAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Niw3ICszNiw3IEBAIGNsYXNzIEZvbnRDYXNjYWRlOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0Owog
Y2xhc3MgR2x5cGhCdWZmZXI7CiBjbGFzcyBHbHlwaFRvUGF0aFRyYW5zbGF0b3I7Ci1jbGFzcyBT
aW1wbGVGb250RGF0YTsKK2NsYXNzIEZvbnQ7CiAKIHN0cnVjdCBHbHlwaERhdGE7CiBzdHJ1Y3Qg
V2lkdGhJdGVyYXRvcjsKQEAgLTE5OCwxMCArMTk4LDEwIEBAIHB1YmxpYzoKIAogI2lmIEVOQUJM
RShTVkdfRk9OVFMpCiAgICAgICAgIHZpcnR1YWwgR2x5cGhEYXRhIGdseXBoRGF0YUZvckNoYXJh
Y3Rlcihjb25zdCBGb250Q2FzY2FkZSYsIFdpZHRoSXRlcmF0b3ImLCBVQ2hhcjMyIGNoYXJhY3Rl
ciwgYm9vbCBtaXJyb3IsIGludCBjdXJyZW50Q2hhcmFjdGVyLCB1bnNpZ25lZCYgYWR2YW5jZUxl
bmd0aCwgU3RyaW5nJiBub3JtYWxpemVkU3BhY2VzU3RyaW5nQ2FjaGUpID0gMDsKLSAgICAgICAg
dmlydHVhbCB2b2lkIGRyYXdTVkdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgU2ltcGxl
Rm9udERhdGEqLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBmcm9tLCBpbnQgdG8sIGNvbnN0IEZs
b2F0UG9pbnQmKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkcmF3U1ZHR2x5cGhz
KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZvbnQqLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBm
cm9tLCBpbnQgdG8sIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1
YWwgZmxvYXQgZmxvYXRXaWR0aFVzaW5nU1ZHRm9udChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0
IFRleHRSdW4mLCBpbnQmIGNoYXJzQ29uc3VtZWQsIFN0cmluZyYgZ2x5cGhOYW1lKSBjb25zdCA9
IDA7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBhcHBseVNWR0tlcm5pbmcoY29uc3QgU2ltcGxlRm9u
dERhdGEqLCBXaWR0aEl0ZXJhdG9yJiwgR2x5cGhCdWZmZXIqLCBpbnQgZnJvbSkgY29uc3QgPSAw
OwotICAgICAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxHbHlwaFRvUGF0aFRyYW5zbGF0b3I+
IGNyZWF0ZUdseXBoVG9QYXRoVHJhbnNsYXRvcihjb25zdCBTaW1wbGVGb250RGF0YSYsIGNvbnN0
IFRleHRSdW4qLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBj
b25zdCBGbG9hdFBvaW50JikgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlT
VkdLZXJuaW5nKGNvbnN0IEZvbnQqLCBXaWR0aEl0ZXJhdG9yJiwgR2x5cGhCdWZmZXIqLCBpbnQg
ZnJvbSkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxHbHlwaFRv
UGF0aFRyYW5zbGF0b3I+IGNyZWF0ZUdseXBoVG9QYXRoVHJhbnNsYXRvcihjb25zdCBGb250Jiwg
Y29uc3QgVGV4dFJ1biosIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCBudW1HbHlw
aHMsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdCA9IDA7CiAjZW5kaWYKICAgICB9OwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9y
LmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvV2lkdGhJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDEwICsyMiwxMCBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldpZHRoSXRlcmF0b3IuaCIKIAorI2luY2x1
ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkdseXBoQnVm
ZmVyLmgiCiAjaW5jbHVkZSAiTGF0aW4xVGV4dEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiU2ltcGxl
Rm9udERhdGEuaCIKICNpbmNsdWRlICJTdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IuaCIK
ICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCkBAIC0zNCw3ICszNCw3IEBAIHVzaW5nIG5h
bWVzcGFjZSBVbmljb2RlOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVdpZHRoSXRlcmF0b3I6
OldpZHRoSXRlcmF0b3IoY29uc3QgRm9udENhc2NhZGUqIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1
biwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBib29sIGFj
Y291bnRGb3JHbHlwaEJvdW5kcywgYm9vbCBmb3JUZXh0RW1waGFzaXMpCitXaWR0aEl0ZXJhdG9y
OjpXaWR0aEl0ZXJhdG9yKGNvbnN0IEZvbnRDYXNjYWRlKiBmb250LCBjb25zdCBUZXh0UnVuJiBy
dW4sIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzLCBib29sIGFjY291bnRGb3JH
bHlwaEJvdW5kcywgYm9vbCBmb3JUZXh0RW1waGFzaXMpCiAgICAgOiBtX2ZvbnQoZm9udCkKICAg
ICAsIG1fcnVuKHJ1bikKICAgICAsIG1fY3VycmVudENoYXJhY3RlcigwKQpAQCAtMTAwLDcgKzEw
MCw3IEBAIHB1YmxpYzoKIAogdHlwZWRlZiBWZWN0b3I8c3RkOjpwYWlyPGludCwgT3JpZ2luYWxB
ZHZhbmNlc0ZvckNoYXJhY3RlclRyZWF0ZWRBc1NwYWNlPiwgNjQ+IENoYXJhY3RlcnNUcmVhdGVk
QXNTcGFjZTsKIAotc3RhdGljIGlubGluZSBmbG9hdCBhcHBseUZvbnRUcmFuc2Zvcm1zKEdseXBo
QnVmZmVyKiBnbHlwaEJ1ZmZlciwgYm9vbCBsdHIsIGludCYgbGFzdEdseXBoQ291bnQsIGNvbnN0
IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwgV2lkdGhJdGVyYXRvciYgaXRlcmF0b3IsIFR5cGVz
ZXR0aW5nRmVhdHVyZXMgdHlwZXNldHRpbmdGZWF0dXJlcywgQ2hhcmFjdGVyc1RyZWF0ZWRBc1Nw
YWNlJiBjaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UpCitzdGF0aWMgaW5saW5lIGZsb2F0IGFwcGx5
Rm9udFRyYW5zZm9ybXMoR2x5cGhCdWZmZXIqIGdseXBoQnVmZmVyLCBib29sIGx0ciwgaW50JiBs
YXN0R2x5cGhDb3VudCwgY29uc3QgRm9udCogZm9udCwgV2lkdGhJdGVyYXRvciYgaXRlcmF0b3Is
IFR5cGVzZXR0aW5nRmVhdHVyZXMgdHlwZXNldHRpbmdGZWF0dXJlcywgQ2hhcmFjdGVyc1RyZWF0
ZWRBc1NwYWNlJiBjaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UpCiB7CiAgICAgQVNTRVJUKHR5cGVz
ZXR0aW5nRmVhdHVyZXMgJiAoS2VybmluZyB8IExpZ2F0dXJlcykpOwogCkBAIC0xMjMsMTYgKzEy
MywxNiBAQCBzdGF0aWMgaW5saW5lIGZsb2F0IGFwcGx5Rm9udFRyYW5zZm9ybXMoCiAgICAgVU5V
U0VEX1BBUkFNKGl0ZXJhdG9yKTsKICNlbHNlCiAgICAgLy8gV2UgbmVlZCB0byBoYW5kbGUgdHJh
bnNmb3JtcyBvbiBTVkcgZm9udHMgaW50ZXJuYWxseSwgc2luY2UgdGhleSBhcmUgcmVuZGVyZWQg
aW50ZXJuYWxseS4KLSAgICBpZiAoZm9udERhdGEtPmlzU1ZHRm9udCgpKSB7CisgICAgaWYgKGZv
bnQtPmlzU1ZHRm9udCgpKSB7CiAgICAgICAgIC8vIFNWRyBmb250IGxpZ2F0dXJlcyBhcmUgaGFu
ZGxlZCBkdXJpbmcgZ2x5cGggc2VsZWN0aW9uLCBvbmx5IGtlcm5pbmcgcmVtYWluaW5nLgogICAg
ICAgICBpZiAoaXRlcmF0b3IucnVuKCkucmVuZGVyaW5nQ29udGV4dCgpICYmICh0eXBlc2V0dGlu
Z0ZlYXR1cmVzICYgS2VybmluZykpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBw
YXNzIHRoZSBuZWNlc3NhcnkgY29udGV4dCBkb3duIHRvIHRoaXMgbGV2ZWwgc28gd2UgY2FuIGxh
emlseSBjcmVhdGUgcmVuZGVyaW5nIGNvbnRleHRzIGF0IHRoaXMgcG9pbnQuCiAgICAgICAgICAg
ICAvLyBIb3dldmVyLCBhIGxhcmdlciByZWZhY3RvcmluZyBvZiBTVkcgZm9udHMgbWlnaHQgbmVj
ZXNzYXJ5IHRvIHNpZGVzdGVwIHRoaXMgcHJvYmxlbSBjb21wbGV0ZWx5LgotICAgICAgICAgICAg
aXRlcmF0b3IucnVuKCkucmVuZGVyaW5nQ29udGV4dCgpLT5hcHBseVNWR0tlcm5pbmcoZm9udERh
dGEsIGl0ZXJhdG9yLCBnbHlwaEJ1ZmZlciwgbGFzdEdseXBoQ291bnQpOworICAgICAgICAgICAg
aXRlcmF0b3IucnVuKCkucmVuZGVyaW5nQ29udGV4dCgpLT5hcHBseVNWR0tlcm5pbmcoZm9udCwg
aXRlcmF0b3IsIGdseXBoQnVmZmVyLCBsYXN0R2x5cGhDb3VudCk7CiAgICAgICAgIH0KICAgICB9
IGVsc2UKICNlbmRpZgotICAgICAgICBmb250RGF0YS0+YXBwbHlUcmFuc2Zvcm1zKGdseXBoQnVm
ZmVyLT5nbHlwaHMobGFzdEdseXBoQ291bnQpLCBhZHZhbmNlcyArIGxhc3RHbHlwaENvdW50LCBn
bHlwaEJ1ZmZlclNpemUgLSBsYXN0R2x5cGhDb3VudCwgdHlwZXNldHRpbmdGZWF0dXJlcyk7Cisg
ICAgICAgIGZvbnQtPmFwcGx5VHJhbnNmb3JtcyhnbHlwaEJ1ZmZlci0+Z2x5cGhzKGxhc3RHbHlw
aENvdW50KSwgYWR2YW5jZXMgKyBsYXN0R2x5cGhDb3VudCwgZ2x5cGhCdWZmZXJTaXplIC0gbGFz
dEdseXBoQ291bnQsIHR5cGVzZXR0aW5nRmVhdHVyZXMpOwogCiAgICAgaWYgKCFsdHIpCiAgICAg
ICAgIGdseXBoQnVmZmVyLT5yZXZlcnNlKGxhc3RHbHlwaENvdW50LCBnbHlwaEJ1ZmZlclNpemUg
LSBsYXN0R2x5cGhDb3VudCk7CkBAIC0xNjYsOCArMTY2LDggQEAgaW5saW5lIHVuc2lnbmVkIFdp
ZHRoSXRlcmF0b3I6OmFkdmFuY2VJbgogICAgIGZsb2F0IGxhc3RSb3VuZGluZ1dpZHRoID0gbV9m
aW5hbFJvdW5kaW5nV2lkdGg7CiAgICAgRmxvYXRSZWN0IGJvdW5kczsKIAotICAgIGNvbnN0IFNp
bXBsZUZvbnREYXRhJiBwcmltYXJ5Rm9udERhdGEgPSBtX2ZvbnQtPnByaW1hcnlGb250RGF0YSgp
OwotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBsYXN0Rm9udERhdGEgPSAmcHJpbWFyeUZvbnRE
YXRhOworICAgIGNvbnN0IEZvbnQmIHByaW1hcnlGb250ID0gbV9mb250LT5wcmltYXJ5Rm9udCgp
OworICAgIGNvbnN0IEZvbnQqIGxhc3RGb250RGF0YSA9ICZwcmltYXJ5Rm9udDsKICAgICBpbnQg
bGFzdEdseXBoQ291bnQgPSBnbHlwaEJ1ZmZlciA/IGdseXBoQnVmZmVyLT5zaXplKCkgOiAwOwog
CiAgICAgVUNoYXIzMiBjaGFyYWN0ZXIgPSAwOwpAQCAtMTgzLDE1ICsxODMsMTUgQEAgaW5saW5l
IHVuc2lnbmVkIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2VJbgogICAgICAgICAgICAgdGV4dEl0ZXJh
dG9yLmFkdmFuY2UoYWR2YW5jZUxlbmd0aCk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgfQotICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEgPSBnbHlwaERhdGEu
Zm9udERhdGE7Ci0gICAgICAgIEFTU0VSVChmb250RGF0YSk7CisgICAgICAgIGNvbnN0IEZvbnQq
IGZvbnQgPSBnbHlwaERhdGEuZm9udDsKKyAgICAgICAgQVNTRVJUKGZvbnQpOwogCiAgICAgICAg
IC8vIE5vdyB0aGF0IHdlIGhhdmUgYSBnbHlwaCBhbmQgZm9udCBkYXRhLCBnZXQgaXRzIHdpZHRo
LgogICAgICAgICBmbG9hdCB3aWR0aDsKICAgICAgICAgaWYgKGNoYXJhY3RlciA9PSAnXHQnICYm
IG1fcnVuLmFsbG93VGFicygpKQotICAgICAgICAgICAgd2lkdGggPSBtX2ZvbnQtPnRhYldpZHRo
KCpmb250RGF0YSwgbV9ydW4udGFiU2l6ZSgpLCBtX3J1bi54UG9zKCkgKyBtX3J1bldpZHRoU29G
YXIgKyB3aWR0aFNpbmNlTGFzdFJvdW5kaW5nKTsKKyAgICAgICAgICAgIHdpZHRoID0gbV9mb250
LT50YWJXaWR0aCgqZm9udCwgbV9ydW4udGFiU2l6ZSgpLCBtX3J1bi54UG9zKCkgKyBtX3J1bldp
ZHRoU29GYXIgKyB3aWR0aFNpbmNlTGFzdFJvdW5kaW5nKTsKICAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICB3aWR0aCA9IGZvbnREYXRhLT53aWR0aEZvckdseXBoKGdseXBoKTsKKyAgICAgICAg
ICAgIHdpZHRoID0gZm9udC0+d2lkdGhGb3JHbHlwaChnbHlwaCk7CiAKICAgICAgICAgICAgIC8v
IFNWRyB1c2VzIGhvcml6b250YWxHbHlwaFN0cmV0Y2goKSwgd2hlbiB0ZXh0TGVuZ3RoIGlzIHVz
ZWQgdG8gc3RyZXRjaC9zcXVlZXplIHRleHQuCiAgICAgICAgICAgICB3aWR0aCAqPSBtX3J1bi5o
b3Jpem9udGFsR2x5cGhTdHJldGNoKCk7CkBAIC0yMDAsMjYgKzIwMCwyNiBAQCBpbmxpbmUgdW5z
aWduZWQgV2lkdGhJdGVyYXRvcjo6YWR2YW5jZUluCiAgICAgICAgICAgICAvLyBGaXJzdCwgd2Ug
cm91bmQgc3BhY2VzIHRvIGFuIGFkanVzdGVkIHdpZHRoIGluIGFsbCBmb250cy4KICAgICAgICAg
ICAgIC8vIFNlY29uZCwgaW4gZml4ZWQtcGl0Y2ggZm9udHMgd2UgZW5zdXJlIHRoYXQgYWxsIGNo
YXJhY3RlcnMgdGhhdAogICAgICAgICAgICAgLy8gbWF0Y2ggdGhlIHdpZHRoIG9mIHRoZSBzcGFj
ZSBjaGFyYWN0ZXIgaGF2ZSB0aGUgc2FtZSB3aWR0aCBhcyB0aGUgc3BhY2UgY2hhcmFjdGVyLgot
ICAgICAgICAgICAgaWYgKG1fcnVuLmFwcGx5V29yZFJvdW5kaW5nKCkgJiYgd2lkdGggPT0gZm9u
dERhdGEtPnNwYWNlV2lkdGgoKSAmJiAoZm9udERhdGEtPnBpdGNoKCkgPT0gRml4ZWRQaXRjaCB8
fCBnbHlwaCA9PSBmb250RGF0YS0+c3BhY2VHbHlwaCgpKSkKLSAgICAgICAgICAgICAgICB3aWR0
aCA9IGZvbnREYXRhLT5hZGp1c3RlZFNwYWNlV2lkdGgoKTsKKyAgICAgICAgICAgIGlmIChtX3J1
bi5hcHBseVdvcmRSb3VuZGluZygpICYmIHdpZHRoID09IGZvbnQtPnNwYWNlV2lkdGgoKSAmJiAo
Zm9udC0+cGl0Y2goKSA9PSBGaXhlZFBpdGNoIHx8IGdseXBoID09IGZvbnQtPnNwYWNlR2x5cGgo
KSkpCisgICAgICAgICAgICAgICAgd2lkdGggPSBmb250LT5hZGp1c3RlZFNwYWNlV2lkdGgoKTsK
ICAgICAgICAgfQogCi0gICAgICAgIGlmIChmb250RGF0YSAhPSBsYXN0Rm9udERhdGEgJiYgd2lk
dGgpIHsKKyAgICAgICAgaWYgKGZvbnQgIT0gbGFzdEZvbnREYXRhICYmIHdpZHRoKSB7CiAgICAg
ICAgICAgICBpZiAoc2hvdWxkQXBwbHlGb250VHJhbnNmb3JtcygpKSB7CiAgICAgICAgICAgICAg
ICAgbV9ydW5XaWR0aFNvRmFyICs9IGFwcGx5Rm9udFRyYW5zZm9ybXMoZ2x5cGhCdWZmZXIsIG1f
cnVuLmx0cigpLCBsYXN0R2x5cGhDb3VudCwgbGFzdEZvbnREYXRhLCAqdGhpcywgbV90eXBlc2V0
dGluZ0ZlYXR1cmVzLCBjaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UpOwogICAgICAgICAgICAgICAg
IGxhc3RHbHlwaENvdW50ID0gZ2x5cGhCdWZmZXItPnNpemUoKTsgLy8gYXBwbHlGb250VHJhbnNm
b3JtcyBkb2Vzbid0IHVwZGF0ZSB3aGVuIHRoZXJlIGhhZCBiZWVuIG9ubHkgb25lIGdseXBoLgog
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBsYXN0Rm9udERhdGEgPSBmb250RGF0YTsKLSAg
ICAgICAgICAgIGlmIChtX2ZhbGxiYWNrRm9udHMgJiYgZm9udERhdGEgIT0gJnByaW1hcnlGb250
RGF0YSkgeworICAgICAgICAgICAgbGFzdEZvbnREYXRhID0gZm9udDsKKyAgICAgICAgICAgIGlm
IChtX2ZhbGxiYWNrRm9udHMgJiYgZm9udCAhPSAmcHJpbWFyeUZvbnQpIHsKICAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogVGhpcyBkb2VzIGEgbGl0dGxlIGV4dHJhIHdvcmsgdGhhdCBjb3VsZCBi
ZSBhdm9pZGVkIGlmCiAgICAgICAgICAgICAgICAgLy8gZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKCkg
cmV0dXJuZWQgd2hldGhlciBpdCBjaG9zZSB0byB1c2UgYSBzbWFsbCBjYXBzIGZvbnQuCiAgICAg
ICAgICAgICAgICAgaWYgKCFtX2ZvbnQtPmlzU21hbGxDYXBzKCkgfHwgY2hhcmFjdGVyID09IHVf
dG91cHBlcihjaGFyYWN0ZXIpKQotICAgICAgICAgICAgICAgICAgICBtX2ZhbGxiYWNrRm9udHMt
PmFkZChmb250RGF0YSk7CisgICAgICAgICAgICAgICAgICAgIG1fZmFsbGJhY2tGb250cy0+YWRk
KGZvbnQpOwogICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICBjb25z
dCBHbHlwaERhdGEmIHVwcGVyY2FzZUdseXBoRGF0YSA9IG1fZm9udC0+Z2x5cGhEYXRhRm9yQ2hh
cmFjdGVyKHVfdG91cHBlcihjaGFyYWN0ZXIpLCBydGwpOwotICAgICAgICAgICAgICAgICAgICBp
ZiAodXBwZXJjYXNlR2x5cGhEYXRhLmZvbnREYXRhICE9ICZwcmltYXJ5Rm9udERhdGEpCi0gICAg
ICAgICAgICAgICAgICAgICAgICBtX2ZhbGxiYWNrRm9udHMtPmFkZCh1cHBlcmNhc2VHbHlwaERh
dGEuZm9udERhdGEpOworICAgICAgICAgICAgICAgICAgICBpZiAodXBwZXJjYXNlR2x5cGhEYXRh
LmZvbnQgIT0gJnByaW1hcnlGb250KQorICAgICAgICAgICAgICAgICAgICAgICAgbV9mYWxsYmFj
a0ZvbnRzLT5hZGQodXBwZXJjYXNlR2x5cGhEYXRhLmZvbnQpOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjQzLDkgKzI0Myw5IEBAIGlubGluZSB1bnNp
Z25lZCBXaWR0aEl0ZXJhdG9yOjphZHZhbmNlSW4KICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChnbHlwaEJ1ZmZlcikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnbHlwaEJ1
ZmZlci0+aXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICht
X2ZvclRleHRFbXBoYXNpcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGds
eXBoQnVmZmVyLT5hZGQoZm9udERhdGEtPnplcm9XaWR0aFNwYWNlR2x5cGgoKSwgZm9udERhdGEs
IG1fZXhwYW5zaW9uUGVyT3Bwb3J0dW5pdHksIGN1cnJlbnRDaGFyYWN0ZXIpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhCdWZmZXItPmFkZChmb250LT56ZXJvV2lk
dGhTcGFjZUdseXBoKCksIGZvbnQsIG1fZXhwYW5zaW9uUGVyT3Bwb3J0dW5pdHksIGN1cnJlbnRD
aGFyYWN0ZXIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+YWRkKGZvbnREYXRhLT5z
cGFjZUdseXBoKCksIGZvbnREYXRhLCBleHBhbnNpb25BdFRoaXNPcHBvcnR1bml0eSwgY3VycmVu
dENoYXJhY3Rlcik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaEJ1
ZmZlci0+YWRkKGZvbnQtPnNwYWNlR2x5cGgoKSwgZm9udCwgZXhwYW5zaW9uQXRUaGlzT3Bwb3J0
dW5pdHksIGN1cnJlbnRDaGFyYWN0ZXIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+ZXhwYW5k
TGFzdEFkdmFuY2UoZXhwYW5zaW9uQXRUaGlzT3Bwb3J0dW5pdHkpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgfQpAQCAtMjc0LDcgKzI3NCw3IEBAIGlubGluZSB1bnNpZ25lZCBXaWR0aEl0ZXJh
dG9yOjphZHZhbmNlSW4KICAgICAgICAgfQogCiAgICAgICAgIGlmIChtX2FjY291bnRGb3JHbHlw
aEJvdW5kcykgewotICAgICAgICAgICAgYm91bmRzID0gZm9udERhdGEtPmJvdW5kc0ZvckdseXBo
KGdseXBoKTsKKyAgICAgICAgICAgIGJvdW5kcyA9IGZvbnQtPmJvdW5kc0ZvckdseXBoKGdseXBo
KTsKICAgICAgICAgICAgIGlmICghY3VycmVudENoYXJhY3RlcikKICAgICAgICAgICAgICAgICBt
X2ZpcnN0R2x5cGhPdmVyZmxvdyA9IHN0ZDo6bWF4PGZsb2F0PigwLCAtYm91bmRzLngoKSk7CiAg
ICAgICAgIH0KQEAgLTMxNCw3ICszMTQsNyBAQCBpbmxpbmUgdW5zaWduZWQgV2lkdGhJdGVyYXRv
cjo6YWR2YW5jZUluCiAgICAgICAgIH0KIAogICAgICAgICBpZiAoZ2x5cGhCdWZmZXIpCi0gICAg
ICAgICAgICBnbHlwaEJ1ZmZlci0+YWRkKGdseXBoLCBmb250RGF0YSwgKHJ0bCA/IG9sZFdpZHRo
ICsgbGFzdFJvdW5kaW5nV2lkdGggOiB3aWR0aCksIGN1cnJlbnRDaGFyYWN0ZXIpOworICAgICAg
ICAgICAgZ2x5cGhCdWZmZXItPmFkZChnbHlwaCwgZm9udCwgKHJ0bCA/IG9sZFdpZHRoICsgbGFz
dFJvdW5kaW5nV2lkdGggOiB3aWR0aCksIGN1cnJlbnRDaGFyYWN0ZXIpOwogCiAgICAgICAgIGxh
c3RSb3VuZGluZ1dpZHRoID0gd2lkdGggLSBvbGRXaWR0aDsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuaAkocmV2aXNpb24gMTc4
ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxNCArMzIsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBGb250Q2FzY2FkZTsKIGNsYXNzIEdseXBoQnVmZmVyOwotY2xhc3MgU2ltcGxlRm9u
dERhdGE7CitjbGFzcyBGb250OwogY2xhc3MgVGV4dFJ1bjsKIHN0cnVjdCBHbHlwaERhdGE7CiAK
IHN0cnVjdCBXaWR0aEl0ZXJhdG9yIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1
YmxpYzoKLSAgICBXaWR0aEl0ZXJhdG9yKGNvbnN0IEZvbnRDYXNjYWRlKiwgY29uc3QgVGV4dFJ1
biYsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDAsIGJv
b2wgYWNjb3VudEZvckdseXBoQm91bmRzID0gZmFsc2UsIGJvb2wgZm9yVGV4dEVtcGhhc2lzID0g
ZmFsc2UpOworICAgIFdpZHRoSXRlcmF0b3IoY29uc3QgRm9udENhc2NhZGUqLCBjb25zdCBUZXh0
UnVuJiwgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMgPSAwLCBib29sIGFjY291
bnRGb3JHbHlwaEJvdW5kcyA9IGZhbHNlLCBib29sIGZvclRleHRFbXBoYXNpcyA9IGZhbHNlKTsK
IAogICAgIHVuc2lnbmVkIGFkdmFuY2UoaW50IHRvLCBHbHlwaEJ1ZmZlciopOwogICAgIGJvb2wg
YWR2YW5jZU9uZUNoYXJhY3RlcihmbG9hdCYgd2lkdGgsIEdseXBoQnVmZmVyJik7CkBAIC05NCw3
ICs5NCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBzaG91bGRBcHBseUZvbnRUcmFuc2Zvcm1zKCkg
Y29uc3QgeyByZXR1cm4gbV9ydW4ubGVuZ3RoKCkgPiAxICYmIChtX3R5cGVzZXR0aW5nRmVhdHVy
ZXMgJiAoS2VybmluZyB8IExpZ2F0dXJlcykpOyB9CiAKICAgICBUeXBlc2V0dGluZ0ZlYXR1cmVz
IG1fdHlwZXNldHRpbmdGZWF0dXJlczsKLSAgICBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRh
Kj4qIG1fZmFsbGJhY2tGb250czsKKyAgICBIYXNoU2V0PGNvbnN0IEZvbnQqPiogbV9mYWxsYmFj
a0ZvbnRzOwogICAgIGJvb2wgbV9hY2NvdW50Rm9yR2x5cGhCb3VuZHM7CiAgICAgZmxvYXQgbV9t
YXhHbHlwaEJvdW5kaW5nQm94WTsKICAgICBmbG9hdCBtX21pbkdseXBoQm91bmRpbmdCb3hZOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9G
b250Q2Fpcm8uY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICsz
Myw3IEBACiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJDYWlyb1V0
aWxpdGllcy5oIgorI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgog
I2luY2x1ZGUgIkdyYWRpZW50LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCkBAIC00
MSwxMSArNDIsMTAgQEAKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgogI2luY2x1
ZGUgIlBsYXRmb3JtUGF0aENhaXJvLmgiCiAjaW5jbHVkZSAiU2hhZG93Qmx1ci5oIgotI2luY2x1
ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIHZv
aWQgZHJhd0dseXBoc1RvQ29udGV4dChjYWlyb190KiBjb250ZXh0LCBjb25zdCBTaW1wbGVGb250
RGF0YSogZm9udCwgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBpbnQgbnVtR2x5cGhzKQorc3Rh
dGljIHZvaWQgZHJhd0dseXBoc1RvQ29udGV4dChjYWlyb190KiBjb250ZXh0LCBjb25zdCBGb250
KiBmb250LCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGludCBudW1HbHlwaHMpCiB7CiAgICAg
Y2Fpcm9fbWF0cml4X3Qgb3JpZ2luYWxUcmFuc2Zvcm07CiAgICAgZmxvYXQgc3ludGhldGljQm9s
ZE9mZnNldCA9IGZvbnQtPnN5bnRoZXRpY0JvbGRPZmZzZXQoKTsKQEAgLTY0LDcgKzY0LDcgQEAg
c3RhdGljIHZvaWQgZHJhd0dseXBoc1RvQ29udGV4dChjYWlyb190KgogICAgICAgICBjYWlyb19z
ZXRfbWF0cml4KGNvbnRleHQsICZvcmlnaW5hbFRyYW5zZm9ybSk7CiB9CiAKLXN0YXRpYyB2b2lk
IGRyYXdHbHlwaHNTaGFkb3coR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgR2x5cGhCdWZm
ZXJHbHlwaCogZ2x5cGhzLCBpbnQgbnVtR2x5cGhzKQorc3RhdGljIHZvaWQgZHJhd0dseXBoc1No
YWRvdyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQsIGNvbnN0IEZvbnQqIGZvbnQsIEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgaW50IG51
bUdseXBocykKIHsKICAgICBTaGFkb3dCbHVyJiBzaGFkb3cgPSBncmFwaGljc0NvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpLT5zaGFkb3dCbHVyKCk7CiAKQEAgLTk1LDcgKzk1LDcgQEAgc3RhdGlj
IHZvaWQgZHJhd0dseXBoc1NoYWRvdyhHcmFwaGljc0NvbgogICAgIH0KIH0KIAotdm9pZCBGb250
Q2FzY2FkZTo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFNpbXBs
ZUZvbnREYXRhKiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsCit2b2lkIEZv
bnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRm9u
dCogZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLAogICAgIGludCBmcm9tLCBp
bnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKIHsKICAgICBpZiAo
IWZvbnQtPnBsYXRmb3JtRGF0YSgpLnNpemUoKSkKQEAgLTIxNiw3ICsyMTYsNyBAQCBwdWJsaWM6
CiAgICAgICAgIDogbV9pbmRleCgwKQogICAgICAgICAsIG1fdGV4dFJ1bih0ZXh0UnVuKQogICAg
ICAgICAsIG1fZ2x5cGhCdWZmZXIoZ2x5cGhCdWZmZXIpCi0gICAgICAgICwgbV9mb250RGF0YShn
bHlwaEJ1ZmZlci5mb250RGF0YUF0KG1faW5kZXgpKQorICAgICAgICAsIG1fZm9udERhdGEoZ2x5
cGhCdWZmZXIuZm9udEF0KG1faW5kZXgpKQogICAgICAgICAsIG1fdHJhbnNsYXRpb24oQWZmaW5l
VHJhbnNmb3JtKCkudHJhbnNsYXRlKHRleHRPcmlnaW4ueCgpLCB0ZXh0T3JpZ2luLnkoKSkpCiAg
ICAgewogICAgICAgICBtb3ZlVG9OZXh0VmFsaWRHbHlwaCgpOwpAQCAtMjM1LDcgKzIzNSw3IEBA
IHByaXZhdGU6CiAgICAgaW50IG1faW5kZXg7CiAgICAgY29uc3QgVGV4dFJ1biYgbV90ZXh0UnVu
OwogICAgIGNvbnN0IEdseXBoQnVmZmVyJiBtX2dseXBoQnVmZmVyOwotICAgIGNvbnN0IFNpbXBs
ZUZvbnREYXRhKiBtX2ZvbnREYXRhOworICAgIGNvbnN0IEZvbnQqIG1fZm9udERhdGE7CiAgICAg
QWZmaW5lVHJhbnNmb3JtIG1fdHJhbnNsYXRpb247CiB9OwogCkBAIC0yODYsNyArMjg2LDcgQEAg
dm9pZCBDYWlyb0dseXBoVG9QYXRoVHJhbnNsYXRvcjo6YWR2YW5jZQogICAgICAgICArK21faW5k
ZXg7CiAgICAgICAgIGlmIChtX2luZGV4ID49IG1fZ2x5cGhCdWZmZXIuc2l6ZSgpKQogICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIG1fZm9udERhdGEgPSBtX2dseXBoQnVmZmVyLmZvbnREYXRh
QXQobV9pbmRleCk7CisgICAgICAgIG1fZm9udERhdGEgPSBtX2dseXBoQnVmZmVyLmZvbnRBdCht
X2luZGV4KTsKICAgICB9IHdoaWxlIChtX2ZvbnREYXRhLT5pc1NWR0ZvbnQoKSAmJiBtX2luZGV4
IDwgbV9nbHlwaEJ1ZmZlci5zaXplKCkpOwogfQogCkBAIC0zMDcsNyArMzA3LDcgQEAgRGFzaEFy
cmF5IEZvbnRDYXNjYWRlOjpkYXNoZXNGb3JJbnRlcnNlYwogICAgICAgICByZXR1cm4gRGFzaEFy
cmF5KCk7CiAKICAgICAvLyBGSVhNRTogSGFuZGxlIFNWRyArIG5vbi1TVkcgaW50ZXJsZWF2ZWQg
cnVucy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzc3OAotICAg
IGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSA9IGdseXBoQnVmZmVyLmZvbnREYXRhQXQo
MCk7CisgICAgY29uc3QgRm9udCogZm9udERhdGEgPSBnbHlwaEJ1ZmZlci5mb250QXQoMCk7CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPEdseXBoVG9QYXRoVHJhbnNsYXRvcj4gdHJhbnNsYXRvcjsKICAg
ICBib29sIGlzU1ZHID0gZmFsc2U7CiAgICAgRmxvYXRQb2ludCBvcmlnaW4gPSBGbG9hdFBvaW50
KHRleHRPcmlnaW4ueCgpICsgZGVsdGFYLCB0ZXh0T3JpZ2luLnkoKSk7CkBAIC0zMjYsNyArMzI2
LDcgQEAgRGFzaEFycmF5IEZvbnRDYXNjYWRlOjpkYXNoZXNGb3JJbnRlcnNlYwogICAgIGZvciAo
aW50IGluZGV4ID0gMDsgdHJhbnNsYXRvci0+Y29udGFpbnNNb3JlUGF0aHMoKTsgKytpbmRleCwg
dHJhbnNsYXRvci0+YWR2YW5jZSgpKSB7CiAgICAgICAgIGZsb2F0IGNlbnRlck9mTGluZSA9IGxp
bmVFeHRlbnRzLnkoKSArIChsaW5lRXh0ZW50cy5oZWlnaHQoKSAvIDIpOwogICAgICAgICBHbHlw
aEl0ZXJhdGlvblN0YXRlIGluZm8gPSBHbHlwaEl0ZXJhdGlvblN0YXRlKEZsb2F0UG9pbnQoKSwg
RmxvYXRQb2ludCgpLCBjZW50ZXJPZkxpbmUsIGxpbmVFeHRlbnRzLngoKSArIGxpbmVFeHRlbnRz
LndpZHRoKCksIGxpbmVFeHRlbnRzLngoKSk7Ci0gICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRh
KiBsb2NhbEZvbnREYXRhID0gZ2x5cGhCdWZmZXIuZm9udERhdGFBdChpbmRleCk7CisgICAgICAg
IGNvbnN0IEZvbnQqIGxvY2FsRm9udERhdGEgPSBnbHlwaEJ1ZmZlci5mb250QXQoaW5kZXgpOwog
ICAgICAgICBpZiAoIWxvY2FsRm9udERhdGEgfHwgKCFpc1NWRyAmJiBsb2NhbEZvbnREYXRhLT5p
c1NWR0ZvbnQoKSkgfHwgKGlzU1ZHICYmIGxvY2FsRm9udERhdGEgIT0gZm9udERhdGEpKSB7CiAg
ICAgICAgICAgICAvLyBUaGUgYWR2YW5jZXMgd2lsbCBnZXQgYWxsIG1lc3NlZCB1cCBpZiB3ZSBk
byBhbnl0aGluZyBvdGhlciB0aGFuIGJhaWwgaGVyZS4KICAgICAgICAgICAgIHJlc3VsdC5jbGVh
cigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENh
aXJvSGFyZmJ1enpORy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvSGFyZmJ1enpORy5jcHAJKHJldmlzaW9uIDE3ODg1NykK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyb0hhcmZi
dXp6TkcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMyArMjcsMTMgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogCisjaW5jbHVkZSAiRm9udC5oIgog
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhhcmZCdXp6U2hhcGVyLmgi
CiAjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRl
ICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCi0j
aW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKICNpbmNsdWRlIDxjYWlyby5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CkBAIC04Myw3ICs4Myw3IEBAIGJvb2wgRm9udENhc2NhZGU6OmNhbkV4cGFu
ZEFyb3VuZElkZW9ncmEKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWZsb2F0IEZvbnRDYXNjYWRl
OjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNv
bnN0IFNpbXBsZUZvbnREYXRhKj4qLCBHbHlwaE92ZXJmbG93KikgY29uc3QKK2Zsb2F0IEZvbnRD
YXNjYWRlOjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNo
U2V0PGNvbnN0IEZvbnQqPiosIEdseXBoT3ZlcmZsb3cqKSBjb25zdAogewogICAgIEhhcmZCdXp6
U2hhcGVyIHNoYXBlcih0aGlzLCBydW4pOwogICAgIGlmIChzaGFwZXIuc2hhcGUoKSkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENh
aXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgIkZsb2F0Q29udmVy
c2lvbi5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkZsb2F0Um91bmRlZFJl
Y3QuaCIKKyNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlQ2Fpcm8uaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiTm90SW1w
bGVtZW50ZWQuaCIKQEAgLTUxLDcgKzUyLDYgQEAKICNpbmNsdWRlICJQbGF0Zm9ybVBhdGhDYWly
by5oIgogI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCiAjaW5jbHVkZSAiU2hhZG93Qmx1ci5oIgot
I2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRy
aXguaCIKICNpbmNsdWRlIDxjYWlyby5oPgogI2luY2x1ZGUgPG1hdGguaD4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYXNjYWRlQ29jb2EubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENh
c2NhZGVDb2NvYS5tbQkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvRm9udENhc2NhZGVDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAt
MjcsMTEgKzI3LDExIEBACiAjaW1wb3J0ICJDb3JlR3JhcGhpY3NTUEkuaCIKICNpbXBvcnQgIkNv
cmVUZXh0U1BJLmgiCiAjaW1wb3J0ICJEYXNoQXJyYXkuaCIKKyNpbXBvcnQgIkZvbnQuaCIKICNp
bXBvcnQgIkdseXBoQnVmZmVyLmgiCiAjaW1wb3J0ICJHcmFwaGljc0NvbnRleHQuaCIKICNpbXBv
cnQgIkxheW91dFJlY3QuaCIKICNpbXBvcnQgIkxvZ2dpbmcuaCIKLSNpbXBvcnQgIlNpbXBsZUZv
bnREYXRhLmgiCiAjaW1wb3J0ICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCiAjaWYgVVNFKEFQ
UEtJVCkKICNpbXBvcnQgPEFwcEtpdC9BcHBLaXQuaD4KQEAgLTkxLDcgKzkxLDcgQEAgc3RhdGlj
IGlubGluZSBib29sIHNob3VsZFVzZUxldHRlcnByZXNzRQogI2VuZGlmCiB9CiAKLXN0YXRpYyB2
b2lkIHNob3dMZXR0ZXJwcmVzc2VkR2x5cGhzV2l0aEFkdmFuY2VzKGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgQ0dDb250ZXh0UmVmIGNvbnRleHQs
IGNvbnN0IENHR2x5cGgqIGdseXBocywgY29uc3QgQ0dTaXplKiBhZHZhbmNlcywgc2l6ZV90IGNv
dW50KQorc3RhdGljIHZvaWQgc2hvd0xldHRlcnByZXNzZWRHbHlwaHNXaXRoQWR2YW5jZXMoY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IEZvbnQqIGZvbnQsIENHQ29udGV4dFJlZiBjb250
ZXh0LCBjb25zdCBDR0dseXBoKiBnbHlwaHMsIGNvbnN0IENHU2l6ZSogYWR2YW5jZXMsIHNpemVf
dCBjb3VudCkKIHsKICNpZiBFTkFCTEUoTEVUVEVSUFJFU1MpCiAgICAgaWYgKCFjb3VudCkKQEAg
LTEzMSw3ICsxMzEsNyBAQCBzdGF0aWMgdm9pZCBzaG93TGV0dGVycHJlc3NlZEdseXBoc1dpdGhB
CiAjZW5kaWYKIH0KIAotc3RhdGljIHZvaWQgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhjb25zdCBG
bG9hdFBvaW50JiBwb2ludCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsIENHQ29udGV4dFJl
ZiBjb250ZXh0LCBjb25zdCBDR0dseXBoKiBnbHlwaHMsIGNvbnN0IENHU2l6ZSogYWR2YW5jZXMs
IHNpemVfdCBjb3VudCkKK3N0YXRpYyB2b2lkIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMoY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IEZvbnQqIGZvbnQsIENHQ29udGV4dFJlZiBjb250ZXh0
LCBjb25zdCBDR0dseXBoKiBnbHlwaHMsIGNvbnN0IENHU2l6ZSogYWR2YW5jZXMsIHNpemVfdCBj
b3VudCkKIHsKICAgICBpZiAoIWNvdW50KQogICAgICAgICByZXR1cm47CkBAIC0xOTcsNyArMTk3
LDcgQEAgc3RhdGljIHZvaWQgc2V0Q0dGb250UmVuZGVyaW5nTW9kZShDR0NvbgogfQogI2VuZGlm
CiAKLXZvaWQgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVm
ZmVyLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgYW5jaG9yUG9p
bnQpIGNvbnN0Cit2b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgY29uc3QgRm9udCogZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVy
LCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgYW5jaG9yUG9pbnQp
IGNvbnN0CiB7CiAgICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhID0gZm9u
dC0+cGxhdGZvcm1EYXRhKCk7CiAgICAgaWYgKCFwbGF0Zm9ybURhdGEuc2l6ZSgpKQpAQCAtNDY4
LDcgKzQ2OCw3IEBAIHB1YmxpYzoKICAgICAgICAgOiBtX2luZGV4KDApCiAgICAgICAgICwgbV90
ZXh0UnVuKHRleHRSdW4pCiAgICAgICAgICwgbV9nbHlwaEJ1ZmZlcihnbHlwaEJ1ZmZlcikKLSAg
ICAgICAgLCBtX2ZvbnREYXRhKGdseXBoQnVmZmVyLmZvbnREYXRhQXQobV9pbmRleCkpCisgICAg
ICAgICwgbV9mb250RGF0YShnbHlwaEJ1ZmZlci5mb250QXQobV9pbmRleCkpCiAgICAgICAgICwg
bV90cmFuc2xhdGlvbihDR0FmZmluZVRyYW5zZm9ybVNjYWxlKENHQWZmaW5lVHJhbnNmb3JtTWFr
ZVRyYW5zbGF0aW9uKHRleHRPcmlnaW4ueCgpLCB0ZXh0T3JpZ2luLnkoKSksIDEsIC0xKSkKICAg
ICB7CiAgICAgICAgIG1vdmVUb05leHRWYWxpZEdseXBoKCk7CkBAIC00ODcsNyArNDg3LDcgQEAg
cHJpdmF0ZToKICAgICBpbnQgbV9pbmRleDsKICAgICBjb25zdCBUZXh0UnVuJiBtX3RleHRSdW47
CiAgICAgY29uc3QgR2x5cGhCdWZmZXImIG1fZ2x5cGhCdWZmZXI7Ci0gICAgY29uc3QgU2ltcGxl
Rm9udERhdGEqIG1fZm9udERhdGE7CisgICAgY29uc3QgRm9udCogbV9mb250RGF0YTsKICAgICBD
R0FmZmluZVRyYW5zZm9ybSBtX3RyYW5zbGF0aW9uOwogfTsKIApAQCAtNTI0LDcgKzUyNCw3IEBA
IHZvaWQgTWFjR2x5cGhUb1BhdGhUcmFuc2xhdG9yOjphZHZhbmNlKCkKICAgICAgICAgKyttX2lu
ZGV4OwogICAgICAgICBpZiAobV9pbmRleCA+PSBtX2dseXBoQnVmZmVyLnNpemUoKSkKICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBtX2ZvbnREYXRhID0gbV9nbHlwaEJ1ZmZlci5mb250RGF0
YUF0KG1faW5kZXgpOworICAgICAgICBtX2ZvbnREYXRhID0gbV9nbHlwaEJ1ZmZlci5mb250QXQo
bV9pbmRleCk7CiAgICAgfSB3aGlsZSAobV9mb250RGF0YS0+aXNTVkdGb250KCkgJiYgbV9pbmRl
eCA8IG1fZ2x5cGhCdWZmZXIuc2l6ZSgpKTsKIH0KIApAQCAtNTQ1LDcgKzU0NSw3IEBAIERhc2hB
cnJheSBGb250Q2FzY2FkZTo6ZGFzaGVzRm9ySW50ZXJzZWMKICAgICAgICAgcmV0dXJuIERhc2hB
cnJheSgpOwogICAgIAogICAgIC8vIEZJWE1FOiBIYW5kbGUgU1ZHICsgbm9uLVNWRyBpbnRlcmxl
YXZlZCBydW5zLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzNzc4
Ci0gICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhID0gZ2x5cGhCdWZmZXIuZm9udERh
dGFBdCgwKTsKKyAgICBjb25zdCBGb250KiBmb250RGF0YSA9IGdseXBoQnVmZmVyLmZvbnRBdCgw
KTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8R2x5cGhUb1BhdGhUcmFuc2xhdG9yPiB0cmFuc2xhdG9y
OwogICAgIGJvb2wgaXNTVkcgPSBmYWxzZTsKICAgICBGbG9hdFBvaW50IG9yaWdpbiA9IEZsb2F0
UG9pbnQodGV4dE9yaWdpbi54KCkgKyBkZWx0YVgsIHRleHRPcmlnaW4ueSgpKTsKQEAgLTU2MSw4
ICs1NjEsOCBAQCBEYXNoQXJyYXkgRm9udENhc2NhZGU6OmRhc2hlc0ZvckludGVyc2VjCiAgICAg
RGFzaEFycmF5IHJlc3VsdDsKICAgICBmb3IgKGludCBpbmRleCA9IDA7IHRyYW5zbGF0b3ItPmNv
bnRhaW5zTW9yZVBhdGhzKCk7ICsraW5kZXgsIHRyYW5zbGF0b3ItPmFkdmFuY2UoKSkgewogICAg
ICAgICBHbHlwaEl0ZXJhdGlvblN0YXRlIGluZm8gPSBHbHlwaEl0ZXJhdGlvblN0YXRlKENHUG9p
bnRNYWtlKDAsIDApLCBDR1BvaW50TWFrZSgwLCAwKSwgbGluZUV4dGVudHMueSgpLCBsaW5lRXh0
ZW50cy55KCkgKyBsaW5lRXh0ZW50cy5oZWlnaHQoKSwgbGluZUV4dGVudHMueCgpICsgbGluZUV4
dGVudHMud2lkdGgoKSwgbGluZUV4dGVudHMueCgpKTsKLSAgICAgICAgY29uc3QgU2ltcGxlRm9u
dERhdGEqIGxvY2FsRm9udERhdGEgPSBnbHlwaEJ1ZmZlci5mb250RGF0YUF0KGluZGV4KTsKLSAg
ICAgICAgaWYgKCFsb2NhbEZvbnREYXRhIHx8ICghaXNTVkcgJiYgbG9jYWxGb250RGF0YS0+aXNT
VkdGb250KCkpIHx8IChpc1NWRyAmJiBsb2NhbEZvbnREYXRhICE9IGZvbnREYXRhKSkgeworICAg
ICAgICBjb25zdCBGb250KiBsb2NhbEZvbnQgPSBnbHlwaEJ1ZmZlci5mb250QXQoaW5kZXgpOwor
ICAgICAgICBpZiAoIWxvY2FsRm9udCB8fCAoIWlzU1ZHICYmIGxvY2FsRm9udC0+aXNTVkdGb250
KCkpIHx8IChpc1NWRyAmJiBsb2NhbEZvbnQgIT0gZm9udERhdGEpKSB7CiAgICAgICAgICAgICAv
LyBUaGUgYWR2YW5jZXMgd2lsbCBnZXQgYWxsIG1lc3NlZCB1cCBpZiB3ZSBkbyBhbnl0aGluZyBv
dGhlciB0aGFuIGJhaWwgaGVyZS4KICAgICAgICAgICAgIHJlc3VsdC5jbGVhcigpOwogICAgICAg
ICAgICAgYnJlYWs7CkBAIC01OTIsMTAgKzU5MiwxMCBAQCBEYXNoQXJyYXkgRm9udENhc2NhZGU6
OmRhc2hlc0ZvckludGVyc2VjCiB9CiAjZW5kaWYKIAotYm9vbCBGb250Q2FzY2FkZTo6cHJpbWFy
eUZvbnREYXRhSXNTeXN0ZW1Gb250KCkgY29uc3QKK2Jvb2wgRm9udENhc2NhZGU6OnByaW1hcnlG
b250SXNTeXN0ZW1Gb250KCkgY29uc3QKIHsKICNpZiBQTEFURk9STShJT1MpIHx8IF9fTUFDX09T
X1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPiAxMDkwCi0gICAgY29uc3QgYXV0byYgZm9udERhdGEg
PSBwcmltYXJ5Rm9udERhdGEoKTsKKyAgICBjb25zdCBhdXRvJiBmb250RGF0YSA9IHByaW1hcnlG
b250KCk7CiAgICAgcmV0dXJuICFmb250RGF0YS5pc1NWR0ZvbnQoKSAmJiBDVEZvbnREZXNjcmlw
dG9ySXNTeXN0ZW1VSUZvbnQoYWRvcHRDRihDVEZvbnRDb3B5Rm9udERlc2NyaXB0b3IoZm9udERh
dGEucGxhdGZvcm1EYXRhKCkuY3RGb250KCkpKS5nZXQoKSk7CiAjZWxzZQogICAgIC8vIFN5c3Rl
bSBmb250cyBhcmUgaGlkZGVuIGJ5IGhhdmluZyBhIG5hbWUgdGhhdCBiZWdpbnMgd2l0aCBhIHBl
cmlvZCwgc28gc2ltcGx5IHNlYXJjaApAQCAtNjcxLDcgKzY3MSw3IEBAIHZvaWQgRm9udENhc2Nh
ZGU6OmRyYXdFbXBoYXNpc01hcmtzRm9yQ28KICAgICBkcmF3RW1waGFzaXNNYXJrcyhjb250ZXh0
LCBydW4sIGdseXBoQnVmZmVyLCBtYXJrLCBGbG9hdFBvaW50KHBvaW50LngoKSArIGluaXRpYWxB
ZHZhbmNlLCBwb2ludC55KCkpKTsKIH0KIAotZmxvYXQgRm9udENhc2NhZGU6OmZsb2F0V2lkdGhG
b3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9u
dERhdGEqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29u
c3QKK2Zsb2F0IEZvbnRDYXNjYWRlOjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4
dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVy
ZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKIHsKICAgICBDb21wbGV4VGV4dENvbnRyb2xsZXIg
Y29udHJvbGxlcih0aGlzLCBydW4sIHRydWUsIGZhbGxiYWNrRm9udHMpOwogICAgIGlmIChnbHlw
aE92ZXJmbG93KSB7CkBAIC02ODksNyArNjg5LDcgQEAgaW50IEZvbnRDYXNjYWRlOjpvZmZzZXRG
b3JQb3NpdGlvbkZvckNvbQogICAgIHJldHVybiBjb250cm9sbGVyLm9mZnNldEZvclBvc2l0aW9u
KHgsIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKTsKIH0KIAotY29uc3QgU2ltcGxlRm9udERhdGEqIEZv
bnRDYXNjYWRlOjpmb250RGF0YUZvckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVD
aGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBGb250RGF0YVZhcmlhbnQgdmFyaWFudCkg
Y29uc3QKK2NvbnN0IEZvbnQqIEZvbnRDYXNjYWRlOjpmb250Rm9yQ29tYmluaW5nQ2hhcmFjdGVy
U2VxdWVuY2UoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIEZvbnRWYXJp
YW50IHZhcmlhbnQpIGNvbnN0CiB7CiAgICAgVUNoYXIzMiBiYXNlQ2hhcmFjdGVyOwogICAgIHNp
emVfdCBiYXNlQ2hhcmFjdGVyTGVuZ3RoID0gMDsKQEAgLTcwMSw1MSArNzAxLDUxIEBAIGNvbnN0
IFNpbXBsZUZvbnREYXRhKiBGb250Q2FzY2FkZTo6Zm9udEQKICAgICAgICAgcmV0dXJuIDA7CiAK
ICAgICBpZiAobGVuZ3RoID09IGJhc2VDaGFyYWN0ZXJMZW5ndGgpCi0gICAgICAgIHJldHVybiBi
YXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmZvbnREYXRhOworICAgICAgICByZXR1cm4gYmFzZUNoYXJh
Y3RlckdseXBoRGF0YS5mb250OwogCi0gICAgYm9vbCB0cmllZEJhc2VDaGFyYWN0ZXJGb250RGF0
YSA9IGZhbHNlOworICAgIGJvb2wgdHJpZWRCYXNlQ2hhcmFjdGVyRm9udCA9IGZhbHNlOwogCiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgIWZhbGxiYWNrUmFuZ2VzQXQoaSkuaXNOdWxsKCk7ICsr
aSkgewotICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogc2ltcGxlRm9udERhdGEgPSBmYWxs
YmFja1Jhbmdlc0F0KGkpLmZvbnREYXRhRm9yQ2hhcmFjdGVyKGJhc2VDaGFyYWN0ZXIpOwotICAg
ICAgICBpZiAoIXNpbXBsZUZvbnREYXRhKQorICAgICAgICBjb25zdCBGb250KiBmb250ID0gZmFs
bGJhY2tSYW5nZXNBdChpKS5mb250Rm9yQ2hhcmFjdGVyKGJhc2VDaGFyYWN0ZXIpOworICAgICAg
ICBpZiAoIWZvbnQpCiAgICAgICAgICAgICBjb250aW51ZTsKICNpZiBQTEFURk9STShJT1MpCi0g
ICAgICAgIGlmIChiYXNlQ2hhcmFjdGVyID49IDB4MDYwMCAmJiBiYXNlQ2hhcmFjdGVyIDw9IDB4
MDZmZiAmJiBzaW1wbGVGb250RGF0YS0+c2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKCkpCisgICAg
ICAgIGlmIChiYXNlQ2hhcmFjdGVyID49IDB4MDYwMCAmJiBiYXNlQ2hhcmFjdGVyIDw9IDB4MDZm
ZiAmJiBmb250LT5zaG91bGROb3RCZVVzZWRGb3JBcmFiaWMoKSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogI2VuZGlmCiAgICAgICAgIGlmICh2YXJpYW50ID09IE5vcm1hbFZhcmlhbnQpIHsKLSAg
ICAgICAgICAgIGlmIChzaW1wbGVGb250RGF0YS0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24o
KSA9PSBWZXJ0aWNhbCkgewotICAgICAgICAgICAgICAgIGlmIChpc0NKS0lkZW9ncmFwaE9yU3lt
Ym9sKGJhc2VDaGFyYWN0ZXIpICYmICFzaW1wbGVGb250RGF0YS0+aGFzVmVydGljYWxHbHlwaHMo
KSkgeworICAgICAgICAgICAgaWYgKGZvbnQtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkg
PT0gVmVydGljYWwpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNDSktJZGVvZ3JhcGhPclN5bWJv
bChiYXNlQ2hhcmFjdGVyKSAmJiAhZm9udC0+aGFzVmVydGljYWxHbHlwaHMoKSkgewogICAgICAg
ICAgICAgICAgICAgICB2YXJpYW50ID0gQnJva2VuSWRlb2dyYXBoVmFyaWFudDsKLSAgICAgICAg
ICAgICAgICAgICAgc2ltcGxlRm9udERhdGEgPSBzaW1wbGVGb250RGF0YS0+YnJva2VuSWRlb2dy
YXBoRm9udERhdGEoKS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgZm9udCA9IGZvbnQtPmJy
b2tlbklkZW9ncmFwaEZvbnQoKS5nZXQoKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1f
Zm9udERlc2NyaXB0aW9uLm5vbkNKS0dseXBoT3JpZW50YXRpb24oKSA9PSBOb25DSktHbHlwaE9y
aWVudGF0aW9uVmVydGljYWxSaWdodCkgewotICAgICAgICAgICAgICAgICAgICBTaW1wbGVGb250
RGF0YSogdmVydGljYWxSaWdodEZvbnREYXRhID0gc2ltcGxlRm9udERhdGEtPnZlcnRpY2FsUmln
aHRPcmllbnRhdGlvbkZvbnREYXRhKCkuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIEdseXBo
IHZlcnRpY2FsUmlnaHRHbHlwaCA9IHZlcnRpY2FsUmlnaHRGb250RGF0YS0+Z2x5cGhGb3JDaGFy
YWN0ZXIoYmFzZUNoYXJhY3Rlcik7CisgICAgICAgICAgICAgICAgICAgIEZvbnQqIHZlcnRpY2Fs
UmlnaHRGb250ID0gZm9udC0+dmVydGljYWxSaWdodE9yaWVudGF0aW9uRm9udCgpLmdldCgpOwor
ICAgICAgICAgICAgICAgICAgICBHbHlwaCB2ZXJ0aWNhbFJpZ2h0R2x5cGggPSB2ZXJ0aWNhbFJp
Z2h0Rm9udC0+Z2x5cGhGb3JDaGFyYWN0ZXIoYmFzZUNoYXJhY3Rlcik7CiAgICAgICAgICAgICAg
ICAgICAgIGlmICh2ZXJ0aWNhbFJpZ2h0R2x5cGggPT0gYmFzZUNoYXJhY3RlckdseXBoRGF0YS5n
bHlwaCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gdmVydGljYWxS
aWdodEZvbnREYXRhOworICAgICAgICAgICAgICAgICAgICAgICAgZm9udCA9IHZlcnRpY2FsUmln
aHRGb250OwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIFNp
bXBsZUZvbnREYXRhKiB1cHJpZ2h0Rm9udERhdGEgPSBzaW1wbGVGb250RGF0YS0+dXByaWdodE9y
aWVudGF0aW9uRm9udERhdGEoKS5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgR2x5cGggdXBy
aWdodEdseXBoID0gdXByaWdodEZvbnREYXRhLT5nbHlwaEZvckNoYXJhY3RlcihiYXNlQ2hhcmFj
dGVyKTsKKyAgICAgICAgICAgICAgICAgICAgRm9udCogdXByaWdodEZvbnQgPSBmb250LT51cHJp
Z2h0T3JpZW50YXRpb25Gb250KCkuZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgIEdseXBoIHVw
cmlnaHRHbHlwaCA9IHVwcmlnaHRGb250LT5nbHlwaEZvckNoYXJhY3RlcihiYXNlQ2hhcmFjdGVy
KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHVwcmlnaHRHbHlwaCAhPSBiYXNlQ2hhcmFjdGVy
R2x5cGhEYXRhLmdseXBoKQotICAgICAgICAgICAgICAgICAgICAgICAgc2ltcGxlRm9udERhdGEg
PSB1cHJpZ2h0Rm9udERhdGE7CisgICAgICAgICAgICAgICAgICAgICAgICBmb250ID0gdXByaWdo
dEZvbnQ7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgaWYgKGNvbnN0IFNpbXBsZUZvbnREYXRhKiB2YXJpYW50Rm9udERhdGEg
PSBzaW1wbGVGb250RGF0YS0+dmFyaWFudEZvbnREYXRhKG1fZm9udERlc2NyaXB0aW9uLCB2YXJp
YW50KS5nZXQoKSkKLSAgICAgICAgICAgICAgICBzaW1wbGVGb250RGF0YSA9IHZhcmlhbnRGb250
RGF0YTsKKyAgICAgICAgICAgIGlmIChjb25zdCBGb250KiB2YXJpYW50Rm9udCA9IGZvbnQtPnZh
cmlhbnRGb250KG1fZm9udERlc2NyaXB0aW9uLCB2YXJpYW50KS5nZXQoKSkKKyAgICAgICAgICAg
ICAgICBmb250ID0gdmFyaWFudEZvbnQ7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoc2ltcGxl
Rm9udERhdGEgPT0gYmFzZUNoYXJhY3RlckdseXBoRGF0YS5mb250RGF0YSkKLSAgICAgICAgICAg
IHRyaWVkQmFzZUNoYXJhY3RlckZvbnREYXRhID0gdHJ1ZTsKKyAgICAgICAgaWYgKGZvbnQgPT0g
YmFzZUNoYXJhY3RlckdseXBoRGF0YS5mb250KQorICAgICAgICAgICAgdHJpZWRCYXNlQ2hhcmFj
dGVyRm9udCA9IHRydWU7CiAKLSAgICAgICAgaWYgKHNpbXBsZUZvbnREYXRhLT5jYW5SZW5kZXJD
b21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjaGFyYWN0ZXJzLCBsZW5ndGgpKQotICAgICAgICAg
ICAgcmV0dXJuIHNpbXBsZUZvbnREYXRhOworICAgICAgICBpZiAoZm9udC0+Y2FuUmVuZGVyQ29t
YmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY2hhcmFjdGVycywgbGVuZ3RoKSkKKyAgICAgICAgICAg
IHJldHVybiBmb250OwogICAgIH0KIAotICAgIGlmICghdHJpZWRCYXNlQ2hhcmFjdGVyRm9udERh
dGEgJiYgYmFzZUNoYXJhY3RlckdseXBoRGF0YS5mb250RGF0YSAmJiBiYXNlQ2hhcmFjdGVyR2x5
cGhEYXRhLmZvbnREYXRhLT5jYW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjaGFy
YWN0ZXJzLCBsZW5ndGgpKQotICAgICAgICByZXR1cm4gYmFzZUNoYXJhY3RlckdseXBoRGF0YS5m
b250RGF0YTsKKyAgICBpZiAoIXRyaWVkQmFzZUNoYXJhY3RlckZvbnQgJiYgYmFzZUNoYXJhY3Rl
ckdseXBoRGF0YS5mb250ICYmIGJhc2VDaGFyYWN0ZXJHbHlwaERhdGEuZm9udC0+Y2FuUmVuZGVy
Q29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY2hhcmFjdGVycywgbGVuZ3RoKSkKKyAgICAgICAg
cmV0dXJuIGJhc2VDaGFyYWN0ZXJHbHlwaERhdGEuZm9udDsKIAotICAgIHJldHVybiBTaW1wbGVG
b250RGF0YTo6c3lzdGVtRmFsbGJhY2soKTsKKyAgICByZXR1cm4gRm9udDo6c3lzdGVtRmFsbGJh
Y2soKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJl
ZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcAkocmV2aXNp
b24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUv
Rm9udENhY2hlRnJlZVR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw5ICsyMiw5IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCiAKKyNpbmNsdWRlICJG
b250LmgiCiAjaW5jbHVkZSAiT3duUHRyQ2Fpcm8uaCIKICNpbmNsdWRlICJSZWZQdHJDYWlyby5o
IgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5jbHVkZSAiVVRGMTZVQ2hhcjMySXRl
cmF0b3IuaCIKICNpbmNsdWRlIDxjYWlyby1mdC5oPgogI2luY2x1ZGUgPGNhaXJvLmg+CkBAIC04
MCw3ICs4MCw3IEBAIEZjUGF0dGVybiogZmluZEJlc3RGb250R2l2ZW5GYWxsYmFja3MoY28KICAg
ICByZXR1cm4gRmNGb250U2V0TWF0Y2goMCwgc2V0cywgMSwgcGF0dGVybiwgJmZvbnRDb25maWdS
ZXN1bHQpOwogfQogCi1SZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6c3lzdGVtRmFs
bGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGNv
bnN0IFNpbXBsZUZvbnREYXRhKiBvcmlnaW5hbEZvbnREYXRhLCBib29sLCBjb25zdCBVQ2hhciog
Y2hhcmFjdGVycywgaW50IGxlbmd0aCkKK1JlZlB0cjxGb250PiBGb250Q2FjaGU6OnN5c3RlbUZh
bGxiYWNrRm9yQ2hhcmFjdGVycyhjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBj
b25zdCBGb250KiBvcmlnaW5hbEZvbnREYXRhLCBib29sLCBjb25zdCBVQ2hhciogY2hhcmFjdGVy
cywgaW50IGxlbmd0aCkKIHsKICAgICBSZWZQdHI8RmNQYXR0ZXJuPiBwYXR0ZXJuID0gYWRvcHRS
ZWYoY3JlYXRlRm9udENvbmZpZ1BhdHRlcm5Gb3JDaGFyYWN0ZXJzKGNoYXJhY3RlcnMsIGxlbmd0
aCkpOwogICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnREYXRhID0gb3JpZ2luYWxGb250
RGF0YS0+cGxhdGZvcm1EYXRhKCk7CkBAIC05OSw3ICs5OSw3IEBAIFJlZlB0cjxTaW1wbGVGb250
RGF0YT4gRm9udENhY2hlOjpzeXN0ZW0KICAgICByZXR1cm4gZm9udEZvclBsYXRmb3JtRGF0YShh
bHRlcm5hdGVGb250RGF0YSk7CiB9CiAKLVJlZjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjps
YXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0
aW9uKQorUmVmPEZvbnQ+IEZvbnRDYWNoZTo6bGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBG
b250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikKIHsKICAgICAvLyBXZSB3YW50IHRvIHJl
dHVybiBhIGZhbGxiYWNrIGZvbnQgaGVyZSwgb3RoZXJ3aXNlIHRoZSBsb2dpYyBwcmV2ZW50aW5n
IEZvbnRDb25maWcKICAgICAvLyBtYXRjaGVzIGZvciBub24tZmFsbGJhY2sgZm9udHMgbWlnaHQg
cmV0dXJuIDAuIFNlZSBpc0ZhbGxiYWNrRm9udEFsbG93ZWQuCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9HbHlwaFBhZ2VUcmVlTm9kZUZyZWVUeXBlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlw
ZS9HbHlwaFBhZ2VUcmVlTm9kZUZyZWVUeXBlLmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvR2x5cGhQYWdlVHJlZU5vZGVG
cmVlVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJHbHlwaFBhZ2UuaCIKIAotI2luY2x1ZGUgIlNpbXBsZUZvbnRE
YXRhLmgiCisjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIlVURjE2VUNoYXIzMkl0ZXJhdG9y
LmgiCiAjaW5jbHVkZSA8Y2Fpcm8tZnQuaD4KICNpbmNsdWRlIDxjYWlyby5oPgpAQCAtMzksNyAr
MzksNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wgR2x5cGhQYWdlOjpmaWxsKHVu
c2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBi
dWZmZXJMZW5ndGgsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSkKK2Jvb2wgR2x5cGhQ
YWdlOjpmaWxsKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVy
LCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IEZvbnQqIGZvbnREYXRhKQogewogICAgIGNh
aXJvX3NjYWxlZF9mb250X3QqIHNjYWxlZEZvbnQgPSBmb250RGF0YS0+cGxhdGZvcm1EYXRhKCku
c2NhbGVkRm9udCgpOwogICAgIEFTU0VSVChzY2FsZWRGb250KTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL1NpbXBsZUZvbnREYXRhRnJlZVR5cGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBl
L1NpbXBsZUZvbnREYXRhRnJlZVR5cGUuY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9TaW1wbGVGb250RGF0YUZyZWVUeXBl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogICovCiAKICNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgorI2luY2x1ZGUgIkZvbnQuaCIK
IAogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgpA
QCAtNTEsNyArNTEsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgU2ltcGxlRm9u
dERhdGE6OnBsYXRmb3JtSW5pdCgpCit2b2lkIEZvbnQ6OnBsYXRmb3JtSW5pdCgpCiB7CiAgICAg
aWYgKCFtX3BsYXRmb3JtRGF0YS5tX3NpemUpCiAgICAgICAgIHJldHVybjsKQEAgLTkzLDE3ICs5
MywxNyBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUluaXQoKQogICAgIG1fc3ludGhl
dGljQm9sZE9mZnNldCA9IG1fcGxhdGZvcm1EYXRhLnN5bnRoZXRpY0JvbGQoKSA/IDEuMGYgOiAw
LmY7CiB9CiAKLXZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpCit2
b2lkIEZvbnQ6OnBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpCiB7CiAgICAgbV9hdmdDaGFyV2lkdGgg
PSAwLmY7CiAgICAgbV9tYXhDaGFyV2lkdGggPSAwLmY7CiAgICAgaW5pdENoYXJXaWR0aHMoKTsK
IH0KIAotUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OnBsYXRmb3Jt
Q3JlYXRlU2NhbGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24sIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAorUGFzc1JlZlB0cjxGb250PiBGb250OjpwbGF0
Zm9ybUNyZWF0ZVNjYWxlZEZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24sIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAogewogICAgIEFTU0VSVChtX3BsYXRmb3JtRGF0
YS5zY2FsZWRGb250KCkpOwotICAgIHJldHVybiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlKEZvbnRQ
bGF0Zm9ybURhdGEoY2Fpcm9fc2NhbGVkX2ZvbnRfZ2V0X2ZvbnRfZmFjZShtX3BsYXRmb3JtRGF0
YS5zY2FsZWRGb250KCkpLAorICAgIHJldHVybiBGb250OjpjcmVhdGUoRm9udFBsYXRmb3JtRGF0
YShjYWlyb19zY2FsZWRfZm9udF9nZXRfZm9udF9mYWNlKG1fcGxhdGZvcm1EYXRhLnNjYWxlZEZv
bnQoKSksCiAgICAgICAgIHNjYWxlRmFjdG9yICogZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6
ZSgpLAogICAgICAgICBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNCb2xkKCksCiAgICAgICAgIG1f
cGxhdGZvcm1EYXRhLnN5bnRoZXRpY09ibGlxdWUoKSwKQEAgLTExMSwxMiArMTExLDEyIEBAIFBh
c3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXQKICAgICAgICAgaXNDdXN0b21G
b250KCksIGZhbHNlKTsKIH0KIAotdm9pZCBTaW1wbGVGb250RGF0YTo6ZGV0ZXJtaW5lUGl0Y2go
KQordm9pZCBGb250OjpkZXRlcm1pbmVQaXRjaCgpCiB7CiAgICAgbV90cmVhdEFzRml4ZWRQaXRj
aCA9IG1fcGxhdGZvcm1EYXRhLmlzRml4ZWRQaXRjaCgpOwogfQogCi1GbG9hdFJlY3QgU2ltcGxl
Rm9udERhdGE6OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CitGbG9h
dFJlY3QgRm9udDo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKIHsK
ICAgICBpZiAoIW1fcGxhdGZvcm1EYXRhLnNpemUoKSkKICAgICAgICAgcmV0dXJuIEZsb2F0UmVj
dCgpOwpAQCAtMTMxLDcgKzEzMSw3IEBAIEZsb2F0UmVjdCBTaW1wbGVGb250RGF0YTo6cGxhdGZv
cm1Cb3VuZHMKICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CiB9CiAKLWZsb2F0IFNpbXBsZUZvbnRE
YXRhOjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CitmbG9hdCBGb250
OjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CiB7CiAgICAgaWYgKCFt
X3BsYXRmb3JtRGF0YS5zaXplKCkpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMTQ3LDcgKzE0Nyw3
IEBAIGZsb2F0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybVdpZHRoRm9yR2wKIH0KIAogI2lmIFVT
RShIQVJGQlVaWikKLWJvb2wgU2ltcGxlRm9udERhdGE6OmNhblJlbmRlckNvbWJpbmluZ0NoYXJh
Y3RlclNlcXVlbmNlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKSBjb25z
dAorYm9vbCBGb250OjpjYW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBV
Q2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkgY29uc3QKIHsKICAgICBpZiAoIW1fY29t
YmluaW5nQ2hhcmFjdGVyU2VxdWVuY2VTdXBwb3J0KQogICAgICAgICBtX2NvbWJpbmluZ0NoYXJh
Y3RlclNlcXVlbmNlU3VwcG9ydCA9IHN0ZDo6bWFrZV91bmlxdWU8SGFzaE1hcDxTdHJpbmcsIGJv
b2w+PigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enov
SGFyZkJ1enpGYWNlQ2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6RmFjZUNhaXJvLmNwcAkocmV2aXNpb24gMTc4
ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1
enpGYWNlQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMCArMzIsMTAgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJIYXJmQnV6ekZhY2UuaCIKIAorI2luY2x1ZGUgIkZv
bnQuaCIKICNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCiAjaW5jbHVkZSAiR2x5cGhCdWZm
ZXIuaCIKICNpbmNsdWRlICJIYXJmQnV6elNoYXBlci5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnRE
YXRhLmgiCiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCiAjaW5jbHVkZSA8Y2Fpcm8tZnQuaD4K
ICNpbmNsdWRlIDxjYWlyby5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFyZmJ1enovSGFyZkJ1enpGYWNlQ29yZVRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6RmFjZUNvcmVUZXh0
LmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFyZmJ1enovSGFyZkJ1enpGYWNlQ29yZVRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSw5ICszMSw5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSGFyZkJ1enpGYWNl
LmgiCiAKKyNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgog
I2luY2x1ZGUgIkhhcmZCdXp6U2hhcGVyLmgiCi0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIK
ICNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KICNp
bmNsdWRlIDxoYi5oPgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9o
YXJmYnV6ei9IYXJmQnV6elNoYXBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXIuY3BwCShyZXZpc2lvbiAx
Nzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJm
QnV6elNoYXBlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDcgQEAgc3RhdGljIGlu
bGluZSBmbG9hdCBoYXJmQnV6elBvc2l0aW9uVG9GbAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxm
bG9hdD4odmFsdWUpIC8gKDEgPDwgMTYpOwogfQogCi1IYXJmQnV6elNoYXBlcjo6SGFyZkJ1enpS
dW46OkhhcmZCdXp6UnVuKGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwgdW5zaWduZWQg
c3RhcnRJbmRleCwgdW5zaWduZWQgbnVtQ2hhcmFjdGVycywgVGV4dERpcmVjdGlvbiBkaXJlY3Rp
b24sIGhiX3NjcmlwdF90IHNjcmlwdCkKK0hhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elJ1bjo6SGFy
ZkJ1enpSdW4oY29uc3QgRm9udCogZm9udERhdGEsIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2ln
bmVkIG51bUNoYXJhY3RlcnMsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBoYl9zY3JpcHRfdCBz
Y3JpcHQpCiAgICAgOiBtX2ZvbnREYXRhKGZvbnREYXRhKQogICAgICwgbV9zdGFydEluZGV4KHN0
YXJ0SW5kZXgpCiAgICAgLCBtX251bUNoYXJhY3RlcnMobnVtQ2hhcmFjdGVycykKQEAgLTQwMSw3
ICs0MDEsNyBAQCBib29sIEhhcmZCdXp6U2hhcGVyOjpjb2xsZWN0SGFyZkJ1enpSdW5zCiAgICAg
aWYgKCFpdGVyYXRvci5jb25zdW1lKGNoYXJhY3RlciwgY2x1c3Rlckxlbmd0aCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBuZXh0Rm9udERhdGEg
PSBtX2ZvbnQtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIsIGZhbHNlKS5mb250RGF0
YTsKKyAgICBjb25zdCBGb250KiBuZXh0Rm9udERhdGEgPSBtX2ZvbnQtPmdseXBoRGF0YUZvckNo
YXJhY3RlcihjaGFyYWN0ZXIsIGZhbHNlKS5mb250OwogICAgIFVFcnJvckNvZGUgZXJyb3JDb2Rl
ID0gVV9aRVJPX0VSUk9SOwogICAgIFVTY3JpcHRDb2RlIG5leHRTY3JpcHQgPSB1c2NyaXB0X2dl
dFNjcmlwdChjaGFyYWN0ZXIsICZlcnJvckNvZGUpOwogICAgIGlmIChVX0ZBSUxVUkUoZXJyb3JD
b2RlKSkKQEAgLTQwOSw5ICs0MDksOSBAQCBib29sIEhhcmZCdXp6U2hhcGVyOjpjb2xsZWN0SGFy
ZkJ1enpSdW5zCiAKICAgICBkbyB7CiAgICAgICAgIGNvbnN0IFVDaGFyKiBjdXJyZW50Q2hhcmFj
dGVyUG9zaXRpb24gPSBpdGVyYXRvci5jaGFyYWN0ZXJzKCk7Ci0gICAgICAgIGNvbnN0IFNpbXBs
ZUZvbnREYXRhKiBjdXJyZW50Rm9udERhdGEgPSBuZXh0Rm9udERhdGE7CisgICAgICAgIGNvbnN0
IEZvbnQqIGN1cnJlbnRGb250RGF0YSA9IG5leHRGb250RGF0YTsKICAgICAgICAgaWYgKCFjdXJy
ZW50Rm9udERhdGEpCi0gICAgICAgICAgICBjdXJyZW50Rm9udERhdGEgPSAmbV9mb250LT5wcmlt
YXJ5Rm9udERhdGEoKTsKKyAgICAgICAgICAgIGN1cnJlbnRGb250RGF0YSA9ICZtX2ZvbnQtPnBy
aW1hcnlGb250KCk7CiAgICAgICAgIFVTY3JpcHRDb2RlIGN1cnJlbnRTY3JpcHQgPSBuZXh0U2Ny
aXB0OwogCiAgICAgICAgIGZvciAoaXRlcmF0b3IuYWR2YW5jZShjbHVzdGVyTGVuZ3RoKTsgaXRl
cmF0b3IuY29uc3VtZShjaGFyYWN0ZXIsIGNsdXN0ZXJMZW5ndGgpOyBpdGVyYXRvci5hZHZhbmNl
KGNsdXN0ZXJMZW5ndGgpKSB7CkBAIC00MzUsOSArNDM1LDkgQEAgYm9vbCBIYXJmQnV6elNoYXBl
cjo6Y29sbGVjdEhhcmZCdXp6UnVucwogICAgICAgICAgICAgICAgICAgICBjbHVzdGVyTGVuZ3Ro
ID0gbWFya0xlbmd0aDsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIG5leHRGb250RGF0YSA9IG1fZm9udC0+Z2x5cGhEYXRh
Rm9yQ2hhcmFjdGVyKGNoYXJhY3RlciwgZmFsc2UpLmZvbnREYXRhOworICAgICAgICAgICAgICAg
IG5leHRGb250RGF0YSA9IG1fZm9udC0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3Rlciwg
ZmFsc2UpLmZvbnQ7CiAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBuZXh0Rm9u
dERhdGEgPSBtX2ZvbnQtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIsIGZhbHNlKS5m
b250RGF0YTsKKyAgICAgICAgICAgICAgICBuZXh0Rm9udERhdGEgPSBtX2ZvbnQtPmdseXBoRGF0
YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIsIGZhbHNlKS5mb250OwogCiAgICAgICAgICAgICBuZXh0
U2NyaXB0ID0gdXNjcmlwdF9nZXRTY3JpcHQoY2hhcmFjdGVyLCAmZXJyb3JDb2RlKTsKICAgICAg
ICAgICAgIGlmIChVX0ZBSUxVUkUoZXJyb3JDb2RlKSkKQEAgLTQ2Nyw3ICs0NjcsNyBAQCBib29s
IEhhcmZCdXp6U2hhcGVyOjpzaGFwZUhhcmZCdXp6UnVucyhiCiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1faGFyZkJ1enpSdW5zLnNpemUoKTsgKytpKSB7CiAgICAgICAgIHVuc2lnbmVk
IHJ1bkluZGV4ID0gbV9ydW4ucnRsKCkgPyBtX2hhcmZCdXp6UnVucy5zaXplKCkgLSBpIC0gMSA6
IGk7CiAgICAgICAgIEhhcmZCdXp6UnVuKiBjdXJyZW50UnVuID0gbV9oYXJmQnV6elJ1bnNbcnVu
SW5kZXhdLmdldCgpOwotICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogY3VycmVudEZvbnRE
YXRhID0gY3VycmVudFJ1bi0+Zm9udERhdGEoKTsKKyAgICAgICAgY29uc3QgRm9udCogY3VycmVu
dEZvbnREYXRhID0gY3VycmVudFJ1bi0+Zm9udERhdGEoKTsKICAgICAgICAgaWYgKGN1cnJlbnRG
b250RGF0YS0+aXNTVkdGb250KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTQ4
NSw3ICs0ODUsNyBAQCBib29sIEhhcmZCdXp6U2hhcGVyOjpzaGFwZUhhcmZCdXp6UnVucyhiCiAK
ICAgICAgICAgaWYgKG1fZm9udC0+aXNTbWFsbENhcHMoKSAmJiB1X2lzbG93ZXIobV9ub3JtYWxp
emVkQnVmZmVyW2N1cnJlbnRSdW4tPnN0YXJ0SW5kZXgoKV0pKSB7CiAgICAgICAgICAgICBTdHJp
bmcgdXBwZXJUZXh0ID0gU3RyaW5nKG1fbm9ybWFsaXplZEJ1ZmZlci5nZXQoKSArIGN1cnJlbnRS
dW4tPnN0YXJ0SW5kZXgoKSwgY3VycmVudFJ1bi0+bnVtQ2hhcmFjdGVycygpKS51cHBlcigpOwot
ICAgICAgICAgICAgY3VycmVudEZvbnREYXRhID0gbV9mb250LT5nbHlwaERhdGFGb3JDaGFyYWN0
ZXIodXBwZXJUZXh0WzBdLCBmYWxzZSwgU21hbGxDYXBzVmFyaWFudCkuZm9udERhdGE7CisgICAg
ICAgICAgICBjdXJyZW50Rm9udERhdGEgPSBtX2ZvbnQtPmdseXBoRGF0YUZvckNoYXJhY3Rlcih1
cHBlclRleHRbMF0sIGZhbHNlLCBTbWFsbENhcHNWYXJpYW50KS5mb250OwogICAgICAgICAgICAg
Y29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KHVwcGVyVGV4dCkudXBjb252ZXJ0
ZWRDaGFyYWN0ZXJzKCk7CiAgICAgICAgICAgICBoYl9idWZmZXJfYWRkX3V0ZjE2KGhhcmZCdXp6
QnVmZmVyLmdldCgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQxNl90Kj4oY2hhcmFjdGVy
cyksIGN1cnJlbnRSdW4tPm51bUNoYXJhY3RlcnMoKSwgMCwgY3VycmVudFJ1bi0+bnVtQ2hhcmFj
dGVycygpKTsKICAgICAgICAgfSBlbHNlCkBAIC01MTQsNyArNTE0LDcgQEAgYm9vbCBIYXJmQnV6
elNoYXBlcjo6c2hhcGVIYXJmQnV6elJ1bnMoYgogCiB2b2lkIEhhcmZCdXp6U2hhcGVyOjpzZXRH
bHlwaFBvc2l0aW9uc0ZvckhhcmZCdXp6UnVuKEhhcmZCdXp6UnVuKiBjdXJyZW50UnVuLCBoYl9i
dWZmZXJfdCogaGFyZkJ1enpCdWZmZXIpCiB7Ci0gICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGN1
cnJlbnRGb250RGF0YSA9IGN1cnJlbnRSdW4tPmZvbnREYXRhKCk7CisgICAgY29uc3QgRm9udCog
Y3VycmVudEZvbnREYXRhID0gY3VycmVudFJ1bi0+Zm9udERhdGEoKTsKICAgICBoYl9nbHlwaF9p
bmZvX3QqIGdseXBoSW5mb3MgPSBoYl9idWZmZXJfZ2V0X2dseXBoX2luZm9zKGhhcmZCdXp6QnVm
ZmVyLCAwKTsKICAgICBoYl9nbHlwaF9wb3NpdGlvbl90KiBnbHlwaFBvc2l0aW9ucyA9IGhiX2J1
ZmZlcl9nZXRfZ2x5cGhfcG9zaXRpb25zKGhhcmZCdXp6QnVmZmVyLCAwKTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9I
YXJmQnV6elNoYXBlci5oCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNoYXBlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC00NCw4ICs0NCw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgRm9udDsKIGNs
YXNzIEZvbnRDYXNjYWRlOwotY2xhc3MgU2ltcGxlRm9udERhdGE7CiAKIGNsYXNzIEhhcmZCdXp6
U2hhcGVyIHsKIHB1YmxpYzoKQEAgLTY2LDcgKzY2LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAg
ICBjbGFzcyBIYXJmQnV6elJ1biB7CiAgICAgcHVibGljOgotICAgICAgICBIYXJmQnV6elJ1bihj
b25zdCBTaW1wbGVGb250RGF0YSosIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIG51bUNo
YXJhY3RlcnMsIFRleHREaXJlY3Rpb24sIGhiX3NjcmlwdF90KTsKKyAgICAgICAgSGFyZkJ1enpS
dW4oY29uc3QgRm9udCosIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIG51bUNoYXJhY3Rl
cnMsIFRleHREaXJlY3Rpb24sIGhiX3NjcmlwdF90KTsKIAogICAgICAgICB2b2lkIGFwcGx5U2hh
cGVSZXN1bHQoaGJfYnVmZmVyX3QqKTsKICAgICAgICAgdm9pZCBzZXRHbHlwaEFuZFBvc2l0aW9u
cyh1bnNpZ25lZCBpbmRleCwgdWludDE2X3QgZ2x5cGhJZCwgZmxvYXQgYWR2YW5jZSwgZmxvYXQg
b2Zmc2V0WCwgZmxvYXQgb2Zmc2V0WSk7CkBAIC03NSw3ICs3NSw3IEBAIHByaXZhdGU6CiAgICAg
ICAgIGludCBjaGFyYWN0ZXJJbmRleEZvclhQb3NpdGlvbihmbG9hdCB0YXJnZXRYKTsKICAgICAg
ICAgZmxvYXQgeFBvc2l0aW9uRm9yT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCk7CiAKLSAgICAgICAg
Y29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKCkgeyByZXR1cm4gbV9mb250RGF0YTsgfQor
ICAgICAgICBjb25zdCBGb250KiBmb250RGF0YSgpIHsgcmV0dXJuIG1fZm9udERhdGE7IH0KICAg
ICAgICAgdW5zaWduZWQgc3RhcnRJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRJbmRleDsg
fQogICAgICAgICB1bnNpZ25lZCBudW1DaGFyYWN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1D
aGFyYWN0ZXJzOyB9CiAgICAgICAgIHVuc2lnbmVkIG51bUdseXBocygpIGNvbnN0IHsgcmV0dXJu
IG1fbnVtR2x5cGhzOyB9CkBAIC04OCw3ICs4OCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGhiX3Nj
cmlwdF90IHNjcmlwdCgpIHsgcmV0dXJuIG1fc2NyaXB0OyB9CiAKICAgICBwcml2YXRlOgotICAg
ICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogbV9mb250RGF0YTsKKyAgICAgICAgY29uc3QgRm9u
dCogbV9mb250RGF0YTsKICAgICAgICAgdW5zaWduZWQgbV9zdGFydEluZGV4OwogICAgICAgICBz
aXplX3QgbV9udW1DaGFyYWN0ZXJzOwogICAgICAgICB1bnNpZ25lZCBtX251bUdseXBoczsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9Gb250Q2FjaGVJT1MubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0ZvbnRD
YWNoZUlPUy5tbQkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvaW9zL0ZvbnRDYWNoZUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMs
NyBAQCBzdGF0aWMgQ0ZDaGFyYWN0ZXJTZXRSZWYgcGhvbmVGYWxsYmFja0NoCiAgICAgcmV0dXJu
IGNoYXJhY3RlclNldDsKIH0KIAotUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hl
OjpnZXRTeXN0ZW1Gb250RmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlv
biYgZGVzY3JpcHRpb24sIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBvcmlnaW5hbEZvbnREYXRhLCBj
b25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKK1Bhc3NSZWZQdHI8Rm9udD4gRm9u
dENhY2hlOjpnZXRTeXN0ZW1Gb250RmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IEZvbnQqIG9yaWdpbmFsRm9udERhdGEsIGNvbnN0
IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQogewogICAgIGNvbnN0IEZvbnRQbGF0Zm9y
bURhdGEmIHBsYXRmb3JtRGF0YSA9IG9yaWdpbmFsRm9udERhdGEtPnBsYXRmb3JtRGF0YSgpOwog
ICAgIENURm9udFJlZiBjdEZvbnQgPSBwbGF0Zm9ybURhdGEuZm9udCgpOwpAQCAtMTk0LDcgKzE5
NCw3IEBAIHN0YXRpYyBMYW5ndWFnZVNwZWNpZmljRm9udCBsYW5ndWFnZVNwZWMKICAgICByZXR1
cm4gTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6Ok5vbmU7CiB9CiAKLVJlZlB0cjxTaW1wbGVGb250RGF0
YT4gRm9udENhY2hlOjpzeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiBkZXNjcmlwdGlvbiwgY29uc3QgU2ltcGxlRm9udERhdGEqIG9yaWdpbmFsRm9udERh
dGEsIGJvb2wsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQorUmVmUHRyPEZv
bnQ+IEZvbnRDYWNoZTo6c3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IEZvbnQqIG9yaWdpbmFsRm9udERhdGEsIGJvb2ws
IGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQogewogICAgIC8vIFVubGlrZSBP
UyBYLCBvdXIgZmFsbGJhY2sgZm9udCBvbiBpUGhvbmUgaXMgQXJpYWwgVW5pY29kZSwgd2hpY2gg
ZG9lc24ndCBoYXZlIHNvbWUgYXBwbGUtc3BlY2lmaWMgZ2x5cGhzIGxpa2UgRjhGRi4KICAgICAv
LyBGYWxsIGJhY2sgdG8gdGhlIEFwcGxlIEZhbGxiYWNrIGZvbnQgaW4gdGhpcyBjYXNlLgpAQCAt
MjIwLDcgKzIyMCw3IEBAIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpzeXN0ZW0K
ICAgICBpZiAobGVuZ3RoID4gMCkKICAgICAgICAgbGFuZ3VhZ2VTcGVjaWZpY0ZvbnQgPSBsYW5n
dWFnZVNwZWNpZmljRmFsbGJhY2tGb250KGMpOwogCi0gICAgUmVmUHRyPFNpbXBsZUZvbnREYXRh
PiBzaW1wbGVGb250RGF0YTsKKyAgICBSZWZQdHI8Rm9udD4gZm9udDsKIAogICAgIHN3aXRjaCAo
bGFuZ3VhZ2VTcGVjaWZpY0ZvbnQpIHsKICAgICBjYXNlIExhbmd1YWdlU3BlY2lmaWNGb250OjpD
aGluZXNlSmFwYW5lc2U6IHsKQEAgLTI5OCw0MyArMjk4LDQzIEBAIFJlZlB0cjxTaW1wbGVGb250
RGF0YT4gRm9udENhY2hlOjpzeXN0ZW0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAg
ICAgIHNpbXBsZUZvbnREYXRhID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgaXNGb250V2Vp
Z2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyAqY2prQm9sZFtwcmVmZXJyZWRDSktGb250
XSA6ICpjamtQbGFpbltwcmVmZXJyZWRDSktGb250XSwgZmFsc2UpOworICAgICAgICBmb250ID0g
Zm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53
ZWlnaHQoKSkgPyAqY2prQm9sZFtwcmVmZXJyZWRDSktGb250XSA6ICpjamtQbGFpbltwcmVmZXJy
ZWRDSktGb250XSwgZmFsc2UpOwogICAgICAgICBib29sIHVzZVNlY29uZGFyeUZvbnQgPSB0cnVl
OwotICAgICAgICBpZiAoc2ltcGxlRm9udERhdGEpIHsKKyAgICAgICAgaWYgKGZvbnQpIHsKICAg
ICAgICAgICAgIENHR2x5cGggZ2x5cGhzWzJdOwogICAgICAgICAgICAgLy8gQ0dGb250R2V0R2x5
cGhzRm9yVW5pY2hhcnMgdGFrZXMgVVRGLTE2IGJ1ZmZlci4gU2hvdWxkIG9ubHkgYmUgMSBjb2Rl
cG9pbnQgYnV0IHNpbmNlIHdlIG1heSBwYXNzIGluIHR3byBVVEYtMTYgY2hhcmFjdGVycywKICAg
ICAgICAgICAgIC8vIG1ha2Ugcm9vbSBmb3IgMiBnbHlwaHMganVzdCB0byBiZSBzYWZlLgotICAg
ICAgICAgICAgQ0dGb250R2V0R2x5cGhzRm9yVW5pY2hhcnMoc2ltcGxlRm9udERhdGEtPnBsYXRm
b3JtRGF0YSgpLmNnRm9udCgpLCBjaGFyYWN0ZXJzLCBnbHlwaHMsIGxlbmd0aCk7CisgICAgICAg
ICAgICBDR0ZvbnRHZXRHbHlwaHNGb3JVbmljaGFycyhmb250LT5wbGF0Zm9ybURhdGEoKS5jZ0Zv
bnQoKSwgY2hhcmFjdGVycywgZ2x5cGhzLCBsZW5ndGgpOwogCiAgICAgICAgICAgICB1c2VTZWNv
bmRhcnlGb250ID0gKGdseXBoc1swXSA9PSAwKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICh1
c2VTZWNvbmRhcnlGb250KQotICAgICAgICAgICAgc2ltcGxlRm9udERhdGEgPSBmb250Rm9yRmFt
aWx5KGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/
ICpjamtCb2xkW3NlY29uZGFyeUNKS0ZvbnRdIDogKmNqa1BsYWluW3NlY29uZGFyeUNKS0ZvbnRd
LCBmYWxzZSk7CisgICAgICAgICAgICBmb250ID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwg
aXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyAqY2prQm9sZFtzZWNvbmRh
cnlDSktGb250XSA6ICpjamtQbGFpbltzZWNvbmRhcnlDSktGb250XSwgZmFsc2UpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgY2FzZSBMYW5ndWFnZVNwZWNpZmljRm9udDo6S29yZWFuOiB7
CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGtvcmVhblBsYWlu
KCJBcHBsZVNER290aGljTmVvLU1lZGl1bSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpOwogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBrb3Jl
YW5Cb2xkKCJBcHBsZVNER290aGljTmVvLUJvbGQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZy
b21MaXRlcmFsKTsKLSAgICAgICAgc2ltcGxlRm9udERhdGEgPSBmb250Rm9yRmFtaWx5KGRlc2Ny
aXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/IGtvcmVhbkJv
bGQgOiBrb3JlYW5QbGFpbiwgZmFsc2UpOworICAgICAgICBmb250ID0gZm9udEZvckZhbWlseShk
ZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBrb3Jl
YW5Cb2xkIDoga29yZWFuUGxhaW4sIGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
IGNhc2UgTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6OkN5cmlsbGljOiB7CiAgICAgICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGN5cmlsbGljUGxhaW4oIkhlbHZldGljYU5ldWUi
LCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKICAgICAgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gY3lyaWxsaWNCb2xkKCJIZWx2ZXRpY2FOZXVlLUJv
bGQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAgc2ltcGxl
Rm9udERhdGEgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRl
c2NyaXB0aW9uLndlaWdodCgpKSA/IGN5cmlsbGljQm9sZCA6IGN5cmlsbGljUGxhaW4sIGZhbHNl
KTsKKyAgICAgICAgZm9udCA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGlzRm9udFdlaWdo
dEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gY3lyaWxsaWNCb2xkIDogY3lyaWxsaWNQbGFp
biwgZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBMYW5ndWFnZVNwZWNp
ZmljRm9udDo6QXJhYmljOiB7CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNT
dHJpbmc+IGFyYWJpY1BsYWluKCJHZWV6YVBybyIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpOwogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBh
cmFiaWNCb2xkKCJHZWV6YVByby1Cb2xkIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCk7Ci0gICAgICAgIHNpbXBsZUZvbnREYXRhID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlv
biwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBhcmFiaWNCb2xkIDog
YXJhYmljUGxhaW4sIGZhbHNlKTsKKyAgICAgICAgZm9udCA9IGZvbnRGb3JGYW1pbHkoZGVzY3Jp
cHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gYXJhYmljQm9s
ZCA6IGFyYWJpY1BsYWluLCBmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNl
IExhbmd1YWdlU3BlY2lmaWNGb250OjpIZWJyZXc6IHsKICAgICAgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPEF0b21pY1N0cmluZz4gaGVicmV3UGxhaW4oIkFyaWFsSGVicmV3IiwgQXRvbWljU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxBdG9taWNTdHJpbmc+IGhlYnJld0JvbGQoIkFyaWFsSGVicmV3LUJvbGQiLCBBdG9taWNTdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAgc2ltcGxlRm9udERhdGEgPSBmb250
Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdo
dCgpKSA/IGhlYnJld0JvbGQgOiBoZWJyZXdQbGFpbiwgZmFsc2UpOworICAgICAgICBmb250ID0g
Zm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53
ZWlnaHQoKSkgPyBoZWJyZXdCb2xkIDogaGVicmV3UGxhaW4sIGZhbHNlKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgIGNhc2UgTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6OkluZGljOiB7CkBAIC0z
OTAsMzYgKzM5MCwzNiBAQCBSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6c3lzdGVt
CiAgICAgICAgIGlmIChpbmRpY1BhZ2VPcmRlckluZGV4IDwgKHNpemVvZihpbmRpY1VuaWNvZGVQ
YWdlRm9udHMpIC8gc2l6ZW9mKEF0b21pY1N0cmluZyopKSkgewogICAgICAgICAgICAgQXRvbWlj
U3RyaW5nKiBpbmRpY0ZvbnRTdHJpbmcgPSBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndl
aWdodCgpKSA/IGluZGljVW5pY29kZVBhZ2VGb250c0JvbGRbaW5kaWNQYWdlT3JkZXJJbmRleF0g
OiBpbmRpY1VuaWNvZGVQYWdlRm9udHNbaW5kaWNQYWdlT3JkZXJJbmRleF07CiAgICAgICAgICAg
ICBpZiAoaW5kaWNGb250U3RyaW5nKQotICAgICAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0g
Zm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgKmluZGljRm9udFN0cmluZywgZmFsc2UpOworICAg
ICAgICAgICAgICAgIGZvbnQgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCAqaW5kaWNGb250
U3RyaW5nLCBmYWxzZSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNh
c2UgTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6OlRoYWk6IHsKICAgICAgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPEF0b21pY1N0cmluZz4gdGhhaVBsYWluKCJUaG9uYnVyaSIsIEF0b21pY1N0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpOwogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRv
bWljU3RyaW5nPiB0aGFpQm9sZCgiVGhvbmJ1cmktQm9sZCIsIEF0b21pY1N0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpOwotICAgICAgICBzaW1wbGVGb250RGF0YSA9IGZvbnRGb3JGYW1pbHko
ZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gdGhh
aUJvbGQgOiB0aGFpUGxhaW4sIGZhbHNlKTsKKyAgICAgICAgZm9udCA9IGZvbnRGb3JGYW1pbHko
ZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gdGhh
aUJvbGQgOiB0aGFpUGxhaW4sIGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNh
c2UgTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6OlRpYmV0YW46IHsKICAgICAgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPEF0b21pY1N0cmluZz4gdGliZXRhblBsYWluKCJLYWlsYXNhIiwgQXRvbWljU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxBdG9taWNTdHJpbmc+IHRpYmV0YW5Cb2xkKCJLYWlsYXNhLUJvbGQiLCBBdG9taWNTdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAgc2ltcGxlRm9udERhdGEgPSBmb250Rm9y
RmFtaWx5KGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgp
KSA/IHRpYmV0YW5Cb2xkIDogdGliZXRhblBsYWluLCBmYWxzZSk7CisgICAgICAgIGZvbnQgPSBm
b250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndl
aWdodCgpKSA/IHRpYmV0YW5Cb2xkIDogdGliZXRhblBsYWluLCBmYWxzZSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICBjYXNlIExhbmd1YWdlU3BlY2lmaWNGb250OjpDYW5hZGlhbkFib3Jp
Z2luYWxTeWxsYWJpYzogewogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3Ry
aW5nPiBjYXNQbGFpbigiRXVwaGVtaWFVQ0FTIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCk7CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGNh
c0JvbGQoIkV1cGhlbWlhVUNBUy1Cb2xkIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCk7Ci0gICAgICAgIHNpbXBsZUZvbnREYXRhID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlv
biwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBjYXNCb2xkIDogY2Fz
UGxhaW4sIGZhbHNlKTsKKyAgICAgICAgZm9udCA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24s
IGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gY2FzQm9sZCA6IGNhc1Bs
YWluLCBmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIExhbmd1YWdlU3Bl
Y2lmaWNGb250OjpLaG1lcjogewogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWlj
U3RyaW5nPiBraG1lcigiS2htZXJTYW5nYW1NTiIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpOwotICAgICAgICBzaW1wbGVGb250RGF0YSA9IGZvbnRGb3JGYW1pbHkoZGVzY3Jp
cHRpb24sIGtobWVyLCBmYWxzZSk7CisgICAgICAgIGZvbnQgPSBmb250Rm9yRmFtaWx5KGRlc2Ny
aXB0aW9uLCBraG1lciwgZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBM
YW5ndWFnZVNwZWNpZmljRm9udDo6TGFvOiB7CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxBdG9taWNTdHJpbmc+IGxhbygiTGFvU2FuZ2FtTU4iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKTsKLSAgICAgICAgc2ltcGxlRm9udERhdGEgPSBmb250Rm9yRmFtaWx5KGRl
c2NyaXB0aW9uLCBsYW8sIGZhbHNlKTsKKyAgICAgICAgZm9udCA9IGZvbnRGb3JGYW1pbHkoZGVz
Y3JpcHRpb24sIGxhbywgZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgZGVmYXVs
dDogewpAQCAtNDMwLDI3ICs0MzAsMjcgQEAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2Fj
aGU6OnN5c3RlbQogICAgICAgICAgICAgICAgIHVzZUVtb2ppRm9udCA9IENGQ2hhcmFjdGVyU2V0
SXNMb25nQ2hhcmFjdGVyTWVtYmVyKGFwcGxlQ29sb3JFbW9qaUNoYXJhY3RlclNldCgpLCBjKTsK
ICAgICAgICAgfQogICAgICAgICBpZiAodXNlRW1vamlGb250KQotICAgICAgICAgICAgc2ltcGxl
Rm9udERhdGEgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBhcHBsZUNvbG9yRW1vamksIGZh
bHNlKTsKKyAgICAgICAgICAgIGZvbnQgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBhcHBs
ZUNvbG9yRW1vamksIGZhbHNlKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBSZXRhaW5Q
dHI8Q1RGb250UmVmPiBmYWxsYmFja0ZvbnQgPSBhZG9wdENGKENURm9udENyZWF0ZUZvckNoYXJh
Y3RlcnMob3JpZ2luYWxGb250RGF0YS0+Z2V0Q1RGb250KCksIGNoYXJhY3RlcnMsIGxlbmd0aCwg
bnVsbHB0cikpOwogICAgICAgICAgICAgaWYgKFJldGFpblB0cjxDRlN0cmluZ1JlZj4gZm91bmRG
b250TmFtZSA9IGFkb3B0Q0YoQ1RGb250Q29weVBvc3RTY3JpcHROYW1lKGZhbGxiYWNrRm9udC5n
ZXQoKSkpKQotICAgICAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gZm9udEZvckZhbWlseShk
ZXNjcmlwdGlvbiwgZm91bmRGb250TmFtZS5nZXQoKSwgZmFsc2UpOworICAgICAgICAgICAgICAg
IGZvbnQgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBmb3VuZEZvbnROYW1lLmdldCgpLCBm
YWxzZSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIH0KIAotICAgIGlm
IChzaW1wbGVGb250RGF0YSkKLSAgICAgICAgcmV0dXJuIHNpbXBsZUZvbnREYXRhLnJlbGVhc2Uo
KTsKKyAgICBpZiAoZm9udCkKKyAgICAgICAgcmV0dXJuIGZvbnQucmVsZWFzZSgpOwogCiAgICAg
cmV0dXJuIGxhc3RSZXNvcnRGYWxsYmFja0ZvbnQoZGVzY3JpcHRpb24pOwogfQogCi1SZWZQdHI8
U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6c2ltaWxhckZvbnRQbGF0Zm9ybURhdGEoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKK1JlZlB0cjxGb250PiBGb250Q2FjaGU6OnNp
bWlsYXJGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCiB7CiAgICAgLy8g
QXR0ZW1wdCB0byBmaW5kIGFuIGFwcHJvcHJpYXRlIGZvbnQgdXNpbmcgYSBtYXRjaCBiYXNlZCBv
biB0aGUgcHJlc2VuY2Ugb2Yga2V5d29yZHMgaW4KICAgICAvLyB0aGUgcmVxdWVzdGVkIG5hbWVz
LiBGb3IgZXhhbXBsZSwgd2UnbGwgbWF0Y2ggYW55IG5hbWUgdGhhdCBjb250YWlucyAiQXJhYmlj
IiB0byBHZWV6YSBQcm8uCi0gICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBzaW1wbGVGb250RGF0
YTsKKyAgICBSZWZQdHI8Rm9udD4gZm9udDsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
ZGVzY3JpcHRpb24uZmFtaWx5Q291bnQoKTsgKytpKSB7CiAgICAgICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgZmFtaWx5ID0gZGVzY3JpcHRpb24uZmFtaWx5QXQoaSk7CiAgICAgICAgIGlmIChmYW1p
bHkuaXNFbXB0eSgpKQpAQCAtNDYxLDcgKzQ2MSw3IEBAIFJlZlB0cjxTaW1wbGVGb250RGF0YT4g
Rm9udENhY2hlOjpzaW1pbGEKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0
cmluZz4gbWVubG8oIm1lbmxvIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7
CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGNvdXJpZXIoImNv
dXJpZXIiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKICAgICAgICAgaWYg
KGVxdWFsSWdub3JpbmdDYXNlKGZhbWlseSwgbW9uYWNvKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShm
YW1pbHksIG1lbmxvKSkgewotICAgICAgICAgICAgc2ltcGxlRm9udERhdGEgPSBmb250Rm9yRmFt
aWx5KGRlc2NyaXB0aW9uLCBjb3VyaWVyKTsKKyAgICAgICAgICAgIGZvbnQgPSBmb250Rm9yRmFt
aWx5KGRlc2NyaXB0aW9uLCBjb3VyaWVyKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICB9CiAKQEAgLTQ2OSw3ICs0NjksNyBAQCBSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNo
ZTo6c2ltaWxhCiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGx1
Y2lkYUdyYW5kZSgibHVjaWRhIGdyYW5kZSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpOwogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiB2ZXJk
YW5hKCJ2ZXJkYW5hIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CiAgICAg
ICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShmYW1pbHksIGx1Y2lkYUdyYW5kZSkpIHsKLSAgICAg
ICAgICAgIHNpbXBsZUZvbnREYXRhID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgdmVyZGFu
YSk7CisgICAgICAgICAgICBmb250ID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgdmVyZGFu
YSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCkBAIC00NzksMTUgKzQ3OSwx
NiBAQCBSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6c2ltaWxhCiAgICAgICAgIHN0
YXRpYyBTdHJpbmcqIG1hdGNoV29yZHNbM10gPSB7ICZhcmFiaWMuZ2V0KCksICZwYXNodG8uZ2V0
KCksICZ1cmR1LmdldCgpIH07CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNT
dHJpbmc+IGdlZXphUGxhaW4oIkdlZXphUHJvIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCk7CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGdl
ZXphQm9sZCgiR2VlemFQcm8tQm9sZCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVy
YWwpOwotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDMgJiYgIXNpbXBsZUZvbnREYXRhOyAr
K2opCisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgMyAmJiAhZm9udDsgKytqKSB7CiAgICAg
ICAgICAgICBpZiAoZmFtaWx5LmNvbnRhaW5zKCptYXRjaFdvcmRzW2pdLCBmYWxzZSkpCi0gICAg
ICAgICAgICAgICAgc2ltcGxlRm9udERhdGEgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBp
c0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/IGdlZXphQm9sZCA6IGdlZXph
UGxhaW4pOworICAgICAgICAgICAgICAgIGZvbnQgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9u
LCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/IGdlZXphQm9sZCA6IGdl
ZXphUGxhaW4pOworICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIHNpbXBsZUZvbnREYXRh
LnJlbGVhc2UoKTsKKyAgICByZXR1cm4gZm9udC5yZWxlYXNlKCk7CiB9CiAKLVJlZjxTaW1wbGVG
b250RGF0YT4gRm9udENhY2hlOjpsYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKQorUmVmPEZvbnQ+IEZvbnRDYWNoZTo6bGFzdFJlc29y
dEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikKIHsK
ICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBmYWxsYmFja0ZvbnRGYW1p
bHkoIi5QaG9uZUZhbGxiYWNrIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7
CiAgICAgcmV0dXJuICpmb250Rm9yRmFtaWx5KGZvbnREZXNjcmlwdGlvbiwgZmFsbGJhY2tGb250
RmFtaWx5LCBmYWxzZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9p
b3MvU2ltcGxlRm9udERhdGFJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvaW9zL1NpbXBsZUZvbnREYXRhSU9TLm1tCShyZXZpc2lvbiAxNzg4NTcp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvU2ltcGxlRm9udERhdGFJ
T1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKICAqLwogCiAjaW1wb3J0ICJj
b25maWcuaCIKLSNpbXBvcnQgIlNpbXBsZUZvbnREYXRhLmgiCisjaW1wb3J0ICJGb250LmgiCiAK
ICNpbXBvcnQgIkJsb2NrRXhjZXB0aW9ucy5oIgogI2ltcG9ydCAiQ29yZUdyYXBoaWNzU1BJLmgi
CkBAIC02Nyw3ICs2Nyw3IEBAIHN0YXRpYyBib29sIGZvbnRIYXNWZXJ0aWNhbEdseXBocyhDVEZv
bnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3Jt
SW5pdCgpCit2b2lkIEZvbnQ6OnBsYXRmb3JtSW5pdCgpCiB7CiAgICAgbV9zeW50aGV0aWNCb2xk
T2Zmc2V0ID0gbV9wbGF0Zm9ybURhdGEubV9zeW50aGV0aWNCb2xkID8gY2VpbGYobV9wbGF0Zm9y
bURhdGEuc2l6ZSgpICAvIDI0LjBmKSA6IDAuZjsKICAgICBtX3NwYWNlR2x5cGggPSAwOwpAQCAt
MTI4LDcgKzEyOCw3IEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtSW5pdCgpCiAgICAg
bV9mb250TWV0cmljcy5zZXRMaW5lU3BhY2luZygwKTsKIH0KIAotdm9pZCBTaW1wbGVGb250RGF0
YTo6cGxhdGZvcm1DaGFyV2lkdGhJbml0KCkKK3ZvaWQgRm9udDo6cGxhdGZvcm1DaGFyV2lkdGhJ
bml0KCkKIHsKICAgICBtX2F2Z0NoYXJXaWR0aCA9IDA7CiAgICAgbV9tYXhDaGFyV2lkdGggPSAw
OwpAQCAtMTM3LDEyICsxMzcsMTIgQEAgdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1DaGFy
V2lkdGhJbgogICAgIGluaXRDaGFyV2lkdGhzKCk7CiB9CiAKLVBhc3NSZWZQdHI8U2ltcGxlRm9u
dERhdGE+IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZvbnREYXRhKGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYsIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAorUGFzc1JlZlB0cjxG
b250PiBGb250OjpwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9u
JiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0CiB7CiAgICAgaWYgKGlzQ3VzdG9tRm9udCgpKSB7
CiAgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEgc2NhbGVkRm9udERhdGEobV9wbGF0Zm9ybURhdGEp
OwogICAgICAgICBzY2FsZWRGb250RGF0YS5tX3NpemUgPSBzY2FsZWRGb250RGF0YS5tX3NpemUg
KiBzY2FsZUZhY3RvcjsKLSAgICAgICAgcmV0dXJuIFNpbXBsZUZvbnREYXRhOjpjcmVhdGUoc2Nh
bGVkRm9udERhdGEsIHRydWUsIGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIEZvbnQ6OmNyZWF0ZShz
Y2FsZWRGb250RGF0YSwgdHJ1ZSwgZmFsc2UpOwogICAgIH0KIAogICAgIGZsb2F0IHNpemUgPSBt
X3BsYXRmb3JtRGF0YS5zaXplKCkgKiBzY2FsZUZhY3RvcjsKQEAgLTE2Nyw3ICsxNjcsNyBAQCBQ
YXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0CiAgICAgcmV0dXJuIG51bGxw
dHI7CiB9CiAKLXZvaWQgU2ltcGxlRm9udERhdGE6OmRldGVybWluZVBpdGNoKCkKK3ZvaWQgRm9u
dDo6ZGV0ZXJtaW5lUGl0Y2goKQogewogICAgIENURm9udFJlZiBjdEZvbnQgPSBtX3BsYXRmb3Jt
RGF0YS5mb250KCk7CiAgICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9IGZhbHNlOwpAQCAtMTg0LDEy
ICsxODQsMTIgQEAgdm9pZCBTaW1wbGVGb250RGF0YTo6ZGV0ZXJtaW5lUGl0Y2goKQogICAgIH0K
IH0KIAotQ0dGb250UmVuZGVyaW5nU3R5bGUgU2ltcGxlRm9udERhdGE6OnJlbmRlcmluZ1N0eWxl
KCkgY29uc3QKK0NHRm9udFJlbmRlcmluZ1N0eWxlIEZvbnQ6OnJlbmRlcmluZ1N0eWxlKCkgY29u
c3QKIHsKICAgICByZXR1cm4ga0NHRm9udFJlbmRlcmluZ1N0eWxlQW50aWFsaWFzaW5nIHwga0NH
Rm9udFJlbmRlcmluZ1N0eWxlU3VicGl4ZWxQb3NpdGlvbmluZyB8IGtDR0ZvbnRSZW5kZXJpbmdT
dHlsZVN1YnBpeGVsUXVhbnRpemF0aW9uIHwga0NHRm9udEFudGlhbGlhc2luZ1N0eWxlVW5maWx0
ZXJlZDsKIH0KIAotYm9vbCBTaW1wbGVGb250RGF0YTo6YWR2YW5jZUZvckNvbG9yQml0bWFwRm9u
dChHbHlwaCwgQ0dTaXplJikgY29uc3QKK2Jvb2wgRm9udDo6YWR2YW5jZUZvckNvbG9yQml0bWFw
Rm9udChHbHlwaCwgQ0dTaXplJikgY29uc3QKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9s
bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAK
LSAgICBmbG9hdCB3aWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIEhhc2hTZXQ8Y29u
c3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cykKKyAgICBmbG9hdCB3aWR0aCh1bnNp
Z25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0Zv
bnRzKQogICAgIHsKICAgICAgICAgbV9jb250cm9sbGVyLT5hZHZhbmNlKGZyb20sIDAsIEJ5V2hv
bGVHbHlwaHMsIGZhbGxiYWNrRm9udHMpOwogICAgICAgICBmbG9hdCBiZWZvcmVXaWR0aCA9IG1f
Y29udHJvbGxlci0+cnVuV2lkdGhTb0ZhcigpOwpAQCAtOTYsNyArOTYsNyBAQCB2b2lkIEZvbnRD
YXNjYWRlOjpkZWxldGVMYXlvdXQoVGV4dExheW91CiAgICAgZGVsZXRlIGxheW91dDsKIH0KIAot
ZmxvYXQgRm9udENhc2NhZGU6OndpZHRoKFRleHRMYXlvdXQmIGxheW91dCwgdW5zaWduZWQgZnJv
bSwgdW5zaWduZWQgbGVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNr
Rm9udHMpCitmbG9hdCBGb250Q2FzY2FkZTo6d2lkdGgoVGV4dExheW91dCYgbGF5b3V0LCB1bnNp
Z25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0Zv
bnRzKQogewogICAgIHJldHVybiBsYXlvdXQud2lkdGgoZnJvbSwgbGVuLCBmYWxsYmFja0ZvbnRz
KTsKIH0KQEAgLTExNSw3ICsxMTUsNyBAQCBzdGF0aWMgaW5saW5lIENHRmxvYXQgY2VpbENHRmxv
YXQoQ0dGbG9hCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENHRmxvYXQ+KGNlaWwoZikpOwogfQog
Ci1Db21wbGV4VGV4dENvbnRyb2xsZXI6OkNvbXBsZXhUZXh0Q29udHJvbGxlcihjb25zdCBGb250
Q2FzY2FkZSogZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBib29sIG1heVVzZU5hdHVyYWxXcml0
aW5nRGlyZWN0aW9uLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9u
dHMsIGJvb2wgZm9yVGV4dEVtcGhhc2lzKQorQ29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4
VGV4dENvbnRyb2xsZXIoY29uc3QgRm9udENhc2NhZGUqIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1
biwgYm9vbCBtYXlVc2VOYXR1cmFsV3JpdGluZ0RpcmVjdGlvbiwgSGFzaFNldDxjb25zdCBGb250
Kj4qIGZhbGxiYWNrRm9udHMsIGJvb2wgZm9yVGV4dEVtcGhhc2lzKQogICAgIDogbV9mb250KCpm
b250KQogICAgICwgbV9ydW4ocnVuKQogICAgICwgbV9pc0xUUk9ubHkodHJ1ZSkKQEAgLTI5MSw3
ICsyOTEsNyBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Y29sbGVjdENvbXBsCiAgICAg
aWYgKCFtX2VuZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gV2UgYnJlYWsgdXAgZ2x5cGgg
cnVuIGdlbmVyYXRpb24gZm9yIHRoZSBzdHJpbmcgYnkgRm9udERhdGEuCisgICAgLy8gV2UgYnJl
YWsgdXAgZ2x5cGggcnVuIGdlbmVyYXRpb24gZm9yIHRoZSBzdHJpbmcgYnkgRm9udC4KICAgICBj
b25zdCBVQ2hhciogY3A7CiAKICAgICBpZiAobV9ydW4uaXM4Qml0KCkpIHsKQEAgLTMwOCw5ICsz
MDgsOSBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Y29sbGVjdENvbXBsCiAgICAgY29u
c3QgVUNoYXIqIGN1cnIgPSBjcDsKICAgICBjb25zdCBVQ2hhciogZW5kID0gY3AgKyBtX2VuZDsK
IAotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YTsKKyAgICBjb25zdCBGb250KiBm
b250OwogICAgIGJvb2wgaXNNaXNzaW5nR2x5cGg7Ci0gICAgY29uc3QgU2ltcGxlRm9udERhdGEq
IG5leHRGb250RGF0YTsKKyAgICBjb25zdCBGb250KiBuZXh0Rm9udDsKICAgICBib29sIG5leHRJ
c01pc3NpbmdHbHlwaDsKIAogICAgIHVuc2lnbmVkIG1hcmtDb3VudDsKQEAgLTMzMiwxMiArMzMy
LDEyIEBAIHZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpjb2xsZWN0Q29tcGwKICAgICB9CiAK
ICAgICBuZXh0SXNNaXNzaW5nR2x5cGggPSBmYWxzZTsKLSAgICBuZXh0Rm9udERhdGEgPSBtX2Zv
bnQuZm9udERhdGFGb3JDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShzZXF1ZW5jZVN0YXJ0LCBj
dXJyIC0gc2VxdWVuY2VTdGFydCwgbmV4dElzU21hbGxDYXBzID8gU21hbGxDYXBzVmFyaWFudCA6
IE5vcm1hbFZhcmlhbnQpOwotICAgIGlmICghbmV4dEZvbnREYXRhKQorICAgIG5leHRGb250ID0g
bV9mb250LmZvbnRGb3JDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShzZXF1ZW5jZVN0YXJ0LCBj
dXJyIC0gc2VxdWVuY2VTdGFydCwgbmV4dElzU21hbGxDYXBzID8gU21hbGxDYXBzVmFyaWFudCA6
IE5vcm1hbFZhcmlhbnQpOworICAgIGlmICghbmV4dEZvbnQpCiAgICAgICAgIG5leHRJc01pc3Np
bmdHbHlwaCA9IHRydWU7CiAKICAgICB3aGlsZSAoY3VyciA8IGVuZCkgewotICAgICAgICBmb250
RGF0YSA9IG5leHRGb250RGF0YTsKKyAgICAgICAgZm9udCA9IG5leHRGb250OwogICAgICAgICBp
c01pc3NpbmdHbHlwaCA9IG5leHRJc01pc3NpbmdHbHlwaDsKICAgICAgICAgaXNTbWFsbENhcHMg
PSBuZXh0SXNTbWFsbENhcHM7CiAgICAgICAgIGludCBpbmRleCA9IGN1cnIgLSBjcDsKQEAgLTM1
OCwxNyArMzU4LDE3IEBAIHZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpjb2xsZWN0Q29tcGwK
IAogICAgICAgICBuZXh0SXNNaXNzaW5nR2x5cGggPSBmYWxzZTsKICAgICAgICAgaWYgKGJhc2VD
aGFyYWN0ZXIgPT0gemVyb1dpZHRoSm9pbmVyKQotICAgICAgICAgICAgbmV4dEZvbnREYXRhID0g
Zm9udERhdGE7CisgICAgICAgICAgICBuZXh0Rm9udCA9IGZvbnQ7CiAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgbmV4dEZvbnREYXRhID0gbV9mb250LmZvbnREYXRhRm9yQ29tYmluaW5nQ2hh
cmFjdGVyU2VxdWVuY2UoY3AgKyBpbmRleCwgY3VyciAtIGNwIC0gaW5kZXgsIG5leHRJc1NtYWxs
Q2FwcyA/IFNtYWxsQ2Fwc1ZhcmlhbnQgOiBOb3JtYWxWYXJpYW50KTsKLSAgICAgICAgICAgIGlm
ICghbmV4dEZvbnREYXRhKQorICAgICAgICAgICAgbmV4dEZvbnQgPSBtX2ZvbnQuZm9udEZvckNv
bWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNwICsgaW5kZXgsIGN1cnIgLSBjcCAtIGluZGV4LCBu
ZXh0SXNTbWFsbENhcHMgPyBTbWFsbENhcHNWYXJpYW50IDogTm9ybWFsVmFyaWFudCk7CisgICAg
ICAgICAgICBpZiAoIW5leHRGb250KQogICAgICAgICAgICAgICAgIG5leHRJc01pc3NpbmdHbHlw
aCA9IHRydWU7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobmV4dEZvbnREYXRhICE9IGZvbnRE
YXRhIHx8IG5leHRJc01pc3NpbmdHbHlwaCAhPSBpc01pc3NpbmdHbHlwaCkgeworICAgICAgICBp
ZiAobmV4dEZvbnQgIT0gZm9udCB8fCBuZXh0SXNNaXNzaW5nR2x5cGggIT0gaXNNaXNzaW5nR2x5
cGgpIHsKICAgICAgICAgICAgIGludCBpdGVtU3RhcnQgPSBzdGF0aWNfY2FzdDxpbnQ+KGluZGV4
T2ZGb250VHJhbnNpdGlvbik7CiAgICAgICAgICAgICBpbnQgaXRlbUxlbmd0aCA9IGluZGV4IC0g
aW5kZXhPZkZvbnRUcmFuc2l0aW9uOwotICAgICAgICAgICAgY29sbGVjdENvbXBsZXhUZXh0UnVu
c0ZvckNoYXJhY3RlcnMoKGlzU21hbGxDYXBzID8gbV9zbWFsbENhcHNCdWZmZXIuZGF0YSgpIDog
Y3ApICsgaXRlbVN0YXJ0LCBpdGVtTGVuZ3RoLCBpdGVtU3RhcnQsICFpc01pc3NpbmdHbHlwaCA/
IGZvbnREYXRhIDogMCk7CisgICAgICAgICAgICBjb2xsZWN0Q29tcGxleFRleHRSdW5zRm9yQ2hh
cmFjdGVycygoaXNTbWFsbENhcHMgPyBtX3NtYWxsQ2Fwc0J1ZmZlci5kYXRhKCkgOiBjcCkgKyBp
dGVtU3RhcnQsIGl0ZW1MZW5ndGgsIGl0ZW1TdGFydCwgIWlzTWlzc2luZ0dseXBoID8gZm9udCA6
IDApOwogICAgICAgICAgICAgaW5kZXhPZkZvbnRUcmFuc2l0aW9uID0gaW5kZXg7CiAgICAgICAg
IH0KICAgICB9CkBAIC0zNzYsNyArMzc2LDcgQEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6
OmNvbGxlY3RDb21wbAogICAgIGludCBpdGVtTGVuZ3RoID0gbV9lbmQgLSBpbmRleE9mRm9udFRy
YW5zaXRpb247CiAgICAgaWYgKGl0ZW1MZW5ndGgpIHsKICAgICAgICAgaW50IGl0ZW1TdGFydCA9
IGluZGV4T2ZGb250VHJhbnNpdGlvbjsKLSAgICAgICAgY29sbGVjdENvbXBsZXhUZXh0UnVuc0Zv
ckNoYXJhY3RlcnMoKG5leHRJc1NtYWxsQ2FwcyA/IG1fc21hbGxDYXBzQnVmZmVyLmRhdGEoKSA6
IGNwKSArIGl0ZW1TdGFydCwgaXRlbUxlbmd0aCwgaXRlbVN0YXJ0LCAhbmV4dElzTWlzc2luZ0ds
eXBoID8gbmV4dEZvbnREYXRhIDogMCk7CisgICAgICAgIGNvbGxlY3RDb21wbGV4VGV4dFJ1bnNG
b3JDaGFyYWN0ZXJzKChuZXh0SXNTbWFsbENhcHMgPyBtX3NtYWxsQ2Fwc0J1ZmZlci5kYXRhKCkg
OiBjcCkgKyBpdGVtU3RhcnQsIGl0ZW1MZW5ndGgsIGl0ZW1TdGFydCwgIW5leHRJc01pc3NpbmdH
bHlwaCA/IG5leHRGb250IDogMCk7CiAgICAgfQogCiAgICAgaWYgKCFtX3J1bi5sdHIoKSkKQEAg
LTQ2OSw3ICs0NjksNyBAQCB1bnNpZ25lZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmluY3JlbWVu
CiAgICAgcmV0dXJuIGluZGV4T2ZDdXJyZW50UnVuKGxlZnRtb3N0R2x5cGgpOwogfQogCi12b2lk
IENvbXBsZXhUZXh0Q29udHJvbGxlcjo6YWR2YW5jZSh1bnNpZ25lZCBvZmZzZXQsIEdseXBoQnVm
ZmVyKiBnbHlwaEJ1ZmZlciwgR2x5cGhJdGVyYXRpb25TdHlsZSBpdGVyYXRpb25TdHlsZSwgSGFz
aFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzKQordm9pZCBDb21wbGV4
VGV4dENvbnRyb2xsZXI6OmFkdmFuY2UodW5zaWduZWQgb2Zmc2V0LCBHbHlwaEJ1ZmZlciogZ2x5
cGhCdWZmZXIsIEdseXBoSXRlcmF0aW9uU3R5bGUgaXRlcmF0aW9uU3R5bGUsIEhhc2hTZXQ8Y29u
c3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzKQogewogICAgIGlmIChzdGF0aWNfY2FzdDxpbnQ+KG9m
ZnNldCkgPiBtX2VuZCkKICAgICAgICAgb2Zmc2V0ID0gbV9lbmQ7CkBAIC00OTQsOCArNDk0LDgg
QEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmFkdmFuY2UodW5zaQogICAgICAgICBzaXpl
X3QgZ2x5cGhDb3VudCA9IGNvbXBsZXhUZXh0UnVuLmdseXBoQ291bnQoKTsKICAgICAgICAgdW5z
aWduZWQgZyA9IGx0ciA/IG1fZ2x5cGhJbkN1cnJlbnRSdW4gOiBnbHlwaENvdW50IC0gMSAtIG1f
Z2x5cGhJbkN1cnJlbnRSdW47CiAgICAgICAgIHVuc2lnbmVkIGsgPSBsZWZ0bW9zdEdseXBoICsg
ZzsKLSAgICAgICAgaWYgKGZhbGxiYWNrRm9udHMgJiYgJmNvbXBsZXhUZXh0UnVuLmZvbnREYXRh
KCkgIT0gJm1fZm9udC5wcmltYXJ5Rm9udERhdGEoKSkKLSAgICAgICAgICAgIGZhbGxiYWNrRm9u
dHMtPmFkZCgmY29tcGxleFRleHRSdW4uZm9udERhdGEoKSk7CisgICAgICAgIGlmIChmYWxsYmFj
a0ZvbnRzICYmICZjb21wbGV4VGV4dFJ1bi5mb250KCkgIT0gJm1fZm9udC5wcmltYXJ5Rm9udCgp
KQorICAgICAgICAgICAgZmFsbGJhY2tGb250cy0+YWRkKCZjb21wbGV4VGV4dFJ1bi5mb250KCkp
OwogCiAgICAgICAgIC8vIFdlIG11c3Qgc3RvcmUgdGhlIGluaXRpYWwgYWR2YW5jZSBmb3IgdGhl
IGZpcnN0IGdseXBoIHdlIGFyZSBnb2luZyB0byBkcmF3LgogICAgICAgICAvLyBXaGVuIGxlZnRt
b3N0R2x5cGggaXMgMCwgaXQgcmVwcmVzZW50cyB0aGUgZmlyc3QgZ2x5cGggdG8gZHJhdywgdGFr
aW5nIGludG8KQEAgLTUyMCw3ICs1MjAsNyBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6
YWR2YW5jZSh1bnNpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICBpZiAo
Z2x5cGhCdWZmZXIgJiYgIW1fY2hhcmFjdGVySW5DdXJyZW50R2x5cGgpCi0gICAgICAgICAgICAg
ICAgZ2x5cGhCdWZmZXItPmFkZChtX2FkanVzdGVkR2x5cGhzW2tdLCAmY29tcGxleFRleHRSdW4u
Zm9udERhdGEoKSwgYWRqdXN0ZWRBZHZhbmNlLCBjb21wbGV4VGV4dFJ1bi5pbmRleEF0KG1fZ2x5
cGhJbkN1cnJlbnRSdW4pKTsKKyAgICAgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+YWRkKG1fYWRq
dXN0ZWRHbHlwaHNba10sICZjb21wbGV4VGV4dFJ1bi5mb250KCksIGFkanVzdGVkQWR2YW5jZSwg
Y29tcGxleFRleHRSdW4uaW5kZXhBdChtX2dseXBoSW5DdXJyZW50UnVuKSk7CiAKICAgICAgICAg
ICAgIHVuc2lnbmVkIG9sZENoYXJhY3RlckluQ3VycmVudEdseXBoID0gbV9jaGFyYWN0ZXJJbkN1
cnJlbnRHbHlwaDsKICAgICAgICAgICAgIG1fY2hhcmFjdGVySW5DdXJyZW50R2x5cGggPSBzdGQ6
Om1pbihtX2N1cnJlbnRDaGFyYWN0ZXIgLSBjb21wbGV4VGV4dFJ1bi5zdHJpbmdMb2NhdGlvbigp
LCBnbHlwaEVuZE9mZnNldCkgLSBnbHlwaFN0YXJ0T2Zmc2V0OwpAQCAtNTY2LDkgKzU2Niw5IEBA
IHZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjphZGp1c3RHbHlwaHMKICAgICBmb3IgKHNpemVf
dCByID0gMDsgciA8IHJ1bkNvdW50OyArK3IpIHsKICAgICAgICAgQ29tcGxleFRleHRSdW4mIGNv
bXBsZXhUZXh0UnVuID0gKm1fY29tcGxleFRleHRSdW5zW3JdOwogICAgICAgICB1bnNpZ25lZCBn
bHlwaENvdW50ID0gY29tcGxleFRleHRSdW4uZ2x5cGhDb3VudCgpOwotICAgICAgICBjb25zdCBT
aW1wbGVGb250RGF0YSYgZm9udERhdGEgPSBjb21wbGV4VGV4dFJ1bi5mb250RGF0YSgpOworICAg
ICAgICBjb25zdCBGb250JiBmb250ID0gY29tcGxleFRleHRSdW4uZm9udCgpOwogI2lmIFBMQVRG
T1JNKElPUykKLSAgICAgICAgYm9vbCBpc0Vtb2ppID0gZm9udERhdGEucGxhdGZvcm1EYXRhKCku
bV9pc0Vtb2ppOworICAgICAgICBib29sIGlzRW1vamkgPSBmb250LnBsYXRmb3JtRGF0YSgpLm1f
aXNFbW9qaTsKICNlbmRpZgogCiAgICAgICAgIC8vIFJlcHJlc2VudCB0aGUgaW5pdGlhbCBhZHZh
bmNlIGZvciBhIHRleHQgcnVuIGJ5IGFkanVzdGluZyB0aGUgYWR2YW5jZQpAQCAtNTg4LDggKzU4
OCw4IEBAIHZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjphZGp1c3RHbHlwaHMKICAgICAgICAg
Y29uc3QgQ0dTaXplKiBhZHZhbmNlcyA9IGNvbXBsZXhUZXh0UnVuLmFkdmFuY2VzKCk7CiAKICAg
ICAgICAgYm9vbCBsYXN0UnVuID0gciArIDEgPT0gcnVuQ291bnQ7Ci0gICAgICAgIGJvb2wgcm91
bmRzQWR2YW5jZXMgPSAhbV9mb250LmlzUHJpbnRlckZvbnQoKSAmJiBmb250RGF0YS5wbGF0Zm9y
bURhdGEoKS5yb3VuZHNHbHlwaEFkdmFuY2VzKCk7Ci0gICAgICAgIGZsb2F0IHNwYWNlV2lkdGgg
PSBmb250RGF0YS5zcGFjZVdpZHRoKCkgLSBmb250RGF0YS5zeW50aGV0aWNCb2xkT2Zmc2V0KCk7
CisgICAgICAgIGJvb2wgcm91bmRzQWR2YW5jZXMgPSAhbV9mb250LmlzUHJpbnRlckZvbnQoKSAm
JiBmb250LnBsYXRmb3JtRGF0YSgpLnJvdW5kc0dseXBoQWR2YW5jZXMoKTsKKyAgICAgICAgZmxv
YXQgc3BhY2VXaWR0aCA9IGZvbnQuc3BhY2VXaWR0aCgpIC0gZm9udC5zeW50aGV0aWNCb2xkT2Zm
c2V0KCk7CiAgICAgICAgIENHRmxvYXQgcm91bmRlZFNwYWNlV2lkdGggPSByb3VuZENHRmxvYXQo
c3BhY2VXaWR0aCk7CiAgICAgICAgIGNvbnN0IFVDaGFyKiBjcCA9IGNvbXBsZXhUZXh0UnVuLmNo
YXJhY3RlcnMoKTsKICAgICAgICAgQ0dQb2ludCBnbHlwaE9yaWdpbiA9IENHUG9pbnRaZXJvOwpA
QCAtNjE2LDMzICs2MTYsMzMgQEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmFkanVzdEds
eXBocwogICAgICAgICAgICAgICAgIG5leHRDaCA9ICoobV9jb21wbGV4VGV4dFJ1bnNbciArIDFd
LT5jaGFyYWN0ZXJzKCkgKyBtX2NvbXBsZXhUZXh0UnVuc1tyICsgMV0tPmluZGV4QXQoMCkpOwog
CiAgICAgICAgICAgICBib29sIHRyZWF0QXNTcGFjZSA9IEZvbnRDYXNjYWRlOjp0cmVhdEFzU3Bh
Y2UoY2gpOwotICAgICAgICAgICAgQ0dHbHlwaCBnbHlwaCA9IHRyZWF0QXNTcGFjZSA/IGZvbnRE
YXRhLnNwYWNlR2x5cGgoKSA6IGdseXBoc1tpXTsKKyAgICAgICAgICAgIENHR2x5cGggZ2x5cGgg
PSB0cmVhdEFzU3BhY2UgPyBmb250LnNwYWNlR2x5cGgoKSA6IGdseXBoc1tpXTsKICAgICAgICAg
ICAgIENHU2l6ZSBhZHZhbmNlID0gdHJlYXRBc1NwYWNlID8gQ0dTaXplTWFrZShzcGFjZVdpZHRo
LCBhZHZhbmNlc1tpXS5oZWlnaHQpIDogYWR2YW5jZXNbaV07CiAjaWYgUExBVEZPUk0oSU9TKQog
ICAgICAgICAgICAgaWYgKGlzRW1vamkgJiYgYWR2YW5jZS53aWR0aCkKLSAgICAgICAgICAgICAg
ICBhZHZhbmNlLndpZHRoID0gZm9udERhdGEud2lkdGhGb3JHbHlwaChnbHlwaCk7CisgICAgICAg
ICAgICAgICAgYWR2YW5jZS53aWR0aCA9IGZvbnQud2lkdGhGb3JHbHlwaChnbHlwaCk7CiAjZW5k
aWYKIAogICAgICAgICAgICAgaWYgKGNoID09ICdcdCcgJiYgbV9ydW4uYWxsb3dUYWJzKCkpCi0g
ICAgICAgICAgICAgICAgYWR2YW5jZS53aWR0aCA9IG1fZm9udC50YWJXaWR0aChmb250RGF0YSwg
bV9ydW4udGFiU2l6ZSgpLCBtX3J1bi54UG9zKCkgKyBtX3RvdGFsV2lkdGggKyB3aWR0aFNpbmNl
TGFzdENvbW1pdCk7CisgICAgICAgICAgICAgICAgYWR2YW5jZS53aWR0aCA9IG1fZm9udC50YWJX
aWR0aChmb250LCBtX3J1bi50YWJTaXplKCksIG1fcnVuLnhQb3MoKSArIG1fdG90YWxXaWR0aCAr
IHdpZHRoU2luY2VMYXN0Q29tbWl0KTsKICAgICAgICAgICAgIGVsc2UgaWYgKEZvbnRDYXNjYWRl
Ojp0cmVhdEFzWmVyb1dpZHRoU3BhY2UoY2gpICYmICF0cmVhdEFzU3BhY2UpIHsKICAgICAgICAg
ICAgICAgICBhZHZhbmNlLndpZHRoID0gMDsKLSAgICAgICAgICAgICAgICBnbHlwaCA9IGZvbnRE
YXRhLnNwYWNlR2x5cGgoKTsKKyAgICAgICAgICAgICAgICBnbHlwaCA9IGZvbnQuc3BhY2VHbHlw
aCgpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBmbG9hdCByb3VuZGVkQWR2YW5jZVdp
ZHRoID0gcm91bmRmKGFkdmFuY2Uud2lkdGgpOwogICAgICAgICAgICAgaWYgKHJvdW5kc0FkdmFu
Y2VzKQogICAgICAgICAgICAgICAgIGFkdmFuY2Uud2lkdGggPSByb3VuZGVkQWR2YW5jZVdpZHRo
OwogCi0gICAgICAgICAgICBhZHZhbmNlLndpZHRoICs9IGZvbnREYXRhLnN5bnRoZXRpY0JvbGRP
ZmZzZXQoKTsKKyAgICAgICAgICAgIGFkdmFuY2Uud2lkdGggKz0gZm9udC5zeW50aGV0aWNCb2xk
T2Zmc2V0KCk7CiAKICAKICAgICAgICAgICAgIC8vIFdlIHNwZWNpYWwgY2FzZSBzcGFjZXMgaW4g
dHdvIHdheXMgd2hlbiBhcHBseWluZyB3b3JkIHJvdW5kaW5nLiAKICAgICAgICAgICAgIC8vIEZp
cnN0LCB3ZSByb3VuZCBzcGFjZXMgdG8gYW4gYWRqdXN0ZWQgd2lkdGggaW4gYWxsIGZvbnRzLiAK
ICAgICAgICAgICAgIC8vIFNlY29uZCwgaW4gZml4ZWQtcGl0Y2ggZm9udHMgd2UgZW5zdXJlIHRo
YXQgYWxsIGdseXBocyB0aGF0IAogICAgICAgICAgICAgLy8gbWF0Y2ggdGhlIHdpZHRoIG9mIHRo
ZSBzcGFjZSBnbHlwaCBoYXZlIHRoZSBzYW1lIHdpZHRoIGFzIHRoZSBzcGFjZSBnbHlwaC4gCi0g
ICAgICAgICAgICBpZiAobV9ydW4uYXBwbHlXb3JkUm91bmRpbmcoKSAmJiByb3VuZGVkQWR2YW5j
ZVdpZHRoID09IHJvdW5kZWRTcGFjZVdpZHRoICYmIChmb250RGF0YS5waXRjaCgpID09IEZpeGVk
UGl0Y2ggfHwgZ2x5cGggPT0gZm9udERhdGEuc3BhY2VHbHlwaCgpKSkKLSAgICAgICAgICAgICAg
ICBhZHZhbmNlLndpZHRoID0gZm9udERhdGEuYWRqdXN0ZWRTcGFjZVdpZHRoKCk7CisgICAgICAg
ICAgICBpZiAobV9ydW4uYXBwbHlXb3JkUm91bmRpbmcoKSAmJiByb3VuZGVkQWR2YW5jZVdpZHRo
ID09IHJvdW5kZWRTcGFjZVdpZHRoICYmIChmb250LnBpdGNoKCkgPT0gRml4ZWRQaXRjaCB8fCBn
bHlwaCA9PSBmb250LnNwYWNlR2x5cGgoKSkpCisgICAgICAgICAgICAgICAgYWR2YW5jZS53aWR0
aCA9IGZvbnQuYWRqdXN0ZWRTcGFjZVdpZHRoKCk7CiAKICAgICAgICAgICAgIGlmIChoYXNFeHRy
YVNwYWNpbmcpIHsKICAgICAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBhIGdseXBoIHdpdGggYW4g
YWR2YW5jZSwgZ28gYWhlYWQgYW5kIGFkZCBpbiBsZXR0ZXItc3BhY2luZy4KQEAgLTcxNyw3ICs3
MTcsNyBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6YWRqdXN0R2x5cGhzCiAgICAgICAg
ICAgICBtX2FkanVzdGVkQWR2YW5jZXMuYXBwZW5kKGFkdmFuY2UpOwogICAgICAgICAgICAgbV9h
ZGp1c3RlZEdseXBocy5hcHBlbmQoZ2x5cGgpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBG
bG9hdFJlY3QgZ2x5cGhCb3VuZHMgPSBmb250RGF0YS5ib3VuZHNGb3JHbHlwaChnbHlwaCk7Cisg
ICAgICAgICAgICBGbG9hdFJlY3QgZ2x5cGhCb3VuZHMgPSBmb250LmJvdW5kc0ZvckdseXBoKGds
eXBoKTsKICAgICAgICAgICAgIGdseXBoQm91bmRzLm1vdmUoZ2x5cGhPcmlnaW4ueCwgZ2x5cGhP
cmlnaW4ueSk7CiAgICAgICAgICAgICBtX21pbkdseXBoQm91bmRpbmdCb3hYID0gc3RkOjptaW4o
bV9taW5HbHlwaEJvdW5kaW5nQm94WCwgZ2x5cGhCb3VuZHMueCgpKTsKICAgICAgICAgICAgIG1f
bWF4R2x5cGhCb3VuZGluZ0JveFggPSBzdGQ6Om1heChtX21heEdseXBoQm91bmRpbmdCb3hYLCBn
bHlwaEJvdW5kcy5tYXhYKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuaAkocmV2aXNp
b24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBs
ZXhUZXh0Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIHR5cGVk
ZWYgY29uc3Qgc3RydWN0IF9fQ1RMaW5lICogQ1RMaW5lUmUKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgRm9udENhc2NhZGU7Ci1jbGFzcyBTaW1wbGVGb250RGF0YTsKK2NsYXNzIEZvbnQ7
CiBjbGFzcyBUZXh0UnVuOwogCiBlbnVtIEdseXBoSXRlcmF0aW9uU3R5bGUgeyBJbmNsdWRlUGFy
dGlhbEdseXBocywgQnlXaG9sZUdseXBocyB9OwpAQCAtNTAsMTAgKzUwLDEwIEBAIGVudW0gR2x5
cGhJdGVyYXRpb25TdHlsZSB7IEluY2x1ZGVQYXJ0aWEKIC8vIGNvbXBsZXggc2NyaXB0cyBvbiBP
UyBYLgogY2xhc3MgQ29tcGxleFRleHRDb250cm9sbGVyIHsKIHB1YmxpYzoKLSAgICBDb21wbGV4
VGV4dENvbnRyb2xsZXIoY29uc3QgRm9udENhc2NhZGUqLCBjb25zdCBUZXh0UnVuJiwgYm9vbCBt
YXlVc2VOYXR1cmFsV3JpdGluZ0RpcmVjdGlvbiA9IGZhbHNlLCBIYXNoU2V0PGNvbnN0IFNpbXBs
ZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwLCBib29sIGZvclRleHRFbXBoYXNpcyA9IGZh
bHNlKTsKKyAgICBDb21wbGV4VGV4dENvbnRyb2xsZXIoY29uc3QgRm9udENhc2NhZGUqLCBjb25z
dCBUZXh0UnVuJiwgYm9vbCBtYXlVc2VOYXR1cmFsV3JpdGluZ0RpcmVjdGlvbiA9IGZhbHNlLCBI
YXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cyA9IDAsIGJvb2wgZm9yVGV4dEVtcGhh
c2lzID0gZmFsc2UpOwogCiAgICAgLy8gQWR2YW5jZSBhbmQgZW1pdCBnbHlwaHMgdXAgdG8gdGhl
IHNwZWNpZmllZCBjaGFyYWN0ZXIuCi0gICAgdm9pZCBhZHZhbmNlKHVuc2lnbmVkIHRvLCBHbHlw
aEJ1ZmZlciogPSAwLCBHbHlwaEl0ZXJhdGlvblN0eWxlID0gSW5jbHVkZVBhcnRpYWxHbHlwaHMs
IEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDApOworICAg
IHZvaWQgYWR2YW5jZSh1bnNpZ25lZCB0bywgR2x5cGhCdWZmZXIqID0gMCwgR2x5cGhJdGVyYXRp
b25TdHlsZSA9IEluY2x1ZGVQYXJ0aWFsR2x5cGhzLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFs
bGJhY2tGb250cyA9IDApOwogCiAgICAgLy8gQ29tcHV0ZSB0aGUgY2hhcmFjdGVyIG9mZnNldCBm
b3IgYSBnaXZlbiB4IGNvb3JkaW5hdGUuCiAgICAgaW50IG9mZnNldEZvclBvc2l0aW9uKGZsb2F0
IHgsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOwpAQCAtNzMsMTggKzczLDE4IEBAIHB1Ymxp
YzoKIHByaXZhdGU6CiAgICAgY2xhc3MgQ29tcGxleFRleHRSdW4gOiBwdWJsaWMgUmVmQ291bnRl
ZDxDb21wbGV4VGV4dFJ1bj4gewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFJlZjxDb21w
bGV4VGV4dFJ1bj4gY3JlYXRlKENUUnVuUmVmIGN0UnVuLCBjb25zdCBTaW1wbGVGb250RGF0YSYg
Zm9udERhdGEsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBzdHJpbmdMb2NhdGlv
biwgc2l6ZV90IHN0cmluZ0xlbmd0aCwgQ0ZSYW5nZSBydW5SYW5nZSkKKyAgICAgICAgc3RhdGlj
IFJlZjxDb21wbGV4VGV4dFJ1bj4gY3JlYXRlKENUUnVuUmVmIGN0UnVuLCBjb25zdCBGb250JiBm
b250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24sIHNp
emVfdCBzdHJpbmdMZW5ndGgsIENGUmFuZ2UgcnVuUmFuZ2UpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENvbXBsZXhUZXh0UnVuKGN0UnVuLCBmb250RGF0YSwg
Y2hhcmFjdGVycywgc3RyaW5nTG9jYXRpb24sIHN0cmluZ0xlbmd0aCwgcnVuUmFuZ2UpKTsKKyAg
ICAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENvbXBsZXhUZXh0UnVuKGN0UnVuLCBmb250
LCBjaGFyYWN0ZXJzLCBzdHJpbmdMb2NhdGlvbiwgc3RyaW5nTGVuZ3RoLCBydW5SYW5nZSkpOwog
ICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIFJlZjxDb21wbGV4VGV4dFJ1bj4gY3JlYXRlKGNv
bnN0IFNpbXBsZUZvbnREYXRhJiBmb250RGF0YSwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVu
c2lnbmVkIHN0cmluZ0xvY2F0aW9uLCBzaXplX3Qgc3RyaW5nTGVuZ3RoLCBib29sIGx0cikKKyAg
ICAgICAgc3RhdGljIFJlZjxDb21wbGV4VGV4dFJ1bj4gY3JlYXRlKGNvbnN0IEZvbnQmIGZvbnQs
IGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBzdHJpbmdMb2NhdGlvbiwgc2l6ZV90
IHN0cmluZ0xlbmd0aCwgYm9vbCBsdHIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IENvbXBsZXhUZXh0UnVuKGZvbnREYXRhLCBjaGFyYWN0ZXJzLCBzdHJpbmdM
b2NhdGlvbiwgc3RyaW5nTGVuZ3RoLCBsdHIpKTsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IENvbXBsZXhUZXh0UnVuKGZvbnQsIGNoYXJhY3RlcnMsIHN0cmluZ0xvY2F0aW9uLCBz
dHJpbmdMZW5ndGgsIGx0cikpOwogICAgICAgICB9CiAKICAgICAgICAgdW5zaWduZWQgZ2x5cGhD
b3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fZ2x5cGhDb3VudDsgfQotICAgICAgICBjb25zdCBTaW1w
bGVGb250RGF0YSYgZm9udERhdGEoKSBjb25zdCB7IHJldHVybiBtX2ZvbnREYXRhOyB9CisgICAg
ICAgIGNvbnN0IEZvbnQmIGZvbnQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnQ7IH0KICAgICAgICAg
Y29uc3QgVUNoYXIqIGNoYXJhY3RlcnMoKSBjb25zdCB7IHJldHVybiBtX2NoYXJhY3RlcnM7IH0K
ICAgICAgICAgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3N0cmlu
Z0xvY2F0aW9uOyB9CiAgICAgICAgIHNpemVfdCBzdHJpbmdMZW5ndGgoKSBjb25zdCB7IHJldHVy
biBtX3N0cmluZ0xlbmd0aDsgfQpAQCAtMTAwLDExICsxMDAsMTEgQEAgcHJpdmF0ZToKICAgICAg
ICAgdm9pZCBzZXRJc05vbk1vbm90b25pYygpOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgQ29t
cGxleFRleHRSdW4oQ1RSdW5SZWYsIGNvbnN0IFNpbXBsZUZvbnREYXRhJiwgY29uc3QgVUNoYXIq
IGNoYXJhY3RlcnMsIHVuc2lnbmVkIHN0cmluZ0xvY2F0aW9uLCBzaXplX3Qgc3RyaW5nTGVuZ3Ro
LCBDRlJhbmdlIHJ1blJhbmdlKTsKLSAgICAgICAgQ29tcGxleFRleHRSdW4oY29uc3QgU2ltcGxl
Rm9udERhdGEmLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgc3RyaW5nTG9jYXRp
b24sIHNpemVfdCBzdHJpbmdMZW5ndGgsIGJvb2wgbHRyKTsKKyAgICAgICAgQ29tcGxleFRleHRS
dW4oQ1RSdW5SZWYsIGNvbnN0IEZvbnQmLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWdu
ZWQgc3RyaW5nTG9jYXRpb24sIHNpemVfdCBzdHJpbmdMZW5ndGgsIENGUmFuZ2UgcnVuUmFuZ2Up
OworICAgICAgICBDb21wbGV4VGV4dFJ1bihjb25zdCBGb250JiwgY29uc3QgVUNoYXIqIGNoYXJh
Y3RlcnMsIHVuc2lnbmVkIHN0cmluZ0xvY2F0aW9uLCBzaXplX3Qgc3RyaW5nTGVuZ3RoLCBib29s
IGx0cik7CiAKICAgICAgICAgdW5zaWduZWQgbV9nbHlwaENvdW50OwotICAgICAgICBjb25zdCBT
aW1wbGVGb250RGF0YSYgbV9mb250RGF0YTsKKyAgICAgICAgY29uc3QgRm9udCYgbV9mb250Owog
ICAgICAgICBjb25zdCBVQ2hhciogbV9jaGFyYWN0ZXJzOwogICAgICAgICB1bnNpZ25lZCBtX3N0
cmluZ0xvY2F0aW9uOwogICAgICAgICBzaXplX3QgbV9zdHJpbmdMZW5ndGg7CkBAIC0xMjcsNyAr
MTI3LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgY29sbGVjdENvbXBsZXhUZXh0UnVucygpOwog
Ci0gICAgdm9pZCBjb2xsZWN0Q29tcGxleFRleHRSdW5zRm9yQ2hhcmFjdGVycyhjb25zdCBVQ2hh
ciosIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24sIGNvbnN0IFNpbXBs
ZUZvbnREYXRhKik7CisgICAgdm9pZCBjb2xsZWN0Q29tcGxleFRleHRSdW5zRm9yQ2hhcmFjdGVy
cyhjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24s
IGNvbnN0IEZvbnQqKTsKICAgICB2b2lkIGFkanVzdEdseXBoc0FuZEFkdmFuY2VzKCk7CiAKICAg
ICB1bnNpZ25lZCBpbmRleE9mQ3VycmVudFJ1bih1bnNpZ25lZCYgbGVmdG1vc3RHbHlwaCk7CkBA
IC0xNjksNyArMTY5LDcgQEAgcHJpdmF0ZToKICAgICBmbG9hdCBtX2xlYWRpbmdFeHBhbnNpb247
CiAgICAgYm9vbCBtX2FmdGVyRXhwYW5zaW9uOwogCi0gICAgSGFzaFNldDxjb25zdCBTaW1wbGVG
b250RGF0YSo+KiBtX2ZhbGxiYWNrRm9udHM7CisgICAgSGFzaFNldDxjb25zdCBGb250Kj4qIG1f
ZmFsbGJhY2tGb250czsKIAogICAgIGZsb2F0IG1fbWluR2x5cGhCb3VuZGluZ0JveFg7CiAgICAg
ZmxvYXQgbV9tYXhHbHlwaEJvdW5kaW5nQm94WDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXJDb3JlVGV4dC5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRD
b250cm9sbGVyQ29yZVRleHQubW0JKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXJDb3JlVGV4dC5tbQko
d29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEsNyBAQCAtIChpZClpbml0V2l0aEZvbnQ6KGNvbnN0
IFdlYkNvcmU6OkZvbnRDCiAgICAgX2NoYXJhY3RlciA9IGNoYXJhY3RlcjsKIAogICAgIC8vIEJ5
IHRoZSB0aW1lIGEgV2ViQ2FzY2FkZUxpc3QgaXMgdXNlZCwgdGhlIEZvbnRDYXNjYWRlIGhhcyBh
bHJlYWR5IGJlZW4gYXNrZWQgdG8gcmVhbGl6ZSBhbGwgb2YgaXRzCi0gICAgLy8gRm9udERhdGEs
IHNvIHRoaXMgbG9vcCBkb2VzIG5vdCBoaXQgdGhlIEZvbnRDYWNoZS4KKyAgICAvLyBGb250cywg
c28gdGhpcyBsb29wIGRvZXMgbm90IGhpdCB0aGUgRm9udENhY2hlLgogICAgIHdoaWxlICghX2Zv
bnQtPmZhbGxiYWNrUmFuZ2VzQXQoX2NvdW50KS5pc051bGwoKSkKICAgICAgICAgX2NvdW50Kys7
CiAKQEAgLTgyLDEwICs4MiwxMCBAQCAtIChpZClvYmplY3RBdEluZGV4OihOU1VJbnRlZ2VyKWlu
ZGV4CiAgICAgfSBlbHNlCiAgICAgICAgIF9mb250RGVzY3JpcHRvcnMuZ3JvdyhpbmRleCArIDEp
OwogCi0gICAgY29uc3QgV2ViQ29yZTo6U2ltcGxlRm9udERhdGEqIHNpbXBsZUZvbnREYXRhID0g
X2ZvbnQtPmZhbGxiYWNrUmFuZ2VzQXQoaW5kZXgpLmZvbnREYXRhRm9yQ2hhcmFjdGVyKF9jaGFy
YWN0ZXIpOwotICAgIGlmICghc2ltcGxlRm9udERhdGEpCi0gICAgICAgIHNpbXBsZUZvbnREYXRh
ID0gJl9mb250LT5mYWxsYmFja1Jhbmdlc0F0KGluZGV4KS5mb250RGF0YUZvckZpcnN0UmFuZ2Uo
KTsKLSAgICBmb250RGVzY3JpcHRvciA9IENURm9udENvcHlGb250RGVzY3JpcHRvcihzaW1wbGVG
b250RGF0YS0+cGxhdGZvcm1EYXRhKCkuY3RGb250KCkpOworICAgIGNvbnN0IFdlYkNvcmU6OkZv
bnQqIGZvbnQgPSBfZm9udC0+ZmFsbGJhY2tSYW5nZXNBdChpbmRleCkuZm9udEZvckNoYXJhY3Rl
cihfY2hhcmFjdGVyKTsKKyAgICBpZiAoIWZvbnQpCisgICAgICAgIGZvbnQgPSAmX2ZvbnQtPmZh
bGxiYWNrUmFuZ2VzQXQoaW5kZXgpLmZvbnRGb3JGaXJzdFJhbmdlKCk7CisgICAgZm9udERlc2Ny
aXB0b3IgPSBDVEZvbnRDb3B5Rm9udERlc2NyaXB0b3IoZm9udC0+cGxhdGZvcm1EYXRhKCkuY3RG
b250KCkpOwogICAgIF9mb250RGVzY3JpcHRvcnNbaW5kZXhdID0gYWRvcHRDRihmb250RGVzY3Jp
cHRvcik7CiAgICAgcmV0dXJuIChpZClmb250RGVzY3JpcHRvcjsKIH0KQEAgLTk0LDggKzk0LDgg
QEAgLSAoaWQpb2JqZWN0QXRJbmRleDooTlNVSW50ZWdlcilpbmRleAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLUNvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRSdW46OkNvbXBsZXhU
ZXh0UnVuKENUUnVuUmVmIGN0UnVuLCBjb25zdCBTaW1wbGVGb250RGF0YSYgZm9udERhdGEsIGNv
bnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBzdHJpbmdMb2NhdGlvbiwgc2l6ZV90IHN0
cmluZ0xlbmd0aCwgQ0ZSYW5nZSBydW5SYW5nZSkKLSAgICA6IG1fZm9udERhdGEoZm9udERhdGEp
CitDb21wbGV4VGV4dENvbnRyb2xsZXI6OkNvbXBsZXhUZXh0UnVuOjpDb21wbGV4VGV4dFJ1bihD
VFJ1blJlZiBjdFJ1biwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMs
IHVuc2lnbmVkIHN0cmluZ0xvY2F0aW9uLCBzaXplX3Qgc3RyaW5nTGVuZ3RoLCBDRlJhbmdlIHJ1
blJhbmdlKQorICAgIDogbV9mb250KGZvbnQpCiAgICAgLCBtX2NoYXJhY3RlcnMoY2hhcmFjdGVy
cykKICAgICAsIG1fc3RyaW5nTG9jYXRpb24oc3RyaW5nTG9jYXRpb24pCiAgICAgLCBtX3N0cmlu
Z0xlbmd0aChzdHJpbmdMZW5ndGgpCkBAIC0xMzAsOCArMTMwLDggQEAgQ29tcGxleFRleHRDb250
cm9sbGVyOjpDb21wbGV4VGV4dFJ1bjo6QwogCiAvLyBNaXNzaW5nIGdseXBocyBydW4gY29uc3Ry
dWN0b3IuIENvcmUgVGV4dCB3aWxsIG5vdCBnZW5lcmF0ZSBhIHJ1biBvZiBtaXNzaW5nIGdseXBo
cywgaW5zdGVhZCBmYWxsaW5nIGJhY2sgb24KIC8vIGdseXBocyBmcm9tIExhc3RSZXNvcnQuIFdl
IHdhbnQgdG8gdXNlIHRoZSBwcmltYXJ5IGZvbnQncyBtaXNzaW5nIGdseXBoIGluIG9yZGVyIHRv
IG1hdGNoIHRoZSBmYXN0IHRleHQgY29kZSBwYXRoLgotQ29tcGxleFRleHRDb250cm9sbGVyOjpD
b21wbGV4VGV4dFJ1bjo6Q29tcGxleFRleHRSdW4oY29uc3QgU2ltcGxlRm9udERhdGEmIGZvbnRE
YXRhLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24sIHNp
emVfdCBzdHJpbmdMZW5ndGgsIGJvb2wgbHRyKQotICAgIDogbV9mb250RGF0YShmb250RGF0YSkK
K0NvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRSdW46OkNvbXBsZXhUZXh0UnVuKGNv
bnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBzdHJpbmdM
b2NhdGlvbiwgc2l6ZV90IHN0cmluZ0xlbmd0aCwgYm9vbCBsdHIpCisgICAgOiBtX2ZvbnQoZm9u
dCkKICAgICAsIG1fY2hhcmFjdGVycyhjaGFyYWN0ZXJzKQogICAgICwgbV9zdHJpbmdMb2NhdGlv
bihzdHJpbmdMb2NhdGlvbikKICAgICAsIG1fc3RyaW5nTGVuZ3RoKHN0cmluZ0xlbmd0aCkKQEAg
LTE2Myw3ICsxNjMsNyBAQCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OkNvbXBsZXhUZXh0UnVuOjpD
CiAgICAgLy8gU3ludGhlc2l6ZSBhIHJ1biBvZiBtaXNzaW5nIGdseXBocy4KICAgICBtX2dseXBo
c1ZlY3Rvci5maWxsKDAsIG1fZ2x5cGhDb3VudCk7CiAgICAgbV9nbHlwaHMgPSBtX2dseXBoc1Zl
Y3Rvci5kYXRhKCk7Ci0gICAgbV9hZHZhbmNlc1ZlY3Rvci5maWxsKENHU2l6ZU1ha2UobV9mb250
RGF0YS53aWR0aEZvckdseXBoKDApLCAwKSwgbV9nbHlwaENvdW50KTsKKyAgICBtX2FkdmFuY2Vz
VmVjdG9yLmZpbGwoQ0dTaXplTWFrZShtX2ZvbnQud2lkdGhGb3JHbHlwaCgwKSwgMCksIG1fZ2x5
cGhDb3VudCk7CiAgICAgbV9hZHZhbmNlcyA9IG1fYWR2YW5jZXNWZWN0b3IuZGF0YSgpOwogfQog
CkBAIC0xODQsMTEgKzE4NCwxMSBAQCBzdGF0aWMgY29uc3QgVW5pQ2hhciogcHJvdmlkZVN0cmlu
Z0FuZEF0CiAgICAgcmV0dXJuIGluZm8tPmNwICsgc3RyaW5nSW5kZXg7CiB9CiAKLXZvaWQgQ29t
cGxleFRleHRDb250cm9sbGVyOjpjb2xsZWN0Q29tcGxleFRleHRSdW5zRm9yQ2hhcmFjdGVycyhj
b25zdCBVQ2hhciogY3AsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24s
IGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSkKK3ZvaWQgQ29tcGxleFRleHRDb250cm9s
bGVyOjpjb2xsZWN0Q29tcGxleFRleHRSdW5zRm9yQ2hhcmFjdGVycyhjb25zdCBVQ2hhciogY3As
IHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24sIGNvbnN0IEZvbnQqIGZv
bnQpCiB7Ci0gICAgaWYgKCFmb250RGF0YSkgeworICAgIGlmICghZm9udCkgewogICAgICAgICAv
LyBDcmVhdGUgYSBydW4gb2YgbWlzc2luZyBnbHlwaHMgZnJvbSB0aGUgcHJpbWFyeSBmb250Lgot
ICAgICAgICBtX2NvbXBsZXhUZXh0UnVucy5hcHBlbmQoQ29tcGxleFRleHRSdW46OmNyZWF0ZSht
X2ZvbnQucHJpbWFyeUZvbnREYXRhKCksIGNwLCBzdHJpbmdMb2NhdGlvbiwgbGVuZ3RoLCBtX3J1
bi5sdHIoKSkpOworICAgICAgICBtX2NvbXBsZXhUZXh0UnVucy5hcHBlbmQoQ29tcGxleFRleHRS
dW46OmNyZWF0ZShtX2ZvbnQucHJpbWFyeUZvbnQoKSwgY3AsIHN0cmluZ0xvY2F0aW9uLCBsZW5n
dGgsIG1fcnVuLmx0cigpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTE5NiwyNiAr
MTk2LDI2IEBAIHZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpjb2xsZWN0Q29tcGwKIAogICAg
IFVDaGFyMzIgYmFzZUNoYXJhY3RlciA9IDA7CiAgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJl
Zj4gc3RyaW5nQXR0cmlidXRlczsKLSAgICBpZiAoZm9udERhdGEgPT0gU2ltcGxlRm9udERhdGE6
OnN5c3RlbUZhbGxiYWNrKCkpIHsKKyAgICBpZiAoZm9udCA9PSBGb250OjpzeXN0ZW1GYWxsYmFj
aygpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGNvZGUgcGF0aCBkb2VzIG5vdCBzdXBwb3J0
IHNtYWxsIGNhcHMuCiAgICAgICAgIGlzU3lzdGVtRmFsbGJhY2sgPSB0cnVlOwogCiAgICAgICAg
IFUxNl9HRVQoY3AsIDAsIDAsIGxlbmd0aCwgYmFzZUNoYXJhY3Rlcik7Ci0gICAgICAgIGZvbnRE
YXRhID0gbV9mb250LmZhbGxiYWNrUmFuZ2VzQXQoMCkuZm9udERhdGFGb3JDaGFyYWN0ZXIoYmFz
ZUNoYXJhY3Rlcik7Ci0gICAgICAgIGlmICghZm9udERhdGEpCi0gICAgICAgICAgICBmb250RGF0
YSA9ICZtX2ZvbnQuZmFsbGJhY2tSYW5nZXNBdCgwKS5mb250RGF0YUZvckZpcnN0UmFuZ2UoKTsK
KyAgICAgICAgZm9udCA9IG1fZm9udC5mYWxsYmFja1Jhbmdlc0F0KDApLmZvbnRGb3JDaGFyYWN0
ZXIoYmFzZUNoYXJhY3Rlcik7CisgICAgICAgIGlmICghZm9udCkKKyAgICAgICAgICAgIGZvbnQg
PSAmbV9mb250LmZhbGxiYWNrUmFuZ2VzQXQoMCkuZm9udEZvckZpcnN0UmFuZ2UoKTsKIAogICAg
ICAgICBSZXRhaW5QdHI8V2ViQ2FzY2FkZUxpc3Q+IGNhc2NhZGVMaXN0ID0gYWRvcHROUyhbW1dl
YkNhc2NhZGVMaXN0IGFsbG9jXSBpbml0V2l0aEZvbnQ6Jm1fZm9udCBjaGFyYWN0ZXI6YmFzZUNo
YXJhY3Rlcl0pOwogCi0gICAgICAgIHN0cmluZ0F0dHJpYnV0ZXMgPSBhZG9wdENGKENGRGljdGlv
bmFyeUNyZWF0ZU11dGFibGVDb3B5KGtDRkFsbG9jYXRvckRlZmF1bHQsIDAsIGZvbnREYXRhLT5n
ZXRDRlN0cmluZ0F0dHJpYnV0ZXMobV9mb250LnR5cGVzZXR0aW5nRmVhdHVyZXMoKSwgZm9udERh
dGEtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkpKSk7CisgICAgICAgIHN0cmluZ0F0dHJp
YnV0ZXMgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZU11dGFibGVDb3B5KGtDRkFsbG9jYXRv
ckRlZmF1bHQsIDAsIGZvbnQtPmdldENGU3RyaW5nQXR0cmlidXRlcyhtX2ZvbnQudHlwZXNldHRp
bmdGZWF0dXJlcygpLCBmb250LT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpKSkpOwogICAg
ICAgICBzdGF0aWMgY29uc3Qgdm9pZCogYXR0cmlidXRlS2V5c1tdID0geyBrQ1RGb250Q2FzY2Fk
ZUxpc3RBdHRyaWJ1dGUgfTsKICAgICAgICAgY29uc3Qgdm9pZCogdmFsdWVzW10gPSB7IGNhc2Nh
ZGVMaXN0LmdldCgpIH07CiAgICAgICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGF0dHJp
YnV0ZXMgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBh
dHRyaWJ1dGVLZXlzLCB2YWx1ZXMsIHNpemVvZihhdHRyaWJ1dGVLZXlzKSAvIHNpemVvZigqYXR0
cmlidXRlS2V5cyksICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0
aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKICAgICAgICAgUmV0YWluUHRyPENURm9udERlc2NyaXB0
b3JSZWY+IGZvbnREZXNjcmlwdG9yID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ3JlYXRlV2l0
aEF0dHJpYnV0ZXMoYXR0cmlidXRlcy5nZXQoKSkpOwotICAgICAgICBSZXRhaW5QdHI8Q1RGb250
UmVmPiBmb250V2l0aENhc2NhZGVMaXN0ID0gYWRvcHRDRihDVEZvbnRDcmVhdGVDb3B5V2l0aEF0
dHJpYnV0ZXMoZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLmN0Rm9udCgpLCBtX2ZvbnQucGl4ZWxT
aXplKCksIDAsIGZvbnREZXNjcmlwdG9yLmdldCgpKSk7CisgICAgICAgIFJldGFpblB0cjxDVEZv
bnRSZWY+IGZvbnRXaXRoQ2FzY2FkZUxpc3QgPSBhZG9wdENGKENURm9udENyZWF0ZUNvcHlXaXRo
QXR0cmlidXRlcyhmb250LT5wbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSwgbV9mb250LnBpeGVsU2l6
ZSgpLCAwLCBmb250RGVzY3JpcHRvci5nZXQoKSkpOwogICAgICAgICBDRkRpY3Rpb25hcnlTZXRW
YWx1ZShjb25zdF9jYXN0PENGTXV0YWJsZURpY3Rpb25hcnlSZWY+KHN0cmluZ0F0dHJpYnV0ZXMu
Z2V0KCkpLCBrQ1RGb250QXR0cmlidXRlTmFtZSwgZm9udFdpdGhDYXNjYWRlTGlzdC5nZXQoKSk7
CiAgICAgfSBlbHNlCi0gICAgICAgIHN0cmluZ0F0dHJpYnV0ZXMgPSBmb250RGF0YS0+Z2V0Q0ZT
dHJpbmdBdHRyaWJ1dGVzKG1fZm9udC50eXBlc2V0dGluZ0ZlYXR1cmVzKCksIGZvbnREYXRhLT5w
bGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpKTsKKyAgICAgICAgc3RyaW5nQXR0cmlidXRlcyA9
IGZvbnQtPmdldENGU3RyaW5nQXR0cmlidXRlcyhtX2ZvbnQudHlwZXNldHRpbmdGZWF0dXJlcygp
LCBmb250LT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpKTsKIAogICAgIFJldGFpblB0cjxD
VExpbmVSZWY+IGxpbmU7CiAKQEAgLTI0OCw1NSArMjQ4LDU1IEBAIHZvaWQgQ29tcGxleFRleHRD
b250cm9sbGVyOjpjb2xsZWN0Q29tcGwKICAgICAgICAgQ1RSdW5SZWYgY3RSdW4gPSBzdGF0aWNf
Y2FzdDxDVFJ1blJlZj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChydW5BcnJheSwgbV9ydW4ubHRy
KCkgPyByIDogcnVuQ291bnQgLSAxIC0gcikpOwogICAgICAgICBBU1NFUlQoQ0ZHZXRUeXBlSUQo
Y3RSdW4pID09IENUUnVuR2V0VHlwZUlEKCkpOwogICAgICAgICBDRlJhbmdlIHJ1blJhbmdlID0g
Q1RSdW5HZXRTdHJpbmdSYW5nZShjdFJ1bik7Ci0gICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRh
KiBydW5Gb250RGF0YSA9IGZvbnREYXRhOworICAgICAgICBjb25zdCBGb250KiBydW5Gb250ID0g
Zm9udDsKICAgICAgICAgaWYgKGlzU3lzdGVtRmFsbGJhY2spIHsKICAgICAgICAgICAgIENGRGlj
dGlvbmFyeVJlZiBydW5BdHRyaWJ1dGVzID0gQ1RSdW5HZXRBdHRyaWJ1dGVzKGN0UnVuKTsKLSAg
ICAgICAgICAgIENURm9udFJlZiBydW5Gb250ID0gc3RhdGljX2Nhc3Q8Q1RGb250UmVmPihDRkRp
Y3Rpb25hcnlHZXRWYWx1ZShydW5BdHRyaWJ1dGVzLCBrQ1RGb250QXR0cmlidXRlTmFtZSkpOwot
ICAgICAgICAgICAgQVNTRVJUKENGR2V0VHlwZUlEKHJ1bkZvbnQpID09IENURm9udEdldFR5cGVJ
RCgpKTsKLSAgICAgICAgICAgIFJldGFpblB0cjxDRlR5cGVSZWY+IHJ1bkZvbnRFcXVhbGl0eU9i
amVjdCA9IEZvbnRQbGF0Zm9ybURhdGE6Om9iamVjdEZvckVxdWFsaXR5Q2hlY2socnVuRm9udCk7
Ci0gICAgICAgICAgICBpZiAoIUNGRXF1YWwocnVuRm9udEVxdWFsaXR5T2JqZWN0LmdldCgpLCBm
b250RGF0YS0+cGxhdGZvcm1EYXRhKCkub2JqZWN0Rm9yRXF1YWxpdHlDaGVjaygpLmdldCgpKSkg
eworICAgICAgICAgICAgQ1RGb250UmVmIHJ1bkNURm9udCA9IHN0YXRpY19jYXN0PENURm9udFJl
Zj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocnVuQXR0cmlidXRlcywga0NURm9udEF0dHJpYnV0ZU5h
bWUpKTsKKyAgICAgICAgICAgIEFTU0VSVChDRkdldFR5cGVJRChydW5DVEZvbnQpID09IENURm9u
dEdldFR5cGVJRCgpKTsKKyAgICAgICAgICAgIFJldGFpblB0cjxDRlR5cGVSZWY+IHJ1bkZvbnRF
cXVhbGl0eU9iamVjdCA9IEZvbnRQbGF0Zm9ybURhdGE6Om9iamVjdEZvckVxdWFsaXR5Q2hlY2so
cnVuQ1RGb250KTsKKyAgICAgICAgICAgIGlmICghQ0ZFcXVhbChydW5Gb250RXF1YWxpdHlPYmpl
Y3QuZ2V0KCksIGZvbnQtPnBsYXRmb3JtRGF0YSgpLm9iamVjdEZvckVxdWFsaXR5Q2hlY2soKS5n
ZXQoKSkpIHsKICAgICAgICAgICAgICAgICAvLyBCZWdpbiB0cnlpbmcgdG8gc2VlIGlmIHJ1bkZv
bnQgbWF0Y2hlcyBhbnkgb2YgdGhlIGZvbnRzIGluIHRoZSBmYWxsYmFjayBsaXN0LgogCiAgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgIW1fZm9udC5mYWxsYmFja1Jhbmdlc0F0
KGkpLmlzTnVsbCgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgcnVuRm9udERhdGEgPSBt
X2ZvbnQuZmFsbGJhY2tSYW5nZXNBdChpKS5mb250RGF0YUZvckNoYXJhY3RlcihiYXNlQ2hhcmFj
dGVyKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFydW5Gb250RGF0YSkKKyAgICAgICAgICAg
ICAgICAgICAgcnVuRm9udCA9IG1fZm9udC5mYWxsYmFja1Jhbmdlc0F0KGkpLmZvbnRGb3JDaGFy
YWN0ZXIoYmFzZUNoYXJhY3Rlcik7CisgICAgICAgICAgICAgICAgICAgIGlmICghcnVuRm9udCkK
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICBS
ZXRhaW5QdHI8Q0ZUeXBlUmVmPiBydW5Gb250RXF1YWxpdHlPYmplY3QgPSBydW5Gb250RGF0YS0+
cGxhdGZvcm1EYXRhKCkub2JqZWN0Rm9yRXF1YWxpdHlDaGVjaygpOworICAgICAgICAgICAgICAg
ICAgICBSZXRhaW5QdHI8Q0ZUeXBlUmVmPiBydW5Gb250RXF1YWxpdHlPYmplY3QgPSBydW5Gb250
LT5wbGF0Zm9ybURhdGEoKS5vYmplY3RGb3JFcXVhbGl0eUNoZWNrKCk7CiAgICAgICAgICAgICAg
ICAgICAgIGlmIChDRkVxdWFsKHJ1bkZvbnRFcXVhbGl0eU9iamVjdC5nZXQoKSwgcnVuRm9udEVx
dWFsaXR5T2JqZWN0LmdldCgpKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICBydW5Gb250RGF0YSA9IDA7CisgICAgICAgICAgICAgICAgICAgIHJ1
bkZvbnQgPSBudWxscHRyOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAvLyBJ
ZiB0aGVyZSBpcyBubyBtYXRjaGluZyBmb250LCBsb29rIHVwIGJ5IG5hbWUgaW4gdGhlIGZvbnQg
Y2FjaGUuCi0gICAgICAgICAgICAgICAgaWYgKCFydW5Gb250RGF0YSkgeworICAgICAgICAgICAg
ICAgIGlmICghcnVuRm9udCkgewogICAgICAgICAgICAgICAgICAgICAvLyBSYXRoZXIgdGhhbiB1
c2luZyBydW5Gb250IGFzIGFuIE5TRm9udCBhbmQgd3JhcHBpbmcgaXQgaW4gYSBGb250UGxhdGZv
cm1EYXRhLCBnbyB0aHJvdWdoCiAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBmb250IGNhY2hl
IGFuZCB1bHRpbWF0ZWx5IHRocm91Z2ggTlNGb250TWFuYWdlciBpbiBvcmRlciB0byBnZXQgYW4g
TlNGb250IHdpdGggdGhlIHJpZ2h0CiAgICAgICAgICAgICAgICAgICAgIC8vIE5TRm9udFJlbmRl
cmluZ01vZGUuCi0gICAgICAgICAgICAgICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gZm9u
dE5hbWUgPSBhZG9wdENGKENURm9udENvcHlQb3N0U2NyaXB0TmFtZShydW5Gb250KSk7CisgICAg
ICAgICAgICAgICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gZm9udE5hbWUgPSBhZG9wdENG
KENURm9udENvcHlQb3N0U2NyaXB0TmFtZShydW5DVEZvbnQpKTsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKENGRXF1YWwoZm9udE5hbWUuZ2V0KCksIENGU1RSKCJMYXN0UmVzb3J0IikpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBtX2NvbXBsZXhUZXh0UnVucy5hcHBlbmQoQ29tcGxleFRl
eHRSdW46OmNyZWF0ZShtX2ZvbnQucHJpbWFyeUZvbnREYXRhKCksIGNwLCBzdHJpbmdMb2NhdGlv
biArIHJ1blJhbmdlLmxvY2F0aW9uLCBydW5SYW5nZS5sZW5ndGgsIG1fcnVuLmx0cigpKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBtX2NvbXBsZXhUZXh0UnVucy5hcHBlbmQoQ29tcGxleFRl
eHRSdW46OmNyZWF0ZShtX2ZvbnQucHJpbWFyeUZvbnQoKSwgY3AsIHN0cmluZ0xvY2F0aW9uICsg
cnVuUmFuZ2UubG9jYXRpb24sIHJ1blJhbmdlLmxlbmd0aCwgbV9ydW4ubHRyKCkpKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIHJ1bkZvbnREYXRhID0gZm9udENhY2hlKCkuZm9udEZvckZhbWlseSht
X2ZvbnQuZm9udERlc2NyaXB0aW9uKCksIGZvbnROYW1lLmdldCgpLCBmYWxzZSkuZ2V0KCk7Cisg
ICAgICAgICAgICAgICAgICAgIHJ1bkZvbnQgPSBmb250Q2FjaGUoKS5mb250Rm9yRmFtaWx5KG1f
Zm9udC5mb250RGVzY3JpcHRpb24oKSwgZm9udE5hbWUuZ2V0KCksIGZhbHNlKS5nZXQoKTsKICNp
ZiAhUExBVEZPUk0oSU9TKQogICAgICAgICAgICAgICAgICAgICAvLyBDb3JlIFRleHQgbWF5IGhh
dmUgdXNlZCBhIGZvbnQgdGhhdCBpcyBub3Qga25vd24gdG8gTlNGb250TWFuYWdlci4gSW4gdGhh
dCBjYXNlLCBmYWxsIGJhY2sgb24KICAgICAgICAgICAgICAgICAgICAgLy8gdXNpbmcgdGhlIGZv
bnQgYXMgcmV0dXJuZWQsIGV2ZW4gdGhvdWdoIGl0IG1heSBub3QgaGF2ZSB0aGUgYmVzdCBOU0Zv
bnRSZW5kZXJpbmdNb2RlLgotICAgICAgICAgICAgICAgICAgICBpZiAoIXJ1bkZvbnREYXRhKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBGb250UGxhdGZvcm1EYXRhIHJ1bkZvbnRQbGF0Zm9y
bURhdGEoKE5TRm9udCAqKXJ1bkZvbnQsIENURm9udEdldFNpemUocnVuRm9udCksIG1fZm9udC5m
b250RGVzY3JpcHRpb24oKS51c2VQcmludGVyRm9udCgpKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJ1bkZvbnREYXRhID0gJmZvbnRDYWNoZSgpLmZvbnRGb3JQbGF0Zm9ybURhdGEocnVuRm9u
dFBsYXRmb3JtRGF0YSkuZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghcnVuRm9udCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgRm9udFBsYXRmb3JtRGF0YSBydW5Gb250UGxhdGZv
cm1EYXRhKChOU0ZvbnQgKilydW5DVEZvbnQsIENURm9udEdldFNpemUocnVuQ1RGb250KSwgbV9m
b250LmZvbnREZXNjcmlwdGlvbigpLnVzZVByaW50ZXJGb250KCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgcnVuRm9udCA9ICZmb250Q2FjaGUoKS5mb250Rm9yUGxhdGZvcm1EYXRhKHJ1bkZv
bnRQbGF0Zm9ybURhdGEpLmdldCgpOwogICAgICAgICAgICAgICAgICAgICB9CiAjZWxzZQogICAg
ICAgICAgICAgICAgICAgICAvLyBGSVhNRTogSnVzdCBhc3NlcnQgZm9yIG5vdywgdW50aWwgd2Ug
Y2FuIGRldmlzZSBhIGJldHRlciBmaXggdGhhdCB3b3JrcyB3aXRoIGlPUy4KLSAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKHJ1bkZvbnREYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KHJ1bkZvbnQpOwogI2VuZGlmCiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlm
IChtX2ZhbGxiYWNrRm9udHMgJiYgcnVuRm9udERhdGEgIT0gJm1fZm9udC5wcmltYXJ5Rm9udERh
dGEoKSkKLSAgICAgICAgICAgICAgICAgICAgbV9mYWxsYmFja0ZvbnRzLT5hZGQocnVuRm9udERh
dGEpOworICAgICAgICAgICAgICAgIGlmIChtX2ZhbGxiYWNrRm9udHMgJiYgcnVuRm9udCAhPSAm
bV9mb250LnByaW1hcnlGb250KCkpCisgICAgICAgICAgICAgICAgICAgIG1fZmFsbGJhY2tGb250
cy0+YWRkKHJ1bkZvbnQpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGlmICht
X2ZhbGxiYWNrRm9udHMgJiYgcnVuRm9udERhdGEgIT0gJm1fZm9udC5wcmltYXJ5Rm9udERhdGEo
KSkKLSAgICAgICAgICAgIG1fZmFsbGJhY2tGb250cy0+YWRkKGZvbnREYXRhKTsKKyAgICAgICAg
aWYgKG1fZmFsbGJhY2tGb250cyAmJiBydW5Gb250ICE9ICZtX2ZvbnQucHJpbWFyeUZvbnQoKSkK
KyAgICAgICAgICAgIG1fZmFsbGJhY2tGb250cy0+YWRkKGZvbnQpOwogCi0gICAgICAgIG1fY29t
cGxleFRleHRSdW5zLmFwcGVuZChDb21wbGV4VGV4dFJ1bjo6Y3JlYXRlKGN0UnVuLCAqcnVuRm9u
dERhdGEsIGNwLCBzdHJpbmdMb2NhdGlvbiwgbGVuZ3RoLCBydW5SYW5nZSkpOworICAgICAgICBt
X2NvbXBsZXhUZXh0UnVucy5hcHBlbmQoQ29tcGxleFRleHRSdW46OmNyZWF0ZShjdFJ1biwgKnJ1
bkZvbnQsIGNwLCBzdHJpbmdMb2NhdGlvbiwgbGVuZ3RoLCBydW5SYW5nZSkpOwogICAgIH0KIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDYWNoZU1h
Yy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMv
Rm9udENhY2hlTWFjLm1tCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvRm9udENhY2hlTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw4
ICszMyw4IEBACiAjaWYgIVBMQVRGT1JNKElPUykKIAogI2ltcG9ydCAiQ29yZUdyYXBoaWNzU1BJ
LmgiCisjaW1wb3J0ICJGb250LmgiCiAjaW1wb3J0ICJGb250Q2FzY2FkZS5oIgotI2ltcG9ydCAi
U2ltcGxlRm9udERhdGEuaCIKICNpbXBvcnQgIkZvbnRQbGF0Zm9ybURhdGEuaCIKICNpbXBvcnQg
Ik5TRm9udFNQSS5oIgogI2ltcG9ydCAiV2ViQ29yZU5TU3RyaW5nRXh0cmFzLmgiCkBAIC0zMzcs
NyArMzM3LDcgQEAgc3RhdGljIGJvb2wgc2hvdWxkQXV0b0FjdGl2YXRlRm9udElmTmVlZAogICAg
IHJldHVybiBrbm93bkZhbWlsaWVzLmdldCgpLmFkZChmYW1pbHkpLmlzTmV3RW50cnk7CiB9CiAK
LVJlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpzeXN0ZW1GYWxsYmFja0ZvckNoYXJh
Y3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgY29uc3QgU2ltcGxlRm9u
dERhdGEqIG9yaWdpbmFsRm9udERhdGEsIGJvb2wgaXNQbGF0Zm9ybUZvbnQsIGNvbnN0IFVDaGFy
KiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQorUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6c3lzdGVt
RmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24s
IGNvbnN0IEZvbnQqIG9yaWdpbmFsRm9udERhdGEsIGJvb2wgaXNQbGF0Zm9ybUZvbnQsIGNvbnN0
IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQogewogICAgIFVDaGFyMzIgY2hhcmFjdGVy
OwogICAgIFUxNl9HRVQoY2hhcmFjdGVycywgMCwgMCwgbGVuZ3RoLCBjaGFyYWN0ZXIpOwpAQCAt
NDA1LDM0ICs0MDUsMzUgQEAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OnN5c3Rl
bQogICAgIHJldHVybiBmb250Rm9yUGxhdGZvcm1EYXRhKGFsdGVybmF0ZUZvbnQpOwogfQogCi1S
ZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6c2ltaWxhckZvbnRQbGF0Zm9ybURhdGEo
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKK1JlZlB0cjxGb250PiBGb250Q2Fj
aGU6OnNpbWlsYXJGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCiB7CiAg
ICAgLy8gQXR0ZW1wdCB0byBmaW5kIGFuIGFwcHJvcHJpYXRlIGZvbnQgdXNpbmcgYSBtYXRjaCBi
YXNlZCBvbiAKICAgICAvLyB0aGUgcHJlc2VuY2Ugb2Yga2V5d29yZHMgaW4gdGhlIHRoZSByZXF1
ZXN0ZWQgbmFtZXMuICBGb3IgZXhhbXBsZSwgd2UnbGwKICAgICAvLyBtYXRjaCBhbnkgbmFtZSB0
aGF0IGNvbnRhaW5zICJBcmFiaWMiIHRvIEdlZXphIFByby4KLSAgICBSZWZQdHI8U2ltcGxlRm9u
dERhdGE+IHNpbXBsZUZvbnREYXRhOworICAgIFJlZlB0cjxGb250PiBmb250OwogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBkZXNjcmlwdGlvbi5mYW1pbHlDb3VudCgpOyArK2kpIHsKICAg
ICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkgPSBkZXNjcmlwdGlvbi5mYW1pbHlBdChp
KTsKICAgICAgICAgaWYgKGZhbWlseS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgc3RhdGljIFN0cmluZyogbWF0Y2hXb3Jkc1szXSA9IHsgbmV3IFN0cmluZygiQXJh
YmljIiksIG5ldyBTdHJpbmcoIlBhc2h0byIpLCBuZXcgU3RyaW5nKCJVcmR1IikgfTsKICAgICAg
ICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgZ2VlemFTdHIs
ICgiR2VlemEgUHJvIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotICAg
ICAgICBmb3IgKGludCBqID0gMDsgaiA8IDMgJiYgIXNpbXBsZUZvbnREYXRhOyArK2opCisgICAg
ICAgIGZvciAoaW50IGogPSAwOyBqIDwgMyAmJiAhZm9udDsgKytqKSB7CiAgICAgICAgICAgICBp
ZiAoZmFtaWx5LmNvbnRhaW5zKCptYXRjaFdvcmRzW2pdLCBmYWxzZSkpCi0gICAgICAgICAgICAg
ICAgc2ltcGxlRm9udERhdGEgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBnZWV6YVN0cik7
CisgICAgICAgICAgICAgICAgZm9udCA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGdlZXph
U3RyKTsKKyAgICAgICAgfQogICAgIH0KLSAgICByZXR1cm4gc2ltcGxlRm9udERhdGEucmVsZWFz
ZSgpOworICAgIHJldHVybiBmb250LnJlbGVhc2UoKTsKIH0KIAotUmVmPFNpbXBsZUZvbnREYXRh
PiBGb250Q2FjaGU6Omxhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBmb250RGVzY3JpcHRpb24pCitSZWY8Rm9udD4gRm9udENhY2hlOjpsYXN0UmVzb3J0RmFsbGJh
Y2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKQogewogICAgIERF
UFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIHRpbWVzU3RyLCAoIlRp
bWVzIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwogCiAgICAgLy8gRklY
TUU6IFdvdWxkIGJlIGV2ZW4gYmV0dGVyIHRvIHNvbWVob3cgZ2V0IHRoZSB1c2VyJ3MgZGVmYXVs
dCBmb250IGhlcmUuICBGb3Igbm93IHdlJ2xsIHBpY2sKICAgICAvLyB0aGUgZGVmYXVsdCB0aGF0
IHRoZSB1c2VyIHdvdWxkIGdldCB3aXRob3V0IGNoYW5naW5nIGFueSBwcmVmcy4KLSAgICBSZWZQ
dHI8U2ltcGxlRm9udERhdGE+IHNpbXBsZUZvbnREYXRhID0gZm9udEZvckZhbWlseShmb250RGVz
Y3JpcHRpb24sIHRpbWVzU3RyLCBmYWxzZSk7Ci0gICAgaWYgKHNpbXBsZUZvbnREYXRhKQotICAg
ICAgICByZXR1cm4gKnNpbXBsZUZvbnREYXRhOworICAgIFJlZlB0cjxGb250PiBmb250ID0gZm9u
dEZvckZhbWlseShmb250RGVzY3JpcHRpb24sIHRpbWVzU3RyLCBmYWxzZSk7CisgICAgaWYgKGZv
bnQpCisgICAgICAgIHJldHVybiAqZm9udDsKIAogICAgIC8vIFRoZSBUaW1lcyBmYWxsYmFjayB3
aWxsIGFsbW9zdCBhbHdheXMgd29yaywgYnV0IGluIHRoZSBoaWdobHkgdW51c3VhbCBjYXNlIHdo
ZXJlCiAgICAgLy8gdGhlIHVzZXIgZG9lc24ndCBoYXZlIGl0LCB3ZSBmYWxsIGJhY2sgb24gTHVj
aWRhIEdyYW5kZSBiZWNhdXNlIHRoYXQncwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL0dseXBoUGFnZU1hYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dseXBoUGFnZU1hYy5jcHAJKHJldmlzaW9uIDE3ODg1
NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HbHlwaFBhZ2VNYWMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw4ICszMSw4IEBACiAKICNpbmNsdWRlICJDb3JlR3Jh
cGhpY3NTUEkuaCIKICNpbmNsdWRlICJDb3JlVGV4dFNQSS5oIgorI2luY2x1ZGUgIkZvbnQuaCIK
ICNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAj
aW5jbHVkZSAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgogI2lmICFQTEFURk9STShJT1MpCiAj
aW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CkBAIC00
MCw3ICs0MCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGJvb2wgc2hvdWxk
VXNlQ29yZVRleHQoY29uc3QgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBj
b25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEpCitzdGF0aWMgYm9vbCBzaG91bGRVc2VDb3Jl
VGV4dChjb25zdCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IEZv
bnQqIGZvbnREYXRhKQogewogICAgIGlmIChmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkuaXNDb21w
b3NpdGVGb250UmVmZXJlbmNlKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNTUsNyArNTUs
NyBAQCBzdGF0aWMgYm9vbCBzaG91bGRVc2VDb3JlVGV4dChjb25zdCBVQ2hhCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi1ib29sIEdseXBoUGFnZTo6bWF5VXNlTWl4ZWRGb250RGF0YVdoZW5GaWxs
aW5nKGNvbnN0IFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgU2lt
cGxlRm9udERhdGEqIGZvbnREYXRhKQorYm9vbCBHbHlwaFBhZ2U6Om1heVVzZU1peGVkRm9udHNX
aGVuRmlsbGluZyhjb25zdCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNv
bnN0IEZvbnQqIGZvbnREYXRhKQogewogI2lmIFVTRShBUFBLSVQpCiAgICAgLy8gRklYTUU6IFRo
aXMgaXMgb25seSByZWFsbHkgbmVlZGVkIGZvciBjb21wb3NpdGUgZm9udCByZWZlcmVuY2VzLgpA
QCAtNjgsNyArNjgsNyBAQCBib29sIEdseXBoUGFnZTo6bWF5VXNlTWl4ZWRGb250RGF0YVdoZW5G
CiAjZW5kaWYKIH0KIAotYm9vbCBHbHlwaFBhZ2U6OmZpbGwodW5zaWduZWQgb2Zmc2V0LCB1bnNp
Z25lZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3Qg
U2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQorYm9vbCBHbHlwaFBhZ2U6OmZpbGwodW5zaWduZWQg
b2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxl
bmd0aCwgY29uc3QgRm9udCogZm9udERhdGEpCiB7CiAgICAgYm9vbCBoYXZlR2x5cGhzID0gZmFs
c2U7CiAKQEAgLTE2Myw3ICsxNjMsNyBAQCBib29sIEdseXBoUGFnZTo6ZmlsbCh1bnNpZ25lZCBv
ZmZzZXQsIHVuCiAgICAgICAgICAgICAgICAgICAgIH0KICNpZiBVU0UoQVBQS0lUKQogICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IFNpbXBsZUZvbnRE
YXRhKiBydW5TaW1wbGUgPSBmb250RGF0YS0+Y29tcG9zaXRlRm9udFJlZmVyZW5jZUZvbnREYXRh
KChOU0ZvbnQgKilydW5Gb250KTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgRm9udCogcnVu
U2ltcGxlID0gZm9udERhdGEtPmNvbXBvc2l0ZUZvbnRSZWZlcmVuY2VGb250KChOU0ZvbnQgKily
dW5Gb250KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHJ1blNpbXBsZSkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgZ2x5cGhDb3VudDsgKytpKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmluZ0luZGljZXNbaV0gPj0gc3Rh
dGljX2Nhc3Q8Q0ZJbmRleD4oYnVmZmVyTGVuZ3RoKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhQ29yZVRleHQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0
YUNvcmVUZXh0LmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhQ29yZVRleHQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNSw3ICsyNSw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IlNpbXBsZUZvbnREYXRhLmgiCisjaW5jbHVkZSAiRm9udC5oIgogCiAjaWYgIVBMQVRGT1JNKElP
UykKICNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4K
QEAgLTM1LDcgKzM1LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1DRkRpY3Rpb25hcnlS
ZWYgU2ltcGxlRm9udERhdGE6OmdldENGU3RyaW5nQXR0cmlidXRlcyhUeXBlc2V0dGluZ0ZlYXR1
cmVzIHR5cGVzZXR0aW5nRmVhdHVyZXMsIEZvbnRPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgY29u
c3QKK0NGRGljdGlvbmFyeVJlZiBGb250OjpnZXRDRlN0cmluZ0F0dHJpYnV0ZXMoVHlwZXNldHRp
bmdGZWF0dXJlcyB0eXBlc2V0dGluZ0ZlYXR1cmVzLCBGb250T3JpZW50YXRpb24gb3JpZW50YXRp
b24pIGNvbnN0CiB7CiAgICAgdW5zaWduZWQga2V5ID0gdHlwZXNldHRpbmdGZWF0dXJlcyArIDE7
CiAgICAgSGFzaE1hcDx1bnNpZ25lZCwgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4+OjpBZGRS
ZXN1bHQgYWRkUmVzdWx0ID0gbV9DRlN0cmluZ0F0dHJpYnV0ZXMuYWRkKGtleSwgUmV0YWluUHRy
PENGRGljdGlvbmFyeVJlZj4oKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhTWFjLm1tCShyZXZpc2lvbiAx
Nzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9u
dERhdGFNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKICAqLwogCiAjaW1w
b3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlNpbXBsZUZvbnREYXRhLmgiCisjaW1wb3J0ICJGb250
LmgiCiAKICNpbXBvcnQgIkJsb2NrRXhjZXB0aW9ucy5oIgogI2ltcG9ydCAiQ29sb3IuaCIKQEAg
LTcxLDcgKzcxLDcgQEAgc3RhdGljIGJvb2wgZm9udEhhc1ZlcnRpY2FsR2x5cGhzKENURm9udAog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGJvb2wgaW5pdEZvbnREYXRhKFNpbXBsZUZv
bnREYXRhKiBmb250RGF0YSkKK3N0YXRpYyBib29sIGluaXRGb250RGF0YShGb250KiBmb250RGF0
YSkKIHsKICAgICBpZiAoIWZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5jZ0ZvbnQoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtODUsNyArODUsNyBAQCBzdGF0aWMgTlNTdHJpbmcgKndlYkZh
bGxiYWNrRm9udEZhbWlseSh2CiAgICAgcmV0dXJuIHdlYkZhbGxiYWNrRm9udEZhbWlseTsKIH0K
IAotY29uc3QgU2ltcGxlRm9udERhdGEqIFNpbXBsZUZvbnREYXRhOjpjb21wb3NpdGVGb250UmVm
ZXJlbmNlRm9udERhdGEoTlNGb250ICprZXkpIGNvbnN0Citjb25zdCBGb250KiBGb250Ojpjb21w
b3NpdGVGb250UmVmZXJlbmNlRm9udChOU0ZvbnQgKmtleSkgY29uc3QKIHsKICAgICBpZiAoIWtl
eSB8fCBDRkVxdWFsKGFkb3B0Q0YoQ1RGb250Q29weVBvc3RTY3JpcHROYW1lKENURm9udFJlZihr
ZXkpKSkuZ2V0KCksIENGU1RSKCJMYXN0UmVzb3J0IikpKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKQEAgLTEwMywxMiArMTAzLDEyIEBAIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBTaW1wbGVGb250
RGF0YTo6Y28KICAgICAgICAgYm9vbCBzeW50aGV0aWNPYmxpcXVlID0gcGxhdGZvcm1EYXRhKCku
c3ludGhldGljT2JsaXF1ZSgpICYmICEodHJhaXRzICYga0NURm9udEl0YWxpY1RyYWl0KTsKIAog
ICAgICAgICBGb250UGxhdGZvcm1EYXRhIHN1YnN0aXR1dGVQbGF0Zm9ybShzdWJzdGl0dXRlRm9u
dCwgcGxhdGZvcm1EYXRhKCkuc2l6ZSgpLCBpc1VzaW5nUHJpbnRlckZvbnQsIHN5bnRoZXRpY0Jv
bGQsIHN5bnRoZXRpY09ibGlxdWUsIHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCksIHBsYXRm
b3JtRGF0YSgpLndpZHRoVmFyaWFudCgpKTsKLSAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZSA9IFNpbXBsZUZvbnREYXRhOjpjcmVhdGUoc3Vic3RpdHV0ZVBsYXRmb3JtLCBpc0N1c3Rv
bUZvbnQoKSk7CisgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBGb250OjpjcmVh
dGUoc3Vic3RpdHV0ZVBsYXRmb3JtLCBpc0N1c3RvbUZvbnQoKSk7CiAgICAgfQogICAgIHJldHVy
biBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOwogfQogCi12b2lkIFNpbXBsZUZvbnRE
YXRhOjpwbGF0Zm9ybUluaXQoKQordm9pZCBGb250OjpwbGF0Zm9ybUluaXQoKQogewogICAgIG1f
c3ludGhldGljQm9sZE9mZnNldCA9IG1fcGxhdGZvcm1EYXRhLm1fc3ludGhldGljQm9sZCA/IDEu
MGYgOiAwLmY7CiAKQEAgLTIyNiw3ICsyMjYsNyBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0
Zm9ybUluaXQoKQogICAgICAgICBlbHNlCiAgICAgICAgICAgICB4SGVpZ2h0ID0gc2NhbGVFbVRv
VW5pdHMoQ0dGb250R2V0WEhlaWdodChtX3BsYXRmb3JtRGF0YS5jZ0ZvbnQoKSksIHVuaXRzUGVy
RW0pICogcG9pbnRTaXplOwogICAgIH0gZWxzZQotICAgICAgICB4SGVpZ2h0ID0gdmVydGljYWxS
aWdodE9yaWVudGF0aW9uRm9udERhdGEoKS0+Zm9udE1ldHJpY3MoKS54SGVpZ2h0KCk7CisgICAg
ICAgIHhIZWlnaHQgPSB2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250KCktPmZvbnRNZXRyaWNz
KCkueEhlaWdodCgpOwogCiAgICAgbV9mb250TWV0cmljcy5zZXRVbml0c1BlckVtKHVuaXRzUGVy
RW0pOwogICAgIG1fZm9udE1ldHJpY3Muc2V0QXNjZW50KGFzY2VudCk7CkBAIC0yNDEsNyArMjQx
LDcgQEAgc3RhdGljIENGRGF0YVJlZiBjb3B5Rm9udFRhYmxlRm9yVGFnKEZvbgogICAgIHJldHVy
biBDR0ZvbnRDb3B5VGFibGVGb3JUYWcocGxhdGZvcm1EYXRhLmNnRm9udCgpLCB0YWJsZU5hbWUp
OwogfQogCi12b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUNoYXJXaWR0aEluaXQoKQordm9p
ZCBGb250OjpwbGF0Zm9ybUNoYXJXaWR0aEluaXQoKQogewogICAgIG1fYXZnQ2hhcldpZHRoID0g
MDsKICAgICBtX21heENoYXJXaWR0aCA9IDA7CkBAIC0yNjksMTcgKzI2OSwxNyBAQCB2b2lkIFNp
bXBsZUZvbnREYXRhOjpwbGF0Zm9ybUNoYXJXaWR0aEluCiB9CiAjZW5kaWYgLy8gVVNFKEFQUEtJ
VCkKIAotdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95KCkKK3ZvaWQgRm9udDo6
cGxhdGZvcm1EZXN0cm95KCkKIHsKIH0KIAogI2lmICFQTEFURk9STShJT1MpCi1QYXNzUmVmUHRy
PFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1DcmVhdGVTY2FsZWRGb250
RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2NhbGVG
YWN0b3IpIGNvbnN0CitQYXNzUmVmUHRyPEZvbnQ+IEZvbnQ6OnBsYXRmb3JtQ3JlYXRlU2NhbGVk
Rm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2NhbGVG
YWN0b3IpIGNvbnN0CiB7CiAgICAgaWYgKGlzQ3VzdG9tRm9udCgpKSB7CiAgICAgICAgIEZvbnRQ
bGF0Zm9ybURhdGEgc2NhbGVkRm9udERhdGEobV9wbGF0Zm9ybURhdGEpOwogICAgICAgICBzY2Fs
ZWRGb250RGF0YS5tX3NpemUgPSBzY2FsZWRGb250RGF0YS5tX3NpemUgKiBzY2FsZUZhY3RvcjsK
LSAgICAgICAgcmV0dXJuIFNpbXBsZUZvbnREYXRhOjpjcmVhdGUoc2NhbGVkRm9udERhdGEsIHRy
dWUsIGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIEZvbnQ6OmNyZWF0ZShzY2FsZWRGb250RGF0YSwg
dHJ1ZSwgZmFsc2UpOwogICAgIH0KIAogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsK
QEAgLTMxMCw3ICszMTAsNyBAQCBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250
RGF0CiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgU2ltcGxlRm9udERhdGE6OmRldGVybWluZVBp
dGNoKCkKK3ZvaWQgRm9udDo6ZGV0ZXJtaW5lUGl0Y2goKQogewogICAgIE5TRm9udCogZiA9IG1f
cGxhdGZvcm1EYXRhLm5zRm9udCgpOwogICAgIC8vIFNwZWNpYWwgY2FzZSBPc2FrYS1Nb25vLgpA
QCAtMzMzLDcgKzMzMyw3IEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OmRldGVybWluZVBpdGNoKCkK
IH0KICNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCi1GbG9hdFJlY3QgU2ltcGxlRm9udERhdGE6
OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CitGbG9hdFJlY3QgRm9u
dDo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKIHsKICAgICBGbG9h
dFJlY3QgYm91bmRpbmdCb3g7CiAgICAgYm91bmRpbmdCb3ggPSBDVEZvbnRHZXRCb3VuZGluZ1Jl
Y3RzRm9yR2x5cGhzKG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBwbGF0Zm9ybURhdGEoKS5vcmll
bnRhdGlvbigpID09IFZlcnRpY2FsID8ga0NURm9udFZlcnRpY2FsT3JpZW50YXRpb24gOiBrQ1RG
b250SG9yaXpvbnRhbE9yaWVudGF0aW9uLCAmZ2x5cGgsIDAsIDEpOwpAQCAtMzQ1LDcgKzM0NSw3
IEBAIEZsb2F0UmVjdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Cb3VuZHMKIH0KIAogI2lmIFBM
QVRGT1JNKE1BQykKLWlubGluZSBDR0ZvbnRSZW5kZXJpbmdTdHlsZSBTaW1wbGVGb250RGF0YTo6
cmVuZGVyaW5nU3R5bGUoKSBjb25zdAoraW5saW5lIENHRm9udFJlbmRlcmluZ1N0eWxlIEZvbnQ6
OnJlbmRlcmluZ1N0eWxlKCkgY29uc3QKIHsKICAgICBDR0ZvbnRSZW5kZXJpbmdTdHlsZSBzdHls
ZSA9IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZUFudGlhbGlhc2luZyB8IGtDR0ZvbnRSZW5kZXJpbmdT
dHlsZVN1YnBpeGVsUG9zaXRpb25pbmcgfCBrQ0dGb250UmVuZGVyaW5nU3R5bGVTdWJwaXhlbFF1
YW50aXphdGlvbjsKICAgICBOU0ZvbnQgKmZvbnQgPSBwbGF0Zm9ybURhdGEoKS5uc0ZvbnQoKTsK
QEAgLTM2NCw3ICszNjQsNyBAQCBpbmxpbmUgQ0dGb250UmVuZGVyaW5nU3R5bGUgU2ltcGxlRm9u
dERhCiAgICAgcmV0dXJuIHN0eWxlOwogfQogCi1pbmxpbmUgYm9vbCBTaW1wbGVGb250RGF0YTo6
YWR2YW5jZUZvckNvbG9yQml0bWFwRm9udChHbHlwaCBnbHlwaCwgQ0dTaXplJiBhZHZhbmNlKSBj
b25zdAoraW5saW5lIGJvb2wgRm9udDo6YWR2YW5jZUZvckNvbG9yQml0bWFwRm9udChHbHlwaCBn
bHlwaCwgQ0dTaXplJiBhZHZhbmNlKSBjb25zdAogewogICAgIE5TRm9udCAqZm9udCA9IHBsYXRm
b3JtRGF0YSgpLm5zRm9udCgpOwogICAgIGlmICghZm9udCB8fCAhcGxhdGZvcm1EYXRhKCkuaXND
b2xvckJpdG1hcEZvbnQoKSkKQEAgLTM5NCw3ICszOTQsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wg
aXNFbW9qaShjb25zdCBGb250UGxhCiAjZW5kaWYKIH0KIAotaW5saW5lIGJvb2wgU2ltcGxlRm9u
dERhdGE6OmNhblVzZUZhc3RHbHlwaEFkdmFuY2VHZXR0ZXIoR2x5cGggZ2x5cGgsIENHU2l6ZSYg
YWR2YW5jZSwgYm9vbCYgcG9wdWxhdGVkQWR2YW5jZSkgY29uc3QKK2lubGluZSBib29sIEZvbnQ6
OmNhblVzZUZhc3RHbHlwaEFkdmFuY2VHZXR0ZXIoR2x5cGggZ2x5cGgsIENHU2l6ZSYgYWR2YW5j
ZSwgYm9vbCYgcG9wdWxhdGVkQWR2YW5jZSkgY29uc3QKIHsKICAgICAvLyBGYXN0IGdldHRlciBk
b2Vzbid0IHRha2UgY3VzdG9tIHRyYWNraW5nIGludG8gYWNjb3VudAogICAgIGlmIChoYXNDdXN0
b21UcmFja2luZyhwbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSkpCkBAIC00MTAsNyArNDEwLDcgQEAg
aW5saW5lIGJvb2wgU2ltcGxlRm9udERhdGE6OmNhblVzZUZhc3RHbAogICAgIHJldHVybiB0cnVl
OwogfQogCi1mbG9hdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBo
IGdseXBoKSBjb25zdAorZmxvYXQgRm9udDo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGds
eXBoKSBjb25zdAogewogICAgIENHU2l6ZSBhZHZhbmNlID0gQ0dTaXplWmVybzsKICAgICBib29s
IGhvcml6b250YWwgPSBwbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IEhvcml6b250YWw7
CkBAIC00NDYsNyArNDQ2LDcgQEAgc3RhdGljIGNvbnN0IFVuaUNoYXIqIHByb3ZpZGVTdHJpbmdB
bmRBdAogICAgIHJldHVybiBpbmZvLT5jaGFyYWN0ZXJzICsgc3RyaW5nSW5kZXg7CiB9CiAKLWJv
b2wgU2ltcGxlRm9udERhdGE6OmNhblJlbmRlckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNv
bnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKSBjb25zdAorYm9vbCBGb250Ojpj
YW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBVQ2hhciogY2hhcmFjdGVy
cywgc2l6ZV90IGxlbmd0aCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlw
ZU1hdGhEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVudHlwZS9PcGVuVHlwZU1hdGhEYXRhLmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVNYXRoRGF0
YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEyICsyNiwxMiBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIk9wZW5UeXBlTWF0aERhdGEuaCIKIAorI2luY2x1ZGUgIkZvbnQuaCIK
ICNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCiAjaWYgRU5BQkxFKE9QRU5UWVBFX01BVEgp
CiAjaW5jbHVkZSAiT3BlblR5cGVUeXBlcy5oIgogI2VuZGlmCiAjaW5jbHVkZSAiU2hhcmVkQnVm
ZmVyLmgiCi0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKIAogdXNpbmcgbmFtZXNwYWNlIHN0
ZDsKIApAQCAtMjM1LDkgKzIzNSw5IEBAIHN0cnVjdCBNQVRIVGFibGUgOiBUYWJsZUJhc2Ugewog
I2VuZGlmIC8vIEVOQUJMRShPUEVOVFlQRV9NQVRIKQogCiAjaWYgRU5BQkxFKE9QRU5UWVBFX01B
VEgpCi1PcGVuVHlwZU1hdGhEYXRhOjpPcGVuVHlwZU1hdGhEYXRhKGNvbnN0IEZvbnRQbGF0Zm9y
bURhdGEmIGZvbnREYXRhKQorT3BlblR5cGVNYXRoRGF0YTo6T3BlblR5cGVNYXRoRGF0YShjb25z
dCBGb250UGxhdGZvcm1EYXRhJiBmb250KQogewotICAgIG1fbWF0aEJ1ZmZlciA9IGZvbnREYXRh
Lm9wZW5UeXBlVGFibGUoT3BlblR5cGU6Ok1BVEhUYWcpOworICAgIG1fbWF0aEJ1ZmZlciA9IGZv
bnQub3BlblR5cGVUYWJsZShPcGVuVHlwZTo6TUFUSFRhZyk7CiAgICAgY29uc3QgT3BlblR5cGU6
Ok1BVEhUYWJsZSogbWF0aCA9IE9wZW5UeXBlOjp2YWxpZGF0ZVRhYmxlPE9wZW5UeXBlOjpNQVRI
VGFibGU+KG1fbWF0aEJ1ZmZlcik7CiAgICAgaWYgKCFtYXRoKSB7CiAgICAgICAgIG1fbWF0aEJ1
ZmZlciA9IG51bGxwdHI7CkBAIC0yNjUsNyArMjY1LDcgQEAgT3BlblR5cGVNYXRoRGF0YTo6fk9w
ZW5UeXBlTWF0aERhdGEoKQogfQogCiAjaWYgRU5BQkxFKE9QRU5UWVBFX01BVEgpCi1mbG9hdCBP
cGVuVHlwZU1hdGhEYXRhOjpnZXRNYXRoQ29uc3RhbnQoY29uc3QgU2ltcGxlRm9udERhdGEmIGZv
bnQsIE1hdGhDb25zdGFudCBjb25zdGFudCkgY29uc3QKK2Zsb2F0IE9wZW5UeXBlTWF0aERhdGE6
OmdldE1hdGhDb25zdGFudChjb25zdCBGb250JiBmb250LCBNYXRoQ29uc3RhbnQgY29uc3RhbnQp
IGNvbnN0CiB7CiAgICAgaW50MzJfdCB2YWx1ZSA9IDA7CiAKQEAgLTI4OCw3ICsyODgsNyBAQCBm
bG9hdCBPcGVuVHlwZU1hdGhEYXRhOjpnZXRNYXRoQ29uc3RhbnQoCiAKICAgICByZXR1cm4gdmFs
dWUgKiBmb250LnNpemVQZXJVbml0KCk7CiAjZWxzZQotZmxvYXQgT3BlblR5cGVNYXRoRGF0YTo6
Z2V0TWF0aENvbnN0YW50KGNvbnN0IFNpbXBsZUZvbnREYXRhJiwgTWF0aENvbnN0YW50KSBjb25z
dAorZmxvYXQgT3BlblR5cGVNYXRoRGF0YTo6Z2V0TWF0aENvbnN0YW50KGNvbnN0IEZvbnQmLCBN
YXRoQ29uc3RhbnQpIGNvbnN0CiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0
dXJuIDA7CkBAIC0yOTYsNyArMjk2LDcgQEAgZmxvYXQgT3BlblR5cGVNYXRoRGF0YTo6Z2V0TWF0
aENvbnN0YW50KAogfQogCiAjaWYgRU5BQkxFKE9QRU5UWVBFX01BVEgpCi1mbG9hdCBPcGVuVHlw
ZU1hdGhEYXRhOjpnZXRJdGFsaWNDb3JyZWN0aW9uKGNvbnN0IFNpbXBsZUZvbnREYXRhJiBmb250
LCBHbHlwaCBnbHlwaCkgY29uc3QKK2Zsb2F0IE9wZW5UeXBlTWF0aERhdGE6OmdldEl0YWxpY0Nv
cnJlY3Rpb24oY29uc3QgRm9udCYgZm9udCwgR2x5cGggZ2x5cGgpIGNvbnN0CiB7CiAgICAgY29u
c3QgT3BlblR5cGU6Ok1BVEhUYWJsZSogbWF0aCA9IE9wZW5UeXBlOjp2YWxpZGF0ZVRhYmxlPE9w
ZW5UeXBlOjpNQVRIVGFibGU+KG1fbWF0aEJ1ZmZlcik7CiAgICAgQVNTRVJUKG1hdGgpOwpAQCAt
MzEwLDcgKzMxMCw3IEBAIGZsb2F0IE9wZW5UeXBlTWF0aERhdGE6OmdldEl0YWxpY0NvcnJlY3QK
IAogICAgIHJldHVybiBtYXRoSXRhbGljc0NvcnJlY3Rpb25JbmZvLT5nZXRJdGFsaWNDb3JyZWN0
aW9uKCptX21hdGhCdWZmZXIsIGdseXBoKSAqIGZvbnQuc2l6ZVBlclVuaXQoKTsKICNlbHNlCi1m
bG9hdCBPcGVuVHlwZU1hdGhEYXRhOjpnZXRJdGFsaWNDb3JyZWN0aW9uKGNvbnN0IFNpbXBsZUZv
bnREYXRhJiwgR2x5cGgpIGNvbnN0CitmbG9hdCBPcGVuVHlwZU1hdGhEYXRhOjpnZXRJdGFsaWND
b3JyZWN0aW9uKGNvbnN0IEZvbnQmLCBHbHlwaCkgY29uc3QKIHsKICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICByZXR1cm4gMDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW50eXBlL09wZW5UeXBlTWF0aERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZU1hdGhEYXRhLmgJKHJl
dmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW50
eXBlL09wZW5UeXBlTWF0aERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTMgKzM1LDEzIEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRm9udFBsYXRmb3JtRGF0YTsKIGNsYXNzIFNo
YXJlZEJ1ZmZlcjsKLWNsYXNzIFNpbXBsZUZvbnREYXRhOworY2xhc3MgRm9udDsKIAogY2xhc3Mg
T3BlblR5cGVNYXRoRGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPE9wZW5UeXBlTWF0aERhdGE+IHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxPcGVuVHlwZU1hdGhEYXRhPiBjcmVhdGUo
Y29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZm9udERhdGEpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8
T3BlblR5cGVNYXRoRGF0YT4gY3JlYXRlKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnQpCiAg
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE9wZW5UeXBlTWF0aERhdGEoZm9udERh
dGEpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBPcGVuVHlwZU1hdGhEYXRhKGZvbnQp
KTsKICAgICB9CiAgICAgfk9wZW5UeXBlTWF0aERhdGEoKTsKIApAQCAtMTEzLDggKzExMyw4IEBA
IHB1YmxpYzoKICAgICAgICAgYm9vbCBpc0V4dGVuZGVyOwogICAgIH07CiAKLSAgICBmbG9hdCBn
ZXRNYXRoQ29uc3RhbnQoY29uc3QgU2ltcGxlRm9udERhdGEmLCBNYXRoQ29uc3RhbnQpIGNvbnN0
OwotICAgIGZsb2F0IGdldEl0YWxpY0NvcnJlY3Rpb24oY29uc3QgU2ltcGxlRm9udERhdGEmLCBH
bHlwaCkgY29uc3Q7CisgICAgZmxvYXQgZ2V0TWF0aENvbnN0YW50KGNvbnN0IEZvbnQmLCBNYXRo
Q29uc3RhbnQpIGNvbnN0OworICAgIGZsb2F0IGdldEl0YWxpY0NvcnJlY3Rpb24oY29uc3QgRm9u
dCYsIEdseXBoKSBjb25zdDsKICAgICB2b2lkIGdldE1hdGhWYXJpYW50cyhHbHlwaCwgYm9vbCBp
c1ZlcnRpY2FsLCBWZWN0b3I8R2x5cGg+JiBzaXplVmFyaWFudHMsIFZlY3RvcjxBc3NlbWJseVBh
cnQ+JiBhc3NlbWJseVBhcnRzKSBjb25zdDsKIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlVmVydGljYWxEYXRhLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9P
cGVuVHlwZVZlcnRpY2FsRGF0YS5jcHAJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlVmVydGljYWxEYXRhLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjcsMTAgKzI3LDEwIEBACiAjaW5jbHVkZSAiT3BlblR5cGVWZXJ0
aWNhbERhdGEuaCIKIAogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkZvbnQuaCIK
ICNpbmNsdWRlICJHbHlwaFBhZ2UuaCIKICNpbmNsdWRlICJPcGVuVHlwZVR5cGVzLmgiCiAjaW5j
bHVkZSAiU2hhcmVkQnVmZmVyLmgiCi0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKICNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CkBAIC00NzksNyArNDc5
LDcgQEAgdm9pZCBPcGVuVHlwZVZlcnRpY2FsRGF0YTo6bG9hZFZlcnRpY2FsRwogICAgICAgICBn
c3ViLT5nZXRWZXJ0aWNhbEdseXBoU3Vic3RpdHV0aW9ucygmbV92ZXJ0aWNhbEdseXBoTWFwLCAq
YnVmZmVyLmdldCgpKTsKIH0KIAotZmxvYXQgT3BlblR5cGVWZXJ0aWNhbERhdGE6OmFkdmFuY2VI
ZWlnaHQoY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsIEdseXBoIGdseXBoKSBjb25zdAorZmxv
YXQgT3BlblR5cGVWZXJ0aWNhbERhdGE6OmFkdmFuY2VIZWlnaHQoY29uc3QgRm9udCogZm9udCwg
R2x5cGggZ2x5cGgpIGNvbnN0CiB7CiAgICAgc2l6ZV90IGNvdW50SGVpZ2h0cyA9IG1fYWR2YW5j
ZUhlaWdodHMuc2l6ZSgpOwogICAgIGlmIChjb3VudEhlaWdodHMpIHsKQEAgLTQ5Miw3ICs0OTIs
NyBAQCBmbG9hdCBPcGVuVHlwZVZlcnRpY2FsRGF0YTo6YWR2YW5jZUhlaWdoCiAgICAgcmV0dXJu
IGZvbnQtPmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCk7CiB9CiAKLXZvaWQgT3BlblR5cGVWZXJ0aWNh
bERhdGE6OmdldFZlcnRpY2FsVHJhbnNsYXRpb25zRm9yR2x5cGhzKGNvbnN0IFNpbXBsZUZvbnRE
YXRhKiBmb250LCBjb25zdCBHbHlwaCogZ2x5cGhzLCBzaXplX3QgY291bnQsIGZsb2F0KiBvdXRY
WUFycmF5KSBjb25zdAordm9pZCBPcGVuVHlwZVZlcnRpY2FsRGF0YTo6Z2V0VmVydGljYWxUcmFu
c2xhdGlvbnNGb3JHbHlwaHMoY29uc3QgRm9udCogZm9udCwgY29uc3QgR2x5cGgqIGdseXBocywg
c2l6ZV90IGNvdW50LCBmbG9hdCogb3V0WFlBcnJheSkgY29uc3QKIHsKICAgICBzaXplX3QgY291
bnRXaWR0aHMgPSBtX2FkdmFuY2VXaWR0aHMuc2l6ZSgpOwogICAgIEFTU0VSVChjb3VudFdpZHRo
cyA+IDApOwpAQCAtNTM1LDcgKzUzNSw3IEBAIHZvaWQgT3BlblR5cGVWZXJ0aWNhbERhdGE6Omdl
dFZlcnRpY2FsVHIKICAgICB9CiB9CiAKLXZvaWQgT3BlblR5cGVWZXJ0aWNhbERhdGE6OnN1YnN0
aXR1dGVXaXRoVmVydGljYWxHbHlwaHMoY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsIEdseXBo
UGFnZSogZ2x5cGhQYWdlLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3QK
K3ZvaWQgT3BlblR5cGVWZXJ0aWNhbERhdGE6OnN1YnN0aXR1dGVXaXRoVmVydGljYWxHbHlwaHMo
Y29uc3QgRm9udCogZm9udCwgR2x5cGhQYWdlKiBnbHlwaFBhZ2UsIHVuc2lnbmVkIG9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoKSBjb25zdAogewogICAgIGNvbnN0IEhhc2hNYXA8R2x5cGgsIEdseXBo
PiYgbWFwID0gbV92ZXJ0aWNhbEdseXBoTWFwOwogICAgIGlmIChtYXAuaXNFbXB0eSgpKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVWZXJ0
aWNhbERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVudHlwZS9PcGVuVHlwZVZlcnRpY2FsRGF0YS5oCShyZXZpc2lvbiAxNzg4NTcpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVZlcnRpY2Fs
RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw5ICszNSw5IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAorY2xhc3MgRm9udDsKIGNsYXNzIEZvbnRQbGF0Zm9ybURhdGE7CiBjbGFzcyBHbHlw
aFBhZ2U7Ci1jbGFzcyBTaW1wbGVGb250RGF0YTsKIAogY2xhc3MgT3BlblR5cGVWZXJ0aWNhbERh
dGEgOiBwdWJsaWMgUmVmQ291bnRlZDxPcGVuVHlwZVZlcnRpY2FsRGF0YT4gewogcHVibGljOgpA
QCAtNDgsOSArNDgsOSBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzT3BlblR5cGUoKSBjb25zdCB7
IHJldHVybiAhbV9hZHZhbmNlV2lkdGhzLmlzRW1wdHkoKTsgfQogICAgIGJvb2wgaGFzVmVydGlj
YWxNZXRyaWNzKCkgY29uc3QgeyByZXR1cm4gIW1fYWR2YW5jZUhlaWdodHMuaXNFbXB0eSgpOyB9
Ci0gICAgZmxvYXQgYWR2YW5jZUhlaWdodChjb25zdCBTaW1wbGVGb250RGF0YSosIEdseXBoKSBj
b25zdDsKLSAgICB2b2lkIGdldFZlcnRpY2FsVHJhbnNsYXRpb25zRm9yR2x5cGhzKGNvbnN0IFNp
bXBsZUZvbnREYXRhKiwgY29uc3QgR2x5cGgqLCBzaXplX3QsIGZsb2F0KiBvdXRYWUFycmF5KSBj
b25zdDsKLSAgICB2b2lkIHN1YnN0aXR1dGVXaXRoVmVydGljYWxHbHlwaHMoY29uc3QgU2ltcGxl
Rm9udERhdGEqLCBHbHlwaFBhZ2UqLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkg
Y29uc3Q7CisgICAgZmxvYXQgYWR2YW5jZUhlaWdodChjb25zdCBGb250KiwgR2x5cGgpIGNvbnN0
OworICAgIHZvaWQgZ2V0VmVydGljYWxUcmFuc2xhdGlvbnNGb3JHbHlwaHMoY29uc3QgRm9udCos
IGNvbnN0IEdseXBoKiwgc2l6ZV90LCBmbG9hdCogb3V0WFlBcnJheSkgY29uc3Q7CisgICAgdm9p
ZCBzdWJzdGl0dXRlV2l0aFZlcnRpY2FsR2x5cGhzKGNvbnN0IEZvbnQqLCBHbHlwaFBhZ2UqLCB1
bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAg
ZXhwbGljaXQgT3BlblR5cGVWZXJ0aWNhbERhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDR1dpbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRD
R1dpbi5jcHAJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMCArMjgsMTAg
QEAKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkZsb2F0Q29udmVy
c2lvbi5oIgorI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRl
ICJTaW1wbGVGb250RGF0YS5oIgogI2luY2x1ZGUgIlVuaXNjcmliZUNvbnRyb2xsZXIuaCIKICNp
bmNsdWRlICJXZWJDb3JlVGV4dFJlbmRlcmVyLmgiCiAjaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2
aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CkBAIC0xMjcsNyArMTI3LDcgQEAgc3RhdGljIENH
UGF0aFJlZiBjcmVhdGVQYXRoRm9yR2x5cGgoSERDIAogICAgIHJldHVybiBwYXRoOwogfQogCi12
b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250
ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBo
QnVmZmVyLAordm9pZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGdy
YXBoaWNzQ29udGV4dCwgY29uc3QgRm9udCogZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBo
QnVmZmVyLAogICAgIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBw
b2ludCkgY29uc3QKIHsKICAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gZ3JhcGhpY3NDb250
ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3BwCShyZXZpc2lvbiAxNzg4NTcp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjgsOSArMjgsOSBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSA8d2luc29jazIuaD4KKyNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9u
dENhY2hlLmgiCiAjaW5jbHVkZSAiSFduZERDLmgiCi0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEu
aCIKICNpbmNsdWRlIDxtbGFuZy5oPgogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNpbmNsdWRlIDx3
dGYvSGFzaFNldC5oPgpAQCAtMTk5LDEwICsxOTksMTAgQEAgc3RhdGljIEhGT05UIGNyZWF0ZU1M
YW5nRm9udChJTUxhbmdGb250TAogICAgIHJldHVybiBoZm9udDsKIH0KIAotUmVmUHRyPFNpbXBs
ZUZvbnREYXRhPiBGb250Q2FjaGU6OnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhjb25zdCBG
b250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBTaW1wbGVGb250RGF0YSogb3JpZ2lu
YWxGb250RGF0YSwgYm9vbCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCitS
ZWZQdHI8Rm9udD4gRm9udENhY2hlOjpzeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgY29uc3QgRm9udCogb3JpZ2luYWxGb250RGF0
YSwgYm9vbCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCiB7CiAgICAgVUNo
YXIgY2hhcmFjdGVyID0gY2hhcmFjdGVyc1swXTsKLSAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+
IGZvbnREYXRhOworICAgIFJlZlB0cjxGb250PiBmb250RGF0YTsKICAgICBIV25kREMgaGRjKDAp
OwogICAgIEhGT05UIHByaW1hcnlGb250ID0gb3JpZ2luYWxGb250RGF0YS0+cGxhdGZvcm1EYXRh
KCkuaGZvbnQoKTsKICAgICBIR0RJT0JKIG9sZEZvbnQgPSBTZWxlY3RPYmplY3QoaGRjLCBwcmlt
YXJ5Rm9udCk7CkBAIC0zMDksMTYgKzMwOSwxNiBAQCBSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZv
bnRDYWNoZTo6c3lzdGVtCiAgICAgcmV0dXJuIGZvbnREYXRhLnJlbGVhc2UoKTsKIH0KIAotUmVm
UHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmZvbnREYXRhRnJvbURlc2NyaXB0aW9uQW5k
TG9nRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgTE9H
Rk9OVCYgZm9udCwgQXRvbWljU3RyaW5nJiBvdXRGb250RmFtaWx5TmFtZSkKK1JlZlB0cjxGb250
PiBGb250Q2FjaGU6OmZvbnREYXRhRnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChjb25zdCBGb250
RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgTE9HRk9OVCYgZm9udCwgQXRvbWlj
U3RyaW5nJiBvdXRGb250RmFtaWx5TmFtZSkKIHsKICAgICBBdG9taWNTdHJpbmcgZmFtaWx5TmFt
ZSA9IFN0cmluZyhmb250LmxmRmFjZU5hbWUsIHdjc25sZW4oZm9udC5sZkZhY2VOYW1lLCBMRl9G
QUNFU0laRSkpOwotICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gZm9udERhdGEgPSBmb250Rm9y
RmFtaWx5KGZvbnREZXNjcmlwdGlvbiwgZmFtaWx5TmFtZSk7CisgICAgUmVmUHRyPEZvbnQ+IGZv
bnREYXRhID0gZm9udEZvckZhbWlseShmb250RGVzY3JpcHRpb24sIGZhbWlseU5hbWUpOwogICAg
IGlmIChmb250RGF0YSkKICAgICAgICAgb3V0Rm9udEZhbWlseU5hbWUgPSBmYW1pbHlOYW1lOwog
ICAgIHJldHVybiBmb250RGF0YTsKIH0KIAotUmVmPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6
Omxhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3Jp
cHRpb24pCitSZWY8Rm9udD4gRm9udENhY2hlOjpsYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKQogewogICAgIERFUFJFQ0FURURfREVG
SU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIGZhbGxiYWNrRm9udE5hbWUsICgpKTsKICAg
ICBpZiAoIWZhbGxiYWNrRm9udE5hbWUuaXNFbXB0eSgpKQpAQCAtMzM3LDcgKzMzNyw3IEBAIFJl
ZjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpsYXN0UmVzb3IKICAgICAgICAgQXRvbWljU3Ry
aW5nKCJMdWNpZGEgU2FucyBVbmljb2RlIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCksCiAgICAgICAgIEF0b21pY1N0cmluZygiQXJpYWwiLCBBdG9taWNTdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKQogICAgIH07Ci0gICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBzaW1w
bGVGb250OworICAgIFJlZlB0cjxGb250PiBzaW1wbGVGb250OwogICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgV1RGX0FSUkFZX0xFTkdUSChmYWxsYmFja0ZvbnRzKTsgKytpKSB7CiAgICAgICAg
IGlmIChzaW1wbGVGb250ID0gZm9udEZvckZhbWlseShmb250RGVzY3JpcHRpb24sIGZhbGxiYWNr
Rm9udHNbaV0pKSB7CiAgICAgICAgICAgICBmYWxsYmFja0ZvbnROYW1lID0gZmFsbGJhY2tGb250
c1tpXTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250V2lu
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
Rm9udFdpbi5jcHAJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9Gb250V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTMgKzI2LDEz
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKIAorI2lu
Y2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGb250R2x5cGhzLmgiCiAjaW5jbHVkZSAiR2x5cGhC
dWZmZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbnRSZWN0
LmgiCiAjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNs
dWRlICJTaW1wbGVGb250RGF0YS5oIgogI2luY2x1ZGUgIlRleHRSdW4uaCIKICNpbmNsdWRlICJV
bmlzY3JpYmVDb250cm9sbGVyLmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KQEAgLTEy
MCw3ICsxMjAsNyBAQCB2b2lkIEZvbnRDYXNjYWRlOjpkcmF3RW1waGFzaXNNYXJrc0ZvckNvCiAg
ICAgZHJhd0VtcGhhc2lzTWFya3MoY29udGV4dCwgcnVuLCBnbHlwaEJ1ZmZlciwgbWFyaywgRmxv
YXRQb2ludChwb2ludC54KCkgKyBpbml0aWFsQWR2YW5jZSwgcG9pbnQueSgpKSk7CiB9CiAKLWZs
b2F0IEZvbnRDYXNjYWRlOjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYg
cnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBo
T3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0CitmbG9hdCBGb250Q2FzY2FkZTo6ZmxvYXRX
aWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBGb250
Kj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0CiB7
CiAgICAgVW5pc2NyaWJlQ29udHJvbGxlciBjb250cm9sbGVyKHRoaXMsIHJ1biwgZmFsbGJhY2tG
b250cyk7CiAgICAgY29udHJvbGxlci5hZHZhbmNlKHJ1bi5sZW5ndGgoKSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVDR1dpbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ds
eXBoUGFnZVRyZWVOb2RlQ0dXaW4uY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVDR1dpbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI5LDEyICsyOSwxMiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkdseXBoUGFnZS5oIgogCi0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKKyNpbmNs
dWRlICJGb250LmgiCiAjaW5jbHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dlYktpdFN5c3Rl
bUludGVyZmFjZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wgR2x5cGhQYWdlOjpm
aWxsKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1bnNp
Z25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSkKK2Jvb2wg
R2x5cGhQYWdlOjpmaWxsKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciog
YnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IEZvbnQqIGZvbnREYXRhKQogewog
ICAgIC8vIGJ1ZmZlckxlbmd0aCB3aWxsIGJlIGdyZWF0ZXIgdGhhbiB0aGUgcmVxdWVzdGVkIG51
bWJlciBvZiBnbHlwaHMgaWYgdGhlIGJ1ZmZlciBjb250YWlucyBzdXJyb2dhdGUgcGFpcnMuCiAg
ICAgLy8gV2Ugd29uJ3Qgc3VwcG9ydCB0aGlzIGZvciBub3cuCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVDYWlyb1dpbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFn
ZVRyZWVOb2RlQ2Fpcm9XaW4uY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVDYWlyb1dpbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI5LDEyICsyOSwxMiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkdseXBoUGFnZS5oIgogCisjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkhXbmRE
Qy5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotYm9vbCBHbHlwaFBhZ2U6OmZpbGwodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgs
IFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgU2ltcGxlRm9udERh
dGEqIGZvbnREYXRhKQorYm9vbCBHbHlwaFBhZ2U6OmZpbGwodW5zaWduZWQgb2Zmc2V0LCB1bnNp
Z25lZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3Qg
Rm9udCogZm9udERhdGEpCiB7CiAgICAgLy8gYnVmZmVyTGVuZ3RoIHdpbGwgYmUgZ3JlYXRlciB0
aGFuIHRoZSByZXF1ZXN0ZWQgbnVtYmVyIG9mIGdseXBocyBpZiB0aGUgYnVmZmVyIGNvbnRhaW5z
IHN1cnJvZ2F0ZSBwYWlycy4KICAgICAvLyBXZSB3b24ndCBzdXBwb3J0IHRoaXMgZm9yIG5vdy4K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0
YUNHV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vU2ltcGxlRm9udERhdGFDR1dpbi5jcHAJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNHV2luLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgorI2luY2x1ZGUgIkZvbnQuaCIKIAogI2lu
Y2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgpAQCAtNDgsNyArNDgs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKLXZvaWQg
U2ltcGxlRm9udERhdGE6OnBsYXRmb3JtSW5pdCgpCit2b2lkIEZvbnQ6OnBsYXRmb3JtSW5pdCgp
CiB7CiAgICAgbV9zeW50aGV0aWNCb2xkT2Zmc2V0ID0gbV9wbGF0Zm9ybURhdGEuc3ludGhldGlj
Qm9sZCgpID8gMS4wZiA6IDAuZjsKICAgICBtX3NjcmlwdENhY2hlID0gMDsKQEAgLTEwMyw3ICsx
MDMsNyBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUluaXQoKQogICAgIG1fZm9udE1l
dHJpY3Muc2V0VW5pdHNQZXJFbSh1bml0c1BlckVtKTsKIH0KIAotRmxvYXRSZWN0IFNpbXBsZUZv
bnREYXRhOjpwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAorRmxvYXRS
ZWN0IEZvbnQ6OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CiB7CiAg
ICAgaWYgKCFwbGF0Zm9ybURhdGEoKS5zaXplKCkpCiAgICAgICAgIHJldHVybiBGbG9hdFJlY3Qo
KTsKQEAgLTEyMiw3ICsxMjIsNyBAQCBGbG9hdFJlY3QgU2ltcGxlRm9udERhdGE6OnBsYXRmb3Jt
Qm91bmRzCiAgICAgcmV0dXJuIGJvdW5kaW5nQm94OwogfQogCi1mbG9hdCBTaW1wbGVGb250RGF0
YTo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAorZmxvYXQgRm9udDo6
cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAogewogICAgIGlmICghcGxh
dGZvcm1EYXRhKCkuc2l6ZSgpKQogICAgICAgICByZXR1cm4gMDsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNhaXJvV2luLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9u
dERhdGFDYWlyb1dpbi5jcHAJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNhaXJvV2luLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjcsNyArMjcsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJTaW1wbGVGb250RGF0YS5oIgorI2luY2x1ZGUgIkZvbnQuaCIKIAogI2luY2x1ZGUgPHdp
bmRvd3MuaD4KIApAQCAtNDEsNyArNDEsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZv
aWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtSW5pdCgpCit2b2lkIEZvbnQ6OnBsYXRmb3JtSW5p
dCgpCiB7CiAgICAgbV9zeW50aGV0aWNCb2xkT2Zmc2V0ID0gbV9wbGF0Zm9ybURhdGEuc3ludGhl
dGljQm9sZCgpID8gMS4wZiA6IDAuZjsKICAgICBtX3NjcmlwdENhY2hlID0gMDsKQEAgLTEwMyw3
ICsxMDMsNyBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUluaXQoKQogICAgIFJlc3Rv
cmVEQyhkYywgLTEpOwogfQogCi1GbG9hdFJlY3QgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQm91
bmRzRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CitGbG9hdFJlY3QgRm9udDo6cGxhdGZvcm1C
b3VuZHNGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKIHsKICAgICBpZiAobV9wbGF0Zm9ybURh
dGEudXNlR0RJKCkpCiAgICAgICAgIHJldHVybiBib3VuZHNGb3JHRElHbHlwaChnbHlwaCk7CkBA
IC0xMTEsNyArMTExLDcgQEAgRmxvYXRSZWN0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUJvdW5k
cwogICAgIHJldHVybiBGbG9hdFJlY3QoKTsKIH0KICAgICAKLWZsb2F0IFNpbXBsZUZvbnREYXRh
OjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CitmbG9hdCBGb250Ojpw
bGF0Zm9ybVdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CiB7CiAgICAgaWYgKG1fcGxh
dGZvcm1EYXRhLnVzZUdESSgpKQogICAgICAgIHJldHVybiB3aWR0aEZvckdESUdseXBoKGdseXBo
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250
RGF0YVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL1NpbXBsZUZvbnREYXRhV2luLmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhV2luLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgorI2luY2x1ZGUgIkZvbnQuaCIKIAogI2luY2x1
ZGUgIkZvbnRDYWNoZS5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgpAQCAtNDMsMTcgKzQzLDE3
IEBAIGNvbnN0IGZsb2F0IGNTbWFsbENhcHNGb250U2l6ZU11bHRpcGxpZXIKIAogc3RhdGljIGJv
b2wgZ19zaG91bGRBcHBseU1hY0FzY2VudEhhY2s7CiAKLXZvaWQgU2ltcGxlRm9udERhdGE6OnNl
dFNob3VsZEFwcGx5TWFjQXNjZW50SGFjayhib29sIGIpCit2b2lkIEZvbnQ6OnNldFNob3VsZEFw
cGx5TWFjQXNjZW50SGFjayhib29sIGIpCiB7CiAgICAgZ19zaG91bGRBcHBseU1hY0FzY2VudEhh
Y2sgPSBiOwogfQogCi1ib29sIFNpbXBsZUZvbnREYXRhOjpzaG91bGRBcHBseU1hY0FzY2VudEhh
Y2soKQorYm9vbCBGb250OjpzaG91bGRBcHBseU1hY0FzY2VudEhhY2soKQogewogICAgIHJldHVy
biBnX3Nob3VsZEFwcGx5TWFjQXNjZW50SGFjazsKIH0KIAotZmxvYXQgU2ltcGxlRm9udERhdGE6
OmFzY2VudENvbnNpZGVyaW5nTWFjQXNjZW50SGFjayhjb25zdCBXQ0hBUiogZmFjZU5hbWUsIGZs
b2F0IGFzY2VudCwgZmxvYXQgZGVzY2VudCkKK2Zsb2F0IEZvbnQ6OmFzY2VudENvbnNpZGVyaW5n
TWFjQXNjZW50SGFjayhjb25zdCBXQ0hBUiogZmFjZU5hbWUsIGZsb2F0IGFzY2VudCwgZmxvYXQg
ZGVzY2VudCkKIHsKICAgICBpZiAoIXNob3VsZEFwcGx5TWFjQXNjZW50SGFjaygpKQogICAgICAg
ICByZXR1cm4gYXNjZW50OwpAQCAtNzEsNyArNzEsNyBAQCBmbG9hdCBTaW1wbGVGb250RGF0YTo6
YXNjZW50Q29uc2lkZXJpbmdNCiAgICAgcmV0dXJuIGFzY2VudDsKIH0KIAotdm9pZCBTaW1wbGVG
b250RGF0YTo6aW5pdEdESUZvbnQoKQordm9pZCBGb250Ojppbml0R0RJRm9udCgpCiB7CiAgICAg
aWYgKCFtX3BsYXRmb3JtRGF0YS5zaXplKCkpIHsKICAgICAgICAgbV9mb250TWV0cmljcy5yZXNl
dCgpOwpAQCAtMTA2LDcgKzEwNiw3IEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OmluaXRHRElGb250
KCkKICAgICBTZWxlY3RPYmplY3QoaGRjLCBvbGRGb250KTsKIH0KIAotdm9pZCBTaW1wbGVGb250
RGF0YTo6cGxhdGZvcm1DaGFyV2lkdGhJbml0KCkKK3ZvaWQgRm9udDo6cGxhdGZvcm1DaGFyV2lk
dGhJbml0KCkKIHsKICAgICAvLyBHREkgRm9udHMgaW5pdCBjaGFyd2lkdGhzIGluIGluaXRHRElG
b250LgogICAgIGlmICghbV9wbGF0Zm9ybURhdGEudXNlR0RJKCkpIHsKQEAgLTExNiwyOSArMTE2
LDI5IEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQ2hhcldpZHRoSW4KICAgICB9CiB9
CiAKLXZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtRGVzdHJveSgpCit2b2lkIEZvbnQ6OnBs
YXRmb3JtRGVzdHJveSgpCiB7CiAgICAgU2NyaXB0RnJlZUNhY2hlKCZtX3NjcmlwdENhY2hlKTsK
ICAgICBkZWxldGUgbV9zY3JpcHRGb250UHJvcGVydGllczsKIH0KIAotUGFzc1JlZlB0cjxTaW1w
bGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQ3JlYXRlU2NhbGVkRm9udERhdGEo
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNjYWxlRmFjdG9y
KSBjb25zdAorUGFzc1JlZlB0cjxGb250PiBGb250OjpwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZvbnQo
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNjYWxlRmFjdG9y
KSBjb25zdAogewogICAgIGZsb2F0IHNjYWxlZFNpemUgPSBzY2FsZUZhY3RvciAqIG1fcGxhdGZv
cm1EYXRhLnNpemUoKTsKICAgICBpZiAoaXNDdXN0b21Gb250KCkpIHsKICAgICAgICAgRm9udFBs
YXRmb3JtRGF0YSBzY2FsZWRGb250KG1fcGxhdGZvcm1EYXRhKTsKICAgICAgICAgc2NhbGVkRm9u
dC5zZXRTaXplKHNjYWxlZFNpemUpOwotICAgICAgICByZXR1cm4gU2ltcGxlRm9udERhdGE6OmNy
ZWF0ZShzY2FsZWRGb250LCB0cnVlLCBmYWxzZSk7CisgICAgICAgIHJldHVybiBGb250OjpjcmVh
dGUoc2NhbGVkRm9udCwgdHJ1ZSwgZmFsc2UpOwogICAgIH0KIAogICAgIExPR0ZPTlQgd2luZm9u
dDsKICAgICBHZXRPYmplY3QobV9wbGF0Zm9ybURhdGEuaGZvbnQoKSwgc2l6ZW9mKExPR0ZPTlQp
LCAmd2luZm9udCk7CiAgICAgd2luZm9udC5sZkhlaWdodCA9IC1scm91bmRmKHNjYWxlZFNpemUg
KiAobV9wbGF0Zm9ybURhdGEudXNlR0RJKCkgPyAxIDogMzIpKTsKICAgICBhdXRvIGhmb250ID0g
YWRvcHRHRElPYmplY3QoOjpDcmVhdGVGb250SW5kaXJlY3QoJndpbmZvbnQpKTsKLSAgICByZXR1
cm4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZShGb250UGxhdGZvcm1EYXRhKFdURjo6bW92ZShoZm9u
dCksIHNjYWxlZFNpemUsIG1fcGxhdGZvcm1EYXRhLnN5bnRoZXRpY0JvbGQoKSwgbV9wbGF0Zm9y
bURhdGEuc3ludGhldGljT2JsaXF1ZSgpLCBtX3BsYXRmb3JtRGF0YS51c2VHREkoKSksIGlzQ3Vz
dG9tRm9udCgpLCBmYWxzZSk7CisgICAgcmV0dXJuIEZvbnQ6OmNyZWF0ZShGb250UGxhdGZvcm1E
YXRhKFdURjo6bW92ZShoZm9udCksIHNjYWxlZFNpemUsIG1fcGxhdGZvcm1EYXRhLnN5bnRoZXRp
Y0JvbGQoKSwgbV9wbGF0Zm9ybURhdGEuc3ludGhldGljT2JsaXF1ZSgpLCBtX3BsYXRmb3JtRGF0
YS51c2VHREkoKSksIGlzQ3VzdG9tRm9udCgpLCBmYWxzZSk7CiB9CiAKLXZvaWQgU2ltcGxlRm9u
dERhdGE6OmRldGVybWluZVBpdGNoKCkKK3ZvaWQgRm9udDo6ZGV0ZXJtaW5lUGl0Y2goKQogewog
ICAgIGlmIChpc0N1c3RvbUZvbnQoKSkgewogICAgICAgICBtX3RyZWF0QXNGaXhlZFBpdGNoID0g
ZmFsc2U7CkBAIC0xNTksNyArMTU5LDcgQEAgdm9pZCBTaW1wbGVGb250RGF0YTo6ZGV0ZXJtaW5l
UGl0Y2goKQogICAgIFJlc3RvcmVEQyhkYywgLTEpOwogfQogCi1GbG9hdFJlY3QgU2ltcGxlRm9u
dERhdGE6OmJvdW5kc0ZvckdESUdseXBoKEdseXBoIGdseXBoKSBjb25zdAorRmxvYXRSZWN0IEZv
bnQ6OmJvdW5kc0ZvckdESUdseXBoKEdseXBoIGdseXBoKSBjb25zdAogewogICAgIEhXbmREQyBo
ZGMoMCk7CiAgICAgU2V0R3JhcGhpY3NNb2RlKGhkYywgR01fQURWQU5DRUQpOwpAQCAtMTc1LDcg
KzE3NSw3IEBAIEZsb2F0UmVjdCBTaW1wbGVGb250RGF0YTo6Ym91bmRzRm9yR0RJR2wKICAgICAg
ICAgZ2RpTWV0cmljcy5nbUJsYWNrQm94WCArIG1fc3ludGhldGljQm9sZE9mZnNldCwgZ2RpTWV0
cmljcy5nbUJsYWNrQm94WSk7IAogfQogCi1mbG9hdCBTaW1wbGVGb250RGF0YTo6d2lkdGhGb3JH
RElHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKK2Zsb2F0IEZvbnQ6OndpZHRoRm9yR0RJR2x5cGgo
R2x5cGggZ2x5cGgpIGNvbnN0CiB7CiAgICAgSFduZERDIGhkYygwKTsKICAgICBTZXRHcmFwaGlj
c01vZGUoaGRjLCBHTV9BRFZBTkNFRCk7CkBAIC0xOTEsNyArMTkxLDcgQEAgZmxvYXQgU2ltcGxl
Rm9udERhdGE6OndpZHRoRm9yR0RJR2x5cGgoRwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVND
UklQVF9GT05UUFJPUEVSVElFUyogU2ltcGxlRm9udERhdGE6OnNjcmlwdEZvbnRQcm9wZXJ0aWVz
KCkgY29uc3QKK1NDUklQVF9GT05UUFJPUEVSVElFUyogRm9udDo6c2NyaXB0Rm9udFByb3BlcnRp
ZXMoKSBjb25zdAogewogICAgIGlmICghbV9zY3JpcHRGb250UHJvcGVydGllcykgewogICAgICAg
ICBtX3NjcmlwdEZvbnRQcm9wZXJ0aWVzID0gbmV3IFNDUklQVF9GT05UUFJPUEVSVElFUzsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9VbmlzY3JpYmVDb250cm9s
bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vVW5pc2NyaWJlQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9VbmlzY3JpYmVDb250cm9sbGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjUsOSArMjUsMTAgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIlVuaXNjcmliZUNvbnRyb2xsZXIuaCIKKworI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNs
dWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkhXbmREQy5oIgotI2luY2x1ZGUgIlNpbXBs
ZUZvbnREYXRhLmgiCiAjaW5jbHVkZSAiVGV4dFJ1bi5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0
cmFzLmg+CiAKQEAgLTQxLDcgKzQyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogLy8gdGhhdCBk
b2VzIHN0dWZmIGluIHRoYXQgbWV0aG9kIGluc3RlYWQgb2YgZG9pbmcgZXZlcnl0aGluZyBpbiB0
aGUgY29uc3RydWN0b3IuICBIYXZlIGFkdmFuY2UoKQogLy8gdGFrZSB0aGUgR2x5cGhCdWZmZXIg
YXMgYW4gYXJnIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBwb3B1bGF0ZSB0aGUgZ2x5cGggYnVm
ZmVyIHdoZW4KIC8vIG1lYXN1cmluZy4KLVVuaXNjcmliZUNvbnRyb2xsZXI6OlVuaXNjcmliZUNv
bnRyb2xsZXIoY29uc3QgRm9udENhc2NhZGUqIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgSGFz
aFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzKQorVW5pc2NyaWJlQ29u
dHJvbGxlcjo6VW5pc2NyaWJlQ29udHJvbGxlcihjb25zdCBGb250Q2FzY2FkZSogZm9udCwgY29u
c3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cykKICAg
ICA6IG1fZm9udCgqZm9udCkKICAgICAsIG1fcnVuKHJ1bikKICAgICAsIG1fZmFsbGJhY2tGb250
cyhmYWxsYmFja0ZvbnRzKQpAQCAtMTM2LDggKzEzNyw4IEBAIHZvaWQgVW5pc2NyaWJlQ29udHJv
bGxlcjo6YWR2YW5jZSh1bnNpZ24KICAgICBjb25zdCBVQ2hhciogY3VyciA9IG1fcnVuLnJ0bCgp
ID8gY3AgKyBsZW5ndGggIC0gMSA6IGNwOwogICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBtX3J1bi5y
dGwoKSA/IGNwIC0gMSA6IGNwICsgbGVuZ3RoOwogCi0gICAgY29uc3QgU2ltcGxlRm9udERhdGEq
IGZvbnREYXRhOwotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBuZXh0Rm9udERhdGEgPSBtX2Zv
bnQuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKCpjdXJyLCBmYWxzZSkuZm9udERhdGE7CisgICAgY29u
c3QgRm9udCogZm9udERhdGE7CisgICAgY29uc3QgRm9udCogbmV4dEZvbnREYXRhID0gbV9mb250
LmdseXBoRGF0YUZvckNoYXJhY3RlcigqY3VyciwgZmFsc2UpLmZvbnQ7CiAKICAgICBVQ2hhciBu
ZXdDID0gMDsKIApAQCAtMTU4LDE0ICsxNTksMTQgQEAgdm9pZCBVbmlzY3JpYmVDb250cm9sbGVy
OjphZHZhbmNlKHVuc2lnbgogICAgICAgICBVQ2hhciBjID0gKmN1cnI7CiAKICAgICAgICAgYm9v
bCBmb3JjZVNtYWxsQ2FwcyA9IGlzU21hbGxDYXBzICYmIChVX0dFVF9HQ19NQVNLKGMpICYgVV9H
Q19NX01BU0spOwotICAgICAgICBuZXh0Rm9udERhdGEgPSBtX2ZvbnQuZ2x5cGhEYXRhRm9yQ2hh
cmFjdGVyKCpjdXJyLCBmYWxzZSwgZm9yY2VTbWFsbENhcHMgPyBTbWFsbENhcHNWYXJpYW50IDog
QXV0b1ZhcmlhbnQpLmZvbnREYXRhOworICAgICAgICBuZXh0Rm9udERhdGEgPSBtX2ZvbnQuZ2x5
cGhEYXRhRm9yQ2hhcmFjdGVyKCpjdXJyLCBmYWxzZSwgZm9yY2VTbWFsbENhcHMgPyBTbWFsbENh
cHNWYXJpYW50IDogQXV0b1ZhcmlhbnQpLmZvbnQ7CiAgICAgICAgIGlmIChtX2ZvbnQuaXNTbWFs
bENhcHMoKSkgewogICAgICAgICAgICAgbmV4dElzU21hbGxDYXBzID0gZm9yY2VTbWFsbENhcHMg
fHwgKG5ld0MgPSB1X3RvdXBwZXIoYykpICE9IGM7CiAgICAgICAgICAgICBpZiAobmV4dElzU21h
bGxDYXBzKQogICAgICAgICAgICAgICAgIHNtYWxsQ2Fwc0J1ZmZlcltpbmRleF0gPSBmb3JjZVNt
YWxsQ2FwcyA/IGMgOiBuZXdDOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG1fZmFsbGJhY2tG
b250cyAmJiBmb250RGF0YSAmJiBuZXh0Rm9udERhdGEgIT0gZm9udERhdGEgJiYgZm9udERhdGEg
IT0gJm1fZm9udC5wcmltYXJ5Rm9udERhdGEoKSkKKyAgICAgICAgaWYgKG1fZmFsbGJhY2tGb250
cyAmJiBmb250RGF0YSAmJiBuZXh0Rm9udERhdGEgIT0gZm9udERhdGEgJiYgZm9udERhdGEgIT0g
Jm1fZm9udC5wcmltYXJ5Rm9udCgpKQogICAgICAgICAgICAgbV9mYWxsYmFja0ZvbnRzLT5hZGQo
Zm9udERhdGEpOwogCiAgICAgICAgIGlmIChuZXh0Rm9udERhdGEgIT0gZm9udERhdGEgfHwgbmV4
dElzU21hbGxDYXBzICE9IGlzU21hbGxDYXBzKSB7CkBAIC0xNzksNyArMTgwLDcgQEAgdm9pZCBV
bmlzY3JpYmVDb250cm9sbGVyOjphZHZhbmNlKHVuc2lnbgogICAgIAogICAgIGludCBpdGVtTGVu
Z3RoID0gbV9ydW4ucnRsKCkgPyBpbmRleE9mRm9udFRyYW5zaXRpb24gKyAxIDogbGVuZ3RoIC0g
aW5kZXhPZkZvbnRUcmFuc2l0aW9uOwogICAgIGlmIChpdGVtTGVuZ3RoKSB7Ci0gICAgICAgIGlm
IChtX2ZhbGxiYWNrRm9udHMgJiYgbmV4dEZvbnREYXRhICYmIG5leHRGb250RGF0YSAhPSAmbV9m
b250LnByaW1hcnlGb250RGF0YSgpKQorICAgICAgICBpZiAobV9mYWxsYmFja0ZvbnRzICYmIG5l
eHRGb250RGF0YSAmJiBuZXh0Rm9udERhdGEgIT0gJm1fZm9udC5wcmltYXJ5Rm9udCgpKQogICAg
ICAgICAgICAgbV9mYWxsYmFja0ZvbnRzLT5hZGQobmV4dEZvbnREYXRhKTsKIAogICAgICAgICBp
bnQgaXRlbVN0YXJ0ID0gbV9ydW4ucnRsKCkgPyAwIDogaW5kZXhPZkZvbnRUcmFuc2l0aW9uOwpA
QCAtMTkwLDcgKzE5MSw3IEBAIHZvaWQgVW5pc2NyaWJlQ29udHJvbGxlcjo6YWR2YW5jZSh1bnNp
Z24KICAgICBtX2N1cnJlbnRDaGFyYWN0ZXIgPSBiYXNlQ2hhcmFjdGVyICsgbGVuZ3RoOwogfQog
Ci12b2lkIFVuaXNjcmliZUNvbnRyb2xsZXI6Oml0ZW1pemVTaGFwZUFuZFBsYWNlKGNvbnN0IFVD
aGFyKiBjcCwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEs
IEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZlcikKK3ZvaWQgVW5pc2NyaWJlQ29udHJvbGxlcjo6aXRl
bWl6ZVNoYXBlQW5kUGxhY2UoY29uc3QgVUNoYXIqIGNwLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0
IEZvbnQqIGZvbnREYXRhLCBHbHlwaEJ1ZmZlciogZ2x5cGhCdWZmZXIpCiB7CiAgICAgLy8gU2Ny
aXB0SXRlbWl6ZSAoaW4gV2luZG93cyBYUCB2ZXJzaW9ucyBwcmlvciB0byBTUDIpIGNhbiBvdmVy
ZmxvdyBieSAxLiAgVGhpcyBpcyB3aHkgdGhlcmUgaXMgYW4gZXh0cmEgZW1wdHkgaXRlbQogICAg
IC8vIGhhbmdpbmcgb3V0IGF0IHRoZSBlbmQgb2YgdGhlIGFycmF5CkBAIC0yMzIsNyArMjMzLDcg
QEAgdm9pZCBVbmlzY3JpYmVDb250cm9sbGVyOjpyZXNldENvbnRyb2xBbgogICAgIG1fc3RhdGUu
Zk92ZXJyaWRlRGlyZWN0aW9uID0gbV9ydW4uZGlyZWN0aW9uYWxPdmVycmlkZSgpOwogfQogCi1i
b29sIFVuaXNjcmliZUNvbnRyb2xsZXI6OnNoYXBlQW5kUGxhY2VJdGVtKGNvbnN0IFVDaGFyKiBj
cCwgdW5zaWduZWQgaSwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhLCBHbHlwaEJ1ZmZl
ciogZ2x5cGhCdWZmZXIpCitib29sIFVuaXNjcmliZUNvbnRyb2xsZXI6OnNoYXBlQW5kUGxhY2VJ
dGVtKGNvbnN0IFVDaGFyKiBjcCwgdW5zaWduZWQgaSwgY29uc3QgRm9udCogZm9udERhdGEsIEds
eXBoQnVmZmVyKiBnbHlwaEJ1ZmZlcikKIHsKICAgICAvLyBEZXRlcm1pbmUgdGhlIHN0cmluZyBm
b3IgdGhpcyBpdGVtLgogICAgIGNvbnN0IFVDaGFyKiBzdHIgPSBjcCArIG1faXRlbXNbaV0uaUNo
YXJQb3M7CkBAIC00MDQsNyArNDA1LDcgQEAgYm9vbCBVbmlzY3JpYmVDb250cm9sbGVyOjpzaGFw
ZUFuZFBsYWNlSQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFVuaXNjcmliZUNvbnRyb2xs
ZXI6OnNoYXBlKGNvbnN0IFVDaGFyKiBzdHIsIGludCBsZW4sIFNDUklQVF9JVEVNIGl0ZW0sIGNv
bnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwKK2Jvb2wgVW5pc2NyaWJlQ29udHJvbGxlcjo6
c2hhcGUoY29uc3QgVUNoYXIqIHN0ciwgaW50IGxlbiwgU0NSSVBUX0lURU0gaXRlbSwgY29uc3Qg
Rm9udCogZm9udERhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxX
T1JEPiYgZ2x5cGhzLCBWZWN0b3I8V09SRD4mIGNsdXN0ZXJzLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBWZWN0b3I8U0NSSVBUX1ZJU0FUVFI+JiB2aXN1YWxBdHRyaWJ1dGVzKQog
ewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1VuaXNjcmliZUNv
bnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vVW5pc2NyaWJlQ29udHJvbGxlci5oCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVW5pc2NyaWJlQ29udHJvbGxlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
VW5pc2NyaWJlQ29udHJvbGxlciB7CiBwdWJsaWM6Ci0gICAgVW5pc2NyaWJlQ29udHJvbGxlcihj
b25zdCBGb250Q2FzY2FkZSosIGNvbnN0IFRleHRSdW4mLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZv
bnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwKTsKKyAgICBVbmlzY3JpYmVDb250cm9sbGVyKGNv
bnN0IEZvbnRDYXNjYWRlKiwgY29uc3QgVGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBm
YWxsYmFja0ZvbnRzID0gMCk7CiAKICAgICAvLyBBZHZhbmNlIGFuZCBtZWFzdXJlL3BsYWNlIHVw
IHRvIHRoZSBzcGVjaWZpZWQgY2hhcmFjdGVyLgogICAgIHZvaWQgYWR2YW5jZSh1bnNpZ25lZCB0
bywgR2x5cGhCdWZmZXIqID0gMCk7CkBAIC01NCwxNSArNTQsMTUgQEAgcHVibGljOgogcHJpdmF0
ZTogICAgCiAgICAgdm9pZCByZXNldENvbnRyb2xBbmRTdGF0ZSgpOwogCi0gICAgdm9pZCBpdGVt
aXplU2hhcGVBbmRQbGFjZShjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU2lt
cGxlRm9udERhdGEqLCBHbHlwaEJ1ZmZlciopOwotICAgIGJvb2wgc2hhcGVBbmRQbGFjZUl0ZW0o
Y29uc3QgVUNoYXIqLCB1bnNpZ25lZCBpbmRleCwgY29uc3QgU2ltcGxlRm9udERhdGEqLCBHbHlw
aEJ1ZmZlciopOwotICAgIGJvb2wgc2hhcGUoY29uc3QgVUNoYXIqIHN0ciwgaW50IGxlbiwgU0NS
SVBUX0lURU0gaXRlbSwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhLAorICAgIHZvaWQg
aXRlbWl6ZVNoYXBlQW5kUGxhY2UoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0
IEZvbnQqLCBHbHlwaEJ1ZmZlciopOworICAgIGJvb2wgc2hhcGVBbmRQbGFjZUl0ZW0oY29uc3Qg
VUNoYXIqLCB1bnNpZ25lZCBpbmRleCwgY29uc3QgRm9udCosIEdseXBoQnVmZmVyKik7CisgICAg
Ym9vbCBzaGFwZShjb25zdCBVQ2hhciogc3RyLCBpbnQgbGVuLCBTQ1JJUFRfSVRFTSwgY29uc3Qg
Rm9udCosCiAgICAgICAgICAgICAgICBWZWN0b3I8V09SRD4mIGdseXBocywgVmVjdG9yPFdPUkQ+
JiBjbHVzdGVycywKICAgICAgICAgICAgICAgIFZlY3RvcjxTQ1JJUFRfVklTQVRUUj4mIHZpc3Vh
bEF0dHJpYnV0ZXMpOwogCiAgICAgY29uc3QgRm9udENhc2NhZGUmIG1fZm9udDsKICAgICBjb25z
dCBUZXh0UnVuJiBtX3J1bjsKLSAgICBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIG1f
ZmFsbGJhY2tGb250czsKKyAgICBIYXNoU2V0PGNvbnN0IEZvbnQqPiogbV9mYWxsYmFja0ZvbnRz
OwogICAgIEZsb2F0UG9pbnQgbV9nbHlwaE9yaWdpbjsKICAgICBmbG9hdCBtX21pbkdseXBoQm91
bmRpbmdCb3hYOwogICAgIGZsb2F0IG1fbWF4R2x5cGhCb3VuZGluZ0JveFg7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcAkocmV2aXNpb24gMTc4
ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJCaXRtYXBJbmZvLmgiCiAj
aW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJG
b250LmgiCiAjaW5jbHVkZSAiRm9udFNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNp
bmNsdWRlICJGcmFtZVZpZXcuaCIKQEAgLTQyLDcgKzQzLDYgQEAKICNpbmNsdWRlICJSZW5kZXJW
aWV3LmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWUu
aCIKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgogI2luY2x1ZGUgIlRleHRSdW4uaCIKICNp
bmNsdWRlICJXZWJDb3JlSW5zdGFuY2VIYW5kbGUuaCIKICNpbmNsdWRlIDx3dGYvV2luZG93c0V4
dHJhcy5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNw
cAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZs
b3dCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDksNyArNDQ5LDcgQEAgYm9vbCBJbmxpbmVG
bG93Qm94OjpyZXF1aXJlc0lkZW9ncmFwaGljQgogCiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIGxp
bmVTdHlsZSA9IHRoaXMtPmxpbmVTdHlsZSgpOwogICAgIGlmIChsaW5lU3R5bGUuZm9udERlc2Ny
aXB0aW9uKCkubm9uQ0pLR2x5cGhPcmllbnRhdGlvbigpID09IE5vbkNKS0dseXBoT3JpZW50YXRp
b25VcHJpZ2h0Ci0gICAgICAgIHx8IGxpbmVTdHlsZS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250
RGF0YSgpLmhhc1ZlcnRpY2FsR2x5cGhzKCkpCisgICAgICAgIHx8IGxpbmVTdHlsZS5mb250Q2Fz
Y2FkZSgpLnByaW1hcnlGb250KCkuaGFzVmVydGljYWxHbHlwaHMoKSkKICAgICAgICAgcmV0dXJu
IHRydWU7CiAKICAgICBmb3IgKElubGluZUJveCogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxk
OyBjaGlsZCA9IGNoaWxkLT5uZXh0T25MaW5lKCkpIHsKQEAgLTQ2MCwxOCArNDYwLDE4IEBAIGJv
b2wgSW5saW5lRmxvd0JveDo6cmVxdWlyZXNJZGVvZ3JhcGhpY0IKICAgICAgICAgICAgIGlmIChk
b3duY2FzdDxJbmxpbmVGbG93Qm94PigqY2hpbGQpLnJlcXVpcmVzSWRlb2dyYXBoaWNCYXNlbGlu
ZSh0ZXh0Qm94RGF0YU1hcCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoY2hpbGQtPmxpbmVTdHlsZSgpLmZvbnRDYXNjYWRl
KCkucHJpbWFyeUZvbnREYXRhKCkuaGFzVmVydGljYWxHbHlwaHMoKSkKKyAgICAgICAgICAgIGlm
IChjaGlsZC0+bGluZVN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpLmhhc1ZlcnRp
Y2FsR2x5cGhzKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAK
LSAgICAgICAgICAgIGNvbnN0IFZlY3Rvcjxjb25zdCBTaW1wbGVGb250RGF0YSo+KiB1c2VkRm9u
dHMgPSBudWxscHRyOworICAgICAgICAgICAgY29uc3QgVmVjdG9yPGNvbnN0IEZvbnQqPiogdXNl
ZEZvbnRzID0gbnVsbHB0cjsKICAgICAgICAgICAgIGlmIChpczxJbmxpbmVUZXh0Qm94PigqY2hp
bGQpKSB7CiAgICAgICAgICAgICAgICAgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGV4dEJveERhdGFNYXAuZmluZChkb3duY2FzdDxJbmxpbmVU
ZXh0Qm94PihjaGlsZCkpOwogICAgICAgICAgICAgICAgIHVzZWRGb250cyA9IGl0ID09IHRleHRC
b3hEYXRhTWFwLmVuZCgpID8gbnVsbHB0ciA6ICZpdC0+dmFsdWUuZmlyc3Q7CiAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgIGlmICh1c2VkRm9udHMpIHsKLSAgICAgICAgICAgICAgICBmb3Ig
KGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSA6ICp1c2VkRm9udHMpIHsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKGZvbnREYXRhLT5oYXNWZXJ0aWNhbEdseXBocygpKQorICAgICAgICAg
ICAgICAgIGZvciAoY29uc3QgRm9udCogZm9udCA6ICp1c2VkRm9udHMpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGZvbnQtPmhhc1ZlcnRpY2FsR2x5cGhzKCkpCiAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmgJKHJldmlzaW9uIDE3
ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmgJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDEyICszMSwxMiBAQCBjbGFzcyBIaXRUZXN0UmVxdWVzdDsKIGNsYXNz
IEhpdFRlc3RSZXN1bHQ7CiBjbGFzcyBJbmxpbmVUZXh0Qm94OwogY2xhc3MgUmVuZGVyTGluZUJv
eExpc3Q7Ci1jbGFzcyBTaW1wbGVGb250RGF0YTsKK2NsYXNzIEZvbnQ7CiBjbGFzcyBWZXJ0aWNh
bFBvc2l0aW9uQ2FjaGU7CiAKIHN0cnVjdCBHbHlwaE92ZXJmbG93OwogCi10eXBlZGVmIEhhc2hN
YXA8Y29uc3QgSW5saW5lVGV4dEJveCosIHN0ZDo6cGFpcjxWZWN0b3I8Y29uc3QgU2ltcGxlRm9u
dERhdGEqPiwgR2x5cGhPdmVyZmxvdz4+IEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFw
OwordHlwZWRlZiBIYXNoTWFwPGNvbnN0IElubGluZVRleHRCb3gqLCBzdGQ6OnBhaXI8VmVjdG9y
PGNvbnN0IEZvbnQqPiwgR2x5cGhPdmVyZmxvdz4+IEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0Zv
bnRzTWFwOwogCiBjbGFzcyBJbmxpbmVGbG93Qm94IDogcHVibGljIElubGluZUJveCB7CiBwdWJs
aWM6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCShy
ZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJv
eC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzODEsNyArMTM4MSw3IEBAIFRleHRSdW4gSW5saW5l
VGV4dEJveDo6Y29uc3RydWN0VGV4dFJ1bigKIAogICAgIFRleHRSdW4gcnVuKHN0cmluZywgdGV4
dFBvcygpLCBleHBhbnNpb24oKSwgZXhwYW5zaW9uQmVoYXZpb3IoKSwgZGlyZWN0aW9uKCksIGRp
ck92ZXJyaWRlKCkgfHwgc3R5bGUucnRsT3JkZXJpbmcoKSA9PSBWaXN1YWxPcmRlciwgIXJlbmRl
cmVyKCkuY2FuVXNlU2ltcGxlRm9udENvZGVQYXRoKCkpOwogICAgIHJ1bi5zZXRUYWJTaXplKCFz
dHlsZS5jb2xsYXBzZVdoaXRlU3BhY2UoKSwgc3R5bGUudGFiU2l6ZSgpKTsKLSAgICBpZiAoZm9u
dC5wcmltYXJ5Rm9udERhdGEoKS5pc1NWR0ZvbnQoKSkKKyAgICBpZiAoZm9udC5wcmltYXJ5Rm9u
dCgpLmlzU1ZHRm9udCgpKQogICAgICAgICBydW4uc2V0UmVuZGVyaW5nQ29udGV4dChTVkdUZXh0
UnVuUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlKHJlbmRlcmVyKCkpKTsKIAogICAgIC8vIFByb3Bh
Z2F0ZSB0aGUgbWF4aW11bSBsZW5ndGggb2YgdGhlIGNoYXJhY3RlcnMgYnVmZmVyIHRvIHRoZSBU
ZXh0UnVuLCBldmVuIHdoZW4gd2UncmUgb25seSBwcm9jZXNzaW5nIGEgc3Vic3RyaW5nLgpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiAxNzg4
NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMzI1LDcgKzIzMjUsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjphZGp1
c3RMb2dpY2FsTGVmCiAgICAgICAgIHJldHVybiBsZWZ0OwogCiAgICAgLy8gRklYTUU6IFNob3Vs
ZCBsZXR0ZXItc3BhY2luZyBhcHBseT8gVGhpcyBpcyBjb21wbGljYXRlZCBzaW5jZSBpdCBkb2Vz
bid0IGFwcGx5IGF0IHRoZSBlZGdlPwotICAgIGZsb2F0IG1heENoYXJXaWR0aCA9IGxpbmVHcmlk
LT5zdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkubWF4Q2hhcldpZHRoKCk7
CisgICAgZmxvYXQgbWF4Q2hhcldpZHRoID0gbGluZUdyaWQtPnN0eWxlKCkuZm9udENhc2NhZGUo
KS5wcmltYXJ5Rm9udCgpLm1heENoYXJXaWR0aCgpOwogICAgIGlmICghbWF4Q2hhcldpZHRoKQog
ICAgICAgICByZXR1cm4gbGVmdDsKIApAQCAtMjM2NSw3ICsyMzY1LDcgQEAgTGF5b3V0VW5pdCBS
ZW5kZXJCbG9jazo6YWRqdXN0TG9naWNhbFJpZwogICAgICAgICByZXR1cm4gcmlnaHQ7CiAKICAg
ICAvLyBGSVhNRTogU2hvdWxkIGxldHRlci1zcGFjaW5nIGFwcGx5PyBUaGlzIGlzIGNvbXBsaWNh
dGVkIHNpbmNlIGl0IGRvZXNuJ3QgYXBwbHkgYXQgdGhlIGVkZ2U/Ci0gICAgZmxvYXQgbWF4Q2hh
cldpZHRoID0gbGluZUdyaWQtPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEo
KS5tYXhDaGFyV2lkdGgoKTsKKyAgICBmbG9hdCBtYXhDaGFyV2lkdGggPSBsaW5lR3JpZC0+c3R5
bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCkubWF4Q2hhcldpZHRoKCk7CiAgICAgaWYg
KCFtYXhDaGFyV2lkdGgpCiAgICAgICAgIHJldHVybiByaWdodDsKIApAQCAtMzcwNSw3ICszNzA1
LDcgQEAgc3RhdGljIGlubGluZSBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW5JbgogICAgIGJvb2wg
ZGlyZWN0aW9uYWxPdmVycmlkZSA9IHN0eWxlLnJ0bE9yZGVyaW5nKCkgPT0gVmlzdWFsT3JkZXI7
CiAKICAgICBUZXh0UnVuIHJ1bihjaGFyYWN0ZXJzLCBsZW5ndGgsIDAsIDAsIGV4cGFuc2lvbiwg
dGV4dERpcmVjdGlvbiwgZGlyZWN0aW9uYWxPdmVycmlkZSk7Ci0gICAgaWYgKGZvbnQucHJpbWFy
eUZvbnREYXRhKCkuaXNTVkdGb250KCkpIHsKKyAgICBpZiAoZm9udC5wcmltYXJ5Rm9udCgpLmlz
U1ZHRm9udCgpKSB7CiAgICAgICAgIEFTU0VSVChjb250ZXh0KTsgLy8gRklYTUU6IFRocmVhZCBh
IFJlbmRlck9iamVjdCYgdG8gdGhpcyBwb2ludCBzbyB3ZSBkb24ndCBoYXZlIHRvIGRlcmVmZXJl
bmNlIGFueXRoaW5nLgogICAgICAgICBydW4uc2V0UmVuZGVyaW5nQ29udGV4dChTVkdUZXh0UnVu
UmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlKCpjb250ZXh0KSk7CiAgICAgfQpAQCAtMzcyNSw3ICsz
NzI1LDcgQEAgc3RhdGljIGlubGluZSBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW5JbgogICAgICAg
ICAgICAgZGlyZWN0aW9uYWxPdmVycmlkZSB8PSBpc092ZXJyaWRlKHN0eWxlLnVuaWNvZGVCaWRp
KCkpOwogICAgIH0KICAgICBUZXh0UnVuIHJ1bihjaGFyYWN0ZXJzLCBsZW5ndGgsIDAsIDAsIGV4
cGFuc2lvbiwgdGV4dERpcmVjdGlvbiwgZGlyZWN0aW9uYWxPdmVycmlkZSk7Ci0gICAgaWYgKGZv
bnQucHJpbWFyeUZvbnREYXRhKCkuaXNTVkdGb250KCkpIHsKKyAgICBpZiAoZm9udC5wcmltYXJ5
Rm9udCgpLmlzU1ZHRm9udCgpKSB7CiAgICAgICAgIEFTU0VSVChjb250ZXh0KTsgLy8gRklYTUU6
IFRocmVhZCBhIFJlbmRlck9iamVjdCYgdG8gdGhpcyBwb2ludCBzbyB3ZSBkb24ndCBoYXZlIHRv
IGRlcmVmZXJlbmNlIGFueXRoaW5nLgogICAgICAgICBydW4uc2V0UmVuZGVyaW5nQ29udGV4dChT
VkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlKCpjb250ZXh0KSk7CiAgICAgfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91
dC5jcHAJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9ja0xpbmVMYXlvdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTgsNyArNDU4LDcgQEAg
dm9pZCBSZW5kZXJCbG9ja0Zsb3c6OnNldE1hcmdpbnNGb3JSdWJ5Ugogc3RhdGljIGlubGluZSB2
b2lkIHNldExvZ2ljYWxXaWR0aEZvclRleHRSdW4oUm9vdElubGluZUJveCogbGluZUJveCwgQmlk
aVJ1biogcnVuLCBSZW5kZXJUZXh0KiByZW5kZXJlciwgZmxvYXQgeFBvcywgY29uc3QgTGluZUlu
Zm8mIGxpbmVJbmZvLAogICAgIEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwJiB0ZXh0
Qm94RGF0YU1hcCwgVmVydGljYWxQb3NpdGlvbkNhY2hlJiB2ZXJ0aWNhbFBvc2l0aW9uQ2FjaGUs
IFdvcmRNZWFzdXJlbWVudHMmIHdvcmRNZWFzdXJlbWVudHMpCiB7Ci0gICAgSGFzaFNldDxjb25z
dCBTaW1wbGVGb250RGF0YSo+IGZhbGxiYWNrRm9udHM7CisgICAgSGFzaFNldDxjb25zdCBGb250
Kj4gZmFsbGJhY2tGb250czsKICAgICBHbHlwaE92ZXJmbG93IGdseXBoT3ZlcmZsb3c7CiAKICAg
ICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IGxpbmVTdHlsZSgqcmVuZGVyZXItPnBhcmVudCgp
LCBsaW5lSW5mbykuZm9udENhc2NhZGUoKTsKQEAgLTUwOSw4ICs1MDksOCBAQCBzdGF0aWMgaW5s
aW5lIHZvaWQgc2V0TG9naWNhbFdpZHRoRm9yVGV4CiAgICAgICAgICAgICB9IGVsc2UKICAgICAg
ICAgICAgICAgICBtZWFzdXJlZFdpZHRoICs9IHdvcmRNZWFzdXJlbWVudC53aWR0aDsKICAgICAg
ICAgICAgIGlmICghd29yZE1lYXN1cmVtZW50LmZhbGxiYWNrRm9udHMuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgICAgICAgICAgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+Ojpjb25zdF9pdGVy
YXRvciBlbmQgPSB3b3JkTWVhc3VyZW1lbnQuZmFsbGJhY2tGb250cy5lbmQoKTsKLSAgICAgICAg
ICAgICAgICBmb3IgKEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPjo6Y29uc3RfaXRlcmF0
b3IgaXQgPSB3b3JkTWVhc3VyZW1lbnQuZmFsbGJhY2tGb250cy5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpCisgICAgICAgICAgICAgICAgSGFzaFNldDxjb25zdCBGb250Kj46OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IHdvcmRNZWFzdXJlbWVudC5mYWxsYmFja0ZvbnRzLmVuZCgpOworICAgICAgICAg
ICAgICAgIGZvciAoSGFzaFNldDxjb25zdCBGb250Kj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gd29y
ZE1lYXN1cmVtZW50LmZhbGxiYWNrRm9udHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQogICAg
ICAgICAgICAgICAgICAgICBmYWxsYmFja0ZvbnRzLmFkZCgqaXQpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CkBAIC01MjcsNyArNTI3LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldExvZ2lj
YWxXaWR0aEZvclRleAogICAgIHJ1bi0+Ym94KCktPnNldExvZ2ljYWxXaWR0aChtZWFzdXJlZFdp
ZHRoICsgaHlwaGVuV2lkdGgpOwogICAgIGlmICghZmFsbGJhY2tGb250cy5pc0VtcHR5KCkpIHsK
ICAgICAgICAgQVNTRVJUKHJ1bi0+Ym94KCktPmJlaGF2ZXNMaWtlVGV4dCgpKTsKLSAgICAgICAg
R2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXA6Oml0ZXJhdG9yIGl0ID0gdGV4dEJveERh
dGFNYXAuYWRkKGRvd25jYXN0PElubGluZVRleHRCb3g+KHJ1bi0+Ym94KCkpLCBzdGQ6Om1ha2Vf
cGFpcihWZWN0b3I8Y29uc3QgU2ltcGxlRm9udERhdGEqPigpLCBHbHlwaE92ZXJmbG93KCkpKS5p
dGVyYXRvcjsKKyAgICAgICAgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXA6Oml0ZXJh
dG9yIGl0ID0gdGV4dEJveERhdGFNYXAuYWRkKGRvd25jYXN0PElubGluZVRleHRCb3g+KHJ1bi0+
Ym94KCkpLCBzdGQ6Om1ha2VfcGFpcihWZWN0b3I8Y29uc3QgRm9udCo+KCksIEdseXBoT3ZlcmZs
b3coKSkpLml0ZXJhdG9yOwogICAgICAgICBBU1NFUlQoaXQtPnZhbHVlLmZpcnN0LmlzRW1wdHko
KSk7CiAgICAgICAgIGNvcHlUb1ZlY3RvcihmYWxsYmFja0ZvbnRzLCBpdC0+dmFsdWUuZmlyc3Qp
OwogICAgICAgICBydW4tPmJveCgpLT5wYXJlbnQoKS0+Y2xlYXJEZXNjZW5kYW50c0hhdmVTYW1l
TGluZUhlaWdodEFuZEJhc2VsaW5lKCk7CkBAIC01MzksNyArNTM5LDcgQEAgc3RhdGljIGlubGlu
ZSB2b2lkIHNldExvZ2ljYWxXaWR0aEZvclRleAogCiAgICAgaWYgKCFnbHlwaE92ZXJmbG93Lmlz
RW1wdHkoKSkgewogICAgICAgICBBU1NFUlQocnVuLT5ib3goKS0+YmVoYXZlc0xpa2VUZXh0KCkp
OwotICAgICAgICBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcDo6aXRlcmF0b3IgaXQg
PSB0ZXh0Qm94RGF0YU1hcC5hZGQoZG93bmNhc3Q8SW5saW5lVGV4dEJveD4ocnVuLT5ib3goKSks
IHN0ZDo6bWFrZV9wYWlyKFZlY3Rvcjxjb25zdCBTaW1wbGVGb250RGF0YSo+KCksIEdseXBoT3Zl
cmZsb3coKSkpLml0ZXJhdG9yOworICAgICAgICBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250
c01hcDo6aXRlcmF0b3IgaXQgPSB0ZXh0Qm94RGF0YU1hcC5hZGQoZG93bmNhc3Q8SW5saW5lVGV4
dEJveD4ocnVuLT5ib3goKSksIHN0ZDo6bWFrZV9wYWlyKFZlY3Rvcjxjb25zdCBGb250Kj4oKSwg
R2x5cGhPdmVyZmxvdygpKSkuaXRlcmF0b3I7CiAgICAgICAgIGl0LT52YWx1ZS5zZWNvbmQgPSBn
bHlwaE92ZXJmbG93OwogICAgICAgICBydW4tPmJveCgpLT5jbGVhcktub3duVG9IYXZlTm9PdmVy
ZmxvdygpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb21i
aW5lVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckNvbWJpbmVUZXh0LmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcs
NyBAQCB2b2lkIFJlbmRlckNvbWJpbmVUZXh0OjpzZXRSZW5kZXJlZFRleHQoCiAgICAgbV9uZWVk
c0ZvbnRVcGRhdGUgPSB0cnVlOwogfQogCi1mbG9hdCBSZW5kZXJDb21iaW5lVGV4dDo6d2lkdGgo
dW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwg
ZmxvYXQgeFBvc2l0aW9uLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNr
Rm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0CitmbG9hdCBSZW5kZXJD
b21iaW5lVGV4dDo6d2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBG
b250Q2FzY2FkZSYgZm9udCwgZmxvYXQgeFBvc2l0aW9uLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiog
ZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKIHsKICAg
ICBpZiAobV9pc0NvbWJpbmVkKQogICAgICAgICByZXR1cm4gZm9udC5zaXplKCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuaAkocmV2aXNpb24g
MTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIG5vZGUo
KSBjb25zdCA9IGRlbGV0ZTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0NvbWJpbmVUZXh0KCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgZmxvYXQgd2lkdGgodW5z
aWduZWQgZnJvbSwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBGb250Q2FzY2FkZSYsIGZsb2F0IHhQ
b3NpdGlvbiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0g
MCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGZsb2F0
IHdpZHRoKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgRm9udENhc2NhZGUm
LCBmbG9hdCB4UG9zaXRpb24sIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzID0g
MCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGNvbnN0
IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAiUmVuZGVyQ29tYmlu
ZVRleHQiOyB9CiAgICAgdmlydHVhbCB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5j
ZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZv
aWQgc2V0UmVuZGVyZWRUZXh0KGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNlYXJjaEZpZWxkLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuY3BwCShyZXZpc2lvbiAx
Nzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiQ1NTRm9udFNlbGVj
dG9yLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkNocm9tZS5o
IgorI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1l
U2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCkBAIC00Miw3ICs0Myw2IEBACiAj
aW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNlYXJjaFBvcHVwTWVudS5oIgogI2lu
Y2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKICNpbmNsdWRl
ICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmgi
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHJldmlzaW9u
IDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDUxLDcgKzQ1MSw3IEBAIExheW91dFJlY3QgUmVuZGVyVGV4dDo6bG9j
YWxDYXJldFJlY3QoSW4KICAgICByZXR1cm4gYm94LnJvb3QoKS5jb21wdXRlQ2FyZXRSZWN0KGxl
ZnQsIGNhcmV0V2lkdGgsIGV4dHJhV2lkdGhUb0VuZE9mTGluZSk7CiB9CiAKLUFMV0FZU19JTkxJ
TkUgZmxvYXQgUmVuZGVyVGV4dDo6d2lkdGhGcm9tQ2FjaGUoY29uc3QgRm9udENhc2NhZGUmIGYs
IGludCBzdGFydCwgaW50IGxlbiwgZmxvYXQgeFBvcywgSGFzaFNldDxjb25zdCBTaW1wbGVGb250
RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93LCBjb25z
dCBSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CitBTFdBWVNfSU5MSU5FIGZsb2F0IFJlbmRlclRl
eHQ6OndpZHRoRnJvbUNhY2hlKGNvbnN0IEZvbnRDYXNjYWRlJiBmLCBpbnQgc3RhcnQsIGludCBs
ZW4sIGZsb2F0IHhQb3MsIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzLCBHbHlw
aE92ZXJmbG93KiBnbHlwaE92ZXJmbG93LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0
CiB7CiAgICAgaWYgKHN0eWxlLmhhc1RleHRDb21iaW5lKCkgJiYgaXM8UmVuZGVyQ29tYmluZVRl
eHQ+KCp0aGlzKSkgewogICAgICAgICBjb25zdCBSZW5kZXJDb21iaW5lVGV4dCYgY29tYmluZVRl
eHQgPSBkb3duY2FzdDxSZW5kZXJDb21iaW5lVGV4dD4oKnRoaXMpOwpAQCAtNjMwLDcgKzYzMCw3
IEBAIExpbmVCcmVha0l0ZXJhdG9yTW9kZSBtYXBMaW5lQnJlYWtUb0l0ZXIKIAogdm9pZCBSZW5k
ZXJUZXh0Ojpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyhmbG9hdCBsZWFkV2lkdGgpCiB7
Ci0gICAgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+IGZhbGxiYWNrRm9udHM7CisgICAg
SGFzaFNldDxjb25zdCBGb250Kj4gZmFsbGJhY2tGb250czsKICAgICBHbHlwaE92ZXJmbG93IGds
eXBoT3ZlcmZsb3c7CiAgICAgY29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMobGVhZFdpZHRo
LCBmYWxsYmFja0ZvbnRzLCBnbHlwaE92ZXJmbG93KTsKICAgICBpZiAoZmFsbGJhY2tGb250cy5p
c0VtcHR5KCkgJiYgIWdseXBoT3ZlcmZsb3cubGVmdCAmJiAhZ2x5cGhPdmVyZmxvdy5yaWdodCAm
JiAhZ2x5cGhPdmVyZmxvdy50b3AgJiYgIWdseXBoT3ZlcmZsb3cuYm90dG9tKQpAQCAtNjQzLDcg
KzY0Myw3IEBAIHN0YXRpYyBpbmxpbmUgZmxvYXQgaHlwaGVuV2lkdGgoUmVuZGVyVGUKICAgICBy
ZXR1cm4gZm9udC53aWR0aChSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bihyZW5kZXJlciwg
Zm9udCwgc3R5bGUuaHlwaGVuU3RyaW5nKCkuc3RyaW5nKCksIHN0eWxlKSk7CiB9CiAKLXN0YXRp
YyBmbG9hdCBtYXhXb3JkRnJhZ21lbnRXaWR0aChSZW5kZXJUZXh0KiByZW5kZXJlciwgY29uc3Qg
UmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgU3RyaW5nVmlldyB3
b3JkLCBpbnQgbWluaW11bVByZWZpeExlbmd0aCwgdW5zaWduZWQgbWluaW11bVN1ZmZpeExlbmd0
aCwgaW50JiBzdWZmaXhTdGFydCwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+JiBmYWxs
YmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93JiBnbHlwaE92ZXJmbG93KQorc3RhdGljIGZsb2F0IG1h
eFdvcmRGcmFnbWVudFdpZHRoKFJlbmRlclRleHQqIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHls
ZSYgc3R5bGUsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBTdHJpbmdWaWV3IHdvcmQsIGludCBt
aW5pbXVtUHJlZml4TGVuZ3RoLCB1bnNpZ25lZCBtaW5pbXVtU3VmZml4TGVuZ3RoLCBpbnQmIHN1
ZmZpeFN0YXJ0LCBIYXNoU2V0PGNvbnN0IEZvbnQqPiYgZmFsbGJhY2tGb250cywgR2x5cGhPdmVy
ZmxvdyYgZ2x5cGhPdmVyZmxvdykKIHsKICAgICBzdWZmaXhTdGFydCA9IDA7CiAgICAgaWYgKHdv
cmQubGVuZ3RoKCkgPD0gbWluaW11bVN1ZmZpeExlbmd0aCkKQEAgLTY4Myw3ICs2ODMsNyBAQCBz
dGF0aWMgZmxvYXQgbWF4V29yZEZyYWdtZW50V2lkdGgoUmVuZGVyCiAgICAgcmV0dXJuIG1heEZy
YWdtZW50V2lkdGg7CiB9CiAKLXZvaWQgUmVuZGVyVGV4dDo6Y29tcHV0ZVByZWZlcnJlZExvZ2lj
YWxXaWR0aHMoZmxvYXQgbGVhZFdpZHRoLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4m
IGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cmIGdseXBoT3ZlcmZsb3cpCit2b2lkIFJlbmRl
clRleHQ6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKGZsb2F0IGxlYWRXaWR0aCwgSGFz
aFNldDxjb25zdCBGb250Kj4mIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cmIGdseXBoT3Zl
cmZsb3cpCiB7CiAgICAgQVNTRVJUKG1faGFzVGFiIHx8IHByZWZlcnJlZExvZ2ljYWxXaWR0aHNE
aXJ0eSgpIHx8ICFtX2tub3duVG9IYXZlTm9PdmVyZmxvd0FuZE5vRmFsbGJhY2tGb250cyk7CiAK
QEAgLTEyMDYsNyArMTIwNiw3IEBAIGNvbnN0IFNpbXBsZUxpbmVMYXlvdXQ6OkxheW91dCogUmVu
ZGVyVGUKICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyQmxvY2tGbG93PigqcGFyZW50KCkpLnNp
bXBsZUxpbmVMYXlvdXQoKTsKIH0KIAotZmxvYXQgUmVuZGVyVGV4dDo6d2lkdGgodW5zaWduZWQg
ZnJvbSwgdW5zaWduZWQgbGVuLCBmbG9hdCB4UG9zLCBib29sIGZpcnN0TGluZSwgSGFzaFNldDxj
b25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlw
aE92ZXJmbG93KSBjb25zdAorZmxvYXQgUmVuZGVyVGV4dDo6d2lkdGgodW5zaWduZWQgZnJvbSwg
dW5zaWduZWQgbGVuLCBmbG9hdCB4UG9zLCBib29sIGZpcnN0TGluZSwgSGFzaFNldDxjb25zdCBG
b250Kj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0
CiB7CiAgICAgaWYgKGZyb20gPj0gdGV4dExlbmd0aCgpKQogICAgICAgICByZXR1cm4gMDsKQEAg
LTEyMTgsNyArMTIxOCw3IEBAIGZsb2F0IFJlbmRlclRleHQ6OndpZHRoKHVuc2lnbmVkIGZyb20s
IHUKICAgICByZXR1cm4gd2lkdGgoZnJvbSwgbGVuLCBsaW5lU3R5bGUuZm9udENhc2NhZGUoKSwg
eFBvcywgZmFsbGJhY2tGb250cywgZ2x5cGhPdmVyZmxvdyk7CiB9CiAKLWZsb2F0IFJlbmRlclRl
eHQ6OndpZHRoKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgY29uc3QgRm9udENhc2NhZGUm
IGYsIGZsb2F0IHhQb3MsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tG
b250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKK2Zsb2F0IFJlbmRlclRl
eHQ6OndpZHRoKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgY29uc3QgRm9udENhc2NhZGUm
IGYsIGZsb2F0IHhQb3MsIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzLCBHbHlw
aE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAogewogICAgIEFTU0VSVChmcm9tICsgbGVu
IDw9IHRleHRMZW5ndGgoKSk7CiAgICAgaWYgKCF0ZXh0TGVuZ3RoKCkpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTg5LDggKzg5
LDggQEAgcHVibGljOgogICAgIHVuc2lnbmVkIHRleHRMZW5ndGgoKSBjb25zdCB7IHJldHVybiBt
X3RleHQuaW1wbCgpLT5sZW5ndGgoKTsgfSAvLyBub24gdmlydHVhbCBpbXBsZW1lbnRhdGlvbiBv
ZiBsZW5ndGgoKQogICAgIHZvaWQgcG9zaXRpb25MaW5lQm94KElubGluZVRleHRCb3gmKTsKIAot
ICAgIHZpcnR1YWwgZmxvYXQgd2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBjb25z
dCBGb250Q2FzY2FkZSYsIGZsb2F0IHhQb3MsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEq
PiogZmFsbGJhY2tGb250cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBmbG9hdCB3aWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIGZsb2F0IHhQb3Ms
IGJvb2wgZmlyc3RMaW5lID0gZmFsc2UsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiog
ZmFsbGJhY2tGb250cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29uc3Q7CisgICAgdmlydHVh
bCBmbG9hdCB3aWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIGNvbnN0IEZvbnRDYXNj
YWRlJiwgZmxvYXQgeFBvcywgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMgPSAw
LCBHbHlwaE92ZXJmbG93KiA9IDApIGNvbnN0OworICAgIHZpcnR1YWwgZmxvYXQgd2lkdGgodW5z
aWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBmbG9hdCB4UG9zLCBib29sIGZpcnN0TGluZSA9IGZh
bHNlLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cyA9IDAsIEdseXBoT3ZlcmZs
b3cqID0gMCkgY29uc3Q7CiAKICAgICBmbG9hdCBtaW5Mb2dpY2FsV2lkdGgoKSBjb25zdDsKICAg
ICBmbG9hdCBtYXhMb2dpY2FsV2lkdGgoKSBjb25zdDsKQEAgLTE4MCw3ICsxODAsNyBAQCBwcml2
YXRlOgogCiAgICAgdmlydHVhbCBib29sIGNhbkhhdmVDaGlsZHJlbigpIGNvbnN0IG92ZXJyaWRl
IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICB2b2lkIGNvbXB1dGVQcmVmZXJyZWRMb2dp
Y2FsV2lkdGhzKGZsb2F0IGxlYWRXaWR0aCwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+
JiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93Jik7CisgICAgdm9pZCBjb21wdXRlUHJlZmVy
cmVkTG9naWNhbFdpZHRocyhmbG9hdCBsZWFkV2lkdGgsIEhhc2hTZXQ8Y29uc3QgRm9udCo+JiBm
YWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93Jik7CiAKICAgICBib29sIGNvbXB1dGVDYW5Vc2VT
aW1wbGVGb250Q29kZVBhdGgoKSBjb25zdDsKICAgICAKQEAgLTE5Miw3ICsxOTIsNyBAQCBwcml2
YXRlOgogICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYs
IEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBjb25zdCBMYXlvdXRQb2lu
dCYsIEhpdFRlc3RBY3Rpb24pIG92ZXJyaWRlIGZpbmFsIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7
IHJldHVybiBmYWxzZTsgfQogCiAgICAgYm9vbCBjb250YWluc09ubHlXaGl0ZXNwYWNlKHVuc2ln
bmVkIGZyb20sIHVuc2lnbmVkIGxlbikgY29uc3Q7Ci0gICAgZmxvYXQgd2lkdGhGcm9tQ2FjaGUo
Y29uc3QgRm9udENhc2NhZGUmLCBpbnQgc3RhcnQsIGludCBsZW4sIGZsb2F0IHhQb3MsIEhhc2hT
ZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyos
IGNvbnN0IFJlbmRlclN0eWxlJikgY29uc3Q7CisgICAgZmxvYXQgd2lkdGhGcm9tQ2FjaGUoY29u
c3QgRm9udENhc2NhZGUmLCBpbnQgc3RhcnQsIGludCBsZW4sIGZsb2F0IHhQb3MsIEhhc2hTZXQ8
Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiwgY29uc3QgUmVuZGVy
U3R5bGUmKSBjb25zdDsKICAgICBib29sIGlzQWxsQVNDSUkoKSBjb25zdCB7IHJldHVybiBtX2lz
QWxsQVNDSUk7IH0KICAgICBib29sIGNvbXB1dGVVc2VCYWNrc2xhc2hBc1llblN5bWJvbCgpIGNv
bnN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJDU1NGb250U2VsZWN0b3IuaCIK
ICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCisjaW5j
bHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVTZWxlY3Rp
b24uaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKQEAgLTQwLDcgKzQxLDYgQEAKICNpbmNsdWRl
ICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJTZXR0
aW5ncy5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5jbHVkZSAiU3R5bGVSZXNv
bHZlci5oIgogI2luY2x1ZGUgIlRleHRDb250cm9sSW5uZXJFbGVtZW50cy5oIgogI2luY2x1ZGUg
PHd0Zi9TdGFja1N0YXRzLmg+CkBAIC0zNDYsNyArMzQ2LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmU6OgogICAgIGlmIChmYW1pbHkgPT0gIkx1Y2lkYSBHcmFuZGUi
KQogICAgICAgICBtYXhDaGFyV2lkdGggPSBzY2FsZUVtVG9Vbml0cyg0MDI3KTsKICAgICBlbHNl
IGlmIChzdHlsZSgpLmZvbnRDYXNjYWRlKCkuaGFzVmFsaWRBdmVyYWdlQ2hhcldpZHRoKCkpCi0g
ICAgICAgIG1heENoYXJXaWR0aCA9IHJvdW5kZihzdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFy
eUZvbnREYXRhKCkubWF4Q2hhcldpZHRoKCkpOworICAgICAgICBtYXhDaGFyV2lkdGggPSByb3Vu
ZGYoc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCkubWF4Q2hhcldpZHRoKCkpOwog
I2VuZGlmCiAKICAgICAvLyBGb3IgdGV4dCBpbnB1dHMsIElFIGFkZHMgc29tZSBleHRyYSB3aWR0
aC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0JKHJl
dmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlP
Uy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTgwLDcgKzU4MCw3IEBAIHN0YXRpYyB2b2lkIGFkanVz
dElucHV0RWxlbWVudEJ1dHRvblN0eWwKICAgICBGb250Q2FzY2FkZSBmb250ID0gc3R5bGUuZm9u
dENhc2NhZGUoKTsKICAgICAKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gaW5wdXRFbGVt
ZW50LnJlbmRlcmVyKCk7Ci0gICAgaWYgKGZvbnQucHJpbWFyeUZvbnREYXRhKCkuaXNTVkdGb250
KCkgJiYgIXJlbmRlcmVyKQorICAgIGlmIChmb250LnByaW1hcnlGb250KCkuaXNTVkdGb250KCkg
JiYgIXJlbmRlcmVyKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgZmxvYXQgbWF4aW11bVdp
ZHRoID0gbG9jYWxpemVkRGF0ZUNhY2hlKCkubWF4aW11bVdpZHRoRm9yRGF0ZVR5cGUoZGF0ZVR5
cGUsIGZvbnQsIFJlbmRlclRoZW1lTWVhc3VyZVRleHRDbGllbnQoZm9udCwgKnJlbmRlcmVyLCBz
dHlsZSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNw
cAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxp
bmVCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04ODUsNyArODg1LDcgQEAgdm9pZCBSb290SW5s
aW5lQm94Ojphc2NlbnRBbmREZXNjZW50Rm9yQgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgVmVjdG9yPGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIHVzZWRGb250cyA9IG51bGxwdHI7Cisg
ICAgVmVjdG9yPGNvbnN0IEZvbnQqPiogdXNlZEZvbnRzID0gbnVsbHB0cjsKICAgICBHbHlwaE92
ZXJmbG93KiBnbHlwaE92ZXJmbG93ID0gbnVsbHB0cjsKICAgICBpZiAoaXM8SW5saW5lVGV4dEJv
eD4oYm94KSkgewogICAgICAgICBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcDo6aXRl
cmF0b3IgaXQgPSB0ZXh0Qm94RGF0YU1hcC5maW5kKCZkb3duY2FzdDxJbmxpbmVUZXh0Qm94Pihi
b3gpKTsKQEAgLTkwMSw3ICs5MDEsNyBAQCB2b2lkIFJvb3RJbmxpbmVCb3g6OmFzY2VudEFuZERl
c2NlbnRGb3JCCiAKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgYm94TGluZVN0eWxlID0gYm94Lmxp
bmVTdHlsZSgpOwogICAgIGlmICh1c2VkRm9udHMgJiYgIXVzZWRGb250cy0+aXNFbXB0eSgpICYm
IChpbmNsdWRlRm9udCB8fCAoYm94TGluZVN0eWxlLmxpbmVIZWlnaHQoKS5pc05lZ2F0aXZlKCkg
JiYgaW5jbHVkZUxlYWRpbmcpKSkgewotICAgICAgICB1c2VkRm9udHMtPmFwcGVuZCgmYm94TGlu
ZVN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkpOworICAgICAgICB1c2VkRm9u
dHMtPmFwcGVuZCgmYm94TGluZVN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKSk7CiAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdXNlZEZvbnRzLT5zaXplKCk7ICsraSkgewog
ICAgICAgICAgICAgY29uc3QgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzID0gdXNlZEZvbnRzLT5h
dChpKS0+Zm9udE1ldHJpY3MoKTsKICAgICAgICAgICAgIGludCB1c2VkRm9udEFzY2VudCA9IGZv
bnRNZXRyaWNzLmFzY2VudChiYXNlbGluZVR5cGUoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTUyLDcgKzUyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIFNpbXBs
ZUxpbmVMYXlvdXQgewogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRp
YyBib29sIGNhblVzZUZvclRleHQoY29uc3QgQ2hhcmFjdGVyVHlwZSogdGV4dCwgdW5zaWduZWQg
bGVuZ3RoLCBjb25zdCBTaW1wbGVGb250RGF0YSYgZm9udERhdGEpCitzdGF0aWMgYm9vbCBjYW5V
c2VGb3JUZXh0KGNvbnN0IENoYXJhY3RlclR5cGUqIHRleHQsIHVuc2lnbmVkIGxlbmd0aCwgY29u
c3QgRm9udCYgZm9udCkKIHsKICAgICAvLyBGSVhNRTogPHRleHRhcmVhIG1heGxlbmd0aD0wPiBn
ZW5lcmF0ZXMgZW1wdHkgdGV4dCBub2RlLgogICAgIGlmICghbGVuZ3RoKQpAQCAtNzUsMTcgKzc1
LDE3IEBAIHN0YXRpYyBib29sIGNhblVzZUZvclRleHQoY29uc3QgQ2hhcmFjdGUKICAgICAgICAg
ICAgIHx8IGRpcmVjdGlvbiA9PSBVX1BPUF9ESVJFQ1RJT05BTF9GT1JNQVQgfHwgZGlyZWN0aW9u
ID09IFVfQk9VTkRBUllfTkVVVFJBTCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
ICAgICBpZiAoIWZvbnREYXRhLmdseXBoRm9yQ2hhcmFjdGVyKGNoYXJhY3RlcikpCisgICAgICAg
IGlmICghZm9udC5nbHlwaEZvckNoYXJhY3RlcihjaGFyYWN0ZXIpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgY2Fu
VXNlRm9yVGV4dChjb25zdCBSZW5kZXJUZXh0JiB0ZXh0UmVuZGVyZXIsIGNvbnN0IFNpbXBsZUZv
bnREYXRhJiBmb250RGF0YSkKK3N0YXRpYyBib29sIGNhblVzZUZvclRleHQoY29uc3QgUmVuZGVy
VGV4dCYgdGV4dFJlbmRlcmVyLCBjb25zdCBGb250JiBmb250KQogewogICAgIGlmICh0ZXh0UmVu
ZGVyZXIuaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBjYW5Vc2VGb3JUZXh0KHRleHRSZW5kZXJl
ci5jaGFyYWN0ZXJzOCgpLCB0ZXh0UmVuZGVyZXIudGV4dExlbmd0aCgpLCBmb250RGF0YSk7Ci0g
ICAgcmV0dXJuIGNhblVzZUZvclRleHQodGV4dFJlbmRlcmVyLmNoYXJhY3RlcnMxNigpLCB0ZXh0
UmVuZGVyZXIudGV4dExlbmd0aCgpLCBmb250RGF0YSk7CisgICAgICAgIHJldHVybiBjYW5Vc2VG
b3JUZXh0KHRleHRSZW5kZXJlci5jaGFyYWN0ZXJzOCgpLCB0ZXh0UmVuZGVyZXIudGV4dExlbmd0
aCgpLCBmb250KTsKKyAgICByZXR1cm4gY2FuVXNlRm9yVGV4dCh0ZXh0UmVuZGVyZXIuY2hhcmFj
dGVyczE2KCksIHRleHRSZW5kZXJlci50ZXh0TGVuZ3RoKCksIGZvbnQpOwogfQogCiBib29sIGNh
blVzZUZvcihjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3cpCkBAIC0xODQsMTEgKzE4NCwxMSBA
QCBib29sIGNhblVzZUZvcihjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsCiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKHN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZv
bnREYXRhKCkuaXNTVkdGb250KCkpCisgICAgaWYgKHN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFy
eUZvbnQoKS5pc1NWR0ZvbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIC8vIFdlIGFz
c3VtZSB0aGF0IGFsbCBsaW5lcyBoYXZlIG1ldHJpY3MgYmFzZWQgcHVyZWx5IG9uIHRoZSBwcmlt
YXJ5IGZvbnQuCi0gICAgYXV0byYgcHJpbWFyeUZvbnREYXRhID0gc3R5bGUuZm9udENhc2NhZGUo
KS5wcmltYXJ5Rm9udERhdGEoKTsKLSAgICBpZiAocHJpbWFyeUZvbnREYXRhLmlzTG9hZGluZygp
KQorICAgIGF1dG8mIHByaW1hcnlGb250ID0gc3R5bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9u
dCgpOworICAgIGlmIChwcmltYXJ5Rm9udC5pc0xvYWRpbmcoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIGZvciAoY29uc3QgYXV0byYgdGV4dFJlbmRlcmVyIDogY2hpbGRyZW5PZlR5cGU8
UmVuZGVyVGV4dD4oZmxvdykpIHsKICAgICAgICAgaWYgKHRleHRSZW5kZXJlci5pc0NvbWJpbmVU
ZXh0KCkgfHwgdGV4dFJlbmRlcmVyLmlzQ291bnRlcigpIHx8IHRleHRSZW5kZXJlci5pc1F1b3Rl
KCkgfHwgdGV4dFJlbmRlcmVyLmlzVGV4dEZyYWdtZW50KCkKQEAgLTE5Niw3ICsxOTYsNyBAQCBi
b29sIGNhblVzZUZvcihjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIGlmIChzdHlsZS5mb250Q2FzY2FkZSgpLmNvZGVQYXRoKFRleHRS
dW4odGV4dFJlbmRlcmVyLnRleHQoKSkpICE9IEZvbnRDYXNjYWRlOjpTaW1wbGUpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghY2FuVXNlRm9yVGV4dCh0ZXh0UmVuZGVy
ZXIsIHByaW1hcnlGb250RGF0YSkpCisgICAgICAgIGlmICghY2FuVXNlRm9yVGV4dCh0ZXh0UmVu
ZGVyZXIsIHByaW1hcnlGb250KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAg
ICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9CcmVh
a2luZ0NvbnRleHRJbmxpbmVIZWFkZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL2xpbmUvQnJlYWtpbmdDb250ZXh0SW5saW5lSGVhZGVycy5oCShyZXZpc2lvbiAx
Nzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9CcmVha2luZ0NvbnRleHRJ
bmxpbmVIZWFkZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgc3RydWN0IFdv
cmRNZWFzdXJlbWVudCB7CiAgICAgZmxvYXQgd2lkdGg7CiAgICAgaW50IHN0YXJ0T2Zmc2V0Owog
ICAgIGludCBlbmRPZmZzZXQ7Ci0gICAgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+IGZh
bGxiYWNrRm9udHM7CisgICAgSGFzaFNldDxjb25zdCBGb250Kj4gZmFsbGJhY2tGb250czsKIH07
CiAKIGNsYXNzIEJyZWFraW5nQ29udGV4dCB7CkBAIC00ODYsMTMgKzQ4NiwxMyBAQCBpbmxpbmUg
dm9pZCB1cGRhdGVDb3VudGVySWZOZWVkZWQoUmVuZGVyCiAgICAgZG93bmNhc3Q8UmVuZGVyQ291
bnRlcj4ocmVuZGVyVGV4dCkudXBkYXRlQ291bnRlcigpOwogfQogCi1pbmxpbmUgZmxvYXQgbWVh
c3VyZUh5cGhlbldpZHRoKFJlbmRlclRleHQqIHJlbmRlcmVyLCBjb25zdCBGb250Q2FzY2FkZSYg
Zm9udCwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCkK
K2lubGluZSBmbG9hdCBtZWFzdXJlSHlwaGVuV2lkdGgoUmVuZGVyVGV4dCogcmVuZGVyZXIsIGNv
bnN0IEZvbnRDYXNjYWRlJiBmb250LCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250
cyA9IDApCiB7CiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlID0gcmVuZGVyZXItPnN0eWxl
KCk7CiAgICAgcmV0dXJuIGZvbnQud2lkdGgoUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4o
cmVuZGVyZXIsIGZvbnQsIHN0eWxlLmh5cGhlblN0cmluZygpLnN0cmluZygpLCBzdHlsZSksIGZh
bGxiYWNrRm9udHMpOwogfQogCi1BTFdBWVNfSU5MSU5FIGZsb2F0IHRleHRXaWR0aChSZW5kZXJU
ZXh0KiB0ZXh0LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIGNvbnN0IEZvbnRDYXNjYWRl
JiBmb250LCBmbG9hdCB4UG9zLCBib29sIGlzRml4ZWRQaXRjaCwgYm9vbCBjb2xsYXBzZVdoaXRl
U3BhY2UsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiYgZmFsbGJhY2tGb250cywgVGV4
dExheW91dCogbGF5b3V0ID0gMCkKK0FMV0FZU19JTkxJTkUgZmxvYXQgdGV4dFdpZHRoKFJlbmRl
clRleHQqIHRleHQsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgY29uc3QgRm9udENhc2Nh
ZGUmIGZvbnQsIGZsb2F0IHhQb3MsIGJvb2wgaXNGaXhlZFBpdGNoLCBib29sIGNvbGxhcHNlV2hp
dGVTcGFjZSwgSGFzaFNldDxjb25zdCBGb250Kj4mIGZhbGxiYWNrRm9udHMsIFRleHRMYXlvdXQq
IGxheW91dCA9IDApCiB7CiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlID0gdGV4dC0+c3R5
bGUoKTsKIApAQCAtNTc4LDcgKzU3OCw3IEBAIGlubGluZSB2b2lkIHRyeUh5cGhlbmF0aW5nKFJl
bmRlclRleHQqIHQKICAgICBBU1NFUlQocG9zIC0gbGFzdFNwYWNlIC0gcHJlZml4TGVuZ3RoID49
IG1pbmltdW1TdWZmaXhMZW5ndGgpOwogCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIEhhc2hT
ZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiBmYWxsYmFja0ZvbnRzOworICAgIEhhc2hTZXQ8Y29u
c3QgRm9udCo+IGZhbGxiYWNrRm9udHM7CiAgICAgZmxvYXQgcHJlZml4V2lkdGggPSBoeXBoZW5X
aWR0aCArIHRleHRXaWR0aCh0ZXh0LCBsYXN0U3BhY2UsIHByZWZpeExlbmd0aCwgZm9udCwgeFBv
cywgaXNGaXhlZFBpdGNoLCBjb2xsYXBzZVdoaXRlU3BhY2UsIGZhbGxiYWNrRm9udHMpICsgbGFz
dFNwYWNlV29yZFNwYWNpbmc7CiAgICAgQVNTRVJUKHhQb3MgKyBwcmVmaXhXaWR0aCA8PSBhdmFp
bGFibGVXaWR0aCk7CiAjZWxzZQpAQCAtNjU2LDcgKzY1Niw3IEBAIGlubGluZSBib29sIEJyZWFr
aW5nQ29udGV4dDo6aGFuZGxlVGV4dCgKIAogICAgIC8vIE5vbi16ZXJvIG9ubHkgd2hlbiBrZXJu
aW5nIGlzIGVuYWJsZWQgYW5kIFRleHRMYXlvdXQgaXNuJ3QgdXNlZCwgaW4gd2hpY2ggY2FzZSB3
ZSBtZWFzdXJlCiAgICAgLy8gd29yZHMgd2l0aCB0aGVpciB0cmFpbGluZyBzcGFjZSwgdGhlbiBz
dWJ0cmFjdCBpdHMgd2lkdGguCi0gICAgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+IGZh
bGxiYWNrRm9udHM7CisgICAgSGFzaFNldDxjb25zdCBGb250Kj4gZmFsbGJhY2tGb250czsKICAg
ICBmbG9hdCB3b3JkVHJhaWxpbmdTcGFjZVdpZHRoID0gKGZvbnQudHlwZXNldHRpbmdGZWF0dXJl
cygpICYgS2VybmluZykgJiYgIXRleHRMYXlvdXQgPyBmb250LndpZHRoKFJlbmRlckJsb2NrOjpj
b25zdHJ1Y3RUZXh0UnVuKCZyZW5kZXJUZXh0LCBmb250LCAmc3BhY2UsIDEsIHN0eWxlKSwgJmZh
bGxiYWNrRm9udHMpICsgd29yZFNwYWNpbmcgOiAwOwogCiAgICAgVUNoYXIgbGFzdENoYXJhY3Rl
ciA9IG1fcmVuZGVyVGV4dEluZm8ubV9saW5lQnJlYWtJdGVyYXRvci5sYXN0Q2hhcmFjdGVyKCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJh
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1Jl
bmRlck1hdGhNTE9wZXJhdG9yLmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEzMzMsNyArMTMzMyw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnJlc2V0
U3RyZXRjaFMKIAogRmxvYXRSZWN0IFJlbmRlck1hdGhNTE9wZXJhdG9yOjpib3VuZHNGb3JHbHlw
aChjb25zdCBHbHlwaERhdGEmIGRhdGEpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGRhdGEuZm9udERh
dGEtPmJvdW5kc0ZvckdseXBoKGRhdGEuZ2x5cGgpOworICAgIHJldHVybiBkYXRhLmZvbnQtPmJv
dW5kc0ZvckdseXBoKGRhdGEuZ2x5cGgpOwogfQogCiBmbG9hdCBSZW5kZXJNYXRoTUxPcGVyYXRv
cjo6aGVpZ2h0Rm9yR2x5cGgoY29uc3QgR2x5cGhEYXRhJiBkYXRhKSBjb25zdApAQCAtMTM0Myw3
ICsxMzQzLDcgQEAgZmxvYXQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmhlaWdodEZvckdseQogCiBm
bG9hdCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6YWR2YW5jZUZvckdseXBoKGNvbnN0IEdseXBoRGF0
YSYgZGF0YSkgY29uc3QKIHsKLSAgICByZXR1cm4gZGF0YS5mb250RGF0YS0+d2lkdGhGb3JHbHlw
aChkYXRhLmdseXBoKTsKKyAgICByZXR1cm4gZGF0YS5mb250LT53aWR0aEZvckdseXBoKGRhdGEu
Z2x5cGgpOwogfQogCiB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpjb21wdXRlUHJlZmVycmVk
TG9naWNhbFdpZHRocygpCkBAIC0xNTIxLDExICsxNTIxLDExIEBAIGJvb2wgUmVuZGVyTWF0aE1M
T3BlcmF0b3I6OmdldEdseXBoQXNzZW0KICAgICBpZiAoIWJvdHRvbS5nbHlwaCkKICAgICAgICAg
Ym90dG9tLmdseXBoID0gZXh0ZW5zaW9uLmdseXBoOwogCi0gICAgdG9wLmZvbnREYXRhID0gJnN0
eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKTsKLSAgICBleHRlbnNpb24uZm9u
dERhdGEgPSB0b3AuZm9udERhdGE7Ci0gICAgYm90dG9tLmZvbnREYXRhID0gdG9wLmZvbnREYXRh
OworICAgIHRvcC5mb250ID0gJnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpOwor
ICAgIGV4dGVuc2lvbi5mb250ID0gdG9wLmZvbnQ7CisgICAgYm90dG9tLmZvbnQgPSB0b3AuZm9u
dDsKICAgICBpZiAobWlkZGxlLmdseXBoKQotICAgICAgICBtaWRkbGUuZm9udERhdGEgPSB0b3Au
Zm9udERhdGE7CisgICAgICAgIG1pZGRsZS5mb250ID0gdG9wLmZvbnQ7CiAKICAgICBzdHJldGNo
eURhdGEuc2V0R2x5cGhBc3NlbWJseU1vZGUodG9wLCBleHRlbnNpb24sIGJvdHRvbSwgbWlkZGxl
KTsKIApAQCAtMTUzOCwyNCArMTUzOCwyNCBAQCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6U3RyZXRj
aHlEYXRhIFJlbmRlCiAKICAgICBBU1NFUlQobV9pc1ZlcnRpY2FsICYmIGlzTGFyZ2VPcGVyYXRv
ckluRGlzcGxheVN0eWxlKCkpOwogCi0gICAgY29uc3QgYXV0byYgcHJpbWFyeUZvbnREYXRhID0g
c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpOworICAgIGNvbnN0IGF1dG8m
IHByaW1hcnlGb250ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCk7CiAgICAg
R2x5cGhEYXRhIGJhc2VHbHlwaCA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5nbHlwaERhdGFGb3JD
aGFyYWN0ZXIoY2hhcmFjdGVyLCAhc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpOwot
ICAgIGlmICghcHJpbWFyeUZvbnREYXRhLm1hdGhEYXRhKCkgfHwgYmFzZUdseXBoLmZvbnREYXRh
ICE9ICZwcmltYXJ5Rm9udERhdGEpCisgICAgaWYgKCFwcmltYXJ5Rm9udC5tYXRoRGF0YSgpIHx8
IGJhc2VHbHlwaC5mb250ICE9ICZwcmltYXJ5Rm9udCkKICAgICAgICAgcmV0dXJuIGRhdGE7CiAK
ICAgICBWZWN0b3I8R2x5cGg+IHNpemVWYXJpYW50czsKICAgICBWZWN0b3I8T3BlblR5cGVNYXRo
RGF0YTo6QXNzZW1ibHlQYXJ0PiBhc3NlbWJseVBhcnRzOwogCiAgICAgLy8gVGhlIHZhbHVlIG9m
IGRpc3BsYXlPcGVyYXRvck1pbkhlaWdodCBpcyBzb21ldGltZXMgdG9vIHNtYWxsLCBzbyB3ZSBl
bnN1cmUgdGhhdCBpdCBpcyBhdCBsZWFzdCBcc3FydHsyfSB0aW1lcyB0aGUgc2l6ZSBvZiB0aGUg
YmFzZSBnbHlwaC4KLSAgICBmbG9hdCBkaXNwbGF5T3BlcmF0b3JNaW5IZWlnaHQgPSBzdGQ6Om1h
eChiYXNlR2x5cGguZm9udERhdGEtPmJvdW5kc0ZvckdseXBoKGJhc2VHbHlwaC5nbHlwaCkuaGVp
Z2h0KCkgKiBzcXJ0T2ZUd29GbG9hdCwgcHJpbWFyeUZvbnREYXRhLm1hdGhEYXRhKCktPmdldE1h
dGhDb25zdGFudChwcmltYXJ5Rm9udERhdGEsIE9wZW5UeXBlTWF0aERhdGE6OkRpc3BsYXlPcGVy
YXRvck1pbkhlaWdodCkpOworICAgIGZsb2F0IGRpc3BsYXlPcGVyYXRvck1pbkhlaWdodCA9IHN0
ZDo6bWF4KGJhc2VHbHlwaC5mb250LT5ib3VuZHNGb3JHbHlwaChiYXNlR2x5cGguZ2x5cGgpLmhl
aWdodCgpICogc3FydE9mVHdvRmxvYXQsIHByaW1hcnlGb250Lm1hdGhEYXRhKCktPmdldE1hdGhD
b25zdGFudChwcmltYXJ5Rm9udCwgT3BlblR5cGVNYXRoRGF0YTo6RGlzcGxheU9wZXJhdG9yTWlu
SGVpZ2h0KSk7CiAKLSAgICBwcmltYXJ5Rm9udERhdGEubWF0aERhdGEoKS0+Z2V0TWF0aFZhcmlh
bnRzKGJhc2VHbHlwaC5nbHlwaCwgdHJ1ZSwgc2l6ZVZhcmlhbnRzLCBhc3NlbWJseVBhcnRzKTsK
KyAgICBwcmltYXJ5Rm9udC5tYXRoRGF0YSgpLT5nZXRNYXRoVmFyaWFudHMoYmFzZUdseXBoLmds
eXBoLCB0cnVlLCBzaXplVmFyaWFudHMsIGFzc2VtYmx5UGFydHMpOwogCiAgICAgLy8gV2UgY2hv
b3NlIHRoZSBmaXJzdCBzaXplIHZhcmlhbnQgdGhhdCBpcyBsYXJnZXIgdGhhbiB0aGUgZXhwZWN0
ZWQgZGlzcGxheU9wZXJhdG9yTWluSGVpZ2h0IGFuZCBvdGhlcndpc2UgZmFsbGJhY2sgdG8gdGhl
IGxhcmdlc3QgdmFyaWFudC4KICAgICBmb3IgKGF1dG8mIHZhcmlhbnQgOiBzaXplVmFyaWFudHMp
IHsKICAgICAgICAgR2x5cGhEYXRhIHNpemVWYXJpYW50OwogICAgICAgICBzaXplVmFyaWFudC5n
bHlwaCA9IHZhcmlhbnQ7Ci0gICAgICAgIHNpemVWYXJpYW50LmZvbnREYXRhID0gJnByaW1hcnlG
b250RGF0YTsKKyAgICAgICAgc2l6ZVZhcmlhbnQuZm9udCA9ICZwcmltYXJ5Rm9udDsKICAgICAg
ICAgZGF0YS5zZXRTaXplVmFyaWFudE1vZGUoc2l6ZVZhcmlhbnQpOwogICAgICAgICBpZiAoYm91
bmRzRm9yR2x5cGgoc2l6ZVZhcmlhbnQpLmhlaWdodCgpID49IGRpc3BsYXlPcGVyYXRvck1pbkhl
aWdodCkKICAgICAgICAgICAgIHJldHVybiBkYXRhOwpAQCAtMTU3MCwxOCArMTU3MCwxOCBAQCBS
ZW5kZXJNYXRoTUxPcGVyYXRvcjo6U3RyZXRjaHlEYXRhIFJlbmRlCiAgICAgU3RyZXRjaHlEYXRh
IGRhdGE7CiAgICAgU3RyZXRjaHlEYXRhIGFzc2VtYmx5RGF0YTsKIAotICAgIGNvbnN0IGF1dG8m
IHByaW1hcnlGb250RGF0YSA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEo
KTsKKyAgICBjb25zdCBhdXRvJiBwcmltYXJ5Rm9udCA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5w
cmltYXJ5Rm9udCgpOwogICAgIEdseXBoRGF0YSBiYXNlR2x5cGggPSBzdHlsZSgpLmZvbnRDYXNj
YWRlKCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3RlciwgIXN0eWxlKCkuaXNMZWZ0VG9S
aWdodERpcmVjdGlvbigpKTsKICAgICAKLSAgICBpZiAocHJpbWFyeUZvbnREYXRhLm1hdGhEYXRh
KCkgJiYgYmFzZUdseXBoLmZvbnREYXRhID09ICZwcmltYXJ5Rm9udERhdGEpIHsKKyAgICBpZiAo
cHJpbWFyeUZvbnQubWF0aERhdGEoKSAmJiBiYXNlR2x5cGguZm9udCA9PSAmcHJpbWFyeUZvbnQp
IHsKICAgICAgICAgVmVjdG9yPEdseXBoPiBzaXplVmFyaWFudHM7CiAgICAgICAgIFZlY3RvcjxP
cGVuVHlwZU1hdGhEYXRhOjpBc3NlbWJseVBhcnQ+IGFzc2VtYmx5UGFydHM7Ci0gICAgICAgIHBy
aW1hcnlGb250RGF0YS5tYXRoRGF0YSgpLT5nZXRNYXRoVmFyaWFudHMoYmFzZUdseXBoLmdseXBo
LCBtX2lzVmVydGljYWwsIHNpemVWYXJpYW50cywgYXNzZW1ibHlQYXJ0cyk7CisgICAgICAgIHBy
aW1hcnlGb250Lm1hdGhEYXRhKCktPmdldE1hdGhWYXJpYW50cyhiYXNlR2x5cGguZ2x5cGgsIG1f
aXNWZXJ0aWNhbCwgc2l6ZVZhcmlhbnRzLCBhc3NlbWJseVBhcnRzKTsKICAgICAgICAgLy8gV2Ug
dmVyaWZ5IHRoZSBzaXplIHZhcmlhbnRzLgogICAgICAgICBmb3IgKGF1dG8mIHZhcmlhbnQgOiBz
aXplVmFyaWFudHMpIHsKICAgICAgICAgICAgIEdseXBoRGF0YSBzaXplVmFyaWFudDsKICAgICAg
ICAgICAgIHNpemVWYXJpYW50LmdseXBoID0gdmFyaWFudDsKLSAgICAgICAgICAgIHNpemVWYXJp
YW50LmZvbnREYXRhID0gJnByaW1hcnlGb250RGF0YTsKKyAgICAgICAgICAgIHNpemVWYXJpYW50
LmZvbnQgPSAmcHJpbWFyeUZvbnQ7CiAgICAgICAgICAgICBpZiAobWF4aW11bUdseXBoV2lkdGgp
CiAgICAgICAgICAgICAgICAgKm1heGltdW1HbHlwaFdpZHRoID0gc3RkOjptYXgoKm1heGltdW1H
bHlwaFdpZHRoLCBhZHZhbmNlRm9yR2x5cGgoc2l6ZVZhcmlhbnQpKTsKICAgICAgICAgICAgIGVs
c2UgewpAQCAtMTgwMSw4ICsxODAxLDggQEAgTGF5b3V0UmVjdCBSZW5kZXJNYXRoTUxPcGVyYXRv
cjo6cGFpbnRHbAogICAgIGluZm8uY29udGV4dC0+Y2xpcChjbGlwQm91bmRzKTsKIAogICAgIEds
eXBoQnVmZmVyIGJ1ZmZlcjsKLSAgICBidWZmZXIuYWRkKGRhdGEuZ2x5cGgsIGRhdGEuZm9udERh
dGEsIGFkdmFuY2VGb3JHbHlwaChkYXRhKSk7Ci0gICAgaW5mby5jb250ZXh0LT5kcmF3R2x5cGhz
KHN0eWxlKCkuZm9udENhc2NhZGUoKSwgKmRhdGEuZm9udERhdGEsIGJ1ZmZlciwgMCwgMSwgb3Jp
Z2luKTsKKyAgICBidWZmZXIuYWRkKGRhdGEuZ2x5cGgsIGRhdGEuZm9udCwgYWR2YW5jZUZvckds
eXBoKGRhdGEpKTsKKyAgICBpbmZvLmNvbnRleHQtPmRyYXdHbHlwaHMoc3R5bGUoKS5mb250Q2Fz
Y2FkZSgpLCAqZGF0YS5mb250LCBidWZmZXIsIDAsIDEsIG9yaWdpbik7CiAKICAgICByZXR1cm4g
Z2x5cGhQYWludFJlY3Q7CiB9CkBAIC0xODk0LDExICsxODk0LDExIEBAIHZvaWQgUmVuZGVyTWF0
aE1MT3BlcmF0b3I6OnBhaW50KFBhaW50SW4KICAgICBpZiAobV9zdHJldGNoeURhdGEubW9kZSgp
ID09IERyYXdTaXplVmFyaWFudCkgewogICAgICAgICBBU1NFUlQobV9zdHJldGNoeURhdGEudmFy
aWFudCgpLmdseXBoKTsKICAgICAgICAgR2x5cGhCdWZmZXIgYnVmZmVyOwotICAgICAgICBidWZm
ZXIuYWRkKG1fc3RyZXRjaHlEYXRhLnZhcmlhbnQoKS5nbHlwaCwgbV9zdHJldGNoeURhdGEudmFy
aWFudCgpLmZvbnREYXRhLCBhZHZhbmNlRm9yR2x5cGgobV9zdHJldGNoeURhdGEudmFyaWFudCgp
KSk7CisgICAgICAgIGJ1ZmZlci5hZGQobV9zdHJldGNoeURhdGEudmFyaWFudCgpLmdseXBoLCBt
X3N0cmV0Y2h5RGF0YS52YXJpYW50KCkuZm9udCwgYWR2YW5jZUZvckdseXBoKG1fc3RyZXRjaHlE
YXRhLnZhcmlhbnQoKSkpOwogICAgICAgICBMYXlvdXRQb2ludCBvcGVyYXRvclRvcExlZnQgPSBj
ZWlsZWRJbnRQb2ludChwYWludE9mZnNldCArIGxvY2F0aW9uKCkpOwogICAgICAgICBGbG9hdFJl
Y3QgZ2x5cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlwaChtX3N0cmV0Y2h5RGF0YS52YXJpYW50KCkp
OwogICAgICAgICBMYXlvdXRQb2ludCBvcGVyYXRvck9yaWdpbihvcGVyYXRvclRvcExlZnQueCgp
LCBvcGVyYXRvclRvcExlZnQueSgpIC0gZ2x5cGhCb3VuZHMueSgpKTsKLSAgICAgICAgaW5mby5j
b250ZXh0LT5kcmF3R2x5cGhzKHN0eWxlKCkuZm9udENhc2NhZGUoKSwgKm1fc3RyZXRjaHlEYXRh
LnZhcmlhbnQoKS5mb250RGF0YSwgYnVmZmVyLCAwLCAxLCBvcGVyYXRvck9yaWdpbik7CisgICAg
ICAgIGluZm8uY29udGV4dC0+ZHJhd0dseXBocyhzdHlsZSgpLmZvbnRDYXNjYWRlKCksICptX3N0
cmV0Y2h5RGF0YS52YXJpYW50KCkuZm9udCwgYnVmZmVyLCAwLCAxLCBvcGVyYXRvck9yaWdpbik7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTE5ODAsOCArMTk4MCw4IEBAIHZvaWQgUmVu
ZGVyTWF0aE1MT3BlcmF0b3I6OnBhaW50Q2hpbGRyZW4KIAogTGF5b3V0VW5pdCBSZW5kZXJNYXRo
TUxPcGVyYXRvcjo6dHJhaWxpbmdTcGFjZUVycm9yKCkKIHsKLSAgICBjb25zdCBhdXRvJiBwcmlt
YXJ5Rm9udERhdGEgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCk7Ci0g
ICAgaWYgKCFwcmltYXJ5Rm9udERhdGEubWF0aERhdGEoKSkKKyAgICBjb25zdCBhdXRvJiBwcmlt
YXJ5Rm9udCA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpOworICAgIGlmICgh
cHJpbWFyeUZvbnQubWF0aERhdGEoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAvLyBGb3Ig
T3BlblR5cGUgTUFUSCBmb250LCB0aGUgbGF5b3V0IGlzIGJhc2VkIG9uIFJlbmRlck1hdGhPcGVy
YXRvciBmb3Igd2hpY2ggdGhlIHByZWZlcnJlZCB3aWR0aCBpcyBzb21ldGltZXMgb3ZlcmVzdGlt
YXRlZCAoYnVnIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzAzMjYp
LgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVy
YXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVu
ZGVyTWF0aE1MT3BlcmF0b3IuaAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yOCwxMSArMjgsMTEgQEAKIAogI2lmIEVOQUJMRShNQVRITUwpCiAKKyNpbmNsdWRlICJGb250
LmgiCiAjaW5jbHVkZSAiR2x5cGhQYWdlLmgiCiAjaW5jbHVkZSAiTWF0aE1MRWxlbWVudC5oIgog
I2luY2x1ZGUgIk9wZW5UeXBlTWF0aERhdGEuaCIKICNpbmNsdWRlICJSZW5kZXJNYXRoTUxUb2tl
bi5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSYWRp
Y2FsT3BlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9t
YXRobWwvUmVuZGVyTWF0aE1MUmFkaWNhbE9wZXJhdG9yLmNwcAkocmV2aXNpb24gMTc4ODU3KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSYWRpY2FsT3Bl
cmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIFJlbmRlck1hdGhNTFJh
ZGljYWxPcGVyYXRvcjo6UmVuZGVyTWF0aE0KIAogdm9pZCBSZW5kZXJNYXRoTUxSYWRpY2FsT3Bl
cmF0b3I6OnN0cmV0Y2hUbyhMYXlvdXRVbml0IGhlaWdodEFib3ZlQmFzZWxpbmUsIExheW91dFVu
aXQgZGVwdGhCZWxvd0Jhc2VsaW5lKQogewotICAgIGlmICghc3R5bGUoKS5mb250Q2FzY2FkZSgp
LnByaW1hcnlGb250RGF0YSgpLm1hdGhEYXRhKCkpIHsKKyAgICBpZiAoIXN0eWxlKCkuZm9udENh
c2NhZGUoKS5wcmltYXJ5Rm9udCgpLm1hdGhEYXRhKCkpIHsKICAgICAgICAgLy8gSWYgd2UgZG8g
bm90IGhhdmUgYW4gT3BlblR5cGUgTUFUSCBmb250LCB3ZSBhbHdheXMgbWFrZSB0aGUgcmFkaWNh
bCBkZXB0aCBhIGJpdCBsYXJnZXIgdGhhbiB0aGUgdGFyZ2V0LgogICAgICAgICBkZXB0aEJlbG93
QmFzZWxpbmUgKz0gZ1JhZGljYWxCb3R0b21Qb2ludExvd2VyOwogICAgIH0KQEAgLTgzLDcgKzgz
LDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxSYWRpY2FsT3BlcmF0b3I6OmNvbXB1dAogewogICAgIEFT
U0VSVChwcmVmZXJyZWRMb2dpY2FsV2lkdGhzRGlydHkoKSk7CiAKLSAgICBpZiAoc3R5bGUoKS5m
b250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLm1hdGhEYXRhKCkpIHsKKyAgICBpZiAoc3R5
bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCkubWF0aERhdGEoKSkgewogICAgICAgICBS
ZW5kZXJNYXRoTUxPcGVyYXRvcjo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTk2LDcgKzk2LDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxS
YWRpY2FsT3BlcmF0b3I6OmNvbXB1dAogCiB2b2lkIFJlbmRlck1hdGhNTFJhZGljYWxPcGVyYXRv
cjo6Y29tcHV0ZUxvZ2ljYWxIZWlnaHQoTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBMYXlvdXRV
bml0IGxvZ2ljYWxUb3AsIExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyYgY29tcHV0ZWRWYWx1
ZXMpIGNvbnN0CiB7Ci0gICAgaWYgKHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERh
dGEoKS5tYXRoRGF0YSgpKSB7CisgICAgaWYgKHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5
Rm9udCgpLm1hdGhEYXRhKCkpIHsKICAgICAgICAgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmNvbXB1
dGVMb2dpY2FsSGVpZ2h0KGxvZ2ljYWxIZWlnaHQsIGxvZ2ljYWxUb3AsIGNvbXB1dGVkVmFsdWVz
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTExMSw3ICsxMTEsNyBAQCB2b2lkIFJlbmRl
ck1hdGhNTFJhZGljYWxPcGVyYXRvcjo6cGFpbnQoCiAgICAgaWYgKGluZm8uY29udGV4dC0+cGFp
bnRpbmdEaXNhYmxlZCgpIHx8IGluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZUZvcmVncm91bmQgfHwg
c3R5bGUoKS52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
aWYgKHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5tYXRoRGF0YSgpKSB7
CisgICAgaWYgKHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpLm1hdGhEYXRhKCkp
IHsKICAgICAgICAgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBhaW50KGluZm8sIHBhaW50T2Zmc2V0
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9tYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcAkocmV2aXNpb24gMTc4ODU3
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjA4LDE3ICsyMDgsMTcgQEAgdm9pZCBSZW5kZXJNYXRoTUxS
b290Ojp1cGRhdGVTdHlsZSgpCiAgICAgTGF5b3V0VW5pdCBrZXJuQWZ0ZXJEZWdyZWUgPSAtMTAg
KiBzdHlsZSgpLmZvbnRDYXNjYWRlKCkuc2l6ZSgpIC8gMTg7CiAgICAgbV9kZWdyZWVCb3R0b21S
YWlzZVBlcmNlbnQgPSAwLjZmOwogCi0gICAgY29uc3QgYXV0byYgcHJpbWFyeUZvbnREYXRhID0g
c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpOwotICAgIGlmIChhdXRvKiBt
YXRoRGF0YSA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5tYXRoRGF0
YSgpKSB7CisgICAgY29uc3QgYXV0byYgcHJpbWFyeUZvbnQgPSBzdHlsZSgpLmZvbnRDYXNjYWRl
KCkucHJpbWFyeUZvbnQoKTsKKyAgICBpZiAoYXV0byogbWF0aERhdGEgPSBzdHlsZSgpLmZvbnRD
YXNjYWRlKCkucHJpbWFyeUZvbnQoKS5tYXRoRGF0YSgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBt
X3ZlcnRpY2FsR2FwIHNob3VsZCB1c2UgUmFkaWNhbERpc3BsYXlTdHlsZVZlcnRpY2FsIGluIGRp
c3BsYXkgbW9kZSAoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExODcz
NykuCi0gICAgICAgIG1fdmVydGljYWxHYXAgPSBtYXRoRGF0YS0+Z2V0TWF0aENvbnN0YW50KHBy
aW1hcnlGb250RGF0YSwgT3BlblR5cGVNYXRoRGF0YTo6UmFkaWNhbFZlcnRpY2FsR2FwKTsKLSAg
ICAgICAgbV9ydWxlVGhpY2tuZXNzID0gbWF0aERhdGEtPmdldE1hdGhDb25zdGFudChwcmltYXJ5
Rm9udERhdGEsIE9wZW5UeXBlTWF0aERhdGE6OlJhZGljYWxSdWxlVGhpY2tuZXNzKTsKLSAgICAg
ICAgbV9leHRyYUFzY2VuZGVyID0gbWF0aERhdGEtPmdldE1hdGhDb25zdGFudChwcmltYXJ5Rm9u
dERhdGEsIE9wZW5UeXBlTWF0aERhdGE6OlJhZGljYWxFeHRyYUFzY2VuZGVyKTsKKyAgICAgICAg
bV92ZXJ0aWNhbEdhcCA9IG1hdGhEYXRhLT5nZXRNYXRoQ29uc3RhbnQocHJpbWFyeUZvbnQsIE9w
ZW5UeXBlTWF0aERhdGE6OlJhZGljYWxWZXJ0aWNhbEdhcCk7CisgICAgICAgIG1fcnVsZVRoaWNr
bmVzcyA9IG1hdGhEYXRhLT5nZXRNYXRoQ29uc3RhbnQocHJpbWFyeUZvbnQsIE9wZW5UeXBlTWF0
aERhdGE6OlJhZGljYWxSdWxlVGhpY2tuZXNzKTsKKyAgICAgICAgbV9leHRyYUFzY2VuZGVyID0g
bWF0aERhdGEtPmdldE1hdGhDb25zdGFudChwcmltYXJ5Rm9udCwgT3BlblR5cGVNYXRoRGF0YTo6
UmFkaWNhbEV4dHJhQXNjZW5kZXIpOwogCiAgICAgICAgIGlmICghaXNSZW5kZXJNYXRoTUxTcXVh
cmVSb290KCkpIHsKLSAgICAgICAgICAgIGtlcm5CZWZvcmVEZWdyZWUgPSBtYXRoRGF0YS0+Z2V0
TWF0aENvbnN0YW50KHByaW1hcnlGb250RGF0YSwgT3BlblR5cGVNYXRoRGF0YTo6UmFkaWNhbEtl
cm5CZWZvcmVEZWdyZWUpOwotICAgICAgICAgICAga2VybkFmdGVyRGVncmVlID0gbWF0aERhdGEt
PmdldE1hdGhDb25zdGFudChwcmltYXJ5Rm9udERhdGEsIE9wZW5UeXBlTWF0aERhdGE6OlJhZGlj
YWxLZXJuQWZ0ZXJEZWdyZWUpOwotICAgICAgICAgICAgbV9kZWdyZWVCb3R0b21SYWlzZVBlcmNl
bnQgPSBtYXRoRGF0YS0+Z2V0TWF0aENvbnN0YW50KHByaW1hcnlGb250RGF0YSwgT3BlblR5cGVN
YXRoRGF0YTo6UmFkaWNhbERlZ3JlZUJvdHRvbVJhaXNlUGVyY2VudCk7CisgICAgICAgICAgICBr
ZXJuQmVmb3JlRGVncmVlID0gbWF0aERhdGEtPmdldE1hdGhDb25zdGFudChwcmltYXJ5Rm9udCwg
T3BlblR5cGVNYXRoRGF0YTo6UmFkaWNhbEtlcm5CZWZvcmVEZWdyZWUpOworICAgICAgICAgICAg
a2VybkFmdGVyRGVncmVlID0gbWF0aERhdGEtPmdldE1hdGhDb25zdGFudChwcmltYXJ5Rm9udCwg
T3BlblR5cGVNYXRoRGF0YTo6UmFkaWNhbEtlcm5BZnRlckRlZ3JlZSk7CisgICAgICAgICAgICBt
X2RlZ3JlZUJvdHRvbVJhaXNlUGVyY2VudCA9IG1hdGhEYXRhLT5nZXRNYXRoQ29uc3RhbnQocHJp
bWFyeUZvbnQsIE9wZW5UeXBlTWF0aERhdGE6OlJhZGljYWxEZWdyZWVCb3R0b21SYWlzZVBlcmNl
bnQpOwogICAgICAgICB9CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3R5bGUvUmVuZGVyU3R5bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTExODQsNyArMTE4NCw3IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgUmVuZGVyU3R5bGU6Omh5cGhl
blMKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgZGVwZW5kIG9uIGxvY2FsZS4KICAgICBERVBS
RUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBoeXBoZW5NaW51c1N0cmlu
ZywgKCZoeXBoZW5NaW51cywgMSkpOwogICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NB
TChBdG9taWNTdHJpbmcsIGh5cGhlblN0cmluZywgKCZoeXBoZW4sIDEpKTsKLSAgICByZXR1cm4g
Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5nbHlwaEZvckNoYXJhY3RlcihoeXBoZW4p
ID8gaHlwaGVuU3RyaW5nIDogaHlwaGVuTWludXNTdHJpbmc7CisgICAgcmV0dXJuIGZvbnRDYXNj
YWRlKCkucHJpbWFyeUZvbnQoKS5nbHlwaEZvckNoYXJhY3RlcihoeXBoZW4pID8gaHlwaGVuU3Ry
aW5nIDogaHlwaGVuTWludXNTdHJpbmc7CiB9CiAKIGNvbnN0IEF0b21pY1N0cmluZyYgUmVuZGVy
U3R5bGU6OnRleHRFbXBoYXNpc01hcmtTdHJpbmcoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwCShyZXZpc2lvbiAxNzg4NTcp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHVGV4dC5oIgog
CiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXF1ZXN0LmgiCiAjaW5jbHVkZSAi
SGl0VGVzdFJlc3VsdC5oIgpAQCAtNDUsNyArNDYsNiBAQAogI2luY2x1ZGUgIlNWR1RleHRSdW5S
ZW5kZXJpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtTGlzdC5oIgogI2luY2x1
ZGUgIlNWR1VSSVJlZmVyZW5jZS5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5j
bHVkZSAiVHJhbnNmb3JtU3RhdGUuaCIKICNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24uaCIKICNp
bmNsdWRlIDx3dGYvU3RhY2tTdGF0cy5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MTksNyArNDE5LDcgQEAgVGV4dFJ1biBTVkdJbmxpbmVUZXh0Qm94Ojpjb25z
dHJ1Y3RUZXh0UgogICAgICAgICAgICAgICAgICwgZGlyZWN0aW9uKCkKICAgICAgICAgICAgICAg
ICAsIGRpck92ZXJyaWRlKCkgfHwgc3R5bGUtPnJ0bE9yZGVyaW5nKCkgPT0gVmlzdWFsT3JkZXIg
LyogZGlyZWN0aW9uYWxPdmVycmlkZSAqLyk7CiAKLSAgICBpZiAoc3R5bGUtPmZvbnRDYXNjYWRl
KCkucHJpbWFyeUZvbnREYXRhKCkuaXNTVkdGb250KCkpCisgICAgaWYgKHN0eWxlLT5mb250Q2Fz
Y2FkZSgpLnByaW1hcnlGb250KCkuaXNTVkdGb250KCkpCiAgICAgICAgIHJ1bi5zZXRSZW5kZXJp
bmdDb250ZXh0KFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUocmVuZGVyZXIoKSkp
OwogCiAgICAgcnVuLmRpc2FibGVSb3VuZGluZ0hhY2tzKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVTcGFj
aW5nLmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDE2
ICs0MSwxNiBAQCBTVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZzo6U1ZHVGV4dExheW91CiBmbG9h
dCBTVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZzo6Y2FsY3VsYXRlU1ZHS2VybmluZyhib29sIGlz
VmVydGljYWxUZXh0LCBjb25zdCBTVkdUZXh0TWV0cmljczo6R2x5cGgmIGN1cnJlbnRHbHlwaCkK
IHsKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhJiBmb250
RGF0YSA9IG1fZm9udC5wcmltYXJ5Rm9udERhdGEoKTsKLSAgICBpZiAoIWZvbnREYXRhLmlzU1ZH
Rm9udCgpKSB7CisgICAgY29uc3QgRm9udCYgZm9udCA9IG1fZm9udC5wcmltYXJ5Rm9udCgpOwor
ICAgIGlmICghZm9udC5pc1NWR0ZvbnQoKSkgewogICAgICAgICBtX2xhc3RHbHlwaC5pc1ZhbGlk
ID0gZmFsc2U7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIEFTU0VSVChmb250RGF0
YS5pc0N1c3RvbUZvbnQoKSk7Ci0gICAgQVNTRVJUKGZvbnREYXRhLmlzU1ZHRm9udCgpKTsKKyAg
ICBBU1NFUlQoZm9udC5pc0N1c3RvbUZvbnQoKSk7CisgICAgQVNTRVJUKGZvbnQuaXNTVkdGb250
KCkpOwogCi0gICAgYXV0byogc3ZnRm9udERhdGEgPSBzdGF0aWNfY2FzdDxjb25zdCBTVkdGb250
RGF0YSo+KGZvbnREYXRhLnN2Z0RhdGEoKSk7CisgICAgYXV0byogc3ZnRm9udERhdGEgPSBzdGF0
aWNfY2FzdDxjb25zdCBTVkdGb250RGF0YSo+KGZvbnQuc3ZnRGF0YSgpKTsKICAgICBTVkdGb250
RmFjZUVsZW1lbnQqIHN2Z0ZvbnRGYWNlID0gc3ZnRm9udERhdGEtPnN2Z0ZvbnRGYWNlRWxlbWVu
dCgpOwogICAgIEFTU0VSVChzdmdGb250RmFjZSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3MuY3BwCShyZXZpc2lvbiAxNzg4NTcpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzAsNyArNzAsNyBAQCBUZXh0UnVuIFNWR1RleHRNZXRyaWNzOjpjb25zdHJ1
Y3RUZXh0UnVuCiAgICAgICAgICAgICAgICAgLCBzdHlsZS5kaXJlY3Rpb24oKQogICAgICAgICAg
ICAgICAgICwgaXNPdmVycmlkZShzdHlsZS51bmljb2RlQmlkaSgpKSAvKiBkaXJlY3Rpb25hbE92
ZXJyaWRlICovKTsKIAotICAgIGlmIChzdHlsZS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0
YSgpLmlzU1ZHRm9udCgpKQorICAgIGlmIChzdHlsZS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250
KCkuaXNTVkdGb250KCkpCiAgICAgICAgIHJ1bi5zZXRSZW5kZXJpbmdDb250ZXh0KFNWR1RleHRS
dW5SZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUodGV4dCkpOwogCiAgICAgcnVuLmRpc2FibGVSb3Vu
ZGluZ0hhY2tzKCk7CkBAIC05MSw3ICs5MSw3IEBAIFNWR1RleHRNZXRyaWNzIFNWR1RleHRNZXRy
aWNzOjptZWFzdXJlQ2gKIAogU1ZHVGV4dE1ldHJpY3M6OlNWR1RleHRNZXRyaWNzKFJlbmRlclNW
R0lubGluZVRleHQmIHRleHQsIHVuc2lnbmVkIHBvc2l0aW9uLCB1bnNpZ25lZCBsZW5ndGgsIGZs
b2F0IHdpZHRoLCBjb25zdCBTdHJpbmcmIGdseXBoTmFtZSkKIHsKLSAgICBib29sIG5lZWRzQ29u
dGV4dCA9IHRleHQuc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmlzU1ZH
Rm9udCgpOworICAgIGJvb2wgbmVlZHNDb250ZXh0ID0gdGV4dC5zdHlsZSgpLmZvbnRDYXNjYWRl
KCkucHJpbWFyeUZvbnQoKS5pc1NWR0ZvbnQoKTsKICAgICBmbG9hdCBzY2FsaW5nRmFjdG9yID0g
dGV4dC5zY2FsaW5nRmFjdG9yKCk7CiAgICAgQVNTRVJUKHNjYWxpbmdGYWN0b3IpOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRS
dW5SZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM3LDE4ICszNywxOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRp
YyBpbmxpbmUgY29uc3QgU1ZHRm9udERhdGEqIHN2Z0ZvbnRBbmRGb250RmFjZUVsZW1lbnRGb3JG
b250RGF0YShjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsIFNWR0ZvbnRGYWNlRWxlbWVu
dComIGZvbnRGYWNlLCBTVkdGb250RWxlbWVudComIGZvbnQpCitzdGF0aWMgaW5saW5lIGNvbnN0
IFNWR0ZvbnREYXRhKiBzdmdGb250QW5kRm9udEZhY2VFbGVtZW50Rm9yRm9udERhdGEoY29uc3Qg
Rm9udCogZm9udCwgU1ZHRm9udEZhY2VFbGVtZW50KiYgc3ZnRm9udEZhY2VFbGVtZW50LCBTVkdG
b250RWxlbWVudComIHN2Z0ZvbnRFbGVtZW50KQogewotICAgIEFTU0VSVChmb250RGF0YSk7Ci0g
ICAgQVNTRVJUKGZvbnREYXRhLT5pc0N1c3RvbUZvbnQoKSk7Ci0gICAgQVNTRVJUKGZvbnREYXRh
LT5pc1NWR0ZvbnQoKSk7CisgICAgQVNTRVJUKGZvbnQpOworICAgIEFTU0VSVChmb250LT5pc0N1
c3RvbUZvbnQoKSk7CisgICAgQVNTRVJUKGZvbnQtPmlzU1ZHRm9udCgpKTsKIAotICAgIGF1dG8q
IHN2Z0ZvbnREYXRhID0gc3RhdGljX2Nhc3Q8Y29uc3QgU1ZHRm9udERhdGEqPihmb250RGF0YS0+
c3ZnRGF0YSgpKTsKKyAgICBhdXRvKiBzdmdGb250RGF0YSA9IHN0YXRpY19jYXN0PGNvbnN0IFNW
R0ZvbnREYXRhKj4oZm9udC0+c3ZnRGF0YSgpKTsKIAotICAgIGZvbnRGYWNlID0gc3ZnRm9udERh
dGEtPnN2Z0ZvbnRGYWNlRWxlbWVudCgpOwotICAgIEFTU0VSVChmb250RmFjZSk7CisgICAgc3Zn
Rm9udEZhY2VFbGVtZW50ID0gc3ZnRm9udERhdGEtPnN2Z0ZvbnRGYWNlRWxlbWVudCgpOworICAg
IEFTU0VSVChzdmdGb250RmFjZUVsZW1lbnQpOwogCi0gICAgZm9udCA9IGZvbnRGYWNlLT5hc3Nv
Y2lhdGVkRm9udEVsZW1lbnQoKTsKKyAgICBzdmdGb250RWxlbWVudCA9IHN2Z0ZvbnRGYWNlRWxl
bWVudC0+YXNzb2NpYXRlZEZvbnRFbGVtZW50KCk7CiAgICAgcmV0dXJuIHN2Z0ZvbnREYXRhOwog
fQogCkBAIC02MSwyMSArNjEsMjEgQEAgZmxvYXQgU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6
OmZsb2F0VwogICAgIHJldHVybiBpdC5ydW5XaWR0aFNvRmFyKCk7CiB9CiAKLWJvb2wgU1ZHVGV4
dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmFwcGx5U1ZHS2VybmluZyhjb25zdCBTaW1wbGVGb250RGF0
YSogZm9udERhdGEsIFdpZHRoSXRlcmF0b3ImIGl0ZXJhdG9yLCBHbHlwaEJ1ZmZlciogZ2x5cGhC
dWZmZXIsIGludCBmcm9tKSBjb25zdAorYm9vbCBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6
YXBwbHlTVkdLZXJuaW5nKGNvbnN0IEZvbnQqIGZvbnQsIFdpZHRoSXRlcmF0b3ImIGl0ZXJhdG9y
LCBHbHlwaEJ1ZmZlciogZ2x5cGhCdWZmZXIsIGludCBmcm9tKSBjb25zdAogewogICAgIEFTU0VS
VChnbHlwaEJ1ZmZlcik7CiAgICAgQVNTRVJUKGdseXBoQnVmZmVyLT5zaXplKCkgPiAxKTsKICAg
ICBTVkdGb250RWxlbWVudCogZm9udEVsZW1lbnQgPSAwOwogICAgIFNWR0ZvbnRGYWNlRWxlbWVu
dCogZm9udEZhY2VFbGVtZW50ID0gMDsKIAotICAgIHN2Z0ZvbnRBbmRGb250RmFjZUVsZW1lbnRG
b3JGb250RGF0YShmb250RGF0YSwgZm9udEZhY2VFbGVtZW50LCBmb250RWxlbWVudCk7CisgICAg
c3ZnRm9udEFuZEZvbnRGYWNlRWxlbWVudEZvckZvbnREYXRhKGZvbnQsIGZvbnRGYWNlRWxlbWVu
dCwgZm9udEVsZW1lbnQpOwogICAgIGlmICghZm9udEVsZW1lbnQgfHwgIWZvbnRGYWNlRWxlbWVu
dCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKGZvbnRFbGVtZW50LT5ob3Jpem9u
dGFsS2VybmluZ01hcElzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBmbG9h
dCBzY2FsZSA9IHNjYWxlRW1Ub1VuaXRzKGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5zaXplKCks
IGZvbnRGYWNlRWxlbWVudC0+dW5pdHNQZXJFbSgpKTsKKyAgICBmbG9hdCBzY2FsZSA9IHNjYWxl
RW1Ub1VuaXRzKGZvbnQtPnBsYXRmb3JtRGF0YSgpLnNpemUoKSwgZm9udEZhY2VFbGVtZW50LT51
bml0c1BlckVtKCkpOwogCiAgICAgU3RyaW5nIGxhc3RHbHlwaE5hbWU7CiAgICAgU3RyaW5nIGxh
c3RVbmljb2RlU3RyaW5nOwpAQCAtMjA1LDcgKzIwNSw3IEBAIHZvaWQgU1ZHR2x5cGhUb1BhdGhU
cmFuc2xhdG9yOjphZHZhbmNlKCkKICAgICAgICAgfQogCiAgICAgICAgICsrbV9pbmRleDsKLSAg
ICAgICAgaWYgKG1faW5kZXggPj0gbV9zdG9wcGluZ1BvaW50IHx8ICFtX2dseXBoQnVmZmVyLmZv
bnREYXRhQXQobV9pbmRleCktPmlzU1ZHRm9udCgpKQorICAgICAgICBpZiAobV9pbmRleCA+PSBt
X3N0b3BwaW5nUG9pbnQgfHwgIW1fZ2x5cGhCdWZmZXIuZm9udEF0KG1faW5kZXgpLT5pc1NWR0Zv
bnQoKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBtX2dseXBoID0gbV9nbHlwaEJ1ZmZl
ci5nbHlwaEF0KG1faW5kZXgpOwogICAgICAgICBpZiAoIW1fZ2x5cGgpCkBAIC0yNDQsMTIgKzI0
NCwxMiBAQCBjbGFzcyBEdW1teUdseXBoVG9QYXRoVHJhbnNsYXRvciBmaW5hbCA6CiAgICAgfQog
fTsKIAotc3RkOjp1bmlxdWVfcHRyPEdseXBoVG9QYXRoVHJhbnNsYXRvcj4gU1ZHVGV4dFJ1blJl
bmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUdseXBoVG9QYXRoVHJhbnNsYXRvcihjb25zdCBTaW1wbGVG
b250RGF0YSYgZm9udERhdGEsIGNvbnN0IFRleHRSdW4qIHRleHRSdW4sIGNvbnN0IEdseXBoQnVm
ZmVyJiBnbHlwaEJ1ZmZlciwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50KSBjb25zdAorc3RkOjp1bmlxdWVfcHRyPEdseXBoVG9QYXRoVHJhbnNsYXRvcj4g
U1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUdseXBoVG9QYXRoVHJhbnNsYXRvcihj
b25zdCBGb250JiBmb250LCBjb25zdCBUZXh0UnVuKiB0ZXh0UnVuLCBjb25zdCBHbHlwaEJ1ZmZl
ciYgZ2x5cGhCdWZmZXIsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50
JiBwb2ludCkgY29uc3QKIHsKICAgICBTVkdGb250RWxlbWVudCogZm9udEVsZW1lbnQgPSBudWxs
cHRyOwogICAgIFNWR0ZvbnRGYWNlRWxlbWVudCogZm9udEZhY2VFbGVtZW50ID0gbnVsbHB0cjsK
IAotICAgIGNvbnN0IFNWR0ZvbnREYXRhKiBzdmdGb250RGF0YSA9IHN2Z0ZvbnRBbmRGb250RmFj
ZUVsZW1lbnRGb3JGb250RGF0YSgmZm9udERhdGEsIGZvbnRGYWNlRWxlbWVudCwgZm9udEVsZW1l
bnQpOworICAgIGNvbnN0IFNWR0ZvbnREYXRhKiBzdmdGb250RGF0YSA9IHN2Z0ZvbnRBbmRGb250
RmFjZUVsZW1lbnRGb3JGb250RGF0YSgmZm9udCwgZm9udEZhY2VFbGVtZW50LCBmb250RWxlbWVu
dCk7CiAgICAgaWYgKCFmb250RWxlbWVudCB8fCAhZm9udEZhY2VFbGVtZW50KQogICAgICAgICBy
ZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxEdW1teUdseXBoVG9QYXRoVHJhbnNsYXRvcj4oKTsKIApA
QCAtMjU3LDEyICsyNTcsMTIgQEAgc3RkOjp1bmlxdWVfcHRyPEdseXBoVG9QYXRoVHJhbnNsYXRv
cj4gUwogICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9IGVsZW1lbnRSZW5kZXJlci5zdHlsZSgpOwog
ICAgIGJvb2wgaXNWZXJ0aWNhbFRleHQgPSBzdHlsZS5zdmdTdHlsZSgpLmlzVmVydGljYWxXcml0
aW5nTW9kZSgpOwogCi0gICAgZmxvYXQgc2NhbGUgPSBzY2FsZUVtVG9Vbml0cyhmb250RGF0YS5w
bGF0Zm9ybURhdGEoKS5zaXplKCksIGZvbnRGYWNlRWxlbWVudC0+dW5pdHNQZXJFbSgpKTsKKyAg
ICBmbG9hdCBzY2FsZSA9IHNjYWxlRW1Ub1VuaXRzKGZvbnQucGxhdGZvcm1EYXRhKCkuc2l6ZSgp
LCBmb250RmFjZUVsZW1lbnQtPnVuaXRzUGVyRW0oKSk7CiAKICAgICByZXR1cm4gc3RkOjptYWtl
X3VuaXF1ZTxTVkdHbHlwaFRvUGF0aFRyYW5zbGF0b3I+KHRleHRSdW4sIGdseXBoQnVmZmVyLCBw
b2ludCwgKnN2Z0ZvbnREYXRhLCAqZm9udEVsZW1lbnQsIGZyb20sIG51bUdseXBocywgc2NhbGUs
IGlzVmVydGljYWxUZXh0KTsKIH0KIAotdm9pZCBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6
ZHJhd1NWR0dseXBocyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFNpbXBsZUZvbnRE
YXRhKiBmb250RGF0YSwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBpbnQgZnJvbSwg
aW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Cit2b2lkIFNWR1Rl
eHRSdW5SZW5kZXJpbmdDb250ZXh0OjpkcmF3U1ZHR2x5cGhzKEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY29uc3QgRm9udCogZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBp
bnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0CiB7
CiAgICAgYXV0byBhY3RpdmVQYWludGluZ1Jlc291cmNlID0gdGhpcy0+YWN0aXZlUGFpbnRpbmdS
ZXNvdXJjZSgpOwogICAgIGlmICghYWN0aXZlUGFpbnRpbmdSZXNvdXJjZSkgewpAQCAtMjc4LDcg
KzI3OCw3IEBAIHZvaWQgU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmRyYXdTVkcKICAgICBB
U1NFUlQoYWN0aXZlUGFpbnRpbmdSZXNvdXJjZSk7CiAKICAgICBSZW5kZXJTVkdSZXNvdXJjZU1v
ZGUgcmVzb3VyY2VNb2RlID0gY29udGV4dC0+dGV4dERyYXdpbmdNb2RlKCkgPT0gVGV4dE1vZGVT
dHJva2UgPyBBcHBseVRvU3Ryb2tlTW9kZSA6IEFwcGx5VG9GaWxsTW9kZTsKLSAgICBmb3IgKGF1
dG8gdHJhbnNsYXRvciA9IGNyZWF0ZUdseXBoVG9QYXRoVHJhbnNsYXRvcigqZm9udERhdGEsIG51
bGxwdHIsIGdseXBoQnVmZmVyLCBmcm9tLCBudW1HbHlwaHMsIHBvaW50KTsgdHJhbnNsYXRvci0+
Y29udGFpbnNNb3JlUGF0aHMoKTsgdHJhbnNsYXRvci0+YWR2YW5jZSgpKSB7CisgICAgZm9yIChh
dXRvIHRyYW5zbGF0b3IgPSBjcmVhdGVHbHlwaFRvUGF0aFRyYW5zbGF0b3IoKmZvbnQsIG51bGxw
dHIsIGdseXBoQnVmZmVyLCBmcm9tLCBudW1HbHlwaHMsIHBvaW50KTsgdHJhbnNsYXRvci0+Y29u
dGFpbnNNb3JlUGF0aHMoKTsgdHJhbnNsYXRvci0+YWR2YW5jZSgpKSB7CiAgICAgICAgIFBhdGgg
Z2x5cGhQYXRoID0gdHJhbnNsYXRvci0+cGF0aCgpOwogICAgICAgICBpZiAoYWN0aXZlUGFpbnRp
bmdSZXNvdXJjZS0+YXBwbHlSZXNvdXJjZShlbGVtZW50UmVuZGVyZXIsIHN0eWxlLCBjb250ZXh0
LCByZXNvdXJjZU1vZGUpKSB7CiAgICAgICAgICAgICBmbG9hdCBzdHJva2VUaGlja25lc3MgPSBj
b250ZXh0LT5zdHJva2VUaGlja25lc3MoKTsKQEAgLTI5MiwxMyArMjkyLDEzIEBAIHZvaWQgU1ZH
VGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmRyYXdTVkcKIAogc3RhdGljIEdseXBoRGF0YSBtaXNz
aW5nR2x5cGhGb3JGb250KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250KQogewotICAgIGNvbnN0IFNp
bXBsZUZvbnREYXRhJiBwcmltYXJ5Rm9udERhdGEgPSBmb250LnByaW1hcnlGb250RGF0YSgpOwot
ICAgIGlmICghcHJpbWFyeUZvbnREYXRhLmlzU1ZHRm9udCgpKQorICAgIGNvbnN0IEZvbnQmIHBy
aW1hcnlGb250ID0gZm9udC5wcmltYXJ5Rm9udCgpOworICAgIGlmICghcHJpbWFyeUZvbnQuaXNT
VkdGb250KCkpCiAgICAgICAgIHJldHVybiBHbHlwaERhdGEoKTsKICAgICBTVkdGb250RWxlbWVu
dCogZm9udEVsZW1lbnQ7CiAgICAgU1ZHRm9udEZhY2VFbGVtZW50KiBmb250RmFjZUVsZW1lbnQ7
Ci0gICAgc3ZnRm9udEFuZEZvbnRGYWNlRWxlbWVudEZvckZvbnREYXRhKCZwcmltYXJ5Rm9udERh
dGEsIGZvbnRGYWNlRWxlbWVudCwgZm9udEVsZW1lbnQpOwotICAgIHJldHVybiBHbHlwaERhdGEo
Zm9udEVsZW1lbnQtPm1pc3NpbmdHbHlwaCgpLCAmcHJpbWFyeUZvbnREYXRhKTsKKyAgICBzdmdG
b250QW5kRm9udEZhY2VFbGVtZW50Rm9yRm9udERhdGEoJnByaW1hcnlGb250LCBmb250RmFjZUVs
ZW1lbnQsIGZvbnRFbGVtZW50KTsKKyAgICByZXR1cm4gR2x5cGhEYXRhKGZvbnRFbGVtZW50LT5t
aXNzaW5nR2x5cGgoKSwgJnByaW1hcnlGb250KTsKIH0KIAogR2x5cGhEYXRhIFNWR1RleHRSdW5S
ZW5kZXJpbmdDb250ZXh0OjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoY29uc3QgRm9udENhc2NhZGUm
IGZvbnQsIFdpZHRoSXRlcmF0b3ImIGl0ZXJhdG9yLCBVQ2hhcjMyIGNoYXJhY3RlciwgYm9vbCBt
aXJyb3IsIGludCBjdXJyZW50Q2hhcmFjdGVyLCB1bnNpZ25lZCYgYWR2YW5jZUxlbmd0aCwgU3Ry
aW5nJiBub3JtYWxpemVkU3BhY2VzU3RyaW5nQ2FjaGUpCkBAIC0zMDcsMjMgKzMwNywyMyBAQCBH
bHlwaERhdGEgU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmdsCiAgICAgaWYgKCFnbHlwaERh
dGEuZ2x5cGgpCiAgICAgICAgIHJldHVybiBtaXNzaW5nR2x5cGhGb3JGb250KGZvbnQpOwogCi0g
ICAgQVNTRVJUKGdseXBoRGF0YS5mb250RGF0YSk7CisgICAgQVNTRVJUKGdseXBoRGF0YS5mb250
KTsKIAogICAgIC8vIENoYXJhY3RlcnMgZW5jbG9zZWQgYnkgYW4gPGFsdEdseXBoPiBlbGVtZW50
LCBtYXkgbm90IGJlIHJlZ2lzdGVyZWQgaW4gdGhlIEdseXBoUGFnZS4KLSAgICBpZiAoIWdseXBo
RGF0YS5mb250RGF0YS0+aXNTVkdGb250KCkpIHsKKyAgICBpZiAoIWdseXBoRGF0YS5mb250LT5p
c1NWR0ZvbnQoKSkgewogICAgICAgICBhdXRvJiBlbGVtZW50UmVuZGVyZXIgPSBpczxSZW5kZXJF
bGVtZW50PihyZW5kZXJlcigpKSA/IGRvd25jYXN0PFJlbmRlckVsZW1lbnQ+KHJlbmRlcmVyKCkp
IDogKnJlbmRlcmVyKCkucGFyZW50KCk7CiAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRSZW5k
ZXJlckVsZW1lbnQgPSBlbGVtZW50UmVuZGVyZXIuZWxlbWVudCgpKSB7CiAgICAgICAgICAgICBp
ZiAoaXM8U1ZHQWx0R2x5cGhFbGVtZW50PigqcGFyZW50UmVuZGVyZXJFbGVtZW50KSkKLSAgICAg
ICAgICAgICAgICBnbHlwaERhdGEuZm9udERhdGEgPSAmZm9udC5wcmltYXJ5Rm9udERhdGEoKTsK
KyAgICAgICAgICAgICAgICBnbHlwaERhdGEuZm9udCA9ICZmb250LnByaW1hcnlGb250KCk7CiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoIWdseXBoRGF0YS5mb250RGF0YS0+aXNTVkdGb250
KCkpCisgICAgaWYgKCFnbHlwaERhdGEuZm9udC0+aXNTVkdGb250KCkpCiAgICAgICAgIHJldHVy
biBnbHlwaERhdGE7CiAKICAgICBTVkdGb250RWxlbWVudCogZm9udEVsZW1lbnQgPSBudWxscHRy
OwogICAgIFNWR0ZvbnRGYWNlRWxlbWVudCogZm9udEZhY2VFbGVtZW50ID0gbnVsbHB0cjsKLSAg
ICBjb25zdCBTVkdGb250RGF0YSogc3ZnRm9udERhdGEgPSBzdmdGb250QW5kRm9udEZhY2VFbGVt
ZW50Rm9yRm9udERhdGEoZ2x5cGhEYXRhLmZvbnREYXRhLCBmb250RmFjZUVsZW1lbnQsIGZvbnRF
bGVtZW50KTsKKyAgICBjb25zdCBTVkdGb250RGF0YSogc3ZnRm9udERhdGEgPSBzdmdGb250QW5k
Rm9udEZhY2VFbGVtZW50Rm9yRm9udERhdGEoZ2x5cGhEYXRhLmZvbnQsIGZvbnRGYWNlRWxlbWVu
dCwgZm9udEVsZW1lbnQpOwogICAgIGlmICghc3ZnRm9udERhdGEpCiAgICAgICAgIHJldHVybiBn
bHlwaERhdGE7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1
blJlbmRlcmluZ0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmgJKHJldmlzaW9uIDE3ODg1NykKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQu
aAkod29ya2luZyBjb3B5KQpAQCAtNDMsOSArNDMsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRB
Y3RpdmVQYWludGluZ1Jlc291cmNlKFJlbmRlclNWR1Jlc291cmNlKiBvYmplY3QpIHsgbV9hY3Rp
dmVQYWludGluZ1Jlc291cmNlID0gb2JqZWN0OyB9CiAKICAgICB2aXJ0dWFsIEdseXBoRGF0YSBn
bHlwaERhdGFGb3JDaGFyYWN0ZXIoY29uc3QgRm9udENhc2NhZGUmLCBXaWR0aEl0ZXJhdG9yJiwg
VUNoYXIzMiBjaGFyYWN0ZXIsIGJvb2wgbWlycm9yLCBpbnQgY3VycmVudENoYXJhY3RlciwgdW5z
aWduZWQmIGFkdmFuY2VMZW5ndGgsIFN0cmluZyYgbm9ybWFsaXplZFNwYWNlc1N0cmluZ0NhY2hl
KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1NWR0dseXBocyhHcmFwaGljc0NvbnRl
eHQqLCBjb25zdCBTaW1wbGVGb250RGF0YSosIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20s
IGludCB0bywgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwg
dm9pZCBkcmF3U1ZHR2x5cGhzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZvbnQqLCBjb25zdCBH
bHlwaEJ1ZmZlciYsIGludCBmcm9tLCBpbnQgdG8sIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdCBv
dmVycmlkZTsKICAgICB2aXJ0dWFsIGZsb2F0IGZsb2F0V2lkdGhVc2luZ1NWR0ZvbnQoY29uc3Qg
Rm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcm
IGdseXBoTmFtZSkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIGFwcGx5U1ZHS2Vy
bmluZyhjb25zdCBTaW1wbGVGb250RGF0YSosIFdpZHRoSXRlcmF0b3ImLCBHbHlwaEJ1ZmZlcios
IGludCBmcm9tKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgYXBwbHlTVkdLZXJu
aW5nKGNvbnN0IEZvbnQqLCBXaWR0aEl0ZXJhdG9yJiwgR2x5cGhCdWZmZXIqLCBpbnQgZnJvbSkg
Y29uc3Qgb3ZlcnJpZGU7CiAjZW5kaWYKIAogcHJpdmF0ZToKQEAgLTYwLDcgKzYwLDcgQEAgcHJp
dmF0ZToKICAgICB2aXJ0dWFsIH5TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dCgpIHsgfQogCiAj
aWYgRU5BQkxFKFNWR19GT05UUykKLSAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxHbHlwaFRv
UGF0aFRyYW5zbGF0b3I+IGNyZWF0ZUdseXBoVG9QYXRoVHJhbnNsYXRvcihjb25zdCBTaW1wbGVG
b250RGF0YSYsIGNvbnN0IFRleHRSdW4qLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBmcm9tLCBp
bnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCBzdGQ6OnVuaXF1ZV9wdHI8R2x5cGhUb1BhdGhUcmFuc2xhdG9yPiBjcmVhdGVHbHlwaFRv
UGF0aFRyYW5zbGF0b3IoY29uc3QgRm9udCYsIGNvbnN0IFRleHRSdW4qLCBjb25zdCBHbHlwaEJ1
ZmZlciYsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Qg
b3ZlcnJpZGU7CiAjZW5kaWYKIAogICAgIFJlbmRlck9iamVjdCYgbV9yZW5kZXJlcjsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZvbnREYXRhLmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZvbnREYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsMTUgKzU3
LDE1IEBAIFNWR0ZvbnREYXRhOjpTVkdGb250RGF0YShTVkdGb250RmFjZUVsZW0KICAgICBBU1NF
UlRfQVJHKGZvbnRGYWNlRWxlbWVudCwgZm9udEZhY2VFbGVtZW50KTsKIH0KIAotdm9pZCBTVkdG
b250RGF0YTo6aW5pdGlhbGl6ZUZvbnREYXRhKFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwgZmxv
YXQgZm9udFNpemUpCit2b2lkIFNWR0ZvbnREYXRhOjppbml0aWFsaXplRm9udChGb250KiBmb250
LCBmbG9hdCBmb250U2l6ZSkKIHsKLSAgICBBU1NFUlQoZm9udERhdGEpOworICAgIEFTU0VSVChm
b250KTsKIAogICAgIFNWR0ZvbnRGYWNlRWxlbWVudCogc3ZnRm9udEZhY2VFbGVtZW50ID0gdGhp
cy0+c3ZnRm9udEZhY2VFbGVtZW50KCk7CiAgICAgQVNTRVJUKHN2Z0ZvbnRGYWNlRWxlbWVudCk7
CiAKLSAgICBmb250RGF0YS0+c2V0WmVyb1dpZHRoU3BhY2VHbHlwaCgwKTsKLSAgICBmb250RGF0
YS0+ZGV0ZXJtaW5lUGl0Y2goKTsKKyAgICBmb250LT5zZXRaZXJvV2lkdGhTcGFjZUdseXBoKDAp
OworICAgIGZvbnQtPmRldGVybWluZVBpdGNoKCk7CiAKICAgICB1bnNpZ25lZCB1bml0c1BlckVt
ID0gc3ZnRm9udEZhY2VFbGVtZW50LT51bml0c1BlckVtKCk7CiAgICAgZmxvYXQgc2NhbGUgPSBz
Y2FsZUVtVG9Vbml0cyhmb250U2l6ZSwgdW5pdHNQZXJFbSk7CkBAIC03NCwxNSArNzQsMTUgQEAg
dm9pZCBTVkdGb250RGF0YTo6aW5pdGlhbGl6ZUZvbnREYXRhKFNpbQogICAgIGZsb2F0IGRlc2Nl
bnQgPSBzdmdGb250RmFjZUVsZW1lbnQtPmRlc2NlbnQoKSAqIHNjYWxlOwogICAgIGZsb2F0IGxp
bmVHYXAgPSAwLjFmICogZm9udFNpemU7CiAKLSAgICBjb25zdCBHbHlwaFBhZ2UqIGdseXBoUGFn
ZVplcm8gPSBmb250RGF0YS0+Z2x5cGhQYWdlKDApOworICAgIGNvbnN0IEdseXBoUGFnZSogZ2x5
cGhQYWdlWmVybyA9IGZvbnQtPmdseXBoUGFnZSgwKTsKIAogICAgIGlmICgheEhlaWdodCAmJiBn
bHlwaFBhZ2VaZXJvKSB7CiAgICAgICAgIC8vIEZhbGxiYWNrIGlmIHhfaGVpZ2h0QXR0ciBpcyBu
b3Qgc3BlY2lmaWVkIGZvciB0aGUgZm9udCBlbGVtZW50LgogICAgICAgICBHbHlwaCBsZXR0ZXJY
R2x5cGggPSBnbHlwaFBhZ2VaZXJvLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoJ3gnKS5nbHlwaDsK
LSAgICAgICAgeEhlaWdodCA9IGxldHRlclhHbHlwaCA/IGZvbnREYXRhLT53aWR0aEZvckdseXBo
KGxldHRlclhHbHlwaCkgOiAyICogYXNjZW50IC8gMzsKKyAgICAgICAgeEhlaWdodCA9IGxldHRl
clhHbHlwaCA/IGZvbnQtPndpZHRoRm9yR2x5cGgobGV0dGVyWEdseXBoKSA6IDIgKiBhc2NlbnQg
LyAzOwogICAgIH0KIAotICAgIEZvbnRNZXRyaWNzJiBmb250TWV0cmljcyA9IGZvbnREYXRhLT5m
b250TWV0cmljcygpOworICAgIEZvbnRNZXRyaWNzJiBmb250TWV0cmljcyA9IGZvbnQtPmZvbnRN
ZXRyaWNzKCk7CiAgICAgZm9udE1ldHJpY3Muc2V0VW5pdHNQZXJFbSh1bml0c1BlckVtKTsKICAg
ICBmb250TWV0cmljcy5zZXRBc2NlbnQoYXNjZW50KTsKICAgICBmb250TWV0cmljcy5zZXREZXNj
ZW50KGRlc2NlbnQpOwpAQCAtOTEsMjUgKzkxLDI1IEBAIHZvaWQgU1ZHRm9udERhdGE6OmluaXRp
YWxpemVGb250RGF0YShTaW0KICAgICBmb250TWV0cmljcy5zZXRYSGVpZ2h0KHhIZWlnaHQpOwog
CiAgICAgaWYgKCFnbHlwaFBhZ2VaZXJvKSB7Ci0gICAgICAgIGZvbnREYXRhLT5zZXRTcGFjZUds
eXBoKDApOwotICAgICAgICBmb250RGF0YS0+c2V0U3BhY2VXaWR0aHMoMCk7Ci0gICAgICAgIGZv
bnREYXRhLT5zZXRBdmdDaGFyV2lkdGgoMCk7Ci0gICAgICAgIGZvbnREYXRhLT5zZXRNYXhDaGFy
V2lkdGgoYXNjZW50KTsKKyAgICAgICAgZm9udC0+c2V0U3BhY2VHbHlwaCgwKTsKKyAgICAgICAg
Zm9udC0+c2V0U3BhY2VXaWR0aHMoMCk7CisgICAgICAgIGZvbnQtPnNldEF2Z0NoYXJXaWR0aCgw
KTsKKyAgICAgICAgZm9udC0+c2V0TWF4Q2hhcldpZHRoKGFzY2VudCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKICAgICAvLyBDYWxjdWxhdGUgc3BhY2Ugd2lkdGguCiAgICAgR2x5cGggc3Bh
Y2VHbHlwaCA9IGdseXBoUGFnZVplcm8tPmdseXBoRGF0YUZvckNoYXJhY3RlcignICcpLmdseXBo
OwotICAgIGZvbnREYXRhLT5zZXRTcGFjZUdseXBoKHNwYWNlR2x5cGgpOwotICAgIGZvbnREYXRh
LT5zZXRTcGFjZVdpZHRocyhmb250RGF0YS0+d2lkdGhGb3JHbHlwaChzcGFjZUdseXBoKSk7Cisg
ICAgZm9udC0+c2V0U3BhY2VHbHlwaChzcGFjZUdseXBoKTsKKyAgICBmb250LT5zZXRTcGFjZVdp
ZHRocyhmb250LT53aWR0aEZvckdseXBoKHNwYWNlR2x5cGgpKTsKIAogICAgIC8vIEVzdGltYXRl
IGF2ZXJhZ2UgY2hhcmFjdGVyIHdpZHRoLgogICAgIEdseXBoIG51bWVyYWxaZXJvR2x5cGggPSBn
bHlwaFBhZ2VaZXJvLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoJzAnKS5nbHlwaDsKLSAgICBmb250
RGF0YS0+c2V0QXZnQ2hhcldpZHRoKG51bWVyYWxaZXJvR2x5cGggPyBmb250RGF0YS0+d2lkdGhG
b3JHbHlwaChudW1lcmFsWmVyb0dseXBoKSA6IGZvbnREYXRhLT5zcGFjZVdpZHRoKCkpOworICAg
IGZvbnQtPnNldEF2Z0NoYXJXaWR0aChudW1lcmFsWmVyb0dseXBoID8gZm9udC0+d2lkdGhGb3JH
bHlwaChudW1lcmFsWmVyb0dseXBoKSA6IGZvbnQtPnNwYWNlV2lkdGgoKSk7CiAKICAgICAvLyBF
c3RpbWF0ZSBtYXhpbXVtIGNoYXJhY3RlciB3aWR0aC4KICAgICBHbHlwaCBsZXR0ZXJXR2x5cGgg
PSBnbHlwaFBhZ2VaZXJvLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoJ1cnKS5nbHlwaDsKLSAgICBm
b250RGF0YS0+c2V0TWF4Q2hhcldpZHRoKGxldHRlcldHbHlwaCA/IGZvbnREYXRhLT53aWR0aEZv
ckdseXBoKGxldHRlcldHbHlwaCkgOiBhc2NlbnQpOworICAgIGZvbnQtPnNldE1heENoYXJXaWR0
aChsZXR0ZXJXR2x5cGggPyBmb250LT53aWR0aEZvckdseXBoKGxldHRlcldHbHlwaCkgOiBhc2Nl
bnQpOwogfQogCiBmbG9hdCBTVkdGb250RGF0YTo6d2lkdGhGb3JTVkdHbHlwaChHbHlwaCBnbHlw
aCwgZmxvYXQgZm9udFNpemUpIGNvbnN0CkBAIC0yMDgsMTAgKzIwOCwxMCBAQCBib29sIFNWR0Zv
bnREYXRhOjphcHBseVNWR0dseXBoU2VsZWN0aW9uCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1i
b29sIFNWR0ZvbnREYXRhOjpmaWxsU1ZHR2x5cGhQYWdlKEdseXBoUGFnZSogcGFnZVRvRmlsbCwg
dW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIsIHVuc2lnbmVk
IGJ1ZmZlckxlbmd0aCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKSBjb25zdAorYm9v
bCBTVkdGb250RGF0YTo6ZmlsbFNWR0dseXBoUGFnZShHbHlwaFBhZ2UqIHBhZ2VUb0ZpbGwsIHVu
c2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBi
dWZmZXJMZW5ndGgsIGNvbnN0IEZvbnQqIGZvbnQpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGZvbnRE
YXRhLT5pc0N1c3RvbUZvbnQoKSk7Ci0gICAgQVNTRVJUKGZvbnREYXRhLT5pc1NWR0ZvbnQoKSk7
CisgICAgQVNTRVJUKGZvbnQtPmlzQ3VzdG9tRm9udCgpKTsKKyAgICBBU1NFUlQoZm9udC0+aXNT
VkdGb250KCkpOwogCiAgICAgU1ZHRm9udEZhY2VFbGVtZW50KiBmb250RmFjZUVsZW1lbnQgPSB0
aGlzLT5zdmdGb250RmFjZUVsZW1lbnQoKTsKICAgICBBU1NFUlQoZm9udEZhY2VFbGVtZW50KTsK
QEAgLTIyMCwxMyArMjIwLDEzIEBAIGJvb2wgU1ZHRm9udERhdGE6OmZpbGxTVkdHbHlwaFBhZ2Uo
R2x5cGgKICAgICBBU1NFUlQoZm9udEVsZW1lbnQpOwogCiAgICAgaWYgKGJ1ZmZlckxlbmd0aCA9
PSBsZW5ndGgpCi0gICAgICAgIHJldHVybiBmaWxsQk1QR2x5cGhzKGZvbnRFbGVtZW50LCBwYWdl
VG9GaWxsLCBvZmZzZXQsIGxlbmd0aCwgYnVmZmVyLCBmb250RGF0YSk7CisgICAgICAgIHJldHVy
biBmaWxsQk1QR2x5cGhzKGZvbnRFbGVtZW50LCBwYWdlVG9GaWxsLCBvZmZzZXQsIGxlbmd0aCwg
YnVmZmVyLCBmb250KTsKIAogICAgIEFTU0VSVChidWZmZXJMZW5ndGggPT0gMiAqIGxlbmd0aCk7
Ci0gICAgcmV0dXJuIGZpbGxOb25CTVBHbHlwaHMoZm9udEVsZW1lbnQsIHBhZ2VUb0ZpbGwsIG9m
ZnNldCwgbGVuZ3RoLCBidWZmZXIsIGZvbnREYXRhKTsKKyAgICByZXR1cm4gZmlsbE5vbkJNUEds
eXBocyhmb250RWxlbWVudCwgcGFnZVRvRmlsbCwgb2Zmc2V0LCBsZW5ndGgsIGJ1ZmZlciwgZm9u
dCk7CiB9CiAKLWJvb2wgU1ZHRm9udERhdGE6OmZpbGxCTVBHbHlwaHMoU1ZHRm9udEVsZW1lbnQq
IGZvbnRFbGVtZW50LCBHbHlwaFBhZ2UqIHBhZ2VUb0ZpbGwsIHVuc2lnbmVkIG9mZnNldCwgdW5z
aWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERh
dGEpIGNvbnN0Citib29sIFNWR0ZvbnREYXRhOjpmaWxsQk1QR2x5cGhzKFNWR0ZvbnRFbGVtZW50
KiBmb250RWxlbWVudCwgR2x5cGhQYWdlKiBwYWdlVG9GaWxsLCB1bnNpZ25lZCBvZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgY29uc3QgRm9udCogZm9udCkgY29uc3QKIHsK
ICAgICBib29sIGhhdmVHbHlwaHMgPSBmYWxzZTsKICAgICBWZWN0b3I8U1ZHR2x5cGg+IGdseXBo
czsKQEAgLTI0MywxNCArMjQzLDE0IEBAIGJvb2wgU1ZHRm9udERhdGE6OmZpbGxCTVBHbHlwaHMo
U1ZHRm9udEUKICAgICAgICAgLy8gY2FyZSBvZiBtYXRjaGluZyB0byB0aGUgY29ycmVjdCBnbHlw
aCwgaWYgbXVsdGlwbGUgb25lcyBhcmUgYXZhaWxhYmxlLCBhcyB0aGF0J3MKICAgICAgICAgLy8g
b25seSBwb3NzaWJsZSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYSBzdHJpbmcgKGVnLiBhcmFiaWMg
Zm9ybSBtYXRjaGluZykuCiAgICAgICAgIGhhdmVHbHlwaHMgPSB0cnVlOwotICAgICAgICBwYWdl
VG9GaWxsLT5zZXRHbHlwaERhdGFGb3JJbmRleChvZmZzZXQgKyBpLCBnbHlwaHMuZmlyc3QoKS50
YWJsZUVudHJ5LCBmb250RGF0YSk7CisgICAgICAgIHBhZ2VUb0ZpbGwtPnNldEdseXBoRGF0YUZv
ckluZGV4KG9mZnNldCArIGksIGdseXBocy5maXJzdCgpLnRhYmxlRW50cnksIGZvbnQpOwogICAg
ICAgICBnbHlwaHMuY2xlYXIoKTsKICAgICB9CiAKICAgICByZXR1cm4gaGF2ZUdseXBoczsKIH0K
IAotYm9vbCBTVkdGb250RGF0YTo6ZmlsbE5vbkJNUEdseXBocyhTVkdGb250RWxlbWVudCogZm9u
dEVsZW1lbnQsIEdseXBoUGFnZSogcGFnZVRvRmlsbCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25l
ZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSkg
Y29uc3QKK2Jvb2wgU1ZHRm9udERhdGE6OmZpbGxOb25CTVBHbHlwaHMoU1ZHRm9udEVsZW1lbnQq
IGZvbnRFbGVtZW50LCBHbHlwaFBhZ2UqIHBhZ2VUb0ZpbGwsIHVuc2lnbmVkIG9mZnNldCwgdW5z
aWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCBjb25zdCBGb250KiBmb250KSBjb25zdAogewog
ICAgIGJvb2wgaGF2ZUdseXBocyA9IGZhbHNlOwogICAgIFZlY3RvcjxTVkdHbHlwaD4gZ2x5cGhz
OwpAQCAtMjY4LDcgKzI2OCw3IEBAIGJvb2wgU1ZHRm9udERhdGE6OmZpbGxOb25CTVBHbHlwaHMo
U1ZHRm8KICAgICAgICAgLy8gY2FyZSBvZiBtYXRjaGluZyB0byB0aGUgY29ycmVjdCBnbHlwaCwg
aWYgbXVsdGlwbGUgb25lcyBhcmUgYXZhaWxhYmxlLCBhcyB0aGF0J3MKICAgICAgICAgLy8gb25s
eSBwb3NzaWJsZSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYSBzdHJpbmcgKGVnLiBhcmFiaWMgZm9y
bSBtYXRjaGluZykuCiAgICAgICAgIGhhdmVHbHlwaHMgPSB0cnVlOwotICAgICAgICBwYWdlVG9G
aWxsLT5zZXRHbHlwaERhdGFGb3JJbmRleChvZmZzZXQgKyBpLCBnbHlwaHMuZmlyc3QoKS50YWJs
ZUVudHJ5LCBmb250RGF0YSk7CisgICAgICAgIHBhZ2VUb0ZpbGwtPnNldEdseXBoRGF0YUZvcklu
ZGV4KG9mZnNldCArIGksIGdseXBocy5maXJzdCgpLnRhYmxlRW50cnksIGZvbnQpOwogICAgICAg
ICBnbHlwaHMuY2xlYXIoKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
b250RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RGF0YS5o
CShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udERhdGEuaAko
d29ya2luZyBjb3B5KQpAQCAtMjEsMjEgKzIxLDIxIEBACiAjZGVmaW5lIFNWR0ZvbnREYXRhX2gK
IAogI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKKyNp
bmNsdWRlICJGb250LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU1ZHRm9udEVs
ZW1lbnQ7CiBjbGFzcyBTVkdGb250RmFjZUVsZW1lbnQ7CiAKLWNsYXNzIFNWR0ZvbnREYXRhIDog
cHVibGljIFNpbXBsZUZvbnREYXRhOjpTVkdEYXRhIHsKK2NsYXNzIFNWR0ZvbnREYXRhIDogcHVi
bGljIEZvbnQ6OlNWR0RhdGEgewogcHVibGljOgogICAgIGV4cGxpY2l0IFNWR0ZvbnREYXRhKFNW
R0ZvbnRGYWNlRWxlbWVudCopOwogICAgIHZpcnR1YWwgflNWR0ZvbnREYXRhKCkgeyB9CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZUZvbnREYXRhKFNpbXBsZUZvbnREYXRhKiwgZmxvYXQg
Zm9udFNpemUpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplRm9udChGb250
KiwgZmxvYXQgZm9udFNpemUpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgZmxvYXQgd2lkdGhGb3JT
VkdHbHlwaChHbHlwaCwgZmxvYXQgZm9udFNpemUpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1
YWwgYm9vbCBmaWxsU1ZHR2x5cGhQYWdlKEdseXBoUGFnZSosIHVuc2lnbmVkIG9mZnNldCwgdW5z
aWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0
IFNpbXBsZUZvbnREYXRhKikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGZpbGxT
VkdHbHlwaFBhZ2UoR2x5cGhQYWdlKiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgs
IFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgRm9udCopIGNvbnN0
IG92ZXJyaWRlOwogCiAgICAgYm9vbCBhcHBseVNWR0dseXBoU2VsZWN0aW9uKFdpZHRoSXRlcmF0
b3ImLCBHbHlwaERhdGEmLCBib29sIG1pcnJvciwgaW50IGN1cnJlbnRDaGFyYWN0ZXIsIHVuc2ln
bmVkJiBhZHZhbmNlTGVuZ3RoLCBTdHJpbmcmIG5vcm1hbGl6ZWRTcGFjZXNTdHJpbmdDYWNoZSkg
Y29uc3Q7CiAKQEAgLTUwLDggKzUwLDggQEAgcHVibGljOgogICAgIGZsb2F0IHZlcnRpY2FsQWR2
YW5jZVkoKSBjb25zdCB7IHJldHVybiBtX3ZlcnRpY2FsQWR2YW5jZVk7IH0KIAogcHJpdmF0ZToK
LSAgICBib29sIGZpbGxCTVBHbHlwaHMoU1ZHRm9udEVsZW1lbnQqLCBHbHlwaFBhZ2UqICwgdW5z
aWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIsIGNvbnN0IFNpbXBs
ZUZvbnREYXRhKikgY29uc3Q7Ci0gICAgYm9vbCBmaWxsTm9uQk1QR2x5cGhzKFNWR0ZvbnRFbGVt
ZW50KiwgR2x5cGhQYWdlKiAsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hh
ciogYnVmZmVyLCBjb25zdCBTaW1wbGVGb250RGF0YSopIGNvbnN0OworICAgIGJvb2wgZmlsbEJN
UEdseXBocyhTVkdGb250RWxlbWVudCosIEdseXBoUGFnZSogLCB1bnNpZ25lZCBvZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgY29uc3QgRm9udCopIGNvbnN0OworICAgIGJv
b2wgZmlsbE5vbkJNUEdseXBocyhTVkdGb250RWxlbWVudCosIEdseXBoUGFnZSogLCB1bnNpZ25l
ZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgY29uc3QgRm9udCopIGNv
bnN0OwogCiAgICAgYm9vbCBhcHBseVRyYW5zZm9ybXMoR2x5cGhCdWZmZXJHbHlwaCosIEdseXBo
QnVmZmVyQWR2YW5jZSosIHNpemVfdCwgVHlwZXNldHRpbmdGZWF0dXJlcykgY29uc3QgPSBkZWxl
dGU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RWxlbWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RWxlbWVudC5oCShyZXZpc2lvbiAxNzg4
NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEVsZW1lbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtNzYsNyArNzYsNyBAQCBwdWJsaWM6CiAgICAgZmxvYXQgaG9yaXpvbnRhbEtlcm5pbmdG
b3JQYWlyT2ZTdHJpbmdzQW5kR2x5cGhzKGNvbnN0IFN0cmluZyYgdTEsIGNvbnN0IFN0cmluZyYg
ZzEsIGNvbnN0IFN0cmluZyYgdTIsIGNvbnN0IFN0cmluZyYgZzIpIGNvbnN0OwogICAgIGZsb2F0
IHZlcnRpY2FsS2VybmluZ0ZvclBhaXJPZlN0cmluZ3NBbmRHbHlwaHMoY29uc3QgU3RyaW5nJiB1
MSwgY29uc3QgU3RyaW5nJiBnMSwgY29uc3QgU3RyaW5nJiB1MiwgY29uc3QgU3RyaW5nJiBnMikg
Y29uc3Q7CiAKLSAgICAvLyBVc2VkIGJ5IFNpbXBsZUZvbnREYXRhL1dpZHRoSXRlcmF0b3IuCisg
ICAgLy8gVXNlZCBieSBGb250L1dpZHRoSXRlcmF0b3IuCiAgICAgU1ZHR2x5cGggc3ZnR2x5cGhG
b3JHbHlwaChHbHlwaCk7CiAgICAgR2x5cGggbWlzc2luZ0dseXBoKCk7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysg
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTI3LDggKzkyNyw4IEBAIHZvaWQgV2ViUHJvY2Vzczo6Z2V0V2ViQ29yZVN0YXRpc3RpY3Mo
dWkKICAgICBkYXRhLnN0YXRpc3RpY3NOdW1iZXJzLnNldChBU0NJSUxpdGVyYWwoIkljb25zV2l0
aERhdGFDb3VudCIpLCBpY29uRGF0YWJhc2UoKS5pY29uUmVjb3JkQ291bnRXaXRoRGF0YSgpKTsK
ICAgICAKICAgICAvLyBHYXRoZXIgZm9udCBzdGF0aXN0aWNzLgotICAgIGRhdGEuc3RhdGlzdGlj
c051bWJlcnMuc2V0KEFTQ0lJTGl0ZXJhbCgiQ2FjaGVkRm9udERhdGFDb3VudCIpLCBmb250Q2Fj
aGUoKS5mb250RGF0YUNvdW50KCkpOwotICAgIGRhdGEuc3RhdGlzdGljc051bWJlcnMuc2V0KEFT
Q0lJTGl0ZXJhbCgiQ2FjaGVkRm9udERhdGFJbmFjdGl2ZUNvdW50IiksIGZvbnRDYWNoZSgpLmlu
YWN0aXZlRm9udERhdGFDb3VudCgpKTsKKyAgICBkYXRhLnN0YXRpc3RpY3NOdW1iZXJzLnNldChB
U0NJSUxpdGVyYWwoIkNhY2hlZEZvbnREYXRhQ291bnQiKSwgZm9udENhY2hlKCkuZm9udENvdW50
KCkpOworICAgIGRhdGEuc3RhdGlzdGljc051bWJlcnMuc2V0KEFTQ0lJTGl0ZXJhbCgiQ2FjaGVk
Rm9udERhdGFJbmFjdGl2ZUNvdW50IiksIGZvbnRDYWNoZSgpLmluYWN0aXZlRm9udENvdW50KCkp
OwogICAgIAogICAgIC8vIEdhdGhlciBnbHlwaCBwYWdlIHN0YXRpc3RpY3MuCiAgICAgZGF0YS5z
dGF0aXN0aWNzTnVtYmVycy5zZXQoQVNDSUlMaXRlcmFsKCJHbHlwaFBhZ2VDb3VudCIpLCBHbHlw
aFBhZ2U6OmNvdW50KCkpOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9tYWMvV2ViUG9wdXBNZW51TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYlBvcHVwTWVudU1hYy5tbQkocmV2
aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9tYWMvV2ViUG9wdXBNZW51TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBA
IHZvaWQgV2ViUG9wdXBNZW51OjpzZXRVcFBsYXRmb3JtRGF0YShjb24KIHsKICNpZiBVU0UoQVBQ
S0lUKQogICAgIC8vIEZJWE1FOiBmb250IHdpbGwgYmUgbmlsIGhlcmUgZm9yIGN1c3RvbSBmb250
cywgd2Ugc2hvdWxkIGZpeCB0aGF0LgotICAgIE5TRm9udCAqZm9udCA9IG1fcG9wdXBDbGllbnQt
Pm1lbnVTdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXROU0ZvbnQoKTsKKyAgICBO
U0ZvbnQgKmZvbnQgPSBtX3BvcHVwQ2xpZW50LT5tZW51U3R5bGUoKS5mb250KCkucHJpbWFyeUZv
bnQoKS5nZXROU0ZvbnQoKTsKICAgICBpZiAoIWZvbnQpCiAgICAgICAgIHJldHVybjsKICAgICAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJ
KHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzk2LDcgKzc5Niw3IEBAIEVkaXRvclN0YXRl
IFdlYlBhZ2U6OmVkaXRvclN0YXRlKCkgY29uc3QKICAgICBpZiAoIXNlbGVjdGlvbi5pc05vbmUo
KSkgewogICAgICAgICBOb2RlKiBub2RlVG9SZW1vdmU7CiAgICAgICAgIGlmIChSZW5kZXJTdHls
ZSogc3R5bGUgPSBFZGl0b3I6OnN0eWxlRm9yU2VsZWN0aW9uU3RhcnQoJmZyYW1lLCBub2RlVG9S
ZW1vdmUpKSB7Ci0gICAgICAgICAgICBDVEZvbnRSZWYgZm9udCA9IHN0eWxlLT5mb250Q2FzY2Fk
ZSgpLnByaW1hcnlGb250RGF0YSgpLmdldENURm9udCgpOworICAgICAgICAgICAgQ1RGb250UmVm
IGZvbnQgPSBzdHlsZS0+Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpLmdldENURm9udCgpOwog
ICAgICAgICAgICAgQ1RGb250U3ltYm9saWNUcmFpdHMgdHJhaXRzID0gZm9udCA/IENURm9udEdl
dFN5bWJvbGljVHJhaXRzKGZvbnQpIDogMDsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYg
KHRyYWl0cyAmIGtDVEZvbnRUcmFpdEJvbGQpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCShyZXZpc2lvbiAxNzg4NTcp
CisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0J
KHdvcmtpbmcgY29weSkKQEAgLTE3OTAsOCArMTc5MCw4IEBAIHZvaWQgV2ViUGFnZTo6cmVxdWVz
dEF1dG9jb3JyZWN0aW9uRGF0YSgKIAogICAgIGJvb2wgbXVsdGlwbGVGb250cyA9IGZhbHNlOwog
ICAgIENURm9udFJlZiBmb250ID0gbmlsOwotICAgIGlmIChjb25zdCBTaW1wbGVGb250RGF0YSog
Zm9udERhdGEgPSBmcmFtZS5lZGl0b3IoKS5mb250Rm9yU2VsZWN0aW9uKG11bHRpcGxlRm9udHMp
KQotICAgICAgICBmb250ID0gZm9udERhdGEtPmdldENURm9udCgpOworICAgIGlmIChhdXRvKiBj
b3JlRm9udCA9IGZyYW1lLmVkaXRvcigpLmZvbnRGb3JTZWxlY3Rpb24obXVsdGlwbGVGb250cykp
CisgICAgICAgIGZvbnQgPSBjb3JlRm9udC0+Z2V0Q1RGb250KCk7CiAKICAgICBDR0Zsb2F0IGZv
bnRTaXplID0gQ1RGb250R2V0U2l6ZShmb250KTsKICAgICB1aW50NjRfdCBmb250VHJhaXRzID0g
Q1RGb250R2V0U3ltYm9saWNUcmFpdHMoZm9udCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2lvcy9N
aXNjL0Vtb2ppRmFsbGJhY2tGb250U2VsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvaW9zL01pc2MvRW1vamlGYWxsYmFja0ZvbnRTZWxlY3Rvci5jcHAJKHJldmlzaW9uIDE3
ODg1NykKKysrIFNvdXJjZS9XZWJLaXQvaW9zL01pc2MvRW1vamlGYWxsYmFja0ZvbnRTZWxlY3Rv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDE3ICsyNywxNyBAQAogCiAjaW5jbHVkZSAiRW1v
amlGYWxsYmFja0ZvbnRTZWxlY3Rvci5oIgogCisjaW5jbHVkZSA8V2ViQ29yZS9Gb250Lmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9Gb250Q2FjaGUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1NpbXBsZUZv
bnREYXRhLmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9BdG9taWNTdHJpbmcuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLVBhc3NSZWZQ
dHI8U2ltcGxlRm9udERhdGE+IEVtb2ppRmFsbGJhY2tGb250U2VsZWN0b3I6OmZhbGxiYWNrRm9u
dERhdGFBdChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgc2l6ZV90KQor
UGFzc1JlZlB0cjxGb250PiBFbW9qaUZhbGxiYWNrRm9udFNlbGVjdG9yOjpmYWxsYmFja0ZvbnRB
dChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgc2l6ZV90KQogewogICAg
IERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIGFwcGxlQ29sb3JF
bW9qaSwgKCJBcHBsZSBDb2xvciBFbW9qaSIpKTsKLSAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+
IGZvbnREYXRhID0gZm9udENhY2hlKCkuZm9udEZvckZhbWlseShmb250RGVzY3JpcHRpb24sIGFw
cGxlQ29sb3JFbW9qaSk7CisgICAgUmVmUHRyPEZvbnQ+IGZvbnREYXRhID0gZm9udENhY2hlKCku
Zm9udEZvckZhbWlseShmb250RGVzY3JpcHRpb24sIGFwcGxlQ29sb3JFbW9qaSk7CiAgICAgaWYg
KCFmb250RGF0YSkgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBnZXQgXCJBcHBsZSBD
b2xvciBFbW9qaVwiIGZyb20gdGhlIGZvbnQgY2FjaGUuIFVzaW5nIHRoZSBsYXN0IHJlc29ydCBm
YWxsYmFjayBmb250IGluc3RlYWQuIik7CiAgICAgICAgIGZvbnREYXRhID0gZm9udENhY2hlKCku
bGFzdFJlc29ydEZhbGxiYWNrRm9udChmb250RGVzY3JpcHRpb24pOwpJbmRleDogU291cmNlL1dl
YktpdC9pb3MvTWlzYy9FbW9qaUZhbGxiYWNrRm9udFNlbGVjdG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9pb3MvTWlzYy9FbW9qaUZhbGxiYWNrRm9udFNlbGVjdG9yLmgJKHJldmlz
aW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJLaXQvaW9zL01pc2MvRW1vamlGYWxsYmFja0ZvbnRT
ZWxlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw4ICszNSw4IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIH5FbW9qaUZhbGxiYWNrRm9udFNlbGVjdG9yKCkgb3ZlcnJpZGUgeyB9CiAgICAgdmly
dHVhbCBXZWJDb3JlOjpGb250UmFuZ2VzIGZvbnRSYW5nZXNGb3JGYW1pbHkoY29uc3QgV2ViQ29y
ZTo6Rm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbWljU3RyaW5nJikgb3ZlcnJpZGUgeyBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIFdlYkNvcmU6OkZvbnRSYW5nZXMoKTsgfQogICAgIHZp
cnR1YWwgYm9vbCByZXNvbHZlc0ZhbWlseUZvcihjb25zdCBXZWJDb3JlOjpGb250RGVzY3JpcHRp
b24mKSBjb25zdCBvdmVycmlkZSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gZmFsc2U7
IH0KLSAgICB2aXJ0dWFsIHNpemVfdCBmYWxsYmFja0ZvbnREYXRhQ291bnQoKSBvdmVycmlkZSB7
IHJldHVybiAxOyB9OwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpTaW1wbGVGb250
RGF0YT4gZmFsbGJhY2tGb250RGF0YUF0KGNvbnN0IFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbiYs
IHNpemVfdCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBzaXplX3QgZmFsbGJhY2tGb250Q291bnQo
KSBvdmVycmlkZSB7IHJldHVybiAxOyB9OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3Jl
OjpGb250PiBmYWxsYmFja0ZvbnRBdChjb25zdCBXZWJDb3JlOjpGb250RGVzY3JpcHRpb24mLCBz
aXplX3QpIG92ZXJyaWRlOwogCiAgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyRm9ySW52YWxpZGF0
aW9uQ2FsbGJhY2tzKFdlYkNvcmU6OkZvbnRTZWxlY3RvckNsaWVudCopIG92ZXJyaWRlIHsgfQog
ICAgIHZpcnR1YWwgdm9pZCB1bnJlZ2lzdGVyRm9ySW52YWxpZGF0aW9uQ2FsbGJhY2tzKFdlYkNv
cmU6OkZvbnRTZWxlY3RvckNsaWVudCopIG92ZXJyaWRlIHsgfQpJbmRleDogU291cmNlL1dlYktp
dC9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tCShyZXZpc2lvbiAxNzg4NTcpCisrKyBT
b3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0xNDcsMTIgKzE0NywxMiBAQCArIChzaXplX3QpaWNvbnNXaXRoRGF0YUNvdW50CiAKICsg
KHNpemVfdCljYWNoZWRGb250RGF0YUNvdW50CiB7Ci0gICAgcmV0dXJuIGZvbnRDYWNoZSgpLmZv
bnREYXRhQ291bnQoKTsKKyAgICByZXR1cm4gZm9udENhY2hlKCkuZm9udENvdW50KCk7CiB9CiAK
ICsgKHNpemVfdCljYWNoZWRGb250RGF0YUluYWN0aXZlQ291bnQKIHsKLSAgICByZXR1cm4gZm9u
dENhY2hlKCkuaW5hY3RpdmVGb250RGF0YUNvdW50KCk7CisgICAgcmV0dXJuIGZvbnRDYWNoZSgp
LmluYWN0aXZlRm9udENvdW50KCk7CiB9CiAKICsgKHZvaWQpcHVyZ2VJbmFjdGl2ZUZvbnREYXRh
CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9Qb3B1cE1lbnVNYWMubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvUG9wdXBNZW51
TWFjLm1tCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3Vw
cG9ydC9Qb3B1cE1lbnVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI4LDExICsyOCwxMSBAQAog
I2ltcG9ydCA8V2ViQ29yZS9DaHJvbWUuaD4KICNpbXBvcnQgPFdlYkNvcmUvQ2hyb21lQ2xpZW50
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0V2ZW50SGFuZGxlci5oPgorI2ltcG9ydCA8V2ViQ29yZS9G
b250Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1l
Vmlldy5oPgogI2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BvcHVw
TWVudUNsaWVudC5oPgotI2ltcG9ydCA8V2ViQ29yZS9TaW1wbGVGb250RGF0YS5oPgogI2ltcG9y
dCA8V2ViQ29yZS9XZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwpAQCAtODEsOSArODEsOSBAQCB2b2lkIFBvcHVwTWVudU1hYzo6cG9wdWxhdGUoKQog
ICAgICAgICBQb3B1cE1lbnVTdHlsZSBzdHlsZSA9IG1fY2xpZW50LT5pdGVtU3R5bGUoaSk7CiAg
ICAgICAgIFJldGFpblB0cjxOU011dGFibGVEaWN0aW9uYXJ5PiBhdHRyaWJ1dGVzID0gYWRvcHRO
UyhbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdKTsKICAgICAgICAgaWYgKHN0eWxl
LmZvbnQoKSAhPSBGb250Q2FzY2FkZSgpKSB7Ci0gICAgICAgICAgICBOU0ZvbnQgKmZvbnQgPSBz
dHlsZS5mb250KCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0TlNGb250KCk7CisgICAgICAgICAgICBO
U0ZvbnQgKmZvbnQgPSBzdHlsZS5mb250KCkucHJpbWFyeUZvbnQoKS5nZXROU0ZvbnQoKTsKICAg
ICAgICAgICAgIGlmICghZm9udCkgewotICAgICAgICAgICAgICAgIENHRmxvYXQgc2l6ZSA9IHN0
eWxlLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5wbGF0Zm9ybURhdGEoKS5zaXplKCk7CisgICAg
ICAgICAgICAgICAgQ0dGbG9hdCBzaXplID0gc3R5bGUuZm9udCgpLnByaW1hcnlGb250KCkucGxh
dGZvcm1EYXRhKCkuc2l6ZSgpOwogICAgICAgICAgICAgICAgIGZvbnQgPSBzdHlsZS5mb250KCku
d2VpZ2h0KCkgPCBGb250V2VpZ2h0Qm9sZCA/IFtOU0ZvbnQgc3lzdGVtRm9udE9mU2l6ZTpzaXpl
XSA6IFtOU0ZvbnQgYm9sZFN5c3RlbUZvbnRPZlNpemU6c2l6ZV07CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBbYXR0cmlidXRlcyBzZXRPYmplY3Q6Zm9udCBmb3JLZXk6TlNGb250QXR0cmli
dXRlTmFtZV07CkBAIC0xNDgsNyArMTQ4LDcgQEAgdm9pZCBQb3B1cE1lbnVNYWM6OnNob3coY29u
c3QgSW50UmVjdCYgcgogICAgIE5TTWVudSogbWVudSA9IFttX3BvcHVwIG1lbnVdOwogICAgIAog
ICAgIE5TUG9pbnQgbG9jYXRpb247Ci0gICAgTlNGb250KiBmb250ID0gbV9jbGllbnQtPm1lbnVT
dHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXROU0ZvbnQoKTsKKyAgICBOU0ZvbnQq
IGZvbnQgPSBtX2NsaWVudC0+bWVudVN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250KCkuZ2V0TlNG
b250KCk7CiAKICAgICAvLyBUaGVzZSB2YWx1ZXMgd2VyZSBib3Jyb3dlZCBmcm9tIEFwcEtpdCB0
byBtYXRjaCB0aGVpciBwbGFjZW1lbnQgb2YgdGhlIG1lbnUuCiAgICAgY29uc3QgaW50IHBvcE92
ZXJIb3Jpem9udGFsQWRqdXN0ID0gLTEwOwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJGcmFtZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YkZyYW1lLm1tCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3
L1dlYkZyYW1lLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsMTEgKzExNCwxMSBAQAogI2ltcG9y
dCA8V2ViQ29yZS9FZGl0b3IuaD4KICNpbXBvcnQgPFdlYkNvcmUvRWRpdG9yQ2xpZW50Lmg+CiAj
aW1wb3J0IDxXZWJDb3JlL0ZvY3VzQ29udHJvbGxlci5oPgorI2ltcG9ydCA8V2ViQ29yZS9Gb250
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lU2VsZWN0aW9uLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L0hpc3RvcnlDb250cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL05vZGVUcmF2ZXJzYWwuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyTGF5ZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvU2ltcGxl
Rm9udERhdGEuaD4KICNpbXBvcnQgPFdlYkNvcmUvVGV4dFJlc291cmNlRGVjb2Rlci5oPgogI2lt
cG9ydCA8V2ViQ29yZS9XQUtTY3JvbGxWaWV3Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dBS1ZpZXdQ
cml2YXRlLmg+CkBAIC0xODY5LDcgKzE4NjksOCBAQCAtIChDVEZvbnRSZWYpZm9udEZvclNlbGVj
dGlvbjooQk9PTCAqKWhhCiAgICAgYm9vbCBtdWx0aXBsZUZvbnRzID0gZmFsc2U7CiAgICAgQ1RG
b250UmVmIGZvbnQgPSBuaWw7CiAgICAgaWYgKF9wcml2YXRlLT5jb3JlRnJhbWUpIHsKLSAgICAg
ICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGZkID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZWRpdG9y
KCkuZm9udEZvclNlbGVjdGlvbihtdWx0aXBsZUZvbnRzKTsKKyAgICAgICAgY29uc3QgRm9udAor
ICAgICAgICAqIGZkID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZWRpdG9yKCkuZm9udEZvclNlbGVj
dGlvbihtdWx0aXBsZUZvbnRzKTsKICAgICAgICAgaWYgKGZkKQogICAgICAgICAgICAgZm9udCA9
IGZkLT5nZXRDVEZvbnQoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3
L1dlYkhUTUxWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcv
V2ViSFRNTFZpZXcubW0JKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViSFRNTFZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTkyLDYgKzkyLDcgQEAKICNp
bXBvcnQgPFdlYkNvcmUvRXhjZXB0aW9uSGFuZGxlcnMuaD4KICNpbXBvcnQgPFdlYkNvcmUvRmxv
YXRSZWN0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZvY3VzQ29udHJvbGxlci5oPgorI2ltcG9ydCA8
V2ViQ29yZS9Gb250Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZvbnRDYWNoZS5oPgogI2ltcG9ydCA8
V2ViQ29yZS9GcmFtZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZUxvYWRlci5oPgpAQCAtMTEy
LDcgKzExMyw2IEBACiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRlcldpZGdldC5oPgogI2ltcG9ydCA8
V2ViQ29yZS9SdW50aW1lQXBwbGljYXRpb25DaGVja3MuaD4KICNpbXBvcnQgPFdlYkNvcmUvU2hh
cmVkQnVmZmVyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1NpbXBsZUZvbnREYXRhLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL1N0eWxlUHJvcGVydGllcy5oPgogI2ltcG9ydCA8V2ViQ29yZS9UZXh0Lmg+CiAj
aW1wb3J0IDxXZWJDb3JlL1RleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZS5oPgpAQCAtNDg3OCw4ICs0
ODc4LDggQEAgc3RhdGljIE5TU3RyaW5nICpmb250TmFtZUZvckRlc2NyaXB0aW9uKAogICAgIGZv
bnREZXNjcmlwdGlvbi5zZXRJc0l0YWxpYyhpdGFsaWMpOwogICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRXZWlnaHQoYm9sZCA/IEZvbnRXZWlnaHQ5MDAgOiBGb250V2VpZ2h0NTAwKTsKICAgICBmb250
RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShwb2ludFNpemUpOwotICAgIFJlZlB0cjxTaW1w
bGVGb250RGF0YT4gc2ltcGxlRm9udERhdGEgPSBmb250Q2FjaGUoKS5mb250Rm9yRmFtaWx5KGZv
bnREZXNjcmlwdGlvbiwgZmFtaWx5TmFtZSk7Ci0gICAgcmV0dXJuIFtzaW1wbGVGb250RGF0YS0+
cGxhdGZvcm1EYXRhKCkubnNGb250KCkgZm9udE5hbWVdOworICAgIFJlZlB0cjxGb250PiBmb250
ID0gZm9udENhY2hlKCkuZm9udEZvckZhbWlseShmb250RGVzY3JpcHRpb24sIGZhbWlseU5hbWUp
OworICAgIHJldHVybiBbZm9udC0+cGxhdGZvcm1EYXRhKCkubnNGb250KCkgZm9udE5hbWVdOwog
fQogCiAtICh2b2lkKV9hZGRUb1N0eWxlOihET01DU1NTdHlsZURlY2xhcmF0aW9uICopc3R5bGUg
Zm9udEE6KE5TRm9udCAqKWEgZm9udEI6KE5TRm9udCAqKWIKQEAgLTU0NDIsNyArNTQ0Miw3IEBA
IC0gKHZvaWQpX3VwZGF0ZUZvbnRQYW5lbAogICAgIGJvb2wgbXVsdGlwbGVGb250cyA9IGZhbHNl
OwogICAgIE5TRm9udCAqZm9udCA9IG5pbDsKICAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNv
cmUoW3NlbGYgX2ZyYW1lXSkpIHsKLSAgICAgICAgaWYgKGNvbnN0IFNpbXBsZUZvbnREYXRhKiBm
ZCA9IGNvcmVGcmFtZS0+ZWRpdG9yKCkuZm9udEZvclNlbGVjdGlvbihtdWx0aXBsZUZvbnRzKSkK
KyAgICAgICAgaWYgKGNvbnN0IEZvbnQqIGZkID0gY29yZUZyYW1lLT5lZGl0b3IoKS5mb250Rm9y
U2VsZWN0aW9uKG11bHRpcGxlRm9udHMpKQogICAgICAgICAgICAgZm9udCA9IGZkLT5nZXROU0Zv
bnQoKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL0RPTUNvcmVDbGFzc2VzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9ET01Db3JlQ2xhc3Nlcy5jcHAJKHJl
dmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJLaXQvd2luL0RPTUNvcmVDbGFzc2VzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1l
bnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0RyYWdJbWFnZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
RWxlbWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRm9udC5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
Rm9udENhc2NhZGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9IVE1MRm9ybUVsZW1lbnQuaD4KQEAgLTQ4LDcgKzQ5LDYgQEAKICNpbmNsdWRlIDxXZWJD
b3JlL05vZGVMaXN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJFbGVtZW50Lmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9SZW5kZXJUcmVlQXNUZXh0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TaW1w
bGVGb250RGF0YS5oPgogCiAjaW5jbHVkZSA8aW5pdGd1aWQuaD4KIC8vIHszQjBDMEVGRi00NzhC
LTRiMGItODI5MC1EMjMyMUUwOEUyM0V9CkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAkocmV2aXNp
b24gMTc4ODU3KQorKysgU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTk2LDYgKzk2LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KICNp
bmNsdWRlIDxXZWJDb3JlL0Zsb2F0UXVhZC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRm9jdXNDb250
cm9sbGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Gb250Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9G
cmFtZUxvYWRlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVTZWxlY3Rpb24uaD4KICNpbmNs
dWRlIDxXZWJDb3JlL0ZyYW1lVHJlZS5oPgpAQCAtMTQ4LDcgKzE0OSw2IEBACiAjaW5jbHVkZSA8
V2ViQ29yZS9TZWN1cml0eU9yaWdpbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2VjdXJpdHlQb2xp
Y3kuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NldHRpbmdzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9T
aW1wbGVGb250RGF0YS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU3lzdGVtSW5mby5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvV2luZG93TWVzc2FnZUJyb2FkY2FzdGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9XaW5kb3dzVG91Y2guaD4KQEAgLTU1MDUsNyArNTUwNSw3IEBAIEhSRVNVTFQgV2ViVmlldzo6
c2V0UHJvaGliaXRzTWFpbkZyYW1lU2MKIAogSFJFU1VMVCBXZWJWaWV3OjpzZXRTaG91bGRBcHBs
eU1hY0ZvbnRBc2NlbnRIYWNrKEJPT0wgYikKIHsKLSAgICBTaW1wbGVGb250RGF0YTo6c2V0U2hv
dWxkQXBwbHlNYWNBc2NlbnRIYWNrKGIpOworICAgIEZvbnQ6OnNldFNob3VsZEFwcGx5TWFjQXNj
ZW50SGFjayhiKTsKICAgICByZXR1cm4gU19PSzsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245156</attachid>
            <date>2015-01-22 13:10:00 -0800</date>
            <delta_ts>2015-01-22 13:12:55 -0800</delta_ts>
            <desc>another</desc>
            <filename>simplefontdata-rename-11.patch</filename>
            <type>text/plain</type>
            <size>385427</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDE1LTAxLTIxICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgU2ltcGxlRm9udERh
dGEgdG8gRm9udAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTQwNDk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhlIGZhbGxiYWNrIHN1cHBvcnRpbmcgRm9udCB0eXBlIHdhcyByZW5hbWVkIEZvbnRDYXNj
YWRlLgorICAgICAgICBXZSBjYW4gbm93IHJlbmFtZSBTaW1wbGVGb250RGF0YSB0byBqdXN0IEZv
bnQgbWF0Y2hpbmcgdGhlIHVzdWFsIGRlZmluaXRpb24uCisKIDIwMTUtMDEtMjEgIEJlbmphbWlu
IFBvdWxhaW4gIDxiZW5qYW1pbkB3ZWJraXQub3JnPgogCiAgICAgICAgIEhhbmRsZSB0aGUgdHJh
bnNpdGlvbiBvbiBhbnkgY2hhcmFjdGVyIGFzIGEgc2VwYXJhdGUgdHlwZSBvZiB0cmFuc2l0aW9u
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dl
YkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTIwNTQsNiArMjA1NCw3IEBA
IHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3Bw
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSb3VuZGVkUmVjdC5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9GbG9hdFNpemUuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhc2NhZGUuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERlc2NyaXB0aW9u
LmNwcApAQCAtMjA4OSw3ICsyMDkwLDYgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL1JvdW5kZWRSZWN0LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1NWR0ds
eXBoLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCi0gICAgcGxhdGZv
cm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvU3Ry
aW5nVHJ1bmNhdG9yLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1N1cnJvZ2F0ZVBhaXJBd2Fy
ZVRleHRJdGVyYXRvci5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVuLmNwcApJbmRl
eDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC00NjksNyArNDY5LDYgQEAgX19aTjdX
ZWJDb3JlMTRTZWN1cml0eVBvbGljeTIyZ2VuZXJhdGVSZQogX19aTjdXZWJDb3JlMTRTZWN1cml0
eVBvbGljeTI3cmVzZXRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RzRXYKIF9fWk43V2ViQ29yZTE0U2Vj
dXJpdHlQb2xpY3kyOWFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5RVJLTlNfMTRTZWN1cml0
eU9yaWdpbkVSS04zV1RGNlN0cmluZ0VTN19iCiBfX1pON1dlYkNvcmUxNFNlY3VyaXR5UG9saWN5
MzJyZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeUVSS05TXzE0U2VjdXJpdHlPcmlnaW5F
UktOM1dURjZTdHJpbmdFUzdfYgotX19aTjdXZWJDb3JlMTRTaW1wbGVGb250RGF0YUQxRXYKIF9f
Wk43V2ViQ29yZTE0U3ViZnJhbWVMb2FkZXIxMmFsbG93UGx1Z2luc0VOU18yOFJlYXNvbkZvckNh
bGxpbmdBbGxvd1BsdWdpbnNFCiBfX1pON1dlYkNvcmUxNFRpbGVDb250cm9sbGVyMTRzZXRUaWxl
c09wYXF1ZUViCiBfX1pON1dlYkNvcmUxNFRpbGVDb250cm9sbGVyMTVjb250YWluZXJMYXllcnNF
dgpAQCAtMTE3OSw2ICsxMTc4LDcgQEAgX19aTjdXZWJDb3JlNDBkZWZhdWx0VGV4dEVuY29kaW5n
TmFtZUZvcgogX19aTjdXZWJDb3JlNDByZXN0cmljdE1pbmltdW1TY2FsZUZhY3RvclRvVmlld3Bv
cnRTaXplRVJOU18xOFZpZXdwb3J0QXR0cmlidXRlc0VOU183SW50U2l6ZUVmCiBfX1pON1dlYkNv
cmU0MlVSTEJ5VHJ1bmNhdGluZ09uZUNoYXJhY3RlckJlZm9yZUNvbXBvbmVudEVQNU5TVVJMMThD
RlVSTENvbXBvbmVudFR5cGUKIF9fWk43V2ViQ29yZTQ3YXR0cmlidXRlZFN0cmluZ0J5U3RyaXBw
aW5nQXR0YWNobWVudENoYXJhY3RlcnNFUDE4TlNBdHRyaWJ1dGVkU3RyaW5nCitfX1pON1dlYkNv
cmU0Rm9udEQxRXYKIF9fWk43V2ViQ29yZTRJY29uMThjcmVhdGVJY29uRm9yRmlsZXNFUktOM1dU
RjZWZWN0b3JJTlMxXzZTdHJpbmdFTG0wRU5TMV8xNUNyYXNoT25PdmVyZmxvd0VFRQogX19aTjdX
ZWJDb3JlNEljb25EMUV2CiBfX1pON1dlYkNvcmU0Tm9kZTEwcmVuZGVyUmVjdEVQYgpAQCAtMTQ5
MiwxMSArMTQ5MiwxMSBAQCBfX1pON1dlYkNvcmU5RmxvYXRSZWN0QzFFUktOU183SW50UmVjdEUK
IF9fWk43V2ViQ29yZTlGbG9hdFNpemVDMUVSSzZDR1NpemUKIF9fWk43V2ViQ29yZTlGbG9hdFNp
emVDMUVSS05TXzdJbnRTaXplRQogX19aTjdXZWJDb3JlOUZvbnRDYWNoZTEwaW52YWxpZGF0ZUV2
Ci1fX1pON1dlYkNvcmU5Rm9udENhY2hlMTNmb250RGF0YUNvdW50RXYKIF9fWk43V2ViQ29yZTlG
b250Q2FjaGUxM2ZvbnRGb3JGYW1pbHlFUktOU18xNUZvbnREZXNjcmlwdGlvbkVSS04zV1RGMTJB
dG9taWNTdHJpbmdFYgotX19aTjdXZWJDb3JlOUZvbnRDYWNoZTIxaW5hY3RpdmVGb250RGF0YUNv
dW50RXYKK19fWk43V2ViQ29yZTlGb250Q2FjaGUxN2luYWN0aXZlRm9udENvdW50RXYKIF9fWk43
V2ViQ29yZTlGb250Q2FjaGUyMXB1cmdlSW5hY3RpdmVGb250RGF0YUVpCiBfX1pON1dlYkNvcmU5
Rm9udENhY2hlMjlwdXJnZUluYWN0aXZlRm9udERhdGFJZk5lZWRlZEV2CitfX1pON1dlYkNvcmU5
Rm9udENhY2hlOWZvbnRDb3VudEV2CiBfX1pON1dlYkNvcmU5RnJhbWVUcmVlMTFhcHBlbmRDaGls
ZEVOM1dURjEwUGFzc1JlZlB0cklOU181RnJhbWVFRUUKIF9fWk43V2ViQ29yZTlGcmFtZVRyZWU3
c2V0TmFtZUVSS04zV1RGMTJBdG9taWNTdHJpbmdFCiBfX1pON1dlYkNvcmU5RnJhbWVUcmVlOWNs
ZWFyTmFtZUV2CkBAIC0xNjM0LDggKzE2MzQsOCBAQCBfX1pOSzNXVEY2U3RyaW5nMTRjcmVhdGVD
RlN0cmluZ0V2CiBfX1pOSzdXZWJDb3JlMTBDcmVkZW50aWFsMTJuc0NyZWRlbnRpYWxFdgogX19a
Tks3V2ViQ29yZTEwQ3JlZGVudGlhbDdpc0VtcHR5RXYKIF9fWk5LN1dlYkNvcmUxMEZsb2F0UG9p
bnRjdjdDR1BvaW50RXYKLV9fWk5LN1dlYkNvcmUxMEZvbnRSYW5nZXMyMGZvbnREYXRhRm9yQ2hh
cmFjdGVyRWkKLV9fWk5LN1dlYkNvcmUxMEZvbnRSYW5nZXMyMWZvbnREYXRhRm9yRmlyc3RSYW5n
ZUV2CitfX1pOSzdXZWJDb3JlMTBGb250UmFuZ2VzMTZmb250Rm9yQ2hhcmFjdGVyRWkKK19fWk5L
N1dlYkNvcmUxMEZvbnRSYW5nZXMxN2ZvbnRGb3JGaXJzdFJhbmdlRXYKIF9fWk5LN1dlYkNvcmUx
MExheW91dFJlY3Q4Y29udGFpbnNFUktTMF8KIF9fWk5LN1dlYkNvcmUxMFBsdWdpbkRhdGExNnN1
cHBvcnRzTWltZVR5cGVFUktOM1dURjZTdHJpbmdFTlMwXzE4QWxsb3dlZFBsdWdpblR5cGVzRQog
X19aTks3V2ViQ29yZTEwUmVuZGVyVGV4dDE2Zmlyc3RSdW5Mb2NhdGlvbkV2CkBAIC0xNjY1LDcg
KzE2NjUsNyBAQCBfX1pOSzdXZWJDb3JlMTBUaW1lUmFuZ2VzM2VuZEVqUmkKIF9fWk5LN1dlYkNv
cmUxMFRpbWVSYW5nZXM0Y29weUV2CiBfX1pOSzdXZWJDb3JlMTBUaW1lUmFuZ2VzNXN0YXJ0RWpS
aQogX19aTks3V2ViQ29yZTEwVGltZVJhbmdlczZsZW5ndGhFdgotX19aTks3V2ViQ29yZTExRm9u
dENhc2NhZGU1d2lkdGhFUktOU183VGV4dFJ1bkVQTjNXVEY3SGFzaFNldElQS05TXzE0U2ltcGxl
Rm9udERhdGFFTlM0XzdQdHJIYXNoSVM4X0VFTlM0XzEwSGFzaFRyYWl0c0lTOF9FRUVFUE5TXzEz
R2x5cGhPdmVyZmxvd0UKK19fWk5LN1dlYkNvcmUxMUZvbnRDYXNjYWRlNXdpZHRoRVJLTlNfN1Rl
eHRSdW5FUE4zV1RGN0hhc2hTZXRJUEtOU180Rm9udEVOUzRfN1B0ckhhc2hJUzhfRUVOUzRfMTBI
YXNoVHJhaXRzSVM4X0VFRUVQTlNfMTNHbHlwaE92ZXJmbG93RQogX19aTks3V2ViQ29yZTExRm9u
dENhc2NhZGU4ZHJhd1RleHRFUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfN1RleHRSdW5FUktO
U18xMEZsb2F0UG9pbnRFaWlOUzBfMjRDdXN0b21Gb250Tm90UmVhZHlBY3Rpb25FCiBfX1pOSzdX
ZWJDb3JlMTFGb250Q2FzY2FkZWVxRVJLUzBfCiBfX1pOSzdXZWJDb3JlMTFGcmFtZUxvYWRlcjEw
aXNDb21wbGV0ZUV2CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29y
ZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9X
ZWJDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTgwMjcsNiArODAy
Nyw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGbG9h
dFJlY3QuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhp
Y3NcRmxvYXRSb3VuZGVkUmVjdC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxw
bGF0Zm9ybVxncmFwaGljc1xGbG9hdFNpemUuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGb250Q2FjaGUuY3BwIiAvPgogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udENhc2NhZGUuY3BwIiAvPgogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udERlc2NyaXB0aW9u
LmNwcCIgLz4KQEAgLTgwNjksNyArODA3MCw2IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxwbGF0Zm9ybVxncmFwaGljc1xSZWdpb24uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcUm91bmRlZFJlY3QuY3BwIiAvPgogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcU2hhZG93Qmx1ci5jcHAiIC8+Ci0gICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xTaW1wbGVGb250RGF0YS5j
cHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xUZXh0
UnVuLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNz
XFRleHRUcmFja1JlcHJlc2VudGF0aW9uLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXFdPRkZGaWxlRm9ybWF0LmNwcCIgLz4KQEAgLTE5NTE2LDYg
KzE5NTE2LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNz
XEZsb2F0Um91bmRlZFJlY3QuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRm
b3JtXGdyYXBoaWNzXEZsb2F0U2l6ZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cGxhdGZvcm1cZ3JhcGhpY3NcRmxvYXRTaXplSGFzaC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udENhY2hlLmgiIC8+CiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGb250Q2FzY2FkZS5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udERlc2NyaXB0aW9uLmgi
IC8+CkBAIC0xOTU2OCw3ICsxOTU2OSw2IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxw
bGF0Zm9ybVxncmFwaGljc1xSZWdpb24uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHBsYXRmb3JtXGdyYXBoaWNzXFJvdW5kZWRSZWN0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xTaGFkb3dCbHVyLmgiIC8+Ci0gICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xTaW1wbGVGb250RGF0YS5oIiAvPgogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcVGV4dFJ1bi5oIiAvPgog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcVGV4dFRyYWNrUmVw
cmVzZW50YXRpb24uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdy
YXBoaWNzXFVuaXRCZXppZXIuaCIgLz4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtNDcwNSw4ICs0NzA1LDggQEAKIAkJQjJDM0RBNjEwRDAwNkNENjAwRUY2RjI2IC8qIEZv
bnRDYXNjYWRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCMkMzREE1MDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCMkMzREE2MjBEMDA2Q0Q2MDBF
RjZGMjYgLyogRm9udENhY2hlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEIyQzNEQTUxMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FjaGUuY3BwICov
OyB9OwogCQlCMkMzREE2MzBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhY2hlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkMzREE1MjBEMDA2Q0Q2MDBF
RjZGMjYgLyogRm9udENhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKLQkJQjJDM0RBNjQwRDAwNkNENjAwRUY2RjI2IC8qIFNpbXBsZUZvbnREYXRh
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNE
QTUzMEQwMDZDRDYwMEVGNkYyNiAvKiBTaW1wbGVGb250RGF0YS5jcHAgKi87IH07Ci0JCUIyQzNE
QTY1MEQwMDZDRDYwMEVGNkYyNiAvKiBTaW1wbGVGb250RGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBNTQwRDAwNkNENjAwRUY2RjI2IC8q
IFNpbXBsZUZvbnREYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJQjJDM0RBNjQwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBNTMwRDAwNkNENjAw
RUY2RjI2IC8qIEZvbnQuY3BwICovOyB9OworCQlCMkMzREE2NTBEMDA2Q0Q2MDBFRjZGMjYgLyog
Rm9udC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJD
M0RBNTQwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCMkMzREE2NjBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9u
dERlc2NyaXB0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCMkMzREE1NTBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udERlc2NyaXB0aW9uLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjJDM0RBNjcwRDAw
NkNENjAwRUY2RjI2IC8qIEZvbnRHbHlwaHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBNTYwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRHbHlw
aHMuY3BwICovOyB9OwogCQlCMkMzREE2ODBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udEdseXBocy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBNTcw
RDAwNkNENjAwRUY2RjI2IC8qIEZvbnRHbHlwaHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTIwODYsOCArMTIwODYsOCBAQAogCQlCMkMzREE1
MDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEZvbnRDYXNjYWRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUIyQzNEQTUxMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FjaGUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRDYWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUIyQzNEQTUyMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FjaGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRDYWNoZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlCMkMzREE1MzBEMDA2Q0Q2MDBFRjZGMjYgLyogU2ltcGxlRm9udERh
dGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpbXBsZUZvbnRE
YXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjJDM0RBNTQwRDAwNkNENjAw
RUY2RjI2IC8qIFNpbXBsZUZvbnREYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTaW1wbGVGb250RGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCMkMz
REE1MzBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRm9udC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUIy
QzNEQTU0MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBGb250Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQzNEQTU1
MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250RGVzY3JpcHRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEZvbnREZXNjcmlwdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlCMkMzREE1NjBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udEdseXBocy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udEdseXBocy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQzNEQTU3MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250R2x5
cGhzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb250R2x5cGhzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMDU2Myw4ICsyMDU2Myw4IEBACiAJCQkJMzcx
RjRGRkEwRDI1RTdGMzAwRUNFMEQ1IC8qIEZvbnRSYW5nZXMuaCAqLywKIAkJCQkwRjNERDQ0RDEy
RjVFQTFCMDAwRDkxOTAgLyogU2hhZG93Qmx1ci5jcHAgKi8sCiAJCQkJMEYzREQ0NEUxMkY1RUEx
QjAwMEQ5MTkwIC8qIFNoYWRvd0JsdXIuaCAqLywKLQkJCQlCMkMzREE1MzBEMDA2Q0Q2MDBFRjZG
MjYgLyogU2ltcGxlRm9udERhdGEuY3BwICovLAotCQkJCUIyQzNEQTU0MEQwMDZDRDYwMEVGNkYy
NiAvKiBTaW1wbGVGb250RGF0YS5oICovLAorCQkJCUIyQzNEQTUzMEQwMDZDRDYwMEVGNkYyNiAv
KiBGb250LmNwcCAqLywKKwkJCQlCMkMzREE1NDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5oICov
LAogCQkJCUNENjQxRUIyMTgxOEY1RUQwMEVFNEM0MSAvKiBTb3VyY2VCdWZmZXJQcml2YXRlLmgg
Ki8sCiAJCQkJQ0RDOEI1QUMxODA0QUU1RDAwMTZFNjg1IC8qIFNvdXJjZUJ1ZmZlclByaXZhdGVD
bGllbnQuaCAqLywKIAkJCQlCMjM1NDBGMDBEMDA3ODJFMDAyMzgyRkEgLyogU3RyaW5nVHJ1bmNh
dG9yLmNwcCAqLywKQEAgLTI2MDIyLDcgKzI2MDIyLDcgQEAKIAkJCQkxQTRBOTU0RTBCNEVEQ0NC
MDAyRDhDM0MgLyogU2hhcmVkQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0IxRjAyRjEz
QjAyNUQyMDBGNTEwM0YgLyogU2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTkzMzA5RUEzMDk5RUI3OEMwMDU2RTU4MSAvKiBTaGFyZWRUaW1lci5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJQjJDM0RBNjUwRDAwNkNENjAwRUY2RjI2IC8qIFNpbXBsZUZvbnREYXRhLmgg
aW4gSGVhZGVycyAqLywKKwkJCQlCMkMzREE2NTBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRTQ4OTQ0QTMxODBCNTdEODAwRjE2NUQ4IC8qIFNpbXBsZUxpbmVM
YXlvdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0RTlCMTFEMTgxNDU2OUMwMDNBQ0NERiAvKiBT
aW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNEU5QjExOTE4
MTA5MTZGMDAzQUNDREYgLyogU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmggaW4gSGVhZGVycyAq
LywKQEAgLTI5NDU0LDcgKzI5NDU0LDcgQEAKIAkJCQkxQTRBOTU1MjBCNEVEQ0ZGMDAyRDhDM0Mg
LyogU2hhcmVkQnVmZmVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRTQ1MzkwNDYwRUFGRDYz
NzAwMzY5NUM4IC8qIFNoYXJlZFRpbWVySU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlF
QTIwOTlFQjc4QzAwNTZFNTgxIC8qIFNoYXJlZFRpbWVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCi0J
CQkJQjJDM0RBNjQwRDAwNkNENjAwRUY2RjI2IC8qIFNpbXBsZUZvbnREYXRhLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCUIyQzNEQTY0MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTE2M0U4OEY3MTE4QTM5RDIwMEVEOTIzMSAvKiBTaW1wbGVGb250RGF0YUNv
cmVUZXh0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTM3RTY1OTUwMTYzQjEwQzIwMEVCNDU3NCAv
KiBTaW1wbGVGb250RGF0YUlPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUIyQUZGQzdGMEQwMEE1
QzEwMDMwMDc0RCAvKiBTaW1wbGVGb250RGF0YU1hYy5tbSBpbiBTb3VyY2VzICovLApJbmRleDog
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXJJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9p
b3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0JKHJldmlzaW9uIDE3ODg1NykK
KysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVySU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNzU4LDcgKzE3NTgsNyBAQCBzdGF0
aWMgdm9pZCBBWEF0dHJpYnV0ZVN0cmluZ1NldFN0eWxlKE5TCiAgICAgUmVuZGVyU3R5bGUmIHN0
eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7CiAgICAgCiAgICAgLy8gc2V0IGJhc2ljIGZvbnQgaW5m
bwotICAgIEFYQXR0cmlidXRlU3RyaW5nU2V0Rm9udChhdHRyU3RyaW5nLCBzdHlsZS5mb250Q2Fz
Y2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmdldENURm9udCgpLCByYW5nZSk7CisgICAgQVhBdHRy
aWJ1dGVTdHJpbmdTZXRGb250KGF0dHJTdHJpbmcsIHN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFy
eUZvbnQoKS5nZXRDVEZvbnQoKSwgcmFuZ2UpOwogICAgICAgICAgICAgICAgIAogICAgIGludCBk
ZWNvciA9IHN0eWxlLnRleHREZWNvcmF0aW9uc0luRWZmZWN0KCk7CiAgICAgaWYgKChkZWNvciAm
IChUZXh0RGVjb3JhdGlvblVuZGVybGluZSB8IFRleHREZWNvcmF0aW9uTGluZVRocm91Z2gpKSAh
PSAwKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlckJhc2UubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlLm1tCShy
ZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYg
KzQ2LDcgQEAKICNpbXBvcnQgIkNocm9tZUNsaWVudC5oIgogI2ltcG9ydCAiQ29sb3JNYWMuaCIK
ICNpbXBvcnQgIkNvbnRleHRNZW51Q29udHJvbGxlci5oIgorI2ltcG9ydCAiRm9udC5oIgogI2lt
cG9ydCAiRm9udENhc2NhZGUuaCIKICNpbXBvcnQgIkZyYW1lLmgiCiAjaW1wb3J0ICJGcmFtZUxv
YWRlckNsaWVudC5oIgpAQCAtNjMsNyArNjQsNiBAQAogI2ltcG9ydCAiUmVuZGVyVmlldy5oIgog
I2ltcG9ydCAiUmVuZGVyV2lkZ2V0LmgiCiAjaW1wb3J0ICJTY3JvbGxWaWV3LmgiCi0jaW1wb3J0
ICJTaW1wbGVGb250RGF0YS5oIgogI2ltcG9ydCAiVGV4dENoZWNrZXJDbGllbnQuaCIKICNpbXBv
cnQgIlRleHRDaGVja2luZ0hlbHBlci5oIgogI2ltcG9ydCAiVmlzaWJsZVVuaXRzLmgiCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQkocmV2aXNpb24gMTc4ODU3
KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbXBv
cnQgIkNvbG9yTWFjLmgiCiAjaW1wb3J0ICJDb250ZXh0TWVudUNvbnRyb2xsZXIuaCIKICNpbXBv
cnQgIkVkaXRvci5oIgorI2ltcG9ydCAiRm9udC5oIgogI2ltcG9ydCAiRm9udENhc2NhZGUuaCIK
ICNpbXBvcnQgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW1wb3J0ICJGcmFtZVNlbGVjdGlvbi5o
IgpAQCAtNjQsNyArNjUsNiBAQAogI2ltcG9ydCAiUmVuZGVyVmlldy5oIgogI2ltcG9ydCAiUmVu
ZGVyV2lkZ2V0LmgiCiAjaW1wb3J0ICJTY3JvbGxWaWV3LmgiCi0jaW1wb3J0ICJTaW1wbGVGb250
RGF0YS5oIgogI2ltcG9ydCAiVGV4dENoZWNrZXJDbGllbnQuaCIKICNpbXBvcnQgIlRleHRDaGVj
a2luZ0hlbHBlci5oIgogI2ltcG9ydCAiVGV4dEl0ZXJhdG9yLmgiCkBAIC04NDgsNyArODQ4LDcg
QEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVTdHJpbmdTZXRTdHlsZShOUwogICAgIGNvbnN0IFJl
bmRlclN0eWxlJiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwogICAgIAogICAgIC8vIHNldCBi
YXNpYyBmb250IGluZm8KLSAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldEZvbnQoYXR0clN0cmluZywg
TlNBY2Nlc3NpYmlsaXR5Rm9udFRleHRBdHRyaWJ1dGUsIHN0eWxlLmZvbnRDYXNjYWRlKCkucHJp
bWFyeUZvbnREYXRhKCkuZ2V0TlNGb250KCksIHJhbmdlKTsKKyAgICBBWEF0dHJpYnV0ZVN0cmlu
Z1NldEZvbnQoYXR0clN0cmluZywgTlNBY2Nlc3NpYmlsaXR5Rm9udFRleHRBdHRyaWJ1dGUsIHN0
eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKS5nZXROU0ZvbnQoKSwgcmFuZ2UpOwogICAg
IAogICAgIC8vIHNldCBiYXNpYyBjb2xvcnMKICAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldENvbG9y
KGF0dHJTdHJpbmcsIE5TQWNjZXNzaWJpbGl0eUZvcmVncm91bmRDb2xvclRleHRBdHRyaWJ1dGUs
IG5zQ29sb3Ioc3R5bGUudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpKSwg
cmFuZ2UpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0JKHJldmlzaW9uIDE3
ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC02NjksNyArNjY5LDcgQEAgLSAoTlNGb250ICopX2ZvbnQKICAgICBhdXRvIHJlbmRl
cmVyID0gY29yZShzZWxmKS0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAg
ICByZXR1cm4gbmlsOwotICAgIHJldHVybiByZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgp
LnByaW1hcnlGb250RGF0YSgpLmdldE5TRm9udCgpOworICAgIHJldHVybiByZW5kZXJlci0+c3R5
bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCkuZ2V0TlNGb250KCk7CiB9CiAjZWxzZQog
LSAoQ1RGb250UmVmKV9mb250CkBAIC02NzcsNyArNjc3LDcgQEAgLSAoQ1RGb250UmVmKV9mb250
CiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNvcmUoc2VsZiktPnJlbmRlcmVyKCk7CiAg
ICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4gcmVuZGVy
ZXItPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXRDVEZvbnQoKTsK
KyAgICByZXR1cm4gcmVuZGVyZXItPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgp
LmdldENURm9udCgpOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NG
b250RmFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNl
LmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTAgKzMwLDEwIEBACiAjaW5jbHVkZSAiQ1NTRm9u
dFNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ1NTU2VnbWVudGVkRm9udEZhY2UuaCIKICNpbmNsdWRl
ICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGb250RGVzY3JpcHRp
b24uaCIKICNpbmNsdWRlICJGb250TG9hZGVyLmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRG
ZWF0dXJlcy5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtMTA4LDcgKzEwOCw3IEBAIHZvaWQgQ1NTRm9udEZhY2U6OmZvbnRMb2FkZWQo
Q1NTRm9udEZhY2UKICNlbmRpZgogfQogCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBDU1NG
b250RmFjZTo6Z2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24sIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpCitSZWZQdHI8Rm9u
dD4gQ1NTRm9udEZhY2U6OmZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24sIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpCiB7CiAgICAgbV9h
Y3RpdmVTb3VyY2UgPSAwOwogICAgIGlmICghaXNWYWxpZCgpKQpAQCAtMTI0LDcgKzEyNCw3IEBA
IFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IENTU0ZvbnRGYWNlOjoKIAogICAgIHNpemVfdCBz
aXplID0gbV9zb3VyY2VzLnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7
ICsraSkgewotICAgICAgICBpZiAoUmVmUHRyPFNpbXBsZUZvbnREYXRhPiByZXN1bHQgPSBtX3Nv
dXJjZXNbaV0tPmdldEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgc3ludGhldGljQm9sZCwgc3lu
dGhldGljSXRhbGljLCBmb250U2VsZWN0b3IpKSB7CisgICAgICAgIGlmIChSZWZQdHI8Rm9udD4g
cmVzdWx0ID0gbV9zb3VyY2VzW2ldLT5mb250KGZvbnREZXNjcmlwdGlvbiwgc3ludGhldGljQm9s
ZCwgc3ludGhldGljSXRhbGljLCBmb250U2VsZWN0b3IpKSB7CiAgICAgICAgICAgICBtX2FjdGl2
ZVNvdXJjZSA9IG1fc291cmNlc1tpXS5nZXQoKTsKICNpZiBFTkFCTEUoRk9OVF9MT0FEX0VWRU5U
UykKICAgICAgICAgICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLmZvbnRMb2FkRXZlbnRzRW5hYmxlZCgpICYmIG1fbG9hZFN0YXRlID09IExvYWRpbmcgJiYg
bV9zb3VyY2VzW2ldLT5pc0xvYWRlZCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
Rm9udEZhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2Uu
aAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBDU1NTZWdtZW50ZWRGb250RmFjZTsKIGNsYXNzIEZvbnREZXNjcmlwdGlvbjsKLWNsYXNz
IFNpbXBsZUZvbnREYXRhOworY2xhc3MgRm9udDsKIAogY2xhc3MgQ1NTRm9udEZhY2UgOiBwdWJs
aWMgUmVmQ291bnRlZDxDU1NGb250RmFjZT4gewogcHVibGljOgpAQCAtNjUsNyArNjUsNyBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIGZvbnRMb2FkZWQoQ1NTRm9udEZhY2VTb3VyY2UqKTsKIAotICAg
IFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IGdldEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpOworICAgIFJl
ZlB0cjxGb250PiBmb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGJvb2wgc3ludGhldGljQm9s
ZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpOwogCiAgICAgc3RydWN0IFVuaWNvZGVSYW5nZSB7CiAg
ICAgICAgIFVuaWNvZGVSYW5nZShVQ2hhcjMyIGZyb20sIFVDaGFyMzIgdG8pCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5jcHAJKHJldmlzaW9uIDE3ODg1NykKKysr
IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDkgKzMyLDkgQEAKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgogI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRWxlbWVudEl0ZXJhdG9yLmgiCisjaW5jbHVk
ZSAiRm9udC5oIgogI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgogI2luY2x1ZGUgIkZvbnREZXNjcmlw
dGlvbi5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAKICNpZiBFTkFCTEUoU1ZHX09U
Rl9DT05WRVJURVIpCiAjaW5jbHVkZSAiRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oIgpAQCAtNzQs
MTAgKzc0LDEwIEBAIENTU0ZvbnRGYWNlU291cmNlOjp+Q1NTRm9udEZhY2VTb3VyY2UoKQogCiB2
b2lkIENTU0ZvbnRGYWNlU291cmNlOjpwcnVuZVRhYmxlKCkKIHsKLSAgICBpZiAobV9mb250RGF0
YVRhYmxlLmlzRW1wdHkoKSkKKyAgICBpZiAobV9mb250VGFibGUuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBtX2ZvbnREYXRhVGFibGUuY2xlYXIoKTsKKyAgICBtX2ZvbnRUYWJs
ZS5jbGVhcigpOwogfQogCiBib29sIENTU0ZvbnRGYWNlU291cmNlOjppc0xvYWRlZCgpIGNvbnN0
CkBAIC0xMDEsNyArMTAxLDcgQEAgdm9pZCBDU1NGb250RmFjZVNvdXJjZTo6Zm9udExvYWRlZChD
YWNoZQogICAgICAgICBtX2ZhY2UtPmZvbnRMb2FkZWQodGhpcyk7CiB9CiAKLVBhc3NSZWZQdHI8
U2ltcGxlRm9udERhdGE+IENTU0ZvbnRGYWNlU291cmNlOjpnZXRGb250RGF0YShjb25zdCBGb250
RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5
bnRoZXRpY0l0YWxpYywgQ1NTRm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IpCitSZWZQdHI8Rm9u
dD4gQ1NTRm9udEZhY2VTb3VyY2U6OmZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVz
Y3JpcHRpb24sIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMsIENTU0Zv
bnRTZWxlY3RvciogZm9udFNlbGVjdG9yKQogewogICAgIC8vIElmIHRoZSBmb250IGhhc24ndCBs
b2FkZWQgb3IgYW4gZXJyb3Igb2NjdXJyZWQsIHRoZW4gd2UndmUgZ290IG5vdGhpbmcuCiAgICAg
aWYgKCFpc1ZhbGlkKCkpCkBAIC0xMTIsMTggKzExMiwxNyBAQCBQYXNzUmVmUHRyPFNpbXBsZUZv
bnREYXRhPiBDU1NGb250RmFjZVNvCiAgICAgICAgICAgICAmJiAhbV9zdmdGb250RmFjZUVsZW1l
bnQKICNlbmRpZgogICAgICkgewotICAgICAgICAvLyBXZSdyZSBsb2NhbC4gSnVzdCByZXR1cm4g
YSBTaW1wbGVGb250RGF0YSBmcm9tIHRoZSBub3JtYWwgY2FjaGUuCisgICAgICAgIC8vIFdlJ3Jl
IGxvY2FsLiBKdXN0IHJldHVybiBhIEZvbnQgZnJvbSB0aGUgbm9ybWFsIGNhY2hlLgogICAgICAg
ICAvLyBXZSBkb24ndCB3YW50IHRvIGNoZWNrIGFsdGVybmF0ZSBmb250IGZhbWlseSBuYW1lcyBo
ZXJlLCBzbyBwYXNzIHRydWUgYXMgdGhlIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSBwYXJhbWV0ZXIu
CiAgICAgICAgIHJldHVybiBmb250Q2FjaGUoKS5mb250Rm9yRmFtaWx5KGZvbnREZXNjcmlwdGlv
biwgbV9zdHJpbmcsIHRydWUpOwogICAgIH0KIAotICAgIC8vIFNlZSBpZiB3ZSBoYXZlIGEgbWFw
cGluZyBpbiBvdXIgRm9udERhdGEgY2FjaGUuCiAgICAgdW5zaWduZWQgaGFzaEtleSA9IChmb250
RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSArIDEpIDw8IDUgfCBmb250RGVzY3JpcHRp
b24ud2lkdGhWYXJpYW50KCkgPDwgMwogICAgICAgICAgICAgICAgICAgICAgICB8IChmb250RGVz
Y3JpcHRpb24ub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCA/IDQgOiAwKSB8IChzeW50aGV0aWNC
b2xkID8gMiA6IDApIHwgKHN5bnRoZXRpY0l0YWxpYyA/IDEgOiAwKTsKIAotICAgIFJlZlB0cjxT
aW1wbGVGb250RGF0YT4gZm9udERhdGEgPSBtX2ZvbnREYXRhVGFibGUuYWRkKGhhc2hLZXksIG51
bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKLSAgICBpZiAoZm9udERhdGEpCi0gICAgICAgIHJldHVy
biBmb250RGF0YS5yZWxlYXNlKCk7CisgICAgUmVmUHRyPEZvbnQ+IGZvbnQgPSBtX2ZvbnRUYWJs
ZS5hZGQoaGFzaEtleSwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOworICAgIGlmIChmb250KQor
ICAgICAgICByZXR1cm4gZm9udC5yZWxlYXNlKCk7CiAKICAgICAvLyBJZiB3ZSBhcmUgc3RpbGwg
bG9hZGluZywgdGhlbiB3ZSBsZXQgdGhlIHN5c3RlbSBwaWNrIGEgZm9udC4KICAgICBpZiAoaXNM
b2FkZWQoKSkgewpAQCAtMTM2LDcgKzEzNSw3IEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+
IENTU0ZvbnRGYWNlU28KICAgICAgICAgICAgIGlmICghbV9mb250LT5lbnN1cmVDdXN0b21Gb250
RGF0YShoYXNFeHRlcm5hbFNWR0ZvbnQsIG1fc3RyaW5nKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAotICAgICAgICAgICAgZm9udERhdGEgPSBtX2ZvbnQtPmdldEZvbnREYXRh
KGZvbnREZXNjcmlwdGlvbiwgbV9zdHJpbmcsIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxp
YywgaGFzRXh0ZXJuYWxTVkdGb250KTsKKyAgICAgICAgICAgIGZvbnQgPSBtX2ZvbnQtPmNyZWF0
ZUZvbnQoZm9udERlc2NyaXB0aW9uLCBtX3N0cmluZywgc3ludGhldGljQm9sZCwgc3ludGhldGlj
SXRhbGljLCBoYXNFeHRlcm5hbFNWR0ZvbnQpOwogICAgICAgICB9IGVsc2UgewogI2lmIEVOQUJM
RShTVkdfRk9OVFMpCiAgICAgICAgICAgICAvLyBJbi1Eb2N1bWVudCBTVkcgRm9udHMKQEAgLTE1
Miw5ICsxNTEsOSBAQCBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBDU1NGb250RmFjZVNvCiAg
ICAgICAgICAgICAgICAgaWYgKCFtX2dlbmVyYXRlZE9URkJ1ZmZlcikKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEZv
bnRDdXN0b21QbGF0Zm9ybURhdGE+IGN1c3RvbVBsYXRmb3JtRGF0YSA9IGNyZWF0ZUZvbnRDdXN0
b21QbGF0Zm9ybURhdGEoKm1fZ2VuZXJhdGVkT1RGQnVmZmVyKTsKLSAgICAgICAgICAgICAgICBm
b250RGF0YSA9IFNpbXBsZUZvbnREYXRhOjpjcmVhdGUoY3VzdG9tUGxhdGZvcm1EYXRhLT5mb250
UGxhdGZvcm1EYXRhKHN0YXRpY19jYXN0PGludD4oZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4
ZWxTaXplKCkpLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMsIGZvbnREZXNjcmlwdGlv
bi5vcmllbnRhdGlvbigpLCBmb250RGVzY3JpcHRpb24ud2lkdGhWYXJpYW50KCksIGZvbnREZXNj
cmlwdGlvbi5yZW5kZXJpbmdNb2RlKCkpLCB0cnVlLCBmYWxzZSk7CisgICAgICAgICAgICAgICAg
Zm9udCA9IEZvbnQ6OmNyZWF0ZShjdXN0b21QbGF0Zm9ybURhdGEtPmZvbnRQbGF0Zm9ybURhdGEo
c3RhdGljX2Nhc3Q8aW50Pihmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSksIHN5
bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYywgZm9udERlc2NyaXB0aW9uLm9yaWVudGF0aW9u
KCksIGZvbnREZXNjcmlwdGlvbi53aWR0aFZhcmlhbnQoKSwgZm9udERlc2NyaXB0aW9uLnJlbmRl
cmluZ01vZGUoKSksIHRydWUsIGZhbHNlKTsKICNlbHNlCi0gICAgICAgICAgICAgICAgZm9udERh
dGEgPSBTaW1wbGVGb250RGF0YTo6Y3JlYXRlKHN0ZDo6bWFrZV91bmlxdWU8U1ZHRm9udERhdGE+
KG1fc3ZnRm9udEZhY2VFbGVtZW50LmdldCgpKSwgZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4
ZWxTaXplKCksIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYyk7CisgICAgICAgICAgICAg
ICAgZm9udCA9IEZvbnQ6OmNyZWF0ZShzdGQ6Om1ha2VfdW5pcXVlPFNWR0ZvbnREYXRhPihtX3N2
Z0ZvbnRGYWNlRWxlbWVudC5nZXQoKSksIGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6
ZSgpLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMpOwogI2VuZGlmCiAgICAgICAgICAg
ICB9CiAjZW5kaWYKQEAgLTE2NCwxMiArMTYzLDEyIEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERh
dGE+IENTU0ZvbnRGYWNlU28KICAgICAgICAgLy8gYW5kIHRoZSBsb2FkZXIgbWF5IGludm9rZSBh
cmJpdHJhcnkgZGVsZWdhdGUgb3IgZXZlbnQgaGFuZGxlciBjb2RlLgogICAgICAgICBmb250U2Vs
ZWN0b3ItPmJlZ2luTG9hZGluZ0ZvbnRTb29uKG1fZm9udC5nZXQoKSk7CiAKLSAgICAgICAgUmVm
PFNpbXBsZUZvbnREYXRhPiBwbGFjZWhvbGRlckZvbnQgPSBmb250Q2FjaGUoKS5sYXN0UmVzb3J0
RmFsbGJhY2tGb250KGZvbnREZXNjcmlwdGlvbik7Ci0gICAgICAgIFJlZjxTaW1wbGVGb250RGF0
YT4gcGxhY2Vob2xkZXJGb250Q29weUluTG9hZGluZ1N0YXRlID0gU2ltcGxlRm9udERhdGE6OmNy
ZWF0ZShwbGFjZWhvbGRlckZvbnQtPnBsYXRmb3JtRGF0YSgpLCB0cnVlLCB0cnVlKTsKKyAgICAg
ICAgUmVmPEZvbnQ+IHBsYWNlaG9sZGVyRm9udCA9IGZvbnRDYWNoZSgpLmxhc3RSZXNvcnRGYWxs
YmFja0ZvbnQoZm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgUmVmPEZvbnQ+IHBsYWNlaG9sZGVy
Rm9udENvcHlJbkxvYWRpbmdTdGF0ZSA9IEZvbnQ6OmNyZWF0ZShwbGFjZWhvbGRlckZvbnQtPnBs
YXRmb3JtRGF0YSgpLCB0cnVlLCB0cnVlKTsKICAgICAgICAgcmV0dXJuIFdURjo6bW92ZShwbGFj
ZWhvbGRlckZvbnRDb3B5SW5Mb2FkaW5nU3RhdGUpOwogICAgIH0KIAotICAgIHJldHVybiBmb250
RGF0YS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIGZvbnQucmVsZWFzZSgpOwogfQogCiAjaWYgRU5B
QkxFKEZPTlRfTE9BRF9FVkVOVFMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZh
Y2VTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VT
b3VyY2UuaAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRG
YWNlU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDggKzQyLDggQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogY2xhc3MgQ2FjaGVkRm9udDsKIGNsYXNzIENTU0ZvbnRGYWNlOwogY2xhc3MgQ1NT
Rm9udFNlbGVjdG9yOworY2xhc3MgRm9udDsKIGNsYXNzIEZvbnREZXNjcmlwdGlvbjsKLWNsYXNz
IFNpbXBsZUZvbnREYXRhOwogCiBjbGFzcyBDU1NGb250RmFjZVNvdXJjZSBmaW5hbCA6IHB1Ymxp
YyBDYWNoZWRGb250Q2xpZW50IHsKIHB1YmxpYzoKQEAgLTU5LDcgKzU5LDcgQEAgcHVibGljOgog
CiAgICAgdmlydHVhbCB2b2lkIGZvbnRMb2FkZWQoQ2FjaGVkRm9udCopIG92ZXJyaWRlOwogCi0g
ICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gZ2V0Rm9udERhdGEoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYywgQ1NTRm9u
dFNlbGVjdG9yKik7CisgICAgUmVmUHRyPEZvbnQ+IGZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9u
JiwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYywgQ1NTRm9udFNlbGVj
dG9yKik7CiAKICAgICB2b2lkIHBydW5lVGFibGUoKTsKIApAQCAtODEsNyArODEsNyBAQCBwcml2
YXRlOgogICAgIEF0b21pY1N0cmluZyBtX3N0cmluZzsgLy8gVVJJIGZvciByZW1vdGUsIGJ1aWx0
LWluIGZvbnQgbmFtZSBmb3IgbG9jYWwuCiAgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVk
Rm9udD4gbV9mb250OyAvLyBGb3IgcmVtb3RlIGZvbnRzLCBhIHBvaW50ZXIgdG8gb3VyIGNhY2hl
ZCByZXNvdXJjZS4KICAgICBDU1NGb250RmFjZSogbV9mYWNlOyAvLyBPdXIgb3duaW5nIGZvbnQg
ZmFjZS4KLSAgICBIYXNoTWFwPHVuc2lnbmVkLCBSZWZQdHI8U2ltcGxlRm9udERhdGE+PiBtX2Zv
bnREYXRhVGFibGU7IC8vIFRoZSBoYXNoIGtleSBpcyBjb21wb3NlZCBvZiBzaXplIHN5bnRoZXRp
YyBzdHlsZXMuCisgICAgSGFzaE1hcDx1bnNpZ25lZCwgUmVmUHRyPEZvbnQ+PiBtX2ZvbnRUYWJs
ZTsgLy8gVGhlIGhhc2gga2V5IGlzIGNvbXBvc2VkIG9mIHNpemUgc3ludGhldGljIHN0eWxlcy4K
IAogI2lmIEVOQUJMRShTVkdfT1RGX0NPTlZFUlRFUikKICAgICBSZWZQdHI8U2hhcmVkQnVmZmVy
PiBtX2dlbmVyYXRlZE9URkJ1ZmZlcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250
U2VsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2Vs
ZWN0b3IuY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9u
dFNlbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTMgKzQwLDEzIEBACiAjaW5jbHVk
ZSAiQ1NTVmFsdWVMaXN0LmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKICNp
bmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGb250Q2Fj
aGUuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5j
bHVkZSAiU1ZHRm9udEZhY2VFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNs
dWRlICJTZXR0aW5ncy5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5jbHVkZSAi
U3R5bGVQcm9wZXJ0aWVzLmgiCiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUg
IlN0eWxlUnVsZS5oIgpAQCAtNjEyLDcgKzYxMiw3IEBAIGJvb2wgQ1NTRm9udFNlbGVjdG9yOjpy
ZXNvbHZlc0ZhbWlseUZvcigKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXNpemVfdCBDU1NGb250
U2VsZWN0b3I6OmZhbGxiYWNrRm9udERhdGFDb3VudCgpCitzaXplX3QgQ1NTRm9udFNlbGVjdG9y
OjpmYWxsYmFja0ZvbnRDb3VudCgpCiB7CiAgICAgaWYgKCFtX2RvY3VtZW50KQogICAgICAgICBy
ZXR1cm4gMDsKQEAgLTYyMyw3ICs2MjMsNyBAQCBzaXplX3QgQ1NTRm9udFNlbGVjdG9yOjpmYWxs
YmFja0ZvbnREYXRhCiAgICAgcmV0dXJuIDA7CiB9CiAKLVBhc3NSZWZQdHI8U2ltcGxlRm9udERh
dGE+IENTU0ZvbnRTZWxlY3Rvcjo6ZmFsbGJhY2tGb250RGF0YUF0KGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZm9udERlc2NyaXB0aW9uLCBzaXplX3QgaW5kZXgpCitQYXNzUmVmUHRyPEZvbnQ+IENT
U0ZvbnRTZWxlY3Rvcjo6ZmFsbGJhY2tGb250QXQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHRpb24sIHNpemVfdCBpbmRleCkKIHsKICAgICBBU1NFUlRfVU5VU0VEKGluZGV4LCAh
aW5kZXgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5oCShyZXZpc2lv
biAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI3LDggKzI3LDggQEAKICNkZWZpbmUgQ1NTRm9udFNlbGVjdG9yX2gKIAog
I2luY2x1ZGUgIkNhY2hlZFJlc291cmNlSGFuZGxlLmgiCisjaW5jbHVkZSAiRm9udC5oIgogI2lu
Y2x1ZGUgIkZvbnRTZWxlY3Rvci5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5j
bHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KQEAgLTU5LDggKzU5LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdW5zaWduZWQgdW5pcXVl
SWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3VuaXF1ZUlkOyB9CiAKICAgICB2aXJ0dWFs
IEZvbnRSYW5nZXMgZm9udFJhbmdlc0ZvckZhbWlseShjb25zdCBGb250RGVzY3JpcHRpb24mLCBj
b25zdCBBdG9taWNTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHNpemVfdCBmYWxsYmFj
a0ZvbnREYXRhQ291bnQoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U2ltcGxl
Rm9udERhdGE+IGZhbGxiYWNrRm9udERhdGFBdChjb25zdCBGb250RGVzY3JpcHRpb24mLCBzaXpl
X3QpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgc2l6ZV90IGZhbGxiYWNrRm9udENvdW50KCkgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEZvbnQ+IGZhbGxiYWNrRm9udEF0KGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYsIHNpemVfdCkgb3ZlcnJpZGU7CiAgICAgQ1NTU2VnbWVudGVkRm9u
dEZhY2UqIGdldEZvbnRGYWNlKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0
cmluZyYgZmFtaWx5KTsKIAogICAgIHZpcnR1YWwgYm9vbCByZXNvbHZlc0ZhbWlseUZvcihjb25z
dCBGb250RGVzY3JpcHRpb24mKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291
cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzAsOSArMzAsOSBAQAogI2luY2x1ZGUgIkNTU0ZvbnRGYWNlU291cmNlLmgiCiAjaW5jbHVk
ZSAiQ1NTRm9udFNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJG
b250LmgiCiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiUnVudGltZUVu
YWJsZWRGZWF0dXJlcy5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApAQCAtOTAsMjEgKzkwLDIxIEBAIHZvaWQgQ1NTU2VnbWVudGVkRm9udEZh
Y2U6OmFwcGVuZEZvbnRGYWMKICAgICBtX2ZvbnRGYWNlcy5hcHBlbmQoZm9udEZhY2UpOwogfQog
Ci1zdGF0aWMgdm9pZCBhcHBlbmRGb250RGF0YVdpdGhJbnZhbGlkVW5pY29kZVJhbmdlSWZMb2Fk
aW5nKEZvbnRSYW5nZXMmIHJhbmdlcywgUmVmPFNpbXBsZUZvbnREYXRhPiYmIGZvbnREYXRhLCBj
b25zdCBWZWN0b3I8Q1NTRm9udEZhY2U6OlVuaWNvZGVSYW5nZT4mIHVuaWNvZGVSYW5nZXMpCitz
dGF0aWMgdm9pZCBhcHBlbmRGb250V2l0aEludmFsaWRVbmljb2RlUmFuZ2VJZkxvYWRpbmcoRm9u
dFJhbmdlcyYgcmFuZ2VzLCBSZWY8Rm9udD4mJiBmb250LCBjb25zdCBWZWN0b3I8Q1NTRm9udEZh
Y2U6OlVuaWNvZGVSYW5nZT4mIHVuaWNvZGVSYW5nZXMpCiB7Ci0gICAgaWYgKGZvbnREYXRhLT5p
c0xvYWRpbmcoKSkgewotICAgICAgICByYW5nZXMuYXBwZW5kUmFuZ2UoRm9udFJhbmdlczo6UmFu
Z2UoMCwgMCwgV1RGOjptb3ZlKGZvbnREYXRhKSkpOworICAgIGlmIChmb250LT5pc0xvYWRpbmco
KSkgeworICAgICAgICByYW5nZXMuYXBwZW5kUmFuZ2UoRm9udFJhbmdlczo6UmFuZ2UoMCwgMCwg
V1RGOjptb3ZlKGZvbnQpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICB1bnNpZ25l
ZCBudW1SYW5nZXMgPSB1bmljb2RlUmFuZ2VzLnNpemUoKTsKICAgICBpZiAoIW51bVJhbmdlcykg
ewotICAgICAgICByYW5nZXMuYXBwZW5kUmFuZ2UoRm9udFJhbmdlczo6UmFuZ2UoMCwgMHg3RkZG
RkZGRiwgV1RGOjptb3ZlKGZvbnREYXRhKSkpOworICAgICAgICByYW5nZXMuYXBwZW5kUmFuZ2Uo
Rm9udFJhbmdlczo6UmFuZ2UoMCwgMHg3RkZGRkZGRiwgV1RGOjptb3ZlKGZvbnQpKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgbnVtUmFu
Z2VzOyArK2opCi0gICAgICAgIHJhbmdlcy5hcHBlbmRSYW5nZShGb250UmFuZ2VzOjpSYW5nZSh1
bmljb2RlUmFuZ2VzW2pdLmZyb20oKSwgdW5pY29kZVJhbmdlc1tqXS50bygpLCBmb250RGF0YS5j
b3B5UmVmKCkpKTsKKyAgICAgICAgcmFuZ2VzLmFwcGVuZFJhbmdlKEZvbnRSYW5nZXM6OlJhbmdl
KHVuaWNvZGVSYW5nZXNbal0uZnJvbSgpLCB1bmljb2RlUmFuZ2VzW2pdLnRvKCksIGZvbnQuY29w
eVJlZigpKSk7CiB9CiAKIEZvbnRSYW5nZXMgQ1NTU2VnbWVudGVkRm9udEZhY2U6OmZvbnRSYW5n
ZXMoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pCkBAIC0xMjgsOCArMTI4
LDggQEAgRm9udFJhbmdlcyBDU1NTZWdtZW50ZWRGb250RmFjZTo6Zm9udFJhbgogICAgICAgICAg
ICAgRm9udFRyYWl0c01hc2sgdHJhaXRzTWFzayA9IGZhY2UtPnRyYWl0c01hc2soKTsKICAgICAg
ICAgICAgIGJvb2wgc3ludGhldGljQm9sZCA9ICEodHJhaXRzTWFzayAmIChGb250V2VpZ2h0NjAw
TWFzayB8IEZvbnRXZWlnaHQ3MDBNYXNrIHwgRm9udFdlaWdodDgwME1hc2sgfCBGb250V2VpZ2h0
OTAwTWFzaykpICYmIChkZXNpcmVkVHJhaXRzTWFzayAmIChGb250V2VpZ2h0NjAwTWFzayB8IEZv
bnRXZWlnaHQ3MDBNYXNrIHwgRm9udFdlaWdodDgwME1hc2sgfCBGb250V2VpZ2h0OTAwTWFzaykp
OwogICAgICAgICAgICAgYm9vbCBzeW50aGV0aWNJdGFsaWMgPSAhKHRyYWl0c01hc2sgJiBGb250
U3R5bGVJdGFsaWNNYXNrKSAmJiAoZGVzaXJlZFRyYWl0c01hc2sgJiBGb250U3R5bGVJdGFsaWNN
YXNrKTsKLSAgICAgICAgICAgIGlmIChSZWZQdHI8U2ltcGxlRm9udERhdGE+IGZhY2VGb250RGF0
YSA9IGZhY2UtPmdldEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgc3ludGhldGljQm9sZCwgc3lu
dGhldGljSXRhbGljKSkKLSAgICAgICAgICAgICAgICBhcHBlbmRGb250RGF0YVdpdGhJbnZhbGlk
VW5pY29kZVJhbmdlSWZMb2FkaW5nKGZvbnRSYW5nZXMsIGZhY2VGb250RGF0YS5yZWxlYXNlTm9u
TnVsbCgpLCBmYWNlLT5yYW5nZXMoKSk7CisgICAgICAgICAgICBpZiAoUmVmUHRyPEZvbnQ+IGZh
Y2VGb250ID0gZmFjZS0+Zm9udChmb250RGVzY3JpcHRpb24sIHN5bnRoZXRpY0JvbGQsIHN5bnRo
ZXRpY0l0YWxpYykpCisgICAgICAgICAgICAgICAgYXBwZW5kRm9udFdpdGhJbnZhbGlkVW5pY29k
ZVJhbmdlSWZMb2FkaW5nKGZvbnRSYW5nZXMsIGZhY2VGb250LnJlbGVhc2VOb25OdWxsKCksIGZh
Y2UtPnJhbmdlcygpKTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gZm9udFJhbmdlczsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBA
QCBjbGFzcyBIaXRUZXN0UmVzdWx0OwogY2xhc3MgS2lsbFJpbmc7CiBjbGFzcyBQYXN0ZWJvYXJk
OwogY2xhc3MgU2hhcmVkQnVmZmVyOwotY2xhc3MgU2ltcGxlRm9udERhdGE7CitjbGFzcyBGb250
OwogY2xhc3MgU3BlbGxDaGVja1JlcXVlc3Q7CiBjbGFzcyBTcGVsbENoZWNrZXI7CiBjbGFzcyBT
dHlsZVByb3BlcnRpZXM7CkBAIC00MjIsNyArNDIyLDcgQEAgcHVibGljOgogI2lmIFBMQVRGT1JN
KENPQ09BKQogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZW5kZXJTdHlsZSogc3R5bGVGb3JT
ZWxlY3Rpb25TdGFydChGcmFtZSogLCBOb2RlICombm9kZVRvUmVtb3ZlKTsKICAgICBXRUJDT1JF
X0VYUE9SVCBib29sIGluc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVvdGVkQ29udGVudCgpOwot
ICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250Rm9yU2VsZWN0aW9u
KGJvb2wmKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBGb250KiBmb250Rm9yU2Vs
ZWN0aW9uKGJvb2wmKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBOU0RpY3Rpb25hcnkgKmZv
bnRBdHRyaWJ1dGVzRm9yU2VsZWN0aW9uU3RhcnQoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9S
VCBTdHJpbmcgc3RyaW5nU2VsZWN0aW9uRm9yUGFzdGVib2FyZCgpOwogICAgIFN0cmluZyBzdHJp
bmdTZWxlY3Rpb25Gb3JQYXN0ZWJvYXJkV2l0aEltYWdlQWx0VGV4dCgpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbQkocmV2aXNpb24gMTc4
ODU3KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTE0LDcgKzExMTQsNyBAQCBzdGF0aWMgUGxhdGZvcm1Gb250ICpf
Zm9udChFbGVtZW50JiBlbGVtCiAgICAgYXV0byByZW5kZXJlciA9IGVsZW1lbnQucmVuZGVyZXIo
KTsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiBy
ZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmdldE5TRm9u
dCgpOworICAgIHJldHVybiByZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlG
b250KCkuZ2V0TlNGb250KCk7CiB9CiAjZWxzZQogc3RhdGljIFBsYXRmb3JtRm9udCAqX2ZvbnQo
RWxlbWVudCYgZWxlbWVudCkKQEAgLTExMjIsNyArMTEyMiw3IEBAIHN0YXRpYyBQbGF0Zm9ybUZv
bnQgKl9mb250KEVsZW1lbnQmIGVsZW0KICAgICBhdXRvIHJlbmRlcmVyID0gZWxlbWVudC5yZW5k
ZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgcmV0
dXJuIChQbGF0Zm9ybUZvbnQgKilyZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1h
cnlGb250RGF0YSgpLmdldENURm9udCgpOworICAgIHJldHVybiAoUGxhdGZvcm1Gb250ICopcmVu
ZGVyZXItPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpLmdldENURm9udCgpOwog
fQogI2VuZGlmCiAKQEAgLTI1OTQsMTAgKzI1OTQsMTAgQEAgTlNBdHRyaWJ1dGVkU3RyaW5nICpl
ZGl0aW5nQXR0cmlidXRlZFN0cgogICAgICAgICAgICAgW2F0dHJzLmdldCgpIHNldE9iamVjdDpb
TlNOdW1iZXIgbnVtYmVyV2l0aEludGVnZXI6TlNVbmRlcmxpbmVTdHlsZVNpbmdsZV0gZm9yS2V5
Ok5TVW5kZXJsaW5lU3R5bGVBdHRyaWJ1dGVOYW1lXTsKICAgICAgICAgaWYgKHN0eWxlLnRleHRE
ZWNvcmF0aW9uc0luRWZmZWN0KCkgJiBUZXh0RGVjb3JhdGlvbkxpbmVUaHJvdWdoKQogICAgICAg
ICAgICAgW2F0dHJzLmdldCgpIHNldE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aEludGVnZXI6
TlNVbmRlcmxpbmVTdHlsZVNpbmdsZV0gZm9yS2V5Ok5TU3RyaWtldGhyb3VnaFN0eWxlQXR0cmli
dXRlTmFtZV07Ci0gICAgICAgIGlmIChOU0ZvbnQgKmZvbnQgPSBzdHlsZS5mb250Q2FzY2FkZSgp
LnByaW1hcnlGb250RGF0YSgpLmdldE5TRm9udCgpKQorICAgICAgICBpZiAoTlNGb250ICpmb250
ID0gc3R5bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpLmdldE5TRm9udCgpKQogICAgICAg
ICAgICAgW2F0dHJzLmdldCgpIHNldE9iamVjdDpmb250IGZvcktleTpOU0ZvbnRBdHRyaWJ1dGVO
YW1lXTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgW2F0dHJzLmdldCgpIHNldE9iamVjdDpb
Zm9udE1hbmFnZXIgY29udmVydEZvbnQ6V2ViRGVmYXVsdEZvbnQoKSB0b1NpemU6c3R5bGUuZm9u
dENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5wbGF0Zm9ybURhdGEoKS5zaXplKCldIGZvcktl
eTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKKyAgICAgICAgICAgIFthdHRycy5nZXQoKSBzZXRPYmpl
Y3Q6W2ZvbnRNYW5hZ2VyIGNvbnZlcnRGb250OldlYkRlZmF1bHRGb250KCkgdG9TaXplOnN0eWxl
LmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKS5wbGF0Zm9ybURhdGEoKS5zaXplKCldIGZvcktl
eTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKICAgICAgICAgaWYgKHN0eWxlLnZpc2l0ZWREZXBlbmRl
bnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKS5hbHBoYSgpKQogICAgICAgICAgICAgW2F0dHJzLmdl
dCgpIHNldE9iamVjdDpuc0NvbG9yKHN0eWxlLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9w
ZXJ0eUNvbG9yKSkgZm9yS2V5Ok5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07CiAgICAg
ICAgIGVsc2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0JKHJl
dmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5t
bQkod29ya2luZyBjb3B5KQpAQCAtMjAzLDcgKzIwMyw3IEBAIGJvb2wgRWRpdG9yOjppbnNlcnRQ
YXJhZ3JhcGhTZXBhcmF0b3JJblEKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotY29uc3QgU2ltcGxl
Rm9udERhdGEqIEVkaXRvcjo6Zm9udEZvclNlbGVjdGlvbihib29sJiBoYXNNdWx0aXBsZUZvbnRz
KSBjb25zdAorY29uc3QgRm9udCogRWRpdG9yOjpmb250Rm9yU2VsZWN0aW9uKGJvb2wmIGhhc011
bHRpcGxlRm9udHMpIGNvbnN0CiB7CiAgICAgaGFzTXVsdGlwbGVGb250cyA9IGZhbHNlOwogCkBA
IC0yMTEsOSArMjExLDkgQEAgY29uc3QgU2ltcGxlRm9udERhdGEqIEVkaXRvcjo6Zm9udEZvclNl
bAogICAgICAgICBOb2RlKiBub2RlVG9SZW1vdmU7CiAgICAgICAgIFJlbmRlclN0eWxlKiBzdHls
ZSA9IHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQoJm1fZnJhbWUsIG5vZGVUb1JlbW92ZSk7IC8vIHNl
dHMgbm9kZVRvUmVtb3ZlCiAKLSAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIHJlc3VsdCA9
IG51bGxwdHI7CisgICAgICAgIGNvbnN0IEZvbnQqIHJlc3VsdCA9IG51bGxwdHI7CiAgICAgICAg
IGlmIChzdHlsZSkKLSAgICAgICAgICAgIHJlc3VsdCA9ICZzdHlsZS0+Zm9udENhc2NhZGUoKS5w
cmltYXJ5Rm9udERhdGEoKTsKKyAgICAgICAgICAgIHJlc3VsdCA9ICZzdHlsZS0+Zm9udENhc2Nh
ZGUoKS5wcmltYXJ5Rm9udCgpOwogCiAgICAgICAgIGlmIChub2RlVG9SZW1vdmUpIHsKICAgICAg
ICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7CkBAIC0yMjQsNyArMjI0LDcgQEAgY29uc3QgU2ltcGxl
Rm9udERhdGEqIEVkaXRvcjo6Zm9udEZvclNlbAogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
IH0KIAotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250ID0gMDsKKyAgICBjb25zdCBGb250
KiBmb250ID0gMDsKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gbV9mcmFtZS5zZWxlY3Rpb24o
KS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmIChOb2RlKiBzdGFydE5vZGUgPSBhZGp1c3Rl
ZFNlbGVjdGlvblN0YXJ0Rm9yU3R5bGVDb21wdXRhdGlvbihtX2ZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpKS5kZXByZWNhdGVkTm9kZSgpKSB7CiAgICAgICAgIE5vZGUqIHBhc3RFbmQgPSBy
YW5nZS0+cGFzdExhc3ROb2RlKCk7CkBAIC0yMzUsNyArMjM1LDcgQEAgY29uc3QgU2ltcGxlRm9u
dERhdGEqIEVkaXRvcjo6Zm9udEZvclNlbAogICAgICAgICAgICAgaWYgKCFyZW5kZXJlcikKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBBcmUgdGhlcmUg
YW55IG5vZGUgdHlwZXMgdGhhdCBoYXZlIHJlbmRlcmVycywgYnV0IHRoYXQgd2Ugc2hvdWxkIGJl
IHNraXBwaW5nPwotICAgICAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEmIHByaW1hcnlGb250
ID0gcmVuZGVyZXItPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKTsKKyAg
ICAgICAgICAgIGNvbnN0IEZvbnQmIHByaW1hcnlGb250ID0gcmVuZGVyZXItPnN0eWxlKCkuZm9u
dENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpOwogICAgICAgICAgICAgaWYgKCFmb250KQogICAgICAg
ICAgICAgICAgIGZvbnQgPSAmcHJpbWFyeUZvbnQ7CiAgICAgICAgICAgICBlbHNlIGlmIChmb250
ICE9ICZwcmltYXJ5Rm9udCkgewpAQCAtMjU3LDcgKzI1Nyw3IEBAIE5TRGljdGlvbmFyeSogRWRp
dG9yOjpmb250QXR0cmlidXRlc0ZvclMKIAogICAgIE5TTXV0YWJsZURpY3Rpb25hcnkqIHJlc3Vs
dCA9IFtOU011dGFibGVEaWN0aW9uYXJ5IGRpY3Rpb25hcnldOwogICAgIAotICAgIENURm9udFJl
ZiBmb250ID0gc3R5bGUtPmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0Q1RGb250
KCk7CisgICAgQ1RGb250UmVmIGZvbnQgPSBzdHlsZS0+Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9u
dCgpLmdldENURm9udCgpOwogICAgIGlmIChmb250KQogICAgICAgICBbcmVzdWx0IHNldE9iamVj
dDooaWQpZm9udCBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0JKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTA1
LDcgKzEwNSw3IEBAIGJvb2wgRWRpdG9yOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJblEKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotY29uc3QgU2ltcGxlRm9udERhdGEqIEVkaXRvcjo6Zm9udEZv
clNlbGVjdGlvbihib29sJiBoYXNNdWx0aXBsZUZvbnRzKSBjb25zdAorY29uc3QgRm9udCogRWRp
dG9yOjpmb250Rm9yU2VsZWN0aW9uKGJvb2wmIGhhc011bHRpcGxlRm9udHMpIGNvbnN0CiB7CiAg
ICAgaGFzTXVsdGlwbGVGb250cyA9IGZhbHNlOwogCkBAIC0xMTMsOSArMTEzLDkgQEAgY29uc3Qg
U2ltcGxlRm9udERhdGEqIEVkaXRvcjo6Zm9udEZvclNlbAogICAgICAgICBOb2RlKiBub2RlVG9S
ZW1vdmU7CiAgICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHN0eWxlRm9yU2VsZWN0aW9uU3Rh
cnQoJm1fZnJhbWUsIG5vZGVUb1JlbW92ZSk7IC8vIHNldHMgbm9kZVRvUmVtb3ZlCiAKLSAgICAg
ICAgY29uc3QgU2ltcGxlRm9udERhdGEqIHJlc3VsdCA9IG51bGxwdHI7CisgICAgICAgIGNvbnN0
IEZvbnQqIHJlc3VsdCA9IG51bGxwdHI7CiAgICAgICAgIGlmIChzdHlsZSkKLSAgICAgICAgICAg
IHJlc3VsdCA9ICZzdHlsZS0+Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKTsKKyAgICAg
ICAgICAgIHJlc3VsdCA9ICZzdHlsZS0+Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpOwogCiAg
ICAgICAgIGlmIChub2RlVG9SZW1vdmUpCiAgICAgICAgICAgICBub2RlVG9SZW1vdmUtPnJlbW92
ZShBU1NFUlRfTk9fRVhDRVBUSU9OKTsKQEAgLTEyMyw3ICsxMjMsNyBAQCBjb25zdCBTaW1wbGVG
b250RGF0YSogRWRpdG9yOjpmb250Rm9yU2VsCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
fQogCi0gICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQgPSAwOworICAgIGNvbnN0IEZvbnQq
IGZvbnQgPSAwOwogICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigp
LnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgTm9kZSogc3RhcnROb2RlID0gYWRqdXN0ZWRTZWxl
Y3Rpb25TdGFydEZvclN0eWxlQ29tcHV0YXRpb24obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKSkuZGVwcmVjYXRlZE5vZGUoKTsKICAgICBpZiAocmFuZ2UgJiYgc3RhcnROb2RlKSB7CkBA
IC0xMzUsNyArMTM1LDcgQEAgY29uc3QgU2ltcGxlRm9udERhdGEqIEVkaXRvcjo6Zm9udEZvclNl
bAogICAgICAgICAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIC8vIEZJWE1FOiBBcmUgdGhlcmUgYW55IG5vZGUgdHlwZXMgdGhhdCBoYXZl
IHJlbmRlcmVycywgYnV0IHRoYXQgd2Ugc2hvdWxkIGJlIHNraXBwaW5nPwotICAgICAgICAgICAg
Y29uc3QgU2ltcGxlRm9udERhdGEmIHByaW1hcnlGb250ID0gcmVuZGVyZXItPnN0eWxlKCkuZm9u
dENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKTsKKyAgICAgICAgICAgIGNvbnN0IEZvbnQmIHBy
aW1hcnlGb250ID0gcmVuZGVyZXItPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgp
OwogICAgICAgICAgICAgaWYgKCFmb250KQogICAgICAgICAgICAgICAgIGZvbnQgPSAmcHJpbWFy
eUZvbnQ7CiAgICAgICAgICAgICBlbHNlIGlmIChmb250ICE9ICZwcmltYXJ5Rm9udCkgewpAQCAt
MTYwLDggKzE2MCw4IEBAIE5TRGljdGlvbmFyeSogRWRpdG9yOjpmb250QXR0cmlidXRlc0ZvclMK
ICAgICBpZiAoc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91
bmRDb2xvcikuaXNWYWxpZCgpICYmIHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJv
cGVydHlCYWNrZ3JvdW5kQ29sb3IpLmFscGhhKCkgIT0gMCkKICAgICAgICAgW3Jlc3VsdCBzZXRP
YmplY3Q6bnNDb2xvcihzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFj
a2dyb3VuZENvbG9yKSkgZm9yS2V5Ok5TQmFja2dyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07CiAK
LSAgICBpZiAoc3R5bGUtPmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0TlNGb250
KCkpCi0gICAgICAgIFtyZXN1bHQgc2V0T2JqZWN0OnN0eWxlLT5mb250Q2FzY2FkZSgpLnByaW1h
cnlGb250RGF0YSgpLmdldE5TRm9udCgpIGZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKKyAg
ICBpZiAoc3R5bGUtPmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKS5nZXROU0ZvbnQoKSkKKyAg
ICAgICAgW3Jlc3VsdCBzZXRPYmplY3Q6c3R5bGUtPmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQo
KS5nZXROU0ZvbnQoKSBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CiAKICAgICBpZiAoc3R5
bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKS5pc1ZhbGlkKCkgJiYg
c3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSAhPSBDb2xvcjo6
YmxhY2spCiAgICAgICAgIFtyZXN1bHQgc2V0T2JqZWN0Om5zQ29sb3Ioc3R5bGUtPnZpc2l0ZWRE
ZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSkgZm9yS2V5Ok5TRm9yZWdyb3VuZENvbG9y
QXR0cmlidXRlTmFtZV07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVk
Rm9udC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hl
ZEZvbnQuY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2Fj
aGUvQ2FjaGVkRm9udC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5LDcgKzk5LDcgQEAgYm9vbCBD
YWNoZWRGb250OjplbnN1cmVDdXN0b21Gb250RGF0YShibwogCiBib29sIENhY2hlZEZvbnQ6OmVu
c3VyZUN1c3RvbUZvbnREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSkKIHsKLSAgICBpZiAoIW1fZm9u
dERhdGEgJiYgIWVycm9yT2NjdXJyZWQoKSAmJiAhaXNMb2FkaW5nKCkgJiYgZGF0YSkgeworICAg
IGlmICghbV9mb250Q3VzdG9tUGxhdGZvcm1EYXRhICYmICFlcnJvck9jY3VycmVkKCkgJiYgIWlz
TG9hZGluZygpICYmIGRhdGEpIHsKICAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVy
KGRhdGEpOwogCiAjaWYgKCFQTEFURk9STShNQUMpIHx8IF9fTUFDX09TX1hfVkVSU0lPTl9NSU5f
UkVRVUlSRUQgPD0gMTA5MCkgJiYgKCFQTEFURk9STShJT1MpIHx8IF9fSVBIT05FX09TX1ZFUlNJ
T05fTUlOX1JFUVVJUkVEIDwgODAwMDApCkBAIC0xMTIsMzAgKzExMiwzMCBAQCBib29sIENhY2hl
ZEZvbnQ6OmVuc3VyZUN1c3RvbUZvbnREYXRhKFNoCiAgICAgICAgIH0KICNlbmRpZgogCi0gICAg
ICAgIG1fZm9udERhdGEgPSBidWZmZXIgPyBjcmVhdGVGb250Q3VzdG9tUGxhdGZvcm1EYXRhKCpi
dWZmZXIpIDogbnVsbHB0cjsKLSAgICAgICAgbV9oYXNDcmVhdGVkRm9udERhdGFXcmFwcGluZ1Jl
c291cmNlID0gbV9mb250RGF0YSAmJiAoYnVmZmVyID09IG1fZGF0YSk7Ci0gICAgICAgIGlmICgh
bV9mb250RGF0YSkKKyAgICAgICAgbV9mb250Q3VzdG9tUGxhdGZvcm1EYXRhID0gYnVmZmVyID8g
Y3JlYXRlRm9udEN1c3RvbVBsYXRmb3JtRGF0YSgqYnVmZmVyKSA6IG51bGxwdHI7CisgICAgICAg
IG1faGFzQ3JlYXRlZEZvbnREYXRhV3JhcHBpbmdSZXNvdXJjZSA9IG1fZm9udEN1c3RvbVBsYXRm
b3JtRGF0YSAmJiAoYnVmZmVyID09IG1fZGF0YSk7CisgICAgICAgIGlmICghbV9mb250Q3VzdG9t
UGxhdGZvcm1EYXRhKQogICAgICAgICAgICAgc2V0U3RhdHVzKERlY29kZUVycm9yKTsKICAgICB9
CiAKLSAgICByZXR1cm4gbV9mb250RGF0YS5nZXQoKTsKKyAgICByZXR1cm4gbV9mb250Q3VzdG9t
UGxhdGZvcm1EYXRhLmdldCgpOwogfQogCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBDYWNo
ZWRGb250OjpnZXRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlv
biwgY29uc3QgQXRvbWljU3RyaW5nJiwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRp
Y0l0YWxpYywgYm9vbCkKK1JlZlB0cjxGb250PiBDYWNoZWRGb250OjpjcmVhdGVGb250KGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmLCBi
b29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljLCBib29sKQogewotICAgIHJl
dHVybiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlKHBsYXRmb3JtRGF0YUZyb21DdXN0b21EYXRhKGZv
bnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0
aWNJdGFsaWMsCisgICAgcmV0dXJuIEZvbnQ6OmNyZWF0ZShwbGF0Zm9ybURhdGFGcm9tQ3VzdG9t
RGF0YShmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSwgc3ludGhldGljQm9sZCwg
c3ludGhldGljSXRhbGljLAogICAgICAgICBmb250RGVzY3JpcHRpb24ub3JpZW50YXRpb24oKSwg
Zm9udERlc2NyaXB0aW9uLndpZHRoVmFyaWFudCgpLCBmb250RGVzY3JpcHRpb24ucmVuZGVyaW5n
TW9kZSgpKSwgdHJ1ZSwgZmFsc2UpOwogfQogCiBGb250UGxhdGZvcm1EYXRhIENhY2hlZEZvbnQ6
OnBsYXRmb3JtRGF0YUZyb21DdXN0b21EYXRhKGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBp
dGFsaWMsIEZvbnRPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgRm9udFdpZHRoVmFyaWFudCB3aWR0
aFZhcmlhbnQsIEZvbnRSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUpCiB7Ci0gICAgQVNTRVJU
KG1fZm9udERhdGEpOwotICAgIHJldHVybiBtX2ZvbnREYXRhLT5mb250UGxhdGZvcm1EYXRhKHN0
YXRpY19jYXN0PGludD4oc2l6ZSksIGJvbGQsIGl0YWxpYywgb3JpZW50YXRpb24sIHdpZHRoVmFy
aWFudCwgcmVuZGVyaW5nTW9kZSk7CisgICAgQVNTRVJUKG1fZm9udEN1c3RvbVBsYXRmb3JtRGF0
YSk7CisgICAgcmV0dXJuIG1fZm9udEN1c3RvbVBsYXRmb3JtRGF0YS0+Zm9udFBsYXRmb3JtRGF0
YShzdGF0aWNfY2FzdDxpbnQ+KHNpemUpLCBib2xkLCBpdGFsaWMsIG9yaWVudGF0aW9uLCB3aWR0
aFZhcmlhbnQsIHJlbmRlcmluZ01vZGUpOwogfQogCiB2b2lkIENhY2hlZEZvbnQ6OmFsbENsaWVu
dHNSZW1vdmVkKCkKIHsKLSAgICBtX2ZvbnREYXRhID0gbnVsbHB0cjsKKyAgICBtX2ZvbnRDdXN0
b21QbGF0Zm9ybURhdGEgPSBudWxscHRyOwogfQogCiB2b2lkIENhY2hlZEZvbnQ6OmNoZWNrTm90
aWZ5KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRGb250LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQuaAkocmV2
aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTAgKzI4LDEwIEBACiAKICNpbmNsdWRlICJDYWNoZWRS
ZXNvdXJjZS5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCisjaW5jbHVkZSAi
Rm9udC5oIgogI2luY2x1ZGUgIkZvbnRPcmllbnRhdGlvbi5oIgogI2luY2x1ZGUgIkZvbnRSZW5k
ZXJpbmdNb2RlLmgiCiAjaW5jbHVkZSAiRm9udFdpZHRoVmFyaWFudC5oIgotI2luY2x1ZGUgIlNp
bXBsZUZvbnREYXRhLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTIsNyArNTIsNyBA
QCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgZW5zdXJlQ3VzdG9tRm9udERhdGEoYm9vbCBl
eHRlcm5hbFNWRywgY29uc3QgQXRvbWljU3RyaW5nJiByZW1vdGVVUkkpOwogCi0gICAgdmlydHVh
bCBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBnZXRGb250RGF0YShjb25zdCBGb250RGVzY3Jp
cHRpb24mLCBjb25zdCBBdG9taWNTdHJpbmcmIHJlbW90ZVVSSSwgYm9vbCBzeW50aGV0aWNCb2xk
LCBib29sIHN5bnRoZXRpY0l0YWxpYywgYm9vbCBleHRlcm5hbFNWRyk7CisgICAgdmlydHVhbCBS
ZWZQdHI8Rm9udD4gY3JlYXRlRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9t
aWNTdHJpbmcmIHJlbW90ZVVSSSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0
YWxpYywgYm9vbCBleHRlcm5hbFNWRyk7CiAKIHByb3RlY3RlZDoKICAgICBGb250UGxhdGZvcm1E
YXRhIHBsYXRmb3JtRGF0YUZyb21DdXN0b21EYXRhKGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9v
bCBpdGFsaWMsIEZvbnRPcmllbnRhdGlvbiA9IEhvcml6b250YWwsIEZvbnRXaWR0aFZhcmlhbnQg
PSBSZWd1bGFyV2lkdGgsIEZvbnRSZW5kZXJpbmdNb2RlID0gTm9ybWFsUmVuZGVyaW5nTW9kZSk7
CkBAIC03MCw3ICs3MCw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgYWxsQ2xpZW50
c1JlbW92ZWQoKSBvdmVycmlkZTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxGb250Q3VzdG9tUGxh
dGZvcm1EYXRhPiBtX2ZvbnREYXRhOworICAgIHN0ZDo6dW5pcXVlX3B0cjxGb250Q3VzdG9tUGxh
dGZvcm1EYXRhPiBtX2ZvbnRDdXN0b21QbGF0Zm9ybURhdGE7CiAgICAgYm9vbCBtX2xvYWRJbml0
aWF0ZWQ7CiAgICAgYm9vbCBtX2hhc0NyZWF0ZWRGb250RGF0YVdyYXBwaW5nUmVzb3VyY2U7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTVkdGb250LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU1ZHRm9udC5jcHAJ
KHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRT
VkdGb250LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsMTcgKzUxLDE3IEBAIENhY2hlZFNWR0Zv
bnQ6OkNhY2hlZFNWR0ZvbnQoY29uc3QgUmVzb3UKIHsKIH0KIAotUGFzc1JlZlB0cjxTaW1wbGVG
b250RGF0YT4gQ2FjaGVkU1ZHRm9udDo6Z2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgcmVtb3RlVVJJLCBib29sIHN5
bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljLCBib29sIGV4dGVybmFsU1ZHKQorUmVm
UHRyPEZvbnQ+IENhY2hlZFNWR0ZvbnQ6OmNyZWF0ZUZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgcmVtb3RlVVJJLCBib29sIHN5
bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljLCBib29sIGV4dGVybmFsU1ZHKQogewog
I2lmIEVOQUJMRShTVkdfT1RGX0NPTlZFUlRFUikKICAgICBpZiAoIWV4dGVybmFsU1ZHIHx8IGZp
cnN0Rm9udEZhY2UocmVtb3RlVVJJKSkKLSAgICAgICAgcmV0dXJuIENhY2hlZEZvbnQ6OmdldEZv
bnREYXRhKGZvbnREZXNjcmlwdGlvbiwgcmVtb3RlVVJJLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0
aWNJdGFsaWMsIGV4dGVybmFsU1ZHKTsKKyAgICAgICAgcmV0dXJuIENhY2hlZEZvbnQ6OmNyZWF0
ZUZvbnQoZm9udERlc2NyaXB0aW9uLCByZW1vdGVVUkksIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRp
Y0l0YWxpYywgZXh0ZXJuYWxTVkcpOwogI2Vsc2UKICAgICBpZiAoIWV4dGVybmFsU1ZHKQotICAg
ICAgICByZXR1cm4gQ2FjaGVkRm9udDo6Z2V0Rm9udERhdGEoZm9udERlc2NyaXB0aW9uLCByZW1v
dGVVUkksIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYywgZXh0ZXJuYWxTVkcpOworICAg
ICAgICByZXR1cm4gQ2FjaGVkRm9udDo6Y3JlYXRlRm9udChmb250RGVzY3JpcHRpb24sIHJlbW90
ZVVSSSwgc3ludGhldGljQm9sZCwgc3ludGhldGljSXRhbGljLCBleHRlcm5hbFNWRyk7CiAKICAg
ICBpZiAoU1ZHRm9udEZhY2VFbGVtZW50KiBmaXJzdEZvbnRGYWNlID0gdGhpcy0+Zmlyc3RGb250
RmFjZShyZW1vdGVVUkkpKQotICAgICAgICByZXR1cm4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZShz
dGQ6Om1ha2VfdW5pcXVlPFNWR0ZvbnREYXRhPihmaXJzdEZvbnRGYWNlKSwgZm9udERlc2NyaXB0
aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCksIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYyk7
CisgICAgICAgIHJldHVybiBGb250OjpjcmVhdGUoc3RkOjptYWtlX3VuaXF1ZTxTVkdGb250RGF0
YT4oZmlyc3RGb250RmFjZSksIGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpLCBz
eW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMpOwogI2VuZGlmCiAgICAgcmV0dXJuIG51bGxw
dHI7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU1ZHRm9udC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTVkdGb250
LmgJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRTVkdGb250LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogCiAg
ICAgdmlydHVhbCBib29sIGVuc3VyZUN1c3RvbUZvbnREYXRhKGJvb2wgZXh0ZXJuYWxTVkcsIGNv
bnN0IEF0b21pY1N0cmluZyYgcmVtb3RlVVJJKSBvdmVycmlkZTsKICAgICAKLSAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IGdldEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYgcmVtb3RlVVJJLCBib29sIHN5bnRoZXRpY0JvbGQs
IGJvb2wgc3ludGhldGljSXRhbGljLCBib29sIGV4dGVybmFsU1ZHKSBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIFJlZlB0cjxGb250PiBjcmVhdGVGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNv
bnN0IEF0b21pY1N0cmluZyYgcmVtb3RlVVJJLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3lu
dGhldGljSXRhbGljLCBib29sIGV4dGVybmFsU1ZHKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAg
ICBGb250UGxhdGZvcm1EYXRhIHBsYXRmb3JtRGF0YUZyb21DdXN0b21EYXRhKGZsb2F0IHNpemUs
IGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMsIEZvbnRPcmllbnRhdGlvbiA9IEhvcml6b250YWwsIEZv
bnRXaWR0aFZhcmlhbnQgPSBSZWd1bGFyV2lkdGgsIEZvbnRSZW5kZXJpbmdNb2RlID0gTm9ybWFs
UmVuZGVyaW5nTW9kZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250LmNwcAkocmV2aXNpb24gMTc4NjUwKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9TaW1wbGVGb250RGF0YS5jcHA6MTc4NjUwKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NTYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDgsIDIwMTAsIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3Vy
eWFrb3YKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBw
bGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAq
ICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgorCisjaWYgUExB
VEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JF
UVVJUkVEID4gMTA4MCkKKyNpbmNsdWRlICJDb3JlVGV4dFNQSS5oIgorI2VuZGlmCisjaW5jbHVk
ZSAiRm9udENhY2hlLmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKKyNpbmNsdWRlICJPcGVu
VHlwZU1hdGhEYXRhLmgiCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3
dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKworI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKKyNp
bmNsdWRlICJPcGVuVHlwZVZlcnRpY2FsRGF0YS5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKwordW5zaWduZWQgR2x5cGhQYWdlOjpzX2NvdW50ID0gMDsKKworY29uc3QgZmxvYXQg
c21hbGxDYXBzRm9udFNpemVNdWx0aXBsaWVyID0gMC43ZjsKK2NvbnN0IGZsb2F0IGVtcGhhc2lz
TWFya0ZvbnRTaXplTXVsdGlwbGllciA9IDAuNWY7CisKK1NpbXBsZUZvbnREYXRhOjpTaW1wbGVG
b250RGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEsIGJvb2wgaXNDdXN0
b21Gb250LCBib29sIGlzTG9hZGluZywgYm9vbCBpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKQor
ICAgIDogbV9tYXhDaGFyV2lkdGgoLTEpCisgICAgLCBtX2F2Z0NoYXJXaWR0aCgtMSkKKyAgICAs
IG1fcGxhdGZvcm1EYXRhKHBsYXRmb3JtRGF0YSkKKyAgICAsIG1fdHJlYXRBc0ZpeGVkUGl0Y2go
ZmFsc2UpCisgICAgLCBtX2lzQ3VzdG9tRm9udChpc0N1c3RvbUZvbnQpCisgICAgLCBtX2lzTG9h
ZGluZyhpc0xvYWRpbmcpCisgICAgLCBtX2lzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2soaXNUZXh0
T3JpZW50YXRpb25GYWxsYmFjaykKKyAgICAsIG1faXNCcm9rZW5JZGVvZ3JhcGhGYWxsYmFjayhm
YWxzZSkKKyAgICAsIG1fbWF0aERhdGEobnVsbHB0cikKKyNpZiBFTkFCTEUoT1BFTlRZUEVfVkVS
VElDQUwpCisgICAgLCBtX3ZlcnRpY2FsRGF0YSgwKQorI2VuZGlmCisgICAgLCBtX2hhc1ZlcnRp
Y2FsR2x5cGhzKGZhbHNlKQoreworICAgIHBsYXRmb3JtSW5pdCgpOworICAgIHBsYXRmb3JtR2x5
cGhJbml0KCk7CisgICAgcGxhdGZvcm1DaGFyV2lkdGhJbml0KCk7CisjaWYgRU5BQkxFKE9QRU5U
WVBFX1ZFUlRJQ0FMKQorICAgIGlmIChwbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSA9PSBWZXJ0
aWNhbCAmJiAhaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaykgeworICAgICAgICBtX3ZlcnRpY2Fs
RGF0YSA9IHBsYXRmb3JtRGF0YS52ZXJ0aWNhbERhdGEoKTsKKyAgICAgICAgbV9oYXNWZXJ0aWNh
bEdseXBocyA9IG1fdmVydGljYWxEYXRhLmdldCgpICYmIG1fdmVydGljYWxEYXRhLT5oYXNWZXJ0
aWNhbE1ldHJpY3MoKTsKKyAgICB9CisjZW5kaWYKK30KKworU2ltcGxlRm9udERhdGE6OlNpbXBs
ZUZvbnREYXRhKHN0ZDo6dW5pcXVlX3B0cjxTVkdEYXRhPiBzdmdEYXRhLCBmbG9hdCBmb250U2l6
ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYykKKyAgICA6IG1fcGxh
dGZvcm1EYXRhKEZvbnRQbGF0Zm9ybURhdGEoZm9udFNpemUsIHN5bnRoZXRpY0JvbGQsIHN5bnRo
ZXRpY0l0YWxpYykpCisgICAgLCBtX3N2Z0RhdGEoV1RGOjptb3ZlKHN2Z0RhdGEpKQorICAgICwg
bV90cmVhdEFzRml4ZWRQaXRjaChmYWxzZSkKKyAgICAsIG1faXNDdXN0b21Gb250KHRydWUpCisg
ICAgLCBtX2lzTG9hZGluZyhmYWxzZSkKKyAgICAsIG1faXNUZXh0T3JpZW50YXRpb25GYWxsYmFj
ayhmYWxzZSkKKyAgICAsIG1faXNCcm9rZW5JZGVvZ3JhcGhGYWxsYmFjayhmYWxzZSkKKyAgICAs
IG1fbWF0aERhdGEobnVsbHB0cikKKyNpZiBFTkFCTEUoT1BFTlRZUEVfVkVSVElDQUwpCisgICAg
LCBtX3ZlcnRpY2FsRGF0YSgwKQorI2VuZGlmCisgICAgLCBtX2hhc1ZlcnRpY2FsR2x5cGhzKGZh
bHNlKQorI2lmIFBMQVRGT1JNKElPUykKKyAgICAsIG1fc2hvdWxkTm90QmVVc2VkRm9yQXJhYmlj
KGZhbHNlKQorI2VuZGlmCit7CisgICAgbV9zdmdEYXRhLT5pbml0aWFsaXplRm9udERhdGEodGhp
cywgZm9udFNpemUpOworfQorCisvLyBFc3RpbWF0ZXMgb2YgYXZnQ2hhcldpZHRoIGFuZCBtYXhD
aGFyV2lkdGggZm9yIHBsYXRmb3JtcyB0aGF0IGRvbid0IHN1cHBvcnQgYWNjZXNzaW5nIHRoZXNl
IHZhbHVlcyBmcm9tIHRoZSBmb250Lgordm9pZCBTaW1wbGVGb250RGF0YTo6aW5pdENoYXJXaWR0
aHMoKQoreworICAgIGF1dG8qIGdseXBoUGFnZVplcm8gPSBnbHlwaFBhZ2UoMCk7CisKKyAgICAv
LyBUcmVhdCB0aGUgd2lkdGggb2YgYSAnMCcgYXMgdGhlIGF2Z0NoYXJXaWR0aC4KKyAgICBpZiAo
bV9hdmdDaGFyV2lkdGggPD0gMC5mICYmIGdseXBoUGFnZVplcm8pIHsKKyAgICAgICAgc3RhdGlj
IGNvbnN0IFVDaGFyMzIgZGlnaXRaZXJvQ2hhciA9ICcwJzsKKyAgICAgICAgR2x5cGggZGlnaXRa
ZXJvR2x5cGggPSBnbHlwaFBhZ2VaZXJvLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoZGlnaXRaZXJv
Q2hhcikuZ2x5cGg7CisgICAgICAgIGlmIChkaWdpdFplcm9HbHlwaCkKKyAgICAgICAgICAgIG1f
YXZnQ2hhcldpZHRoID0gd2lkdGhGb3JHbHlwaChkaWdpdFplcm9HbHlwaCk7CisgICAgfQorCisg
ICAgLy8gSWYgd2UgY2FuJ3QgcmV0cmlldmUgdGhlIHdpZHRoIG9mIGEgJzAnLCBmYWxsIGJhY2sg
dG8gdGhlIHggaGVpZ2h0LgorICAgIGlmIChtX2F2Z0NoYXJXaWR0aCA8PSAwLmYpCisgICAgICAg
IG1fYXZnQ2hhcldpZHRoID0gbV9mb250TWV0cmljcy54SGVpZ2h0KCk7CisKKyAgICBpZiAobV9t
YXhDaGFyV2lkdGggPD0gMC5mKQorICAgICAgICBtX21heENoYXJXaWR0aCA9IHN0ZDo6bWF4KG1f
YXZnQ2hhcldpZHRoLCBtX2ZvbnRNZXRyaWNzLmZsb2F0QXNjZW50KCkpOworfQorCit2b2lkIFNp
bXBsZUZvbnREYXRhOjpwbGF0Zm9ybUdseXBoSW5pdCgpCit7CisgICAgYXV0byogZ2x5cGhQYWdl
WmVybyA9IGdseXBoUGFnZSgwKTsKKyAgICBpZiAoIWdseXBoUGFnZVplcm8pIHsKKyAgICAgICAg
bV9zcGFjZUdseXBoID0gMDsKKyAgICAgICAgbV9zcGFjZVdpZHRoID0gMDsKKyAgICAgICAgbV96
ZXJvR2x5cGggPSAwOworICAgICAgICBtX2FkanVzdGVkU3BhY2VXaWR0aCA9IDA7CisgICAgICAg
IGRldGVybWluZVBpdGNoKCk7CisgICAgICAgIG1femVyb1dpZHRoU3BhY2VHbHlwaCA9IDA7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBBc2sgZm9yIHRoZSBnbHlwaCBmb3IgMCB0
byBhdm9pZCBwYWdpbmcgaW4gWkVSTyBXSURUSCBTUEFDRS4gQ29udHJvbCBjaGFyYWN0ZXJzLCBp
bmNsdWRpbmcgMCwKKyAgICAvLyBhcmUgbWFwcGVkIHRvIHRoZSBaRVJPIFdJRFRIIFNQQUNFIGds
eXBoLgorICAgIG1femVyb1dpZHRoU3BhY2VHbHlwaCA9IGdseXBoUGFnZVplcm8tPmdseXBoRGF0
YUZvckNoYXJhY3RlcigwKS5nbHlwaDsKKworICAgIC8vIE5hc3R5IGhhY2sgdG8gZGV0ZXJtaW5l
IGlmIHdlIHNob3VsZCByb3VuZCBvciBjZWlsIHNwYWNlIHdpZHRocy4KKyAgICAvLyBJZiB0aGUg
Zm9udCBpcyBtb25vc3BhY2Ugb3IgZmFrZSBtb25vc3BhY2Ugd2UgY2VpbCB0byBlbnN1cmUgdGhh
dCAKKyAgICAvLyBldmVyeSBjaGFyYWN0ZXIgYW5kIHRoZSBzcGFjZSBhcmUgdGhlIHNhbWUgd2lk
dGguICBPdGhlcndpc2Ugd2Ugcm91bmQuCisgICAgbV9zcGFjZUdseXBoID0gZ2x5cGhQYWdlWmVy
by0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKCcgJykuZ2x5cGg7CisgICAgZmxvYXQgd2lkdGggPSB3
aWR0aEZvckdseXBoKG1fc3BhY2VHbHlwaCk7CisgICAgbV9zcGFjZVdpZHRoID0gd2lkdGg7Cisg
ICAgbV96ZXJvR2x5cGggPSBnbHlwaFBhZ2VaZXJvLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoJzAn
KS5nbHlwaDsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldFplcm9XaWR0aCh3aWR0aEZvckdseXBoKG1f
emVyb0dseXBoKSk7CisgICAgZGV0ZXJtaW5lUGl0Y2goKTsKKyAgICBtX2FkanVzdGVkU3BhY2VX
aWR0aCA9IG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPyBjZWlsZih3aWR0aCkgOiByb3VuZGYod2lkdGgp
OworCisgICAgLy8gRm9yY2UgdGhlIGdseXBoIGZvciBaRVJPIFdJRFRIIFNQQUNFIHRvIGhhdmUg
emVybyB3aWR0aCwgdW5sZXNzIGl0IGlzIHNoYXJlZCB3aXRoIFNQQUNFLgorICAgIC8vIEhlbHZl
dGljYSBpcyBhbiBleGFtcGxlIG9mIGEgbm9uLXplcm8gd2lkdGggWkVSTyBXSURUSCBTUEFDRSBn
bHlwaC4KKyAgICAvLyBTZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEzMTc4PiBhbmQgU2ltcGxlRm9udERhdGE6OmlzWmVyb1dpZHRoU3BhY2VHbHlwaCgpCisgICAg
aWYgKG1femVyb1dpZHRoU3BhY2VHbHlwaCA9PSBtX3NwYWNlR2x5cGgpCisgICAgICAgIG1femVy
b1dpZHRoU3BhY2VHbHlwaCA9IDA7Cit9CisKK1NpbXBsZUZvbnREYXRhOjp+U2ltcGxlRm9udERh
dGEoKQoreworICAgIHJlbW92ZUZyb21TeXN0ZW1GYWxsYmFja0NhY2hlKCk7Cit9CisKK3N0YXRp
YyBib29sIGZpbGxHbHlwaFBhZ2UoR2x5cGhQYWdlJiBwYWdlVG9GaWxsLCB1bnNpZ25lZCBvZmZz
ZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3Ro
LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEpCit7CisjaWYgRU5BQkxFKFNWR19GT05U
UykKKyAgICBpZiAoYXV0byogc3ZnRGF0YSA9IGZvbnREYXRhLT5zdmdEYXRhKCkpCisgICAgICAg
IHJldHVybiBzdmdEYXRhLT5maWxsU1ZHR2x5cGhQYWdlKCZwYWdlVG9GaWxsLCBvZmZzZXQsIGxl
bmd0aCwgYnVmZmVyLCBidWZmZXJMZW5ndGgsIGZvbnREYXRhKTsKKyNlbmRpZgorICAgIGJvb2wg
aGFzR2x5cGhzID0gcGFnZVRvRmlsbC5maWxsKG9mZnNldCwgbGVuZ3RoLCBidWZmZXIsIGJ1ZmZl
ckxlbmd0aCwgZm9udERhdGEpOworI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKKyAgICBp
ZiAoaGFzR2x5cGhzICYmIGZvbnREYXRhLT52ZXJ0aWNhbERhdGEoKSkKKyAgICAgICAgZm9udERh
dGEtPnZlcnRpY2FsRGF0YSgpLT5zdWJzdGl0dXRlV2l0aFZlcnRpY2FsR2x5cGhzKGZvbnREYXRh
LCAmcGFnZVRvRmlsbCwgb2Zmc2V0LCBsZW5ndGgpOworI2VuZGlmCisgICAgcmV0dXJuIGhhc0ds
eXBoczsKK30KKworc3RhdGljIFJlZlB0cjxHbHlwaFBhZ2U+IGNyZWF0ZUFuZEZpbGxHbHlwaFBh
Z2UodW5zaWduZWQgcGFnZU51bWJlciwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQor
eworI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBGSVhNRTogVGltZXMgTmV3IFJvbWFuIGNvbnRh
aW5zIEFyYWJpYyBnbHlwaHMsIGJ1dCBDb3JlIFRleHQgZG9lc24ndCBrbm93IGhvdyB0byBzaGFw
ZSB0aGVtLiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzk4MjM5NzU+LgorICAgIC8vIE9uY2Ugd2UgaGF2
ZSB0aGUgZml4IGZvciA8cmRhcjovL3Byb2JsZW0vOTgyMzk3NT4gdGhlbiByZW1vdmUgdGhpcyBj
b2RlIHRvZ2V0aGVyIHdpdGggU2ltcGxlRm9udERhdGE6OnNob3VsZE5vdEJlVXNlZEZvckFyYWJp
YygpCisgICAgLy8gaW4gPHJkYXI6Ly9wcm9ibGVtLzEyMDk2ODM1Pi4KKyAgICBpZiAocGFnZU51
bWJlciA9PSA2ICYmIGZvbnREYXRhLT5zaG91bGROb3RCZVVzZWRGb3JBcmFiaWMoKSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisjZW5kaWYKKworICAgIHVuc2lnbmVkIHN0YXJ0ID0gcGFnZU51
bWJlciAqIEdseXBoUGFnZTo6c2l6ZTsKKyAgICBVQ2hhciBidWZmZXJbR2x5cGhQYWdlOjpzaXpl
ICogMiArIDJdOworICAgIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aDsKKyAgICAvLyBGaWxsIGluIGEg
YnVmZmVyIHdpdGggdGhlIGVudGlyZSAicGFnZSIgb2YgY2hhcmFjdGVycyB0aGF0IHdlIHdhbnQg
dG8gbG9vayB1cCBnbHlwaHMgZm9yLgorICAgIGlmIChVX0lTX0JNUChzdGFydCkpIHsKKyAgICAg
ICAgYnVmZmVyTGVuZ3RoID0gR2x5cGhQYWdlOjpzaXplOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgR2x5cGhQYWdlOjpzaXplOyBpKyspCisgICAgICAgICAgICBidWZmZXJbaV0g
PSBzdGFydCArIGk7CisKKyAgICAgICAgaWYgKHN0YXJ0ID09IDApIHsKKyAgICAgICAgICAgIC8v
IENvbnRyb2wgY2hhcmFjdGVycyBtdXN0IG5vdCByZW5kZXIgYXQgYWxsLgorICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDB4MjA7ICsraSkKKyAgICAgICAgICAgICAgICBidWZm
ZXJbaV0gPSB6ZXJvV2lkdGhTcGFjZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDB4
N0Y7IGkgPCAweEEwOyBpKyspCisgICAgICAgICAgICAgICAgYnVmZmVyW2ldID0gemVyb1dpZHRo
U3BhY2U7CisgICAgICAgICAgICBidWZmZXJbc29mdEh5cGhlbl0gPSB6ZXJvV2lkdGhTcGFjZTsK
KworICAgICAgICAgICAgLy8gXG4sIFx0LCBhbmQgbm9uYnJlYWtpbmcgc3BhY2UgbXVzdCByZW5k
ZXIgYXMgYSBzcGFjZS4KKyAgICAgICAgICAgIGJ1ZmZlclsoaW50KSdcbiddID0gJyAnOworICAg
ICAgICAgICAgYnVmZmVyWyhpbnQpJ1x0J10gPSAnICc7CisgICAgICAgICAgICBidWZmZXJbbm9C
cmVha1NwYWNlXSA9ICcgJzsKKyAgICAgICAgfSBlbHNlIGlmIChzdGFydCA9PSAobGVmdFRvUmln
aHRNYXJrICYgfihHbHlwaFBhZ2U6OnNpemUgLSAxKSkpIHsKKyAgICAgICAgICAgIC8vIExSTSwg
UkxNLCBMUkUsIFJMRSwgWldOSiwgWldKLCBhbmQgUERGIG11c3Qgbm90IHJlbmRlciBhdCBhbGwu
CisgICAgICAgICAgICBidWZmZXJbbGVmdFRvUmlnaHRNYXJrIC0gc3RhcnRdID0gemVyb1dpZHRo
U3BhY2U7CisgICAgICAgICAgICBidWZmZXJbcmlnaHRUb0xlZnRNYXJrIC0gc3RhcnRdID0gemVy
b1dpZHRoU3BhY2U7CisgICAgICAgICAgICBidWZmZXJbbGVmdFRvUmlnaHRFbWJlZCAtIHN0YXJ0
XSA9IHplcm9XaWR0aFNwYWNlOworICAgICAgICAgICAgYnVmZmVyW3JpZ2h0VG9MZWZ0RW1iZWQg
LSBzdGFydF0gPSB6ZXJvV2lkdGhTcGFjZTsKKyAgICAgICAgICAgIGJ1ZmZlcltsZWZ0VG9SaWdo
dE92ZXJyaWRlIC0gc3RhcnRdID0gemVyb1dpZHRoU3BhY2U7CisgICAgICAgICAgICBidWZmZXJb
cmlnaHRUb0xlZnRPdmVycmlkZSAtIHN0YXJ0XSA9IHplcm9XaWR0aFNwYWNlOworICAgICAgICAg
ICAgYnVmZmVyW3plcm9XaWR0aE5vbkpvaW5lciAtIHN0YXJ0XSA9IHplcm9XaWR0aFNwYWNlOwor
ICAgICAgICAgICAgYnVmZmVyW3plcm9XaWR0aEpvaW5lciAtIHN0YXJ0XSA9IHplcm9XaWR0aFNw
YWNlOworICAgICAgICAgICAgYnVmZmVyW3BvcERpcmVjdGlvbmFsRm9ybWF0dGluZyAtIHN0YXJ0
XSA9IHplcm9XaWR0aFNwYWNlOworICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0ID09IChvYmplY3RS
ZXBsYWNlbWVudENoYXJhY3RlciAmIH4oR2x5cGhQYWdlOjpzaXplIC0gMSkpKSB7CisgICAgICAg
ICAgICAvLyBPYmplY3QgcmVwbGFjZW1lbnQgY2hhcmFjdGVyIG11c3Qgbm90IHJlbmRlciBhdCBh
bGwuCisgICAgICAgICAgICBidWZmZXJbb2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXIgLSBzdGFy
dF0gPSB6ZXJvV2lkdGhTcGFjZTsKKyAgICAgICAgfSBlbHNlIGlmIChzdGFydCA9PSAoemVyb1dp
ZHRoTm9CcmVha1NwYWNlICYgfihHbHlwaFBhZ2U6OnNpemUgLSAxKSkpIHsKKyAgICAgICAgICAg
IC8vIFpXTkJTL0JPTSBtdXN0IG5vdCByZW5kZXIgYXQgYWxsLgorICAgICAgICAgICAgYnVmZmVy
W3plcm9XaWR0aE5vQnJlYWtTcGFjZSAtIHN0YXJ0XSA9IHplcm9XaWR0aFNwYWNlOworICAgICAg
ICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgYnVmZmVyTGVuZ3RoID0gR2x5cGhQYWdlOjpzaXpl
ICogMjsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdseXBoUGFnZTo6c2l6ZTsg
aSsrKSB7CisgICAgICAgICAgICBpbnQgYyA9IGkgKyBzdGFydDsKKyAgICAgICAgICAgIGJ1ZmZl
cltpICogMl0gPSBVMTZfTEVBRChjKTsKKyAgICAgICAgICAgIGJ1ZmZlcltpICogMiArIDFdID0g
VTE2X1RSQUlMKGMpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gTm93IHRoYXQgd2UgaGF2
ZSBhIGJ1ZmZlciBmdWxsIG9mIGNoYXJhY3RlcnMsIHdlIHdhbnQgdG8gZ2V0IGJhY2sgYW4gYXJy
YXkKKyAgICAvLyBvZiBnbHlwaCBpbmRpY2VzLiBUaGlzIHBhcnQgaW52b2x2ZXMgY2FsbGluZyBp
bnRvIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYworICAgIC8vIHJvdXRpbmUgb2Ygb3VyIGdseXBoIG1h
cCBmb3IgYWN0dWFsbHkgZmlsbGluZyBpbiB0aGUgcGFnZSB3aXRoIHRoZSBnbHlwaHMuCisgICAg
Ly8gU3VjY2VzcyBpcyBub3QgZ3VhcmFudGVlZC4gRm9yIGV4YW1wbGUsIFRpbWVzIGZhaWxzIHRv
IGZpbGwgcGFnZSAyNjAsIGdpdmluZyBnbHlwaCBkYXRhCisgICAgLy8gZm9yIG9ubHkgMTI4IG91
dCBvZiAyNTYgY2hhcmFjdGVycy4KKyAgICBSZWZQdHI8R2x5cGhQYWdlPiBnbHlwaFBhZ2U7Cisg
ICAgaWYgKEdseXBoUGFnZTo6bWF5VXNlTWl4ZWRGb250RGF0YVdoZW5GaWxsaW5nKGJ1ZmZlciwg
YnVmZmVyTGVuZ3RoLCBmb250RGF0YSkpCisgICAgICAgIGdseXBoUGFnZSA9IEdseXBoUGFnZTo6
Y3JlYXRlRm9yTWl4ZWRGb250RGF0YSgpOworICAgIGVsc2UKKyAgICAgICAgZ2x5cGhQYWdlID0g
R2x5cGhQYWdlOjpjcmVhdGVGb3JTaW5nbGVGb250RGF0YShmb250RGF0YSk7CisKKyAgICBib29s
IGhhdmVHbHlwaHMgPSBmaWxsR2x5cGhQYWdlKCpnbHlwaFBhZ2UsIDAsIEdseXBoUGFnZTo6c2l6
ZSwgYnVmZmVyLCBidWZmZXJMZW5ndGgsIGZvbnREYXRhKTsKKyAgICBpZiAoIWhhdmVHbHlwaHMp
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgZ2x5cGhQYWdlLT5zZXRJbW11dGFibGUo
KTsKKyAgICByZXR1cm4gZ2x5cGhQYWdlOworfQorCitjb25zdCBHbHlwaFBhZ2UqIFNpbXBsZUZv
bnREYXRhOjpnbHlwaFBhZ2UodW5zaWduZWQgcGFnZU51bWJlcikgY29uc3QKK3sKKyAgICBpZiAo
cGFnZU51bWJlciA9PSAwKSB7CisgICAgICAgIGlmICghbV9nbHlwaFBhZ2VaZXJvKQorICAgICAg
ICAgICAgbV9nbHlwaFBhZ2VaZXJvID0gY3JlYXRlQW5kRmlsbEdseXBoUGFnZSgwLCB0aGlzKTsK
KyAgICAgICAgcmV0dXJuIG1fZ2x5cGhQYWdlWmVyby5nZXQoKTsKKyAgICB9CisgICAgYXV0byBh
ZGRSZXN1bHQgPSBtX2dseXBoUGFnZXMuYWRkKHBhZ2VOdW1iZXIsIG51bGxwdHIpOworICAgIGlm
IChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZSA9IGNyZWF0ZUFuZEZpbGxHbHlwaFBhZ2UocGFnZU51bWJlciwgdGhpcyk7CisKKyAgICByZXR1
cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKK30KKworR2x5cGggU2ltcGxlRm9u
dERhdGE6OmdseXBoRm9yQ2hhcmFjdGVyKFVDaGFyMzIgY2hhcmFjdGVyKSBjb25zdAoreworICAg
IGF1dG8qIHBhZ2UgPSBnbHlwaFBhZ2UoY2hhcmFjdGVyIC8gR2x5cGhQYWdlOjpzaXplKTsKKyAg
ICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBwYWdlLT5nbHlwaEF0
KGNoYXJhY3RlciAlIEdseXBoUGFnZTo6c2l6ZSk7Cit9CisKK0dseXBoRGF0YSBTaW1wbGVGb250
RGF0YTo6Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgY2hhcmFjdGVyKSBjb25zdAorewor
ICAgIGF1dG8qIHBhZ2UgPSBnbHlwaFBhZ2UoY2hhcmFjdGVyIC8gR2x5cGhQYWdlOjpzaXplKTsK
KyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybiBHbHlwaERhdGEoKTsKKyAgICByZXR1cm4g
cGFnZS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3Rlcik7Cit9CisKK1Bhc3NSZWZQdHI8
U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjp2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25G
b250RGF0YSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKKyAgICAgICAg
bV9kZXJpdmVkRm9udERhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPERlcml2ZWRGb250RGF0YT4oaXND
dXN0b21Gb250KCkpOworICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEtPnZlcnRpY2FsUmlnaHRP
cmllbnRhdGlvbikgeworICAgICAgICBGb250UGxhdGZvcm1EYXRhIHZlcnRpY2FsUmlnaHRQbGF0
Zm9ybURhdGEobV9wbGF0Zm9ybURhdGEpOworICAgICAgICB2ZXJ0aWNhbFJpZ2h0UGxhdGZvcm1E
YXRhLnNldE9yaWVudGF0aW9uKEhvcml6b250YWwpOworICAgICAgICBtX2Rlcml2ZWRGb250RGF0
YS0+dmVydGljYWxSaWdodE9yaWVudGF0aW9uID0gY3JlYXRlKHZlcnRpY2FsUmlnaHRQbGF0Zm9y
bURhdGEsIGlzQ3VzdG9tRm9udCgpLCBmYWxzZSwgdHJ1ZSk7CisgICAgfQorICAgIHJldHVybiBt
X2Rlcml2ZWRGb250RGF0YS0+dmVydGljYWxSaWdodE9yaWVudGF0aW9uOworfQorCitQYXNzUmVm
UHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6dXByaWdodE9yaWVudGF0aW9uRm9u
dERhdGEoKSBjb25zdAoreworICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEpCisgICAgICAgIG1f
ZGVyaXZlZEZvbnREYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxEZXJpdmVkRm9udERhdGE+KGlzQ3Vz
dG9tRm9udCgpKTsKKyAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhLT51cHJpZ2h0T3JpZW50YXRp
b24pCisgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT51cHJpZ2h0T3JpZW50YXRpb24gPSBjcmVh
dGUobV9wbGF0Zm9ybURhdGEsIGlzQ3VzdG9tRm9udCgpLCBmYWxzZSwgdHJ1ZSk7CisgICAgcmV0
dXJuIG1fZGVyaXZlZEZvbnREYXRhLT51cHJpZ2h0T3JpZW50YXRpb247Cit9CisKK1Bhc3NSZWZQ
dHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YShjb25z
dCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKK3sKKyAgICBpZiAoIW1f
ZGVyaXZlZEZvbnREYXRhKQorICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IHN0ZDo6bWFrZV91
bmlxdWU8RGVyaXZlZEZvbnREYXRhPihpc0N1c3RvbUZvbnQoKSk7CisgICAgaWYgKCFtX2Rlcml2
ZWRGb250RGF0YS0+c21hbGxDYXBzKQorICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxD
YXBzID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9uLCBzbWFsbENhcHNGb250
U2l6ZU11bHRpcGxpZXIpOworCisgICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENh
cHM7Cit9CisKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjplbXBo
YXNpc01hcmtGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikg
Y29uc3QKK3sKKyAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQorICAgICAgICBtX2Rlcml2ZWRG
b250RGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8RGVyaXZlZEZvbnREYXRhPihpc0N1c3RvbUZvbnQo
KSk7CisgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrKQorICAgICAgICBt
X2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9u
dERlc2NyaXB0aW9uLCBlbXBoYXNpc01hcmtGb250U2l6ZU11bHRpcGxpZXIpOworCisgICAgcmV0
dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcms7Cit9CisKK1Bhc3NSZWZQdHI8U2lt
cGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpicm9rZW5JZGVvZ3JhcGhGb250RGF0YSgpIGNv
bnN0Cit7CisgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKKyAgICAgICAgbV9kZXJpdmVkRm9u
dERhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPERlcml2ZWRGb250RGF0YT4oaXNDdXN0b21Gb250KCkp
OworICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEtPmJyb2tlbklkZW9ncmFwaCkgeworICAgICAg
ICBtX2Rlcml2ZWRGb250RGF0YS0+YnJva2VuSWRlb2dyYXBoID0gY3JlYXRlKG1fcGxhdGZvcm1E
YXRhLCBpc0N1c3RvbUZvbnQoKSwgZmFsc2UpOworICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+
YnJva2VuSWRlb2dyYXBoLT5tX2lzQnJva2VuSWRlb2dyYXBoRmFsbGJhY2sgPSB0cnVlOworICAg
IH0KKyAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPmJyb2tlbklkZW9ncmFwaDsKK30KKwor
UGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6Om5vblN5bnRoZXRpY0l0
YWxpY0ZvbnREYXRhKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQorICAg
ICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8RGVyaXZlZEZvbnREYXRh
Pihpc0N1c3RvbUZvbnQoKSk7CisgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+bm9uU3ludGhl
dGljSXRhbGljKSB7CisgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEgbm9uU3ludGhldGljSXRhbGlj
Rm9udFBsYXRmb3JtRGF0YShtX3BsYXRmb3JtRGF0YSk7CisjaWYgUExBVEZPUk0oQ09DT0EpCisg
ICAgICAgIG5vblN5bnRoZXRpY0l0YWxpY0ZvbnRQbGF0Zm9ybURhdGEubV9zeW50aGV0aWNPYmxp
cXVlID0gZmFsc2U7CisjZW5kaWYKKyAgICAgICAgbV9kZXJpdmVkRm9udERhdGEtPm5vblN5bnRo
ZXRpY0l0YWxpYyA9IGNyZWF0ZShub25TeW50aGV0aWNJdGFsaWNGb250UGxhdGZvcm1EYXRhLCBp
c0N1c3RvbUZvbnQoKSk7CisgICAgfQorICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+bm9u
U3ludGhldGljSXRhbGljOworfQorCisjaWZuZGVmIE5ERUJVRworU3RyaW5nIFNpbXBsZUZvbnRE
YXRhOjpkZXNjcmlwdGlvbigpIGNvbnN0Cit7CisgICAgaWYgKGlzU1ZHRm9udCgpKQorICAgICAg
ICByZXR1cm4gIltTVkcgZm9udF0iOworICAgIGlmIChpc0N1c3RvbUZvbnQoKSkKKyAgICAgICAg
cmV0dXJuICJbY3VzdG9tIGZvbnRdIjsKKworICAgIHJldHVybiBwbGF0Zm9ybURhdGEoKS5kZXNj
cmlwdGlvbigpOworfQorI2VuZGlmCisKK2NvbnN0IE9wZW5UeXBlTWF0aERhdGEqIFNpbXBsZUZv
bnREYXRhOjptYXRoRGF0YSgpIGNvbnN0Cit7CisgICAgaWYgKG1faXNMb2FkaW5nKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoIW1fbWF0aERhdGEpIHsKKyAgICAgICAgbV9tYXRo
RGF0YSA9IE9wZW5UeXBlTWF0aERhdGE6OmNyZWF0ZShtX3BsYXRmb3JtRGF0YSk7CisgICAgICAg
IGlmICghbV9tYXRoRGF0YS0+aGFzTWF0aERhdGEoKSkKKyAgICAgICAgICAgIG1fbWF0aERhdGEu
Y2xlYXIoKTsKKyAgICB9CisgICAgcmV0dXJuIG1fbWF0aERhdGEuZ2V0KCk7Cit9CisKK1NpbXBs
ZUZvbnREYXRhOjpEZXJpdmVkRm9udERhdGE6On5EZXJpdmVkRm9udERhdGEoKQoreworfQorCitQ
YXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlU2NhbGVkRm9u
dERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNjYWxl
RmFjdG9yKSBjb25zdAoreworICAgIGlmIChpc1NWR0ZvbnQoKSkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICByZXR1cm4gcGxhdGZvcm1DcmVhdGVTY2FsZWRGb250RGF0YShmb250RGVz
Y3JpcHRpb24sIHNjYWxlRmFjdG9yKTsKK30KKworYm9vbCBTaW1wbGVGb250RGF0YTo6YXBwbHlU
cmFuc2Zvcm1zKEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgR2x5cGhCdWZmZXJBZHZhbmNlKiBh
ZHZhbmNlcywgc2l6ZV90IGdseXBoQ291bnQsIFR5cGVzZXR0aW5nRmVhdHVyZXMgdHlwZXNldHRp
bmdGZWF0dXJlcykgY29uc3QKK3sKKyAgICAvLyBXZSBuZWVkIHRvIGhhbmRsZSB0cmFuc2Zvcm1z
IG9uIFNWRyBmb250cyBpbnRlcm5hbGx5LCBzaW5jZSB0aGV5IGFyZSByZW5kZXJlZCBpbnRlcm5h
bGx5LgorICAgIEFTU0VSVCghaXNTVkdGb250KCkpOworI2lmIFBMQVRGT1JNKElPUykgfHwgKFBM
QVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+IDEwODApCisg
ICAgQ1RGb250VHJhbnNmb3JtT3B0aW9ucyBvcHRpb25zID0gKHR5cGVzZXR0aW5nRmVhdHVyZXMg
JiBLZXJuaW5nID8ga0NURm9udFRyYW5zZm9ybUFwcGx5UG9zaXRpb25pbmcgOiAwKSB8ICh0eXBl
c2V0dGluZ0ZlYXR1cmVzICYgTGlnYXR1cmVzID8ga0NURm9udFRyYW5zZm9ybUFwcGx5U2hhcGlu
ZyA6IDApOworICAgIHJldHVybiBDVEZvbnRUcmFuc2Zvcm1HbHlwaHMobV9wbGF0Zm9ybURhdGEu
Y3RGb250KCksIGdseXBocywgcmVpbnRlcnByZXRfY2FzdDxDR1NpemUqPihhZHZhbmNlcyksIGds
eXBoQ291bnQsIG9wdGlvbnMpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZ2x5cGhzKTsKKyAg
ICBVTlVTRURfUEFSQU0oYWR2YW5jZXMpOworICAgIFVOVVNFRF9QQVJBTShnbHlwaENvdW50KTsK
KyAgICBVTlVTRURfUEFSQU0odHlwZXNldHRpbmdGZWF0dXJlcyk7CisgICAgcmV0dXJuIGZhbHNl
OworI2VuZGlmCit9CisKKy8vIEZvbnREYXRhcyBhcmUgbm90IHJlZmNvdW50ZWQgdG8gYXZvaWQg
Y3ljbGVzLgordHlwZWRlZiBIYXNoTWFwPHN0ZDo6cGFpcjxVQ2hhcjMyLCB1bnNpZ25lZD4sIFNp
bXBsZUZvbnREYXRhKj4gQ2hhcmFjdGVyRmFsbGJhY2tNYXA7Cit0eXBlZGVmIEhhc2hNYXA8Y29u
c3QgU2ltcGxlRm9udERhdGEqLCBDaGFyYWN0ZXJGYWxsYmFja01hcD4gU3lzdGVtRmFsbGJhY2tD
YWNoZTsKKworc3RhdGljIFN5c3RlbUZhbGxiYWNrQ2FjaGUmIHN5c3RlbUZhbGxiYWNrQ2FjaGUo
KQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTeXN0ZW1GYWxsYmFja0NhY2hlPiBtYXA7
CisgICAgcmV0dXJuIG1hcC5nZXQoKTsKK30KKworUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1w
bGVGb250RGF0YTo6c3lzdGVtRmFsbGJhY2tGb250RGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGNo
YXJhY3RlciwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgYm9vbCBpc0ZvclBs
YXRmb3JtRm9udCkgY29uc3QKK3sKKyAgICBhdXRvIGZvbnRBZGRSZXN1bHQgPSBzeXN0ZW1GYWxs
YmFja0NhY2hlKCkuYWRkKHRoaXMsIENoYXJhY3RlckZhbGxiYWNrTWFwKCkpOworCisgICAgYXV0
byBrZXkgPSBzdGQ6Om1ha2VfcGFpcihjaGFyYWN0ZXIsIGlzRm9yUGxhdGZvcm1Gb250KTsKKyAg
ICBhdXRvIGNoYXJhY3RlckFkZFJlc3VsdCA9IGZvbnRBZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVl
LmFkZChrZXksIG51bGxwdHIpOworCisgICAgU2ltcGxlRm9udERhdGEqJiBmYWxsYmFja0ZvbnRE
YXRhID0gY2hhcmFjdGVyQWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKKworICAgIGlmICghZmFs
bGJhY2tGb250RGF0YSkgeworICAgICAgICBVQ2hhciBjb2RlVW5pdHNbMl07CisgICAgICAgIGlu
dCBjb2RlVW5pdHNMZW5ndGg7CisgICAgICAgIGlmIChVX0lTX0JNUChjaGFyYWN0ZXIpKSB7Cisg
ICAgICAgICAgICBjb2RlVW5pdHNbMF0gPSBGb250Q2FzY2FkZTo6bm9ybWFsaXplU3BhY2VzKGNo
YXJhY3Rlcik7CisgICAgICAgICAgICBjb2RlVW5pdHNMZW5ndGggPSAxOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgY29kZVVuaXRzWzBdID0gVTE2X0xFQUQoY2hhcmFjdGVyKTsKKyAg
ICAgICAgICAgIGNvZGVVbml0c1sxXSA9IFUxNl9UUkFJTChjaGFyYWN0ZXIpOworICAgICAgICAg
ICAgY29kZVVuaXRzTGVuZ3RoID0gMjsKKyAgICAgICAgfQorCisgICAgICAgIGZhbGxiYWNrRm9u
dERhdGEgPSBmb250Q2FjaGUoKS5zeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoZGVzY3JpcHRp
b24sIHRoaXMsIGlzRm9yUGxhdGZvcm1Gb250LCBjb2RlVW5pdHMsIGNvZGVVbml0c0xlbmd0aCku
Z2V0KCk7CisgICAgICAgIGlmIChmYWxsYmFja0ZvbnREYXRhKQorICAgICAgICAgICAgZmFsbGJh
Y2tGb250RGF0YS0+bV9pc1VzZWRJblN5c3RlbUZhbGxiYWNrQ2FjaGUgPSB0cnVlOworICAgIH0K
KworICAgIHJldHVybiBmYWxsYmFja0ZvbnREYXRhOworfQorCit2b2lkIFNpbXBsZUZvbnREYXRh
OjpyZW1vdmVGcm9tU3lzdGVtRmFsbGJhY2tDYWNoZSgpCit7CisgICAgc3lzdGVtRmFsbGJhY2tD
YWNoZSgpLnJlbW92ZSh0aGlzKTsKKworICAgIGlmICghbV9pc1VzZWRJblN5c3RlbUZhbGxiYWNr
Q2FjaGUpCisgICAgICAgIHJldHVybjsKKworICAgIGZvciAoYXV0byYgY2hhcmFjdGVyTWFwIDog
c3lzdGVtRmFsbGJhY2tDYWNoZSgpLnZhbHVlcygpKSB7CisgICAgICAgIFZlY3RvcjxzdGQ6OnBh
aXI8VUNoYXIzMiwgdW5zaWduZWQ+LCA1MTI+IHRvUmVtb3ZlOworICAgICAgICBmb3IgKGF1dG8m
IGVudHJ5IDogY2hhcmFjdGVyTWFwKSB7CisgICAgICAgICAgICBpZiAoZW50cnkudmFsdWUgPT0g
dGhpcykKKyAgICAgICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQoZW50cnkua2V5KTsKKyAgICAg
ICAgfQorICAgICAgICBmb3IgKGF1dG8mIGtleSA6IHRvUmVtb3ZlKQorICAgICAgICAgICAgY2hh
cmFjdGVyTWFwLnJlbW92ZShrZXkpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAJKHdvcmtp
bmcgY29weSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisjaW5jbHVkZSAiRm9udC5oIgogCiAjaWYg
UExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlO
X1JFUVVJUkVEID4gMTA4MCkKICNpbmNsdWRlICJDb3JlVGV4dFNQSS5oIgpAQCAtNTAsNyArNTAs
NyBAQCB1bnNpZ25lZCBHbHlwaFBhZ2U6OnNfY291bnQgPSAwOwogY29uc3QgZmxvYXQgc21hbGxD
YXBzRm9udFNpemVNdWx0aXBsaWVyID0gMC43ZjsKIGNvbnN0IGZsb2F0IGVtcGhhc2lzTWFya0Zv
bnRTaXplTXVsdGlwbGllciA9IDAuNWY7CiAKLVNpbXBsZUZvbnREYXRhOjpTaW1wbGVGb250RGF0
YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEsIGJvb2wgaXNDdXN0b21Gb250
LCBib29sIGlzTG9hZGluZywgYm9vbCBpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKQorRm9udDo6
Rm9udChjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEsIGJvb2wgaXNDdXN0b21G
b250LCBib29sIGlzTG9hZGluZywgYm9vbCBpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKQogICAg
IDogbV9tYXhDaGFyV2lkdGgoLTEpCiAgICAgLCBtX2F2Z0NoYXJXaWR0aCgtMSkKICAgICAsIG1f
cGxhdGZvcm1EYXRhKHBsYXRmb3JtRGF0YSkKQEAgLTc2LDcgKzc2LDcgQEAgU2ltcGxlRm9udERh
dGE6OlNpbXBsZUZvbnREYXRhKGNvbnN0IEZvbgogI2VuZGlmCiB9CiAKLVNpbXBsZUZvbnREYXRh
OjpTaW1wbGVGb250RGF0YShzdGQ6OnVuaXF1ZV9wdHI8U1ZHRGF0YT4gc3ZnRGF0YSwgZmxvYXQg
Zm9udFNpemUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpCitGb250
OjpGb250KHN0ZDo6dW5pcXVlX3B0cjxTVkdEYXRhPiBzdmdEYXRhLCBmbG9hdCBmb250U2l6ZSwg
Ym9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYykKICAgICA6IG1fcGxhdGZv
cm1EYXRhKEZvbnRQbGF0Zm9ybURhdGEoZm9udFNpemUsIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRp
Y0l0YWxpYykpCiAgICAgLCBtX3N2Z0RhdGEoV1RGOjptb3ZlKHN2Z0RhdGEpKQogICAgICwgbV90
cmVhdEFzRml4ZWRQaXRjaChmYWxzZSkKQEAgLTkzLDExICs5MywxMSBAQCBTaW1wbGVGb250RGF0
YTo6U2ltcGxlRm9udERhdGEoc3RkOjp1bmlxCiAgICAgLCBtX3Nob3VsZE5vdEJlVXNlZEZvckFy
YWJpYyhmYWxzZSkKICNlbmRpZgogewotICAgIG1fc3ZnRGF0YS0+aW5pdGlhbGl6ZUZvbnREYXRh
KHRoaXMsIGZvbnRTaXplKTsKKyAgICBtX3N2Z0RhdGEtPmluaXRpYWxpemVGb250KHRoaXMsIGZv
bnRTaXplKTsKIH0KIAogLy8gRXN0aW1hdGVzIG9mIGF2Z0NoYXJXaWR0aCBhbmQgbWF4Q2hhcldp
ZHRoIGZvciBwbGF0Zm9ybXMgdGhhdCBkb24ndCBzdXBwb3J0IGFjY2Vzc2luZyB0aGVzZSB2YWx1
ZXMgZnJvbSB0aGUgZm9udC4KLXZvaWQgU2ltcGxlRm9udERhdGE6OmluaXRDaGFyV2lkdGhzKCkK
K3ZvaWQgRm9udDo6aW5pdENoYXJXaWR0aHMoKQogewogICAgIGF1dG8qIGdseXBoUGFnZVplcm8g
PSBnbHlwaFBhZ2UoMCk7CiAKQEAgLTExNyw3ICsxMTcsNyBAQCB2b2lkIFNpbXBsZUZvbnREYXRh
Ojppbml0Q2hhcldpZHRocygpCiAgICAgICAgIG1fbWF4Q2hhcldpZHRoID0gc3RkOjptYXgobV9h
dmdDaGFyV2lkdGgsIG1fZm9udE1ldHJpY3MuZmxvYXRBc2NlbnQoKSk7CiB9CiAKLXZvaWQgU2lt
cGxlRm9udERhdGE6OnBsYXRmb3JtR2x5cGhJbml0KCkKK3ZvaWQgRm9udDo6cGxhdGZvcm1HbHlw
aEluaXQoKQogewogICAgIGF1dG8qIGdseXBoUGFnZVplcm8gPSBnbHlwaFBhZ2UoMCk7CiAgICAg
aWYgKCFnbHlwaFBhZ2VaZXJvKSB7CkBAIC0xMzYsNyArMTM2LDcgQEAgdm9pZCBTaW1wbGVGb250
RGF0YTo6cGxhdGZvcm1HbHlwaEluaXQoKQogCiAgICAgLy8gTmFzdHkgaGFjayB0byBkZXRlcm1p
bmUgaWYgd2Ugc2hvdWxkIHJvdW5kIG9yIGNlaWwgc3BhY2Ugd2lkdGhzLgogICAgIC8vIElmIHRo
ZSBmb250IGlzIG1vbm9zcGFjZSBvciBmYWtlIG1vbm9zcGFjZSB3ZSBjZWlsIHRvIGVuc3VyZSB0
aGF0IAotICAgIC8vIGV2ZXJ5IGNoYXJhY3RlciBhbmQgdGhlIHNwYWNlIGFyZSB0aGUgc2FtZSB3
aWR0aC4gIE90aGVyd2lzZSB3ZSByb3VuZC4KKyAgICAvLyBldmVyeSBjaGFyYWN0ZXIgYW5kIHRo
ZSBzcGFjZSBhcmUgdGhlIHNhbWUgd2lkdGguIE90aGVyd2lzZSB3ZSByb3VuZC4KICAgICBtX3Nw
YWNlR2x5cGggPSBnbHlwaFBhZ2VaZXJvLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoJyAnKS5nbHlw
aDsKICAgICBmbG9hdCB3aWR0aCA9IHdpZHRoRm9yR2x5cGgobV9zcGFjZUdseXBoKTsKICAgICBt
X3NwYWNlV2lkdGggPSB3aWR0aDsKQEAgLTE0NywzNyArMTQ3LDM3IEBAIHZvaWQgU2ltcGxlRm9u
dERhdGE6OnBsYXRmb3JtR2x5cGhJbml0KCkKIAogICAgIC8vIEZvcmNlIHRoZSBnbHlwaCBmb3Ig
WkVSTyBXSURUSCBTUEFDRSB0byBoYXZlIHplcm8gd2lkdGgsIHVubGVzcyBpdCBpcyBzaGFyZWQg
d2l0aCBTUEFDRS4KICAgICAvLyBIZWx2ZXRpY2EgaXMgYW4gZXhhbXBsZSBvZiBhIG5vbi16ZXJv
IHdpZHRoIFpFUk8gV0lEVEggU1BBQ0UgZ2x5cGguCi0gICAgLy8gU2VlIDxodHRwOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzE3OD4gYW5kIFNpbXBsZUZvbnREYXRhOjppc1pl
cm9XaWR0aFNwYWNlR2x5cGgoKQorICAgIC8vIFNlZSA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTMxNzg+IGFuZCBGb250Ojppc1plcm9XaWR0aFNwYWNlR2x5cGgoKQog
ICAgIGlmIChtX3plcm9XaWR0aFNwYWNlR2x5cGggPT0gbV9zcGFjZUdseXBoKQogICAgICAgICBt
X3plcm9XaWR0aFNwYWNlR2x5cGggPSAwOwogfQogCi1TaW1wbGVGb250RGF0YTo6flNpbXBsZUZv
bnREYXRhKCkKK0ZvbnQ6On5Gb250KCkKIHsKICAgICByZW1vdmVGcm9tU3lzdGVtRmFsbGJhY2tD
YWNoZSgpOwogfQogCi1zdGF0aWMgYm9vbCBmaWxsR2x5cGhQYWdlKEdseXBoUGFnZSYgcGFnZVRv
RmlsbCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIsIHVu
c2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQorc3Rh
dGljIGJvb2wgZmlsbEdseXBoUGFnZShHbHlwaFBhZ2UmIHBhZ2VUb0ZpbGwsIHVuc2lnbmVkIG9m
ZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5n
dGgsIGNvbnN0IEZvbnQqIGZvbnQpCiB7CiAjaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICBpZiAo
YXV0byogc3ZnRGF0YSA9IGZvbnREYXRhLT5zdmdEYXRhKCkpCi0gICAgICAgIHJldHVybiBzdmdE
YXRhLT5maWxsU1ZHR2x5cGhQYWdlKCZwYWdlVG9GaWxsLCBvZmZzZXQsIGxlbmd0aCwgYnVmZmVy
LCBidWZmZXJMZW5ndGgsIGZvbnREYXRhKTsKKyAgICBpZiAoYXV0byogc3ZnRGF0YSA9IGZvbnQt
PnN2Z0RhdGEoKSkKKyAgICAgICAgcmV0dXJuIHN2Z0RhdGEtPmZpbGxTVkdHbHlwaFBhZ2UoJnBh
Z2VUb0ZpbGwsIG9mZnNldCwgbGVuZ3RoLCBidWZmZXIsIGJ1ZmZlckxlbmd0aCwgZm9udCk7CiAj
ZW5kaWYKLSAgICBib29sIGhhc0dseXBocyA9IHBhZ2VUb0ZpbGwuZmlsbChvZmZzZXQsIGxlbmd0
aCwgYnVmZmVyLCBidWZmZXJMZW5ndGgsIGZvbnREYXRhKTsKKyAgICBib29sIGhhc0dseXBocyA9
IHBhZ2VUb0ZpbGwuZmlsbChvZmZzZXQsIGxlbmd0aCwgYnVmZmVyLCBidWZmZXJMZW5ndGgsIGZv
bnQpOwogI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKLSAgICBpZiAoaGFzR2x5cGhzICYm
IGZvbnREYXRhLT52ZXJ0aWNhbERhdGEoKSkKLSAgICAgICAgZm9udERhdGEtPnZlcnRpY2FsRGF0
YSgpLT5zdWJzdGl0dXRlV2l0aFZlcnRpY2FsR2x5cGhzKGZvbnREYXRhLCAmcGFnZVRvRmlsbCwg
b2Zmc2V0LCBsZW5ndGgpOworICAgIGlmIChoYXNHbHlwaHMgJiYgZm9udC0+dmVydGljYWxEYXRh
KCkpCisgICAgICAgIGZvbnQtPnZlcnRpY2FsRGF0YSgpLT5zdWJzdGl0dXRlV2l0aFZlcnRpY2Fs
R2x5cGhzKGZvbnQsICZwYWdlVG9GaWxsLCBvZmZzZXQsIGxlbmd0aCk7CiAjZW5kaWYKICAgICBy
ZXR1cm4gaGFzR2x5cGhzOwogfQogCi1zdGF0aWMgUmVmUHRyPEdseXBoUGFnZT4gY3JlYXRlQW5k
RmlsbEdseXBoUGFnZSh1bnNpZ25lZCBwYWdlTnVtYmVyLCBjb25zdCBTaW1wbGVGb250RGF0YSog
Zm9udERhdGEpCitzdGF0aWMgUmVmUHRyPEdseXBoUGFnZT4gY3JlYXRlQW5kRmlsbEdseXBoUGFn
ZSh1bnNpZ25lZCBwYWdlTnVtYmVyLCBjb25zdCBGb250KiBmb250KQogewogI2lmIFBMQVRGT1JN
KElPUykKICAgICAvLyBGSVhNRTogVGltZXMgTmV3IFJvbWFuIGNvbnRhaW5zIEFyYWJpYyBnbHlw
aHMsIGJ1dCBDb3JlIFRleHQgZG9lc24ndCBrbm93IGhvdyB0byBzaGFwZSB0aGVtLiBTZWUgPHJk
YXI6Ly9wcm9ibGVtLzk4MjM5NzU+LgotICAgIC8vIE9uY2Ugd2UgaGF2ZSB0aGUgZml4IGZvciA8
cmRhcjovL3Byb2JsZW0vOTgyMzk3NT4gdGhlbiByZW1vdmUgdGhpcyBjb2RlIHRvZ2V0aGVyIHdp
dGggU2ltcGxlRm9udERhdGE6OnNob3VsZE5vdEJlVXNlZEZvckFyYWJpYygpCisgICAgLy8gT25j
ZSB3ZSBoYXZlIHRoZSBmaXggZm9yIDxyZGFyOi8vcHJvYmxlbS85ODIzOTc1PiB0aGVuIHJlbW92
ZSB0aGlzIGNvZGUgdG9nZXRoZXIgd2l0aCBGb250OjpzaG91bGROb3RCZVVzZWRGb3JBcmFiaWMo
KQogICAgIC8vIGluIDxyZGFyOi8vcHJvYmxlbS8xMjA5NjgzNT4uCi0gICAgaWYgKHBhZ2VOdW1i
ZXIgPT0gNiAmJiBmb250RGF0YS0+c2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKCkpCisgICAgaWYg
KHBhZ2VOdW1iZXIgPT0gNiAmJiBmb250LT5zaG91bGROb3RCZVVzZWRGb3JBcmFiaWMoKSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAjZW5kaWYKIApAQCAtMTkwLDcgKzE5MCw3IEBAIHN0YXRp
YyBSZWZQdHI8R2x5cGhQYWdlPiBjcmVhdGVBbmRGaWxsR2wKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IEdseXBoUGFnZTo6c2l6ZTsgaSsrKQogICAgICAgICAgICAgYnVmZmVyW2ld
ID0gc3RhcnQgKyBpOwogCi0gICAgICAgIGlmIChzdGFydCA9PSAwKSB7CisgICAgICAgIGlmICgh
c3RhcnQpIHsKICAgICAgICAgICAgIC8vIENvbnRyb2wgY2hhcmFjdGVycyBtdXN0IG5vdCByZW5k
ZXIgYXQgYWxsLgogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDB4MjA7ICsr
aSkKICAgICAgICAgICAgICAgICBidWZmZXJbaV0gPSB6ZXJvV2lkdGhTcGFjZTsKQEAgLTIzNSwx
MiArMjM1LDEyIEBAIHN0YXRpYyBSZWZQdHI8R2x5cGhQYWdlPiBjcmVhdGVBbmRGaWxsR2wKICAg
ICAvLyBTdWNjZXNzIGlzIG5vdCBndWFyYW50ZWVkLiBGb3IgZXhhbXBsZSwgVGltZXMgZmFpbHMg
dG8gZmlsbCBwYWdlIDI2MCwgZ2l2aW5nIGdseXBoIGRhdGEKICAgICAvLyBmb3Igb25seSAxMjgg
b3V0IG9mIDI1NiBjaGFyYWN0ZXJzLgogICAgIFJlZlB0cjxHbHlwaFBhZ2U+IGdseXBoUGFnZTsK
LSAgICBpZiAoR2x5cGhQYWdlOjptYXlVc2VNaXhlZEZvbnREYXRhV2hlbkZpbGxpbmcoYnVmZmVy
LCBidWZmZXJMZW5ndGgsIGZvbnREYXRhKSkKLSAgICAgICAgZ2x5cGhQYWdlID0gR2x5cGhQYWdl
OjpjcmVhdGVGb3JNaXhlZEZvbnREYXRhKCk7CisgICAgaWYgKEdseXBoUGFnZTo6bWF5VXNlTWl4
ZWRGb250c1doZW5GaWxsaW5nKGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCBmb250KSkKKyAgICAgICAg
Z2x5cGhQYWdlID0gR2x5cGhQYWdlOjpjcmVhdGVGb3JNaXhlZEZvbnRzKCk7CiAgICAgZWxzZQot
ICAgICAgICBnbHlwaFBhZ2UgPSBHbHlwaFBhZ2U6OmNyZWF0ZUZvclNpbmdsZUZvbnREYXRhKGZv
bnREYXRhKTsKKyAgICAgICAgZ2x5cGhQYWdlID0gR2x5cGhQYWdlOjpjcmVhdGVGb3JTaW5nbGVG
b250KGZvbnQpOwogCi0gICAgYm9vbCBoYXZlR2x5cGhzID0gZmlsbEdseXBoUGFnZSgqZ2x5cGhQ
YWdlLCAwLCBHbHlwaFBhZ2U6OnNpemUsIGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCBmb250RGF0YSk7
CisgICAgYm9vbCBoYXZlR2x5cGhzID0gZmlsbEdseXBoUGFnZSgqZ2x5cGhQYWdlLCAwLCBHbHlw
aFBhZ2U6OnNpemUsIGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCBmb250KTsKICAgICBpZiAoIWhhdmVH
bHlwaHMpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0yNDgsOSArMjQ4LDkgQEAgc3Rh
dGljIFJlZlB0cjxHbHlwaFBhZ2U+IGNyZWF0ZUFuZEZpbGxHbAogICAgIHJldHVybiBnbHlwaFBh
Z2U7CiB9CiAKLWNvbnN0IEdseXBoUGFnZSogU2ltcGxlRm9udERhdGE6OmdseXBoUGFnZSh1bnNp
Z25lZCBwYWdlTnVtYmVyKSBjb25zdAorY29uc3QgR2x5cGhQYWdlKiBGb250OjpnbHlwaFBhZ2Uo
dW5zaWduZWQgcGFnZU51bWJlcikgY29uc3QKIHsKLSAgICBpZiAocGFnZU51bWJlciA9PSAwKSB7
CisgICAgaWYgKCFwYWdlTnVtYmVyKSB7CiAgICAgICAgIGlmICghbV9nbHlwaFBhZ2VaZXJvKQog
ICAgICAgICAgICAgbV9nbHlwaFBhZ2VaZXJvID0gY3JlYXRlQW5kRmlsbEdseXBoUGFnZSgwLCB0
aGlzKTsKICAgICAgICAgcmV0dXJuIG1fZ2x5cGhQYWdlWmVyby5nZXQoKTsKQEAgLTI2Miw3ICsy
NjIsNyBAQCBjb25zdCBHbHlwaFBhZ2UqIFNpbXBsZUZvbnREYXRhOjpnbHlwaFBhCiAgICAgcmV0
dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7CiB9CiAKLUdseXBoIFNpbXBsZUZv
bnREYXRhOjpnbHlwaEZvckNoYXJhY3RlcihVQ2hhcjMyIGNoYXJhY3RlcikgY29uc3QKK0dseXBo
IEZvbnQ6OmdseXBoRm9yQ2hhcmFjdGVyKFVDaGFyMzIgY2hhcmFjdGVyKSBjb25zdAogewogICAg
IGF1dG8qIHBhZ2UgPSBnbHlwaFBhZ2UoY2hhcmFjdGVyIC8gR2x5cGhQYWdlOjpzaXplKTsKICAg
ICBpZiAoIXBhZ2UpCkBAIC0yNzAsNyArMjcwLDcgQEAgR2x5cGggU2ltcGxlRm9udERhdGE6Omds
eXBoRm9yQ2hhcmFjdGVyKAogICAgIHJldHVybiBwYWdlLT5nbHlwaEF0KGNoYXJhY3RlciAlIEds
eXBoUGFnZTo6c2l6ZSk7CiB9CiAKLUdseXBoRGF0YSBTaW1wbGVGb250RGF0YTo6Z2x5cGhEYXRh
Rm9yQ2hhcmFjdGVyKFVDaGFyMzIgY2hhcmFjdGVyKSBjb25zdAorR2x5cGhEYXRhIEZvbnQ6Omds
eXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGNoYXJhY3RlcikgY29uc3QKIHsKICAgICBhdXRv
KiBwYWdlID0gZ2x5cGhQYWdlKGNoYXJhY3RlciAvIEdseXBoUGFnZTo6c2l6ZSk7CiAgICAgaWYg
KCFwYWdlKQpAQCAtMjc4LDcgKzI3OCw3IEBAIEdseXBoRGF0YSBTaW1wbGVGb250RGF0YTo6Z2x5
cGhEYXRhRm9yQ2gKICAgICByZXR1cm4gcGFnZS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJh
Y3Rlcik7CiB9CiAKLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjp2
ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250RGF0YSgpIGNvbnN0CitQYXNzUmVmUHRyPEZvbnQ+
IEZvbnQ6OnZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbkZvbnQoKSBjb25zdAogewogICAgIGlmICgh
bV9kZXJpdmVkRm9udERhdGEpCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gc3RkOjptYWtl
X3VuaXF1ZTxEZXJpdmVkRm9udERhdGE+KGlzQ3VzdG9tRm9udCgpKTsKQEAgLTI5MCw3ICsyOTAs
NyBAQCBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0CiAgICAgcmV0dXJu
IG1fZGVyaXZlZEZvbnREYXRhLT52ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb247CiB9CiAKLVBhc3NS
ZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjp1cHJpZ2h0T3JpZW50YXRpb25G
b250RGF0YSgpIGNvbnN0CitQYXNzUmVmUHRyPEZvbnQ+IEZvbnQ6OnVwcmlnaHRPcmllbnRhdGlv
bkZvbnQoKSBjb25zdAogewogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEpCiAgICAgICAgIG1f
ZGVyaXZlZEZvbnREYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxEZXJpdmVkRm9udERhdGE+KGlzQ3Vz
dG9tRm9udCgpKTsKQEAgLTI5OSwyNyArMjk5LDI3IEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERh
dGE+IFNpbXBsZUZvbnREYXQKICAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPnVwcmlnaHRP
cmllbnRhdGlvbjsKIH0KIAotUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERh
dGE6OnNtYWxsQ2Fwc0ZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0
aW9uKSBjb25zdAorUGFzc1JlZlB0cjxGb250PiBGb250OjpzbWFsbENhcHNGb250KGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAogewogICAgIGlmICghbV9kZXJp
dmVkRm9udERhdGEpCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gc3RkOjptYWtlX3VuaXF1
ZTxEZXJpdmVkRm9udERhdGE+KGlzQ3VzdG9tRm9udCgpKTsKICAgICBpZiAoIW1fZGVyaXZlZEZv
bnREYXRhLT5zbWFsbENhcHMpCi0gICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMg
PSBjcmVhdGVTY2FsZWRGb250RGF0YShmb250RGVzY3JpcHRpb24sIHNtYWxsQ2Fwc0ZvbnRTaXpl
TXVsdGlwbGllcik7CisgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMgPSBjcmVh
dGVTY2FsZWRGb250KGZvbnREZXNjcmlwdGlvbiwgc21hbGxDYXBzRm9udFNpemVNdWx0aXBsaWVy
KTsKIAogICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzOwogfQogCi1QYXNz
UmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6ZW1waGFzaXNNYXJrRm9udERh
dGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0CitQYXNzUmVm
UHRyPEZvbnQ+IEZvbnQ6OmVtcGhhc2lzTWFya0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBm
b250RGVzY3JpcHRpb24pIGNvbnN0CiB7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKICAg
ICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPERlcml2ZWRGb250RGF0
YT4oaXNDdXN0b21Gb250KCkpOwogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lz
TWFyaykKLSAgICAgICAgbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyayA9IGNyZWF0ZVNj
YWxlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgZW1waGFzaXNNYXJrRm9udFNpemVNdWx0aXBs
aWVyKTsKKyAgICAgICAgbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyayA9IGNyZWF0ZVNj
YWxlZEZvbnQoZm9udERlc2NyaXB0aW9uLCBlbXBoYXNpc01hcmtGb250U2l6ZU11bHRpcGxpZXIp
OwogCiAgICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcms7CiB9CiAKLVBh
c3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpicm9rZW5JZGVvZ3JhcGhG
b250RGF0YSgpIGNvbnN0CitQYXNzUmVmUHRyPEZvbnQ+IEZvbnQ6OmJyb2tlbklkZW9ncmFwaEZv
bnQoKSBjb25zdAogewogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEpCiAgICAgICAgIG1fZGVy
aXZlZEZvbnREYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxEZXJpdmVkRm9udERhdGE+KGlzQ3VzdG9t
Rm9udCgpKTsKQEAgLTMzMCw3ICszMzAsNyBAQCBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBT
aW1wbGVGb250RGF0CiAgICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5icm9rZW5JZGVvZ3Jh
cGg7CiB9CiAKLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpub25T
eW50aGV0aWNJdGFsaWNGb250RGF0YSgpIGNvbnN0CitQYXNzUmVmUHRyPEZvbnQ+IEZvbnQ6Om5v
blN5bnRoZXRpY0l0YWxpY0ZvbnQoKSBjb25zdAogewogICAgIGlmICghbV9kZXJpdmVkRm9udERh
dGEpCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxEZXJpdmVk
Rm9udERhdGE+KGlzQ3VzdG9tRm9udCgpKTsKQEAgLTM0NSw3ICszNDUsNyBAQCBQYXNzUmVmUHRy
PFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0CiB9CiAKICNpZm5kZWYgTkRFQlVHCi1TdHJp
bmcgU2ltcGxlRm9udERhdGE6OmRlc2NyaXB0aW9uKCkgY29uc3QKK1N0cmluZyBGb250OjpkZXNj
cmlwdGlvbigpIGNvbnN0CiB7CiAgICAgaWYgKGlzU1ZHRm9udCgpKQogICAgICAgICByZXR1cm4g
IltTVkcgZm9udF0iOwpAQCAtMzU2LDcgKzM1Niw3IEBAIFN0cmluZyBTaW1wbGVGb250RGF0YTo6
ZGVzY3JpcHRpb24oKSBjb24KIH0KICNlbmRpZgogCi1jb25zdCBPcGVuVHlwZU1hdGhEYXRhKiBT
aW1wbGVGb250RGF0YTo6bWF0aERhdGEoKSBjb25zdAorY29uc3QgT3BlblR5cGVNYXRoRGF0YSog
Rm9udDo6bWF0aERhdGEoKSBjb25zdAogewogICAgIGlmIChtX2lzTG9hZGluZykKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CkBAIC0zNjgsMTkgKzM2OCwxOSBAQCBjb25zdCBPcGVuVHlwZU1hdGhE
YXRhKiBTaW1wbGVGb250RGF0YTo6CiAgICAgcmV0dXJuIG1fbWF0aERhdGEuZ2V0KCk7CiB9CiAK
LVNpbXBsZUZvbnREYXRhOjpEZXJpdmVkRm9udERhdGE6On5EZXJpdmVkRm9udERhdGEoKQorRm9u
dDo6RGVyaXZlZEZvbnREYXRhOjp+RGVyaXZlZEZvbnREYXRhKCkKIHsKIH0KIAotUGFzc1JlZlB0
cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZVNjYWxlZEZvbnREYXRhKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBzY2FsZUZhY3Rvcikg
Y29uc3QKK1Bhc3NSZWZQdHI8Rm9udD4gRm9udDo6Y3JlYXRlU2NhbGVkRm9udChjb25zdCBGb250
RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0CiB7
CiAgICAgaWYgKGlzU1ZHRm9udCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJl
dHVybiBwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgc2NhbGVG
YWN0b3IpOworICAgIHJldHVybiBwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZvbnQoZm9udERlc2NyaXB0
aW9uLCBzY2FsZUZhY3Rvcik7CiB9CiAKLWJvb2wgU2ltcGxlRm9udERhdGE6OmFwcGx5VHJhbnNm
b3JtcyhHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5j
ZXMsIHNpemVfdCBnbHlwaENvdW50LCBUeXBlc2V0dGluZ0ZlYXR1cmVzIHR5cGVzZXR0aW5nRmVh
dHVyZXMpIGNvbnN0Citib29sIEZvbnQ6OmFwcGx5VHJhbnNmb3JtcyhHbHlwaEJ1ZmZlckdseXBo
KiBnbHlwaHMsIEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHNpemVfdCBnbHlwaENvdW50
LCBUeXBlc2V0dGluZ0ZlYXR1cmVzIHR5cGVzZXR0aW5nRmVhdHVyZXMpIGNvbnN0CiB7CiAgICAg
Ly8gV2UgbmVlZCB0byBoYW5kbGUgdHJhbnNmb3JtcyBvbiBTVkcgZm9udHMgaW50ZXJuYWxseSwg
c2luY2UgdGhleSBhcmUgcmVuZGVyZWQgaW50ZXJuYWxseS4KICAgICBBU1NFUlQoIWlzU1ZHRm9u
dCgpKTsKQEAgLTM5Niw5ICszOTYsOSBAQCBib29sIFNpbXBsZUZvbnREYXRhOjphcHBseVRyYW5z
Zm9ybXMoR2x5CiAjZW5kaWYKIH0KIAotLy8gRm9udERhdGFzIGFyZSBub3QgcmVmY291bnRlZCB0
byBhdm9pZCBjeWNsZXMuCi10eXBlZGVmIEhhc2hNYXA8c3RkOjpwYWlyPFVDaGFyMzIsIHVuc2ln
bmVkPiwgU2ltcGxlRm9udERhdGEqPiBDaGFyYWN0ZXJGYWxsYmFja01hcDsKLXR5cGVkZWYgSGFz
aE1hcDxjb25zdCBTaW1wbGVGb250RGF0YSosIENoYXJhY3RlckZhbGxiYWNrTWFwPiBTeXN0ZW1G
YWxsYmFja0NhY2hlOworLy8gRm9udHMgYXJlIG5vdCByZWYnZCB0byBhdm9pZCBjeWNsZXMuCit0
eXBlZGVmIEhhc2hNYXA8c3RkOjpwYWlyPFVDaGFyMzIsIHVuc2lnbmVkPiwgRm9udCo+IENoYXJh
Y3RlckZhbGxiYWNrTWFwOwordHlwZWRlZiBIYXNoTWFwPGNvbnN0IEZvbnQqLCBDaGFyYWN0ZXJG
YWxsYmFja01hcD4gU3lzdGVtRmFsbGJhY2tDYWNoZTsKIAogc3RhdGljIFN5c3RlbUZhbGxiYWNr
Q2FjaGUmIHN5c3RlbUZhbGxiYWNrQ2FjaGUoKQogewpAQCAtNDA2LDE2ICs0MDYsMTYgQEAgc3Rh
dGljIFN5c3RlbUZhbGxiYWNrQ2FjaGUmIHN5c3RlbUZhbGxiYQogICAgIHJldHVybiBtYXAuZ2V0
KCk7CiB9CiAKLVJlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OnN5c3RlbUZh
bGxiYWNrRm9udERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjaGFyYWN0ZXIsIGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGJvb2wgaXNGb3JQbGF0Zm9ybUZvbnQpIGNvbnN0CitS
ZWZQdHI8Rm9udD4gRm9udDo6c3lzdGVtRmFsbGJhY2tGb250Rm9yQ2hhcmFjdGVyKFVDaGFyMzIg
Y2hhcmFjdGVyLCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBib29sIGlzRm9y
UGxhdGZvcm1Gb250KSBjb25zdAogewogICAgIGF1dG8gZm9udEFkZFJlc3VsdCA9IHN5c3RlbUZh
bGxiYWNrQ2FjaGUoKS5hZGQodGhpcywgQ2hhcmFjdGVyRmFsbGJhY2tNYXAoKSk7CiAKICAgICBh
dXRvIGtleSA9IHN0ZDo6bWFrZV9wYWlyKGNoYXJhY3RlciwgaXNGb3JQbGF0Zm9ybUZvbnQpOwog
ICAgIGF1dG8gY2hhcmFjdGVyQWRkUmVzdWx0ID0gZm9udEFkZFJlc3VsdC5pdGVyYXRvci0+dmFs
dWUuYWRkKGtleSwgbnVsbHB0cik7CiAKLSAgICBTaW1wbGVGb250RGF0YSomIGZhbGxiYWNrRm9u
dERhdGEgPSBjaGFyYWN0ZXJBZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOworICAgIEZvbnQqJiBm
YWxsYmFja0ZvbnQgPSBjaGFyYWN0ZXJBZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogCi0gICAg
aWYgKCFmYWxsYmFja0ZvbnREYXRhKSB7CisgICAgaWYgKCFmYWxsYmFja0ZvbnQpIHsKICAgICAg
ICAgVUNoYXIgY29kZVVuaXRzWzJdOwogICAgICAgICBpbnQgY29kZVVuaXRzTGVuZ3RoOwogICAg
ICAgICBpZiAoVV9JU19CTVAoY2hhcmFjdGVyKSkgewpAQCAtNDI3LDE1ICs0MjcsMTUgQEAgUmVm
UHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6cwogICAgICAgICAgICAgY29kZVVu
aXRzTGVuZ3RoID0gMjsKICAgICAgICAgfQogCi0gICAgICAgIGZhbGxiYWNrRm9udERhdGEgPSBm
b250Q2FjaGUoKS5zeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoZGVzY3JpcHRpb24sIHRoaXMs
IGlzRm9yUGxhdGZvcm1Gb250LCBjb2RlVW5pdHMsIGNvZGVVbml0c0xlbmd0aCkuZ2V0KCk7Ci0g
ICAgICAgIGlmIChmYWxsYmFja0ZvbnREYXRhKQotICAgICAgICAgICAgZmFsbGJhY2tGb250RGF0
YS0+bV9pc1VzZWRJblN5c3RlbUZhbGxiYWNrQ2FjaGUgPSB0cnVlOworICAgICAgICBmYWxsYmFj
a0ZvbnQgPSBmb250Q2FjaGUoKS5zeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoZGVzY3JpcHRp
b24sIHRoaXMsIGlzRm9yUGxhdGZvcm1Gb250LCBjb2RlVW5pdHMsIGNvZGVVbml0c0xlbmd0aCku
Z2V0KCk7CisgICAgICAgIGlmIChmYWxsYmFja0ZvbnQpCisgICAgICAgICAgICBmYWxsYmFja0Zv
bnQtPm1faXNVc2VkSW5TeXN0ZW1GYWxsYmFja0NhY2hlID0gdHJ1ZTsKICAgICB9CiAKLSAgICBy
ZXR1cm4gZmFsbGJhY2tGb250RGF0YTsKKyAgICByZXR1cm4gZmFsbGJhY2tGb250OwogfQogCi12
b2lkIFNpbXBsZUZvbnREYXRhOjpyZW1vdmVGcm9tU3lzdGVtRmFsbGJhY2tDYWNoZSgpCit2b2lk
IEZvbnQ6OnJlbW92ZUZyb21TeXN0ZW1GYWxsYmFja0NhY2hlKCkKIHsKICAgICBzeXN0ZW1GYWxs
YmFja0NhY2hlKCkucmVtb3ZlKHRoaXMpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udC5oCShyZXZpc2lvbiAxNzg2NTApCShmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmg6MTc4NjUwKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzY5
IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIGludGVybmFsIGZvbnQgaW1wbGVt
ZW50YXRpb24uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4LCAyMDEwLCAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4
IFRvcmNoIE1vYmlsZSwgSW5jLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBTaW1wbGVGb250RGF0YV9oCisjZGVmaW5l
IFNpbXBsZUZvbnREYXRhX2gKKworI2luY2x1ZGUgIkZvbnRCYXNlbGluZS5oIgorI2luY2x1ZGUg
IkZvbnRNZXRyaWNzLmgiCisjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgorI2luY2x1ZGUg
IkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCisjaW5jbHVkZSAiR2x5cGhN
ZXRyaWNzTWFwLmgiCisjaW5jbHVkZSAiR2x5cGhQYWdlLmgiCisjaW5jbHVkZSAiT3BlblR5cGVN
YXRoRGF0YS5oIgorI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKKyNpbmNsdWRlICJPcGVu
VHlwZVZlcnRpY2FsRGF0YS5oIgorI2VuZGlmCisjaW5jbHVkZSAiVHlwZXNldHRpbmdGZWF0dXJl
cy5oIgorI2luY2x1ZGUgPHd0Zi9UeXBlQ2FzdHMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdIYXNoLmg+CisKKyNpZiBQTEFURk9STShDT0NPQSkKKyNpbmNsdWRlICJXZWJDb3JlU3lzdGVt
SW50ZXJmYWNlLmgiCisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2VuZGlmCisKKyNpZiBQ
TEFURk9STShXSU4pCisjaW5jbHVkZSA8dXNwMTAuaD4KKyNlbmRpZgorCisjaWYgVVNFKENBSVJP
KQorI2luY2x1ZGUgPGNhaXJvLmg+CisjZW5kaWYKKworI2lmIFVTRShDRykKKyNpbmNsdWRlIDxX
ZWJDb3JlL0NvcmVHcmFwaGljc1NQSS5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgR2x5cGhQYWdlOworY2xhc3MgRm9udERlc2NyaXB0aW9uOworY2xhc3MgU2hhcmVk
QnVmZmVyOworc3RydWN0IEdseXBoRGF0YTsKK3N0cnVjdCBXaWR0aEl0ZXJhdG9yOworCitlbnVt
IEZvbnREYXRhVmFyaWFudCB7IEF1dG9WYXJpYW50LCBOb3JtYWxWYXJpYW50LCBTbWFsbENhcHNW
YXJpYW50LCBFbXBoYXNpc01hcmtWYXJpYW50LCBCcm9rZW5JZGVvZ3JhcGhWYXJpYW50IH07Citl
bnVtIFBpdGNoIHsgVW5rbm93blBpdGNoLCBGaXhlZFBpdGNoLCBWYXJpYWJsZVBpdGNoIH07CisK
K2NsYXNzIFNpbXBsZUZvbnREYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8U2ltcGxlRm9udERhdGE+
IHsKK3B1YmxpYzoKKyAgICBjbGFzcyBTVkdEYXRhIHsKKyAgICAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIH5TVkdEYXRhKCkgeyB9CisK
KyAgICAgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVGb250RGF0YShTaW1wbGVGb250RGF0YSos
IGZsb2F0IGZvbnRTaXplKSA9IDA7CisgICAgICAgIHZpcnR1YWwgZmxvYXQgd2lkdGhGb3JTVkdH
bHlwaChHbHlwaCwgZmxvYXQgZm9udFNpemUpIGNvbnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCBi
b29sIGZpbGxTVkdHbHlwaFBhZ2UoR2x5cGhQYWdlKiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25l
ZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgU2lt
cGxlRm9udERhdGEqKSBjb25zdCA9IDA7CisgICAgfTsKKworICAgIC8vIFVzZWQgdG8gY3JlYXRl
IHBsYXRmb3JtIGZvbnRzLgorICAgIHN0YXRpYyBSZWY8U2ltcGxlRm9udERhdGE+IGNyZWF0ZShj
b25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEsIGJvb2wgaXNDdXN0b21Gb250ID0g
ZmFsc2UsIGJvb2wgaXNMb2FkaW5nID0gZmFsc2UsIGJvb2wgaXNUZXh0T3JpZW50YXRpb25GYWxs
YmFjayA9IGZhbHNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2ltcGxl
Rm9udERhdGEocGxhdGZvcm1EYXRhLCBpc0N1c3RvbUZvbnQsIGlzTG9hZGluZywgaXNUZXh0T3Jp
ZW50YXRpb25GYWxsYmFjaykpOworICAgIH0KKworICAgIC8vIFVzZWQgdG8gY3JlYXRlIFNWRyBG
b250cy4KKyAgICBzdGF0aWMgUmVmPFNpbXBsZUZvbnREYXRhPiBjcmVhdGUoc3RkOjp1bmlxdWVf
cHRyPFNWR0RhdGE+IHN2Z0RhdGEsIGZsb2F0IGZvbnRTaXplLCBib29sIHN5bnRoZXRpY0JvbGQs
IGJvb2wgc3ludGhldGljSXRhbGljKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgU2ltcGxlRm9udERhdGEoV1RGOjptb3ZlKHN2Z0RhdGEpLCBmb250U2l6ZSwgc3ludGhldGlj
Qm9sZCwgc3ludGhldGljSXRhbGljKSk7CisgICAgfQorCisgICAgflNpbXBsZUZvbnREYXRhKCk7
CisKKyAgICBzdGF0aWMgY29uc3QgU2ltcGxlRm9udERhdGEqIHN5c3RlbUZhbGxiYWNrKCkgeyBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBTaW1wbGVGb250RGF0YSo+KC0xKTsgfQorCisg
ICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhKCkgY29uc3QgeyByZXR1cm4g
bV9wbGF0Zm9ybURhdGE7IH0KKyAgICBjb25zdCBPcGVuVHlwZU1hdGhEYXRhKiBtYXRoRGF0YSgp
IGNvbnN0OworI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKKyAgICBjb25zdCBPcGVuVHlw
ZVZlcnRpY2FsRGF0YSogdmVydGljYWxEYXRhKCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0aWNhbERh
dGEuZ2V0KCk7IH0KKyNlbmRpZgorCisgICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gc21h
bGxDYXBzRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJikgY29uc3Q7CisgICAgUGFzc1Jl
ZlB0cjxTaW1wbGVGb250RGF0YT4gZW1waGFzaXNNYXJrRm9udERhdGEoY29uc3QgRm9udERlc2Ny
aXB0aW9uJikgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gYnJva2VuSWRl
b2dyYXBoRm9udERhdGEoKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBu
b25TeW50aGV0aWNJdGFsaWNGb250RGF0YSgpIGNvbnN0OworCisgICAgUGFzc1JlZlB0cjxTaW1w
bGVGb250RGF0YT4gdmFyaWFudEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3Jp
cHRpb24sIEZvbnREYXRhVmFyaWFudCB2YXJpYW50KSBjb25zdAorICAgIHsKKyAgICAgICAgc3dp
dGNoICh2YXJpYW50KSB7CisgICAgICAgIGNhc2UgU21hbGxDYXBzVmFyaWFudDoKKyAgICAgICAg
ICAgIHJldHVybiBzbWFsbENhcHNGb250RGF0YShkZXNjcmlwdGlvbik7CisgICAgICAgIGNhc2Ug
RW1waGFzaXNNYXJrVmFyaWFudDoKKyAgICAgICAgICAgIHJldHVybiBlbXBoYXNpc01hcmtGb250
RGF0YShkZXNjcmlwdGlvbik7CisgICAgICAgIGNhc2UgQnJva2VuSWRlb2dyYXBoVmFyaWFudDoK
KyAgICAgICAgICAgIHJldHVybiBicm9rZW5JZGVvZ3JhcGhGb250RGF0YSgpOworICAgICAgICBj
YXNlIEF1dG9WYXJpYW50OgorICAgICAgICBjYXNlIE5vcm1hbFZhcmlhbnQ6CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgcmV0dXJuIGNvbnN0X2Nhc3Q8U2ltcGxlRm9udERhdGEqPih0aGlzKTsKKyAgICB9CisKKyAg
ICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiB2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250
RGF0YSgpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IHVwcmlnaHRPcmll
bnRhdGlvbkZvbnREYXRhKCkgY29uc3Q7CisKKyAgICBib29sIGhhc1ZlcnRpY2FsR2x5cGhzKCkg
Y29uc3QgeyByZXR1cm4gbV9oYXNWZXJ0aWNhbEdseXBoczsgfQorICAgIGJvb2wgaXNUZXh0T3Jp
ZW50YXRpb25GYWxsYmFjaygpIGNvbnN0IHsgcmV0dXJuIG1faXNUZXh0T3JpZW50YXRpb25GYWxs
YmFjazsgfQorCisgICAgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzKCkgeyByZXR1cm4gbV9mb250
TWV0cmljczsgfQorICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBmb250TWV0cmljcygpIGNvbnN0IHsg
cmV0dXJuIG1fZm9udE1ldHJpY3M7IH0KKyAgICBmbG9hdCBzaXplUGVyVW5pdCgpIGNvbnN0IHsg
cmV0dXJuIHBsYXRmb3JtRGF0YSgpLnNpemUoKSAvIChmb250TWV0cmljcygpLnVuaXRzUGVyRW0o
KSA/IGZvbnRNZXRyaWNzKCkudW5pdHNQZXJFbSgpIDogMSk7IH0KKworICAgIGZsb2F0IG1heENo
YXJXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4Q2hhcldpZHRoOyB9CisgICAgdm9pZCBzZXRN
YXhDaGFyV2lkdGgoZmxvYXQgbWF4Q2hhcldpZHRoKSB7IG1fbWF4Q2hhcldpZHRoID0gbWF4Q2hh
cldpZHRoOyB9CisKKyAgICBmbG9hdCBhdmdDaGFyV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2F2
Z0NoYXJXaWR0aDsgfQorICAgIHZvaWQgc2V0QXZnQ2hhcldpZHRoKGZsb2F0IGF2Z0NoYXJXaWR0
aCkgeyBtX2F2Z0NoYXJXaWR0aCA9IGF2Z0NoYXJXaWR0aDsgfQorCisgICAgRmxvYXRSZWN0IGJv
dW5kc0ZvckdseXBoKEdseXBoKSBjb25zdDsKKyAgICBmbG9hdCB3aWR0aEZvckdseXBoKEdseXBo
IGdseXBoKSBjb25zdDsKKyAgICBGbG9hdFJlY3QgcGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlw
aCkgY29uc3Q7CisgICAgZmxvYXQgcGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoKSBjb25zdDsK
KworICAgIGZsb2F0IHNwYWNlV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3NwYWNlV2lkdGg7IH0K
KyAgICBmbG9hdCBhZGp1c3RlZFNwYWNlV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2FkanVzdGVk
U3BhY2VXaWR0aDsgfQorICAgIHZvaWQgc2V0U3BhY2VXaWR0aHMoZmxvYXQgc3BhY2VXaWR0aCkK
KyAgICB7CisgICAgICAgIG1fc3BhY2VXaWR0aCA9IHNwYWNlV2lkdGg7CisgICAgICAgIG1fYWRq
dXN0ZWRTcGFjZVdpZHRoID0gc3BhY2VXaWR0aDsKKyAgICB9CisKKyNpZiBVU0UoQ0cpIHx8IFVT
RShDQUlSTykKKyAgICBmbG9hdCBzeW50aGV0aWNCb2xkT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4g
bV9zeW50aGV0aWNCb2xkT2Zmc2V0OyB9CisjZW5kaWYKKworICAgIEdseXBoIHNwYWNlR2x5cGgo
KSBjb25zdCB7IHJldHVybiBtX3NwYWNlR2x5cGg7IH0KKyAgICB2b2lkIHNldFNwYWNlR2x5cGgo
R2x5cGggc3BhY2VHbHlwaCkgeyBtX3NwYWNlR2x5cGggPSBzcGFjZUdseXBoOyB9CisgICAgR2x5
cGggemVyb1dpZHRoU3BhY2VHbHlwaCgpIGNvbnN0IHsgcmV0dXJuIG1femVyb1dpZHRoU3BhY2VH
bHlwaDsgfQorICAgIHZvaWQgc2V0WmVyb1dpZHRoU3BhY2VHbHlwaChHbHlwaCBzcGFjZUdseXBo
KSB7IG1femVyb1dpZHRoU3BhY2VHbHlwaCA9IHNwYWNlR2x5cGg7IH0KKyAgICBib29sIGlzWmVy
b1dpZHRoU3BhY2VHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QgeyByZXR1cm4gZ2x5cGggPT0gbV96
ZXJvV2lkdGhTcGFjZUdseXBoICYmIGdseXBoOyB9CisgICAgR2x5cGggemVyb0dseXBoKCkgY29u
c3QgeyByZXR1cm4gbV96ZXJvR2x5cGg7IH0KKyAgICB2b2lkIHNldFplcm9HbHlwaChHbHlwaCB6
ZXJvR2x5cGgpIHsgbV96ZXJvR2x5cGggPSB6ZXJvR2x5cGg7IH0KKworICAgIEdseXBoRGF0YSBn
bHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMikgY29uc3Q7CisgICAgR2x5cGggZ2x5cGhGb3JD
aGFyYWN0ZXIoVUNoYXIzMikgY29uc3Q7CisKKyAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IHN5
c3RlbUZhbGxiYWNrRm9udERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiwgY29uc3QgRm9udERlc2Ny
aXB0aW9uJiwgYm9vbCBpc0ZvclBsYXRmb3JtRm9udCkgY29uc3Q7CisKKyAgICBjb25zdCBHbHlw
aFBhZ2UqIGdseXBoUGFnZSh1bnNpZ25lZCBwYWdlTnVtYmVyKSBjb25zdDsKKworICAgIHZvaWQg
ZGV0ZXJtaW5lUGl0Y2goKTsKKyAgICBQaXRjaCBwaXRjaCgpIGNvbnN0IHsgcmV0dXJuIG1fdHJl
YXRBc0ZpeGVkUGl0Y2ggPyBGaXhlZFBpdGNoIDogVmFyaWFibGVQaXRjaDsgfQorCisgICAgY29u
c3QgU1ZHRGF0YSogc3ZnRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fc3ZnRGF0YS5nZXQoKTsgfQor
ICAgIGJvb2wgaXNTVkdGb250KCkgY29uc3QgeyByZXR1cm4gISFtX3N2Z0RhdGE7IH0KKworICAg
IGJvb2wgaXNDdXN0b21Gb250KCkgY29uc3QgeyByZXR1cm4gbV9pc0N1c3RvbUZvbnQ7IH0KKyAg
ICBib29sIGlzTG9hZGluZygpIGNvbnN0IHsgcmV0dXJuIG1faXNMb2FkaW5nOyB9CisKKyNpZm5k
ZWYgTkRFQlVHCisgICAgU3RyaW5nIGRlc2NyaXB0aW9uKCkgY29uc3Q7CisjZW5kaWYKKworI2lm
IFVTRShBUFBLSVQpCisgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGNvbXBvc2l0ZUZvbnRSZWZl
cmVuY2VGb250RGF0YShOU0ZvbnQgKmtleSkgY29uc3Q7CisgICAgTlNGb250KiBnZXROU0ZvbnQo
KSBjb25zdCB7IHJldHVybiBtX3BsYXRmb3JtRGF0YS5uc0ZvbnQoKTsgfQorI2VuZGlmCisKKyNp
ZiBQTEFURk9STShJT1MpCisgICAgQ1RGb250UmVmIGdldENURm9udCgpIGNvbnN0IHsgcmV0dXJu
IG1fcGxhdGZvcm1EYXRhLmZvbnQoKTsgfQorICAgIGJvb2wgc2hvdWxkTm90QmVVc2VkRm9yQXJh
YmljKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGROb3RCZVVzZWRGb3JBcmFiaWM7IH07CisjZW5k
aWYKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBDRkRpY3Rpb25hcnlSZWYgZ2V0Q0ZTdHJpbmdB
dHRyaWJ1dGVzKFR5cGVzZXR0aW5nRmVhdHVyZXMsIEZvbnRPcmllbnRhdGlvbikgY29uc3Q7Cisj
ZW5kaWYKKworI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBVU0UoSEFSRkJVWlopCisgICAgYm9vbCBj
YW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBVQ2hhciosIHNpemVfdCkg
Y29uc3Q7CisjZW5kaWYKKworICAgIGJvb2wgYXBwbHlUcmFuc2Zvcm1zKEdseXBoQnVmZmVyR2x5
cGgqLCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCBzaXplX3QgZ2x5cGhDb3VudCwgVHlwZXNldHRpbmdG
ZWF0dXJlcykgY29uc3Q7CisKKyNpZiBQTEFURk9STShXSU4pCisgICAgYm9vbCBpc1N5c3RlbUZv
bnQoKSBjb25zdCB7IHJldHVybiBtX2lzU3lzdGVtRm9udDsgfQorICAgIFNDUklQVF9GT05UUFJP
UEVSVElFUyogc2NyaXB0Rm9udFByb3BlcnRpZXMoKSBjb25zdDsKKyAgICBTQ1JJUFRfQ0FDSEUq
IHNjcmlwdENhY2hlKCkgY29uc3QgeyByZXR1cm4gJm1fc2NyaXB0Q2FjaGU7IH0KKyAgICBzdGF0
aWMgdm9pZCBzZXRTaG91bGRBcHBseU1hY0FzY2VudEhhY2soYm9vbCk7CisgICAgc3RhdGljIGJv
b2wgc2hvdWxkQXBwbHlNYWNBc2NlbnRIYWNrKCk7CisgICAgc3RhdGljIGZsb2F0IGFzY2VudENv
bnNpZGVyaW5nTWFjQXNjZW50SGFjayhjb25zdCBXQ0hBUiosIGZsb2F0IGFzY2VudCwgZmxvYXQg
ZGVzY2VudCk7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBTaW1wbGVGb250RGF0YShjb25zdCBG
b250UGxhdGZvcm1EYXRhJiwgYm9vbCBpc0N1c3RvbUZvbnQgPSBmYWxzZSwgYm9vbCBpc0xvYWRp
bmcgPSBmYWxzZSwgYm9vbCBpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrID0gZmFsc2UpOworCisg
ICAgU2ltcGxlRm9udERhdGEoc3RkOjp1bmlxdWVfcHRyPFNWR0RhdGE+LCBmbG9hdCBmb250U2l6
ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYyk7CisKKyAgICB2b2lk
IHBsYXRmb3JtSW5pdCgpOworICAgIHZvaWQgcGxhdGZvcm1HbHlwaEluaXQoKTsKKyAgICB2b2lk
IHBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpOworICAgIHZvaWQgcGxhdGZvcm1EZXN0cm95KCk7CisK
KyAgICB2b2lkIGluaXRDaGFyV2lkdGhzKCk7CisKKyAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnRE
YXRhPiBjcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBz
Y2FsZUZhY3RvcikgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gcGxhdGZv
cm1DcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBzY2Fs
ZUZhY3RvcikgY29uc3Q7CisKKyAgICB2b2lkIHJlbW92ZUZyb21TeXN0ZW1GYWxsYmFja0NhY2hl
KCk7CisKKyNpZiBQTEFURk9STShXSU4pCisgICAgdm9pZCBpbml0R0RJRm9udCgpOworICAgIHZv
aWQgcGxhdGZvcm1Db21tb25EZXN0cm95KCk7CisgICAgRmxvYXRSZWN0IGJvdW5kc0ZvckdESUds
eXBoKEdseXBoIGdseXBoKSBjb25zdDsKKyAgICBmbG9hdCB3aWR0aEZvckdESUdseXBoKEdseXBo
IGdseXBoKSBjb25zdDsKKyNlbmRpZgorCisjaWYgVVNFKENHKQorICAgIGJvb2wgY2FuVXNlRmFz
dEdseXBoQWR2YW5jZUdldHRlcihHbHlwaCBnbHlwaCwgQ0dTaXplJiBhZHZhbmNlLCBib29sJiBw
b3B1bGF0ZWRBZHZhbmNlKSBjb25zdDsKKyAgICBDR0ZvbnRSZW5kZXJpbmdTdHlsZSByZW5kZXJp
bmdTdHlsZSgpIGNvbnN0OworICAgIGJvb2wgYWR2YW5jZUZvckNvbG9yQml0bWFwRm9udChHbHlw
aCwgQ0dTaXplJiByZXN1bHQpIGNvbnN0OyAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGZvbnQgaXMg
YSBjb2xvciBiaXRtYXAgZm9udAorI2VuZGlmCisKKyAgICBGb250TWV0cmljcyBtX2ZvbnRNZXRy
aWNzOworICAgIGZsb2F0IG1fbWF4Q2hhcldpZHRoOworICAgIGZsb2F0IG1fYXZnQ2hhcldpZHRo
OworCisgICAgRm9udFBsYXRmb3JtRGF0YSBtX3BsYXRmb3JtRGF0YTsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8U1ZHRGF0YT4gbV9zdmdEYXRhOworCisgICAgbXV0YWJsZSBSZWZQdHI8R2x5cGhQYWdl
PiBtX2dseXBoUGFnZVplcm87CisgICAgbXV0YWJsZSBIYXNoTWFwPHVuc2lnbmVkLCBSZWZQdHI8
R2x5cGhQYWdlPj4gbV9nbHlwaFBhZ2VzOworICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPEds
eXBoTWV0cmljc01hcDxGbG9hdFJlY3Q+PiBtX2dseXBoVG9Cb3VuZHNNYXA7CisgICAgbXV0YWJs
ZSBHbHlwaE1ldHJpY3NNYXA8ZmxvYXQ+IG1fZ2x5cGhUb1dpZHRoTWFwOworCisgICAgYm9vbCBt
X3RyZWF0QXNGaXhlZFBpdGNoOworICAgIGJvb2wgbV9pc0N1c3RvbUZvbnQ7ICAvLyBXaGV0aGVy
IG9yIG5vdCB3ZSBhcmUgY3VzdG9tIGZvbnQgbG9hZGVkIHZpYSBAZm9udC1mYWNlCisgICAgYm9v
bCBtX2lzTG9hZGluZzsgLy8gV2hldGhlciBvciBub3QgdGhpcyBjdXN0b20gZm9udCBpcyBzdGls
bCBpbiB0aGUgYWN0IG9mIGxvYWRpbmcuCisKKyAgICBib29sIG1faXNUZXh0T3JpZW50YXRpb25G
YWxsYmFjazsKKyAgICBib29sIG1faXNCcm9rZW5JZGVvZ3JhcGhGYWxsYmFjazsKKworICAgIGJv
b2wgbV9pc1VzZWRJblN5c3RlbUZhbGxiYWNrQ2FjaGUgeyBmYWxzZSB9OworCisgICAgbXV0YWJs
ZSBSZWZQdHI8T3BlblR5cGVNYXRoRGF0YT4gbV9tYXRoRGF0YTsKKyNpZiBFTkFCTEUoT1BFTlRZ
UEVfVkVSVElDQUwpCisgICAgUmVmUHRyPE9wZW5UeXBlVmVydGljYWxEYXRhPiBtX3ZlcnRpY2Fs
RGF0YTsKKyNlbmRpZgorICAgIGJvb2wgbV9oYXNWZXJ0aWNhbEdseXBoczsKKworICAgIEdseXBo
IG1fc3BhY2VHbHlwaDsKKyAgICBmbG9hdCBtX3NwYWNlV2lkdGg7CisgICAgR2x5cGggbV96ZXJv
R2x5cGg7CisgICAgZmxvYXQgbV9hZGp1c3RlZFNwYWNlV2lkdGg7CisKKyAgICBHbHlwaCBtX3pl
cm9XaWR0aFNwYWNlR2x5cGg7CisKKyAgICBzdHJ1Y3QgRGVyaXZlZEZvbnREYXRhIHsKKyAgICAg
ICAgZXhwbGljaXQgRGVyaXZlZEZvbnREYXRhKGJvb2wgY3VzdG9tKQorICAgICAgICAgICAgOiBm
b3JDdXN0b21Gb250KGN1c3RvbSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIH5EZXJp
dmVkRm9udERhdGEoKTsKKworICAgICAgICBib29sIGZvckN1c3RvbUZvbnQ7CisgICAgICAgIFJl
ZlB0cjxTaW1wbGVGb250RGF0YT4gc21hbGxDYXBzOworICAgICAgICBSZWZQdHI8U2ltcGxlRm9u
dERhdGE+IGVtcGhhc2lzTWFyazsKKyAgICAgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBicm9r
ZW5JZGVvZ3JhcGg7CisgICAgICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gdmVydGljYWxSaWdo
dE9yaWVudGF0aW9uOworICAgICAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IHVwcmlnaHRPcmll
bnRhdGlvbjsKKyAgICAgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBub25TeW50aGV0aWNJdGFs
aWM7CisjaWYgVVNFKEFQUEtJVCkKKyAgICAgICAgSGFzaE1hcDxOU0ZvbnQqLCBSZWZQdHI8U2lt
cGxlRm9udERhdGE+PiBjb21wb3NpdGVGb250UmVmZXJlbmNlczsKKyNlbmRpZgorICAgIH07CisK
KyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxEZXJpdmVkRm9udERhdGE+IG1fZGVyaXZlZEZv
bnREYXRhOworCisjaWYgVVNFKENHKSB8fCBVU0UoQ0FJUk8pCisgICAgZmxvYXQgbV9zeW50aGV0
aWNCb2xkT2Zmc2V0OworI2VuZGlmCisKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBtdXRhYmxl
IEhhc2hNYXA8dW5zaWduZWQsIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+PiBtX0NGU3RyaW5n
QXR0cmlidXRlczsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFVTRShIQVJGQlVa
WikKKyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxIYXNoTWFwPFN0cmluZywgYm9vbD4+IG1f
Y29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2VTdXBwb3J0OworI2VuZGlmCisKKyNpZiBQTEFURk9S
TShXSU4pCisgICAgYm9vbCBtX2lzU3lzdGVtRm9udDsKKyAgICBtdXRhYmxlIFNDUklQVF9DQUNI
RSBtX3NjcmlwdENhY2hlOworICAgIG11dGFibGUgU0NSSVBUX0ZPTlRQUk9QRVJUSUVTKiBtX3Nj
cmlwdEZvbnRQcm9wZXJ0aWVzOworI2VuZGlmCisjaWYgUExBVEZPUk0oSU9TKQorICAgIGJvb2wg
bV9zaG91bGROb3RCZVVzZWRGb3JBcmFiaWM7CisjZW5kaWYKK307CisKK0FMV0FZU19JTkxJTkUg
RmxvYXRSZWN0IFNpbXBsZUZvbnREYXRhOjpib3VuZHNGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29u
c3QKK3sKKyAgICBpZiAoaXNaZXJvV2lkdGhTcGFjZUdseXBoKGdseXBoKSkKKyAgICAgICAgcmV0
dXJuIEZsb2F0UmVjdCgpOworCisgICAgRmxvYXRSZWN0IGJvdW5kczsKKyAgICBpZiAobV9nbHlw
aFRvQm91bmRzTWFwKSB7CisgICAgICAgIGJvdW5kcyA9IG1fZ2x5cGhUb0JvdW5kc01hcC0+bWV0
cmljc0ZvckdseXBoKGdseXBoKTsKKyAgICAgICAgaWYgKGJvdW5kcy53aWR0aCgpICE9IGNHbHlw
aFNpemVVbmtub3duKQorICAgICAgICAgICAgcmV0dXJuIGJvdW5kczsKKyAgICB9CisKKyAgICBi
b3VuZHMgPSBwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKGdseXBoKTsKKyAgICBpZiAoIW1fZ2x5cGhU
b0JvdW5kc01hcCkKKyAgICAgICAgbV9nbHlwaFRvQm91bmRzTWFwID0gc3RkOjptYWtlX3VuaXF1
ZTxHbHlwaE1ldHJpY3NNYXA8RmxvYXRSZWN0Pj4oKTsKKyAgICBtX2dseXBoVG9Cb3VuZHNNYXAt
PnNldE1ldHJpY3NGb3JHbHlwaChnbHlwaCwgYm91bmRzKTsKKyAgICByZXR1cm4gYm91bmRzOwor
fQorCitBTFdBWVNfSU5MSU5FIGZsb2F0IFNpbXBsZUZvbnREYXRhOjp3aWR0aEZvckdseXBoKEds
eXBoIGdseXBoKSBjb25zdAoreworICAgIGlmIChpc1plcm9XaWR0aFNwYWNlR2x5cGgoZ2x5cGgp
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIGZsb2F0IHdpZHRoID0gbV9nbHlwaFRvV2lkdGhN
YXAubWV0cmljc0ZvckdseXBoKGdseXBoKTsKKyAgICBpZiAod2lkdGggIT0gY0dseXBoU2l6ZVVu
a25vd24pCisgICAgICAgIHJldHVybiB3aWR0aDsKKworICAgIGlmIChpc1NWR0ZvbnQoKSkKKyAg
ICAgICAgd2lkdGggPSBtX3N2Z0RhdGEtPndpZHRoRm9yU1ZHR2x5cGgoZ2x5cGgsIG1fcGxhdGZv
cm1EYXRhLnNpemUoKSk7CisjaWYgRU5BQkxFKE9QRU5UWVBFX1ZFUlRJQ0FMKQorICAgIGVsc2Ug
aWYgKG1fdmVydGljYWxEYXRhKQorI2lmIFVTRShDRykgfHwgVVNFKENBSVJPKQorICAgICAgICB3
aWR0aCA9IG1fdmVydGljYWxEYXRhLT5hZHZhbmNlSGVpZ2h0KHRoaXMsIGdseXBoKSArIG1fc3lu
dGhldGljQm9sZE9mZnNldDsKKyNlbHNlCisgICAgICAgIHdpZHRoID0gbV92ZXJ0aWNhbERhdGEt
PmFkdmFuY2VIZWlnaHQodGhpcywgZ2x5cGgpOworI2VuZGlmCisjZW5kaWYKKyAgICBlbHNlCisg
ICAgICAgIHdpZHRoID0gcGxhdGZvcm1XaWR0aEZvckdseXBoKGdseXBoKTsKKworICAgIG1fZ2x5
cGhUb1dpZHRoTWFwLnNldE1ldHJpY3NGb3JHbHlwaChnbHlwaCwgd2lkdGgpOworICAgIHJldHVy
biB3aWR0aDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU2ltcGxl
Rm9udERhdGFfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAko
d29ya2luZyBjb3B5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMSwxMyArMjEsMTMgQEAKICAqCiAgKi8KIAotI2lmbmRlZiBT
aW1wbGVGb250RGF0YV9oCi0jZGVmaW5lIFNpbXBsZUZvbnREYXRhX2gKKyNpZm5kZWYgRm9udF9o
CisjZGVmaW5lIEZvbnRfaAogCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiRm9u
dEJhc2VsaW5lLmgiCiAjaW5jbHVkZSAiRm9udE1ldHJpY3MuaCIKICNpbmNsdWRlICJGb250UGxh
dGZvcm1EYXRhLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiR2x5cGhCdWZm
ZXIuaCIKICNpbmNsdWRlICJHbHlwaE1ldHJpY3NNYXAuaCIKICNpbmNsdWRlICJHbHlwaFBhZ2Uu
aCIKQEAgLTY0LDM2ICs2NCwzNiBAQCBjbGFzcyBTaGFyZWRCdWZmZXI7CiBzdHJ1Y3QgR2x5cGhE
YXRhOwogc3RydWN0IFdpZHRoSXRlcmF0b3I7CiAKLWVudW0gRm9udERhdGFWYXJpYW50IHsgQXV0
b1ZhcmlhbnQsIE5vcm1hbFZhcmlhbnQsIFNtYWxsQ2Fwc1ZhcmlhbnQsIEVtcGhhc2lzTWFya1Zh
cmlhbnQsIEJyb2tlbklkZW9ncmFwaFZhcmlhbnQgfTsKK2VudW0gRm9udFZhcmlhbnQgeyBBdXRv
VmFyaWFudCwgTm9ybWFsVmFyaWFudCwgU21hbGxDYXBzVmFyaWFudCwgRW1waGFzaXNNYXJrVmFy
aWFudCwgQnJva2VuSWRlb2dyYXBoVmFyaWFudCB9OwogZW51bSBQaXRjaCB7IFVua25vd25QaXRj
aCwgRml4ZWRQaXRjaCwgVmFyaWFibGVQaXRjaCB9OwogCi1jbGFzcyBTaW1wbGVGb250RGF0YSA6
IHB1YmxpYyBSZWZDb3VudGVkPFNpbXBsZUZvbnREYXRhPiB7CitjbGFzcyBGb250IDogcHVibGlj
IFJlZkNvdW50ZWQ8Rm9udD4gewogcHVibGljOgogICAgIGNsYXNzIFNWR0RhdGEgewogICAgICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwg
flNWR0RhdGEoKSB7IH0KIAotICAgICAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZUZvbnREYXRh
KFNpbXBsZUZvbnREYXRhKiwgZmxvYXQgZm9udFNpemUpID0gMDsKKyAgICAgICAgdmlydHVhbCB2
b2lkIGluaXRpYWxpemVGb250KEZvbnQqLCBmbG9hdCBmb250U2l6ZSkgPSAwOwogICAgICAgICB2
aXJ0dWFsIGZsb2F0IHdpZHRoRm9yU1ZHR2x5cGgoR2x5cGgsIGZsb2F0IGZvbnRTaXplKSBjb25z
dCA9IDA7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBmaWxsU1ZHR2x5cGhQYWdlKEdseXBoUGFnZSos
IHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25l
ZCBidWZmZXJMZW5ndGgsIGNvbnN0IFNpbXBsZUZvbnREYXRhKikgY29uc3QgPSAwOworICAgICAg
ICB2aXJ0dWFsIGJvb2wgZmlsbFNWR0dseXBoUGFnZShHbHlwaFBhZ2UqLCB1bnNpZ25lZCBvZmZz
ZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3Ro
LCBjb25zdCBGb250KikgY29uc3QgPSAwOwogICAgIH07CiAKICAgICAvLyBVc2VkIHRvIGNyZWF0
ZSBwbGF0Zm9ybSBmb250cy4KLSAgICBzdGF0aWMgUmVmPFNpbXBsZUZvbnREYXRhPiBjcmVhdGUo
Y29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhLCBib29sIGlzQ3VzdG9tRm9udCA9
IGZhbHNlLCBib29sIGlzTG9hZGluZyA9IGZhbHNlLCBib29sIGlzVGV4dE9yaWVudGF0aW9uRmFs
bGJhY2sgPSBmYWxzZSkKKyAgICBzdGF0aWMgUmVmPEZvbnQ+IGNyZWF0ZShjb25zdCBGb250UGxh
dGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEsIGJvb2wgaXNDdXN0b21Gb250ID0gZmFsc2UsIGJvb2wg
aXNMb2FkaW5nID0gZmFsc2UsIGJvb2wgaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjayA9IGZhbHNl
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2ltcGxlRm9udERhdGEocGxh
dGZvcm1EYXRhLCBpc0N1c3RvbUZvbnQsIGlzTG9hZGluZywgaXNUZXh0T3JpZW50YXRpb25GYWxs
YmFjaykpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGb250KHBsYXRmb3JtRGF0YSwg
aXNDdXN0b21Gb250LCBpc0xvYWRpbmcsIGlzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2spKTsKICAg
ICB9CiAKICAgICAvLyBVc2VkIHRvIGNyZWF0ZSBTVkcgRm9udHMuCi0gICAgc3RhdGljIFJlZjxT
aW1wbGVGb250RGF0YT4gY3JlYXRlKHN0ZDo6dW5pcXVlX3B0cjxTVkdEYXRhPiBzdmdEYXRhLCBm
bG9hdCBmb250U2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYykK
KyAgICBzdGF0aWMgUmVmPEZvbnQ+IGNyZWF0ZShzdGQ6OnVuaXF1ZV9wdHI8U1ZHRGF0YT4gc3Zn
RGF0YSwgZmxvYXQgZm9udFNpemUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJ
dGFsaWMpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTaW1wbGVGb250RGF0
YShXVEY6Om1vdmUoc3ZnRGF0YSksIGZvbnRTaXplLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJ
dGFsaWMpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRm9udChXVEY6Om1vdmUoc3Zn
RGF0YSksIGZvbnRTaXplLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMpKTsKICAgICB9
CiAKLSAgICB+U2ltcGxlRm9udERhdGEoKTsKKyAgICB+Rm9udCgpOwogCi0gICAgc3RhdGljIGNv
bnN0IFNpbXBsZUZvbnREYXRhKiBzeXN0ZW1GYWxsYmFjaygpIHsgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgU2ltcGxlRm9udERhdGEqPigtMSk7IH0KKyAgICBzdGF0aWMgY29uc3QgRm9u
dCogc3lzdGVtRmFsbGJhY2soKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IEZvbnQq
PigtMSk7IH0KIAogICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSgpIGNv
bnN0IHsgcmV0dXJuIG1fcGxhdGZvcm1EYXRhOyB9CiAgICAgY29uc3QgT3BlblR5cGVNYXRoRGF0
YSogbWF0aERhdGEoKSBjb25zdDsKQEAgLTEwMSwzMCArMTAxLDMwIEBAIHB1YmxpYzoKICAgICBj
b25zdCBPcGVuVHlwZVZlcnRpY2FsRGF0YSogdmVydGljYWxEYXRhKCkgY29uc3QgeyByZXR1cm4g
bV92ZXJ0aWNhbERhdGEuZ2V0KCk7IH0KICNlbmRpZgogCi0gICAgUGFzc1JlZlB0cjxTaW1wbGVG
b250RGF0YT4gc21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJikgY29uc3Q7
Ci0gICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gZW1waGFzaXNNYXJrRm9udERhdGEoY29u
c3QgRm9udERlc2NyaXB0aW9uJikgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0
YT4gYnJva2VuSWRlb2dyYXBoRm9udERhdGEoKSBjb25zdDsKLSAgICBQYXNzUmVmUHRyPFNpbXBs
ZUZvbnREYXRhPiBub25TeW50aGV0aWNJdGFsaWNGb250RGF0YSgpIGNvbnN0OworICAgIFBhc3NS
ZWZQdHI8Rm9udD4gc21hbGxDYXBzRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mKSBjb25zdDsK
KyAgICBQYXNzUmVmUHRyPEZvbnQ+IGVtcGhhc2lzTWFya0ZvbnQoY29uc3QgRm9udERlc2NyaXB0
aW9uJikgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxGb250PiBicm9rZW5JZGVvZ3JhcGhGb250KCkg
Y29uc3Q7CisgICAgUGFzc1JlZlB0cjxGb250PiBub25TeW50aGV0aWNJdGFsaWNGb250KCkgY29u
c3Q7CiAKLSAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiB2YXJpYW50Rm9udERhdGEoY29u
c3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udERhdGFWYXJpYW50IHZhcmlhbnQp
IGNvbnN0CisgICAgUGFzc1JlZlB0cjxGb250PiB2YXJpYW50Rm9udChjb25zdCBGb250RGVzY3Jp
cHRpb24mIGRlc2NyaXB0aW9uLCBGb250VmFyaWFudCB2YXJpYW50KSBjb25zdAogICAgIHsKICAg
ICAgICAgc3dpdGNoICh2YXJpYW50KSB7CiAgICAgICAgIGNhc2UgU21hbGxDYXBzVmFyaWFudDoK
LSAgICAgICAgICAgIHJldHVybiBzbWFsbENhcHNGb250RGF0YShkZXNjcmlwdGlvbik7CisgICAg
ICAgICAgICByZXR1cm4gc21hbGxDYXBzRm9udChkZXNjcmlwdGlvbik7CiAgICAgICAgIGNhc2Ug
RW1waGFzaXNNYXJrVmFyaWFudDoKLSAgICAgICAgICAgIHJldHVybiBlbXBoYXNpc01hcmtGb250
RGF0YShkZXNjcmlwdGlvbik7CisgICAgICAgICAgICByZXR1cm4gZW1waGFzaXNNYXJrRm9udChk
ZXNjcmlwdGlvbik7CiAgICAgICAgIGNhc2UgQnJva2VuSWRlb2dyYXBoVmFyaWFudDoKLSAgICAg
ICAgICAgIHJldHVybiBicm9rZW5JZGVvZ3JhcGhGb250RGF0YSgpOworICAgICAgICAgICAgcmV0
dXJuIGJyb2tlbklkZW9ncmFwaEZvbnQoKTsKICAgICAgICAgY2FzZSBBdXRvVmFyaWFudDoKICAg
ICAgICAgY2FzZSBOb3JtYWxWYXJpYW50OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBjb25zdF9jYXN0
PFNpbXBsZUZvbnREYXRhKj4odGhpcyk7CisgICAgICAgIHJldHVybiBjb25zdF9jYXN0PEZvbnQq
Pih0aGlzKTsKICAgICB9CiAKLSAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiB2ZXJ0aWNh
bFJpZ2h0T3JpZW50YXRpb25Gb250RGF0YSgpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8U2ltcGxl
Rm9udERhdGE+IHVwcmlnaHRPcmllbnRhdGlvbkZvbnREYXRhKCkgY29uc3Q7CisgICAgUGFzc1Jl
ZlB0cjxGb250PiB2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250KCkgY29uc3Q7CisgICAgUGFz
c1JlZlB0cjxGb250PiB1cHJpZ2h0T3JpZW50YXRpb25Gb250KCkgY29uc3Q7CiAKICAgICBib29s
IGhhc1ZlcnRpY2FsR2x5cGhzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNWZXJ0aWNhbEdseXBoczsg
fQogICAgIGJvb2wgaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaygpIGNvbnN0IHsgcmV0dXJuIG1f
aXNUZXh0T3JpZW50YXRpb25GYWxsYmFjazsgfQpAQCAtMTQwLDcgKzE0MCw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNldEF2Z0NoYXJXaWR0aChmbG9hdCBhdmdDaGFyV2lkdGgpIHsgbV9hdmdDaGFy
V2lkdGggPSBhdmdDaGFyV2lkdGg7IH0KIAogICAgIEZsb2F0UmVjdCBib3VuZHNGb3JHbHlwaChH
bHlwaCkgY29uc3Q7Ci0gICAgZmxvYXQgd2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3Q7
CisgICAgZmxvYXQgd2lkdGhGb3JHbHlwaChHbHlwaCkgY29uc3Q7CiAgICAgRmxvYXRSZWN0IHBs
YXRmb3JtQm91bmRzRm9yR2x5cGgoR2x5cGgpIGNvbnN0OwogICAgIGZsb2F0IHBsYXRmb3JtV2lk
dGhGb3JHbHlwaChHbHlwaCkgY29uc3Q7CiAKQEAgLTE2Nyw3ICsxNjcsNyBAQCBwdWJsaWM6CiAg
ICAgR2x5cGhEYXRhIGdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyKSBjb25zdDsKICAgICBH
bHlwaCBnbHlwaEZvckNoYXJhY3RlcihVQ2hhcjMyKSBjb25zdDsKIAotICAgIFJlZlB0cjxTaW1w
bGVGb250RGF0YT4gc3lzdGVtRmFsbGJhY2tGb250RGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyLCBj
b25zdCBGb250RGVzY3JpcHRpb24mLCBib29sIGlzRm9yUGxhdGZvcm1Gb250KSBjb25zdDsKKyAg
ICBSZWZQdHI8Rm9udD4gc3lzdGVtRmFsbGJhY2tGb250Rm9yQ2hhcmFjdGVyKFVDaGFyMzIsIGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYsIGJvb2wgaXNGb3JQbGF0Zm9ybUZvbnQpIGNvbnN0OwogCiAg
ICAgY29uc3QgR2x5cGhQYWdlKiBnbHlwaFBhZ2UodW5zaWduZWQgcGFnZU51bWJlcikgY29uc3Q7
CiAKQEAgLTE4NSw3ICsxODUsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lmIFVTRShBUFBLSVQp
Ci0gICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGNvbXBvc2l0ZUZvbnRSZWZlcmVuY2VGb250RGF0
YShOU0ZvbnQgKmtleSkgY29uc3Q7CisgICAgY29uc3QgRm9udCogY29tcG9zaXRlRm9udFJlZmVy
ZW5jZUZvbnQoTlNGb250ICprZXkpIGNvbnN0OwogICAgIE5TRm9udCogZ2V0TlNGb250KCkgY29u
c3QgeyByZXR1cm4gbV9wbGF0Zm9ybURhdGEubnNGb250KCk7IH0KICNlbmRpZgogCkBAIC0yMTMs
OSArMjEzLDkgQEAgcHVibGljOgogI2VuZGlmCiAKIHByaXZhdGU6Ci0gICAgU2ltcGxlRm9udERh
dGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYsIGJvb2wgaXNDdXN0b21Gb250ID0gZmFsc2UsIGJv
b2wgaXNMb2FkaW5nID0gZmFsc2UsIGJvb2wgaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjayA9IGZh
bHNlKTsKKyAgICBGb250KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmLCBib29sIGlzQ3VzdG9tRm9u
dCA9IGZhbHNlLCBib29sIGlzTG9hZGluZyA9IGZhbHNlLCBib29sIGlzVGV4dE9yaWVudGF0aW9u
RmFsbGJhY2sgPSBmYWxzZSk7CiAKLSAgICBTaW1wbGVGb250RGF0YShzdGQ6OnVuaXF1ZV9wdHI8
U1ZHRGF0YT4sIGZsb2F0IGZvbnRTaXplLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhl
dGljSXRhbGljKTsKKyAgICBGb250KHN0ZDo6dW5pcXVlX3B0cjxTVkdEYXRhPiwgZmxvYXQgZm9u
dFNpemUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpOwogCiAgICAg
dm9pZCBwbGF0Zm9ybUluaXQoKTsKICAgICB2b2lkIHBsYXRmb3JtR2x5cGhJbml0KCk7CkBAIC0y
MjQsMjAgKzIyNCwyMCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBpbml0Q2hhcldpZHRocygpOwog
Ci0gICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gY3JlYXRlU2NhbGVkRm9udERhdGEoY29u
c3QgRm9udERlc2NyaXB0aW9uJiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0OwotICAgIFBhc3NS
ZWZQdHI8U2ltcGxlRm9udERhdGE+IHBsYXRmb3JtQ3JlYXRlU2NhbGVkRm9udERhdGEoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0OworICAgIFBhc3NSZWZQ
dHI8Rm9udD4gY3JlYXRlU2NhbGVkRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBz
Y2FsZUZhY3RvcikgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxGb250PiBwbGF0Zm9ybUNyZWF0ZVNj
YWxlZEZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0
OwogCiAgICAgdm9pZCByZW1vdmVGcm9tU3lzdGVtRmFsbGJhY2tDYWNoZSgpOwogCiAjaWYgUExB
VEZPUk0oV0lOKQogICAgIHZvaWQgaW5pdEdESUZvbnQoKTsKICAgICB2b2lkIHBsYXRmb3JtQ29t
bW9uRGVzdHJveSgpOwotICAgIEZsb2F0UmVjdCBib3VuZHNGb3JHRElHbHlwaChHbHlwaCBnbHlw
aCkgY29uc3Q7Ci0gICAgZmxvYXQgd2lkdGhGb3JHRElHbHlwaChHbHlwaCBnbHlwaCkgY29uc3Q7
CisgICAgRmxvYXRSZWN0IGJvdW5kc0ZvckdESUdseXBoKEdseXBoKSBjb25zdDsKKyAgICBmbG9h
dCB3aWR0aEZvckdESUdseXBoKEdseXBoKSBjb25zdDsKICNlbmRpZgogCiAjaWYgVVNFKENHKQot
ICAgIGJvb2wgY2FuVXNlRmFzdEdseXBoQWR2YW5jZUdldHRlcihHbHlwaCBnbHlwaCwgQ0dTaXpl
JiBhZHZhbmNlLCBib29sJiBwb3B1bGF0ZWRBZHZhbmNlKSBjb25zdDsKKyAgICBib29sIGNhblVz
ZUZhc3RHbHlwaEFkdmFuY2VHZXR0ZXIoR2x5cGgsIENHU2l6ZSYgYWR2YW5jZSwgYm9vbCYgcG9w
dWxhdGVkQWR2YW5jZSkgY29uc3Q7CiAgICAgQ0dGb250UmVuZGVyaW5nU3R5bGUgcmVuZGVyaW5n
U3R5bGUoKSBjb25zdDsKICAgICBib29sIGFkdmFuY2VGb3JDb2xvckJpdG1hcEZvbnQoR2x5cGgs
IENHU2l6ZSYgcmVzdWx0KSBjb25zdDsgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBmb250IGlzIGEg
Y29sb3IgYml0bWFwIGZvbnQKICNlbmRpZgpAQCAtMjU1LDcgKzI1NSw3IEBAIHByaXZhdGU6CiAg
ICAgbXV0YWJsZSBHbHlwaE1ldHJpY3NNYXA8ZmxvYXQ+IG1fZ2x5cGhUb1dpZHRoTWFwOwogCiAg
ICAgYm9vbCBtX3RyZWF0QXNGaXhlZFBpdGNoOwotICAgIGJvb2wgbV9pc0N1c3RvbUZvbnQ7ICAv
LyBXaGV0aGVyIG9yIG5vdCB3ZSBhcmUgY3VzdG9tIGZvbnQgbG9hZGVkIHZpYSBAZm9udC1mYWNl
CisgICAgYm9vbCBtX2lzQ3VzdG9tRm9udDsgLy8gV2hldGhlciBvciBub3Qgd2UgYXJlIGN1c3Rv
bSBmb250IGxvYWRlZCB2aWEgQGZvbnQtZmFjZQogICAgIGJvb2wgbV9pc0xvYWRpbmc7IC8vIFdo
ZXRoZXIgb3Igbm90IHRoaXMgY3VzdG9tIGZvbnQgaXMgc3RpbGwgaW4gdGhlIGFjdCBvZiBsb2Fk
aW5nLgogCiAgICAgYm9vbCBtX2lzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2s7CkBAIC0yODQsMTQg
KzI4NCwxNCBAQCBwcml2YXRlOgogICAgICAgICB+RGVyaXZlZEZvbnREYXRhKCk7CiAKICAgICAg
ICAgYm9vbCBmb3JDdXN0b21Gb250OwotICAgICAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IHNt
YWxsQ2FwczsKLSAgICAgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBlbXBoYXNpc01hcms7Ci0g
ICAgICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gYnJva2VuSWRlb2dyYXBoOwotICAgICAgICBS
ZWZQdHI8U2ltcGxlRm9udERhdGE+IHZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbjsKLSAgICAgICAg
UmVmUHRyPFNpbXBsZUZvbnREYXRhPiB1cHJpZ2h0T3JpZW50YXRpb247Ci0gICAgICAgIFJlZlB0
cjxTaW1wbGVGb250RGF0YT4gbm9uU3ludGhldGljSXRhbGljOworICAgICAgICBSZWZQdHI8Rm9u
dD4gc21hbGxDYXBzOworICAgICAgICBSZWZQdHI8Rm9udD4gZW1waGFzaXNNYXJrOworICAgICAg
ICBSZWZQdHI8Rm9udD4gYnJva2VuSWRlb2dyYXBoOworICAgICAgICBSZWZQdHI8Rm9udD4gdmVy
dGljYWxSaWdodE9yaWVudGF0aW9uOworICAgICAgICBSZWZQdHI8Rm9udD4gdXByaWdodE9yaWVu
dGF0aW9uOworICAgICAgICBSZWZQdHI8Rm9udD4gbm9uU3ludGhldGljSXRhbGljOwogI2lmIFVT
RShBUFBLSVQpCi0gICAgICAgIEhhc2hNYXA8TlNGb250KiwgUmVmUHRyPFNpbXBsZUZvbnREYXRh
Pj4gY29tcG9zaXRlRm9udFJlZmVyZW5jZXM7CisgICAgICAgIEhhc2hNYXA8TlNGb250KiwgUmVm
UHRyPEZvbnQ+PiBjb21wb3NpdGVGb250UmVmZXJlbmNlczsKICNlbmRpZgogICAgIH07CiAKQEAg
LTMxOSw3ICszMTksNyBAQCBwcml2YXRlOgogI2VuZGlmCiB9OwogCi1BTFdBWVNfSU5MSU5FIEZs
b2F0UmVjdCBTaW1wbGVGb250RGF0YTo6Ym91bmRzRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0
CitBTFdBWVNfSU5MSU5FIEZsb2F0UmVjdCBGb250Ojpib3VuZHNGb3JHbHlwaChHbHlwaCBnbHlw
aCkgY29uc3QKIHsKICAgICBpZiAoaXNaZXJvV2lkdGhTcGFjZUdseXBoKGdseXBoKSkKICAgICAg
ICAgcmV0dXJuIEZsb2F0UmVjdCgpOwpAQCAtMzM4LDcgKzMzOCw3IEBAIEFMV0FZU19JTkxJTkUg
RmxvYXRSZWN0IFNpbXBsZUZvbnREYXRhOjoKICAgICByZXR1cm4gYm91bmRzOwogfQogCi1BTFdB
WVNfSU5MSU5FIGZsb2F0IFNpbXBsZUZvbnREYXRhOjp3aWR0aEZvckdseXBoKEdseXBoIGdseXBo
KSBjb25zdAorQUxXQVlTX0lOTElORSBmbG9hdCBGb250Ojp3aWR0aEZvckdseXBoKEdseXBoIGds
eXBoKSBjb25zdAogewogICAgIGlmIChpc1plcm9XaWR0aFNwYWNlR2x5cGgoZ2x5cGgpKQogICAg
ICAgICByZXR1cm4gMDsKQEAgLTM2Niw0ICszNjYsNCBAQCBBTFdBWVNfSU5MSU5FIGZsb2F0IFNp
bXBsZUZvbnREYXRhOjp3aWR0CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8v
IFNpbXBsZUZvbnREYXRhX2gKKyNlbmRpZiAvLyBGb250X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAkocmV2aXNpb24gMTc4ODU3KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTIsMTQgKzUyLDE0IEBACiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+
CiAKIC8vIEZJWE1FOiBXZSBtYXkgYmUgYWJsZSB0byBzaW1wbGlmeSB0aGlzIGNvZGUgdXNpbmcg
QysrMTEgdGhyZWFkaW5nIHByaW1pdGl2ZXMsIGluY2x1ZGluZyBzdGQ6OmNhbGxfb25jZSgpLgot
c3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBmb250RGF0YUxvY2s7CitzdGF0aWMgcHRocmVhZF9tdXRl
eF90IGZvbnRMb2NrOwogCiBzdGF0aWMgdm9pZCBpbml0Rm9udENhY2hlTG9ja09uY2UoKQogewog
ICAgIHB0aHJlYWRfbXV0ZXhhdHRyX3QgbXV0ZXhBdHRyaWJ1dGU7CiAgICAgcHRocmVhZF9tdXRl
eGF0dHJfaW5pdCgmbXV0ZXhBdHRyaWJ1dGUpOwogICAgIHB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5
cGUoJm11dGV4QXR0cmlidXRlLCBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRSk7Ci0gICAgcHRocmVh
ZF9tdXRleF9pbml0KCZmb250RGF0YUxvY2ssICZtdXRleEF0dHJpYnV0ZSk7CisgICAgcHRocmVh
ZF9tdXRleF9pbml0KCZmb250TG9jaywgJm11dGV4QXR0cmlidXRlKTsKICAgICBwdGhyZWFkX211
dGV4YXR0cl9kZXN0cm95KCZtdXRleEF0dHJpYnV0ZSk7CiB9CiAKQEAgLTcxLDEzICs3MSwxMyBA
QCBwdWJsaWM6CiAgICAgRm9udExvY2tlcigpCiAgICAgewogICAgICAgICBwdGhyZWFkX29uY2Uo
JmluaXRGb250TG9ja0NvbnRyb2wsIGluaXRGb250Q2FjaGVMb2NrT25jZSk7Ci0gICAgICAgIGlu
dCBsb2NrY29kZSA9IHB0aHJlYWRfbXV0ZXhfbG9jaygmZm9udERhdGFMb2NrKTsKLSAgICAgICAg
QVNTRVJUX1dJVEhfTUVTU0FHRV9VTlVTRUQobG9ja2NvZGUsICFsb2NrY29kZSwgImZvbnREYXRh
TG9jayBsb2NrIGZhaWxlZCB3aXRoIGNvZGU6JWQiLCBsb2NrY29kZSk7ICAgIAorICAgICAgICBp
bnQgbG9ja2NvZGUgPSBwdGhyZWFkX211dGV4X2xvY2soJmZvbnRMb2NrKTsKKyAgICAgICAgQVNT
RVJUX1dJVEhfTUVTU0FHRV9VTlVTRUQobG9ja2NvZGUsICFsb2NrY29kZSwgImZvbnRMb2NrIGxv
Y2sgZmFpbGVkIHdpdGggY29kZTolZCIsIGxvY2tjb2RlKTsgICAgCiAgICAgfQogICAgIH5Gb250
TG9ja2VyKCkKICAgICB7Ci0gICAgICAgIGludCBsb2NrY29kZSA9IHB0aHJlYWRfbXV0ZXhfdW5s
b2NrKCZmb250RGF0YUxvY2spOwotICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFX1VOVVNFRChs
b2NrY29kZSwgIWxvY2tjb2RlLCAiZm9udERhdGFMb2NrIHVubG9jayBmYWlsZWQgd2l0aCBjb2Rl
OiVkIiwgbG9ja2NvZGUpOworICAgICAgICBpbnQgbG9ja2NvZGUgPSBwdGhyZWFkX211dGV4X3Vu
bG9jaygmZm9udExvY2spOworICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFX1VOVVNFRChsb2Nr
Y29kZSwgIWxvY2tjb2RlLCAiZm9udExvY2sgdW5sb2NrIGZhaWxlZCB3aXRoIGNvZGU6JWQiLCBs
b2NrY29kZSk7CiAgICAgfQogfTsKICNlbmRpZiAvLyBQTEFURk9STShJT1MpCkBAIC0zNTksNyAr
MzU5LDcgQEAgc3RydWN0IEZvbnREYXRhQ2FjaGVLZXlUcmFpdHMgOiBXVEY6OkdlbgogICAgIH0K
IH07CiAKLXR5cGVkZWYgSGFzaE1hcDxGb250UGxhdGZvcm1EYXRhLCBSZWZQdHI8U2ltcGxlRm9u
dERhdGE+LCBGb250RGF0YUNhY2hlS2V5SGFzaCwgRm9udERhdGFDYWNoZUtleVRyYWl0cz4gRm9u
dERhdGFDYWNoZTsKK3R5cGVkZWYgSGFzaE1hcDxGb250UGxhdGZvcm1EYXRhLCBSZWZQdHI8Rm9u
dD4sIEZvbnREYXRhQ2FjaGVLZXlIYXNoLCBGb250RGF0YUNhY2hlS2V5VHJhaXRzPiBGb250RGF0
YUNhY2hlOwogCiBzdGF0aWMgRm9udERhdGFDYWNoZSYgY2FjaGVkRm9udHMoKQogewpAQCAtMzc5
LDcgKzM3OSw3IEBAIGNvbnN0IGludCBjVGFyZ2V0SW5hY3RpdmVGb250RGF0YSA9IDIwMDsKIGNv
bnN0IGludCBjTWF4VW5kZXJNZW1vcnlQcmVzc3VyZUluYWN0aXZlRm9udERhdGEgPSA1MDsKIGNv
bnN0IGludCBjVGFyZ2V0VW5kZXJNZW1vcnlQcmVzc3VyZUluYWN0aXZlRm9udERhdGEgPSAzMDsK
IAotUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmZvbnRGb3JGYW1pbHkoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFt
aWx5LCBib29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSkKK1JlZlB0cjxGb250PiBGb250Q2FjaGU6
OmZvbnRGb3JGYW1pbHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNv
bnN0IEF0b21pY1N0cmluZyYgZmFtaWx5LCBib29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSkKIHsK
ICAgICBpZiAoIW1fcHVyZ2VUaW1lci5pc0FjdGl2ZSgpKQogICAgICAgICBtX3B1cmdlVGltZXIu
c3RhcnRPbmVTaG90KHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM6Onplcm8oKSk7CkBAIC0zOTEs
NyArMzkxLDcgQEAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmZvbnRGbwogICAg
IHJldHVybiBmb250Rm9yUGxhdGZvcm1EYXRhKCpwbGF0Zm9ybURhdGEpOwogfQogCi1SZWY8U2lt
cGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Zm9udEZvclBsYXRmb3JtRGF0YShjb25zdCBGb250UGxh
dGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEpCitSZWY8Rm9udD4gRm9udENhY2hlOjpmb250Rm9yUGxh
dGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSkKIHsKICNpZiBQ
TEFURk9STShJT1MpCiAgICAgRm9udExvY2tlciBmb250TG9ja2VyOwpAQCAtMzk5LDcgKzM5OSw3
IEBAIFJlZjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpmb250Rm9yUGwKICAgICAKICAgICBh
dXRvIGFkZFJlc3VsdCA9IGNhY2hlZEZvbnRzKCkuYWRkKHBsYXRmb3JtRGF0YSwgbnVsbHB0cik7
CiAgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICBhZGRSZXN1bHQuaXRlcmF0
b3ItPnZhbHVlID0gU2ltcGxlRm9udERhdGE6OmNyZWF0ZShwbGF0Zm9ybURhdGEpOworICAgICAg
ICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gRm9udDo6Y3JlYXRlKHBsYXRmb3JtRGF0YSk7
CiAKICAgICByZXR1cm4gKmFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiB9CkBAIC00MTYsNyAr
NDE2LDcgQEAgdm9pZCBGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YUlmTgogCiAgICAg
aWYgKGNhY2hlZEZvbnRzKCkuc2l6ZSgpIDwgaW5hY3RpdmVGb250RGF0YUxpbWl0KQogICAgICAg
ICByZXR1cm47Ci0gICAgaW50IGluYWN0aXZlQ291bnQgPSBpbmFjdGl2ZUZvbnREYXRhQ291bnQo
KTsKKyAgICBpbnQgaW5hY3RpdmVDb3VudCA9IGluYWN0aXZlRm9udENvdW50KCk7CiAgICAgaWYg
KGluYWN0aXZlQ291bnQgPD0gaW5hY3RpdmVGb250RGF0YUxpbWl0KQogICAgICAgICByZXR1cm47
CiAKQEAgLTQzNCw3ICs0MzQsNyBAQCB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnRE
YXRhKGluCiAjZW5kaWYKIAogICAgIHdoaWxlIChwdXJnZUNvdW50KSB7Ci0gICAgICAgIFZlY3Rv
cjxSZWZQdHI8U2ltcGxlRm9udERhdGE+LCAyMD4gZm9udHNUb0RlbGV0ZTsKKyAgICAgICAgVmVj
dG9yPFJlZlB0cjxGb250PiwgMjA+IGZvbnRzVG9EZWxldGU7CiAgICAgICAgIGZvciAoYXV0byYg
Zm9udCA6IGNhY2hlZEZvbnRzKCkudmFsdWVzKCkpIHsKICAgICAgICAgICAgIGlmICghZm9udC0+
aGFzT25lUmVmKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC00NjYsOCArNDY2LDgg
QEAgdm9pZCBGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YShpbgogICAgICAgICAgICAg
aWYgKHZlcnRpY2FsRGF0YSkKICAgICAgICAgICAgICAgICB2ZXJ0aWNhbERhdGEtPm1faW5Gb250
Q2FjaGUgPSBmYWxzZTsKICAgICAgICAgfQotICAgICAgICBmb3IgKGF1dG8mIGZvbnREYXRhIDog
Y2FjaGVkRm9udHMoKS52YWx1ZXMoKSkgewotICAgICAgICAgICAgYXV0byogdmVydGljYWxEYXRh
ID0gY29uc3RfY2FzdDxPcGVuVHlwZVZlcnRpY2FsRGF0YSo+KGZvbnREYXRhLT52ZXJ0aWNhbERh
dGEoKSk7CisgICAgICAgIGZvciAoYXV0byYgZm9udCA6IGNhY2hlZEZvbnRzKCkudmFsdWVzKCkp
IHsKKyAgICAgICAgICAgIGF1dG8qIHZlcnRpY2FsRGF0YSA9IGNvbnN0X2Nhc3Q8T3BlblR5cGVW
ZXJ0aWNhbERhdGEqPihmb250LT52ZXJ0aWNhbERhdGEoKSk7CiAgICAgICAgICAgICBpZiAodmVy
dGljYWxEYXRhKQogICAgICAgICAgICAgICAgIHZlcnRpY2FsRGF0YS0+bV9pbkZvbnRDYWNoZSA9
IHRydWU7CiAgICAgICAgIH0KQEAgLTQ4MywxMiArNDgzLDEyIEBAIHZvaWQgRm9udENhY2hlOjpw
dXJnZUluYWN0aXZlRm9udERhdGEoaW4KICNlbmRpZgogfQogCi1zaXplX3QgRm9udENhY2hlOjpm
b250RGF0YUNvdW50KCkKK3NpemVfdCBGb250Q2FjaGU6OmZvbnRDb3VudCgpCiB7CiAgICAgcmV0
dXJuIGNhY2hlZEZvbnRzKCkuc2l6ZSgpOwogfQogCi1zaXplX3QgRm9udENhY2hlOjppbmFjdGl2
ZUZvbnREYXRhQ291bnQoKQorc2l6ZV90IEZvbnRDYWNoZTo6aW5hY3RpdmVGb250Q291bnQoKQog
ewogI2lmIFBMQVRGT1JNKElPUykKICAgICBGb250TG9ja2VyIGZvbnRMb2NrZXI7CkBAIC01NTEs
NyArNTUxLDcgQEAgdm9pZCBGb250Q2FjaGU6OmludmFsaWRhdGUoKQogfQogCiAjaWYgIVBMQVRG
T1JNKENPQ09BKQotUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OnNpbWlsYXJGb250
UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpCitSZWZQdHI8Rm9udD4gRm9udENh
Y2hlOjpzaW1pbGFyRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mKQogewogICAgIHJldHVybiBu
dWxscHRyOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
Y2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhY2hlLmgJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIGNsYXNz
IEZvbnRDYXNjYWRlOwogY2xhc3MgRm9udFBsYXRmb3JtRGF0YTsKIGNsYXNzIEZvbnRTZWxlY3Rv
cjsKIGNsYXNzIE9wZW5UeXBlVmVydGljYWxEYXRhOwotY2xhc3MgU2ltcGxlRm9udERhdGE7Citj
bGFzcyBGb250OwogCiAjaWYgUExBVEZPUk0oV0lOKQogI2lmIFVTRShJTUxBTkdfRk9OVF9MSU5L
MikKQEAgLTExMSw3ICsxMTEsNyBAQCBwdWJsaWM6CiAgICAgZnJpZW5kIEZvbnRDYWNoZSYgZm9u
dENhY2hlKCk7CiAKICAgICAvLyBUaGlzIG1ldGhvZCBpcyBpbXBsZW1lbnRlZCBieSB0aGUgcGxh
dGZvcm0uCi0gICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBzeXN0ZW1GYWxsYmFja0ZvckNoYXJh
Y3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgU2ltcGxlRm9udERhdGEqIG9yaWdp
bmFsRm9udERhdGEsIGJvb2wgaXNQbGF0Zm9ybUZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
LCBpbnQgbGVuZ3RoKTsKKyAgICBSZWZQdHI8Rm9udD4gc3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0
ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEZvbnQqIG9yaWdpbmFsRm9udERhdGEs
IGJvb2wgaXNQbGF0Zm9ybUZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3Ro
KTsKIAogICAgIC8vIEFsc28gaW1wbGVtZW50ZWQgYnkgdGhlIHBsYXRmb3JtLgogICAgIHZvaWQg
cGxhdGZvcm1Jbml0KCk7CkBAIC0xMjgsMTAgKzEyOCwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IGdldFRyYWl0c0luRmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYsIFZlY3Rvcjx1bnNpZ25lZD4m
KTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gZm9udEZvckZh
bWlseShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9taWNTdHJpbmcmLCBib29sIGNo
ZWNraW5nQWx0ZXJuYXRlTmFtZSA9IGZhbHNlKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWY8U2lt
cGxlRm9udERhdGE+IGxhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9u
Jik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgUmVmPFNpbXBsZUZvbnREYXRhPiBmb250Rm9yUGxhdGZv
cm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsKLSAgICBSZWZQdHI8U2ltcGxlRm9udERh
dGE+IHNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpOworICAg
IFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxGb250PiBmb250Rm9yRmFtaWx5KGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYsIGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1l
ID0gZmFsc2UpOworICAgIFdFQkNPUkVfRVhQT1JUIFJlZjxGb250PiBsYXN0UmVzb3J0RmFsbGJh
Y2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpOworICAgIFdFQkNPUkVfRVhQT1JUIFJlZjxG
b250PiBmb250Rm9yUGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsKKyAgICBS
ZWZQdHI8Rm9udD4gc2ltaWxhckZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJik7CiAKICAgICB2
b2lkIGFkZENsaWVudChGb250U2VsZWN0b3IqKTsKICAgICB2b2lkIHJlbW92ZUNsaWVudChGb250
U2VsZWN0b3IqKTsKQEAgLTEzOSwxMiArMTM5LDEyIEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBz
aG9ydCBnZW5lcmF0aW9uKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBpbnZhbGlkYXRlKCk7
CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBzaXplX3QgZm9udERhdGFDb3VudCgpOwotICAgIFdFQkNP
UkVfRVhQT1JUIHNpemVfdCBpbmFjdGl2ZUZvbnREYXRhQ291bnQoKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCBzaXplX3QgZm9udENvdW50KCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc2l6ZV90IGluYWN0
aXZlRm9udENvdW50KCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwdXJnZUluYWN0aXZlRm9u
dERhdGEoaW50IGNvdW50ID0gSU5UX01BWCk7CiAKICNpZiBQTEFURk9STShXSU4pCi0gICAgUmVm
UHRyPFNpbXBsZUZvbnREYXRhPiBmb250RGF0YUZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoY29u
c3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgTE9HRk9OVCYsIEF0b21pY1N0cmluZyYgb3V0Rm9u
dEZhbWlseU5hbWUpOworICAgIFJlZlB0cjxGb250PiBmb250RnJvbURlc2NyaXB0aW9uQW5kTG9n
Rm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBMT0dGT05UJiwgQXRvbWljU3RyaW5n
JiBvdXRGb250RmFtaWx5TmFtZSk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJU
SUNBTCkKQEAgLTE3Myw3ICsxNzMsNyBAQCBwcml2YXRlOgogICAgIC8vIFRoZXNlIG1ldGhvZHMg
YXJlIGltcGxlbWVudGVkIGJ5IGVhY2ggcGxhdGZvcm0uCiAjaWYgUExBVEZPUk0oSU9TKQogICAg
IEZvbnRQbGF0Zm9ybURhdGEqIGdldEN1c3RvbUZhbGxiYWNrRm9udChjb25zdCBVSW50MzIsIGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYpOwotICAgIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IGdl
dFN5c3RlbUZvbnRGYWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9uJiwg
Y29uc3QgU2ltcGxlRm9udERhdGEqLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0
aCk7CisgICAgUGFzc1JlZlB0cjxGb250PiBnZXRTeXN0ZW1Gb250RmFsbGJhY2tGb3JDaGFyYWN0
ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEZvbnQqLCBjb25zdCBVQ2hhciogY2hh
cmFjdGVycywgaW50IGxlbmd0aCk7CiAjZW5kaWYKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBs
YXRmb3JtRGF0YT4gY3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24m
LCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSk7CiAKQEAgLTE4Miw3ICsxODIsNyBAQCBwcml2
YXRlOgogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIGZyaWVuZCBjbGFzcyBDb21wbGV4VGV4dENv
bnRyb2xsZXI7CiAjZW5kaWYKLSAgICBmcmllbmQgY2xhc3MgU2ltcGxlRm9udERhdGE7CisgICAg
ZnJpZW5kIGNsYXNzIEZvbnQ7CiB9OwogCiAvLyBHZXQgdGhlIGdsb2JhbCBmb250Q2FjaGUuCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUu
Y3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250Q2FzY2FkZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNCw4ICsxMjQsOCBAQCBGb250
Q2FzY2FkZTo6Rm9udENhc2NhZGUoY29uc3QgRm9udERlc2NyCiB9CiAKIC8vIEZJWE1FOiBXZSBz
aG91bGQgbWFrZSB0aGlzIGNvbnN0cnVjdG9yIHBsYXRmb3JtLWluZGVwZW5kZW50LgotRm9udENh
c2NhZGU6OkZvbnRDYXNjYWRlKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnREYXRhLCBib29s
IGlzUHJpbnRlckZvbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmdNb2RlKQotICAg
IDogbV9nbHlwaHMoRm9udEdseXBoczo6Y3JlYXRlRm9yUGxhdGZvcm1Gb250KGZvbnREYXRhKSkK
K0ZvbnRDYXNjYWRlOjpGb250Q2FzY2FkZShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBmb250LCBi
b29sIGlzUHJpbnRlckZvbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmdNb2RlKQor
ICAgIDogbV9nbHlwaHMoRm9udEdseXBoczo6Y3JlYXRlRm9yUGxhdGZvcm1Gb250KGZvbnQpKQog
ICAgICwgbV9sZXR0ZXJTcGFjaW5nKDApCiAgICAgLCBtX3dvcmRTcGFjaW5nKDApCiAgICAgLCBt
X3VzZUJhY2tzbGFzaEFzWWVuU3ltYm9sKGZhbHNlKQpAQCAtMTM0LDI3ICsxMzQsMjcgQEAgRm9u
dENhc2NhZGU6OkZvbnRDYXNjYWRlKGNvbnN0IEZvbnRQbGF0ZgogICAgIG1fZm9udERlc2NyaXB0
aW9uLnNldFVzZVByaW50ZXJGb250KGlzUHJpbnRlckZvbnQpOwogICAgIG1fZm9udERlc2NyaXB0
aW9uLnNldEZvbnRTbW9vdGhpbmcoZm9udFNtb290aGluZ01vZGUpOwogI2lmIFBMQVRGT1JNKElP
UykKLSAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKENURm9udEdldFNpemUo
Zm9udERhdGEuZm9udCgpKSk7Ci0gICAgbV9mb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXpl
KENURm9udEdldFNpemUoZm9udERhdGEuZm9udCgpKSk7Ci0gICAgbV9mb250RGVzY3JpcHRpb24u
c2V0SXNJdGFsaWMoQ1RGb250R2V0U3ltYm9saWNUcmFpdHMoZm9udERhdGEuZm9udCgpKSAmIGtD
VEZvbnRUcmFpdEl0YWxpYyk7Ci0gICAgbV9mb250RGVzY3JpcHRpb24uc2V0V2VpZ2h0KChDVEZv
bnRHZXRTeW1ib2xpY1RyYWl0cyhmb250RGF0YS5mb250KCkpICYga0NURm9udFRyYWl0Qm9sZCkg
PyBGb250V2VpZ2h0Qm9sZCA6IEZvbnRXZWlnaHROb3JtYWwpOworICAgIG1fZm9udERlc2NyaXB0
aW9uLnNldFNwZWNpZmllZFNpemUoQ1RGb250R2V0U2l6ZShmb250LmZvbnQoKSkpOworICAgIG1f
Zm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShDVEZvbnRHZXRTaXplKGZvbnQuZm9udCgp
KSk7CisgICAgbV9mb250RGVzY3JpcHRpb24uc2V0SXNJdGFsaWMoQ1RGb250R2V0U3ltYm9saWNU
cmFpdHMoZm9udC5mb250KCkpICYga0NURm9udFRyYWl0SXRhbGljKTsKKyAgICBtX2ZvbnREZXNj
cmlwdGlvbi5zZXRXZWlnaHQoKENURm9udEdldFN5bWJvbGljVHJhaXRzKGZvbnQuZm9udCgpKSAm
IGtDVEZvbnRUcmFpdEJvbGQpID8gRm9udFdlaWdodEJvbGQgOiBGb250V2VpZ2h0Tm9ybWFsKTsK
ICNlbmRpZgogfQogCiAvLyBGSVhNRTogV2Ugc2hvdWxkIG1ha2UgdGhpcyBjb25zdHJ1Y3RvciBw
bGF0Zm9ybS1pbmRlcGVuZGVudC4KICNpZiBQTEFURk9STShJT1MpCi1Gb250Q2FzY2FkZTo6Rm9u
dENhc2NhZGUoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZm9udERhdGEsIFBhc3NSZWZQdHI8Rm9u
dFNlbGVjdG9yPiBmb250U2VsZWN0b3IpCi0gICAgOiBtX2dseXBocyhGb250R2x5cGhzOjpjcmVh
dGVGb3JQbGF0Zm9ybUZvbnQoZm9udERhdGEpKQorRm9udENhc2NhZGU6OkZvbnRDYXNjYWRlKGNv
bnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnQsIFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPiBmb250
U2VsZWN0b3IpCisgICAgOiBtX2dseXBocyhGb250R2x5cGhzOjpjcmVhdGVGb3JQbGF0Zm9ybUZv
bnQoZm9udCkpCiAgICAgLCBtX2xldHRlclNwYWNpbmcoMCkKICAgICAsIG1fd29yZFNwYWNpbmco
MCkKICAgICAsIG1fdHlwZXNldHRpbmdGZWF0dXJlcyhjb21wdXRlVHlwZXNldHRpbmdGZWF0dXJl
cygpKQogewotICAgIENURm9udFJlZiBwcmltYXJ5Rm9udCA9IGZvbnREYXRhLmZvbnQoKTsKKyAg
ICBDVEZvbnRSZWYgcHJpbWFyeUZvbnQgPSBmb250LmZvbnQoKTsKICAgICBtX2ZvbnREZXNjcmlw
dGlvbi5zZXRTcGVjaWZpZWRTaXplKENURm9udEdldFNpemUocHJpbWFyeUZvbnQpKTsKICAgICBt
X2ZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoQ1RGb250R2V0U2l6ZShwcmltYXJ5Rm9u
dCkpOwogICAgIG1fZm9udERlc2NyaXB0aW9uLnNldElzSXRhbGljKENURm9udEdldFN5bWJvbGlj
VHJhaXRzKHByaW1hcnlGb250KSAmIGtDVEZvbnRUcmFpdEl0YWxpYyk7CiAgICAgbV9mb250RGVz
Y3JpcHRpb24uc2V0V2VpZ2h0KChDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhwcmltYXJ5Rm9udCkg
JiBrQ1RGb250VHJhaXRCb2xkKSA/IEZvbnRXZWlnaHRCb2xkIDogRm9udFdlaWdodE5vcm1hbCk7
Ci0gICAgbV9mb250RGVzY3JpcHRpb24uc2V0VXNlUHJpbnRlckZvbnQoZm9udERhdGEuaXNQcmlu
dGVyRm9udCgpKTsKKyAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRVc2VQcmludGVyRm9udChmb250
LmlzUHJpbnRlckZvbnQoKSk7CiAgICAgbV9nbHlwaHMgPSByZXRyaWV2ZU9yQWRkQ2FjaGVkRm9u
dEdseXBocyhtX2ZvbnREZXNjcmlwdGlvbiwgZm9udFNlbGVjdG9yLmdldCgpKTsKIH0KICNlbmRp
ZgpAQCAtMzcxLDcgKzM3MSw3IEBAIHZvaWQgRm9udENhc2NhZGU6OmRyYXdFbXBoYXNpc01hcmtz
KEdyYXAKICAgICAgICAgZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChjb250ZXh0LCBy
dW4sIG1hcmssIHBvaW50LCBmcm9tLCB0byk7CiB9CiAKLWZsb2F0IEZvbnRDYXNjYWRlOjp3aWR0
aChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFs
bGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKK2Zsb2F0IEZv
bnRDYXNjYWRlOjp3aWR0aChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgRm9udCo+
KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAogewog
ICAgIENvZGVQYXRoIGNvZGVQYXRoVG9Vc2UgPSBjb2RlUGF0aChydW4pOwogICAgIGlmIChjb2Rl
UGF0aFRvVXNlICE9IENvbXBsZXgpIHsKQEAgLTM4OSw3ICszODksNyBAQCBmbG9hdCBGb250Q2Fz
Y2FkZTo6d2lkdGgoY29uc3QgVGV4dFJ1biYgCiAgICAgaWYgKGNhY2hlRW50cnkgJiYgIXN0ZDo6
aXNuYW4oKmNhY2hlRW50cnkpKQogICAgICAgICByZXR1cm4gKmNhY2hlRW50cnk7CiAKLSAgICBI
YXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4gbG9jYWxGYWxsYmFja0ZvbnRzOworICAgIEhh
c2hTZXQ8Y29uc3QgRm9udCo+IGxvY2FsRmFsbGJhY2tGb250czsKICAgICBpZiAoIWZhbGxiYWNr
Rm9udHMpCiAgICAgICAgIGZhbGxiYWNrRm9udHMgPSAmbG9jYWxGYWxsYmFja0ZvbnRzOwogCkBA
IC00MTYsMTAgKzQxNiwxMCBAQCBmbG9hdCBGb250Q2FzY2FkZTo6d2lkdGgoY29uc3QgVGV4dFJ1
biYgCiAgICAgcmV0dXJuIHdpZHRoKHJ1bik7CiB9CiAKLUdseXBoRGF0YSBGb250Q2FzY2FkZTo6
Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYywgYm9vbCBtaXJyb3IsIEZvbnREYXRhVmFy
aWFudCB2YXJpYW50KSBjb25zdAorR2x5cGhEYXRhIEZvbnRDYXNjYWRlOjpnbHlwaERhdGFGb3JD
aGFyYWN0ZXIoVUNoYXIzMiBjLCBib29sIG1pcnJvciwgRm9udFZhcmlhbnQgdmFyaWFudCkgY29u
c3QKIHsKICAgICBpZiAodmFyaWFudCA9PSBBdXRvVmFyaWFudCkgewotICAgICAgICBpZiAobV9m
b250RGVzY3JpcHRpb24uc21hbGxDYXBzKCkgJiYgIXByaW1hcnlGb250RGF0YSgpLmlzU1ZHRm9u
dCgpKSB7CisgICAgICAgIGlmIChtX2ZvbnREZXNjcmlwdGlvbi5zbWFsbENhcHMoKSAmJiAhcHJp
bWFyeUZvbnQoKS5pc1NWR0ZvbnQoKSkgewogICAgICAgICAgICAgVUNoYXIzMiB1cHBlckMgPSB1
X3RvdXBwZXIoYyk7CiAgICAgICAgICAgICBpZiAodXBwZXJDICE9IGMpIHsKICAgICAgICAgICAg
ICAgICBjID0gdXBwZXJDOwpAQCAtNDQ2LDcgKzQ0Niw3IEBAIHZvaWQgRm9udENhc2NhZGU6OmRl
bGV0ZUxheW91dChUZXh0TGF5b3UKIHsKIH0KIAotZmxvYXQgRm9udENhc2NhZGU6OndpZHRoKFRl
eHRMYXlvdXQmLCB1bnNpZ25lZCwgdW5zaWduZWQsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERh
dGEqPiopCitmbG9hdCBGb250Q2FzY2FkZTo6d2lkdGgoVGV4dExheW91dCYsIHVuc2lnbmVkLCB1
bnNpZ25lZCwgSGFzaFNldDxjb25zdCBGb250Kj4qKQogewogICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgIHJldHVybiAwOwpAQCAtNTA1LDcgKzUwNSw3IEBAIGJvb2wgRm9udENhc2NhZGU6
Omhhc1ZhbGlkQXZlcmFnZUNoYXJXaWQKIAogI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0o
SU9TKQogICAgIC8vIEludGVybmFsIGZvbnRzIG9uIE9TIFggYW5kIGlPUyBhbHNvIGhhdmUgYW4g
aW52YWxpZCBlbnRyeSBpbiB0aGUgdGFibGUgZm9yIGF2Z0NoYXJXaWR0aC4KLSAgICBpZiAocHJp
bWFyeUZvbnREYXRhSXNTeXN0ZW1Gb250KCkpCisgICAgaWYgKHByaW1hcnlGb250SXNTeXN0ZW1G
b250KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgogCkBAIC01MjUsNyArNTI1LDcg
QEAgYm9vbCBGb250Q2FzY2FkZTo6ZmFzdEF2ZXJhZ2VDaGFyV2lkdGhJZgogewogICAgIGJvb2wg
c3VjY2VzcyA9IGhhc1ZhbGlkQXZlcmFnZUNoYXJXaWR0aCgpOwogICAgIGlmIChzdWNjZXNzKQot
ICAgICAgICB3aWR0aCA9IHJvdW5kZihwcmltYXJ5Rm9udERhdGEoKS5hdmdDaGFyV2lkdGgoKSk7
IC8vIEZJWE1FOiBwcmltYXJ5Rm9udERhdGEoKSBtaWdodCBub3QgY29ycmVzcG9uZCB0byBmaXJz
dEZhbWlseSgpLgorICAgICAgICB3aWR0aCA9IHJvdW5kZihwcmltYXJ5Rm9udCgpLmF2Z0NoYXJX
aWR0aCgpKTsgLy8gRklYTUU6IHByaW1hcnlGb250KCkgbWlnaHQgbm90IGNvcnJlc3BvbmQgdG8g
Zmlyc3RGYW1pbHkoKS4KICAgICByZXR1cm4gc3VjY2VzczsKIH0KIApAQCAtMTE3Myw3ICsxMTcz
LDcgQEAgaW50IEZvbnRDYXNjYWRlOjplbXBoYXNpc01hcmtBc2NlbnQoY29ucwogICAgIGlmICgh
Z2V0RW1waGFzaXNNYXJrR2x5cGhEYXRhKG1hcmssIG1hcmtHbHlwaERhdGEpKQogICAgICAgICBy
ZXR1cm4gMDsKIAotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBtYXJrRm9udERhdGEgPSBtYXJr
R2x5cGhEYXRhLmZvbnREYXRhOworICAgIGNvbnN0IEZvbnQqIG1hcmtGb250RGF0YSA9IG1hcmtH
bHlwaERhdGEuZm9udDsKICAgICBBU1NFUlQobWFya0ZvbnREYXRhKTsKICAgICBpZiAoIW1hcmtG
b250RGF0YSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMTg3LDcgKzExODcsNyBAQCBpbnQgRm9u
dENhc2NhZGU6OmVtcGhhc2lzTWFya0Rlc2NlbnQoY29uCiAgICAgaWYgKCFnZXRFbXBoYXNpc01h
cmtHbHlwaERhdGEobWFyaywgbWFya0dseXBoRGF0YSkpCiAgICAgICAgIHJldHVybiAwOwogCi0g
ICAgY29uc3QgU2ltcGxlRm9udERhdGEqIG1hcmtGb250RGF0YSA9IG1hcmtHbHlwaERhdGEuZm9u
dERhdGE7CisgICAgY29uc3QgRm9udCogbWFya0ZvbnREYXRhID0gbWFya0dseXBoRGF0YS5mb250
OwogICAgIEFTU0VSVChtYXJrRm9udERhdGEpOwogICAgIGlmICghbWFya0ZvbnREYXRhKQogICAg
ICAgICByZXR1cm4gMDsKQEAgLTEyMDEsNyArMTIwMSw3IEBAIGludCBGb250Q2FzY2FkZTo6ZW1w
aGFzaXNNYXJrSGVpZ2h0KGNvbnMKICAgICBpZiAoIWdldEVtcGhhc2lzTWFya0dseXBoRGF0YSht
YXJrLCBtYXJrR2x5cGhEYXRhKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBjb25zdCBTaW1w
bGVGb250RGF0YSogbWFya0ZvbnREYXRhID0gbWFya0dseXBoRGF0YS5mb250RGF0YTsKKyAgICBj
b25zdCBGb250KiBtYXJrRm9udERhdGEgPSBtYXJrR2x5cGhEYXRhLmZvbnQ7CiAgICAgQVNTRVJU
KG1hcmtGb250RGF0YSk7CiAgICAgaWYgKCFtYXJrRm9udERhdGEpCiAgICAgICAgIHJldHVybiAw
OwpAQCAtMTI3Myw3ICsxMjczLDcgQEAgdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBoQnVmZmVy
KEdyYXBoaQogI2VuZGlmCiAKICAgICAvLyBEcmF3IGVhY2ggY29udGlndW91cyBydW4gb2YgZ2x5
cGhzIHRoYXQgdXNlIHRoZSBzYW1lIGZvbnQgZGF0YS4KLSAgICBjb25zdCBTaW1wbGVGb250RGF0
YSogZm9udERhdGEgPSBnbHlwaEJ1ZmZlci5mb250RGF0YUF0KDApOworICAgIGNvbnN0IEZvbnQq
IGZvbnREYXRhID0gZ2x5cGhCdWZmZXIuZm9udEF0KDApOwogICAgIEZsb2F0U2l6ZSBvZmZzZXQg
PSBnbHlwaEJ1ZmZlci5vZmZzZXRBdCgwKTsKICAgICBGbG9hdFBvaW50IHN0YXJ0UG9pbnQocG9p
bnQueCgpLCBwb2ludC55KCkgLSBnbHlwaEJ1ZmZlci5pbml0aWFsQWR2YW5jZSgpLmhlaWdodCgp
KTsKICAgICBmbG9hdCBuZXh0WCA9IHN0YXJ0UG9pbnQueCgpICsgZ2x5cGhCdWZmZXIuYWR2YW5j
ZUF0KDApLndpZHRoKCk7CkBAIC0xMjg0LDcgKzEyODQsNyBAQCB2b2lkIEZvbnRDYXNjYWRlOjpk
cmF3R2x5cGhCdWZmZXIoR3JhcGhpCiAgICAgVGV4dFJ1bjo6UmVuZGVyaW5nQ29udGV4dCogcmVu
ZGVyaW5nQ29udGV4dCA9IHJ1bi5yZW5kZXJpbmdDb250ZXh0KCk7CiAjZW5kaWYKICAgICB3aGls
ZSAobmV4dEdseXBoIDwgZ2x5cGhCdWZmZXIuc2l6ZSgpKSB7Ci0gICAgICAgIGNvbnN0IFNpbXBs
ZUZvbnREYXRhKiBuZXh0Rm9udERhdGEgPSBnbHlwaEJ1ZmZlci5mb250RGF0YUF0KG5leHRHbHlw
aCk7CisgICAgICAgIGNvbnN0IEZvbnQqIG5leHRGb250RGF0YSA9IGdseXBoQnVmZmVyLmZvbnRB
dChuZXh0R2x5cGgpOwogICAgICAgICBGbG9hdFNpemUgbmV4dE9mZnNldCA9IGdseXBoQnVmZmVy
Lm9mZnNldEF0KG5leHRHbHlwaCk7CiAKICAgICAgICAgaWYgKG5leHRGb250RGF0YSAhPSBmb250
RGF0YSB8fCBuZXh0T2Zmc2V0ICE9IG9mZnNldCkgewpAQCAtMTMxNyw3ICsxMzE3LDcgQEAgdm9p
ZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBoQnVmZmVyKEdyYXBoaQogICAgIH0KIH0KIAotaW5saW5l
IHN0YXRpYyBmbG9hdCBvZmZzZXRUb01pZGRsZU9mR2x5cGgoY29uc3QgU2ltcGxlRm9udERhdGEq
IGZvbnREYXRhLCBHbHlwaCBnbHlwaCkKK2lubGluZSBzdGF0aWMgZmxvYXQgb2Zmc2V0VG9NaWRk
bGVPZkdseXBoKGNvbnN0IEZvbnQqIGZvbnREYXRhLCBHbHlwaCBnbHlwaCkKIHsKICAgICBpZiAo
Zm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbCkgewog
ICAgICAgICBGbG9hdFJlY3QgYm91bmRzID0gZm9udERhdGEtPmJvdW5kc0ZvckdseXBoKGdseXBo
KTsKQEAgLTEzMjksNyArMTMyOSw3IEBAIGlubGluZSBzdGF0aWMgZmxvYXQgb2Zmc2V0VG9NaWRk
bGVPZkdseXAKIAogaW5saW5lIHN0YXRpYyBmbG9hdCBvZmZzZXRUb01pZGRsZU9mR2x5cGhBdElu
ZGV4KGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgc2l6ZV90IGkpCiB7Ci0gICAgcmV0
dXJuIG9mZnNldFRvTWlkZGxlT2ZHbHlwaChnbHlwaEJ1ZmZlci5mb250RGF0YUF0KGkpLCBnbHlw
aEJ1ZmZlci5nbHlwaEF0KGkpKTsKKyAgICByZXR1cm4gb2Zmc2V0VG9NaWRkbGVPZkdseXBoKGds
eXBoQnVmZmVyLmZvbnRBdChpKSwgZ2x5cGhCdWZmZXIuZ2x5cGhBdChpKSk7CiB9CiAKIHZvaWQg
Rm9udENhc2NhZGU6OmRyYXdFbXBoYXNpc01hcmtzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
Y29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGNvbnN0
IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0CkBAIC0x
MzM4LDcgKzEzMzgsNyBAQCB2b2lkIEZvbnRDYXNjYWRlOjpkcmF3RW1waGFzaXNNYXJrcyhHcmFw
CiAgICAgaWYgKCFnZXRFbXBoYXNpc01hcmtHbHlwaERhdGEobWFyaywgbWFya0dseXBoRGF0YSkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBtYXJrRm9udERh
dGEgPSBtYXJrR2x5cGhEYXRhLmZvbnREYXRhOworICAgIGNvbnN0IEZvbnQqIG1hcmtGb250RGF0
YSA9IG1hcmtHbHlwaERhdGEuZm9udDsKICAgICBBU1NFUlQobWFya0ZvbnREYXRhKTsKICAgICBp
ZiAoIW1hcmtGb250RGF0YSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTM2MSw3ICsxMzYxLDcgQEAg
dm9pZCBGb250Q2FzY2FkZTo6ZHJhd0VtcGhhc2lzTWFya3MoR3JhcAogICAgIGRyYXdHbHlwaEJ1
ZmZlcihjb250ZXh0LCBydW4sIG1hcmtCdWZmZXIsIHN0YXJ0UG9pbnQpOwogfQogCi1mbG9hdCBG
b250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBI
YXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZs
b3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0CitmbG9hdCBGb250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZv
clNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFs
bGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKIHsKICAgICBX
aWR0aEl0ZXJhdG9yIGl0KHRoaXMsIHJ1biwgZmFsbGJhY2tGb250cywgZ2x5cGhPdmVyZmxvdyk7
CiAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgJKHJldmlzaW9uIDE3ODg1NykKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDEwICsyNiwxMCBAQAogI2RlZmluZSBGb250Q2FzY2FkZV9oCiAKICNpbmNsdWRl
ICJEYXNoQXJyYXkuaCIKKyNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9udERlc2NyaXB0
aW9uLmgiCiAjaW5jbHVkZSAiRm9udEdseXBocy5oIgogI2luY2x1ZGUgIlBhdGguaCIKLSNpbmNs
dWRlICJTaW1wbGVGb250RGF0YS5oIgogI2luY2x1ZGUgIlRleHREaXJlY3Rpb24uaCIKICNpbmNs
dWRlICJUeXBlc2V0dGluZ0ZlYXR1cmVzLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAg
LTEzNCwxNyArMTM0LDE3IEBAIHB1YmxpYzoKIAogICAgIGVudW0gQ3VzdG9tRm9udE5vdFJlYWR5
QWN0aW9uIHsgRG9Ob3RQYWludElmRm9udE5vdFJlYWR5LCBVc2VGYWxsYmFja0lmRm9udE5vdFJl
YWR5IH07CiAgICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQgZHJhd1RleHQoR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGludCB0
byA9IC0xLCBDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPSBEb05vdFBhaW50SWZGb250Tm90UmVh
ZHkpIGNvbnN0OwotICAgIHZvaWQgZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBT
aW1wbGVGb250RGF0YSosIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCBudW1HbHlw
aHMsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKKyAgICB2b2lkIGRyYXdHbHlwaHMoR3JhcGhp
Y3NDb250ZXh0KiwgY29uc3QgRm9udCosIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGlu
dCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKICAgICB2b2lkIGRyYXdFbXBo
YXNpc01hcmtzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9taWNT
dHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0x
KSBjb25zdDsKIAogICAgIERhc2hBcnJheSBkYXNoZXNGb3JJbnRlcnNlY3Rpb25zV2l0aFJlY3Qo
Y29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIGNvbnN0IEZsb2F0
UmVjdCYgbGluZUV4dGVudHMpIGNvbnN0OwogCi0gICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQgd2lk
dGgoY29uc3QgVGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJh
Y2tGb250cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBP
UlQgZmxvYXQgd2lkdGgoY29uc3QgVGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxs
YmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsKICAgICBmbG9hdCB3aWR0
aChjb25zdCBUZXh0UnVuJiwgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcmIGdseXBoTmFtZSkg
Y29uc3Q7CiAKICAgICBQYXNzT3duUHRyPFRleHRMYXlvdXQ+IGNyZWF0ZUxheW91dChSZW5kZXJU
ZXh0KiwgZmxvYXQgeFBvcywgYm9vbCBjb2xsYXBzZVdoaXRlU3BhY2UpIGNvbnN0OwogICAgIHN0
YXRpYyB2b2lkIGRlbGV0ZUxheW91dChUZXh0TGF5b3V0Kik7Ci0gICAgc3RhdGljIGZsb2F0IHdp
ZHRoKFRleHRMYXlvdXQmLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIEhhc2hTZXQ8Y29u
c3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDApOworICAgIHN0YXRpYyBmbG9h
dCB3aWR0aChUZXh0TGF5b3V0JiwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBIYXNoU2V0
PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cyA9IDApOwogCiAgICAgaW50IG9mZnNldEZvclBv
c2l0aW9uKGNvbnN0IFRleHRSdW4mLCBmbG9hdCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlh
bEdseXBocykgY29uc3Q7CiAgICAgdm9pZCBhZGp1c3RTZWxlY3Rpb25SZWN0Rm9yVGV4dChjb25z
dCBUZXh0UnVuJiwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgaW50IGZyb20gPSAwLCBpbnQg
dG8gPSAtMSkgY29uc3Q7CkBAIC0xNzIsMTAgKzE3MiwxMCBAQCBwdWJsaWM6CiAKICAgICBib29s
IGlzUGxhdGZvcm1Gb250KCkgY29uc3QgeyByZXR1cm4gbV9nbHlwaHMtPmlzRm9yUGxhdGZvcm1G
b250KCk7IH0KIAotICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBmb250TWV0cmljcygpIGNvbnN0IHsg
cmV0dXJuIHByaW1hcnlGb250RGF0YSgpLmZvbnRNZXRyaWNzKCk7IH0KLSAgICBmbG9hdCBzcGFj
ZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gcHJpbWFyeUZvbnREYXRhKCkuc3BhY2VXaWR0aCgpICsg
bV9sZXR0ZXJTcGFjaW5nOyB9Ci0gICAgZmxvYXQgdGFiV2lkdGgoY29uc3QgU2ltcGxlRm9udERh
dGEmLCB1bnNpZ25lZCB0YWJTaXplLCBmbG9hdCBwb3NpdGlvbikgY29uc3Q7Ci0gICAgZmxvYXQg
dGFiV2lkdGgodW5zaWduZWQgdGFiU2l6ZSwgZmxvYXQgcG9zaXRpb24pIGNvbnN0IHsgcmV0dXJu
IHRhYldpZHRoKHByaW1hcnlGb250RGF0YSgpLCB0YWJTaXplLCBwb3NpdGlvbik7IH0KKyAgICBj
b25zdCBGb250TWV0cmljcyYgZm9udE1ldHJpY3MoKSBjb25zdCB7IHJldHVybiBwcmltYXJ5Rm9u
dCgpLmZvbnRNZXRyaWNzKCk7IH0KKyAgICBmbG9hdCBzcGFjZVdpZHRoKCkgY29uc3QgeyByZXR1
cm4gcHJpbWFyeUZvbnQoKS5zcGFjZVdpZHRoKCkgKyBtX2xldHRlclNwYWNpbmc7IH0KKyAgICBm
bG9hdCB0YWJXaWR0aChjb25zdCBGb250JiwgdW5zaWduZWQgdGFiU2l6ZSwgZmxvYXQgcG9zaXRp
b24pIGNvbnN0OworICAgIGZsb2F0IHRhYldpZHRoKHVuc2lnbmVkIHRhYlNpemUsIGZsb2F0IHBv
c2l0aW9uKSBjb25zdCB7IHJldHVybiB0YWJXaWR0aChwcmltYXJ5Rm9udCgpLCB0YWJTaXplLCBw
b3NpdGlvbik7IH0KICAgICBib29sIGhhc1ZhbGlkQXZlcmFnZUNoYXJXaWR0aCgpIGNvbnN0Owog
ICAgIGJvb2wgZmFzdEF2ZXJhZ2VDaGFyV2lkdGhJZkF2YWlsYWJsZShmbG9hdCAmd2lkdGgpIGNv
bnN0OyAvLyByZXR1cm5zIHRydWUgb24gc3VjY2VzcwogCkBAIC0xODMsMTIgKzE4MywxMiBAQCBw
dWJsaWM6CiAgICAgaW50IGVtcGhhc2lzTWFya0Rlc2NlbnQoY29uc3QgQXRvbWljU3RyaW5nJikg
Y29uc3Q7CiAgICAgaW50IGVtcGhhc2lzTWFya0hlaWdodChjb25zdCBBdG9taWNTdHJpbmcmKSBj
b25zdDsKIAotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhJiBwcmltYXJ5Rm9udERhdGEoKSBjb25z
dDsKKyAgICBjb25zdCBGb250JiBwcmltYXJ5Rm9udCgpIGNvbnN0OwogICAgIGNvbnN0IEZvbnRS
YW5nZXMmIGZhbGxiYWNrUmFuZ2VzQXQodW5zaWduZWQpIGNvbnN0OwotICAgIEdseXBoRGF0YSBn
bHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiwgYm9vbCBtaXJyb3IsIEZvbnREYXRhVmFyaWFu
dCA9IEF1dG9WYXJpYW50KSBjb25zdDsKKyAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yQ2hhcmFj
dGVyKFVDaGFyMzIsIGJvb2wgbWlycm9yLCBGb250VmFyaWFudCA9IEF1dG9WYXJpYW50KSBjb25z
dDsKICAgICAKICNpZiBQTEFURk9STShDT0NPQSkKLSAgICBjb25zdCBTaW1wbGVGb250RGF0YSog
Zm9udERhdGFGb3JDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBVQ2hhciosIHNpemVf
dCBsZW5ndGgsIEZvbnREYXRhVmFyaWFudCkgY29uc3Q7CisgICAgY29uc3QgRm9udCogZm9udEZv
ckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVDaGFyKiwgc2l6ZV90IGxlbmd0aCwg
Rm9udFZhcmlhbnQpIGNvbnN0OwogI2VuZGlmCiAKICAgICBzdGF0aWMgYm9vbCBpc0NKS0lkZW9n
cmFwaChVQ2hhcjMyKTsKQEAgLTIwNyw3ICsyMDcsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIENv
ZGVQYXRoIGNoYXJhY3RlclJhbmdlQ29kZVBhdGgoY29uc3QgTENoYXIqLCB1bnNpZ25lZCkgeyBy
ZXR1cm4gU2ltcGxlOyB9CiAgICAgc3RhdGljIENvZGVQYXRoIGNoYXJhY3RlclJhbmdlQ29kZVBh
dGgoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW4pOwogCi0gICAgYm9vbCBwcmltYXJ5Rm9udERh
dGFJc1N5c3RlbUZvbnQoKSBjb25zdDsKKyAgICBib29sIHByaW1hcnlGb250SXNTeXN0ZW1Gb250
KCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgZW51bSBGb3JUZXh0RW1waGFzaXNPck5vdCB7IE5v
dEZvclRleHRFbXBoYXNpcywgRm9yVGV4dEVtcGhhc2lzIH07CkBAIC0yMTgsNyArMjE4LDcgQEAg
cHJpdmF0ZToKICAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzRm9yU2ltcGxlVGV4dChHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25z
dCBGbG9hdFBvaW50JiwgaW50IGZyb20sIGludCB0bykgY29uc3Q7CiAgICAgdm9pZCBkcmF3R2x5
cGhCdWZmZXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEdseXBoQnVm
ZmVyJiwgRmxvYXRQb2ludCYpIGNvbnN0OwogICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3MoR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEdseXBoQnVmZmVyJiwgY29uc3Qg
QXRvbWljU3RyaW5nJiwgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OwotICAgIGZsb2F0IGZsb2F0
V2lkdGhGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZv
bnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93KiA9IDApIGNvbnN0Owor
ICAgIGZsb2F0IGZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mLCBIYXNoU2V0
PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29u
c3Q7CiAgICAgaW50IG9mZnNldEZvclBvc2l0aW9uRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVu
JiwgZmxvYXQgcG9zaXRpb24sIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0OwogICAg
IHZvaWQgYWRqdXN0U2VsZWN0aW9uUmVjdEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYsIExh
eW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0OwogCkBAIC0y
MzEsNyArMjMxLDcgQEAgcHJpdmF0ZToKICAgICBmbG9hdCBnZXRHbHlwaHNBbmRBZHZhbmNlc0Zv
ckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBpbnQgZnJvbSwgaW50IHRvLCBHbHlwaEJ1ZmZl
ciYsIEZvclRleHRFbXBoYXNpc09yTm90ID0gTm90Rm9yVGV4dEVtcGhhc2lzKSBjb25zdDsKICAg
ICBmbG9hdCBkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYs
IGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdDsKICAgICB2b2lkIGRy
YXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4
dFJ1biYsIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIGludCBm
cm9tLCBpbnQgdG8pIGNvbnN0OwotICAgIGZsb2F0IGZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChj
b25zdCBUZXh0UnVuJiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0Zv
bnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsKKyAgICBmbG9hdCBmbG9hdFdpZHRo
Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxs
YmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsKICAgICBpbnQgb2Zmc2V0
Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwgZmxvYXQgcG9zaXRpb24s
IGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0OwogICAgIHZvaWQgYWRqdXN0U2VsZWN0
aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBMYXlvdXRSZWN0JiBzZWxlY3Rp
b25SZWN0LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdDsKIApAQCAtMzUyLDEwICszNTIsMTAgQEAg
aW5saW5lIEZvbnRDYXNjYWRlOjp+Rm9udENhc2NhZGUoKQogewogfQogCi1pbmxpbmUgY29uc3Qg
U2ltcGxlRm9udERhdGEmIEZvbnRDYXNjYWRlOjpwcmltYXJ5Rm9udERhdGEoKSBjb25zdAoraW5s
aW5lIGNvbnN0IEZvbnQmIEZvbnRDYXNjYWRlOjpwcmltYXJ5Rm9udCgpIGNvbnN0CiB7CiAgICAg
QVNTRVJUKG1fZ2x5cGhzKTsKLSAgICByZXR1cm4gbV9nbHlwaHMtPnByaW1hcnlTaW1wbGVGb250
RGF0YShtX2ZvbnREZXNjcmlwdGlvbik7CisgICAgcmV0dXJuIG1fZ2x5cGhzLT5wcmltYXJ5Rm9u
dChtX2ZvbnREZXNjcmlwdGlvbik7CiB9CiAKIGlubGluZSBjb25zdCBGb250UmFuZ2VzJiBGb250
Q2FzY2FkZTo6ZmFsbGJhY2tSYW5nZXNBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QKQEAgLTM3NSwx
MyArMzc1LDEzIEBAIGlubGluZSBGb250U2VsZWN0b3IqIEZvbnRDYXNjYWRlOjpmb250U2UKICAg
ICByZXR1cm4gbV9nbHlwaHMgPyBtX2dseXBocy0+Zm9udFNlbGVjdG9yKCkgOiAwOwogfQogCi1p
bmxpbmUgZmxvYXQgRm9udENhc2NhZGU6OnRhYldpZHRoKGNvbnN0IFNpbXBsZUZvbnREYXRhJiBm
b250RGF0YSwgdW5zaWduZWQgdGFiU2l6ZSwgZmxvYXQgcG9zaXRpb24pIGNvbnN0CitpbmxpbmUg
ZmxvYXQgRm9udENhc2NhZGU6OnRhYldpZHRoKGNvbnN0IEZvbnQmIGZvbnQsIHVuc2lnbmVkIHRh
YlNpemUsIGZsb2F0IHBvc2l0aW9uKSBjb25zdAogewogICAgIGlmICghdGFiU2l6ZSkKICAgICAg
ICAgcmV0dXJuIGxldHRlclNwYWNpbmcoKTsKLSAgICBmbG9hdCB0YWJXaWR0aCA9IHRhYlNpemUg
KiBmb250RGF0YS5zcGFjZVdpZHRoKCkgKyBsZXR0ZXJTcGFjaW5nKCk7CisgICAgZmxvYXQgdGFi
V2lkdGggPSB0YWJTaXplICogZm9udC5zcGFjZVdpZHRoKCkgKyBsZXR0ZXJTcGFjaW5nKCk7CiAg
ICAgZmxvYXQgdGFiRGVsdGFXaWR0aCA9IHRhYldpZHRoIC0gZm1vZGYocG9zaXRpb24sIHRhYldp
ZHRoKTsKLSAgICByZXR1cm4gKHRhYkRlbHRhV2lkdGggPCBmb250RGF0YS5zcGFjZVdpZHRoKCkg
LyAyKSA/IHRhYldpZHRoIDogdGFiRGVsdGFXaWR0aDsKKyAgICByZXR1cm4gKHRhYkRlbHRhV2lk
dGggPCBmb250LnNwYWNlV2lkdGgoKSAvIDIpID8gdGFiV2lkdGggOiB0YWJEZWx0YVdpZHRoOwog
fQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250R2x5cGhz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
R2x5cGhzLmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udEdseXBocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiAKIEZvbnRHbHlwaHM6OkZvbnRHbHlwaHMoUGFzc1JlZlB0
cjxGb250U2VsZWN0b3I+IGZvbnRTZWxlY3RvcikKLSAgICA6IG1fY2FjaGVkUHJpbWFyeVNpbXBs
ZUZvbnREYXRhKDApCisgICAgOiBtX2NhY2hlZFByaW1hcnlGb250KDApCiAgICAgLCBtX2ZvbnRT
ZWxlY3Rvcihmb250U2VsZWN0b3IpCiAgICAgLCBtX2ZvbnRTZWxlY3RvclZlcnNpb24obV9mb250
U2VsZWN0b3IgPyBtX2ZvbnRTZWxlY3Rvci0+dmVyc2lvbigpIDogMCkKICAgICAsIG1fZ2VuZXJh
dGlvbihmb250Q2FjaGUoKS5nZW5lcmF0aW9uKCkpCkBAIC00NSw3ICs0NSw3IEBAIEZvbnRHbHlw
aHM6OkZvbnRHbHlwaHMoUGFzc1JlZlB0cjxGb250U2UKIH0KIAogRm9udEdseXBoczo6Rm9udEds
eXBocyhjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEpCi0gICAgOiBtX2NhY2hl
ZFByaW1hcnlTaW1wbGVGb250RGF0YSgwKQorICAgIDogbV9jYWNoZWRQcmltYXJ5Rm9udCgwKQog
ICAgICwgbV9mb250U2VsZWN0b3IoMCkKICAgICAsIG1fZm9udFNlbGVjdG9yVmVyc2lvbigwKQog
ICAgICwgbV9nZW5lcmF0aW9uKGZvbnRDYWNoZSgpLmdlbmVyYXRpb24oKSkKQEAgLTYzLDcgKzYz
LDcgQEAgdm9pZCBGb250R2x5cGhzOjpkZXRlcm1pbmVQaXRjaChjb25zdCBGbwogICAgIGF1dG8m
IHByaW1hcnlSYW5nZXMgPSByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChkZXNjcmlwdGlvbiwgMCk7
CiAgICAgdW5zaWduZWQgbnVtUmFuZ2VzID0gcHJpbWFyeVJhbmdlcy5zaXplKCk7CiAgICAgaWYg
KG51bVJhbmdlcyA9PSAxKQotICAgICAgICBtX3BpdGNoID0gcHJpbWFyeVJhbmdlcy5yYW5nZUF0
KDApLmZvbnREYXRhKCkucGl0Y2goKTsKKyAgICAgICAgbV9waXRjaCA9IHByaW1hcnlSYW5nZXMu
cmFuZ2VBdCgwKS5mb250KCkucGl0Y2goKTsKICAgICBlbHNlCiAgICAgICAgIG1fcGl0Y2ggPSBW
YXJpYWJsZVBpdGNoOwogfQpAQCAtOTYsNyArOTYsNyBAQCBzdGF0aWMgRm9udFJhbmdlcyByZWFs
aXplTmV4dEZhbGxiYWNrKGNvCiAgICAgLy8gV2UgZGlkbid0IGZpbmQgYSBmb250LiBUcnkgdG8g
ZmluZCBhIHNpbWlsYXIgZm9udCB1c2luZyBvdXIgb3duIHNwZWNpZmljIGtub3dsZWRnZSBhYm91
dCBvdXIgcGxhdGZvcm0uCiAgICAgLy8gRm9yIGV4YW1wbGUgb24gT1MgWCwgd2Uga25vdyB0byBt
YXAgYW55IGZhbWlsaWVzIGNvbnRhaW5pbmcgdGhlIHdvcmRzIEFyYWJpYywgUGFzaHRvLCBvciBV
cmR1IHRvIHRoZQogICAgIC8vIEdlZXphIFBybyBmb250LgotICAgIHJldHVybiBGb250UmFuZ2Vz
KGZvbnRDYWNoZSgpLnNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGRlc2NyaXB0aW9uKSk7CisgICAg
cmV0dXJuIEZvbnRSYW5nZXMoZm9udENhY2hlKCkuc2ltaWxhckZvbnQoZGVzY3JpcHRpb24pKTsK
IH0KIAogY29uc3QgRm9udFJhbmdlcyYgRm9udEdseXBoczo6cmVhbGl6ZUZhbGxiYWNrUmFuZ2Vz
QXQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgdW5zaWduZWQgaW5kZXgpCkBA
IC0xMjYsMTAgKzEyNiwxMCBAQCBjb25zdCBGb250UmFuZ2VzJiBGb250R2x5cGhzOjpyZWFsaXpl
RmFsCiAgICAgICAgIEFTU0VSVChtX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXggPj0gZGVzY3Jp
cHRpb24uZmFtaWx5Q291bnQoKSk7CiAKICAgICAgICAgdW5zaWduZWQgZm9udFNlbGVjdG9yRmFs
bGJhY2tJbmRleCA9IG1fbGFzdFJlYWxpemVkRmFsbGJhY2tJbmRleCAtIGRlc2NyaXB0aW9uLmZh
bWlseUNvdW50KCk7Ci0gICAgICAgIGlmIChmb250U2VsZWN0b3JGYWxsYmFja0luZGV4ID09IG1f
Zm9udFNlbGVjdG9yLT5mYWxsYmFja0ZvbnREYXRhQ291bnQoKSkKKyAgICAgICAgaWYgKGZvbnRT
ZWxlY3RvckZhbGxiYWNrSW5kZXggPT0gbV9mb250U2VsZWN0b3ItPmZhbGxiYWNrRm9udENvdW50
KCkpCiAgICAgICAgICAgICByZXR1cm4gZm9udFJhbmdlczsKICAgICAgICAgKyttX2xhc3RSZWFs
aXplZEZhbGxiYWNrSW5kZXg7Ci0gICAgICAgIGZvbnRSYW5nZXMgPSBGb250UmFuZ2VzKG1fZm9u
dFNlbGVjdG9yLT5mYWxsYmFja0ZvbnREYXRhQXQoZGVzY3JpcHRpb24sIGZvbnRTZWxlY3RvckZh
bGxiYWNrSW5kZXgpKTsKKyAgICAgICAgZm9udFJhbmdlcyA9IEZvbnRSYW5nZXMobV9mb250U2Vs
ZWN0b3ItPmZhbGxiYWNrRm9udEF0KGRlc2NyaXB0aW9uLCBmb250U2VsZWN0b3JGYWxsYmFja0lu
ZGV4KSk7CiAgICAgfQogCiAgICAgcmV0dXJuIGZvbnRSYW5nZXM7CkBAIC0yMjEsOCArMjIxLDgg
QEAgc3RhdGljIGJvb2wgc2hvdWxkSWdub3JlUm90YXRpb24oVUNoYXIzMgogI2lmIFBMQVRGT1JN
KENPQ09BKQogc3RhdGljIEdseXBoRGF0YSBnbHlwaERhdGFGb3JDSktDaGFyYWN0ZXJXaXRob3V0
U3ludGhldGljSXRhbGljKFVDaGFyMzIgY2hhcmFjdGVyLCBHbHlwaERhdGEmIGRhdGEpCiB7Ci0g
ICAgR2x5cGhEYXRhIG5vbkl0YWxpY0RhdGEgPSBkYXRhLmZvbnREYXRhLT5ub25TeW50aGV0aWNJ
dGFsaWNGb250RGF0YSgpLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyKTsKLSAgICBp
ZiAobm9uSXRhbGljRGF0YS5mb250RGF0YSkKKyAgICBHbHlwaERhdGEgbm9uSXRhbGljRGF0YSA9
IGRhdGEuZm9udC0+bm9uU3ludGhldGljSXRhbGljRm9udCgpLT5nbHlwaERhdGFGb3JDaGFyYWN0
ZXIoY2hhcmFjdGVyKTsKKyAgICBpZiAobm9uSXRhbGljRGF0YS5mb250KQogICAgICAgICByZXR1
cm4gbm9uSXRhbGljRGF0YTsKICAgICByZXR1cm4gZGF0YTsKIH0KQEAgLTIzMSw3NiArMjMxLDc2
IEBAIHN0YXRpYyBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yQ0pLQ2hhcmFjdGUKIHN0YXRpYyBHbHlw
aERhdGEgZ2x5cGhEYXRhRm9yTm9uQ0pLQ2hhcmFjdGVyV2l0aEdseXBoT3JpZW50YXRpb24oVUNo
YXIzMiBjaGFyYWN0ZXIsIE5vbkNKS0dseXBoT3JpZW50YXRpb24gb3JpZW50YXRpb24sIGNvbnN0
IEdseXBoRGF0YSYgZGF0YSkKIHsKICAgICBpZiAob3JpZW50YXRpb24gPT0gTm9uQ0pLR2x5cGhP
cmllbnRhdGlvblVwcmlnaHQgfHwgc2hvdWxkSWdub3JlUm90YXRpb24oY2hhcmFjdGVyKSkgewot
ICAgICAgICBHbHlwaERhdGEgdXByaWdodERhdGEgPSBkYXRhLmZvbnREYXRhLT51cHJpZ2h0T3Jp
ZW50YXRpb25Gb250RGF0YSgpLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyKTsKKyAg
ICAgICAgR2x5cGhEYXRhIHVwcmlnaHREYXRhID0gZGF0YS5mb250LT51cHJpZ2h0T3JpZW50YXRp
b25Gb250KCktPmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIpOwogICAgICAgICAvLyBJ
ZiB0aGUgZ2x5cGhzIGFyZSB0aGUgc2FtZSwgdGhlbiB3ZSBrbm93IHdlIGNhbiBqdXN0IHVzZSB0
aGUgaG9yaXpvbnRhbCBnbHlwaCByb3RhdGVkIHZlcnRpY2FsbHkgdG8gYmUgdXByaWdodC4KICAg
ICAgICAgaWYgKGRhdGEuZ2x5cGggPT0gdXByaWdodERhdGEuZ2x5cGgpCiAgICAgICAgICAgICBy
ZXR1cm4gZGF0YTsKICAgICAgICAgLy8gVGhlIGdseXBocyBhcmUgZGlzdGluY3QsIG1lYW5pbmcg
dGhhdCB0aGUgZm9udCBoYXMgYSB2ZXJ0aWNhbC1yaWdodCBnbHlwaCBiYWtlZCBpbnRvIGl0LiBX
ZSBjYW4ndCB1c2UgdGhhdAogICAgICAgICAvLyBnbHlwaCwgc28gd2UgZmFsbCBiYWNrIHRvIHRo
ZSB1cHJpZ2h0IGRhdGEgYW5kIHVzZSB0aGUgaG9yaXpvbnRhbCBnbHlwaC4KLSAgICAgICAgaWYg
KHVwcmlnaHREYXRhLmZvbnREYXRhKQorICAgICAgICBpZiAodXByaWdodERhdGEuZm9udCkKICAg
ICAgICAgICAgIHJldHVybiB1cHJpZ2h0RGF0YTsKICAgICB9IGVsc2UgaWYgKG9yaWVudGF0aW9u
ID09IE5vbkNKS0dseXBoT3JpZW50YXRpb25WZXJ0aWNhbFJpZ2h0KSB7Ci0gICAgICAgIEdseXBo
RGF0YSB2ZXJ0aWNhbFJpZ2h0RGF0YSA9IGRhdGEuZm9udERhdGEtPnZlcnRpY2FsUmlnaHRPcmll
bnRhdGlvbkZvbnREYXRhKCktPmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIpOworICAg
ICAgICBHbHlwaERhdGEgdmVydGljYWxSaWdodERhdGEgPSBkYXRhLmZvbnQtPnZlcnRpY2FsUmln
aHRPcmllbnRhdGlvbkZvbnQoKS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3Rlcik7CiAg
ICAgICAgIC8vIElmIHRoZSBnbHlwaHMgYXJlIGRpc3RpbmN0LCB3ZSB3aWxsIG1ha2UgdGhlIGFz
c3VtcHRpb24gdGhhdCB0aGUgZm9udCBoYXMgYSB2ZXJ0aWNhbC1yaWdodCBnbHlwaCBiYWtlZAog
ICAgICAgICAvLyBpbnRvIGl0LgogICAgICAgICBpZiAoZGF0YS5nbHlwaCAhPSB2ZXJ0aWNhbFJp
Z2h0RGF0YS5nbHlwaCkKICAgICAgICAgICAgIHJldHVybiBkYXRhOwogICAgICAgICAvLyBUaGUg
Z2x5cGhzIGFyZSBpZGVudGljYWwsIG1lYW5pbmcgdGhhdCB3ZSBzaG91bGQganVzdCB1c2UgdGhl
IGhvcml6b250YWwgZ2x5cGguCi0gICAgICAgIGlmICh2ZXJ0aWNhbFJpZ2h0RGF0YS5mb250RGF0
YSkKKyAgICAgICAgaWYgKHZlcnRpY2FsUmlnaHREYXRhLmZvbnQpCiAgICAgICAgICAgICByZXR1
cm4gdmVydGljYWxSaWdodERhdGE7CiAgICAgfQogICAgIHJldHVybiBkYXRhOwogfQogCi1HbHlw
aERhdGEgRm9udEdseXBoczo6Z2x5cGhEYXRhRm9yU3lzdGVtRmFsbGJhY2soVUNoYXIzMiBjLCBj
b25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250RGF0YVZhcmlhbnQgdmFyaWFu
dCkKK0dseXBoRGF0YSBGb250R2x5cGhzOjpnbHlwaERhdGFGb3JTeXN0ZW1GYWxsYmFjayhVQ2hh
cjMyIGMsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIEZvbnRWYXJpYW50IHZh
cmlhbnQpCiB7CiAgICAgLy8gU3lzdGVtIGZhbGxiYWNrIGlzIGNoYXJhY3Rlci1kZXBlbmRlbnQu
CiAgICAgYXV0byYgcHJpbWFyeVJhbmdlcyA9IHJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGRlc2Ny
aXB0aW9uLCAwKTsKLSAgICBhdXRvKiBvcmlnaW5hbEZvbnREYXRhID0gcHJpbWFyeVJhbmdlcy5m
b250RGF0YUZvckNoYXJhY3RlcihjKTsKLSAgICBpZiAoIW9yaWdpbmFsRm9udERhdGEpCi0gICAg
ICAgIG9yaWdpbmFsRm9udERhdGEgPSAmcHJpbWFyeVJhbmdlcy5mb250RGF0YUZvckZpcnN0UmFu
Z2UoKTsKKyAgICBhdXRvKiBvcmlnaW5hbEZvbnQgPSBwcmltYXJ5UmFuZ2VzLmZvbnRGb3JDaGFy
YWN0ZXIoYyk7CisgICAgaWYgKCFvcmlnaW5hbEZvbnQpCisgICAgICAgIG9yaWdpbmFsRm9udCA9
ICZwcmltYXJ5UmFuZ2VzLmZvbnRGb3JGaXJzdFJhbmdlKCk7CiAKLSAgICBSZWZQdHI8U2ltcGxl
Rm9udERhdGE+IHN5c3RlbUZhbGxiYWNrRm9udERhdGEgPSBvcmlnaW5hbEZvbnREYXRhLT5zeXN0
ZW1GYWxsYmFja0ZvbnREYXRhRm9yQ2hhcmFjdGVyKGMsIGRlc2NyaXB0aW9uLCBtX2lzRm9yUGxh
dGZvcm1Gb250KTsKLSAgICBpZiAoIXN5c3RlbUZhbGxiYWNrRm9udERhdGEpCisgICAgUmVmUHRy
PEZvbnQ+IHN5c3RlbUZhbGxiYWNrRm9udCA9IG9yaWdpbmFsRm9udC0+c3lzdGVtRmFsbGJhY2tG
b250Rm9yQ2hhcmFjdGVyKGMsIGRlc2NyaXB0aW9uLCBtX2lzRm9yUGxhdGZvcm1Gb250KTsKKyAg
ICBpZiAoIXN5c3RlbUZhbGxiYWNrRm9udCkKICAgICAgICAgcmV0dXJuIEdseXBoRGF0YSgpOwog
Ci0gICAgaWYgKHN5c3RlbUZhbGxiYWNrRm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0
aW9uKCkgPT0gVmVydGljYWwgJiYgIXN5c3RlbUZhbGxiYWNrRm9udERhdGEtPmhhc1ZlcnRpY2Fs
R2x5cGhzKCkgJiYgRm9udENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woYykpCisgICAg
aWYgKHN5c3RlbUZhbGxiYWNrRm9udC0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBW
ZXJ0aWNhbCAmJiAhc3lzdGVtRmFsbGJhY2tGb250LT5oYXNWZXJ0aWNhbEdseXBocygpICYmIEZv
bnRDYXNjYWRlOjppc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGMpKQogICAgICAgICB2YXJpYW50ID0g
QnJva2VuSWRlb2dyYXBoVmFyaWFudDsKIAogICAgIEdseXBoRGF0YSBmYWxsYmFja0dseXBoRGF0
YTsKICAgICBpZiAodmFyaWFudCA9PSBOb3JtYWxWYXJpYW50KQotICAgICAgICBmYWxsYmFja0ds
eXBoRGF0YSA9IHN5c3RlbUZhbGxiYWNrRm9udERhdGEtPmdseXBoRGF0YUZvckNoYXJhY3Rlcihj
KTsKKyAgICAgICAgZmFsbGJhY2tHbHlwaERhdGEgPSBzeXN0ZW1GYWxsYmFja0ZvbnQtPmdseXBo
RGF0YUZvckNoYXJhY3RlcihjKTsKICAgICBlbHNlCi0gICAgICAgIGZhbGxiYWNrR2x5cGhEYXRh
ID0gc3lzdGVtRmFsbGJhY2tGb250RGF0YS0+dmFyaWFudEZvbnREYXRhKGRlc2NyaXB0aW9uLCB2
YXJpYW50KS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMpOworICAgICAgICBmYWxsYmFja0dseXBo
RGF0YSA9IHN5c3RlbUZhbGxiYWNrRm9udC0+dmFyaWFudEZvbnQoZGVzY3JpcHRpb24sIHZhcmlh
bnQpLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYyk7CiAKLSAgICBpZiAodmFyaWFudCA9PSBOb3Jt
YWxWYXJpYW50ICYmIGZhbGxiYWNrR2x5cGhEYXRhLmZvbnREYXRhKSB7Ci0gICAgICAgIGlmICgh
Rm9udENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woYykgJiYgZmFsbGJhY2tHbHlwaERh
dGEuZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwgJiYg
IWZhbGxiYWNrR2x5cGhEYXRhLmZvbnREYXRhLT5pc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKCkp
CisgICAgaWYgKHZhcmlhbnQgPT0gTm9ybWFsVmFyaWFudCAmJiBmYWxsYmFja0dseXBoRGF0YS5m
b250KSB7CisgICAgICAgIGlmICghRm9udENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2wo
YykgJiYgZmFsbGJhY2tHbHlwaERhdGEuZm9udC0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24o
KSA9PSBWZXJ0aWNhbCAmJiAhZmFsbGJhY2tHbHlwaERhdGEuZm9udC0+aXNUZXh0T3JpZW50YXRp
b25GYWxsYmFjaygpKQogICAgICAgICAgICAgZmFsbGJhY2tHbHlwaERhdGEgPSBnbHlwaERhdGFG
b3JOb25DSktDaGFyYWN0ZXJXaXRoR2x5cGhPcmllbnRhdGlvbihjLCBkZXNjcmlwdGlvbi5ub25D
SktHbHlwaE9yaWVudGF0aW9uKCksIGZhbGxiYWNrR2x5cGhEYXRhKTsKICAgICB9CiAKICAgICAv
LyBLZWVwIHRoZSBzeXN0ZW0gZmFsbGJhY2sgZm9udHMgd2UgdXNlIGFsaXZlLgogICAgIGlmIChm
YWxsYmFja0dseXBoRGF0YS5nbHlwaCkKLSAgICAgICAgbV9zeXN0ZW1GYWxsYmFja0ZvbnREYXRh
U2V0LmFkZChzeXN0ZW1GYWxsYmFja0ZvbnREYXRhLnJlbGVhc2UoKSk7CisgICAgICAgIG1fc3lz
dGVtRmFsbGJhY2tGb250U2V0LmFkZChzeXN0ZW1GYWxsYmFja0ZvbnQucmVsZWFzZSgpKTsKIAog
ICAgIHJldHVybiBmYWxsYmFja0dseXBoRGF0YTsKIH0KIAotR2x5cGhEYXRhIEZvbnRHbHlwaHM6
OmdseXBoRGF0YUZvclZhcmlhbnQoVUNoYXIzMiBjLCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRl
c2NyaXB0aW9uLCBGb250RGF0YVZhcmlhbnQgdmFyaWFudCwgdW5zaWduZWQgZmFsbGJhY2tJbmRl
eCkKK0dseXBoRGF0YSBGb250R2x5cGhzOjpnbHlwaERhdGFGb3JWYXJpYW50KFVDaGFyMzIgYywg
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udFZhcmlhbnQgdmFyaWFudCwg
dW5zaWduZWQgZmFsbGJhY2tJbmRleCkKIHsKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICBh
dXRvJiBmb250UmFuZ2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIGZh
bGxiYWNrSW5kZXgrKyk7CiAgICAgICAgIGlmIChmb250UmFuZ2VzLmlzTnVsbCgpKQogICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGF1dG8qIGZvbnREYXRhID0gZm9udFJhbmdlcy5mb250RGF0
YUZvckNoYXJhY3RlcihjKTsKLSAgICAgICAgR2x5cGhEYXRhIGRhdGEgPSBmb250RGF0YSA/IGZv
bnREYXRhLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYykgOiBHbHlwaERhdGEoKTsKLSAgICAgICAg
aWYgKGRhdGEuZm9udERhdGEpIHsKLSAgICAgICAgICAgIC8vIFRoZSB2YXJpYW50Rm9udERhdGEg
ZnVuY3Rpb24gc2hvdWxkIG5vdCBub3JtYWxseSByZXR1cm4gMC4KKyAgICAgICAgYXV0byogZm9u
dCA9IGZvbnRSYW5nZXMuZm9udEZvckNoYXJhY3RlcihjKTsKKyAgICAgICAgR2x5cGhEYXRhIGRh
dGEgPSBmb250ID8gZm9udC0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMpIDogR2x5cGhEYXRhKCk7
CisgICAgICAgIGlmIChkYXRhLmZvbnQpIHsKKyAgICAgICAgICAgIC8vIFRoZSB2YXJpYW50Rm9u
dCBmdW5jdGlvbiBzaG91bGQgbm90IG5vcm1hbGx5IHJldHVybiAwLgogICAgICAgICAgICAgLy8g
QnV0IGlmIGl0IGRvZXMsIHdlIHdpbGwganVzdCByZW5kZXIgdGhlIGNhcGl0YWwgbGV0dGVyIGJp
Zy4KLSAgICAgICAgICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gdmFyaWFudEZvbnREYXRhID0g
ZGF0YS5mb250RGF0YS0+dmFyaWFudEZvbnREYXRhKGRlc2NyaXB0aW9uLCB2YXJpYW50KTsKLSAg
ICAgICAgICAgIGlmICghdmFyaWFudEZvbnREYXRhKQorICAgICAgICAgICAgUmVmUHRyPEZvbnQ+
IHZhcmlhbnRGb250ID0gZGF0YS5mb250LT52YXJpYW50Rm9udChkZXNjcmlwdGlvbiwgdmFyaWFu
dCk7CisgICAgICAgICAgICBpZiAoIXZhcmlhbnRGb250KQogICAgICAgICAgICAgICAgIHJldHVy
biBkYXRhOwogCi0gICAgICAgICAgICByZXR1cm4gdmFyaWFudEZvbnREYXRhLT5nbHlwaERhdGFG
b3JDaGFyYWN0ZXIoYyk7CisgICAgICAgICAgICByZXR1cm4gdmFyaWFudEZvbnQtPmdseXBoRGF0
YUZvckNoYXJhY3RlcihjKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzE1LDIzICszMTUsMjMg
QEAgR2x5cGhEYXRhIEZvbnRHbHlwaHM6OmdseXBoRGF0YUZvck5vcm1hbAogICAgICAgICBhdXRv
JiBmb250UmFuZ2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIGZhbGxi
YWNrSW5kZXgpOwogICAgICAgICBpZiAoZm9udFJhbmdlcy5pc051bGwoKSkKICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBhdXRvKiBzaW1wbGVGb250RGF0YSA9IGZvbnRSYW5nZXMuZm9udERh
dGFGb3JDaGFyYWN0ZXIoYyk7Ci0gICAgICAgIGF1dG8qIHBhZ2UgPSBzaW1wbGVGb250RGF0YSA/
IHNpbXBsZUZvbnREYXRhLT5nbHlwaFBhZ2UocGFnZU51bWJlcikgOiBudWxscHRyOworICAgICAg
ICBhdXRvKiBmb250ID0gZm9udFJhbmdlcy5mb250Rm9yQ2hhcmFjdGVyKGMpOworICAgICAgICBh
dXRvKiBwYWdlID0gZm9udCA/IGZvbnQtPmdseXBoUGFnZShwYWdlTnVtYmVyKSA6IG51bGxwdHI7
CiAgICAgICAgIGlmICghcGFnZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBHbHlw
aERhdGEgZGF0YSA9IHBhZ2UtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjKTsKLSAgICAgICAgaWYg
KGRhdGEuZm9udERhdGEpIHsKLSAgICAgICAgICAgIGlmIChkYXRhLmZvbnREYXRhLT5wbGF0Zm9y
bURhdGEoKS5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsICYmICFkYXRhLmZvbnREYXRhLT5pc1Rl
eHRPcmllbnRhdGlvbkZhbGxiYWNrKCkpIHsKKyAgICAgICAgaWYgKGRhdGEuZm9udCkgeworICAg
ICAgICAgICAgaWYgKGRhdGEuZm9udC0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBW
ZXJ0aWNhbCAmJiAhZGF0YS5mb250LT5pc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKCkpIHsKICAg
ICAgICAgICAgICAgICBpZiAoIUZvbnRDYXNjYWRlOjppc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGMp
KQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2x5cGhEYXRhRm9yTm9uQ0pLQ2hhcmFjdGVy
V2l0aEdseXBoT3JpZW50YXRpb24oYywgZGVzY3JpcHRpb24ubm9uQ0pLR2x5cGhPcmllbnRhdGlv
bigpLCBkYXRhKTsKIAotICAgICAgICAgICAgICAgIGlmICghZGF0YS5mb250RGF0YS0+aGFzVmVy
dGljYWxHbHlwaHMoKSkgeworICAgICAgICAgICAgICAgIGlmICghZGF0YS5mb250LT5oYXNWZXJ0
aWNhbEdseXBocygpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFVzZSB0aGUgYnJva2VuIGlk
ZW9ncmFwaCBmb250IGRhdGEuIFRoZSBicm9rZW4gaWRlb2dyYXBoIGZvbnQgd2lsbCB1c2UgdGhl
IGhvcml6b250YWwgd2lkdGggb2YgZ2x5cGhzCiAgICAgICAgICAgICAgICAgICAgIC8vIHRvIG1h
a2Ugc3VyZSB5b3UgZ2V0IGEgc3F1YXJlIChldmVuIGZvciBicm9rZW4gZ2x5cGhzIGxpa2Ugc3lt
Ym9scyB1c2VkIGZvciBwdW5jdHVhdGlvbikuCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBn
bHlwaERhdGFGb3JWYXJpYW50KGMsIGRlc2NyaXB0aW9uLCBCcm9rZW5JZGVvZ3JhcGhWYXJpYW50
LCBmYWxsYmFja0luZGV4KTsKICAgICAgICAgICAgICAgICB9CiAjaWYgUExBVEZPUk0oQ09DT0Ep
Ci0gICAgICAgICAgICAgICAgaWYgKGRhdGEuZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLnN5bnRo
ZXRpY09ibGlxdWUoKSkKKyAgICAgICAgICAgICAgICBpZiAoZGF0YS5mb250LT5wbGF0Zm9ybURh
dGEoKS5zeW50aGV0aWNPYmxpcXVlKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbHlw
aERhdGFGb3JDSktDaGFyYWN0ZXJXaXRob3V0U3ludGhldGljSXRhbGljKGMsIGRhdGEpOwogI2Vu
ZGlmCiAgICAgICAgICAgICB9CkBAIC0zNDUsMjcgKzM0NSwyNyBAQCBHbHlwaERhdGEgRm9udEds
eXBoczo6Z2x5cGhEYXRhRm9yTm9ybWFsCiAKIHN0YXRpYyBSZWZQdHI8R2x5cGhQYWdlPiBnbHlw
aFBhZ2VGcm9tRm9udFJhbmdlcyh1bnNpZ25lZCBwYWdlTnVtYmVyLCBjb25zdCBGb250UmFuZ2Vz
JiBmb250UmFuZ2VzKQogewotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBzaW1wbGVGb250RGF0
YSA9IG51bGxwdHI7CisgICAgY29uc3QgRm9udCogZm9udCA9IG51bGxwdHI7CiAgICAgVUNoYXIz
MiBwYWdlUmFuZ2VGcm9tID0gcGFnZU51bWJlciAqIEdseXBoUGFnZTo6c2l6ZTsKICAgICBVQ2hh
cjMyIHBhZ2VSYW5nZVRvID0gcGFnZVJhbmdlRnJvbSArIEdseXBoUGFnZTo6c2l6ZSAtIDE7CiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZvbnRSYW5nZXMuc2l6ZSgpOyArK2kpIHsKICAg
ICAgICAgYXV0byYgcmFuZ2UgPSBmb250UmFuZ2VzLnJhbmdlQXQoaSk7CiAgICAgICAgIGlmIChy
YW5nZS50bygpKSB7CiAgICAgICAgICAgICBpZiAocmFuZ2UuZnJvbSgpIDw9IHBhZ2VSYW5nZUZy
b20gJiYgcGFnZVJhbmdlVG8gPD0gcmFuZ2UudG8oKSkKLSAgICAgICAgICAgICAgICBzaW1wbGVG
b250RGF0YSA9ICZyYW5nZS5mb250RGF0YSgpOworICAgICAgICAgICAgICAgIGZvbnQgPSAmcmFu
Z2UuZm9udCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYg
KCFzaW1wbGVGb250RGF0YSkKKyAgICBpZiAoIWZvbnQpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogCi0gICAgaWYgKHNpbXBsZUZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigp
ID09IFZlcnRpY2FsKQorICAgIGlmIChmb250LT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigp
ID09IFZlcnRpY2FsKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBjb25z
dF9jYXN0PEdseXBoUGFnZSo+KHNpbXBsZUZvbnREYXRhLT5nbHlwaFBhZ2UocGFnZU51bWJlcikp
OworICAgIHJldHVybiBjb25zdF9jYXN0PEdseXBoUGFnZSo+KGZvbnQtPmdseXBoUGFnZShwYWdl
TnVtYmVyKSk7CiB9CiAKLUdseXBoRGF0YSBGb250R2x5cGhzOjpnbHlwaERhdGFGb3JDaGFyYWN0
ZXIoVUNoYXIzMiBjLCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250RGF0
YVZhcmlhbnQgdmFyaWFudCkKK0dseXBoRGF0YSBGb250R2x5cGhzOjpnbHlwaERhdGFGb3JDaGFy
YWN0ZXIoVUNoYXIzMiBjLCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250
VmFyaWFudCB2YXJpYW50KQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgQVNT
RVJUKHZhcmlhbnQgIT0gQXV0b1ZhcmlhbnQpOwpAQCAtMzgyLDE5ICszODIsMTkgQEAgR2x5cGhE
YXRhIEZvbnRHbHlwaHM6OmdseXBoRGF0YUZvckNoYXJhYwogICAgIEdseXBoRGF0YSBnbHlwaERh
dGEgPSBjYWNoZWRQYWdlID8gY2FjaGVkUGFnZS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMpIDog
R2x5cGhEYXRhKCk7CiAgICAgaWYgKCFnbHlwaERhdGEuZ2x5cGgpIHsKICAgICAgICAgaWYgKCFj
YWNoZWRQYWdlKQotICAgICAgICAgICAgY2FjaGVkUGFnZSA9IEdseXBoUGFnZTo6Y3JlYXRlRm9y
TWl4ZWRGb250RGF0YSgpOworICAgICAgICAgICAgY2FjaGVkUGFnZSA9IEdseXBoUGFnZTo6Y3Jl
YXRlRm9yTWl4ZWRGb250cygpOwogICAgICAgICBlbHNlIGlmIChjYWNoZWRQYWdlLT5pc0ltbXV0
YWJsZSgpKQotICAgICAgICAgICAgY2FjaGVkUGFnZSA9IEdseXBoUGFnZTo6Y3JlYXRlQ29weUZv
ck1peGVkRm9udERhdGEoKmNhY2hlZFBhZ2UpOworICAgICAgICAgICAgY2FjaGVkUGFnZSA9IEds
eXBoUGFnZTo6Y3JlYXRlQ29weUZvck1peGVkRm9udHMoKmNhY2hlZFBhZ2UpOwogCiAgICAgICAg
IGdseXBoRGF0YSA9IGdseXBoRGF0YUZvck5vcm1hbFZhcmlhbnQoYywgZGVzY3JpcHRpb24pOwot
ICAgICAgICBjYWNoZWRQYWdlLT5zZXRHbHlwaERhdGFGb3JDaGFyYWN0ZXIoYywgZ2x5cGhEYXRh
LmdseXBoLCBnbHlwaERhdGEuZm9udERhdGEpOworICAgICAgICBjYWNoZWRQYWdlLT5zZXRHbHlw
aERhdGFGb3JDaGFyYWN0ZXIoYywgZ2x5cGhEYXRhLmdseXBoLCBnbHlwaERhdGEuZm9udCk7CiAg
ICAgfQogICAgIHJldHVybiBnbHlwaERhdGE7CiB9CiAKIHZvaWQgRm9udEdseXBoczo6cHJ1bmVT
eXN0ZW1GYWxsYmFja3MoKQogewotICAgIGlmIChtX3N5c3RlbUZhbGxiYWNrRm9udERhdGFTZXQu
aXNFbXB0eSgpKQorICAgIGlmIChtX3N5c3RlbUZhbGxiYWNrRm9udFNldC5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybjsKICAgICAvLyBNdXRhYmxlIGdseXBoIHBhZ2VzIG1heSByZWZlcmVuY2Ug
ZmFsbGJhY2sgZm9udHMuCiAgICAgaWYgKG1fY2FjaGVkUGFnZVplcm8gJiYgIW1fY2FjaGVkUGFn
ZVplcm8tPmlzSW1tdXRhYmxlKCkpCkBAIC00MDIsNyArNDAyLDcgQEAgdm9pZCBGb250R2x5cGhz
OjpwcnVuZVN5c3RlbUZhbGxiYWNrcygpCiAgICAgbV9jYWNoZWRQYWdlcy5yZW1vdmVJZihbXShk
ZWNsdHlwZShtX2NhY2hlZFBhZ2VzKTo6S2V5VmFsdWVQYWlyVHlwZSYga2V5QW5kVmFsdWUpIHsK
ICAgICAgICAgcmV0dXJuICFrZXlBbmRWYWx1ZS52YWx1ZS0+aXNJbW11dGFibGUoKTsKICAgICB9
KTsKLSAgICBtX3N5c3RlbUZhbGxiYWNrRm9udERhdGFTZXQuY2xlYXIoKTsKKyAgICBtX3N5c3Rl
bUZhbGxiYWNrRm9udFNldC5jbGVhcigpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250R2x5cGhzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEdseXBocy5oCShyZXZpc2lvbiAxNzg4NTcpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250R2x5cGhzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIxLDEwICsyMSwxMCBAQAogI2lmbmRlZiBGb250R2x5cGhzX2gKICNkZWZpbmUgRm9u
dEdseXBoc19oCiAKKyNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9udFJhbmdlcy5oIgog
I2luY2x1ZGUgIkZvbnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkdseXBoUGFnZS5oIgotI2luY2x1
ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5jbHVkZSAiV2lkdGhDYWNoZS5oIgogI2luY2x1ZGUg
PHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KQEAgLTUxLDcgKzUx
LDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc0ZvclBsYXRmb3JtRm9udCgpIGNvbnN0IHsgcmV0
dXJuIG1faXNGb3JQbGF0Zm9ybUZvbnQ7IH0KIAotICAgIEdseXBoRGF0YSBnbHlwaERhdGFGb3JD
aGFyYWN0ZXIoVUNoYXIzMiwgY29uc3QgRm9udERlc2NyaXB0aW9uJiwgRm9udERhdGFWYXJpYW50
KTsKKyAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIsIGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYsIEZvbnRWYXJpYW50KTsKIAogICAgIGJvb2wgaXNGaXhlZFBpdGNoKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYpOwogICAgIHZvaWQgZGV0ZXJtaW5lUGl0Y2goY29uc3QgRm9u
dERlc2NyaXB0aW9uJik7CkBAIC02Niw3ICs2Niw3IEBAIHB1YmxpYzoKICAgICBXaWR0aENhY2hl
JiB3aWR0aENhY2hlKCkgeyByZXR1cm4gbV93aWR0aENhY2hlOyB9CiAgICAgY29uc3QgV2lkdGhD
YWNoZSYgd2lkdGhDYWNoZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGhDYWNoZTsgfQogCi0gICAg
Y29uc3QgU2ltcGxlRm9udERhdGEmIHByaW1hcnlTaW1wbGVGb250RGF0YShjb25zdCBGb250RGVz
Y3JpcHRpb24mKTsKKyAgICBjb25zdCBGb250JiBwcmltYXJ5Rm9udChjb25zdCBGb250RGVzY3Jp
cHRpb24mKTsKICAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBGb250UmFuZ2VzJiByZWFsaXplRmFs
bGJhY2tSYW5nZXNBdChjb25zdCBGb250RGVzY3JpcHRpb24mLCB1bnNpZ25lZCBmYWxsYmFja0lu
ZGV4KTsKIAogICAgIHZvaWQgcHJ1bmVTeXN0ZW1GYWxsYmFja3MoKTsKQEAgLTc1LDkgKzc1LDkg
QEAgcHJpdmF0ZToKICAgICBGb250R2x5cGhzKFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPik7CiAg
ICAgRm9udEdseXBocyhjb25zdCBGb250UGxhdGZvcm1EYXRhJik7CiAKLSAgICBHbHlwaERhdGEg
Z2x5cGhEYXRhRm9yU3lzdGVtRmFsbGJhY2soVUNoYXIzMiwgY29uc3QgRm9udERlc2NyaXB0aW9u
JiwgRm9udERhdGFWYXJpYW50KTsKKyAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yU3lzdGVtRmFs
bGJhY2soVUNoYXIzMiwgY29uc3QgRm9udERlc2NyaXB0aW9uJiwgRm9udFZhcmlhbnQpOwogICAg
IEdseXBoRGF0YSBnbHlwaERhdGFGb3JOb3JtYWxWYXJpYW50KFVDaGFyMzIsIGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYpOwotICAgIEdseXBoRGF0YSBnbHlwaERhdGFGb3JWYXJpYW50KFVDaGFyMzIs
IGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIEZvbnREYXRhVmFyaWFudCwgdW5zaWduZWQgZmFsbGJh
Y2tJbmRleCk7CisgICAgR2x5cGhEYXRhIGdseXBoRGF0YUZvclZhcmlhbnQoVUNoYXIzMiwgY29u
c3QgRm9udERlc2NyaXB0aW9uJiwgRm9udFZhcmlhbnQsIHVuc2lnbmVkIGZhbGxiYWNrSW5kZXgp
OwogCiAgICAgVmVjdG9yPEZvbnRSYW5nZXMsIDE+IG1fcmVhbGl6ZWRGYWxsYmFja1JhbmdlczsK
ICAgICB1bnNpZ25lZCBtX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXggeyAwIH07CkBAIC04NSw5
ICs4NSw5IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPEdseXBoUGFnZT4gbV9jYWNoZWRQYWdlWmVy
bzsKICAgICBIYXNoTWFwPGludCwgUmVmUHRyPEdseXBoUGFnZT4+IG1fY2FjaGVkUGFnZXM7CiAK
LSAgICBIYXNoU2V0PFJlZlB0cjxTaW1wbGVGb250RGF0YT4+IG1fc3lzdGVtRmFsbGJhY2tGb250
RGF0YVNldDsKKyAgICBIYXNoU2V0PFJlZlB0cjxGb250Pj4gbV9zeXN0ZW1GYWxsYmFja0ZvbnRT
ZXQ7CiAKLSAgICBjb25zdCBTaW1wbGVGb250RGF0YSogbV9jYWNoZWRQcmltYXJ5U2ltcGxlRm9u
dERhdGE7CisgICAgY29uc3QgRm9udCogbV9jYWNoZWRQcmltYXJ5Rm9udDsKICAgICBSZWZQdHI8
Rm9udFNlbGVjdG9yPiBtX2ZvbnRTZWxlY3RvcjsKIAogICAgIFdpZHRoQ2FjaGUgbV93aWR0aENh
Y2hlOwpAQCAtMTA1LDE2ICsxMDUsMTYgQEAgaW5saW5lIGJvb2wgRm9udEdseXBoczo6aXNGaXhl
ZFBpdGNoKGNvbgogICAgIHJldHVybiBtX3BpdGNoID09IEZpeGVkUGl0Y2g7CiB9OwogCi1pbmxp
bmUgY29uc3QgU2ltcGxlRm9udERhdGEmIEZvbnRHbHlwaHM6OnByaW1hcnlTaW1wbGVGb250RGF0
YShjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQoraW5saW5lIGNvbnN0IEZvbnQm
IEZvbnRHbHlwaHM6OnByaW1hcnlGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRp
b24pCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBpZiAoIW1fY2FjaGVkUHJp
bWFyeVNpbXBsZUZvbnREYXRhKSB7CisgICAgaWYgKCFtX2NhY2hlZFByaW1hcnlGb250KSB7CiAg
ICAgICAgIGF1dG8mIHByaW1hcnlSYW5nZXMgPSByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChkZXNj
cmlwdGlvbiwgMCk7Ci0gICAgICAgIG1fY2FjaGVkUHJpbWFyeVNpbXBsZUZvbnREYXRhID0gcHJp
bWFyeVJhbmdlcy5mb250RGF0YUZvckNoYXJhY3RlcignICcpOwotICAgICAgICBpZiAoIW1fY2Fj
aGVkUHJpbWFyeVNpbXBsZUZvbnREYXRhKQotICAgICAgICAgICAgbV9jYWNoZWRQcmltYXJ5U2lt
cGxlRm9udERhdGEgPSAmcHJpbWFyeVJhbmdlcy5mb250RGF0YUZvckZpcnN0UmFuZ2UoKTsKKyAg
ICAgICAgbV9jYWNoZWRQcmltYXJ5Rm9udCA9IHByaW1hcnlSYW5nZXMuZm9udEZvckNoYXJhY3Rl
cignICcpOworICAgICAgICBpZiAoIW1fY2FjaGVkUHJpbWFyeUZvbnQpCisgICAgICAgICAgICBt
X2NhY2hlZFByaW1hcnlGb250ID0gJnByaW1hcnlSYW5nZXMuZm9udEZvckZpcnN0UmFuZ2UoKTsK
ICAgICB9Ci0gICAgcmV0dXJuICptX2NhY2hlZFByaW1hcnlTaW1wbGVGb250RGF0YTsKKyAgICBy
ZXR1cm4gKm1fY2FjaGVkUHJpbWFyeUZvbnQ7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRNZXRyaWNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udE1ldHJpY3MuaAkocmV2aXNpb24gMTc4ODU3KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udE1ldHJpY3MuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTMzLDcgKzEzMyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEhhc1plcm9X
aWR0aChib29sIGhhc1plcm9XaWR0aCkgeyBtX2hhc1plcm9XaWR0aCA9IGhhc1plcm9XaWR0aDsg
fQogCiBwcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBTaW1wbGVGb250RGF0YTsKKyAgICBmcmll
bmQgY2xhc3MgRm9udDsKIAogICAgIHZvaWQgcmVzZXQoKQogICAgIHsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRSYW5nZXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRSYW5nZXMuY3BwCShyZXZpc2lvbiAx
Nzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UmFuZ2VzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkZvbnRSYW5nZXMuaCIKIAotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisj
aW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTM2LDM0ICszNiwzNCBAQCBGb250UmFuZ2VzOjpG
b250UmFuZ2VzKCkKIHsKIH0KIAotRm9udFJhbmdlczo6Rm9udFJhbmdlcyhSZWZQdHI8U2ltcGxl
Rm9udERhdGE+JiYgZm9udERhdGEpCitGb250UmFuZ2VzOjpGb250UmFuZ2VzKFJlZlB0cjxGb250
PiYmIGZvbnQpCiB7Ci0gICAgaWYgKGZvbnREYXRhKQotICAgICAgICBtX3Jhbmdlcy5hcHBlbmQo
UmFuZ2UgeyAwLCAweDdGRkZGRkZGLCBmb250RGF0YS5yZWxlYXNlTm9uTnVsbCgpIH0pOworICAg
IGlmIChmb250KQorICAgICAgICBtX3Jhbmdlcy5hcHBlbmQoUmFuZ2UgeyAwLCAweDdGRkZGRkZG
LCBmb250LnJlbGVhc2VOb25OdWxsKCkgfSk7CiB9CiAKIEZvbnRSYW5nZXM6On5Gb250UmFuZ2Vz
KCkKIHsKIH0KIAotY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRSYW5nZXM6OmZvbnREYXRhRm9y
Q2hhcmFjdGVyKFVDaGFyMzIgYykgY29uc3QKK2NvbnN0IEZvbnQqIEZvbnRSYW5nZXM6OmZvbnRG
b3JDaGFyYWN0ZXIoVUNoYXIzMiBjKSBjb25zdAogewogICAgIGZvciAoYXV0byYgcmFuZ2UgOiBt
X3JhbmdlcykgewogICAgICAgICBpZiAocmFuZ2UuZnJvbSgpIDw9IGMgJiYgYyA8PSByYW5nZS50
bygpKQotICAgICAgICAgICAgcmV0dXJuICZyYW5nZS5mb250RGF0YSgpOworICAgICAgICAgICAg
cmV0dXJuICZyYW5nZS5mb250KCk7CiAgICAgfQogICAgIHJldHVybiBudWxscHRyOwogfQogCi1j
b25zdCBTaW1wbGVGb250RGF0YSYgRm9udFJhbmdlczo6Zm9udERhdGFGb3JGaXJzdFJhbmdlKCkg
Y29uc3QKK2NvbnN0IEZvbnQmIEZvbnRSYW5nZXM6OmZvbnRGb3JGaXJzdFJhbmdlKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gbV9yYW5nZXNbMF0uZm9udERhdGEoKTsKKyAgICByZXR1cm4gbV9yYW5n
ZXNbMF0uZm9udCgpOwogfQogCiBib29sIEZvbnRSYW5nZXM6OmlzTG9hZGluZygpIGNvbnN0CiB7
CiAgICAgZm9yIChhdXRvJiByYW5nZSA6IG1fcmFuZ2VzKSB7Ci0gICAgICAgIGlmIChyYW5nZS5m
b250RGF0YSgpLmlzTG9hZGluZygpKQorICAgICAgICBpZiAocmFuZ2UuZm9udCgpLmlzTG9hZGlu
ZygpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRSYW5nZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UmFuZ2VzLmgJ
KHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRSYW5nZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBGb250
UmFuZ2VzX2gKICNkZWZpbmUgRm9udFJhbmdlc19oCiAKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0
YS5oIgorI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC0zNSwyNSArMzUsMjUgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogY2xhc3MgRm9udFJhbmdlcyB7CiBwdWJsaWM6CiAgICAgc3RydWN0IFJhbmdlIHsKLSAg
ICAgICAgUmFuZ2UoVUNoYXIzMiBmcm9tLCBVQ2hhcjMyIHRvLCBSZWY8U2ltcGxlRm9udERhdGE+
JiYgZm9udERhdGEpCisgICAgICAgIFJhbmdlKFVDaGFyMzIgZnJvbSwgVUNoYXIzMiB0bywgUmVm
PEZvbnQ+JiYgZm9udCkKICAgICAgICAgICAgIDogbV9mcm9tKGZyb20pCiAgICAgICAgICAgICAs
IG1fdG8odG8pCi0gICAgICAgICAgICAsIG1fZm9udERhdGEoV1RGOjptb3ZlKGZvbnREYXRhKSkK
KyAgICAgICAgICAgICwgbV9mb250KFdURjo6bW92ZShmb250KSkKICAgICAgICAgewogICAgICAg
ICB9CiAKICAgICAgICAgVUNoYXIzMiBmcm9tKCkgY29uc3QgeyByZXR1cm4gbV9mcm9tOyB9CiAg
ICAgICAgIFVDaGFyMzIgdG8oKSBjb25zdCB7IHJldHVybiBtX3RvOyB9Ci0gICAgICAgIGNvbnN0
IFNpbXBsZUZvbnREYXRhJiBmb250RGF0YSgpIGNvbnN0IHsgcmV0dXJuICptX2ZvbnREYXRhOyB9
CisgICAgICAgIGNvbnN0IEZvbnQmIGZvbnQoKSBjb25zdCB7IHJldHVybiAqbV9mb250OyB9CiAK
ICAgICBwcml2YXRlOgogICAgICAgICBVQ2hhcjMyIG1fZnJvbTsKICAgICAgICAgVUNoYXIzMiBt
X3RvOwotICAgICAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IG1fZm9udERhdGE7CisgICAgICAg
IFJlZlB0cjxGb250PiBtX2ZvbnQ7CiAgICAgfTsKIAogICAgIEZvbnRSYW5nZXMoKTsKLSAgICBl
eHBsaWNpdCBGb250UmFuZ2VzKFJlZlB0cjxTaW1wbGVGb250RGF0YT4mJik7CisgICAgZXhwbGlj
aXQgRm9udFJhbmdlcyhSZWZQdHI8Rm9udD4mJik7CiAgICAgfkZvbnRSYW5nZXMoKTsKIAogICAg
IGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gbV9yYW5nZXMuaXNFbXB0eSgpOyB9CkBAIC02
Miw4ICs2Miw4IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4g
bV9yYW5nZXMuc2l6ZSgpOyB9CiAgICAgY29uc3QgUmFuZ2UmIHJhbmdlQXQodW5zaWduZWQgaSkg
Y29uc3QgeyByZXR1cm4gbV9yYW5nZXNbaV07IH0KIAotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRh
KiBmb250RGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyKSBjb25zdDsKLSAgICBjb25zdCBTaW1wbGVG
b250RGF0YSYgZm9udERhdGFGb3JGaXJzdFJhbmdlKCkgY29uc3Q7CisgICAgY29uc3QgRm9udCog
Zm9udEZvckNoYXJhY3RlcihVQ2hhcjMyKSBjb25zdDsKKyAgICBjb25zdCBGb250JiBmb250Rm9y
Rmlyc3RSYW5nZSgpIGNvbnN0OwogICAgIGJvb2wgaXNMb2FkaW5nKCkgY29uc3Q7CiAKIHByaXZh
dGU6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250U2Vs
ZWN0b3IuaAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udFNlbGVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDkgKzQxLDkgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgfkZvbnRTZWxlY3RvcigpIHsgfQogCiAgICAgdmlydHVhbCBGb250
UmFuZ2VzIGZvbnRSYW5nZXNGb3JGYW1pbHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3Qg
QXRvbWljU3RyaW5nJikgPSAwOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0
YT4gZmFsbGJhY2tGb250RGF0YUF0KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIHNpemVfdCkgPSAw
OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGb250PiBmYWxsYmFja0ZvbnRBdChjb25zdCBGb250
RGVzY3JpcHRpb24mLCBzaXplX3QpID0gMDsKIAotICAgIHZpcnR1YWwgc2l6ZV90IGZhbGxiYWNr
Rm9udERhdGFDb3VudCgpID0gMDsKKyAgICB2aXJ0dWFsIHNpemVfdCBmYWxsYmFja0ZvbnRDb3Vu
dCgpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgcmVzb2x2ZXNGYW1pbHlGb3IoY29uc3QgRm9udERl
c2NyaXB0aW9uJikgY29uc3QgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkIGZvbnRDYWNoZUludmFs
aWRhdGVkKCkgeyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlw
aEJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dseXBoQnVmZmVyLmgJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dseXBoQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBTaW1wbGVGb250RGF0YTsKK2NsYXNz
IEZvbnQ7CiAKICNpZiBVU0UoQ0FJUk8pCiAvLyBGSVhNRTogV2h5IGRvZXMgQ2Fpcm8gdXNlIHN1
Y2ggYSBodWdlIHN0cnVjdCBpbnN0ZWFkIG9mIGp1c3QgYW4gb2Zmc2V0IGludG8gYW4gYXJyYXk/
CkBAIC03NiwxMiArNzYsMTIgQEAgdHlwZWRlZiBGbG9hdFNpemUgR2x5cGhCdWZmZXJBZHZhbmNl
OwogCiBjbGFzcyBHbHlwaEJ1ZmZlciB7CiBwdWJsaWM6Ci0gICAgYm9vbCBpc0VtcHR5KCkgY29u
c3QgeyByZXR1cm4gbV9mb250RGF0YS5pc0VtcHR5KCk7IH0KLSAgICBpbnQgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fZm9udERhdGEuc2l6ZSgpOyB9CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Qg
eyByZXR1cm4gbV9mb250LmlzRW1wdHkoKTsgfQorICAgIGludCBzaXplKCkgY29uc3QgeyByZXR1
cm4gbV9mb250LnNpemUoKTsgfQogICAgIAogICAgIHZvaWQgY2xlYXIoKQogICAgIHsKLSAgICAg
ICAgbV9mb250RGF0YS5jbGVhcigpOworICAgICAgICBtX2ZvbnQuY2xlYXIoKTsKICAgICAgICAg
bV9nbHlwaHMuY2xlYXIoKTsKICAgICAgICAgbV9hZHZhbmNlcy5jbGVhcigpOwogICAgICAgICBp
ZiAobV9vZmZzZXRzSW5TdHJpbmcpCkBAIC05Niw3ICs5Niw3IEBAIHB1YmxpYzoKICAgICBjb25z
dCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMoaW50IGZyb20pIGNvbnN0IHsgcmV0dXJuIG1fZ2x5
cGhzLmRhdGEoKSArIGZyb207IH0KICAgICBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFu
Y2VzKGludCBmcm9tKSBjb25zdCB7IHJldHVybiBtX2FkdmFuY2VzLmRhdGEoKSArIGZyb207IH0K
IAotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YUF0KGludCBpbmRleCkgY29uc3Qg
eyByZXR1cm4gbV9mb250RGF0YVtpbmRleF07IH0KKyAgICBjb25zdCBGb250KiBmb250QXQoaW50
IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2ZvbnRbaW5kZXhdOyB9CiAKICAgICB2b2lkIHNldElu
aXRpYWxBZHZhbmNlKEdseXBoQnVmZmVyQWR2YW5jZSBpbml0aWFsQWR2YW5jZSkgeyBtX2luaXRp
YWxBZHZhbmNlID0gaW5pdGlhbEFkdmFuY2U7IH0KICAgICBjb25zdCBHbHlwaEJ1ZmZlckFkdmFu
Y2UmIGluaXRpYWxBZHZhbmNlKCkgY29uc3QgeyByZXR1cm4gbV9pbml0aWFsQWR2YW5jZTsgfQpA
QCAtMTI2LDkgKzEyNiw5IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIG5vT2Zmc2V0ID0gVUlOVF9NQVg7Ci0gICAgdm9pZCBhZGQoR2x5cGggZ2x5cGgs
IGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LCBmbG9hdCB3aWR0aCwgdW5zaWduZWQgb2Zmc2V0
SW5TdHJpbmcgPSBub09mZnNldCwgY29uc3QgRmxvYXRTaXplKiBvZmZzZXQgPSAwKQorICAgIHZv
aWQgYWRkKEdseXBoIGdseXBoLCBjb25zdCBGb250KiBmb250LCBmbG9hdCB3aWR0aCwgdW5zaWdu
ZWQgb2Zmc2V0SW5TdHJpbmcgPSBub09mZnNldCwgY29uc3QgRmxvYXRTaXplKiBvZmZzZXQgPSAw
KQogICAgIHsKLSAgICAgICAgbV9mb250RGF0YS5hcHBlbmQoZm9udCk7CisgICAgICAgIG1fZm9u
dC5hcHBlbmQoZm9udCk7CiAKICNpZiBVU0UoQ0FJUk8pCiAgICAgICAgIGNhaXJvX2dseXBoX3Qg
Y2Fpcm9HbHlwaDsKQEAgLTE1OSw5ICsxNTksOSBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogI2lm
ICFVU0UoV0lOR0RJKQotICAgIHZvaWQgYWRkKEdseXBoIGdseXBoLCBjb25zdCBTaW1wbGVGb250
RGF0YSogZm9udCwgR2x5cGhCdWZmZXJBZHZhbmNlIGFkdmFuY2UsIHVuc2lnbmVkIG9mZnNldElu
U3RyaW5nID0gbm9PZmZzZXQpCisgICAgdm9pZCBhZGQoR2x5cGggZ2x5cGgsIGNvbnN0IEZvbnQq
IGZvbnQsIEdseXBoQnVmZmVyQWR2YW5jZSBhZHZhbmNlLCB1bnNpZ25lZCBvZmZzZXRJblN0cmlu
ZyA9IG5vT2Zmc2V0KQogICAgIHsKLSAgICAgICAgbV9mb250RGF0YS5hcHBlbmQoZm9udCk7Cisg
ICAgICAgIG1fZm9udC5hcHBlbmQoZm9udCk7CiAjaWYgVVNFKENBSVJPKQogICAgICAgICBjYWly
b19nbHlwaF90IGNhaXJvR2x5cGg7CiAgICAgICAgIGNhaXJvR2x5cGguaW5kZXggPSBnbHlwaDsK
QEAgLTIwNSw5ICsyMDUsOSBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHZvaWQgc3dhcChpbnQg
aW5kZXgxLCBpbnQgaW5kZXgyKQogICAgIHsKLSAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEq
IGYgPSBtX2ZvbnREYXRhW2luZGV4MV07Ci0gICAgICAgIG1fZm9udERhdGFbaW5kZXgxXSA9IG1f
Zm9udERhdGFbaW5kZXgyXTsKLSAgICAgICAgbV9mb250RGF0YVtpbmRleDJdID0gZjsKKyAgICAg
ICAgY29uc3QgRm9udCogZiA9IG1fZm9udFtpbmRleDFdOworICAgICAgICBtX2ZvbnRbaW5kZXgx
XSA9IG1fZm9udFtpbmRleDJdOworICAgICAgICBtX2ZvbnRbaW5kZXgyXSA9IGY7CiAKICAgICAg
ICAgR2x5cGhCdWZmZXJHbHlwaCBnID0gbV9nbHlwaHNbaW5kZXgxXTsKICAgICAgICAgbV9nbHlw
aHNbaW5kZXgxXSA9IG1fZ2x5cGhzW2luZGV4Ml07CkBAIC0yMjQsNyArMjI0LDcgQEAgcHJpdmF0
ZToKICNlbmRpZgogICAgIH0KIAotICAgIFZlY3Rvcjxjb25zdCBTaW1wbGVGb250RGF0YSosIDIw
NDg+IG1fZm9udERhdGE7CisgICAgVmVjdG9yPGNvbnN0IEZvbnQqLCAyMDQ4PiBtX2ZvbnQ7CiAg
ICAgVmVjdG9yPEdseXBoQnVmZmVyR2x5cGgsIDIwNDg+IG1fZ2x5cGhzOwogICAgIFZlY3RvcjxH
bHlwaEJ1ZmZlckFkdmFuY2UsIDIwNDg+IG1fYWR2YW5jZXM7CiAgICAgR2x5cGhCdWZmZXJBZHZh
bmNlIG1faW5pdGlhbEFkdmFuY2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HbHlwaFBhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HbHlwaFBhZ2UuaAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDE4ICsz
OSwxOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFNpbXBsZUZvbnREYXRhOwor
Y2xhc3MgRm9udDsKIAotLy8gSG9sZHMgdGhlIGdseXBoIGluZGV4IGFuZCB0aGUgY29ycmVzcG9u
ZGluZyBTaW1wbGVGb250RGF0YSBpbmZvcm1hdGlvbiBmb3IgYSBnaXZlbgorLy8gSG9sZHMgdGhl
IGdseXBoIGluZGV4IGFuZCB0aGUgY29ycmVzcG9uZGluZyBGb250IGluZm9ybWF0aW9uIGZvciBh
IGdpdmVuCiAvLyBjaGFyYWN0ZXIuCiBzdHJ1Y3QgR2x5cGhEYXRhIHsKLSAgICBHbHlwaERhdGEo
R2x5cGggZyA9IDAsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmID0gMCkKKyAgICBHbHlwaERhdGEo
R2x5cGggZyA9IDAsIGNvbnN0IEZvbnQqIGYgPSAwKQogICAgICAgICA6IGdseXBoKGcpCi0gICAg
ICAgICwgZm9udERhdGEoZikKKyAgICAgICAgLCBmb250KGYpCiAgICAgewogICAgIH0KICAgICBH
bHlwaCBnbHlwaDsKLSAgICBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGE7CisgICAgY29u
c3QgRm9udCogZm9udDsKIH07CiAKICNpZiBDT01QSUxFUihNU1ZDKQpAQCAtNjYsMjQgKzY2LDI0
IEBAIHN0cnVjdCBHbHlwaERhdGEgewogLy8gbWlzc2luZyBpbiB0aGUgcHJpbWFyeSBmb250Lgog
Y2xhc3MgR2x5cGhQYWdlIDogcHVibGljIFJlZkNvdW50ZWQ8R2x5cGhQYWdlPiB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8R2x5cGhQYWdlPiBjcmVhdGVGb3JNaXhlZEZvbnREYXRh
KCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxHbHlwaFBhZ2U+IGNyZWF0ZUZvck1peGVkRm9udHMo
KQogICAgIHsKLSAgICAgICAgdm9pZCogc2xvdCA9IGZhc3RNYWxsb2Moc2l6ZW9mKEdseXBoUGFn
ZSkgKyBzaXplb2YoU2ltcGxlRm9udERhdGEqKSAqIEdseXBoUGFnZTo6c2l6ZSk7CisgICAgICAg
IHZvaWQqIHNsb3QgPSBmYXN0TWFsbG9jKHNpemVvZihHbHlwaFBhZ2UpICsgc2l6ZW9mKEZvbnQq
KSAqIEdseXBoUGFnZTo6c2l6ZSk7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgKE5vdE51
bGwsIHNsb3QpIEdseXBoUGFnZShudWxscHRyKSk7CiAgICAgfQogCi0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8R2x5cGhQYWdlPiBjcmVhdGVDb3B5Rm9yTWl4ZWRGb250RGF0YShjb25zdCBHbHlwaFBh
Z2UmIG9yaWdpbmFsKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdseXBoUGFnZT4gY3JlYXRlQ29w
eUZvck1peGVkRm9udHMoY29uc3QgR2x5cGhQYWdlJiBvcmlnaW5hbCkKICAgICB7Ci0gICAgICAg
IFJlZlB0cjxHbHlwaFBhZ2U+IHBhZ2UgPSBjcmVhdGVGb3JNaXhlZEZvbnREYXRhKCk7CisgICAg
ICAgIFJlZlB0cjxHbHlwaFBhZ2U+IHBhZ2UgPSBjcmVhdGVGb3JNaXhlZEZvbnRzKCk7CiAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHbHlwaFBhZ2U6OnNpemU7ICsraSkKICAgICAg
ICAgICAgIHBhZ2UtPnNldEdseXBoRGF0YUZvckluZGV4KGksIG9yaWdpbmFsLmdseXBoRGF0YUZv
ckluZGV4KGkpKTsKICAgICAgICAgcmV0dXJuIHBhZ2UucmVsZWFzZSgpOwogICAgIH0KIAotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEdseXBoUGFnZT4gY3JlYXRlRm9yU2luZ2xlRm9udERhdGEoY29u
c3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdseXBo
UGFnZT4gY3JlYXRlRm9yU2luZ2xlRm9udChjb25zdCBGb250KiBmb250KQogICAgIHsKLSAgICAg
ICAgQVNTRVJUKGZvbnREYXRhKTsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHbHlwaFBh
Z2UoZm9udERhdGEpKTsKKyAgICAgICAgQVNTRVJUKGZvbnQpOworICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEdseXBoUGFnZShmb250KSk7CiAgICAgfQogCiAgICAgfkdseXBoUGFnZSgpCkBA
IC0xMTEsNyArMTExLDcgQEAgcHVibGljOgogICAgICAgICBHbHlwaCBnbHlwaCA9IG1fZ2x5cGhz
W2luZGV4XTsKICAgICAgICAgaWYgKGhhc1BlckdseXBoRm9udERhdGEoKSkKICAgICAgICAgICAg
IHJldHVybiBHbHlwaERhdGEoZ2x5cGgsIG1fcGVyR2x5cGhGb250RGF0YVtpbmRleF0pOwotICAg
ICAgICByZXR1cm4gR2x5cGhEYXRhKGdseXBoLCBnbHlwaCA/IG1fZm9udERhdGFGb3JBbGxHbHlw
aHMgOiAwKTsKKyAgICAgICAgcmV0dXJuIEdseXBoRGF0YShnbHlwaCwgZ2x5cGggPyBtX2ZvbnRG
b3JBbGxHbHlwaHMgOiAwKTsKICAgICB9CiAKICAgICBBTFdBWVNfSU5MSU5FIEdseXBoIGdseXBo
QXQodW5zaWduZWQgaW5kZXgpIGNvbnN0CkBAIC0xMjAsNjcgKzEyMCw2NyBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBtX2dseXBoc1tpbmRleF07CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElO
RSBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjKSBj
b25zdAorICAgIEFMV0FZU19JTkxJTkUgY29uc3QgRm9udCogZm9udEZvckNoYXJhY3RlcihVQ2hh
cjMyIGMpIGNvbnN0CiAgICAgewogICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGluZGV4Rm9yQ2hh
cmFjdGVyKGMpOwogICAgICAgICBpZiAoaGFzUGVyR2x5cGhGb250RGF0YSgpKQogICAgICAgICAg
ICAgcmV0dXJuIG1fcGVyR2x5cGhGb250RGF0YVtpbmRleF07Ci0gICAgICAgIHJldHVybiBtX2ds
eXBoc1tpbmRleF0gPyBtX2ZvbnREYXRhRm9yQWxsR2x5cGhzIDogMDsKKyAgICAgICAgcmV0dXJu
IG1fZ2x5cGhzW2luZGV4XSA/IG1fZm9udEZvckFsbEdseXBocyA6IDA7CiAgICAgfQogCi0gICAg
dm9pZCBzZXRHbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjLCBHbHlwaCBnLCBjb25zdCBT
aW1wbGVGb250RGF0YSogZikKKyAgICB2b2lkIHNldEdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hh
cjMyIGMsIEdseXBoIGcsIGNvbnN0IEZvbnQqIGYpCiAgICAgewogICAgICAgICBzZXRHbHlwaERh
dGFGb3JJbmRleChpbmRleEZvckNoYXJhY3RlcihjKSwgZywgZik7CiAgICAgfQogCi0gICAgdm9p
ZCBzZXRHbHlwaERhdGFGb3JJbmRleCh1bnNpZ25lZCBpbmRleCwgR2x5cGggZ2x5cGgsIGNvbnN0
IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSkKKyAgICB2b2lkIHNldEdseXBoRGF0YUZvckluZGV4
KHVuc2lnbmVkIGluZGV4LCBHbHlwaCBnbHlwaCwgY29uc3QgRm9udCogZm9udCkKICAgICB7CiAg
ICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGluZGV4IDwgc2l6ZSk7CiAg
ICAgICAgIEFTU0VSVCghbV9pc0ltbXV0YWJsZSk7CiAgICAgICAgIAogICAgICAgICBtX2dseXBo
c1tpbmRleF0gPSBnbHlwaDsKIAotICAgICAgICAvLyBHbHlwaFBhZ2UgZ2V0dGVycyB3aWxsIGFs
d2F5cyByZXR1cm4gYSBudWxsIFNpbXBsZUZvbnREYXRhKiBmb3IgZ2x5cGggIzAgaWYgdGhlcmUn
cyBubyBwZXItZ2x5cGggZm9udCBhcnJheS4KKyAgICAgICAgLy8gR2x5cGhQYWdlIGdldHRlcnMg
d2lsbCBhbHdheXMgcmV0dXJuIGEgbnVsbCBGb250KiBmb3IgZ2x5cGggIzAgaWYgdGhlcmUncyBu
byBwZXItZ2x5cGggZm9udCBhcnJheS4KICAgICAgICAgaWYgKGhhc1BlckdseXBoRm9udERhdGEo
KSkgewotICAgICAgICAgICAgbV9wZXJHbHlwaEZvbnREYXRhW2luZGV4XSA9IGdseXBoID8gZm9u
dERhdGEgOiAwOworICAgICAgICAgICAgbV9wZXJHbHlwaEZvbnREYXRhW2luZGV4XSA9IGdseXBo
ID8gZm9udCA6IDA7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICAv
LyBBIHNpbmdsZS1mb250IEdseXBoUGFnZSBhbHJlYWR5IGFzc2lnbmVkIG1fZm9udERhdGFGb3JB
bGxHbHlwaHMgaW4gdGhlIGNvbnN0cnVjdG9yLgotICAgICAgICBBU1NFUlQoIWdseXBoIHx8IGZv
bnREYXRhID09IG1fZm9udERhdGFGb3JBbGxHbHlwaHMpOworICAgICAgICAvLyBBIHNpbmdsZS1m
b250IEdseXBoUGFnZSBhbHJlYWR5IGFzc2lnbmVkIG1fZm9udEZvckFsbEdseXBocyBpbiB0aGUg
Y29uc3RydWN0b3IuCisgICAgICAgIEFTU0VSVCghZ2x5cGggfHwgZm9udCA9PSBtX2ZvbnRGb3JB
bGxHbHlwaHMpOwogICAgIH0KIAogICAgIHZvaWQgc2V0R2x5cGhEYXRhRm9ySW5kZXgodW5zaWdu
ZWQgaW5kZXgsIGNvbnN0IEdseXBoRGF0YSYgZ2x5cGhEYXRhKQogICAgIHsKLSAgICAgICAgc2V0
R2x5cGhEYXRhRm9ySW5kZXgoaW5kZXgsIGdseXBoRGF0YS5nbHlwaCwgZ2x5cGhEYXRhLmZvbnRE
YXRhKTsKKyAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgoaW5kZXgsIGdseXBoRGF0YS5nbHlw
aCwgZ2x5cGhEYXRhLmZvbnQpOwogICAgIH0KIAogICAgIC8vIEltcGxlbWVudGVkIGJ5IHRoZSBw
bGF0Zm9ybS4KLSAgICBib29sIGZpbGwodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgs
IFVDaGFyKiBjaGFyYWN0ZXJCdWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgU2lt
cGxlRm9udERhdGEqKTsKKyAgICBib29sIGZpbGwodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgsIFVDaGFyKiBjaGFyYWN0ZXJCdWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29u
c3QgRm9udCopOwogI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIHN0YXRpYyBib29sIG1heVVzZU1p
eGVkRm9udERhdGFXaGVuRmlsbGluZyhjb25zdCBVQ2hhciogY2hhcmFjdGVyQnVmZmVyLCB1bnNp
Z25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IFNpbXBsZUZvbnREYXRhKik7CisgICAgc3RhdGljIGJv
b2wgbWF5VXNlTWl4ZWRGb250c1doZW5GaWxsaW5nKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJCdWZm
ZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgRm9udCopOwogI2Vsc2UKLSAgICBzdGF0
aWMgYm9vbCBtYXlVc2VNaXhlZEZvbnREYXRhV2hlbkZpbGxpbmcoY29uc3QgVUNoYXIqLCB1bnNp
Z25lZCwgY29uc3QgU2ltcGxlRm9udERhdGEqKSB7IHJldHVybiBmYWxzZTsgfQorICAgIHN0YXRp
YyBib29sIG1heVVzZU1peGVkRm9udHNXaGVuRmlsbGluZyhjb25zdCBVQ2hhciosIHVuc2lnbmVk
LCBjb25zdCBGb250KikgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCiBwcml2YXRlOgotICAg
IGV4cGxpY2l0IEdseXBoUGFnZShjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGFGb3JBbGxH
bHlwaHMpCi0gICAgICAgIDogbV9mb250RGF0YUZvckFsbEdseXBocyhmb250RGF0YUZvckFsbEds
eXBocykKKyAgICBleHBsaWNpdCBHbHlwaFBhZ2UoY29uc3QgRm9udCogZm9udEZvckFsbEdseXBo
cykKKyAgICAgICAgOiBtX2ZvbnRGb3JBbGxHbHlwaHMoZm9udEZvckFsbEdseXBocykKICAgICB7
CiAgICAgICAgIG1lbXNldChtX2dseXBocywgMCwgc2l6ZW9mKG1fZ2x5cGhzKSk7CiAgICAgICAg
IGlmIChoYXNQZXJHbHlwaEZvbnREYXRhKCkpCi0gICAgICAgICAgICBtZW1zZXQobV9wZXJHbHlw
aEZvbnREYXRhLCAwLCBzaXplb2YoU2ltcGxlRm9udERhdGEqKSAqIEdseXBoUGFnZTo6c2l6ZSk7
CisgICAgICAgICAgICBtZW1zZXQobV9wZXJHbHlwaEZvbnREYXRhLCAwLCBzaXplb2YoRm9udCop
ICogR2x5cGhQYWdlOjpzaXplKTsKICAgICAgICAgKytzX2NvdW50OwogICAgIH0KIAotICAgIGJv
b2wgaGFzUGVyR2x5cGhGb250RGF0YSgpIGNvbnN0IHsgcmV0dXJuICFtX2ZvbnREYXRhRm9yQWxs
R2x5cGhzOyB9CisgICAgYm9vbCBoYXNQZXJHbHlwaEZvbnREYXRhKCkgY29uc3QgeyByZXR1cm4g
IW1fZm9udEZvckFsbEdseXBoczsgfQogCi0gICAgY29uc3QgU2ltcGxlRm9udERhdGEqIG1fZm9u
dERhdGFGb3JBbGxHbHlwaHM7CisgICAgY29uc3QgRm9udCogbV9mb250Rm9yQWxsR2x5cGhzOwog
ICAgIEdseXBoIG1fZ2x5cGhzW3NpemVdOwogCiAgICAgYm9vbCBtX2lzSW1tdXRhYmxlIHsgZmFs
c2UgfTsKLSAgICAvLyBOT1RFOiBUaGlzIGFycmF5IGhhcyAoR2x5cGhQYWdlOjpzaXplKSBlbGVt
ZW50cyBpZiBtX2ZvbnREYXRhRm9yQWxsR2x5cGhzIGlzIG51bGwuCi0gICAgY29uc3QgU2ltcGxl
Rm9udERhdGEqIG1fcGVyR2x5cGhGb250RGF0YVswXTsKKyAgICAvLyBOT1RFOiBUaGlzIGFycmF5
IGhhcyAoR2x5cGhQYWdlOjpzaXplKSBlbGVtZW50cyBpZiBtX2ZvbnRGb3JBbGxHbHlwaHMgaXMg
bnVsbC4KKyAgICBjb25zdCBGb250KiBtX3BlckdseXBoRm9udERhdGFbMF07CiAKICAgICBzdGF0
aWMgdW5zaWduZWQgc19jb3VudDsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAJKHJldmlzaW9uIDE3ODg1NykK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ0OCwxMiArNDQ4LDEyIEBAIGZsb2F0IEdyYXBoaWNzQ29udGV4
dDo6ZHJhd1RleHQoY29uc3QgRm8KIH0KICNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0dseXBocyhjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29u
c3QgU2ltcGxlRm9udERhdGEmIGZvbnREYXRhLCBjb25zdCBHbHlwaEJ1ZmZlciYgYnVmZmVyLCBp
bnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0dseXBocyhjb25zdCBGb250Q2FzY2FkZSYgZm9udENhc2NhZGUs
IGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBidWZmZXIsIGludCBmcm9tLCBp
bnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKIHsKICAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBmb250LmRyYXdHbHlwaHModGhp
cywgJmZvbnREYXRhLCBidWZmZXIsIGZyb20sIG51bUdseXBocywgcG9pbnQpOworICAgIGZvbnRD
YXNjYWRlLmRyYXdHbHlwaHModGhpcywgJmZvbnQsIGJ1ZmZlciwgZnJvbSwgbnVtR2x5cGhzLCBw
b2ludCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RW1waGFzaXNNYXJrcyhjb25z
dCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJp
bmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0LmgJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogI2lmIFVTRShXSU5HREkpCiAgICAgY2xhc3MgU2hhcmVkQml0
bWFwOwotICAgIGNsYXNzIFNpbXBsZUZvbnREYXRhOworICAgIGNsYXNzIEZvbnQ7CiAgICAgY2xh
c3MgR2x5cGhCdWZmZXI7CiAjZW5kaWYKIApAQCAtMzYwLDcgKzM2MCw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICNlbHNlCiAgICAgICAgIGZsb2F0IGRyYXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRl
JiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGludCB0
byA9IC0xKTsKICNlbmRpZgotICAgICAgICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udENhc2Nh
ZGUmLCBjb25zdCBTaW1wbGVGb250RGF0YSYsIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20s
IGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICAgICAgdm9pZCBkcmF3R2x5
cGhzKGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyJiwg
aW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmKTsKICAgICAgICAgdm9p
ZCBkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mICwg
Y29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20gPSAw
LCBpbnQgdG8gPSAtMSk7CiAjaWYgIVBMQVRGT1JNKElPUykKICAgICAgICAgdm9pZCBkcmF3Qmlk
aVRleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2lu
dCYsIEZvbnRDYXNjYWRlOjpDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPSBGb250Q2FzY2FkZTo6
RG9Ob3RQYWludElmRm9udE5vdFJlYWR5KTsKQEAgLTQ3OSw3ICs0NzksNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIEFmZmluZVRyYW5zZm9ybSYgYWZmaW5lVHJhbnNmb3JtKCk7CiAg
ICAgICAgIHZvaWQgcmVzZXRBZmZpbmVUcmFuc2Zvcm0oKTsKICAgICAgICAgdm9pZCBmaWxsUmVj
dChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBHcmFkaWVudCopOwotICAgICAgICB2b2lkIGRyYXdU
ZXh0KGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwgY29uc3QgR2x5cGhCdWZmZXImIGds
eXBoQnVmZmVyLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQpOworICAgICAgICB2b2lkIGRyYXdUZXh0KGNvbnN0IEZvbnQqLCBjb25zdCBHbHlwaEJ1ZmZl
ciYsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50Jik7CiAgICAgICAg
IHZvaWQgZHJhd0ZyYW1lQ29udHJvbChjb25zdCBJbnRSZWN0JiByZWN0LCB1bnNpZ25lZCB0eXBl
LCB1bnNpZ25lZCBzdGF0ZSk7CiAgICAgICAgIHZvaWQgZHJhd0ZvY3VzUmVjdChjb25zdCBJbnRS
ZWN0JiByZWN0KTsKICAgICAgICAgdm9pZCBwYWludFRleHRGaWVsZChjb25zdCBJbnRSZWN0JiBy
ZWN0LCB1bnNpZ25lZCBzdGF0ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9TaW1wbGVGb250RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNDU2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIw
MDgsIDIwMTAsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICog
My4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1l
cyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJT
aW1wbGVGb250RGF0YS5oIgotCi0jaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAm
JiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID4gMTA4MCkKLSNpbmNsdWRlICJDb3Jl
VGV4dFNQSS5oIgotI2VuZGlmCi0jaW5jbHVkZSAiRm9udENhY2hlLmgiCi0jaW5jbHVkZSAiRm9u
dENhc2NhZGUuaCIKLSNpbmNsdWRlICJPcGVuVHlwZU1hdGhEYXRhLmgiCi0jaW5jbHVkZSA8d3Rm
L01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLQotI2lmIEVO
QUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKLSNpbmNsdWRlICJPcGVuVHlwZVZlcnRpY2FsRGF0YS5o
IgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdW5zaWduZWQgR2x5cGhQYWdlOjpz
X2NvdW50ID0gMDsKLQotY29uc3QgZmxvYXQgc21hbGxDYXBzRm9udFNpemVNdWx0aXBsaWVyID0g
MC43ZjsKLWNvbnN0IGZsb2F0IGVtcGhhc2lzTWFya0ZvbnRTaXplTXVsdGlwbGllciA9IDAuNWY7
Ci0KLVNpbXBsZUZvbnREYXRhOjpTaW1wbGVGb250RGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRh
JiBwbGF0Zm9ybURhdGEsIGJvb2wgaXNDdXN0b21Gb250LCBib29sIGlzTG9hZGluZywgYm9vbCBp
c1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKQotICAgIDogbV9tYXhDaGFyV2lkdGgoLTEpCi0gICAg
LCBtX2F2Z0NoYXJXaWR0aCgtMSkKLSAgICAsIG1fcGxhdGZvcm1EYXRhKHBsYXRmb3JtRGF0YSkK
LSAgICAsIG1fdHJlYXRBc0ZpeGVkUGl0Y2goZmFsc2UpCi0gICAgLCBtX2lzQ3VzdG9tRm9udChp
c0N1c3RvbUZvbnQpCi0gICAgLCBtX2lzTG9hZGluZyhpc0xvYWRpbmcpCi0gICAgLCBtX2lzVGV4
dE9yaWVudGF0aW9uRmFsbGJhY2soaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaykKLSAgICAsIG1f
aXNCcm9rZW5JZGVvZ3JhcGhGYWxsYmFjayhmYWxzZSkKLSAgICAsIG1fbWF0aERhdGEobnVsbHB0
cikKLSNpZiBFTkFCTEUoT1BFTlRZUEVfVkVSVElDQUwpCi0gICAgLCBtX3ZlcnRpY2FsRGF0YSgw
KQotI2VuZGlmCi0gICAgLCBtX2hhc1ZlcnRpY2FsR2x5cGhzKGZhbHNlKQotewotICAgIHBsYXRm
b3JtSW5pdCgpOwotICAgIHBsYXRmb3JtR2x5cGhJbml0KCk7Ci0gICAgcGxhdGZvcm1DaGFyV2lk
dGhJbml0KCk7Ci0jaWYgRU5BQkxFKE9QRU5UWVBFX1ZFUlRJQ0FMKQotICAgIGlmIChwbGF0Zm9y
bURhdGEub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCAmJiAhaXNUZXh0T3JpZW50YXRpb25GYWxs
YmFjaykgewotICAgICAgICBtX3ZlcnRpY2FsRGF0YSA9IHBsYXRmb3JtRGF0YS52ZXJ0aWNhbERh
dGEoKTsKLSAgICAgICAgbV9oYXNWZXJ0aWNhbEdseXBocyA9IG1fdmVydGljYWxEYXRhLmdldCgp
ICYmIG1fdmVydGljYWxEYXRhLT5oYXNWZXJ0aWNhbE1ldHJpY3MoKTsKLSAgICB9Ci0jZW5kaWYK
LX0KLQotU2ltcGxlRm9udERhdGE6OlNpbXBsZUZvbnREYXRhKHN0ZDo6dW5pcXVlX3B0cjxTVkdE
YXRhPiBzdmdEYXRhLCBmbG9hdCBmb250U2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5
bnRoZXRpY0l0YWxpYykKLSAgICA6IG1fcGxhdGZvcm1EYXRhKEZvbnRQbGF0Zm9ybURhdGEoZm9u
dFNpemUsIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYykpCi0gICAgLCBtX3N2Z0RhdGEo
V1RGOjptb3ZlKHN2Z0RhdGEpKQotICAgICwgbV90cmVhdEFzRml4ZWRQaXRjaChmYWxzZSkKLSAg
ICAsIG1faXNDdXN0b21Gb250KHRydWUpCi0gICAgLCBtX2lzTG9hZGluZyhmYWxzZSkKLSAgICAs
IG1faXNUZXh0T3JpZW50YXRpb25GYWxsYmFjayhmYWxzZSkKLSAgICAsIG1faXNCcm9rZW5JZGVv
Z3JhcGhGYWxsYmFjayhmYWxzZSkKLSAgICAsIG1fbWF0aERhdGEobnVsbHB0cikKLSNpZiBFTkFC
TEUoT1BFTlRZUEVfVkVSVElDQUwpCi0gICAgLCBtX3ZlcnRpY2FsRGF0YSgwKQotI2VuZGlmCi0g
ICAgLCBtX2hhc1ZlcnRpY2FsR2x5cGhzKGZhbHNlKQotI2lmIFBMQVRGT1JNKElPUykKLSAgICAs
IG1fc2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKGZhbHNlKQotI2VuZGlmCi17Ci0gICAgbV9zdmdE
YXRhLT5pbml0aWFsaXplRm9udERhdGEodGhpcywgZm9udFNpemUpOwotfQotCi0vLyBFc3RpbWF0
ZXMgb2YgYXZnQ2hhcldpZHRoIGFuZCBtYXhDaGFyV2lkdGggZm9yIHBsYXRmb3JtcyB0aGF0IGRv
bid0IHN1cHBvcnQgYWNjZXNzaW5nIHRoZXNlIHZhbHVlcyBmcm9tIHRoZSBmb250Lgotdm9pZCBT
aW1wbGVGb250RGF0YTo6aW5pdENoYXJXaWR0aHMoKQotewotICAgIGF1dG8qIGdseXBoUGFnZVpl
cm8gPSBnbHlwaFBhZ2UoMCk7Ci0KLSAgICAvLyBUcmVhdCB0aGUgd2lkdGggb2YgYSAnMCcgYXMg
dGhlIGF2Z0NoYXJXaWR0aC4KLSAgICBpZiAobV9hdmdDaGFyV2lkdGggPD0gMC5mICYmIGdseXBo
UGFnZVplcm8pIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IFVDaGFyMzIgZGlnaXRaZXJvQ2hhciA9
ICcwJzsKLSAgICAgICAgR2x5cGggZGlnaXRaZXJvR2x5cGggPSBnbHlwaFBhZ2VaZXJvLT5nbHlw
aERhdGFGb3JDaGFyYWN0ZXIoZGlnaXRaZXJvQ2hhcikuZ2x5cGg7Ci0gICAgICAgIGlmIChkaWdp
dFplcm9HbHlwaCkKLSAgICAgICAgICAgIG1fYXZnQ2hhcldpZHRoID0gd2lkdGhGb3JHbHlwaChk
aWdpdFplcm9HbHlwaCk7Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgY2FuJ3QgcmV0cmlldmUgdGhl
IHdpZHRoIG9mIGEgJzAnLCBmYWxsIGJhY2sgdG8gdGhlIHggaGVpZ2h0LgotICAgIGlmIChtX2F2
Z0NoYXJXaWR0aCA8PSAwLmYpCi0gICAgICAgIG1fYXZnQ2hhcldpZHRoID0gbV9mb250TWV0cmlj
cy54SGVpZ2h0KCk7Ci0KLSAgICBpZiAobV9tYXhDaGFyV2lkdGggPD0gMC5mKQotICAgICAgICBt
X21heENoYXJXaWR0aCA9IHN0ZDo6bWF4KG1fYXZnQ2hhcldpZHRoLCBtX2ZvbnRNZXRyaWNzLmZs
b2F0QXNjZW50KCkpOwotfQotCi12b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUdseXBoSW5p
dCgpCi17Ci0gICAgYXV0byogZ2x5cGhQYWdlWmVybyA9IGdseXBoUGFnZSgwKTsKLSAgICBpZiAo
IWdseXBoUGFnZVplcm8pIHsKLSAgICAgICAgbV9zcGFjZUdseXBoID0gMDsKLSAgICAgICAgbV9z
cGFjZVdpZHRoID0gMDsKLSAgICAgICAgbV96ZXJvR2x5cGggPSAwOwotICAgICAgICBtX2FkanVz
dGVkU3BhY2VXaWR0aCA9IDA7Ci0gICAgICAgIGRldGVybWluZVBpdGNoKCk7Ci0gICAgICAgIG1f
emVyb1dpZHRoU3BhY2VHbHlwaCA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAv
LyBBc2sgZm9yIHRoZSBnbHlwaCBmb3IgMCB0byBhdm9pZCBwYWdpbmcgaW4gWkVSTyBXSURUSCBT
UEFDRS4gQ29udHJvbCBjaGFyYWN0ZXJzLCBpbmNsdWRpbmcgMCwKLSAgICAvLyBhcmUgbWFwcGVk
IHRvIHRoZSBaRVJPIFdJRFRIIFNQQUNFIGdseXBoLgotICAgIG1femVyb1dpZHRoU3BhY2VHbHlw
aCA9IGdseXBoUGFnZVplcm8tPmdseXBoRGF0YUZvckNoYXJhY3RlcigwKS5nbHlwaDsKLQotICAg
IC8vIE5hc3R5IGhhY2sgdG8gZGV0ZXJtaW5lIGlmIHdlIHNob3VsZCByb3VuZCBvciBjZWlsIHNw
YWNlIHdpZHRocy4KLSAgICAvLyBJZiB0aGUgZm9udCBpcyBtb25vc3BhY2Ugb3IgZmFrZSBtb25v
c3BhY2Ugd2UgY2VpbCB0byBlbnN1cmUgdGhhdCAKLSAgICAvLyBldmVyeSBjaGFyYWN0ZXIgYW5k
IHRoZSBzcGFjZSBhcmUgdGhlIHNhbWUgd2lkdGguICBPdGhlcndpc2Ugd2Ugcm91bmQuCi0gICAg
bV9zcGFjZUdseXBoID0gZ2x5cGhQYWdlWmVyby0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKCcgJyku
Z2x5cGg7Ci0gICAgZmxvYXQgd2lkdGggPSB3aWR0aEZvckdseXBoKG1fc3BhY2VHbHlwaCk7Ci0g
ICAgbV9zcGFjZVdpZHRoID0gd2lkdGg7Ci0gICAgbV96ZXJvR2x5cGggPSBnbHlwaFBhZ2VaZXJv
LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoJzAnKS5nbHlwaDsKLSAgICBtX2ZvbnRNZXRyaWNzLnNl
dFplcm9XaWR0aCh3aWR0aEZvckdseXBoKG1femVyb0dseXBoKSk7Ci0gICAgZGV0ZXJtaW5lUGl0
Y2goKTsKLSAgICBtX2FkanVzdGVkU3BhY2VXaWR0aCA9IG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPyBj
ZWlsZih3aWR0aCkgOiByb3VuZGYod2lkdGgpOwotCi0gICAgLy8gRm9yY2UgdGhlIGdseXBoIGZv
ciBaRVJPIFdJRFRIIFNQQUNFIHRvIGhhdmUgemVybyB3aWR0aCwgdW5sZXNzIGl0IGlzIHNoYXJl
ZCB3aXRoIFNQQUNFLgotICAgIC8vIEhlbHZldGljYSBpcyBhbiBleGFtcGxlIG9mIGEgbm9uLXpl
cm8gd2lkdGggWkVSTyBXSURUSCBTUEFDRSBnbHlwaC4KLSAgICAvLyBTZWUgPGh0dHA6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMTc4PiBhbmQgU2ltcGxlRm9udERhdGE6Omlz
WmVyb1dpZHRoU3BhY2VHbHlwaCgpCi0gICAgaWYgKG1femVyb1dpZHRoU3BhY2VHbHlwaCA9PSBt
X3NwYWNlR2x5cGgpCi0gICAgICAgIG1femVyb1dpZHRoU3BhY2VHbHlwaCA9IDA7Ci19Ci0KLVNp
bXBsZUZvbnREYXRhOjp+U2ltcGxlRm9udERhdGEoKQotewotICAgIHJlbW92ZUZyb21TeXN0ZW1G
YWxsYmFja0NhY2hlKCk7Ci19Ci0KLXN0YXRpYyBib29sIGZpbGxHbHlwaFBhZ2UoR2x5cGhQYWdl
JiBwYWdlVG9GaWxsLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1
ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERh
dGEpCi17Ci0jaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICBpZiAoYXV0byogc3ZnRGF0YSA9IGZv
bnREYXRhLT5zdmdEYXRhKCkpCi0gICAgICAgIHJldHVybiBzdmdEYXRhLT5maWxsU1ZHR2x5cGhQ
YWdlKCZwYWdlVG9GaWxsLCBvZmZzZXQsIGxlbmd0aCwgYnVmZmVyLCBidWZmZXJMZW5ndGgsIGZv
bnREYXRhKTsKLSNlbmRpZgotICAgIGJvb2wgaGFzR2x5cGhzID0gcGFnZVRvRmlsbC5maWxsKG9m
ZnNldCwgbGVuZ3RoLCBidWZmZXIsIGJ1ZmZlckxlbmd0aCwgZm9udERhdGEpOwotI2lmIEVOQUJM
RShPUEVOVFlQRV9WRVJUSUNBTCkKLSAgICBpZiAoaGFzR2x5cGhzICYmIGZvbnREYXRhLT52ZXJ0
aWNhbERhdGEoKSkKLSAgICAgICAgZm9udERhdGEtPnZlcnRpY2FsRGF0YSgpLT5zdWJzdGl0dXRl
V2l0aFZlcnRpY2FsR2x5cGhzKGZvbnREYXRhLCAmcGFnZVRvRmlsbCwgb2Zmc2V0LCBsZW5ndGgp
OwotI2VuZGlmCi0gICAgcmV0dXJuIGhhc0dseXBoczsKLX0KLQotc3RhdGljIFJlZlB0cjxHbHlw
aFBhZ2U+IGNyZWF0ZUFuZEZpbGxHbHlwaFBhZ2UodW5zaWduZWQgcGFnZU51bWJlciwgY29uc3Qg
U2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQotewotI2lmIFBMQVRGT1JNKElPUykKLSAgICAvLyBG
SVhNRTogVGltZXMgTmV3IFJvbWFuIGNvbnRhaW5zIEFyYWJpYyBnbHlwaHMsIGJ1dCBDb3JlIFRl
eHQgZG9lc24ndCBrbm93IGhvdyB0byBzaGFwZSB0aGVtLiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzk4
MjM5NzU+LgotICAgIC8vIE9uY2Ugd2UgaGF2ZSB0aGUgZml4IGZvciA8cmRhcjovL3Byb2JsZW0v
OTgyMzk3NT4gdGhlbiByZW1vdmUgdGhpcyBjb2RlIHRvZ2V0aGVyIHdpdGggU2ltcGxlRm9udERh
dGE6OnNob3VsZE5vdEJlVXNlZEZvckFyYWJpYygpCi0gICAgLy8gaW4gPHJkYXI6Ly9wcm9ibGVt
LzEyMDk2ODM1Pi4KLSAgICBpZiAocGFnZU51bWJlciA9PSA2ICYmIGZvbnREYXRhLT5zaG91bGRO
b3RCZVVzZWRGb3JBcmFiaWMoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0jZW5kaWYKLQot
ICAgIHVuc2lnbmVkIHN0YXJ0ID0gcGFnZU51bWJlciAqIEdseXBoUGFnZTo6c2l6ZTsKLSAgICBV
Q2hhciBidWZmZXJbR2x5cGhQYWdlOjpzaXplICogMiArIDJdOwotICAgIHVuc2lnbmVkIGJ1ZmZl
ckxlbmd0aDsKLSAgICAvLyBGaWxsIGluIGEgYnVmZmVyIHdpdGggdGhlIGVudGlyZSAicGFnZSIg
b2YgY2hhcmFjdGVycyB0aGF0IHdlIHdhbnQgdG8gbG9vayB1cCBnbHlwaHMgZm9yLgotICAgIGlm
IChVX0lTX0JNUChzdGFydCkpIHsKLSAgICAgICAgYnVmZmVyTGVuZ3RoID0gR2x5cGhQYWdlOjpz
aXplOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR2x5cGhQYWdlOjpzaXplOyBp
KyspCi0gICAgICAgICAgICBidWZmZXJbaV0gPSBzdGFydCArIGk7Ci0KLSAgICAgICAgaWYgKHN0
YXJ0ID09IDApIHsKLSAgICAgICAgICAgIC8vIENvbnRyb2wgY2hhcmFjdGVycyBtdXN0IG5vdCBy
ZW5kZXIgYXQgYWxsLgotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDB4MjA7
ICsraSkKLSAgICAgICAgICAgICAgICBidWZmZXJbaV0gPSB6ZXJvV2lkdGhTcGFjZTsKLSAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDB4N0Y7IGkgPCAweEEwOyBpKyspCi0gICAgICAgICAg
ICAgICAgYnVmZmVyW2ldID0gemVyb1dpZHRoU3BhY2U7Ci0gICAgICAgICAgICBidWZmZXJbc29m
dEh5cGhlbl0gPSB6ZXJvV2lkdGhTcGFjZTsKLQotICAgICAgICAgICAgLy8gXG4sIFx0LCBhbmQg
bm9uYnJlYWtpbmcgc3BhY2UgbXVzdCByZW5kZXIgYXMgYSBzcGFjZS4KLSAgICAgICAgICAgIGJ1
ZmZlclsoaW50KSdcbiddID0gJyAnOwotICAgICAgICAgICAgYnVmZmVyWyhpbnQpJ1x0J10gPSAn
ICc7Ci0gICAgICAgICAgICBidWZmZXJbbm9CcmVha1NwYWNlXSA9ICcgJzsKLSAgICAgICAgfSBl
bHNlIGlmIChzdGFydCA9PSAobGVmdFRvUmlnaHRNYXJrICYgfihHbHlwaFBhZ2U6OnNpemUgLSAx
KSkpIHsKLSAgICAgICAgICAgIC8vIExSTSwgUkxNLCBMUkUsIFJMRSwgWldOSiwgWldKLCBhbmQg
UERGIG11c3Qgbm90IHJlbmRlciBhdCBhbGwuCi0gICAgICAgICAgICBidWZmZXJbbGVmdFRvUmln
aHRNYXJrIC0gc3RhcnRdID0gemVyb1dpZHRoU3BhY2U7Ci0gICAgICAgICAgICBidWZmZXJbcmln
aHRUb0xlZnRNYXJrIC0gc3RhcnRdID0gemVyb1dpZHRoU3BhY2U7Ci0gICAgICAgICAgICBidWZm
ZXJbbGVmdFRvUmlnaHRFbWJlZCAtIHN0YXJ0XSA9IHplcm9XaWR0aFNwYWNlOwotICAgICAgICAg
ICAgYnVmZmVyW3JpZ2h0VG9MZWZ0RW1iZWQgLSBzdGFydF0gPSB6ZXJvV2lkdGhTcGFjZTsKLSAg
ICAgICAgICAgIGJ1ZmZlcltsZWZ0VG9SaWdodE92ZXJyaWRlIC0gc3RhcnRdID0gemVyb1dpZHRo
U3BhY2U7Ci0gICAgICAgICAgICBidWZmZXJbcmlnaHRUb0xlZnRPdmVycmlkZSAtIHN0YXJ0XSA9
IHplcm9XaWR0aFNwYWNlOwotICAgICAgICAgICAgYnVmZmVyW3plcm9XaWR0aE5vbkpvaW5lciAt
IHN0YXJ0XSA9IHplcm9XaWR0aFNwYWNlOwotICAgICAgICAgICAgYnVmZmVyW3plcm9XaWR0aEpv
aW5lciAtIHN0YXJ0XSA9IHplcm9XaWR0aFNwYWNlOwotICAgICAgICAgICAgYnVmZmVyW3BvcERp
cmVjdGlvbmFsRm9ybWF0dGluZyAtIHN0YXJ0XSA9IHplcm9XaWR0aFNwYWNlOwotICAgICAgICB9
IGVsc2UgaWYgKHN0YXJ0ID09IChvYmplY3RSZXBsYWNlbWVudENoYXJhY3RlciAmIH4oR2x5cGhQ
YWdlOjpzaXplIC0gMSkpKSB7Ci0gICAgICAgICAgICAvLyBPYmplY3QgcmVwbGFjZW1lbnQgY2hh
cmFjdGVyIG11c3Qgbm90IHJlbmRlciBhdCBhbGwuCi0gICAgICAgICAgICBidWZmZXJbb2JqZWN0
UmVwbGFjZW1lbnRDaGFyYWN0ZXIgLSBzdGFydF0gPSB6ZXJvV2lkdGhTcGFjZTsKLSAgICAgICAg
fSBlbHNlIGlmIChzdGFydCA9PSAoemVyb1dpZHRoTm9CcmVha1NwYWNlICYgfihHbHlwaFBhZ2U6
OnNpemUgLSAxKSkpIHsKLSAgICAgICAgICAgIC8vIFpXTkJTL0JPTSBtdXN0IG5vdCByZW5kZXIg
YXQgYWxsLgotICAgICAgICAgICAgYnVmZmVyW3plcm9XaWR0aE5vQnJlYWtTcGFjZSAtIHN0YXJ0
XSA9IHplcm9XaWR0aFNwYWNlOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgYnVm
ZmVyTGVuZ3RoID0gR2x5cGhQYWdlOjpzaXplICogMjsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IEdseXBoUGFnZTo6c2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICBpbnQgYyA9IGkg
KyBzdGFydDsKLSAgICAgICAgICAgIGJ1ZmZlcltpICogMl0gPSBVMTZfTEVBRChjKTsKLSAgICAg
ICAgICAgIGJ1ZmZlcltpICogMiArIDFdID0gVTE2X1RSQUlMKGMpOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgLy8gTm93IHRoYXQgd2UgaGF2ZSBhIGJ1ZmZlciBmdWxsIG9mIGNoYXJhY3RlcnMs
IHdlIHdhbnQgdG8gZ2V0IGJhY2sgYW4gYXJyYXkKLSAgICAvLyBvZiBnbHlwaCBpbmRpY2VzLiBU
aGlzIHBhcnQgaW52b2x2ZXMgY2FsbGluZyBpbnRvIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYwotICAg
IC8vIHJvdXRpbmUgb2Ygb3VyIGdseXBoIG1hcCBmb3IgYWN0dWFsbHkgZmlsbGluZyBpbiB0aGUg
cGFnZSB3aXRoIHRoZSBnbHlwaHMuCi0gICAgLy8gU3VjY2VzcyBpcyBub3QgZ3VhcmFudGVlZC4g
Rm9yIGV4YW1wbGUsIFRpbWVzIGZhaWxzIHRvIGZpbGwgcGFnZSAyNjAsIGdpdmluZyBnbHlwaCBk
YXRhCi0gICAgLy8gZm9yIG9ubHkgMTI4IG91dCBvZiAyNTYgY2hhcmFjdGVycy4KLSAgICBSZWZQ
dHI8R2x5cGhQYWdlPiBnbHlwaFBhZ2U7Ci0gICAgaWYgKEdseXBoUGFnZTo6bWF5VXNlTWl4ZWRG
b250RGF0YVdoZW5GaWxsaW5nKGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCBmb250RGF0YSkpCi0gICAg
ICAgIGdseXBoUGFnZSA9IEdseXBoUGFnZTo6Y3JlYXRlRm9yTWl4ZWRGb250RGF0YSgpOwotICAg
IGVsc2UKLSAgICAgICAgZ2x5cGhQYWdlID0gR2x5cGhQYWdlOjpjcmVhdGVGb3JTaW5nbGVGb250
RGF0YShmb250RGF0YSk7Ci0KLSAgICBib29sIGhhdmVHbHlwaHMgPSBmaWxsR2x5cGhQYWdlKCpn
bHlwaFBhZ2UsIDAsIEdseXBoUGFnZTo6c2l6ZSwgYnVmZmVyLCBidWZmZXJMZW5ndGgsIGZvbnRE
YXRhKTsKLSAgICBpZiAoIWhhdmVHbHlwaHMpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0g
ICAgZ2x5cGhQYWdlLT5zZXRJbW11dGFibGUoKTsKLSAgICByZXR1cm4gZ2x5cGhQYWdlOwotfQot
Ci1jb25zdCBHbHlwaFBhZ2UqIFNpbXBsZUZvbnREYXRhOjpnbHlwaFBhZ2UodW5zaWduZWQgcGFn
ZU51bWJlcikgY29uc3QKLXsKLSAgICBpZiAocGFnZU51bWJlciA9PSAwKSB7Ci0gICAgICAgIGlm
ICghbV9nbHlwaFBhZ2VaZXJvKQotICAgICAgICAgICAgbV9nbHlwaFBhZ2VaZXJvID0gY3JlYXRl
QW5kRmlsbEdseXBoUGFnZSgwLCB0aGlzKTsKLSAgICAgICAgcmV0dXJuIG1fZ2x5cGhQYWdlWmVy
by5nZXQoKTsKLSAgICB9Ci0gICAgYXV0byBhZGRSZXN1bHQgPSBtX2dseXBoUGFnZXMuYWRkKHBh
Z2VOdW1iZXIsIG51bGxwdHIpOwotICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAg
ICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGNyZWF0ZUFuZEZpbGxHbHlwaFBhZ2UocGFn
ZU51bWJlciwgdGhpcyk7Ci0KLSAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5n
ZXQoKTsKLX0KLQotR2x5cGggU2ltcGxlRm9udERhdGE6OmdseXBoRm9yQ2hhcmFjdGVyKFVDaGFy
MzIgY2hhcmFjdGVyKSBjb25zdAotewotICAgIGF1dG8qIHBhZ2UgPSBnbHlwaFBhZ2UoY2hhcmFj
dGVyIC8gR2x5cGhQYWdlOjpzaXplKTsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVybiAw
OwotICAgIHJldHVybiBwYWdlLT5nbHlwaEF0KGNoYXJhY3RlciAlIEdseXBoUGFnZTo6c2l6ZSk7
Ci19Ci0KLUdseXBoRGF0YSBTaW1wbGVGb250RGF0YTo6Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVD
aGFyMzIgY2hhcmFjdGVyKSBjb25zdAotewotICAgIGF1dG8qIHBhZ2UgPSBnbHlwaFBhZ2UoY2hh
cmFjdGVyIC8gR2x5cGhQYWdlOjpzaXplKTsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVy
biBHbHlwaERhdGEoKTsKLSAgICByZXR1cm4gcGFnZS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNo
YXJhY3Rlcik7Ci19Ci0KLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRh
Ojp2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250RGF0YSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFt
X2Rlcml2ZWRGb250RGF0YSkKLSAgICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBzdGQ6Om1ha2Vf
dW5pcXVlPERlcml2ZWRGb250RGF0YT4oaXNDdXN0b21Gb250KCkpOwotICAgIGlmICghbV9kZXJp
dmVkRm9udERhdGEtPnZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbikgewotICAgICAgICBGb250UGxh
dGZvcm1EYXRhIHZlcnRpY2FsUmlnaHRQbGF0Zm9ybURhdGEobV9wbGF0Zm9ybURhdGEpOwotICAg
ICAgICB2ZXJ0aWNhbFJpZ2h0UGxhdGZvcm1EYXRhLnNldE9yaWVudGF0aW9uKEhvcml6b250YWwp
OwotICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+dmVydGljYWxSaWdodE9yaWVudGF0aW9uID0g
Y3JlYXRlKHZlcnRpY2FsUmlnaHRQbGF0Zm9ybURhdGEsIGlzQ3VzdG9tRm9udCgpLCBmYWxzZSwg
dHJ1ZSk7Ci0gICAgfQotICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+dmVydGljYWxSaWdo
dE9yaWVudGF0aW9uOwotfQotCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250
RGF0YTo6dXByaWdodE9yaWVudGF0aW9uRm9udERhdGEoKSBjb25zdAotewotICAgIGlmICghbV9k
ZXJpdmVkRm9udERhdGEpCi0gICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gc3RkOjptYWtlX3Vu
aXF1ZTxEZXJpdmVkRm9udERhdGE+KGlzQ3VzdG9tRm9udCgpKTsKLSAgICBpZiAoIW1fZGVyaXZl
ZEZvbnREYXRhLT51cHJpZ2h0T3JpZW50YXRpb24pCi0gICAgICAgIG1fZGVyaXZlZEZvbnREYXRh
LT51cHJpZ2h0T3JpZW50YXRpb24gPSBjcmVhdGUobV9wbGF0Zm9ybURhdGEsIGlzQ3VzdG9tRm9u
dCgpLCBmYWxzZSwgdHJ1ZSk7Ci0gICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT51cHJpZ2h0
T3JpZW50YXRpb247Ci19Ci0KLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnRE
YXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlw
dGlvbikgY29uc3QKLXsKLSAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQotICAgICAgICBtX2Rl
cml2ZWRGb250RGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8RGVyaXZlZEZvbnREYXRhPihpc0N1c3Rv
bUZvbnQoKSk7Ci0gICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzKQotICAgICAg
ICBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9u
dERlc2NyaXB0aW9uLCBzbWFsbENhcHNGb250U2l6ZU11bHRpcGxpZXIpOwotCi0gICAgcmV0dXJu
IG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHM7Ci19Ci0KLVBhc3NSZWZQdHI8U2ltcGxlRm9u
dERhdGE+IFNpbXBsZUZvbnREYXRhOjplbXBoYXNpc01hcmtGb250RGF0YShjb25zdCBGb250RGVz
Y3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKLXsKLSAgICBpZiAoIW1fZGVyaXZlZEZv
bnREYXRhKQotICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8RGVy
aXZlZEZvbnREYXRhPihpc0N1c3RvbUZvbnQoKSk7Ci0gICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0
YS0+ZW1waGFzaXNNYXJrKQotICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJr
ID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9uLCBlbXBoYXNpc01hcmtGb250
U2l6ZU11bHRpcGxpZXIpOwotCi0gICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNp
c01hcms7Ci19Ci0KLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpi
cm9rZW5JZGVvZ3JhcGhGb250RGF0YSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2Rlcml2ZWRGb250
RGF0YSkKLSAgICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPERlcml2
ZWRGb250RGF0YT4oaXNDdXN0b21Gb250KCkpOwotICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEt
PmJyb2tlbklkZW9ncmFwaCkgewotICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+YnJva2VuSWRl
b2dyYXBoID0gY3JlYXRlKG1fcGxhdGZvcm1EYXRhLCBpc0N1c3RvbUZvbnQoKSwgZmFsc2UpOwot
ICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+YnJva2VuSWRlb2dyYXBoLT5tX2lzQnJva2VuSWRl
b2dyYXBoRmFsbGJhY2sgPSB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gbV9kZXJpdmVkRm9udERh
dGEtPmJyb2tlbklkZW9ncmFwaDsKLX0KLQotUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2lt
cGxlRm9udERhdGE6Om5vblN5bnRoZXRpY0l0YWxpY0ZvbnREYXRhKCkgY29uc3QKLXsKLSAgICBp
ZiAoIW1fZGVyaXZlZEZvbnREYXRhKQotICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IHN0ZDo6
bWFrZV91bmlxdWU8RGVyaXZlZEZvbnREYXRhPihpc0N1c3RvbUZvbnQoKSk7Ci0gICAgaWYgKCFt
X2Rlcml2ZWRGb250RGF0YS0+bm9uU3ludGhldGljSXRhbGljKSB7Ci0gICAgICAgIEZvbnRQbGF0
Zm9ybURhdGEgbm9uU3ludGhldGljSXRhbGljRm9udFBsYXRmb3JtRGF0YShtX3BsYXRmb3JtRGF0
YSk7Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgICAgIG5vblN5bnRoZXRpY0l0YWxpY0ZvbnRQ
bGF0Zm9ybURhdGEubV9zeW50aGV0aWNPYmxpcXVlID0gZmFsc2U7Ci0jZW5kaWYKLSAgICAgICAg
bV9kZXJpdmVkRm9udERhdGEtPm5vblN5bnRoZXRpY0l0YWxpYyA9IGNyZWF0ZShub25TeW50aGV0
aWNJdGFsaWNGb250UGxhdGZvcm1EYXRhLCBpc0N1c3RvbUZvbnQoKSk7Ci0gICAgfQotICAgIHJl
dHVybiBtX2Rlcml2ZWRGb250RGF0YS0+bm9uU3ludGhldGljSXRhbGljOwotfQotCi0jaWZuZGVm
IE5ERUJVRwotU3RyaW5nIFNpbXBsZUZvbnREYXRhOjpkZXNjcmlwdGlvbigpIGNvbnN0Ci17Ci0g
ICAgaWYgKGlzU1ZHRm9udCgpKQotICAgICAgICByZXR1cm4gIltTVkcgZm9udF0iOwotICAgIGlm
IChpc0N1c3RvbUZvbnQoKSkKLSAgICAgICAgcmV0dXJuICJbY3VzdG9tIGZvbnRdIjsKLQotICAg
IHJldHVybiBwbGF0Zm9ybURhdGEoKS5kZXNjcmlwdGlvbigpOwotfQotI2VuZGlmCi0KLWNvbnN0
IE9wZW5UeXBlTWF0aERhdGEqIFNpbXBsZUZvbnREYXRhOjptYXRoRGF0YSgpIGNvbnN0Ci17Ci0g
ICAgaWYgKG1faXNMb2FkaW5nKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIW1f
bWF0aERhdGEpIHsKLSAgICAgICAgbV9tYXRoRGF0YSA9IE9wZW5UeXBlTWF0aERhdGE6OmNyZWF0
ZShtX3BsYXRmb3JtRGF0YSk7Ci0gICAgICAgIGlmICghbV9tYXRoRGF0YS0+aGFzTWF0aERhdGEo
KSkKLSAgICAgICAgICAgIG1fbWF0aERhdGEuY2xlYXIoKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1f
bWF0aERhdGEuZ2V0KCk7Ci19Ci0KLVNpbXBsZUZvbnREYXRhOjpEZXJpdmVkRm9udERhdGE6On5E
ZXJpdmVkRm9udERhdGEoKQotewotfQotCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1w
bGVGb250RGF0YTo6Y3JlYXRlU2NhbGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBm
b250RGVzY3JpcHRpb24sIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAotewotICAgIGlmIChpc1NW
R0ZvbnQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gcGxhdGZvcm1D
cmVhdGVTY2FsZWRGb250RGF0YShmb250RGVzY3JpcHRpb24sIHNjYWxlRmFjdG9yKTsKLX0KLQot
Ym9vbCBTaW1wbGVGb250RGF0YTo6YXBwbHlUcmFuc2Zvcm1zKEdseXBoQnVmZmVyR2x5cGgqIGds
eXBocywgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgc2l6ZV90IGdseXBoQ291bnQsIFR5
cGVzZXR0aW5nRmVhdHVyZXMgdHlwZXNldHRpbmdGZWF0dXJlcykgY29uc3QKLXsKLSAgICAvLyBX
ZSBuZWVkIHRvIGhhbmRsZSB0cmFuc2Zvcm1zIG9uIFNWRyBmb250cyBpbnRlcm5hbGx5LCBzaW5j
ZSB0aGV5IGFyZSByZW5kZXJlZCBpbnRlcm5hbGx5LgotICAgIEFTU0VSVCghaXNTVkdGb250KCkp
OwotI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJT
SU9OX01JTl9SRVFVSVJFRCA+IDEwODApCi0gICAgQ1RGb250VHJhbnNmb3JtT3B0aW9ucyBvcHRp
b25zID0gKHR5cGVzZXR0aW5nRmVhdHVyZXMgJiBLZXJuaW5nID8ga0NURm9udFRyYW5zZm9ybUFw
cGx5UG9zaXRpb25pbmcgOiAwKSB8ICh0eXBlc2V0dGluZ0ZlYXR1cmVzICYgTGlnYXR1cmVzID8g
a0NURm9udFRyYW5zZm9ybUFwcGx5U2hhcGluZyA6IDApOwotICAgIHJldHVybiBDVEZvbnRUcmFu
c2Zvcm1HbHlwaHMobV9wbGF0Zm9ybURhdGEuY3RGb250KCksIGdseXBocywgcmVpbnRlcnByZXRf
Y2FzdDxDR1NpemUqPihhZHZhbmNlcyksIGdseXBoQ291bnQsIG9wdGlvbnMpOwotI2Vsc2UKLSAg
ICBVTlVTRURfUEFSQU0oZ2x5cGhzKTsKLSAgICBVTlVTRURfUEFSQU0oYWR2YW5jZXMpOwotICAg
IFVOVVNFRF9QQVJBTShnbHlwaENvdW50KTsKLSAgICBVTlVTRURfUEFSQU0odHlwZXNldHRpbmdG
ZWF0dXJlcyk7Ci0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLS8vIEZvbnREYXRhcyBh
cmUgbm90IHJlZmNvdW50ZWQgdG8gYXZvaWQgY3ljbGVzLgotdHlwZWRlZiBIYXNoTWFwPHN0ZDo6
cGFpcjxVQ2hhcjMyLCB1bnNpZ25lZD4sIFNpbXBsZUZvbnREYXRhKj4gQ2hhcmFjdGVyRmFsbGJh
Y2tNYXA7Ci10eXBlZGVmIEhhc2hNYXA8Y29uc3QgU2ltcGxlRm9udERhdGEqLCBDaGFyYWN0ZXJG
YWxsYmFja01hcD4gU3lzdGVtRmFsbGJhY2tDYWNoZTsKLQotc3RhdGljIFN5c3RlbUZhbGxiYWNr
Q2FjaGUmIHN5c3RlbUZhbGxiYWNrQ2FjaGUoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxTeXN0ZW1GYWxsYmFja0NhY2hlPiBtYXA7Ci0gICAgcmV0dXJuIG1hcC5nZXQoKTsKLX0KLQot
UmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6c3lzdGVtRmFsbGJhY2tGb250
RGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGNoYXJhY3RlciwgY29uc3QgRm9udERlc2NyaXB0aW9u
JiBkZXNjcmlwdGlvbiwgYm9vbCBpc0ZvclBsYXRmb3JtRm9udCkgY29uc3QKLXsKLSAgICBhdXRv
IGZvbnRBZGRSZXN1bHQgPSBzeXN0ZW1GYWxsYmFja0NhY2hlKCkuYWRkKHRoaXMsIENoYXJhY3Rl
ckZhbGxiYWNrTWFwKCkpOwotCi0gICAgYXV0byBrZXkgPSBzdGQ6Om1ha2VfcGFpcihjaGFyYWN0
ZXIsIGlzRm9yUGxhdGZvcm1Gb250KTsKLSAgICBhdXRvIGNoYXJhY3RlckFkZFJlc3VsdCA9IGZv
bnRBZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFkZChrZXksIG51bGxwdHIpOwotCi0gICAgU2lt
cGxlRm9udERhdGEqJiBmYWxsYmFja0ZvbnREYXRhID0gY2hhcmFjdGVyQWRkUmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZTsKLQotICAgIGlmICghZmFsbGJhY2tGb250RGF0YSkgewotICAgICAgICBVQ2hh
ciBjb2RlVW5pdHNbMl07Ci0gICAgICAgIGludCBjb2RlVW5pdHNMZW5ndGg7Ci0gICAgICAgIGlm
IChVX0lTX0JNUChjaGFyYWN0ZXIpKSB7Ci0gICAgICAgICAgICBjb2RlVW5pdHNbMF0gPSBGb250
Q2FzY2FkZTo6bm9ybWFsaXplU3BhY2VzKGNoYXJhY3Rlcik7Ci0gICAgICAgICAgICBjb2RlVW5p
dHNMZW5ndGggPSAxOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29kZVVuaXRzWzBd
ID0gVTE2X0xFQUQoY2hhcmFjdGVyKTsKLSAgICAgICAgICAgIGNvZGVVbml0c1sxXSA9IFUxNl9U
UkFJTChjaGFyYWN0ZXIpOwotICAgICAgICAgICAgY29kZVVuaXRzTGVuZ3RoID0gMjsKLSAgICAg
ICAgfQotCi0gICAgICAgIGZhbGxiYWNrRm9udERhdGEgPSBmb250Q2FjaGUoKS5zeXN0ZW1GYWxs
YmFja0ZvckNoYXJhY3RlcnMoZGVzY3JpcHRpb24sIHRoaXMsIGlzRm9yUGxhdGZvcm1Gb250LCBj
b2RlVW5pdHMsIGNvZGVVbml0c0xlbmd0aCkuZ2V0KCk7Ci0gICAgICAgIGlmIChmYWxsYmFja0Zv
bnREYXRhKQotICAgICAgICAgICAgZmFsbGJhY2tGb250RGF0YS0+bV9pc1VzZWRJblN5c3RlbUZh
bGxiYWNrQ2FjaGUgPSB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxsYmFja0ZvbnREYXRh
OwotfQotCi12b2lkIFNpbXBsZUZvbnREYXRhOjpyZW1vdmVGcm9tU3lzdGVtRmFsbGJhY2tDYWNo
ZSgpCi17Ci0gICAgc3lzdGVtRmFsbGJhY2tDYWNoZSgpLnJlbW92ZSh0aGlzKTsKLQotICAgIGlm
ICghbV9pc1VzZWRJblN5c3RlbUZhbGxiYWNrQ2FjaGUpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGZvciAoYXV0byYgY2hhcmFjdGVyTWFwIDogc3lzdGVtRmFsbGJhY2tDYWNoZSgpLnZhbHVlcygp
KSB7Ci0gICAgICAgIFZlY3RvcjxzdGQ6OnBhaXI8VUNoYXIzMiwgdW5zaWduZWQ+LCA1MTI+IHRv
UmVtb3ZlOwotICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogY2hhcmFjdGVyTWFwKSB7Ci0gICAg
ICAgICAgICBpZiAoZW50cnkudmFsdWUgPT0gdGhpcykKLSAgICAgICAgICAgICAgICB0b1JlbW92
ZS5hcHBlbmQoZW50cnkua2V5KTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKGF1dG8mIGtleSA6
IHRvUmVtb3ZlKQotICAgICAgICAgICAgY2hhcmFjdGVyTWFwLnJlbW92ZShrZXkpOwotICAgIH0K
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCShyZXZpc2lvbiAxNzg4NTcpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDM2OSArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIGludGVybmFsIGZvbnQgaW1wbGVtZW50YXRpb24uCi0gKgotICogQ29weXJpZ2h0IChDKSAy
MDA2LCAyMDA4LCAyMDEwLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAwNy0yMDA4IFRvcmNoIE1vYmlsZSwgSW5jLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBT
aW1wbGVGb250RGF0YV9oCi0jZGVmaW5lIFNpbXBsZUZvbnREYXRhX2gKLQotI2luY2x1ZGUgIkZv
bnRCYXNlbGluZS5oIgotI2luY2x1ZGUgIkZvbnRNZXRyaWNzLmgiCi0jaW5jbHVkZSAiRm9udFBs
YXRmb3JtRGF0YS5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkdseXBoQnVm
ZmVyLmgiCi0jaW5jbHVkZSAiR2x5cGhNZXRyaWNzTWFwLmgiCi0jaW5jbHVkZSAiR2x5cGhQYWdl
LmgiCi0jaW5jbHVkZSAiT3BlblR5cGVNYXRoRGF0YS5oIgotI2lmIEVOQUJMRShPUEVOVFlQRV9W
RVJUSUNBTCkKLSNpbmNsdWRlICJPcGVuVHlwZVZlcnRpY2FsRGF0YS5oIgotI2VuZGlmCi0jaW5j
bHVkZSAiVHlwZXNldHRpbmdGZWF0dXJlcy5oIgotI2luY2x1ZGUgPHd0Zi9UeXBlQ2FzdHMuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0KLSNpZiBQTEFURk9STShDT0NPQSkK
LSNpbmNsdWRlICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCi0jaW5jbHVkZSA8d3RmL1JldGFp
blB0ci5oPgotI2VuZGlmCi0KLSNpZiBQTEFURk9STShXSU4pCi0jaW5jbHVkZSA8dXNwMTAuaD4K
LSNlbmRpZgotCi0jaWYgVVNFKENBSVJPKQotI2luY2x1ZGUgPGNhaXJvLmg+Ci0jZW5kaWYKLQot
I2lmIFVTRShDRykKLSNpbmNsdWRlIDxXZWJDb3JlL0NvcmVHcmFwaGljc1NQSS5oPgotI2VuZGlm
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgR2x5cGhQYWdlOwotY2xhc3MgRm9udERl
c2NyaXB0aW9uOwotY2xhc3MgU2hhcmVkQnVmZmVyOwotc3RydWN0IEdseXBoRGF0YTsKLXN0cnVj
dCBXaWR0aEl0ZXJhdG9yOwotCi1lbnVtIEZvbnREYXRhVmFyaWFudCB7IEF1dG9WYXJpYW50LCBO
b3JtYWxWYXJpYW50LCBTbWFsbENhcHNWYXJpYW50LCBFbXBoYXNpc01hcmtWYXJpYW50LCBCcm9r
ZW5JZGVvZ3JhcGhWYXJpYW50IH07Ci1lbnVtIFBpdGNoIHsgVW5rbm93blBpdGNoLCBGaXhlZFBp
dGNoLCBWYXJpYWJsZVBpdGNoIH07Ci0KLWNsYXNzIFNpbXBsZUZvbnREYXRhIDogcHVibGljIFJl
ZkNvdW50ZWQ8U2ltcGxlRm9udERhdGE+IHsKLXB1YmxpYzoKLSAgICBjbGFzcyBTVkdEYXRhIHsK
LSAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgcHVibGljOgotICAgICAgICB2
aXJ0dWFsIH5TVkdEYXRhKCkgeyB9Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVG
b250RGF0YShTaW1wbGVGb250RGF0YSosIGZsb2F0IGZvbnRTaXplKSA9IDA7Ci0gICAgICAgIHZp
cnR1YWwgZmxvYXQgd2lkdGhGb3JTVkdHbHlwaChHbHlwaCwgZmxvYXQgZm9udFNpemUpIGNvbnN0
ID0gMDsKLSAgICAgICAgdmlydHVhbCBib29sIGZpbGxTVkdHbHlwaFBhZ2UoR2x5cGhQYWdlKiwg
dW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIsIHVuc2lnbmVk
IGJ1ZmZlckxlbmd0aCwgY29uc3QgU2ltcGxlRm9udERhdGEqKSBjb25zdCA9IDA7Ci0gICAgfTsK
LQotICAgIC8vIFVzZWQgdG8gY3JlYXRlIHBsYXRmb3JtIGZvbnRzLgotICAgIHN0YXRpYyBSZWY8
U2ltcGxlRm9udERhdGE+IGNyZWF0ZShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURh
dGEsIGJvb2wgaXNDdXN0b21Gb250ID0gZmFsc2UsIGJvb2wgaXNMb2FkaW5nID0gZmFsc2UsIGJv
b2wgaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjayA9IGZhbHNlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgU2ltcGxlRm9udERhdGEocGxhdGZvcm1EYXRhLCBpc0N1c3RvbUZv
bnQsIGlzTG9hZGluZywgaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaykpOwotICAgIH0KLQotICAg
IC8vIFVzZWQgdG8gY3JlYXRlIFNWRyBGb250cy4KLSAgICBzdGF0aWMgUmVmPFNpbXBsZUZvbnRE
YXRhPiBjcmVhdGUoc3RkOjp1bmlxdWVfcHRyPFNWR0RhdGE+IHN2Z0RhdGEsIGZsb2F0IGZvbnRT
aXplLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2ltcGxlRm9udERhdGEoV1RGOjptb3ZlKHN2Z0Rh
dGEpLCBmb250U2l6ZSwgc3ludGhldGljQm9sZCwgc3ludGhldGljSXRhbGljKSk7Ci0gICAgfQot
Ci0gICAgflNpbXBsZUZvbnREYXRhKCk7Ci0KLSAgICBzdGF0aWMgY29uc3QgU2ltcGxlRm9udERh
dGEqIHN5c3RlbUZhbGxiYWNrKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBTaW1w
bGVGb250RGF0YSo+KC0xKTsgfQotCi0gICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZv
cm1EYXRhKCkgY29uc3QgeyByZXR1cm4gbV9wbGF0Zm9ybURhdGE7IH0KLSAgICBjb25zdCBPcGVu
VHlwZU1hdGhEYXRhKiBtYXRoRGF0YSgpIGNvbnN0OwotI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJU
SUNBTCkKLSAgICBjb25zdCBPcGVuVHlwZVZlcnRpY2FsRGF0YSogdmVydGljYWxEYXRhKCkgY29u
c3QgeyByZXR1cm4gbV92ZXJ0aWNhbERhdGEuZ2V0KCk7IH0KLSNlbmRpZgotCi0gICAgUGFzc1Jl
ZlB0cjxTaW1wbGVGb250RGF0YT4gc21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0
aW9uJikgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gZW1waGFzaXNNYXJr
Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJikgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxT
aW1wbGVGb250RGF0YT4gYnJva2VuSWRlb2dyYXBoRm9udERhdGEoKSBjb25zdDsKLSAgICBQYXNz
UmVmUHRyPFNpbXBsZUZvbnREYXRhPiBub25TeW50aGV0aWNJdGFsaWNGb250RGF0YSgpIGNvbnN0
OwotCi0gICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gdmFyaWFudEZvbnREYXRhKGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIEZvbnREYXRhVmFyaWFudCB2YXJpYW50KSBj
b25zdAotICAgIHsKLSAgICAgICAgc3dpdGNoICh2YXJpYW50KSB7Ci0gICAgICAgIGNhc2UgU21h
bGxDYXBzVmFyaWFudDoKLSAgICAgICAgICAgIHJldHVybiBzbWFsbENhcHNGb250RGF0YShkZXNj
cmlwdGlvbik7Ci0gICAgICAgIGNhc2UgRW1waGFzaXNNYXJrVmFyaWFudDoKLSAgICAgICAgICAg
IHJldHVybiBlbXBoYXNpc01hcmtGb250RGF0YShkZXNjcmlwdGlvbik7Ci0gICAgICAgIGNhc2Ug
QnJva2VuSWRlb2dyYXBoVmFyaWFudDoKLSAgICAgICAgICAgIHJldHVybiBicm9rZW5JZGVvZ3Jh
cGhGb250RGF0YSgpOwotICAgICAgICBjYXNlIEF1dG9WYXJpYW50OgotICAgICAgICBjYXNlIE5v
cm1hbFZhcmlhbnQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8U2ltcGxlRm9udERh
dGEqPih0aGlzKTsKLSAgICB9Ci0KLSAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiB2ZXJ0
aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250RGF0YSgpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8U2lt
cGxlRm9udERhdGE+IHVwcmlnaHRPcmllbnRhdGlvbkZvbnREYXRhKCkgY29uc3Q7Ci0KLSAgICBi
b29sIGhhc1ZlcnRpY2FsR2x5cGhzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNWZXJ0aWNhbEdseXBo
czsgfQotICAgIGJvb2wgaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaygpIGNvbnN0IHsgcmV0dXJu
IG1faXNUZXh0T3JpZW50YXRpb25GYWxsYmFjazsgfQotCi0gICAgRm9udE1ldHJpY3MmIGZvbnRN
ZXRyaWNzKCkgeyByZXR1cm4gbV9mb250TWV0cmljczsgfQotICAgIGNvbnN0IEZvbnRNZXRyaWNz
JiBmb250TWV0cmljcygpIGNvbnN0IHsgcmV0dXJuIG1fZm9udE1ldHJpY3M7IH0KLSAgICBmbG9h
dCBzaXplUGVyVW5pdCgpIGNvbnN0IHsgcmV0dXJuIHBsYXRmb3JtRGF0YSgpLnNpemUoKSAvIChm
b250TWV0cmljcygpLnVuaXRzUGVyRW0oKSA/IGZvbnRNZXRyaWNzKCkudW5pdHNQZXJFbSgpIDog
MSk7IH0KLQotICAgIGZsb2F0IG1heENoYXJXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4Q2hh
cldpZHRoOyB9Ci0gICAgdm9pZCBzZXRNYXhDaGFyV2lkdGgoZmxvYXQgbWF4Q2hhcldpZHRoKSB7
IG1fbWF4Q2hhcldpZHRoID0gbWF4Q2hhcldpZHRoOyB9Ci0KLSAgICBmbG9hdCBhdmdDaGFyV2lk
dGgoKSBjb25zdCB7IHJldHVybiBtX2F2Z0NoYXJXaWR0aDsgfQotICAgIHZvaWQgc2V0QXZnQ2hh
cldpZHRoKGZsb2F0IGF2Z0NoYXJXaWR0aCkgeyBtX2F2Z0NoYXJXaWR0aCA9IGF2Z0NoYXJXaWR0
aDsgfQotCi0gICAgRmxvYXRSZWN0IGJvdW5kc0ZvckdseXBoKEdseXBoKSBjb25zdDsKLSAgICBm
bG9hdCB3aWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdDsKLSAgICBGbG9hdFJlY3QgcGxh
dGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCkgY29uc3Q7Ci0gICAgZmxvYXQgcGxhdGZvcm1XaWR0
aEZvckdseXBoKEdseXBoKSBjb25zdDsKLQotICAgIGZsb2F0IHNwYWNlV2lkdGgoKSBjb25zdCB7
IHJldHVybiBtX3NwYWNlV2lkdGg7IH0KLSAgICBmbG9hdCBhZGp1c3RlZFNwYWNlV2lkdGgoKSBj
b25zdCB7IHJldHVybiBtX2FkanVzdGVkU3BhY2VXaWR0aDsgfQotICAgIHZvaWQgc2V0U3BhY2VX
aWR0aHMoZmxvYXQgc3BhY2VXaWR0aCkKLSAgICB7Ci0gICAgICAgIG1fc3BhY2VXaWR0aCA9IHNw
YWNlV2lkdGg7Ci0gICAgICAgIG1fYWRqdXN0ZWRTcGFjZVdpZHRoID0gc3BhY2VXaWR0aDsKLSAg
ICB9Ci0KLSNpZiBVU0UoQ0cpIHx8IFVTRShDQUlSTykKLSAgICBmbG9hdCBzeW50aGV0aWNCb2xk
T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9zeW50aGV0aWNCb2xkT2Zmc2V0OyB9Ci0jZW5kaWYK
LQotICAgIEdseXBoIHNwYWNlR2x5cGgoKSBjb25zdCB7IHJldHVybiBtX3NwYWNlR2x5cGg7IH0K
LSAgICB2b2lkIHNldFNwYWNlR2x5cGgoR2x5cGggc3BhY2VHbHlwaCkgeyBtX3NwYWNlR2x5cGgg
PSBzcGFjZUdseXBoOyB9Ci0gICAgR2x5cGggemVyb1dpZHRoU3BhY2VHbHlwaCgpIGNvbnN0IHsg
cmV0dXJuIG1femVyb1dpZHRoU3BhY2VHbHlwaDsgfQotICAgIHZvaWQgc2V0WmVyb1dpZHRoU3Bh
Y2VHbHlwaChHbHlwaCBzcGFjZUdseXBoKSB7IG1femVyb1dpZHRoU3BhY2VHbHlwaCA9IHNwYWNl
R2x5cGg7IH0KLSAgICBib29sIGlzWmVyb1dpZHRoU3BhY2VHbHlwaChHbHlwaCBnbHlwaCkgY29u
c3QgeyByZXR1cm4gZ2x5cGggPT0gbV96ZXJvV2lkdGhTcGFjZUdseXBoICYmIGdseXBoOyB9Ci0g
ICAgR2x5cGggemVyb0dseXBoKCkgY29uc3QgeyByZXR1cm4gbV96ZXJvR2x5cGg7IH0KLSAgICB2
b2lkIHNldFplcm9HbHlwaChHbHlwaCB6ZXJvR2x5cGgpIHsgbV96ZXJvR2x5cGggPSB6ZXJvR2x5
cGg7IH0KLQotICAgIEdseXBoRGF0YSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMikgY29u
c3Q7Ci0gICAgR2x5cGggZ2x5cGhGb3JDaGFyYWN0ZXIoVUNoYXIzMikgY29uc3Q7Ci0KLSAgICBS
ZWZQdHI8U2ltcGxlRm9udERhdGE+IHN5c3RlbUZhbGxiYWNrRm9udERhdGFGb3JDaGFyYWN0ZXIo
VUNoYXIzMiwgY29uc3QgRm9udERlc2NyaXB0aW9uJiwgYm9vbCBpc0ZvclBsYXRmb3JtRm9udCkg
Y29uc3Q7Ci0KLSAgICBjb25zdCBHbHlwaFBhZ2UqIGdseXBoUGFnZSh1bnNpZ25lZCBwYWdlTnVt
YmVyKSBjb25zdDsKLQotICAgIHZvaWQgZGV0ZXJtaW5lUGl0Y2goKTsKLSAgICBQaXRjaCBwaXRj
aCgpIGNvbnN0IHsgcmV0dXJuIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPyBGaXhlZFBpdGNoIDogVmFy
aWFibGVQaXRjaDsgfQotCi0gICAgY29uc3QgU1ZHRGF0YSogc3ZnRGF0YSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3ZnRGF0YS5nZXQoKTsgfQotICAgIGJvb2wgaXNTVkdGb250KCkgY29uc3QgeyByZXR1
cm4gISFtX3N2Z0RhdGE7IH0KLQotICAgIGJvb2wgaXNDdXN0b21Gb250KCkgY29uc3QgeyByZXR1
cm4gbV9pc0N1c3RvbUZvbnQ7IH0KLSAgICBib29sIGlzTG9hZGluZygpIGNvbnN0IHsgcmV0dXJu
IG1faXNMb2FkaW5nOyB9Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgU3RyaW5nIGRlc2NyaXB0aW9u
KCkgY29uc3Q7Ci0jZW5kaWYKLQotI2lmIFVTRShBUFBLSVQpCi0gICAgY29uc3QgU2ltcGxlRm9u
dERhdGEqIGNvbXBvc2l0ZUZvbnRSZWZlcmVuY2VGb250RGF0YShOU0ZvbnQgKmtleSkgY29uc3Q7
Ci0gICAgTlNGb250KiBnZXROU0ZvbnQoKSBjb25zdCB7IHJldHVybiBtX3BsYXRmb3JtRGF0YS5u
c0ZvbnQoKTsgfQotI2VuZGlmCi0KLSNpZiBQTEFURk9STShJT1MpCi0gICAgQ1RGb250UmVmIGdl
dENURm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fcGxhdGZvcm1EYXRhLmZvbnQoKTsgfQotICAgIGJv
b2wgc2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGROb3RC
ZVVzZWRGb3JBcmFiaWM7IH07Ci0jZW5kaWYKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBDRkRp
Y3Rpb25hcnlSZWYgZ2V0Q0ZTdHJpbmdBdHRyaWJ1dGVzKFR5cGVzZXR0aW5nRmVhdHVyZXMsIEZv
bnRPcmllbnRhdGlvbikgY29uc3Q7Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBV
U0UoSEFSRkJVWlopCi0gICAgYm9vbCBjYW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5j
ZShjb25zdCBVQ2hhciosIHNpemVfdCkgY29uc3Q7Ci0jZW5kaWYKLQotICAgIGJvb2wgYXBwbHlU
cmFuc2Zvcm1zKEdseXBoQnVmZmVyR2x5cGgqLCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCBzaXplX3Qg
Z2x5cGhDb3VudCwgVHlwZXNldHRpbmdGZWF0dXJlcykgY29uc3Q7Ci0KLSNpZiBQTEFURk9STShX
SU4pCi0gICAgYm9vbCBpc1N5c3RlbUZvbnQoKSBjb25zdCB7IHJldHVybiBtX2lzU3lzdGVtRm9u
dDsgfQotICAgIFNDUklQVF9GT05UUFJPUEVSVElFUyogc2NyaXB0Rm9udFByb3BlcnRpZXMoKSBj
b25zdDsKLSAgICBTQ1JJUFRfQ0FDSEUqIHNjcmlwdENhY2hlKCkgY29uc3QgeyByZXR1cm4gJm1f
c2NyaXB0Q2FjaGU7IH0KLSAgICBzdGF0aWMgdm9pZCBzZXRTaG91bGRBcHBseU1hY0FzY2VudEhh
Y2soYm9vbCk7Ci0gICAgc3RhdGljIGJvb2wgc2hvdWxkQXBwbHlNYWNBc2NlbnRIYWNrKCk7Ci0g
ICAgc3RhdGljIGZsb2F0IGFzY2VudENvbnNpZGVyaW5nTWFjQXNjZW50SGFjayhjb25zdCBXQ0hB
UiosIGZsb2F0IGFzY2VudCwgZmxvYXQgZGVzY2VudCk7Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAg
ICBTaW1wbGVGb250RGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiwgYm9vbCBpc0N1c3RvbUZv
bnQgPSBmYWxzZSwgYm9vbCBpc0xvYWRpbmcgPSBmYWxzZSwgYm9vbCBpc1RleHRPcmllbnRhdGlv
bkZhbGxiYWNrID0gZmFsc2UpOwotCi0gICAgU2ltcGxlRm9udERhdGEoc3RkOjp1bmlxdWVfcHRy
PFNWR0RhdGE+LCBmbG9hdCBmb250U2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRo
ZXRpY0l0YWxpYyk7Ci0KLSAgICB2b2lkIHBsYXRmb3JtSW5pdCgpOwotICAgIHZvaWQgcGxhdGZv
cm1HbHlwaEluaXQoKTsKLSAgICB2b2lkIHBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpOwotICAgIHZv
aWQgcGxhdGZvcm1EZXN0cm95KCk7Ci0KLSAgICB2b2lkIGluaXRDaGFyV2lkdGhzKCk7Ci0KLSAg
ICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBjcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBG
b250RGVzY3JpcHRpb24mLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3Q7Ci0gICAgUGFzc1JlZlB0
cjxTaW1wbGVGb250RGF0YT4gcGxhdGZvcm1DcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGb250
RGVzY3JpcHRpb24mLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3Q7Ci0KLSAgICB2b2lkIHJlbW92
ZUZyb21TeXN0ZW1GYWxsYmFja0NhY2hlKCk7Ci0KLSNpZiBQTEFURk9STShXSU4pCi0gICAgdm9p
ZCBpbml0R0RJRm9udCgpOwotICAgIHZvaWQgcGxhdGZvcm1Db21tb25EZXN0cm95KCk7Ci0gICAg
RmxvYXRSZWN0IGJvdW5kc0ZvckdESUdseXBoKEdseXBoIGdseXBoKSBjb25zdDsKLSAgICBmbG9h
dCB3aWR0aEZvckdESUdseXBoKEdseXBoIGdseXBoKSBjb25zdDsKLSNlbmRpZgotCi0jaWYgVVNF
KENHKQotICAgIGJvb2wgY2FuVXNlRmFzdEdseXBoQWR2YW5jZUdldHRlcihHbHlwaCBnbHlwaCwg
Q0dTaXplJiBhZHZhbmNlLCBib29sJiBwb3B1bGF0ZWRBZHZhbmNlKSBjb25zdDsKLSAgICBDR0Zv
bnRSZW5kZXJpbmdTdHlsZSByZW5kZXJpbmdTdHlsZSgpIGNvbnN0OwotICAgIGJvb2wgYWR2YW5j
ZUZvckNvbG9yQml0bWFwRm9udChHbHlwaCwgQ0dTaXplJiByZXN1bHQpIGNvbnN0OyAvLyBSZXR1
cm5zIHRydWUgaWYgdGhlIGZvbnQgaXMgYSBjb2xvciBiaXRtYXAgZm9udAotI2VuZGlmCi0KLSAg
ICBGb250TWV0cmljcyBtX2ZvbnRNZXRyaWNzOwotICAgIGZsb2F0IG1fbWF4Q2hhcldpZHRoOwot
ICAgIGZsb2F0IG1fYXZnQ2hhcldpZHRoOwotCi0gICAgRm9udFBsYXRmb3JtRGF0YSBtX3BsYXRm
b3JtRGF0YTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U1ZHRGF0YT4gbV9zdmdEYXRhOwotCi0gICAg
bXV0YWJsZSBSZWZQdHI8R2x5cGhQYWdlPiBtX2dseXBoUGFnZVplcm87Ci0gICAgbXV0YWJsZSBI
YXNoTWFwPHVuc2lnbmVkLCBSZWZQdHI8R2x5cGhQYWdlPj4gbV9nbHlwaFBhZ2VzOwotICAgIG11
dGFibGUgc3RkOjp1bmlxdWVfcHRyPEdseXBoTWV0cmljc01hcDxGbG9hdFJlY3Q+PiBtX2dseXBo
VG9Cb3VuZHNNYXA7Ci0gICAgbXV0YWJsZSBHbHlwaE1ldHJpY3NNYXA8ZmxvYXQ+IG1fZ2x5cGhU
b1dpZHRoTWFwOwotCi0gICAgYm9vbCBtX3RyZWF0QXNGaXhlZFBpdGNoOwotICAgIGJvb2wgbV9p
c0N1c3RvbUZvbnQ7ICAvLyBXaGV0aGVyIG9yIG5vdCB3ZSBhcmUgY3VzdG9tIGZvbnQgbG9hZGVk
IHZpYSBAZm9udC1mYWNlCi0gICAgYm9vbCBtX2lzTG9hZGluZzsgLy8gV2hldGhlciBvciBub3Qg
dGhpcyBjdXN0b20gZm9udCBpcyBzdGlsbCBpbiB0aGUgYWN0IG9mIGxvYWRpbmcuCi0KLSAgICBi
b29sIG1faXNUZXh0T3JpZW50YXRpb25GYWxsYmFjazsKLSAgICBib29sIG1faXNCcm9rZW5JZGVv
Z3JhcGhGYWxsYmFjazsKLQotICAgIGJvb2wgbV9pc1VzZWRJblN5c3RlbUZhbGxiYWNrQ2FjaGUg
eyBmYWxzZSB9OwotCi0gICAgbXV0YWJsZSBSZWZQdHI8T3BlblR5cGVNYXRoRGF0YT4gbV9tYXRo
RGF0YTsKLSNpZiBFTkFCTEUoT1BFTlRZUEVfVkVSVElDQUwpCi0gICAgUmVmUHRyPE9wZW5UeXBl
VmVydGljYWxEYXRhPiBtX3ZlcnRpY2FsRGF0YTsKLSNlbmRpZgotICAgIGJvb2wgbV9oYXNWZXJ0
aWNhbEdseXBoczsKLQotICAgIEdseXBoIG1fc3BhY2VHbHlwaDsKLSAgICBmbG9hdCBtX3NwYWNl
V2lkdGg7Ci0gICAgR2x5cGggbV96ZXJvR2x5cGg7Ci0gICAgZmxvYXQgbV9hZGp1c3RlZFNwYWNl
V2lkdGg7Ci0KLSAgICBHbHlwaCBtX3plcm9XaWR0aFNwYWNlR2x5cGg7Ci0KLSAgICBzdHJ1Y3Qg
RGVyaXZlZEZvbnREYXRhIHsKLSAgICAgICAgZXhwbGljaXQgRGVyaXZlZEZvbnREYXRhKGJvb2wg
Y3VzdG9tKQotICAgICAgICAgICAgOiBmb3JDdXN0b21Gb250KGN1c3RvbSkKLSAgICAgICAgewot
ICAgICAgICB9Ci0gICAgICAgIH5EZXJpdmVkRm9udERhdGEoKTsKLQotICAgICAgICBib29sIGZv
ckN1c3RvbUZvbnQ7Ci0gICAgICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gc21hbGxDYXBzOwot
ICAgICAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IGVtcGhhc2lzTWFyazsKLSAgICAgICAgUmVm
UHRyPFNpbXBsZUZvbnREYXRhPiBicm9rZW5JZGVvZ3JhcGg7Ci0gICAgICAgIFJlZlB0cjxTaW1w
bGVGb250RGF0YT4gdmVydGljYWxSaWdodE9yaWVudGF0aW9uOwotICAgICAgICBSZWZQdHI8U2lt
cGxlRm9udERhdGE+IHVwcmlnaHRPcmllbnRhdGlvbjsKLSAgICAgICAgUmVmUHRyPFNpbXBsZUZv
bnREYXRhPiBub25TeW50aGV0aWNJdGFsaWM7Ci0jaWYgVVNFKEFQUEtJVCkKLSAgICAgICAgSGFz
aE1hcDxOU0ZvbnQqLCBSZWZQdHI8U2ltcGxlRm9udERhdGE+PiBjb21wb3NpdGVGb250UmVmZXJl
bmNlczsKLSNlbmRpZgotICAgIH07Ci0KLSAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxEZXJp
dmVkRm9udERhdGE+IG1fZGVyaXZlZEZvbnREYXRhOwotCi0jaWYgVVNFKENHKSB8fCBVU0UoQ0FJ
Uk8pCi0gICAgZmxvYXQgbV9zeW50aGV0aWNCb2xkT2Zmc2V0OwotI2VuZGlmCi0KLSNpZiBQTEFU
Rk9STShDT0NPQSkKLSAgICBtdXRhYmxlIEhhc2hNYXA8dW5zaWduZWQsIFJldGFpblB0cjxDRkRp
Y3Rpb25hcnlSZWY+PiBtX0NGU3RyaW5nQXR0cmlidXRlczsKLSNlbmRpZgotCi0jaWYgUExBVEZP
Uk0oQ09DT0EpIHx8IFVTRShIQVJGQlVaWikKLSAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxI
YXNoTWFwPFN0cmluZywgYm9vbD4+IG1fY29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2VTdXBwb3J0
OwotI2VuZGlmCi0KLSNpZiBQTEFURk9STShXSU4pCi0gICAgYm9vbCBtX2lzU3lzdGVtRm9udDsK
LSAgICBtdXRhYmxlIFNDUklQVF9DQUNIRSBtX3NjcmlwdENhY2hlOwotICAgIG11dGFibGUgU0NS
SVBUX0ZPTlRQUk9QRVJUSUVTKiBtX3NjcmlwdEZvbnRQcm9wZXJ0aWVzOwotI2VuZGlmCi0jaWYg
UExBVEZPUk0oSU9TKQotICAgIGJvb2wgbV9zaG91bGROb3RCZVVzZWRGb3JBcmFiaWM7Ci0jZW5k
aWYKLX07Ci0KLUFMV0FZU19JTkxJTkUgRmxvYXRSZWN0IFNpbXBsZUZvbnREYXRhOjpib3VuZHNG
b3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKLXsKLSAgICBpZiAoaXNaZXJvV2lkdGhTcGFjZUds
eXBoKGdseXBoKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwotCi0gICAgRmxvYXRSZWN0
IGJvdW5kczsKLSAgICBpZiAobV9nbHlwaFRvQm91bmRzTWFwKSB7Ci0gICAgICAgIGJvdW5kcyA9
IG1fZ2x5cGhUb0JvdW5kc01hcC0+bWV0cmljc0ZvckdseXBoKGdseXBoKTsKLSAgICAgICAgaWYg
KGJvdW5kcy53aWR0aCgpICE9IGNHbHlwaFNpemVVbmtub3duKQotICAgICAgICAgICAgcmV0dXJu
IGJvdW5kczsKLSAgICB9Ci0KLSAgICBib3VuZHMgPSBwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKGds
eXBoKTsKLSAgICBpZiAoIW1fZ2x5cGhUb0JvdW5kc01hcCkKLSAgICAgICAgbV9nbHlwaFRvQm91
bmRzTWFwID0gc3RkOjptYWtlX3VuaXF1ZTxHbHlwaE1ldHJpY3NNYXA8RmxvYXRSZWN0Pj4oKTsK
LSAgICBtX2dseXBoVG9Cb3VuZHNNYXAtPnNldE1ldHJpY3NGb3JHbHlwaChnbHlwaCwgYm91bmRz
KTsKLSAgICByZXR1cm4gYm91bmRzOwotfQotCi1BTFdBWVNfSU5MSU5FIGZsb2F0IFNpbXBsZUZv
bnREYXRhOjp3aWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAotewotICAgIGlmIChpc1pl
cm9XaWR0aFNwYWNlR2x5cGgoZ2x5cGgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGZsb2F0
IHdpZHRoID0gbV9nbHlwaFRvV2lkdGhNYXAubWV0cmljc0ZvckdseXBoKGdseXBoKTsKLSAgICBp
ZiAod2lkdGggIT0gY0dseXBoU2l6ZVVua25vd24pCi0gICAgICAgIHJldHVybiB3aWR0aDsKLQot
ICAgIGlmIChpc1NWR0ZvbnQoKSkKLSAgICAgICAgd2lkdGggPSBtX3N2Z0RhdGEtPndpZHRoRm9y
U1ZHR2x5cGgoZ2x5cGgsIG1fcGxhdGZvcm1EYXRhLnNpemUoKSk7Ci0jaWYgRU5BQkxFKE9QRU5U
WVBFX1ZFUlRJQ0FMKQotICAgIGVsc2UgaWYgKG1fdmVydGljYWxEYXRhKQotI2lmIFVTRShDRykg
fHwgVVNFKENBSVJPKQotICAgICAgICB3aWR0aCA9IG1fdmVydGljYWxEYXRhLT5hZHZhbmNlSGVp
Z2h0KHRoaXMsIGdseXBoKSArIG1fc3ludGhldGljQm9sZE9mZnNldDsKLSNlbHNlCi0gICAgICAg
IHdpZHRoID0gbV92ZXJ0aWNhbERhdGEtPmFkdmFuY2VIZWlnaHQodGhpcywgZ2x5cGgpOwotI2Vu
ZGlmCi0jZW5kaWYKLSAgICBlbHNlCi0gICAgICAgIHdpZHRoID0gcGxhdGZvcm1XaWR0aEZvckds
eXBoKGdseXBoKTsKLQotICAgIG1fZ2x5cGhUb1dpZHRoTWFwLnNldE1ldHJpY3NGb3JHbHlwaChn
bHlwaCwgd2lkdGgpOwotICAgIHJldHVybiB3aWR0aDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gU2ltcGxlRm9udERhdGFfaApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uaAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Niw3ICszNiw3IEBAIGNsYXNzIEZvbnRDYXNjYWRlOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0Owog
Y2xhc3MgR2x5cGhCdWZmZXI7CiBjbGFzcyBHbHlwaFRvUGF0aFRyYW5zbGF0b3I7Ci1jbGFzcyBT
aW1wbGVGb250RGF0YTsKK2NsYXNzIEZvbnQ7CiAKIHN0cnVjdCBHbHlwaERhdGE7CiBzdHJ1Y3Qg
V2lkdGhJdGVyYXRvcjsKQEAgLTE5OCwxMCArMTk4LDEwIEBAIHB1YmxpYzoKIAogI2lmIEVOQUJM
RShTVkdfRk9OVFMpCiAgICAgICAgIHZpcnR1YWwgR2x5cGhEYXRhIGdseXBoRGF0YUZvckNoYXJh
Y3Rlcihjb25zdCBGb250Q2FzY2FkZSYsIFdpZHRoSXRlcmF0b3ImLCBVQ2hhcjMyIGNoYXJhY3Rl
ciwgYm9vbCBtaXJyb3IsIGludCBjdXJyZW50Q2hhcmFjdGVyLCB1bnNpZ25lZCYgYWR2YW5jZUxl
bmd0aCwgU3RyaW5nJiBub3JtYWxpemVkU3BhY2VzU3RyaW5nQ2FjaGUpID0gMDsKLSAgICAgICAg
dmlydHVhbCB2b2lkIGRyYXdTVkdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgU2ltcGxl
Rm9udERhdGEqLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBmcm9tLCBpbnQgdG8sIGNvbnN0IEZs
b2F0UG9pbnQmKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkcmF3U1ZHR2x5cGhz
KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZvbnQqLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBm
cm9tLCBpbnQgdG8sIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1
YWwgZmxvYXQgZmxvYXRXaWR0aFVzaW5nU1ZHRm9udChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0
IFRleHRSdW4mLCBpbnQmIGNoYXJzQ29uc3VtZWQsIFN0cmluZyYgZ2x5cGhOYW1lKSBjb25zdCA9
IDA7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBhcHBseVNWR0tlcm5pbmcoY29uc3QgU2ltcGxlRm9u
dERhdGEqLCBXaWR0aEl0ZXJhdG9yJiwgR2x5cGhCdWZmZXIqLCBpbnQgZnJvbSkgY29uc3QgPSAw
OwotICAgICAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxHbHlwaFRvUGF0aFRyYW5zbGF0b3I+
IGNyZWF0ZUdseXBoVG9QYXRoVHJhbnNsYXRvcihjb25zdCBTaW1wbGVGb250RGF0YSYsIGNvbnN0
IFRleHRSdW4qLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBj
b25zdCBGbG9hdFBvaW50JikgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlT
VkdLZXJuaW5nKGNvbnN0IEZvbnQqLCBXaWR0aEl0ZXJhdG9yJiwgR2x5cGhCdWZmZXIqLCBpbnQg
ZnJvbSkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxHbHlwaFRv
UGF0aFRyYW5zbGF0b3I+IGNyZWF0ZUdseXBoVG9QYXRoVHJhbnNsYXRvcihjb25zdCBGb250Jiwg
Y29uc3QgVGV4dFJ1biosIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCBudW1HbHlw
aHMsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdCA9IDA7CiAjZW5kaWYKICAgICB9OwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9y
LmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvV2lkdGhJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDEwICsyMiwxMCBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldpZHRoSXRlcmF0b3IuaCIKIAorI2luY2x1
ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkdseXBoQnVm
ZmVyLmgiCiAjaW5jbHVkZSAiTGF0aW4xVGV4dEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiU2ltcGxl
Rm9udERhdGEuaCIKICNpbmNsdWRlICJTdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IuaCIK
ICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCkBAIC0zNCw3ICszNCw3IEBAIHVzaW5nIG5h
bWVzcGFjZSBVbmljb2RlOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVdpZHRoSXRlcmF0b3I6
OldpZHRoSXRlcmF0b3IoY29uc3QgRm9udENhc2NhZGUqIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1
biwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBib29sIGFj
Y291bnRGb3JHbHlwaEJvdW5kcywgYm9vbCBmb3JUZXh0RW1waGFzaXMpCitXaWR0aEl0ZXJhdG9y
OjpXaWR0aEl0ZXJhdG9yKGNvbnN0IEZvbnRDYXNjYWRlKiBmb250LCBjb25zdCBUZXh0UnVuJiBy
dW4sIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzLCBib29sIGFjY291bnRGb3JH
bHlwaEJvdW5kcywgYm9vbCBmb3JUZXh0RW1waGFzaXMpCiAgICAgOiBtX2ZvbnQoZm9udCkKICAg
ICAsIG1fcnVuKHJ1bikKICAgICAsIG1fY3VycmVudENoYXJhY3RlcigwKQpAQCAtMTAwLDcgKzEw
MCw3IEBAIHB1YmxpYzoKIAogdHlwZWRlZiBWZWN0b3I8c3RkOjpwYWlyPGludCwgT3JpZ2luYWxB
ZHZhbmNlc0ZvckNoYXJhY3RlclRyZWF0ZWRBc1NwYWNlPiwgNjQ+IENoYXJhY3RlcnNUcmVhdGVk
QXNTcGFjZTsKIAotc3RhdGljIGlubGluZSBmbG9hdCBhcHBseUZvbnRUcmFuc2Zvcm1zKEdseXBo
QnVmZmVyKiBnbHlwaEJ1ZmZlciwgYm9vbCBsdHIsIGludCYgbGFzdEdseXBoQ291bnQsIGNvbnN0
IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwgV2lkdGhJdGVyYXRvciYgaXRlcmF0b3IsIFR5cGVz
ZXR0aW5nRmVhdHVyZXMgdHlwZXNldHRpbmdGZWF0dXJlcywgQ2hhcmFjdGVyc1RyZWF0ZWRBc1Nw
YWNlJiBjaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UpCitzdGF0aWMgaW5saW5lIGZsb2F0IGFwcGx5
Rm9udFRyYW5zZm9ybXMoR2x5cGhCdWZmZXIqIGdseXBoQnVmZmVyLCBib29sIGx0ciwgaW50JiBs
YXN0R2x5cGhDb3VudCwgY29uc3QgRm9udCogZm9udCwgV2lkdGhJdGVyYXRvciYgaXRlcmF0b3Is
IFR5cGVzZXR0aW5nRmVhdHVyZXMgdHlwZXNldHRpbmdGZWF0dXJlcywgQ2hhcmFjdGVyc1RyZWF0
ZWRBc1NwYWNlJiBjaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UpCiB7CiAgICAgQVNTRVJUKHR5cGVz
ZXR0aW5nRmVhdHVyZXMgJiAoS2VybmluZyB8IExpZ2F0dXJlcykpOwogCkBAIC0xMjMsMTYgKzEy
MywxNiBAQCBzdGF0aWMgaW5saW5lIGZsb2F0IGFwcGx5Rm9udFRyYW5zZm9ybXMoCiAgICAgVU5V
U0VEX1BBUkFNKGl0ZXJhdG9yKTsKICNlbHNlCiAgICAgLy8gV2UgbmVlZCB0byBoYW5kbGUgdHJh
bnNmb3JtcyBvbiBTVkcgZm9udHMgaW50ZXJuYWxseSwgc2luY2UgdGhleSBhcmUgcmVuZGVyZWQg
aW50ZXJuYWxseS4KLSAgICBpZiAoZm9udERhdGEtPmlzU1ZHRm9udCgpKSB7CisgICAgaWYgKGZv
bnQtPmlzU1ZHRm9udCgpKSB7CiAgICAgICAgIC8vIFNWRyBmb250IGxpZ2F0dXJlcyBhcmUgaGFu
ZGxlZCBkdXJpbmcgZ2x5cGggc2VsZWN0aW9uLCBvbmx5IGtlcm5pbmcgcmVtYWluaW5nLgogICAg
ICAgICBpZiAoaXRlcmF0b3IucnVuKCkucmVuZGVyaW5nQ29udGV4dCgpICYmICh0eXBlc2V0dGlu
Z0ZlYXR1cmVzICYgS2VybmluZykpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBw
YXNzIHRoZSBuZWNlc3NhcnkgY29udGV4dCBkb3duIHRvIHRoaXMgbGV2ZWwgc28gd2UgY2FuIGxh
emlseSBjcmVhdGUgcmVuZGVyaW5nIGNvbnRleHRzIGF0IHRoaXMgcG9pbnQuCiAgICAgICAgICAg
ICAvLyBIb3dldmVyLCBhIGxhcmdlciByZWZhY3RvcmluZyBvZiBTVkcgZm9udHMgbWlnaHQgbmVj
ZXNzYXJ5IHRvIHNpZGVzdGVwIHRoaXMgcHJvYmxlbSBjb21wbGV0ZWx5LgotICAgICAgICAgICAg
aXRlcmF0b3IucnVuKCkucmVuZGVyaW5nQ29udGV4dCgpLT5hcHBseVNWR0tlcm5pbmcoZm9udERh
dGEsIGl0ZXJhdG9yLCBnbHlwaEJ1ZmZlciwgbGFzdEdseXBoQ291bnQpOworICAgICAgICAgICAg
aXRlcmF0b3IucnVuKCkucmVuZGVyaW5nQ29udGV4dCgpLT5hcHBseVNWR0tlcm5pbmcoZm9udCwg
aXRlcmF0b3IsIGdseXBoQnVmZmVyLCBsYXN0R2x5cGhDb3VudCk7CiAgICAgICAgIH0KICAgICB9
IGVsc2UKICNlbmRpZgotICAgICAgICBmb250RGF0YS0+YXBwbHlUcmFuc2Zvcm1zKGdseXBoQnVm
ZmVyLT5nbHlwaHMobGFzdEdseXBoQ291bnQpLCBhZHZhbmNlcyArIGxhc3RHbHlwaENvdW50LCBn
bHlwaEJ1ZmZlclNpemUgLSBsYXN0R2x5cGhDb3VudCwgdHlwZXNldHRpbmdGZWF0dXJlcyk7Cisg
ICAgICAgIGZvbnQtPmFwcGx5VHJhbnNmb3JtcyhnbHlwaEJ1ZmZlci0+Z2x5cGhzKGxhc3RHbHlw
aENvdW50KSwgYWR2YW5jZXMgKyBsYXN0R2x5cGhDb3VudCwgZ2x5cGhCdWZmZXJTaXplIC0gbGFz
dEdseXBoQ291bnQsIHR5cGVzZXR0aW5nRmVhdHVyZXMpOwogCiAgICAgaWYgKCFsdHIpCiAgICAg
ICAgIGdseXBoQnVmZmVyLT5yZXZlcnNlKGxhc3RHbHlwaENvdW50LCBnbHlwaEJ1ZmZlclNpemUg
LSBsYXN0R2x5cGhDb3VudCk7CkBAIC0xNjYsOCArMTY2LDggQEAgaW5saW5lIHVuc2lnbmVkIFdp
ZHRoSXRlcmF0b3I6OmFkdmFuY2VJbgogICAgIGZsb2F0IGxhc3RSb3VuZGluZ1dpZHRoID0gbV9m
aW5hbFJvdW5kaW5nV2lkdGg7CiAgICAgRmxvYXRSZWN0IGJvdW5kczsKIAotICAgIGNvbnN0IFNp
bXBsZUZvbnREYXRhJiBwcmltYXJ5Rm9udERhdGEgPSBtX2ZvbnQtPnByaW1hcnlGb250RGF0YSgp
OwotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBsYXN0Rm9udERhdGEgPSAmcHJpbWFyeUZvbnRE
YXRhOworICAgIGNvbnN0IEZvbnQmIHByaW1hcnlGb250ID0gbV9mb250LT5wcmltYXJ5Rm9udCgp
OworICAgIGNvbnN0IEZvbnQqIGxhc3RGb250RGF0YSA9ICZwcmltYXJ5Rm9udDsKICAgICBpbnQg
bGFzdEdseXBoQ291bnQgPSBnbHlwaEJ1ZmZlciA/IGdseXBoQnVmZmVyLT5zaXplKCkgOiAwOwog
CiAgICAgVUNoYXIzMiBjaGFyYWN0ZXIgPSAwOwpAQCAtMTgzLDE1ICsxODMsMTUgQEAgaW5saW5l
IHVuc2lnbmVkIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2VJbgogICAgICAgICAgICAgdGV4dEl0ZXJh
dG9yLmFkdmFuY2UoYWR2YW5jZUxlbmd0aCk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgfQotICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEgPSBnbHlwaERhdGEu
Zm9udERhdGE7Ci0gICAgICAgIEFTU0VSVChmb250RGF0YSk7CisgICAgICAgIGNvbnN0IEZvbnQq
IGZvbnQgPSBnbHlwaERhdGEuZm9udDsKKyAgICAgICAgQVNTRVJUKGZvbnQpOwogCiAgICAgICAg
IC8vIE5vdyB0aGF0IHdlIGhhdmUgYSBnbHlwaCBhbmQgZm9udCBkYXRhLCBnZXQgaXRzIHdpZHRo
LgogICAgICAgICBmbG9hdCB3aWR0aDsKICAgICAgICAgaWYgKGNoYXJhY3RlciA9PSAnXHQnICYm
IG1fcnVuLmFsbG93VGFicygpKQotICAgICAgICAgICAgd2lkdGggPSBtX2ZvbnQtPnRhYldpZHRo
KCpmb250RGF0YSwgbV9ydW4udGFiU2l6ZSgpLCBtX3J1bi54UG9zKCkgKyBtX3J1bldpZHRoU29G
YXIgKyB3aWR0aFNpbmNlTGFzdFJvdW5kaW5nKTsKKyAgICAgICAgICAgIHdpZHRoID0gbV9mb250
LT50YWJXaWR0aCgqZm9udCwgbV9ydW4udGFiU2l6ZSgpLCBtX3J1bi54UG9zKCkgKyBtX3J1bldp
ZHRoU29GYXIgKyB3aWR0aFNpbmNlTGFzdFJvdW5kaW5nKTsKICAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICB3aWR0aCA9IGZvbnREYXRhLT53aWR0aEZvckdseXBoKGdseXBoKTsKKyAgICAgICAg
ICAgIHdpZHRoID0gZm9udC0+d2lkdGhGb3JHbHlwaChnbHlwaCk7CiAKICAgICAgICAgICAgIC8v
IFNWRyB1c2VzIGhvcml6b250YWxHbHlwaFN0cmV0Y2goKSwgd2hlbiB0ZXh0TGVuZ3RoIGlzIHVz
ZWQgdG8gc3RyZXRjaC9zcXVlZXplIHRleHQuCiAgICAgICAgICAgICB3aWR0aCAqPSBtX3J1bi5o
b3Jpem9udGFsR2x5cGhTdHJldGNoKCk7CkBAIC0yMDAsMjYgKzIwMCwyNiBAQCBpbmxpbmUgdW5z
aWduZWQgV2lkdGhJdGVyYXRvcjo6YWR2YW5jZUluCiAgICAgICAgICAgICAvLyBGaXJzdCwgd2Ug
cm91bmQgc3BhY2VzIHRvIGFuIGFkanVzdGVkIHdpZHRoIGluIGFsbCBmb250cy4KICAgICAgICAg
ICAgIC8vIFNlY29uZCwgaW4gZml4ZWQtcGl0Y2ggZm9udHMgd2UgZW5zdXJlIHRoYXQgYWxsIGNo
YXJhY3RlcnMgdGhhdAogICAgICAgICAgICAgLy8gbWF0Y2ggdGhlIHdpZHRoIG9mIHRoZSBzcGFj
ZSBjaGFyYWN0ZXIgaGF2ZSB0aGUgc2FtZSB3aWR0aCBhcyB0aGUgc3BhY2UgY2hhcmFjdGVyLgot
ICAgICAgICAgICAgaWYgKG1fcnVuLmFwcGx5V29yZFJvdW5kaW5nKCkgJiYgd2lkdGggPT0gZm9u
dERhdGEtPnNwYWNlV2lkdGgoKSAmJiAoZm9udERhdGEtPnBpdGNoKCkgPT0gRml4ZWRQaXRjaCB8
fCBnbHlwaCA9PSBmb250RGF0YS0+c3BhY2VHbHlwaCgpKSkKLSAgICAgICAgICAgICAgICB3aWR0
aCA9IGZvbnREYXRhLT5hZGp1c3RlZFNwYWNlV2lkdGgoKTsKKyAgICAgICAgICAgIGlmIChtX3J1
bi5hcHBseVdvcmRSb3VuZGluZygpICYmIHdpZHRoID09IGZvbnQtPnNwYWNlV2lkdGgoKSAmJiAo
Zm9udC0+cGl0Y2goKSA9PSBGaXhlZFBpdGNoIHx8IGdseXBoID09IGZvbnQtPnNwYWNlR2x5cGgo
KSkpCisgICAgICAgICAgICAgICAgd2lkdGggPSBmb250LT5hZGp1c3RlZFNwYWNlV2lkdGgoKTsK
ICAgICAgICAgfQogCi0gICAgICAgIGlmIChmb250RGF0YSAhPSBsYXN0Rm9udERhdGEgJiYgd2lk
dGgpIHsKKyAgICAgICAgaWYgKGZvbnQgIT0gbGFzdEZvbnREYXRhICYmIHdpZHRoKSB7CiAgICAg
ICAgICAgICBpZiAoc2hvdWxkQXBwbHlGb250VHJhbnNmb3JtcygpKSB7CiAgICAgICAgICAgICAg
ICAgbV9ydW5XaWR0aFNvRmFyICs9IGFwcGx5Rm9udFRyYW5zZm9ybXMoZ2x5cGhCdWZmZXIsIG1f
cnVuLmx0cigpLCBsYXN0R2x5cGhDb3VudCwgbGFzdEZvbnREYXRhLCAqdGhpcywgbV90eXBlc2V0
dGluZ0ZlYXR1cmVzLCBjaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UpOwogICAgICAgICAgICAgICAg
IGxhc3RHbHlwaENvdW50ID0gZ2x5cGhCdWZmZXItPnNpemUoKTsgLy8gYXBwbHlGb250VHJhbnNm
b3JtcyBkb2Vzbid0IHVwZGF0ZSB3aGVuIHRoZXJlIGhhZCBiZWVuIG9ubHkgb25lIGdseXBoLgog
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBsYXN0Rm9udERhdGEgPSBmb250RGF0YTsKLSAg
ICAgICAgICAgIGlmIChtX2ZhbGxiYWNrRm9udHMgJiYgZm9udERhdGEgIT0gJnByaW1hcnlGb250
RGF0YSkgeworICAgICAgICAgICAgbGFzdEZvbnREYXRhID0gZm9udDsKKyAgICAgICAgICAgIGlm
IChtX2ZhbGxiYWNrRm9udHMgJiYgZm9udCAhPSAmcHJpbWFyeUZvbnQpIHsKICAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogVGhpcyBkb2VzIGEgbGl0dGxlIGV4dHJhIHdvcmsgdGhhdCBjb3VsZCBi
ZSBhdm9pZGVkIGlmCiAgICAgICAgICAgICAgICAgLy8gZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKCkg
cmV0dXJuZWQgd2hldGhlciBpdCBjaG9zZSB0byB1c2UgYSBzbWFsbCBjYXBzIGZvbnQuCiAgICAg
ICAgICAgICAgICAgaWYgKCFtX2ZvbnQtPmlzU21hbGxDYXBzKCkgfHwgY2hhcmFjdGVyID09IHVf
dG91cHBlcihjaGFyYWN0ZXIpKQotICAgICAgICAgICAgICAgICAgICBtX2ZhbGxiYWNrRm9udHMt
PmFkZChmb250RGF0YSk7CisgICAgICAgICAgICAgICAgICAgIG1fZmFsbGJhY2tGb250cy0+YWRk
KGZvbnQpOwogICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICBjb25z
dCBHbHlwaERhdGEmIHVwcGVyY2FzZUdseXBoRGF0YSA9IG1fZm9udC0+Z2x5cGhEYXRhRm9yQ2hh
cmFjdGVyKHVfdG91cHBlcihjaGFyYWN0ZXIpLCBydGwpOwotICAgICAgICAgICAgICAgICAgICBp
ZiAodXBwZXJjYXNlR2x5cGhEYXRhLmZvbnREYXRhICE9ICZwcmltYXJ5Rm9udERhdGEpCi0gICAg
ICAgICAgICAgICAgICAgICAgICBtX2ZhbGxiYWNrRm9udHMtPmFkZCh1cHBlcmNhc2VHbHlwaERh
dGEuZm9udERhdGEpOworICAgICAgICAgICAgICAgICAgICBpZiAodXBwZXJjYXNlR2x5cGhEYXRh
LmZvbnQgIT0gJnByaW1hcnlGb250KQorICAgICAgICAgICAgICAgICAgICAgICAgbV9mYWxsYmFj
a0ZvbnRzLT5hZGQodXBwZXJjYXNlR2x5cGhEYXRhLmZvbnQpOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjQzLDkgKzI0Myw5IEBAIGlubGluZSB1bnNp
Z25lZCBXaWR0aEl0ZXJhdG9yOjphZHZhbmNlSW4KICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChnbHlwaEJ1ZmZlcikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnbHlwaEJ1
ZmZlci0+aXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICht
X2ZvclRleHRFbXBoYXNpcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGds
eXBoQnVmZmVyLT5hZGQoZm9udERhdGEtPnplcm9XaWR0aFNwYWNlR2x5cGgoKSwgZm9udERhdGEs
IG1fZXhwYW5zaW9uUGVyT3Bwb3J0dW5pdHksIGN1cnJlbnRDaGFyYWN0ZXIpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhCdWZmZXItPmFkZChmb250LT56ZXJvV2lk
dGhTcGFjZUdseXBoKCksIGZvbnQsIG1fZXhwYW5zaW9uUGVyT3Bwb3J0dW5pdHksIGN1cnJlbnRD
aGFyYWN0ZXIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+YWRkKGZvbnREYXRhLT5z
cGFjZUdseXBoKCksIGZvbnREYXRhLCBleHBhbnNpb25BdFRoaXNPcHBvcnR1bml0eSwgY3VycmVu
dENoYXJhY3Rlcik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaEJ1
ZmZlci0+YWRkKGZvbnQtPnNwYWNlR2x5cGgoKSwgZm9udCwgZXhwYW5zaW9uQXRUaGlzT3Bwb3J0
dW5pdHksIGN1cnJlbnRDaGFyYWN0ZXIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+ZXhwYW5k
TGFzdEFkdmFuY2UoZXhwYW5zaW9uQXRUaGlzT3Bwb3J0dW5pdHkpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgfQpAQCAtMjc0LDcgKzI3NCw3IEBAIGlubGluZSB1bnNpZ25lZCBXaWR0aEl0ZXJh
dG9yOjphZHZhbmNlSW4KICAgICAgICAgfQogCiAgICAgICAgIGlmIChtX2FjY291bnRGb3JHbHlw
aEJvdW5kcykgewotICAgICAgICAgICAgYm91bmRzID0gZm9udERhdGEtPmJvdW5kc0ZvckdseXBo
KGdseXBoKTsKKyAgICAgICAgICAgIGJvdW5kcyA9IGZvbnQtPmJvdW5kc0ZvckdseXBoKGdseXBo
KTsKICAgICAgICAgICAgIGlmICghY3VycmVudENoYXJhY3RlcikKICAgICAgICAgICAgICAgICBt
X2ZpcnN0R2x5cGhPdmVyZmxvdyA9IHN0ZDo6bWF4PGZsb2F0PigwLCAtYm91bmRzLngoKSk7CiAg
ICAgICAgIH0KQEAgLTMxNCw3ICszMTQsNyBAQCBpbmxpbmUgdW5zaWduZWQgV2lkdGhJdGVyYXRv
cjo6YWR2YW5jZUluCiAgICAgICAgIH0KIAogICAgICAgICBpZiAoZ2x5cGhCdWZmZXIpCi0gICAg
ICAgICAgICBnbHlwaEJ1ZmZlci0+YWRkKGdseXBoLCBmb250RGF0YSwgKHJ0bCA/IG9sZFdpZHRo
ICsgbGFzdFJvdW5kaW5nV2lkdGggOiB3aWR0aCksIGN1cnJlbnRDaGFyYWN0ZXIpOworICAgICAg
ICAgICAgZ2x5cGhCdWZmZXItPmFkZChnbHlwaCwgZm9udCwgKHJ0bCA/IG9sZFdpZHRoICsgbGFz
dFJvdW5kaW5nV2lkdGggOiB3aWR0aCksIGN1cnJlbnRDaGFyYWN0ZXIpOwogCiAgICAgICAgIGxh
c3RSb3VuZGluZ1dpZHRoID0gd2lkdGggLSBvbGRXaWR0aDsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuaAkocmV2aXNpb24gMTc4
ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxNCArMzIsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBGb250Q2FzY2FkZTsKIGNsYXNzIEdseXBoQnVmZmVyOwotY2xhc3MgU2ltcGxlRm9u
dERhdGE7CitjbGFzcyBGb250OwogY2xhc3MgVGV4dFJ1bjsKIHN0cnVjdCBHbHlwaERhdGE7CiAK
IHN0cnVjdCBXaWR0aEl0ZXJhdG9yIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1
YmxpYzoKLSAgICBXaWR0aEl0ZXJhdG9yKGNvbnN0IEZvbnRDYXNjYWRlKiwgY29uc3QgVGV4dFJ1
biYsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDAsIGJv
b2wgYWNjb3VudEZvckdseXBoQm91bmRzID0gZmFsc2UsIGJvb2wgZm9yVGV4dEVtcGhhc2lzID0g
ZmFsc2UpOworICAgIFdpZHRoSXRlcmF0b3IoY29uc3QgRm9udENhc2NhZGUqLCBjb25zdCBUZXh0
UnVuJiwgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMgPSAwLCBib29sIGFjY291
bnRGb3JHbHlwaEJvdW5kcyA9IGZhbHNlLCBib29sIGZvclRleHRFbXBoYXNpcyA9IGZhbHNlKTsK
IAogICAgIHVuc2lnbmVkIGFkdmFuY2UoaW50IHRvLCBHbHlwaEJ1ZmZlciopOwogICAgIGJvb2wg
YWR2YW5jZU9uZUNoYXJhY3RlcihmbG9hdCYgd2lkdGgsIEdseXBoQnVmZmVyJik7CkBAIC05NCw3
ICs5NCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBzaG91bGRBcHBseUZvbnRUcmFuc2Zvcm1zKCkg
Y29uc3QgeyByZXR1cm4gbV9ydW4ubGVuZ3RoKCkgPiAxICYmIChtX3R5cGVzZXR0aW5nRmVhdHVy
ZXMgJiAoS2VybmluZyB8IExpZ2F0dXJlcykpOyB9CiAKICAgICBUeXBlc2V0dGluZ0ZlYXR1cmVz
IG1fdHlwZXNldHRpbmdGZWF0dXJlczsKLSAgICBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRh
Kj4qIG1fZmFsbGJhY2tGb250czsKKyAgICBIYXNoU2V0PGNvbnN0IEZvbnQqPiogbV9mYWxsYmFj
a0ZvbnRzOwogICAgIGJvb2wgbV9hY2NvdW50Rm9yR2x5cGhCb3VuZHM7CiAgICAgZmxvYXQgbV9t
YXhHbHlwaEJvdW5kaW5nQm94WTsKICAgICBmbG9hdCBtX21pbkdseXBoQm91bmRpbmdCb3hZOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9G
b250Q2Fpcm8uY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICsz
Myw3IEBACiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJDYWlyb1V0
aWxpdGllcy5oIgorI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgog
I2luY2x1ZGUgIkdyYWRpZW50LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCkBAIC00
MSwxMSArNDIsMTAgQEAKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgogI2luY2x1
ZGUgIlBsYXRmb3JtUGF0aENhaXJvLmgiCiAjaW5jbHVkZSAiU2hhZG93Qmx1ci5oIgotI2luY2x1
ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIHZv
aWQgZHJhd0dseXBoc1RvQ29udGV4dChjYWlyb190KiBjb250ZXh0LCBjb25zdCBTaW1wbGVGb250
RGF0YSogZm9udCwgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBpbnQgbnVtR2x5cGhzKQorc3Rh
dGljIHZvaWQgZHJhd0dseXBoc1RvQ29udGV4dChjYWlyb190KiBjb250ZXh0LCBjb25zdCBGb250
KiBmb250LCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGludCBudW1HbHlwaHMpCiB7CiAgICAg
Y2Fpcm9fbWF0cml4X3Qgb3JpZ2luYWxUcmFuc2Zvcm07CiAgICAgZmxvYXQgc3ludGhldGljQm9s
ZE9mZnNldCA9IGZvbnQtPnN5bnRoZXRpY0JvbGRPZmZzZXQoKTsKQEAgLTY0LDcgKzY0LDcgQEAg
c3RhdGljIHZvaWQgZHJhd0dseXBoc1RvQ29udGV4dChjYWlyb190KgogICAgICAgICBjYWlyb19z
ZXRfbWF0cml4KGNvbnRleHQsICZvcmlnaW5hbFRyYW5zZm9ybSk7CiB9CiAKLXN0YXRpYyB2b2lk
IGRyYXdHbHlwaHNTaGFkb3coR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgR2x5cGhCdWZm
ZXJHbHlwaCogZ2x5cGhzLCBpbnQgbnVtR2x5cGhzKQorc3RhdGljIHZvaWQgZHJhd0dseXBoc1No
YWRvdyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQsIGNvbnN0IEZvbnQqIGZvbnQsIEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgaW50IG51
bUdseXBocykKIHsKICAgICBTaGFkb3dCbHVyJiBzaGFkb3cgPSBncmFwaGljc0NvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpLT5zaGFkb3dCbHVyKCk7CiAKQEAgLTk1LDcgKzk1LDcgQEAgc3RhdGlj
IHZvaWQgZHJhd0dseXBoc1NoYWRvdyhHcmFwaGljc0NvbgogICAgIH0KIH0KIAotdm9pZCBGb250
Q2FzY2FkZTo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFNpbXBs
ZUZvbnREYXRhKiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsCit2b2lkIEZv
bnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRm9u
dCogZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLAogICAgIGludCBmcm9tLCBp
bnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKIHsKICAgICBpZiAo
IWZvbnQtPnBsYXRmb3JtRGF0YSgpLnNpemUoKSkKQEAgLTIxNiw3ICsyMTYsNyBAQCBwdWJsaWM6
CiAgICAgICAgIDogbV9pbmRleCgwKQogICAgICAgICAsIG1fdGV4dFJ1bih0ZXh0UnVuKQogICAg
ICAgICAsIG1fZ2x5cGhCdWZmZXIoZ2x5cGhCdWZmZXIpCi0gICAgICAgICwgbV9mb250RGF0YShn
bHlwaEJ1ZmZlci5mb250RGF0YUF0KG1faW5kZXgpKQorICAgICAgICAsIG1fZm9udERhdGEoZ2x5
cGhCdWZmZXIuZm9udEF0KG1faW5kZXgpKQogICAgICAgICAsIG1fdHJhbnNsYXRpb24oQWZmaW5l
VHJhbnNmb3JtKCkudHJhbnNsYXRlKHRleHRPcmlnaW4ueCgpLCB0ZXh0T3JpZ2luLnkoKSkpCiAg
ICAgewogICAgICAgICBtb3ZlVG9OZXh0VmFsaWRHbHlwaCgpOwpAQCAtMjM1LDcgKzIzNSw3IEBA
IHByaXZhdGU6CiAgICAgaW50IG1faW5kZXg7CiAgICAgY29uc3QgVGV4dFJ1biYgbV90ZXh0UnVu
OwogICAgIGNvbnN0IEdseXBoQnVmZmVyJiBtX2dseXBoQnVmZmVyOwotICAgIGNvbnN0IFNpbXBs
ZUZvbnREYXRhKiBtX2ZvbnREYXRhOworICAgIGNvbnN0IEZvbnQqIG1fZm9udERhdGE7CiAgICAg
QWZmaW5lVHJhbnNmb3JtIG1fdHJhbnNsYXRpb247CiB9OwogCkBAIC0yODYsNyArMjg2LDcgQEAg
dm9pZCBDYWlyb0dseXBoVG9QYXRoVHJhbnNsYXRvcjo6YWR2YW5jZQogICAgICAgICArK21faW5k
ZXg7CiAgICAgICAgIGlmIChtX2luZGV4ID49IG1fZ2x5cGhCdWZmZXIuc2l6ZSgpKQogICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIG1fZm9udERhdGEgPSBtX2dseXBoQnVmZmVyLmZvbnREYXRh
QXQobV9pbmRleCk7CisgICAgICAgIG1fZm9udERhdGEgPSBtX2dseXBoQnVmZmVyLmZvbnRBdCht
X2luZGV4KTsKICAgICB9IHdoaWxlIChtX2ZvbnREYXRhLT5pc1NWR0ZvbnQoKSAmJiBtX2luZGV4
IDwgbV9nbHlwaEJ1ZmZlci5zaXplKCkpOwogfQogCkBAIC0zMDcsNyArMzA3LDcgQEAgRGFzaEFy
cmF5IEZvbnRDYXNjYWRlOjpkYXNoZXNGb3JJbnRlcnNlYwogICAgICAgICByZXR1cm4gRGFzaEFy
cmF5KCk7CiAKICAgICAvLyBGSVhNRTogSGFuZGxlIFNWRyArIG5vbi1TVkcgaW50ZXJsZWF2ZWQg
cnVucy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzc3OAotICAg
IGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSA9IGdseXBoQnVmZmVyLmZvbnREYXRhQXQo
MCk7CisgICAgY29uc3QgRm9udCogZm9udERhdGEgPSBnbHlwaEJ1ZmZlci5mb250QXQoMCk7CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPEdseXBoVG9QYXRoVHJhbnNsYXRvcj4gdHJhbnNsYXRvcjsKICAg
ICBib29sIGlzU1ZHID0gZmFsc2U7CiAgICAgRmxvYXRQb2ludCBvcmlnaW4gPSBGbG9hdFBvaW50
KHRleHRPcmlnaW4ueCgpICsgZGVsdGFYLCB0ZXh0T3JpZ2luLnkoKSk7CkBAIC0zMjYsNyArMzI2
LDcgQEAgRGFzaEFycmF5IEZvbnRDYXNjYWRlOjpkYXNoZXNGb3JJbnRlcnNlYwogICAgIGZvciAo
aW50IGluZGV4ID0gMDsgdHJhbnNsYXRvci0+Y29udGFpbnNNb3JlUGF0aHMoKTsgKytpbmRleCwg
dHJhbnNsYXRvci0+YWR2YW5jZSgpKSB7CiAgICAgICAgIGZsb2F0IGNlbnRlck9mTGluZSA9IGxp
bmVFeHRlbnRzLnkoKSArIChsaW5lRXh0ZW50cy5oZWlnaHQoKSAvIDIpOwogICAgICAgICBHbHlw
aEl0ZXJhdGlvblN0YXRlIGluZm8gPSBHbHlwaEl0ZXJhdGlvblN0YXRlKEZsb2F0UG9pbnQoKSwg
RmxvYXRQb2ludCgpLCBjZW50ZXJPZkxpbmUsIGxpbmVFeHRlbnRzLngoKSArIGxpbmVFeHRlbnRz
LndpZHRoKCksIGxpbmVFeHRlbnRzLngoKSk7Ci0gICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRh
KiBsb2NhbEZvbnREYXRhID0gZ2x5cGhCdWZmZXIuZm9udERhdGFBdChpbmRleCk7CisgICAgICAg
IGNvbnN0IEZvbnQqIGxvY2FsRm9udERhdGEgPSBnbHlwaEJ1ZmZlci5mb250QXQoaW5kZXgpOwog
ICAgICAgICBpZiAoIWxvY2FsRm9udERhdGEgfHwgKCFpc1NWRyAmJiBsb2NhbEZvbnREYXRhLT5p
c1NWR0ZvbnQoKSkgfHwgKGlzU1ZHICYmIGxvY2FsRm9udERhdGEgIT0gZm9udERhdGEpKSB7CiAg
ICAgICAgICAgICAvLyBUaGUgYWR2YW5jZXMgd2lsbCBnZXQgYWxsIG1lc3NlZCB1cCBpZiB3ZSBk
byBhbnl0aGluZyBvdGhlciB0aGFuIGJhaWwgaGVyZS4KICAgICAgICAgICAgIHJlc3VsdC5jbGVh
cigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENh
aXJvSGFyZmJ1enpORy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvSGFyZmJ1enpORy5jcHAJKHJldmlzaW9uIDE3ODg1NykK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyb0hhcmZi
dXp6TkcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMyArMjcsMTMgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogCisjaW5jbHVkZSAiRm9udC5oIgog
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhhcmZCdXp6U2hhcGVyLmgi
CiAjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRl
ICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCi0j
aW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKICNpbmNsdWRlIDxjYWlyby5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CkBAIC04Myw3ICs4Myw3IEBAIGJvb2wgRm9udENhc2NhZGU6OmNhbkV4cGFu
ZEFyb3VuZElkZW9ncmEKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWZsb2F0IEZvbnRDYXNjYWRl
OjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNv
bnN0IFNpbXBsZUZvbnREYXRhKj4qLCBHbHlwaE92ZXJmbG93KikgY29uc3QKK2Zsb2F0IEZvbnRD
YXNjYWRlOjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNo
U2V0PGNvbnN0IEZvbnQqPiosIEdseXBoT3ZlcmZsb3cqKSBjb25zdAogewogICAgIEhhcmZCdXp6
U2hhcGVyIHNoYXBlcih0aGlzLCBydW4pOwogICAgIGlmIChzaGFwZXIuc2hhcGUoKSkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENh
aXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgIkZsb2F0Q29udmVy
c2lvbi5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkZsb2F0Um91bmRlZFJl
Y3QuaCIKKyNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlQ2Fpcm8uaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiTm90SW1w
bGVtZW50ZWQuaCIKQEAgLTUxLDcgKzUyLDYgQEAKICNpbmNsdWRlICJQbGF0Zm9ybVBhdGhDYWly
by5oIgogI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCiAjaW5jbHVkZSAiU2hhZG93Qmx1ci5oIgot
I2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRy
aXguaCIKICNpbmNsdWRlIDxjYWlyby5oPgogI2luY2x1ZGUgPG1hdGguaD4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYXNjYWRlQ29jb2EubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENh
c2NhZGVDb2NvYS5tbQkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvRm9udENhc2NhZGVDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAt
MjcsMTEgKzI3LDExIEBACiAjaW1wb3J0ICJDb3JlR3JhcGhpY3NTUEkuaCIKICNpbXBvcnQgIkNv
cmVUZXh0U1BJLmgiCiAjaW1wb3J0ICJEYXNoQXJyYXkuaCIKKyNpbXBvcnQgIkZvbnQuaCIKICNp
bXBvcnQgIkdseXBoQnVmZmVyLmgiCiAjaW1wb3J0ICJHcmFwaGljc0NvbnRleHQuaCIKICNpbXBv
cnQgIkxheW91dFJlY3QuaCIKICNpbXBvcnQgIkxvZ2dpbmcuaCIKLSNpbXBvcnQgIlNpbXBsZUZv
bnREYXRhLmgiCiAjaW1wb3J0ICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCiAjaWYgVVNFKEFQ
UEtJVCkKICNpbXBvcnQgPEFwcEtpdC9BcHBLaXQuaD4KQEAgLTkxLDcgKzkxLDcgQEAgc3RhdGlj
IGlubGluZSBib29sIHNob3VsZFVzZUxldHRlcnByZXNzRQogI2VuZGlmCiB9CiAKLXN0YXRpYyB2
b2lkIHNob3dMZXR0ZXJwcmVzc2VkR2x5cGhzV2l0aEFkdmFuY2VzKGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgQ0dDb250ZXh0UmVmIGNvbnRleHQs
IGNvbnN0IENHR2x5cGgqIGdseXBocywgY29uc3QgQ0dTaXplKiBhZHZhbmNlcywgc2l6ZV90IGNv
dW50KQorc3RhdGljIHZvaWQgc2hvd0xldHRlcnByZXNzZWRHbHlwaHNXaXRoQWR2YW5jZXMoY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IEZvbnQqIGZvbnQsIENHQ29udGV4dFJlZiBjb250
ZXh0LCBjb25zdCBDR0dseXBoKiBnbHlwaHMsIGNvbnN0IENHU2l6ZSogYWR2YW5jZXMsIHNpemVf
dCBjb3VudCkKIHsKICNpZiBFTkFCTEUoTEVUVEVSUFJFU1MpCiAgICAgaWYgKCFjb3VudCkKQEAg
LTEzMSw3ICsxMzEsNyBAQCBzdGF0aWMgdm9pZCBzaG93TGV0dGVycHJlc3NlZEdseXBoc1dpdGhB
CiAjZW5kaWYKIH0KIAotc3RhdGljIHZvaWQgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhjb25zdCBG
bG9hdFBvaW50JiBwb2ludCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsIENHQ29udGV4dFJl
ZiBjb250ZXh0LCBjb25zdCBDR0dseXBoKiBnbHlwaHMsIGNvbnN0IENHU2l6ZSogYWR2YW5jZXMs
IHNpemVfdCBjb3VudCkKK3N0YXRpYyB2b2lkIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMoY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IEZvbnQqIGZvbnQsIENHQ29udGV4dFJlZiBjb250ZXh0
LCBjb25zdCBDR0dseXBoKiBnbHlwaHMsIGNvbnN0IENHU2l6ZSogYWR2YW5jZXMsIHNpemVfdCBj
b3VudCkKIHsKICAgICBpZiAoIWNvdW50KQogICAgICAgICByZXR1cm47CkBAIC0xOTcsNyArMTk3
LDcgQEAgc3RhdGljIHZvaWQgc2V0Q0dGb250UmVuZGVyaW5nTW9kZShDR0NvbgogfQogI2VuZGlm
CiAKLXZvaWQgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVm
ZmVyLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgYW5jaG9yUG9p
bnQpIGNvbnN0Cit2b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgY29uc3QgRm9udCogZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVy
LCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgYW5jaG9yUG9pbnQp
IGNvbnN0CiB7CiAgICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhID0gZm9u
dC0+cGxhdGZvcm1EYXRhKCk7CiAgICAgaWYgKCFwbGF0Zm9ybURhdGEuc2l6ZSgpKQpAQCAtNDY4
LDcgKzQ2OCw3IEBAIHB1YmxpYzoKICAgICAgICAgOiBtX2luZGV4KDApCiAgICAgICAgICwgbV90
ZXh0UnVuKHRleHRSdW4pCiAgICAgICAgICwgbV9nbHlwaEJ1ZmZlcihnbHlwaEJ1ZmZlcikKLSAg
ICAgICAgLCBtX2ZvbnREYXRhKGdseXBoQnVmZmVyLmZvbnREYXRhQXQobV9pbmRleCkpCisgICAg
ICAgICwgbV9mb250RGF0YShnbHlwaEJ1ZmZlci5mb250QXQobV9pbmRleCkpCiAgICAgICAgICwg
bV90cmFuc2xhdGlvbihDR0FmZmluZVRyYW5zZm9ybVNjYWxlKENHQWZmaW5lVHJhbnNmb3JtTWFr
ZVRyYW5zbGF0aW9uKHRleHRPcmlnaW4ueCgpLCB0ZXh0T3JpZ2luLnkoKSksIDEsIC0xKSkKICAg
ICB7CiAgICAgICAgIG1vdmVUb05leHRWYWxpZEdseXBoKCk7CkBAIC00ODcsNyArNDg3LDcgQEAg
cHJpdmF0ZToKICAgICBpbnQgbV9pbmRleDsKICAgICBjb25zdCBUZXh0UnVuJiBtX3RleHRSdW47
CiAgICAgY29uc3QgR2x5cGhCdWZmZXImIG1fZ2x5cGhCdWZmZXI7Ci0gICAgY29uc3QgU2ltcGxl
Rm9udERhdGEqIG1fZm9udERhdGE7CisgICAgY29uc3QgRm9udCogbV9mb250RGF0YTsKICAgICBD
R0FmZmluZVRyYW5zZm9ybSBtX3RyYW5zbGF0aW9uOwogfTsKIApAQCAtNTI0LDcgKzUyNCw3IEBA
IHZvaWQgTWFjR2x5cGhUb1BhdGhUcmFuc2xhdG9yOjphZHZhbmNlKCkKICAgICAgICAgKyttX2lu
ZGV4OwogICAgICAgICBpZiAobV9pbmRleCA+PSBtX2dseXBoQnVmZmVyLnNpemUoKSkKICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBtX2ZvbnREYXRhID0gbV9nbHlwaEJ1ZmZlci5mb250RGF0
YUF0KG1faW5kZXgpOworICAgICAgICBtX2ZvbnREYXRhID0gbV9nbHlwaEJ1ZmZlci5mb250QXQo
bV9pbmRleCk7CiAgICAgfSB3aGlsZSAobV9mb250RGF0YS0+aXNTVkdGb250KCkgJiYgbV9pbmRl
eCA8IG1fZ2x5cGhCdWZmZXIuc2l6ZSgpKTsKIH0KIApAQCAtNTQ1LDcgKzU0NSw3IEBAIERhc2hB
cnJheSBGb250Q2FzY2FkZTo6ZGFzaGVzRm9ySW50ZXJzZWMKICAgICAgICAgcmV0dXJuIERhc2hB
cnJheSgpOwogICAgIAogICAgIC8vIEZJWE1FOiBIYW5kbGUgU1ZHICsgbm9uLVNWRyBpbnRlcmxl
YXZlZCBydW5zLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzNzc4
Ci0gICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhID0gZ2x5cGhCdWZmZXIuZm9udERh
dGFBdCgwKTsKKyAgICBjb25zdCBGb250KiBmb250RGF0YSA9IGdseXBoQnVmZmVyLmZvbnRBdCgw
KTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8R2x5cGhUb1BhdGhUcmFuc2xhdG9yPiB0cmFuc2xhdG9y
OwogICAgIGJvb2wgaXNTVkcgPSBmYWxzZTsKICAgICBGbG9hdFBvaW50IG9yaWdpbiA9IEZsb2F0
UG9pbnQodGV4dE9yaWdpbi54KCkgKyBkZWx0YVgsIHRleHRPcmlnaW4ueSgpKTsKQEAgLTU2MSw4
ICs1NjEsOCBAQCBEYXNoQXJyYXkgRm9udENhc2NhZGU6OmRhc2hlc0ZvckludGVyc2VjCiAgICAg
RGFzaEFycmF5IHJlc3VsdDsKICAgICBmb3IgKGludCBpbmRleCA9IDA7IHRyYW5zbGF0b3ItPmNv
bnRhaW5zTW9yZVBhdGhzKCk7ICsraW5kZXgsIHRyYW5zbGF0b3ItPmFkdmFuY2UoKSkgewogICAg
ICAgICBHbHlwaEl0ZXJhdGlvblN0YXRlIGluZm8gPSBHbHlwaEl0ZXJhdGlvblN0YXRlKENHUG9p
bnRNYWtlKDAsIDApLCBDR1BvaW50TWFrZSgwLCAwKSwgbGluZUV4dGVudHMueSgpLCBsaW5lRXh0
ZW50cy55KCkgKyBsaW5lRXh0ZW50cy5oZWlnaHQoKSwgbGluZUV4dGVudHMueCgpICsgbGluZUV4
dGVudHMud2lkdGgoKSwgbGluZUV4dGVudHMueCgpKTsKLSAgICAgICAgY29uc3QgU2ltcGxlRm9u
dERhdGEqIGxvY2FsRm9udERhdGEgPSBnbHlwaEJ1ZmZlci5mb250RGF0YUF0KGluZGV4KTsKLSAg
ICAgICAgaWYgKCFsb2NhbEZvbnREYXRhIHx8ICghaXNTVkcgJiYgbG9jYWxGb250RGF0YS0+aXNT
VkdGb250KCkpIHx8IChpc1NWRyAmJiBsb2NhbEZvbnREYXRhICE9IGZvbnREYXRhKSkgeworICAg
ICAgICBjb25zdCBGb250KiBsb2NhbEZvbnQgPSBnbHlwaEJ1ZmZlci5mb250QXQoaW5kZXgpOwor
ICAgICAgICBpZiAoIWxvY2FsRm9udCB8fCAoIWlzU1ZHICYmIGxvY2FsRm9udC0+aXNTVkdGb250
KCkpIHx8IChpc1NWRyAmJiBsb2NhbEZvbnQgIT0gZm9udERhdGEpKSB7CiAgICAgICAgICAgICAv
LyBUaGUgYWR2YW5jZXMgd2lsbCBnZXQgYWxsIG1lc3NlZCB1cCBpZiB3ZSBkbyBhbnl0aGluZyBv
dGhlciB0aGFuIGJhaWwgaGVyZS4KICAgICAgICAgICAgIHJlc3VsdC5jbGVhcigpOwogICAgICAg
ICAgICAgYnJlYWs7CkBAIC01OTIsMTAgKzU5MiwxMCBAQCBEYXNoQXJyYXkgRm9udENhc2NhZGU6
OmRhc2hlc0ZvckludGVyc2VjCiB9CiAjZW5kaWYKIAotYm9vbCBGb250Q2FzY2FkZTo6cHJpbWFy
eUZvbnREYXRhSXNTeXN0ZW1Gb250KCkgY29uc3QKK2Jvb2wgRm9udENhc2NhZGU6OnByaW1hcnlG
b250SXNTeXN0ZW1Gb250KCkgY29uc3QKIHsKICNpZiBQTEFURk9STShJT1MpIHx8IF9fTUFDX09T
X1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPiAxMDkwCi0gICAgY29uc3QgYXV0byYgZm9udERhdGEg
PSBwcmltYXJ5Rm9udERhdGEoKTsKKyAgICBjb25zdCBhdXRvJiBmb250RGF0YSA9IHByaW1hcnlG
b250KCk7CiAgICAgcmV0dXJuICFmb250RGF0YS5pc1NWR0ZvbnQoKSAmJiBDVEZvbnREZXNjcmlw
dG9ySXNTeXN0ZW1VSUZvbnQoYWRvcHRDRihDVEZvbnRDb3B5Rm9udERlc2NyaXB0b3IoZm9udERh
dGEucGxhdGZvcm1EYXRhKCkuY3RGb250KCkpKS5nZXQoKSk7CiAjZWxzZQogICAgIC8vIFN5c3Rl
bSBmb250cyBhcmUgaGlkZGVuIGJ5IGhhdmluZyBhIG5hbWUgdGhhdCBiZWdpbnMgd2l0aCBhIHBl
cmlvZCwgc28gc2ltcGx5IHNlYXJjaApAQCAtNjcxLDcgKzY3MSw3IEBAIHZvaWQgRm9udENhc2Nh
ZGU6OmRyYXdFbXBoYXNpc01hcmtzRm9yQ28KICAgICBkcmF3RW1waGFzaXNNYXJrcyhjb250ZXh0
LCBydW4sIGdseXBoQnVmZmVyLCBtYXJrLCBGbG9hdFBvaW50KHBvaW50LngoKSArIGluaXRpYWxB
ZHZhbmNlLCBwb2ludC55KCkpKTsKIH0KIAotZmxvYXQgRm9udENhc2NhZGU6OmZsb2F0V2lkdGhG
b3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9u
dERhdGEqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29u
c3QKK2Zsb2F0IEZvbnRDYXNjYWRlOjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4
dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVy
ZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKIHsKICAgICBDb21wbGV4VGV4dENvbnRyb2xsZXIg
Y29udHJvbGxlcih0aGlzLCBydW4sIHRydWUsIGZhbGxiYWNrRm9udHMpOwogICAgIGlmIChnbHlw
aE92ZXJmbG93KSB7CkBAIC02ODksNyArNjg5LDcgQEAgaW50IEZvbnRDYXNjYWRlOjpvZmZzZXRG
b3JQb3NpdGlvbkZvckNvbQogICAgIHJldHVybiBjb250cm9sbGVyLm9mZnNldEZvclBvc2l0aW9u
KHgsIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKTsKIH0KIAotY29uc3QgU2ltcGxlRm9udERhdGEqIEZv
bnRDYXNjYWRlOjpmb250RGF0YUZvckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVD
aGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBGb250RGF0YVZhcmlhbnQgdmFyaWFudCkg
Y29uc3QKK2NvbnN0IEZvbnQqIEZvbnRDYXNjYWRlOjpmb250Rm9yQ29tYmluaW5nQ2hhcmFjdGVy
U2VxdWVuY2UoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIEZvbnRWYXJp
YW50IHZhcmlhbnQpIGNvbnN0CiB7CiAgICAgVUNoYXIzMiBiYXNlQ2hhcmFjdGVyOwogICAgIHNp
emVfdCBiYXNlQ2hhcmFjdGVyTGVuZ3RoID0gMDsKQEAgLTcwMSw1MSArNzAxLDUxIEBAIGNvbnN0
IFNpbXBsZUZvbnREYXRhKiBGb250Q2FzY2FkZTo6Zm9udEQKICAgICAgICAgcmV0dXJuIDA7CiAK
ICAgICBpZiAobGVuZ3RoID09IGJhc2VDaGFyYWN0ZXJMZW5ndGgpCi0gICAgICAgIHJldHVybiBi
YXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmZvbnREYXRhOworICAgICAgICByZXR1cm4gYmFzZUNoYXJh
Y3RlckdseXBoRGF0YS5mb250OwogCi0gICAgYm9vbCB0cmllZEJhc2VDaGFyYWN0ZXJGb250RGF0
YSA9IGZhbHNlOworICAgIGJvb2wgdHJpZWRCYXNlQ2hhcmFjdGVyRm9udCA9IGZhbHNlOwogCiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgIWZhbGxiYWNrUmFuZ2VzQXQoaSkuaXNOdWxsKCk7ICsr
aSkgewotICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogc2ltcGxlRm9udERhdGEgPSBmYWxs
YmFja1Jhbmdlc0F0KGkpLmZvbnREYXRhRm9yQ2hhcmFjdGVyKGJhc2VDaGFyYWN0ZXIpOwotICAg
ICAgICBpZiAoIXNpbXBsZUZvbnREYXRhKQorICAgICAgICBjb25zdCBGb250KiBmb250ID0gZmFs
bGJhY2tSYW5nZXNBdChpKS5mb250Rm9yQ2hhcmFjdGVyKGJhc2VDaGFyYWN0ZXIpOworICAgICAg
ICBpZiAoIWZvbnQpCiAgICAgICAgICAgICBjb250aW51ZTsKICNpZiBQTEFURk9STShJT1MpCi0g
ICAgICAgIGlmIChiYXNlQ2hhcmFjdGVyID49IDB4MDYwMCAmJiBiYXNlQ2hhcmFjdGVyIDw9IDB4
MDZmZiAmJiBzaW1wbGVGb250RGF0YS0+c2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKCkpCisgICAg
ICAgIGlmIChiYXNlQ2hhcmFjdGVyID49IDB4MDYwMCAmJiBiYXNlQ2hhcmFjdGVyIDw9IDB4MDZm
ZiAmJiBmb250LT5zaG91bGROb3RCZVVzZWRGb3JBcmFiaWMoKSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogI2VuZGlmCiAgICAgICAgIGlmICh2YXJpYW50ID09IE5vcm1hbFZhcmlhbnQpIHsKLSAg
ICAgICAgICAgIGlmIChzaW1wbGVGb250RGF0YS0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24o
KSA9PSBWZXJ0aWNhbCkgewotICAgICAgICAgICAgICAgIGlmIChpc0NKS0lkZW9ncmFwaE9yU3lt
Ym9sKGJhc2VDaGFyYWN0ZXIpICYmICFzaW1wbGVGb250RGF0YS0+aGFzVmVydGljYWxHbHlwaHMo
KSkgeworICAgICAgICAgICAgaWYgKGZvbnQtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkg
PT0gVmVydGljYWwpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNDSktJZGVvZ3JhcGhPclN5bWJv
bChiYXNlQ2hhcmFjdGVyKSAmJiAhZm9udC0+aGFzVmVydGljYWxHbHlwaHMoKSkgewogICAgICAg
ICAgICAgICAgICAgICB2YXJpYW50ID0gQnJva2VuSWRlb2dyYXBoVmFyaWFudDsKLSAgICAgICAg
ICAgICAgICAgICAgc2ltcGxlRm9udERhdGEgPSBzaW1wbGVGb250RGF0YS0+YnJva2VuSWRlb2dy
YXBoRm9udERhdGEoKS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgZm9udCA9IGZvbnQtPmJy
b2tlbklkZW9ncmFwaEZvbnQoKS5nZXQoKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1f
Zm9udERlc2NyaXB0aW9uLm5vbkNKS0dseXBoT3JpZW50YXRpb24oKSA9PSBOb25DSktHbHlwaE9y
aWVudGF0aW9uVmVydGljYWxSaWdodCkgewotICAgICAgICAgICAgICAgICAgICBTaW1wbGVGb250
RGF0YSogdmVydGljYWxSaWdodEZvbnREYXRhID0gc2ltcGxlRm9udERhdGEtPnZlcnRpY2FsUmln
aHRPcmllbnRhdGlvbkZvbnREYXRhKCkuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIEdseXBo
IHZlcnRpY2FsUmlnaHRHbHlwaCA9IHZlcnRpY2FsUmlnaHRGb250RGF0YS0+Z2x5cGhGb3JDaGFy
YWN0ZXIoYmFzZUNoYXJhY3Rlcik7CisgICAgICAgICAgICAgICAgICAgIEZvbnQqIHZlcnRpY2Fs
UmlnaHRGb250ID0gZm9udC0+dmVydGljYWxSaWdodE9yaWVudGF0aW9uRm9udCgpLmdldCgpOwor
ICAgICAgICAgICAgICAgICAgICBHbHlwaCB2ZXJ0aWNhbFJpZ2h0R2x5cGggPSB2ZXJ0aWNhbFJp
Z2h0Rm9udC0+Z2x5cGhGb3JDaGFyYWN0ZXIoYmFzZUNoYXJhY3Rlcik7CiAgICAgICAgICAgICAg
ICAgICAgIGlmICh2ZXJ0aWNhbFJpZ2h0R2x5cGggPT0gYmFzZUNoYXJhY3RlckdseXBoRGF0YS5n
bHlwaCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gdmVydGljYWxS
aWdodEZvbnREYXRhOworICAgICAgICAgICAgICAgICAgICAgICAgZm9udCA9IHZlcnRpY2FsUmln
aHRGb250OwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIFNp
bXBsZUZvbnREYXRhKiB1cHJpZ2h0Rm9udERhdGEgPSBzaW1wbGVGb250RGF0YS0+dXByaWdodE9y
aWVudGF0aW9uRm9udERhdGEoKS5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgR2x5cGggdXBy
aWdodEdseXBoID0gdXByaWdodEZvbnREYXRhLT5nbHlwaEZvckNoYXJhY3RlcihiYXNlQ2hhcmFj
dGVyKTsKKyAgICAgICAgICAgICAgICAgICAgRm9udCogdXByaWdodEZvbnQgPSBmb250LT51cHJp
Z2h0T3JpZW50YXRpb25Gb250KCkuZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgIEdseXBoIHVw
cmlnaHRHbHlwaCA9IHVwcmlnaHRGb250LT5nbHlwaEZvckNoYXJhY3RlcihiYXNlQ2hhcmFjdGVy
KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHVwcmlnaHRHbHlwaCAhPSBiYXNlQ2hhcmFjdGVy
R2x5cGhEYXRhLmdseXBoKQotICAgICAgICAgICAgICAgICAgICAgICAgc2ltcGxlRm9udERhdGEg
PSB1cHJpZ2h0Rm9udERhdGE7CisgICAgICAgICAgICAgICAgICAgICAgICBmb250ID0gdXByaWdo
dEZvbnQ7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgaWYgKGNvbnN0IFNpbXBsZUZvbnREYXRhKiB2YXJpYW50Rm9udERhdGEg
PSBzaW1wbGVGb250RGF0YS0+dmFyaWFudEZvbnREYXRhKG1fZm9udERlc2NyaXB0aW9uLCB2YXJp
YW50KS5nZXQoKSkKLSAgICAgICAgICAgICAgICBzaW1wbGVGb250RGF0YSA9IHZhcmlhbnRGb250
RGF0YTsKKyAgICAgICAgICAgIGlmIChjb25zdCBGb250KiB2YXJpYW50Rm9udCA9IGZvbnQtPnZh
cmlhbnRGb250KG1fZm9udERlc2NyaXB0aW9uLCB2YXJpYW50KS5nZXQoKSkKKyAgICAgICAgICAg
ICAgICBmb250ID0gdmFyaWFudEZvbnQ7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoc2ltcGxl
Rm9udERhdGEgPT0gYmFzZUNoYXJhY3RlckdseXBoRGF0YS5mb250RGF0YSkKLSAgICAgICAgICAg
IHRyaWVkQmFzZUNoYXJhY3RlckZvbnREYXRhID0gdHJ1ZTsKKyAgICAgICAgaWYgKGZvbnQgPT0g
YmFzZUNoYXJhY3RlckdseXBoRGF0YS5mb250KQorICAgICAgICAgICAgdHJpZWRCYXNlQ2hhcmFj
dGVyRm9udCA9IHRydWU7CiAKLSAgICAgICAgaWYgKHNpbXBsZUZvbnREYXRhLT5jYW5SZW5kZXJD
b21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjaGFyYWN0ZXJzLCBsZW5ndGgpKQotICAgICAgICAg
ICAgcmV0dXJuIHNpbXBsZUZvbnREYXRhOworICAgICAgICBpZiAoZm9udC0+Y2FuUmVuZGVyQ29t
YmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY2hhcmFjdGVycywgbGVuZ3RoKSkKKyAgICAgICAgICAg
IHJldHVybiBmb250OwogICAgIH0KIAotICAgIGlmICghdHJpZWRCYXNlQ2hhcmFjdGVyRm9udERh
dGEgJiYgYmFzZUNoYXJhY3RlckdseXBoRGF0YS5mb250RGF0YSAmJiBiYXNlQ2hhcmFjdGVyR2x5
cGhEYXRhLmZvbnREYXRhLT5jYW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjaGFy
YWN0ZXJzLCBsZW5ndGgpKQotICAgICAgICByZXR1cm4gYmFzZUNoYXJhY3RlckdseXBoRGF0YS5m
b250RGF0YTsKKyAgICBpZiAoIXRyaWVkQmFzZUNoYXJhY3RlckZvbnQgJiYgYmFzZUNoYXJhY3Rl
ckdseXBoRGF0YS5mb250ICYmIGJhc2VDaGFyYWN0ZXJHbHlwaERhdGEuZm9udC0+Y2FuUmVuZGVy
Q29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY2hhcmFjdGVycywgbGVuZ3RoKSkKKyAgICAgICAg
cmV0dXJuIGJhc2VDaGFyYWN0ZXJHbHlwaERhdGEuZm9udDsKIAotICAgIHJldHVybiBTaW1wbGVG
b250RGF0YTo6c3lzdGVtRmFsbGJhY2soKTsKKyAgICByZXR1cm4gRm9udDo6c3lzdGVtRmFsbGJh
Y2soKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJl
ZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcAkocmV2aXNp
b24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUv
Rm9udENhY2hlRnJlZVR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw5ICsyMiw5IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCiAKKyNpbmNsdWRlICJG
b250LmgiCiAjaW5jbHVkZSAiT3duUHRyQ2Fpcm8uaCIKICNpbmNsdWRlICJSZWZQdHJDYWlyby5o
IgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5jbHVkZSAiVVRGMTZVQ2hhcjMySXRl
cmF0b3IuaCIKICNpbmNsdWRlIDxjYWlyby1mdC5oPgogI2luY2x1ZGUgPGNhaXJvLmg+CkBAIC04
MCw3ICs4MCw3IEBAIEZjUGF0dGVybiogZmluZEJlc3RGb250R2l2ZW5GYWxsYmFja3MoY28KICAg
ICByZXR1cm4gRmNGb250U2V0TWF0Y2goMCwgc2V0cywgMSwgcGF0dGVybiwgJmZvbnRDb25maWdS
ZXN1bHQpOwogfQogCi1SZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6c3lzdGVtRmFs
bGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGNv
bnN0IFNpbXBsZUZvbnREYXRhKiBvcmlnaW5hbEZvbnREYXRhLCBib29sLCBjb25zdCBVQ2hhciog
Y2hhcmFjdGVycywgaW50IGxlbmd0aCkKK1JlZlB0cjxGb250PiBGb250Q2FjaGU6OnN5c3RlbUZh
bGxiYWNrRm9yQ2hhcmFjdGVycyhjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBj
b25zdCBGb250KiBvcmlnaW5hbEZvbnREYXRhLCBib29sLCBjb25zdCBVQ2hhciogY2hhcmFjdGVy
cywgaW50IGxlbmd0aCkKIHsKICAgICBSZWZQdHI8RmNQYXR0ZXJuPiBwYXR0ZXJuID0gYWRvcHRS
ZWYoY3JlYXRlRm9udENvbmZpZ1BhdHRlcm5Gb3JDaGFyYWN0ZXJzKGNoYXJhY3RlcnMsIGxlbmd0
aCkpOwogICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnREYXRhID0gb3JpZ2luYWxGb250
RGF0YS0+cGxhdGZvcm1EYXRhKCk7CkBAIC05OSw3ICs5OSw3IEBAIFJlZlB0cjxTaW1wbGVGb250
RGF0YT4gRm9udENhY2hlOjpzeXN0ZW0KICAgICByZXR1cm4gZm9udEZvclBsYXRmb3JtRGF0YShh
bHRlcm5hdGVGb250RGF0YSk7CiB9CiAKLVJlZjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjps
YXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0
aW9uKQorUmVmPEZvbnQ+IEZvbnRDYWNoZTo6bGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBG
b250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikKIHsKICAgICAvLyBXZSB3YW50IHRvIHJl
dHVybiBhIGZhbGxiYWNrIGZvbnQgaGVyZSwgb3RoZXJ3aXNlIHRoZSBsb2dpYyBwcmV2ZW50aW5n
IEZvbnRDb25maWcKICAgICAvLyBtYXRjaGVzIGZvciBub24tZmFsbGJhY2sgZm9udHMgbWlnaHQg
cmV0dXJuIDAuIFNlZSBpc0ZhbGxiYWNrRm9udEFsbG93ZWQuCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9HbHlwaFBhZ2VUcmVlTm9kZUZyZWVUeXBlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlw
ZS9HbHlwaFBhZ2VUcmVlTm9kZUZyZWVUeXBlLmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvR2x5cGhQYWdlVHJlZU5vZGVG
cmVlVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJHbHlwaFBhZ2UuaCIKIAotI2luY2x1ZGUgIlNpbXBsZUZvbnRE
YXRhLmgiCisjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIlVURjE2VUNoYXIzMkl0ZXJhdG9y
LmgiCiAjaW5jbHVkZSA8Y2Fpcm8tZnQuaD4KICNpbmNsdWRlIDxjYWlyby5oPgpAQCAtMzksNyAr
MzksNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wgR2x5cGhQYWdlOjpmaWxsKHVu
c2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBi
dWZmZXJMZW5ndGgsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSkKK2Jvb2wgR2x5cGhQ
YWdlOjpmaWxsKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVy
LCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IEZvbnQqIGZvbnREYXRhKQogewogICAgIGNh
aXJvX3NjYWxlZF9mb250X3QqIHNjYWxlZEZvbnQgPSBmb250RGF0YS0+cGxhdGZvcm1EYXRhKCku
c2NhbGVkRm9udCgpOwogICAgIEFTU0VSVChzY2FsZWRGb250KTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL1NpbXBsZUZvbnREYXRhRnJlZVR5cGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBl
L1NpbXBsZUZvbnREYXRhRnJlZVR5cGUuY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9TaW1wbGVGb250RGF0YUZyZWVUeXBl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogICovCiAKICNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgorI2luY2x1ZGUgIkZvbnQuaCIK
IAogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgpA
QCAtNTEsNyArNTEsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgU2ltcGxlRm9u
dERhdGE6OnBsYXRmb3JtSW5pdCgpCit2b2lkIEZvbnQ6OnBsYXRmb3JtSW5pdCgpCiB7CiAgICAg
aWYgKCFtX3BsYXRmb3JtRGF0YS5tX3NpemUpCiAgICAgICAgIHJldHVybjsKQEAgLTkzLDE3ICs5
MywxNyBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUluaXQoKQogICAgIG1fc3ludGhl
dGljQm9sZE9mZnNldCA9IG1fcGxhdGZvcm1EYXRhLnN5bnRoZXRpY0JvbGQoKSA/IDEuMGYgOiAw
LmY7CiB9CiAKLXZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpCit2
b2lkIEZvbnQ6OnBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpCiB7CiAgICAgbV9hdmdDaGFyV2lkdGgg
PSAwLmY7CiAgICAgbV9tYXhDaGFyV2lkdGggPSAwLmY7CiAgICAgaW5pdENoYXJXaWR0aHMoKTsK
IH0KIAotUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OnBsYXRmb3Jt
Q3JlYXRlU2NhbGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24sIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAorUGFzc1JlZlB0cjxGb250PiBGb250OjpwbGF0
Zm9ybUNyZWF0ZVNjYWxlZEZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24sIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAogewogICAgIEFTU0VSVChtX3BsYXRmb3JtRGF0
YS5zY2FsZWRGb250KCkpOwotICAgIHJldHVybiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlKEZvbnRQ
bGF0Zm9ybURhdGEoY2Fpcm9fc2NhbGVkX2ZvbnRfZ2V0X2ZvbnRfZmFjZShtX3BsYXRmb3JtRGF0
YS5zY2FsZWRGb250KCkpLAorICAgIHJldHVybiBGb250OjpjcmVhdGUoRm9udFBsYXRmb3JtRGF0
YShjYWlyb19zY2FsZWRfZm9udF9nZXRfZm9udF9mYWNlKG1fcGxhdGZvcm1EYXRhLnNjYWxlZEZv
bnQoKSksCiAgICAgICAgIHNjYWxlRmFjdG9yICogZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6
ZSgpLAogICAgICAgICBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNCb2xkKCksCiAgICAgICAgIG1f
cGxhdGZvcm1EYXRhLnN5bnRoZXRpY09ibGlxdWUoKSwKQEAgLTExMSwxMiArMTExLDEyIEBAIFBh
c3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXQKICAgICAgICAgaXNDdXN0b21G
b250KCksIGZhbHNlKTsKIH0KIAotdm9pZCBTaW1wbGVGb250RGF0YTo6ZGV0ZXJtaW5lUGl0Y2go
KQordm9pZCBGb250OjpkZXRlcm1pbmVQaXRjaCgpCiB7CiAgICAgbV90cmVhdEFzRml4ZWRQaXRj
aCA9IG1fcGxhdGZvcm1EYXRhLmlzRml4ZWRQaXRjaCgpOwogfQogCi1GbG9hdFJlY3QgU2ltcGxl
Rm9udERhdGE6OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CitGbG9h
dFJlY3QgRm9udDo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKIHsK
ICAgICBpZiAoIW1fcGxhdGZvcm1EYXRhLnNpemUoKSkKICAgICAgICAgcmV0dXJuIEZsb2F0UmVj
dCgpOwpAQCAtMTMxLDcgKzEzMSw3IEBAIEZsb2F0UmVjdCBTaW1wbGVGb250RGF0YTo6cGxhdGZv
cm1Cb3VuZHMKICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CiB9CiAKLWZsb2F0IFNpbXBsZUZvbnRE
YXRhOjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CitmbG9hdCBGb250
OjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CiB7CiAgICAgaWYgKCFt
X3BsYXRmb3JtRGF0YS5zaXplKCkpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMTQ3LDcgKzE0Nyw3
IEBAIGZsb2F0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybVdpZHRoRm9yR2wKIH0KIAogI2lmIFVT
RShIQVJGQlVaWikKLWJvb2wgU2ltcGxlRm9udERhdGE6OmNhblJlbmRlckNvbWJpbmluZ0NoYXJh
Y3RlclNlcXVlbmNlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKSBjb25z
dAorYm9vbCBGb250OjpjYW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBV
Q2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkgY29uc3QKIHsKICAgICBpZiAoIW1fY29t
YmluaW5nQ2hhcmFjdGVyU2VxdWVuY2VTdXBwb3J0KQogICAgICAgICBtX2NvbWJpbmluZ0NoYXJh
Y3RlclNlcXVlbmNlU3VwcG9ydCA9IHN0ZDo6bWFrZV91bmlxdWU8SGFzaE1hcDxTdHJpbmcsIGJv
b2w+PigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enov
SGFyZkJ1enpGYWNlQ2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6RmFjZUNhaXJvLmNwcAkocmV2aXNpb24gMTc4
ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1
enpGYWNlQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMCArMzIsMTAgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJIYXJmQnV6ekZhY2UuaCIKIAorI2luY2x1ZGUgIkZv
bnQuaCIKICNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCiAjaW5jbHVkZSAiR2x5cGhCdWZm
ZXIuaCIKICNpbmNsdWRlICJIYXJmQnV6elNoYXBlci5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnRE
YXRhLmgiCiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCiAjaW5jbHVkZSA8Y2Fpcm8tZnQuaD4K
ICNpbmNsdWRlIDxjYWlyby5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFyZmJ1enovSGFyZkJ1enpGYWNlQ29yZVRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6RmFjZUNvcmVUZXh0
LmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFyZmJ1enovSGFyZkJ1enpGYWNlQ29yZVRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSw5ICszMSw5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSGFyZkJ1enpGYWNl
LmgiCiAKKyNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgog
I2luY2x1ZGUgIkhhcmZCdXp6U2hhcGVyLmgiCi0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIK
ICNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KICNp
bmNsdWRlIDxoYi5oPgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9o
YXJmYnV6ei9IYXJmQnV6elNoYXBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXIuY3BwCShyZXZpc2lvbiAx
Nzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJm
QnV6elNoYXBlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDcgQEAgc3RhdGljIGlu
bGluZSBmbG9hdCBoYXJmQnV6elBvc2l0aW9uVG9GbAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxm
bG9hdD4odmFsdWUpIC8gKDEgPDwgMTYpOwogfQogCi1IYXJmQnV6elNoYXBlcjo6SGFyZkJ1enpS
dW46OkhhcmZCdXp6UnVuKGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwgdW5zaWduZWQg
c3RhcnRJbmRleCwgdW5zaWduZWQgbnVtQ2hhcmFjdGVycywgVGV4dERpcmVjdGlvbiBkaXJlY3Rp
b24sIGhiX3NjcmlwdF90IHNjcmlwdCkKK0hhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elJ1bjo6SGFy
ZkJ1enpSdW4oY29uc3QgRm9udCogZm9udERhdGEsIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2ln
bmVkIG51bUNoYXJhY3RlcnMsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBoYl9zY3JpcHRfdCBz
Y3JpcHQpCiAgICAgOiBtX2ZvbnREYXRhKGZvbnREYXRhKQogICAgICwgbV9zdGFydEluZGV4KHN0
YXJ0SW5kZXgpCiAgICAgLCBtX251bUNoYXJhY3RlcnMobnVtQ2hhcmFjdGVycykKQEAgLTQwMSw3
ICs0MDEsNyBAQCBib29sIEhhcmZCdXp6U2hhcGVyOjpjb2xsZWN0SGFyZkJ1enpSdW5zCiAgICAg
aWYgKCFpdGVyYXRvci5jb25zdW1lKGNoYXJhY3RlciwgY2x1c3Rlckxlbmd0aCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBuZXh0Rm9udERhdGEg
PSBtX2ZvbnQtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIsIGZhbHNlKS5mb250RGF0
YTsKKyAgICBjb25zdCBGb250KiBuZXh0Rm9udERhdGEgPSBtX2ZvbnQtPmdseXBoRGF0YUZvckNo
YXJhY3RlcihjaGFyYWN0ZXIsIGZhbHNlKS5mb250OwogICAgIFVFcnJvckNvZGUgZXJyb3JDb2Rl
ID0gVV9aRVJPX0VSUk9SOwogICAgIFVTY3JpcHRDb2RlIG5leHRTY3JpcHQgPSB1c2NyaXB0X2dl
dFNjcmlwdChjaGFyYWN0ZXIsICZlcnJvckNvZGUpOwogICAgIGlmIChVX0ZBSUxVUkUoZXJyb3JD
b2RlKSkKQEAgLTQwOSw5ICs0MDksOSBAQCBib29sIEhhcmZCdXp6U2hhcGVyOjpjb2xsZWN0SGFy
ZkJ1enpSdW5zCiAKICAgICBkbyB7CiAgICAgICAgIGNvbnN0IFVDaGFyKiBjdXJyZW50Q2hhcmFj
dGVyUG9zaXRpb24gPSBpdGVyYXRvci5jaGFyYWN0ZXJzKCk7Ci0gICAgICAgIGNvbnN0IFNpbXBs
ZUZvbnREYXRhKiBjdXJyZW50Rm9udERhdGEgPSBuZXh0Rm9udERhdGE7CisgICAgICAgIGNvbnN0
IEZvbnQqIGN1cnJlbnRGb250RGF0YSA9IG5leHRGb250RGF0YTsKICAgICAgICAgaWYgKCFjdXJy
ZW50Rm9udERhdGEpCi0gICAgICAgICAgICBjdXJyZW50Rm9udERhdGEgPSAmbV9mb250LT5wcmlt
YXJ5Rm9udERhdGEoKTsKKyAgICAgICAgICAgIGN1cnJlbnRGb250RGF0YSA9ICZtX2ZvbnQtPnBy
aW1hcnlGb250KCk7CiAgICAgICAgIFVTY3JpcHRDb2RlIGN1cnJlbnRTY3JpcHQgPSBuZXh0U2Ny
aXB0OwogCiAgICAgICAgIGZvciAoaXRlcmF0b3IuYWR2YW5jZShjbHVzdGVyTGVuZ3RoKTsgaXRl
cmF0b3IuY29uc3VtZShjaGFyYWN0ZXIsIGNsdXN0ZXJMZW5ndGgpOyBpdGVyYXRvci5hZHZhbmNl
KGNsdXN0ZXJMZW5ndGgpKSB7CkBAIC00MzUsOSArNDM1LDkgQEAgYm9vbCBIYXJmQnV6elNoYXBl
cjo6Y29sbGVjdEhhcmZCdXp6UnVucwogICAgICAgICAgICAgICAgICAgICBjbHVzdGVyTGVuZ3Ro
ID0gbWFya0xlbmd0aDsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIG5leHRGb250RGF0YSA9IG1fZm9udC0+Z2x5cGhEYXRh
Rm9yQ2hhcmFjdGVyKGNoYXJhY3RlciwgZmFsc2UpLmZvbnREYXRhOworICAgICAgICAgICAgICAg
IG5leHRGb250RGF0YSA9IG1fZm9udC0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3Rlciwg
ZmFsc2UpLmZvbnQ7CiAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBuZXh0Rm9u
dERhdGEgPSBtX2ZvbnQtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIsIGZhbHNlKS5m
b250RGF0YTsKKyAgICAgICAgICAgICAgICBuZXh0Rm9udERhdGEgPSBtX2ZvbnQtPmdseXBoRGF0
YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIsIGZhbHNlKS5mb250OwogCiAgICAgICAgICAgICBuZXh0
U2NyaXB0ID0gdXNjcmlwdF9nZXRTY3JpcHQoY2hhcmFjdGVyLCAmZXJyb3JDb2RlKTsKICAgICAg
ICAgICAgIGlmIChVX0ZBSUxVUkUoZXJyb3JDb2RlKSkKQEAgLTQ2Nyw3ICs0NjcsNyBAQCBib29s
IEhhcmZCdXp6U2hhcGVyOjpzaGFwZUhhcmZCdXp6UnVucyhiCiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1faGFyZkJ1enpSdW5zLnNpemUoKTsgKytpKSB7CiAgICAgICAgIHVuc2lnbmVk
IHJ1bkluZGV4ID0gbV9ydW4ucnRsKCkgPyBtX2hhcmZCdXp6UnVucy5zaXplKCkgLSBpIC0gMSA6
IGk7CiAgICAgICAgIEhhcmZCdXp6UnVuKiBjdXJyZW50UnVuID0gbV9oYXJmQnV6elJ1bnNbcnVu
SW5kZXhdLmdldCgpOwotICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogY3VycmVudEZvbnRE
YXRhID0gY3VycmVudFJ1bi0+Zm9udERhdGEoKTsKKyAgICAgICAgY29uc3QgRm9udCogY3VycmVu
dEZvbnREYXRhID0gY3VycmVudFJ1bi0+Zm9udERhdGEoKTsKICAgICAgICAgaWYgKGN1cnJlbnRG
b250RGF0YS0+aXNTVkdGb250KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTQ4
NSw3ICs0ODUsNyBAQCBib29sIEhhcmZCdXp6U2hhcGVyOjpzaGFwZUhhcmZCdXp6UnVucyhiCiAK
ICAgICAgICAgaWYgKG1fZm9udC0+aXNTbWFsbENhcHMoKSAmJiB1X2lzbG93ZXIobV9ub3JtYWxp
emVkQnVmZmVyW2N1cnJlbnRSdW4tPnN0YXJ0SW5kZXgoKV0pKSB7CiAgICAgICAgICAgICBTdHJp
bmcgdXBwZXJUZXh0ID0gU3RyaW5nKG1fbm9ybWFsaXplZEJ1ZmZlci5nZXQoKSArIGN1cnJlbnRS
dW4tPnN0YXJ0SW5kZXgoKSwgY3VycmVudFJ1bi0+bnVtQ2hhcmFjdGVycygpKS51cHBlcigpOwot
ICAgICAgICAgICAgY3VycmVudEZvbnREYXRhID0gbV9mb250LT5nbHlwaERhdGFGb3JDaGFyYWN0
ZXIodXBwZXJUZXh0WzBdLCBmYWxzZSwgU21hbGxDYXBzVmFyaWFudCkuZm9udERhdGE7CisgICAg
ICAgICAgICBjdXJyZW50Rm9udERhdGEgPSBtX2ZvbnQtPmdseXBoRGF0YUZvckNoYXJhY3Rlcih1
cHBlclRleHRbMF0sIGZhbHNlLCBTbWFsbENhcHNWYXJpYW50KS5mb250OwogICAgICAgICAgICAg
Y29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KHVwcGVyVGV4dCkudXBjb252ZXJ0
ZWRDaGFyYWN0ZXJzKCk7CiAgICAgICAgICAgICBoYl9idWZmZXJfYWRkX3V0ZjE2KGhhcmZCdXp6
QnVmZmVyLmdldCgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQxNl90Kj4oY2hhcmFjdGVy
cyksIGN1cnJlbnRSdW4tPm51bUNoYXJhY3RlcnMoKSwgMCwgY3VycmVudFJ1bi0+bnVtQ2hhcmFj
dGVycygpKTsKICAgICAgICAgfSBlbHNlCkBAIC01MTQsNyArNTE0LDcgQEAgYm9vbCBIYXJmQnV6
elNoYXBlcjo6c2hhcGVIYXJmQnV6elJ1bnMoYgogCiB2b2lkIEhhcmZCdXp6U2hhcGVyOjpzZXRH
bHlwaFBvc2l0aW9uc0ZvckhhcmZCdXp6UnVuKEhhcmZCdXp6UnVuKiBjdXJyZW50UnVuLCBoYl9i
dWZmZXJfdCogaGFyZkJ1enpCdWZmZXIpCiB7Ci0gICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGN1
cnJlbnRGb250RGF0YSA9IGN1cnJlbnRSdW4tPmZvbnREYXRhKCk7CisgICAgY29uc3QgRm9udCog
Y3VycmVudEZvbnREYXRhID0gY3VycmVudFJ1bi0+Zm9udERhdGEoKTsKICAgICBoYl9nbHlwaF9p
bmZvX3QqIGdseXBoSW5mb3MgPSBoYl9idWZmZXJfZ2V0X2dseXBoX2luZm9zKGhhcmZCdXp6QnVm
ZmVyLCAwKTsKICAgICBoYl9nbHlwaF9wb3NpdGlvbl90KiBnbHlwaFBvc2l0aW9ucyA9IGhiX2J1
ZmZlcl9nZXRfZ2x5cGhfcG9zaXRpb25zKGhhcmZCdXp6QnVmZmVyLCAwKTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9I
YXJmQnV6elNoYXBlci5oCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNoYXBlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC00NCw4ICs0NCw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgRm9udDsKIGNs
YXNzIEZvbnRDYXNjYWRlOwotY2xhc3MgU2ltcGxlRm9udERhdGE7CiAKIGNsYXNzIEhhcmZCdXp6
U2hhcGVyIHsKIHB1YmxpYzoKQEAgLTY2LDcgKzY2LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAg
ICBjbGFzcyBIYXJmQnV6elJ1biB7CiAgICAgcHVibGljOgotICAgICAgICBIYXJmQnV6elJ1bihj
b25zdCBTaW1wbGVGb250RGF0YSosIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIG51bUNo
YXJhY3RlcnMsIFRleHREaXJlY3Rpb24sIGhiX3NjcmlwdF90KTsKKyAgICAgICAgSGFyZkJ1enpS
dW4oY29uc3QgRm9udCosIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIG51bUNoYXJhY3Rl
cnMsIFRleHREaXJlY3Rpb24sIGhiX3NjcmlwdF90KTsKIAogICAgICAgICB2b2lkIGFwcGx5U2hh
cGVSZXN1bHQoaGJfYnVmZmVyX3QqKTsKICAgICAgICAgdm9pZCBzZXRHbHlwaEFuZFBvc2l0aW9u
cyh1bnNpZ25lZCBpbmRleCwgdWludDE2X3QgZ2x5cGhJZCwgZmxvYXQgYWR2YW5jZSwgZmxvYXQg
b2Zmc2V0WCwgZmxvYXQgb2Zmc2V0WSk7CkBAIC03NSw3ICs3NSw3IEBAIHByaXZhdGU6CiAgICAg
ICAgIGludCBjaGFyYWN0ZXJJbmRleEZvclhQb3NpdGlvbihmbG9hdCB0YXJnZXRYKTsKICAgICAg
ICAgZmxvYXQgeFBvc2l0aW9uRm9yT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCk7CiAKLSAgICAgICAg
Y29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKCkgeyByZXR1cm4gbV9mb250RGF0YTsgfQor
ICAgICAgICBjb25zdCBGb250KiBmb250RGF0YSgpIHsgcmV0dXJuIG1fZm9udERhdGE7IH0KICAg
ICAgICAgdW5zaWduZWQgc3RhcnRJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRJbmRleDsg
fQogICAgICAgICB1bnNpZ25lZCBudW1DaGFyYWN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1D
aGFyYWN0ZXJzOyB9CiAgICAgICAgIHVuc2lnbmVkIG51bUdseXBocygpIGNvbnN0IHsgcmV0dXJu
IG1fbnVtR2x5cGhzOyB9CkBAIC04OCw3ICs4OCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGhiX3Nj
cmlwdF90IHNjcmlwdCgpIHsgcmV0dXJuIG1fc2NyaXB0OyB9CiAKICAgICBwcml2YXRlOgotICAg
ICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogbV9mb250RGF0YTsKKyAgICAgICAgY29uc3QgRm9u
dCogbV9mb250RGF0YTsKICAgICAgICAgdW5zaWduZWQgbV9zdGFydEluZGV4OwogICAgICAgICBz
aXplX3QgbV9udW1DaGFyYWN0ZXJzOwogICAgICAgICB1bnNpZ25lZCBtX251bUdseXBoczsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9Gb250Q2FjaGVJT1MubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0ZvbnRD
YWNoZUlPUy5tbQkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvaW9zL0ZvbnRDYWNoZUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMs
NyBAQCBzdGF0aWMgQ0ZDaGFyYWN0ZXJTZXRSZWYgcGhvbmVGYWxsYmFja0NoCiAgICAgcmV0dXJu
IGNoYXJhY3RlclNldDsKIH0KIAotUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hl
OjpnZXRTeXN0ZW1Gb250RmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlv
biYgZGVzY3JpcHRpb24sIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBvcmlnaW5hbEZvbnREYXRhLCBj
b25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKK1Bhc3NSZWZQdHI8Rm9udD4gRm9u
dENhY2hlOjpnZXRTeXN0ZW1Gb250RmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IEZvbnQqIG9yaWdpbmFsRm9udERhdGEsIGNvbnN0
IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQogewogICAgIGNvbnN0IEZvbnRQbGF0Zm9y
bURhdGEmIHBsYXRmb3JtRGF0YSA9IG9yaWdpbmFsRm9udERhdGEtPnBsYXRmb3JtRGF0YSgpOwog
ICAgIENURm9udFJlZiBjdEZvbnQgPSBwbGF0Zm9ybURhdGEuZm9udCgpOwpAQCAtMTk0LDcgKzE5
NCw3IEBAIHN0YXRpYyBMYW5ndWFnZVNwZWNpZmljRm9udCBsYW5ndWFnZVNwZWMKICAgICByZXR1
cm4gTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6Ok5vbmU7CiB9CiAKLVJlZlB0cjxTaW1wbGVGb250RGF0
YT4gRm9udENhY2hlOjpzeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiBkZXNjcmlwdGlvbiwgY29uc3QgU2ltcGxlRm9udERhdGEqIG9yaWdpbmFsRm9udERh
dGEsIGJvb2wsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQorUmVmUHRyPEZv
bnQ+IEZvbnRDYWNoZTo6c3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IEZvbnQqIG9yaWdpbmFsRm9udERhdGEsIGJvb2ws
IGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQogewogICAgIC8vIFVubGlrZSBP
UyBYLCBvdXIgZmFsbGJhY2sgZm9udCBvbiBpUGhvbmUgaXMgQXJpYWwgVW5pY29kZSwgd2hpY2gg
ZG9lc24ndCBoYXZlIHNvbWUgYXBwbGUtc3BlY2lmaWMgZ2x5cGhzIGxpa2UgRjhGRi4KICAgICAv
LyBGYWxsIGJhY2sgdG8gdGhlIEFwcGxlIEZhbGxiYWNrIGZvbnQgaW4gdGhpcyBjYXNlLgpAQCAt
MjIwLDcgKzIyMCw3IEBAIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpzeXN0ZW0K
ICAgICBpZiAobGVuZ3RoID4gMCkKICAgICAgICAgbGFuZ3VhZ2VTcGVjaWZpY0ZvbnQgPSBsYW5n
dWFnZVNwZWNpZmljRmFsbGJhY2tGb250KGMpOwogCi0gICAgUmVmUHRyPFNpbXBsZUZvbnREYXRh
PiBzaW1wbGVGb250RGF0YTsKKyAgICBSZWZQdHI8Rm9udD4gZm9udDsKIAogICAgIHN3aXRjaCAo
bGFuZ3VhZ2VTcGVjaWZpY0ZvbnQpIHsKICAgICBjYXNlIExhbmd1YWdlU3BlY2lmaWNGb250OjpD
aGluZXNlSmFwYW5lc2U6IHsKQEAgLTI5OCw0MyArMjk4LDQzIEBAIFJlZlB0cjxTaW1wbGVGb250
RGF0YT4gRm9udENhY2hlOjpzeXN0ZW0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAg
ICAgIHNpbXBsZUZvbnREYXRhID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgaXNGb250V2Vp
Z2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyAqY2prQm9sZFtwcmVmZXJyZWRDSktGb250
XSA6ICpjamtQbGFpbltwcmVmZXJyZWRDSktGb250XSwgZmFsc2UpOworICAgICAgICBmb250ID0g
Zm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53
ZWlnaHQoKSkgPyAqY2prQm9sZFtwcmVmZXJyZWRDSktGb250XSA6ICpjamtQbGFpbltwcmVmZXJy
ZWRDSktGb250XSwgZmFsc2UpOwogICAgICAgICBib29sIHVzZVNlY29uZGFyeUZvbnQgPSB0cnVl
OwotICAgICAgICBpZiAoc2ltcGxlRm9udERhdGEpIHsKKyAgICAgICAgaWYgKGZvbnQpIHsKICAg
ICAgICAgICAgIENHR2x5cGggZ2x5cGhzWzJdOwogICAgICAgICAgICAgLy8gQ0dGb250R2V0R2x5
cGhzRm9yVW5pY2hhcnMgdGFrZXMgVVRGLTE2IGJ1ZmZlci4gU2hvdWxkIG9ubHkgYmUgMSBjb2Rl
cG9pbnQgYnV0IHNpbmNlIHdlIG1heSBwYXNzIGluIHR3byBVVEYtMTYgY2hhcmFjdGVycywKICAg
ICAgICAgICAgIC8vIG1ha2Ugcm9vbSBmb3IgMiBnbHlwaHMganVzdCB0byBiZSBzYWZlLgotICAg
ICAgICAgICAgQ0dGb250R2V0R2x5cGhzRm9yVW5pY2hhcnMoc2ltcGxlRm9udERhdGEtPnBsYXRm
b3JtRGF0YSgpLmNnRm9udCgpLCBjaGFyYWN0ZXJzLCBnbHlwaHMsIGxlbmd0aCk7CisgICAgICAg
ICAgICBDR0ZvbnRHZXRHbHlwaHNGb3JVbmljaGFycyhmb250LT5wbGF0Zm9ybURhdGEoKS5jZ0Zv
bnQoKSwgY2hhcmFjdGVycywgZ2x5cGhzLCBsZW5ndGgpOwogCiAgICAgICAgICAgICB1c2VTZWNv
bmRhcnlGb250ID0gKGdseXBoc1swXSA9PSAwKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICh1
c2VTZWNvbmRhcnlGb250KQotICAgICAgICAgICAgc2ltcGxlRm9udERhdGEgPSBmb250Rm9yRmFt
aWx5KGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/
ICpjamtCb2xkW3NlY29uZGFyeUNKS0ZvbnRdIDogKmNqa1BsYWluW3NlY29uZGFyeUNKS0ZvbnRd
LCBmYWxzZSk7CisgICAgICAgICAgICBmb250ID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwg
aXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyAqY2prQm9sZFtzZWNvbmRh
cnlDSktGb250XSA6ICpjamtQbGFpbltzZWNvbmRhcnlDSktGb250XSwgZmFsc2UpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgY2FzZSBMYW5ndWFnZVNwZWNpZmljRm9udDo6S29yZWFuOiB7
CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGtvcmVhblBsYWlu
KCJBcHBsZVNER290aGljTmVvLU1lZGl1bSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpOwogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBrb3Jl
YW5Cb2xkKCJBcHBsZVNER290aGljTmVvLUJvbGQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZy
b21MaXRlcmFsKTsKLSAgICAgICAgc2ltcGxlRm9udERhdGEgPSBmb250Rm9yRmFtaWx5KGRlc2Ny
aXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/IGtvcmVhbkJv
bGQgOiBrb3JlYW5QbGFpbiwgZmFsc2UpOworICAgICAgICBmb250ID0gZm9udEZvckZhbWlseShk
ZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBrb3Jl
YW5Cb2xkIDoga29yZWFuUGxhaW4sIGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
IGNhc2UgTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6OkN5cmlsbGljOiB7CiAgICAgICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGN5cmlsbGljUGxhaW4oIkhlbHZldGljYU5ldWUi
LCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKICAgICAgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gY3lyaWxsaWNCb2xkKCJIZWx2ZXRpY2FOZXVlLUJv
bGQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAgc2ltcGxl
Rm9udERhdGEgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRl
c2NyaXB0aW9uLndlaWdodCgpKSA/IGN5cmlsbGljQm9sZCA6IGN5cmlsbGljUGxhaW4sIGZhbHNl
KTsKKyAgICAgICAgZm9udCA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGlzRm9udFdlaWdo
dEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gY3lyaWxsaWNCb2xkIDogY3lyaWxsaWNQbGFp
biwgZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBMYW5ndWFnZVNwZWNp
ZmljRm9udDo6QXJhYmljOiB7CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNT
dHJpbmc+IGFyYWJpY1BsYWluKCJHZWV6YVBybyIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpOwogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBh
cmFiaWNCb2xkKCJHZWV6YVByby1Cb2xkIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCk7Ci0gICAgICAgIHNpbXBsZUZvbnREYXRhID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlv
biwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBhcmFiaWNCb2xkIDog
YXJhYmljUGxhaW4sIGZhbHNlKTsKKyAgICAgICAgZm9udCA9IGZvbnRGb3JGYW1pbHkoZGVzY3Jp
cHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gYXJhYmljQm9s
ZCA6IGFyYWJpY1BsYWluLCBmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNl
IExhbmd1YWdlU3BlY2lmaWNGb250OjpIZWJyZXc6IHsKICAgICAgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPEF0b21pY1N0cmluZz4gaGVicmV3UGxhaW4oIkFyaWFsSGVicmV3IiwgQXRvbWljU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxBdG9taWNTdHJpbmc+IGhlYnJld0JvbGQoIkFyaWFsSGVicmV3LUJvbGQiLCBBdG9taWNTdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAgc2ltcGxlRm9udERhdGEgPSBmb250
Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdo
dCgpKSA/IGhlYnJld0JvbGQgOiBoZWJyZXdQbGFpbiwgZmFsc2UpOworICAgICAgICBmb250ID0g
Zm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53
ZWlnaHQoKSkgPyBoZWJyZXdCb2xkIDogaGVicmV3UGxhaW4sIGZhbHNlKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgIGNhc2UgTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6OkluZGljOiB7CkBAIC0z
OTAsMzYgKzM5MCwzNiBAQCBSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6c3lzdGVt
CiAgICAgICAgIGlmIChpbmRpY1BhZ2VPcmRlckluZGV4IDwgKHNpemVvZihpbmRpY1VuaWNvZGVQ
YWdlRm9udHMpIC8gc2l6ZW9mKEF0b21pY1N0cmluZyopKSkgewogICAgICAgICAgICAgQXRvbWlj
U3RyaW5nKiBpbmRpY0ZvbnRTdHJpbmcgPSBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndl
aWdodCgpKSA/IGluZGljVW5pY29kZVBhZ2VGb250c0JvbGRbaW5kaWNQYWdlT3JkZXJJbmRleF0g
OiBpbmRpY1VuaWNvZGVQYWdlRm9udHNbaW5kaWNQYWdlT3JkZXJJbmRleF07CiAgICAgICAgICAg
ICBpZiAoaW5kaWNGb250U3RyaW5nKQotICAgICAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0g
Zm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgKmluZGljRm9udFN0cmluZywgZmFsc2UpOworICAg
ICAgICAgICAgICAgIGZvbnQgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCAqaW5kaWNGb250
U3RyaW5nLCBmYWxzZSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNh
c2UgTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6OlRoYWk6IHsKICAgICAgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPEF0b21pY1N0cmluZz4gdGhhaVBsYWluKCJUaG9uYnVyaSIsIEF0b21pY1N0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpOwogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRv
bWljU3RyaW5nPiB0aGFpQm9sZCgiVGhvbmJ1cmktQm9sZCIsIEF0b21pY1N0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpOwotICAgICAgICBzaW1wbGVGb250RGF0YSA9IGZvbnRGb3JGYW1pbHko
ZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gdGhh
aUJvbGQgOiB0aGFpUGxhaW4sIGZhbHNlKTsKKyAgICAgICAgZm9udCA9IGZvbnRGb3JGYW1pbHko
ZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gdGhh
aUJvbGQgOiB0aGFpUGxhaW4sIGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNh
c2UgTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6OlRpYmV0YW46IHsKICAgICAgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPEF0b21pY1N0cmluZz4gdGliZXRhblBsYWluKCJLYWlsYXNhIiwgQXRvbWljU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxBdG9taWNTdHJpbmc+IHRpYmV0YW5Cb2xkKCJLYWlsYXNhLUJvbGQiLCBBdG9taWNTdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAgc2ltcGxlRm9udERhdGEgPSBmb250Rm9y
RmFtaWx5KGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgp
KSA/IHRpYmV0YW5Cb2xkIDogdGliZXRhblBsYWluLCBmYWxzZSk7CisgICAgICAgIGZvbnQgPSBm
b250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndl
aWdodCgpKSA/IHRpYmV0YW5Cb2xkIDogdGliZXRhblBsYWluLCBmYWxzZSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICBjYXNlIExhbmd1YWdlU3BlY2lmaWNGb250OjpDYW5hZGlhbkFib3Jp
Z2luYWxTeWxsYWJpYzogewogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3Ry
aW5nPiBjYXNQbGFpbigiRXVwaGVtaWFVQ0FTIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCk7CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGNh
c0JvbGQoIkV1cGhlbWlhVUNBUy1Cb2xkIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCk7Ci0gICAgICAgIHNpbXBsZUZvbnREYXRhID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlv
biwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBjYXNCb2xkIDogY2Fz
UGxhaW4sIGZhbHNlKTsKKyAgICAgICAgZm9udCA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24s
IGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gY2FzQm9sZCA6IGNhc1Bs
YWluLCBmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIExhbmd1YWdlU3Bl
Y2lmaWNGb250OjpLaG1lcjogewogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWlj
U3RyaW5nPiBraG1lcigiS2htZXJTYW5nYW1NTiIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpOwotICAgICAgICBzaW1wbGVGb250RGF0YSA9IGZvbnRGb3JGYW1pbHkoZGVzY3Jp
cHRpb24sIGtobWVyLCBmYWxzZSk7CisgICAgICAgIGZvbnQgPSBmb250Rm9yRmFtaWx5KGRlc2Ny
aXB0aW9uLCBraG1lciwgZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBM
YW5ndWFnZVNwZWNpZmljRm9udDo6TGFvOiB7CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxBdG9taWNTdHJpbmc+IGxhbygiTGFvU2FuZ2FtTU4iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKTsKLSAgICAgICAgc2ltcGxlRm9udERhdGEgPSBmb250Rm9yRmFtaWx5KGRl
c2NyaXB0aW9uLCBsYW8sIGZhbHNlKTsKKyAgICAgICAgZm9udCA9IGZvbnRGb3JGYW1pbHkoZGVz
Y3JpcHRpb24sIGxhbywgZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgZGVmYXVs
dDogewpAQCAtNDMwLDI3ICs0MzAsMjcgQEAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2Fj
aGU6OnN5c3RlbQogICAgICAgICAgICAgICAgIHVzZUVtb2ppRm9udCA9IENGQ2hhcmFjdGVyU2V0
SXNMb25nQ2hhcmFjdGVyTWVtYmVyKGFwcGxlQ29sb3JFbW9qaUNoYXJhY3RlclNldCgpLCBjKTsK
ICAgICAgICAgfQogICAgICAgICBpZiAodXNlRW1vamlGb250KQotICAgICAgICAgICAgc2ltcGxl
Rm9udERhdGEgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBhcHBsZUNvbG9yRW1vamksIGZh
bHNlKTsKKyAgICAgICAgICAgIGZvbnQgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBhcHBs
ZUNvbG9yRW1vamksIGZhbHNlKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBSZXRhaW5Q
dHI8Q1RGb250UmVmPiBmYWxsYmFja0ZvbnQgPSBhZG9wdENGKENURm9udENyZWF0ZUZvckNoYXJh
Y3RlcnMob3JpZ2luYWxGb250RGF0YS0+Z2V0Q1RGb250KCksIGNoYXJhY3RlcnMsIGxlbmd0aCwg
bnVsbHB0cikpOwogICAgICAgICAgICAgaWYgKFJldGFpblB0cjxDRlN0cmluZ1JlZj4gZm91bmRG
b250TmFtZSA9IGFkb3B0Q0YoQ1RGb250Q29weVBvc3RTY3JpcHROYW1lKGZhbGxiYWNrRm9udC5n
ZXQoKSkpKQotICAgICAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gZm9udEZvckZhbWlseShk
ZXNjcmlwdGlvbiwgZm91bmRGb250TmFtZS5nZXQoKSwgZmFsc2UpOworICAgICAgICAgICAgICAg
IGZvbnQgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBmb3VuZEZvbnROYW1lLmdldCgpLCBm
YWxzZSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIH0KIAotICAgIGlm
IChzaW1wbGVGb250RGF0YSkKLSAgICAgICAgcmV0dXJuIHNpbXBsZUZvbnREYXRhLnJlbGVhc2Uo
KTsKKyAgICBpZiAoZm9udCkKKyAgICAgICAgcmV0dXJuIGZvbnQucmVsZWFzZSgpOwogCiAgICAg
cmV0dXJuIGxhc3RSZXNvcnRGYWxsYmFja0ZvbnQoZGVzY3JpcHRpb24pOwogfQogCi1SZWZQdHI8
U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6c2ltaWxhckZvbnRQbGF0Zm9ybURhdGEoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKK1JlZlB0cjxGb250PiBGb250Q2FjaGU6OnNp
bWlsYXJGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCiB7CiAgICAgLy8g
QXR0ZW1wdCB0byBmaW5kIGFuIGFwcHJvcHJpYXRlIGZvbnQgdXNpbmcgYSBtYXRjaCBiYXNlZCBv
biB0aGUgcHJlc2VuY2Ugb2Yga2V5d29yZHMgaW4KICAgICAvLyB0aGUgcmVxdWVzdGVkIG5hbWVz
LiBGb3IgZXhhbXBsZSwgd2UnbGwgbWF0Y2ggYW55IG5hbWUgdGhhdCBjb250YWlucyAiQXJhYmlj
IiB0byBHZWV6YSBQcm8uCi0gICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBzaW1wbGVGb250RGF0
YTsKKyAgICBSZWZQdHI8Rm9udD4gZm9udDsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
ZGVzY3JpcHRpb24uZmFtaWx5Q291bnQoKTsgKytpKSB7CiAgICAgICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgZmFtaWx5ID0gZGVzY3JpcHRpb24uZmFtaWx5QXQoaSk7CiAgICAgICAgIGlmIChmYW1p
bHkuaXNFbXB0eSgpKQpAQCAtNDYxLDcgKzQ2MSw3IEBAIFJlZlB0cjxTaW1wbGVGb250RGF0YT4g
Rm9udENhY2hlOjpzaW1pbGEKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0
cmluZz4gbWVubG8oIm1lbmxvIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7
CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGNvdXJpZXIoImNv
dXJpZXIiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKICAgICAgICAgaWYg
KGVxdWFsSWdub3JpbmdDYXNlKGZhbWlseSwgbW9uYWNvKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShm
YW1pbHksIG1lbmxvKSkgewotICAgICAgICAgICAgc2ltcGxlRm9udERhdGEgPSBmb250Rm9yRmFt
aWx5KGRlc2NyaXB0aW9uLCBjb3VyaWVyKTsKKyAgICAgICAgICAgIGZvbnQgPSBmb250Rm9yRmFt
aWx5KGRlc2NyaXB0aW9uLCBjb3VyaWVyKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICB9CiAKQEAgLTQ2OSw3ICs0NjksNyBAQCBSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNo
ZTo6c2ltaWxhCiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGx1
Y2lkYUdyYW5kZSgibHVjaWRhIGdyYW5kZSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpOwogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiB2ZXJk
YW5hKCJ2ZXJkYW5hIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CiAgICAg
ICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShmYW1pbHksIGx1Y2lkYUdyYW5kZSkpIHsKLSAgICAg
ICAgICAgIHNpbXBsZUZvbnREYXRhID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgdmVyZGFu
YSk7CisgICAgICAgICAgICBmb250ID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgdmVyZGFu
YSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCkBAIC00NzksMTUgKzQ3OSwx
NiBAQCBSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6c2ltaWxhCiAgICAgICAgIHN0
YXRpYyBTdHJpbmcqIG1hdGNoV29yZHNbM10gPSB7ICZhcmFiaWMuZ2V0KCksICZwYXNodG8uZ2V0
KCksICZ1cmR1LmdldCgpIH07CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNT
dHJpbmc+IGdlZXphUGxhaW4oIkdlZXphUHJvIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCk7CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGdl
ZXphQm9sZCgiR2VlemFQcm8tQm9sZCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVy
YWwpOwotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDMgJiYgIXNpbXBsZUZvbnREYXRhOyAr
K2opCisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgMyAmJiAhZm9udDsgKytqKSB7CiAgICAg
ICAgICAgICBpZiAoZmFtaWx5LmNvbnRhaW5zKCptYXRjaFdvcmRzW2pdLCBmYWxzZSkpCi0gICAg
ICAgICAgICAgICAgc2ltcGxlRm9udERhdGEgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBp
c0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/IGdlZXphQm9sZCA6IGdlZXph
UGxhaW4pOworICAgICAgICAgICAgICAgIGZvbnQgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9u
LCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/IGdlZXphQm9sZCA6IGdl
ZXphUGxhaW4pOworICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIHNpbXBsZUZvbnREYXRh
LnJlbGVhc2UoKTsKKyAgICByZXR1cm4gZm9udC5yZWxlYXNlKCk7CiB9CiAKLVJlZjxTaW1wbGVG
b250RGF0YT4gRm9udENhY2hlOjpsYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKQorUmVmPEZvbnQ+IEZvbnRDYWNoZTo6bGFzdFJlc29y
dEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikKIHsK
ICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBmYWxsYmFja0ZvbnRGYW1p
bHkoIi5QaG9uZUZhbGxiYWNrIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7
CiAgICAgcmV0dXJuICpmb250Rm9yRmFtaWx5KGZvbnREZXNjcmlwdGlvbiwgZmFsbGJhY2tGb250
RmFtaWx5LCBmYWxzZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9p
b3MvU2ltcGxlRm9udERhdGFJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvaW9zL1NpbXBsZUZvbnREYXRhSU9TLm1tCShyZXZpc2lvbiAxNzg4NTcp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvU2ltcGxlRm9udERhdGFJ
T1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKICAqLwogCiAjaW1wb3J0ICJj
b25maWcuaCIKLSNpbXBvcnQgIlNpbXBsZUZvbnREYXRhLmgiCisjaW1wb3J0ICJGb250LmgiCiAK
ICNpbXBvcnQgIkJsb2NrRXhjZXB0aW9ucy5oIgogI2ltcG9ydCAiQ29yZUdyYXBoaWNzU1BJLmgi
CkBAIC02Nyw3ICs2Nyw3IEBAIHN0YXRpYyBib29sIGZvbnRIYXNWZXJ0aWNhbEdseXBocyhDVEZv
bnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3Jt
SW5pdCgpCit2b2lkIEZvbnQ6OnBsYXRmb3JtSW5pdCgpCiB7CiAgICAgbV9zeW50aGV0aWNCb2xk
T2Zmc2V0ID0gbV9wbGF0Zm9ybURhdGEubV9zeW50aGV0aWNCb2xkID8gY2VpbGYobV9wbGF0Zm9y
bURhdGEuc2l6ZSgpICAvIDI0LjBmKSA6IDAuZjsKICAgICBtX3NwYWNlR2x5cGggPSAwOwpAQCAt
MTI4LDcgKzEyOCw3IEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtSW5pdCgpCiAgICAg
bV9mb250TWV0cmljcy5zZXRMaW5lU3BhY2luZygwKTsKIH0KIAotdm9pZCBTaW1wbGVGb250RGF0
YTo6cGxhdGZvcm1DaGFyV2lkdGhJbml0KCkKK3ZvaWQgRm9udDo6cGxhdGZvcm1DaGFyV2lkdGhJ
bml0KCkKIHsKICAgICBtX2F2Z0NoYXJXaWR0aCA9IDA7CiAgICAgbV9tYXhDaGFyV2lkdGggPSAw
OwpAQCAtMTM3LDEyICsxMzcsMTIgQEAgdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1DaGFy
V2lkdGhJbgogICAgIGluaXRDaGFyV2lkdGhzKCk7CiB9CiAKLVBhc3NSZWZQdHI8U2ltcGxlRm9u
dERhdGE+IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZvbnREYXRhKGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYsIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAorUGFzc1JlZlB0cjxG
b250PiBGb250OjpwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9u
JiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0CiB7CiAgICAgaWYgKGlzQ3VzdG9tRm9udCgpKSB7
CiAgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEgc2NhbGVkRm9udERhdGEobV9wbGF0Zm9ybURhdGEp
OwogICAgICAgICBzY2FsZWRGb250RGF0YS5tX3NpemUgPSBzY2FsZWRGb250RGF0YS5tX3NpemUg
KiBzY2FsZUZhY3RvcjsKLSAgICAgICAgcmV0dXJuIFNpbXBsZUZvbnREYXRhOjpjcmVhdGUoc2Nh
bGVkRm9udERhdGEsIHRydWUsIGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIEZvbnQ6OmNyZWF0ZShz
Y2FsZWRGb250RGF0YSwgdHJ1ZSwgZmFsc2UpOwogICAgIH0KIAogICAgIGZsb2F0IHNpemUgPSBt
X3BsYXRmb3JtRGF0YS5zaXplKCkgKiBzY2FsZUZhY3RvcjsKQEAgLTE2Nyw3ICsxNjcsNyBAQCBQ
YXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0CiAgICAgcmV0dXJuIG51bGxw
dHI7CiB9CiAKLXZvaWQgU2ltcGxlRm9udERhdGE6OmRldGVybWluZVBpdGNoKCkKK3ZvaWQgRm9u
dDo6ZGV0ZXJtaW5lUGl0Y2goKQogewogICAgIENURm9udFJlZiBjdEZvbnQgPSBtX3BsYXRmb3Jt
RGF0YS5mb250KCk7CiAgICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9IGZhbHNlOwpAQCAtMTg0LDEy
ICsxODQsMTIgQEAgdm9pZCBTaW1wbGVGb250RGF0YTo6ZGV0ZXJtaW5lUGl0Y2goKQogICAgIH0K
IH0KIAotQ0dGb250UmVuZGVyaW5nU3R5bGUgU2ltcGxlRm9udERhdGE6OnJlbmRlcmluZ1N0eWxl
KCkgY29uc3QKK0NHRm9udFJlbmRlcmluZ1N0eWxlIEZvbnQ6OnJlbmRlcmluZ1N0eWxlKCkgY29u
c3QKIHsKICAgICByZXR1cm4ga0NHRm9udFJlbmRlcmluZ1N0eWxlQW50aWFsaWFzaW5nIHwga0NH
Rm9udFJlbmRlcmluZ1N0eWxlU3VicGl4ZWxQb3NpdGlvbmluZyB8IGtDR0ZvbnRSZW5kZXJpbmdT
dHlsZVN1YnBpeGVsUXVhbnRpemF0aW9uIHwga0NHRm9udEFudGlhbGlhc2luZ1N0eWxlVW5maWx0
ZXJlZDsKIH0KIAotYm9vbCBTaW1wbGVGb250RGF0YTo6YWR2YW5jZUZvckNvbG9yQml0bWFwRm9u
dChHbHlwaCwgQ0dTaXplJikgY29uc3QKK2Jvb2wgRm9udDo6YWR2YW5jZUZvckNvbG9yQml0bWFw
Rm9udChHbHlwaCwgQ0dTaXplJikgY29uc3QKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9s
bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAK
LSAgICBmbG9hdCB3aWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIEhhc2hTZXQ8Y29u
c3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cykKKyAgICBmbG9hdCB3aWR0aCh1bnNp
Z25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0Zv
bnRzKQogICAgIHsKICAgICAgICAgbV9jb250cm9sbGVyLT5hZHZhbmNlKGZyb20sIDAsIEJ5V2hv
bGVHbHlwaHMsIGZhbGxiYWNrRm9udHMpOwogICAgICAgICBmbG9hdCBiZWZvcmVXaWR0aCA9IG1f
Y29udHJvbGxlci0+cnVuV2lkdGhTb0ZhcigpOwpAQCAtOTYsNyArOTYsNyBAQCB2b2lkIEZvbnRD
YXNjYWRlOjpkZWxldGVMYXlvdXQoVGV4dExheW91CiAgICAgZGVsZXRlIGxheW91dDsKIH0KIAot
ZmxvYXQgRm9udENhc2NhZGU6OndpZHRoKFRleHRMYXlvdXQmIGxheW91dCwgdW5zaWduZWQgZnJv
bSwgdW5zaWduZWQgbGVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNr
Rm9udHMpCitmbG9hdCBGb250Q2FzY2FkZTo6d2lkdGgoVGV4dExheW91dCYgbGF5b3V0LCB1bnNp
Z25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0Zv
bnRzKQogewogICAgIHJldHVybiBsYXlvdXQud2lkdGgoZnJvbSwgbGVuLCBmYWxsYmFja0ZvbnRz
KTsKIH0KQEAgLTExNSw3ICsxMTUsNyBAQCBzdGF0aWMgaW5saW5lIENHRmxvYXQgY2VpbENHRmxv
YXQoQ0dGbG9hCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENHRmxvYXQ+KGNlaWwoZikpOwogfQog
Ci1Db21wbGV4VGV4dENvbnRyb2xsZXI6OkNvbXBsZXhUZXh0Q29udHJvbGxlcihjb25zdCBGb250
Q2FzY2FkZSogZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBib29sIG1heVVzZU5hdHVyYWxXcml0
aW5nRGlyZWN0aW9uLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9u
dHMsIGJvb2wgZm9yVGV4dEVtcGhhc2lzKQorQ29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4
VGV4dENvbnRyb2xsZXIoY29uc3QgRm9udENhc2NhZGUqIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1
biwgYm9vbCBtYXlVc2VOYXR1cmFsV3JpdGluZ0RpcmVjdGlvbiwgSGFzaFNldDxjb25zdCBGb250
Kj4qIGZhbGxiYWNrRm9udHMsIGJvb2wgZm9yVGV4dEVtcGhhc2lzKQogICAgIDogbV9mb250KCpm
b250KQogICAgICwgbV9ydW4ocnVuKQogICAgICwgbV9pc0xUUk9ubHkodHJ1ZSkKQEAgLTI5MSw3
ICsyOTEsNyBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Y29sbGVjdENvbXBsCiAgICAg
aWYgKCFtX2VuZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gV2UgYnJlYWsgdXAgZ2x5cGgg
cnVuIGdlbmVyYXRpb24gZm9yIHRoZSBzdHJpbmcgYnkgRm9udERhdGEuCisgICAgLy8gV2UgYnJl
YWsgdXAgZ2x5cGggcnVuIGdlbmVyYXRpb24gZm9yIHRoZSBzdHJpbmcgYnkgRm9udC4KICAgICBj
b25zdCBVQ2hhciogY3A7CiAKICAgICBpZiAobV9ydW4uaXM4Qml0KCkpIHsKQEAgLTMwOCw5ICsz
MDgsOSBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Y29sbGVjdENvbXBsCiAgICAgY29u
c3QgVUNoYXIqIGN1cnIgPSBjcDsKICAgICBjb25zdCBVQ2hhciogZW5kID0gY3AgKyBtX2VuZDsK
IAotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YTsKKyAgICBjb25zdCBGb250KiBm
b250OwogICAgIGJvb2wgaXNNaXNzaW5nR2x5cGg7Ci0gICAgY29uc3QgU2ltcGxlRm9udERhdGEq
IG5leHRGb250RGF0YTsKKyAgICBjb25zdCBGb250KiBuZXh0Rm9udDsKICAgICBib29sIG5leHRJ
c01pc3NpbmdHbHlwaDsKIAogICAgIHVuc2lnbmVkIG1hcmtDb3VudDsKQEAgLTMzMiwxMiArMzMy
LDEyIEBAIHZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpjb2xsZWN0Q29tcGwKICAgICB9CiAK
ICAgICBuZXh0SXNNaXNzaW5nR2x5cGggPSBmYWxzZTsKLSAgICBuZXh0Rm9udERhdGEgPSBtX2Zv
bnQuZm9udERhdGFGb3JDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShzZXF1ZW5jZVN0YXJ0LCBj
dXJyIC0gc2VxdWVuY2VTdGFydCwgbmV4dElzU21hbGxDYXBzID8gU21hbGxDYXBzVmFyaWFudCA6
IE5vcm1hbFZhcmlhbnQpOwotICAgIGlmICghbmV4dEZvbnREYXRhKQorICAgIG5leHRGb250ID0g
bV9mb250LmZvbnRGb3JDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShzZXF1ZW5jZVN0YXJ0LCBj
dXJyIC0gc2VxdWVuY2VTdGFydCwgbmV4dElzU21hbGxDYXBzID8gU21hbGxDYXBzVmFyaWFudCA6
IE5vcm1hbFZhcmlhbnQpOworICAgIGlmICghbmV4dEZvbnQpCiAgICAgICAgIG5leHRJc01pc3Np
bmdHbHlwaCA9IHRydWU7CiAKICAgICB3aGlsZSAoY3VyciA8IGVuZCkgewotICAgICAgICBmb250
RGF0YSA9IG5leHRGb250RGF0YTsKKyAgICAgICAgZm9udCA9IG5leHRGb250OwogICAgICAgICBp
c01pc3NpbmdHbHlwaCA9IG5leHRJc01pc3NpbmdHbHlwaDsKICAgICAgICAgaXNTbWFsbENhcHMg
PSBuZXh0SXNTbWFsbENhcHM7CiAgICAgICAgIGludCBpbmRleCA9IGN1cnIgLSBjcDsKQEAgLTM1
OCwxNyArMzU4LDE3IEBAIHZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpjb2xsZWN0Q29tcGwK
IAogICAgICAgICBuZXh0SXNNaXNzaW5nR2x5cGggPSBmYWxzZTsKICAgICAgICAgaWYgKGJhc2VD
aGFyYWN0ZXIgPT0gemVyb1dpZHRoSm9pbmVyKQotICAgICAgICAgICAgbmV4dEZvbnREYXRhID0g
Zm9udERhdGE7CisgICAgICAgICAgICBuZXh0Rm9udCA9IGZvbnQ7CiAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgbmV4dEZvbnREYXRhID0gbV9mb250LmZvbnREYXRhRm9yQ29tYmluaW5nQ2hh
cmFjdGVyU2VxdWVuY2UoY3AgKyBpbmRleCwgY3VyciAtIGNwIC0gaW5kZXgsIG5leHRJc1NtYWxs
Q2FwcyA/IFNtYWxsQ2Fwc1ZhcmlhbnQgOiBOb3JtYWxWYXJpYW50KTsKLSAgICAgICAgICAgIGlm
ICghbmV4dEZvbnREYXRhKQorICAgICAgICAgICAgbmV4dEZvbnQgPSBtX2ZvbnQuZm9udEZvckNv
bWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNwICsgaW5kZXgsIGN1cnIgLSBjcCAtIGluZGV4LCBu
ZXh0SXNTbWFsbENhcHMgPyBTbWFsbENhcHNWYXJpYW50IDogTm9ybWFsVmFyaWFudCk7CisgICAg
ICAgICAgICBpZiAoIW5leHRGb250KQogICAgICAgICAgICAgICAgIG5leHRJc01pc3NpbmdHbHlw
aCA9IHRydWU7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobmV4dEZvbnREYXRhICE9IGZvbnRE
YXRhIHx8IG5leHRJc01pc3NpbmdHbHlwaCAhPSBpc01pc3NpbmdHbHlwaCkgeworICAgICAgICBp
ZiAobmV4dEZvbnQgIT0gZm9udCB8fCBuZXh0SXNNaXNzaW5nR2x5cGggIT0gaXNNaXNzaW5nR2x5
cGgpIHsKICAgICAgICAgICAgIGludCBpdGVtU3RhcnQgPSBzdGF0aWNfY2FzdDxpbnQ+KGluZGV4
T2ZGb250VHJhbnNpdGlvbik7CiAgICAgICAgICAgICBpbnQgaXRlbUxlbmd0aCA9IGluZGV4IC0g
aW5kZXhPZkZvbnRUcmFuc2l0aW9uOwotICAgICAgICAgICAgY29sbGVjdENvbXBsZXhUZXh0UnVu
c0ZvckNoYXJhY3RlcnMoKGlzU21hbGxDYXBzID8gbV9zbWFsbENhcHNCdWZmZXIuZGF0YSgpIDog
Y3ApICsgaXRlbVN0YXJ0LCBpdGVtTGVuZ3RoLCBpdGVtU3RhcnQsICFpc01pc3NpbmdHbHlwaCA/
IGZvbnREYXRhIDogMCk7CisgICAgICAgICAgICBjb2xsZWN0Q29tcGxleFRleHRSdW5zRm9yQ2hh
cmFjdGVycygoaXNTbWFsbENhcHMgPyBtX3NtYWxsQ2Fwc0J1ZmZlci5kYXRhKCkgOiBjcCkgKyBp
dGVtU3RhcnQsIGl0ZW1MZW5ndGgsIGl0ZW1TdGFydCwgIWlzTWlzc2luZ0dseXBoID8gZm9udCA6
IDApOwogICAgICAgICAgICAgaW5kZXhPZkZvbnRUcmFuc2l0aW9uID0gaW5kZXg7CiAgICAgICAg
IH0KICAgICB9CkBAIC0zNzYsNyArMzc2LDcgQEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6
OmNvbGxlY3RDb21wbAogICAgIGludCBpdGVtTGVuZ3RoID0gbV9lbmQgLSBpbmRleE9mRm9udFRy
YW5zaXRpb247CiAgICAgaWYgKGl0ZW1MZW5ndGgpIHsKICAgICAgICAgaW50IGl0ZW1TdGFydCA9
IGluZGV4T2ZGb250VHJhbnNpdGlvbjsKLSAgICAgICAgY29sbGVjdENvbXBsZXhUZXh0UnVuc0Zv
ckNoYXJhY3RlcnMoKG5leHRJc1NtYWxsQ2FwcyA/IG1fc21hbGxDYXBzQnVmZmVyLmRhdGEoKSA6
IGNwKSArIGl0ZW1TdGFydCwgaXRlbUxlbmd0aCwgaXRlbVN0YXJ0LCAhbmV4dElzTWlzc2luZ0ds
eXBoID8gbmV4dEZvbnREYXRhIDogMCk7CisgICAgICAgIGNvbGxlY3RDb21wbGV4VGV4dFJ1bnNG
b3JDaGFyYWN0ZXJzKChuZXh0SXNTbWFsbENhcHMgPyBtX3NtYWxsQ2Fwc0J1ZmZlci5kYXRhKCkg
OiBjcCkgKyBpdGVtU3RhcnQsIGl0ZW1MZW5ndGgsIGl0ZW1TdGFydCwgIW5leHRJc01pc3NpbmdH
bHlwaCA/IG5leHRGb250IDogMCk7CiAgICAgfQogCiAgICAgaWYgKCFtX3J1bi5sdHIoKSkKQEAg
LTQ2OSw3ICs0NjksNyBAQCB1bnNpZ25lZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmluY3JlbWVu
CiAgICAgcmV0dXJuIGluZGV4T2ZDdXJyZW50UnVuKGxlZnRtb3N0R2x5cGgpOwogfQogCi12b2lk
IENvbXBsZXhUZXh0Q29udHJvbGxlcjo6YWR2YW5jZSh1bnNpZ25lZCBvZmZzZXQsIEdseXBoQnVm
ZmVyKiBnbHlwaEJ1ZmZlciwgR2x5cGhJdGVyYXRpb25TdHlsZSBpdGVyYXRpb25TdHlsZSwgSGFz
aFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzKQordm9pZCBDb21wbGV4
VGV4dENvbnRyb2xsZXI6OmFkdmFuY2UodW5zaWduZWQgb2Zmc2V0LCBHbHlwaEJ1ZmZlciogZ2x5
cGhCdWZmZXIsIEdseXBoSXRlcmF0aW9uU3R5bGUgaXRlcmF0aW9uU3R5bGUsIEhhc2hTZXQ8Y29u
c3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzKQogewogICAgIGlmIChzdGF0aWNfY2FzdDxpbnQ+KG9m
ZnNldCkgPiBtX2VuZCkKICAgICAgICAgb2Zmc2V0ID0gbV9lbmQ7CkBAIC00OTQsOCArNDk0LDgg
QEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmFkdmFuY2UodW5zaQogICAgICAgICBzaXpl
X3QgZ2x5cGhDb3VudCA9IGNvbXBsZXhUZXh0UnVuLmdseXBoQ291bnQoKTsKICAgICAgICAgdW5z
aWduZWQgZyA9IGx0ciA/IG1fZ2x5cGhJbkN1cnJlbnRSdW4gOiBnbHlwaENvdW50IC0gMSAtIG1f
Z2x5cGhJbkN1cnJlbnRSdW47CiAgICAgICAgIHVuc2lnbmVkIGsgPSBsZWZ0bW9zdEdseXBoICsg
ZzsKLSAgICAgICAgaWYgKGZhbGxiYWNrRm9udHMgJiYgJmNvbXBsZXhUZXh0UnVuLmZvbnREYXRh
KCkgIT0gJm1fZm9udC5wcmltYXJ5Rm9udERhdGEoKSkKLSAgICAgICAgICAgIGZhbGxiYWNrRm9u
dHMtPmFkZCgmY29tcGxleFRleHRSdW4uZm9udERhdGEoKSk7CisgICAgICAgIGlmIChmYWxsYmFj
a0ZvbnRzICYmICZjb21wbGV4VGV4dFJ1bi5mb250KCkgIT0gJm1fZm9udC5wcmltYXJ5Rm9udCgp
KQorICAgICAgICAgICAgZmFsbGJhY2tGb250cy0+YWRkKCZjb21wbGV4VGV4dFJ1bi5mb250KCkp
OwogCiAgICAgICAgIC8vIFdlIG11c3Qgc3RvcmUgdGhlIGluaXRpYWwgYWR2YW5jZSBmb3IgdGhl
IGZpcnN0IGdseXBoIHdlIGFyZSBnb2luZyB0byBkcmF3LgogICAgICAgICAvLyBXaGVuIGxlZnRt
b3N0R2x5cGggaXMgMCwgaXQgcmVwcmVzZW50cyB0aGUgZmlyc3QgZ2x5cGggdG8gZHJhdywgdGFr
aW5nIGludG8KQEAgLTUyMCw3ICs1MjAsNyBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6
YWR2YW5jZSh1bnNpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICBpZiAo
Z2x5cGhCdWZmZXIgJiYgIW1fY2hhcmFjdGVySW5DdXJyZW50R2x5cGgpCi0gICAgICAgICAgICAg
ICAgZ2x5cGhCdWZmZXItPmFkZChtX2FkanVzdGVkR2x5cGhzW2tdLCAmY29tcGxleFRleHRSdW4u
Zm9udERhdGEoKSwgYWRqdXN0ZWRBZHZhbmNlLCBjb21wbGV4VGV4dFJ1bi5pbmRleEF0KG1fZ2x5
cGhJbkN1cnJlbnRSdW4pKTsKKyAgICAgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+YWRkKG1fYWRq
dXN0ZWRHbHlwaHNba10sICZjb21wbGV4VGV4dFJ1bi5mb250KCksIGFkanVzdGVkQWR2YW5jZSwg
Y29tcGxleFRleHRSdW4uaW5kZXhBdChtX2dseXBoSW5DdXJyZW50UnVuKSk7CiAKICAgICAgICAg
ICAgIHVuc2lnbmVkIG9sZENoYXJhY3RlckluQ3VycmVudEdseXBoID0gbV9jaGFyYWN0ZXJJbkN1
cnJlbnRHbHlwaDsKICAgICAgICAgICAgIG1fY2hhcmFjdGVySW5DdXJyZW50R2x5cGggPSBzdGQ6
Om1pbihtX2N1cnJlbnRDaGFyYWN0ZXIgLSBjb21wbGV4VGV4dFJ1bi5zdHJpbmdMb2NhdGlvbigp
LCBnbHlwaEVuZE9mZnNldCkgLSBnbHlwaFN0YXJ0T2Zmc2V0OwpAQCAtNTY2LDkgKzU2Niw5IEBA
IHZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjphZGp1c3RHbHlwaHMKICAgICBmb3IgKHNpemVf
dCByID0gMDsgciA8IHJ1bkNvdW50OyArK3IpIHsKICAgICAgICAgQ29tcGxleFRleHRSdW4mIGNv
bXBsZXhUZXh0UnVuID0gKm1fY29tcGxleFRleHRSdW5zW3JdOwogICAgICAgICB1bnNpZ25lZCBn
bHlwaENvdW50ID0gY29tcGxleFRleHRSdW4uZ2x5cGhDb3VudCgpOwotICAgICAgICBjb25zdCBT
aW1wbGVGb250RGF0YSYgZm9udERhdGEgPSBjb21wbGV4VGV4dFJ1bi5mb250RGF0YSgpOworICAg
ICAgICBjb25zdCBGb250JiBmb250ID0gY29tcGxleFRleHRSdW4uZm9udCgpOwogI2lmIFBMQVRG
T1JNKElPUykKLSAgICAgICAgYm9vbCBpc0Vtb2ppID0gZm9udERhdGEucGxhdGZvcm1EYXRhKCku
bV9pc0Vtb2ppOworICAgICAgICBib29sIGlzRW1vamkgPSBmb250LnBsYXRmb3JtRGF0YSgpLm1f
aXNFbW9qaTsKICNlbmRpZgogCiAgICAgICAgIC8vIFJlcHJlc2VudCB0aGUgaW5pdGlhbCBhZHZh
bmNlIGZvciBhIHRleHQgcnVuIGJ5IGFkanVzdGluZyB0aGUgYWR2YW5jZQpAQCAtNTg4LDggKzU4
OCw4IEBAIHZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjphZGp1c3RHbHlwaHMKICAgICAgICAg
Y29uc3QgQ0dTaXplKiBhZHZhbmNlcyA9IGNvbXBsZXhUZXh0UnVuLmFkdmFuY2VzKCk7CiAKICAg
ICAgICAgYm9vbCBsYXN0UnVuID0gciArIDEgPT0gcnVuQ291bnQ7Ci0gICAgICAgIGJvb2wgcm91
bmRzQWR2YW5jZXMgPSAhbV9mb250LmlzUHJpbnRlckZvbnQoKSAmJiBmb250RGF0YS5wbGF0Zm9y
bURhdGEoKS5yb3VuZHNHbHlwaEFkdmFuY2VzKCk7Ci0gICAgICAgIGZsb2F0IHNwYWNlV2lkdGgg
PSBmb250RGF0YS5zcGFjZVdpZHRoKCkgLSBmb250RGF0YS5zeW50aGV0aWNCb2xkT2Zmc2V0KCk7
CisgICAgICAgIGJvb2wgcm91bmRzQWR2YW5jZXMgPSAhbV9mb250LmlzUHJpbnRlckZvbnQoKSAm
JiBmb250LnBsYXRmb3JtRGF0YSgpLnJvdW5kc0dseXBoQWR2YW5jZXMoKTsKKyAgICAgICAgZmxv
YXQgc3BhY2VXaWR0aCA9IGZvbnQuc3BhY2VXaWR0aCgpIC0gZm9udC5zeW50aGV0aWNCb2xkT2Zm
c2V0KCk7CiAgICAgICAgIENHRmxvYXQgcm91bmRlZFNwYWNlV2lkdGggPSByb3VuZENHRmxvYXQo
c3BhY2VXaWR0aCk7CiAgICAgICAgIGNvbnN0IFVDaGFyKiBjcCA9IGNvbXBsZXhUZXh0UnVuLmNo
YXJhY3RlcnMoKTsKICAgICAgICAgQ0dQb2ludCBnbHlwaE9yaWdpbiA9IENHUG9pbnRaZXJvOwpA
QCAtNjE2LDMzICs2MTYsMzMgQEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmFkanVzdEds
eXBocwogICAgICAgICAgICAgICAgIG5leHRDaCA9ICoobV9jb21wbGV4VGV4dFJ1bnNbciArIDFd
LT5jaGFyYWN0ZXJzKCkgKyBtX2NvbXBsZXhUZXh0UnVuc1tyICsgMV0tPmluZGV4QXQoMCkpOwog
CiAgICAgICAgICAgICBib29sIHRyZWF0QXNTcGFjZSA9IEZvbnRDYXNjYWRlOjp0cmVhdEFzU3Bh
Y2UoY2gpOwotICAgICAgICAgICAgQ0dHbHlwaCBnbHlwaCA9IHRyZWF0QXNTcGFjZSA/IGZvbnRE
YXRhLnNwYWNlR2x5cGgoKSA6IGdseXBoc1tpXTsKKyAgICAgICAgICAgIENHR2x5cGggZ2x5cGgg
PSB0cmVhdEFzU3BhY2UgPyBmb250LnNwYWNlR2x5cGgoKSA6IGdseXBoc1tpXTsKICAgICAgICAg
ICAgIENHU2l6ZSBhZHZhbmNlID0gdHJlYXRBc1NwYWNlID8gQ0dTaXplTWFrZShzcGFjZVdpZHRo
LCBhZHZhbmNlc1tpXS5oZWlnaHQpIDogYWR2YW5jZXNbaV07CiAjaWYgUExBVEZPUk0oSU9TKQog
ICAgICAgICAgICAgaWYgKGlzRW1vamkgJiYgYWR2YW5jZS53aWR0aCkKLSAgICAgICAgICAgICAg
ICBhZHZhbmNlLndpZHRoID0gZm9udERhdGEud2lkdGhGb3JHbHlwaChnbHlwaCk7CisgICAgICAg
ICAgICAgICAgYWR2YW5jZS53aWR0aCA9IGZvbnQud2lkdGhGb3JHbHlwaChnbHlwaCk7CiAjZW5k
aWYKIAogICAgICAgICAgICAgaWYgKGNoID09ICdcdCcgJiYgbV9ydW4uYWxsb3dUYWJzKCkpCi0g
ICAgICAgICAgICAgICAgYWR2YW5jZS53aWR0aCA9IG1fZm9udC50YWJXaWR0aChmb250RGF0YSwg
bV9ydW4udGFiU2l6ZSgpLCBtX3J1bi54UG9zKCkgKyBtX3RvdGFsV2lkdGggKyB3aWR0aFNpbmNl
TGFzdENvbW1pdCk7CisgICAgICAgICAgICAgICAgYWR2YW5jZS53aWR0aCA9IG1fZm9udC50YWJX
aWR0aChmb250LCBtX3J1bi50YWJTaXplKCksIG1fcnVuLnhQb3MoKSArIG1fdG90YWxXaWR0aCAr
IHdpZHRoU2luY2VMYXN0Q29tbWl0KTsKICAgICAgICAgICAgIGVsc2UgaWYgKEZvbnRDYXNjYWRl
Ojp0cmVhdEFzWmVyb1dpZHRoU3BhY2UoY2gpICYmICF0cmVhdEFzU3BhY2UpIHsKICAgICAgICAg
ICAgICAgICBhZHZhbmNlLndpZHRoID0gMDsKLSAgICAgICAgICAgICAgICBnbHlwaCA9IGZvbnRE
YXRhLnNwYWNlR2x5cGgoKTsKKyAgICAgICAgICAgICAgICBnbHlwaCA9IGZvbnQuc3BhY2VHbHlw
aCgpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBmbG9hdCByb3VuZGVkQWR2YW5jZVdp
ZHRoID0gcm91bmRmKGFkdmFuY2Uud2lkdGgpOwogICAgICAgICAgICAgaWYgKHJvdW5kc0FkdmFu
Y2VzKQogICAgICAgICAgICAgICAgIGFkdmFuY2Uud2lkdGggPSByb3VuZGVkQWR2YW5jZVdpZHRo
OwogCi0gICAgICAgICAgICBhZHZhbmNlLndpZHRoICs9IGZvbnREYXRhLnN5bnRoZXRpY0JvbGRP
ZmZzZXQoKTsKKyAgICAgICAgICAgIGFkdmFuY2Uud2lkdGggKz0gZm9udC5zeW50aGV0aWNCb2xk
T2Zmc2V0KCk7CiAKICAKICAgICAgICAgICAgIC8vIFdlIHNwZWNpYWwgY2FzZSBzcGFjZXMgaW4g
dHdvIHdheXMgd2hlbiBhcHBseWluZyB3b3JkIHJvdW5kaW5nLiAKICAgICAgICAgICAgIC8vIEZp
cnN0LCB3ZSByb3VuZCBzcGFjZXMgdG8gYW4gYWRqdXN0ZWQgd2lkdGggaW4gYWxsIGZvbnRzLiAK
ICAgICAgICAgICAgIC8vIFNlY29uZCwgaW4gZml4ZWQtcGl0Y2ggZm9udHMgd2UgZW5zdXJlIHRo
YXQgYWxsIGdseXBocyB0aGF0IAogICAgICAgICAgICAgLy8gbWF0Y2ggdGhlIHdpZHRoIG9mIHRo
ZSBzcGFjZSBnbHlwaCBoYXZlIHRoZSBzYW1lIHdpZHRoIGFzIHRoZSBzcGFjZSBnbHlwaC4gCi0g
ICAgICAgICAgICBpZiAobV9ydW4uYXBwbHlXb3JkUm91bmRpbmcoKSAmJiByb3VuZGVkQWR2YW5j
ZVdpZHRoID09IHJvdW5kZWRTcGFjZVdpZHRoICYmIChmb250RGF0YS5waXRjaCgpID09IEZpeGVk
UGl0Y2ggfHwgZ2x5cGggPT0gZm9udERhdGEuc3BhY2VHbHlwaCgpKSkKLSAgICAgICAgICAgICAg
ICBhZHZhbmNlLndpZHRoID0gZm9udERhdGEuYWRqdXN0ZWRTcGFjZVdpZHRoKCk7CisgICAgICAg
ICAgICBpZiAobV9ydW4uYXBwbHlXb3JkUm91bmRpbmcoKSAmJiByb3VuZGVkQWR2YW5jZVdpZHRo
ID09IHJvdW5kZWRTcGFjZVdpZHRoICYmIChmb250LnBpdGNoKCkgPT0gRml4ZWRQaXRjaCB8fCBn
bHlwaCA9PSBmb250LnNwYWNlR2x5cGgoKSkpCisgICAgICAgICAgICAgICAgYWR2YW5jZS53aWR0
aCA9IGZvbnQuYWRqdXN0ZWRTcGFjZVdpZHRoKCk7CiAKICAgICAgICAgICAgIGlmIChoYXNFeHRy
YVNwYWNpbmcpIHsKICAgICAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBhIGdseXBoIHdpdGggYW4g
YWR2YW5jZSwgZ28gYWhlYWQgYW5kIGFkZCBpbiBsZXR0ZXItc3BhY2luZy4KQEAgLTcxNyw3ICs3
MTcsNyBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6YWRqdXN0R2x5cGhzCiAgICAgICAg
ICAgICBtX2FkanVzdGVkQWR2YW5jZXMuYXBwZW5kKGFkdmFuY2UpOwogICAgICAgICAgICAgbV9h
ZGp1c3RlZEdseXBocy5hcHBlbmQoZ2x5cGgpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBG
bG9hdFJlY3QgZ2x5cGhCb3VuZHMgPSBmb250RGF0YS5ib3VuZHNGb3JHbHlwaChnbHlwaCk7Cisg
ICAgICAgICAgICBGbG9hdFJlY3QgZ2x5cGhCb3VuZHMgPSBmb250LmJvdW5kc0ZvckdseXBoKGds
eXBoKTsKICAgICAgICAgICAgIGdseXBoQm91bmRzLm1vdmUoZ2x5cGhPcmlnaW4ueCwgZ2x5cGhP
cmlnaW4ueSk7CiAgICAgICAgICAgICBtX21pbkdseXBoQm91bmRpbmdCb3hYID0gc3RkOjptaW4o
bV9taW5HbHlwaEJvdW5kaW5nQm94WCwgZ2x5cGhCb3VuZHMueCgpKTsKICAgICAgICAgICAgIG1f
bWF4R2x5cGhCb3VuZGluZ0JveFggPSBzdGQ6Om1heChtX21heEdseXBoQm91bmRpbmdCb3hYLCBn
bHlwaEJvdW5kcy5tYXhYKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuaAkocmV2aXNp
b24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBs
ZXhUZXh0Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIHR5cGVk
ZWYgY29uc3Qgc3RydWN0IF9fQ1RMaW5lICogQ1RMaW5lUmUKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgRm9udENhc2NhZGU7Ci1jbGFzcyBTaW1wbGVGb250RGF0YTsKK2NsYXNzIEZvbnQ7
CiBjbGFzcyBUZXh0UnVuOwogCiBlbnVtIEdseXBoSXRlcmF0aW9uU3R5bGUgeyBJbmNsdWRlUGFy
dGlhbEdseXBocywgQnlXaG9sZUdseXBocyB9OwpAQCAtNTAsMTAgKzUwLDEwIEBAIGVudW0gR2x5
cGhJdGVyYXRpb25TdHlsZSB7IEluY2x1ZGVQYXJ0aWEKIC8vIGNvbXBsZXggc2NyaXB0cyBvbiBP
UyBYLgogY2xhc3MgQ29tcGxleFRleHRDb250cm9sbGVyIHsKIHB1YmxpYzoKLSAgICBDb21wbGV4
VGV4dENvbnRyb2xsZXIoY29uc3QgRm9udENhc2NhZGUqLCBjb25zdCBUZXh0UnVuJiwgYm9vbCBt
YXlVc2VOYXR1cmFsV3JpdGluZ0RpcmVjdGlvbiA9IGZhbHNlLCBIYXNoU2V0PGNvbnN0IFNpbXBs
ZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwLCBib29sIGZvclRleHRFbXBoYXNpcyA9IGZh
bHNlKTsKKyAgICBDb21wbGV4VGV4dENvbnRyb2xsZXIoY29uc3QgRm9udENhc2NhZGUqLCBjb25z
dCBUZXh0UnVuJiwgYm9vbCBtYXlVc2VOYXR1cmFsV3JpdGluZ0RpcmVjdGlvbiA9IGZhbHNlLCBI
YXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cyA9IDAsIGJvb2wgZm9yVGV4dEVtcGhh
c2lzID0gZmFsc2UpOwogCiAgICAgLy8gQWR2YW5jZSBhbmQgZW1pdCBnbHlwaHMgdXAgdG8gdGhl
IHNwZWNpZmllZCBjaGFyYWN0ZXIuCi0gICAgdm9pZCBhZHZhbmNlKHVuc2lnbmVkIHRvLCBHbHlw
aEJ1ZmZlciogPSAwLCBHbHlwaEl0ZXJhdGlvblN0eWxlID0gSW5jbHVkZVBhcnRpYWxHbHlwaHMs
IEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDApOworICAg
IHZvaWQgYWR2YW5jZSh1bnNpZ25lZCB0bywgR2x5cGhCdWZmZXIqID0gMCwgR2x5cGhJdGVyYXRp
b25TdHlsZSA9IEluY2x1ZGVQYXJ0aWFsR2x5cGhzLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFs
bGJhY2tGb250cyA9IDApOwogCiAgICAgLy8gQ29tcHV0ZSB0aGUgY2hhcmFjdGVyIG9mZnNldCBm
b3IgYSBnaXZlbiB4IGNvb3JkaW5hdGUuCiAgICAgaW50IG9mZnNldEZvclBvc2l0aW9uKGZsb2F0
IHgsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOwpAQCAtNzMsMTggKzczLDE4IEBAIHB1Ymxp
YzoKIHByaXZhdGU6CiAgICAgY2xhc3MgQ29tcGxleFRleHRSdW4gOiBwdWJsaWMgUmVmQ291bnRl
ZDxDb21wbGV4VGV4dFJ1bj4gewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFJlZjxDb21w
bGV4VGV4dFJ1bj4gY3JlYXRlKENUUnVuUmVmIGN0UnVuLCBjb25zdCBTaW1wbGVGb250RGF0YSYg
Zm9udERhdGEsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBzdHJpbmdMb2NhdGlv
biwgc2l6ZV90IHN0cmluZ0xlbmd0aCwgQ0ZSYW5nZSBydW5SYW5nZSkKKyAgICAgICAgc3RhdGlj
IFJlZjxDb21wbGV4VGV4dFJ1bj4gY3JlYXRlKENUUnVuUmVmIGN0UnVuLCBjb25zdCBGb250JiBm
b250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24sIHNp
emVfdCBzdHJpbmdMZW5ndGgsIENGUmFuZ2UgcnVuUmFuZ2UpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENvbXBsZXhUZXh0UnVuKGN0UnVuLCBmb250RGF0YSwg
Y2hhcmFjdGVycywgc3RyaW5nTG9jYXRpb24sIHN0cmluZ0xlbmd0aCwgcnVuUmFuZ2UpKTsKKyAg
ICAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENvbXBsZXhUZXh0UnVuKGN0UnVuLCBmb250
LCBjaGFyYWN0ZXJzLCBzdHJpbmdMb2NhdGlvbiwgc3RyaW5nTGVuZ3RoLCBydW5SYW5nZSkpOwog
ICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIFJlZjxDb21wbGV4VGV4dFJ1bj4gY3JlYXRlKGNv
bnN0IFNpbXBsZUZvbnREYXRhJiBmb250RGF0YSwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVu
c2lnbmVkIHN0cmluZ0xvY2F0aW9uLCBzaXplX3Qgc3RyaW5nTGVuZ3RoLCBib29sIGx0cikKKyAg
ICAgICAgc3RhdGljIFJlZjxDb21wbGV4VGV4dFJ1bj4gY3JlYXRlKGNvbnN0IEZvbnQmIGZvbnQs
IGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBzdHJpbmdMb2NhdGlvbiwgc2l6ZV90
IHN0cmluZ0xlbmd0aCwgYm9vbCBsdHIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IENvbXBsZXhUZXh0UnVuKGZvbnREYXRhLCBjaGFyYWN0ZXJzLCBzdHJpbmdM
b2NhdGlvbiwgc3RyaW5nTGVuZ3RoLCBsdHIpKTsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IENvbXBsZXhUZXh0UnVuKGZvbnQsIGNoYXJhY3RlcnMsIHN0cmluZ0xvY2F0aW9uLCBz
dHJpbmdMZW5ndGgsIGx0cikpOwogICAgICAgICB9CiAKICAgICAgICAgdW5zaWduZWQgZ2x5cGhD
b3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fZ2x5cGhDb3VudDsgfQotICAgICAgICBjb25zdCBTaW1w
bGVGb250RGF0YSYgZm9udERhdGEoKSBjb25zdCB7IHJldHVybiBtX2ZvbnREYXRhOyB9CisgICAg
ICAgIGNvbnN0IEZvbnQmIGZvbnQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnQ7IH0KICAgICAgICAg
Y29uc3QgVUNoYXIqIGNoYXJhY3RlcnMoKSBjb25zdCB7IHJldHVybiBtX2NoYXJhY3RlcnM7IH0K
ICAgICAgICAgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3N0cmlu
Z0xvY2F0aW9uOyB9CiAgICAgICAgIHNpemVfdCBzdHJpbmdMZW5ndGgoKSBjb25zdCB7IHJldHVy
biBtX3N0cmluZ0xlbmd0aDsgfQpAQCAtMTAwLDExICsxMDAsMTEgQEAgcHJpdmF0ZToKICAgICAg
ICAgdm9pZCBzZXRJc05vbk1vbm90b25pYygpOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgQ29t
cGxleFRleHRSdW4oQ1RSdW5SZWYsIGNvbnN0IFNpbXBsZUZvbnREYXRhJiwgY29uc3QgVUNoYXIq
IGNoYXJhY3RlcnMsIHVuc2lnbmVkIHN0cmluZ0xvY2F0aW9uLCBzaXplX3Qgc3RyaW5nTGVuZ3Ro
LCBDRlJhbmdlIHJ1blJhbmdlKTsKLSAgICAgICAgQ29tcGxleFRleHRSdW4oY29uc3QgU2ltcGxl
Rm9udERhdGEmLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgc3RyaW5nTG9jYXRp
b24sIHNpemVfdCBzdHJpbmdMZW5ndGgsIGJvb2wgbHRyKTsKKyAgICAgICAgQ29tcGxleFRleHRS
dW4oQ1RSdW5SZWYsIGNvbnN0IEZvbnQmLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWdu
ZWQgc3RyaW5nTG9jYXRpb24sIHNpemVfdCBzdHJpbmdMZW5ndGgsIENGUmFuZ2UgcnVuUmFuZ2Up
OworICAgICAgICBDb21wbGV4VGV4dFJ1bihjb25zdCBGb250JiwgY29uc3QgVUNoYXIqIGNoYXJh
Y3RlcnMsIHVuc2lnbmVkIHN0cmluZ0xvY2F0aW9uLCBzaXplX3Qgc3RyaW5nTGVuZ3RoLCBib29s
IGx0cik7CiAKICAgICAgICAgdW5zaWduZWQgbV9nbHlwaENvdW50OwotICAgICAgICBjb25zdCBT
aW1wbGVGb250RGF0YSYgbV9mb250RGF0YTsKKyAgICAgICAgY29uc3QgRm9udCYgbV9mb250Owog
ICAgICAgICBjb25zdCBVQ2hhciogbV9jaGFyYWN0ZXJzOwogICAgICAgICB1bnNpZ25lZCBtX3N0
cmluZ0xvY2F0aW9uOwogICAgICAgICBzaXplX3QgbV9zdHJpbmdMZW5ndGg7CkBAIC0xMjcsNyAr
MTI3LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgY29sbGVjdENvbXBsZXhUZXh0UnVucygpOwog
Ci0gICAgdm9pZCBjb2xsZWN0Q29tcGxleFRleHRSdW5zRm9yQ2hhcmFjdGVycyhjb25zdCBVQ2hh
ciosIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24sIGNvbnN0IFNpbXBs
ZUZvbnREYXRhKik7CisgICAgdm9pZCBjb2xsZWN0Q29tcGxleFRleHRSdW5zRm9yQ2hhcmFjdGVy
cyhjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24s
IGNvbnN0IEZvbnQqKTsKICAgICB2b2lkIGFkanVzdEdseXBoc0FuZEFkdmFuY2VzKCk7CiAKICAg
ICB1bnNpZ25lZCBpbmRleE9mQ3VycmVudFJ1bih1bnNpZ25lZCYgbGVmdG1vc3RHbHlwaCk7CkBA
IC0xNjksNyArMTY5LDcgQEAgcHJpdmF0ZToKICAgICBmbG9hdCBtX2xlYWRpbmdFeHBhbnNpb247
CiAgICAgYm9vbCBtX2FmdGVyRXhwYW5zaW9uOwogCi0gICAgSGFzaFNldDxjb25zdCBTaW1wbGVG
b250RGF0YSo+KiBtX2ZhbGxiYWNrRm9udHM7CisgICAgSGFzaFNldDxjb25zdCBGb250Kj4qIG1f
ZmFsbGJhY2tGb250czsKIAogICAgIGZsb2F0IG1fbWluR2x5cGhCb3VuZGluZ0JveFg7CiAgICAg
ZmxvYXQgbV9tYXhHbHlwaEJvdW5kaW5nQm94WDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXJDb3JlVGV4dC5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRD
b250cm9sbGVyQ29yZVRleHQubW0JKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXJDb3JlVGV4dC5tbQko
d29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEsNyBAQCAtIChpZClpbml0V2l0aEZvbnQ6KGNvbnN0
IFdlYkNvcmU6OkZvbnRDCiAgICAgX2NoYXJhY3RlciA9IGNoYXJhY3RlcjsKIAogICAgIC8vIEJ5
IHRoZSB0aW1lIGEgV2ViQ2FzY2FkZUxpc3QgaXMgdXNlZCwgdGhlIEZvbnRDYXNjYWRlIGhhcyBh
bHJlYWR5IGJlZW4gYXNrZWQgdG8gcmVhbGl6ZSBhbGwgb2YgaXRzCi0gICAgLy8gRm9udERhdGEs
IHNvIHRoaXMgbG9vcCBkb2VzIG5vdCBoaXQgdGhlIEZvbnRDYWNoZS4KKyAgICAvLyBGb250cywg
c28gdGhpcyBsb29wIGRvZXMgbm90IGhpdCB0aGUgRm9udENhY2hlLgogICAgIHdoaWxlICghX2Zv
bnQtPmZhbGxiYWNrUmFuZ2VzQXQoX2NvdW50KS5pc051bGwoKSkKICAgICAgICAgX2NvdW50Kys7
CiAKQEAgLTgyLDEwICs4MiwxMCBAQCAtIChpZClvYmplY3RBdEluZGV4OihOU1VJbnRlZ2VyKWlu
ZGV4CiAgICAgfSBlbHNlCiAgICAgICAgIF9mb250RGVzY3JpcHRvcnMuZ3JvdyhpbmRleCArIDEp
OwogCi0gICAgY29uc3QgV2ViQ29yZTo6U2ltcGxlRm9udERhdGEqIHNpbXBsZUZvbnREYXRhID0g
X2ZvbnQtPmZhbGxiYWNrUmFuZ2VzQXQoaW5kZXgpLmZvbnREYXRhRm9yQ2hhcmFjdGVyKF9jaGFy
YWN0ZXIpOwotICAgIGlmICghc2ltcGxlRm9udERhdGEpCi0gICAgICAgIHNpbXBsZUZvbnREYXRh
ID0gJl9mb250LT5mYWxsYmFja1Jhbmdlc0F0KGluZGV4KS5mb250RGF0YUZvckZpcnN0UmFuZ2Uo
KTsKLSAgICBmb250RGVzY3JpcHRvciA9IENURm9udENvcHlGb250RGVzY3JpcHRvcihzaW1wbGVG
b250RGF0YS0+cGxhdGZvcm1EYXRhKCkuY3RGb250KCkpOworICAgIGNvbnN0IFdlYkNvcmU6OkZv
bnQqIGZvbnQgPSBfZm9udC0+ZmFsbGJhY2tSYW5nZXNBdChpbmRleCkuZm9udEZvckNoYXJhY3Rl
cihfY2hhcmFjdGVyKTsKKyAgICBpZiAoIWZvbnQpCisgICAgICAgIGZvbnQgPSAmX2ZvbnQtPmZh
bGxiYWNrUmFuZ2VzQXQoaW5kZXgpLmZvbnRGb3JGaXJzdFJhbmdlKCk7CisgICAgZm9udERlc2Ny
aXB0b3IgPSBDVEZvbnRDb3B5Rm9udERlc2NyaXB0b3IoZm9udC0+cGxhdGZvcm1EYXRhKCkuY3RG
b250KCkpOwogICAgIF9mb250RGVzY3JpcHRvcnNbaW5kZXhdID0gYWRvcHRDRihmb250RGVzY3Jp
cHRvcik7CiAgICAgcmV0dXJuIChpZClmb250RGVzY3JpcHRvcjsKIH0KQEAgLTk0LDggKzk0LDgg
QEAgLSAoaWQpb2JqZWN0QXRJbmRleDooTlNVSW50ZWdlcilpbmRleAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLUNvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRSdW46OkNvbXBsZXhU
ZXh0UnVuKENUUnVuUmVmIGN0UnVuLCBjb25zdCBTaW1wbGVGb250RGF0YSYgZm9udERhdGEsIGNv
bnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBzdHJpbmdMb2NhdGlvbiwgc2l6ZV90IHN0
cmluZ0xlbmd0aCwgQ0ZSYW5nZSBydW5SYW5nZSkKLSAgICA6IG1fZm9udERhdGEoZm9udERhdGEp
CitDb21wbGV4VGV4dENvbnRyb2xsZXI6OkNvbXBsZXhUZXh0UnVuOjpDb21wbGV4VGV4dFJ1bihD
VFJ1blJlZiBjdFJ1biwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMs
IHVuc2lnbmVkIHN0cmluZ0xvY2F0aW9uLCBzaXplX3Qgc3RyaW5nTGVuZ3RoLCBDRlJhbmdlIHJ1
blJhbmdlKQorICAgIDogbV9mb250KGZvbnQpCiAgICAgLCBtX2NoYXJhY3RlcnMoY2hhcmFjdGVy
cykKICAgICAsIG1fc3RyaW5nTG9jYXRpb24oc3RyaW5nTG9jYXRpb24pCiAgICAgLCBtX3N0cmlu
Z0xlbmd0aChzdHJpbmdMZW5ndGgpCkBAIC0xMzAsOCArMTMwLDggQEAgQ29tcGxleFRleHRDb250
cm9sbGVyOjpDb21wbGV4VGV4dFJ1bjo6QwogCiAvLyBNaXNzaW5nIGdseXBocyBydW4gY29uc3Ry
dWN0b3IuIENvcmUgVGV4dCB3aWxsIG5vdCBnZW5lcmF0ZSBhIHJ1biBvZiBtaXNzaW5nIGdseXBo
cywgaW5zdGVhZCBmYWxsaW5nIGJhY2sgb24KIC8vIGdseXBocyBmcm9tIExhc3RSZXNvcnQuIFdl
IHdhbnQgdG8gdXNlIHRoZSBwcmltYXJ5IGZvbnQncyBtaXNzaW5nIGdseXBoIGluIG9yZGVyIHRv
IG1hdGNoIHRoZSBmYXN0IHRleHQgY29kZSBwYXRoLgotQ29tcGxleFRleHRDb250cm9sbGVyOjpD
b21wbGV4VGV4dFJ1bjo6Q29tcGxleFRleHRSdW4oY29uc3QgU2ltcGxlRm9udERhdGEmIGZvbnRE
YXRhLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24sIHNp
emVfdCBzdHJpbmdMZW5ndGgsIGJvb2wgbHRyKQotICAgIDogbV9mb250RGF0YShmb250RGF0YSkK
K0NvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRSdW46OkNvbXBsZXhUZXh0UnVuKGNv
bnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBzdHJpbmdM
b2NhdGlvbiwgc2l6ZV90IHN0cmluZ0xlbmd0aCwgYm9vbCBsdHIpCisgICAgOiBtX2ZvbnQoZm9u
dCkKICAgICAsIG1fY2hhcmFjdGVycyhjaGFyYWN0ZXJzKQogICAgICwgbV9zdHJpbmdMb2NhdGlv
bihzdHJpbmdMb2NhdGlvbikKICAgICAsIG1fc3RyaW5nTGVuZ3RoKHN0cmluZ0xlbmd0aCkKQEAg
LTE2Myw3ICsxNjMsNyBAQCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OkNvbXBsZXhUZXh0UnVuOjpD
CiAgICAgLy8gU3ludGhlc2l6ZSBhIHJ1biBvZiBtaXNzaW5nIGdseXBocy4KICAgICBtX2dseXBo
c1ZlY3Rvci5maWxsKDAsIG1fZ2x5cGhDb3VudCk7CiAgICAgbV9nbHlwaHMgPSBtX2dseXBoc1Zl
Y3Rvci5kYXRhKCk7Ci0gICAgbV9hZHZhbmNlc1ZlY3Rvci5maWxsKENHU2l6ZU1ha2UobV9mb250
RGF0YS53aWR0aEZvckdseXBoKDApLCAwKSwgbV9nbHlwaENvdW50KTsKKyAgICBtX2FkdmFuY2Vz
VmVjdG9yLmZpbGwoQ0dTaXplTWFrZShtX2ZvbnQud2lkdGhGb3JHbHlwaCgwKSwgMCksIG1fZ2x5
cGhDb3VudCk7CiAgICAgbV9hZHZhbmNlcyA9IG1fYWR2YW5jZXNWZWN0b3IuZGF0YSgpOwogfQog
CkBAIC0xODQsMTEgKzE4NCwxMSBAQCBzdGF0aWMgY29uc3QgVW5pQ2hhciogcHJvdmlkZVN0cmlu
Z0FuZEF0CiAgICAgcmV0dXJuIGluZm8tPmNwICsgc3RyaW5nSW5kZXg7CiB9CiAKLXZvaWQgQ29t
cGxleFRleHRDb250cm9sbGVyOjpjb2xsZWN0Q29tcGxleFRleHRSdW5zRm9yQ2hhcmFjdGVycyhj
b25zdCBVQ2hhciogY3AsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24s
IGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSkKK3ZvaWQgQ29tcGxleFRleHRDb250cm9s
bGVyOjpjb2xsZWN0Q29tcGxleFRleHRSdW5zRm9yQ2hhcmFjdGVycyhjb25zdCBVQ2hhciogY3As
IHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24sIGNvbnN0IEZvbnQqIGZv
bnQpCiB7Ci0gICAgaWYgKCFmb250RGF0YSkgeworICAgIGlmICghZm9udCkgewogICAgICAgICAv
LyBDcmVhdGUgYSBydW4gb2YgbWlzc2luZyBnbHlwaHMgZnJvbSB0aGUgcHJpbWFyeSBmb250Lgot
ICAgICAgICBtX2NvbXBsZXhUZXh0UnVucy5hcHBlbmQoQ29tcGxleFRleHRSdW46OmNyZWF0ZSht
X2ZvbnQucHJpbWFyeUZvbnREYXRhKCksIGNwLCBzdHJpbmdMb2NhdGlvbiwgbGVuZ3RoLCBtX3J1
bi5sdHIoKSkpOworICAgICAgICBtX2NvbXBsZXhUZXh0UnVucy5hcHBlbmQoQ29tcGxleFRleHRS
dW46OmNyZWF0ZShtX2ZvbnQucHJpbWFyeUZvbnQoKSwgY3AsIHN0cmluZ0xvY2F0aW9uLCBsZW5n
dGgsIG1fcnVuLmx0cigpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTE5NiwyNiAr
MTk2LDI2IEBAIHZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpjb2xsZWN0Q29tcGwKIAogICAg
IFVDaGFyMzIgYmFzZUNoYXJhY3RlciA9IDA7CiAgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJl
Zj4gc3RyaW5nQXR0cmlidXRlczsKLSAgICBpZiAoZm9udERhdGEgPT0gU2ltcGxlRm9udERhdGE6
OnN5c3RlbUZhbGxiYWNrKCkpIHsKKyAgICBpZiAoZm9udCA9PSBGb250OjpzeXN0ZW1GYWxsYmFj
aygpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGNvZGUgcGF0aCBkb2VzIG5vdCBzdXBwb3J0
IHNtYWxsIGNhcHMuCiAgICAgICAgIGlzU3lzdGVtRmFsbGJhY2sgPSB0cnVlOwogCiAgICAgICAg
IFUxNl9HRVQoY3AsIDAsIDAsIGxlbmd0aCwgYmFzZUNoYXJhY3Rlcik7Ci0gICAgICAgIGZvbnRE
YXRhID0gbV9mb250LmZhbGxiYWNrUmFuZ2VzQXQoMCkuZm9udERhdGFGb3JDaGFyYWN0ZXIoYmFz
ZUNoYXJhY3Rlcik7Ci0gICAgICAgIGlmICghZm9udERhdGEpCi0gICAgICAgICAgICBmb250RGF0
YSA9ICZtX2ZvbnQuZmFsbGJhY2tSYW5nZXNBdCgwKS5mb250RGF0YUZvckZpcnN0UmFuZ2UoKTsK
KyAgICAgICAgZm9udCA9IG1fZm9udC5mYWxsYmFja1Jhbmdlc0F0KDApLmZvbnRGb3JDaGFyYWN0
ZXIoYmFzZUNoYXJhY3Rlcik7CisgICAgICAgIGlmICghZm9udCkKKyAgICAgICAgICAgIGZvbnQg
PSAmbV9mb250LmZhbGxiYWNrUmFuZ2VzQXQoMCkuZm9udEZvckZpcnN0UmFuZ2UoKTsKIAogICAg
ICAgICBSZXRhaW5QdHI8V2ViQ2FzY2FkZUxpc3Q+IGNhc2NhZGVMaXN0ID0gYWRvcHROUyhbW1dl
YkNhc2NhZGVMaXN0IGFsbG9jXSBpbml0V2l0aEZvbnQ6Jm1fZm9udCBjaGFyYWN0ZXI6YmFzZUNo
YXJhY3Rlcl0pOwogCi0gICAgICAgIHN0cmluZ0F0dHJpYnV0ZXMgPSBhZG9wdENGKENGRGljdGlv
bmFyeUNyZWF0ZU11dGFibGVDb3B5KGtDRkFsbG9jYXRvckRlZmF1bHQsIDAsIGZvbnREYXRhLT5n
ZXRDRlN0cmluZ0F0dHJpYnV0ZXMobV9mb250LnR5cGVzZXR0aW5nRmVhdHVyZXMoKSwgZm9udERh
dGEtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkpKSk7CisgICAgICAgIHN0cmluZ0F0dHJp
YnV0ZXMgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZU11dGFibGVDb3B5KGtDRkFsbG9jYXRv
ckRlZmF1bHQsIDAsIGZvbnQtPmdldENGU3RyaW5nQXR0cmlidXRlcyhtX2ZvbnQudHlwZXNldHRp
bmdGZWF0dXJlcygpLCBmb250LT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpKSkpOwogICAg
ICAgICBzdGF0aWMgY29uc3Qgdm9pZCogYXR0cmlidXRlS2V5c1tdID0geyBrQ1RGb250Q2FzY2Fk
ZUxpc3RBdHRyaWJ1dGUgfTsKICAgICAgICAgY29uc3Qgdm9pZCogdmFsdWVzW10gPSB7IGNhc2Nh
ZGVMaXN0LmdldCgpIH07CiAgICAgICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGF0dHJp
YnV0ZXMgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBh
dHRyaWJ1dGVLZXlzLCB2YWx1ZXMsIHNpemVvZihhdHRyaWJ1dGVLZXlzKSAvIHNpemVvZigqYXR0
cmlidXRlS2V5cyksICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0
aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKICAgICAgICAgUmV0YWluUHRyPENURm9udERlc2NyaXB0
b3JSZWY+IGZvbnREZXNjcmlwdG9yID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ3JlYXRlV2l0
aEF0dHJpYnV0ZXMoYXR0cmlidXRlcy5nZXQoKSkpOwotICAgICAgICBSZXRhaW5QdHI8Q1RGb250
UmVmPiBmb250V2l0aENhc2NhZGVMaXN0ID0gYWRvcHRDRihDVEZvbnRDcmVhdGVDb3B5V2l0aEF0
dHJpYnV0ZXMoZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLmN0Rm9udCgpLCBtX2ZvbnQucGl4ZWxT
aXplKCksIDAsIGZvbnREZXNjcmlwdG9yLmdldCgpKSk7CisgICAgICAgIFJldGFpblB0cjxDVEZv
bnRSZWY+IGZvbnRXaXRoQ2FzY2FkZUxpc3QgPSBhZG9wdENGKENURm9udENyZWF0ZUNvcHlXaXRo
QXR0cmlidXRlcyhmb250LT5wbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSwgbV9mb250LnBpeGVsU2l6
ZSgpLCAwLCBmb250RGVzY3JpcHRvci5nZXQoKSkpOwogICAgICAgICBDRkRpY3Rpb25hcnlTZXRW
YWx1ZShjb25zdF9jYXN0PENGTXV0YWJsZURpY3Rpb25hcnlSZWY+KHN0cmluZ0F0dHJpYnV0ZXMu
Z2V0KCkpLCBrQ1RGb250QXR0cmlidXRlTmFtZSwgZm9udFdpdGhDYXNjYWRlTGlzdC5nZXQoKSk7
CiAgICAgfSBlbHNlCi0gICAgICAgIHN0cmluZ0F0dHJpYnV0ZXMgPSBmb250RGF0YS0+Z2V0Q0ZT
dHJpbmdBdHRyaWJ1dGVzKG1fZm9udC50eXBlc2V0dGluZ0ZlYXR1cmVzKCksIGZvbnREYXRhLT5w
bGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpKTsKKyAgICAgICAgc3RyaW5nQXR0cmlidXRlcyA9
IGZvbnQtPmdldENGU3RyaW5nQXR0cmlidXRlcyhtX2ZvbnQudHlwZXNldHRpbmdGZWF0dXJlcygp
LCBmb250LT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpKTsKIAogICAgIFJldGFpblB0cjxD
VExpbmVSZWY+IGxpbmU7CiAKQEAgLTI0OCw1NSArMjQ4LDU1IEBAIHZvaWQgQ29tcGxleFRleHRD
b250cm9sbGVyOjpjb2xsZWN0Q29tcGwKICAgICAgICAgQ1RSdW5SZWYgY3RSdW4gPSBzdGF0aWNf
Y2FzdDxDVFJ1blJlZj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChydW5BcnJheSwgbV9ydW4ubHRy
KCkgPyByIDogcnVuQ291bnQgLSAxIC0gcikpOwogICAgICAgICBBU1NFUlQoQ0ZHZXRUeXBlSUQo
Y3RSdW4pID09IENUUnVuR2V0VHlwZUlEKCkpOwogICAgICAgICBDRlJhbmdlIHJ1blJhbmdlID0g
Q1RSdW5HZXRTdHJpbmdSYW5nZShjdFJ1bik7Ci0gICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRh
KiBydW5Gb250RGF0YSA9IGZvbnREYXRhOworICAgICAgICBjb25zdCBGb250KiBydW5Gb250ID0g
Zm9udDsKICAgICAgICAgaWYgKGlzU3lzdGVtRmFsbGJhY2spIHsKICAgICAgICAgICAgIENGRGlj
dGlvbmFyeVJlZiBydW5BdHRyaWJ1dGVzID0gQ1RSdW5HZXRBdHRyaWJ1dGVzKGN0UnVuKTsKLSAg
ICAgICAgICAgIENURm9udFJlZiBydW5Gb250ID0gc3RhdGljX2Nhc3Q8Q1RGb250UmVmPihDRkRp
Y3Rpb25hcnlHZXRWYWx1ZShydW5BdHRyaWJ1dGVzLCBrQ1RGb250QXR0cmlidXRlTmFtZSkpOwot
ICAgICAgICAgICAgQVNTRVJUKENGR2V0VHlwZUlEKHJ1bkZvbnQpID09IENURm9udEdldFR5cGVJ
RCgpKTsKLSAgICAgICAgICAgIFJldGFpblB0cjxDRlR5cGVSZWY+IHJ1bkZvbnRFcXVhbGl0eU9i
amVjdCA9IEZvbnRQbGF0Zm9ybURhdGE6Om9iamVjdEZvckVxdWFsaXR5Q2hlY2socnVuRm9udCk7
Ci0gICAgICAgICAgICBpZiAoIUNGRXF1YWwocnVuRm9udEVxdWFsaXR5T2JqZWN0LmdldCgpLCBm
b250RGF0YS0+cGxhdGZvcm1EYXRhKCkub2JqZWN0Rm9yRXF1YWxpdHlDaGVjaygpLmdldCgpKSkg
eworICAgICAgICAgICAgQ1RGb250UmVmIHJ1bkNURm9udCA9IHN0YXRpY19jYXN0PENURm9udFJl
Zj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocnVuQXR0cmlidXRlcywga0NURm9udEF0dHJpYnV0ZU5h
bWUpKTsKKyAgICAgICAgICAgIEFTU0VSVChDRkdldFR5cGVJRChydW5DVEZvbnQpID09IENURm9u
dEdldFR5cGVJRCgpKTsKKyAgICAgICAgICAgIFJldGFpblB0cjxDRlR5cGVSZWY+IHJ1bkZvbnRF
cXVhbGl0eU9iamVjdCA9IEZvbnRQbGF0Zm9ybURhdGE6Om9iamVjdEZvckVxdWFsaXR5Q2hlY2so
cnVuQ1RGb250KTsKKyAgICAgICAgICAgIGlmICghQ0ZFcXVhbChydW5Gb250RXF1YWxpdHlPYmpl
Y3QuZ2V0KCksIGZvbnQtPnBsYXRmb3JtRGF0YSgpLm9iamVjdEZvckVxdWFsaXR5Q2hlY2soKS5n
ZXQoKSkpIHsKICAgICAgICAgICAgICAgICAvLyBCZWdpbiB0cnlpbmcgdG8gc2VlIGlmIHJ1bkZv
bnQgbWF0Y2hlcyBhbnkgb2YgdGhlIGZvbnRzIGluIHRoZSBmYWxsYmFjayBsaXN0LgogCiAgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgIW1fZm9udC5mYWxsYmFja1Jhbmdlc0F0
KGkpLmlzTnVsbCgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgcnVuRm9udERhdGEgPSBt
X2ZvbnQuZmFsbGJhY2tSYW5nZXNBdChpKS5mb250RGF0YUZvckNoYXJhY3RlcihiYXNlQ2hhcmFj
dGVyKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFydW5Gb250RGF0YSkKKyAgICAgICAgICAg
ICAgICAgICAgcnVuRm9udCA9IG1fZm9udC5mYWxsYmFja1Jhbmdlc0F0KGkpLmZvbnRGb3JDaGFy
YWN0ZXIoYmFzZUNoYXJhY3Rlcik7CisgICAgICAgICAgICAgICAgICAgIGlmICghcnVuRm9udCkK
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICBS
ZXRhaW5QdHI8Q0ZUeXBlUmVmPiBydW5Gb250RXF1YWxpdHlPYmplY3QgPSBydW5Gb250RGF0YS0+
cGxhdGZvcm1EYXRhKCkub2JqZWN0Rm9yRXF1YWxpdHlDaGVjaygpOworICAgICAgICAgICAgICAg
ICAgICBSZXRhaW5QdHI8Q0ZUeXBlUmVmPiBydW5Gb250RXF1YWxpdHlPYmplY3QgPSBydW5Gb250
LT5wbGF0Zm9ybURhdGEoKS5vYmplY3RGb3JFcXVhbGl0eUNoZWNrKCk7CiAgICAgICAgICAgICAg
ICAgICAgIGlmIChDRkVxdWFsKHJ1bkZvbnRFcXVhbGl0eU9iamVjdC5nZXQoKSwgcnVuRm9udEVx
dWFsaXR5T2JqZWN0LmdldCgpKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICBydW5Gb250RGF0YSA9IDA7CisgICAgICAgICAgICAgICAgICAgIHJ1
bkZvbnQgPSBudWxscHRyOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAvLyBJ
ZiB0aGVyZSBpcyBubyBtYXRjaGluZyBmb250LCBsb29rIHVwIGJ5IG5hbWUgaW4gdGhlIGZvbnQg
Y2FjaGUuCi0gICAgICAgICAgICAgICAgaWYgKCFydW5Gb250RGF0YSkgeworICAgICAgICAgICAg
ICAgIGlmICghcnVuRm9udCkgewogICAgICAgICAgICAgICAgICAgICAvLyBSYXRoZXIgdGhhbiB1
c2luZyBydW5Gb250IGFzIGFuIE5TRm9udCBhbmQgd3JhcHBpbmcgaXQgaW4gYSBGb250UGxhdGZv
cm1EYXRhLCBnbyB0aHJvdWdoCiAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBmb250IGNhY2hl
IGFuZCB1bHRpbWF0ZWx5IHRocm91Z2ggTlNGb250TWFuYWdlciBpbiBvcmRlciB0byBnZXQgYW4g
TlNGb250IHdpdGggdGhlIHJpZ2h0CiAgICAgICAgICAgICAgICAgICAgIC8vIE5TRm9udFJlbmRl
cmluZ01vZGUuCi0gICAgICAgICAgICAgICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gZm9u
dE5hbWUgPSBhZG9wdENGKENURm9udENvcHlQb3N0U2NyaXB0TmFtZShydW5Gb250KSk7CisgICAg
ICAgICAgICAgICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gZm9udE5hbWUgPSBhZG9wdENG
KENURm9udENvcHlQb3N0U2NyaXB0TmFtZShydW5DVEZvbnQpKTsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKENGRXF1YWwoZm9udE5hbWUuZ2V0KCksIENGU1RSKCJMYXN0UmVzb3J0IikpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBtX2NvbXBsZXhUZXh0UnVucy5hcHBlbmQoQ29tcGxleFRl
eHRSdW46OmNyZWF0ZShtX2ZvbnQucHJpbWFyeUZvbnREYXRhKCksIGNwLCBzdHJpbmdMb2NhdGlv
biArIHJ1blJhbmdlLmxvY2F0aW9uLCBydW5SYW5nZS5sZW5ndGgsIG1fcnVuLmx0cigpKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBtX2NvbXBsZXhUZXh0UnVucy5hcHBlbmQoQ29tcGxleFRl
eHRSdW46OmNyZWF0ZShtX2ZvbnQucHJpbWFyeUZvbnQoKSwgY3AsIHN0cmluZ0xvY2F0aW9uICsg
cnVuUmFuZ2UubG9jYXRpb24sIHJ1blJhbmdlLmxlbmd0aCwgbV9ydW4ubHRyKCkpKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIHJ1bkZvbnREYXRhID0gZm9udENhY2hlKCkuZm9udEZvckZhbWlseSht
X2ZvbnQuZm9udERlc2NyaXB0aW9uKCksIGZvbnROYW1lLmdldCgpLCBmYWxzZSkuZ2V0KCk7Cisg
ICAgICAgICAgICAgICAgICAgIHJ1bkZvbnQgPSBmb250Q2FjaGUoKS5mb250Rm9yRmFtaWx5KG1f
Zm9udC5mb250RGVzY3JpcHRpb24oKSwgZm9udE5hbWUuZ2V0KCksIGZhbHNlKS5nZXQoKTsKICNp
ZiAhUExBVEZPUk0oSU9TKQogICAgICAgICAgICAgICAgICAgICAvLyBDb3JlIFRleHQgbWF5IGhh
dmUgdXNlZCBhIGZvbnQgdGhhdCBpcyBub3Qga25vd24gdG8gTlNGb250TWFuYWdlci4gSW4gdGhh
dCBjYXNlLCBmYWxsIGJhY2sgb24KICAgICAgICAgICAgICAgICAgICAgLy8gdXNpbmcgdGhlIGZv
bnQgYXMgcmV0dXJuZWQsIGV2ZW4gdGhvdWdoIGl0IG1heSBub3QgaGF2ZSB0aGUgYmVzdCBOU0Zv
bnRSZW5kZXJpbmdNb2RlLgotICAgICAgICAgICAgICAgICAgICBpZiAoIXJ1bkZvbnREYXRhKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBGb250UGxhdGZvcm1EYXRhIHJ1bkZvbnRQbGF0Zm9y
bURhdGEoKE5TRm9udCAqKXJ1bkZvbnQsIENURm9udEdldFNpemUocnVuRm9udCksIG1fZm9udC5m
b250RGVzY3JpcHRpb24oKS51c2VQcmludGVyRm9udCgpKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJ1bkZvbnREYXRhID0gJmZvbnRDYWNoZSgpLmZvbnRGb3JQbGF0Zm9ybURhdGEocnVuRm9u
dFBsYXRmb3JtRGF0YSkuZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghcnVuRm9udCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgRm9udFBsYXRmb3JtRGF0YSBydW5Gb250UGxhdGZv
cm1EYXRhKChOU0ZvbnQgKilydW5DVEZvbnQsIENURm9udEdldFNpemUocnVuQ1RGb250KSwgbV9m
b250LmZvbnREZXNjcmlwdGlvbigpLnVzZVByaW50ZXJGb250KCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgcnVuRm9udCA9ICZmb250Q2FjaGUoKS5mb250Rm9yUGxhdGZvcm1EYXRhKHJ1bkZv
bnRQbGF0Zm9ybURhdGEpLmdldCgpOwogICAgICAgICAgICAgICAgICAgICB9CiAjZWxzZQogICAg
ICAgICAgICAgICAgICAgICAvLyBGSVhNRTogSnVzdCBhc3NlcnQgZm9yIG5vdywgdW50aWwgd2Ug
Y2FuIGRldmlzZSBhIGJldHRlciBmaXggdGhhdCB3b3JrcyB3aXRoIGlPUy4KLSAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKHJ1bkZvbnREYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KHJ1bkZvbnQpOwogI2VuZGlmCiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlm
IChtX2ZhbGxiYWNrRm9udHMgJiYgcnVuRm9udERhdGEgIT0gJm1fZm9udC5wcmltYXJ5Rm9udERh
dGEoKSkKLSAgICAgICAgICAgICAgICAgICAgbV9mYWxsYmFja0ZvbnRzLT5hZGQocnVuRm9udERh
dGEpOworICAgICAgICAgICAgICAgIGlmIChtX2ZhbGxiYWNrRm9udHMgJiYgcnVuRm9udCAhPSAm
bV9mb250LnByaW1hcnlGb250KCkpCisgICAgICAgICAgICAgICAgICAgIG1fZmFsbGJhY2tGb250
cy0+YWRkKHJ1bkZvbnQpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGlmICht
X2ZhbGxiYWNrRm9udHMgJiYgcnVuRm9udERhdGEgIT0gJm1fZm9udC5wcmltYXJ5Rm9udERhdGEo
KSkKLSAgICAgICAgICAgIG1fZmFsbGJhY2tGb250cy0+YWRkKGZvbnREYXRhKTsKKyAgICAgICAg
aWYgKG1fZmFsbGJhY2tGb250cyAmJiBydW5Gb250ICE9ICZtX2ZvbnQucHJpbWFyeUZvbnQoKSkK
KyAgICAgICAgICAgIG1fZmFsbGJhY2tGb250cy0+YWRkKGZvbnQpOwogCi0gICAgICAgIG1fY29t
cGxleFRleHRSdW5zLmFwcGVuZChDb21wbGV4VGV4dFJ1bjo6Y3JlYXRlKGN0UnVuLCAqcnVuRm9u
dERhdGEsIGNwLCBzdHJpbmdMb2NhdGlvbiwgbGVuZ3RoLCBydW5SYW5nZSkpOworICAgICAgICBt
X2NvbXBsZXhUZXh0UnVucy5hcHBlbmQoQ29tcGxleFRleHRSdW46OmNyZWF0ZShjdFJ1biwgKnJ1
bkZvbnQsIGNwLCBzdHJpbmdMb2NhdGlvbiwgbGVuZ3RoLCBydW5SYW5nZSkpOwogICAgIH0KIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDYWNoZU1h
Yy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMv
Rm9udENhY2hlTWFjLm1tCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvRm9udENhY2hlTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw4
ICszMyw4IEBACiAjaWYgIVBMQVRGT1JNKElPUykKIAogI2ltcG9ydCAiQ29yZUdyYXBoaWNzU1BJ
LmgiCisjaW1wb3J0ICJGb250LmgiCiAjaW1wb3J0ICJGb250Q2FzY2FkZS5oIgotI2ltcG9ydCAi
U2ltcGxlRm9udERhdGEuaCIKICNpbXBvcnQgIkZvbnRQbGF0Zm9ybURhdGEuaCIKICNpbXBvcnQg
Ik5TRm9udFNQSS5oIgogI2ltcG9ydCAiV2ViQ29yZU5TU3RyaW5nRXh0cmFzLmgiCkBAIC0zMzcs
NyArMzM3LDcgQEAgc3RhdGljIGJvb2wgc2hvdWxkQXV0b0FjdGl2YXRlRm9udElmTmVlZAogICAg
IHJldHVybiBrbm93bkZhbWlsaWVzLmdldCgpLmFkZChmYW1pbHkpLmlzTmV3RW50cnk7CiB9CiAK
LVJlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpzeXN0ZW1GYWxsYmFja0ZvckNoYXJh
Y3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgY29uc3QgU2ltcGxlRm9u
dERhdGEqIG9yaWdpbmFsRm9udERhdGEsIGJvb2wgaXNQbGF0Zm9ybUZvbnQsIGNvbnN0IFVDaGFy
KiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQorUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6c3lzdGVt
RmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24s
IGNvbnN0IEZvbnQqIG9yaWdpbmFsRm9udERhdGEsIGJvb2wgaXNQbGF0Zm9ybUZvbnQsIGNvbnN0
IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQogewogICAgIFVDaGFyMzIgY2hhcmFjdGVy
OwogICAgIFUxNl9HRVQoY2hhcmFjdGVycywgMCwgMCwgbGVuZ3RoLCBjaGFyYWN0ZXIpOwpAQCAt
NDA1LDM0ICs0MDUsMzUgQEAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OnN5c3Rl
bQogICAgIHJldHVybiBmb250Rm9yUGxhdGZvcm1EYXRhKGFsdGVybmF0ZUZvbnQpOwogfQogCi1S
ZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6c2ltaWxhckZvbnRQbGF0Zm9ybURhdGEo
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKK1JlZlB0cjxGb250PiBGb250Q2Fj
aGU6OnNpbWlsYXJGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCiB7CiAg
ICAgLy8gQXR0ZW1wdCB0byBmaW5kIGFuIGFwcHJvcHJpYXRlIGZvbnQgdXNpbmcgYSBtYXRjaCBi
YXNlZCBvbiAKICAgICAvLyB0aGUgcHJlc2VuY2Ugb2Yga2V5d29yZHMgaW4gdGhlIHRoZSByZXF1
ZXN0ZWQgbmFtZXMuICBGb3IgZXhhbXBsZSwgd2UnbGwKICAgICAvLyBtYXRjaCBhbnkgbmFtZSB0
aGF0IGNvbnRhaW5zICJBcmFiaWMiIHRvIEdlZXphIFByby4KLSAgICBSZWZQdHI8U2ltcGxlRm9u
dERhdGE+IHNpbXBsZUZvbnREYXRhOworICAgIFJlZlB0cjxGb250PiBmb250OwogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBkZXNjcmlwdGlvbi5mYW1pbHlDb3VudCgpOyArK2kpIHsKICAg
ICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkgPSBkZXNjcmlwdGlvbi5mYW1pbHlBdChp
KTsKICAgICAgICAgaWYgKGZhbWlseS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgc3RhdGljIFN0cmluZyogbWF0Y2hXb3Jkc1szXSA9IHsgbmV3IFN0cmluZygiQXJh
YmljIiksIG5ldyBTdHJpbmcoIlBhc2h0byIpLCBuZXcgU3RyaW5nKCJVcmR1IikgfTsKICAgICAg
ICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgZ2VlemFTdHIs
ICgiR2VlemEgUHJvIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotICAg
ICAgICBmb3IgKGludCBqID0gMDsgaiA8IDMgJiYgIXNpbXBsZUZvbnREYXRhOyArK2opCisgICAg
ICAgIGZvciAoaW50IGogPSAwOyBqIDwgMyAmJiAhZm9udDsgKytqKSB7CiAgICAgICAgICAgICBp
ZiAoZmFtaWx5LmNvbnRhaW5zKCptYXRjaFdvcmRzW2pdLCBmYWxzZSkpCi0gICAgICAgICAgICAg
ICAgc2ltcGxlRm9udERhdGEgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBnZWV6YVN0cik7
CisgICAgICAgICAgICAgICAgZm9udCA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGdlZXph
U3RyKTsKKyAgICAgICAgfQogICAgIH0KLSAgICByZXR1cm4gc2ltcGxlRm9udERhdGEucmVsZWFz
ZSgpOworICAgIHJldHVybiBmb250LnJlbGVhc2UoKTsKIH0KIAotUmVmPFNpbXBsZUZvbnREYXRh
PiBGb250Q2FjaGU6Omxhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBmb250RGVzY3JpcHRpb24pCitSZWY8Rm9udD4gRm9udENhY2hlOjpsYXN0UmVzb3J0RmFsbGJh
Y2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKQogewogICAgIERF
UFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIHRpbWVzU3RyLCAoIlRp
bWVzIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwogCiAgICAgLy8gRklY
TUU6IFdvdWxkIGJlIGV2ZW4gYmV0dGVyIHRvIHNvbWVob3cgZ2V0IHRoZSB1c2VyJ3MgZGVmYXVs
dCBmb250IGhlcmUuICBGb3Igbm93IHdlJ2xsIHBpY2sKICAgICAvLyB0aGUgZGVmYXVsdCB0aGF0
IHRoZSB1c2VyIHdvdWxkIGdldCB3aXRob3V0IGNoYW5naW5nIGFueSBwcmVmcy4KLSAgICBSZWZQ
dHI8U2ltcGxlRm9udERhdGE+IHNpbXBsZUZvbnREYXRhID0gZm9udEZvckZhbWlseShmb250RGVz
Y3JpcHRpb24sIHRpbWVzU3RyLCBmYWxzZSk7Ci0gICAgaWYgKHNpbXBsZUZvbnREYXRhKQotICAg
ICAgICByZXR1cm4gKnNpbXBsZUZvbnREYXRhOworICAgIFJlZlB0cjxGb250PiBmb250ID0gZm9u
dEZvckZhbWlseShmb250RGVzY3JpcHRpb24sIHRpbWVzU3RyLCBmYWxzZSk7CisgICAgaWYgKGZv
bnQpCisgICAgICAgIHJldHVybiAqZm9udDsKIAogICAgIC8vIFRoZSBUaW1lcyBmYWxsYmFjayB3
aWxsIGFsbW9zdCBhbHdheXMgd29yaywgYnV0IGluIHRoZSBoaWdobHkgdW51c3VhbCBjYXNlIHdo
ZXJlCiAgICAgLy8gdGhlIHVzZXIgZG9lc24ndCBoYXZlIGl0LCB3ZSBmYWxsIGJhY2sgb24gTHVj
aWRhIEdyYW5kZSBiZWNhdXNlIHRoYXQncwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL0dseXBoUGFnZU1hYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dseXBoUGFnZU1hYy5jcHAJKHJldmlzaW9uIDE3ODg1
NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HbHlwaFBhZ2VNYWMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw4ICszMSw4IEBACiAKICNpbmNsdWRlICJDb3JlR3Jh
cGhpY3NTUEkuaCIKICNpbmNsdWRlICJDb3JlVGV4dFNQSS5oIgorI2luY2x1ZGUgIkZvbnQuaCIK
ICNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAj
aW5jbHVkZSAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgogI2lmICFQTEFURk9STShJT1MpCiAj
aW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CkBAIC00
MCw3ICs0MCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGJvb2wgc2hvdWxk
VXNlQ29yZVRleHQoY29uc3QgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBj
b25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEpCitzdGF0aWMgYm9vbCBzaG91bGRVc2VDb3Jl
VGV4dChjb25zdCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IEZv
bnQqIGZvbnREYXRhKQogewogICAgIGlmIChmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkuaXNDb21w
b3NpdGVGb250UmVmZXJlbmNlKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNTUsNyArNTUs
NyBAQCBzdGF0aWMgYm9vbCBzaG91bGRVc2VDb3JlVGV4dChjb25zdCBVQ2hhCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi1ib29sIEdseXBoUGFnZTo6bWF5VXNlTWl4ZWRGb250RGF0YVdoZW5GaWxs
aW5nKGNvbnN0IFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgU2lt
cGxlRm9udERhdGEqIGZvbnREYXRhKQorYm9vbCBHbHlwaFBhZ2U6Om1heVVzZU1peGVkRm9udHNX
aGVuRmlsbGluZyhjb25zdCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNv
bnN0IEZvbnQqIGZvbnREYXRhKQogewogI2lmIFVTRShBUFBLSVQpCiAgICAgLy8gRklYTUU6IFRo
aXMgaXMgb25seSByZWFsbHkgbmVlZGVkIGZvciBjb21wb3NpdGUgZm9udCByZWZlcmVuY2VzLgpA
QCAtNjgsNyArNjgsNyBAQCBib29sIEdseXBoUGFnZTo6bWF5VXNlTWl4ZWRGb250RGF0YVdoZW5G
CiAjZW5kaWYKIH0KIAotYm9vbCBHbHlwaFBhZ2U6OmZpbGwodW5zaWduZWQgb2Zmc2V0LCB1bnNp
Z25lZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3Qg
U2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQorYm9vbCBHbHlwaFBhZ2U6OmZpbGwodW5zaWduZWQg
b2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxl
bmd0aCwgY29uc3QgRm9udCogZm9udERhdGEpCiB7CiAgICAgYm9vbCBoYXZlR2x5cGhzID0gZmFs
c2U7CiAKQEAgLTE2Myw3ICsxNjMsNyBAQCBib29sIEdseXBoUGFnZTo6ZmlsbCh1bnNpZ25lZCBv
ZmZzZXQsIHVuCiAgICAgICAgICAgICAgICAgICAgIH0KICNpZiBVU0UoQVBQS0lUKQogICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IFNpbXBsZUZvbnRE
YXRhKiBydW5TaW1wbGUgPSBmb250RGF0YS0+Y29tcG9zaXRlRm9udFJlZmVyZW5jZUZvbnREYXRh
KChOU0ZvbnQgKilydW5Gb250KTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgRm9udCogcnVu
U2ltcGxlID0gZm9udERhdGEtPmNvbXBvc2l0ZUZvbnRSZWZlcmVuY2VGb250KChOU0ZvbnQgKily
dW5Gb250KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHJ1blNpbXBsZSkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgZ2x5cGhDb3VudDsgKytpKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmluZ0luZGljZXNbaV0gPj0gc3Rh
dGljX2Nhc3Q8Q0ZJbmRleD4oYnVmZmVyTGVuZ3RoKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhQ29yZVRleHQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0
YUNvcmVUZXh0LmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhQ29yZVRleHQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNSw3ICsyNSw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IlNpbXBsZUZvbnREYXRhLmgiCisjaW5jbHVkZSAiRm9udC5oIgogCiAjaWYgIVBMQVRGT1JNKElP
UykKICNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4K
QEAgLTM1LDcgKzM1LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1DRkRpY3Rpb25hcnlS
ZWYgU2ltcGxlRm9udERhdGE6OmdldENGU3RyaW5nQXR0cmlidXRlcyhUeXBlc2V0dGluZ0ZlYXR1
cmVzIHR5cGVzZXR0aW5nRmVhdHVyZXMsIEZvbnRPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgY29u
c3QKK0NGRGljdGlvbmFyeVJlZiBGb250OjpnZXRDRlN0cmluZ0F0dHJpYnV0ZXMoVHlwZXNldHRp
bmdGZWF0dXJlcyB0eXBlc2V0dGluZ0ZlYXR1cmVzLCBGb250T3JpZW50YXRpb24gb3JpZW50YXRp
b24pIGNvbnN0CiB7CiAgICAgdW5zaWduZWQga2V5ID0gdHlwZXNldHRpbmdGZWF0dXJlcyArIDE7
CiAgICAgSGFzaE1hcDx1bnNpZ25lZCwgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4+OjpBZGRS
ZXN1bHQgYWRkUmVzdWx0ID0gbV9DRlN0cmluZ0F0dHJpYnV0ZXMuYWRkKGtleSwgUmV0YWluUHRy
PENGRGljdGlvbmFyeVJlZj4oKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhTWFjLm1tCShyZXZpc2lvbiAx
Nzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9u
dERhdGFNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKICAqLwogCiAjaW1w
b3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlNpbXBsZUZvbnREYXRhLmgiCisjaW1wb3J0ICJGb250
LmgiCiAKICNpbXBvcnQgIkJsb2NrRXhjZXB0aW9ucy5oIgogI2ltcG9ydCAiQ29sb3IuaCIKQEAg
LTcxLDcgKzcxLDcgQEAgc3RhdGljIGJvb2wgZm9udEhhc1ZlcnRpY2FsR2x5cGhzKENURm9udAog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGJvb2wgaW5pdEZvbnREYXRhKFNpbXBsZUZv
bnREYXRhKiBmb250RGF0YSkKK3N0YXRpYyBib29sIGluaXRGb250RGF0YShGb250KiBmb250RGF0
YSkKIHsKICAgICBpZiAoIWZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5jZ0ZvbnQoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtODUsNyArODUsNyBAQCBzdGF0aWMgTlNTdHJpbmcgKndlYkZh
bGxiYWNrRm9udEZhbWlseSh2CiAgICAgcmV0dXJuIHdlYkZhbGxiYWNrRm9udEZhbWlseTsKIH0K
IAotY29uc3QgU2ltcGxlRm9udERhdGEqIFNpbXBsZUZvbnREYXRhOjpjb21wb3NpdGVGb250UmVm
ZXJlbmNlRm9udERhdGEoTlNGb250ICprZXkpIGNvbnN0Citjb25zdCBGb250KiBGb250Ojpjb21w
b3NpdGVGb250UmVmZXJlbmNlRm9udChOU0ZvbnQgKmtleSkgY29uc3QKIHsKICAgICBpZiAoIWtl
eSB8fCBDRkVxdWFsKGFkb3B0Q0YoQ1RGb250Q29weVBvc3RTY3JpcHROYW1lKENURm9udFJlZihr
ZXkpKSkuZ2V0KCksIENGU1RSKCJMYXN0UmVzb3J0IikpKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKQEAgLTEwMywxMiArMTAzLDEyIEBAIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBTaW1wbGVGb250
RGF0YTo6Y28KICAgICAgICAgYm9vbCBzeW50aGV0aWNPYmxpcXVlID0gcGxhdGZvcm1EYXRhKCku
c3ludGhldGljT2JsaXF1ZSgpICYmICEodHJhaXRzICYga0NURm9udEl0YWxpY1RyYWl0KTsKIAog
ICAgICAgICBGb250UGxhdGZvcm1EYXRhIHN1YnN0aXR1dGVQbGF0Zm9ybShzdWJzdGl0dXRlRm9u
dCwgcGxhdGZvcm1EYXRhKCkuc2l6ZSgpLCBpc1VzaW5nUHJpbnRlckZvbnQsIHN5bnRoZXRpY0Jv
bGQsIHN5bnRoZXRpY09ibGlxdWUsIHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCksIHBsYXRm
b3JtRGF0YSgpLndpZHRoVmFyaWFudCgpKTsKLSAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZSA9IFNpbXBsZUZvbnREYXRhOjpjcmVhdGUoc3Vic3RpdHV0ZVBsYXRmb3JtLCBpc0N1c3Rv
bUZvbnQoKSk7CisgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBGb250OjpjcmVh
dGUoc3Vic3RpdHV0ZVBsYXRmb3JtLCBpc0N1c3RvbUZvbnQoKSk7CiAgICAgfQogICAgIHJldHVy
biBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOwogfQogCi12b2lkIFNpbXBsZUZvbnRE
YXRhOjpwbGF0Zm9ybUluaXQoKQordm9pZCBGb250OjpwbGF0Zm9ybUluaXQoKQogewogICAgIG1f
c3ludGhldGljQm9sZE9mZnNldCA9IG1fcGxhdGZvcm1EYXRhLm1fc3ludGhldGljQm9sZCA/IDEu
MGYgOiAwLmY7CiAKQEAgLTIyNiw3ICsyMjYsNyBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0
Zm9ybUluaXQoKQogICAgICAgICBlbHNlCiAgICAgICAgICAgICB4SGVpZ2h0ID0gc2NhbGVFbVRv
VW5pdHMoQ0dGb250R2V0WEhlaWdodChtX3BsYXRmb3JtRGF0YS5jZ0ZvbnQoKSksIHVuaXRzUGVy
RW0pICogcG9pbnRTaXplOwogICAgIH0gZWxzZQotICAgICAgICB4SGVpZ2h0ID0gdmVydGljYWxS
aWdodE9yaWVudGF0aW9uRm9udERhdGEoKS0+Zm9udE1ldHJpY3MoKS54SGVpZ2h0KCk7CisgICAg
ICAgIHhIZWlnaHQgPSB2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250KCktPmZvbnRNZXRyaWNz
KCkueEhlaWdodCgpOwogCiAgICAgbV9mb250TWV0cmljcy5zZXRVbml0c1BlckVtKHVuaXRzUGVy
RW0pOwogICAgIG1fZm9udE1ldHJpY3Muc2V0QXNjZW50KGFzY2VudCk7CkBAIC0yNDEsNyArMjQx
LDcgQEAgc3RhdGljIENGRGF0YVJlZiBjb3B5Rm9udFRhYmxlRm9yVGFnKEZvbgogICAgIHJldHVy
biBDR0ZvbnRDb3B5VGFibGVGb3JUYWcocGxhdGZvcm1EYXRhLmNnRm9udCgpLCB0YWJsZU5hbWUp
OwogfQogCi12b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUNoYXJXaWR0aEluaXQoKQordm9p
ZCBGb250OjpwbGF0Zm9ybUNoYXJXaWR0aEluaXQoKQogewogICAgIG1fYXZnQ2hhcldpZHRoID0g
MDsKICAgICBtX21heENoYXJXaWR0aCA9IDA7CkBAIC0yNjksMTcgKzI2OSwxNyBAQCB2b2lkIFNp
bXBsZUZvbnREYXRhOjpwbGF0Zm9ybUNoYXJXaWR0aEluCiB9CiAjZW5kaWYgLy8gVVNFKEFQUEtJ
VCkKIAotdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95KCkKK3ZvaWQgRm9udDo6
cGxhdGZvcm1EZXN0cm95KCkKIHsKIH0KIAogI2lmICFQTEFURk9STShJT1MpCi1QYXNzUmVmUHRy
PFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1DcmVhdGVTY2FsZWRGb250
RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2NhbGVG
YWN0b3IpIGNvbnN0CitQYXNzUmVmUHRyPEZvbnQ+IEZvbnQ6OnBsYXRmb3JtQ3JlYXRlU2NhbGVk
Rm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2NhbGVG
YWN0b3IpIGNvbnN0CiB7CiAgICAgaWYgKGlzQ3VzdG9tRm9udCgpKSB7CiAgICAgICAgIEZvbnRQ
bGF0Zm9ybURhdGEgc2NhbGVkRm9udERhdGEobV9wbGF0Zm9ybURhdGEpOwogICAgICAgICBzY2Fs
ZWRGb250RGF0YS5tX3NpemUgPSBzY2FsZWRGb250RGF0YS5tX3NpemUgKiBzY2FsZUZhY3RvcjsK
LSAgICAgICAgcmV0dXJuIFNpbXBsZUZvbnREYXRhOjpjcmVhdGUoc2NhbGVkRm9udERhdGEsIHRy
dWUsIGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIEZvbnQ6OmNyZWF0ZShzY2FsZWRGb250RGF0YSwg
dHJ1ZSwgZmFsc2UpOwogICAgIH0KIAogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsK
QEAgLTMxMCw3ICszMTAsNyBAQCBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250
RGF0CiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgU2ltcGxlRm9udERhdGE6OmRldGVybWluZVBp
dGNoKCkKK3ZvaWQgRm9udDo6ZGV0ZXJtaW5lUGl0Y2goKQogewogICAgIE5TRm9udCogZiA9IG1f
cGxhdGZvcm1EYXRhLm5zRm9udCgpOwogICAgIC8vIFNwZWNpYWwgY2FzZSBPc2FrYS1Nb25vLgpA
QCAtMzMzLDcgKzMzMyw3IEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OmRldGVybWluZVBpdGNoKCkK
IH0KICNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCi1GbG9hdFJlY3QgU2ltcGxlRm9udERhdGE6
OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CitGbG9hdFJlY3QgRm9u
dDo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKIHsKICAgICBGbG9h
dFJlY3QgYm91bmRpbmdCb3g7CiAgICAgYm91bmRpbmdCb3ggPSBDVEZvbnRHZXRCb3VuZGluZ1Jl
Y3RzRm9yR2x5cGhzKG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBwbGF0Zm9ybURhdGEoKS5vcmll
bnRhdGlvbigpID09IFZlcnRpY2FsID8ga0NURm9udFZlcnRpY2FsT3JpZW50YXRpb24gOiBrQ1RG
b250SG9yaXpvbnRhbE9yaWVudGF0aW9uLCAmZ2x5cGgsIDAsIDEpOwpAQCAtMzQ1LDcgKzM0NSw3
IEBAIEZsb2F0UmVjdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Cb3VuZHMKIH0KIAogI2lmIFBM
QVRGT1JNKE1BQykKLWlubGluZSBDR0ZvbnRSZW5kZXJpbmdTdHlsZSBTaW1wbGVGb250RGF0YTo6
cmVuZGVyaW5nU3R5bGUoKSBjb25zdAoraW5saW5lIENHRm9udFJlbmRlcmluZ1N0eWxlIEZvbnQ6
OnJlbmRlcmluZ1N0eWxlKCkgY29uc3QKIHsKICAgICBDR0ZvbnRSZW5kZXJpbmdTdHlsZSBzdHls
ZSA9IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZUFudGlhbGlhc2luZyB8IGtDR0ZvbnRSZW5kZXJpbmdT
dHlsZVN1YnBpeGVsUG9zaXRpb25pbmcgfCBrQ0dGb250UmVuZGVyaW5nU3R5bGVTdWJwaXhlbFF1
YW50aXphdGlvbjsKICAgICBOU0ZvbnQgKmZvbnQgPSBwbGF0Zm9ybURhdGEoKS5uc0ZvbnQoKTsK
QEAgLTM2NCw3ICszNjQsNyBAQCBpbmxpbmUgQ0dGb250UmVuZGVyaW5nU3R5bGUgU2ltcGxlRm9u
dERhCiAgICAgcmV0dXJuIHN0eWxlOwogfQogCi1pbmxpbmUgYm9vbCBTaW1wbGVGb250RGF0YTo6
YWR2YW5jZUZvckNvbG9yQml0bWFwRm9udChHbHlwaCBnbHlwaCwgQ0dTaXplJiBhZHZhbmNlKSBj
b25zdAoraW5saW5lIGJvb2wgRm9udDo6YWR2YW5jZUZvckNvbG9yQml0bWFwRm9udChHbHlwaCBn
bHlwaCwgQ0dTaXplJiBhZHZhbmNlKSBjb25zdAogewogICAgIE5TRm9udCAqZm9udCA9IHBsYXRm
b3JtRGF0YSgpLm5zRm9udCgpOwogICAgIGlmICghZm9udCB8fCAhcGxhdGZvcm1EYXRhKCkuaXND
b2xvckJpdG1hcEZvbnQoKSkKQEAgLTM5NCw3ICszOTQsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wg
aXNFbW9qaShjb25zdCBGb250UGxhCiAjZW5kaWYKIH0KIAotaW5saW5lIGJvb2wgU2ltcGxlRm9u
dERhdGE6OmNhblVzZUZhc3RHbHlwaEFkdmFuY2VHZXR0ZXIoR2x5cGggZ2x5cGgsIENHU2l6ZSYg
YWR2YW5jZSwgYm9vbCYgcG9wdWxhdGVkQWR2YW5jZSkgY29uc3QKK2lubGluZSBib29sIEZvbnQ6
OmNhblVzZUZhc3RHbHlwaEFkdmFuY2VHZXR0ZXIoR2x5cGggZ2x5cGgsIENHU2l6ZSYgYWR2YW5j
ZSwgYm9vbCYgcG9wdWxhdGVkQWR2YW5jZSkgY29uc3QKIHsKICAgICAvLyBGYXN0IGdldHRlciBk
b2Vzbid0IHRha2UgY3VzdG9tIHRyYWNraW5nIGludG8gYWNjb3VudAogICAgIGlmIChoYXNDdXN0
b21UcmFja2luZyhwbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSkpCkBAIC00MTAsNyArNDEwLDcgQEAg
aW5saW5lIGJvb2wgU2ltcGxlRm9udERhdGE6OmNhblVzZUZhc3RHbAogICAgIHJldHVybiB0cnVl
OwogfQogCi1mbG9hdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBo
IGdseXBoKSBjb25zdAorZmxvYXQgRm9udDo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGds
eXBoKSBjb25zdAogewogICAgIENHU2l6ZSBhZHZhbmNlID0gQ0dTaXplWmVybzsKICAgICBib29s
IGhvcml6b250YWwgPSBwbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IEhvcml6b250YWw7
CkBAIC00NDYsNyArNDQ2LDcgQEAgc3RhdGljIGNvbnN0IFVuaUNoYXIqIHByb3ZpZGVTdHJpbmdB
bmRBdAogICAgIHJldHVybiBpbmZvLT5jaGFyYWN0ZXJzICsgc3RyaW5nSW5kZXg7CiB9CiAKLWJv
b2wgU2ltcGxlRm9udERhdGE6OmNhblJlbmRlckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNv
bnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKSBjb25zdAorYm9vbCBGb250Ojpj
YW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBVQ2hhciogY2hhcmFjdGVy
cywgc2l6ZV90IGxlbmd0aCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlw
ZU1hdGhEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVudHlwZS9PcGVuVHlwZU1hdGhEYXRhLmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVNYXRoRGF0
YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEyICsyNiwxMiBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIk9wZW5UeXBlTWF0aERhdGEuaCIKIAorI2luY2x1ZGUgIkZvbnQuaCIK
ICNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCiAjaWYgRU5BQkxFKE9QRU5UWVBFX01BVEgp
CiAjaW5jbHVkZSAiT3BlblR5cGVUeXBlcy5oIgogI2VuZGlmCiAjaW5jbHVkZSAiU2hhcmVkQnVm
ZmVyLmgiCi0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKIAogdXNpbmcgbmFtZXNwYWNlIHN0
ZDsKIApAQCAtMjM1LDkgKzIzNSw5IEBAIHN0cnVjdCBNQVRIVGFibGUgOiBUYWJsZUJhc2Ugewog
I2VuZGlmIC8vIEVOQUJMRShPUEVOVFlQRV9NQVRIKQogCiAjaWYgRU5BQkxFKE9QRU5UWVBFX01B
VEgpCi1PcGVuVHlwZU1hdGhEYXRhOjpPcGVuVHlwZU1hdGhEYXRhKGNvbnN0IEZvbnRQbGF0Zm9y
bURhdGEmIGZvbnREYXRhKQorT3BlblR5cGVNYXRoRGF0YTo6T3BlblR5cGVNYXRoRGF0YShjb25z
dCBGb250UGxhdGZvcm1EYXRhJiBmb250KQogewotICAgIG1fbWF0aEJ1ZmZlciA9IGZvbnREYXRh
Lm9wZW5UeXBlVGFibGUoT3BlblR5cGU6Ok1BVEhUYWcpOworICAgIG1fbWF0aEJ1ZmZlciA9IGZv
bnQub3BlblR5cGVUYWJsZShPcGVuVHlwZTo6TUFUSFRhZyk7CiAgICAgY29uc3QgT3BlblR5cGU6
Ok1BVEhUYWJsZSogbWF0aCA9IE9wZW5UeXBlOjp2YWxpZGF0ZVRhYmxlPE9wZW5UeXBlOjpNQVRI
VGFibGU+KG1fbWF0aEJ1ZmZlcik7CiAgICAgaWYgKCFtYXRoKSB7CiAgICAgICAgIG1fbWF0aEJ1
ZmZlciA9IG51bGxwdHI7CkBAIC0yNjUsNyArMjY1LDcgQEAgT3BlblR5cGVNYXRoRGF0YTo6fk9w
ZW5UeXBlTWF0aERhdGEoKQogfQogCiAjaWYgRU5BQkxFKE9QRU5UWVBFX01BVEgpCi1mbG9hdCBP
cGVuVHlwZU1hdGhEYXRhOjpnZXRNYXRoQ29uc3RhbnQoY29uc3QgU2ltcGxlRm9udERhdGEmIGZv
bnQsIE1hdGhDb25zdGFudCBjb25zdGFudCkgY29uc3QKK2Zsb2F0IE9wZW5UeXBlTWF0aERhdGE6
OmdldE1hdGhDb25zdGFudChjb25zdCBGb250JiBmb250LCBNYXRoQ29uc3RhbnQgY29uc3RhbnQp
IGNvbnN0CiB7CiAgICAgaW50MzJfdCB2YWx1ZSA9IDA7CiAKQEAgLTI4OCw3ICsyODgsNyBAQCBm
bG9hdCBPcGVuVHlwZU1hdGhEYXRhOjpnZXRNYXRoQ29uc3RhbnQoCiAKICAgICByZXR1cm4gdmFs
dWUgKiBmb250LnNpemVQZXJVbml0KCk7CiAjZWxzZQotZmxvYXQgT3BlblR5cGVNYXRoRGF0YTo6
Z2V0TWF0aENvbnN0YW50KGNvbnN0IFNpbXBsZUZvbnREYXRhJiwgTWF0aENvbnN0YW50KSBjb25z
dAorZmxvYXQgT3BlblR5cGVNYXRoRGF0YTo6Z2V0TWF0aENvbnN0YW50KGNvbnN0IEZvbnQmLCBN
YXRoQ29uc3RhbnQpIGNvbnN0CiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0
dXJuIDA7CkBAIC0yOTYsNyArMjk2LDcgQEAgZmxvYXQgT3BlblR5cGVNYXRoRGF0YTo6Z2V0TWF0
aENvbnN0YW50KAogfQogCiAjaWYgRU5BQkxFKE9QRU5UWVBFX01BVEgpCi1mbG9hdCBPcGVuVHlw
ZU1hdGhEYXRhOjpnZXRJdGFsaWNDb3JyZWN0aW9uKGNvbnN0IFNpbXBsZUZvbnREYXRhJiBmb250
LCBHbHlwaCBnbHlwaCkgY29uc3QKK2Zsb2F0IE9wZW5UeXBlTWF0aERhdGE6OmdldEl0YWxpY0Nv
cnJlY3Rpb24oY29uc3QgRm9udCYgZm9udCwgR2x5cGggZ2x5cGgpIGNvbnN0CiB7CiAgICAgY29u
c3QgT3BlblR5cGU6Ok1BVEhUYWJsZSogbWF0aCA9IE9wZW5UeXBlOjp2YWxpZGF0ZVRhYmxlPE9w
ZW5UeXBlOjpNQVRIVGFibGU+KG1fbWF0aEJ1ZmZlcik7CiAgICAgQVNTRVJUKG1hdGgpOwpAQCAt
MzEwLDcgKzMxMCw3IEBAIGZsb2F0IE9wZW5UeXBlTWF0aERhdGE6OmdldEl0YWxpY0NvcnJlY3QK
IAogICAgIHJldHVybiBtYXRoSXRhbGljc0NvcnJlY3Rpb25JbmZvLT5nZXRJdGFsaWNDb3JyZWN0
aW9uKCptX21hdGhCdWZmZXIsIGdseXBoKSAqIGZvbnQuc2l6ZVBlclVuaXQoKTsKICNlbHNlCi1m
bG9hdCBPcGVuVHlwZU1hdGhEYXRhOjpnZXRJdGFsaWNDb3JyZWN0aW9uKGNvbnN0IFNpbXBsZUZv
bnREYXRhJiwgR2x5cGgpIGNvbnN0CitmbG9hdCBPcGVuVHlwZU1hdGhEYXRhOjpnZXRJdGFsaWND
b3JyZWN0aW9uKGNvbnN0IEZvbnQmLCBHbHlwaCkgY29uc3QKIHsKICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICByZXR1cm4gMDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW50eXBlL09wZW5UeXBlTWF0aERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZU1hdGhEYXRhLmgJKHJl
dmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW50
eXBlL09wZW5UeXBlTWF0aERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTMgKzM1LDEzIEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRm9udFBsYXRmb3JtRGF0YTsKIGNsYXNzIFNo
YXJlZEJ1ZmZlcjsKLWNsYXNzIFNpbXBsZUZvbnREYXRhOworY2xhc3MgRm9udDsKIAogY2xhc3Mg
T3BlblR5cGVNYXRoRGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPE9wZW5UeXBlTWF0aERhdGE+IHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxPcGVuVHlwZU1hdGhEYXRhPiBjcmVhdGUo
Y29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZm9udERhdGEpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8
T3BlblR5cGVNYXRoRGF0YT4gY3JlYXRlKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnQpCiAg
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE9wZW5UeXBlTWF0aERhdGEoZm9udERh
dGEpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBPcGVuVHlwZU1hdGhEYXRhKGZvbnQp
KTsKICAgICB9CiAgICAgfk9wZW5UeXBlTWF0aERhdGEoKTsKIApAQCAtMTEzLDggKzExMyw4IEBA
IHB1YmxpYzoKICAgICAgICAgYm9vbCBpc0V4dGVuZGVyOwogICAgIH07CiAKLSAgICBmbG9hdCBn
ZXRNYXRoQ29uc3RhbnQoY29uc3QgU2ltcGxlRm9udERhdGEmLCBNYXRoQ29uc3RhbnQpIGNvbnN0
OwotICAgIGZsb2F0IGdldEl0YWxpY0NvcnJlY3Rpb24oY29uc3QgU2ltcGxlRm9udERhdGEmLCBH
bHlwaCkgY29uc3Q7CisgICAgZmxvYXQgZ2V0TWF0aENvbnN0YW50KGNvbnN0IEZvbnQmLCBNYXRo
Q29uc3RhbnQpIGNvbnN0OworICAgIGZsb2F0IGdldEl0YWxpY0NvcnJlY3Rpb24oY29uc3QgRm9u
dCYsIEdseXBoKSBjb25zdDsKICAgICB2b2lkIGdldE1hdGhWYXJpYW50cyhHbHlwaCwgYm9vbCBp
c1ZlcnRpY2FsLCBWZWN0b3I8R2x5cGg+JiBzaXplVmFyaWFudHMsIFZlY3RvcjxBc3NlbWJseVBh
cnQ+JiBhc3NlbWJseVBhcnRzKSBjb25zdDsKIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlVmVydGljYWxEYXRhLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9P
cGVuVHlwZVZlcnRpY2FsRGF0YS5jcHAJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlVmVydGljYWxEYXRhLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjcsMTAgKzI3LDEwIEBACiAjaW5jbHVkZSAiT3BlblR5cGVWZXJ0
aWNhbERhdGEuaCIKIAogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkZvbnQuaCIK
ICNpbmNsdWRlICJHbHlwaFBhZ2UuaCIKICNpbmNsdWRlICJPcGVuVHlwZVR5cGVzLmgiCiAjaW5j
bHVkZSAiU2hhcmVkQnVmZmVyLmgiCi0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKICNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CkBAIC00NzksNyArNDc5
LDcgQEAgdm9pZCBPcGVuVHlwZVZlcnRpY2FsRGF0YTo6bG9hZFZlcnRpY2FsRwogICAgICAgICBn
c3ViLT5nZXRWZXJ0aWNhbEdseXBoU3Vic3RpdHV0aW9ucygmbV92ZXJ0aWNhbEdseXBoTWFwLCAq
YnVmZmVyLmdldCgpKTsKIH0KIAotZmxvYXQgT3BlblR5cGVWZXJ0aWNhbERhdGE6OmFkdmFuY2VI
ZWlnaHQoY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsIEdseXBoIGdseXBoKSBjb25zdAorZmxv
YXQgT3BlblR5cGVWZXJ0aWNhbERhdGE6OmFkdmFuY2VIZWlnaHQoY29uc3QgRm9udCogZm9udCwg
R2x5cGggZ2x5cGgpIGNvbnN0CiB7CiAgICAgc2l6ZV90IGNvdW50SGVpZ2h0cyA9IG1fYWR2YW5j
ZUhlaWdodHMuc2l6ZSgpOwogICAgIGlmIChjb3VudEhlaWdodHMpIHsKQEAgLTQ5Miw3ICs0OTIs
NyBAQCBmbG9hdCBPcGVuVHlwZVZlcnRpY2FsRGF0YTo6YWR2YW5jZUhlaWdoCiAgICAgcmV0dXJu
IGZvbnQtPmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCk7CiB9CiAKLXZvaWQgT3BlblR5cGVWZXJ0aWNh
bERhdGE6OmdldFZlcnRpY2FsVHJhbnNsYXRpb25zRm9yR2x5cGhzKGNvbnN0IFNpbXBsZUZvbnRE
YXRhKiBmb250LCBjb25zdCBHbHlwaCogZ2x5cGhzLCBzaXplX3QgY291bnQsIGZsb2F0KiBvdXRY
WUFycmF5KSBjb25zdAordm9pZCBPcGVuVHlwZVZlcnRpY2FsRGF0YTo6Z2V0VmVydGljYWxUcmFu
c2xhdGlvbnNGb3JHbHlwaHMoY29uc3QgRm9udCogZm9udCwgY29uc3QgR2x5cGgqIGdseXBocywg
c2l6ZV90IGNvdW50LCBmbG9hdCogb3V0WFlBcnJheSkgY29uc3QKIHsKICAgICBzaXplX3QgY291
bnRXaWR0aHMgPSBtX2FkdmFuY2VXaWR0aHMuc2l6ZSgpOwogICAgIEFTU0VSVChjb3VudFdpZHRo
cyA+IDApOwpAQCAtNTM1LDcgKzUzNSw3IEBAIHZvaWQgT3BlblR5cGVWZXJ0aWNhbERhdGE6Omdl
dFZlcnRpY2FsVHIKICAgICB9CiB9CiAKLXZvaWQgT3BlblR5cGVWZXJ0aWNhbERhdGE6OnN1YnN0
aXR1dGVXaXRoVmVydGljYWxHbHlwaHMoY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsIEdseXBo
UGFnZSogZ2x5cGhQYWdlLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3QK
K3ZvaWQgT3BlblR5cGVWZXJ0aWNhbERhdGE6OnN1YnN0aXR1dGVXaXRoVmVydGljYWxHbHlwaHMo
Y29uc3QgRm9udCogZm9udCwgR2x5cGhQYWdlKiBnbHlwaFBhZ2UsIHVuc2lnbmVkIG9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoKSBjb25zdAogewogICAgIGNvbnN0IEhhc2hNYXA8R2x5cGgsIEdseXBo
PiYgbWFwID0gbV92ZXJ0aWNhbEdseXBoTWFwOwogICAgIGlmIChtYXAuaXNFbXB0eSgpKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVWZXJ0
aWNhbERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVudHlwZS9PcGVuVHlwZVZlcnRpY2FsRGF0YS5oCShyZXZpc2lvbiAxNzg4NTcpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVZlcnRpY2Fs
RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw5ICszNSw5IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAorY2xhc3MgRm9udDsKIGNsYXNzIEZvbnRQbGF0Zm9ybURhdGE7CiBjbGFzcyBHbHlw
aFBhZ2U7Ci1jbGFzcyBTaW1wbGVGb250RGF0YTsKIAogY2xhc3MgT3BlblR5cGVWZXJ0aWNhbERh
dGEgOiBwdWJsaWMgUmVmQ291bnRlZDxPcGVuVHlwZVZlcnRpY2FsRGF0YT4gewogcHVibGljOgpA
QCAtNDgsOSArNDgsOSBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzT3BlblR5cGUoKSBjb25zdCB7
IHJldHVybiAhbV9hZHZhbmNlV2lkdGhzLmlzRW1wdHkoKTsgfQogICAgIGJvb2wgaGFzVmVydGlj
YWxNZXRyaWNzKCkgY29uc3QgeyByZXR1cm4gIW1fYWR2YW5jZUhlaWdodHMuaXNFbXB0eSgpOyB9
Ci0gICAgZmxvYXQgYWR2YW5jZUhlaWdodChjb25zdCBTaW1wbGVGb250RGF0YSosIEdseXBoKSBj
b25zdDsKLSAgICB2b2lkIGdldFZlcnRpY2FsVHJhbnNsYXRpb25zRm9yR2x5cGhzKGNvbnN0IFNp
bXBsZUZvbnREYXRhKiwgY29uc3QgR2x5cGgqLCBzaXplX3QsIGZsb2F0KiBvdXRYWUFycmF5KSBj
b25zdDsKLSAgICB2b2lkIHN1YnN0aXR1dGVXaXRoVmVydGljYWxHbHlwaHMoY29uc3QgU2ltcGxl
Rm9udERhdGEqLCBHbHlwaFBhZ2UqLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkg
Y29uc3Q7CisgICAgZmxvYXQgYWR2YW5jZUhlaWdodChjb25zdCBGb250KiwgR2x5cGgpIGNvbnN0
OworICAgIHZvaWQgZ2V0VmVydGljYWxUcmFuc2xhdGlvbnNGb3JHbHlwaHMoY29uc3QgRm9udCos
IGNvbnN0IEdseXBoKiwgc2l6ZV90LCBmbG9hdCogb3V0WFlBcnJheSkgY29uc3Q7CisgICAgdm9p
ZCBzdWJzdGl0dXRlV2l0aFZlcnRpY2FsR2x5cGhzKGNvbnN0IEZvbnQqLCBHbHlwaFBhZ2UqLCB1
bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAg
ZXhwbGljaXQgT3BlblR5cGVWZXJ0aWNhbERhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDR1dpbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRD
R1dpbi5jcHAJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMCArMjgsMTAg
QEAKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkZsb2F0Q29udmVy
c2lvbi5oIgorI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRl
ICJTaW1wbGVGb250RGF0YS5oIgogI2luY2x1ZGUgIlVuaXNjcmliZUNvbnRyb2xsZXIuaCIKICNp
bmNsdWRlICJXZWJDb3JlVGV4dFJlbmRlcmVyLmgiCiAjaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2
aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CkBAIC0xMjcsNyArMTI3LDcgQEAgc3RhdGljIENH
UGF0aFJlZiBjcmVhdGVQYXRoRm9yR2x5cGgoSERDIAogICAgIHJldHVybiBwYXRoOwogfQogCi12
b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250
ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBo
QnVmZmVyLAordm9pZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGdy
YXBoaWNzQ29udGV4dCwgY29uc3QgRm9udCogZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBo
QnVmZmVyLAogICAgIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBw
b2ludCkgY29uc3QKIHsKICAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gZ3JhcGhpY3NDb250
ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3BwCShyZXZpc2lvbiAxNzg4NTcp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjgsOSArMjgsOSBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSA8d2luc29jazIuaD4KKyNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9u
dENhY2hlLmgiCiAjaW5jbHVkZSAiSFduZERDLmgiCi0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEu
aCIKICNpbmNsdWRlIDxtbGFuZy5oPgogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNpbmNsdWRlIDx3
dGYvSGFzaFNldC5oPgpAQCAtMTk5LDEwICsxOTksMTAgQEAgc3RhdGljIEhGT05UIGNyZWF0ZU1M
YW5nRm9udChJTUxhbmdGb250TAogICAgIHJldHVybiBoZm9udDsKIH0KIAotUmVmUHRyPFNpbXBs
ZUZvbnREYXRhPiBGb250Q2FjaGU6OnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhjb25zdCBG
b250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBTaW1wbGVGb250RGF0YSogb3JpZ2lu
YWxGb250RGF0YSwgYm9vbCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCitS
ZWZQdHI8Rm9udD4gRm9udENhY2hlOjpzeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgY29uc3QgRm9udCogb3JpZ2luYWxGb250RGF0
YSwgYm9vbCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCiB7CiAgICAgVUNo
YXIgY2hhcmFjdGVyID0gY2hhcmFjdGVyc1swXTsKLSAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+
IGZvbnREYXRhOworICAgIFJlZlB0cjxGb250PiBmb250RGF0YTsKICAgICBIV25kREMgaGRjKDAp
OwogICAgIEhGT05UIHByaW1hcnlGb250ID0gb3JpZ2luYWxGb250RGF0YS0+cGxhdGZvcm1EYXRh
KCkuaGZvbnQoKTsKICAgICBIR0RJT0JKIG9sZEZvbnQgPSBTZWxlY3RPYmplY3QoaGRjLCBwcmlt
YXJ5Rm9udCk7CkBAIC0zMDksMTYgKzMwOSwxNiBAQCBSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZv
bnRDYWNoZTo6c3lzdGVtCiAgICAgcmV0dXJuIGZvbnREYXRhLnJlbGVhc2UoKTsKIH0KIAotUmVm
UHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmZvbnREYXRhRnJvbURlc2NyaXB0aW9uQW5k
TG9nRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgTE9H
Rk9OVCYgZm9udCwgQXRvbWljU3RyaW5nJiBvdXRGb250RmFtaWx5TmFtZSkKK1JlZlB0cjxGb250
PiBGb250Q2FjaGU6OmZvbnRGcm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBMT0dGT05UJiBmb250LCBBdG9taWNTdHJp
bmcmIG91dEZvbnRGYW1pbHlOYW1lKQogewogICAgIEF0b21pY1N0cmluZyBmYW1pbHlOYW1lID0g
U3RyaW5nKGZvbnQubGZGYWNlTmFtZSwgd2Nzbmxlbihmb250LmxmRmFjZU5hbWUsIExGX0ZBQ0VT
SVpFKSk7Ci0gICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBmb250RGF0YSA9IGZvbnRGb3JGYW1p
bHkoZm9udERlc2NyaXB0aW9uLCBmYW1pbHlOYW1lKTsKKyAgICBSZWZQdHI8Rm9udD4gZm9udERh
dGEgPSBmb250Rm9yRmFtaWx5KGZvbnREZXNjcmlwdGlvbiwgZmFtaWx5TmFtZSk7CiAgICAgaWYg
KGZvbnREYXRhKQogICAgICAgICBvdXRGb250RmFtaWx5TmFtZSA9IGZhbWlseU5hbWU7CiAgICAg
cmV0dXJuIGZvbnREYXRhOwogfQogCi1SZWY8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6bGFz
dFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlv
bikKK1JlZjxGb250PiBGb250Q2FjaGU6Omxhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pCiB7CiAgICAgREVQUkVDQVRFRF9ERUZJTkVf
U1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgZmFsbGJhY2tGb250TmFtZSwgKCkpOwogICAgIGlm
ICghZmFsbGJhY2tGb250TmFtZS5pc0VtcHR5KCkpCkBAIC0zMzcsNyArMzM3LDcgQEAgUmVmPFNp
bXBsZUZvbnREYXRhPiBGb250Q2FjaGU6Omxhc3RSZXNvcgogICAgICAgICBBdG9taWNTdHJpbmco
Ikx1Y2lkYSBTYW5zIFVuaWNvZGUiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KSwKICAgICAgICAgQXRvbWljU3RyaW5nKCJBcmlhbCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpCiAgICAgfTsKLSAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IHNpbXBsZUZv
bnQ7CisgICAgUmVmUHRyPEZvbnQ+IHNpbXBsZUZvbnQ7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBXVEZfQVJSQVlfTEVOR1RIKGZhbGxiYWNrRm9udHMpOyArK2kpIHsKICAgICAgICAgaWYg
KHNpbXBsZUZvbnQgPSBmb250Rm9yRmFtaWx5KGZvbnREZXNjcmlwdGlvbiwgZmFsbGJhY2tGb250
c1tpXSkpIHsKICAgICAgICAgICAgIGZhbGxiYWNrRm9udE5hbWUgPSBmYWxsYmFja0ZvbnRzW2ld
OwpAQCAtMzQ5LDcgKzM0OSw3IEBAIFJlZjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpsYXN0
UmVzb3IKICAgICBpZiAoSEZPTlQgZGVmYXVsdEdVSUZvbnQgPSBzdGF0aWNfY2FzdDxIRk9OVD4o
R2V0U3RvY2tPYmplY3QoREVGQVVMVF9HVUlfRk9OVCkpKSB7CiAgICAgICAgIExPR0ZPTlQgZGVm
YXVsdEdVSUxvZ0ZvbnQ7CiAgICAgICAgIEdldE9iamVjdChkZWZhdWx0R1VJRm9udCwgc2l6ZW9m
KGRlZmF1bHRHVUlMb2dGb250KSwgJmRlZmF1bHRHVUlMb2dGb250KTsKLSAgICAgICAgaWYgKHNp
bXBsZUZvbnQgPSBmb250RGF0YUZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoZm9udERlc2NyaXB0
aW9uLCBkZWZhdWx0R1VJTG9nRm9udCwgZmFsbGJhY2tGb250TmFtZSkpCisgICAgICAgIGlmIChz
aW1wbGVGb250ID0gZm9udEZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoZm9udERlc2NyaXB0aW9u
LCBkZWZhdWx0R1VJTG9nRm9udCwgZmFsbGJhY2tGb250TmFtZSkpCiAgICAgICAgICAgICByZXR1
cm4gKnNpbXBsZUZvbnQ7CiAgICAgfQogCkBAIC0zNTcsMTUgKzM1NywxNSBAQCBSZWY8U2ltcGxl
Rm9udERhdGE+IEZvbnRDYWNoZTo6bGFzdFJlc29yCiAgICAgTk9OQ0xJRU5UTUVUUklDUyBub25D
bGllbnRNZXRyaWNzID0gezB9OwogICAgIG5vbkNsaWVudE1ldHJpY3MuY2JTaXplID0gc2l6ZW9m
KG5vbkNsaWVudE1ldHJpY3MpOwogICAgIGlmIChTeXN0ZW1QYXJhbWV0ZXJzSW5mbyhTUElfR0VU
Tk9OQ0xJRU5UTUVUUklDUywgc2l6ZW9mKG5vbkNsaWVudE1ldHJpY3MpLCAmbm9uQ2xpZW50TWV0
cmljcywgMCkpIHsKLSAgICAgICAgaWYgKHNpbXBsZUZvbnQgPSBmb250RGF0YUZyb21EZXNjcmlw
dGlvbkFuZExvZ0ZvbnQoZm9udERlc2NyaXB0aW9uLCBub25DbGllbnRNZXRyaWNzLmxmTWVzc2Fn
ZUZvbnQsIGZhbGxiYWNrRm9udE5hbWUpKQorICAgICAgICBpZiAoc2ltcGxlRm9udCA9IGZvbnRG
cm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGZvbnREZXNjcmlwdGlvbiwgbm9uQ2xpZW50TWV0cmlj
cy5sZk1lc3NhZ2VGb250LCBmYWxsYmFja0ZvbnROYW1lKSkKICAgICAgICAgICAgIHJldHVybiAq
c2ltcGxlRm9udDsKLSAgICAgICAgaWYgKHNpbXBsZUZvbnQgPSBmb250RGF0YUZyb21EZXNjcmlw
dGlvbkFuZExvZ0ZvbnQoZm9udERlc2NyaXB0aW9uLCBub25DbGllbnRNZXRyaWNzLmxmTWVudUZv
bnQsIGZhbGxiYWNrRm9udE5hbWUpKQorICAgICAgICBpZiAoc2ltcGxlRm9udCA9IGZvbnRGcm9t
RGVzY3JpcHRpb25BbmRMb2dGb250KGZvbnREZXNjcmlwdGlvbiwgbm9uQ2xpZW50TWV0cmljcy5s
Zk1lbnVGb250LCBmYWxsYmFja0ZvbnROYW1lKSkKICAgICAgICAgICAgIHJldHVybiAqc2ltcGxl
Rm9udDsKLSAgICAgICAgaWYgKHNpbXBsZUZvbnQgPSBmb250RGF0YUZyb21EZXNjcmlwdGlvbkFu
ZExvZ0ZvbnQoZm9udERlc2NyaXB0aW9uLCBub25DbGllbnRNZXRyaWNzLmxmU3RhdHVzRm9udCwg
ZmFsbGJhY2tGb250TmFtZSkpCisgICAgICAgIGlmIChzaW1wbGVGb250ID0gZm9udEZyb21EZXNj
cmlwdGlvbkFuZExvZ0ZvbnQoZm9udERlc2NyaXB0aW9uLCBub25DbGllbnRNZXRyaWNzLmxmU3Rh
dHVzRm9udCwgZmFsbGJhY2tGb250TmFtZSkpCiAgICAgICAgICAgICByZXR1cm4gKnNpbXBsZUZv
bnQ7Ci0gICAgICAgIGlmIChzaW1wbGVGb250ID0gZm9udERhdGFGcm9tRGVzY3JpcHRpb25BbmRM
b2dGb250KGZvbnREZXNjcmlwdGlvbiwgbm9uQ2xpZW50TWV0cmljcy5sZkNhcHRpb25Gb250LCBm
YWxsYmFja0ZvbnROYW1lKSkKKyAgICAgICAgaWYgKHNpbXBsZUZvbnQgPSBmb250RnJvbURlc2Ny
aXB0aW9uQW5kTG9nRm9udChmb250RGVzY3JpcHRpb24sIG5vbkNsaWVudE1ldHJpY3MubGZDYXB0
aW9uRm9udCwgZmFsbGJhY2tGb250TmFtZSkpCiAgICAgICAgICAgICByZXR1cm4gKnNpbXBsZUZv
bnQ7Ci0gICAgICAgIGlmIChzaW1wbGVGb250ID0gZm9udERhdGFGcm9tRGVzY3JpcHRpb25BbmRM
b2dGb250KGZvbnREZXNjcmlwdGlvbiwgbm9uQ2xpZW50TWV0cmljcy5sZlNtQ2FwdGlvbkZvbnQs
IGZhbGxiYWNrRm9udE5hbWUpKQorICAgICAgICBpZiAoc2ltcGxlRm9udCA9IGZvbnRGcm9tRGVz
Y3JpcHRpb25BbmRMb2dGb250KGZvbnREZXNjcmlwdGlvbiwgbm9uQ2xpZW50TWV0cmljcy5sZlNt
Q2FwdGlvbkZvbnQsIGZhbGxiYWNrRm9udE5hbWUpKQogICAgICAgICAgICAgcmV0dXJuICpzaW1w
bGVGb250OwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9Gb250V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vRm9udFdpbi5jcHAJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250V2luLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjYsMTMgKzI2LDEzIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRm9udENh
c2NhZGUuaCIKIAorI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGb250R2x5cGhzLmgiCiAj
aW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNp
bmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgIkxv
Z2dpbmcuaCIKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgogI2luY2x1ZGUgIlRleHRSdW4u
aCIKICNpbmNsdWRlICJVbmlzY3JpYmVDb250cm9sbGVyLmgiCiAjaW5jbHVkZSA8d3RmL01hdGhF
eHRyYXMuaD4KQEAgLTEyMCw3ICsxMjAsNyBAQCB2b2lkIEZvbnRDYXNjYWRlOjpkcmF3RW1waGFz
aXNNYXJrc0ZvckNvCiAgICAgZHJhd0VtcGhhc2lzTWFya3MoY29udGV4dCwgcnVuLCBnbHlwaEJ1
ZmZlciwgbWFyaywgRmxvYXRQb2ludChwb2ludC54KCkgKyBpbml0aWFsQWR2YW5jZSwgcG9pbnQu
eSgpKSk7CiB9CiAKLWZsb2F0IEZvbnRDYXNjYWRlOjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQo
Y29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxi
YWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0CitmbG9hdCBGb250
Q2FzY2FkZTo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgSGFz
aFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3Zl
cmZsb3cpIGNvbnN0CiB7CiAgICAgVW5pc2NyaWJlQ29udHJvbGxlciBjb250cm9sbGVyKHRoaXMs
IHJ1biwgZmFsbGJhY2tGb250cyk7CiAgICAgY29udHJvbGxlci5hZHZhbmNlKHJ1bi5sZW5ndGgo
KSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdl
VHJlZU5vZGVDR1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2RlQ0dXaW4uY3BwCShyZXZpc2lvbiAxNzg4NTcp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5v
ZGVDR1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEyICsyOSwxMiBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIkdseXBoUGFnZS5oIgogCi0jaW5jbHVkZSAiU2ltcGxlRm9u
dERhdGEuaCIKKyNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJm
YWNlL1dlYktpdFN5c3RlbUludGVyZmFjZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJv
b2wgR2x5cGhQYWdlOjpmaWxsKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hh
ciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBm
b250RGF0YSkKK2Jvb2wgR2x5cGhQYWdlOjpmaWxsKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQg
bGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IEZvbnQq
IGZvbnREYXRhKQogewogICAgIC8vIGJ1ZmZlckxlbmd0aCB3aWxsIGJlIGdyZWF0ZXIgdGhhbiB0
aGUgcmVxdWVzdGVkIG51bWJlciBvZiBnbHlwaHMgaWYgdGhlIGJ1ZmZlciBjb250YWlucyBzdXJy
b2dhdGUgcGFpcnMuCiAgICAgLy8gV2Ugd29uJ3Qgc3VwcG9ydCB0aGlzIGZvciBub3cuCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVD
YWlyb1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0dseXBoUGFnZVRyZWVOb2RlQ2Fpcm9XaW4uY3BwCShyZXZpc2lvbiAxNzg4NTcpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVD
YWlyb1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEyICsyOSwxMiBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIkdseXBoUGFnZS5oIgogCisjaW5jbHVkZSAiRm9udC5oIgog
I2luY2x1ZGUgIkhXbmREQy5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotYm9vbCBHbHlwaFBhZ2U6OmZpbGwodW5zaWduZWQgb2Zmc2V0LCB1
bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29u
c3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQorYm9vbCBHbHlwaFBhZ2U6OmZpbGwodW5zaWdu
ZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZl
ckxlbmd0aCwgY29uc3QgRm9udCogZm9udERhdGEpCiB7CiAgICAgLy8gYnVmZmVyTGVuZ3RoIHdp
bGwgYmUgZ3JlYXRlciB0aGFuIHRoZSByZXF1ZXN0ZWQgbnVtYmVyIG9mIGdseXBocyBpZiB0aGUg
YnVmZmVyIGNvbnRhaW5zIHN1cnJvZ2F0ZSBwYWlycy4KICAgICAvLyBXZSB3b24ndCBzdXBwb3J0
IHRoaXMgZm9yIG5vdy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9TaW1wbGVGb250RGF0YUNHV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFDR1dpbi5jcHAJKHJldmlzaW9uIDE3
ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250
RGF0YUNHV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogICovCiAKICNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgorI2luY2x1ZGUg
IkZvbnQuaCIKIAogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkZvbnRDYWNoZS5o
IgpAQCAtNDgsNyArNDgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFj
ZSBzdGQ7CiAKLXZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtSW5pdCgpCit2b2lkIEZvbnQ6
OnBsYXRmb3JtSW5pdCgpCiB7CiAgICAgbV9zeW50aGV0aWNCb2xkT2Zmc2V0ID0gbV9wbGF0Zm9y
bURhdGEuc3ludGhldGljQm9sZCgpID8gMS4wZiA6IDAuZjsKICAgICBtX3NjcmlwdENhY2hlID0g
MDsKQEAgLTEwMyw3ICsxMDMsNyBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUluaXQo
KQogICAgIG1fZm9udE1ldHJpY3Muc2V0VW5pdHNQZXJFbSh1bml0c1BlckVtKTsKIH0KIAotRmxv
YXRSZWN0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKEdseXBoIGdseXBo
KSBjb25zdAorRmxvYXRSZWN0IEZvbnQ6OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgoR2x5cGggZ2x5
cGgpIGNvbnN0CiB7CiAgICAgaWYgKCFwbGF0Zm9ybURhdGEoKS5zaXplKCkpCiAgICAgICAgIHJl
dHVybiBGbG9hdFJlY3QoKTsKQEAgLTEyMiw3ICsxMjIsNyBAQCBGbG9hdFJlY3QgU2ltcGxlRm9u
dERhdGE6OnBsYXRmb3JtQm91bmRzCiAgICAgcmV0dXJuIGJvdW5kaW5nQm94OwogfQogCi1mbG9h
dCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25z
dAorZmxvYXQgRm9udDo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAog
ewogICAgIGlmICghcGxhdGZvcm1EYXRhKCkuc2l6ZSgpKQogICAgICAgICByZXR1cm4gMDsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNh
aXJvV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vU2ltcGxlRm9udERhdGFDYWlyb1dpbi5jcHAJKHJldmlzaW9uIDE3ODg1NykKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNhaXJvV2lu
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogICovCiAKICNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgorI2luY2x1ZGUgIkZvbnQuaCIK
IAogI2luY2x1ZGUgPHdpbmRvd3MuaD4KIApAQCAtNDEsNyArNDEsNyBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLXZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtSW5pdCgpCit2b2lkIEZv
bnQ6OnBsYXRmb3JtSW5pdCgpCiB7CiAgICAgbV9zeW50aGV0aWNCb2xkT2Zmc2V0ID0gbV9wbGF0
Zm9ybURhdGEuc3ludGhldGljQm9sZCgpID8gMS4wZiA6IDAuZjsKICAgICBtX3NjcmlwdENhY2hl
ID0gMDsKQEAgLTEwMyw3ICsxMDMsNyBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUlu
aXQoKQogICAgIFJlc3RvcmVEQyhkYywgLTEpOwogfQogCi1GbG9hdFJlY3QgU2ltcGxlRm9udERh
dGE6OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CitGbG9hdFJlY3Qg
Rm9udDo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKIHsKICAgICBp
ZiAobV9wbGF0Zm9ybURhdGEudXNlR0RJKCkpCiAgICAgICAgIHJldHVybiBib3VuZHNGb3JHRElH
bHlwaChnbHlwaCk7CkBAIC0xMTEsNyArMTExLDcgQEAgRmxvYXRSZWN0IFNpbXBsZUZvbnREYXRh
OjpwbGF0Zm9ybUJvdW5kcwogICAgIHJldHVybiBGbG9hdFJlY3QoKTsKIH0KICAgICAKLWZsb2F0
IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0
CitmbG9hdCBGb250OjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CiB7
CiAgICAgaWYgKG1fcGxhdGZvcm1EYXRhLnVzZUdESSgpKQogICAgICAgIHJldHVybiB3aWR0aEZv
ckdESUdseXBoKGdseXBoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9TaW1wbGVGb250RGF0YVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhV2luLmNwcAkocmV2aXNpb24gMTc4
ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnRE
YXRhV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogICovCiAKICNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgorI2luY2x1ZGUgIkZv
bnQuaCIKIAogI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgpA
QCAtNDMsMTcgKzQzLDE3IEBAIGNvbnN0IGZsb2F0IGNTbWFsbENhcHNGb250U2l6ZU11bHRpcGxp
ZXIKIAogc3RhdGljIGJvb2wgZ19zaG91bGRBcHBseU1hY0FzY2VudEhhY2s7CiAKLXZvaWQgU2lt
cGxlRm9udERhdGE6OnNldFNob3VsZEFwcGx5TWFjQXNjZW50SGFjayhib29sIGIpCit2b2lkIEZv
bnQ6OnNldFNob3VsZEFwcGx5TWFjQXNjZW50SGFjayhib29sIGIpCiB7CiAgICAgZ19zaG91bGRB
cHBseU1hY0FzY2VudEhhY2sgPSBiOwogfQogCi1ib29sIFNpbXBsZUZvbnREYXRhOjpzaG91bGRB
cHBseU1hY0FzY2VudEhhY2soKQorYm9vbCBGb250OjpzaG91bGRBcHBseU1hY0FzY2VudEhhY2so
KQogewogICAgIHJldHVybiBnX3Nob3VsZEFwcGx5TWFjQXNjZW50SGFjazsKIH0KIAotZmxvYXQg
U2ltcGxlRm9udERhdGE6OmFzY2VudENvbnNpZGVyaW5nTWFjQXNjZW50SGFjayhjb25zdCBXQ0hB
UiogZmFjZU5hbWUsIGZsb2F0IGFzY2VudCwgZmxvYXQgZGVzY2VudCkKK2Zsb2F0IEZvbnQ6OmFz
Y2VudENvbnNpZGVyaW5nTWFjQXNjZW50SGFjayhjb25zdCBXQ0hBUiogZmFjZU5hbWUsIGZsb2F0
IGFzY2VudCwgZmxvYXQgZGVzY2VudCkKIHsKICAgICBpZiAoIXNob3VsZEFwcGx5TWFjQXNjZW50
SGFjaygpKQogICAgICAgICByZXR1cm4gYXNjZW50OwpAQCAtNzEsNyArNzEsNyBAQCBmbG9hdCBT
aW1wbGVGb250RGF0YTo6YXNjZW50Q29uc2lkZXJpbmdNCiAgICAgcmV0dXJuIGFzY2VudDsKIH0K
IAotdm9pZCBTaW1wbGVGb250RGF0YTo6aW5pdEdESUZvbnQoKQordm9pZCBGb250Ojppbml0R0RJ
Rm9udCgpCiB7CiAgICAgaWYgKCFtX3BsYXRmb3JtRGF0YS5zaXplKCkpIHsKICAgICAgICAgbV9m
b250TWV0cmljcy5yZXNldCgpOwpAQCAtMTA2LDcgKzEwNiw3IEBAIHZvaWQgU2ltcGxlRm9udERh
dGE6OmluaXRHRElGb250KCkKICAgICBTZWxlY3RPYmplY3QoaGRjLCBvbGRGb250KTsKIH0KIAot
dm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1DaGFyV2lkdGhJbml0KCkKK3ZvaWQgRm9udDo6
cGxhdGZvcm1DaGFyV2lkdGhJbml0KCkKIHsKICAgICAvLyBHREkgRm9udHMgaW5pdCBjaGFyd2lk
dGhzIGluIGluaXRHRElGb250LgogICAgIGlmICghbV9wbGF0Zm9ybURhdGEudXNlR0RJKCkpIHsK
QEAgLTExNiwyOSArMTE2LDI5IEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQ2hhcldp
ZHRoSW4KICAgICB9CiB9CiAKLXZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtRGVzdHJveSgp
Cit2b2lkIEZvbnQ6OnBsYXRmb3JtRGVzdHJveSgpCiB7CiAgICAgU2NyaXB0RnJlZUNhY2hlKCZt
X3NjcmlwdENhY2hlKTsKICAgICBkZWxldGUgbV9zY3JpcHRGb250UHJvcGVydGllczsKIH0KIAot
UGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQ3JlYXRl
U2NhbGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZs
b2F0IHNjYWxlRmFjdG9yKSBjb25zdAorUGFzc1JlZlB0cjxGb250PiBGb250OjpwbGF0Zm9ybUNy
ZWF0ZVNjYWxlZEZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZs
b2F0IHNjYWxlRmFjdG9yKSBjb25zdAogewogICAgIGZsb2F0IHNjYWxlZFNpemUgPSBzY2FsZUZh
Y3RvciAqIG1fcGxhdGZvcm1EYXRhLnNpemUoKTsKICAgICBpZiAoaXNDdXN0b21Gb250KCkpIHsK
ICAgICAgICAgRm9udFBsYXRmb3JtRGF0YSBzY2FsZWRGb250KG1fcGxhdGZvcm1EYXRhKTsKICAg
ICAgICAgc2NhbGVkRm9udC5zZXRTaXplKHNjYWxlZFNpemUpOwotICAgICAgICByZXR1cm4gU2lt
cGxlRm9udERhdGE6OmNyZWF0ZShzY2FsZWRGb250LCB0cnVlLCBmYWxzZSk7CisgICAgICAgIHJl
dHVybiBGb250OjpjcmVhdGUoc2NhbGVkRm9udCwgdHJ1ZSwgZmFsc2UpOwogICAgIH0KIAogICAg
IExPR0ZPTlQgd2luZm9udDsKICAgICBHZXRPYmplY3QobV9wbGF0Zm9ybURhdGEuaGZvbnQoKSwg
c2l6ZW9mKExPR0ZPTlQpLCAmd2luZm9udCk7CiAgICAgd2luZm9udC5sZkhlaWdodCA9IC1scm91
bmRmKHNjYWxlZFNpemUgKiAobV9wbGF0Zm9ybURhdGEudXNlR0RJKCkgPyAxIDogMzIpKTsKICAg
ICBhdXRvIGhmb250ID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVGb250SW5kaXJlY3QoJndpbmZv
bnQpKTsKLSAgICByZXR1cm4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZShGb250UGxhdGZvcm1EYXRh
KFdURjo6bW92ZShoZm9udCksIHNjYWxlZFNpemUsIG1fcGxhdGZvcm1EYXRhLnN5bnRoZXRpY0Jv
bGQoKSwgbV9wbGF0Zm9ybURhdGEuc3ludGhldGljT2JsaXF1ZSgpLCBtX3BsYXRmb3JtRGF0YS51
c2VHREkoKSksIGlzQ3VzdG9tRm9udCgpLCBmYWxzZSk7CisgICAgcmV0dXJuIEZvbnQ6OmNyZWF0
ZShGb250UGxhdGZvcm1EYXRhKFdURjo6bW92ZShoZm9udCksIHNjYWxlZFNpemUsIG1fcGxhdGZv
cm1EYXRhLnN5bnRoZXRpY0JvbGQoKSwgbV9wbGF0Zm9ybURhdGEuc3ludGhldGljT2JsaXF1ZSgp
LCBtX3BsYXRmb3JtRGF0YS51c2VHREkoKSksIGlzQ3VzdG9tRm9udCgpLCBmYWxzZSk7CiB9CiAK
LXZvaWQgU2ltcGxlRm9udERhdGE6OmRldGVybWluZVBpdGNoKCkKK3ZvaWQgRm9udDo6ZGV0ZXJt
aW5lUGl0Y2goKQogewogICAgIGlmIChpc0N1c3RvbUZvbnQoKSkgewogICAgICAgICBtX3RyZWF0
QXNGaXhlZFBpdGNoID0gZmFsc2U7CkBAIC0xNTksNyArMTU5LDcgQEAgdm9pZCBTaW1wbGVGb250
RGF0YTo6ZGV0ZXJtaW5lUGl0Y2goKQogICAgIFJlc3RvcmVEQyhkYywgLTEpOwogfQogCi1GbG9h
dFJlY3QgU2ltcGxlRm9udERhdGE6OmJvdW5kc0ZvckdESUdseXBoKEdseXBoIGdseXBoKSBjb25z
dAorRmxvYXRSZWN0IEZvbnQ6OmJvdW5kc0ZvckdESUdseXBoKEdseXBoIGdseXBoKSBjb25zdAog
ewogICAgIEhXbmREQyBoZGMoMCk7CiAgICAgU2V0R3JhcGhpY3NNb2RlKGhkYywgR01fQURWQU5D
RUQpOwpAQCAtMTc1LDcgKzE3NSw3IEBAIEZsb2F0UmVjdCBTaW1wbGVGb250RGF0YTo6Ym91bmRz
Rm9yR0RJR2wKICAgICAgICAgZ2RpTWV0cmljcy5nbUJsYWNrQm94WCArIG1fc3ludGhldGljQm9s
ZE9mZnNldCwgZ2RpTWV0cmljcy5nbUJsYWNrQm94WSk7IAogfQogCi1mbG9hdCBTaW1wbGVGb250
RGF0YTo6d2lkdGhGb3JHRElHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKK2Zsb2F0IEZvbnQ6Ondp
ZHRoRm9yR0RJR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CiB7CiAgICAgSFduZERDIGhkYygwKTsK
ICAgICBTZXRHcmFwaGljc01vZGUoaGRjLCBHTV9BRFZBTkNFRCk7CkBAIC0xOTEsNyArMTkxLDcg
QEAgZmxvYXQgU2ltcGxlRm9udERhdGE6OndpZHRoRm9yR0RJR2x5cGgoRwogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLVNDUklQVF9GT05UUFJPUEVSVElFUyogU2ltcGxlRm9udERhdGE6OnNjcmlw
dEZvbnRQcm9wZXJ0aWVzKCkgY29uc3QKK1NDUklQVF9GT05UUFJPUEVSVElFUyogRm9udDo6c2Ny
aXB0Rm9udFByb3BlcnRpZXMoKSBjb25zdAogewogICAgIGlmICghbV9zY3JpcHRGb250UHJvcGVy
dGllcykgewogICAgICAgICBtX3NjcmlwdEZvbnRQcm9wZXJ0aWVzID0gbmV3IFNDUklQVF9GT05U
UFJPUEVSVElFUzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9V
bmlzY3JpYmVDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vVW5pc2NyaWJlQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDE3ODg1
NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9VbmlzY3JpYmVDb250
cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsOSArMjUsMTAgQEAKIAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIlVuaXNjcmliZUNvbnRyb2xsZXIuaCIKKworI2luY2x1ZGUg
IkZvbnQuaCIKICNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkhXbmREQy5oIgot
I2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5jbHVkZSAiVGV4dFJ1bi5oIgogI2luY2x1
ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKQEAgLTQxLDcgKzQyLDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogLy8gdGhhdCBkb2VzIHN0dWZmIGluIHRoYXQgbWV0aG9kIGluc3RlYWQgb2YgZG9pbmcg
ZXZlcnl0aGluZyBpbiB0aGUgY29uc3RydWN0b3IuICBIYXZlIGFkdmFuY2UoKQogLy8gdGFrZSB0
aGUgR2x5cGhCdWZmZXIgYXMgYW4gYXJnIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBwb3B1bGF0
ZSB0aGUgZ2x5cGggYnVmZmVyIHdoZW4KIC8vIG1lYXN1cmluZy4KLVVuaXNjcmliZUNvbnRyb2xs
ZXI6OlVuaXNjcmliZUNvbnRyb2xsZXIoY29uc3QgRm9udENhc2NhZGUqIGZvbnQsIGNvbnN0IFRl
eHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRz
KQorVW5pc2NyaWJlQ29udHJvbGxlcjo6VW5pc2NyaWJlQ29udHJvbGxlcihjb25zdCBGb250Q2Fz
Y2FkZSogZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFs
bGJhY2tGb250cykKICAgICA6IG1fZm9udCgqZm9udCkKICAgICAsIG1fcnVuKHJ1bikKICAgICAs
IG1fZmFsbGJhY2tGb250cyhmYWxsYmFja0ZvbnRzKQpAQCAtMTM2LDggKzEzNyw4IEBAIHZvaWQg
VW5pc2NyaWJlQ29udHJvbGxlcjo6YWR2YW5jZSh1bnNpZ24KICAgICBjb25zdCBVQ2hhciogY3Vy
ciA9IG1fcnVuLnJ0bCgpID8gY3AgKyBsZW5ndGggIC0gMSA6IGNwOwogICAgIGNvbnN0IFVDaGFy
KiBlbmQgPSBtX3J1bi5ydGwoKSA/IGNwIC0gMSA6IGNwICsgbGVuZ3RoOwogCi0gICAgY29uc3Qg
U2ltcGxlRm9udERhdGEqIGZvbnREYXRhOwotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBuZXh0
Rm9udERhdGEgPSBtX2ZvbnQuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKCpjdXJyLCBmYWxzZSkuZm9u
dERhdGE7CisgICAgY29uc3QgRm9udCogZm9udERhdGE7CisgICAgY29uc3QgRm9udCogbmV4dEZv
bnREYXRhID0gbV9mb250LmdseXBoRGF0YUZvckNoYXJhY3RlcigqY3VyciwgZmFsc2UpLmZvbnQ7
CiAKICAgICBVQ2hhciBuZXdDID0gMDsKIApAQCAtMTU4LDE0ICsxNTksMTQgQEAgdm9pZCBVbmlz
Y3JpYmVDb250cm9sbGVyOjphZHZhbmNlKHVuc2lnbgogICAgICAgICBVQ2hhciBjID0gKmN1cnI7
CiAKICAgICAgICAgYm9vbCBmb3JjZVNtYWxsQ2FwcyA9IGlzU21hbGxDYXBzICYmIChVX0dFVF9H
Q19NQVNLKGMpICYgVV9HQ19NX01BU0spOwotICAgICAgICBuZXh0Rm9udERhdGEgPSBtX2ZvbnQu
Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKCpjdXJyLCBmYWxzZSwgZm9yY2VTbWFsbENhcHMgPyBTbWFs
bENhcHNWYXJpYW50IDogQXV0b1ZhcmlhbnQpLmZvbnREYXRhOworICAgICAgICBuZXh0Rm9udERh
dGEgPSBtX2ZvbnQuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKCpjdXJyLCBmYWxzZSwgZm9yY2VTbWFs
bENhcHMgPyBTbWFsbENhcHNWYXJpYW50IDogQXV0b1ZhcmlhbnQpLmZvbnQ7CiAgICAgICAgIGlm
IChtX2ZvbnQuaXNTbWFsbENhcHMoKSkgewogICAgICAgICAgICAgbmV4dElzU21hbGxDYXBzID0g
Zm9yY2VTbWFsbENhcHMgfHwgKG5ld0MgPSB1X3RvdXBwZXIoYykpICE9IGM7CiAgICAgICAgICAg
ICBpZiAobmV4dElzU21hbGxDYXBzKQogICAgICAgICAgICAgICAgIHNtYWxsQ2Fwc0J1ZmZlcltp
bmRleF0gPSBmb3JjZVNtYWxsQ2FwcyA/IGMgOiBuZXdDOwogICAgICAgICB9CiAKLSAgICAgICAg
aWYgKG1fZmFsbGJhY2tGb250cyAmJiBmb250RGF0YSAmJiBuZXh0Rm9udERhdGEgIT0gZm9udERh
dGEgJiYgZm9udERhdGEgIT0gJm1fZm9udC5wcmltYXJ5Rm9udERhdGEoKSkKKyAgICAgICAgaWYg
KG1fZmFsbGJhY2tGb250cyAmJiBmb250RGF0YSAmJiBuZXh0Rm9udERhdGEgIT0gZm9udERhdGEg
JiYgZm9udERhdGEgIT0gJm1fZm9udC5wcmltYXJ5Rm9udCgpKQogICAgICAgICAgICAgbV9mYWxs
YmFja0ZvbnRzLT5hZGQoZm9udERhdGEpOwogCiAgICAgICAgIGlmIChuZXh0Rm9udERhdGEgIT0g
Zm9udERhdGEgfHwgbmV4dElzU21hbGxDYXBzICE9IGlzU21hbGxDYXBzKSB7CkBAIC0xNzksNyAr
MTgwLDcgQEAgdm9pZCBVbmlzY3JpYmVDb250cm9sbGVyOjphZHZhbmNlKHVuc2lnbgogICAgIAog
ICAgIGludCBpdGVtTGVuZ3RoID0gbV9ydW4ucnRsKCkgPyBpbmRleE9mRm9udFRyYW5zaXRpb24g
KyAxIDogbGVuZ3RoIC0gaW5kZXhPZkZvbnRUcmFuc2l0aW9uOwogICAgIGlmIChpdGVtTGVuZ3Ro
KSB7Ci0gICAgICAgIGlmIChtX2ZhbGxiYWNrRm9udHMgJiYgbmV4dEZvbnREYXRhICYmIG5leHRG
b250RGF0YSAhPSAmbV9mb250LnByaW1hcnlGb250RGF0YSgpKQorICAgICAgICBpZiAobV9mYWxs
YmFja0ZvbnRzICYmIG5leHRGb250RGF0YSAmJiBuZXh0Rm9udERhdGEgIT0gJm1fZm9udC5wcmlt
YXJ5Rm9udCgpKQogICAgICAgICAgICAgbV9mYWxsYmFja0ZvbnRzLT5hZGQobmV4dEZvbnREYXRh
KTsKIAogICAgICAgICBpbnQgaXRlbVN0YXJ0ID0gbV9ydW4ucnRsKCkgPyAwIDogaW5kZXhPZkZv
bnRUcmFuc2l0aW9uOwpAQCAtMTkwLDcgKzE5MSw3IEBAIHZvaWQgVW5pc2NyaWJlQ29udHJvbGxl
cjo6YWR2YW5jZSh1bnNpZ24KICAgICBtX2N1cnJlbnRDaGFyYWN0ZXIgPSBiYXNlQ2hhcmFjdGVy
ICsgbGVuZ3RoOwogfQogCi12b2lkIFVuaXNjcmliZUNvbnRyb2xsZXI6Oml0ZW1pemVTaGFwZUFu
ZFBsYWNlKGNvbnN0IFVDaGFyKiBjcCwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTaW1wbGVGb250
RGF0YSogZm9udERhdGEsIEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZlcikKK3ZvaWQgVW5pc2NyaWJl
Q29udHJvbGxlcjo6aXRlbWl6ZVNoYXBlQW5kUGxhY2UoY29uc3QgVUNoYXIqIGNwLCB1bnNpZ25l
ZCBsZW5ndGgsIGNvbnN0IEZvbnQqIGZvbnREYXRhLCBHbHlwaEJ1ZmZlciogZ2x5cGhCdWZmZXIp
CiB7CiAgICAgLy8gU2NyaXB0SXRlbWl6ZSAoaW4gV2luZG93cyBYUCB2ZXJzaW9ucyBwcmlvciB0
byBTUDIpIGNhbiBvdmVyZmxvdyBieSAxLiAgVGhpcyBpcyB3aHkgdGhlcmUgaXMgYW4gZXh0cmEg
ZW1wdHkgaXRlbQogICAgIC8vIGhhbmdpbmcgb3V0IGF0IHRoZSBlbmQgb2YgdGhlIGFycmF5CkBA
IC0yMzIsNyArMjMzLDcgQEAgdm9pZCBVbmlzY3JpYmVDb250cm9sbGVyOjpyZXNldENvbnRyb2xB
bgogICAgIG1fc3RhdGUuZk92ZXJyaWRlRGlyZWN0aW9uID0gbV9ydW4uZGlyZWN0aW9uYWxPdmVy
cmlkZSgpOwogfQogCi1ib29sIFVuaXNjcmliZUNvbnRyb2xsZXI6OnNoYXBlQW5kUGxhY2VJdGVt
KGNvbnN0IFVDaGFyKiBjcCwgdW5zaWduZWQgaSwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnRE
YXRhLCBHbHlwaEJ1ZmZlciogZ2x5cGhCdWZmZXIpCitib29sIFVuaXNjcmliZUNvbnRyb2xsZXI6
OnNoYXBlQW5kUGxhY2VJdGVtKGNvbnN0IFVDaGFyKiBjcCwgdW5zaWduZWQgaSwgY29uc3QgRm9u
dCogZm9udERhdGEsIEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZlcikKIHsKICAgICAvLyBEZXRlcm1p
bmUgdGhlIHN0cmluZyBmb3IgdGhpcyBpdGVtLgogICAgIGNvbnN0IFVDaGFyKiBzdHIgPSBjcCAr
IG1faXRlbXNbaV0uaUNoYXJQb3M7CkBAIC00MDQsNyArNDA1LDcgQEAgYm9vbCBVbmlzY3JpYmVD
b250cm9sbGVyOjpzaGFwZUFuZFBsYWNlSQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFVu
aXNjcmliZUNvbnRyb2xsZXI6OnNoYXBlKGNvbnN0IFVDaGFyKiBzdHIsIGludCBsZW4sIFNDUklQ
VF9JVEVNIGl0ZW0sIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwKK2Jvb2wgVW5pc2Ny
aWJlQ29udHJvbGxlcjo6c2hhcGUoY29uc3QgVUNoYXIqIHN0ciwgaW50IGxlbiwgU0NSSVBUX0lU
RU0gaXRlbSwgY29uc3QgRm9udCogZm9udERhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFZlY3RvcjxXT1JEPiYgZ2x5cGhzLCBWZWN0b3I8V09SRD4mIGNsdXN0ZXJzLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8U0NSSVBUX1ZJU0FUVFI+JiB2aXN1
YWxBdHRyaWJ1dGVzKQogewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL1VuaXNjcmliZUNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vVW5pc2NyaWJlQ29udHJvbGxlci5oCShyZXZpc2lvbiAxNzg4
NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVW5pc2NyaWJlQ29u
dHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogY2xhc3MgVW5pc2NyaWJlQ29udHJvbGxlciB7CiBwdWJsaWM6Ci0gICAgVW5pc2Ny
aWJlQ29udHJvbGxlcihjb25zdCBGb250Q2FzY2FkZSosIGNvbnN0IFRleHRSdW4mLCBIYXNoU2V0
PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwKTsKKyAgICBVbmlzY3Jp
YmVDb250cm9sbGVyKGNvbnN0IEZvbnRDYXNjYWRlKiwgY29uc3QgVGV4dFJ1biYsIEhhc2hTZXQ8
Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzID0gMCk7CiAKICAgICAvLyBBZHZhbmNlIGFuZCBt
ZWFzdXJlL3BsYWNlIHVwIHRvIHRoZSBzcGVjaWZpZWQgY2hhcmFjdGVyLgogICAgIHZvaWQgYWR2
YW5jZSh1bnNpZ25lZCB0bywgR2x5cGhCdWZmZXIqID0gMCk7CkBAIC01NCwxNSArNTQsMTUgQEAg
cHVibGljOgogcHJpdmF0ZTogICAgCiAgICAgdm9pZCByZXNldENvbnRyb2xBbmRTdGF0ZSgpOwog
Ci0gICAgdm9pZCBpdGVtaXplU2hhcGVBbmRQbGFjZShjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxl
bmd0aCwgY29uc3QgU2ltcGxlRm9udERhdGEqLCBHbHlwaEJ1ZmZlciopOwotICAgIGJvb2wgc2hh
cGVBbmRQbGFjZUl0ZW0oY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBpbmRleCwgY29uc3QgU2ltcGxl
Rm9udERhdGEqLCBHbHlwaEJ1ZmZlciopOwotICAgIGJvb2wgc2hhcGUoY29uc3QgVUNoYXIqIHN0
ciwgaW50IGxlbiwgU0NSSVBUX0lURU0gaXRlbSwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnRE
YXRhLAorICAgIHZvaWQgaXRlbWl6ZVNoYXBlQW5kUGxhY2UoY29uc3QgVUNoYXIqLCB1bnNpZ25l
ZCBsZW5ndGgsIGNvbnN0IEZvbnQqLCBHbHlwaEJ1ZmZlciopOworICAgIGJvb2wgc2hhcGVBbmRQ
bGFjZUl0ZW0oY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBpbmRleCwgY29uc3QgRm9udCosIEdseXBo
QnVmZmVyKik7CisgICAgYm9vbCBzaGFwZShjb25zdCBVQ2hhciogc3RyLCBpbnQgbGVuLCBTQ1JJ
UFRfSVRFTSwgY29uc3QgRm9udCosCiAgICAgICAgICAgICAgICBWZWN0b3I8V09SRD4mIGdseXBo
cywgVmVjdG9yPFdPUkQ+JiBjbHVzdGVycywKICAgICAgICAgICAgICAgIFZlY3RvcjxTQ1JJUFRf
VklTQVRUUj4mIHZpc3VhbEF0dHJpYnV0ZXMpOwogCiAgICAgY29uc3QgRm9udENhc2NhZGUmIG1f
Zm9udDsKICAgICBjb25zdCBUZXh0UnVuJiBtX3J1bjsKLSAgICBIYXNoU2V0PGNvbnN0IFNpbXBs
ZUZvbnREYXRhKj4qIG1fZmFsbGJhY2tGb250czsKKyAgICBIYXNoU2V0PGNvbnN0IEZvbnQqPiog
bV9mYWxsYmFja0ZvbnRzOwogICAgIEZsb2F0UG9pbnQgbV9nbHlwaE9yaWdpbjsKICAgICBmbG9h
dCBtX21pbkdseXBoQm91bmRpbmdCb3hYOwogICAgIGZsb2F0IG1fbWF4R2x5cGhCb3VuZGluZ0Jv
eFg7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmNw
cAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVw
TWVudVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJC
aXRtYXBJbmZvLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJGbG9hdFJlY3Qu
aCIKKyNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9udFNlbGVjdG9yLmgiCiAjaW5jbHVk
ZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKQEAgLTQyLDcgKzQzLDYgQEAKICNp
bmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCiAjaW5jbHVkZSAi
U2Nyb2xsYmFyVGhlbWUuaCIKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgogI2luY2x1ZGUg
IlRleHRSdW4uaCIKICNpbmNsdWRlICJXZWJDb3JlSW5zdGFuY2VIYW5kbGUuaCIKICNpbmNsdWRl
IDx3dGYvV2luZG93c0V4dHJhcy5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lu
bGluZUZsb3dCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9J
bmxpbmVGbG93Qm94LmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDksNyArNDQ5LDcg
QEAgYm9vbCBJbmxpbmVGbG93Qm94OjpyZXF1aXJlc0lkZW9ncmFwaGljQgogCiAgICAgY29uc3Qg
UmVuZGVyU3R5bGUmIGxpbmVTdHlsZSA9IHRoaXMtPmxpbmVTdHlsZSgpOwogICAgIGlmIChsaW5l
U3R5bGUuZm9udERlc2NyaXB0aW9uKCkubm9uQ0pLR2x5cGhPcmllbnRhdGlvbigpID09IE5vbkNK
S0dseXBoT3JpZW50YXRpb25VcHJpZ2h0Ci0gICAgICAgIHx8IGxpbmVTdHlsZS5mb250Q2FzY2Fk
ZSgpLnByaW1hcnlGb250RGF0YSgpLmhhc1ZlcnRpY2FsR2x5cGhzKCkpCisgICAgICAgIHx8IGxp
bmVTdHlsZS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCkuaGFzVmVydGljYWxHbHlwaHMoKSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBmb3IgKElubGluZUJveCogY2hpbGQgPSBmaXJz
dENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0T25MaW5lKCkpIHsKQEAgLTQ2MCwx
OCArNDYwLDE4IEBAIGJvb2wgSW5saW5lRmxvd0JveDo6cmVxdWlyZXNJZGVvZ3JhcGhpY0IKICAg
ICAgICAgICAgIGlmIChkb3duY2FzdDxJbmxpbmVGbG93Qm94PigqY2hpbGQpLnJlcXVpcmVzSWRl
b2dyYXBoaWNCYXNlbGluZSh0ZXh0Qm94RGF0YU1hcCkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoY2hpbGQtPmxpbmVTdHls
ZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkuaGFzVmVydGljYWxHbHlwaHMoKSkK
KyAgICAgICAgICAgIGlmIChjaGlsZC0+bGluZVN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5
Rm9udCgpLmhhc1ZlcnRpY2FsR2x5cGhzKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNvbnN0IFZlY3Rvcjxjb25zdCBTaW1wbGVGb250
RGF0YSo+KiB1c2VkRm9udHMgPSBudWxscHRyOworICAgICAgICAgICAgY29uc3QgVmVjdG9yPGNv
bnN0IEZvbnQqPiogdXNlZEZvbnRzID0gbnVsbHB0cjsKICAgICAgICAgICAgIGlmIChpczxJbmxp
bmVUZXh0Qm94PigqY2hpbGQpKSB7CiAgICAgICAgICAgICAgICAgR2x5cGhPdmVyZmxvd0FuZEZh
bGxiYWNrRm9udHNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGV4dEJveERhdGFNYXAuZmluZChk
b3duY2FzdDxJbmxpbmVUZXh0Qm94PihjaGlsZCkpOwogICAgICAgICAgICAgICAgIHVzZWRGb250
cyA9IGl0ID09IHRleHRCb3hEYXRhTWFwLmVuZCgpID8gbnVsbHB0ciA6ICZpdC0+dmFsdWUuZmly
c3Q7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICh1c2VkRm9udHMpIHsKLSAgICAg
ICAgICAgICAgICBmb3IgKGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSA6ICp1c2VkRm9u
dHMpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGZvbnREYXRhLT5oYXNWZXJ0aWNhbEdseXBo
cygpKQorICAgICAgICAgICAgICAgIGZvciAoY29uc3QgRm9udCogZm9udCA6ICp1c2VkRm9udHMp
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGZvbnQtPmhhc1ZlcnRpY2FsR2x5cGhzKCkpCiAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0Jv
eC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94
LmgJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVG
bG93Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDEyICszMSwxMiBAQCBjbGFzcyBIaXRUZXN0
UmVxdWVzdDsKIGNsYXNzIEhpdFRlc3RSZXN1bHQ7CiBjbGFzcyBJbmxpbmVUZXh0Qm94OwogY2xh
c3MgUmVuZGVyTGluZUJveExpc3Q7Ci1jbGFzcyBTaW1wbGVGb250RGF0YTsKK2NsYXNzIEZvbnQ7
CiBjbGFzcyBWZXJ0aWNhbFBvc2l0aW9uQ2FjaGU7CiAKIHN0cnVjdCBHbHlwaE92ZXJmbG93Owog
Ci10eXBlZGVmIEhhc2hNYXA8Y29uc3QgSW5saW5lVGV4dEJveCosIHN0ZDo6cGFpcjxWZWN0b3I8
Y29uc3QgU2ltcGxlRm9udERhdGEqPiwgR2x5cGhPdmVyZmxvdz4+IEdseXBoT3ZlcmZsb3dBbmRG
YWxsYmFja0ZvbnRzTWFwOwordHlwZWRlZiBIYXNoTWFwPGNvbnN0IElubGluZVRleHRCb3gqLCBz
dGQ6OnBhaXI8VmVjdG9yPGNvbnN0IEZvbnQqPiwgR2x5cGhPdmVyZmxvdz4+IEdseXBoT3ZlcmZs
b3dBbmRGYWxsYmFja0ZvbnRzTWFwOwogCiBjbGFzcyBJbmxpbmVGbG93Qm94IDogcHVibGljIElu
bGluZUJveCB7CiBwdWJsaWM6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5l
VGV4dEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGlu
ZVRleHRCb3guY3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSW5saW5lVGV4dEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzODEsNyArMTM4MSw3IEBA
IFRleHRSdW4gSW5saW5lVGV4dEJveDo6Y29uc3RydWN0VGV4dFJ1bigKIAogICAgIFRleHRSdW4g
cnVuKHN0cmluZywgdGV4dFBvcygpLCBleHBhbnNpb24oKSwgZXhwYW5zaW9uQmVoYXZpb3IoKSwg
ZGlyZWN0aW9uKCksIGRpck92ZXJyaWRlKCkgfHwgc3R5bGUucnRsT3JkZXJpbmcoKSA9PSBWaXN1
YWxPcmRlciwgIXJlbmRlcmVyKCkuY2FuVXNlU2ltcGxlRm9udENvZGVQYXRoKCkpOwogICAgIHJ1
bi5zZXRUYWJTaXplKCFzdHlsZS5jb2xsYXBzZVdoaXRlU3BhY2UoKSwgc3R5bGUudGFiU2l6ZSgp
KTsKLSAgICBpZiAoZm9udC5wcmltYXJ5Rm9udERhdGEoKS5pc1NWR0ZvbnQoKSkKKyAgICBpZiAo
Zm9udC5wcmltYXJ5Rm9udCgpLmlzU1ZHRm9udCgpKQogICAgICAgICBydW4uc2V0UmVuZGVyaW5n
Q29udGV4dChTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlKHJlbmRlcmVyKCkpKTsK
IAogICAgIC8vIFByb3BhZ2F0ZSB0aGUgbWF4aW11bSBsZW5ndGggb2YgdGhlIGNoYXJhY3RlcnMg
YnVmZmVyIHRvIHRoZSBUZXh0UnVuLCBldmVuIHdoZW4gd2UncmUgb25seSBwcm9jZXNzaW5nIGEg
c3Vic3RyaW5nLgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3Bw
CShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzI1LDcgKzIzMjUsNyBAQCBMYXlvdXRVbml0IFJl
bmRlckJsb2NrOjphZGp1c3RMb2dpY2FsTGVmCiAgICAgICAgIHJldHVybiBsZWZ0OwogCiAgICAg
Ly8gRklYTUU6IFNob3VsZCBsZXR0ZXItc3BhY2luZyBhcHBseT8gVGhpcyBpcyBjb21wbGljYXRl
ZCBzaW5jZSBpdCBkb2Vzbid0IGFwcGx5IGF0IHRoZSBlZGdlPwotICAgIGZsb2F0IG1heENoYXJX
aWR0aCA9IGxpbmVHcmlkLT5zdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCku
bWF4Q2hhcldpZHRoKCk7CisgICAgZmxvYXQgbWF4Q2hhcldpZHRoID0gbGluZUdyaWQtPnN0eWxl
KCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpLm1heENoYXJXaWR0aCgpOwogICAgIGlmICgh
bWF4Q2hhcldpZHRoKQogICAgICAgICByZXR1cm4gbGVmdDsKIApAQCAtMjM2NSw3ICsyMzY1LDcg
QEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6YWRqdXN0TG9naWNhbFJpZwogICAgICAgICByZXR1
cm4gcmlnaHQ7CiAKICAgICAvLyBGSVhNRTogU2hvdWxkIGxldHRlci1zcGFjaW5nIGFwcGx5PyBU
aGlzIGlzIGNvbXBsaWNhdGVkIHNpbmNlIGl0IGRvZXNuJ3QgYXBwbHkgYXQgdGhlIGVkZ2U/Ci0g
ICAgZmxvYXQgbWF4Q2hhcldpZHRoID0gbGluZUdyaWQtPnN0eWxlKCkuZm9udENhc2NhZGUoKS5w
cmltYXJ5Rm9udERhdGEoKS5tYXhDaGFyV2lkdGgoKTsKKyAgICBmbG9hdCBtYXhDaGFyV2lkdGgg
PSBsaW5lR3JpZC0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCkubWF4Q2hhcldp
ZHRoKCk7CiAgICAgaWYgKCFtYXhDaGFyV2lkdGgpCiAgICAgICAgIHJldHVybiByaWdodDsKIApA
QCAtMzcwNSw3ICszNzA1LDcgQEAgc3RhdGljIGlubGluZSBUZXh0UnVuIGNvbnN0cnVjdFRleHRS
dW5JbgogICAgIGJvb2wgZGlyZWN0aW9uYWxPdmVycmlkZSA9IHN0eWxlLnJ0bE9yZGVyaW5nKCkg
PT0gVmlzdWFsT3JkZXI7CiAKICAgICBUZXh0UnVuIHJ1bihjaGFyYWN0ZXJzLCBsZW5ndGgsIDAs
IDAsIGV4cGFuc2lvbiwgdGV4dERpcmVjdGlvbiwgZGlyZWN0aW9uYWxPdmVycmlkZSk7Ci0gICAg
aWYgKGZvbnQucHJpbWFyeUZvbnREYXRhKCkuaXNTVkdGb250KCkpIHsKKyAgICBpZiAoZm9udC5w
cmltYXJ5Rm9udCgpLmlzU1ZHRm9udCgpKSB7CiAgICAgICAgIEFTU0VSVChjb250ZXh0KTsgLy8g
RklYTUU6IFRocmVhZCBhIFJlbmRlck9iamVjdCYgdG8gdGhpcyBwb2ludCBzbyB3ZSBkb24ndCBo
YXZlIHRvIGRlcmVmZXJlbmNlIGFueXRoaW5nLgogICAgICAgICBydW4uc2V0UmVuZGVyaW5nQ29u
dGV4dChTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlKCpjb250ZXh0KSk7CiAgICAg
fQpAQCAtMzcyNSw3ICszNzI1LDcgQEAgc3RhdGljIGlubGluZSBUZXh0UnVuIGNvbnN0cnVjdFRl
eHRSdW5JbgogICAgICAgICAgICAgZGlyZWN0aW9uYWxPdmVycmlkZSB8PSBpc092ZXJyaWRlKHN0
eWxlLnVuaWNvZGVCaWRpKCkpOwogICAgIH0KICAgICBUZXh0UnVuIHJ1bihjaGFyYWN0ZXJzLCBs
ZW5ndGgsIDAsIDAsIGV4cGFuc2lvbiwgdGV4dERpcmVjdGlvbiwgZGlyZWN0aW9uYWxPdmVycmlk
ZSk7Ci0gICAgaWYgKGZvbnQucHJpbWFyeUZvbnREYXRhKCkuaXNTVkdGb250KCkpIHsKKyAgICBp
ZiAoZm9udC5wcmltYXJ5Rm9udCgpLmlzU1ZHRm9udCgpKSB7CiAgICAgICAgIEFTU0VSVChjb250
ZXh0KTsgLy8gRklYTUU6IFRocmVhZCBhIFJlbmRlck9iamVjdCYgdG8gdGhpcyBwb2ludCBzbyB3
ZSBkb24ndCBoYXZlIHRvIGRlcmVmZXJlbmNlIGFueXRoaW5nLgogICAgICAgICBydW4uc2V0UmVu
ZGVyaW5nQ29udGV4dChTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlKCpjb250ZXh0
KSk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGlu
ZUxheW91dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrTGluZUxheW91dC5jcHAJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NTgsNyArNDU4LDcgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OnNldE1hcmdpbnNGb3JSdWJ5Ugog
c3RhdGljIGlubGluZSB2b2lkIHNldExvZ2ljYWxXaWR0aEZvclRleHRSdW4oUm9vdElubGluZUJv
eCogbGluZUJveCwgQmlkaVJ1biogcnVuLCBSZW5kZXJUZXh0KiByZW5kZXJlciwgZmxvYXQgeFBv
cywgY29uc3QgTGluZUluZm8mIGxpbmVJbmZvLAogICAgIEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFj
a0ZvbnRzTWFwJiB0ZXh0Qm94RGF0YU1hcCwgVmVydGljYWxQb3NpdGlvbkNhY2hlJiB2ZXJ0aWNh
bFBvc2l0aW9uQ2FjaGUsIFdvcmRNZWFzdXJlbWVudHMmIHdvcmRNZWFzdXJlbWVudHMpCiB7Ci0g
ICAgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+IGZhbGxiYWNrRm9udHM7CisgICAgSGFz
aFNldDxjb25zdCBGb250Kj4gZmFsbGJhY2tGb250czsKICAgICBHbHlwaE92ZXJmbG93IGdseXBo
T3ZlcmZsb3c7CiAKICAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IGxpbmVTdHlsZSgqcmVu
ZGVyZXItPnBhcmVudCgpLCBsaW5lSW5mbykuZm9udENhc2NhZGUoKTsKQEAgLTUwOSw4ICs1MDks
OCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0TG9naWNhbFdpZHRoRm9yVGV4CiAgICAgICAgICAg
ICB9IGVsc2UKICAgICAgICAgICAgICAgICBtZWFzdXJlZFdpZHRoICs9IHdvcmRNZWFzdXJlbWVu
dC53aWR0aDsKICAgICAgICAgICAgIGlmICghd29yZE1lYXN1cmVtZW50LmZhbGxiYWNrRm9udHMu
aXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0
YSo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSB3b3JkTWVhc3VyZW1lbnQuZmFsbGJhY2tGb250cy5l
bmQoKTsKLSAgICAgICAgICAgICAgICBmb3IgKEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEq
Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSB3b3JkTWVhc3VyZW1lbnQuZmFsbGJhY2tGb250cy5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICAgICAgSGFzaFNldDxjb25zdCBGb250
Kj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHdvcmRNZWFzdXJlbWVudC5mYWxsYmFja0ZvbnRzLmVu
ZCgpOworICAgICAgICAgICAgICAgIGZvciAoSGFzaFNldDxjb25zdCBGb250Kj46OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gd29yZE1lYXN1cmVtZW50LmZhbGxiYWNrRm9udHMuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KQogICAgICAgICAgICAgICAgICAgICBmYWxsYmFja0ZvbnRzLmFkZCgqaXQpOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC01MjcsNyArNTI3LDcgQEAgc3RhdGljIGlubGlu
ZSB2b2lkIHNldExvZ2ljYWxXaWR0aEZvclRleAogICAgIHJ1bi0+Ym94KCktPnNldExvZ2ljYWxX
aWR0aChtZWFzdXJlZFdpZHRoICsgaHlwaGVuV2lkdGgpOwogICAgIGlmICghZmFsbGJhY2tGb250
cy5pc0VtcHR5KCkpIHsKICAgICAgICAgQVNTRVJUKHJ1bi0+Ym94KCktPmJlaGF2ZXNMaWtlVGV4
dCgpKTsKLSAgICAgICAgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXA6Oml0ZXJhdG9y
IGl0ID0gdGV4dEJveERhdGFNYXAuYWRkKGRvd25jYXN0PElubGluZVRleHRCb3g+KHJ1bi0+Ym94
KCkpLCBzdGQ6Om1ha2VfcGFpcihWZWN0b3I8Y29uc3QgU2ltcGxlRm9udERhdGEqPigpLCBHbHlw
aE92ZXJmbG93KCkpKS5pdGVyYXRvcjsKKyAgICAgICAgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNr
Rm9udHNNYXA6Oml0ZXJhdG9yIGl0ID0gdGV4dEJveERhdGFNYXAuYWRkKGRvd25jYXN0PElubGlu
ZVRleHRCb3g+KHJ1bi0+Ym94KCkpLCBzdGQ6Om1ha2VfcGFpcihWZWN0b3I8Y29uc3QgRm9udCo+
KCksIEdseXBoT3ZlcmZsb3coKSkpLml0ZXJhdG9yOwogICAgICAgICBBU1NFUlQoaXQtPnZhbHVl
LmZpcnN0LmlzRW1wdHkoKSk7CiAgICAgICAgIGNvcHlUb1ZlY3RvcihmYWxsYmFja0ZvbnRzLCBp
dC0+dmFsdWUuZmlyc3QpOwogICAgICAgICBydW4tPmJveCgpLT5wYXJlbnQoKS0+Y2xlYXJEZXNj
ZW5kYW50c0hhdmVTYW1lTGluZUhlaWdodEFuZEJhc2VsaW5lKCk7CkBAIC01MzksNyArNTM5LDcg
QEAgc3RhdGljIGlubGluZSB2b2lkIHNldExvZ2ljYWxXaWR0aEZvclRleAogCiAgICAgaWYgKCFn
bHlwaE92ZXJmbG93LmlzRW1wdHkoKSkgewogICAgICAgICBBU1NFUlQocnVuLT5ib3goKS0+YmVo
YXZlc0xpa2VUZXh0KCkpOwotICAgICAgICBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01h
cDo6aXRlcmF0b3IgaXQgPSB0ZXh0Qm94RGF0YU1hcC5hZGQoZG93bmNhc3Q8SW5saW5lVGV4dEJv
eD4ocnVuLT5ib3goKSksIHN0ZDo6bWFrZV9wYWlyKFZlY3Rvcjxjb25zdCBTaW1wbGVGb250RGF0
YSo+KCksIEdseXBoT3ZlcmZsb3coKSkpLml0ZXJhdG9yOworICAgICAgICBHbHlwaE92ZXJmbG93
QW5kRmFsbGJhY2tGb250c01hcDo6aXRlcmF0b3IgaXQgPSB0ZXh0Qm94RGF0YU1hcC5hZGQoZG93
bmNhc3Q8SW5saW5lVGV4dEJveD4ocnVuLT5ib3goKSksIHN0ZDo6bWFrZV9wYWlyKFZlY3Rvcjxj
b25zdCBGb250Kj4oKSwgR2x5cGhPdmVyZmxvdygpKSkuaXRlcmF0b3I7CiAgICAgICAgIGl0LT52
YWx1ZS5zZWNvbmQgPSBnbHlwaE92ZXJmbG93OwogICAgICAgICBydW4tPmJveCgpLT5jbGVhcktu
b3duVG9IYXZlTm9PdmVyZmxvdygpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJDb21iaW5lVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0LmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTcsNyArNTcsNyBAQCB2b2lkIFJlbmRlckNvbWJpbmVUZXh0OjpzZXRSZW5kZXJlZFRl
eHQoCiAgICAgbV9uZWVkc0ZvbnRVcGRhdGUgPSB0cnVlOwogfQogCi1mbG9hdCBSZW5kZXJDb21i
aW5lVGV4dDo6d2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBGb250
Q2FzY2FkZSYgZm9udCwgZmxvYXQgeFBvc2l0aW9uLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnRE
YXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0
CitmbG9hdCBSZW5kZXJDb21iaW5lVGV4dDo6d2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQg
bGVuZ3RoLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgZmxvYXQgeFBvc2l0aW9uLCBIYXNoU2V0
PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxv
dykgY29uc3QKIHsKICAgICBpZiAobV9pc0NvbWJpbmVkKQogICAgICAgICByZXR1cm4gZm9udC5z
aXplKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRl
eHQuaAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckNvbWJpbmVUZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIG5vZGUoKSBjb25zdCA9IGRlbGV0ZTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0Nv
bWJpbmVUZXh0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwg
ZmxvYXQgd2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBGb250Q2Fz
Y2FkZSYsIGZsb2F0IHhQb3NpdGlvbiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBm
YWxsYmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdCBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIGZsb2F0IHdpZHRoKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbmd0aCwgY29u
c3QgRm9udENhc2NhZGUmLCBmbG9hdCB4UG9zaXRpb24sIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBm
YWxsYmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdCBvdmVycmlkZTsKICAg
ICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biAiUmVuZGVyQ29tYmluZVRleHQiOyB9CiAgICAgdmlydHVhbCB2b2lkIHN0eWxlRGlkQ2hhbmdl
KFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKSBvdmVycmlkZTsK
ICAgICB2aXJ0dWFsIHZvaWQgc2V0UmVuZGVyZWRUZXh0KGNvbnN0IFN0cmluZyYpIG92ZXJyaWRl
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNlYXJjaEZpZWxkLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQu
Y3BwCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
U2VhcmNoRmllbGQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVk
ZSAiQ1NTRm9udFNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgogI2lu
Y2x1ZGUgIkNocm9tZS5oIgorI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgog
I2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCkBAIC00
Miw3ICs0Myw2IEBACiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNlYXJjaFBv
cHVwTWVudS5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiU2ltcGxlRm9udERh
dGEuaCIKICNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiVGV4dENvbnRyb2xJ
bm5lckVsZW1lbnRzLmgiCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4
dC5jcHAJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUxLDcgKzQ1MSw3IEBAIExheW91dFJlY3Qg
UmVuZGVyVGV4dDo6bG9jYWxDYXJldFJlY3QoSW4KICAgICByZXR1cm4gYm94LnJvb3QoKS5jb21w
dXRlQ2FyZXRSZWN0KGxlZnQsIGNhcmV0V2lkdGgsIGV4dHJhV2lkdGhUb0VuZE9mTGluZSk7CiB9
CiAKLUFMV0FZU19JTkxJTkUgZmxvYXQgUmVuZGVyVGV4dDo6d2lkdGhGcm9tQ2FjaGUoY29uc3Qg
Rm9udENhc2NhZGUmIGYsIGludCBzdGFydCwgaW50IGxlbiwgZmxvYXQgeFBvcywgSGFzaFNldDxj
b25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlw
aE92ZXJmbG93LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CitBTFdBWVNfSU5MSU5F
IGZsb2F0IFJlbmRlclRleHQ6OndpZHRoRnJvbUNhY2hlKGNvbnN0IEZvbnRDYXNjYWRlJiBmLCBp
bnQgc3RhcnQsIGludCBsZW4sIGZsb2F0IHhQb3MsIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxs
YmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93LCBjb25zdCBSZW5kZXJTdHls
ZSYgc3R5bGUpIGNvbnN0CiB7CiAgICAgaWYgKHN0eWxlLmhhc1RleHRDb21iaW5lKCkgJiYgaXM8
UmVuZGVyQ29tYmluZVRleHQ+KCp0aGlzKSkgewogICAgICAgICBjb25zdCBSZW5kZXJDb21iaW5l
VGV4dCYgY29tYmluZVRleHQgPSBkb3duY2FzdDxSZW5kZXJDb21iaW5lVGV4dD4oKnRoaXMpOwpA
QCAtNjMwLDcgKzYzMCw3IEBAIExpbmVCcmVha0l0ZXJhdG9yTW9kZSBtYXBMaW5lQnJlYWtUb0l0
ZXIKIAogdm9pZCBSZW5kZXJUZXh0Ojpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyhmbG9h
dCBsZWFkV2lkdGgpCiB7Ci0gICAgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+IGZhbGxi
YWNrRm9udHM7CisgICAgSGFzaFNldDxjb25zdCBGb250Kj4gZmFsbGJhY2tGb250czsKICAgICBH
bHlwaE92ZXJmbG93IGdseXBoT3ZlcmZsb3c7CiAgICAgY29tcHV0ZVByZWZlcnJlZExvZ2ljYWxX
aWR0aHMobGVhZFdpZHRoLCBmYWxsYmFja0ZvbnRzLCBnbHlwaE92ZXJmbG93KTsKICAgICBpZiAo
ZmFsbGJhY2tGb250cy5pc0VtcHR5KCkgJiYgIWdseXBoT3ZlcmZsb3cubGVmdCAmJiAhZ2x5cGhP
dmVyZmxvdy5yaWdodCAmJiAhZ2x5cGhPdmVyZmxvdy50b3AgJiYgIWdseXBoT3ZlcmZsb3cuYm90
dG9tKQpAQCAtNjQzLDcgKzY0Myw3IEBAIHN0YXRpYyBpbmxpbmUgZmxvYXQgaHlwaGVuV2lkdGgo
UmVuZGVyVGUKICAgICByZXR1cm4gZm9udC53aWR0aChSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4
dFJ1bihyZW5kZXJlciwgZm9udCwgc3R5bGUuaHlwaGVuU3RyaW5nKCkuc3RyaW5nKCksIHN0eWxl
KSk7CiB9CiAKLXN0YXRpYyBmbG9hdCBtYXhXb3JkRnJhZ21lbnRXaWR0aChSZW5kZXJUZXh0KiBy
ZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGb250Q2FzY2FkZSYgZm9u
dCwgU3RyaW5nVmlldyB3b3JkLCBpbnQgbWluaW11bVByZWZpeExlbmd0aCwgdW5zaWduZWQgbWlu
aW11bVN1ZmZpeExlbmd0aCwgaW50JiBzdWZmaXhTdGFydCwgSGFzaFNldDxjb25zdCBTaW1wbGVG
b250RGF0YSo+JiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93JiBnbHlwaE92ZXJmbG93KQor
c3RhdGljIGZsb2F0IG1heFdvcmRGcmFnbWVudFdpZHRoKFJlbmRlclRleHQqIHJlbmRlcmVyLCBj
b25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBTdHJpbmdW
aWV3IHdvcmQsIGludCBtaW5pbXVtUHJlZml4TGVuZ3RoLCB1bnNpZ25lZCBtaW5pbXVtU3VmZml4
TGVuZ3RoLCBpbnQmIHN1ZmZpeFN0YXJ0LCBIYXNoU2V0PGNvbnN0IEZvbnQqPiYgZmFsbGJhY2tG
b250cywgR2x5cGhPdmVyZmxvdyYgZ2x5cGhPdmVyZmxvdykKIHsKICAgICBzdWZmaXhTdGFydCA9
IDA7CiAgICAgaWYgKHdvcmQubGVuZ3RoKCkgPD0gbWluaW11bVN1ZmZpeExlbmd0aCkKQEAgLTY4
Myw3ICs2ODMsNyBAQCBzdGF0aWMgZmxvYXQgbWF4V29yZEZyYWdtZW50V2lkdGgoUmVuZGVyCiAg
ICAgcmV0dXJuIG1heEZyYWdtZW50V2lkdGg7CiB9CiAKLXZvaWQgUmVuZGVyVGV4dDo6Y29tcHV0
ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoZmxvYXQgbGVhZFdpZHRoLCBIYXNoU2V0PGNvbnN0IFNp
bXBsZUZvbnREYXRhKj4mIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cmIGdseXBoT3ZlcmZs
b3cpCit2b2lkIFJlbmRlclRleHQ6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKGZsb2F0
IGxlYWRXaWR0aCwgSGFzaFNldDxjb25zdCBGb250Kj4mIGZhbGxiYWNrRm9udHMsIEdseXBoT3Zl
cmZsb3cmIGdseXBoT3ZlcmZsb3cpCiB7CiAgICAgQVNTRVJUKG1faGFzVGFiIHx8IHByZWZlcnJl
ZExvZ2ljYWxXaWR0aHNEaXJ0eSgpIHx8ICFtX2tub3duVG9IYXZlTm9PdmVyZmxvd0FuZE5vRmFs
bGJhY2tGb250cyk7CiAKQEAgLTEyMDYsNyArMTIwNiw3IEBAIGNvbnN0IFNpbXBsZUxpbmVMYXlv
dXQ6OkxheW91dCogUmVuZGVyVGUKICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyQmxvY2tGbG93
PigqcGFyZW50KCkpLnNpbXBsZUxpbmVMYXlvdXQoKTsKIH0KIAotZmxvYXQgUmVuZGVyVGV4dDo6
d2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBmbG9hdCB4UG9zLCBib29sIGZpcnN0
TGluZSwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBHbHlw
aE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAorZmxvYXQgUmVuZGVyVGV4dDo6d2lkdGgo
dW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBmbG9hdCB4UG9zLCBib29sIGZpcnN0TGluZSwg
SGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBo
T3ZlcmZsb3cpIGNvbnN0CiB7CiAgICAgaWYgKGZyb20gPj0gdGV4dExlbmd0aCgpKQogICAgICAg
ICByZXR1cm4gMDsKQEAgLTEyMTgsNyArMTIxOCw3IEBAIGZsb2F0IFJlbmRlclRleHQ6OndpZHRo
KHVuc2lnbmVkIGZyb20sIHUKICAgICByZXR1cm4gd2lkdGgoZnJvbSwgbGVuLCBsaW5lU3R5bGUu
Zm9udENhc2NhZGUoKSwgeFBvcywgZmFsbGJhY2tGb250cywgZ2x5cGhPdmVyZmxvdyk7CiB9CiAK
LWZsb2F0IFJlbmRlclRleHQ6OndpZHRoKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgY29u
c3QgRm9udENhc2NhZGUmIGYsIGZsb2F0IHhQb3MsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERh
dGEqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QK
K2Zsb2F0IFJlbmRlclRleHQ6OndpZHRoKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgY29u
c3QgRm9udENhc2NhZGUmIGYsIGZsb2F0IHhQb3MsIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxs
YmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAogewogICAgIEFT
U0VSVChmcm9tICsgbGVuIDw9IHRleHRMZW5ndGgoKSk7CiAgICAgaWYgKCF0ZXh0TGVuZ3RoKCkp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgJKHJldmlzaW9uIDE3ODg1
NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTg5LDggKzg5LDggQEAgcHVibGljOgogICAgIHVuc2lnbmVkIHRleHRMZW5ndGgoKSBj
b25zdCB7IHJldHVybiBtX3RleHQuaW1wbCgpLT5sZW5ndGgoKTsgfSAvLyBub24gdmlydHVhbCBp
bXBsZW1lbnRhdGlvbiBvZiBsZW5ndGgoKQogICAgIHZvaWQgcG9zaXRpb25MaW5lQm94KElubGlu
ZVRleHRCb3gmKTsKIAotICAgIHZpcnR1YWwgZmxvYXQgd2lkdGgodW5zaWduZWQgZnJvbSwgdW5z
aWduZWQgbGVuLCBjb25zdCBGb250Q2FzY2FkZSYsIGZsb2F0IHhQb3MsIEhhc2hTZXQ8Y29uc3Qg
U2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCBmbG9hdCB3aWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBs
ZW4sIGZsb2F0IHhQb3MsIGJvb2wgZmlyc3RMaW5lID0gZmFsc2UsIEhhc2hTZXQ8Y29uc3QgU2lt
cGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29u
c3Q7CisgICAgdmlydHVhbCBmbG9hdCB3aWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4s
IGNvbnN0IEZvbnRDYXNjYWRlJiwgZmxvYXQgeFBvcywgSGFzaFNldDxjb25zdCBGb250Kj4qIGZh
bGxiYWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93KiA9IDApIGNvbnN0OworICAgIHZpcnR1YWwg
ZmxvYXQgd2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBmbG9hdCB4UG9zLCBib29s
IGZpcnN0TGluZSA9IGZhbHNlLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cyA9
IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29uc3Q7CiAKICAgICBmbG9hdCBtaW5Mb2dpY2FsV2lk
dGgoKSBjb25zdDsKICAgICBmbG9hdCBtYXhMb2dpY2FsV2lkdGgoKSBjb25zdDsKQEAgLTE4MCw3
ICsxODAsNyBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCBib29sIGNhbkhhdmVDaGlsZHJlbigp
IGNvbnN0IG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICB2b2lkIGNvbXB1
dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKGZsb2F0IGxlYWRXaWR0aCwgSGFzaFNldDxjb25zdCBT
aW1wbGVGb250RGF0YSo+JiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93Jik7CisgICAgdm9p
ZCBjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyhmbG9hdCBsZWFkV2lkdGgsIEhhc2hTZXQ8
Y29uc3QgRm9udCo+JiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93Jik7CiAKICAgICBib29s
IGNvbXB1dGVDYW5Vc2VTaW1wbGVGb250Q29kZVBhdGgoKSBjb25zdDsKICAgICAKQEAgLTE5Miw3
ICsxOTIsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBI
aXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBj
b25zdCBMYXlvdXRQb2ludCYsIEhpdFRlc3RBY3Rpb24pIG92ZXJyaWRlIGZpbmFsIHsgQVNTRVJU
X05PVF9SRUFDSEVEKCk7IHJldHVybiBmYWxzZTsgfQogCiAgICAgYm9vbCBjb250YWluc09ubHlX
aGl0ZXNwYWNlKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbikgY29uc3Q7Ci0gICAgZmxvYXQg
d2lkdGhGcm9tQ2FjaGUoY29uc3QgRm9udENhc2NhZGUmLCBpbnQgc3RhcnQsIGludCBsZW4sIGZs
b2F0IHhQb3MsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cywg
R2x5cGhPdmVyZmxvdyosIGNvbnN0IFJlbmRlclN0eWxlJikgY29uc3Q7CisgICAgZmxvYXQgd2lk
dGhGcm9tQ2FjaGUoY29uc3QgRm9udENhc2NhZGUmLCBpbnQgc3RhcnQsIGludCBsZW4sIGZsb2F0
IHhQb3MsIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93
KiwgY29uc3QgUmVuZGVyU3R5bGUmKSBjb25zdDsKICAgICBib29sIGlzQWxsQVNDSUkoKSBjb25z
dCB7IHJldHVybiBtX2lzQWxsQVNDSUk7IH0KICAgICBib29sIGNvbXB1dGVVc2VCYWNrc2xhc2hB
c1llblN5bWJvbCgpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAkocmV2aXNpb24gMTc4
ODU3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJDU1NG
b250U2VsZWN0b3IuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVkZSAi
Q2hyb21lLmgiCisjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVk
ZSAiRnJhbWVTZWxlY3Rpb24uaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKQEAgLTQwLDcgKzQx
LDYgQEAKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIK
ICNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5j
bHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgIlRleHRDb250cm9sSW5uZXJFbGVtZW50
cy5oIgogI2luY2x1ZGUgPHd0Zi9TdGFja1N0YXRzLmg+CkBAIC0zNDYsNyArMzQ2LDcgQEAgTGF5
b3V0VW5pdCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OgogICAgIGlmIChmYW1pbHkgPT0g
Ikx1Y2lkYSBHcmFuZGUiKQogICAgICAgICBtYXhDaGFyV2lkdGggPSBzY2FsZUVtVG9Vbml0cyg0
MDI3KTsKICAgICBlbHNlIGlmIChzdHlsZSgpLmZvbnRDYXNjYWRlKCkuaGFzVmFsaWRBdmVyYWdl
Q2hhcldpZHRoKCkpCi0gICAgICAgIG1heENoYXJXaWR0aCA9IHJvdW5kZihzdHlsZSgpLmZvbnRD
YXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkubWF4Q2hhcldpZHRoKCkpOworICAgICAgICBtYXhD
aGFyV2lkdGggPSByb3VuZGYoc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCkubWF4
Q2hhcldpZHRoKCkpOwogI2VuZGlmCiAKICAgICAvLyBGb3IgdGV4dCBpbnB1dHMsIElFIGFkZHMg
c29tZSBleHRyYSB3aWR0aC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZUlPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGhlbWVJT1MubW0JKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTgwLDcgKzU4MCw3IEBAIHN0
YXRpYyB2b2lkIGFkanVzdElucHV0RWxlbWVudEJ1dHRvblN0eWwKICAgICBGb250Q2FzY2FkZSBm
b250ID0gc3R5bGUuZm9udENhc2NhZGUoKTsKICAgICAKICAgICBSZW5kZXJPYmplY3QqIHJlbmRl
cmVyID0gaW5wdXRFbGVtZW50LnJlbmRlcmVyKCk7Ci0gICAgaWYgKGZvbnQucHJpbWFyeUZvbnRE
YXRhKCkuaXNTVkdGb250KCkgJiYgIXJlbmRlcmVyKQorICAgIGlmIChmb250LnByaW1hcnlGb250
KCkuaXNTVkdGb250KCkgJiYgIXJlbmRlcmVyKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAg
ZmxvYXQgbWF4aW11bVdpZHRoID0gbG9jYWxpemVkRGF0ZUNhY2hlKCkubWF4aW11bVdpZHRoRm9y
RGF0ZVR5cGUoZGF0ZVR5cGUsIGZvbnQsIFJlbmRlclRoZW1lTWVhc3VyZVRleHRDbGllbnQoZm9u
dCwgKnJlbmRlcmVyLCBzdHlsZSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jv
b3RJbmxpbmVCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
b290SW5saW5lQm94LmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04ODUsNyArODg1LDcg
QEAgdm9pZCBSb290SW5saW5lQm94Ojphc2NlbnRBbmREZXNjZW50Rm9yQgogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgVmVjdG9yPGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIHVzZWRGb250
cyA9IG51bGxwdHI7CisgICAgVmVjdG9yPGNvbnN0IEZvbnQqPiogdXNlZEZvbnRzID0gbnVsbHB0
cjsKICAgICBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93ID0gbnVsbHB0cjsKICAgICBpZiAo
aXM8SW5saW5lVGV4dEJveD4oYm94KSkgewogICAgICAgICBHbHlwaE92ZXJmbG93QW5kRmFsbGJh
Y2tGb250c01hcDo6aXRlcmF0b3IgaXQgPSB0ZXh0Qm94RGF0YU1hcC5maW5kKCZkb3duY2FzdDxJ
bmxpbmVUZXh0Qm94Pihib3gpKTsKQEAgLTkwMSw3ICs5MDEsNyBAQCB2b2lkIFJvb3RJbmxpbmVC
b3g6OmFzY2VudEFuZERlc2NlbnRGb3JCCiAKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgYm94TGlu
ZVN0eWxlID0gYm94LmxpbmVTdHlsZSgpOwogICAgIGlmICh1c2VkRm9udHMgJiYgIXVzZWRGb250
cy0+aXNFbXB0eSgpICYmIChpbmNsdWRlRm9udCB8fCAoYm94TGluZVN0eWxlLmxpbmVIZWlnaHQo
KS5pc05lZ2F0aXZlKCkgJiYgaW5jbHVkZUxlYWRpbmcpKSkgewotICAgICAgICB1c2VkRm9udHMt
PmFwcGVuZCgmYm94TGluZVN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkpOwor
ICAgICAgICB1c2VkRm9udHMtPmFwcGVuZCgmYm94TGluZVN0eWxlLmZvbnRDYXNjYWRlKCkucHJp
bWFyeUZvbnQoKSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdXNlZEZvbnRzLT5z
aXplKCk7ICsraSkgewogICAgICAgICAgICAgY29uc3QgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNz
ID0gdXNlZEZvbnRzLT5hdChpKS0+Zm9udE1ldHJpY3MoKTsKICAgICAgICAgICAgIGludCB1c2Vk
Rm9udEFzY2VudCA9IGZvbnRNZXRyaWNzLmFzY2VudChiYXNlbGluZVR5cGUoKSk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuY3BwCShyZXZpc2lv
biAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
bmFtZXNwYWNlIFNpbXBsZUxpbmVMYXlvdXQgewogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4KLXN0YXRpYyBib29sIGNhblVzZUZvclRleHQoY29uc3QgQ2hhcmFjdGVyVHlwZSog
dGV4dCwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTaW1wbGVGb250RGF0YSYgZm9udERhdGEpCitz
dGF0aWMgYm9vbCBjYW5Vc2VGb3JUZXh0KGNvbnN0IENoYXJhY3RlclR5cGUqIHRleHQsIHVuc2ln
bmVkIGxlbmd0aCwgY29uc3QgRm9udCYgZm9udCkKIHsKICAgICAvLyBGSVhNRTogPHRleHRhcmVh
IG1heGxlbmd0aD0wPiBnZW5lcmF0ZXMgZW1wdHkgdGV4dCBub2RlLgogICAgIGlmICghbGVuZ3Ro
KQpAQCAtNzUsMTcgKzc1LDE3IEBAIHN0YXRpYyBib29sIGNhblVzZUZvclRleHQoY29uc3QgQ2hh
cmFjdGUKICAgICAgICAgICAgIHx8IGRpcmVjdGlvbiA9PSBVX1BPUF9ESVJFQ1RJT05BTF9GT1JN
QVQgfHwgZGlyZWN0aW9uID09IFVfQk9VTkRBUllfTkVVVFJBTCkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgICAgICBpZiAoIWZvbnREYXRhLmdseXBoRm9yQ2hhcmFjdGVyKGNoYXJh
Y3RlcikpCisgICAgICAgIGlmICghZm9udC5nbHlwaEZvckNoYXJhY3RlcihjaGFyYWN0ZXIpKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
c3RhdGljIGJvb2wgY2FuVXNlRm9yVGV4dChjb25zdCBSZW5kZXJUZXh0JiB0ZXh0UmVuZGVyZXIs
IGNvbnN0IFNpbXBsZUZvbnREYXRhJiBmb250RGF0YSkKK3N0YXRpYyBib29sIGNhblVzZUZvclRl
eHQoY29uc3QgUmVuZGVyVGV4dCYgdGV4dFJlbmRlcmVyLCBjb25zdCBGb250JiBmb250KQogewog
ICAgIGlmICh0ZXh0UmVuZGVyZXIuaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBjYW5Vc2VGb3JU
ZXh0KHRleHRSZW5kZXJlci5jaGFyYWN0ZXJzOCgpLCB0ZXh0UmVuZGVyZXIudGV4dExlbmd0aCgp
LCBmb250RGF0YSk7Ci0gICAgcmV0dXJuIGNhblVzZUZvclRleHQodGV4dFJlbmRlcmVyLmNoYXJh
Y3RlcnMxNigpLCB0ZXh0UmVuZGVyZXIudGV4dExlbmd0aCgpLCBmb250RGF0YSk7CisgICAgICAg
IHJldHVybiBjYW5Vc2VGb3JUZXh0KHRleHRSZW5kZXJlci5jaGFyYWN0ZXJzOCgpLCB0ZXh0UmVu
ZGVyZXIudGV4dExlbmd0aCgpLCBmb250KTsKKyAgICByZXR1cm4gY2FuVXNlRm9yVGV4dCh0ZXh0
UmVuZGVyZXIuY2hhcmFjdGVyczE2KCksIHRleHRSZW5kZXJlci50ZXh0TGVuZ3RoKCksIGZvbnQp
OwogfQogCiBib29sIGNhblVzZUZvcihjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3cpCkBAIC0x
ODQsMTEgKzE4NCwxMSBAQCBib29sIGNhblVzZUZvcihjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZs
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKHN0eWxlLmZvbnRDYXNj
YWRlKCkucHJpbWFyeUZvbnREYXRhKCkuaXNTVkdGb250KCkpCisgICAgaWYgKHN0eWxlLmZvbnRD
YXNjYWRlKCkucHJpbWFyeUZvbnQoKS5pc1NWR0ZvbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIC8vIFdlIGFzc3VtZSB0aGF0IGFsbCBsaW5lcyBoYXZlIG1ldHJpY3MgYmFzZWQgcHVy
ZWx5IG9uIHRoZSBwcmltYXJ5IGZvbnQuCi0gICAgYXV0byYgcHJpbWFyeUZvbnREYXRhID0gc3R5
bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKTsKLSAgICBpZiAocHJpbWFyeUZvbnRE
YXRhLmlzTG9hZGluZygpKQorICAgIGF1dG8mIHByaW1hcnlGb250ID0gc3R5bGUuZm9udENhc2Nh
ZGUoKS5wcmltYXJ5Rm9udCgpOworICAgIGlmIChwcmltYXJ5Rm9udC5pc0xvYWRpbmcoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGZvciAoY29uc3QgYXV0byYgdGV4dFJlbmRlcmVyIDog
Y2hpbGRyZW5PZlR5cGU8UmVuZGVyVGV4dD4oZmxvdykpIHsKICAgICAgICAgaWYgKHRleHRSZW5k
ZXJlci5pc0NvbWJpbmVUZXh0KCkgfHwgdGV4dFJlbmRlcmVyLmlzQ291bnRlcigpIHx8IHRleHRS
ZW5kZXJlci5pc1F1b3RlKCkgfHwgdGV4dFJlbmRlcmVyLmlzVGV4dEZyYWdtZW50KCkKQEAgLTE5
Niw3ICsxOTYsNyBAQCBib29sIGNhblVzZUZvcihjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmIChzdHlsZS5mb250Q2FzY2FkZSgp
LmNvZGVQYXRoKFRleHRSdW4odGV4dFJlbmRlcmVyLnRleHQoKSkpICE9IEZvbnRDYXNjYWRlOjpT
aW1wbGUpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghY2FuVXNlRm9y
VGV4dCh0ZXh0UmVuZGVyZXIsIHByaW1hcnlGb250RGF0YSkpCisgICAgICAgIGlmICghY2FuVXNl
Rm9yVGV4dCh0ZXh0UmVuZGVyZXIsIHByaW1hcnlGb250KSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvbGluZS9CcmVha2luZ0NvbnRleHRJbmxpbmVIZWFkZXJzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvQnJlYWtpbmdDb250ZXh0SW5saW5lSGVhZGVy
cy5oCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9C
cmVha2luZ0NvbnRleHRJbmxpbmVIZWFkZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5
LDcgQEAgc3RydWN0IFdvcmRNZWFzdXJlbWVudCB7CiAgICAgZmxvYXQgd2lkdGg7CiAgICAgaW50
IHN0YXJ0T2Zmc2V0OwogICAgIGludCBlbmRPZmZzZXQ7Ci0gICAgSGFzaFNldDxjb25zdCBTaW1w
bGVGb250RGF0YSo+IGZhbGxiYWNrRm9udHM7CisgICAgSGFzaFNldDxjb25zdCBGb250Kj4gZmFs
bGJhY2tGb250czsKIH07CiAKIGNsYXNzIEJyZWFraW5nQ29udGV4dCB7CkBAIC00ODYsMTMgKzQ4
NiwxMyBAQCBpbmxpbmUgdm9pZCB1cGRhdGVDb3VudGVySWZOZWVkZWQoUmVuZGVyCiAgICAgZG93
bmNhc3Q8UmVuZGVyQ291bnRlcj4ocmVuZGVyVGV4dCkudXBkYXRlQ291bnRlcigpOwogfQogCi1p
bmxpbmUgZmxvYXQgbWVhc3VyZUh5cGhlbldpZHRoKFJlbmRlclRleHQqIHJlbmRlcmVyLCBjb25z
dCBGb250Q2FzY2FkZSYgZm9udCwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxs
YmFja0ZvbnRzID0gMCkKK2lubGluZSBmbG9hdCBtZWFzdXJlSHlwaGVuV2lkdGgoUmVuZGVyVGV4
dCogcmVuZGVyZXIsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBIYXNoU2V0PGNvbnN0IEZvbnQq
PiogZmFsbGJhY2tGb250cyA9IDApCiB7CiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlID0g
cmVuZGVyZXItPnN0eWxlKCk7CiAgICAgcmV0dXJuIGZvbnQud2lkdGgoUmVuZGVyQmxvY2s6OmNv
bnN0cnVjdFRleHRSdW4ocmVuZGVyZXIsIGZvbnQsIHN0eWxlLmh5cGhlblN0cmluZygpLnN0cmlu
ZygpLCBzdHlsZSksIGZhbGxiYWNrRm9udHMpOwogfQogCi1BTFdBWVNfSU5MSU5FIGZsb2F0IHRl
eHRXaWR0aChSZW5kZXJUZXh0KiB0ZXh0LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIGNv
bnN0IEZvbnRDYXNjYWRlJiBmb250LCBmbG9hdCB4UG9zLCBib29sIGlzRml4ZWRQaXRjaCwgYm9v
bCBjb2xsYXBzZVdoaXRlU3BhY2UsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiYgZmFs
bGJhY2tGb250cywgVGV4dExheW91dCogbGF5b3V0ID0gMCkKK0FMV0FZU19JTkxJTkUgZmxvYXQg
dGV4dFdpZHRoKFJlbmRlclRleHQqIHRleHQsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbiwg
Y29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGZsb2F0IHhQb3MsIGJvb2wgaXNGaXhlZFBpdGNoLCBi
b29sIGNvbGxhcHNlV2hpdGVTcGFjZSwgSGFzaFNldDxjb25zdCBGb250Kj4mIGZhbGxiYWNrRm9u
dHMsIFRleHRMYXlvdXQqIGxheW91dCA9IDApCiB7CiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0
eWxlID0gdGV4dC0+c3R5bGUoKTsKIApAQCAtNTc4LDcgKzU3OCw3IEBAIGlubGluZSB2b2lkIHRy
eUh5cGhlbmF0aW5nKFJlbmRlclRleHQqIHQKICAgICBBU1NFUlQocG9zIC0gbGFzdFNwYWNlIC0g
cHJlZml4TGVuZ3RoID49IG1pbmltdW1TdWZmaXhMZW5ndGgpOwogCiAjaWYgIUFTU0VSVF9ESVNB
QkxFRAotICAgIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiBmYWxsYmFja0ZvbnRzOwor
ICAgIEhhc2hTZXQ8Y29uc3QgRm9udCo+IGZhbGxiYWNrRm9udHM7CiAgICAgZmxvYXQgcHJlZml4
V2lkdGggPSBoeXBoZW5XaWR0aCArIHRleHRXaWR0aCh0ZXh0LCBsYXN0U3BhY2UsIHByZWZpeExl
bmd0aCwgZm9udCwgeFBvcywgaXNGaXhlZFBpdGNoLCBjb2xsYXBzZVdoaXRlU3BhY2UsIGZhbGxi
YWNrRm9udHMpICsgbGFzdFNwYWNlV29yZFNwYWNpbmc7CiAgICAgQVNTRVJUKHhQb3MgKyBwcmVm
aXhXaWR0aCA8PSBhdmFpbGFibGVXaWR0aCk7CiAjZWxzZQpAQCAtNjU2LDcgKzY1Niw3IEBAIGlu
bGluZSBib29sIEJyZWFraW5nQ29udGV4dDo6aGFuZGxlVGV4dCgKIAogICAgIC8vIE5vbi16ZXJv
IG9ubHkgd2hlbiBrZXJuaW5nIGlzIGVuYWJsZWQgYW5kIFRleHRMYXlvdXQgaXNuJ3QgdXNlZCwg
aW4gd2hpY2ggY2FzZSB3ZSBtZWFzdXJlCiAgICAgLy8gd29yZHMgd2l0aCB0aGVpciB0cmFpbGlu
ZyBzcGFjZSwgdGhlbiBzdWJ0cmFjdCBpdHMgd2lkdGguCi0gICAgSGFzaFNldDxjb25zdCBTaW1w
bGVGb250RGF0YSo+IGZhbGxiYWNrRm9udHM7CisgICAgSGFzaFNldDxjb25zdCBGb250Kj4gZmFs
bGJhY2tGb250czsKICAgICBmbG9hdCB3b3JkVHJhaWxpbmdTcGFjZVdpZHRoID0gKGZvbnQudHlw
ZXNldHRpbmdGZWF0dXJlcygpICYgS2VybmluZykgJiYgIXRleHRMYXlvdXQgPyBmb250LndpZHRo
KFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKCZyZW5kZXJUZXh0LCBmb250LCAmc3BhY2Us
IDEsIHN0eWxlKSwgJmZhbGxiYWNrRm9udHMpICsgd29yZFNwYWNpbmcgOiAwOwogCiAgICAgVUNo
YXIgbGFzdENoYXJhY3RlciA9IG1fcmVuZGVyVGV4dEluZm8ubV9saW5lQnJlYWtJdGVyYXRvci5s
YXN0Q2hhcmFjdGVyKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1Jl
bmRlck1hdGhNTE9wZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmNwcAkocmV2aXNpb24gMTc4ODU3KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMzMsNyArMTMzMyw3IEBAIHZvaWQgUmVuZGVyTWF0aE1M
T3BlcmF0b3I6OnJlc2V0U3RyZXRjaFMKIAogRmxvYXRSZWN0IFJlbmRlck1hdGhNTE9wZXJhdG9y
Ojpib3VuZHNGb3JHbHlwaChjb25zdCBHbHlwaERhdGEmIGRhdGEpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIGRhdGEuZm9udERhdGEtPmJvdW5kc0ZvckdseXBoKGRhdGEuZ2x5cGgpOworICAgIHJldHVy
biBkYXRhLmZvbnQtPmJvdW5kc0ZvckdseXBoKGRhdGEuZ2x5cGgpOwogfQogCiBmbG9hdCBSZW5k
ZXJNYXRoTUxPcGVyYXRvcjo6aGVpZ2h0Rm9yR2x5cGgoY29uc3QgR2x5cGhEYXRhJiBkYXRhKSBj
b25zdApAQCAtMTM0Myw3ICsxMzQzLDcgQEAgZmxvYXQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6Omhl
aWdodEZvckdseQogCiBmbG9hdCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6YWR2YW5jZUZvckdseXBo
KGNvbnN0IEdseXBoRGF0YSYgZGF0YSkgY29uc3QKIHsKLSAgICByZXR1cm4gZGF0YS5mb250RGF0
YS0+d2lkdGhGb3JHbHlwaChkYXRhLmdseXBoKTsKKyAgICByZXR1cm4gZGF0YS5mb250LT53aWR0
aEZvckdseXBoKGRhdGEuZ2x5cGgpOwogfQogCiB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpj
b21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpCkBAIC0xNTIxLDExICsxNTIxLDExIEBAIGJv
b2wgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmdldEdseXBoQXNzZW0KICAgICBpZiAoIWJvdHRvbS5n
bHlwaCkKICAgICAgICAgYm90dG9tLmdseXBoID0gZXh0ZW5zaW9uLmdseXBoOwogCi0gICAgdG9w
LmZvbnREYXRhID0gJnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKTsKLSAg
ICBleHRlbnNpb24uZm9udERhdGEgPSB0b3AuZm9udERhdGE7Ci0gICAgYm90dG9tLmZvbnREYXRh
ID0gdG9wLmZvbnREYXRhOworICAgIHRvcC5mb250ID0gJnN0eWxlKCkuZm9udENhc2NhZGUoKS5w
cmltYXJ5Rm9udCgpOworICAgIGV4dGVuc2lvbi5mb250ID0gdG9wLmZvbnQ7CisgICAgYm90dG9t
LmZvbnQgPSB0b3AuZm9udDsKICAgICBpZiAobWlkZGxlLmdseXBoKQotICAgICAgICBtaWRkbGUu
Zm9udERhdGEgPSB0b3AuZm9udERhdGE7CisgICAgICAgIG1pZGRsZS5mb250ID0gdG9wLmZvbnQ7
CiAKICAgICBzdHJldGNoeURhdGEuc2V0R2x5cGhBc3NlbWJseU1vZGUodG9wLCBleHRlbnNpb24s
IGJvdHRvbSwgbWlkZGxlKTsKIApAQCAtMTUzOCwyNCArMTUzOCwyNCBAQCBSZW5kZXJNYXRoTUxP
cGVyYXRvcjo6U3RyZXRjaHlEYXRhIFJlbmRlCiAKICAgICBBU1NFUlQobV9pc1ZlcnRpY2FsICYm
IGlzTGFyZ2VPcGVyYXRvckluRGlzcGxheVN0eWxlKCkpOwogCi0gICAgY29uc3QgYXV0byYgcHJp
bWFyeUZvbnREYXRhID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpOwor
ICAgIGNvbnN0IGF1dG8mIHByaW1hcnlGb250ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1h
cnlGb250KCk7CiAgICAgR2x5cGhEYXRhIGJhc2VHbHlwaCA9IHN0eWxlKCkuZm9udENhc2NhZGUo
KS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyLCAhc3R5bGUoKS5pc0xlZnRUb1JpZ2h0
RGlyZWN0aW9uKCkpOwotICAgIGlmICghcHJpbWFyeUZvbnREYXRhLm1hdGhEYXRhKCkgfHwgYmFz
ZUdseXBoLmZvbnREYXRhICE9ICZwcmltYXJ5Rm9udERhdGEpCisgICAgaWYgKCFwcmltYXJ5Rm9u
dC5tYXRoRGF0YSgpIHx8IGJhc2VHbHlwaC5mb250ICE9ICZwcmltYXJ5Rm9udCkKICAgICAgICAg
cmV0dXJuIGRhdGE7CiAKICAgICBWZWN0b3I8R2x5cGg+IHNpemVWYXJpYW50czsKICAgICBWZWN0
b3I8T3BlblR5cGVNYXRoRGF0YTo6QXNzZW1ibHlQYXJ0PiBhc3NlbWJseVBhcnRzOwogCiAgICAg
Ly8gVGhlIHZhbHVlIG9mIGRpc3BsYXlPcGVyYXRvck1pbkhlaWdodCBpcyBzb21ldGltZXMgdG9v
IHNtYWxsLCBzbyB3ZSBlbnN1cmUgdGhhdCBpdCBpcyBhdCBsZWFzdCBcc3FydHsyfSB0aW1lcyB0
aGUgc2l6ZSBvZiB0aGUgYmFzZSBnbHlwaC4KLSAgICBmbG9hdCBkaXNwbGF5T3BlcmF0b3JNaW5I
ZWlnaHQgPSBzdGQ6Om1heChiYXNlR2x5cGguZm9udERhdGEtPmJvdW5kc0ZvckdseXBoKGJhc2VH
bHlwaC5nbHlwaCkuaGVpZ2h0KCkgKiBzcXJ0T2ZUd29GbG9hdCwgcHJpbWFyeUZvbnREYXRhLm1h
dGhEYXRhKCktPmdldE1hdGhDb25zdGFudChwcmltYXJ5Rm9udERhdGEsIE9wZW5UeXBlTWF0aERh
dGE6OkRpc3BsYXlPcGVyYXRvck1pbkhlaWdodCkpOworICAgIGZsb2F0IGRpc3BsYXlPcGVyYXRv
ck1pbkhlaWdodCA9IHN0ZDo6bWF4KGJhc2VHbHlwaC5mb250LT5ib3VuZHNGb3JHbHlwaChiYXNl
R2x5cGguZ2x5cGgpLmhlaWdodCgpICogc3FydE9mVHdvRmxvYXQsIHByaW1hcnlGb250Lm1hdGhE
YXRhKCktPmdldE1hdGhDb25zdGFudChwcmltYXJ5Rm9udCwgT3BlblR5cGVNYXRoRGF0YTo6RGlz
cGxheU9wZXJhdG9yTWluSGVpZ2h0KSk7CiAKLSAgICBwcmltYXJ5Rm9udERhdGEubWF0aERhdGEo
KS0+Z2V0TWF0aFZhcmlhbnRzKGJhc2VHbHlwaC5nbHlwaCwgdHJ1ZSwgc2l6ZVZhcmlhbnRzLCBh
c3NlbWJseVBhcnRzKTsKKyAgICBwcmltYXJ5Rm9udC5tYXRoRGF0YSgpLT5nZXRNYXRoVmFyaWFu
dHMoYmFzZUdseXBoLmdseXBoLCB0cnVlLCBzaXplVmFyaWFudHMsIGFzc2VtYmx5UGFydHMpOwog
CiAgICAgLy8gV2UgY2hvb3NlIHRoZSBmaXJzdCBzaXplIHZhcmlhbnQgdGhhdCBpcyBsYXJnZXIg
dGhhbiB0aGUgZXhwZWN0ZWQgZGlzcGxheU9wZXJhdG9yTWluSGVpZ2h0IGFuZCBvdGhlcndpc2Ug
ZmFsbGJhY2sgdG8gdGhlIGxhcmdlc3QgdmFyaWFudC4KICAgICBmb3IgKGF1dG8mIHZhcmlhbnQg
OiBzaXplVmFyaWFudHMpIHsKICAgICAgICAgR2x5cGhEYXRhIHNpemVWYXJpYW50OwogICAgICAg
ICBzaXplVmFyaWFudC5nbHlwaCA9IHZhcmlhbnQ7Ci0gICAgICAgIHNpemVWYXJpYW50LmZvbnRE
YXRhID0gJnByaW1hcnlGb250RGF0YTsKKyAgICAgICAgc2l6ZVZhcmlhbnQuZm9udCA9ICZwcmlt
YXJ5Rm9udDsKICAgICAgICAgZGF0YS5zZXRTaXplVmFyaWFudE1vZGUoc2l6ZVZhcmlhbnQpOwog
ICAgICAgICBpZiAoYm91bmRzRm9yR2x5cGgoc2l6ZVZhcmlhbnQpLmhlaWdodCgpID49IGRpc3Bs
YXlPcGVyYXRvck1pbkhlaWdodCkKICAgICAgICAgICAgIHJldHVybiBkYXRhOwpAQCAtMTU3MCwx
OCArMTU3MCwxOCBAQCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6U3RyZXRjaHlEYXRhIFJlbmRlCiAg
ICAgU3RyZXRjaHlEYXRhIGRhdGE7CiAgICAgU3RyZXRjaHlEYXRhIGFzc2VtYmx5RGF0YTsKIAot
ICAgIGNvbnN0IGF1dG8mIHByaW1hcnlGb250RGF0YSA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5w
cmltYXJ5Rm9udERhdGEoKTsKKyAgICBjb25zdCBhdXRvJiBwcmltYXJ5Rm9udCA9IHN0eWxlKCku
Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpOwogICAgIEdseXBoRGF0YSBiYXNlR2x5cGggPSBz
dHlsZSgpLmZvbnRDYXNjYWRlKCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3RlciwgIXN0
eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKTsKICAgICAKLSAgICBpZiAocHJpbWFyeUZv
bnREYXRhLm1hdGhEYXRhKCkgJiYgYmFzZUdseXBoLmZvbnREYXRhID09ICZwcmltYXJ5Rm9udERh
dGEpIHsKKyAgICBpZiAocHJpbWFyeUZvbnQubWF0aERhdGEoKSAmJiBiYXNlR2x5cGguZm9udCA9
PSAmcHJpbWFyeUZvbnQpIHsKICAgICAgICAgVmVjdG9yPEdseXBoPiBzaXplVmFyaWFudHM7CiAg
ICAgICAgIFZlY3RvcjxPcGVuVHlwZU1hdGhEYXRhOjpBc3NlbWJseVBhcnQ+IGFzc2VtYmx5UGFy
dHM7Ci0gICAgICAgIHByaW1hcnlGb250RGF0YS5tYXRoRGF0YSgpLT5nZXRNYXRoVmFyaWFudHMo
YmFzZUdseXBoLmdseXBoLCBtX2lzVmVydGljYWwsIHNpemVWYXJpYW50cywgYXNzZW1ibHlQYXJ0
cyk7CisgICAgICAgIHByaW1hcnlGb250Lm1hdGhEYXRhKCktPmdldE1hdGhWYXJpYW50cyhiYXNl
R2x5cGguZ2x5cGgsIG1faXNWZXJ0aWNhbCwgc2l6ZVZhcmlhbnRzLCBhc3NlbWJseVBhcnRzKTsK
ICAgICAgICAgLy8gV2UgdmVyaWZ5IHRoZSBzaXplIHZhcmlhbnRzLgogICAgICAgICBmb3IgKGF1
dG8mIHZhcmlhbnQgOiBzaXplVmFyaWFudHMpIHsKICAgICAgICAgICAgIEdseXBoRGF0YSBzaXpl
VmFyaWFudDsKICAgICAgICAgICAgIHNpemVWYXJpYW50LmdseXBoID0gdmFyaWFudDsKLSAgICAg
ICAgICAgIHNpemVWYXJpYW50LmZvbnREYXRhID0gJnByaW1hcnlGb250RGF0YTsKKyAgICAgICAg
ICAgIHNpemVWYXJpYW50LmZvbnQgPSAmcHJpbWFyeUZvbnQ7CiAgICAgICAgICAgICBpZiAobWF4
aW11bUdseXBoV2lkdGgpCiAgICAgICAgICAgICAgICAgKm1heGltdW1HbHlwaFdpZHRoID0gc3Rk
OjptYXgoKm1heGltdW1HbHlwaFdpZHRoLCBhZHZhbmNlRm9yR2x5cGgoc2l6ZVZhcmlhbnQpKTsK
ICAgICAgICAgICAgIGVsc2UgewpAQCAtMTgwMSw4ICsxODAxLDggQEAgTGF5b3V0UmVjdCBSZW5k
ZXJNYXRoTUxPcGVyYXRvcjo6cGFpbnRHbAogICAgIGluZm8uY29udGV4dC0+Y2xpcChjbGlwQm91
bmRzKTsKIAogICAgIEdseXBoQnVmZmVyIGJ1ZmZlcjsKLSAgICBidWZmZXIuYWRkKGRhdGEuZ2x5
cGgsIGRhdGEuZm9udERhdGEsIGFkdmFuY2VGb3JHbHlwaChkYXRhKSk7Ci0gICAgaW5mby5jb250
ZXh0LT5kcmF3R2x5cGhzKHN0eWxlKCkuZm9udENhc2NhZGUoKSwgKmRhdGEuZm9udERhdGEsIGJ1
ZmZlciwgMCwgMSwgb3JpZ2luKTsKKyAgICBidWZmZXIuYWRkKGRhdGEuZ2x5cGgsIGRhdGEuZm9u
dCwgYWR2YW5jZUZvckdseXBoKGRhdGEpKTsKKyAgICBpbmZvLmNvbnRleHQtPmRyYXdHbHlwaHMo
c3R5bGUoKS5mb250Q2FzY2FkZSgpLCAqZGF0YS5mb250LCBidWZmZXIsIDAsIDEsIG9yaWdpbik7
CiAKICAgICByZXR1cm4gZ2x5cGhQYWludFJlY3Q7CiB9CkBAIC0xODk0LDExICsxODk0LDExIEBA
IHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBhaW50KFBhaW50SW4KICAgICBpZiAobV9zdHJl
dGNoeURhdGEubW9kZSgpID09IERyYXdTaXplVmFyaWFudCkgewogICAgICAgICBBU1NFUlQobV9z
dHJldGNoeURhdGEudmFyaWFudCgpLmdseXBoKTsKICAgICAgICAgR2x5cGhCdWZmZXIgYnVmZmVy
OwotICAgICAgICBidWZmZXIuYWRkKG1fc3RyZXRjaHlEYXRhLnZhcmlhbnQoKS5nbHlwaCwgbV9z
dHJldGNoeURhdGEudmFyaWFudCgpLmZvbnREYXRhLCBhZHZhbmNlRm9yR2x5cGgobV9zdHJldGNo
eURhdGEudmFyaWFudCgpKSk7CisgICAgICAgIGJ1ZmZlci5hZGQobV9zdHJldGNoeURhdGEudmFy
aWFudCgpLmdseXBoLCBtX3N0cmV0Y2h5RGF0YS52YXJpYW50KCkuZm9udCwgYWR2YW5jZUZvckds
eXBoKG1fc3RyZXRjaHlEYXRhLnZhcmlhbnQoKSkpOwogICAgICAgICBMYXlvdXRQb2ludCBvcGVy
YXRvclRvcExlZnQgPSBjZWlsZWRJbnRQb2ludChwYWludE9mZnNldCArIGxvY2F0aW9uKCkpOwog
ICAgICAgICBGbG9hdFJlY3QgZ2x5cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlwaChtX3N0cmV0Y2h5
RGF0YS52YXJpYW50KCkpOwogICAgICAgICBMYXlvdXRQb2ludCBvcGVyYXRvck9yaWdpbihvcGVy
YXRvclRvcExlZnQueCgpLCBvcGVyYXRvclRvcExlZnQueSgpIC0gZ2x5cGhCb3VuZHMueSgpKTsK
LSAgICAgICAgaW5mby5jb250ZXh0LT5kcmF3R2x5cGhzKHN0eWxlKCkuZm9udENhc2NhZGUoKSwg
Km1fc3RyZXRjaHlEYXRhLnZhcmlhbnQoKS5mb250RGF0YSwgYnVmZmVyLCAwLCAxLCBvcGVyYXRv
ck9yaWdpbik7CisgICAgICAgIGluZm8uY29udGV4dC0+ZHJhd0dseXBocyhzdHlsZSgpLmZvbnRD
YXNjYWRlKCksICptX3N0cmV0Y2h5RGF0YS52YXJpYW50KCkuZm9udCwgYnVmZmVyLCAwLCAxLCBv
cGVyYXRvck9yaWdpbik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTE5ODAsOCArMTk4
MCw4IEBAIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBhaW50Q2hpbGRyZW4KIAogTGF5b3V0
VW5pdCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6dHJhaWxpbmdTcGFjZUVycm9yKCkKIHsKLSAgICBj
b25zdCBhdXRvJiBwcmltYXJ5Rm9udERhdGEgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFy
eUZvbnREYXRhKCk7Ci0gICAgaWYgKCFwcmltYXJ5Rm9udERhdGEubWF0aERhdGEoKSkKKyAgICBj
b25zdCBhdXRvJiBwcmltYXJ5Rm9udCA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9u
dCgpOworICAgIGlmICghcHJpbWFyeUZvbnQubWF0aERhdGEoKSkKICAgICAgICAgcmV0dXJuIDA7
CiAKICAgICAvLyBGb3IgT3BlblR5cGUgTUFUSCBmb250LCB0aGUgbGF5b3V0IGlzIGJhc2VkIG9u
IFJlbmRlck1hdGhPcGVyYXRvciBmb3Igd2hpY2ggdGhlIHByZWZlcnJlZCB3aWR0aCBpcyBzb21l
dGltZXMgb3ZlcmVzdGltYXRlZCAoYnVnIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMzAzMjYpLgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9S
ZW5kZXJNYXRoTUxPcGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuaAkocmV2aXNpb24gMTc4ODU3KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCwxMSArMjgsMTEgQEAKIAogI2lmIEVOQUJMRShNQVRITUwpCiAK
KyNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiR2x5cGhQYWdlLmgiCiAjaW5jbHVkZSAiTWF0
aE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIk9wZW5UeXBlTWF0aERhdGEuaCIKICNpbmNsdWRlICJS
ZW5kZXJNYXRoTUxUb2tlbi5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9S
ZW5kZXJNYXRoTUxSYWRpY2FsT3BlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUmFkaWNhbE9wZXJhdG9yLmNwcAkocmV2
aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJN
YXRoTUxSYWRpY2FsT3BlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBA
IFJlbmRlck1hdGhNTFJhZGljYWxPcGVyYXRvcjo6UmVuZGVyTWF0aE0KIAogdm9pZCBSZW5kZXJN
YXRoTUxSYWRpY2FsT3BlcmF0b3I6OnN0cmV0Y2hUbyhMYXlvdXRVbml0IGhlaWdodEFib3ZlQmFz
ZWxpbmUsIExheW91dFVuaXQgZGVwdGhCZWxvd0Jhc2VsaW5lKQogewotICAgIGlmICghc3R5bGUo
KS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLm1hdGhEYXRhKCkpIHsKKyAgICBpZiAo
IXN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpLm1hdGhEYXRhKCkpIHsKICAgICAg
ICAgLy8gSWYgd2UgZG8gbm90IGhhdmUgYW4gT3BlblR5cGUgTUFUSCBmb250LCB3ZSBhbHdheXMg
bWFrZSB0aGUgcmFkaWNhbCBkZXB0aCBhIGJpdCBsYXJnZXIgdGhhbiB0aGUgdGFyZ2V0LgogICAg
ICAgICBkZXB0aEJlbG93QmFzZWxpbmUgKz0gZ1JhZGljYWxCb3R0b21Qb2ludExvd2VyOwogICAg
IH0KQEAgLTgzLDcgKzgzLDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxSYWRpY2FsT3BlcmF0b3I6OmNv
bXB1dAogewogICAgIEFTU0VSVChwcmVmZXJyZWRMb2dpY2FsV2lkdGhzRGlydHkoKSk7CiAKLSAg
ICBpZiAoc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLm1hdGhEYXRhKCkp
IHsKKyAgICBpZiAoc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCkubWF0aERhdGEo
KSkgewogICAgICAgICBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Y29tcHV0ZVByZWZlcnJlZExvZ2lj
YWxXaWR0aHMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTk2LDcgKzk2LDcgQEAgdm9p
ZCBSZW5kZXJNYXRoTUxSYWRpY2FsT3BlcmF0b3I6OmNvbXB1dAogCiB2b2lkIFJlbmRlck1hdGhN
TFJhZGljYWxPcGVyYXRvcjo6Y29tcHV0ZUxvZ2ljYWxIZWlnaHQoTGF5b3V0VW5pdCBsb2dpY2Fs
SGVpZ2h0LCBMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVl
cyYgY29tcHV0ZWRWYWx1ZXMpIGNvbnN0CiB7Ci0gICAgaWYgKHN0eWxlKCkuZm9udENhc2NhZGUo
KS5wcmltYXJ5Rm9udERhdGEoKS5tYXRoRGF0YSgpKSB7CisgICAgaWYgKHN0eWxlKCkuZm9udENh
c2NhZGUoKS5wcmltYXJ5Rm9udCgpLm1hdGhEYXRhKCkpIHsKICAgICAgICAgUmVuZGVyTWF0aE1M
T3BlcmF0b3I6OmNvbXB1dGVMb2dpY2FsSGVpZ2h0KGxvZ2ljYWxIZWlnaHQsIGxvZ2ljYWxUb3As
IGNvbXB1dGVkVmFsdWVzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTExMSw3ICsxMTEs
NyBAQCB2b2lkIFJlbmRlck1hdGhNTFJhZGljYWxPcGVyYXRvcjo6cGFpbnQoCiAgICAgaWYgKGlu
Zm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpIHx8IGluZm8ucGhhc2UgIT0gUGFpbnRQaGFz
ZUZvcmVncm91bmQgfHwgc3R5bGUoKS52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgaWYgKHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEo
KS5tYXRoRGF0YSgpKSB7CisgICAgaWYgKHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9u
dCgpLm1hdGhEYXRhKCkpIHsKICAgICAgICAgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBhaW50KGlu
Zm8sIHBhaW50T2Zmc2V0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcAko
cmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5k
ZXJNYXRoTUxSb290LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA4LDE3ICsyMDgsMTcgQEAgdm9p
ZCBSZW5kZXJNYXRoTUxSb290Ojp1cGRhdGVTdHlsZSgpCiAgICAgTGF5b3V0VW5pdCBrZXJuQWZ0
ZXJEZWdyZWUgPSAtMTAgKiBzdHlsZSgpLmZvbnRDYXNjYWRlKCkuc2l6ZSgpIC8gMTg7CiAgICAg
bV9kZWdyZWVCb3R0b21SYWlzZVBlcmNlbnQgPSAwLjZmOwogCi0gICAgY29uc3QgYXV0byYgcHJp
bWFyeUZvbnREYXRhID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpOwot
ICAgIGlmIChhdXRvKiBtYXRoRGF0YSA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9u
dERhdGEoKS5tYXRoRGF0YSgpKSB7CisgICAgY29uc3QgYXV0byYgcHJpbWFyeUZvbnQgPSBzdHls
ZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKTsKKyAgICBpZiAoYXV0byogbWF0aERhdGEg
PSBzdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKS5tYXRoRGF0YSgpKSB7CiAgICAg
ICAgIC8vIEZJWE1FOiBtX3ZlcnRpY2FsR2FwIHNob3VsZCB1c2UgUmFkaWNhbERpc3BsYXlTdHls
ZVZlcnRpY2FsIGluIGRpc3BsYXkgbW9kZSAoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTExODczNykuCi0gICAgICAgIG1fdmVydGljYWxHYXAgPSBtYXRoRGF0YS0+Z2V0
TWF0aENvbnN0YW50KHByaW1hcnlGb250RGF0YSwgT3BlblR5cGVNYXRoRGF0YTo6UmFkaWNhbFZl
cnRpY2FsR2FwKTsKLSAgICAgICAgbV9ydWxlVGhpY2tuZXNzID0gbWF0aERhdGEtPmdldE1hdGhD
b25zdGFudChwcmltYXJ5Rm9udERhdGEsIE9wZW5UeXBlTWF0aERhdGE6OlJhZGljYWxSdWxlVGhp
Y2tuZXNzKTsKLSAgICAgICAgbV9leHRyYUFzY2VuZGVyID0gbWF0aERhdGEtPmdldE1hdGhDb25z
dGFudChwcmltYXJ5Rm9udERhdGEsIE9wZW5UeXBlTWF0aERhdGE6OlJhZGljYWxFeHRyYUFzY2Vu
ZGVyKTsKKyAgICAgICAgbV92ZXJ0aWNhbEdhcCA9IG1hdGhEYXRhLT5nZXRNYXRoQ29uc3RhbnQo
cHJpbWFyeUZvbnQsIE9wZW5UeXBlTWF0aERhdGE6OlJhZGljYWxWZXJ0aWNhbEdhcCk7CisgICAg
ICAgIG1fcnVsZVRoaWNrbmVzcyA9IG1hdGhEYXRhLT5nZXRNYXRoQ29uc3RhbnQocHJpbWFyeUZv
bnQsIE9wZW5UeXBlTWF0aERhdGE6OlJhZGljYWxSdWxlVGhpY2tuZXNzKTsKKyAgICAgICAgbV9l
eHRyYUFzY2VuZGVyID0gbWF0aERhdGEtPmdldE1hdGhDb25zdGFudChwcmltYXJ5Rm9udCwgT3Bl
blR5cGVNYXRoRGF0YTo6UmFkaWNhbEV4dHJhQXNjZW5kZXIpOwogCiAgICAgICAgIGlmICghaXNS
ZW5kZXJNYXRoTUxTcXVhcmVSb290KCkpIHsKLSAgICAgICAgICAgIGtlcm5CZWZvcmVEZWdyZWUg
PSBtYXRoRGF0YS0+Z2V0TWF0aENvbnN0YW50KHByaW1hcnlGb250RGF0YSwgT3BlblR5cGVNYXRo
RGF0YTo6UmFkaWNhbEtlcm5CZWZvcmVEZWdyZWUpOwotICAgICAgICAgICAga2VybkFmdGVyRGVn
cmVlID0gbWF0aERhdGEtPmdldE1hdGhDb25zdGFudChwcmltYXJ5Rm9udERhdGEsIE9wZW5UeXBl
TWF0aERhdGE6OlJhZGljYWxLZXJuQWZ0ZXJEZWdyZWUpOwotICAgICAgICAgICAgbV9kZWdyZWVC
b3R0b21SYWlzZVBlcmNlbnQgPSBtYXRoRGF0YS0+Z2V0TWF0aENvbnN0YW50KHByaW1hcnlGb250
RGF0YSwgT3BlblR5cGVNYXRoRGF0YTo6UmFkaWNhbERlZ3JlZUJvdHRvbVJhaXNlUGVyY2VudCk7
CisgICAgICAgICAgICBrZXJuQmVmb3JlRGVncmVlID0gbWF0aERhdGEtPmdldE1hdGhDb25zdGFu
dChwcmltYXJ5Rm9udCwgT3BlblR5cGVNYXRoRGF0YTo6UmFkaWNhbEtlcm5CZWZvcmVEZWdyZWUp
OworICAgICAgICAgICAga2VybkFmdGVyRGVncmVlID0gbWF0aERhdGEtPmdldE1hdGhDb25zdGFu
dChwcmltYXJ5Rm9udCwgT3BlblR5cGVNYXRoRGF0YTo6UmFkaWNhbEtlcm5BZnRlckRlZ3JlZSk7
CisgICAgICAgICAgICBtX2RlZ3JlZUJvdHRvbVJhaXNlUGVyY2VudCA9IG1hdGhEYXRhLT5nZXRN
YXRoQ29uc3RhbnQocHJpbWFyeUZvbnQsIE9wZW5UeXBlTWF0aERhdGE6OlJhZGljYWxEZWdyZWVC
b3R0b21SYWlzZVBlcmNlbnQpOwogICAgICAgICB9CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAJKHJldmlzaW9uIDE3ODg1
NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTExODQsNyArMTE4NCw3IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgUmVu
ZGVyU3R5bGU6Omh5cGhlblMKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgZGVwZW5kIG9uIGxv
Y2FsZS4KICAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBo
eXBoZW5NaW51c1N0cmluZywgKCZoeXBoZW5NaW51cywgMSkpOwogICAgIERFUFJFQ0FURURfREVG
SU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIGh5cGhlblN0cmluZywgKCZoeXBoZW4sIDEp
KTsKLSAgICByZXR1cm4gZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udERhdGEoKS5nbHlwaEZvckNo
YXJhY3RlcihoeXBoZW4pID8gaHlwaGVuU3RyaW5nIDogaHlwaGVuTWludXNTdHJpbmc7CisgICAg
cmV0dXJuIGZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKS5nbHlwaEZvckNoYXJhY3RlcihoeXBo
ZW4pID8gaHlwaGVuU3RyaW5nIDogaHlwaGVuTWludXNTdHJpbmc7CiB9CiAKIGNvbnN0IEF0b21p
Y1N0cmluZyYgUmVuZGVyU3R5bGU6OnRleHRFbXBoYXNpc01hcmtTdHJpbmcoKSBjb25zdApJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwCShy
ZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1RleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiUmVu
ZGVyU1ZHVGV4dC5oIgogCiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAiRm9udC5o
IgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXF1ZXN0
LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgpAQCAtNDUsNyArNDYsNiBAQAogI2luY2x1
ZGUgIlNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiU1ZHVHJhbnNmb3Jt
TGlzdC5oIgogI2luY2x1ZGUgIlNWR1VSSVJlZmVyZW5jZS5oIgotI2luY2x1ZGUgIlNpbXBsZUZv
bnREYXRhLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtU3RhdGUuaCIKICNpbmNsdWRlICJWaXNpYmxl
UG9zaXRpb24uaCIKICNpbmNsdWRlIDx3dGYvU3RhY2tTdGF0cy5oPgpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwCShyZXZpc2lv
biAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRC
b3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTksNyArNDE5LDcgQEAgVGV4dFJ1biBTVkdJbmxp
bmVUZXh0Qm94Ojpjb25zdHJ1Y3RUZXh0UgogICAgICAgICAgICAgICAgICwgZGlyZWN0aW9uKCkK
ICAgICAgICAgICAgICAgICAsIGRpck92ZXJyaWRlKCkgfHwgc3R5bGUtPnJ0bE9yZGVyaW5nKCkg
PT0gVmlzdWFsT3JkZXIgLyogZGlyZWN0aW9uYWxPdmVycmlkZSAqLyk7CiAKLSAgICBpZiAoc3R5
bGUtPmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnREYXRhKCkuaXNTVkdGb250KCkpCisgICAgaWYg
KHN0eWxlLT5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCkuaXNTVkdGb250KCkpCiAgICAgICAg
IHJ1bi5zZXRSZW5kZXJpbmdDb250ZXh0KFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0OjpjcmVh
dGUocmVuZGVyZXIoKSkpOwogCiAgICAgcnVuLmRpc2FibGVSb3VuZGluZ0hhY2tzKCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5n
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRM
YXlvdXRFbmdpbmVTcGFjaW5nLmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQxLDE2ICs0MSwxNiBAQCBTVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZzo6U1ZH
VGV4dExheW91CiBmbG9hdCBTVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZzo6Y2FsY3VsYXRlU1ZH
S2VybmluZyhib29sIGlzVmVydGljYWxUZXh0LCBjb25zdCBTVkdUZXh0TWV0cmljczo6R2x5cGgm
IGN1cnJlbnRHbHlwaCkKIHsKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotICAgIGNvbnN0IFNpbXBs
ZUZvbnREYXRhJiBmb250RGF0YSA9IG1fZm9udC5wcmltYXJ5Rm9udERhdGEoKTsKLSAgICBpZiAo
IWZvbnREYXRhLmlzU1ZHRm9udCgpKSB7CisgICAgY29uc3QgRm9udCYgZm9udCA9IG1fZm9udC5w
cmltYXJ5Rm9udCgpOworICAgIGlmICghZm9udC5pc1NWR0ZvbnQoKSkgewogICAgICAgICBtX2xh
c3RHbHlwaC5pc1ZhbGlkID0gZmFsc2U7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAg
IEFTU0VSVChmb250RGF0YS5pc0N1c3RvbUZvbnQoKSk7Ci0gICAgQVNTRVJUKGZvbnREYXRhLmlz
U1ZHRm9udCgpKTsKKyAgICBBU1NFUlQoZm9udC5pc0N1c3RvbUZvbnQoKSk7CisgICAgQVNTRVJU
KGZvbnQuaXNTVkdGb250KCkpOwogCi0gICAgYXV0byogc3ZnRm9udERhdGEgPSBzdGF0aWNfY2Fz
dDxjb25zdCBTVkdGb250RGF0YSo+KGZvbnREYXRhLnN2Z0RhdGEoKSk7CisgICAgYXV0byogc3Zn
Rm9udERhdGEgPSBzdGF0aWNfY2FzdDxjb25zdCBTVkdGb250RGF0YSo+KGZvbnQuc3ZnRGF0YSgp
KTsKICAgICBTVkdGb250RmFjZUVsZW1lbnQqIHN2Z0ZvbnRGYWNlID0gc3ZnRm9udERhdGEtPnN2
Z0ZvbnRGYWNlRWxlbWVudCgpOwogICAgIEFTU0VSVChzdmdGb250RmFjZSk7CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3MuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3MuY3BwCShyZXZp
c2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRy
aWNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAsNyBAQCBUZXh0UnVuIFNWR1RleHRN
ZXRyaWNzOjpjb25zdHJ1Y3RUZXh0UnVuCiAgICAgICAgICAgICAgICAgLCBzdHlsZS5kaXJlY3Rp
b24oKQogICAgICAgICAgICAgICAgICwgaXNPdmVycmlkZShzdHlsZS51bmljb2RlQmlkaSgpKSAv
KiBkaXJlY3Rpb25hbE92ZXJyaWRlICovKTsKIAotICAgIGlmIChzdHlsZS5mb250Q2FzY2FkZSgp
LnByaW1hcnlGb250RGF0YSgpLmlzU1ZHRm9udCgpKQorICAgIGlmIChzdHlsZS5mb250Q2FzY2Fk
ZSgpLnByaW1hcnlGb250KCkuaXNTVkdGb250KCkpCiAgICAgICAgIHJ1bi5zZXRSZW5kZXJpbmdD
b250ZXh0KFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUodGV4dCkpOwogCiAgICAg
cnVuLmRpc2FibGVSb3VuZGluZ0hhY2tzKCk7CkBAIC05MSw3ICs5MSw3IEBAIFNWR1RleHRNZXRy
aWNzIFNWR1RleHRNZXRyaWNzOjptZWFzdXJlQ2gKIAogU1ZHVGV4dE1ldHJpY3M6OlNWR1RleHRN
ZXRyaWNzKFJlbmRlclNWR0lubGluZVRleHQmIHRleHQsIHVuc2lnbmVkIHBvc2l0aW9uLCB1bnNp
Z25lZCBsZW5ndGgsIGZsb2F0IHdpZHRoLCBjb25zdCBTdHJpbmcmIGdseXBoTmFtZSkKIHsKLSAg
ICBib29sIG5lZWRzQ29udGV4dCA9IHRleHQuc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlG
b250RGF0YSgpLmlzU1ZHRm9udCgpOworICAgIGJvb2wgbmVlZHNDb250ZXh0ID0gdGV4dC5zdHls
ZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKS5pc1NWR0ZvbnQoKTsKICAgICBmbG9hdCBz
Y2FsaW5nRmFjdG9yID0gdGV4dC5zY2FsaW5nRmFjdG9yKCk7CiAgICAgQVNTRVJUKHNjYWxpbmdG
YWN0b3IpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5S
ZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gMTc4ODU3KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDE4ICszNywxOCBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLXN0YXRpYyBpbmxpbmUgY29uc3QgU1ZHRm9udERhdGEqIHN2Z0ZvbnRBbmRGb250
RmFjZUVsZW1lbnRGb3JGb250RGF0YShjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsIFNW
R0ZvbnRGYWNlRWxlbWVudComIGZvbnRGYWNlLCBTVkdGb250RWxlbWVudComIGZvbnQpCitzdGF0
aWMgaW5saW5lIGNvbnN0IFNWR0ZvbnREYXRhKiBzdmdGb250QW5kRm9udEZhY2VFbGVtZW50Rm9y
Rm9udERhdGEoY29uc3QgRm9udCogZm9udCwgU1ZHRm9udEZhY2VFbGVtZW50KiYgc3ZnRm9udEZh
Y2VFbGVtZW50LCBTVkdGb250RWxlbWVudComIHN2Z0ZvbnRFbGVtZW50KQogewotICAgIEFTU0VS
VChmb250RGF0YSk7Ci0gICAgQVNTRVJUKGZvbnREYXRhLT5pc0N1c3RvbUZvbnQoKSk7Ci0gICAg
QVNTRVJUKGZvbnREYXRhLT5pc1NWR0ZvbnQoKSk7CisgICAgQVNTRVJUKGZvbnQpOworICAgIEFT
U0VSVChmb250LT5pc0N1c3RvbUZvbnQoKSk7CisgICAgQVNTRVJUKGZvbnQtPmlzU1ZHRm9udCgp
KTsKIAotICAgIGF1dG8qIHN2Z0ZvbnREYXRhID0gc3RhdGljX2Nhc3Q8Y29uc3QgU1ZHRm9udERh
dGEqPihmb250RGF0YS0+c3ZnRGF0YSgpKTsKKyAgICBhdXRvKiBzdmdGb250RGF0YSA9IHN0YXRp
Y19jYXN0PGNvbnN0IFNWR0ZvbnREYXRhKj4oZm9udC0+c3ZnRGF0YSgpKTsKIAotICAgIGZvbnRG
YWNlID0gc3ZnRm9udERhdGEtPnN2Z0ZvbnRGYWNlRWxlbWVudCgpOwotICAgIEFTU0VSVChmb250
RmFjZSk7CisgICAgc3ZnRm9udEZhY2VFbGVtZW50ID0gc3ZnRm9udERhdGEtPnN2Z0ZvbnRGYWNl
RWxlbWVudCgpOworICAgIEFTU0VSVChzdmdGb250RmFjZUVsZW1lbnQpOwogCi0gICAgZm9udCA9
IGZvbnRGYWNlLT5hc3NvY2lhdGVkRm9udEVsZW1lbnQoKTsKKyAgICBzdmdGb250RWxlbWVudCA9
IHN2Z0ZvbnRGYWNlRWxlbWVudC0+YXNzb2NpYXRlZEZvbnRFbGVtZW50KCk7CiAgICAgcmV0dXJu
IHN2Z0ZvbnREYXRhOwogfQogCkBAIC02MSwyMSArNjEsMjEgQEAgZmxvYXQgU1ZHVGV4dFJ1blJl
bmRlcmluZ0NvbnRleHQ6OmZsb2F0VwogICAgIHJldHVybiBpdC5ydW5XaWR0aFNvRmFyKCk7CiB9
CiAKLWJvb2wgU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmFwcGx5U1ZHS2VybmluZyhjb25z
dCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsIFdpZHRoSXRlcmF0b3ImIGl0ZXJhdG9yLCBHbHlw
aEJ1ZmZlciogZ2x5cGhCdWZmZXIsIGludCBmcm9tKSBjb25zdAorYm9vbCBTVkdUZXh0UnVuUmVu
ZGVyaW5nQ29udGV4dDo6YXBwbHlTVkdLZXJuaW5nKGNvbnN0IEZvbnQqIGZvbnQsIFdpZHRoSXRl
cmF0b3ImIGl0ZXJhdG9yLCBHbHlwaEJ1ZmZlciogZ2x5cGhCdWZmZXIsIGludCBmcm9tKSBjb25z
dAogewogICAgIEFTU0VSVChnbHlwaEJ1ZmZlcik7CiAgICAgQVNTRVJUKGdseXBoQnVmZmVyLT5z
aXplKCkgPiAxKTsKICAgICBTVkdGb250RWxlbWVudCogZm9udEVsZW1lbnQgPSAwOwogICAgIFNW
R0ZvbnRGYWNlRWxlbWVudCogZm9udEZhY2VFbGVtZW50ID0gMDsKIAotICAgIHN2Z0ZvbnRBbmRG
b250RmFjZUVsZW1lbnRGb3JGb250RGF0YShmb250RGF0YSwgZm9udEZhY2VFbGVtZW50LCBmb250
RWxlbWVudCk7CisgICAgc3ZnRm9udEFuZEZvbnRGYWNlRWxlbWVudEZvckZvbnREYXRhKGZvbnQs
IGZvbnRGYWNlRWxlbWVudCwgZm9udEVsZW1lbnQpOwogICAgIGlmICghZm9udEVsZW1lbnQgfHwg
IWZvbnRGYWNlRWxlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKGZvbnRF
bGVtZW50LT5ob3Jpem9udGFsS2VybmluZ01hcElzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKLSAgICBmbG9hdCBzY2FsZSA9IHNjYWxlRW1Ub1VuaXRzKGZvbnREYXRhLT5wbGF0Zm9y
bURhdGEoKS5zaXplKCksIGZvbnRGYWNlRWxlbWVudC0+dW5pdHNQZXJFbSgpKTsKKyAgICBmbG9h
dCBzY2FsZSA9IHNjYWxlRW1Ub1VuaXRzKGZvbnQtPnBsYXRmb3JtRGF0YSgpLnNpemUoKSwgZm9u
dEZhY2VFbGVtZW50LT51bml0c1BlckVtKCkpOwogCiAgICAgU3RyaW5nIGxhc3RHbHlwaE5hbWU7
CiAgICAgU3RyaW5nIGxhc3RVbmljb2RlU3RyaW5nOwpAQCAtMjA1LDcgKzIwNSw3IEBAIHZvaWQg
U1ZHR2x5cGhUb1BhdGhUcmFuc2xhdG9yOjphZHZhbmNlKCkKICAgICAgICAgfQogCiAgICAgICAg
ICsrbV9pbmRleDsKLSAgICAgICAgaWYgKG1faW5kZXggPj0gbV9zdG9wcGluZ1BvaW50IHx8ICFt
X2dseXBoQnVmZmVyLmZvbnREYXRhQXQobV9pbmRleCktPmlzU1ZHRm9udCgpKQorICAgICAgICBp
ZiAobV9pbmRleCA+PSBtX3N0b3BwaW5nUG9pbnQgfHwgIW1fZ2x5cGhCdWZmZXIuZm9udEF0KG1f
aW5kZXgpLT5pc1NWR0ZvbnQoKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBtX2dseXBo
ID0gbV9nbHlwaEJ1ZmZlci5nbHlwaEF0KG1faW5kZXgpOwogICAgICAgICBpZiAoIW1fZ2x5cGgp
CkBAIC0yNDQsMTIgKzI0NCwxMiBAQCBjbGFzcyBEdW1teUdseXBoVG9QYXRoVHJhbnNsYXRvciBm
aW5hbCA6CiAgICAgfQogfTsKIAotc3RkOjp1bmlxdWVfcHRyPEdseXBoVG9QYXRoVHJhbnNsYXRv
cj4gU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUdseXBoVG9QYXRoVHJhbnNsYXRv
cihjb25zdCBTaW1wbGVGb250RGF0YSYgZm9udERhdGEsIGNvbnN0IFRleHRSdW4qIHRleHRSdW4s
IGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgaW50IGZyb20sIGludCBudW1HbHlwaHMs
IGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAorc3RkOjp1bmlxdWVfcHRyPEdseXBoVG9Q
YXRoVHJhbnNsYXRvcj4gU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUdseXBoVG9Q
YXRoVHJhbnNsYXRvcihjb25zdCBGb250JiBmb250LCBjb25zdCBUZXh0UnVuKiB0ZXh0UnVuLCBj
b25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBj
b25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKIHsKICAgICBTVkdGb250RWxlbWVudCogZm9u
dEVsZW1lbnQgPSBudWxscHRyOwogICAgIFNWR0ZvbnRGYWNlRWxlbWVudCogZm9udEZhY2VFbGVt
ZW50ID0gbnVsbHB0cjsKIAotICAgIGNvbnN0IFNWR0ZvbnREYXRhKiBzdmdGb250RGF0YSA9IHN2
Z0ZvbnRBbmRGb250RmFjZUVsZW1lbnRGb3JGb250RGF0YSgmZm9udERhdGEsIGZvbnRGYWNlRWxl
bWVudCwgZm9udEVsZW1lbnQpOworICAgIGNvbnN0IFNWR0ZvbnREYXRhKiBzdmdGb250RGF0YSA9
IHN2Z0ZvbnRBbmRGb250RmFjZUVsZW1lbnRGb3JGb250RGF0YSgmZm9udCwgZm9udEZhY2VFbGVt
ZW50LCBmb250RWxlbWVudCk7CiAgICAgaWYgKCFmb250RWxlbWVudCB8fCAhZm9udEZhY2VFbGVt
ZW50KQogICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxEdW1teUdseXBoVG9QYXRoVHJh
bnNsYXRvcj4oKTsKIApAQCAtMjU3LDEyICsyNTcsMTIgQEAgc3RkOjp1bmlxdWVfcHRyPEdseXBo
VG9QYXRoVHJhbnNsYXRvcj4gUwogICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9IGVsZW1lbnRSZW5k
ZXJlci5zdHlsZSgpOwogICAgIGJvb2wgaXNWZXJ0aWNhbFRleHQgPSBzdHlsZS5zdmdTdHlsZSgp
LmlzVmVydGljYWxXcml0aW5nTW9kZSgpOwogCi0gICAgZmxvYXQgc2NhbGUgPSBzY2FsZUVtVG9V
bml0cyhmb250RGF0YS5wbGF0Zm9ybURhdGEoKS5zaXplKCksIGZvbnRGYWNlRWxlbWVudC0+dW5p
dHNQZXJFbSgpKTsKKyAgICBmbG9hdCBzY2FsZSA9IHNjYWxlRW1Ub1VuaXRzKGZvbnQucGxhdGZv
cm1EYXRhKCkuc2l6ZSgpLCBmb250RmFjZUVsZW1lbnQtPnVuaXRzUGVyRW0oKSk7CiAKICAgICBy
ZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxTVkdHbHlwaFRvUGF0aFRyYW5zbGF0b3I+KHRleHRSdW4s
IGdseXBoQnVmZmVyLCBwb2ludCwgKnN2Z0ZvbnREYXRhLCAqZm9udEVsZW1lbnQsIGZyb20sIG51
bUdseXBocywgc2NhbGUsIGlzVmVydGljYWxUZXh0KTsKIH0KIAotdm9pZCBTVkdUZXh0UnVuUmVu
ZGVyaW5nQ29udGV4dDo6ZHJhd1NWR0dseXBocyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVm
ZmVyLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNv
bnN0Cit2b2lkIFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0OjpkcmF3U1ZHR2x5cGhzKEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRm9udCogZm9udCwgY29uc3QgR2x5cGhCdWZmZXIm
IGdseXBoQnVmZmVyLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQpIGNvbnN0CiB7CiAgICAgYXV0byBhY3RpdmVQYWludGluZ1Jlc291cmNlID0gdGhpcy0+
YWN0aXZlUGFpbnRpbmdSZXNvdXJjZSgpOwogICAgIGlmICghYWN0aXZlUGFpbnRpbmdSZXNvdXJj
ZSkgewpAQCAtMjc4LDcgKzI3OCw3IEBAIHZvaWQgU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6
OmRyYXdTVkcKICAgICBBU1NFUlQoYWN0aXZlUGFpbnRpbmdSZXNvdXJjZSk7CiAKICAgICBSZW5k
ZXJTVkdSZXNvdXJjZU1vZGUgcmVzb3VyY2VNb2RlID0gY29udGV4dC0+dGV4dERyYXdpbmdNb2Rl
KCkgPT0gVGV4dE1vZGVTdHJva2UgPyBBcHBseVRvU3Ryb2tlTW9kZSA6IEFwcGx5VG9GaWxsTW9k
ZTsKLSAgICBmb3IgKGF1dG8gdHJhbnNsYXRvciA9IGNyZWF0ZUdseXBoVG9QYXRoVHJhbnNsYXRv
cigqZm9udERhdGEsIG51bGxwdHIsIGdseXBoQnVmZmVyLCBmcm9tLCBudW1HbHlwaHMsIHBvaW50
KTsgdHJhbnNsYXRvci0+Y29udGFpbnNNb3JlUGF0aHMoKTsgdHJhbnNsYXRvci0+YWR2YW5jZSgp
KSB7CisgICAgZm9yIChhdXRvIHRyYW5zbGF0b3IgPSBjcmVhdGVHbHlwaFRvUGF0aFRyYW5zbGF0
b3IoKmZvbnQsIG51bGxwdHIsIGdseXBoQnVmZmVyLCBmcm9tLCBudW1HbHlwaHMsIHBvaW50KTsg
dHJhbnNsYXRvci0+Y29udGFpbnNNb3JlUGF0aHMoKTsgdHJhbnNsYXRvci0+YWR2YW5jZSgpKSB7
CiAgICAgICAgIFBhdGggZ2x5cGhQYXRoID0gdHJhbnNsYXRvci0+cGF0aCgpOwogICAgICAgICBp
ZiAoYWN0aXZlUGFpbnRpbmdSZXNvdXJjZS0+YXBwbHlSZXNvdXJjZShlbGVtZW50UmVuZGVyZXIs
IHN0eWxlLCBjb250ZXh0LCByZXNvdXJjZU1vZGUpKSB7CiAgICAgICAgICAgICBmbG9hdCBzdHJv
a2VUaGlja25lc3MgPSBjb250ZXh0LT5zdHJva2VUaGlja25lc3MoKTsKQEAgLTI5MiwxMyArMjky
LDEzIEBAIHZvaWQgU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmRyYXdTVkcKIAogc3RhdGlj
IEdseXBoRGF0YSBtaXNzaW5nR2x5cGhGb3JGb250KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250KQog
ewotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhJiBwcmltYXJ5Rm9udERhdGEgPSBmb250LnByaW1h
cnlGb250RGF0YSgpOwotICAgIGlmICghcHJpbWFyeUZvbnREYXRhLmlzU1ZHRm9udCgpKQorICAg
IGNvbnN0IEZvbnQmIHByaW1hcnlGb250ID0gZm9udC5wcmltYXJ5Rm9udCgpOworICAgIGlmICgh
cHJpbWFyeUZvbnQuaXNTVkdGb250KCkpCiAgICAgICAgIHJldHVybiBHbHlwaERhdGEoKTsKICAg
ICBTVkdGb250RWxlbWVudCogZm9udEVsZW1lbnQ7CiAgICAgU1ZHRm9udEZhY2VFbGVtZW50KiBm
b250RmFjZUVsZW1lbnQ7Ci0gICAgc3ZnRm9udEFuZEZvbnRGYWNlRWxlbWVudEZvckZvbnREYXRh
KCZwcmltYXJ5Rm9udERhdGEsIGZvbnRGYWNlRWxlbWVudCwgZm9udEVsZW1lbnQpOwotICAgIHJl
dHVybiBHbHlwaERhdGEoZm9udEVsZW1lbnQtPm1pc3NpbmdHbHlwaCgpLCAmcHJpbWFyeUZvbnRE
YXRhKTsKKyAgICBzdmdGb250QW5kRm9udEZhY2VFbGVtZW50Rm9yRm9udERhdGEoJnByaW1hcnlG
b250LCBmb250RmFjZUVsZW1lbnQsIGZvbnRFbGVtZW50KTsKKyAgICByZXR1cm4gR2x5cGhEYXRh
KGZvbnRFbGVtZW50LT5taXNzaW5nR2x5cGgoKSwgJnByaW1hcnlGb250KTsKIH0KIAogR2x5cGhE
YXRhIFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0OjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoY29u
c3QgRm9udENhc2NhZGUmIGZvbnQsIFdpZHRoSXRlcmF0b3ImIGl0ZXJhdG9yLCBVQ2hhcjMyIGNo
YXJhY3RlciwgYm9vbCBtaXJyb3IsIGludCBjdXJyZW50Q2hhcmFjdGVyLCB1bnNpZ25lZCYgYWR2
YW5jZUxlbmd0aCwgU3RyaW5nJiBub3JtYWxpemVkU3BhY2VzU3RyaW5nQ2FjaGUpCkBAIC0zMDcs
MjMgKzMwNywyMyBAQCBHbHlwaERhdGEgU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmdsCiAg
ICAgaWYgKCFnbHlwaERhdGEuZ2x5cGgpCiAgICAgICAgIHJldHVybiBtaXNzaW5nR2x5cGhGb3JG
b250KGZvbnQpOwogCi0gICAgQVNTRVJUKGdseXBoRGF0YS5mb250RGF0YSk7CisgICAgQVNTRVJU
KGdseXBoRGF0YS5mb250KTsKIAogICAgIC8vIENoYXJhY3RlcnMgZW5jbG9zZWQgYnkgYW4gPGFs
dEdseXBoPiBlbGVtZW50LCBtYXkgbm90IGJlIHJlZ2lzdGVyZWQgaW4gdGhlIEdseXBoUGFnZS4K
LSAgICBpZiAoIWdseXBoRGF0YS5mb250RGF0YS0+aXNTVkdGb250KCkpIHsKKyAgICBpZiAoIWds
eXBoRGF0YS5mb250LT5pc1NWR0ZvbnQoKSkgewogICAgICAgICBhdXRvJiBlbGVtZW50UmVuZGVy
ZXIgPSBpczxSZW5kZXJFbGVtZW50PihyZW5kZXJlcigpKSA/IGRvd25jYXN0PFJlbmRlckVsZW1l
bnQ+KHJlbmRlcmVyKCkpIDogKnJlbmRlcmVyKCkucGFyZW50KCk7CiAgICAgICAgIGlmIChFbGVt
ZW50KiBwYXJlbnRSZW5kZXJlckVsZW1lbnQgPSBlbGVtZW50UmVuZGVyZXIuZWxlbWVudCgpKSB7
CiAgICAgICAgICAgICBpZiAoaXM8U1ZHQWx0R2x5cGhFbGVtZW50PigqcGFyZW50UmVuZGVyZXJF
bGVtZW50KSkKLSAgICAgICAgICAgICAgICBnbHlwaERhdGEuZm9udERhdGEgPSAmZm9udC5wcmlt
YXJ5Rm9udERhdGEoKTsKKyAgICAgICAgICAgICAgICBnbHlwaERhdGEuZm9udCA9ICZmb250LnBy
aW1hcnlGb250KCk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoIWdseXBoRGF0YS5mb250
RGF0YS0+aXNTVkdGb250KCkpCisgICAgaWYgKCFnbHlwaERhdGEuZm9udC0+aXNTVkdGb250KCkp
CiAgICAgICAgIHJldHVybiBnbHlwaERhdGE7CiAKICAgICBTVkdGb250RWxlbWVudCogZm9udEVs
ZW1lbnQgPSBudWxscHRyOwogICAgIFNWR0ZvbnRGYWNlRWxlbWVudCogZm9udEZhY2VFbGVtZW50
ID0gbnVsbHB0cjsKLSAgICBjb25zdCBTVkdGb250RGF0YSogc3ZnRm9udERhdGEgPSBzdmdGb250
QW5kRm9udEZhY2VFbGVtZW50Rm9yRm9udERhdGEoZ2x5cGhEYXRhLmZvbnREYXRhLCBmb250RmFj
ZUVsZW1lbnQsIGZvbnRFbGVtZW50KTsKKyAgICBjb25zdCBTVkdGb250RGF0YSogc3ZnRm9udERh
dGEgPSBzdmdGb250QW5kRm9udEZhY2VFbGVtZW50Rm9yRm9udERhdGEoZ2x5cGhEYXRhLmZvbnQs
IGZvbnRGYWNlRWxlbWVudCwgZm9udEVsZW1lbnQpOwogICAgIGlmICghc3ZnRm9udERhdGEpCiAg
ICAgICAgIHJldHVybiBnbHlwaERhdGE7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmgJKHJldmlz
aW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJl
bmRlcmluZ0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsOSArNDMsOSBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzZXRBY3RpdmVQYWludGluZ1Jlc291cmNlKFJlbmRlclNWR1Jlc291cmNlKiBv
YmplY3QpIHsgbV9hY3RpdmVQYWludGluZ1Jlc291cmNlID0gb2JqZWN0OyB9CiAKICAgICB2aXJ0
dWFsIEdseXBoRGF0YSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIoY29uc3QgRm9udENhc2NhZGUmLCBX
aWR0aEl0ZXJhdG9yJiwgVUNoYXIzMiBjaGFyYWN0ZXIsIGJvb2wgbWlycm9yLCBpbnQgY3VycmVu
dENoYXJhY3RlciwgdW5zaWduZWQmIGFkdmFuY2VMZW5ndGgsIFN0cmluZyYgbm9ybWFsaXplZFNw
YWNlc1N0cmluZ0NhY2hlKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1NWR0dseXBo
cyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBTaW1wbGVGb250RGF0YSosIGNvbnN0IEdseXBoQnVm
ZmVyJiwgaW50IGZyb20sIGludCB0bywgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0IG92ZXJyaWRl
OworICAgIHZpcnR1YWwgdm9pZCBkcmF3U1ZHR2x5cGhzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0
IEZvbnQqLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBmcm9tLCBpbnQgdG8sIGNvbnN0IEZsb2F0
UG9pbnQmKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGZsb2F0IGZsb2F0V2lkdGhVc2lu
Z1NWR0ZvbnQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgaW50JiBjaGFyc0Nv
bnN1bWVkLCBTdHJpbmcmIGdseXBoTmFtZSkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBi
b29sIGFwcGx5U1ZHS2VybmluZyhjb25zdCBTaW1wbGVGb250RGF0YSosIFdpZHRoSXRlcmF0b3Im
LCBHbHlwaEJ1ZmZlciosIGludCBmcm9tKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJv
b2wgYXBwbHlTVkdLZXJuaW5nKGNvbnN0IEZvbnQqLCBXaWR0aEl0ZXJhdG9yJiwgR2x5cGhCdWZm
ZXIqLCBpbnQgZnJvbSkgY29uc3Qgb3ZlcnJpZGU7CiAjZW5kaWYKIAogcHJpdmF0ZToKQEAgLTYw
LDcgKzYwLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIH5TVkdUZXh0UnVuUmVuZGVyaW5nQ29u
dGV4dCgpIHsgfQogCiAjaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICB2aXJ0dWFsIHN0ZDo6dW5p
cXVlX3B0cjxHbHlwaFRvUGF0aFRyYW5zbGF0b3I+IGNyZWF0ZUdseXBoVG9QYXRoVHJhbnNsYXRv
cihjb25zdCBTaW1wbGVGb250RGF0YSYsIGNvbnN0IFRleHRSdW4qLCBjb25zdCBHbHlwaEJ1ZmZl
ciYsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Qgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8R2x5cGhUb1BhdGhUcmFuc2xhdG9y
PiBjcmVhdGVHbHlwaFRvUGF0aFRyYW5zbGF0b3IoY29uc3QgRm9udCYsIGNvbnN0IFRleHRSdW4q
LCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9h
dFBvaW50JikgY29uc3Qgb3ZlcnJpZGU7CiAjZW5kaWYKIAogICAgIFJlbmRlck9iamVjdCYgbV9y
ZW5kZXJlcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RGF0YS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnREYXRhLmNwcAkocmV2aXNpb24gMTc4
ODU3KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnREYXRhLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTcsMTUgKzU3LDE1IEBAIFNWR0ZvbnREYXRhOjpTVkdGb250RGF0YShTVkdGb250RmFj
ZUVsZW0KICAgICBBU1NFUlRfQVJHKGZvbnRGYWNlRWxlbWVudCwgZm9udEZhY2VFbGVtZW50KTsK
IH0KIAotdm9pZCBTVkdGb250RGF0YTo6aW5pdGlhbGl6ZUZvbnREYXRhKFNpbXBsZUZvbnREYXRh
KiBmb250RGF0YSwgZmxvYXQgZm9udFNpemUpCit2b2lkIFNWR0ZvbnREYXRhOjppbml0aWFsaXpl
Rm9udChGb250KiBmb250LCBmbG9hdCBmb250U2l6ZSkKIHsKLSAgICBBU1NFUlQoZm9udERhdGEp
OworICAgIEFTU0VSVChmb250KTsKIAogICAgIFNWR0ZvbnRGYWNlRWxlbWVudCogc3ZnRm9udEZh
Y2VFbGVtZW50ID0gdGhpcy0+c3ZnRm9udEZhY2VFbGVtZW50KCk7CiAgICAgQVNTRVJUKHN2Z0Zv
bnRGYWNlRWxlbWVudCk7CiAKLSAgICBmb250RGF0YS0+c2V0WmVyb1dpZHRoU3BhY2VHbHlwaCgw
KTsKLSAgICBmb250RGF0YS0+ZGV0ZXJtaW5lUGl0Y2goKTsKKyAgICBmb250LT5zZXRaZXJvV2lk
dGhTcGFjZUdseXBoKDApOworICAgIGZvbnQtPmRldGVybWluZVBpdGNoKCk7CiAKICAgICB1bnNp
Z25lZCB1bml0c1BlckVtID0gc3ZnRm9udEZhY2VFbGVtZW50LT51bml0c1BlckVtKCk7CiAgICAg
ZmxvYXQgc2NhbGUgPSBzY2FsZUVtVG9Vbml0cyhmb250U2l6ZSwgdW5pdHNQZXJFbSk7CkBAIC03
NCwxNSArNzQsMTUgQEAgdm9pZCBTVkdGb250RGF0YTo6aW5pdGlhbGl6ZUZvbnREYXRhKFNpbQog
ICAgIGZsb2F0IGRlc2NlbnQgPSBzdmdGb250RmFjZUVsZW1lbnQtPmRlc2NlbnQoKSAqIHNjYWxl
OwogICAgIGZsb2F0IGxpbmVHYXAgPSAwLjFmICogZm9udFNpemU7CiAKLSAgICBjb25zdCBHbHlw
aFBhZ2UqIGdseXBoUGFnZVplcm8gPSBmb250RGF0YS0+Z2x5cGhQYWdlKDApOworICAgIGNvbnN0
IEdseXBoUGFnZSogZ2x5cGhQYWdlWmVybyA9IGZvbnQtPmdseXBoUGFnZSgwKTsKIAogICAgIGlm
ICgheEhlaWdodCAmJiBnbHlwaFBhZ2VaZXJvKSB7CiAgICAgICAgIC8vIEZhbGxiYWNrIGlmIHhf
aGVpZ2h0QXR0ciBpcyBub3Qgc3BlY2lmaWVkIGZvciB0aGUgZm9udCBlbGVtZW50LgogICAgICAg
ICBHbHlwaCBsZXR0ZXJYR2x5cGggPSBnbHlwaFBhZ2VaZXJvLT5nbHlwaERhdGFGb3JDaGFyYWN0
ZXIoJ3gnKS5nbHlwaDsKLSAgICAgICAgeEhlaWdodCA9IGxldHRlclhHbHlwaCA/IGZvbnREYXRh
LT53aWR0aEZvckdseXBoKGxldHRlclhHbHlwaCkgOiAyICogYXNjZW50IC8gMzsKKyAgICAgICAg
eEhlaWdodCA9IGxldHRlclhHbHlwaCA/IGZvbnQtPndpZHRoRm9yR2x5cGgobGV0dGVyWEdseXBo
KSA6IDIgKiBhc2NlbnQgLyAzOwogICAgIH0KIAotICAgIEZvbnRNZXRyaWNzJiBmb250TWV0cmlj
cyA9IGZvbnREYXRhLT5mb250TWV0cmljcygpOworICAgIEZvbnRNZXRyaWNzJiBmb250TWV0cmlj
cyA9IGZvbnQtPmZvbnRNZXRyaWNzKCk7CiAgICAgZm9udE1ldHJpY3Muc2V0VW5pdHNQZXJFbSh1
bml0c1BlckVtKTsKICAgICBmb250TWV0cmljcy5zZXRBc2NlbnQoYXNjZW50KTsKICAgICBmb250
TWV0cmljcy5zZXREZXNjZW50KGRlc2NlbnQpOwpAQCAtOTEsMjUgKzkxLDI1IEBAIHZvaWQgU1ZH
Rm9udERhdGE6OmluaXRpYWxpemVGb250RGF0YShTaW0KICAgICBmb250TWV0cmljcy5zZXRYSGVp
Z2h0KHhIZWlnaHQpOwogCiAgICAgaWYgKCFnbHlwaFBhZ2VaZXJvKSB7Ci0gICAgICAgIGZvbnRE
YXRhLT5zZXRTcGFjZUdseXBoKDApOwotICAgICAgICBmb250RGF0YS0+c2V0U3BhY2VXaWR0aHMo
MCk7Ci0gICAgICAgIGZvbnREYXRhLT5zZXRBdmdDaGFyV2lkdGgoMCk7Ci0gICAgICAgIGZvbnRE
YXRhLT5zZXRNYXhDaGFyV2lkdGgoYXNjZW50KTsKKyAgICAgICAgZm9udC0+c2V0U3BhY2VHbHlw
aCgwKTsKKyAgICAgICAgZm9udC0+c2V0U3BhY2VXaWR0aHMoMCk7CisgICAgICAgIGZvbnQtPnNl
dEF2Z0NoYXJXaWR0aCgwKTsKKyAgICAgICAgZm9udC0+c2V0TWF4Q2hhcldpZHRoKGFzY2VudCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICAvLyBDYWxjdWxhdGUgc3BhY2Ugd2lkdGgu
CiAgICAgR2x5cGggc3BhY2VHbHlwaCA9IGdseXBoUGFnZVplcm8tPmdseXBoRGF0YUZvckNoYXJh
Y3RlcignICcpLmdseXBoOwotICAgIGZvbnREYXRhLT5zZXRTcGFjZUdseXBoKHNwYWNlR2x5cGgp
OwotICAgIGZvbnREYXRhLT5zZXRTcGFjZVdpZHRocyhmb250RGF0YS0+d2lkdGhGb3JHbHlwaChz
cGFjZUdseXBoKSk7CisgICAgZm9udC0+c2V0U3BhY2VHbHlwaChzcGFjZUdseXBoKTsKKyAgICBm
b250LT5zZXRTcGFjZVdpZHRocyhmb250LT53aWR0aEZvckdseXBoKHNwYWNlR2x5cGgpKTsKIAog
ICAgIC8vIEVzdGltYXRlIGF2ZXJhZ2UgY2hhcmFjdGVyIHdpZHRoLgogICAgIEdseXBoIG51bWVy
YWxaZXJvR2x5cGggPSBnbHlwaFBhZ2VaZXJvLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoJzAnKS5n
bHlwaDsKLSAgICBmb250RGF0YS0+c2V0QXZnQ2hhcldpZHRoKG51bWVyYWxaZXJvR2x5cGggPyBm
b250RGF0YS0+d2lkdGhGb3JHbHlwaChudW1lcmFsWmVyb0dseXBoKSA6IGZvbnREYXRhLT5zcGFj
ZVdpZHRoKCkpOworICAgIGZvbnQtPnNldEF2Z0NoYXJXaWR0aChudW1lcmFsWmVyb0dseXBoID8g
Zm9udC0+d2lkdGhGb3JHbHlwaChudW1lcmFsWmVyb0dseXBoKSA6IGZvbnQtPnNwYWNlV2lkdGgo
KSk7CiAKICAgICAvLyBFc3RpbWF0ZSBtYXhpbXVtIGNoYXJhY3RlciB3aWR0aC4KICAgICBHbHlw
aCBsZXR0ZXJXR2x5cGggPSBnbHlwaFBhZ2VaZXJvLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoJ1cn
KS5nbHlwaDsKLSAgICBmb250RGF0YS0+c2V0TWF4Q2hhcldpZHRoKGxldHRlcldHbHlwaCA/IGZv
bnREYXRhLT53aWR0aEZvckdseXBoKGxldHRlcldHbHlwaCkgOiBhc2NlbnQpOworICAgIGZvbnQt
PnNldE1heENoYXJXaWR0aChsZXR0ZXJXR2x5cGggPyBmb250LT53aWR0aEZvckdseXBoKGxldHRl
cldHbHlwaCkgOiBhc2NlbnQpOwogfQogCiBmbG9hdCBTVkdGb250RGF0YTo6d2lkdGhGb3JTVkdH
bHlwaChHbHlwaCBnbHlwaCwgZmxvYXQgZm9udFNpemUpIGNvbnN0CkBAIC0yMDgsMTAgKzIwOCwx
MCBAQCBib29sIFNWR0ZvbnREYXRhOjphcHBseVNWR0dseXBoU2VsZWN0aW9uCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi1ib29sIFNWR0ZvbnREYXRhOjpmaWxsU1ZHR2x5cGhQYWdlKEdseXBoUGFn
ZSogcGFnZVRvRmlsbCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBi
dWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnRE
YXRhKSBjb25zdAorYm9vbCBTVkdGb250RGF0YTo6ZmlsbFNWR0dseXBoUGFnZShHbHlwaFBhZ2Uq
IHBhZ2VUb0ZpbGwsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVm
ZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IEZvbnQqIGZvbnQpIGNvbnN0CiB7Ci0g
ICAgQVNTRVJUKGZvbnREYXRhLT5pc0N1c3RvbUZvbnQoKSk7Ci0gICAgQVNTRVJUKGZvbnREYXRh
LT5pc1NWR0ZvbnQoKSk7CisgICAgQVNTRVJUKGZvbnQtPmlzQ3VzdG9tRm9udCgpKTsKKyAgICBB
U1NFUlQoZm9udC0+aXNTVkdGb250KCkpOwogCiAgICAgU1ZHRm9udEZhY2VFbGVtZW50KiBmb250
RmFjZUVsZW1lbnQgPSB0aGlzLT5zdmdGb250RmFjZUVsZW1lbnQoKTsKICAgICBBU1NFUlQoZm9u
dEZhY2VFbGVtZW50KTsKQEAgLTIyMCwxMyArMjIwLDEzIEBAIGJvb2wgU1ZHRm9udERhdGE6OmZp
bGxTVkdHbHlwaFBhZ2UoR2x5cGgKICAgICBBU1NFUlQoZm9udEVsZW1lbnQpOwogCiAgICAgaWYg
KGJ1ZmZlckxlbmd0aCA9PSBsZW5ndGgpCi0gICAgICAgIHJldHVybiBmaWxsQk1QR2x5cGhzKGZv
bnRFbGVtZW50LCBwYWdlVG9GaWxsLCBvZmZzZXQsIGxlbmd0aCwgYnVmZmVyLCBmb250RGF0YSk7
CisgICAgICAgIHJldHVybiBmaWxsQk1QR2x5cGhzKGZvbnRFbGVtZW50LCBwYWdlVG9GaWxsLCBv
ZmZzZXQsIGxlbmd0aCwgYnVmZmVyLCBmb250KTsKIAogICAgIEFTU0VSVChidWZmZXJMZW5ndGgg
PT0gMiAqIGxlbmd0aCk7Ci0gICAgcmV0dXJuIGZpbGxOb25CTVBHbHlwaHMoZm9udEVsZW1lbnQs
IHBhZ2VUb0ZpbGwsIG9mZnNldCwgbGVuZ3RoLCBidWZmZXIsIGZvbnREYXRhKTsKKyAgICByZXR1
cm4gZmlsbE5vbkJNUEdseXBocyhmb250RWxlbWVudCwgcGFnZVRvRmlsbCwgb2Zmc2V0LCBsZW5n
dGgsIGJ1ZmZlciwgZm9udCk7CiB9CiAKLWJvb2wgU1ZHRm9udERhdGE6OmZpbGxCTVBHbHlwaHMo
U1ZHRm9udEVsZW1lbnQqIGZvbnRFbGVtZW50LCBHbHlwaFBhZ2UqIHBhZ2VUb0ZpbGwsIHVuc2ln
bmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCBjb25zdCBTaW1wbGVG
b250RGF0YSogZm9udERhdGEpIGNvbnN0Citib29sIFNWR0ZvbnREYXRhOjpmaWxsQk1QR2x5cGhz
KFNWR0ZvbnRFbGVtZW50KiBmb250RWxlbWVudCwgR2x5cGhQYWdlKiBwYWdlVG9GaWxsLCB1bnNp
Z25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgY29uc3QgRm9udCog
Zm9udCkgY29uc3QKIHsKICAgICBib29sIGhhdmVHbHlwaHMgPSBmYWxzZTsKICAgICBWZWN0b3I8
U1ZHR2x5cGg+IGdseXBoczsKQEAgLTI0MywxNCArMjQzLDE0IEBAIGJvb2wgU1ZHRm9udERhdGE6
OmZpbGxCTVBHbHlwaHMoU1ZHRm9udEUKICAgICAgICAgLy8gY2FyZSBvZiBtYXRjaGluZyB0byB0
aGUgY29ycmVjdCBnbHlwaCwgaWYgbXVsdGlwbGUgb25lcyBhcmUgYXZhaWxhYmxlLCBhcyB0aGF0
J3MKICAgICAgICAgLy8gb25seSBwb3NzaWJsZSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYSBzdHJp
bmcgKGVnLiBhcmFiaWMgZm9ybSBtYXRjaGluZykuCiAgICAgICAgIGhhdmVHbHlwaHMgPSB0cnVl
OwotICAgICAgICBwYWdlVG9GaWxsLT5zZXRHbHlwaERhdGFGb3JJbmRleChvZmZzZXQgKyBpLCBn
bHlwaHMuZmlyc3QoKS50YWJsZUVudHJ5LCBmb250RGF0YSk7CisgICAgICAgIHBhZ2VUb0ZpbGwt
PnNldEdseXBoRGF0YUZvckluZGV4KG9mZnNldCArIGksIGdseXBocy5maXJzdCgpLnRhYmxlRW50
cnksIGZvbnQpOwogICAgICAgICBnbHlwaHMuY2xlYXIoKTsKICAgICB9CiAKICAgICByZXR1cm4g
aGF2ZUdseXBoczsKIH0KIAotYm9vbCBTVkdGb250RGF0YTo6ZmlsbE5vbkJNUEdseXBocyhTVkdG
b250RWxlbWVudCogZm9udEVsZW1lbnQsIEdseXBoUGFnZSogcGFnZVRvRmlsbCwgdW5zaWduZWQg
b2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIsIGNvbnN0IFNpbXBsZUZvbnRE
YXRhKiBmb250RGF0YSkgY29uc3QKK2Jvb2wgU1ZHRm9udERhdGE6OmZpbGxOb25CTVBHbHlwaHMo
U1ZHRm9udEVsZW1lbnQqIGZvbnRFbGVtZW50LCBHbHlwaFBhZ2UqIHBhZ2VUb0ZpbGwsIHVuc2ln
bmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCBjb25zdCBGb250KiBm
b250KSBjb25zdAogewogICAgIGJvb2wgaGF2ZUdseXBocyA9IGZhbHNlOwogICAgIFZlY3RvcjxT
VkdHbHlwaD4gZ2x5cGhzOwpAQCAtMjY4LDcgKzI2OCw3IEBAIGJvb2wgU1ZHRm9udERhdGE6OmZp
bGxOb25CTVBHbHlwaHMoU1ZHRm8KICAgICAgICAgLy8gY2FyZSBvZiBtYXRjaGluZyB0byB0aGUg
Y29ycmVjdCBnbHlwaCwgaWYgbXVsdGlwbGUgb25lcyBhcmUgYXZhaWxhYmxlLCBhcyB0aGF0J3MK
ICAgICAgICAgLy8gb25seSBwb3NzaWJsZSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYSBzdHJpbmcg
KGVnLiBhcmFiaWMgZm9ybSBtYXRjaGluZykuCiAgICAgICAgIGhhdmVHbHlwaHMgPSB0cnVlOwot
ICAgICAgICBwYWdlVG9GaWxsLT5zZXRHbHlwaERhdGFGb3JJbmRleChvZmZzZXQgKyBpLCBnbHlw
aHMuZmlyc3QoKS50YWJsZUVudHJ5LCBmb250RGF0YSk7CisgICAgICAgIHBhZ2VUb0ZpbGwtPnNl
dEdseXBoRGF0YUZvckluZGV4KG9mZnNldCArIGksIGdseXBocy5maXJzdCgpLnRhYmxlRW50cnks
IGZvbnQpOwogICAgICAgICBnbHlwaHMuY2xlYXIoKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGb250RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGb250RGF0YS5oCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRm9udERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsMjEgKzIxLDIxIEBACiAjZGVmaW5l
IFNWR0ZvbnREYXRhX2gKIAogI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0jaW5jbHVkZSAiU2ltcGxl
Rm9udERhdGEuaCIKKyNpbmNsdWRlICJGb250LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgU1ZHRm9udEVsZW1lbnQ7CiBjbGFzcyBTVkdGb250RmFjZUVsZW1lbnQ7CiAKLWNsYXNz
IFNWR0ZvbnREYXRhIDogcHVibGljIFNpbXBsZUZvbnREYXRhOjpTVkdEYXRhIHsKK2NsYXNzIFNW
R0ZvbnREYXRhIDogcHVibGljIEZvbnQ6OlNWR0RhdGEgewogcHVibGljOgogICAgIGV4cGxpY2l0
IFNWR0ZvbnREYXRhKFNWR0ZvbnRGYWNlRWxlbWVudCopOwogICAgIHZpcnR1YWwgflNWR0ZvbnRE
YXRhKCkgeyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZUZvbnREYXRhKFNpbXBsZUZv
bnREYXRhKiwgZmxvYXQgZm9udFNpemUpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBpbml0
aWFsaXplRm9udChGb250KiwgZmxvYXQgZm9udFNpemUpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwg
ZmxvYXQgd2lkdGhGb3JTVkdHbHlwaChHbHlwaCwgZmxvYXQgZm9udFNpemUpIGNvbnN0IG92ZXJy
aWRlOwotICAgIHZpcnR1YWwgYm9vbCBmaWxsU1ZHR2x5cGhQYWdlKEdseXBoUGFnZSosIHVuc2ln
bmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZm
ZXJMZW5ndGgsIGNvbnN0IFNpbXBsZUZvbnREYXRhKikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCBib29sIGZpbGxTVkdHbHlwaFBhZ2UoR2x5cGhQYWdlKiwgdW5zaWduZWQgb2Zmc2V0LCB1
bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29u
c3QgRm9udCopIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgYm9vbCBhcHBseVNWR0dseXBoU2VsZWN0
aW9uKFdpZHRoSXRlcmF0b3ImLCBHbHlwaERhdGEmLCBib29sIG1pcnJvciwgaW50IGN1cnJlbnRD
aGFyYWN0ZXIsIHVuc2lnbmVkJiBhZHZhbmNlTGVuZ3RoLCBTdHJpbmcmIG5vcm1hbGl6ZWRTcGFj
ZXNTdHJpbmdDYWNoZSkgY29uc3Q7CiAKQEAgLTUwLDggKzUwLDggQEAgcHVibGljOgogICAgIGZs
b2F0IHZlcnRpY2FsQWR2YW5jZVkoKSBjb25zdCB7IHJldHVybiBtX3ZlcnRpY2FsQWR2YW5jZVk7
IH0KIAogcHJpdmF0ZToKLSAgICBib29sIGZpbGxCTVBHbHlwaHMoU1ZHRm9udEVsZW1lbnQqLCBH
bHlwaFBhZ2UqICwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBidWZm
ZXIsIGNvbnN0IFNpbXBsZUZvbnREYXRhKikgY29uc3Q7Ci0gICAgYm9vbCBmaWxsTm9uQk1QR2x5
cGhzKFNWR0ZvbnRFbGVtZW50KiwgR2x5cGhQYWdlKiAsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWdu
ZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCBjb25zdCBTaW1wbGVGb250RGF0YSopIGNvbnN0Owor
ICAgIGJvb2wgZmlsbEJNUEdseXBocyhTVkdGb250RWxlbWVudCosIEdseXBoUGFnZSogLCB1bnNp
Z25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgY29uc3QgRm9udCop
IGNvbnN0OworICAgIGJvb2wgZmlsbE5vbkJNUEdseXBocyhTVkdGb250RWxlbWVudCosIEdseXBo
UGFnZSogLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwg
Y29uc3QgRm9udCopIGNvbnN0OwogCiAgICAgYm9vbCBhcHBseVRyYW5zZm9ybXMoR2x5cGhCdWZm
ZXJHbHlwaCosIEdseXBoQnVmZmVyQWR2YW5jZSosIHNpemVfdCwgVHlwZXNldHRpbmdGZWF0dXJl
cykgY29uc3QgPSBkZWxldGU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RWxl
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RWxlbWVudC5o
CShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEVsZW1lbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBAQCBwdWJsaWM6CiAgICAgZmxvYXQgaG9y
aXpvbnRhbEtlcm5pbmdGb3JQYWlyT2ZTdHJpbmdzQW5kR2x5cGhzKGNvbnN0IFN0cmluZyYgdTEs
IGNvbnN0IFN0cmluZyYgZzEsIGNvbnN0IFN0cmluZyYgdTIsIGNvbnN0IFN0cmluZyYgZzIpIGNv
bnN0OwogICAgIGZsb2F0IHZlcnRpY2FsS2VybmluZ0ZvclBhaXJPZlN0cmluZ3NBbmRHbHlwaHMo
Y29uc3QgU3RyaW5nJiB1MSwgY29uc3QgU3RyaW5nJiBnMSwgY29uc3QgU3RyaW5nJiB1MiwgY29u
c3QgU3RyaW5nJiBnMikgY29uc3Q7CiAKLSAgICAvLyBVc2VkIGJ5IFNpbXBsZUZvbnREYXRhL1dp
ZHRoSXRlcmF0b3IuCisgICAgLy8gVXNlZCBieSBGb250L1dpZHRoSXRlcmF0b3IuCiAgICAgU1ZH
R2x5cGggc3ZnR2x5cGhGb3JHbHlwaChHbHlwaCk7CiAgICAgR2x5cGggbWlzc2luZ0dseXBoKCk7
CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAkocmV2aXNp
b24gMTc4ODU3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTI3LDggKzkyNyw4IEBAIHZvaWQgV2ViUHJvY2Vzczo6Z2V0V2Vi
Q29yZVN0YXRpc3RpY3ModWkKICAgICBkYXRhLnN0YXRpc3RpY3NOdW1iZXJzLnNldChBU0NJSUxp
dGVyYWwoIkljb25zV2l0aERhdGFDb3VudCIpLCBpY29uRGF0YWJhc2UoKS5pY29uUmVjb3JkQ291
bnRXaXRoRGF0YSgpKTsKICAgICAKICAgICAvLyBHYXRoZXIgZm9udCBzdGF0aXN0aWNzLgotICAg
IGRhdGEuc3RhdGlzdGljc051bWJlcnMuc2V0KEFTQ0lJTGl0ZXJhbCgiQ2FjaGVkRm9udERhdGFD
b3VudCIpLCBmb250Q2FjaGUoKS5mb250RGF0YUNvdW50KCkpOwotICAgIGRhdGEuc3RhdGlzdGlj
c051bWJlcnMuc2V0KEFTQ0lJTGl0ZXJhbCgiQ2FjaGVkRm9udERhdGFJbmFjdGl2ZUNvdW50Iiks
IGZvbnRDYWNoZSgpLmluYWN0aXZlRm9udERhdGFDb3VudCgpKTsKKyAgICBkYXRhLnN0YXRpc3Rp
Y3NOdW1iZXJzLnNldChBU0NJSUxpdGVyYWwoIkNhY2hlZEZvbnREYXRhQ291bnQiKSwgZm9udENh
Y2hlKCkuZm9udENvdW50KCkpOworICAgIGRhdGEuc3RhdGlzdGljc051bWJlcnMuc2V0KEFTQ0lJ
TGl0ZXJhbCgiQ2FjaGVkRm9udERhdGFJbmFjdGl2ZUNvdW50IiksIGZvbnRDYWNoZSgpLmluYWN0
aXZlRm9udENvdW50KCkpOwogICAgIAogICAgIC8vIEdhdGhlciBnbHlwaCBwYWdlIHN0YXRpc3Rp
Y3MuCiAgICAgZGF0YS5zdGF0aXN0aWNzTnVtYmVycy5zZXQoQVNDSUlMaXRlcmFsKCJHbHlwaFBh
Z2VDb3VudCIpLCBHbHlwaFBhZ2U6OmNvdW50KCkpOwpJbmRleDogU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViUG9wdXBNZW51TWFjLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYlBvcHVw
TWVudU1hYy5tbQkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViUG9wdXBNZW51TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0zOSw3ICszOSw3IEBAIHZvaWQgV2ViUG9wdXBNZW51OjpzZXRVcFBsYXRmb3JtRGF0YShjb24K
IHsKICNpZiBVU0UoQVBQS0lUKQogICAgIC8vIEZJWE1FOiBmb250IHdpbGwgYmUgbmlsIGhlcmUg
Zm9yIGN1c3RvbSBmb250cywgd2Ugc2hvdWxkIGZpeCB0aGF0LgotICAgIE5TRm9udCAqZm9udCA9
IG1fcG9wdXBDbGllbnQtPm1lbnVTdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXRO
U0ZvbnQoKTsKKyAgICBOU0ZvbnQgKmZvbnQgPSBtX3BvcHVwQ2xpZW50LT5tZW51U3R5bGUoKS5m
b250KCkucHJpbWFyeUZvbnQoKS5nZXROU0ZvbnQoKTsKICAgICBpZiAoIWZvbnQpCiAgICAgICAg
IHJldHVybjsKICAgICAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5jcHAJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzk2LDcgKzc5Niw3
IEBAIEVkaXRvclN0YXRlIFdlYlBhZ2U6OmVkaXRvclN0YXRlKCkgY29uc3QKICAgICBpZiAoIXNl
bGVjdGlvbi5pc05vbmUoKSkgewogICAgICAgICBOb2RlKiBub2RlVG9SZW1vdmU7CiAgICAgICAg
IGlmIChSZW5kZXJTdHlsZSogc3R5bGUgPSBFZGl0b3I6OnN0eWxlRm9yU2VsZWN0aW9uU3RhcnQo
JmZyYW1lLCBub2RlVG9SZW1vdmUpKSB7Ci0gICAgICAgICAgICBDVEZvbnRSZWYgZm9udCA9IHN0
eWxlLT5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250RGF0YSgpLmdldENURm9udCgpOworICAgICAg
ICAgICAgQ1RGb250UmVmIGZvbnQgPSBzdHlsZS0+Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgp
LmdldENURm9udCgpOwogICAgICAgICAgICAgQ1RGb250U3ltYm9saWNUcmFpdHMgdHJhaXRzID0g
Zm9udCA/IENURm9udEdldFN5bWJvbGljVHJhaXRzKGZvbnQpIDogMDsKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgaWYgKHRyYWl0cyAmIGtDVEZvbnRUcmFpdEJvbGQpCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCShy
ZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9z
L1dlYlBhZ2VJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTE3OTAsOCArMTc5MCw4IEBAIHZvaWQg
V2ViUGFnZTo6cmVxdWVzdEF1dG9jb3JyZWN0aW9uRGF0YSgKIAogICAgIGJvb2wgbXVsdGlwbGVG
b250cyA9IGZhbHNlOwogICAgIENURm9udFJlZiBmb250ID0gbmlsOwotICAgIGlmIChjb25zdCBT
aW1wbGVGb250RGF0YSogZm9udERhdGEgPSBmcmFtZS5lZGl0b3IoKS5mb250Rm9yU2VsZWN0aW9u
KG11bHRpcGxlRm9udHMpKQotICAgICAgICBmb250ID0gZm9udERhdGEtPmdldENURm9udCgpOwor
ICAgIGlmIChhdXRvKiBjb3JlRm9udCA9IGZyYW1lLmVkaXRvcigpLmZvbnRGb3JTZWxlY3Rpb24o
bXVsdGlwbGVGb250cykpCisgICAgICAgIGZvbnQgPSBjb3JlRm9udC0+Z2V0Q1RGb250KCk7CiAK
ICAgICBDR0Zsb2F0IGZvbnRTaXplID0gQ1RGb250R2V0U2l6ZShmb250KTsKICAgICB1aW50NjRf
dCBmb250VHJhaXRzID0gQ1RGb250R2V0U3ltYm9saWNUcmFpdHMoZm9udCk7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L2lvcy9NaXNjL0Vtb2ppRmFsbGJhY2tGb250U2VsZWN0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvaW9zL01pc2MvRW1vamlGYWxsYmFja0ZvbnRTZWxlY3Rvci5j
cHAJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJLaXQvaW9zL01pc2MvRW1vamlGYWxs
YmFja0ZvbnRTZWxlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDE3ICsyNywxNyBAQAog
CiAjaW5jbHVkZSAiRW1vamlGYWxsYmFja0ZvbnRTZWxlY3Rvci5oIgogCisjaW5jbHVkZSA8V2Vi
Q29yZS9Gb250Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Gb250Q2FjaGUuaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL1NpbXBsZUZvbnREYXRhLmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CiAKLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEVtb2ppRmFsbGJhY2tGb250U2VsZWN0
b3I6OmZhbGxiYWNrRm9udERhdGFBdChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlw
dGlvbiwgc2l6ZV90KQorUGFzc1JlZlB0cjxGb250PiBFbW9qaUZhbGxiYWNrRm9udFNlbGVjdG9y
OjpmYWxsYmFja0ZvbnRBdChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwg
c2l6ZV90KQogewogICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJp
bmcsIGFwcGxlQ29sb3JFbW9qaSwgKCJBcHBsZSBDb2xvciBFbW9qaSIpKTsKLSAgICBSZWZQdHI8
U2ltcGxlRm9udERhdGE+IGZvbnREYXRhID0gZm9udENhY2hlKCkuZm9udEZvckZhbWlseShmb250
RGVzY3JpcHRpb24sIGFwcGxlQ29sb3JFbW9qaSk7CisgICAgUmVmUHRyPEZvbnQ+IGZvbnREYXRh
ID0gZm9udENhY2hlKCkuZm9udEZvckZhbWlseShmb250RGVzY3JpcHRpb24sIGFwcGxlQ29sb3JF
bW9qaSk7CiAgICAgaWYgKCFmb250RGF0YSkgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0
byBnZXQgXCJBcHBsZSBDb2xvciBFbW9qaVwiIGZyb20gdGhlIGZvbnQgY2FjaGUuIFVzaW5nIHRo
ZSBsYXN0IHJlc29ydCBmYWxsYmFjayBmb250IGluc3RlYWQuIik7CiAgICAgICAgIGZvbnREYXRh
ID0gZm9udENhY2hlKCkubGFzdFJlc29ydEZhbGxiYWNrRm9udChmb250RGVzY3JpcHRpb24pOwpJ
bmRleDogU291cmNlL1dlYktpdC9pb3MvTWlzYy9FbW9qaUZhbGxiYWNrRm9udFNlbGVjdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9pb3MvTWlzYy9FbW9qaUZhbGxiYWNrRm9udFNl
bGVjdG9yLmgJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJLaXQvaW9zL01pc2MvRW1v
amlGYWxsYmFja0ZvbnRTZWxlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw4ICszNSw4IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIH5FbW9qaUZhbGxiYWNrRm9udFNlbGVjdG9yKCkgb3ZlcnJp
ZGUgeyB9CiAgICAgdmlydHVhbCBXZWJDb3JlOjpGb250UmFuZ2VzIGZvbnRSYW5nZXNGb3JGYW1p
bHkoY29uc3QgV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbWljU3RyaW5nJikg
b3ZlcnJpZGUgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIFdlYkNvcmU6OkZvbnRSYW5n
ZXMoKTsgfQogICAgIHZpcnR1YWwgYm9vbCByZXNvbHZlc0ZhbWlseUZvcihjb25zdCBXZWJDb3Jl
OjpGb250RGVzY3JpcHRpb24mKSBjb25zdCBvdmVycmlkZSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIHNpemVfdCBmYWxsYmFja0ZvbnREYXRhQ291
bnQoKSBvdmVycmlkZSB7IHJldHVybiAxOyB9OwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJD
b3JlOjpTaW1wbGVGb250RGF0YT4gZmFsbGJhY2tGb250RGF0YUF0KGNvbnN0IFdlYkNvcmU6OkZv
bnREZXNjcmlwdGlvbiYsIHNpemVfdCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBzaXplX3QgZmFs
bGJhY2tGb250Q291bnQoKSBvdmVycmlkZSB7IHJldHVybiAxOyB9OworICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxXZWJDb3JlOjpGb250PiBmYWxsYmFja0ZvbnRBdChjb25zdCBXZWJDb3JlOjpGb250
RGVzY3JpcHRpb24mLCBzaXplX3QpIG92ZXJyaWRlOwogCiAgICAgdmlydHVhbCB2b2lkIHJlZ2lz
dGVyRm9ySW52YWxpZGF0aW9uQ2FsbGJhY2tzKFdlYkNvcmU6OkZvbnRTZWxlY3RvckNsaWVudCop
IG92ZXJyaWRlIHsgfQogICAgIHZpcnR1YWwgdm9pZCB1bnJlZ2lzdGVyRm9ySW52YWxpZGF0aW9u
Q2FsbGJhY2tzKFdlYkNvcmU6OkZvbnRTZWxlY3RvckNsaWVudCopIG92ZXJyaWRlIHsgfQpJbmRl
eDogU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tCShyZXZpc2lv
biAxNzg4NTcpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDcsMTIgKzE0NywxMiBAQCArIChzaXplX3QpaWNvbnNXaXRo
RGF0YUNvdW50CiAKICsgKHNpemVfdCljYWNoZWRGb250RGF0YUNvdW50CiB7Ci0gICAgcmV0dXJu
IGZvbnRDYWNoZSgpLmZvbnREYXRhQ291bnQoKTsKKyAgICByZXR1cm4gZm9udENhY2hlKCkuZm9u
dENvdW50KCk7CiB9CiAKICsgKHNpemVfdCljYWNoZWRGb250RGF0YUluYWN0aXZlQ291bnQKIHsK
LSAgICByZXR1cm4gZm9udENhY2hlKCkuaW5hY3RpdmVGb250RGF0YUNvdW50KCk7CisgICAgcmV0
dXJuIGZvbnRDYWNoZSgpLmluYWN0aXZlRm9udENvdW50KCk7CiB9CiAKICsgKHZvaWQpcHVyZ2VJ
bmFjdGl2ZUZvbnREYXRhCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9Q
b3B1cE1lbnVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1
cHBvcnQvUG9wdXBNZW51TWFjLm1tCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2ViS2l0
L21hYy9XZWJDb3JlU3VwcG9ydC9Qb3B1cE1lbnVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI4
LDExICsyOCwxMSBAQAogI2ltcG9ydCA8V2ViQ29yZS9DaHJvbWUuaD4KICNpbXBvcnQgPFdlYkNv
cmUvQ2hyb21lQ2xpZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0V2ZW50SGFuZGxlci5oPgorI2lt
cG9ydCA8V2ViQ29yZS9Gb250Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgogI2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL1BvcHVwTWVudUNsaWVudC5oPgotI2ltcG9ydCA8V2ViQ29yZS9TaW1wbGVGb250
RGF0YS5oPgogI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmg+CiAKIHVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtODEsOSArODEsOSBAQCB2b2lkIFBvcHVwTWVudU1h
Yzo6cG9wdWxhdGUoKQogICAgICAgICBQb3B1cE1lbnVTdHlsZSBzdHlsZSA9IG1fY2xpZW50LT5p
dGVtU3R5bGUoaSk7CiAgICAgICAgIFJldGFpblB0cjxOU011dGFibGVEaWN0aW9uYXJ5PiBhdHRy
aWJ1dGVzID0gYWRvcHROUyhbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdKTsKICAg
ICAgICAgaWYgKHN0eWxlLmZvbnQoKSAhPSBGb250Q2FzY2FkZSgpKSB7Ci0gICAgICAgICAgICBO
U0ZvbnQgKmZvbnQgPSBzdHlsZS5mb250KCkucHJpbWFyeUZvbnREYXRhKCkuZ2V0TlNGb250KCk7
CisgICAgICAgICAgICBOU0ZvbnQgKmZvbnQgPSBzdHlsZS5mb250KCkucHJpbWFyeUZvbnQoKS5n
ZXROU0ZvbnQoKTsKICAgICAgICAgICAgIGlmICghZm9udCkgewotICAgICAgICAgICAgICAgIENH
RmxvYXQgc2l6ZSA9IHN0eWxlLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5wbGF0Zm9ybURhdGEo
KS5zaXplKCk7CisgICAgICAgICAgICAgICAgQ0dGbG9hdCBzaXplID0gc3R5bGUuZm9udCgpLnBy
aW1hcnlGb250KCkucGxhdGZvcm1EYXRhKCkuc2l6ZSgpOwogICAgICAgICAgICAgICAgIGZvbnQg
PSBzdHlsZS5mb250KCkud2VpZ2h0KCkgPCBGb250V2VpZ2h0Qm9sZCA/IFtOU0ZvbnQgc3lzdGVt
Rm9udE9mU2l6ZTpzaXplXSA6IFtOU0ZvbnQgYm9sZFN5c3RlbUZvbnRPZlNpemU6c2l6ZV07CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBbYXR0cmlidXRlcyBzZXRPYmplY3Q6Zm9udCBmb3JL
ZXk6TlNGb250QXR0cmlidXRlTmFtZV07CkBAIC0xNDgsNyArMTQ4LDcgQEAgdm9pZCBQb3B1cE1l
bnVNYWM6OnNob3coY29uc3QgSW50UmVjdCYgcgogICAgIE5TTWVudSogbWVudSA9IFttX3BvcHVw
IG1lbnVdOwogICAgIAogICAgIE5TUG9pbnQgbG9jYXRpb247Ci0gICAgTlNGb250KiBmb250ID0g
bV9jbGllbnQtPm1lbnVTdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udERhdGEoKS5nZXROU0ZvbnQo
KTsKKyAgICBOU0ZvbnQqIGZvbnQgPSBtX2NsaWVudC0+bWVudVN0eWxlKCkuZm9udCgpLnByaW1h
cnlGb250KCkuZ2V0TlNGb250KCk7CiAKICAgICAvLyBUaGVzZSB2YWx1ZXMgd2VyZSBib3Jyb3dl
ZCBmcm9tIEFwcEtpdCB0byBtYXRjaCB0aGVpciBwbGFjZW1lbnQgb2YgdGhlIG1lbnUuCiAgICAg
Y29uc3QgaW50IHBvcE92ZXJIb3Jpem9udGFsQWRqdXN0ID0gLTEwOwpJbmRleDogU291cmNlL1dl
YktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCShyZXZpc2lvbiAxNzg4NTcpCisrKyBTb3VyY2UvV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsMTEgKzEx
NCwxMSBAQAogI2ltcG9ydCA8V2ViQ29yZS9FZGl0b3IuaD4KICNpbXBvcnQgPFdlYkNvcmUvRWRp
dG9yQ2xpZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZvY3VzQ29udHJvbGxlci5oPgorI2ltcG9y
dCA8V2ViQ29yZS9Gb250Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lU2VsZWN0aW9uLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL0hpc3RvcnlDb250cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL05v
ZGVUcmF2ZXJzYWwuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyTGF5ZXIuaD4KLSNpbXBvcnQg
PFdlYkNvcmUvU2ltcGxlRm9udERhdGEuaD4KICNpbXBvcnQgPFdlYkNvcmUvVGV4dFJlc291cmNl
RGVjb2Rlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9XQUtTY3JvbGxWaWV3Lmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL1dBS1ZpZXdQcml2YXRlLmg+CkBAIC0xODY5LDcgKzE4NjksOCBAQCAtIChDVEZvbnRS
ZWYpZm9udEZvclNlbGVjdGlvbjooQk9PTCAqKWhhCiAgICAgYm9vbCBtdWx0aXBsZUZvbnRzID0g
ZmFsc2U7CiAgICAgQ1RGb250UmVmIGZvbnQgPSBuaWw7CiAgICAgaWYgKF9wcml2YXRlLT5jb3Jl
RnJhbWUpIHsKLSAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGZkID0gX3ByaXZhdGUtPmNv
cmVGcmFtZS0+ZWRpdG9yKCkuZm9udEZvclNlbGVjdGlvbihtdWx0aXBsZUZvbnRzKTsKKyAgICAg
ICAgY29uc3QgRm9udAorICAgICAgICAqIGZkID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZWRpdG9y
KCkuZm9udEZvclNlbGVjdGlvbihtdWx0aXBsZUZvbnRzKTsKICAgICAgICAgaWYgKGZkKQogICAg
ICAgICAgICAgZm9udCA9IGZkLT5nZXRDVEZvbnQoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0JKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJj
ZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTky
LDYgKzkyLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvRXhjZXB0aW9uSGFuZGxlcnMuaD4KICNpbXBv
cnQgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZvY3VzQ29udHJvbGxl
ci5oPgorI2ltcG9ydCA8V2ViQ29yZS9Gb250Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZvbnRDYWNo
ZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZUxv
YWRlci5oPgpAQCAtMTEyLDcgKzExMyw2IEBACiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRlcldpZGdl
dC5oPgogI2ltcG9ydCA8V2ViQ29yZS9SdW50aW1lQXBwbGljYXRpb25DaGVja3MuaD4KICNpbXBv
cnQgPFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1NpbXBsZUZvbnRE
YXRhLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1N0eWxlUHJvcGVydGllcy5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9UZXh0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1RleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZS5o
PgpAQCAtNDg3OCw4ICs0ODc4LDggQEAgc3RhdGljIE5TU3RyaW5nICpmb250TmFtZUZvckRlc2Ny
aXB0aW9uKAogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc0l0YWxpYyhpdGFsaWMpOwogICAgIGZv
bnREZXNjcmlwdGlvbi5zZXRXZWlnaHQoYm9sZCA/IEZvbnRXZWlnaHQ5MDAgOiBGb250V2VpZ2h0
NTAwKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShwb2ludFNpemUpOwot
ICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gc2ltcGxlRm9udERhdGEgPSBmb250Q2FjaGUoKS5m
b250Rm9yRmFtaWx5KGZvbnREZXNjcmlwdGlvbiwgZmFtaWx5TmFtZSk7Ci0gICAgcmV0dXJuIFtz
aW1wbGVGb250RGF0YS0+cGxhdGZvcm1EYXRhKCkubnNGb250KCkgZm9udE5hbWVdOworICAgIFJl
ZlB0cjxGb250PiBmb250ID0gZm9udENhY2hlKCkuZm9udEZvckZhbWlseShmb250RGVzY3JpcHRp
b24sIGZhbWlseU5hbWUpOworICAgIHJldHVybiBbZm9udC0+cGxhdGZvcm1EYXRhKCkubnNGb250
KCkgZm9udE5hbWVdOwogfQogCiAtICh2b2lkKV9hZGRUb1N0eWxlOihET01DU1NTdHlsZURlY2xh
cmF0aW9uICopc3R5bGUgZm9udEE6KE5TRm9udCAqKWEgZm9udEI6KE5TRm9udCAqKWIKQEAgLTU0
NDIsNyArNTQ0Miw3IEBAIC0gKHZvaWQpX3VwZGF0ZUZvbnRQYW5lbAogICAgIGJvb2wgbXVsdGlw
bGVGb250cyA9IGZhbHNlOwogICAgIE5TRm9udCAqZm9udCA9IG5pbDsKICAgICBpZiAoRnJhbWUq
IGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpIHsKLSAgICAgICAgaWYgKGNvbnN0IFNp
bXBsZUZvbnREYXRhKiBmZCA9IGNvcmVGcmFtZS0+ZWRpdG9yKCkuZm9udEZvclNlbGVjdGlvbiht
dWx0aXBsZUZvbnRzKSkKKyAgICAgICAgaWYgKGNvbnN0IEZvbnQqIGZkID0gY29yZUZyYW1lLT5l
ZGl0b3IoKS5mb250Rm9yU2VsZWN0aW9uKG11bHRpcGxlRm9udHMpKQogICAgICAgICAgICAgZm9u
dCA9IGZkLT5nZXROU0ZvbnQoKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL0RP
TUNvcmVDbGFzc2VzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9ET01Db3Jl
Q2xhc3Nlcy5jcHAJKHJldmlzaW9uIDE3ODg1NykKKysrIFNvdXJjZS9XZWJLaXQvd2luL0RPTUNv
cmVDbGFzc2VzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUg
PFdlYkNvcmUvRG9jdW1lbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0RyYWdJbWFnZS5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvRWxlbWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRm9udC5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvRm9udENhc2NhZGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9IVE1MRm9ybUVsZW1lbnQuaD4KQEAgLTQ4LDcgKzQ5LDYgQEAK
ICNpbmNsdWRlIDxXZWJDb3JlL05vZGVMaXN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJF
bGVtZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJUcmVlQXNUZXh0Lmg+Ci0jaW5jbHVk
ZSA8V2ViQ29yZS9TaW1wbGVGb250RGF0YS5oPgogCiAjaW5jbHVkZSA8aW5pdGd1aWQuaD4KIC8v
IHszQjBDMEVGRi00NzhCLTRiMGItODI5MC1EMjMyMUUwOEUyM0V9CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L3dpbi9XZWJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJW
aWV3LmNwcAkocmV2aXNpb24gMTc4ODU3KQorKysgU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTk2LDYgKzk2LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0Zp
bGVTeXN0ZW0uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UXVhZC5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvRm9jdXNDb250cm9sbGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Gb250Lmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9GcmFtZUxvYWRlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVTZWxl
Y3Rpb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lVHJlZS5oPgpAQCAtMTQ4LDcgKzE0OSw2
IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbi5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvU2VjdXJpdHlQb2xpY3kuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NldHRpbmdzLmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9TaW1wbGVGb250RGF0YS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU3lzdGVt
SW5mby5oPgogI2luY2x1ZGUgPFdlYkNvcmUvV2luZG93TWVzc2FnZUJyb2FkY2FzdGVyLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9XaW5kb3dzVG91Y2guaD4KQEAgLTU1MDUsNyArNTUwNSw3IEBAIEhS
RVNVTFQgV2ViVmlldzo6c2V0UHJvaGliaXRzTWFpbkZyYW1lU2MKIAogSFJFU1VMVCBXZWJWaWV3
OjpzZXRTaG91bGRBcHBseU1hY0ZvbnRBc2NlbnRIYWNrKEJPT0wgYikKIHsKLSAgICBTaW1wbGVG
b250RGF0YTo6c2V0U2hvdWxkQXBwbHlNYWNBc2NlbnRIYWNrKGIpOworICAgIEZvbnQ6OnNldFNo
b3VsZEFwcGx5TWFjQXNjZW50SGFjayhiKTsKICAgICByZXR1cm4gU19PSzsKIH0KIAo=
</data>
<flag name="review"
          id="270101"
          type_id="1"
          status="+"
          setter="zalan"
    />
          </attachment>
      

    </bug>

</bugzilla>