<?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>10782</bug_id>
          
          <creation_ts>2006-09-08 04:59:42 -0700</creation_ts>
          <short_desc>Classes should not override JSObject::toString(ExecState *)</short_desc>
          <delta_ts>2007-05-31 20:27:04 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore JavaScript</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>mitz</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ap</cc>
    
    <cc>ggaren</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>55025</commentid>
    <comment_count>0</comment_count>
    <who name="">mitz</who>
    <bug_when>2006-09-08 04:59:42 -0700</bug_when>
    <thetext>JSObject::toString(ExecState *) implements the (internal) ToString type conversion operator defined in ECMA-262 9.8. That definition applies to all objects, so classes deriving from JSObject should not -- and have no reason to -- override toString.

The correct way to customize the string representation of host objects is to implement in their prototype either a toString() method or the [[DefaultValue]]() internal method. (The native [[DefaultValue]] uses toString, but Firefox compatibility will probably require overriding [[DefaultValue]] as well).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>55026</commentid>
    <comment_count>1</comment_count>
      <attachid>10454</attachid>
    <who name="">mitz</who>
    <bug_when>2006-09-08 05:08:26 -0700</bug_when>
    <thetext>Created attachment 10454
Test matrix for an HTML element

This table shows the value of several expressions that (should) invoke ToString, ToPrimitive, [[DefaultValue]], and possibly toString and valueOf.

The table shows that, assuming it follows the spec, Firefox overrides [[DefaultValue]] so that when it&apos;s called without a hint, it does not invoke valueOf.

Classes that currently override JSObject::toString() are DOMObject, DOMNode, JSHTMLElement, Window, FrameArray, Location, Selection and History.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>20526</commentid>
    <comment_count>2</comment_count>
      <attachid>13473</attachid>
    <who name="">mitz</who>
    <bug_when>2007-03-04 11:32:11 -0800</bug_when>
    <thetext>Created attachment 13473
Unfinished patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>8593</commentid>
    <comment_count>3</comment_count>
      <attachid>14815</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-05-31 16:46:16 -0700</bug_when>
    <thetext>Created attachment 14815
updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>8597</commentid>
    <comment_count>4</comment_count>
      <attachid>14815</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-05-31 20:26:40 -0700</bug_when>
    <thetext>Comment on attachment 14815
updated patch

Geoff gave me the thumbs up on this baby!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>8598</commentid>
    <comment_count>5</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-05-31 20:27:04 -0700</bug_when>
    <thetext>Landed in r21927.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>10454</attachid>
            <date>2006-09-08 05:08:26 -0700</date>
            <delta_ts>2006-09-08 05:08:26 -0700</delta_ts>
            <desc>Test matrix for an HTML element</desc>
            <filename>type conversions.html</filename>
            <type>text/html</type>
            <size>4500</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">PGhlYWQ+CiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgogICAgICAgIC5vYmogeyBjb2xvcjog
Z3JleTsgfQogICAgICAgIHRhYmxlIHsgZm9udC1zaXplOiBzbWFsbGVyOyBib3JkZXItY29sbGFw
c2U6IGNvbGxhcHNlOyB9CiAgICAgICAgdGQsIHRoIHsgYm9yZGVyOiAxcHggc29saWQgZ3JleTsg
cGFkZGluZzogM3B4OyB9CiAgICAgICAgdGggeyBiYWNrZ3JvdW5kOiBhbGljZWJsdWU7IH0KICAg
IDwvc3R5bGU+CjwvaGVhZD4KPGJvZHk+CiAgICA8cD4KICAgICAgICBkIGlzIGFuIEhUTUwgU1BB
TiBlbGVtZW50IHdob3NlIHRvU3RyaW5nKCkgYW5kIHZhbHVlT2YoKSBtZXRob2RzIHJldHVybiAm
bGRxdW87Zm9vJnJkcXVvOwogICAgICAgIGFuZCAmbGRxdW87YmFyJnJkcXVvOyByZXNwZWN0aXZl
bHkuCiAgICA8L3A+CiAgICA8dGFibGU+CiAgICAgICAgPHRoZWFkPgogICAgICAgICAgICA8dHI+
CiAgICAgICAgICAgICAgICA8dGg+CiAgICAgICAgICAgICAgICAgICAgRXhwcmVzc2lvbgogICAg
ICAgICAgICAgICAgPC90aD4KICAgICAgICAgICAgICAgIDx0aD4KICAgICAgICAgICAgICAgICAg
ICBTcGVjIDxzcGFuIGNsYXNzPSJvYmoiPihmb3IgT2JqZWN0KTwvc3Bhbj4KICAgICAgICAgICAg
ICAgIDwvdGg+CiAgICAgICAgICAgICAgICA8dGggY2xhc3M9Im9iaiI+CiAgICAgICAgICAgICAg
ICAgICAgRXhwZWN0ZWQKICAgICAgICAgICAgICAgICAgICBmb3IgT2JqZWN0CiAgICAgICAgICAg
ICAgICA8L3RoPgogICAgICAgICAgICAgICAgPHRoPgogICAgICAgICAgICAgICAgICAgIEFjdHVh
bAogICAgICAgICAgICAgICAgPC90aD4KICAgICAgICAgICAgICAgIDx0aD4KICAgICAgICAgICAg
ICAgICAgICBGaXJlZm94CiAgICAgICAgICAgICAgICA8L3RoPgogICAgICAgICAgICAgICAgPHRo
PgogICAgICAgICAgICAgICAgICAgIFdpbklFCiAgICAgICAgICAgICAgICA8L3RoPgogICAgICAg
ICAgICAgICAgPHRoPgogICAgICAgICAgICAgICAgICAgIFNoaXBwaW5nIFNhZmFyaQogICAgICAg
ICAgICAgICAgPC90aD4KICAgICAgICAgICAgPC90cj4KICAgICAgICA8L3RoZWFkPgogICAgICAg
IDx0Ym9keT4KICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgPHRkPltkXSArICIiPC90
ZD4KICAgICAgICAgICAgICAgIDx0ZD5Ub1ByaW1pdGl2ZShbZF0pPGJyPgogICAgICAgICAgICAg
ICAgICAgID0gW2RdLltbRGVmYXVsdFZhbHVlXV0oTnVtYmVyKTxicj4KICAgICAgICAgICAgICAg
ICAgICA9IFtkXS50b1N0cmluZygpPGJyPgogICAgICAgICAgICAgICAgICAgID0gW2RdLmpvaW4o
KTxicj4KICAgICAgICAgICAgICAgICAgICA9IFRvU3RyaW5nKGQpPGJyPgogICAgICAgICAgICAg
ICAgICAgID0gVG9QcmltaXRpdmUoZCwgU3RyaW5nKTxicj4KICAgICAgICAgICAgICAgICAgICA9
IGQuW1tEZWZhdWx0VmFsdWVdXShTdHJpbmcpPGJyPgogICAgICAgICAgICAgICAgICAgIDxzcGFu
IGNsYXNzPSJvYmoiPj0gZC50b1N0cmluZygpPC9zcGFuPgogICAgICAgICAgICAgICAgPC90ZD4K
ICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0ib2JqIj4KICAgICAgICAgICAgICAgICAgICBmb28K
ICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICA8dGQgaWQ9ImFycmF5VG9Qcmlt
aXRpdmUiPjwvdGQ+CiAgICAgICAgICAgICAgICA8dGQ+Zm9vPC90ZD4KICAgICAgICAgICAgICAg
IDx0ZD5bb2JqZWN0XTwvdGQ+CiAgICAgICAgICAgICAgICA8dGQ+W29iamVjdCBTUEFOXTwvdGQ+
CiAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD5b
ZF0udG9TdHJpbmcoKTwvdGQ+CiAgICAgICAgICAgICAgICA8dGQ+W2RdLmpvaW4oKTxicj4KICAg
ICAgICAgICAgICAgICAgICA9IFRvU3RyaW5nKGQpPGJyPgogICAgICAgICAgICAgICAgICAgID0g
VG9QcmltaXRpdmUoZCwgU3RyaW5nKTxicj4KICAgICAgICAgICAgICAgICAgICA9IGQuW1tEZWZh
dWx0VmFsdWVdXShTdHJpbmcpPGJyPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJv
YmoiPj0gZC50b1N0cmluZygpPC9zcGFuPgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAg
ICAgICAgIDx0ZCBjbGFzcz0ib2JqIj4KICAgICAgICAgICAgICAgICAgICBmb28KICAgICAgICAg
ICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICA8dGQgaWQ9ImFycmF5UHJvdG9Ub1N0cmluZyI+
PC90ZD4KICAgICAgICAgICAgICAgIDx0ZD5mb288L3RkPgogICAgICAgICAgICAgICAgPHRkPltv
YmplY3RdPC90ZD4KICAgICAgICAgICAgICAgIDx0ZD5bb2JqZWN0IFNQQU5dPC90ZD4KICAgICAg
ICAgICAgPC90cj4KICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgPHRkPlN0cmluZyhb
ZF0pPC90ZD4KICAgICAgICAgICAgICAgIDx0ZD5Ub1N0cmluZyhkKTxicj4KICAgICAgICAgICAg
ICAgICAgICA9IFRvUHJpbWl0aXZlKGQsIFN0cmluZyk8YnI+CiAgICAgICAgICAgICAgICAgICAg
PSBkLltbRGVmYXVsdFZhbHVlXV0oU3RyaW5nKTxicj4KICAgICAgICAgICAgICAgICAgICA8c3Bh
biBjbGFzcz0ib2JqIj49IGQudG9TdHJpbmcoKTwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvdGQ+
CiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9Im9iaiI+CiAgICAgICAgICAgICAgICAgICAgZm9v
CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPHRkIGlkPSJhcnJheVRvU3Ry
aW5nIj48L3RkPgogICAgICAgICAgICAgICAgPHRkPmZvbzwvdGQ+CiAgICAgICAgICAgICAgICA8
dGQ+W29iamVjdF08L3RkPgogICAgICAgICAgICAgICAgPHRkPltvYmplY3QgU1BBTl08L3RkPgog
ICAgICAgICAgICA8L3RyPgogICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGQ+U3Ry
aW5nKGQpPC90ZD4KICAgICAgICAgICAgICAgIDx0ZD5Ub1N0cmluZyhkKTxicj4KICAgICAgICAg
ICAgICAgICAgICA9IFRvUHJpbWl0aXZlKGQsIFN0cmluZyk8YnI+CiAgICAgICAgICAgICAgICAg
ICAgPSBkLltbRGVmYXVsdFZhbHVlXV0oU3RyaW5nKTxicj4KICAgICAgICAgICAgICAgICAgICA8
c3BhbiBjbGFzcz0ib2JqIj49IGQudG9TdHJpbmcoKTwvc3Bhbj4KICAgICAgICAgICAgICAgIDwv
dGQ+CiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9Im9iaiI+CiAgICAgICAgICAgICAgICAgICAg
Zm9vCiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPHRkIGlkPSJUb1N0cmlu
ZyI+PC90ZD4KICAgICAgICAgICAgICAgIDx0ZD5mb288L3RkPgogICAgICAgICAgICAgICAgPHRk
PltvYmplY3RdPC90ZD4KICAgICAgICAgICAgICAgIDx0ZD5bb2JqZWN0IFNQQU5dPC90ZD4KICAg
ICAgICAgICAgPC90cj4KICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgPHRkPmQgKyAi
IjwvdGQ+CiAgICAgICAgICAgICAgICA8dGQ+VG9QcmltaXRpdmUoZCk8YnI+CiAgICAgICAgICAg
ICAgICAgICAgPSBkLltbRGVmYXVsdFZhbHVlXV0oPHNwYW4gY2xhc3M9Im9iaiI+TnVtYmVyPC9z
cGFuPik8YnI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im9iaiI+PSBkLnZhbHVl
T2YoKTwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICA8dGQgY2xh
c3M9Im9iaiI+CiAgICAgICAgICAgICAgICAgICAgYmFyCiAgICAgICAgICAgICAgICA8L3RkPgog
ICAgICAgICAgICAgICAgPHRkIGlkPSJUb1ByaW1pdGl2ZSI+PC90ZD4KICAgICAgICAgICAgICAg
IDx0ZD5bb2JqZWN0IEhUTUxTcGFuRWxlbWVudF08L3RkPgogICAgICAgICAgICAgICAgPHRkPltv
YmplY3RdPC90ZD4KICAgICAgICAgICAgICAgIDx0ZD5bb2JqZWN0IFNQQU5dPC90ZD4KICAgICAg
ICAgICAgPC90cj4KICAgICAgICA8L3Rib2R5PgogICAgPC90YWJsZT4KICAgIDxzY3JpcHQgdHlw
ZT0idGV4dC9qYXZhc2NyaXB0Ij4KICAgICAgICBmdW5jdGlvbiBzZXRJbm5lclRleHQoaWQsIHRl
eHQpCiAgICAgICAgewogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuaW5u
ZXJIVE1MID0gdGV4dDsKICAgICAgICB9CiAgICAKICAgICAgICB2YXIgZCA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ3NwYW4nKTsKICAgICAgICBkLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7IHJl
dHVybiAiZm9vIiB9OwogICAgICAgIGQudmFsdWVPZiA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gImJh
ciIgfTsKICAgICAgICBzZXRJbm5lclRleHQoJ2FycmF5VG9QcmltaXRpdmUnLCBbZF0gKyAiIik7
CiAgICAgICAgc2V0SW5uZXJUZXh0KCdhcnJheVByb3RvVG9TdHJpbmcnLCBbZF0udG9TdHJpbmco
KSk7CiAgICAgICAgc2V0SW5uZXJUZXh0KCdhcnJheVRvU3RyaW5nJywgU3RyaW5nKFtkXSkpOwog
ICAgICAgIHNldElubmVyVGV4dCgnVG9TdHJpbmcnLCBTdHJpbmcoZCkpOwogICAgICAgIHNldElu
bmVyVGV4dCgnVG9QcmltaXRpdmUnLCBkICsgIiIpOwogICAgPC9zY3JpcHQ+CjwvYm9keT4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>13473</attachid>
            <date>2007-03-04 11:32:11 -0800</date>
            <delta_ts>2007-05-31 16:46:16 -0700</delta_ts>
            <desc>Unfinished patch</desc>
            <filename>10782_r0.patch</filename>
            <type>text/plain</type>
            <size>10523</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMva2pzX2JpbmRpbmcuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvanMva2pzX2JpbmRpbmcuY3BwCShyZXZpc2lvbiAxODQ4NCkKKysr
