<?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>8845</bug_id>
          
          <creation_ts>2006-05-11 02:33:43 -0700</creation_ts>
          <short_desc>Add TextRun to the text drawing/measuring APIs.</short_desc>
          <delta_ts>2006-05-11 03:19:55 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</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="Dave Hyatt">hyatt</reporter>
          <assigned_to name="Dave Hyatt">hyatt</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>41980</commentid>
    <comment_count>0</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2006-05-11 02:33:43 -0700</bug_when>
    <thetext>This patch basically takes the concept of WebCoreTextRun and lifts it up into the actual API used by WebCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>41981</commentid>
    <comment_count>1</comment_count>
      <attachid>8234</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2006-05-11 02:34:11 -0700</bug_when>
    <thetext>Created attachment 8234
Patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>41982</commentid>
    <comment_count>2</comment_count>
      <attachid>8235</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2006-05-11 02:46:02 -0700</bug_when>
    <thetext>Created attachment 8235
Patch that fixes up FontWin as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>41984</commentid>
    <comment_count>3</comment_count>
      <attachid>8235</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2006-05-11 03:00:22 -0700</bug_when>
    <thetext>Comment on attachment 8235
Patch that fixes up FontWin as well.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>41985</commentid>
    <comment_count>4</comment_count>
    <who name="">mitz</who>
    <bug_when>2006-05-11 03:01:41 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Created an attachment (id=8235) [edit]

                 UChar spacePeriod[2] = { &apos;.&apos;, &apos; &apos; };
-                int width = font.width(spacePeriod, 2);
-                p-&gt;drawText(marker.location(), &quot; .&quot;);
-                p-&gt;drawText(marker.location() + IntSize(width, 0), m_item);
+                TextRun spacePeriodRun(spacePeriod, 2);

Looks like spacePeriod should be { &apos; &apos;, &apos;.&apos; } (didn&apos;t matter before when it was only used for measuring). Can you check fast/lists in pixel mode?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>41986</commentid>
    <comment_count>5</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2006-05-11 03:07:13 -0700</bug_when>
    <thetext>Thanks mitz.  I fixed it.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>41988</commentid>
    <comment_count>6</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2006-05-11 03:19:55 -0700</bug_when>
    <thetext>Fixed.
</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>8234</attachid>
            <date>2006-05-11 02:34:11 -0700</date>
            <delta_ts>2006-05-11 02:46:02 -0700</delta_ts>
            <desc>Patch.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>54321</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IHBsYXRmb3JtL0dyYXBoaWNzQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3Jt
