<?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>233972</bug_id>
          
          <creation_ts>2021-12-07 21:59:17 -0800</creation_ts>
          <short_desc>Move the SystemFallbackCache to FontCache</short_desc>
          <delta_ts>2022-08-22 04:26:16 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=244195</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>233488</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Cameron McCormack (:heycam)">heycam</reporter>
          <assigned_to name="Matt Woodrow">mattwoodrow</assigned_to>
          <cc>annulen</cc>
    
    <cc>bfulgham</cc>
    
    <cc>clord</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mattwoodrow</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1821373</commentid>
    <comment_count>0</comment_count>
    <who name="Cameron McCormack (:heycam)">heycam</who>
    <bug_when>2021-12-07 21:59:17 -0800</bug_when>
    <thetext>Move the SystemFallbackCache to FontCache</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1821374</commentid>
    <comment_count>1</comment_count>
      <attachid>446291</attachid>
    <who name="Cameron McCormack (:heycam)">heycam</who>
    <bug_when>2021-12-07 21:59:49 -0800</bug_when>
    <thetext>Created attachment 446291
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1821772</commentid>
    <comment_count>2</comment_count>
    <who name="Cameron McCormack (:heycam)">heycam</who>
    <bug_when>2021-12-08 13:59:40 -0800</bug_when>
    <thetext>The Gtk/WPE failures point out that FontCacheFreeType.cpp has its own SystemFallbackCache HashMap, with different key/value types.  A bit of abstraction over these will be needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1821802</commentid>
    <comment_count>3</comment_count>
    <who name="Cameron McCormack (:heycam)">heycam</who>
    <bug_when>2021-12-08 15:07:04 -0800</bug_when>
    <thetext>Actually they seem to be doing two slightly different things.  The SystemFallbackCache that&apos;s in Font.cpp and which I&apos;m moving out to a separate file is a per-character map of Font to the fallback Font to use.  The one in FontCacheFreeType.cpp is a cache of FcPatterns and FcFontSets that FontCache::systemFallbackForCharacters uses to avoid the overhead of doing the FcConfigSubstitute calls for the same inputs.

So I think for now we should just rename the type used in FontCacheFreeType.cpp, but it&apos;s another cache that needs to move to live on the FontCache object so that it can be thread-specific.  (Or locking added around it.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1821807</commentid>
    <comment_count>4</comment_count>
      <attachid>446437</attachid>
    <who name="Cameron McCormack (:heycam)">heycam</who>
    <bug_when>2021-12-08 15:24:26 -0800</bug_when>
    <thetext>Created attachment 446437
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1821987</commentid>
    <comment_count>5</comment_count>
      <attachid>446437</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-12-08 21:00:55 -0800</bug_when>
    <thetext>Comment on attachment 446437
Patch

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

&gt; Source/WebCore/WebCore.xcodeproj/project.pbxproj:1015
&gt; +		32112E0F274B47CF007047A8 /* SystemFallbackCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 32899FB9274B410C00855A9D /* SystemFallbackCache.h */; settings = {ATTRIBUTES = (Private, ); }; };

Can this file have the word &quot;font&quot; in it somewhere?

&gt; Source/WebCore/platform/graphics/SystemFallbackCache.h:81
&gt; +    using CharacterFallbackMap = HashMap&lt;CharacterFallbackMapKey, Font*, CharacterFallbackMapKeyHash, CharacterFallbackMapKeyHashTraits&gt;;
&gt; +
&gt; +    HashMap&lt;const Font*, CharacterFallbackMap&gt; m_characterFallbackMaps;

Why is this a HashMap of HashMaps?

I guess this patch is just moving code around, but we should probably at least have a bug filed about investigating whether we can use less memory and probably have better performance for this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1822498</commentid>
    <comment_count>6</comment_count>
    <who name="Cameron McCormack (:heycam)">heycam</who>
    <bug_when>2021-12-09 20:46:24 -0800</bug_when>
    <thetext>(In reply to Myles C. Maxfield from comment #5)
&gt; &gt; Source/WebCore/platform/graphics/SystemFallbackCache.h:81
&gt; &gt; +    using CharacterFallbackMap = HashMap&lt;CharacterFallbackMapKey, Font*, CharacterFallbackMapKeyHash, CharacterFallbackMapKeyHashTraits&gt;;
&gt; &gt; +
&gt; &gt; +    HashMap&lt;const Font*, CharacterFallbackMap&gt; m_characterFallbackMaps;
&gt; 
&gt; Why is this a HashMap of HashMaps?
&gt; 
&gt; I guess this patch is just moving code around, but we should probably at
&gt; least have a bug filed about investigating whether we can use less memory
&gt; and probably have better performance for this.

Filed https://bugs.webkit.org/show_bug.cgi?id=234121.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1824245</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-12-14 22:00:34 -0800</bug_when>
    <thetext>&lt;rdar://problem/86505855&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1870237</commentid>
    <comment_count>8</comment_count>
      <attachid>459563</attachid>
    <who name="Matt Woodrow">mattwoodrow</who>
    <bug_when>2022-05-18 18:51:10 -0700</bug_when>
    <thetext>Created attachment 459563
Rebased patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1870254</commentid>
    <comment_count>9</comment_count>
      <attachid>459564</attachid>
    <who name="Matt Woodrow">mattwoodrow</who>
    <bug_when>2022-05-18 20:30:01 -0700</bug_when>
    <thetext>Created attachment 459564
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1885024</commentid>
    <comment_count>10</comment_count>
      <attachid>460997</attachid>
    <who name="Matt Woodrow">mattwoodrow</who>
    <bug_when>2022-07-18 23:33:06 -0700</bug_when>
    <thetext>Created attachment 460997
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1885025</commentid>
    <comment_count>11</comment_count>
      <attachid>460998</attachid>
    <who name="Matt Woodrow">mattwoodrow</who>
    <bug_when>2022-07-18 23:35:33 -0700</bug_when>
    <thetext>Created attachment 460998
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1885177</commentid>
    <comment_count>12</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-07-19 13:26:03 -0700</bug_when>
    <thetext>&apos;Myles Maxfield&apos; is not a reviewer, blocking PR #None</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1885181</commentid>
    <comment_count>13</comment_count>
    <who name="Matt Woodrow">mattwoodrow</who>
    <bug_when>2022-07-19 13:35:17 -0700</bug_when>
    <thetext>Pull request: https://github.com/WebKit/WebKit/pull/2562</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1885210</commentid>
    <comment_count>14</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-07-19 15:18:12 -0700</bug_when>
    <thetext>Committed 252618@main (38edf7c001dd): &lt;https://commits.webkit.org/252618@main&gt;

Reviewed commits have been landed. Closing PR #2562 and removing active labels.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>446291</attachid>
            <date>2021-12-07 21:59:49 -0800</date>
            <delta_ts>2021-12-08 15:24:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233972-20211208165947.patch</filename>
            <type>text/plain</type>
            <size>23130</size>
            <attacher name="Cameron McCormack (:heycam)">heycam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2NjM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjI1ZDM3MjAzNGI1MWMx
NTYwMzYwYzgwZWUzMzdhZjExYmZjMDY3Ni4uZGE3NmYxZjI5M2M0Zjg4NmQ4MDIzOWRlNDM5MTgx
MTIxNjhmN2I4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY0IEBACisyMDIxLTEyLTAyICBDYW1l
cm9uIE1jQ29ybWFjayAgPGhleWNhbUBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSB0aGUgU3lz
dGVtRmFsbGJhY2tDYWNoZSB0byBGb250Q2FjaGUKKyAgICAgICAgTmVlZCB0aGUgYnVnIFVSTCAo
T09QUyEpLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFdpdGggT2Zmc2NyZWVuQ2FudmFzLCB0aGUgU3lzdGVtRmFsbGJhY2tDYWNoZSBjYW4gYmUgdG91
Y2hlZCBmcm9tCisgICAgICAgIHdvcmtlciB0aHJlYWRzLiBUaGlzIGNhY2hlIGNvbnRhaW5zIEF0
b21TdHJpbmdzLCB3aGljaCBhcmUgdGhyZWFkCisgICAgICAgIHNwZWNpZmljLgorCisgICAgICAg
IE1vdmUgdGhlIFN5c3RlbUZhbGxiYWNrQ2FjaGUgY29kZSBmcm9tIGluc2lkZSBGb250Q2FjaGUu
Y3BwIHRvIHNlcGFyYXRlCisgICAgICAgIGZpbGVzLCB0byBhdm9pZCBGb250Q2FjaGUuaCBmcm9t
IGdldHRpbmcgdG9vIG5vaXN5LiBBbHNvIHRha2UgdGhlCisgICAgICAgIG9wcG9ydHVuaXR5IHRv
IHdyYXAgaXQgaW4gYSBjbGFzcyB0byBnaXZlIGl0IG1lYW5pbmdmdWwgbWV0aG9kcy4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oOgorICAgICAgICAoV2ViQ29yZTo6
Rm9udENhY2hlOjpzeXN0ZW1GYWxsYmFja0NhY2hlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9Gb250LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnN5c3RlbUZhbGxiYWNrQ2FjaGUpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1N5c3RlbUZhbGxiYWNrQ2FjaGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U3lzdGVtRmFsbGJhY2tDYWNoZTo6Zm9yQ3VycmVudFRocmVhZCk6Cisg
ICAgICAgIE1vdmUgU3lzdGVtRmFsbGJhY2tDYWNoZSBmcm9tIGEgc2luZ2xldG9uIHRvIEZvbnRD
YWNoZS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnQ6OnNldElzVXNlZEluU3lzdGVtRmFsbGJhY2tDYWNoZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGb250Ojppc1VzZWRJblN5c3RlbUZhbGxiYWNrQ2FjaGUgY29uc3QpOgorICAgICAg
ICBOZXcgZnVuY3Rpb25zIHRvIG5vdGUgYSBGb250IGlzIGluIGEgU3lzdGVtRmFsbGJhY2tDYWNo
ZSwgc2luY2UgdGhlCisgICAgICAgIG1ldGhvZCB0aGF0IGFkZHMgaXQgdG8gYW5kIGNoZWNrcyBp
dHMgcHJlc2VuY2UgaW4gdGhlIGNhY2hlIGlzIG5vIGxvbmdlcgorICAgICAgICBpbiBGb250Lgor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGb250Ojp+Rm9udCk6CisgICAgICAgIENhbGwgYSBuZXcgU3lzdGVtRmFsbGJhY2tDYWNoZTo6
Zm9yQ3VycmVudFRocmVhZCBmdW5jdGlvbi4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0ZvbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6c3lzdGVtRmFsbGJhY2tGb250Rm9y
Q2hhcmFjdGVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnJlbW92ZUZyb21TeXN0
ZW1GYWxsYmFja0NhY2hlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TeXN0ZW1GYWxs
YmFja0NhY2hlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTeXN0ZW1GYWxsYmFja0Nh
Y2hlOjpzeXN0ZW1GYWxsYmFja0ZvbnRGb3JDaGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
U3lzdGVtRmFsbGJhY2tDYWNoZTo6cmVtb3ZlKToKKyAgICAgICAgTW92ZSBsb29rdXAgYW5kIHJl
bW92YWwgbWV0aG9kcyBmcm9tIEZvbnQgdG8gU3lzdGVtRmFsbGJhY2tDYWNoZS4KKworICAgICAg
ICAqIEhlYWRlcnMuY21ha2U6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ZvbnQuY3BwOgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om9w
ZXJhdG9yPT0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2hhcmFjdGVyRmFsbGJhY2tN
YXBLZXlIYXNoOjpoYXNoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNoYXJhY3RlckZh
bGxiYWNrTWFwS2V5SGFzaDo6ZXF1YWwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2hh
cmFjdGVyRmFsbGJhY2tNYXBLZXlIYXNoVHJhaXRzOjpjb25zdHJ1Y3REZWxldGVkVmFsdWUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2hhcmFjdGVyRmFsbGJhY2tNYXBLZXlIYXNoVHJh
aXRzOjppc0RlbGV0ZWRWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvU3lzdGVtRmFsbGJhY2tDYWNoZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN5c3Rl
bUZhbGxiYWNrQ2FjaGU6OkNoYXJhY3RlckZhbGxiYWNrTWFwS2V5OjpvcGVyYXRvcj09IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlN5c3RlbUZhbGxiYWNrQ2FjaGU6OkNoYXJhY3RlckZhbGxi
YWNrTWFwS2V5SGFzaDo6aGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpTeXN0ZW1GYWxsYmFja0Nh
Y2hlOjpDaGFyYWN0ZXJGYWxsYmFja01hcEtleUhhc2g6OmVxdWFsKToKKyAgICAgICAgKFdlYkNv
cmU6OlN5c3RlbUZhbGxiYWNrQ2FjaGU6OkNoYXJhY3RlckZhbGxiYWNrTWFwS2V5SGFzaFRyYWl0
czo6Y29uc3RydWN0RGVsZXRlZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN5c3RlbUZhbGxi
YWNrQ2FjaGU6OkNoYXJhY3RlckZhbGxiYWNrTWFwS2V5SGFzaFRyYWl0czo6aXNEZWxldGVkVmFs
dWUpOgorICAgICAgICBNb3ZlIGV4aXN0aW5nIFN5c3RlbUZhbGxiYWNrQ2FjaGUgY29kZSBmcm9t
IEZvbnQuY3BwIHRvIGEgbmV3IGZpbGUgYW5kCisgICAgICAgIHdyYXAgaXQgaW4gYSBjbGFzcy4K
KwogMjAyMS0xMi0wNyAgQ2FtZXJvbiBNY0Nvcm1hY2sgIDxoZXljYW1AYXBwbGUuY29tPgogCiAg
ICAgICAgIFJlbW92ZSBleHBhbmRBcm91bmRJZGVvZ3JhcGhzIHN0YXRpYyB2YXJpYWJsZXMKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9I
ZWFkZXJzLmNtYWtlCmluZGV4IDUxZGY1YzMwYWI5ZmRjNDU3YzhlMGRiOWQ2ZGNiYjY3YjNmNThm
YjEuLjVkMDA2NzM4MGU3NDVmOGIyMWM3YzkxNjgzOTM3MDUwN2YzMTdmZWEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvSGVhZGVy
cy5jbWFrZQpAQCAtMTUzMyw2ICsxNTMzLDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdP
UktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJ1ZmZlclByaXZhdGUuaAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQuaAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL1N0cmluZ1RydW5jYXRvci5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
U3lzdGVtRmFsbGJhY2tDYWNoZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvVGFiU2l6ZS5oCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvVGV4
dFRyYWNrUmVwcmVzZW50YXRpb24uaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNl
cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCBlZTAwYzk3NTQ2YmFlYjE3
NzM2MzMzMmI3OTQ0N2VmMTg1OTJhMjczLi40OGE5OGM5MzdjMTBlNzFkNjMzYjcwYTZkZWY1MjA2
ZjA2MGFhYTFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMjA3MCw2ICsyMDcwLDcgQEAgcGxhdGZvcm0v
Z3JhcGhpY3MvUm91bmRlZFJlY3QuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNw
cAogcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnVmZmVyUHJpdmF0ZS5jcHAKIHBsYXRmb3JtL2dy
YXBoaWNzL1N0cmluZ1RydW5jYXRvci5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL1N5c3RlbUZhbGxi
YWNrQ2FjaGUuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVuLmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvVGV4dFRyYWNrUmVwcmVzZW50YXRpb24uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9UcmFj
a1ByaXZhdGVCYXNlLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IDM4MTVmOWMyNDYzNzU4ZGQ1NWFmM2Q0ODliMTQ1NDVhNjdl
NWMwZmIuLmQ0MzM0OTc1ZTE1YjU4NjA3ZGUwNzNhYWI3YTMyMjM1MWFkOGYyOWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEw
MTIsNiArMTAxMiw3IEBACiAJCTMxRkIxQTVEMTIwQTVEMDYwMERDMDJBMCAvKiBEZXZpY2VNb3Rp
b25FdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MzFGQjFBNTUxMjBBNUQwNjAwREMwMkEwIC8qIERldmljZU1vdGlvbkV2ZW50LmggKi87IH07CiAJ
CTMxRkIxQTY2MTIwQTVEM0YwMERDMDJBMCAvKiBKU0RldmljZU1vdGlvbkV2ZW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMUZCMUE2NDEyMEE1RDNG
MDBEQzAyQTAgLyogSlNEZXZpY2VNb3Rpb25FdmVudC5oICovOyB9OwogCQkzMUZFNkRGQTE1MDA0
QzJBMDAwNEVCQzQgLyogTm90aWZpY2F0aW9uUGVybWlzc2lvbkNhbGxiYWNrLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMUVDMURBQzE0RkYyNkVBMDBD
OTQ2NjIgLyogTm90aWZpY2F0aW9uUGVybWlzc2lvbkNhbGxiYWNrLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMzIxMTJFMEYyNzRCNDdDRjAwNzA0
N0E4IC8qIFN5c3RlbUZhbGxiYWNrQ2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDMyODk5RkI5Mjc0QjQxMEMwMDg1NUE5RCAvKiBTeXN0ZW1GYWxs
YmFja0NhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMzM1MDNDOUExMDE3OUE3NDAwM0I0N0UxIC8qIE5vdGlmaWNhdGlvbkNsaWVudC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzM1MDNDOTkxMDE3
OUE3NDAwM0I0N0UxIC8qIE5vdGlmaWNhdGlvbkNsaWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTMzNTAzQ0E0MTAxNzlBRDcwMDNCNDdFMSAv
KiBKU05vdGlmaWNhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMzM1MDNDQTAxMDE3OUFENzAwM0I0N0UxIC8qIEpTTm90aWZpY2F0aW9uLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMzNEMDIxMkQx
MzFEQjM3QjAwNDA5MUE4IC8qIENvb2tpZVN0b3JhZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxM0YwMUVBMTI3MEUxMEQwMERGQkE3MSAvKiBDb29r
aWVTdG9yYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKQEAgLTgzNzMsNiArODM3NCw4IEBACiAJCTMxRkIxQTU2MTIwQTVEMDYwMERDMDJBMCAvKiBE
ZXZpY2VNb3Rpb25FdmVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRGV2aWNlTW90aW9u
RXZlbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMUZCMUE2MzEyMEE1RDNG
MDBEQzAyQTAgLyogSlNEZXZpY2VNb3Rpb25FdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBKU0RldmljZU1vdGlvbkV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMzFGQjFBNjQxMjBBNUQzRjAwREMwMkEwIC8qIEpTRGV2aWNlTW90aW9u
RXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNEZXZpY2VNb3Rpb25F
dmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMjg5OUZCNzI3NEI0MTBDMDA4
NTVBOUQgLyogU3lzdGVtRmFsbGJhY2tDYWNoZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTeXN0
ZW1GYWxsYmFja0NhY2hlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzI4OTlG
QjkyNzRCNDEwQzAwODU1QTlEIC8qIFN5c3RlbUZhbGxiYWNrQ2FjaGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU3lzdGVtRmFsbGJhY2tDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkz
MzFGRjY3REUxOTdCNTczOTNDNDZBN0YgLyogUmVuZGVyTWF0aE1MUGFkZGVkLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlck1hdGhNTFBhZGRlZC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkzMzFGRjY3REUxOTdCNTczOTNDNDZBQTcgLyogUmVuZGVyTWF0
aE1MU3BhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyTWF0aE1M
U3BhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzMzRjcwNEUwRkI0OUNBMjAw
OEUxMkE2IC8qIE5vdGlmaWNhdGlvbi5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTm90aWZp
Y2F0aW9uLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI4ODEzLDYgKzI4ODE2
LDggQEAKIAkJCQlCMjM1NDBGMDBEMDA3ODJFMDAyMzgyRkEgLyogU3RyaW5nVHJ1bmNhdG9yLmNw
cCAqLywKIAkJCQlCMjM1NDBGMTBEMDA3ODJFMDAyMzgyRkEgLyogU3RyaW5nVHJ1bmNhdG9yLmgg
Ki8sCiAJCQkJMDg3NTU4QzQxM0I0QTU3RDAwRjQ5MzA3IC8qIFN1cnJvZ2F0ZVBhaXJBd2FyZVRl
eHRJdGVyYXRvci5oICovLAorCQkJCTMyODk5RkI3Mjc0QjQxMEMwMDg1NUE5RCAvKiBTeXN0ZW1G
YWxsYmFja0NhY2hlLmNwcCAqLywKKwkJCQkzMjg5OUZCOTI3NEI0MTBDMDA4NTVBOUQgLyogU3lz
dGVtRmFsbGJhY2tDYWNoZS5oICovLAogCQkJCTNCQjZCODBGMjJBN0QzMTEwMDNBMkE2OSAvKiBU
YWJTaXplLmggKi8sCiAJCQkJMzc2RENDRTAxM0I0Rjk2NjAwMkVCRUZDIC8qIFRleHRSdW4uY3Bw
ICovLAogCQkJCUE4MjRCNDY0MEUyRUYyRUEwMDgxQTdCNyAvKiBUZXh0UnVuLmggKi8sCkBAIC0z
NzI5Nyw2ICszNzMwMiw3IEBACiAJCQkJNTE3QTUzNDYxRjUwQzE3RjAwRENEQzBBIC8qIFNXU2Vy
dmVyV29ya2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTgwODExNzE2RkNGOUNCMDBCODBEMDcg
LyogU3luY2hyb25vdXNMb2FkZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUMxNjkyREQ1
MjNEMjNFMDgwMDZFODhGNyAvKiBTeXN0ZW1CYXR0ZXJ5LmggaW4gSGVhZGVycyAqLywKKwkJCQkz
MjExMkUwRjI3NEI0N0NGMDA3MDQ3QTggLyogU3lzdGVtRmFsbGJhY2tDYWNoZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRTRFOEI0RUMyMTZCNzlFNTAwQjg4MzREIC8qIFN5c3RlbUZvbnREYXRhYmFz
ZUNvcmVUZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjAzQzA3NDE4ODQ2OTVFMDBBNUY4Q0Eg
LyogU3lzdGVtTWVtb3J5LmggaW4gSGVhZGVycyAqLywKIAkJCQlFM0MwNDEzODI1NENCMzBEMDAy
MUQwRTYgLyogU3lzdGVtU291bmREZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCmluZGV4IDRlOTQ5ZGZhYjk3NjVhMmEwN2M0
ODc4YWJlZTEwM2ZiYWYyMWY1NzAuLjQwZjRiZjRhNWNjZWQwMjljMDhmMjgyZjYyYjY2Y2MyZGJm
M2E4MWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCkBAIC0x
NzcsNyArMTc3LDcgQEAgdm9pZCBGb250OjpwbGF0Zm9ybUdseXBoSW5pdCgpCiAKIEZvbnQ6On5G
b250KCkKIHsKLSAgICByZW1vdmVGcm9tU3lzdGVtRmFsbGJhY2tDYWNoZSgpOworICAgIFN5c3Rl
bUZhbGxiYWNrQ2FjaGU6OmZvckN1cnJlbnRUaHJlYWQoKS5yZW1vdmUodGhpcyk7CiB9CiAKIFJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBGb250OjpyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIoKSBjb25zdApAQCAtNTU2LDgzICs1NTYsOSBAQCBHbHlwaEJ1ZmZlckFkdmFuY2UgRm9udDo6
YXBwbHlUcmFuc2Zvcm1zKEdseXBoQnVmZmVyJiwgdW5zaWduZWQsIHVuc2lnbmVkLCBib29sLAog
fQogI2VuZGlmCiAKLXN0cnVjdCBDaGFyYWN0ZXJGYWxsYmFja01hcEtleSB7Ci0gICAgQXRvbVN0
cmluZyBsb2NhbGU7Ci0gICAgVUNoYXIzMiBjaGFyYWN0ZXIgeyAwIH07Ci0gICAgYm9vbCBpc0Zv
clBsYXRmb3JtRm9udCB7IGZhbHNlIH07Ci19OwotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IENoYXJhY3RlckZhbGxiYWNrTWFwS2V5JiBhLCBjb25zdCBDaGFyYWN0ZXJGYWxsYmFja01h
cEtleSYgYikKLXsKLSAgICByZXR1cm4gYS5sb2NhbGUgPT0gYi5sb2NhbGUgJiYgYS5jaGFyYWN0
ZXIgPT0gYi5jaGFyYWN0ZXIgJiYgYS5pc0ZvclBsYXRmb3JtRm9udCA9PSBiLmlzRm9yUGxhdGZv
cm1Gb250OwotfQotCi1zdHJ1Y3QgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXlIYXNoIHsKLSAgICBz
dGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBDaGFyYWN0ZXJGYWxsYmFja01hcEtleSYga2V5KSB7
IHJldHVybiBjb21wdXRlSGFzaChrZXkubG9jYWxlLCBrZXkuY2hhcmFjdGVyLCBrZXkuaXNGb3JQ
bGF0Zm9ybUZvbnQpOyB9Ci0gICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgQ2hhcmFjdGVyRmFs
bGJhY2tNYXBLZXkmIGEsIGNvbnN0IENoYXJhY3RlckZhbGxiYWNrTWFwS2V5JiBiKSB7IHJldHVy
biBhID09IGI7IH0KLSAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9y
RGVsZXRlZCA9IHRydWU7Ci19OwotCi1zdHJ1Y3QgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXlIYXNo
VHJhaXRzIDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPENoYXJhY3RlckZhbGxiYWNrTWFwS2V5PiB7
Ci0gICAgc3RhdGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKENoYXJhY3RlckZhbGxiYWNr
TWFwS2V5JiBzbG90KSB7IG5ldyAoTm90TnVsbCwgJnNsb3QpIENoYXJhY3RlckZhbGxiYWNrTWFw
S2V5IHsgeyB9LCBVX1NFTlRJTkVMLCB7IH0gfTsgfQotICAgIHN0YXRpYyBib29sIGlzRGVsZXRl
ZFZhbHVlKGNvbnN0IENoYXJhY3RlckZhbGxiYWNrTWFwS2V5JiBrZXkpIHsgcmV0dXJuIGtleS5j
aGFyYWN0ZXIgPT0gVV9TRU5USU5FTDsgfQotfTsKLQotLy8gRm9udHMgYXJlIG5vdCByZWYnZCB0
byBhdm9pZCBjeWNsZXMuCi0vLyBGSVhNRTogQ29uc2lkZXIgY2hhbmdpbmcgdGhlc2UgbWFwcyB0
byB1c2UgV2Vha1B0ciBpbnN0ZWFkIG9mIHJhdyBwb2ludGVycy4KLXVzaW5nIENoYXJhY3RlckZh
bGxiYWNrTWFwID0gSGFzaE1hcDxDaGFyYWN0ZXJGYWxsYmFja01hcEtleSwgRm9udCosIENoYXJh
Y3RlckZhbGxiYWNrTWFwS2V5SGFzaCwgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXlIYXNoVHJhaXRz
PjsKLXVzaW5nIFN5c3RlbUZhbGxiYWNrQ2FjaGUgPSBIYXNoTWFwPGNvbnN0IEZvbnQqLCBDaGFy
YWN0ZXJGYWxsYmFja01hcD47Ci0KLXN0YXRpYyBTeXN0ZW1GYWxsYmFja0NhY2hlJiBzeXN0ZW1G
YWxsYmFja0NhY2hlKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3lzdGVtRmFsbGJh
Y2tDYWNoZT4gbWFwOwotICAgIHJldHVybiBtYXAuZ2V0KCk7Ci19Ci0KIFJlZlB0cjxGb250PiBG
b250OjpzeXN0ZW1GYWxsYmFja0ZvbnRGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjaGFyYWN0ZXIsIGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIElzRm9yUGxhdGZvcm1Gb250IGlzRm9y
UGxhdGZvcm1Gb250KSBjb25zdAogewotICAgIGF1dG8gZm9udEFkZFJlc3VsdCA9IHN5c3RlbUZh
bGxiYWNrQ2FjaGUoKS5hZGQodGhpcywgQ2hhcmFjdGVyRmFsbGJhY2tNYXAoKSk7Ci0KLSAgICBp
ZiAoIWNoYXJhY3RlcikgewotICAgICAgICBVQ2hhciBjb2RlVW5pdCA9IDA7Ci0gICAgICAgIHJl
dHVybiBGb250Q2FjaGU6OmZvckN1cnJlbnRUaHJlYWQoKS5zeXN0ZW1GYWxsYmFja0ZvckNoYXJh
Y3RlcnMoZGVzY3JpcHRpb24sIHRoaXMsIGlzRm9yUGxhdGZvcm1Gb250LCBGb250Q2FjaGU6OlBy
ZWZlckNvbG9yZWRGb250OjpObywgJmNvZGVVbml0LCAxKTsKLSAgICB9Ci0KLSAgICBhdXRvIGtl
eSA9IENoYXJhY3RlckZhbGxiYWNrTWFwS2V5IHsgZGVzY3JpcHRpb24uY29tcHV0ZWRMb2NhbGUo
KSwgY2hhcmFjdGVyLCBpc0ZvclBsYXRmb3JtRm9udCAhPSBJc0ZvclBsYXRmb3JtRm9udDo6Tm8g
fTsKLSAgICByZXR1cm4gZm9udEFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZW5zdXJlKFdURk1v
dmUoa2V5KSwgWyZdIHsKLSAgICAgICAgVUNoYXIgY29kZVVuaXRzWzJdOwotICAgICAgICB1bnNp
Z25lZCBjb2RlVW5pdHNMZW5ndGg7Ci0gICAgICAgIGlmIChVX0lTX0JNUChjaGFyYWN0ZXIpKSB7
Ci0gICAgICAgICAgICBjb2RlVW5pdHNbMF0gPSBGb250Q2FzY2FkZTo6bm9ybWFsaXplU3BhY2Vz
KGNoYXJhY3Rlcik7Ci0gICAgICAgICAgICBjb2RlVW5pdHNMZW5ndGggPSAxOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgY29kZVVuaXRzWzBdID0gVTE2X0xFQUQoY2hhcmFjdGVyKTsK
LSAgICAgICAgICAgIGNvZGVVbml0c1sxXSA9IFUxNl9UUkFJTChjaGFyYWN0ZXIpOwotICAgICAg
ICAgICAgY29kZVVuaXRzTGVuZ3RoID0gMjsKLSAgICAgICAgfQotICAgICAgICBhdXRvIGZvbnQg
PSBGb250Q2FjaGU6OmZvckN1cnJlbnRUaHJlYWQoKS5zeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3Rl
cnMoZGVzY3JpcHRpb24sIHRoaXMsIGlzRm9yUGxhdGZvcm1Gb250LCBGb250Q2FjaGU6OlByZWZl
ckNvbG9yZWRGb250OjpObywgY29kZVVuaXRzLCBjb2RlVW5pdHNMZW5ndGgpLmdldCgpOwotICAg
ICAgICBpZiAoZm9udCkKLSAgICAgICAgICAgIGZvbnQtPm1faXNVc2VkSW5TeXN0ZW1GYWxsYmFj
a0NhY2hlID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIGZvbnQ7Ci0gICAgfSkuaXRlcmF0b3ItPnZh
bHVlOwotfQotCi12b2lkIEZvbnQ6OnJlbW92ZUZyb21TeXN0ZW1GYWxsYmFja0NhY2hlKCkKLXsK
LSAgICBzeXN0ZW1GYWxsYmFja0NhY2hlKCkucmVtb3ZlKHRoaXMpOwotCi0gICAgaWYgKCFtX2lz
VXNlZEluU3lzdGVtRmFsbGJhY2tDYWNoZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9yIChh
dXRvJiBjaGFyYWN0ZXJNYXAgOiBzeXN0ZW1GYWxsYmFja0NhY2hlKCkudmFsdWVzKCkpIHsKLSAg
ICAgICAgVmVjdG9yPENoYXJhY3RlckZhbGxiYWNrTWFwS2V5LCA1MTI+IHRvUmVtb3ZlOwotICAg
ICAgICBmb3IgKGF1dG8mIGVudHJ5IDogY2hhcmFjdGVyTWFwKSB7Ci0gICAgICAgICAgICBpZiAo
ZW50cnkudmFsdWUgPT0gdGhpcykKLSAgICAgICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQoZW50
cnkua2V5KTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKGF1dG8mIGtleSA6IHRvUmVtb3ZlKQot
ICAgICAgICAgICAgY2hhcmFjdGVyTWFwLnJlbW92ZShrZXkpOwotICAgIH0KKyAgICByZXR1cm4g
U3lzdGVtRmFsbGJhY2tDYWNoZTo6Zm9yQ3VycmVudFRocmVhZCgpLnN5c3RlbUZhbGxiYWNrRm9u
dEZvckNoYXJhY3Rlcih0aGlzLCBjaGFyYWN0ZXIsIGRlc2NyaXB0aW9uLCBpc0ZvclBsYXRmb3Jt
Rm9udCk7CiB9CiAKICNpZiAhUExBVEZPUk0oQ09DT0EpICYmICFVU0UoRlJFRVRZUEUpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKaW5kZXggNzQ0MjAwNGYwMGI1ZGJhMjdm
M2MzMmU2NjdiMzZiY2NmNzg1MTRjZC4uNmJmNmYzMDNiM2NiZmRiNWM5NGFiYzJmOWQ2MDBmYzRm
MDUwMWE1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaApAQCAtMjA1
LDYgKzIwNSw5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgZmxvYXQgYXNjZW50Q29uc2lkZXJpbmdN
YWNBc2NlbnRIYWNrKGNvbnN0IFdDSEFSKiwgZmxvYXQgYXNjZW50LCBmbG9hdCBkZXNjZW50KTsK
ICNlbmRpZgogCisgICAgdm9pZCBzZXRJc1VzZWRJblN5c3RlbUZhbGxiYWNrQ2FjaGUoKSB7IG1f
aXNVc2VkSW5TeXN0ZW1GYWxsYmFja0NhY2hlID0gdHJ1ZTsgfQorICAgIGJvb2wgaXNVc2VkSW5T
eXN0ZW1GYWxsYmFja0NhY2hlKCkgY29uc3QgeyByZXR1cm4gbV9pc1VzZWRJblN5c3RlbUZhbGxi
YWNrQ2FjaGU7IH0KKwogcHJpdmF0ZToKICAgICBXRUJDT1JFX0VYUE9SVCBGb250KGNvbnN0IEZv
bnRQbGF0Zm9ybURhdGEmLCBPcmlnaW4sIEludGVyc3RpdGlhbCwgVmlzaWJpbGl0eSwgT3JpZW50
YXRpb25GYWxsYmFjaywgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI+
KTsKIApAQCAtMjE5LDggKzIyMiw2IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPEZvbnQ+IGNyZWF0
ZVNjYWxlZEZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNv
bnN0OwogICAgIFJlZlB0cjxGb250PiBwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZvbnQoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0OwogCi0gICAgdm9pZCByZW1v
dmVGcm9tU3lzdGVtRmFsbGJhY2tDYWNoZSgpOwotICAgIAogICAgIHN0cnVjdCBEZXJpdmVkRm9u
dHM7CiAgICAgRGVyaXZlZEZvbnRzJiBlbnN1cmVEZXJpdmVkRm9udERhdGEoKSBjb25zdDsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaAppbmRleCA3NmJi
OWYzYmJiNTE0YjAxNDViN2E5ZTE3NDc3M2M1MzQ3MTM1ZmE5Li5kZDM5ZTM2MDcxYjMxOWVkNDUy
N2E2YjYxY2Y2MjZkYmRiZWVlMzNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250Q2FjaGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250Q2FjaGUuaApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkZvbnRQbGF0Zm9y
bURhdGEuaCIKICNpbmNsdWRlICJGb250U2VsZWN0b3IuaCIKICNpbmNsdWRlICJGb250VGFnZ2Vk
U2V0dGluZ3MuaCIKKyNpbmNsdWRlICJTeXN0ZW1GYWxsYmFja0NhY2hlLmgiCiAjaW5jbHVkZSAi
VGltZXIuaCIKICNpbmNsdWRlIDxhcnJheT4KICNpbmNsdWRlIDxsaW1pdHMuaD4KQEAgLTM2MCw2
ICszNjEsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBwcmV3YXJtKGNvbnN0IFByZXdhcm1JbmZvcm1h
dGlvbiYpOwogICAgIHN0YXRpYyB2b2lkIHByZXdhcm1HbG9iYWxseSgpOwogCisgICAgU3lzdGVt
RmFsbGJhY2tDYWNoZSYgc3lzdGVtRmFsbGJhY2tDYWNoZSgpIHsgcmV0dXJuIG1fc3lzdGVtRmFs
bGJhY2tDYWNoZTsgfQorCiBwcml2YXRlOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcHVyZ2VJ
bmFjdGl2ZUZvbnREYXRhSWZOZWVkZWQoKTsKICAgICB2b2lkIHBydW5lVW5yZWZlcmVuY2VkRW50
cmllc0Zyb21Gb250Q2FzY2FkZUNhY2hlKCk7CkBAIC0zODYsNiArMzg5LDcgQEAgcHJpdmF0ZToK
ICAgICBzdHJ1Y3QgRm9udERhdGFDYWNoZXM7CiAgICAgVW5pcXVlUmVmPEZvbnREYXRhQ2FjaGVz
PiBtX2ZvbnREYXRhQ2FjaGVzOwogICAgIEZvbnRDYXNjYWRlQ2FjaGUgbV9mb250Q2FzY2FkZUNh
Y2hlOworICAgIFN5c3RlbUZhbGxiYWNrQ2FjaGUgbV9zeXN0ZW1GYWxsYmFja0NhY2hlOwogCiAg
ICAgdW5zaWduZWQgc2hvcnQgbV9nZW5lcmF0aW9uIHsgMCB9OwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TeXN0ZW1GYWxsYmFja0NhY2hlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N5c3RlbUZhbGxiYWNrQ2FjaGUuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjM4NTA4OWIzMWIxZmQyODViNjI1MmM2MzRiM2YzM2YyMDkyMjdkMGMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TeXN0ZW1GYWxs
YmFja0NhY2hlLmNwcApAQCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA2IEFsZXhleSBQcm9za3VyeWFrb3YKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRo
ZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICog
ICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTeXN0ZW1GYWxs
YmFja0NhY2hlLmgiCisKKyNpbmNsdWRlICJGb250Q2FjaGUuaCIKKyNpbmNsdWRlICJGb250Q2Fz
Y2FkZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1N5c3RlbUZhbGxiYWNrQ2FjaGUmIFN5
c3RlbUZhbGxiYWNrQ2FjaGU6OmZvckN1cnJlbnRUaHJlYWQoKQoreworICAgIHJldHVybiBGb250
Q2FjaGU6OmZvckN1cnJlbnRUaHJlYWQoKS5zeXN0ZW1GYWxsYmFja0NhY2hlKCk7Cit9CisKK1Jl
ZlB0cjxGb250PiBTeXN0ZW1GYWxsYmFja0NhY2hlOjpzeXN0ZW1GYWxsYmFja0ZvbnRGb3JDaGFy
YWN0ZXIoY29uc3QgRm9udCogZm9udCwgVUNoYXIzMiBjaGFyYWN0ZXIsIGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZGVzY3JpcHRpb24sIElzRm9yUGxhdGZvcm1Gb250IGlzRm9yUGxhdGZvcm1Gb250
KQoreworICAgIGF1dG8gZm9udEFkZFJlc3VsdCA9IG1fY2hhcmFjdGVyRmFsbGJhY2tNYXBzLmFk
ZChmb250LCBDaGFyYWN0ZXJGYWxsYmFja01hcCgpKTsKKworICAgIGlmICghY2hhcmFjdGVyKSB7
CisgICAgICAgIFVDaGFyIGNvZGVVbml0ID0gMDsKKyAgICAgICAgcmV0dXJuIEZvbnRDYWNoZTo6
Zm9yQ3VycmVudFRocmVhZCgpLnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhkZXNjcmlwdGlv
biwgZm9udCwgaXNGb3JQbGF0Zm9ybUZvbnQsIEZvbnRDYWNoZTo6UHJlZmVyQ29sb3JlZEZvbnQ6
Ok5vLCAmY29kZVVuaXQsIDEpOworICAgIH0KKworICAgIGF1dG8ga2V5ID0gQ2hhcmFjdGVyRmFs
bGJhY2tNYXBLZXkgeyBkZXNjcmlwdGlvbi5jb21wdXRlZExvY2FsZSgpLCBjaGFyYWN0ZXIsIGlz
Rm9yUGxhdGZvcm1Gb250ICE9IElzRm9yUGxhdGZvcm1Gb250OjpObyB9OworICAgIHJldHVybiBm
b250QWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5lbnN1cmUoV1RGTW92ZShrZXkpLCBbJl0gewor
ICAgICAgICBVQ2hhciBjb2RlVW5pdHNbMl07CisgICAgICAgIHVuc2lnbmVkIGNvZGVVbml0c0xl
bmd0aDsKKyAgICAgICAgaWYgKFVfSVNfQk1QKGNoYXJhY3RlcikpIHsKKyAgICAgICAgICAgIGNv
ZGVVbml0c1swXSA9IEZvbnRDYXNjYWRlOjpub3JtYWxpemVTcGFjZXMoY2hhcmFjdGVyKTsKKyAg
ICAgICAgICAgIGNvZGVVbml0c0xlbmd0aCA9IDE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBjb2RlVW5pdHNbMF0gPSBVMTZfTEVBRChjaGFyYWN0ZXIpOworICAgICAgICAgICAgY29k
ZVVuaXRzWzFdID0gVTE2X1RSQUlMKGNoYXJhY3Rlcik7CisgICAgICAgICAgICBjb2RlVW5pdHNM
ZW5ndGggPSAyOworICAgICAgICB9CisgICAgICAgIGF1dG8gZmFsbGJhY2tGb250ID0gRm9udENh
Y2hlOjpmb3JDdXJyZW50VGhyZWFkKCkuc3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGRlc2Ny
aXB0aW9uLCBmb250LCBpc0ZvclBsYXRmb3JtRm9udCwgRm9udENhY2hlOjpQcmVmZXJDb2xvcmVk
Rm9udDo6Tm8sIGNvZGVVbml0cywgY29kZVVuaXRzTGVuZ3RoKS5nZXQoKTsKKyAgICAgICAgaWYg
KGZhbGxiYWNrRm9udCkKKyAgICAgICAgICAgIGZhbGxiYWNrRm9udC0+c2V0SXNVc2VkSW5TeXN0
ZW1GYWxsYmFja0NhY2hlKCk7CisgICAgICAgIHJldHVybiBmYWxsYmFja0ZvbnQ7CisgICAgfSku
aXRlcmF0b3ItPnZhbHVlOworfQorCit2b2lkIFN5c3RlbUZhbGxiYWNrQ2FjaGU6OnJlbW92ZShG
b250KiBmb250KQoreworICAgIG1fY2hhcmFjdGVyRmFsbGJhY2tNYXBzLnJlbW92ZShmb250KTsK
KworICAgIGlmICghZm9udC0+aXNVc2VkSW5TeXN0ZW1GYWxsYmFja0NhY2hlKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGZvciAoYXV0byYgY2hhcmFjdGVyTWFwIDogbV9jaGFyYWN0ZXJGYWxs
YmFja01hcHMudmFsdWVzKCkpIHsKKyAgICAgICAgVmVjdG9yPENoYXJhY3RlckZhbGxiYWNrTWFw
S2V5LCA1MTI+IHRvUmVtb3ZlOworICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogY2hhcmFjdGVy
TWFwKSB7CisgICAgICAgICAgICBpZiAoZW50cnkudmFsdWUgPT0gZm9udCkKKyAgICAgICAgICAg
ICAgICB0b1JlbW92ZS5hcHBlbmQoZW50cnkua2V5KTsKKyAgICAgICAgfQorICAgICAgICBmb3Ig
KGF1dG8mIGtleSA6IHRvUmVtb3ZlKQorICAgICAgICAgICAgY2hhcmFjdGVyTWFwLnJlbW92ZShr
ZXkpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3lzdGVtRmFsbGJhY2tDYWNoZS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3lzdGVtRmFsbGJhY2tDYWNoZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmIzNDdlMzA3YTk2NDM5YjM0MTUwOTUzM2U2NDJlZWIzODQ4N2I2NDUKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TeXN0ZW1GYWxsYmFj
a0NhY2hlLmgKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBB
bGV4ZXkgUHJvc2t1cnlha292CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBp
dHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5j
bHVkZSA8d3RmL0hhc2hUcmFpdHMuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaGVyLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvQXRvbVN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IEZvbnQ7CitjbGFzcyBGb250RGVzY3JpcHRpb247CitlbnVtIGNsYXNzIElzRm9yUGxhdGZvcm1G
b250IDogYm9vbDsKKworY2xhc3MgU3lzdGVtRmFsbGJhY2tDYWNoZSB7CisgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoU3lzdGVtRmFsbGJhY2tDYWNoZSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CitwdWJsaWM6CisgICAgc3RhdGljIFN5c3RlbUZhbGxiYWNrQ2FjaGUmIGZvckN1cnJl
bnRUaHJlYWQoKTsKKworICAgIFN5c3RlbUZhbGxiYWNrQ2FjaGUoKSA9IGRlZmF1bHQ7CisKKyAg
ICBSZWZQdHI8Rm9udD4gc3lzdGVtRmFsbGJhY2tGb250Rm9yQ2hhcmFjdGVyKGNvbnN0IEZvbnQq
LCBVQ2hhcjMyIGNoYXJhY3RlciwgY29uc3QgRm9udERlc2NyaXB0aW9uJiwgSXNGb3JQbGF0Zm9y
bUZvbnQpOworICAgIHZvaWQgcmVtb3ZlKEZvbnQqKTsKKworcHJpdmF0ZToKKyAgICBzdHJ1Y3Qg
Q2hhcmFjdGVyRmFsbGJhY2tNYXBLZXkgeworICAgICAgICBBdG9tU3RyaW5nIGxvY2FsZTsKKyAg
ICAgICAgVUNoYXIzMiBjaGFyYWN0ZXIgeyAwIH07CisgICAgICAgIGJvb2wgaXNGb3JQbGF0Zm9y
bUZvbnQgeyBmYWxzZSB9OworCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDaGFyYWN0
ZXJGYWxsYmFja01hcEtleSYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBsb2NhbGUgPT0gb3RoZXIubG9jYWxlICYmIGNoYXJhY3RlciA9PSBvdGhlci5jaGFyYWN0
ZXIgJiYgaXNGb3JQbGF0Zm9ybUZvbnQgPT0gb3RoZXIuaXNGb3JQbGF0Zm9ybUZvbnQ7CisgICAg
ICAgIH0KKyAgICB9OworCisgICAgc3RydWN0IENoYXJhY3RlckZhbGxiYWNrTWFwS2V5SGFzaCB7
CisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IENoYXJhY3RlckZhbGxiYWNrTWFw
S2V5JiBrZXkpIHsgcmV0dXJuIGNvbXB1dGVIYXNoKGtleS5sb2NhbGUsIGtleS5jaGFyYWN0ZXIs
IGtleS5pc0ZvclBsYXRmb3JtRm9udCk7IH0KKyAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29u
c3QgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXkmIGEsIGNvbnN0IENoYXJhY3RlckZhbGxiYWNrTWFw
S2V5JiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgc2Fm
ZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworICAgIH07CisKKyAgICBzdHJ1Y3Qg
Q2hhcmFjdGVyRmFsbGJhY2tNYXBLZXlIYXNoVHJhaXRzIDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRz
PENoYXJhY3RlckZhbGxiYWNrTWFwS2V5PiB7CisgICAgICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVj
dERlbGV0ZWRWYWx1ZShDaGFyYWN0ZXJGYWxsYmFja01hcEtleSYgc2xvdCkgeyBuZXcgKE5vdE51
bGwsICZzbG90KSBDaGFyYWN0ZXJGYWxsYmFja01hcEtleSB7IHsgfSwgVV9TRU5USU5FTCwgeyB9
IH07IH0KKyAgICAgICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoY29uc3QgQ2hhcmFjdGVy
RmFsbGJhY2tNYXBLZXkmIGtleSkgeyByZXR1cm4ga2V5LmNoYXJhY3RlciA9PSBVX1NFTlRJTkVM
OyB9CisgICAgfTsKKworICAgIC8vIEZvbnRzIGFyZSBub3QgcmVmJ2QgdG8gYXZvaWQgY3ljbGVz
LgorICAgIC8vIEZJWE1FOiBDb25zaWRlciBjaGFuZ2luZyB0aGVzZSBtYXBzIHRvIHVzZSBXZWFr
UHRyIGluc3RlYWQgb2YgcmF3IHBvaW50ZXJzLgorICAgIHVzaW5nIENoYXJhY3RlckZhbGxiYWNr
TWFwID0gSGFzaE1hcDxDaGFyYWN0ZXJGYWxsYmFja01hcEtleSwgRm9udCosIENoYXJhY3RlckZh
bGxiYWNrTWFwS2V5SGFzaCwgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXlIYXNoVHJhaXRzPjsKKwor
ICAgIEhhc2hNYXA8Y29uc3QgRm9udCosIENoYXJhY3RlckZhbGxiYWNrTWFwPiBtX2NoYXJhY3Rl
ckZhbGxiYWNrTWFwczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>446437</attachid>
            <date>2021-12-08 15:24:26 -0800</date>
            <delta_ts>2021-12-08 21:01:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233972-20211209102425.patch</filename>
            <type>text/plain</type>
            <size>25832</size>
            <attacher name="Cameron McCormack (:heycam)">heycam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2NjM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjI1ZDM3MjAzNGI1MWMx
NTYwMzYwYzgwZWUzMzdhZjExYmZjMDY3Ni4uYTljZGI1MWMzMjExY2MzYzM4NWFjM2Q4MDViNDM4
MjUxNWZlNjk2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcyIEBACisyMDIxLTEyLTAyICBDYW1l
cm9uIE1jQ29ybWFjayAgPGhleWNhbUBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSB0aGUgU3lz
dGVtRmFsbGJhY2tDYWNoZSB0byBGb250Q2FjaGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMzk3MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFdpdGggT2Zmc2NyZWVuQ2FudmFzLCB0aGUgU3lzdGVtRmFs
bGJhY2tDYWNoZSBjYW4gYmUgdG91Y2hlZCBmcm9tCisgICAgICAgIHdvcmtlciB0aHJlYWRzLiBU
aGlzIGNhY2hlIGNvbnRhaW5zIEF0b21TdHJpbmdzLCB3aGljaCBhcmUgdGhyZWFkCisgICAgICAg
IHNwZWNpZmljLgorCisgICAgICAgIE1vdmUgdGhlIFN5c3RlbUZhbGxiYWNrQ2FjaGUgY29kZSBm
cm9tIGluc2lkZSBGb250Q2FjaGUuY3BwIHRvIHNlcGFyYXRlCisgICAgICAgIGZpbGVzLCB0byBh
dm9pZCBGb250Q2FjaGUuaCBmcm9tIGdldHRpbmcgdG9vIG5vaXN5LiBBbHNvIHRha2UgdGhlCisg
ICAgICAgIG9wcG9ydHVuaXR5IHRvIHdyYXAgaXQgaW4gYSBjbGFzcyB0byBnaXZlIGl0IG1lYW5p
bmdmdWwgbWV0aG9kcy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5o
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpzeXN0ZW1GYWxsYmFja0NhY2hlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnN5
c3RlbUZhbGxiYWNrQ2FjaGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1N5c3RlbUZh
bGxiYWNrQ2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3lzdGVtRmFsbGJhY2tDYWNoZTo6
Zm9yQ3VycmVudFRocmVhZCk6CisgICAgICAgIE1vdmUgU3lzdGVtRmFsbGJhY2tDYWNoZSBmcm9t
IGEgc2luZ2xldG9uIHRvIEZvbnRDYWNoZS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0ZvbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnNldElzVXNlZEluU3lzdGVtRmFsbGJh
Y2tDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Ojppc1VzZWRJblN5c3RlbUZhbGxiYWNr
Q2FjaGUgY29uc3QpOgorICAgICAgICBOZXcgZnVuY3Rpb25zIHRvIG5vdGUgYSBGb250IGlzIGlu
IGEgU3lzdGVtRmFsbGJhY2tDYWNoZSwgc2luY2UgdGhlCisgICAgICAgIG1ldGhvZCB0aGF0IGFk
ZHMgaXQgdG8gYW5kIGNoZWNrcyBpdHMgcHJlc2VuY2UgaW4gdGhlIGNhY2hlIGlzIG5vIGxvbmdl
cgorICAgICAgICBpbiBGb250LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Ojp+Rm9udCk6CisgICAgICAgIENhbGwgYSBuZXcg
U3lzdGVtRmFsbGJhY2tDYWNoZTo6Zm9yQ3VycmVudFRocmVhZCBmdW5jdGlvbi4KKworICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6
c3lzdGVtRmFsbGJhY2tGb250Rm9yQ2hhcmFjdGVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnQ6OnJlbW92ZUZyb21TeXN0ZW1GYWxsYmFja0NhY2hlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9TeXN0ZW1GYWxsYmFja0NhY2hlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpTeXN0ZW1GYWxsYmFja0NhY2hlOjpzeXN0ZW1GYWxsYmFja0ZvbnRGb3JDaGFyYWN0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6U3lzdGVtRmFsbGJhY2tDYWNoZTo6cmVtb3ZlKToKKyAgICAg
ICAgTW92ZSBsb29rdXAgYW5kIHJlbW92YWwgbWV0aG9kcyBmcm9tIEZvbnQgdG8gU3lzdGVtRmFs
bGJhY2tDYWNoZS4KKworICAgICAgICAqIEhlYWRlcnMuY21ha2U6CisgICAgICAgICogU291cmNl
cy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwOgorICAgICAgICAoKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Q2hhcmFjdGVyRmFsbGJhY2tNYXBLZXlIYXNoOjpoYXNoKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkNoYXJhY3RlckZhbGxiYWNrTWFwS2V5SGFzaDo6ZXF1YWwpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q2hhcmFjdGVyRmFsbGJhY2tNYXBLZXlIYXNoVHJhaXRzOjpjb25z
dHJ1Y3REZWxldGVkVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2hhcmFjdGVy
RmFsbGJhY2tNYXBLZXlIYXNoVHJhaXRzOjppc0RlbGV0ZWRWYWx1ZSk6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU3lzdGVtRmFsbGJhY2tDYWNoZS5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlN5c3RlbUZhbGxiYWNrQ2FjaGU6OkNoYXJhY3RlckZhbGxiYWNrTWFw
S2V5OjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN5c3RlbUZhbGxiYWNr
Q2FjaGU6OkNoYXJhY3RlckZhbGxiYWNrTWFwS2V5SGFzaDo6aGFzaCk6CisgICAgICAgIChXZWJD
b3JlOjpTeXN0ZW1GYWxsYmFja0NhY2hlOjpDaGFyYWN0ZXJGYWxsYmFja01hcEtleUhhc2g6OmVx
dWFsKToKKyAgICAgICAgKFdlYkNvcmU6OlN5c3RlbUZhbGxiYWNrQ2FjaGU6OkNoYXJhY3RlckZh
bGxiYWNrTWFwS2V5SGFzaFRyYWl0czo6Y29uc3RydWN0RGVsZXRlZFZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OlN5c3RlbUZhbGxiYWNrQ2FjaGU6OkNoYXJhY3RlckZhbGxiYWNrTWFwS2V5SGFz
aFRyYWl0czo6aXNEZWxldGVkVmFsdWUpOgorICAgICAgICBNb3ZlIGV4aXN0aW5nIFN5c3RlbUZh
bGxiYWNrQ2FjaGUgY29kZSBmcm9tIEZvbnQuY3BwIHRvIGEgbmV3IGZpbGUgYW5kCisgICAgICAg
IHdyYXAgaXQgaW4gYSBjbGFzcy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0
eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnN5c3RlbUZhbGxi
YWNrRm9udFNldENhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6c3lzdGVtRmFs
bGJhY2tGb3JDaGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6cGxhdGZv
cm1QdXJnZUluYWN0aXZlRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6c3lzdGVtRmFsbGJh
Y2tDYWNoZSk6CisgICAgICAgIFJlbmFtZSB0aGUgU3lzdGVtRmFsbGJhY2tDYWNoZSBpbiBGb250
Q2FjaGVGcmVlVHlwZS5jcHAsIHdoaWNoIGlzIHVzZWQKKyAgICAgICAgZm9yIGEgZGlmZmVyZW50
IHB1cnBvc2UgZnJvbSB0aGUgb25lIHRoYXQgbGl2ZWQgaW4gRm9udC5jcHAuCisKIDIwMjEtMTIt
MDcgIENhbWVyb24gTWNDb3JtYWNrICA8aGV5Y2FtQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1v
dmUgZXhwYW5kQXJvdW5kSWRlb2dyYXBocyBzdGF0aWMgdmFyaWFibGVzCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFr
ZQppbmRleCA1MWRmNWMzMGFiOWZkYzQ1N2M4ZTBkYjlkNmRjYmI2N2IzZjU4ZmIxLi41ZDAwNjcz
ODBlNzQ1ZjhiMjFjN2M5MTY4MzkzNzA1MDdmMzE3ZmVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAg
LTE1MzMsNiArMTUzMyw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlLmgKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50LmgKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9TdHJpbmdUcnVuY2F0b3IuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL1N5c3RlbUZhbGxi
YWNrQ2FjaGUuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1RhYlNpemUuaAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL1RleHRSdW4uaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1RleHRUcmFja1JlcHJl
c2VudGF0aW9uLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291
cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggZWUwMGM5NzU0NmJhZWIxNzczNjMzMzJiNzk0
NDdlZjE4NTkyYTI3My4uNDhhOThjOTM3YzEwZTcxZDYzM2I3MGE2ZGVmNTIwNmYwNjBhYWExZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNv
cmUvU291cmNlcy50eHQKQEAgLTIwNzAsNiArMjA3MCw3IEBAIHBsYXRmb3JtL2dyYXBoaWNzL1Jv
dW5kZWRSZWN0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKIHBsYXRmb3Jt
L2dyYXBoaWNzL1NvdXJjZUJ1ZmZlclByaXZhdGUuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9TdHJp
bmdUcnVuY2F0b3IuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9TeXN0ZW1GYWxsYmFja0NhY2hlLmNw
cAogcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1RleHRU
cmFja1JlcHJlc2VudGF0aW9uLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvVHJhY2tQcml2YXRlQmFz
ZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagppbmRleCAzODE1ZjljMjQ2Mzc1OGRkNTVhZjNkNDg5YjE0NTQ1YTY3ZTVjMGZiLi5kNDMz
NDk3NWUxNWI1ODYwN2RlMDczYWFiN2EzMjIzNTFhZDhmMjljIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMDEyLDYgKzEwMTIs
NyBAQAogCQkzMUZCMUE1RDEyMEE1RDA2MDBEQzAyQTAgLyogRGV2aWNlTW90aW9uRXZlbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxRkIxQTU1MTIw
QTVEMDYwMERDMDJBMCAvKiBEZXZpY2VNb3Rpb25FdmVudC5oICovOyB9OwogCQkzMUZCMUE2NjEy
MEE1RDNGMDBEQzAyQTAgLyogSlNEZXZpY2VNb3Rpb25FdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzFGQjFBNjQxMjBBNUQzRjAwREMwMkEwIC8q
IEpTRGV2aWNlTW90aW9uRXZlbnQuaCAqLzsgfTsKIAkJMzFGRTZERkExNTAwNEMyQTAwMDRFQkM0
IC8qIE5vdGlmaWNhdGlvblBlcm1pc3Npb25DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzFFQzFEQUMxNEZGMjZFQTAwQzk0NjYyIC8qIE5v
dGlmaWNhdGlvblBlcm1pc3Npb25DYWxsYmFjay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTMyMTEyRTBGMjc0QjQ3Q0YwMDcwNDdBOCAvKiBTeXN0
ZW1GYWxsYmFja0NhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAzMjg5OUZCOTI3NEI0MTBDMDA4NTVBOUQgLyogU3lzdGVtRmFsbGJhY2tDYWNoZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTMzNTAz
QzlBMTAxNzlBNzQwMDNCNDdFMSAvKiBOb3RpZmljYXRpb25DbGllbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzNTAzQzk5MTAxNzlBNzQwMDNCNDdF
MSAvKiBOb3RpZmljYXRpb25DbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkzMzUwM0NBNDEwMTc5QUQ3MDAzQjQ3RTEgLyogSlNOb3RpZmlj
YXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMz
NTAzQ0EwMTAxNzlBRDcwMDNCNDdFMSAvKiBKU05vdGlmaWNhdGlvbi5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTMzRDAyMTJEMTMxREIzN0IwMDQw
OTFBOCAvKiBDb29raWVTdG9yYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFMTNGMDFFQTEyNzBFMTBEMDBERkJBNzEgLyogQ29va2llU3RvcmFnZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC04Mzcz
LDYgKzgzNzQsOCBAQAogCQkzMUZCMUE1NjEyMEE1RDA2MDBEQzAyQTAgLyogRGV2aWNlTW90aW9u
RXZlbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IERldmljZU1vdGlvbkV2ZW50LmlkbDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzFGQjFBNjMxMjBBNUQzRjAwREMwMkEwIC8q
IEpTRGV2aWNlTW90aW9uRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNEZXZpY2VNb3Rpb25FdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTMxRkIxQTY0MTIwQTVEM0YwMERDMDJBMCAvKiBKU0RldmljZU1vdGlvbkV2ZW50LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRGV2aWNlTW90aW9uRXZlbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzI4OTlGQjcyNzRCNDEwQzAwODU1QTlEIC8qIFN5
c3RlbUZhbGxiYWNrQ2FjaGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3lzdGVtRmFsbGJhY2tD
YWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMyODk5RkI5Mjc0QjQxMEMw
MDg1NUE5RCAvKiBTeXN0ZW1GYWxsYmFja0NhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN5c3RlbUZh
bGxiYWNrQ2FjaGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzMxRkY2N0RFMTk3
QjU3MzkzQzQ2QTdGIC8qIFJlbmRlck1hdGhNTFBhZGRlZC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBSZW5kZXJNYXRoTUxQYWRkZWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMzMxRkY2N0RFMTk3QjU3MzkzQzQ2QUE3IC8qIFJlbmRlck1hdGhNTFNwYWNlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlck1hdGhNTFNwYWNlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMzM0Y3MDRFMEZCNDlDQTIwMDhFMTJBNiAvKiBO
b3RpZmljYXRpb24uaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IE5vdGlmaWNhdGlvbi5pZGw7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yODgxMyw2ICsyODgxNiw4IEBACiAJCQkJ
QjIzNTQwRjAwRDAwNzgyRTAwMjM4MkZBIC8qIFN0cmluZ1RydW5jYXRvci5jcHAgKi8sCiAJCQkJ
QjIzNTQwRjEwRDAwNzgyRTAwMjM4MkZBIC8qIFN0cmluZ1RydW5jYXRvci5oICovLAogCQkJCTA4
NzU1OEM0MTNCNEE1N0QwMEY0OTMwNyAvKiBTdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3Iu
aCAqLywKKwkJCQkzMjg5OUZCNzI3NEI0MTBDMDA4NTVBOUQgLyogU3lzdGVtRmFsbGJhY2tDYWNo
ZS5jcHAgKi8sCisJCQkJMzI4OTlGQjkyNzRCNDEwQzAwODU1QTlEIC8qIFN5c3RlbUZhbGxiYWNr
Q2FjaGUuaCAqLywKIAkJCQkzQkI2QjgwRjIyQTdEMzExMDAzQTJBNjkgLyogVGFiU2l6ZS5oICov
LAogCQkJCTM3NkRDQ0UwMTNCNEY5NjYwMDJFQkVGQyAvKiBUZXh0UnVuLmNwcCAqLywKIAkJCQlB
ODI0QjQ2NDBFMkVGMkVBMDA4MUE3QjcgLyogVGV4dFJ1bi5oICovLApAQCAtMzcyOTcsNiArMzcz
MDIsNyBAQAogCQkJCTUxN0E1MzQ2MUY1MEMxN0YwMERDREMwQSAvKiBTV1NlcnZlcldvcmtlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRTE4MDgxMTcxNkZDRjlDQjAwQjgwRDA3IC8qIFN5bmNocm9u
b3VzTG9hZGVyQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlDMTY5MkRENTIzRDIzRTA4MDA2
RTg4RjcgLyogU3lzdGVtQmF0dGVyeS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzIxMTJFMEYyNzRC
NDdDRjAwNzA0N0E4IC8qIFN5c3RlbUZhbGxiYWNrQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUU0RThCNEVDMjE2Qjc5RTUwMEI4ODM0RCAvKiBTeXN0ZW1Gb250RGF0YWJhc2VDb3JlVGV4dC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwM0MwNzQxODg0Njk1RTAwQTVGOENBIC8qIFN5c3RlbU1l
bW9yeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTNDMDQxMzgyNTRDQjMwRDAwMjFEMEU2IC8qIFN5
c3RlbVNvdW5kRGVsZWdhdGUuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250LmNwcAppbmRleCA0ZTk0OWRmYWI5NzY1YTJhMDdjNDg3OGFiZWUxMDNm
YmFmMjFmNTcwLi40MGY0YmY0YTVjY2VkMDI5YzA4ZjI4MmY2MmI2NmNjMmRiZjNhODFmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcApAQCAtMTc3LDcgKzE3Nyw3
IEBAIHZvaWQgRm9udDo6cGxhdGZvcm1HbHlwaEluaXQoKQogCiBGb250Ojp+Rm9udCgpCiB7Ci0g
ICAgcmVtb3ZlRnJvbVN5c3RlbUZhbGxiYWNrQ2FjaGUoKTsKKyAgICBTeXN0ZW1GYWxsYmFja0Nh
Y2hlOjpmb3JDdXJyZW50VGhyZWFkKCkucmVtb3ZlKHRoaXMpOwogfQogCiBSZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIgRm9udDo6cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCkgY29uc3QK
QEAgLTU1Niw4MyArNTU2LDkgQEAgR2x5cGhCdWZmZXJBZHZhbmNlIEZvbnQ6OmFwcGx5VHJhbnNm
b3JtcyhHbHlwaEJ1ZmZlciYsIHVuc2lnbmVkLCB1bnNpZ25lZCwgYm9vbCwKIH0KICNlbmRpZgog
Ci1zdHJ1Y3QgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXkgewotICAgIEF0b21TdHJpbmcgbG9jYWxl
OwotICAgIFVDaGFyMzIgY2hhcmFjdGVyIHsgMCB9OwotICAgIGJvb2wgaXNGb3JQbGF0Zm9ybUZv
bnQgeyBmYWxzZSB9OwotfTsKLQotaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDaGFyYWN0
ZXJGYWxsYmFja01hcEtleSYgYSwgY29uc3QgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXkmIGIpCi17
Ci0gICAgcmV0dXJuIGEubG9jYWxlID09IGIubG9jYWxlICYmIGEuY2hhcmFjdGVyID09IGIuY2hh
cmFjdGVyICYmIGEuaXNGb3JQbGF0Zm9ybUZvbnQgPT0gYi5pc0ZvclBsYXRmb3JtRm9udDsKLX0K
LQotc3RydWN0IENoYXJhY3RlckZhbGxiYWNrTWFwS2V5SGFzaCB7Ci0gICAgc3RhdGljIHVuc2ln
bmVkIGhhc2goY29uc3QgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXkmIGtleSkgeyByZXR1cm4gY29t
cHV0ZUhhc2goa2V5LmxvY2FsZSwga2V5LmNoYXJhY3Rlciwga2V5LmlzRm9yUGxhdGZvcm1Gb250
KTsgfQotICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IENoYXJhY3RlckZhbGxiYWNrTWFwS2V5
JiBhLCBjb25zdCBDaGFyYWN0ZXJGYWxsYmFja01hcEtleSYgYikgeyByZXR1cm4gYSA9PSBiOyB9
Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0
cnVlOwotfTsKLQotc3RydWN0IENoYXJhY3RlckZhbGxiYWNrTWFwS2V5SGFzaFRyYWl0cyA6IFNp
bXBsZUNsYXNzSGFzaFRyYWl0czxDaGFyYWN0ZXJGYWxsYmFja01hcEtleT4gewotICAgIHN0YXRp
YyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShDaGFyYWN0ZXJGYWxsYmFja01hcEtleSYgc2xv
dCkgeyBuZXcgKE5vdE51bGwsICZzbG90KSBDaGFyYWN0ZXJGYWxsYmFja01hcEtleSB7IHsgfSwg
VV9TRU5USU5FTCwgeyB9IH07IH0KLSAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShjb25z
dCBDaGFyYWN0ZXJGYWxsYmFja01hcEtleSYga2V5KSB7IHJldHVybiBrZXkuY2hhcmFjdGVyID09
IFVfU0VOVElORUw7IH0KLX07Ci0KLS8vIEZvbnRzIGFyZSBub3QgcmVmJ2QgdG8gYXZvaWQgY3lj
bGVzLgotLy8gRklYTUU6IENvbnNpZGVyIGNoYW5naW5nIHRoZXNlIG1hcHMgdG8gdXNlIFdlYWtQ
dHIgaW5zdGVhZCBvZiByYXcgcG9pbnRlcnMuCi11c2luZyBDaGFyYWN0ZXJGYWxsYmFja01hcCA9
IEhhc2hNYXA8Q2hhcmFjdGVyRmFsbGJhY2tNYXBLZXksIEZvbnQqLCBDaGFyYWN0ZXJGYWxsYmFj
a01hcEtleUhhc2gsIENoYXJhY3RlckZhbGxiYWNrTWFwS2V5SGFzaFRyYWl0cz47Ci11c2luZyBT
eXN0ZW1GYWxsYmFja0NhY2hlID0gSGFzaE1hcDxjb25zdCBGb250KiwgQ2hhcmFjdGVyRmFsbGJh
Y2tNYXA+OwotCi1zdGF0aWMgU3lzdGVtRmFsbGJhY2tDYWNoZSYgc3lzdGVtRmFsbGJhY2tDYWNo
ZSgpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN5c3RlbUZhbGxiYWNrQ2FjaGU+IG1h
cDsKLSAgICByZXR1cm4gbWFwLmdldCgpOwotfQotCiBSZWZQdHI8Rm9udD4gRm9udDo6c3lzdGVt
RmFsbGJhY2tGb250Rm9yQ2hhcmFjdGVyKFVDaGFyMzIgY2hhcmFjdGVyLCBjb25zdCBGb250RGVz
Y3JpcHRpb24mIGRlc2NyaXB0aW9uLCBJc0ZvclBsYXRmb3JtRm9udCBpc0ZvclBsYXRmb3JtRm9u
dCkgY29uc3QKIHsKLSAgICBhdXRvIGZvbnRBZGRSZXN1bHQgPSBzeXN0ZW1GYWxsYmFja0NhY2hl
KCkuYWRkKHRoaXMsIENoYXJhY3RlckZhbGxiYWNrTWFwKCkpOwotCi0gICAgaWYgKCFjaGFyYWN0
ZXIpIHsKLSAgICAgICAgVUNoYXIgY29kZVVuaXQgPSAwOwotICAgICAgICByZXR1cm4gRm9udENh
Y2hlOjpmb3JDdXJyZW50VGhyZWFkKCkuc3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGRlc2Ny
aXB0aW9uLCB0aGlzLCBpc0ZvclBsYXRmb3JtRm9udCwgRm9udENhY2hlOjpQcmVmZXJDb2xvcmVk
Rm9udDo6Tm8sICZjb2RlVW5pdCwgMSk7Ci0gICAgfQotCi0gICAgYXV0byBrZXkgPSBDaGFyYWN0
ZXJGYWxsYmFja01hcEtleSB7IGRlc2NyaXB0aW9uLmNvbXB1dGVkTG9jYWxlKCksIGNoYXJhY3Rl
ciwgaXNGb3JQbGF0Zm9ybUZvbnQgIT0gSXNGb3JQbGF0Zm9ybUZvbnQ6Ok5vIH07Ci0gICAgcmV0
dXJuIGZvbnRBZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmVuc3VyZShXVEZNb3ZlKGtleSksIFsm
XSB7Ci0gICAgICAgIFVDaGFyIGNvZGVVbml0c1syXTsKLSAgICAgICAgdW5zaWduZWQgY29kZVVu
aXRzTGVuZ3RoOwotICAgICAgICBpZiAoVV9JU19CTVAoY2hhcmFjdGVyKSkgewotICAgICAgICAg
ICAgY29kZVVuaXRzWzBdID0gRm9udENhc2NhZGU6Om5vcm1hbGl6ZVNwYWNlcyhjaGFyYWN0ZXIp
OwotICAgICAgICAgICAgY29kZVVuaXRzTGVuZ3RoID0gMTsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIGNvZGVVbml0c1swXSA9IFUxNl9MRUFEKGNoYXJhY3Rlcik7Ci0gICAgICAgICAg
ICBjb2RlVW5pdHNbMV0gPSBVMTZfVFJBSUwoY2hhcmFjdGVyKTsKLSAgICAgICAgICAgIGNvZGVV
bml0c0xlbmd0aCA9IDI7Ci0gICAgICAgIH0KLSAgICAgICAgYXV0byBmb250ID0gRm9udENhY2hl
Ojpmb3JDdXJyZW50VGhyZWFkKCkuc3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGRlc2NyaXB0
aW9uLCB0aGlzLCBpc0ZvclBsYXRmb3JtRm9udCwgRm9udENhY2hlOjpQcmVmZXJDb2xvcmVkRm9u
dDo6Tm8sIGNvZGVVbml0cywgY29kZVVuaXRzTGVuZ3RoKS5nZXQoKTsKLSAgICAgICAgaWYgKGZv
bnQpCi0gICAgICAgICAgICBmb250LT5tX2lzVXNlZEluU3lzdGVtRmFsbGJhY2tDYWNoZSA9IHRy
dWU7Ci0gICAgICAgIHJldHVybiBmb250OwotICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKLX0KLQot
dm9pZCBGb250OjpyZW1vdmVGcm9tU3lzdGVtRmFsbGJhY2tDYWNoZSgpCi17Ci0gICAgc3lzdGVt
RmFsbGJhY2tDYWNoZSgpLnJlbW92ZSh0aGlzKTsKLQotICAgIGlmICghbV9pc1VzZWRJblN5c3Rl
bUZhbGxiYWNrQ2FjaGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZvciAoYXV0byYgY2hhcmFj
dGVyTWFwIDogc3lzdGVtRmFsbGJhY2tDYWNoZSgpLnZhbHVlcygpKSB7Ci0gICAgICAgIFZlY3Rv
cjxDaGFyYWN0ZXJGYWxsYmFja01hcEtleSwgNTEyPiB0b1JlbW92ZTsKLSAgICAgICAgZm9yIChh
dXRvJiBlbnRyeSA6IGNoYXJhY3Rlck1hcCkgewotICAgICAgICAgICAgaWYgKGVudHJ5LnZhbHVl
ID09IHRoaXMpCi0gICAgICAgICAgICAgICAgdG9SZW1vdmUuYXBwZW5kKGVudHJ5LmtleSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgZm9yIChhdXRvJiBrZXkgOiB0b1JlbW92ZSkKLSAgICAgICAgICAg
IGNoYXJhY3Rlck1hcC5yZW1vdmUoa2V5KTsKLSAgICB9CisgICAgcmV0dXJuIFN5c3RlbUZhbGxi
YWNrQ2FjaGU6OmZvckN1cnJlbnRUaHJlYWQoKS5zeXN0ZW1GYWxsYmFja0ZvbnRGb3JDaGFyYWN0
ZXIodGhpcywgY2hhcmFjdGVyLCBkZXNjcmlwdGlvbiwgaXNGb3JQbGF0Zm9ybUZvbnQpOwogfQog
CiAjaWYgIVBMQVRGT1JNKENPQ09BKSAmJiAhVVNFKEZSRUVUWVBFKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udC5oCmluZGV4IDc0NDIwMDRmMDBiNWRiYTI3ZjNjMzJlNjY3YjM2
YmNjZjc4NTE0Y2QuLjZiZjZmMzAzYjNjYmZkYjVjOTRhYmMyZjlkNjAwZmM0ZjA1MDFhNWEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKQEAgLTIwNSw2ICsyMDUsOSBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIGZsb2F0IGFzY2VudENvbnNpZGVyaW5nTWFjQXNjZW50SGFj
ayhjb25zdCBXQ0hBUiosIGZsb2F0IGFzY2VudCwgZmxvYXQgZGVzY2VudCk7CiAjZW5kaWYKIAor
ICAgIHZvaWQgc2V0SXNVc2VkSW5TeXN0ZW1GYWxsYmFja0NhY2hlKCkgeyBtX2lzVXNlZEluU3lz
dGVtRmFsbGJhY2tDYWNoZSA9IHRydWU7IH0KKyAgICBib29sIGlzVXNlZEluU3lzdGVtRmFsbGJh
Y2tDYWNoZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNVc2VkSW5TeXN0ZW1GYWxsYmFja0NhY2hlOyB9
CisKIHByaXZhdGU6CiAgICAgV0VCQ09SRV9FWFBPUlQgRm9udChjb25zdCBGb250UGxhdGZvcm1E
YXRhJiwgT3JpZ2luLCBJbnRlcnN0aXRpYWwsIFZpc2liaWxpdHksIE9yaWVudGF0aW9uRmFsbGJh
Y2ssIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyPik7CiAKQEAgLTIx
OSw4ICsyMjIsNiBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxGb250PiBjcmVhdGVTY2FsZWRGb250
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdDsKICAgICBS
ZWZQdHI8Rm9udD4gcGxhdGZvcm1DcmVhdGVTY2FsZWRGb250KGNvbnN0IEZvbnREZXNjcmlwdGlv
biYsIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdDsKIAotICAgIHZvaWQgcmVtb3ZlRnJvbVN5c3Rl
bUZhbGxiYWNrQ2FjaGUoKTsKLSAgICAKICAgICBzdHJ1Y3QgRGVyaXZlZEZvbnRzOwogICAgIERl
cml2ZWRGb250cyYgZW5zdXJlRGVyaXZlZEZvbnREYXRhKCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKaW5kZXggNzZiYjlmM2JiYjUxNGIw
MTQ1YjdhOWUxNzQ3NzNjNTM0NzEzNWZhOS4uZGQzOWUzNjA3MWIzMTllZDQ1MjdhNmI2MWNmNjI2
ZGJkYmVlZTMzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udENhY2hlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
Y2hlLmgKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCiAj
aW5jbHVkZSAiRm9udFNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiRm9udFRhZ2dlZFNldHRpbmdzLmgi
CisjaW5jbHVkZSAiU3lzdGVtRmFsbGJhY2tDYWNoZS5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAj
aW5jbHVkZSA8YXJyYXk+CiAjaW5jbHVkZSA8bGltaXRzLmg+CkBAIC0zNjAsNiArMzYxLDggQEAg
cHVibGljOgogICAgIHZvaWQgcHJld2FybShjb25zdCBQcmV3YXJtSW5mb3JtYXRpb24mKTsKICAg
ICBzdGF0aWMgdm9pZCBwcmV3YXJtR2xvYmFsbHkoKTsKIAorICAgIFN5c3RlbUZhbGxiYWNrQ2Fj
aGUmIHN5c3RlbUZhbGxiYWNrQ2FjaGUoKSB7IHJldHVybiBtX3N5c3RlbUZhbGxiYWNrQ2FjaGU7
IH0KKwogcHJpdmF0ZToKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHB1cmdlSW5hY3RpdmVGb250
RGF0YUlmTmVlZGVkKCk7CiAgICAgdm9pZCBwcnVuZVVucmVmZXJlbmNlZEVudHJpZXNGcm9tRm9u
dENhc2NhZGVDYWNoZSgpOwpAQCAtMzg2LDYgKzM4OSw3IEBAIHByaXZhdGU6CiAgICAgc3RydWN0
IEZvbnREYXRhQ2FjaGVzOwogICAgIFVuaXF1ZVJlZjxGb250RGF0YUNhY2hlcz4gbV9mb250RGF0
YUNhY2hlczsKICAgICBGb250Q2FzY2FkZUNhY2hlIG1fZm9udENhc2NhZGVDYWNoZTsKKyAgICBT
eXN0ZW1GYWxsYmFja0NhY2hlIG1fc3lzdGVtRmFsbGJhY2tDYWNoZTsKIAogICAgIHVuc2lnbmVk
IHNob3J0IG1fZ2VuZXJhdGlvbiB7IDAgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvU3lzdGVtRmFsbGJhY2tDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9TeXN0ZW1GYWxsYmFja0NhY2hlLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42
Njc3ZTYwYjk4NTRkN2M2MTg0NTRjNGI5NzQ0OTQyYWIxZDQzMTc4Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3lzdGVtRmFsbGJhY2tDYWNoZS5j
cHAKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkg
UHJvc2t1cnlha292CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBv
ZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3lzdGVtRmFsbGJhY2tDYWNoZS5oIgor
CisjaW5jbHVkZSAiRm9udENhY2hlLmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitTeXN0ZW1GYWxsYmFja0NhY2hlJiBTeXN0ZW1GYWxsYmFja0Nh
Y2hlOjpmb3JDdXJyZW50VGhyZWFkKCkKK3sKKyAgICByZXR1cm4gRm9udENhY2hlOjpmb3JDdXJy
ZW50VGhyZWFkKCkuc3lzdGVtRmFsbGJhY2tDYWNoZSgpOworfQorCitSZWZQdHI8Rm9udD4gU3lz
dGVtRmFsbGJhY2tDYWNoZTo6c3lzdGVtRmFsbGJhY2tGb250Rm9yQ2hhcmFjdGVyKGNvbnN0IEZv
bnQqIGZvbnQsIFVDaGFyMzIgY2hhcmFjdGVyLCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2Ny
aXB0aW9uLCBJc0ZvclBsYXRmb3JtRm9udCBpc0ZvclBsYXRmb3JtRm9udCkKK3sKKyAgICBhdXRv
IGZvbnRBZGRSZXN1bHQgPSBtX2NoYXJhY3RlckZhbGxiYWNrTWFwcy5hZGQoZm9udCwgQ2hhcmFj
dGVyRmFsbGJhY2tNYXAoKSk7CisKKyAgICBpZiAoIWNoYXJhY3RlcikgeworICAgICAgICBVQ2hh
ciBjb2RlVW5pdCA9IDA7CisgICAgICAgIHJldHVybiBGb250Q2FjaGU6OmZvckN1cnJlbnRUaHJl
YWQoKS5zeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoZGVzY3JpcHRpb24sIGZvbnQsIGlzRm9y
UGxhdGZvcm1Gb250LCBGb250Q2FjaGU6OlByZWZlckNvbG9yZWRGb250OjpObywgJmNvZGVVbml0
LCAxKTsKKyAgICB9CisKKyAgICBhdXRvIGtleSA9IENoYXJhY3RlckZhbGxiYWNrTWFwS2V5IHsg
ZGVzY3JpcHRpb24uY29tcHV0ZWRMb2NhbGUoKSwgY2hhcmFjdGVyLCBpc0ZvclBsYXRmb3JtRm9u
dCAhPSBJc0ZvclBsYXRmb3JtRm9udDo6Tm8gfTsKKyAgICByZXR1cm4gZm9udEFkZFJlc3VsdC5p
dGVyYXRvci0+dmFsdWUuZW5zdXJlKFdURk1vdmUoa2V5KSwgWyZdIHsKKyAgICAgICAgVUNoYXIg
Y29kZVVuaXRzWzJdOworICAgICAgICB1bnNpZ25lZCBjb2RlVW5pdHNMZW5ndGg7CisgICAgICAg
IGlmIChVX0lTX0JNUChjaGFyYWN0ZXIpKSB7CisgICAgICAgICAgICBjb2RlVW5pdHNbMF0gPSBG
b250Q2FzY2FkZTo6bm9ybWFsaXplU3BhY2VzKGNoYXJhY3Rlcik7CisgICAgICAgICAgICBjb2Rl
VW5pdHNMZW5ndGggPSAxOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY29kZVVuaXRz
WzBdID0gVTE2X0xFQUQoY2hhcmFjdGVyKTsKKyAgICAgICAgICAgIGNvZGVVbml0c1sxXSA9IFUx
Nl9UUkFJTChjaGFyYWN0ZXIpOworICAgICAgICAgICAgY29kZVVuaXRzTGVuZ3RoID0gMjsKKyAg
ICAgICAgfQorICAgICAgICBhdXRvIGZhbGxiYWNrRm9udCA9IEZvbnRDYWNoZTo6Zm9yQ3VycmVu
dFRocmVhZCgpLnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhkZXNjcmlwdGlvbiwgZm9udCwg
aXNGb3JQbGF0Zm9ybUZvbnQsIEZvbnRDYWNoZTo6UHJlZmVyQ29sb3JlZEZvbnQ6Ok5vLCBjb2Rl
VW5pdHMsIGNvZGVVbml0c0xlbmd0aCkuZ2V0KCk7CisgICAgICAgIGlmIChmYWxsYmFja0ZvbnQp
CisgICAgICAgICAgICBmYWxsYmFja0ZvbnQtPnNldElzVXNlZEluU3lzdGVtRmFsbGJhY2tDYWNo
ZSgpOworICAgICAgICByZXR1cm4gZmFsbGJhY2tGb250OworICAgIH0pLml0ZXJhdG9yLT52YWx1
ZTsKK30KKwordm9pZCBTeXN0ZW1GYWxsYmFja0NhY2hlOjpyZW1vdmUoRm9udCogZm9udCkKK3sK
KyAgICBtX2NoYXJhY3RlckZhbGxiYWNrTWFwcy5yZW1vdmUoZm9udCk7CisKKyAgICBpZiAoIWZv
bnQtPmlzVXNlZEluU3lzdGVtRmFsbGJhY2tDYWNoZSgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBmb3IgKGF1dG8mIGNoYXJhY3Rlck1hcCA6IG1fY2hhcmFjdGVyRmFsbGJhY2tNYXBzLnZhbHVl
cygpKSB7CisgICAgICAgIFZlY3RvcjxDaGFyYWN0ZXJGYWxsYmFja01hcEtleSwgNTEyPiB0b1Jl
bW92ZTsKKyAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6IGNoYXJhY3Rlck1hcCkgeworICAgICAg
ICAgICAgaWYgKGVudHJ5LnZhbHVlID09IGZvbnQpCisgICAgICAgICAgICAgICAgdG9SZW1vdmUu
YXBwZW5kKGVudHJ5LmtleSk7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChhdXRvJiBrZXkgOiB0
b1JlbW92ZSkKKyAgICAgICAgICAgIGNoYXJhY3Rlck1hcC5yZW1vdmUoa2V5KTsKKyAgICB9Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1N5c3RlbUZhbGxiYWNrQ2FjaGUuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1N5c3RlbUZhbGxiYWNrQ2FjaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMzQ3ZTMw
N2E5NjQzOWIzNDE1MDk1MzNlNjQyZWViMzg0ODdiNjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3lzdGVtRmFsbGJhY2tDYWNoZS5oCkBAIC0w
LDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5
YWtvdgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBs
ZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICog
ICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNo
VHJhaXRzLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0
b21TdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGb250OworY2xhc3Mg
Rm9udERlc2NyaXB0aW9uOworZW51bSBjbGFzcyBJc0ZvclBsYXRmb3JtRm9udCA6IGJvb2w7CisK
K2NsYXNzIFN5c3RlbUZhbGxiYWNrQ2FjaGUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN5
c3RlbUZhbGxiYWNrQ2FjaGUpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGlj
OgorICAgIHN0YXRpYyBTeXN0ZW1GYWxsYmFja0NhY2hlJiBmb3JDdXJyZW50VGhyZWFkKCk7CisK
KyAgICBTeXN0ZW1GYWxsYmFja0NhY2hlKCkgPSBkZWZhdWx0OworCisgICAgUmVmUHRyPEZvbnQ+
IHN5c3RlbUZhbGxiYWNrRm9udEZvckNoYXJhY3Rlcihjb25zdCBGb250KiwgVUNoYXIzMiBjaGFy
YWN0ZXIsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIElzRm9yUGxhdGZvcm1Gb250KTsKKyAgICB2
b2lkIHJlbW92ZShGb250Kik7CisKK3ByaXZhdGU6CisgICAgc3RydWN0IENoYXJhY3RlckZhbGxi
YWNrTWFwS2V5IHsKKyAgICAgICAgQXRvbVN0cmluZyBsb2NhbGU7CisgICAgICAgIFVDaGFyMzIg
Y2hhcmFjdGVyIHsgMCB9OworICAgICAgICBib29sIGlzRm9yUGxhdGZvcm1Gb250IHsgZmFsc2Ug
fTsKKworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ2hhcmFjdGVyRmFsbGJhY2tNYXBL
ZXkmIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbG9jYWxlID09
IG90aGVyLmxvY2FsZSAmJiBjaGFyYWN0ZXIgPT0gb3RoZXIuY2hhcmFjdGVyICYmIGlzRm9yUGxh
dGZvcm1Gb250ID09IG90aGVyLmlzRm9yUGxhdGZvcm1Gb250OworICAgICAgICB9CisgICAgfTsK
KworICAgIHN0cnVjdCBDaGFyYWN0ZXJGYWxsYmFja01hcEtleUhhc2ggeworICAgICAgICBzdGF0
aWMgdW5zaWduZWQgaGFzaChjb25zdCBDaGFyYWN0ZXJGYWxsYmFja01hcEtleSYga2V5KSB7IHJl
dHVybiBjb21wdXRlSGFzaChrZXkubG9jYWxlLCBrZXkuY2hhcmFjdGVyLCBrZXkuaXNGb3JQbGF0
Zm9ybUZvbnQpOyB9CisgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IENoYXJhY3RlckZh
bGxiYWNrTWFwS2V5JiBhLCBjb25zdCBDaGFyYWN0ZXJGYWxsYmFja01hcEtleSYgYikgeyByZXR1
cm4gYSA9PSBiOyB9CisgICAgICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0Vt
cHR5T3JEZWxldGVkID0gdHJ1ZTsKKyAgICB9OworCisgICAgc3RydWN0IENoYXJhY3RlckZhbGxi
YWNrTWFwS2V5SGFzaFRyYWl0cyA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxDaGFyYWN0ZXJGYWxs
YmFja01hcEtleT4geworICAgICAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUo
Q2hhcmFjdGVyRmFsbGJhY2tNYXBLZXkmIHNsb3QpIHsgbmV3IChOb3ROdWxsLCAmc2xvdCkgQ2hh
cmFjdGVyRmFsbGJhY2tNYXBLZXkgeyB7IH0sIFVfU0VOVElORUwsIHsgfSB9OyB9CisgICAgICAg
IHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IENoYXJhY3RlckZhbGxiYWNrTWFwS2V5
JiBrZXkpIHsgcmV0dXJuIGtleS5jaGFyYWN0ZXIgPT0gVV9TRU5USU5FTDsgfQorICAgIH07CisK
KyAgICAvLyBGb250cyBhcmUgbm90IHJlZidkIHRvIGF2b2lkIGN5Y2xlcy4KKyAgICAvLyBGSVhN
RTogQ29uc2lkZXIgY2hhbmdpbmcgdGhlc2UgbWFwcyB0byB1c2UgV2Vha1B0ciBpbnN0ZWFkIG9m
IHJhdyBwb2ludGVycy4KKyAgICB1c2luZyBDaGFyYWN0ZXJGYWxsYmFja01hcCA9IEhhc2hNYXA8
Q2hhcmFjdGVyRmFsbGJhY2tNYXBLZXksIEZvbnQqLCBDaGFyYWN0ZXJGYWxsYmFja01hcEtleUhh
c2gsIENoYXJhY3RlckZhbGxiYWNrTWFwS2V5SGFzaFRyYWl0cz47CisKKyAgICBIYXNoTWFwPGNv
bnN0IEZvbnQqLCBDaGFyYWN0ZXJGYWxsYmFja01hcD4gbV9jaGFyYWN0ZXJGYWxsYmFja01hcHM7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5j
cHAKaW5kZXggNjYxZGVkNzRmOWI5ODc3NmZiMmY4Y2UyOGY3NmVkMzFkMGMzYWQ4Ny4uNTYzNmE3
YzNhMTY0NzBjZTUyNjk0ODBkNGIwMWYxMjUwYmQwMmY3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZy
ZWVUeXBlLmNwcApAQCAtMjMxLDE2ICsyMzEsMTcgQEAgc3RydWN0IEZhbGxiYWNrRm9udERlc2Ny
aXB0aW9uS2V5SGFzaCB7CiAgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1w
dHlPckRlbGV0ZWQgPSB0cnVlOwogfTsKIAotdXNpbmcgU3lzdGVtRmFsbGJhY2tDYWNoZSA9IEhh
c2hNYXA8RmFsbGJhY2tGb250RGVzY3JpcHRpb25LZXksIHN0ZDo6dW5pcXVlX3B0cjxDYWNoZWRG
b250U2V0PiwgRmFsbGJhY2tGb250RGVzY3JpcHRpb25LZXlIYXNoLCBTaW1wbGVDbGFzc0hhc2hU
cmFpdHM8RmFsbGJhY2tGb250RGVzY3JpcHRpb25LZXk+PjsKLXN0YXRpYyBTeXN0ZW1GYWxsYmFj
a0NhY2hlJiBzeXN0ZW1GYWxsYmFja0NhY2hlKCkKK3VzaW5nIFN5c3RlbUZhbGxiYWNrRm9udFNl
dENhY2hlID0gSGFzaE1hcDxGYWxsYmFja0ZvbnREZXNjcmlwdGlvbktleSwgc3RkOjp1bmlxdWVf
cHRyPENhY2hlZEZvbnRTZXQ+LCBGYWxsYmFja0ZvbnREZXNjcmlwdGlvbktleUhhc2gsIFNpbXBs
ZUNsYXNzSGFzaFRyYWl0czxGYWxsYmFja0ZvbnREZXNjcmlwdGlvbktleT4+Oworc3RhdGljIFN5
c3RlbUZhbGxiYWNrRm9udFNldENhY2hlJiBzeXN0ZW1GYWxsYmFja0ZvbnRTZXRDYWNoZSgpCiB7
Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN5c3RlbUZhbGxiYWNrQ2FjaGU+IGNhY2hlOwor
ICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBtb3ZlZCB0byBGb250Q2FjaGUgc2luY2UgaXQg
Y2FuIGJlIGFjY2Vzc2VkIGZyb20gd29ya2VyIHRocmVhZHMuCisgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPFN5c3RlbUZhbGxiYWNrRm9udFNldENhY2hlPiBjYWNoZTsKICAgICByZXR1cm4gY2Fj
aGUuZ2V0KCk7CiB9CiAKIFJlZlB0cjxGb250PiBGb250Q2FjaGU6OnN5c3RlbUZhbGxiYWNrRm9y
Q2hhcmFjdGVycyhjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBGb250
KiwgSXNGb3JQbGF0Zm9ybUZvbnQsIFByZWZlckNvbG9yZWRGb250IHByZWZlckNvbG9yZWRGb250
LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQogewotICAgIGF1dG8g
YWRkUmVzdWx0ID0gc3lzdGVtRmFsbGJhY2tDYWNoZSgpLmVuc3VyZShGYWxsYmFja0ZvbnREZXNj
cmlwdGlvbktleShkZXNjcmlwdGlvbiwgcHJlZmVyQ29sb3JlZEZvbnQpLCBbJmRlc2NyaXB0aW9u
LCBwcmVmZXJDb2xvcmVkRm9udF0oKSAtPiBzdGQ6OnVuaXF1ZV9wdHI8Q2FjaGVkRm9udFNldD4g
eworICAgIGF1dG8gYWRkUmVzdWx0ID0gc3lzdGVtRmFsbGJhY2tGb250U2V0Q2FjaGUoKS5lbnN1
cmUoRmFsbGJhY2tGb250RGVzY3JpcHRpb25LZXkoZGVzY3JpcHRpb24sIHByZWZlckNvbG9yZWRG
b250KSwgWyZkZXNjcmlwdGlvbiwgcHJlZmVyQ29sb3JlZEZvbnRdKCkgLT4gc3RkOjp1bmlxdWVf
cHRyPENhY2hlZEZvbnRTZXQ+IHsKICAgICAgICAgUmVmUHRyPEZjUGF0dGVybj4gcGF0dGVybiA9
IGFkb3B0UmVmKEZjUGF0dGVybkNyZWF0ZSgpKTsKICAgICAgICAgRmNQYXR0ZXJuQWRkQm9vbChw
YXR0ZXJuLmdldCgpLCBGQ19TQ0FMQUJMRSwgRmNUcnVlKTsKICNpZmRlZiBGQ19DT0xPUgpAQCAt
Mjc2LDcgKzI3Nyw3IEBAIFJlZlB0cjxGb250PiBGb250Q2FjaGU6OnN5c3RlbUZhbGxiYWNrRm9y
Q2hhcmFjdGVycyhjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyCiAKIHZvaWQgRm9udENhY2hl
OjpwbGF0Zm9ybVB1cmdlSW5hY3RpdmVGb250RGF0YSgpCiB7Ci0gICAgc3lzdGVtRmFsbGJhY2tD
YWNoZSgpLmNsZWFyKCk7CisgICAgc3lzdGVtRmFsbGJhY2tGb250U2V0Q2FjaGUoKS5jbGVhcigp
OwogfQogCiBzdGF0aWMgVmVjdG9yPFN0cmluZz4gcGF0dGVyblRvRmFtaWxpZXMoRmNQYXR0ZXJu
JiBwYXR0ZXJuKQo=
</data>
<flag name="review"
          id="471837"
          type_id="1"
          status="+"
          setter="mmaxfield"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>459563</attachid>
            <date>2022-05-18 18:51:10 -0700</date>
            <delta_ts>2022-05-18 20:30:21 -0700</delta_ts>
            <desc>Rebased patch</desc>
            <filename>bug-233972-20220519135109.patch</filename>
            <type>text/plain</type>
            <size>23121</size>
            <attacher name="Matt Woodrow">mattwoodrow</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkzOTU3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9I
ZWFkZXJzLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCA3NTdmMzI2
MTdmNTdkMzk0MzUzMjAxNGQ4ZmIwYjAxZDMwNWIyYWFiLi4zNzU2MGExZjQ5YzdhMWIzNDM3OTEx
NTE3ZjQ5NjA2ZWZmMjIzMDY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNt
YWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTE1OTYsNiArMTU5Niw3
IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50LmgKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9Tb3VyY2VJbWFnZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmgK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9TeXN0ZW1GYWxsYmFja0ZvbnRDYWNoZS5oCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvU3lzdGVtSW1hZ2UuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1RhYlNp
emUuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCAy
OTY4YzBjOGVjZTVhODUxMTU2YTAxNzMxNTYyMWI1YjE3M2Q4NWVlLi5hOTBhOGE2ZjVjMzU4NjFh
ZjhjOTI5MjM5MTdlZDVjM2NlYzViZmJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMjEwMiw2ICsyMTAy
LDcgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnJ1c2guY3BwCiBwbGF0Zm9ybS9ncmFwaGlj
cy9Tb3VyY2VCdWZmZXJQcml2YXRlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlSW1hZ2Uu
Y3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9TdHJpbmdUcnVuY2F0b3IuY3BwCitwbGF0Zm9ybS9ncmFw
aGljcy9TeXN0ZW1GYWxsYmFja0ZvbnRDYWNoZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1RleHRS
dW4uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9UZXh0VHJhY2tSZXByZXNlbnRhdGlvbi5jcHAKIHBs
YXRmb3JtL2dyYXBoaWNzL1RyYWNrUHJpdmF0ZUJhc2UuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNGY0MmJhMzc5Y2VmNmYx
MTI3ZDU5MmRkMjRlNzI4YjY4OGZiODg3Ny4uNDdhZWE2MzBlODYxOTQ2MTA1MWY3MGM2MzdlOWFi
ODQwYmE2MjllNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagpAQCAtMTAxMiw2ICsxMDEyLDcgQEAKIAkJMzFGQjFBNUQxMjBBNUQwNjAw
REMwMkEwIC8qIERldmljZU1vdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAzMUZCMUE1NTEyMEE1RDA2MDBEQzAyQTAgLyogRGV2aWNlTW90
aW9uRXZlbnQuaCAqLzsgfTsKIAkJMzFGQjFBNjYxMjBBNUQzRjAwREMwMkEwIC8qIEpTRGV2aWNl
TW90aW9uRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDMxRkIxQTY0MTIwQTVEM0YwMERDMDJBMCAvKiBKU0RldmljZU1vdGlvbkV2ZW50LmggKi87
IH07CiAJCTMxRkU2REZBMTUwMDRDMkEwMDA0RUJDNCAvKiBOb3RpZmljYXRpb25QZXJtaXNzaW9u
Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDMxRUMxREFDMTRGRjI2RUEwMEM5NDY2MiAvKiBOb3RpZmljYXRpb25QZXJtaXNzaW9uQ2FsbGJh
Y2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkz
MjExMkUwRjI3NEI0N0NGMDA3MDQ3QTggLyogU3lzdGVtRmFsbGJhY2tGb250Q2FjaGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMyODk5RkI5Mjc0QjQx
MEMwMDg1NUE5RCAvKiBTeXN0ZW1GYWxsYmFja0ZvbnRDYWNoZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTMzNTAzQzlBMTAxNzlBNzQwMDNCNDdF
MSAvKiBOb3RpZmljYXRpb25DbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDMzNTAzQzk5MTAxNzlBNzQwMDNCNDdFMSAvKiBOb3RpZmljYXRpb25D
bGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkzMzUwM0NBNDEwMTc5QUQ3MDAzQjQ3RTEgLyogSlNOb3RpZmljYXRpb24uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzNTAzQ0EwMTAxNzlBRDcwMDNC
NDdFMSAvKiBKU05vdGlmaWNhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTMzRDAyMTJEMTMxREIzN0IwMDQwOTFBOCAvKiBDb29raWVTdG9y
YWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTNG
MDFFQTEyNzBFMTBEMDBERkJBNzEgLyogQ29va2llU3RvcmFnZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC04NDcwLDYgKzg0NzEsOCBAQAogCQkz
MUZCMUE1NjEyMEE1RDA2MDBEQzAyQTAgLyogRGV2aWNlTW90aW9uRXZlbnQuaWRsICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dDsgcGF0aCA9IERldmljZU1vdGlvbkV2ZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMzFGQjFBNjMxMjBBNUQzRjAwREMwMkEwIC8qIEpTRGV2aWNlTW90aW9uRXZl
bnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNEZXZpY2VNb3Rp
b25FdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxRkIxQTY0MTIwQTVE
M0YwMERDMDJBMCAvKiBKU0RldmljZU1vdGlvbkV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTRGV2aWNlTW90aW9uRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMzI4OTlGQjcyNzRCNDEwQzAwODU1QTlEIC8qIFN5c3RlbUZhbGxiYWNrRm9udENh
Y2hlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN5c3RlbUZhbGxiYWNrRm9udENhY2hlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzI4OTlGQjkyNzRCNDEwQzAwODU1QTlEIC8q
IFN5c3RlbUZhbGxiYWNrRm9udENhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN5c3RlbUZhbGxiYWNr
Rm9udENhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMzMUZGNjdERTE5N0I1
NzM5M0M0NkE3RiAvKiBSZW5kZXJNYXRoTUxQYWRkZWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVuZGVyTWF0aE1MUGFkZGVkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTMzMUZGNjdERTE5N0I1NzM5M0M0NkFBNyAvKiBSZW5kZXJNYXRoTUxTcGFjZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJNYXRoTUxTcGFjZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMzNGNzA0RTBGQjQ5Q0EyMDA4RTEyQTYgLyogTm90
aWZpY2F0aW9uLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBOb3RpZmljYXRpb24uaWRsOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjkzMzgsNiArMjkzNDEsOCBAQAogCQkJCUIy
MzU0MEYwMEQwMDc4MkUwMDIzODJGQSAvKiBTdHJpbmdUcnVuY2F0b3IuY3BwICovLAogCQkJCUIy
MzU0MEYxMEQwMDc4MkUwMDIzODJGQSAvKiBTdHJpbmdUcnVuY2F0b3IuaCAqLywKIAkJCQkwODc1
NThDNDEzQjRBNTdEMDBGNDkzMDcgLyogU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yLmgg
Ki8sCisJCQkJMzI4OTlGQjcyNzRCNDEwQzAwODU1QTlEIC8qIFN5c3RlbUZhbGxiYWNrRm9udENh
Y2hlLmNwcCAqLywKKwkJCQkzMjg5OUZCOTI3NEI0MTBDMDA4NTVBOUQgLyogU3lzdGVtRmFsbGJh
Y2tGb250Q2FjaGUuaCAqLywKIAkJCQk5NUU5RjQ0NDI3QzlBMzlCMDA5NDUzMzcgLyogU3lzdGVt
SW1hZ2UuaCAqLywKIAkJCQkzQkI2QjgwRjIyQTdEMzExMDAzQTJBNjkgLyogVGFiU2l6ZS5oICov
LAogCQkJCTcyMkFGMkUzMjdFMUNGMTEwMDc4RDk5NyAvKiBUZXh0Qm94SXRlcmF0b3IuaCAqLywK
QEAgLTM3OTMwLDYgKzM3OTM1LDcgQEAKIAkJCQk1MTdBNTM0NjFGNTBDMTdGMDBEQ0RDMEEgLyog
U1dTZXJ2ZXJXb3JrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxODA4MTE3MTZGQ0Y5Q0IwMEI4
MEQwNyAvKiBTeW5jaHJvbm91c0xvYWRlckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzE2
OTJERDUyM0QyM0UwODAwNkU4OEY3IC8qIFN5c3RlbUJhdHRlcnkuaCBpbiBIZWFkZXJzICovLAor
CQkJCTMyMTEyRTBGMjc0QjQ3Q0YwMDcwNDdBOCAvKiBTeXN0ZW1GYWxsYmFja0ZvbnRDYWNoZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRTRFOEI0RUMyMTZCNzlFNTAwQjg4MzREIC8qIFN5c3RlbUZv
bnREYXRhYmFzZUNvcmVUZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NUU5RjQ0NjI3QzlBMzlD
MDA5NDUzMzcgLyogU3lzdGVtSW1hZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMDNDMDc0MTg4
NDY5NUUwMEE1RjhDQSAvKiBTeXN0ZW1NZW1vcnkuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAppbmRleCBhYTM1ZTA0ZTE1N2Q5YzU4YzI5
NTY5NDAyN2Q2Zjc0NTQ1ZWZmMmVhLi5jODY3ZTM0Zjc5YjNhZTMyOWI2ZTZkNTAxMWVhYTBlNGNl
ZDQ0MjViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcApAQCAt
ODUsNyArODUsNyBAQCBGb250OjpGb250KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3Jt
RGF0YSwgT3JpZ2luIG9yaWdpbiwgSW50ZXJzdGl0aWFsIGludAogICAgICwgbV9pc1RleHRPcmll
bnRhdGlvbkZhbGxiYWNrKG9yaWVudGF0aW9uRmFsbGJhY2sgPT0gT3JpZW50YXRpb25GYWxsYmFj
azo6WWVzKQogICAgICwgbV9pc0Jyb2tlbklkZW9ncmFwaEZhbGxiYWNrKGZhbHNlKQogICAgICwg
bV9oYXNWZXJ0aWNhbEdseXBocyhmYWxzZSkKLSAgICAsIG1faXNVc2VkSW5TeXN0ZW1GYWxsYmFj
a0NhY2hlKGZhbHNlKQorICAgICwgbV9pc1VzZWRJblN5c3RlbUZhbGxiYWNrRm9udENhY2hlKGZh
bHNlKQogICAgICwgbV9hbGxvd3NBbnRpYWxpYXNpbmcodHJ1ZSkKICNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQogICAgICwgbV9zaG91bGROb3RCZVVzZWRGb3JBcmFiaWMoZmFsc2UpCkBAIC0xNzUs
NyArMTc1LDcgQEAgdm9pZCBGb250OjpwbGF0Zm9ybUdseXBoSW5pdCgpCiAKIEZvbnQ6On5Gb250
KCkKIHsKLSAgICByZW1vdmVGcm9tU3lzdGVtRmFsbGJhY2tDYWNoZSgpOworICAgIFN5c3RlbUZh
bGxiYWNrRm9udENhY2hlOjpmb3JDdXJyZW50VGhyZWFkKCkucmVtb3ZlKHRoaXMpOwogfQogCiBS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgRm9udDo6cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyKCkgY29uc3QKQEAgLTU1NCw4OCArNTU0LDkgQEAgR2x5cGhCdWZmZXJBZHZhbmNlIEZvbnQ6
OmFwcGx5VHJhbnNmb3JtcyhHbHlwaEJ1ZmZlciYsIHVuc2lnbmVkLCB1bnNpZ25lZCwgYm9vbCwK
IH0KICNlbmRpZgogCi1zdHJ1Y3QgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXkgewotICAgIEF0b21T
dHJpbmcgbG9jYWxlOwotICAgIFVDaGFyMzIgY2hhcmFjdGVyIHsgMCB9OwotICAgIGJvb2wgaXNG
b3JQbGF0Zm9ybUZvbnQgeyBmYWxzZSB9OwotfTsKLQotaW5saW5lIHZvaWQgYWRkKEhhc2hlciYg
aGFzaGVyLCBjb25zdCBDaGFyYWN0ZXJGYWxsYmFja01hcEtleSYga2V5KQotewotICAgIGFkZCho
YXNoZXIsIGtleS5sb2NhbGUsIGtleS5jaGFyYWN0ZXIsIGtleS5pc0ZvclBsYXRmb3JtRm9udCk7
Ci19Ci0KLWlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgQ2hhcmFjdGVyRmFsbGJhY2tNYXBL
ZXkmIGEsIGNvbnN0IENoYXJhY3RlckZhbGxiYWNrTWFwS2V5JiBiKQotewotICAgIHJldHVybiBh
LmxvY2FsZSA9PSBiLmxvY2FsZSAmJiBhLmNoYXJhY3RlciA9PSBiLmNoYXJhY3RlciAmJiBhLmlz
Rm9yUGxhdGZvcm1Gb250ID09IGIuaXNGb3JQbGF0Zm9ybUZvbnQ7Ci19Ci0KLXN0cnVjdCBDaGFy
YWN0ZXJGYWxsYmFja01hcEtleUhhc2ggewotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0
IENoYXJhY3RlckZhbGxiYWNrTWFwS2V5JiBrZXkpIHsgcmV0dXJuIGNvbXB1dGVIYXNoKGtleSk7
IH0KLSAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBDaGFyYWN0ZXJGYWxsYmFja01hcEtleSYg
YSwgY29uc3QgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXkmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQot
ICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1
ZTsKLX07Ci0KLXN0cnVjdCBDaGFyYWN0ZXJGYWxsYmFja01hcEtleUhhc2hUcmFpdHMgOiBTaW1w
bGVDbGFzc0hhc2hUcmFpdHM8Q2hhcmFjdGVyRmFsbGJhY2tNYXBLZXk+IHsKLSAgICBzdGF0aWMg
dm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXkmIHNsb3Qp
IHsgbmV3IChOb3ROdWxsLCAmc2xvdCkgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXkgeyB7IH0sIFVf
U0VOVElORUwsIHsgfSB9OyB9Ci0gICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoY29uc3Qg
Q2hhcmFjdGVyRmFsbGJhY2tNYXBLZXkmIGtleSkgeyByZXR1cm4ga2V5LmNoYXJhY3RlciA9PSBV
X1NFTlRJTkVMOyB9Ci19OwotCi0vLyBGb250cyBhcmUgbm90IHJlZidkIHRvIGF2b2lkIGN5Y2xl
cy4KLS8vIEZJWE1FOiBDb25zaWRlciBjaGFuZ2luZyB0aGVzZSBtYXBzIHRvIHVzZSBXZWFrUHRy
IGluc3RlYWQgb2YgcmF3IHBvaW50ZXJzLgotdXNpbmcgQ2hhcmFjdGVyRmFsbGJhY2tNYXAgPSBI
YXNoTWFwPENoYXJhY3RlckZhbGxiYWNrTWFwS2V5LCBGb250KiwgQ2hhcmFjdGVyRmFsbGJhY2tN
YXBLZXlIYXNoLCBDaGFyYWN0ZXJGYWxsYmFja01hcEtleUhhc2hUcmFpdHM+OwotdXNpbmcgU3lz
dGVtRmFsbGJhY2tDYWNoZSA9IEhhc2hNYXA8Y29uc3QgRm9udCosIENoYXJhY3RlckZhbGxiYWNr
TWFwPjsKLQotc3RhdGljIFN5c3RlbUZhbGxiYWNrQ2FjaGUmIHN5c3RlbUZhbGxiYWNrQ2FjaGUo
KQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTeXN0ZW1GYWxsYmFja0NhY2hlPiBtYXA7
Ci0gICAgcmV0dXJuIG1hcC5nZXQoKTsKLX0KLQogUmVmUHRyPEZvbnQ+IEZvbnQ6OnN5c3RlbUZh
bGxiYWNrRm9udEZvckNoYXJhY3RlcihVQ2hhcjMyIGNoYXJhY3RlciwgY29uc3QgRm9udERlc2Ny
aXB0aW9uJiBkZXNjcmlwdGlvbiwgSXNGb3JQbGF0Zm9ybUZvbnQgaXNGb3JQbGF0Zm9ybUZvbnQp
IGNvbnN0CiB7Ci0gICAgYXV0byBmb250QWRkUmVzdWx0ID0gc3lzdGVtRmFsbGJhY2tDYWNoZSgp
LmFkZCh0aGlzLCBDaGFyYWN0ZXJGYWxsYmFja01hcCgpKTsKLQotICAgIGlmICghY2hhcmFjdGVy
KSB7Ci0gICAgICAgIFVDaGFyIGNvZGVVbml0ID0gMDsKLSAgICAgICAgcmV0dXJuIEZvbnRDYWNo
ZTo6Zm9yQ3VycmVudFRocmVhZCgpLnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhkZXNjcmlw
dGlvbiwgdGhpcywgaXNGb3JQbGF0Zm9ybUZvbnQsIEZvbnRDYWNoZTo6UHJlZmVyQ29sb3JlZEZv
bnQ6Ok5vLCAmY29kZVVuaXQsIDEpOwotICAgIH0KLQotICAgIGF1dG8ga2V5ID0gQ2hhcmFjdGVy
RmFsbGJhY2tNYXBLZXkgeyBkZXNjcmlwdGlvbi5jb21wdXRlZExvY2FsZSgpLCBjaGFyYWN0ZXIs
IGlzRm9yUGxhdGZvcm1Gb250ICE9IElzRm9yUGxhdGZvcm1Gb250OjpObyB9OwotICAgIHJldHVy
biBmb250QWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5lbnN1cmUoV1RGTW92ZShrZXkpLCBbJl0g
ewotICAgICAgICBVQ2hhciBjb2RlVW5pdHNbMl07Ci0gICAgICAgIHVuc2lnbmVkIGNvZGVVbml0
c0xlbmd0aDsKLSAgICAgICAgaWYgKFVfSVNfQk1QKGNoYXJhY3RlcikpIHsKLSAgICAgICAgICAg
IGNvZGVVbml0c1swXSA9IEZvbnRDYXNjYWRlOjpub3JtYWxpemVTcGFjZXMoY2hhcmFjdGVyKTsK
LSAgICAgICAgICAgIGNvZGVVbml0c0xlbmd0aCA9IDE7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBjb2RlVW5pdHNbMF0gPSBVMTZfTEVBRChjaGFyYWN0ZXIpOwotICAgICAgICAgICAg
Y29kZVVuaXRzWzFdID0gVTE2X1RSQUlMKGNoYXJhY3Rlcik7Ci0gICAgICAgICAgICBjb2RlVW5p
dHNMZW5ndGggPSAyOwotICAgICAgICB9Ci0gICAgICAgIGF1dG8gZm9udCA9IEZvbnRDYWNoZTo6
Zm9yQ3VycmVudFRocmVhZCgpLnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhkZXNjcmlwdGlv
biwgdGhpcywgaXNGb3JQbGF0Zm9ybUZvbnQsIEZvbnRDYWNoZTo6UHJlZmVyQ29sb3JlZEZvbnQ6
Ok5vLCBjb2RlVW5pdHMsIGNvZGVVbml0c0xlbmd0aCkuZ2V0KCk7Ci0gICAgICAgIGlmIChmb250
KQotICAgICAgICAgICAgZm9udC0+bV9pc1VzZWRJblN5c3RlbUZhbGxiYWNrQ2FjaGUgPSB0cnVl
OwotICAgICAgICByZXR1cm4gZm9udDsKLSAgICB9KS5pdGVyYXRvci0+dmFsdWU7Ci19Ci0KLXZv
aWQgRm9udDo6cmVtb3ZlRnJvbVN5c3RlbUZhbGxiYWNrQ2FjaGUoKQotewotICAgIHN5c3RlbUZh
bGxiYWNrQ2FjaGUoKS5yZW1vdmUodGhpcyk7Ci0KLSAgICBpZiAoIW1faXNVc2VkSW5TeXN0ZW1G
YWxsYmFja0NhY2hlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3IgKGF1dG8mIGNoYXJhY3Rl
ck1hcCA6IHN5c3RlbUZhbGxiYWNrQ2FjaGUoKS52YWx1ZXMoKSkgewotICAgICAgICBWZWN0b3I8
Q2hhcmFjdGVyRmFsbGJhY2tNYXBLZXksIDUxMj4gdG9SZW1vdmU7Ci0gICAgICAgIGZvciAoYXV0
byYgZW50cnkgOiBjaGFyYWN0ZXJNYXApIHsKLSAgICAgICAgICAgIGlmIChlbnRyeS52YWx1ZSA9
PSB0aGlzKQotICAgICAgICAgICAgICAgIHRvUmVtb3ZlLmFwcGVuZChlbnRyeS5rZXkpOwotICAg
ICAgICB9Ci0gICAgICAgIGZvciAoYXV0byYga2V5IDogdG9SZW1vdmUpCi0gICAgICAgICAgICBj
aGFyYWN0ZXJNYXAucmVtb3ZlKGtleSk7Ci0gICAgfQorICAgIHJldHVybiBTeXN0ZW1GYWxsYmFj
a0ZvbnRDYWNoZTo6Zm9yQ3VycmVudFRocmVhZCgpLnN5c3RlbUZhbGxiYWNrRm9udEZvckNoYXJh
Y3Rlcih0aGlzLCBjaGFyYWN0ZXIsIGRlc2NyaXB0aW9uLCBpc0ZvclBsYXRmb3JtRm9udCk7CiB9
CiAKICNpZiAhUExBVEZPUk0oQ09DT0EpICYmICFVU0UoRlJFRVRZUEUpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKaW5kZXggYjUwNDE0NTg0ZTg3ODRjYWM1NDRiZDlmOGVi
ZGFjY2U4OTMzOTcxMC4uNGQzNzgzMzE4YmI1MTVjZGUwODBkYjdkMTJiNmE0NjRkYjc0ODhlOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaApAQCAtMjExLDYgKzIxMSw5
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgZmxvYXQgYXNjZW50Q29uc2lkZXJpbmdNYWNBc2NlbnRI
YWNrKGNvbnN0IFdDSEFSKiwgZmxvYXQgYXNjZW50LCBmbG9hdCBkZXNjZW50KTsKICNlbmRpZgog
CisgICAgdm9pZCBzZXRJc1VzZWRJblN5c3RlbUZhbGxiYWNrRm9udENhY2hlKCkgeyBtX2lzVXNl
ZEluU3lzdGVtRmFsbGJhY2tGb250Q2FjaGUgPSB0cnVlOyB9CisgICAgYm9vbCBpc1VzZWRJblN5
c3RlbUZhbGxiYWNrRm9udENhY2hlKCkgY29uc3QgeyByZXR1cm4gbV9pc1VzZWRJblN5c3RlbUZh
bGxiYWNrRm9udENhY2hlOyB9CisKIHByaXZhdGU6CiAgICAgV0VCQ09SRV9FWFBPUlQgRm9udChj
b25zdCBGb250UGxhdGZvcm1EYXRhJiwgT3JpZ2luLCBJbnRlcnN0aXRpYWwsIFZpc2liaWxpdHks
IE9yaWVudGF0aW9uRmFsbGJhY2ssIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyPik7CiAKQEAgLTIyNSw4ICsyMjgsNiBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxGb250
PiBjcmVhdGVTY2FsZWRGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGZsb2F0IHNjYWxlRmFj
dG9yKSBjb25zdDsKICAgICBSZWZQdHI8Rm9udD4gcGxhdGZvcm1DcmVhdGVTY2FsZWRGb250KGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYsIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdDsKIAotICAgIHZv
aWQgcmVtb3ZlRnJvbVN5c3RlbUZhbGxiYWNrQ2FjaGUoKTsKLSAgICAKICAgICBzdHJ1Y3QgRGVy
aXZlZEZvbnRzOwogICAgIERlcml2ZWRGb250cyYgZW5zdXJlRGVyaXZlZEZvbnREYXRhKCkgY29u
c3Q7CiAKQEAgLTMzOSw3ICszNDAsNyBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1faXNCcm9r
ZW5JZGVvZ3JhcGhGYWxsYmFjayA6IDE7CiAgICAgdW5zaWduZWQgbV9oYXNWZXJ0aWNhbEdseXBo
cyA6IDE7CiAKLSAgICB1bnNpZ25lZCBtX2lzVXNlZEluU3lzdGVtRmFsbGJhY2tDYWNoZSA6IDE7
CisgICAgdW5zaWduZWQgbV9pc1VzZWRJblN5c3RlbUZhbGxiYWNrRm9udENhY2hlIDogMTsKICAg
ICAKICAgICB1bnNpZ25lZCBtX2FsbG93c0FudGlhbGlhc2luZyA6IDE7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKaW5kZXggNTMwNzEzMjBmNDVkNDNj
M2MwYTdhNzlkZTZkZjE1YTUxYmMyZWUyNC4uMDg0N2Y5ZjdlNDY0ZjgyM2ZmOWEwNTBjOTRiMjAw
NTdjMmYzOTVjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udENhY2hlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
Y2hlLmgKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCiAj
aW5jbHVkZSAiRm9udFNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiRm9udFRhZ2dlZFNldHRpbmdzLmgi
CisjaW5jbHVkZSAiU3lzdGVtRmFsbGJhY2tGb250Q2FjaGUuaCIKICNpbmNsdWRlICJUaW1lci5o
IgogI2luY2x1ZGUgPGFycmF5PgogI2luY2x1ZGUgPGxpbWl0cy5oPgpAQCAtMzY5LDYgKzM3MCw4
IEBAIHB1YmxpYzoKICAgICB2b2lkIHByZXdhcm0oUHJld2FybUluZm9ybWF0aW9uJiYpOwogICAg
IHN0YXRpYyB2b2lkIHByZXdhcm1HbG9iYWxseSgpOwogCisgICAgU3lzdGVtRmFsbGJhY2tGb250
Q2FjaGUmIHN5c3RlbUZhbGxiYWNrRm9udENhY2hlKCkgeyByZXR1cm4gbV9zeXN0ZW1GYWxsYmFj
a0ZvbnRDYWNoZTsgfQorCiBwcml2YXRlOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcHVyZ2VJ
bmFjdGl2ZUZvbnREYXRhSWZOZWVkZWQoKTsKICAgICB2b2lkIHBydW5lVW5yZWZlcmVuY2VkRW50
cmllc0Zyb21Gb250Q2FzY2FkZUNhY2hlKCk7CkBAIC0zOTUsNiArMzk4LDcgQEAgcHJpdmF0ZToK
ICAgICBzdHJ1Y3QgRm9udERhdGFDYWNoZXM7CiAgICAgVW5pcXVlUmVmPEZvbnREYXRhQ2FjaGVz
PiBtX2ZvbnREYXRhQ2FjaGVzOwogICAgIEZvbnRDYXNjYWRlQ2FjaGUgbV9mb250Q2FzY2FkZUNh
Y2hlOworICAgIFN5c3RlbUZhbGxiYWNrRm9udENhY2hlIG1fc3lzdGVtRmFsbGJhY2tGb250Q2Fj
aGU7CiAKICAgICB1bnNpZ25lZCBzaG9ydCBtX2dlbmVyYXRpb24geyAwIH07CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N5c3RlbUZhbGxiYWNrRm9udENh
Y2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N5c3RlbUZhbGxiYWNr
Rm9udENhY2hlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZjU2MjkyMWU2MzJhMWE4ZjUyNzdkZWY2YWNiZTRi
OTdiZGI3ZTcwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvU3lzdGVtRmFsbGJhY2tGb250Q2FjaGUuY3BwCkBAIC0wLDAgKzEsODkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9y
IHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlN5c3RlbUZhbGxiYWNrRm9udENhY2hlLmgiCisKKyNpbmNsdWRlICJGb250Q2FjaGUu
aCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1N5
c3RlbUZhbGxiYWNrRm9udENhY2hlJiBTeXN0ZW1GYWxsYmFja0ZvbnRDYWNoZTo6Zm9yQ3VycmVu
dFRocmVhZCgpCit7CisgICAgcmV0dXJuIEZvbnRDYWNoZTo6Zm9yQ3VycmVudFRocmVhZCgpLnN5
c3RlbUZhbGxiYWNrRm9udENhY2hlKCk7Cit9CisKK1JlZlB0cjxGb250PiBTeXN0ZW1GYWxsYmFj
a0ZvbnRDYWNoZTo6c3lzdGVtRmFsbGJhY2tGb250Rm9yQ2hhcmFjdGVyKGNvbnN0IEZvbnQqIGZv
bnQsIFVDaGFyMzIgY2hhcmFjdGVyLCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9u
LCBJc0ZvclBsYXRmb3JtRm9udCBpc0ZvclBsYXRmb3JtRm9udCkKK3sKKyAgICBhdXRvIGZvbnRB
ZGRSZXN1bHQgPSBtX2NoYXJhY3RlckZhbGxiYWNrTWFwcy5hZGQoZm9udCwgQ2hhcmFjdGVyRmFs
bGJhY2tNYXAoKSk7CisKKyAgICBpZiAoIWNoYXJhY3RlcikgeworICAgICAgICBVQ2hhciBjb2Rl
VW5pdCA9IDA7CisgICAgICAgIHJldHVybiBGb250Q2FjaGU6OmZvckN1cnJlbnRUaHJlYWQoKS5z
eXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoZGVzY3JpcHRpb24sIGZvbnQsIGlzRm9yUGxhdGZv
cm1Gb250LCBGb250Q2FjaGU6OlByZWZlckNvbG9yZWRGb250OjpObywgJmNvZGVVbml0LCAxKTsK
KyAgICB9CisKKyAgICBhdXRvIGtleSA9IENoYXJhY3RlckZhbGxiYWNrTWFwS2V5IHsgZGVzY3Jp
cHRpb24uY29tcHV0ZWRMb2NhbGUoKSwgY2hhcmFjdGVyLCBpc0ZvclBsYXRmb3JtRm9udCAhPSBJ
c0ZvclBsYXRmb3JtRm9udDo6Tm8gfTsKKyAgICByZXR1cm4gZm9udEFkZFJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUuZW5zdXJlKFdURk1vdmUoa2V5KSwgWyZdIHsKKyAgICAgICAgVUNoYXIgY29kZVVu
aXRzWzJdOworICAgICAgICB1bnNpZ25lZCBjb2RlVW5pdHNMZW5ndGg7CisgICAgICAgIGlmIChV
X0lTX0JNUChjaGFyYWN0ZXIpKSB7CisgICAgICAgICAgICBjb2RlVW5pdHNbMF0gPSBGb250Q2Fz
Y2FkZTo6bm9ybWFsaXplU3BhY2VzKGNoYXJhY3Rlcik7CisgICAgICAgICAgICBjb2RlVW5pdHNM
ZW5ndGggPSAxOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY29kZVVuaXRzWzBdID0g
VTE2X0xFQUQoY2hhcmFjdGVyKTsKKyAgICAgICAgICAgIGNvZGVVbml0c1sxXSA9IFUxNl9UUkFJ
TChjaGFyYWN0ZXIpOworICAgICAgICAgICAgY29kZVVuaXRzTGVuZ3RoID0gMjsKKyAgICAgICAg
fQorICAgICAgICBhdXRvIGZhbGxiYWNrRm9udCA9IEZvbnRDYWNoZTo6Zm9yQ3VycmVudFRocmVh
ZCgpLnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhkZXNjcmlwdGlvbiwgZm9udCwgaXNGb3JQ
bGF0Zm9ybUZvbnQsIEZvbnRDYWNoZTo6UHJlZmVyQ29sb3JlZEZvbnQ6Ok5vLCBjb2RlVW5pdHMs
IGNvZGVVbml0c0xlbmd0aCkuZ2V0KCk7CisgICAgICAgIGlmIChmYWxsYmFja0ZvbnQpCisgICAg
ICAgICAgICBmYWxsYmFja0ZvbnQtPnNldElzVXNlZEluU3lzdGVtRmFsbGJhY2tGb250Q2FjaGUo
KTsKKyAgICAgICAgcmV0dXJuIGZhbGxiYWNrRm9udDsKKyAgICB9KS5pdGVyYXRvci0+dmFsdWU7
Cit9CisKK3ZvaWQgU3lzdGVtRmFsbGJhY2tGb250Q2FjaGU6OnJlbW92ZShGb250KiBmb250KQor
eworICAgIG1fY2hhcmFjdGVyRmFsbGJhY2tNYXBzLnJlbW92ZShmb250KTsKKworICAgIGlmICgh
Zm9udC0+aXNVc2VkSW5TeXN0ZW1GYWxsYmFja0ZvbnRDYWNoZSgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBmb3IgKGF1dG8mIGNoYXJhY3Rlck1hcCA6IG1fY2hhcmFjdGVyRmFsbGJhY2tNYXBz
LnZhbHVlcygpKSB7CisgICAgICAgIFZlY3RvcjxDaGFyYWN0ZXJGYWxsYmFja01hcEtleSwgNTEy
PiB0b1JlbW92ZTsKKyAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6IGNoYXJhY3Rlck1hcCkgewor
ICAgICAgICAgICAgaWYgKGVudHJ5LnZhbHVlID09IGZvbnQpCisgICAgICAgICAgICAgICAgdG9S
ZW1vdmUuYXBwZW5kKGVudHJ5LmtleSk7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChhdXRvJiBr
ZXkgOiB0b1JlbW92ZSkKKyAgICAgICAgICAgIGNoYXJhY3Rlck1hcC5yZW1vdmUoa2V5KTsKKyAg
ICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N5c3RlbUZhbGxiYWNrRm9udENhY2hlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TeXN0ZW1GYWxsYmFja0ZvbnRDYWNoZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmE3ODQ0OWIxNTgzNTMxZjFjOWE2NTAzYjM3NmNjY2E5ZDA2NmYyMmYKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TeXN0ZW1GYWxsYmFj
a0ZvbnRDYWNoZS5oCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYgQWxleGV5IFByb3NrdXJ5YWtvdgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhl
ciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAg
ICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgor
I2luY2x1ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hlci5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBGb250OworY2xhc3MgRm9udERlc2NyaXB0aW9uOworZW51bSBjbGFzcyBJc0ZvclBsYXRm
b3JtRm9udCA6IGJvb2w7CisgICAgCitzdHJ1Y3QgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXkgewor
ICAgIEF0b21TdHJpbmcgbG9jYWxlOworICAgIFVDaGFyMzIgY2hhcmFjdGVyIHsgMCB9OworICAg
IGJvb2wgaXNGb3JQbGF0Zm9ybUZvbnQgeyBmYWxzZSB9OworCisgICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IENoYXJhY3RlckZhbGxiYWNrTWFwS2V5JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBsb2NhbGUgPT0gb3RoZXIubG9jYWxlICYmIGNoYXJhY3RlciA9PSBvdGhlci5j
aGFyYWN0ZXIgJiYgaXNGb3JQbGF0Zm9ybUZvbnQgPT0gb3RoZXIuaXNGb3JQbGF0Zm9ybUZvbnQ7
CisgICAgfQorfTsKKworaW5saW5lIHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBDaGFy
YWN0ZXJGYWxsYmFja01hcEtleSYga2V5KQoreworICAgIGFkZChoYXNoZXIsIGtleS5sb2NhbGUs
IGtleS5jaGFyYWN0ZXIsIGtleS5pc0ZvclBsYXRmb3JtRm9udCk7Cit9CisKK3N0cnVjdCBDaGFy
YWN0ZXJGYWxsYmFja01hcEtleUhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0
IENoYXJhY3RlckZhbGxiYWNrTWFwS2V5JiBrZXkpIHsgcmV0dXJuIGNvbXB1dGVIYXNoKGtleSk7
IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBDaGFyYWN0ZXJGYWxsYmFja01hcEtleSYg
YSwgY29uc3QgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXkmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQor
ICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1
ZTsKK307CisKK2NsYXNzIFN5c3RlbUZhbGxiYWNrRm9udENhY2hlIHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShTeXN0ZW1GYWxsYmFja0ZvbnRDYWNoZSk7CisgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CitwdWJsaWM6CisgICAgc3RhdGljIFN5c3RlbUZhbGxiYWNrRm9udENhY2hlJiBm
b3JDdXJyZW50VGhyZWFkKCk7CisKKyAgICBTeXN0ZW1GYWxsYmFja0ZvbnRDYWNoZSgpID0gZGVm
YXVsdDsKKworICAgIFJlZlB0cjxGb250PiBzeXN0ZW1GYWxsYmFja0ZvbnRGb3JDaGFyYWN0ZXIo
Y29uc3QgRm9udCosIFVDaGFyMzIgY2hhcmFjdGVyLCBjb25zdCBGb250RGVzY3JpcHRpb24mLCBJ
c0ZvclBsYXRmb3JtRm9udCk7CisgICAgdm9pZCByZW1vdmUoRm9udCopOworCitwcml2YXRlOgor
ICAgIHN0cnVjdCBDaGFyYWN0ZXJGYWxsYmFja01hcEtleUhhc2hUcmFpdHMgOiBTaW1wbGVDbGFz
c0hhc2hUcmFpdHM8Q2hhcmFjdGVyRmFsbGJhY2tNYXBLZXk+IHsKKyAgICAgICAgc3RhdGljIHZv
aWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKENoYXJhY3RlckZhbGxiYWNrTWFwS2V5JiBzbG90KSB7
IG5ldyAoTm90TnVsbCwgJnNsb3QpIENoYXJhY3RlckZhbGxiYWNrTWFwS2V5IHsgeyB9LCBVX1NF
TlRJTkVMLCB7IH0gfTsgfQorICAgICAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShjb25z
dCBDaGFyYWN0ZXJGYWxsYmFja01hcEtleSYga2V5KSB7IHJldHVybiBrZXkuY2hhcmFjdGVyID09
IFVfU0VOVElORUw7IH0KKyAgICB9OworCisgICAgLy8gRm9udHMgYXJlIG5vdCByZWYnZCB0byBh
dm9pZCBjeWNsZXMuCisgICAgLy8gRklYTUU6IENvbnNpZGVyIGNoYW5naW5nIHRoZXNlIG1hcHMg
dG8gdXNlIFdlYWtQdHIgaW5zdGVhZCBvZiByYXcgcG9pbnRlcnMuCisgICAgdXNpbmcgQ2hhcmFj
dGVyRmFsbGJhY2tNYXAgPSBIYXNoTWFwPENoYXJhY3RlckZhbGxiYWNrTWFwS2V5LCBGb250Kiwg
Q2hhcmFjdGVyRmFsbGJhY2tNYXBLZXlIYXNoLCBDaGFyYWN0ZXJGYWxsYmFja01hcEtleUhhc2hU
cmFpdHM+OworCisgICAgSGFzaE1hcDxjb25zdCBGb250KiwgQ2hhcmFjdGVyRmFsbGJhY2tNYXA+
IG1fY2hhcmFjdGVyRmFsbGJhY2tNYXBzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9u
dENhY2hlRnJlZVR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJl
ZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3BwCmluZGV4IDc4ZjBkYjVhMGZkNDE4MTAzNmJjZWZm
N2Y0OTM3MTczYWNmYWQ4ODMuLjI0MmQ4ZDlkMGQxMzUzNDcyMzU2OGY1YTkxZmQwMjlmYWQyZTdi
MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBl
L0ZvbnRDYWNoZUZyZWVUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHAKQEAgLTIzNiwxNiArMjM2LDE3IEBA
IHN0cnVjdCBGYWxsYmFja0ZvbnREZXNjcmlwdGlvbktleUhhc2ggewogICAgIHN0YXRpYyBjb25z
dCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKIH07CiAKLXVzaW5n
IFN5c3RlbUZhbGxiYWNrQ2FjaGUgPSBIYXNoTWFwPEZhbGxiYWNrRm9udERlc2NyaXB0aW9uS2V5
LCBzdGQ6OnVuaXF1ZV9wdHI8Q2FjaGVkRm9udFNldD4sIEZhbGxiYWNrRm9udERlc2NyaXB0aW9u
S2V5SGFzaCwgU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEZhbGxiYWNrRm9udERlc2NyaXB0aW9uS2V5
Pj47Ci1zdGF0aWMgU3lzdGVtRmFsbGJhY2tDYWNoZSYgc3lzdGVtRmFsbGJhY2tDYWNoZSgpCit1
c2luZyBTeXN0ZW1GYWxsYmFja0ZvbnRTZXRDYWNoZSA9IEhhc2hNYXA8RmFsbGJhY2tGb250RGVz
Y3JpcHRpb25LZXksIHN0ZDo6dW5pcXVlX3B0cjxDYWNoZWRGb250U2V0PiwgRmFsbGJhY2tGb250
RGVzY3JpcHRpb25LZXlIYXNoLCBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8RmFsbGJhY2tGb250RGVz
Y3JpcHRpb25LZXk+PjsKK3N0YXRpYyBTeXN0ZW1GYWxsYmFja0ZvbnRTZXRDYWNoZSYgc3lzdGVt
RmFsbGJhY2tGb250U2V0Q2FjaGUoKQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTeXN0
ZW1GYWxsYmFja0NhY2hlPiBjYWNoZTsKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgbW92
ZWQgdG8gRm9udENhY2hlIHNpbmNlIGl0IGNhbiBiZSBhY2Nlc3NlZCBmcm9tIHdvcmtlciB0aHJl
YWRzLgorICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTeXN0ZW1GYWxsYmFja0ZvbnRTZXRDYWNo
ZT4gY2FjaGU7CiAgICAgcmV0dXJuIGNhY2hlLmdldCgpOwogfQogCiBSZWZQdHI8Rm9udD4gRm9u
dENhY2hlOjpzeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBkZXNjcmlwdGlvbiwgY29uc3QgRm9udCosIElzRm9yUGxhdGZvcm1Gb250LCBQcmVmZXJDb2xv
cmVkRm9udCBwcmVmZXJDb2xvcmVkRm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2ln
bmVkIGxlbmd0aCkKIHsKLSAgICBhdXRvIGFkZFJlc3VsdCA9IHN5c3RlbUZhbGxiYWNrQ2FjaGUo
KS5lbnN1cmUoRmFsbGJhY2tGb250RGVzY3JpcHRpb25LZXkoZGVzY3JpcHRpb24sIHByZWZlckNv
bG9yZWRGb250KSwgWyZkZXNjcmlwdGlvbiwgcHJlZmVyQ29sb3JlZEZvbnRdKCkgLT4gc3RkOjp1
bmlxdWVfcHRyPENhY2hlZEZvbnRTZXQ+IHsKKyAgICBhdXRvIGFkZFJlc3VsdCA9IHN5c3RlbUZh
bGxiYWNrRm9udFNldENhY2hlKCkuZW5zdXJlKEZhbGxiYWNrRm9udERlc2NyaXB0aW9uS2V5KGRl
c2NyaXB0aW9uLCBwcmVmZXJDb2xvcmVkRm9udCksIFsmZGVzY3JpcHRpb24sIHByZWZlckNvbG9y
ZWRGb250XSgpIC0+IHN0ZDo6dW5pcXVlX3B0cjxDYWNoZWRGb250U2V0PiB7CiAgICAgICAgIFJl
ZlB0cjxGY1BhdHRlcm4+IHBhdHRlcm4gPSBhZG9wdFJlZihGY1BhdHRlcm5DcmVhdGUoKSk7CiAg
ICAgICAgIEZjUGF0dGVybkFkZEJvb2wocGF0dGVybi5nZXQoKSwgRkNfU0NBTEFCTEUsIEZjVHJ1
ZSk7CiAjaWZkZWYgRkNfQ09MT1IKQEAgLTI4MSw3ICsyODIsNyBAQCBSZWZQdHI8Rm9udD4gRm9u
dENhY2hlOjpzeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBkZXNjcgogCiB2b2lkIEZvbnRDYWNoZTo6cGxhdGZvcm1QdXJnZUluYWN0aXZlRm9udERhdGEo
KQogewotICAgIHN5c3RlbUZhbGxiYWNrQ2FjaGUoKS5jbGVhcigpOworICAgIHN5c3RlbUZhbGxi
YWNrRm9udFNldENhY2hlKCkuY2xlYXIoKTsKIH0KIAogc3RhdGljIFZlY3RvcjxTdHJpbmc+IHBh
dHRlcm5Ub0ZhbWlsaWVzKEZjUGF0dGVybiYgcGF0dGVybikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>459564</attachid>
            <date>2022-05-18 20:30:01 -0700</date>
            <delta_ts>2022-07-18 23:33:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233972-20220519152959.patch</filename>
            <type>text/plain</type>
            <size>26566</size>
            <attacher name="Matt Woodrow">mattwoodrow</attacher>
            
              <data encoding="base64">RnJvbSA0ZDUzYmM3ZDIyMjkwYjgxNzUwNmMyNjA5MGQzODc1NjM5ZDgwN2U0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBDYW1lcm9uIE1jQ29ybWFjayA8aGV5Y2FtQGFwcGxlLmNvbT4K
RGF0ZTogRnJpLCAzIERlYyAyMDIxIDA5OjU5OjUwICsxMTAwClN1YmplY3Q6IFtQQVRDSF0gTW92
ZSB0aGUgU3lzdGVtRmFsbGJhY2tDYWNoZSB0byBGb250Q2FjaGUKIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzM5NzIKClJldmlld2VkIGJ5IE15bGVzIE1heGZpZWxk
LgoKV2l0aCBPZmZzY3JlZW5DYW52YXMsIHRoZSBTeXN0ZW1GYWxsYmFja0NhY2hlIGNhbiBiZSB0
b3VjaGVkIGZyb20Kd29ya2VyIHRocmVhZHMuIFRoaXMgY2FjaGUgY29udGFpbnMgQXRvbVN0cmlu
Z3MsIHdoaWNoIGFyZSB0aHJlYWQKc3BlY2lmaWMuCgpNb3ZlIHRoZSBTeXN0ZW1GYWxsYmFja0Nh
Y2hlIGNvZGUgZnJvbSBpbnNpZGUgRm9udENhY2hlLmNwcCB0byBzZXBhcmF0ZQpmaWxlcyAoYW5k
IHJlbmFtZSBpdCB0byBTeXN0ZW1GYWxsYmFja0ZvbnRDYWNoZSksIHRvIGF2b2lkIEZvbnRDYWNo
ZS5oCmZyb20gZ2V0dGluZyB0b28gbm9pc3kuIEFsc28gdGFrZSB0aGUgb3Bwb3J0dW5pdHkgdG8g
d3JhcCBpdCBpbiBhIGNsYXNzCnRvIGdpdmUgaXQgbWVhbmluZ2Z1bCBtZXRob2RzLgoKKiBwbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaDoKKFdlYkNvcmU6OkZvbnRDYWNoZTo6c3lzdGVtRm9u
dEZhbGxiYWNrQ2FjaGUpOgoqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwOgoqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYWNoZS5oOgooV2ViQ29yZTo6Rm9udENhY2hlOjpzeXN0ZW1Gb250RmFs
bGJhY2tDYWNoZSk6CiogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHA6CihXZWJDb3JlOjpzeXN0
ZW1GYWxsYmFja0NhY2hlKToKKiBwbGF0Zm9ybS9ncmFwaGljcy9TeXN0ZW1GYWxsYmFja0ZvbnRD
YWNoZS5jcHA6CihXZWJDb3JlOjpTeXN0ZW1GYWxsYmFja0ZvbnRDYWNoZTo6Zm9yQ3VycmVudFRo
cmVhZCk6Ck1vdmUgU3lzdGVtRmFsbGJhY2tDYWNoZSBmcm9tIGEgc2luZ2xldG9uIHRvIEZvbnRD
YWNoZS4KCiogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oOgooV2ViQ29yZTo6Rm9udDo6c2V0SXNV
c2VkSW5TeXN0ZW1GYWxsYmFja0ZvbnRDYWNoZSk6CihXZWJDb3JlOjpGb250Ojppc1VzZWRJblN5
c3RlbUZhbGxiYWNrRm9udENhY2hlIGNvbnN0KToKTmV3IGZ1bmN0aW9ucyB0byBub3RlIGEgRm9u
dCBpcyBpbiBhIFN5c3RlbUZhbGxiYWNrRm9udENhY2hlLCBzaW5jZSB0aGUKbWV0aG9kIHRoYXQg
YWRkcyBpdCB0byBhbmQgY2hlY2tzIGl0cyBwcmVzZW5jZSBpbiB0aGUgY2FjaGUgaXMgbm8gbG9u
Z2VyCmluIEZvbnQuCgoqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwOgooV2ViQ29yZTo6Rm9u
dDo6fkZvbnQpOgpDYWxsIGEgbmV3IFN5c3RlbUZhbGxiYWNrRm9udENhY2hlOjpmb3JDdXJyZW50
VGhyZWFkIGZ1bmN0aW9uLgoKKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcDoKKFdlYkNvcmU6
OkZvbnQ6OnN5c3RlbUZhbGxiYWNrRm9udEZvckNoYXJhY3RlciBjb25zdCk6CihXZWJDb3JlOjpG
b250OjpyZW1vdmVGcm9tU3lzdGVtRmFsbGJhY2tDYWNoZSk6CiogcGxhdGZvcm0vZ3JhcGhpY3Mv
U3lzdGVtRmFsbGJhY2tGb250Q2FjaGUuY3BwOiBBZGRlZC4KKFdlYkNvcmU6OlN5c3RlbUZhbGxi
YWNrRm9udENhY2hlOjpzeXN0ZW1GYWxsYmFja0ZvbnRGb3JDaGFyYWN0ZXIpOgooV2ViQ29yZTo6
U3lzdGVtRmFsbGJhY2tGb250Q2FjaGU6OnJlbW92ZSk6Ck1vdmUgbG9va3VwIGFuZCByZW1vdmFs
IG1ldGhvZHMgZnJvbSBGb250IHRvIFN5c3RlbUZhbGxiYWNrRm9udENhY2hlLgoKKiBIZWFkZXJz
LmNtYWtlOgoqIFNvdXJjZXMudHh0OgoqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcDoKKCk6IERlbGV0ZWQuCihXZWJDb3JlOjpv
cGVyYXRvcj09KTogRGVsZXRlZC4KKFdlYkNvcmU6OkNoYXJhY3RlckZhbGxiYWNrTWFwS2V5SGFz
aDo6aGFzaCk6IERlbGV0ZWQuCihXZWJDb3JlOjpDaGFyYWN0ZXJGYWxsYmFja01hcEtleUhhc2g6
OmVxdWFsKTogRGVsZXRlZC4KKFdlYkNvcmU6OkNoYXJhY3RlckZhbGxiYWNrTWFwS2V5SGFzaFRy
YWl0czo6Y29uc3RydWN0RGVsZXRlZFZhbHVlKTogRGVsZXRlZC4KKFdlYkNvcmU6OkNoYXJhY3Rl
ckZhbGxiYWNrTWFwS2V5SGFzaFRyYWl0czo6aXNEZWxldGVkVmFsdWUpOiBEZWxldGVkLgoqIHBs
YXRmb3JtL2dyYXBoaWNzL1N5c3RlbUZhbGxiYWNrRm9udENhY2hlLmg6IEFkZGVkLgooV2ViQ29y
ZTo6U3lzdGVtRmFsbGJhY2tGb250Q2FjaGU6OkNoYXJhY3RlckZhbGxiYWNrTWFwS2V5OjpvcGVy
YXRvcj09IGNvbnN0KToKKFdlYkNvcmU6OlN5c3RlbUZhbGxiYWNrRm9udENhY2hlOjpDaGFyYWN0
ZXJGYWxsYmFja01hcEtleUhhc2g6Omhhc2gpOgooV2ViQ29yZTo6U3lzdGVtRmFsbGJhY2tGb250
Q2FjaGU6OkNoYXJhY3RlckZhbGxiYWNrTWFwS2V5SGFzaDo6ZXF1YWwpOgooV2ViQ29yZTo6U3lz
dGVtRmFsbGJhY2tGb250Q2FjaGU6OkNoYXJhY3RlckZhbGxiYWNrTWFwS2V5SGFzaFRyYWl0czo6
Y29uc3RydWN0RGVsZXRlZFZhbHVlKToKKFdlYkNvcmU6OlN5c3RlbUZhbGxiYWNrRm9udENhY2hl
OjpDaGFyYWN0ZXJGYWxsYmFja01hcEtleUhhc2hUcmFpdHM6OmlzRGVsZXRlZFZhbHVlKToKTW92
ZSBleGlzdGluZyBTeXN0ZW1GYWxsYmFja0ZvbnRDYWNoZSBjb2RlIGZyb20gRm9udC5jcHAgdG8g
YSBuZXcgZmlsZSBhbmQKd3JhcCBpdCBpbiBhIGNsYXNzLgoKKiBwbGF0Zm9ybS9ncmFwaGljcy9m
cmVldHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHA6CihXZWJDb3JlOjpzeXN0ZW1GYWxsYmFja0Zv
bnRTZXRDYWNoZSk6CihXZWJDb3JlOjpGb250Q2FjaGU6OnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFj
dGVycyk6CihXZWJDb3JlOjpGb250Q2FjaGU6OnBsYXRmb3JtUHVyZ2VJbmFjdGl2ZUZvbnREYXRh
KToKKFdlYkNvcmU6OnN5c3RlbUZhbGxiYWNrQ2FjaGUpOgpSZW5hbWUgdGhlIFN5c3RlbUZhbGxi
YWNrQ2FjaGUgaW4gRm9udENhY2hlRnJlZVR5cGUuY3BwLCB3aGljaCBpcyB1c2VkCmZvciBhIGRp
ZmZlcmVudCBwdXJwb3NlIGZyb20gdGhlIG9uZSB0aGF0IGxpdmVkIGluIEZvbnQuY3BwLgotLS0K
IFNvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgICAgICAgICAgICAgICAgICB8ICAxICsKIFNv
dXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0ICAgICAgICAgICAgICAgICAgICB8ICAxICsKIC4uLi9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiB8ICA2ICsrCiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcCAgICAgfCA4NSArLS0tLS0tLS0tLS0t
LS0tLS0KIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaCAgICAgICB8ICA3
ICstCiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaCAgfCAgNCAr
CiAuLi4vZ3JhcGhpY3MvU3lzdGVtRmFsbGJhY2tGb250Q2FjaGUuY3BwICAgICAgfCA4OSArKysr
KysrKysrKysrKysrKysrCiAuLi4vZ3JhcGhpY3MvU3lzdGVtRmFsbGJhY2tGb250Q2FjaGUuaCAg
ICAgICAgfCA4OSArKysrKysrKysrKysrKysrKysrCiAuLi4vZ3JhcGhpY3MvZnJlZXR5cGUvRm9u
dENhY2hlRnJlZVR5cGUuY3BwICAgfCAxMSArLS0KIDkgZmlsZXMgY2hhbmdlZCwgMjAzIGluc2Vy
dGlvbnMoKyksIDkwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N5c3RlbUZhbGxiYWNrRm9udENhY2hlLmNwcAogY3JlYXRl
IG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N5c3RlbUZhbGxi
YWNrRm9udENhY2hlLmgKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtl
IGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCBjMzdkNDExYzMxNzMuLjg3M2Mx
MTFmZmEzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQorKysgYi9T
b3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCkBAIC0xNTk3LDYgKzE1OTcsNyBAQCBzZXQoV2Vi
Q29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvU291
cmNlQnVmZmVyUHJpdmF0ZUNsaWVudC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlSW1h
Z2UuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1N0cmluZ1RydW5jYXRvci5oCisgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvU3lzdGVtRmFsbGJhY2tGb250Q2FjaGUuaAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL1N5c3RlbUltYWdlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9UYWJTaXplLmgKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVuLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggZTU0ZDE3MjE0YzI3
Li5jMTc3MThjMWVmMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0Cisr
KyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0yMTAxLDYgKzIxMDEsNyBAQCBwbGF0
Zm9ybS9ncmFwaGljcy9Tb3VyY2VCcnVzaC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJ1
ZmZlclByaXZhdGUuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VJbWFnZS5jcHAKIHBsYXRm
b3JtL2dyYXBoaWNzL1N0cmluZ1RydW5jYXRvci5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL1N5c3Rl
bUZhbGxiYWNrRm9udENhY2hlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5jcHAKIHBs
YXRmb3JtL2dyYXBoaWNzL1RleHRUcmFja1JlcHJlc2VudGF0aW9uLmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvVHJhY2tQcml2YXRlQmFzZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBlYzJjYzhhNThkMDEuLjhhMTU1MTFjNjhk
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagpAQCAtMTAxMyw2ICsxMDEzLDcgQEAKIAkJMzFGQjFBNUQxMjBBNUQwNjAwREMwMkEwIC8q
IERldmljZU1vdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAzMUZCMUE1NTEyMEE1RDA2MDBEQzAyQTAgLyogRGV2aWNlTW90aW9uRXZlbnQu
aCAqLzsgfTsKIAkJMzFGQjFBNjYxMjBBNUQzRjAwREMwMkEwIC8qIEpTRGV2aWNlTW90aW9uRXZl
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxRkIx
QTY0MTIwQTVEM0YwMERDMDJBMCAvKiBKU0RldmljZU1vdGlvbkV2ZW50LmggKi87IH07CiAJCTMx
RkU2REZBMTUwMDRDMkEwMDA0RUJDNCAvKiBOb3RpZmljYXRpb25QZXJtaXNzaW9uQ2FsbGJhY2su
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxRUMxREFD
MTRGRjI2RUEwMEM5NDY2MiAvKiBOb3RpZmljYXRpb25QZXJtaXNzaW9uQ2FsbGJhY2suaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkzMjExMkUwRjI3
NEI0N0NGMDA3MDQ3QTggLyogU3lzdGVtRmFsbGJhY2tGb250Q2FjaGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMyODk5RkI5Mjc0QjQxMEMwMDg1NUE5
RCAvKiBTeXN0ZW1GYWxsYmFja0ZvbnRDYWNoZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTMzNTAzQzlBMTAxNzlBNzQwMDNCNDdFMSAvKiBOb3Rp
ZmljYXRpb25DbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDMzNTAzQzk5MTAxNzlBNzQwMDNCNDdFMSAvKiBOb3RpZmljYXRpb25DbGllbnQuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkzMzUwM0NB
NDEwMTc5QUQ3MDAzQjQ3RTEgLyogSlNOb3RpZmljYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzNTAzQ0EwMTAxNzlBRDcwMDNCNDdFMSAvKiBK
U05vdGlmaWNhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTMzRDAyMTJEMTMxREIzN0IwMDQwOTFBOCAvKiBDb29raWVTdG9yYWdlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTNGMDFFQTEyNzBF
MTBEMDBERkJBNzEgLyogQ29va2llU3RvcmFnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CkBAIC04NDc0LDYgKzg0NzUsOCBAQAogCQkzMUZCMUE1NjEy
MEE1RDA2MDBEQzAyQTAgLyogRGV2aWNlTW90aW9uRXZlbnQuaWRsICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
cGF0aCA9IERldmljZU1vdGlvbkV2ZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMzFGQjFBNjMxMjBBNUQzRjAwREMwMkEwIC8qIEpTRGV2aWNlTW90aW9uRXZlbnQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNEZXZpY2VNb3Rpb25FdmVudC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxRkIxQTY0MTIwQTVEM0YwMERDMDJB
MCAvKiBKU0RldmljZU1vdGlvbkV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTRGV2aWNlTW90aW9uRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MzI4OTlGQjcyNzRCNDEwQzAwODU1QTlEIC8qIFN5c3RlbUZhbGxiYWNrRm9udENhY2hlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFN5c3RlbUZhbGxiYWNrRm9udENhY2hlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzI4OTlGQjkyNzRCNDEwQzAwODU1QTlEIC8qIFN5c3RlbUZh
bGxiYWNrRm9udENhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN5c3RlbUZhbGxiYWNrRm9udENhY2hl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMzMUZGNjdERTE5N0I1NzM5M0M0NkE3
RiAvKiBSZW5kZXJNYXRoTUxQYWRkZWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUmVuZGVyTWF0aE1MUGFkZGVkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMz
MUZGNjdERTE5N0I1NzM5M0M0NkFBNyAvKiBSZW5kZXJNYXRoTUxTcGFjZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJNYXRoTUxTcGFjZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkzMzNGNzA0RTBGQjQ5Q0EyMDA4RTEyQTYgLyogTm90aWZpY2F0aW9u
LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBOb3RpZmljYXRpb24uaWRsOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMjkzNDYsNiArMjkzNDksOCBAQAogCQkJCUIyMzU0MEYwMEQw
MDc4MkUwMDIzODJGQSAvKiBTdHJpbmdUcnVuY2F0b3IuY3BwICovLAogCQkJCUIyMzU0MEYxMEQw
MDc4MkUwMDIzODJGQSAvKiBTdHJpbmdUcnVuY2F0b3IuaCAqLywKIAkJCQkwODc1NThDNDEzQjRB
NTdEMDBGNDkzMDcgLyogU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yLmggKi8sCisJCQkJ
MzI4OTlGQjcyNzRCNDEwQzAwODU1QTlEIC8qIFN5c3RlbUZhbGxiYWNrRm9udENhY2hlLmNwcCAq
LywKKwkJCQkzMjg5OUZCOTI3NEI0MTBDMDA4NTVBOUQgLyogU3lzdGVtRmFsbGJhY2tGb250Q2Fj
aGUuaCAqLywKIAkJCQk5NUU5RjQ0NDI3QzlBMzlCMDA5NDUzMzcgLyogU3lzdGVtSW1hZ2UuaCAq
LywKIAkJCQkzQkI2QjgwRjIyQTdEMzExMDAzQTJBNjkgLyogVGFiU2l6ZS5oICovLAogCQkJCTcy
MkFGMkUzMjdFMUNGMTEwMDc4RDk5NyAvKiBUZXh0Qm94SXRlcmF0b3IuaCAqLywKQEAgLTM3OTM5
LDYgKzM3OTQ0LDcgQEAKIAkJCQk1MTdBNTM0NjFGNTBDMTdGMDBEQ0RDMEEgLyogU1dTZXJ2ZXJX
b3JrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxODA4MTE3MTZGQ0Y5Q0IwMEI4MEQwNyAvKiBT
eW5jaHJvbm91c0xvYWRlckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzE2OTJERDUyM0Qy
M0UwODAwNkU4OEY3IC8qIFN5c3RlbUJhdHRlcnkuaCBpbiBIZWFkZXJzICovLAorCQkJCTMyMTEy
RTBGMjc0QjQ3Q0YwMDcwNDdBOCAvKiBTeXN0ZW1GYWxsYmFja0ZvbnRDYWNoZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRTRFOEI0RUMyMTZCNzlFNTAwQjg4MzREIC8qIFN5c3RlbUZvbnREYXRhYmFz
ZUNvcmVUZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NUU5RjQ0NjI3QzlBMzlDMDA5NDUzMzcg
LyogU3lzdGVtSW1hZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMDNDMDc0MTg4NDY5NUUwMEE1
RjhDQSAvKiBTeXN0ZW1NZW1vcnkuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250LmNwcAppbmRleCBhYTM1ZTA0ZTE1N2QuLmM4NjdlMzRmNzliMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAKQEAgLTg1LDcgKzg1
LDcgQEAgRm9udDo6Rm9udChjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEsIE9y
aWdpbiBvcmlnaW4sIEludGVyc3RpdGlhbCBpbnQKICAgICAsIG1faXNUZXh0T3JpZW50YXRpb25G
YWxsYmFjayhvcmllbnRhdGlvbkZhbGxiYWNrID09IE9yaWVudGF0aW9uRmFsbGJhY2s6OlllcykK
ICAgICAsIG1faXNCcm9rZW5JZGVvZ3JhcGhGYWxsYmFjayhmYWxzZSkKICAgICAsIG1faGFzVmVy
dGljYWxHbHlwaHMoZmFsc2UpCi0gICAgLCBtX2lzVXNlZEluU3lzdGVtRmFsbGJhY2tDYWNoZShm
YWxzZSkKKyAgICAsIG1faXNVc2VkSW5TeXN0ZW1GYWxsYmFja0ZvbnRDYWNoZShmYWxzZSkKICAg
ICAsIG1fYWxsb3dzQW50aWFsaWFzaW5nKHRydWUpCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
ICAgICAsIG1fc2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKGZhbHNlKQpAQCAtMTc1LDcgKzE3NSw3
IEBAIHZvaWQgRm9udDo6cGxhdGZvcm1HbHlwaEluaXQoKQogCiBGb250Ojp+Rm9udCgpCiB7Ci0g
ICAgcmVtb3ZlRnJvbVN5c3RlbUZhbGxiYWNrQ2FjaGUoKTsKKyAgICBTeXN0ZW1GYWxsYmFja0Zv
bnRDYWNoZTo6Zm9yQ3VycmVudFRocmVhZCgpLnJlbW92ZSh0aGlzKTsKIH0KIAogUmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyIEZvbnQ6OnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpIGNv
bnN0CkBAIC01NTQsODggKzU1NCw5IEBAIEdseXBoQnVmZmVyQWR2YW5jZSBGb250OjphcHBseVRy
YW5zZm9ybXMoR2x5cGhCdWZmZXImLCB1bnNpZ25lZCwgdW5zaWduZWQsIGJvb2wsCiB9CiAjZW5k
aWYKIAotc3RydWN0IENoYXJhY3RlckZhbGxiYWNrTWFwS2V5IHsKLSAgICBBdG9tU3RyaW5nIGxv
Y2FsZTsKLSAgICBVQ2hhcjMyIGNoYXJhY3RlciB7IDAgfTsKLSAgICBib29sIGlzRm9yUGxhdGZv
cm1Gb250IHsgZmFsc2UgfTsKLX07Ci0KLWlubGluZSB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwg
Y29uc3QgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXkmIGtleSkKLXsKLSAgICBhZGQoaGFzaGVyLCBr
ZXkubG9jYWxlLCBrZXkuY2hhcmFjdGVyLCBrZXkuaXNGb3JQbGF0Zm9ybUZvbnQpOwotfQotCi1p
bmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENoYXJhY3RlckZhbGxiYWNrTWFwS2V5JiBhLCBj
b25zdCBDaGFyYWN0ZXJGYWxsYmFja01hcEtleSYgYikKLXsKLSAgICByZXR1cm4gYS5sb2NhbGUg
PT0gYi5sb2NhbGUgJiYgYS5jaGFyYWN0ZXIgPT0gYi5jaGFyYWN0ZXIgJiYgYS5pc0ZvclBsYXRm
b3JtRm9udCA9PSBiLmlzRm9yUGxhdGZvcm1Gb250OwotfQotCi1zdHJ1Y3QgQ2hhcmFjdGVyRmFs
bGJhY2tNYXBLZXlIYXNoIHsKLSAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBDaGFyYWN0
ZXJGYWxsYmFja01hcEtleSYga2V5KSB7IHJldHVybiBjb21wdXRlSGFzaChrZXkpOyB9Ci0gICAg
c3RhdGljIGJvb2wgZXF1YWwoY29uc3QgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXkmIGEsIGNvbnN0
IENoYXJhY3RlckZhbGxiYWNrTWFwS2V5JiBiKSB7IHJldHVybiBhID09IGI7IH0KLSAgICBzdGF0
aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Ci19Owot
Ci1zdHJ1Y3QgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXlIYXNoVHJhaXRzIDogU2ltcGxlQ2xhc3NI
YXNoVHJhaXRzPENoYXJhY3RlckZhbGxiYWNrTWFwS2V5PiB7Ci0gICAgc3RhdGljIHZvaWQgY29u
c3RydWN0RGVsZXRlZFZhbHVlKENoYXJhY3RlckZhbGxiYWNrTWFwS2V5JiBzbG90KSB7IG5ldyAo
Tm90TnVsbCwgJnNsb3QpIENoYXJhY3RlckZhbGxiYWNrTWFwS2V5IHsgeyB9LCBVX1NFTlRJTkVM
LCB7IH0gfTsgfQotICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IENoYXJhY3Rl
ckZhbGxiYWNrTWFwS2V5JiBrZXkpIHsgcmV0dXJuIGtleS5jaGFyYWN0ZXIgPT0gVV9TRU5USU5F
TDsgfQotfTsKLQotLy8gRm9udHMgYXJlIG5vdCByZWYnZCB0byBhdm9pZCBjeWNsZXMuCi0vLyBG
SVhNRTogQ29uc2lkZXIgY2hhbmdpbmcgdGhlc2UgbWFwcyB0byB1c2UgV2Vha1B0ciBpbnN0ZWFk
IG9mIHJhdyBwb2ludGVycy4KLXVzaW5nIENoYXJhY3RlckZhbGxiYWNrTWFwID0gSGFzaE1hcDxD
aGFyYWN0ZXJGYWxsYmFja01hcEtleSwgRm9udCosIENoYXJhY3RlckZhbGxiYWNrTWFwS2V5SGFz
aCwgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXlIYXNoVHJhaXRzPjsKLXVzaW5nIFN5c3RlbUZhbGxi
YWNrQ2FjaGUgPSBIYXNoTWFwPGNvbnN0IEZvbnQqLCBDaGFyYWN0ZXJGYWxsYmFja01hcD47Ci0K
LXN0YXRpYyBTeXN0ZW1GYWxsYmFja0NhY2hlJiBzeXN0ZW1GYWxsYmFja0NhY2hlKCkKLXsKLSAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3lzdGVtRmFsbGJhY2tDYWNoZT4gbWFwOwotICAgIHJl
dHVybiBtYXAuZ2V0KCk7Ci19Ci0KIFJlZlB0cjxGb250PiBGb250OjpzeXN0ZW1GYWxsYmFja0Zv
bnRGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjaGFyYWN0ZXIsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
ZGVzY3JpcHRpb24sIElzRm9yUGxhdGZvcm1Gb250IGlzRm9yUGxhdGZvcm1Gb250KSBjb25zdAog
ewotICAgIGF1dG8gZm9udEFkZFJlc3VsdCA9IHN5c3RlbUZhbGxiYWNrQ2FjaGUoKS5hZGQodGhp
cywgQ2hhcmFjdGVyRmFsbGJhY2tNYXAoKSk7Ci0KLSAgICBpZiAoIWNoYXJhY3RlcikgewotICAg
ICAgICBVQ2hhciBjb2RlVW5pdCA9IDA7Ci0gICAgICAgIHJldHVybiBGb250Q2FjaGU6OmZvckN1
cnJlbnRUaHJlYWQoKS5zeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoZGVzY3JpcHRpb24sIHRo
aXMsIGlzRm9yUGxhdGZvcm1Gb250LCBGb250Q2FjaGU6OlByZWZlckNvbG9yZWRGb250OjpObywg
JmNvZGVVbml0LCAxKTsKLSAgICB9Ci0KLSAgICBhdXRvIGtleSA9IENoYXJhY3RlckZhbGxiYWNr
TWFwS2V5IHsgZGVzY3JpcHRpb24uY29tcHV0ZWRMb2NhbGUoKSwgY2hhcmFjdGVyLCBpc0ZvclBs
YXRmb3JtRm9udCAhPSBJc0ZvclBsYXRmb3JtRm9udDo6Tm8gfTsKLSAgICByZXR1cm4gZm9udEFk
ZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZW5zdXJlKFdURk1vdmUoa2V5KSwgWyZdIHsKLSAgICAg
ICAgVUNoYXIgY29kZVVuaXRzWzJdOwotICAgICAgICB1bnNpZ25lZCBjb2RlVW5pdHNMZW5ndGg7
Ci0gICAgICAgIGlmIChVX0lTX0JNUChjaGFyYWN0ZXIpKSB7Ci0gICAgICAgICAgICBjb2RlVW5p
dHNbMF0gPSBGb250Q2FzY2FkZTo6bm9ybWFsaXplU3BhY2VzKGNoYXJhY3Rlcik7Ci0gICAgICAg
ICAgICBjb2RlVW5pdHNMZW5ndGggPSAxOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
Y29kZVVuaXRzWzBdID0gVTE2X0xFQUQoY2hhcmFjdGVyKTsKLSAgICAgICAgICAgIGNvZGVVbml0
c1sxXSA9IFUxNl9UUkFJTChjaGFyYWN0ZXIpOwotICAgICAgICAgICAgY29kZVVuaXRzTGVuZ3Ro
ID0gMjsKLSAgICAgICAgfQotICAgICAgICBhdXRvIGZvbnQgPSBGb250Q2FjaGU6OmZvckN1cnJl
bnRUaHJlYWQoKS5zeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoZGVzY3JpcHRpb24sIHRoaXMs
IGlzRm9yUGxhdGZvcm1Gb250LCBGb250Q2FjaGU6OlByZWZlckNvbG9yZWRGb250OjpObywgY29k
ZVVuaXRzLCBjb2RlVW5pdHNMZW5ndGgpLmdldCgpOwotICAgICAgICBpZiAoZm9udCkKLSAgICAg
ICAgICAgIGZvbnQtPm1faXNVc2VkSW5TeXN0ZW1GYWxsYmFja0NhY2hlID0gdHJ1ZTsKLSAgICAg
ICAgcmV0dXJuIGZvbnQ7Ci0gICAgfSkuaXRlcmF0b3ItPnZhbHVlOwotfQotCi12b2lkIEZvbnQ6
OnJlbW92ZUZyb21TeXN0ZW1GYWxsYmFja0NhY2hlKCkKLXsKLSAgICBzeXN0ZW1GYWxsYmFja0Nh
Y2hlKCkucmVtb3ZlKHRoaXMpOwotCi0gICAgaWYgKCFtX2lzVXNlZEluU3lzdGVtRmFsbGJhY2tD
YWNoZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9yIChhdXRvJiBjaGFyYWN0ZXJNYXAgOiBz
eXN0ZW1GYWxsYmFja0NhY2hlKCkudmFsdWVzKCkpIHsKLSAgICAgICAgVmVjdG9yPENoYXJhY3Rl
ckZhbGxiYWNrTWFwS2V5LCA1MTI+IHRvUmVtb3ZlOwotICAgICAgICBmb3IgKGF1dG8mIGVudHJ5
IDogY2hhcmFjdGVyTWFwKSB7Ci0gICAgICAgICAgICBpZiAoZW50cnkudmFsdWUgPT0gdGhpcykK
LSAgICAgICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQoZW50cnkua2V5KTsKLSAgICAgICAgfQot
ICAgICAgICBmb3IgKGF1dG8mIGtleSA6IHRvUmVtb3ZlKQotICAgICAgICAgICAgY2hhcmFjdGVy
TWFwLnJlbW92ZShrZXkpOwotICAgIH0KKyAgICByZXR1cm4gU3lzdGVtRmFsbGJhY2tGb250Q2Fj
aGU6OmZvckN1cnJlbnRUaHJlYWQoKS5zeXN0ZW1GYWxsYmFja0ZvbnRGb3JDaGFyYWN0ZXIodGhp
cywgY2hhcmFjdGVyLCBkZXNjcmlwdGlvbiwgaXNGb3JQbGF0Zm9ybUZvbnQpOwogfQogCiAjaWYg
IVBMQVRGT1JNKENPQ09BKSAmJiAhVVNFKEZSRUVUWVBFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udC5oCmluZGV4IGI1MDQxNDU4NGU4Ny4uNGQzNzgzMzE4YmI1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCkBAIC0yMTEsNiArMjExLDkgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBmbG9hdCBhc2NlbnRDb25zaWRlcmluZ01hY0FzY2VudEhhY2soY29u
c3QgV0NIQVIqLCBmbG9hdCBhc2NlbnQsIGZsb2F0IGRlc2NlbnQpOwogI2VuZGlmCiAKKyAgICB2
b2lkIHNldElzVXNlZEluU3lzdGVtRmFsbGJhY2tGb250Q2FjaGUoKSB7IG1faXNVc2VkSW5TeXN0
ZW1GYWxsYmFja0ZvbnRDYWNoZSA9IHRydWU7IH0KKyAgICBib29sIGlzVXNlZEluU3lzdGVtRmFs
bGJhY2tGb250Q2FjaGUoKSBjb25zdCB7IHJldHVybiBtX2lzVXNlZEluU3lzdGVtRmFsbGJhY2tG
b250Q2FjaGU7IH0KKwogcHJpdmF0ZToKICAgICBXRUJDT1JFX0VYUE9SVCBGb250KGNvbnN0IEZv
bnRQbGF0Zm9ybURhdGEmLCBPcmlnaW4sIEludGVyc3RpdGlhbCwgVmlzaWJpbGl0eSwgT3JpZW50
YXRpb25GYWxsYmFjaywgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI+
KTsKIApAQCAtMjI1LDggKzIyOCw2IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPEZvbnQ+IGNyZWF0
ZVNjYWxlZEZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNv
bnN0OwogICAgIFJlZlB0cjxGb250PiBwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZvbnQoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0OwogCi0gICAgdm9pZCByZW1v
dmVGcm9tU3lzdGVtRmFsbGJhY2tDYWNoZSgpOwotICAgIAogICAgIHN0cnVjdCBEZXJpdmVkRm9u
dHM7CiAgICAgRGVyaXZlZEZvbnRzJiBlbnN1cmVEZXJpdmVkRm9udERhdGEoKSBjb25zdDsKIApA
QCAtMzM5LDcgKzM0MCw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9pc0Jyb2tlbklkZW9n
cmFwaEZhbGxiYWNrIDogMTsKICAgICB1bnNpZ25lZCBtX2hhc1ZlcnRpY2FsR2x5cGhzIDogMTsK
IAotICAgIHVuc2lnbmVkIG1faXNVc2VkSW5TeXN0ZW1GYWxsYmFja0NhY2hlIDogMTsKKyAgICB1
bnNpZ25lZCBtX2lzVXNlZEluU3lzdGVtRmFsbGJhY2tGb250Q2FjaGUgOiAxOwogICAgIAogICAg
IHVuc2lnbmVkIG1fYWxsb3dzQW50aWFsaWFzaW5nIDogMTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaAppbmRleCA1MzA3MTMyMGY0NWQuLjA4NDdmOWY3
ZTQ2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
Y2hlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgK
QEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCiAjaW5jbHVk
ZSAiRm9udFNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiRm9udFRhZ2dlZFNldHRpbmdzLmgiCisjaW5j
bHVkZSAiU3lzdGVtRmFsbGJhY2tGb250Q2FjaGUuaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2lu
Y2x1ZGUgPGFycmF5PgogI2luY2x1ZGUgPGxpbWl0cy5oPgpAQCAtMzY5LDYgKzM3MCw4IEBAIHB1
YmxpYzoKICAgICB2b2lkIHByZXdhcm0oUHJld2FybUluZm9ybWF0aW9uJiYpOwogICAgIHN0YXRp
YyB2b2lkIHByZXdhcm1HbG9iYWxseSgpOwogCisgICAgU3lzdGVtRmFsbGJhY2tGb250Q2FjaGUm
IHN5c3RlbUZhbGxiYWNrRm9udENhY2hlKCkgeyByZXR1cm4gbV9zeXN0ZW1GYWxsYmFja0ZvbnRD
YWNoZTsgfQorCiBwcml2YXRlOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcHVyZ2VJbmFjdGl2
ZUZvbnREYXRhSWZOZWVkZWQoKTsKICAgICB2b2lkIHBydW5lVW5yZWZlcmVuY2VkRW50cmllc0Zy
b21Gb250Q2FzY2FkZUNhY2hlKCk7CkBAIC0zOTUsNiArMzk4LDcgQEAgcHJpdmF0ZToKICAgICBz
dHJ1Y3QgRm9udERhdGFDYWNoZXM7CiAgICAgVW5pcXVlUmVmPEZvbnREYXRhQ2FjaGVzPiBtX2Zv
bnREYXRhQ2FjaGVzOwogICAgIEZvbnRDYXNjYWRlQ2FjaGUgbV9mb250Q2FzY2FkZUNhY2hlOwor
ICAgIFN5c3RlbUZhbGxiYWNrRm9udENhY2hlIG1fc3lzdGVtRmFsbGJhY2tGb250Q2FjaGU7CiAK
ICAgICB1bnNpZ25lZCBzaG9ydCBtX2dlbmVyYXRpb24geyAwIH07CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N5c3RlbUZhbGxiYWNrRm9udENhY2hlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N5c3RlbUZhbGxiYWNrRm9udENh
Y2hlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmFmNTYyOTIx
ZTYzMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1N5c3RlbUZhbGxiYWNrRm9udENhY2hlLmNwcApAQCAtMCwwICsxLDg5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YKKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUg
bmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJTeXN0ZW1GYWxsYmFja0ZvbnRDYWNoZS5oIgorCisjaW5jbHVkZSAiRm9udENhY2hlLmgiCisj
aW5jbHVkZSAiRm9udENhc2NhZGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTeXN0ZW1G
YWxsYmFja0ZvbnRDYWNoZSYgU3lzdGVtRmFsbGJhY2tGb250Q2FjaGU6OmZvckN1cnJlbnRUaHJl
YWQoKQoreworICAgIHJldHVybiBGb250Q2FjaGU6OmZvckN1cnJlbnRUaHJlYWQoKS5zeXN0ZW1G
YWxsYmFja0ZvbnRDYWNoZSgpOworfQorCitSZWZQdHI8Rm9udD4gU3lzdGVtRmFsbGJhY2tGb250
Q2FjaGU6OnN5c3RlbUZhbGxiYWNrRm9udEZvckNoYXJhY3Rlcihjb25zdCBGb250KiBmb250LCBV
Q2hhcjMyIGNoYXJhY3RlciwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgSXNG
b3JQbGF0Zm9ybUZvbnQgaXNGb3JQbGF0Zm9ybUZvbnQpCit7CisgICAgYXV0byBmb250QWRkUmVz
dWx0ID0gbV9jaGFyYWN0ZXJGYWxsYmFja01hcHMuYWRkKGZvbnQsIENoYXJhY3RlckZhbGxiYWNr
TWFwKCkpOworCisgICAgaWYgKCFjaGFyYWN0ZXIpIHsKKyAgICAgICAgVUNoYXIgY29kZVVuaXQg
PSAwOworICAgICAgICByZXR1cm4gRm9udENhY2hlOjpmb3JDdXJyZW50VGhyZWFkKCkuc3lzdGVt
RmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGRlc2NyaXB0aW9uLCBmb250LCBpc0ZvclBsYXRmb3JtRm9u
dCwgRm9udENhY2hlOjpQcmVmZXJDb2xvcmVkRm9udDo6Tm8sICZjb2RlVW5pdCwgMSk7CisgICAg
fQorCisgICAgYXV0byBrZXkgPSBDaGFyYWN0ZXJGYWxsYmFja01hcEtleSB7IGRlc2NyaXB0aW9u
LmNvbXB1dGVkTG9jYWxlKCksIGNoYXJhY3RlciwgaXNGb3JQbGF0Zm9ybUZvbnQgIT0gSXNGb3JQ
bGF0Zm9ybUZvbnQ6Ok5vIH07CisgICAgcmV0dXJuIGZvbnRBZGRSZXN1bHQuaXRlcmF0b3ItPnZh
bHVlLmVuc3VyZShXVEZNb3ZlKGtleSksIFsmXSB7CisgICAgICAgIFVDaGFyIGNvZGVVbml0c1sy
XTsKKyAgICAgICAgdW5zaWduZWQgY29kZVVuaXRzTGVuZ3RoOworICAgICAgICBpZiAoVV9JU19C
TVAoY2hhcmFjdGVyKSkgeworICAgICAgICAgICAgY29kZVVuaXRzWzBdID0gRm9udENhc2NhZGU6
Om5vcm1hbGl6ZVNwYWNlcyhjaGFyYWN0ZXIpOworICAgICAgICAgICAgY29kZVVuaXRzTGVuZ3Ro
ID0gMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNvZGVVbml0c1swXSA9IFUxNl9M
RUFEKGNoYXJhY3Rlcik7CisgICAgICAgICAgICBjb2RlVW5pdHNbMV0gPSBVMTZfVFJBSUwoY2hh
cmFjdGVyKTsKKyAgICAgICAgICAgIGNvZGVVbml0c0xlbmd0aCA9IDI7CisgICAgICAgIH0KKyAg
ICAgICAgYXV0byBmYWxsYmFja0ZvbnQgPSBGb250Q2FjaGU6OmZvckN1cnJlbnRUaHJlYWQoKS5z
eXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoZGVzY3JpcHRpb24sIGZvbnQsIGlzRm9yUGxhdGZv
cm1Gb250LCBGb250Q2FjaGU6OlByZWZlckNvbG9yZWRGb250OjpObywgY29kZVVuaXRzLCBjb2Rl
VW5pdHNMZW5ndGgpLmdldCgpOworICAgICAgICBpZiAoZmFsbGJhY2tGb250KQorICAgICAgICAg
ICAgZmFsbGJhY2tGb250LT5zZXRJc1VzZWRJblN5c3RlbUZhbGxiYWNrRm9udENhY2hlKCk7Cisg
ICAgICAgIHJldHVybiBmYWxsYmFja0ZvbnQ7CisgICAgfSkuaXRlcmF0b3ItPnZhbHVlOworfQor
Cit2b2lkIFN5c3RlbUZhbGxiYWNrRm9udENhY2hlOjpyZW1vdmUoRm9udCogZm9udCkKK3sKKyAg
ICBtX2NoYXJhY3RlckZhbGxiYWNrTWFwcy5yZW1vdmUoZm9udCk7CisKKyAgICBpZiAoIWZvbnQt
PmlzVXNlZEluU3lzdGVtRmFsbGJhY2tGb250Q2FjaGUoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgZm9yIChhdXRvJiBjaGFyYWN0ZXJNYXAgOiBtX2NoYXJhY3RlckZhbGxiYWNrTWFwcy52YWx1
ZXMoKSkgeworICAgICAgICBWZWN0b3I8Q2hhcmFjdGVyRmFsbGJhY2tNYXBLZXksIDUxMj4gdG9S
ZW1vdmU7CisgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBjaGFyYWN0ZXJNYXApIHsKKyAgICAg
ICAgICAgIGlmIChlbnRyeS52YWx1ZSA9PSBmb250KQorICAgICAgICAgICAgICAgIHRvUmVtb3Zl
LmFwcGVuZChlbnRyeS5rZXkpOworICAgICAgICB9CisgICAgICAgIGZvciAoYXV0byYga2V5IDog
dG9SZW1vdmUpCisgICAgICAgICAgICBjaGFyYWN0ZXJNYXAucmVtb3ZlKGtleSk7CisgICAgfQor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9TeXN0ZW1GYWxsYmFja0ZvbnRDYWNoZS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3lzdGVtRmFsbGJhY2tGb250Q2FjaGUuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmE3ODQ0OWIxNTgzNQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N5c3RlbUZhbGxiYWNrRm9u
dENhY2hlLmgKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBB
bGV4ZXkgUHJvc2t1cnlha292CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBp
dHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5j
bHVkZSA8d3RmL0hhc2hUcmFpdHMuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaGVyLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvQXRvbVN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IEZvbnQ7CitjbGFzcyBGb250RGVzY3JpcHRpb247CitlbnVtIGNsYXNzIElzRm9yUGxhdGZvcm1G
b250IDogYm9vbDsKKyAgICAKK3N0cnVjdCBDaGFyYWN0ZXJGYWxsYmFja01hcEtleSB7CisgICAg
QXRvbVN0cmluZyBsb2NhbGU7CisgICAgVUNoYXIzMiBjaGFyYWN0ZXIgeyAwIH07CisgICAgYm9v
bCBpc0ZvclBsYXRmb3JtRm9udCB7IGZhbHNlIH07CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29u
c3QgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXkmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIGxvY2FsZSA9PSBvdGhlci5sb2NhbGUgJiYgY2hhcmFjdGVyID09IG90aGVyLmNoYXJh
Y3RlciAmJiBpc0ZvclBsYXRmb3JtRm9udCA9PSBvdGhlci5pc0ZvclBsYXRmb3JtRm9udDsKKyAg
ICB9Cit9OworCitpbmxpbmUgdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNvbnN0IENoYXJhY3Rl
ckZhbGxiYWNrTWFwS2V5JiBrZXkpCit7CisgICAgYWRkKGhhc2hlciwga2V5LmxvY2FsZSwga2V5
LmNoYXJhY3Rlciwga2V5LmlzRm9yUGxhdGZvcm1Gb250KTsKK30KKworc3RydWN0IENoYXJhY3Rl
ckZhbGxiYWNrTWFwS2V5SGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgQ2hh
cmFjdGVyRmFsbGJhY2tNYXBLZXkmIGtleSkgeyByZXR1cm4gY29tcHV0ZUhhc2goa2V5KTsgfQor
ICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IENoYXJhY3RlckZhbGxiYWNrTWFwS2V5JiBhLCBj
b25zdCBDaGFyYWN0ZXJGYWxsYmFja01hcEtleSYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAg
c3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwor
fTsKKworY2xhc3MgU3lzdGVtRmFsbGJhY2tGb250Q2FjaGUgeworICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKFN5c3RlbUZhbGxiYWNrRm9udENhY2hlKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKK3B1YmxpYzoKKyAgICBzdGF0aWMgU3lzdGVtRmFsbGJhY2tGb250Q2FjaGUmIGZvckN1
cnJlbnRUaHJlYWQoKTsKKworICAgIFN5c3RlbUZhbGxiYWNrRm9udENhY2hlKCkgPSBkZWZhdWx0
OworCisgICAgUmVmUHRyPEZvbnQ+IHN5c3RlbUZhbGxiYWNrRm9udEZvckNoYXJhY3Rlcihjb25z
dCBGb250KiwgVUNoYXIzMiBjaGFyYWN0ZXIsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIElzRm9y
UGxhdGZvcm1Gb250KTsKKyAgICB2b2lkIHJlbW92ZShGb250Kik7CisKK3ByaXZhdGU6CisgICAg
c3RydWN0IENoYXJhY3RlckZhbGxiYWNrTWFwS2V5SGFzaFRyYWl0cyA6IFNpbXBsZUNsYXNzSGFz
aFRyYWl0czxDaGFyYWN0ZXJGYWxsYmFja01hcEtleT4geworICAgICAgICBzdGF0aWMgdm9pZCBj
b25zdHJ1Y3REZWxldGVkVmFsdWUoQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXkmIHNsb3QpIHsgbmV3
IChOb3ROdWxsLCAmc2xvdCkgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXkgeyB7IH0sIFVfU0VOVElO
RUwsIHsgfSB9OyB9CisgICAgICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IENo
YXJhY3RlckZhbGxiYWNrTWFwS2V5JiBrZXkpIHsgcmV0dXJuIGtleS5jaGFyYWN0ZXIgPT0gVV9T
RU5USU5FTDsgfQorICAgIH07CisKKyAgICAvLyBGb250cyBhcmUgbm90IHJlZidkIHRvIGF2b2lk
IGN5Y2xlcy4KKyAgICAvLyBGSVhNRTogQ29uc2lkZXIgY2hhbmdpbmcgdGhlc2UgbWFwcyB0byB1
c2UgV2Vha1B0ciBpbnN0ZWFkIG9mIHJhdyBwb2ludGVycy4KKyAgICB1c2luZyBDaGFyYWN0ZXJG
YWxsYmFja01hcCA9IEhhc2hNYXA8Q2hhcmFjdGVyRmFsbGJhY2tNYXBLZXksIEZvbnQqLCBDaGFy
YWN0ZXJGYWxsYmFja01hcEtleUhhc2gsIENoYXJhY3RlckZhbGxiYWNrTWFwS2V5SGFzaFRyYWl0
cz47CisKKyAgICBIYXNoTWFwPGNvbnN0IEZvbnQqLCBDaGFyYWN0ZXJGYWxsYmFja01hcD4gbV9j
aGFyYWN0ZXJGYWxsYmFja01hcHM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250Q2Fj
aGVGcmVlVHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlw
ZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHAKaW5kZXggNzhmMGRiNWEwZmQ0Li4yNDJkOGQ5ZDBkMTMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0Zv
bnRDYWNoZUZyZWVUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHAKQEAgLTIzNiwxNiArMjM2LDE3IEBAIHN0
cnVjdCBGYWxsYmFja0ZvbnREZXNjcmlwdGlvbktleUhhc2ggewogICAgIHN0YXRpYyBjb25zdCBi
b29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKIH07CiAKLXVzaW5nIFN5
c3RlbUZhbGxiYWNrQ2FjaGUgPSBIYXNoTWFwPEZhbGxiYWNrRm9udERlc2NyaXB0aW9uS2V5LCBz
dGQ6OnVuaXF1ZV9wdHI8Q2FjaGVkRm9udFNldD4sIEZhbGxiYWNrRm9udERlc2NyaXB0aW9uS2V5
SGFzaCwgU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEZhbGxiYWNrRm9udERlc2NyaXB0aW9uS2V5Pj47
Ci1zdGF0aWMgU3lzdGVtRmFsbGJhY2tDYWNoZSYgc3lzdGVtRmFsbGJhY2tDYWNoZSgpCit1c2lu
ZyBTeXN0ZW1GYWxsYmFja0ZvbnRTZXRDYWNoZSA9IEhhc2hNYXA8RmFsbGJhY2tGb250RGVzY3Jp
cHRpb25LZXksIHN0ZDo6dW5pcXVlX3B0cjxDYWNoZWRGb250U2V0PiwgRmFsbGJhY2tGb250RGVz
Y3JpcHRpb25LZXlIYXNoLCBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8RmFsbGJhY2tGb250RGVzY3Jp
cHRpb25LZXk+PjsKK3N0YXRpYyBTeXN0ZW1GYWxsYmFja0ZvbnRTZXRDYWNoZSYgc3lzdGVtRmFs
bGJhY2tGb250U2V0Q2FjaGUoKQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTeXN0ZW1G
YWxsYmFja0NhY2hlPiBjYWNoZTsKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgbW92ZWQg
dG8gRm9udENhY2hlIHNpbmNlIGl0IGNhbiBiZSBhY2Nlc3NlZCBmcm9tIHdvcmtlciB0aHJlYWRz
LgorICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTeXN0ZW1GYWxsYmFja0ZvbnRTZXRDYWNoZT4g
Y2FjaGU7CiAgICAgcmV0dXJuIGNhY2hlLmdldCgpOwogfQogCiBSZWZQdHI8Rm9udD4gRm9udENh
Y2hlOjpzeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9uJiBk
ZXNjcmlwdGlvbiwgY29uc3QgRm9udCosIElzRm9yUGxhdGZvcm1Gb250LCBQcmVmZXJDb2xvcmVk
Rm9udCBwcmVmZXJDb2xvcmVkRm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVk
IGxlbmd0aCkKIHsKLSAgICBhdXRvIGFkZFJlc3VsdCA9IHN5c3RlbUZhbGxiYWNrQ2FjaGUoKS5l
bnN1cmUoRmFsbGJhY2tGb250RGVzY3JpcHRpb25LZXkoZGVzY3JpcHRpb24sIHByZWZlckNvbG9y
ZWRGb250KSwgWyZkZXNjcmlwdGlvbiwgcHJlZmVyQ29sb3JlZEZvbnRdKCkgLT4gc3RkOjp1bmlx
dWVfcHRyPENhY2hlZEZvbnRTZXQ+IHsKKyAgICBhdXRvIGFkZFJlc3VsdCA9IHN5c3RlbUZhbGxi
YWNrRm9udFNldENhY2hlKCkuZW5zdXJlKEZhbGxiYWNrRm9udERlc2NyaXB0aW9uS2V5KGRlc2Ny
aXB0aW9uLCBwcmVmZXJDb2xvcmVkRm9udCksIFsmZGVzY3JpcHRpb24sIHByZWZlckNvbG9yZWRG
b250XSgpIC0+IHN0ZDo6dW5pcXVlX3B0cjxDYWNoZWRGb250U2V0PiB7CiAgICAgICAgIFJlZlB0
cjxGY1BhdHRlcm4+IHBhdHRlcm4gPSBhZG9wdFJlZihGY1BhdHRlcm5DcmVhdGUoKSk7CiAgICAg
ICAgIEZjUGF0dGVybkFkZEJvb2wocGF0dGVybi5nZXQoKSwgRkNfU0NBTEFCTEUsIEZjVHJ1ZSk7
CiAjaWZkZWYgRkNfQ09MT1IKQEAgLTI4MSw3ICsyODIsNyBAQCBSZWZQdHI8Rm9udD4gRm9udENh
Y2hlOjpzeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9uJiBk
ZXNjcgogCiB2b2lkIEZvbnRDYWNoZTo6cGxhdGZvcm1QdXJnZUluYWN0aXZlRm9udERhdGEoKQog
ewotICAgIHN5c3RlbUZhbGxiYWNrQ2FjaGUoKS5jbGVhcigpOworICAgIHN5c3RlbUZhbGxiYWNr
Rm9udFNldENhY2hlKCkuY2xlYXIoKTsKIH0KIAogc3RhdGljIFZlY3RvcjxTdHJpbmc+IHBhdHRl
cm5Ub0ZhbWlsaWVzKEZjUGF0dGVybiYgcGF0dGVybikKLS0gCjIuMzIuMCAoQXBwbGUgR2l0LTEz
MikKCg==
</data>
<flag name="commit-queue"
          id="488867"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>460997</attachid>
            <date>2022-07-18 23:33:06 -0700</date>
            <delta_ts>2022-07-18 23:35:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233972-20220719183304.patch</filename>
            <type>text/plain</type>
            <size>26618</size>
            <attacher name="Matt Woodrow">mattwoodrow</attacher>
            
              <data encoding="base64">RnJvbSAyZTRjOGY5NjBhZGEzMGZkNTNlNDY3ZWQwZDVmOWUzMzc4Mjk4YTg4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBDYW1lcm9uIE1jQ29ybWFjayA8aGV5Y2FtQGFwcGxlLmNvbT4K
RGF0ZTogRnJpLCAzIERlYyAyMDIxIDA5OjU5OjUwICsxMTAwClN1YmplY3Q6IFtQQVRDSF0gTW92
ZSB0aGUgU3lzdGVtRmFsbGJhY2tDYWNoZSB0byBGb250Q2FjaGUKIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzM5NzIKClJldmlld2VkIGJ5IE15bGVzIE1heGZpZWxk
LgoKV2l0aCBPZmZzY3JlZW5DYW52YXMsIHRoZSBTeXN0ZW1GYWxsYmFja0NhY2hlIGNhbiBiZSB0
b3VjaGVkIGZyb20Kd29ya2VyIHRocmVhZHMuIFRoaXMgY2FjaGUgY29udGFpbnMgQXRvbVN0cmlu
Z3MsIHdoaWNoIGFyZSB0aHJlYWQKc3BlY2lmaWMuCgpNb3ZlIHRoZSBTeXN0ZW1GYWxsYmFja0Nh
Y2hlIGNvZGUgZnJvbSBpbnNpZGUgRm9udENhY2hlLmNwcCB0byBzZXBhcmF0ZQpmaWxlcyAoYW5k
IHJlbmFtZSBpdCB0byBTeXN0ZW1GYWxsYmFja0ZvbnRDYWNoZSksIHRvIGF2b2lkIEZvbnRDYWNo
ZS5oCmZyb20gZ2V0dGluZyB0b28gbm9pc3kuIEFsc28gdGFrZSB0aGUgb3Bwb3J0dW5pdHkgdG8g
d3JhcCBpdCBpbiBhIGNsYXNzCnRvIGdpdmUgaXQgbWVhbmluZ2Z1bCBtZXRob2RzLgoKKiBwbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaDoKKFdlYkNvcmU6OkZvbnRDYWNoZTo6c3lzdGVtRm9u
dEZhbGxiYWNrQ2FjaGUpOgoqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwOgoqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYWNoZS5oOgooV2ViQ29yZTo6Rm9udENhY2hlOjpzeXN0ZW1Gb250RmFs
bGJhY2tDYWNoZSk6CiogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHA6CihXZWJDb3JlOjpzeXN0
ZW1GYWxsYmFja0NhY2hlKToKKiBwbGF0Zm9ybS9ncmFwaGljcy9TeXN0ZW1GYWxsYmFja0ZvbnRD
YWNoZS5jcHA6CihXZWJDb3JlOjpTeXN0ZW1GYWxsYmFja0ZvbnRDYWNoZTo6Zm9yQ3VycmVudFRo
cmVhZCk6Ck1vdmUgU3lzdGVtRmFsbGJhY2tDYWNoZSBmcm9tIGEgc2luZ2xldG9uIHRvIEZvbnRD
YWNoZS4KCiogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oOgooV2ViQ29yZTo6Rm9udDo6c2V0SXNV
c2VkSW5TeXN0ZW1GYWxsYmFja0ZvbnRDYWNoZSk6CihXZWJDb3JlOjpGb250Ojppc1VzZWRJblN5
c3RlbUZhbGxiYWNrRm9udENhY2hlIGNvbnN0KToKTmV3IGZ1bmN0aW9ucyB0byBub3RlIGEgRm9u
dCBpcyBpbiBhIFN5c3RlbUZhbGxiYWNrRm9udENhY2hlLCBzaW5jZSB0aGUKbWV0aG9kIHRoYXQg
YWRkcyBpdCB0byBhbmQgY2hlY2tzIGl0cyBwcmVzZW5jZSBpbiB0aGUgY2FjaGUgaXMgbm8gbG9u
Z2VyCmluIEZvbnQuCgoqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwOgooV2ViQ29yZTo6Rm9u
dDo6fkZvbnQpOgpDYWxsIGEgbmV3IFN5c3RlbUZhbGxiYWNrRm9udENhY2hlOjpmb3JDdXJyZW50
VGhyZWFkIGZ1bmN0aW9uLgoKKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcDoKKFdlYkNvcmU6
OkZvbnQ6OnN5c3RlbUZhbGxiYWNrRm9udEZvckNoYXJhY3RlciBjb25zdCk6CihXZWJDb3JlOjpG
b250OjpyZW1vdmVGcm9tU3lzdGVtRmFsbGJhY2tDYWNoZSk6CiogcGxhdGZvcm0vZ3JhcGhpY3Mv
U3lzdGVtRmFsbGJhY2tGb250Q2FjaGUuY3BwOiBBZGRlZC4KKFdlYkNvcmU6OlN5c3RlbUZhbGxi
YWNrRm9udENhY2hlOjpzeXN0ZW1GYWxsYmFja0ZvbnRGb3JDaGFyYWN0ZXIpOgooV2ViQ29yZTo6
U3lzdGVtRmFsbGJhY2tGb250Q2FjaGU6OnJlbW92ZSk6Ck1vdmUgbG9va3VwIGFuZCByZW1vdmFs
IG1ldGhvZHMgZnJvbSBGb250IHRvIFN5c3RlbUZhbGxiYWNrRm9udENhY2hlLgoKKiBIZWFkZXJz
LmNtYWtlOgoqIFNvdXJjZXMudHh0OgoqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcDoKKCk6IERlbGV0ZWQuCihXZWJDb3JlOjpv
cGVyYXRvcj09KTogRGVsZXRlZC4KKFdlYkNvcmU6OkNoYXJhY3RlckZhbGxiYWNrTWFwS2V5SGFz
aDo6aGFzaCk6IERlbGV0ZWQuCihXZWJDb3JlOjpDaGFyYWN0ZXJGYWxsYmFja01hcEtleUhhc2g6
OmVxdWFsKTogRGVsZXRlZC4KKFdlYkNvcmU6OkNoYXJhY3RlckZhbGxiYWNrTWFwS2V5SGFzaFRy
YWl0czo6Y29uc3RydWN0RGVsZXRlZFZhbHVlKTogRGVsZXRlZC4KKFdlYkNvcmU6OkNoYXJhY3Rl
ckZhbGxiYWNrTWFwS2V5SGFzaFRyYWl0czo6aXNEZWxldGVkVmFsdWUpOiBEZWxldGVkLgoqIHBs
YXRmb3JtL2dyYXBoaWNzL1N5c3RlbUZhbGxiYWNrRm9udENhY2hlLmg6IEFkZGVkLgooV2ViQ29y
ZTo6U3lzdGVtRmFsbGJhY2tGb250Q2FjaGU6OkNoYXJhY3RlckZhbGxiYWNrTWFwS2V5OjpvcGVy
YXRvcj09IGNvbnN0KToKKFdlYkNvcmU6OlN5c3RlbUZhbGxiYWNrRm9udENhY2hlOjpDaGFyYWN0
ZXJGYWxsYmFja01hcEtleUhhc2g6Omhhc2gpOgooV2ViQ29yZTo6U3lzdGVtRmFsbGJhY2tGb250
Q2FjaGU6OkNoYXJhY3RlckZhbGxiYWNrTWFwS2V5SGFzaDo6ZXF1YWwpOgooV2ViQ29yZTo6U3lz
dGVtRmFsbGJhY2tGb250Q2FjaGU6OkNoYXJhY3RlckZhbGxiYWNrTWFwS2V5SGFzaFRyYWl0czo6
Y29uc3RydWN0RGVsZXRlZFZhbHVlKToKKFdlYkNvcmU6OlN5c3RlbUZhbGxiYWNrRm9udENhY2hl
OjpDaGFyYWN0ZXJGYWxsYmFja01hcEtleUhhc2hUcmFpdHM6OmlzRGVsZXRlZFZhbHVlKToKTW92
ZSBleGlzdGluZyBTeXN0ZW1GYWxsYmFja0ZvbnRDYWNoZSBjb2RlIGZyb20gRm9udC5jcHAgdG8g
YSBuZXcgZmlsZSBhbmQKd3JhcCBpdCBpbiBhIGNsYXNzLgoKKiBwbGF0Zm9ybS9ncmFwaGljcy9m
cmVldHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHA6CihXZWJDb3JlOjpzeXN0ZW1GYWxsYmFja0Zv
bnRTZXRDYWNoZSk6CihXZWJDb3JlOjpGb250Q2FjaGU6OnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFj
dGVycyk6CihXZWJDb3JlOjpGb250Q2FjaGU6OnBsYXRmb3JtUHVyZ2VJbmFjdGl2ZUZvbnREYXRh
KToKKFdlYkNvcmU6OnN5c3RlbUZhbGxiYWNrQ2FjaGUpOgpSZW5hbWUgdGhlIFN5c3RlbUZhbGxi
YWNrQ2FjaGUgaW4gRm9udENhY2hlRnJlZVR5cGUuY3BwLCB3aGljaCBpcyB1c2VkCmZvciBhIGRp
ZmZlcmVudCBwdXJwb3NlIGZyb20gdGhlIG9uZSB0aGF0IGxpdmVkIGluIEZvbnQuY3BwLgotLS0K
IFNvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgICAgICAgICAgICAgICAgICB8ICAxICsKIFNv
dXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0ICAgICAgICAgICAgICAgICAgICB8ICAxICsKIC4uLi9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiB8ICA2ICsrCiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcCAgICAgfCA4NiArLS0tLS0tLS0tLS0t
LS0tLS0KIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaCAgICAgICB8ICA3
ICstCiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaCAgfCAgNCAr
CiAuLi4vZ3JhcGhpY3MvU3lzdGVtRmFsbGJhY2tGb250Q2FjaGUuY3BwICAgICAgfCA4OSArKysr
KysrKysrKysrKysrKysrCiAuLi4vZ3JhcGhpY3MvU3lzdGVtRmFsbGJhY2tGb250Q2FjaGUuaCAg
ICAgICAgfCA4OSArKysrKysrKysrKysrKysrKysrCiAuLi4vZ3JhcGhpY3MvZnJlZXR5cGUvRm9u
dENhY2hlRnJlZVR5cGUuY3BwICAgfCAxMSArLS0KIDkgZmlsZXMgY2hhbmdlZCwgMjAzIGluc2Vy
dGlvbnMoKyksIDkxIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N5c3RlbUZhbGxiYWNrRm9udENhY2hlLmNwcAogY3JlYXRl
IG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N5c3RlbUZhbGxi
YWNrRm9udENhY2hlLmgKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtl
IGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCA4Njg5NWQ1NjFkN2UuLjZmZWQ1
NzkzN2M2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQorKysgYi9T
b3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCkBAIC0xNjEzLDYgKzE2MTMsNyBAQCBzZXQoV2Vi
Q29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvU291
cmNlQnVmZmVyUHJpdmF0ZUNsaWVudC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlSW1h
Z2UuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1N0cmluZ1RydW5jYXRvci5oCisgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvU3lzdGVtRmFsbGJhY2tGb250Q2FjaGUuaAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL1N5c3RlbUltYWdlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9UYWJTaXplLmgKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVuLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggYzYyZmU4ODExMTI2
Li5lNWMwNjhjNmM5NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0Cisr
KyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0yMTIxLDYgKzIxMjEsNyBAQCBwbGF0
Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3Mv
U291cmNlSW1hZ2UuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9TdHJpbmdUcnVuY2F0b3IuY3BwCiBw
bGF0Zm9ybS9ncmFwaGljcy9TeXN0ZW1Gb250RGF0YWJhc2UuY3BwCitwbGF0Zm9ybS9ncmFwaGlj
cy9TeXN0ZW1GYWxsYmFja0ZvbnRDYWNoZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4u
Y3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9UZXh0VHJhY2tSZXByZXNlbnRhdGlvbi5jcHAKIHBsYXRm
b3JtL2dyYXBoaWNzL1RyYWNrQnVmZmVyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDhlMDNkNmJlMDcwNS4uYjc3MmJhMmFk
ZTQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCkBAIC0xMDIyLDYgKzEwMjIsNyBAQAogCQkzMkE3MEQ1MzI4MzYxMzRCMDA4MDA2MEMg
LyogRGVjb21wb3NlZEdseXBocy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMzJBNzBENTIyODM2MTM0QTAwODAwNjBDIC8qIERlY29tcG9zZWRHbHlwaHMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkzMkE3
MEQ1ODI4MzYxMzhFMDA4MDA2MEMgLyogUG9zaXRpb25lZEdseXBocy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzJBNzBENTYyODM2MTM4RDAwODAwNjBD
IC8qIFBvc2l0aW9uZWRHbHlwaHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkzMzQ0MDhDNDMzRjhDQTRDMTAwNDQyMzQgLyogU1ZHTGF5ZXJUcmFu
c2Zvcm1VcGRhdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzMzQ0MDc3NDEyRDlCQzRBMDAwNDQyMzQgLyogU1ZHTGF5ZXJUcmFuc2Zvcm1VcGRhdGVy
LmggKi87IH07CisJCTMyMTEyRTBGMjc0QjQ3Q0YwMDcwNDdBOCAvKiBTeXN0ZW1GYWxsYmFja0Zv
bnRDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MzI4OTlGQjkyNzRCNDEwQzAwODU1QTlEIC8qIFN5c3RlbUZhbGxiYWNrRm9udENhY2hlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMzM1MDNDOUEx
MDE3OUE3NDAwM0I0N0UxIC8qIE5vdGlmaWNhdGlvbkNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzM1MDNDOTkxMDE3OUE3NDAwM0I0N0UxIC8q
IE5vdGlmaWNhdGlvbkNsaWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTMzNTAzQ0E0MTAxNzlBRDcwMDNCNDdFMSAvKiBKU05vdGlmaWNhdGlv
bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzM1MDND
QTAxMDE3OUFENzAwM0I0N0UxIC8qIEpTTm90aWZpY2F0aW9uLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMzNEMDIxMkQxMzFEQjM3QjAwNDA5MUE4
IC8qIENvb2tpZVN0b3JhZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEUxM0YwMUVBMTI3MEUxMEQwMERGQkE3MSAvKiBDb29raWVTdG9yYWdlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTg1NzAsNiAr
ODU3MSw4IEBACiAJCTMyQjE3NjE0Mjg1RkREQTEwMEVENkRCOCAvKiBHcmFkaWVudENvbG9yU3Rv
cC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFkaWVudENvbG9yU3RvcC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMyQjE3NjE1Mjg1RkREQTEwMEVENkRCOCAvKiBHcmFkaWVu
dENvbG9yU3RvcHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR3JhZGllbnRDb2xvclN0b3BzLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzJFMjY4RkMyODVGQzhGNzAwNDY2MEJC
IC8qIENvbG9ySW50ZXJwb2xhdGlvbk1ldGhvZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBDb2xvckludGVycG9sYXRpb25NZXRob2QuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkzMjg5OUZCNzI3NEI0MTBDMDA4NTVBOUQgLyogU3lzdGVtRmFsbGJh
Y2tGb250Q2FjaGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3lzdGVtRmFsbGJhY2tGb250Q2Fj
aGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMjg5OUZCOTI3NEI0MTBDMDA4
NTVBOUQgLyogU3lzdGVtRmFsbGJhY2tGb250Q2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3lzdGVt
RmFsbGJhY2tGb250Q2FjaGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzMxRkY2
N0RFMTk3QjU3MzkzQzQ2QTdGIC8qIFJlbmRlck1hdGhNTFBhZGRlZC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJNYXRoTUxQYWRkZWQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMzMxRkY2N0RFMTk3QjU3MzkzQzQ2QUE3IC8qIFJlbmRlck1hdGhNTFNw
YWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlck1hdGhNTFNwYWNl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMzM0Y3MDRFMEZCNDlDQTIwMDhFMTJB
NiAvKiBOb3RpZmljYXRpb24uaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IE5vdGlmaWNhdGlv
bi5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yOTU5Myw2ICsyOTU5Niw4IEBA
CiAJCQkJMDg3NTU4QzQxM0I0QTU3RDAwRjQ5MzA3IC8qIFN1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJ
dGVyYXRvci5oICovLAogCQkJCTFDNEM3N0RFMjg0REE4MzkwMEJEMDkzNiAvKiBTeXN0ZW1Gb250
RGF0YWJhc2UuY3BwICovLAogCQkJCTFDNEM3N0RGMjg0REE4MzkwMEJEMDkzNiAvKiBTeXN0ZW1G
b250RGF0YWJhc2UuaCAqLywKKwkJCQkzMjg5OUZCNzI3NEI0MTBDMDA4NTVBOUQgLyogU3lzdGVt
RmFsbGJhY2tGb250Q2FjaGUuY3BwICovLAorCQkJCTMyODk5RkI5Mjc0QjQxMEMwMDg1NUE5RCAv
KiBTeXN0ZW1GYWxsYmFja0ZvbnRDYWNoZS5oICovLAogCQkJCTk1RTlGNDQ0MjdDOUEzOUIwMDk0
NTMzNyAvKiBTeXN0ZW1JbWFnZS5oICovLAogCQkJCTNCQjZCODBGMjJBN0QzMTEwMDNBMkE2OSAv
KiBUYWJTaXplLmggKi8sCiAJCQkJNzIyQUYyRTMyN0UxQ0YxMTAwNzhEOTk3IC8qIFRleHRCb3hJ
dGVyYXRvci5oICovLApAQCAtMzgyNTksNiArMzgyNjQsNyBAQAogCQkJCUUxODA4MTE3MTZGQ0Y5
Q0IwMEI4MEQwNyAvKiBTeW5jaHJvbm91c0xvYWRlckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQzE2OTJERDUyM0QyM0UwODAwNkU4OEY3IC8qIFN5c3RlbUJhdHRlcnkuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTFDRkQ1RDdFMjg0REJFN0YwMDA4OTY2NyAvKiBTeXN0ZW1Gb250RGF0YWJhc2Uu
aCBpbiBIZWFkZXJzICovLAorCQkJCTMyMTEyRTBGMjc0QjQ3Q0YwMDcwNDdBOCAvKiBTeXN0ZW1G
YWxsYmFja0ZvbnRDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTRFOEI0RUMyMTZCNzlFNTAw
Qjg4MzREIC8qIFN5c3RlbUZvbnREYXRhYmFzZUNvcmVUZXh0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5NUU5RjQ0NjI3QzlBMzlDMDA5NDUzMzcgLyogU3lzdGVtSW1hZ2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMDNDMDc0MTg4NDY5NUUwMEE1RjhDQSAvKiBTeXN0ZW1NZW1vcnkuaCBpbiBIZWFk
ZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAppbmRleCAx
NWY4ZDY1NTA4ZDUuLmM4NjdlMzRmNzliMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udC5jcHAKQEAgLTg1LDcgKzg1LDcgQEAgRm9udDo6Rm9udChjb25zdCBGb250UGxh
dGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEsIE9yaWdpbiBvcmlnaW4sIEludGVyc3RpdGlhbCBpbnQK
ICAgICAsIG1faXNUZXh0T3JpZW50YXRpb25GYWxsYmFjayhvcmllbnRhdGlvbkZhbGxiYWNrID09
IE9yaWVudGF0aW9uRmFsbGJhY2s6OlllcykKICAgICAsIG1faXNCcm9rZW5JZGVvZ3JhcGhGYWxs
YmFjayhmYWxzZSkKICAgICAsIG1faGFzVmVydGljYWxHbHlwaHMoZmFsc2UpCi0gICAgLCBtX2lz
VXNlZEluU3lzdGVtRmFsbGJhY2tDYWNoZShmYWxzZSkKKyAgICAsIG1faXNVc2VkSW5TeXN0ZW1G
YWxsYmFja0ZvbnRDYWNoZShmYWxzZSkKICAgICAsIG1fYWxsb3dzQW50aWFsaWFzaW5nKHRydWUp
CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICAsIG1fc2hvdWxkTm90QmVVc2VkRm9yQXJh
YmljKGZhbHNlKQpAQCAtMTc1LDcgKzE3NSw3IEBAIHZvaWQgRm9udDo6cGxhdGZvcm1HbHlwaElu
aXQoKQogCiBGb250Ojp+Rm9udCgpCiB7Ci0gICAgcmVtb3ZlRnJvbVN5c3RlbUZhbGxiYWNrQ2Fj
aGUoKTsKKyAgICBTeXN0ZW1GYWxsYmFja0ZvbnRDYWNoZTo6Zm9yQ3VycmVudFRocmVhZCgpLnJl
bW92ZSh0aGlzKTsKIH0KIAogUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIEZvbnQ6OnJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllcigpIGNvbnN0CkBAIC01NTQsODkgKzU1NCw5IEBAIEdseXBo
QnVmZmVyQWR2YW5jZSBGb250OjphcHBseVRyYW5zZm9ybXMoR2x5cGhCdWZmZXImLCB1bnNpZ25l
ZCwgdW5zaWduZWQsIGJvb2wsCiB9CiAjZW5kaWYKIAotc3RydWN0IENoYXJhY3RlckZhbGxiYWNr
TWFwS2V5IHsKLSAgICBBdG9tU3RyaW5nIGxvY2FsZTsKLSAgICBVQ2hhcjMyIGNoYXJhY3RlciB7
IDAgfTsKLSAgICBib29sIGlzRm9yUGxhdGZvcm1Gb250IHsgZmFsc2UgfTsKLX07Ci0KLWlubGlu
ZSB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgY29uc3QgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXkm
IGtleSkKLXsKLSAgICBhZGQoaGFzaGVyLCBrZXkubG9jYWxlLCBrZXkuY2hhcmFjdGVyLCBrZXku
aXNGb3JQbGF0Zm9ybUZvbnQpOwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENo
YXJhY3RlckZhbGxiYWNrTWFwS2V5JiBhLCBjb25zdCBDaGFyYWN0ZXJGYWxsYmFja01hcEtleSYg
YikKLXsKLSAgICByZXR1cm4gYS5sb2NhbGUgPT0gYi5sb2NhbGUgJiYgYS5jaGFyYWN0ZXIgPT0g
Yi5jaGFyYWN0ZXIgJiYgYS5pc0ZvclBsYXRmb3JtRm9udCA9PSBiLmlzRm9yUGxhdGZvcm1Gb250
OwotfQotCi1zdHJ1Y3QgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXlIYXNoIHsKLSAgICBzdGF0aWMg
dW5zaWduZWQgaGFzaChjb25zdCBDaGFyYWN0ZXJGYWxsYmFja01hcEtleSYga2V5KSB7IHJldHVy
biBjb21wdXRlSGFzaChrZXkpOyB9Ci0gICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgQ2hhcmFj
dGVyRmFsbGJhY2tNYXBLZXkmIGEsIGNvbnN0IENoYXJhY3RlckZhbGxiYWNrTWFwS2V5JiBiKSB7
IHJldHVybiBhID09IGI7IH0KLSAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9F
bXB0eU9yRGVsZXRlZCA9IHRydWU7Ci19OwotCi1zdHJ1Y3QgQ2hhcmFjdGVyRmFsbGJhY2tNYXBL
ZXlIYXNoVHJhaXRzIDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPENoYXJhY3RlckZhbGxiYWNrTWFw
S2V5PiB7Ci0gICAgc3RhdGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKENoYXJhY3RlckZh
bGxiYWNrTWFwS2V5JiBzbG90KSB7IG5ldyAoTm90TnVsbCwgJnNsb3QpIENoYXJhY3RlckZhbGxi
YWNrTWFwS2V5IHsgeyB9LCBVX1NFTlRJTkVMLCB7IH0gfTsgfQotICAgIHN0YXRpYyBib29sIGlz
RGVsZXRlZFZhbHVlKGNvbnN0IENoYXJhY3RlckZhbGxiYWNrTWFwS2V5JiBrZXkpIHsgcmV0dXJu
IGtleS5jaGFyYWN0ZXIgPT0gVV9TRU5USU5FTDsgfQotfTsKLQotLy8gRm9udHMgYXJlIG5vdCBy
ZWYnZCB0byBhdm9pZCBjeWNsZXMuCi0vLyBGSVhNRTogQ29uc2lkZXIgY2hhbmdpbmcgdGhlc2Ug
bWFwcyB0byB1c2UgV2Vha1B0ciBpbnN0ZWFkIG9mIHJhdyBwb2ludGVycy4KLXVzaW5nIENoYXJh
Y3RlckZhbGxiYWNrTWFwID0gSGFzaE1hcDxDaGFyYWN0ZXJGYWxsYmFja01hcEtleSwgRm9udCos
IENoYXJhY3RlckZhbGxiYWNrTWFwS2V5SGFzaCwgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXlIYXNo
VHJhaXRzPjsKLXVzaW5nIFN5c3RlbUZhbGxiYWNrQ2FjaGUgPSBIYXNoTWFwPGNvbnN0IEZvbnQq
LCBDaGFyYWN0ZXJGYWxsYmFja01hcD47Ci0KLXN0YXRpYyBTeXN0ZW1GYWxsYmFja0NhY2hlJiBz
eXN0ZW1GYWxsYmFja0NhY2hlKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3lzdGVt
RmFsbGJhY2tDYWNoZT4gbWFwOwotICAgIHJldHVybiBtYXAuZ2V0KCk7Ci19Ci0KIFJlZlB0cjxG
b250PiBGb250OjpzeXN0ZW1GYWxsYmFja0ZvbnRGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjaGFyYWN0
ZXIsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIElzRm9yUGxhdGZvcm1Gb250
IGlzRm9yUGxhdGZvcm1Gb250KSBjb25zdAogewotICAgIC8vIEZJWE1FOiBodHRwczovL2dpdGh1
Yi5jb20vdzNjL2Nzc3dnLWRyYWZ0cy9pc3N1ZXMvNzQ0OSBUaGlzIGZ1bmN0aW9uIHNob3VsZCBu
ZXZlciByZXR1cm4gYSB3ZWIgZm9udC4KLSAgICBhdXRvIGZvbnRBZGRSZXN1bHQgPSBzeXN0ZW1G
YWxsYmFja0NhY2hlKCkuYWRkKHRoaXMsIENoYXJhY3RlckZhbGxiYWNrTWFwKCkpOwotCi0gICAg
aWYgKCFjaGFyYWN0ZXIpIHsKLSAgICAgICAgVUNoYXIgY29kZVVuaXQgPSAwOwotICAgICAgICBy
ZXR1cm4gRm9udENhY2hlOjpmb3JDdXJyZW50VGhyZWFkKCkuc3lzdGVtRmFsbGJhY2tGb3JDaGFy
YWN0ZXJzKGRlc2NyaXB0aW9uLCAqdGhpcywgaXNGb3JQbGF0Zm9ybUZvbnQsIEZvbnRDYWNoZTo6
UHJlZmVyQ29sb3JlZEZvbnQ6Ok5vLCAmY29kZVVuaXQsIDEpOwotICAgIH0KLQotICAgIGF1dG8g
a2V5ID0gQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXkgeyBkZXNjcmlwdGlvbi5jb21wdXRlZExvY2Fs
ZSgpLCBjaGFyYWN0ZXIsIGlzRm9yUGxhdGZvcm1Gb250ICE9IElzRm9yUGxhdGZvcm1Gb250OjpO
byB9OwotICAgIHJldHVybiBmb250QWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5lbnN1cmUoV1RG
TW92ZShrZXkpLCBbJl0gewotICAgICAgICBVQ2hhciBjb2RlVW5pdHNbMl07Ci0gICAgICAgIHVu
c2lnbmVkIGNvZGVVbml0c0xlbmd0aDsKLSAgICAgICAgaWYgKFVfSVNfQk1QKGNoYXJhY3Rlcikp
IHsKLSAgICAgICAgICAgIGNvZGVVbml0c1swXSA9IEZvbnRDYXNjYWRlOjpub3JtYWxpemVTcGFj
ZXMoY2hhcmFjdGVyKTsKLSAgICAgICAgICAgIGNvZGVVbml0c0xlbmd0aCA9IDE7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBjb2RlVW5pdHNbMF0gPSBVMTZfTEVBRChjaGFyYWN0ZXIp
OwotICAgICAgICAgICAgY29kZVVuaXRzWzFdID0gVTE2X1RSQUlMKGNoYXJhY3Rlcik7Ci0gICAg
ICAgICAgICBjb2RlVW5pdHNMZW5ndGggPSAyOwotICAgICAgICB9Ci0gICAgICAgIGF1dG8gZm9u
dCA9IEZvbnRDYWNoZTo6Zm9yQ3VycmVudFRocmVhZCgpLnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFj
dGVycyhkZXNjcmlwdGlvbiwgKnRoaXMsIGlzRm9yUGxhdGZvcm1Gb250LCBGb250Q2FjaGU6OlBy
ZWZlckNvbG9yZWRGb250OjpObywgY29kZVVuaXRzLCBjb2RlVW5pdHNMZW5ndGgpLmdldCgpOwot
ICAgICAgICBpZiAoZm9udCkKLSAgICAgICAgICAgIGZvbnQtPm1faXNVc2VkSW5TeXN0ZW1GYWxs
YmFja0NhY2hlID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIGZvbnQ7Ci0gICAgfSkuaXRlcmF0b3It
PnZhbHVlOwotfQotCi12b2lkIEZvbnQ6OnJlbW92ZUZyb21TeXN0ZW1GYWxsYmFja0NhY2hlKCkK
LXsKLSAgICBzeXN0ZW1GYWxsYmFja0NhY2hlKCkucmVtb3ZlKHRoaXMpOwotCi0gICAgaWYgKCFt
X2lzVXNlZEluU3lzdGVtRmFsbGJhY2tDYWNoZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9y
IChhdXRvJiBjaGFyYWN0ZXJNYXAgOiBzeXN0ZW1GYWxsYmFja0NhY2hlKCkudmFsdWVzKCkpIHsK
LSAgICAgICAgVmVjdG9yPENoYXJhY3RlckZhbGxiYWNrTWFwS2V5LCA1MTI+IHRvUmVtb3ZlOwot
ICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogY2hhcmFjdGVyTWFwKSB7Ci0gICAgICAgICAgICBp
ZiAoZW50cnkudmFsdWUgPT0gdGhpcykKLSAgICAgICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQo
ZW50cnkua2V5KTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKGF1dG8mIGtleSA6IHRvUmVtb3Zl
KQotICAgICAgICAgICAgY2hhcmFjdGVyTWFwLnJlbW92ZShrZXkpOwotICAgIH0KKyAgICByZXR1
cm4gU3lzdGVtRmFsbGJhY2tGb250Q2FjaGU6OmZvckN1cnJlbnRUaHJlYWQoKS5zeXN0ZW1GYWxs
YmFja0ZvbnRGb3JDaGFyYWN0ZXIodGhpcywgY2hhcmFjdGVyLCBkZXNjcmlwdGlvbiwgaXNGb3JQ
bGF0Zm9ybUZvbnQpOwogfQogCiAjaWYgIVBMQVRGT1JNKENPQ09BKSAmJiAhVVNFKEZSRUVUWVBF
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCmluZGV4IGI1MDQxNDU4NGU4
Ny4uNGQzNzgzMzE4YmI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5o
CkBAIC0yMTEsNiArMjExLDkgQEAgcHVibGljOgogICAgIHN0YXRpYyBmbG9hdCBhc2NlbnRDb25z
aWRlcmluZ01hY0FzY2VudEhhY2soY29uc3QgV0NIQVIqLCBmbG9hdCBhc2NlbnQsIGZsb2F0IGRl
c2NlbnQpOwogI2VuZGlmCiAKKyAgICB2b2lkIHNldElzVXNlZEluU3lzdGVtRmFsbGJhY2tGb250
Q2FjaGUoKSB7IG1faXNVc2VkSW5TeXN0ZW1GYWxsYmFja0ZvbnRDYWNoZSA9IHRydWU7IH0KKyAg
ICBib29sIGlzVXNlZEluU3lzdGVtRmFsbGJhY2tGb250Q2FjaGUoKSBjb25zdCB7IHJldHVybiBt
X2lzVXNlZEluU3lzdGVtRmFsbGJhY2tGb250Q2FjaGU7IH0KKwogcHJpdmF0ZToKICAgICBXRUJD
T1JFX0VYUE9SVCBGb250KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmLCBPcmlnaW4sIEludGVyc3Rp
dGlhbCwgVmlzaWJpbGl0eSwgT3JpZW50YXRpb25GYWxsYmFjaywgc3RkOjpvcHRpb25hbDxSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI+KTsKIApAQCAtMjI1LDggKzIyOCw2IEBAIHByaXZhdGU6
CiAgICAgUmVmUHRyPEZvbnQ+IGNyZWF0ZVNjYWxlZEZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9u
JiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0OwogICAgIFJlZlB0cjxGb250PiBwbGF0Zm9ybUNy
ZWF0ZVNjYWxlZEZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgZmxvYXQgc2NhbGVGYWN0b3Ip
IGNvbnN0OwogCi0gICAgdm9pZCByZW1vdmVGcm9tU3lzdGVtRmFsbGJhY2tDYWNoZSgpOwotICAg
IAogICAgIHN0cnVjdCBEZXJpdmVkRm9udHM7CiAgICAgRGVyaXZlZEZvbnRzJiBlbnN1cmVEZXJp
dmVkRm9udERhdGEoKSBjb25zdDsKIApAQCAtMzM5LDcgKzM0MCw3IEBAIHByaXZhdGU6CiAgICAg
dW5zaWduZWQgbV9pc0Jyb2tlbklkZW9ncmFwaEZhbGxiYWNrIDogMTsKICAgICB1bnNpZ25lZCBt
X2hhc1ZlcnRpY2FsR2x5cGhzIDogMTsKIAotICAgIHVuc2lnbmVkIG1faXNVc2VkSW5TeXN0ZW1G
YWxsYmFja0NhY2hlIDogMTsKKyAgICB1bnNpZ25lZCBtX2lzVXNlZEluU3lzdGVtRmFsbGJhY2tG
b250Q2FjaGUgOiAxOwogICAgIAogICAgIHVuc2lnbmVkIG1fYWxsb3dzQW50aWFsaWFzaW5nIDog
MTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
Y2hlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaAppbmRl
eCA2YTQzNDBkNDgxZmIuLmY4MWU2ZmM0ZDNjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJGb250
UGxhdGZvcm1EYXRhLmgiCiAjaW5jbHVkZSAiRm9udFNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiRm9u
dFRhZ2dlZFNldHRpbmdzLmgiCisjaW5jbHVkZSAiU3lzdGVtRmFsbGJhY2tGb250Q2FjaGUuaCIK
ICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgPGFycmF5PgogI2luY2x1ZGUgPGxpbWl0cy5o
PgpAQCAtMzc2LDYgKzM3Nyw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHByZXdhcm0oUHJld2FybUlu
Zm9ybWF0aW9uJiYpOwogICAgIHN0YXRpYyB2b2lkIHByZXdhcm1HbG9iYWxseSgpOwogCisgICAg
U3lzdGVtRmFsbGJhY2tGb250Q2FjaGUmIHN5c3RlbUZhbGxiYWNrRm9udENhY2hlKCkgeyByZXR1
cm4gbV9zeXN0ZW1GYWxsYmFja0ZvbnRDYWNoZTsgfQorCiBwcml2YXRlOgogICAgIHZvaWQgaW52
YWxpZGF0ZSgpOwogICAgIHZvaWQgcGxhdGZvcm1JbnZhbGlkYXRlKCk7CkBAIC00MDMsNiArNDA2
LDcgQEAgcHJpdmF0ZToKICAgICBzdHJ1Y3QgRm9udERhdGFDYWNoZXM7CiAgICAgVW5pcXVlUmVm
PEZvbnREYXRhQ2FjaGVzPiBtX2ZvbnREYXRhQ2FjaGVzOwogICAgIEZvbnRDYXNjYWRlQ2FjaGUg
bV9mb250Q2FzY2FkZUNhY2hlOworICAgIFN5c3RlbUZhbGxiYWNrRm9udENhY2hlIG1fc3lzdGVt
RmFsbGJhY2tGb250Q2FjaGU7CiAKICAgICB1bnNpZ25lZCBzaG9ydCBtX2dlbmVyYXRpb24geyAw
IH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N5c3Rl
bUZhbGxiYWNrRm9udENhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1N5c3RlbUZhbGxiYWNrRm9udENhY2hlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAuLmM1YjY3Y2VjNTBiMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N5c3RlbUZhbGxiYWNrRm9udENhY2hlLmNwcApAQCAtMCww
ICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFr
b3YKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIElu
Yy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAg
ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJTeXN0ZW1GYWxsYmFja0ZvbnRDYWNoZS5oIgorCisjaW5j
bHVkZSAiRm9udENhY2hlLmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitTeXN0ZW1GYWxsYmFja0ZvbnRDYWNoZSYgU3lzdGVtRmFsbGJhY2tGb250
Q2FjaGU6OmZvckN1cnJlbnRUaHJlYWQoKQoreworICAgIHJldHVybiBGb250Q2FjaGU6OmZvckN1
cnJlbnRUaHJlYWQoKS5zeXN0ZW1GYWxsYmFja0ZvbnRDYWNoZSgpOworfQorCitSZWZQdHI8Rm9u
dD4gU3lzdGVtRmFsbGJhY2tGb250Q2FjaGU6OnN5c3RlbUZhbGxiYWNrRm9udEZvckNoYXJhY3Rl
cihjb25zdCBGb250KiBmb250LCBVQ2hhcjMyIGNoYXJhY3RlciwgY29uc3QgRm9udERlc2NyaXB0
aW9uJiBkZXNjcmlwdGlvbiwgSXNGb3JQbGF0Zm9ybUZvbnQgaXNGb3JQbGF0Zm9ybUZvbnQpCit7
CisgICAgYXV0byBmb250QWRkUmVzdWx0ID0gbV9jaGFyYWN0ZXJGYWxsYmFja01hcHMuYWRkKGZv
bnQsIENoYXJhY3RlckZhbGxiYWNrTWFwKCkpOworCisgICAgaWYgKCFjaGFyYWN0ZXIpIHsKKyAg
ICAgICAgVUNoYXIgY29kZVVuaXQgPSAwOworICAgICAgICByZXR1cm4gRm9udENhY2hlOjpmb3JD
dXJyZW50VGhyZWFkKCkuc3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGRlc2NyaXB0aW9uLCAq
Zm9udCwgaXNGb3JQbGF0Zm9ybUZvbnQsIEZvbnRDYWNoZTo6UHJlZmVyQ29sb3JlZEZvbnQ6Ok5v
LCAmY29kZVVuaXQsIDEpOworICAgIH0KKworICAgIGF1dG8ga2V5ID0gQ2hhcmFjdGVyRmFsbGJh
Y2tNYXBLZXkgeyBkZXNjcmlwdGlvbi5jb21wdXRlZExvY2FsZSgpLCBjaGFyYWN0ZXIsIGlzRm9y
UGxhdGZvcm1Gb250ICE9IElzRm9yUGxhdGZvcm1Gb250OjpObyB9OworICAgIHJldHVybiBmb250
QWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5lbnN1cmUoV1RGTW92ZShrZXkpLCBbJl0geworICAg
ICAgICBVQ2hhciBjb2RlVW5pdHNbMl07CisgICAgICAgIHVuc2lnbmVkIGNvZGVVbml0c0xlbmd0
aDsKKyAgICAgICAgaWYgKFVfSVNfQk1QKGNoYXJhY3RlcikpIHsKKyAgICAgICAgICAgIGNvZGVV
bml0c1swXSA9IEZvbnRDYXNjYWRlOjpub3JtYWxpemVTcGFjZXMoY2hhcmFjdGVyKTsKKyAgICAg
ICAgICAgIGNvZGVVbml0c0xlbmd0aCA9IDE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBjb2RlVW5pdHNbMF0gPSBVMTZfTEVBRChjaGFyYWN0ZXIpOworICAgICAgICAgICAgY29kZVVu
aXRzWzFdID0gVTE2X1RSQUlMKGNoYXJhY3Rlcik7CisgICAgICAgICAgICBjb2RlVW5pdHNMZW5n
dGggPSAyOworICAgICAgICB9CisgICAgICAgIGF1dG8gZmFsbGJhY2tGb250ID0gRm9udENhY2hl
Ojpmb3JDdXJyZW50VGhyZWFkKCkuc3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGRlc2NyaXB0
aW9uLCAqZm9udCwgaXNGb3JQbGF0Zm9ybUZvbnQsIEZvbnRDYWNoZTo6UHJlZmVyQ29sb3JlZEZv
bnQ6Ok5vLCBjb2RlVW5pdHMsIGNvZGVVbml0c0xlbmd0aCkuZ2V0KCk7CisgICAgICAgIGlmIChm
YWxsYmFja0ZvbnQpCisgICAgICAgICAgICBmYWxsYmFja0ZvbnQtPnNldElzVXNlZEluU3lzdGVt
RmFsbGJhY2tGb250Q2FjaGUoKTsKKyAgICAgICAgcmV0dXJuIGZhbGxiYWNrRm9udDsKKyAgICB9
KS5pdGVyYXRvci0+dmFsdWU7Cit9CisKK3ZvaWQgU3lzdGVtRmFsbGJhY2tGb250Q2FjaGU6OnJl
bW92ZShGb250KiBmb250KQoreworICAgIG1fY2hhcmFjdGVyRmFsbGJhY2tNYXBzLnJlbW92ZShm
b250KTsKKworICAgIGlmICghZm9udC0+aXNVc2VkSW5TeXN0ZW1GYWxsYmFja0ZvbnRDYWNoZSgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGF1dG8mIGNoYXJhY3Rlck1hcCA6IG1fY2hh
cmFjdGVyRmFsbGJhY2tNYXBzLnZhbHVlcygpKSB7CisgICAgICAgIFZlY3RvcjxDaGFyYWN0ZXJG
YWxsYmFja01hcEtleSwgNTEyPiB0b1JlbW92ZTsKKyAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6
IGNoYXJhY3Rlck1hcCkgeworICAgICAgICAgICAgaWYgKGVudHJ5LnZhbHVlID09IGZvbnQpCisg
ICAgICAgICAgICAgICAgdG9SZW1vdmUuYXBwZW5kKGVudHJ5LmtleSk7CisgICAgICAgIH0KKyAg
ICAgICAgZm9yIChhdXRvJiBrZXkgOiB0b1JlbW92ZSkKKyAgICAgICAgICAgIGNoYXJhY3Rlck1h
cC5yZW1vdmUoa2V5KTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N5c3RlbUZhbGxiYWNrRm9u
dENhY2hlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TeXN0ZW1GYWxsYmFj
a0ZvbnRDYWNoZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYTc4
NDQ5YjE1ODM1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvU3lzdGVtRmFsbGJhY2tGb250Q2FjaGUuaApAQCAtMCwwICsxLDg5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YKKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9y
IHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFRyYWl0cy5oPgorI2luY2x1ZGUg
PHd0Zi9IYXNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRm9udDsKK2NsYXNzIEZvbnREZXNjcmlwdGlvbjsKK2Vu
dW0gY2xhc3MgSXNGb3JQbGF0Zm9ybUZvbnQgOiBib29sOworICAgIAorc3RydWN0IENoYXJhY3Rl
ckZhbGxiYWNrTWFwS2V5IHsKKyAgICBBdG9tU3RyaW5nIGxvY2FsZTsKKyAgICBVQ2hhcjMyIGNo
YXJhY3RlciB7IDAgfTsKKyAgICBib29sIGlzRm9yUGxhdGZvcm1Gb250IHsgZmFsc2UgfTsKKwor
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDaGFyYWN0ZXJGYWxsYmFja01hcEtleSYgb3RoZXIp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbG9jYWxlID09IG90aGVyLmxvY2FsZSAmJiBj
aGFyYWN0ZXIgPT0gb3RoZXIuY2hhcmFjdGVyICYmIGlzRm9yUGxhdGZvcm1Gb250ID09IG90aGVy
LmlzRm9yUGxhdGZvcm1Gb250OworICAgIH0KK307CisKK2lubGluZSB2b2lkIGFkZChIYXNoZXIm
IGhhc2hlciwgY29uc3QgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXkmIGtleSkKK3sKKyAgICBhZGQo
aGFzaGVyLCBrZXkubG9jYWxlLCBrZXkuY2hhcmFjdGVyLCBrZXkuaXNGb3JQbGF0Zm9ybUZvbnQp
OworfQorCitzdHJ1Y3QgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXlIYXNoIHsKKyAgICBzdGF0aWMg
dW5zaWduZWQgaGFzaChjb25zdCBDaGFyYWN0ZXJGYWxsYmFja01hcEtleSYga2V5KSB7IHJldHVy
biBjb21wdXRlSGFzaChrZXkpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgQ2hhcmFj
dGVyRmFsbGJhY2tNYXBLZXkmIGEsIGNvbnN0IENoYXJhY3RlckZhbGxiYWNrTWFwS2V5JiBiKSB7
IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9F
bXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCitjbGFzcyBTeXN0ZW1GYWxsYmFja0ZvbnRDYWNo
ZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3lzdGVtRmFsbGJhY2tGb250Q2FjaGUpOwor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRpYyBTeXN0ZW1G
YWxsYmFja0ZvbnRDYWNoZSYgZm9yQ3VycmVudFRocmVhZCgpOworCisgICAgU3lzdGVtRmFsbGJh
Y2tGb250Q2FjaGUoKSA9IGRlZmF1bHQ7CisKKyAgICBSZWZQdHI8Rm9udD4gc3lzdGVtRmFsbGJh
Y2tGb250Rm9yQ2hhcmFjdGVyKGNvbnN0IEZvbnQqLCBVQ2hhcjMyIGNoYXJhY3RlciwgY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiwgSXNGb3JQbGF0Zm9ybUZvbnQpOworICAgIHZvaWQgcmVtb3ZlKEZv
bnQqKTsKKworcHJpdmF0ZToKKyAgICBzdHJ1Y3QgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXlIYXNo
VHJhaXRzIDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPENoYXJhY3RlckZhbGxiYWNrTWFwS2V5PiB7
CisgICAgICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShDaGFyYWN0ZXJGYWxs
YmFja01hcEtleSYgc2xvdCkgeyBuZXcgKE5vdE51bGwsICZzbG90KSBDaGFyYWN0ZXJGYWxsYmFj
a01hcEtleSB7IHsgfSwgVV9TRU5USU5FTCwgeyB9IH07IH0KKyAgICAgICAgc3RhdGljIGJvb2wg
aXNEZWxldGVkVmFsdWUoY29uc3QgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXkmIGtleSkgeyByZXR1
cm4ga2V5LmNoYXJhY3RlciA9PSBVX1NFTlRJTkVMOyB9CisgICAgfTsKKworICAgIC8vIEZvbnRz
IGFyZSBub3QgcmVmJ2QgdG8gYXZvaWQgY3ljbGVzLgorICAgIC8vIEZJWE1FOiBDb25zaWRlciBj
aGFuZ2luZyB0aGVzZSBtYXBzIHRvIHVzZSBXZWFrUHRyIGluc3RlYWQgb2YgcmF3IHBvaW50ZXJz
LgorICAgIHVzaW5nIENoYXJhY3RlckZhbGxiYWNrTWFwID0gSGFzaE1hcDxDaGFyYWN0ZXJGYWxs
YmFja01hcEtleSwgRm9udCosIENoYXJhY3RlckZhbGxiYWNrTWFwS2V5SGFzaCwgQ2hhcmFjdGVy
RmFsbGJhY2tNYXBLZXlIYXNoVHJhaXRzPjsKKworICAgIEhhc2hNYXA8Y29uc3QgRm9udCosIENo
YXJhY3RlckZhbGxiYWNrTWFwPiBtX2NoYXJhY3RlckZhbGxiYWNrTWFwczsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcAppbmRleCBmOWE5
MTJmOTkxNmUuLjAyYmY0MTg0YmMyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcApA
QCAtMjM5LDE2ICsyMzksMTcgQEAgc3RydWN0IEZhbGxiYWNrRm9udERlc2NyaXB0aW9uS2V5SGFz
aCB7CiAgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQg
PSB0cnVlOwogfTsKIAotdXNpbmcgU3lzdGVtRmFsbGJhY2tDYWNoZSA9IEhhc2hNYXA8RmFsbGJh
Y2tGb250RGVzY3JpcHRpb25LZXksIHN0ZDo6dW5pcXVlX3B0cjxDYWNoZWRGb250U2V0PiwgRmFs
bGJhY2tGb250RGVzY3JpcHRpb25LZXlIYXNoLCBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8RmFsbGJh
Y2tGb250RGVzY3JpcHRpb25LZXk+PjsKLXN0YXRpYyBTeXN0ZW1GYWxsYmFja0NhY2hlJiBzeXN0
ZW1GYWxsYmFja0NhY2hlKCkKK3VzaW5nIFN5c3RlbUZhbGxiYWNrRm9udFNldENhY2hlID0gSGFz
aE1hcDxGYWxsYmFja0ZvbnREZXNjcmlwdGlvbktleSwgc3RkOjp1bmlxdWVfcHRyPENhY2hlZEZv
bnRTZXQ+LCBGYWxsYmFja0ZvbnREZXNjcmlwdGlvbktleUhhc2gsIFNpbXBsZUNsYXNzSGFzaFRy
YWl0czxGYWxsYmFja0ZvbnREZXNjcmlwdGlvbktleT4+Oworc3RhdGljIFN5c3RlbUZhbGxiYWNr
Rm9udFNldENhY2hlJiBzeXN0ZW1GYWxsYmFja0ZvbnRTZXRDYWNoZSgpCiB7Ci0gICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPFN5c3RlbUZhbGxiYWNrQ2FjaGU+IGNhY2hlOworICAgIC8vIEZJWE1F
OiBUaGlzIHNob3VsZCBiZSBtb3ZlZCB0byBGb250Q2FjaGUgc2luY2UgaXQgY2FuIGJlIGFjY2Vz
c2VkIGZyb20gd29ya2VyIHRocmVhZHMuCisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN5c3Rl
bUZhbGxiYWNrRm9udFNldENhY2hlPiBjYWNoZTsKICAgICByZXR1cm4gY2FjaGUuZ2V0KCk7CiB9
CiAKIFJlZlB0cjxGb250PiBGb250Q2FjaGU6OnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhj
b25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBGb250JiwgSXNGb3JQbGF0
Zm9ybUZvbnQsIFByZWZlckNvbG9yZWRGb250IHByZWZlckNvbG9yZWRGb250LCBjb25zdCBVQ2hh
ciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQogewotICAgIGF1dG8gYWRkUmVzdWx0ID0g
c3lzdGVtRmFsbGJhY2tDYWNoZSgpLmVuc3VyZShGYWxsYmFja0ZvbnREZXNjcmlwdGlvbktleShk
ZXNjcmlwdGlvbiwgcHJlZmVyQ29sb3JlZEZvbnQpLCBbJmRlc2NyaXB0aW9uLCBwcmVmZXJDb2xv
cmVkRm9udF0oKSAtPiBzdGQ6OnVuaXF1ZV9wdHI8Q2FjaGVkRm9udFNldD4geworICAgIGF1dG8g
YWRkUmVzdWx0ID0gc3lzdGVtRmFsbGJhY2tGb250U2V0Q2FjaGUoKS5lbnN1cmUoRmFsbGJhY2tG
b250RGVzY3JpcHRpb25LZXkoZGVzY3JpcHRpb24sIHByZWZlckNvbG9yZWRGb250KSwgWyZkZXNj
cmlwdGlvbiwgcHJlZmVyQ29sb3JlZEZvbnRdKCkgLT4gc3RkOjp1bmlxdWVfcHRyPENhY2hlZEZv
bnRTZXQ+IHsKICAgICAgICAgUmVmUHRyPEZjUGF0dGVybj4gcGF0dGVybiA9IGFkb3B0UmVmKEZj
UGF0dGVybkNyZWF0ZSgpKTsKICAgICAgICAgRmNQYXR0ZXJuQWRkQm9vbChwYXR0ZXJuLmdldCgp
LCBGQ19TQ0FMQUJMRSwgRmNUcnVlKTsKICNpZmRlZiBGQ19DT0xPUgpAQCAtMjg0LDcgKzI4NSw3
IEBAIFJlZlB0cjxGb250PiBGb250Q2FjaGU6OnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhj
b25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyCiAKIHZvaWQgRm9udENhY2hlOjpwbGF0Zm9ybVB1
cmdlSW5hY3RpdmVGb250RGF0YSgpCiB7Ci0gICAgc3lzdGVtRmFsbGJhY2tDYWNoZSgpLmNsZWFy
KCk7CisgICAgc3lzdGVtRmFsbGJhY2tGb250U2V0Q2FjaGUoKS5jbGVhcigpOwogfQogCiBzdGF0
aWMgVmVjdG9yPFN0cmluZz4gcGF0dGVyblRvRmFtaWxpZXMoRmNQYXR0ZXJuJiBwYXR0ZXJuKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>460998</attachid>
            <date>2022-07-18 23:35:33 -0700</date>
            <delta_ts>2022-07-19 13:26:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233972-20220719183531.patch</filename>
            <type>text/plain</type>
            <size>122286</size>
            <attacher name="Matt Woodrow">mattwoodrow</attacher>
            
              <data encoding="base64">RnJvbSBmNGEwNTkyMDAwYjFiNGYxZjdlMWQ1ZGNiNmE5ZTg3MjdlNmMxYjMwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBDYW1lcm9uIE1jQ29ybWFjayA8aGV5Y2FtQGFwcGxlLmNvbT4K
RGF0ZTogRnJpLCAzIERlYyAyMDIxIDA5OjU5OjUwICsxMTAwClN1YmplY3Q6IFtQQVRDSF0gTW92
ZSB0aGUgU3lzdGVtRmFsbGJhY2tDYWNoZSB0byBGb250Q2FjaGUKIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzM5NzIKClJldmlld2VkIGJ5IE15bGVzIE1heGZpZWxk
LgoKV2l0aCBPZmZzY3JlZW5DYW52YXMsIHRoZSBTeXN0ZW1GYWxsYmFja0NhY2hlIGNhbiBiZSB0
b3VjaGVkIGZyb20Kd29ya2VyIHRocmVhZHMuIFRoaXMgY2FjaGUgY29udGFpbnMgQXRvbVN0cmlu
Z3MsIHdoaWNoIGFyZSB0aHJlYWQKc3BlY2lmaWMuCgpNb3ZlIHRoZSBTeXN0ZW1GYWxsYmFja0Nh
Y2hlIGNvZGUgZnJvbSBpbnNpZGUgRm9udENhY2hlLmNwcCB0byBzZXBhcmF0ZQpmaWxlcyAoYW5k
IHJlbmFtZSBpdCB0byBTeXN0ZW1GYWxsYmFja0ZvbnRDYWNoZSksIHRvIGF2b2lkIEZvbnRDYWNo
ZS5oCmZyb20gZ2V0dGluZyB0b28gbm9pc3kuIEFsc28gdGFrZSB0aGUgb3Bwb3J0dW5pdHkgdG8g
d3JhcCBpdCBpbiBhIGNsYXNzCnRvIGdpdmUgaXQgbWVhbmluZ2Z1bCBtZXRob2RzLgoKKiBwbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaDoKKFdlYkNvcmU6OkZvbnRDYWNoZTo6c3lzdGVtRm9u
dEZhbGxiYWNrQ2FjaGUpOgoqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwOgoqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYWNoZS5oOgooV2ViQ29yZTo6Rm9udENhY2hlOjpzeXN0ZW1Gb250RmFs
bGJhY2tDYWNoZSk6CiogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHA6CihXZWJDb3JlOjpzeXN0
ZW1GYWxsYmFja0NhY2hlKToKKiBwbGF0Zm9ybS9ncmFwaGljcy9TeXN0ZW1GYWxsYmFja0ZvbnRD
YWNoZS5jcHA6CihXZWJDb3JlOjpTeXN0ZW1GYWxsYmFja0ZvbnRDYWNoZTo6Zm9yQ3VycmVudFRo
cmVhZCk6Ck1vdmUgU3lzdGVtRmFsbGJhY2tDYWNoZSBmcm9tIGEgc2luZ2xldG9uIHRvIEZvbnRD
YWNoZS4KCiogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oOgooV2ViQ29yZTo6Rm9udDo6c2V0SXNV
c2VkSW5TeXN0ZW1GYWxsYmFja0ZvbnRDYWNoZSk6CihXZWJDb3JlOjpGb250Ojppc1VzZWRJblN5
c3RlbUZhbGxiYWNrRm9udENhY2hlIGNvbnN0KToKTmV3IGZ1bmN0aW9ucyB0byBub3RlIGEgRm9u
dCBpcyBpbiBhIFN5c3RlbUZhbGxiYWNrRm9udENhY2hlLCBzaW5jZSB0aGUKbWV0aG9kIHRoYXQg
YWRkcyBpdCB0byBhbmQgY2hlY2tzIGl0cyBwcmVzZW5jZSBpbiB0aGUgY2FjaGUgaXMgbm8gbG9u
Z2VyCmluIEZvbnQuCgoqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwOgooV2ViQ29yZTo6Rm9u
dDo6fkZvbnQpOgpDYWxsIGEgbmV3IFN5c3RlbUZhbGxiYWNrRm9udENhY2hlOjpmb3JDdXJyZW50
VGhyZWFkIGZ1bmN0aW9uLgoKKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcDoKKFdlYkNvcmU6
OkZvbnQ6OnN5c3RlbUZhbGxiYWNrRm9udEZvckNoYXJhY3RlciBjb25zdCk6CihXZWJDb3JlOjpG
b250OjpyZW1vdmVGcm9tU3lzdGVtRmFsbGJhY2tDYWNoZSk6CiogcGxhdGZvcm0vZ3JhcGhpY3Mv
U3lzdGVtRmFsbGJhY2tGb250Q2FjaGUuY3BwOiBBZGRlZC4KKFdlYkNvcmU6OlN5c3RlbUZhbGxi
YWNrRm9udENhY2hlOjpzeXN0ZW1GYWxsYmFja0ZvbnRGb3JDaGFyYWN0ZXIpOgooV2ViQ29yZTo6
U3lzdGVtRmFsbGJhY2tGb250Q2FjaGU6OnJlbW92ZSk6Ck1vdmUgbG9va3VwIGFuZCByZW1vdmFs
IG1ldGhvZHMgZnJvbSBGb250IHRvIFN5c3RlbUZhbGxiYWNrRm9udENhY2hlLgoKKiBIZWFkZXJz
LmNtYWtlOgoqIFNvdXJjZXMudHh0OgoqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcDoKKCk6IERlbGV0ZWQuCihXZWJDb3JlOjpv
cGVyYXRvcj09KTogRGVsZXRlZC4KKFdlYkNvcmU6OkNoYXJhY3RlckZhbGxiYWNrTWFwS2V5SGFz
aDo6aGFzaCk6IERlbGV0ZWQuCihXZWJDb3JlOjpDaGFyYWN0ZXJGYWxsYmFja01hcEtleUhhc2g6
OmVxdWFsKTogRGVsZXRlZC4KKFdlYkNvcmU6OkNoYXJhY3RlckZhbGxiYWNrTWFwS2V5SGFzaFRy
YWl0czo6Y29uc3RydWN0RGVsZXRlZFZhbHVlKTogRGVsZXRlZC4KKFdlYkNvcmU6OkNoYXJhY3Rl
ckZhbGxiYWNrTWFwS2V5SGFzaFRyYWl0czo6aXNEZWxldGVkVmFsdWUpOiBEZWxldGVkLgoqIHBs
YXRmb3JtL2dyYXBoaWNzL1N5c3RlbUZhbGxiYWNrRm9udENhY2hlLmg6IEFkZGVkLgooV2ViQ29y
ZTo6U3lzdGVtRmFsbGJhY2tGb250Q2FjaGU6OkNoYXJhY3RlckZhbGxiYWNrTWFwS2V5OjpvcGVy
YXRvcj09IGNvbnN0KToKKFdlYkNvcmU6OlN5c3RlbUZhbGxiYWNrRm9udENhY2hlOjpDaGFyYWN0
ZXJGYWxsYmFja01hcEtleUhhc2g6Omhhc2gpOgooV2ViQ29yZTo6U3lzdGVtRmFsbGJhY2tGb250
Q2FjaGU6OkNoYXJhY3RlckZhbGxiYWNrTWFwS2V5SGFzaDo6ZXF1YWwpOgooV2ViQ29yZTo6U3lz
dGVtRmFsbGJhY2tGb250Q2FjaGU6OkNoYXJhY3RlckZhbGxiYWNrTWFwS2V5SGFzaFRyYWl0czo6
Y29uc3RydWN0RGVsZXRlZFZhbHVlKToKKFdlYkNvcmU6OlN5c3RlbUZhbGxiYWNrRm9udENhY2hl
OjpDaGFyYWN0ZXJGYWxsYmFja01hcEtleUhhc2hUcmFpdHM6OmlzRGVsZXRlZFZhbHVlKToKTW92
ZSBleGlzdGluZyBTeXN0ZW1GYWxsYmFja0ZvbnRDYWNoZSBjb2RlIGZyb20gRm9udC5jcHAgdG8g
YSBuZXcgZmlsZSBhbmQKd3JhcCBpdCBpbiBhIGNsYXNzLgoKKiBwbGF0Zm9ybS9ncmFwaGljcy9m
cmVldHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHA6CihXZWJDb3JlOjpzeXN0ZW1GYWxsYmFja0Zv
bnRTZXRDYWNoZSk6CihXZWJDb3JlOjpGb250Q2FjaGU6OnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFj
dGVycyk6CihXZWJDb3JlOjpGb250Q2FjaGU6OnBsYXRmb3JtUHVyZ2VJbmFjdGl2ZUZvbnREYXRh
KToKKFdlYkNvcmU6OnN5c3RlbUZhbGxiYWNrQ2FjaGUpOgpSZW5hbWUgdGhlIFN5c3RlbUZhbGxi
YWNrQ2FjaGUgaW4gRm9udENhY2hlRnJlZVR5cGUuY3BwLCB3aGljaCBpcyB1c2VkCmZvciBhIGRp
ZmZlcmVudCBwdXJwb3NlIGZyb20gdGhlIG9uZSB0aGF0IGxpdmVkIGluIEZvbnQuY3BwLgotLS0K
IFNvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgICAgICAgICAgICAgICAgICB8ICAgMSArCiBT
b3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogLi4u
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIHwgICA2ICsKIC4uLi9w
YWdlL2NvY29hL01lbW9yeVJlbGVhc2VDb2NvYS5tbS5vcmlnICAgICB8IDEzNyArKysrCiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcCAgICAgfCAgODYgKy0tCiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmggICAgICAgfCAgIDcgKy0KIC4uLi9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwLm9yaWcgICAgICB8IDUxNCArKysrKysrKysr
KysrKwogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmggIHwgICA0
ICsKIC4uLi9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaC5vcmlnICAgICAgICB8IDI5NCAr
KysrKysrKwogLi4uL2dyYXBoaWNzL1N5c3RlbUZhbGxiYWNrRm9udENhY2hlLmNwcCAgICAgIHwg
IDg5ICsrKwogLi4uL2dyYXBoaWNzL1N5c3RlbUZhbGxiYWNrRm9udENhY2hlLmggICAgICAgIHwg
IDg5ICsrKwogLi4uL2NvcmV0ZXh0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwLm9yaWcgICAgIHwg
NTAxICsrKysrKysrKysrKysrCiAuLi4vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5
cGUuY3BwICAgfCAgMTEgKy0KIC4uLi90cmFuc2Zvcm1zL0FmZmluZVRyYW5zZm9ybS5oLm9yaWcg
ICAgICAgICB8IDI1OCArKysrKysrCiAuLi4vV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsU2V0dGlu
Z3MuY3BwLm9yaWcgfCA2NTUgKysrKysrKysrKysrKysrKysrCiAxNSBmaWxlcyBjaGFuZ2VkLCAy
NTYyIGluc2VydGlvbnMoKyksIDkxIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNv
dXJjZS9XZWJDb3JlL3BhZ2UvY29jb2EvTWVtb3J5UmVsZWFzZUNvY29hLm1tLm9yaWcKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUu
Y3BwLm9yaWcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250Q2FjaGUuaC5vcmlnCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvU3lzdGVtRmFsbGJhY2tGb250Q2FjaGUuY3BwCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3lzdGVtRmFsbGJhY2tG
b250Q2FjaGUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NvcmV0ZXh0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwLm9yaWcKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL0FmZmlu
ZVRyYW5zZm9ybS5oLm9yaWcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS90ZXN0
aW5nL0ludGVybmFsU2V0dGluZ3MuY3BwLm9yaWcKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9IZWFkZXJzLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCA4Njg5
NWQ1NjFkN2UuLjZmZWQ1NzkzN2M2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvSGVhZGVy
cy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCkBAIC0xNjEzLDYgKzE2
MTMsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudC5oCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvU291cmNlSW1hZ2UuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1N0cmluZ1RydW5jYXRv
ci5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvU3lzdGVtRmFsbGJhY2tGb250Q2FjaGUuaAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL1N5c3RlbUltYWdlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9U
YWJTaXplLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVuLmgKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5k
ZXggYzYyZmU4ODExMTI2Li5lNWMwNjhjNmM5NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0yMTIxLDYg
KzIxMjEsNyBAQCBwbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlLmNwcAogcGxh
dGZvcm0vZ3JhcGhpY3MvU291cmNlSW1hZ2UuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9TdHJpbmdU
cnVuY2F0b3IuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9TeXN0ZW1Gb250RGF0YWJhc2UuY3BwCitw
bGF0Zm9ybS9ncmFwaGljcy9TeXN0ZW1GYWxsYmFja0ZvbnRDYWNoZS5jcHAKIHBsYXRmb3JtL2dy
YXBoaWNzL1RleHRSdW4uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9UZXh0VHJhY2tSZXByZXNlbnRh
dGlvbi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1RyYWNrQnVmZmVyLmNwcApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDhlMDNkNmJl
MDcwNS4uZDg1YTY1NDZjMjgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMDIyLDYgKzEwMjIsNyBAQAogCQkzMkE3MEQ1MzI4
MzYxMzRCMDA4MDA2MEMgLyogRGVjb21wb3NlZEdseXBocy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzJBNzBENTIyODM2MTM0QTAwODAwNjBDIC8qIERl
Y29tcG9zZWRHbHlwaHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkzMkE3MEQ1ODI4MzYxMzhFMDA4MDA2MEMgLyogUG9zaXRpb25lZEdseXBocy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzJBNzBENTYy
ODM2MTM4RDAwODAwNjBDIC8qIFBvc2l0aW9uZWRHbHlwaHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkzMzQ0MDhDNDMzRjhDQTRDMTAwNDQyMzQg
LyogU1ZHTGF5ZXJUcmFuc2Zvcm1VcGRhdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAzMzQ0MDc3NDEyRDlCQzRBMDAwNDQyMzQgLyogU1ZHTGF5ZXJU
cmFuc2Zvcm1VcGRhdGVyLmggKi87IH07CisJCTMyMTEyRTBGMjc0QjQ3Q0YwMDcwNDdBOCAvKiBT
eXN0ZW1GYWxsYmFja0ZvbnRDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMzI4OTlGQjkyNzRCNDEwQzAwODU1QTlEIC8qIFN5c3RlbUZhbGxiYWNr
Rm9udENhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMzM1MDNDOUExMDE3OUE3NDAwM0I0N0UxIC8qIE5vdGlmaWNhdGlvbkNsaWVudC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzM1MDNDOTkxMDE3
OUE3NDAwM0I0N0UxIC8qIE5vdGlmaWNhdGlvbkNsaWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTMzNTAzQ0E0MTAxNzlBRDcwMDNCNDdFMSAv
KiBKU05vdGlmaWNhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMzM1MDNDQTAxMDE3OUFENzAwM0I0N0UxIC8qIEpTTm90aWZpY2F0aW9uLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMzNEMDIxMkQx
MzFEQjM3QjAwNDA5MUE4IC8qIENvb2tpZVN0b3JhZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxM0YwMUVBMTI3MEUxMEQwMERGQkE3MSAvKiBDb29r
aWVTdG9yYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKQEAgLTg1NzAsNiArODU3MSw4IEBACiAJCTMyQjE3NjE0Mjg1RkREQTEwMEVENkRCOCAvKiBH
cmFkaWVudENvbG9yU3RvcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFkaWVudENvbG9yU3Rv
cC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMyQjE3NjE1Mjg1RkREQTEwMEVE
NkRCOCAvKiBHcmFkaWVudENvbG9yU3RvcHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR3JhZGll
bnRDb2xvclN0b3BzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzJFMjY4RkMy
ODVGQzhGNzAwNDY2MEJCIC8qIENvbG9ySW50ZXJwb2xhdGlvbk1ldGhvZC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb2xvckludGVycG9sYXRpb25NZXRob2QuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMjg5OUZCNzI3NEI0MTBDMDA4NTVBOUQg
LyogU3lzdGVtRmFsbGJhY2tGb250Q2FjaGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3lzdGVt
RmFsbGJhY2tGb250Q2FjaGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMjg5
OUZCOTI3NEI0MTBDMDA4NTVBOUQgLyogU3lzdGVtRmFsbGJhY2tGb250Q2FjaGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU3lzdGVtRmFsbGJhY2tGb250Q2FjaGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMzMxRkY2N0RFMTk3QjU3MzkzQzQ2QTdGIC8qIFJlbmRlck1hdGhNTFBhZGRlZC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJNYXRoTUxQYWRkZWQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzMxRkY2N0RFMTk3QjU3MzkzQzQ2QUE3IC8q
IFJlbmRlck1hdGhNTFNwYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJl
bmRlck1hdGhNTFNwYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMzM0Y3MDRF
MEZCNDlDQTIwMDhFMTJBNiAvKiBOb3RpZmljYXRpb24uaWRsICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0
aCA9IE5vdGlmaWNhdGlvbi5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yOTU5
MSw2ICsyOTU5NCw4IEBACiAJCQkJQjIzNTQwRjAwRDAwNzgyRTAwMjM4MkZBIC8qIFN0cmluZ1Ry
dW5jYXRvci5jcHAgKi8sCiAJCQkJQjIzNTQwRjEwRDAwNzgyRTAwMjM4MkZBIC8qIFN0cmluZ1Ry
dW5jYXRvci5oICovLAogCQkJCTA4NzU1OEM0MTNCNEE1N0QwMEY0OTMwNyAvKiBTdXJyb2dhdGVQ
YWlyQXdhcmVUZXh0SXRlcmF0b3IuaCAqLywKKwkJCQkzMjg5OUZCNzI3NEI0MTBDMDA4NTVBOUQg
LyogU3lzdGVtRmFsbGJhY2tGb250Q2FjaGUuY3BwICovLAorCQkJCTMyODk5RkI5Mjc0QjQxMEMw
MDg1NUE5RCAvKiBTeXN0ZW1GYWxsYmFja0ZvbnRDYWNoZS5oICovLAogCQkJCTFDNEM3N0RFMjg0
REE4MzkwMEJEMDkzNiAvKiBTeXN0ZW1Gb250RGF0YWJhc2UuY3BwICovLAogCQkJCTFDNEM3N0RG
Mjg0REE4MzkwMEJEMDkzNiAvKiBTeXN0ZW1Gb250RGF0YWJhc2UuaCAqLywKIAkJCQk5NUU5RjQ0
NDI3QzlBMzlCMDA5NDUzMzcgLyogU3lzdGVtSW1hZ2UuaCAqLywKQEAgLTM4MjU4LDYgKzM4MjYz
LDcgQEAKIAkJCQk1MTdBNTM0NjFGNTBDMTdGMDBEQ0RDMEEgLyogU1dTZXJ2ZXJXb3JrZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCUUxODA4MTE3MTZGQ0Y5Q0IwMEI4MEQwNyAvKiBTeW5jaHJvbm91
c0xvYWRlckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzE2OTJERDUyM0QyM0UwODAwNkU4
OEY3IC8qIFN5c3RlbUJhdHRlcnkuaCBpbiBIZWFkZXJzICovLAorCQkJCTMyMTEyRTBGMjc0QjQ3
Q0YwMDcwNDdBOCAvKiBTeXN0ZW1GYWxsYmFja0ZvbnRDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMUNGRDVEN0UyODREQkU3RjAwMDg5NjY3IC8qIFN5c3RlbUZvbnREYXRhYmFzZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRTRFOEI0RUMyMTZCNzlFNTAwQjg4MzREIC8qIFN5c3RlbUZvbnREYXRh
YmFzZUNvcmVUZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NUU5RjQ0NjI3QzlBMzlDMDA5NDUz
MzcgLyogU3lzdGVtSW1hZ2UuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9jb2NvYS9NZW1vcnlSZWxlYXNlQ29jb2EubW0ub3JpZyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvY29jb2EvTWVtb3J5UmVsZWFzZUNvY29hLm1tLm9yaWcKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5mNjMwOGUwYWEzOWEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NvY29hL01lbW9yeVJlbGVhc2VDb2NvYS5tbS5vcmlnCkBA
IC0wLDAgKzEsMTM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNp
bXBvcnQgIk1lbW9yeVJlbGVhc2UuaCIKKworPDw8PDw8PCBIRUFECisjaW1wb3J0ICJGb250Q2Fj
aGUuaCIKKyNpbXBvcnQgIkZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uQ29yZVRleHRDYWNoZS5oIgor
fHx8fHx8fCBwYXJlbnQgb2YgNWMyMzI2OWRlODljIChQZXJmb3JtIG1lbW9yeSByZWxlYXNlIG9w
ZXJhdGlvbnMgaW4gYWxsIEZvbnRDYWNoZXMpCisjaW1wb3J0ICJGb250RmFtaWx5U3BlY2lmaWNh
dGlvbkNvcmVUZXh0Q2FjaGUuaCIKKz09PT09PT0KKz4+Pj4+Pj4gNWMyMzI2OWRlODljIChQZXJm
b3JtIG1lbW9yeSByZWxlYXNlIG9wZXJhdGlvbnMgaW4gYWxsIEZvbnRDYWNoZXMpCisjaW1wb3J0
ICJHQ0NvbnRyb2xsZXIuaCIKKyNpbXBvcnQgIkhUTUxOYW1lQ2FjaGUuaCIKKyNpbXBvcnQgIklP
U3VyZmFjZVBvb2wuaCIKKyNpbXBvcnQgIkxheWVyUG9vbC5oIgorI2ltcG9ydCAiTG9jYWxlQ29j
b2EuaCIKKyNpbXBvcnQgIlN1YmltYWdlQ2FjaGVXaXRoVGltZXIuaCIKKyNpbXBvcnQgPG5vdGlm
eS5oPgorI2ltcG9ydCA8cGFsL3NwaS9pb3MvR3JhcGhpY3NTZXJ2aWNlc1NQSS5oPgorCisjaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKKyNpbXBvcnQgIkxlZ2FjeVRpbGVDYWNoZS5oIgorI2ltcG9y
dCAiVGlsZUNvbnRyb2xsZXJNZW1vcnlIYW5kbGVySU9TLmgiCisjZW5kaWYKKworCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3ZvaWQgcGxhdGZvcm1SZWxlYXNlTWVtb3J5KENyaXRpY2FsKQorewor
PDw8PDw8PCBIRUFECisgICAgRm9udENhY2hlOjppbnZhbGlkYXRlQWxsRm9udENhY2hlcyhGb250
Q2FjaGU6OlNob3VsZFJ1bkludmFsaWRhdGlvbkNhbGxiYWNrOjpObyk7CisgICAgLy8gRklYTUU6
IFNob3VsZCBjbGVhciB0aGlzIG9uIGFsbCB3b3JrZXJzLgorICAgIEZvbnRGYW1pbHlTcGVjaWZp
Y2F0aW9uQ29yZVRleHRDYWNoZTo6Zm9yQ3VycmVudFRocmVhZCgpLmNsZWFyKCk7CisKK3x8fHx8
fHwgcGFyZW50IG9mIDVjMjMyNjlkZTg5YyAoUGVyZm9ybSBtZW1vcnkgcmVsZWFzZSBvcGVyYXRp
b25zIGluIGFsbCBGb250Q2FjaGVzKQorICAgIC8vIEZJWE1FOiBTaG91bGQgY2xlYXIgdGhpcyBv
biBhbGwgd29ya2Vycy4KKyAgICBTeXN0ZW1Gb250RGF0YWJhc2VDb3JlVGV4dDo6Zm9yQ3VycmVu
dFRocmVhZCgpLmNsZWFyKCk7CisgICAgLy8gRklYTUU6IFNob3VsZCBjbGVhciB0aGlzIG9uIGFs
bCB3b3JrZXJzLgorICAgIEZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uQ29yZVRleHRDYWNoZTo6Zm9y
Q3VycmVudFRocmVhZCgpLmNsZWFyKCk7CisKKz09PT09PT0KKz4+Pj4+Pj4gNWMyMzI2OWRlODlj
IChQZXJmb3JtIG1lbW9yeSByZWxlYXNlIG9wZXJhdGlvbnMgaW4gYWxsIEZvbnRDYWNoZXMpCisj
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgIVBMQVRGT1JNKElPU19GQU1JTFlfU0lNVUxBVE9S
KSAmJiAhUExBVEZPUk0oTUFDQ0FUQUxZU1QpCisgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIGNh
bGwgdG8gR1NGb250SW5pdGlhbGl6ZSgpIG9uY2UgPHJkYXI6Ly9wcm9ibGVtLzMyODg2NzE1PiBp
cyBmaXhlZC4KKyAgICBHU0ZvbnRJbml0aWFsaXplKCk7CisgICAgR1NGb250UHVyZ2VGb250Q2Fj
aGUoKTsKKyNlbmRpZgorCisgICAgTG9jYWxlQ29jb2E6OnJlbGVhc2VNZW1vcnkoKTsKKworICAg
IGZvciAoYXV0byYgcG9vbCA6IExheWVyUG9vbDo6YWxsTGF5ZXJQb29scygpKQorICAgICAgICBw
b29sLT5kcmFpbigpOworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBMZWdhY3lUaWxl
Q2FjaGU6OmRyYWluTGF5ZXJQb29sKCk7CisgICAgdGlsZUNvbnRyb2xsZXJNZW1vcnlIYW5kbGVy
KCkudHJpbVVucGFyZW50ZWRUaWxlc1RvVGFyZ2V0KDApOworI2VuZGlmCisKKyAgICBJT1N1cmZh
Y2VQb29sOjpzaGFyZWRQb29sKCkuZGlzY2FyZEFsbFN1cmZhY2VzKCk7CisKKyNpZiBDQUNIRV9T
VUJJTUFHRVMKKyAgICBTdWJpbWFnZUNhY2hlV2l0aFRpbWVyOjpjbGVhcigpOworI2VuZGlmCit9
CisKK3ZvaWQgcGxhdGZvcm1SZWxlYXNlR3JhcGhpY3NNZW1vcnkoQ3JpdGljYWwpCit7CisgICAg
SU9TdXJmYWNlUG9vbDo6c2hhcmVkUG9vbCgpLmRpc2NhcmRBbGxTdXJmYWNlcygpOworCisjaWYg
Q0FDSEVfU1VCSU1BR0VTCisgICAgU3ViaW1hZ2VDYWNoZVdpdGhUaW1lcjo6Y2xlYXIoKTsKKyNl
bmRpZgorfQorCit2b2lkIGpldHRpc29uRXhwZW5zaXZlT2JqZWN0c09uVG9wTGV2ZWxOYXZpZ2F0
aW9uKCkKK3sKKyAgICAvLyBQcm90ZWN0IGFnYWluc3QgZG9pbmcgZXhjZXNzaXZlIGpldHRpc29u
aW5nIGR1cmluZyByZXBlYXRlZCBuYXZpZ2F0aW9ucy4KKyAgICBjb25zdCBhdXRvIG1pbmltdW1U
aW1lU2luY2VOYXZpZ2F0aW9uID0gMl9zOworCisgICAgc3RhdGljIGF1dG8gdGltZU9mTGFzdE5h
dmlnYXRpb24gPSBNb25vdG9uaWNUaW1lOjpub3coKTsKKyAgICBhdXRvIG5vdyA9IE1vbm90b25p
Y1RpbWU6Om5vdygpOworICAgIGJvb2wgc2hvdWxkSmV0dGlzb24gPSBub3cgLSB0aW1lT2ZMYXN0
TmF2aWdhdGlvbiA+PSBtaW5pbXVtVGltZVNpbmNlTmF2aWdhdGlvbjsKKyAgICB0aW1lT2ZMYXN0
TmF2aWdhdGlvbiA9IG5vdzsKKworICAgIGlmICghc2hvdWxkSmV0dGlzb24pCisgICAgICAgIHJl
dHVybjsKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgLy8gVGhyb3cgYXdheSBsaW5r
ZWQgSlMgY29kZS4gTGlua2VkIGNvZGUgaXMgdGllZCB0byBhIGdsb2JhbCBvYmplY3QgYW5kIGlz
IG5vdCByZXVzYWJsZS4KKyAgICAvLyBUaGUgaW1tZWRpYXRlIG1lbW9yeSBzYXZpbmdzIG91dHdl
aWdoIHRoZSBjb3N0IG9mIHJlY29tcGlsYXRpb24gaW4gY2FzZSB3ZSBnbyBiYWNrIGFnYWluLgor
ICAgIEdDQ29udHJvbGxlcjo6c2luZ2xldG9uKCkuZGVsZXRlQWxsTGlua2VkQ29kZShKU0M6OkRl
bGV0ZUFsbENvZGVJZk5vdENvbGxlY3RpbmcpOworI2VuZGlmCisKKyAgICBIVE1MTmFtZUNhY2hl
OjpjbGVhcigpOworfQorCit2b2lkIHJlZ2lzdGVyTWVtb3J5UmVsZWFzZU5vdGlmeUNhbGxiYWNr
cygpCit7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOworICAgIHN0ZDo6Y2Fs
bF9vbmNlKG9uY2VGbGFnLCBbXSB7CisgICAgICAgIGludCBkdW1teTsKKyAgICAgICAgbm90aWZ5
X3JlZ2lzdGVyX2Rpc3BhdGNoKCJjb20uYXBwbGUuV2ViS2l0LmZ1bGxHQyIsICZkdW1teSwgZGlz
cGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXihpbnQpIHsKKyAgICAgICAgICAgIEdDQ29udHJvbGxl
cjo6c2luZ2xldG9uKCkuZ2FyYmFnZUNvbGxlY3ROb3coKTsKKyAgICAgICAgfSk7CisgICAgICAg
IG5vdGlmeV9yZWdpc3Rlcl9kaXNwYXRjaCgiY29tLmFwcGxlLldlYktpdC5kZWxldGVBbGxDb2Rl
IiwgJmR1bW15LCBkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeKGludCkgeworICAgICAgICAg
ICAgR0NDb250cm9sbGVyOjpzaW5nbGV0b24oKS5kZWxldGVBbGxDb2RlKEpTQzo6UHJldmVudENv
bGxlY3Rpb25BbmREZWxldGVBbGxDb2RlKTsKKyAgICAgICAgICAgIEdDQ29udHJvbGxlcjo6c2lu
Z2xldG9uKCkuZ2FyYmFnZUNvbGxlY3ROb3coKTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udC5jcHAKaW5kZXggMTVmOGQ2NTUwOGQ1Li5jODY3ZTM0Zjc5YjMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCkBAIC04NSw3ICs4NSw3IEBAIEZvbnQ6OkZv
bnQoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhLCBPcmlnaW4gb3JpZ2luLCBJ
bnRlcnN0aXRpYWwgaW50CiAgICAgLCBtX2lzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2sob3JpZW50
YXRpb25GYWxsYmFjayA9PSBPcmllbnRhdGlvbkZhbGxiYWNrOjpZZXMpCiAgICAgLCBtX2lzQnJv
a2VuSWRlb2dyYXBoRmFsbGJhY2soZmFsc2UpCiAgICAgLCBtX2hhc1ZlcnRpY2FsR2x5cGhzKGZh
bHNlKQotICAgICwgbV9pc1VzZWRJblN5c3RlbUZhbGxiYWNrQ2FjaGUoZmFsc2UpCisgICAgLCBt
X2lzVXNlZEluU3lzdGVtRmFsbGJhY2tGb250Q2FjaGUoZmFsc2UpCiAgICAgLCBtX2FsbG93c0Fu
dGlhbGlhc2luZyh0cnVlKQogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgLCBtX3Nob3Vs
ZE5vdEJlVXNlZEZvckFyYWJpYyhmYWxzZSkKQEAgLTE3NSw3ICsxNzUsNyBAQCB2b2lkIEZvbnQ6
OnBsYXRmb3JtR2x5cGhJbml0KCkKIAogRm9udDo6fkZvbnQoKQogewotICAgIHJlbW92ZUZyb21T
eXN0ZW1GYWxsYmFja0NhY2hlKCk7CisgICAgU3lzdGVtRmFsbGJhY2tGb250Q2FjaGU6OmZvckN1
cnJlbnRUaHJlYWQoKS5yZW1vdmUodGhpcyk7CiB9CiAKIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllciBGb250OjpyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSBjb25zdApAQCAtNTU0LDg5
ICs1NTQsOSBAQCBHbHlwaEJ1ZmZlckFkdmFuY2UgRm9udDo6YXBwbHlUcmFuc2Zvcm1zKEdseXBo
QnVmZmVyJiwgdW5zaWduZWQsIHVuc2lnbmVkLCBib29sLAogfQogI2VuZGlmCiAKLXN0cnVjdCBD
aGFyYWN0ZXJGYWxsYmFja01hcEtleSB7Ci0gICAgQXRvbVN0cmluZyBsb2NhbGU7Ci0gICAgVUNo
YXIzMiBjaGFyYWN0ZXIgeyAwIH07Ci0gICAgYm9vbCBpc0ZvclBsYXRmb3JtRm9udCB7IGZhbHNl
IH07Ci19OwotCi1pbmxpbmUgdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNvbnN0IENoYXJhY3Rl
ckZhbGxiYWNrTWFwS2V5JiBrZXkpCi17Ci0gICAgYWRkKGhhc2hlciwga2V5LmxvY2FsZSwga2V5
LmNoYXJhY3Rlciwga2V5LmlzRm9yUGxhdGZvcm1Gb250KTsKLX0KLQotaW5saW5lIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBDaGFyYWN0ZXJGYWxsYmFja01hcEtleSYgYSwgY29uc3QgQ2hhcmFjdGVy
RmFsbGJhY2tNYXBLZXkmIGIpCi17Ci0gICAgcmV0dXJuIGEubG9jYWxlID09IGIubG9jYWxlICYm
IGEuY2hhcmFjdGVyID09IGIuY2hhcmFjdGVyICYmIGEuaXNGb3JQbGF0Zm9ybUZvbnQgPT0gYi5p
c0ZvclBsYXRmb3JtRm9udDsKLX0KLQotc3RydWN0IENoYXJhY3RlckZhbGxiYWNrTWFwS2V5SGFz
aCB7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgQ2hhcmFjdGVyRmFsbGJhY2tNYXBL
ZXkmIGtleSkgeyByZXR1cm4gY29tcHV0ZUhhc2goa2V5KTsgfQotICAgIHN0YXRpYyBib29sIGVx
dWFsKGNvbnN0IENoYXJhY3RlckZhbGxiYWNrTWFwS2V5JiBhLCBjb25zdCBDaGFyYWN0ZXJGYWxs
YmFja01hcEtleSYgYikgeyByZXR1cm4gYSA9PSBiOyB9Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wg
c2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwotfTsKLQotc3RydWN0IENoYXJh
Y3RlckZhbGxiYWNrTWFwS2V5SGFzaFRyYWl0cyA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxDaGFy
YWN0ZXJGYWxsYmFja01hcEtleT4gewotICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRW
YWx1ZShDaGFyYWN0ZXJGYWxsYmFja01hcEtleSYgc2xvdCkgeyBuZXcgKE5vdE51bGwsICZzbG90
KSBDaGFyYWN0ZXJGYWxsYmFja01hcEtleSB7IHsgfSwgVV9TRU5USU5FTCwgeyB9IH07IH0KLSAg
ICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShjb25zdCBDaGFyYWN0ZXJGYWxsYmFja01hcEtl
eSYga2V5KSB7IHJldHVybiBrZXkuY2hhcmFjdGVyID09IFVfU0VOVElORUw7IH0KLX07Ci0KLS8v
IEZvbnRzIGFyZSBub3QgcmVmJ2QgdG8gYXZvaWQgY3ljbGVzLgotLy8gRklYTUU6IENvbnNpZGVy
IGNoYW5naW5nIHRoZXNlIG1hcHMgdG8gdXNlIFdlYWtQdHIgaW5zdGVhZCBvZiByYXcgcG9pbnRl
cnMuCi11c2luZyBDaGFyYWN0ZXJGYWxsYmFja01hcCA9IEhhc2hNYXA8Q2hhcmFjdGVyRmFsbGJh
Y2tNYXBLZXksIEZvbnQqLCBDaGFyYWN0ZXJGYWxsYmFja01hcEtleUhhc2gsIENoYXJhY3RlckZh
bGxiYWNrTWFwS2V5SGFzaFRyYWl0cz47Ci11c2luZyBTeXN0ZW1GYWxsYmFja0NhY2hlID0gSGFz
aE1hcDxjb25zdCBGb250KiwgQ2hhcmFjdGVyRmFsbGJhY2tNYXA+OwotCi1zdGF0aWMgU3lzdGVt
RmFsbGJhY2tDYWNoZSYgc3lzdGVtRmFsbGJhY2tDYWNoZSgpCi17Ci0gICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPFN5c3RlbUZhbGxiYWNrQ2FjaGU+IG1hcDsKLSAgICByZXR1cm4gbWFwLmdldCgp
OwotfQotCiBSZWZQdHI8Rm9udD4gRm9udDo6c3lzdGVtRmFsbGJhY2tGb250Rm9yQ2hhcmFjdGVy
KFVDaGFyMzIgY2hhcmFjdGVyLCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBJ
c0ZvclBsYXRmb3JtRm9udCBpc0ZvclBsYXRmb3JtRm9udCkgY29uc3QKIHsKLSAgICAvLyBGSVhN
RTogaHR0cHM6Ly9naXRodWIuY29tL3czYy9jc3N3Zy1kcmFmdHMvaXNzdWVzLzc0NDkgVGhpcyBm
dW5jdGlvbiBzaG91bGQgbmV2ZXIgcmV0dXJuIGEgd2ViIGZvbnQuCi0gICAgYXV0byBmb250QWRk
UmVzdWx0ID0gc3lzdGVtRmFsbGJhY2tDYWNoZSgpLmFkZCh0aGlzLCBDaGFyYWN0ZXJGYWxsYmFj
a01hcCgpKTsKLQotICAgIGlmICghY2hhcmFjdGVyKSB7Ci0gICAgICAgIFVDaGFyIGNvZGVVbml0
ID0gMDsKLSAgICAgICAgcmV0dXJuIEZvbnRDYWNoZTo6Zm9yQ3VycmVudFRocmVhZCgpLnN5c3Rl
bUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhkZXNjcmlwdGlvbiwgKnRoaXMsIGlzRm9yUGxhdGZvcm1G
b250LCBGb250Q2FjaGU6OlByZWZlckNvbG9yZWRGb250OjpObywgJmNvZGVVbml0LCAxKTsKLSAg
ICB9Ci0KLSAgICBhdXRvIGtleSA9IENoYXJhY3RlckZhbGxiYWNrTWFwS2V5IHsgZGVzY3JpcHRp
b24uY29tcHV0ZWRMb2NhbGUoKSwgY2hhcmFjdGVyLCBpc0ZvclBsYXRmb3JtRm9udCAhPSBJc0Zv
clBsYXRmb3JtRm9udDo6Tm8gfTsKLSAgICByZXR1cm4gZm9udEFkZFJlc3VsdC5pdGVyYXRvci0+
dmFsdWUuZW5zdXJlKFdURk1vdmUoa2V5KSwgWyZdIHsKLSAgICAgICAgVUNoYXIgY29kZVVuaXRz
WzJdOwotICAgICAgICB1bnNpZ25lZCBjb2RlVW5pdHNMZW5ndGg7Ci0gICAgICAgIGlmIChVX0lT
X0JNUChjaGFyYWN0ZXIpKSB7Ci0gICAgICAgICAgICBjb2RlVW5pdHNbMF0gPSBGb250Q2FzY2Fk
ZTo6bm9ybWFsaXplU3BhY2VzKGNoYXJhY3Rlcik7Ci0gICAgICAgICAgICBjb2RlVW5pdHNMZW5n
dGggPSAxOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29kZVVuaXRzWzBdID0gVTE2
X0xFQUQoY2hhcmFjdGVyKTsKLSAgICAgICAgICAgIGNvZGVVbml0c1sxXSA9IFUxNl9UUkFJTChj
aGFyYWN0ZXIpOwotICAgICAgICAgICAgY29kZVVuaXRzTGVuZ3RoID0gMjsKLSAgICAgICAgfQot
ICAgICAgICBhdXRvIGZvbnQgPSBGb250Q2FjaGU6OmZvckN1cnJlbnRUaHJlYWQoKS5zeXN0ZW1G
YWxsYmFja0ZvckNoYXJhY3RlcnMoZGVzY3JpcHRpb24sICp0aGlzLCBpc0ZvclBsYXRmb3JtRm9u
dCwgRm9udENhY2hlOjpQcmVmZXJDb2xvcmVkRm9udDo6Tm8sIGNvZGVVbml0cywgY29kZVVuaXRz
TGVuZ3RoKS5nZXQoKTsKLSAgICAgICAgaWYgKGZvbnQpCi0gICAgICAgICAgICBmb250LT5tX2lz
VXNlZEluU3lzdGVtRmFsbGJhY2tDYWNoZSA9IHRydWU7Ci0gICAgICAgIHJldHVybiBmb250Owot
ICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKLX0KLQotdm9pZCBGb250OjpyZW1vdmVGcm9tU3lzdGVt
RmFsbGJhY2tDYWNoZSgpCi17Ci0gICAgc3lzdGVtRmFsbGJhY2tDYWNoZSgpLnJlbW92ZSh0aGlz
KTsKLQotICAgIGlmICghbV9pc1VzZWRJblN5c3RlbUZhbGxiYWNrQ2FjaGUpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGZvciAoYXV0byYgY2hhcmFjdGVyTWFwIDogc3lzdGVtRmFsbGJhY2tDYWNo
ZSgpLnZhbHVlcygpKSB7Ci0gICAgICAgIFZlY3RvcjxDaGFyYWN0ZXJGYWxsYmFja01hcEtleSwg
NTEyPiB0b1JlbW92ZTsKLSAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6IGNoYXJhY3Rlck1hcCkg
ewotICAgICAgICAgICAgaWYgKGVudHJ5LnZhbHVlID09IHRoaXMpCi0gICAgICAgICAgICAgICAg
dG9SZW1vdmUuYXBwZW5kKGVudHJ5LmtleSk7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChhdXRv
JiBrZXkgOiB0b1JlbW92ZSkKLSAgICAgICAgICAgIGNoYXJhY3Rlck1hcC5yZW1vdmUoa2V5KTsK
LSAgICB9CisgICAgcmV0dXJuIFN5c3RlbUZhbGxiYWNrRm9udENhY2hlOjpmb3JDdXJyZW50VGhy
ZWFkKCkuc3lzdGVtRmFsbGJhY2tGb250Rm9yQ2hhcmFjdGVyKHRoaXMsIGNoYXJhY3RlciwgZGVz
Y3JpcHRpb24sIGlzRm9yUGxhdGZvcm1Gb250KTsKIH0KIAogI2lmICFQTEFURk9STShDT0NPQSkg
JiYgIVVTRShGUkVFVFlQRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaApp
bmRleCBiNTA0MTQ1ODRlODcuLjRkMzc4MzMxOGJiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnQuaApAQCAtMjExLDYgKzIxMSw5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
ZmxvYXQgYXNjZW50Q29uc2lkZXJpbmdNYWNBc2NlbnRIYWNrKGNvbnN0IFdDSEFSKiwgZmxvYXQg
YXNjZW50LCBmbG9hdCBkZXNjZW50KTsKICNlbmRpZgogCisgICAgdm9pZCBzZXRJc1VzZWRJblN5
c3RlbUZhbGxiYWNrRm9udENhY2hlKCkgeyBtX2lzVXNlZEluU3lzdGVtRmFsbGJhY2tGb250Q2Fj
aGUgPSB0cnVlOyB9CisgICAgYm9vbCBpc1VzZWRJblN5c3RlbUZhbGxiYWNrRm9udENhY2hlKCkg
Y29uc3QgeyByZXR1cm4gbV9pc1VzZWRJblN5c3RlbUZhbGxiYWNrRm9udENhY2hlOyB9CisKIHBy
aXZhdGU6CiAgICAgV0VCQ09SRV9FWFBPUlQgRm9udChjb25zdCBGb250UGxhdGZvcm1EYXRhJiwg
T3JpZ2luLCBJbnRlcnN0aXRpYWwsIFZpc2liaWxpdHksIE9yaWVudGF0aW9uRmFsbGJhY2ssIHN0
ZDo6b3B0aW9uYWw8UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyPik7CiAKQEAgLTIyNSw4ICsy
MjgsNiBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxGb250PiBjcmVhdGVTY2FsZWRGb250KGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYsIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdDsKICAgICBSZWZQdHI8
Rm9udD4gcGxhdGZvcm1DcmVhdGVTY2FsZWRGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGZs
b2F0IHNjYWxlRmFjdG9yKSBjb25zdDsKIAotICAgIHZvaWQgcmVtb3ZlRnJvbVN5c3RlbUZhbGxi
YWNrQ2FjaGUoKTsKLSAgICAKICAgICBzdHJ1Y3QgRGVyaXZlZEZvbnRzOwogICAgIERlcml2ZWRG
b250cyYgZW5zdXJlRGVyaXZlZEZvbnREYXRhKCkgY29uc3Q7CiAKQEAgLTMzOSw3ICszNDAsNyBA
QCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1faXNCcm9rZW5JZGVvZ3JhcGhGYWxsYmFjayA6IDE7
CiAgICAgdW5zaWduZWQgbV9oYXNWZXJ0aWNhbEdseXBocyA6IDE7CiAKLSAgICB1bnNpZ25lZCBt
X2lzVXNlZEluU3lzdGVtRmFsbGJhY2tDYWNoZSA6IDE7CisgICAgdW5zaWduZWQgbV9pc1VzZWRJ
blN5c3RlbUZhbGxiYWNrRm9udENhY2hlIDogMTsKICAgICAKICAgICB1bnNpZ25lZCBtX2FsbG93
c0FudGlhbGlhc2luZyA6IDE7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAub3JpZyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRDYWNoZS5jcHAub3JpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAuLjE5MDc5MzEyMjc1NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAub3JpZwpAQCAtMCwwICsxLDUxNCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBOaWNob2xhcyBTaGFua3MgPHdlYmtpdEBuaWNr
c2hhbmtzLmNvbT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUg
b2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisg
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGb250Q2FjaGUuaCIKKworI2luY2x1
ZGUgIkZvbnRDYXNjYWRlLmgiCisjaW5jbHVkZSAiRm9udENyZWF0aW9uQ29udGV4dC5oIgorI2lu
Y2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKKyNpbmNsdWRlICJGb250U2VsZWN0b3IuaCIKKyNp
bmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiU3lzdGVtRm9udERhdGFiYXNlLmgiCisjaW5j
bHVkZSAiVGhyZWFkR2xvYmFsRGF0YS5oIgorI2luY2x1ZGUgIldlYktpdEZvbnRGYW1pbHlOYW1l
cy5oIgorI2luY2x1ZGUgIldvcmtlck9yV29ya2xldFRocmVhZC5oIgorI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL01lbW9yeVByZXNzdXJlSGFuZGxlci5oPgorI2luY2x1
ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4K
KyNpbmNsdWRlIDx3dGYvVGhyZWFkU3BlY2lmaWMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9t
U3RyaW5nSGFzaC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKworI2lmIEVO
QUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKKyNpbmNsdWRlICJPcGVuVHlwZVZlcnRpY2FsRGF0YS5o
IgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IEZvbnRQbGF0Zm9ybURh
dGFDYWNoZUtleSB7CisgICAgRm9udERlc2NyaXB0aW9uS2V5IGRlc2NyaXB0aW9uS2V5OworICAg
IEZvbnRGYW1pbHlOYW1lIGZhbWlseTsKKyAgICBGb250Q3JlYXRpb25Db250ZXh0IGZvbnRDcmVh
dGlvbkNvbnRleHQ7Cit9OworCitpbmxpbmUgdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNvbnN0
IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSYga2V5KQoreworICAgIGFkZChoYXNoZXIsIGtleS5k
ZXNjcmlwdGlvbktleSwga2V5LmZhbWlseSwga2V5LmZvbnRDcmVhdGlvbkNvbnRleHQpOworfQor
CitzdGF0aWMgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSYg
YSwgY29uc3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5JiBiKQoreworICAgIHJldHVybiBhLmRl
c2NyaXB0aW9uS2V5ID09IGIuZGVzY3JpcHRpb25LZXkKKyAgICAgICAgJiYgYS5mYW1pbHkgPT0g
Yi5mYW1pbHkKKyAgICAgICAgJiYgYS5mb250Q3JlYXRpb25Db250ZXh0ID09IGIuZm9udENyZWF0
aW9uQ29udGV4dDsKK30KKworc3RydWN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleUhhc2ggewor
ICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSYg
a2V5KSB7IHJldHVybiBjb21wdXRlSGFzaChrZXkpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwo
Y29uc3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5JiBhLCBjb25zdCBGb250UGxhdGZvcm1EYXRh
Q2FjaGVLZXkmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCitzdHJ1Y3QgRm9u
dFBsYXRmb3JtRGF0YUNhY2hlS2V5SGFzaFRyYWl0cyA6IHB1YmxpYyBTaW1wbGVDbGFzc0hhc2hU
cmFpdHM8Rm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGVtcHR5VmFsdWVJc1plcm8gPSBmYWxzZTsKKyAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3RE
ZWxldGVkVmFsdWUoRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5JiBzbG90KQorICAgIHsKKyAgICAg
ICAgbmV3IChOb3ROdWxsLCAmc2xvdC5kZXNjcmlwdGlvbktleSkgRm9udERlc2NyaXB0aW9uS2V5
KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKTsKKyAgICB9CisgICAgc3RhdGljIGJvb2wgaXNE
ZWxldGVkVmFsdWUoY29uc3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5JiBrZXkpCisgICAgewor
ICAgICAgICByZXR1cm4ga2V5LmRlc2NyaXB0aW9uS2V5LmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVl
KCk7CisgICAgfQorfTsKKworc3RydWN0IEZvbnREYXRhQ2FjaGVLZXlIYXNoIHsKKyAgICBzdGF0
aWMgdW5zaWduZWQgaGFzaChjb25zdCBGb250UGxhdGZvcm1EYXRhJiBkYXRhKSB7IHJldHVybiBk
YXRhLmhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IEZvbnRQbGF0Zm9ybURh
dGEmIGEsIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRy
dWU7Cit9OworCitzdHJ1Y3QgRm9udERhdGFDYWNoZUtleVRyYWl0cyA6IFdURjo6R2VuZXJpY0hh
c2hUcmFpdHM8Rm9udFBsYXRmb3JtRGF0YT4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBl
bXB0eVZhbHVlSXNaZXJvID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3QgRm9udFBsYXRmb3JtRGF0
YSYgZW1wdHlWYWx1ZSgpCisgICAgeworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9u
dFBsYXRmb3JtRGF0YT4ga2V5KDAuZiwgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIGtl
eTsKKyAgICB9CisgICAgc3RhdGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKEZvbnRQbGF0
Zm9ybURhdGEmIHNsb3QpCisgICAgeworICAgICAgICBuZXcgKE5vdE51bGwsICZzbG90KSBGb250
UGxhdGZvcm1EYXRhKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKTsKKyAgICB9CisgICAgc3Rh
dGljIGJvb2wgaXNEZWxldGVkVmFsdWUoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gdmFsdWUuaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKTsKKyAg
ICB9Cit9OworCit1c2luZyBGb250UGxhdGZvcm1EYXRhQ2FjaGUgPSBIYXNoTWFwPEZvbnRQbGF0
Zm9ybURhdGFDYWNoZUtleSwgc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+LCBGb250
UGxhdGZvcm1EYXRhQ2FjaGVLZXlIYXNoLCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXlIYXNoVHJh
aXRzPjsKK3VzaW5nIEZvbnREYXRhQ2FjaGUgPSBIYXNoTWFwPEZvbnRQbGF0Zm9ybURhdGEsIFJl
ZjxGb250PiwgRm9udERhdGFDYWNoZUtleUhhc2gsIEZvbnREYXRhQ2FjaGVLZXlUcmFpdHM+Owor
I2lmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKK3VzaW5nIEZvbnRWZXJ0aWNhbERhdGFDYWNo
ZSA9IEhhc2hNYXA8Rm9udFBsYXRmb3JtRGF0YSwgUmVmUHRyPE9wZW5UeXBlVmVydGljYWxEYXRh
PiwgRm9udERhdGFDYWNoZUtleUhhc2gsIEZvbnREYXRhQ2FjaGVLZXlUcmFpdHM+OworI2VuZGlm
CisKK3N0cnVjdCBGb250Q2FjaGU6OkZvbnREYXRhQ2FjaGVzIHsKKyAgICBXVEZfTUFLRV9TVFJV
Q1RfRkFTVF9BTExPQ0FURUQ7CisKKyAgICBGb250RGF0YUNhY2hlIGRhdGE7CisgICAgRm9udFBs
YXRmb3JtRGF0YUNhY2hlIHBsYXRmb3JtRGF0YTsKKyNpZiBFTkFCTEUoT1BFTlRZUEVfVkVSVElD
QUwpCisgICAgRm9udFZlcnRpY2FsRGF0YUNhY2hlIHZlcnRpY2FsRGF0YTsKKyNlbmRpZgorfTsK
Kworc3RhdGljIEZvbnRDYWNoZSomIGZvbnRDYWNoZUZvckN1cnJlbnRUaHJlYWQoKQoreworICAg
IHN0YXRpYyBUaHJlYWRTcGVjaWZpYzxGb250Q2FjaGUqPiogZm9udENhY2hlOworICAgIHN0YXRp
YyBzdGQ6Om9uY2VfZmxhZyBvbmNlRmxhZzsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlRmxhZywg
W10geworICAgICAgICBmb250Q2FjaGUgPSBuZXcgVGhyZWFkU3BlY2lmaWM8Rm9udENhY2hlKj47
CisgICAgfSk7CisgICAgcmV0dXJuICoqZm9udENhY2hlOworfQorCitGb250Q2FjaGUmIEZvbnRD
YWNoZTo6Zm9yQ3VycmVudFRocmVhZCgpCit7CisgICAgYXV0byYgZm9udENhY2hlID0gZm9udENh
Y2hlRm9yQ3VycmVudFRocmVhZCgpOworICAgIGlmIChVTkxJS0VMWSghZm9udENhY2hlKSkKKyAg
ICAgICAgZm9udENhY2hlID0gbmV3IEZvbnRDYWNoZTsKKyAgICByZXR1cm4gKmZvbnRDYWNoZTsK
K30KKworRm9udENhY2hlKiBGb250Q2FjaGU6OmZvckN1cnJlbnRUaHJlYWRJZkV4aXN0cygpCit7
CisgICAgcmV0dXJuIGZvbnRDYWNoZUZvckN1cnJlbnRUaHJlYWQoKTsKK30KKwordm9pZCBGb250
Q2FjaGU6OmRlc3Ryb3koKQoreworICAgIGZvbnRDYWNoZUZvckN1cnJlbnRUaHJlYWQoKSA9IG51
bGxwdHI7Cit9CisKK0ZvbnRDYWNoZTo6Rm9udENhY2hlKCkKKyAgICA6IG1fcHVyZ2VUaW1lcigq
dGhpcywgJkZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhSWZOZWVkZWQpCisgICAgLCBt
X2ZvbnREYXRhQ2FjaGVzKG1ha2VVbmlxdWVSZWY8Rm9udERhdGFDYWNoZXM+KCkpCit7Cit9CisK
K0ZvbnRDYWNoZTo6fkZvbnRDYWNoZSgpID0gZGVmYXVsdDsKKworc3RkOjpvcHRpb25hbDxBU0NJ
SUxpdGVyYWw+IEZvbnRDYWNoZTo6YWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBTdHJpbmcmIGZh
bWlseU5hbWUpCit7CisgICAgaWYgKGF1dG8gcGxhdGZvcm1TcGVjaWZpY0FsdGVybmF0ZSA9IHBs
YXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShmYW1pbHlOYW1lKSkKKyAgICAgICAgcmV0dXJuIHBs
YXRmb3JtU3BlY2lmaWNBbHRlcm5hdGU7CisKKyAgICBzd2l0Y2ggKGZhbWlseU5hbWUubGVuZ3Ro
KCkpIHsKKyAgICBjYXNlIDU6CisgICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJ
Q2FzZShmYW1pbHlOYW1lLCAiYXJpYWwiX3MpKQorICAgICAgICAgICAgcmV0dXJuICJIZWx2ZXRp
Y2EiX3M7CisgICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHlO
YW1lLCAidGltZXMiX3MpKQorICAgICAgICAgICAgcmV0dXJuICJUaW1lcyBOZXcgUm9tYW4iX3M7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgNzoKKyAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0ln
bm9yaW5nQVNDSUlDYXNlKGZhbWlseU5hbWUsICJjb3VyaWVyIl9zKSkKKyAgICAgICAgICAgIHJl
dHVybiAiQ291cmllciBOZXciX3M7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgOToKKyAgICAg
ICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseU5hbWUsICJoZWx2ZXRp
Y2EiX3MpKQorICAgICAgICAgICAgcmV0dXJuICJBcmlhbCJfczsKKyAgICAgICAgYnJlYWs7Cisj
aWYgIU9TKFdJTkRPV1MpCisgICAgLy8gT24gV2luZG93cywgQ291cmllciBOZXcgaXMgYSBUcnVl
VHlwZSBmb250IHRoYXQgaXMgYWx3YXlzIHByZXNlbnQgYW5kCisgICAgLy8gQ291cmllciBpcyBh
IGJpdG1hcCBmb250IHRoYXQgd2UgZG8gbm90IHN1cHBvcnQuIFNvLCB3ZSBkb24ndCB3YW50IHRv
IG1hcAorICAgIC8vIENvdXJpZXIgTmV3IHRvIENvdXJpZXIuCisgICAgLy8gRklYTUU6IE5vdCBz
dXJlIHdoeSB0aGlzIGlzIGhhcm1mdWwgb24gV2luZG93cywgc2luY2UgdGhlIGFsdGVybmF0aXZl
IHdpbGwKKyAgICAvLyBvbmx5IGJlIHRyaWVkIGlmIENvdXJpZXIgTmV3IGlzIG5vdCBmb3VuZC4K
KyAgICBjYXNlIDExOgorICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uo
ZmFtaWx5TmFtZSwgImNvdXJpZXIgbmV3Il9zKSkKKyAgICAgICAgICAgIHJldHVybiAiQ291cmll
ciJfczsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICBjYXNlIDE1OgorICAgICAgICBpZiAo
ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5TmFtZSwgInRpbWVzIG5ldyByb21h
biJfcykpCisgICAgICAgICAgICByZXR1cm4gIlRpbWVzIl9zOworICAgICAgICBicmVhazsKKyAg
ICB9CisKKyAgICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCitGb250UGxhdGZvcm1EYXRhKiBG
b250Q2FjaGU6OmNhY2hlZEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBm
b250RGVzY3JpcHRpb24sIGNvbnN0IFN0cmluZyYgcGFzc2VkRmFtaWx5TmFtZSwgY29uc3QgRm9u
dENyZWF0aW9uQ29udGV4dCYgZm9udENyZWF0aW9uQ29udGV4dCwgYm9vbCBjaGVja2luZ0FsdGVy
bmF0ZU5hbWUpCit7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBMb2NrZXIgbG9ja2Vy
IHsgbV9mb250TG9jayB9OworI2VuZGlmCisKKyNpZiBPUyhXSU5ET1dTKSAmJiBFTkFCTEUoT1BF
TlRZUEVfVkVSVElDQUwpCisgICAgLy8gTGVhZGluZyAiQCIgaW4gdGhlIGZvbnQgbmFtZSBlbmFi
bGVzIFdpbmRvd3MgdmVydGljYWwgZmxvdyBmbGFnIGZvciB0aGUgZm9udC4KKyAgICAvLyBCZWNh
dXNlIHdlIGRvIHZlcnRpY2FsIGZsb3cgYnkgb3Vyc2VsdmVzLCB3ZSBkb24ndCB3YW50IHRvIHVz
ZSB0aGUgV2luZG93cyBmZWF0dXJlLgorICAgIC8vIElFIGRpc3JlZ2FyZHMgIkAiIHJlZ2FyZGxl
c3Mgb2YgdGhlIG9yaWVudGF0aW9uLCBzbyB3ZSBmb2xsb3cgdGhlIGJlaGF2aW9yLgorICAgIGF1
dG8gZmFtaWx5TmFtZSA9IFN0cmluZ1ZpZXcocGFzc2VkRmFtaWx5TmFtZSkuc3Vic3RyaW5nKHBh
c3NlZEZhbWlseU5hbWVbMF0gPT0gJ0AnID8gMSA6IDApLnRvQXRvbVN0cmluZygpOworI2Vsc2UK
KyAgICBBdG9tU3RyaW5nIGZhbWlseU5hbWUgeyBwYXNzZWRGYW1pbHlOYW1lIH07CisjZW5kaWYK
KworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlRmxhZzsKKyAgICBzdGQ6OmNhbGxfb25j
ZShvbmNlRmxhZywgWyZdKCkgeworICAgICAgICBwbGF0Zm9ybUluaXQoKTsKKyAgICB9KTsKKwor
ICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSBrZXkgeyBmb250RGVzY3JpcHRpb24sIHsgZmFt
aWx5TmFtZSB9LCBmb250Q3JlYXRpb25Db250ZXh0IH07CisKKyAgICBhdXRvIGFkZFJlc3VsdCA9
IG1fZm9udERhdGFDYWNoZXMtPnBsYXRmb3JtRGF0YS5hZGQoa2V5LCBudWxscHRyKTsKKyAgICBG
b250UGxhdGZvcm1EYXRhQ2FjaGU6Oml0ZXJhdG9yIGl0ID0gYWRkUmVzdWx0Lml0ZXJhdG9yOwor
ICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkgeworICAgICAgICBpdC0+dmFsdWUgPSBjcmVh
dGVGb250UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwgZmFtaWx5TmFtZSwgZm9udENyZWF0
aW9uQ29udGV4dCk7CisgICAgICAgIGlmICghaXQtPnZhbHVlICYmICFjaGVja2luZ0FsdGVybmF0
ZU5hbWUpIHsKKyAgICAgICAgICAgIC8vIFdlIHdlcmUgdW5hYmxlIHRvIGZpbmQgYSBmb250LiBX
ZSBoYXZlIGEgc21hbGwgc2V0IG9mIGZvbnRzIHRoYXQgd2UgYWxpYXMgdG8gb3RoZXIgbmFtZXMs
CisgICAgICAgICAgICAvLyBlLmcuLCBBcmlhbC9IZWx2ZXRpY2EsIENvdXJpZXIvQ291cmllciBO
ZXcsIGV0Yy4gVHJ5IGxvb2tpbmcgdXAgdGhlIGZvbnQgdW5kZXIgdGhlIGFsaWFzZWQgbmFtZS4K
KyAgICAgICAgICAgIGlmIChhdXRvIGFsdGVybmF0ZU5hbWUgPSBhbHRlcm5hdGVGYW1pbHlOYW1l
KGZhbWlseU5hbWUpKSB7CisgICAgICAgICAgICAgICAgYXV0byogYWx0ZXJuYXRlRGF0YSA9IGNh
Y2hlZEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uLCAqYWx0ZXJuYXRlTmFtZSwgZm9u
dENyZWF0aW9uQ29udGV4dCwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgLy8gTG9vayB1cCB0aGUg
a2V5IGluIHRoZSBoYXNoIHRhYmxlIGFnYWluIGFzIHRoZSBwcmV2aW91cyBpdGVyYXRvciBtYXkg
aGF2ZQorICAgICAgICAgICAgICAgIC8vIGJlZW4gaW52YWxpZGF0ZWQgYnkgdGhlIHJlY3Vyc2l2
ZSBjYWxsIHRvIGNhY2hlZEZvbnRQbGF0Zm9ybURhdGEoKS4KKyAgICAgICAgICAgICAgICBpdCA9
IG1fZm9udERhdGFDYWNoZXMtPnBsYXRmb3JtRGF0YS5maW5kKGtleSk7CisgICAgICAgICAgICAg
ICAgQVNTRVJUKGl0ICE9IG1fZm9udERhdGFDYWNoZXMtPnBsYXRmb3JtRGF0YS5lbmQoKSk7Cisg
ICAgICAgICAgICAgICAgaWYgKGFsdGVybmF0ZURhdGEpCisgICAgICAgICAgICAgICAgICAgIGl0
LT52YWx1ZSA9IG1ha2VVbmlxdWU8Rm9udFBsYXRmb3JtRGF0YT4oKmFsdGVybmF0ZURhdGEpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGl0LT52YWx1ZS5n
ZXQoKTsKK30KKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCitjb25zdCB1bnNpZ25lZCBjTWF4
SW5hY3RpdmVGb250RGF0YSA9IDEyMDsKK2NvbnN0IHVuc2lnbmVkIGNUYXJnZXRJbmFjdGl2ZUZv
bnREYXRhID0gMTAwOworI2Vsc2UKK2NvbnN0IHVuc2lnbmVkIGNNYXhJbmFjdGl2ZUZvbnREYXRh
ID0gMjI1OworY29uc3QgdW5zaWduZWQgY1RhcmdldEluYWN0aXZlRm9udERhdGEgPSAyMDA7Cisj
ZW5kaWYKKworY29uc3QgdW5zaWduZWQgY01heFVuZGVyTWVtb3J5UHJlc3N1cmVJbmFjdGl2ZUZv
bnREYXRhID0gNTA7Citjb25zdCB1bnNpZ25lZCBjVGFyZ2V0VW5kZXJNZW1vcnlQcmVzc3VyZUlu
YWN0aXZlRm9udERhdGEgPSAzMDsKKworUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6Zm9udEZvckZh
bWlseShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgU3RyaW5n
JiBmYW1pbHksIGNvbnN0IEZvbnRDcmVhdGlvbkNvbnRleHQmIGZvbnRDcmVhdGlvbkNvbnRleHQs
IGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1lKQoreworICAgIGlmICghbV9wdXJnZVRpbWVyLmlz
QWN0aXZlKCkpCisgICAgICAgIG1fcHVyZ2VUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKKworICAg
IGlmIChhdXRvKiBwbGF0Zm9ybURhdGEgPSBjYWNoZWRGb250UGxhdGZvcm1EYXRhKGZvbnREZXNj
cmlwdGlvbiwgZmFtaWx5LCBmb250Q3JlYXRpb25Db250ZXh0LCBjaGVja2luZ0FsdGVybmF0ZU5h
bWUpKQorICAgICAgICByZXR1cm4gZm9udEZvclBsYXRmb3JtRGF0YSgqcGxhdGZvcm1EYXRhKTsK
KworICAgIHJldHVybiBudWxscHRyOworfQorCitSZWY8Rm9udD4gRm9udENhY2hlOjpmb250Rm9y
UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSkKK3sKKyNp
ZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIExvY2tlciBsb2NrZXIgeyBtX2ZvbnRMb2NrIH07
CisjZW5kaWYKKworICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9mb250RGF0YUNhY2hlcy0+ZGF0YS5l
bnN1cmUocGxhdGZvcm1EYXRhLCBbJl0geworICAgICAgICByZXR1cm4gRm9udDo6Y3JlYXRlKHBs
YXRmb3JtRGF0YSwgRm9udDo6T3JpZ2luOjpMb2NhbCk7CisgICAgfSk7CisKKyAgICBBU1NFUlQo
YWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+cGxhdGZvcm1EYXRhKCkgPT0gcGxhdGZvcm1EYXRh
KTsKKworICAgIHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmNvcHlSZWYoKTsKK30K
Kwordm9pZCBGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YUlmTmVlZGVkKCkKK3sKKyAg
ICBib29sIHVuZGVyTWVtb3J5UHJlc3N1cmUgPSBNZW1vcnlQcmVzc3VyZUhhbmRsZXI6OnNpbmds
ZXRvbigpLmlzVW5kZXJNZW1vcnlQcmVzc3VyZSgpOworICAgIHVuc2lnbmVkIGluYWN0aXZlRm9u
dERhdGFMaW1pdCA9IHVuZGVyTWVtb3J5UHJlc3N1cmUgPyBjTWF4VW5kZXJNZW1vcnlQcmVzc3Vy
ZUluYWN0aXZlRm9udERhdGEgOiBjTWF4SW5hY3RpdmVGb250RGF0YTsKKworICAgIExPRyhGb250
cywgIkZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhSWZOZWVkZWQoKSAtIHVuZGVyTWVt
b3J5UHJlc3N1cmUgJWQsIGluYWN0aXZlRm9udERhdGFMaW1pdCAldSIsIHVuZGVyTWVtb3J5UHJl
c3N1cmUsIGluYWN0aXZlRm9udERhdGFMaW1pdCk7CisKKyAgICBpZiAobV9mb250RGF0YUNhY2hl
cy0+ZGF0YS5zaXplKCkgPCBpbmFjdGl2ZUZvbnREYXRhTGltaXQpCisgICAgICAgIHJldHVybjsK
KyAgICB1bnNpZ25lZCBpbmFjdGl2ZUNvdW50ID0gaW5hY3RpdmVGb250Q291bnQoKTsKKyAgICBp
ZiAoaW5hY3RpdmVDb3VudCA8PSBpbmFjdGl2ZUZvbnREYXRhTGltaXQpCisgICAgICAgIHJldHVy
bjsKKworICAgIHVuc2lnbmVkIHRhcmdldEZvbnREYXRhTGltaXQgPSB1bmRlck1lbW9yeVByZXNz
dXJlID8gY1RhcmdldFVuZGVyTWVtb3J5UHJlc3N1cmVJbmFjdGl2ZUZvbnREYXRhIDogY1Rhcmdl
dEluYWN0aXZlRm9udERhdGE7CisgICAgcHVyZ2VJbmFjdGl2ZUZvbnREYXRhKGluYWN0aXZlQ291
bnQgLSB0YXJnZXRGb250RGF0YUxpbWl0KTsKK30KKwordm9pZCBGb250Q2FjaGU6OnB1cmdlSW5h
Y3RpdmVGb250RGF0YSh1bnNpZ25lZCBwdXJnZUNvdW50KQoreworICAgIExPRyhGb250cywgIkZv
bnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhKCV1KSIsIHB1cmdlQ291bnQpOworCisgICAg
bV9mb250Q2FzY2FkZUNhY2hlLnBydW5lVW5yZWZlcmVuY2VkRW50cmllcygpOworICAgIG1fZm9u
dENhc2NhZGVDYWNoZS5wcnVuZVN5c3RlbUZhbGxiYWNrRm9udHMoKTsKKworI2lmIFBMQVRGT1JN
KElPU19GQU1JTFkpCisgICAgTG9ja2VyIGxvY2tlciB7IG1fZm9udExvY2sgfTsKKyNlbmRpZgor
CisgICAgd2hpbGUgKHB1cmdlQ291bnQpIHsKKyAgICAgICAgVmVjdG9yPFJlZjxGb250PiwgMjA+
IGZvbnRzVG9EZWxldGU7CisgICAgICAgIGZvciAoYXV0byYgZm9udCA6IG1fZm9udERhdGFDYWNo
ZXMtPmRhdGEudmFsdWVzKCkpIHsKKyAgICAgICAgICAgIExPRyhGb250cywgIiB0cnlpbmcgdG8g
cHVyZ2UgZm9udCAlcyAoaGFzIG9uZSByZWYgJWQpIiwgZm9udC0+cGxhdGZvcm1EYXRhKCkuZGVz
Y3JpcHRpb24oKS51dGY4KCkuZGF0YSgpLCBmb250LT5oYXNPbmVSZWYoKSk7CisgICAgICAgICAg
ICBpZiAoIWZvbnQtPmhhc09uZVJlZigpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgZm9udHNUb0RlbGV0ZS5hcHBlbmQoZm9udC5jb3B5UmVmKCkpOworICAgICAgICAg
ICAgaWYgKCEtLXB1cmdlQ291bnQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgLy8gRm9udHMgbWF5IHJlZiBvdGhlciBmb250cyBzbyB3ZSBsb29wIHVudGlsIHRo
ZXJlIGFyZSBubyBjaGFuZ2VzLgorICAgICAgICBpZiAoZm9udHNUb0RlbGV0ZS5pc0VtcHR5KCkp
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZm9yIChhdXRvJiBmb250IDogZm9udHNUb0Rl
bGV0ZSkgeworICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gbV9mb250RGF0YUNhY2hlcy0+ZGF0
YS5yZW1vdmUoZm9udC0+cGxhdGZvcm1EYXRhKCkpOworICAgICAgICAgICAgQVNTRVJUX1VOVVNF
RChzdWNjZXNzLCBzdWNjZXNzKTsKKyNpZiBFTkFCTEUoT1BFTlRZUEVfVkVSVElDQUwpCisgICAg
ICAgICAgICBtX2ZvbnREYXRhQ2FjaGVzLT52ZXJ0aWNhbERhdGEucmVtb3ZlKGZvbnQtPnBsYXRm
b3JtRGF0YSgpKTsKKyNlbmRpZgorICAgICAgICB9CisgICAgfTsKKworICAgIFZlY3RvcjxGb250
UGxhdGZvcm1EYXRhQ2FjaGVLZXk+IGtleXNUb1JlbW92ZTsKKyAgICBrZXlzVG9SZW1vdmUucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2ZvbnREYXRhQ2FjaGVzLT5wbGF0Zm9ybURhdGEuc2l6ZSgp
KTsKKyAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9mb250RGF0YUNhY2hlcy0+cGxhdGZvcm1EYXRh
KSB7CisgICAgICAgIGlmIChlbnRyeS52YWx1ZSAmJiAhbV9mb250RGF0YUNhY2hlcy0+ZGF0YS5j
b250YWlucygqZW50cnkudmFsdWUpKQorICAgICAgICAgICAga2V5c1RvUmVtb3ZlLnVuY2hlY2tl
ZEFwcGVuZChlbnRyeS5rZXkpOworICAgIH0KKworICAgIExPRyhGb250cywgIiByZW1vdmluZyAl
bHUga2V5cyIsIGtleXNUb1JlbW92ZS5zaXplKCkpOworCisgICAgZm9yIChhdXRvJiBrZXkgOiBr
ZXlzVG9SZW1vdmUpCisgICAgICAgIG1fZm9udERhdGFDYWNoZXMtPnBsYXRmb3JtRGF0YS5yZW1v
dmUoa2V5KTsKKworICAgIHBsYXRmb3JtUHVyZ2VJbmFjdGl2ZUZvbnREYXRhKCk7Cit9CisKKyNp
ZiBFTkFCTEUoT1BFTlRZUEVfVkVSVElDQUwpCitSZWZQdHI8T3BlblR5cGVWZXJ0aWNhbERhdGE+
IEZvbnRDYWNoZTo6dmVydGljYWxEYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3Jt
RGF0YSkKK3sKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fZm9udERhdGFDYWNoZXMtPnZlcnRpY2Fs
RGF0YS5lbnN1cmUocGxhdGZvcm1EYXRhLCBbJnBsYXRmb3JtRGF0YV0geworICAgICAgICByZXR1
cm4gT3BlblR5cGVWZXJ0aWNhbERhdGE6OmNyZWF0ZShwbGF0Zm9ybURhdGEpOworICAgIH0pOwor
ICAgIHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOworfQorI2VuZGlmCisKK3ZvaWQg
Rm9udENhY2hlOjp1cGRhdGVGb250Q2FzY2FkZShjb25zdCBGb250Q2FzY2FkZSYgZm9udENhc2Nh
ZGUsIFJlZlB0cjxGb250U2VsZWN0b3I+JiYgZm9udFNlbGVjdG9yKQoreworICAgIGZvbnRDYXNj
YWRlLnVwZGF0ZUZvbnRzKG1fZm9udENhc2NhZGVDYWNoZS5yZXRyaWV2ZU9yQWRkQ2FjaGVkRm9u
dHMoZm9udENhc2NhZGUuZm9udERlc2NyaXB0aW9uKCksIFdURk1vdmUoZm9udFNlbGVjdG9yKSkp
OworfQorCitzaXplX3QgRm9udENhY2hlOjpmb250Q291bnQoKQoreworICAgIHJldHVybiBtX2Zv
bnREYXRhQ2FjaGVzLT5kYXRhLnNpemUoKTsKK30KKworc2l6ZV90IEZvbnRDYWNoZTo6aW5hY3Rp
dmVGb250Q291bnQoKQoreworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgTG9ja2VyIGxv
Y2tlciB7IG1fZm9udExvY2sgfTsKKyNlbmRpZgorICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKKyAg
ICBmb3IgKGF1dG8mIGZvbnQgOiBtX2ZvbnREYXRhQ2FjaGVzLT5kYXRhLnZhbHVlcygpKSB7Cisg
ICAgICAgIGlmIChmb250LT5oYXNPbmVSZWYoKSkKKyAgICAgICAgICAgICsrY291bnQ7CisgICAg
fQorICAgIHJldHVybiBjb3VudDsKK30KKwordm9pZCBGb250Q2FjaGU6OmFkZENsaWVudChGb250
U2VsZWN0b3ImIGNsaWVudCkKK3sKKyAgICBBU1NFUlQoIW1fY2xpZW50cy5jb250YWlucygmY2xp
ZW50KSk7CisgICAgbV9jbGllbnRzLmFkZCgmY2xpZW50KTsKK30KKwordm9pZCBGb250Q2FjaGU6
OnJlbW92ZUNsaWVudChGb250U2VsZWN0b3ImIGNsaWVudCkKK3sKKyAgICBBU1NFUlQobV9jbGll
bnRzLmNvbnRhaW5zKCZjbGllbnQpKTsKKworICAgIG1fY2xpZW50cy5yZW1vdmUoJmNsaWVudCk7
Cit9CisKK3ZvaWQgRm9udENhY2hlOjppbnZhbGlkYXRlKCkKK3sKKyAgICBtX2ZvbnREYXRhQ2Fj
aGVzLT5wbGF0Zm9ybURhdGEuY2xlYXIoKTsKKyNpZiBFTkFCTEUoT1BFTlRZUEVfVkVSVElDQUwp
CisgICAgbV9mb250RGF0YUNhY2hlcy0+dmVydGljYWxEYXRhLmNsZWFyKCk7CisjZW5kaWYKKyAg
ICBtX2ZvbnRDYXNjYWRlQ2FjaGUuaW52YWxpZGF0ZSgpOworICAgIHBsYXRmb3JtSW52YWxpZGF0
ZSgpOworCisgICAgU3lzdGVtRm9udERhdGFiYXNlOjpzaW5nbGV0b24oKS5pbnZhbGlkYXRlKCk7
CisKKyAgICBwbGF0Zm9ybUludmFsaWRhdGUoKTsKKworICAgICsrbV9nZW5lcmF0aW9uOworCisg
ICAgZm9yIChhdXRvJiBjbGllbnQgOiBjb3B5VG9WZWN0b3JPZjxSZWZQdHI8Rm9udFNlbGVjdG9y
Pj4obV9jbGllbnRzKSkKKyAgICAgICAgY2xpZW50LT5mb250Q2FjaGVJbnZhbGlkYXRlZCgpOwor
CisgICAgcHVyZ2VJbmFjdGl2ZUZvbnREYXRhKCk7Cit9CisKK3N0YXRpYyBGdW5jdGlvbjx2b2lk
KCk+JiBmb250Q2FjaGVJbnZhbGlkYXRpb25DYWxsYmFjaygpCit7CisgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPEZ1bmN0aW9uPHZvaWQoKT4+IGNhbGxiYWNrOworICAgIHJldHVybiBjYWxsYmFj
ay5nZXQoKTsKK30KKwordm9pZCBGb250Q2FjaGU6OnJlZ2lzdGVyRm9udENhY2hlSW52YWxpZGF0
aW9uQ2FsbGJhY2soRnVuY3Rpb248dm9pZCgpPiYmIGNhbGxiYWNrKQoreworICAgIGZvbnRDYWNo
ZUludmFsaWRhdGlvbkNhbGxiYWNrKCkgPSBXVEZNb3ZlKGNhbGxiYWNrKTsKK30KKworPDw8PDw8
PCBIRUFECit2b2lkIEZvbnRDYWNoZTo6aW52YWxpZGF0ZUFsbEZvbnRDYWNoZXMoU2hvdWxkUnVu
SW52YWxpZGF0aW9uQ2FsbGJhY2sgc2hvdWxkUnVuSW52YWxpZGF0aW9uQ2FsbGJhY2spCit8fHx8
fHx8IHBhcmVudCBvZiA0YTZhNGQwZGI3ZWEgKE1ha2UgRm9udENhY2hlOjppbnZhbGlkYXRlQWxs
Rm9udENhY2hlcyBjYWxsIGludmFsaWRhdGUgb24gYWxsIHdvcmtlciBGb250Q2FjaGVzKQordm9p
ZCBGb250Q2FjaGU6OmludmFsaWRhdGVBbGxGb250Q2FjaGVzKCkKKz09PT09PT0KK3RlbXBsYXRl
PHR5cGVuYW1lIEY+CitzdGF0aWMgdm9pZCBjYWxsT25BbGxGb250Q2FjaGVzKEYgZnVuY3Rpb24p
Cis+Pj4+Pj4+IDRhNmE0ZDBkYjdlYSAoTWFrZSBGb250Q2FjaGU6OmludmFsaWRhdGVBbGxGb250
Q2FjaGVzIGNhbGwgaW52YWxpZGF0ZSBvbiBhbGwgd29ya2VyIEZvbnRDYWNoZXMpCit7CisgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIGZ1bmN0aW9uKEZvbnRDYWNoZTo6Zm9yQ3Vy
cmVudFRocmVhZCgpKTsKKworPDw8PDw8PCBIRUFECisgICAgaWYgKHNob3VsZFJ1bkludmFsaWRh
dGlvbkNhbGxiYWNrID09IFNob3VsZFJ1bkludmFsaWRhdGlvbkNhbGxiYWNrOjpZZXMgJiYgZm9u
dENhY2hlSW52YWxpZGF0aW9uQ2FsbGJhY2soKSkKKyAgICAgICAgZm9udENhY2hlSW52YWxpZGF0
aW9uQ2FsbGJhY2soKSgpOworfHx8fHx8fCBwYXJlbnQgb2YgNGE2YTRkMGRiN2VhIChNYWtlIEZv
bnRDYWNoZTo6aW52YWxpZGF0ZUFsbEZvbnRDYWNoZXMgY2FsbCBpbnZhbGlkYXRlIG9uIGFsbCB3
b3JrZXIgRm9udENhY2hlcykKKyAgICBpZiAoZm9udENhY2hlSW52YWxpZGF0aW9uQ2FsbGJhY2so
KSkKKyAgICAgICAgZm9udENhY2hlSW52YWxpZGF0aW9uQ2FsbGJhY2soKSgpOworPT09PT09PQor
ICAgIExvY2tlciBsb2NrZXIgeyBXb3JrZXJPcldvcmtsZXRUaHJlYWQ6Ondvcmtlck9yV29ya2xl
dFRocmVhZHNMb2NrKCkgfTsKKyAgICBmb3IgKGF1dG8gdGhyZWFkIDogV29ya2VyT3JXb3JrbGV0
VGhyZWFkOjp3b3JrZXJPcldvcmtsZXRUaHJlYWRzKCkpIHsKKyAgICAgICAgdGhyZWFkLT5ydW5M
b29wKCkucG9zdFRhc2soW2Z1bmN0aW9uXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JikgeworICAg
ICAgICAgICAgaWYgKGF1dG8gZm9udENhY2hlID0gRm9udENhY2hlOjpmb3JDdXJyZW50VGhyZWFk
SWZFeGlzdHMoKSkKKyAgICAgICAgICAgICAgICBmdW5jdGlvbigqZm9udENhY2hlKTsKKyAgICAg
ICAgfSk7CisgICAgfQorfQorCit2b2lkIEZvbnRDYWNoZTo6aW52YWxpZGF0ZUFsbEZvbnRDYWNo
ZXMoKQoreworICAgIGNhbGxPbkFsbEZvbnRDYWNoZXMoW10oRm9udENhY2hlJiBmb250Q2FjaGUp
IHsKKyAgICAgICAgZm9udENhY2hlLmludmFsaWRhdGUoKTsKKyAgICB9KTsKKz4+Pj4+Pj4gNGE2
YTRkMGRiN2VhIChNYWtlIEZvbnRDYWNoZTo6aW52YWxpZGF0ZUFsbEZvbnRDYWNoZXMgY2FsbCBp
bnZhbGlkYXRlIG9uIGFsbCB3b3JrZXIgRm9udENhY2hlcykKK30KKworYm9vbCBGb250Q2FjaGU6
OnVzZUJhY2tzbGFzaEFzWWVuU2lnbkZvckZhbWlseShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHkp
Cit7CisgICAgaWYgKGZhbWlseS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGlmIChtX2ZhbWlsaWVzVXNpbmdCYWNrc2xhc2hBc1llblNpZ24uaXNFbXB0eSgpKSB7Cisg
ICAgICAgIGF1dG8gYWRkID0gWyZdIChBU0NJSUxpdGVyYWwgbmFtZSwgc3RkOjppbml0aWFsaXpl
cl9saXN0PFVDaGFyPiB1bmljb2RlTmFtZSkgeworICAgICAgICAgICAgbV9mYW1pbGllc1VzaW5n
QmFja3NsYXNoQXNZZW5TaWduLmFkZChBdG9tU3RyaW5nIHsgbmFtZSB9KTsKKyAgICAgICAgICAg
IHVuc2lnbmVkIHVuaWNvZGVOYW1lTGVuZ3RoID0gdW5pY29kZU5hbWUuc2l6ZSgpOworICAgICAg
ICAgICAgbV9mYW1pbGllc1VzaW5nQmFja3NsYXNoQXNZZW5TaWduLmFkZChBdG9tU3RyaW5nIHsg
dW5pY29kZU5hbWUuYmVnaW4oKSwgdW5pY29kZU5hbWVMZW5ndGggfSk7CisgICAgICAgIH07Cisg
ICAgICAgIGFkZCgiTVMgUEdvdGhpYyJfcywgeyAweEZGMkQsIDB4RkYzMywgMHgwMDIwLCAweEZG
MzAsIDB4MzBCNCwgMHgzMEI3LCAweDMwQzMsIDB4MzBBRiB9KTsKKyAgICAgICAgYWRkKCJNUyBQ
TWluY2hvIl9zLCB7IDB4RkYyRCwgMHhGRjMzLCAweDAwMjAsIDB4RkYzMCwgMHg2NjBFLCAweDY3
MUQgfSk7CisgICAgICAgIGFkZCgiTVMgR290aGljIl9zLCB7IDB4RkYyRCwgMHhGRjMzLCAweDAw
MjAsIDB4MzBCNCwgMHgzMEI3LCAweDMwQzMsIDB4MzBBRiB9KTsKKyAgICAgICAgYWRkKCJNUyBN
aW5jaG8iX3MsIHsgMHhGRjJELCAweEZGMzMsIDB4MDAyMCwgMHg2NjBFLCAweDY3MUQgfSk7Cisg
ICAgICAgIGFkZCgiTWVpcnlvIl9zLCB7IDB4MzBFMSwgMHgzMEE0LCAweDMwRUEsIDB4MzBBQSB9
KTsKKyAgICB9CisKKyAgICByZXR1cm4gbV9mYW1pbGllc1VzaW5nQmFja3NsYXNoQXNZZW5TaWdu
LmNvbnRhaW5zKGZhbWlseSk7Cit9CisKKyNpZiAhUExBVEZPUk0oQ09DT0EpCisKK0ZvbnRDYWNo
ZTo6UHJld2FybUluZm9ybWF0aW9uIEZvbnRDYWNoZTo6Y29sbGVjdFByZXdhcm1JbmZvcm1hdGlv
bigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHsgfTsKK30KKwordm9pZCBGb250Q2FjaGU6OnByZXdh
cm1HbG9iYWxseSgpCit7Cit9CisKK3ZvaWQgRm9udENhY2hlOjpwcmV3YXJtKFByZXdhcm1JbmZv
cm1hdGlvbiYmKQoreworfQorCitSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpzaW1pbGFyRm9udChj
b25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBTdHJpbmcmKQoreworICAgIHJldHVybiBudWxs
cHRyOworfQorCit2b2lkIEZvbnRDYWNoZTo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKK3sKK30KKyNl
bmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYWNoZS5oCmluZGV4IDZhNDM0MGQ0ODFmYi4uZjgxZTZmYzRkM2M5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaApAQCAtMzUs
NiArMzUsNyBAQAogI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKICNpbmNsdWRlICJGb250
U2VsZWN0b3IuaCIKICNpbmNsdWRlICJGb250VGFnZ2VkU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJT
eXN0ZW1GYWxsYmFja0ZvbnRDYWNoZS5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8
YXJyYXk+CiAjaW5jbHVkZSA8bGltaXRzLmg+CkBAIC0zNzYsNiArMzc3LDggQEAgcHVibGljOgog
ICAgIHZvaWQgcHJld2FybShQcmV3YXJtSW5mb3JtYXRpb24mJik7CiAgICAgc3RhdGljIHZvaWQg
cHJld2FybUdsb2JhbGx5KCk7CiAKKyAgICBTeXN0ZW1GYWxsYmFja0ZvbnRDYWNoZSYgc3lzdGVt
RmFsbGJhY2tGb250Q2FjaGUoKSB7IHJldHVybiBtX3N5c3RlbUZhbGxiYWNrRm9udENhY2hlOyB9
CisKIHByaXZhdGU6CiAgICAgdm9pZCBpbnZhbGlkYXRlKCk7CiAgICAgdm9pZCBwbGF0Zm9ybUlu
dmFsaWRhdGUoKTsKQEAgLTQwMyw2ICs0MDYsNyBAQCBwcml2YXRlOgogICAgIHN0cnVjdCBGb250
RGF0YUNhY2hlczsKICAgICBVbmlxdWVSZWY8Rm9udERhdGFDYWNoZXM+IG1fZm9udERhdGFDYWNo
ZXM7CiAgICAgRm9udENhc2NhZGVDYWNoZSBtX2ZvbnRDYXNjYWRlQ2FjaGU7CisgICAgU3lzdGVt
RmFsbGJhY2tGb250Q2FjaGUgbV9zeXN0ZW1GYWxsYmFja0ZvbnRDYWNoZTsKIAogICAgIHVuc2ln
bmVkIHNob3J0IG1fZ2VuZXJhdGlvbiB7IDAgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgub3JpZyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oLm9yaWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwLi5iNTBhMjc4ODM5ZjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaC5vcmlnCkBAIC0wLDAgKzEsMjk0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggVG9yY2ggTW9iaWxlLCBJbmMu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMu
ICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZy
b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIkZvbnRDYXNjYWRlQ2FjaGUuaCIKKyNpbmNsdWRlICJGb250Q3JlYXRp
b25Db250ZXh0LmgiCisjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiRm9u
dFBsYXRmb3JtRGF0YS5oIgorI2luY2x1ZGUgIkZvbnRTZWxlY3Rvci5oIgorI2luY2x1ZGUgIkZv
bnRUYWdnZWRTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlN5c3RlbUZhbGxiYWNrRm9udENhY2hlLmgi
CisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlIDxhcnJheT4KKyNpbmNsdWRlIDxsaW1pdHMu
aD4KKyNpbmNsdWRlIDx3dGYvQ3Jvc3NUaHJlYWRDb3BpZXIuaD4KKyNpbmNsdWRlIDx3dGYvRmFz
dE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hG
dW5jdGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFRyYWl0cy5oPgorI2luY2x1ZGUgPHd0Zi9M
aXN0SGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9Qb2ludGVyQ29tcGFyaXNvbi5oPgorI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaFNldC5oPgorI2lu
Y2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVk
ZSA8d3RmL1dvcmtRdWV1ZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmdIYXNoLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKKyNpZiBQTEFURk9STShDT0NPQSkK
KyNpbmNsdWRlICJGb250Q2FjaGVDb3JlVGV4dC5oIgorI2luY2x1ZGUgIkZvbnREYXRhYmFzZS5o
IgorI2luY2x1ZGUgIkZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uQ29yZVRleHRDYWNoZS5oIgorI2lu
Y2x1ZGUgIlN5c3RlbUZvbnREYXRhYmFzZUNvcmVUZXh0LmgiCisjZW5kaWYKKworI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCisjaW5jbHVkZSA8d3RmL0xvY2suaD4KKyNpbmNsdWRlIDx3dGYvUmVj
dXJzaXZlTG9ja0FkYXB0ZXIuaD4KKyNlbmRpZgorCisjaWYgT1MoV0lORE9XUykKKyNpbmNsdWRl
IDx3aW5kb3dzLmg+CisjaW5jbHVkZSA8b2JqaWRsLmg+CisjaW5jbHVkZSA8bWxhbmcuaD4KKyNl
bmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZvbnQ7CitjbGFzcyBGb250Q2Fz
Y2FkZTsKK2NsYXNzIE9wZW5UeXBlVmVydGljYWxEYXRhOworCitlbnVtIGNsYXNzIElzRm9yUGxh
dGZvcm1Gb250IDogYm9vbDsKKworI2lmIFBMQVRGT1JNKFdJTikgJiYgVVNFKElNTEFOR19GT05U
X0xJTksyKQordXNpbmcgSU1MYW5nRm9udExpbmtUeXBlID0gSU1MYW5nRm9udExpbmsyOworI2Vu
ZGlmCisKKyNpZiBQTEFURk9STShXSU4pICYmICFVU0UoSU1MQU5HX0ZPTlRfTElOSzIpCit1c2lu
ZyBJTUxhbmdGb250TGlua1R5cGUgPSBJTUxhbmdGb250TGluazsKKyNlbmRpZgorCitjbGFzcyBG
b250Q2FjaGUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEZvbnRDYWNoZSk7IFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBGb250
Q2FjaGUmIGZvckN1cnJlbnRUaHJlYWQoKTsKKyAgICBzdGF0aWMgRm9udENhY2hlKiBmb3JDdXJy
ZW50VGhyZWFkSWZFeGlzdHMoKTsKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KCk7CisKKyAgICBG
b250Q2FjaGUoKTsKKyAgICB+Rm9udENhY2hlKCk7CisKKyAgICAvLyBUaGVzZSBtZXRob2RzIGFy
ZSBpbXBsZW1lbnRlZCBieSB0aGUgcGxhdGZvcm0uCisgICAgZW51bSBjbGFzcyBQcmVmZXJDb2xv
cmVkRm9udCA6IGJvb2wgeyBObywgWWVzIH07CisgICAgUmVmUHRyPEZvbnQ+IHN5c3RlbUZhbGxi
YWNrRm9yQ2hhcmFjdGVycyhjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBGb250JiBvcmln
aW5hbEZvbnREYXRhLCBJc0ZvclBsYXRmb3JtRm9udCwgUHJlZmVyQ29sb3JlZEZvbnQsIGNvbnN0
IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpOworICAgIFZlY3RvcjxTdHJpbmc+
IHN5c3RlbUZvbnRGYW1pbGllcygpOworICAgIHZvaWQgcGxhdGZvcm1Jbml0KCk7CisKKyAgICBz
dGF0aWMgYm9vbCBpc1N5c3RlbUZvbnRGb3JiaWRkZW5Gb3JFZGl0aW5nKGNvbnN0IFN0cmluZyYp
OworCisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQg
c2V0Rm9udEFsbG93bGlzdChjb25zdCBWZWN0b3I8U3RyaW5nPiYpOworI2VuZGlmCisKKyNpZiBQ
TEFURk9STShXSU4pCisgICAgSU1MYW5nRm9udExpbmtUeXBlKiBnZXRGb250TGlua0ludGVyZmFj
ZSgpOworICAgIHN0YXRpYyB2b2lkIGNvbUluaXRpYWxpemUoKTsKKyAgICBzdGF0aWMgdm9pZCBj
b21VbmluaXRpYWxpemUoKTsKKyAgICBzdGF0aWMgSU11bHRpTGFuZ3VhZ2UqIGdldE11bHRpTGFu
Z3VhZ2VJbnRlcmZhY2UoKTsKKyNlbmRpZgorCisgICAgLy8gVGhpcyBmdW5jdGlvbiBleGlzdHMg
c28gQ1NTRm9udFNlbGVjdG9yIGNhbiBoYXZlIGEgdW5pZmllZCBub3Rpb24gb2YgcHJlaW5zdGFs
bGVkIGZvbnRzIGFuZCBAZm9udC1mYWNlLgorICAgIC8vIEl0IGNvbWVzIGludG8gcGxheSB3aGVu
IHlvdSBjcmVhdGUgYW4gQGZvbnQtZmFjZSB3aGljaCBzaGFyZXMgYSBmYW1pbHkgbmFtZSBhcyBh
IHByZWluc3RhbGxlZCBmb250LgorICAgIFZlY3RvcjxGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVz
PiBnZXRGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzSW5GYW1pbHkoY29uc3QgQXRvbVN0cmluZyYs
IEFsbG93VXNlckluc3RhbGxlZEZvbnRzKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxG
b250PiBmb250Rm9yRmFtaWx5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IFN0cmluZyYs
IGNvbnN0IEZvbnRDcmVhdGlvbkNvbnRleHQmID0geyB9LCBib29sIGNoZWNraW5nQWx0ZXJuYXRl
TmFtZSA9IGZhbHNlKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBSZWY8Rm9udD4gbGFzdFJlc29ydEZh
bGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBS
ZWY8Rm9udD4gZm9udEZvclBsYXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJik7Cisg
ICAgUmVmUHRyPEZvbnQ+IHNpbWlsYXJGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0
IFN0cmluZyYgZmFtaWx5KTsKKworICAgIHZvaWQgYWRkQ2xpZW50KEZvbnRTZWxlY3RvciYpOwor
ICAgIHZvaWQgcmVtb3ZlQ2xpZW50KEZvbnRTZWxlY3RvciYpOworCisgICAgdW5zaWduZWQgc2hv
cnQgZ2VuZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZ2VuZXJhdGlvbjsgfQorICAgIHN0YXRp
YyB2b2lkIHJlZ2lzdGVyRm9udENhY2hlSW52YWxpZGF0aW9uQ2FsbGJhY2soRnVuY3Rpb248dm9p
ZCgpPiYmKTsKKworICAgIC8vIFRoZSBpbnZhbGlkYXRpb24gY2FsbGJhY2sgcnVucyBhIHN0eWxl
IHJlY2FsYyBvbiB0aGUgcGFnZS4KKyAgICAvLyBJZiB3ZSdyZSBpbnZhbGlkYXRpbmcgYmVjYXVz
ZSBvZiBtZW1vcnkgcHJlc3N1cmUsIHdlIHNob3VsZG4ndCBydW4gYSBzdHlsZSByZWNhbGMuCisg
ICAgLy8gQSBzdHlsZSByZWNhbGMgd291bGQganVzdCBhbGxvY2F0ZSBhIGJ1bmNoIG9mIHRoZSBt
ZW1vcnkgdGhhdCB3ZSdyZSB0cnlpbmcgdG8gcmVsZWFzZS4KKyAgICAvLyBPbiB0aGUgb3RoZXIg
aGFuZCwgaWYgd2UncmUgaW52YWxpZGF0aW5nIGJlY2F1c2UgdGhlIHNldCBvZiBpbnN0YWxsZWQg
Zm9udHMgY2hhbmdlZCwKKyAgICAvLyBvciBpZiBzb21lIGFjY2Vzc2liaWxpdHkgdGV4dCBzZXR0
aW5ncyB3ZXJlIGFsdGVyZWQsIHdlIHNob3VsZCBydW4gYSBzdHlsZSByZWNhbGMKKyAgICAvLyBz
byB0aGUgdXNlciBjYW4gaW1tZWRpYXRlbHkgc2VlIHRoZSBlZmZlY3Qgb2YgdGhlIG5ldyBlbnZp
cm9ubWVudC4KKyAgICBlbnVtIGNsYXNzIFNob3VsZFJ1bkludmFsaWRhdGlvbkNhbGxiYWNrIDog
Ym9vbCB7CisgICAgICAgIE5vLAorICAgICAgICBZZXMKKyAgICB9OworICAgIFdFQkNPUkVfRVhQ
T1JUIHN0YXRpYyB2b2lkIGludmFsaWRhdGVBbGxGb250Q2FjaGVzKFNob3VsZFJ1bkludmFsaWRh
dGlvbkNhbGxiYWNrID0gU2hvdWxkUnVuSW52YWxpZGF0aW9uQ2FsbGJhY2s6Olllcyk7CisKKyAg
ICBXRUJDT1JFX0VYUE9SVCBzaXplX3QgZm9udENvdW50KCk7CisgICAgV0VCQ09SRV9FWFBPUlQg
c2l6ZV90IGluYWN0aXZlRm9udENvdW50KCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwdXJn
ZUluYWN0aXZlRm9udERhdGEodW5zaWduZWQgY291bnQgPSBVSU5UX01BWCk7CisgICAgdm9pZCBw
bGF0Zm9ybVB1cmdlSW5hY3RpdmVGb250RGF0YSgpOworCisgICAgc3RhdGljIHZvaWQgcmVsZWFz
ZU5vbmNyaXRpY2FsTWVtb3J5SW5BbGxGb250Q2FjaGVzKCk7CisKKyAgICB2b2lkIHVwZGF0ZUZv
bnRDYXNjYWRlKGNvbnN0IEZvbnRDYXNjYWRlJiwgUmVmUHRyPEZvbnRTZWxlY3Rvcj4mJik7CisK
KyNpZiBQTEFURk9STShXSU4pCisgICAgUmVmUHRyPEZvbnQ+IGZvbnRGcm9tRGVzY3JpcHRpb25B
bmRMb2dGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IExPR0ZPTlQmLCBTdHJpbmcm
IG91dEZvbnRGYW1pbHlOYW1lKTsKKyNlbmRpZgorCisjaWYgRU5BQkxFKE9QRU5UWVBFX1ZFUlRJ
Q0FMKQorICAgIFJlZlB0cjxPcGVuVHlwZVZlcnRpY2FsRGF0YT4gdmVydGljYWxEYXRhKGNvbnN0
IEZvbnRQbGF0Zm9ybURhdGEmKTsKKyNlbmRpZgorCisgICAgc3RkOjp1bmlxdWVfcHRyPEZvbnRQ
bGF0Zm9ybURhdGE+IGNyZWF0ZUZvbnRQbGF0Zm9ybURhdGFGb3JUZXN0aW5nKGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSk7CisKKyAgICBzdHJ1Y3QgUHJl
d2FybUluZm9ybWF0aW9uIHsKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gc2VlbkZhbWlsaWVzOwor
ICAgICAgICBWZWN0b3I8U3RyaW5nPiBmb250TmFtZXNSZXF1aXJpbmdTeXN0ZW1GYWxsYmFjazsK
KworICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdDsKKyAgICAgICAgUHJld2FybUluZm9ybWF0
aW9uIGlzb2xhdGVkQ29weSgpIGNvbnN0ICYgeyByZXR1cm4geyBjcm9zc1RocmVhZENvcHkoc2Vl
bkZhbWlsaWVzKSwgY3Jvc3NUaHJlYWRDb3B5KGZvbnROYW1lc1JlcXVpcmluZ1N5c3RlbUZhbGxi
YWNrKSB9OyB9CisgICAgICAgIFByZXdhcm1JbmZvcm1hdGlvbiBpc29sYXRlZENvcHkoKSAmJiB7
IHJldHVybiB7IGNyb3NzVGhyZWFkQ29weShXVEZNb3ZlKHNlZW5GYW1pbGllcykpLCBjcm9zc1Ro
cmVhZENvcHkoV1RGTW92ZShmb250TmFtZXNSZXF1aXJpbmdTeXN0ZW1GYWxsYmFjaykpIH07IH0K
KworICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikg
Y29uc3Q7CisgICAgICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlv
bmFsPFByZXdhcm1JbmZvcm1hdGlvbj4gZGVjb2RlKERlY29kZXImKTsKKyAgICB9OworICAgIFBy
ZXdhcm1JbmZvcm1hdGlvbiBjb2xsZWN0UHJld2FybUluZm9ybWF0aW9uKCkgY29uc3Q7CisgICAg
dm9pZCBwcmV3YXJtKFByZXdhcm1JbmZvcm1hdGlvbiYmKTsKKyAgICBzdGF0aWMgdm9pZCBwcmV3
YXJtR2xvYmFsbHkoKTsKKworICAgIEZvbnRDYXNjYWRlQ2FjaGUmIGZvbnRDYXNjYWRlQ2FjaGUo
KSB7IHJldHVybiBtX2ZvbnRDYXNjYWRlQ2FjaGU7IH0KKyAgICBTeXN0ZW1GYWxsYmFja0ZvbnRD
YWNoZSYgc3lzdGVtRmFsbGJhY2tGb250Q2FjaGUoKSB7IHJldHVybiBtX3N5c3RlbUZhbGxiYWNr
Rm9udENhY2hlOyB9CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgRm9udEZhbWlseVNwZWNpZmlj
YXRpb25Db3JlVGV4dENhY2hlJiBmb250RmFtaWx5U3BlY2lmaWNhdGlvbkNvcmVUZXh0Q2FjaGUo
KSB7IHJldHVybiBtX2ZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uQ29yZVRleHRDYWNoZTsgfQorICAg
IFN5c3RlbUZvbnREYXRhYmFzZUNvcmVUZXh0JiBzeXN0ZW1Gb250RGF0YWJhc2VDb3JlVGV4dCgp
IHsgcmV0dXJuIG1fc3lzdGVtRm9udERhdGFiYXNlQ29yZVRleHQ7IH0KKyNlbmRpZgorCisgICAg
Ym9vbCB1c2VCYWNrc2xhc2hBc1llblNpZ25Gb3JGYW1pbHkoY29uc3QgQXRvbVN0cmluZyYgZmFt
aWx5KTsKKworcHJpdmF0ZToKKzw8PDw8PDwgSEVBRAorICAgIHZvaWQgaW52YWxpZGF0ZSgpOwor
fHx8fHx8fCBwYXJlbnQgb2YgNWMyMzI2OWRlODljIChQZXJmb3JtIG1lbW9yeSByZWxlYXNlIG9w
ZXJhdGlvbnMgaW4gYWxsIEZvbnRDYWNoZXMpCis9PT09PT09CisgICAgdm9pZCByZWxlYXNlTm9u
Y3JpdGljYWxNZW1vcnkoKTsKKyAgICB2b2lkIHBsYXRmb3JtUmVsZWFzZU5vbmNyaXRpY2FsTWVt
b3J5KCk7Cis+Pj4+Pj4+IDVjMjMyNjlkZTg5YyAoUGVyZm9ybSBtZW1vcnkgcmVsZWFzZSBvcGVy
YXRpb25zIGluIGFsbCBGb250Q2FjaGVzKQorICAgIHZvaWQgcGxhdGZvcm1JbnZhbGlkYXRlKCk7
CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHB1cmdlSW5hY3RpdmVGb250RGF0YUlmTmVlZGVk
KCk7CisKKyAgICBGb250UGxhdGZvcm1EYXRhKiBjYWNoZWRGb250UGxhdGZvcm1EYXRhKGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IFN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250Q3JlYXRp
b25Db250ZXh0JiA9IHsgfSwgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUgPSBmYWxzZSk7CisK
KyAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIGltcGxlbWVudGVkIGJ5IGVhY2ggcGxhdGZvcm0g
KHVuY2xlYXIgd2hpY2ggZnVuY3Rpb25zIHRoaXMgY29tbWVudCBhcHBsaWVzIHRvKS4KKyAgICBX
RUJDT1JFX0VYUE9SVCBzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4gY3JlYXRlRm9u
dFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9tU3RyaW5nJiBm
YW1pbHksIGNvbnN0IEZvbnRDcmVhdGlvbkNvbnRleHQmKTsKKyAgICAKKyAgICBzdGF0aWMgc3Rk
OjpvcHRpb25hbDxBU0NJSUxpdGVyYWw+IGFsdGVybmF0ZUZhbWlseU5hbWUoY29uc3QgU3RyaW5n
Jik7CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8QVNDSUlMaXRlcmFsPiBwbGF0Zm9ybUFsdGVy
bmF0ZUZhbWlseU5hbWUoY29uc3QgU3RyaW5nJik7CisKKyNpZiBQTEFURk9STShNQUMpCisgICAg
Ym9vbCBzaG91bGRBdXRvQWN0aXZhdGVGb250SWZOZWVkZWQoY29uc3QgQXRvbVN0cmluZyYgZmFt
aWx5KTsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgRm9udERhdGFiYXNlJiBk
YXRhYmFzZShBbGxvd1VzZXJJbnN0YWxsZWRGb250cyk7CisjZW5kaWYKKworICAgIFRpbWVyIG1f
cHVyZ2VUaW1lcjsKKworICAgIEhhc2hTZXQ8Rm9udFNlbGVjdG9yKj4gbV9jbGllbnRzOworICAg
IHN0cnVjdCBGb250RGF0YUNhY2hlczsKKyAgICBVbmlxdWVSZWY8Rm9udERhdGFDYWNoZXM+IG1f
Zm9udERhdGFDYWNoZXM7CisgICAgRm9udENhc2NhZGVDYWNoZSBtX2ZvbnRDYXNjYWRlQ2FjaGU7
CisgICAgU3lzdGVtRmFsbGJhY2tGb250Q2FjaGUgbV9zeXN0ZW1GYWxsYmFja0ZvbnRDYWNoZTsK
KyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4g
bV9mYW1pbGllc1VzaW5nQmFja3NsYXNoQXNZZW5TaWduOworCisgICAgdW5zaWduZWQgc2hvcnQg
bV9nZW5lcmF0aW9uIHsgMCB9OworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBSZWN1
cnNpdmVMb2NrIG1fZm9udExvY2s7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBI
YXNoU2V0PEF0b21TdHJpbmc+IG1fa25vd25GYW1pbGllczsKKyNlbmRpZgorCisjaWYgUExBVEZP
Uk0oQ09DT0EpCisgICAgRm9udERhdGFiYXNlIG1fZGF0YWJhc2VBbGxvd2luZ1VzZXJJbnN0YWxs
ZWRGb250cyB7IEFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpZZXMgfTsKKyAgICBGb250RGF0YWJh
c2UgbV9kYXRhYmFzZURpc2FsbG93aW5nVXNlckluc3RhbGxlZEZvbnRzIHsgQWxsb3dVc2VySW5z
dGFsbGVkRm9udHM6Ok5vIH07CisKKyAgICB1c2luZyBGYWxsYmFja0ZvbnRTZXQgPSBIYXNoU2V0
PFJldGFpblB0cjxDVEZvbnRSZWY+LCBXVEY6OlJldGFpblB0ck9iamVjdEhhc2g8Q1RGb250UmVm
PiwgV1RGOjpSZXRhaW5QdHJPYmplY3RIYXNoVHJhaXRzPENURm9udFJlZj4+OworICAgIEZhbGxi
YWNrRm9udFNldCBtX2ZhbGxiYWNrRm9udHM7CisKKyAgICBGb250RmFtaWx5U3BlY2lmaWNhdGlv
bkNvcmVUZXh0Q2FjaGUgbV9mb250RmFtaWx5U3BlY2lmaWNhdGlvbkNvcmVUZXh0Q2FjaGU7Cisg
ICAgU3lzdGVtRm9udERhdGFiYXNlQ29yZVRleHQgbV9zeXN0ZW1Gb250RGF0YWJhc2VDb3JlVGV4
dDsKKworICAgIExpc3RIYXNoU2V0PFN0cmluZz4gbV9zZWVuRmFtaWxpZXNGb3JQcmV3YXJtaW5n
OworICAgIExpc3RIYXNoU2V0PFN0cmluZz4gbV9mb250TmFtZXNSZXF1aXJpbmdTeXN0ZW1GYWxs
YmFja0ZvclByZXdhcm1pbmc7CisgICAgUmVmUHRyPFdvcmtRdWV1ZT4gbV9wcmV3YXJtUXVldWU7
CisKKyAgICBmcmllbmQgY2xhc3MgQ29tcGxleFRleHRDb250cm9sbGVyOworI2VuZGlmCisKKyAg
ICBmcmllbmQgY2xhc3MgRm9udDsKK307CisKK2lubGluZSBzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBs
YXRmb3JtRGF0YT4gRm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhRm9yVGVzdGluZyhj
b25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbVN0cmluZyYg
ZmFtaWx5KQoreworICAgIHJldHVybiBjcmVhdGVGb250UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlw
dGlvbiwgZmFtaWx5LCB7IH0pOworfQorCisjaWYgIVBMQVRGT1JNKENPQ09BKSAmJiAhVVNFKEZS
RUVUWVBFKQorCitpbmxpbmUgdm9pZCBGb250Q2FjaGU6OnBsYXRmb3JtUHVyZ2VJbmFjdGl2ZUZv
bnREYXRhKCkKK3sKK30KKworI2VuZGlmCisKK2lubGluZSBib29sIEZvbnRDYWNoZTo6UHJld2Fy
bUluZm9ybWF0aW9uOjppc0VtcHR5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gc2VlbkZhbWlsaWVz
LmlzRW1wdHkoKSAmJiBmb250TmFtZXNSZXF1aXJpbmdTeXN0ZW1GYWxsYmFjay5pc0VtcHR5KCk7
Cit9CisKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIEZvbnRDYWNoZTo6UHJld2FybUlu
Zm9ybWF0aW9uOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVy
IDw8IHNlZW5GYW1pbGllczsKKyAgICBlbmNvZGVyIDw8IGZvbnROYW1lc1JlcXVpcmluZ1N5c3Rl
bUZhbGxiYWNrOworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorc3RkOjpvcHRpb25hbDxG
b250Q2FjaGU6OlByZXdhcm1JbmZvcm1hdGlvbj4gRm9udENhY2hlOjpQcmV3YXJtSW5mb3JtYXRp
b246OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIFByZXdhcm1JbmZvcm1hdGlvbiBw
cmV3YXJtSW5mb3JtYXRpb247CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShwcmV3YXJtSW5mb3Jt
YXRpb24uc2VlbkZhbWlsaWVzKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHByZXdhcm1JbmZvcm1hdGlvbi5mb250TmFtZXNSZXF1aXJpbmdTeXN0ZW1GYWxs
YmFjaykpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICByZXR1cm4gcHJld2FybUluZm9ybWF0
aW9uOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9TeXN0ZW1GYWxsYmFja0ZvbnRDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9TeXN0ZW1GYWxsYmFja0ZvbnRDYWNoZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwLi5jNWI2N2NlYzUwYjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TeXN0ZW1GYWxsYmFja0ZvbnRDYWNoZS5jcHAK
QEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJv
c2t1cnlha292CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBB
cHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAor
ICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3lzdGVtRmFsbGJhY2tGb250Q2FjaGUuaCIK
KworI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworU3lzdGVtRmFsbGJhY2tGb250Q2FjaGUmIFN5c3RlbUZhbGxi
YWNrRm9udENhY2hlOjpmb3JDdXJyZW50VGhyZWFkKCkKK3sKKyAgICByZXR1cm4gRm9udENhY2hl
Ojpmb3JDdXJyZW50VGhyZWFkKCkuc3lzdGVtRmFsbGJhY2tGb250Q2FjaGUoKTsKK30KKworUmVm
UHRyPEZvbnQ+IFN5c3RlbUZhbGxiYWNrRm9udENhY2hlOjpzeXN0ZW1GYWxsYmFja0ZvbnRGb3JD
aGFyYWN0ZXIoY29uc3QgRm9udCogZm9udCwgVUNoYXIzMiBjaGFyYWN0ZXIsIGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIElzRm9yUGxhdGZvcm1Gb250IGlzRm9yUGxhdGZvcm1G
b250KQoreworICAgIGF1dG8gZm9udEFkZFJlc3VsdCA9IG1fY2hhcmFjdGVyRmFsbGJhY2tNYXBz
LmFkZChmb250LCBDaGFyYWN0ZXJGYWxsYmFja01hcCgpKTsKKworICAgIGlmICghY2hhcmFjdGVy
KSB7CisgICAgICAgIFVDaGFyIGNvZGVVbml0ID0gMDsKKyAgICAgICAgcmV0dXJuIEZvbnRDYWNo
ZTo6Zm9yQ3VycmVudFRocmVhZCgpLnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhkZXNjcmlw
dGlvbiwgKmZvbnQsIGlzRm9yUGxhdGZvcm1Gb250LCBGb250Q2FjaGU6OlByZWZlckNvbG9yZWRG
b250OjpObywgJmNvZGVVbml0LCAxKTsKKyAgICB9CisKKyAgICBhdXRvIGtleSA9IENoYXJhY3Rl
ckZhbGxiYWNrTWFwS2V5IHsgZGVzY3JpcHRpb24uY29tcHV0ZWRMb2NhbGUoKSwgY2hhcmFjdGVy
LCBpc0ZvclBsYXRmb3JtRm9udCAhPSBJc0ZvclBsYXRmb3JtRm9udDo6Tm8gfTsKKyAgICByZXR1
cm4gZm9udEFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZW5zdXJlKFdURk1vdmUoa2V5KSwgWyZd
IHsKKyAgICAgICAgVUNoYXIgY29kZVVuaXRzWzJdOworICAgICAgICB1bnNpZ25lZCBjb2RlVW5p
dHNMZW5ndGg7CisgICAgICAgIGlmIChVX0lTX0JNUChjaGFyYWN0ZXIpKSB7CisgICAgICAgICAg
ICBjb2RlVW5pdHNbMF0gPSBGb250Q2FzY2FkZTo6bm9ybWFsaXplU3BhY2VzKGNoYXJhY3Rlcik7
CisgICAgICAgICAgICBjb2RlVW5pdHNMZW5ndGggPSAxOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgY29kZVVuaXRzWzBdID0gVTE2X0xFQUQoY2hhcmFjdGVyKTsKKyAgICAgICAgICAg
IGNvZGVVbml0c1sxXSA9IFUxNl9UUkFJTChjaGFyYWN0ZXIpOworICAgICAgICAgICAgY29kZVVu
aXRzTGVuZ3RoID0gMjsKKyAgICAgICAgfQorICAgICAgICBhdXRvIGZhbGxiYWNrRm9udCA9IEZv
bnRDYWNoZTo6Zm9yQ3VycmVudFRocmVhZCgpLnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhk
ZXNjcmlwdGlvbiwgKmZvbnQsIGlzRm9yUGxhdGZvcm1Gb250LCBGb250Q2FjaGU6OlByZWZlckNv
bG9yZWRGb250OjpObywgY29kZVVuaXRzLCBjb2RlVW5pdHNMZW5ndGgpLmdldCgpOworICAgICAg
ICBpZiAoZmFsbGJhY2tGb250KQorICAgICAgICAgICAgZmFsbGJhY2tGb250LT5zZXRJc1VzZWRJ
blN5c3RlbUZhbGxiYWNrRm9udENhY2hlKCk7CisgICAgICAgIHJldHVybiBmYWxsYmFja0ZvbnQ7
CisgICAgfSkuaXRlcmF0b3ItPnZhbHVlOworfQorCit2b2lkIFN5c3RlbUZhbGxiYWNrRm9udENh
Y2hlOjpyZW1vdmUoRm9udCogZm9udCkKK3sKKyAgICBtX2NoYXJhY3RlckZhbGxiYWNrTWFwcy5y
ZW1vdmUoZm9udCk7CisKKyAgICBpZiAoIWZvbnQtPmlzVXNlZEluU3lzdGVtRmFsbGJhY2tGb250
Q2FjaGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChhdXRvJiBjaGFyYWN0ZXJNYXAg
OiBtX2NoYXJhY3RlckZhbGxiYWNrTWFwcy52YWx1ZXMoKSkgeworICAgICAgICBWZWN0b3I8Q2hh
cmFjdGVyRmFsbGJhY2tNYXBLZXksIDUxMj4gdG9SZW1vdmU7CisgICAgICAgIGZvciAoYXV0byYg
ZW50cnkgOiBjaGFyYWN0ZXJNYXApIHsKKyAgICAgICAgICAgIGlmIChlbnRyeS52YWx1ZSA9PSBm
b250KQorICAgICAgICAgICAgICAgIHRvUmVtb3ZlLmFwcGVuZChlbnRyeS5rZXkpOworICAgICAg
ICB9CisgICAgICAgIGZvciAoYXV0byYga2V5IDogdG9SZW1vdmUpCisgICAgICAgICAgICBjaGFy
YWN0ZXJNYXAucmVtb3ZlKGtleSk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TeXN0ZW1GYWxs
YmFja0ZvbnRDYWNoZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3lzdGVt
RmFsbGJhY2tGb250Q2FjaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAuLmE3ODQ0OWIxNTgzNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1N5c3RlbUZhbGxiYWNrRm9udENhY2hlLmgKQEAgLTAsMCArMSw4OSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292CisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBs
ZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hUcmFpdHMuaD4KKyNp
bmNsdWRlIDx3dGYvSGFzaGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZy5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZvbnQ7CitjbGFzcyBGb250RGVzY3JpcHRp
b247CitlbnVtIGNsYXNzIElzRm9yUGxhdGZvcm1Gb250IDogYm9vbDsKKyAgICAKK3N0cnVjdCBD
aGFyYWN0ZXJGYWxsYmFja01hcEtleSB7CisgICAgQXRvbVN0cmluZyBsb2NhbGU7CisgICAgVUNo
YXIzMiBjaGFyYWN0ZXIgeyAwIH07CisgICAgYm9vbCBpc0ZvclBsYXRmb3JtRm9udCB7IGZhbHNl
IH07CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXkm
IG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGxvY2FsZSA9PSBvdGhlci5sb2Nh
bGUgJiYgY2hhcmFjdGVyID09IG90aGVyLmNoYXJhY3RlciAmJiBpc0ZvclBsYXRmb3JtRm9udCA9
PSBvdGhlci5pc0ZvclBsYXRmb3JtRm9udDsKKyAgICB9Cit9OworCitpbmxpbmUgdm9pZCBhZGQo
SGFzaGVyJiBoYXNoZXIsIGNvbnN0IENoYXJhY3RlckZhbGxiYWNrTWFwS2V5JiBrZXkpCit7Cisg
ICAgYWRkKGhhc2hlciwga2V5LmxvY2FsZSwga2V5LmNoYXJhY3Rlciwga2V5LmlzRm9yUGxhdGZv
cm1Gb250KTsKK30KKworc3RydWN0IENoYXJhY3RlckZhbGxiYWNrTWFwS2V5SGFzaCB7CisgICAg
c3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXkmIGtleSkg
eyByZXR1cm4gY29tcHV0ZUhhc2goa2V5KTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0
IENoYXJhY3RlckZhbGxiYWNrTWFwS2V5JiBhLCBjb25zdCBDaGFyYWN0ZXJGYWxsYmFja01hcEtl
eSYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29t
cGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKworY2xhc3MgU3lzdGVtRmFsbGJhY2tG
b250Q2FjaGUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN5c3RlbUZhbGxiYWNrRm9udENh
Y2hlKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
U3lzdGVtRmFsbGJhY2tGb250Q2FjaGUmIGZvckN1cnJlbnRUaHJlYWQoKTsKKworICAgIFN5c3Rl
bUZhbGxiYWNrRm9udENhY2hlKCkgPSBkZWZhdWx0OworCisgICAgUmVmUHRyPEZvbnQ+IHN5c3Rl
bUZhbGxiYWNrRm9udEZvckNoYXJhY3Rlcihjb25zdCBGb250KiwgVUNoYXIzMiBjaGFyYWN0ZXIs
IGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIElzRm9yUGxhdGZvcm1Gb250KTsKKyAgICB2b2lkIHJl
bW92ZShGb250Kik7CisKK3ByaXZhdGU6CisgICAgc3RydWN0IENoYXJhY3RlckZhbGxiYWNrTWFw
S2V5SGFzaFRyYWl0cyA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxDaGFyYWN0ZXJGYWxsYmFja01h
cEtleT4geworICAgICAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoQ2hhcmFj
dGVyRmFsbGJhY2tNYXBLZXkmIHNsb3QpIHsgbmV3IChOb3ROdWxsLCAmc2xvdCkgQ2hhcmFjdGVy
RmFsbGJhY2tNYXBLZXkgeyB7IH0sIFVfU0VOVElORUwsIHsgfSB9OyB9CisgICAgICAgIHN0YXRp
YyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IENoYXJhY3RlckZhbGxiYWNrTWFwS2V5JiBrZXkp
IHsgcmV0dXJuIGtleS5jaGFyYWN0ZXIgPT0gVV9TRU5USU5FTDsgfQorICAgIH07CisKKyAgICAv
LyBGb250cyBhcmUgbm90IHJlZidkIHRvIGF2b2lkIGN5Y2xlcy4KKyAgICAvLyBGSVhNRTogQ29u
c2lkZXIgY2hhbmdpbmcgdGhlc2UgbWFwcyB0byB1c2UgV2Vha1B0ciBpbnN0ZWFkIG9mIHJhdyBw
b2ludGVycy4KKyAgICB1c2luZyBDaGFyYWN0ZXJGYWxsYmFja01hcCA9IEhhc2hNYXA8Q2hhcmFj
dGVyRmFsbGJhY2tNYXBLZXksIEZvbnQqLCBDaGFyYWN0ZXJGYWxsYmFja01hcEtleUhhc2gsIENo
YXJhY3RlckZhbGxiYWNrTWFwS2V5SGFzaFRyYWl0cz47CisKKyAgICBIYXNoTWFwPGNvbnN0IEZv
bnQqLCBDaGFyYWN0ZXJGYWxsYmFja01hcD4gbV9jaGFyYWN0ZXJGYWxsYmFja01hcHM7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250Q2FzY2FkZUNvcmVUZXh0LmNwcC5vcmlnIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVDb3JlVGV4
dC5jcHAub3JpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjI5YmIy
NDQ3ZjJmMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvcmV0ZXh0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwLm9yaWcKQEAgLTAsMCArMSw1MDEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykK
KyAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykK
KyAqICAgICAgICAgICAoQykgMjAwMCBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKKyAq
IENvcHlyaWdodCAoQykgMjAwMy0yMDIyIEFwcGxlIEluYy4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCisKKyNpbmNsdWRlICJDb21wbGV4VGV4dENvbnRyb2xs
ZXIuaCIKKyNpbmNsdWRlICJEYXNoQXJyYXkuaCIKKyNpbmNsdWRlICJGb250LmgiCisjaW5jbHVk
ZSAiR2x5cGhCdWZmZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRl
ICJMYXlvdXRSZWN0LmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlJ1bnRpbWVB
cHBsaWNhdGlvbkNoZWNrcy5oIgorI2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJ
Lmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKworI2lmIFBMQVRGT1JNKENPQ09BKQor
I2luY2x1ZGUgPHBhbC9zcGkvY2YvQ29yZVRleHRTUEkuaD4KKyNlbHNlCisjaW5jbHVkZSA8cGFs
L3NwaS93aW4vQ29yZVRleHRTUElXaW4uaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK0ZvbnRDYXNjYWRlOjpGb250Q2FzY2FkZShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBmb250
RGF0YSwgRm9udFNtb290aGluZ01vZGUgZm9udFNtb290aGluZ01vZGUpCisgICAgOiBtX2ZvbnRz
KEZvbnRDYXNjYWRlRm9udHM6OmNyZWF0ZUZvclBsYXRmb3JtRm9udChmb250RGF0YSkpCisgICAg
LCBtX2VuYWJsZUtlcm5pbmcoY29tcHV0ZUVuYWJsZUtlcm5pbmcoKSkKKyAgICAsIG1fcmVxdWly
ZXNTaGFwaW5nKGNvbXB1dGVSZXF1aXJlc1NoYXBpbmcoKSkKK3sKKyAgICBtX2ZvbnREZXNjcmlw
dGlvbi5zZXRGb250U21vb3RoaW5nKGZvbnRTbW9vdGhpbmdNb2RlKTsKKyAgICBtX2ZvbnREZXNj
cmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKENURm9udEdldFNpemUoZm9udERhdGEuY3RGb250KCkp
KTsKKyAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoQ1RGb250R2V0U2l6ZShm
b250RGF0YS5jdEZvbnQoKSkpOworICAgIG1fZm9udERlc2NyaXB0aW9uLnNldElzSXRhbGljKENU
Rm9udEdldFN5bWJvbGljVHJhaXRzKGZvbnREYXRhLmN0Rm9udCgpKSAmIGtDVEZvbnRUcmFpdEl0
YWxpYyk7CisgICAgbV9mb250RGVzY3JpcHRpb24uc2V0V2VpZ2h0KChDVEZvbnRHZXRTeW1ib2xp
Y1RyYWl0cyhmb250RGF0YS5jdEZvbnQoKSkgJiBrQ1RGb250VHJhaXRCb2xkKSA/IGJvbGRXZWln
aHRWYWx1ZSgpIDogbm9ybWFsV2VpZ2h0VmFsdWUoKSk7Cit9CisKKzw8PDw8PDwgSEVBRAorc3Rh
dGljIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcm90YXRlTGVmdFRyYW5zZm9ybSgpCit7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBBZmZpbmVUcmFuc2Zvcm0gcmVzdWx0KDAsIC0xLCAxLCAwLCAwLCAw
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorfHx8fHx8fCBwYXJlbnQgb2YgNWMyNjc3ODJjN2Vk
ICggQ29udmVydCByb3RhdGVMZWZ0VHJhbnNmb3JtKCkgaW50byBhIHN0YXRpYyBjb25zdGV4cHIg
dmFyaWFibGUpCitzdGF0aWMgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiByb3RhdGVMZWZ0VHJhbnNm
b3JtKCkKK3sKKyAgICBzdGF0aWMgQWZmaW5lVHJhbnNmb3JtIHJlc3VsdCgwLCAtMSwgMSwgMCwg
MCwgMCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKz09PT09PT0KK3N0YXRpYyBjb25zdGV4cHIg
QWZmaW5lVHJhbnNmb3JtIHJvdGF0ZUxlZnRUcmFuc2Zvcm0geyAwLCAtMSwgMSwgMCwgMCwgMCB9
OworPj4+Pj4+PiA1YzI2Nzc4MmM3ZWQgKCBDb252ZXJ0IHJvdGF0ZUxlZnRUcmFuc2Zvcm0oKSBp
bnRvIGEgc3RhdGljIGNvbnN0ZXhwciB2YXJpYWJsZSkKKworQWZmaW5lVHJhbnNmb3JtIGNvbXB1
dGVCYXNlT3ZlcmFsbFRleHRNYXRyaXgoY29uc3Qgc3RkOjpvcHRpb25hbDxBZmZpbmVUcmFuc2Zv
cm0+JiBzeW50aGV0aWNPYmxpcXVlKQoreworICAgIEFmZmluZVRyYW5zZm9ybSByZXN1bHQ7CisK
KyAgICAvLyBUaGlzIGlzIGEgWS1mbGlwLCBiZWNhdXNlIHRleHQncyBjb29yZGluYXRlIHN5c3Rl
bSBpcyBpbmNyZWFzaW5nLVktZ29lcy11cCwKKyAgICAvLyBidXQgV2ViS2l0J3MgY29vcmRpbmF0
ZSBzeXN0ZW0gaXMgaW5jcmVhc2luZy1ZLWdvZXMtZG93bi4KKyAgICByZXN1bHQuc2V0QigtcmVz
dWx0LmIoKSk7CisgICAgcmVzdWx0LnNldEQoLXJlc3VsdC5kKCkpOworCisgICAgaWYgKHN5bnRo
ZXRpY09ibGlxdWUpCisgICAgICAgIHJlc3VsdCA9ICpzeW50aGV0aWNPYmxpcXVlICogcmVzdWx0
OworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworQWZmaW5lVHJhbnNmb3JtIGNvbXB1dGVPdmVy
YWxsVGV4dE1hdHJpeChjb25zdCBGb250JiBmb250KQoreworICAgIHN0ZDo6b3B0aW9uYWw8QWZm
aW5lVHJhbnNmb3JtPiBzeW50aGV0aWNPYmxpcXVlOworICAgIGF1dG8mIHBsYXRmb3JtRGF0YSA9
IGZvbnQucGxhdGZvcm1EYXRhKCk7CisgICAgaWYgKHBsYXRmb3JtRGF0YS5zeW50aGV0aWNPYmxp
cXVlKCkpIHsKKyAgICAgICAgZmxvYXQgb2JsaXF1ZVNrZXcgPSB0YW5mKGRlZzJyYWQoRm9udENh
c2NhZGU6OnN5bnRoZXRpY09ibGlxdWVBbmdsZSgpKSk7CisgICAgICAgIGlmIChwbGF0Zm9ybURh
dGEub3JpZW50YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246OlZlcnRpY2FsKSB7CisgICAgICAg
ICAgICBpZiAoZm9udC5pc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKCkpCisgICAgICAgICAgICAg
ICAgc3ludGhldGljT2JsaXF1ZSA9IEFmZmluZVRyYW5zZm9ybSgxLCBvYmxpcXVlU2tldywgMCwg
MSwgMCwgMCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc3ludGhldGljT2Js
aXF1ZSA9IEFmZmluZVRyYW5zZm9ybSgxLCAtb2JsaXF1ZVNrZXcsIDAsIDEsIDAsIDApOworICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgIHN5bnRoZXRpY09ibGlxdWUgPSBBZmZpbmVUcmFuc2Zv
cm0oMSwgMCwgLW9ibGlxdWVTa2V3LCAxLCAwLCAwKTsKKyAgICB9CisKKyAgICByZXR1cm4gY29t
cHV0ZUJhc2VPdmVyYWxsVGV4dE1hdHJpeChzeW50aGV0aWNPYmxpcXVlKTsKK30KKworQWZmaW5l
VHJhbnNmb3JtIGNvbXB1dGVCYXNlVmVydGljYWxUZXh0TWF0cml4KGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgcHJldmlvdXNUZXh0TWF0cml4KQoreworICAgIC8vIFRoZSB0cmFuc2xhdGlvbiBoZXJl
ICgiZSIgYW5kICJmIiBmaWVsZHMpIGFyZSBpcnJlbGV2YW50LCBiZWNhdXNlCisgICAgLy8gdGhp
cyBtYXRyaXggaXMgaW52ZXJ0ZWQgaW4gZmlsbFZlY3RvcldpdGhWZXJ0aWNhbEdseXBoUG9zaXRp
b25zIHRvIHBsYWNlIHRoZSBnbHlwaHMgaW4gdGhlIENUTSdzIGNvb3JkaW5hdGUgc3lzdGVtLgor
ICAgIC8vIEFsbCB3ZSdyZSB0cnlpbmcgdG8gZG8gaGVyZSBpcyByb3RhdGUgdGhlIHRleHQgbWF0
cml4IHNvIGdseXBocyBhcHBlYXIgdmlzdWFsbHkgdXByaWdodC4KKyAgICAvLyBXZSBoYXZlIHRv
IGluY2x1ZGUgdGhlIHByZXZpb3VzIHRleHQgbWF0cml4IGJlY2F1c2UgaXQgaW5jbHVkZXMgdGhp
bmdzIGxpa2Ugc3ludGhldGljIG9ibGlxdWUuCisgICAgLy8KKyAgICAvLyBCZWNhdXNlIHRoaXMg
aXMgYSBsZWZ0LW11bHRpcGx5LCB3ZSdyZSB0YWtpbmcgdGhlIHBvaW50cyBmcm9tIHVzZXIgY29v
cmRpbmF0ZXMsIHdoaWNoIGFyZSBpbmNyZWFzaW5nLVktZ29lcy1kb3duLAorICAgIC8vIGFuZCB3
ZSdyZSByb3RhdGluZyB0aGUgcG9pbnRzIHRvIHRoZSBsZWZ0IGluIHRoYXQgY29vcmRpbmF0ZSBz
eXN0ZW0sIHRvIHB1dCB0aGVtIHBoeXNpY2FsbHkgdXByaWdodC4KKyAgICByZXR1cm4gcm90YXRl
TGVmdFRyYW5zZm9ybSAqIHByZXZpb3VzVGV4dE1hdHJpeDsKK30KKworQWZmaW5lVHJhbnNmb3Jt
IGNvbXB1dGVWZXJ0aWNhbFRleHRNYXRyaXgoY29uc3QgRm9udCYgZm9udCwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBwcmV2aW91c1RleHRNYXRyaXgpCit7CisgICAgQVNTRVJUX1VOVVNFRChmb250
LCBmb250LnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0aW9uOjpW
ZXJ0aWNhbCk7CisgICAgcmV0dXJuIGNvbXB1dGVCYXNlVmVydGljYWxUZXh0TWF0cml4KHByZXZp
b3VzVGV4dE1hdHJpeCk7Cit9CisKKyNpZiAhUExBVEZPUk0oV0lOKQorCisvLyBDb25mdXNpbmds
eSwgZXZlbiB3aGVuIENHRm9udFJlbmRlcmluZ0dldEZvbnRTbW9vdGhpbmdEaXNhYmxlZCgpIHJl
dHVybnMgdHJ1ZSwgQ0dDb250ZXh0U2V0U2hvdWxkU21vb3RoRm9udHMoKSBzdGlsbCBpbXBhY3Rz
IHRleHQKKy8vIHJlbmRlcmluZywgd2hpY2ggaXMgd2h5IHRoaXMgZnVuY3Rpb24gdXNlcyB0aGUg
InN1YnBpeGVsIGFudGlhbGlhc2luZyIgcmF0aGVyIHRoYW4gInNtb290aGluZyIgdGVybWlub2xv
Z3kuCitib29sIEZvbnRDYXNjYWRlOjppc1N1YnBpeGVsQW50aWFsaWFzaW5nQXZhaWxhYmxlKCkK
K3sKKyNpZiBIQVZFKENHX0ZPTlRfUkVOREVSSU5HX0dFVF9GT05UX1NNT09USElOR19ESVNBQkxF
RCkKKyAgICBzdGF0aWMgYm9vbCBzdWJwaXhlbEFudGlhbGlhc2luZ0VuYWJsZWQ7CisgICAgc3Rh
dGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VGbGFn
LCBbJl0oKSB7CisgICAgICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCisg
ICAgICAgIHN1YnBpeGVsQW50aWFsaWFzaW5nRW5hYmxlZCA9ICFDR0ZvbnRSZW5kZXJpbmdHZXRG
b250U21vb3RoaW5nRGlzYWJsZWQoKTsKKyAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJB
VElPTlNfRU5ECisgICAgfSk7CisgICAgcmV0dXJuIHN1YnBpeGVsQW50aWFsaWFzaW5nRW5hYmxl
ZDsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIGZp
bGxWZWN0b3JXaXRoSG9yaXpvbnRhbEdseXBoUG9zaXRpb25zKFZlY3RvcjxDR1BvaW50LCAyNTY+
JiBwb3NpdGlvbnMsIENHQ29udGV4dFJlZiBjb250ZXh0LCBjb25zdCBDR1NpemUqIGFkdmFuY2Vz
LCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCit7CisgICAgLy8gS2Vl
cCB0aGlzIGluIHN5bmMgYXMgdGhlIGludmVyc2Ugb2YgYERyYXdHbHlwaHNSZWNvcmRlcjo6cmVj
b3JkRHJhd0dseXBoc2AuCisgICAgLy8gVGhlIGlucHV0IHBvc2l0aW9ucyBhcmUgaW4gdGhlIGNv
bnRleHQncyBjb29yZGluYXRlIHN5c3RlbSwgd2l0aG91dCB0aGUgdGV4dCBtYXRyaXguCisgICAg
Ly8gSG93ZXZlciwgdGhlIHBvc2l0aW9ucyB0aGF0IENUL0NHIGFjY2VwdCBhcmUgaW4gdGhlIHRl
eHQgbWF0cml4J3MgY29vcmRpbmF0ZSBzeXN0ZW0uCisgICAgLy8gQ0dDb250ZXh0R2V0VGV4dE1h
dHJpeCgpIGdpdmVzIHVzIHRoZSBtYXRyaXggdGhhdCBtYXBzIGZyb20gdGV4dCdzIGNvb3JkaW5h
dGUgc3lzdGVtIHRvIHRoZSBjb250ZXh0J3MgKG5vbi10ZXh0KSBjb29yZGluYXRlIHN5c3RlbS4K
KyAgICAvLyBXZSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0byBkZWxpdmVyIENULCBpbnNpZGUg
dGhlIHRleHQncyBjb29yZGluYXRlIHN5c3RlbSwgc3VjaCB0aGF0IGl0IGVuZHMgdXAgY29pbmNp
ZGVudCB3aXRoIHRoZSBpbnB1dCBpbiB0aGUgY29udGV4dCdzIGNvb3JkaW5hdGUgc3lzdGVtLgor
ICAgIC8vCisgICAgLy8gQ1RNICogdGV4dCBtYXRyaXggKiBwb3NpdGlvbnMgd2UgbmVlZCB0byBk
ZWxpdmVyIHRvIENUID0gQ1RNICogaW5wdXQgcG9zaXRpb25zCisgICAgLy8gU29sdmluZyBmb3Ig
dGhlIHBvc2l0aW9ucyB3ZSBuZWVkIHRvIGRlbGl2ZXIgdG8gQ1QsIHdlIGdldAorICAgIC8vIHBv
c2l0aW9ucyB3ZSBuZWVkIHRvIGRlbGl2ZXIgdG8gQ1QgPSBpbnZlcnNlKHRleHQgbWF0cml4KSAq
IGlucHV0IHBvc2l0aW9ucworICAgIENHQWZmaW5lVHJhbnNmb3JtIG1hdHJpeCA9IENHQWZmaW5l
VHJhbnNmb3JtSW52ZXJ0KENHQ29udGV4dEdldFRleHRNYXRyaXgoY29udGV4dCkpOworICAgIHBv
c2l0aW9uc1swXSA9IENHUG9pbnRBcHBseUFmZmluZVRyYW5zZm9ybShwb2ludCwgbWF0cml4KTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBDR1Np
emUgYWR2YW5jZSA9IENHU2l6ZUFwcGx5QWZmaW5lVHJhbnNmb3JtKGFkdmFuY2VzW2kgLSAxXSwg
bWF0cml4KTsKKyAgICAgICAgcG9zaXRpb25zW2ldLnggPSBwb3NpdGlvbnNbaSAtIDFdLnggKyBh
ZHZhbmNlLndpZHRoOworICAgICAgICBwb3NpdGlvbnNbaV0ueSA9IHBvc2l0aW9uc1tpIC0gMV0u
eSArIGFkdmFuY2UuaGVpZ2h0OworICAgIH0KK30KKworc3RhdGljIHZvaWQgZmlsbFZlY3Rvcldp
dGhWZXJ0aWNhbEdseXBoUG9zaXRpb25zKFZlY3RvcjxDR1BvaW50LCAyNTY+JiBwb3NpdGlvbnMs
IGNvbnN0IENHU2l6ZSB0cmFuc2xhdGlvbnNbXSwgY29uc3QgQ0dTaXplIGFkdmFuY2VzW10sIHVu
c2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgYXNjZW50RGVsdGEs
IENHQWZmaW5lVHJhbnNmb3JtIHRleHRNYXRyaXgpCit7CisgICAgLy8gS2VlcCB0aGlzIGZ1bmN0
aW9uIGluIHN5bmMgYXMgdGhlIGludmVyc2Ugb2YgYERyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3Jk
RHJhd0dseXBoc2AuCisKKyAgICAvLyBJdCdzIGltcG9ydGFudCB0byByZWFsaXplIHdlJ3JlIGRl
YWxpbmcgd2l0aCA0IGNvb3JkaW5hdGUgc3lzdGVtcyBoZXJlOgorICAgIC8vIDEuIFBoeXNpY2Fs
IGNvb3JkaW5hdGUgc3lzdGVtLiBUaGlzIGlzIHdoYXQgdGhlIHVzZXIgc2Vlcy4KKyAgICAvLyAy
LiBVc2VyIGNvb3JkaW5hdGUgc3lzdGVtLiBUaGlzIGlzIHRoZSBjb29yZGluYXRlIHN5c3RlbSBv
ZiBqdXN0IHRoZSBDVE0uIEZvciB2ZXJ0aWNhbCB0ZXh0LCB0aGlzIGlzIGp1c3QgbGlrZSB0aGUg
bm9ybWFsIFdlYktpdCBpbmNyZWFzaW5nLVktZG93bgorICAgIC8vICAgICAgICBjb29yZGluYXRl
IHN5c3RlbSwgZXhjZXB0IHdlJ3JlIHJvdGF0ZWQgcmlnaHQsIHNvIGxvZ2ljYWwgcmlnaHQgaXMg
cGh5c2ljYWwgZG93bi4gKFdlIGRvIHRoaXMgc28gbG9naWNhbCBpbmxpbmUgcHJvZ3Jlc3Npb24g
cHJvY2VlZHMgaW4gdGhlCisgICAgLy8gICAgICAgIGxvZ2ljYWxseSBpbmNyZWFzaW5nLVggZGlt
ZW5zaW9uLCBqdXN0IGFzIGl0IHdvdWxkIGlmIHdlIHdlcmVuJ3QgZG9pbmcgdmVydGljYWwgc3R1
ZmYuKQorICAgIC8vIDMuIFRleHQgY29vcmRpbmF0ZSBzeXN0ZW0uIFRoaXMgaXMgdGhlIGNvb3Jk
aW5hdGUgb2YgdGhlIHRleHQgbWF0cml4IGNvbmNhdGVuYXRlZCB3aXRoIHRoZSBDVE0uIEZvciB2
ZXJ0aWNhbCB0ZXh0LCB0aGlzIGlzIHJvdGF0ZWQgc3VjaCB0aGF0CisgICAgLy8gICAgICAgIGlu
Y3JlYXNpbmcgWSBnb2VzIHBoeXNpY2FsbHkgdXAsIGFuZCBpbmNyZWFzaW5nIFggZ29lcyBwaHlz
aWNhbGx5IHJpZ2h0LiBUaGUgY29udHJvbCBwb2ludHMgaW4gZm9udCBjb250b3VycyBhcmUgYXV0
aG9yZWQgYWNjb3JkaW5nIHRvIHRoaXMKKyAgICAvLyAgICAgICAgaW5jcmVhc2luZy1ZLXVwIGNv
b3JkaW5hdGUgc3lzdGVtLgorICAgIC8vIDQuIFN5bnRoZXRpYy1vYmxpcXVlLWxlc3MgdGV4dCBj
b29yZGluYXRlIHN5c3RlbS4gVGhpcyB3b3VsZCBiZSBpZGVudGljYWwgdG8gdGhlIHRleHQgY29v
cmRpbmF0ZSBzeXN0ZW0gaWYgc3ludGhldGljIG9ibGlxdWUgd2FzIG5vdCBpbiBlZmZlY3QuIFRo
aXMKKyAgICAvLyAgICAgICAgaXMgdXNlZnVsIGJlY2F1c2UsIHdoZW4gd2UncmUgbW92aW5nIGds
eXBocyBhcm91bmQsIHdlIHVzdWFsbHkgZG9uJ3Qgd2FudCB0byBjb25zaWRlciBzeW50aGV0aWMg
b2JsaXF1ZS4gSW5zdGVhZCwgc3ludGhldGljIG9ibGlxdWUgaXMganVzdAorICAgIC8vICAgICAg
ICBhIHJhc3Rlcml6YXRpb24tdGltZSBlZmZlY3QsIGFuZCBub3QgdXNlZCBmb3IgZ2x5cGggcG9z
aXRpb25pbmcvbGF5b3V0LgorICAgIC8vICAgICAgICBGSVhNRTogRG9lcyB0aGlzIG1lYW4gdGhh
dCBzeW50aGV0aWMgb2JsaXF1ZSBzaG91bGQgYWx3YXlzIGJlIGFwcGxpZWQgb24gdGhlIHJlc3Vs
dCBvZiByb3RhdGVMZWZ0VHJhbnNmb3JtKCkgaW4gY29tcHV0ZVZlcnRpY2FsVGV4dE1hdHJpeCgp
LAorICAgIC8vICAgICAgICByYXRoZXIgdGhhbiB0aGUgb3RoZXIgd2F5IGFyb3VuZD8KKworICAg
IC8vIEltYWdpbmUgYW4gdmVydGljYWwgdXByaWdodCBnbHlwaDoKKyAgICAvLyArLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0rCisgICAgLy8gfCAgICAgIF9fXyAgICAgICBfX18gICAgICAgfAor
ICAgIC8vIHwgICAgICBcICBcICAgICAvICAvICAgICAgIHwKKyAgICAvLyB8ICAgICAgIFwgIFwg
ICAvICAvICAgICAgICB8CisgICAgLy8gfCAgICAgICAgXCAgXCAvICAvICAgICAgICAgfAorICAg
IC8vIHwgICAgICAgICBcICBWICAvICAgICAgICAgIHwKKyAgICAvLyB8ICAgICAgICAgIFwgICAv
ICAgICAgICAgICB8CisgICAgLy8gfCAgICAgICAgICB8ICAgfCAgICAgICAgICAgfAorICAgIC8v
IHwgICAgICAgICAgfCAgIHwgICAgICAgICAgIHwKKyAgICAvLyB8ICAgICAgICAgIHwgICB8ICAg
ICAgICAgICB8CisgICAgLy8gfCAgICAgICAgICB8ICAgfCAgICAgICAgICAgfAorICAgIC8vIHwg
ICAgICAgICAgfF9fX3wgICAgICAgICAgIHwKKyAgICAvLyB8ICAgICAgICAgICAgICAgICAgICAg
ICAgICB8CisgICAgLy8gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgIC8vCisgICAg
Ly8gVGhlIGlkZW9ncmFwaGljIGJhc2VsaW5lIGxpZXMgaW4gdGhlIGNlbnRlciBvZiB0aGUgZ2x5
cGgsIGFuZCB0aGUgYWxwaGFiZXRpYyBiYXNlbGluZSBsaWVzIHRvIHRoZSBsZWZ0IG9mIGl0Ogor
ICAgIC8vICAgICB8ICAgICAgICB8CisgICAgLy8gKy0tLXwtLS0tLS0tLXwtLS0tLS0tLS0tLS0t
KworICAgIC8vIHwgICB8ICBfX18gICB8ICAgX19fICAgICAgIHwKKyAgICAvLyB8ICAgfCAgXCAg
XCAgfCAgLyAgLyAgICAgICB8CisgICAgLy8gfCAgIHwgICBcICBcIHwgLyAgLyAgICAgICAgfAor
ICAgIC8vIHwgICB8ICAgIFwgIFx8LyAgLyAgICAgICAgIHwKKyAgICAvLyB8ICAgfCAgICAgXCAg
fCAgLyAgICAgICAgICB8CisgICAgLy8gfCAgIHwgICAgICBcIHwgLyAgICAgICAgICAgfAorICAg
IC8vIHwgICB8ICAgICAgfCB8IHwgICAgICAgICAgIHwKKyAgICAvLyB8ICAgfCAgICAgIHwgfCB8
ICAgICAgICAgICB8CisgICAgLy8gfCAgIHwgICAgICB8IHwgfCAgICAgICAgICAgfAorICAgIC8v
IHwgICB8ICAgICAgfCB8IHwgICAgICAgICAgIHwKKyAgICAvLyB8ICAgfCAgICAgIHxffF98ICAg
ICAgICAgICB8CisgICAgLy8gfCAgIHwgICAgICAgIHwgICAgICAgICAgICAgfAorICAgIC8vICst
LS18LS0tLS0tLS18LS0tLS0tLS0tLS0tLSsKKyAgICAvLyAgICAgfCAgICAgICAgfCA8PT0gaWRl
b2dyYXBoaWMgYmFzZWxpbmUKKyAgICAvLyAgICAgfCA8PT0gYWxwaGFiZXRpYyBiYXNlbGluZQor
ICAgIC8vCisgICAgLy8gVGhlIGdseXBoIGl0c2VsZiBoYXMgYSBsb2NhbCBvcmlnaW4sIHdoaWNo
IGlzIHRoZSBwb3NpdGlvbiBzZW50IHRvIENvcmUgVGV4dC4gVGhlIGNvbnRyb2wgcG9pbnRzIG9m
IHRoZSBjb250b3VycyBhcmUgZGVmaW5lZCByZWxhdGl2ZSB0byB0aGlzIHBvaW50LgorICAgIC8v
ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAvLyB8ICAgICAgX19fICAgICAgIF9f
XyAgICAgICB8CisgICAgLy8gfCAgICAgIFwgIFwgICAgIC8gIC8gICAgICAgfAorICAgIC8vIHwg
ICAgICAgXCAgXCAgIC8gIC8gICAgICAgIHwKKyAgICAvLyB8ICAgICAgICBcICBcIC8gIC8gICAg
ICAgICB8CisgICAgLy8gfCAgICAgICAgIFwgIFYgIC8gICAgICAgICAgfAorICAgIC8vIHwgICAg
ICAgICAgXCAgIC8gICAgICAgICAgIHwKKyAgICAvLyB8ICAgICAgICAgIHwgICB8ICAgICAgICAg
ICB8CisgICAgLy8gfCAgICAgICAgICB8ICAgfCAgICAgICAgICAgfAorICAgIC8vIHwgICAgICAg
ICAgfCAgIHwgICAgICAgICAgIHwKKyAgICAvLyAqIDw9IGhlcmUgIHwgICB8ICAgICAgICAgICB8
CisgICAgLy8gfCAgICAgICAgICB8X19ffCAgICAgICAgICAgfAorICAgIC8vIHwgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwKKyAgICAvLyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisg
ICAgLy8KKyAgICAvLyBOb3csIGZvciBob3Jpem9udGFsIHRleHQsIHdlIGNhbiBkbyB0aGUgc2lt
cGxlIHRoaW5nIG9mIGp1c3Q6CisgICAgLy8gMS4gUGxhY2UgdGhlIHBlbiBhdCBhIHBvc2l0aW9u
LiBSZWNvcmQgdGhpcyBwb3NpdGlvbiBhcyB0aGUgbG9jYWwgb3JpZ2luIG9mIHRoZSBmaXJzdCBn
bHlwaAorICAgIC8vIDIuIE1vdmUgdGhlIHBlbiBhY2NvcmRpbmcgdG8gdGhlIGdseXBoJ3MgYWR2
YW5jZQorICAgIC8vIDMuIFJlY29yZCBhIG5ldyBwb3NpdGlvbiBhcyB0aGUgbG9jYWwgb3JpZ2lu
IG9mIHRoZSBuZXh0IGdseXBoCisgICAgLy8gNC4gR28gdG8gMgorICAgIC8vIEhvd2V2ZXIsIGZv
ciB2ZXJ0aWNhbCB0ZXh0LCB3ZSBjYW4ndCBnZXQgYXdheSB3aXRoIHRoaXMgYmVjYXVzZSB0aGUg
Z2x5cGggb3JpZ2lucyBhcmUgbm90IG9uIHRoZSBiYXNlbGluZS4KKyAgICAvLyBUaGlzIGlzIHdo
YXQgdGhlICJ2ZXJ0aWNhbCB0cmFuc2xhdGlvbiBmb3IgYSBnbHlwaCIgaXMgZm9yLiBJdCBjb250
YWlucyB0aGlzIHZlY3RvcjoKKyAgICAvLyArLS0tQS0tLS0tLS0tQi0tLS0tLS0tLS0tLS0rCisg
ICAgLy8gfCAgICAgICAgICAgLyAgICAgICAgICAgICAgfAorICAgIC8vIHwgICAgICAgICAgLyAg
ICAgICAgICAgICAgIHwKKyAgICAvLyB8ICAgICAgICAtLSAgICAgICAgICAgICAgICB8CisgICAg
Ly8gfCAgICAgICAvICAgICAgICAgICAgICAgICAgfAorICAgIC8vIHwgICAgICAvICAgICAgICAg
ICAgICAgICAgIHwKKyAgICAvLyB8ICAgIC0tICAgICAgICAgICAgICAgICAgICB8CisgICAgLy8g
fCAgIC8gICAgICAgICAgICAgICAgICAgICAgfAorICAgIC8vIHwgIC8gICAgICAgICAgICAgICAg
ICAgICAgIHwKKyAgICAvLyB8fF8gICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgLy8gQyAg
ICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgIC8vIHwgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwKKyAgICAvLyB8ICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgLy8gKy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgIC8vIEl0IHBvaW50cyBmcm9tIHRoZSBwZW4gcG9z
aXRpb24gb24gdGhlIGlkZW9ncmFwaGljIGJhc2VsaW5lIHRvIHRoZSBnbHlwaCdzIGxvY2FsIG9y
aWdpbi4gVGhpcyBpcyAodXN1YWxseSkgcGh5c2ljYWxseQorICAgIC8vIGRvd24tYW5kLXRvLXRo
ZS1sZWZ0LiBDb3JlIFRleHQgZ2l2ZXMgdXMgdGhlc2UgdmVjdG9ycyBpbiB0aGUgdGV4dCBjb29y
ZGluYXRlIHN5c3RlbSwgYW5kIHNvIHRoZXJlZm9yZSB0aGVzZSB2ZWN0b3JzICh1c3VhbGx5KSBo
YXZlCisgICAgLy8gYm90aCBYIGFuZCBZIGNvbXBvbmVudHMgbmVnYXRpdmUuCisKKyAgICAvLyBU
aGUgZ29hbCBvZiB0aGlzIGZ1bmN0aW9uIGlzIHRvIHByb2R1Y2UgZ2x5cGggb3JpZ2lucyBpbiB0
aGUgdGV4dCBjb29yZGluYXRlIHN5c3RlbSwgYmVjYXVzZSB0aGF0J3Mgd2hhdCBDb3JlIFRleHQg
ZXhwZWN0cy4gVGhlICJhZHZhbmNlcyIKKyAgICAvLyBhbmQgInBvaW50IiBwYXJhbWV0ZXJzIHRv
IHRoaXMgZnVuY3Rpb24gYXJlIGluIHRoZSB1c2VyIGNvb3JkaW5hdGUgc3lzdGVtLiBUaGUgInRy
YW5zbGF0aW9ucyIgcGFyYW1ldGVyIGlzIGluIHRoZSAic3ludGhldGljLW9ibGlxdWUtbGVzcwor
ICAgIC8vIHRleHQgY29vcmRpbmF0ZSBzeXN0ZW0uIgorCisgICAgLy8gQ0dDb250ZXh0R2V0VGV4
dE1hdHJpeCgpIHRyYW5zZm9ybXMgcG9pbnRzIGZyb20gdGV4dCBjb29yZGluYXRlcyB0byB1c2Vy
IGNvb3JkaW5hdGVzLiBIb3dldmVyLCB3ZSdyZSB0cnlpbmcgdG8gcHJvZHVjZSB0ZXh0IGNvb3Jk
aW5hdGVzIGZyb20KKyAgICAvLyB1c2VyIGNvb3JkaW5hdGVzLCBzbyB3ZSBpbnZlcnQgaXQuCisg
ICAgQ0dBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gQ0dBZmZpbmVUcmFuc2Zvcm1JbnZlcnQo
dGV4dE1hdHJpeCk7CisKKyAgICAvLyBCZWNhdXNlIHRoZSAidmVydGljYWwgdHJhbnNsYXRpb24g
Zm9yIGEgZ2x5cGgiIHZlY3RvciBzdGFydHMgYXQgdGhlIGlkZW9ncmFwaGljIGJhc2VsaW5lICh0
aGUgcG9pbnQgQiBpbiB0aGUgYWJvdmUgZGlhZ3JhbSksIHdlIGhhdmUgdG8KKyAgICAvLyBhZGp1
c3QgdGhlIHBlbiBwb3NpdGlvbiB0byBzdGFydCB0aGVyZS4gV2ViS2l0J3MgdGV4dCByb3V0aW5l
cyBzdGFydCBvdXQgdXNpbmcgdGhlIGFscGhhYmV0aWMgYmFzZWxpbmUgKHBvaW50IEEgaW4gdGhl
IGRpYWdyYW0gYWJvdmUpIHNvIHdlCisgICAgLy8gYWRqdXN0IHRoZSBzdGFydCBwb3NpdGlvbiBo
ZXJlLCB3aGljaCBoYXMgdGhlIGVmZmVjdCBvZiBzaGlmdGluZyB0aGUgd2hvbGUgcnVuIGFsdG9n
ZXRoZXIuCisgICAgLy8KKyAgICAvLyBhc2NlbnREZWx0YSBpcyAodXN1YWxseSkgYSBuZWdhdGl2
ZSBudW1iZXIsIGFuZCByZXByZXNlbnRzIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBpZGVvZ3Jh
cGhpYyBiYXNlbGluZSB0byB0aGUgYWxwaGFiZXRpYyBiYXNlbGluZS4KKyAgICAvLyBJbiB1c2Vy
IGNvb3JkaW5hdGVzLCB3ZSB3YW50IHRvIGFkanVzdCB0aGUgWSBjb21wb25lbnQgdG8gbWFrZSBh
IGhvcml6b250YWwgcGh5c2ljYWwgY2hhbmdlLiBBbmQsIGJlY2F1c2UgdGhlIHVzZXIgY29vcmRp
bmF0ZSBzeXN0ZW0gaXMKKyAgICAvLyBsb2dpY2FsbHkgaW5jcmVhc2luZy1ZLWRvd24sIHdlIGFk
ZCB0aGUgdmFsdWUsIHdoaWNoIGlzIG5lZ2F0aXZlLCB0byBtb3ZlIHVzIGxvZ2ljYWxseSB1cCwg
d2hpY2ggaXMgcGh5c2ljYWxseSB0byB0aGUgcmlnaHQuIE5vdyBvdXIgcG9zaXRpb24KKyAgICAv
LyBpcyBhdCB0aGUgcG9pbnQgbGFiZWxlZCBCIGluIHRoZSBhYm92ZSBkaWFncmFtLCBpbiB1c2Vy
IGNvb3JkaW5hdGVzLgorICAgIGF1dG8gcG9zaXRpb24gPSBDR1BvaW50TWFrZShwb2ludC54KCks
IHBvaW50LnkoKSArIGFzY2VudERlbHRhKTsKKworICAgIHN0YXRpYyBjb25zdCBhdXRvIGNvbnN0
YW50U3ludGhldGljVGV4dE1hdHJpeE9taXR0aW5nT2JsaXF1ZSA9IGNvbXB1dGVCYXNlVmVydGlj
YWxUZXh0TWF0cml4KGNvbXB1dGVCYXNlT3ZlcmFsbFRleHRNYXRyaXgoc3RkOjpudWxsb3B0KSk7
IC8vIFNlZSBmaWxsVmVjdG9yV2l0aFZlcnRpY2FsR2x5cGhQb3NpdGlvbnMoKSwgd2hpY2ggZGVz
Y3JpYmVzIHdoYXQgdGhpcyBpcy4KKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3Vu
dDsgKytpKSB7CisgICAgICAgIC8vIFRoZSAidHJhbnNsYXRpb25zIiBwYXJhbWV0ZXIgaXMgaW4g
dGhlICJzeW50aGV0aWMtb2JsaXF1ZS1sZXNzIHRleHQgY29vcmRpbmF0ZSBzeXN0ZW0iIGFuZCB3
ZSB3YW50IHRvIGFkZCBpdCB0byB0aGUgcG9zaXRpb24gaW4gdGhlIHVzZXIKKyAgICAgICAgLy8g
Y29vcmRpbmF0ZSBzeXN0ZW0uIEx1Y2tpbHksIHRoZSB0ZXh0IG1hdHJpeCAob3IsIGF0IGxlYXN0
IHRoZSB2ZXJzaW9uIG9mIHRoZSB0ZXh0IG1hdHJpeCB0aGF0IGRvZXNuJ3QgaW5jbHVkZSBzeW50
aGV0aWMgb2JsaXF1ZSkgZG9lcyBleGFjdGx5CisgICAgICAgIC8vIHRoaXMuIFNvLCB3ZSBqdXN0
IGNyZWF0ZSB0aGUgc3ludGhldGljLW9ibGlxdWUtbGVzcyB0ZXh0IG1hdHJpeCwgYW5kIHJ1biB0
aGUgdHJhbnNsYXRpb24gdGhyb3VnaCBpdC4gVGhpcyBnaXZlcyB1cyB0aGUgdHJhbnNsYXRpb24g
aW4gdXNlcgorICAgICAgICAvLyBjb29yZGluYXRlcy4KKyAgICAgICAgYXV0byB0cmFuc2xhdGlv
bkluVXNlckNvb3JkaW5hdGVzID0gQ0dTaXplQXBwbHlBZmZpbmVUcmFuc2Zvcm0odHJhbnNsYXRp
b25zW2ldLCBjb25zdGFudFN5bnRoZXRpY1RleHRNYXRyaXhPbWl0dGluZ09ibGlxdWUpOworCisg
ICAgICAgIC8vIE5vdyB3ZSBjYW4gYWRkIHRoZSBwb3NpdGlvbiBpbiB1c2VyIGNvb3JkaW5hdGVz
IHdpdGggdGhlIHRyYW5zbGF0aW9uIGluIHVzZXIgY29vcmRpbmF0ZXMuCisgICAgICAgIGF1dG8g
cG9zaXRpb25JblVzZXJDb29yZGluYXRlcyA9IENHUG9pbnRNYWtlKHBvc2l0aW9uLnggKyB0cmFu
c2xhdGlvbkluVXNlckNvb3JkaW5hdGVzLndpZHRoLCBwb3NpdGlvbi55ICsgdHJhbnNsYXRpb25J
blVzZXJDb29yZGluYXRlcy5oZWlnaHQpOworCisgICAgICAgIC8vIEFuZCB0aGVuIHB1dCBpdCBi
YWNrIGluIGZvbnQgY29vcmRpbmF0ZXMgZm9yIHN1Ym1pc3Npb24gdG8gQ29yZSBUZXh0LiBZYXkh
CisgICAgICAgIHBvc2l0aW9uc1tpXSA9IENHUG9pbnRBcHBseUFmZmluZVRyYW5zZm9ybShwb3Np
dGlvbkluVXNlckNvb3JkaW5hdGVzLCB0cmFuc2Zvcm0pOworCisgICAgICAgIC8vIEFkdmFuY2Ug
dGhlIHBvc2l0aW9uIHRvIHRoZSBuZXh0IHBvc2l0aW9uIGluIHVzZXIgY29vcmRpbmF0ZXMuIEJv
dGggdGhlIGFkdmFuY2VzIGFuZCBwb3NpdGlvbiBhcmUgaW4gdXNlciBjb29yZGluYXRlcy4KKyAg
ICAgICAgcG9zaXRpb24ueCArPSBhZHZhbmNlc1tpXS53aWR0aDsKKyAgICAgICAgcG9zaXRpb24u
eSArPSBhZHZhbmNlc1tpXS5oZWlnaHQ7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBzaG93R2x5
cGhzV2l0aEFkdmFuY2VzKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBGb250JiBmb250
LCBDR0NvbnRleHRSZWYgY29udGV4dCwgY29uc3QgQ0dHbHlwaCogZ2x5cGhzLCBjb25zdCBDR1Np
emUqIGFkdmFuY2VzLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0ZXh0
TWF0cml4KQoreworICAgIGlmICghY291bnQpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0
IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSA9IGZvbnQucGxhdGZvcm1EYXRhKCk7Cisg
ICAgVmVjdG9yPENHUG9pbnQsIDI1Nj4gcG9zaXRpb25zKGNvdW50KTsKKyAgICBpZiAocGxhdGZv
cm1EYXRhLm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbCkgeworICAg
ICAgICBTY29wZWRUZXh0TWF0cml4IHNhdmVkTWF0cml4KGNvbXB1dGVWZXJ0aWNhbFRleHRNYXRy
aXgoZm9udCwgdGV4dE1hdHJpeCksIGNvbnRleHQpOworCisgICAgICAgIFZlY3RvcjxDR1NpemUs
IDI1Nj4gdHJhbnNsYXRpb25zKGNvdW50KTsKKyAgICAgICAgQ1RGb250R2V0VmVydGljYWxUcmFu
c2xhdGlvbnNGb3JHbHlwaHMocGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBnbHlwaHMsIHRyYW5zbGF0
aW9ucy5kYXRhKCksIGNvdW50KTsKKworICAgICAgICBhdXRvIGFzY2VudERlbHRhID0gZm9udC5m
b250TWV0cmljcygpLmZsb2F0QXNjZW50KElkZW9ncmFwaGljQmFzZWxpbmUpIC0gZm9udC5mb250
TWV0cmljcygpLmZsb2F0QXNjZW50KCk7CisgICAgICAgIGZpbGxWZWN0b3JXaXRoVmVydGljYWxH
bHlwaFBvc2l0aW9ucyhwb3NpdGlvbnMsIHRyYW5zbGF0aW9ucy5kYXRhKCksIGFkdmFuY2VzLCBj
b3VudCwgcG9pbnQsIGFzY2VudERlbHRhLCBDR0NvbnRleHRHZXRUZXh0TWF0cml4KGNvbnRleHQp
KTsKKyAgICAgICAgQ1RGb250RHJhd0dseXBocyhwbGF0Zm9ybURhdGEuY3RGb250KCksIGdseXBo
cywgcG9zaXRpb25zLmRhdGEoKSwgY291bnQsIGNvbnRleHQpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGZpbGxWZWN0b3JXaXRoSG9yaXpvbnRhbEdseXBoUG9zaXRpb25zKHBvc2l0aW9ucywgY29u
dGV4dCwgYWR2YW5jZXMsIGNvdW50LCBwb2ludCk7CisgICAgICAgIENURm9udERyYXdHbHlwaHMo
cGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBnbHlwaHMsIHBvc2l0aW9ucy5kYXRhKCksIGNvdW50LCBj
b250ZXh0KTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHNldENHRm9udFJlbmRlcmluZ01vZGUo
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQoreworICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQg
PSBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOworICAgIENHQ29udGV4dFNldFNob3VsZEFudGlh
bGlhc0ZvbnRzKGNnQ29udGV4dCwgdHJ1ZSk7CisKKyAgICBDR0FmZmluZVRyYW5zZm9ybSBjb250
ZXh0VHJhbnNmb3JtID0gQ0dDb250ZXh0R2V0Q1RNKGNnQ29udGV4dCk7CisgICAgYm9vbCBpc1Ry
YW5zbGF0aW9uT3JJbnRlZ3JhbFNjYWxlID0gV1RGOjppc0ludGVncmFsKGNvbnRleHRUcmFuc2Zv
cm0uYSkgJiYgV1RGOjppc0ludGVncmFsKGNvbnRleHRUcmFuc2Zvcm0uZCkgJiYgY29udGV4dFRy
YW5zZm9ybS5iID09IDAuZiAmJiBjb250ZXh0VHJhbnNmb3JtLmMgPT0gMC5mOworICAgIGJvb2wg
aXNSb3RhdGVkID0gKChjb250ZXh0VHJhbnNmb3JtLmIgfHwgY29udGV4dFRyYW5zZm9ybS5jKSAm
JiAoY29udGV4dFRyYW5zZm9ybS5hIHx8IGNvbnRleHRUcmFuc2Zvcm0uZCkpOworICAgIGJvb2wg
ZG9TdWJwaXhlbFF1YW50aXphdGlvbiA9IGlzVHJhbnNsYXRpb25PckludGVncmFsU2NhbGUgfHwg
KCFpc1JvdGF0ZWQgJiYgY29udGV4dC5zaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMoKSk7CisK
KyAgICBDR0NvbnRleHRTZXRTaG91bGRTdWJwaXhlbFBvc2l0aW9uRm9udHMoY2dDb250ZXh0LCB0
cnVlKTsKKyAgICBDR0NvbnRleHRTZXRTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMoY2dDb250
ZXh0LCBkb1N1YnBpeGVsUXVhbnRpemF0aW9uKTsKK30KKwordm9pZCBGb250Q2FzY2FkZTo6ZHJh
d0dseXBocyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0
IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZh
bmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCwg
Rm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKK3sKKyAgICBjb25zdCBhdXRvJiBwbGF0
Zm9ybURhdGEgPSBmb250LnBsYXRmb3JtRGF0YSgpOworICAgIGlmICghcGxhdGZvcm1EYXRhLnNp
emUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGlzSW5HUFVQcm9jZXNzKCkgJiYgZm9u
dC5oYXNBbnlDb21wbGV4Q29sb3JGb3JtYXRHbHlwaHMoZ2x5cGhzLCBudW1HbHlwaHMpKSB7Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7CisK
KyAgICBib29sIHNob3VsZEFudGlhbGlhcyA9IHRydWU7CisgICAgYm9vbCBzaG91bGRTbW9vdGhG
b250cyA9IHRydWU7CisKKyAgICBpZiAoIWZvbnQuYWxsb3dzQW50aWFsaWFzaW5nKCkpCisgICAg
ICAgIHNtb290aGluZ01vZGUgPSBGb250U21vb3RoaW5nTW9kZTo6Tm9TbW9vdGhpbmc7CisKKyAg
ICBzd2l0Y2ggKHNtb290aGluZ01vZGUpIHsKKyAgICBjYXNlIEZvbnRTbW9vdGhpbmdNb2RlOjpB
bnRpYWxpYXNlZDoKKyAgICAgICAgc2hvdWxkU21vb3RoRm9udHMgPSBmYWxzZTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBGb250U21vb3RoaW5nTW9kZTo6QXV0b1Ntb290aGluZzoKKyAgICBj
YXNlIEZvbnRTbW9vdGhpbmdNb2RlOjpTdWJwaXhlbEFudGlhbGlhc2VkOgorICAgICAgICBzaG91
bGRBbnRpYWxpYXMgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZvbnRTbW9vdGhp
bmdNb2RlOjpOb1Ntb290aGluZzoKKyAgICAgICAgc2hvdWxkQW50aWFsaWFzID0gZmFsc2U7Cisg
ICAgICAgIHNob3VsZFNtb290aEZvbnRzID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIH0K
KworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgVU5VU0VEX1ZBUklBQkxFKHNob3VsZFNt
b290aEZvbnRzKTsKKyNlbHNlCisgICAgaWYgKCFzaG91bGRVc2VTbW9vdGhpbmcoKSkKKyAgICAg
ICAgc2hvdWxkU21vb3RoRm9udHMgPSBmYWxzZTsKKworICAgIGJvb2wgb3JpZ2luYWxTaG91bGRV
c2VGb250U21vb3RoaW5nID0gQ0dDb250ZXh0R2V0U2hvdWxkU21vb3RoRm9udHMoY2dDb250ZXh0
KTsKKyAgICBpZiAoc2hvdWxkU21vb3RoRm9udHMgIT0gb3JpZ2luYWxTaG91bGRVc2VGb250U21v
b3RoaW5nKQorICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRTbW9vdGhGb250cyhjZ0NvbnRleHQs
IHNob3VsZFNtb290aEZvbnRzKTsKKyNlbmRpZgorCisgICAgYm9vbCBvcmlnaW5hbFNob3VsZEFu
dGlhbGlhcyA9IENHQ29udGV4dEdldFNob3VsZEFudGlhbGlhcyhjZ0NvbnRleHQpOworICAgIGlm
IChzaG91bGRBbnRpYWxpYXMgIT0gb3JpZ2luYWxTaG91bGRBbnRpYWxpYXMpCisgICAgICAgIENH
Q29udGV4dFNldFNob3VsZEFudGlhbGlhcyhjZ0NvbnRleHQsIHNob3VsZEFudGlhbGlhcyk7CisK
KyAgICBGbG9hdFBvaW50IHBvaW50ID0gYW5jaG9yUG9pbnQ7CisKKyAgICBhdXRvIHRleHRNYXRy
aXggPSBjb21wdXRlT3ZlcmFsbFRleHRNYXRyaXgoZm9udCk7CisgICAgU2NvcGVkVGV4dE1hdHJp
eCByZXN0b3Jlcih0ZXh0TWF0cml4LCBjZ0NvbnRleHQpOworCisgICAgc2V0Q0dGb250UmVuZGVy
aW5nTW9kZShjb250ZXh0KTsKKyAgICBDR0NvbnRleHRTZXRGb250U2l6ZShjZ0NvbnRleHQsIHBs
YXRmb3JtRGF0YS5zaXplKCkpOworCisgICAgRmxvYXRTaXplIHNoYWRvd09mZnNldDsKKyAgICBm
bG9hdCBzaGFkb3dCbHVyOworICAgIENvbG9yIHNoYWRvd0NvbG9yOworICAgIGNvbnRleHQuZ2V0
U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwgc2hhZG93Q29sb3IpOworCisgICAgQWZm
aW5lVHJhbnNmb3JtIGNvbnRleHRDVE0gPSBjb250ZXh0LmdldENUTSgpOworICAgIGZsb2F0IHN5
bnRoZXRpY0JvbGRPZmZzZXQgPSBmb250LnN5bnRoZXRpY0JvbGRPZmZzZXQoKTsKKyAgICBpZiAo
c3ludGhldGljQm9sZE9mZnNldCAmJiAhY29udGV4dENUTS5pc0lkZW50aXR5T3JUcmFuc2xhdGlv
bk9yRmxpcHBlZCgpKSB7CisgICAgICAgIEZsb2F0U2l6ZSBob3Jpem9udGFsVW5pdFNpemVJbkRl
dmljZVBpeGVscyA9IGNvbnRleHRDVE0ubWFwU2l6ZShGbG9hdFNpemUoMSwgMCkpOworICAgICAg
ICBmbG9hdCBob3Jpem9udGFsVW5pdExlbmd0aEluRGV2aWNlUGl4ZWxzID0gc3FydGYoaG9yaXpv
bnRhbFVuaXRTaXplSW5EZXZpY2VQaXhlbHMud2lkdGgoKSAqIGhvcml6b250YWxVbml0U2l6ZUlu
RGV2aWNlUGl4ZWxzLndpZHRoKCkgKyBob3Jpem9udGFsVW5pdFNpemVJbkRldmljZVBpeGVscy5o
ZWlnaHQoKSAqIGhvcml6b250YWxVbml0U2l6ZUluRGV2aWNlUGl4ZWxzLmhlaWdodCgpKTsKKyAg
ICAgICAgaWYgKGhvcml6b250YWxVbml0TGVuZ3RoSW5EZXZpY2VQaXhlbHMpIHsKKyAgICAgICAg
ICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGEgc2NhbGVkIGRvd24gY29udGV4dCB3b24ndCBibG93IHVw
IHRoZSBnYXAgYmV0d2VlbiB0aGUgZ2x5cGhzLgorICAgICAgICAgICAgc3ludGhldGljQm9sZE9m
ZnNldCA9IHN0ZDo6bWluKHN5bnRoZXRpY0JvbGRPZmZzZXQsIHN5bnRoZXRpY0JvbGRPZmZzZXQg
LyBob3Jpem9udGFsVW5pdExlbmd0aEluRGV2aWNlUGl4ZWxzKTsKKyAgICAgICAgfQorICAgIH07
CisKKyAgICBib29sIGhhc1NpbXBsZVNoYWRvdyA9IGNvbnRleHQudGV4dERyYXdpbmdNb2RlKCkg
PT0gVGV4dERyYXdpbmdNb2RlOjpGaWxsICYmIHNoYWRvd0NvbG9yLmlzVmFsaWQoKSAmJiAhc2hh
ZG93Qmx1ciAmJiAhcGxhdGZvcm1EYXRhLmlzQ29sb3JCaXRtYXBGb250KCkgJiYgKCFjb250ZXh0
LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgfHwgY29udGV4dENUTS5pc0lkZW50aXR5T3JUcmFu
c2xhdGlvbk9yRmxpcHBlZCgpKSAmJiAhY29udGV4dC5pc0luVHJhbnNwYXJlbmN5TGF5ZXIoKTsK
KyAgICBpZiAoaGFzU2ltcGxlU2hhZG93KSB7CisgICAgICAgIC8vIFBhaW50IHNpbXBsZSBzaGFk
b3dzIG91cnNlbHZlcyBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gQ0cgc2hhZG93cywgdG8gYXZvaWQg
bG9zaW5nIHN1YnBpeGVsIGFudGlhbGlhc2luZy4KKyAgICAgICAgY29udGV4dC5jbGVhclNoYWRv
dygpOworICAgICAgICBDb2xvciBmaWxsQ29sb3IgPSBjb250ZXh0LmZpbGxDb2xvcigpOworICAg
ICAgICBDb2xvciBzaGFkb3dGaWxsQ29sb3IgPSBzaGFkb3dDb2xvci5jb2xvcldpdGhBbHBoYU11
bHRpcGxpZWRCeShmaWxsQ29sb3IuYWxwaGFBc0Zsb2F0KCkpOworICAgICAgICBjb250ZXh0LnNl
dEZpbGxDb2xvcihzaGFkb3dGaWxsQ29sb3IpOworICAgICAgICBmbG9hdCBzaGFkb3dUZXh0WCA9
IHBvaW50LngoKSArIHNoYWRvd09mZnNldC53aWR0aCgpOworICAgICAgICAvLyBJZiBzaGFkb3dz
IGFyZSBpZ25vcmluZyB0cmFuc2Zvcm1zLCB0aGVuIHdlIGhhdmVuJ3QgYXBwbGllZCB0aGUgWSBj
b29yZGluYXRlIGZsaXAgeWV0LCBzbyBkb3duIGlzIG5lZ2F0aXZlLgorICAgICAgICBmbG9hdCBz
aGFkb3dUZXh0WSA9IHBvaW50LnkoKSArIHNoYWRvd09mZnNldC5oZWlnaHQoKSAqIChjb250ZXh0
LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgPyAtMSA6IDEpOworICAgICAgICBzaG93R2x5cGhz
V2l0aEFkdmFuY2VzKEZsb2F0UG9pbnQoc2hhZG93VGV4dFgsIHNoYWRvd1RleHRZKSwgZm9udCwg
Y2dDb250ZXh0LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHRleHRNYXRyaXgpOworICAg
ICAgICBpZiAoc3ludGhldGljQm9sZE9mZnNldCkKKyAgICAgICAgICAgIHNob3dHbHlwaHNXaXRo
QWR2YW5jZXMoRmxvYXRQb2ludChzaGFkb3dUZXh0WCArIHN5bnRoZXRpY0JvbGRPZmZzZXQsIHNo
YWRvd1RleHRZKSwgZm9udCwgY2dDb250ZXh0LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMs
IHRleHRNYXRyaXgpOworICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihmaWxsQ29sb3IpOwor
ICAgIH0KKworICAgIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMocG9pbnQsIGZvbnQsIGNnQ29udGV4
dCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCB0ZXh0TWF0cml4KTsKKworICAgIGlmIChz
eW50aGV0aWNCb2xkT2Zmc2V0KQorICAgICAgICBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKEZsb2F0
UG9pbnQocG9pbnQueCgpICsgc3ludGhldGljQm9sZE9mZnNldCwgcG9pbnQueSgpKSwgZm9udCwg
Y2dDb250ZXh0LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHRleHRNYXRyaXgpOworCisg
ICAgaWYgKGhhc1NpbXBsZVNoYWRvdykKKyAgICAgICAgY29udGV4dC5zZXRTaGFkb3coc2hhZG93
T2Zmc2V0LCBzaGFkb3dCbHVyLCBzaGFkb3dDb2xvcik7CisKKyNpZiAhUExBVEZPUk0oSU9TX0ZB
TUlMWSkKKyAgICBpZiAoc2hvdWxkU21vb3RoRm9udHMgIT0gb3JpZ2luYWxTaG91bGRVc2VGb250
U21vb3RoaW5nKQorICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRTbW9vdGhGb250cyhjZ0NvbnRl
eHQsIG9yaWdpbmFsU2hvdWxkVXNlRm9udFNtb290aGluZyk7CisjZW5kaWYKKworICAgIGlmIChz
aG91bGRBbnRpYWxpYXMgIT0gb3JpZ2luYWxTaG91bGRBbnRpYWxpYXMpCisgICAgICAgIENHQ29u
dGV4dFNldFNob3VsZEFudGlhbGlhcyhjZ0NvbnRleHQsIG9yaWdpbmFsU2hvdWxkQW50aWFsaWFz
KTsKK30KKworYm9vbCBGb250Q2FzY2FkZTo6cHJpbWFyeUZvbnRJc1N5c3RlbUZvbnQoKSBjb25z
dAoreworICAgIGNvbnN0IGF1dG8mIGZvbnREYXRhID0gcHJpbWFyeUZvbnQoKTsKKyAgICByZXR1
cm4gaXNTeXN0ZW1Gb250KGZvbnREYXRhLnBsYXRmb3JtRGF0YSgpLmN0Rm9udCgpKTsKK30KKwor
Ly8gRklYTUU6IFVzZSB0aGlzIG9uIGFsbCBwb3J0cy4KK2NvbnN0IEZvbnQqIEZvbnRDYXNjYWRl
Ojpmb250Rm9yQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY29uc3QgVUNoYXIqIGNoYXJhY3Rl
cnMsIHNpemVfdCBsZW5ndGgpIGNvbnN0Cit7CisgICAgVUNoYXIzMiBiYXNlQ2hhcmFjdGVyOwor
ICAgIHNpemVfdCBiYXNlQ2hhcmFjdGVyTGVuZ3RoID0gMDsKKyAgICBVMTZfTkVYVChjaGFyYWN0
ZXJzLCBiYXNlQ2hhcmFjdGVyTGVuZ3RoLCBsZW5ndGgsIGJhc2VDaGFyYWN0ZXIpOworCisgICAg
R2x5cGhEYXRhIGJhc2VDaGFyYWN0ZXJHbHlwaERhdGEgPSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIo
YmFzZUNoYXJhY3RlciwgZmFsc2UsIE5vcm1hbFZhcmlhbnQpOworCisgICAgaWYgKCFiYXNlQ2hh
cmFjdGVyR2x5cGhEYXRhLmdseXBoKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGlm
IChsZW5ndGggPT0gYmFzZUNoYXJhY3Rlckxlbmd0aCkKKyAgICAgICAgcmV0dXJuIGJhc2VDaGFy
YWN0ZXJHbHlwaERhdGEuZm9udDsKKworICAgIGJvb2wgdHJpZWRCYXNlQ2hhcmFjdGVyRm9udCA9
IGZhbHNlOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgIWZhbGxiYWNrUmFuZ2VzQXQoaSku
aXNOdWxsKCk7ICsraSkgeworICAgICAgICBjb25zdCBGb250KiBmb250ID0gZmFsbGJhY2tSYW5n
ZXNBdChpKS5mb250Rm9yQ2hhcmFjdGVyKGJhc2VDaGFyYWN0ZXIpOworICAgICAgICBpZiAoIWZv
bnQpCisgICAgICAgICAgICBjb250aW51ZTsKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAg
ICAgICBpZiAoYmFzZUNoYXJhY3RlciA+PSAweDA2MDAgJiYgYmFzZUNoYXJhY3RlciA8PSAweDA2
ZmYgJiYgZm9udC0+c2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKCkpCisgICAgICAgICAgICBjb250
aW51ZTsKKyNlbmRpZgorICAgICAgICBpZiAoZm9udC0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRp
b24oKSA9PSBGb250T3JpZW50YXRpb246OlZlcnRpY2FsKSB7CisgICAgICAgICAgICBpZiAoaXND
SktJZGVvZ3JhcGhPclN5bWJvbChiYXNlQ2hhcmFjdGVyKSkgeworICAgICAgICAgICAgICAgIGlm
ICghZm9udC0+aGFzVmVydGljYWxHbHlwaHMoKSkKKyAgICAgICAgICAgICAgICAgICAgZm9udCA9
ICZmb250LT5icm9rZW5JZGVvZ3JhcGhGb250KCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1f
Zm9udERlc2NyaXB0aW9uLm5vbkNKS0dseXBoT3JpZW50YXRpb24oKSA9PSBOb25DSktHbHlwaE9y
aWVudGF0aW9uOjpNaXhlZCkgeworICAgICAgICAgICAgICAgIGNvbnN0IEZvbnQmIHZlcnRpY2Fs
UmlnaHRGb250ID0gZm9udC0+dmVydGljYWxSaWdodE9yaWVudGF0aW9uRm9udCgpOworICAgICAg
ICAgICAgICAgIEdseXBoIHZlcnRpY2FsUmlnaHRHbHlwaCA9IHZlcnRpY2FsUmlnaHRGb250Lmds
eXBoRm9yQ2hhcmFjdGVyKGJhc2VDaGFyYWN0ZXIpOworICAgICAgICAgICAgICAgIGlmICh2ZXJ0
aWNhbFJpZ2h0R2x5cGggPT0gYmFzZUNoYXJhY3RlckdseXBoRGF0YS5nbHlwaCkKKyAgICAgICAg
ICAgICAgICAgICAgZm9udCA9ICZ2ZXJ0aWNhbFJpZ2h0Rm9udDsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgY29uc3QgRm9udCYgdXByaWdodEZvbnQgPSBmb250LT51cHJp
Z2h0T3JpZW50YXRpb25Gb250KCk7CisgICAgICAgICAgICAgICAgR2x5cGggdXByaWdodEdseXBo
ID0gdXByaWdodEZvbnQuZ2x5cGhGb3JDaGFyYWN0ZXIoYmFzZUNoYXJhY3Rlcik7CisgICAgICAg
ICAgICAgICAgaWYgKHVwcmlnaHRHbHlwaCAhPSBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmdseXBo
KQorICAgICAgICAgICAgICAgICAgICBmb250ID0gJnVwcmlnaHRGb250OworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGZvbnQgPT0gYmFzZUNoYXJhY3RlckdseXBoRGF0
YS5mb250KQorICAgICAgICAgICAgdHJpZWRCYXNlQ2hhcmFjdGVyRm9udCA9IHRydWU7CisKKyAg
ICAgICAgaWYgKGZvbnQtPmNhblJlbmRlckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNoYXJh
Y3RlcnMsIGxlbmd0aCkpCisgICAgICAgICAgICByZXR1cm4gZm9udDsKKyAgICB9CisKKyAgICBp
ZiAoIXRyaWVkQmFzZUNoYXJhY3RlckZvbnQgJiYgYmFzZUNoYXJhY3RlckdseXBoRGF0YS5mb250
ICYmIGJhc2VDaGFyYWN0ZXJHbHlwaERhdGEuZm9udC0+Y2FuUmVuZGVyQ29tYmluaW5nQ2hhcmFj
dGVyU2VxdWVuY2UoY2hhcmFjdGVycywgbGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIGJhc2VDaGFy
YWN0ZXJHbHlwaERhdGEuZm9udDsKKworICAgIHJldHVybiBGb250OjpzeXN0ZW1GYWxsYmFjaygp
OworfQorCisjZW5kaWYKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3BwCmluZGV4IGY5
YTkxMmY5OTE2ZS4uMDJiZjQxODRiYzI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3Bw
CkBAIC0yMzksMTYgKzIzOSwxNyBAQCBzdHJ1Y3QgRmFsbGJhY2tGb250RGVzY3JpcHRpb25LZXlI
YXNoIHsKICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRl
ZCA9IHRydWU7CiB9OwogCi11c2luZyBTeXN0ZW1GYWxsYmFja0NhY2hlID0gSGFzaE1hcDxGYWxs
YmFja0ZvbnREZXNjcmlwdGlvbktleSwgc3RkOjp1bmlxdWVfcHRyPENhY2hlZEZvbnRTZXQ+LCBG
YWxsYmFja0ZvbnREZXNjcmlwdGlvbktleUhhc2gsIFNpbXBsZUNsYXNzSGFzaFRyYWl0czxGYWxs
YmFja0ZvbnREZXNjcmlwdGlvbktleT4+Owotc3RhdGljIFN5c3RlbUZhbGxiYWNrQ2FjaGUmIHN5
c3RlbUZhbGxiYWNrQ2FjaGUoKQordXNpbmcgU3lzdGVtRmFsbGJhY2tGb250U2V0Q2FjaGUgPSBI
YXNoTWFwPEZhbGxiYWNrRm9udERlc2NyaXB0aW9uS2V5LCBzdGQ6OnVuaXF1ZV9wdHI8Q2FjaGVk
Rm9udFNldD4sIEZhbGxiYWNrRm9udERlc2NyaXB0aW9uS2V5SGFzaCwgU2ltcGxlQ2xhc3NIYXNo
VHJhaXRzPEZhbGxiYWNrRm9udERlc2NyaXB0aW9uS2V5Pj47CitzdGF0aWMgU3lzdGVtRmFsbGJh
Y2tGb250U2V0Q2FjaGUmIHN5c3RlbUZhbGxiYWNrRm9udFNldENhY2hlKCkKIHsKLSAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8U3lzdGVtRmFsbGJhY2tDYWNoZT4gY2FjaGU7CisgICAgLy8gRklY
TUU6IFRoaXMgc2hvdWxkIGJlIG1vdmVkIHRvIEZvbnRDYWNoZSBzaW5jZSBpdCBjYW4gYmUgYWNj
ZXNzZWQgZnJvbSB3b3JrZXIgdGhyZWFkcy4KKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3lz
dGVtRmFsbGJhY2tGb250U2V0Q2FjaGU+IGNhY2hlOwogICAgIHJldHVybiBjYWNoZS5nZXQoKTsK
IH0KIAogUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6c3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJz
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IEZvbnQmLCBJc0ZvclBs
YXRmb3JtRm9udCwgUHJlZmVyQ29sb3JlZEZvbnQgcHJlZmVyQ29sb3JlZEZvbnQsIGNvbnN0IFVD
aGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgYXV0byBhZGRSZXN1bHQg
PSBzeXN0ZW1GYWxsYmFja0NhY2hlKCkuZW5zdXJlKEZhbGxiYWNrRm9udERlc2NyaXB0aW9uS2V5
KGRlc2NyaXB0aW9uLCBwcmVmZXJDb2xvcmVkRm9udCksIFsmZGVzY3JpcHRpb24sIHByZWZlckNv
bG9yZWRGb250XSgpIC0+IHN0ZDo6dW5pcXVlX3B0cjxDYWNoZWRGb250U2V0PiB7CisgICAgYXV0
byBhZGRSZXN1bHQgPSBzeXN0ZW1GYWxsYmFja0ZvbnRTZXRDYWNoZSgpLmVuc3VyZShGYWxsYmFj
a0ZvbnREZXNjcmlwdGlvbktleShkZXNjcmlwdGlvbiwgcHJlZmVyQ29sb3JlZEZvbnQpLCBbJmRl
c2NyaXB0aW9uLCBwcmVmZXJDb2xvcmVkRm9udF0oKSAtPiBzdGQ6OnVuaXF1ZV9wdHI8Q2FjaGVk
Rm9udFNldD4gewogICAgICAgICBSZWZQdHI8RmNQYXR0ZXJuPiBwYXR0ZXJuID0gYWRvcHRSZWYo
RmNQYXR0ZXJuQ3JlYXRlKCkpOwogICAgICAgICBGY1BhdHRlcm5BZGRCb29sKHBhdHRlcm4uZ2V0
KCksIEZDX1NDQUxBQkxFLCBGY1RydWUpOwogI2lmZGVmIEZDX0NPTE9SCkBAIC0yODQsNyArMjg1
LDcgQEAgUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6c3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJz
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3IKIAogdm9pZCBGb250Q2FjaGU6OnBsYXRmb3Jt
UHVyZ2VJbmFjdGl2ZUZvbnREYXRhKCkKIHsKLSAgICBzeXN0ZW1GYWxsYmFja0NhY2hlKCkuY2xl
YXIoKTsKKyAgICBzeXN0ZW1GYWxsYmFja0ZvbnRTZXRDYWNoZSgpLmNsZWFyKCk7CiB9CiAKIHN0
YXRpYyBWZWN0b3I8U3RyaW5nPiBwYXR0ZXJuVG9GYW1pbGllcyhGY1BhdHRlcm4mIHBhdHRlcm4p
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1z
L0FmZmluZVRyYW5zZm9ybS5oLm9yaWcgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90cmFuc2Zvcm1zL0FmZmluZVRyYW5zZm9ybS5oLm9yaWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwLi45NDQ4YTk4M2ZlOTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL0FmZmluZVRyYW5zZm9ybS5o
Lm9yaWcKQEAgLTAsMCArMSwyNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxNiBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICAyMDEwIERp
cmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDb21wb3NpdGVPcGVy
YXRpb24uaCIKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiRmxvYXRTaXplLmgi
CisjaW5jbHVkZSA8YXJyYXk+CisjaW5jbHVkZSA8b3B0aW9uYWw+CisjaW5jbHVkZSA8d3RmL0Zh
c3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCisjaWYgVVNFKENHKQordHlw
ZWRlZiBzdHJ1Y3QgQ0dBZmZpbmVUcmFuc2Zvcm0gQ0dBZmZpbmVUcmFuc2Zvcm07CisjZW5kaWYK
KworbmFtZXNwYWNlIFdURiB7CitjbGFzcyBUZXh0U3RyZWFtOworfQorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEZsb2F0UG9pbnQ7CitjbGFzcyBGbG9hdFF1YWQ7CitjbGFzcyBGbG9h
dFJlY3Q7CitjbGFzcyBGbG9hdFNpemU7CitjbGFzcyBJbnRQb2ludDsKK2NsYXNzIEludFNpemU7
CitjbGFzcyBJbnRSZWN0OworY2xhc3MgUmVnaW9uOworY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRy
aXg7CisKK2NsYXNzIEFmZmluZVRyYW5zZm9ybSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisgICAgY29uc3RleHByIEFmZmluZVRyYW5zZm9ybSgpOworICAgIGNvbnN0
ZXhwciBBZmZpbmVUcmFuc2Zvcm0oZG91YmxlIGEsIGRvdWJsZSBiLCBkb3VibGUgYywgZG91Ymxl
IGQsIGRvdWJsZSBlLCBkb3VibGUgZik7CisKKyNpZiBVU0UoQ0cpCisgICAgV0VCQ09SRV9FWFBP
UlQgQWZmaW5lVHJhbnNmb3JtKGNvbnN0IENHQWZmaW5lVHJhbnNmb3JtJik7CisjZW5kaWYKKwor
ICAgIHZvaWQgc2V0TWF0cml4KGRvdWJsZSBhLCBkb3VibGUgYiwgZG91YmxlIGMsIGRvdWJsZSBk
LCBkb3VibGUgZSwgZG91YmxlIGYpOworCisgICAgdm9pZCBtYXAoZG91YmxlIHgsIGRvdWJsZSB5
LCBkb3VibGUmIHgyLCBkb3VibGUmIHkyKSBjb25zdDsKKworICAgIC8vIFJvdW5kcyB0aGUgbWFw
cGVkIHBvaW50IHRvIHRoZSBuZWFyZXN0IGludGVnZXIgdmFsdWUuCisgICAgV0VCQ09SRV9FWFBP
UlQgSW50UG9pbnQgbWFwUG9pbnQoY29uc3QgSW50UG9pbnQmKSBjb25zdDsKKworICAgIFdFQkNP
UkVfRVhQT1JUIEZsb2F0UG9pbnQgbWFwUG9pbnQoY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0Owor
CisgICAgV0VCQ09SRV9FWFBPUlQgSW50U2l6ZSBtYXBTaXplKGNvbnN0IEludFNpemUmKSBjb25z
dDsKKworICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0U2l6ZSBtYXBTaXplKGNvbnN0IEZsb2F0U2l6
ZSYpIGNvbnN0OworCisgICAgLy8gUm91bmRzIHRoZSByZXN1bHRpbmcgbWFwcGVkIHJlY3Rhbmds
ZSBvdXQuIFRoaXMgaXMgaGVscGZ1bCBmb3IgYm91bmRpbmcKKyAgICAvLyBib3ggY29tcHV0YXRp
b25zIGJ1dCBtYXkgbm90IGJlIHdoYXQgaXMgd2FudGVkIGluIG90aGVyIGNvbnRleHRzLgorICAg
IFdFQkNPUkVfRVhQT1JUIEludFJlY3QgbWFwUmVjdChjb25zdCBJbnRSZWN0JikgY29uc3Q7CisK
KyAgICBXRUJDT1JFX0VYUE9SVCBGbG9hdFJlY3QgbWFwUmVjdChjb25zdCBGbG9hdFJlY3QmKSBj
b25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBGbG9hdFF1YWQgbWFwUXVhZChjb25zdCBGbG9hdFF1
YWQmKSBjb25zdDsKKworICAgIFdFQkNPUkVfRVhQT1JUIFJlZ2lvbiBtYXBSZWdpb24oY29uc3Qg
UmVnaW9uJikgY29uc3Q7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIGlzSWRlbnRpdHkoKSBj
b25zdDsKKworICAgIGRvdWJsZSBhKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm1bMF07IH0K
KyAgICB2b2lkIHNldEEoZG91YmxlIGEpIHsgbV90cmFuc2Zvcm1bMF0gPSBhOyB9CisgICAgZG91
YmxlIGIoKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybVsxXTsgfQorICAgIHZvaWQgc2V0Qihk
b3VibGUgYikgeyBtX3RyYW5zZm9ybVsxXSA9IGI7IH0KKyAgICBkb3VibGUgYygpIGNvbnN0IHsg
cmV0dXJuIG1fdHJhbnNmb3JtWzJdOyB9CisgICAgdm9pZCBzZXRDKGRvdWJsZSBjKSB7IG1fdHJh
bnNmb3JtWzJdID0gYzsgfQorICAgIGRvdWJsZSBkKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zv
cm1bM107IH0KKyAgICB2b2lkIHNldEQoZG91YmxlIGQpIHsgbV90cmFuc2Zvcm1bM10gPSBkOyB9
CisgICAgZG91YmxlIGUoKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybVs0XTsgfQorICAgIHZv
aWQgc2V0RShkb3VibGUgZSkgeyBtX3RyYW5zZm9ybVs0XSA9IGU7IH0KKyAgICBkb3VibGUgZigp
IGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtWzVdOyB9CisgICAgdm9pZCBzZXRGKGRvdWJsZSBm
KSB7IG1fdHJhbnNmb3JtWzVdID0gZjsgfQorCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBtYWtl
SWRlbnRpdHkoKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIEFmZmluZVRyYW5zZm9ybSYgbXVsdGlw
bHkoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBvdGhlcik7CisgICAgV0VCQ09SRV9FWFBPUlQgQWZm
aW5lVHJhbnNmb3JtJiBzY2FsZShkb3VibGUpOworICAgIFdFQkNPUkVfRVhQT1JUIEFmZmluZVRy
YW5zZm9ybSYgc2NhbGUoZG91YmxlIHN4LCBkb3VibGUgc3kpOworICAgIFdFQkNPUkVfRVhQT1JU
IEFmZmluZVRyYW5zZm9ybSYgc2NhbGVOb25Vbmlmb3JtKGRvdWJsZSBzeCwgZG91YmxlIHN5KTsg
Ly8gU2FtZSBhcyBzY2FsZShzeCwgc3kpLgorICAgIFdFQkNPUkVfRVhQT1JUIEFmZmluZVRyYW5z
Zm9ybSYgc2NhbGUoY29uc3QgRmxvYXRTaXplJik7CisgICAgV0VCQ09SRV9FWFBPUlQgQWZmaW5l
VHJhbnNmb3JtJiByb3RhdGUoZG91YmxlKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0mIHJvdGF0ZUZy
b21WZWN0b3IoZG91YmxlIHgsIGRvdWJsZSB5KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBBZmZpbmVU
cmFuc2Zvcm0mIHRyYW5zbGF0ZShkb3VibGUgdHgsIGRvdWJsZSB0eSk7CisgICAgV0VCQ09SRV9F
WFBPUlQgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2xhdGUoY29uc3QgRmxvYXRQb2ludCYpOworICAg
IFdFQkNPUkVfRVhQT1JUIEFmZmluZVRyYW5zZm9ybSYgdHJhbnNsYXRlKGNvbnN0IEZsb2F0U2l6
ZSYpOworICAgIFdFQkNPUkVfRVhQT1JUIEFmZmluZVRyYW5zZm9ybSYgc2hlYXIoZG91YmxlIHN4
LCBkb3VibGUgc3kpOworICAgIFdFQkNPUkVfRVhQT1JUIEFmZmluZVRyYW5zZm9ybSYgZmxpcFgo
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBBZmZpbmVUcmFuc2Zvcm0mIGZsaXBZKCk7CisgICAgV0VC
Q09SRV9FWFBPUlQgQWZmaW5lVHJhbnNmb3JtJiBza2V3KGRvdWJsZSBhbmdsZVgsIGRvdWJsZSBh
bmdsZVkpOworICAgIEFmZmluZVRyYW5zZm9ybSYgc2tld1goZG91YmxlIGFuZ2xlKTsKKyAgICBB
ZmZpbmVUcmFuc2Zvcm0mIHNrZXdZKGRvdWJsZSBhbmdsZSk7CisKKyAgICAvLyBUaGVzZSBmdW5j
dGlvbnMgZ2V0IHRoZSBsZW5ndGggb2YgYW4gYXhpcy1hbGlnbmVkIHVuaXQgdmVjdG9yCisgICAg
Ly8gb25jZSBpdCBoYXMgYmVlbiBtYXBwZWQgdGhyb3VnaCB0aGUgdHJhbnNmb3JtCisgICAgV0VC
Q09SRV9FWFBPUlQgZG91YmxlIHhTY2FsZSgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIGRv
dWJsZSB5U2NhbGUoKSBjb25zdDsKKworICAgIGJvb2wgaXNJbnZlcnRpYmxlKCkgY29uc3Q7IC8v
IElmIHlvdSBjYWxsIHRoaXMsIHlvdSdyZSBwcm9iYWJseSBkb2luZyBpdCB3cm9uZy4KKyAgICBX
RUJDT1JFX0VYUE9SVCBzdGQ6Om9wdGlvbmFsPEFmZmluZVRyYW5zZm9ybT4gaW52ZXJzZSgpIGNv
bnN0OworCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBibGVuZChjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIGZyb20sIGRvdWJsZSBwcm9ncmVzcywgQ29tcG9zaXRlT3BlcmF0aW9uID0gQ29tcG9zaXRl
T3BlcmF0aW9uOjpSZXBsYWNlKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIFRyYW5zZm9ybWF0aW9u
TWF0cml4IHRvVHJhbnNmb3JtYXRpb25NYXRyaXgoKSBjb25zdDsKKworICAgIGJvb2wgaXNJZGVu
dGl0eU9yVHJhbnNsYXRpb24oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdHJhbnNm
b3JtWzBdID09IDEgJiYgbV90cmFuc2Zvcm1bMV0gPT0gMCAmJiBtX3RyYW5zZm9ybVsyXSA9PSAw
ICYmIG1fdHJhbnNmb3JtWzNdID09IDE7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNJZGVudGl0
eU9yVHJhbnNsYXRpb25PckZsaXBwZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
dHJhbnNmb3JtWzBdID09IDEgJiYgbV90cmFuc2Zvcm1bMV0gPT0gMCAmJiBtX3RyYW5zZm9ybVsy
XSA9PSAwICYmIChtX3RyYW5zZm9ybVszXSA9PSAxIHx8IG1fdHJhbnNmb3JtWzNdID09IC0xKTsK
KyAgICB9CisgICAgCisgICAgYm9vbCBpc1JvdGF0ZU9yU2hlYXIoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fdHJhbnNmb3JtWzFdIHx8IG1fdHJhbnNmb3JtWzJdOworICAgIH0KKwor
ICAgIGJvb2wgcHJlc2VydmVzQXhpc0FsaWdubWVudCgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gKG1fdHJhbnNmb3JtWzFdID09IDAgJiYgbV90cmFuc2Zvcm1bMl0gPT0gMCkgfHwgKG1f
dHJhbnNmb3JtWzBdID09IDAgJiYgbV90cmFuc2Zvcm1bM10gPT0gMCk7CisgICAgfQorCisgICAg
Ym9vbCBpc0Vzc2VudGlhbGx5RXF1YWxUbyhjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIG0yKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIChXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwobV90cmFu
c2Zvcm1bMF0sIG0yLm1fdHJhbnNmb3JtWzBdKQorICAgICAgICAgICAgJiYgV1RGOjphcmVFc3Nl
bnRpYWxseUVxdWFsKG1fdHJhbnNmb3JtWzFdLCBtMi5tX3RyYW5zZm9ybVsxXSkKKyAgICAgICAg
ICAgICYmIFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChtX3RyYW5zZm9ybVsyXSwgbTIubV90cmFu
c2Zvcm1bMl0pCisgICAgICAgICAgICAmJiBXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwobV90cmFu
c2Zvcm1bM10sIG0yLm1fdHJhbnNmb3JtWzNdKQorICAgICAgICAgICAgJiYgV1RGOjphcmVFc3Nl
bnRpYWxseUVxdWFsKG1fdHJhbnNmb3JtWzRdLCBtMi5tX3RyYW5zZm9ybVs0XSkKKyAgICAgICAg
ICAgICYmIFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChtX3RyYW5zZm9ybVs1XSwgbTIubV90cmFu
c2Zvcm1bNV0pKTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBtMikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAobV90cmFuc2Zvcm1bMF0g
PT0gbTIubV90cmFuc2Zvcm1bMF0KKyAgICAgICAgICAgICYmIG1fdHJhbnNmb3JtWzFdID09IG0y
Lm1fdHJhbnNmb3JtWzFdCisgICAgICAgICAgICAmJiBtX3RyYW5zZm9ybVsyXSA9PSBtMi5tX3Ry
YW5zZm9ybVsyXQorICAgICAgICAgICAgJiYgbV90cmFuc2Zvcm1bM10gPT0gbTIubV90cmFuc2Zv
cm1bM10KKyAgICAgICAgICAgICYmIG1fdHJhbnNmb3JtWzRdID09IG0yLm1fdHJhbnNmb3JtWzRd
CisgICAgICAgICAgICAmJiBtX3RyYW5zZm9ybVs1XSA9PSBtMi5tX3RyYW5zZm9ybVs1XSk7Cisg
ICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgb3RoZXIp
IGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CisKKyAgICAvLyAqdGhpcyA9ICp0
aGlzICogdCAoaS5lLiwgYSBtdWx0UmlnaHQpCisgICAgQWZmaW5lVHJhbnNmb3JtJiBvcGVyYXRv
cio9KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdCkKKyAgICB7CisgICAgICAgIHJldHVybiBtdWx0
aXBseSh0KTsKKyAgICB9CisgICAgCisgICAgLy8gcmVzdWx0ID0gKnRoaXMgKiB0IChpLmUuLCBh
IG11bHRSaWdodCkKKyAgICBBZmZpbmVUcmFuc2Zvcm0gb3BlcmF0b3IqKGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgdCkgY29uc3QKKyAgICB7CisgICAgICAgIEFmZmluZVRyYW5zZm9ybSByZXN1bHQg
PSAqdGhpczsKKyAgICAgICAgcmVzdWx0ICo9IHQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorCisjaWYgVVNFKENHKQorICAgIFdFQkNPUkVfRVhQT1JUIG9wZXJhdG9yIENHQWZmaW5l
VHJhbnNmb3JtKCkgY29uc3Q7CisjZW5kaWYKKworICAgIHN0YXRpYyBBZmZpbmVUcmFuc2Zvcm0g
bWFrZVRyYW5zbGF0aW9uKEZsb2F0U2l6ZSBkZWx0YSkKKyAgICB7CisgICAgICAgIHJldHVybiBB
ZmZpbmVUcmFuc2Zvcm0oMSwgMCwgMCwgMSwgZGVsdGEud2lkdGgoKSwgZGVsdGEuaGVpZ2h0KCkp
OworICAgIH0KKworICAgIHN0YXRpYyBBZmZpbmVUcmFuc2Zvcm0gbWFrZVNjYWxlKEZsb2F0U2l6
ZSBzY2FsZSkKKyAgICB7CisgICAgICAgIHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oc2NhbGUud2lk
dGgoKSwgMCwgMCwgc2NhbGUuaGVpZ2h0KCksIDAsIDApOworICAgIH0KKworICAgIHN0YXRpYyBB
ZmZpbmVUcmFuc2Zvcm0gbWFrZVJvdGF0aW9uKGRvdWJsZSBhbmdsZUluRGVncmVlcywgRmxvYXRQ
b2ludCBjZW50ZXIgPSB7IH0pCisgICAgeworICAgICAgICBhdXRvIG1hdHJpeCA9IG1ha2VUcmFu
c2xhdGlvbih0b0Zsb2F0U2l6ZShjZW50ZXIpKTsKKyAgICAgICAgbWF0cml4LnJvdGF0ZShhbmds
ZUluRGVncmVlcyk7CisgICAgICAgIG1hdHJpeC50cmFuc2xhdGUoLXRvRmxvYXRTaXplKGNlbnRl
cikpOworICAgICAgICByZXR1cm4gbWF0cml4OworICAgIH0KKworICAgIC8vIGRlY29tcG9zZSB0
aGUgbWF0cml4IGludG8gaXRzIGNvbXBvbmVudCBwYXJ0cworICAgIHR5cGVkZWYgc3RydWN0IHsK
KyAgICAgICAgZG91YmxlIHNjYWxlWCwgc2NhbGVZOworICAgICAgICBkb3VibGUgYW5nbGU7Cisg
ICAgICAgIGRvdWJsZSByZW1haW5kZXJBLCByZW1haW5kZXJCLCByZW1haW5kZXJDLCByZW1haW5k
ZXJEOworICAgICAgICBkb3VibGUgdHJhbnNsYXRlWCwgdHJhbnNsYXRlWTsKKyAgICB9IERlY29t
cG9zZWRUeXBlOworICAgIAorICAgIGJvb2wgZGVjb21wb3NlKERlY29tcG9zZWRUeXBlJikgY29u
c3Q7CisgICAgdm9pZCByZWNvbXBvc2UoY29uc3QgRGVjb21wb3NlZFR5cGUmKTsKKworcHJpdmF0
ZToKKyAgICBzdGQ6OmFycmF5PGRvdWJsZSwgNj4gbV90cmFuc2Zvcm07Cit9OworCitXRUJDT1JF
X0VYUE9SVCBBZmZpbmVUcmFuc2Zvcm0gbWFrZU1hcEJldHdlZW5SZWN0cyhjb25zdCBGbG9hdFJl
Y3QmIHNvdXJjZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0KTsKKworV0VCQ09SRV9FWFBPUlQgV1RG
OjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYpOworCis8PDw8PDw8IEhFQUQKK2NvbnN0ZXhwciBBZmZpbmVUcmFuc2Zvcm06OkFm
ZmluZVRyYW5zZm9ybSgpCisgICAgOiBtX3RyYW5zZm9ybSB7IHsgMSwgMCwgMCwgMSwgMCwgMCB9
IH0KK3sKK30KKworY29uc3RleHByIEFmZmluZVRyYW5zZm9ybTo6QWZmaW5lVHJhbnNmb3JtKGRv
dWJsZSBhLCBkb3VibGUgYiwgZG91YmxlIGMsIGRvdWJsZSBkLCBkb3VibGUgZSwgZG91YmxlIGYp
CisgICAgOiBtX3RyYW5zZm9ybSB7IHsgYSwgYiwgYywgZCwgZSwgZiB9IH0KK3sKK30KKworc3Rh
dGljIGNvbnN0ZXhwciBpbmxpbmUgQWZmaW5lVHJhbnNmb3JtIGlkZW50aXR5OworCit8fHx8fHx8
IHBhcmVudCBvZiA1YzI2Nzc4MmM3ZWQgKCBDb252ZXJ0IHJvdGF0ZUxlZnRUcmFuc2Zvcm0oKSBp
bnRvIGEgc3RhdGljIGNvbnN0ZXhwciB2YXJpYWJsZSkKKz09PT09PT0KK2NvbnN0ZXhwciBBZmZp
bmVUcmFuc2Zvcm06OkFmZmluZVRyYW5zZm9ybSgpCisgICAgOiBtX3RyYW5zZm9ybSB7IHsgMSwg
MCwgMCwgMSwgMCwgMCB9IH0KK3sKK30KKworY29uc3RleHByIEFmZmluZVRyYW5zZm9ybTo6QWZm
aW5lVHJhbnNmb3JtKGRvdWJsZSBhLCBkb3VibGUgYiwgZG91YmxlIGMsIGRvdWJsZSBkLCBkb3Vi
bGUgZSwgZG91YmxlIGYpCisgICAgOiBtX3RyYW5zZm9ybSB7IHsgYSwgYiwgYywgZCwgZSwgZiB9
IH0KK3sKK30KKworPj4+Pj4+PiA1YzI2Nzc4MmM3ZWQgKCBDb252ZXJ0IHJvdGF0ZUxlZnRUcmFu
c2Zvcm0oKSBpbnRvIGEgc3RhdGljIGNvbnN0ZXhwciB2YXJpYWJsZSkKK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxTZXR0aW5ncy5jcHAub3JpZyBiL1NvdXJj
ZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxTZXR0aW5ncy5jcHAub3JpZwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjQ4MzVhZmQ5ZTQ2ZgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxTZXR0aW5ncy5jcHAub3JpZwpAQCAt
MCwwICsxLDY1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJ
bnRlcm5hbFNldHRpbmdzLmgiCisKKyNpbmNsdWRlICJDYXB0aW9uVXNlclByZWZlcmVuY2VzLmgi
CisjaW5jbHVkZSAiRGVwcmVjYXRlZEdsb2JhbFNldHRpbmdzLmgiCisjaW5jbHVkZSAiRG9jdW1l
bnQuaCIKKyNpbmNsdWRlICJGb250Q2FjaGUuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1
ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkxvY2FsZVRvU2NyaXB0TWFwcGluZy5oIgorI2lu
Y2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlICJQbGF0Zm9y
bU1lZGlhU2Vzc2lvbk1hbmFnZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgorI2luY2x1
ZGUgIlN1cHBsZW1lbnRhYmxlLmgiCisjaW5jbHVkZSA8d3RmL0xhbmd1YWdlLmg+CisKKyNpZiBF
TkFCTEUoV0VCX0FVRElPKQorI2luY2x1ZGUgIkF1ZGlvQ29udGV4dC5oIgorI2VuZGlmCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworSW50ZXJuYWxTZXR0aW5nczo6QmFja3VwOjpCYWNrdXAoU2V0
dGluZ3MmIHNldHRpbmdzKQorICAgIDogbV9taW5pbXVtRE9NVGltZXJJbnRlcnZhbChzZXR0aW5n
cy5taW5pbXVtRE9NVGltZXJJbnRlcnZhbCgpKQorICAgICwgbV9vcmlnaW5hbFRpbWVXaXRob3V0
TW91c2VNb3ZlbWVudEJlZm9yZUhpZGluZ0NvbnRyb2xzKHNldHRpbmdzLnRpbWVXaXRob3V0TW91
c2VNb3ZlbWVudEJlZm9yZUhpZGluZ0NvbnRyb2xzKCkpCisgICAgLCBtX29yaWdpbmFsRWRpdGlu
Z0JlaGF2aW9yKHNldHRpbmdzLmVkaXRpbmdCZWhhdmlvclR5cGUoKSkKKyAgICAsIG1fc3RvcmFn
ZUJsb2NraW5nUG9saWN5KHNldHRpbmdzLnN0b3JhZ2VCbG9ja2luZ1BvbGljeSgpKQorICAgICwg
bV91c2VySW50ZXJmYWNlRGlyZWN0aW9uUG9saWN5KHNldHRpbmdzLnVzZXJJbnRlcmZhY2VEaXJl
Y3Rpb25Qb2xpY3koKSkKKyAgICAsIG1fc3lzdGVtTGF5b3V0RGlyZWN0aW9uKHNldHRpbmdzLnN5
c3RlbUxheW91dERpcmVjdGlvbigpKQorICAgICwgbV9wZGZJbWFnZUNhY2hpbmdQb2xpY3koc2V0
dGluZ3MucGRmSW1hZ2VDYWNoaW5nUG9saWN5KCkpCisgICAgLCBtX2ZvcmNlZENvbG9yc0FyZUlu
dmVydGVkQWNjZXNzaWJpbGl0eVZhbHVlKHNldHRpbmdzLmZvcmNlZENvbG9yc0FyZUludmVydGVk
QWNjZXNzaWJpbGl0eVZhbHVlKCkpCisgICAgLCBtX2ZvcmNlZERpc3BsYXlJc01vbm9jaHJvbWVB
Y2Nlc3NpYmlsaXR5VmFsdWUoc2V0dGluZ3MuZm9yY2VkRGlzcGxheUlzTW9ub2Nocm9tZUFjY2Vz
c2liaWxpdHlWYWx1ZSgpKQorICAgICwgbV9mb3JjZWRQcmVmZXJzQ29udHJhc3RBY2Nlc3NpYmls
aXR5VmFsdWUoc2V0dGluZ3MuZm9yY2VkUHJlZmVyc0NvbnRyYXN0QWNjZXNzaWJpbGl0eVZhbHVl
KCkpCisgICAgLCBtX2ZvcmNlZFByZWZlcnNSZWR1Y2VkTW90aW9uQWNjZXNzaWJpbGl0eVZhbHVl
KHNldHRpbmdzLmZvcmNlZFByZWZlcnNSZWR1Y2VkTW90aW9uQWNjZXNzaWJpbGl0eVZhbHVlKCkp
CisgICAgLCBtX2ZvbnRMb2FkVGltaW5nT3ZlcnJpZGUoc2V0dGluZ3MuZm9udExvYWRUaW1pbmdP
dmVycmlkZSgpKQorICAgICwgbV9mcmFtZUZsYXR0ZW5pbmcoc2V0dGluZ3MuZnJhbWVGbGF0dGVu
aW5nKCkpCisgICAgLCBtX2ZldGNoQVBJS2VlcEFsaXZlQVBJRW5hYmxlZChEZXByZWNhdGVkR2xv
YmFsU2V0dGluZ3M6OmZldGNoQVBJS2VlcEFsaXZlRW5hYmxlZCgpKQorICAgICwgbV9jdXN0b21Q
YXN0ZWJvYXJkRGF0YUVuYWJsZWQoRGVwcmVjYXRlZEdsb2JhbFNldHRpbmdzOjpjdXN0b21QYXN0
ZWJvYXJkRGF0YUVuYWJsZWQoKSkKKyAgICAsIG1fb3JpZ2luYWxNb2NrU2Nyb2xsYmFyc0VuYWJs
ZWQoRGVwcmVjYXRlZEdsb2JhbFNldHRpbmdzOjptb2NrU2Nyb2xsYmFyc0VuYWJsZWQoKSkKKyNp
ZiBVU0UoQVVESU9fU0VTU0lPTikKKyAgICAsIG1fc2hvdWxkTWFuYWdlQXVkaW9TZXNzaW9uQ2F0
ZWdvcnkoRGVwcmVjYXRlZEdsb2JhbFNldHRpbmdzOjpzaG91bGRNYW5hZ2VBdWRpb1Nlc3Npb25D
YXRlZ29yeSgpKQorI2VuZGlmCisjaWYgRU5BQkxFKFZJREVPKSB8fCBFTkFCTEUoV0VCX0FVRElP
KQorICAgICwgbV9zaG91bGREZWFjdGl2YXRlQXVkaW9TZXNzaW9uKFBsYXRmb3JtTWVkaWFTZXNz
aW9uTWFuYWdlcjo6c2hvdWxkRGVhY3RpdmF0ZUF1ZGlvU2Vzc2lvbigpKQorI2VuZGlmCit7Cit9
CisKK3ZvaWQgSW50ZXJuYWxTZXR0aW5nczo6QmFja3VwOjpyZXN0b3JlVG8oU2V0dGluZ3MmIHNl
dHRpbmdzKQoreworICAgIGZvciAoY29uc3QgYXV0byYgc3RhbmRhcmRGb250IDogbV9zdGFuZGFy
ZEZvbnRGYW1pbGllcykKKyAgICAgICAgc2V0dGluZ3Muc2V0U3RhbmRhcmRGb250RmFtaWx5KHN0
YW5kYXJkRm9udC52YWx1ZSwgc3RhdGljX2Nhc3Q8VVNjcmlwdENvZGU+KHN0YW5kYXJkRm9udC5r
ZXkpKTsKKyAgICBtX3N0YW5kYXJkRm9udEZhbWlsaWVzLmNsZWFyKCk7CisKKyAgICBmb3IgKGNv
bnN0IGF1dG8mIGZpeGVkRm9udCA6IG1fZml4ZWRGb250RmFtaWxpZXMpCisgICAgICAgIHNldHRp
bmdzLnNldEZpeGVkRm9udEZhbWlseShmaXhlZEZvbnQudmFsdWUsIHN0YXRpY19jYXN0PFVTY3Jp
cHRDb2RlPihmaXhlZEZvbnQua2V5KSk7CisgICAgbV9maXhlZEZvbnRGYW1pbGllcy5jbGVhcigp
OworCisgICAgZm9yIChjb25zdCBhdXRvJiBzZXJpZkZvbnQgOiBtX3NlcmlmRm9udEZhbWlsaWVz
KQorICAgICAgICBzZXR0aW5ncy5zZXRTZXJpZkZvbnRGYW1pbHkoc2VyaWZGb250LnZhbHVlLCBz
dGF0aWNfY2FzdDxVU2NyaXB0Q29kZT4oc2VyaWZGb250LmtleSkpOworICAgIG1fc2VyaWZGb250
RmFtaWxpZXMuY2xlYXIoKTsKKworICAgIGZvciAoY29uc3QgYXV0byYgc2Fuc1NlcmlmRm9udCA6
IG1fc2Fuc1NlcmlmRm9udEZhbWlsaWVzKQorICAgICAgICBzZXR0aW5ncy5zZXRTYW5zU2VyaWZG
b250RmFtaWx5KHNhbnNTZXJpZkZvbnQudmFsdWUsIHN0YXRpY19jYXN0PFVTY3JpcHRDb2RlPihz
YW5zU2VyaWZGb250LmtleSkpOworICAgIG1fc2Fuc1NlcmlmRm9udEZhbWlsaWVzLmNsZWFyKCk7
CisKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGN1cnNpdmVGb250IDogbV9jdXJzaXZlRm9udEZhbWls
aWVzKQorICAgICAgICBzZXR0aW5ncy5zZXRDdXJzaXZlRm9udEZhbWlseShjdXJzaXZlRm9udC52
YWx1ZSwgc3RhdGljX2Nhc3Q8VVNjcmlwdENvZGU+KGN1cnNpdmVGb250LmtleSkpOworICAgIG1f
Y3Vyc2l2ZUZvbnRGYW1pbGllcy5jbGVhcigpOworCisgICAgZm9yIChjb25zdCBhdXRvJiBmYW50
YXN5Rm9udCA6IG1fZmFudGFzeUZvbnRGYW1pbGllcykKKyAgICAgICAgc2V0dGluZ3Muc2V0RmFu
dGFzeUZvbnRGYW1pbHkoZmFudGFzeUZvbnQudmFsdWUsIHN0YXRpY19jYXN0PFVTY3JpcHRDb2Rl
PihmYW50YXN5Rm9udC5rZXkpKTsKKyAgICBtX2ZhbnRhc3lGb250RmFtaWxpZXMuY2xlYXIoKTsK
KworICAgIGZvciAoY29uc3QgYXV0byYgcGljdG9ncmFwaEZvbnQgOiBtX3BpY3RvZ3JhcGhGb250
RmFtaWxpZXMpCisgICAgICAgIHNldHRpbmdzLnNldFBpY3RvZ3JhcGhGb250RmFtaWx5KHBpY3Rv
Z3JhcGhGb250LnZhbHVlLCBzdGF0aWNfY2FzdDxVU2NyaXB0Q29kZT4ocGljdG9ncmFwaEZvbnQu
a2V5KSk7CisgICAgbV9waWN0b2dyYXBoRm9udEZhbWlsaWVzLmNsZWFyKCk7CisKKyAgICBzZXR0
aW5ncy5zZXRNaW5pbXVtRE9NVGltZXJJbnRlcnZhbChtX21pbmltdW1ET01UaW1lckludGVydmFs
KTsKKyAgICBzZXR0aW5ncy5zZXRUaW1lV2l0aG91dE1vdXNlTW92ZW1lbnRCZWZvcmVIaWRpbmdD
b250cm9scyhtX29yaWdpbmFsVGltZVdpdGhvdXRNb3VzZU1vdmVtZW50QmVmb3JlSGlkaW5nQ29u
dHJvbHMpOworICAgIHNldHRpbmdzLnNldEVkaXRpbmdCZWhhdmlvclR5cGUobV9vcmlnaW5hbEVk
aXRpbmdCZWhhdmlvcik7CisgICAgc2V0dGluZ3Muc2V0U3RvcmFnZUJsb2NraW5nUG9saWN5KG1f
c3RvcmFnZUJsb2NraW5nUG9saWN5KTsKKyAgICBzZXR0aW5ncy5zZXRVc2VySW50ZXJmYWNlRGly
ZWN0aW9uUG9saWN5KG1fdXNlckludGVyZmFjZURpcmVjdGlvblBvbGljeSk7CisgICAgc2V0dGlu
Z3Muc2V0U3lzdGVtTGF5b3V0RGlyZWN0aW9uKG1fc3lzdGVtTGF5b3V0RGlyZWN0aW9uKTsKKyAg
ICBzZXR0aW5ncy5zZXRQZGZJbWFnZUNhY2hpbmdQb2xpY3kobV9wZGZJbWFnZUNhY2hpbmdQb2xp
Y3kpOworICAgIHNldHRpbmdzLnNldEZvcmNlZENvbG9yc0FyZUludmVydGVkQWNjZXNzaWJpbGl0
eVZhbHVlKG1fZm9yY2VkQ29sb3JzQXJlSW52ZXJ0ZWRBY2Nlc3NpYmlsaXR5VmFsdWUpOworICAg
IHNldHRpbmdzLnNldEZvcmNlZERpc3BsYXlJc01vbm9jaHJvbWVBY2Nlc3NpYmlsaXR5VmFsdWUo
bV9mb3JjZWREaXNwbGF5SXNNb25vY2hyb21lQWNjZXNzaWJpbGl0eVZhbHVlKTsKKyAgICBzZXR0
aW5ncy5zZXRGb3JjZWRQcmVmZXJzQ29udHJhc3RBY2Nlc3NpYmlsaXR5VmFsdWUobV9mb3JjZWRQ
cmVmZXJzQ29udHJhc3RBY2Nlc3NpYmlsaXR5VmFsdWUpOworICAgIHNldHRpbmdzLnNldEZvcmNl
ZFByZWZlcnNSZWR1Y2VkTW90aW9uQWNjZXNzaWJpbGl0eVZhbHVlKG1fZm9yY2VkUHJlZmVyc1Jl
ZHVjZWRNb3Rpb25BY2Nlc3NpYmlsaXR5VmFsdWUpOworICAgIHNldHRpbmdzLnNldEZvbnRMb2Fk
VGltaW5nT3ZlcnJpZGUobV9mb250TG9hZFRpbWluZ092ZXJyaWRlKTsKKyAgICBzZXR0aW5ncy5z
ZXRGcmFtZUZsYXR0ZW5pbmcobV9mcmFtZUZsYXR0ZW5pbmcpOworCisgICAgRGVwcmVjYXRlZEds
b2JhbFNldHRpbmdzOjpzZXRGZXRjaEFQSUtlZXBBbGl2ZUVuYWJsZWQobV9mZXRjaEFQSUtlZXBB
bGl2ZUFQSUVuYWJsZWQpOworICAgIERlcHJlY2F0ZWRHbG9iYWxTZXR0aW5nczo6c2V0Q3VzdG9t
UGFzdGVib2FyZERhdGFFbmFibGVkKG1fY3VzdG9tUGFzdGVib2FyZERhdGFFbmFibGVkKTsKKwor
I2lmIFVTRShBVURJT19TRVNTSU9OKQorICAgIERlcHJlY2F0ZWRHbG9iYWxTZXR0aW5nczo6c2V0
U2hvdWxkTWFuYWdlQXVkaW9TZXNzaW9uQ2F0ZWdvcnkobV9zaG91bGRNYW5hZ2VBdWRpb1Nlc3Np
b25DYXRlZ29yeSk7CisjZW5kaWYKKworI2lmIEVOQUJMRShWSURFTykgfHwgRU5BQkxFKFdFQl9B
VURJTykKKyAgICBQbGF0Zm9ybU1lZGlhU2Vzc2lvbk1hbmFnZXI6OnNldFNob3VsZERlYWN0aXZh
dGVBdWRpb1Nlc3Npb24obV9zaG91bGREZWFjdGl2YXRlQXVkaW9TZXNzaW9uKTsKKyNlbmRpZgor
Cis8PDw8PDw8IEhFQUQKK3x8fHx8fHwgcGFyZW50IG9mIDVmZjY4MDA4ZjM5ZSAoUHJvcGFnYXRl
IEZvbnRDYWNoZTo6bV9zaG91bGRNb2NrQm9sZFN5c3RlbUZvbnRGb3JBY2Nlc3NpYmlsaXR5IGNo
YW5nZXMgdG8gYWxsIEZvbnRDYWNoZXMpCisgICAgUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigpLnNl
dFNob3VsZE1vY2tCb2xkU3lzdGVtRm9udEZvckFjY2Vzc2liaWxpdHkobV9zaG91bGRNb2NrQm9s
ZFN5c3RlbUZvbnRGb3JBY2Nlc3NpYmlsaXR5KTsKKyAgICAvLyBGSVhNRTogQ2FsbCBzZXRTaG91
bGRNb2NrQm9sZFN5c3RlbUZvbnRGb3JBY2Nlc3NpYmlsaXR5KCkgb24gYWxsIHdvcmtlcnMuCisg
ICAgRm9udENhY2hlOjpmb3JDdXJyZW50VGhyZWFkKCkuc2V0U2hvdWxkTW9ja0JvbGRTeXN0ZW1G
b250Rm9yQWNjZXNzaWJpbGl0eShtX3Nob3VsZE1vY2tCb2xkU3lzdGVtRm9udEZvckFjY2Vzc2li
aWxpdHkpOworCis9PT09PT09CisgICAgUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigpLnNldFNob3Vs
ZE1vY2tCb2xkU3lzdGVtRm9udEZvckFjY2Vzc2liaWxpdHkobV9zaG91bGRNb2NrQm9sZFN5c3Rl
bUZvbnRGb3JBY2Nlc3NpYmlsaXR5KTsKKyAgICBGb250Q2FjaGU6OnNldFNob3VsZE1vY2tCb2xk
U3lzdGVtRm9udEZvckFjY2Vzc2liaWxpdHlPbkFsbEZvbnRDYWNoZXMobV9zaG91bGRNb2NrQm9s
ZFN5c3RlbUZvbnRGb3JBY2Nlc3NpYmlsaXR5KTsKKworPj4+Pj4+PiA1ZmY2ODAwOGYzOWUgKFBy
b3BhZ2F0ZSBGb250Q2FjaGU6Om1fc2hvdWxkTW9ja0JvbGRTeXN0ZW1Gb250Rm9yQWNjZXNzaWJp
bGl0eSBjaGFuZ2VzIHRvIGFsbCBGb250Q2FjaGVzKQorI2lmIEVOQUJMRShXRUJfQVVESU8pCisg
ICAgQXVkaW9Db250ZXh0OjpzZXREZWZhdWx0U2FtcGxlUmF0ZUZvclRlc3Rpbmcoc3RkOjpudWxs
b3B0KTsKKyNlbmRpZgorfQorCitjbGFzcyBJbnRlcm5hbFNldHRpbmdzV3JhcHBlciA6IHB1Ymxp
YyBTdXBwbGVtZW50PFBhZ2U+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1Ymxp
YzoKKyAgICBleHBsaWNpdCBJbnRlcm5hbFNldHRpbmdzV3JhcHBlcihQYWdlKiBwYWdlKQorICAg
ICAgICA6IG1faW50ZXJuYWxTZXR0aW5ncyhJbnRlcm5hbFNldHRpbmdzOjpjcmVhdGUocGFnZSkp
IHsgfQorICAgIHZpcnR1YWwgfkludGVybmFsU2V0dGluZ3NXcmFwcGVyKCkgeyBtX2ludGVybmFs
U2V0dGluZ3MtPmhvc3REZXN0cm95ZWQoKTsgfQorI2lmIEFTU0VSVF9FTkFCTEVECisgICAgYm9v
bCBpc1JlZkNvdW50ZWRXcmFwcGVyKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQor
I2VuZGlmCisgICAgSW50ZXJuYWxTZXR0aW5ncyogaW50ZXJuYWxTZXR0aW5ncygpIGNvbnN0IHsg
cmV0dXJuIG1faW50ZXJuYWxTZXR0aW5ncy5nZXQoKTsgfQorCitwcml2YXRlOgorICAgIFJlZlB0
cjxJbnRlcm5hbFNldHRpbmdzPiBtX2ludGVybmFsU2V0dGluZ3M7Cit9OworCitjb25zdCBjaGFy
KiBJbnRlcm5hbFNldHRpbmdzOjpzdXBwbGVtZW50TmFtZSgpCit7CisgICAgcmV0dXJuICJJbnRl
cm5hbFNldHRpbmdzIjsKK30KKworSW50ZXJuYWxTZXR0aW5ncyogSW50ZXJuYWxTZXR0aW5nczo6
ZnJvbShQYWdlKiBwYWdlKQoreworICAgIGlmICghU3VwcGxlbWVudDxQYWdlPjo6ZnJvbShwYWdl
LCBzdXBwbGVtZW50TmFtZSgpKSkKKyAgICAgICAgU3VwcGxlbWVudDxQYWdlPjo6cHJvdmlkZVRv
KHBhZ2UsIHN1cHBsZW1lbnROYW1lKCksIG1ha2VVbmlxdWU8SW50ZXJuYWxTZXR0aW5nc1dyYXBw
ZXI+KHBhZ2UpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SW50ZXJuYWxTZXR0aW5nc1dyYXBw
ZXIqPihTdXBwbGVtZW50PFBhZ2U+Ojpmcm9tKHBhZ2UsIHN1cHBsZW1lbnROYW1lKCkpKS0+aW50
ZXJuYWxTZXR0aW5ncygpOworfQorCit2b2lkIEludGVybmFsU2V0dGluZ3M6Omhvc3REZXN0cm95
ZWQoKQoreworICAgIG1fcGFnZSA9IG51bGxwdHI7Cit9CisKK0ludGVybmFsU2V0dGluZ3M6Oklu
dGVybmFsU2V0dGluZ3MoUGFnZSogcGFnZSkKKyAgICA6IEludGVybmFsU2V0dGluZ3NHZW5lcmF0
ZWQocGFnZSkKKyAgICAsIG1fcGFnZShwYWdlKQorICAgICwgbV9iYWNrdXAocGFnZS0+c2V0dGlu
Z3MoKSkKK3sKK30KKworUmVmPEludGVybmFsU2V0dGluZ3M+IEludGVybmFsU2V0dGluZ3M6OmNy
ZWF0ZShQYWdlKiBwYWdlKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEludGVybmFsU2V0
dGluZ3MocGFnZSkpOworfQorCit2b2lkIEludGVybmFsU2V0dGluZ3M6OnJlc2V0VG9Db25zaXN0
ZW50U3RhdGUoKQoreworICAgIG1fcGFnZS0+c2V0UGFnZVNjYWxlRmFjdG9yKDEsIHsgMCwgMCB9
KTsKKyAgICBtX3BhZ2UtPm1haW5GcmFtZSgpLnNldFBhZ2VBbmRUZXh0Wm9vbUZhY3RvcnMoMSwg
MSk7CisgICAgbV9wYWdlLT5zZXRDYW5TdGFydE1lZGlhKHRydWUpOworICAgIG1fcGFnZS0+ZWZm
ZWN0aXZlQXBwZWFyYW5jZURpZENoYW5nZShmYWxzZSwgZmFsc2UpOworCisgICAgbV9iYWNrdXAu
cmVzdG9yZVRvKHNldHRpbmdzKCkpOworICAgIG1fYmFja3VwID0gQmFja3VwIHsgc2V0dGluZ3Mo
KSB9OworCisgICAgbV9wYWdlLT5zZXR0aW5ncygpLnJlc2V0VG9Db25zaXN0ZW50U3RhdGUoKTsK
KworICAgIEludGVybmFsU2V0dGluZ3NHZW5lcmF0ZWQ6OnJlc2V0VG9Db25zaXN0ZW50U3RhdGUo
KTsKK30KKworU2V0dGluZ3MmIEludGVybmFsU2V0dGluZ3M6OnNldHRpbmdzKCkgY29uc3QKK3sK
KyAgICBBU1NFUlQobV9wYWdlKTsKKyAgICByZXR1cm4gbV9wYWdlLT5zZXR0aW5ncygpOworfQor
CitFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbFNldHRpbmdzOjpzZXRTdGFuZGFyZEZvbnRGYW1p
bHkoY29uc3QgU3RyaW5nJiBmYW1pbHksIGNvbnN0IFN0cmluZyYgc2NyaXB0KQoreworICAgIGlm
ICghbV9wYWdlKQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9y
IH07CisgICAgVVNjcmlwdENvZGUgY29kZSA9IHNjcmlwdE5hbWVUb0NvZGUoc2NyaXB0KTsKKyAg
ICBpZiAoY29kZSA9PSBVU0NSSVBUX0lOVkFMSURfQ09ERSkKKyAgICAgICAgcmV0dXJuIHsgfTsK
KyAgICBtX2JhY2t1cC5tX3N0YW5kYXJkRm9udEZhbWlsaWVzLmFkZChjb2RlLCBzZXR0aW5ncygp
LnN0YW5kYXJkRm9udEZhbWlseShjb2RlKSk7CisgICAgc2V0dGluZ3MoKS5zZXRTdGFuZGFyZEZv
bnRGYW1pbHkoZmFtaWx5LCBjb2RlKTsKKyAgICByZXR1cm4geyB9OworfQorCitFeGNlcHRpb25P
cjx2b2lkPiBJbnRlcm5hbFNldHRpbmdzOjpzZXRTZXJpZkZvbnRGYW1pbHkoY29uc3QgU3RyaW5n
JiBmYW1pbHksIGNvbnN0IFN0cmluZyYgc2NyaXB0KQoreworICAgIGlmICghbV9wYWdlKQorICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CisgICAgVVNjcmlw
dENvZGUgY29kZSA9IHNjcmlwdE5hbWVUb0NvZGUoc2NyaXB0KTsKKyAgICBpZiAoY29kZSA9PSBV
U0NSSVBUX0lOVkFMSURfQ09ERSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICBtX2JhY2t1cC5t
X3NlcmlmRm9udEZhbWlsaWVzLmFkZChjb2RlLCBzZXR0aW5ncygpLnNlcmlmRm9udEZhbWlseShj
b2RlKSk7CisgICAgc2V0dGluZ3MoKS5zZXRTZXJpZkZvbnRGYW1pbHkoZmFtaWx5LCBjb2RlKTsK
KyAgICByZXR1cm4geyB9OworfQorCitFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbFNldHRpbmdz
OjpzZXRTYW5zU2VyaWZGb250RmFtaWx5KGNvbnN0IFN0cmluZyYgZmFtaWx5LCBjb25zdCBTdHJp
bmcmIHNjcmlwdCkKK3sKKyAgICBpZiAoIW1fcGFnZSkKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IEludmFsaWRBY2Nlc3NFcnJvciB9OworICAgIFVTY3JpcHRDb2RlIGNvZGUgPSBzY3JpcHRO
YW1lVG9Db2RlKHNjcmlwdCk7CisgICAgaWYgKGNvZGUgPT0gVVNDUklQVF9JTlZBTElEX0NPREUp
CisgICAgICAgIHJldHVybiB7IH07CisgICAgbV9iYWNrdXAubV9zYW5zU2VyaWZGb250RmFtaWxp
ZXMuYWRkKGNvZGUsIHNldHRpbmdzKCkuc2Fuc1NlcmlmRm9udEZhbWlseShjb2RlKSk7CisgICAg
c2V0dGluZ3MoKS5zZXRTYW5zU2VyaWZGb250RmFtaWx5KGZhbWlseSwgY29kZSk7CisgICAgcmV0
dXJuIHsgfTsKK30KKworRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxTZXR0aW5nczo6c2V0Rml4
ZWRGb250RmFtaWx5KGNvbnN0IFN0cmluZyYgZmFtaWx5LCBjb25zdCBTdHJpbmcmIHNjcmlwdCkK
K3sKKyAgICBpZiAoIW1fcGFnZSkKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRB
Y2Nlc3NFcnJvciB9OworICAgIFVTY3JpcHRDb2RlIGNvZGUgPSBzY3JpcHROYW1lVG9Db2RlKHNj
cmlwdCk7CisgICAgaWYgKGNvZGUgPT0gVVNDUklQVF9JTlZBTElEX0NPREUpCisgICAgICAgIHJl
dHVybiB7IH07CisgICAgbV9iYWNrdXAubV9maXhlZEZvbnRGYW1pbGllcy5hZGQoY29kZSwgc2V0
dGluZ3MoKS5maXhlZEZvbnRGYW1pbHkoY29kZSkpOworICAgIHNldHRpbmdzKCkuc2V0Rml4ZWRG
b250RmFtaWx5KGZhbWlseSwgY29kZSk7CisgICAgcmV0dXJuIHsgfTsKK30KKworRXhjZXB0aW9u
T3I8dm9pZD4gSW50ZXJuYWxTZXR0aW5nczo6c2V0Q3Vyc2l2ZUZvbnRGYW1pbHkoY29uc3QgU3Ry
aW5nJiBmYW1pbHksIGNvbnN0IFN0cmluZyYgc2NyaXB0KQoreworICAgIGlmICghbV9wYWdlKQor
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CisgICAgVVNj
cmlwdENvZGUgY29kZSA9IHNjcmlwdE5hbWVUb0NvZGUoc2NyaXB0KTsKKyAgICBpZiAoY29kZSA9
PSBVU0NSSVBUX0lOVkFMSURfQ09ERSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICBtX2JhY2t1
cC5tX2N1cnNpdmVGb250RmFtaWxpZXMuYWRkKGNvZGUsIHNldHRpbmdzKCkuY3Vyc2l2ZUZvbnRG
YW1pbHkoY29kZSkpOworICAgIHNldHRpbmdzKCkuc2V0Q3Vyc2l2ZUZvbnRGYW1pbHkoZmFtaWx5
LCBjb2RlKTsKKyAgICByZXR1cm4geyB9OworfQorCitFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5h
bFNldHRpbmdzOjpzZXRGYW50YXN5Rm9udEZhbWlseShjb25zdCBTdHJpbmcmIGZhbWlseSwgY29u
c3QgU3RyaW5nJiBzY3JpcHQpCit7CisgICAgaWYgKCFtX3BhZ2UpCisgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKKyAgICBVU2NyaXB0Q29kZSBjb2RlID0g
c2NyaXB0TmFtZVRvQ29kZShzY3JpcHQpOworICAgIGlmIChjb2RlID09IFVTQ1JJUFRfSU5WQUxJ
RF9DT0RFKQorICAgICAgICByZXR1cm4geyB9OworICAgIG1fYmFja3VwLm1fZmFudGFzeUZvbnRG
YW1pbGllcy5hZGQoY29kZSwgc2V0dGluZ3MoKS5mYW50YXN5Rm9udEZhbWlseShjb2RlKSk7Cisg
ICAgc2V0dGluZ3MoKS5zZXRGYW50YXN5Rm9udEZhbWlseShmYW1pbHksIGNvZGUpOworICAgIHJl
dHVybiB7IH07Cit9CisKK0V4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsU2V0dGluZ3M6OnNldFBp
Y3RvZ3JhcGhGb250RmFtaWx5KGNvbnN0IFN0cmluZyYgZmFtaWx5LCBjb25zdCBTdHJpbmcmIHNj
cmlwdCkKK3sKKyAgICBpZiAoIW1fcGFnZSkKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElu
dmFsaWRBY2Nlc3NFcnJvciB9OworICAgIFVTY3JpcHRDb2RlIGNvZGUgPSBzY3JpcHROYW1lVG9D
b2RlKHNjcmlwdCk7CisgICAgaWYgKGNvZGUgPT0gVVNDUklQVF9JTlZBTElEX0NPREUpCisgICAg
ICAgIHJldHVybiB7IH07CisgICAgbV9iYWNrdXAubV9waWN0b2dyYXBoRm9udEZhbWlsaWVzLmFk
ZChjb2RlLCBzZXR0aW5ncygpLnBpY3RvZ3JhcGhGb250RmFtaWx5KGNvZGUpKTsKKyAgICBzZXR0
aW5ncygpLnNldFBpY3RvZ3JhcGhGb250RmFtaWx5KGZhbWlseSwgY29kZSk7CisgICAgcmV0dXJu
IHsgfTsKK30KKworRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxTZXR0aW5nczo6c2V0VGV4dEF1
dG9zaXppbmdXaW5kb3dTaXplT3ZlcnJpZGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworICAg
IGlmICghbV9wYWdlKQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vy
cm9yIH07CisjaWYgRU5BQkxFKFRFWFRfQVVUT1NJWklORykKKyAgICBzZXR0aW5ncygpLnNldFRl
eHRBdXRvc2l6aW5nV2luZG93U2l6ZU92ZXJyaWRlV2lkdGgod2lkdGgpOworICAgIHNldHRpbmdz
KCkuc2V0VGV4dEF1dG9zaXppbmdXaW5kb3dTaXplT3ZlcnJpZGVIZWlnaHQoaGVpZ2h0KTsKKyNl
bHNlCisgICAgVU5VU0VEX1BBUkFNKHdpZHRoKTsKKyAgICBVTlVTRURfUEFSQU0oaGVpZ2h0KTsK
KyNlbmRpZgorICAgIHJldHVybiB7IH07Cit9CisKK0V4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFs
U2V0dGluZ3M6OnNldEVkaXRpbmdCZWhhdmlvcihFZGl0aW5nQmVoYXZpb3JUeXBlIGVkaXRpbmdC
ZWhhdmlvclR5cGUpCit7CisgICAgaWYgKCFtX3BhZ2UpCisgICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKKyAgICBzZXR0aW5ncygpLnNldEVkaXRpbmdCZWhh
dmlvclR5cGUoZWRpdGluZ0JlaGF2aW9yVHlwZSk7CisgICAgcmV0dXJuIHsgfTsKK30KKworRXhj
ZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxTZXR0aW5nczo6c2V0U3RvcmFnZUJsb2NraW5nUG9saWN5
KFN0b3JhZ2VCbG9ja2luZ1BvbGljeSBwb2xpY3kpCit7CisgICAgaWYgKCFtX3BhZ2UpCisgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKKyAgICBzZXR0aW5n
cygpLnNldFN0b3JhZ2VCbG9ja2luZ1BvbGljeShwb2xpY3kpOworICAgIHJldHVybiB7IH07Cit9
CisKK0V4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsU2V0dGluZ3M6OnNldFBERkltYWdlQ2FjaGlu
Z1BvbGljeShQREZJbWFnZUNhY2hpbmdQb2xpY3kgcG9saWN5KQoreworICAgIGlmICghbV9wYWdl
KQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CisgICAg
c2V0dGluZ3MoKS5zZXRQZGZJbWFnZUNhY2hpbmdQb2xpY3kocG9saWN5KTsKKyAgICByZXR1cm4g
eyB9OworfQorCitFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbFNldHRpbmdzOjpzZXRNaW5pbXVt
VGltZXJJbnRlcnZhbChkb3VibGUgaW50ZXJ2YWxJblNlY29uZHMpCit7CisgICAgaWYgKCFtX3Bh
Z2UpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKKyAg
ICBzZXR0aW5ncygpLnNldE1pbmltdW1ET01UaW1lckludGVydmFsKFNlY29uZHMgeyBpbnRlcnZh
bEluU2Vjb25kcyB9KTsKKyAgICByZXR1cm4geyB9OworfQorCitFeGNlcHRpb25Pcjx2b2lkPiBJ
bnRlcm5hbFNldHRpbmdzOjpzZXRUaW1lV2l0aG91dE1vdXNlTW92ZW1lbnRCZWZvcmVIaWRpbmdD
b250cm9scyhkb3VibGUgdGltZSkKK3sKKyAgICBpZiAoIW1fcGFnZSkKKyAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OworICAgIHNldHRpbmdzKCkuc2V0VGlt
ZVdpdGhvdXRNb3VzZU1vdmVtZW50QmVmb3JlSGlkaW5nQ29udHJvbHMoU2Vjb25kcyB7IHRpbWUg
fSk7CisgICAgcmV0dXJuIHsgfTsKK30KKworRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxTZXR0
aW5nczo6c2V0Rm9udExvYWRUaW1pbmdPdmVycmlkZShGb250TG9hZFRpbWluZ092ZXJyaWRlIGZv
bnRMb2FkVGltaW5nT3ZlcnJpZGUpCit7CisgICAgaWYgKCFtX3BhZ2UpCisgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKKyAgICBzZXR0aW5ncygpLnNldEZv
bnRMb2FkVGltaW5nT3ZlcnJpZGUoZm9udExvYWRUaW1pbmdPdmVycmlkZSk7CisgICAgcmV0dXJu
IHsgfTsKK30KKworRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxTZXR0aW5nczo6c2V0VXNlcklu
dGVyZmFjZURpcmVjdGlvblBvbGljeShVc2VySW50ZXJmYWNlRGlyZWN0aW9uUG9saWN5IHBvbGlj
eSkKK3sKKyAgICBpZiAoIW1fcGFnZSkKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFs
aWRBY2Nlc3NFcnJvciB9OworICAgIHNldHRpbmdzKCkuc2V0VXNlckludGVyZmFjZURpcmVjdGlv
blBvbGljeShwb2xpY3kpOworICAgIHJldHVybiB7IH07Cit9CisKK0V4Y2VwdGlvbk9yPHZvaWQ+
IEludGVybmFsU2V0dGluZ3M6OnNldFN5c3RlbUxheW91dERpcmVjdGlvbihTeXN0ZW1MYXlvdXRE
aXJlY3Rpb24gZGlyZWN0aW9uKQoreworICAgIGlmICghbV9wYWdlKQorICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CisgICAgc2V0dGluZ3MoKS5zZXRTeXN0
ZW1MYXlvdXREaXJlY3Rpb24oZGlyZWN0aW9uKTsKKyAgICByZXR1cm4geyB9OworfQorCitFeGNl
cHRpb25Pcjx2b2lkPiBJbnRlcm5hbFNldHRpbmdzOjpzZXRGcmFtZUZsYXR0ZW5pbmcoRnJhbWVG
bGF0dGVuaW5nVmFsdWUgZnJhbWVGbGF0dGVuaW5nKQoreworICAgIGlmICghbV9wYWdlKQorICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CisgICAgc2V0dGlu
Z3MoKS5zZXRGcmFtZUZsYXR0ZW5pbmcoZnJhbWVGbGF0dGVuaW5nKTsKKyAgICByZXR1cm4geyB9
OworfQorCitJbnRlcm5hbFNldHRpbmdzOjpGb3JjZWRBY2Nlc3NpYmlsaXR5VmFsdWUgSW50ZXJu
YWxTZXR0aW5nczo6Zm9yY2VkQ29sb3JzQXJlSW52ZXJ0ZWRBY2Nlc3NpYmlsaXR5VmFsdWUoKSBj
b25zdAoreworICAgIHJldHVybiBzZXR0aW5ncygpLmZvcmNlZENvbG9yc0FyZUludmVydGVkQWNj
ZXNzaWJpbGl0eVZhbHVlKCk7Cit9CisKK3ZvaWQgSW50ZXJuYWxTZXR0aW5nczo6c2V0Rm9yY2Vk
Q29sb3JzQXJlSW52ZXJ0ZWRBY2Nlc3NpYmlsaXR5VmFsdWUoSW50ZXJuYWxTZXR0aW5nczo6Rm9y
Y2VkQWNjZXNzaWJpbGl0eVZhbHVlIHZhbHVlKQoreworICAgIHNldHRpbmdzKCkuc2V0Rm9yY2Vk
Q29sb3JzQXJlSW52ZXJ0ZWRBY2Nlc3NpYmlsaXR5VmFsdWUodmFsdWUpOworfQorCitJbnRlcm5h
bFNldHRpbmdzOjpGb3JjZWRBY2Nlc3NpYmlsaXR5VmFsdWUgSW50ZXJuYWxTZXR0aW5nczo6Zm9y
Y2VkRGlzcGxheUlzTW9ub2Nocm9tZUFjY2Vzc2liaWxpdHlWYWx1ZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIHNldHRpbmdzKCkuZm9yY2VkRGlzcGxheUlzTW9ub2Nocm9tZUFjY2Vzc2liaWxpdHlW
YWx1ZSgpOworfQorCit2b2lkIEludGVybmFsU2V0dGluZ3M6OnNldEZvcmNlZERpc3BsYXlJc01v
bm9jaHJvbWVBY2Nlc3NpYmlsaXR5VmFsdWUoSW50ZXJuYWxTZXR0aW5nczo6Rm9yY2VkQWNjZXNz
aWJpbGl0eVZhbHVlIHZhbHVlKQoreworICAgIHNldHRpbmdzKCkuc2V0Rm9yY2VkRGlzcGxheUlz
TW9ub2Nocm9tZUFjY2Vzc2liaWxpdHlWYWx1ZSh2YWx1ZSk7Cit9CisKK0ludGVybmFsU2V0dGlu
Z3M6OkZvcmNlZEFjY2Vzc2liaWxpdHlWYWx1ZSBJbnRlcm5hbFNldHRpbmdzOjpmb3JjZWRQcmVm
ZXJzQ29udHJhc3RBY2Nlc3NpYmlsaXR5VmFsdWUoKSBjb25zdAoreworICAgIHJldHVybiBzZXR0
aW5ncygpLmZvcmNlZFByZWZlcnNDb250cmFzdEFjY2Vzc2liaWxpdHlWYWx1ZSgpOworfQorCit2
b2lkIEludGVybmFsU2V0dGluZ3M6OnNldEZvcmNlZFByZWZlcnNDb250cmFzdEFjY2Vzc2liaWxp
dHlWYWx1ZShJbnRlcm5hbFNldHRpbmdzOjpGb3JjZWRBY2Nlc3NpYmlsaXR5VmFsdWUgdmFsdWUp
Cit7CisgICAgc2V0dGluZ3MoKS5zZXRGb3JjZWRQcmVmZXJzQ29udHJhc3RBY2Nlc3NpYmlsaXR5
VmFsdWUodmFsdWUpOworfQorCitJbnRlcm5hbFNldHRpbmdzOjpGb3JjZWRBY2Nlc3NpYmlsaXR5
VmFsdWUgSW50ZXJuYWxTZXR0aW5nczo6Zm9yY2VkUHJlZmVyc1JlZHVjZWRNb3Rpb25BY2Nlc3Np
YmlsaXR5VmFsdWUoKSBjb25zdAoreworICAgIHJldHVybiBzZXR0aW5ncygpLmZvcmNlZFByZWZl
cnNSZWR1Y2VkTW90aW9uQWNjZXNzaWJpbGl0eVZhbHVlKCk7Cit9CisKK3ZvaWQgSW50ZXJuYWxT
ZXR0aW5nczo6c2V0Rm9yY2VkUHJlZmVyc1JlZHVjZWRNb3Rpb25BY2Nlc3NpYmlsaXR5VmFsdWUo
SW50ZXJuYWxTZXR0aW5nczo6Rm9yY2VkQWNjZXNzaWJpbGl0eVZhbHVlIHZhbHVlKQoreworICAg
IHNldHRpbmdzKCkuc2V0Rm9yY2VkUHJlZmVyc1JlZHVjZWRNb3Rpb25BY2Nlc3NpYmlsaXR5VmFs
dWUodmFsdWUpOworfQorCitJbnRlcm5hbFNldHRpbmdzOjpGb3JjZWRBY2Nlc3NpYmlsaXR5VmFs
dWUgSW50ZXJuYWxTZXR0aW5nczo6Zm9yY2VkU3VwcG9ydHNIaWdoRHluYW1pY1JhbmdlVmFsdWUo
KSBjb25zdAoreworICAgIHJldHVybiBzZXR0aW5ncygpLmZvcmNlZFN1cHBvcnRzSGlnaER5bmFt
aWNSYW5nZVZhbHVlKCk7Cit9CisKK3ZvaWQgSW50ZXJuYWxTZXR0aW5nczo6c2V0Rm9yY2VkU3Vw
cG9ydHNIaWdoRHluYW1pY1JhbmdlVmFsdWUoSW50ZXJuYWxTZXR0aW5nczo6Rm9yY2VkQWNjZXNz
aWJpbGl0eVZhbHVlIHZhbHVlKQoreworICAgIHNldHRpbmdzKCkuc2V0Rm9yY2VkU3VwcG9ydHNI
aWdoRHluYW1pY1JhbmdlVmFsdWUodmFsdWUpOworfQorCitFeGNlcHRpb25Pcjx2b2lkPiBJbnRl
cm5hbFNldHRpbmdzOjpzZXRGZXRjaEFQSUtlZXBBbGl2ZUVuYWJsZWQoYm9vbCBlbmFibGVkKQor
eworICAgIGlmICghbV9wYWdlKQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFj
Y2Vzc0Vycm9yIH07CisgICAgRGVwcmVjYXRlZEdsb2JhbFNldHRpbmdzOjpzZXRGZXRjaEFQSUtl
ZXBBbGl2ZUVuYWJsZWQoZW5hYmxlZCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworYm9vbCBJbnRl
cm5hbFNldHRpbmdzOjp2cDlEZWNvZGVyRW5hYmxlZCgpIGNvbnN0Cit7CisjaWYgRU5BQkxFKFZQ
OSkKKyAgICByZXR1cm4gbV9wYWdlID8gbV9wYWdlLT5zZXR0aW5ncygpLnZwOURlY29kZXJFbmFi
bGVkKCkgOiBmYWxzZTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKK2Jv
b2wgSW50ZXJuYWxTZXR0aW5nczo6bWVkaWFTb3VyY2VJbmxpbmVQYWludGluZ0VuYWJsZWQoKSBj
b25zdAoreworI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpICYmIChIQVZFKEFWU0FNUExFQlVGRkVS
VklERU9PVVRQVVQpIHx8IFVTRShHU1RSRUFNRVIpKQorICAgIHJldHVybiBEZXByZWNhdGVkR2xv
YmFsU2V0dGluZ3M6Om1lZGlhU291cmNlSW5saW5lUGFpbnRpbmdFbmFibGVkKCk7CisjZWxzZQor
ICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCitFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5h
bFNldHRpbmdzOjpzZXRDdXN0b21QYXN0ZWJvYXJkRGF0YUVuYWJsZWQoYm9vbCBlbmFibGVkKQor
eworICAgIGlmICghbV9wYWdlKQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFj
Y2Vzc0Vycm9yIH07CisgICAgRGVwcmVjYXRlZEdsb2JhbFNldHRpbmdzOjpzZXRDdXN0b21QYXN0
ZWJvYXJkRGF0YUVuYWJsZWQoZW5hYmxlZCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworRXhjZXB0
aW9uT3I8dm9pZD4gSW50ZXJuYWxTZXR0aW5nczo6c2V0U2hvdWxkTWFuYWdlQXVkaW9TZXNzaW9u
Q2F0ZWdvcnkoYm9vbCBzaG91bGQpCit7CisjaWYgVVNFKEFVRElPX1NFU1NJT04pCisgICAgRGVw
cmVjYXRlZEdsb2JhbFNldHRpbmdzOjpzZXRTaG91bGRNYW5hZ2VBdWRpb1Nlc3Npb25DYXRlZ29y
eShzaG91bGQpOworICAgIHJldHVybiB7IH07CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzaG91
bGQpOworICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKKyNlbmRp
ZgorfQorCitFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbFNldHRpbmdzOjpzZXRTaG91bGREaXNw
bGF5VHJhY2tLaW5kKFRyYWNrS2luZCBraW5kLCBib29sIGVuYWJsZWQpCit7CisgICAgaWYgKCFt
X3BhZ2UpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsK
KyNpZiBFTkFCTEUoVklERU8pCisgICAgYXV0byYgY2FwdGlvblByZWZlcmVuY2VzID0gbV9wYWdl
LT5ncm91cCgpLmVuc3VyZUNhcHRpb25QcmVmZXJlbmNlcygpOworICAgIHN3aXRjaCAoa2luZCkg
eworICAgIGNhc2UgVHJhY2tLaW5kOjpTdWJ0aXRsZXM6CisgICAgICAgIGNhcHRpb25QcmVmZXJl
bmNlcy5zZXRVc2VyUHJlZmVyc1N1YnRpdGxlcyhlbmFibGVkKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBUcmFja0tpbmQ6OkNhcHRpb25zOgorICAgICAgICBjYXB0aW9uUHJlZmVyZW5jZXMu
c2V0VXNlclByZWZlcnNDYXB0aW9ucyhlbmFibGVkKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBUcmFja0tpbmQ6OlRleHREZXNjcmlwdGlvbnM6CisgICAgICAgIGNhcHRpb25QcmVmZXJlbmNl
cy5zZXRVc2VyUHJlZmVyc1RleHREZXNjcmlwdGlvbnMoZW5hYmxlZCk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGtpbmQpOworICAgIFVOVVNFRF9QQVJB
TShlbmFibGVkKTsKKyNlbmRpZgorICAgIHJldHVybiB7IH07Cit9CisKK0V4Y2VwdGlvbk9yPGJv
b2w+IEludGVybmFsU2V0dGluZ3M6OnNob3VsZERpc3BsYXlUcmFja0tpbmQoVHJhY2tLaW5kIGtp
bmQpCit7CisgICAgaWYgKCFtX3BhZ2UpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZh
bGlkQWNjZXNzRXJyb3IgfTsKKyNpZiBFTkFCTEUoVklERU8pCisgICAgYXV0byYgY2FwdGlvblBy
ZWZlcmVuY2VzID0gbV9wYWdlLT5ncm91cCgpLmVuc3VyZUNhcHRpb25QcmVmZXJlbmNlcygpOwor
ICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgVHJhY2tLaW5kOjpTdWJ0aXRsZXM6CisgICAg
ICAgIHJldHVybiBjYXB0aW9uUHJlZmVyZW5jZXMudXNlclByZWZlcnNTdWJ0aXRsZXMoKTsKKyAg
ICBjYXNlIFRyYWNrS2luZDo6Q2FwdGlvbnM6CisgICAgICAgIHJldHVybiBjYXB0aW9uUHJlZmVy
ZW5jZXMudXNlclByZWZlcnNDYXB0aW9ucygpOworICAgIGNhc2UgVHJhY2tLaW5kOjpUZXh0RGVz
Y3JpcHRpb25zOgorICAgICAgICByZXR1cm4gY2FwdGlvblByZWZlcmVuY2VzLnVzZXJQcmVmZXJz
VGV4dERlc2NyaXB0aW9ucygpOworICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGtpbmQp
OworI2VuZGlmCisgICAgcmV0dXJuIGZhbHNlOworfQorCitFeGNlcHRpb25Pcjx2b2lkPiBJbnRl
cm5hbFNldHRpbmdzOjpzZXRFZGl0YWJsZVJlZ2lvbkVuYWJsZWQoYm9vbCBlbmFibGVkKQorewor
ICAgIGlmICghbV9wYWdlKQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vz
c0Vycm9yIH07CisjaWYgRU5BQkxFKEVESVRBQkxFX1JFR0lPTikKKyAgICBtX3BhZ2UtPnNldEVk
aXRhYmxlUmVnaW9uRW5hYmxlZChlbmFibGVkKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGVu
YWJsZWQpOworI2VuZGlmCisgICAgcmV0dXJuIHsgfTsKK30KKworRXhjZXB0aW9uT3I8dm9pZD4g
SW50ZXJuYWxTZXR0aW5nczo6c2V0Q2FuU3RhcnRNZWRpYShib29sIGVuYWJsZWQpCit7CisgICAg
aWYgKCFtX3BhZ2UpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJy
b3IgfTsKKyAgICBtX3BhZ2UtPnNldENhblN0YXJ0TWVkaWEoZW5hYmxlZCk7CisgICAgcmV0dXJu
IHsgfTsKK30KKworRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxTZXR0aW5nczo6c2V0VXNlRGFy
a0FwcGVhcmFuY2UoYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSkKK3sKKyAgICBpZiAoIW1fcGFnZSkK
KyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OworICAgIG1f
cGFnZS0+ZWZmZWN0aXZlQXBwZWFyYW5jZURpZENoYW5nZSh1c2VEYXJrQXBwZWFyYW5jZSwgbV9w
YWdlLT51c2VFbGV2YXRlZFVzZXJJbnRlcmZhY2VMZXZlbCgpKTsKKyAgICByZXR1cm4geyB9Owor
fQorCitFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbFNldHRpbmdzOjpzZXRVc2VFbGV2YXRlZFVz
ZXJJbnRlcmZhY2VMZXZlbChib29sIHVzZUVsZXZhdGVkVXNlckludGVyZmFjZUxldmVsKQorewor
ICAgIGlmICghbV9wYWdlKQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vz
c0Vycm9yIH07CisgICAgbV9wYWdlLT5lZmZlY3RpdmVBcHBlYXJhbmNlRGlkQ2hhbmdlKG1fcGFn
ZS0+dXNlRGFya0FwcGVhcmFuY2UoKSwgdXNlRWxldmF0ZWRVc2VySW50ZXJmYWNlTGV2ZWwpOwor
ICAgIHJldHVybiB7IH07Cit9CisKK0V4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsU2V0dGluZ3M6
OnNldEFsbG93VW5jbGFtcGVkU2Nyb2xsUG9zaXRpb24oYm9vbCBhbGxvd1VuY2xhbXBlZCkKK3sK
KyAgICBpZiAoIW1fcGFnZSB8fCAhbV9wYWdlLT5tYWluRnJhbWUoKS52aWV3KCkpCisgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKKworICAgIG1fcGFnZS0+
bWFpbkZyYW1lKCkudmlldygpLT5zZXRBbGxvd3NVbmNsYW1wZWRTY3JvbGxQb3NpdGlvbkZvclRl
c3RpbmcoYWxsb3dVbmNsYW1wZWQpOworICAgIHJldHVybiB7IH07Cit9CisKK0V4Y2VwdGlvbk9y
PHZvaWQ+ICBJbnRlcm5hbFNldHRpbmdzOjpzZXRTaG91bGREZWFjdGl2YXRlQXVkaW9TZXNzaW9u
KGJvb2wgc2hvdWxkKQoreworICAgIGlmICghbV9wYWdlKQorICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CisjaWYgRU5BQkxFKFZJREVPKSB8fCBFTkFCTEUo
V0VCX0FVRElPKQorICAgIFBsYXRmb3JtTWVkaWFTZXNzaW9uTWFuYWdlcjo6c2V0U2hvdWxkRGVh
Y3RpdmF0ZUF1ZGlvU2Vzc2lvbihzaG91bGQpOworI2VuZGlmCisgICAgcmV0dXJuIHsgfTsKK30K
KworRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxTZXR0aW5nczo6c2V0U2hvdWxkTW9ja0JvbGRT
eXN0ZW1Gb250Rm9yQWNjZXNzaWJpbGl0eShib29sIHNob3VsZCkKK3sKKyAgICBpZiAoIW1fcGFn
ZSkKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OworPDw8
PDw8PCBIRUFECisgICAgRm9udENhY2hlOjppbnZhbGlkYXRlQWxsRm9udENhY2hlcygpOworI2lm
IFBMQVRGT1JNKENPQ09BKQorICAgIHNldE92ZXJyaWRlRW5oYW5jZVRleHRMZWdpYmlsaXR5KHNo
b3VsZCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzaG91bGQpOworI2VuZGlmCit8fHx8fHx8
IHBhcmVudCBvZiA1ZmY2ODAwOGYzOWUgKFByb3BhZ2F0ZSBGb250Q2FjaGU6Om1fc2hvdWxkTW9j
a0JvbGRTeXN0ZW1Gb250Rm9yQWNjZXNzaWJpbGl0eSBjaGFuZ2VzIHRvIGFsbCBGb250Q2FjaGVz
KQorICAgIFJlbmRlclRoZW1lOjpzaW5nbGV0b24oKS5zZXRTaG91bGRNb2NrQm9sZFN5c3RlbUZv
bnRGb3JBY2Nlc3NpYmlsaXR5KHNob3VsZCk7CisgICAgLy8gRklYTUU6IENhbGwgc2V0U2hvdWxk
TW9ja0JvbGRTeXN0ZW1Gb250Rm9yQWNjZXNzaWJpbGl0eSgpIG9uIGFsbCB3b3JrZXJzLgorICAg
IEZvbnRDYWNoZTo6Zm9yQ3VycmVudFRocmVhZCgpLnNldFNob3VsZE1vY2tCb2xkU3lzdGVtRm9u
dEZvckFjY2Vzc2liaWxpdHkoc2hvdWxkKTsKKz09PT09PT0KKyAgICBSZW5kZXJUaGVtZTo6c2lu
Z2xldG9uKCkuc2V0U2hvdWxkTW9ja0JvbGRTeXN0ZW1Gb250Rm9yQWNjZXNzaWJpbGl0eShzaG91
bGQpOworICAgIEZvbnRDYWNoZTo6c2V0U2hvdWxkTW9ja0JvbGRTeXN0ZW1Gb250Rm9yQWNjZXNz
aWJpbGl0eU9uQWxsRm9udENhY2hlcyhzaG91bGQpOyAgCis+Pj4+Pj4+IDVmZjY4MDA4ZjM5ZSAo
UHJvcGFnYXRlIEZvbnRDYWNoZTo6bV9zaG91bGRNb2NrQm9sZFN5c3RlbUZvbnRGb3JBY2Nlc3Np
YmlsaXR5IGNoYW5nZXMgdG8gYWxsIEZvbnRDYWNoZXMpCisgICAgcmV0dXJuIHsgfTsKK30KKwor
RXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxTZXR0aW5nczo6c2V0RGVmYXVsdEF1ZGlvQ29udGV4
dFNhbXBsZVJhdGUoZmxvYXQgc2FtcGxlUmF0ZSkKK3sKKyAgICBpZiAoIW1fcGFnZSkKKyAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OworI2lmIEVOQUJMRShX
RUJfQVVESU8pCisgICAgQXVkaW9Db250ZXh0OjpzZXREZWZhdWx0U2FtcGxlUmF0ZUZvclRlc3Rp
bmcoc2FtcGxlUmF0ZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzYW1wbGVSYXRlKTsKKyNl
bmRpZgorICAgIHJldHVybiB7IH07Cit9CisKK0V4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsU2V0
dGluZ3M6OnNldEFsbG93ZWRNZWRpYUNvbnRhaW5lclR5cGVzKGNvbnN0IFN0cmluZyYgdHlwZXMp
Cit7CisgICAgaWYgKCFtX3BhZ2UpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlk
QWNjZXNzRXJyb3IgfTsKKyAgICBtX3BhZ2UtPnNldHRpbmdzKCkuc2V0QWxsb3dlZE1lZGlhQ29u
dGFpbmVyVHlwZXModHlwZXMpOworICAgIHJldHVybiB7IH07Cit9CisKK0V4Y2VwdGlvbk9yPHZv
aWQ+IEludGVybmFsU2V0dGluZ3M6OnNldEFsbG93ZWRNZWRpYUNvZGVjVHlwZXMoY29uc3QgU3Ry
aW5nJiB0eXBlcykKK3sKKyAgICBpZiAoIW1fcGFnZSkKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IEludmFsaWRBY2Nlc3NFcnJvciB9OworICAgIG1fcGFnZS0+c2V0dGluZ3MoKS5zZXRBbGxv
d2VkTWVkaWFDb2RlY1R5cGVzKHR5cGVzKTsKKyAgICByZXR1cm4geyB9OworfQorCitFeGNlcHRp
b25Pcjx2b2lkPiBJbnRlcm5hbFNldHRpbmdzOjpzZXRBbGxvd2VkTWVkaWFWaWRlb0NvZGVjSURz
KGNvbnN0IFN0cmluZyYgdHlwZXMpCit7CisgICAgaWYgKCFtX3BhZ2UpCisgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKKyAgICBtX3BhZ2UtPnNldHRpbmdz
KCkuc2V0QWxsb3dlZE1lZGlhVmlkZW9Db2RlY0lEcyh0eXBlcyk7CisgICAgcmV0dXJuIHsgfTsK
K30KKworRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxTZXR0aW5nczo6c2V0QWxsb3dlZE1lZGlh
QXVkaW9Db2RlY0lEcyhjb25zdCBTdHJpbmcmIHR5cGVzKQoreworICAgIGlmICghbV9wYWdlKQor
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CisgICAgbV9w
YWdlLT5zZXR0aW5ncygpLnNldEFsbG93ZWRNZWRpYUF1ZGlvQ29kZWNJRHModHlwZXMpOworICAg
IHJldHVybiB7IH07Cit9CisKK0V4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsU2V0dGluZ3M6OnNl
dEFsbG93ZWRNZWRpYUNhcHRpb25Gb3JtYXRUeXBlcyhjb25zdCBTdHJpbmcmIHR5cGVzKQorewor
ICAgIGlmICghbV9wYWdlKQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vz
c0Vycm9yIH07CisgICAgbV9wYWdlLT5zZXR0aW5ncygpLnNldEFsbG93ZWRNZWRpYUNhcHRpb25G
b3JtYXRUeXBlcyh0eXBlcyk7CisgICAgcmV0dXJuIHsgfTsKK30KKworCisKKy8vIElmIHlvdSBh
ZGQgdG8gdGhpcyBjbGFzcywgbWFrZSBzdXJlIHlvdSBhcmUgbm90IGR1cGxpY2F0aW5nIGZ1bmN0
aW9uYWxpdHkgaW4gdGhlIGdlbmVyYXRlZAorLy8gYmFzZSBjbGFzcyBJbnRlcm5hbFNldHRpbmdz
R2VuZXJhdGVkIGFuZCB0aGF0IHlvdSB1cGRhdGUgdGhlIEJhY2t1cCBjbGFzcyBmb3IgdGVzdCBy
ZXByb2R1Y2FiaWxpdHkuCisKK30K
</data>
<flag name="commit-queue"
          id="489981"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>