IFdlYkNvcmUvYmluZGluZ3MvanMva2pzX2JpbmRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
NSwxMSArNTUsNiBAQCB0eXBlZGVmIEhhc2hNYXA8dm9pZCosIERPTU9iamVjdCo+IERPTU9iCiB0
eXBlZGVmIEhhc2hNYXA8Tm9kZSosIERPTU5vZGUqPiBOb2RlTWFwOwogdHlwZWRlZiBIYXNoTWFw
PERvY3VtZW50KiwgTm9kZU1hcCo+IE5vZGVQZXJEb2NNYXA7CiAKLVVTdHJpbmcgRE9NT2JqZWN0
Ojp0b1N0cmluZyhFeGVjU3RhdGUqKSBjb25zdAotewotICAgIHJldHVybiAiW29iamVjdCAiICsg
Y2xhc3NOYW1lKCkgKyAiXSI7Ci19Ci0KIC8vIEZvciBkZWJ1Z2dpbmcsIGtlZXAgYSBzZXQgb2Yg
d3JhcHBlcnMgY3VycmVudGx5IHJlZ2lzdGVyZWQsIGFuZCBjaGVjayB0aGF0CiAvLyBhbGwgYXJl
IHVucmVnaXN0ZXJlZCBiZWZvcmUgdGhleSBhcmUgZGVzdHJveWVkLiBUaGlzIGhhcyBoZWxwZWQg
dXMgZml4IGF0CiAvLyBsZWFzdCBvbmUgYnVnLgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9r
anNfYmluZGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX2JpbmRp
bmcuaAkocmV2aXNpb24gMTg0ODQpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19iaW5kaW5n
LmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDggKzUyLDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAjaWZu
ZGVmIE5ERUJVRwogICAgICAgICB2aXJ0dWFsIH5ET01PYmplY3QoKTsKICNlbmRpZgotICAgIHB1
YmxpYzoKLSAgICAgICAgdmlydHVhbCBVU3RyaW5nIHRvU3RyaW5nKEV4ZWNTdGF0ZSopIGNvbnN0
OwogICAgIH07CiAKICAgICBjbGFzcyBET01Ob2RlOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9q
cy9ranNfZG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19kb20u
Y3BwCShyZXZpc2lvbiAxODQ4NCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX2RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI2NywyMSArMjY3LDYgQEAgdm9pZCBET01Ob2RlOjpwdXRWYWx1
ZVByb3BlcnR5KEV4ZWNTdGF0ZQogICB9CiB9CiAKLUpTVmFsdWUqIERPTU5vZGU6OnRvUHJpbWl0
aXZlKEV4ZWNTdGF0ZSogZXhlYywgSlNUeXBlKSBjb25zdAotewotICBpZiAoIW1faW1wbCkKLSAg
ICByZXR1cm4ganNOdWxsKCk7Ci0KLSAgcmV0dXJuIGpzU3RyaW5nKHRvU3RyaW5nKGV4ZWMpKTsK
LX0KLQotVVN0cmluZyBET01Ob2RlOjp0b1N0cmluZyhFeGVjU3RhdGUqKSBjb25zdAotewotICAg
IGlmICghbV9pbXBsKQotICAgICAgICByZXR1cm4gIm51bGwiOwotICAgIHJldHVybiAiW29iamVj
dCAiICsgY2xhc3NOYW1lKCkgKyAiXSI7Ci19Ci0KIEpTVmFsdWUqIERPTU5vZGVQcm90b0Z1bmM6
OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0
IExpc3QgJmFyZ3MpCiB7CiAgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJkRPTU5vZGU6OmluZm8p
KQpAQCAtNzE5LDE0ICs3MDQsNiBAQCBET01Ob2RlTGlzdDo6fkRPTU5vZGVMaXN0KCkKICAgU2Ny
aXB0SW50ZXJwcmV0ZXI6OmZvcmdldERPTU9iamVjdChtX2ltcGwuZ2V0KCkpOwogfQogCi1KU1Zh
bHVlKiBET01Ob2RlTGlzdDo6dG9QcmltaXRpdmUoRXhlY1N0YXRlKiBleGVjLCBKU1R5cGUpIGNv
bnN0Ci17Ci0gIGlmICghbV9pbXBsKQotICAgIHJldHVybiBqc051bGwoKTsKLQotICByZXR1cm4g
anNTdHJpbmcodG9TdHJpbmcoZXhlYykpOwotfQotCiBKU1ZhbHVlKiBET01Ob2RlTGlzdDo6Z2V0
VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKICAgYXNz
ZXJ0KHRva2VuID09IExlbmd0aCk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19kb20u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19kb20uaAkocmV2aXNpb24g
MTg0ODQpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19kb20uaAkod29ya2luZyBjb3B5KQpA
QCAtODcsOCArODcsNiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBlbnVtIHsgTGVuZ3RoLCBJdGVt
IH07CiAgICAgV2ViQ29yZTo6Tm9kZUxpc3QgKmltcGwoKSBjb25zdCB7IHJldHVybiBtX2ltcGwu
Z2V0KCk7IH0KIAotICAgIHZpcnR1YWwgSlNWYWx1ZSAqdG9QcmltaXRpdmUoRXhlY1N0YXRlICpl
eGVjLCBKU1R5cGUgcHJlZmVycmVkID0gVW5kZWZpbmVkVHlwZSkgY29uc3Q7Ci0KICAgcHJpdmF0
ZToKICAgICBzdGF0aWMgSlNWYWx1ZSAqaW5kZXhHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBKU09i
amVjdCAqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KTsKICAg
ICBzdGF0aWMgSlNWYWx1ZSAqbmFtZUdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICos
IGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpOwpJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy9qcy9ranNfZG9tbm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3MvanMva2pzX2RvbW5vZGUuaAkocmV2aXNpb24gMTg0ODQpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL2pzL2tqc19kb21ub2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDkgKzQ1LDYgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJl
dHVybiAmaW5mbzsgfQogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKICAgICAKLSAg
ICB2aXJ0dWFsIEpTVmFsdWUgKnRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIEpTVHlwZSBwcmVmZXJy
ZWQgPSBVbmRlZmluZWRUeXBlKSBjb25zdDsKLSAgICB2aXJ0dWFsIFVTdHJpbmcgdG9TdHJpbmco
RXhlY1N0YXRlKikgY29uc3Q7Ci0gICAgCiAgICAgZW51bSB7IE5vZGVOYW1lLCBOb2RlVmFsdWUs
IE5vZGVUeXBlLCBQYXJlbnROb2RlLCBQYXJlbnRFbGVtZW50LAogICAgICAgICBDaGlsZE5vZGVz
LCBGaXJzdENoaWxkLCBMYXN0Q2hpbGQsIFByZXZpb3VzU2libGluZywgTmV4dFNpYmxpbmcsIEl0
ZW0sCiAgICAgICAgIEF0dHJpYnV0ZXMsIE5hbWVzcGFjZVVSSSwgUHJlZml4LCBMb2NhbE5hbWUs
IE93bmVyRG9jdW1lbnQsIEluc2VydEJlZm9yZSwKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMv
a2pzX2h0bWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX2h0bWwu
Y3BwCShyZXZpc2lvbiAxODQ4NCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX2h0bWwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDc0LDEyICsxMDc0LDEyIEBAIEpTVmFsdWUgKkpTSFRNTEVs
ZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAot
VVN0cmluZyBKU0hUTUxFbGVtZW50Ojp0b1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitK
U1ZhbHVlKiBKU0hUTUxFbGVtZW50OjpkZWZhdWx0VmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU1R5
cGUgaGludCkgY29uc3QKIHsKICAgICBpZiAoaW1wbCgpLT5oYXNUYWdOYW1lKGFUYWcpKQotICAg
ICAgICByZXR1cm4gVVN0cmluZyhzdGF0aWNfY2FzdDxjb25zdCBIVE1MQW5jaG9yRWxlbWVudCo+
KGltcGwoKSktPmhyZWYoKSk7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gSlNFbGVtZW50Ojp0
b1N0cmluZyhleGVjKTsKKyAgICAgICAgcmV0dXJuIGpzU3RyaW5nKHN0YXRpY19jYXN0PGNvbnN0
IEhUTUxBbmNob3JFbGVtZW50Kj4oaW1wbCgpKS0+aHJlZigpKTsKKworICAgIHJldHVybiBKU0Vs
ZW1lbnQ6OmRlZmF1bHRWYWx1ZShleGVjLCBoaW50KTsKIH0KIAogc3RhdGljIEhUTUxGb3JtRWxl
bWVudCogZ2V0Rm9ybShIVE1MRWxlbWVudCogZWxlbWVudCkKSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvanMva2pzX2h0bWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19o
dG1sLmgJKHJldmlzaW9uIDE4NDg0KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfaHRtbC5o
CSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIEpT
VmFsdWUqIGdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlKiwgaW50IHRva2VuKSBjb25zdDsKICAg
ICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSwgSlNWYWx1ZSosIGludCBhdHRyID0gTm9uZSk7CiAgICAgdm9pZCBwdXRWYWx1ZVByb3Bl
cnR5KEV4ZWNTdGF0ZSosIGludCB0b2tlbiwgSlNWYWx1ZSosIGludCk7Ci0gICAgdmlydHVhbCBV
U3RyaW5nIHRvU3RyaW5nKEV4ZWNTdGF0ZSopIGNvbnN0OworICAgIHZpcnR1YWwgSlNWYWx1ZSog
ZGVmYXVsdFZhbHVlKEV4ZWNTdGF0ZSosIEpTVHlwZSBoaW50KSBjb25zdDsKICAgICB2aXJ0dWFs
IHZvaWQgcHVzaEV2ZW50SGFuZGxlclNjb3BlKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW4gJnNjb3Bl
KSBjb25zdDsKICAgICB2aXJ0dWFsIEpTVmFsdWUqIGNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBMaXN0JiBhcmdzKTsKICAgICB2aXJ0dWFsIGJvb2wg
aW1wbGVtZW50c0NhbGwoKSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMva2pzX3dp
bmRvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfd2luZG93LmNw
cAkocmV2aXNpb24gMTg0ODQpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc193aW5kb3cuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNyArMTI3LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
Y29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQogICAg
IHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKICAgICBlbnVtIHsgQmFjaywgRm9yd2FyZCwg
R28sIExlbmd0aCB9OwotICAgIHZpcnR1YWwgVVN0cmluZyB0b1N0cmluZyhFeGVjU3RhdGUgKmV4
ZWMpIGNvbnN0OwogICAgIHZvaWQgZGlzY29ubmVjdEZyYW1lKCkgeyBtX2ZyYW1lID0gMDsgfQog
ICBwcml2YXRlOgogICAgIEZyYW1lKiBtX2ZyYW1lOwpAQCAtMTQzLDcgKzE0Miw2IEBAIHB1Ymxp
YzoKICAgICB9CiAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUg
KiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwogICAgIEpTVmFsdWUgKmdldFZh
bHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pOwotICAgIHZpcnR1YWwgVVN0
cmluZyB0b1N0cmluZyhFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0OwogICAgIGVudW0geyBMZW5ndGgs
IExvY2F0aW9uIH07CiAgICAgdm9pZCBkaXNjb25uZWN0RnJhbWUoKSB7IG1fZnJhbWUgPSAwOyB9
CiAgIHByaXZhdGU6CkBAIC00ODcsOSArNDg1LDkgQEAgdm9pZCBXaW5kb3c6Om1hcmsoKQogICAg
IG1fdG9vbGJhci0+bWFyaygpOwogfQogCi1VU3RyaW5nIFdpbmRvdzo6dG9TdHJpbmcoRXhlY1N0
YXRlICopIGNvbnN0CitKU1ZhbHVlICpXaW5kb3c6OmRlZmF1bHRWYWx1ZShFeGVjU3RhdGUgKiwg
SlNUeXBlKSBjb25zdAogewotICByZXR1cm4gIltvYmplY3QgV2luZG93XSI7CisgICAgcmV0dXJu
IGpzU3RyaW5nKCJbb2JqZWN0IFdpbmRvd10iKTsKIH0KIAogc3RhdGljIGJvb2wgYWxsb3dQb3BV
cChFeGVjU3RhdGUgKmV4ZWMsIFdpbmRvdyAqd2luZG93KQpAQCAtMjA2MCwxMSArMjA1OCw2IEBA
IGJvb2wgRnJhbWVBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWMKICAgcmV0dXJuIEpTT2Jq
ZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAot
VVN0cmluZyBGcmFtZUFycmF5Ojp0b1N0cmluZyhFeGVjU3RhdGUgKikgY29uc3QKLXsKLSAgcmV0
dXJuICJbb2JqZWN0IEZyYW1lQXJyYXldIjsKLX0KLQogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBM
b2NhdGlvbiBPYmplY3QgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKIGNvbnN0IENsYXNzSW5m
byBMb2NhdGlvbjo6aW5mbyA9IHsgIkxvY2F0aW9uIiwgMCwgJkxvY2F0aW9uVGFibGUsIDAgfTsK
QEAgLTIyMDMsMjEgKzIxOTYsNiBAQCB2b2lkIExvY2F0aW9uOjpwdXQoRXhlY1N0YXRlICpleGVj
LCBjb25zCiAgIH0KIH0KIAotSlNWYWx1ZSAqTG9jYXRpb246OnRvUHJpbWl0aXZlKEV4ZWNTdGF0
ZSAqZXhlYywgSlNUeXBlKSBjb25zdAotewotICByZXR1cm4ganNTdHJpbmcodG9TdHJpbmcoZXhl
YykpOwotfQotCi1VU3RyaW5nIExvY2F0aW9uOjp0b1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpIGNv
bnN0Ci17Ci0gIGlmICghbV9mcmFtZSB8fCAhV2luZG93OjpyZXRyaWV2ZVdpbmRvdyhtX2ZyYW1l
KS0+aXNTYWZlU2NyaXB0KGV4ZWMpKQotICAgIHJldHVybiBVU3RyaW5nKCk7Ci0KLSAgaWYgKCFt
X2ZyYW1lLT5sb2FkZXIoKS0+dXJsKCkuaGFzUGF0aCgpKQotICAgIHJldHVybiBtX2ZyYW1lLT5s
b2FkZXIoKS0+dXJsKCkucHJldHR5VVJMKCkrIi8iOwotICByZXR1cm4gbV9mcmFtZS0+bG9hZGVy
KCktPnVybCgpLnByZXR0eVVSTCgpOwotfQotCiBKU1ZhbHVlICpMb2NhdGlvbkZ1bmM6OmNhbGxB
c0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKnRoaXNPYmosIGNvbnN0IExpc3Qg
JmFyZ3MpCiB7CiAgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJkxvY2F0aW9uOjppbmZvKSkKQEAg
LTIyNjgsNyArMjI0NiwxMSBAQCBKU1ZhbHVlICpMb2NhdGlvbkZ1bmM6OmNhbGxBc0Z1bmN0aW9u
KEV4CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIExvY2F0aW9uOjpUb1N0cmluZzoK
LSAgICAgIHJldHVybiBqc1N0cmluZyhsb2NhdGlvbi0+dG9TdHJpbmcoZXhlYykpOworICAgICAg
ICBpZiAoIVdpbmRvdzo6cmV0cmlldmVXaW5kb3coZnJhbWUpLT5pc1NhZmVTY3JpcHQoZXhlYykp
CisgICAgICAgICAgICByZXR1cm4ganNTdHJpbmcoIiIpOworICAgICAgICBpZiAoIWZyYW1lLT5s
b2FkZXIoKS0+dXJsKCkuaGFzUGF0aCgpKQorICAgICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGZy
YW1lLT5sb2FkZXIoKS0+dXJsKCkucHJldHR5VVJMKCkrIi8iKTsKKyAgICAgIHJldHVybiBqc1N0
cmluZyhmcmFtZS0+bG9hZGVyKCktPnVybCgpLnByZXR0eVVSTCgpKTsKICAgICB9CiAgIH0KICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CkBAIC0yMzUyLDE2ICsyMzM0LDYgQEAgYm9vbCBTZWxlY3Rp
b246OmdldE93blByb3BlcnR5U2xvdChFeGVjUwogICByZXR1cm4gZ2V0U3RhdGljUHJvcGVydHlT
bG90PFNlbGVjdGlvbkZ1bmMsIFNlbGVjdGlvbiwgSlNPYmplY3Q+KGV4ZWMsICZTZWxlY3Rpb25U
YWJsZSwgdGhpcywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotSlNWYWx1ZSAqU2VsZWN0aW9u
Ojp0b1ByaW1pdGl2ZShFeGVjU3RhdGUgKmV4ZWMsIEpTVHlwZSkgY29uc3QKLXsKLSAgcmV0dXJu
IGpzU3RyaW5nKHRvU3RyaW5nKGV4ZWMpKTsKLX0KLQotVVN0cmluZyBTZWxlY3Rpb246OnRvU3Ry
aW5nKEV4ZWNTdGF0ZSAqKSBjb25zdAotewotICAgIHJldHVybiBVU3RyaW5nKG1fZnJhbWUtPnNl
bGVjdGlvbkNvbnRyb2xsZXIoKS0+dG9TdHJpbmcoKSk7Ci19Ci0KIEpTVmFsdWUgKlNlbGVjdGlv
bkZ1bmM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKnRoaXNPYmos
IGNvbnN0IExpc3QgJmFyZ3MpCiB7CiAgICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmU2VsZWN0
aW9uOjppbmZvKSkKQEAgLTI0NzcsMTEgKzI0NDksNiBAQCBKU1ZhbHVlICpIaXN0b3J5OjpnZXRW
YWx1ZVByb3BlcnR5KEV4ZWNTCiAgICAgcmV0dXJuIG1fZnJhbWUgPyBqc051bWJlcihtX2ZyYW1l
LT5sb2FkZXIoKS0+Z2V0SGlzdG9yeUxlbmd0aCgpKSA6IGpzTnVtYmVyKDApOwogfQogCi1VU3Ry
aW5nIEhpc3Rvcnk6OnRvU3RyaW5nKEV4ZWNTdGF0ZSAqZXhlYykgY29uc3QKLXsKLSAgcmV0dXJu
ICJbb2JqZWN0IEhpc3RvcnldIjsKLX0KLQogSlNWYWx1ZSAqSGlzdG9yeUZ1bmM6OmNhbGxBc0Z1
bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFy
Z3MpCiB7CiAgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJkhpc3Rvcnk6OmluZm8pKQpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfd2luZG93LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy9qcy9ranNfd2luZG93LmgJKHJldmlzaW9uIDE4NDg0KQorKysgV2ViQ29yZS9iaW5k
aW5ncy9qcy9ranNfd2luZG93LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzOSw3ICsxMzksNyBAQCBu
YW1lc3BhY2UgS0pTIHsKICAgICBKU0V2ZW50TGlzdGVuZXIgKmdldEpTRXZlbnRMaXN0ZW5lcihK
U1ZhbHVlKiwgYm9vbCBodG1sID0gZmFsc2UpOwogICAgIEpTVW5wcm90ZWN0ZWRFdmVudExpc3Rl
bmVyICpnZXRKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcihKU1ZhbHVlKiwgYm9vbCBodG1sID0g
ZmFsc2UpOwogICAgIHZvaWQgY2xlYXIoKTsKLSAgICB2aXJ0dWFsIFVTdHJpbmcgdG9TdHJpbmco
RXhlY1N0YXRlICopIGNvbnN0OworICAgIHZpcnR1YWwgSlNWYWx1ZSAqZGVmYXVsdFZhbHVlKEV4
ZWNTdGF0ZSAqZXhlYywgSlNUeXBlIGhpbnQpIGNvbnN0OwogCiAgICAgLy8gU2V0IHRoZSBjdXJy
ZW50ICJldmVudCIgb2JqZWN0CiAgICAgdm9pZCBzZXRDdXJyZW50RXZlbnQoV2ViQ29yZTo6RXZl
bnQqKTsKQEAgLTIyNyw4ICsyMjcsNiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICB2aXJ0dWFsIGJv
b2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJv
cGVydHlTbG90Jik7CiAgICAgSlNWYWx1ZSAqZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbikgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUgKmV4
ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgSlNWYWx1ZSAqdmFsdWUsIGludCBh
dHRyID0gTm9uZSk7Ci0gICAgdmlydHVhbCBKU1ZhbHVlICp0b1ByaW1pdGl2ZShFeGVjU3RhdGUg
KmV4ZWMsIEpTVHlwZSBwcmVmZXJyZWQpIGNvbnN0OwotICAgIHZpcnR1YWwgVVN0cmluZyB0b1N0
cmluZyhFeGVjU3RhdGUqKSBjb25zdDsKICAgICBlbnVtIHsgSGFzaCwgSHJlZiwgSG9zdG5hbWUs
IEhvc3QsIFBhdGhuYW1lLCBQb3J0LCBQcm90b2NvbCwgU2VhcmNoLCAKICAgICAgICAgICAgUmVw
bGFjZSwgUmVsb2FkLCBUb1N0cmluZywgQXNzaWduIH07CiAgICAgV2ViQ29yZTo6RnJhbWUqIGZy
YW1lKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZTsgfQpAQCAtMjQ0LDggKzI0Miw2IEBAIG5hbWVz
cGFjZSBLSlMgewogICBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xv
dChFeGVjU3RhdGUgKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwogICAgIEpT
VmFsdWUgKmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
OwotICAgIHZpcnR1YWwgSlNWYWx1ZSAqdG9QcmltaXRpdmUoRXhlY1N0YXRlICpleGVjLCBKU1R5
cGUgcHJlZmVycmVkKSBjb25zdDsKLSAgICB2aXJ0dWFsIFVTdHJpbmcgdG9TdHJpbmcoRXhlY1N0
YXRlKikgY29uc3Q7CiAgICAgZW51bSB7IEFuY2hvck5vZGUsIEFuY2hvck9mZnNldCwgRm9jdXNO
b2RlLCBGb2N1c09mZnNldCwgQmFzZU5vZGUsIEJhc2VPZmZzZXQsIEV4dGVudE5vZGUsIEV4dGVu
dE9mZnNldCwgCiAgICAgICAgICAgIElzQ29sbGFwc2VkLCBfVHlwZSwgUmFuZ2VDb3VudCwgQ29s
bGFwc2UsIENvbGxhcHNlVG9FbmQsIENvbGxhcHNlVG9TdGFydCwgRW1wdHksIFRvU3RyaW5nLCAK
ICAgICAgICAgICAgU2V0QmFzZUFuZEV4dGVudCwgU2V0UG9zaXRpb24sIE1vZGlmeSwgR2V0UmFu
Z2VBdCwgUmVtb3ZlQWxsUmFuZ2VzLCBBZGRSYW5nZSB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>14815</attachid>
            <date>2007-05-31 16:46:16 -0700</date>
            <delta_ts>2007-05-31 20:26:40 -0700</delta_ts>
            <desc>updated patch</desc>
            <filename>toStringPatch.diff</filename>
            <type>text/plain</type>
            <size>32774</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMTkyMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzUgQEAKKzIwMDctMDUtMzEgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXRjaCBm
b3IgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA3ODIKKyAgICAgICAg
Q2xhc3NlcyBzaG91bGQgbm90IG92ZXJyaWRlIEpTT2JqZWN0Ojp0b1N0cmluZyhFeGVjU3RhdGUg
KikKKworICAgICAgICBSZW1vdmUgYWxsIG92ZXJyaWRlcyBvZiBKU09iamVjdDo6dG9TdHJpbmcg
YW5kIEpTT2JqZWN0Ojp0b1ByaW1pdGl2ZQorICAgICAgICB3aGljaCBpcyBhIGJhZCBwcmFjdGlj
ZS4gIEluIHN0ZWFkLCBpZiBhbiBvYmplY3QsIGxpa2UgdGhlIAorICAgICAgICBIVE1MQW5jaG9y
RWxlbWVudCwgbmVlZHMgdG8gb3ZlcnJpZGUgdG8gdG9TdHJpbmcsIGl0IHNob3VsZCBhZGQKKyAg
ICAgICAgYSBmdW5jdGlvbiB0byB0aGUgSlMgb2JqZWN0IHdoaWNoIHdpbGwgYmUgY2FsbGVkIHdo
ZW4gbmVlZGVkLgorCisgICAgICAgIFRlc3Q6IGZhc3QvanMvdG9TdHJpbmctYW5kLXZhbHVlT2Yt
b3ZlcnJpZGUuaHRtbAorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTEFuY2hvckVsZW1lbnRDdXN0b20uY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL2pzL2tqc19iaW5kaW5nLmNwcDoKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9ranNfYmluZGluZy5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL2tq
c19kb20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL2tqc19kb20uaDoKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9ranNfZG9tbm9kZS5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL2tqc193aW5k
b3cuY3BwOgorICAgICAgICAoS0pTOjpIaXN0b3J5OjopOgorICAgICAgICAoS0pTOjpMb2NhdGlv
bkZ1bmM6OmNhbGxBc0Z1bmN0aW9uKToKKyAgICAgICAgKEtKUzo6U2VsZWN0aW9uRnVuYzo6Y2Fs
bEFzRnVuY3Rpb24pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL2tqc193aW5kb3cuaDoKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKiBodG1s
L0hUTUxBbmNob3JFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBbmNob3JFbGVt
ZW50Ojp0b1N0cmluZyk6CisgICAgICAgICogaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5oOgorICAg
ICAgICAqIGh0bWwvSFRNTEFuY2hvckVsZW1lbnQuaWRsOgorCiAyMDA3LTA1LTMxICBBbHAgVG9r
ZXIgIDxhbHAudG9rZXJAY29sbGFib3JhLmNvLnVrPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5p
a28uCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2
aXNpb24gMjE5MTgpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtMjkyMCw3ICsyOTIwLDYgQEAKIAkJQkNFQjM3NzYwOUI3QkIw
RDAwQ0IzOEIxIC8qIEZvbnRGYWxsYmFja0xpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRUIzNzc1MDlCN0JCMEQwMENCMzhCMSAvKiBGb250RmFs
bGJhY2tMaXN0LmggKi87IH07CiAJCUJDRUYzNDM0MDg3QjU2M0UwMEJCRjgzMyAvKiBIVE1MRWxl
bWVudEZhY3RvcnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQkNFRjM0MzIwODdCNTYzRTAwQkJGODMzIC8qIEhUTUxFbGVtZW50RmFjdG9yeS5jcHAg
Ki87IH07CiAJCUJDRUYzNDM1MDg3QjU2M0UwMEJCRjgzMyAvKiBIVE1MRWxlbWVudEZhY3Rvcnku
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRUYzNDMz
MDg3QjU2M0UwMEJCRjgzMyAvKiBIVE1MRWxlbWVudEZhY3RvcnkuaCAqLzsgfTsKLQkJQkNGNDEx
NzgwQkZDQzc2QTAwMTI1NjIyIC8qIEpTSFRNTEFuY2hvckVsZW1lbnRDdXN0b20uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGNDExNzcwQkZDQzc2
QTAwMTI1NjIyIC8qIEpTSFRNTEFuY2hvckVsZW1lbnRDdXN0b20uY3BwICovOyB9OwogCQlCQ0Y3
QzA3ODBBMTY4MEMwMDAzMkY3NUIgLyogRm9udEZhbGxiYWNrTGlzdC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0Y3QzA3NzBBMTY4MEMwMDAzMkY3
NUIgLyogRm9udEZhbGxiYWNrTGlzdC5jcHAgKi87IH07CiAJCUJDRjdDMEI4MEExNjg3Q0MwMDMy
Rjc1QiAvKiBGb250Q2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEJDRjdDMEI3MEExNjg3Q0MwMDMyRjc1QiAvKiBGb250Q2FjaGUuaCAqLzsgfTsK
IAkJQkNGN0MyMzQwQTE2QjVGODAwMzJGNzVCIC8qIEZvbnRDYWNoZU1hYy5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRjdDMjMzMEExNkI1RjgwMDMy
Rjc1QiAvKiBGb250Q2FjaGVNYWMubW0gKi87IH07CkBAIC02MjAxLDcgKzYyMDAsNiBAQAogCQlC
Q0VCMzc3NTA5QjdCQjBEMDBDQjM4QjEgLyogRm9udEZhbGxiYWNrTGlzdC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9udEZhbGxiYWNrTGlzdC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlCQ0VGMzQzMjA4N0I1NjNFMDBCQkY4MzMgLyogSFRNTEVsZW1lbnRG
YWN0b3J5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEhUTUxFbGVtZW50RmFjdG9yeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlCQ0VGMzQzMzA4N0I1NjNFMDBCQkY4
MzMgLyogSFRNTEVsZW1lbnRGYWN0b3J5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxFbGVtZW50RmFjdG9yeS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKLQkJQkNGNDExNzcwQkZD
Qzc2QTAwMTI1NjIyIC8qIEpTSFRNTEFuY2hvckVsZW1lbnRDdXN0b20uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNIVE1MQW5jaG9yRWxlbWVudEN1c3RvbS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDRjdDMDc3MEExNjgwQzAwMDMyRjc1QiAv
KiBGb250RmFsbGJhY2tMaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBGb250RmFsbGJhY2tMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QkNGN0MwQjcwQTE2ODdDQzAwMzJGNzVCIC8qIEZvbnRDYWNoZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRm9udENhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUJDRjdDMjMzMEExNkI1RjgwMDMyRjc1QiAvKiBGb250Q2FjaGVNYWMubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRm9udENhY2hlTWFjLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTI0OCw3ICs5MjQ2LDYgQEAKIAkJCQlCQzU4MjVGMjBD
MEI4OTM4MDA1M0YxQjUgLyogSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcCAqLywKIAkJ
CQlCQzIwRkI3RTBDMEU4RTZDMDBEMTQ0N0YgLyogSlNDU1NWYWx1ZUN1c3RvbS5jcHAgKi8sCiAJ
CQkJOTI5MjY0NzYwQjYxRkM3MjAwQjQxRDM0IC8qIEpTRG9jdW1lbnRDdXN0b20uY3BwICovLAot
CQkJCUJDRjQxMTc3MEJGQ0M3NkEwMDEyNTYyMiAvKiBKU0hUTUxBbmNob3JFbGVtZW50Q3VzdG9t
LmNwcCAqLywKIAkJCQlCQzRFREVGMzBDMDhGM0ZCMDA3RURENDkgLyogSlNIVE1MQXBwbGV0RWxl
bWVudEN1c3RvbS5jcHAgKi8sCiAJCQkJQkM1MTU4MEEwQzAzRDQwNDAwOEJCMEVFIC8qIEpTSFRN
TERvY3VtZW50Q3VzdG9tLmNwcCAqLywKIAkJCQlCQzU4MjNGNDBDMEE5OERGMDA1M0YxQjUgLyog
SlNIVE1MRWxlbWVudEN1c3RvbS5jcHAgKi8sCkBAIC0xMjg3Nyw3ICsxMjg3NCw2IEBACiAJCQkJ
OTM3OTlFRjgwQkYyNzQzNjAwRDBGMjMwIC8qIFJlbmRlcldvcmRCcmVhay5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkzNzkxOUMxOTBCRjM3NUREMDA5NTY5OTggLyogU2hhcGVBcmFiaWMuYyBpbiBT
b3VyY2VzICovLAogCQkJCUJDNTg4QjRCMEJGQTcyM0MwMEVFNjc5RSAvKiBIVE1MUGFyc2VyRXJy
b3JDb2Rlcy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCQ0Y0MTE3ODBCRkNDNzZBMDAxMjU2MjIg
LyogSlNIVE1MQW5jaG9yRWxlbWVudEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0Ex
NjlBMjBCRkQ1NUI0MDAxOUNBNzYgLyogSlNIVE1MVGFibGVDYXB0aW9uRWxlbWVudC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCQzA2RUQwNjBCRkQ1QkFFMDA4NTZFOUQgLyogSlNIVE1MVGFibGVT
ZWN0aW9uRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzA2RUQ5RDBCRkQ2NjA2MDA4
NTZFOUQgLyogSlNIVE1MVGFibGVDb2xFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxBbmNob3JFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEFuY2hvckVsZW1lbnRDdXN0b20uY3Bw
CShyZXZpc2lvbiAyMTkxOCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQW5jaG9yRWxl
bWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNDUgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJKU0hUTUxBbmNob3JFbGVtZW50LmgiCi0K
LSNpbmNsdWRlICJIVE1MQW5jaG9yRWxlbWVudC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LS8vIEltcGxpY2l0IHRvU3RyaW5nCi1LSlM6OlVTdHJpbmcgSlNIVE1MQW5jaG9yRWxlbWVudDo6
dG9TdHJpbmcoS0pTOjpFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEtKUzo6
VVN0cmluZyhzdGF0aWNfY2FzdDxjb25zdCBIVE1MQW5jaG9yRWxlbWVudCo+KGltcGwoKSktPmhy
ZWYoKSk7Ci19Ci0KLS8vIEV4cGxpY2l0IHRvU3RyaW5nCi1LSlM6OkpTVmFsdWUqIEpTSFRNTEFu
Y2hvckVsZW1lbnQ6OnRvU3RyaW5nKEtKUzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBLSlM6Okxp
c3QmKQotewotICAgIHJldHVybiBLSlM6OmpzU3RyaW5nKHRvU3RyaW5nKGV4ZWMpKTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfYmlu
ZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfYmluZGluZy5j
cHAJKHJldmlzaW9uIDIxOTE4KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfYmluZGluZy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDExICs1OCw2IEBAIHR5cGVkZWYgSGFzaE1hcDx2b2lk
KiwgRE9NT2JqZWN0Kj4gRE9NT2IKIHR5cGVkZWYgSGFzaE1hcDxOb2RlKiwgRE9NTm9kZSo+IE5v
ZGVNYXA7CiB0eXBlZGVmIEhhc2hNYXA8RG9jdW1lbnQqLCBOb2RlTWFwKj4gTm9kZVBlckRvY01h
cDsKIAotVVN0cmluZyBET01PYmplY3Q6OnRvU3RyaW5nKEV4ZWNTdGF0ZSopIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuICJbb2JqZWN0ICIgKyBjbGFzc05hbWUoKSArICJdIjsKLX0KLQogLy8gRm9yIGRl
YnVnZ2luZywga2VlcCBhIHNldCBvZiB3cmFwcGVycyBjdXJyZW50bHkgcmVnaXN0ZXJlZCwgYW5k
IGNoZWNrIHRoYXQKIC8vIGFsbCBhcmUgdW5yZWdpc3RlcmVkIGJlZm9yZSB0aGV5IGFyZSBkZXN0
cm95ZWQuIFRoaXMgaGFzIGhlbHBlZCB1cyBmaXggYXQKIC8vIGxlYXN0IG9uZSBidWcuCkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19iaW5kaW5nLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy9qcy9ranNfYmluZGluZy5oCShyZXZpc2lvbiAyMTkxOCkKKysrIFdlYkNvcmUv
YmluZGluZ3MvanMva2pzX2JpbmRpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsOCArNTgsNiBA
QCBuYW1lc3BhY2UgS0pTIHsKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgIHZpcnR1YWwgfkRPTU9i
amVjdCgpOwogI2VuZGlmCi0gICAgcHVibGljOgotICAgICAgICB2aXJ0dWFsIFVTdHJpbmcgdG9T
dHJpbmcoRXhlY1N0YXRlKikgY29uc3Q7CiAgICAgfTsKIAogICAgIGNsYXNzIERPTU5vZGU7Cklu
ZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19kb20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvanMva2pzX2RvbS5jcHAJKHJldmlzaW9uIDIxOTE4KQorKysgV2ViQ29yZS9i
aW5kaW5ncy9qcy9ranNfZG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY4LDIxICsyNjgsNiBA
QCB2b2lkIERPTU5vZGU6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlCiAgIH0KIH0KIAotSlNW
YWx1ZSogRE9NTm9kZTo6dG9QcmltaXRpdmUoRXhlY1N0YXRlKiBleGVjLCBKU1R5cGUpIGNvbnN0
Ci17Ci0gIGlmICghbV9pbXBsKQotICAgIHJldHVybiBqc051bGwoKTsKLQotICByZXR1cm4ganNT
dHJpbmcodG9TdHJpbmcoZXhlYykpOwotfQotCi1VU3RyaW5nIERPTU5vZGU6OnRvU3RyaW5nKEV4
ZWNTdGF0ZSopIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2ltcGwpCi0gICAgICAgIHJldHVybiAibnVs
bCI7Ci0gICAgcmV0dXJuICJbb2JqZWN0ICIgKyBjbGFzc05hbWUoKSArICJdIjsKLX0KLQogSlNW
YWx1ZSogRE9NTm9kZVByb3RvdHlwZUZ1bmN0aW9uOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewogICBpZiAoIXRo
aXNPYmotPmluaGVyaXRzKCZET01Ob2RlOjppbmZvKSkKQEAgLTcwNiwxNCArNjkxLDYgQEAgRE9N
Tm9kZUxpc3Q6On5ET01Ob2RlTGlzdCgpCiAgIFNjcmlwdEludGVycHJldGVyOjpmb3JnZXRET01P
YmplY3QobV9pbXBsLmdldCgpKTsKIH0KIAotSlNWYWx1ZSogRE9NTm9kZUxpc3Q6OnRvUHJpbWl0
aXZlKEV4ZWNTdGF0ZSogZXhlYywgSlNUeXBlKSBjb25zdAotewotICBpZiAoIW1faW1wbCkKLSAg
ICByZXR1cm4ganNOdWxsKCk7Ci0KLSAgcmV0dXJuIGpzU3RyaW5nKHRvU3RyaW5nKGV4ZWMpKTsK
LX0KLQogSlNWYWx1ZSogRE9NTm9kZUxpc3Q6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlKiBl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAgIEFTU0VSVCh0b2tlbiA9PSBMZW5ndGgpOwpJbmRl
eDogV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfZG9tLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy9qcy9ranNfZG9tLmgJKHJldmlzaW9uIDIxOTE4KQorKysgV2ViQ29yZS9iaW5kaW5n
cy9qcy9ranNfZG9tLmgJKHdvcmtpbmcgY29weSkKQEAgLTg4LDggKzg4LDYgQEAgbmFtZXNwYWNl
IEtKUyB7CiAgICAgZW51bSB7IExlbmd0aCwgSXRlbSB9OwogICAgIFdlYkNvcmU6Ok5vZGVMaXN0
ICppbXBsKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsLmdldCgpOyB9CiAKLSAgICB2aXJ0dWFsIEpT
VmFsdWUgKnRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSAqZXhlYywgSlNUeXBlIHByZWZlcnJlZCA9IFVu
ZGVmaW5lZFR5cGUpIGNvbnN0OwotCiAgIHByaXZhdGU6CiAgICAgc3RhdGljIEpTVmFsdWUgKmlu
ZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKiwgY29uc3QgSWRlbnRpZmllciYs
IGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCk7CiAgICAgc3RhdGljIEpTVmFsdWUgKm5hbWVHZXR0
ZXIoRXhlY1N0YXRlICpleGVjLCBKU09iamVjdCAqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3Qg
UHJvcGVydHlTbG90JiBzbG90KTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMva2pzX2RvbW5v
ZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19kb21ub2RlLmgJKHJl
dmlzaW9uIDIxOTE4KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfZG9tbm9kZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NCwxMCArNDQsNyBAQCBwdWJsaWM6CiAgICAgV2ViQ29yZTo6Tm9kZSAq
aW1wbCgpIGNvbnN0IHsgcmV0dXJuIG1faW1wbC5nZXQoKTsgfQogICAgIHZpcnR1YWwgY29uc3Qg
Q2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQogICAgIHN0YXRp
YyBjb25zdCBDbGFzc0luZm8gaW5mbzsKLSAgICAKLSAgICB2aXJ0dWFsIEpTVmFsdWUgKnRvUHJp
bWl0aXZlKEV4ZWNTdGF0ZSosIEpTVHlwZSBwcmVmZXJyZWQgPSBVbmRlZmluZWRUeXBlKSBjb25z
dDsKLSAgICB2aXJ0dWFsIFVTdHJpbmcgdG9TdHJpbmcoRXhlY1N0YXRlKikgY29uc3Q7Ci0gICAg
CisKICAgICBlbnVtIHsgTm9kZU5hbWUsIE5vZGVWYWx1ZSwgTm9kZVR5cGUsIFBhcmVudE5vZGUs
IFBhcmVudEVsZW1lbnQsCiAgICAgICAgIENoaWxkTm9kZXMsIEZpcnN0Q2hpbGQsIExhc3RDaGls
ZCwgUHJldmlvdXNTaWJsaW5nLCBOZXh0U2libGluZywgQmFzZVVSSSwKICAgICAgICAgQXR0cmli
dXRlcywgTmFtZXNwYWNlVVJJLCBQcmVmaXgsIExvY2FsTmFtZSwgT3duZXJEb2N1bWVudCwgSW5z
ZXJ0QmVmb3JlLApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfd2luZG93LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc193aW5kb3cuY3BwCShyZXZpc2lvbiAy
MTkxOCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX3dpbmRvdy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE2OSw3ICsxNjksNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBjb25zdCBDbGFzc0lu
Zm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CiAgICAgc3RhdGljIGNvbnN0
IENsYXNzSW5mbyBpbmZvOwogICAgIGVudW0geyBCYWNrLCBGb3J3YXJkLCBHbywgTGVuZ3RoIH07
Ci0gICAgdmlydHVhbCBVU3RyaW5nIHRvU3RyaW5nKEV4ZWNTdGF0ZSAqZXhlYykgY29uc3Q7CiAg
ICAgdm9pZCBkaXNjb25uZWN0RnJhbWUoKSB7IG1fZnJhbWUgPSAwOyB9CiAgIHByaXZhdGU6CiAg
ICAgRnJhbWUqIG1fZnJhbWU7CkBAIC0xODUsNyArMTg0LDYgQEAgcHVibGljOgogICAgIH0KICAg
ICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVu
dGlmaWVyJiwgUHJvcGVydHlTbG90Jik7CiAgICAgSlNWYWx1ZSAqZ2V0VmFsdWVQcm9wZXJ0eShF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbik7Ci0gICAgdmlydHVhbCBVU3RyaW5nIHRvU3RyaW5n
KEV4ZWNTdGF0ZSAqZXhlYykgY29uc3Q7CiAgICAgZW51bSB7IExlbmd0aCwgTG9jYXRpb24gfTsK
ICAgICB2b2lkIGRpc2Nvbm5lY3RGcmFtZSgpIHsgbV9mcmFtZSA9IDA7IH0KICAgcHJpdmF0ZToK
QEAgLTUyMywxMSArNTIxLDYgQEAgdm9pZCBXaW5kb3c6Om1hcmsoKQogICAgIGQtPm1fdG9vbGJh
ci0+bWFyaygpOwogfQogCi1VU3RyaW5nIFdpbmRvdzo6dG9TdHJpbmcoRXhlY1N0YXRlICopIGNv
bnN0Ci17Ci0gIHJldHVybiAiW29iamVjdCBXaW5kb3ddIjsKLX0KLQogc3RhdGljIGJvb2wgYWxs
b3dQb3BVcChFeGVjU3RhdGUgKmV4ZWMsIFdpbmRvdyAqd2luZG93KQogewogICAgIGlmICghd2lu
ZG93LT5mcmFtZSgpKQpAQCAtMjE1MiwxMSArMjE0NSw2IEBAIGJvb2wgRnJhbWVBcnJheTo6Z2V0
T3duUHJvcGVydHlTbG90KEV4ZWMKICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNs
b3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotVVN0cmluZyBGcmFtZUFycmF5Ojp0
b1N0cmluZyhFeGVjU3RhdGUgKikgY29uc3QKLXsKLSAgcmV0dXJuICJbb2JqZWN0IEZyYW1lQXJy
YXldIjsKLX0KLQogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBMb2NhdGlvbiBPYmplY3QgLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vCiAKIGNvbnN0IENsYXNzSW5mbyBMb2NhdGlvbjo6aW5mbyA9IHsg
IkxvY2F0aW9uIiwgMCwgJkxvY2F0aW9uVGFibGUsIDAgfTsKQEAgLTIzMDIsMjEgKzIyOTAsNiBA
QCB2b2lkIExvY2F0aW9uOjpwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zCiAgIH0KIH0KIAotSlNW
YWx1ZSAqTG9jYXRpb246OnRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSAqZXhlYywgSlNUeXBlKSBjb25z
dAotewotICByZXR1cm4ganNTdHJpbmcodG9TdHJpbmcoZXhlYykpOwotfQotCi1VU3RyaW5nIExv
Y2F0aW9uOjp0b1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0Ci17Ci0gIGlmICghbV9mcmFt
ZSB8fCAhV2luZG93OjpyZXRyaWV2ZVdpbmRvdyhtX2ZyYW1lKS0+aXNTYWZlU2NyaXB0KGV4ZWMp
KQotICAgIHJldHVybiBVU3RyaW5nKCk7Ci0KLSAgaWYgKCFtX2ZyYW1lLT5sb2FkZXIoKS0+dXJs
KCkuaGFzUGF0aCgpKQotICAgIHJldHVybiBtX2ZyYW1lLT5sb2FkZXIoKS0+dXJsKCkucHJldHR5
VVJMKCkrIi8iOwotICByZXR1cm4gbV9mcmFtZS0+bG9hZGVyKCktPnVybCgpLnByZXR0eVVSTCgp
OwotfQotCiBKU1ZhbHVlICpMb2NhdGlvbkZ1bmM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAq
ZXhlYywgSlNPYmplY3QgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7CiAgIGlmICghdGhp
c09iai0+aW5oZXJpdHMoJkxvY2F0aW9uOjppbmZvKSkKQEAgLTIzNjcsNyArMjM0MCwxMiBAQCBK
U1ZhbHVlICpMb2NhdGlvbkZ1bmM6OmNhbGxBc0Z1bmN0aW9uKEV4CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICBjYXNlIExvY2F0aW9uOjpUb1N0cmluZzoKLSAgICAgIHJldHVybiBqc1N0cmlu
Zyhsb2NhdGlvbi0+dG9TdHJpbmcoZXhlYykpOworICAgICAgICBpZiAoIWZyYW1lIHx8ICFXaW5k
b3c6OnJldHJpZXZlV2luZG93KGZyYW1lKS0+aXNTYWZlU2NyaXB0KGV4ZWMpKQorICAgICAgICAg
ICAgcmV0dXJuIGpzU3RyaW5nKCk7CisKKyAgICAgICAgaWYgKCFmcmFtZS0+bG9hZGVyKCktPnVy
bCgpLmhhc1BhdGgoKSkKKyAgICAgICAgICAgIHJldHVybiBqc1N0cmluZyhmcmFtZS0+bG9hZGVy
KCktPnVybCgpLnByZXR0eVVSTCgpICsgIi8iKTsKKyAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGZy
YW1lLT5sb2FkZXIoKS0+dXJsKCkucHJldHR5VVJMKCkpOwogICAgIH0KICAgfQogICByZXR1cm4g
anNVbmRlZmluZWQoKTsKQEAgLTI0NTEsMTYgKzI0MjksNiBAQCBib29sIFNlbGVjdGlvbjo6Z2V0
T3duUHJvcGVydHlTbG90KEV4ZWNTCiAgIHJldHVybiBnZXRTdGF0aWNQcm9wZXJ0eVNsb3Q8U2Vs
ZWN0aW9uRnVuYywgU2VsZWN0aW9uLCBKU09iamVjdD4oZXhlYywgJlNlbGVjdGlvblRhYmxlLCB0
aGlzLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi1KU1ZhbHVlICpTZWxlY3Rpb246OnRvUHJp
bWl0aXZlKEV4ZWNTdGF0ZSAqZXhlYywgSlNUeXBlKSBjb25zdAotewotICByZXR1cm4ganNTdHJp
bmcodG9TdHJpbmcoZXhlYykpOwotfQotCi1VU3RyaW5nIFNlbGVjdGlvbjo6dG9TdHJpbmcoRXhl
Y1N0YXRlICopIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFVTdHJpbmcobV9mcmFtZS0+c2VsZWN0aW9u
Q29udHJvbGxlcigpLT50b1N0cmluZygpKTsKLX0KLQogSlNWYWx1ZSAqU2VsZWN0aW9uRnVuYzo6
Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBKU09iamVjdCAqdGhpc09iaiwgY29uc3Qg
TGlzdCAmYXJncykKIHsKICAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZTZWxlY3Rpb246Omlu
Zm8pKQpAQCAtMjUwNCw3ICsyNDcyLDcgQEAgSlNWYWx1ZSAqU2VsZWN0aW9uRnVuYzo6Y2FsbEFz
RnVuY3Rpb24oRQogICAgICAgICAgICAgICAgIHMtPmFkZFJhbmdlKHRvUmFuZ2UoYXJnc1swXSkp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBTZWxlY3Rpb246OlRv
U3RyaW5nOgotICAgICAgICAgICAgICAgIHJldHVybiBqc1N0cmluZyhzLT50b1N0cmluZygpKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4ganNTdHJpbmcoZnJhbWUtPnNlbGVjdGlvbkNvbnRyb2xs
ZXIoKS0+dG9TdHJpbmcoKSk7CiAgICAgICAgIH0KICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4
ZWMsIGVjKTsKICAgICB9CkBAIC0yNTgwLDExICsyNTQ4LDYgQEAgSlNWYWx1ZSAqSGlzdG9yeTo6
Z2V0VmFsdWVQcm9wZXJ0eShFeGVjUwogICAgIHJldHVybiBtX2ZyYW1lID8ganNOdW1iZXIobV9m
cmFtZS0+bG9hZGVyKCktPmdldEhpc3RvcnlMZW5ndGgoKSkgOiBqc051bWJlcigwKTsKIH0KIAot
VVN0cmluZyBIaXN0b3J5Ojp0b1N0cmluZyhFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0Ci17Ci0gIHJl
dHVybiAiW29iamVjdCBIaXN0b3J5XSI7Ci19Ci0KIEpTVmFsdWUgKkhpc3RvcnlGdW5jOjpjYWxs
QXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICp0aGlzT2JqLCBjb25zdCBMaXN0
ICZhcmdzKQogewogICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZIaXN0b3J5OjppbmZvKSkKSW5k
ZXg6IFdlYkNvcmUvYmluZGluZ3MvanMva2pzX3dpbmRvdy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvanMva2pzX3dpbmRvdy5oCShyZXZpc2lvbiAyMTkxOCkKKysrIFdlYkNvcmUv
YmluZGluZ3MvanMva2pzX3dpbmRvdy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTMsNyArMTUzLDYg
QEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIgKmZpbmRP
ckNyZWF0ZUpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKEpTVmFsdWUqLCBib29sIGh0bWwgPSBm
YWxzZSk7CiAKICAgICB2b2lkIGNsZWFyKCk7Ci0gICAgdmlydHVhbCBVU3RyaW5nIHRvU3RyaW5n
KEV4ZWNTdGF0ZSAqKSBjb25zdDsKIAogICAgIC8vIFNldCB0aGUgY3VycmVudCAiZXZlbnQiIG9i
amVjdAogICAgIHZvaWQgc2V0Q3VycmVudEV2ZW50KFdlYkNvcmU6OkV2ZW50Kik7CkBAIC0yMzAs
OCArMjI5LDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgdmlydHVhbCBib29sIGdldE93blByb3Bl
cnR5U2xvdChFeGVjU3RhdGUgKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwog
ICAgIEpTVmFsdWUgKmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4p
IGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVu
dGlmaWVyICZwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgKnZhbHVlLCBpbnQgYXR0ciA9IE5vbmUpOwot
ICAgIHZpcnR1YWwgSlNWYWx1ZSAqdG9QcmltaXRpdmUoRXhlY1N0YXRlICpleGVjLCBKU1R5cGUg
cHJlZmVycmVkKSBjb25zdDsKLSAgICB2aXJ0dWFsIFVTdHJpbmcgdG9TdHJpbmcoRXhlY1N0YXRl
KikgY29uc3Q7CiAgICAgZW51bSB7IEhhc2gsIEhyZWYsIEhvc3RuYW1lLCBIb3N0LCBQYXRobmFt
ZSwgUG9ydCwgUHJvdG9jb2wsIFNlYXJjaCwgCiAgICAgICAgICAgIFJlcGxhY2UsIFJlbG9hZCwg
VG9TdHJpbmcsIEFzc2lnbiB9OwogICAgIFdlYkNvcmU6OkZyYW1lKiBmcmFtZSgpIGNvbnN0IHsg
cmV0dXJuIG1fZnJhbWU7IH0KQEAgLTI0Nyw4ICsyNDQsNiBAQCBuYW1lc3BhY2UgS0pTIHsKICAg
cHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlICos
IGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBKU1ZhbHVlICpnZXRWYWx1
ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKLSAgICB2aXJ0dWFs
IEpTVmFsdWUgKnRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSAqZXhlYywgSlNUeXBlIHByZWZlcnJlZCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCBVU3RyaW5nIHRvU3RyaW5nKEV4ZWNTdGF0ZSopIGNvbnN0Owog
ICAgIGVudW0geyBBbmNob3JOb2RlLCBBbmNob3JPZmZzZXQsIEZvY3VzTm9kZSwgRm9jdXNPZmZz
ZXQsIEJhc2VOb2RlLCBCYXNlT2Zmc2V0LCBFeHRlbnROb2RlLCBFeHRlbnRPZmZzZXQsIAogICAg
ICAgICAgICBJc0NvbGxhcHNlZCwgX1R5cGUsIFJhbmdlQ291bnQsIENvbGxhcHNlLCBDb2xsYXBz
ZVRvRW5kLCBDb2xsYXBzZVRvU3RhcnQsIEVtcHR5LCBUb1N0cmluZywgCiAgICAgICAgICAgIFNl
dEJhc2VBbmRFeHRlbnQsIFNldFBvc2l0aW9uLCBNb2RpZnksIEdldFJhbmdlQXQsIFJlbW92ZUFs
bFJhbmdlcywgQWRkUmFuZ2UgfTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gMjE5MTgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0zNjAsMTEgKzM2MCw2
IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAg
IHZpcnR1YWwgdm9pZCBtYXJrKCk7XG5cbiIpOwogICAgIH0KIAotICAgICMgQ3VzdG9tIHRvU3Ry
aW5nIGZ1bmN0aW9uCi0gICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1
c3RvbVRvU3RyaW5nIn0pIHsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2aXJ0
dWFsIEtKUzo6VVN0cmluZyB0b1N0cmluZyhLSlM6OkV4ZWNTdGF0ZSopIGNvbnN0O1xuXG4iKTsK
LSAgICB9Ci0KICAgICAjIEN1c3RvbSBwdXNoRXZlbnRIYW5kbGVyU2NvcGUgZnVuY3Rpb24KICAg
ICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tUHVzaEV2ZW50SGFu
ZGxlclNjb3BlIn0pIHsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2aXJ0dWFs
IHZvaWQgcHVzaEV2ZW50SGFuZGxlclNjb3BlKEtKUzo6RXhlY1N0YXRlKiwgS0pTOjpTY29wZUNo
YWluJikgY29uc3Q7XG5cbiIpOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAyMTkxOCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNiArMSw0IEBACi0vKioKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAqCisvKgogICogQ29weXJpZ2h0IChD
KSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkg
QW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDAg
U2ltb24gSGF1c21hbm4gPGhhdXNtYW5uQGtkZS5vcmc+CkBAIC00NTgsNiArNDU2LDExIEBAIFN0
cmluZyBIVE1MQW5jaG9yRWxlbWVudDo6dGV4dCgpIGNvbnN0CiAgICAgcmV0dXJuIGlubmVyVGV4
dCgpOwogfQogCitTdHJpbmcgSFRNTEFuY2hvckVsZW1lbnQ6OnRvU3RyaW5nKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gaHJlZigpOworfQorCiBib29sIEhUTUxBbmNob3JFbGVtZW50Ojppc0xpdmVM
aW5rKCkgY29uc3QKIHsKICAgICBpZiAoIW1faXNMaW5rKQpJbmRleDogV2ViQ29yZS9odG1sL0hU
TUxBbmNob3JFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxBbmNob3JF
bGVtZW50LmgJKHJldmlzaW9uIDIxOTE4KQorKysgV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVt
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsOSArMSw4IEBACiAvKgotICogVGhpcyBmaWxlIGlz
IHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKICAqIENvcHlyaWdo
dCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAx
OTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAy
MDAwIFNpbW9uIEhhdXNtYW5uIDxoYXVzbWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtMjEsNiArMjAsNyBAQAogICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCiAgKgogICov
CisKICNpZm5kZWYgSFRNTEFuY2hvckVsZW1lbnRfaAogI2RlZmluZSBIVE1MQW5jaG9yRWxlbWVu
dF9oCiAKQEAgLTMwLDggKzMwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTdHJp
bmc7CiAKLWNsYXNzIEhUTUxBbmNob3JFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50Ci17Citj
bGFzcyBIVE1MQW5jaG9yRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudCB7CiBwdWJsaWM6CiAg
ICAgSFRNTEFuY2hvckVsZW1lbnQoRG9jdW1lbnQqKTsKICAgICBIVE1MQW5jaG9yRWxlbWVudChj
b25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKQEAgLTk0LDEzICs5MywxNSBAQCBwdWJs
aWM6CiAgICAgU3RyaW5nIHNlYXJjaCgpIGNvbnN0OwogICAgIFN0cmluZyB0ZXh0KCkgY29uc3Q7
CiAgICAgCisgICAgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3Q7CisKICAgICBib29sIGlzTGl2ZUxp
bmsoKSBjb25zdDsKLSAgICAKKwogcHJpdmF0ZToKLSAgICBFbGVtZW50ICptX3Jvb3RFZGl0YWJs
ZUVsZW1lbnRGb3JTZWxlY3Rpb25Pbk1vdXNlRG93bjsKKyAgICBFbGVtZW50KiBtX3Jvb3RFZGl0
YWJsZUVsZW1lbnRGb3JTZWxlY3Rpb25Pbk1vdXNlRG93bjsKICAgICBib29sIG1fd2FzU2hpZnRL
ZXlEb3duT25Nb3VzZURvd247CiB9OwogCi19IC8vbmFtZXNwYWNlCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKLSNlbmRpZgorI2VuZGlmIC8vIEhUTUxBbmNob3JFbGVtZW50X2gKSW5kZXg6IFdl
YkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
dG1sL0hUTUxBbmNob3JFbGVtZW50LmlkbAkocmV2aXNpb24gMjE5MTgpCisrKyBXZWJDb3JlL2h0
bWwvSFRNTEFuY2hvckVsZW1lbnQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yMCw3ICsyMCw3IEBA
CiAKIG1vZHVsZSBodG1sIHsKIAotICAgIGludGVyZmFjZSBbR2VuZXJhdGVDb25zdHJ1Y3Rvciwg
Q3VzdG9tVG9TdHJpbmddIEhUTUxBbmNob3JFbGVtZW50IDogSFRNTEVsZW1lbnQgeworICAgIGlu
dGVyZmFjZSBbR2VuZXJhdGVDb25zdHJ1Y3Rvcl0gSFRNTEFuY2hvckVsZW1lbnQgOiBIVE1MRWxl
bWVudCB7CiAgICAgICAgIGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJpbmddIERPTVN0
cmluZyBhY2Nlc3NLZXk7CiAgICAgICAgIGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJp
bmddIERPTVN0cmluZyBjaGFyc2V0OwogICAgICAgICBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsVG9O
dWxsU3RyaW5nXSBET01TdHJpbmcgY29vcmRzOwpAQCAtNDgsNyArNDgsNyBAQCBtb2R1bGUgaHRt
bCB7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgdGV4dDsKIAogI2lmIGRl
ZmluZWQoTEFOR1VBR0VfSkFWQVNDUklQVCkKLSAgICAgICAgW0N1c3RvbV0gRE9NU3RyaW5nIHRv
U3RyaW5nKCk7CisgICAgICAgIERPTVN0cmluZyB0b1N0cmluZygpOwogI2VuZGlmCiAKICNpZiBk
ZWZpbmVkKExBTkdVQUdFX09CSkVDVElWRV9DKQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMjE5MjApCisr
KyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOSBAQAor
MjAwNy0wNS0zMSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RzIGZvciBodHRwOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDc4MgorICAgICAgICBDbGFzc2VzIHNob3VsZCBu
b3Qgb3ZlcnJpZGUgSlNPYmplY3Q6OnRvU3RyaW5nKEV4ZWNTdGF0ZSAqKQorCisgICAgICAgIC0g
QWRkcyBhIG5ldyB0ZXN0IHRvIHRlc3Qgb3ZlcnJpZGluZyB0b1N0cmluZyBhbmQgdmFsdWVPZiBm
b3IKKyAgICAgICAgICBtdWx0aXBsZSBvYmplY3RzLgorICAgICAgICAtIFVwZGF0ZSB0ZXN0cyB0
byByZWZsZWN0IHRoZSBjb3JyZWN0aW9uIG9mIHRoZSB0b1N0cmluZyBhcmNoaXRlY3R1cmUuCisK
KyAgICAgICAgKiBlZGl0aW5nL3NlbGVjdGlvbi9nZXRSYW5nZUF0LWV4cGVjdGVkLnR4dDoKKyAg
ICAgICAgKiBmYXN0L2RvbS9XaW5kb3cvYXRvYi1idG9hLWV4cGVjdGVkLnR4dDoKKyAgICAgICAg
KiBmYXN0L2pzL3RvU3RyaW5nLWFuZC12YWx1ZU9mLW92ZXJyaWRlLWV4cGVjdGVkLnR4dDogQWRk
ZWQuCisgICAgICAgICogZmFzdC9qcy90b1N0cmluZy1hbmQtdmFsdWVPZi1vdmVycmlkZS5odG1s
OiBBZGRlZC4KKwogMjAwNy0wNS0zMCAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IE9saXZlci4KSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvc2Vs
ZWN0aW9uL2dldFJhbmdlQXQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2VkaXRpbmcvc2VsZWN0aW9uL2dldFJhbmdlQXQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAyMTkx
OCkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL2dldFJhbmdlQXQtZXhwZWN0ZWQu
dHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yLDYgKzIsNiBAQCBFRElUSU5HIERFTEVHQVRFOiB3ZWJW
aWV3RGlkQ2hhbmdlU2VsZWN0CiBUaGlzIHRlc3RzIHRoYXQgU2VsZWN0aW9uOjpnZXRSYW5nZUF0
KGludCkgcmV0dXJucyBhIHZhbGlkIFJhbmdlIG9iamVjdC4KIAogaGVsbG8KLVtvYmplY3QgUmFu
Z2VdCitoZWxsbwogW29iamVjdCBUZXh0XQogW29iamVjdCBUZXh0XQpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC9kb20vV2luZG93L2F0b2ItYnRvYS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L2F0b2ItYnRvYS1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDIxOTE4KQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L2F0b2ItYnRvYS1leHBl
Y3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE0LDcgKzE0LDcgQEAgUEFTUyB0eXBlb2Ygd2lu
ZG93LmJ0b2EgaXMgImZ1bmN0aW9uIgogUEFTUyB3aW5kb3cuYnRvYSgpIHRocmV3IGV4Y2VwdGlv
biBTeW50YXhFcnJvcjogTm90IGVub3VnaCBhcmd1bWVudHMuCiBQQVNTIHdpbmRvdy5idG9hKCIi
KSBpcyAiIgogUEFTUyB3aW5kb3cuYnRvYShudWxsKSBpcyAiIgotUEFTUyB3aW5kb3cuYnRvYSh3
aW5kb3cpIGlzICJXMjlpYW1WamRDQlhhVzVrYjNkZCIKK0ZBSUwgd2luZG93LmJ0b2Eod2luZG93
KSBzaG91bGQgYmUgVzI5aWFtVmpkQ0JYYVc1a2IzZGQuIFdhcyBXMjlpYW1WamRDQkVUMDFYYVc1
a2IzZGQuCiBQQVNTIHdpbmRvdy5idG9hKCLDqcOpIikgaXMgIjZlaz0iCiBQQVNTIHdpbmRvdy5i
dG9hKCJcdTAwODBcdTAwODEiKSBpcyAiZ0lFPSIKIFBBU1Mgd2luZG93LmJ0b2EoItGC0LXRgdGC
IikgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBJTlZBTElEX0NIQVJBQ1RFUl9FUlI6IERPTSBFeGNl
cHRpb24gNS4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvdG9TdHJpbmctYW5kLXZhbHVlT2Yt
b3ZlcnJpZGUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMv
dG9TdHJpbmctYW5kLXZhbHVlT2Ytb3ZlcnJpZGUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvZmFzdC9qcy90b1N0cmluZy1hbmQtdmFsdWVPZi1vdmVycmlkZS1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjQ0IEBACitVbm1vZGlmaWVkIHdpbmRv
dword2luZG93IDogW29iamVjdCBET01XaW5kb3ddCitbd2luZG93XSA6IFtvYmplY3QgRE9NV2lu
ZG93XQorU3RyaW5nKHdpbmRvdykgOiBbb2JqZWN0IERPTVdpbmRvd10KK1N0cmluZyhbd2luZG93
XSkgOiBbb2JqZWN0IERPTVdpbmRvd10KK3dpbmRvdy50b1N0cmluZygpIDogW29iamVjdCBET01X
aW5kb3ddCitbd2luZG93XS50b1N0cmluZygpIDogW29iamVjdCBET01XaW5kb3ddCit3aW5kb3cu
dmFsdWVPZigpIDogW29iamVjdCBET01XaW5kb3ddCitbd2luZG93XS52YWx1ZU9mKCkgOiBbb2Jq
ZWN0IERPTVdpbmRvd10KKword2luZG93IHdpdGggbW9kaWZpZWQgdG9TdHJpbmcgYW5kIHZhbHVl
T2YKK3dpbmRvdyA6IHZhbHVlT2YKK1t3aW5kb3ddIDogdG9TdHJpbmcKK1N0cmluZyh3aW5kb3cp
IDogdG9TdHJpbmcKK1N0cmluZyhbd2luZG93XSkgOiB0b1N0cmluZword2luZG93LnRvU3RyaW5n
KCkgOiB0b1N0cmluZworW3dpbmRvd10udG9TdHJpbmcoKSA6IHRvU3RyaW5nCit3aW5kb3cudmFs
dWVPZigpIDogdmFsdWVPZgorW3dpbmRvd10udmFsdWVPZigpIDogdG9TdHJpbmcKKword2luZG93
IHdpdGggbW9kaWZpZWQgdG9TdHJpbmcgdGhhdCByZXR1cm5zIGFuIE9iamVjdAord2luZG93IDog
dmFsdWVPZgorW3dpbmRvd10gOiB2YWx1ZU9mCitTdHJpbmcod2luZG93KSA6IHZhbHVlT2YKK1N0
cmluZyhbd2luZG93XSkgOiB2YWx1ZU9mCit3aW5kb3cudG9TdHJpbmcoKSA6IFtvYmplY3QgT2Jq
ZWN0XQorW3dpbmRvd10udG9TdHJpbmcoKSA6IHZhbHVlT2YKK3dpbmRvdy52YWx1ZU9mKCkgOiB2
YWx1ZU9mCitbd2luZG93XS52YWx1ZU9mKCkgOiB2YWx1ZU9mCisKK3dpbmRvdyB3aXRoIG1vZGlm
aWVkIHZhbHVlT2YgdGhhdCByZXR1cm5zIGFuIE9iamVjdAord2luZG93IDogdG9TdHJpbmcKK1t3
aW5kb3ddIDogdG9TdHJpbmcKK1N0cmluZyh3aW5kb3cpIDogdG9TdHJpbmcKK1N0cmluZyhbd2lu
ZG93XSkgOiB0b1N0cmluZword2luZG93LnRvU3RyaW5nKCkgOiB0b1N0cmluZworW3dpbmRvd10u
dG9TdHJpbmcoKSA6IHRvU3RyaW5nCit3aW5kb3cudmFsdWVPZigpIDogW29iamVjdCBPYmplY3Rd
Citbd2luZG93XS52YWx1ZU9mKCkgOiB0b1N0cmluZworCit3aW5kb3cgd2l0aCBtb2RpZmllZCB0
b1N0cmluZyBhbmQgdmFsdWVPZiB0aGF0IHJldHVybnMgYW4gT2JqZWN0CitUeXBlRXJyb3I6IE5v
IGRlZmF1bHQgdmFsdWUKK1R5cGVFcnJvcjogTm8gZGVmYXVsdCB2YWx1ZQorVHlwZUVycm9yOiBO
byBkZWZhdWx0IHZhbHVlCitUeXBlRXJyb3I6IE5vIGRlZmF1bHQgdmFsdWUKK3dpbmRvdy50b1N0
cmluZygpIDogW29iamVjdCBPYmplY3RdCitUeXBlRXJyb3I6IE5vIGRlZmF1bHQgdmFsdWUKK3dp
bmRvdy52YWx1ZU9mKCkgOiBbb2JqZWN0IE9iamVjdF0KK1R5cGVFcnJvcjogTm8gZGVmYXVsdCB2
YWx1ZQorCit3aW5kb3cgd2l0aCBtb2RpZmllZCB0b1N0cmluZyB0aGF0IHRocm93cyBhbiBleGNl
cHRpb24KK3dpbmRvdyA6IHZhbHVlT2YKK0V4Y2VwdGlvbgorRXhjZXB0aW9uCitFeGNlcHRpb24K
K0V4Y2VwdGlvbgorRXhjZXB0aW9uCit3aW5kb3cudmFsdWVPZigpIDogdmFsdWVPZgorRXhjZXB0
aW9uCisKK3dpbmRvdyB3aXRoIG1vZGlmaWVkIHZhbHVlT2YgdGhhdCB0aHJvd3MgYW4gZXhjZXB0
aW9uCitFeGNlcHRpb24KK1t3aW5kb3ddIDogdG9TdHJpbmcKK1N0cmluZyh3aW5kb3cpIDogdG9T
dHJpbmcKK1N0cmluZyhbd2luZG93XSkgOiB0b1N0cmluZword2luZG93LnRvU3RyaW5nKCkgOiB0
b1N0cmluZworW3dpbmRvd10udG9TdHJpbmcoKSA6IHRvU3RyaW5nCitFeGNlcHRpb24KK1t3aW5k
b3ddLnZhbHVlT2YoKSA6IHRvU3RyaW5nCisKK3dpbmRvdyB3aXRoIG1vZGlmaWVkIHRvU3RyaW5n
IGFuIHZhbHVlT2YgdGhhdCB0aHJvdyBleGNlcHRpb25zCitFeGNlcHRpb24KK0V4Y2VwdGlvbgor
RXhjZXB0aW9uCitFeGNlcHRpb24KK0V4Y2VwdGlvbgorRXhjZXB0aW9uCitFeGNlcHRpb24KK0V4
Y2VwdGlvbgorCisKK1VubW9kaWZpZWQgc3Bhbgorc3BhbiA6IFtvYmplY3QgSFRNTEVsZW1lbnRd
Citbc3Bhbl0gOiBbb2JqZWN0IEhUTUxFbGVtZW50XQorU3RyaW5nKHNwYW4pIDogW29iamVjdCBI
VE1MRWxlbWVudF0KK1N0cmluZyhbc3Bhbl0pIDogW29iamVjdCBIVE1MRWxlbWVudF0KK3NwYW4u
dG9TdHJpbmcoKSA6IFtvYmplY3QgSFRNTEVsZW1lbnRdCitbc3Bhbl0udG9TdHJpbmcoKSA6IFtv
YmplY3QgSFRNTEVsZW1lbnRdCitzcGFuLnZhbHVlT2YoKSA6IFtvYmplY3QgSFRNTEVsZW1lbnRd
Citbc3Bhbl0udmFsdWVPZigpIDogW29iamVjdCBIVE1MRWxlbWVudF0KKworc3BhbiB3aXRoIG1v
ZGlmaWVkIHRvU3RyaW5nIGFuZCB2YWx1ZU9mCitzcGFuIDogdmFsdWVPZgorW3NwYW5dIDogdG9T
dHJpbmcKK1N0cmluZyhzcGFuKSA6IHRvU3RyaW5nCitTdHJpbmcoW3NwYW5dKSA6IHRvU3RyaW5n
CitzcGFuLnRvU3RyaW5nKCkgOiB0b1N0cmluZworW3NwYW5dLnRvU3RyaW5nKCkgOiB0b1N0cmlu
Zworc3Bhbi52YWx1ZU9mKCkgOiB2YWx1ZU9mCitbc3Bhbl0udmFsdWVPZigpIDogdG9TdHJpbmcK
Kworc3BhbiB3aXRoIG1vZGlmaWVkIHRvU3RyaW5nIHRoYXQgcmV0dXJucyBhbiBPYmplY3QKK3Nw
YW4gOiB2YWx1ZU9mCitbc3Bhbl0gOiB2YWx1ZU9mCitTdHJpbmcoc3BhbikgOiB2YWx1ZU9mCitT
dHJpbmcoW3NwYW5dKSA6IHZhbHVlT2YKK3NwYW4udG9TdHJpbmcoKSA6IFtvYmplY3QgT2JqZWN0
XQorW3NwYW5dLnRvU3RyaW5nKCkgOiB2YWx1ZU9mCitzcGFuLnZhbHVlT2YoKSA6IHZhbHVlT2YK
K1tzcGFuXS52YWx1ZU9mKCkgOiB2YWx1ZU9mCisKK3NwYW4gd2l0aCBtb2RpZmllZCB2YWx1ZU9m
IHRoYXQgcmV0dXJucyBhbiBPYmplY3QKK3NwYW4gOiB0b1N0cmluZworW3NwYW5dIDogdG9TdHJp
bmcKK1N0cmluZyhzcGFuKSA6IHRvU3RyaW5nCitTdHJpbmcoW3NwYW5dKSA6IHRvU3RyaW5nCitz
cGFuLnRvU3RyaW5nKCkgOiB0b1N0cmluZworW3NwYW5dLnRvU3RyaW5nKCkgOiB0b1N0cmluZwor
c3Bhbi52YWx1ZU9mKCkgOiBbb2JqZWN0IE9iamVjdF0KK1tzcGFuXS52YWx1ZU9mKCkgOiB0b1N0
cmluZworCitzcGFuIHdpdGggbW9kaWZpZWQgdG9TdHJpbmcgYW5kIHZhbHVlT2YgdGhhdCByZXR1
cm5zIGFuIE9iamVjdAorVHlwZUVycm9yOiBObyBkZWZhdWx0IHZhbHVlCitUeXBlRXJyb3I6IE5v
IGRlZmF1bHQgdmFsdWUKK1R5cGVFcnJvcjogTm8gZGVmYXVsdCB2YWx1ZQorVHlwZUVycm9yOiBO
byBkZWZhdWx0IHZhbHVlCitzcGFuLnRvU3RyaW5nKCkgOiBbb2JqZWN0IE9iamVjdF0KK1R5cGVF
cnJvcjogTm8gZGVmYXVsdCB2YWx1ZQorc3Bhbi52YWx1ZU9mKCkgOiBbb2JqZWN0IE9iamVjdF0K
K1R5cGVFcnJvcjogTm8gZGVmYXVsdCB2YWx1ZQorCitzcGFuIHdpdGggbW9kaWZpZWQgdG9TdHJp
bmcgdGhhdCB0aHJvd3MgYW4gZXhjZXB0aW9uCitzcGFuIDogdmFsdWVPZgorRXhjZXB0aW9uCitF
eGNlcHRpb24KK0V4Y2VwdGlvbgorRXhjZXB0aW9uCitFeGNlcHRpb24KK3NwYW4udmFsdWVPZigp
IDogdmFsdWVPZgorRXhjZXB0aW9uCisKK3NwYW4gd2l0aCBtb2RpZmllZCB2YWx1ZU9mIHRoYXQg
dGhyb3dzIGFuIGV4Y2VwdGlvbgorRXhjZXB0aW9uCitbc3Bhbl0gOiB0b1N0cmluZworU3RyaW5n
KHNwYW4pIDogdG9TdHJpbmcKK1N0cmluZyhbc3Bhbl0pIDogdG9TdHJpbmcKK3NwYW4udG9TdHJp
bmcoKSA6IHRvU3RyaW5nCitbc3Bhbl0udG9TdHJpbmcoKSA6IHRvU3RyaW5nCitFeGNlcHRpb24K
K1tzcGFuXS52YWx1ZU9mKCkgOiB0b1N0cmluZworCitzcGFuIHdpdGggbW9kaWZpZWQgdG9TdHJp
bmcgYW4gdmFsdWVPZiB0aGF0IHRocm93IGV4Y2VwdGlvbnMKK0V4Y2VwdGlvbgorRXhjZXB0aW9u
CitFeGNlcHRpb24KK0V4Y2VwdGlvbgorRXhjZXB0aW9uCitFeGNlcHRpb24KK0V4Y2VwdGlvbgor
RXhjZXB0aW9uCisKKworVW5tb2RpZmllZCBuYXZpZ2F0b3IKK25hdmlnYXRvciA6IFtvYmplY3Qg
TmF2aWdhdG9yXQorW25hdmlnYXRvcl0gOiBbb2JqZWN0IE5hdmlnYXRvcl0KK1N0cmluZyhuYXZp
Z2F0b3IpIDogW29iamVjdCBOYXZpZ2F0b3JdCitTdHJpbmcoW25hdmlnYXRvcl0pIDogW29iamVj
dCBOYXZpZ2F0b3JdCituYXZpZ2F0b3IudG9TdHJpbmcoKSA6IFtvYmplY3QgTmF2aWdhdG9yXQor
W25hdmlnYXRvcl0udG9TdHJpbmcoKSA6IFtvYmplY3QgTmF2aWdhdG9yXQorbmF2aWdhdG9yLnZh
bHVlT2YoKSA6IFtvYmplY3QgTmF2aWdhdG9yXQorW25hdmlnYXRvcl0udmFsdWVPZigpIDogW29i
amVjdCBOYXZpZ2F0b3JdCisKK25hdmlnYXRvciB3aXRoIG1vZGlmaWVkIHRvU3RyaW5nIGFuZCB2
YWx1ZU9mCituYXZpZ2F0b3IgOiB2YWx1ZU9mCitbbmF2aWdhdG9yXSA6IHRvU3RyaW5nCitTdHJp
bmcobmF2aWdhdG9yKSA6IHRvU3RyaW5nCitTdHJpbmcoW25hdmlnYXRvcl0pIDogdG9TdHJpbmcK
K25hdmlnYXRvci50b1N0cmluZygpIDogdG9TdHJpbmcKK1tuYXZpZ2F0b3JdLnRvU3RyaW5nKCkg
OiB0b1N0cmluZworbmF2aWdhdG9yLnZhbHVlT2YoKSA6IHZhbHVlT2YKK1tuYXZpZ2F0b3JdLnZh
bHVlT2YoKSA6IHRvU3RyaW5nCisKK25hdmlnYXRvciB3aXRoIG1vZGlmaWVkIHRvU3RyaW5nIHRo
YXQgcmV0dXJucyBhbiBPYmplY3QKK25hdmlnYXRvciA6IHZhbHVlT2YKK1tuYXZpZ2F0b3JdIDog
dmFsdWVPZgorU3RyaW5nKG5hdmlnYXRvcikgOiB2YWx1ZU9mCitTdHJpbmcoW25hdmlnYXRvcl0p
IDogdmFsdWVPZgorbmF2aWdhdG9yLnRvU3RyaW5nKCkgOiBbb2JqZWN0IE9iamVjdF0KK1tuYXZp
Z2F0b3JdLnRvU3RyaW5nKCkgOiB2YWx1ZU9mCituYXZpZ2F0b3IudmFsdWVPZigpIDogdmFsdWVP
ZgorW25hdmlnYXRvcl0udmFsdWVPZigpIDogdmFsdWVPZgorCituYXZpZ2F0b3Igd2l0aCBtb2Rp
ZmllZCB2YWx1ZU9mIHRoYXQgcmV0dXJucyBhbiBPYmplY3QKK25hdmlnYXRvciA6IHRvU3RyaW5n
CitbbmF2aWdhdG9yXSA6IHRvU3RyaW5nCitTdHJpbmcobmF2aWdhdG9yKSA6IHRvU3RyaW5nCitT
dHJpbmcoW25hdmlnYXRvcl0pIDogdG9TdHJpbmcKK25hdmlnYXRvci50b1N0cmluZygpIDogdG9T
dHJpbmcKK1tuYXZpZ2F0b3JdLnRvU3RyaW5nKCkgOiB0b1N0cmluZworbmF2aWdhdG9yLnZhbHVl
T2YoKSA6IFtvYmplY3QgT2JqZWN0XQorW25hdmlnYXRvcl0udmFsdWVPZigpIDogdG9TdHJpbmcK
KworbmF2aWdhdG9yIHdpdGggbW9kaWZpZWQgdG9TdHJpbmcgYW5kIHZhbHVlT2YgdGhhdCByZXR1
cm5zIGFuIE9iamVjdAorVHlwZUVycm9yOiBObyBkZWZhdWx0IHZhbHVlCitUeXBlRXJyb3I6IE5v
IGRlZmF1bHQgdmFsdWUKK1R5cGVFcnJvcjogTm8gZGVmYXVsdCB2YWx1ZQorVHlwZUVycm9yOiBO
byBkZWZhdWx0IHZhbHVlCituYXZpZ2F0b3IudG9TdHJpbmcoKSA6IFtvYmplY3QgT2JqZWN0XQor
VHlwZUVycm9yOiBObyBkZWZhdWx0IHZhbHVlCituYXZpZ2F0b3IudmFsdWVPZigpIDogW29iamVj
dCBPYmplY3RdCitUeXBlRXJyb3I6IE5vIGRlZmF1bHQgdmFsdWUKKworbmF2aWdhdG9yIHdpdGgg
bW9kaWZpZWQgdG9TdHJpbmcgdGhhdCB0aHJvd3MgYW4gZXhjZXB0aW9uCituYXZpZ2F0b3IgOiB2
YWx1ZU9mCitFeGNlcHRpb24KK0V4Y2VwdGlvbgorRXhjZXB0aW9uCitFeGNlcHRpb24KK0V4Y2Vw
dGlvbgorbmF2aWdhdG9yLnZhbHVlT2YoKSA6IHZhbHVlT2YKK0V4Y2VwdGlvbgorCituYXZpZ2F0
b3Igd2l0aCBtb2RpZmllZCB2YWx1ZU9mIHRoYXQgdGhyb3dzIGFuIGV4Y2VwdGlvbgorRXhjZXB0
aW9uCitbbmF2aWdhdG9yXSA6IHRvU3RyaW5nCitTdHJpbmcobmF2aWdhdG9yKSA6IHRvU3RyaW5n
CitTdHJpbmcoW25hdmlnYXRvcl0pIDogdG9TdHJpbmcKK25hdmlnYXRvci50b1N0cmluZygpIDog
dG9TdHJpbmcKK1tuYXZpZ2F0b3JdLnRvU3RyaW5nKCkgOiB0b1N0cmluZworRXhjZXB0aW9uCitb
bmF2aWdhdG9yXS52YWx1ZU9mKCkgOiB0b1N0cmluZworCituYXZpZ2F0b3Igd2l0aCBtb2RpZmll
ZCB0b1N0cmluZyBhbiB2YWx1ZU9mIHRoYXQgdGhyb3cgZXhjZXB0aW9ucworRXhjZXB0aW9uCitF
eGNlcHRpb24KK0V4Y2VwdGlvbgorRXhjZXB0aW9uCitFeGNlcHRpb24KK0V4Y2VwdGlvbgorRXhj
ZXB0aW9uCitFeGNlcHRpb24KKworCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvdG9TdHJp
bmctYW5kLXZhbHVlT2Ytb3ZlcnJpZGUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L2pzL3RvU3RyaW5nLWFuZC12YWx1ZU9mLW92ZXJyaWRlLmh0bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9mYXN0L2pzL3RvU3RyaW5nLWFuZC12YWx1ZU9mLW92ZXJyaWRlLmh0bWwJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODUgQEAKKzxodG1sPgorPGhlYWQ+CisgICAgPHNjcmlw
dD4KKyAgICAgICAgZnVuY3Rpb24gcHJpbnQobXNnKQorICAgICAgICB7CisgICAgICAgICAgICBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpLmlubmVySFRNTCArPSBtc2cgKyAiPGJy
PiI7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBwcmludFRlc3RzKHR5cGUsIG9iamVj
dCkKKyAgICAgICAgeworICAgICAgICAgICAgdHJ5IHsgcHJpbnQodHlwZSArICcgOiAnICsgb2Jq
ZWN0KTsgfSBjYXRjaChlKSB7IHByaW50KGUpOyB9CisgICAgICAgICAgICB0cnkgeyBwcmludCgn
WycgKyB0eXBlICsgJ10gOiAnICsgW29iamVjdF0pOyB9IGNhdGNoKGUpIHsgcHJpbnQoZSk7IH0K
KyAgICAgICAgICAgIHRyeSB7IHByaW50KCdTdHJpbmcoJyArIHR5cGUgKyAnKSA6ICcgKyBTdHJp
bmcob2JqZWN0KSk7IH0gY2F0Y2goZSkgeyBwcmludChlKTsgfQorICAgICAgICAgICAgdHJ5IHsg
cHJpbnQoJ1N0cmluZyhbJyArIHR5cGUgKyAnXSkgOiAnICsgU3RyaW5nKFtvYmplY3RdKSk7IH0g
Y2F0Y2goZSkgeyBwcmludChlKTsgfQorICAgICAgICAgICAgdHJ5IHsgcHJpbnQodHlwZSArICcu
dG9TdHJpbmcoKSA6ICcgKyBvYmplY3QudG9TdHJpbmcoKSk7IH0gY2F0Y2goZSkgeyBwcmludChl
KTsgfQorICAgICAgICAgICAgdHJ5IHsgcHJpbnQoJ1snICsgdHlwZSArICddLnRvU3RyaW5nKCkg
OiAnICsgW29iamVjdF0udG9TdHJpbmcoKSk7IH0gY2F0Y2goZSkgeyBwcmludChlKTsgfQorICAg
ICAgICAgICAgdHJ5IHsgcHJpbnQodHlwZSArICcudmFsdWVPZigpIDogJyArIG9iamVjdC52YWx1
ZU9mKCkpOyB9IGNhdGNoKGUpIHsgcHJpbnQoZSk7IH0KKyAgICAgICAgICAgIHRyeSB7IHByaW50
KCdbJyArIHR5cGUgKyAnXS52YWx1ZU9mKCkgOiAnICsgW29iamVjdF0udmFsdWVPZigpKTsgfSBj
YXRjaChlKSB7IHByaW50KGUpOyB9CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiB0ZXN0
KHR5cGUsIG9iamVjdCkKKyAgICAgICAgeworICAgICAgICAgICAgcHJpbnQoJzxiPlVubW9kaWZp
ZWQgJyArIHR5cGUgKyAnPC9iPicpOworICAgICAgICAgICAgcHJpbnRUZXN0cyh0eXBlLCBvYmpl
Y3QpOworCisgICAgICAgICAgICBwcmludCgnJyk7CisgICAgICAgICAgICBwcmludCgnPGI+JyAr
IHR5cGUgKyAnIHdpdGggbW9kaWZpZWQgdG9TdHJpbmcgYW5kIHZhbHVlT2Y8L2I+Jyk7CisgICAg
ICAgICAgICBvYmplY3QudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsgcmV0dXJuICJ0b1N0cmluZyIg
fQorICAgICAgICAgICAgb2JqZWN0LnZhbHVlT2YgPSBmdW5jdGlvbigpIHsgcmV0dXJuICJ2YWx1
ZU9mIiB9CisgICAgICAgICAgICBwcmludFRlc3RzKHR5cGUsIG9iamVjdCk7CisKKyAgICAgICAg
ICAgIHByaW50KCcnKTsKKyAgICAgICAgICAgIHByaW50KCc8Yj4nICsgdHlwZSArICcgd2l0aCBt
b2RpZmllZCB0b1N0cmluZyB0aGF0IHJldHVybnMgYW4gT2JqZWN0PC9iPicpOworICAgICAgICAg
ICAgb2JqZWN0LnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7IHJldHVybiBuZXcgT2JqZWN0KCk7IH0K
KyAgICAgICAgICAgIHByaW50VGVzdHModHlwZSwgb2JqZWN0KTsKKworICAgICAgICAgICAgcHJp
bnQoJycpOworICAgICAgICAgICAgcHJpbnQoJzxiPicgKyB0eXBlICsgJyB3aXRoIG1vZGlmaWVk
IHZhbHVlT2YgdGhhdCByZXR1cm5zIGFuIE9iamVjdDwvYj4nKTsKKyAgICAgICAgICAgIG9iamVj
dC50b1N0cmluZyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gJ3RvU3RyaW5nJzsgfQorICAgICAgICAg
ICAgb2JqZWN0LnZhbHVlT2YgPSBmdW5jdGlvbigpIHsgcmV0dXJuIG5ldyBPYmplY3QoKTsgfQor
ICAgICAgICAgICAgcHJpbnRUZXN0cyh0eXBlLCBvYmplY3QpOworCisgICAgICAgICAgICBwcmlu
dCgnJyk7CisgICAgICAgICAgICBwcmludCgnPGI+JyArIHR5cGUgKyAnIHdpdGggbW9kaWZpZWQg
dG9TdHJpbmcgYW5kIHZhbHVlT2YgdGhhdCByZXR1cm5zIGFuIE9iamVjdDwvYj4nKTsKKyAgICAg
ICAgICAgIG9iamVjdC50b1N0cmluZyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gbmV3IE9iamVjdCgp
OyB9CisgICAgICAgICAgICBwcmludFRlc3RzKHR5cGUsIG9iamVjdCk7CisKKyAgICAgICAgICAg
IHByaW50KCcnKTsKKyAgICAgICAgICAgIHByaW50KCc8Yj4nICsgdHlwZSArICcgd2l0aCBtb2Rp
ZmllZCB0b1N0cmluZyB0aGF0IHRocm93cyBhbiBleGNlcHRpb248L2I+Jyk7CisgICAgICAgICAg
ICBvYmplY3QudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsgdGhyb3cgIkV4Y2VwdGlvbiI7IH0KKyAg
ICAgICAgICAgIG9iamVjdC52YWx1ZU9mID0gZnVuY3Rpb24oKSB7IHJldHVybiAidmFsdWVPZiI7
IH0KKyAgICAgICAgICAgIHByaW50VGVzdHModHlwZSwgb2JqZWN0KTsKKworICAgICAgICAgICAg
cHJpbnQoJycpOworICAgICAgICAgICAgcHJpbnQoJzxiPicgKyB0eXBlICsgJyB3aXRoIG1vZGlm
aWVkIHZhbHVlT2YgdGhhdCB0aHJvd3MgYW4gZXhjZXB0aW9uPC9iPicpOworICAgICAgICAgICAg
b2JqZWN0LnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7IHJldHVybiAndG9TdHJpbmcnOyB9CisgICAg
ICAgICAgICBvYmplY3QudmFsdWVPZiA9IGZ1bmN0aW9uKCkgeyB0aHJvdyAiRXhjZXB0aW9uIjsg
fQorICAgICAgICAgICAgcHJpbnRUZXN0cyh0eXBlLCBvYmplY3QpOworCisgICAgICAgICAgICBw
cmludCgnJyk7CisgICAgICAgICAgICBwcmludCgnPGI+JyArIHR5cGUgKyAnIHdpdGggbW9kaWZp
ZWQgdG9TdHJpbmcgYW4gdmFsdWVPZiB0aGF0IHRocm93IGV4Y2VwdGlvbnM8L2I+Jyk7CisgICAg
ICAgICAgICBvYmplY3QudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsgdGhyb3cgIkV4Y2VwdGlvbiI7
IH0KKyAgICAgICAgICAgIG9iamVjdC52YWx1ZU9mID0gZnVuY3Rpb24oKSB7IHRocm93ICJFeGNl
cHRpb24iOyB9CisgICAgICAgICAgICBwcmludFRlc3RzKHR5cGUsIG9iamVjdCk7CisKKyAgICAg
ICAgICAgIHByaW50KCcnKTsKKyAgICAgICAgICAgIHByaW50KCc8aHI+Jyk7CisgICAgICAgIH0K
KworICAgICAgICBmdW5jdGlvbiBydW5UZXN0cygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICAgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCisgICAgICAgICAgICB0ZXN0KCd3aW5kb3cnLCB3
aW5kb3cpOworICAgICAgICAgICAgdGVzdCgnc3BhbicsIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
J3NwYW4nKSk7CisgICAgICAgICAgICB0ZXN0KCduYXZpZ2F0b3InLCB3aW5kb3cubmF2aWdhdG9y
KTsKKyAgICAgICAgfQorICAgIDwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5U
ZXN0cygpOyI+Cis8ZGl2IGlkPSJjb25zb2xlIj4KKzwvZGl2PgorPC9ib2R5PgorPC9odG1sPgo=
</data>
<flag name="review"
          id="6122"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>