<?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>10675</bug_id>
          
          <creation_ts>2006-09-01 08:05:20 -0700</creation_ts>
          <short_desc>tweak font-related headers and convert lists to vectors</short_desc>
          <delta_ts>2006-09-06 09:16:42 -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>WebCore Misc.</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>ap</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>54561</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-09-01 08:05:20 -0700</bug_when>
    <thetext>I had this patch sitting around -- I think the changes are still worthwhile.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>54563</commentid>
    <comment_count>1</comment_count>
      <attachid>10349</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-09-01 08:33:36 -0700</bug_when>
    <thetext>Created attachment 10349
patch with detailed change log</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>54662</commentid>
    <comment_count>2</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2006-09-02 16:37:35 -0700</bug_when>
    <thetext>Run performance tests on this patch, since it does touch some hot code.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>54691</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-09-03 02:47:53 -0700</bug_when>
    <thetext>-#define HIRAGANA_KATAKANA_VOICING_MARKS 8
+const uint8_t hiriganaKatakanaVoicingMarksCombiningClass = 8;

I believe it&apos;s a typo, should be hiraganaKatakanaVoicingMarksCombiningClass.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>54896</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-09-06 09:16:42 -0700</bug_when>
    <thetext>Committed revision 16250.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10349</attachid>
            <date>2006-09-01 08:33:36 -0700</date>
            <delta_ts>2006-09-02 11:56:39 -0700</delta_ts>
            <desc>patch with detailed change log</desc>
            <filename>VectorPatch.txt</filename>
            <type>text/plain</type>
            <size>116889</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDE2MTcy
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYxIEBACisyMDA2LTA5
LTAxICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIGh0dHA6Ly9idWd6aWxsYS5vcGVuZGFyd2lu
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA2NzUKKyAgICAgICAgICB0d2VhayBmb250LXJlbGF0ZWQg
aGVhZGVycyBhbmQgY29udmVydCBsaXN0cyB0byB2ZWN0b3JzCisKKyAgICAgICAgT25lIG1ham9y
IGNoYW5nZSB3YXMgdG8gZ3JlYXRseSByZWR1Y2UgdGhlIG51bWJlciBvZiBmaWxlcyB0aGF0IGlu
Y2x1ZGUgRm9udC5oLgorICAgICAgICBBbm90aGVyIHdhcyB0byBjb252ZXJ0IG1hbnkgdXNlcyBv
ZiBEZXByZWNhdGVkUHRyTGlzdC9EZXByZWNhdGVkVmFsdWVMaXN0IHRvIFZlY3Rvci4KKworICAg
ICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogQWRkZWQgVGV4dFN0eWxl
LmguCisKKyAgICAgICAgKiBiaW5kaW5ncy9vYmpjL0RPTS5tbTogKC1bRE9NRWxlbWVudCBfZm9u
dF0pOiBDaGFuZ2VkIHRvIG5vdCBkZXBlbmQgb24KKyAgICAgICAgRm9udDo6Z2V0TlNGb250IHNp
bmNlIGEgV2ViQ29yZTo6Rm9udCByZXByZXNlbnRzIG1vcmUgdGhhbiBvbmUgTlNGb250LgorCisg
ICAgICAgICogYmluZGluZ3Mvb2JqYy9ET01Ob2RlLm1tOiAoLVtET01Ob2RlIGxpbmVCb3hSZWN0
c10pOiBVcGRhdGVkIHRvIHVzZSBWZWN0b3IuCisgICAgICAgICogYnJpZGdlL21hYy9Gb3JtRGF0
YU1hYy5tbTogKFdlYkNvcmU6OmFycmF5RnJvbUZvcm1EYXRhKTogRGl0dG8uCisgICAgICAgICog
YnJpZGdlL21hYy9GcmFtZVZpZXdNYWMubW06IChXZWJDb3JlOjpGcmFtZVZpZXc6OnVwZGF0ZURh
c2hib2FyZFJlZ2lvbnMpOiBEaXR0by4KKyAgICAgICAgKiBjc3MvQ1NTQ29tcHV0ZWRTdHlsZURl
Y2xhcmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJh
dGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1ZSk6IERpdHRvLgorICAgICAgICAqIGRvbS9Eb2N1bWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6ZGFzaGJvYXJkUmVnaW9ucyk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNldERhc2hib2FyZFJlZ2lvbnMpOiBE
aXR0by4KKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDogRGl0dG8uCisgICAgICAgICogZWRpdGlu
Zy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNl
bWVudEZyYWdtZW50OjpyZW1vdmVVbnJlbmRlcmVkTm9kZXMpOiBEaXR0by4KKyAgICAgICAgKiBo
dG1sL0Zvcm1EYXRhTGlzdC5oOiBEaXR0by4KKyAgICAgICAgKiBodG1sL0hUTUxBbmNob3JFbGVt
ZW50LmNwcDogKFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50Ojppc0ZvY3VzYWJsZSk6IERpdHRv
LgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1FbGVtZW50LmNwcDogKFdlYkNvcmU6OkhUTUxGb3Jt
RWxlbWVudDo6Zm9ybURhdGEpOiBEaXR0by4KKyAgICAgICAgKiBrY2FudmFzL1JlbmRlclBhdGgu
Y3BwOiAoV2ViQ29yZTo6UmVuZGVyUGF0aDo6YWJzb2x1dGVSZWN0cyk6IERpdHRvLgorICAgICAg
ICAqIGtjYW52YXMvUmVuZGVyUGF0aC5oOiBEaXR0by4KKyAgICAgICAgKiBrY2FudmFzL1JlbmRl
clNWR0ltYWdlLmNwcDogKFdlYkNvcmU6OlJlbmRlclNWR0ltYWdlOjphYnNvbHV0ZVJlY3RzKTog
RGl0dG8uCisgICAgICAgICoga2NhbnZhcy9SZW5kZXJTVkdJbWFnZS5oOiBEaXR0by4KKyAgICAg
ICAgKiBrY2FudmFzL1JlbmRlclNWR1RleHQuY3BwOiAoV2ViQ29yZTo6UmVuZGVyU1ZHVGV4dDo6
YWJzb2x1dGVSZWN0cyk6IERpdHRvLgorICAgICAgICAqIGtjYW52YXMvUmVuZGVyU1ZHVGV4dC5o
OiBEaXR0by4KKyAgICAgICAgKiBsb2FkZXIvRm9ybURhdGEuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9ybURhdGE6OmZsYXR0ZW4pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRh
OjpmbGF0dGVuVG9TdHJpbmcpOiBEaXR0by4KKyAgICAgICAgKiBsb2FkZXIvRm9ybURhdGEuaDog
KFdlYkNvcmU6OkZvcm1EYXRhOjplbGVtZW50cyk6IERpdHRvLgorICAgICAgICAqIGxvYWRlci9t
YWMvTG9hZGVyRnVuY3Rpb25zTWFjLm1tOiAoV2ViQ29yZTo6U2VydmVTeW5jaHJvbm91c1JlcXVl
c3QpOiBEaXR0by4KKyAgICAgICAgKiBwYWdlL0ZyYW1lLmNwcDogKFdlYkNvcmU6OkZyYW1lOjpt
YXJrZWRUZXh0VW5kZXJsaW5lcyk6IERpdHRvLgorICAgICAgICAqIHBhZ2UvRnJhbWUuaDogRGl0
dG8uCisgICAgICAgICogcGFnZS9GcmFtZVByaXZhdGUuaDogRGl0dG8uCisgICAgICAgICogcGxh
dGZvcm0vbWFjL1Jlc291cmNlTG9hZGVyTWFjLm1tOiAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXI6
OnN0YXJ0KTogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL0lubGluZVRleHRCb3guaDogRGl0
dG8uCisgICAgICAgICogcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW5saW5lVGV4dEJveDo6cGFpbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Oklu
bGluZVRleHRCb3g6OnBhaW50TWFya2VkVGV4dFVuZGVybGluZSk6IERpdHRvLgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJDb250YWluZXIuaDogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckNvbnRhaW5lci5jcHA6IChXZWJDb3JlOjpSZW5kZXJDb250YWluZXI6OmxpbmVCb3hS
ZWN0cyk6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuaDogRGl0dG8u
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHA6IChXZWJDb3JlOjpSZW5kZXJJ
bmxpbmU6OmFic29sdXRlUmVjdHMpOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
T2JqZWN0Lmg6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpsaW5lQm94UmVjdHMpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6YWJzb2x1dGVSZWN0cyk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjphYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjphZGREYXNoYm9hcmRSZWdpb25z
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmNvbGxlY3REYXNoYm9h
cmRSZWdpb25zKTogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclN0eWxlLmg6IERp
dHRvLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTdHlsZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTdHlsZTo6aW5pdGlhbERhc2hib2FyZFJlZ2lvbnMpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpub25lRGFzaGJvYXJkUmVnaW9ucyk6IERpdHRvLgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Lmg6IERpdHRvLgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmFic29s
dXRlUmVjdHMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmxpbmVCb3hS
ZWN0cyk6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWV3Lmg6IERpdHRvLgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWV3LmNwcDogKFdlYkNvcmU6OlJlbmRlclZpZXc6
OmFic29sdXRlUmVjdHMpOiBEaXR0by4KKworICAgICAgICAqIGJyaWRnZS9tYWMvRnJhbWVNYWMu
bW06CisgICAgICAgIChXZWJDb3JlOjpGcmFtZU1hYzo6YXR0cmlidXRlZFN0cmluZyk6IFVwZGF0
ZWQgdG8gdXNlIFZlY3RvciBhbmQgY2hhbmdlZCB0byBub3QKKyAgICAgICAgZGVwZW5kIG9uIGdl
dE5TRm9udCBvbiBhIEZvbnQuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZU1hYzo6Zm9udEZvclNl
bGVjdGlvbik6IENoYW5nZWQgdG8gbm90IGRlcGVuZCBvbiBGb250OjpnZXROU0ZvbnQuCisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZU1hYzo6Zm9udEF0dHJpYnV0ZXNGb3JTZWxlY3Rpb25TdGFydCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydEF0dHJpYnV0ZXNUb1VuZGVybGluZXMp
OiBVcGRhdGVkIHRvIHVzZSBWZWN0b3IuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZU1hYzo6c2V0
TWFya2VkVGV4dFJhbmdlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpGcmFtZU1hYzo6ZGFz
aGJvYXJkUmVnaW9uc0RpY3Rpb25hcnkpOiBEaXR0by4KKworICAgICAgICAqIGJyaWRnZS9tYWMv
V2ViQ29yZUFYT2JqZWN0Lm1tOgorICAgICAgICAoYm91bmRpbmdCb3hSZWN0KTogVXBkYXRlZCB0
byB1c2UgVmVjdG9yLgorICAgICAgICAoQVhBdHRyaWJ1dGVTdHJpbmdTZXRTdHlsZSk6IENoYW5n
ZWQgdG8gbm90IGRlcGVuZCBvbiBGb250OjpnZXROU0ZvbnQuCisKKyAgICAgICAgKiBicmlkZ2Uv
bWFjL1dlYkNvcmVTdHJpbmdUcnVuY2F0b3IubW06IFVwZGF0ZWQgaW5jbHVkZXMuCisgICAgICAg
ICogcGFnZS9TZXR0aW5ncy5oOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvV2ViQ29y
ZVRleHRSZW5kZXJlci5tbTogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL0VsbGlwc2lzQm94
LmNwcDogRGl0dG8uCisKKyAgICAgICAgKiBlZGl0aW5nL0JyZWFrQmxvY2txdW90ZUNvbW1hbmQu
Y3BwOiAoV2ViQ29yZTo6QnJlYWtCbG9ja3F1b3RlQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAg
IFVwZGF0ZWQgdG8gdXNlIGEgVmVjdG9yIHRoYXQgd2UgaXRlcmF0ZSBpbiByZXZlcnNlIG9yZGVy
IGluc3RlYWQgb2YgYSBsaW5rZWQgbGlzdAorICAgICAgICB0aGF0IHdlIHJldmVyc2UgYnkgcHJl
cGVuZGluZyBlbGVtZW50cyBpbnN0ZWFkIG9mIGFkZGluZyB0byB0aGUgZW5kLgorICAgICAgICAq
IGVkaXRpbmcvSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjpkb0FwcGx5KTogRGl0dG8u
CisKKyAgICAgICAgKiBsb2FkZXIvRG9jTG9hZGVyLmg6IFJlbW92ZWQgdW5uZWVkZWQgaW5jbHVk
ZSBvZiBEZXByZWNhdGVkUHRyTGlzdC5oLgorCisgICAgICAgICogcGxhdGZvcm0vRm9udC5oOiBN
b3ZlZCBUZXh0U3R5bGUgdG8gYSBzZXBhcmF0ZSBoZWFkZXIuIFJlbW92ZWQgRm9udDo6Z2V0TlNG
b250LgorICAgICAgICAqIHBsYXRmb3JtL0ZvbnQuY3BwOiBDaGFuZ2VkIHRvIHVzZSBjb25zdCBp
bnN0ZWFkIG9mICNkZWZpbmUuCisgICAgICAgIChXZWJDb3JlOjpGb250Ojp3aWR0aCk6IE92ZXJs
b2FkZWQgdGhpcyBzbyB3ZSBkb24ndCBoYXZlIGEgZGVmYXVsdCBwYXJhbWV0ZXIsIHdoaWNoCisg
ICAgICAgIGVsaW1pbmF0ZXMgdGhlIG5lZWQgdG8gaGF2ZSBUZXh0U3R5bGUgZGVmaW5lZCB0byBj
b21waWxlciB0aGUgRm9udC5oIGhlYWRlci4KKworICAgICAgICAqIHBsYXRmb3JtL1RleHRTdHls
ZS5oOiBBZGRlZC4KKworICAgICAgICAqIHBsYXRmb3JtL0ZvbnREYXRhLmg6IEFkZGVkIGEgZm9y
d2FyZCBkZWNsYXJhdGlvbiBvZiBBVFNVU3R5bGUgc28gdGhpcyBoZWFkZXIKKyAgICAgICAgY2Fu
IHN0YW5kIGFsb25lLgorCisgICAgICAgICogcGxhdGZvcm0vRm9udEZhbGxiYWNrTGlzdC5oOiBU
d2Vha3MuCisgICAgICAgICogcGxhdGZvcm0vRm9udEZhbGxiYWNrTGlzdC5jcHA6IFR3ZWFrcy4K
KworICAgICAgICAqIHBsYXRmb3JtL0ZvbnRGYW1pbHkuaDogUmVtb3ZlZCB1bm5lZWRlZCBOU1N0
cmluZyBkZWNsYXJhdGlvbi4gU2ltcGxpZmllZCBjbGFzcyBieQorICAgICAgICB1c2luZyBTaGFy
ZWQgYW5kIFJlZlB0ciwgd2hpY2ggcmVzdWx0ZWQgaW4gcmVtb3ZpbmcgbWFueSBleHBsaWNpdCBm
dW5jdGlvbnMuCisgICAgICAgICogcGxhdGZvcm0vRm9udEZhbWlseS5jcHA6IE1vcmUgb2YgdGhl
IHNhbWUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9HbHlwaEJ1ZmZlci5oOiBSZW1vdmVkIHVubmVl
ZGVkIE1BWF9HTFlQSF9FWFBBTlNJT04gYW5kIEdMWVBIX0JVRkZFUl9TSVpFCisgICAgICAgIG1h
Y3Jvcy4KKworICAgICAgICAqIHBsYXRmb3JtL0dseXBoTWFwLmg6IFJlbW92ZWQgdW5uZWVkZWQg
aW5jbHVkZSBvZiBHbHlwaEJ1ZmZlci5oLCB3aGljaCB3YXMgaW5jbHVkZWQKKyAgICAgICAgb25s
eSBmb3IgdGhlIHR5cGVkZWYgb2YgR2x5cGg7IHRoZXJlJ3Mgbm8gcmVhc29uIHRvIG5vdCBqdXN0
IHJlcGVhdCB0aGF0IHR5cGVkZWYgaGVyZQorICAgICAgICBzaW5jZSBDKysgYWxsb3dzIG11bHRp
cGxlIHR5cGVkZWZzIGlmIHRoZXkgbWF0Y2guIFJlbmFtZWQgdGhlIGNHbHlwaFBhZ2VTaXplIGNv
bnN0YW50CisgICAgICAgIHRvIEdseXBoUGFnZTo6c2l6ZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9H
bHlwaE1hcC5jcHA6IENoYW5nZWQgTk9fQlJFQUtfU1BBQ0UgYW5kIFpFUk9fV0lEVEhfU1BBQ0Ug
bWFjcm9zIGludG8KKyAgICAgICAgY29uc3RhbnRzLiBVcGRhdGVkIGZvciBjR2x5cGhQYWdlU2l6
ZSBjaGFuZ2UuCisgICAgICAgICogcGxhdGZvcm0vbWFjL0dseXBoTWFwTWFjLmNwcDogVXBkYXRl
ZCBmb3IgY0dseXBoUGFnZVNpemUgY2hhbmdlLgorCisgICAgICAgICogcGxhdGZvcm0vR2x5cGhX
aWR0aE1hcC5oOiBSZW1vdmVkIHVubmVlZGVkIGluY2x1ZGUgb2YgR2x5cGhCdWZmZXIuaCwgd2hp
Y2ggd2FzIGluY2x1ZGVkCisgICAgICAgIG9ubHkgZm9yIHRoZSB0eXBlZGVmIG9mIEdseXBoOyB0
aGVyZSdzIG5vIHJlYXNvbiB0byBub3QganVzdCByZXBlYXQgdGhhdCB0eXBlZGVmIGhlcmUKKyAg
ICAgICAgc2luY2UgQysrIGFsbG93cyBtdWx0aXBsZSB0eXBlZGVmcyBpZiB0aGV5IG1hdGNoLiBS
ZW5hbWVkIHRoZSBjR2x5cGhXaWR0aFBhZ2VTaXplIGNvbnN0YW50CisgICAgICAgIHRvIEdseXBo
V2lkdGhQYWdlOjpzaXplLgorICAgICAgICAqIHBsYXRmb3JtL0dseXBoV2lkdGhNYXAuY3BwOiBV
cGRhdGVkIGZvciBjR2x5cGhXaWR0aFBhZ2VTaXplIGNoYW5nZS4KKworICAgICAgICAqIHBsYXRm
b3JtL0dyYXBoaWNzQ29udGV4dC5oOiBSZW1vdmVkIHVubmVlZGVkIGluY2x1ZGUgb2YgRm9udC5o
LiBDaGFuZ2VkIGRyYXdUZXh0CisgICAgICAgIGZ1bmN0aW9uIHRvIHVzZSBvdmVybG9hZGluZyBp
bnN0ZWFkIG9mIGRlZmF1bHQgcGFyYW1ldGVycyB0byBhbGxvdyBUZXh0U3R5bGUgdG8gYmUgb3B0
aW9uYWwuCisgICAgICAgIFRoaXMgY3V0cyB0aGUgZGVwZW5kZW5jeSBvbiBUZXh0U3R5bGUuCisg
ICAgICAgICogcGxhdGZvcm0vR3JhcGhpY3NDb250ZXh0LmNwcDogKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6ZHJhd1RleHQpOiBBZGRlZCBvdmVybG9hZC4KKworICAgICAgICAqIHBsYXRmb3Jt
L0ltYWdlLmg6IFJlbW92ZWQgdW5uZWVkZWQgZm9yd2FyZCBkZWNsYXJhdGlvbiBvZiBJbnRTaXpl
LgorCisgICAgICAgICogcGxhdGZvcm0vbWFjL0ZvbnRDYWNoZU1hYy5tbTogKFdlYkNvcmU6OkZv
bnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKToKKyAgICAgICAgQ2hhbmdlZCB0byBu
b3QgZGVwZW5kIG9uIEZvbnQ6OmdldE5TRm9udC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvTGlz
dEJveE1hYy5tbTogKC1bV2ViQ29yZVRhYmxlVmlldyBmb250Q2hhbmdlZF0pOiBEaXR0by4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9tYWMvVGV4dEZpZWxkTWFjLm1tOiAoLVtOU1NlYXJjaEZpZWxkQ2Vs
bCBfYWRkU3RyaW5nVG9SZWNlbnRTZWFyY2hlczpdKToKKyAgICAgICAgRGl0dG8uCisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclBvcHVwTWVudU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclBvcHVwTWVudU1hYzo6c2hvd1BvcHVwKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJQb3B1cE1lbnVNYWM6OmFkZEdyb3VwTGFiZWwpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclBvcHVwTWVudU1hYzo6YWRkT3B0aW9uKTogRGl0dG8uCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9tYWMvRm9udERhdGFNYWMubW06IEZpeGVkIGluY2x1ZGVzLiBDb252ZXJ0ZWQgYSBi
dW5jaCBvZiBtYWNyb3MgdG8gYmUKKyAgICAgICAgY29uc3RhbnRzIGFuZCBpbmxpbmUgZnVuY3Rp
b25zIGluc3RlYWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvRm9udE1hYy5tbTogRml4ZWQg
aW5jbHVkZXMuCisgICAgICAgICogcGxhdGZvcm0vbWFjL1BvcFVwQnV0dG9uTWFjLm1tOiBEaXR0
by4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwOiBEaXR0by4KKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwOiBEaXR0by4KKworICAgICAgICAq
IHBsYXRmb3JtL21hYy9XZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmg6IEZpeGVzIHNvIHRoaXMgaGVh
ZGVyIHN0YW5kcyBhbG9uZSBhbmQgaXMKKyAgICAgICAgY29tcGF0aWJsZSB3aXRoIGFsbCA0IG9m
IEMsIE9iakMsIEMrKywgT2JqQysrLgorCiAyMDA2LTA4LTMxICBTYW0gV2VpbmlnICA8c2FtLndl
aW5pZ0BnbWFpbC5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgVGltIEguCkluZGV4OiBXZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNjE3MCkKKysrIFdlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNjY1LDYgKzY2NSw3IEBACiAJ
CTkzOTg4NUM0MDhCN0UzRDEwMEU3MDdDNCAvKiBFdmVudE5hbWVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5Mzk4ODVDMjA4QjdFM0QxMDBFNzA3QzQg
LyogRXZlbnROYW1lcy5oICovOyB9OwogCQk5M0ExRUFBMDBBNTYzNEM5MDA2OTYwQTAgLyogSW1h
Z2VEb2N1bWVudE1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDkzQTFFQTlGMEE1NjM0QzkwMDY5NjBBMCAvKiBJbWFnZURvY3VtZW50TWFjLm1tICov
OyB9OwogCQk5M0ExRUFBODBBNTYzNTA4MDA2OTYwQTAgLyogSW1hZ2VEb2N1bWVudE1hYy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNBMUVBQTcwQTU2
MzUwODAwNjk2MEEwIC8qIEltYWdlRG9jdW1lbnRNYWMuaCAqLzsgfTsKKwkJOTNBQzhERTEwQTk1
NUZBQzAwMjM5Nzk0IC8qIFRleHRTdHlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTNBQzhERTAwQTk1NUZBQzAwMjM5Nzk0IC8qIFRleHRTdHlsZS5o
ICovOyB9OwogCQk5M0IwRkQ4QTBBNzU5QkVEMDA4MEFENDQgLyogU3RyaW5nSW1wbE1hYy5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQjBGRDg4MEE3
NTlCRUQwMDgwQUQ0NCAvKiBTdHJpbmdJbXBsTWFjLm1tICovOyB9OwogCQk5M0IwRkQ4QjBBNzU5
QkVEMDA4MEFENDQgLyogU3RyaW5nTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTNCMEZEODkwQTc1OUJFRDAwODBBRDQ0IC8qIFN0cmluZ01hYy5t
bSAqLzsgfTsKIAkJOTNCNzBENUQwOUVCMEM3QzAwOUQ4NDY4IC8qIEpTWE1MSHR0cFJlcXVlc3Qu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNCNzBE
NDEwOUVCMEM3QzAwOUQ4NDY4IC8qIEpTWE1MSHR0cFJlcXVlc3QuY3BwICovOyB9OwpAQCAtMjYx
Niw2ICsyNjE3LDcgQEAKIAkJOTNBMUVBQTcwQTU2MzUwODAwNjk2MEEwIC8qIEltYWdlRG9jdW1l
bnRNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VEb2N1bWVudE1h
Yy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0FCQ0U1RDA2RTFBNDJFMDA4NTky
NUIgLyogRm9ybURhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRm9ybURhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0
YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJOTNBQkNFNUUwNkUxQTQyRTAwODU5MjVC
IC8qIEZvcm1EYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEZvcm1EYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0g
ODsgdXNlc1RhYnMgPSAwOyB9OworCQk5M0FDOERFMDBBOTU1RkFDMDAyMzk3OTQgLyogVGV4dFN0
eWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFRleHRTdHlsZS5oOyBwYXRo
ID0gcGxhdGZvcm0vVGV4dFN0eWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkz
QjBGRDg4MEE3NTlCRUQwMDgwQUQ0NCAvKiBTdHJpbmdJbXBsTWFjLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFN0cmluZ0ltcGxNYWMubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTkzQjBGRDg5MEE3NTlCRUQwMDgwQUQ0NCAvKiBTdHJpbmdNYWMu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU3RyaW5nTWFjLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0I2NDFGMTA2RTI4QzVDMDA1NUY2MTAg
LyogRm9ybURhdGFNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBGb3JtRGF0YU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CkBAIC0zOTU4LDYgKzM5NjAsNyBAQAog
CQkJCTA4OUMxNjY1RkU4NDExNThDMDJBQUMwNyAvKiBSZXNvdXJjZXMgKi8sCiAJCQkJMDg2N0Q2
OUFGRTg0MDI4RkMwMkFBQzA3IC8qIEZyYW1ld29ya3MgKi8sCiAJCQkJMDM0NzY4REZGRjM4QTUw
NDExREI5QzhCIC8qIFByb2R1Y3RzICovLAorCQkJCTkzQUM4REUwMEE5NTVGQUMwMDIzOTc5NCAv
KiBUZXh0U3R5bGUuaCAqLywKIAkJCSk7CiAJCQluYW1lID0gV2ViS2l0OwogCQkJc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsKQEAgLTcwNzIsNiArNzA3NSw3IEBACiAJCQkJMUFDRTUzRjcwQThEMTk0
NzAwMjI5NDdEIC8qIEpTWE1MU2VyaWFsaXplci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE3NTBE
NUQwQTkwREVFMTAwMEZGMjE1IC8qIEpTVHJlZVdhbGtlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MUE3NTBEOEUwQTkwRTUyMTAwMEZGMjE1IC8qIEpTTm9kZUl0ZXJhdG9yLmggaW4gSGVhZGVycyAq
LywKKwkJCQk5M0FDOERFMTBBOTU1RkFDMDAyMzk3OTQgLyogVGV4dFN0eWxlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4NTA4OUNENzBBOThDNDI4MDBBMjc1QUEgLyogRE9NQ0RBVEFTZWN0aW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4NTA4OUNEOTBBOThDNDI4MDBBMjc1QUEgLyogRE9NQ29tbWVu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODUwODlDREIwQTk4QzQyODAwQTI3NUFBIC8qIERPTURv
Y3VtZW50RnJhZ21lbnQuaCBpbiBIZWFkZXJzICovLApAQCAtNzE5Niw3ICs3MjAwLDYgQEAKIAkJ
CW1haW5Hcm91cCA9IDA4NjdENjkxRkU4NDAyOEZDMDJBQUMwNyAvKiBXZWJLaXQgKi87CiAJCQlw
cm9kdWN0UmVmR3JvdXAgPSAwMzQ3NjhERkZGMzhBNTA0MTFEQjlDOEIgLyogUHJvZHVjdHMgKi87
CiAJCQlwcm9qZWN0RGlyUGF0aCA9ICIiOwotCQkJcHJvamVjdFJvb3QgPSAiIjsKIAkJCXRhcmdl
dHMgPSAoCiAJCQkJOTNGMTk4QTUwODI0NUU1OTAwMUU5QUJDIC8qIFdlYkNvcmUgKi8sCiAJCQkJ
REQwNDFGQkUwOUQ5RERCRTAwMTBBRjJBIC8qIERlcml2ZWQgU291cmNlcyAqLywKSW5kZXg6IGJp
bmRpbmdzL29iamMvRE9NLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJpbmRpbmdzL29iamMvRE9NLm1tCShy
ZXZpc2lvbiAxNjE3MCkKKysrIGJpbmRpbmdzL29iamMvRE9NLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC00Myw2ICs0Myw3IEBACiAjaW1wb3J0ICJFbnRpdHlSZWZlcmVuY2UuaCIKICNpbXBvcnQgIkV2
ZW50LmgiCiAjaW1wb3J0ICJFdmVudExpc3RlbmVyLmgiCisjaW1wb3J0ICJGb250RGF0YS5oIgog
I2ltcG9ydCAiRm91bmRhdGlvbkV4dHJhcy5oIgogI2ltcG9ydCAiRnJhbWVNYWMuaCIKICNpbXBv
cnQgIkhUTUxEb2N1bWVudC5oIgpAQCAtNjUyLDkgKzY1Myw4IEBAIHN0YXRpYyBDbGFzcyBlbGVt
ZW50Q2xhc3MoY29uc3QgQXRvbWljU3QKIC0gKE5TRm9udCAqKV9mb250CiB7CiAgICAgUmVuZGVy
T2JqZWN0ICpyZW5kZXJlciA9IFtzZWxmIF9lbGVtZW50XS0+cmVuZGVyZXIoKTsKLSAgICBpZiAo
cmVuZGVyZXIpIHsKLSAgICAgICAgcmV0dXJuIHJlbmRlcmVyLT5zdHlsZSgpLT5mb250KCkuZ2V0
TlNGb250KCk7Ci0gICAgfQorICAgIGlmIChyZW5kZXJlcikKKyAgICAgICAgcmV0dXJuIHJlbmRl
cmVyLT5zdHlsZSgpLT5mb250KCkucHJpbWFyeUZvbnQoKS0+Z2V0TlNGb250KCk7CiAgICAgcmV0
dXJuIG5pbDsKIH0KIApJbmRleDogYmluZGluZ3Mvb2JqYy9ET01Ob2RlLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGJpbmRpbmdzL29iamMvRE9NTm9kZS5tbQkocmV2aXNpb24gMTYxNzApCisrKyBiaW5kaW5n
cy9vYmpjL0RPTU5vZGUubW0JKHdvcmtpbmcgY29weSkKQEAgLTI3OCwxMyArMjc4LDEzIEBACiB7
CiAgICAgV2ViQ29yZTo6UmVuZGVyT2JqZWN0ICpyZW5kZXJlciA9IFtzZWxmIF9ub2RlXS0+cmVu
ZGVyZXIoKTsKICAgICBpZiAocmVuZGVyZXIpIHsKLSAgICAgICAgTlNNdXRhYmxlQXJyYXkgKnJl
c3VsdHMgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XTsKLSAgICAgICAgV2ViQ29yZTo6
RGVwcmVjYXRlZFZhbHVlTGlzdDxXZWJDb3JlOjpJbnRSZWN0PiByZWN0cyA9IHJlbmRlcmVyLT5s
aW5lQm94UmVjdHMoKTsKLSAgICAgICAgaWYgKCFyZWN0cy5pc0VtcHR5KCkpIHsKLSAgICAgICAg
ICAgIGZvciAoV2ViQ29yZTo6RGVwcmVjYXRlZFZhbHVlTGlzdDxXZWJDb3JlOjpJbnRSZWN0Pjo6
Q29uc3RJdGVyYXRvciBpdCA9IHJlY3RzLmJlZ2luKCk7IGl0ICE9IHJlY3RzLmVuZCgpOyArK2l0
KQotICAgICAgICAgICAgICAgIFtyZXN1bHRzIGFkZE9iamVjdDpbTlNWYWx1ZSB2YWx1ZVdpdGhS
ZWN0OippdF1dOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBbcmVzdWx0cyBhdXRvcmVsZWFz
ZV07CisgICAgICAgIFZlY3RvcjxXZWJDb3JlOjpJbnRSZWN0PiByZWN0czsKKyAgICAgICAgcmVu
ZGVyZXItPmxpbmVCb3hSZWN0cyhyZWN0cyk7CisgICAgICAgIHNpemVfdCBzaXplID0gcmVjdHMu
c2l6ZSgpOworICAgICAgICBOU011dGFibGVBcnJheSAqcmVzdWx0cyA9IFtOU011dGFibGVBcnJh
eSBhcnJheVdpdGhDYXBhY2l0eTpzaXplXTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzaXplOyArK2kpCisgICAgICAgICAgICBbcmVzdWx0cyBhZGRPYmplY3Q6W05TVmFsdWUgdmFs
dWVXaXRoUmVjdDpyZWN0c1tpXV1dOworICAgICAgICByZXR1cm4gcmVzdWx0czsKICAgICB9CiAg
ICAgcmV0dXJuIG5pbDsKIH0KSW5kZXg6IGJyaWRnZS9tYWMvRm9ybURhdGFNYWMubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gYnJpZGdlL21hYy9Gb3JtRGF0YU1hYy5tbQkocmV2aXNpb24gMTYxNzApCisrKyBi
cmlkZ2UvbWFjL0Zvcm1EYXRhTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMiArMzMsMTMg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBOU0FycmF5ICphcnJheUZyb21Gb3JtRGF0YShjb25z
dCBGb3JtRGF0YSAmZCkKIHsKLSAgICBOU011dGFibGVBcnJheSAqYSA9IFtOU011dGFibGVBcnJh
eSBhcnJheVdpdGhDYXBhY2l0eTpkLmNvdW50KCldOwotICAgIGZvciAoRGVwcmVjYXRlZFZhbHVl
TGlzdENvbnN0SXRlcmF0b3I8Rm9ybURhdGFFbGVtZW50PiBpdCA9IGQuYmVnaW4oKTsgaXQgIT0g
ZC5lbmQoKTsgKytpdCkgewotICAgICAgICBjb25zdCBGb3JtRGF0YUVsZW1lbnQgJmUgPSAqaXQ7
Ci0gICAgICAgIGlmIChlLm1fdHlwZSA9PSBGb3JtRGF0YUVsZW1lbnQ6OmRhdGEpIHsKKyAgICBz
aXplX3QgbiA9IGQuZWxlbWVudHMoKS5zaXplKCk7CisgICAgTlNNdXRhYmxlQXJyYXkgKmEgPSBb
TlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6bl07CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBuOyArK2kpIHsKKyAgICAgICAgY29uc3QgRm9ybURhdGFFbGVtZW50JiBlID0gZC5l
bGVtZW50cygpW2ldOworICAgICAgICBpZiAoZS5tX3R5cGUgPT0gRm9ybURhdGFFbGVtZW50Ojpk
YXRhKQogICAgICAgICAgICAgW2EgYWRkT2JqZWN0OltOU0RhdGEgZGF0YVdpdGhCeXRlczplLm1f
ZGF0YS5kYXRhKCkgbGVuZ3RoOmUubV9kYXRhLnNpemUoKV1dOwotICAgICAgICB9IGVsc2Ugewor
ICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIEFTU0VSVChlLm1fdHlwZSA9PSBGb3JtRGF0YUVs
ZW1lbnQ6OmVuY29kZWRGaWxlKTsKICAgICAgICAgICAgIFthIGFkZE9iamVjdDplLm1fZmlsZW5h
bWUuZ2V0TlNTdHJpbmcoKV07CiAgICAgICAgIH0KSW5kZXg6IGJyaWRnZS9tYWMvRnJhbWVNYWMu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gYnJpZGdlL21hYy9GcmFtZU1hYy5tbQkocmV2aXNpb24gMTYxNzAp
CisrKyBicmlkZ2UvbWFjL0ZyYW1lTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3
IEBACiAjaW1wb3J0ICJFdmVudC5oIgogI2ltcG9ydCAiRXZlbnROYW1lcy5oIgogI2ltcG9ydCAi
RmxvYXRSZWN0LmgiCisjaW1wb3J0ICJGb250RGF0YS5oIgogI2ltcG9ydCAiRm91bmRhdGlvbkV4
dHJhcy5oIgogI2ltcG9ydCAiRnJhbWVQcml2YXRlLmgiCiAjaW1wb3J0ICJHcmFwaGljc0NvbnRl
eHQuaCIKQEAgLTIyOTksOCArMjMwMCw4IEBAIE5TQXR0cmlidXRlZFN0cmluZyAqRnJhbWVNYWM6
OmF0dHJpYnV0ZWQKICAgICBib29sIGhhc1BhcmFncmFwaEJyZWFrID0gdHJ1ZTsKICAgICBjb25z
dCBFbGVtZW50ICpsaW5rU3RhcnROb2RlID0gMDsKICAgICB1bnNpZ25lZCBsaW5rU3RhcnRMb2Nh
dGlvbiA9IDA7Ci0gICAgRGVwcmVjYXRlZFB0ckxpc3Q8RWxlbWVudD4gbGlzdEl0ZW1zOwotICAg
IERlcHJlY2F0ZWRWYWx1ZUxpc3Q8TGlzdEl0ZW1JbmZvPiBsaXN0SXRlbUxvY2F0aW9uczsKKyAg
ICBWZWN0b3I8RWxlbWVudCo+IGxpc3RJdGVtczsKKyAgICBWZWN0b3I8TGlzdEl0ZW1JbmZvPiBs
aXN0SXRlbUxvY2F0aW9uczsKICAgICBmbG9hdCBtYXhNYXJrZXJXaWR0aCA9IDA7CiAgICAgCiAg
ICAgTm9kZSAqbiA9IF9zdGFydE5vZGU7CkBAIC0yMzE5LDcgKzIzMjAsNyBAQCBOU0F0dHJpYnV0
ZWRTdHJpbmcgKkZyYW1lTWFjOjphdHRyaWJ1dGVkCiAgICAgICAgIFJlbmRlck9iamVjdCAqcmVu
ZGVyZXIgPSBuLT5yZW5kZXJlcigpOwogICAgICAgICBpZiAocmVuZGVyZXIpIHsKICAgICAgICAg
ICAgIFJlbmRlclN0eWxlICpzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwotICAgICAgICAgICAg
TlNGb250ICpmb250ID0gc3R5bGUtPmZvbnQoKS5nZXROU0ZvbnQoKTsKKyAgICAgICAgICAgIE5T
Rm9udCAqZm9udCA9IHN0eWxlLT5mb250KCkucHJpbWFyeUZvbnQoKS0+Z2V0TlNGb250KCk7CiAg
ICAgICAgICAgICBib29sIG5lZWRTcGFjZSA9IHBlbmRpbmdTdHlsZWRTcGFjZSAhPSBuaWw7CiAg
ICAgICAgICAgICBpZiAobi0+aXNUZXh0Tm9kZSgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGhh
c05ld0xpbmUpIHsKQEAgLTI1NzQsOSArMjU3NSw5IEBAIE5TQXR0cmlidXRlZFN0cmluZyAqRnJh
bWVNYWM6OmF0dHJpYnV0ZWQKICAgICAgICAgICAgICAgICBoYXNOZXdMaW5lID0gdHJ1ZTsKICAg
ICAgICAgICAgIH0gZWxzZSBpZiAobi0+aGFzVGFnTmFtZShsaVRhZykpIHsKICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBpbnQgaSwgY291bnQgPSBsaXN0SXRlbXMuY291bnQoKTsK
KyAgICAgICAgICAgICAgICBpbnQgaSwgY291bnQgPSBsaXN0SXRlbXMuc2l6ZSgpOwogICAgICAg
ICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKXsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGxpc3RJdGVtcy5hdChpKSA9PSBuKXsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxp
c3RJdGVtc1tpXSA9PSBuKXsKICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RJdGVtTG9jYXRp
b25zW2ldLmVuZCA9IFtyZXN1bHQgbGVuZ3RoXTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0yNjI1LDcgKzI2MjYsNyBAQCBOU0F0dHJp
YnV0ZWRTdHJpbmcgKkZyYW1lTWFjOjphdHRyaWJ1dGVkCiAgICAgLy8gQXBwbHkgcGFyYWdyYXBo
IHN0eWxlcyBmcm9tIG91dHNpZGUgaW4uICBUaGlzIGVuc3VyZXMgdGhhdCBuZXN0ZWQgbGlzdHMg
Y29ycmVjdGx5CiAgICAgLy8gb3ZlcnJpZGUgdGhlaXIgcGFyZW50J3MgcGFyYWdyYXBoIHN0eWxl
LgogICAgIHsKLSAgICAgICAgdW5zaWduZWQgaSwgY291bnQgPSBsaXN0SXRlbXMuY291bnQoKTsK
KyAgICAgICAgdW5zaWduZWQgaSwgY291bnQgPSBsaXN0SXRlbXMuc2l6ZSgpOwogICAgICAgICBF
bGVtZW50ICplOwogCiAjaWZkZWYgUE9TSVRJT05fTElTVApAQCAtMjY0Niw3ICsyNjQ3LDcgQEAg
TlNBdHRyaWJ1dGVkU3RyaW5nICpGcmFtZU1hYzo6YXR0cmlidXRlZAogI2VuZGlmCiAgICAgICAg
IAogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKyl7Ci0gICAgICAgICAgICBlID0g
bGlzdEl0ZW1zLmF0KGkpOworICAgICAgICAgICAgZSA9IGxpc3RJdGVtc1tpXTsKICAgICAgICAg
ICAgIGluZm8gPSBsaXN0SXRlbUxvY2F0aW9uc1tpXTsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgaWYgKGluZm8uZW5kIDwgaW5mby5zdGFydCkKQEAgLTI2NTYsNyArMjY1Nyw3IEBAIE5TQXR0
cmlidXRlZFN0cmluZyAqRnJhbWVNYWM6OmF0dHJpYnV0ZWQKICAgICAgICAgICAgIFJlbmRlclN0
eWxlICpzdHlsZSA9IHItPnN0eWxlKCk7CiAKICAgICAgICAgICAgIGludCByeDsKLSAgICAgICAg
ICAgIE5TRm9udCAqZm9udCA9IHN0eWxlLT5mb250KCkuZ2V0TlNGb250KCk7CisgICAgICAgICAg
ICBOU0ZvbnQgKmZvbnQgPSBzdHlsZS0+Zm9udCgpLnByaW1hcnlGb250KCktPmdldE5TRm9udCgp
OwogICAgICAgICAgICAgZmxvYXQgcG9pbnRTaXplID0gW2ZvbnQgcG9pbnRTaXplXTsKIAogI2lm
ZGVmIFBPU0lUSU9OX0xJU1QKQEAgLTI3ODAsNyArMjc4MSw3IEBAIE5TRm9udCAqRnJhbWVNYWM6
OmZvbnRGb3JTZWxlY3Rpb24oYm9vbCAKIAogICAgICAgICBOU0ZvbnQgKnJlc3VsdCA9IDA7CiAg
ICAgICAgIGlmIChzdHlsZSkKLSAgICAgICAgICAgIHJlc3VsdCA9IHN0eWxlLT5mb250KCkuZ2V0
TlNGb250KCk7CisgICAgICAgICAgICByZXN1bHQgPSBzdHlsZS0+Zm9udCgpLnByaW1hcnlGb250
KCktPmdldE5TRm9udCgpOwogICAgICAgICAKICAgICAgICAgaWYgKG5vZGVUb1JlbW92ZSkgewog
ICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsKQEAgLTI4MDQsNyArMjgwNSw3IEBAIE5TRm9u
dCAqRnJhbWVNYWM6OmZvbnRGb3JTZWxlY3Rpb24oYm9vbCAKICAgICAgICAgICAgIGlmICghcmVu
ZGVyZXIpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAvLyBGSVhNRTog
QXJlIHRoZXJlIGFueSBub2RlIHR5cGVzIHRoYXQgaGF2ZSByZW5kZXJlcnMsIGJ1dCB0aGF0IHdl
IHNob3VsZCBiZSBza2lwcGluZz8KLSAgICAgICAgICAgIE5TRm9udCAqZiA9IHJlbmRlcmVyLT5z
dHlsZSgpLT5mb250KCkuZ2V0TlNGb250KCk7CisgICAgICAgICAgICBOU0ZvbnQgKmYgPSByZW5k
ZXJlci0+c3R5bGUoKS0+Zm9udCgpLnByaW1hcnlGb250KCktPmdldE5TRm9udCgpOwogICAgICAg
ICAgICAgaWYgKCFmb250KSB7CiAgICAgICAgICAgICAgICAgZm9udCA9IGY7CiAgICAgICAgICAg
ICAgICAgaWYgKCFoYXNNdWx0aXBsZUZvbnRzKQpAQCAtMjgzMSw4ICsyODMyLDggQEAgTlNEaWN0
aW9uYXJ5ICpGcmFtZU1hYzo6Zm9udEF0dHJpYnV0ZXNGbwogICAgIGlmIChzdHlsZS0+YmFja2dy
b3VuZENvbG9yKCkuaXNWYWxpZCgpICYmIHN0eWxlLT5iYWNrZ3JvdW5kQ29sb3IoKS5hbHBoYSgp
ICE9IDApCiAgICAgICAgIFtyZXN1bHQgc2V0T2JqZWN0Om5zQ29sb3Ioc3R5bGUtPmJhY2tncm91
bmRDb2xvcigpKSBmb3JLZXk6TlNCYWNrZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXTsKIAotICAg
IGlmIChzdHlsZS0+Zm9udCgpLmdldE5TRm9udCgpKQotICAgICAgICBbcmVzdWx0IHNldE9iamVj
dDpzdHlsZS0+Zm9udCgpLmdldE5TRm9udCgpIGZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsK
KyAgICBpZiAoc3R5bGUtPmZvbnQoKS5wcmltYXJ5Rm9udCgpLT5nZXROU0ZvbnQoKSkKKyAgICAg
ICAgW3Jlc3VsdCBzZXRPYmplY3Q6c3R5bGUtPmZvbnQoKS5wcmltYXJ5Rm9udCgpLT5nZXROU0Zv
bnQoKSBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CiAKICAgICBpZiAoc3R5bGUtPmNvbG9y
KCkuaXNWYWxpZCgpICYmIHN0eWxlLT5jb2xvcigpICE9IENvbG9yOjpibGFjaykKICAgICAgICAg
W3Jlc3VsdCBzZXRPYmplY3Q6bnNDb2xvcihzdHlsZS0+Y29sb3IoKSkgZm9yS2V5Ok5TRm9yZWdy
b3VuZENvbG9yQXR0cmlidXRlTmFtZV07CkBAIC0zMzU2LDEwICszMzU3LDggQEAgYm9vbCBGcmFt
ZU1hYzo6c2VjdXJlS2V5Ym9hcmRFbnRyeSgpCiAgICAgcmV0dXJuIElzU2VjdXJlRXZlbnRJbnB1
dEVuYWJsZWQoKTsKIH0KIAotc3RhdGljIERlcHJlY2F0ZWRWYWx1ZUxpc3Q8TWFya2VkVGV4dFVu
ZGVybGluZT4gY29udmVydEF0dHJpYnV0ZXNUb1VuZGVybGluZXMoY29uc3QgUmFuZ2UgKm1hcmtl
ZFRleHRSYW5nZSwgTlNBcnJheSAqYXR0cmlidXRlcywgTlNBcnJheSAqcmFuZ2VzKQorc3RhdGlj
IHZvaWQgY29udmVydEF0dHJpYnV0ZXNUb1VuZGVybGluZXMoVmVjdG9yPE1hcmtlZFRleHRVbmRl
cmxpbmU+JiByZXN1bHQsIGNvbnN0IFJhbmdlICptYXJrZWRUZXh0UmFuZ2UsIE5TQXJyYXkgKmF0
dHJpYnV0ZXMsIE5TQXJyYXkgKnJhbmdlcykKIHsKLSAgICBEZXByZWNhdGVkVmFsdWVMaXN0PE1h
cmtlZFRleHRVbmRlcmxpbmU+IHJlc3VsdDsKLQogICAgIGludCBleGNlcHRpb24gPSAwOwogICAg
IGludCBiYXNlT2Zmc2V0ID0gbWFya2VkVGV4dFJhbmdlLT5zdGFydE9mZnNldChleGNlcHRpb24p
OwogCkBAIC0zMzg2LDggKzMzODUsNiBAQCBzdGF0aWMgRGVwcmVjYXRlZFZhbHVlTGlzdDxNYXJr
ZWRUZXh0VW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxQ29s
b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUgaW50
VmFsdWVdID4gMSkpOwogICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHZvaWQgRnJh
bWVNYWM6OnNldE1hcmtlZFRleHRSYW5nZShjb25zdCBSYW5nZSAqcmFuZ2UsIE5TQXJyYXkgKmF0
dHJpYnV0ZXMsIE5TQXJyYXkgKnJhbmdlcykKQEAgLTMzOTcsMTIgKzMzOTQsMTIgQEAgdm9pZCBG
cmFtZU1hYzo6c2V0TWFya2VkVGV4dFJhbmdlKGNvbnN0IAogICAgIEFTU0VSVCghcmFuZ2UgfHwg
cmFuZ2UtPnN0YXJ0Q29udGFpbmVyKGV4Y2VwdGlvbikgPT0gcmFuZ2UtPmVuZENvbnRhaW5lcihl
eGNlcHRpb24pKTsKICAgICBBU1NFUlQoIXJhbmdlIHx8IHJhbmdlLT5jb2xsYXBzZWQoZXhjZXB0
aW9uKSB8fCByYW5nZS0+c3RhcnRDb250YWluZXIoZXhjZXB0aW9uKS0+aXNUZXh0Tm9kZSgpKTsK
IAotICAgIGlmIChhdHRyaWJ1dGVzID09IG5pbCkgeworICAgIGQtPm1fbWFya2VkVGV4dFVuZGVy
bGluZXMuY2xlYXIoKTsKKyAgICBpZiAoYXR0cmlidXRlcyA9PSBuaWwpCiAgICAgICAgIGQtPm1f
bWFya2VkVGV4dFVzZXNVbmRlcmxpbmVzID0gZmFsc2U7Ci0gICAgICAgIGQtPm1fbWFya2VkVGV4
dFVuZGVybGluZXMuY2xlYXIoKTsKLSAgICB9IGVsc2UgeworICAgIGVsc2UgewogICAgICAgICBk
LT5tX21hcmtlZFRleHRVc2VzVW5kZXJsaW5lcyA9IHRydWU7Ci0gICAgICAgIGQtPm1fbWFya2Vk
VGV4dFVuZGVybGluZXMgPSBjb252ZXJ0QXR0cmlidXRlc1RvVW5kZXJsaW5lcyhyYW5nZSwgYXR0
cmlidXRlcywgcmFuZ2VzKTsKKyAgICAgICAgY29udmVydEF0dHJpYnV0ZXNUb1VuZGVybGluZXMo
ZC0+bV9tYXJrZWRUZXh0VW5kZXJsaW5lcywgcmFuZ2UsIGF0dHJpYnV0ZXMsIHJhbmdlcyk7CiAg
ICAgfQogCiAgICAgaWYgKG1fbWFya2VkVGV4dFJhbmdlLmdldCgpICYmIGRvY3VtZW50KCkgJiYg
bV9tYXJrZWRUZXh0UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKGV4Y2VwdGlvbiktPnJlbmRlcmVyKCkp
CkBAIC0zNDMzLDEzICszNDMwLDEzIEBAIE5TTXV0YWJsZURpY3Rpb25hcnkgKkZyYW1lTWFjOjpk
YXNoYm9hcmQKICAgICBpZiAoIWRvYykKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIGNvbnN0
IERlcHJlY2F0ZWRWYWx1ZUxpc3Q8RGFzaGJvYXJkUmVnaW9uVmFsdWU+IHJlZ2lvbnMgPSBkb2Mt
PmRhc2hib2FyZFJlZ2lvbnMoKTsKLSAgICB1bnNpZ25lZCBpLCBjb3VudCA9IHJlZ2lvbnMuY291
bnQoKTsKKyAgICBjb25zdCBWZWN0b3I8RGFzaGJvYXJkUmVnaW9uVmFsdWU+JiByZWdpb25zID0g
ZG9jLT5kYXNoYm9hcmRSZWdpb25zKCk7CisgICAgc2l6ZV90IG4gPSByZWdpb25zLnNpemUoKTsK
IAogICAgIC8vIENvbnZlcnQgdGhlIERlcHJlY2F0ZWRWYWx1ZUxpc3Q8RGFzaGJvYXJkUmVnaW9u
VmFsdWU+IGludG8gYSBOU0RpY3Rpb25hcnkgb2YgV2ViRGFzaGJvYXJkUmVnaW9ucwotICAgIE5T
TXV0YWJsZURpY3Rpb25hcnkgKndlYlJlZ2lvbnMgPSBbW1tOU011dGFibGVEaWN0aW9uYXJ5IGFs
bG9jXSBpbml0V2l0aENhcGFjaXR5OmNvdW50XSBhdXRvcmVsZWFzZV07Ci0gICAgZm9yIChpID0g
MDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgRGFzaGJvYXJkUmVnaW9uVmFsdWUgcmVnaW9u
ID0gcmVnaW9uc1tpXTsKKyAgICBOU011dGFibGVEaWN0aW9uYXJ5ICp3ZWJSZWdpb25zID0gW05T
TXV0YWJsZURpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhDYXBhY2l0eTpuXTsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG47IGkrKykgeworICAgICAgICBjb25zdCBEYXNoYm9hcmRSZWdpb25W
YWx1ZSYgcmVnaW9uID0gcmVnaW9uc1tpXTsKIAogICAgICAgICBpZiAocmVnaW9uLnR5cGUgPT0g
U3R5bGVEYXNoYm9hcmRSZWdpb246Ok5vbmUpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTM0
NTIsMTIgKzM0NDksMTQgQEAgTlNNdXRhYmxlRGljdGlvbmFyeSAqRnJhbWVNYWM6OmRhc2hib2Fy
ZAogICAgICAgICAgICAgdHlwZSA9IFdlYkRhc2hib2FyZFJlZ2lvblR5cGVSZWN0YW5nbGU7CiAg
ICAgICAgIE5TTXV0YWJsZUFycmF5ICpyZWdpb25WYWx1ZXMgPSBbd2ViUmVnaW9ucyBvYmplY3RG
b3JLZXk6bGFiZWxdOwogICAgICAgICBpZiAoIXJlZ2lvblZhbHVlcykgewotICAgICAgICAgICAg
cmVnaW9uVmFsdWVzID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsKKyAgICAgICAgICAgIHJlZ2lv
blZhbHVlcyA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6MV07CiAg
ICAgICAgICAgICBbd2ViUmVnaW9ucyBzZXRPYmplY3Q6cmVnaW9uVmFsdWVzIGZvcktleTpsYWJl
bF07CisgICAgICAgICAgICBbcmVnaW9uVmFsdWVzIHJlbGVhc2VdOwogICAgICAgICB9CiAgICAg
ICAgIAotICAgICAgICBXZWJEYXNoYm9hcmRSZWdpb24gKndlYlJlZ2lvbiA9IFtbW1dlYkRhc2hi
b2FyZFJlZ2lvbiBhbGxvY10gaW5pdFdpdGhSZWN0OnJlZ2lvbi5ib3VuZHMgY2xpcDpyZWdpb24u
Y2xpcCB0eXBlOnR5cGVdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgV2ViRGFzaGJvYXJkUmVnaW9u
ICp3ZWJSZWdpb24gPSBbW1dlYkRhc2hib2FyZFJlZ2lvbiBhbGxvY10gaW5pdFdpdGhSZWN0OnJl
Z2lvbi5ib3VuZHMgY2xpcDpyZWdpb24uY2xpcCB0eXBlOnR5cGVdOwogICAgICAgICBbcmVnaW9u
VmFsdWVzIGFkZE9iamVjdDp3ZWJSZWdpb25dOworICAgICAgICBbd2ViUmVnaW9uIHJlbGVhc2Vd
OwogICAgIH0KICAgICAKICAgICByZXR1cm4gd2ViUmVnaW9uczsKSW5kZXg6IGJyaWRnZS9tYWMv
RnJhbWVWaWV3TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJyaWRnZS9tYWMvRnJhbWVWaWV3TWFjLm1t
CShyZXZpc2lvbiAxNjE3MCkKKysrIGJyaWRnZS9tYWMvRnJhbWVWaWV3TWFjLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC00NSw4ICs0NSw4IEBAIHZvaWQgRnJhbWVWaWV3Ojp1cGRhdGVEYXNoYm9hcmRS
ZWdpb25zKCkKIHsKICAgICBEb2N1bWVudCogZG9jID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKICAg
ICBpZiAoZG9jLT5oYXNEYXNoYm9hcmRSZWdpb25zKCkpIHsKLSAgICAgICAgRGVwcmVjYXRlZFZh
bHVlTGlzdDxEYXNoYm9hcmRSZWdpb25WYWx1ZT4gbmV3UmVnaW9ucyA9IGRvYy0+cmVuZGVyZXIo
KS0+Y29tcHV0ZURhc2hib2FyZFJlZ2lvbnMoKTsKLSAgICAgICAgRGVwcmVjYXRlZFZhbHVlTGlz
dDxEYXNoYm9hcmRSZWdpb25WYWx1ZT4gY3VycmVudFJlZ2lvbnMgPSBkb2MtPmRhc2hib2FyZFJl
Z2lvbnMoKTsKKyAgICAgICAgVmVjdG9yPERhc2hib2FyZFJlZ2lvblZhbHVlPiBuZXdSZWdpb25z
OworICAgICAgICBkb2MtPnJlbmRlcmVyKCktPmNvbGxlY3REYXNoYm9hcmRSZWdpb25zKG5ld1Jl
Z2lvbnMpOwogICAgICAgICBkb2MtPnNldERhc2hib2FyZFJlZ2lvbnMobmV3UmVnaW9ucyk7CiAg
ICAgICAgIE1hYyhtX2ZyYW1lLmdldCgpKS0+ZGFzaGJvYXJkUmVnaW9uc0NoYW5nZWQoKTsKICAg
ICB9CkluZGV4OiBicmlkZ2UvbWFjL1dlYkNvcmVBWE9iamVjdC5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBi
cmlkZ2UvbWFjL1dlYkNvcmVBWE9iamVjdC5tbQkocmV2aXNpb24gMTYxNzApCisrKyBicmlkZ2Uv
bWFjL1dlYkNvcmVBWE9iamVjdC5tbQkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAog
I2ltcG9ydCAiRE9NSW50ZXJuYWwuaCIKICNpbXBvcnQgIkRvY3VtZW50LmgiCiAjaW1wb3J0ICJF
dmVudE5hbWVzLmgiCisjaW1wb3J0ICJGb250RGF0YS5oIgogI2ltcG9ydCAiRm91bmRhdGlvbkV4
dHJhcy5oIgogI2ltcG9ydCAiRnJhbWVNYWMuaCIKICNpbXBvcnQgIkhUTUxBcmVhRWxlbWVudC5o
IgpAQCAtNjQ2LDE5ICs2NDcsMTcgQEAgc3RhdGljIEludFJlY3QgYm91bmRpbmdCb3hSZWN0KFJl
bmRlck9iagogICAgIGlmIChvYmopIHsKICAgICAgICAgaWYgKG9iai0+aXNJbmxpbmVDb250aW51
YXRpb24oKSkKICAgICAgICAgICAgIG9iaiA9IG9iai0+ZWxlbWVudCgpLT5yZW5kZXJlcigpOwot
ICAgICAgICBEZXByZWNhdGVkVmFsdWVMaXN0PEludFJlY3Q+IHJlY3RzOwotICAgICAgICBpbnQg
eCA9IDAsIHkgPSAwOworICAgICAgICBWZWN0b3I8SW50UmVjdD4gcmVjdHM7CisgICAgICAgIGlu
dCB4LCB5OwogICAgICAgICBvYmotPmFic29sdXRlUG9zaXRpb24oeCwgeSk7CiAgICAgICAgIG9i
ai0+YWJzb2x1dGVSZWN0cyhyZWN0cywgeCwgeSk7Ci0gICAgICAgIGZvciAoRGVwcmVjYXRlZFZh
bHVlTGlzdDxJbnRSZWN0Pjo6Q29uc3RJdGVyYXRvciBpdCA9IHJlY3RzLmJlZ2luKCk7IGl0ICE9
IHJlY3RzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICBJbnRSZWN0IHIgPSAqaXQ7CisgICAg
ICAgIGNvbnN0IHNpemVfdCBuID0gcmVjdHMuc2l6ZSgpOworICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG47ICsraSkgeworICAgICAgICAgICAgSW50UmVjdCByID0gcmVjdHNbaV07CiAg
ICAgICAgICAgICBpZiAoIXIuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKG9iai0+
c3R5bGUoKS0+aGFzQXBwZWFyYW5jZSgpKQogICAgICAgICAgICAgICAgICAgICB0aGVtZSgpLT5h
ZGp1c3RSZXBhaW50UmVjdChvYmosIHIpOwotICAgICAgICAgICAgICAgIGlmIChyZWN0LmlzRW1w
dHkoKSkKLSAgICAgICAgICAgICAgICAgICAgcmVjdCA9IHI7Ci0gICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgICAgICByZWN0LnVuaXRlKHIpOworICAgICAgICAgICAgICAgIHJl
Y3QudW5pdGUocik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0xMzU0LDcg
KzEzNTMsNyBAQCBzdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZVN0cmluZ1NldFN0eWxlKE5TCiAgICAg
UmVuZGVyU3R5bGUqIHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7CiAKICAgICAvLyBzZXQgYmFz
aWMgZm9udCBpbmZvCi0gICAgQVhBdHRyaWJ1dGVTdHJpbmdTZXRGb250KGF0dHJTdHJpbmcsIE5T
QWNjZXNzaWJpbGl0eUZvbnRUZXh0QXR0cmlidXRlLCBzdHlsZS0+Zm9udCgpLmdldE5TRm9udCgp
LCByYW5nZSk7CisgICAgQVhBdHRyaWJ1dGVTdHJpbmdTZXRGb250KGF0dHJTdHJpbmcsIE5TQWNj
ZXNzaWJpbGl0eUZvbnRUZXh0QXR0cmlidXRlLCBzdHlsZS0+Zm9udCgpLnByaW1hcnlGb250KCkt
PmdldE5TRm9udCgpLCByYW5nZSk7CiAKICAgICAvLyBzZXQgYmFzaWMgY29sb3JzCiAgICAgQVhB
dHRyaWJ1dGVTdHJpbmdTZXRDb2xvcihhdHRyU3RyaW5nLCBOU0FjY2Vzc2liaWxpdHlGb3JlZ3Jv
dW5kQ29sb3JUZXh0QXR0cmlidXRlLCBuc0NvbG9yKHN0eWxlLT5jb2xvcigpKSwgcmFuZ2UpOwpJ
bmRleDogYnJpZGdlL21hYy9XZWJDb3JlU3RyaW5nVHJ1bmNhdG9yLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGJyaWRnZS9tYWMvV2ViQ29yZVN0cmluZ1RydW5jYXRvci5tbQkocmV2aXNpb24gMTYxNzApCisr
KyBicmlkZ2UvbWFjL1dlYkNvcmVTdHJpbmdUcnVuY2F0b3IubW0JKHdvcmtpbmcgY29weSkKQEAg
LTI5LDggKzI5LDEwIEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIldlYkNvcmVTdHJp
bmdUcnVuY2F0b3IuaCIKIAotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbXBvcnQgIkZv
bnQuaCIKKyNpbXBvcnQgIkZvbnRQbGF0Zm9ybURhdGEuaCIKKyNpbXBvcnQgIlRleHRTdHlsZS5o
IgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KIAogI2RlZmluZSBTVFJJTkdfQlVGRkVSX1NJ
WkUgMjA0OAogI2RlZmluZSBFTExJUFNJU19DSEFSQUNURVIgMHgyMDI2CkluZGV4OiBjc3MvQ1NT
Q29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjc3MvQ1NTQ29tcHV0
ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAkocmV2aXNpb24gMTYxNzApCisrKyBjc3MvQ1NTQ29tcHV0
ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMxOCw4ICsxMzE4LDgg
QEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTQ29tcHV0ZWRTdHlsZURlYwogICAgICAgICBicmVh
azsKICNpZiBfX0FQUExFX18KICAgICAgICAgY2FzZSBDU1NfUFJPUF9fV0VCS0lUX0RBU0hCT0FS
RF9SRUdJT046IHsKLSAgICAgICAgICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3Q8U3R5bGVEYXNoYm9h
cmRSZWdpb24+IHJlZ2lvbnMgPSBzdHlsZS0+ZGFzaGJvYXJkUmVnaW9ucygpOwotICAgICAgICAg
ICAgdW5zaWduZWQgY291bnQgPSByZWdpb25zLmNvdW50KCk7CisgICAgICAgICAgICBjb25zdCBW
ZWN0b3I8U3R5bGVEYXNoYm9hcmRSZWdpb24+JiByZWdpb25zID0gc3R5bGUtPmRhc2hib2FyZFJl
Z2lvbnMoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNvdW50ID0gcmVnaW9ucy5zaXplKCk7CiAg
ICAgICAgICAgICBpZiAoY291bnQgPT0gMSAmJiByZWdpb25zWzBdLnR5cGUgPT0gU3R5bGVEYXNo
Ym9hcmRSZWdpb246Ok5vbmUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDU1NQcmltaXRp
dmVWYWx1ZShDU1NfVkFMX05PTkUpOwogICAgICAgICAgICAgCkluZGV4OiBkb20vRG9jdW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIGRvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDE2MTcwKQorKysg
ZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAyNSwxNSArMjAyNSwxNSBAQCB2
b2lkIERvY3VtZW50OjpkaWRFbmRFZGl0aW5nKCkKIH0KIAogI2lmIF9fQVBQTEVfXwotY29uc3Qg
RGVwcmVjYXRlZFZhbHVlTGlzdDxEYXNoYm9hcmRSZWdpb25WYWx1ZT4gJiBEb2N1bWVudDo6ZGFz
aGJvYXJkUmVnaW9ucygpIGNvbnN0Citjb25zdCBWZWN0b3I8RGFzaGJvYXJkUmVnaW9uVmFsdWU+
JiBEb2N1bWVudDo6ZGFzaGJvYXJkUmVnaW9ucygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fZGFz
aGJvYXJkUmVnaW9uczsKIH0KIAotdm9pZCBEb2N1bWVudDo6c2V0RGFzaGJvYXJkUmVnaW9ucyAo
Y29uc3QgRGVwcmVjYXRlZFZhbHVlTGlzdDxEYXNoYm9hcmRSZWdpb25WYWx1ZT4mIHJlZ2lvbnMp
Cit2b2lkIERvY3VtZW50OjpzZXREYXNoYm9hcmRSZWdpb25zKGNvbnN0IFZlY3RvcjxEYXNoYm9h
cmRSZWdpb25WYWx1ZT4mIHJlZ2lvbnMpCiB7CiAgICAgbV9kYXNoYm9hcmRSZWdpb25zID0gcmVn
aW9uczsKLSAgICBzZXREYXNoYm9hcmRSZWdpb25zRGlydHkgKGZhbHNlKTsKKyAgICBzZXREYXNo
Ym9hcmRSZWdpb25zRGlydHkoZmFsc2UpOwogfQogI2VuZGlmCiAKSW5kZXg6IGRvbS9Eb2N1bWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIGRvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiAxNjE3MCkKKysrIGRv
bS9Eb2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC03NDEsOCArNzQxLDggQEAgcHVibGljOgog
ICAgIGJvb2wgZGFzaGJvYXJkUmVnaW9uc0RpcnR5KCkgY29uc3QgeyByZXR1cm4gbV9kYXNoYm9h
cmRSZWdpb25zRGlydHk7IH0KICAgICBib29sIGhhc0Rhc2hib2FyZFJlZ2lvbnMgKCkgY29uc3Qg
eyByZXR1cm4gbV9oYXNEYXNoYm9hcmRSZWdpb25zOyB9CiAgICAgdm9pZCBzZXRIYXNEYXNoYm9h
cmRSZWdpb25zIChib29sIGYpIHsgbV9oYXNEYXNoYm9hcmRSZWdpb25zID0gZjsgfQotICAgIGNv
bnN0IERlcHJlY2F0ZWRWYWx1ZUxpc3Q8RGFzaGJvYXJkUmVnaW9uVmFsdWU+ICYgZGFzaGJvYXJk
UmVnaW9ucygpIGNvbnN0OwotICAgIHZvaWQgc2V0RGFzaGJvYXJkUmVnaW9ucyAoY29uc3QgRGVw
cmVjYXRlZFZhbHVlTGlzdDxEYXNoYm9hcmRSZWdpb25WYWx1ZT4mIHJlZ2lvbnMpOworICAgIGNv
bnN0IFZlY3RvcjxEYXNoYm9hcmRSZWdpb25WYWx1ZT4mIGRhc2hib2FyZFJlZ2lvbnMoKSBjb25z
dDsKKyAgICB2b2lkIHNldERhc2hib2FyZFJlZ2lvbnMoY29uc3QgVmVjdG9yPERhc2hib2FyZFJl
Z2lvblZhbHVlPiYpOwogI2VuZGlmCiAKICAgICB2b2lkIHJlbW92ZUFsbEV2ZW50TGlzdGVuZXJz
RnJvbUFsbE5vZGVzKCk7CkBAIC04MDMsNyArODAzLDcgQEAgcHJpdmF0ZToKICNlbmRpZgogICAg
IAogI2lmIF9fQVBQTEVfXwotICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3Q8RGFzaGJvYXJkUmVnaW9u
VmFsdWU+IG1fZGFzaGJvYXJkUmVnaW9uczsKKyAgICBWZWN0b3I8RGFzaGJvYXJkUmVnaW9uVmFs
dWU+IG1fZGFzaGJvYXJkUmVnaW9uczsKICAgICBib29sIG1faGFzRGFzaGJvYXJkUmVnaW9uczsK
ICAgICBib29sIG1fZGFzaGJvYXJkUmVnaW9uc0RpcnR5OwogI2VuZGlmCkluZGV4OiBlZGl0aW5n
L0JyZWFrQmxvY2txdW90ZUNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGVkaXRpbmcvQnJlYWtC
bG9ja3F1b3RlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDE2MTcwKQorKysgZWRpdGluZy9CcmVha0Js
b2NrcXVvdGVDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsOCArNDQsNiBAQCBCcmVh
a0Jsb2NrcXVvdGVDb21tYW5kOjpCcmVha0Jsb2NrcXVvdGVDCiAKIHZvaWQgQnJlYWtCbG9ja3F1
b3RlQ29tbWFuZDo6ZG9BcHBseSgpCiB7Ci0gICAgRGVwcmVjYXRlZFB0ckxpc3Q8Tm9kZT4gYW5j
ZXN0b3JzOwotICAgIAogICAgIFNlbGVjdGlvbiBzZWxlY3Rpb24gPSBlbmRpbmdTZWxlY3Rpb24o
KTsKICAgICBpZiAoc2VsZWN0aW9uLmlzTm9uZSgpKQogICAgICAgICByZXR1cm47CkBAIC0xMDQs
OCArMTAyLDkgQEAgdm9pZCBCcmVha0Jsb2NrcXVvdGVDb21tYW5kOjpkb0FwcGx5KCkKICAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgLy8gQnVpbGQgdXAgbGlzdCBvZiBhbmNlc3RvcnMgaW4g
YmV0d2VlbiB0aGUgc3RhcnQgbm9kZSBhbmQgdGhlIHRvcCBibG9ja3F1b3RlLgotICAgICAgICBm
b3IgKE5vZGUgKm5vZGUgPSBzdGFydE5vZGUtPnBhcmVudE5vZGUoKTsgbm9kZSAhPSB0b3BCbG9j
a3F1b3RlOyBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpKQotICAgICAgICAgICAgYW5jZXN0b3Jz
LnByZXBlbmQobm9kZSk7CisgICAgICAgIFZlY3RvcjxOb2RlKj4gYW5jZXN0b3JzOyAgICAKKyAg
ICAgICAgZm9yIChOb2RlKiBub2RlID0gc3RhcnROb2RlLT5wYXJlbnROb2RlKCk7IG5vZGUgIT0g
dG9wQmxvY2txdW90ZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkKKyAgICAgICAgICAgIGFu
Y2VzdG9ycy5hcHBlbmQobm9kZSk7CiAgICAgICAgIAogICAgICAgICAvLyBJbnNlcnQgYSBjbG9u
ZSBvZiB0aGUgdG9wIGJsb2NrcXVvdGUgYWZ0ZXIgdGhlIGJyZWFrLgogICAgICAgICBSZWZQdHI8
Tm9kZT4gY2xvbmVkQmxvY2txdW90ZSA9IHRvcEJsb2NrcXVvdGUtPmNsb25lTm9kZShmYWxzZSk7
CkBAIC0xMTYsOCArMTE1LDggQEAgdm9pZCBCcmVha0Jsb2NrcXVvdGVDb21tYW5kOjpkb0FwcGx5
KCkKICAgICAgICAgLy8gdGhhdCB3YXMgY2xvbmVkIChpLmUuIHRoZSBjbG9uZSBvZiBlaXRoZXIg
YW5jZXN0b3JzLmxhc3QoKQogICAgICAgICAvLyBvciBjbG9uZWRCbG9ja3F1b3RlIGlmIGFuY2Vz
dG9ycyBpcyBlbXB0eSkuCiAgICAgICAgIFJlZlB0cjxOb2RlPiBjbG9uZWRBbmNlc3RvciA9IGNs
b25lZEJsb2NrcXVvdGU7Ci0gICAgICAgIGZvciAoRGVwcmVjYXRlZFB0ckxpc3RJdGVyYXRvcjxO
b2RlPiBpdChhbmNlc3RvcnMpOyBpdC5jdXJyZW50KCk7ICsraXQpIHsKLSAgICAgICAgICAgIFJl
ZlB0cjxOb2RlPiBjbG9uZWRDaGlsZCA9IGl0LmN1cnJlbnQoKS0+Y2xvbmVOb2RlKGZhbHNlKTsg
Ly8gc2hhbGxvdyBjbG9uZQorICAgICAgICBmb3IgKHNpemVfdCBpID0gYW5jZXN0b3JzLnNpemUo
KTsgaSAhPSAwOyAtLWkpIHsKKyAgICAgICAgICAgIFJlZlB0cjxOb2RlPiBjbG9uZWRDaGlsZCA9
IGFuY2VzdG9yc1tpIC0gMV0tPmNsb25lTm9kZShmYWxzZSk7IC8vIHNoYWxsb3cgY2xvbmUKICAg
ICAgICAgICAgIGFwcGVuZE5vZGUoY2xvbmVkQ2hpbGQuZ2V0KCksIGNsb25lZEFuY2VzdG9yLmdl
dCgpKTsKICAgICAgICAgICAgIGNsb25lZEFuY2VzdG9yID0gY2xvbmVkQ2hpbGQ7CiAgICAgICAg
IH0KQEAgLTEzMiwxNCArMTMxLDE1IEBAIHZvaWQgQnJlYWtCbG9ja3F1b3RlQ29tbWFuZDo6ZG9B
cHBseSgpCiAgICAgICAgIH0KIAogICAgICAgICAvLyBIb2xkIG9wZW4gc3RhcnROb2RlJ3Mgb3Jp
Z2luYWwgcGFyZW50IGlmIHdlIGVtcHRpZWQgaXQKLSAgICAgICAgYWRkQmxvY2tQbGFjZWhvbGRl
cklmTmVlZGVkKGFuY2VzdG9ycy5sYXN0KCkpOworICAgICAgICBhZGRCbG9ja1BsYWNlaG9sZGVy
SWZOZWVkZWQoYW5jZXN0b3JzWzBdKTsKIAogICAgICAgICAvLyBTcGxpdCB0aGUgdHJlZSB1cCB0
aGUgYW5jZXN0b3IgY2hhaW4gdW50aWwgdGhlIHRvcEJsb2NrcXVvdGUKICAgICAgICAgLy8gVGhy
b3VnaG91dCB0aGlzIGxvb3AsIGNsb25lZFBhcmVudCBpcyB0aGUgY2xvbmUgb2YgYW5jZXN0b3In
cyBwYXJlbnQuCiAgICAgICAgIC8vIFRoaXMgaXMgc28gd2UgY2FuIGNsb25lIGFuY2VzdG9yJ3Mg
c2libGluZ3MgYW5kIHBsYWNlIHRoZSBjbG9uZXMKICAgICAgICAgLy8gaW50byB0aGUgY2xvbmUg
Y29ycmVzcG9uZGluZyB0byB0aGUgYW5jZXN0b3IncyBwYXJlbnQuCi0gICAgICAgIE5vZGUgKmFu
Y2VzdG9yLCAqY2xvbmVkUGFyZW50OwotICAgICAgICBmb3IgKGFuY2VzdG9yID0gYW5jZXN0b3Jz
Lmxhc3QoKSwgY2xvbmVkUGFyZW50ID0gY2xvbmVkQW5jZXN0b3ItPnBhcmVudE5vZGUoKTsKKyAg
ICAgICAgTm9kZSogYW5jZXN0b3I7CisgICAgICAgIE5vZGUqIGNsb25lZFBhcmVudDsKKyAgICAg
ICAgZm9yIChhbmNlc3RvciA9IGFuY2VzdG9yc1swXSwgY2xvbmVkUGFyZW50ID0gY2xvbmVkQW5j
ZXN0b3ItPnBhcmVudE5vZGUoKTsKICAgICAgICAgICAgICBhbmNlc3RvciAmJiBhbmNlc3RvciAh
PSB0b3BCbG9ja3F1b3RlOwogICAgICAgICAgICAgIGFuY2VzdG9yID0gYW5jZXN0b3ItPnBhcmVu
dE5vZGUoKSwgY2xvbmVkUGFyZW50ID0gY2xvbmVkUGFyZW50LT5wYXJlbnROb2RlKCkpIHsKICAg
ICAgICAgICAgIG1vdmVOb2RlID0gYW5jZXN0b3ItPm5leHRTaWJsaW5nKCk7CkluZGV4OiBlZGl0
aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGVk
aXRpbmcvSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAJKHJldmlzaW9uIDE2MTcw
KQorKysgZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTk4LDEwICsxOTgsMTAgQEAgdm9pZCBJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0
b3JDb21tYW5kOjpkbwogICAgIHN0YXJ0Tm9kZSA9IHBvcy5ub2RlKCk7CiAKICAgICAvLyBCdWls
ZCB1cCBsaXN0IG9mIGFuY2VzdG9ycyBpbiBiZXR3ZWVuIHRoZSBzdGFydCBub2RlIGFuZCB0aGUg
c3RhcnQgYmxvY2suCi0gICAgRGVwcmVjYXRlZFB0ckxpc3Q8Tm9kZT4gYW5jZXN0b3JzOworICAg
IFZlY3RvcjxOb2RlKj4gYW5jZXN0b3JzOwogICAgIGlmIChzdGFydE5vZGUgIT0gc3RhcnRCbG9j
aykgewotICAgICAgICBmb3IgKE5vZGUgKm4gPSBzdGFydE5vZGUtPnBhcmVudE5vZGUoKTsgbiAm
JiBuICE9IHN0YXJ0QmxvY2s7IG4gPSBuLT5wYXJlbnROb2RlKCkpCi0gICAgICAgICAgICBhbmNl
c3RvcnMucHJlcGVuZChuKTsKKyAgICAgICAgZm9yIChOb2RlKiBuID0gc3RhcnROb2RlLT5wYXJl
bnROb2RlKCk7IG4gJiYgbiAhPSBzdGFydEJsb2NrOyBuID0gbi0+cGFyZW50Tm9kZSgpKQorICAg
ICAgICAgICAgYW5jZXN0b3JzLmFwcGVuZChuKTsKICAgICB9CiAKICAgICAvLyBNYWtlIHN1cmUg
d2UgZG8gbm90IGNhdXNlIGEgcmVuZGVyZWQgc3BhY2UgdG8gYmVjb21lIHVucmVuZGVyZWQuCkBA
IC0yMzUsOCArMjM1LDggQEAgdm9pZCBJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjpk
bwogCiAgICAgLy8gTWFrZSBjbG9uZXMgb2YgYW5jZXN0b3JzIGluIGJldHdlZW4gdGhlIHN0YXJ0
IG5vZGUgYW5kIHRoZSBzdGFydCBibG9jay4KICAgICBSZWZQdHI8Tm9kZT4gcGFyZW50ID0gYmxv
Y2tUb0luc2VydDsKLSAgICBmb3IgKERlcHJlY2F0ZWRQdHJMaXN0SXRlcmF0b3I8Tm9kZT4gaXQo
YW5jZXN0b3JzKTsgaXQuY3VycmVudCgpOyArK2l0KSB7Ci0gICAgICAgIFJlZlB0cjxOb2RlPiBj
aGlsZCA9IGl0LmN1cnJlbnQoKS0+Y2xvbmVOb2RlKGZhbHNlKTsgLy8gc2hhbGxvdyBjbG9uZQor
ICAgIGZvciAoc2l6ZV90IGkgPSBhbmNlc3RvcnMuc2l6ZSgpOyBpICE9IDA7IC0taSkgeworICAg
ICAgICBSZWZQdHI8Tm9kZT4gY2hpbGQgPSBhbmNlc3RvcnNbaSAtIDFdLT5jbG9uZU5vZGUoZmFs
c2UpOyAvLyBzaGFsbG93IGNsb25lCiAgICAgICAgIGFwcGVuZE5vZGUoY2hpbGQuZ2V0KCksIHBh
cmVudC5nZXQoKSk7CiAgICAgICAgIHBhcmVudCA9IGNoaWxkLnJlbGVhc2UoKTsKICAgICB9CkBA
IC0yNjMsNyArMjYzLDcgQEAgdm9pZCBJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjpk
bwogICAgIH0gICAgICAgICAgICAKIAogICAgIC8vIE1vdmUgZXZlcnl0aGluZyBhZnRlciB0aGUg
c3RhcnQgbm9kZS4KLSAgICBOb2RlICpsZWZ0UGFyZW50ID0gYW5jZXN0b3JzLmxhc3QoKTsKKyAg
ICBOb2RlKiBsZWZ0UGFyZW50ID0gYW5jZXN0b3JzWzBdOwogICAgIHdoaWxlIChsZWZ0UGFyZW50
ICYmIGxlZnRQYXJlbnQgIT0gc3RhcnRCbG9jaykgewogICAgICAgICBwYXJlbnQgPSBwYXJlbnQt
PnBhcmVudE5vZGUoKTsKICAgICAgICAgTm9kZSAqbiA9IGxlZnRQYXJlbnQtPm5leHRTaWJsaW5n
KCk7CkluZGV4OiBlZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBlZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAkocmV2aXNpb24gMTYxNzAp
CisrKyBlZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjQyLDE3ICsyNDIsMTcgQEAgdm9pZCBSZXBsYWNlbWVudEZyYWdtZW50OjpyZXN0b3JlVGVz
dFJlbgogICAgIH0KIH0KIAotdm9pZCBSZXBsYWNlbWVudEZyYWdtZW50OjpyZW1vdmVVbnJlbmRl
cmVkTm9kZXMoTm9kZSAqaG9sZGVyKQordm9pZCBSZXBsYWNlbWVudEZyYWdtZW50OjpyZW1vdmVV
bnJlbmRlcmVkTm9kZXMoTm9kZSogaG9sZGVyKQogewotICAgIERlcHJlY2F0ZWRQdHJMaXN0PE5v
ZGU+IHVucmVuZGVyZWQ7CisgICAgVmVjdG9yPE5vZGUqPiB1bnJlbmRlcmVkOwogCi0gICAgZm9y
IChOb2RlICpub2RlID0gaG9sZGVyLT5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBub2RlLT50
cmF2ZXJzZU5leHROb2RlKGhvbGRlcikpIHsKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSBob2xkZXIt
PmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoaG9sZGVy
KSkKICAgICAgICAgaWYgKCFpc05vZGVSZW5kZXJlZChub2RlKSAmJiAhaXNUYWJsZVN0cnVjdHVy
ZU5vZGUobm9kZSkpCiAgICAgICAgICAgICB1bnJlbmRlcmVkLmFwcGVuZChub2RlKTsKLSAgICB9
CiAKLSAgICBmb3IgKERlcHJlY2F0ZWRQdHJMaXN0SXRlcmF0b3I8Tm9kZT4gaXQodW5yZW5kZXJl
ZCk7IGl0LmN1cnJlbnQoKTsgKytpdCkKLSAgICAgICAgcmVtb3ZlTm9kZShpdC5jdXJyZW50KCkp
OworICAgIHNpemVfdCBuID0gdW5yZW5kZXJlZC5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBuOyArK2kpCisgICAgICAgIHJlbW92ZU5vZGUodW5yZW5kZXJlZFtpXSk7CiB9CiAK
IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZChEb2N1bWVu
dCogZG9jdW1lbnQsIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQsCkluZGV4
OiBodG1sL0Zvcm1EYXRhTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGh0bWwvRm9ybURhdGFMaXN0LmgJ
KHJldmlzaW9uIDE2MTcwKQorKysgaHRtbC9Gb3JtRGF0YUxpc3QuaAkod29ya2luZyBjb3B5KQpA
QCAtMjcsMTMgKzI3LDE0IEBACiAjaWZuZGVmIEhUTUxfRm9ybURhdGFMaXN0X2gKICNkZWZpbmUg
SFRNTF9Gb3JtRGF0YUxpc3RfaAogCi0jaW5jbHVkZSAiRGVwcmVjYXRlZFZhbHVlTGlzdC5oIgog
I2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0cnVjdCBG
b3JtRGF0YUxpc3RJdGVtIHsKKyAgICBGb3JtRGF0YUxpc3RJdGVtKCkgeyB9CiAgICAgRm9ybURh
dGFMaXN0SXRlbShjb25zdCBEZXByZWNhdGVkQ1N0cmluZyYgZGF0YSkgOiBtX2RhdGEoZGF0YSkg
eyB9CiAgICAgRm9ybURhdGFMaXN0SXRlbShjb25zdCBEZXByZWNhdGVkU3RyaW5nJiBwYXRoKSA6
IG1fcGF0aChwYXRoKSB7IH0KIApAQCAtNTUsMTcgKzU2LDE0IEBAIHB1YmxpYzoKICAgICAgICAg
eyBhcHBlbmRTdHJpbmcoa2V5LmRlcHJlY2F0ZWRTdHJpbmcoKSk7IGFwcGVuZFN0cmluZyhEZXBy
ZWNhdGVkU3RyaW5nOjpudW1iZXIodmFsdWUpKTsgfQogICAgIHZvaWQgYXBwZW5kRmlsZShjb25z
dCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSk7CiAKLSAgICBEZXByZWNhdGVk
VmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxGb3JtRGF0YUxpc3RJdGVtPiBiZWdpbigpIGNvbnN0Ci0g
ICAgICAgIHsgcmV0dXJuIG1fbGlzdC5iZWdpbigpOyB9Ci0gICAgRGVwcmVjYXRlZFZhbHVlTGlz
dENvbnN0SXRlcmF0b3I8Rm9ybURhdGFMaXN0SXRlbT4gZW5kKCkgY29uc3QKLSAgICAgICAgeyBy
ZXR1cm4gbV9saXN0LmVuZCgpOyB9CisgICAgY29uc3QgVmVjdG9yPEZvcm1EYXRhTGlzdEl0ZW0+
JiBsaXN0KCkgY29uc3QgeyByZXR1cm4gbV9saXN0OyB9CiAKIHByaXZhdGU6CiAgICAgdm9pZCBh
cHBlbmRTdHJpbmcoY29uc3QgRGVwcmVjYXRlZENTdHJpbmcmKTsKICAgICB2b2lkIGFwcGVuZFN0
cmluZyhjb25zdCBEZXByZWNhdGVkU3RyaW5nJik7CiAKICAgICBUZXh0RW5jb2RpbmcgbV9lbmNv
ZGluZzsKLSAgICBEZXByZWNhdGVkVmFsdWVMaXN0PEZvcm1EYXRhTGlzdEl0ZW0+IG1fbGlzdDsK
KyAgICBWZWN0b3I8Rm9ybURhdGFMaXN0SXRlbT4gbV9saXN0OwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MTcwKQorKysgaHRtbC9I
VE1MQW5jaG9yRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDEyICs4MSwxMyBAQCBi
b29sIEhUTUxBbmNob3JFbGVtZW50Ojppc0ZvY3VzYWJsZSgpIGNvCiAgICAgICAgIGlmIChyLT53
aWR0aCgpID4gMCAmJiByLT5oZWlnaHQoKSA+IDApCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
IAotICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3Q8SW50UmVjdD4gcmVjdHM7Ci0gICAgaW50IHggPSAw
LCB5ID0gMDsKKyAgICBWZWN0b3I8SW50UmVjdD4gcmVjdHM7CisgICAgaW50IHgsIHk7CiAgICAg
cmVuZGVyZXIoKS0+YWJzb2x1dGVQb3NpdGlvbih4LCB5KTsKICAgICByZW5kZXJlcigpLT5hYnNv
bHV0ZVJlY3RzKHJlY3RzLCB4LCB5KTsKLSAgICBmb3IgKERlcHJlY2F0ZWRWYWx1ZUxpc3Q8SW50
UmVjdD46OkNvbnN0SXRlcmF0b3IgaXQgPSByZWN0cy5iZWdpbigpOyBpdCAhPSByZWN0cy5lbmQo
KTsgKytpdCkKLSAgICAgICAgaWYgKCEoKml0KS5pc0VtcHR5KCkpCisgICAgc2l6ZV90IG4gPSBy
ZWN0cy5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuOyArK2kpCisgICAgICAg
IGlmICghcmVjdHNbaV0uaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAg
ICByZXR1cm4gZmFsc2U7CkluZGV4OiBodG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjE3MCkKKysrIGh0bWwv
SFRNTEZvcm1FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA3LDI3ICsyMDcsMjkgQEAg
Ym9vbCBIVE1MRm9ybUVsZW1lbnQ6OmZvcm1EYXRhKEZvcm1EYXRhIAogICAgICAgICAgICAgZW5j
b2RpbmcgPSBUZXh0RW5jb2RpbmcoTGF0aW4xRW5jb2RpbmcpOwogICAgIH0KIAotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBmb3JtRWxlbWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICBzaXpl
X3QgbiA9IGZvcm1FbGVtZW50cy5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBu
OyArK2kpIHsKICAgICAgICAgSFRNTEdlbmVyaWNGb3JtRWxlbWVudCogY3VycmVudCA9IGZvcm1F
bGVtZW50c1tpXTsKICAgICAgICAgRm9ybURhdGFMaXN0IGxzdChlbmNvZGluZyk7CiAKICAgICAg
ICAgaWYgKCFjdXJyZW50LT5kaXNhYmxlZCgpICYmIGN1cnJlbnQtPmFwcGVuZEZvcm1EYXRhKGxz
dCwgbV9tdWx0aXBhcnQpKSB7Ci0gICAgICAgICAgICBmb3IgKERlcHJlY2F0ZWRWYWx1ZUxpc3RD
b25zdEl0ZXJhdG9yPEZvcm1EYXRhTGlzdEl0ZW0+IGl0ID0gbHN0LmJlZ2luKCk7IGl0ICE9IGxz
dC5lbmQoKTsgKytpdCkgeworICAgICAgICAgICAgc2l6ZV90IGxuID0gbHN0Lmxpc3QoKS5zaXpl
KCk7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGxuOyArK2opIHsKKyAgICAg
ICAgICAgICAgICBjb25zdCBGb3JtRGF0YUxpc3RJdGVtJiBpdGVtID0gbHN0Lmxpc3QoKVtqXTsK
ICAgICAgICAgICAgICAgICBpZiAoIW1fbXVsdGlwYXJ0KSB7CiAgICAgICAgICAgICAgICAgICAg
IC8vIGhhbmRsZSBJU0lOREVYIC8gPGlucHV0IG5hbWU9aXNpbmRleD4gc3BlY2lhbAogICAgICAg
ICAgICAgICAgICAgICAvLyBidXQgb25seSBpZiBpdHMgdGhlIGZpcnN0IGVudHJ5Ci0gICAgICAg
ICAgICAgICAgICAgIGlmICggZW5jX3N0cmluZy5pc0VtcHR5KCkgJiYgKCppdCkubV9kYXRhID09
ICJpc2luZGV4IiApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICsraXQ7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBlbmNfc3RyaW5nICs9IGVuY29kZUNTdHJpbmcoICgqaXQpLm1fZGF0YSAp
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYoIWVuY19zdHJpbmcuaXNFbXB0eSgpKQorICAgICAgICAg
ICAgICAgICAgICBpZiAoZW5jX3N0cmluZy5pc0VtcHR5KCkgJiYgaXRlbS5tX2RhdGEgPT0gImlz
aW5kZXgiKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmNfc3RyaW5nICs9IGVuY29kZUNT
dHJpbmcobHN0Lmxpc3QoKVtqICsgMV0ubV9kYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICsrajsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICghZW5jX3N0cmluZy5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZW5jX3N0cmluZyArPSAnJic7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGVuY19zdHJp
bmcgKz0gZW5jb2RlQ1N0cmluZygoKml0KS5tX2RhdGEpOworICAgICAgICAgICAgICAgICAgICAg
ICAgZW5jX3N0cmluZyArPSBlbmNvZGVDU3RyaW5nKGl0ZW0ubV9kYXRhKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGVuY19zdHJpbmcgKz0gIj0iOwotICAgICAgICAgICAgICAgICAgICAgICAg
KytpdDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVuY19zdHJpbmcgKz0gZW5jb2RlQ1N0cmlu
ZygoKml0KS5tX2RhdGEpOworICAgICAgICAgICAgICAgICAgICAgICAgZW5jX3N0cmluZyArPSBl
bmNvZGVDU3RyaW5nKGxzdC5saXN0KClbaiArIDFdLm1fZGF0YSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICArK2o7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgZWxzZQpAQCAtMjM2LDcgKzIzOCw3IEBAIGJvb2wgSFRNTEZvcm1FbGVt
ZW50Ojpmb3JtRGF0YShGb3JtRGF0YSAKICAgICAgICAgICAgICAgICAgICAgaHN0ciArPSBtX2Jv
dW5kYXJ5LmRlcHJlY2F0ZWRTdHJpbmcoKS5sYXRpbjEoKTsKICAgICAgICAgICAgICAgICAgICAg
aHN0ciArPSAiXHJcbiI7CiAgICAgICAgICAgICAgICAgICAgIGhzdHIgKz0gIkNvbnRlbnQtRGlz
cG9zaXRpb246IGZvcm0tZGF0YTsgbmFtZT1cIiI7Ci0gICAgICAgICAgICAgICAgICAgIGhzdHIg
Kz0gKCppdCkubV9kYXRhLmRhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgaHN0ciArPSBpdGVt
Lm1fZGF0YS5kYXRhKCk7CiAgICAgICAgICAgICAgICAgICAgIGhzdHIgKz0gIlwiIjsKIAogICAg
ICAgICAgICAgICAgICAgICAvLyBpZiB0aGUgY3VycmVudCB0eXBlIGlzIEZJTEUsIHRoZW4gd2Ug
YWxzbyBuZWVkIHRvCkBAIC0yNjMsMTcgKzI2NSwxOCBAQCBib29sIEhUTUxGb3JtRWxlbWVudDo6
Zm9ybURhdGEoRm9ybURhdGEgCiAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
ICAgICAgICBoc3RyICs9ICJcclxuXHJcbiI7Ci0gICAgICAgICAgICAgICAgICAgICsraXQ7CiAK
ICAgICAgICAgICAgICAgICAgICAgLy8gYXBwZW5kIGJvZHkKICAgICAgICAgICAgICAgICAgICAg
Zm9ybV9kYXRhLmFwcGVuZERhdGEoaHN0ci5kYXRhKCksIGhzdHIubGVuZ3RoKCkpOwotICAgICAg
ICAgICAgICAgICAgICBjb25zdCBGb3JtRGF0YUxpc3RJdGVtICZpdGVtID0gKml0OworICAgICAg
ICAgICAgICAgICAgICBjb25zdCBGb3JtRGF0YUxpc3RJdGVtJiBpdGVtID0gbHN0Lmxpc3QoKVtq
ICsgMV07CiAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBkYXRhU2l6ZSA9IGl0ZW0ubV9kYXRh
LnNpemUoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFTaXplICE9IDApCiAgICAgICAg
ICAgICAgICAgICAgICAgICBmb3JtX2RhdGEuYXBwZW5kRGF0YShpdGVtLm1fZGF0YSwgZGF0YVNp
emUgLSAxKTsKICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIWl0ZW0ubV9wYXRoLmlzRW1w
dHkoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1fZGF0YS5hcHBlbmRGaWxlKGl0ZW0u
bV9wYXRoKTsKICAgICAgICAgICAgICAgICAgICAgZm9ybV9kYXRhLmFwcGVuZERhdGEoIlxyXG4i
LCAyKTsKKworICAgICAgICAgICAgICAgICAgICArK2o7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQogICAgICAgICB9CkluZGV4OiBrY2FudmFzL1JlbmRlclBhdGguY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGtjYW52YXMvUmVuZGVyUGF0aC5jcHAJKHJldmlzaW9uIDE2MTcwKQorKysga2Nh
bnZhcy9SZW5kZXJQYXRoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM3LDcgKzIzNyw3IEBAIHZv
aWQgUmVuZGVyUGF0aDo6cGFpbnQoUGFpbnRJbmZvICZwYWludEkKICAgICB9CiB9CiAKLXZvaWQg
UmVuZGVyUGF0aDo6YWJzb2x1dGVSZWN0cyhEZXByZWNhdGVkVmFsdWVMaXN0PEludFJlY3Q+JiBy
ZWN0cywgaW50IF90eCwgaW50IF90eSkKK3ZvaWQgUmVuZGVyUGF0aDo6YWJzb2x1dGVSZWN0cyhW
ZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQgX3R4LCBpbnQgX3R5KQogewogICAgIHJlY3RzLmFw
cGVuZChnZXRBYnNvbHV0ZVJlcGFpbnRSZWN0KCkpOwogfQpJbmRleDoga2NhbnZhcy9SZW5kZXJQ
YXRoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0ga2NhbnZhcy9SZW5kZXJQYXRoLmgJKHJldmlzaW9uIDE2MTcw
KQorKysga2NhbnZhcy9SZW5kZXJQYXRoLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDcgKzY4LDcg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgc2hvcnQgYmFzZWxpbmVQb3NpdGlvbihib29sIGIsIGJv
b2wgaXNSb290TGluZUJveCA9IGZhbHNlKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQo
UGFpbnRJbmZvJiwgaW50IHBhcmVudFgsIGludCBwYXJlbnRZKTsKICAKLSAgICB2aXJ0dWFsIHZv
aWQgYWJzb2x1dGVSZWN0cyhEZXByZWNhdGVkVmFsdWVMaXN0PEludFJlY3Q+JiByZWN0cywgaW50
IHR4LCBpbnQgdHkpOworICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRS
ZWN0PiYsIGludCB0eCwgaW50IHR5KTsKIAogICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChO
b2RlSW5mbyYsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOwog
ICAgIApJbmRleDoga2NhbnZhcy9SZW5kZXJTVkdJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2Nh
bnZhcy9SZW5kZXJTVkdJbWFnZS5jcHAJKHJldmlzaW9uIDE2MTcwKQorKysga2NhbnZhcy9SZW5k
ZXJTVkdJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3MSw3ICsyNzEsNyBAQCBJbnRSZWN0
IFJlbmRlclNWR0ltYWdlOjpnZXRBYnNvbHV0ZVJlcGFpCiAgICAgcmV0dXJuIGVuY2xvc2luZ0lu
dFJlY3QocmVwYWludFJlY3QpOwogfQogCi12b2lkIFJlbmRlclNWR0ltYWdlOjphYnNvbHV0ZVJl
Y3RzKERlcHJlY2F0ZWRWYWx1ZUxpc3Q8SW50UmVjdD4mIHJlY3RzLCBpbnQgX3R4LCBpbnQgX3R5
KQordm9pZCBSZW5kZXJTVkdJbWFnZTo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJl
Y3RzLCBpbnQgdHgsIGludCB0eSkKIHsKICAgICByZWN0cy5hcHBlbmQoZ2V0QWJzb2x1dGVSZXBh
aW50UmVjdCgpKTsKIH0KSW5kZXg6IGtjYW52YXMvUmVuZGVyU1ZHSW1hZ2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBrY2FudmFzL1JlbmRlclNWR0ltYWdlLmgJKHJldmlzaW9uIDE2MTcwKQorKysga2NhbnZh
cy9SZW5kZXJTVkdJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBGbG9hdFJlY3QgcmVsYXRpdmVCQm94KGJv
b2wgaW5jbHVkZVN0cm9rZSA9IHRydWUpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIEludFJlY3Qg
Z2V0QWJzb2x1dGVSZXBhaW50UmVjdCgpOwogICAgICAgICAKLSAgICAgICAgdmlydHVhbCB2b2lk
IGFic29sdXRlUmVjdHMoRGVwcmVjYXRlZFZhbHVlTGlzdDxJbnRSZWN0PiYgcmVjdHMsIGludCB0
eCwgaW50IHR5KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGFic29sdXRlUmVjdHMoVmVjdG9yPElu
dFJlY3Q+JiwgaW50IHR4LCBpbnQgdHkpOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBpbWFnZUNo
YW5nZWQoQ2FjaGVkSW1hZ2UqKTsKICAgICAgICAgdm9pZCBhZGp1c3RSZWN0c0ZvckFzcGVjdFJh
dGlvKEZsb2F0UmVjdCYgZGVzdFJlY3QsIEZsb2F0UmVjdCYgc3JjUmVjdCwgU1ZHUHJlc2VydmVB
c3BlY3RSYXRpbyAqYXNwZWN0UmF0aW8pOwpJbmRleDoga2NhbnZhcy9SZW5kZXJTVkdUZXh0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBrY2FudmFzL1JlbmRlclNWR1RleHQuY3BwCShyZXZpc2lvbiAxNjE3
MCkKKysrIGtjYW52YXMvUmVuZGVyU1ZHVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MCw3
ICsxODAsNyBAQCBib29sIFJlbmRlclNWR1RleHQ6Om5vZGVBdFBvaW50KE5vZGVJbmZvCiAgICAg
cmV0dXJuIFJlbmRlckJsb2NrOjpub2RlQXRQb2ludChpbmZvLCAoaW50KWxvY2FsWCwgKGludCls
b2NhbFksIF90eCwgX3R5LCBoaXRUZXN0QWN0aW9uKTsKIH0KIAotdm9pZCBSZW5kZXJTVkdUZXh0
OjphYnNvbHV0ZVJlY3RzKERlcHJlY2F0ZWRWYWx1ZUxpc3Q8SW50UmVjdD4mIHJlY3RzLCBpbnQg
X3R4LCBpbnQgX3R5KQordm9pZCBSZW5kZXJTVkdUZXh0OjphYnNvbHV0ZVJlY3RzKFZlY3RvcjxJ
bnRSZWN0PiYgcmVjdHMsIGludCB0eCwgaW50IHR5KQogewogICAgIEFmZmluZVRyYW5zZm9ybSBt
YXQgPSB0cmFuc2xhdGlvbkZvckF0dHJpYnV0ZXMoKTsKICAgICBtYXQgKj0gdHJhbnNsYXRpb25U
b3BUb0Jhc2VsaW5lKCk7CkluZGV4OiBrY2FudmFzL1JlbmRlclNWR1RleHQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBrY2FudmFzL1JlbmRlclNWR1RleHQuaAkocmV2aXNpb24gMTYxNzApCisrKyBrY2FudmFz
L1JlbmRlclNWR1RleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsOSArNDIsOSBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gbG9jYWxUcmFuc2Zvcm0oKSBjb25zdCB7IHJl
dHVybiBtX3RyYW5zZm9ybTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRMb2NhbFRyYW5zZm9ybShj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkgeyBtX3RyYW5zZm9ybSA9IHRyYW5zZm9y
bTsgfQogICAgIAotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChOb2RlSW5mbyYsIGludCBf
eCwgaW50IF95LCBpbnQgX3R4LCBpbnQgX3R5LCBIaXRUZXN0QWN0aW9uKTsKKyAgICB2aXJ0dWFs
IGJvb2wgbm9kZUF0UG9pbnQoTm9kZUluZm8mLCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5
LCBIaXRUZXN0QWN0aW9uKTsKIAotICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVJlY3RzKERlcHJl
Y2F0ZWRWYWx1ZUxpc3Q8SW50UmVjdD4mIHJlY3RzLCBpbnQgdHgsIGludCB0eSk7CisgICAgdmly
dHVhbCB2b2lkIGFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgaW50IHR4LCBpbnQgdHkp
OwogCiAgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVBYnNvbHV0ZVJlcGFpbnRSZWN0KEludFJlY3Qm
IHIsIGJvb2wgZik7CiAgICAgdmlydHVhbCBib29sIHJlcXVpcmVzTGF5ZXIoKTsKSW5kZXg6IGxv
YWRlci9Eb2NMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBsb2FkZXIvRG9jTG9hZGVyLmgJKHJldmlz
aW9uIDE2MTcwKQorKysgbG9hZGVyL0RvY0xvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3
ICsyOCw2IEBACiAjZGVmaW5lIERvY0xvYWRlcl9oCiAKICNpbmNsdWRlICJDYWNoZVBvbGljeS5o
IgotI2luY2x1ZGUgIkRlcHJlY2F0ZWRQdHJMaXN0LmgiCiAjaW5jbHVkZSAiRGVwcmVjYXRlZFN0
cmluZ0xpc3QuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlN0cmluZ0hhc2gu
aCIKSW5kZXg6IGxvYWRlci9Gb3JtRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbG9hZGVyL0Zvcm1E
YXRhLmNwcAkocmV2aXNpb24gMTYxNzApCisrKyBsb2FkZXIvRm9ybURhdGEuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01MCwyOSArNTAsMjUgQEAgdm9pZCBGb3JtRGF0YTo6YXBwZW5kRmlsZShjb25z
dCBEZXByZWNhdAogICAgIG1fZWxlbWVudHMuYXBwZW5kKGZpbGVuYW1lKTsKIH0KIAotVmVjdG9y
PGNoYXI+IEZvcm1EYXRhOjpmbGF0dGVuKCkgY29uc3QKK3ZvaWQgRm9ybURhdGE6OmZsYXR0ZW4o
VmVjdG9yPGNoYXI+JiBkYXRhKSBjb25zdAogewogICAgIC8vIENvbmNhdGVuYXRlIGFsbCB0aGUg
Ynl0ZSBhcnJheXMsIGJ1dCBvbWl0IGFueSBmaWxlcy4KLSAgICBWZWN0b3I8Y2hhcj4gYTsKLSAg
ICBmb3IgKERlcHJlY2F0ZWRWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPEZvcm1EYXRhRWxlbWVudD4g
aXQgPSBtX2VsZW1lbnRzLmJlZ2luKCk7IGl0ICE9IG1fZWxlbWVudHMuZW5kKCk7ICsraXQpIHsK
LSAgICAgICAgY29uc3QgRm9ybURhdGFFbGVtZW50JiBlID0gKml0OworICAgIHNpemVfdCBuID0g
bV9lbGVtZW50cy5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuOyArK2kpIHsK
KyAgICAgICAgY29uc3QgRm9ybURhdGFFbGVtZW50JiBlID0gbV9lbGVtZW50c1tpXTsKICAgICAg
ICAgaWYgKGUubV90eXBlID09IEZvcm1EYXRhRWxlbWVudDo6ZGF0YSkgewotICAgICAgICAgICAg
aWYgKGEuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIGEgPSBlLm1fZGF0YTsKLSAgICAgICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHNpemVfdCBvbGRTaXplID0gYS5zaXplKCk7Ci0g
ICAgICAgICAgICAgICAgc2l6ZV90IGRlbHRhID0gZS5tX2RhdGEuc2l6ZSgpOwotICAgICAgICAg
ICAgICAgIGEucmVzaXplKG9sZFNpemUgKyBkZWx0YSk7Ci0gICAgICAgICAgICAgICAgbWVtY3B5
KGEuZGF0YSgpICsgb2xkU2l6ZSwgZS5tX2RhdGEuZGF0YSgpLCBkZWx0YSk7Ci0gICAgICAgICAg
ICB9CisgICAgICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IGRhdGEuc2l6ZSgpOworICAgICAgICAg
ICAgc2l6ZV90IGRlbHRhID0gZS5tX2RhdGEuc2l6ZSgpOworICAgICAgICAgICAgZGF0YS5yZXNp
emUob2xkU2l6ZSArIGRlbHRhKTsKKyAgICAgICAgICAgIG1lbWNweShkYXRhLmRhdGEoKSArIG9s
ZFNpemUsIGUubV9kYXRhLmRhdGEoKSwgZGVsdGEpOwogICAgICAgICB9CiAgICAgfQotICAgIHJl
dHVybiBhOwogfQogCiBEZXByZWNhdGVkU3RyaW5nIEZvcm1EYXRhOjpmbGF0dGVuVG9TdHJpbmco
KSBjb25zdAogewotICAgIFZlY3RvcjxjaGFyPiBieXRlcyA9IGZsYXR0ZW4oKTsKKyAgICBWZWN0
b3I8Y2hhcj4gYnl0ZXM7CisgICAgZmxhdHRlbihieXRlcyk7CiAgICAgcmV0dXJuIERlcHJlY2F0
ZWRTdHJpbmc6OmZyb21MYXRpbjEoYnl0ZXMuZGF0YSgpLCBieXRlcy5zaXplKCkpOwogfQogCklu
ZGV4OiBsb2FkZXIvRm9ybURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBsb2FkZXIvRm9ybURhdGEuaAko
cmV2aXNpb24gMTYxNzApCisrKyBsb2FkZXIvRm9ybURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAt
NDMsMTggKzQzLDE2IEBAIHB1YmxpYzoKICAgICBGb3JtRGF0YSgpOwogICAgIEZvcm1EYXRhKGNv
bnN0IERlcHJlY2F0ZWRDU3RyaW5nJik7CiAKLSAgICB2b2lkIGFwcGVuZERhdGEoY29uc3Qgdm9p
ZCAqZGF0YSwgc2l6ZV90IHNpemUpOworICAgIHZvaWQgYXBwZW5kRGF0YShjb25zdCB2b2lkKiBk
YXRhLCBzaXplX3QpOwogICAgIHZvaWQgYXBwZW5kRmlsZShjb25zdCBEZXByZWNhdGVkU3RyaW5n
JiBmaWxlbmFtZSk7CiAKLSAgICBWZWN0b3I8Y2hhcj4gZmxhdHRlbigpIGNvbnN0OyAvLyBvbWl0
cyBmaWxlcworICAgIHZvaWQgZmxhdHRlbihWZWN0b3I8Y2hhcj4mKSBjb25zdDsgLy8gb21pdHMg
ZmlsZXMKICAgICBEZXByZWNhdGVkU3RyaW5nIGZsYXR0ZW5Ub1N0cmluZygpIGNvbnN0OyAvLyBv
bWl0cyBmaWxlcwogCi0gICAgc2l6ZV90IGNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50
cy5jb3VudCgpOyB9Ci0gICAgRGVwcmVjYXRlZFZhbHVlTGlzdENvbnN0SXRlcmF0b3I8Rm9ybURh
dGFFbGVtZW50PiBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudHMuYmVnaW4oKTsgfQot
ICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPEZvcm1EYXRhRWxlbWVudD4gZW5k
KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50cy5lbmQoKTsgfQorICAgIGNvbnN0IFZlY3RvcjxG
b3JtRGF0YUVsZW1lbnQ+JiBlbGVtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudHM7IH0K
IAogcHJpdmF0ZToKLSAgICBEZXByZWNhdGVkVmFsdWVMaXN0PEZvcm1EYXRhRWxlbWVudD4gbV9l
bGVtZW50czsKKyAgICBWZWN0b3I8Rm9ybURhdGFFbGVtZW50PiBtX2VsZW1lbnRzOwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogbG9hZGVyL21hYy9Mb2FkZXJGdW5jdGlvbnNN
YWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gbG9hZGVyL21hYy9Mb2FkZXJGdW5jdGlvbnNNYWMubW0JKHJl
dmlzaW9uIDE2MTcwKQorKysgbG9hZGVyL21hYy9Mb2FkZXJGdW5jdGlvbnNNYWMubW0JKHdvcmtp
bmcgY29weSkKQEAgLTE0MSw3ICsxNDEsNyBAQCBWZWN0b3I8Y2hhcj4gU2VydmVTeW5jaHJvbm91
c1JlcXVlc3QoTG9hCiAgICAgICAgIGhlYWRlckRpY3QgPSBbW05TRGljdGlvbmFyeSBfd2ViY29y
ZV9kaWN0aW9uYXJ5V2l0aEhlYWRlclN0cmluZzpoZWFkZXJTdHJpbmddIHJldGFpbl07CiAKICAg
ICBOU0FycmF5ICpwb3N0RGF0YSA9IG5pbDsKLSAgICBpZiAoam9iLT5wb3N0RGF0YSgpLmNvdW50
KCkgPiAwKQorICAgIGlmICgham9iLT5wb3N0RGF0YSgpLmVsZW1lbnRzKCkuaXNFbXB0eSgpKQog
ICAgICAgICBwb3N0RGF0YSA9IGFycmF5RnJvbUZvcm1EYXRhKGpvYi0+cG9zdERhdGEoKSk7CiAK
ICAgICBOU1VSTCAqZmluYWxOU1VSTCA9IG5pbDsKSW5kZXg6IHBhZ2UvRnJhbWUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIHBhZ2UvRnJhbWUuY3BwCShyZXZpc2lvbiAxNjE3MCkKKysrIHBhZ2UvRnJhbWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDEwLDcgKzM0MTAsNyBAQCBib29sIEZyYW1lOjptYXJr
ZWRUZXh0VXNlc1VuZGVybGluZXMoKSBjCiAgICAgcmV0dXJuIGQtPm1fbWFya2VkVGV4dFVzZXNV
bmRlcmxpbmVzOwogfQogCi1EZXByZWNhdGVkVmFsdWVMaXN0PE1hcmtlZFRleHRVbmRlcmxpbmU+
IEZyYW1lOjptYXJrZWRUZXh0VW5kZXJsaW5lcygpIGNvbnN0Citjb25zdCBWZWN0b3I8TWFya2Vk
VGV4dFVuZGVybGluZT4mIEZyYW1lOjptYXJrZWRUZXh0VW5kZXJsaW5lcygpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIGQtPm1fbWFya2VkVGV4dFVuZGVybGluZXM7CiB9CkluZGV4OiBwYWdlL0ZyYW1l
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gcGFnZS9GcmFtZS5oCShyZXZpc2lvbiAxNjE3MCkKKysrIHBhZ2Uv
RnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtNzUsNiArNzUsOCBAQCBjbGFzcyBWaXNpYmxlUG9z
aXRpb247CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgVGltZXI7CiAKIHN0cnVjdCBNYXJr
ZWRUZXh0VW5kZXJsaW5lIHsKKyAgICBNYXJrZWRUZXh0VW5kZXJsaW5lKCkgCisgICAgICAgIDog
c3RhcnRPZmZzZXQoMCksIGVuZE9mZnNldCgwKSwgdGhpY2soZmFsc2UpIHsgfQogICAgIE1hcmtl
ZFRleHRVbmRlcmxpbmUodW5zaWduZWQgcywgdW5zaWduZWQgZSwgY29uc3QgQ29sb3ImIGMsIGJv
b2wgdCkgCiAgICAgICAgIDogc3RhcnRPZmZzZXQocyksIGVuZE9mZnNldChlKSwgY29sb3IoYyks
IHRoaWNrKHQpIHsgfQogICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0OwpAQCAtNzMyLDcgKzczNCw3
IEBAIHByaXZhdGU6CiAKICAgVUNoYXIgYmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbCgpIGNvbnN0
OwogCi0gIERlcHJlY2F0ZWRWYWx1ZUxpc3Q8TWFya2VkVGV4dFVuZGVybGluZT4gbWFya2VkVGV4
dFVuZGVybGluZXMoKSBjb25zdDsgIAorICBjb25zdCBWZWN0b3I8TWFya2VkVGV4dFVuZGVybGlu
ZT4mIG1hcmtlZFRleHRVbmRlcmxpbmVzKCkgY29uc3Q7ICAKICAgYm9vbCBtYXJrZWRUZXh0VXNl
c1VuZGVybGluZXMoKSBjb25zdDsKICAgCiAgIHVuc2lnbmVkIG1hcmtBbGxNYXRjaGVzRm9yVGV4
dChjb25zdCBTdHJpbmcmLCBib29sIGNhc2VGbGFnKTsKSW5kZXg6IHBhZ2UvRnJhbWVQcml2YXRl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gcGFnZS9GcmFtZVByaXZhdGUuaAkocmV2aXNpb24gMTYxNzApCisr
KyBwYWdlL0ZyYW1lUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjMsNyArMjIzLDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBLVVJMIG1fc3VibWl0dGVkRm9ybVVSTDsKICAg
ICAgICAgCiAgICAgICAgIGJvb2wgbV9tYXJrZWRUZXh0VXNlc1VuZGVybGluZXM7Ci0gICAgICAg
IERlcHJlY2F0ZWRWYWx1ZUxpc3Q8TWFya2VkVGV4dFVuZGVybGluZT4gbV9tYXJrZWRUZXh0VW5k
ZXJsaW5lczsKKyAgICAgICAgVmVjdG9yPE1hcmtlZFRleHRVbmRlcmxpbmU+IG1fbWFya2VkVGV4
dFVuZGVybGluZXM7CiAgICAgICAgIGJvb2wgbV9oaWdobGlnaHRUZXh0TWF0Y2hlczsKICAgICAg
ICAgYm9vbCBtX3dpbmRvd0hhc0ZvY3VzOwogICAgICAgICAKSW5kZXg6IHBhZ2UvU2V0dGluZ3Mu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBwYWdlL1NldHRpbmdzLmgJKHJldmlzaW9uIDE2MTcwKQorKysgcGFn
ZS9TZXR0aW5ncy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwMyBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNyAr
MjYsNyBAQAogI2lmbmRlZiBXZWJDb3JlU2V0dGluZ3NfSAogI2RlZmluZSBXZWJDb3JlU2V0dGlu
Z3NfSAogCi0jaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkF0b21pY1N0cmluZy5oIgogI2lu
Y2x1ZGUgIktVUkwuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogcGxhdGZvcm0vRm9u
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vRm9udC5jcHAJKHJldmlzaW9uIDE2MTcwKQor
KysgcGxhdGZvcm0vRm9udC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDIzICsyNSwyMSBAQAog
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIkZvbnRE
YXRhLmgiCiAKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJGb250RmFsbGJhY2tM
aXN0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiU2V0dGluZ3Mu
aCIKLQorI2luY2x1ZGUgIkludFBvaW50LmgiCiAjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKLQor
I2luY2x1ZGUgIlRleHRTdHlsZS5oIgorI2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIuaD4KICNpbmNs
dWRlIDx1bmljb2RlL3VtYWNoaW5lLmg+CiAjaW5jbHVkZSA8dW5pY29kZS91bm9ybS5oPgotCiAj
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBB
Y2NvcmRpbmcgdG8gaHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvVU5JREFUQS9VQ0QuaHRt
bCNDYW5vbmljYWxfQ29tYmluaW5nX0NsYXNzX1ZhbHVlcwotI2RlZmluZSBISVJBR0FOQV9LQVRB
S0FOQV9WT0lDSU5HX01BUktTIDgKK2NvbnN0IHVpbnQ4X3QgaGlyaWdhbmFLYXRha2FuYVZvaWNp
bmdNYXJrc0NvbWJpbmluZ0NsYXNzID0gODsKIAogY29uc3QgdWludDhfdCBGb250OjpnUm91bmRp
bmdIYWNrQ2hhcmFjdGVyVGFibGVbMjU2XSA9IHsKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAxIC8qXHQqLywgMSAvKlxuKi8sIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCkBAIC04MSw4ICs3OSwxNCBAQCBwcml2YXRl
OgogfTsKIAogV2lkdGhJdGVyYXRvcjo6V2lkdGhJdGVyYXRvcihjb25zdCBGb250KiBmb250LCBj
b25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IFRleHRTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnREYXRh
KiBzdWJzdGl0dXRlRm9udERhdGEpCi06bV9mb250KGZvbnQpLCBtX3J1bihydW4pLCBtX2VuZChz
dHlsZS5ydGwoKSA/IHJ1bi5sZW5ndGgoKSA6IHJ1bi50bygpKSwgbV9zdHlsZShzdHlsZSksIG1f
c3Vic3RpdHV0ZUZvbnREYXRhKHN1YnN0aXR1dGVGb250RGF0YSksCi0gbV9jdXJyZW50Q2hhcmFj
dGVyKHJ1bi5mcm9tKCkpLCBtX3J1bldpZHRoU29GYXIoMCksIG1fZmluYWxSb3VuZGluZ1dpZHRo
KDApCisgICAgOiBtX2ZvbnQoZm9udCkKKyAgICAsIG1fcnVuKHJ1bikKKyAgICAsIG1fZW5kKHN0
eWxlLnJ0bCgpID8gcnVuLmxlbmd0aCgpIDogcnVuLnRvKCkpCisgICAgLCBtX3N0eWxlKHN0eWxl
KQorICAgICwgbV9zdWJzdGl0dXRlRm9udERhdGEoc3Vic3RpdHV0ZUZvbnREYXRhKQorICAgICwg
bV9jdXJyZW50Q2hhcmFjdGVyKHJ1bi5mcm9tKCkpCisgICAgLCBtX3J1bldpZHRoU29GYXIoMCkK
KyAgICAsIG1fZmluYWxSb3VuZGluZ1dpZHRoKDApCiB7CiAgICAgLy8gSWYgdGhlIHBhZGRpbmcg
aXMgbm9uLXplcm8sIGNvdW50IHRoZSBudW1iZXIgb2Ygc3BhY2VzIGluIHRoZSBydW4KICAgICAv
LyBhbmQgZGl2aWRlIHRoYXQgYnkgdGhlIHBhZGRpbmcgZm9yIHBlciBzcGFjZSBhZGRpdGlvbi4K
QEAgLTI5Miw3ICsyOTYsNyBAQCBib29sIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2VPbmVDaGFyYWN0
ZXIoCiBVQ2hhcjMyIFdpZHRoSXRlcmF0b3I6Om5vcm1hbGl6ZVZvaWNpbmdNYXJrcyhpbnQgY3Vy
cmVudENoYXJhY3RlcikKIHsKICAgICBpZiAoY3VycmVudENoYXJhY3RlciArIDEgPCBtX2VuZCkg
ewotICAgICAgICBpZiAodV9nZXRDb21iaW5pbmdDbGFzcyhtX3J1bltjdXJyZW50Q2hhcmFjdGVy
ICsgMV0pID09IEhJUkFHQU5BX0tBVEFLQU5BX1ZPSUNJTkdfTUFSS1MpIHsKKyAgICAgICAgaWYg
KHVfZ2V0Q29tYmluaW5nQ2xhc3MobV9ydW5bY3VycmVudENoYXJhY3RlciArIDFdKSA9PSBoaXJp
Z2FuYUthdGFrYW5hVm9pY2luZ01hcmtzQ29tYmluaW5nQ2xhc3MpIHsKICAgICAgICAgICAgIC8v
IE5vcm1hbGl6ZSBpbnRvIGNvbXBvc2VkIGZvcm0gdXNpbmcgMy4yIHJ1bGVzLgogICAgICAgICAg
ICAgVUNoYXIgbm9ybWFsaXplZENoYXJhY3RlcnNbMl0gPSB7IDAsIDAgfTsKICAgICAgICAgICAg
IFVFcnJvckNvZGUgdVN0YXR1cyA9IChVRXJyb3JDb2RlKTA7ICAKQEAgLTM3MCw2ICszNzQsMTEg
QEAgdm9pZCBGb250Ojp1cGRhdGUoKSBjb25zdAogICAgIG1fZm9udExpc3QtPmludmFsaWRhdGUo
KTsKIH0KIAoraW50IEZvbnQ6OndpZHRoKGNvbnN0IFRleHRSdW4mIHJ1bikgY29uc3QKK3sKKyAg
ICByZXR1cm4gd2lkdGgocnVuLCBUZXh0U3R5bGUoKSk7Cit9CisKIGludCBGb250Ojp3aWR0aChj
b25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IFRleHRTdHlsZSYgc3R5bGUpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIGxyb3VuZGYoZmxvYXRXaWR0aChydW4sIHN0eWxlKSk7CkluZGV4OiBwbGF0Zm9ybS9G
b250LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vRm9udC5oCShyZXZpc2lvbiAxNjE3MCkKKysr
IHBsYXRmb3JtL0ZvbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTEgKzI2LDcgQEAKICNpZm5k
ZWYgRk9OVF9ICiAjZGVmaW5lIEZPTlRfSAogCi0jaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRl
ICJGb250RGVzY3JpcHRpb24uaCIKLSNpbmNsdWRlICJGb250RGF0YS5oIgotI2luY2x1ZGUgIlRl
eHREaXJlY3Rpb24uaCIKLSNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgogCiAjaWYgUExBVEZPUk0o
UVQpCiBjbGFzcyBRRm9udDsKQEAgLTM4LDE1ICszNCwxNyBAQCBjbGFzcyBRRm9udDsKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBGbG9hdFBvaW50OworY2xhc3MgRmxvYXRSZWN0Owor
Y2xhc3MgRm9udERhdGE7CiBjbGFzcyBGb250RmFsbGJhY2tMaXN0OworY2xhc3MgRm9udFBsYXRm
b3JtRGF0YTsKK2NsYXNzIEdseXBoQnVmZmVyOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogY2xh
c3MgSW50UG9pbnQ7Ci1jbGFzcyBJbnRSZWN0OwotY2xhc3MgRmxvYXRSZWN0OwotY2xhc3MgRmxv
YXRQb2ludDsKK2NsYXNzIFRleHRTdHlsZTsKIAotY2xhc3MgVGV4dFJ1bgoteworY2xhc3MgVGV4
dFJ1biB7CiBwdWJsaWM6CiAgICAgVGV4dFJ1bihjb25zdCBVQ2hhciogYywgaW50IGxlbikKICAg
ICA6bV9jaGFyYWN0ZXJzKGMpLCBtX2xlbihsZW4pLCBtX2Zyb20oMCksIG1fdG8obGVuKQpAQCAt
NzksNDUgKzc3LDEyIEBAIHByaXZhdGU6CiAgICAgaW50IG1fdG87CiB9OwogCi1jbGFzcyBUZXh0
U3R5bGUKLXsKLXB1YmxpYzoKLSAgICBUZXh0U3R5bGUoaW50IHRhYldpZHRoID0gMCwgaW50IHhw
b3MgPSAwLCBpbnQgcGFkZGluZyA9IDAsIGJvb2wgcnRsID0gZmFsc2UsIGJvb2wgZGlyZWN0aW9u
YWxPdmVycmlkZSA9IGZhbHNlLAotICAgICAgICAgICAgICBib29sIGFwcGx5UnVuUm91bmRpbmcg
PSB0cnVlLCBib29sIGFwcGx5V29yZFJvdW5kaW5nID0gdHJ1ZSwgYm9vbCBhdHRlbXB0Rm9udFN1
YnN0aXR1dGlvbiA9IHRydWUpCi0gICAgOm1fdGFiV2lkdGgodGFiV2lkdGgpLCBtX3hwb3MoeHBv
cyksIG1fcGFkZGluZyhwYWRkaW5nKSwgbV9ydGwocnRsKSwgbV9kaXJlY3Rpb25hbE92ZXJyaWRl
KGRpcmVjdGlvbmFsT3ZlcnJpZGUpLAotICAgICBtX2FwcGx5UnVuUm91bmRpbmcoYXBwbHlSdW5S
b3VuZGluZyksIG1fYXBwbHlXb3JkUm91bmRpbmcoYXBwbHlXb3JkUm91bmRpbmcpLCBtX2F0dGVt
cHRGb250U3Vic3RpdHV0aW9uKGF0dGVtcHRGb250U3Vic3RpdHV0aW9uKQotICAgIHt9Ci0gICAg
Ci0gICAgaW50IHRhYldpZHRoKCkgY29uc3QgeyByZXR1cm4gbV90YWJXaWR0aDsgfQotICAgIGlu
dCB4UG9zKCkgY29uc3QgeyByZXR1cm4gbV94cG9zOyB9Ci0gICAgaW50IHBhZGRpbmcoKSBjb25z
dCB7IHJldHVybiBtX3BhZGRpbmc7IH0KLSAgICBib29sIHJ0bCgpIGNvbnN0IHsgcmV0dXJuIG1f
cnRsOyB9Ci0gICAgYm9vbCBsdHIoKSBjb25zdCB7IHJldHVybiAhbV9ydGw7IH0KLSAgICBib29s
IGRpcmVjdGlvbmFsT3ZlcnJpZGUoKSBjb25zdCB7IHJldHVybiBtX2RpcmVjdGlvbmFsT3ZlcnJp
ZGU7IH0KLSAgICBib29sIGFwcGx5UnVuUm91bmRpbmcoKSBjb25zdCB7IHJldHVybiBtX2FwcGx5
UnVuUm91bmRpbmc7IH0KLSAgICBib29sIGFwcGx5V29yZFJvdW5kaW5nKCkgY29uc3QgeyByZXR1
cm4gbV9hcHBseVdvcmRSb3VuZGluZzsgfQotICAgIGJvb2wgYXR0ZW1wdEZvbnRTdWJzdGl0dXRp
b24oKSBjb25zdCB7IHJldHVybiBtX2F0dGVtcHRGb250U3Vic3RpdHV0aW9uOyB9Ci0KLSAgICB2
b2lkIGRpc2FibGVSb3VuZGluZ0hhY2tzKCkgeyBtX2FwcGx5UnVuUm91bmRpbmcgPSBtX2FwcGx5
V29yZFJvdW5kaW5nID0gZmFsc2U7IH0KLSAgICB2b2lkIHNldFJUTChib29sIGIpIHsgbV9ydGwg
PSBiOyB9Ci0gICAgCi1wcml2YXRlOgotICAgIGludCBtX3RhYldpZHRoOwotICAgIGludCBtX3hw
b3M7Ci0gICAgaW50IG1fcGFkZGluZzsKLSAgICBib29sIG1fcnRsOwotICAgIGJvb2wgbV9kaXJl
Y3Rpb25hbE92ZXJyaWRlOwotICAgIGJvb2wgbV9hcHBseVJ1blJvdW5kaW5nOwotICAgIGJvb2wg
bV9hcHBseVdvcmRSb3VuZGluZzsKLSAgICBib29sIG1fYXR0ZW1wdEZvbnRTdWJzdGl0dXRpb247
Ci19OwotCiBjbGFzcyBGb250IHsKIHB1YmxpYzoKICAgICBGb250KCk7CiAgICAgRm9udChjb25z
dCBGb250RGVzY3JpcHRpb24mLCBzaG9ydCBsZXR0ZXJTcGFjaW5nLCBzaG9ydCB3b3JkU3BhY2lu
Zyk7CiAjaWYgUExBVEZPUk0oTUFDKQotICAgIEZvbnQoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYg
Zm9udFBsYXRmb3JtRGF0YSk7IC8vIFRoaXMgY29uc3RydWN0b3IgaXMgb25seSB1c2VkIGJ5IE1h
Yy1zcGVjaWZpYyBjb2RlIHRoYXQgYWxyZWFkeSBoYXMgYSBuYXRpdmUgZm9udC4KKyAgICBGb250
KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsgLy8gVGhpcyBjb25zdHJ1Y3RvciBpcyBvbmx5IHVz
ZWQgYnkgTWFjLXNwZWNpZmljIGNvZGUgdGhhdCBhbHJlYWR5IGhhcyBhIG5hdGl2ZSBmb250Lgog
I2VuZGlmCiAgICAgfkZvbnQoKTsKICAgICAKQEAgLTE0NSw4ICsxMTAsMTAgQEAgcHVibGljOgog
CiAgICAgdm9pZCBkcmF3VGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29u
c3QgVGV4dFN0eWxlJiwgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OwogCi0gICAgaW50IHdpZHRo
KGNvbnN0IFRleHRSdW4mLCBjb25zdCBUZXh0U3R5bGUmID0gVGV4dFN0eWxlKCkpIGNvbnN0Owot
ICAgIGZsb2F0IGZsb2F0V2lkdGgoY29uc3QgVGV4dFJ1biYsIGNvbnN0IFRleHRTdHlsZSYgPSBU
ZXh0U3R5bGUoKSkgY29uc3Q7CisgICAgaW50IHdpZHRoKGNvbnN0IFRleHRSdW4mLCBjb25zdCBU
ZXh0U3R5bGUmKSBjb25zdDsKKyAgICBpbnQgd2lkdGgoY29uc3QgVGV4dFJ1biYpIGNvbnN0Owor
ICAgIGZsb2F0IGZsb2F0V2lkdGgoY29uc3QgVGV4dFJ1biYsIGNvbnN0IFRleHRTdHlsZSYpIGNv
bnN0OworICAgIGZsb2F0IGZsb2F0V2lkdGgoY29uc3QgVGV4dFJ1biYpIGNvbnN0OwogICAgIAog
ICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbihjb25zdCBUZXh0UnVuJiwgY29uc3QgVGV4dFN0eWxl
JiwgaW50IHBvc2l0aW9uLCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdDsKICAgICBG
bG9hdFJlY3Qgc2VsZWN0aW9uUmVjdEZvclRleHQoY29uc3QgVGV4dFJ1biYsIGNvbnN0IFRleHRT
dHlsZSYsIGNvbnN0IEludFBvaW50JiwgaW50IGgpIGNvbnN0OwpAQCAtMTY4LDEwICsxMzUsNiBA
QCBwdWJsaWM6CiAgICAgdW5zaWduZWQgd2VpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9mb250RGVz
Y3JpcHRpb24ud2VpZ2h0KCk7IH0KICAgICBib29sIGJvbGQoKSBjb25zdCB7IHJldHVybiBtX2Zv
bnREZXNjcmlwdGlvbi5ib2xkKCk7IH0KIAotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBOU0ZvbnQq
IGdldE5TRm9udCgpIGNvbnN0IHsgcmV0dXJuIHByaW1hcnlGb250KCktPmdldE5TRm9udCgpOyB9
Ci0jZW5kaWYKLQogI2lmIFBMQVRGT1JNKFFUKQogICAgIG9wZXJhdG9yIFFGb250KCkgY29uc3Q7
CiAjZW5kaWYKSW5kZXg6IHBsYXRmb3JtL0ZvbnREYXRhLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGxhdGZv
cm0vRm9udERhdGEuaAkocmV2aXNpb24gMTYxNzApCisrKyBwbGF0Zm9ybS9Gb250RGF0YS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNSBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBpbnRlcm5hbCBmb250IGltcGxlbWVudGF0aW9uLiAgSXQgc2hvdWxkIG5vdCBiZSBpbmNs
dWRlZCBieSBhbnlvbmUgb3RoZXIgdGhhbgotICogRm9udE1hYy5jcHAsIEZvbnRXaW4uY3BwIGFu
ZCBGb250LmNwcC4KKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBpbnRlcm5hbCBmb250IGlt
cGxlbWVudGF0aW9uLgogICoKICAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwg
SW5jLgogICoKQEAgLTMyLDYgKzMxLDEwIEBACiAvLyBGSVhNRTogVGVtcG9yYXJ5LiBPbmx5IG5l
ZWRlZCB0byBzdXBwb3J0IEFQSSB0aGF0J3MgZ29pbmcgdG8gbW92ZS4KICNpbmNsdWRlIDx1bmlj
b2RlL3VtYWNoaW5lLmg+CiAKKyNpZiBQTEFURk9STShNQUMpCit0eXBlZGVmIHN0cnVjdCBPcGFx
dWVBVFNVU3R5bGUqIEFUU1VTdHlsZTsKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIEZvbnREZXNjcmlwdGlvbjsKSW5kZXg6IHBsYXRmb3JtL0ZvbnRGYWxsYmFja0xpc3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL0ZvbnRGYWxsYmFja0xpc3QuY3BwCShyZXZpc2lv
biAxNjE3MCkKKysrIHBsYXRmb3JtL0ZvbnRGYWxsYmFja0xpc3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNywxOSArMjcsMTUgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiRm9udC5oIgogI2luY2x1ZGUgIkZvbnRGYWxsYmFja0xpc3QuaCIKKworI2luY2x1ZGUgIkZv
bnQuaCIKICNpbmNsdWRlICJGb250Q2FjaGUuaCIKIAotbmFtZXNwYWNlIFdlYkNvcmUKLXsKK25h
bWVzcGFjZSBXZWJDb3JlIHsKIAogRm9udEZhbGxiYWNrTGlzdDo6Rm9udEZhbGxiYWNrTGlzdCgp
Ci06bV9mYW1pbHlJbmRleCgwKSwgbV9waXRjaChVbmtub3duUGl0Y2gpCi17Ci19Ci0KLUZvbnRG
YWxsYmFja0xpc3Q6On5Gb250RmFsbGJhY2tMaXN0KCkKKyAgICA6IG1fZmFtaWx5SW5kZXgoMCks
IG1fcGl0Y2goVW5rbm93blBpdGNoKQogewogfQogCkluZGV4OiBwbGF0Zm9ybS9Gb250RmFsbGJh
Y2tMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vRm9udEZhbGxiYWNrTGlzdC5oCShyZXZp
c2lvbiAxNjE3MCkKKysrIHBsYXRmb3JtL0ZvbnRGYWxsYmFja0xpc3QuaAkod29ya2luZyBjb3B5
KQpAQCAtMjQsMTcgKzI0LDE2IEBACiAvLyBUaGlzIGZpbGUgaGFzIG5vIGd1YXJkcyBvbiBwdXJw
b3NlIGluIG9yZGVyIHRvIGRldGVjdCByZWR1bmRhbnQgaW5jbHVkZXMuIFRoaXMgaXMgYSBwcml2
YXRlIGhlYWRlcgogLy8gYW5kIHNvIHRoaXMgc2hvdWxkIGNhdGNoIGFueW9uZSB0cnlpbmcgdG8g
aW5jbHVkZSB0aGlzIGZpbGUgaW4gcHVibGljIGNwcCBmaWxlcy4KIAorI2luY2x1ZGUgIkZvbnRE
YXRhLmgiCisjaW5jbHVkZSAiU2hhcmVkLmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+
CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPFNoYXJlZC5oPgotI2luY2x1ZGUg
IkZvbnREYXRhLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRm9udDsKIGNsYXNz
IEdyYXBoaWNzQ29udGV4dDsKIGNsYXNzIEludFJlY3Q7Ci1jbGFzcyBGb250RGF0YTsKIGNsYXNz
IEZvbnREZXNjcmlwdGlvbjsKIGNsYXNzIEZvbnRQbGF0Zm9ybURhdGE7CiAKQEAgLTQzLDcgKzQy
LDYgQEAgY29uc3QgaW50IGNBbGxGYW1pbGllc1NjYW5uZWQgPSAtMTsKIGNsYXNzIEZvbnRGYWxs
YmFja0xpc3QgOiBwdWJsaWMgU2hhcmVkPEZvbnRGYWxsYmFja0xpc3Q+LCBOb25jb3B5YWJsZSB7
CiBwdWJsaWM6CiAgICAgRm9udEZhbGxiYWNrTGlzdCgpOwotICAgIH5Gb250RmFsbGJhY2tMaXN0
KCk7CiAKICAgICB2b2lkIGludmFsaWRhdGUoKTsKICAgICAKSW5kZXg6IHBsYXRmb3JtL0ZvbnRG
YW1pbHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL0ZvbnRGYW1pbHkuY3BwCShyZXZpc2lv
biAxNjE3MCkKKysrIHBsYXRmb3JtL0ZvbnRGYW1pbHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCw0MyArMjgsMjAgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1Gb250RmFtaWx5OjpGb250
RmFtaWx5KCkKLSAgICA6IG1fbmV4dCgwKQotICAgICwgbV9yZWZDbnQoMCkKLXsKLX0KLQogRm9u
dEZhbWlseTo6Rm9udEZhbWlseShjb25zdCBGb250RmFtaWx5JiBvdGhlcikKLSAgICA6IG1fZmFt
aWx5KG90aGVyLm1fZmFtaWx5KQorICAgIDogU2hhcmVkPEZvbnRGYW1pbHk+KCkKKyAgICAsIG1f
ZmFtaWx5KG90aGVyLm1fZmFtaWx5KQogICAgICwgbV9uZXh0KG90aGVyLm1fbmV4dCkKLSAgICAs
IG1fcmVmQ250KDApCiB7Ci0gICAgaWYgKG1fbmV4dCkKLSAgICAgICAgbV9uZXh0LT5yZWYoKTsK
IH0KIAotRm9udEZhbWlseTo6fkZvbnRGYW1pbHkoKQoteyAKLSAgICBpZiAobV9uZXh0KQotICAg
ICAgICBtX25leHQtPmRlcmVmKCk7Ci19Ci0gICAKIEZvbnRGYW1pbHkmIEZvbnRGYW1pbHk6Om9w
ZXJhdG9yPShjb25zdCBGb250RmFtaWx5JiBvdGhlcikKIHsKLSAgICBpZiAob3RoZXIubV9uZXh0
KQotICAgICAgICBvdGhlci5tX25leHQtPnJlZigpOwotICAgIGlmIChtX25leHQpCi0gICAgICAg
IG1fbmV4dC0+ZGVyZWYoKTsKICAgICBtX2ZhbWlseSA9IG90aGVyLm1fZmFtaWx5OwogICAgIG1f
bmV4dCA9IG90aGVyLm1fbmV4dDsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKLXZvaWQgRm9udEZh
bWlseTo6c2V0RmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyAmZmFtaWx5KQotewotICAgIG1fZmFt
aWx5ID0gZmFtaWx5OwotfQotCiBib29sIEZvbnRGYW1pbHk6Om9wZXJhdG9yPT0oY29uc3QgRm9u
dEZhbWlseSAmY29tcGFyZUZvbnRGYW1pbHkpIGNvbnN0CiB7CiAgICAgaWYgKCghbV9uZXh0ICYm
IGNvbXBhcmVGb250RmFtaWx5Lm1fbmV4dCkgfHwgCkluZGV4OiBwbGF0Zm9ybS9Gb250RmFtaWx5
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vRm9udEZhbWlseS5oCShyZXZpc2lvbiAxNjE3MCkK
KysrIHBsYXRmb3JtL0ZvbnRGYW1pbHkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTI3LDUxICsyNywzMyBAQAogI2RlZmluZSBGT05UX0ZBTUlMWV9ICiAKICNpbmNsdWRl
ICJBdG9taWNTdHJpbmcuaCIKLQotI2lmIF9fQVBQTEVfXwotI2lmZGVmIF9fT0JKQ19fCi1AY2xh
c3MgTlNTdHJpbmc7Ci0jZWxzZQotY2xhc3MgTlNTdHJpbmc7Ci0jZW5kaWYKLSNlbmRpZgorI2lu
Y2x1ZGUgIlNoYXJlZC5oIgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1jbGFzcyBGb250RmFtaWx5IHsKK2NsYXNzIEZvbnRGYW1pbHkgOiBwdWJsaWMg
U2hhcmVkPEZvbnRGYW1pbHk+IHsKIHB1YmxpYzoKLSAgICBGb250RmFtaWx5KCk7Ci0gICAgfkZv
bnRGYW1pbHkoKTsKKyAgICBGb250RmFtaWx5KCkgeyB9CiAgICAgCi0gICAgRm9udEZhbWlseShj
b25zdCBGb250RmFtaWx5ICYpOyAgICAKLSAgICBGb250RmFtaWx5ICZvcGVyYXRvcj0oY29uc3Qg
Rm9udEZhbWlseSAmKTsKLSAgICAgICAgCi0gICAgdm9pZCBzZXRGYW1pbHkoY29uc3QgQXRvbWlj
U3RyaW5nICYpOworICAgIEZvbnRGYW1pbHkoY29uc3QgRm9udEZhbWlseSYpOyAgICAKKyAgICBG
b250RmFtaWx5JiBvcGVyYXRvcj0oY29uc3QgRm9udEZhbWlseSYpOworCisgICAgdm9pZCBzZXRG
YW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkpIHsgbV9mYW1pbHkgPSBmYW1pbHk7IH0K
ICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSgpIGNvbnN0IHsgcmV0dXJuIG1fZmFtaWx5
OyB9CiAgICAgYm9vbCBmYW1pbHlJc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9mYW1pbHkuaXNF
bXB0eSgpOyB9CiAKLSAgICBGb250RmFtaWx5ICpuZXh0KCkgeyByZXR1cm4gbV9uZXh0OyB9Ci0g
ICAgY29uc3QgRm9udEZhbWlseSAqbmV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fbmV4dDsgfQorICAg
IEZvbnRGYW1pbHkqIG5leHQoKSB7IHJldHVybiBtX25leHQuZ2V0KCk7IH0KKyAgICBjb25zdCBG
b250RmFtaWx5KiBuZXh0KCkgY29uc3QgeyByZXR1cm4gbV9uZXh0LmdldCgpOyB9CiAKLSAgICB2
b2lkIGFwcGVuZEZhbWlseShGb250RmFtaWx5ICpmYW1pbHkpIAotICAgIHsKLSAgICAgICAgaWYg
KGZhbWlseSkKLSAgICAgICAgICAgIGZhbWlseS0+cmVmKCk7Ci0gICAgICAgIGlmIChtX25leHQp
IAotICAgICAgICAgICAgbV9uZXh0LT5kZXJlZigpOyAKLSAgICAgICAgbV9uZXh0ID0gZmFtaWx5
OyAKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnRGYW1pbHkgJikg
Y29uc3Q7Ci0gICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZvbnRGYW1pbHkgJngpIGNvbnN0IHsg
cmV0dXJuICEoKnRoaXMgPT0geCk7IH0KLSAgICAKLSAgICB2b2lkIHJlZigpIHsgbV9yZWZDbnQr
KzsgfQotICAgIHZvaWQgZGVyZWYoKSB7IG1fcmVmQ250LS07IGlmIChtX3JlZkNudCA9PSAwKSBk
ZWxldGUgdGhpczsgfQorICAgIHZvaWQgYXBwZW5kRmFtaWx5KFBhc3NSZWZQdHI8Rm9udEZhbWls
eT4gZmFtaWx5KSB7IG1fbmV4dCA9IGZhbWlseTsgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IEZvbnRGYW1pbHkmKSBjb25zdDsKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgRm9udEZh
bWlseSYgeCkgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSB4KTsgfQogICAgIAogcHJpdmF0ZToK
ICAgICBBdG9taWNTdHJpbmcgbV9mYW1pbHk7Ci0gICAgRm9udEZhbWlseSogbV9uZXh0OwotICAg
IGludCBtX3JlZkNudDsKKyAgICBSZWZQdHI8Rm9udEZhbWlseT4gbV9uZXh0OwogfTsKIAogfQpJ
bmRleDogcGxhdGZvcm0vR2x5cGhCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9HbHlw
aEJ1ZmZlci5oCShyZXZpc2lvbiAxNjE3MCkKKysrIHBsYXRmb3JtL0dseXBoQnVmZmVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI5LDExICsyOSw2IEBACiAjaWZuZGVmIEdMWVBIX0JVRkZFUl9ICiAj
ZGVmaW5lIEdMWVBIX0JVRkZFUl9ICiAKLS8vIE1BWF9HTFlQSF9FWFBBTlNJT04gaXMgdGhlIG1h
eGltdW0gbnVtYmVycyBvZiBnbHlwaHMgdGhhdCBtYXkgYmUKLS8vIHVzZSB0byByZXByZXNlbnQg
YSBzaW5nbGUgVW5pY29kZSBjb2RlIHBvaW50LgotI2RlZmluZSBNQVhfR0xZUEhfRVhQQU5TSU9O
IDQKLSNkZWZpbmUgR0xZUEhfQlVGRkVSX1NJWkUgMjA0OAotCiAjaWYgUExBVEZPUk0oQ0cpCiAj
aW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CiAjZWxp
ZiBQTEFURk9STShDQUlSTykKQEAgLTQ1LDggKzQwLDggQEAKIAogI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KIAotbmFtZXNwYWNlIFdlYkNvcmUKLXsKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwogdHlw
ZWRlZiB1bnNpZ25lZCBzaG9ydCBHbHlwaDsKIGNsYXNzIEZvbnREYXRhOwogCkBAIC02MSwxMSAr
NTYsOCBAQCB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IEdseXBoQnVmZmVyR2x5cGg7CiB0eXBlZGVm
IEZsb2F0U2l6ZSBHbHlwaEJ1ZmZlckFkdmFuY2U7CiAjZW5kaWYKIAotY2xhc3MgR2x5cGhCdWZm
ZXIKLXsKK2NsYXNzIEdseXBoQnVmZmVyIHsKIHB1YmxpYzoKLSAgICBHbHlwaEJ1ZmZlcigpIHt9
OwotICAgIAogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERhdGEuaXNF
bXB0eSgpOyB9CiAgICAgaW50IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2ZvbnREYXRhLnNpemUo
KTsgfQogICAgIApAQCAtNzYsOCArNjgsMTAgQEAgcHVibGljOgogICAgICAgICBtX2FkdmFuY2Vz
LmNsZWFyKCk7CiAgICAgfQogCi0gICAgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzKGludCBmcm9t
KSBjb25zdCB7IHJldHVybiAoKEdseXBoQnVmZmVyR2x5cGgqKW1fZ2x5cGhzLmRhdGEoKSkgKyBm
cm9tOyB9Ci0gICAgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcyhpbnQgZnJvbSkgY29uc3Qg
eyByZXR1cm4gKChHbHlwaEJ1ZmZlckFkdmFuY2UqKW1fYWR2YW5jZXMuZGF0YSgpKSArIGZyb207
IH0KKyAgICBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMoaW50IGZyb20pIHsgcmV0dXJuIG1fZ2x5
cGhzLmRhdGEoKSArIGZyb207IH0KKyAgICBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzKGlu
dCBmcm9tKSB7IHJldHVybiBtX2FkdmFuY2VzLmRhdGEoKSArIGZyb207IH0KKyAgICBjb25zdCBH
bHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMoaW50IGZyb20pIGNvbnN0IHsgcmV0dXJuIG1fZ2x5cGhz
LmRhdGEoKSArIGZyb207IH0KKyAgICBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2Vz
KGludCBmcm9tKSBjb25zdCB7IHJldHVybiBtX2FkdmFuY2VzLmRhdGEoKSArIGZyb207IH0KIAog
ICAgIGNvbnN0IEZvbnREYXRhKiBmb250RGF0YUF0KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4g
bV9mb250RGF0YVtpbmRleF07IH0KICAgICAKQEAgLTEzNiw5ICsxMzAsOSBAQCBwdWJsaWM6CiAg
ICAgfQogICAgIAogcHJpdmF0ZToKLSAgICBWZWN0b3I8Y29uc3QgRm9udERhdGEqLCBHTFlQSF9C
VUZGRVJfU0laRT4gbV9mb250RGF0YTsKLSAgICBWZWN0b3I8R2x5cGhCdWZmZXJHbHlwaCwgR0xZ
UEhfQlVGRkVSX1NJWkU+IG1fZ2x5cGhzOwotICAgIFZlY3RvcjxHbHlwaEJ1ZmZlckFkdmFuY2Us
IEdMWVBIX0JVRkZFUl9TSVpFPiBtX2FkdmFuY2VzOworICAgIFZlY3Rvcjxjb25zdCBGb250RGF0
YSosIDIwNDg+IG1fZm9udERhdGE7CisgICAgVmVjdG9yPEdseXBoQnVmZmVyR2x5cGgsIDIwNDg+
IG1fZ2x5cGhzOworICAgIFZlY3RvcjxHbHlwaEJ1ZmZlckFkdmFuY2UsIDIwNDg+IG1fYWR2YW5j
ZXM7CiB9OwogCiB9CkluZGV4OiBwbGF0Zm9ybS9HbHlwaE1hcC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
cGxhdGZvcm0vR2x5cGhNYXAuY3BwCShyZXZpc2lvbiAxNjE3MCkKKysrIHBsYXRmb3JtL0dseXBo
TWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTkgKzI4LDE4IEBACiAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJHbHlwaE1hcC5oIgotI2luY2x1ZGUgIkZvbnREYXRhLmgiCiAK
KyNpbmNsdWRlICJGb250RGF0YS5oIgogI2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIuaD4KIAotI2Rl
ZmluZSBOT19CUkVBS19TUEFDRSAweDAwQTAKLSNkZWZpbmUgWkVST19XSURUSF9TUEFDRSAweDIw
MEIKK25hbWVzcGFjZSBXZWJDb3JlIHsKIAotbmFtZXNwYWNlIFdlYkNvcmUKLXsKK2NvbnN0IFVD
aGFyIG5vbkJyZWFraW5nU3BhY2UgPSAweDAwQTA7Citjb25zdCBVQ2hhciB6ZXJvV2lkdGhTcGFj
ZSA9IDB4MjAwQjsKIAogR2x5cGhEYXRhIEdseXBoTWFwOjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIo
VUNoYXIzMiBjLCBjb25zdCBGb250RGF0YSogZm9udERhdGEpCiB7Ci0gICAgdW5zaWduZWQgcGFn
ZU51bWJlciA9IChjIC8gY0dseXBoUGFnZVNpemUpOworICAgIHVuc2lnbmVkIHBhZ2VOdW1iZXIg
PSAoYyAvIEdseXBoUGFnZTo6c2l6ZSk7CiAgICAgR2x5cGhQYWdlKiBwYWdlID0gbG9jYXRlUGFn
ZShwYWdlTnVtYmVyLCBmb250RGF0YSk7CiAgICAgaWYgKHBhZ2UpCiAgICAgICAgIHJldHVybiBw
YWdlLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYyk7CkBAIC01MCw3ICs0OSw3IEBAIEdseXBoRGF0
YSBHbHlwaE1hcDo6Z2x5cGhEYXRhRm9yQ2hhcmFjdGUKIAogdm9pZCBHbHlwaE1hcDo6c2V0R2x5
cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYywgR2x5cGggZ2x5cGgsIGNvbnN0IEZvbnREYXRh
KiBmb250RGF0YSkKIHsKLSAgICB1bnNpZ25lZCBwYWdlTnVtYmVyID0gKGMgLyBjR2x5cGhQYWdl
U2l6ZSk7CisgICAgdW5zaWduZWQgcGFnZU51bWJlciA9IChjIC8gR2x5cGhQYWdlOjpzaXplKTsK
ICAgICBHbHlwaFBhZ2UqIHBhZ2UgPSBsb2NhdGVQYWdlKHBhZ2VOdW1iZXIsIGZvbnREYXRhKTsK
ICAgICBpZiAocGFnZSkKICAgICAgICAgcGFnZS0+c2V0R2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMs
IGdseXBoLCBmb250RGF0YSk7CkBAIC03MiwzMiArNzEsMzIgQEAgaW5saW5lIEdseXBoTWFwOjpH
bHlwaFBhZ2UqIEdseXBoTWFwOjpsbwogICAgICAgICBwYWdlID0gbmV3IEdseXBoUGFnZTsKICAg
ICB9CiAgICAgICAKLSAgICB1bnNpZ25lZCBzdGFydCA9IHBhZ2VOdW1iZXIgKiBjR2x5cGhQYWdl
U2l6ZTsKLSAgICBVQ2hhciBidWZmZXJbY0dseXBoUGFnZVNpemUgKiAyICsgMl07CisgICAgdW5z
aWduZWQgc3RhcnQgPSBwYWdlTnVtYmVyICogR2x5cGhQYWdlOjpzaXplOworICAgIFVDaGFyIGJ1
ZmZlcltHbHlwaFBhZ2U6OnNpemUgKiAyICsgMl07CiAgICAgdW5zaWduZWQgYnVmZmVyTGVuZ3Ro
OwogICAgIHVuc2lnbmVkIGk7CiAKICAgICAvLyBGaWxsIGluIGEgYnVmZmVyIHdpdGggdGhlIGVu
dGlyZSAicGFnZSIgb2YgY2hhcmFjdGVycyB0aGF0IHdlIHdhbnQgdG8gbG9vayB1cCBnbHlwaHMg
Zm9yLgogICAgIGlmIChzdGFydCA8IDB4MTAwMDApIHsKLSAgICAgICAgYnVmZmVyTGVuZ3RoID0g
Y0dseXBoUGFnZVNpemU7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBjR2x5cGhQYWdlU2l6ZTsg
aSsrKQorICAgICAgICBidWZmZXJMZW5ndGggPSBHbHlwaFBhZ2U6OnNpemU7CisgICAgICAgIGZv
ciAoaSA9IDA7IGkgPCBHbHlwaFBhZ2U6OnNpemU7IGkrKykKICAgICAgICAgICAgIGJ1ZmZlcltp
XSA9IHN0YXJ0ICsgaTsKIAogICAgICAgICBpZiAoc3RhcnQgPT0gMCkgewogICAgICAgICAgICAg
Ly8gQ29udHJvbCBjaGFyYWN0ZXJzIG11c3Qgbm90IHJlbmRlciBhdCBhbGwuCiAgICAgICAgICAg
ICBmb3IgKGkgPSAwOyBpIDwgMHgyMDsgKytpKQotICAgICAgICAgICAgICAgIGJ1ZmZlcltpXSA9
IFpFUk9fV0lEVEhfU1BBQ0U7CisgICAgICAgICAgICAgICAgYnVmZmVyW2ldID0gemVyb1dpZHRo
U3BhY2U7CiAgICAgICAgICAgICBmb3IgKGkgPSAweDdGOyBpIDwgMHhBMDsgaSsrKQotICAgICAg
ICAgICAgICAgIGJ1ZmZlcltpXSA9IFpFUk9fV0lEVEhfU1BBQ0U7CisgICAgICAgICAgICAgICAg
YnVmZmVyW2ldID0gemVyb1dpZHRoU3BhY2U7CiAKICAgICAgICAgICAgIC8vIFxuLCBcdCwgYW5k
IG5vbmJyZWFraW5nIHNwYWNlIG11c3QgcmVuZGVyIGFzIGEgc3BhY2UuCiAgICAgICAgICAgICBi
dWZmZXJbKGludCknXG4nXSA9ICcgJzsKICAgICAgICAgICAgIGJ1ZmZlclsoaW50KSdcdCddID0g
JyAnOwotICAgICAgICAgICAgYnVmZmVyW05PX0JSRUFLX1NQQUNFXSA9ICcgJzsKKyAgICAgICAg
ICAgIGJ1ZmZlcltub25CcmVha2luZ1NwYWNlXSA9ICcgJzsKICAgICAgICAgfQogICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGJ1ZmZlckxlbmd0aCA9IGNHbHlwaFBhZ2VTaXplICogMjsKLSAgICAgICAg
Zm9yIChpID0gMDsgaSA8IGNHbHlwaFBhZ2VTaXplOyBpKyspIHsKKyAgICAgICAgYnVmZmVyTGVu
Z3RoID0gR2x5cGhQYWdlOjpzaXplICogMjsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IEdseXBo
UGFnZTo6c2l6ZTsgaSsrKSB7CiAgICAgICAgICAgICBpbnQgYyA9IGkgKyBzdGFydDsKICAgICAg
ICAgICAgIGJ1ZmZlcltpICogMl0gPSBVMTZfTEVBRChjKTsKICAgICAgICAgICAgIGJ1ZmZlcltp
ICogMiArIDFdID0gVTE2X1RSQUlMKGMpOwpJbmRleDogcGxhdGZvcm0vR2x5cGhNYXAuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBwbGF0Zm9ybS9HbHlwaE1hcC5oCShyZXZpc2lvbiAxNjE3MCkKKysrIHBsYXRm
b3JtL0dseXBoTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDU1ICszMCw1MyBAQAogI2RlZmlu
ZSBHTFlQSF9NQVBfSAogCiAjaW5jbHVkZSA8dW5pY29kZS91bWFjaGluZS5oPgotI2luY2x1ZGUg
IkdseXBoQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBDb3ZlcnMgTGF0aW4t
MS4KLWNvbnN0IHVuc2lnbmVkIGNHbHlwaFBhZ2VTaXplID0gMjU2OwotCiBjbGFzcyBGb250RGF0
YTsKIAotc3RydWN0IEdseXBoRGF0YQoteyAgICAKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgR2x5
cGg7CisKK3N0cnVjdCBHbHlwaERhdGEgeyAgICAKICAgICBHbHlwaCBnbHlwaDsKICAgICBjb25z
dCBGb250RGF0YSogZm9udERhdGE7CiB9OwogCi1jbGFzcyBHbHlwaE1hcCA6IE5vbmNvcHlhYmxl
Ci17CitjbGFzcyBHbHlwaE1hcCA6IE5vbmNvcHlhYmxlIHsKIHB1YmxpYzoKICAgICBHbHlwaE1h
cCgpIDogbV9maWxsZWRQcmltYXJ5UGFnZShmYWxzZSksIG1fcGFnZXMoMCkge30KICAgICB+R2x5
cGhNYXAoKSB7IGlmIChtX3BhZ2VzKSB7IGRlbGV0ZUFsbFZhbHVlcygqbV9wYWdlcyk7IGRlbGV0
ZSBtX3BhZ2VzOyB9IH0KIAogICAgIEdseXBoRGF0YSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNo
YXIzMiwgY29uc3QgRm9udERhdGEqKTsKICAgICB2b2lkIHNldEdseXBoRGF0YUZvckNoYXJhY3Rl
cihVQ2hhcjMyLCBHbHlwaCwgY29uc3QgRm9udERhdGEqKTsKLSAgICAKKwogcHJpdmF0ZToKICAg
ICBzdHJ1Y3QgR2x5cGhQYWdlIHsKLSAgICAgICAgR2x5cGhEYXRhIG1fZ2x5cGhzW2NHbHlwaFBh
Z2VTaXplXTsKKyAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBzaXplID0gMjU2OyAvLyBDb3Zl
cnMgTGF0aW4tMSBpbiBhIHNpbmdsZSBwYWdlLgorICAgICAgICBHbHlwaERhdGEgbV9nbHlwaHNb
c2l6ZV07CiAKLSAgICAgICAgY29uc3QgR2x5cGhEYXRhJiBnbHlwaERhdGFGb3JDaGFyYWN0ZXIo
VUNoYXIzMiBjKSBjb25zdCB7IHJldHVybiBtX2dseXBoc1tjICUgY0dseXBoUGFnZVNpemVdOyB9
CisgICAgICAgIGNvbnN0IEdseXBoRGF0YSYgZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIg
YykgY29uc3QgeyByZXR1cm4gbV9nbHlwaHNbYyAlIHNpemVdOyB9CiAgICAgICAgIHZvaWQgc2V0
R2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYywgR2x5cGggZywgY29uc3QgRm9udERhdGEq
IGYpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHNldEdseXBoRGF0YUZvckluZGV4KGMgJSBjR2x5
cGhQYWdlU2l6ZSwgZywgZik7CisgICAgICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChjICUg
c2l6ZSwgZywgZik7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHZvaWQgc2V0R2x5cGhE
YXRhRm9ySW5kZXgodW5zaWduZWQgaW5kZXgsIEdseXBoIGcsIGNvbnN0IEZvbnREYXRhKiBmKSB7
CisgICAgICAgIHZvaWQgc2V0R2x5cGhEYXRhRm9ySW5kZXgodW5zaWduZWQgaW5kZXgsIEdseXBo
IGcsIGNvbnN0IEZvbnREYXRhKiBmKQorICAgICAgICB7CiAgICAgICAgICAgICBtX2dseXBoc1tp
bmRleF0uZ2x5cGggPSBnOwogICAgICAgICAgICAgbV9nbHlwaHNbaW5kZXhdLmZvbnREYXRhID0g
ZjsKICAgICAgICAgfQogICAgIH07Ci0gICAgCisKICAgICBHbHlwaFBhZ2UqIGxvY2F0ZVBhZ2Uo
dW5zaWduZWQgcGFnZSwgY29uc3QgRm9udERhdGEqIGZvbnREYXRhKTsKICAgICBib29sIGZpbGxQ
YWdlKEdseXBoUGFnZSosIFVDaGFyKiBjaGFyYWN0ZXJCdWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxl
bmd0aCwgY29uc3QgRm9udERhdGEqIGZvbnREYXRhKTsKLSAgICAKKwogICAgIGJvb2wgbV9maWxs
ZWRQcmltYXJ5UGFnZTsKLSAgICBHbHlwaFBhZ2UgbV9wcmltYXJ5UGFnZTsgLy8gV2Ugb3B0aW1p
emUgZm9yIHRoZSBwYWdlIHRoYXQgY29udGFpbnMgTGF0aW4xLgorICAgIEdseXBoUGFnZSBtX3By
aW1hcnlQYWdlOyAvLyBXZSBvcHRpbWl6ZSBmb3IgdGhlIHBhZ2UgdGhhdCBjb250YWlucyBMYXRp
bi0xLgogICAgIEhhc2hNYXA8aW50LCBHbHlwaFBhZ2UqPiogbV9wYWdlczsKIH07CiAKIH0KKwog
I2VuZGlmCkluZGV4OiBwbGF0Zm9ybS9HbHlwaFdpZHRoTWFwLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBw
bGF0Zm9ybS9HbHlwaFdpZHRoTWFwLmNwcAkocmV2aXNpb24gMTYxNzApCisrKyBwbGF0Zm9ybS9H
bHlwaFdpZHRoTWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZQogCiBmbG9hdCBHbHlwaFdpZHRoTWFwOjp3aWR0aEZvckdseXBoKEdseXBoIGcp
CiB7Ci0gICAgdW5zaWduZWQgcGFnZU51bWJlciA9IChnIC8gY0dseXBoV2lkdGhQYWdlU2l6ZSk7
CisgICAgdW5zaWduZWQgcGFnZU51bWJlciA9IChnIC8gR2x5cGhXaWR0aFBhZ2U6OnNpemUpOwog
ICAgIEdseXBoV2lkdGhQYWdlKiBwYWdlID0gbG9jYXRlUGFnZShwYWdlTnVtYmVyKTsKICAgICBp
ZiAocGFnZSkKICAgICAgICAgcmV0dXJuIHBhZ2UtPndpZHRoRm9yR2x5cGgoZyk7CkBAIC00Myw3
ICs0Myw3IEBAIGZsb2F0IEdseXBoV2lkdGhNYXA6OndpZHRoRm9yR2x5cGgoR2x5cGgKIAogdm9p
ZCBHbHlwaFdpZHRoTWFwOjpzZXRXaWR0aEZvckdseXBoKEdseXBoIGdseXBoLCBmbG9hdCB3aWR0
aCkKIHsKLSAgICB1bnNpZ25lZCBwYWdlTnVtYmVyID0gKGdseXBoIC8gY0dseXBoV2lkdGhQYWdl
U2l6ZSk7CisgICAgdW5zaWduZWQgcGFnZU51bWJlciA9IChnbHlwaCAvIEdseXBoV2lkdGhQYWdl
OjpzaXplKTsKICAgICBHbHlwaFdpZHRoUGFnZSogcGFnZSA9IGxvY2F0ZVBhZ2UocGFnZU51bWJl
cik7CiAgICAgaWYgKHBhZ2UpCiAgICAgICAgIHBhZ2UtPnNldFdpZHRoRm9yR2x5cGgoZ2x5cGgs
IHdpZHRoKTsKQEAgLTcwLDcgKzcwLDcgQEAgaW5saW5lIEdseXBoV2lkdGhNYXA6OkdseXBoV2lk
dGhQYWdlKiBHbAogICAgIH0KIAogICAgIC8vIEZpbGwgaW4gdGhlIHdob2xlIHBhZ2Ugd2l0aCB0
aGUgdW5rbm93biBnbHlwaCB3aWR0aCB2YWx1ZS4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgY0dseXBoV2lkdGhQYWdlU2l6ZTsgaSsrKQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBHbHlwaFdpZHRoUGFnZTo6c2l6ZTsgaSsrKQogICAgICAgICBwYWdlLT5zZXRXaWR0aEZvcklu
ZGV4KGksIGNHbHlwaFdpZHRoVW5rbm93bik7CiAKICAgICByZXR1cm4gcGFnZTsKSW5kZXg6IHBs
YXRmb3JtL0dseXBoV2lkdGhNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9HbHlwaFdpZHRo
TWFwLmgJKHJldmlzaW9uIDE2MTcwKQorKysgcGxhdGZvcm0vR2x5cGhXaWR0aE1hcC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCwzOSArMzAsMzYgQEAKICNkZWZpbmUgR0xZUEhfV0lEVEhfTUFQX0gK
IAogI2luY2x1ZGUgPHVuaWNvZGUvdW1hY2hpbmUuaD4KLSNpbmNsdWRlICJHbHlwaEJ1ZmZlci5o
IgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotLy8gQ292ZXJzIExhdGluLTEuCi1jb25zdCB1bnNp
Z25lZCBjR2x5cGhXaWR0aFBhZ2VTaXplID0gMjU2OwotY29uc3QgZmxvYXQgY0dseXBoV2lkdGhV
bmtub3duID0gLTE7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IEdseXBoOwogCi1jbGFzcyBGb250
RGF0YTsKK2NvbnN0IGZsb2F0IGNHbHlwaFdpZHRoVW5rbm93biA9IC0xOwogCi1jbGFzcyBHbHlw
aFdpZHRoTWFwIDogTm9uY29weWFibGUKLXsKK2NsYXNzIEdseXBoV2lkdGhNYXAgOiBOb25jb3B5
YWJsZSB7CiBwdWJsaWM6CiAgICAgR2x5cGhXaWR0aE1hcCgpIDogbV9maWxsZWRQcmltYXJ5UGFn
ZShmYWxzZSksIG1fcGFnZXMoMCkge30KICAgICB+R2x5cGhXaWR0aE1hcCgpIHsgaWYgKG1fcGFn
ZXMpIHsgZGVsZXRlQWxsVmFsdWVzKCptX3BhZ2VzKTsgZGVsZXRlIG1fcGFnZXM7IH0gfQogCi0g
ICAgZmxvYXQgd2lkdGhGb3JHbHlwaChHbHlwaCBnKTsKLSAgICB2b2lkIHNldFdpZHRoRm9yR2x5
cGgoR2x5cGggZywgZmxvYXQgZik7CisgICAgZmxvYXQgd2lkdGhGb3JHbHlwaChHbHlwaCk7Cisg
ICAgdm9pZCBzZXRXaWR0aEZvckdseXBoKEdseXBoLCBmbG9hdCk7CiAKIHByaXZhdGU6CiAgICAg
c3RydWN0IEdseXBoV2lkdGhQYWdlIHsKLSAgICAgICAgZmxvYXQgbV93aWR0aHNbY0dseXBoV2lk
dGhQYWdlU2l6ZV07CisgICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc2l6ZSA9IDI1NjsgLy8g
VXN1YWxseSBjb3ZlcnMgTGF0aW4tMSBpbiBhIHNpbmdsZSBwYWdlLgorICAgICAgICBmbG9hdCBt
X3dpZHRoc1tzaXplXTsKIAotICAgICAgICBmbG9hdCB3aWR0aEZvckdseXBoKEdseXBoIGcpIGNv
bnN0IHsgcmV0dXJuIG1fd2lkdGhzW2cgJSBjR2x5cGhXaWR0aFBhZ2VTaXplXTsgfQotICAgICAg
ICB2b2lkIHNldFdpZHRoRm9yR2x5cGgoR2x5cGggZywgZmxvYXQgZikKKyAgICAgICAgZmxvYXQg
d2lkdGhGb3JHbHlwaChHbHlwaCBnKSBjb25zdCB7IHJldHVybiBtX3dpZHRoc1tnICUgc2l6ZV07
IH0KKyAgICAgICAgdm9pZCBzZXRXaWR0aEZvckdseXBoKEdseXBoIGcsIGZsb2F0IHcpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIHNldFdpZHRoRm9ySW5kZXgoZyAlIGNHbHlwaFdpZHRoUGFnZVNp
emUsIGYpOworICAgICAgICAgICAgc2V0V2lkdGhGb3JJbmRleChnICUgc2l6ZSwgdyk7CiAgICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIHZvaWQgc2V0V2lkdGhGb3JJbmRleCh1bnNpZ25lZCBp
bmRleCwgZmxvYXQgZikgewotICAgICAgICAgICAgbV93aWR0aHNbaW5kZXhdID0gZjsKKyAgICAg
ICAgdm9pZCBzZXRXaWR0aEZvckluZGV4KHVuc2lnbmVkIGluZGV4LCBmbG9hdCB3KQorICAgICAg
ICB7CisgICAgICAgICAgICBtX3dpZHRoc1tpbmRleF0gPSB3OwogICAgICAgICB9CiAgICAgfTsK
ICAgICAKSW5kZXg6IHBsYXRmb3JtL0dyYXBoaWNzQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
cGxhdGZvcm0vR3JhcGhpY3NDb250ZXh0LmNwcAkocmV2aXNpb24gMTYxNzApCisrKyBwbGF0Zm9y
bS9HcmFwaGljc0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAK
ICNpbmNsdWRlICJEZXByZWNhdGVkU3RyaW5nLmgiCiAjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1
ZGUgIlRleHRTdHlsZS5oIgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCkBAIC0xODAsNiArMTgx
LDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UoSW1hZ2UqIGkKICAgICBkcmF3
SW1hZ2UoaW1hZ2UsIEZsb2F0UmVjdChkZXN0KSwgc3JjUmVjdCwgb3ApOwogfQogCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd1RleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBJbnRQb2lu
dCYgcG9pbnQpCit7CisgICAgZHJhd1RleHQocnVuLCBwb2ludCwgVGV4dFN0eWxlKCkpOworfQor
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBjb25z
dCBJbnRQb2ludCYgcG9pbnQsIGNvbnN0IFRleHRTdHlsZSYgc3R5bGUpCiB7CiAgICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKSW5kZXg6IHBsYXRmb3JtL0dyYXBoaWNzQ29udGV4dC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIHBsYXRmb3JtL0dyYXBoaWNzQ29udGV4dC5oCShyZXZpc2lvbiAxNjE3MCkKKysr
IHBsYXRmb3JtL0dyYXBoaWNzQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw2
IEBACiAjZGVmaW5lIEdyYXBoaWNzQ29udGV4dF9oCiAKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
LSNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJJbnRSZWN0
LmgiCiAjaW5jbHVkZSAiUGVuLmgiCkBAIC02Myw2ICs2Miw4IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICBjbGFzcyBHcmFwaGljc0NvbnRleHRQcml2YXRlOwogICAgIGNsYXNzIEdyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZTsKICAgICBjbGFzcyBQYXRoOworICAgIGNsYXNzIFRleHRS
dW47CisgICAgY2xhc3MgVGV4dFN0eWxlOwogCiAjaWZkZWYgU1ZHX1NVUFBPUlQKICAgICBjbGFz
cyBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dDsKQEAgLTEyMCw3ICsxMjEsOCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIHZvaWQgc2V0Rm9jdXNSaW5nQ2xpcChjb25zdCBJbnRSZWN0Jik7
CiAgICAgICAgIHZvaWQgY2xlYXJGb2N1c1JpbmdDbGlwKCk7CiAKLSAgICAgICAgdm9pZCBkcmF3
VGV4dChjb25zdCBUZXh0UnVuJiwgY29uc3QgSW50UG9pbnQmLCBjb25zdCBUZXh0U3R5bGUmID0g
VGV4dFN0eWxlKCkpOworICAgICAgICB2b2lkIGRyYXdUZXh0KGNvbnN0IFRleHRSdW4mLCBjb25z
dCBJbnRQb2ludCYpOworICAgICAgICB2b2lkIGRyYXdUZXh0KGNvbnN0IFRleHRSdW4mLCBjb25z
dCBJbnRQb2ludCYsIGNvbnN0IFRleHRTdHlsZSYpOwogICAgICAgICB2b2lkIGRyYXdIaWdobGln
aHRGb3JUZXh0KGNvbnN0IFRleHRSdW4mLCBjb25zdCBJbnRQb2ludCYsIGludCBoLCBjb25zdCBU
ZXh0U3R5bGUmLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKTsKIAogICAgICAgICBGbG9h
dFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmKTsKSW5kZXg6IHBsYXRm
b3JtL0ltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vSW1hZ2UuaAkocmV2aXNpb24gMTYx
NzApCisrKyBwbGF0Zm9ybS9JbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw2IEBA
IGNsYXNzIEZsb2F0UG9pbnQ7CiBjbGFzcyBGbG9hdFJlY3Q7CiBjbGFzcyBHcmFwaGljc0NvbnRl
eHQ7CiBjbGFzcyBJbnRSZWN0OwotY2xhc3MgSW50U2l6ZTsKIGNsYXNzIFBERkRvY3VtZW50SW1h
Z2U7CiBjbGFzcyBTdHJpbmc7CiAKSW5kZXg6IHBsYXRmb3JtL1RleHRTdHlsZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIHBsYXRmb3JtL1RleHRTdHlsZS5oCShyZXZpc2lvbiAwKQorKysgcGxhdGZvcm0vVGV4
dFN0eWxlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1B
IDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBUZXh0U3R5bGVfaAorI2RlZmlu
ZSBUZXh0U3R5bGVfaAorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFRleHRTdHlsZSB7
CitwdWJsaWM6CisgICAgVGV4dFN0eWxlKGludCB0YWJXaWR0aCA9IDAsIGludCB4cG9zID0gMCwg
aW50IHBhZGRpbmcgPSAwLCBib29sIHJ0bCA9IGZhbHNlLCBib29sIGRpcmVjdGlvbmFsT3ZlcnJp
ZGUgPSBmYWxzZSwKKyAgICAgICAgICAgICAgYm9vbCBhcHBseVJ1blJvdW5kaW5nID0gdHJ1ZSwg
Ym9vbCBhcHBseVdvcmRSb3VuZGluZyA9IHRydWUsIGJvb2wgYXR0ZW1wdEZvbnRTdWJzdGl0dXRp
b24gPSB0cnVlKQorICAgICAgICA6IG1fdGFiV2lkdGgodGFiV2lkdGgpCisgICAgICAgICwgbV94
cG9zKHhwb3MpCisgICAgICAgICwgbV9wYWRkaW5nKHBhZGRpbmcpCisgICAgICAgICwgbV9ydGwo
cnRsKQorICAgICAgICAsIG1fZGlyZWN0aW9uYWxPdmVycmlkZShkaXJlY3Rpb25hbE92ZXJyaWRl
KQorICAgICAgICAsIG1fYXBwbHlSdW5Sb3VuZGluZyhhcHBseVJ1blJvdW5kaW5nKQorICAgICAg
ICAsIG1fYXBwbHlXb3JkUm91bmRpbmcoYXBwbHlXb3JkUm91bmRpbmcpCisgICAgICAgICwgbV9h
dHRlbXB0Rm9udFN1YnN0aXR1dGlvbihhdHRlbXB0Rm9udFN1YnN0aXR1dGlvbikKKyAgICB7Cisg
ICAgfQorCisgICAgaW50IHRhYldpZHRoKCkgY29uc3QgeyByZXR1cm4gbV90YWJXaWR0aDsgfQor
ICAgIGludCB4UG9zKCkgY29uc3QgeyByZXR1cm4gbV94cG9zOyB9CisgICAgaW50IHBhZGRpbmco
KSBjb25zdCB7IHJldHVybiBtX3BhZGRpbmc7IH0KKyAgICBib29sIHJ0bCgpIGNvbnN0IHsgcmV0
dXJuIG1fcnRsOyB9CisgICAgYm9vbCBsdHIoKSBjb25zdCB7IHJldHVybiAhbV9ydGw7IH0KKyAg
ICBib29sIGRpcmVjdGlvbmFsT3ZlcnJpZGUoKSBjb25zdCB7IHJldHVybiBtX2RpcmVjdGlvbmFs
T3ZlcnJpZGU7IH0KKyAgICBib29sIGFwcGx5UnVuUm91bmRpbmcoKSBjb25zdCB7IHJldHVybiBt
X2FwcGx5UnVuUm91bmRpbmc7IH0KKyAgICBib29sIGFwcGx5V29yZFJvdW5kaW5nKCkgY29uc3Qg
eyByZXR1cm4gbV9hcHBseVdvcmRSb3VuZGluZzsgfQorICAgIGJvb2wgYXR0ZW1wdEZvbnRTdWJz
dGl0dXRpb24oKSBjb25zdCB7IHJldHVybiBtX2F0dGVtcHRGb250U3Vic3RpdHV0aW9uOyB9CisK
KyAgICB2b2lkIGRpc2FibGVSb3VuZGluZ0hhY2tzKCkgeyBtX2FwcGx5UnVuUm91bmRpbmcgPSBt
X2FwcGx5V29yZFJvdW5kaW5nID0gZmFsc2U7IH0KKyAgICB2b2lkIHNldFJUTChib29sIGIpIHsg
bV9ydGwgPSBiOyB9CisgICAgCitwcml2YXRlOgorICAgIGludCBtX3RhYldpZHRoOworICAgIGlu
dCBtX3hwb3M7CisgICAgaW50IG1fcGFkZGluZzsKKyAgICBib29sIG1fcnRsOworICAgIGJvb2wg
bV9kaXJlY3Rpb25hbE92ZXJyaWRlOworICAgIGJvb2wgbV9hcHBseVJ1blJvdW5kaW5nOworICAg
IGJvb2wgbV9hcHBseVdvcmRSb3VuZGluZzsKKyAgICBib29sIG1fYXR0ZW1wdEZvbnRTdWJzdGl0
dXRpb247Cit9OworCit9CisKKyNlbmRpZgoKUHJvcGVydHkgY2hhbmdlcyBvbjogcGxhdGZvcm0v
VGV4dFN0eWxlLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJ
bmRleDogcGxhdGZvcm0vbWFjL0ZvbnRDYWNoZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9y
bS9tYWMvRm9udENhY2hlTWFjLm1tCShyZXZpc2lvbiAxNjE3MCkKKysrIHBsYXRmb3JtL21hYy9G
b250Q2FjaGVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbXBvcnQg
IkZvbnRDYWNoZS5oIgogCiAjaW1wb3J0ICJGb250LmgiCisjaW1wb3J0ICJGb250RGF0YS5oIgog
I2ltcG9ydCAiRm9udFBsYXRmb3JtRGF0YS5oIgogI2ltcG9ydCAiTGlzdEJveC5oIgogI2ltcG9y
dCAiV2ViQ29yZVN0cmluZ1RydW5jYXRvci5oIgpAQCAtMTIwLDcgKzEyMSw3IEBAIHZvaWQgRm9u
dENhY2hlOjpwbGF0Zm9ybUluaXQoKQogCiBjb25zdCBGb250RGF0YSogRm9udENhY2hlOjpnZXRG
b250RGF0YUZvckNoYXJhY3RlcnMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgVUNoYXIqIGNoYXJh
Y3RlcnMsIGludCBsZW5ndGgpCiB7Ci0gICAgTlNGb250KiBuc0ZvbnQgPSBmb250LmdldE5TRm9u
dCgpOworICAgIE5TRm9udCogbnNGb250ID0gZm9udC5wcmltYXJ5Rm9udCgpLT5nZXROU0ZvbnQo
KTsKICAgICBOU1N0cmluZyAqc3RyaW5nID0gW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhDaGFy
YWN0ZXJzTm9Db3B5OihVbmlDaGFyKiljaGFyYWN0ZXJzIGxlbmd0aDpsZW5ndGggZnJlZVdoZW5E
b25lOk5PXTsKICAgICBOU0ZvbnQqIHN1YnN0aXR1dGVGb250ID0gd2tHZXRGb250SW5MYW5ndWFn
ZUZvclJhbmdlKG5zRm9udCwgc3RyaW5nLCBOU01ha2VSYW5nZSgwLCBbc3RyaW5nIGxlbmd0aF0p
KTsKICAgICBpZiAoIXN1YnN0aXR1dGVGb250ICYmIFtzdHJpbmcgbGVuZ3RoXSA9PSAxKQpJbmRl
eDogcGxhdGZvcm0vbWFjL0ZvbnREYXRhTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL21h
Yy9Gb250RGF0YU1hYy5tbQkocmV2aXNpb24gMTYxNzApCisrKyBwbGF0Zm9ybS9tYWMvRm9udERh
dGFNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI4LDQwICsyOCwyOSBAQAogICovCiAKICNpbXBv
cnQgImNvbmZpZy5oIgotI2ltcG9ydCAiRm9udC5oIgogI2ltcG9ydCAiRm9udERhdGEuaCIKLSNp
bXBvcnQgIkNvbG9yLmgiCi0KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLSNpbXBvcnQg
PEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgotCi0jaW1wb3J0ICJG
b250Q2FjaGUuaCIKLQotI2ltcG9ydCAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgogCisjaW1w
b3J0ICJDb2xvci5oIgogI2ltcG9ydCAiRmxvYXRSZWN0LmgiCisjaW1wb3J0ICJGb250LmgiCisj
aW1wb3J0ICJGb250Q2FjaGUuaCIKICNpbXBvcnQgIkZvbnREZXNjcmlwdGlvbi5oIgotCisjaW1w
b3J0ICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCisjaW1wb3J0IDxBcHBsaWNhdGlvblNlcnZp
Y2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KICNpbXBvcnQgPGZsb2F0Lmg+Ci0KICNpbXBvcnQg
PHVuaWNvZGUvdWNoYXIuaD4KICNpbXBvcnQgPHVuaWNvZGUvdW5vcm0uaD4KLQotLy8gRklYTUU6
IEp1c3QgdGVtcG9yYXJ5IGZvciB0aGUgI2RlZmluZXMgb2YgY29uc3RhbnRzIHRoYXQgd2Ugd2ls
bCBldmVudHVhbGx5IHN0b3AgdXNpbmcuCi0jaW1wb3J0ICJHbHlwaEJ1ZmZlci5oIgorI2ltcG9y
dCA8d3RmL0Fzc2VydGlvbnMuaD4KIAogQGludGVyZmFjZSBOU0ZvbnQgKFdlYkFwcEtpdFNlY3Jl
dEFQSSkKIC0gKEJPT0wpX2lzRmFrZUZpeGVkUGl0Y2g7CiBAZW5kCiAKLW5hbWVzcGFjZSBXZWJD
b3JlCi17CituYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSNkZWZpbmUgU01BTExDQVBTX0ZPTlRTSVpF
X01VTFRJUExJRVIgMC43ZgotI2RlZmluZSBTUEFDRSAweDAwMjAKLSNkZWZpbmUgQ09OVEVYVF9E
UEkgKDcyLjApCi0jZGVmaW5lIFNDQUxFX0VNX1RPX1VOSVRTKFgsIFVfUEVSX0VNKSAoWCAqICgo
MS4wICogQ09OVEVYVF9EUEkpIC8gKENPTlRFWFRfRFBJICogVV9QRVJfRU0pKSkKK2NvbnN0IGZs
b2F0IHNtYWxsQ2Fwc0ZvbnRTaXplTXVsdGlwbGllciA9IDAuN2Y7Citjb25zdCBmbG9hdCBjb250
ZXh0RFBJID0gNzIuMGY7CitzdGF0aWMgaW5saW5lIGZsb2F0IHNjYWxlRW1Ub1VuaXRzKGZsb2F0
IHgsIHVuc2lnbmVkIHVuaXRzUGVyRW0pIHsgcmV0dXJuIHggKiAoY29udGV4dERQSSAvIChjb250
ZXh0RFBJICogdW5pdHNQZXJFbSkpOyB9CiAKIGJvb2wgaW5pdEZvbnREYXRhKEZvbnREYXRhKiBm
b250RGF0YSkKIHsKQEAgLTE3Miw5ICsxNjEsOSBAQCB2b2lkIEZvbnREYXRhOjpwbGF0Zm9ybUlu
aXQoKQogICAgIHVuc2lnbmVkIHVuaXRzUGVyRW07CiAgICAgd2tHZXRGb250TWV0cmljcyhtX2Zv
bnQuZm9udCwgJmlBc2NlbnQsICZpRGVzY2VudCwgJmlMaW5lR2FwLCAmdW5pdHNQZXJFbSk7IAog
ICAgIGZsb2F0IHBvaW50U2l6ZSA9IFttX2ZvbnQuZm9udCBwb2ludFNpemVdOwotICAgIGZsb2F0
IGZBc2NlbnQgPSBTQ0FMRV9FTV9UT19VTklUUyhpQXNjZW50LCB1bml0c1BlckVtKSAqIHBvaW50
U2l6ZTsKLSAgICBmbG9hdCBmRGVzY2VudCA9IC1TQ0FMRV9FTV9UT19VTklUUyhpRGVzY2VudCwg
dW5pdHNQZXJFbSkgKiBwb2ludFNpemU7Ci0gICAgZmxvYXQgZkxpbmVHYXAgPSBTQ0FMRV9FTV9U
T19VTklUUyhpTGluZUdhcCwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemU7CisgICAgZmxvYXQgZkFz
Y2VudCA9IHNjYWxlRW1Ub1VuaXRzKGlBc2NlbnQsIHVuaXRzUGVyRW0pICogcG9pbnRTaXplOwor
ICAgIGZsb2F0IGZEZXNjZW50ID0gLXNjYWxlRW1Ub1VuaXRzKGlEZXNjZW50LCB1bml0c1BlckVt
KSAqIHBvaW50U2l6ZTsKKyAgICBmbG9hdCBmTGluZUdhcCA9IHNjYWxlRW1Ub1VuaXRzKGlMaW5l
R2FwLCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZTsKIAogICAgIC8vIFdlIG5lZWQgdG8gYWRqdXN0
IFRpbWVzLCBIZWx2ZXRpY2EsIGFuZCBDb3VyaWVyIHRvIGNsb3NlbHkgbWF0Y2ggdGhlCiAgICAg
Ly8gdmVydGljYWwgbWV0cmljcyBvZiB0aGVpciBNaWNyb3NvZnQgY291bnRlcnBhcnRzIHRoYXQg
YXJlIHRoZSBkZSBmYWN0bwpAQCAtMjIxLDcgKzIxMCw3IEBAIEZvbnREYXRhKiBGb250RGF0YTo6
c21hbGxDYXBzRm9udERhdGEoY28KIHsKICAgICBpZiAoIW1fc21hbGxDYXBzRm9udERhdGEpIHsK
ICAgICAgICAgTlNfRFVSSU5HCi0gICAgICAgICAgICBmbG9hdCBzaXplID0gW21fZm9udC5mb250
IHBvaW50U2l6ZV0gKiBTTUFMTENBUFNfRk9OVFNJWkVfTVVMVElQTElFUjsKKyAgICAgICAgICAg
IGZsb2F0IHNpemUgPSBbbV9mb250LmZvbnQgcG9pbnRTaXplXSAqIHNtYWxsQ2Fwc0ZvbnRTaXpl
TXVsdGlwbGllcjsKICAgICAgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEgc21hbGxDYXBzRm9udChb
W05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJdIGNvbnZlcnRGb250Om1fZm9udC5mb250
IHRvU2l6ZTpzaXplXSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIEFwcEtpdCByZXNl
dHMgdGhlIHR5cGUgaW5mb3JtYXRpb24gKHNjcmVlbi9wcmludGVyKSB3aGVuIHlvdSBjb252ZXJ0
IGEgZm9udCB0byBhIGRpZmZlcmVudCBzaXplLgpJbmRleDogcGxhdGZvcm0vbWFjL0ZvbnRNYWMu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vbWFjL0ZvbnRNYWMubW0JKHJldmlzaW9uIDE2MTcw
KQorKysgcGxhdGZvcm0vbWFjL0ZvbnRNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI2LDE4ICsy
NiwxNiBAQAogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0ICJGb250LmgiCiAKLSNpbXBvcnQg
IkxvZ2dpbmcuaCIKICNpbXBvcnQgIkJsb2NrRXhjZXB0aW9ucy5oIgotI2ltcG9ydCAiRm91bmRh
dGlvbkV4dHJhcy5oIgotCisjaW1wb3J0ICJGb250RGF0YS5oIgogI2ltcG9ydCAiRm9udEZhbGxi
YWNrTGlzdC5oIgorI2ltcG9ydCAiRm91bmRhdGlvbkV4dHJhcy5oIgorI2ltcG9ydCAiR2x5cGhC
dWZmZXIuaCIKICNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dC5oIgotI2ltcG9ydCAiU2V0dGluZ3Mu
aCIKLQotI2ltcG9ydCAiRm9udERhdGEuaCIKLQogI2ltcG9ydCAiSW50UmVjdC5oIgotCisjaW1w
b3J0ICJMb2dnaW5nLmgiCisjaW1wb3J0ICJTZXR0aW5ncy5oIgorI2ltcG9ydCAiVGV4dFN0eWxl
LmgiCiAjaW1wb3J0ICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCiAjaW1wb3J0ICJXZWJDb3Jl
VGV4dFJlbmRlcmVyLmgiCiAKSW5kZXg6IHBsYXRmb3JtL21hYy9HbHlwaE1hcE1hYy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gcGxhdGZvcm0vbWFjL0dseXBoTWFwTWFjLmNwcAkocmV2aXNpb24gMTYxNzAp
CisrKyBwbGF0Zm9ybS9tYWMvR2x5cGhNYXBNYWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2
ICszMSw3IEBACiAKICNpbmNsdWRlICJGb250RGF0YS5oIgogI2luY2x1ZGUgIldlYkNvcmVTeXN0
ZW1JbnRlcmZhY2UuaCIKKyNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9u
U2VydmljZXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zOSw3ICs0MCw3IEBAIGJv
b2wgR2x5cGhNYXA6OmZpbGxQYWdlKEdseXBoUGFnZSogcGFnZSwKICAgICAvLyBVc2UgYW4gYXJy
YXkgb2YgbG9uZyBzbyB3ZSBnZXQgZ29vZCBlbm91Z2ggYWxpZ25tZW50LgogICAgIGxvbmcgZ2x5
cGhWZWN0b3JbKEdMWVBIX1ZFQ1RPUl9TSVpFICsgc2l6ZW9mKGxvbmcpIC0gMSkgLyBzaXplb2Yo
bG9uZyldOwogICAgIAotICAgIE9TU3RhdHVzIHN0YXR1cyA9IHdrSW5pdGlhbGl6ZUdseXBoVmVj
dG9yKGNHbHlwaFBhZ2VTaXplLCAmZ2x5cGhWZWN0b3IpOworICAgIE9TU3RhdHVzIHN0YXR1cyA9
IHdrSW5pdGlhbGl6ZUdseXBoVmVjdG9yKEdseXBoUGFnZTo6c2l6ZSwgJmdseXBoVmVjdG9yKTsK
ICAgICBpZiAoc3RhdHVzICE9IG5vRXJyKQogICAgICAgICAvLyBUaGlzIHNob3VsZCBuZXZlciBo
YXBwZW4sIHBlcmhhcHMgaW5kaWNhdGVzIGEgYmFkIGZvbnQhICBJZiBpdCBkb2VzIHRoZQogICAg
ICAgICAvLyBmb250IHN1YnN0aXR1dGlvbiBjb2RlIHdpbGwgZmluZCBhbiBhbHRlcm5hdGUgZm9u
dC4KQEAgLTQ4LDcgKzQ5LDcgQEAgYm9vbCBHbHlwaE1hcDo6ZmlsbFBhZ2UoR2x5cGhQYWdlKiBw
YWdlLAogICAgIHdrQ29udmVydENoYXJUb0dseXBocyhmb250RGF0YS0+bV9zdHlsZUdyb3VwLCBi
dWZmZXIsIGJ1ZmZlckxlbmd0aCwgJmdseXBoVmVjdG9yKTsKIAogICAgIHVuc2lnbmVkIG51bUds
eXBocyA9IHdrR2V0R2x5cGhWZWN0b3JOdW1HbHlwaHMoJmdseXBoVmVjdG9yKTsKLSAgICBpZiAo
bnVtR2x5cGhzICE9IGNHbHlwaFBhZ2VTaXplKSB7CisgICAgaWYgKG51bUdseXBocyAhPSBHbHlw
aFBhZ2U6OnNpemUpIHsKICAgICAgICAgLy8gVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLCBwZXJo
YXBzIGluZGljYXRlcyBhIGJhZCBmb250PwogICAgICAgICAvLyBJZiBpdCBkb2VzIGhhcHBlbiwg
dGhlIGZvbnQgc3Vic3RpdHV0aW9uIGNvZGUgd2lsbCBmaW5kIGFuIGFsdGVybmF0ZSBmb250Lgog
ICAgICAgICB3a0NsZWFyR2x5cGhWZWN0b3IoJmdseXBoVmVjdG9yKTsKQEAgLTU2LDcgKzU3LDcg
QEAgYm9vbCBHbHlwaE1hcDo6ZmlsbFBhZ2UoR2x5cGhQYWdlKiBwYWdlLAogICAgIH0KIAogICAg
IEFUU0xheW91dFJlY29yZCogZ2x5cGhSZWNvcmQgPSAoQVRTTGF5b3V0UmVjb3JkKil3a0dldEds
eXBoVmVjdG9yRmlyc3RSZWNvcmQoZ2x5cGhWZWN0b3IpOwotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBjR2x5cGhQYWdlU2l6ZTsgaSsrKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IEdseXBoUGFnZTo6c2l6ZTsgaSsrKSB7CiAgICAgICAgIHBhZ2UtPnNldEdseXBoRGF0YUZv
ckluZGV4KGksIGdseXBoUmVjb3JkLT5nbHlwaElELCBmb250RGF0YSk7CiAgICAgICAgIGdseXBo
UmVjb3JkID0gKEFUU0xheW91dFJlY29yZCAqKSgoY2hhciAqKWdseXBoUmVjb3JkICsgd2tHZXRH
bHlwaFZlY3RvclJlY29yZFNpemUoZ2x5cGhWZWN0b3IpKTsKICAgICB9CkluZGV4OiBwbGF0Zm9y
bS9tYWMvTGlzdEJveE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9tYWMvTGlzdEJveE1h
Yy5tbQkocmV2aXNpb24gMTYxNzApCisrKyBwbGF0Zm9ybS9tYWMvTGlzdEJveE1hYy5tbQkod29y
a2luZyBjb3B5KQpAQCAtMjcsMTcgKzI3LDE3IEBACiAjaW1wb3J0ICJMaXN0Qm94LmgiCiAKICNp
bXBvcnQgIkJsb2NrRXhjZXB0aW9ucy5oIgotI2ltcG9ydCAiRnJhbWVNYWMuaCIKLSNpbXBvcnQg
IldlYkNvcmVGcmFtZUJyaWRnZS5oIgogI2ltcG9ydCAiRm9udERhdGEuaCIKKyNpbXBvcnQgIkZy
YW1lTWFjLmgiCisjaW1wb3J0ICJHcmFwaGljc0NvbnRleHQuaCIKICNpbXBvcnQgIlJlbmRlclZp
ZXcuaCIKICNpbXBvcnQgIlJlbmRlcldpZGdldC5oIgorI2ltcG9ydCAiVGV4dFN0eWxlLmgiCisj
aW1wb3J0ICJXZWJDb3JlRnJhbWVCcmlkZ2UuaCIKICNpbXBvcnQgIldlYkNvcmVXaWRnZXRIb2xk
ZXIuaCIKICNpbXBvcnQgIldpZGdldENsaWVudC5oIgogI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMu
aD4KIAotI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0LmgiCi0KIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwogCiBjb25zdCBpbnQgbWluTGluZXMgPSA0OyAvKiBlbnN1cmVzIHdlIGhhdmUgYSBzY3Jv
bGwgYmFyICovCkBAIC03NDAsNyArNzQwLDcgQEAgc3RhdGljIEJvb2xlYW4gTGlzdEJveFR5cGVT
ZWxlY3RDYWxsYmFjawogCiAtICh2b2lkKWZvbnRDaGFuZ2VkCiB7Ci0gICAgTlNGb250ICpmb250
ID0gX2JveC0+Zm9udCgpLmdldE5TRm9udCgpOworICAgIE5TRm9udCAqZm9udCA9IF9ib3gtPmZv
bnQoKS5wcmltYXJ5Rm9udCgpLT5nZXROU0ZvbnQoKTsKICAgICBpc1N5c3RlbUZvbnQgPSBbW2Zv
bnQgZm9udE5hbWVdIGlzRXF1YWxUb1N0cmluZzpbaXRlbUZvbnQoKSBmb250TmFtZV1dICYmIFtm
b250IHBvaW50U2l6ZV0gPT0gW2l0ZW1Gb250KCkgcG9pbnRTaXplXTsKICAgICBbc2VsZiBzZXRS
b3dIZWlnaHQ6Y2VpbGYoW2ZvbnQgYXNjZW5kZXJdIC0gW2ZvbnQgZGVzY2VuZGVyXSArIGJvdHRv
bU1hcmdpbildOwogICAgIFtzZWxmIHNldE5lZWRzRGlzcGxheTpZRVNdOwpJbmRleDogcGxhdGZv
cm0vbWFjL1BvcFVwQnV0dG9uTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL21hYy9Qb3BV
cEJ1dHRvbk1hYy5tbQkocmV2aXNpb24gMTYxNzApCisrKyBwbGF0Zm9ybS9tYWMvUG9wVXBCdXR0
b25NYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI3LDE2ICsyNywxNyBAQAogI2ltcG9ydCAiUG9w
VXBCdXR0b24uaCIKIAogI2ltcG9ydCAiQmxvY2tFeGNlcHRpb25zLmgiCisjaW1wb3J0ICJGb250
LmgiCisjaW1wb3J0ICJGb250RGF0YS5oIgogI2ltcG9ydCAiRm91bmRhdGlvbkV4dHJhcy5oIgog
I2ltcG9ydCAiRnJhbWVNYWMuaCIKLSNpbXBvcnQgIlRleHRGaWVsZC5oIgotI2ltcG9ydCAiV2Vi
Q29yZUZyYW1lQnJpZGdlLmgiCi0jaW1wb3J0ICJGb250RGF0YS5oIgogI2ltcG9ydCAiUmVuZGVy
Vmlldy5oIgogI2ltcG9ydCAiUmVuZGVyV2lkZ2V0LmgiCisjaW1wb3J0ICJUZXh0RmllbGQuaCIK
KyNpbXBvcnQgIlRleHRTdHlsZS5oIgorI2ltcG9ydCAiV2ViQ29yZUZyYW1lQnJpZGdlLmgiCiAj
aW1wb3J0ICJXZWJDb3JlV2lkZ2V0SG9sZGVyLmgiCiAjaW1wb3J0ICJXaWRnZXRDbGllbnQuaCIK
LSNpbXBvcnQgIkZvbnQuaCIKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKSW5kZXg6IHBs
YXRmb3JtL21hYy9SZXNvdXJjZUxvYWRlck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9t
YWMvUmVzb3VyY2VMb2FkZXJNYWMubW0JKHJldmlzaW9uIDE2MTcwKQorKysgcGxhdGZvcm0vbWFj
L1Jlc291cmNlTG9hZGVyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIGJv
b2wgUmVzb3VyY2VMb2FkZXI6OnN0YXJ0KERvY0xvYWRlciogZG8KICAgICBpZiAoIWhlYWRlclN0
cmluZy5pc0VtcHR5KCkpCiAgICAgICAgIGhlYWRlckRpY3QgPSBbTlNEaWN0aW9uYXJ5IF93ZWJj
b3JlX2RpY3Rpb25hcnlXaXRoSGVhZGVyU3RyaW5nOmhlYWRlclN0cmluZ107CiAKLSAgICBpZiAo
cG9zdERhdGEoKS5jb3VudCgpID4gMCkKKyAgICBpZiAoIXBvc3REYXRhKCkuZWxlbWVudHMoKS5p
c0VtcHR5KCkpCiAgICAgICAgIGhhbmRsZSA9IFticmlkZ2Ugc3RhcnRMb2FkaW5nUmVzb3VyY2U6
cmVzb3VyY2VMb2FkZXIgd2l0aE1ldGhvZDptZXRob2QoKSBVUkw6dXJsKCkuZ2V0TlNVUkwoKSBj
dXN0b21IZWFkZXJzOmhlYWRlckRpY3QgcG9zdERhdGE6YXJyYXlGcm9tRm9ybURhdGEocG9zdERh
dGEoKSldOwogICAgIGVsc2UKICAgICAgICAgaGFuZGxlID0gW2JyaWRnZSBzdGFydExvYWRpbmdS
ZXNvdXJjZTpyZXNvdXJjZUxvYWRlciB3aXRoTWV0aG9kOm1ldGhvZCgpIFVSTDp1cmwoKS5nZXRO
U1VSTCgpIGN1c3RvbUhlYWRlcnM6aGVhZGVyRGljdF07CkluZGV4OiBwbGF0Zm9ybS9tYWMvVGV4
dEZpZWxkTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL21hYy9UZXh0RmllbGRNYWMubW0J
KHJldmlzaW9uIDE2MTcwKQorKysgcGxhdGZvcm0vbWFjL1RleHRGaWVsZE1hYy5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsMTYgKzI2LDE3IEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQg
IlRleHRGaWVsZC5oIgogCi0jaW1wb3J0ICJDb2xvci5oIgotI2ltcG9ydCAiSW50U2l6ZS5oIgog
I2ltcG9ydCAiQmxvY2tFeGNlcHRpb25zLmgiCisjaW1wb3J0ICJDb2xvci5oIgogI2ltcG9ydCAi
Rm9udC5oIgotI2ltcG9ydCAiTG9nZ2luZy5oIgotI2ltcG9ydCAiV2ViQ29yZVRleHRGaWVsZC5o
IgotI2ltcG9ydCAiV2ViQ29yZUZyYW1lQnJpZGdlLmgiCiAjaW1wb3J0ICJGb250RGF0YS5oIgor
I2ltcG9ydCAiSW50U2l6ZS5oIgorI2ltcG9ydCAiTG9nZ2luZy5oIgogI2ltcG9ydCAiUmVuZGVy
Vmlldy5oIgogI2ltcG9ydCAiUmVuZGVyV2lkZ2V0LmgiCisjaW1wb3J0ICJUZXh0U3R5bGUuaCIK
KyNpbXBvcnQgIldlYkNvcmVGcmFtZUJyaWRnZS5oIgorI2ltcG9ydCAiV2ViQ29yZVRleHRGaWVs
ZC5oIgogI2ltcG9ydCAiV2ViQ29yZVZpZXdGYWN0b3J5LmgiCiAjaW1wb3J0ICJXaWRnZXRDbGll
bnQuaCIKIApAQCAtMTE1LDcgKzExNiw3IEBAIHZvaWQgVGV4dEZpZWxkOjpzZXRGb250KGNvbnN0
IEZvbnQgJmZvbnQKICAgICBlbHNlIHsKICAgICAgICAgTlNUZXh0RmllbGQgKnRleHRGaWVsZCA9
IChOU1RleHRGaWVsZCAqKWdldFZpZXcoKTsKICAgICAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENF
UFRJT05TOwotICAgICAgICBbdGV4dEZpZWxkIHNldEZvbnQ6Zm9udC5nZXROU0ZvbnQoKV07Cisg
ICAgICAgIFt0ZXh0RmllbGQgc2V0Rm9udDpmb250LnByaW1hcnlGb250KCktPmdldE5TRm9udCgp
XTsKICAgICAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKICAgICB9CiB9CkluZGV4OiBw
bGF0Zm9ybS9tYWMvV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRm
b3JtL21hYy9XZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgJKHJldmlzaW9uIDE2MTcwKQorKysgcGxh
dGZvcm0vbWFjL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjYs
MzYgKzI2LDM3IEBACiAjaWZuZGVmIFdlYkNvcmVTeXN0ZW1JbnRlcmZhY2VfaAogI2RlZmluZSBX
ZWJDb3JlU3lzdGVtSW50ZXJmYWNlX2gKIAordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBBVFNHbHlw
aFJlZjsKK3R5cGVkZWYgc3RydWN0IEFUU0xheW91dFJlY29yZCBBVFNMYXlvdXRSZWNvcmQ7Cit0
eXBlZGVmIFVJbnQzMiBBVFNVRm9udElEOwogdHlwZWRlZiBzaWduZWQgY2hhciBCT09MOwotCi0j
aWZuZGVmIENHR0VPTUVUUllfSF8KK3R5cGVkZWYgc3RydWN0IENHQWZmaW5lVHJhbnNmb3JtIENH
QWZmaW5lVHJhbnNmb3JtOwordHlwZWRlZiBzdHJ1Y3QgQ0dDb2xvciAqQ0dDb2xvclJlZjsKK3R5
cGVkZWYgc3RydWN0IENHQ29udGV4dCAqQ0dDb250ZXh0UmVmOwordHlwZWRlZiBzdHJ1Y3QgQ0dG
b250ICpDR0ZvbnRSZWY7Cit0eXBlZGVmIHN0cnVjdCBDR1BvaW50IENHUG9pbnQ7CiB0eXBlZGVm
IHN0cnVjdCBDR1JlY3QgQ0dSZWN0OwotI2VuZGlmCit0eXBlZGVmIHN0cnVjdCBDR1NpemUgQ0dT
aXplOwordHlwZWRlZiBzdHJ1Y3QgX05TUmFuZ2UgTlNSYW5nZTsKIAogI2lmZGVmIE5TR0VPTUVU
UllfVFlQRVNfU0FNRV9BU19DR0dFT01FVFJZX1RZUEVTCit0eXBlZGVmIHN0cnVjdCBDR1BvaW50
IE5TUG9pbnQ7CiB0eXBlZGVmIHN0cnVjdCBDR1JlY3QgTlNSZWN0OwogI2Vsc2UKK3R5cGVkZWYg
c3RydWN0IF9OU1BvaW50IE5TUG9pbnQ7CiB0eXBlZGVmIHN0cnVjdCBfTlNSZWN0IE5TUmVjdDsK
ICNlbmRpZgogCi0jaWZuZGVmIENHR0VPTUVUUllfSF8KLXR5cGVkZWYgc3RydWN0IENHUG9pbnQg
Q0dQb2ludDsKLSNlbmRpZgotCi0jaWZkZWYgTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VP
TUVUUllfVFlQRVMKLXR5cGVkZWYgc3RydWN0IENHUG9pbnQgTlNQb2ludDsKKyNpZmRlZiBfX09C
SkNfXworQGNsYXNzIE5TRm9udDsKICNlbHNlCi10eXBlZGVmIHN0cnVjdCBfTlNQb2ludCBOU1Bv
aW50OwotI2VuZGlmCi0KLXR5cGVkZWYgc3RydWN0IF9OU1JhbmdlIE5TUmFuZ2U7Ci0KLSNpZm5k
ZWYgX19PQkpDX18KLWNsYXNzIE5TSW1hZ2U7Ci1jbGFzcyBOU01lbnU7Ci1jbGFzcyBOU1N0cmlu
ZzsKLWNsYXNzIE5TVmlldzsKLWNsYXNzIE5TVVJMQ29ubmVjdGlvbjsKK3R5cGVkZWYgc3RydWN0
IE5TRm9udCBOU0ZvbnQ7Cit0eXBlZGVmIHN0cnVjdCBOU0ltYWdlIE5TSW1hZ2U7Cit0eXBlZGVm
IHN0cnVjdCBOU01lbnUgTlNNZW51OwordHlwZWRlZiBzdHJ1Y3QgTlNTdHJpbmcgTlNTdHJpbmc7
Cit0eXBlZGVmIHN0cnVjdCBOU1VSTENvbm5lY3Rpb24gTlNVUkxDb25uZWN0aW9uOwordHlwZWRl
ZiBzdHJ1Y3QgTlNWaWV3IE5TVmlldzsKK3R5cGVkZWYgc3RydWN0IG9iamNfb2JqZWN0ICppZDsK
ICNlbmRpZgogCiAjaWZkZWYgX19jcGx1c3BsdXMKQEAgLTY4LDcgKzY5LDE3IEBAIGV4dGVybiAi
QyIgewogCiBleHRlcm4gQk9PTCAoKndrQ0dDb250ZXh0R2V0U2hvdWxkU21vb3RoRm9udHMpKENH
Q29udGV4dFJlZik7CiBleHRlcm4gdm9pZCAoKndrQ2xlYXJHbHlwaFZlY3Rvcikodm9pZCogZ2x5
cGhzKTsKK2V4dGVybiBDRlJlYWRTdHJlYW1SZWYgKCp3a0NyZWF0ZUN1c3RvbUNGUmVhZFN0cmVh
bSkodm9pZCAqKCpmb3JtQ3JlYXRlKShDRlJlYWRTdHJlYW1SZWYsIHZvaWQgKiksIAorICAgIHZv
aWQgKCpmb3JtRmluYWxpemUpKENGUmVhZFN0cmVhbVJlZiwgdm9pZCAqKSwgCisgICAgQm9vbGVh
biAoKmZvcm1PcGVuKShDRlJlYWRTdHJlYW1SZWYsIENGU3RyZWFtRXJyb3IgKiwgQm9vbGVhbiAq
LCB2b2lkICopLCAKKyAgICBDRkluZGV4ICgqZm9ybVJlYWQpKENGUmVhZFN0cmVhbVJlZiwgVUlu
dDggKiwgQ0ZJbmRleCwgQ0ZTdHJlYW1FcnJvciAqLCBCb29sZWFuICosIHZvaWQgKiksIAorICAg
IEJvb2xlYW4gKCpmb3JtQ2FuUmVhZCkoQ0ZSZWFkU3RyZWFtUmVmLCB2b2lkICopLCAKKyAgICB2
b2lkICgqZm9ybUNsb3NlKShDRlJlYWRTdHJlYW1SZWYsIHZvaWQgKiksIAorICAgIHZvaWQgKCpm
b3JtU2NoZWR1bGUpKENGUmVhZFN0cmVhbVJlZiwgQ0ZSdW5Mb29wUmVmLCBDRlN0cmluZ1JlZiwg
dm9pZCAqKSwgCisgICAgdm9pZCAoKmZvcm1VbnNjaGVkdWxlKShDRlJlYWRTdHJlYW1SZWYsIENG
UnVuTG9vcFJlZiwgQ0ZTdHJpbmdSZWYsIHZvaWQgKiksCisgICAgdm9pZCAqY29udGV4dCk7CiBl
eHRlcm4gT1NTdGF0dXMgKCp3a0NvbnZlcnRDaGFyVG9HbHlwaHMpKHZvaWQqIHN0eWxlR3JvdXAs
IGNvbnN0IFVuaUNoYXIqLCB1bnNpZ25lZCBudW1DaGFyYWN0ZXJzLCB2b2lkKiBnbHlwaHMpOwor
ZXh0ZXJuIGlkICgqd2tDcmVhdGVOU1VSTENvbm5lY3Rpb25EZWxlZ2F0ZVByb3h5KSh2b2lkKTsK
IGV4dGVybiB2b2lkICgqd2tEcmF3QmV6ZWxlZFRleHRGaWVsZENlbGwpKE5TUmVjdCwgQk9PTCBl
bmFibGVkKTsKIGV4dGVybiB2b2lkICgqd2tEcmF3QmV6ZWxlZFRleHRBcmVhKShOU1JlY3QsIEJP
T0wgZW5hYmxlZCk7CiBleHRlcm4gdm9pZCAoKndrRHJhd0ZvY3VzUmluZykoQ0dDb250ZXh0UmVm
LCBDR1JlY3QgY2xpcFJlY3QsIENHQ29sb3JSZWYsIGludCByYWRpdXMpOwpAQCAtOTEsMjIgKzEw
MiwxMiBAQCBleHRlcm4gdm9pZCAoKndrUG9wdXBNZW51KShOU01lbnUqLCBOU1BvCiBleHRlcm4g
dm9pZCAoKndrUmVsZWFzZVN0eWxlR3JvdXApKHZvaWQqIGdyb3VwKTsKIGV4dGVybiB2b2lkICgq
d2tTZXRDR0ZvbnRSZW5kZXJpbmdNb2RlKShDR0NvbnRleHRSZWYsIE5TRm9udCopOwogZXh0ZXJu
IHZvaWQgKCp3a1NldERyYWdJbWFnZSkoTlNJbWFnZSosIE5TUG9pbnQgb2Zmc2V0KTsKLWV4dGVy
biB2b2lkICgqd2tTZXRQYXR0ZXJuUGhhc2VJblVzZXJTcGFjZSkoQ0dDb250ZXh0UmVmLCBDR1Bv
aW50IHBvaW50KTsKK2V4dGVybiB2b2lkICgqd2tTZXROU1VSTENvbm5lY3Rpb25EZWZlcnNDYWxs
YmFja3MpKE5TVVJMQ29ubmVjdGlvbiAqLCBCT09MKTsKK2V4dGVybiB2b2lkICgqd2tTZXRQYXR0
ZXJuUGhhc2VJblVzZXJTcGFjZSkoQ0dDb250ZXh0UmVmLCBDR1BvaW50KTsKIGV4dGVybiB2b2lk
ICgqd2tTZXRVcEZvbnRDYWNoZSkoc2l6ZV90KTsKIGV4dGVybiB2b2lkICgqd2tTaWduYWxDRlJl
YWRTdHJlYW1FbmQpKENGUmVhZFN0cmVhbVJlZiBzdHJlYW0pOwotZXh0ZXJuIHZvaWQgKCp3a1Np
Z25hbENGUmVhZFN0cmVhbUhhc0J5dGVzKShDRlJlYWRTdHJlYW1SZWYgc3RyZWFtKTsKIGV4dGVy
biB2b2lkICgqd2tTaWduYWxDRlJlYWRTdHJlYW1FcnJvcikoQ0ZSZWFkU3RyZWFtUmVmIHN0cmVh
bSwgQ0ZTdHJlYW1FcnJvciAqZXJyb3IpOwotZXh0ZXJuIENGUmVhZFN0cmVhbVJlZiAoKndrQ3Jl
YXRlQ3VzdG9tQ0ZSZWFkU3RyZWFtKSh2b2lkICooKmZvcm1DcmVhdGUpKENGUmVhZFN0cmVhbVJl
Ziwgdm9pZCAqKSwgCi0gICAgdm9pZCAoKmZvcm1GaW5hbGl6ZSkoQ0ZSZWFkU3RyZWFtUmVmLCB2
b2lkICopLCAKLSAgICBCb29sZWFuICgqZm9ybU9wZW4pKENGUmVhZFN0cmVhbVJlZiwgQ0ZTdHJl
YW1FcnJvciAqLCBCb29sZWFuICosIHZvaWQgKiksIAotICAgIENGSW5kZXggKCpmb3JtUmVhZCko
Q0ZSZWFkU3RyZWFtUmVmLCBVSW50OCAqLCBDRkluZGV4LCBDRlN0cmVhbUVycm9yICosIEJvb2xl
YW4gKiwgdm9pZCAqKSwgCi0gICAgQm9vbGVhbiAoKmZvcm1DYW5SZWFkKShDRlJlYWRTdHJlYW1S
ZWYsIHZvaWQgKiksIAotICAgIHZvaWQgKCpmb3JtQ2xvc2UpKENGUmVhZFN0cmVhbVJlZiwgdm9p
ZCAqKSwgCi0gICAgdm9pZCAoKmZvcm1TY2hlZHVsZSkoQ0ZSZWFkU3RyZWFtUmVmLCBDRlJ1bkxv
b3BSZWYsIENGU3RyaW5nUmVmLCB2b2lkICopLCAKLSAgICB2b2lkICgqZm9ybVVuc2NoZWR1bGUp
KENGUmVhZFN0cmVhbVJlZiwgQ0ZSdW5Mb29wUmVmLCBDRlN0cmluZ1JlZiwgdm9pZCAqKSwKLSAg
ICB2b2lkICpjb250ZXh0KTsKLWV4dGVybiB2b2lkICgqd2tTZXROU1VSTENvbm5lY3Rpb25EZWZl
cnNDYWxsYmFja3MpKE5TVVJMQ29ubmVjdGlvbiAqLCBCT09MKTsKLWV4dGVybiBpZCAoKndrQ3Jl
YXRlTlNVUkxDb25uZWN0aW9uRGVsZWdhdGVQcm94eSkodm9pZCk7CitleHRlcm4gdm9pZCAoKndr
U2lnbmFsQ0ZSZWFkU3RyZWFtSGFzQnl0ZXMpKENGUmVhZFN0cmVhbVJlZiBzdHJlYW0pOwogCiAj
aWZkZWYgX19jcGx1c3BsdXMKIH0KSW5kZXg6IHBsYXRmb3JtL21hYy9XZWJDb3JlVGV4dFJlbmRl
cmVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL21hYy9XZWJDb3JlVGV4dFJlbmRlcmVyLm1t
CShyZXZpc2lvbiAxNjE3MCkKKysrIHBsYXRmb3JtL21hYy9XZWJDb3JlVGV4dFJlbmRlcmVyLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCwxMCBAQAogCiAjaW1wb3J0ICJGb250LmgiCiAj
aW1wb3J0ICJGb250RGF0YS5oIgotI2ltcG9ydCAiV2ViRm9udENhY2hlLmgiCi0jaW1wb3J0ICJJ
bnRQb2ludC5oIgogI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW1wb3J0ICJJbnRQb2lu
dC5oIgorI2ltcG9ydCAiVGV4dFN0eWxlLmgiCisjaW1wb3J0ICJXZWJGb250Q2FjaGUuaCIKIAog
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKSW5kZXg6IHJlbmRlcmluZy9FbGxpcHNpc0JveC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcAkocmV2aXNpb24gMTYx
NzApCisrKyByZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2
ICsyNCw3IEBACiAjaW5jbHVkZSAiRWxsaXBzaXNCb3guaCIKIAogI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgorI2luY2x1ZGUgIlRleHRTdHlsZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKSW5kZXg6IHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5k
ZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHJldmlzaW9uIDE2MTcwKQorKysgcmVuZGVyaW5nL0lu
bGluZVRleHRCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMCArMjgsMTEgQEAKICNpbmNs
dWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCi0jaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKLSNpbmNsdWRlICJicmVha19saW5l
cy5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyQXJlbmEuaCIKKyNpbmNs
dWRlICJSZW5kZXJCbG9jay5oIgorI2luY2x1ZGUgIlRleHRTdHlsZS5oIgorI2luY2x1ZGUgImJy
ZWFrX2xpbmVzLmgiCiAjaW5jbHVkZSA8d3RmL0Fsd2F5c0lubGluZS5oPgogCiAjaWYgUExBVEZP
Uk0oTUFDKQpAQCAtMjg2LDExICsyODcsMTIgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludChS
ZW5kZXJPYmplY3Q6OgogICAgIC8vIDIuIE5vdyBwYWludCB0aGUgZm9yZWdyb3VuZCwgaW5jbHVk
aW5nIHRleHQgYW5kIGRlY29yYXRpb25zIGxpa2UgdW5kZXJsaW5lL292ZXJsaW5lIChpbiBxdWly
a3MgbW9kZSBvbmx5KS4KICAgICBpZiAobV9sZW4gPD0gMCkgcmV0dXJuOwogICAgIAotICAgIERl
cHJlY2F0ZWRWYWx1ZUxpc3Q8TWFya2VkVGV4dFVuZGVybGluZT4gdW5kZXJsaW5lczsKKyAgICBj
b25zdCBWZWN0b3I8TWFya2VkVGV4dFVuZGVybGluZT4qIHVuZGVybGluZXM7CisgICAgc2l6ZV90
IG51bVVuZGVybGluZXMgPSAwOwogICAgIGlmIChoYXZlTWFya2VkVGV4dCAmJiBtYXJrZWRUZXh0
VXNlc1VuZGVybGluZXMpIHsKLSAgICAgICAgdW5kZXJsaW5lcyA9IG9iamVjdCgpLT5kb2N1bWVu
dCgpLT5mcmFtZSgpLT5tYXJrZWRUZXh0VW5kZXJsaW5lcygpOworICAgICAgICB1bmRlcmxpbmVz
ID0gJm9iamVjdCgpLT5kb2N1bWVudCgpLT5mcmFtZSgpLT5tYXJrZWRUZXh0VW5kZXJsaW5lcygp
OworICAgICAgICBudW1VbmRlcmxpbmVzID0gdW5kZXJsaW5lcy0+c2l6ZSgpOwogICAgIH0KLSAg
ICBEZXByZWNhdGVkVmFsdWVMaXN0SXRlcmF0b3I8TWFya2VkVGV4dFVuZGVybGluZT4gdW5kZXJs
aW5lSXQgPSB1bmRlcmxpbmVzLmJlZ2luKCk7CiAKICAgICBDb2xvciB0ZXh0Q29sb3I7CiAgICAg
CkBAIC0zOTAsOCArMzkyLDggQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludChSZW5kZXJPYmpl
Y3Q6OgogICAgIGlmIChpLnBoYXNlICE9IFBhaW50UGhhc2VTZWxlY3Rpb24pIHsKICAgICAgICAg
cGFpbnRBbGxNYXJrZXJzT2ZUeXBlKGkucCwgdHgsIHR5LCBEb2N1bWVudE1hcmtlcjo6U3BlbGxp
bmcsIHN0eWxlVG9Vc2UsIGZvbnQpOwogCi0gICAgICAgIGZvciAoIDsgdW5kZXJsaW5lSXQgIT0g
dW5kZXJsaW5lcy5lbmQoKTsgdW5kZXJsaW5lSXQrKykgewotICAgICAgICAgICAgTWFya2VkVGV4
dFVuZGVybGluZSB1bmRlcmxpbmUgPSAqdW5kZXJsaW5lSXQ7CisgICAgICAgIGZvciAoc2l6ZV90
IGluZGV4OyBpbmRleCA8IG51bVVuZGVybGluZXM7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIGNv
bnN0IE1hcmtlZFRleHRVbmRlcmxpbmUmIHVuZGVybGluZSA9ICgqdW5kZXJsaW5lcylbaW5kZXhd
OwogCiAgICAgICAgICAgICBpZiAodW5kZXJsaW5lLmVuZE9mZnNldCA8PSBzdGFydCgpKQogICAg
ICAgICAgICAgICAgIC8vIHVuZGVybGluZSBpcyBjb21wbGV0ZWx5IGJlZm9yZSB0aGlzIHJ1bi4g
IFRoaXMgbWlnaHQgYmUgYW4gdW5kZXJsaW5lIHRoYXQgc2l0cwpAQCAtNjQ3LDcgKzY0OSw3IEBA
IHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRBbGxNYXJrZXJzT2ZUeXAKIH0KIAogCi12b2lkIElu
bGluZVRleHRCb3g6OnBhaW50TWFya2VkVGV4dFVuZGVybGluZShHcmFwaGljc0NvbnRleHQqIHB0
LCBpbnQgX3R4LCBpbnQgX3R5LCBNYXJrZWRUZXh0VW5kZXJsaW5lJiB1bmRlcmxpbmUpCit2b2lk
IElubGluZVRleHRCb3g6OnBhaW50TWFya2VkVGV4dFVuZGVybGluZShHcmFwaGljc0NvbnRleHQq
IHB0LCBpbnQgX3R4LCBpbnQgX3R5LCBjb25zdCBNYXJrZWRUZXh0VW5kZXJsaW5lJiB1bmRlcmxp
bmUpCiB7CiAgICAgX3R4ICs9IG1feDsKICAgICBfdHkgKz0gbV95OwpJbmRleDogcmVuZGVyaW5n
L0lubGluZVRleHRCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5o
CShyZXZpc2lvbiAxNjE3MCkKKysrIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTExMiw3ICsxMTIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBwYWludEFsbE1hcmtl
cnNPZlR5cGUoR3JhcGhpY3NDb250ZXh0KiwgaW50IHR4LCBpbnQgdHksIERvY3VtZW50TWFya2Vy
OjpNYXJrZXJUeXBlLCBSZW5kZXJTdHlsZSosIGNvbnN0IEZvbnQqKTsKICAgICB2b2lkIHBhaW50
U3BlbGxpbmdNYXJrZXIoR3JhcGhpY3NDb250ZXh0KiwgaW50IHR4LCBpbnQgdHksIERvY3VtZW50
TWFya2VyKTsKICAgICB2b2lkIHBhaW50VGV4dE1hdGNoTWFya2VyKEdyYXBoaWNzQ29udGV4dCos
IGludCB0eCwgaW50IHR5LCBEb2N1bWVudE1hcmtlciwgUmVuZGVyU3R5bGUqLCBjb25zdCBGb250
Kik7Ci0gICAgdm9pZCBwYWludE1hcmtlZFRleHRVbmRlcmxpbmUoR3JhcGhpY3NDb250ZXh0Kiwg
aW50IHR4LCBpbnQgdHksIE1hcmtlZFRleHRVbmRlcmxpbmUmKTsKKyAgICB2b2lkIHBhaW50TWFy
a2VkVGV4dFVuZGVybGluZShHcmFwaGljc0NvbnRleHQqLCBpbnQgdHgsIGludCB0eSwgY29uc3Qg
TWFya2VkVGV4dFVuZGVybGluZSYpOwogI2lmIFBMQVRGT1JNKE1BQykKICAgICB2b2lkIHBhaW50
Q3VzdG9tSGlnaGxpZ2h0KGludCB0eCwgaW50IHR5LCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUp
OwogI2VuZGlmCkluZGV4OiByZW5kZXJpbmcvUmVuZGVyQ29udGFpbmVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSByZW5kZXJpbmcvUmVuZGVyQ29udGFpbmVyLmNwcAkocmV2aXNpb24gMTYxNzApCisrKyBy
ZW5kZXJpbmcvUmVuZGVyQ29udGFpbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgxLDI5ICs1
ODEsMjUgQEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlckNvbnRhaW5lcjo6cG9zaXRpbwogICAgIHJl
dHVybiBWaXNpYmxlUG9zaXRpb24oZWxlbWVudCgpLCAwLCBET1dOU1RSRUFNKTsKIH0KIAotRGVw
cmVjYXRlZFZhbHVlTGlzdDxJbnRSZWN0PiBSZW5kZXJDb250YWluZXI6OmxpbmVCb3hSZWN0cygp
Cit2b2lkIFJlbmRlckNvbnRhaW5lcjo6bGluZUJveFJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVj
dHMpCiB7CiAgICAgaWYgKCFmaXJzdENoaWxkKCkgJiYgKGlzSW5saW5lKCkgfHwgaXNBbm9ueW1v
dXNCbG9jaygpKSkgewotICAgICAgICBEZXByZWNhdGVkVmFsdWVMaXN0PEludFJlY3Q+IHJlY3Rz
OwotICAgICAgICBpbnQgeCA9IDAsIHkgPSAwOworICAgICAgICBpbnQgeCwgeTsKICAgICAgICAg
YWJzb2x1dGVQb3NpdGlvbkZvckNvbnRlbnQoeCwgeSk7CiAgICAgICAgIGFic29sdXRlUmVjdHMo
cmVjdHMsIHgsIHkpOwotICAgICAgICByZXR1cm4gcmVjdHM7CisgICAgICAgIHJldHVybjsKICAg
ICB9CiAKICAgICBpZiAoIWZpcnN0Q2hpbGQoKSkKLSAgICAgICAgcmV0dXJuIERlcHJlY2F0ZWRW
YWx1ZUxpc3Q8SW50UmVjdD4oKTsKKyAgICAgICAgcmV0dXJuOwogCi0gICAgRGVwcmVjYXRlZFZh
bHVlTGlzdDxJbnRSZWN0PiByZWN0czsKICAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBm
aXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CiAgICAg
ICAgIGlmIChjaGlsZC0+aXNUZXh0KCkgfHwgY2hpbGQtPmlzSW5saW5lKCkgfHwgY2hpbGQtPmlz
QW5vbnltb3VzQmxvY2soKSkgewotICAgICAgICAgICAgaW50IHggPSAwLCB5ID0gMDsKKyAgICAg
ICAgICAgIGludCB4LCB5OwogICAgICAgICAgICAgY2hpbGQtPmFic29sdXRlUG9zaXRpb25Gb3JD
b250ZW50KHgsIHkpOwogICAgICAgICAgICAgY2hpbGQtPmFic29sdXRlUmVjdHMocmVjdHMsIHgs
IHkpOwogICAgICAgICB9CiAgICAgfQotCi0gICAgcmV0dXJuIHJlY3RzOwogfQogCiAjdW5kZWYg
REVCVUdfTEFZT1VUCkluZGV4OiByZW5kZXJpbmcvUmVuZGVyQ29udGFpbmVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gcmVuZGVyaW5nL1JlbmRlckNvbnRhaW5lci5oCShyZXZpc2lvbiAxNjE3MCkKKysrIHJl
bmRlcmluZy9SZW5kZXJDb250YWluZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsMTEgKzYzLDEx
IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yQ29v
cmRpbmF0ZXMoaW50IHgsIGludCB5KTsKICAgICAKLSAgICB2aXJ0dWFsIERlcHJlY2F0ZWRWYWx1
ZUxpc3Q8SW50UmVjdD4gbGluZUJveFJlY3RzKCk7CisgICAgdmlydHVhbCB2b2lkIGxpbmVCb3hS
ZWN0cyhWZWN0b3I8SW50UmVjdD4mKTsKIAogcHJvdGVjdGVkOgotICAgIHZvaWQgc2V0Rmlyc3RD
aGlsZChSZW5kZXJPYmplY3QgKmZpcnN0KSB7IG1fZmlyc3QgPSBmaXJzdDsgfQotICAgIHZvaWQg
c2V0TGFzdENoaWxkKFJlbmRlck9iamVjdCAqbGFzdCkgeyBtX2xhc3QgPSBsYXN0OyB9CisgICAg
dm9pZCBzZXRGaXJzdENoaWxkKFJlbmRlck9iamVjdCogZmlyc3QpIHsgbV9maXJzdCA9IGZpcnN0
OyB9CisgICAgdm9pZCBzZXRMYXN0Q2hpbGQoUmVuZGVyT2JqZWN0KiBsYXN0KSB7IG1fbGFzdCA9
IGxhc3Q7IH0KIAogcHJvdGVjdGVkOgogICAgIFJlbmRlck9iamVjdCAqbV9maXJzdDsKSW5kZXg6
IHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5k
ZXJJbmxpbmUuY3BwCShyZXZpc2lvbiAxNjE3MCkKKysrIHJlbmRlcmluZy9SZW5kZXJJbmxpbmUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTMsMTkgKzI1MywxOSBAQCB2b2lkIFJlbmRlcklubGlu
ZTo6cGFpbnQoUGFpbnRJbmZvJiBpLCBpCiAgICAgcGFpbnRMaW5lcyhpLCBfdHgsIF90eSk7CiB9
CiAKLXZvaWQgUmVuZGVySW5saW5lOjphYnNvbHV0ZVJlY3RzKERlcHJlY2F0ZWRWYWx1ZUxpc3Q8
SW50UmVjdD4mIHJlY3RzLCBpbnQgX3R4LCBpbnQgX3R5KQordm9pZCBSZW5kZXJJbmxpbmU6OmFi
c29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgaW50IHR4LCBpbnQgdHkpCiB7CiAg
ICAgZm9yIChJbmxpbmVSdW5Cb3gqIGN1cnIgPSBmaXJzdExpbmVCb3goKTsgY3VycjsgY3VyciA9
IGN1cnItPm5leHRMaW5lQm94KCkpCi0gICAgICAgIHJlY3RzLmFwcGVuZChJbnRSZWN0KF90eCAr
IGN1cnItPnhQb3MoKSwgX3R5ICsgY3Vyci0+eVBvcygpLCBjdXJyLT53aWR0aCgpLCBjdXJyLT5o
ZWlnaHQoKSkpOworICAgICAgICByZWN0cy5hcHBlbmQoSW50UmVjdCh0eCArIGN1cnItPnhQb3Mo
KSwgdHkgKyBjdXJyLT55UG9zKCksIGN1cnItPndpZHRoKCksIGN1cnItPmhlaWdodCgpKSk7CiAg
ICAgCiAgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIgPSBmaXJzdENoaWxkKCk7IGN1cnI7IGN1
cnIgPSBjdXJyLT5uZXh0U2libGluZygpKQogICAgICAgICBpZiAoIWN1cnItPmlzVGV4dCgpKQot
ICAgICAgICAgICAgY3Vyci0+YWJzb2x1dGVSZWN0cyhyZWN0cywgX3R4ICsgY3Vyci0+eFBvcygp
LCBfdHkgKyBjdXJyLT55UG9zKCkpOworICAgICAgICAgICAgY3Vyci0+YWJzb2x1dGVSZWN0cyhy
ZWN0cywgdHggKyBjdXJyLT54UG9zKCksIHR5ICsgY3Vyci0+eVBvcygpKTsKICAgICAKICAgICBp
ZiAoY29udGludWF0aW9uKCkpCiAgICAgICAgIGNvbnRpbnVhdGlvbigpLT5hYnNvbHV0ZVJlY3Rz
KHJlY3RzLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3R4IC0gY29u
dGFpbmluZ0Jsb2NrKCktPnhQb3MoKSArIGNvbnRpbnVhdGlvbigpLT54UG9zKCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90eSAtIGNvbnRhaW5pbmdCbG9jaygpLT55
UG9zKCkgKyBjb250aW51YXRpb24oKS0+eVBvcygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdHggLSBjb250YWluaW5nQmxvY2soKS0+eFBvcygpICsgY29udGludWF0
aW9uKCktPnhQb3MoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHkg
LSBjb250YWluaW5nQmxvY2soKS0+eVBvcygpICsgY29udGludWF0aW9uKCktPnlQb3MoKSk7CiB9
CiAKIHZvaWQgUmVuZGVySW5saW5lOjpjYWxjTWluTWF4V2lkdGgoKQpJbmRleDogcmVuZGVyaW5n
L1JlbmRlcklubGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAko
cmV2aXNpb24gMTYxNzApCisrKyByZW5kZXJpbmcvUmVuZGVySW5saW5lLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTc1LDcgKzc1LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgaW50IG9mZnNldExlZnQo
KSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBvZmZzZXRUb3AoKSBjb25zdDsKIAotICAgIHZvaWQg
YWJzb2x1dGVSZWN0cyhEZXByZWNhdGVkVmFsdWVMaXN0PEludFJlY3Q+JiByZWN0cywgaW50IF90
eCwgaW50IF90eSk7CisgICAgdm9pZCBhYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGlu
dCB0eCwgaW50IHR5KTsKIAogICAgIHZpcnR1YWwgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9y
Q29vcmRpbmF0ZXMoaW50IHgsIGludCB5KTsKICAgICAKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJN
ZW51TGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAko
cmV2aXNpb24gMTYxNzApCisrKyByZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiUmVuZGVyUG9wdXBNZW51LmgiCiAj
aW5jbHVkZSAiUmVuZGVyVGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCisjaW5jbHVk
ZSAiVGV4dFN0eWxlLmgiCiAjaW5jbHVkZSA8bWF0aC5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3Rk
OwpJbmRleDogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDE2MTcwKQorKysgcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NDYsNDEgKzE1NDYsNDAgQEAgdm9pZCBS
ZW5kZXJPYmplY3Q6OnBhaW50Qm9yZGVyKEdyYXBoaWNzQwogICAgICAgICBwLT5yZXN0b3JlKCk7
IC8vIFVuZG8gdGhlIGNsaXAuCiB9CiAKLURlcHJlY2F0ZWRWYWx1ZUxpc3Q8SW50UmVjdD4gUmVu
ZGVyT2JqZWN0OjpsaW5lQm94UmVjdHMoKQordm9pZCBSZW5kZXJPYmplY3Q6OmxpbmVCb3hSZWN0
cyhWZWN0b3I8SW50UmVjdD4mKQogewotICAgIHJldHVybiBEZXByZWNhdGVkVmFsdWVMaXN0PElu
dFJlY3Q+KCk7CiB9CiAKLXZvaWQgUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVJlY3RzKERlcHJlY2F0
ZWRWYWx1ZUxpc3Q8SW50UmVjdD4mIHJlY3RzLCBpbnQgX3R4LCBpbnQgX3R5KQordm9pZCBSZW5k
ZXJPYmplY3Q6OmFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgaW50IHR4LCBp
bnQgdHkpCiB7CiAgICAgLy8gRm9yIGJsb2NrcyBpbnNpZGUgaW5saW5lcywgd2UgZ28gYWhlYWQg
YW5kIGluY2x1ZGUgbWFyZ2lucyBzbyB0aGF0IHdlIHJ1biByaWdodCB1cCB0byB0aGUKICAgICAv
LyBpbmxpbmUgYm94ZXMgYWJvdmUgYW5kIGJlbG93IHVzICh0aHVzIGdldHRpbmcgbWVyZ2VkIHdp
dGggdGhlbSB0byBmb3JtIGEgc2luZ2xlIGlycmVndWxhcgogICAgIC8vIHNoYXBlKS4KICAgICBp
ZiAoY29udGludWF0aW9uKCkpIHsKLSAgICAgICAgcmVjdHMuYXBwZW5kKEludFJlY3QoX3R4LCBf
dHkgLSBjb2xsYXBzZWRNYXJnaW5Ub3AoKSwgCisgICAgICAgIHJlY3RzLmFwcGVuZChJbnRSZWN0
KHR4LCB0eSAtIGNvbGxhcHNlZE1hcmdpblRvcCgpLCAKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHdpZHRoKCksIGhlaWdodCgpK2NvbGxhcHNlZE1hcmdpblRvcCgpK2NvbGxhcHNlZE1hcmdp
bkJvdHRvbSgpKSk7CiAgICAgICAgIGNvbnRpbnVhdGlvbigpLT5hYnNvbHV0ZVJlY3RzKHJlY3Rz
LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3R4IC0geFBvcygpICsg
Y29udGludWF0aW9uKCktPmNvbnRhaW5pbmdCbG9jaygpLT54UG9zKCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF90eSAtIHlQb3MoKSArIGNvbnRpbnVhdGlvbigpLT5j
b250YWluaW5nQmxvY2soKS0+eVBvcygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdHggLSB4UG9zKCkgKyBjb250aW51YXRpb24oKS0+Y29udGFpbmluZ0Jsb2NrKCkt
PnhQb3MoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHkgLSB5UG9z
KCkgKyBjb250aW51YXRpb24oKS0+Y29udGFpbmluZ0Jsb2NrKCktPnlQb3MoKSk7CiAgICAgfQog
ICAgIGVsc2UKLSAgICAgICAgcmVjdHMuYXBwZW5kKEludFJlY3QoX3R4LCBfdHksIHdpZHRoKCks
IGhlaWdodCgpICsgYm9yZGVyVG9wRXh0cmEoKSArIGJvcmRlckJvdHRvbUV4dHJhKCkpKTsKKyAg
ICAgICAgcmVjdHMuYXBwZW5kKEludFJlY3QodHgsIHR5LCB3aWR0aCgpLCBoZWlnaHQoKSArIGJv
cmRlclRvcEV4dHJhKCkgKyBib3JkZXJCb3R0b21FeHRyYSgpKSk7CiB9CiAKIEludFJlY3QgUmVu
ZGVyT2JqZWN0OjphYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpCiB7Ci0gICAgaW50IHggPSAwLCB5
ID0gMDsKKyAgICBpbnQgeCwgeTsKICAgICBhYnNvbHV0ZVBvc2l0aW9uKHgsIHkpOwotICAgIERl
cHJlY2F0ZWRWYWx1ZUxpc3Q8SW50UmVjdD4gcmVjdHM7CisgICAgVmVjdG9yPEludFJlY3Q+IHJl
Y3RzOwogICAgIGFic29sdXRlUmVjdHMocmVjdHMsIHgsIHkpOwogCi0gICAgaWYgKHJlY3RzLmlz
RW1wdHkoKSkKKyAgICBzaXplX3QgbiA9IHJlY3RzLnNpemUoKTsKKyAgICBpZiAoIW4pCiAgICAg
ICAgIHJldHVybiBJbnRSZWN0KCk7CiAKLSAgICBEZXByZWNhdGVkVmFsdWVMaXN0PEludFJlY3Q+
OjpDb25zdEl0ZXJhdG9yIGl0ID0gcmVjdHMuYmVnaW4oKTsKLSAgICBJbnRSZWN0IHJlc3VsdCA9
ICppdDsKLSAgICB3aGlsZSAoKytpdCAhPSByZWN0cy5lbmQoKSkKLSAgICAgICAgcmVzdWx0LnVu
aXRlKCppdCk7CisgICAgSW50UmVjdCByZXN1bHQgPSByZWN0c1swXTsKKyAgICBmb3IgKHNpemVf
dCBpID0gMTsgaSA8IG47ICsraSkKKyAgICAgICAgcmVzdWx0LnVuaXRlKHJlY3RzW2ldKTsKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0yNzQzLDcxICsyNzQyLDYzIEBAIHZvaWQgUmVuZGVy
T2JqZWN0Ojp1cGRhdGVXaWRnZXRQb3NpdGlvbigKIHsKIH0KIAotRGVwcmVjYXRlZFZhbHVlTGlz
dDxEYXNoYm9hcmRSZWdpb25WYWx1ZT4gUmVuZGVyT2JqZWN0Ojpjb21wdXRlRGFzaGJvYXJkUmVn
aW9ucygpCi17Ci0gICAgRGVwcmVjYXRlZFZhbHVlTGlzdDxEYXNoYm9hcmRSZWdpb25WYWx1ZT4g
cmVnaW9uczsKLSAgICBjb2xsZWN0RGFzaGJvYXJkUmVnaW9ucyhyZWdpb25zKTsKLSAgICByZXR1
cm4gcmVnaW9uczsKLX0KLQotdm9pZCBSZW5kZXJPYmplY3Q6OmFkZERhc2hib2FyZFJlZ2lvbnMg
KERlcHJlY2F0ZWRWYWx1ZUxpc3Q8RGFzaGJvYXJkUmVnaW9uVmFsdWU+JiByZWdpb25zKQordm9p
ZCBSZW5kZXJPYmplY3Q6OmFkZERhc2hib2FyZFJlZ2lvbnMoVmVjdG9yPERhc2hib2FyZFJlZ2lv
blZhbHVlPiYgcmVnaW9ucykKIHsKICAgICAvLyBDb252ZXJ0IHRoZSBzdHlsZSByZWdpb25zIHRv
IGFic29sdXRlIGNvb3JkaW5hdGVzLgogICAgIGlmIChzdHlsZSgpLT52aXNpYmlsaXR5KCkgIT0g
VklTSUJMRSkgCiAgICAgICAgIHJldHVybjsKIAotICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3Q8U3R5
bGVEYXNoYm9hcmRSZWdpb24+IHN0eWxlUmVnaW9ucyA9IHN0eWxlKCktPmRhc2hib2FyZFJlZ2lv
bnMoKTsKLSAgICBpZiAoc3R5bGVSZWdpb25zLmNvdW50KCkgPiAwKSB7Ci0gICAgICAgIHVuc2ln
bmVkIGksIGNvdW50ID0gc3R5bGVSZWdpb25zLmNvdW50KCk7Ci0gICAgICAgIGZvciAoaSA9IDA7
IGkgPCBjb3VudDsgaSsrKXsKLSAgICAgICAgICAgIFN0eWxlRGFzaGJvYXJkUmVnaW9uIHN0eWxl
UmVnaW9uID0gc3R5bGVSZWdpb25zW2ldOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpbnQg
dyA9IHdpZHRoKCk7Ci0gICAgICAgICAgICBpbnQgaCA9IGhlaWdodCgpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBEYXNoYm9hcmRSZWdpb25WYWx1ZSByZWdpb247Ci0gICAgICAgICAgICBy
ZWdpb24ubGFiZWwgPSBzdHlsZVJlZ2lvbi5sYWJlbDsKLSAgICAgICAgICAgIHJlZ2lvbi5ib3Vu
ZHMgPSBJbnRSZWN0ICgKLSAgICAgICAgICAgICAgICBzdHlsZVJlZ2lvbi5vZmZzZXQubGVmdC52
YWx1ZSgpLAotICAgICAgICAgICAgICAgIHN0eWxlUmVnaW9uLm9mZnNldC50b3AudmFsdWUoKSwK
LSAgICAgICAgICAgICAgICB3IC0gc3R5bGVSZWdpb24ub2Zmc2V0LmxlZnQudmFsdWUoKSAtIHN0
eWxlUmVnaW9uLm9mZnNldC5yaWdodC52YWx1ZSgpLAotICAgICAgICAgICAgICAgIGggLSBzdHls
ZVJlZ2lvbi5vZmZzZXQudG9wLnZhbHVlKCkgLSBzdHlsZVJlZ2lvbi5vZmZzZXQuYm90dG9tLnZh
bHVlKCkpOwotICAgICAgICAgICAgcmVnaW9uLnR5cGUgPSBzdHlsZVJlZ2lvbi50eXBlOwotCi0g
ICAgICAgICAgICByZWdpb24uY2xpcCA9IHJlZ2lvbi5ib3VuZHM7Ci0gICAgICAgICAgICBjb21w
dXRlQWJzb2x1dGVSZXBhaW50UmVjdChyZWdpb24uY2xpcCk7Ci0gICAgICAgICAgICBpZiAocmVn
aW9uLmNsaXAuaGVpZ2h0KCkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgcmVnaW9uLmNsaXAuc2V0
SGVpZ2h0KDApOwotICAgICAgICAgICAgICAgIHJlZ2lvbi5jbGlwLnNldFdpZHRoKDApOwotICAg
ICAgICAgICAgfQorICAgIGNvbnN0IFZlY3RvcjxTdHlsZURhc2hib2FyZFJlZ2lvbj4mIHN0eWxl
UmVnaW9ucyA9IHN0eWxlKCktPmRhc2hib2FyZFJlZ2lvbnMoKTsKKyAgICB1bnNpZ25lZCBpLCBj
b3VudCA9IHN0eWxlUmVnaW9ucy5zaXplKCk7CisgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBp
KyspeworICAgICAgICBTdHlsZURhc2hib2FyZFJlZ2lvbiBzdHlsZVJlZ2lvbiA9IHN0eWxlUmVn
aW9uc1tpXTsKKyAgICAgICAgCisgICAgICAgIGludCB3ID0gd2lkdGgoKTsKKyAgICAgICAgaW50
IGggPSBoZWlnaHQoKTsKKyAgICAgICAgCisgICAgICAgIERhc2hib2FyZFJlZ2lvblZhbHVlIHJl
Z2lvbjsKKyAgICAgICAgcmVnaW9uLmxhYmVsID0gc3R5bGVSZWdpb24ubGFiZWw7CisgICAgICAg
IHJlZ2lvbi5ib3VuZHMgPSBJbnRSZWN0ICgKKyAgICAgICAgICAgIHN0eWxlUmVnaW9uLm9mZnNl
dC5sZWZ0LnZhbHVlKCksCisgICAgICAgICAgICBzdHlsZVJlZ2lvbi5vZmZzZXQudG9wLnZhbHVl
KCksCisgICAgICAgICAgICB3IC0gc3R5bGVSZWdpb24ub2Zmc2V0LmxlZnQudmFsdWUoKSAtIHN0
eWxlUmVnaW9uLm9mZnNldC5yaWdodC52YWx1ZSgpLAorICAgICAgICAgICAgaCAtIHN0eWxlUmVn
aW9uLm9mZnNldC50b3AudmFsdWUoKSAtIHN0eWxlUmVnaW9uLm9mZnNldC5ib3R0b20udmFsdWUo
KSk7CisgICAgICAgIHJlZ2lvbi50eXBlID0gc3R5bGVSZWdpb24udHlwZTsKKworICAgICAgICBy
ZWdpb24uY2xpcCA9IHJlZ2lvbi5ib3VuZHM7CisgICAgICAgIGNvbXB1dGVBYnNvbHV0ZVJlcGFp
bnRSZWN0KHJlZ2lvbi5jbGlwKTsKKyAgICAgICAgaWYgKHJlZ2lvbi5jbGlwLmhlaWdodCgpIDwg
MCkgeworICAgICAgICAgICAgcmVnaW9uLmNsaXAuc2V0SGVpZ2h0KDApOworICAgICAgICAgICAg
cmVnaW9uLmNsaXAuc2V0V2lkdGgoMCk7CisgICAgICAgIH0KIAotICAgICAgICAgICAgaW50IHgs
IHk7Ci0gICAgICAgICAgICBhYnNvbHV0ZVBvc2l0aW9uKHgsIHkpOwotICAgICAgICAgICAgcmVn
aW9uLmJvdW5kcy5zZXRYKHggKyBzdHlsZVJlZ2lvbi5vZmZzZXQubGVmdC52YWx1ZSgpKTsKLSAg
ICAgICAgICAgIHJlZ2lvbi5ib3VuZHMuc2V0WSh5ICsgc3R5bGVSZWdpb24ub2Zmc2V0LnRvcC52
YWx1ZSgpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZmxvYXQgcGFnZVNjYWxlRmFjdG9y
ID0gZG9jdW1lbnQoKS0+ZnJhbWUoKSA/IHNjYWxlRmFjdG9yKGRvY3VtZW50KCktPmZyYW1lKCkt
PnBhZ2UoKSkgOiAxLjBmOworICAgICAgICBpbnQgeCwgeTsKKyAgICAgICAgYWJzb2x1dGVQb3Np
dGlvbih4LCB5KTsKKyAgICAgICAgcmVnaW9uLmJvdW5kcy5zZXRYKHggKyBzdHlsZVJlZ2lvbi5v
ZmZzZXQubGVmdC52YWx1ZSgpKTsKKyAgICAgICAgcmVnaW9uLmJvdW5kcy5zZXRZKHkgKyBzdHls
ZVJlZ2lvbi5vZmZzZXQudG9wLnZhbHVlKCkpOworICAgICAgICAKKyAgICAgICAgaWYgKGRvY3Vt
ZW50KCktPmZyYW1lKCkpIHsKKyAgICAgICAgICAgIGZsb2F0IHBhZ2VTY2FsZUZhY3RvciA9IHNj
YWxlRmFjdG9yKGRvY3VtZW50KCktPmZyYW1lKCktPnBhZ2UoKSk7CiAgICAgICAgICAgICBpZiAo
cGFnZVNjYWxlRmFjdG9yICE9IDEuMGYpIHsKICAgICAgICAgICAgICAgICByZWdpb24uYm91bmRz
LnNjYWxlKHBhZ2VTY2FsZUZhY3Rvcik7CiAgICAgICAgICAgICAgICAgcmVnaW9uLmNsaXAuc2Nh
bGUocGFnZVNjYWxlRmFjdG9yKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgcmVnaW9ucy5hcHBlbmQocmVnaW9uKTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgcmVnaW9ucy5hcHBlbmQocmVnaW9uKTsKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyT2JqZWN0
Ojpjb2xsZWN0RGFzaGJvYXJkUmVnaW9ucyAoRGVwcmVjYXRlZFZhbHVlTGlzdDxEYXNoYm9hcmRS
ZWdpb25WYWx1ZT4mIHJlZ2lvbnMpCit2b2lkIFJlbmRlck9iamVjdDo6Y29sbGVjdERhc2hib2Fy
ZFJlZ2lvbnMoVmVjdG9yPERhc2hib2FyZFJlZ2lvblZhbHVlPiYgcmVnaW9ucykKIHsKICAgICAv
LyBSZW5kZXJUZXh0cyBkb24ndCBoYXZlIHRoZWlyIG93biBzdHlsZSwgdGhleSBqdXN0IHVzZSB0
aGVpciBwYXJlbnQncyBzdHlsZSwKICAgICAvLyBzbyB3ZSBkb24ndCB3YW50IHRvIGluY2x1ZGUg
dGhlbS4KICAgICBpZiAoaXNUZXh0KCkpCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAg
YWRkRGFzaGJvYXJkUmVnaW9ucyAocmVnaW9ucyk7Ci0gICAgZm9yIChSZW5kZXJPYmplY3QqIGN1
cnIgPSBmaXJzdENoaWxkKCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0U2libGluZygpKSB7Cisg
ICAgYWRkRGFzaGJvYXJkUmVnaW9ucyhyZWdpb25zKTsKKyAgICBmb3IgKFJlbmRlck9iamVjdCog
Y3VyciA9IGZpcnN0Q2hpbGQoKTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRTaWJsaW5nKCkpCiAg
ICAgICAgIGN1cnItPmNvbGxlY3REYXNoYm9hcmRSZWdpb25zKHJlZ2lvbnMpOwotICAgIH0KIH0K
IAogCkluZGV4OiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5oCShyZXZpc2lvbiAxNjE3MCkKKysrIHJlbmRlcmluZy9SZW5kZXJP
YmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBSZW5kZXJP
YmplY3RfaAogCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCIKKyNpbmNsdWRlICJE
ZXByZWNhdGVkVmFsdWVMaXN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRl
ICJTY3JvbGxCYXIuaCIKICNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24uaCIKQEAgLTQ3MywyMiAr
NDc0LDEzIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVXaWRnZXRQb3NpdGlv
bigpOwogICAgIAotICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3Q8RGFzaGJvYXJkUmVnaW9uVmFsdWU+
IGNvbXB1dGVEYXNoYm9hcmRSZWdpb25zKCk7Ci0gICAgdm9pZCBhZGREYXNoYm9hcmRSZWdpb25z
IChEZXByZWNhdGVkVmFsdWVMaXN0PERhc2hib2FyZFJlZ2lvblZhbHVlPiYgcmVnaW9ucyk7Ci0g
ICAgdm9pZCBjb2xsZWN0RGFzaGJvYXJkUmVnaW9ucyAoRGVwcmVjYXRlZFZhbHVlTGlzdDxEYXNo
Ym9hcmRSZWdpb25WYWx1ZT4mIHJlZ2lvbnMpOworICAgIHZvaWQgYWRkRGFzaGJvYXJkUmVnaW9u
cyhWZWN0b3I8RGFzaGJvYXJkUmVnaW9uVmFsdWU+Jik7CisgICAgdm9pZCBjb2xsZWN0RGFzaGJv
YXJkUmVnaW9ucyhWZWN0b3I8RGFzaGJvYXJkUmVnaW9uVmFsdWU+Jik7CiAKICAgICAvLyBkb2Vz
IGEgcXVlcnkgb24gdGhlIHJlbmRlcnRyZWUgYW5kIGZpbmRzIHRoZSBpbm5lcm5vZGUKICAgICAv
LyBhbmQgb3ZlclVSTCBmb3IgdGhlIGdpdmVuIHBvc2l0aW9uCiAgICAgLy8gaWYgcmVhZG9ubHkg
PT0gZmFsc2UsIGl0IHdpbGwgcmVjYWxjIGhvdmVyIHN0eWxlcyBhY2NvcmRpbmdseQotICAgIGNs
YXNzIE5vZGVJbmZvCi0gICAgewotICAgICAgICBmcmllbmQgY2xhc3MgUmVuZGVyTGF5ZXI7Ci0g
ICAgICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJJbWFnZTsKLSAgICAgICAgZnJpZW5kIGNsYXNzIFJl
bmRlclRleHQ7Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJJbmxpbmU7Ci0gICAgICAgIGZy
aWVuZCBjbGFzcyBSZW5kZXJPYmplY3Q7Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJGcmFt
ZVNldDsKLSAgICAgICAgZnJpZW5kIGNsYXNzIEhUTUxBcmVhRWxlbWVudDsKKyAgICBjbGFzcyBO
b2RlSW5mbyB7CiAgICAgcHVibGljOgogICAgICAgICBOb2RlSW5mbyhib29sIHJlYWRvbmx5LCBi
b29sIGFjdGl2ZSwgYm9vbCBtb3VzZU1vdmUgPSBmYWxzZSkKICAgICAgICAgICAgIDogbV9pbm5l
ck5vZGUoMCksIG1faW5uZXJOb25TaGFyZWROb2RlKDApLCBtX2lubmVyVVJMRWxlbWVudCgwKSwg
bV9yZWFkb25seShyZWFkb25seSksIG1fYWN0aXZlKGFjdGl2ZSksIG1fbW91c2VNb3ZlKG1vdXNl
TW92ZSkKQEAgLTY3Nyw5ICs2NjksOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBpbnQgYm9yZGVy
TGVmdCgpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCktPmJvcmRlckxlZnRXaWR0aCgpOyB9CiAgICAg
dmlydHVhbCBpbnQgYm9yZGVyUmlnaHQoKSBjb25zdCB7IHJldHVybiBzdHlsZSgpLT5ib3JkZXJS
aWdodFdpZHRoKCk7IH0KIAotICAgIHZpcnR1YWwgRGVwcmVjYXRlZFZhbHVlTGlzdDxJbnRSZWN0
PiBsaW5lQm94UmVjdHMoKTsKKyAgICB2aXJ0dWFsIHZvaWQgbGluZUJveFJlY3RzKFZlY3RvcjxJ
bnRSZWN0PiYpOwogCi0gICAgdmlydHVhbCB2b2lkIGFic29sdXRlUmVjdHMoRGVwcmVjYXRlZFZh
bHVlTGlzdDxJbnRSZWN0PiYgcmVjdHMsIGludCB0eCwgaW50IHR5KTsKKyAgICB2aXJ0dWFsIHZv
aWQgYWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBpbnQgdHgsIGludCB0eSk7CiAgICAg
SW50UmVjdCBhYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpOwogICAgIAogICAgIC8vIHRoZSByZWN0
IHRoYXQgd2lsbCBiZSBwYWludGVkIGlmIHRoaXMgb2JqZWN0IGlzIHBhc3NlZCBhcyB0aGUgcGFp
bnRpbmdSb290CkBAIC03MDksNyArNzAxLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBz
ZXRUYWJsZShSZW5kZXJUYWJsZSopIHt9OwogCiAgICAgLy8gVXNlZCBieSBjb2xsYXBzZWQgYm9y
ZGVyIHRhYmxlcy4KLSAgICB2aXJ0dWFsIHZvaWQgY29sbGVjdEJvcmRlcnMoRGVwcmVjYXRlZFZh
bHVlTGlzdDxDb2xsYXBzZWRCb3JkZXJWYWx1ZT4mIGJvcmRlclN0eWxlcyk7CisgICAgdmlydHVh
bCB2b2lkIGNvbGxlY3RCb3JkZXJzKERlcHJlY2F0ZWRWYWx1ZUxpc3Q8Q29sbGFwc2VkQm9yZGVy
VmFsdWU+Jik7CiAKICAgICAvLyBSZXBhaW50IHRoZSBlbnRpcmUgb2JqZWN0LiAgQ2FsbGVkIHdo
ZW4sIGUuZy4sIHRoZSBjb2xvciBvZiBhIGJvcmRlciBjaGFuZ2VzLCBvciB3aGVuIGEgYm9yZGVy
CiAgICAgLy8gc3R5bGUgY2hhbmdlcy4KSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJQb3B1cE1lbnVN
YWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlclBvcHVwTWVudU1hYy5tbQkocmV2
aXNpb24gMTYxNzApCisrKyByZW5kZXJpbmcvUmVuZGVyUG9wdXBNZW51TWFjLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIlJl
bmRlclBvcHVwTWVudU1hYy5oIgogCisjaW1wb3J0ICJGb250RGF0YS5oIgogI2ltcG9ydCAiRnJh
bWVNYWMuaCIKICNpbXBvcnQgIkZyYW1lVmlldy5oIgogI2ltcG9ydCAiSFRNTE5hbWVzLmgiCkBA
IC04MSw3ICs4Miw3IEBAIHZvaWQgUmVuZGVyUG9wdXBNZW51TWFjOjpzaG93UG9wdXAoY29uc3QK
ICAgICBbcG9wdXAgYXR0YWNoUG9wVXBXaXRoRnJhbWU6ciBpblZpZXc6dmlld107CiAgICAgW3Bv
cHVwIHNlbGVjdEl0ZW1BdEluZGV4OmluZGV4XTsKICAgICAKLSAgICBOU0ZvbnQqIGZvbnQgPSBz
dHlsZSgpLT5mb250KCkuZ2V0TlNGb250KCk7CisgICAgTlNGb250KiBmb250ID0gc3R5bGUoKS0+
Zm9udCgpLnByaW1hcnlGb250KCktPmdldE5TRm9udCgpOwogCiAgICAgTlNSZWN0IHRpdGxlRnJh
bWUgPSBbcG9wdXAgdGl0bGVSZWN0Rm9yQm91bmRzOnJdOwogICAgIGlmICh0aXRsZUZyYW1lLnNp
emUud2lkdGggPD0gMCB8fCB0aXRsZUZyYW1lLnNpemUuaGVpZ2h0IDw9IDApCkBAIC0xMzAsNyAr
MTMxLDcgQEAgdm9pZCBSZW5kZXJQb3B1cE1lbnVNYWM6OmFkZEdyb3VwTGFiZWwoSAogCiAgICAg
TlNNdXRhYmxlRGljdGlvbmFyeSogYXR0cmlidXRlcyA9IFtbTlNNdXRhYmxlRGljdGlvbmFyeSBh
bGxvY10gaW5pdF07CiAgICAgaWYgKHMtPmZvbnQoKSAhPSBGb250KCkpCi0gICAgICAgIFthdHRy
aWJ1dGVzIHNldE9iamVjdDpzLT5mb250KCkuZ2V0TlNGb250KCkgZm9yS2V5Ok5TRm9udEF0dHJp
YnV0ZU5hbWVdOworICAgICAgICBbYXR0cmlidXRlcyBzZXRPYmplY3Q6cy0+Zm9udCgpLnByaW1h
cnlGb250KCktPmdldE5TRm9udCgpIGZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKICAgICAv
LyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIHN0eWxpbmcgdGhlIGZvcmVncm91bmQgYW5kIGJhY2tn
cm91bmQgY29sb3JzLgogICAgIE5TQXR0cmlidXRlZFN0cmluZyogc3RyaW5nID0gW1tOU0F0dHJp
YnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOnRleHQgYXR0cmlidXRlczphdHRyaWJ1
dGVzXTsKICAgICBbYXR0cmlidXRlcyByZWxlYXNlXTsKQEAgLTE1Nyw3ICsxNTgsNyBAQCB2b2lk
IFJlbmRlclBvcHVwTWVudU1hYzo6YWRkT3B0aW9uKEhUTUxPCiAgICAgICAgIAogICAgIE5TTXV0
YWJsZURpY3Rpb25hcnkqIGF0dHJpYnV0ZXMgPSBbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2Nd
IGluaXRdOwogICAgIGlmIChzLT5mb250KCkgIT0gRm9udCgpKQotICAgICAgICBbYXR0cmlidXRl
cyBzZXRPYmplY3Q6cy0+Zm9udCgpLmdldE5TRm9udCgpIGZvcktleTpOU0ZvbnRBdHRyaWJ1dGVO
YW1lXTsKKyAgICAgICAgW2F0dHJpYnV0ZXMgc2V0T2JqZWN0OnMtPmZvbnQoKS5wcmltYXJ5Rm9u
dCgpLT5nZXROU0ZvbnQoKSBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CiAgICAgLy8gRklY
TUU6IEFkZCBzdXBwb3J0IGZvciBzdHlsaW5nIHRoZSBmb3JlZ3JvdW5kIGFuZCBiYWNrZ3JvdW5k
IGNvbG9ycy4KICAgICAvLyBGSVhNRTogRmluZCBhIHdheSB0byBjdXN0b21pemUgdGV4dCBjb2xv
ciB3aGVuIGFuIGl0ZW0gaXMgaGlnaGxpZ2h0ZWQuCiAgICAgTlNBdHRyaWJ1dGVkU3RyaW5nKiBz
dHJpbmcgPSBbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6dGV4dCBh
dHRyaWJ1dGVzOmF0dHJpYnV0ZXNdOwpJbmRleDogcmVuZGVyaW5nL1JlbmRlclN0eWxlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyU3R5bGUuY3BwCShyZXZpc2lvbiAxNjE3MCkK
KysrIHJlbmRlcmluZy9SZW5kZXJTdHlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExODIsMTUg
KzExODIsMTUgQEAgYm9vbCBTaGFkb3dEYXRhOjpvcGVyYXRvcj09KGNvbnN0IFNoYWRvdwogICAg
IHJldHVybiB4ID09IG8ueCAmJiB5ID09IG8ueSAmJiBibHVyID09IG8uYmx1ciAmJiBjb2xvciA9
PSBvLmNvbG9yOwogfQogCi1jb25zdCBEZXByZWNhdGVkVmFsdWVMaXN0PFN0eWxlRGFzaGJvYXJk
UmVnaW9uPiYgUmVuZGVyU3R5bGU6OmluaXRpYWxEYXNoYm9hcmRSZWdpb25zKCkKK2NvbnN0IFZl
Y3RvcjxTdHlsZURhc2hib2FyZFJlZ2lvbj4mIFJlbmRlclN0eWxlOjppbml0aWFsRGFzaGJvYXJk
UmVnaW9ucygpCiB7IAotICAgIHN0YXRpYyBEZXByZWNhdGVkVmFsdWVMaXN0PFN0eWxlRGFzaGJv
YXJkUmVnaW9uPiBlbXB0eUxpc3Q7CisgICAgc3RhdGljIFZlY3RvcjxTdHlsZURhc2hib2FyZFJl
Z2lvbj4gZW1wdHlMaXN0OwogICAgIHJldHVybiBlbXB0eUxpc3Q7CiB9CiAKLWNvbnN0IERlcHJl
Y2F0ZWRWYWx1ZUxpc3Q8U3R5bGVEYXNoYm9hcmRSZWdpb24+JiBSZW5kZXJTdHlsZTo6bm9uZURh
c2hib2FyZFJlZ2lvbnMoKQorY29uc3QgVmVjdG9yPFN0eWxlRGFzaGJvYXJkUmVnaW9uPiYgUmVu
ZGVyU3R5bGU6Om5vbmVEYXNoYm9hcmRSZWdpb25zKCkKIHsgCi0gICAgc3RhdGljIERlcHJlY2F0
ZWRWYWx1ZUxpc3Q8U3R5bGVEYXNoYm9hcmRSZWdpb24+IG5vbmVMaXN0OworICAgIHN0YXRpYyBW
ZWN0b3I8U3R5bGVEYXNoYm9hcmRSZWdpb24+IG5vbmVMaXN0OwogICAgIHN0YXRpYyBib29sIG5v
bmVMaXN0SW5pdGlhbGl6ZWQgPSBmYWxzZTsKICAgICAKICAgICBpZiAoIW5vbmVMaXN0SW5pdGlh
bGl6ZWQpIHsKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJTdHlsZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJl
bmRlcmluZy9SZW5kZXJTdHlsZS5oCShyZXZpc2lvbiAxNjE3MCkKKysrIHJlbmRlcmluZy9SZW5k
ZXJTdHlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw4IEBACiAjaW5jbHVkZSAiSW50
UmVjdC5oIgogI2luY2x1ZGUgIkxlbmd0aC5oIgogI2luY2x1ZGUgIlNoYXJlZC5oIgotI2luY2x1
ZGUgIkRlcHJlY2F0ZWRWYWx1ZUxpc3QuaCIKKyNpbmNsdWRlICJUZXh0RGlyZWN0aW9uLmgiCisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiAjaWZkZWYgU1ZHX1NVUFBPUlQKICNpbmNsdWRlICJT
VkdSZW5kZXJTdHlsZS5oIgpAQCAtNzMzLDcgKzczNCw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAg
CiAgICAgaW50IGxpbmVDbGFtcDsgICAgICAgICAvLyBBbiBBcHBsZSBleHRlbnNpb24uICBOb3Qg
cmVhbGx5IENTUzMgYnV0IG5vdCB3b3J0aCBtYWtpbmcgYSBuZXcgc3RydWN0IG92ZXIuCi0gICAg
RGVwcmVjYXRlZFZhbHVlTGlzdDxTdHlsZURhc2hib2FyZFJlZ2lvbj4gbV9kYXNoYm9hcmRSZWdp
b25zOworICAgIFZlY3RvcjxTdHlsZURhc2hib2FyZFJlZ2lvbj4gbV9kYXNoYm9hcmRSZWdpb25z
OwogICAgIGZsb2F0IG9wYWNpdHk7ICAgICAgICAgLy8gV2hldGhlciBvciBub3Qgd2UncmUgdHJh
bnNwYXJlbnQuCiAgICAgRGF0YVJlZjxTdHlsZUZsZXhpYmxlQm94RGF0YT4gZmxleGlibGVCb3g7
IC8vIEZsZXhpYmxlIGJveCBwcm9wZXJ0aWVzIAogICAgIERhdGFSZWY8U3R5bGVNYXJxdWVlRGF0
YT4gbWFycXVlZTsgLy8gTWFycXVlZSBwcm9wZXJ0aWVzCkBAIC0xMzg2LDggKzEzODcsOCBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzZXRNaW5IZWlnaHQoTGVuZ3RoIHYpIHsgU0VUX1ZBUihib3gsbWlu
X2hlaWdodCx2KSB9CiAgICAgdm9pZCBzZXRNYXhIZWlnaHQoTGVuZ3RoIHYpIHsgU0VUX1ZBUihi
b3gsbWF4X2hlaWdodCx2KSB9CiAKLSAgICBEZXByZWNhdGVkVmFsdWVMaXN0PFN0eWxlRGFzaGJv
YXJkUmVnaW9uPiBkYXNoYm9hcmRSZWdpb25zKCkgY29uc3QgeyByZXR1cm4gY3NzM05vbkluaGVy
aXRlZERhdGEtPm1fZGFzaGJvYXJkUmVnaW9uczsgfQotICAgIHZvaWQgc2V0RGFzaGJvYXJkUmVn
aW9ucyhEZXByZWNhdGVkVmFsdWVMaXN0PFN0eWxlRGFzaGJvYXJkUmVnaW9uPiByZWdpb25zKSB7
IFNFVF9WQVIoY3NzM05vbkluaGVyaXRlZERhdGEsbV9kYXNoYm9hcmRSZWdpb25zLHJlZ2lvbnMp
OyB9CisgICAgVmVjdG9yPFN0eWxlRGFzaGJvYXJkUmVnaW9uPiBkYXNoYm9hcmRSZWdpb25zKCkg
Y29uc3QgeyByZXR1cm4gY3NzM05vbkluaGVyaXRlZERhdGEtPm1fZGFzaGJvYXJkUmVnaW9uczsg
fQorICAgIHZvaWQgc2V0RGFzaGJvYXJkUmVnaW9ucyhWZWN0b3I8U3R5bGVEYXNoYm9hcmRSZWdp
b24+IHJlZ2lvbnMpIHsgU0VUX1ZBUihjc3MzTm9uSW5oZXJpdGVkRGF0YSxtX2Rhc2hib2FyZFJl
Z2lvbnMscmVnaW9ucyk7IH0KICAgICB2b2lkIHNldERhc2hib2FyZFJlZ2lvbihpbnQgdHlwZSwg
Y29uc3QgU3RyaW5nJiBsYWJlbCwgTGVuZ3RoIHQsIExlbmd0aCByLCBMZW5ndGggYiwgTGVuZ3Ro
IGwsIGJvb2wgYXBwZW5kKSB7CiAgICAgICAgIFN0eWxlRGFzaGJvYXJkUmVnaW9uIHJlZ2lvbjsK
ICAgICAgICAgcmVnaW9uLmxhYmVsID0gbGFiZWw7CkBAIC0xNzE1LDggKzE3MTYsOCBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIGludCBpbml0aWFsTGluZUNsYW1wKCkgeyByZXR1cm4gLTE7IH0KICAg
ICBzdGF0aWMgYm9vbCBpbml0aWFsVGV4dFNpemVBZGp1c3QoKSB7IHJldHVybiB0cnVlOyB9CiAg
ICAgc3RhdGljIEVUZXh0U2VjdXJpdHkgaW5pdGlhbFRleHRTZWN1cml0eSgpIHsgcmV0dXJuIFRT
Tk9ORTsgfQotICAgIHN0YXRpYyBjb25zdCBEZXByZWNhdGVkVmFsdWVMaXN0PFN0eWxlRGFzaGJv
YXJkUmVnaW9uPiYgaW5pdGlhbERhc2hib2FyZFJlZ2lvbnMoKTsKLSAgICBzdGF0aWMgY29uc3Qg
RGVwcmVjYXRlZFZhbHVlTGlzdDxTdHlsZURhc2hib2FyZFJlZ2lvbj4mIG5vbmVEYXNoYm9hcmRS
ZWdpb25zKCk7CisgICAgc3RhdGljIGNvbnN0IFZlY3RvcjxTdHlsZURhc2hib2FyZFJlZ2lvbj4m
IGluaXRpYWxEYXNoYm9hcmRSZWdpb25zKCk7CisgICAgc3RhdGljIGNvbnN0IFZlY3RvcjxTdHls
ZURhc2hib2FyZFJlZ2lvbj4mIG5vbmVEYXNoYm9hcmRSZWdpb25zKCk7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiByZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCShyZXZpc2lvbiAxNjE3MCkKKysrIHJlbmRl
cmluZy9SZW5kZXJUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2lu
Y2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyQXJlbmEuaCIKICNpbmNsdWRlICJSZW5k
ZXJCbG9jay5oIgorI2luY2x1ZGUgIlRleHRTdHlsZS5oIgogI2luY2x1ZGUgImJyZWFrX2xpbmVz
LmgiCiAjaW5jbHVkZSA8dW5pY29kZS91YnJrLmg+CiAjaW5jbHVkZSA8d3RmL0Fsd2F5c0lubGlu
ZS5oPgpAQCAtMjA5LDIyICsyMTAsMTcgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBSZW5kZXJU
ZXh0OjpvcmlnaQogICAgIHJldHVybiBlbGVtZW50KCkgPyBlbGVtZW50KCktPnN0cmluZygpIDog
MDsKIH0KIAotdm9pZCBSZW5kZXJUZXh0OjphYnNvbHV0ZVJlY3RzKERlcHJlY2F0ZWRWYWx1ZUxp
c3Q8SW50UmVjdD4mIHJlY3RzLCBpbnQgX3R4LCBpbnQgX3R5KQordm9pZCBSZW5kZXJUZXh0Ojph
YnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCB0eCwgaW50IHR5KQogewog
ICAgIGZvciAoSW5saW5lVGV4dEJveCogYm94ID0gZmlyc3RUZXh0Qm94KCk7IGJveDsgYm94ID0g
Ym94LT5uZXh0VGV4dEJveCgpKQotICAgICAgICByZWN0cy5hcHBlbmQoSW50UmVjdChfdHggKyBi
b3gtPnhQb3MoKSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBfdHkgKyBib3gtPnlQb3Mo
KSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBib3gtPndpZHRoKCksIAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYm94LT5oZWlnaHQoKSkpOworICAgICAgICByZWN0cy5hcHBlbmQo
SW50UmVjdCh0eCArIGJveC0+eFBvcygpLCB0eSArIGJveC0+eVBvcygpLCBib3gtPndpZHRoKCks
IGJveC0+aGVpZ2h0KCkpKTsKIH0KIAotRGVwcmVjYXRlZFZhbHVlTGlzdDxJbnRSZWN0PiBSZW5k
ZXJUZXh0OjpsaW5lQm94UmVjdHMoKQordm9pZCBSZW5kZXJUZXh0OjpsaW5lQm94UmVjdHMoVmVj
dG9yPEludFJlY3Q+JiByZWN0cykKIHsKLSAgICBEZXByZWNhdGVkVmFsdWVMaXN0PEludFJlY3Q+
IHJlY3RzOwotICAgIGludCB4ID0gMCwgeSA9IDA7CisgICAgaW50IHgsIHk7CiAgICAgYWJzb2x1
dGVQb3NpdGlvbkZvckNvbnRlbnQoeCwgeSk7CiAgICAgYWJzb2x1dGVSZWN0cyhyZWN0cywgeCwg
eSk7Ci0gICAgcmV0dXJuIHJlY3RzOwogfQogCiBJbmxpbmVUZXh0Qm94KiBSZW5kZXJUZXh0Ojpm
aW5kTmV4dElubGluZVRleHRCb3goaW50IG9mZnNldCwgaW50ICZwb3MpIGNvbnN0CkluZGV4OiBy
ZW5kZXJpbmcvUmVuZGVyVGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJUZXh0
LmgJKHJldmlzaW9uIDE2MTcwKQorKysgcmVuZGVyaW5nL1JlbmRlclRleHQuaAkod29ya2luZyBj
b3B5KQpAQCAtNzAsMTEgKzcwLDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQo
UGFpbnRJbmZvJiBpLCBpbnQgdHgsIGludCB0eSkgeyBhc3NlcnQoZmFsc2UpOyB9CiAgICAgdmly
dHVhbCB2b2lkIGxheW91dCgpIHsgYXNzZXJ0KGZhbHNlKTsgfQogCi0gICAgdmlydHVhbCBib29s
IG5vZGVBdFBvaW50KE5vZGVJbmZvJiBpbmZvLCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rp
b24pIHsgYXNzZXJ0KGZhbHNlKTsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIG5v
ZGVBdFBvaW50KE5vZGVJbmZvJiwgaW50LCBpbnQsIGludCwgaW50LCBIaXRUZXN0QWN0aW9uKSB7
IGFzc2VydChmYWxzZSk7IHJldHVybiBmYWxzZTsgfQogCi0gICAgdmlydHVhbCB2b2lkIGFic29s
dXRlUmVjdHMoRGVwcmVjYXRlZFZhbHVlTGlzdDxJbnRSZWN0PiYgcmVjdHMsIGludCBfdHgsIGlu
dCBfdHkpOwotICAgIHZpcnR1YWwgRGVwcmVjYXRlZFZhbHVlTGlzdDxJbnRSZWN0PiBsaW5lQm94
UmVjdHMoKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4m
LCBpbnQgdHgsIGludCB0eSk7CisgICAgdmlydHVhbCB2b2lkIGxpbmVCb3hSZWN0cyhWZWN0b3I8
SW50UmVjdD4mKTsKIAogICAgIHZpcnR1YWwgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yQ29v
cmRpbmF0ZXMoaW50IHgsIGludCB5KTsKIApJbmRleDogcmVuZGVyaW5nL1JlbmRlclRleHRDb250
cm9sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCShy
ZXZpc2lvbiAxNjE3MCkKKysrIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgogI2lu
Y2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIK
KyNpbmNsdWRlICJUZXh0U3R5bGUuaCIKICNpbmNsdWRlICJodG1sZWRpdGluZy5oIgogI2luY2x1
ZGUgInZpc2libGVfdW5pdHMuaCIKICNpbmNsdWRlIDxtYXRoLmg+CkluZGV4OiByZW5kZXJpbmcv
UmVuZGVyVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCShy
ZXZpc2lvbiAxNjE3MCkKKysrIHJlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjU3LDkgKzI1Nyw5IEBAIHZvaWQgUmVuZGVyVmlldzo6Y29tcHV0ZUFic29sdXRlUmVw
YWludFIKICAgICAgICAgci5tb3ZlKG1fZnJhbWVWaWV3LT5jb250ZW50c1goKSwgbV9mcmFtZVZp
ZXctPmNvbnRlbnRzWSgpKTsKIH0KIAotdm9pZCBSZW5kZXJWaWV3OjphYnNvbHV0ZVJlY3RzKERl
cHJlY2F0ZWRWYWx1ZUxpc3Q8SW50UmVjdD4mIHJlY3RzLCBpbnQgX3R4LCBpbnQgX3R5KQordm9p
ZCBSZW5kZXJWaWV3OjphYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCB0
eCwgaW50IHR5KQogewotICAgIHJlY3RzLmFwcGVuZChJbnRSZWN0KF90eCwgX3R5LCBtX2xheWVy
LT53aWR0aCgpLCBtX2xheWVyLT5oZWlnaHQoKSkpOworICAgIHJlY3RzLmFwcGVuZChJbnRSZWN0
KHR4LCB0eSwgbV9sYXllci0+d2lkdGgoKSwgbV9sYXllci0+aGVpZ2h0KCkpKTsKIH0KIAogUmVu
ZGVyT2JqZWN0KiByZW5kZXJlckFmdGVyUG9zaXRpb24oUmVuZGVyT2JqZWN0KiBvYmplY3QsIHVu
c2lnbmVkIG9mZnNldCkKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJWaWV3LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gcmVuZGVyaW5nL1JlbmRlclZpZXcuaAkocmV2aXNpb24gMTYxNzApCisrKyByZW5kZXJpbmcv
UmVuZGVyVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBAIHByaXZhdGU6CiBw
dWJsaWM6CiAgICAgaW50IHRydW5jYXRlZEF0KCkgY29uc3QgeyByZXR1cm4gbV90cnVuY2F0ZWRB
dDsgfQogCi0gICAgdmlydHVhbCB2b2lkIGFic29sdXRlUmVjdHMoRGVwcmVjYXRlZFZhbHVlTGlz
dDxJbnRSZWN0PiYgcmVjdHMsIGludCBfdHgsIGludCBfdHkpOworICAgIHZpcnR1YWwgdm9pZCBh
YnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGludCB0eCwgaW50IHR5KTsKICAgICAKICAg
ICBJbnRSZWN0IHNlbGVjdGlvblJlY3QoKSBjb25zdDsKICAgICAK
</data>
<flag name="review"
          id="3290"
          type_id="1"
          status="+"
          setter="timothy"
    />
          </attachment>
      

    </bug>

</bugzilla>