L0dyYXBoaWNzQ29udGV4dC5oCShyZXZpc2lvbiAxNDI4OSkKKysrIHBsYXRmb3JtL0dyYXBoaWNz
Q29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1Myw3IEBACiAgICAgY2xhc3MgSW50
UG9pbnQ7CiAgICAgY2xhc3MgSW50UG9pbnRBcnJheTsKICAgICBjbGFzcyBQYXRoOworICAgIGNs
YXNzIFRleHRSdW47CiAKICNpZiBTVkdfU1VQUE9SVAogICAgIGNsYXNzIEtSZW5kZXJpbmdEZXZp
Y2VDb250ZXh0OwpAQCAtMTA2LDE0ICsxMDcsMTIgQEAKICAgICAgICAgdm9pZCBzZXRGb2N1c1Jp
bmdDbGlwKGNvbnN0IEludFJlY3QmKTsKICAgICAgICAgdm9pZCBjbGVhckZvY3VzUmluZ0NsaXAo
KTsKIAotICAgICAgICB2b2lkIGRyYXdUZXh0KGNvbnN0IEludFBvaW50JiwgY29uc3QgRGVwcmVj
YXRlZFN0cmluZyYpOwotICAgICAgICB2b2lkIGRyYXdUZXh0KGNvbnN0IEludFBvaW50JiwgaW50
IHRhYldpZHRoLCBpbnQgeHBvcywKLSAgICAgICAgICAgIGNvbnN0IFVDaGFyKiwgaW50IHNsZW4s
IGludCBwb3MsIGludCBsZW4sIGludCB0b0FkZCwKLSAgICAgICAgICAgIFRleHREaXJlY3Rpb24g
PSBMVFIsIGJvb2wgdmlzdWFsbHlPcmRlcmVkID0gZmFsc2UsIGludCBmcm9tID0gLTEsIGludCB0
byA9IC0xKTsKLSAgICAgICAgdm9pZCBkcmF3SGlnaGxpZ2h0Rm9yVGV4dChjb25zdCBJbnRQb2lu
dCYsIGludCBoLCBpbnQgdGFiV2lkdGgsIGludCB4cG9zLAotICAgICAgICAgICAgY29uc3QgVUNo
YXIqLCBpbnQgc2xlbiwgaW50IHBvcywgaW50IGxlbiwgaW50IHRvQWRkLAotICAgICAgICAgICAg
VGV4dERpcmVjdGlvbiwgYm9vbCB2aXN1YWxseU9yZGVyZWQsCi0gICAgICAgICAgICBpbnQgZnJv
bSwgaW50IHRvLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKTsKKyAgICAgICAgdm9pZCBk
cmF3VGV4dChjb25zdCBUZXh0UnVuJiwgY29uc3QgSW50UG9pbnQmLCBpbnQgdGFiV2lkdGggPSAw
LCBpbnQgeHBvcyA9IDAsIGludCB0b0FkZCA9IDAsCisgICAgICAgICAgICAgICAgICAgICAgVGV4
dERpcmVjdGlvbiA9IExUUiwgYm9vbCB2aXN1YWxseU9yZGVyZWQgPSBmYWxzZSk7CisgICAgICAg
IHZvaWQgZHJhd0hpZ2hsaWdodEZvclRleHQoY29uc3QgVGV4dFJ1biYsIGNvbnN0IEludFBvaW50
JiwgaW50IGgsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0YWJXaWR0
aCwgaW50IHhwb3MsIGludCB0b0FkZCwgVGV4dERpcmVjdGlvbiwgYm9vbCB2aXN1YWxseU9yZGVy
ZWQsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAKICAgICAgICAgdm9pZCBkcmF3TGluZUZvclRleHQoY29u
c3QgSW50UG9pbnQmLCBpbnQgeU9mZnNldCwgaW50IHdpZHRoKTsKICAgICAgICAgdm9pZCBkcmF3
TGluZUZvck1pc3NwZWxsaW5nKGNvbnN0IEludFBvaW50JiwgaW50IHdpZHRoKTsKICAgICAgICAg
aW50IG1pc3NwZWxsaW5nTGluZVRoaWNrbmVzcygpOwpJbmRleDogcGxhdGZvcm0vbWFjL0ZvbnRN
YWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vbWFjL0ZvbnRNYWMubW0JKHJldmlzaW9uIDE0
MjkyKQorKysgcGxhdGZvcm0vbWFjL0ZvbnRNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTExMywx
OCArMTEzLDE2IEBACiAKIHN0cnVjdCBBVFNVTGF5b3V0UGFyYW1ldGVycwogewotICAgIEFUU1VM
YXlvdXRQYXJhbWV0ZXJzKFVuaUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW4sIGludCBmcm9tLCBp
bnQgdG8sIGludCB0b0FkZCwgVGV4dERpcmVjdGlvbiBkaXIsIGJvb2wgYXBwbHlXb3JkUm91bmRp
bmcsIGJvb2wgYXBwbHlSdW5Sb3VuZGluZykKLSAgICA6bV9jaGFyYWN0ZXJzKGNoYXJhY3RlcnMp
LCBtX2xlbihsZW4pLCBtX2Zyb20oZnJvbSksIG1fdG8odG8pLCBtX3BhZGRpbmcodG9BZGQpLCBt
X3J0bChkaXIgPT0gUlRMKSwKKyAgICBBVFNVTGF5b3V0UGFyYW1ldGVycyhjb25zdCBUZXh0UnVu
JiBydW4sIGludCB0b0FkZCwgVGV4dERpcmVjdGlvbiBkaXIsIGJvb2wgYXBwbHlXb3JkUm91bmRp
bmcsIGJvb2wgYXBwbHlSdW5Sb3VuZGluZykKKyAgICA6bV9ydW4ocnVuKSwgbV9wYWRkaW5nKHRv
QWRkKSwgbV9ydGwoZGlyID09IFJUTCksCiAgICAgIG1fYXBwbHlXb3JkUm91bmRpbmcoYXBwbHlX
b3JkUm91bmRpbmcpLCBtX2FwcGx5UnVuUm91bmRpbmcoYXBwbHlSdW5Sb3VuZGluZyksCiAgICAg
IG1fZm9udCgwKSwgbV9mb250cygwKSwgbV9jaGFyQnVmZmVyKDApLCBtX2hhc1N5bnRoZXRpY0Jv
bGQoZmFsc2UpLCBtX3N5bnRoZXRpY0JvbGRQYXNzKGZhbHNlKSwgbV9wYWRQZXJTcGFjZSgwKQog
ICAgIHt9CiAKICAgICB2b2lkIGluaXRpYWxpemUoY29uc3QgRm9udCogZm9udCk7CiAKLSAgICBV
bmlDaGFyKiBtX2NoYXJhY3RlcnM7Ci0gICAgaW50IG1fbGVuOwotICAgIGludCBtX2Zyb207Ci0g
ICAgaW50IG1fdG87CisgICAgY29uc3QgVGV4dFJ1biYgbV9ydW47CisKICAgICBpbnQgbV9wYWRk
aW5nOwogICAgIGJvb2wgbV9ydGw7CiAgICAgYm9vbCBtX2FwcGx5V29yZFJvdW5kaW5nOwpAQCAt
MTM1LDI2ICsxMzMsMjEgQEAKICAgICBBVFNVVGV4dExheW91dCBtX2xheW91dDsKICAgICBjb25z
dCBGb250RGF0YSAqKm1fZm9udHM7CiAgICAgCi0gICAgVW5pQ2hhciAqbV9jaGFyQnVmZmVyOwor
ICAgIFVDaGFyICptX2NoYXJCdWZmZXI7CiAgICAgYm9vbCBtX2hhc1N5bnRoZXRpY0JvbGQ7CiAg
ICAgYm9vbCBtX3N5bnRoZXRpY0JvbGRQYXNzOwogICAgIGZsb2F0IG1fcGFkUGVyU3BhY2U7CiB9
OwogCiAvLyBCZSBzdXJlIHRvIGZyZWUgdGhlIGFycmF5IGFsbG9jYXRlZCBieSB0aGlzIGZ1bmN0
aW9uLgotc3RhdGljIFVuaUNoYXIqIGFkZERpcmVjdGlvbmFsT3ZlcnJpZGUoVW5pQ2hhciogY2hh
cmFjdGVycywgaW50JiBsZW4sIGludCYgZnJvbSwgaW50JiB0bywgYm9vbCBydGwpCitzdGF0aWMg
VGV4dFJ1biBhZGREaXJlY3Rpb25hbE92ZXJyaWRlKGNvbnN0IFRleHRSdW4mIHJ1biwgYm9vbCBy
dGwpCiB7Ci0gICAgVW5pQ2hhciAqY2hhcmFjdGVyc1dpdGhPdmVycmlkZSA9IG5ldyBVbmlDaGFy
W2xlbiArIDJdOwotCisgICAgVUNoYXIqIGNoYXJhY3RlcnNXaXRoT3ZlcnJpZGUgPSBuZXcgVUNo
YXJbcnVuLmxlbmd0aCgpICsgMl07CiAgICAgY2hhcmFjdGVyc1dpdGhPdmVycmlkZVswXSA9IHJ0
bCA/IFJJR0hUX1RPX0xFRlRfT1ZFUlJJREUgOiBMRUZUX1RPX1JJR0hUX09WRVJSSURFOwotICAg
IG1lbWNweSgmY2hhcmFjdGVyc1dpdGhPdmVycmlkZVsxXSwgJmNoYXJhY3RlcnNbMF0sIHNpemVv
ZihVbmlDaGFyKSAqIGxlbik7Ci0gICAgY2hhcmFjdGVyc1dpdGhPdmVycmlkZVtsZW4gKyAxXSA9
IFBPUF9ESVJFQ1RJT05BTF9GT1JNQVRUSU5HOworICAgIG1lbWNweSgmY2hhcmFjdGVyc1dpdGhP
dmVycmlkZVsxXSwgcnVuLmRhdGEoMCksIHNpemVvZihVQ2hhcikgKiBydW4ubGVuZ3RoKCkpOwor
ICAgIGNoYXJhY3RlcnNXaXRoT3ZlcnJpZGVbcnVuLmxlbmd0aCgpICsgMV0gPSBQT1BfRElSRUNU
SU9OQUxfRk9STUFUVElORzsKIAotICAgIGZyb20rKzsKLSAgICB0bysrOwotICAgIGxlbiArPSAy
OwotCi0gICAgcmV0dXJuIGNoYXJhY3RlcnNXaXRoT3ZlcnJpZGU7CisgICAgcmV0dXJuIFRleHRS
dW4oY2hhcmFjdGVyc1dpdGhPdmVycmlkZSwgcnVuLmxlbmd0aCgpICsgMiwgcnVuLmZyb20oKSAr
IDEsIHJ1bi50bygpICsgMSk7CiB9CiAKIHN0YXRpYyB2b2lkIGluaXRpYWxpemVBVFNVU3R5bGUo
Y29uc3QgRm9udERhdGEqIGZvbnREYXRhKQpAQCAtMjI3LDEzICsyMjAsMTMgQEAKICAgICAgICAg
CiAgICAgICAgIEZpeGVkIGxhc3ROYXRpdmVQb3MgPSAwOwogICAgICAgICBmbG9hdCBsYXN0QWRq
dXN0ZWRQb3MgPSAwOwotICAgICAgICBjb25zdCBVbmlDaGFyICpjaGFyYWN0ZXJzID0gcGFyYW1z
LT5tX2NoYXJhY3RlcnMgKyBwYXJhbXMtPm1fZnJvbTsKLSAgICAgICAgY29uc3QgRm9udERhdGEg
KipyZW5kZXJlcnMgPSBwYXJhbXMtPm1fZm9udHMgKyBwYXJhbXMtPm1fZnJvbTsKKyAgICAgICAg
Y29uc3QgVUNoYXIgKmNoYXJhY3RlcnMgPSBwYXJhbXMtPm1fcnVuLmRhdGEocGFyYW1zLT5tX3J1
bi5mcm9tKCkpOworICAgICAgICBjb25zdCBGb250RGF0YSAqKnJlbmRlcmVycyA9IHBhcmFtcy0+
bV9mb250cyArIHBhcmFtcy0+bV9ydW4uZnJvbSgpOwogICAgICAgICBjb25zdCBGb250RGF0YSAq
cmVuZGVyZXI7CiAgICAgICAgIGNvbnN0IEZvbnREYXRhICpsYXN0UmVuZGVyZXIgPSAwOwotICAg
ICAgICBVbmlDaGFyIGNoLCBuZXh0Q2g7CisgICAgICAgIFVDaGFyIGNoLCBuZXh0Q2g7CiAgICAg
ICAgIEJ5dGVDb3VudCBvZmZzZXQgPSBsYXlvdXRSZWNvcmRzWzBdLm9yaWdpbmFsT2Zmc2V0Owot
ICAgICAgICBuZXh0Q2ggPSAqKFVuaUNoYXIgKikoKChjaGFyICopY2hhcmFjdGVycykrb2Zmc2V0
KTsKKyAgICAgICAgbmV4dENoID0gKihVQ2hhciAqKSgoKGNoYXIgKiljaGFyYWN0ZXJzKStvZmZz
ZXQpOwogICAgICAgICBib29sIHNob3VsZFJvdW5kID0gZmFsc2U7CiAgICAgICAgIGJvb2wgc3lu
dGhldGljQm9sZFBhc3MgPSBwYXJhbXMtPm1fc3ludGhldGljQm9sZFBhc3M7CiAgICAgICAgIEZp
eGVkIHN5bnRoZXRpY0JvbGRPZmZzZXQgPSAwOwpAQCAtMjc5LDcgKzI3Miw3IEBACiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGFkZGluZyAtPSBwYXJhbXMtPm1fcGFkUGVyU3BhY2U7CiAg
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgaWYgKG9mZnNldCAhPSAwICYmICFGb250Ojp0cmVhdEFzU3BhY2UoKigoVW5p
Q2hhciAqKSgoKGNoYXIgKiljaGFyYWN0ZXJzKStvZmZzZXQpIC0gMSkpICYmIHBhcmFtcy0+bV9m
b250LT53b3JkU3BhY2luZygpKQorICAgICAgICAgICAgICAgICAgICBpZiAob2Zmc2V0ICE9IDAg
JiYgIUZvbnQ6OnRyZWF0QXNTcGFjZSgqKChVQ2hhciAqKSgoKGNoYXIgKiljaGFyYWN0ZXJzKStv
ZmZzZXQpIC0gMSkpICYmIHBhcmFtcy0+bV9mb250LT53b3JkU3BhY2luZygpKQogICAgICAgICAg
ICAgICAgICAgICAgICAgd2lkdGggKz0gcGFyYW1zLT5tX2ZvbnQtPndvcmRTcGFjaW5nKCk7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMjg4LDcgKzI4MSw3IEBACiAgICAg
ICAgICAgICBvZmZzZXQgPSBsYXlvdXRSZWNvcmRzW2ldLm9yaWdpbmFsT2Zmc2V0OwogICAgICAg
ICAgICAgLy8gVXNlIHNwYWNlIGZvciBuZXh0Q2ggYXQgdGhlIGVuZCBvZiB0aGUgbG9vcCBzbyB0
aGF0IHdlIGdldCBpbnNpZGUgdGhlIHJvdW5kaW5nIGhhY2sgY29kZS4KICAgICAgICAgICAgIC8v
IFdlIHdvbid0IGFjdHVhbGx5IHJvdW5kIHVubGVzcyB0aGUgb3RoZXIgY29uZGl0aW9ucyBhcmUg
c2F0aXNmaWVkLgotICAgICAgICAgICAgbmV4dENoID0gaXNMYXN0Q2hhciA/ICcgJyA6ICooVW5p
Q2hhciAqKSgoKGNoYXIgKiljaGFyYWN0ZXJzKStvZmZzZXQpOworICAgICAgICAgICAgbmV4dENo
ID0gaXNMYXN0Q2hhciA/ICcgJyA6ICooVUNoYXIgKikoKChjaGFyICopY2hhcmFjdGVycykrb2Zm
c2V0KTsKIAogICAgICAgICAgICAgaWYgKEZvbnQ6OmlzUm91bmRpbmdIYWNrQ2hhcmFjdGVyKGNo
KSkKICAgICAgICAgICAgICAgICB3aWR0aCA9IGNlaWxmKHdpZHRoKTsKQEAgLTI5Niw3ICsyODks
OCBAQAogICAgICAgICAgICAgaWYgKEZvbnQ6OmlzUm91bmRpbmdIYWNrQ2hhcmFjdGVyKG5leHRD
aCkKICAgICAgICAgICAgICAgICAmJiAoIWlzTGFzdENoYXIKICAgICAgICAgICAgICAgICAgICAg
fHwgcGFyYW1zLT5tX2FwcGx5UnVuUm91bmRpbmcKLSAgICAgICAgICAgICAgICAgICAgfHwgKHBh
cmFtcy0+bV90byA8IChpbnQpcGFyYW1zLT5tX2xlbiAmJiBGb250Ojppc1JvdW5kaW5nSGFja0No
YXJhY3RlcihjaGFyYWN0ZXJzW3BhcmFtcy0+bV90byAtIHBhcmFtcy0+bV9mcm9tXSkpKSkgewor
ICAgICAgICAgICAgICAgICAgICB8fCAocGFyYW1zLT5tX3J1bi50bygpIDwgKGludClwYXJhbXMt
Pm1fcnVuLmxlbmd0aCgpICYmIAorICAgICAgICAgICAgICAgICAgICAgICAgRm9udDo6aXNSb3Vu
ZGluZ0hhY2tDaGFyYWN0ZXIoY2hhcmFjdGVyc1twYXJhbXMtPm1fcnVuLnRvKCkgLSBwYXJhbXMt
Pm1fcnVuLmZyb20oKV0pKSkpIHsKICAgICAgICAgICAgICAgICBpZiAoIXBhcmFtcy0+bV9ydGwp
CiAgICAgICAgICAgICAgICAgICAgIGxhc3RBZGp1c3RlZFBvcyA9IGNlaWxmKGxhc3RBZGp1c3Rl
ZFBvcyk7CiAgICAgICAgICAgICAgICAgZWxzZSB7CkBAIC0zMzEsOCArMzI1LDggQEAKICAgICAv
LyBGSVhNRTogSXQgaXMgcHJvYmFibHkgYmVzdCB0byBhbHdheXMgYWxsb2NhdGUgYSBidWZmZXIg
Zm9yIFJUTCwgc2luY2UgZXZlbiBpZiBmb3IgdGhpcwogICAgIC8vIGZvbnREYXRhIEFUU1VNaXJy
b3JzIGlzIHRydWUsIGZvciBhIHN1YnN0aXR1dGUgZm9udERhdGEgaXQgbWlnaHQgYmUgZmFsc2Uu
CiAgICAgY29uc3QgRm9udERhdGEqIGZvbnREYXRhID0gZm9udC0+cHJpbWFyeUZvbnQoKTsKLSAg
ICBtX2ZvbnRzID0gbmV3IGNvbnN0IEZvbnREYXRhKlttX2xlbl07Ci0gICAgbV9jaGFyQnVmZmVy
ID0gKFVuaUNoYXIqKSgoZm9udC0+aXNTbWFsbENhcHMoKSB8fCAobV9ydGwgJiYgIWZvbnREYXRh
LT5tX0FUU1VNaXJyb3JzKSkgPyBuZXcgVW5pQ2hhclttX2xlbl0gOiAwKTsKKyAgICBtX2ZvbnRz
ID0gbmV3IGNvbnN0IEZvbnREYXRhKlttX3J1bi5sZW5ndGgoKV07CisgICAgbV9jaGFyQnVmZmVy
ID0gKFVDaGFyKikoKGZvbnQtPmlzU21hbGxDYXBzKCkgfHwgKG1fcnRsICYmICFmb250RGF0YS0+
bV9BVFNVTWlycm9ycykpID8gbmV3IFVDaGFyW21fcnVuLmxlbmd0aCgpXSA6IDApOwogICAgIAog
ICAgIC8vIFRoZSBvbmx5IENvY29hIGNhbGxzIGhlcmUgYXJlIHRvIE5TR3JhcGhpY3NDb250ZXh0
LCB3aGljaCBkb2VzIG5vdCByYWlzZSBleGNlcHRpb25zLgogCkBAIC0zNDYsMTcgKzM0MCwxNyBA
QAogICAgIC8vIC0gXG4sIFx0LCBhbmQgbm9uYnJlYWtpbmcgc3BhY2UgcmVuZGVyIGFzIGEgc3Bh
Y2UuCiAgICAgLy8gLSBPdGhlciBjb250cm9sIGNoYXJhY3RlcnMgZG8gbm90IHJlbmRlciAob3Ro
ZXIgY29kZSBwYXRoIHVzZXMgemVyby13aWR0aCBzcGFjZXMpLgogCi0gICAgVW5pQ2hhckNvdW50
IHRvdGFsTGVuZ3RoID0gbV9sZW47Ci0gICAgVW5pQ2hhckFycmF5T2Zmc2V0IHJ1blRvID0gKG1f
dG8gPT0gLTEgPyB0b3RhbExlbmd0aCA6ICh1bnNpZ25lZCBpbnQpbV90byk7Ci0gICAgVW5pQ2hh
ckFycmF5T2Zmc2V0IHJ1bkZyb20gPSBtX2Zyb207CisgICAgVW5pQ2hhckNvdW50IHRvdGFsTGVu
Z3RoID0gbV9ydW4ubGVuZ3RoKCk7CisgICAgVW5pQ2hhckFycmF5T2Zmc2V0IHJ1blRvID0gbV9y
dW4udG8oKTsKKyAgICBVbmlDaGFyQXJyYXlPZmZzZXQgcnVuRnJvbSA9IG1fcnVuLmZyb20oKTsK
ICAgICAKICAgICBpZiAobV9jaGFyQnVmZmVyKQotICAgICAgICBtZW1jcHkobV9jaGFyQnVmZmVy
LCBtX2NoYXJhY3RlcnMsIHRvdGFsTGVuZ3RoICogc2l6ZW9mKFVuaUNoYXIpKTsKKyAgICAgICAg
bWVtY3B5KG1fY2hhckJ1ZmZlciwgbV9ydW4uY2hhcmFjdGVycygpLCB0b3RhbExlbmd0aCAqIHNp
emVvZihVQ2hhcikpOwogCiAgICAgVW5pQ2hhckNvdW50IHJ1bkxlbmd0aCA9IHJ1blRvIC0gcnVu
RnJvbTsKICAgICAKICAgICBzdGF0dXMgPSBBVFNVQ3JlYXRlVGV4dExheW91dFdpdGhUZXh0UHRy
KAotICAgICAgICAgICAgKG1fY2hhckJ1ZmZlciA/IG1fY2hhckJ1ZmZlciA6IG1fY2hhcmFjdGVy
cyksCisgICAgICAgICAgICAobV9jaGFyQnVmZmVyID8gbV9jaGFyQnVmZmVyIDogbV9ydW4uY2hh
cmFjdGVycygpKSwKICAgICAgICAgICAgIHJ1bkZyb20sICAgICAgICAvLyBvZmZzZXQKICAgICAg
ICAgICAgIHJ1bkxlbmd0aCwgICAgICAvLyBsZW5ndGgKICAgICAgICAgICAgIHRvdGFsTGVuZ3Ro
LCAgICAvLyB0b3RhbCBsZW5ndGgKQEAgLTM5OCw3ICszOTIsNyBAQAogICAgICAgICBzdGF0dXMg
PSBBVFNVTWF0Y2hGb250c1RvVGV4dChsYXlvdXQsIHN1YnN0aXR1dGVPZmZzZXQsIGtBVFNVVG9U
ZXh0RW5kLCAmQVRTVVN1YnN0aXR1dGVGb250LCAmc3Vic3RpdHV0ZU9mZnNldCwgJnN1YnN0aXR1
dGVMZW5ndGgpOwogICAgICAgICBpZiAoc3RhdHVzID09IGtBVFNVRm9udHNNYXRjaGVkIHx8IHN0
YXR1cyA9PSBrQVRTVUZvbnRzTm90TWF0Y2hlZCkgewogICAgICAgICAgICAgLy8gRklYTUU6IFNo
b3VsZCBnbyB0aHJvdWdoIGZhbGxiYWNrIGxpc3QgZXZlbnR1YWxseS4KLSAgICAgICAgICAgIHN1
YnN0aXR1dGVGb250RGF0YSA9IGZvbnREYXRhLT5maW5kU3Vic3RpdHV0ZUZvbnREYXRhKG1fY2hh
cmFjdGVycyArIHN1YnN0aXR1dGVPZmZzZXQsIHN1YnN0aXR1dGVMZW5ndGgsIG1fZm9udC0+Zm9u
dERlc2NyaXB0aW9uKCkpOworICAgICAgICAgICAgc3Vic3RpdHV0ZUZvbnREYXRhID0gZm9udERh
dGEtPmZpbmRTdWJzdGl0dXRlRm9udERhdGEobV9ydW4uY2hhcmFjdGVycygpICsgc3Vic3RpdHV0
ZU9mZnNldCwgc3Vic3RpdHV0ZUxlbmd0aCwgbV9mb250LT5mb250RGVzY3JpcHRpb24oKSk7CiAg
ICAgICAgICAgICBpZiAoc3Vic3RpdHV0ZUZvbnREYXRhKSB7CiAgICAgICAgICAgICAgICAgaW5p
dGlhbGl6ZUFUU1VTdHlsZShzdWJzdGl0dXRlRm9udERhdGEpOwogICAgICAgICAgICAgICAgIGlm
IChzdWJzdGl0dXRlRm9udERhdGEtPm1fQVRTVVN0eWxlKQpAQCAtNDI5LDggKzQyMyw4IEBACiAg
ICAgICAgICAgICBpZiAobV9ydGwgJiYgbV9jaGFyQnVmZmVyICYmICFyLT5tX0FUU1VNaXJyb3Jz
KQogICAgICAgICAgICAgICAgIG1fY2hhckJ1ZmZlcltpXSA9IHVfY2hhck1pcnJvcihtX2NoYXJC
dWZmZXJbaV0pOwogICAgICAgICAgICAgaWYgKG1fZm9udC0+aXNTbWFsbENhcHMoKSkgewotICAg
ICAgICAgICAgICAgIFVuaUNoYXIgYyA9IG1fY2hhckJ1ZmZlcltpXTsKLSAgICAgICAgICAgICAg
ICBVbmlDaGFyIG5ld0M7CisgICAgICAgICAgICAgICAgVUNoYXIgYyA9IG1fY2hhckJ1ZmZlcltp
XTsKKyAgICAgICAgICAgICAgICBVQ2hhciBuZXdDOwogICAgICAgICAgICAgICAgIGlmIChVX0dF
VF9HQ19NQVNLKGMpICYgVV9HQ19NX01BU0spCiAgICAgICAgICAgICAgICAgICAgIG1fZm9udHNb
aV0gPSBpc1NtYWxsQ2FwID8gci0+c21hbGxDYXBzRm9udERhdGEoKSA6IHI7CiAgICAgICAgICAg
ICAgICAgZWxzZSBpZiAoIXVfaXNVVXBwZXJjYXNlKGMpICYmIChuZXdDID0gdV90b3VwcGVyKGMp
KSAhPSBjKSB7CkBAIC00NTksNyArNDUzLDcgQEAKICAgICAgICAgZmxvYXQgbnVtU3BhY2VzID0g
MDsKICAgICAgICAgdW5zaWduZWQgazsKICAgICAgICAgZm9yIChrID0gMDsgayA8IHRvdGFsTGVu
Z3RoOyBrKyspCi0gICAgICAgICAgICBpZiAoRm9udDo6dHJlYXRBc1NwYWNlKG1fY2hhcmFjdGVy
c1trXSkpCisgICAgICAgICAgICBpZiAoRm9udDo6dHJlYXRBc1NwYWNlKG1fcnVuW2tdKSkKICAg
ICAgICAgICAgICAgICBudW1TcGFjZXMrKzsKIAogICAgICAgICBtX3BhZFBlclNwYWNlID0gY2Vp
bGYobV9wYWRkaW5nIC8gbnVtU3BhY2VzKTsKQEAgLTQ3OSwyMiArNDczLDE0IEBACiAgICAgcmV0
dXJuIG1fZm9udExpc3QtPnBsYXRmb3JtRm9udChmb250RGVzY3JpcHRpb24oKSk7CiB9CiAKLUlu
dFJlY3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvclRleHQoY29uc3QgSW50UG9pbnQmIHBvaW50LCBp
bnQgaCwgaW50IHRhYldpZHRoLCBpbnQgeHBvcywgCi0gICAgY29uc3QgVUNoYXIqIHN0ciwgaW50
IHNsZW4sIGludCBwb3MsIGludCBsLCBpbnQgdG9BZGQsCi0gICAgYm9vbCBydGwsIGJvb2wgdmlz
dWFsbHlPcmRlcmVkLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAorSW50UmVjdCBGb250OjpzZWxl
Y3Rpb25SZWN0Rm9yVGV4dChjb25zdCBUZXh0UnVuJiB0ZXh0UnVuLCBjb25zdCBJbnRQb2ludCYg
cG9pbnQsIGludCBoLCBpbnQgdGFiV2lkdGgsIGludCB4cG9zLCBpbnQgdG9BZGQsIGJvb2wgcnRs
LCBib29sIHZpc3VhbGx5T3JkZXJlZCkgY29uc3QKIHsKICAgICBhc3NlcnQobV9mb250TGlzdCk7
Ci0gICAgaW50IGxlbiA9IG1pbihzbGVuIC0gcG9zLCBsKTsKIAogICAgIENSRUFURV9GQU1JTFlf
QVJSQVkoZm9udERlc2NyaXB0aW9uKCksIGZhbWlsaWVzKTsKIAotICAgIGlmIChmcm9tIDwgMCkK
LSAgICAgICAgZnJvbSA9IDA7Ci0gICAgaWYgKHRvIDwgMCkKLSAgICAgICAgdG8gPSBsZW47Ci0K
ICAgICBXZWJDb3JlVGV4dFJ1biBydW47Ci0gICAgV2ViQ29yZUluaXRpYWxpemVUZXh0UnVuKCZy
dW4sIHN0ciArIHBvcywgbGVuLCBmcm9tLCB0byk7CisgICAgV2ViQ29yZUluaXRpYWxpemVUZXh0
UnVuKCZydW4sIHRleHRSdW4uY2hhcmFjdGVycygpLCB0ZXh0UnVuLmxlbmd0aCgpLCB0ZXh0UnVu
LmZyb20oKSwgdGV4dFJ1bi50bygpKTsKICAgICBXZWJDb3JlVGV4dFN0eWxlIHN0eWxlOwogICAg
IFdlYkNvcmVJbml0aWFsaXplRW1wdHlUZXh0U3R5bGUoJnN0eWxlKTsKICAgICBzdHlsZS5ydGwg
PSBydGw7CkBAIC01MTQsMTkgKzUwMCwxNyBAQAogICAgIGdlb21ldHJ5LnVzZUZvbnRNZXRyaWNz
Rm9yU2VsZWN0aW9uWUFuZEhlaWdodCA9IGZhbHNlOwogICAgIHJldHVybiBlbmNsb3NpbmdJbnRS
ZWN0KG1fZm9udExpc3QtPnByaW1hcnlGb250KGZvbnREZXNjcmlwdGlvbigpKS0+c2VsZWN0aW9u
UmVjdEZvclJ1bigmcnVuLCAmc3R5bGUsICZnZW9tZXRyeSkpOwogfQotdm9pZCBGb250OjpkcmF3
Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEludFBv
aW50JiBwb2ludCwgaW50IHRhYldpZHRoLCBpbnQgeHBvcywgY29uc3QgVUNoYXIqIHN0ciwgaW50
IGxlbiwgaW50IGZyb20sIGludCB0bywKKwordm9pZCBGb250OjpkcmF3Q29tcGxleFRleHQoR3Jh
cGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3Qg
SW50UG9pbnQmIHBvaW50LCBpbnQgdGFiV2lkdGgsIGludCB4cG9zLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IHRvQWRkLCBUZXh0RGlyZWN0aW9uIGQsIGJvb2wgdmlzdWFsbHlPcmRl
cmVkKSBjb25zdAogewotICAgIGludCBydW5MZW5ndGggPSB0byAtIGZyb207Ci0gICAgaWYgKHJ1
bkxlbmd0aCA8PSAwKQotICAgICAgICByZXR1cm47Ci0KICAgICBPU1N0YXR1cyBzdGF0dXM7Ci0g
ICAgVW5pQ2hhciogY2hhcmFjdGVycyA9IChVbmlDaGFyKilzdHI7Ci0gICAgaWYgKHZpc3VhbGx5
T3JkZXJlZCkKLSAgICAgICAgY2hhcmFjdGVycyA9IGFkZERpcmVjdGlvbmFsT3ZlcnJpZGUoY2hh
cmFjdGVycywgbGVuLCBmcm9tLCB0bywgZCA9PSBSVEwpOworICAgIAorICAgIGNvbnN0IFVDaGFy
KiBjaGFyYWN0ZXJzID0gcnVuLmNoYXJhY3RlcnMoKTsKKyAgICBpbnQgcnVuTGVuZ3RoID0gcnVu
Lmxlbmd0aCgpOwogCi0gICAgQVRTVUxheW91dFBhcmFtZXRlcnMgcGFyYW1zKGNoYXJhY3RlcnMs
IGxlbiwgMCwgbGVuLCB0b0FkZCwgZCwgdHJ1ZSwgdHJ1ZSk7CisgICAgVGV4dFJ1biBhZGp1c3Rl
ZFJ1biA9IHZpc3VhbGx5T3JkZXJlZCA/IGFkZERpcmVjdGlvbmFsT3ZlcnJpZGUocnVuLCBkID09
IFJUTCkgOiBydW47CisgICAgQVRTVUxheW91dFBhcmFtZXRlcnMgcGFyYW1zKGFkanVzdGVkUnVu
LCB0b0FkZCwgZCwgdHJ1ZSwgdHJ1ZSk7CiAgICAgcGFyYW1zLmluaXRpYWxpemUodGhpcyk7CiAK
ICAgICBbbnNDb2xvcihncmFwaGljc0NvbnRleHQtPnBlbigpLmNvbG9yKCkpIHNldF07CkBAIC01
MzksMTIgKzUyMywxMiBAQAogICAgIGJvb2wgZmxpcHBlZCA9IFtnQ29udGV4dCBpc0ZsaXBwZWRd
OwogICAgIGlmICghZmxpcHBlZCkKICAgICAgICAgQ0dDb250ZXh0U2NhbGVDVE0oY29udGV4dCwg
MS4wLCAtMS4wKTsKLSAgICBzdGF0dXMgPSBBVFNVRHJhd1RleHQocGFyYW1zLm1fbGF5b3V0LCBm
cm9tLCBydW5MZW5ndGgsIDAsIDApOworICAgIHN0YXR1cyA9IEFUU1VEcmF3VGV4dChwYXJhbXMu
bV9sYXlvdXQsIGFkanVzdGVkUnVuLmZyb20oKSwgcnVuTGVuZ3RoLCAwLCAwKTsKICAgICBpZiAo
c3RhdHVzID09IG5vRXJyICYmIHBhcmFtcy5tX2hhc1N5bnRoZXRpY0JvbGQpIHsKICAgICAgICAg
Ly8gRm9yY2UgcmVsYXlvdXQgZm9yIHRoZSBib2xkIHBhc3MKICAgICAgICAgQVRTVUNsZWFyTGF5
b3V0Q2FjaGUocGFyYW1zLm1fbGF5b3V0LCAwKTsKICAgICAgICAgcGFyYW1zLm1fc3ludGhldGlj
Qm9sZFBhc3MgPSB0cnVlOwotICAgICAgICBzdGF0dXMgPSBBVFNVRHJhd1RleHQocGFyYW1zLm1f
bGF5b3V0LCBmcm9tLCBydW5MZW5ndGgsIDAsIDApOworICAgICAgICBzdGF0dXMgPSBBVFNVRHJh
d1RleHQocGFyYW1zLm1fbGF5b3V0LCBhZGp1c3RlZFJ1bi5mcm9tKCksIHJ1bkxlbmd0aCwgMCwg
MCk7CiAgICAgfQogICAgIGlmICghZmxpcHBlZCkKICAgICAgICAgQ0dDb250ZXh0U2NhbGVDVE0o
Y29udGV4dCwgMS4wLCAtMS4wKTsKQEAgLTU2MSwyMSArNTQ1LDE1IEBACiAgICAgICAgIGRlbGV0
ZSBbXWNoYXJhY3RlcnM7CiB9CiAKLXZvaWQgRm9udDo6ZHJhd0hpZ2hsaWdodEZvclRleHQoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRQb2ludCYgcG9pbnQsIGludCBoLCBpbnQg
dGFiV2lkdGgsIGludCB4cG9zLCBjb25zdCBVQ2hhciogc3RyLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgbGVuLCBpbnQgZnJvbSwgaW50IHRvLCBpbnQgdG9BZGQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHREaXJlY3Rpb24gZCwgYm9vbCB2aXN1YWxs
eU9yZGVyZWQsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0Cit2b2lkIEZvbnQ6
OmRyYXdIaWdobGlnaHRGb3JUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4
dFJ1biYgdGV4dFJ1biwgY29uc3QgSW50UG9pbnQmIHBvaW50LCBpbnQgaCwgaW50IHRhYldpZHRo
LCBpbnQgeHBvcywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0b0FkZCwg
VGV4dERpcmVjdGlvbiBkLCBib29sIHZpc3VhbGx5T3JkZXJlZCwgY29uc3QgQ29sb3ImIGJhY2tn
cm91bmRDb2xvcikgY29uc3QKIHsKICAgICAvLyBBdm9pZCBhbGxvY2F0aW9ucywgdXNlIHN0YWNr
IGFycmF5IHRvIHBhc3MgZm9udCBmYW1pbGllcy4gIE5vcm1hbGx5IHRoZXNlCiAgICAgLy8gY3Nz
IGZhbGxiYWNrIGxpc3RzIGFyZSBzbWFsbCA8PSAzLgogICAgIENSRUFURV9GQU1JTFlfQVJSQVko
KnRoaXMsIGZhbWlsaWVzKTsKLQotICAgIGlmIChmcm9tIDwgMCkKLSAgICAgICAgZnJvbSA9IDA7
Ci0gICAgaWYgKHRvIDwgMCkKLSAgICAgICAgdG8gPSBsZW47CiAgICAgICAgIAogICAgIFdlYkNv
cmVUZXh0UnVuIHJ1bjsKLSAgICBXZWJDb3JlSW5pdGlhbGl6ZVRleHRSdW4oJnJ1biwgc3RyLCBs
ZW4sIGZyb20sIHRvKTsgICAgCisgICAgV2ViQ29yZUluaXRpYWxpemVUZXh0UnVuKCZydW4sIHRl
eHRSdW4uY2hhcmFjdGVycygpLCB0ZXh0UnVuLmxlbmd0aCgpLCB0ZXh0UnVuLmZyb20oKSwgdGV4
dFJ1bi50bygpKTsgICAgCiAgICAgV2ViQ29yZVRleHRTdHlsZSBzdHlsZTsKICAgICBXZWJDb3Jl
SW5pdGlhbGl6ZUVtcHR5VGV4dFN0eWxlKCZzdHlsZSk7CiAgICAgc3R5bGUudGV4dENvbG9yID0g
bnNDb2xvcihjb250ZXh0LT5wZW4oKS5jb2xvcigpKTsKQEAgLTYxMywxOSArNTkxLDE2IEBACiAg
ICAgcmV0dXJuIG1fZm9udExpc3QtPnByaW1hcnlGb250KGZvbnREZXNjcmlwdGlvbigpKS0+bWlz
c3BlbGxpbmdMaW5lVGhpY2tuZXNzKCk7CiB9CiAKLWZsb2F0IEZvbnQ6OmZsb2F0V2lkdGhGb3JD
b21wbGV4VGV4dChjb25zdCBVQ2hhciogdWNoYXJzLCBpbnQgbGVuLCBpbnQgZnJvbSwgaW50IHRv
LCBpbnQgdGFiV2lkdGgsIGludCB4cG9zLCBib29sIHJ1blJvdW5kaW5nKSBjb25zdAorZmxvYXQg
Rm9udDo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgaW50IHRh
YldpZHRoLCBpbnQgeHBvcywgYm9vbCBydW5Sb3VuZGluZykgY29uc3QKIHsKLSAgICBpZiAodG8g
LSBmcm9tIDw9IDApCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgQVRTVUxheW91dFBhcmFtZXRl
cnMgcGFyYW1zKChVbmlDaGFyKil1Y2hhcnMsIGxlbiwgZnJvbSwgdG8sIDAsIExUUiwgdHJ1ZSwg
cnVuUm91bmRpbmcpOworICAgIEFUU1VMYXlvdXRQYXJhbWV0ZXJzIHBhcmFtcyhydW4sIDAsIExU
UiwgdHJ1ZSwgcnVuUm91bmRpbmcpOwogICAgIHBhcmFtcy5pbml0aWFsaXplKHRoaXMpOwogICAg
IAogICAgIE9TU3RhdHVzIHN0YXR1czsKICAgICAKICAgICBBVFNUcmFwZXpvaWQgZmlyc3RHbHlw
aEJvdW5kczsKICAgICBJdGVtQ291bnQgYWN0dWFsTnVtQm91bmRzOwotICAgIHN0YXR1cyA9IEFU
U1VHZXRHbHlwaEJvdW5kcyhwYXJhbXMubV9sYXlvdXQsIDAsIDAsIGZyb20sIHRvIC0gZnJvbSwg
a0FUU1VzZUZyYWN0aW9uYWxPcmlnaW5zLCAxLCAmZmlyc3RHbHlwaEJvdW5kcywgJmFjdHVhbE51
bUJvdW5kcyk7ICAgIAorICAgIHN0YXR1cyA9IEFUU1VHZXRHbHlwaEJvdW5kcyhwYXJhbXMubV9s
YXlvdXQsIDAsIDAsIHJ1bi5mcm9tKCksIHJ1bi50bygpIC0gcnVuLmZyb20oKSwga0FUU1VzZUZy
YWN0aW9uYWxPcmlnaW5zLCAxLCAmZmlyc3RHbHlwaEJvdW5kcywgJmFjdHVhbE51bUJvdW5kcyk7
ICAgIAogICAgIGlmIChzdGF0dXMgIT0gbm9FcnIpCiAgICAgICAgIExPR19FUlJPUigiQVRTVUdl
dEdseXBoQm91bmRzKCkgZmFpbGVkKCVkKSIsIHN0YXR1cyk7CiAgICAgaWYgKGFjdHVhbE51bUJv
dW5kcyAhPSAxKQpAQCAtNjM3LDEzICs2MTIsMTMgQEAKICAgICAgICAgICAgTUlOKEZpeGVkVG9G
bG9hdChmaXJzdEdseXBoQm91bmRzLnVwcGVyTGVmdC54KSwgRml4ZWRUb0Zsb2F0KGZpcnN0R2x5
cGhCb3VuZHMubG93ZXJMZWZ0LngpKTsKIH0KIAotaW50IEZvbnQ6OmNoZWNrU2VsZWN0aW9uUG9p
bnQoY29uc3QgVUNoYXIqIHMsIGludCBzbGVuLCBpbnQgcG9zLCBpbnQgbGVuLCBpbnQgdG9BZGQs
IGludCB0YWJXaWR0aCwgaW50IHhwb3MsIGludCB4LCBUZXh0RGlyZWN0aW9uIGQsIGJvb2wgdmlz
dWFsbHlPcmRlcmVkLCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdAoraW50IEZvbnQ6
OmNoZWNrU2VsZWN0aW9uUG9pbnQoY29uc3QgVGV4dFJ1biYgdGV4dFJ1biwgaW50IHRvQWRkLCBp
bnQgdGFiV2lkdGgsIGludCB4cG9zLCBpbnQgeCwgVGV4dERpcmVjdGlvbiBkLCBib29sIHZpc3Vh
bGx5T3JkZXJlZCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3QKIHsKICAgICBhc3Nl
cnQobV9mb250TGlzdCk7CiAgICAgQ1JFQVRFX0ZBTUlMWV9BUlJBWShmb250RGVzY3JpcHRpb24o
KSwgZmFtaWxpZXMpOwogICAgIAogICAgIFdlYkNvcmVUZXh0UnVuIHJ1bjsKLSAgICBXZWJDb3Jl
SW5pdGlhbGl6ZVRleHRSdW4oJnJ1biwgcyArIHBvcywgbWluKHNsZW4gLSBwb3MsIGxlbiksIDAs
IGxlbik7CisgICAgV2ViQ29yZUluaXRpYWxpemVUZXh0UnVuKCZydW4sIHRleHRSdW4uY2hhcmFj
dGVycygpLCB0ZXh0UnVuLmxlbmd0aCgpLCB0ZXh0UnVuLmZyb20oKSwgdGV4dFJ1bi50bygpKTsK
ICAgICAKICAgICBXZWJDb3JlVGV4dFN0eWxlIHN0eWxlOwogICAgIFdlYkNvcmVJbml0aWFsaXpl
RW1wdHlUZXh0U3R5bGUoJnN0eWxlKTsKSW5kZXg6IHBsYXRmb3JtL0dyYXBoaWNzQ29udGV4dC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vR3JhcGhpY3NDb250ZXh0LmNwcAkocmV2aXNpb24g
MTQyODkpCisrKyBwbGF0Zm9ybS9HcmFwaGljc0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xOTIsNDEgKzE5MiwyMiBAQAogICAgIGRyYXdJbWFnZShpbWFnZSwgRmxvYXRSZWN0KGRlc3Qp
LCBzcmNSZWN0LCBvcCk7CiB9CiAKLS8vIEZJWE1FOiBXZSBzaG91bGQgY29uc2lkZXIgcmVtb3Zp
bmcgdGhpcyBmdW5jdGlvbiBhbmQgaGF2aW5nIGNhbGxlcnMganVzdCBjYWxsIHRoZSBsb3dlci1s
ZXZlbCBkcmF3VGV4dCBkaXJlY3RseS4KLS8vIEZJWE1FOiBXZSBzaG91bGQgY29uc2lkZXIgY2hh
bmdpbmcgdGhpcyBmdW5jdGlvbiB0byB0YWtlIGEgY2hhcmFjdGVyIHBvaW50ZXIgYW5kIGxlbmd0
aCBpbnN0ZWFkIG9mIGEgRGVwcmVjYXRlZFN0cmluZy4KLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3VGV4dChjb25zdCBJbnRQb2ludCYgcG9pbnQsIGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmIHN0
cikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGNv
bnN0IEludFBvaW50JiBwb2ludCwgaW50IHRhYldpZHRoLCBpbnQgeHBvcywgaW50IHRvQWRkLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHREaXJlY3Rpb24gZCwgYm9vbCB2aXN1
YWxseU9yZGVyZWQpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0
dXJuOwotCi0gICAgZHJhd1RleHQocG9pbnQsIDAsIDAsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
VUNoYXIqPihzdHIudW5pY29kZSgpKSwgc3RyLmxlbmd0aCgpLCAwLCBzdHIubGVuZ3RoKCksIDAp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RleHQoY29uc3QgSW50UG9pbnQmIHBv
aW50LCBpbnQgdGFiV2lkdGgsIGludCB4cG9zLCBjb25zdCBVQ2hhciogc3RyLCBpbnQgc2xlbiwg
aW50IHBvcywgaW50IGxlbiwgaW50IHRvQWRkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFRleHREaXJlY3Rpb24gZCwgYm9vbCB2aXN1YWxseU9yZGVyZWQsIGludCBmcm9tLCBpbnQg
dG8pCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaW50IGxlbmd0aCA9IG1pbihzbGVuIC0gcG9zLCBsZW4pOwotICAgIGlmIChsZW5ndGggPD0g
MCkKLSAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGZvbnQoKS5kcmF3VGV4dCh0aGlzLCBwb2lu
dCwgdGFiV2lkdGgsIHhwb3MsIHN0ciArIHBvcywgbGVuZ3RoLCBmcm9tLCB0bywgdG9BZGQsIGQs
IHZpc3VhbGx5T3JkZXJlZCk7CisgICAgZm9udCgpLmRyYXdUZXh0KHRoaXMsIHJ1biwgcG9pbnQs
IHRhYldpZHRoLCB4cG9zLCB0b0FkZCwgZCwgdmlzdWFsbHlPcmRlcmVkKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdIaWdobGlnaHRGb3JUZXh0KGNvbnN0IEludFBvaW50JiBwb2lu
dCwgaW50IGgsIGludCB0YWJXaWR0aCwgaW50IHhwb3MsIGNvbnN0IFVDaGFyKiBzdHIsIGludCBz
bGVuLCBpbnQgcG9zLCBpbnQgbGVuLCBpbnQgdG9BZGQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVGV4dERpcmVjdGlvbiBkLCBib29sIHZpc3VhbGx5T3JkZXJl
ZCwgaW50IGZyb20sIGludCB0bywgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3SGlnaGxpZ2h0Rm9yVGV4dChjb25zdCBUZXh0UnVuJiBydW4s
IGNvbnN0IEludFBvaW50JiBwb2ludCwgaW50IGgsIGludCB0YWJXaWR0aCwgaW50IHhwb3MsIGlu
dCB0b0FkZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0
RGlyZWN0aW9uIGQsIGJvb2wgdmlzdWFsbHlPcmRlcmVkLCBjb25zdCBDb2xvciYgYmFja2dyb3Vu
ZENvbG9yKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsK
LSAgICAgICAgCi0gICAgaW50IGxlbmd0aCA9IG1pbihzbGVuIC0gcG9zLCBsZW4pOwotICAgIGlm
IChsZW5ndGggPD0gMCkKLSAgICAgICAgcmV0dXJuOwogCi0gICAgcmV0dXJuIGZvbnQoKS5kcmF3
SGlnaGxpZ2h0Rm9yVGV4dCh0aGlzLCBwb2ludCwgaCwgdGFiV2lkdGgsIHhwb3MsIHN0ciArIHBv
cywgbGVuZ3RoLCBmcm9tLCB0bywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRvQWRkLCBkLCB2aXN1YWxseU9yZGVyZWQsIGJhY2tncm91bmRDb2xvcik7CisgICAgcmV0
dXJuIGZvbnQoKS5kcmF3SGlnaGxpZ2h0Rm9yVGV4dCh0aGlzLCBydW4sIHBvaW50LCBoLCB0YWJX
aWR0aCwgeHBvcywgdG9BZGQsIGQsIHZpc3VhbGx5T3JkZXJlZCwgYmFja2dyb3VuZENvbG9yKTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChjb25zdCBJbnRQb2lu
dCYgcG9pbnQsIGludCB5T2Zmc2V0LCBpbnQgd2lkdGgpCkluZGV4OiBwbGF0Zm9ybS9Gb250LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9Gb250LmNwcAkocmV2aXNpb24gMTQyOTIpCisrKyBw
bGF0Zm9ybS9Gb250LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQAogfTsKIAog
c3RydWN0IFdpZHRoSXRlcmF0b3IgewotICAgIFdpZHRoSXRlcmF0b3IoY29uc3QgRm9udCogZm9u
dCwgY29uc3QgVUNoYXIqIHN0ciwgaW50IGZyb20sIGludCB0bywgaW50IGxlbiwKKyAgICBXaWR0
aEl0ZXJhdG9yKGNvbnN0IEZvbnQqIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwKICAgICAgICAg
ICAgICAgICAgIGludCB0YWJXaWR0aCwgaW50IHhwb3MsIGludCB0b0FkZCwgVGV4dERpcmVjdGlv
biBkaXIsIGJvb2wgdmlzdWFsbHlPcmRlcmVkLAogICAgICAgICAgICAgICAgICAgYm9vbCBhcHBs
eVdvcmRSb3VuZGluZywgYm9vbCBhcHBseVJ1blJvdW5kaW5nLCBjb25zdCBGb250RGF0YSogc3Vi
c3RpdHV0ZUZvbnREYXRhKTsKIApAQCAtNjQsMTAgKzY0LDkgQEAKIAogICAgIGNvbnN0IEZvbnQq
IG1fZm9udDsKIAotICAgIGNvbnN0IFVDaGFyKiBtX2NoYXJhY3RlcnM7Ci0gICAgaW50IG1fZnJv
bTsKLSAgICBpbnQgbV90bzsKLSAgICBpbnQgbV9sZW47CisgICAgY29uc3QgVGV4dFJ1biYgbV9y
dW47CisgICAgaW50IG1fZW5kOworCiAgICAgaW50IG1fdGFiV2lkdGg7CiAgICAgaW50IG1feFBv
czsKICAgICBpbnQgbV90b0FkZDsKQEAgLTg4LDEzICs4NywxMyBAQAogICAgIFVDaGFyMzIgbm9y
bWFsaXplVm9pY2luZ01hcmtzKCk7CiB9OwogCi1XaWR0aEl0ZXJhdG9yOjpXaWR0aEl0ZXJhdG9y
KGNvbnN0IEZvbnQqIGZvbnQsIGNvbnN0IFVDaGFyKiBzdHIsIGludCBmcm9tLCBpbnQgdG8sIGlu
dCBsZW4sCitXaWR0aEl0ZXJhdG9yOjpXaWR0aEl0ZXJhdG9yKGNvbnN0IEZvbnQqIGZvbnQsIGNv
bnN0IFRleHRSdW4mIHJ1biwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRhYldp
ZHRoLCBpbnQgeHBvcywgaW50IHRvQWRkLCBUZXh0RGlyZWN0aW9uIGRpciwgYm9vbCB2aXN1YWxs
eU9yZGVyZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXBwbHlXb3JkUm91
bmRpbmcsIGJvb2wgYXBwbHlSdW5Sb3VuZGluZywgY29uc3QgRm9udERhdGEqIHN1YnN0aXR1dGVG
b250RGF0YSkKLTptX2ZvbnQoZm9udCksIG1fY2hhcmFjdGVycygoY29uc3QgVUNoYXIqKXN0ciks
IG1fZnJvbShmcm9tKSwgbV90byh0byksIG1fbGVuKGxlbiksCis6bV9mb250KGZvbnQpLCBtX3J1
bihydW4pLCBtX2VuZChkaXIgPT0gTFRSID8gcnVuLnRvKCkgOiBydW4ubGVuZ3RoKCkpLAogIG1f
dGFiV2lkdGgodGFiV2lkdGgpLCBtX3hQb3MoeHBvcyksIG1fdG9BZGQodG9BZGQpLCBtX2Rpcihk
aXIpLCBtX3Zpc3VhbGx5T3JkZXJlZCh2aXN1YWxseU9yZGVyZWQpLAogIG1fYXBwbHlXb3JkUm91
bmRpbmcoYXBwbHlXb3JkUm91bmRpbmcpLCBtX2FwcGx5UnVuUm91bmRpbmcoYXBwbHlSdW5Sb3Vu
ZGluZyksIG1fc3Vic3RpdHV0ZUZvbnREYXRhKHN1YnN0aXR1dGVGb250RGF0YSksCi0gbV9jdXJy
ZW50Q2hhcmFjdGVyKGZyb20pLCBtX3J1bldpZHRoU29GYXIoMCksIG1fZmluYWxSb3VuZGluZ1dp
ZHRoKDApCisgbV9jdXJyZW50Q2hhcmFjdGVyKHJ1bi5mcm9tKCkpLCBtX3J1bldpZHRoU29GYXIo
MCksIG1fZmluYWxSb3VuZGluZ1dpZHRoKDApCiB7CiAgICAgLy8gSWYgdGhlIHBhZGRpbmcgaXMg
bm9uLXplcm8sIGNvdW50IHRoZSBudW1iZXIgb2Ygc3BhY2VzIGluIHRoZSBydW4KICAgICAvLyBh
bmQgZGl2aWRlIHRoYXQgYnkgdGhlIHBhZGRpbmcgZm9yIHBlciBzcGFjZSBhZGRpdGlvbi4KQEAg
LTEwMyw4ICsxMDIsOCBAQAogICAgICAgICBtX3BhZFBlclNwYWNlID0gMDsKICAgICB9IGVsc2Ug
ewogICAgICAgICBmbG9hdCBudW1TcGFjZXMgPSAwOwotICAgICAgICBmb3IgKGludCBpID0gZnJv
bTsgaSA8IHRvOyBpKyspCi0gICAgICAgICAgICBpZiAoRm9udDo6dHJlYXRBc1NwYWNlKG1fY2hh
cmFjdGVyc1tpXSkpCisgICAgICAgIGZvciAoaW50IGkgPSBydW4uZnJvbSgpOyBpIDwgbV9lbmQ7
IGkrKykKKyAgICAgICAgICAgIGlmIChGb250Ojp0cmVhdEFzU3BhY2UobV9ydW5baV0pKQogICAg
ICAgICAgICAgICAgIG51bVNwYWNlcysrOwogCiAgICAgICAgIG1fcGFkZGluZyA9IHRvQWRkOwpA
QCAtMTE0LDIzICsxMTMsMjQgQEAKICAgICAvLyBDYWxjdWxhdGUgd2lkdGggdXAgdG8gc3RhcnRp
bmcgcG9zaXRpb24gb2YgdGhlIHJ1bi4gIFRoaXMgaXMKICAgICAvLyBuZWNlc3NhcnkgdG8gZW5z
dXJlIHRoYXQgb3VyIHJvdW5kaW5nIGhhY2tzIGFyZSBhbHdheXMgY29uc2lzdGVudGx5CiAgICAg
Ly8gYXBwbGllZC4KLSAgICBpZiAobV9mcm9tID09IDApCisgICAgaWYgKHJ1bi5mcm9tKCkgPT0g
MCkKICAgICAgICAgbV93aWR0aFRvU3RhcnQgPSAwOwogICAgIGVsc2UgewotICAgICAgICBXaWR0
aEl0ZXJhdG9yIHN0YXJ0UG9zaXRpb25JdGVyYXRvcihmb250LCBzdHIsIDAsIGxlbiwgbGVuLCB0
YWJXaWR0aCwgeHBvcywgdG9BZGQsIGRpciwgdmlzdWFsbHlPcmRlcmVkLAorICAgICAgICBUZXh0
UnVuIGNvbXBsZXRlUnVuKHJ1bi5jaGFyYWN0ZXJzKCksIHJ1bi5sZW5ndGgoKSk7CisgICAgICAg
IFdpZHRoSXRlcmF0b3Igc3RhcnRQb3NpdGlvbkl0ZXJhdG9yKGZvbnQsIGNvbXBsZXRlUnVuLCB0
YWJXaWR0aCwgeHBvcywgdG9BZGQsIGRpciwgdmlzdWFsbHlPcmRlcmVkLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBseVdvcmRSb3VuZGluZywgYXBwbHlS
dW5Sb3VuZGluZywgc3Vic3RpdHV0ZUZvbnREYXRhKTsKLSAgICAgICAgc3RhcnRQb3NpdGlvbkl0
ZXJhdG9yLmFkdmFuY2UoZnJvbSk7CisgICAgICAgIHN0YXJ0UG9zaXRpb25JdGVyYXRvci5hZHZh
bmNlKHJ1bi5mcm9tKCkpOwogICAgICAgICBtX3dpZHRoVG9TdGFydCA9IHN0YXJ0UG9zaXRpb25J
dGVyYXRvci5tX3J1bldpZHRoU29GYXI7CiAgICAgfQogfQogCiB2b2lkIFdpZHRoSXRlcmF0b3I6
OmFkdmFuY2UoaW50IG9mZnNldCwgR2x5cGhCdWZmZXIqIGdseXBoQnVmZmVyKQogewotICAgIGlm
IChvZmZzZXQgPiBtX3RvKQotICAgICAgICBvZmZzZXQgPSBtX3RvOworICAgIGlmIChvZmZzZXQg
PiBtX2VuZCkKKyAgICAgICAgb2Zmc2V0ID0gbV9lbmQ7CiAKICAgICBpbnQgY3VycmVudENoYXJh
Y3RlciA9IG1fY3VycmVudENoYXJhY3RlcjsKLSAgICBjb25zdCBVQ2hhciogY3AgPSAmbV9jaGFy
YWN0ZXJzW2N1cnJlbnRDaGFyYWN0ZXJdOworICAgIGNvbnN0IFVDaGFyKiBjcCA9IG1fcnVuLmRh
dGEoY3VycmVudENoYXJhY3Rlcik7CiAKICAgICBib29sIHJ0bCA9IChtX2RpciA9PSBSVEwpOwog
ICAgIGJvb2wgbmVlZENoYXJUcmFuc2Zvcm0gPSBydGwgfHwgbV9mb250LT5pc1NtYWxsQ2Fwcygp
OwpAQCAtMTYxLDcgKzE2MSw3IEBACiAgICAgICAgICAgICAgICAgLy8gRG8gd2UgaGF2ZSBhIHN1
cnJvZ2F0ZSBwYWlyPyAgSWYgc28sIGRldGVybWluZSB0aGUgZnVsbCBVbmljb2RlICgzMiBiaXQp
CiAgICAgICAgICAgICAgICAgLy8gY29kZSBwb2ludCBiZWZvcmUgZ2x5cGggbG9va3VwLgogICAg
ICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBoYXZlIGFub3RoZXIgY2hhcmFjdGVyIGFuZCBp
dCdzIGEgbG93IHN1cnJvZ2F0ZS4KLSAgICAgICAgICAgICAgICBpZiAoY3VycmVudENoYXJhY3Rl
ciArIDEgPj0gbV9sZW4pCisgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRDaGFyYWN0ZXIgKyAx
ID49IG1fcnVuLmxlbmd0aCgpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICBVbmlDaGFyIGxvdyA9IGNwWzFdOwogICAgICAgICAgICAgICAgIGlmICghVTE2X0lT
X1RSQUlMKGxvdykpCkBAIC0xOTcsNyArMTk3LDcgQEAKICAgICAgICAgICAgIGNvbnN0IEZvbnRE
YXRhKiBzdWJzdGl0dXRlRm9udERhdGEgPSBmb250RGF0YS0+ZmluZFN1YnN0aXR1dGVGb250RGF0
YShjcCwgY2x1c3Rlckxlbmd0aCwgbV9mb250LT5mb250RGVzY3JpcHRpb24oKSk7CiAgICAgICAg
ICAgICBpZiAoc3Vic3RpdHV0ZUZvbnREYXRhKSB7CiAgICAgICAgICAgICAgICAgR2x5cGhCdWZm
ZXIgbG9jYWxHbHlwaEJ1ZmZlcjsKLSAgICAgICAgICAgICAgICBtX2ZvbnQtPmZsb2F0V2lkdGhG
b3JTaW1wbGVUZXh0KChVQ2hhciopY3AsIGNsdXN0ZXJMZW5ndGgsIDAsIGNsdXN0ZXJMZW5ndGgs
IDAsIDAsIDAsIG1fZGlyLCBtX3Zpc3VhbGx5T3JkZXJlZCwgCisgICAgICAgICAgICAgICAgbV9m
b250LT5mbG9hdFdpZHRoRm9yU2ltcGxlVGV4dChUZXh0UnVuKChVQ2hhciopY3AsIGNsdXN0ZXJM
ZW5ndGgpLCAwLCAwLCAwLCBtX2RpciwgbV92aXN1YWxseU9yZGVyZWQsIAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fYXBwbHlXb3JkUm91bmRpbmcs
IGZhbHNlLCBzdWJzdGl0dXRlRm9udERhdGEsIDAsICZsb2NhbEdseXBoQnVmZmVyKTsKICAgICAg
ICAgICAgICAgICBpZiAobG9jYWxHbHlwaEJ1ZmZlci5zaXplKCkgPT0gMSkgewogICAgICAgICAg
ICAgICAgICAgICBhc3NlcnQoc3Vic3RpdHV0ZUZvbnREYXRhID09IGxvY2FsR2x5cGhCdWZmZXIu
Zm9udERhdGFBdCgwKSk7CkBAIC0yNjYsOCArMjY2LDggQEAKIAogICAgICAgICAvLyBDaGVjayB0
byBzZWUgaWYgdGhlIG5leHQgY2hhcmFjdGVyIGlzIGEgInJvdW5kaW5nIGhhY2sgY2hhcmFjdGVy
IiwgaWYgc28sIGFkanVzdAogICAgICAgICAvLyB3aWR0aCBzbyB0aGF0IHRoZSB0b3RhbCBydW4g
d2lkdGggd2lsbCBiZSBvbiBhbiBpbnRlZ2VyIGJvdW5kYXJ5LgotICAgICAgICBpZiAoKG1fYXBw
bHlXb3JkUm91bmRpbmcgJiYgY3VycmVudENoYXJhY3RlciA8IG1fbGVuICYmIEZvbnQ6OmlzUm91
bmRpbmdIYWNrQ2hhcmFjdGVyKCpjcCkpCi0gICAgICAgICAgICAgICAgfHwgKG1fYXBwbHlSdW5S
b3VuZGluZyAmJiBjdXJyZW50Q2hhcmFjdGVyID49IG1fdG8pKSB7CisgICAgICAgIGlmICgobV9h
cHBseVdvcmRSb3VuZGluZyAmJiBjdXJyZW50Q2hhcmFjdGVyIDwgbV9ydW4ubGVuZ3RoKCkgJiYg
Rm9udDo6aXNSb3VuZGluZ0hhY2tDaGFyYWN0ZXIoKmNwKSkKKyAgICAgICAgICAgICAgICB8fCAo
bV9hcHBseVJ1blJvdW5kaW5nICYmIGN1cnJlbnRDaGFyYWN0ZXIgPj0gbV9lbmQpKSB7CiAgICAg
ICAgICAgICBmbG9hdCB0b3RhbFdpZHRoID0gbV93aWR0aFRvU3RhcnQgKyBydW5XaWR0aFNvRmFy
ICsgd2lkdGg7CiAgICAgICAgICAgICB3aWR0aCArPSBjZWlsZih0b3RhbFdpZHRoKSAtIHRvdGFs
V2lkdGg7CiAgICAgICAgIH0KQEAgLTI4OCwxMiArMjg4LDEyIEBACiBVQ2hhcjMyIFdpZHRoSXRl
cmF0b3I6Om5vcm1hbGl6ZVZvaWNpbmdNYXJrcygpCiB7CiAgICAgaW50IGN1cnJlbnRDaGFyYWN0
ZXIgPSBtX2N1cnJlbnRDaGFyYWN0ZXI7Ci0gICAgaWYgKGN1cnJlbnRDaGFyYWN0ZXIgKyAxIDwg
bV90bykgewotICAgICAgICBpZiAodV9nZXRDb21iaW5pbmdDbGFzcyhtX2NoYXJhY3RlcnNbY3Vy
cmVudENoYXJhY3RlciArIDFdKSA9PSBISVJBR0FOQV9LQVRBS0FOQV9WT0lDSU5HX01BUktTKSB7
CisgICAgaWYgKGN1cnJlbnRDaGFyYWN0ZXIgKyAxIDwgbV9lbmQpIHsKKyAgICAgICAgaWYgKHVf
Z2V0Q29tYmluaW5nQ2xhc3MobV9ydW5bY3VycmVudENoYXJhY3RlciArIDFdKSA9PSBISVJBR0FO
QV9LQVRBS0FOQV9WT0lDSU5HX01BUktTKSB7CiAgICAgICAgICAgICAvLyBOb3JtYWxpemUgaW50
byBjb21wb3NlZCBmb3JtIHVzaW5nIDMuMiBydWxlcy4KICAgICAgICAgICAgIFVDaGFyIG5vcm1h
bGl6ZWRDaGFyYWN0ZXJzWzJdID0geyAwLCAwIH07CiAgICAgICAgICAgICBVRXJyb3JDb2RlIHVT
dGF0dXMgPSAoVUVycm9yQ29kZSkwOyAgCi0gICAgICAgICAgICBpbnQzMl90IHJlc3VsdExlbmd0
aCA9IHVub3JtX25vcm1hbGl6ZSgmbV9jaGFyYWN0ZXJzW2N1cnJlbnRDaGFyYWN0ZXJdLCAyLAor
ICAgICAgICAgICAgaW50MzJfdCByZXN1bHRMZW5ndGggPSB1bm9ybV9ub3JtYWxpemUobV9ydW4u
ZGF0YShjdXJyZW50Q2hhcmFjdGVyKSwgMiwKICAgICAgICAgICAgICAgICBVTk9STV9ORkMsIFVO
T1JNX1VOSUNPREVfM18yLCAmbm9ybWFsaXplZENoYXJhY3RlcnNbMF0sIDIsICZ1U3RhdHVzKTsK
ICAgICAgICAgICAgIGlmIChyZXN1bHRMZW5ndGggPT0gMSAmJiB1U3RhdHVzID09IDApCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRDaGFyYWN0ZXJzWzBdOwpAQCAtMzU2LDEzICsz
NTYsMTMgQEAKICAgICBtX2ZvbnRMaXN0LT5pbnZhbGlkYXRlKCk7CiB9CiAKLWludCBGb250Ojp3
aWR0aChjb25zdCBVQ2hhciogY2hzLCBpbnQgc2xlbiwgaW50IHBvcywgaW50IGxlbiwgaW50IHRh
YldpZHRoLCBpbnQgeHBvcykgY29uc3QKK2ludCBGb250Ojp3aWR0aChjb25zdCBUZXh0UnVuJiBy
dW4sIGludCB0YWJXaWR0aCwgaW50IHhwb3MpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IFdhbnQg
dG8gZGVmaW5lIGFuIGxyb3VuZGYgZm9yIHdpbjMyLgogI2lmIF9fQVBQTEVfXwotICAgIHJldHVy
biBscm91bmRmKGZsb2F0V2lkdGgoY2hzICsgcG9zLCBzbGVuIC0gcG9zLCAwLCBsZW4sIHRhYldp
ZHRoLCB4cG9zKSk7CisgICAgcmV0dXJuIGxyb3VuZGYoZmxvYXRXaWR0aChydW4sIHRhYldpZHRo
LCB4cG9zKSk7CiAjZWxzZQotICAgIHJldHVybiBmbG9hdFdpZHRoKGNocyArIHBvcywgc2xlbiAt
IHBvcywgMCwgbGVuLCB0YWJXaWR0aCwgeHBvcykgKyAwLjVmOworICAgIHJldHVybiBmbG9hdFdp
ZHRoKHJ1biwgdGFiV2lkdGgsIHhwb3MpICsgMC41ZjsKICNlbmRpZgogfQogCkBAIC00MDQsMTQg
KzQwNCwxNCBAQAogICAgIGdBbHdheXNVc2VDb21wbGV4UGF0aCA9IGFsd2F5c1VzZTsKIH0KIAot
Ym9vbCBGb250OjpjYW5Vc2VHbHlwaENhY2hlKGNvbnN0IFVDaGFyKiBzdHIsIGludCB0bykgY29u
c3QKK2Jvb2wgRm9udDo6Y2FuVXNlR2x5cGhDYWNoZShjb25zdCBUZXh0UnVuJiBydW4pIGNvbnN0
CiB7CiAgICAgaWYgKGdBbHdheXNVc2VDb21wbGV4UGF0aCkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIAogICAgIC8vIFN0YXJ0IGZyb20gMCBzaW5jZSBkcmF3aW5nIGFuZCBoaWdobGlnaHRp
bmcgYWxzbyBtZWFzdXJlIHRoZSBjaGFyYWN0ZXJzIGJlZm9yZSBydW4tPmZyb20KLSAgICBmb3Ig
KGludCBpID0gMDsgaSA8IHRvOyBpKyspIHsKLSAgICAgICAgVUNoYXIgYyA9IHN0cltpXTsKKyAg
ICBmb3IgKGludCBpID0gMDsgaSA8IHJ1bi50bygpOyBpKyspIHsKKyAgICAgICAgY29uc3QgVUNo
YXIgYyA9IHJ1bltpXTsKICAgICAgICAgaWYgKGMgPCAweDMwMCkgICAgICAvLyBVKzAzMDAgdGhy
b3VnaCBVKzAzNkYgQ29tYmluaW5nIGRpYWNyaXRpY2FsIG1hcmtzCiAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgaWYgKGMgPD0gMHgzNkYpCkBAIC00NTcsNyArNDU3LDcgQEAKIAogfQog
Ci12b2lkIEZvbnQ6OmRyYXdTaW1wbGVUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgSW50UG9pbnQmIHBvaW50LCBpbnQgdGFiV2lkdGgsIGludCB4cG9zLCBjb25zdCBVQ2hhciog
c3RyLCBpbnQgbGVuLCBpbnQgZnJvbSwgaW50IHRvLAordm9pZCBGb250OjpkcmF3U2ltcGxlVGV4
dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgSW50
UG9pbnQmIHBvaW50LCBpbnQgdGFiV2lkdGgsIGludCB4cG9zLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgdG9BZGQsIFRleHREaXJlY3Rpb24gZGlyLCBib29sIHZpc3VhbGx5T3JkZXJl
ZCkgY29uc3QKIHsKICAgICAvLyBUaGlzIGdseXBoIGJ1ZmZlciBob2xkcyBvdXIgZ2x5cGhzK2Fk
dmFuY2VzK2ZvbnQgZGF0YSBmb3IgZWFjaCBnbHlwaC4KQEAgLTQ2NSw3ICs0NjUsNyBAQAogCiAg
ICAgLy8gT3VyIG1lYXN1cmluZyBjb2RlIHdpbGwgZ2VuZXJhdGUgZ2x5cGhzIGFuZCBhZHZhbmNl
cyBmb3IgdXMuCiAgICAgZmxvYXQgc3RhcnRYOwotICAgIGZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0
KHN0ciwgbGVuLCBmcm9tLCB0bywgdGFiV2lkdGgsIHhwb3MsIHRvQWRkLCBkaXIsIHZpc3VhbGx5
T3JkZXJlZCwgCisgICAgZmxvYXRXaWR0aEZvclNpbXBsZVRleHQocnVuLCB0YWJXaWR0aCwgeHBv
cywgdG9BZGQsIGRpciwgdmlzdWFsbHlPcmRlcmVkLCAKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0cnVlLCB0cnVlLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdGFydFgs
ICZnbHlwaEJ1ZmZlcik7CiAgICAgCkBAIC01MDIsNDggKzUwMiw0MCBAQAogICAgIGRyYXdHbHlw
aHMoY29udGV4dCwgZm9udERhdGEsIGdseXBoQnVmZmVyLCBsYXN0RnJvbSwgbmV4dEdseXBoIC0g
bGFzdEZyb20sIHN0YXJ0UG9pbnQpOwogfQogCi12b2lkIEZvbnQ6OmRyYXdUZXh0KEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgY29uc3QgSW50UG9pbnQmIHBvaW50LCBpbnQgdGFiV2lkdGgsIGlu
dCB4cG9zLCBjb25zdCBVQ2hhciogc3RyLCBpbnQgbGVuLCBpbnQgZnJvbSwgaW50IHRvLAordm9p
ZCBGb250OjpkcmF3VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4m
IHJ1biwgY29uc3QgSW50UG9pbnQmIHBvaW50LCBpbnQgdGFiV2lkdGgsIGludCB4cG9zLAogICAg
ICAgICAgICAgICAgICAgICBpbnQgdG9BZGQsIFRleHREaXJlY3Rpb24gZCwgYm9vbCB2aXN1YWxs
eU9yZGVyZWQpIGNvbnN0CiB7Ci0gICAgaWYgKGxlbiA9PSAwKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAoZnJvbSA8IDApCi0gICAgICAgIGZyb20gPSAwOwotICAgIGlmICh0byA8IDApCi0g
ICAgICAgIHRvID0gbGVuOwotCi0gICAgaWYgKGNhblVzZUdseXBoQ2FjaGUoc3RyLCB0bykpCi0g
ICAgICAgIGRyYXdTaW1wbGVUZXh0KGNvbnRleHQsIHBvaW50LCB0YWJXaWR0aCwgeHBvcywgc3Ry
LCBsZW4sIGZyb20sIHRvLCB0b0FkZCwgZCwgdmlzdWFsbHlPcmRlcmVkKTsKKyAgICBpZiAoY2Fu
VXNlR2x5cGhDYWNoZShydW4pKQorICAgICAgICBkcmF3U2ltcGxlVGV4dChjb250ZXh0LCBydW4s
IHBvaW50LCB0YWJXaWR0aCwgeHBvcywgdG9BZGQsIGQsIHZpc3VhbGx5T3JkZXJlZCk7CiAgICAg
ZWxzZQotICAgICAgICBkcmF3Q29tcGxleFRleHQoY29udGV4dCwgcG9pbnQsIHRhYldpZHRoLCB4
cG9zLCBzdHIsIGxlbiwgZnJvbSwgdG8sIHRvQWRkLCBkLCB2aXN1YWxseU9yZGVyZWQpOworICAg
ICAgICBkcmF3Q29tcGxleFRleHQoY29udGV4dCwgcnVuLCBwb2ludCwgdGFiV2lkdGgsIHhwb3Ms
IHRvQWRkLCBkLCB2aXN1YWxseU9yZGVyZWQpOwogfQogCi1mbG9hdCBGb250OjpmbG9hdFdpZHRo
KGNvbnN0IFVDaGFyKiBzdHIsIGludCBzbGVuLCBpbnQgZnJvbSwgaW50IGxlbiwgaW50IHRhYldp
ZHRoLCBpbnQgeHBvcywgYm9vbCBydW5Sb3VuZGluZykgY29uc3QKK2Zsb2F0IEZvbnQ6OmZsb2F0
V2lkdGgoY29uc3QgVGV4dFJ1biYgcnVuLCBpbnQgdGFiV2lkdGgsIGludCB4cG9zLCBib29sIHJ1
blJvdW5kaW5nKSBjb25zdAogewotICAgIGludCB0byA9IGZyb20gKyBsZW47Ci0gICAgaWYgKGNh
blVzZUdseXBoQ2FjaGUoc3RyLCB0bykpCi0gICAgICAgIHJldHVybiBmbG9hdFdpZHRoRm9yU2lt
cGxlVGV4dChzdHIsIHNsZW4sIGZyb20sIHRvLCB0YWJXaWR0aCwgeHBvcywgMCwgTFRSLCBmYWxz
ZSwgdHJ1ZSwgcnVuUm91bmRpbmcsIDAsIDAsIDApOworICAgIGlmIChjYW5Vc2VHbHlwaENhY2hl
KHJ1bikpCisgICAgICAgIHJldHVybiBmbG9hdFdpZHRoRm9yU2ltcGxlVGV4dChydW4sIHRhYldp
ZHRoLCB4cG9zLCAwLCBMVFIsIGZhbHNlLCB0cnVlLCBydW5Sb3VuZGluZywgMCwgMCwgMCk7CiAg
ICAgZWxzZQotICAgICAgICByZXR1cm4gZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KHN0ciwgc2xl
biwgZnJvbSwgdG8sIHRhYldpZHRoLCB4cG9zLCBydW5Sb3VuZGluZyk7CisgICAgICAgIHJldHVy
biBmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQocnVuLCB0YWJXaWR0aCwgeHBvcywgcnVuUm91bmRp
bmcpOwogfQogCi1mbG9hdCBGb250OjpmbG9hdFdpZHRoRm9yU2ltcGxlVGV4dChjb25zdCBVQ2hh
ciogc3RyLCBpbnQgbGVuLCBpbnQgZnJvbSwgaW50IHRvLCBpbnQgdGFiV2lkdGgsIGludCB4cG9z
LCBpbnQgdG9BZGQsIAorZmxvYXQgRm9udDo6ZmxvYXRXaWR0aEZvclNpbXBsZVRleHQoY29uc3Qg
VGV4dFJ1biYgcnVuLCBpbnQgdGFiV2lkdGgsIGludCB4cG9zLCBpbnQgdG9BZGQsIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dERpcmVjdGlvbiBkaXIsIGJvb2wgdmlz
dWFsbHlPcmRlcmVkLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
YXBwbHlXb3JkUm91bmRpbmcsIGJvb2wgYXBwbHlSdW5Sb3VuZGluZywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZvbnREYXRhKiBzdWJzdGl0dXRlRm9udCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0KiBzdGFydFBvc2l0aW9uLCBH
bHlwaEJ1ZmZlciogZ2x5cGhCdWZmZXIpIGNvbnN0CiB7Ci0gICAgV2lkdGhJdGVyYXRvciBpdCh0
aGlzLCBzdHIsIGZyb20sIGRpciA9PSBMVFIgPyB0byA6IGxlbiwgbGVuLCB0YWJXaWR0aCwgeHBv
cywgdG9BZGQsIGRpciwgdmlzdWFsbHlPcmRlcmVkLCAKKyAgICAKKyAgICBXaWR0aEl0ZXJhdG9y
IGl0KHRoaXMsIHJ1biwgdGFiV2lkdGgsIHhwb3MsIHRvQWRkLCBkaXIsIHZpc3VhbGx5T3JkZXJl
ZCwgCiAgICAgICAgICAgICAgICAgICAgICBhcHBseVdvcmRSb3VuZGluZywgYXBwbHlSdW5Sb3Vu
ZGluZywgc3Vic3RpdHV0ZUZvbnQpOwotICAgIGl0LmFkdmFuY2UodG8sIGdseXBoQnVmZmVyKTsK
KyAgICBpdC5hZHZhbmNlKHJ1bi50bygpLCBnbHlwaEJ1ZmZlcik7CiAgICAgZmxvYXQgcnVuV2lk
dGggPSBpdC5tX3J1bldpZHRoU29GYXI7CiAgICAgaWYgKHN0YXJ0UG9zaXRpb24pIHsKICAgICAg
ICAgaWYgKGRpciA9PSBMVFIpCiAgICAgICAgICAgICAqc3RhcnRQb3NpdGlvbiA9IGl0Lm1fd2lk
dGhUb1N0YXJ0OwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGZsb2F0IGZpbmFsUm91bmRp
bmdXaWR0aCA9IGl0Lm1fZmluYWxSb3VuZGluZ1dpZHRoOwotICAgICAgICAgICAgaXQuYWR2YW5j
ZShsZW4pOworICAgICAgICAgICAgaXQuYWR2YW5jZShydW4ubGVuZ3RoKCkpOwogICAgICAgICAg
ICAgKnN0YXJ0UG9zaXRpb24gPSBpdC5tX3J1bldpZHRoU29GYXIgLSBydW5XaWR0aCArIGZpbmFs
Um91bmRpbmdXaWR0aDsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IHBsYXRmb3JtL0ZvbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9Gb250LmgJKHJldmlzaW9uIDE0MjkyKQorKysgcGxhdGZv
cm0vRm9udC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0NiwzOSBAQAogCiBlbnVtIFBpdGNo
IHsgVW5rbm93blBpdGNoLCBGaXhlZFBpdGNoLCBWYXJpYWJsZVBpdGNoIH07CiAKK2NsYXNzIFRl
eHRSdW4KK3sKK3B1YmxpYzoKKyAgICBUZXh0UnVuKGNvbnN0IFVDaGFyKiBjLCBpbnQgbGVuKQor
ICAgIDptX2NoYXJhY3RlcnMoYyksIG1fbGVuKGxlbiksIG1fZnJvbSgwKSwgbV90byhsZW4pCisg
ICAge30KKworICAgIFRleHRSdW4oY29uc3QgVUNoYXIqIGMsIGludCBsZW4sIGludCBmcm9tLCBp
bnQgdG8pIC8vIFRoaXMgY29uc3RydWN0b3IgaXMgb25seSB1c2VkIGluIG9uZSBwbGFjZSBpbiBN
YWMtc3BlY2lmaWMgY29kZS4KKyAgICA6bV9jaGFyYWN0ZXJzKGMpLCBtX2xlbihsZW4pLCBtX2Zy
b20oZnJvbSksIG1fdG8odG8pCisgICAge30KKworICAgIFRleHRSdW4oY29uc3QgU3RyaW5nSW1w
bCogcywgaW50IG9mZnNldCA9IDAsIGludCBmcm9tID0gLTEsIGludCB0byA9IC0xKQorICAgIDpt
X2NoYXJhY3RlcnMocy0+Y2hhcmFjdGVycygpICsgb2Zmc2V0KSwgbV9sZW4ocy0+bGVuZ3RoKCkg
LSBvZmZzZXQpLCBtX2Zyb20oYWRqdXN0RnJvbShmcm9tKSksIG1fdG8oYWRqdXN0VG8odG8pKQor
ICAgIHt9CisKKyAgICBjb25zdCBVQ2hhciBvcGVyYXRvcltdKGludCBpKSBjb25zdCB7IHJldHVy
biBtX2NoYXJhY3RlcnNbaV07IH0KKyAgICBjb25zdCBVQ2hhciogZGF0YShpbnQgaSkgY29uc3Qg
eyByZXR1cm4gJm1fY2hhcmFjdGVyc1tpXTsgfQorCisgICAgaW50IGFkanVzdEZyb20oaW50IGZy
b20pIGNvbnN0IHsgcmV0dXJuIGZyb20gPT0gLTEgPyAwIDogZnJvbTsgfQorICAgIGludCBhZGp1
c3RUbyhpbnQgdG8pIGNvbnN0IHsgcmV0dXJuIHRvID09IC0xID8gbV9sZW4gOiB0bzsgfQorCisg
ICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMoKSBjb25zdCB7IHJldHVybiBtX2NoYXJhY3RlcnM7
IH0KKyAgICBpbnQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW47IH0KKyAgICBpbnQgZnJv
bSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJvbTsgfQorICAgIGludCB0bygpIGNvbnN0IHsgcmV0dXJu
IG1fdG87IH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBVQ2hhciogbV9jaGFyYWN0ZXJzOworICAg
IGludCBtX2xlbjsKKyAgICBpbnQgbV9mcm9tOworICAgIGludCBtX3RvOworfTsKKwogY2xhc3Mg
Rm9udCB7CiBwdWJsaWM6CiAgICAgRm9udCgpOwpAQCAtNzQsMjYgKzEwNywyMyBAQAogICAgIAog
ICAgIHZvaWQgdXBkYXRlKCkgY29uc3Q7CiAKLSAgICB2b2lkIGRyYXdUZXh0KEdyYXBoaWNzQ29u
dGV4dCosIGNvbnN0IEludFBvaW50JiwgaW50IHRhYldpZHRoLCBpbnQgeHBvcywKLSAgICAgICAg
ICAgICAgICAgIGNvbnN0IFVDaGFyKiwgaW50IGxlbiwgaW50IGZyb20sIGludCB0bywgaW50IHRv
QWRkLCAKLSAgICAgICAgICAgICAgICAgIFRleHREaXJlY3Rpb24sIGJvb2wgdmlzdWFsbHlPcmRl
cmVkKSBjb25zdDsKLSAgICB2b2lkIGRyYXdIaWdobGlnaHRGb3JUZXh0KEdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IEludFBvaW50JiwgaW50IGgsIGludCB0YWJXaWR0aCwgaW50IHhwb3MsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciosIGludCBsZW4sIGludCBmcm9t
LCBpbnQgdG8sIGludCB0b0FkZCwgCisgICAgdm9pZCBkcmF3VGV4dChHcmFwaGljc0NvbnRleHQq
LCBjb25zdCBUZXh0UnVuJiwgY29uc3QgSW50UG9pbnQmLCBpbnQgdGFiV2lkdGgsIGludCB4cG9z
LAorICAgICAgICAgICAgICAgICAgaW50IHRvQWRkLCBUZXh0RGlyZWN0aW9uLCBib29sIHZpc3Vh
bGx5T3JkZXJlZCkgY29uc3Q7CisgICAgdm9pZCBkcmF3SGlnaGxpZ2h0Rm9yVGV4dChHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgSW50UG9pbnQmLCBpbnQgaCwgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGFiV2lkdGgsIGludCB4cG9zLCBpbnQgdG9B
ZGQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dERpcmVjdGlvbiBkLCBib29s
IHZpc3VhbGx5T3JkZXJlZCwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikgY29uc3Q7CiAg
ICAgdm9pZCBkcmF3TGluZUZvclRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UG9pbnQm
LCBpbnQgeU9mZnNldCwgaW50IHdpZHRoKSBjb25zdDsKICAgICB2b2lkIGRyYXdMaW5lRm9yTWlz
c3BlbGxpbmcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UG9pbnQmLCBpbnQgd2lkdGgpIGNv
bnN0OwogICAgIGludCBtaXNzcGVsbGluZ0xpbmVUaGlja25lc3MoR3JhcGhpY3NDb250ZXh0Kikg
Y29uc3Q7CiAKLSAgICBmbG9hdCBmbG9hdFdpZHRoKGNvbnN0IFVDaGFyKiwgaW50IHNsZW4sIGlu
dCBwb3MsIGludCBsZW4sIGludCB0YWJXaWR0aCwgaW50IHhwb3MsIGJvb2wgcnVuUm91bmRpbmcg
PSB0cnVlKSBjb25zdDsKKyAgICBmbG9hdCBmbG9hdFdpZHRoKGNvbnN0IFRleHRSdW4mLCBpbnQg
dGFiV2lkdGgsIGludCB4cG9zLCBib29sIHJ1blJvdW5kaW5nID0gdHJ1ZSkgY29uc3Q7CiAgICAg
Ci0gICAgaW50IGNoZWNrU2VsZWN0aW9uUG9pbnQoY29uc3QgVUNoYXIqLCBpbnQgc2xlbiwgaW50
IHBvcywgaW50IGxlbiwgaW50IHRvQWRkLCBpbnQgdGFiV2lkdGgsIGludCB4cG9zLAorICAgIGlu
dCBjaGVja1NlbGVjdGlvblBvaW50KGNvbnN0IFRleHRSdW4mLCBpbnQgdG9BZGQsIGludCB0YWJX
aWR0aCwgaW50IHhwb3MsCiAgICAgICAgIGludCB4LCBUZXh0RGlyZWN0aW9uLCBib29sIHZpc3Vh
bGx5T3JkZXJlZCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3Q7Ci0gICAgSW50UmVj
dCBzZWxlY3Rpb25SZWN0Rm9yVGV4dChjb25zdCBJbnRQb2ludCYsIGludCBoLCBpbnQgdGFiV2lk
dGgsIGludCB4cG9zLCAKLSAgICAgICAgY29uc3QgVUNoYXIqLCBpbnQgc2xlbiwgaW50IHBvcywg
aW50IGxlbiwgaW50IHdpZHRoLAotICAgICAgICBib29sIHJ0bCwgYm9vbCB2aXN1YWxseU9yZGVy
ZWQgPSBmYWxzZSwgaW50IGZyb20gPSAtMSwgaW50IHRvID0gLTEpIGNvbnN0OworICAgIEludFJl
Y3Qgc2VsZWN0aW9uUmVjdEZvclRleHQoY29uc3QgVGV4dFJ1biYsIGNvbnN0IEludFBvaW50Jiwg
aW50IGgsIGludCB0YWJXaWR0aCwgaW50IHhwb3MsIGludCB3aWR0aCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgcnRsLCBib29sIHZpc3VhbGx5T3JkZXJlZCA9IGZhbHNl
KSBjb25zdDsKICAgICAKLSAgICBpbnQgd2lkdGgoY29uc3QgVUNoYXIqLCBpbnQgc2xlbiwgaW50
IHBvcywgaW50IGxlbiwgaW50IHRhYldpZHRoLCBpbnQgeHBvcykgY29uc3Q7Ci0gICAgaW50IHdp
ZHRoKGNvbnN0IFVDaGFyKiBjaHMsIGludCBzbGVuLCBpbnQgdGFiV2lkdGggPSAwLCBpbnQgeHBv
cyA9IDApIGNvbnN0IHsgcmV0dXJuIHdpZHRoKGNocywgc2xlbiwgMCwgc2xlbiwgdGFiV2lkdGgs
IHhwb3MpOyB9CisgICAgaW50IHdpZHRoKGNvbnN0IFRleHRSdW4mLCBpbnQgdGFiV2lkdGggPSAw
LCBpbnQgeHBvcyA9IDApIGNvbnN0OwogCiAgICAgYm9vbCBpc1NtYWxsQ2FwcygpIGNvbnN0IHsg
cmV0dXJuIG1fZm9udERlc2NyaXB0aW9uLnNtYWxsQ2FwcygpOyB9CiAKQEAgLTEzMCwyMSArMTYw
LDIwIEBACiBwcml2YXRlOgogI2lmIF9fQVBQTEVfXwogICAgIC8vIEZJWE1FOiBUaGlzIHdpbGwg
ZXZlbnR1YWxseSBiZSBjcm9zcy1wbGF0Zm9ybSwgYnV0IHdlIHdhbnQgdG8ga2VlcCBXaW5kb3dz
IGNvbXBpbGluZyBmb3Igbm93LgotICAgIGJvb2wgY2FuVXNlR2x5cGhDYWNoZShjb25zdCBVQ2hh
ciogc3RyLCBpbnQgdG8pIGNvbnN0OwotICAgIHZvaWQgZHJhd1NpbXBsZVRleHQoR3JhcGhpY3ND
b250ZXh0KiwgY29uc3QgSW50UG9pbnQmLCBpbnQgdGFiV2lkdGgsIGludCB4cG9zLAotICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgVUNoYXIqLCBpbnQgbGVuLCBpbnQgZnJvbSwgaW50IHRv
LCBpbnQgdG9BZGQsIAorICAgIGJvb2wgY2FuVXNlR2x5cGhDYWNoZShjb25zdCBUZXh0UnVuJikg
Y29uc3Q7CisgICAgdm9pZCBkcmF3U2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBU
ZXh0UnVuJiwgY29uc3QgSW50UG9pbnQmLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCB0
YWJXaWR0aCwgaW50IHhwb3MsIGludCB0b0FkZCwgCiAgICAgICAgICAgICAgICAgICAgICAgICBU
ZXh0RGlyZWN0aW9uLCBib29sIHZpc3VhbGx5T3JkZXJlZCkgY29uc3Q7CiAgICAgdm9pZCBkcmF3
R2x5cGhzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZvbnREYXRhKiwgY29uc3QgR2x5cGhCdWZm
ZXImLCBpbnQgZnJvbSwgaW50IHRvLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7Ci0gICAgdm9p
ZCBkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UG9pbnQmLCBpbnQg
dGFiV2lkdGgsIGludCB4cG9zLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFy
KiwgaW50IGxlbiwgaW50IGZyb20sIGludCB0bywgaW50IHRvQWRkLCAKLSAgICAgICAgICAgICAg
ICAgICAgICAgICBUZXh0RGlyZWN0aW9uLCBib29sIHZpc3VhbGx5T3JkZXJlZCkgY29uc3Q7Ci0g
ICAgZmxvYXQgZmxvYXRXaWR0aEZvclNpbXBsZVRleHQoY29uc3QgVUNoYXIqLCBpbnQgbGVuLCBp
bnQgZnJvbSwgaW50IHRvLCAKKyAgICB2b2lkIGRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRl
eHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgSW50UG9pbnQmLCAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgdGFiV2lkdGgsIGludCB4cG9zLCBpbnQgdG9BZGQsIFRleHREaXJlY3Rpb24s
IGJvb2wgdmlzdWFsbHlPcmRlcmVkKSBjb25zdDsKKyAgICBmbG9hdCBmbG9hdFdpZHRoRm9yU2lt
cGxlVGV4dChjb25zdCBUZXh0UnVuJiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IHRhYldpZHRoLCBpbnQgeHBvcywgaW50IHRvQWRkLCAKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBUZXh0RGlyZWN0aW9uLCBib29sIHZpc3VhbGx5T3JkZXJlZCwgCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhcHBseVdvcmRSb3VuZGluZywg
Ym9vbCBhcHBseVJ1blJvdW5kaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEZvbnREYXRhKiBzdWJzdGl0dXRlRm9udCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmbG9hdCogc3RhcnRYLCBHbHlwaEJ1ZmZlciopIGNvbnN0OwotICAgIGZsb2F0
IGZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBVQ2hhciosIGludCBzbGVuLCBpbnQgcG9z
LCBpbnQgbGVuLCBpbnQgdGFiV2lkdGgsIGludCB4cG9zLCBib29sIHJ1blJvdW5kaW5nID0gdHJ1
ZSkgY29uc3Q7CisgICAgZmxvYXQgZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRS
dW4mLCBpbnQgdGFiV2lkdGgsIGludCB4cG9zLCBib29sIHJ1blJvdW5kaW5nID0gdHJ1ZSkgY29u
c3Q7CiAKICAgICBmcmllbmQgc3RydWN0IFdpZHRoSXRlcmF0b3I7CiAgICAgCkluZGV4OiByZW5k
ZXJpbmcvUmVuZGVyRmxleGlibGVCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5k
ZXJGbGV4aWJsZUJveC5jcHAJKHJldmlzaW9uIDE0Mjg5KQorKysgcmVuZGVyaW5nL1JlbmRlckZs
ZXhpYmxlQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzY4LDcgKzc2OCw3IEBACiAgICAgICAg
ICAgICAgICAgc3RhdGljIEF0b21pY1N0cmluZyBlbGxpcHNpc0FuZFNwYWNlU3RyKGVsbGlwc2lz
QW5kU3BhY2UsIDIpOwogCiAgICAgICAgICAgICAgICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxl
KG51bVZpc2libGVMaW5lcyA9PSAxKS0+Zm9udCgpOwotICAgICAgICAgICAgICAgIGludCBlbGxp
cHNpc0FuZFNwYWNlV2lkdGggPSBmb250LndpZHRoKGVsbGlwc2lzQW5kU3BhY2UsIDIsIDAsIDIs
IDAsIDApOworICAgICAgICAgICAgICAgIGludCBlbGxpcHNpc0FuZFNwYWNlV2lkdGggPSBmb250
LndpZHRoKFRleHRSdW4oZWxsaXBzaXNBbmRTcGFjZSwgMikpOwogCiAgICAgICAgICAgICAgICAg
Ly8gR2V0IGVsbGlwc2lzIHdpZHRoICsgIiAiICsgYW5jaG9yIHdpZHRoCiAgICAgICAgICAgICAg
ICAgaW50IHRvdGFsV2lkdGggPSBlbGxpcHNpc0FuZFNwYWNlV2lkdGggKyBhbmNob3JCb3gtPndp
ZHRoKCk7CkluZGV4OiByZW5kZXJpbmcvYmlkaS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5n
L2JpZGkuY3BwCShyZXZpc2lvbiAxNDI4OSkKKysrIHJlbmRlcmluZy9iaWRpLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtODQ2LDcgKzg0Niw3IEBACiAgICAgaWYgKCFtX3RhYldpZHRoKSB7CiAgICAg
ICAgIGNvbnN0IFVDaGFyIHNwYWNlQ2hhciA9ICcgJzsKICAgICAgICAgY29uc3QgRm9udCYgZm9u
dCA9IHN0eWxlKCktPmZvbnQoKTsKLSAgICAgICAgaW50IHNwYWNlV2lkdGggPSBmb250LndpZHRo
KCZzcGFjZUNoYXIsIDEpOworICAgICAgICBpbnQgc3BhY2VXaWR0aCA9IGZvbnQud2lkdGgoVGV4
dFJ1bigmc3BhY2VDaGFyLCAxKSk7CiAgICAgICAgIG1fdGFiV2lkdGggPSBzcGFjZVdpZHRoICog
ODsKICAgICAgICAgYXNzZXJ0KG1fdGFiV2lkdGggIT0gMCk7CiAgICAgfQpAQCAtMjU1OSwxMSAr
MjU1OSwxMiBAQAogewogICAgIC8vIERldGVybWluZSB0aGUgd2lkdGggb2YgdGhlIGVsbGlwc2lz
IHVzaW5nIHRoZSBjdXJyZW50IGZvbnQuCiAgICAgY29uc3QgVUNoYXIgZWxsaXBzaXMgPSAweDIw
MjY7IC8vIEZJWE1FOiBDU1MzIHNheXMgdGhpcyBpcyBjb25maWd1cmFibGUsIGFsc28gbmVlZCB0
byB1c2UgMHgwMDJFIChGVUxMIFNUT1ApIGlmIDB4MjAyNiBub3QgcmVuZGVyYWJsZQorICAgIFRl
eHRSdW4gZWxsaXBzaXNSdW4oJmVsbGlwc2lzLCAxKTsKICAgICBzdGF0aWMgQXRvbWljU3RyaW5n
IGVsbGlwc2lzU3RyKCZlbGxpcHNpcywgMSk7CiAgICAgY29uc3QgRm9udCYgZmlyc3RMaW5lRm9u
dCA9IGZpcnN0TGluZVN0eWxlKCktPmZvbnQoKTsKICAgICBjb25zdCBGb250JiBmb250ID0gc3R5
bGUoKS0+Zm9udCgpOwotICAgIGludCBmaXJzdExpbmVFbGxpcHNpc1dpZHRoID0gZmlyc3RMaW5l
Rm9udC53aWR0aCgmZWxsaXBzaXMsIDEpOwotICAgIGludCBlbGxpcHNpc1dpZHRoID0gKGZvbnQg
PT0gZmlyc3RMaW5lRm9udCkgPyBmaXJzdExpbmVFbGxpcHNpc1dpZHRoIDogZm9udC53aWR0aCgm
ZWxsaXBzaXMsIDEpOworICAgIGludCBmaXJzdExpbmVFbGxpcHNpc1dpZHRoID0gZmlyc3RMaW5l
Rm9udC53aWR0aChlbGxpcHNpc1J1bik7CisgICAgaW50IGVsbGlwc2lzV2lkdGggPSAoZm9udCA9
PSBmaXJzdExpbmVGb250KSA/IGZpcnN0TGluZUVsbGlwc2lzV2lkdGggOiBmb250LndpZHRoKGVs
bGlwc2lzUnVuKTsKIAogICAgIC8vIEZvciBMVFIgdGV4dCB0cnVuY2F0aW9uLCB3ZSB3YW50IHRv
IGdldCB0aGUgcmlnaHQgZWRnZSBvZiBvdXIgcGFkZGluZyBib3gsIGFuZCB0aGVuIHdlIHdhbnQg
dG8gc2VlCiAgICAgLy8gaWYgdGhlIHJpZ2h0IGVkZ2Ugb2YgYSBsaW5lIGJveCBleGNlZWRzIHRo
YXQuICBGb3IgUlRMLCB3ZSB1c2UgdGhlIGxlZnQgZWRnZSBvZiB0aGUgcGFkZGluZyBib3ggYW5k
CkluZGV4OiByZW5kZXJpbmcvcmVuZGVyX2xpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmlu
Zy9yZW5kZXJfbGluZS5jcHAJKHJldmlzaW9uIDE0Mjg5KQorKysgcmVuZGVyaW5nL3JlbmRlcl9s
aW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4NSw4ICsxMDg1LDcgQEAKICAgICB9CiAKICAg
ICBjb25zdCBTdHJpbmcmIHN0ciA9IG1fc3RyOwotICAgIHAtPmRyYXdUZXh0KEludFBvaW50KG1f
eCArIF90eCwgbV95ICsgX3R5ICsgbV9iYXNlbGluZSksIDAsIDAsIHN0ci5jaGFyYWN0ZXJzKCks
IHN0ci5sZW5ndGgoKSwKLSAgICAgICAgMCwgc3RyLmxlbmd0aCgpLCAwLCBMVFIsIF9zdHlsZS0+
dmlzdWFsbHlPcmRlcmVkKCksIDAsIHN0ci5sZW5ndGgoKSk7CisgICAgcC0+ZHJhd1RleHQoVGV4
dFJ1bihzdHIuaW1wbCgpKSwgSW50UG9pbnQobV94ICsgX3R4LCBtX3kgKyBfdHkgKyBtX2Jhc2Vs
aW5lKSwgMCwgMCwgMCwgTFRSLCBfc3R5bGUtPnZpc3VhbGx5T3JkZXJlZCgpKTsKIAogICAgIGlm
IChzZXRTaGFkb3cpCiAgICAgICAgIHAtPmNsZWFyU2hhZG93KCk7CkluZGV4OiByZW5kZXJpbmcv
cmVuZGVyX2xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9yZW5kZXJfbGlzdC5jcHAJ
KHJldmlzaW9uIDE0Mjg5KQorKysgcmVuZGVyaW5nL3JlbmRlcl9saXN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDQxLDE1ICs0NDEsMTggQEAKICAgICBkZWZhdWx0OgogICAgICAgICBpZiAoIW1f
aXRlbS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZSgp
LT5mb250KCk7CisgICAgICAgICAgICBUZXh0UnVuIHRleHRSdW4ocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBVQ2hhcio+KG1faXRlbS51bmljb2RlKCkpLCBtX2l0ZW0ubGVuZ3RoKCkpOwogICAgICAg
ICAgICAgaWYgKHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUikgewotICAgICAgICAgICAgICAg
IGludCB3aWR0aCA9IGZvbnQud2lkdGgocmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KG1f
aXRlbS51bmljb2RlKCkpLCBtX2l0ZW0ubGVuZ3RoKCkpOwotICAgICAgICAgICAgICAgIHAtPmRy
YXdUZXh0KG1hcmtlci5sb2NhdGlvbigpLCBtX2l0ZW0pOwotICAgICAgICAgICAgICAgIHAtPmRy
YXdUZXh0KG1hcmtlci5sb2NhdGlvbigpICsgSW50U2l6ZSh3aWR0aCwgMCksICIuICIpOworICAg
ICAgICAgICAgICAgIGludCB3aWR0aCA9IGZvbnQud2lkdGgodGV4dFJ1bik7CisgICAgICAgICAg
ICAgICAgcC0+ZHJhd1RleHQodGV4dFJ1biwgbWFya2VyLmxvY2F0aW9uKCkpOworICAgICAgICAg
ICAgICAgIFVDaGFyIHBlcmlvZFNwYWNlWzJdID0geyAnLicsICcgJyB9OworICAgICAgICAgICAg
ICAgIHAtPmRyYXdUZXh0KFRleHRSdW4ocGVyaW9kU3BhY2UsIDIpLCBtYXJrZXIubG9jYXRpb24o
KSArIEludFNpemUod2lkdGgsIDApKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICAgVUNoYXIgc3BhY2VQZXJpb2RbMl0gPSB7ICcuJywgJyAnIH07Ci0gICAgICAgICAgICAg
ICAgaW50IHdpZHRoID0gZm9udC53aWR0aChzcGFjZVBlcmlvZCwgMik7Ci0gICAgICAgICAgICAg
ICAgcC0+ZHJhd1RleHQobWFya2VyLmxvY2F0aW9uKCksICIgLiIpOwotICAgICAgICAgICAgICAg
IHAtPmRyYXdUZXh0KG1hcmtlci5sb2NhdGlvbigpICsgSW50U2l6ZSh3aWR0aCwgMCksIG1faXRl
bSk7CisgICAgICAgICAgICAgICAgVGV4dFJ1biBzcGFjZVBlcmlvZFJ1bihzcGFjZVBlcmlvZCwg
Mik7CisgICAgICAgICAgICAgICAgaW50IHdpZHRoID0gZm9udC53aWR0aChzcGFjZVBlcmlvZFJ1
bik7CisgICAgICAgICAgICAgICAgcC0+ZHJhd1RleHQoc3BhY2VQZXJpb2RSdW4sIG1hcmtlci5s
b2NhdGlvbigpKTsKKyAgICAgICAgICAgICAgICBwLT5kcmF3VGV4dCh0ZXh0UnVuLCBtYXJrZXIu
bG9jYXRpb24oKSArIEludFNpemUod2lkdGgsIDApKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgIH0KQEAgLTU0OSw5ICs1NTIsOSBAQAogICAgIH0KIAogICAgIHsKLSAgICAgICAgaW50
IGl0ZW1XaWR0aCA9IGZvbnQud2lkdGgocmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KG1f
aXRlbS51bmljb2RlKCkpLCBtX2l0ZW0ubGVuZ3RoKCkpOworICAgICAgICBpbnQgaXRlbVdpZHRo
ID0gZm9udC53aWR0aChUZXh0UnVuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPihtX2l0
ZW0udW5pY29kZSgpKSwgbV9pdGVtLmxlbmd0aCgpKSk7CiAgICAgICAgIFVDaGFyIHBlcmlvZFNw
YWNlWzJdID0geyAnLicsICcgJyB9OwotICAgICAgICBpbnQgcGVyaW9kU3BhY2VXaWR0aCA9IGZv
bnQud2lkdGgocGVyaW9kU3BhY2UsIDIpOworICAgICAgICBpbnQgcGVyaW9kU3BhY2VXaWR0aCA9
IGZvbnQud2lkdGgoVGV4dFJ1bihwZXJpb2RTcGFjZSwgMikpOwogICAgICAgICBtX3dpZHRoID0g
aXRlbVdpZHRoICsgcGVyaW9kU3BhY2VXaWR0aDsKICAgICB9CiAKQEAgLTY5OCw5ICs3MDEsOSBA
QAogICAgIGlmIChtX2l0ZW0uaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gSW50UmVjdCgpOwog
Ci0gICAgaW50IGl0ZW1XaWR0aCA9IGZvbnQud2lkdGgocmVpbnRlcnByZXRfY2FzdDxjb25zdCBV
Q2hhcio+KG1faXRlbS51bmljb2RlKCkpLCBtX2l0ZW0ubGVuZ3RoKCkpOworICAgIGludCBpdGVt
V2lkdGggPSBmb250LndpZHRoKFRleHRSdW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+
KG1faXRlbS51bmljb2RlKCkpLCBtX2l0ZW0ubGVuZ3RoKCkpKTsKICAgICBVQ2hhciBwZXJpb2RT
cGFjZVsyXSA9IHsgJy4nLCAnICcgfTsKLSAgICBpbnQgcGVyaW9kU3BhY2VXaWR0aCA9IGZvbnQu
d2lkdGgocGVyaW9kU3BhY2UsIDIpOworICAgIGludCBwZXJpb2RTcGFjZVdpZHRoID0gZm9udC53
aWR0aChUZXh0UnVuKHBlcmlvZFNwYWNlLCAyKSk7CiAgICAgcmV0dXJuIEludFJlY3QobV94LCBt
X3kgKyBhc2NlbnQsIGl0ZW1XaWR0aCArIHBlcmlvZFNwYWNlV2lkdGgsIGZvbnQuaGVpZ2h0KCkp
OwogfQogCkluZGV4OiByZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJl
bmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHJldmlzaW9uIDE0Mjg5KQorKysgcmVuZGVyaW5nL1Jl
bmRlckltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDcgKzEwNCw3IEBACiAgICAgICAg
IC8vIHdlIGhhdmUgYW4gYWx0IGFuZCB0aGUgdXNlciBtZWFudCBpdCAoaXRzIG5vdCBhIHRleHQg
d2UgaW52ZW50ZWQpCiAgICAgICAgIGlmICghbV9hbHRUZXh0LmlzRW1wdHkoKSkgewogICAgICAg
ICAgICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlKCktPmZvbnQoKTsKLSAgICAgICAgICAgIGl3
ID0gbWF4KGl3LCBtaW4oZm9udC53aWR0aChtX2FsdFRleHQuY2hhcmFjdGVycygpLCBtX2FsdFRl
eHQubGVuZ3RoKCkpLCAxMDI0KSk7CisgICAgICAgICAgICBpdyA9IG1heChpdywgbWluKGZvbnQu
d2lkdGgoVGV4dFJ1bihtX2FsdFRleHQuY2hhcmFjdGVycygpLCBtX2FsdFRleHQubGVuZ3RoKCkp
KSwgMTAyNCkpOwogICAgICAgICAgICAgaWggPSBtYXgoaWgsIG1pbihmb250LmhlaWdodCgpLCAy
NTYpKTsKICAgICAgICAgfQogCkBAIC0yNDcsMTIgKzI0NywxMyBAQAogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIC8vIE9ubHkgZHJhdyB0aGUgYWx0IHRleHQgaWYgaXQnbGwgZml0
IHdpdGhpbiB0aGUgY29udGVudCBib3gsCiAgICAgICAgICAgICAgICAgLy8gYW5kIG9ubHkgaWYg
aXQgZml0cyBhYm92ZSB0aGUgZXJyb3IgaW1hZ2UuCi0gICAgICAgICAgICAgICAgaW50IHRleHRX
aWR0aCA9IGZvbnQud2lkdGgocmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KHRleHQudW5p
Y29kZSgpKSwgdGV4dC5sZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgVGV4dFJ1biB0ZXh0UnVu
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPih0ZXh0LnVuaWNvZGUoKSksIHRleHQubGVu
Z3RoKCkpOworICAgICAgICAgICAgICAgIGludCB0ZXh0V2lkdGggPSBmb250LndpZHRoKHRleHRS
dW4pOwogICAgICAgICAgICAgICAgIGlmIChlcnJvclBpY3R1cmVEcmF3bikgewogICAgICAgICAg
ICAgICAgICAgICBpZiAodXNhYmxlV2lkdGggPj0gdGV4dFdpZHRoICYmIGZvbnQuaGVpZ2h0KCkg
PD0gaW1hZ2VZKQotICAgICAgICAgICAgICAgICAgICAgICAgcC0+ZHJhd1RleHQoSW50UG9pbnQo
YXgsIGF5ICsgYXNjZW50KSwgdGV4dCk7CisgICAgICAgICAgICAgICAgICAgICAgICBwLT5kcmF3
VGV4dCh0ZXh0UnVuLCBJbnRQb2ludChheCwgYXkgKyBhc2NlbnQpKTsKICAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKHVzYWJsZVdpZHRoID49IHRleHRXaWR0aCAmJiBjSGVpZ2h0ID49IGZvbnQu
aGVpZ2h0KCkpCi0gICAgICAgICAgICAgICAgICAgIHAtPmRyYXdUZXh0KEludFBvaW50KGF4LCBh
eSArIGFzY2VudCksIHRleHQpOworICAgICAgICAgICAgICAgICAgICBwLT5kcmF3VGV4dCh0ZXh0
UnVuLCBJbnRQb2ludChheCwgYXkgKyBhc2NlbnQpKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgIH0KSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBy
ZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHJldmlzaW9uIDE0Mjg5KQorKysgcmVuZGVyaW5nL1Jl
bmRlclRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NjAsNyArNDYwLDcgQEAKICAgICBjb25z
dCBGb250KiBmID0gZm9udChmYWxzZSk7CiAgICAgaWYgKHNob3VsZFVzZU1vbm9zcGFjZUNhY2hl
KGYpKSB7CiAgICAgICAgIGNvbnN0IFVDaGFyIGMgPSAnICc7Ci0gICAgICAgIG1fbW9ub3NwYWNl
Q2hhcmFjdGVyV2lkdGggPSAoaW50KWYtPmZsb2F0V2lkdGgoJmMsIDEsIDAsIDEsIDAsIDApOwor
ICAgICAgICBtX21vbm9zcGFjZUNoYXJhY3RlcldpZHRoID0gZi0+d2lkdGgoVGV4dFJ1bigmYywg
MSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIG1fbW9ub3NwYWNlQ2hhcmFjdGVyV2lkdGggPSAw
OwogICAgIH0KQEAgLTQ4Niw3ICs0ODYsNyBAQAogICAgICAgICByZXR1cm4gdzsKICAgICB9CiAg
ICAgCi0gICAgcmV0dXJuIGYtPndpZHRoKHN0ci0+Y2hhcmFjdGVycygpLCBzdHItPmxlbmd0aCgp
LCBzdGFydCwgbGVuLCB0YWJXaWR0aCwgeHBvcyk7CisgICAgcmV0dXJuIGYtPndpZHRoKFRleHRS
dW4oc3RyaW5nKCksIHN0YXJ0LCAwLCBsZW4pLCB0YWJXaWR0aCwgeHBvcyk7CiB9CiAKIHZvaWQg
UmVuZGVyVGV4dDo6dHJpbW1lZE1pbk1heFdpZHRoKGludCBsZWFkV2lkdGgsCkBAIC01MjUsNyAr
NTI1LDcgQEAKICAgICBpZiAoc3RyaXBGcm9udFNwYWNlcyAmJiAoKCpzdHIpWzBdID09ICcgJyB8
fCAoKCpzdHIpWzBdID09ICdcbicgJiYgIXN0eWxlKCktPnByZXNlcnZlTmV3bGluZSgpKSB8fCAo
KnN0cilbMF0gPT0gJ1x0JykpIHsKICAgICAgICAgY29uc3QgRm9udCAqZiA9IGZvbnQoZmFsc2Up
OyAvLyBGSVhNRTogV2h5IGlzIGl0IG9rIHRvIGlnbm9yZSBmaXJzdC1saW5lIGhlcmU/CiAgICAg
ICAgIGNvbnN0IFVDaGFyIHNwYWNlID0gJyAnOwotICAgICAgICBpbnQgc3BhY2VXaWR0aCA9IGYt
PndpZHRoKCZzcGFjZSwgMSk7CisgICAgICAgIGludCBzcGFjZVdpZHRoID0gZi0+d2lkdGgoVGV4
dFJ1bigmc3BhY2UsIDEpKTsKICAgICAgICAgbWF4VyAtPSBzcGFjZVdpZHRoICsgZi0+d29yZFNw
YWNpbmcoKTsKICAgICB9CiAgICAgCkBAIC03MDQsNyArNzA0LDcgQEAKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjdXJyTWF4
V2lkdGggKz0gZi0+d2lkdGgodHh0LCBsZW4sIGksIDEsIHRhYldpZHRoKCksIGxlYWRXaWR0aCAr
IGN1cnJNYXhXaWR0aCk7CisgICAgICAgICAgICAgICAgY3Vyck1heFdpZHRoICs9IGYtPndpZHRo
KFRleHRSdW4odHh0ICsgaSwgMSksIHRhYldpZHRoKCksIGxlYWRXaWR0aCArIGN1cnJNYXhXaWR0
aCk7CiAgICAgICAgICAgICAgICAgbmVlZHNXb3JkU3BhY2luZyA9IGlzU3BhY2UgJiYgIXByZXZp
b3VzQ2hhcmFjdGVySXNTcGFjZSAmJiBpID09IGxlbi0xOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CkBAIC05OTUsNyArOTk1LDcgQEAKICAgICBlbHNlIGlmIChmID09ICZzdHlsZSgpLT5mb250
KCkpCiAgICAgICAgIHcgPSB3aWR0aEZyb21DYWNoZShmLCBmcm9tLCBsZW4sIHRhYldpZHRoKCks
IHhwb3MpOwogICAgIGVsc2UKLSAgICAgICAgdyA9IGYtPndpZHRoKHN0ci0+Y2hhcmFjdGVycygp
LCBzdHItPmxlbmd0aCgpLCBmcm9tLCBsZW4sIHRhYldpZHRoKCksIHhwb3MgKTsKKyAgICAgICAg
dyA9IGYtPndpZHRoKFRleHRSdW4oc3RyaW5nKCksIGZyb20sIDAsIGxlbiksIHRhYldpZHRoKCks
IHhwb3MgKTsKICAgICAgICAgCiAgICAgcmV0dXJuIHc7CiB9CkluZGV4OiByZW5kZXJpbmcvSW5s
aW5lVGV4dEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3Bw
CShyZXZpc2lvbiAxNDI4OSkKKysrIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTE3LDkgKzExNyw5IEBACiAgICAgaW50IHNlbEhlaWdodCA9IHJvb3RCb3gt
PnNlbGVjdGlvbkhlaWdodCgpOwogICAgIGNvbnN0IEZvbnQgKmYgPSB0ZXh0T2JqLT5mb250KG1f
Zmlyc3RMaW5lKTsKIAotICAgIEludFJlY3QgciA9IGYtPnNlbGVjdGlvblJlY3RGb3JUZXh0KElu
dFBvaW50KHR4ICsgbV94LCB0eSArIHNlbFRvcCksIHNlbEhlaWdodCwgdGV4dE9iai0+dGFiV2lk
dGgoKSwgdGV4dFBvcygpLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0ZXh0T2JqLT5zdHItPmNoYXJhY3RlcnMoKSwgdGV4dE9iai0+c3RyLT5sZW5ndGgoKSwgbV9z
dGFydCwgbV9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV90
b0FkZCwgbV9yZXZlcnNlZCwgbV9kaXJPdmVycmlkZSwgc1BvcywgZVBvcyk7CisgICAgSW50UmVj
dCByID0gZi0+c2VsZWN0aW9uUmVjdEZvclRleHQoVGV4dFJ1bih0ZXh0T2JqLT5zdHJpbmcoKSwg
bV9zdGFydCwgc1BvcywgZVBvcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgSW50UG9pbnQodHggKyBtX3gsIHR5ICsgc2VsVG9wKSwgc2VsSGVpZ2h0LCB0ZXh0T2Jq
LT50YWJXaWR0aCgpLCB0ZXh0UG9zKCksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fdG9BZGQsIG1fcmV2ZXJzZWQsIG1fZGlyT3ZlcnJpZGUpOwogICAgIGlmIChy
LngoKSA+IHR4ICsgbV94ICsgbV93aWR0aCkKICAgICAgICAgci5zZXRXaWR0aCgwKTsKICAgICBl
bHNlIGlmIChyLnJpZ2h0KCkgLSAxID4gdHggKyBtX3ggKyBtX3dpZHRoKQpAQCAtMzI1LDYgKzMy
NSw4IEBACiAgICAgICAgIH0KICAgICB9CiAKKyAgICBTdHJpbmdJbXBsKiB0ZXh0U3RyID0gdGV4
dE9iamVjdCgpLT5zdHJpbmcoKTsKKwogICAgIGlmICghcGFpbnRTZWxlY3RlZFRleHRPbmx5ICYm
ICFwYWludFNlbGVjdGVkVGV4dFNlcGFyYXRlbHkpIHsKICAgICAgICAgLy8gcGFpbnQgYWxsIHRo
ZSB0ZXh0CiAgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgUlRMIGRpcmVjdGlvbiwgaGFuZGxlIHJl
dmVyc2VkIHN0cmluZ3MuICBGb3Igbm93IHRydW5jYXRpb24gY2FuIG9ubHkgYmUgdHVybmVkIG9u
CkBAIC0zMzIsOCArMzM0LDggQEAKICAgICAgICAgaW50IGVuZFBvaW50ID0gbV9sZW47CiAgICAg
ICAgIGlmIChtX3RydW5jYXRpb24gIT0gY05vVHJ1bmNhdGlvbikKICAgICAgICAgICAgIGVuZFBv
aW50ID0gbV90cnVuY2F0aW9uIC0gbV9zdGFydDsKLSAgICAgICAgaS5wLT5kcmF3VGV4dChJbnRQ
b2ludChtX3ggKyB0eCwgbV95ICsgdHkgKyBtX2Jhc2VsaW5lKSwgdGV4dE9iamVjdCgpLT50YWJX
aWR0aCgpLCB0ZXh0UG9zKCksCi0gICAgICAgICAgICAgICAgICAgICAgdGV4dE9iamVjdCgpLT5z
dHJpbmcoKS0+Y2hhcmFjdGVycygpLCB0ZXh0T2JqZWN0KCktPnN0cmluZygpLT5sZW5ndGgoKSwg
bV9zdGFydCwgZW5kUG9pbnQsCisgICAgICAgIGkucC0+ZHJhd1RleHQoVGV4dFJ1bih0ZXh0U3Ry
LCBtX3N0YXJ0LCAwLCBlbmRQb2ludCksCisgICAgICAgICAgICAgICAgICAgICAgSW50UG9pbnQo
bV94ICsgdHgsIG1feSArIHR5ICsgbV9iYXNlbGluZSksIHRleHRPYmplY3QoKS0+dGFiV2lkdGgo
KSwgdGV4dFBvcygpLAogICAgICAgICAgICAgICAgICAgICAgIG1fdG9BZGQsIG1fcmV2ZXJzZWQg
PyBSVEwgOiBMVFIsIG1fZGlyT3ZlcnJpZGUgfHwgc3R5bGVUb1VzZS0+dmlzdWFsbHlPcmRlcmVk
KCkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGludCBzUG9zLCBlUG9zOwpAQCAtMzQxLDE4ICsz
NDMsMTUgQEAKICAgICAgICAgaWYgKHBhaW50U2VsZWN0ZWRUZXh0U2VwYXJhdGVseSkgewogICAg
ICAgICAgICAgLy8gcGFpbnQgb25seSB0aGUgdGV4dCB0aGF0IGlzIG5vdCBzZWxlY3RlZAogICAg
ICAgICAgICAgaWYgKHNQb3MgPj0gZVBvcykKLSAgICAgICAgICAgICAgICBpLnAtPmRyYXdUZXh0
KEludFBvaW50KG1feCArIHR4LCBtX3kgKyB0eSArIG1fYmFzZWxpbmUpLCB0ZXh0T2JqZWN0KCkt
PnRhYldpZHRoKCksIHRleHRQb3MoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRl
eHRPYmplY3QoKS0+c3RyaW5nKCktPmNoYXJhY3RlcnMoKSwgdGV4dE9iamVjdCgpLT5zdHJpbmco
KS0+bGVuZ3RoKCksIG1fc3RhcnQsIG1fbGVuLAorICAgICAgICAgICAgICAgIGkucC0+ZHJhd1Rl
eHQoVGV4dFJ1bih0ZXh0U3RyLCBtX3N0YXJ0KSwgSW50UG9pbnQobV94ICsgdHgsIG1feSArIHR5
ICsgbV9iYXNlbGluZSksIHRleHRPYmplY3QoKS0+dGFiV2lkdGgoKSwgdGV4dFBvcygpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV90b0FkZCwgbV9yZXZlcnNlZCA/IFJUTCA6IExU
UiwgbV9kaXJPdmVycmlkZSB8fCBzdHlsZVRvVXNlLT52aXN1YWxseU9yZGVyZWQoKSk7CiAgICAg
ICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBpZiAoc1BvcyAtIDEgPj0gMCkKLSAgICAg
ICAgICAgICAgICAgICAgaS5wLT5kcmF3VGV4dChJbnRQb2ludChtX3ggKyB0eCwgbV95ICsgdHkg
KyBtX2Jhc2VsaW5lKSwgdGV4dE9iamVjdCgpLT50YWJXaWR0aCgpLCB0ZXh0UG9zKCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dE9iamVjdCgpLT5zdHJpbmcoKS0+Y2hh
cmFjdGVycygpLCB0ZXh0T2JqZWN0KCktPnN0cmluZygpLT5sZW5ndGgoKSwgbV9zdGFydCwgbV9s
ZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV90b0FkZCwgbV9yZXZlcnNl
ZCA/IFJUTCA6IExUUiwgbV9kaXJPdmVycmlkZSB8fCBzdHlsZVRvVXNlLT52aXN1YWxseU9yZGVy
ZWQoKSwgMCwgc1Bvcyk7CisgICAgICAgICAgICAgICAgICAgIGkucC0+ZHJhd1RleHQoVGV4dFJ1
bih0ZXh0U3RyLCBtX3N0YXJ0LCAwLCBzUG9zKSwgSW50UG9pbnQobV94ICsgdHgsIG1feSArIHR5
ICsgbV9iYXNlbGluZSksIHRleHRPYmplY3QoKS0+dGFiV2lkdGgoKSwgdGV4dFBvcygpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdG9BZGQsIG1fcmV2ZXJzZWQgPyBSVEwg
OiBMVFIsIG1fZGlyT3ZlcnJpZGUgfHwgc3R5bGVUb1VzZS0+dmlzdWFsbHlPcmRlcmVkKCkpOwog
ICAgICAgICAgICAgICAgIGlmIChlUG9zIDwgbV9zdGFydCArIG1fbGVuKQotICAgICAgICAgICAg
ICAgICAgICBpLnAtPmRyYXdUZXh0KEludFBvaW50KG1feCArIHR4LCBtX3kgKyB0eSArIG1fYmFz
ZWxpbmUpLCB0ZXh0T2JqZWN0KCktPnRhYldpZHRoKCksIHRleHRQb3MoKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0ZXh0T2JqZWN0KCktPnN0cmluZygpLT5jaGFyYWN0ZXJz
KCksIHRleHRPYmplY3QoKS0+c3RyaW5nKCktPmxlbmd0aCgpLCBtX3N0YXJ0LCBtX2xlbiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3RvQWRkLCBtX3JldmVyc2VkID8gUlRM
IDogTFRSLCBtX2Rpck92ZXJyaWRlIHx8IHN0eWxlVG9Vc2UtPnZpc3VhbGx5T3JkZXJlZCgpLCBl
UG9zLCAtMSk7CisgICAgICAgICAgICAgICAgICAgIGkucC0+ZHJhd1RleHQoVGV4dFJ1bih0ZXh0
U3RyLCBtX3N0YXJ0LCBlUG9zKSwgSW50UG9pbnQobV94ICsgdHgsIG1feSArIHR5ICsgbV9iYXNl
bGluZSksIHRleHRPYmplY3QoKS0+dGFiV2lkdGgoKSwgdGV4dFBvcygpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fdG9BZGQsIG1fcmV2ZXJzZWQgPyBSVEwgOiBMVFIsIG1f
ZGlyT3ZlcnJpZGUgfHwgc3R5bGVUb1VzZS0+dmlzdWFsbHlPcmRlcmVkKCkpOwogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTM2NSw5ICszNjQsOCBAQAogICAgICAg
ICAgICAgICAgIGkucC0+c2V0U2hhZG93KEludFNpemUoc2VsZWN0aW9uVGV4dFNoYWRvdy0+eCwg
c2VsZWN0aW9uVGV4dFNoYWRvdy0+eSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2VsZWN0aW9uVGV4dFNoYWRvdy0+Ymx1ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzZWxlY3Rpb25UZXh0U2hhZG93LT5jb2xvcik7Ci0gICAgICAgICAgICBpLnAtPmRyYXdUZXh0
KEludFBvaW50KG1feCArIHR4LCBtX3kgKyB0eSArIG1fYmFzZWxpbmUpLCB0ZXh0T2JqZWN0KCkt
PnRhYldpZHRoKCksIHRleHRQb3MoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dE9i
amVjdCgpLT5zdHJpbmcoKS0+Y2hhcmFjdGVycygpLCB0ZXh0T2JqZWN0KCktPnN0cmluZygpLT5s
ZW5ndGgoKSwgbV9zdGFydCwgbV9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG1fdG9B
ZGQsIG1fcmV2ZXJzZWQgPyBSVEwgOiBMVFIsIG1fZGlyT3ZlcnJpZGUgfHwgc3R5bGVUb1VzZS0+
dmlzdWFsbHlPcmRlcmVkKCksIHNQb3MsIGVQb3MpOworICAgICAgICAgICAgaS5wLT5kcmF3VGV4
dChUZXh0UnVuKHRleHRTdHIsIG1fc3RhcnQsIHNQb3MsIGVQb3MpLCBJbnRQb2ludChtX3ggKyB0
eCwgbV95ICsgdHkgKyBtX2Jhc2VsaW5lKSwgdGV4dE9iamVjdCgpLT50YWJXaWR0aCgpLCB0ZXh0
UG9zKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdG9BZGQsIG1fcmV2ZXJzZWQgPyBS
VEwgOiBMVFIsIG1fZGlyT3ZlcnJpZGUgfHwgc3R5bGVUb1VzZS0+dmlzdWFsbHlPcmRlcmVkKCkp
OwogICAgICAgICAgICAgaWYgKHNlbGVjdGlvblRleHRTaGFkb3cpCiAgICAgICAgICAgICAgICAg
aS5wLT5jbGVhclNoYWRvdygpOwogICAgICAgICB9CkBAIC00NTAsOSArNDQ4LDggQEAKICAgICBp
bnQgeSA9IHItPnNlbGVjdGlvblRvcCgpOwogICAgIGludCBoID0gci0+c2VsZWN0aW9uSGVpZ2h0
KCk7CiAgICAgcC0+YWRkQ2xpcChJbnRSZWN0KG1feCArIHR4LCB5ICsgdHksIG1fd2lkdGgsIGgp
KTsKLSAgICBwLT5kcmF3SGlnaGxpZ2h0Rm9yVGV4dChJbnRQb2ludChtX3ggKyB0eCwgeSArIHR5
KSwgaCwgdGV4dE9iamVjdCgpLT50YWJXaWR0aCgpLCB0ZXh0UG9zKCksIAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRleHRPYmplY3QoKS0+c3RyLT5jaGFyYWN0ZXJzKCksIHRleHRPYmpl
Y3QoKS0+c3RyLT5sZW5ndGgoKSwgbV9zdGFydCwgbV9sZW4sCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV90b0FkZCwgbV9yZXZlcnNlZCA/IFJUTCA6IExUUiwgbV9kaXJPdmVycmlkZSB8
fCBzdHlsZS0+dmlzdWFsbHlPcmRlcmVkKCksIHNQb3MsIGVQb3MsIGMpOworICAgIHAtPmRyYXdI
aWdobGlnaHRGb3JUZXh0KFRleHRSdW4odGV4dE9iamVjdCgpLT5zdHJpbmcoKSwgbV9zdGFydCwg
c1BvcywgZVBvcyksIEludFBvaW50KG1feCArIHR4LCB5ICsgdHkpLCBoLCB0ZXh0T2JqZWN0KCkt
PnRhYldpZHRoKCksIHRleHRQb3MoKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV90
b0FkZCwgbV9yZXZlcnNlZCA/IFJUTCA6IExUUiwgbV9kaXJPdmVycmlkZSB8fCBzdHlsZS0+dmlz
dWFsbHlPcmRlcmVkKCksIGMpOwogICAgIHAtPnJlc3RvcmUoKTsKIH0KIApAQCAtNDc0LDkgKzQ3
MSw5IEBACiAgICAgUm9vdElubGluZUJveCogciA9IHJvb3QoKTsKICAgICBpbnQgeSA9IHItPnNl
bGVjdGlvblRvcCgpOwogICAgIGludCBoID0gci0+c2VsZWN0aW9uSGVpZ2h0KCk7Ci0gICAgcC0+
ZHJhd0hpZ2hsaWdodEZvclRleHQoSW50UG9pbnQobV94ICsgdHgsIHkgKyB0eSksIGgsIHRleHRP
YmplY3QoKS0+dGFiV2lkdGgoKSwgdGV4dFBvcygpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRleHRPYmplY3QoKS0+c3RyLT5jaGFyYWN0ZXJzKCksIHRleHRPYmplY3QoKS0+c3RyLT5s
ZW5ndGgoKSwgbV9zdGFydCwgbV9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV90
b0FkZCwgbV9yZXZlcnNlZCA/IFJUTCA6IExUUiwgbV9kaXJPdmVycmlkZSB8fCBzdHlsZS0+dmlz
dWFsbHlPcmRlcmVkKCksIHNQb3MsIGVQb3MsIGMpOworICAgIHAtPmRyYXdIaWdobGlnaHRGb3JU
ZXh0KFRleHRSdW4odGV4dE9iamVjdCgpLT5zdHJpbmcoKSwgbV9zdGFydCwgc1BvcywgZVBvcyks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50UG9pbnQobV94ICsgdHgsIHkgKyB0eSks
IGgsIHRleHRPYmplY3QoKS0+dGFiV2lkdGgoKSwgdGV4dFBvcygpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fdG9BZGQsIG1fcmV2ZXJzZWQgPyBSVEwgOiBMVFIsIG1fZGlyT3ZlcnJp
ZGUgfHwgc3R5bGUtPnZpc3VhbGx5T3JkZXJlZCgpLCBjKTsKICAgICBwLT5yZXN0b3JlKCk7CiB9
CiAKQEAgLTU3Myw5ICs1NzAsOCBAQAogICAgIGludCBzUG9zID0gbWF4KG1hcmtlci5zdGFydE9m
ZnNldCAtIG1fc3RhcnQsICh1bnNpZ25lZCkwKTsKICAgICBpbnQgZVBvcyA9IG1pbihtYXJrZXIu
ZW5kT2Zmc2V0IC0gbV9zdGFydCwgKHVuc2lnbmVkKW1fbGVuKTsKICAgICAKLSAgICBwdC0+ZHJh
d0hpZ2hsaWdodEZvclRleHQoSW50UG9pbnQobV94ICsgX3R4LCB5ICsgX3R5KSwgaCwgdGV4dE9i
amVjdCgpLT50YWJXaWR0aCgpLCB0ZXh0UG9zKCksIAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0ZXh0T2JqZWN0KCktPnN0ci0+Y2hhcmFjdGVycygpLCB0ZXh0T2JqZWN0KCktPnN0ci0+
bGVuZ3RoKCksIG1fc3RhcnQsIG1fbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X3RvQWRkLCBtX3JldmVyc2VkID8gUlRMIDogTFRSLCBtX2Rpck92ZXJyaWRlIHx8IHN0eWxlLT52
aXN1YWxseU9yZGVyZWQoKSwgc1BvcywgZVBvcywgeWVsbG93KTsKKyAgICBwdC0+ZHJhd0hpZ2hs
aWdodEZvclRleHQoVGV4dFJ1bih0ZXh0T2JqZWN0KCktPnN0cmluZygpLCBtX3N0YXJ0LCBzUG9z
LCBlUG9zKSwgSW50UG9pbnQobV94ICsgX3R4LCB5ICsgX3R5KSwgaCwgdGV4dE9iamVjdCgpLT50
YWJXaWR0aCgpLCB0ZXh0UG9zKCksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3Rv
QWRkLCBtX3JldmVyc2VkID8gUlRMIDogTFRSLCBtX2Rpck92ZXJyaWRlIHx8IHN0eWxlLT52aXN1
YWxseU9yZGVyZWQoKSwgeWVsbG93KTsKICAgICBwdC0+cmVzdG9yZSgpOwogfQogCkBAIC02ODgs
OSArNjg0LDkgQEAKICAgICBSZW5kZXJUZXh0KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4
dCo+KG1fb2JqZWN0KTsKICAgICBSZW5kZXJTdHlsZSAqc3R5bGUgPSB0ZXh0LT5zdHlsZShtX2Zp
cnN0TGluZSk7CiAgICAgY29uc3QgRm9udCogZiA9ICZzdHlsZS0+Zm9udCgpOwotICAgIHJldHVy
biBmLT5jaGVja1NlbGVjdGlvblBvaW50KHRleHQtPnN0ci0+Y2hhcmFjdGVycygpLCB0ZXh0LT5z
dHItPmxlbmd0aCgpLCBtX3N0YXJ0LCBtX2xlbiwKLSAgICAgICAgbV90b0FkZCwgdGV4dC0+dGFi
V2lkdGgoKSwgdGV4dFBvcygpLCBfeCAtIG1feCwKLSAgICAgICAgbV9yZXZlcnNlZCA/IFJUTCA6
IExUUiwgbV9kaXJPdmVycmlkZSB8fCBzdHlsZS0+dmlzdWFsbHlPcmRlcmVkKCksIGluY2x1ZGVQ
YXJ0aWFsR2x5cGhzKTsKKyAgICByZXR1cm4gZi0+Y2hlY2tTZWxlY3Rpb25Qb2ludChUZXh0UnVu
KHRleHRPYmplY3QoKS0+c3RyaW5nKCksIG1fc3RhcnQpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fdG9BZGQsIHRleHQtPnRhYldpZHRoKCksIHRleHRQb3MoKSwgX3ggLSBt
X3gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9yZXZlcnNlZCA/IFJUTCA6
IExUUiwgbV9kaXJPdmVycmlkZSB8fCBzdHlsZS0+dmlzdWFsbHlPcmRlcmVkKCksIGluY2x1ZGVQ
YXJ0aWFsR2x5cGhzKTsKIH0KIAogaW50IElubGluZVRleHRCb3g6OnBvc2l0aW9uRm9yT2Zmc2V0
KGludCBvZmZzZXQpIGNvbnN0CkBAIC03MDMsOCArNjk5LDcgQEAKICAgICBpbnQgZnJvbSA9IG1f
cmV2ZXJzZWQgPyBvZmZzZXQgLSBtX3N0YXJ0IDogMDsKICAgICBpbnQgdG8gPSBtX3JldmVyc2Vk
ID8gbV9sZW4gOiBvZmZzZXQgLSBtX3N0YXJ0OwogICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIHRv
IGFkZCByaWdodEJlYXJpbmcgaGVyZT8KLSAgICByZXR1cm4gZi0+c2VsZWN0aW9uUmVjdEZvclRl
eHQoSW50UG9pbnQobV94LCAwKSwgMCwgdGV4dC0+dGFiV2lkdGgoKSwgdGV4dFBvcygpLCB0ZXh0
LT5zdHItPmNoYXJhY3RlcnMoKSwgdGV4dC0+c3RyLT5sZW5ndGgoKSwgbV9zdGFydCwgbV9sZW4s
Ci0gICAgICAgIG1fdG9BZGQsIG1fcmV2ZXJzZWQsIG1fZGlyT3ZlcnJpZGUsIGZyb20sIHRvKS5y
aWdodCgpOworICAgIHJldHVybiBmLT5zZWxlY3Rpb25SZWN0Rm9yVGV4dChUZXh0UnVuKHRleHQt
PnN0cmluZygpLCBtX3N0YXJ0LCBmcm9tLCB0byksIEludFBvaW50KG1feCwgMCksIDAsIHRleHQt
PnRhYldpZHRoKCksIHRleHRQb3MoKSwgbV90b0FkZCwgbV9yZXZlcnNlZCwgbV9kaXJPdmVycmlk
ZSkucmlnaHQoKTsKIH0KIAogfQpJbmRleDogcmVuZGVyaW5nL1JlbmRlclRleHRGaWVsZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlclRleHRGaWVsZC5jcHAJKHJldmlzaW9uIDE0
Mjg5KQorKysgcmVuZGVyaW5nL1JlbmRlclRleHRGaWVsZC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIzMCw4ICsyMzAsMTAgQEAKICAgICAgICAgaWYgKHNpemUgPD0gMCkKICAgICAgICAgICAgIHNp
emUgPSAyMDsKIAorICAgICAgICAvLyBGSVhNRTogT25jZSB3ZSBoYXZlIGEgc3RydWN0IHRoYXQg
Y2FuIGhvbGQgcm91bmRpbmcgaGFjayBpbmZvLCB3ZSB3aWxsIGJlIGFibGUgdG8ganVzdCB1c2Ug
dGhlIAorICAgICAgICAvLyBub3JtYWwgd2lkdGggbWV0aG9kIChhbmQgbWFrZSBmbG9hdFdpZHRo
IHByb3Blcmx5IHByaXZhdGUpLgogICAgICAgICBjb25zdCBVQ2hhciBjaCA9ICcwJzsKLSAgICAg
ICAgaW50IHNpemVXaWR0aCA9IChpbnQpY2VpbGYoc3R5bGUoKS0+Zm9udCgpLmZsb2F0V2lkdGgo
JmNoLCAxLCAwLCAxLCAwLCAwLCBmYWxzZSkgKiBzaXplKTsKKyAgICAgICAgaW50IHNpemVXaWR0
aCA9IChpbnQpY2VpbGYoc3R5bGUoKS0+Zm9udCgpLmZsb2F0V2lkdGgoVGV4dFJ1bigmY2gsIDEp
LCAwLCAwLCBmYWxzZSkgKiBzaXplKTsKICAgICAgICAgbV9tYXhXaWR0aCA9IHNpemVXaWR0aDsK
ICAgICB9CiAgICAgCkluZGV4OiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHJldmlzaW9uIDE0Mjg5KQorKysgcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgzMiw3ICsyODMyLDcgQEAK
ICAgICAgICAgUmVuZGVyVGV4dCogdCA9IHN0YXRpY19jYXN0PFJlbmRlclRleHQgKj4odHJhaWxp
bmdTcGFjZUNoaWxkKTsKICAgICAgICAgY29uc3QgRm9udCAqZiA9IHQtPmZvbnQoZmFsc2UpOyAg
Ly8gRklYTUU6IFdoeSBhcmUgd2UgaWdub3JpbmcgZmlyc3QtbGluZT8KICAgICAgICAgY29uc3Qg
VUNoYXIgc3BhY2UgPSAnICc7Ci0gICAgICAgIGludCBzcGFjZVdpZHRoID0gZi0+d2lkdGgoJnNw
YWNlLCAxKTsKKyAgICAgICAgaW50IHNwYWNlV2lkdGggPSBmLT53aWR0aChUZXh0UnVuKCZzcGFj
ZSwgMSkpOwogICAgICAgICBpbmxpbmVNYXggLT0gc3BhY2VXaWR0aDsKICAgICAgICAgaWYgKGlu
bGluZU1pbiA+IGlubGluZU1heCkKICAgICAgICAgICAgIGlubGluZU1pbiA9IGlubGluZU1heDsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>8235</attachid>
            <date>2006-05-11 02:46:02 -0700</date>
            <delta_ts>2006-05-11 03:00:22 -0700</delta_ts>
            <desc>Patch that fixes up FontWin as well.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>60228</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IHBsYXRmb3JtL0dyYXBoaWNzQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3Jt
L0dyYXBoaWNzQ29udGV4dC5oCShyZXZpc2lvbiAxNDI4OSkKKysrIHBsYXRmb3JtL0dyYXBoaWNz
Q29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1Myw3IEBACiAgICAgY2xhc3MgSW50
UG9pbnQ7CiAgICAgY2xhc3MgSW50UG9pbnRBcnJheTsKICAgICBjbGFzcyBQYXRoOworICAgIGNs
YXNzIFRleHRSdW47CiAKICNpZiBTVkdfU1VQUE9SVAogICAgIGNsYXNzIEtSZW5kZXJpbmdEZXZp
Y2VDb250ZXh0OwpAQCAtMTA2LDE0ICsxMDcsMTIgQEAKICAgICAgICAgdm9pZCBzZXRGb2N1c1Jp
bmdDbGlwKGNvbnN0IEludFJlY3QmKTsKICAgICAgICAgdm9pZCBjbGVhckZvY3VzUmluZ0NsaXAo
KTsKIAotICAgICAgICB2b2lkIGRyYXdUZXh0KGNvbnN0IEludFBvaW50JiwgY29uc3QgRGVwcmVj
YXRlZFN0cmluZyYpOwotICAgICAgICB2b2lkIGRyYXdUZXh0KGNvbnN0IEludFBvaW50JiwgaW50
IHRhYldpZHRoLCBpbnQgeHBvcywKLSAgICAgICAgICAgIGNvbnN0IFVDaGFyKiwgaW50IHNsZW4s
IGludCBwb3MsIGludCBsZW4sIGludCB0b0FkZCwKLSAgICAgICAgICAgIFRleHREaXJlY3Rpb24g
PSBMVFIsIGJvb2wgdmlzdWFsbHlPcmRlcmVkID0gZmFsc2UsIGludCBmcm9tID0gLTEsIGludCB0
byA9IC0xKTsKLSAgICAgICAgdm9pZCBkcmF3SGlnaGxpZ2h0Rm9yVGV4dChjb25zdCBJbnRQb2lu
dCYsIGludCBoLCBpbnQgdGFiV2lkdGgsIGludCB4cG9zLAotICAgICAgICAgICAgY29uc3QgVUNo
YXIqLCBpbnQgc2xlbiwgaW50IHBvcywgaW50IGxlbiwgaW50IHRvQWRkLAotICAgICAgICAgICAg
VGV4dERpcmVjdGlvbiwgYm9vbCB2aXN1YWxseU9yZGVyZWQsCi0gICAgICAgICAgICBpbnQgZnJv
bSwgaW50IHRvLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKTsKKyAgICAgICAgdm9pZCBk
cmF3VGV4dChjb25zdCBUZXh0UnVuJiwgY29uc3QgSW50UG9pbnQmLCBpbnQgdGFiV2lkdGggPSAw
LCBpbnQgeHBvcyA9IDAsIGludCB0b0FkZCA9IDAsCisgICAgICAgICAgICAgICAgICAgICAgVGV4
dERpcmVjdGlvbiA9IExUUiwgYm9vbCB2aXN1YWxseU9yZGVyZWQgPSBmYWxzZSk7CisgICAgICAg
IHZvaWQgZHJhd0hpZ2hsaWdodEZvclRleHQoY29uc3QgVGV4dFJ1biYsIGNvbnN0IEludFBvaW50
JiwgaW50IGgsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0YWJXaWR0
aCwgaW50IHhwb3MsIGludCB0b0FkZCwgVGV4dERpcmVjdGlvbiwgYm9vbCB2aXN1YWxseU9yZGVy
ZWQsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAKICAgICAgICAgdm9pZCBkcmF3TGluZUZvclRleHQoY29u
c3QgSW50UG9pbnQmLCBpbnQgeU9mZnNldCwgaW50IHdpZHRoKTsKICAgICAgICAgdm9pZCBkcmF3
TGluZUZvck1pc3NwZWxsaW5nKGNvbnN0IEludFBvaW50JiwgaW50IHdpZHRoKTsKICAgICAgICAg
aW50IG1pc3NwZWxsaW5nTGluZVRoaWNrbmVzcygpOwpJbmRleDogcGxhdGZvcm0vbWFjL0ZvbnRN
YWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vbWFjL0ZvbnRNYWMubW0JKHJldmlzaW9uIDE0
MjkyKQorKysgcGxhdGZvcm0vbWFjL0ZvbnRNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTExMywx
OCArMTEzLDE2IEBACiAKIHN0cnVjdCBBVFNVTGF5b3V0UGFyYW1ldGVycwogewotICAgIEFUU1VM
YXlvdXRQYXJhbWV0ZXJzKFVuaUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW4sIGludCBmcm9tLCBp
bnQgdG8sIGludCB0b0FkZCwgVGV4dERpcmVjdGlvbiBkaXIsIGJvb2wgYXBwbHlXb3JkUm91bmRp
bmcsIGJvb2wgYXBwbHlSdW5Sb3VuZGluZykKLSAgICA6bV9jaGFyYWN0ZXJzKGNoYXJhY3RlcnMp
LCBtX2xlbihsZW4pLCBtX2Zyb20oZnJvbSksIG1fdG8odG8pLCBtX3BhZGRpbmcodG9BZGQpLCBt
X3J0bChkaXIgPT0gUlRMKSwKKyAgICBBVFNVTGF5b3V0UGFyYW1ldGVycyhjb25zdCBUZXh0UnVu
JiBydW4sIGludCB0b0FkZCwgVGV4dERpcmVjdGlvbiBkaXIsIGJvb2wgYXBwbHlXb3JkUm91bmRp
bmcsIGJvb2wgYXBwbHlSdW5Sb3VuZGluZykKKyAgICA6bV9ydW4ocnVuKSwgbV9wYWRkaW5nKHRv
QWRkKSwgbV9ydGwoZGlyID09IFJUTCksCiAgICAgIG1fYXBwbHlXb3JkUm91bmRpbmcoYXBwbHlX
b3JkUm91bmRpbmcpLCBtX2FwcGx5UnVuUm91bmRpbmcoYXBwbHlSdW5Sb3VuZGluZyksCiAgICAg
IG1fZm9udCgwKSwgbV9mb250cygwKSwgbV9jaGFyQnVmZmVyKDApLCBtX2hhc1N5bnRoZXRpY0Jv
bGQoZmFsc2UpLCBtX3N5bnRoZXRpY0JvbGRQYXNzKGZhbHNlKSwgbV9wYWRQZXJTcGFjZSgwKQog
ICAgIHt9CiAKICAgICB2b2lkIGluaXRpYWxpemUoY29uc3QgRm9udCogZm9udCk7CiAKLSAgICBV
bmlDaGFyKiBtX2NoYXJhY3RlcnM7Ci0gICAgaW50IG1fbGVuOwotICAgIGludCBtX2Zyb207Ci0g
ICAgaW50IG1fdG87CisgICAgY29uc3QgVGV4dFJ1biYgbV9ydW47CisKICAgICBpbnQgbV9wYWRk
aW5nOwogICAgIGJvb2wgbV9ydGw7CiAgICAgYm9vbCBtX2FwcGx5V29yZFJvdW5kaW5nOwpAQCAt
MTM1LDI2ICsxMzMsMjEgQEAKICAgICBBVFNVVGV4dExheW91dCBtX2xheW91dDsKICAgICBjb25z
dCBGb250RGF0YSAqKm1fZm9udHM7CiAgICAgCi0gICAgVW5pQ2hhciAqbV9jaGFyQnVmZmVyOwor
ICAgIFVDaGFyICptX2NoYXJCdWZmZXI7CiAgICAgYm9vbCBtX2hhc1N5bnRoZXRpY0JvbGQ7CiAg
ICAgYm9vbCBtX3N5bnRoZXRpY0JvbGRQYXNzOwogICAgIGZsb2F0IG1fcGFkUGVyU3BhY2U7CiB9
OwogCiAvLyBCZSBzdXJlIHRvIGZyZWUgdGhlIGFycmF5IGFsbG9jYXRlZCBieSB0aGlzIGZ1bmN0
aW9uLgotc3RhdGljIFVuaUNoYXIqIGFkZERpcmVjdGlvbmFsT3ZlcnJpZGUoVW5pQ2hhciogY2hh
cmFjdGVycywgaW50JiBsZW4sIGludCYgZnJvbSwgaW50JiB0bywgYm9vbCBydGwpCitzdGF0aWMg
VGV4dFJ1biBhZGREaXJlY3Rpb25hbE92ZXJyaWRlKGNvbnN0IFRleHRSdW4mIHJ1biwgYm9vbCBy
dGwpCiB7Ci0gICAgVW5pQ2hhciAqY2hhcmFjdGVyc1dpdGhPdmVycmlkZSA9IG5ldyBVbmlDaGFy
W2xlbiArIDJdOwotCisgICAgVUNoYXIqIGNoYXJhY3RlcnNXaXRoT3ZlcnJpZGUgPSBuZXcgVUNo
YXJbcnVuLmxlbmd0aCgpICsgMl07CiAgICAgY2hhcmFjdGVyc1dpdGhPdmVycmlkZVswXSA9IHJ0
bCA/IFJJR0hUX1RPX0xFRlRfT1ZFUlJJREUgOiBMRUZUX1RPX1JJR0hUX09WRVJSSURFOwotICAg
IG1lbWNweSgmY2hhcmFjdGVyc1dpdGhPdmVycmlkZVsxXSwgJmNoYXJhY3RlcnNbMF0sIHNpemVv
ZihVbmlDaGFyKSAqIGxlbik7Ci0gICAgY2hhcmFjdGVyc1dpdGhPdmVycmlkZVtsZW4gKyAxXSA9
IFBPUF9ESVJFQ1RJT05BTF9GT1JNQVRUSU5HOworICAgIG1lbWNweSgmY2hhcmFjdGVyc1dpdGhP
dmVycmlkZVsxXSwgcnVuLmRhdGEoMCksIHNpemVvZihVQ2hhcikgKiBydW4ubGVuZ3RoKCkpOwor
ICAgIGNoYXJhY3RlcnNXaXRoT3ZlcnJpZGVbcnVuLmxlbmd0aCgpICsgMV0gPSBQT1BfRElSRUNU
SU9OQUxfRk9STUFUVElORzsKIAotICAgIGZyb20rKzsKLSAgICB0bysrOwotICAgIGxlbiArPSAy
OwotCi0gICAgcmV0dXJuIGNoYXJhY3RlcnNXaXRoT3ZlcnJpZGU7CisgICAgcmV0dXJuIFRleHRS
dW4oY2hhcmFjdGVyc1dpdGhPdmVycmlkZSwgcnVuLmxlbmd0aCgpICsgMiwgcnVuLmZyb20oKSAr
IDEsIHJ1bi50bygpICsgMSk7CiB9CiAKIHN0YXRpYyB2b2lkIGluaXRpYWxpemVBVFNVU3R5bGUo
Y29uc3QgRm9udERhdGEqIGZvbnREYXRhKQpAQCAtMjI3LDEzICsyMjAsMTMgQEAKICAgICAgICAg
CiAgICAgICAgIEZpeGVkIGxhc3ROYXRpdmVQb3MgPSAwOwogICAgICAgICBmbG9hdCBsYXN0QWRq
dXN0ZWRQb3MgPSAwOwotICAgICAgICBjb25zdCBVbmlDaGFyICpjaGFyYWN0ZXJzID0gcGFyYW1z
LT5tX2NoYXJhY3RlcnMgKyBwYXJhbXMtPm1fZnJvbTsKLSAgICAgICAgY29uc3QgRm9udERhdGEg
KipyZW5kZXJlcnMgPSBwYXJhbXMtPm1fZm9udHMgKyBwYXJhbXMtPm1fZnJvbTsKKyAgICAgICAg
Y29uc3QgVUNoYXIgKmNoYXJhY3RlcnMgPSBwYXJhbXMtPm1fcnVuLmRhdGEocGFyYW1zLT5tX3J1
bi5mcm9tKCkpOworICAgICAgICBjb25zdCBGb250RGF0YSAqKnJlbmRlcmVycyA9IHBhcmFtcy0+
bV9mb250cyArIHBhcmFtcy0+bV9ydW4uZnJvbSgpOwogICAgICAgICBjb25zdCBGb250RGF0YSAq
cmVuZGVyZXI7CiAgICAgICAgIGNvbnN0IEZvbnREYXRhICpsYXN0UmVuZGVyZXIgPSAwOwotICAg
ICAgICBVbmlDaGFyIGNoLCBuZXh0Q2g7CisgICAgICAgIFVDaGFyIGNoLCBuZXh0Q2g7CiAgICAg
ICAgIEJ5dGVDb3VudCBvZmZzZXQgPSBsYXlvdXRSZWNvcmRzWzBdLm9yaWdpbmFsT2Zmc2V0Owot
ICAgICAgICBuZXh0Q2ggPSAqKFVuaUNoYXIgKikoKChjaGFyICopY2hhcmFjdGVycykrb2Zmc2V0
KTsKKyAgICAgICAgbmV4dENoID0gKihVQ2hhciAqKSgoKGNoYXIgKiljaGFyYWN0ZXJzKStvZmZz
ZXQpOwogICAgICAgICBib29sIHNob3VsZFJvdW5kID0gZmFsc2U7CiAgICAgICAgIGJvb2wgc3lu
dGhldGljQm9sZFBhc3MgPSBwYXJhbXMtPm1fc3ludGhldGljQm9sZFBhc3M7CiAgICAgICAgIEZp
eGVkIHN5bnRoZXRpY0JvbGRPZmZzZXQgPSAwOwpAQCAtMjc5LDcgKzI3Miw3IEBACiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGFkZGluZyAtPSBwYXJhbXMtPm1fcGFkUGVyU3BhY2U7CiAg
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgaWYgKG9mZnNldCAhPSAwICYmICFGb250Ojp0cmVhdEFzU3BhY2UoKigoVW5p
Q2hhciAqKSgoKGNoYXIgKiljaGFyYWN0ZXJzKStvZmZzZXQpIC0gMSkpICYmIHBhcmFtcy0+bV9m
b250LT53b3JkU3BhY2luZygpKQorICAgICAgICAgICAgICAgICAgICBpZiAob2Zmc2V0ICE9IDAg
JiYgIUZvbnQ6OnRyZWF0QXNTcGFjZSgqKChVQ2hhciAqKSgoKGNoYXIgKiljaGFyYWN0ZXJzKStv
ZmZzZXQpIC0gMSkpICYmIHBhcmFtcy0+bV9mb250LT53b3JkU3BhY2luZygpKQogICAgICAgICAg
ICAgICAgICAgICAgICAgd2lkdGggKz0gcGFyYW1zLT5tX2ZvbnQtPndvcmRTcGFjaW5nKCk7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMjg4LDcgKzI4MSw3IEBACiAgICAg
ICAgICAgICBvZmZzZXQgPSBsYXlvdXRSZWNvcmRzW2ldLm9yaWdpbmFsT2Zmc2V0OwogICAgICAg
ICAgICAgLy8gVXNlIHNwYWNlIGZvciBuZXh0Q2ggYXQgdGhlIGVuZCBvZiB0aGUgbG9vcCBzbyB0
aGF0IHdlIGdldCBpbnNpZGUgdGhlIHJvdW5kaW5nIGhhY2sgY29kZS4KICAgICAgICAgICAgIC8v
IFdlIHdvbid0IGFjdHVhbGx5IHJvdW5kIHVubGVzcyB0aGUgb3RoZXIgY29uZGl0aW9ucyBhcmUg
c2F0aXNmaWVkLgotICAgICAgICAgICAgbmV4dENoID0gaXNMYXN0Q2hhciA/ICcgJyA6ICooVW5p
Q2hhciAqKSgoKGNoYXIgKiljaGFyYWN0ZXJzKStvZmZzZXQpOworICAgICAgICAgICAgbmV4dENo
ID0gaXNMYXN0Q2hhciA/ICcgJyA6ICooVUNoYXIgKikoKChjaGFyICopY2hhcmFjdGVycykrb2Zm
c2V0KTsKIAogICAgICAgICAgICAgaWYgKEZvbnQ6OmlzUm91bmRpbmdIYWNrQ2hhcmFjdGVyKGNo
KSkKICAgICAgICAgICAgICAgICB3aWR0aCA9IGNlaWxmKHdpZHRoKTsKQEAgLTI5Niw3ICsyODks
OCBAQAogICAgICAgICAgICAgaWYgKEZvbnQ6OmlzUm91bmRpbmdIYWNrQ2hhcmFjdGVyKG5leHRD
aCkKICAgICAgICAgICAgICAgICAmJiAoIWlzTGFzdENoYXIKICAgICAgICAgICAgICAgICAgICAg
fHwgcGFyYW1zLT5tX2FwcGx5UnVuUm91bmRpbmcKLSAgICAgICAgICAgICAgICAgICAgfHwgKHBh
cmFtcy0+bV90byA8IChpbnQpcGFyYW1zLT5tX2xlbiAmJiBGb250Ojppc1JvdW5kaW5nSGFja0No
YXJhY3RlcihjaGFyYWN0ZXJzW3BhcmFtcy0+bV90byAtIHBhcmFtcy0+bV9mcm9tXSkpKSkgewor
ICAgICAgICAgICAgICAgICAgICB8fCAocGFyYW1zLT5tX3J1bi50bygpIDwgKGludClwYXJhbXMt
Pm1fcnVuLmxlbmd0aCgpICYmIAorICAgICAgICAgICAgICAgICAgICAgICAgRm9udDo6aXNSb3Vu
ZGluZ0hhY2tDaGFyYWN0ZXIoY2hhcmFjdGVyc1twYXJhbXMtPm1fcnVuLnRvKCkgLSBwYXJhbXMt
Pm1fcnVuLmZyb20oKV0pKSkpIHsKICAgICAgICAgICAgICAgICBpZiAoIXBhcmFtcy0+bV9ydGwp
CiAgICAgICAgICAgICAgICAgICAgIGxhc3RBZGp1c3RlZFBvcyA9IGNlaWxmKGxhc3RBZGp1c3Rl
ZFBvcyk7CiAgICAgICAgICAgICAgICAgZWxzZSB7CkBAIC0zMzEsOCArMzI1LDggQEAKICAgICAv
LyBGSVhNRTogSXQgaXMgcHJvYmFibHkgYmVzdCB0byBhbHdheXMgYWxsb2NhdGUgYSBidWZmZXIg
Zm9yIFJUTCwgc2luY2UgZXZlbiBpZiBmb3IgdGhpcwogICAgIC8vIGZvbnREYXRhIEFUU1VNaXJy
b3JzIGlzIHRydWUsIGZvciBhIHN1YnN0aXR1dGUgZm9udERhdGEgaXQgbWlnaHQgYmUgZmFsc2Uu
CiAgICAgY29uc3QgRm9udERhdGEqIGZvbnREYXRhID0gZm9udC0+cHJpbWFyeUZvbnQoKTsKLSAg
ICBtX2ZvbnRzID0gbmV3IGNvbnN0IEZvbnREYXRhKlttX2xlbl07Ci0gICAgbV9jaGFyQnVmZmVy
ID0gKFVuaUNoYXIqKSgoZm9udC0+aXNTbWFsbENhcHMoKSB8fCAobV9ydGwgJiYgIWZvbnREYXRh
LT5tX0FUU1VNaXJyb3JzKSkgPyBuZXcgVW5pQ2hhclttX2xlbl0gOiAwKTsKKyAgICBtX2ZvbnRz
ID0gbmV3IGNvbnN0IEZvbnREYXRhKlttX3J1bi5sZW5ndGgoKV07CisgICAgbV9jaGFyQnVmZmVy
ID0gKFVDaGFyKikoKGZvbnQtPmlzU21hbGxDYXBzKCkgfHwgKG1fcnRsICYmICFmb250RGF0YS0+
bV9BVFNVTWlycm9ycykpID8gbmV3IFVDaGFyW21fcnVuLmxlbmd0aCgpXSA6IDApOwogICAgIAog
ICAgIC8vIFRoZSBvbmx5IENvY29hIGNhbGxzIGhlcmUgYXJlIHRvIE5TR3JhcGhpY3NDb250ZXh0
LCB3aGljaCBkb2VzIG5vdCByYWlzZSBleGNlcHRpb25zLgogCkBAIC0zNDYsMTcgKzM0MCwxNyBA
QAogICAgIC8vIC0gXG4sIFx0LCBhbmQgbm9uYnJlYWtpbmcgc3BhY2UgcmVuZGVyIGFzIGEgc3Bh
Y2UuCiAgICAgLy8gLSBPdGhlciBjb250cm9sIGNoYXJhY3RlcnMgZG8gbm90IHJlbmRlciAob3Ro
ZXIgY29kZSBwYXRoIHVzZXMgemVyby13aWR0aCBzcGFjZXMpLgogCi0gICAgVW5pQ2hhckNvdW50
IHRvdGFsTGVuZ3RoID0gbV9sZW47Ci0gICAgVW5pQ2hhckFycmF5T2Zmc2V0IHJ1blRvID0gKG1f
dG8gPT0gLTEgPyB0b3RhbExlbmd0aCA6ICh1bnNpZ25lZCBpbnQpbV90byk7Ci0gICAgVW5pQ2hh
ckFycmF5T2Zmc2V0IHJ1bkZyb20gPSBtX2Zyb207CisgICAgVW5pQ2hhckNvdW50IHRvdGFsTGVu
Z3RoID0gbV9ydW4ubGVuZ3RoKCk7CisgICAgVW5pQ2hhckFycmF5T2Zmc2V0IHJ1blRvID0gbV9y
dW4udG8oKTsKKyAgICBVbmlDaGFyQXJyYXlPZmZzZXQgcnVuRnJvbSA9IG1fcnVuLmZyb20oKTsK
ICAgICAKICAgICBpZiAobV9jaGFyQnVmZmVyKQotICAgICAgICBtZW1jcHkobV9jaGFyQnVmZmVy
LCBtX2NoYXJhY3RlcnMsIHRvdGFsTGVuZ3RoICogc2l6ZW9mKFVuaUNoYXIpKTsKKyAgICAgICAg
bWVtY3B5KG1fY2hhckJ1ZmZlciwgbV9ydW4uY2hhcmFjdGVycygpLCB0b3RhbExlbmd0aCAqIHNp
emVvZihVQ2hhcikpOwogCiAgICAgVW5pQ2hhckNvdW50IHJ1bkxlbmd0aCA9IHJ1blRvIC0gcnVu
RnJvbTsKICAgICAKICAgICBzdGF0dXMgPSBBVFNVQ3JlYXRlVGV4dExheW91dFdpdGhUZXh0UHRy
KAotICAgICAgICAgICAgKG1fY2hhckJ1ZmZlciA/IG1fY2hhckJ1ZmZlciA6IG1fY2hhcmFjdGVy
cyksCisgICAgICAgICAgICAobV9jaGFyQnVmZmVyID8gbV9jaGFyQnVmZmVyIDogbV9ydW4uY2hh
cmFjdGVycygpKSwKICAgICAgICAgICAgIHJ1bkZyb20sICAgICAgICAvLyBvZmZzZXQKICAgICAg
ICAgICAgIHJ1bkxlbmd0aCwgICAgICAvLyBsZW5ndGgKICAgICAgICAgICAgIHRvdGFsTGVuZ3Ro
LCAgICAvLyB0b3RhbCBsZW5ndGgKQEAgLTM5OCw3ICszOTIsNyBAQAogICAgICAgICBzdGF0dXMg
PSBBVFNVTWF0Y2hGb250c1RvVGV4dChsYXlvdXQsIHN1YnN0aXR1dGVPZmZzZXQsIGtBVFNVVG9U
ZXh0RW5kLCAmQVRTVVN1YnN0aXR1dGVGb250LCAmc3Vic3RpdHV0ZU9mZnNldCwgJnN1YnN0aXR1
dGVMZW5ndGgpOwogICAgICAgICBpZiAoc3RhdHVzID09IGtBVFNVRm9udHNNYXRjaGVkIHx8IHN0
YXR1cyA9PSBrQVRTVUZvbnRzTm90TWF0Y2hlZCkgewogICAgICAgICAgICAgLy8gRklYTUU6IFNo
b3VsZCBnbyB0aHJvdWdoIGZhbGxiYWNrIGxpc3QgZXZlbnR1YWxseS4KLSAgICAgICAgICAgIHN1
YnN0aXR1dGVGb250RGF0YSA9IGZvbnREYXRhLT5maW5kU3Vic3RpdHV0ZUZvbnREYXRhKG1fY2hh
cmFjdGVycyArIHN1YnN0aXR1dGVPZmZzZXQsIHN1YnN0aXR1dGVMZW5ndGgsIG1fZm9udC0+Zm9u
dERlc2NyaXB0aW9uKCkpOworICAgICAgICAgICAgc3Vic3RpdHV0ZUZvbnREYXRhID0gZm9udERh
dGEtPmZpbmRTdWJzdGl0dXRlRm9udERhdGEobV9ydW4uY2hhcmFjdGVycygpICsgc3Vic3RpdHV0
ZU9mZnNldCwgc3Vic3RpdHV0ZUxlbmd0aCwgbV9mb250LT5mb250RGVzY3JpcHRpb24oKSk7CiAg
ICAgICAgICAgICBpZiAoc3Vic3RpdHV0ZUZvbnREYXRhKSB7CiAgICAgICAgICAgICAgICAgaW5p
dGlhbGl6ZUFUU1VTdHlsZShzdWJzdGl0dXRlRm9udERhdGEpOwogICAgICAgICAgICAgICAgIGlm
IChzdWJzdGl0dXRlRm9udERhdGEtPm1fQVRTVVN0eWxlKQpAQCAtNDI5LDggKzQyMyw4IEBACiAg
ICAgICAgICAgICBpZiAobV9ydGwgJiYgbV9jaGFyQnVmZmVyICYmICFyLT5tX0FUU1VNaXJyb3Jz
KQogICAgICAgICAgICAgICAgIG1fY2hhckJ1ZmZlcltpXSA9IHVfY2hhck1pcnJvcihtX2NoYXJC
dWZmZXJbaV0pOwogICAgICAgICAgICAgaWYgKG1fZm9udC0+aXNTbWFsbENhcHMoKSkgewotICAg
ICAgICAgICAgICAgIFVuaUNoYXIgYyA9IG1fY2hhckJ1ZmZlcltpXTsKLSAgICAgICAgICAgICAg
ICBVbmlDaGFyIG5ld0M7CisgICAgICAgICAgICAgICAgVUNoYXIgYyA9IG1fY2hhckJ1ZmZlcltp
XTsKKyAgICAgICAgICAgICAgICBVQ2hhciBuZXdDOwogICAgICAgICAgICAgICAgIGlmIChVX0dF
VF9HQ19NQVNLKGMpICYgVV9HQ19NX01BU0spCiAgICAgICAgICAgICAgICAgICAgIG1fZm9udHNb
aV0gPSBpc1NtYWxsQ2FwID8gci0+c21hbGxDYXBzRm9udERhdGEoKSA6IHI7CiAgICAgICAgICAg
ICAgICAgZWxzZSBpZiAoIXVfaXNVVXBwZXJjYXNlKGMpICYmIChuZXdDID0gdV90b3VwcGVyKGMp
KSAhPSBjKSB7CkBAIC00NTksNyArNDUzLDcgQEAKICAgICAgICAgZmxvYXQgbnVtU3BhY2VzID0g
MDsKICAgICAgICAgdW5zaWduZWQgazsKICAgICAgICAgZm9yIChrID0gMDsgayA8IHRvdGFsTGVu
Z3RoOyBrKyspCi0gICAgICAgICAgICBpZiAoRm9udDo6dHJlYXRBc1NwYWNlKG1fY2hhcmFjdGVy
c1trXSkpCisgICAgICAgICAgICBpZiAoRm9udDo6dHJlYXRBc1NwYWNlKG1fcnVuW2tdKSkKICAg
ICAgICAgICAgICAgICBudW1TcGFjZXMrKzsKIAogICAgICAgICBtX3BhZFBlclNwYWNlID0gY2Vp
bGYobV9wYWRkaW5nIC8gbnVtU3BhY2VzKTsKQEAgLTQ3OSwyMiArNDczLDE0IEBACiAgICAgcmV0
dXJuIG1fZm9udExpc3QtPnBsYXRmb3JtRm9udChmb250RGVzY3JpcHRpb24oKSk7CiB9CiAKLUlu
dFJlY3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvclRleHQoY29uc3QgSW50UG9pbnQmIHBvaW50LCBp
bnQgaCwgaW50IHRhYldpZHRoLCBpbnQgeHBvcywgCi0gICAgY29uc3QgVUNoYXIqIHN0ciwgaW50
IHNsZW4sIGludCBwb3MsIGludCBsLCBpbnQgdG9BZGQsCi0gICAgYm9vbCBydGwsIGJvb2wgdmlz
dWFsbHlPcmRlcmVkLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAorSW50UmVjdCBGb250OjpzZWxl
Y3Rpb25SZWN0Rm9yVGV4dChjb25zdCBUZXh0UnVuJiB0ZXh0UnVuLCBjb25zdCBJbnRQb2ludCYg
cG9pbnQsIGludCBoLCBpbnQgdGFiV2lkdGgsIGludCB4cG9zLCBpbnQgdG9BZGQsIGJvb2wgcnRs
LCBib29sIHZpc3VhbGx5T3JkZXJlZCkgY29uc3QKIHsKICAgICBhc3NlcnQobV9mb250TGlzdCk7
Ci0gICAgaW50IGxlbiA9IG1pbihzbGVuIC0gcG9zLCBsKTsKIAogICAgIENSRUFURV9GQU1JTFlf
QVJSQVkoZm9udERlc2NyaXB0aW9uKCksIGZhbWlsaWVzKTsKIAotICAgIGlmIChmcm9tIDwgMCkK
LSAgICAgICAgZnJvbSA9IDA7Ci0gICAgaWYgKHRvIDwgMCkKLSAgICAgICAgdG8gPSBsZW47Ci0K
ICAgICBXZWJDb3JlVGV4dFJ1biBydW47Ci0gICAgV2ViQ29yZUluaXRpYWxpemVUZXh0UnVuKCZy
dW4sIHN0ciArIHBvcywgbGVuLCBmcm9tLCB0byk7CisgICAgV2ViQ29yZUluaXRpYWxpemVUZXh0
UnVuKCZydW4sIHRleHRSdW4uY2hhcmFjdGVycygpLCB0ZXh0UnVuLmxlbmd0aCgpLCB0ZXh0UnVu
LmZyb20oKSwgdGV4dFJ1bi50bygpKTsKICAgICBXZWJDb3JlVGV4dFN0eWxlIHN0eWxlOwogICAg
IFdlYkNvcmVJbml0aWFsaXplRW1wdHlUZXh0U3R5bGUoJnN0eWxlKTsKICAgICBzdHlsZS5ydGwg
PSBydGw7CkBAIC01MTQsMTkgKzUwMCwxNyBAQAogICAgIGdlb21ldHJ5LnVzZUZvbnRNZXRyaWNz
Rm9yU2VsZWN0aW9uWUFuZEhlaWdodCA9IGZhbHNlOwogICAgIHJldHVybiBlbmNsb3NpbmdJbnRS
ZWN0KG1fZm9udExpc3QtPnByaW1hcnlGb250KGZvbnREZXNjcmlwdGlvbigpKS0+c2VsZWN0aW9u
UmVjdEZvclJ1bigmcnVuLCAmc3R5bGUsICZnZW9tZXRyeSkpOwogfQotdm9pZCBGb250OjpkcmF3
Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEludFBv
aW50JiBwb2ludCwgaW50IHRhYldpZHRoLCBpbnQgeHBvcywgY29uc3QgVUNoYXIqIHN0ciwgaW50
IGxlbiwgaW50IGZyb20sIGludCB0bywKKwordm9pZCBGb250OjpkcmF3Q29tcGxleFRleHQoR3Jh
cGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3Qg
SW50UG9pbnQmIHBvaW50LCBpbnQgdGFiV2lkdGgsIGludCB4cG9zLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IHRvQWRkLCBUZXh0RGlyZWN0aW9uIGQsIGJvb2wgdmlzdWFsbHlPcmRl
cmVkKSBjb25zdAogewotICAgIGludCBydW5MZW5ndGggPSB0byAtIGZyb207Ci0gICAgaWYgKHJ1
bkxlbmd0aCA8PSAwKQotICAgICAgICByZXR1cm47Ci0KICAgICBPU1N0YXR1cyBzdGF0dXM7Ci0g
ICAgVW5pQ2hhciogY2hhcmFjdGVycyA9IChVbmlDaGFyKilzdHI7Ci0gICAgaWYgKHZpc3VhbGx5
T3JkZXJlZCkKLSAgICAgICAgY2hhcmFjdGVycyA9IGFkZERpcmVjdGlvbmFsT3ZlcnJpZGUoY2hh
cmFjdGVycywgbGVuLCBmcm9tLCB0bywgZCA9PSBSVEwpOworICAgIAorICAgIGNvbnN0IFVDaGFy
KiBjaGFyYWN0ZXJzID0gcnVuLmNoYXJhY3RlcnMoKTsKKyAgICBpbnQgcnVuTGVuZ3RoID0gcnVu
Lmxlbmd0aCgpOwogCi0gICAgQVRTVUxheW91dFBhcmFtZXRlcnMgcGFyYW1zKGNoYXJhY3RlcnMs
IGxlbiwgMCwgbGVuLCB0b0FkZCwgZCwgdHJ1ZSwgdHJ1ZSk7CisgICAgVGV4dFJ1biBhZGp1c3Rl
ZFJ1biA9IHZpc3VhbGx5T3JkZXJlZCA/IGFkZERpcmVjdGlvbmFsT3ZlcnJpZGUocnVuLCBkID09
IFJUTCkgOiBydW47CisgICAgQVRTVUxheW91dFBhcmFtZXRlcnMgcGFyYW1zKGFkanVzdGVkUnVu
LCB0b0FkZCwgZCwgdHJ1ZSwgdHJ1ZSk7CiAgICAgcGFyYW1zLmluaXRpYWxpemUodGhpcyk7CiAK
ICAgICBbbnNDb2xvcihncmFwaGljc0NvbnRleHQtPnBlbigpLmNvbG9yKCkpIHNldF07CkBAIC01
MzksMTIgKzUyMywxMiBAQAogICAgIGJvb2wgZmxpcHBlZCA9IFtnQ29udGV4dCBpc0ZsaXBwZWRd
OwogICAgIGlmICghZmxpcHBlZCkKICAgICAgICAgQ0dDb250ZXh0U2NhbGVDVE0oY29udGV4dCwg
MS4wLCAtMS4wKTsKLSAgICBzdGF0dXMgPSBBVFNVRHJhd1RleHQocGFyYW1zLm1fbGF5b3V0LCBm
cm9tLCBydW5MZW5ndGgsIDAsIDApOworICAgIHN0YXR1cyA9IEFUU1VEcmF3VGV4dChwYXJhbXMu
bV9sYXlvdXQsIGFkanVzdGVkUnVuLmZyb20oKSwgcnVuTGVuZ3RoLCAwLCAwKTsKICAgICBpZiAo
c3RhdHVzID09IG5vRXJyICYmIHBhcmFtcy5tX2hhc1N5bnRoZXRpY0JvbGQpIHsKICAgICAgICAg
Ly8gRm9yY2UgcmVsYXlvdXQgZm9yIHRoZSBib2xkIHBhc3MKICAgICAgICAgQVRTVUNsZWFyTGF5
b3V0Q2FjaGUocGFyYW1zLm1fbGF5b3V0LCAwKTsKICAgICAgICAgcGFyYW1zLm1fc3ludGhldGlj
Qm9sZFBhc3MgPSB0cnVlOwotICAgICAgICBzdGF0dXMgPSBBVFNVRHJhd1RleHQocGFyYW1zLm1f
bGF5b3V0LCBmcm9tLCBydW5MZW5ndGgsIDAsIDApOworICAgICAgICBzdGF0dXMgPSBBVFNVRHJh
d1RleHQocGFyYW1zLm1fbGF5b3V0LCBhZGp1c3RlZFJ1bi5mcm9tKCksIHJ1bkxlbmd0aCwgMCwg
MCk7CiAgICAgfQogICAgIGlmICghZmxpcHBlZCkKICAgICAgICAgQ0dDb250ZXh0U2NhbGVDVE0o
Y29udGV4dCwgMS4wLCAtMS4wKTsKQEAgLTU2MSwyMSArNTQ1LDE1IEBACiAgICAgICAgIGRlbGV0
ZSBbXWNoYXJhY3RlcnM7CiB9CiAKLXZvaWQgRm9udDo6ZHJhd0hpZ2hsaWdodEZvclRleHQoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRQb2ludCYgcG9pbnQsIGludCBoLCBpbnQg
dGFiV2lkdGgsIGludCB4cG9zLCBjb25zdCBVQ2hhciogc3RyLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgbGVuLCBpbnQgZnJvbSwgaW50IHRvLCBpbnQgdG9BZGQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHREaXJlY3Rpb24gZCwgYm9vbCB2aXN1YWxs
eU9yZGVyZWQsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0Cit2b2lkIEZvbnQ6
OmRyYXdIaWdobGlnaHRGb3JUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4
dFJ1biYgdGV4dFJ1biwgY29uc3QgSW50UG9pbnQmIHBvaW50LCBpbnQgaCwgaW50IHRhYldpZHRo
LCBpbnQgeHBvcywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0b0FkZCwg
VGV4dERpcmVjdGlvbiBkLCBib29sIHZpc3VhbGx5T3JkZXJlZCwgY29uc3QgQ29sb3ImIGJhY2tn
cm91bmRDb2xvcikgY29uc3QKIHsKICAgICAvLyBBdm9pZCBhbGxvY2F0aW9ucywgdXNlIHN0YWNr
IGFycmF5IHRvIHBhc3MgZm9udCBmYW1pbGllcy4gIE5vcm1hbGx5IHRoZXNlCiAgICAgLy8gY3Nz
IGZhbGxiYWNrIGxpc3RzIGFyZSBzbWFsbCA8PSAzLgogICAgIENSRUFURV9GQU1JTFlfQVJSQVko
KnRoaXMsIGZhbWlsaWVzKTsKLQotICAgIGlmIChmcm9tIDwgMCkKLSAgICAgICAgZnJvbSA9IDA7
Ci0gICAgaWYgKHRvIDwgMCkKLSAgICAgICAgdG8gPSBsZW47CiAgICAgICAgIAogICAgIFdlYkNv
cmVUZXh0UnVuIHJ1bjsKLSAgICBXZWJDb3JlSW5pdGlhbGl6ZVRleHRSdW4oJnJ1biwgc3RyLCBs
ZW4sIGZyb20sIHRvKTsgICAgCisgICAgV2ViQ29yZUluaXRpYWxpemVUZXh0UnVuKCZydW4sIHRl
eHRSdW4uY2hhcmFjdGVycygpLCB0ZXh0UnVuLmxlbmd0aCgpLCB0ZXh0UnVuLmZyb20oKSwgdGV4
dFJ1bi50bygpKTsgICAgCiAgICAgV2ViQ29yZVRleHRTdHlsZSBzdHlsZTsKICAgICBXZWJDb3Jl
SW5pdGlhbGl6ZUVtcHR5VGV4dFN0eWxlKCZzdHlsZSk7CiAgICAgc3R5bGUudGV4dENvbG9yID0g
bnNDb2xvcihjb250ZXh0LT5wZW4oKS5jb2xvcigpKTsKQEAgLTYxMywxOSArNTkxLDE2IEBACiAg
ICAgcmV0dXJuIG1fZm9udExpc3QtPnByaW1hcnlGb250KGZvbnREZXNjcmlwdGlvbigpKS0+bWlz
c3BlbGxpbmdMaW5lVGhpY2tuZXNzKCk7CiB9CiAKLWZsb2F0IEZvbnQ6OmZsb2F0V2lkdGhGb3JD
b21wbGV4VGV4dChjb25zdCBVQ2hhciogdWNoYXJzLCBpbnQgbGVuLCBpbnQgZnJvbSwgaW50IHRv
LCBpbnQgdGFiV2lkdGgsIGludCB4cG9zLCBib29sIHJ1blJvdW5kaW5nKSBjb25zdAorZmxvYXQg
Rm9udDo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgaW50IHRh
YldpZHRoLCBpbnQgeHBvcywgYm9vbCBydW5Sb3VuZGluZykgY29uc3QKIHsKLSAgICBpZiAodG8g
LSBmcm9tIDw9IDApCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgQVRTVUxheW91dFBhcmFtZXRl
cnMgcGFyYW1zKChVbmlDaGFyKil1Y2hhcnMsIGxlbiwgZnJvbSwgdG8sIDAsIExUUiwgdHJ1ZSwg
cnVuUm91bmRpbmcpOworICAgIEFUU1VMYXlvdXRQYXJhbWV0ZXJzIHBhcmFtcyhydW4sIDAsIExU
UiwgdHJ1ZSwgcnVuUm91bmRpbmcpOwogICAgIHBhcmFtcy5pbml0aWFsaXplKHRoaXMpOwogICAg
IAogICAgIE9TU3RhdHVzIHN0YXR1czsKICAgICAKICAgICBBVFNUcmFwZXpvaWQgZmlyc3RHbHlw
aEJvdW5kczsKICAgICBJdGVtQ291bnQgYWN0dWFsTnVtQm91bmRzOwotICAgIHN0YXR1cyA9IEFU
U1VHZXRHbHlwaEJvdW5kcyhwYXJhbXMubV9sYXlvdXQsIDAsIDAsIGZyb20sIHRvIC0gZnJvbSwg
a0FUU1VzZUZyYWN0aW9uYWxPcmlnaW5zLCAxLCAmZmlyc3RHbHlwaEJvdW5kcywgJmFjdHVhbE51
bUJvdW5kcyk7ICAgIAorICAgIHN0YXR1cyA9IEFUU1VHZXRHbHlwaEJvdW5kcyhwYXJhbXMubV9s
YXlvdXQsIDAsIDAsIHJ1bi5mcm9tKCksIHJ1bi50bygpIC0gcnVuLmZyb20oKSwga0FUU1VzZUZy
YWN0aW9uYWxPcmlnaW5zLCAxLCAmZmlyc3RHbHlwaEJvdW5kcywgJmFjdHVhbE51bUJvdW5kcyk7
ICAgIAogICAgIGlmIChzdGF0dXMgIT0gbm9FcnIpCiAgICAgICAgIExPR19FUlJPUigiQVRTVUdl
dEdseXBoQm91bmRzKCkgZmFpbGVkKCVkKSIsIHN0YXR1cyk7CiAgICAgaWYgKGFjdHVhbE51bUJv
dW5kcyAhPSAxKQpAQCAtNjM3LDEzICs2MTIsMTMgQEAKICAgICAgICAgICAgTUlOKEZpeGVkVG9G
bG9hdChmaXJzdEdseXBoQm91bmRzLnVwcGVyTGVmdC54KSwgRml4ZWRUb0Zsb2F0KGZpcnN0R2x5
cGhCb3VuZHMubG93ZXJMZWZ0LngpKTsKIH0KIAotaW50IEZvbnQ6OmNoZWNrU2VsZWN0aW9uUG9p
bnQoY29uc3QgVUNoYXIqIHMsIGludCBzbGVuLCBpbnQgcG9zLCBpbnQgbGVuLCBpbnQgdG9BZGQs
IGludCB0YWJXaWR0aCwgaW50IHhwb3MsIGludCB4LCBUZXh0RGlyZWN0aW9uIGQsIGJvb2wgdmlz
dWFsbHlPcmRlcmVkLCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdAoraW50IEZvbnQ6
OmNoZWNrU2VsZWN0aW9uUG9pbnQoY29uc3QgVGV4dFJ1biYgdGV4dFJ1biwgaW50IHRvQWRkLCBp
bnQgdGFiV2lkdGgsIGludCB4cG9zLCBpbnQgeCwgVGV4dERpcmVjdGlvbiBkLCBib29sIHZpc3Vh
bGx5T3JkZXJlZCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3QKIHsKICAgICBhc3Nl
cnQobV9mb250TGlzdCk7CiAgICAgQ1JFQVRFX0ZBTUlMWV9BUlJBWShmb250RGVzY3JpcHRpb24o
KSwgZmFtaWxpZXMpOwogICAgIAogICAgIFdlYkNvcmVUZXh0UnVuIHJ1bjsKLSAgICBXZWJDb3Jl
SW5pdGlhbGl6ZVRleHRSdW4oJnJ1biwgcyArIHBvcywgbWluKHNsZW4gLSBwb3MsIGxlbiksIDAs
IGxlbik7CisgICAgV2ViQ29yZUluaXRpYWxpemVUZXh0UnVuKCZydW4sIHRleHRSdW4uY2hhcmFj
dGVycygpLCB0ZXh0UnVuLmxlbmd0aCgpLCB0ZXh0UnVuLmZyb20oKSwgdGV4dFJ1bi50bygpKTsK
ICAgICAKICAgICBXZWJDb3JlVGV4dFN0eWxlIHN0eWxlOwogICAgIFdlYkNvcmVJbml0aWFsaXpl
RW1wdHlUZXh0U3R5bGUoJnN0eWxlKTsKSW5kZXg6IHBsYXRmb3JtL0dyYXBoaWNzQ29udGV4dC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vR3JhcGhpY3NDb250ZXh0LmNwcAkocmV2aXNpb24g
MTQyODkpCisrKyBwbGF0Zm9ybS9HcmFwaGljc0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xOTIsNDEgKzE5MiwyMiBAQAogICAgIGRyYXdJbWFnZShpbWFnZSwgRmxvYXRSZWN0KGRlc3Qp
LCBzcmNSZWN0LCBvcCk7CiB9CiAKLS8vIEZJWE1FOiBXZSBzaG91bGQgY29uc2lkZXIgcmVtb3Zp
bmcgdGhpcyBmdW5jdGlvbiBhbmQgaGF2aW5nIGNhbGxlcnMganVzdCBjYWxsIHRoZSBsb3dlci1s
ZXZlbCBkcmF3VGV4dCBkaXJlY3RseS4KLS8vIEZJWE1FOiBXZSBzaG91bGQgY29uc2lkZXIgY2hh
bmdpbmcgdGhpcyBmdW5jdGlvbiB0byB0YWtlIGEgY2hhcmFjdGVyIHBvaW50ZXIgYW5kIGxlbmd0
aCBpbnN0ZWFkIG9mIGEgRGVwcmVjYXRlZFN0cmluZy4KLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3VGV4dChjb25zdCBJbnRQb2ludCYgcG9pbnQsIGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmIHN0
cikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGNv
bnN0IEludFBvaW50JiBwb2ludCwgaW50IHRhYldpZHRoLCBpbnQgeHBvcywgaW50IHRvQWRkLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHREaXJlY3Rpb24gZCwgYm9vbCB2aXN1
YWxseU9yZGVyZWQpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0
dXJuOwotCi0gICAgZHJhd1RleHQocG9pbnQsIDAsIDAsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
VUNoYXIqPihzdHIudW5pY29kZSgpKSwgc3RyLmxlbmd0aCgpLCAwLCBzdHIubGVuZ3RoKCksIDAp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RleHQoY29uc3QgSW50UG9pbnQmIHBv
aW50LCBpbnQgdGFiV2lkdGgsIGludCB4cG9zLCBjb25zdCBVQ2hhciogc3RyLCBpbnQgc2xlbiwg
aW50IHBvcywgaW50IGxlbiwgaW50IHRvQWRkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFRleHREaXJlY3Rpb24gZCwgYm9vbCB2aXN1YWxseU9yZGVyZWQsIGludCBmcm9tLCBpbnQg
dG8pCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaW50IGxlbmd0aCA9IG1pbihzbGVuIC0gcG9zLCBsZW4pOwotICAgIGlmIChsZW5ndGggPD0g
MCkKLSAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGZvbnQoKS5kcmF3VGV4dCh0aGlzLCBwb2lu
dCwgdGFiV2lkdGgsIHhwb3MsIHN0ciArIHBvcywgbGVuZ3RoLCBmcm9tLCB0bywgdG9BZGQsIGQs
IHZpc3VhbGx5T3JkZXJlZCk7CisgICAgZm9udCgpLmRyYXdUZXh0KHRoaXMsIHJ1biwgcG9pbnQs
IHRhYldpZHRoLCB4cG9zLCB0b0FkZCwgZCwgdmlzdWFsbHlPcmRlcmVkKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdIaWdobGlnaHRGb3JUZXh0KGNvbnN0IEludFBvaW50JiBwb2lu
dCwgaW50IGgsIGludCB0YWJXaWR0aCwgaW50IHhwb3MsIGNvbnN0IFVDaGFyKiBzdHIsIGludCBz
bGVuLCBpbnQgcG9zLCBpbnQgbGVuLCBpbnQgdG9BZGQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVGV4dERpcmVjdGlvbiBkLCBib29sIHZpc3VhbGx5T3JkZXJl
ZCwgaW50IGZyb20sIGludCB0bywgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3SGlnaGxpZ2h0Rm9yVGV4dChjb25zdCBUZXh0UnVuJiBydW4s
IGNvbnN0IEludFBvaW50JiBwb2ludCwgaW50IGgsIGludCB0YWJXaWR0aCwgaW50IHhwb3MsIGlu
dCB0b0FkZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0
RGlyZWN0aW9uIGQsIGJvb2wgdmlzdWFsbHlPcmRlcmVkLCBjb25zdCBDb2xvciYgYmFja2dyb3Vu
ZENvbG9yKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsK
LSAgICAgICAgCi0gICAgaW50IGxlbmd0aCA9IG1pbihzbGVuIC0gcG9zLCBsZW4pOwotICAgIGlm
IChsZW5ndGggPD0gMCkKLSAgICAgICAgcmV0dXJuOwogCi0gICAgcmV0dXJuIGZvbnQoKS5kcmF3
SGlnaGxpZ2h0Rm9yVGV4dCh0aGlzLCBwb2ludCwgaCwgdGFiV2lkdGgsIHhwb3MsIHN0ciArIHBv
cywgbGVuZ3RoLCBmcm9tLCB0bywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRvQWRkLCBkLCB2aXN1YWxseU9yZGVyZWQsIGJhY2tncm91bmRDb2xvcik7CisgICAgcmV0
dXJuIGZvbnQoKS5kcmF3SGlnaGxpZ2h0Rm9yVGV4dCh0aGlzLCBydW4sIHBvaW50LCBoLCB0YWJX
aWR0aCwgeHBvcywgdG9BZGQsIGQsIHZpc3VhbGx5T3JkZXJlZCwgYmFja2dyb3VuZENvbG9yKTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChjb25zdCBJbnRQb2lu
dCYgcG9pbnQsIGludCB5T2Zmc2V0LCBpbnQgd2lkdGgpCkluZGV4OiBwbGF0Zm9ybS93aW4vRm9u
dFdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vd2luL0ZvbnRXaW4uY3BwCShyZXZpc2lv
biAxNDI4OSkKKysrIHBsYXRmb3JtL3dpbi9Gb250V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTU0LDcgKzE1NCw3IEBACiAgICAgcmV0dXJuIGRlZmF1bHRGb250OwogfQogCi1zdGF0aWMgSW50
U2l6ZSBoYWNraXNoRXh0ZW50Rm9yU3RyaW5nKEhEQyBkYywgRm9udERhdGEqIGZvbnQsIGNvbnN0
IFVDaGFyKiBzdHIsIGludCBzbGVuLCBpbnQgcG9zLCBpbnQgbGVuLCBpbnQgdGFiV2lkdGgsIGlu
dCB4cG9zKQorc3RhdGljIEludFNpemUgaGFja2lzaEV4dGVudEZvclN0cmluZyhIREMgZGMsIEZv
bnREYXRhKiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGludCB0YWJXaWR0aCwgaW50IHhwb3Mp
CiB7CiAgICAgU2F2ZURDKGRjKTsKIApAQCAtMTY3LDcgKzE2Nyw3IEBACiAgICAgLy8gRklYTUU6
IEhhbmRsZSB0YWJzICh0aGUgdGFiV2lkdGggYW5kIHhwb3MgcGFyYW1ldGVycykKICAgICAvLyBG
SVhNRTogSGFuZGxlIFJUTC4KICAgICBTSVpFIHM7Ci0gICAgQk9PTCByZXN1bHQgPSBHZXRUZXh0
RXh0ZW50UG9pbnQzMlcoZGMsIChXQ0hBUiopKHN0ciArIHBvcyksIGxlbiwgJnMpOworICAgIEJP
T0wgcmVzdWx0ID0gR2V0VGV4dEV4dGVudFBvaW50MzJXKGRjLCAoV0NIQVIqKShydW4uY2hhcmFj
dGVycygpKSwgcnVuLmxlbmd0aCgpLCAmcyk7CiAKICAgICBSZXN0b3JlREMoZGMsIC0xKTsKIApA
QCAtMTc2LDMzICsxNzYsMTkgQEAKICAgICByZXR1cm4gczsKIH0KIAotZmxvYXQgRm9udDo6Zmxv
YXRXaWR0aChjb25zdCBVQ2hhciogc3RyLCBpbnQgc2xlbiwgaW50IHBvcywgaW50IGxlbiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgaW50IHRhYldpZHRoLCBpbnQgeHBvcywgYm9vbCBydW5Sb3Vu
ZGluZykgY29uc3QKK2Zsb2F0IEZvbnQ6OmZsb2F0V2lkdGgoY29uc3QgVGV4dFJ1biYgcnVuLCBp
bnQgdGFiV2lkdGgsIGludCB4cG9zLCBib29sIHJ1blJvdW5kaW5nKSBjb25zdAogewogICAgIEZv
bnREYXRhKiBmb250ID0gbV9mb250TGlzdC0+cHJpbWFyeUZvbnQoZm9udERlc2NyaXB0aW9uKCkp
OwogICAgIGlmICghZm9udCkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBIREMgZGMgPSBHZXRE
QygoSFdORCkwKTsgLy8gRklYTUU6IE5lZWQgYSB3YXkgdG8gZ2V0IHRvIHRoZSByZWFsIEhEQy4K
LSAgICBJbnRTaXplIHJ1blNpemUgPSBoYWNraXNoRXh0ZW50Rm9yU3RyaW5nKGRjLCBmb250LCBz
dHIsIHNsZW4sIHBvcywgbGVuLCB0YWJXaWR0aCwgeHBvcyk7CisgICAgSW50U2l6ZSBydW5TaXpl
ID0gaGFja2lzaEV4dGVudEZvclN0cmluZyhkYywgZm9udCwgcnVuLCB0YWJXaWR0aCwgeHBvcyk7
CiAgICAgUmVsZWFzZURDKDAsIGRjKTsKICAgICByZXR1cm4gcnVuU2l6ZS53aWR0aCgpOwogfQog
Ci1zdGF0aWMgdm9pZCBjb252ZXJ0UmFuZ2UoaW50IGZyb20sIGludCB0bywgaW50IGxlbiwgaW50
JiBvZmZzZXQsIGludCYgbGVuZ3RoKQotewotICAgIG9mZnNldCA9IDA7Ci0gICAgbGVuZ3RoID0g
bGVuOwotICAgIGlmIChmcm9tID4gMCkgewotICAgICAgICBvZmZzZXQgPSBmcm9tOwotICAgICAg
ICBsZW5ndGggPSBsZW4gLSBmcm9tOwotICAgIH0KLSAgICBpZiAodG8gPiAwKQotICAgICAgICBs
ZW5ndGggPSB0byAtIGZyb207Ci19Ci0KLXZvaWQgRm9udDo6ZHJhd1RleHQoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRQb2ludCYgcG9pbnQsIGludCB0YWJXaWR0aCwgaW50IHhw
b3MsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBzdHIsIGludCBsZW4sIGludCBm
cm9tLCBpbnQgdG8sCit2b2lkIEZvbnQ6OmRyYXdUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBJbnRQb2ludCYgcG9pbnQsIGludCB0YWJXaWR0
aCwgaW50IHhwb3MsCiAgICAgICAgICAgICAgICAgICAgIGludCB0b0FkZCwgVGV4dERpcmVjdGlv
biBkLCBib29sIHZpc3VhbGx5T3JkZXJlZCkgY29uc3QKIHsKICAgICBGb250RGF0YSogZm9udCA9
IG1fZm9udExpc3QtPnByaW1hcnlGb250KGZvbnREZXNjcmlwdGlvbigpKTsKQEAgLTIxNSw5ICsy
MDEsNiBAQAogICAgIFNhdmVEQyhkYyk7CiAgICAgU2VsZWN0T2JqZWN0KGRjLCBmb250LT5wbGF0
Zm9ybURhdGEoKS5oZm9udCgpKTsKIAotICAgIGludCBvZmZzZXQsIGxlbmd0aDsKLSAgICBjb252
ZXJ0UmFuZ2UoZnJvbSwgdG8sIGxlbiwgb2Zmc2V0LCBsZW5ndGgpOwotCiAgICAgaW50IHggPSBw
b2ludC54KCk7CiAgICAgaW50IHkgPSBwb2ludC55KCk7CiAgICAgeSAtPSBmb250LT5hc2NlbnQo
KTsKQEAgLTIyNSwxNCArMjA4LDEzIEBACiAgICAgU2V0QmtNb2RlKGRjLCBUUkFOU1BBUkVOVCk7
CiAgICAgY29uc3QgQ29sb3ImIGNvbG9yID0gY29udGV4dC0+cGVuKCkuY29sb3IoKTsKICAgICBT
ZXRUZXh0Q29sb3IoZGMsIFJHQihjb2xvci5yZWQoKSwgY29sb3IuZ3JlZW4oKSwgY29sb3IuYmx1
ZSgpKSk7IC8vIEZJWE1FOiBOZWVkIHRvIHN1cHBvcnQgYWxwaGEgaW4gdGhlIHRleHQgY29sb3Iu
Ci0gICAgVGV4dE91dFcoZGMsIHgsIHksIChMUENXU1RSKShzdHIrb2Zmc2V0KSwgbGVuZ3RoKTsK
KyAgICBUZXh0T3V0VyhkYywgeCwgeSwgKExQQ1dTVFIpKHJ1bi5jaGFyYWN0ZXJzKCkpLCBydW4u
bGVuZ3RoKCkpOwogCiAgICAgUmVzdG9yZURDKGRjLCAtMSk7CiAgICAgLy8gTm8gbmVlZCB0byBS
ZWxlYXNlREMgdGhlIEhEQyBib3Jyb3dlZCBmcm9tIGNhaXJvCiB9CiAKLXZvaWQgRm9udDo6ZHJh
d0hpZ2hsaWdodEZvclRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRQb2lu
dCYgcG9pbnQsIGludCBoLCBpbnQgdGFiV2lkdGgsIGludCB4cG9zLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciogc3RyLCBpbnQgbGVuLCBpbnQgZnJvbSwgaW50
IHRvLCBpbnQgdG9BZGQsCit2b2lkIEZvbnQ6OmRyYXdIaWdobGlnaHRGb3JUZXh0KEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBJbnRQb2ludCYgcG9p
bnQsIGludCBoLCBpbnQgdGFiV2lkdGgsIGludCB4cG9zLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBUZXh0RGlyZWN0aW9uIGQsIGJvb2wgdmlzdWFsbHlPcmRlcmVkLCBjb25zdCBD
b2xvciYgYmFja2dyb3VuZENvbG9yKSBjb25zdAogewogICAgIGlmICghYmFja2dyb3VuZENvbG9y
LmlzVmFsaWQoKSkKQEAgLTI0NSwzMSArMjI3LDI2IEBACiAgICAgY2Fpcm9fc3VyZmFjZV90KiBz
dXJmYWNlID0gY2Fpcm9fZ2V0X3RhcmdldChjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSk7CiAg
ICAgSERDIGRjID0gY2Fpcm9fd2luMzJfc3VyZmFjZV9nZXRfZGMoc3VyZmFjZSk7CiAKLSAgICBp
bnQgb2Zmc2V0LCBsZW5ndGg7Ci0gICAgY29udmVydFJhbmdlKGZyb20sIHRvLCBsZW4sIG9mZnNl
dCwgbGVuZ3RoKTsKLSAgICBJbnRTaXplIHJ1blNpemUgPSBoYWNraXNoRXh0ZW50Rm9yU3RyaW5n
KGRjLCBmb250LCBzdHIsIGxlbiwgb2Zmc2V0LCBsZW5ndGgsIHRhYldpZHRoLCB4cG9zKTsKKyAg
ICBJbnRTaXplIHJ1blNpemUgPSBoYWNraXNoRXh0ZW50Rm9yU3RyaW5nKGRjLCBmb250LCBydW4s
IHRhYldpZHRoLCB4cG9zKTsKIAogICAgIC8vIEZJWE1FOiB0aGlzIGNvbnN0X2Nhc3Qgc2hvdWxk
IGJlIHJlbW92ZWQgd2hlbiB0aGlzIGNvZGUgaXMgbWFkZSByZWFsLgogICAgIGNvbnN0X2Nhc3Q8
R3JhcGhpY3NDb250ZXh0Kj4oY29udGV4dCktPmZpbGxSZWN0KEludFJlY3QocG9pbnQsIHJ1blNp
emUpLCBiYWNrZ3JvdW5kQ29sb3IpOwogfQogCi1JbnRSZWN0IEZvbnQ6OnNlbGVjdGlvblJlY3RG
b3JUZXh0KGNvbnN0IEludFBvaW50JiBwb2ludCwgaW50IGgsIGludCB0YWJXaWR0aCwgaW50IHhw
b3MsIGNvbnN0IFVDaGFyKiBzdHIsIGludCBzbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgcG9zLCBpbnQgbGVuLCBpbnQgdG9BZGQsIGJvb2wgcnRsLCBib29sIHZp
c3VhbGx5T3JkZXJlZCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK0ludFJlY3QgRm9udDo6c2Vs
ZWN0aW9uUmVjdEZvclRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBJbnRQb2ludCYgcG9p
bnQsIGludCBoLCBpbnQgdGFiV2lkdGgsIGludCB4cG9zLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgdG9BZGQsIGJvb2wgcnRsLCBib29sIHZpc3VhbGx5T3JkZXJlZCkg
Y29uc3QKIHsKICAgICBGb250RGF0YSogZm9udCA9IG1fZm9udExpc3QtPnByaW1hcnlGb250KGZv
bnREZXNjcmlwdGlvbigpKTsKICAgICBpZiAoIWZvbnQpCiAgICAgICAgIHJldHVybiBJbnRSZWN0
KCk7CiAKLSAgICBpbnQgb2Zmc2V0LCBsZW5ndGg7Ci0gICAgY29udmVydFJhbmdlKGZyb20sIHRv
LCBsZW4sIG9mZnNldCwgbGVuZ3RoKTsKLQogICAgIEhEQyBkYyA9IEdldERDKChIV05EKTApOyAv
LyBGSVhNRTogTmVlZCBhIHdheSB0byBnZXQgdG8gdGhlIHJlYWwgSERDLgotICAgIEludFNpemUg
cnVuU2l6ZSA9IGhhY2tpc2hFeHRlbnRGb3JTdHJpbmcoZGMsIGZvbnQsIHN0ciwgc2xlbiwgb2Zm
c2V0LCBsZW5ndGgsIHRhYldpZHRoLCB4cG9zKTsKKyAgICBJbnRTaXplIHJ1blNpemUgPSBoYWNr
aXNoRXh0ZW50Rm9yU3RyaW5nKGRjLCBmb250LCBydW4sIHRhYldpZHRoLCB4cG9zKTsKICAgICBS
ZWxlYXNlREMoMCwgZGMpOwogICAgIHJldHVybiBJbnRSZWN0KHBvaW50LCBydW5TaXplKTsKIH0K
IAotaW50IEZvbnQ6OmNoZWNrU2VsZWN0aW9uUG9pbnQoY29uc3QgVUNoYXIqIHN0ciwgaW50IHNs
ZW4sIGludCBvZmZzZXQsIGludCBsZW4sIGludCB0b0FkZCwgaW50IHRhYldpZHRoLCBpbnQgeHBv
cywgaW50IHgsCitpbnQgRm9udDo6Y2hlY2tTZWxlY3Rpb25Qb2ludChjb25zdCBUZXh0UnVuJiBy
dW4sIGludCB0b0FkZCwgaW50IHRhYldpZHRoLCBpbnQgeHBvcywgaW50IHgsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBUZXh0RGlyZWN0aW9uLCBib29sIHZpc3VhbGx5T3JkZXJlZCwg
Ym9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3QKIHsKICAgICBGb250RGF0YSogZm9udCA9
IG1fZm9udExpc3QtPnByaW1hcnlGb250KGZvbnREZXNjcmlwdGlvbigpKTsKQEAgLTI4NiwxMiAr
MjYzLDEyIEBACiAgICAgbWVtc2V0KCZyZXN1bHRzLCAwLCBzaXplb2YoR0NQX1JFU1VMVFMpKTsK
ICAgICByZXN1bHRzLmxTdHJ1Y3RTaXplID0gc2l6ZW9mKEdDUF9SRVNVTFRTKTsKICAgICByZXN1
bHRzLmxwQ2FyZXRQb3MgPSBjYXJldFBvc2l0aW9uczsKLSAgICByZXN1bHRzLm5HbHlwaHMgPSBs
ZW47CisgICAgcmVzdWx0cy5uR2x5cGhzID0gcnVuLmxlbmd0aCgpOwogICAgIAotICAgIEdldENo
YXJhY3RlclBsYWNlbWVudChkYywgKExQQ1RTVFIpKHN0citvZmZzZXQpLCBsZW4sIDAsICZyZXN1
bHRzLCAwKTsKKyAgICBHZXRDaGFyYWN0ZXJQbGFjZW1lbnQoZGMsIChMUENUU1RSKShydW4uY2hh
cmFjdGVycygpKSwgcnVuLmxlbmd0aCgpLCAwLCAmcmVzdWx0cywgMCk7CiAKICAgICB1bnNpZ25l
ZCBzZWxlY3Rpb25PZmZzZXQgPSAwOwotICAgIHdoaWxlIChzZWxlY3Rpb25PZmZzZXQgPCBsZW4g
JiYgY2FyZXRQb3NpdGlvbnNbc2VsZWN0aW9uT2Zmc2V0XSA8IHgpCisgICAgd2hpbGUgKHNlbGVj
dGlvbk9mZnNldCA8IHJ1bi5sZW5ndGgoKSAmJiBjYXJldFBvc2l0aW9uc1tzZWxlY3Rpb25PZmZz
ZXRdIDwgeCkKICAgICAgICAgc2VsZWN0aW9uT2Zmc2V0Kys7CiAKICAgICBmYXN0RnJlZShjYXJl
dFBvc2l0aW9ucyk7CkluZGV4OiBwbGF0Zm9ybS9Gb250LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0
Zm9ybS9Gb250LmNwcAkocmV2aXNpb24gMTQyOTIpCisrKyBwbGF0Zm9ybS9Gb250LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQAogfTsKIAogc3RydWN0IFdpZHRoSXRlcmF0b3Ig
ewotICAgIFdpZHRoSXRlcmF0b3IoY29uc3QgRm9udCogZm9udCwgY29uc3QgVUNoYXIqIHN0ciwg
aW50IGZyb20sIGludCB0bywgaW50IGxlbiwKKyAgICBXaWR0aEl0ZXJhdG9yKGNvbnN0IEZvbnQq
IGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwKICAgICAgICAgICAgICAgICAgIGludCB0YWJXaWR0
aCwgaW50IHhwb3MsIGludCB0b0FkZCwgVGV4dERpcmVjdGlvbiBkaXIsIGJvb2wgdmlzdWFsbHlP
cmRlcmVkLAogICAgICAgICAgICAgICAgICAgYm9vbCBhcHBseVdvcmRSb3VuZGluZywgYm9vbCBh
cHBseVJ1blJvdW5kaW5nLCBjb25zdCBGb250RGF0YSogc3Vic3RpdHV0ZUZvbnREYXRhKTsKIApA
QCAtNjQsMTAgKzY0LDkgQEAKIAogICAgIGNvbnN0IEZvbnQqIG1fZm9udDsKIAotICAgIGNvbnN0
IFVDaGFyKiBtX2NoYXJhY3RlcnM7Ci0gICAgaW50IG1fZnJvbTsKLSAgICBpbnQgbV90bzsKLSAg
ICBpbnQgbV9sZW47CisgICAgY29uc3QgVGV4dFJ1biYgbV9ydW47CisgICAgaW50IG1fZW5kOwor
CiAgICAgaW50IG1fdGFiV2lkdGg7CiAgICAgaW50IG1feFBvczsKICAgICBpbnQgbV90b0FkZDsK
QEAgLTg4LDEzICs4NywxMyBAQAogICAgIFVDaGFyMzIgbm9ybWFsaXplVm9pY2luZ01hcmtzKCk7
CiB9OwogCi1XaWR0aEl0ZXJhdG9yOjpXaWR0aEl0ZXJhdG9yKGNvbnN0IEZvbnQqIGZvbnQsIGNv
bnN0IFVDaGFyKiBzdHIsIGludCBmcm9tLCBpbnQgdG8sIGludCBsZW4sCitXaWR0aEl0ZXJhdG9y
OjpXaWR0aEl0ZXJhdG9yKGNvbnN0IEZvbnQqIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRhYldpZHRoLCBpbnQgeHBvcywgaW50IHRv
QWRkLCBUZXh0RGlyZWN0aW9uIGRpciwgYm9vbCB2aXN1YWxseU9yZGVyZWQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgYXBwbHlXb3JkUm91bmRpbmcsIGJvb2wgYXBwbHlSdW5S
b3VuZGluZywgY29uc3QgRm9udERhdGEqIHN1YnN0aXR1dGVGb250RGF0YSkKLTptX2ZvbnQoZm9u
dCksIG1fY2hhcmFjdGVycygoY29uc3QgVUNoYXIqKXN0ciksIG1fZnJvbShmcm9tKSwgbV90byh0
byksIG1fbGVuKGxlbiksCis6bV9mb250KGZvbnQpLCBtX3J1bihydW4pLCBtX2VuZChkaXIgPT0g
TFRSID8gcnVuLnRvKCkgOiBydW4ubGVuZ3RoKCkpLAogIG1fdGFiV2lkdGgodGFiV2lkdGgpLCBt
X3hQb3MoeHBvcyksIG1fdG9BZGQodG9BZGQpLCBtX2RpcihkaXIpLCBtX3Zpc3VhbGx5T3JkZXJl
ZCh2aXN1YWxseU9yZGVyZWQpLAogIG1fYXBwbHlXb3JkUm91bmRpbmcoYXBwbHlXb3JkUm91bmRp
bmcpLCBtX2FwcGx5UnVuUm91bmRpbmcoYXBwbHlSdW5Sb3VuZGluZyksIG1fc3Vic3RpdHV0ZUZv
bnREYXRhKHN1YnN0aXR1dGVGb250RGF0YSksCi0gbV9jdXJyZW50Q2hhcmFjdGVyKGZyb20pLCBt
X3J1bldpZHRoU29GYXIoMCksIG1fZmluYWxSb3VuZGluZ1dpZHRoKDApCisgbV9jdXJyZW50Q2hh
cmFjdGVyKHJ1bi5mcm9tKCkpLCBtX3J1bldpZHRoU29GYXIoMCksIG1fZmluYWxSb3VuZGluZ1dp
ZHRoKDApCiB7CiAgICAgLy8gSWYgdGhlIHBhZGRpbmcgaXMgbm9uLXplcm8sIGNvdW50IHRoZSBu
dW1iZXIgb2Ygc3BhY2VzIGluIHRoZSBydW4KICAgICAvLyBhbmQgZGl2aWRlIHRoYXQgYnkgdGhl
IHBhZGRpbmcgZm9yIHBlciBzcGFjZSBhZGRpdGlvbi4KQEAgLTEwMyw4ICsxMDIsOCBAQAogICAg
ICAgICBtX3BhZFBlclNwYWNlID0gMDsKICAgICB9IGVsc2UgewogICAgICAgICBmbG9hdCBudW1T
cGFjZXMgPSAwOwotICAgICAgICBmb3IgKGludCBpID0gZnJvbTsgaSA8IHRvOyBpKyspCi0gICAg
ICAgICAgICBpZiAoRm9udDo6dHJlYXRBc1NwYWNlKG1fY2hhcmFjdGVyc1tpXSkpCisgICAgICAg
IGZvciAoaW50IGkgPSBydW4uZnJvbSgpOyBpIDwgbV9lbmQ7IGkrKykKKyAgICAgICAgICAgIGlm
IChGb250Ojp0cmVhdEFzU3BhY2UobV9ydW5baV0pKQogICAgICAgICAgICAgICAgIG51bVNwYWNl
cysrOwogCiAgICAgICAgIG1fcGFkZGluZyA9IHRvQWRkOwpAQCAtMTE0LDIzICsxMTMsMjQgQEAK
ICAgICAvLyBDYWxjdWxhdGUgd2lkdGggdXAgdG8gc3RhcnRpbmcgcG9zaXRpb24gb2YgdGhlIHJ1
bi4gIFRoaXMgaXMKICAgICAvLyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoYXQgb3VyIHJvdW5kaW5n
IGhhY2tzIGFyZSBhbHdheXMgY29uc2lzdGVudGx5CiAgICAgLy8gYXBwbGllZC4KLSAgICBpZiAo
bV9mcm9tID09IDApCisgICAgaWYgKHJ1bi5mcm9tKCkgPT0gMCkKICAgICAgICAgbV93aWR0aFRv
U3RhcnQgPSAwOwogICAgIGVsc2UgewotICAgICAgICBXaWR0aEl0ZXJhdG9yIHN0YXJ0UG9zaXRp
b25JdGVyYXRvcihmb250LCBzdHIsIDAsIGxlbiwgbGVuLCB0YWJXaWR0aCwgeHBvcywgdG9BZGQs
IGRpciwgdmlzdWFsbHlPcmRlcmVkLAorICAgICAgICBUZXh0UnVuIGNvbXBsZXRlUnVuKHJ1bi5j
aGFyYWN0ZXJzKCksIHJ1bi5sZW5ndGgoKSk7CisgICAgICAgIFdpZHRoSXRlcmF0b3Igc3RhcnRQ
b3NpdGlvbkl0ZXJhdG9yKGZvbnQsIGNvbXBsZXRlUnVuLCB0YWJXaWR0aCwgeHBvcywgdG9BZGQs
IGRpciwgdmlzdWFsbHlPcmRlcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhcHBseVdvcmRSb3VuZGluZywgYXBwbHlSdW5Sb3VuZGluZywgc3Vic3RpdHV0
ZUZvbnREYXRhKTsKLSAgICAgICAgc3RhcnRQb3NpdGlvbkl0ZXJhdG9yLmFkdmFuY2UoZnJvbSk7
CisgICAgICAgIHN0YXJ0UG9zaXRpb25JdGVyYXRvci5hZHZhbmNlKHJ1bi5mcm9tKCkpOwogICAg
ICAgICBtX3dpZHRoVG9TdGFydCA9IHN0YXJ0UG9zaXRpb25JdGVyYXRvci5tX3J1bldpZHRoU29G
YXI7CiAgICAgfQogfQogCiB2b2lkIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2UoaW50IG9mZnNldCwg
R2x5cGhCdWZmZXIqIGdseXBoQnVmZmVyKQogewotICAgIGlmIChvZmZzZXQgPiBtX3RvKQotICAg
ICAgICBvZmZzZXQgPSBtX3RvOworICAgIGlmIChvZmZzZXQgPiBtX2VuZCkKKyAgICAgICAgb2Zm
c2V0ID0gbV9lbmQ7CiAKICAgICBpbnQgY3VycmVudENoYXJhY3RlciA9IG1fY3VycmVudENoYXJh
Y3RlcjsKLSAgICBjb25zdCBVQ2hhciogY3AgPSAmbV9jaGFyYWN0ZXJzW2N1cnJlbnRDaGFyYWN0
ZXJdOworICAgIGNvbnN0IFVDaGFyKiBjcCA9IG1fcnVuLmRhdGEoY3VycmVudENoYXJhY3Rlcik7
CiAKICAgICBib29sIHJ0bCA9IChtX2RpciA9PSBSVEwpOwogICAgIGJvb2wgbmVlZENoYXJUcmFu
c2Zvcm0gPSBydGwgfHwgbV9mb250LT5pc1NtYWxsQ2FwcygpOwpAQCAtMTYxLDcgKzE2MSw3IEBA
CiAgICAgICAgICAgICAgICAgLy8gRG8gd2UgaGF2ZSBhIHN1cnJvZ2F0ZSBwYWlyPyAgSWYgc28s
IGRldGVybWluZSB0aGUgZnVsbCBVbmljb2RlICgzMiBiaXQpCiAgICAgICAgICAgICAgICAgLy8g
Y29kZSBwb2ludCBiZWZvcmUgZ2x5cGggbG9va3VwLgogICAgICAgICAgICAgICAgIC8vIE1ha2Ug
c3VyZSB3ZSBoYXZlIGFub3RoZXIgY2hhcmFjdGVyIGFuZCBpdCdzIGEgbG93IHN1cnJvZ2F0ZS4K
LSAgICAgICAgICAgICAgICBpZiAoY3VycmVudENoYXJhY3RlciArIDEgPj0gbV9sZW4pCisgICAg
ICAgICAgICAgICAgaWYgKGN1cnJlbnRDaGFyYWN0ZXIgKyAxID49IG1fcnVuLmxlbmd0aCgpKQog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBVbmlDaGFyIGxvdyA9
IGNwWzFdOwogICAgICAgICAgICAgICAgIGlmICghVTE2X0lTX1RSQUlMKGxvdykpCkBAIC0xOTcs
NyArMTk3LDcgQEAKICAgICAgICAgICAgIGNvbnN0IEZvbnREYXRhKiBzdWJzdGl0dXRlRm9udERh
dGEgPSBmb250RGF0YS0+ZmluZFN1YnN0aXR1dGVGb250RGF0YShjcCwgY2x1c3Rlckxlbmd0aCwg
bV9mb250LT5mb250RGVzY3JpcHRpb24oKSk7CiAgICAgICAgICAgICBpZiAoc3Vic3RpdHV0ZUZv
bnREYXRhKSB7CiAgICAgICAgICAgICAgICAgR2x5cGhCdWZmZXIgbG9jYWxHbHlwaEJ1ZmZlcjsK
LSAgICAgICAgICAgICAgICBtX2ZvbnQtPmZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KChVQ2hhciop
Y3AsIGNsdXN0ZXJMZW5ndGgsIDAsIGNsdXN0ZXJMZW5ndGgsIDAsIDAsIDAsIG1fZGlyLCBtX3Zp
c3VhbGx5T3JkZXJlZCwgCisgICAgICAgICAgICAgICAgbV9mb250LT5mbG9hdFdpZHRoRm9yU2lt
cGxlVGV4dChUZXh0UnVuKChVQ2hhciopY3AsIGNsdXN0ZXJMZW5ndGgpLCAwLCAwLCAwLCBtX2Rp
ciwgbV92aXN1YWxseU9yZGVyZWQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fYXBwbHlXb3JkUm91bmRpbmcsIGZhbHNlLCBzdWJzdGl0dXRlRm9u
dERhdGEsIDAsICZsb2NhbEdseXBoQnVmZmVyKTsKICAgICAgICAgICAgICAgICBpZiAobG9jYWxH
bHlwaEJ1ZmZlci5zaXplKCkgPT0gMSkgewogICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3Vi
c3RpdHV0ZUZvbnREYXRhID09IGxvY2FsR2x5cGhCdWZmZXIuZm9udERhdGFBdCgwKSk7CkBAIC0y
NjYsOCArMjY2LDggQEAKIAogICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIG5leHQgY2hh
cmFjdGVyIGlzIGEgInJvdW5kaW5nIGhhY2sgY2hhcmFjdGVyIiwgaWYgc28sIGFkanVzdAogICAg
ICAgICAvLyB3aWR0aCBzbyB0aGF0IHRoZSB0b3RhbCBydW4gd2lkdGggd2lsbCBiZSBvbiBhbiBp
bnRlZ2VyIGJvdW5kYXJ5LgotICAgICAgICBpZiAoKG1fYXBwbHlXb3JkUm91bmRpbmcgJiYgY3Vy
cmVudENoYXJhY3RlciA8IG1fbGVuICYmIEZvbnQ6OmlzUm91bmRpbmdIYWNrQ2hhcmFjdGVyKCpj
cCkpCi0gICAgICAgICAgICAgICAgfHwgKG1fYXBwbHlSdW5Sb3VuZGluZyAmJiBjdXJyZW50Q2hh
cmFjdGVyID49IG1fdG8pKSB7CisgICAgICAgIGlmICgobV9hcHBseVdvcmRSb3VuZGluZyAmJiBj
dXJyZW50Q2hhcmFjdGVyIDwgbV9ydW4ubGVuZ3RoKCkgJiYgRm9udDo6aXNSb3VuZGluZ0hhY2tD
aGFyYWN0ZXIoKmNwKSkKKyAgICAgICAgICAgICAgICB8fCAobV9hcHBseVJ1blJvdW5kaW5nICYm
IGN1cnJlbnRDaGFyYWN0ZXIgPj0gbV9lbmQpKSB7CiAgICAgICAgICAgICBmbG9hdCB0b3RhbFdp
ZHRoID0gbV93aWR0aFRvU3RhcnQgKyBydW5XaWR0aFNvRmFyICsgd2lkdGg7CiAgICAgICAgICAg
ICB3aWR0aCArPSBjZWlsZih0b3RhbFdpZHRoKSAtIHRvdGFsV2lkdGg7CiAgICAgICAgIH0KQEAg
LTI4OCwxMiArMjg4LDEyIEBACiBVQ2hhcjMyIFdpZHRoSXRlcmF0b3I6Om5vcm1hbGl6ZVZvaWNp
bmdNYXJrcygpCiB7CiAgICAgaW50IGN1cnJlbnRDaGFyYWN0ZXIgPSBtX2N1cnJlbnRDaGFyYWN0
ZXI7Ci0gICAgaWYgKGN1cnJlbnRDaGFyYWN0ZXIgKyAxIDwgbV90bykgewotICAgICAgICBpZiAo
dV9nZXRDb21iaW5pbmdDbGFzcyhtX2NoYXJhY3RlcnNbY3VycmVudENoYXJhY3RlciArIDFdKSA9
PSBISVJBR0FOQV9LQVRBS0FOQV9WT0lDSU5HX01BUktTKSB7CisgICAgaWYgKGN1cnJlbnRDaGFy
YWN0ZXIgKyAxIDwgbV9lbmQpIHsKKyAgICAgICAgaWYgKHVfZ2V0Q29tYmluaW5nQ2xhc3MobV9y
dW5bY3VycmVudENoYXJhY3RlciArIDFdKSA9PSBISVJBR0FOQV9LQVRBS0FOQV9WT0lDSU5HX01B
UktTKSB7CiAgICAgICAgICAgICAvLyBOb3JtYWxpemUgaW50byBjb21wb3NlZCBmb3JtIHVzaW5n
IDMuMiBydWxlcy4KICAgICAgICAgICAgIFVDaGFyIG5vcm1hbGl6ZWRDaGFyYWN0ZXJzWzJdID0g
eyAwLCAwIH07CiAgICAgICAgICAgICBVRXJyb3JDb2RlIHVTdGF0dXMgPSAoVUVycm9yQ29kZSkw
OyAgCi0gICAgICAgICAgICBpbnQzMl90IHJlc3VsdExlbmd0aCA9IHVub3JtX25vcm1hbGl6ZSgm
bV9jaGFyYWN0ZXJzW2N1cnJlbnRDaGFyYWN0ZXJdLCAyLAorICAgICAgICAgICAgaW50MzJfdCBy
ZXN1bHRMZW5ndGggPSB1bm9ybV9ub3JtYWxpemUobV9ydW4uZGF0YShjdXJyZW50Q2hhcmFjdGVy
KSwgMiwKICAgICAgICAgICAgICAgICBVTk9STV9ORkMsIFVOT1JNX1VOSUNPREVfM18yLCAmbm9y
bWFsaXplZENoYXJhY3RlcnNbMF0sIDIsICZ1U3RhdHVzKTsKICAgICAgICAgICAgIGlmIChyZXN1
bHRMZW5ndGggPT0gMSAmJiB1U3RhdHVzID09IDApCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5v
cm1hbGl6ZWRDaGFyYWN0ZXJzWzBdOwpAQCAtMzU2LDEzICszNTYsMTMgQEAKICAgICBtX2ZvbnRM
aXN0LT5pbnZhbGlkYXRlKCk7CiB9CiAKLWludCBGb250Ojp3aWR0aChjb25zdCBVQ2hhciogY2hz
LCBpbnQgc2xlbiwgaW50IHBvcywgaW50IGxlbiwgaW50IHRhYldpZHRoLCBpbnQgeHBvcykgY29u
c3QKK2ludCBGb250Ojp3aWR0aChjb25zdCBUZXh0UnVuJiBydW4sIGludCB0YWJXaWR0aCwgaW50
IHhwb3MpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IFdhbnQgdG8gZGVmaW5lIGFuIGxyb3VuZGYg
Zm9yIHdpbjMyLgogI2lmIF9fQVBQTEVfXwotICAgIHJldHVybiBscm91bmRmKGZsb2F0V2lkdGgo
Y2hzICsgcG9zLCBzbGVuIC0gcG9zLCAwLCBsZW4sIHRhYldpZHRoLCB4cG9zKSk7CisgICAgcmV0
dXJuIGxyb3VuZGYoZmxvYXRXaWR0aChydW4sIHRhYldpZHRoLCB4cG9zKSk7CiAjZWxzZQotICAg
IHJldHVybiBmbG9hdFdpZHRoKGNocyArIHBvcywgc2xlbiAtIHBvcywgMCwgbGVuLCB0YWJXaWR0
aCwgeHBvcykgKyAwLjVmOworICAgIHJldHVybiBmbG9hdFdpZHRoKHJ1biwgdGFiV2lkdGgsIHhw
b3MpICsgMC41ZjsKICNlbmRpZgogfQogCkBAIC00MDQsMTQgKzQwNCwxNCBAQAogICAgIGdBbHdh
eXNVc2VDb21wbGV4UGF0aCA9IGFsd2F5c1VzZTsKIH0KIAotYm9vbCBGb250OjpjYW5Vc2VHbHlw
aENhY2hlKGNvbnN0IFVDaGFyKiBzdHIsIGludCB0bykgY29uc3QKK2Jvb2wgRm9udDo6Y2FuVXNl
R2x5cGhDYWNoZShjb25zdCBUZXh0UnVuJiBydW4pIGNvbnN0CiB7CiAgICAgaWYgKGdBbHdheXNV
c2VDb21wbGV4UGF0aCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIC8vIFN0YXJ0
IGZyb20gMCBzaW5jZSBkcmF3aW5nIGFuZCBoaWdobGlnaHRpbmcgYWxzbyBtZWFzdXJlIHRoZSBj
aGFyYWN0ZXJzIGJlZm9yZSBydW4tPmZyb20KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHRvOyBp
KyspIHsKLSAgICAgICAgVUNoYXIgYyA9IHN0cltpXTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8
IHJ1bi50bygpOyBpKyspIHsKKyAgICAgICAgY29uc3QgVUNoYXIgYyA9IHJ1bltpXTsKICAgICAg
ICAgaWYgKGMgPCAweDMwMCkgICAgICAvLyBVKzAzMDAgdGhyb3VnaCBVKzAzNkYgQ29tYmluaW5n
IGRpYWNyaXRpY2FsIG1hcmtzCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKGMg
PD0gMHgzNkYpCkBAIC00NTcsNyArNDU3LDcgQEAKIAogfQogCi12b2lkIEZvbnQ6OmRyYXdTaW1w
bGVUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UG9pbnQmIHBvaW50LCBp
bnQgdGFiV2lkdGgsIGludCB4cG9zLCBjb25zdCBVQ2hhciogc3RyLCBpbnQgbGVuLCBpbnQgZnJv
bSwgaW50IHRvLAordm9pZCBGb250OjpkcmF3U2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgSW50UG9pbnQmIHBvaW50LCBpbnQgdGFi
V2lkdGgsIGludCB4cG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdG9BZGQsIFRl
eHREaXJlY3Rpb24gZGlyLCBib29sIHZpc3VhbGx5T3JkZXJlZCkgY29uc3QKIHsKICAgICAvLyBU
aGlzIGdseXBoIGJ1ZmZlciBob2xkcyBvdXIgZ2x5cGhzK2FkdmFuY2VzK2ZvbnQgZGF0YSBmb3Ig
ZWFjaCBnbHlwaC4KQEAgLTQ2NSw3ICs0NjUsNyBAQAogCiAgICAgLy8gT3VyIG1lYXN1cmluZyBj
b2RlIHdpbGwgZ2VuZXJhdGUgZ2x5cGhzIGFuZCBhZHZhbmNlcyBmb3IgdXMuCiAgICAgZmxvYXQg
c3RhcnRYOwotICAgIGZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KHN0ciwgbGVuLCBmcm9tLCB0bywg
dGFiV2lkdGgsIHhwb3MsIHRvQWRkLCBkaXIsIHZpc3VhbGx5T3JkZXJlZCwgCisgICAgZmxvYXRX
aWR0aEZvclNpbXBsZVRleHQocnVuLCB0YWJXaWR0aCwgeHBvcywgdG9BZGQsIGRpciwgdmlzdWFs
bHlPcmRlcmVkLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCB0cnVlLCAwLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdGFydFgsICZnbHlwaEJ1ZmZlcik7CiAgICAg
CkBAIC01MDIsNDggKzUwMiw0MCBAQAogICAgIGRyYXdHbHlwaHMoY29udGV4dCwgZm9udERhdGEs
IGdseXBoQnVmZmVyLCBsYXN0RnJvbSwgbmV4dEdseXBoIC0gbGFzdEZyb20sIHN0YXJ0UG9pbnQp
OwogfQogCi12b2lkIEZvbnQ6OmRyYXdUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgSW50UG9pbnQmIHBvaW50LCBpbnQgdGFiV2lkdGgsIGludCB4cG9zLCBjb25zdCBVQ2hhciog
c3RyLCBpbnQgbGVuLCBpbnQgZnJvbSwgaW50IHRvLAordm9pZCBGb250OjpkcmF3VGV4dChHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgSW50UG9pbnQm
IHBvaW50LCBpbnQgdGFiV2lkdGgsIGludCB4cG9zLAogICAgICAgICAgICAgICAgICAgICBpbnQg
dG9BZGQsIFRleHREaXJlY3Rpb24gZCwgYm9vbCB2aXN1YWxseU9yZGVyZWQpIGNvbnN0CiB7Ci0g
ICAgaWYgKGxlbiA9PSAwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoZnJvbSA8IDApCi0g
ICAgICAgIGZyb20gPSAwOwotICAgIGlmICh0byA8IDApCi0gICAgICAgIHRvID0gbGVuOwotCi0g
ICAgaWYgKGNhblVzZUdseXBoQ2FjaGUoc3RyLCB0bykpCi0gICAgICAgIGRyYXdTaW1wbGVUZXh0
KGNvbnRleHQsIHBvaW50LCB0YWJXaWR0aCwgeHBvcywgc3RyLCBsZW4sIGZyb20sIHRvLCB0b0Fk
ZCwgZCwgdmlzdWFsbHlPcmRlcmVkKTsKKyAgICBpZiAoY2FuVXNlR2x5cGhDYWNoZShydW4pKQor
ICAgICAgICBkcmF3U2ltcGxlVGV4dChjb250ZXh0LCBydW4sIHBvaW50LCB0YWJXaWR0aCwgeHBv
cywgdG9BZGQsIGQsIHZpc3VhbGx5T3JkZXJlZCk7CiAgICAgZWxzZQotICAgICAgICBkcmF3Q29t
cGxleFRleHQoY29udGV4dCwgcG9pbnQsIHRhYldpZHRoLCB4cG9zLCBzdHIsIGxlbiwgZnJvbSwg
dG8sIHRvQWRkLCBkLCB2aXN1YWxseU9yZGVyZWQpOworICAgICAgICBkcmF3Q29tcGxleFRleHQo
Y29udGV4dCwgcnVuLCBwb2ludCwgdGFiV2lkdGgsIHhwb3MsIHRvQWRkLCBkLCB2aXN1YWxseU9y
ZGVyZWQpOwogfQogCi1mbG9hdCBGb250OjpmbG9hdFdpZHRoKGNvbnN0IFVDaGFyKiBzdHIsIGlu
dCBzbGVuLCBpbnQgZnJvbSwgaW50IGxlbiwgaW50IHRhYldpZHRoLCBpbnQgeHBvcywgYm9vbCBy
dW5Sb3VuZGluZykgY29uc3QKK2Zsb2F0IEZvbnQ6OmZsb2F0V2lkdGgoY29uc3QgVGV4dFJ1biYg
cnVuLCBpbnQgdGFiV2lkdGgsIGludCB4cG9zLCBib29sIHJ1blJvdW5kaW5nKSBjb25zdAogewot
ICAgIGludCB0byA9IGZyb20gKyBsZW47Ci0gICAgaWYgKGNhblVzZUdseXBoQ2FjaGUoc3RyLCB0
bykpCi0gICAgICAgIHJldHVybiBmbG9hdFdpZHRoRm9yU2ltcGxlVGV4dChzdHIsIHNsZW4sIGZy
b20sIHRvLCB0YWJXaWR0aCwgeHBvcywgMCwgTFRSLCBmYWxzZSwgdHJ1ZSwgcnVuUm91bmRpbmcs
IDAsIDAsIDApOworICAgIGlmIChjYW5Vc2VHbHlwaENhY2hlKHJ1bikpCisgICAgICAgIHJldHVy
biBmbG9hdFdpZHRoRm9yU2ltcGxlVGV4dChydW4sIHRhYldpZHRoLCB4cG9zLCAwLCBMVFIsIGZh
bHNlLCB0cnVlLCBydW5Sb3VuZGluZywgMCwgMCwgMCk7CiAgICAgZWxzZQotICAgICAgICByZXR1
cm4gZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KHN0ciwgc2xlbiwgZnJvbSwgdG8sIHRhYldpZHRo
LCB4cG9zLCBydW5Sb3VuZGluZyk7CisgICAgICAgIHJldHVybiBmbG9hdFdpZHRoRm9yQ29tcGxl
eFRleHQocnVuLCB0YWJXaWR0aCwgeHBvcywgcnVuUm91bmRpbmcpOwogfQogCi1mbG9hdCBGb250
OjpmbG9hdFdpZHRoRm9yU2ltcGxlVGV4dChjb25zdCBVQ2hhciogc3RyLCBpbnQgbGVuLCBpbnQg
ZnJvbSwgaW50IHRvLCBpbnQgdGFiV2lkdGgsIGludCB4cG9zLCBpbnQgdG9BZGQsIAorZmxvYXQg
Rm9udDo6ZmxvYXRXaWR0aEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBpbnQgdGFi
V2lkdGgsIGludCB4cG9zLCBpbnQgdG9BZGQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVGV4dERpcmVjdGlvbiBkaXIsIGJvb2wgdmlzdWFsbHlPcmRlcmVkLCAKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXBwbHlXb3JkUm91bmRpbmcsIGJv
b2wgYXBwbHlSdW5Sb3VuZGluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEZvbnREYXRhKiBzdWJzdGl0dXRlRm9udCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZsb2F0KiBzdGFydFBvc2l0aW9uLCBHbHlwaEJ1ZmZlciogZ2x5cGhCdWZm
ZXIpIGNvbnN0CiB7Ci0gICAgV2lkdGhJdGVyYXRvciBpdCh0aGlzLCBzdHIsIGZyb20sIGRpciA9
PSBMVFIgPyB0byA6IGxlbiwgbGVuLCB0YWJXaWR0aCwgeHBvcywgdG9BZGQsIGRpciwgdmlzdWFs
bHlPcmRlcmVkLCAKKyAgICAKKyAgICBXaWR0aEl0ZXJhdG9yIGl0KHRoaXMsIHJ1biwgdGFiV2lk
dGgsIHhwb3MsIHRvQWRkLCBkaXIsIHZpc3VhbGx5T3JkZXJlZCwgCiAgICAgICAgICAgICAgICAg
ICAgICBhcHBseVdvcmRSb3VuZGluZywgYXBwbHlSdW5Sb3VuZGluZywgc3Vic3RpdHV0ZUZvbnQp
OwotICAgIGl0LmFkdmFuY2UodG8sIGdseXBoQnVmZmVyKTsKKyAgICBpdC5hZHZhbmNlKHJ1bi50
bygpLCBnbHlwaEJ1ZmZlcik7CiAgICAgZmxvYXQgcnVuV2lkdGggPSBpdC5tX3J1bldpZHRoU29G
YXI7CiAgICAgaWYgKHN0YXJ0UG9zaXRpb24pIHsKICAgICAgICAgaWYgKGRpciA9PSBMVFIpCiAg
ICAgICAgICAgICAqc3RhcnRQb3NpdGlvbiA9IGl0Lm1fd2lkdGhUb1N0YXJ0OwogICAgICAgICBl
bHNlIHsKICAgICAgICAgICAgIGZsb2F0IGZpbmFsUm91bmRpbmdXaWR0aCA9IGl0Lm1fZmluYWxS
b3VuZGluZ1dpZHRoOwotICAgICAgICAgICAgaXQuYWR2YW5jZShsZW4pOworICAgICAgICAgICAg
aXQuYWR2YW5jZShydW4ubGVuZ3RoKCkpOwogICAgICAgICAgICAgKnN0YXJ0UG9zaXRpb24gPSBp
dC5tX3J1bldpZHRoU29GYXIgLSBydW5XaWR0aCArIGZpbmFsUm91bmRpbmdXaWR0aDsKICAgICAg
ICAgfQogICAgIH0KSW5kZXg6IHBsYXRmb3JtL0ZvbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9y
bS9Gb250LmgJKHJldmlzaW9uIDE0MjkyKQorKysgcGxhdGZvcm0vRm9udC5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Niw2ICs0NiwzOSBAQAogCiBlbnVtIFBpdGNoIHsgVW5rbm93blBpdGNoLCBGaXhl
ZFBpdGNoLCBWYXJpYWJsZVBpdGNoIH07CiAKK2NsYXNzIFRleHRSdW4KK3sKK3B1YmxpYzoKKyAg
ICBUZXh0UnVuKGNvbnN0IFVDaGFyKiBjLCBpbnQgbGVuKQorICAgIDptX2NoYXJhY3RlcnMoYyks
IG1fbGVuKGxlbiksIG1fZnJvbSgwKSwgbV90byhsZW4pCisgICAge30KKworICAgIFRleHRSdW4o
Y29uc3QgVUNoYXIqIGMsIGludCBsZW4sIGludCBmcm9tLCBpbnQgdG8pIC8vIFRoaXMgY29uc3Ry
dWN0b3IgaXMgb25seSB1c2VkIGluIG9uZSBwbGFjZSBpbiBNYWMtc3BlY2lmaWMgY29kZS4KKyAg
ICA6bV9jaGFyYWN0ZXJzKGMpLCBtX2xlbihsZW4pLCBtX2Zyb20oZnJvbSksIG1fdG8odG8pCisg
ICAge30KKworICAgIFRleHRSdW4oY29uc3QgU3RyaW5nSW1wbCogcywgaW50IG9mZnNldCA9IDAs
IGludCBmcm9tID0gLTEsIGludCB0byA9IC0xKQorICAgIDptX2NoYXJhY3RlcnMocy0+Y2hhcmFj
dGVycygpICsgb2Zmc2V0KSwgbV9sZW4ocy0+bGVuZ3RoKCkgLSBvZmZzZXQpLCBtX2Zyb20oYWRq
dXN0RnJvbShmcm9tKSksIG1fdG8oYWRqdXN0VG8odG8pKQorICAgIHt9CisKKyAgICBjb25zdCBV
Q2hhciBvcGVyYXRvcltdKGludCBpKSBjb25zdCB7IHJldHVybiBtX2NoYXJhY3RlcnNbaV07IH0K
KyAgICBjb25zdCBVQ2hhciogZGF0YShpbnQgaSkgY29uc3QgeyByZXR1cm4gJm1fY2hhcmFjdGVy
c1tpXTsgfQorCisgICAgaW50IGFkanVzdEZyb20oaW50IGZyb20pIGNvbnN0IHsgcmV0dXJuIGZy
b20gPT0gLTEgPyAwIDogZnJvbTsgfQorICAgIGludCBhZGp1c3RUbyhpbnQgdG8pIGNvbnN0IHsg
cmV0dXJuIHRvID09IC0xID8gbV9sZW4gOiB0bzsgfQorCisgICAgY29uc3QgVUNoYXIqIGNoYXJh
Y3RlcnMoKSBjb25zdCB7IHJldHVybiBtX2NoYXJhY3RlcnM7IH0KKyAgICBpbnQgbGVuZ3RoKCkg
Y29uc3QgeyByZXR1cm4gbV9sZW47IH0KKyAgICBpbnQgZnJvbSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZnJvbTsgfQorICAgIGludCB0bygpIGNvbnN0IHsgcmV0dXJuIG1fdG87IH0KKworcHJpdmF0ZToK
KyAgICBjb25zdCBVQ2hhciogbV9jaGFyYWN0ZXJzOworICAgIGludCBtX2xlbjsKKyAgICBpbnQg
bV9mcm9tOworICAgIGludCBtX3RvOworfTsKKwogY2xhc3MgRm9udCB7CiBwdWJsaWM6CiAgICAg
Rm9udCgpOwpAQCAtNzQsMjYgKzEwNywyMyBAQAogICAgIAogICAgIHZvaWQgdXBkYXRlKCkgY29u
c3Q7CiAKLSAgICB2b2lkIGRyYXdUZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFBvaW50
JiwgaW50IHRhYldpZHRoLCBpbnQgeHBvcywKLSAgICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFy
KiwgaW50IGxlbiwgaW50IGZyb20sIGludCB0bywgaW50IHRvQWRkLCAKLSAgICAgICAgICAgICAg
ICAgIFRleHREaXJlY3Rpb24sIGJvb2wgdmlzdWFsbHlPcmRlcmVkKSBjb25zdDsKLSAgICB2b2lk
IGRyYXdIaWdobGlnaHRGb3JUZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFBvaW50Jiwg
aW50IGgsIGludCB0YWJXaWR0aCwgaW50IHhwb3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBVQ2hhciosIGludCBsZW4sIGludCBmcm9tLCBpbnQgdG8sIGludCB0b0FkZCwg
CisgICAgdm9pZCBkcmF3VGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29u
c3QgSW50UG9pbnQmLCBpbnQgdGFiV2lkdGgsIGludCB4cG9zLAorICAgICAgICAgICAgICAgICAg
aW50IHRvQWRkLCBUZXh0RGlyZWN0aW9uLCBib29sIHZpc3VhbGx5T3JkZXJlZCkgY29uc3Q7Cisg
ICAgdm9pZCBkcmF3SGlnaGxpZ2h0Rm9yVGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0
UnVuJiwgY29uc3QgSW50UG9pbnQmLCBpbnQgaCwgCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgdGFiV2lkdGgsIGludCB4cG9zLCBpbnQgdG9BZGQsIAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVGV4dERpcmVjdGlvbiBkLCBib29sIHZpc3VhbGx5T3JkZXJlZCwgY29u
c3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikgY29uc3Q7CiAgICAgdm9pZCBkcmF3TGluZUZvclRl
eHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UG9pbnQmLCBpbnQgeU9mZnNldCwgaW50IHdp
ZHRoKSBjb25zdDsKICAgICB2b2lkIGRyYXdMaW5lRm9yTWlzc3BlbGxpbmcoR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgSW50UG9pbnQmLCBpbnQgd2lkdGgpIGNvbnN0OwogICAgIGludCBtaXNzcGVs
bGluZ0xpbmVUaGlja25lc3MoR3JhcGhpY3NDb250ZXh0KikgY29uc3Q7CiAKLSAgICBmbG9hdCBm
bG9hdFdpZHRoKGNvbnN0IFVDaGFyKiwgaW50IHNsZW4sIGludCBwb3MsIGludCBsZW4sIGludCB0
YWJXaWR0aCwgaW50IHhwb3MsIGJvb2wgcnVuUm91bmRpbmcgPSB0cnVlKSBjb25zdDsKKyAgICBm
bG9hdCBmbG9hdFdpZHRoKGNvbnN0IFRleHRSdW4mLCBpbnQgdGFiV2lkdGgsIGludCB4cG9zLCBi
b29sIHJ1blJvdW5kaW5nID0gdHJ1ZSkgY29uc3Q7CiAgICAgCi0gICAgaW50IGNoZWNrU2VsZWN0
aW9uUG9pbnQoY29uc3QgVUNoYXIqLCBpbnQgc2xlbiwgaW50IHBvcywgaW50IGxlbiwgaW50IHRv
QWRkLCBpbnQgdGFiV2lkdGgsIGludCB4cG9zLAorICAgIGludCBjaGVja1NlbGVjdGlvblBvaW50
KGNvbnN0IFRleHRSdW4mLCBpbnQgdG9BZGQsIGludCB0YWJXaWR0aCwgaW50IHhwb3MsCiAgICAg
ICAgIGludCB4LCBUZXh0RGlyZWN0aW9uLCBib29sIHZpc3VhbGx5T3JkZXJlZCwgYm9vbCBpbmNs
dWRlUGFydGlhbEdseXBocykgY29uc3Q7Ci0gICAgSW50UmVjdCBzZWxlY3Rpb25SZWN0Rm9yVGV4
dChjb25zdCBJbnRQb2ludCYsIGludCBoLCBpbnQgdGFiV2lkdGgsIGludCB4cG9zLCAKLSAgICAg
ICAgY29uc3QgVUNoYXIqLCBpbnQgc2xlbiwgaW50IHBvcywgaW50IGxlbiwgaW50IHdpZHRoLAot
ICAgICAgICBib29sIHJ0bCwgYm9vbCB2aXN1YWxseU9yZGVyZWQgPSBmYWxzZSwgaW50IGZyb20g
PSAtMSwgaW50IHRvID0gLTEpIGNvbnN0OworICAgIEludFJlY3Qgc2VsZWN0aW9uUmVjdEZvclRl
eHQoY29uc3QgVGV4dFJ1biYsIGNvbnN0IEludFBvaW50JiwgaW50IGgsIGludCB0YWJXaWR0aCwg
aW50IHhwb3MsIGludCB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgcnRsLCBib29sIHZpc3VhbGx5T3JkZXJlZCA9IGZhbHNlKSBjb25zdDsKICAgICAKLSAgICBp
bnQgd2lkdGgoY29uc3QgVUNoYXIqLCBpbnQgc2xlbiwgaW50IHBvcywgaW50IGxlbiwgaW50IHRh
YldpZHRoLCBpbnQgeHBvcykgY29uc3Q7Ci0gICAgaW50IHdpZHRoKGNvbnN0IFVDaGFyKiBjaHMs
IGludCBzbGVuLCBpbnQgdGFiV2lkdGggPSAwLCBpbnQgeHBvcyA9IDApIGNvbnN0IHsgcmV0dXJu
IHdpZHRoKGNocywgc2xlbiwgMCwgc2xlbiwgdGFiV2lkdGgsIHhwb3MpOyB9CisgICAgaW50IHdp
ZHRoKGNvbnN0IFRleHRSdW4mLCBpbnQgdGFiV2lkdGggPSAwLCBpbnQgeHBvcyA9IDApIGNvbnN0
OwogCiAgICAgYm9vbCBpc1NtYWxsQ2FwcygpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERlc2NyaXB0
aW9uLnNtYWxsQ2FwcygpOyB9CiAKQEAgLTEzMCwyMSArMTYwLDIwIEBACiBwcml2YXRlOgogI2lm
IF9fQVBQTEVfXwogICAgIC8vIEZJWE1FOiBUaGlzIHdpbGwgZXZlbnR1YWxseSBiZSBjcm9zcy1w
bGF0Zm9ybSwgYnV0IHdlIHdhbnQgdG8ga2VlcCBXaW5kb3dzIGNvbXBpbGluZyBmb3Igbm93Lgot
ICAgIGJvb2wgY2FuVXNlR2x5cGhDYWNoZShjb25zdCBVQ2hhciogc3RyLCBpbnQgdG8pIGNvbnN0
OwotICAgIHZvaWQgZHJhd1NpbXBsZVRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UG9p
bnQmLCBpbnQgdGFiV2lkdGgsIGludCB4cG9zLAotICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgVUNoYXIqLCBpbnQgbGVuLCBpbnQgZnJvbSwgaW50IHRvLCBpbnQgdG9BZGQsIAorICAgIGJv
b2wgY2FuVXNlR2x5cGhDYWNoZShjb25zdCBUZXh0UnVuJikgY29uc3Q7CisgICAgdm9pZCBkcmF3
U2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgSW50UG9p
bnQmLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCB0YWJXaWR0aCwgaW50IHhwb3MsIGlu
dCB0b0FkZCwgCiAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0RGlyZWN0aW9uLCBib29sIHZp
c3VhbGx5T3JkZXJlZCkgY29uc3Q7CiAgICAgdm9pZCBkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IEZvbnREYXRhKiwgY29uc3QgR2x5cGhCdWZmZXImLCBpbnQgZnJvbSwgaW50IHRv
LCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7Ci0gICAgdm9pZCBkcmF3Q29tcGxleFRleHQoR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgSW50UG9pbnQmLCBpbnQgdGFiV2lkdGgsIGludCB4cG9zLAot
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiwgaW50IGxlbiwgaW50IGZyb20s
IGludCB0bywgaW50IHRvQWRkLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0RGlyZWN0
aW9uLCBib29sIHZpc3VhbGx5T3JkZXJlZCkgY29uc3Q7Ci0gICAgZmxvYXQgZmxvYXRXaWR0aEZv
clNpbXBsZVRleHQoY29uc3QgVUNoYXIqLCBpbnQgbGVuLCBpbnQgZnJvbSwgaW50IHRvLCAKKyAg
ICB2b2lkIGRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwg
Y29uc3QgSW50UG9pbnQmLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGFiV2lkdGgs
IGludCB4cG9zLCBpbnQgdG9BZGQsIFRleHREaXJlY3Rpb24sIGJvb2wgdmlzdWFsbHlPcmRlcmVk
KSBjb25zdDsKKyAgICBmbG9hdCBmbG9hdFdpZHRoRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVu
JiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRhYldpZHRoLCBpbnQg
eHBvcywgaW50IHRvQWRkLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0
RGlyZWN0aW9uLCBib29sIHZpc3VhbGx5T3JkZXJlZCwgCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBhcHBseVdvcmRSb3VuZGluZywgYm9vbCBhcHBseVJ1blJvdW5kaW5n
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZvbnREYXRhKiBzdWJz
dGl0dXRlRm9udCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCogc3Rh
cnRYLCBHbHlwaEJ1ZmZlciopIGNvbnN0OwotICAgIGZsb2F0IGZsb2F0V2lkdGhGb3JDb21wbGV4
VGV4dChjb25zdCBVQ2hhciosIGludCBzbGVuLCBpbnQgcG9zLCBpbnQgbGVuLCBpbnQgdGFiV2lk
dGgsIGludCB4cG9zLCBib29sIHJ1blJvdW5kaW5nID0gdHJ1ZSkgY29uc3Q7CisgICAgZmxvYXQg
ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBpbnQgdGFiV2lkdGgsIGlu
dCB4cG9zLCBib29sIHJ1blJvdW5kaW5nID0gdHJ1ZSkgY29uc3Q7CiAKICAgICBmcmllbmQgc3Ry
dWN0IFdpZHRoSXRlcmF0b3I7CiAgICAgCkluZGV4OiByZW5kZXJpbmcvUmVuZGVyRmxleGlibGVC
b3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHAJKHJl
dmlzaW9uIDE0Mjg5KQorKysgcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzY4LDcgKzc2OCw3IEBACiAgICAgICAgICAgICAgICAgc3RhdGljIEF0b21p
Y1N0cmluZyBlbGxpcHNpc0FuZFNwYWNlU3RyKGVsbGlwc2lzQW5kU3BhY2UsIDIpOwogCiAgICAg
ICAgICAgICAgICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlKG51bVZpc2libGVMaW5lcyA9PSAx
KS0+Zm9udCgpOwotICAgICAgICAgICAgICAgIGludCBlbGxpcHNpc0FuZFNwYWNlV2lkdGggPSBm
b250LndpZHRoKGVsbGlwc2lzQW5kU3BhY2UsIDIsIDAsIDIsIDAsIDApOworICAgICAgICAgICAg
ICAgIGludCBlbGxpcHNpc0FuZFNwYWNlV2lkdGggPSBmb250LndpZHRoKFRleHRSdW4oZWxsaXBz
aXNBbmRTcGFjZSwgMikpOwogCiAgICAgICAgICAgICAgICAgLy8gR2V0IGVsbGlwc2lzIHdpZHRo
ICsgIiAiICsgYW5jaG9yIHdpZHRoCiAgICAgICAgICAgICAgICAgaW50IHRvdGFsV2lkdGggPSBl
bGxpcHNpc0FuZFNwYWNlV2lkdGggKyBhbmNob3JCb3gtPndpZHRoKCk7CkluZGV4OiByZW5kZXJp
bmcvYmlkaS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL2JpZGkuY3BwCShyZXZpc2lvbiAx
NDI4OSkKKysrIHJlbmRlcmluZy9iaWRpLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQ2LDcgKzg0
Niw3IEBACiAgICAgaWYgKCFtX3RhYldpZHRoKSB7CiAgICAgICAgIGNvbnN0IFVDaGFyIHNwYWNl
Q2hhciA9ICcgJzsKICAgICAgICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlKCktPmZvbnQoKTsK
LSAgICAgICAgaW50IHNwYWNlV2lkdGggPSBmb250LndpZHRoKCZzcGFjZUNoYXIsIDEpOworICAg
ICAgICBpbnQgc3BhY2VXaWR0aCA9IGZvbnQud2lkdGgoVGV4dFJ1bigmc3BhY2VDaGFyLCAxKSk7
CiAgICAgICAgIG1fdGFiV2lkdGggPSBzcGFjZVdpZHRoICogODsKICAgICAgICAgYXNzZXJ0KG1f
dGFiV2lkdGggIT0gMCk7CiAgICAgfQpAQCAtMjU1OSwxMSArMjU1OSwxMiBAQAogewogICAgIC8v
IERldGVybWluZSB0aGUgd2lkdGggb2YgdGhlIGVsbGlwc2lzIHVzaW5nIHRoZSBjdXJyZW50IGZv
bnQuCiAgICAgY29uc3QgVUNoYXIgZWxsaXBzaXMgPSAweDIwMjY7IC8vIEZJWE1FOiBDU1MzIHNh
eXMgdGhpcyBpcyBjb25maWd1cmFibGUsIGFsc28gbmVlZCB0byB1c2UgMHgwMDJFIChGVUxMIFNU
T1ApIGlmIDB4MjAyNiBub3QgcmVuZGVyYWJsZQorICAgIFRleHRSdW4gZWxsaXBzaXNSdW4oJmVs
bGlwc2lzLCAxKTsKICAgICBzdGF0aWMgQXRvbWljU3RyaW5nIGVsbGlwc2lzU3RyKCZlbGxpcHNp
cywgMSk7CiAgICAgY29uc3QgRm9udCYgZmlyc3RMaW5lRm9udCA9IGZpcnN0TGluZVN0eWxlKCkt
PmZvbnQoKTsKICAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGUoKS0+Zm9udCgpOwotICAgIGlu
dCBmaXJzdExpbmVFbGxpcHNpc1dpZHRoID0gZmlyc3RMaW5lRm9udC53aWR0aCgmZWxsaXBzaXMs
IDEpOwotICAgIGludCBlbGxpcHNpc1dpZHRoID0gKGZvbnQgPT0gZmlyc3RMaW5lRm9udCkgPyBm
aXJzdExpbmVFbGxpcHNpc1dpZHRoIDogZm9udC53aWR0aCgmZWxsaXBzaXMsIDEpOworICAgIGlu
dCBmaXJzdExpbmVFbGxpcHNpc1dpZHRoID0gZmlyc3RMaW5lRm9udC53aWR0aChlbGxpcHNpc1J1
bik7CisgICAgaW50IGVsbGlwc2lzV2lkdGggPSAoZm9udCA9PSBmaXJzdExpbmVGb250KSA/IGZp
cnN0TGluZUVsbGlwc2lzV2lkdGggOiBmb250LndpZHRoKGVsbGlwc2lzUnVuKTsKIAogICAgIC8v
IEZvciBMVFIgdGV4dCB0cnVuY2F0aW9uLCB3ZSB3YW50IHRvIGdldCB0aGUgcmlnaHQgZWRnZSBv
ZiBvdXIgcGFkZGluZyBib3gsIGFuZCB0aGVuIHdlIHdhbnQgdG8gc2VlCiAgICAgLy8gaWYgdGhl
IHJpZ2h0IGVkZ2Ugb2YgYSBsaW5lIGJveCBleGNlZWRzIHRoYXQuICBGb3IgUlRMLCB3ZSB1c2Ug
dGhlIGxlZnQgZWRnZSBvZiB0aGUgcGFkZGluZyBib3ggYW5kCkluZGV4OiByZW5kZXJpbmcvcmVu
ZGVyX2xpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9yZW5kZXJfbGluZS5jcHAJKHJl
dmlzaW9uIDE0Mjg5KQorKysgcmVuZGVyaW5nL3JlbmRlcl9saW5lLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTA4NSw4ICsxMDg1LDcgQEAKICAgICB9CiAKICAgICBjb25zdCBTdHJpbmcmIHN0ciA9
IG1fc3RyOwotICAgIHAtPmRyYXdUZXh0KEludFBvaW50KG1feCArIF90eCwgbV95ICsgX3R5ICsg
bV9iYXNlbGluZSksIDAsIDAsIHN0ci5jaGFyYWN0ZXJzKCksIHN0ci5sZW5ndGgoKSwKLSAgICAg
ICAgMCwgc3RyLmxlbmd0aCgpLCAwLCBMVFIsIF9zdHlsZS0+dmlzdWFsbHlPcmRlcmVkKCksIDAs
IHN0ci5sZW5ndGgoKSk7CisgICAgcC0+ZHJhd1RleHQoVGV4dFJ1bihzdHIuaW1wbCgpKSwgSW50
UG9pbnQobV94ICsgX3R4LCBtX3kgKyBfdHkgKyBtX2Jhc2VsaW5lKSwgMCwgMCwgMCwgTFRSLCBf
c3R5bGUtPnZpc3VhbGx5T3JkZXJlZCgpKTsKIAogICAgIGlmIChzZXRTaGFkb3cpCiAgICAgICAg
IHAtPmNsZWFyU2hhZG93KCk7CkluZGV4OiByZW5kZXJpbmcvcmVuZGVyX2xpc3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIHJlbmRlcmluZy9yZW5kZXJfbGlzdC5jcHAJKHJldmlzaW9uIDE0Mjg5KQorKysg
cmVuZGVyaW5nL3JlbmRlcl9saXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQxLDE1ICs0NDEs
MTggQEAKICAgICBkZWZhdWx0OgogICAgICAgICBpZiAoIW1faXRlbS5pc0VtcHR5KCkpIHsKICAg
ICAgICAgICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZSgpLT5mb250KCk7CisgICAgICAgICAg
ICBUZXh0UnVuIHRleHRSdW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KG1faXRlbS51
bmljb2RlKCkpLCBtX2l0ZW0ubGVuZ3RoKCkpOwogICAgICAgICAgICAgaWYgKHN0eWxlKCktPmRp
cmVjdGlvbigpID09IExUUikgewotICAgICAgICAgICAgICAgIGludCB3aWR0aCA9IGZvbnQud2lk
dGgocmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KG1faXRlbS51bmljb2RlKCkpLCBtX2l0
ZW0ubGVuZ3RoKCkpOwotICAgICAgICAgICAgICAgIHAtPmRyYXdUZXh0KG1hcmtlci5sb2NhdGlv
bigpLCBtX2l0ZW0pOwotICAgICAgICAgICAgICAgIHAtPmRyYXdUZXh0KG1hcmtlci5sb2NhdGlv
bigpICsgSW50U2l6ZSh3aWR0aCwgMCksICIuICIpOworICAgICAgICAgICAgICAgIGludCB3aWR0
aCA9IGZvbnQud2lkdGgodGV4dFJ1bik7CisgICAgICAgICAgICAgICAgcC0+ZHJhd1RleHQodGV4
dFJ1biwgbWFya2VyLmxvY2F0aW9uKCkpOworICAgICAgICAgICAgICAgIFVDaGFyIHBlcmlvZFNw
YWNlWzJdID0geyAnLicsICcgJyB9OworICAgICAgICAgICAgICAgIHAtPmRyYXdUZXh0KFRleHRS
dW4ocGVyaW9kU3BhY2UsIDIpLCBtYXJrZXIubG9jYXRpb24oKSArIEludFNpemUod2lkdGgsIDAp
KTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgVUNoYXIgc3BhY2VQZXJp
b2RbMl0gPSB7ICcuJywgJyAnIH07Ci0gICAgICAgICAgICAgICAgaW50IHdpZHRoID0gZm9udC53
aWR0aChzcGFjZVBlcmlvZCwgMik7Ci0gICAgICAgICAgICAgICAgcC0+ZHJhd1RleHQobWFya2Vy
LmxvY2F0aW9uKCksICIgLiIpOwotICAgICAgICAgICAgICAgIHAtPmRyYXdUZXh0KG1hcmtlci5s
b2NhdGlvbigpICsgSW50U2l6ZSh3aWR0aCwgMCksIG1faXRlbSk7CisgICAgICAgICAgICAgICAg
VGV4dFJ1biBzcGFjZVBlcmlvZFJ1bihzcGFjZVBlcmlvZCwgMik7CisgICAgICAgICAgICAgICAg
aW50IHdpZHRoID0gZm9udC53aWR0aChzcGFjZVBlcmlvZFJ1bik7CisgICAgICAgICAgICAgICAg
cC0+ZHJhd1RleHQoc3BhY2VQZXJpb2RSdW4sIG1hcmtlci5sb2NhdGlvbigpKTsKKyAgICAgICAg
ICAgICAgICBwLT5kcmF3VGV4dCh0ZXh0UnVuLCBtYXJrZXIubG9jYXRpb24oKSArIEludFNpemUo
d2lkdGgsIDApKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTU0OSw5ICs1
NTIsOSBAQAogICAgIH0KIAogICAgIHsKLSAgICAgICAgaW50IGl0ZW1XaWR0aCA9IGZvbnQud2lk
dGgocmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KG1faXRlbS51bmljb2RlKCkpLCBtX2l0
ZW0ubGVuZ3RoKCkpOworICAgICAgICBpbnQgaXRlbVdpZHRoID0gZm9udC53aWR0aChUZXh0UnVu
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPihtX2l0ZW0udW5pY29kZSgpKSwgbV9pdGVt
Lmxlbmd0aCgpKSk7CiAgICAgICAgIFVDaGFyIHBlcmlvZFNwYWNlWzJdID0geyAnLicsICcgJyB9
OwotICAgICAgICBpbnQgcGVyaW9kU3BhY2VXaWR0aCA9IGZvbnQud2lkdGgocGVyaW9kU3BhY2Us
IDIpOworICAgICAgICBpbnQgcGVyaW9kU3BhY2VXaWR0aCA9IGZvbnQud2lkdGgoVGV4dFJ1bihw
ZXJpb2RTcGFjZSwgMikpOwogICAgICAgICBtX3dpZHRoID0gaXRlbVdpZHRoICsgcGVyaW9kU3Bh
Y2VXaWR0aDsKICAgICB9CiAKQEAgLTY5OCw5ICs3MDEsOSBAQAogICAgIGlmIChtX2l0ZW0uaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm4gSW50UmVjdCgpOwogCi0gICAgaW50IGl0ZW1XaWR0aCA9
IGZvbnQud2lkdGgocmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KG1faXRlbS51bmljb2Rl
KCkpLCBtX2l0ZW0ubGVuZ3RoKCkpOworICAgIGludCBpdGVtV2lkdGggPSBmb250LndpZHRoKFRl
eHRSdW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KG1faXRlbS51bmljb2RlKCkpLCBt
X2l0ZW0ubGVuZ3RoKCkpKTsKICAgICBVQ2hhciBwZXJpb2RTcGFjZVsyXSA9IHsgJy4nLCAnICcg
fTsKLSAgICBpbnQgcGVyaW9kU3BhY2VXaWR0aCA9IGZvbnQud2lkdGgocGVyaW9kU3BhY2UsIDIp
OworICAgIGludCBwZXJpb2RTcGFjZVdpZHRoID0gZm9udC53aWR0aChUZXh0UnVuKHBlcmlvZFNw
YWNlLCAyKSk7CiAgICAgcmV0dXJuIEludFJlY3QobV94LCBtX3kgKyBhc2NlbnQsIGl0ZW1XaWR0
aCArIHBlcmlvZFNwYWNlV2lkdGgsIGZvbnQuaGVpZ2h0KCkpOwogfQogCkluZGV4OiByZW5kZXJp
bmcvUmVuZGVySW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJJbWFnZS5j
cHAJKHJldmlzaW9uIDE0Mjg5KQorKysgcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA0LDcgKzEwNCw3IEBACiAgICAgICAgIC8vIHdlIGhhdmUgYW4gYWx0IGFu
ZCB0aGUgdXNlciBtZWFudCBpdCAoaXRzIG5vdCBhIHRleHQgd2UgaW52ZW50ZWQpCiAgICAgICAg
IGlmICghbV9hbHRUZXh0LmlzRW1wdHkoKSkgewogICAgICAgICAgICAgY29uc3QgRm9udCYgZm9u
dCA9IHN0eWxlKCktPmZvbnQoKTsKLSAgICAgICAgICAgIGl3ID0gbWF4KGl3LCBtaW4oZm9udC53
aWR0aChtX2FsdFRleHQuY2hhcmFjdGVycygpLCBtX2FsdFRleHQubGVuZ3RoKCkpLCAxMDI0KSk7
CisgICAgICAgICAgICBpdyA9IG1heChpdywgbWluKGZvbnQud2lkdGgoVGV4dFJ1bihtX2FsdFRl
eHQuY2hhcmFjdGVycygpLCBtX2FsdFRleHQubGVuZ3RoKCkpKSwgMTAyNCkpOwogICAgICAgICAg
ICAgaWggPSBtYXgoaWgsIG1pbihmb250LmhlaWdodCgpLCAyNTYpKTsKICAgICAgICAgfQogCkBA
IC0yNDcsMTIgKzI0NywxMyBAQAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8v
IE9ubHkgZHJhdyB0aGUgYWx0IHRleHQgaWYgaXQnbGwgZml0IHdpdGhpbiB0aGUgY29udGVudCBi
b3gsCiAgICAgICAgICAgICAgICAgLy8gYW5kIG9ubHkgaWYgaXQgZml0cyBhYm92ZSB0aGUgZXJy
b3IgaW1hZ2UuCi0gICAgICAgICAgICAgICAgaW50IHRleHRXaWR0aCA9IGZvbnQud2lkdGgocmVp
bnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KHRleHQudW5pY29kZSgpKSwgdGV4dC5sZW5ndGgo
KSk7CisgICAgICAgICAgICAgICAgVGV4dFJ1biB0ZXh0UnVuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgVUNoYXIqPih0ZXh0LnVuaWNvZGUoKSksIHRleHQubGVuZ3RoKCkpOworICAgICAgICAgICAg
ICAgIGludCB0ZXh0V2lkdGggPSBmb250LndpZHRoKHRleHRSdW4pOwogICAgICAgICAgICAgICAg
IGlmIChlcnJvclBpY3R1cmVEcmF3bikgewogICAgICAgICAgICAgICAgICAgICBpZiAodXNhYmxl
V2lkdGggPj0gdGV4dFdpZHRoICYmIGZvbnQuaGVpZ2h0KCkgPD0gaW1hZ2VZKQotICAgICAgICAg
ICAgICAgICAgICAgICAgcC0+ZHJhd1RleHQoSW50UG9pbnQoYXgsIGF5ICsgYXNjZW50KSwgdGV4
dCk7CisgICAgICAgICAgICAgICAgICAgICAgICBwLT5kcmF3VGV4dCh0ZXh0UnVuLCBJbnRQb2lu
dChheCwgYXkgKyBhc2NlbnQpKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHVzYWJsZVdp
ZHRoID49IHRleHRXaWR0aCAmJiBjSGVpZ2h0ID49IGZvbnQuaGVpZ2h0KCkpCi0gICAgICAgICAg
ICAgICAgICAgIHAtPmRyYXdUZXh0KEludFBvaW50KGF4LCBheSArIGFzY2VudCksIHRleHQpOwor
ICAgICAgICAgICAgICAgICAgICBwLT5kcmF3VGV4dCh0ZXh0UnVuLCBJbnRQb2ludChheCwgYXkg
KyBhc2NlbnQpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KSW5kZXg6IHJlbmRl
cmluZy9SZW5kZXJUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyVGV4dC5j
cHAJKHJldmlzaW9uIDE0Mjg5KQorKysgcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NjAsNyArNDYwLDcgQEAKICAgICBjb25zdCBGb250KiBmID0gZm9udChmYWxz
ZSk7CiAgICAgaWYgKHNob3VsZFVzZU1vbm9zcGFjZUNhY2hlKGYpKSB7CiAgICAgICAgIGNvbnN0
IFVDaGFyIGMgPSAnICc7Ci0gICAgICAgIG1fbW9ub3NwYWNlQ2hhcmFjdGVyV2lkdGggPSAoaW50
KWYtPmZsb2F0V2lkdGgoJmMsIDEsIDAsIDEsIDAsIDApOworICAgICAgICBtX21vbm9zcGFjZUNo
YXJhY3RlcldpZHRoID0gZi0+d2lkdGgoVGV4dFJ1bigmYywgMSkpOwogICAgIH0gZWxzZSB7CiAg
ICAgICAgIG1fbW9ub3NwYWNlQ2hhcmFjdGVyV2lkdGggPSAwOwogICAgIH0KQEAgLTQ4Niw3ICs0
ODYsNyBAQAogICAgICAgICByZXR1cm4gdzsKICAgICB9CiAgICAgCi0gICAgcmV0dXJuIGYtPndp
ZHRoKHN0ci0+Y2hhcmFjdGVycygpLCBzdHItPmxlbmd0aCgpLCBzdGFydCwgbGVuLCB0YWJXaWR0
aCwgeHBvcyk7CisgICAgcmV0dXJuIGYtPndpZHRoKFRleHRSdW4oc3RyaW5nKCksIHN0YXJ0LCAw
LCBsZW4pLCB0YWJXaWR0aCwgeHBvcyk7CiB9CiAKIHZvaWQgUmVuZGVyVGV4dDo6dHJpbW1lZE1p
bk1heFdpZHRoKGludCBsZWFkV2lkdGgsCkBAIC01MjUsNyArNTI1LDcgQEAKICAgICBpZiAoc3Ry
aXBGcm9udFNwYWNlcyAmJiAoKCpzdHIpWzBdID09ICcgJyB8fCAoKCpzdHIpWzBdID09ICdcbicg
JiYgIXN0eWxlKCktPnByZXNlcnZlTmV3bGluZSgpKSB8fCAoKnN0cilbMF0gPT0gJ1x0JykpIHsK
ICAgICAgICAgY29uc3QgRm9udCAqZiA9IGZvbnQoZmFsc2UpOyAvLyBGSVhNRTogV2h5IGlzIGl0
IG9rIHRvIGlnbm9yZSBmaXJzdC1saW5lIGhlcmU/CiAgICAgICAgIGNvbnN0IFVDaGFyIHNwYWNl
ID0gJyAnOwotICAgICAgICBpbnQgc3BhY2VXaWR0aCA9IGYtPndpZHRoKCZzcGFjZSwgMSk7Cisg
ICAgICAgIGludCBzcGFjZVdpZHRoID0gZi0+d2lkdGgoVGV4dFJ1bigmc3BhY2UsIDEpKTsKICAg
ICAgICAgbWF4VyAtPSBzcGFjZVdpZHRoICsgZi0+d29yZFNwYWNpbmcoKTsKICAgICB9CiAgICAg
CkBAIC03MDQsNyArNzA0LDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjdXJyTWF4V2lkdGggKz0gZi0+d2lkdGgodHh0
LCBsZW4sIGksIDEsIHRhYldpZHRoKCksIGxlYWRXaWR0aCArIGN1cnJNYXhXaWR0aCk7CisgICAg
ICAgICAgICAgICAgY3Vyck1heFdpZHRoICs9IGYtPndpZHRoKFRleHRSdW4odHh0ICsgaSwgMSks
IHRhYldpZHRoKCksIGxlYWRXaWR0aCArIGN1cnJNYXhXaWR0aCk7CiAgICAgICAgICAgICAgICAg
bmVlZHNXb3JkU3BhY2luZyA9IGlzU3BhY2UgJiYgIXByZXZpb3VzQ2hhcmFjdGVySXNTcGFjZSAm
JiBpID09IGxlbi0xOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC05OTUsNyArOTk1LDcg
QEAKICAgICBlbHNlIGlmIChmID09ICZzdHlsZSgpLT5mb250KCkpCiAgICAgICAgIHcgPSB3aWR0
aEZyb21DYWNoZShmLCBmcm9tLCBsZW4sIHRhYldpZHRoKCksIHhwb3MpOwogICAgIGVsc2UKLSAg
ICAgICAgdyA9IGYtPndpZHRoKHN0ci0+Y2hhcmFjdGVycygpLCBzdHItPmxlbmd0aCgpLCBmcm9t
LCBsZW4sIHRhYldpZHRoKCksIHhwb3MgKTsKKyAgICAgICAgdyA9IGYtPndpZHRoKFRleHRSdW4o
c3RyaW5nKCksIGZyb20sIDAsIGxlbiksIHRhYldpZHRoKCksIHhwb3MgKTsKICAgICAgICAgCiAg
ICAgcmV0dXJuIHc7CiB9CkluZGV4OiByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCShyZXZpc2lvbiAxNDI4OSkKKysr
IHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDkgKzEx
Nyw5IEBACiAgICAgaW50IHNlbEhlaWdodCA9IHJvb3RCb3gtPnNlbGVjdGlvbkhlaWdodCgpOwog
ICAgIGNvbnN0IEZvbnQgKmYgPSB0ZXh0T2JqLT5mb250KG1fZmlyc3RMaW5lKTsKIAotICAgIElu
dFJlY3QgciA9IGYtPnNlbGVjdGlvblJlY3RGb3JUZXh0KEludFBvaW50KHR4ICsgbV94LCB0eSAr
IHNlbFRvcCksIHNlbEhlaWdodCwgdGV4dE9iai0+dGFiV2lkdGgoKSwgdGV4dFBvcygpLCAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0T2JqLT5zdHItPmNoYXJh
Y3RlcnMoKSwgdGV4dE9iai0+c3RyLT5sZW5ndGgoKSwgbV9zdGFydCwgbV9sZW4sCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV90b0FkZCwgbV9yZXZlcnNlZCwgbV9k
aXJPdmVycmlkZSwgc1BvcywgZVBvcyk7CisgICAgSW50UmVjdCByID0gZi0+c2VsZWN0aW9uUmVj
dEZvclRleHQoVGV4dFJ1bih0ZXh0T2JqLT5zdHJpbmcoKSwgbV9zdGFydCwgc1BvcywgZVBvcyks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50UG9pbnQodHggKyBt
X3gsIHR5ICsgc2VsVG9wKSwgc2VsSGVpZ2h0LCB0ZXh0T2JqLT50YWJXaWR0aCgpLCB0ZXh0UG9z
KCksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdG9BZGQsIG1f
cmV2ZXJzZWQsIG1fZGlyT3ZlcnJpZGUpOwogICAgIGlmIChyLngoKSA+IHR4ICsgbV94ICsgbV93
aWR0aCkKICAgICAgICAgci5zZXRXaWR0aCgwKTsKICAgICBlbHNlIGlmIChyLnJpZ2h0KCkgLSAx
ID4gdHggKyBtX3ggKyBtX3dpZHRoKQpAQCAtMzI1LDYgKzMyNSw4IEBACiAgICAgICAgIH0KICAg
ICB9CiAKKyAgICBTdHJpbmdJbXBsKiB0ZXh0U3RyID0gdGV4dE9iamVjdCgpLT5zdHJpbmcoKTsK
KwogICAgIGlmICghcGFpbnRTZWxlY3RlZFRleHRPbmx5ICYmICFwYWludFNlbGVjdGVkVGV4dFNl
cGFyYXRlbHkpIHsKICAgICAgICAgLy8gcGFpbnQgYWxsIHRoZSB0ZXh0CiAgICAgICAgIC8vIEZJ
WE1FOiBIYW5kbGUgUlRMIGRpcmVjdGlvbiwgaGFuZGxlIHJldmVyc2VkIHN0cmluZ3MuICBGb3Ig
bm93IHRydW5jYXRpb24gY2FuIG9ubHkgYmUgdHVybmVkIG9uCkBAIC0zMzIsOCArMzM0LDggQEAK
ICAgICAgICAgaW50IGVuZFBvaW50ID0gbV9sZW47CiAgICAgICAgIGlmIChtX3RydW5jYXRpb24g
IT0gY05vVHJ1bmNhdGlvbikKICAgICAgICAgICAgIGVuZFBvaW50ID0gbV90cnVuY2F0aW9uIC0g
bV9zdGFydDsKLSAgICAgICAgaS5wLT5kcmF3VGV4dChJbnRQb2ludChtX3ggKyB0eCwgbV95ICsg
dHkgKyBtX2Jhc2VsaW5lKSwgdGV4dE9iamVjdCgpLT50YWJXaWR0aCgpLCB0ZXh0UG9zKCksCi0g
ICAgICAgICAgICAgICAgICAgICAgdGV4dE9iamVjdCgpLT5zdHJpbmcoKS0+Y2hhcmFjdGVycygp
LCB0ZXh0T2JqZWN0KCktPnN0cmluZygpLT5sZW5ndGgoKSwgbV9zdGFydCwgZW5kUG9pbnQsCisg
ICAgICAgIGkucC0+ZHJhd1RleHQoVGV4dFJ1bih0ZXh0U3RyLCBtX3N0YXJ0LCAwLCBlbmRQb2lu
dCksCisgICAgICAgICAgICAgICAgICAgICAgSW50UG9pbnQobV94ICsgdHgsIG1feSArIHR5ICsg
bV9iYXNlbGluZSksIHRleHRPYmplY3QoKS0+dGFiV2lkdGgoKSwgdGV4dFBvcygpLAogICAgICAg
ICAgICAgICAgICAgICAgIG1fdG9BZGQsIG1fcmV2ZXJzZWQgPyBSVEwgOiBMVFIsIG1fZGlyT3Zl
cnJpZGUgfHwgc3R5bGVUb1VzZS0+dmlzdWFsbHlPcmRlcmVkKCkpOwogICAgIH0gZWxzZSB7CiAg
ICAgICAgIGludCBzUG9zLCBlUG9zOwpAQCAtMzQxLDE4ICszNDMsMTUgQEAKICAgICAgICAgaWYg
KHBhaW50U2VsZWN0ZWRUZXh0U2VwYXJhdGVseSkgewogICAgICAgICAgICAgLy8gcGFpbnQgb25s
eSB0aGUgdGV4dCB0aGF0IGlzIG5vdCBzZWxlY3RlZAogICAgICAgICAgICAgaWYgKHNQb3MgPj0g
ZVBvcykKLSAgICAgICAgICAgICAgICBpLnAtPmRyYXdUZXh0KEludFBvaW50KG1feCArIHR4LCBt
X3kgKyB0eSArIG1fYmFzZWxpbmUpLCB0ZXh0T2JqZWN0KCktPnRhYldpZHRoKCksIHRleHRQb3Mo
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRPYmplY3QoKS0+c3RyaW5nKCkt
PmNoYXJhY3RlcnMoKSwgdGV4dE9iamVjdCgpLT5zdHJpbmcoKS0+bGVuZ3RoKCksIG1fc3RhcnQs
IG1fbGVuLAorICAgICAgICAgICAgICAgIGkucC0+ZHJhd1RleHQoVGV4dFJ1bih0ZXh0U3RyLCBt
X3N0YXJ0KSwgSW50UG9pbnQobV94ICsgdHgsIG1feSArIHR5ICsgbV9iYXNlbGluZSksIHRleHRP
YmplY3QoKS0+dGFiV2lkdGgoKSwgdGV4dFBvcygpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV90b0FkZCwgbV9yZXZlcnNlZCA/IFJUTCA6IExUUiwgbV9kaXJPdmVycmlkZSB8fCBz
dHlsZVRvVXNlLT52aXN1YWxseU9yZGVyZWQoKSk7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAg
ICAgICAgICAgICBpZiAoc1BvcyAtIDEgPj0gMCkKLSAgICAgICAgICAgICAgICAgICAgaS5wLT5k
cmF3VGV4dChJbnRQb2ludChtX3ggKyB0eCwgbV95ICsgdHkgKyBtX2Jhc2VsaW5lKSwgdGV4dE9i
amVjdCgpLT50YWJXaWR0aCgpLCB0ZXh0UG9zKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGV4dE9iamVjdCgpLT5zdHJpbmcoKS0+Y2hhcmFjdGVycygpLCB0ZXh0T2JqZWN0
KCktPnN0cmluZygpLT5sZW5ndGgoKSwgbV9zdGFydCwgbV9sZW4sCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV90b0FkZCwgbV9yZXZlcnNlZCA/IFJUTCA6IExUUiwgbV9kaXJP
dmVycmlkZSB8fCBzdHlsZVRvVXNlLT52aXN1YWxseU9yZGVyZWQoKSwgMCwgc1Bvcyk7CisgICAg
ICAgICAgICAgICAgICAgIGkucC0+ZHJhd1RleHQoVGV4dFJ1bih0ZXh0U3RyLCBtX3N0YXJ0LCAw
LCBzUG9zKSwgSW50UG9pbnQobV94ICsgdHgsIG1feSArIHR5ICsgbV9iYXNlbGluZSksIHRleHRP
YmplY3QoKS0+dGFiV2lkdGgoKSwgdGV4dFBvcygpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fdG9BZGQsIG1fcmV2ZXJzZWQgPyBSVEwgOiBMVFIsIG1fZGlyT3ZlcnJpZGUg
fHwgc3R5bGVUb1VzZS0+dmlzdWFsbHlPcmRlcmVkKCkpOwogICAgICAgICAgICAgICAgIGlmIChl
UG9zIDwgbV9zdGFydCArIG1fbGVuKQotICAgICAgICAgICAgICAgICAgICBpLnAtPmRyYXdUZXh0
KEludFBvaW50KG1feCArIHR4LCBtX3kgKyB0eSArIG1fYmFzZWxpbmUpLCB0ZXh0T2JqZWN0KCkt
PnRhYldpZHRoKCksIHRleHRQb3MoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0ZXh0T2JqZWN0KCktPnN0cmluZygpLT5jaGFyYWN0ZXJzKCksIHRleHRPYmplY3QoKS0+c3Ry
aW5nKCktPmxlbmd0aCgpLCBtX3N0YXJ0LCBtX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX3RvQWRkLCBtX3JldmVyc2VkID8gUlRMIDogTFRSLCBtX2Rpck92ZXJyaWRl
IHx8IHN0eWxlVG9Vc2UtPnZpc3VhbGx5T3JkZXJlZCgpLCBlUG9zLCAtMSk7CisgICAgICAgICAg
ICAgICAgICAgIGkucC0+ZHJhd1RleHQoVGV4dFJ1bih0ZXh0U3RyLCBtX3N0YXJ0LCBlUG9zKSwg
SW50UG9pbnQobV94ICsgdHgsIG1feSArIHR5ICsgbV9iYXNlbGluZSksIHRleHRPYmplY3QoKS0+
dGFiV2lkdGgoKSwgdGV4dFBvcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fdG9BZGQsIG1fcmV2ZXJzZWQgPyBSVEwgOiBMVFIsIG1fZGlyT3ZlcnJpZGUgfHwgc3R5bGVU
b1VzZS0+dmlzdWFsbHlPcmRlcmVkKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
ICAgICAgICAKQEAgLTM2NSw5ICszNjQsOCBAQAogICAgICAgICAgICAgICAgIGkucC0+c2V0U2hh
ZG93KEludFNpemUoc2VsZWN0aW9uVGV4dFNoYWRvdy0+eCwgc2VsZWN0aW9uVGV4dFNoYWRvdy0+
eSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uVGV4dFNoYWRvdy0+
Ymx1ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25UZXh0U2hhZG93
LT5jb2xvcik7Ci0gICAgICAgICAgICBpLnAtPmRyYXdUZXh0KEludFBvaW50KG1feCArIHR4LCBt
X3kgKyB0eSArIG1fYmFzZWxpbmUpLCB0ZXh0T2JqZWN0KCktPnRhYldpZHRoKCksIHRleHRQb3Mo
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dE9iamVjdCgpLT5zdHJpbmcoKS0+Y2hh
cmFjdGVycygpLCB0ZXh0T2JqZWN0KCktPnN0cmluZygpLT5sZW5ndGgoKSwgbV9zdGFydCwgbV9s
ZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG1fdG9BZGQsIG1fcmV2ZXJzZWQgPyBSVEwg
OiBMVFIsIG1fZGlyT3ZlcnJpZGUgfHwgc3R5bGVUb1VzZS0+dmlzdWFsbHlPcmRlcmVkKCksIHNQ
b3MsIGVQb3MpOworICAgICAgICAgICAgaS5wLT5kcmF3VGV4dChUZXh0UnVuKHRleHRTdHIsIG1f
c3RhcnQsIHNQb3MsIGVQb3MpLCBJbnRQb2ludChtX3ggKyB0eCwgbV95ICsgdHkgKyBtX2Jhc2Vs
aW5lKSwgdGV4dE9iamVjdCgpLT50YWJXaWR0aCgpLCB0ZXh0UG9zKCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fdG9BZGQsIG1fcmV2ZXJzZWQgPyBSVEwgOiBMVFIsIG1fZGlyT3ZlcnJp
ZGUgfHwgc3R5bGVUb1VzZS0+dmlzdWFsbHlPcmRlcmVkKCkpOwogICAgICAgICAgICAgaWYgKHNl
bGVjdGlvblRleHRTaGFkb3cpCiAgICAgICAgICAgICAgICAgaS5wLT5jbGVhclNoYWRvdygpOwog
ICAgICAgICB9CkBAIC00NTAsOSArNDQ4LDggQEAKICAgICBpbnQgeSA9IHItPnNlbGVjdGlvblRv
cCgpOwogICAgIGludCBoID0gci0+c2VsZWN0aW9uSGVpZ2h0KCk7CiAgICAgcC0+YWRkQ2xpcChJ
bnRSZWN0KG1feCArIHR4LCB5ICsgdHksIG1fd2lkdGgsIGgpKTsKLSAgICBwLT5kcmF3SGlnaGxp
Z2h0Rm9yVGV4dChJbnRQb2ludChtX3ggKyB0eCwgeSArIHR5KSwgaCwgdGV4dE9iamVjdCgpLT50
YWJXaWR0aCgpLCB0ZXh0UG9zKCksIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRP
YmplY3QoKS0+c3RyLT5jaGFyYWN0ZXJzKCksIHRleHRPYmplY3QoKS0+c3RyLT5sZW5ndGgoKSwg
bV9zdGFydCwgbV9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV90b0FkZCwgbV9y
ZXZlcnNlZCA/IFJUTCA6IExUUiwgbV9kaXJPdmVycmlkZSB8fCBzdHlsZS0+dmlzdWFsbHlPcmRl
cmVkKCksIHNQb3MsIGVQb3MsIGMpOworICAgIHAtPmRyYXdIaWdobGlnaHRGb3JUZXh0KFRleHRS
dW4odGV4dE9iamVjdCgpLT5zdHJpbmcoKSwgbV9zdGFydCwgc1BvcywgZVBvcyksIEludFBvaW50
KG1feCArIHR4LCB5ICsgdHkpLCBoLCB0ZXh0T2JqZWN0KCktPnRhYldpZHRoKCksIHRleHRQb3Mo
KSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV90b0FkZCwgbV9yZXZlcnNlZCA/IFJU
TCA6IExUUiwgbV9kaXJPdmVycmlkZSB8fCBzdHlsZS0+dmlzdWFsbHlPcmRlcmVkKCksIGMpOwog
ICAgIHAtPnJlc3RvcmUoKTsKIH0KIApAQCAtNDc0LDkgKzQ3MSw5IEBACiAgICAgUm9vdElubGlu
ZUJveCogciA9IHJvb3QoKTsKICAgICBpbnQgeSA9IHItPnNlbGVjdGlvblRvcCgpOwogICAgIGlu
dCBoID0gci0+c2VsZWN0aW9uSGVpZ2h0KCk7Ci0gICAgcC0+ZHJhd0hpZ2hsaWdodEZvclRleHQo
SW50UG9pbnQobV94ICsgdHgsIHkgKyB0eSksIGgsIHRleHRPYmplY3QoKS0+dGFiV2lkdGgoKSwg
dGV4dFBvcygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRPYmplY3QoKS0+c3Ry
LT5jaGFyYWN0ZXJzKCksIHRleHRPYmplY3QoKS0+c3RyLT5sZW5ndGgoKSwgbV9zdGFydCwgbV9s
ZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV90b0FkZCwgbV9yZXZlcnNlZCA/IFJU
TCA6IExUUiwgbV9kaXJPdmVycmlkZSB8fCBzdHlsZS0+dmlzdWFsbHlPcmRlcmVkKCksIHNQb3Ms
IGVQb3MsIGMpOworICAgIHAtPmRyYXdIaWdobGlnaHRGb3JUZXh0KFRleHRSdW4odGV4dE9iamVj
dCgpLT5zdHJpbmcoKSwgbV9zdGFydCwgc1BvcywgZVBvcyksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgSW50UG9pbnQobV94ICsgdHgsIHkgKyB0eSksIGgsIHRleHRPYmplY3QoKS0+dGFi
V2lkdGgoKSwgdGV4dFBvcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdG9BZGQs
IG1fcmV2ZXJzZWQgPyBSVEwgOiBMVFIsIG1fZGlyT3ZlcnJpZGUgfHwgc3R5bGUtPnZpc3VhbGx5
T3JkZXJlZCgpLCBjKTsKICAgICBwLT5yZXN0b3JlKCk7CiB9CiAKQEAgLTU3Myw5ICs1NzAsOCBA
QAogICAgIGludCBzUG9zID0gbWF4KG1hcmtlci5zdGFydE9mZnNldCAtIG1fc3RhcnQsICh1bnNp
Z25lZCkwKTsKICAgICBpbnQgZVBvcyA9IG1pbihtYXJrZXIuZW5kT2Zmc2V0IC0gbV9zdGFydCwg
KHVuc2lnbmVkKW1fbGVuKTsKICAgICAKLSAgICBwdC0+ZHJhd0hpZ2hsaWdodEZvclRleHQoSW50
UG9pbnQobV94ICsgX3R4LCB5ICsgX3R5KSwgaCwgdGV4dE9iamVjdCgpLT50YWJXaWR0aCgpLCB0
ZXh0UG9zKCksIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0T2JqZWN0KCktPnN0
ci0+Y2hhcmFjdGVycygpLCB0ZXh0T2JqZWN0KCktPnN0ci0+bGVuZ3RoKCksIG1fc3RhcnQsIG1f
bGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3RvQWRkLCBtX3JldmVyc2VkID8g
UlRMIDogTFRSLCBtX2Rpck92ZXJyaWRlIHx8IHN0eWxlLT52aXN1YWxseU9yZGVyZWQoKSwgc1Bv
cywgZVBvcywgeWVsbG93KTsKKyAgICBwdC0+ZHJhd0hpZ2hsaWdodEZvclRleHQoVGV4dFJ1bih0
ZXh0T2JqZWN0KCktPnN0cmluZygpLCBtX3N0YXJ0LCBzUG9zLCBlUG9zKSwgSW50UG9pbnQobV94
ICsgX3R4LCB5ICsgX3R5KSwgaCwgdGV4dE9iamVjdCgpLT50YWJXaWR0aCgpLCB0ZXh0UG9zKCks
IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3RvQWRkLCBtX3JldmVyc2VkID8gUlRM
IDogTFRSLCBtX2Rpck92ZXJyaWRlIHx8IHN0eWxlLT52aXN1YWxseU9yZGVyZWQoKSwgeWVsbG93
KTsKICAgICBwdC0+cmVzdG9yZSgpOwogfQogCkBAIC02ODgsOSArNjg0LDkgQEAKICAgICBSZW5k
ZXJUZXh0KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCo+KG1fb2JqZWN0KTsKICAgICBS
ZW5kZXJTdHlsZSAqc3R5bGUgPSB0ZXh0LT5zdHlsZShtX2ZpcnN0TGluZSk7CiAgICAgY29uc3Qg
Rm9udCogZiA9ICZzdHlsZS0+Zm9udCgpOwotICAgIHJldHVybiBmLT5jaGVja1NlbGVjdGlvblBv
aW50KHRleHQtPnN0ci0+Y2hhcmFjdGVycygpLCB0ZXh0LT5zdHItPmxlbmd0aCgpLCBtX3N0YXJ0
LCBtX2xlbiwKLSAgICAgICAgbV90b0FkZCwgdGV4dC0+dGFiV2lkdGgoKSwgdGV4dFBvcygpLCBf
eCAtIG1feCwKLSAgICAgICAgbV9yZXZlcnNlZCA/IFJUTCA6IExUUiwgbV9kaXJPdmVycmlkZSB8
fCBzdHlsZS0+dmlzdWFsbHlPcmRlcmVkKCksIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKTsKKyAgICBy
ZXR1cm4gZi0+Y2hlY2tTZWxlY3Rpb25Qb2ludChUZXh0UnVuKHRleHRPYmplY3QoKS0+c3RyaW5n
KCksIG1fc3RhcnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdG9BZGQs
IHRleHQtPnRhYldpZHRoKCksIHRleHRQb3MoKSwgX3ggLSBtX3gsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9yZXZlcnNlZCA/IFJUTCA6IExUUiwgbV9kaXJPdmVycmlkZSB8
fCBzdHlsZS0+dmlzdWFsbHlPcmRlcmVkKCksIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKTsKIH0KIAog
aW50IElubGluZVRleHRCb3g6OnBvc2l0aW9uRm9yT2Zmc2V0KGludCBvZmZzZXQpIGNvbnN0CkBA
IC03MDMsOCArNjk5LDcgQEAKICAgICBpbnQgZnJvbSA9IG1fcmV2ZXJzZWQgPyBvZmZzZXQgLSBt
X3N0YXJ0IDogMDsKICAgICBpbnQgdG8gPSBtX3JldmVyc2VkID8gbV9sZW4gOiBvZmZzZXQgLSBt
X3N0YXJ0OwogICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIHRvIGFkZCByaWdodEJlYXJpbmcgaGVy
ZT8KLSAgICByZXR1cm4gZi0+c2VsZWN0aW9uUmVjdEZvclRleHQoSW50UG9pbnQobV94LCAwKSwg
MCwgdGV4dC0+dGFiV2lkdGgoKSwgdGV4dFBvcygpLCB0ZXh0LT5zdHItPmNoYXJhY3RlcnMoKSwg
dGV4dC0+c3RyLT5sZW5ndGgoKSwgbV9zdGFydCwgbV9sZW4sCi0gICAgICAgIG1fdG9BZGQsIG1f
cmV2ZXJzZWQsIG1fZGlyT3ZlcnJpZGUsIGZyb20sIHRvKS5yaWdodCgpOworICAgIHJldHVybiBm
LT5zZWxlY3Rpb25SZWN0Rm9yVGV4dChUZXh0UnVuKHRleHQtPnN0cmluZygpLCBtX3N0YXJ0LCBm
cm9tLCB0byksIEludFBvaW50KG1feCwgMCksIDAsIHRleHQtPnRhYldpZHRoKCksIHRleHRQb3Mo
KSwgbV90b0FkZCwgbV9yZXZlcnNlZCwgbV9kaXJPdmVycmlkZSkucmlnaHQoKTsKIH0KIAogfQpJ
bmRleDogcmVuZGVyaW5nL1JlbmRlclRleHRGaWVsZC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVy
aW5nL1JlbmRlclRleHRGaWVsZC5jcHAJKHJldmlzaW9uIDE0Mjg5KQorKysgcmVuZGVyaW5nL1Jl
bmRlclRleHRGaWVsZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMCw4ICsyMzAsMTAgQEAKICAg
ICAgICAgaWYgKHNpemUgPD0gMCkKICAgICAgICAgICAgIHNpemUgPSAyMDsKIAorICAgICAgICAv
LyBGSVhNRTogT25jZSB3ZSBoYXZlIGEgc3RydWN0IHRoYXQgY2FuIGhvbGQgcm91bmRpbmcgaGFj
ayBpbmZvLCB3ZSB3aWxsIGJlIGFibGUgdG8ganVzdCB1c2UgdGhlIAorICAgICAgICAvLyBub3Jt
YWwgd2lkdGggbWV0aG9kIChhbmQgbWFrZSBmbG9hdFdpZHRoIHByb3Blcmx5IHByaXZhdGUpLgog
ICAgICAgICBjb25zdCBVQ2hhciBjaCA9ICcwJzsKLSAgICAgICAgaW50IHNpemVXaWR0aCA9IChp
bnQpY2VpbGYoc3R5bGUoKS0+Zm9udCgpLmZsb2F0V2lkdGgoJmNoLCAxLCAwLCAxLCAwLCAwLCBm
YWxzZSkgKiBzaXplKTsKKyAgICAgICAgaW50IHNpemVXaWR0aCA9IChpbnQpY2VpbGYoc3R5bGUo
KS0+Zm9udCgpLmZsb2F0V2lkdGgoVGV4dFJ1bigmY2gsIDEpLCAwLCAwLCBmYWxzZSkgKiBzaXpl
KTsKICAgICAgICAgbV9tYXhXaWR0aCA9IHNpemVXaWR0aDsKICAgICB9CiAgICAgCkluZGV4OiBy
ZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJC
bG9jay5jcHAJKHJldmlzaW9uIDE0Mjg5KQorKysgcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjgzMiw3ICsyODMyLDcgQEAKICAgICAgICAgUmVuZGVyVGV4dCog
dCA9IHN0YXRpY19jYXN0PFJlbmRlclRleHQgKj4odHJhaWxpbmdTcGFjZUNoaWxkKTsKICAgICAg
ICAgY29uc3QgRm9udCAqZiA9IHQtPmZvbnQoZmFsc2UpOyAgLy8gRklYTUU6IFdoeSBhcmUgd2Ug
aWdub3JpbmcgZmlyc3QtbGluZT8KICAgICAgICAgY29uc3QgVUNoYXIgc3BhY2UgPSAnICc7Ci0g
ICAgICAgIGludCBzcGFjZVdpZHRoID0gZi0+d2lkdGgoJnNwYWNlLCAxKTsKKyAgICAgICAgaW50
IHNwYWNlV2lkdGggPSBmLT53aWR0aChUZXh0UnVuKCZzcGFjZSwgMSkpOwogICAgICAgICBpbmxp
bmVNYXggLT0gc3BhY2VXaWR0aDsKICAgICAgICAgaWYgKGlubGluZU1pbiA+IGlubGluZU1heCkK
ICAgICAgICAgICAgIGlubGluZU1pbiA9IGlubGluZU1heDsK
</data>
<flag name="review"
          id="2303"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>