<?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>13830</bug_id>
          
          <creation_ts>2007-05-22 14:18:40 -0700</creation_ts>
          <short_desc>Auto-generate JS DOM bindings for HTMLDocument and most of the rest of HTMLElement</short_desc>
          <delta_ts>2007-05-23 16:57:56 -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>DOM</component>
          <version>523.x (Safari 3)</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>
          
          <blocked>13779</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>9395</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-05-22 14:18:40 -0700</bug_when>
    <thetext>Patch to come</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>9383</commentid>
    <comment_count>1</comment_count>
      <attachid>14666</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-05-22 14:38:51 -0700</bug_when>
    <thetext>Created attachment 14666
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>9384</commentid>
    <comment_count>2</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-05-22 14:43:06 -0700</bug_when>
    <thetext>There are two possible places of concern with this patch.  The first is change to generate HTMLElement.innerText which had a call to impl()-&gt;document()-&gt;updateLayoutIgnorePendingStylesheets(); and now does not.  The implementation does the same call but does some stuff before it that might cause issues. 

A second place for concern is with removing the following from the generator script:

-        if ($dataNode-&gt;extendedAttributes-&gt;{&quot;HasNameGetter&quot;} || $dataNode-&gt;extendedAttributes-&gt;{&quot;HasOverridingNameGetter&quot;}) {
-            # if it has a prototype, we need to check that first too
-            push(@implContent, &quot;    if (prototype()-&gt;isObject() &amp;&amp; static_cast&lt;JSObject*&gt;(prototype())-&gt;hasProperty(exec, propertyName))\n&quot;);
-            push(@implContent, &quot;        return false;\n&quot;);
-        }

This code caused an incorrect prototype chain in the only other place that [HasOverridingNameGetter] was used and testing the code without it doesn&apos;t cause any regressions.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>9362</commentid>
    <comment_count>3</comment_count>
      <attachid>14673</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-05-22 19:37:45 -0700</bug_when>
    <thetext>Created attachment 14673
updated patch

Updated to make it still build.  Above comments still hold.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>9364</commentid>
    <comment_count>4</comment_count>
      <attachid>14674</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-05-22 20:15:41 -0700</bug_when>
    <thetext>Created attachment 14674
Just the JSHTMLElement

Splitting this into two patches for easier reviewing.  This first one deals with just the JSHTMLElement autogeneration and the comment about innerText above still holds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>9352</commentid>
    <comment_count>5</comment_count>
      <attachid>14674</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2007-05-22 20:19:31 -0700</bug_when>
    <thetext>Comment on attachment 14674
Just the JSHTMLElement

This patch looks good, but you should talk to a rendering guru about the innerText issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>9354</commentid>
    <comment_count>6</comment_count>
      <attachid>14675</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-05-22 20:57:15 -0700</bug_when>
    <thetext>Created attachment 14675
Just the JSHTMLDocument

This one just deals with JSHTMLDocument part of the first patch.  Again, my concerns regarding the changes to the generator script still hold.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>9338</commentid>
    <comment_count>7</comment_count>
      <attachid>14675</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-05-23 02:57:52 -0700</bug_when>
    <thetext>Comment on attachment 14675
Just the JSHTMLDocument

I think most of JSHTMLDocument stuff this patch moves should go into Document, see bug 13707.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>9314</commentid>
    <comment_count>8</comment_count>
      <attachid>14675</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-05-23 09:11:16 -0700</bug_when>
    <thetext>Comment on attachment 14675
Just the JSHTMLDocument

+        return toJS(exec, node);
+    } else if (!collection-&gt;length())
+        return jsUndefined();

No need for an else here.

+    if (Window* win = Window::retrieveWindow(frame))
+        return win-&gt;location();
+    return jsUndefined();

When can retrieveWindow return 0? Do we even need this case? Should it have ASSERT_NOT_REACHED()?

+void JSHTMLDocument::setLocation(ExecState* exec, JSValue* value)
+{
+    if (Frame* frame = static_cast&lt;HTMLDocument*&gt;(impl())-&gt;frame()) {

I&apos;d rather have an early return here than the entire function indented.

+        // When assigning location, IE and Mozilla both resolve the URL
+        // relative     not
+        // the target frame.

Formatting problem.

+        DeprecatedString str = value-&gt;toString(exec);

This can use String. Document has completeURL for both String and DeprecatedString, so lets use the String version.

+void JSHTMLDocument::setLocation(ExecState* exec, JSValue* value)

Why does this need to be a custom binding. This seems to just call toString and then act on the string. So it could use a standard binding if you added the necessary function to HTMLDocument.

+JSValue* JSHTMLDocument::width(ExecState*) const
+JSValue* JSHTMLDocument::height(ExecState*) const
+JSValue* JSHTMLDocument::dir(ExecState*) const
+void JSHTMLDocument::setDir(ExecState* exec, JSValue* value)
+JSValue* JSHTMLDocument::designMode(ExecState*) const
+void JSHTMLDocument::setDesignMode(ExecState* exec, JSValue* value)
+JSValue* JSHTMLDocument::bgColor(ExecState*) const
+void JSHTMLDocument::setBgColor(ExecState* exec, JSValue* value)
+JSValue* JSHTMLDocument::fgColor(ExecState*) const
+void JSHTMLDocument::setFgColor(ExecState* exec, JSValue* value)
+JSValue* JSHTMLDocument::alinkColor(ExecState*) const
+void JSHTMLDocument::setAlinkColor(ExecState* exec, JSValue* value)
+JSValue* JSHTMLDocument::linkColor(ExecState*) const
+void JSHTMLDocument::setLinkColor(ExecState* exec, JSValue* value)
+JSValue* JSHTMLDocument::vlinkColor(ExecState*) const
+void JSHTMLDocument::setVlinkColor(ExecState* exec, JSValue* value)
+JSValue* JSHTMLDocument::clear(ExecState*, const List&amp;)
+JSValue* JSHTMLDocument::captureEvents(ExecState*, const List&amp;)
+JSValue* JSHTMLDocument::releaseEvents(ExecState*, const List&amp;)

None of these seem to require a custom binding.

+            push(@specials, &quot;DontDelete&quot;) unless $attribute-&gt;signature-&gt;extendedAttributes-&gt;{&quot;Deletatable&quot;};

Should be &quot;Deletable&quot;, not &quot;Deletatable&quot;.

+#if defined(LANGUAGE_JAVASCRIPT)
+                 attribute DOMString domain;
+#else
         readonly attribute DOMString domain;
+#endif

Why do we need this to be read-only for non-JS languages?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>9292</commentid>
    <comment_count>9</comment_count>
      <attachid>14674</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-05-23 09:18:10 -0700</bug_when>
    <thetext>Comment on attachment 14674
Just the JSHTMLElement

-        case ElementInnerText:
-            impl()-&gt;document()-&gt;updateLayoutIgnorePendingStylesheets();
-            return jsString(element.innerText());

I see that innerText calls it if renderer() is non-0, but can it sometimes make renderer be non-0? If so, then this changes behavior.

+                 // So we use don&apos;t convert null to JS null.

I think you need to omit the word &quot;use&quot; here. It would be even easier to understand if you mentioned the attribute that we&apos;re not using.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>9291</commentid>
    <comment_count>10</comment_count>
      <attachid>14692</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-05-23 11:43:47 -0700</bug_when>
    <thetext>Created attachment 14692
Updated JSHTMLDocument patch

Updated patch addresses most of Darin&apos;s comments.  I have left location() and setLocation() as custom because they both deal with JS related concepts in appropriate for the implementation.  I also did not make the function clear() non-custom because doing so would interfere with the function Document.clear() already in the implementation.

 I have not addressed Alexey&apos;s comment as I would like to  do that in a separate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>9281</commentid>
    <comment_count>11</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-05-23 11:51:39 -0700</bug_when>
    <thetext>I left domain read-only for non-js platforms because this was the old behavior and conforms to the spec though I could certainly understand wanting to keep all the bindings in line. The change is trivial if you still think we should change it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>9277</commentid>
    <comment_count>12</comment_count>
      <attachid>14692</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-05-23 15:54:47 -0700</bug_when>
    <thetext>Comment on attachment 14692
Updated JSHTMLDocument patch

+        return toJS(exec, node);
+    } else if (!collection-&gt;length())
+        return jsUndefined();

No need for an else here. It would also be nice not to call collection-&gt;length() twice.

+        // FIXME: Create an [NoOp] property for legacy functions that do nothing like this.

I don&apos;t agree that we want to do this. Lets keep the binding layer as simple as possible. I know it&apos;s complicated, but lets not make it more complicated except for when we have to.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>9271</commentid>
    <comment_count>13</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-05-23 16:57:56 -0700</bug_when>
    <thetext>JSHTMLDocument patch landed in r21681.  JSHTMLElement patch landed in r21683. </thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>14666</attachid>
            <date>2007-05-22 14:38:51 -0700</date>
            <delta_ts>2007-05-22 19:37:45 -0700</delta_ts>
            <desc>patch</desc>
            <filename>autogenHTMLElemAndDoc.diff</filename>
            <type>text/plain</type>
            <size>56524</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMTY0NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjQgQEAKKzIwMDctMDUtMjIgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXRjaCBm
b3IgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM4MzAKKyAgICAgICAg
QXV0by1nZW5lcmF0ZSBKUyBET00gYmluZGluZ3MgZm9yIEhUTUxEb2N1bWVudCBhbmQgbW9zdCBv
ZiAKKyAgICAgICAgdGhlIHJlc3Qgb2YgSFRNTEVsZW1lbnQKKworICAgICAgICAtIENvbXBsZXRl
bHkgZ2VuZXJhdGVzIEhUTUxEb2N1bWVudC4KKyAgICAgICAgLSBHZW5lcmF0ZXMgbW9zdCBvZiB0
aGUgYXR0cmlidXRlcyBhbmQgZnVuY3Rpb25zIG9mIEhUTUxFbGVtZW50CisKKyAgICAgICAgKiBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNIVE1MQW5jaG9yRWxlbWVudEN1c3RvbS5jcHA6IEZpeCBsaWNlbnNlLgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTSFRNTERvY3VtZW50Q3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpKU0hUTUxEb2N1bWVudDo6Y2FuR2V0SXRlbXNGb3JOYW1lKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTSFRNTERvY3VtZW50OjpuYW1lR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRN
TERvY3VtZW50OjphbGwpOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MRG9jdW1lbnQ6OnNldEFs
bCk6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxEb2N1bWVudDo6bG9jYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6SlNIVE1MRG9jdW1lbnQ6OnNldExvY2F0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTSFRNTERvY3VtZW50Ojp3aWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxEb2N1
bWVudDo6aGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTERvY3VtZW50OjpkaXIpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNIVE1MRG9jdW1lbnQ6OnNldERpcik6CisgICAgICAgIChXZWJD
b3JlOjpKU0hUTUxEb2N1bWVudDo6ZGVzaWduTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0hU
TUxEb2N1bWVudDo6c2V0RGVzaWduTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxEb2N1
bWVudDo6YmdDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxEb2N1bWVudDo6c2V0QmdD
b2xvcik6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxEb2N1bWVudDo6ZmdDb2xvcik6CisgICAg
ICAgIChXZWJDb3JlOjpKU0hUTUxEb2N1bWVudDo6c2V0RmdDb2xvcik6CisgICAgICAgIChXZWJD
b3JlOjpKU0hUTUxEb2N1bWVudDo6YWxpbmtDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpKU0hU
TUxEb2N1bWVudDo6c2V0QWxpbmtDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxEb2N1
bWVudDo6bGlua0NvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTERvY3VtZW50OjpzZXRM
aW5rQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MRG9jdW1lbnQ6OnZsaW5rQ29sb3Ip
OgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MRG9jdW1lbnQ6OnNldFZsaW5rQ29sb3IpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNIVE1MRG9jdW1lbnQ6Om9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6
d3JpdGVIZWxwZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MRG9jdW1lbnQ6OndyaXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTERvY3VtZW50Ojp3cml0ZWxuKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTSFRNTERvY3VtZW50OjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxE
b2N1bWVudDo6Y2FwdHVyZUV2ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxEb2N1bWVu
dDo6cmVsZWFzZUV2ZW50cyk6CisgICAgICAgICogYmluZGluZ3MvanMva2pzX2RvbS5jcHA6Cisg
ICAgICAgIChLSlM6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL2tqc19kb20uaDoKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9ranNfaHRtbC5jcHA6CisgICAgICAgIChLSlM6OkpTSFRNTEVs
ZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkpOgorICAgICAgICAoS0pTOjpKU0hUTUxFbGVtZW50Ojp0
b1N0cmluZyk6CisgICAgICAgIChLSlM6OkpTSFRNTEVsZW1lbnQ6OnB1dFZhbHVlUHJvcGVydHkp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL2tqc19odG1sLmg6CisgICAgICAgIChLSlM6OkpTSFRN
TEVsZW1lbnQ6Oik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMu
cG06IEFkZCBbRGVsZXRhdGFibGVdIHByb3BlcnR5IAorICAgICAgICBmb3IgRG9jdW1lbnQuYWxs
IGFuZCBmaXggSGFzT3ZlcnJpZGluZ05hbWVHZXR0ZXIgdG8gYWxsb3cgY29ycmVjdCAKKyAgICAg
ICAgcHJvdG90eXBlIGNoYWluCisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkRvY3VtZW50OjpwbHVnaW5zKTogYWRkcyBhbGlhcyB0byBlbWJlZHMoKSBmb3Ig
YmluZGluZ3MuCisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1M
RG9jdW1lbnQuaWRsOgorICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnQuaWRsOgorCiAyMDA3LTA1
LTIyICBKdXN0aW4gR2FyY2lhICA8anVzdGluLmdhcmNpYUBhcHBsZS5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgb2xpdmVyCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMjE2MzMpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjc2Nyw2ICsyNzY3LDggQEAKIAkJ
QkM0OTFCNEYwQzAyM0UyRDAwOUQ2MzE2IC8qIEhUTUxNYXJxdWVlRWxlbWVudC5pZGwgaW4gUmVz
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNDkxQjRFMEMwMjNF
MkQwMDlENjMxNiAvKiBIVE1MTWFycXVlZUVsZW1lbnQuaWRsICovOyB9OwogCQlCQzQ5MUI3ODBD
MDIzRUZEMDA5RDYzMTYgLyogSlNIVE1MTWFycXVlZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM0OTFCNzYwQzAyM0VGRDAwOUQ2MzE2
IC8qIEpTSFRNTE1hcnF1ZWVFbGVtZW50LmNwcCAqLzsgfTsKIAkJQkM0OTFCNzkwQzAyM0VGRDAw
OUQ2MzE2IC8qIEpTSFRNTE1hcnF1ZWVFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzQ5MUI3NzBDMDIzRUZEMDA5RDYzMTYgLyogSlNIVE1M
TWFycXVlZUVsZW1lbnQuaCAqLzsgfTsKKwkJQkM1MTUxMEIwQzAyOEU1QTAwOEJCMEVFIC8qIEpT
SFRNTEVsZW1lbnRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQkM1MTUxMEEwQzAyOEU1QTAwOEJCMEVFIC8qIEpTSFRNTEVsZW1lbnRDdXN0
b20uY3BwICovOyB9OworCQlCQzUxNTIwNjBDMDI5RjlBMDA4QkIwRUUgLyogSlNIVE1MRG9jdW1l
bnRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkM1MTUyMDUwQzAyOUY5QTAwOEJCMEVFIC8qIEpTSFRNTERvY3VtZW50Q3VzdG9tLmNwcCAq
LzsgfTsKIAkJQkM1ODhBRjAwQkZBNkNGOTAwRUU2NzlFIC8qIEhUTUxQYXJzZXJFcnJvckNvZGVz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzU4OEFF
RjBCRkE2Q0Y5MDBFRTY3OUUgLyogSFRNTFBhcnNlckVycm9yQ29kZXMuaCAqLzsgfTsKIAkJQkM1
ODhCNEIwQkZBNzIzQzAwRUU2NzlFIC8qIEhUTUxQYXJzZXJFcnJvckNvZGVzLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNTg4QjRBMEJGQTcyM0Mw
MEVFNjc5RSAvKiBIVE1MUGFyc2VyRXJyb3JDb2Rlcy5jcHAgKi87IH07CiAJCUJDNkQ2REQyMDlB
RjkwNjYwMEY1OTc1OSAvKiBGb250LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJDNkQ2REQwMDlBRjkwNjYwMEY1OTc1OSAvKiBGb250LmNwcCAqLzsg
fTsKQEAgLTU5OTYsNiArNTk5OCw4IEBACiAJCUJDNDkxQjRFMEMwMjNFMkQwMDlENjMxNiAvKiBI
VE1MTWFycXVlZUVsZW1lbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEhUTUxNYXJxdWVl
RWxlbWVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDNDkxQjc2MEMwMjNF
RkQwMDlENjMxNiAvKiBKU0hUTUxNYXJxdWVlRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNIVE1MTWFycXVlZUVsZW1lbnQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlCQzQ5MUI3NzBDMDIzRUZEMDA5RDYzMTYgLyogSlNIVE1MTWFy
cXVlZUVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSFRNTE1h
cnF1ZWVFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDNTE1MTBBMEMw
MjhFNUEwMDhCQjBFRSAvKiBKU0hUTUxFbGVtZW50Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEpTSFRNTEVsZW1lbnRDdXN0b20uY3BwOyBwYXRoID0gLi4v
Li4vLi4vV2ViS2l0QnVpbGQvRGVidWcvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0hUTUxFbGVt
ZW50Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkM1MTUyMDUwQzAy
OUY5QTAwOEJCMEVFIC8qIEpTSFRNTERvY3VtZW50Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSFRNTERvY3VtZW50Q3VzdG9tLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM1ODhBRUYwQkZBNkNGOTAwRUU2NzlFIC8qIEhUTUxQYXJz
ZXJFcnJvckNvZGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIVE1MUGFy
c2VyRXJyb3JDb2Rlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzU4OEI0QTBC
RkE3MjNDMDBFRTY3OUUgLyogSFRNTFBhcnNlckVycm9yQ29kZXMuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhUTUxQYXJzZXJFcnJvckNvZGVzLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM1RUMxNzYwQTUwN0UzRTAwNjAwN0Y1IC8qIHZpZXct
c291cmNlLmNzcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gInZpZXctc291cmNlLmNzcyI7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05MDQ0LDYgKzkwNDgsOCBAQAogCQkJCUUxMEI5
MzdCMEI3M0MwMEEwMDNFRDg5MCAvKiBKU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5oICovLAogCQkJ
CTkyOTI2NDc2MEI2MUZDNzIwMEI0MUQzNCAvKiBKU0RvY3VtZW50Q3VzdG9tLmNwcCAqLywKIAkJ
CQlCQ0Y0MTE3NzBCRkNDNzZBMDAxMjU2MjIgLyogSlNIVE1MQW5jaG9yRWxlbWVudEN1c3RvbS5j
cHAgKi8sCisJCQkJQkM1MTUyMDUwQzAyOUY5QTAwOEJCMEVFIC8qIEpTSFRNTERvY3VtZW50Q3Vz
dG9tLmNwcCAqLywKKwkJCQlCQzUxNTEwQTBDMDI4RTVBMDA4QkIwRUUgLyogSlNIVE1MRWxlbWVu
dEN1c3RvbS5jcHAgKi8sCiAJCQkJOTM4RTY1RjYwOUYwOTg1RDAwOEE0OEVDIC8qIEpTSFRNTEVs
ZW1lbnRXcmFwcGVyRmFjdG9yeS5jcHAgKi8sCiAJCQkJOTM4RTY1RjAwOUYwOTg0MDAwOEE0OEVD
IC8qIEpTSFRNTEVsZW1lbnRXcmFwcGVyRmFjdG9yeS5oICovLAogCQkJCUE4RDA2NUFEMEEyNDQ2
Q0QwMDVFNzIwMyAvKiBKU0hUTUxGb3JtRWxlbWVudEN1c3RvbS5jcHAgKi8sCkBAIC0xMjczMyw2
ICsxMjczOSw4IEBACiAJCQkJQkM0OTE4QzYwQkZFQTA1MDAwOUQ2MzE2IC8qIEpTSFRNTEZyYW1l
RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzQ5MThDODBCRkVBMDUwMDA5RDYzMTYg
LyogSlNIVE1MSUZyYW1lRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzQ5MUI3ODBD
MDIzRUZEMDA5RDYzMTYgLyogSlNIVE1MTWFycXVlZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJQkM1MTUxMEIwQzAyOEU1QTAwOEJCMEVFIC8qIEpTSFRNTEVsZW1lbnRDdXN0b20uY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJQkM1MTUyMDYwQzAyOUY5QTAwOEJCMEVFIC8qIEpTSFRNTERv
Y3VtZW50Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBs
b3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0hUTUxBbmNob3JFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSFRNTEFuY2hvckVsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyMTYzMikK
KysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQW5jaG9yRWxlbWVudEN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsMjAgKzEsMjYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKLSAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
Ci0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAq
Ci0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAotICogQm9z
dG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgpAQCAtMjgsNSArMzQsNSBA
QCBLSlM6OkpTVmFsdWUqIEpTSFRNTEFuY2hvckVsZW1lbnQ6OnRvU3RyCiB7CiAgICAgcmV0dXJu
IGpzU3RyaW5nKEpTSFRNTEVsZW1lbnQ6OnRvU3RyaW5nKGV4ZWMpKTsKIH0KLSAgICAKKwogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxEb2N1
bWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxE
b2N1bWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SFRNTERvY3VtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNDUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNIVE1MRG9jdW1lbnQuaCIK
KworI2luY2x1ZGUgIkRlcHJlY2F0ZWRTdHJpbmcuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2lu
Y2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAi
SFRNTEJvZHlFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTENvbGxlY3Rpb24uaCIKKyNpbmNsdWRl
ICJIVE1MRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgorI2luY2x1ZGUgIkhU
TUxJRnJhbWVFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAia2pz
X2h0bWwuaCIKKyNpbmNsdWRlICJranNfd2luZG93LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KwordXNpbmcgbmFtZXNwYWNlIEtKUzsKK3VzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CisKK2Jv
b2wgSlNIVE1MRG9jdW1lbnQ6OmNhbkdldEl0ZW1zRm9yTmFtZShFeGVjU3RhdGUqLCBIVE1MRG9j
dW1lbnQqIGRvYywgY29uc3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0
dXJuIGRvYy0+aGFzTmFtZWRJdGVtKHByb3BlcnR5TmFtZSkgfHwgZG9jLT5oYXNEb2NFeHRyYU5h
bWVkSXRlbShwcm9wZXJ0eU5hbWUpOworfQorCitKU1ZhbHVlKiBKU0hUTUxEb2N1bWVudDo6bmFt
ZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvcmlnaW5hbE9iamVjdCwgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7Cisg
ICAgSlNIVE1MRG9jdW1lbnQqIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxKU0hUTUxEb2N1bWVudCo+
KHNsb3Quc2xvdEJhc2UoKSk7CisgICAgSFRNTERvY3VtZW50KiBkb2MgPSBzdGF0aWNfY2FzdDxI
VE1MRG9jdW1lbnQqPih0aGlzT2JqLT5pbXBsKCkpOworCisgICAgU3RyaW5nIG5hbWUgPSBwcm9w
ZXJ0eU5hbWU7CisgICAgUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBjb2xsZWN0aW9uID0gZG9jLT5k
b2N1bWVudE5hbWVkSXRlbXMobmFtZSk7CisKKyAgICBpZiAoY29sbGVjdGlvbi0+bGVuZ3RoKCkg
PT0gMSkgeworICAgICAgICBOb2RlKiBub2RlID0gY29sbGVjdGlvbi0+Zmlyc3RJdGVtKCk7CisK
KyAgICAgICAgRnJhbWUqIGZyYW1lOworICAgICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShpZnJh
bWVUYWcpICYmIChmcmFtZSA9IHN0YXRpY19jYXN0PEhUTUxJRnJhbWVFbGVtZW50Kj4obm9kZSkt
PmNvbnRlbnRGcmFtZSgpKSkKKyAgICAgICAgICAgIHJldHVybiBXaW5kb3c6OnJldHJpZXZlKGZy
YW1lKTsKKworICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBub2RlKTsKKyAgICB9IGVsc2UgaWYg
KCFjb2xsZWN0aW9uLT5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisK
KyAgICByZXR1cm4gZ2V0SFRNTENvbGxlY3Rpb24oZXhlYywgY29sbGVjdGlvbi5nZXQoKSk7Cit9
CisKKy8vIEN1c3RvbSBhdHRyaWJ1dGVzCisKK0pTVmFsdWUqIEpTSFRNTERvY3VtZW50OjphbGwo
RXhlY1N0YXRlKiBleGVjKSBjb25zdAoreworICAgIC8vIElmICJhbGwiIGhhcyBiZWVuIG92ZXJ3
cml0dGVuLCByZXR1cm4gdGhlIG92ZXJ3cml0dGVuIHZhbHVlCisgICAgaWYgKEpTVmFsdWUqIHYg
PSBnZXREaXJlY3QoImFsbCIpKQorICAgICAgICByZXR1cm4gdjsKKworICAgIHJldHVybiBnZXRB
bGxIVE1MQ29sbGVjdGlvbihleGVjLCBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQqPihpbXBsKCkp
LT5hbGwoKS5nZXQoKSk7Cit9CisKK3ZvaWQgSlNIVE1MRG9jdW1lbnQ6OnNldEFsbChFeGVjU3Rh
dGUqLCBKU1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICAvLyBBZGQgImFsbCIgdG8gdGhlIHByb3BlcnR5
IG1hcC4KKyAgICBwdXREaXJlY3QoImFsbCIsIHZhbHVlKTsKK30KKworSlNWYWx1ZSogSlNIVE1M
RG9jdW1lbnQ6OmxvY2F0aW9uKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK3sKKyAgICBGcmFtZSog
ZnJhbWUgPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQqPihpbXBsKCkpLT5mcmFtZSgpOworCisg
ICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIGpzTnVsbCgpOworICAgIGlmIChXaW5kb3cq
IHdpbiA9IFdpbmRvdzo6cmV0cmlldmVXaW5kb3coZnJhbWUpKQorICAgICAgICByZXR1cm4gd2lu
LT5sb2NhdGlvbigpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworfQorCit2b2lkIEpTSFRN
TERvY3VtZW50OjpzZXRMb2NhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHZhbHVlKQor
eworICAgIGlmIChGcmFtZSogZnJhbWUgPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQqPihpbXBs
KCkpLT5mcmFtZSgpKSB7CisgICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgc3RyID0gdmFsdWUtPnRv
U3RyaW5nKGV4ZWMpOworCisgICAgICAgIC8vIFdoZW4gYXNzaWduaW5nIGxvY2F0aW9uLCBJRSBh
bmQgTW96aWxsYSBib3RoIHJlc29sdmUgdGhlIFVSTAorICAgICAgICAvLyByZWxhdGl2ZSB0byB0
aGUgZnJhbWUgd2hlcmUgdGhlIEphdmFTY3JpcHQgaXMgZXhlY3V0aW5nIG5vdAorICAgICAgICAv
LyB0aGUgdGFyZ2V0IGZyYW1lLgorICAgICAgICBGcmFtZSogYWN0aXZlRnJhbWUgPSBzdGF0aWNf
Y2FzdDxTY3JpcHRJbnRlcnByZXRlcio+KGV4ZWMtPmR5bmFtaWNJbnRlcnByZXRlcigpKS0+ZnJh
bWUoKTsKKyAgICAgICAgaWYgKGFjdGl2ZUZyYW1lKQorICAgICAgICAgICAgc3RyID0gYWN0aXZl
RnJhbWUtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHN0cik7CisKKyAgICAgICAgLy8gV2Ugd2Fu
dCBhIG5ldyBoaXN0b3J5IGl0ZW0gaWYgdGhpcyBKUyB3YXMgY2FsbGVkIHZpYSBhIHVzZXIgZ2Vz
dHVyZQorICAgICAgICBib29sIHVzZXJHZXN0dXJlID0gc3RhdGljX2Nhc3Q8U2NyaXB0SW50ZXJw
cmV0ZXIqPihleGVjLT5keW5hbWljSW50ZXJwcmV0ZXIoKSktPndhc1J1bkJ5VXNlckdlc3R1cmUo
KTsKKyAgICAgICAgZnJhbWUtPmxvYWRlcigpLT5zY2hlZHVsZUxvY2F0aW9uQ2hhbmdlKHN0ciwg
YWN0aXZlRnJhbWUtPmxvYWRlcigpLT5vdXRnb2luZ1JlZmVycmVyKCksICF1c2VyR2VzdHVyZSk7
CisgICAgfQorfQorCitKU1ZhbHVlKiBKU0hUTUxEb2N1bWVudDo6d2lkdGgoRXhlY1N0YXRlKikg
Y29uc3QKK3sKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQq
PihpbXBsKCkpLT52aWV3KCk7CisgICAgcmV0dXJuIGpzTnVtYmVyKHZpZXcgPyB2aWV3LT5jb250
ZW50c0hlaWdodCgpIDogMCk7Cit9CisKK0pTVmFsdWUqIEpTSFRNTERvY3VtZW50OjpoZWlnaHQo
RXhlY1N0YXRlKikgY29uc3QKK3sKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSBzdGF0aWNfY2FzdDxI
VE1MRG9jdW1lbnQqPihpbXBsKCkpLT52aWV3KCk7CisgICAgcmV0dXJuIGpzTnVtYmVyKHZpZXcg
PyB2aWV3LT5jb250ZW50c0hlaWdodCgpIDogMCk7Cit9CisKK0pTVmFsdWUqIEpTSFRNTERvY3Vt
ZW50OjpkaXIoRXhlY1N0YXRlKikgY29uc3QKK3sKKyAgICBIVE1MRWxlbWVudCogYm9keSA9IHN0
YXRpY19jYXN0PEhUTUxEb2N1bWVudCo+KGltcGwoKSktPmJvZHkoKTsKKyAgICBpZiAoIWJvZHkp
CisgICAgICAgIHJldHVybiBqc1N0cmluZygiIik7CisgICAgcmV0dXJuIGpzU3RyaW5nKGJvZHkt
PmRpcigpKTsKK30KKwordm9pZCBKU0hUTUxEb2N1bWVudDo6c2V0RGlyKEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSogdmFsdWUpCit7CisgICAgSFRNTEVsZW1lbnQqIGJvZHkgPSBzdGF0aWNfY2Fz
dDxIVE1MRG9jdW1lbnQqPihpbXBsKCkpLT5ib2R5KCk7CisgICAgaWYgKGJvZHkpCisgICAgICAg
IGJvZHktPnNldERpcih2YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVjayhleGVjLCB2YWx1ZSkpOwor
fQorCitKU1ZhbHVlKiBKU0hUTUxEb2N1bWVudDo6ZGVzaWduTW9kZShFeGVjU3RhdGUqKSBjb25z
dAoreworICByZXR1cm4ganNTdHJpbmcoc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50Kj4oaW1wbCgp
KS0+aW5EZXNpZ25Nb2RlKCkgPyAib24iIDogIm9mZiIpOworfQorCit2b2lkIEpTSFRNTERvY3Vt
ZW50OjpzZXREZXNpZ25Nb2RlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogdmFsdWUpCit7Cisg
ICAgSFRNTERvY3VtZW50KiBkb2MgPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQqPihpbXBsKCkp
OworCisgICAgU3RyaW5nIG1vZGVTdHJpbmcgPSB2YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVjayhl
eGVjLCB2YWx1ZSk7CisgICAgRG9jdW1lbnQ6OkluaGVyaXRlZEJvb2wgbW9kZTsKKyAgICBpZiAo
ZXF1YWxJZ25vcmluZ0Nhc2UobW9kZVN0cmluZywgIm9uIikpCisgICAgICAgIG1vZGUgPSBEb2N1
bWVudDo6b247CisgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobW9kZVN0cmluZywgIm9m
ZiIpKQorICAgICAgICBtb2RlID0gRG9jdW1lbnQ6Om9mZjsKKyAgICBlbHNlCisgICAgICAgIG1v
ZGUgPSBEb2N1bWVudDo6aW5oZXJpdDsKKyAgICBkb2MtPnNldERlc2lnbk1vZGUobW9kZSk7Cit9
CisKK0pTVmFsdWUqIEpTSFRNTERvY3VtZW50OjpiZ0NvbG9yKEV4ZWNTdGF0ZSopIGNvbnN0Cit7
CisgICAgSFRNTEVsZW1lbnQqIGJvZHkgPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQqPihpbXBs
KCkpLT5ib2R5KCk7CisgICAgSFRNTEJvZHlFbGVtZW50KiBib2R5RWxlbWVudCA9IChib2R5ICYm
IGJvZHktPmhhc1RhZ05hbWUoYm9keVRhZykpID8gc3RhdGljX2Nhc3Q8SFRNTEJvZHlFbGVtZW50
Kj4oYm9keSkgOiAwOworCisgICAgaWYgKCFib2R5RWxlbWVudCkKKyAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CisgICAgcmV0dXJuIGpzU3RyaW5nKGJvZHlFbGVtZW50LT5iZ0NvbG9yKCkp
OworfQorCit2b2lkIEpTSFRNTERvY3VtZW50OjpzZXRCZ0NvbG9yKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSogdmFsdWUpCit7CisgICAgSFRNTEVsZW1lbnQqIGJvZHkgPSBzdGF0aWNfY2FzdDxI
VE1MRG9jdW1lbnQqPihpbXBsKCkpLT5ib2R5KCk7CisgICAgSFRNTEJvZHlFbGVtZW50KiBib2R5
RWxlbWVudCA9IChib2R5ICYmIGJvZHktPmhhc1RhZ05hbWUoYm9keVRhZykpID8gc3RhdGljX2Nh
c3Q8SFRNTEJvZHlFbGVtZW50Kj4oYm9keSkgOiAwOworCisgICAgaWYgKGJvZHlFbGVtZW50KQor
ICAgICAgICBib2R5RWxlbWVudC0+c2V0QmdDb2xvcih2YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVj
ayhleGVjLCB2YWx1ZSkpOworfQorCitKU1ZhbHVlKiBKU0hUTUxEb2N1bWVudDo6ZmdDb2xvcihF
eGVjU3RhdGUqKSBjb25zdAoreworICAgIEhUTUxFbGVtZW50KiBib2R5ID0gc3RhdGljX2Nhc3Q8
SFRNTERvY3VtZW50Kj4oaW1wbCgpKS0+Ym9keSgpOworICAgIEhUTUxCb2R5RWxlbWVudCogYm9k
eUVsZW1lbnQgPSAoYm9keSAmJiBib2R5LT5oYXNUYWdOYW1lKGJvZHlUYWcpKSA/IHN0YXRpY19j
YXN0PEhUTUxCb2R5RWxlbWVudCo+KGJvZHkpIDogMDsKKworICAgIGlmICghYm9keUVsZW1lbnQp
CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIHJldHVybiBqc1N0cmluZyhib2R5
RWxlbWVudC0+dGV4dCgpKTsKK30KKwordm9pZCBKU0hUTUxEb2N1bWVudDo6c2V0RmdDb2xvcihF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHZhbHVlKQoreworICAgIEhUTUxFbGVtZW50KiBib2R5
ID0gc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50Kj4oaW1wbCgpKS0+Ym9keSgpOworICAgIEhUTUxC
b2R5RWxlbWVudCogYm9keUVsZW1lbnQgPSAoYm9keSAmJiBib2R5LT5oYXNUYWdOYW1lKGJvZHlU
YWcpKSA/IHN0YXRpY19jYXN0PEhUTUxCb2R5RWxlbWVudCo+KGJvZHkpIDogMDsKKworICAgIGlm
IChib2R5RWxlbWVudCkKKyAgICAgICAgYm9keUVsZW1lbnQtPnNldFRleHQodmFsdWVUb1N0cmlu
Z1dpdGhOdWxsQ2hlY2soZXhlYywgdmFsdWUpKTsKK30KKworSlNWYWx1ZSogSlNIVE1MRG9jdW1l
bnQ6OmFsaW5rQ29sb3IoRXhlY1N0YXRlKikgY29uc3QKK3sKKyAgICBIVE1MRWxlbWVudCogYm9k
eSA9IHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCo+KGltcGwoKSktPmJvZHkoKTsKKyAgICBIVE1M
Qm9keUVsZW1lbnQqIGJvZHlFbGVtZW50ID0gKGJvZHkgJiYgYm9keS0+aGFzVGFnTmFtZShib2R5
VGFnKSkgPyBzdGF0aWNfY2FzdDxIVE1MQm9keUVsZW1lbnQqPihib2R5KSA6IDA7CisKKyAgICBp
ZiAoIWJvZHlFbGVtZW50KQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICByZXR1
cm4ganNTdHJpbmcoYm9keUVsZW1lbnQtPmFMaW5rKCkpOworfQorCit2b2lkIEpTSFRNTERvY3Vt
ZW50OjpzZXRBbGlua0NvbG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogdmFsdWUpCit7Cisg
ICAgSFRNTEVsZW1lbnQqIGJvZHkgPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQqPihpbXBsKCkp
LT5ib2R5KCk7CisgICAgSFRNTEJvZHlFbGVtZW50KiBib2R5RWxlbWVudCA9IChib2R5ICYmIGJv
ZHktPmhhc1RhZ05hbWUoYm9keVRhZykpID8gc3RhdGljX2Nhc3Q8SFRNTEJvZHlFbGVtZW50Kj4o
Ym9keSkgOiAwOworCisgICAgaWYgKGJvZHlFbGVtZW50KSB7CisgICAgICAgIC8vIFRoaXMgY2hl
Y2sgaXMgYSBiaXQgc2lsbHksIGJ1dCBzb21lIGJlbmNobWFya3MgbGlrZSB0byBzZXQgdGhlCisg
ICAgICAgIC8vIGRvY3VtZW50J3MgbGluayBjb2xvcnMgb3ZlciBhbmQgb3ZlciB0byB0aGUgc2Ft
ZSB2YWx1ZSBhbmQgd2UKKyAgICAgICAgLy8gZG9uJ3Qgd2FudCB0byBpbmN1ciBhIHN0eWxlIHVw
ZGF0ZSBlYWNoIHRpbWUuCisgICAgICAgIFN0cmluZyBuZXdDb2xvciA9IHZhbHVlVG9TdHJpbmdX
aXRoTnVsbENoZWNrKGV4ZWMsIHZhbHVlKTsKKyAgICAgICAgaWYgKGJvZHlFbGVtZW50LT5hTGlu
aygpICE9IG5ld0NvbG9yKQorICAgICAgICAgICAgYm9keUVsZW1lbnQtPnNldEFMaW5rKG5ld0Nv
bG9yKTsKKyAgICB9Cit9CisKK0pTVmFsdWUqIEpTSFRNTERvY3VtZW50OjpsaW5rQ29sb3IoRXhl
Y1N0YXRlKikgY29uc3QKK3sKKyAgICBIVE1MRWxlbWVudCogYm9keSA9IHN0YXRpY19jYXN0PEhU
TUxEb2N1bWVudCo+KGltcGwoKSktPmJvZHkoKTsKKyAgICBIVE1MQm9keUVsZW1lbnQqIGJvZHlF
bGVtZW50ID0gKGJvZHkgJiYgYm9keS0+aGFzVGFnTmFtZShib2R5VGFnKSkgPyBzdGF0aWNfY2Fz
dDxIVE1MQm9keUVsZW1lbnQqPihib2R5KSA6IDA7CisKKyAgICBpZiAoIWJvZHlFbGVtZW50KQor
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICByZXR1cm4ganNTdHJpbmcoYm9keUVs
ZW1lbnQtPmxpbmsoKSk7Cit9CisKK3ZvaWQgSlNIVE1MRG9jdW1lbnQ6OnNldExpbmtDb2xvcihF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHZhbHVlKQoreworICAgIEhUTUxFbGVtZW50KiBib2R5
ID0gc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50Kj4oaW1wbCgpKS0+Ym9keSgpOworICAgIEhUTUxC
b2R5RWxlbWVudCogYm9keUVsZW1lbnQgPSAoYm9keSAmJiBib2R5LT5oYXNUYWdOYW1lKGJvZHlU
YWcpKSA/IHN0YXRpY19jYXN0PEhUTUxCb2R5RWxlbWVudCo+KGJvZHkpIDogMDsKKworICAgIGlm
IChib2R5RWxlbWVudCkgeworICAgICAgICAvLyBUaGlzIGNoZWNrIGlzIGEgYml0IHNpbGx5LCBi
dXQgc29tZSBiZW5jaG1hcmtzIGxpa2UgdG8gc2V0IHRoZQorICAgICAgICAvLyBkb2N1bWVudCdz
IGxpbmsgY29sb3JzIG92ZXIgYW5kIG92ZXIgdG8gdGhlIHNhbWUgdmFsdWUgYW5kIHdlCisgICAg
ICAgIC8vIGRvbid0IHdhbnQgdG8gaW5jdXIgYSBzdHlsZSB1cGRhdGUgZWFjaCB0aW1lLgorICAg
ICAgICBTdHJpbmcgbmV3Q29sb3IgPSB2YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVjayhleGVjLCB2
YWx1ZSk7CisgICAgICAgIGlmIChib2R5RWxlbWVudC0+bGluaygpICE9IG5ld0NvbG9yKQorICAg
ICAgICAgICAgYm9keUVsZW1lbnQtPnNldExpbmsobmV3Q29sb3IpOworICAgIH0KKworfQorCitK
U1ZhbHVlKiBKU0hUTUxEb2N1bWVudDo6dmxpbmtDb2xvcihFeGVjU3RhdGUqKSBjb25zdAorewor
ICAgIEhUTUxFbGVtZW50KiBib2R5ID0gc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50Kj4oaW1wbCgp
KS0+Ym9keSgpOworICAgIEhUTUxCb2R5RWxlbWVudCogYm9keUVsZW1lbnQgPSAoYm9keSAmJiBi
b2R5LT5oYXNUYWdOYW1lKGJvZHlUYWcpKSA/IHN0YXRpY19jYXN0PEhUTUxCb2R5RWxlbWVudCo+
KGJvZHkpIDogMDsKKworICAgIGlmICghYm9keUVsZW1lbnQpCisgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOworICAgIHJldHVybiBqc1N0cmluZyhib2R5RWxlbWVudC0+dkxpbmsoKSk7Cit9
CisKK3ZvaWQgSlNIVE1MRG9jdW1lbnQ6OnNldFZsaW5rQ29sb3IoRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBIVE1MRWxlbWVudCogYm9keSA9IHN0YXRpY19jYXN0PEhU
TUxEb2N1bWVudCo+KGltcGwoKSktPmJvZHkoKTsKKyAgICBIVE1MQm9keUVsZW1lbnQqIGJvZHlF
bGVtZW50ID0gKGJvZHkgJiYgYm9keS0+aGFzVGFnTmFtZShib2R5VGFnKSkgPyBzdGF0aWNfY2Fz
dDxIVE1MQm9keUVsZW1lbnQqPihib2R5KSA6IDA7CisKKyAgICBpZiAoYm9keUVsZW1lbnQpIHsK
KyAgICAgICAgLy8gVGhpcyBjaGVjayBpcyBhIGJpdCBzaWxseSwgYnV0IHNvbWUgYmVuY2htYXJr
cyBsaWtlIHRvIHNldCB0aGUKKyAgICAgICAgLy8gZG9jdW1lbnQncyBsaW5rIGNvbG9ycyBvdmVy
IGFuZCBvdmVyIHRvIHRoZSBzYW1lIHZhbHVlIGFuZCB3ZQorICAgICAgICAvLyBkb24ndCB3YW50
IHRvIGluY3VyIGEgc3R5bGUgdXBkYXRlIGVhY2ggdGltZS4KKyAgICAgICAgU3RyaW5nIG5ld0Nv
bG9yID0gdmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2soZXhlYywgdmFsdWUpOworICAgICAgICBp
ZiAoYm9keUVsZW1lbnQtPnZMaW5rKCkgIT0gbmV3Q29sb3IpCisgICAgICAgICAgICBib2R5RWxl
bWVudC0+c2V0VkxpbmsobmV3Q29sb3IpOworICAgIH0KKworfQorCisvLyBDdXN0b20gZnVuY3Rp
b25zCisKK0pTVmFsdWUqIEpTSFRNTERvY3VtZW50OjpvcGVuKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgTGlzdCYgYXJncykKK3sKKyAgICAvLyBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIG90aGVyIGJy
b3dzZXJzLCBwYXNzIG9wZW4gY2FsbHMgd2l0aCBtb3JlIHRoYW4gMiBwYXJhbWV0ZXJzIHRvIHRo
ZSB3aW5kb3cuCisgICAgaWYgKGFyZ3Muc2l6ZSgpID4gMikgeworICAgICAgICBGcmFtZSogZnJh
bWUgPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQqPihpbXBsKCkpLT5mcmFtZSgpOworICAgICAg
ICBpZiAoZnJhbWUpIHsKKyAgICAgICAgICAgIFdpbmRvdyogd2luZG93ID0gV2luZG93OjpyZXRy
aWV2ZVdpbmRvdyhmcmFtZSk7CisgICAgICAgICAgICBpZiAod2luZG93KSB7CisgICAgICAgICAg
ICAgICAgSlNPYmplY3QqIGZ1bmN0aW9uT2JqZWN0ID0gd2luZG93LT5nZXQoZXhlYywgIm9wZW4i
KS0+Z2V0T2JqZWN0KCk7CisgICAgICAgICAgICAgICAgaWYgKCFmdW5jdGlvbk9iamVjdCB8fCAh
ZnVuY3Rpb25PYmplY3QtPmltcGxlbWVudHNDYWxsKCkpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGZ1bmN0aW9uT2JqZWN0LT5jYWxsKGV4ZWMsIHdpbmRvdywgYXJncyk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorCisgICAg
Ly8gSW4gdGhlIGNhc2Ugb2YgdHdvIHBhcmFtZXRlcnMgb3IgZmV3ZXIsIGRvIGEgbm9ybWFsIGRv
Y3VtZW50IG9wZW4uCisgICAgc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50Kj4oaW1wbCgpKS0+b3Bl
bigpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworfQorCitzdGF0aWMgU3RyaW5nIHdyaXRl
SGVscGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgTGlzdCYgYXJncykKK3sKKyAgICAvLyBET00g
b25seSBzcGVjaWZpZXMgc2luZ2xlIHN0cmluZyBhcmd1bWVudCwgYnV0IE5TICYgSUUgYWxsb3cg
bXVsdGlwbGUKKyAgICAvLyBvciBubyBhcmd1bWVudHMuCisgICAgU3RyaW5nIHN0ciA9ICIiOwor
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJncy5zaXplKCk7ICsraSkKKyAgICAgICAgc3RyICs9
IGFyZ3NbaV0tPnRvU3RyaW5nKGV4ZWMpOworICAgIHJldHVybiBzdHI7Cit9CisKK0pTVmFsdWUq
IEpTSFRNTERvY3VtZW50Ojp3cml0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IExpc3QmIGFyZ3Mp
Cit7CisgICAgc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50Kj4oaW1wbCgpKS0+d3JpdGUod3JpdGVI
ZWxwZXIoZXhlYywgYXJncykpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworfQorCitKU1Zh
bHVlKiBKU0hUTUxEb2N1bWVudDo6d3JpdGVsbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IExpc3Qm
IGFyZ3MpCit7CisgICAgc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50Kj4oaW1wbCgpKS0+d3JpdGUo
d3JpdGVIZWxwZXIoZXhlYywgYXJncykgKyAiXG4iKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKK30KKworSlNWYWx1ZSogSlNIVE1MRG9jdW1lbnQ6OmNsZWFyKEV4ZWNTdGF0ZSosIGNvbnN0
IExpc3QmKQoreworICAgIC8vIGV2ZW4gSUUgZG9lc24ndCBzdXBwb3J0IHRoaXMgb25lLi4uCisg
ICAgLy8gc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50Kj4oaW1wbCgpKS5jbGVhcigpOworICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOworfQorCitKU1ZhbHVlKiBKU0hUTUxEb2N1bWVudDo6Y2FwdHVy
ZUV2ZW50cyhFeGVjU3RhdGUqLCBjb25zdCBMaXN0JikKK3sKKyAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKK30KKworSlNWYWx1ZSogSlNIVE1MRG9jdW1lbnQ6OnJlbGVhc2VFdmVudHMoRXhlY1N0
YXRlKiwgY29uc3QgTGlzdCYpCit7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMva2pzX2RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfZG9tLmNwcAkocmV2aXNp
b24gMjE2MzIpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19kb20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDcxLDkgKzEwNzEsOSBAQCBKU1ZhbHVlKiBnZXRSdW50aW1lT2JqZWN0KEV4ZWNT
dGF0ZSogZXhlCiAgICAgcmV0dXJuIDA7CiB9CiAKLUpTVmFsdWUqIHRvSlMoRXhlY1N0YXRlKiBl
eGVjLCBQYXNzUmVmUHRyPE5vZGVMaXN0PiBsKQorSlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUqIGV4
ZWMsIE5vZGVMaXN0KiBsKQogewotICAgIHJldHVybiBjYWNoZURPTU9iamVjdDxOb2RlTGlzdCwg
RE9NTm9kZUxpc3Q+KGV4ZWMsIGwuZ2V0KCkpOworICAgIHJldHVybiBjYWNoZURPTU9iamVjdDxO
b2RlTGlzdCwgRE9NTm9kZUxpc3Q+KGV4ZWMsIGwpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19kb20uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL2pzL2tqc19kb20uaAkocmV2aXNpb24gMjE2MzIpCisrKyBXZWJDb3JlL2Jp
bmRpbmdzL2pzL2tqc19kb20uaAkod29ya2luZyBjb3B5KQpAQCAtMTM3LDcgKzEzNyw3IEBAIG5h
bWVzcGFjZSBLSlMgewogICBKU1ZhbHVlKiBnZXRSdW50aW1lT2JqZWN0KEV4ZWNTdGF0ZSosIFdl
YkNvcmU6Ok5vZGUqKTsKICAgSlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPFdl
YkNvcmU6Ok5vZGU+KTsKICAgSlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUqLCBXZWJDb3JlOjpOYW1l
ZE5vZGVNYXAqKTsKLSAgSlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPFdlYkNv
cmU6Ok5vZGVMaXN0Pik7CisgIEpTVmFsdWUqIHRvSlMoRXhlY1N0YXRlKiwgV2ViQ29yZTo6Tm9k
ZUxpc3QqKTsKICAgSlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUqLCBXZWJDb3JlOjpFdmVudFRhcmdl
dCopOwogICBKU09iamVjdCogZ2V0Tm9kZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSopOwogICBKU09i
amVjdCogZ2V0RE9NRXhjZXB0aW9uQ29uc3RydWN0b3IoRXhlY1N0YXRlKik7CkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL2pzL2tqc19odG1sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL2pzL2tqc19odG1sLmNwcAkocmV2aXNpb24gMjE2MzMpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L2pzL2tqc19odG1sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsMzQ1ICs3MSw2IEBAIHByaXZh
dGU6CiAgIGludCBpZDsKIH07CiAKLS8qIAotQGJlZ2luIEpTSFRNTERvY3VtZW50UHJvdG90eXBl
VGFibGUgOAotY2xlYXIgICAgICAgICAgICAgICAgIEpTSFRNTERvY3VtZW50OjpDbGVhciAgICAg
ICAgICAgICBEb250RGVsZXRlfEZ1bmN0aW9uIDAKLW9wZW4gICAgICAgICAgICAgICAgICBKU0hU
TUxEb2N1bWVudDo6T3BlbiAgICAgICAgICAgICAgRG9udERlbGV0ZXxGdW5jdGlvbiAwCi1jbG9z
ZSAgICAgICAgICAgICAgICAgSlNIVE1MRG9jdW1lbnQ6OkNsb3NlICAgICAgICAgICAgIERvbnRE
ZWxldGV8RnVuY3Rpb24gMAotd3JpdGUgICAgICAgICAgICAgICAgIEpTSFRNTERvY3VtZW50OjpX
cml0ZSAgICAgICAgICAgICBEb250RGVsZXRlfEZ1bmN0aW9uIDEKLXdyaXRlbG4gICAgICAgICAg
ICAgICBKU0hUTUxEb2N1bWVudDo6V3JpdGVMbiAgICAgICAgICAgRG9udERlbGV0ZXxGdW5jdGlv
biAxCi1nZXRFbGVtZW50c0J5TmFtZSAgICAgSlNIVE1MRG9jdW1lbnQ6OkdldEVsZW1lbnRzQnlO
YW1lIERvbnREZWxldGV8RnVuY3Rpb24gMQotY2FwdHVyZUV2ZW50cyAgICAgICAgIEpTSFRNTERv
Y3VtZW50OjpDYXB0dXJlRXZlbnRzICAgICBEb250RGVsZXRlfEZ1bmN0aW9uIDAKLXJlbGVhc2VF
dmVudHMgICAgICAgICBKU0hUTUxEb2N1bWVudDo6UmVsZWFzZUV2ZW50cyAgICAgRG9udERlbGV0
ZXxGdW5jdGlvbiAwCi1AZW5kCi0qLwotS0pTX0lNUExFTUVOVF9QUk9UT1RZUEVfRlVOQ1RJT04o
SlNIVE1MRG9jdW1lbnRQcm90b3R5cGVGdW5jdGlvbikKLUtKU19JTVBMRU1FTlRfUFJPVE9UWVBF
KCJET01IVE1MRG9jdW1lbnQiLCBKU0hUTUxEb2N1bWVudFByb3RvdHlwZSwgSlNIVE1MRG9jdW1l
bnRQcm90b3R5cGVGdW5jdGlvbikKLQotSlNWYWx1ZSAqSlNIVE1MRG9jdW1lbnRQcm90b3R5cGVG
dW5jdGlvbjo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09i
aiwgY29uc3QgTGlzdCAmYXJncykKLXsKLSAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZKU0hU
TUxEb2N1bWVudDo6aW5mbykpCi0gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVF
cnJvcik7Ci0gICAgSFRNTERvY3VtZW50ICZkb2MgPSAqc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50
Kj4oc3RhdGljX2Nhc3Q8SlNIVE1MRG9jdW1lbnQqPih0aGlzT2JqKS0+aW1wbCgpKTsKLSAgICAK
LSAgICBzd2l0Y2ggKGlkKSB7Ci0gICAgICAgIGNhc2UgSlNIVE1MRG9jdW1lbnQ6OkNsZWFyOiAv
LyBldmVuIElFIGRvZXNuJ3Qgc3VwcG9ydCB0aGF0IG9uZS4uLgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy9kb2MuY2xlYXIoKTsgLy8gVE9ETwotICAgICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgIGNhc2UgSlNIVE1MRG9jdW1lbnQ6Ok9wZW46Ci0g
ICAgICAgICAgICAvLyBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIG90aGVyIGJyb3dzZXJzLCBwYXNz
IG9wZW4gY2FsbHMgd2l0aCBtb3JlIHRoYW4gMiBwYXJhbWV0ZXJzIHRvIHRoZSB3aW5kb3cuCi0g
ICAgICAgICAgICBpZiAoYXJncy5zaXplKCkgPiAyKSB7Ci0gICAgICAgICAgICAgICAgRnJhbWUg
KmZyYW1lID0gZG9jLmZyYW1lKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGZyYW1lKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIFdpbmRvdyAqd2luZG93ID0gV2luZG93OjpyZXRyaWV2ZVdpbmRvdyhm
cmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh3aW5kb3cpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIEpTT2JqZWN0KiBmdW5jdGlvbk9iamVjdCA9IHdpbmRvdy0+Z2V0KGV4ZWMsICJv
cGVuIiktPmdldE9iamVjdCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmdW5jdGlv
bk9iamVjdCB8fCAhZnVuY3Rpb25PYmplY3QtPmltcGxlbWVudHNDYWxsKCkpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbk9iamVjdC0+Y2FsbChleGVjLCB3
aW5kb3csIGFyZ3MpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgLy8gSW4gdGhlIGNhc2Ugb2YgdHdvIHBhcmFtZXRlcnMgb3IgZmV3ZXIsIGRvIGEg
bm9ybWFsIGRvY3VtZW50IG9wZW4uCi0gICAgICAgICAgICBkb2Mub3BlbigpOwotICAgICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgIGNhc2UgSlNIVE1MRG9jdW1lbnQ6OkNs
b3NlOgotICAgICAgICAgICAgZG9jLmNsb3NlKCk7Ci0gICAgICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKLSAgICAgICAgY2FzZSBKU0hUTUxEb2N1bWVudDo6V3JpdGU6Ci0gICAgICAgIGNh
c2UgSlNIVE1MRG9jdW1lbnQ6OldyaXRlTG46IHsKLSAgICAgICAgICAgIC8vIERPTSBvbmx5IHNw
ZWNpZmllcyBzaW5nbGUgc3RyaW5nIGFyZ3VtZW50LCBidXQgTlMgJiBJRSBhbGxvdyBtdWx0aXBs
ZQotICAgICAgICAgICAgLy8gb3Igbm8gYXJndW1lbnRzCi0gICAgICAgICAgICBTdHJpbmcgc3Ry
ID0gIiI7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ3Muc2l6ZSgpOyBpKysp
Ci0gICAgICAgICAgICAgICAgc3RyICs9IGFyZ3NbaV0tPnRvU3RyaW5nKGV4ZWMpOwotICAgICAg
ICAgICAgaWYgKGlkID09IEpTSFRNTERvY3VtZW50OjpXcml0ZUxuKQotICAgICAgICAgICAgICAg
IHN0ciArPSAiXG4iOwotICAgICAgICAgICAgZG9jLndyaXRlKHN0cik7Ci0gICAgICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEpTSFRNTERvY3Vt
ZW50OjpHZXRFbGVtZW50c0J5TmFtZToKLSAgICAgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGRv
Yy5nZXRFbGVtZW50c0J5TmFtZShhcmdzWzBdLT50b1N0cmluZyhleGVjKSkuZ2V0KCkpOwotICAg
ICAgICBjYXNlIEpTSFRNTERvY3VtZW50OjpDYXB0dXJlRXZlbnRzOgotICAgICAgICBjYXNlIEpT
SFRNTERvY3VtZW50OjpSZWxlYXNlRXZlbnRzOgotICAgICAgICAgICAgLy8gRG8gbm90aGluZyBm
b3Igbm93LiBUaGVzZSBhcmUgTlMtc3BlY2lmaWMgbGVnYWN5IGNhbGxzLgotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotfQotCi0KLS8v
IEZJWE1FOiBmdW5jdGlvbnMgc2hvdWxkIGJlIGluIHRoZSBwcm90b3R5cGUKLWNvbnN0IENsYXNz
SW5mbyBKU0hUTUxEb2N1bWVudDo6aW5mbyA9Ci0gIHsgIkRPTUhUTUxEb2N1bWVudCIsICZKU0Rv
Y3VtZW50OjppbmZvLCAmSFRNTERvY3VtZW50VGFibGUsIDAgfTsKLS8qIFNvdXJjZSBmb3IgSFRN
TERvY3VtZW50VGFibGUuIFVzZSAibWFrZSBoYXNodGFibGVzIiB0byByZWdlbmVyYXRlLgotQGJl
Z2luIEhUTUxEb2N1bWVudFRhYmxlIDMwCi0gIHRpdGxlICAgICAgICAgICAgICAgICBKU0hUTUxE
b2N1bWVudDo6VGl0bGUgICAgICAgICAgICAgRG9udERlbGV0ZQotICByZWZlcnJlciAgICAgICAg
ICAgICAgSlNIVE1MRG9jdW1lbnQ6OlJlZmVycmVyICAgICAgICAgIERvbnREZWxldGV8UmVhZE9u
bHkKLSAgZG9tYWluICAgICAgICAgICAgICAgIEpTSFRNTERvY3VtZW50OjpEb21haW4gICAgICAg
ICAgICBEb250RGVsZXRlCi0gIGJvZHkgICAgICAgICAgICAgICAgICBKU0hUTUxEb2N1bWVudDo6
Qm9keSAgICAgICAgICAgICAgRG9udERlbGV0ZQotICBsb2NhdGlvbiAgICAgICAgICAgICAgSlNI
VE1MRG9jdW1lbnQ6OkxvY2F0aW9uICAgICAgICAgIERvbnREZWxldGUKLSAgY29va2llICAgICAg
ICAgICAgICAgIEpTSFRNTERvY3VtZW50OjpDb29raWUgICAgICAgICAgICBEb250RGVsZXRlCi0g
IGltYWdlcyAgICAgICAgICAgICAgICBKU0hUTUxEb2N1bWVudDo6SW1hZ2VzICAgICAgICAgICAg
RG9udERlbGV0ZXxSZWFkT25seQotICBlbWJlZHMgICAgICAgICAgICAgICAgSlNIVE1MRG9jdW1l
bnQ6OkVtYmVkcyAgICAgICAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKLSAgcGx1Z2lucyAgICAg
ICAgICAgICAgIEpTSFRNTERvY3VtZW50OjpFbWJlZHMgICAgICAgICAgICBEb250RGVsZXRlfFJl
YWRPbmx5Ci0gIGFwcGxldHMgICAgICAgICAgICAgICBKU0hUTUxEb2N1bWVudDo6QXBwbGV0cyAg
ICAgICAgICAgRG9udERlbGV0ZXxSZWFkT25seQotICBsaW5rcyAgICAgICAgICAgICAgICAgSlNI
VE1MRG9jdW1lbnQ6OkxpbmtzICAgICAgICAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKLSAgZm9y
bXMgICAgICAgICAgICAgICAgIEpTSFRNTERvY3VtZW50OjpGb3JtcyAgICAgICAgICAgICBEb250
RGVsZXRlfFJlYWRPbmx5Ci0gIGFuY2hvcnMgICAgICAgICAgICAgICBKU0hUTUxEb2N1bWVudDo6
QW5jaG9ycyAgICAgICAgICAgRG9udERlbGV0ZXxSZWFkT25seQotICBzY3JpcHRzICAgICAgICAg
ICAgICAgSlNIVE1MRG9jdW1lbnQ6OlNjcmlwdHMgICAgICAgICAgIERvbnREZWxldGV8UmVhZE9u
bHkKLSAgYWxsICAgICAgICAgICAgICAgICAgIEpTSFRNTERvY3VtZW50OjpBbGwgICAgICAgICAg
ICAgICAKLSAgYmdDb2xvciAgICAgICAgICAgICAgIEpTSFRNTERvY3VtZW50OjpCZ0NvbG9yICAg
ICAgICAgICBEb250RGVsZXRlCi0gIGZnQ29sb3IgICAgICAgICAgICAgICBKU0hUTUxEb2N1bWVu
dDo6RmdDb2xvciAgICAgICAgICAgRG9udERlbGV0ZQotICBhbGlua0NvbG9yICAgICAgICAgICAg
SlNIVE1MRG9jdW1lbnQ6OkFsaW5rQ29sb3IgICAgICAgIERvbnREZWxldGUKLSAgbGlua0NvbG9y
ICAgICAgICAgICAgIEpTSFRNTERvY3VtZW50OjpMaW5rQ29sb3IgICAgICAgICBEb250RGVsZXRl
Ci0gIHZsaW5rQ29sb3IgICAgICAgICAgICBKU0hUTUxEb2N1bWVudDo6VmxpbmtDb2xvciAgICAg
ICAgRG9udERlbGV0ZQotICBsYXN0TW9kaWZpZWQgICAgICAgICAgSlNIVE1MRG9jdW1lbnQ6Okxh
c3RNb2RpZmllZCAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKLSAgaGVpZ2h0ICAgICAgICAgICAg
ICAgIEpTSFRNTERvY3VtZW50OjpIZWlnaHQgICAgICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5
Ci0gIHdpZHRoICAgICAgICAgICAgICAgICBKU0hUTUxEb2N1bWVudDo6V2lkdGggICAgICAgICAg
ICAgRG9udERlbGV0ZXxSZWFkT25seQotICBkaXIgICAgICAgICAgICAgICAgICAgSlNIVE1MRG9j
dW1lbnQ6OkRpciAgICAgICAgICAgICAgIERvbnREZWxldGUKLSAgZGVzaWduTW9kZSAgICAgICAg
ICAgIEpTSFRNTERvY3VtZW50OjpEZXNpZ25Nb2RlICAgICAgICBEb250RGVsZXRlCi0jcG90ZW50
aWFsbHkgb2Jzb2xldGUgYXJyYXkgcHJvcGVydGllcwotIyBsYXllcnMKLSMgcGx1Z2lucwotIyB0
YWdzCi0jcG90ZW50aWFsbHkgb2Jzb2xldGUgcHJvcGVydGllcwotIyBlbWJlZHMKLSMgaWRzCi1A
ZW5kCi0qLwotCi1KU0hUTUxEb2N1bWVudDo6SlNIVE1MRG9jdW1lbnQoRXhlY1N0YXRlKiBleGVj
LCBIVE1MRG9jdW1lbnQgKmQpCi0gIDogSlNEb2N1bWVudChleGVjLCBkKQotewotICAgIHNldFBy
b3RvdHlwZShKU0hUTUxEb2N1bWVudFByb3RvdHlwZTo6c2VsZihleGVjKSk7Ci19Ci0KLUpTVmFs
dWUgKkpTSFRNTERvY3VtZW50OjpuYW1lZEl0ZW1HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCogb3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29u
c3QgUHJvcGVydHlTbG90JiBzbG90KQotewotICBKU0hUTUxEb2N1bWVudCAqdGhpc09iaiA9IHN0
YXRpY19jYXN0PEpTSFRNTERvY3VtZW50Kj4oc2xvdC5zbG90QmFzZSgpKTsKLSAgSFRNTERvY3Vt
ZW50ICZkb2MgPSAqc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50Kj4odGhpc09iai0+aW1wbCgpKTsK
LQotICBTdHJpbmcgbmFtZSA9IHByb3BlcnR5TmFtZTsKLSAgUmVmUHRyPEhUTUxDb2xsZWN0aW9u
PiBjb2xsZWN0aW9uID0gZG9jLmRvY3VtZW50TmFtZWRJdGVtcyhuYW1lKTsKLQotICBpZiAoY29s
bGVjdGlvbi0+bGVuZ3RoKCkgPT0gMSkgewotICAgIE5vZGUqIG5vZGUgPSBjb2xsZWN0aW9uLT5m
aXJzdEl0ZW0oKTsKLSAgICBGcmFtZSAqZnJhbWU7Ci0gICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUo
aWZyYW1lVGFnKSAmJiAoZnJhbWUgPSBzdGF0aWNfY2FzdDxIVE1MSUZyYW1lRWxlbWVudCo+KG5v
ZGUpLT5jb250ZW50RnJhbWUoKSkpCi0gICAgICByZXR1cm4gV2luZG93OjpyZXRyaWV2ZShmcmFt
ZSk7Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywgbm9kZSk7Ci0gIH0gZWxzZSBpZiAoY29sbGVjdGlv
bi0+bGVuZ3RoKCkgPT0gMCkKLSAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotCi0gIHJldHVy
biBnZXRIVE1MQ29sbGVjdGlvbihleGVjLCBjb2xsZWN0aW9uLmdldCgpKTsKLX0KLQotSlNWYWx1
ZSAqSlNIVE1MRG9jdW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBpbnQg
dG9rZW4pIGNvbnN0Ci17Ci0gIEhUTUxEb2N1bWVudCYgZG9jID0gKnN0YXRpY19jYXN0PEhUTUxE
b2N1bWVudCo+KGltcGwoKSk7Ci0KLSAgRnJhbWVWaWV3KiB2aWV3ID0gZG9jLnZpZXcoKTsKLSAg
RnJhbWUqIGZyYW1lID0gZG9jLmZyYW1lKCk7Ci0KLSAgSFRNTEVsZW1lbnQqIGJvZHkgPSBkb2Mu
Ym9keSgpOwotICBIVE1MQm9keUVsZW1lbnQqIGJvZHlFbGVtZW50ID0gKGJvZHkgJiYgYm9keS0+
aGFzVGFnTmFtZShib2R5VGFnKSkgPyBzdGF0aWNfY2FzdDxIVE1MQm9keUVsZW1lbnQqPihib2R5
KSA6IDA7Ci0gICAgCi0gIHN3aXRjaCAodG9rZW4pIHsKLSAgY2FzZSBUaXRsZToKLSAgICByZXR1
cm4ganNTdHJpbmcoZG9jLnRpdGxlKCkpOwotICBjYXNlIFJlZmVycmVyOgotICAgIHJldHVybiBq
c1N0cmluZyhkb2MucmVmZXJyZXIoKSk7Ci0gIGNhc2UgRG9tYWluOgotICAgIHJldHVybiBqc1N0
cmluZyhkb2MuZG9tYWluKCkpOwotICBjYXNlIEJvZHk6Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywg
Ym9keSk7Ci0gIGNhc2UgTG9jYXRpb246Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgIHJldHVybiBq
c051bGwoKTsKLSAgICBpZiAoV2luZG93KiB3aW4gPSBXaW5kb3c6OnJldHJpZXZlV2luZG93KGZy
YW1lKSkKLSAgICAgIHJldHVybiB3aW4tPmxvY2F0aW9uKCk7Ci0gICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7Ci0gIGNhc2UgQ29va2llOgotICAgIHJldHVybiBqc1N0cmluZyhkb2MuY29va2llKCkp
OwotICBjYXNlIEltYWdlczoKLSAgICByZXR1cm4gZ2V0SFRNTENvbGxlY3Rpb24oZXhlYywgZG9j
LmltYWdlcygpLmdldCgpKTsKLSAgY2FzZSBFbWJlZHM6Ci0gICAgcmV0dXJuIGdldEhUTUxDb2xs
ZWN0aW9uKGV4ZWMsIGRvYy5lbWJlZHMoKS5nZXQoKSk7Ci0gIGNhc2UgQXBwbGV0czoKLSAgICBy
ZXR1cm4gZ2V0SFRNTENvbGxlY3Rpb24oZXhlYywgZG9jLmFwcGxldHMoKS5nZXQoKSk7Ci0gIGNh
c2UgTGlua3M6Ci0gICAgcmV0dXJuIGdldEhUTUxDb2xsZWN0aW9uKGV4ZWMsIGRvYy5saW5rcygp
LmdldCgpKTsKLSAgY2FzZSBGb3JtczoKLSAgICByZXR1cm4gZ2V0SFRNTENvbGxlY3Rpb24oZXhl
YywgZG9jLmZvcm1zKCkuZ2V0KCkpOwotICBjYXNlIEFuY2hvcnM6Ci0gICAgcmV0dXJuIGdldEhU
TUxDb2xsZWN0aW9uKGV4ZWMsIGRvYy5hbmNob3JzKCkuZ2V0KCkpOwotICBjYXNlIFNjcmlwdHM6
Ci0gICAgcmV0dXJuIGdldEhUTUxDb2xsZWN0aW9uKGV4ZWMsIGRvYy5zY3JpcHRzKCkuZ2V0KCkp
OwotICBjYXNlIEFsbDoKLSAgICAvLyBJZiAiYWxsIiBoYXMgYmVlbiBvdmVyd3JpdHRlbiwgcmV0
dXJuIHRoZSBvdmVyd3JpdHRlbiB2YWx1ZQotICAgIGlmIChKU1ZhbHVlICp2ID0gZ2V0RGlyZWN0
KCJhbGwiKSkKLSAgICAgIHJldHVybiB2OwotICAgIGVsc2UKLSAgICAgIHJldHVybiBnZXRBbGxI
VE1MQ29sbGVjdGlvbihleGVjLCBkb2MuYWxsKCkuZ2V0KCkpOwotICBjYXNlIEJnQ29sb3I6Ci0g
ICAgaWYgKCFib2R5RWxlbWVudCkKLSAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIHJl
dHVybiBqc1N0cmluZyhib2R5RWxlbWVudC0+YmdDb2xvcigpKTsKLSAgY2FzZSBGZ0NvbG9yOgot
ICAgIGlmICghYm9keUVsZW1lbnQpCi0gICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBy
ZXR1cm4ganNTdHJpbmcoYm9keUVsZW1lbnQtPnRleHQoKSk7Ci0gIGNhc2UgQWxpbmtDb2xvcjoK
LSAgICBpZiAoIWJvZHlFbGVtZW50KQotICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAg
cmV0dXJuIGpzU3RyaW5nKGJvZHlFbGVtZW50LT5hTGluaygpKTsKLSAgY2FzZSBMaW5rQ29sb3I6
Ci0gICAgaWYgKCFib2R5RWxlbWVudCkKLSAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAg
IHJldHVybiBqc1N0cmluZyhib2R5RWxlbWVudC0+bGluaygpKTsKLSAgY2FzZSBWbGlua0NvbG9y
OgotICAgIGlmICghYm9keUVsZW1lbnQpCi0gICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAg
ICByZXR1cm4ganNTdHJpbmcoYm9keUVsZW1lbnQtPnZMaW5rKCkpOwotICBjYXNlIExhc3RNb2Rp
ZmllZDoKLSAgICByZXR1cm4ganNTdHJpbmcoZG9jLmxhc3RNb2RpZmllZCgpKTsKLSAgY2FzZSBI
ZWlnaHQ6Ci0gICAgcmV0dXJuIGpzTnVtYmVyKHZpZXcgPyB2aWV3LT5jb250ZW50c0hlaWdodCgp
IDogMCk7Ci0gIGNhc2UgV2lkdGg6Ci0gICAgcmV0dXJuIGpzTnVtYmVyKHZpZXcgPyB2aWV3LT5j
b250ZW50c1dpZHRoKCkgOiAwKTsKLSAgY2FzZSBEaXI6Ci0gICAgaWYgKCFib2R5KQotICAgICAg
cmV0dXJuIGpzU3RyaW5nKCIiKTsKLSAgICByZXR1cm4ganNTdHJpbmcoYm9keS0+ZGlyKCkpOwot
ICBjYXNlIERlc2lnbk1vZGU6Ci0gICAgcmV0dXJuIGpzU3RyaW5nKGRvYy5pbkRlc2lnbk1vZGUo
KSA/ICJvbiIgOiAib2ZmIik7Ci0gIGRlZmF1bHQ6Ci0gICAgQVNTRVJUKDApOwotICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwotICB9Ci19Ci0KLWJvb2wgSlNIVE1MRG9jdW1lbnQ6OmdldE93blBy
b3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90JiBzbG90KQotewotICBIVE1MRG9jdW1lbnQgJmRvYyA9ICpzdGF0aWNf
Y2FzdDxIVE1MRG9jdW1lbnQqPihpbXBsKCkpOwotCi0gIFN0cmluZyBuYW1lID0gcHJvcGVydHlO
YW1lOwotICBpZiAoZG9jLmhhc05hbWVkSXRlbShuYW1lKSB8fCBkb2MuaGFzRG9jRXh0cmFOYW1l
ZEl0ZW0obmFtZSkpIHsKLSAgICBzbG90LnNldEN1c3RvbSh0aGlzLCBuYW1lZEl0ZW1HZXR0ZXIp
OwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcmV0dXJuIGdldFN0YXRpY1ZhbHVlU2xvdDxK
U0hUTUxEb2N1bWVudCwgSlNEb2N1bWVudD4oZXhlYywgJkhUTUxEb2N1bWVudFRhYmxlLCB0aGlz
LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwotfQotCi12b2lkIEpTSFRNTERvY3VtZW50OjpwdXQoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgKnZh
bHVlLCBpbnQgYXR0cikKLXsKLSAgICBsb29rdXBQdXQ8SlNIVE1MRG9jdW1lbnQsIEpTRG9jdW1l
bnQ+KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHIsICZIVE1MRG9jdW1lbnRUYWJsZSwg
dGhpcyk7Ci19Ci0KLXZvaWQgSlNIVE1MRG9jdW1lbnQ6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0
YXRlKiBleGVjLCBpbnQgdG9rZW4sIEpTVmFsdWUgKnZhbHVlLCBpbnQgLyphdHRyKi8pCi17Ci0g
IERPTUV4Y2VwdGlvblRyYW5zbGF0b3IgZXhjZXB0aW9uKGV4ZWMpOwotICBIVE1MRG9jdW1lbnQg
JmRvYyA9ICpzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQqPihpbXBsKCkpOwotICBIVE1MRWxlbWVu
dCogYm9keSA9IGRvYy5ib2R5KCk7Ci0gIEhUTUxCb2R5RWxlbWVudCogYm9keUVsZW1lbnQgPSAo
Ym9keSAmJiBib2R5LT5oYXNUYWdOYW1lKGJvZHlUYWcpKSA/IHN0YXRpY19jYXN0PEhUTUxCb2R5
RWxlbWVudCo+KGJvZHkpIDogMDsKLQotICBzd2l0Y2ggKHRva2VuKSB7Ci0gIGNhc2UgVGl0bGU6
Ci0gICAgZG9jLnNldFRpdGxlKHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKGV4ZWMsIHZhbHVl
KSk7Ci0gICAgYnJlYWs7Ci0gIGNhc2UgQm9keToKLSAgICBkb2Muc2V0Qm9keSh0b0hUTUxFbGVt
ZW50KHZhbHVlKSwgZXhjZXB0aW9uKTsKLSAgICBicmVhazsKLSAgY2FzZSBEb21haW46IC8vIG5v
dCBwYXJ0IG9mIHRoZSBET00KLSAgICBkb2Muc2V0RG9tYWluKHZhbHVlLT50b1N0cmluZyhleGVj
KSk7Ci0gICAgYnJlYWs7Ci0gIGNhc2UgQ29va2llOgotICAgIGRvYy5zZXRDb29raWUodmFsdWVU
b1N0cmluZ1dpdGhOdWxsQ2hlY2soZXhlYywgdmFsdWUpKTsKLSAgICBicmVhazsKLSAgY2FzZSBM
b2NhdGlvbjoKLSAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jLmZyYW1lKCkpIHsKLSAgICAgIERl
cHJlY2F0ZWRTdHJpbmcgc3RyID0gdmFsdWUtPnRvU3RyaW5nKGV4ZWMpOwotCi0gICAgICAvLyBX
aGVuIGFzc2lnbmluZyBsb2NhdGlvbiwgSUUgYW5kIE1vemlsbGEgYm90aCByZXNvbHZlIHRoZSBV
UkwKLSAgICAgIC8vIHJlbGF0aXZlIHRvIHRoZSBmcmFtZSB3aGVyZSB0aGUgSmF2YVNjcmlwdCBp
cyBleGVjdXRpbmcgbm90Ci0gICAgICAvLyB0aGUgdGFyZ2V0IGZyYW1lLgotICAgICAgRnJhbWUq
IGFjdGl2ZUZyYW1lID0gc3RhdGljX2Nhc3Q8U2NyaXB0SW50ZXJwcmV0ZXIqPiggZXhlYy0+ZHlu
YW1pY0ludGVycHJldGVyKCkgKS0+ZnJhbWUoKTsKLSAgICAgIGlmIChhY3RpdmVGcmFtZSkKLSAg
ICAgICAgc3RyID0gYWN0aXZlRnJhbWUtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHN0cik7Ci0K
LSAgICAgIC8vIFdlIHdhbnQgYSBuZXcgaGlzdG9yeSBpdGVtIGlmIHRoaXMgSlMgd2FzIGNhbGxl
ZCB2aWEgYSB1c2VyIGdlc3R1cmUKLSAgICAgIGJvb2wgdXNlckdlc3R1cmUgPSBzdGF0aWNfY2Fz
dDxTY3JpcHRJbnRlcnByZXRlcio+KGV4ZWMtPmR5bmFtaWNJbnRlcnByZXRlcigpKS0+d2FzUnVu
QnlVc2VyR2VzdHVyZSgpOwotICAgICAgZnJhbWUtPmxvYWRlcigpLT5zY2hlZHVsZUxvY2F0aW9u
Q2hhbmdlKHN0ciwgYWN0aXZlRnJhbWUtPmxvYWRlcigpLT5vdXRnb2luZ1JlZmVycmVyKCksICF1
c2VyR2VzdHVyZSk7Ci0gICAgfQotICAgIGJyZWFrOwotICBjYXNlIEJnQ29sb3I6Ci0gICAgaWYg
KGJvZHlFbGVtZW50KQotICAgICAgYm9keUVsZW1lbnQtPnNldEJnQ29sb3IodmFsdWVUb1N0cmlu
Z1dpdGhOdWxsQ2hlY2soZXhlYywgdmFsdWUpKTsKLSAgICBicmVhazsKLSAgY2FzZSBGZ0NvbG9y
OgotICAgIGlmIChib2R5RWxlbWVudCkKLSAgICAgIGJvZHlFbGVtZW50LT5zZXRUZXh0KHZhbHVl
VG9TdHJpbmdXaXRoTnVsbENoZWNrKGV4ZWMsIHZhbHVlKSk7Ci0gICAgYnJlYWs7Ci0gIGNhc2Ug
QWxpbmtDb2xvcjoKLSAgICBpZiAoYm9keUVsZW1lbnQpIHsKLSAgICAgIC8vIHRoaXMgY2hlY2sg
aXMgYSBiaXQgc2lsbHksIGJ1dCBzb21lIGJlbmNobWFya3MgbGlrZSB0byBzZXQgdGhlCi0gICAg
ICAvLyBkb2N1bWVudCdzIGxpbmsgY29sb3JzIG92ZXIgYW5kIG92ZXIgdG8gdGhlIHNhbWUgdmFs
dWUgYW5kIHdlCi0gICAgICAvLyBkb24ndCB3YW50IHRvIGluY3VyIGEgc3R5bGUgdXBkYXRlIGVh
Y2ggdGltZS4KLSAgICAgIFN0cmluZyBuZXdDb2xvciA9IHZhbHVlVG9TdHJpbmdXaXRoTnVsbENo
ZWNrKGV4ZWMsIHZhbHVlKTsKLSAgICAgIGlmIChib2R5RWxlbWVudC0+YUxpbmsoKSAhPSBuZXdD
b2xvcikKLSAgICAgICAgYm9keUVsZW1lbnQtPnNldEFMaW5rKG5ld0NvbG9yKTsKLSAgICB9Ci0g
ICAgYnJlYWs7Ci0gIGNhc2UgTGlua0NvbG9yOgotICAgIGlmIChib2R5RWxlbWVudCkgewotICAg
ICAgLy8gdGhpcyBjaGVjayBpcyBhIGJpdCBzaWxseSwgYnV0IHNvbWUgYmVuY2htYXJrcyBsaWtl
IHRvIHNldCB0aGUKLSAgICAgIC8vIGRvY3VtZW50J3MgbGluayBjb2xvcnMgb3ZlciBhbmQgb3Zl
ciB0byB0aGUgc2FtZSB2YWx1ZSBhbmQgd2UKLSAgICAgIC8vIGRvbid0IHdhbnQgdG8gaW5jdXIg
YSBzdHlsZSB1cGRhdGUgZWFjaCB0aW1lLgotICAgICAgU3RyaW5nIG5ld0NvbG9yID0gdmFsdWVU
b1N0cmluZ1dpdGhOdWxsQ2hlY2soZXhlYywgdmFsdWUpOwotICAgICAgaWYgKGJvZHlFbGVtZW50
LT5saW5rKCkgIT0gbmV3Q29sb3IpCi0gICAgICAgIGJvZHlFbGVtZW50LT5zZXRMaW5rKG5ld0Nv
bG9yKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0gIGNhc2UgVmxpbmtDb2xvcjoKLSAgICBpZiAoYm9k
eUVsZW1lbnQpIHsKLSAgICAgIC8vIHRoaXMgY2hlY2sgaXMgYSBiaXQgc2lsbHksIGJ1dCBzb21l
IGJlbmNobWFya3MgbGlrZSB0byBzZXQgdGhlCi0gICAgICAvLyBkb2N1bWVudCdzIGxpbmsgY29s
b3JzIG92ZXIgYW5kIG92ZXIgdG8gdGhlIHNhbWUgdmFsdWUgYW5kIHdlCi0gICAgICAvLyBkb24n
dCB3YW50IHRvIGluY3VyIGEgc3R5bGUgdXBkYXRlIGVhY2ggdGltZS4KLSAgICAgIFN0cmluZyBu
ZXdDb2xvciA9IHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKGV4ZWMsIHZhbHVlKTsKLSAgICAg
IGlmIChib2R5RWxlbWVudC0+dkxpbmsoKSAhPSBuZXdDb2xvcikKLSAgICAgICAgYm9keUVsZW1l
bnQtPnNldFZMaW5rKG5ld0NvbG9yKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0gIGNhc2UgRGlyOgot
ICAgIGlmIChib2R5KQotICAgICAgYm9keS0+c2V0RGlyKHZhbHVlVG9TdHJpbmdXaXRoTnVsbENo
ZWNrKGV4ZWMsIHZhbHVlKSk7Ci0gICAgYnJlYWs7Ci0gIGNhc2UgRGVzaWduTW9kZToKLSAgICB7
Ci0gICAgICBTdHJpbmcgbW9kZVN0cmluZyA9IHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKGV4
ZWMsIHZhbHVlKTsKLSAgICAgIERvY3VtZW50OjpJbmhlcml0ZWRCb29sIG1vZGU7Ci0gICAgICBp
ZiAoZXF1YWxJZ25vcmluZ0Nhc2UobW9kZVN0cmluZywgIm9uIikpCi0gICAgICAgIG1vZGUgPSBE
b2N1bWVudDo6b247Ci0gICAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShtb2RlU3RyaW5n
LCAib2ZmIikpCi0gICAgICAgIG1vZGUgPSBEb2N1bWVudDo6b2ZmOwotICAgICAgZWxzZQotICAg
ICAgICBtb2RlID0gRG9jdW1lbnQ6OmluaGVyaXQ7Ci0gICAgICBkb2Muc2V0RGVzaWduTW9kZSht
b2RlKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgY2FzZSBBbGw6Ci0gICAgLy8gQWRkICJhbGwi
IHRvIHRoZSBwcm9wZXJ0eSBtYXAuCi0gICAgcHV0RGlyZWN0KCJhbGwiLCB2YWx1ZSk7Ci0gICAg
YnJlYWs7Ci0gIH0KLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCiBjb25zdCBDbGFzc0luZm8g
SlNIVE1MRWxlbWVudDo6aW5mbyA9IHsgIkhUTUxFbGVtZW50IiwgJkpTRWxlbWVudDo6aW5mbywg
JkhUTUxFbGVtZW50VGFibGUsIDAgfTsKIAogY29uc3QgQ2xhc3NJbmZvIEpTSFRNTEVsZW1lbnQ6
OmVtYmVkX2luZm8gPSB7ICJIVE1MRW1iZWRFbGVtZW50IiwgJkpTSFRNTEVsZW1lbnQ6OmluZm8s
ICZIVE1MRW1iZWRFbGVtZW50VGFibGUsIDAgfTsKQEAgLTQ1MywyMiArMTE0LDcgQEAgY29uc3Qg
SlNIVE1MRWxlbWVudDo6QWNjZXNzb3JzKiBKU0hUTUxFbAogCiBAYmVnaW4gSlNIVE1MRWxlbWVu
dFByb3RvdHlwZVRhYmxlIDAKIEBlbmQKLQotQGJlZ2luIEhUTUxFbGVtZW50VGFibGUgMTQKLSAg
aWQgICAgICAgICAgICBLSlM6OkpTSFRNTEVsZW1lbnQ6OkVsZW1lbnRJZCAgICAgRG9udERlbGV0
ZQotICBsYW5nICAgICAgICAgIEtKUzo6SlNIVE1MRWxlbWVudDo6RWxlbWVudExhbmcgICBEb250
RGVsZXRlCi0gIGRpciAgICAgICAgICAgS0pTOjpKU0hUTUxFbGVtZW50OjpFbGVtZW50RGlyICAg
IERvbnREZWxldGUKLSMjIyBpc24ndCB0aGlzICJjbGFzcyIgaW4gdGhlIEhUTUwgc3BlYz8KLSAg
Y2xhc3NOYW1lICAgICBLSlM6OkpTSFRNTEVsZW1lbnQ6OkVsZW1lbnRDbGFzc05hbWUgRG9udERl
bGV0ZQotICBpbm5lckhUTUwgICAgIEtKUzo6SlNIVE1MRWxlbWVudDo6RWxlbWVudElubmVySFRN
TCBEb250RGVsZXRlCi0gIGlubmVyVGV4dCAgICAgS0pTOjpKU0hUTUxFbGVtZW50OjpFbGVtZW50
SW5uZXJUZXh0IERvbnREZWxldGUKLSAgb3V0ZXJIVE1MICAgICBLSlM6OkpTSFRNTEVsZW1lbnQ6
OkVsZW1lbnRPdXRlckhUTUwgRG9udERlbGV0ZQotICBvdXRlclRleHQgICAgIEtKUzo6SlNIVE1M
RWxlbWVudDo6RWxlbWVudE91dGVyVGV4dCBEb250RGVsZXRlCi0gIGRvY3VtZW50ICAgICAgS0pT
OjpKU0hUTUxFbGVtZW50OjpFbGVtZW50RG9jdW1lbnQgIERvbnREZWxldGV8UmVhZE9ubHkKLSMg
SUUgZXh0ZW5zaW9uCi0gIGNoaWxkcmVuICAgICAgS0pTOjpKU0hUTUxFbGVtZW50OjpFbGVtZW50
Q2hpbGRyZW4gIERvbnREZWxldGV8UmVhZE9ubHkKLSAgY29udGVudEVkaXRhYmxlICAgS0pTOjpK
U0hUTUxFbGVtZW50OjpFbGVtZW50Q29udGVudEVkaXRhYmxlICBEb250RGVsZXRlCi0gIGlzQ29u
dGVudEVkaXRhYmxlIEtKUzo6SlNIVE1MRWxlbWVudDo6RWxlbWVudElzQ29udGVudEVkaXRhYmxl
ICBEb250RGVsZXRlfFJlYWRPbmx5CitAYmVnaW4gSFRNTEVsZW1lbnRUYWJsZSAwCiBAZW5kCiBA
YmVnaW4gSFRNTE9iamVjdEVsZW1lbnRUYWJsZSAyMAogICBmb3JtICAgICAgICAgICAgS0pTOjpK
U0hUTUxFbGVtZW50OjpPYmplY3RGb3JtICAgICAgICAgICAgRG9udERlbGV0ZXxSZWFkT25seQpA
QCAtNjczLDM5ICszMTksNyBAQCBKU1ZhbHVlICpKU0hUTUxFbGVtZW50OjpmcmFtZVNldEdldHRl
cihFCiAKIEpTVmFsdWUgKkpTSFRNTEVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRl
KiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7Ci0gICAgLy8gQ2hlY2sgb3VyIHNldCBvZiBnZW5l
cmljIHByb3BlcnRpZXMgZmlyc3QuCi0gICAgSFRNTEVsZW1lbnQgJmVsZW1lbnQgPSAqc3RhdGlj
X2Nhc3Q8SFRNTEVsZW1lbnQqPihpbXBsKCkpOwotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAg
ICAgY2FzZSBFbGVtZW50SWQ6Ci0gICAgICAgICAgICAvLyBpaHQuY29tIHJlbGllcyBvbiB0aGlz
IHZhbHVlIGJlaW5nICIiIHdoZW4gbm8gaWQgaXMgcHJlc2VudC4gT3RoZXIgYnJvd3NlcnMgZG8g
dGhpcyBhcyB3ZWxsLgotICAgICAgICAgICAgLy8gU28gd2UgdXNlIGpzU3RyaW5nKCkgaW5zdGVh
ZCBvZiBqc1N0cmluZ09yTnVsbCgpIGhlcmUuCi0gICAgICAgICAgICByZXR1cm4ganNTdHJpbmco
ZWxlbWVudC5pZCgpKTsKLSAgICAgICAgY2FzZSBFbGVtZW50TGFuZzoKLSAgICAgICAgICAgIHJl
dHVybiBqc1N0cmluZyhlbGVtZW50LmxhbmcoKSk7Ci0gICAgICAgIGNhc2UgRWxlbWVudERpcjoK
LSAgICAgICAgICAgIHJldHVybiBqc1N0cmluZyhlbGVtZW50LmRpcigpKTsKLSAgICAgICAgY2Fz
ZSBFbGVtZW50Q2xhc3NOYW1lOgotICAgICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGVsZW1lbnQu
Y2xhc3NOYW1lKCkpOwotICAgICAgICBjYXNlIEVsZW1lbnRJbm5lckhUTUw6Ci0gICAgICAgICAg
ICByZXR1cm4ganNTdHJpbmcoZWxlbWVudC5pbm5lckhUTUwoKSk7Ci0gICAgICAgIGNhc2UgRWxl
bWVudElubmVyVGV4dDoKLSAgICAgICAgICAgIGltcGwoKS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5
b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7Ci0gICAgICAgICAgICByZXR1cm4ganNTdHJp
bmcoZWxlbWVudC5pbm5lclRleHQoKSk7Ci0gICAgICAgIGNhc2UgRWxlbWVudE91dGVySFRNTDoK
LSAgICAgICAgICAgIHJldHVybiBqc1N0cmluZyhlbGVtZW50Lm91dGVySFRNTCgpKTsKLSAgICAg
ICAgY2FzZSBFbGVtZW50T3V0ZXJUZXh0OgotICAgICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGVs
ZW1lbnQub3V0ZXJUZXh0KCkpOwotICAgICAgICBjYXNlIEVsZW1lbnREb2N1bWVudDoKLSAgICAg
ICAgICAgIHJldHVybiB0b0pTKGV4ZWMsZWxlbWVudC5vd25lckRvY3VtZW50KCkpOwotICAgICAg
ICBjYXNlIEVsZW1lbnRDaGlsZHJlbjoKLSAgICAgICAgICAgIHJldHVybiBnZXRIVE1MQ29sbGVj
dGlvbihleGVjLCBlbGVtZW50LmNoaWxkcmVuKCkuZ2V0KCkpOwotICAgICAgICBjYXNlIEVsZW1l
bnRDb250ZW50RWRpdGFibGU6Ci0gICAgICAgICAgICByZXR1cm4ganNTdHJpbmcoZWxlbWVudC5j
b250ZW50RWRpdGFibGUoKSk7Ci0gICAgICAgIGNhc2UgRWxlbWVudElzQ29udGVudEVkaXRhYmxl
OgotICAgICAgICAgICAgcmV0dXJuIGpzQm9vbGVhbihlbGVtZW50LmlzQ29udGVudEVkaXRhYmxl
KCkpOwotICAgIH0KLQotICAgIC8vIE5vdyBjaGVjayB0aGUgcHJvcGVydGllcyBzcGVjaWZpYyB0
byBvdXIgZWxlbWVudCB0eXBlLgorICAgIC8vIENoZWNrIHRoZSBwcm9wZXJ0aWVzIHNwZWNpZmlj
IHRvIG91ciBlbGVtZW50IHR5cGUuCiAgICAgY29uc3QgQWNjZXNzb3JzKiBhY2Nlc3MgPSBhY2Nl
c3NvcnMoKTsKICAgICBpZiAoYWNjZXNzICYmIGFjY2Vzcy0+bV9nZXR0ZXIpCiAgICAgICAgIHJl
dHVybiAodGhpcy0+KihhY2Nlc3MtPm1fZ2V0dGVyKSkoZXhlYywgdG9rZW4pOwpAQCAtNzE2LDgg
KzMzMCw4IEBAIFVTdHJpbmcgSlNIVE1MRWxlbWVudDo6dG9TdHJpbmcoRXhlY1N0YXQKIHsKICAg
ICBpZiAoaW1wbCgpLT5oYXNUYWdOYW1lKGFUYWcpKQogICAgICAgICByZXR1cm4gVVN0cmluZyhz
dGF0aWNfY2FzdDxjb25zdCBIVE1MQW5jaG9yRWxlbWVudCo+KGltcGwoKSktPmhyZWYoKSk7Ci0g
ICAgZWxzZQotICAgICAgICByZXR1cm4gSlNFbGVtZW50Ojp0b1N0cmluZyhleGVjKTsKKworICAg
IHJldHVybiBKU0VsZW1lbnQ6OnRvU3RyaW5nKGV4ZWMpOwogfQogCiBzdGF0aWMgSFRNTEZvcm1F
bGVtZW50KiBnZXRGb3JtKEhUTUxFbGVtZW50KiBlbGVtZW50KQpAQCAtODcwLDM5ICs0ODQsNyBA
QCB2b2lkIEpTSFRNTEVsZW1lbnQ6OnB1dFZhbHVlUHJvcGVydHkoRXhlCiB7CiAgICAgRE9NRXhj
ZXB0aW9uVHJhbnNsYXRvciBleGNlcHRpb24oZXhlYyk7CiAgCi0gICAgLy8gQ2hlY2sgb3VyIHNl
dCBvZiBnZW5lcmljIHByb3BlcnRpZXMgZmlyc3QuCi0gICAgSFRNTEVsZW1lbnQgJmVsZW1lbnQg
PSAqc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihpbXBsKCkpOwotICAgIHN3aXRjaCAodG9rZW4p
IHsKLSAgICAgICAgY2FzZSBFbGVtZW50SWQ6Ci0gICAgICAgICAgICBlbGVtZW50LnNldElkKHZh
bHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKGV4ZWMsIHZhbHVlKSk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIGNhc2UgRWxlbWVudExhbmc6Ci0gICAgICAgICAgICBlbGVtZW50LnNldExh
bmcodmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2soZXhlYywgdmFsdWUpKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgY2FzZSBFbGVtZW50RGlyOgotICAgICAgICAgICAgZWxlbWVudC5z
ZXREaXIodmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2soZXhlYywgdmFsdWUpKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgY2FzZSBFbGVtZW50Q2xhc3NOYW1lOgotICAgICAgICAgICAg
ZWxlbWVudC5zZXRDbGFzc05hbWUodmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2soZXhlYywgdmFs
dWUpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2FzZSBFbGVtZW50SW5uZXJIVE1M
OgotICAgICAgICAgICAgZWxlbWVudC5zZXRJbm5lckhUTUwodmFsdWVUb1N0cmluZ1dpdGhOdWxs
Q2hlY2soZXhlYywgdmFsdWUpLCBleGNlcHRpb24pOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBjYXNlIEVsZW1lbnRJbm5lclRleHQ6Ci0gICAgICAgICAgICBlbGVtZW50LnNldElubmVy
VGV4dCh2YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVjayhleGVjLCB2YWx1ZSksIGV4Y2VwdGlvbik7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNhc2UgRWxlbWVudE91dGVySFRNTDoKLSAg
ICAgICAgICAgIGVsZW1lbnQuc2V0T3V0ZXJIVE1MKHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNr
KGV4ZWMsIHZhbHVlKSwgZXhjZXB0aW9uKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
Y2FzZSBFbGVtZW50T3V0ZXJUZXh0OgotICAgICAgICAgICAgZWxlbWVudC5zZXRPdXRlclRleHQo
dmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2soZXhlYywgdmFsdWUpLCBleGNlcHRpb24pOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBjYXNlIEVsZW1lbnRDb250ZW50RWRpdGFibGU6Ci0g
ICAgICAgICAgICBlbGVtZW50LnNldENvbnRlbnRFZGl0YWJsZSh2YWx1ZVRvU3RyaW5nV2l0aE51
bGxDaGVjayhleGVjLCB2YWx1ZSkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IC8vIE5vdyBjaGVjayBmb3IgcHJvcGVydGllcyB0aGF0IGFwcGx5IHRvIGEgc3BlY2lmaWMgZWxl
bWVudCB0eXBlLgorICAgIC8vIENoZWNrIGZvciBwcm9wZXJ0aWVzIHRoYXQgYXBwbHkgdG8gYSBz
cGVjaWZpYyBlbGVtZW50IHR5cGUuCiAgICAgY29uc3QgQWNjZXNzb3JzKiBhY2Nlc3MgPSBhY2Nl
c3NvcnMoKTsKICAgICBpZiAoYWNjZXNzICYmIGFjY2Vzcy0+bV9zZXR0ZXIpCiAgICAgICAgIHJl
dHVybiAodGhpcy0+KihhY2Nlc3MtPm1fc2V0dGVyKSkoZXhlYywgdG9rZW4sIHZhbHVlKTsKSW5k
ZXg6IFdlYkNvcmUvYmluZGluZ3MvanMva2pzX2h0bWwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL2pzL2tqc19odG1sLmgJKHJldmlzaW9uIDIxNjMzKQorKysgV2ViQ29yZS9iaW5k
aW5ncy9qcy9ranNfaHRtbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNywyNSArMzcsNiBAQCBuYW1l
c3BhY2UgS0pTIHsKIAogICBjbGFzcyBKU0Fic3RyYWN0RXZlbnRMaXN0ZW5lcjsKIAotICBLSlNf
REVGSU5FX1BST1RPVFlQRV9XSVRIX1BST1RPVFlQRShKU0hUTUxEb2N1bWVudFByb3RvdHlwZSwg
V2ViQ29yZTo6SlNEb2N1bWVudFByb3RvdHlwZSkKLQotICBjbGFzcyBKU0hUTUxEb2N1bWVudCA6
IHB1YmxpYyBXZWJDb3JlOjpKU0RvY3VtZW50IHsKLSAgcHVibGljOgotICAgIEpTSFRNTERvY3Vt
ZW50KEV4ZWNTdGF0ZSosIFdlYkNvcmU6OkhUTUxEb2N1bWVudCopOwotICAgIHZpcnR1YWwgYm9v
bCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3Bl
cnR5U2xvdCYpOwotICAgIEpTVmFsdWUqIGdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlKiwgaW50
IHRva2VuKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSosIGludCBhdHRyID0gTm9uZSk7Ci0gICAg
dm9pZCBwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSosIGludCB0b2tlbiwgSlNWYWx1ZSosIGlu
dCAvKmF0dHIqLyk7Ci0gICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNv
bnN0IHsgcmV0dXJuICZpbmZvOyB9Ci0gICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwot
ICAgIGVudW0geyBUaXRsZSwgUmVmZXJyZXIsIERvbWFpbiwgQm9keSwgTG9jYXRpb24sIENvb2tp
ZSwKLSAgICAgICAgICAgSW1hZ2VzLCBBcHBsZXRzLCBFbWJlZHMsIExpbmtzLCBGb3JtcywgQW5j
aG9ycywgU2NyaXB0cywgQWxsLCBDbGVhciwgT3BlbiwgQ2xvc2UsCi0gICAgICAgICAgIFdyaXRl
LCBXcml0ZUxuLCBHZXRFbGVtZW50c0J5TmFtZSwgQ2FwdHVyZUV2ZW50cywgUmVsZWFzZUV2ZW50
cywKLSAgICAgICAgICAgQmdDb2xvciwgRmdDb2xvciwgQWxpbmtDb2xvciwgTGlua0NvbG9yLCBW
bGlua0NvbG9yLCBMYXN0TW9kaWZpZWQsIEhlaWdodCwgV2lkdGgsIERpciwgRGVzaWduTW9kZSB9
OwotICBwcml2YXRlOgotICAgIHN0YXRpYyBKU1ZhbHVlKiBuYW1lZEl0ZW1HZXR0ZXIoRXhlY1N0
YXRlKiwgSlNPYmplY3QqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7
Ci0gIH07Ci0KICAgLy8gVGhlIGluaGVyaXRhbmNlIGNoYWluIGZvciBKU0hUTUxFbGVtZW50IGlz
IGEgYml0IGRpZmZlcmVudCBmcm9tIG90aGVyCiAgIC8vIGNsYXNzZXMgdGhhdCBhcmUgImhhbGYt
YXV0b2dlbmVyYXRlZCIuIEJlY2F1c2Ugd2UgcmV0dXJuIGRpZmZlcmVudCBDbGFzc0luZm8gc3Ry
dWN0cwogICAvLyBkZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgZWxlbWVudCwgd2UgaW5oZXJpdCBK
U0hUTUxFbGVtZW50IGZyb20gV2ViQ29yZTo6SlNIVE1MRWxlbWVudApAQCAtOTksMTAgKzgwLDYg
QEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgICAgIE9iamVjdE5hbWUsIE9iamVjdFN0YW5kYnks
IE9iamVjdFRhYkluZGV4LCBPYmplY3RVc2VNYXAsIE9iamVjdFdpZHRoLCBPYmplY3RDb250ZW50
RG9jdW1lbnQsIE9iamVjdEdldFNWR0RvY3VtZW50LAogICAgICAgICAgICBFbWJlZEFsaWduLCBF
bWJlZEhlaWdodCwgRW1iZWROYW1lLCBFbWJlZFNyYywgRW1iZWRUeXBlLCBFbWJlZFdpZHRoLCBF
bWJlZEdldFNWR0RvY3VtZW50LAogICAgICAgICAgICBGcmFtZVNldENvbHMsIEZyYW1lU2V0Um93
cywgCi0gICAgICAgICAgIEdldENvbnRleHQsCi0gICAgICAgICAgIEVsZW1lbnRJbm5lckhUTUws
IEVsZW1lbnRJZCwgRWxlbWVudERpciwgRWxlbWVudExhbmcsCi0gICAgICAgICAgIEVsZW1lbnRD
bGFzc05hbWUsIEVsZW1lbnRJbm5lclRleHQsIEVsZW1lbnREb2N1bWVudCwgRWxlbWVudENoaWxk
cmVuLCBFbGVtZW50Q29udGVudEVkaXRhYmxlLAotICAgICAgICAgICBFbGVtZW50SXNDb250ZW50
RWRpdGFibGUsIEVsZW1lbnRPdXRlckhUTUwsIEVsZW1lbnRPdXRlclRleHQKICAgICB9OwogICBw
cml2YXRlOgogICAgIHN0YXRpYyBKU1ZhbHVlKiBmcmFtZXNldE5hbWVHZXR0ZXIoRXhlY1N0YXRl
KiwgSlNPYmplY3QqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7Cklu
ZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlz
aW9uIDIxNjMyKQorKysgV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5w
bQkod29ya2luZyBjb3B5KQpAQCAtMyw3ICszLDcgQEAKICMgQ29weXJpZ2h0IChDKSAyMDA2IEFu
ZGVycyBDYXJsc3NvbiA8YW5kZXJzY2FAbWFjLmNvbT4KICMgQ29weXJpZ2h0IChDKSAyMDA2LCAy
MDA3IFNhbXVlbCBXZWluaWcgPHNhbUB3ZWJraXQub3JnPgogIyBDb3B5cmlnaHQgKEMpIDIwMDYg
QWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAd2Via2l0Lm9yZz4KLSMgQ29weXJpZ2h0IChDKSAyMDA2
IEFwcGxlIENvbXB1dGVyLCBJbmMuCisjIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBL
REUgcHJvamVjdAogIwpAQCAtNTcyLDggKzU3MiwxMCBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRh
dGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBXS191Y2ZpcnN0
KCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZSkgLiAiQXR0ck51bSIpOwogICAgICAgICAgICAg
cHVzaChAaGFzaFZhbHVlcywgJHZhbHVlKTsKIAotICAgICAgICAgICAgbXkgJHNwZWNpYWwgPSAi
RG9udERlbGV0ZSI7Ci0gICAgICAgICAgICAkc3BlY2lhbCAuPSAifFJlYWRPbmx5IiBpZiAoJGF0
dHJpYnV0ZS0+dHlwZSA9fiAvcmVhZG9ubHkvKTsKKyAgICAgICAgICAgIG15IEBzcGVjaWFscyA9
ICgpOworICAgICAgICAgICAgcHVzaChAc3BlY2lhbHMsICJEb250RGVsZXRlIikgdW5sZXNzICRh
dHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkRlbGV0YXRhYmxlIn07
CisgICAgICAgICAgICBwdXNoKEBzcGVjaWFscywgIlJlYWRPbmx5IikgaWYgJGF0dHJpYnV0ZS0+
dHlwZSA9fiAvcmVhZG9ubHkvOworICAgICAgICAgICAgbXkgJHNwZWNpYWwgPSBqb2luKCJ8Iiwg
QHNwZWNpYWxzKTsKICAgICAgICAgICAgIHB1c2goQGhhc2hTcGVjaWFscywgJHNwZWNpYWwpOwog
CiAgICAgICAgICAgICBteSAkbnVtUGFyYW1ldGVycyA9ICIwIjsKQEAgLTY1Miw3ICs2NTQsMTAg
QEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgbXkgJHZhbHVlID0gJGNsYXNz
TmFtZSAuICI6OiIgLiBXS191Y2ZpcnN0KCRuYW1lKSAuICJGdW5jTnVtIjsKICAgICAgICAgcHVz
aChAaGFzaFZhbHVlcywgJHZhbHVlKTsKIAotICAgICAgICBteSAkc3BlY2lhbCA9ICJEb250RGVs
ZXRlfEZ1bmN0aW9uIjsKKyAgICAgICAgbXkgQHNwZWNpYWxzID0gKCk7CisgICAgICAgIHB1c2go
QHNwZWNpYWxzLCAiRG9udERlbGV0ZSIpIHVubGVzcyAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57IkRlbGV0YXRhYmxlIn07CisgICAgICAgIHB1c2goQHNwZWNpYWxz
LCAiRnVuY3Rpb24iKTsKKyAgICAgICAgbXkgJHNwZWNpYWwgPSBqb2luKCJ8IiwgQHNwZWNpYWxz
KTsKICAgICAgICAgcHVzaChAaGFzaFNwZWNpYWxzLCAkc3BlY2lhbCk7CiAKICAgICAgICAgbXkg
JG51bVBhcmFtZXRlcnMgPSBAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc307CkBAIC03ODUsMTIgKzc5
MCw2IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICB9XG4iKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICgkZGF0YU5vZGUt
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJIYXNOYW1lR2V0dGVyIn0gfHwgJGRhdGFOb2RlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiSGFzT3ZlcnJpZGluZ05hbWVHZXR0ZXIifSkgewotICAgICAgICAg
ICAgIyBpZiBpdCBoYXMgYSBwcm90b3R5cGUsIHdlIG5lZWQgdG8gY2hlY2sgdGhhdCBmaXJzdCB0
b28KLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChwcm90b3R5cGUoKS0+
aXNPYmplY3QoKSAmJiBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHByb3RvdHlwZSgpKS0+aGFzUHJv
cGVydHkoZXhlYywgcHJvcGVydHlOYW1lKSlcbiIpOwotICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgICAgIHJldHVybiBmYWxzZTtcbiIpOwotICAgICAgICB9Ci0KICAgICAgICAg
aWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ikhhc0luZGV4R2V0dGVyIn0pIHsK
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGJvb2wgb2s7XG4iKTsKICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHVuc2lnbmVkIHUgPSBwcm9wZXJ0eU5hbWUu
dG9VSW50MzIoJm9rKTtcbiIpOwpAQCAtMTQyMiw4ICsxNDIxLDEzIEBAIHN1YiBOYXRpdmVUb0pT
VmFsdWUKICAgICB9IGVsc2lmICgkdHlwZSBlcSAiRXZlbnQiKSB7CiAgICAgICAgICRpbXBsSW5j
bHVkZXN7Imtqc19ldmVudHMuaCJ9ID0gMTsKICAgICAgICAgJGltcGxJbmNsdWRlc3siRXZlbnQu
aCJ9ID0gMTsKLSAgICB9IGVsc2lmICgkdHlwZSBlcSAiTm9kZUxpc3QiIG9yICR0eXBlIGVxICJO
YW1lZE5vZGVNYXAiKSB7CisgICAgfSBlbHNpZiAoJHR5cGUgZXEgIk5vZGVMaXN0IikgeworICAg
ICAgICAkaW1wbEluY2x1ZGVzeyJranNfZG9tLmgifSA9IDE7CisgICAgICAgICRpbXBsSW5jbHVk
ZXN7Ik5vZGVMaXN0LmgifSA9IDE7CisgICAgICAgICRpbXBsSW5jbHVkZXN7Ik5hbWVOb2RlTGlz
dC5oIn0gPSAxOworICAgIH0gZWxzaWYgKCR0eXBlIGVxICJOYW1lZE5vZGVNYXAiKSB7CiAgICAg
ICAgICRpbXBsSW5jbHVkZXN7Imtqc19kb20uaCJ9ID0gMTsKKyAgICAgICAgJGltcGxJbmNsdWRl
c3siTmFtZWROb2RlTWFwLmgifSA9IDE7CiAgICAgfSBlbHNpZiAoJHR5cGUgZXEgIkNTU1N0eWxl
U2hlZXQiIG9yICR0eXBlIGVxICJTdHlsZVNoZWV0IiBvciAkdHlwZSBlcSAiTWVkaWFMaXN0Iikg
ewogICAgICAgICAkaW1wbEluY2x1ZGVzeyJDU1NTdHlsZVNoZWV0LmgifSA9IDE7CiAgICAgICAg
ICRpbXBsSW5jbHVkZXN7Ik1lZGlhTGlzdC5oIn0gPSAxOwpJbmRleDogV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNp
b24gMjE2MzIpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMzMzAsNiArMzMzMCwxMiBAQCBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBEb2N1bWVudDo6
ZW1iCiAgICAgcmV0dXJuIG5ldyBIVE1MQ29sbGVjdGlvbih0aGlzLCBIVE1MQ29sbGVjdGlvbjo6
RG9jRW1iZWRzKTsKIH0KIAorUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gRG9jdW1lbnQ6OnBs
dWdpbnMoKQoreworICAgIC8vIFRoaXMgaXMgYW4gYWxpYXMgZm9yIGVtYmVkcygpIHJlcXVpcmVk
IGZvciB0aGUgSlMgRE9NIGJpbmRpbmdzLgorICAgIHJldHVybiBuZXcgSFRNTENvbGxlY3Rpb24o
dGhpcywgSFRNTENvbGxlY3Rpb246OkRvY0VtYmVkcyk7Cit9CisKIFBhc3NSZWZQdHI8SFRNTENv
bGxlY3Rpb24+IERvY3VtZW50OjpvYmplY3RzKCkKIHsKICAgICByZXR1cm4gbmV3IEhUTUxDb2xs
ZWN0aW9uKHRoaXMsIEhUTUxDb2xsZWN0aW9uOjpEb2NPYmplY3RzKTsKSW5kZXg6IFdlYkNvcmUv
ZG9tL0RvY3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkocmV2
aXNpb24gMjE2MzIpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yMDcsNiArMjA3LDcgQEAgcHVibGljOgogCiAgICAgUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlv
bj4gaW1hZ2VzKCk7CiAgICAgUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gZW1iZWRzKCk7Cisg
ICAgUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gcGx1Z2lucygpOyAvLyBhbiBhbGlhcyBmb3Ig
ZW1iZWRzKCkgcmVxdWlyZWQgZm9yIHRoZSBKUyBET00gYmluZGluZ3MuCiAgICAgUGFzc1JlZlB0
cjxIVE1MQ29sbGVjdGlvbj4gYXBwbGV0cygpOwogICAgIFBhc3NSZWZQdHI8SFRNTENvbGxlY3Rp
b24+IGxpbmtzKCk7CiAgICAgUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gZm9ybXMoKTsKSW5k
ZXg6IFdlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aHRtbC9IVE1MRG9jdW1lbnQuaWRsCShyZXZpc2lvbiAyMTYzMikKKysrIFdlYkNvcmUvaHRtbC9I
VE1MRG9jdW1lbnQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAy
MDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAo
QykgMjAwNiBTYW11ZWwgV2VpbmlnIDxzYW0ud2VpbmlnQGdtYWlsLmNvbT4KICAqCiAgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CkBAIC0yMCwxMSArMjAsMTQgQEAKIAogbW9kdWxlIGh0bWwgewogCi0gICAgaW50ZXJmYWNlIFtM
ZWdhY3lQYXJlbnQ9S0pTOjpKU0hUTUxEb2N1bWVudCwgR2VuZXJhdGVDb25zdHJ1Y3Rvcl0gSFRN
TERvY3VtZW50IDogRG9jdW1lbnQgewotI2lmICFkZWZpbmVkKExBTkdVQUdFX0pBVkFTQ1JJUFQp
CisgICAgaW50ZXJmYWNlIFtHZW5lcmF0ZUNvbnN0cnVjdG9yLCBIYXNPdmVycmlkaW5nTmFtZUdl
dHRlcl0gSFRNTERvY3VtZW50IDogRG9jdW1lbnQgewogICAgICAgICAgICAgICAgICBhdHRyaWJ1
dGUgW0NvbnZlcnROdWxsVG9OdWxsU3RyaW5nXSBET01TdHJpbmcgdGl0bGU7CiAgICAgICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgcmVmZXJyZXI7CisjaWYgZGVmaW5lZChMQU5HVUFH
RV9KQVZBU0NSSVBUKQorICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nIGRvbWFp
bjsKKyNlbHNlCiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgZG9tYWluOwor
I2VuZGlmCiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgVVJMOwogICAgICAg
ICAgICAgICAgIAogICAgICAgICAvLyBGSVhNRTogdGhlIERPTSBzcGVjIGRvZXMgTk9UIGhhdmUg
dGhpcyBhdHRyaWJ1dGUKQEAgLTQzLDE1ICs0Niw0MyBAQCBtb2R1bGUgaHRtbCB7CiAgICAgICAg
ICAgICAgICAgIGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyBj
b29raWUKICAgICAgICAgICAgICAgICAgICAgIC8qc2V0dGVyIHJhaXNlcyAoRE9NRXhjZXB0aW9u
KSovOwogCi0gICAgICAgIHZvaWQgICAgICAgICAgICAgICBvcGVuKCk7Ci0gICAgICAgIHZvaWQg
ICAgICAgICAgICAgICBjbG9zZSgpOwotICAgICAgICB2b2lkICAgICAgICAgICAgICAgd3JpdGUo
aW4gRE9NU3RyaW5nIHRleHQpOwotICAgICAgICB2b2lkICAgICAgICAgICAgICAgd3JpdGVsbihp
biBET01TdHJpbmcgdGV4dCk7Ci0gICAgICAgIE5vZGVMaXN0ICAgICAgICAgICBnZXRFbGVtZW50
c0J5TmFtZShpbiBET01TdHJpbmcgZWxlbWVudE5hbWUpOworICAgICAgICBbQ3VzdG9tXSB2b2lk
IG9wZW4oKTsKKyAgICAgICAgdm9pZCBjbG9zZSgpOworICAgICAgICBbQ3VzdG9tXSB2b2lkIHdy
aXRlKGluIERPTVN0cmluZyB0ZXh0KTsKKyAgICAgICAgW0N1c3RvbV0gdm9pZCB3cml0ZWxuKGlu
IERPTVN0cmluZyB0ZXh0KTsKKyAgICAgICAgTm9kZUxpc3QgZ2V0RWxlbWVudHNCeU5hbWUoaW4g
RE9NU3RyaW5nIGVsZW1lbnROYW1lKTsKKworICAgICAgICAvLyBFeHRlbnNpb25zCisgICAgICAg
IEVsZW1lbnQgZ2V0RWxlbWVudEJ5SWQoaW4gRE9NU3RyaW5nIGVsZW1lbnRJZCk7CisKKyAgICAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIEhUTUxDb2xsZWN0aW9uIGVtYmVkczsKKyAgICAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIEhUTUxDb2xsZWN0aW9uIHBsdWdpbnM7CisgICAgICAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSBIVE1MQ29sbGVjdGlvbiBzY3JpcHRzOwogCi0gICAgICAgIC8vIG5vbi1zdGFu
ZGFyZAorICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGxhc3RNb2RpZmllZDsK
IAotICAgICAgICBFbGVtZW50ICAgICAgICAgICAgZ2V0RWxlbWVudEJ5SWQoaW4gRE9NU3RyaW5n
IGVsZW1lbnRJZCk7CisjaWYgZGVmaW5lZChMQU5HVUFHRV9KQVZBU0NSSVBUKQorICAgICAgICAv
LyBGSVhNRTogVGhlc2Ugc2hvdWxkIGV2ZW50dWFsbHkgYmUgYXZhaWxhYmxlIChpZiB0aGV5IGFy
ZSB3YW50ZWQpIGZvciBhbGwgbGFuZ3VhZ2VzLgorCisgICAgICAgICAgICAgICAgIGF0dHJpYnV0
ZSBbQ3VzdG9tLCBEZWxldGFibGVdIEhUTUxDb2xsZWN0aW9uIGFsbDsKKyAgICAgICAgCisgICAg
ICAgIFtDdXN0b21dIHZvaWQgY2xlYXIoKTsKKyAgICAgICAgW0N1c3RvbV0gdm9pZCBjYXB0dXJl
RXZlbnRzKCk7CisgICAgICAgIFtDdXN0b21dIHZvaWQgcmVsZWFzZUV2ZW50cygpOworCisgICAg
ICAgICAgICAgICAgIGF0dHJpYnV0ZSBbQ3VzdG9tXSBXaW5kb3cgbG9jYXRpb247CisKKyAgICAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIFtDdXN0b21dIGxvbmcgd2lkdGg7CisgICAgICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSBbQ3VzdG9tXSBsb25nIGhlaWdodDsKKyAgICAgICAgICAgICAgICAgYXR0
cmlidXRlIFtDdXN0b20sIENvbnZlcnROdWxsVG9OdWxsU3RyaW5nXSBET01TdHJpbmcgZGlyOwor
ICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgW0N1c3RvbSwgQ29udmVydE51bGxUb051bGxTdHJp
bmddIERPTVN0cmluZyBkZXNpZ25Nb2RlOworCisgICAgICAgIC8vIERlcHJlY2F0ZWQgYXR0cmli
dXRlcworICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgW0N1c3RvbSwgQ29udmVydE51bGxUb051
bGxTdHJpbmddIERPTVN0cmluZyBiZ0NvbG9yOworICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUg
W0N1c3RvbSwgQ29udmVydE51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyBmZ0NvbG9yOworICAg
ICAgICAgICAgICAgICBhdHRyaWJ1dGUgW0N1c3RvbSwgQ29udmVydE51bGxUb051bGxTdHJpbmdd
IERPTVN0cmluZyBhbGlua0NvbG9yOworICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgW0N1c3Rv
bSwgQ29udmVydE51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyBsaW5rQ29sb3I7CisgICAgICAg
ICAgICAgICAgIGF0dHJpYnV0ZSBbQ3VzdG9tLCBDb252ZXJ0TnVsbFRvTnVsbFN0cmluZ10gRE9N
U3RyaW5nIHZsaW5rQ29sb3I7CiAjZW5kaWYKICAgICB9OwogCkluZGV4OiBXZWJDb3JlL2h0bWwv
SFRNTEVsZW1lbnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5p
ZGwJKHJldmlzaW9uIDIxNjMyKQorKysgV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmlkbAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBw
bGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5p
ZyA8c2FtLndlaW5pZ0BnbWFpbC5jb20+CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjEsMTUgKzIxLDE1IEBA
CiBtb2R1bGUgaHRtbCB7CiAKICAgICBpbnRlcmZhY2UgW0dlbmVyYXRlQ29uc3RydWN0b3JdIEhU
TUxFbGVtZW50IDogRWxlbWVudCB7Ci0gICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBbQ29udmVy
dE51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyB0aXRsZTsKLQotI2lmICFkZWZpbmVkKExBTkdV
QUdFX0pBVkFTQ1JJUFQpCisgICAgICAgICAgICAgICAgIC8vIGlodC5jb20gcmVsaWVzIG9uIHRo
aXMgdmFsdWUgYmVpbmcgIiIgd2hlbiBubyBpZCBpcyBwcmVzZW50LiBPdGhlciBicm93c2VycyBk
byB0aGlzIGFzIHdlbGwuCisgICAgICAgICAgICAgICAgIC8vIFNvIHdlIHVzZSBkb24ndCBjb252
ZXJ0IG51bGwgdG8gSlMgbnVsbC4KICAgICAgICAgICAgICAgICAgYXR0cmlidXRlIFtDb252ZXJ0
TnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIGlkOworICAgICAgICAgICAgICAgICBhdHRyaWJ1
dGUgW0NvbnZlcnROdWxsVG9OdWxsU3RyaW5nXSBET01TdHJpbmcgdGl0bGU7CiAgICAgICAgICAg
ICAgICAgIGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyBsYW5n
OwogICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsVG9OdWxsU3RyaW5nXSBE
T01TdHJpbmcgZGlyOwogICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsVG9O
dWxsU3RyaW5nXSBET01TdHJpbmcgY2xhc3NOYW1lOwogCi0gICAgICAgIC8vIGV4dGVuc2lvbnMK
KyAgICAgICAgLy8gRXh0ZW5zaW9ucwogCiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBbQ29u
dmVydE51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyBpbm5lckhUTUwKICAgICAgICAgICAgICAg
ICAgICAgIHNldHRlciByYWlzZXMoRE9NRXhjZXB0aW9uKTsKQEAgLTQ1LDYgKzQ1LDEyIEBAIG1v
ZHVsZSBodG1sIHsKICAgICAgICAgICAgICAgICAgYXR0cmlidXRlIFtDb252ZXJ0TnVsbFRvTnVs
bFN0cmluZ10gRE9NU3RyaW5nIGNvbnRlbnRFZGl0YWJsZTsKICAgICAgICAgcmVhZG9ubHkgYXR0
cmlidXRlIGJvb2xlYW4gaXNDb250ZW50RWRpdGFibGU7CiAKKyNpZiBkZWZpbmVkKExBTkdVQUdF
X0pBVkFTQ1JJUFQpCisgICAgICAgIC8vIEZJWE1FOiB0aGlzIHVzZXMgYSBjYWxsIHRvIG93bmVy
RG9jdW1lbnQKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFtDdXN0b21dIERvY3VtZW50IGRv
Y3VtZW50OworI2VuZGlmCisKKyNpZiBkZWZpbmVkKExBTkdVQUdFX09CSkVDVElWRV9DKQogICAg
ICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHRpdGxlRGlzcGxheVN0cmluZzsKICNl
bmRpZgogICAgIH07CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMTY0NCkKKysrIExheW91dFRlc3RzL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDA3LTA1LTIyICBTYW0g
V2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVXBkYXRlIHRlc3RzIGZvciBodHRwOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMzgzMAorICAgICAgICBBdXRvLWdlbmVyYXRlIEpTIERPTSBiaW5k
aW5ncyBmb3IgSFRNTERvY3VtZW50IGFuZCBtb3N0IG9mIAorICAgICAgICB0aGUgcmVzdCBvZiBI
VE1MRWxlbWVudAorCisgICAgICAgIC0gQ29ycmVjdHMgcHJvdG90eXBlIGNoYWluIGFuZCBhZGRz
IHRlc3QgZm9yIEhUTUxGb3JtRWxlbWVudC4KKworICAgICAgICAqIGZhc3QvZG9tL3Byb3RvdHlw
ZS1jaGFpbi1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9kb20vcHJvdG90eXBlLWNoYWlu
Lmh0bWw6CisKIDIwMDctMDUtMjIgIEp1c3RpbiBHYXJjaWEgIDxqdXN0aW4uZ2FyY2lhQGFwcGxl
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBvbGl2ZXIKSW5kZXg6IExheW91dFRlc3RzL2Zh
c3QvZG9tL3Byb3RvdHlwZS1jaGFpbi1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC9kb20vcHJvdG90eXBlLWNoYWluLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMjE2
MzIpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9wcm90b3R5cGUtY2hhaW4tZXhwZWN0ZWQudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC0yLDcgKzIsNyBAQCBUaGlzIHBhZ2UgcHJpbnRzIG91dCB0aGUg
cHJvdG90eXBlIGNoYWluCiAKIE5PVEU6IFRoaXMgdGVzdCB3aWxsIHN0YXJ0IGZhaWxpbmcgaWYg
eW91IGNoYW5nZSB0aGUgbGF5b3V0IG9mIGEgcmVsYXRlZCBwcm90b3R5cGUgY2hhaW4gaW4gV2Vi
Q29yZS4gVGhhdCBkb2VzIG5vdCBuZWNlc3NhcmlseSBtZWFuIHRoYXQgeW91IGhhdmUgZG9uZSBz
b21ldGhpbmcgd3Jvbmc7IHlvdSBtYXkganVzdCBuZWVkIHRvIGNoZWNrIGluIG5ldyByZXN1bHRz
LgogCi0tLS0tLSBbb2JqZWN0IEhUTUxEb2N1bWVudF0gKDcgcHJvdG90eXBlcykgLS0tLS0KKy0t
LS0tIFtvYmplY3QgSFRNTERvY3VtZW50XSAoNiBwcm90b3R5cGVzKSAtLS0tLQogCiBbb2JqZWN0
IE9iamVjdF0KIApAQCAtMTQsOCArMTQsNiBAQCBOT1RFOiBUaGlzIHRlc3Qgd2lsbCBzdGFydCBm
YWlsaW5nIGlmIHlvCiAKIFtvYmplY3QgRG9jdW1lbnRQcm90b3R5cGVdCiAKLVtvYmplY3QgRE9N
SFRNTERvY3VtZW50UHJvdG90eXBlXQotCiBbb2JqZWN0IEhUTUxEb2N1bWVudFByb3RvdHlwZV0K
IAogLS0tLS0gW29iamVjdCBIVE1MRGl2RWxlbWVudF0gKDggcHJvdG90eXBlcykgLS0tLS0KQEAg
LTM2LDYgKzM0LDI0IEBAIE5PVEU6IFRoaXMgdGVzdCB3aWxsIHN0YXJ0IGZhaWxpbmcgaWYgeW8K
IAogW29iamVjdCBIVE1MRGl2RWxlbWVudFByb3RvdHlwZV0KIAorLS0tLS0gW29iamVjdCBIVE1M
Rm9ybUVsZW1lbnRdICg4IHByb3RvdHlwZXMpIC0tLS0tCisKK1tvYmplY3QgT2JqZWN0XQorCitb
b2JqZWN0IERPTU5vZGVQcm90b3R5cGVdCisKK1tvYmplY3QgTm9kZVByb3RvdHlwZV0KKworW29i
amVjdCBET01FdmVudFRhcmdldE5vZGVQcm90b3R5cGVdCisKK1tvYmplY3QgRWxlbWVudFByb3Rv
dHlwZV0KKworW29iamVjdCBIVE1MRWxlbWVudFByb3RvdHlwZV0KKworW29iamVjdCBIVE1MRWxl
bWVudFByb3RvdHlwZV0KKworW29iamVjdCBIVE1MRm9ybUVsZW1lbnRQcm90b3R5cGVdCisKIC0t
LS0tIFtvYmplY3QgVUlFdmVudF0gKDQgcHJvdG90eXBlcykgLS0tLS0KIAogW29iamVjdCBPYmpl
Y3RdCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9wcm90b3R5cGUtY2hhaW4uaHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9wcm90b3R5cGUtY2hhaW4uaHRtbAkocmV2
aXNpb24gMjE2MzIpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9wcm90b3R5cGUtY2hhaW4uaHRt
bAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsOSBAQCBmdW5jdGlvbiB0ZXN0KCkKICAgICAK
ICAgICBlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRpdiIpOwogICAgIHByaW50UHJvdG90
eXBlcyhlKTsKKworICAgIGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJmb3JtIik7CisgICAg
cHJpbnRQcm90b3R5cGVzKGUpOwogICAgIAogICAgIGUgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgi
VUlFdmVudHMiKTsKICAgICBwcmludFByb3RvdHlwZXMoZSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>14673</attachid>
            <date>2007-05-22 19:37:45 -0700</date>
            <delta_ts>2007-05-22 20:15:41 -0700</delta_ts>
            <desc>updated patch</desc>
            <filename>autoElemAndDoc3.diff</filename>
            <type>text/plain</type>
            <size>53419</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDIxNjU1
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjQgQEAKKzIwMDctMDUt
MjIgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXRjaCBmb3IgaHR0cDovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTM4MzAKKyAgICAgICAgQXV0by1nZW5lcmF0ZSBKUyBET00gYmlu
ZGluZ3MgZm9yIEhUTUxEb2N1bWVudCBhbmQgbW9zdCBvZiAKKyAgICAgICAgdGhlIHJlc3Qgb2Yg
SFRNTEVsZW1lbnQKKworICAgICAgICAtIENvbXBsZXRlbHkgZ2VuZXJhdGVzIEhUTUxEb2N1bWVu
dC4KKyAgICAgICAgLSBHZW5lcmF0ZXMgbW9zdCBvZiB0aGUgYXR0cmlidXRlcyBhbmQgZnVuY3Rp
b25zIG9mIEhUTUxFbGVtZW50CisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogYmluZGluZ3MvanMvSlNIVE1MQW5jaG9yRWxlbWVudEN1c3Rv
bS5jcHA6IEZpeCBsaWNlbnNlLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTERvY3VtZW50
Q3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxEb2N1bWVudDo6Y2Fu
R2V0SXRlbXNGb3JOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTERvY3VtZW50OjpuYW1l
R2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTERvY3VtZW50OjphbGwpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNIVE1MRG9jdW1lbnQ6OnNldEFsbCk6CisgICAgICAgIChXZWJDb3JlOjpK
U0hUTUxEb2N1bWVudDo6bG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MRG9jdW1l
bnQ6OnNldExvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTERvY3VtZW50Ojp3aWR0
aCk6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxEb2N1bWVudDo6aGVpZ2h0KToKKyAgICAgICAg
KFdlYkNvcmU6OkpTSFRNTERvY3VtZW50OjpkaXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1M
RG9jdW1lbnQ6OnNldERpcik6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxEb2N1bWVudDo6ZGVz
aWduTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxEb2N1bWVudDo6c2V0RGVzaWduTW9k
ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxEb2N1bWVudDo6YmdDb2xvcik6CisgICAgICAg
IChXZWJDb3JlOjpKU0hUTUxEb2N1bWVudDo6c2V0QmdDb2xvcik6CisgICAgICAgIChXZWJDb3Jl
OjpKU0hUTUxEb2N1bWVudDo6ZmdDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxEb2N1
bWVudDo6c2V0RmdDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxEb2N1bWVudDo6YWxp
bmtDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxEb2N1bWVudDo6c2V0QWxpbmtDb2xv
cik6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxEb2N1bWVudDo6bGlua0NvbG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTSFRNTERvY3VtZW50OjpzZXRMaW5rQ29sb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNIVE1MRG9jdW1lbnQ6OnZsaW5rQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6SlNI
VE1MRG9jdW1lbnQ6OnNldFZsaW5rQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MRG9j
dW1lbnQ6Om9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVIZWxwZXIpOgorICAgICAgICAo
V2ViQ29yZTo6SlNIVE1MRG9jdW1lbnQ6OndyaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRN
TERvY3VtZW50Ojp3cml0ZWxuKToKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTERvY3VtZW50Ojpj
bGVhcik6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxEb2N1bWVudDo6Y2FwdHVyZUV2ZW50cyk6
CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxEb2N1bWVudDo6cmVsZWFzZUV2ZW50cyk6CisgICAg
ICAgICogYmluZGluZ3MvanMva2pzX2RvbS5jcHA6CisgICAgICAgIChLSlM6OnRvSlMpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL2tqc19kb20uaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ranNf
aHRtbC5jcHA6CisgICAgICAgIChLSlM6OkpTSFRNTEVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkp
OgorICAgICAgICAoS0pTOjpKU0hUTUxFbGVtZW50Ojp0b1N0cmluZyk6CisgICAgICAgIChLSlM6
OkpTSFRNTEVsZW1lbnQ6OnB1dFZhbHVlUHJvcGVydHkpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L2tqc19odG1sLmg6CisgICAgICAgIChLSlM6OkpTSFRNTEVsZW1lbnQ6Oik6CisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06IEFkZCBbRGVsZXRhdGFibGVdIHBy
b3BlcnR5IAorICAgICAgICBmb3IgRG9jdW1lbnQuYWxsIGFuZCBmaXggSGFzT3ZlcnJpZGluZ05h
bWVHZXR0ZXIgdG8gYWxsb3cgY29ycmVjdCAKKyAgICAgICAgcHJvdG90eXBlIGNoYWluCisgICAg
ICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpwbHVn
aW5zKTogYWRkcyBhbGlhcyB0byBlbWJlZHMoKSBmb3IgYmluZGluZ3MuCisgICAgICAgICogZG9t
L0RvY3VtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MRG9jdW1lbnQuaWRsOgorICAgICAgICAq
IGh0bWwvSFRNTEVsZW1lbnQuaWRsOgorCiAyMDA3LTA1LTIyICBTYW0gV2VpbmlnICA8c2FtQHdl
YmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbS4KSW5kZXg6IFdlYkNvcmUucHJv
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUucHJvCShyZXZpc2lvbiAyMTY1NCkKKysrIFdlYkNvcmUu
cHJvCSh3b3JraW5nIGNvcHkpCkBAIC0yNjcsNiArMjY3LDggQEAgU09VUkNFUyArPSBcCiAgICAg
YmluZGluZ3MvanMvSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwIFwKICAgICBiaW5kaW5ncy9q
cy9KU0RvY3VtZW50Q3VzdG9tLmNwcCBcCiAgICAgYmluZGluZ3MvanMvSlNIVE1MQW5jaG9yRWxl
bWVudEN1c3RvbS5jcHAgXAorICAgIGJpbmRpbmdzL2pzL0pTSFRNTERvY3VtZW50Q3VzdG9tLmNw
cCBcCisgICAgYmluZGluZ3MvanMvSlNIVE1MRWxlbWVudEN1c3RvbS5jcHAgXAogICAgIGJpbmRp
bmdzL2pzL0pTSFRNTEVsZW1lbnRXcmFwcGVyRmFjdG9yeS5jcHAgXAogICAgIGJpbmRpbmdzL2pz
L0pTSFRNTEZvcm1FbGVtZW50Q3VzdG9tLmNwcCBcCiAgICAgYmluZGluZ3MvanMvSlNIVE1MSW5w
dXRFbGVtZW50QmFzZS5jcHAgXApJbmRleDogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2
aXNpb24gMjE2NTUpCisrKyBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTI3NzQsNiArMjc3NCw3IEBACiAJCUJDNTE1NkY0MEMwM0I3REMwMDhCQjBF
RSAvKiBET01IVE1MRnJhbWVFbGVtZW50UHJpdmF0ZS5oIGluIENvcHkgR2VuZXJhdGVkIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM1MTU2RjMwQzAzQjdEQzAw
OEJCMEVFIC8qIERPTUhUTUxGcmFtZUVsZW1lbnRQcml2YXRlLmggKi87IH07CiAJCUJDNTE1NzlG
MEMwM0JCRDMwMDhCQjBFRSAvKiBET01IVE1MTWFycXVlZUVsZW1lbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNTE1NkU1MEMwM0I3NDEwMDhCQjBF
RSAvKiBET01IVE1MTWFycXVlZUVsZW1lbnQuaCAqLzsgfTsKIAkJQkM1MTU3REQwQzAzQkMyMjAw
OEJCMEVFIC8qIERPTUhUTUxGcmFtZUVsZW1lbnRQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzUxNTZGMzBDMDNCN0RDMDA4QkIwRUUgLyog
RE9NSFRNTEZyYW1lRWxlbWVudFByaXZhdGUuaCAqLzsgfTsKKwkJQkM1MTU4MEIwQzAzRDQwNDAw
OEJCMEVFIC8qIEpTSFRNTERvY3VtZW50Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNTE1ODBBMEMwM0Q0MDQwMDhCQjBFRSAvKiBKU0hU
TUxEb2N1bWVudEN1c3RvbS5jcHAgKi87IH07CiAJCUJDNTg4QUYwMEJGQTZDRjkwMEVFNjc5RSAv
KiBIVE1MUGFyc2VyRXJyb3JDb2Rlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQkM1ODhBRUYwQkZBNkNGOTAwRUU2NzlFIC8qIEhUTUxQYXJzZXJFcnJv
ckNvZGVzLmggKi87IH07CiAJCUJDNTg4QjRCMEJGQTcyM0MwMEVFNjc5RSAvKiBIVE1MUGFyc2Vy
RXJyb3JDb2Rlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCQzU4OEI0QTBCRkE3MjNDMDBFRTY3OUUgLyogSFRNTFBhcnNlckVycm9yQ29kZXMuY3Bw
ICovOyB9OwogCQlCQzZENkREMjA5QUY5MDY2MDBGNTk3NTkgLyogRm9udC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzZENkREMDA5QUY5MDY2MDBG
NTk3NTkgLyogRm9udC5jcHAgKi87IH07CkBAIC02MDEwLDYgKzYwMTEsNyBAQAogCQlCQzUxNTZF
NjBDMDNCNzQxMDA4QkIwRUUgLyogRE9NSFRNTE1hcnF1ZWVFbGVtZW50Lm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERPTUhUTUxNYXJxdWVlRWxlbWVudC5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM1MTU2RTcwQzAzQjc0MTAwOEJCMEVFIC8q
IERPTUhUTUxNYXJxdWVlRWxlbWVudEludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBET01IVE1MTWFycXVlZUVsZW1lbnRJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlCQzUxNTZGMzBDMDNCN0RDMDA4QkIwRUUgLyogRE9NSFRNTEZyYW1l
RWxlbWVudFByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTUhU
TUxGcmFtZUVsZW1lbnRQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJD
NTE1ODBBMEMwM0Q0MDQwMDhCQjBFRSAvKiBKU0hUTUxEb2N1bWVudEN1c3RvbS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNIVE1MRG9jdW1lbnRDdXN0b20uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzU4OEFFRjBCRkE2Q0Y5MDBFRTY3OUUg
LyogSFRNTFBhcnNlckVycm9yQ29kZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEhUTUxQYXJzZXJFcnJvckNvZGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUJDNTg4QjRBMEJGQTcyM0MwMEVFNjc5RSAvKiBIVE1MUGFyc2VyRXJyb3JDb2Rlcy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSFRNTFBhcnNlckVycm9yQ29kZXMu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzVFQzE3NjBBNTA3RTNFMDA2MDA3
RjUgLyogdmlldy1zb3VyY2UuY3NzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSAidmlldy1zb3Vy
Y2UuY3NzIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTkwNjMsNiArOTA2NSw3IEBA
CiAJCQkJRTEwQjkzN0IwQjczQzAwQTAwM0VEODkwIC8qIEpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVy
LmggKi8sCiAJCQkJOTI5MjY0NzYwQjYxRkM3MjAwQjQxRDM0IC8qIEpTRG9jdW1lbnRDdXN0b20u
Y3BwICovLAogCQkJCUJDRjQxMTc3MEJGQ0M3NkEwMDEyNTYyMiAvKiBKU0hUTUxBbmNob3JFbGVt
ZW50Q3VzdG9tLmNwcCAqLywKKwkJCQlCQzUxNTgwQTBDMDNENDA0MDA4QkIwRUUgLyogSlNIVE1M
RG9jdW1lbnRDdXN0b20uY3BwICovLAogCQkJCTkzOEU2NUY2MDlGMDk4NUQwMDhBNDhFQyAvKiBK
U0hUTUxFbGVtZW50V3JhcHBlckZhY3RvcnkuY3BwICovLAogCQkJCTkzOEU2NUYwMDlGMDk4NDAw
MDhBNDhFQyAvKiBKU0hUTUxFbGVtZW50V3JhcHBlckZhY3RvcnkuaCAqLywKIAkJCQlBOEQwNjVB
RDBBMjQ0NkNEMDA1RTcyMDMgLyogSlNIVE1MRm9ybUVsZW1lbnRDdXN0b20uY3BwICovLApAQCAt
MTI3NTcsNiArMTI3NjAsNyBAQAogCQkJCUJDNDkxQjc4MEMwMjNFRkQwMDlENjMxNiAvKiBKU0hU
TUxNYXJxdWVlRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzUxNTZFOTBDMDNCNzQx
MDA4QkIwRUUgLyogRE9NSFRNTE1hcnF1ZWVFbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QUJBRjIyMDgwQzAzQjFDNzAwQjBCQ0YwIC8qIENocm9tZU1hYy5tbSBpbiBTb3VyY2VzICovLAor
CQkJCUJDNTE1ODBCMEMwM0Q0MDQwMDhCQjBFRSAvKiBKU0hUTUxEb2N1bWVudEN1c3RvbS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNz
aW5nID0gMDsKIAkJfTsKSW5kZXg6IGJpbmRpbmdzL2pzL0pTSFRNTEFuY2hvckVsZW1lbnRDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGJpbmRpbmdzL2pzL0pTSFRNTEFuY2hvckVsZW1lbnRDdXN0
b20uY3BwCShyZXZpc2lvbiAyMTY1NCkKKysrIGJpbmRpbmdzL2pzL0pTSFRNTEFuY2hvckVsZW1l
bnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDIwICsxLDI2IEBACiAvKgogICogQ29w
eXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1
aXRlIDMzMCwKLSAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIK
QEAgLTI4LDUgKzM0LDUgQEAgS0pTOjpKU1ZhbHVlKiBKU0hUTUxBbmNob3JFbGVtZW50Ojp0b1N0
cgogewogICAgIHJldHVybiBqc1N0cmluZyhKU0hUTUxFbGVtZW50Ojp0b1N0cmluZyhleGVjKSk7
CiB9Ci0gICAgCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IGJpbmRpbmdzL2pzL0pT
SFRNTERvY3VtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBiaW5kaW5ncy9qcy9KU0hUTUxE
b2N1bWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDApCisrKyBiaW5kaW5ncy9qcy9KU0hUTUxEb2N1
bWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzQ1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTSFRNTERvY3VtZW50LmgiCisKKyNpbmNs
dWRlICJEZXByZWNhdGVkU3RyaW5nLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJG
cmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkhUTUxCb2R5
RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxDb2xsZWN0aW9uLmgiCisjaW5jbHVkZSAiSFRNTERv
Y3VtZW50LmgiCisjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MSUZyYW1l
RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgImtqc19odG1sLmgi
CisjaW5jbHVkZSAia2pzX3dpbmRvdy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5n
IG5hbWVzcGFjZSBLSlM7Cit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCitib29sIEpTSFRN
TERvY3VtZW50OjpjYW5HZXRJdGVtc0Zvck5hbWUoRXhlY1N0YXRlKiwgSFRNTERvY3VtZW50KiBk
b2MsIGNvbnN0IEF0b21pY1N0cmluZyYgcHJvcGVydHlOYW1lKQoreworICAgIHJldHVybiBkb2Mt
Pmhhc05hbWVkSXRlbShwcm9wZXJ0eU5hbWUpIHx8IGRvYy0+aGFzRG9jRXh0cmFOYW1lZEl0ZW0o
cHJvcGVydHlOYW1lKTsKK30KKworSlNWYWx1ZSogSlNIVE1MRG9jdW1lbnQ6Om5hbWVHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIEpTSFRN
TERvY3VtZW50KiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8SlNIVE1MRG9jdW1lbnQqPihzbG90LnNs
b3RCYXNlKCkpOworICAgIEhUTUxEb2N1bWVudCogZG9jID0gc3RhdGljX2Nhc3Q8SFRNTERvY3Vt
ZW50Kj4odGhpc09iai0+aW1wbCgpKTsKKworICAgIFN0cmluZyBuYW1lID0gcHJvcGVydHlOYW1l
OworICAgIFJlZlB0cjxIVE1MQ29sbGVjdGlvbj4gY29sbGVjdGlvbiA9IGRvYy0+ZG9jdW1lbnRO
YW1lZEl0ZW1zKG5hbWUpOworCisgICAgaWYgKGNvbGxlY3Rpb24tPmxlbmd0aCgpID09IDEpIHsK
KyAgICAgICAgTm9kZSogbm9kZSA9IGNvbGxlY3Rpb24tPmZpcnN0SXRlbSgpOworCisgICAgICAg
IEZyYW1lKiBmcmFtZTsKKyAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoaWZyYW1lVGFnKSAm
JiAoZnJhbWUgPSBzdGF0aWNfY2FzdDxIVE1MSUZyYW1lRWxlbWVudCo+KG5vZGUpLT5jb250ZW50
RnJhbWUoKSkpCisgICAgICAgICAgICByZXR1cm4gV2luZG93OjpyZXRyaWV2ZShmcmFtZSk7CisK
KyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgbm9kZSk7CisgICAgfSBlbHNlIGlmICghY29sbGVj
dGlvbi0+bGVuZ3RoKCkpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworCisgICAgcmV0
dXJuIGdldEhUTUxDb2xsZWN0aW9uKGV4ZWMsIGNvbGxlY3Rpb24uZ2V0KCkpOworfQorCisvLyBD
dXN0b20gYXR0cmlidXRlcworCitKU1ZhbHVlKiBKU0hUTUxEb2N1bWVudDo6YWxsKEV4ZWNTdGF0
ZSogZXhlYykgY29uc3QKK3sKKyAgICAvLyBJZiAiYWxsIiBoYXMgYmVlbiBvdmVyd3JpdHRlbiwg
cmV0dXJuIHRoZSBvdmVyd3JpdHRlbiB2YWx1ZQorICAgIGlmIChKU1ZhbHVlKiB2ID0gZ2V0RGly
ZWN0KCJhbGwiKSkKKyAgICAgICAgcmV0dXJuIHY7CisKKyAgICByZXR1cm4gZ2V0QWxsSFRNTENv
bGxlY3Rpb24oZXhlYywgc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50Kj4oaW1wbCgpKS0+YWxsKCku
Z2V0KCkpOworfQorCit2b2lkIEpTSFRNTERvY3VtZW50OjpzZXRBbGwoRXhlY1N0YXRlKiwgSlNW
YWx1ZSogdmFsdWUpCit7CisgICAgLy8gQWRkICJhbGwiIHRvIHRoZSBwcm9wZXJ0eSBtYXAuCisg
ICAgcHV0RGlyZWN0KCJhbGwiLCB2YWx1ZSk7Cit9CisKK0pTVmFsdWUqIEpTSFRNTERvY3VtZW50
Ojpsb2NhdGlvbihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0Cit7CisgICAgRnJhbWUqIGZyYW1lID0g
c3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50Kj4oaW1wbCgpKS0+ZnJhbWUoKTsKKworICAgIGlmICgh
ZnJhbWUpCisgICAgICAgIHJldHVybiBqc051bGwoKTsKKyAgICBpZiAoV2luZG93KiB3aW4gPSBX
aW5kb3c6OnJldHJpZXZlV2luZG93KGZyYW1lKSkKKyAgICAgICAgcmV0dXJuIHdpbi0+bG9jYXRp
b24oKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKK30KKwordm9pZCBKU0hUTUxEb2N1bWVu
dDo6c2V0TG9jYXRpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBp
ZiAoRnJhbWUqIGZyYW1lID0gc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50Kj4oaW1wbCgpKS0+ZnJh
bWUoKSkgeworICAgICAgICBEZXByZWNhdGVkU3RyaW5nIHN0ciA9IHZhbHVlLT50b1N0cmluZyhl
eGVjKTsKKworICAgICAgICAvLyBXaGVuIGFzc2lnbmluZyBsb2NhdGlvbiwgSUUgYW5kIE1vemls
bGEgYm90aCByZXNvbHZlIHRoZSBVUkwKKyAgICAgICAgLy8gcmVsYXRpdmUgICAgIG5vdAorICAg
ICAgICAvLyB0aGUgdGFyZ2V0IGZyYW1lLgorICAgICAgICBGcmFtZSogYWN0aXZlRnJhbWUgPSBz
dGF0aWNfY2FzdDxTY3JpcHRJbnRlcnByZXRlcio+KGV4ZWMtPmR5bmFtaWNJbnRlcnByZXRlcigp
KS0+ZnJhbWUoKTsKKyAgICAgICAgaWYgKGFjdGl2ZUZyYW1lKQorICAgICAgICAgICAgc3RyID0g
YWN0aXZlRnJhbWUtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHN0cik7CisKKyAgICAgICAgLy8g
V2Ugd2FudCBhIG5ldyBoaXN0b3J5IGl0ZW0gaWYgdGhpcyBKUyB3YXMgY2FsbGVkIHZpYSBhIHVz
ZXIgZ2VzdHVyZQorICAgICAgICBib29sIHVzZXJHZXN0dXJlID0gc3RhdGljX2Nhc3Q8U2NyaXB0
SW50ZXJwcmV0ZXIqPihleGVjLT5keW5hbWljSW50ZXJwcmV0ZXIoKSktPndhc1J1bkJ5VXNlckdl
c3R1cmUoKTsKKyAgICAgICAgZnJhbWUtPmxvYWRlcigpLT5zY2hlZHVsZUxvY2F0aW9uQ2hhbmdl
KHN0ciwgYWN0aXZlRnJhbWUtPmxvYWRlcigpLT5vdXRnb2luZ1JlZmVycmVyKCksICF1c2VyR2Vz
dHVyZSk7CisgICAgfQorfQorCitKU1ZhbHVlKiBKU0hUTUxEb2N1bWVudDo6d2lkdGgoRXhlY1N0
YXRlKikgY29uc3QKK3sKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSBzdGF0aWNfY2FzdDxIVE1MRG9j
dW1lbnQqPihpbXBsKCkpLT52aWV3KCk7CisgICAgcmV0dXJuIGpzTnVtYmVyKHZpZXcgPyB2aWV3
LT5jb250ZW50c0hlaWdodCgpIDogMCk7Cit9CisKK0pTVmFsdWUqIEpTSFRNTERvY3VtZW50Ojpo
ZWlnaHQoRXhlY1N0YXRlKikgY29uc3QKK3sKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSBzdGF0aWNf
Y2FzdDxIVE1MRG9jdW1lbnQqPihpbXBsKCkpLT52aWV3KCk7CisgICAgcmV0dXJuIGpzTnVtYmVy
KHZpZXcgPyB2aWV3LT5jb250ZW50c0hlaWdodCgpIDogMCk7Cit9CisKK0pTVmFsdWUqIEpTSFRN
TERvY3VtZW50OjpkaXIoRXhlY1N0YXRlKikgY29uc3QKK3sKKyAgICBIVE1MRWxlbWVudCogYm9k
eSA9IHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCo+KGltcGwoKSktPmJvZHkoKTsKKyAgICBpZiAo
IWJvZHkpCisgICAgICAgIHJldHVybiBqc1N0cmluZygiIik7CisgICAgcmV0dXJuIGpzU3RyaW5n
KGJvZHktPmRpcigpKTsKK30KKwordm9pZCBKU0hUTUxEb2N1bWVudDo6c2V0RGlyKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSogdmFsdWUpCit7CisgICAgSFRNTEVsZW1lbnQqIGJvZHkgPSBzdGF0
aWNfY2FzdDxIVE1MRG9jdW1lbnQqPihpbXBsKCkpLT5ib2R5KCk7CisgICAgaWYgKGJvZHkpCisg
ICAgICAgIGJvZHktPnNldERpcih2YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVjayhleGVjLCB2YWx1
ZSkpOworfQorCitKU1ZhbHVlKiBKU0hUTUxEb2N1bWVudDo6ZGVzaWduTW9kZShFeGVjU3RhdGUq
KSBjb25zdAoreworICByZXR1cm4ganNTdHJpbmcoc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50Kj4o
aW1wbCgpKS0+aW5EZXNpZ25Nb2RlKCkgPyAib24iIDogIm9mZiIpOworfQorCit2b2lkIEpTSFRN
TERvY3VtZW50OjpzZXREZXNpZ25Nb2RlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogdmFsdWUp
Cit7CisgICAgSFRNTERvY3VtZW50KiBkb2MgPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQqPihp
bXBsKCkpOworCisgICAgU3RyaW5nIG1vZGVTdHJpbmcgPSB2YWx1ZVRvU3RyaW5nV2l0aE51bGxD
aGVjayhleGVjLCB2YWx1ZSk7CisgICAgRG9jdW1lbnQ6OkluaGVyaXRlZEJvb2wgbW9kZTsKKyAg
ICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobW9kZVN0cmluZywgIm9uIikpCisgICAgICAgIG1vZGUg
PSBEb2N1bWVudDo6b247CisgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobW9kZVN0cmlu
ZywgIm9mZiIpKQorICAgICAgICBtb2RlID0gRG9jdW1lbnQ6Om9mZjsKKyAgICBlbHNlCisgICAg
ICAgIG1vZGUgPSBEb2N1bWVudDo6aW5oZXJpdDsKKyAgICBkb2MtPnNldERlc2lnbk1vZGUobW9k
ZSk7Cit9CisKK0pTVmFsdWUqIEpTSFRNTERvY3VtZW50OjpiZ0NvbG9yKEV4ZWNTdGF0ZSopIGNv
bnN0Cit7CisgICAgSFRNTEVsZW1lbnQqIGJvZHkgPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQq
PihpbXBsKCkpLT5ib2R5KCk7CisgICAgSFRNTEJvZHlFbGVtZW50KiBib2R5RWxlbWVudCA9IChi
b2R5ICYmIGJvZHktPmhhc1RhZ05hbWUoYm9keVRhZykpID8gc3RhdGljX2Nhc3Q8SFRNTEJvZHlF
bGVtZW50Kj4oYm9keSkgOiAwOworCisgICAgaWYgKCFib2R5RWxlbWVudCkKKyAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgcmV0dXJuIGpzU3RyaW5nKGJvZHlFbGVtZW50LT5iZ0Nv
bG9yKCkpOworfQorCit2b2lkIEpTSFRNTERvY3VtZW50OjpzZXRCZ0NvbG9yKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSogdmFsdWUpCit7CisgICAgSFRNTEVsZW1lbnQqIGJvZHkgPSBzdGF0aWNf
Y2FzdDxIVE1MRG9jdW1lbnQqPihpbXBsKCkpLT5ib2R5KCk7CisgICAgSFRNTEJvZHlFbGVtZW50
KiBib2R5RWxlbWVudCA9IChib2R5ICYmIGJvZHktPmhhc1RhZ05hbWUoYm9keVRhZykpID8gc3Rh
dGljX2Nhc3Q8SFRNTEJvZHlFbGVtZW50Kj4oYm9keSkgOiAwOworCisgICAgaWYgKGJvZHlFbGVt
ZW50KQorICAgICAgICBib2R5RWxlbWVudC0+c2V0QmdDb2xvcih2YWx1ZVRvU3RyaW5nV2l0aE51
bGxDaGVjayhleGVjLCB2YWx1ZSkpOworfQorCitKU1ZhbHVlKiBKU0hUTUxEb2N1bWVudDo6ZmdD
b2xvcihFeGVjU3RhdGUqKSBjb25zdAoreworICAgIEhUTUxFbGVtZW50KiBib2R5ID0gc3RhdGlj
X2Nhc3Q8SFRNTERvY3VtZW50Kj4oaW1wbCgpKS0+Ym9keSgpOworICAgIEhUTUxCb2R5RWxlbWVu
dCogYm9keUVsZW1lbnQgPSAoYm9keSAmJiBib2R5LT5oYXNUYWdOYW1lKGJvZHlUYWcpKSA/IHN0
YXRpY19jYXN0PEhUTUxCb2R5RWxlbWVudCo+KGJvZHkpIDogMDsKKworICAgIGlmICghYm9keUVs
ZW1lbnQpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIHJldHVybiBqc1N0cmlu
Zyhib2R5RWxlbWVudC0+dGV4dCgpKTsKK30KKwordm9pZCBKU0hUTUxEb2N1bWVudDo6c2V0RmdD
b2xvcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHZhbHVlKQoreworICAgIEhUTUxFbGVtZW50
KiBib2R5ID0gc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50Kj4oaW1wbCgpKS0+Ym9keSgpOworICAg
IEhUTUxCb2R5RWxlbWVudCogYm9keUVsZW1lbnQgPSAoYm9keSAmJiBib2R5LT5oYXNUYWdOYW1l
KGJvZHlUYWcpKSA/IHN0YXRpY19jYXN0PEhUTUxCb2R5RWxlbWVudCo+KGJvZHkpIDogMDsKKwor
ICAgIGlmIChib2R5RWxlbWVudCkKKyAgICAgICAgYm9keUVsZW1lbnQtPnNldFRleHQodmFsdWVU
b1N0cmluZ1dpdGhOdWxsQ2hlY2soZXhlYywgdmFsdWUpKTsKK30KKworSlNWYWx1ZSogSlNIVE1M
RG9jdW1lbnQ6OmFsaW5rQ29sb3IoRXhlY1N0YXRlKikgY29uc3QKK3sKKyAgICBIVE1MRWxlbWVu
dCogYm9keSA9IHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCo+KGltcGwoKSktPmJvZHkoKTsKKyAg
ICBIVE1MQm9keUVsZW1lbnQqIGJvZHlFbGVtZW50ID0gKGJvZHkgJiYgYm9keS0+aGFzVGFnTmFt
ZShib2R5VGFnKSkgPyBzdGF0aWNfY2FzdDxIVE1MQm9keUVsZW1lbnQqPihib2R5KSA6IDA7CisK
KyAgICBpZiAoIWJvZHlFbGVtZW50KQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAg
ICByZXR1cm4ganNTdHJpbmcoYm9keUVsZW1lbnQtPmFMaW5rKCkpOworfQorCit2b2lkIEpTSFRN
TERvY3VtZW50OjpzZXRBbGlua0NvbG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogdmFsdWUp
Cit7CisgICAgSFRNTEVsZW1lbnQqIGJvZHkgPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQqPihp
bXBsKCkpLT5ib2R5KCk7CisgICAgSFRNTEJvZHlFbGVtZW50KiBib2R5RWxlbWVudCA9IChib2R5
ICYmIGJvZHktPmhhc1RhZ05hbWUoYm9keVRhZykpID8gc3RhdGljX2Nhc3Q8SFRNTEJvZHlFbGVt
ZW50Kj4oYm9keSkgOiAwOworCisgICAgaWYgKGJvZHlFbGVtZW50KSB7CisgICAgICAgIC8vIFRo
aXMgY2hlY2sgaXMgYSBiaXQgc2lsbHksIGJ1dCBzb21lIGJlbmNobWFya3MgbGlrZSB0byBzZXQg
dGhlCisgICAgICAgIC8vIGRvY3VtZW50J3MgbGluayBjb2xvcnMgb3ZlciBhbmQgb3ZlciB0byB0
aGUgc2FtZSB2YWx1ZSBhbmQgd2UKKyAgICAgICAgLy8gZG9uJ3Qgd2FudCB0byBpbmN1ciBhIHN0
eWxlIHVwZGF0ZSBlYWNoIHRpbWUuCisgICAgICAgIFN0cmluZyBuZXdDb2xvciA9IHZhbHVlVG9T
dHJpbmdXaXRoTnVsbENoZWNrKGV4ZWMsIHZhbHVlKTsKKyAgICAgICAgaWYgKGJvZHlFbGVtZW50
LT5hTGluaygpICE9IG5ld0NvbG9yKQorICAgICAgICAgICAgYm9keUVsZW1lbnQtPnNldEFMaW5r
KG5ld0NvbG9yKTsKKyAgICB9Cit9CisKK0pTVmFsdWUqIEpTSFRNTERvY3VtZW50OjpsaW5rQ29s
b3IoRXhlY1N0YXRlKikgY29uc3QKK3sKKyAgICBIVE1MRWxlbWVudCogYm9keSA9IHN0YXRpY19j
YXN0PEhUTUxEb2N1bWVudCo+KGltcGwoKSktPmJvZHkoKTsKKyAgICBIVE1MQm9keUVsZW1lbnQq
IGJvZHlFbGVtZW50ID0gKGJvZHkgJiYgYm9keS0+aGFzVGFnTmFtZShib2R5VGFnKSkgPyBzdGF0
aWNfY2FzdDxIVE1MQm9keUVsZW1lbnQqPihib2R5KSA6IDA7CisKKyAgICBpZiAoIWJvZHlFbGVt
ZW50KQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICByZXR1cm4ganNTdHJpbmco
Ym9keUVsZW1lbnQtPmxpbmsoKSk7Cit9CisKK3ZvaWQgSlNIVE1MRG9jdW1lbnQ6OnNldExpbmtD
b2xvcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHZhbHVlKQoreworICAgIEhUTUxFbGVtZW50
KiBib2R5ID0gc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50Kj4oaW1wbCgpKS0+Ym9keSgpOworICAg
IEhUTUxCb2R5RWxlbWVudCogYm9keUVsZW1lbnQgPSAoYm9keSAmJiBib2R5LT5oYXNUYWdOYW1l
KGJvZHlUYWcpKSA/IHN0YXRpY19jYXN0PEhUTUxCb2R5RWxlbWVudCo+KGJvZHkpIDogMDsKKwor
ICAgIGlmIChib2R5RWxlbWVudCkgeworICAgICAgICAvLyBUaGlzIGNoZWNrIGlzIGEgYml0IHNp
bGx5LCBidXQgc29tZSBiZW5jaG1hcmtzIGxpa2UgdG8gc2V0IHRoZQorICAgICAgICAvLyBkb2N1
bWVudCdzIGxpbmsgY29sb3JzIG92ZXIgYW5kIG92ZXIgdG8gdGhlIHNhbWUgdmFsdWUgYW5kIHdl
CisgICAgICAgIC8vIGRvbid0IHdhbnQgdG8gaW5jdXIgYSBzdHlsZSB1cGRhdGUgZWFjaCB0aW1l
LgorICAgICAgICBTdHJpbmcgbmV3Q29sb3IgPSB2YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVjayhl
eGVjLCB2YWx1ZSk7CisgICAgICAgIGlmIChib2R5RWxlbWVudC0+bGluaygpICE9IG5ld0NvbG9y
KQorICAgICAgICAgICAgYm9keUVsZW1lbnQtPnNldExpbmsobmV3Q29sb3IpOworICAgIH0KKwor
fQorCitKU1ZhbHVlKiBKU0hUTUxEb2N1bWVudDo6dmxpbmtDb2xvcihFeGVjU3RhdGUqKSBjb25z
dAoreworICAgIEhUTUxFbGVtZW50KiBib2R5ID0gc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50Kj4o
aW1wbCgpKS0+Ym9keSgpOworICAgIEhUTUxCb2R5RWxlbWVudCogYm9keUVsZW1lbnQgPSAoYm9k
eSAmJiBib2R5LT5oYXNUYWdOYW1lKGJvZHlUYWcpKSA/IHN0YXRpY19jYXN0PEhUTUxCb2R5RWxl
bWVudCo+KGJvZHkpIDogMDsKKworICAgIGlmICghYm9keUVsZW1lbnQpCisgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOworICAgIHJldHVybiBqc1N0cmluZyhib2R5RWxlbWVudC0+dkxpbmso
KSk7Cit9CisKK3ZvaWQgSlNIVE1MRG9jdW1lbnQ6OnNldFZsaW5rQ29sb3IoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBIVE1MRWxlbWVudCogYm9keSA9IHN0YXRpY19j
YXN0PEhUTUxEb2N1bWVudCo+KGltcGwoKSktPmJvZHkoKTsKKyAgICBIVE1MQm9keUVsZW1lbnQq
IGJvZHlFbGVtZW50ID0gKGJvZHkgJiYgYm9keS0+aGFzVGFnTmFtZShib2R5VGFnKSkgPyBzdGF0
aWNfY2FzdDxIVE1MQm9keUVsZW1lbnQqPihib2R5KSA6IDA7CisKKyAgICBpZiAoYm9keUVsZW1l
bnQpIHsKKyAgICAgICAgLy8gVGhpcyBjaGVjayBpcyBhIGJpdCBzaWxseSwgYnV0IHNvbWUgYmVu
Y2htYXJrcyBsaWtlIHRvIHNldCB0aGUKKyAgICAgICAgLy8gZG9jdW1lbnQncyBsaW5rIGNvbG9y
cyBvdmVyIGFuZCBvdmVyIHRvIHRoZSBzYW1lIHZhbHVlIGFuZCB3ZQorICAgICAgICAvLyBkb24n
dCB3YW50IHRvIGluY3VyIGEgc3R5bGUgdXBkYXRlIGVhY2ggdGltZS4KKyAgICAgICAgU3RyaW5n
IG5ld0NvbG9yID0gdmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2soZXhlYywgdmFsdWUpOworICAg
ICAgICBpZiAoYm9keUVsZW1lbnQtPnZMaW5rKCkgIT0gbmV3Q29sb3IpCisgICAgICAgICAgICBi
b2R5RWxlbWVudC0+c2V0VkxpbmsobmV3Q29sb3IpOworICAgIH0KKworfQorCisvLyBDdXN0b20g
ZnVuY3Rpb25zCisKK0pTVmFsdWUqIEpTSFRNTERvY3VtZW50OjpvcGVuKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgTGlzdCYgYXJncykKK3sKKyAgICAvLyBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIG90
aGVyIGJyb3dzZXJzLCBwYXNzIG9wZW4gY2FsbHMgd2l0aCBtb3JlIHRoYW4gMiBwYXJhbWV0ZXJz
IHRvIHRoZSB3aW5kb3cuCisgICAgaWYgKGFyZ3Muc2l6ZSgpID4gMikgeworICAgICAgICBGcmFt
ZSogZnJhbWUgPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQqPihpbXBsKCkpLT5mcmFtZSgpOwor
ICAgICAgICBpZiAoZnJhbWUpIHsKKyAgICAgICAgICAgIFdpbmRvdyogd2luZG93ID0gV2luZG93
OjpyZXRyaWV2ZVdpbmRvdyhmcmFtZSk7CisgICAgICAgICAgICBpZiAod2luZG93KSB7CisgICAg
ICAgICAgICAgICAgSlNPYmplY3QqIGZ1bmN0aW9uT2JqZWN0ID0gd2luZG93LT5nZXQoZXhlYywg
Im9wZW4iKS0+Z2V0T2JqZWN0KCk7CisgICAgICAgICAgICAgICAgaWYgKCFmdW5jdGlvbk9iamVj
dCB8fCAhZnVuY3Rpb25PYmplY3QtPmltcGxlbWVudHNDYWxsKCkpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGZ1bmN0aW9uT2JqZWN0LT5jYWxsKGV4ZWMsIHdpbmRvdywgYXJncyk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQor
CisgICAgLy8gSW4gdGhlIGNhc2Ugb2YgdHdvIHBhcmFtZXRlcnMgb3IgZmV3ZXIsIGRvIGEgbm9y
bWFsIGRvY3VtZW50IG9wZW4uCisgICAgc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50Kj4oaW1wbCgp
KS0+b3BlbigpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworfQorCitzdGF0aWMgU3RyaW5n
IHdyaXRlSGVscGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgTGlzdCYgYXJncykKK3sKKyAgICAv
LyBET00gb25seSBzcGVjaWZpZXMgc2luZ2xlIHN0cmluZyBhcmd1bWVudCwgYnV0IE5TICYgSUUg
YWxsb3cgbXVsdGlwbGUKKyAgICAvLyBvciBubyBhcmd1bWVudHMuCisgICAgU3RyaW5nIHN0ciA9
ICIiOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJncy5zaXplKCk7ICsraSkKKyAgICAgICAg
c3RyICs9IGFyZ3NbaV0tPnRvU3RyaW5nKGV4ZWMpOworICAgIHJldHVybiBzdHI7Cit9CisKK0pT
VmFsdWUqIEpTSFRNTERvY3VtZW50Ojp3cml0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IExpc3Qm
IGFyZ3MpCit7CisgICAgc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50Kj4oaW1wbCgpKS0+d3JpdGUo
d3JpdGVIZWxwZXIoZXhlYywgYXJncykpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworfQor
CitKU1ZhbHVlKiBKU0hUTUxEb2N1bWVudDo6d3JpdGVsbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IExpc3QmIGFyZ3MpCit7CisgICAgc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50Kj4oaW1wbCgpKS0+
d3JpdGUod3JpdGVIZWxwZXIoZXhlYywgYXJncykgKyAiXG4iKTsKKyAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKK30KKworSlNWYWx1ZSogSlNIVE1MRG9jdW1lbnQ6OmNsZWFyKEV4ZWNTdGF0ZSos
IGNvbnN0IExpc3QmKQoreworICAgIC8vIGV2ZW4gSUUgZG9lc24ndCBzdXBwb3J0IHRoaXMgb25l
Li4uCisgICAgLy8gc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50Kj4oaW1wbCgpKS5jbGVhcigpOwor
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworfQorCitKU1ZhbHVlKiBKU0hUTUxEb2N1bWVudDo6
Y2FwdHVyZUV2ZW50cyhFeGVjU3RhdGUqLCBjb25zdCBMaXN0JikKK3sKKyAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKK30KKworSlNWYWx1ZSogSlNIVE1MRG9jdW1lbnQ6OnJlbGVhc2VFdmVudHMo
RXhlY1N0YXRlKiwgY29uc3QgTGlzdCYpCit7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IGJpbmRpbmdzL2pzL2tqc19kb20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGJpbmRpbmdzL2pzL2tqc19kb20uY3BwCShyZXZpc2lvbiAyMTY1NCkK
KysrIGJpbmRpbmdzL2pzL2tqc19kb20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcxLDkgKzEw
NzEsOSBAQCBKU1ZhbHVlKiBnZXRSdW50aW1lT2JqZWN0KEV4ZWNTdGF0ZSogZXhlCiAgICAgcmV0
dXJuIDA7CiB9CiAKLUpTVmFsdWUqIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPE5v
ZGVMaXN0PiBsKQorSlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIE5vZGVMaXN0KiBsKQog
ewotICAgIHJldHVybiBjYWNoZURPTU9iamVjdDxOb2RlTGlzdCwgRE9NTm9kZUxpc3Q+KGV4ZWMs
IGwuZ2V0KCkpOworICAgIHJldHVybiBjYWNoZURPTU9iamVjdDxOb2RlTGlzdCwgRE9NTm9kZUxp
c3Q+KGV4ZWMsIGwpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkluZGV4OiBiaW5kaW5ncy9q
cy9ranNfZG9tLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gYmluZGluZ3MvanMva2pzX2RvbS5oCShyZXZpc2lv
biAyMTY1NCkKKysrIGJpbmRpbmdzL2pzL2tqc19kb20uaAkod29ya2luZyBjb3B5KQpAQCAtMTM3
LDcgKzEzNyw3IEBAIG5hbWVzcGFjZSBLSlMgewogICBKU1ZhbHVlKiBnZXRSdW50aW1lT2JqZWN0
KEV4ZWNTdGF0ZSosIFdlYkNvcmU6Ok5vZGUqKTsKICAgSlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUq
LCBQYXNzUmVmUHRyPFdlYkNvcmU6Ok5vZGU+KTsKICAgSlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUq
LCBXZWJDb3JlOjpOYW1lZE5vZGVNYXAqKTsKLSAgSlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUqLCBQ
YXNzUmVmUHRyPFdlYkNvcmU6Ok5vZGVMaXN0Pik7CisgIEpTVmFsdWUqIHRvSlMoRXhlY1N0YXRl
KiwgV2ViQ29yZTo6Tm9kZUxpc3QqKTsKICAgSlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUqLCBXZWJD
b3JlOjpFdmVudFRhcmdldCopOwogICBKU09iamVjdCogZ2V0Tm9kZUNvbnN0cnVjdG9yKEV4ZWNT
dGF0ZSopOwogICBKU09iamVjdCogZ2V0RE9NRXhjZXB0aW9uQ29uc3RydWN0b3IoRXhlY1N0YXRl
Kik7CkluZGV4OiBiaW5kaW5ncy9qcy9ranNfaHRtbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYmluZGlu
Z3MvanMva2pzX2h0bWwuY3BwCShyZXZpc2lvbiAyMTY1NCkKKysrIGJpbmRpbmdzL2pzL2tqc19o
dG1sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsMzQ1ICs3MSw2IEBAIHByaXZhdGU6CiAgIGlu
dCBpZDsKIH07CiAKLS8qIAotQGJlZ2luIEpTSFRNTERvY3VtZW50UHJvdG90eXBlVGFibGUgOAot
Y2xlYXIgICAgICAgICAgICAgICAgIEpTSFRNTERvY3VtZW50OjpDbGVhciAgICAgICAgICAgICBE
b250RGVsZXRlfEZ1bmN0aW9uIDAKLW9wZW4gICAgICAgICAgICAgICAgICBKU0hUTUxEb2N1bWVu
dDo6T3BlbiAgICAgICAgICAgICAgRG9udERlbGV0ZXxGdW5jdGlvbiAwCi1jbG9zZSAgICAgICAg
ICAgICAgICAgSlNIVE1MRG9jdW1lbnQ6OkNsb3NlICAgICAgICAgICAgIERvbnREZWxldGV8RnVu
Y3Rpb24gMAotd3JpdGUgICAgICAgICAgICAgICAgIEpTSFRNTERvY3VtZW50OjpXcml0ZSAgICAg
ICAgICAgICBEb250RGVsZXRlfEZ1bmN0aW9uIDEKLXdyaXRlbG4gICAgICAgICAgICAgICBKU0hU
TUxEb2N1bWVudDo6V3JpdGVMbiAgICAgICAgICAgRG9udERlbGV0ZXxGdW5jdGlvbiAxCi1nZXRF
bGVtZW50c0J5TmFtZSAgICAgSlNIVE1MRG9jdW1lbnQ6OkdldEVsZW1lbnRzQnlOYW1lIERvbnRE
ZWxldGV8RnVuY3Rpb24gMQotY2FwdHVyZUV2ZW50cyAgICAgICAgIEpTSFRNTERvY3VtZW50OjpD
YXB0dXJlRXZlbnRzICAgICBEb250RGVsZXRlfEZ1bmN0aW9uIDAKLXJlbGVhc2VFdmVudHMgICAg
ICAgICBKU0hUTUxEb2N1bWVudDo6UmVsZWFzZUV2ZW50cyAgICAgRG9udERlbGV0ZXxGdW5jdGlv
biAwCi1AZW5kCi0qLwotS0pTX0lNUExFTUVOVF9QUk9UT1RZUEVfRlVOQ1RJT04oSlNIVE1MRG9j
dW1lbnRQcm90b3R5cGVGdW5jdGlvbikKLUtKU19JTVBMRU1FTlRfUFJPVE9UWVBFKCJET01IVE1M
RG9jdW1lbnQiLCBKU0hUTUxEb2N1bWVudFByb3RvdHlwZSwgSlNIVE1MRG9jdW1lbnRQcm90b3R5
cGVGdW5jdGlvbikKLQotSlNWYWx1ZSAqSlNIVE1MRG9jdW1lbnRQcm90b3R5cGVGdW5jdGlvbjo6
Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3Qg
TGlzdCAmYXJncykKLXsKLSAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZKU0hUTUxEb2N1bWVu
dDo6aW5mbykpCi0gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7Ci0g
ICAgSFRNTERvY3VtZW50ICZkb2MgPSAqc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50Kj4oc3RhdGlj
X2Nhc3Q8SlNIVE1MRG9jdW1lbnQqPih0aGlzT2JqKS0+aW1wbCgpKTsKLSAgICAKLSAgICBzd2l0
Y2ggKGlkKSB7Ci0gICAgICAgIGNhc2UgSlNIVE1MRG9jdW1lbnQ6OkNsZWFyOiAvLyBldmVuIElF
IGRvZXNuJ3Qgc3VwcG9ydCB0aGF0IG9uZS4uLgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy9kb2MuY2xlYXIoKTsgLy8gVE9ETwotICAgICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7Ci0gICAgICAgIGNhc2UgSlNIVE1MRG9jdW1lbnQ6Ok9wZW46Ci0gICAgICAgICAg
ICAvLyBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIG90aGVyIGJyb3dzZXJzLCBwYXNzIG9wZW4gY2Fs
bHMgd2l0aCBtb3JlIHRoYW4gMiBwYXJhbWV0ZXJzIHRvIHRoZSB3aW5kb3cuCi0gICAgICAgICAg
ICBpZiAoYXJncy5zaXplKCkgPiAyKSB7Ci0gICAgICAgICAgICAgICAgRnJhbWUgKmZyYW1lID0g
ZG9jLmZyYW1lKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGZyYW1lKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIFdpbmRvdyAqd2luZG93ID0gV2luZG93OjpyZXRyaWV2ZVdpbmRvdyhmcmFtZSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICh3aW5kb3cpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IEpTT2JqZWN0KiBmdW5jdGlvbk9iamVjdCA9IHdpbmRvdy0+Z2V0KGV4ZWMsICJvcGVuIiktPmdl
dE9iamVjdCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmdW5jdGlvbk9iamVjdCB8
fCAhZnVuY3Rpb25PYmplY3QtPmltcGxlbWVudHNDYWxsKCkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbk9iamVjdC0+Y2FsbChleGVjLCB3aW5kb3csIGFy
Z3MpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
Ly8gSW4gdGhlIGNhc2Ugb2YgdHdvIHBhcmFtZXRlcnMgb3IgZmV3ZXIsIGRvIGEgbm9ybWFsIGRv
Y3VtZW50IG9wZW4uCi0gICAgICAgICAgICBkb2Mub3BlbigpOwotICAgICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgIGNhc2UgSlNIVE1MRG9jdW1lbnQ6OkNsb3NlOgotICAg
ICAgICAgICAgZG9jLmNsb3NlKCk7Ci0gICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
LSAgICAgICAgY2FzZSBKU0hUTUxEb2N1bWVudDo6V3JpdGU6Ci0gICAgICAgIGNhc2UgSlNIVE1M
RG9jdW1lbnQ6OldyaXRlTG46IHsKLSAgICAgICAgICAgIC8vIERPTSBvbmx5IHNwZWNpZmllcyBz
aW5nbGUgc3RyaW5nIGFyZ3VtZW50LCBidXQgTlMgJiBJRSBhbGxvdyBtdWx0aXBsZQotICAgICAg
ICAgICAgLy8gb3Igbm8gYXJndW1lbnRzCi0gICAgICAgICAgICBTdHJpbmcgc3RyID0gIiI7Ci0g
ICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ3Muc2l6ZSgpOyBpKyspCi0gICAgICAg
ICAgICAgICAgc3RyICs9IGFyZ3NbaV0tPnRvU3RyaW5nKGV4ZWMpOwotICAgICAgICAgICAgaWYg
KGlkID09IEpTSFRNTERvY3VtZW50OjpXcml0ZUxuKQotICAgICAgICAgICAgICAgIHN0ciArPSAi
XG4iOwotICAgICAgICAgICAgZG9jLndyaXRlKHN0cik7Ci0gICAgICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEpTSFRNTERvY3VtZW50OjpHZXRF
bGVtZW50c0J5TmFtZToKLSAgICAgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGRvYy5nZXRFbGVt
ZW50c0J5TmFtZShhcmdzWzBdLT50b1N0cmluZyhleGVjKSkuZ2V0KCkpOwotICAgICAgICBjYXNl
IEpTSFRNTERvY3VtZW50OjpDYXB0dXJlRXZlbnRzOgotICAgICAgICBjYXNlIEpTSFRNTERvY3Vt
ZW50OjpSZWxlYXNlRXZlbnRzOgotICAgICAgICAgICAgLy8gRG8gbm90aGluZyBmb3Igbm93LiBU
aGVzZSBhcmUgTlMtc3BlY2lmaWMgbGVnYWN5IGNhbGxzLgotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgfQotICAgIAotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotfQotCi0KLS8vIEZJWE1FOiBm
dW5jdGlvbnMgc2hvdWxkIGJlIGluIHRoZSBwcm90b3R5cGUKLWNvbnN0IENsYXNzSW5mbyBKU0hU
TUxEb2N1bWVudDo6aW5mbyA9Ci0gIHsgIkRPTUhUTUxEb2N1bWVudCIsICZKU0RvY3VtZW50Ojpp
bmZvLCAmSFRNTERvY3VtZW50VGFibGUsIDAgfTsKLS8qIFNvdXJjZSBmb3IgSFRNTERvY3VtZW50
VGFibGUuIFVzZSAibWFrZSBoYXNodGFibGVzIiB0byByZWdlbmVyYXRlLgotQGJlZ2luIEhUTUxE
b2N1bWVudFRhYmxlIDMwCi0gIHRpdGxlICAgICAgICAgICAgICAgICBKU0hUTUxEb2N1bWVudDo6
VGl0bGUgICAgICAgICAgICAgRG9udERlbGV0ZQotICByZWZlcnJlciAgICAgICAgICAgICAgSlNI
VE1MRG9jdW1lbnQ6OlJlZmVycmVyICAgICAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKLSAgZG9t
YWluICAgICAgICAgICAgICAgIEpTSFRNTERvY3VtZW50OjpEb21haW4gICAgICAgICAgICBEb250
RGVsZXRlCi0gIGJvZHkgICAgICAgICAgICAgICAgICBKU0hUTUxEb2N1bWVudDo6Qm9keSAgICAg
ICAgICAgICAgRG9udERlbGV0ZQotICBsb2NhdGlvbiAgICAgICAgICAgICAgSlNIVE1MRG9jdW1l
bnQ6OkxvY2F0aW9uICAgICAgICAgIERvbnREZWxldGUKLSAgY29va2llICAgICAgICAgICAgICAg
IEpTSFRNTERvY3VtZW50OjpDb29raWUgICAgICAgICAgICBEb250RGVsZXRlCi0gIGltYWdlcyAg
ICAgICAgICAgICAgICBKU0hUTUxEb2N1bWVudDo6SW1hZ2VzICAgICAgICAgICAgRG9udERlbGV0
ZXxSZWFkT25seQotICBlbWJlZHMgICAgICAgICAgICAgICAgSlNIVE1MRG9jdW1lbnQ6OkVtYmVk
cyAgICAgICAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKLSAgcGx1Z2lucyAgICAgICAgICAgICAg
IEpTSFRNTERvY3VtZW50OjpFbWJlZHMgICAgICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0g
IGFwcGxldHMgICAgICAgICAgICAgICBKU0hUTUxEb2N1bWVudDo6QXBwbGV0cyAgICAgICAgICAg
RG9udERlbGV0ZXxSZWFkT25seQotICBsaW5rcyAgICAgICAgICAgICAgICAgSlNIVE1MRG9jdW1l
bnQ6OkxpbmtzICAgICAgICAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKLSAgZm9ybXMgICAgICAg
ICAgICAgICAgIEpTSFRNTERvY3VtZW50OjpGb3JtcyAgICAgICAgICAgICBEb250RGVsZXRlfFJl
YWRPbmx5Ci0gIGFuY2hvcnMgICAgICAgICAgICAgICBKU0hUTUxEb2N1bWVudDo6QW5jaG9ycyAg
ICAgICAgICAgRG9udERlbGV0ZXxSZWFkT25seQotICBzY3JpcHRzICAgICAgICAgICAgICAgSlNI
VE1MRG9jdW1lbnQ6OlNjcmlwdHMgICAgICAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKLSAgYWxs
ICAgICAgICAgICAgICAgICAgIEpTSFRNTERvY3VtZW50OjpBbGwgICAgICAgICAgICAgICAKLSAg
YmdDb2xvciAgICAgICAgICAgICAgIEpTSFRNTERvY3VtZW50OjpCZ0NvbG9yICAgICAgICAgICBE
b250RGVsZXRlCi0gIGZnQ29sb3IgICAgICAgICAgICAgICBKU0hUTUxEb2N1bWVudDo6RmdDb2xv
ciAgICAgICAgICAgRG9udERlbGV0ZQotICBhbGlua0NvbG9yICAgICAgICAgICAgSlNIVE1MRG9j
dW1lbnQ6OkFsaW5rQ29sb3IgICAgICAgIERvbnREZWxldGUKLSAgbGlua0NvbG9yICAgICAgICAg
ICAgIEpTSFRNTERvY3VtZW50OjpMaW5rQ29sb3IgICAgICAgICBEb250RGVsZXRlCi0gIHZsaW5r
Q29sb3IgICAgICAgICAgICBKU0hUTUxEb2N1bWVudDo6VmxpbmtDb2xvciAgICAgICAgRG9udERl
bGV0ZQotICBsYXN0TW9kaWZpZWQgICAgICAgICAgSlNIVE1MRG9jdW1lbnQ6Okxhc3RNb2RpZmll
ZCAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKLSAgaGVpZ2h0ICAgICAgICAgICAgICAgIEpTSFRN
TERvY3VtZW50OjpIZWlnaHQgICAgICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIHdpZHRo
ICAgICAgICAgICAgICAgICBKU0hUTUxEb2N1bWVudDo6V2lkdGggICAgICAgICAgICAgRG9udERl
bGV0ZXxSZWFkT25seQotICBkaXIgICAgICAgICAgICAgICAgICAgSlNIVE1MRG9jdW1lbnQ6OkRp
ciAgICAgICAgICAgICAgIERvbnREZWxldGUKLSAgZGVzaWduTW9kZSAgICAgICAgICAgIEpTSFRN
TERvY3VtZW50OjpEZXNpZ25Nb2RlICAgICAgICBEb250RGVsZXRlCi0jcG90ZW50aWFsbHkgb2Jz
b2xldGUgYXJyYXkgcHJvcGVydGllcwotIyBsYXllcnMKLSMgcGx1Z2lucwotIyB0YWdzCi0jcG90
ZW50aWFsbHkgb2Jzb2xldGUgcHJvcGVydGllcwotIyBlbWJlZHMKLSMgaWRzCi1AZW5kCi0qLwot
Ci1KU0hUTUxEb2N1bWVudDo6SlNIVE1MRG9jdW1lbnQoRXhlY1N0YXRlKiBleGVjLCBIVE1MRG9j
dW1lbnQgKmQpCi0gIDogSlNEb2N1bWVudChleGVjLCBkKQotewotICAgIHNldFByb3RvdHlwZShK
U0hUTUxEb2N1bWVudFByb3RvdHlwZTo6c2VsZihleGVjKSk7Ci19Ci0KLUpTVmFsdWUgKkpTSFRN
TERvY3VtZW50OjpuYW1lZEl0ZW1HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb3Jp
Z2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVy
dHlTbG90JiBzbG90KQotewotICBKU0hUTUxEb2N1bWVudCAqdGhpc09iaiA9IHN0YXRpY19jYXN0
PEpTSFRNTERvY3VtZW50Kj4oc2xvdC5zbG90QmFzZSgpKTsKLSAgSFRNTERvY3VtZW50ICZkb2Mg
PSAqc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50Kj4odGhpc09iai0+aW1wbCgpKTsKLQotICBTdHJp
bmcgbmFtZSA9IHByb3BlcnR5TmFtZTsKLSAgUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBjb2xsZWN0
aW9uID0gZG9jLmRvY3VtZW50TmFtZWRJdGVtcyhuYW1lKTsKLQotICBpZiAoY29sbGVjdGlvbi0+
bGVuZ3RoKCkgPT0gMSkgewotICAgIE5vZGUqIG5vZGUgPSBjb2xsZWN0aW9uLT5maXJzdEl0ZW0o
KTsKLSAgICBGcmFtZSAqZnJhbWU7Ci0gICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoaWZyYW1lVGFn
KSAmJiAoZnJhbWUgPSBzdGF0aWNfY2FzdDxIVE1MSUZyYW1lRWxlbWVudCo+KG5vZGUpLT5jb250
ZW50RnJhbWUoKSkpCi0gICAgICByZXR1cm4gV2luZG93OjpyZXRyaWV2ZShmcmFtZSk7Ci0gICAg
cmV0dXJuIHRvSlMoZXhlYywgbm9kZSk7Ci0gIH0gZWxzZSBpZiAoY29sbGVjdGlvbi0+bGVuZ3Ro
KCkgPT0gMCkKLSAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotCi0gIHJldHVybiBnZXRIVE1M
Q29sbGVjdGlvbihleGVjLCBjb2xsZWN0aW9uLmdldCgpKTsKLX0KLQotSlNWYWx1ZSAqSlNIVE1M
RG9jdW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNv
bnN0Ci17Ci0gIEhUTUxEb2N1bWVudCYgZG9jID0gKnN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCo+
KGltcGwoKSk7Ci0KLSAgRnJhbWVWaWV3KiB2aWV3ID0gZG9jLnZpZXcoKTsKLSAgRnJhbWUqIGZy
YW1lID0gZG9jLmZyYW1lKCk7Ci0KLSAgSFRNTEVsZW1lbnQqIGJvZHkgPSBkb2MuYm9keSgpOwot
ICBIVE1MQm9keUVsZW1lbnQqIGJvZHlFbGVtZW50ID0gKGJvZHkgJiYgYm9keS0+aGFzVGFnTmFt
ZShib2R5VGFnKSkgPyBzdGF0aWNfY2FzdDxIVE1MQm9keUVsZW1lbnQqPihib2R5KSA6IDA7Ci0g
ICAgCi0gIHN3aXRjaCAodG9rZW4pIHsKLSAgY2FzZSBUaXRsZToKLSAgICByZXR1cm4ganNTdHJp
bmcoZG9jLnRpdGxlKCkpOwotICBjYXNlIFJlZmVycmVyOgotICAgIHJldHVybiBqc1N0cmluZyhk
b2MucmVmZXJyZXIoKSk7Ci0gIGNhc2UgRG9tYWluOgotICAgIHJldHVybiBqc1N0cmluZyhkb2Mu
ZG9tYWluKCkpOwotICBjYXNlIEJvZHk6Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywgYm9keSk7Ci0g
IGNhc2UgTG9jYXRpb246Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgIHJldHVybiBqc051bGwoKTsK
LSAgICBpZiAoV2luZG93KiB3aW4gPSBXaW5kb3c6OnJldHJpZXZlV2luZG93KGZyYW1lKSkKLSAg
ICAgIHJldHVybiB3aW4tPmxvY2F0aW9uKCk7Ci0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0g
IGNhc2UgQ29va2llOgotICAgIHJldHVybiBqc1N0cmluZyhkb2MuY29va2llKCkpOwotICBjYXNl
IEltYWdlczoKLSAgICByZXR1cm4gZ2V0SFRNTENvbGxlY3Rpb24oZXhlYywgZG9jLmltYWdlcygp
LmdldCgpKTsKLSAgY2FzZSBFbWJlZHM6Ci0gICAgcmV0dXJuIGdldEhUTUxDb2xsZWN0aW9uKGV4
ZWMsIGRvYy5lbWJlZHMoKS5nZXQoKSk7Ci0gIGNhc2UgQXBwbGV0czoKLSAgICByZXR1cm4gZ2V0
SFRNTENvbGxlY3Rpb24oZXhlYywgZG9jLmFwcGxldHMoKS5nZXQoKSk7Ci0gIGNhc2UgTGlua3M6
Ci0gICAgcmV0dXJuIGdldEhUTUxDb2xsZWN0aW9uKGV4ZWMsIGRvYy5saW5rcygpLmdldCgpKTsK
LSAgY2FzZSBGb3JtczoKLSAgICByZXR1cm4gZ2V0SFRNTENvbGxlY3Rpb24oZXhlYywgZG9jLmZv
cm1zKCkuZ2V0KCkpOwotICBjYXNlIEFuY2hvcnM6Ci0gICAgcmV0dXJuIGdldEhUTUxDb2xsZWN0
aW9uKGV4ZWMsIGRvYy5hbmNob3JzKCkuZ2V0KCkpOwotICBjYXNlIFNjcmlwdHM6Ci0gICAgcmV0
dXJuIGdldEhUTUxDb2xsZWN0aW9uKGV4ZWMsIGRvYy5zY3JpcHRzKCkuZ2V0KCkpOwotICBjYXNl
IEFsbDoKLSAgICAvLyBJZiAiYWxsIiBoYXMgYmVlbiBvdmVyd3JpdHRlbiwgcmV0dXJuIHRoZSBv
dmVyd3JpdHRlbiB2YWx1ZQotICAgIGlmIChKU1ZhbHVlICp2ID0gZ2V0RGlyZWN0KCJhbGwiKSkK
LSAgICAgIHJldHVybiB2OwotICAgIGVsc2UKLSAgICAgIHJldHVybiBnZXRBbGxIVE1MQ29sbGVj
dGlvbihleGVjLCBkb2MuYWxsKCkuZ2V0KCkpOwotICBjYXNlIEJnQ29sb3I6Ci0gICAgaWYgKCFi
b2R5RWxlbWVudCkKLSAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIHJldHVybiBqc1N0
cmluZyhib2R5RWxlbWVudC0+YmdDb2xvcigpKTsKLSAgY2FzZSBGZ0NvbG9yOgotICAgIGlmICgh
Ym9keUVsZW1lbnQpCi0gICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICByZXR1cm4ganNT
dHJpbmcoYm9keUVsZW1lbnQtPnRleHQoKSk7Ci0gIGNhc2UgQWxpbmtDb2xvcjoKLSAgICBpZiAo
IWJvZHlFbGVtZW50KQotICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgcmV0dXJuIGpz
U3RyaW5nKGJvZHlFbGVtZW50LT5hTGluaygpKTsKLSAgY2FzZSBMaW5rQ29sb3I6Ci0gICAgaWYg
KCFib2R5RWxlbWVudCkKLSAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIHJldHVybiBq
c1N0cmluZyhib2R5RWxlbWVudC0+bGluaygpKTsKLSAgY2FzZSBWbGlua0NvbG9yOgotICAgIGlm
ICghYm9keUVsZW1lbnQpCi0gICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICByZXR1cm4g
anNTdHJpbmcoYm9keUVsZW1lbnQtPnZMaW5rKCkpOwotICBjYXNlIExhc3RNb2RpZmllZDoKLSAg
ICByZXR1cm4ganNTdHJpbmcoZG9jLmxhc3RNb2RpZmllZCgpKTsKLSAgY2FzZSBIZWlnaHQ6Ci0g
ICAgcmV0dXJuIGpzTnVtYmVyKHZpZXcgPyB2aWV3LT5jb250ZW50c0hlaWdodCgpIDogMCk7Ci0g
IGNhc2UgV2lkdGg6Ci0gICAgcmV0dXJuIGpzTnVtYmVyKHZpZXcgPyB2aWV3LT5jb250ZW50c1dp
ZHRoKCkgOiAwKTsKLSAgY2FzZSBEaXI6Ci0gICAgaWYgKCFib2R5KQotICAgICAgcmV0dXJuIGpz
U3RyaW5nKCIiKTsKLSAgICByZXR1cm4ganNTdHJpbmcoYm9keS0+ZGlyKCkpOwotICBjYXNlIERl
c2lnbk1vZGU6Ci0gICAgcmV0dXJuIGpzU3RyaW5nKGRvYy5pbkRlc2lnbk1vZGUoKSA/ICJvbiIg
OiAib2ZmIik7Ci0gIGRlZmF1bHQ6Ci0gICAgQVNTRVJUKDApOwotICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwotICB9Ci19Ci0KLWJvb2wgSlNIVE1MRG9jdW1lbnQ6OmdldE93blByb3BlcnR5U2xv
dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVy
dHlTbG90JiBzbG90KQotewotICBIVE1MRG9jdW1lbnQgJmRvYyA9ICpzdGF0aWNfY2FzdDxIVE1M
RG9jdW1lbnQqPihpbXBsKCkpOwotCi0gIFN0cmluZyBuYW1lID0gcHJvcGVydHlOYW1lOwotICBp
ZiAoZG9jLmhhc05hbWVkSXRlbShuYW1lKSB8fCBkb2MuaGFzRG9jRXh0cmFOYW1lZEl0ZW0obmFt
ZSkpIHsKLSAgICBzbG90LnNldEN1c3RvbSh0aGlzLCBuYW1lZEl0ZW1HZXR0ZXIpOwotICAgIHJl
dHVybiB0cnVlOwotICB9Ci0KLSAgcmV0dXJuIGdldFN0YXRpY1ZhbHVlU2xvdDxKU0hUTUxEb2N1
bWVudCwgSlNEb2N1bWVudD4oZXhlYywgJkhUTUxEb2N1bWVudFRhYmxlLCB0aGlzLCBwcm9wZXJ0
eU5hbWUsIHNsb3QpOwotfQotCi12b2lkIEpTSFRNTERvY3VtZW50OjpwdXQoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgKnZhbHVlLCBpbnQg
YXR0cikKLXsKLSAgICBsb29rdXBQdXQ8SlNIVE1MRG9jdW1lbnQsIEpTRG9jdW1lbnQ+KGV4ZWMs
IHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHIsICZIVE1MRG9jdW1lbnRUYWJsZSwgdGhpcyk7Ci19
Ci0KLXZvaWQgSlNIVE1MRG9jdW1lbnQ6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlKiBleGVj
LCBpbnQgdG9rZW4sIEpTVmFsdWUgKnZhbHVlLCBpbnQgLyphdHRyKi8pCi17Ci0gIERPTUV4Y2Vw
dGlvblRyYW5zbGF0b3IgZXhjZXB0aW9uKGV4ZWMpOwotICBIVE1MRG9jdW1lbnQgJmRvYyA9ICpz
dGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQqPihpbXBsKCkpOwotICBIVE1MRWxlbWVudCogYm9keSA9
IGRvYy5ib2R5KCk7Ci0gIEhUTUxCb2R5RWxlbWVudCogYm9keUVsZW1lbnQgPSAoYm9keSAmJiBi
b2R5LT5oYXNUYWdOYW1lKGJvZHlUYWcpKSA/IHN0YXRpY19jYXN0PEhUTUxCb2R5RWxlbWVudCo+
KGJvZHkpIDogMDsKLQotICBzd2l0Y2ggKHRva2VuKSB7Ci0gIGNhc2UgVGl0bGU6Ci0gICAgZG9j
LnNldFRpdGxlKHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKGV4ZWMsIHZhbHVlKSk7Ci0gICAg
YnJlYWs7Ci0gIGNhc2UgQm9keToKLSAgICBkb2Muc2V0Qm9keSh0b0hUTUxFbGVtZW50KHZhbHVl
KSwgZXhjZXB0aW9uKTsKLSAgICBicmVhazsKLSAgY2FzZSBEb21haW46IC8vIG5vdCBwYXJ0IG9m
IHRoZSBET00KLSAgICBkb2Muc2V0RG9tYWluKHZhbHVlLT50b1N0cmluZyhleGVjKSk7Ci0gICAg
YnJlYWs7Ci0gIGNhc2UgQ29va2llOgotICAgIGRvYy5zZXRDb29raWUodmFsdWVUb1N0cmluZ1dp
dGhOdWxsQ2hlY2soZXhlYywgdmFsdWUpKTsKLSAgICBicmVhazsKLSAgY2FzZSBMb2NhdGlvbjoK
LSAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jLmZyYW1lKCkpIHsKLSAgICAgIERlcHJlY2F0ZWRT
dHJpbmcgc3RyID0gdmFsdWUtPnRvU3RyaW5nKGV4ZWMpOwotCi0gICAgICAvLyBXaGVuIGFzc2ln
bmluZyBsb2NhdGlvbiwgSUUgYW5kIE1vemlsbGEgYm90aCByZXNvbHZlIHRoZSBVUkwKLSAgICAg
IC8vIHJlbGF0aXZlIHRvIHRoZSBmcmFtZSB3aGVyZSB0aGUgSmF2YVNjcmlwdCBpcyBleGVjdXRp
bmcgbm90Ci0gICAgICAvLyB0aGUgdGFyZ2V0IGZyYW1lLgotICAgICAgRnJhbWUqIGFjdGl2ZUZy
YW1lID0gc3RhdGljX2Nhc3Q8U2NyaXB0SW50ZXJwcmV0ZXIqPiggZXhlYy0+ZHluYW1pY0ludGVy
cHJldGVyKCkgKS0+ZnJhbWUoKTsKLSAgICAgIGlmIChhY3RpdmVGcmFtZSkKLSAgICAgICAgc3Ry
ID0gYWN0aXZlRnJhbWUtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHN0cik7Ci0KLSAgICAgIC8v
IFdlIHdhbnQgYSBuZXcgaGlzdG9yeSBpdGVtIGlmIHRoaXMgSlMgd2FzIGNhbGxlZCB2aWEgYSB1
c2VyIGdlc3R1cmUKLSAgICAgIGJvb2wgdXNlckdlc3R1cmUgPSBzdGF0aWNfY2FzdDxTY3JpcHRJ
bnRlcnByZXRlcio+KGV4ZWMtPmR5bmFtaWNJbnRlcnByZXRlcigpKS0+d2FzUnVuQnlVc2VyR2Vz
dHVyZSgpOwotICAgICAgZnJhbWUtPmxvYWRlcigpLT5zY2hlZHVsZUxvY2F0aW9uQ2hhbmdlKHN0
ciwgYWN0aXZlRnJhbWUtPmxvYWRlcigpLT5vdXRnb2luZ1JlZmVycmVyKCksICF1c2VyR2VzdHVy
ZSk7Ci0gICAgfQotICAgIGJyZWFrOwotICBjYXNlIEJnQ29sb3I6Ci0gICAgaWYgKGJvZHlFbGVt
ZW50KQotICAgICAgYm9keUVsZW1lbnQtPnNldEJnQ29sb3IodmFsdWVUb1N0cmluZ1dpdGhOdWxs
Q2hlY2soZXhlYywgdmFsdWUpKTsKLSAgICBicmVhazsKLSAgY2FzZSBGZ0NvbG9yOgotICAgIGlm
IChib2R5RWxlbWVudCkKLSAgICAgIGJvZHlFbGVtZW50LT5zZXRUZXh0KHZhbHVlVG9TdHJpbmdX
aXRoTnVsbENoZWNrKGV4ZWMsIHZhbHVlKSk7Ci0gICAgYnJlYWs7Ci0gIGNhc2UgQWxpbmtDb2xv
cjoKLSAgICBpZiAoYm9keUVsZW1lbnQpIHsKLSAgICAgIC8vIHRoaXMgY2hlY2sgaXMgYSBiaXQg
c2lsbHksIGJ1dCBzb21lIGJlbmNobWFya3MgbGlrZSB0byBzZXQgdGhlCi0gICAgICAvLyBkb2N1
bWVudCdzIGxpbmsgY29sb3JzIG92ZXIgYW5kIG92ZXIgdG8gdGhlIHNhbWUgdmFsdWUgYW5kIHdl
Ci0gICAgICAvLyBkb24ndCB3YW50IHRvIGluY3VyIGEgc3R5bGUgdXBkYXRlIGVhY2ggdGltZS4K
LSAgICAgIFN0cmluZyBuZXdDb2xvciA9IHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKGV4ZWMs
IHZhbHVlKTsKLSAgICAgIGlmIChib2R5RWxlbWVudC0+YUxpbmsoKSAhPSBuZXdDb2xvcikKLSAg
ICAgICAgYm9keUVsZW1lbnQtPnNldEFMaW5rKG5ld0NvbG9yKTsKLSAgICB9Ci0gICAgYnJlYWs7
Ci0gIGNhc2UgTGlua0NvbG9yOgotICAgIGlmIChib2R5RWxlbWVudCkgewotICAgICAgLy8gdGhp
cyBjaGVjayBpcyBhIGJpdCBzaWxseSwgYnV0IHNvbWUgYmVuY2htYXJrcyBsaWtlIHRvIHNldCB0
aGUKLSAgICAgIC8vIGRvY3VtZW50J3MgbGluayBjb2xvcnMgb3ZlciBhbmQgb3ZlciB0byB0aGUg
c2FtZSB2YWx1ZSBhbmQgd2UKLSAgICAgIC8vIGRvbid0IHdhbnQgdG8gaW5jdXIgYSBzdHlsZSB1
cGRhdGUgZWFjaCB0aW1lLgotICAgICAgU3RyaW5nIG5ld0NvbG9yID0gdmFsdWVUb1N0cmluZ1dp
dGhOdWxsQ2hlY2soZXhlYywgdmFsdWUpOwotICAgICAgaWYgKGJvZHlFbGVtZW50LT5saW5rKCkg
IT0gbmV3Q29sb3IpCi0gICAgICAgIGJvZHlFbGVtZW50LT5zZXRMaW5rKG5ld0NvbG9yKTsKLSAg
ICB9Ci0gICAgYnJlYWs7Ci0gIGNhc2UgVmxpbmtDb2xvcjoKLSAgICBpZiAoYm9keUVsZW1lbnQp
IHsKLSAgICAgIC8vIHRoaXMgY2hlY2sgaXMgYSBiaXQgc2lsbHksIGJ1dCBzb21lIGJlbmNobWFy
a3MgbGlrZSB0byBzZXQgdGhlCi0gICAgICAvLyBkb2N1bWVudCdzIGxpbmsgY29sb3JzIG92ZXIg
YW5kIG92ZXIgdG8gdGhlIHNhbWUgdmFsdWUgYW5kIHdlCi0gICAgICAvLyBkb24ndCB3YW50IHRv
IGluY3VyIGEgc3R5bGUgdXBkYXRlIGVhY2ggdGltZS4KLSAgICAgIFN0cmluZyBuZXdDb2xvciA9
IHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKGV4ZWMsIHZhbHVlKTsKLSAgICAgIGlmIChib2R5
RWxlbWVudC0+dkxpbmsoKSAhPSBuZXdDb2xvcikKLSAgICAgICAgYm9keUVsZW1lbnQtPnNldFZM
aW5rKG5ld0NvbG9yKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0gIGNhc2UgRGlyOgotICAgIGlmIChi
b2R5KQotICAgICAgYm9keS0+c2V0RGlyKHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKGV4ZWMs
IHZhbHVlKSk7Ci0gICAgYnJlYWs7Ci0gIGNhc2UgRGVzaWduTW9kZToKLSAgICB7Ci0gICAgICBT
dHJpbmcgbW9kZVN0cmluZyA9IHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKGV4ZWMsIHZhbHVl
KTsKLSAgICAgIERvY3VtZW50OjpJbmhlcml0ZWRCb29sIG1vZGU7Ci0gICAgICBpZiAoZXF1YWxJ
Z25vcmluZ0Nhc2UobW9kZVN0cmluZywgIm9uIikpCi0gICAgICAgIG1vZGUgPSBEb2N1bWVudDo6
b247Ci0gICAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShtb2RlU3RyaW5nLCAib2ZmIikp
Ci0gICAgICAgIG1vZGUgPSBEb2N1bWVudDo6b2ZmOwotICAgICAgZWxzZQotICAgICAgICBtb2Rl
ID0gRG9jdW1lbnQ6OmluaGVyaXQ7Ci0gICAgICBkb2Muc2V0RGVzaWduTW9kZShtb2RlKTsKLSAg
ICAgIGJyZWFrOwotICAgIH0KLSAgY2FzZSBBbGw6Ci0gICAgLy8gQWRkICJhbGwiIHRvIHRoZSBw
cm9wZXJ0eSBtYXAuCi0gICAgcHV0RGlyZWN0KCJhbGwiLCB2YWx1ZSk7Ci0gICAgYnJlYWs7Ci0g
IH0KLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCiBjb25zdCBDbGFzc0luZm8gSlNIVE1MRWxl
bWVudDo6aW5mbyA9IHsgIkhUTUxFbGVtZW50IiwgJkpTRWxlbWVudDo6aW5mbywgJkhUTUxFbGVt
ZW50VGFibGUsIDAgfTsKIAogY29uc3QgQ2xhc3NJbmZvIEpTSFRNTEVsZW1lbnQ6OmVtYmVkX2lu
Zm8gPSB7ICJIVE1MRW1iZWRFbGVtZW50IiwgJkpTSFRNTEVsZW1lbnQ6OmluZm8sICZIVE1MRW1i
ZWRFbGVtZW50VGFibGUsIDAgfTsKQEAgLTQ1MCwyNCArMTExLDkgQEAgY29uc3QgSlNIVE1MRWxl
bWVudDo6QWNjZXNzb3JzKiBKU0hUTUxFbAogfQogCiAvKgotCiBAYmVnaW4gSlNIVE1MRWxlbWVu
dFByb3RvdHlwZVRhYmxlIDAKIEBlbmQKLQotQGJlZ2luIEhUTUxFbGVtZW50VGFibGUgMTQKLSAg
aWQgICAgICAgICAgICBLSlM6OkpTSFRNTEVsZW1lbnQ6OkVsZW1lbnRJZCAgICAgRG9udERlbGV0
ZQotICBsYW5nICAgICAgICAgIEtKUzo6SlNIVE1MRWxlbWVudDo6RWxlbWVudExhbmcgICBEb250
RGVsZXRlCi0gIGRpciAgICAgICAgICAgS0pTOjpKU0hUTUxFbGVtZW50OjpFbGVtZW50RGlyICAg
IERvbnREZWxldGUKLSMjIyBpc24ndCB0aGlzICJjbGFzcyIgaW4gdGhlIEhUTUwgc3BlYz8KLSAg
Y2xhc3NOYW1lICAgICBLSlM6OkpTSFRNTEVsZW1lbnQ6OkVsZW1lbnRDbGFzc05hbWUgRG9udERl
bGV0ZQotICBpbm5lckhUTUwgICAgIEtKUzo6SlNIVE1MRWxlbWVudDo6RWxlbWVudElubmVySFRN
TCBEb250RGVsZXRlCi0gIGlubmVyVGV4dCAgICAgS0pTOjpKU0hUTUxFbGVtZW50OjpFbGVtZW50
SW5uZXJUZXh0IERvbnREZWxldGUKLSAgb3V0ZXJIVE1MICAgICBLSlM6OkpTSFRNTEVsZW1lbnQ6
OkVsZW1lbnRPdXRlckhUTUwgRG9udERlbGV0ZQotICBvdXRlclRleHQgICAgIEtKUzo6SlNIVE1M
RWxlbWVudDo6RWxlbWVudE91dGVyVGV4dCBEb250RGVsZXRlCi0jIElFIGV4dGVuc2lvbgotICBj
aGlsZHJlbiAgICAgIEtKUzo6SlNIVE1MRWxlbWVudDo6RWxlbWVudENoaWxkcmVuICBEb250RGVs
ZXRlfFJlYWRPbmx5Ci0gIGNvbnRlbnRFZGl0YWJsZSAgIEtKUzo6SlNIVE1MRWxlbWVudDo6RWxl
bWVudENvbnRlbnRFZGl0YWJsZSAgRG9udERlbGV0ZQotICBpc0NvbnRlbnRFZGl0YWJsZSBLSlM6
OkpTSFRNTEVsZW1lbnQ6OkVsZW1lbnRJc0NvbnRlbnRFZGl0YWJsZSAgRG9udERlbGV0ZXxSZWFk
T25seQorQGJlZ2luIEhUTUxFbGVtZW50VGFibGUgMAogQGVuZAogQGJlZ2luIEhUTUxPYmplY3RF
bGVtZW50VGFibGUgMjAKICAgZm9ybSAgICAgICAgICAgIEtKUzo6SlNIVE1MRWxlbWVudDo6T2Jq
ZWN0Rm9ybSAgICAgICAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKQEAgLTY3MiwzNyArMzE4LDcg
QEAgSlNWYWx1ZSAqSlNIVE1MRWxlbWVudDo6ZnJhbWVTZXRHZXR0ZXIoRQogCiBKU1ZhbHVlICpK
U0hUTUxFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2Vu
KSBjb25zdAogewotICAgIC8vIENoZWNrIG91ciBzZXQgb2YgZ2VuZXJpYyBwcm9wZXJ0aWVzIGZp
cnN0LgotICAgIEhUTUxFbGVtZW50ICZlbGVtZW50ID0gKnN0YXRpY19jYXN0PEhUTUxFbGVtZW50
Kj4oaW1wbCgpKTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICAgIGNhc2UgRWxlbWVudElk
OgotICAgICAgICAgICAgLy8gaWh0LmNvbSByZWxpZXMgb24gdGhpcyB2YWx1ZSBiZWluZyAiIiB3
aGVuIG5vIGlkIGlzIHByZXNlbnQuIE90aGVyIGJyb3dzZXJzIGRvIHRoaXMgYXMgd2VsbC4KLSAg
ICAgICAgICAgIC8vIFNvIHdlIHVzZSBqc1N0cmluZygpIGluc3RlYWQgb2YganNTdHJpbmdPck51
bGwoKSBoZXJlLgotICAgICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGVsZW1lbnQuaWQoKSk7Ci0g
ICAgICAgIGNhc2UgRWxlbWVudExhbmc6Ci0gICAgICAgICAgICByZXR1cm4ganNTdHJpbmcoZWxl
bWVudC5sYW5nKCkpOwotICAgICAgICBjYXNlIEVsZW1lbnREaXI6Ci0gICAgICAgICAgICByZXR1
cm4ganNTdHJpbmcoZWxlbWVudC5kaXIoKSk7Ci0gICAgICAgIGNhc2UgRWxlbWVudENsYXNzTmFt
ZToKLSAgICAgICAgICAgIHJldHVybiBqc1N0cmluZyhlbGVtZW50LmNsYXNzTmFtZSgpKTsKLSAg
ICAgICAgY2FzZSBFbGVtZW50SW5uZXJIVE1MOgotICAgICAgICAgICAgcmV0dXJuIGpzU3RyaW5n
KGVsZW1lbnQuaW5uZXJIVE1MKCkpOwotICAgICAgICBjYXNlIEVsZW1lbnRJbm5lclRleHQ6Ci0g
ICAgICAgICAgICBpbXBsKCktPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdT
dHlsZXNoZWV0cygpOwotICAgICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGVsZW1lbnQuaW5uZXJU
ZXh0KCkpOwotICAgICAgICBjYXNlIEVsZW1lbnRPdXRlckhUTUw6Ci0gICAgICAgICAgICByZXR1
cm4ganNTdHJpbmcoZWxlbWVudC5vdXRlckhUTUwoKSk7Ci0gICAgICAgIGNhc2UgRWxlbWVudE91
dGVyVGV4dDoKLSAgICAgICAgICAgIHJldHVybiBqc1N0cmluZyhlbGVtZW50Lm91dGVyVGV4dCgp
KTsKLSAgICAgICAgY2FzZSBFbGVtZW50Q2hpbGRyZW46Ci0gICAgICAgICAgICByZXR1cm4gZ2V0
SFRNTENvbGxlY3Rpb24oZXhlYywgZWxlbWVudC5jaGlsZHJlbigpLmdldCgpKTsKLSAgICAgICAg
Y2FzZSBFbGVtZW50Q29udGVudEVkaXRhYmxlOgotICAgICAgICAgICAgcmV0dXJuIGpzU3RyaW5n
KGVsZW1lbnQuY29udGVudEVkaXRhYmxlKCkpOwotICAgICAgICBjYXNlIEVsZW1lbnRJc0NvbnRl
bnRFZGl0YWJsZToKLSAgICAgICAgICAgIHJldHVybiBqc0Jvb2xlYW4oZWxlbWVudC5pc0NvbnRl
bnRFZGl0YWJsZSgpKTsKLSAgICB9Ci0KLSAgICAvLyBOb3cgY2hlY2sgdGhlIHByb3BlcnRpZXMg
c3BlY2lmaWMgdG8gb3VyIGVsZW1lbnQgdHlwZS4KKyAgICAvLyBDaGVjayB0aGUgcHJvcGVydGll
cyBzcGVjaWZpYyB0byBvdXIgZWxlbWVudCB0eXBlLgogICAgIGNvbnN0IEFjY2Vzc29ycyogYWNj
ZXNzID0gYWNjZXNzb3JzKCk7CiAgICAgaWYgKGFjY2VzcyAmJiBhY2Nlc3MtPm1fZ2V0dGVyKQog
ICAgICAgICByZXR1cm4gKHRoaXMtPiooYWNjZXNzLT5tX2dldHRlcikpKGV4ZWMsIHRva2VuKTsK
QEAgLTcxMyw4ICszMjksOCBAQCBVU3RyaW5nIEpTSFRNTEVsZW1lbnQ6OnRvU3RyaW5nKEV4ZWNT
dGF0CiB7CiAgICAgaWYgKGltcGwoKS0+aGFzVGFnTmFtZShhVGFnKSkKICAgICAgICAgcmV0dXJu
IFVTdHJpbmcoc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTEFuY2hvckVsZW1lbnQqPihpbXBsKCkpLT5o
cmVmKCkpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIEpTRWxlbWVudDo6dG9TdHJpbmcoZXhl
Yyk7CisKKyAgICByZXR1cm4gSlNFbGVtZW50Ojp0b1N0cmluZyhleGVjKTsKIH0KIAogc3RhdGlj
IEhUTUxGb3JtRWxlbWVudCogZ2V0Rm9ybShIVE1MRWxlbWVudCogZWxlbWVudCkKQEAgLTg2Nywz
OSArNDgzLDcgQEAgdm9pZCBKU0hUTUxFbGVtZW50OjpwdXRWYWx1ZVByb3BlcnR5KEV4ZQogewog
ICAgIERPTUV4Y2VwdGlvblRyYW5zbGF0b3IgZXhjZXB0aW9uKGV4ZWMpOwogIAotICAgIC8vIENo
ZWNrIG91ciBzZXQgb2YgZ2VuZXJpYyBwcm9wZXJ0aWVzIGZpcnN0LgotICAgIEhUTUxFbGVtZW50
ICZlbGVtZW50ID0gKnN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4oaW1wbCgpKTsKLSAgICBzd2l0
Y2ggKHRva2VuKSB7Ci0gICAgICAgIGNhc2UgRWxlbWVudElkOgotICAgICAgICAgICAgZWxlbWVu
dC5zZXRJZCh2YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVjayhleGVjLCB2YWx1ZSkpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBjYXNlIEVsZW1lbnRMYW5nOgotICAgICAgICAgICAgZWxl
bWVudC5zZXRMYW5nKHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKGV4ZWMsIHZhbHVlKSk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNhc2UgRWxlbWVudERpcjoKLSAgICAgICAgICAg
IGVsZW1lbnQuc2V0RGlyKHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKGV4ZWMsIHZhbHVlKSk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNhc2UgRWxlbWVudENsYXNzTmFtZToKLSAg
ICAgICAgICAgIGVsZW1lbnQuc2V0Q2xhc3NOYW1lKHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNr
KGV4ZWMsIHZhbHVlKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNhc2UgRWxlbWVu
dElubmVySFRNTDoKLSAgICAgICAgICAgIGVsZW1lbnQuc2V0SW5uZXJIVE1MKHZhbHVlVG9TdHJp
bmdXaXRoTnVsbENoZWNrKGV4ZWMsIHZhbHVlKSwgZXhjZXB0aW9uKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgY2FzZSBFbGVtZW50SW5uZXJUZXh0OgotICAgICAgICAgICAgZWxlbWVu
dC5zZXRJbm5lclRleHQodmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2soZXhlYywgdmFsdWUpLCBl
eGNlcHRpb24pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjYXNlIEVsZW1lbnRPdXRl
ckhUTUw6Ci0gICAgICAgICAgICBlbGVtZW50LnNldE91dGVySFRNTCh2YWx1ZVRvU3RyaW5nV2l0
aE51bGxDaGVjayhleGVjLCB2YWx1ZSksIGV4Y2VwdGlvbik7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIGNhc2UgRWxlbWVudE91dGVyVGV4dDoKLSAgICAgICAgICAgIGVsZW1lbnQuc2V0
T3V0ZXJUZXh0KHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKGV4ZWMsIHZhbHVlKSwgZXhjZXB0
aW9uKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2FzZSBFbGVtZW50Q29udGVudEVk
aXRhYmxlOgotICAgICAgICAgICAgZWxlbWVudC5zZXRDb250ZW50RWRpdGFibGUodmFsdWVUb1N0
cmluZ1dpdGhOdWxsQ2hlY2soZXhlYywgdmFsdWUpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICAvLyBOb3cgY2hlY2sgZm9yIHByb3BlcnRpZXMgdGhhdCBhcHBseSB0byBhIHNw
ZWNpZmljIGVsZW1lbnQgdHlwZS4KKyAgICAvLyBDaGVjayBmb3IgcHJvcGVydGllcyB0aGF0IGFw
cGx5IHRvIGEgc3BlY2lmaWMgZWxlbWVudCB0eXBlLgogICAgIGNvbnN0IEFjY2Vzc29ycyogYWNj
ZXNzID0gYWNjZXNzb3JzKCk7CiAgICAgaWYgKGFjY2VzcyAmJiBhY2Nlc3MtPm1fc2V0dGVyKQog
ICAgICAgICByZXR1cm4gKHRoaXMtPiooYWNjZXNzLT5tX3NldHRlcikpKGV4ZWMsIHRva2VuLCB2
YWx1ZSk7CkluZGV4OiBiaW5kaW5ncy9qcy9ranNfaHRtbC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJpbmRp
bmdzL2pzL2tqc19odG1sLmgJKHJldmlzaW9uIDIxNjU0KQorKysgYmluZGluZ3MvanMva2pzX2h0
bWwuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMjUgKzM3LDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAK
ICAgY2xhc3MgSlNBYnN0cmFjdEV2ZW50TGlzdGVuZXI7CiAKLSAgS0pTX0RFRklORV9QUk9UT1RZ
UEVfV0lUSF9QUk9UT1RZUEUoSlNIVE1MRG9jdW1lbnRQcm90b3R5cGUsIFdlYkNvcmU6OkpTRG9j
dW1lbnRQcm90b3R5cGUpCi0KLSAgY2xhc3MgSlNIVE1MRG9jdW1lbnQgOiBwdWJsaWMgV2ViQ29y
ZTo6SlNEb2N1bWVudCB7Ci0gIHB1YmxpYzoKLSAgICBKU0hUTUxEb2N1bWVudChFeGVjU3RhdGUq
LCBXZWJDb3JlOjpIVE1MRG9jdW1lbnQqKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVy
dHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKLSAg
ICBKU1ZhbHVlKiBnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSosIGludCB0b2tlbikgY29uc3Q7
Ci0gICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUqLCBpbnQgYXR0ciA9IE5vbmUpOwotICAgIHZvaWQgcHV0VmFsdWVQ
cm9wZXJ0eShFeGVjU3RhdGUqLCBpbnQgdG9rZW4sIEpTVmFsdWUqLCBpbnQgLyphdHRyKi8pOwot
ICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAm
aW5mbzsgfQotICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKLSAgICBlbnVtIHsgVGl0
bGUsIFJlZmVycmVyLCBEb21haW4sIEJvZHksIExvY2F0aW9uLCBDb29raWUsCi0gICAgICAgICAg
IEltYWdlcywgQXBwbGV0cywgRW1iZWRzLCBMaW5rcywgRm9ybXMsIEFuY2hvcnMsIFNjcmlwdHMs
IEFsbCwgQ2xlYXIsIE9wZW4sIENsb3NlLAotICAgICAgICAgICBXcml0ZSwgV3JpdGVMbiwgR2V0
RWxlbWVudHNCeU5hbWUsIENhcHR1cmVFdmVudHMsIFJlbGVhc2VFdmVudHMsCi0gICAgICAgICAg
IEJnQ29sb3IsIEZnQ29sb3IsIEFsaW5rQ29sb3IsIExpbmtDb2xvciwgVmxpbmtDb2xvciwgTGFz
dE1vZGlmaWVkLCBIZWlnaHQsIFdpZHRoLCBEaXIsIERlc2lnbk1vZGUgfTsKLSAgcHJpdmF0ZToK
LSAgICBzdGF0aWMgSlNWYWx1ZSogbmFtZWRJdGVtR2V0dGVyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotICB9OwotCiAgIC8v
IFRoZSBpbmhlcml0YW5jZSBjaGFpbiBmb3IgSlNIVE1MRWxlbWVudCBpcyBhIGJpdCBkaWZmZXJl
bnQgZnJvbSBvdGhlcgogICAvLyBjbGFzc2VzIHRoYXQgYXJlICJoYWxmLWF1dG9nZW5lcmF0ZWQi
LiBCZWNhdXNlIHdlIHJldHVybiBkaWZmZXJlbnQgQ2xhc3NJbmZvIHN0cnVjdHMKICAgLy8gZGVw
ZW5kaW5nIG9uIHRoZSB0eXBlIG9mIGVsZW1lbnQsIHdlIGluaGVyaXQgSlNIVE1MRWxlbWVudCBm
cm9tIFdlYkNvcmU6OkpTSFRNTEVsZW1lbnQKQEAgLTk5LDEwICs4MCw2IEBAIG5hbWVzcGFjZSBL
SlMgewogICAgICAgICAgICBPYmplY3ROYW1lLCBPYmplY3RTdGFuZGJ5LCBPYmplY3RUYWJJbmRl
eCwgT2JqZWN0VXNlTWFwLCBPYmplY3RXaWR0aCwgT2JqZWN0Q29udGVudERvY3VtZW50LCBPYmpl
Y3RHZXRTVkdEb2N1bWVudCwKICAgICAgICAgICAgRW1iZWRBbGlnbiwgRW1iZWRIZWlnaHQsIEVt
YmVkTmFtZSwgRW1iZWRTcmMsIEVtYmVkVHlwZSwgRW1iZWRXaWR0aCwgRW1iZWRHZXRTVkdEb2N1
bWVudCwKICAgICAgICAgICAgRnJhbWVTZXRDb2xzLCBGcmFtZVNldFJvd3MsIAotICAgICAgICAg
ICBHZXRDb250ZXh0LAotICAgICAgICAgICBFbGVtZW50SW5uZXJIVE1MLCBFbGVtZW50SWQsIEVs
ZW1lbnREaXIsIEVsZW1lbnRMYW5nLAotICAgICAgICAgICBFbGVtZW50Q2xhc3NOYW1lLCBFbGVt
ZW50SW5uZXJUZXh0LCBFbGVtZW50Q2hpbGRyZW4sIEVsZW1lbnRDb250ZW50RWRpdGFibGUsCi0g
ICAgICAgICAgIEVsZW1lbnRJc0NvbnRlbnRFZGl0YWJsZSwgRWxlbWVudE91dGVySFRNTCwgRWxl
bWVudE91dGVyVGV4dAogICAgIH07CiAgIHByaXZhdGU6CiAgICAgc3RhdGljIEpTVmFsdWUqIGZy
YW1lc2V0TmFtZUdldHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IElkZW50aWZpZXIm
LCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKSW5kZXg6IGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpT
LnBtCShyZXZpc2lvbiAyMTY1NCkKKysrIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpT
LnBtCSh3b3JraW5nIGNvcHkpCkBAIC0zLDcgKzMsNyBAQAogIyBDb3B5cmlnaHQgKEMpIDIwMDYg
QW5kZXJzIENhcmxzc29uIDxhbmRlcnNjYUBtYWMuY29tPgogIyBDb3B5cmlnaHQgKEMpIDIwMDYs
IDIwMDcgU2FtdWVsIFdlaW5pZyA8c2FtQHdlYmtpdC5vcmc+CiAjIENvcHlyaWdodCAoQykgMjAw
NiBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEB3ZWJraXQub3JnPgotIyBDb3B5cmlnaHQgKEMpIDIw
MDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyMgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IEtERSBwcm9qZWN0CiAjCkBAIC01NzIsOCArNTcyLDEwIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVu
dGF0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFdLX3VjZmly
c3QoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1lKSAuICJBdHRyTnVtIik7CiAgICAgICAgICAg
ICBwdXNoKEBoYXNoVmFsdWVzLCAkdmFsdWUpOwogCi0gICAgICAgICAgICBteSAkc3BlY2lhbCA9
ICJEb250RGVsZXRlIjsKLSAgICAgICAgICAgICRzcGVjaWFsIC49ICJ8UmVhZE9ubHkiIGlmICgk
YXR0cmlidXRlLT50eXBlID1+IC9yZWFkb25seS8pOworICAgICAgICAgICAgbXkgQHNwZWNpYWxz
ID0gKCk7CisgICAgICAgICAgICBwdXNoKEBzcGVjaWFscywgIkRvbnREZWxldGUiKSB1bmxlc3Mg
JGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRGVsZXRhdGFibGUi
fTsKKyAgICAgICAgICAgIHB1c2goQHNwZWNpYWxzLCAiUmVhZE9ubHkiKSBpZiAkYXR0cmlidXRl
LT50eXBlID1+IC9yZWFkb25seS87CisgICAgICAgICAgICBteSAkc3BlY2lhbCA9IGpvaW4oInwi
LCBAc3BlY2lhbHMpOwogICAgICAgICAgICAgcHVzaChAaGFzaFNwZWNpYWxzLCAkc3BlY2lhbCk7
CiAKICAgICAgICAgICAgIG15ICRudW1QYXJhbWV0ZXJzID0gIjAiOwpAQCAtNjUyLDcgKzY1NCwx
MCBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICBteSAkdmFsdWUgPSAkY2xh
c3NOYW1lIC4gIjo6IiAuIFdLX3VjZmlyc3QoJG5hbWUpIC4gIkZ1bmNOdW0iOwogICAgICAgICBw
dXNoKEBoYXNoVmFsdWVzLCAkdmFsdWUpOwogCi0gICAgICAgIG15ICRzcGVjaWFsID0gIkRvbnRE
ZWxldGV8RnVuY3Rpb24iOworICAgICAgICBteSBAc3BlY2lhbHMgPSAoKTsKKyAgICAgICAgcHVz
aChAc3BlY2lhbHMsICJEb250RGVsZXRlIikgdW5sZXNzICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiRGVsZXRhdGFibGUifTsKKyAgICAgICAgcHVzaChAc3BlY2lh
bHMsICJGdW5jdGlvbiIpOworICAgICAgICBteSAkc3BlY2lhbCA9IGpvaW4oInwiLCBAc3BlY2lh
bHMpOwogICAgICAgICBwdXNoKEBoYXNoU3BlY2lhbHMsICRzcGVjaWFsKTsKIAogICAgICAgICBt
eSAkbnVtUGFyYW1ldGVycyA9IEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfTsKQEAgLTc4NSwxMiAr
NzkwLDYgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIH1cbiIpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCRkYXRhTm9k
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ikhhc05hbWVHZXR0ZXIifSB8fCAkZGF0YU5vZGUtPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyJIYXNPdmVycmlkaW5nTmFtZUdldHRlciJ9KSB7Ci0gICAgICAg
ICAgICAjIGlmIGl0IGhhcyBhIHByb3RvdHlwZSwgd2UgbmVlZCB0byBjaGVjayB0aGF0IGZpcnN0
IHRvbwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKHByb3RvdHlwZSgp
LT5pc09iamVjdCgpICYmIHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4ocHJvdG90eXBlKCkpLT5oYXNQ
cm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUpKVxuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICAgICAgcmV0dXJuIGZhbHNlO1xuIik7Ci0gICAgICAgIH0KLQogICAgICAg
ICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSGFzSW5kZXhHZXR0ZXIifSkg
ewogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYm9vbCBvaztcbiIpOwogICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgdW5zaWduZWQgdSA9IHByb3BlcnR5TmFt
ZS50b1VJbnQzMigmb2spO1xuIik7CkBAIC0xNDIyLDggKzE0MjEsMTMgQEAgc3ViIE5hdGl2ZVRv
SlNWYWx1ZQogICAgIH0gZWxzaWYgKCR0eXBlIGVxICJFdmVudCIpIHsKICAgICAgICAgJGltcGxJ
bmNsdWRlc3sia2pzX2V2ZW50cy5oIn0gPSAxOwogICAgICAgICAkaW1wbEluY2x1ZGVzeyJFdmVu
dC5oIn0gPSAxOwotICAgIH0gZWxzaWYgKCR0eXBlIGVxICJOb2RlTGlzdCIgb3IgJHR5cGUgZXEg
Ik5hbWVkTm9kZU1hcCIpIHsKKyAgICB9IGVsc2lmICgkdHlwZSBlcSAiTm9kZUxpc3QiKSB7Cisg
ICAgICAgICRpbXBsSW5jbHVkZXN7Imtqc19kb20uaCJ9ID0gMTsKKyAgICAgICAgJGltcGxJbmNs
dWRlc3siTm9kZUxpc3QuaCJ9ID0gMTsKKyAgICAgICAgJGltcGxJbmNsdWRlc3siTmFtZU5vZGVM
aXN0LmgifSA9IDE7CisgICAgfSBlbHNpZiAoJHR5cGUgZXEgIk5hbWVkTm9kZU1hcCIpIHsKICAg
ICAgICAgJGltcGxJbmNsdWRlc3sia2pzX2RvbS5oIn0gPSAxOworICAgICAgICAkaW1wbEluY2x1
ZGVzeyJOYW1lZE5vZGVNYXAuaCJ9ID0gMTsKICAgICB9IGVsc2lmICgkdHlwZSBlcSAiQ1NTU3R5
bGVTaGVldCIgb3IgJHR5cGUgZXEgIlN0eWxlU2hlZXQiIG9yICR0eXBlIGVxICJNZWRpYUxpc3Qi
KSB7CiAgICAgICAgICRpbXBsSW5jbHVkZXN7IkNTU1N0eWxlU2hlZXQuaCJ9ID0gMTsKICAgICAg
ICAgJGltcGxJbmNsdWRlc3siTWVkaWFMaXN0LmgifSA9IDE7CkluZGV4OiBkb20vRG9jdW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIGRvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDIxNjU0KQorKysg
ZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMyOSw2ICszMzI5LDEyIEBAIFBh
c3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IERvY3VtZW50OjplbWIKICAgICByZXR1cm4gbmV3IEhU
TUxDb2xsZWN0aW9uKHRoaXMsIEhUTUxDb2xsZWN0aW9uOjpEb2NFbWJlZHMpOwogfQogCitQYXNz
UmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBEb2N1bWVudDo6cGx1Z2lucygpCit7CisgICAgLy8gVGhp
cyBpcyBhbiBhbGlhcyBmb3IgZW1iZWRzKCkgcmVxdWlyZWQgZm9yIHRoZSBKUyBET00gYmluZGlu
Z3MuCisgICAgcmV0dXJuIG5ldyBIVE1MQ29sbGVjdGlvbih0aGlzLCBIVE1MQ29sbGVjdGlvbjo6
RG9jRW1iZWRzKTsKK30KKwogUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gRG9jdW1lbnQ6Om9i
amVjdHMoKQogewogICAgIHJldHVybiBuZXcgSFRNTENvbGxlY3Rpb24odGhpcywgSFRNTENvbGxl
Y3Rpb246OkRvY09iamVjdHMpOwpJbmRleDogZG9tL0RvY3VtZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
ZG9tL0RvY3VtZW50LmgJKHJldmlzaW9uIDIxNjU0KQorKysgZG9tL0RvY3VtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTIwNyw2ICsyMDcsNyBAQCBwdWJsaWM6CiAKICAgICBQYXNzUmVmUHRyPEhU
TUxDb2xsZWN0aW9uPiBpbWFnZXMoKTsKICAgICBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBl
bWJlZHMoKTsKKyAgICBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBwbHVnaW5zKCk7IC8vIGFu
IGFsaWFzIGZvciBlbWJlZHMoKSByZXF1aXJlZCBmb3IgdGhlIEpTIERPTSBiaW5kaW5ncy4KICAg
ICBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBhcHBsZXRzKCk7CiAgICAgUGFzc1JlZlB0cjxI
VE1MQ29sbGVjdGlvbj4gbGlua3MoKTsKICAgICBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBm
b3JtcygpOwpJbmRleDogaHRtbC9IVE1MRG9jdW1lbnQuaWRsCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGh0bWwv
SFRNTERvY3VtZW50LmlkbAkocmV2aXNpb24gMjE2NTQpCisrKyBodG1sL0hUTUxEb2N1bWVudC5p
ZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVl
bCBXZWluaWcgPHNhbS53ZWluaWdAZ21haWwuY29tPgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIwLDExICsy
MCwxNCBAQAogCiBtb2R1bGUgaHRtbCB7CiAKLSAgICBpbnRlcmZhY2UgW0xlZ2FjeVBhcmVudD1L
SlM6OkpTSFRNTERvY3VtZW50LCBHZW5lcmF0ZUNvbnN0cnVjdG9yXSBIVE1MRG9jdW1lbnQgOiBE
b2N1bWVudCB7Ci0jaWYgIWRlZmluZWQoTEFOR1VBR0VfSkFWQVNDUklQVCkKKyAgICBpbnRlcmZh
Y2UgW0dlbmVyYXRlQ29uc3RydWN0b3IsIEhhc092ZXJyaWRpbmdOYW1lR2V0dGVyXSBIVE1MRG9j
dW1lbnQgOiBEb2N1bWVudCB7CiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBbQ29udmVydE51
bGxUb051bGxTdHJpbmddIERPTVN0cmluZyB0aXRsZTsKICAgICAgICAgcmVhZG9ubHkgYXR0cmli
dXRlIERPTVN0cmluZyByZWZlcnJlcjsKKyNpZiBkZWZpbmVkKExBTkdVQUdFX0pBVkFTQ1JJUFQp
CisgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgZG9tYWluOworI2Vsc2UKICAg
ICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBkb21haW47CisjZW5kaWYKICAgICAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBVUkw7CiAgICAgICAgICAgICAgICAgCiAg
ICAgICAgIC8vIEZJWE1FOiB0aGUgRE9NIHNwZWMgZG9lcyBOT1QgaGF2ZSB0aGlzIGF0dHJpYnV0
ZQpAQCAtNDMsMTUgKzQ2LDQzIEBAIG1vZHVsZSBodG1sIHsKICAgICAgICAgICAgICAgICAgYXR0
cmlidXRlIFtDb252ZXJ0TnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIGNvb2tpZQogICAgICAg
ICAgICAgICAgICAgICAgLypzZXR0ZXIgcmFpc2VzIChET01FeGNlcHRpb24pKi87CiAKLSAgICAg
ICAgdm9pZCAgICAgICAgICAgICAgIG9wZW4oKTsKLSAgICAgICAgdm9pZCAgICAgICAgICAgICAg
IGNsb3NlKCk7Ci0gICAgICAgIHZvaWQgICAgICAgICAgICAgICB3cml0ZShpbiBET01TdHJpbmcg
dGV4dCk7Ci0gICAgICAgIHZvaWQgICAgICAgICAgICAgICB3cml0ZWxuKGluIERPTVN0cmluZyB0
ZXh0KTsKLSAgICAgICAgTm9kZUxpc3QgICAgICAgICAgIGdldEVsZW1lbnRzQnlOYW1lKGluIERP
TVN0cmluZyBlbGVtZW50TmFtZSk7CisgICAgICAgIFtDdXN0b21dIHZvaWQgb3BlbigpOworICAg
ICAgICB2b2lkIGNsb3NlKCk7CisgICAgICAgIFtDdXN0b21dIHZvaWQgd3JpdGUoaW4gRE9NU3Ry
aW5nIHRleHQpOworICAgICAgICBbQ3VzdG9tXSB2b2lkIHdyaXRlbG4oaW4gRE9NU3RyaW5nIHRl
eHQpOworICAgICAgICBOb2RlTGlzdCBnZXRFbGVtZW50c0J5TmFtZShpbiBET01TdHJpbmcgZWxl
bWVudE5hbWUpOworCisgICAgICAgIC8vIEV4dGVuc2lvbnMKKyAgICAgICAgRWxlbWVudCBnZXRF
bGVtZW50QnlJZChpbiBET01TdHJpbmcgZWxlbWVudElkKTsKKworICAgICAgICByZWFkb25seSBh
dHRyaWJ1dGUgSFRNTENvbGxlY3Rpb24gZW1iZWRzOworICAgICAgICByZWFkb25seSBhdHRyaWJ1
dGUgSFRNTENvbGxlY3Rpb24gcGx1Z2luczsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIEhU
TUxDb2xsZWN0aW9uIHNjcmlwdHM7CiAKLSAgICAgICAgLy8gbm9uLXN0YW5kYXJkCisgICAgICAg
IHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgbGFzdE1vZGlmaWVkOwogCi0gICAgICAgIEVs
ZW1lbnQgICAgICAgICAgICBnZXRFbGVtZW50QnlJZChpbiBET01TdHJpbmcgZWxlbWVudElkKTsK
KyNpZiBkZWZpbmVkKExBTkdVQUdFX0pBVkFTQ1JJUFQpCisgICAgICAgIC8vIEZJWE1FOiBUaGVz
ZSBzaG91bGQgZXZlbnR1YWxseSBiZSBhdmFpbGFibGUgKGlmIHRoZXkgYXJlIHdhbnRlZCkgZm9y
IGFsbCBsYW5ndWFnZXMuCisKKyAgICAgICAgICAgICAgICAgYXR0cmlidXRlIFtDdXN0b20sIERl
bGV0YWJsZV0gSFRNTENvbGxlY3Rpb24gYWxsOworICAgICAgICAKKyAgICAgICAgW0N1c3RvbV0g
dm9pZCBjbGVhcigpOworICAgICAgICBbQ3VzdG9tXSB2b2lkIGNhcHR1cmVFdmVudHMoKTsKKyAg
ICAgICAgW0N1c3RvbV0gdm9pZCByZWxlYXNlRXZlbnRzKCk7CisKKyAgICAgICAgICAgICAgICAg
YXR0cmlidXRlIFtDdXN0b21dIFdpbmRvdyBsb2NhdGlvbjsKKworICAgICAgICByZWFkb25seSBh
dHRyaWJ1dGUgW0N1c3RvbV0gbG9uZyB3aWR0aDsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRl
IFtDdXN0b21dIGxvbmcgaGVpZ2h0OworICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgW0N1c3Rv
bSwgQ29udmVydE51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyBkaXI7CisgICAgICAgICAgICAg
ICAgIGF0dHJpYnV0ZSBbQ3VzdG9tLCBDb252ZXJ0TnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5n
IGRlc2lnbk1vZGU7CisKKyAgICAgICAgLy8gRGVwcmVjYXRlZCBhdHRyaWJ1dGVzCisgICAgICAg
ICAgICAgICAgIGF0dHJpYnV0ZSBbQ3VzdG9tLCBDb252ZXJ0TnVsbFRvTnVsbFN0cmluZ10gRE9N
U3RyaW5nIGJnQ29sb3I7CisgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBbQ3VzdG9tLCBDb252
ZXJ0TnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIGZnQ29sb3I7CisgICAgICAgICAgICAgICAg
IGF0dHJpYnV0ZSBbQ3VzdG9tLCBDb252ZXJ0TnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIGFs
aW5rQ29sb3I7CisgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBbQ3VzdG9tLCBDb252ZXJ0TnVs
bFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIGxpbmtDb2xvcjsKKyAgICAgICAgICAgICAgICAgYXR0
cmlidXRlIFtDdXN0b20sIENvbnZlcnROdWxsVG9OdWxsU3RyaW5nXSBET01TdHJpbmcgdmxpbmtD
b2xvcjsKICNlbmRpZgogICAgIH07CiAKSW5kZXg6IGh0bWwvSFRNTEVsZW1lbnQuaWRsCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGh0bWwvSFRNTEVsZW1lbnQuaWRsCShyZXZpc2lvbiAyMTY1NCkKKysrIGh0bWwv
SFRNTEVsZW1lbnQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAy
MDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAo
QykgMjAwNiBTYW11ZWwgV2VpbmlnIDxzYW0ud2VpbmlnQGdtYWlsLmNvbT4KICAqCiAgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CkBAIC0yMSwxNiArMjEsMTUgQEAKIG1vZHVsZSBodG1sIHsKIAogICAgIGludGVyZmFjZSBbR2Vu
ZXJhdGVDb25zdHJ1Y3Rvcl0gSFRNTEVsZW1lbnQgOiBFbGVtZW50IHsKLSAgICAgICAgICAgICAg
ICAgYXR0cmlidXRlIFtDb252ZXJ0TnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIHRpdGxlOwot
Ci0jaWYgIWRlZmluZWQoTEFOR1VBR0VfSkFWQVNDUklQVCkKKyAgICAgICAgICAgICAgICAgLy8g
aWh0LmNvbSByZWxpZXMgb24gdGhpcyB2YWx1ZSBiZWluZyAiIiB3aGVuIG5vIGlkIGlzIHByZXNl
bnQuIE90aGVyIGJyb3dzZXJzIGRvIHRoaXMgYXMgd2VsbC4KKyAgICAgICAgICAgICAgICAgLy8g
U28gd2UgdXNlIGRvbid0IGNvbnZlcnQgbnVsbCB0byBKUyBudWxsLgogICAgICAgICAgICAgICAg
ICBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsVG9OdWxsU3RyaW5nXSBET01TdHJpbmcgaWQ7CisgICAg
ICAgICAgICAgICAgIGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJpbmddIERPTVN0cmlu
ZyB0aXRsZTsKICAgICAgICAgICAgICAgICAgYXR0cmlidXRlIFtDb252ZXJ0TnVsbFRvTnVsbFN0
cmluZ10gRE9NU3RyaW5nIGxhbmc7CiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBbQ29udmVy
dE51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyBkaXI7CiAgICAgICAgICAgICAgICAgIGF0dHJp
YnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyBjbGFzc05hbWU7CiAKLSAg
ICAgICAgLy8gZXh0ZW5zaW9ucwotCisgICAgICAgIC8vIEV4dGVuc2lvbnMKICAgICAgICAgICAg
ICAgICAgYXR0cmlidXRlIFtDb252ZXJ0TnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIGlubmVy
SFRNTAogICAgICAgICAgICAgICAgICAgICAgc2V0dGVyIHJhaXNlcyhET01FeGNlcHRpb24pOwog
ICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsVG9OdWxsU3RyaW5nXSBET01T
dHJpbmcgaW5uZXJUZXh0CkBAIC00NSw2ICs0NCw3IEBAIG1vZHVsZSBodG1sIHsKICAgICAgICAg
ICAgICAgICAgYXR0cmlidXRlIFtDb252ZXJ0TnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIGNv
bnRlbnRFZGl0YWJsZTsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2xlYW4gaXNDb250
ZW50RWRpdGFibGU7CiAKKyNpZiBkZWZpbmVkKExBTkdVQUdFX09CSkVDVElWRV9DKQogICAgICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHRpdGxlRGlzcGxheVN0cmluZzsKICNlbmRp
ZgogICAgIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>14674</attachid>
            <date>2007-05-22 20:15:41 -0700</date>
            <delta_ts>2007-05-23 09:18:10 -0700</delta_ts>
            <desc>Just the JSHTMLElement</desc>
            <filename>autoHTMLElement.diff</filename>
            <type>text/plain</type>
            <size>8386</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMTY1NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjAgQEAKKzIwMDctMDUtMjIgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXJ0IG9u
ZSBvZiBwYXRjaCBmb3IgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM4
MzAKKyAgICAgICAgQXV0by1nZW5lcmF0ZSBKUyBET00gYmluZGluZ3MgZm9yIEhUTUxEb2N1bWVu
dCBhbmQgbW9zdCBvZiB0aGUgcmVzdAorICAgICAgICBvZiBIVE1MRWxlbWVudAorCisgICAgICAg
IC0gSnVzdCB0aGUgSFRNTEVsZW1lbnQgcGFydC4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL2tq
c19odG1sLmNwcDoKKyAgICAgICAgKEtKUzo6SlNIVE1MRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0
eSk6CisgICAgICAgIChLSlM6OkpTSFRNTEVsZW1lbnQ6OnB1dFZhbHVlUHJvcGVydHkpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL2tqc19odG1sLmg6CisgICAgICAgIChLSlM6OkpTSFRNTEVsZW1l
bnQ6Oik6CisgICAgICAgICogaHRtbC9IVE1MRWxlbWVudC5pZGw6CisKIDIwMDctMDUtMjIgIFNh
bSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtLgpJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfaHRtbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9iaW5kaW5ncy9qcy9ranNfaHRtbC5jcHAJKHJldmlzaW9uIDIxNjU0KQorKysgV2ViQ29y
ZS9iaW5kaW5ncy9qcy9ranNfaHRtbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1MCwyNCArNDUw
LDkgQEAgY29uc3QgSlNIVE1MRWxlbWVudDo6QWNjZXNzb3JzKiBKU0hUTUxFbAogfQogCiAvKgot
CiBAYmVnaW4gSlNIVE1MRWxlbWVudFByb3RvdHlwZVRhYmxlIDAKIEBlbmQKLQotQGJlZ2luIEhU
TUxFbGVtZW50VGFibGUgMTQKLSAgaWQgICAgICAgICAgICBLSlM6OkpTSFRNTEVsZW1lbnQ6OkVs
ZW1lbnRJZCAgICAgRG9udERlbGV0ZQotICBsYW5nICAgICAgICAgIEtKUzo6SlNIVE1MRWxlbWVu
dDo6RWxlbWVudExhbmcgICBEb250RGVsZXRlCi0gIGRpciAgICAgICAgICAgS0pTOjpKU0hUTUxF
bGVtZW50OjpFbGVtZW50RGlyICAgIERvbnREZWxldGUKLSMjIyBpc24ndCB0aGlzICJjbGFzcyIg
aW4gdGhlIEhUTUwgc3BlYz8KLSAgY2xhc3NOYW1lICAgICBLSlM6OkpTSFRNTEVsZW1lbnQ6OkVs
ZW1lbnRDbGFzc05hbWUgRG9udERlbGV0ZQotICBpbm5lckhUTUwgICAgIEtKUzo6SlNIVE1MRWxl
bWVudDo6RWxlbWVudElubmVySFRNTCBEb250RGVsZXRlCi0gIGlubmVyVGV4dCAgICAgS0pTOjpK
U0hUTUxFbGVtZW50OjpFbGVtZW50SW5uZXJUZXh0IERvbnREZWxldGUKLSAgb3V0ZXJIVE1MICAg
ICBLSlM6OkpTSFRNTEVsZW1lbnQ6OkVsZW1lbnRPdXRlckhUTUwgRG9udERlbGV0ZQotICBvdXRl
clRleHQgICAgIEtKUzo6SlNIVE1MRWxlbWVudDo6RWxlbWVudE91dGVyVGV4dCBEb250RGVsZXRl
Ci0jIElFIGV4dGVuc2lvbgotICBjaGlsZHJlbiAgICAgIEtKUzo6SlNIVE1MRWxlbWVudDo6RWxl
bWVudENoaWxkcmVuICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIGNvbnRlbnRFZGl0YWJsZSAgIEtK
Uzo6SlNIVE1MRWxlbWVudDo6RWxlbWVudENvbnRlbnRFZGl0YWJsZSAgRG9udERlbGV0ZQotICBp
c0NvbnRlbnRFZGl0YWJsZSBLSlM6OkpTSFRNTEVsZW1lbnQ6OkVsZW1lbnRJc0NvbnRlbnRFZGl0
YWJsZSAgRG9udERlbGV0ZXxSZWFkT25seQorQGJlZ2luIEhUTUxFbGVtZW50VGFibGUgMAogQGVu
ZAogQGJlZ2luIEhUTUxPYmplY3RFbGVtZW50VGFibGUgMjAKICAgZm9ybSAgICAgICAgICAgIEtK
Uzo6SlNIVE1MRWxlbWVudDo6T2JqZWN0Rm9ybSAgICAgICAgICAgIERvbnREZWxldGV8UmVhZE9u
bHkKQEAgLTY3MiwzNyArNjU3LDcgQEAgSlNWYWx1ZSAqSlNIVE1MRWxlbWVudDo6ZnJhbWVTZXRH
ZXR0ZXIoRQogCiBKU1ZhbHVlICpKU0hUTUxFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNT
dGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAogewotICAgIC8vIENoZWNrIG91ciBzZXQgb2Yg
Z2VuZXJpYyBwcm9wZXJ0aWVzIGZpcnN0LgotICAgIEhUTUxFbGVtZW50ICZlbGVtZW50ID0gKnN0
YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4oaW1wbCgpKTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0g
ICAgICAgIGNhc2UgRWxlbWVudElkOgotICAgICAgICAgICAgLy8gaWh0LmNvbSByZWxpZXMgb24g
dGhpcyB2YWx1ZSBiZWluZyAiIiB3aGVuIG5vIGlkIGlzIHByZXNlbnQuIE90aGVyIGJyb3dzZXJz
IGRvIHRoaXMgYXMgd2VsbC4KLSAgICAgICAgICAgIC8vIFNvIHdlIHVzZSBqc1N0cmluZygpIGlu
c3RlYWQgb2YganNTdHJpbmdPck51bGwoKSBoZXJlLgotICAgICAgICAgICAgcmV0dXJuIGpzU3Ry
aW5nKGVsZW1lbnQuaWQoKSk7Ci0gICAgICAgIGNhc2UgRWxlbWVudExhbmc6Ci0gICAgICAgICAg
ICByZXR1cm4ganNTdHJpbmcoZWxlbWVudC5sYW5nKCkpOwotICAgICAgICBjYXNlIEVsZW1lbnRE
aXI6Ci0gICAgICAgICAgICByZXR1cm4ganNTdHJpbmcoZWxlbWVudC5kaXIoKSk7Ci0gICAgICAg
IGNhc2UgRWxlbWVudENsYXNzTmFtZToKLSAgICAgICAgICAgIHJldHVybiBqc1N0cmluZyhlbGVt
ZW50LmNsYXNzTmFtZSgpKTsKLSAgICAgICAgY2FzZSBFbGVtZW50SW5uZXJIVE1MOgotICAgICAg
ICAgICAgcmV0dXJuIGpzU3RyaW5nKGVsZW1lbnQuaW5uZXJIVE1MKCkpOwotICAgICAgICBjYXNl
IEVsZW1lbnRJbm5lclRleHQ6Ci0gICAgICAgICAgICBpbXBsKCktPmRvY3VtZW50KCktPnVwZGF0
ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwotICAgICAgICAgICAgcmV0dXJuIGpz
U3RyaW5nKGVsZW1lbnQuaW5uZXJUZXh0KCkpOwotICAgICAgICBjYXNlIEVsZW1lbnRPdXRlckhU
TUw6Ci0gICAgICAgICAgICByZXR1cm4ganNTdHJpbmcoZWxlbWVudC5vdXRlckhUTUwoKSk7Ci0g
ICAgICAgIGNhc2UgRWxlbWVudE91dGVyVGV4dDoKLSAgICAgICAgICAgIHJldHVybiBqc1N0cmlu
ZyhlbGVtZW50Lm91dGVyVGV4dCgpKTsKLSAgICAgICAgY2FzZSBFbGVtZW50Q2hpbGRyZW46Ci0g
ICAgICAgICAgICByZXR1cm4gZ2V0SFRNTENvbGxlY3Rpb24oZXhlYywgZWxlbWVudC5jaGlsZHJl
bigpLmdldCgpKTsKLSAgICAgICAgY2FzZSBFbGVtZW50Q29udGVudEVkaXRhYmxlOgotICAgICAg
ICAgICAgcmV0dXJuIGpzU3RyaW5nKGVsZW1lbnQuY29udGVudEVkaXRhYmxlKCkpOwotICAgICAg
ICBjYXNlIEVsZW1lbnRJc0NvbnRlbnRFZGl0YWJsZToKLSAgICAgICAgICAgIHJldHVybiBqc0Jv
b2xlYW4oZWxlbWVudC5pc0NvbnRlbnRFZGl0YWJsZSgpKTsKLSAgICB9Ci0KLSAgICAvLyBOb3cg
Y2hlY2sgdGhlIHByb3BlcnRpZXMgc3BlY2lmaWMgdG8gb3VyIGVsZW1lbnQgdHlwZS4KKyAgICAv
LyBDaGVjayB0aGUgcHJvcGVydGllcyBzcGVjaWZpYyB0byBvdXIgZWxlbWVudCB0eXBlLgogICAg
IGNvbnN0IEFjY2Vzc29ycyogYWNjZXNzID0gYWNjZXNzb3JzKCk7CiAgICAgaWYgKGFjY2VzcyAm
JiBhY2Nlc3MtPm1fZ2V0dGVyKQogICAgICAgICByZXR1cm4gKHRoaXMtPiooYWNjZXNzLT5tX2dl
dHRlcikpKGV4ZWMsIHRva2VuKTsKQEAgLTg2NSw0MSArODIwLDcgQEAgdm9pZCBKU0hUTUxFbGVt
ZW50OjpmcmFtZVNldFNldHRlcihFeGVjUwogCiB2b2lkIEpTSFRNTEVsZW1lbnQ6OnB1dFZhbHVl
UHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4sIEpTVmFsdWUgKnZhbHVlLCBpbnQp
CiB7Ci0gICAgRE9NRXhjZXB0aW9uVHJhbnNsYXRvciBleGNlcHRpb24oZXhlYyk7Ci0gCi0gICAg
Ly8gQ2hlY2sgb3VyIHNldCBvZiBnZW5lcmljIHByb3BlcnRpZXMgZmlyc3QuCi0gICAgSFRNTEVs
ZW1lbnQgJmVsZW1lbnQgPSAqc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihpbXBsKCkpOwotICAg
IHN3aXRjaCAodG9rZW4pIHsKLSAgICAgICAgY2FzZSBFbGVtZW50SWQ6Ci0gICAgICAgICAgICBl
bGVtZW50LnNldElkKHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKGV4ZWMsIHZhbHVlKSk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNhc2UgRWxlbWVudExhbmc6Ci0gICAgICAgICAg
ICBlbGVtZW50LnNldExhbmcodmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2soZXhlYywgdmFsdWUp
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2FzZSBFbGVtZW50RGlyOgotICAgICAg
ICAgICAgZWxlbWVudC5zZXREaXIodmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2soZXhlYywgdmFs
dWUpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2FzZSBFbGVtZW50Q2xhc3NOYW1l
OgotICAgICAgICAgICAgZWxlbWVudC5zZXRDbGFzc05hbWUodmFsdWVUb1N0cmluZ1dpdGhOdWxs
Q2hlY2soZXhlYywgdmFsdWUpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2FzZSBF
bGVtZW50SW5uZXJIVE1MOgotICAgICAgICAgICAgZWxlbWVudC5zZXRJbm5lckhUTUwodmFsdWVU
b1N0cmluZ1dpdGhOdWxsQ2hlY2soZXhlYywgdmFsdWUpLCBleGNlcHRpb24pOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBjYXNlIEVsZW1lbnRJbm5lclRleHQ6Ci0gICAgICAgICAgICBl
bGVtZW50LnNldElubmVyVGV4dCh2YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVjayhleGVjLCB2YWx1
ZSksIGV4Y2VwdGlvbik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNhc2UgRWxlbWVu
dE91dGVySFRNTDoKLSAgICAgICAgICAgIGVsZW1lbnQuc2V0T3V0ZXJIVE1MKHZhbHVlVG9TdHJp
bmdXaXRoTnVsbENoZWNrKGV4ZWMsIHZhbHVlKSwgZXhjZXB0aW9uKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgY2FzZSBFbGVtZW50T3V0ZXJUZXh0OgotICAgICAgICAgICAgZWxlbWVu
dC5zZXRPdXRlclRleHQodmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2soZXhlYywgdmFsdWUpLCBl
eGNlcHRpb24pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjYXNlIEVsZW1lbnRDb250
ZW50RWRpdGFibGU6Ci0gICAgICAgICAgICBlbGVtZW50LnNldENvbnRlbnRFZGl0YWJsZSh2YWx1
ZVRvU3RyaW5nV2l0aE51bGxDaGVjayhleGVjLCB2YWx1ZSkpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIC8vIE5vdyBjaGVjayBmb3IgcHJvcGVydGllcyB0aGF0IGFwcGx5IHRv
IGEgc3BlY2lmaWMgZWxlbWVudCB0eXBlLgorICAgIC8vIENoZWNrIGZvciBwcm9wZXJ0aWVzIHRo
YXQgYXBwbHkgdG8gYSBzcGVjaWZpYyBlbGVtZW50IHR5cGUuCiAgICAgY29uc3QgQWNjZXNzb3Jz
KiBhY2Nlc3MgPSBhY2Nlc3NvcnMoKTsKICAgICBpZiAoYWNjZXNzICYmIGFjY2Vzcy0+bV9zZXR0
ZXIpCiAgICAgICAgIHJldHVybiAodGhpcy0+KihhY2Nlc3MtPm1fc2V0dGVyKSkoZXhlYywgdG9r
ZW4sIHZhbHVlKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMva2pzX2h0bWwuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19odG1sLmgJKHJldmlzaW9uIDIxNjU0KQor
KysgV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfaHRtbC5oCSh3b3JraW5nIGNvcHkpCkBAIC05OCwx
MSArOTgsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgICAgT2JqZWN0RGVjbGFyZSwgT2Jq
ZWN0Rm9ybSwgT2JqZWN0Q29kZUJhc2UsIE9iamVjdENvZGVUeXBlLCBPYmplY3REYXRhLAogICAg
ICAgICAgICBPYmplY3ROYW1lLCBPYmplY3RTdGFuZGJ5LCBPYmplY3RUYWJJbmRleCwgT2JqZWN0
VXNlTWFwLCBPYmplY3RXaWR0aCwgT2JqZWN0Q29udGVudERvY3VtZW50LCBPYmplY3RHZXRTVkdE
b2N1bWVudCwKICAgICAgICAgICAgRW1iZWRBbGlnbiwgRW1iZWRIZWlnaHQsIEVtYmVkTmFtZSwg
RW1iZWRTcmMsIEVtYmVkVHlwZSwgRW1iZWRXaWR0aCwgRW1iZWRHZXRTVkdEb2N1bWVudCwKLSAg
ICAgICAgICAgRnJhbWVTZXRDb2xzLCBGcmFtZVNldFJvd3MsIAotICAgICAgICAgICBHZXRDb250
ZXh0LAotICAgICAgICAgICBFbGVtZW50SW5uZXJIVE1MLCBFbGVtZW50SWQsIEVsZW1lbnREaXIs
IEVsZW1lbnRMYW5nLAotICAgICAgICAgICBFbGVtZW50Q2xhc3NOYW1lLCBFbGVtZW50SW5uZXJU
ZXh0LCBFbGVtZW50Q2hpbGRyZW4sIEVsZW1lbnRDb250ZW50RWRpdGFibGUsCi0gICAgICAgICAg
IEVsZW1lbnRJc0NvbnRlbnRFZGl0YWJsZSwgRWxlbWVudE91dGVySFRNTCwgRWxlbWVudE91dGVy
VGV4dAorICAgICAgICAgICBGcmFtZVNldENvbHMsIEZyYW1lU2V0Um93cwogICAgIH07CiAgIHBy
aXZhdGU6CiAgICAgc3RhdGljIEpTVmFsdWUqIGZyYW1lc2V0TmFtZUdldHRlcihFeGVjU3RhdGUq
LCBKU09iamVjdCosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKSW5k
ZXg6IFdlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
dG1sL0hUTUxFbGVtZW50LmlkbAkocmV2aXNpb24gMjE2NTQpCisrKyBXZWJDb3JlL2h0bWwvSFRN
TEVsZW1lbnQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA2
LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykg
MjAwNiBTYW11ZWwgV2VpbmlnIDxzYW0ud2VpbmlnQGdtYWlsLmNvbT4KICAqCiAgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBA
IC0yMSwxNiArMjEsMTUgQEAKIG1vZHVsZSBodG1sIHsKIAogICAgIGludGVyZmFjZSBbR2VuZXJh
dGVDb25zdHJ1Y3Rvcl0gSFRNTEVsZW1lbnQgOiBFbGVtZW50IHsKLSAgICAgICAgICAgICAgICAg
YXR0cmlidXRlIFtDb252ZXJ0TnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIHRpdGxlOwotCi0j
aWYgIWRlZmluZWQoTEFOR1VBR0VfSkFWQVNDUklQVCkKKyAgICAgICAgICAgICAgICAgLy8gaWh0
LmNvbSByZWxpZXMgb24gdGhpcyB2YWx1ZSBiZWluZyAiIiB3aGVuIG5vIGlkIGlzIHByZXNlbnQu
IE90aGVyIGJyb3dzZXJzIGRvIHRoaXMgYXMgd2VsbC4KKyAgICAgICAgICAgICAgICAgLy8gU28g
d2UgdXNlIGRvbid0IGNvbnZlcnQgbnVsbCB0byBKUyBudWxsLgogICAgICAgICAgICAgICAgICBh
dHRyaWJ1dGUgW0NvbnZlcnROdWxsVG9OdWxsU3RyaW5nXSBET01TdHJpbmcgaWQ7CisgICAgICAg
ICAgICAgICAgIGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyB0
aXRsZTsKICAgICAgICAgICAgICAgICAgYXR0cmlidXRlIFtDb252ZXJ0TnVsbFRvTnVsbFN0cmlu
Z10gRE9NU3RyaW5nIGxhbmc7CiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBbQ29udmVydE51
bGxUb051bGxTdHJpbmddIERPTVN0cmluZyBkaXI7CiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0
ZSBbQ29udmVydE51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyBjbGFzc05hbWU7CiAKLSAgICAg
ICAgLy8gZXh0ZW5zaW9ucwotCisgICAgICAgIC8vIEV4dGVuc2lvbnMKICAgICAgICAgICAgICAg
ICAgYXR0cmlidXRlIFtDb252ZXJ0TnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIGlubmVySFRN
TAogICAgICAgICAgICAgICAgICAgICAgc2V0dGVyIHJhaXNlcyhET01FeGNlcHRpb24pOwogICAg
ICAgICAgICAgICAgICBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsVG9OdWxsU3RyaW5nXSBET01TdHJp
bmcgaW5uZXJUZXh0CkBAIC00NSw2ICs0NCw3IEBAIG1vZHVsZSBodG1sIHsKICAgICAgICAgICAg
ICAgICAgYXR0cmlidXRlIFtDb252ZXJ0TnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIGNvbnRl
bnRFZGl0YWJsZTsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2xlYW4gaXNDb250ZW50
RWRpdGFibGU7CiAKKyNpZiBkZWZpbmVkKExBTkdVQUdFX09CSkVDVElWRV9DKQogICAgICAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHRpdGxlRGlzcGxheVN0cmluZzsKICNlbmRpZgog
ICAgIH07Cg==
</data>
<flag name="review"
          id="6028"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>14675</attachid>
            <date>2007-05-22 20:57:15 -0700</date>
            <delta_ts>2007-05-23 11:43:47 -0700</delta_ts>
            <desc>Just the JSHTMLDocument</desc>
            <filename>autoHTMLDocument.diff</filename>
            <type>text/plain</type>
            <size>46064</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMTY1NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTkgQEAKKzIwMDctMDUtMjIgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXJ0IHR3
byBvZiBwYXRjaCBmb3IgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM4
MzAKKyAgICAgICAgQXV0by1nZW5lcmF0ZSBKUyBET00gYmluZGluZ3MgZm9yIEhUTUxEb2N1bWVu
dCBhbmQgbW9zdCBvZiB0aGUgcmVzdAorICAgICAgICBvZiBIVE1MRWxlbWVudAorCisgICAgICAg
IC0gSnVzdCB0aGUgSFRNTERvY3VtZW50IHBhcnQuCisKKyAgICAgICAgKiBDaGFuZ2VMb2c6Cisg
ICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTERvY3VtZW50Q3VzdG9tLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxEb2N1bWVudDo6Y2FuR2V0SXRlbXNG
b3JOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTERvY3VtZW50OjpuYW1lR2V0dGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTERvY3VtZW50OjphbGwpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNIVE1MRG9jdW1lbnQ6OnNldEFsbCk6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxEb2N1
bWVudDo6bG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MRG9jdW1lbnQ6OnNldExv
Y2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTERvY3VtZW50Ojp3aWR0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpKU0hUTUxEb2N1bWVudDo6aGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6
OkpTSFRNTERvY3VtZW50OjpkaXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MRG9jdW1lbnQ6
OnNldERpcik6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxEb2N1bWVudDo6ZGVzaWduTW9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxEb2N1bWVudDo6c2V0RGVzaWduTW9kZSk6CisgICAg
ICAgIChXZWJDb3JlOjpKU0hUTUxEb2N1bWVudDo6YmdDb2xvcik6CisgICAgICAgIChXZWJDb3Jl
OjpKU0hUTUxEb2N1bWVudDo6c2V0QmdDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxE
b2N1bWVudDo6ZmdDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxEb2N1bWVudDo6c2V0
RmdDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxEb2N1bWVudDo6YWxpbmtDb2xvcik6
CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxEb2N1bWVudDo6c2V0QWxpbmtDb2xvcik6CisgICAg
ICAgIChXZWJDb3JlOjpKU0hUTUxEb2N1bWVudDo6bGlua0NvbG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTSFRNTERvY3VtZW50OjpzZXRMaW5rQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6SlNI
VE1MRG9jdW1lbnQ6OnZsaW5rQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MRG9jdW1l
bnQ6OnNldFZsaW5rQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MRG9jdW1lbnQ6Om9w
ZW4pOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVIZWxwZXIpOgorICAgICAgICAoV2ViQ29yZTo6
SlNIVE1MRG9jdW1lbnQ6OndyaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTERvY3VtZW50
Ojp3cml0ZWxuKToKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTERvY3VtZW50OjpjbGVhcik6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0hUTUxEb2N1bWVudDo6Y2FwdHVyZUV2ZW50cyk6CisgICAgICAg
IChXZWJDb3JlOjpKU0hUTUxEb2N1bWVudDo6cmVsZWFzZUV2ZW50cyk6CisgICAgICAgICogYmlu
ZGluZ3MvanMva2pzX2RvbS5jcHA6CisgICAgICAgIChLSlM6OnRvSlMpOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL2tqc19kb20uaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ranNfaHRtbC5jcHA6
CisgICAgICAgICogYmluZGluZ3MvanMva2pzX2h0bWwuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbTogQWRkIFtEZWxldGF0YWJsZV0gcHJvcGVydHkKKyAg
ICAgICAgZm9yIERvY3VtZW50LmFsbCBhbmQgZml4IEhhc092ZXJyaWRpbmdOYW1lR2V0dGVyIHRv
IGFsbG93IGNvcnJlY3QKKyAgICAgICAgcHJvdG90eXBlIGNoYWluCisgICAgICAgICogZG9tL0Rv
Y3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpwbHVnaW5zKTogYWRkcyBh
bGlhcyB0byBlbWJlZHMoKSBmb3IgYmluZGluZ3MKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoK
KyAgICAgICAgKiBodG1sL0hUTUxEb2N1bWVudC5pZGw6CisKIDIwMDctMDUtMjIgIFNhbSBXZWlu
aWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtLgpJbmRleDog
V2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUucHJvCShy
ZXZpc2lvbiAyMTY1NCkKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAg
LTI2Nyw2ICsyNjcsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBiaW5kaW5ncy9qcy9KU0N1c3RvbVhQ
YXRoTlNSZXNvbHZlci5jcHAgXAogICAgIGJpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3Bw
IFwKICAgICBiaW5kaW5ncy9qcy9KU0hUTUxBbmNob3JFbGVtZW50Q3VzdG9tLmNwcCBcCisgICAg
YmluZGluZ3MvanMvSlNIVE1MRG9jdW1lbnRDdXN0b20uY3BwIFwKICAgICBiaW5kaW5ncy9qcy9K
U0hUTUxFbGVtZW50V3JhcHBlckZhY3RvcnkuY3BwIFwKICAgICBiaW5kaW5ncy9qcy9KU0hUTUxG
b3JtRWxlbWVudEN1c3RvbS5jcHAgXAogICAgIGJpbmRpbmdzL2pzL0pTSFRNTElucHV0RWxlbWVu
dEJhc2UuY3BwIFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiAyMTY1NSkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNzc0LDYgKzI3NzQsNyBAQAogCQlCQzUxNTZG
NDBDMDNCN0RDMDA4QkIwRUUgLyogRE9NSFRNTEZyYW1lRWxlbWVudFByaXZhdGUuaCBpbiBDb3B5
IEdlbmVyYXRlZCBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJD
NTE1NkYzMEMwM0I3REMwMDhCQjBFRSAvKiBET01IVE1MRnJhbWVFbGVtZW50UHJpdmF0ZS5oICov
OyB9OwogCQlCQzUxNTc5RjBDMDNCQkQzMDA4QkIwRUUgLyogRE9NSFRNTE1hcnF1ZWVFbGVtZW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzUxNTZF
NTBDMDNCNzQxMDA4QkIwRUUgLyogRE9NSFRNTE1hcnF1ZWVFbGVtZW50LmggKi87IH07CiAJCUJD
NTE1N0REMEMwM0JDMjIwMDhCQjBFRSAvKiBET01IVE1MRnJhbWVFbGVtZW50UHJpdmF0ZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM1MTU2RjMwQzAz
QjdEQzAwOEJCMEVFIC8qIERPTUhUTUxGcmFtZUVsZW1lbnRQcml2YXRlLmggKi87IH07CisJCUJD
NTE1ODBCMEMwM0Q0MDQwMDhCQjBFRSAvKiBKU0hUTUxEb2N1bWVudEN1c3RvbS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzUxNTgwQTBDMDNENDA0
MDA4QkIwRUUgLyogSlNIVE1MRG9jdW1lbnRDdXN0b20uY3BwICovOyB9OwogCQlCQzU4OEFGMDBC
RkE2Q0Y5MDBFRTY3OUUgLyogSFRNTFBhcnNlckVycm9yQ29kZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNTg4QUVGMEJGQTZDRjkwMEVFNjc5RSAv
KiBIVE1MUGFyc2VyRXJyb3JDb2Rlcy5oICovOyB9OwogCQlCQzU4OEI0QjBCRkE3MjNDMDBFRTY3
OUUgLyogSFRNTFBhcnNlckVycm9yQ29kZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQkM1ODhCNEEwQkZBNzIzQzAwRUU2NzlFIC8qIEhUTUxQYXJz
ZXJFcnJvckNvZGVzLmNwcCAqLzsgfTsKIAkJQkM2RDZERDIwOUFGOTA2NjAwRjU5NzU5IC8qIEZv
bnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM2
RDZERDAwOUFGOTA2NjAwRjU5NzU5IC8qIEZvbnQuY3BwICovOyB9OwpAQCAtNjAxMCw2ICs2MDEx
LDcgQEAKIAkJQkM1MTU2RTYwQzAzQjc0MTAwOEJCMEVFIC8qIERPTUhUTUxNYXJxdWVlRWxlbWVu
dC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBET01IVE1MTWFy
cXVlZUVsZW1lbnQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDNTE1NkU3MEMw
M0I3NDEwMDhCQjBFRSAvKiBET01IVE1MTWFycXVlZUVsZW1lbnRJbnRlcm5hbC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NSFRNTE1hcnF1ZWVFbGVtZW50SW50ZXJuYWwu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM1MTU2RjMwQzAzQjdEQzAwOEJCMEVF
IC8qIERPTUhUTUxGcmFtZUVsZW1lbnRQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBET01IVE1MRnJhbWVFbGVtZW50UHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlCQzUxNTgwQTBDMDNENDA0MDA4QkIwRUUgLyogSlNIVE1MRG9jdW1lbnRD
dXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSFRNTERv
Y3VtZW50Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM1ODhBRUYw
QkZBNkNGOTAwRUU2NzlFIC8qIEhUTUxQYXJzZXJFcnJvckNvZGVzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBIVE1MUGFyc2VyRXJyb3JDb2Rlcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlCQzU4OEI0QTBCRkE3MjNDMDBFRTY3OUUgLyogSFRNTFBhcnNlckVy
cm9yQ29kZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhUTUxQ
YXJzZXJFcnJvckNvZGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM1RUMx
NzYwQTUwN0UzRTAwNjAwN0Y1IC8qIHZpZXctc291cmNlLmNzcyAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBw
YXRoID0gInZpZXctc291cmNlLmNzcyI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05
MDYzLDYgKzkwNjUsNyBAQAogCQkJCUUxMEI5MzdCMEI3M0MwMEEwMDNFRDg5MCAvKiBKU0N1c3Rv
bVhQYXRoTlNSZXNvbHZlci5oICovLAogCQkJCTkyOTI2NDc2MEI2MUZDNzIwMEI0MUQzNCAvKiBK
U0RvY3VtZW50Q3VzdG9tLmNwcCAqLywKIAkJCQlCQ0Y0MTE3NzBCRkNDNzZBMDAxMjU2MjIgLyog
SlNIVE1MQW5jaG9yRWxlbWVudEN1c3RvbS5jcHAgKi8sCisJCQkJQkM1MTU4MEEwQzAzRDQwNDAw
OEJCMEVFIC8qIEpTSFRNTERvY3VtZW50Q3VzdG9tLmNwcCAqLywKIAkJCQk5MzhFNjVGNjA5RjA5
ODVEMDA4QTQ4RUMgLyogSlNIVE1MRWxlbWVudFdyYXBwZXJGYWN0b3J5LmNwcCAqLywKIAkJCQk5
MzhFNjVGMDA5RjA5ODQwMDA4QTQ4RUMgLyogSlNIVE1MRWxlbWVudFdyYXBwZXJGYWN0b3J5Lmgg
Ki8sCiAJCQkJQThEMDY1QUQwQTI0NDZDRDAwNUU3MjAzIC8qIEpTSFRNTEZvcm1FbGVtZW50Q3Vz
dG9tLmNwcCAqLywKQEAgLTEyNzU3LDYgKzEyNzYwLDcgQEAKIAkJCQlCQzQ5MUI3ODBDMDIzRUZE
MDA5RDYzMTYgLyogSlNIVE1MTWFycXVlZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QkM1MTU2RTkwQzAzQjc0MTAwOEJCMEVFIC8qIERPTUhUTUxNYXJxdWVlRWxlbWVudC5tbSBpbiBT
b3VyY2VzICovLAogCQkJCUFCQUYyMjA4MEMwM0IxQzcwMEIwQkNGMCAvKiBDaHJvbWVNYWMubW0g
aW4gU291cmNlcyAqLywKKwkJCQlCQzUxNTgwQjBDMDNENDA0MDA4QkIwRUUgLyogSlNIVE1MRG9j
dW1lbnRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSFRNTERvY3VtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSFRNTERvY3VtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNIVE1MRG9jdW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDM0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0hUTUxE
b2N1bWVudC5oIgorCisjaW5jbHVkZSAiRGVwcmVjYXRlZFN0cmluZy5oIgorI2luY2x1ZGUgIkZy
YW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIK
KyNpbmNsdWRlICJIVE1MQm9keUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MQ29sbGVjdGlvbi5o
IgorI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgorI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCisj
aW5jbHVkZSAiSFRNTElGcmFtZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNp
bmNsdWRlICJranNfaHRtbC5oIgorI2luY2x1ZGUgImtqc193aW5kb3cuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgS0pTOwordXNpbmcgbmFtZXNwYWNlIEhUTUxO
YW1lczsKKworYm9vbCBKU0hUTUxEb2N1bWVudDo6Y2FuR2V0SXRlbXNGb3JOYW1lKEV4ZWNTdGF0
ZSosIEhUTUxEb2N1bWVudCogZG9jLCBjb25zdCBBdG9taWNTdHJpbmcmIHByb3BlcnR5TmFtZSkK
K3sKKyAgICByZXR1cm4gZG9jLT5oYXNOYW1lZEl0ZW0ocHJvcGVydHlOYW1lKSB8fCBkb2MtPmhh
c0RvY0V4dHJhTmFtZWRJdGVtKHByb3BlcnR5TmFtZSk7Cit9CisKK0pTVmFsdWUqIEpTSFRNTERv
Y3VtZW50OjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9yaWdpbmFsT2Jq
ZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYg
c2xvdCkKK3sKKyAgICBKU0hUTUxEb2N1bWVudCogdGhpc09iaiA9IHN0YXRpY19jYXN0PEpTSFRN
TERvY3VtZW50Kj4oc2xvdC5zbG90QmFzZSgpKTsKKyAgICBIVE1MRG9jdW1lbnQqIGRvYyA9IHN0
YXRpY19jYXN0PEhUTUxEb2N1bWVudCo+KHRoaXNPYmotPmltcGwoKSk7CisKKyAgICBTdHJpbmcg
bmFtZSA9IHByb3BlcnR5TmFtZTsKKyAgICBSZWZQdHI8SFRNTENvbGxlY3Rpb24+IGNvbGxlY3Rp
b24gPSBkb2MtPmRvY3VtZW50TmFtZWRJdGVtcyhuYW1lKTsKKworICAgIGlmIChjb2xsZWN0aW9u
LT5sZW5ndGgoKSA9PSAxKSB7CisgICAgICAgIE5vZGUqIG5vZGUgPSBjb2xsZWN0aW9uLT5maXJz
dEl0ZW0oKTsKKworICAgICAgICBGcmFtZSogZnJhbWU7CisgICAgICAgIGlmIChub2RlLT5oYXNU
YWdOYW1lKGlmcmFtZVRhZykgJiYgKGZyYW1lID0gc3RhdGljX2Nhc3Q8SFRNTElGcmFtZUVsZW1l
bnQqPihub2RlKS0+Y29udGVudEZyYW1lKCkpKQorICAgICAgICAgICAgcmV0dXJuIFdpbmRvdzo6
cmV0cmlldmUoZnJhbWUpOworCisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIG5vZGUpOworICAg
IH0gZWxzZSBpZiAoIWNvbGxlY3Rpb24tPmxlbmd0aCgpKQorICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKKworICAgIHJldHVybiBnZXRIVE1MQ29sbGVjdGlvbihleGVjLCBjb2xsZWN0aW9u
LmdldCgpKTsKK30KKworLy8gQ3VzdG9tIGF0dHJpYnV0ZXMKKworSlNWYWx1ZSogSlNIVE1MRG9j
dW1lbnQ6OmFsbChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0Cit7CisgICAgLy8gSWYgImFsbCIgaGFz
IGJlZW4gb3ZlcndyaXR0ZW4sIHJldHVybiB0aGUgb3ZlcndyaXR0ZW4gdmFsdWUKKyAgICBpZiAo
SlNWYWx1ZSogdiA9IGdldERpcmVjdCgiYWxsIikpCisgICAgICAgIHJldHVybiB2OworCisgICAg
cmV0dXJuIGdldEFsbEhUTUxDb2xsZWN0aW9uKGV4ZWMsIHN0YXRpY19jYXN0PEhUTUxEb2N1bWVu
dCo+KGltcGwoKSktPmFsbCgpLmdldCgpKTsKK30KKwordm9pZCBKU0hUTUxEb2N1bWVudDo6c2V0
QWxsKEV4ZWNTdGF0ZSosIEpTVmFsdWUqIHZhbHVlKQoreworICAgIC8vIEFkZCAiYWxsIiB0byB0
aGUgcHJvcGVydHkgbWFwLgorICAgIHB1dERpcmVjdCgiYWxsIiwgdmFsdWUpOworfQorCitKU1Zh
bHVlKiBKU0hUTUxEb2N1bWVudDo6bG9jYXRpb24oRXhlY1N0YXRlKiBleGVjKSBjb25zdAorewor
ICAgIEZyYW1lKiBmcmFtZSA9IHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCo+KGltcGwoKSktPmZy
YW1lKCk7CisKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4ganNOdWxsKCk7CisgICAg
aWYgKFdpbmRvdyogd2luID0gV2luZG93OjpyZXRyaWV2ZVdpbmRvdyhmcmFtZSkpCisgICAgICAg
IHJldHVybiB3aW4tPmxvY2F0aW9uKCk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cit9CisK
K3ZvaWQgSlNIVE1MRG9jdW1lbnQ6OnNldExvY2F0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSogdmFsdWUpCit7CisgICAgaWYgKEZyYW1lKiBmcmFtZSA9IHN0YXRpY19jYXN0PEhUTUxEb2N1
bWVudCo+KGltcGwoKSktPmZyYW1lKCkpIHsKKyAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBzdHIg
PSB2YWx1ZS0+dG9TdHJpbmcoZXhlYyk7CisKKyAgICAgICAgLy8gV2hlbiBhc3NpZ25pbmcgbG9j
YXRpb24sIElFIGFuZCBNb3ppbGxhIGJvdGggcmVzb2x2ZSB0aGUgVVJMCisgICAgICAgIC8vIHJl
bGF0aXZlICAgICBub3QKKyAgICAgICAgLy8gdGhlIHRhcmdldCBmcmFtZS4KKyAgICAgICAgRnJh
bWUqIGFjdGl2ZUZyYW1lID0gc3RhdGljX2Nhc3Q8U2NyaXB0SW50ZXJwcmV0ZXIqPihleGVjLT5k
eW5hbWljSW50ZXJwcmV0ZXIoKSktPmZyYW1lKCk7CisgICAgICAgIGlmIChhY3RpdmVGcmFtZSkK
KyAgICAgICAgICAgIHN0ciA9IGFjdGl2ZUZyYW1lLT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTChz
dHIpOworCisgICAgICAgIC8vIFdlIHdhbnQgYSBuZXcgaGlzdG9yeSBpdGVtIGlmIHRoaXMgSlMg
d2FzIGNhbGxlZCB2aWEgYSB1c2VyIGdlc3R1cmUKKyAgICAgICAgYm9vbCB1c2VyR2VzdHVyZSA9
IHN0YXRpY19jYXN0PFNjcmlwdEludGVycHJldGVyKj4oZXhlYy0+ZHluYW1pY0ludGVycHJldGVy
KCkpLT53YXNSdW5CeVVzZXJHZXN0dXJlKCk7CisgICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+c2No
ZWR1bGVMb2NhdGlvbkNoYW5nZShzdHIsIGFjdGl2ZUZyYW1lLT5sb2FkZXIoKS0+b3V0Z29pbmdS
ZWZlcnJlcigpLCAhdXNlckdlc3R1cmUpOworICAgIH0KK30KKworSlNWYWx1ZSogSlNIVE1MRG9j
dW1lbnQ6OndpZHRoKEV4ZWNTdGF0ZSopIGNvbnN0Cit7CisgICAgRnJhbWVWaWV3KiB2aWV3ID0g
c3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50Kj4oaW1wbCgpKS0+dmlldygpOworICAgIHJldHVybiBq
c051bWJlcih2aWV3ID8gdmlldy0+Y29udGVudHNIZWlnaHQoKSA6IDApOworfQorCitKU1ZhbHVl
KiBKU0hUTUxEb2N1bWVudDo6aGVpZ2h0KEV4ZWNTdGF0ZSopIGNvbnN0Cit7CisgICAgRnJhbWVW
aWV3KiB2aWV3ID0gc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50Kj4oaW1wbCgpKS0+dmlldygpOwor
ICAgIHJldHVybiBqc051bWJlcih2aWV3ID8gdmlldy0+Y29udGVudHNIZWlnaHQoKSA6IDApOwor
fQorCitKU1ZhbHVlKiBKU0hUTUxEb2N1bWVudDo6ZGlyKEV4ZWNTdGF0ZSopIGNvbnN0Cit7Cisg
ICAgSFRNTEVsZW1lbnQqIGJvZHkgPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQqPihpbXBsKCkp
LT5ib2R5KCk7CisgICAgaWYgKCFib2R5KQorICAgICAgICByZXR1cm4ganNTdHJpbmcoIiIpOwor
ICAgIHJldHVybiBqc1N0cmluZyhib2R5LT5kaXIoKSk7Cit9CisKK3ZvaWQgSlNIVE1MRG9jdW1l
bnQ6OnNldERpcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHZhbHVlKQoreworICAgIEhUTUxF
bGVtZW50KiBib2R5ID0gc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50Kj4oaW1wbCgpKS0+Ym9keSgp
OworICAgIGlmIChib2R5KQorICAgICAgICBib2R5LT5zZXREaXIodmFsdWVUb1N0cmluZ1dpdGhO
dWxsQ2hlY2soZXhlYywgdmFsdWUpKTsKK30KKworSlNWYWx1ZSogSlNIVE1MRG9jdW1lbnQ6OmRl
c2lnbk1vZGUoRXhlY1N0YXRlKikgY29uc3QKK3sKKyAgcmV0dXJuIGpzU3RyaW5nKHN0YXRpY19j
YXN0PEhUTUxEb2N1bWVudCo+KGltcGwoKSktPmluRGVzaWduTW9kZSgpID8gIm9uIiA6ICJvZmYi
KTsKK30KKwordm9pZCBKU0hUTUxEb2N1bWVudDo6c2V0RGVzaWduTW9kZShFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUqIHZhbHVlKQoreworICAgIEhUTUxEb2N1bWVudCogZG9jID0gc3RhdGljX2Nh
c3Q8SFRNTERvY3VtZW50Kj4oaW1wbCgpKTsKKworICAgIFN0cmluZyBtb2RlU3RyaW5nID0gdmFs
dWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2soZXhlYywgdmFsdWUpOworICAgIERvY3VtZW50OjpJbmhl
cml0ZWRCb29sIG1vZGU7CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG1vZGVTdHJpbmcsICJv
biIpKQorICAgICAgICBtb2RlID0gRG9jdW1lbnQ6Om9uOworICAgIGVsc2UgaWYgKGVxdWFsSWdu
b3JpbmdDYXNlKG1vZGVTdHJpbmcsICJvZmYiKSkKKyAgICAgICAgbW9kZSA9IERvY3VtZW50Ojpv
ZmY7CisgICAgZWxzZQorICAgICAgICBtb2RlID0gRG9jdW1lbnQ6OmluaGVyaXQ7CisgICAgZG9j
LT5zZXREZXNpZ25Nb2RlKG1vZGUpOworfQorCitKU1ZhbHVlKiBKU0hUTUxEb2N1bWVudDo6YmdD
b2xvcihFeGVjU3RhdGUqKSBjb25zdAoreworICAgIEhUTUxFbGVtZW50KiBib2R5ID0gc3RhdGlj
X2Nhc3Q8SFRNTERvY3VtZW50Kj4oaW1wbCgpKS0+Ym9keSgpOworICAgIEhUTUxCb2R5RWxlbWVu
dCogYm9keUVsZW1lbnQgPSAoYm9keSAmJiBib2R5LT5oYXNUYWdOYW1lKGJvZHlUYWcpKSA/IHN0
YXRpY19jYXN0PEhUTUxCb2R5RWxlbWVudCo+KGJvZHkpIDogMDsKKworICAgIGlmICghYm9keUVs
ZW1lbnQpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIHJldHVybiBqc1N0cmlu
Zyhib2R5RWxlbWVudC0+YmdDb2xvcigpKTsKK30KKwordm9pZCBKU0hUTUxEb2N1bWVudDo6c2V0
QmdDb2xvcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHZhbHVlKQoreworICAgIEhUTUxFbGVt
ZW50KiBib2R5ID0gc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50Kj4oaW1wbCgpKS0+Ym9keSgpOwor
ICAgIEhUTUxCb2R5RWxlbWVudCogYm9keUVsZW1lbnQgPSAoYm9keSAmJiBib2R5LT5oYXNUYWdO
YW1lKGJvZHlUYWcpKSA/IHN0YXRpY19jYXN0PEhUTUxCb2R5RWxlbWVudCo+KGJvZHkpIDogMDsK
KworICAgIGlmIChib2R5RWxlbWVudCkKKyAgICAgICAgYm9keUVsZW1lbnQtPnNldEJnQ29sb3Io
dmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2soZXhlYywgdmFsdWUpKTsKK30KKworSlNWYWx1ZSog
SlNIVE1MRG9jdW1lbnQ6OmZnQ29sb3IoRXhlY1N0YXRlKikgY29uc3QKK3sKKyAgICBIVE1MRWxl
bWVudCogYm9keSA9IHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCo+KGltcGwoKSktPmJvZHkoKTsK
KyAgICBIVE1MQm9keUVsZW1lbnQqIGJvZHlFbGVtZW50ID0gKGJvZHkgJiYgYm9keS0+aGFzVGFn
TmFtZShib2R5VGFnKSkgPyBzdGF0aWNfY2FzdDxIVE1MQm9keUVsZW1lbnQqPihib2R5KSA6IDA7
CisKKyAgICBpZiAoIWJvZHlFbGVtZW50KQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
KyAgICByZXR1cm4ganNTdHJpbmcoYm9keUVsZW1lbnQtPnRleHQoKSk7Cit9CisKK3ZvaWQgSlNI
VE1MRG9jdW1lbnQ6OnNldEZnQ29sb3IoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2YWx1ZSkK
K3sKKyAgICBIVE1MRWxlbWVudCogYm9keSA9IHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCo+KGlt
cGwoKSktPmJvZHkoKTsKKyAgICBIVE1MQm9keUVsZW1lbnQqIGJvZHlFbGVtZW50ID0gKGJvZHkg
JiYgYm9keS0+aGFzVGFnTmFtZShib2R5VGFnKSkgPyBzdGF0aWNfY2FzdDxIVE1MQm9keUVsZW1l
bnQqPihib2R5KSA6IDA7CisKKyAgICBpZiAoYm9keUVsZW1lbnQpCisgICAgICAgIGJvZHlFbGVt
ZW50LT5zZXRUZXh0KHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKGV4ZWMsIHZhbHVlKSk7Cit9
CisKK0pTVmFsdWUqIEpTSFRNTERvY3VtZW50OjphbGlua0NvbG9yKEV4ZWNTdGF0ZSopIGNvbnN0
Cit7CisgICAgSFRNTEVsZW1lbnQqIGJvZHkgPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQqPihp
bXBsKCkpLT5ib2R5KCk7CisgICAgSFRNTEJvZHlFbGVtZW50KiBib2R5RWxlbWVudCA9IChib2R5
ICYmIGJvZHktPmhhc1RhZ05hbWUoYm9keVRhZykpID8gc3RhdGljX2Nhc3Q8SFRNTEJvZHlFbGVt
ZW50Kj4oYm9keSkgOiAwOworCisgICAgaWYgKCFib2R5RWxlbWVudCkKKyAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CisgICAgcmV0dXJuIGpzU3RyaW5nKGJvZHlFbGVtZW50LT5hTGluaygp
KTsKK30KKwordm9pZCBKU0hUTUxEb2N1bWVudDo6c2V0QWxpbmtDb2xvcihFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUqIHZhbHVlKQoreworICAgIEhUTUxFbGVtZW50KiBib2R5ID0gc3RhdGljX2Nh
c3Q8SFRNTERvY3VtZW50Kj4oaW1wbCgpKS0+Ym9keSgpOworICAgIEhUTUxCb2R5RWxlbWVudCog
Ym9keUVsZW1lbnQgPSAoYm9keSAmJiBib2R5LT5oYXNUYWdOYW1lKGJvZHlUYWcpKSA/IHN0YXRp
Y19jYXN0PEhUTUxCb2R5RWxlbWVudCo+KGJvZHkpIDogMDsKKworICAgIGlmIChib2R5RWxlbWVu
dCkgeworICAgICAgICAvLyBUaGlzIGNoZWNrIGlzIGEgYml0IHNpbGx5LCBidXQgc29tZSBiZW5j
aG1hcmtzIGxpa2UgdG8gc2V0IHRoZQorICAgICAgICAvLyBkb2N1bWVudCdzIGxpbmsgY29sb3Jz
IG92ZXIgYW5kIG92ZXIgdG8gdGhlIHNhbWUgdmFsdWUgYW5kIHdlCisgICAgICAgIC8vIGRvbid0
IHdhbnQgdG8gaW5jdXIgYSBzdHlsZSB1cGRhdGUgZWFjaCB0aW1lLgorICAgICAgICBTdHJpbmcg
bmV3Q29sb3IgPSB2YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVjayhleGVjLCB2YWx1ZSk7CisgICAg
ICAgIGlmIChib2R5RWxlbWVudC0+YUxpbmsoKSAhPSBuZXdDb2xvcikKKyAgICAgICAgICAgIGJv
ZHlFbGVtZW50LT5zZXRBTGluayhuZXdDb2xvcik7CisgICAgfQorfQorCitKU1ZhbHVlKiBKU0hU
TUxEb2N1bWVudDo6bGlua0NvbG9yKEV4ZWNTdGF0ZSopIGNvbnN0Cit7CisgICAgSFRNTEVsZW1l
bnQqIGJvZHkgPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQqPihpbXBsKCkpLT5ib2R5KCk7Cisg
ICAgSFRNTEJvZHlFbGVtZW50KiBib2R5RWxlbWVudCA9IChib2R5ICYmIGJvZHktPmhhc1RhZ05h
bWUoYm9keVRhZykpID8gc3RhdGljX2Nhc3Q8SFRNTEJvZHlFbGVtZW50Kj4oYm9keSkgOiAwOwor
CisgICAgaWYgKCFib2R5RWxlbWVudCkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cisg
ICAgcmV0dXJuIGpzU3RyaW5nKGJvZHlFbGVtZW50LT5saW5rKCkpOworfQorCit2b2lkIEpTSFRN
TERvY3VtZW50OjpzZXRMaW5rQ29sb3IoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2YWx1ZSkK
K3sKKyAgICBIVE1MRWxlbWVudCogYm9keSA9IHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCo+KGlt
cGwoKSktPmJvZHkoKTsKKyAgICBIVE1MQm9keUVsZW1lbnQqIGJvZHlFbGVtZW50ID0gKGJvZHkg
JiYgYm9keS0+aGFzVGFnTmFtZShib2R5VGFnKSkgPyBzdGF0aWNfY2FzdDxIVE1MQm9keUVsZW1l
bnQqPihib2R5KSA6IDA7CisKKyAgICBpZiAoYm9keUVsZW1lbnQpIHsKKyAgICAgICAgLy8gVGhp
cyBjaGVjayBpcyBhIGJpdCBzaWxseSwgYnV0IHNvbWUgYmVuY2htYXJrcyBsaWtlIHRvIHNldCB0
aGUKKyAgICAgICAgLy8gZG9jdW1lbnQncyBsaW5rIGNvbG9ycyBvdmVyIGFuZCBvdmVyIHRvIHRo
ZSBzYW1lIHZhbHVlIGFuZCB3ZQorICAgICAgICAvLyBkb24ndCB3YW50IHRvIGluY3VyIGEgc3R5
bGUgdXBkYXRlIGVhY2ggdGltZS4KKyAgICAgICAgU3RyaW5nIG5ld0NvbG9yID0gdmFsdWVUb1N0
cmluZ1dpdGhOdWxsQ2hlY2soZXhlYywgdmFsdWUpOworICAgICAgICBpZiAoYm9keUVsZW1lbnQt
PmxpbmsoKSAhPSBuZXdDb2xvcikKKyAgICAgICAgICAgIGJvZHlFbGVtZW50LT5zZXRMaW5rKG5l
d0NvbG9yKTsKKyAgICB9CisKK30KKworSlNWYWx1ZSogSlNIVE1MRG9jdW1lbnQ6OnZsaW5rQ29s
b3IoRXhlY1N0YXRlKikgY29uc3QKK3sKKyAgICBIVE1MRWxlbWVudCogYm9keSA9IHN0YXRpY19j
YXN0PEhUTUxEb2N1bWVudCo+KGltcGwoKSktPmJvZHkoKTsKKyAgICBIVE1MQm9keUVsZW1lbnQq
IGJvZHlFbGVtZW50ID0gKGJvZHkgJiYgYm9keS0+aGFzVGFnTmFtZShib2R5VGFnKSkgPyBzdGF0
aWNfY2FzdDxIVE1MQm9keUVsZW1lbnQqPihib2R5KSA6IDA7CisKKyAgICBpZiAoIWJvZHlFbGVt
ZW50KQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICByZXR1cm4ganNTdHJpbmco
Ym9keUVsZW1lbnQtPnZMaW5rKCkpOworfQorCit2b2lkIEpTSFRNTERvY3VtZW50OjpzZXRWbGlu
a0NvbG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogdmFsdWUpCit7CisgICAgSFRNTEVsZW1l
bnQqIGJvZHkgPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQqPihpbXBsKCkpLT5ib2R5KCk7Cisg
ICAgSFRNTEJvZHlFbGVtZW50KiBib2R5RWxlbWVudCA9IChib2R5ICYmIGJvZHktPmhhc1RhZ05h
bWUoYm9keVRhZykpID8gc3RhdGljX2Nhc3Q8SFRNTEJvZHlFbGVtZW50Kj4oYm9keSkgOiAwOwor
CisgICAgaWYgKGJvZHlFbGVtZW50KSB7CisgICAgICAgIC8vIFRoaXMgY2hlY2sgaXMgYSBiaXQg
c2lsbHksIGJ1dCBzb21lIGJlbmNobWFya3MgbGlrZSB0byBzZXQgdGhlCisgICAgICAgIC8vIGRv
Y3VtZW50J3MgbGluayBjb2xvcnMgb3ZlciBhbmQgb3ZlciB0byB0aGUgc2FtZSB2YWx1ZSBhbmQg
d2UKKyAgICAgICAgLy8gZG9uJ3Qgd2FudCB0byBpbmN1ciBhIHN0eWxlIHVwZGF0ZSBlYWNoIHRp
bWUuCisgICAgICAgIFN0cmluZyBuZXdDb2xvciA9IHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNr
KGV4ZWMsIHZhbHVlKTsKKyAgICAgICAgaWYgKGJvZHlFbGVtZW50LT52TGluaygpICE9IG5ld0Nv
bG9yKQorICAgICAgICAgICAgYm9keUVsZW1lbnQtPnNldFZMaW5rKG5ld0NvbG9yKTsKKyAgICB9
CisKK30KKworLy8gQ3VzdG9tIGZ1bmN0aW9ucworCitKU1ZhbHVlKiBKU0hUTUxEb2N1bWVudDo6
b3BlbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IExpc3QmIGFyZ3MpCit7CisgICAgLy8gRm9yIGNv
bXBhdGliaWxpdHkgd2l0aCBvdGhlciBicm93c2VycywgcGFzcyBvcGVuIGNhbGxzIHdpdGggbW9y
ZSB0aGFuIDIgcGFyYW1ldGVycyB0byB0aGUgd2luZG93LgorICAgIGlmIChhcmdzLnNpemUoKSA+
IDIpIHsKKyAgICAgICAgRnJhbWUqIGZyYW1lID0gc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50Kj4o
aW1wbCgpKS0+ZnJhbWUoKTsKKyAgICAgICAgaWYgKGZyYW1lKSB7CisgICAgICAgICAgICBXaW5k
b3cqIHdpbmRvdyA9IFdpbmRvdzo6cmV0cmlldmVXaW5kb3coZnJhbWUpOworICAgICAgICAgICAg
aWYgKHdpbmRvdykgeworICAgICAgICAgICAgICAgIEpTT2JqZWN0KiBmdW5jdGlvbk9iamVjdCA9
IHdpbmRvdy0+Z2V0KGV4ZWMsICJvcGVuIiktPmdldE9iamVjdCgpOworICAgICAgICAgICAgICAg
IGlmICghZnVuY3Rpb25PYmplY3QgfHwgIWZ1bmN0aW9uT2JqZWN0LT5pbXBsZW1lbnRzQ2FsbCgp
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3Ip
OworICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbk9iamVjdC0+Y2FsbChleGVjLCB3aW5k
b3csIGFyZ3MpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOworICAgIH0KKworICAgIC8vIEluIHRoZSBjYXNlIG9mIHR3byBwYXJhbWV0ZXJz
IG9yIGZld2VyLCBkbyBhIG5vcm1hbCBkb2N1bWVudCBvcGVuLgorICAgIHN0YXRpY19jYXN0PEhU
TUxEb2N1bWVudCo+KGltcGwoKSktPm9wZW4oKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
K30KKworc3RhdGljIFN0cmluZyB3cml0ZUhlbHBlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IExp
c3QmIGFyZ3MpCit7CisgICAgLy8gRE9NIG9ubHkgc3BlY2lmaWVzIHNpbmdsZSBzdHJpbmcgYXJn
dW1lbnQsIGJ1dCBOUyAmIElFIGFsbG93IG11bHRpcGxlCisgICAgLy8gb3Igbm8gYXJndW1lbnRz
LgorICAgIFN0cmluZyBzdHIgPSAiIjsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ3Muc2l6
ZSgpOyArK2kpCisgICAgICAgIHN0ciArPSBhcmdzW2ldLT50b1N0cmluZyhleGVjKTsKKyAgICBy
ZXR1cm4gc3RyOworfQorCitKU1ZhbHVlKiBKU0hUTUxEb2N1bWVudDo6d3JpdGUoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBMaXN0JiBhcmdzKQoreworICAgIHN0YXRpY19jYXN0PEhUTUxEb2N1bWVu
dCo+KGltcGwoKSktPndyaXRlKHdyaXRlSGVscGVyKGV4ZWMsIGFyZ3MpKTsKKyAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKK30KKworSlNWYWx1ZSogSlNIVE1MRG9jdW1lbnQ6OndyaXRlbG4oRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBMaXN0JiBhcmdzKQoreworICAgIHN0YXRpY19jYXN0PEhUTUxE
b2N1bWVudCo+KGltcGwoKSktPndyaXRlKHdyaXRlSGVscGVyKGV4ZWMsIGFyZ3MpICsgIlxuIik7
CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cit9CisKK0pTVmFsdWUqIEpTSFRNTERvY3VtZW50
OjpjbGVhcihFeGVjU3RhdGUqLCBjb25zdCBMaXN0JikKK3sKKyAgICAvLyBldmVuIElFIGRvZXNu
J3Qgc3VwcG9ydCB0aGlzIG9uZS4uLgorICAgIC8vIHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCo+
KGltcGwoKSkuY2xlYXIoKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKK30KKworSlNWYWx1
ZSogSlNIVE1MRG9jdW1lbnQ6OmNhcHR1cmVFdmVudHMoRXhlY1N0YXRlKiwgY29uc3QgTGlzdCYp
Cit7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cit9CisKK0pTVmFsdWUqIEpTSFRNTERvY3Vt
ZW50OjpyZWxlYXNlRXZlbnRzKEV4ZWNTdGF0ZSosIGNvbnN0IExpc3QmKQoreworICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL2pzL2tqc19kb20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3MvanMva2pzX2RvbS5jcHAJKHJldmlzaW9uIDIxNjU0KQorKysgV2ViQ29yZS9iaW5kaW5ncy9q
cy9ranNfZG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3MSw5ICsxMDcxLDkgQEAgSlNWYWx1
ZSogZ2V0UnVudGltZU9iamVjdChFeGVjU3RhdGUqIGV4ZQogICAgIHJldHVybiAwOwogfQogCi1K
U1ZhbHVlKiB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgUGFzc1JlZlB0cjxOb2RlTGlzdD4gbCkKK0pT
VmFsdWUqIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBOb2RlTGlzdCogbCkKIHsKLSAgICByZXR1cm4g
Y2FjaGVET01PYmplY3Q8Tm9kZUxpc3QsIERPTU5vZGVMaXN0PihleGVjLCBsLmdldCgpKTsKKyAg
ICByZXR1cm4gY2FjaGVET01PYmplY3Q8Tm9kZUxpc3QsIERPTU5vZGVMaXN0PihleGVjLCBsKTsK
IH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNf
ZG9tLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfZG9tLmgJKHJldmlz
aW9uIDIxNjU0KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfZG9tLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEzNyw3ICsxMzcsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgSlNWYWx1ZSogZ2V0UnVu
dGltZU9iamVjdChFeGVjU3RhdGUqLCBXZWJDb3JlOjpOb2RlKik7CiAgIEpTVmFsdWUqIHRvSlMo
RXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpOb2RlPik7CiAgIEpTVmFsdWUqIHRvSlMo
RXhlY1N0YXRlKiwgV2ViQ29yZTo6TmFtZWROb2RlTWFwKik7Ci0gIEpTVmFsdWUqIHRvSlMoRXhl
Y1N0YXRlKiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpOb2RlTGlzdD4pOworICBKU1ZhbHVlKiB0b0pT
KEV4ZWNTdGF0ZSosIFdlYkNvcmU6Ok5vZGVMaXN0Kik7CiAgIEpTVmFsdWUqIHRvSlMoRXhlY1N0
YXRlKiwgV2ViQ29yZTo6RXZlbnRUYXJnZXQqKTsKICAgSlNPYmplY3QqIGdldE5vZGVDb25zdHJ1
Y3RvcihFeGVjU3RhdGUqKTsKICAgSlNPYmplY3QqIGdldERPTUV4Y2VwdGlvbkNvbnN0cnVjdG9y
KEV4ZWNTdGF0ZSopOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfaHRtbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfaHRtbC5jcHAJKHJldmlzaW9uIDIx
NjU0KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfaHRtbC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTcxLDM0NSArNzEsNiBAQCBwcml2YXRlOgogICBpbnQgaWQ7CiB9OwogCi0vKiAKLUBiZWdp
biBKU0hUTUxEb2N1bWVudFByb3RvdHlwZVRhYmxlIDgKLWNsZWFyICAgICAgICAgICAgICAgICBK
U0hUTUxEb2N1bWVudDo6Q2xlYXIgICAgICAgICAgICAgRG9udERlbGV0ZXxGdW5jdGlvbiAwCi1v
cGVuICAgICAgICAgICAgICAgICAgSlNIVE1MRG9jdW1lbnQ6Ok9wZW4gICAgICAgICAgICAgIERv
bnREZWxldGV8RnVuY3Rpb24gMAotY2xvc2UgICAgICAgICAgICAgICAgIEpTSFRNTERvY3VtZW50
OjpDbG9zZSAgICAgICAgICAgICBEb250RGVsZXRlfEZ1bmN0aW9uIDAKLXdyaXRlICAgICAgICAg
ICAgICAgICBKU0hUTUxEb2N1bWVudDo6V3JpdGUgICAgICAgICAgICAgRG9udERlbGV0ZXxGdW5j
dGlvbiAxCi13cml0ZWxuICAgICAgICAgICAgICAgSlNIVE1MRG9jdW1lbnQ6OldyaXRlTG4gICAg
ICAgICAgIERvbnREZWxldGV8RnVuY3Rpb24gMQotZ2V0RWxlbWVudHNCeU5hbWUgICAgIEpTSFRN
TERvY3VtZW50OjpHZXRFbGVtZW50c0J5TmFtZSBEb250RGVsZXRlfEZ1bmN0aW9uIDEKLWNhcHR1
cmVFdmVudHMgICAgICAgICBKU0hUTUxEb2N1bWVudDo6Q2FwdHVyZUV2ZW50cyAgICAgRG9udERl
bGV0ZXxGdW5jdGlvbiAwCi1yZWxlYXNlRXZlbnRzICAgICAgICAgSlNIVE1MRG9jdW1lbnQ6OlJl
bGVhc2VFdmVudHMgICAgIERvbnREZWxldGV8RnVuY3Rpb24gMAotQGVuZAotKi8KLUtKU19JTVBM
RU1FTlRfUFJPVE9UWVBFX0ZVTkNUSU9OKEpTSFRNTERvY3VtZW50UHJvdG90eXBlRnVuY3Rpb24p
Ci1LSlNfSU1QTEVNRU5UX1BST1RPVFlQRSgiRE9NSFRNTERvY3VtZW50IiwgSlNIVE1MRG9jdW1l
bnRQcm90b3R5cGUsIEpTSFRNTERvY3VtZW50UHJvdG90eXBlRnVuY3Rpb24pCi0KLUpTVmFsdWUg
KkpTSFRNTERvY3VtZW50UHJvdG90eXBlRnVuY3Rpb246OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCi17Ci0gICAgaWYg
KCF0aGlzT2JqLT5pbmhlcml0cygmSlNIVE1MRG9jdW1lbnQ6OmluZm8pKQotICAgICAgICByZXR1
cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwotICAgIEhUTUxEb2N1bWVudCAmZG9jID0g
KnN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCo+KHN0YXRpY19jYXN0PEpTSFRNTERvY3VtZW50Kj4o
dGhpc09iaiktPmltcGwoKSk7Ci0gICAgCi0gICAgc3dpdGNoIChpZCkgewotICAgICAgICBjYXNl
IEpTSFRNTERvY3VtZW50OjpDbGVhcjogLy8gZXZlbiBJRSBkb2Vzbid0IHN1cHBvcnQgdGhhdCBv
bmUuLi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vZG9jLmNsZWFyKCk7
IC8vIFRPRE8KLSAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgICAgICBjYXNl
IEpTSFRNTERvY3VtZW50OjpPcGVuOgotICAgICAgICAgICAgLy8gRm9yIGNvbXBhdGliaWxpdHkg
d2l0aCBvdGhlciBicm93c2VycywgcGFzcyBvcGVuIGNhbGxzIHdpdGggbW9yZSB0aGFuIDIgcGFy
YW1ldGVycyB0byB0aGUgd2luZG93LgotICAgICAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpID4gMikg
ewotICAgICAgICAgICAgICAgIEZyYW1lICpmcmFtZSA9IGRvYy5mcmFtZSgpOwotICAgICAgICAg
ICAgICAgIGlmIChmcmFtZSkgewotICAgICAgICAgICAgICAgICAgICBXaW5kb3cgKndpbmRvdyA9
IFdpbmRvdzo6cmV0cmlldmVXaW5kb3coZnJhbWUpOwotICAgICAgICAgICAgICAgICAgICBpZiAo
d2luZG93KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBKU09iamVjdCogZnVuY3Rpb25PYmpl
Y3QgPSB3aW5kb3ctPmdldChleGVjLCAib3BlbiIpLT5nZXRPYmplY3QoKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICghZnVuY3Rpb25PYmplY3QgfHwgIWZ1bmN0aW9uT2JqZWN0LT5pbXBs
ZW1lbnRzQ2FsbCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vy
cm9yKGV4ZWMsIFR5cGVFcnJvcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVu
Y3Rpb25PYmplY3QtPmNhbGwoZXhlYywgd2luZG93LCBhcmdzKTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIEluIHRoZSBjYXNlIG9mIHR3byBw
YXJhbWV0ZXJzIG9yIGZld2VyLCBkbyBhIG5vcm1hbCBkb2N1bWVudCBvcGVuLgotICAgICAgICAg
ICAgZG9jLm9wZW4oKTsKLSAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgICAg
ICBjYXNlIEpTSFRNTERvY3VtZW50OjpDbG9zZToKLSAgICAgICAgICAgIGRvYy5jbG9zZSgpOwot
ICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgIGNhc2UgSlNIVE1MRG9j
dW1lbnQ6OldyaXRlOgotICAgICAgICBjYXNlIEpTSFRNTERvY3VtZW50OjpXcml0ZUxuOiB7Ci0g
ICAgICAgICAgICAvLyBET00gb25seSBzcGVjaWZpZXMgc2luZ2xlIHN0cmluZyBhcmd1bWVudCwg
YnV0IE5TICYgSUUgYWxsb3cgbXVsdGlwbGUKLSAgICAgICAgICAgIC8vIG9yIG5vIGFyZ3VtZW50
cwotICAgICAgICAgICAgU3RyaW5nIHN0ciA9ICIiOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBhcmdzLnNpemUoKTsgaSsrKQotICAgICAgICAgICAgICAgIHN0ciArPSBhcmdzW2ld
LT50b1N0cmluZyhleGVjKTsKLSAgICAgICAgICAgIGlmIChpZCA9PSBKU0hUTUxEb2N1bWVudDo6
V3JpdGVMbikKLSAgICAgICAgICAgICAgICBzdHIgKz0gIlxuIjsKLSAgICAgICAgICAgIGRvYy53
cml0ZShzdHIpOwotICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgIH0K
LSAgICAgICAgY2FzZSBKU0hUTUxEb2N1bWVudDo6R2V0RWxlbWVudHNCeU5hbWU6Ci0gICAgICAg
ICAgICByZXR1cm4gdG9KUyhleGVjLCBkb2MuZ2V0RWxlbWVudHNCeU5hbWUoYXJnc1swXS0+dG9T
dHJpbmcoZXhlYykpLmdldCgpKTsKLSAgICAgICAgY2FzZSBKU0hUTUxEb2N1bWVudDo6Q2FwdHVy
ZUV2ZW50czoKLSAgICAgICAgY2FzZSBKU0hUTUxEb2N1bWVudDo6UmVsZWFzZUV2ZW50czoKLSAg
ICAgICAgICAgIC8vIERvIG5vdGhpbmcgZm9yIG5vdy4gVGhlc2UgYXJlIE5TLXNwZWNpZmljIGxl
Z2FjeSBjYWxscy4KLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKLX0KLQotCi0vLyBGSVhNRTogZnVuY3Rpb25zIHNob3VsZCBiZSBpbiB0
aGUgcHJvdG90eXBlCi1jb25zdCBDbGFzc0luZm8gSlNIVE1MRG9jdW1lbnQ6OmluZm8gPQotICB7
ICJET01IVE1MRG9jdW1lbnQiLCAmSlNEb2N1bWVudDo6aW5mbywgJkhUTUxEb2N1bWVudFRhYmxl
LCAwIH07Ci0vKiBTb3VyY2UgZm9yIEhUTUxEb2N1bWVudFRhYmxlLiBVc2UgIm1ha2UgaGFzaHRh
YmxlcyIgdG8gcmVnZW5lcmF0ZS4KLUBiZWdpbiBIVE1MRG9jdW1lbnRUYWJsZSAzMAotICB0aXRs
ZSAgICAgICAgICAgICAgICAgSlNIVE1MRG9jdW1lbnQ6OlRpdGxlICAgICAgICAgICAgIERvbnRE
ZWxldGUKLSAgcmVmZXJyZXIgICAgICAgICAgICAgIEpTSFRNTERvY3VtZW50OjpSZWZlcnJlciAg
ICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIGRvbWFpbiAgICAgICAgICAgICAgICBKU0hU
TUxEb2N1bWVudDo6RG9tYWluICAgICAgICAgICAgRG9udERlbGV0ZQotICBib2R5ICAgICAgICAg
ICAgICAgICAgSlNIVE1MRG9jdW1lbnQ6OkJvZHkgICAgICAgICAgICAgIERvbnREZWxldGUKLSAg
bG9jYXRpb24gICAgICAgICAgICAgIEpTSFRNTERvY3VtZW50OjpMb2NhdGlvbiAgICAgICAgICBE
b250RGVsZXRlCi0gIGNvb2tpZSAgICAgICAgICAgICAgICBKU0hUTUxEb2N1bWVudDo6Q29va2ll
ICAgICAgICAgICAgRG9udERlbGV0ZQotICBpbWFnZXMgICAgICAgICAgICAgICAgSlNIVE1MRG9j
dW1lbnQ6OkltYWdlcyAgICAgICAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKLSAgZW1iZWRzICAg
ICAgICAgICAgICAgIEpTSFRNTERvY3VtZW50OjpFbWJlZHMgICAgICAgICAgICBEb250RGVsZXRl
fFJlYWRPbmx5Ci0gIHBsdWdpbnMgICAgICAgICAgICAgICBKU0hUTUxEb2N1bWVudDo6RW1iZWRz
ICAgICAgICAgICAgRG9udERlbGV0ZXxSZWFkT25seQotICBhcHBsZXRzICAgICAgICAgICAgICAg
SlNIVE1MRG9jdW1lbnQ6OkFwcGxldHMgICAgICAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKLSAg
bGlua3MgICAgICAgICAgICAgICAgIEpTSFRNTERvY3VtZW50OjpMaW5rcyAgICAgICAgICAgICBE
b250RGVsZXRlfFJlYWRPbmx5Ci0gIGZvcm1zICAgICAgICAgICAgICAgICBKU0hUTUxEb2N1bWVu
dDo6Rm9ybXMgICAgICAgICAgICAgRG9udERlbGV0ZXxSZWFkT25seQotICBhbmNob3JzICAgICAg
ICAgICAgICAgSlNIVE1MRG9jdW1lbnQ6OkFuY2hvcnMgICAgICAgICAgIERvbnREZWxldGV8UmVh
ZE9ubHkKLSAgc2NyaXB0cyAgICAgICAgICAgICAgIEpTSFRNTERvY3VtZW50OjpTY3JpcHRzICAg
ICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIGFsbCAgICAgICAgICAgICAgICAgICBKU0hU
TUxEb2N1bWVudDo6QWxsICAgICAgICAgICAgICAgCi0gIGJnQ29sb3IgICAgICAgICAgICAgICBK
U0hUTUxEb2N1bWVudDo6QmdDb2xvciAgICAgICAgICAgRG9udERlbGV0ZQotICBmZ0NvbG9yICAg
ICAgICAgICAgICAgSlNIVE1MRG9jdW1lbnQ6OkZnQ29sb3IgICAgICAgICAgIERvbnREZWxldGUK
LSAgYWxpbmtDb2xvciAgICAgICAgICAgIEpTSFRNTERvY3VtZW50OjpBbGlua0NvbG9yICAgICAg
ICBEb250RGVsZXRlCi0gIGxpbmtDb2xvciAgICAgICAgICAgICBKU0hUTUxEb2N1bWVudDo6TGlu
a0NvbG9yICAgICAgICAgRG9udERlbGV0ZQotICB2bGlua0NvbG9yICAgICAgICAgICAgSlNIVE1M
RG9jdW1lbnQ6OlZsaW5rQ29sb3IgICAgICAgIERvbnREZWxldGUKLSAgbGFzdE1vZGlmaWVkICAg
ICAgICAgIEpTSFRNTERvY3VtZW50OjpMYXN0TW9kaWZpZWQgICAgICBEb250RGVsZXRlfFJlYWRP
bmx5Ci0gIGhlaWdodCAgICAgICAgICAgICAgICBKU0hUTUxEb2N1bWVudDo6SGVpZ2h0ICAgICAg
ICAgICAgRG9udERlbGV0ZXxSZWFkT25seQotICB3aWR0aCAgICAgICAgICAgICAgICAgSlNIVE1M
RG9jdW1lbnQ6OldpZHRoICAgICAgICAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKLSAgZGlyICAg
ICAgICAgICAgICAgICAgIEpTSFRNTERvY3VtZW50OjpEaXIgICAgICAgICAgICAgICBEb250RGVs
ZXRlCi0gIGRlc2lnbk1vZGUgICAgICAgICAgICBKU0hUTUxEb2N1bWVudDo6RGVzaWduTW9kZSAg
ICAgICAgRG9udERlbGV0ZQotI3BvdGVudGlhbGx5IG9ic29sZXRlIGFycmF5IHByb3BlcnRpZXMK
LSMgbGF5ZXJzCi0jIHBsdWdpbnMKLSMgdGFncwotI3BvdGVudGlhbGx5IG9ic29sZXRlIHByb3Bl
cnRpZXMKLSMgZW1iZWRzCi0jIGlkcwotQGVuZAotKi8KLQotSlNIVE1MRG9jdW1lbnQ6OkpTSFRN
TERvY3VtZW50KEV4ZWNTdGF0ZSogZXhlYywgSFRNTERvY3VtZW50ICpkKQotICA6IEpTRG9jdW1l
bnQoZXhlYywgZCkKLXsKLSAgICBzZXRQcm90b3R5cGUoSlNIVE1MRG9jdW1lbnRQcm90b3R5cGU6
OnNlbGYoZXhlYykpOwotfQotCi1KU1ZhbHVlICpKU0hUTUxEb2N1bWVudDo6bmFtZWRJdGVtR2V0
dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKLXsKLSAgSlNI
VE1MRG9jdW1lbnQgKnRoaXNPYmogPSBzdGF0aWNfY2FzdDxKU0hUTUxEb2N1bWVudCo+KHNsb3Qu
c2xvdEJhc2UoKSk7Ci0gIEhUTUxEb2N1bWVudCAmZG9jID0gKnN0YXRpY19jYXN0PEhUTUxEb2N1
bWVudCo+KHRoaXNPYmotPmltcGwoKSk7Ci0KLSAgU3RyaW5nIG5hbWUgPSBwcm9wZXJ0eU5hbWU7
Ci0gIFJlZlB0cjxIVE1MQ29sbGVjdGlvbj4gY29sbGVjdGlvbiA9IGRvYy5kb2N1bWVudE5hbWVk
SXRlbXMobmFtZSk7Ci0KLSAgaWYgKGNvbGxlY3Rpb24tPmxlbmd0aCgpID09IDEpIHsKLSAgICBO
b2RlKiBub2RlID0gY29sbGVjdGlvbi0+Zmlyc3RJdGVtKCk7Ci0gICAgRnJhbWUgKmZyYW1lOwot
ICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKGlmcmFtZVRhZykgJiYgKGZyYW1lID0gc3RhdGljX2Nh
c3Q8SFRNTElGcmFtZUVsZW1lbnQqPihub2RlKS0+Y29udGVudEZyYW1lKCkpKQotICAgICAgcmV0
dXJuIFdpbmRvdzo6cmV0cmlldmUoZnJhbWUpOwotICAgIHJldHVybiB0b0pTKGV4ZWMsIG5vZGUp
OwotICB9IGVsc2UgaWYgKGNvbGxlY3Rpb24tPmxlbmd0aCgpID09IDApCi0gICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKLQotICByZXR1cm4gZ2V0SFRNTENvbGxlY3Rpb24oZXhlYywgY29sbGVj
dGlvbi5nZXQoKSk7Ci19Ci0KLUpTVmFsdWUgKkpTSFRNTERvY3VtZW50OjpnZXRWYWx1ZVByb3Bl
cnR5KEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAotewotICBIVE1MRG9jdW1lbnQm
IGRvYyA9ICpzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQqPihpbXBsKCkpOwotCi0gIEZyYW1lVmll
dyogdmlldyA9IGRvYy52aWV3KCk7Ci0gIEZyYW1lKiBmcmFtZSA9IGRvYy5mcmFtZSgpOwotCi0g
IEhUTUxFbGVtZW50KiBib2R5ID0gZG9jLmJvZHkoKTsKLSAgSFRNTEJvZHlFbGVtZW50KiBib2R5
RWxlbWVudCA9IChib2R5ICYmIGJvZHktPmhhc1RhZ05hbWUoYm9keVRhZykpID8gc3RhdGljX2Nh
c3Q8SFRNTEJvZHlFbGVtZW50Kj4oYm9keSkgOiAwOwotICAgIAotICBzd2l0Y2ggKHRva2VuKSB7
Ci0gIGNhc2UgVGl0bGU6Ci0gICAgcmV0dXJuIGpzU3RyaW5nKGRvYy50aXRsZSgpKTsKLSAgY2Fz
ZSBSZWZlcnJlcjoKLSAgICByZXR1cm4ganNTdHJpbmcoZG9jLnJlZmVycmVyKCkpOwotICBjYXNl
IERvbWFpbjoKLSAgICByZXR1cm4ganNTdHJpbmcoZG9jLmRvbWFpbigpKTsKLSAgY2FzZSBCb2R5
OgotICAgIHJldHVybiB0b0pTKGV4ZWMsIGJvZHkpOwotICBjYXNlIExvY2F0aW9uOgotICAgIGlm
ICghZnJhbWUpCi0gICAgICByZXR1cm4ganNOdWxsKCk7Ci0gICAgaWYgKFdpbmRvdyogd2luID0g
V2luZG93OjpyZXRyaWV2ZVdpbmRvdyhmcmFtZSkpCi0gICAgICByZXR1cm4gd2luLT5sb2NhdGlv
bigpOwotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICBjYXNlIENvb2tpZToKLSAgICByZXR1
cm4ganNTdHJpbmcoZG9jLmNvb2tpZSgpKTsKLSAgY2FzZSBJbWFnZXM6Ci0gICAgcmV0dXJuIGdl
dEhUTUxDb2xsZWN0aW9uKGV4ZWMsIGRvYy5pbWFnZXMoKS5nZXQoKSk7Ci0gIGNhc2UgRW1iZWRz
OgotICAgIHJldHVybiBnZXRIVE1MQ29sbGVjdGlvbihleGVjLCBkb2MuZW1iZWRzKCkuZ2V0KCkp
OwotICBjYXNlIEFwcGxldHM6Ci0gICAgcmV0dXJuIGdldEhUTUxDb2xsZWN0aW9uKGV4ZWMsIGRv
Yy5hcHBsZXRzKCkuZ2V0KCkpOwotICBjYXNlIExpbmtzOgotICAgIHJldHVybiBnZXRIVE1MQ29s
bGVjdGlvbihleGVjLCBkb2MubGlua3MoKS5nZXQoKSk7Ci0gIGNhc2UgRm9ybXM6Ci0gICAgcmV0
dXJuIGdldEhUTUxDb2xsZWN0aW9uKGV4ZWMsIGRvYy5mb3JtcygpLmdldCgpKTsKLSAgY2FzZSBB
bmNob3JzOgotICAgIHJldHVybiBnZXRIVE1MQ29sbGVjdGlvbihleGVjLCBkb2MuYW5jaG9ycygp
LmdldCgpKTsKLSAgY2FzZSBTY3JpcHRzOgotICAgIHJldHVybiBnZXRIVE1MQ29sbGVjdGlvbihl
eGVjLCBkb2Muc2NyaXB0cygpLmdldCgpKTsKLSAgY2FzZSBBbGw6Ci0gICAgLy8gSWYgImFsbCIg
aGFzIGJlZW4gb3ZlcndyaXR0ZW4sIHJldHVybiB0aGUgb3ZlcndyaXR0ZW4gdmFsdWUKLSAgICBp
ZiAoSlNWYWx1ZSAqdiA9IGdldERpcmVjdCgiYWxsIikpCi0gICAgICByZXR1cm4gdjsKLSAgICBl
bHNlCi0gICAgICByZXR1cm4gZ2V0QWxsSFRNTENvbGxlY3Rpb24oZXhlYywgZG9jLmFsbCgpLmdl
dCgpKTsKLSAgY2FzZSBCZ0NvbG9yOgotICAgIGlmICghYm9keUVsZW1lbnQpCi0gICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKLSAgICByZXR1cm4ganNTdHJpbmcoYm9keUVsZW1lbnQtPmJnQ29s
b3IoKSk7Ci0gIGNhc2UgRmdDb2xvcjoKLSAgICBpZiAoIWJvZHlFbGVtZW50KQotICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgcmV0dXJuIGpzU3RyaW5nKGJvZHlFbGVtZW50LT50ZXh0
KCkpOwotICBjYXNlIEFsaW5rQ29sb3I6Ci0gICAgaWYgKCFib2R5RWxlbWVudCkKLSAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwotICAgIHJldHVybiBqc1N0cmluZyhib2R5RWxlbWVudC0+YUxp
bmsoKSk7Ci0gIGNhc2UgTGlua0NvbG9yOgotICAgIGlmICghYm9keUVsZW1lbnQpCi0gICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICByZXR1cm4ganNTdHJpbmcoYm9keUVsZW1lbnQtPmxp
bmsoKSk7Ci0gIGNhc2UgVmxpbmtDb2xvcjoKLSAgICBpZiAoIWJvZHlFbGVtZW50KQotICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgcmV0dXJuIGpzU3RyaW5nKGJvZHlFbGVtZW50LT52
TGluaygpKTsKLSAgY2FzZSBMYXN0TW9kaWZpZWQ6Ci0gICAgcmV0dXJuIGpzU3RyaW5nKGRvYy5s
YXN0TW9kaWZpZWQoKSk7Ci0gIGNhc2UgSGVpZ2h0OgotICAgIHJldHVybiBqc051bWJlcih2aWV3
ID8gdmlldy0+Y29udGVudHNIZWlnaHQoKSA6IDApOwotICBjYXNlIFdpZHRoOgotICAgIHJldHVy
biBqc051bWJlcih2aWV3ID8gdmlldy0+Y29udGVudHNXaWR0aCgpIDogMCk7Ci0gIGNhc2UgRGly
OgotICAgIGlmICghYm9keSkKLSAgICAgIHJldHVybiBqc1N0cmluZygiIik7Ci0gICAgcmV0dXJu
IGpzU3RyaW5nKGJvZHktPmRpcigpKTsKLSAgY2FzZSBEZXNpZ25Nb2RlOgotICAgIHJldHVybiBq
c1N0cmluZyhkb2MuaW5EZXNpZ25Nb2RlKCkgPyAib24iIDogIm9mZiIpOwotICBkZWZhdWx0Ogot
ICAgIEFTU0VSVCgwKTsKLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgfQotfQotCi1ib29s
IEpTSFRNTERvY3VtZW50OjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKLXsKLSAgSFRN
TERvY3VtZW50ICZkb2MgPSAqc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50Kj4oaW1wbCgpKTsKLQot
ICBTdHJpbmcgbmFtZSA9IHByb3BlcnR5TmFtZTsKLSAgaWYgKGRvYy5oYXNOYW1lZEl0ZW0obmFt
ZSkgfHwgZG9jLmhhc0RvY0V4dHJhTmFtZWRJdGVtKG5hbWUpKSB7Ci0gICAgc2xvdC5zZXRDdXN0
b20odGhpcywgbmFtZWRJdGVtR2V0dGVyKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHJl
dHVybiBnZXRTdGF0aWNWYWx1ZVNsb3Q8SlNIVE1MRG9jdW1lbnQsIEpTRG9jdW1lbnQ+KGV4ZWMs
ICZIVE1MRG9jdW1lbnRUYWJsZSwgdGhpcywgcHJvcGVydHlOYW1lLCBzbG90KTsKLX0KLQotdm9p
ZCBKU0hUTUxEb2N1bWVudDo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciAm
cHJvcGVydHlOYW1lLCBKU1ZhbHVlICp2YWx1ZSwgaW50IGF0dHIpCi17Ci0gICAgbG9va3VwUHV0
PEpTSFRNTERvY3VtZW50LCBKU0RvY3VtZW50PihleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBh
dHRyLCAmSFRNTERvY3VtZW50VGFibGUsIHRoaXMpOwotfQotCi12b2lkIEpTSFRNTERvY3VtZW50
OjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuLCBKU1ZhbHVlICp2
YWx1ZSwgaW50IC8qYXR0ciovKQotewotICBET01FeGNlcHRpb25UcmFuc2xhdG9yIGV4Y2VwdGlv
bihleGVjKTsKLSAgSFRNTERvY3VtZW50ICZkb2MgPSAqc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50
Kj4oaW1wbCgpKTsKLSAgSFRNTEVsZW1lbnQqIGJvZHkgPSBkb2MuYm9keSgpOwotICBIVE1MQm9k
eUVsZW1lbnQqIGJvZHlFbGVtZW50ID0gKGJvZHkgJiYgYm9keS0+aGFzVGFnTmFtZShib2R5VGFn
KSkgPyBzdGF0aWNfY2FzdDxIVE1MQm9keUVsZW1lbnQqPihib2R5KSA6IDA7Ci0KLSAgc3dpdGNo
ICh0b2tlbikgewotICBjYXNlIFRpdGxlOgotICAgIGRvYy5zZXRUaXRsZSh2YWx1ZVRvU3RyaW5n
V2l0aE51bGxDaGVjayhleGVjLCB2YWx1ZSkpOwotICAgIGJyZWFrOwotICBjYXNlIEJvZHk6Ci0g
ICAgZG9jLnNldEJvZHkodG9IVE1MRWxlbWVudCh2YWx1ZSksIGV4Y2VwdGlvbik7Ci0gICAgYnJl
YWs7Ci0gIGNhc2UgRG9tYWluOiAvLyBub3QgcGFydCBvZiB0aGUgRE9NCi0gICAgZG9jLnNldERv
bWFpbih2YWx1ZS0+dG9TdHJpbmcoZXhlYykpOwotICAgIGJyZWFrOwotICBjYXNlIENvb2tpZToK
LSAgICBkb2Muc2V0Q29va2llKHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKGV4ZWMsIHZhbHVl
KSk7Ci0gICAgYnJlYWs7Ci0gIGNhc2UgTG9jYXRpb246Ci0gICAgaWYgKEZyYW1lKiBmcmFtZSA9
IGRvYy5mcmFtZSgpKSB7Ci0gICAgICBEZXByZWNhdGVkU3RyaW5nIHN0ciA9IHZhbHVlLT50b1N0
cmluZyhleGVjKTsKLQotICAgICAgLy8gV2hlbiBhc3NpZ25pbmcgbG9jYXRpb24sIElFIGFuZCBN
b3ppbGxhIGJvdGggcmVzb2x2ZSB0aGUgVVJMCi0gICAgICAvLyByZWxhdGl2ZSB0byB0aGUgZnJh
bWUgd2hlcmUgdGhlIEphdmFTY3JpcHQgaXMgZXhlY3V0aW5nIG5vdAotICAgICAgLy8gdGhlIHRh
cmdldCBmcmFtZS4KLSAgICAgIEZyYW1lKiBhY3RpdmVGcmFtZSA9IHN0YXRpY19jYXN0PFNjcmlw
dEludGVycHJldGVyKj4oIGV4ZWMtPmR5bmFtaWNJbnRlcnByZXRlcigpICktPmZyYW1lKCk7Ci0g
ICAgICBpZiAoYWN0aXZlRnJhbWUpCi0gICAgICAgIHN0ciA9IGFjdGl2ZUZyYW1lLT5kb2N1bWVu
dCgpLT5jb21wbGV0ZVVSTChzdHIpOwotCi0gICAgICAvLyBXZSB3YW50IGEgbmV3IGhpc3Rvcnkg
aXRlbSBpZiB0aGlzIEpTIHdhcyBjYWxsZWQgdmlhIGEgdXNlciBnZXN0dXJlCi0gICAgICBib29s
IHVzZXJHZXN0dXJlID0gc3RhdGljX2Nhc3Q8U2NyaXB0SW50ZXJwcmV0ZXIqPihleGVjLT5keW5h
bWljSW50ZXJwcmV0ZXIoKSktPndhc1J1bkJ5VXNlckdlc3R1cmUoKTsKLSAgICAgIGZyYW1lLT5s
b2FkZXIoKS0+c2NoZWR1bGVMb2NhdGlvbkNoYW5nZShzdHIsIGFjdGl2ZUZyYW1lLT5sb2FkZXIo
KS0+b3V0Z29pbmdSZWZlcnJlcigpLCAhdXNlckdlc3R1cmUpOwotICAgIH0KLSAgICBicmVhazsK
LSAgY2FzZSBCZ0NvbG9yOgotICAgIGlmIChib2R5RWxlbWVudCkKLSAgICAgIGJvZHlFbGVtZW50
LT5zZXRCZ0NvbG9yKHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKGV4ZWMsIHZhbHVlKSk7Ci0g
ICAgYnJlYWs7Ci0gIGNhc2UgRmdDb2xvcjoKLSAgICBpZiAoYm9keUVsZW1lbnQpCi0gICAgICBi
b2R5RWxlbWVudC0+c2V0VGV4dCh2YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVjayhleGVjLCB2YWx1
ZSkpOwotICAgIGJyZWFrOwotICBjYXNlIEFsaW5rQ29sb3I6Ci0gICAgaWYgKGJvZHlFbGVtZW50
KSB7Ci0gICAgICAvLyB0aGlzIGNoZWNrIGlzIGEgYml0IHNpbGx5LCBidXQgc29tZSBiZW5jaG1h
cmtzIGxpa2UgdG8gc2V0IHRoZQotICAgICAgLy8gZG9jdW1lbnQncyBsaW5rIGNvbG9ycyBvdmVy
IGFuZCBvdmVyIHRvIHRoZSBzYW1lIHZhbHVlIGFuZCB3ZQotICAgICAgLy8gZG9uJ3Qgd2FudCB0
byBpbmN1ciBhIHN0eWxlIHVwZGF0ZSBlYWNoIHRpbWUuCi0gICAgICBTdHJpbmcgbmV3Q29sb3Ig
PSB2YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVjayhleGVjLCB2YWx1ZSk7Ci0gICAgICBpZiAoYm9k
eUVsZW1lbnQtPmFMaW5rKCkgIT0gbmV3Q29sb3IpCi0gICAgICAgIGJvZHlFbGVtZW50LT5zZXRB
TGluayhuZXdDb2xvcik7Ci0gICAgfQotICAgIGJyZWFrOwotICBjYXNlIExpbmtDb2xvcjoKLSAg
ICBpZiAoYm9keUVsZW1lbnQpIHsKLSAgICAgIC8vIHRoaXMgY2hlY2sgaXMgYSBiaXQgc2lsbHks
IGJ1dCBzb21lIGJlbmNobWFya3MgbGlrZSB0byBzZXQgdGhlCi0gICAgICAvLyBkb2N1bWVudCdz
IGxpbmsgY29sb3JzIG92ZXIgYW5kIG92ZXIgdG8gdGhlIHNhbWUgdmFsdWUgYW5kIHdlCi0gICAg
ICAvLyBkb24ndCB3YW50IHRvIGluY3VyIGEgc3R5bGUgdXBkYXRlIGVhY2ggdGltZS4KLSAgICAg
IFN0cmluZyBuZXdDb2xvciA9IHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKGV4ZWMsIHZhbHVl
KTsKLSAgICAgIGlmIChib2R5RWxlbWVudC0+bGluaygpICE9IG5ld0NvbG9yKQotICAgICAgICBi
b2R5RWxlbWVudC0+c2V0TGluayhuZXdDb2xvcik7Ci0gICAgfQotICAgIGJyZWFrOwotICBjYXNl
IFZsaW5rQ29sb3I6Ci0gICAgaWYgKGJvZHlFbGVtZW50KSB7Ci0gICAgICAvLyB0aGlzIGNoZWNr
IGlzIGEgYml0IHNpbGx5LCBidXQgc29tZSBiZW5jaG1hcmtzIGxpa2UgdG8gc2V0IHRoZQotICAg
ICAgLy8gZG9jdW1lbnQncyBsaW5rIGNvbG9ycyBvdmVyIGFuZCBvdmVyIHRvIHRoZSBzYW1lIHZh
bHVlIGFuZCB3ZQotICAgICAgLy8gZG9uJ3Qgd2FudCB0byBpbmN1ciBhIHN0eWxlIHVwZGF0ZSBl
YWNoIHRpbWUuCi0gICAgICBTdHJpbmcgbmV3Q29sb3IgPSB2YWx1ZVRvU3RyaW5nV2l0aE51bGxD
aGVjayhleGVjLCB2YWx1ZSk7Ci0gICAgICBpZiAoYm9keUVsZW1lbnQtPnZMaW5rKCkgIT0gbmV3
Q29sb3IpCi0gICAgICAgIGJvZHlFbGVtZW50LT5zZXRWTGluayhuZXdDb2xvcik7Ci0gICAgfQot
ICAgIGJyZWFrOwotICBjYXNlIERpcjoKLSAgICBpZiAoYm9keSkKLSAgICAgIGJvZHktPnNldERp
cih2YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVjayhleGVjLCB2YWx1ZSkpOwotICAgIGJyZWFrOwot
ICBjYXNlIERlc2lnbk1vZGU6Ci0gICAgewotICAgICAgU3RyaW5nIG1vZGVTdHJpbmcgPSB2YWx1
ZVRvU3RyaW5nV2l0aE51bGxDaGVjayhleGVjLCB2YWx1ZSk7Ci0gICAgICBEb2N1bWVudDo6SW5o
ZXJpdGVkQm9vbCBtb2RlOwotICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG1vZGVTdHJpbmcs
ICJvbiIpKQotICAgICAgICBtb2RlID0gRG9jdW1lbnQ6Om9uOwotICAgICAgZWxzZSBpZiAoZXF1
YWxJZ25vcmluZ0Nhc2UobW9kZVN0cmluZywgIm9mZiIpKQotICAgICAgICBtb2RlID0gRG9jdW1l
bnQ6Om9mZjsKLSAgICAgIGVsc2UKLSAgICAgICAgbW9kZSA9IERvY3VtZW50Ojppbmhlcml0Owot
ICAgICAgZG9jLnNldERlc2lnbk1vZGUobW9kZSk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIGNh
c2UgQWxsOgotICAgIC8vIEFkZCAiYWxsIiB0byB0aGUgcHJvcGVydHkgbWFwLgotICAgIHB1dERp
cmVjdCgiYWxsIiwgdmFsdWUpOwotICAgIGJyZWFrOwotICB9Ci19Ci0KLS8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLQogY29uc3QgQ2xhc3NJbmZvIEpTSFRNTEVsZW1lbnQ6OmluZm8gPSB7ICJIVE1MRWxl
bWVudCIsICZKU0VsZW1lbnQ6OmluZm8sICZIVE1MRWxlbWVudFRhYmxlLCAwIH07CiAKIGNvbnN0
IENsYXNzSW5mbyBKU0hUTUxFbGVtZW50OjplbWJlZF9pbmZvID0geyAiSFRNTEVtYmVkRWxlbWVu
dCIsICZKU0hUTUxFbGVtZW50OjppbmZvLCAmSFRNTEVtYmVkRWxlbWVudFRhYmxlLCAwIH07Cklu
ZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19odG1sLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy9qcy9ranNfaHRtbC5oCShyZXZpc2lvbiAyMTY1NCkKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvanMva2pzX2h0bWwuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMjUgKzM3LDYgQEAgbmFt
ZXNwYWNlIEtKUyB7CiAKICAgY2xhc3MgSlNBYnN0cmFjdEV2ZW50TGlzdGVuZXI7CiAKLSAgS0pT
X0RFRklORV9QUk9UT1RZUEVfV0lUSF9QUk9UT1RZUEUoSlNIVE1MRG9jdW1lbnRQcm90b3R5cGUs
IFdlYkNvcmU6OkpTRG9jdW1lbnRQcm90b3R5cGUpCi0KLSAgY2xhc3MgSlNIVE1MRG9jdW1lbnQg
OiBwdWJsaWMgV2ViQ29yZTo6SlNEb2N1bWVudCB7Ci0gIHB1YmxpYzoKLSAgICBKU0hUTUxEb2N1
bWVudChFeGVjU3RhdGUqLCBXZWJDb3JlOjpIVE1MRG9jdW1lbnQqKTsKLSAgICB2aXJ0dWFsIGJv
b2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9w
ZXJ0eVNsb3QmKTsKLSAgICBKU1ZhbHVlKiBnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSosIGlu
dCB0b2tlbikgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqLCBjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqLCBpbnQgYXR0ciA9IE5vbmUpOwotICAg
IHZvaWQgcHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUqLCBpbnQgdG9rZW4sIEpTVmFsdWUqLCBp
bnQgLyphdHRyKi8pOwotICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBj
b25zdCB7IHJldHVybiAmaW5mbzsgfQotICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsK
LSAgICBlbnVtIHsgVGl0bGUsIFJlZmVycmVyLCBEb21haW4sIEJvZHksIExvY2F0aW9uLCBDb29r
aWUsCi0gICAgICAgICAgIEltYWdlcywgQXBwbGV0cywgRW1iZWRzLCBMaW5rcywgRm9ybXMsIEFu
Y2hvcnMsIFNjcmlwdHMsIEFsbCwgQ2xlYXIsIE9wZW4sIENsb3NlLAotICAgICAgICAgICBXcml0
ZSwgV3JpdGVMbiwgR2V0RWxlbWVudHNCeU5hbWUsIENhcHR1cmVFdmVudHMsIFJlbGVhc2VFdmVu
dHMsCi0gICAgICAgICAgIEJnQ29sb3IsIEZnQ29sb3IsIEFsaW5rQ29sb3IsIExpbmtDb2xvciwg
VmxpbmtDb2xvciwgTGFzdE1vZGlmaWVkLCBIZWlnaHQsIFdpZHRoLCBEaXIsIERlc2lnbk1vZGUg
fTsKLSAgcHJpdmF0ZToKLSAgICBzdGF0aWMgSlNWYWx1ZSogbmFtZWRJdGVtR2V0dGVyKEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYp
OwotICB9OwotCiAgIC8vIFRoZSBpbmhlcml0YW5jZSBjaGFpbiBmb3IgSlNIVE1MRWxlbWVudCBp
cyBhIGJpdCBkaWZmZXJlbnQgZnJvbSBvdGhlcgogICAvLyBjbGFzc2VzIHRoYXQgYXJlICJoYWxm
LWF1dG9nZW5lcmF0ZWQiLiBCZWNhdXNlIHdlIHJldHVybiBkaWZmZXJlbnQgQ2xhc3NJbmZvIHN0
cnVjdHMKICAgLy8gZGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mIGVsZW1lbnQsIHdlIGluaGVyaXQg
SlNIVE1MRWxlbWVudCBmcm9tIFdlYkNvcmU6OkpTSFRNTEVsZW1lbnQKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gMjE2NTQpCisr
KyBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3JraW5nIGNv
cHkpCkBAIC0zLDcgKzMsNyBAQAogIyBDb3B5cmlnaHQgKEMpIDIwMDYgQW5kZXJzIENhcmxzc29u
IDxhbmRlcnNjYUBtYWMuY29tPgogIyBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgU2FtdWVsIFdl
aW5pZyA8c2FtQHdlYmtpdC5vcmc+CiAjIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1
cnlha292IDxhcEB3ZWJraXQub3JnPgotIyBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0
ZXIsIEluYy4KKyMgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CiAj
CkBAIC01NzIsOCArNTcyLDEwIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFdLX3VjZmlyc3QoJGF0dHJpYnV0ZS0+
c2lnbmF0dXJlLT5uYW1lKSAuICJBdHRyTnVtIik7CiAgICAgICAgICAgICBwdXNoKEBoYXNoVmFs
dWVzLCAkdmFsdWUpOwogCi0gICAgICAgICAgICBteSAkc3BlY2lhbCA9ICJEb250RGVsZXRlIjsK
LSAgICAgICAgICAgICRzcGVjaWFsIC49ICJ8UmVhZE9ubHkiIGlmICgkYXR0cmlidXRlLT50eXBl
ID1+IC9yZWFkb25seS8pOworICAgICAgICAgICAgbXkgQHNwZWNpYWxzID0gKCk7CisgICAgICAg
ICAgICBwdXNoKEBzcGVjaWFscywgIkRvbnREZWxldGUiKSB1bmxlc3MgJGF0dHJpYnV0ZS0+c2ln
bmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRGVsZXRhdGFibGUifTsKKyAgICAgICAgICAg
IHB1c2goQHNwZWNpYWxzLCAiUmVhZE9ubHkiKSBpZiAkYXR0cmlidXRlLT50eXBlID1+IC9yZWFk
b25seS87CisgICAgICAgICAgICBteSAkc3BlY2lhbCA9IGpvaW4oInwiLCBAc3BlY2lhbHMpOwog
ICAgICAgICAgICAgcHVzaChAaGFzaFNwZWNpYWxzLCAkc3BlY2lhbCk7CiAKICAgICAgICAgICAg
IG15ICRudW1QYXJhbWV0ZXJzID0gIjAiOwpAQCAtNjUyLDcgKzY1NCwxMCBAQCBzdWIgR2VuZXJh
dGVJbXBsZW1lbnRhdGlvbgogICAgICAgICBteSAkdmFsdWUgPSAkY2xhc3NOYW1lIC4gIjo6IiAu
IFdLX3VjZmlyc3QoJG5hbWUpIC4gIkZ1bmNOdW0iOwogICAgICAgICBwdXNoKEBoYXNoVmFsdWVz
LCAkdmFsdWUpOwogCi0gICAgICAgIG15ICRzcGVjaWFsID0gIkRvbnREZWxldGV8RnVuY3Rpb24i
OworICAgICAgICBteSBAc3BlY2lhbHMgPSAoKTsKKyAgICAgICAgcHVzaChAc3BlY2lhbHMsICJE
b250RGVsZXRlIikgdW5sZXNzICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiRGVsZXRhdGFibGUifTsKKyAgICAgICAgcHVzaChAc3BlY2lhbHMsICJGdW5jdGlvbiIp
OworICAgICAgICBteSAkc3BlY2lhbCA9IGpvaW4oInwiLCBAc3BlY2lhbHMpOwogICAgICAgICBw
dXNoKEBoYXNoU3BlY2lhbHMsICRzcGVjaWFsKTsKIAogICAgICAgICBteSAkbnVtUGFyYW1ldGVy
cyA9IEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfTsKQEAgLTc4NSwxMiArNzkwLDYgQEAgc3ViIEdl
bmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IH1cbiIpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57Ikhhc05hbWVHZXR0ZXIifSB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJIYXNPdmVycmlkaW5nTmFtZUdldHRlciJ9KSB7Ci0gICAgICAgICAgICAjIGlmIGl0IGhh
cyBhIHByb3RvdHlwZSwgd2UgbmVlZCB0byBjaGVjayB0aGF0IGZpcnN0IHRvbwotICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKHByb3RvdHlwZSgpLT5pc09iamVjdCgpICYm
IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4ocHJvdG90eXBlKCkpLT5oYXNQcm9wZXJ0eShleGVjLCBw
cm9wZXJ0eU5hbWUpKVxuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAg
ICAgcmV0dXJuIGZhbHNlO1xuIik7Ci0gICAgICAgIH0KLQogICAgICAgICBpZiAoJGRhdGFOb2Rl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSGFzSW5kZXhHZXR0ZXIifSkgewogICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgYm9vbCBvaztcbiIpOwogICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgdW5zaWduZWQgdSA9IHByb3BlcnR5TmFtZS50b1VJbnQzMigmb2sp
O1xuIik7CkBAIC0xNDIyLDggKzE0MjEsMTMgQEAgc3ViIE5hdGl2ZVRvSlNWYWx1ZQogICAgIH0g
ZWxzaWYgKCR0eXBlIGVxICJFdmVudCIpIHsKICAgICAgICAgJGltcGxJbmNsdWRlc3sia2pzX2V2
ZW50cy5oIn0gPSAxOwogICAgICAgICAkaW1wbEluY2x1ZGVzeyJFdmVudC5oIn0gPSAxOwotICAg
IH0gZWxzaWYgKCR0eXBlIGVxICJOb2RlTGlzdCIgb3IgJHR5cGUgZXEgIk5hbWVkTm9kZU1hcCIp
IHsKKyAgICB9IGVsc2lmICgkdHlwZSBlcSAiTm9kZUxpc3QiKSB7CisgICAgICAgICRpbXBsSW5j
bHVkZXN7Imtqc19kb20uaCJ9ID0gMTsKKyAgICAgICAgJGltcGxJbmNsdWRlc3siTm9kZUxpc3Qu
aCJ9ID0gMTsKKyAgICAgICAgJGltcGxJbmNsdWRlc3siTmFtZU5vZGVMaXN0LmgifSA9IDE7Cisg
ICAgfSBlbHNpZiAoJHR5cGUgZXEgIk5hbWVkTm9kZU1hcCIpIHsKICAgICAgICAgJGltcGxJbmNs
dWRlc3sia2pzX2RvbS5oIn0gPSAxOworICAgICAgICAkaW1wbEluY2x1ZGVzeyJOYW1lZE5vZGVN
YXAuaCJ9ID0gMTsKICAgICB9IGVsc2lmICgkdHlwZSBlcSAiQ1NTU3R5bGVTaGVldCIgb3IgJHR5
cGUgZXEgIlN0eWxlU2hlZXQiIG9yICR0eXBlIGVxICJNZWRpYUxpc3QiKSB7CiAgICAgICAgICRp
bXBsSW5jbHVkZXN7IkNTU1N0eWxlU2hlZXQuaCJ9ID0gMTsKICAgICAgICAgJGltcGxJbmNsdWRl
c3siTWVkaWFMaXN0LmgifSA9IDE7CkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAyMTY1NCkKKysr
IFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMyOSw2ICszMzI5
LDEyIEBAIFBhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IERvY3VtZW50OjplbWIKICAgICByZXR1
cm4gbmV3IEhUTUxDb2xsZWN0aW9uKHRoaXMsIEhUTUxDb2xsZWN0aW9uOjpEb2NFbWJlZHMpOwog
fQogCitQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBEb2N1bWVudDo6cGx1Z2lucygpCit7Cisg
ICAgLy8gVGhpcyBpcyBhbiBhbGlhcyBmb3IgZW1iZWRzKCkgcmVxdWlyZWQgZm9yIHRoZSBKUyBE
T00gYmluZGluZ3MuCisgICAgcmV0dXJuIG5ldyBIVE1MQ29sbGVjdGlvbih0aGlzLCBIVE1MQ29s
bGVjdGlvbjo6RG9jRW1iZWRzKTsKK30KKwogUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gRG9j
dW1lbnQ6Om9iamVjdHMoKQogewogICAgIHJldHVybiBuZXcgSFRNTENvbGxlY3Rpb24odGhpcywg
SFRNTENvbGxlY3Rpb246OkRvY09iamVjdHMpOwpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiAyMTY1NCkK
KysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIwNyw2ICsyMDcs
NyBAQCBwdWJsaWM6CiAKICAgICBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBpbWFnZXMoKTsK
ICAgICBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBlbWJlZHMoKTsKKyAgICBQYXNzUmVmUHRy
PEhUTUxDb2xsZWN0aW9uPiBwbHVnaW5zKCk7IC8vIGFuIGFsaWFzIGZvciBlbWJlZHMoKSByZXF1
aXJlZCBmb3IgdGhlIEpTIERPTSBiaW5kaW5ncy4KICAgICBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0
aW9uPiBhcHBsZXRzKCk7CiAgICAgUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gbGlua3MoKTsK
ICAgICBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBmb3JtcygpOwpJbmRleDogV2ViQ29yZS9o
dG1sL0hUTUxEb2N1bWVudC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxEb2N1
bWVudC5pZGwJKHJldmlzaW9uIDIxNjU0KQorKysgV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5p
ZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVl
bCBXZWluaWcgPHNhbS53ZWluaWdAZ21haWwuY29tPgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIwLDExICsy
MCwxNCBAQAogCiBtb2R1bGUgaHRtbCB7CiAKLSAgICBpbnRlcmZhY2UgW0xlZ2FjeVBhcmVudD1L
SlM6OkpTSFRNTERvY3VtZW50LCBHZW5lcmF0ZUNvbnN0cnVjdG9yXSBIVE1MRG9jdW1lbnQgOiBE
b2N1bWVudCB7Ci0jaWYgIWRlZmluZWQoTEFOR1VBR0VfSkFWQVNDUklQVCkKKyAgICBpbnRlcmZh
Y2UgW0dlbmVyYXRlQ29uc3RydWN0b3IsIEhhc092ZXJyaWRpbmdOYW1lR2V0dGVyXSBIVE1MRG9j
dW1lbnQgOiBEb2N1bWVudCB7CiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBbQ29udmVydE51
bGxUb051bGxTdHJpbmddIERPTVN0cmluZyB0aXRsZTsKICAgICAgICAgcmVhZG9ubHkgYXR0cmli
dXRlIERPTVN0cmluZyByZWZlcnJlcjsKKyNpZiBkZWZpbmVkKExBTkdVQUdFX0pBVkFTQ1JJUFQp
CisgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgZG9tYWluOworI2Vsc2UKICAg
ICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBkb21haW47CisjZW5kaWYKICAgICAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBVUkw7CiAgICAgICAgICAgICAgICAgCiAg
ICAgICAgIC8vIEZJWE1FOiB0aGUgRE9NIHNwZWMgZG9lcyBOT1QgaGF2ZSB0aGlzIGF0dHJpYnV0
ZQpAQCAtNDMsMTUgKzQ2LDQzIEBAIG1vZHVsZSBodG1sIHsKICAgICAgICAgICAgICAgICAgYXR0
cmlidXRlIFtDb252ZXJ0TnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIGNvb2tpZQogICAgICAg
ICAgICAgICAgICAgICAgLypzZXR0ZXIgcmFpc2VzIChET01FeGNlcHRpb24pKi87CiAKLSAgICAg
ICAgdm9pZCAgICAgICAgICAgICAgIG9wZW4oKTsKLSAgICAgICAgdm9pZCAgICAgICAgICAgICAg
IGNsb3NlKCk7Ci0gICAgICAgIHZvaWQgICAgICAgICAgICAgICB3cml0ZShpbiBET01TdHJpbmcg
dGV4dCk7Ci0gICAgICAgIHZvaWQgICAgICAgICAgICAgICB3cml0ZWxuKGluIERPTVN0cmluZyB0
ZXh0KTsKLSAgICAgICAgTm9kZUxpc3QgICAgICAgICAgIGdldEVsZW1lbnRzQnlOYW1lKGluIERP
TVN0cmluZyBlbGVtZW50TmFtZSk7CisgICAgICAgIFtDdXN0b21dIHZvaWQgb3BlbigpOworICAg
ICAgICB2b2lkIGNsb3NlKCk7CisgICAgICAgIFtDdXN0b21dIHZvaWQgd3JpdGUoaW4gRE9NU3Ry
aW5nIHRleHQpOworICAgICAgICBbQ3VzdG9tXSB2b2lkIHdyaXRlbG4oaW4gRE9NU3RyaW5nIHRl
eHQpOworICAgICAgICBOb2RlTGlzdCBnZXRFbGVtZW50c0J5TmFtZShpbiBET01TdHJpbmcgZWxl
bWVudE5hbWUpOworCisgICAgICAgIC8vIEV4dGVuc2lvbnMKKyAgICAgICAgRWxlbWVudCBnZXRF
bGVtZW50QnlJZChpbiBET01TdHJpbmcgZWxlbWVudElkKTsKKworICAgICAgICByZWFkb25seSBh
dHRyaWJ1dGUgSFRNTENvbGxlY3Rpb24gZW1iZWRzOworICAgICAgICByZWFkb25seSBhdHRyaWJ1
dGUgSFRNTENvbGxlY3Rpb24gcGx1Z2luczsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIEhU
TUxDb2xsZWN0aW9uIHNjcmlwdHM7CiAKLSAgICAgICAgLy8gbm9uLXN0YW5kYXJkCisgICAgICAg
IHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgbGFzdE1vZGlmaWVkOwogCi0gICAgICAgIEVs
ZW1lbnQgICAgICAgICAgICBnZXRFbGVtZW50QnlJZChpbiBET01TdHJpbmcgZWxlbWVudElkKTsK
KyNpZiBkZWZpbmVkKExBTkdVQUdFX0pBVkFTQ1JJUFQpCisgICAgICAgIC8vIEZJWE1FOiBUaGVz
ZSBzaG91bGQgZXZlbnR1YWxseSBiZSBhdmFpbGFibGUgKGlmIHRoZXkgYXJlIHdhbnRlZCkgZm9y
IGFsbCBsYW5ndWFnZXMuCisKKyAgICAgICAgICAgICAgICAgYXR0cmlidXRlIFtDdXN0b20sIERl
bGV0YWJsZV0gSFRNTENvbGxlY3Rpb24gYWxsOworICAgICAgICAKKyAgICAgICAgW0N1c3RvbV0g
dm9pZCBjbGVhcigpOworICAgICAgICBbQ3VzdG9tXSB2b2lkIGNhcHR1cmVFdmVudHMoKTsKKyAg
ICAgICAgW0N1c3RvbV0gdm9pZCByZWxlYXNlRXZlbnRzKCk7CisKKyAgICAgICAgICAgICAgICAg
YXR0cmlidXRlIFtDdXN0b21dIFdpbmRvdyBsb2NhdGlvbjsKKworICAgICAgICByZWFkb25seSBh
dHRyaWJ1dGUgW0N1c3RvbV0gbG9uZyB3aWR0aDsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRl
IFtDdXN0b21dIGxvbmcgaGVpZ2h0OworICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgW0N1c3Rv
bSwgQ29udmVydE51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyBkaXI7CisgICAgICAgICAgICAg
ICAgIGF0dHJpYnV0ZSBbQ3VzdG9tLCBDb252ZXJ0TnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5n
IGRlc2lnbk1vZGU7CisKKyAgICAgICAgLy8gRGVwcmVjYXRlZCBhdHRyaWJ1dGVzCisgICAgICAg
ICAgICAgICAgIGF0dHJpYnV0ZSBbQ3VzdG9tLCBDb252ZXJ0TnVsbFRvTnVsbFN0cmluZ10gRE9N
U3RyaW5nIGJnQ29sb3I7CisgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBbQ3VzdG9tLCBDb252
ZXJ0TnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIGZnQ29sb3I7CisgICAgICAgICAgICAgICAg
IGF0dHJpYnV0ZSBbQ3VzdG9tLCBDb252ZXJ0TnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIGFs
aW5rQ29sb3I7CisgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBbQ3VzdG9tLCBDb252ZXJ0TnVs
bFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIGxpbmtDb2xvcjsKKyAgICAgICAgICAgICAgICAgYXR0
cmlidXRlIFtDdXN0b20sIENvbnZlcnROdWxsVG9OdWxsU3RyaW5nXSBET01TdHJpbmcgdmxpbmtD
b2xvcjsKICNlbmRpZgogICAgIH07CiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxNjU1KQorKysgTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMDct
MDUtMjIgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGUgdGVzdHMgZm9yIGh0dHA6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzODMwCisgICAgICAgIEF1dG8tZ2VuZXJhdGUg
SlMgRE9NIGJpbmRpbmdzIGZvciBIVE1MRG9jdW1lbnQgYW5kIG1vc3Qgb2YgCisgICAgICAgIHRo
ZSByZXN0IG9mIEhUTUxFbGVtZW50CisKKyAgICAgICAgLSBDb3JyZWN0cyBwcm90b3R5cGUgY2hh
aW4gZm9yIEpTSFRNTERvY3VtZW50IGFuZCBhZGRzIHRlc3QKKyAgICAgICAgICBmb3IgSFRNTEZv
cm1FbGVtZW50LgorCisgICAgICAgICogZmFzdC9kb20vcHJvdG90eXBlLWNoYWluLWV4cGVjdGVk
LnR4dDoKKyAgICAgICAgKiBmYXN0L2RvbS9wcm90b3R5cGUtY2hhaW4uaHRtbDoKKwogMjAwNy0w
NS0yMiAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IEFkYW0uCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9wcm90b3R5cGUtY2hhaW4tZXhwZWN0
ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL3Byb3RvdHlwZS1jaGFp
bi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDIxNjU0KQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20v
cHJvdG90eXBlLWNoYWluLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMiw3ICsyLDcg
QEAgVGhpcyBwYWdlIHByaW50cyBvdXQgdGhlIHByb3RvdHlwZSBjaGFpbgogCiBOT1RFOiBUaGlz
IHRlc3Qgd2lsbCBzdGFydCBmYWlsaW5nIGlmIHlvdSBjaGFuZ2UgdGhlIGxheW91dCBvZiBhIHJl
bGF0ZWQgcHJvdG90eXBlIGNoYWluIGluIFdlYkNvcmUuIFRoYXQgZG9lcyBub3QgbmVjZXNzYXJp
bHkgbWVhbiB0aGF0IHlvdSBoYXZlIGRvbmUgc29tZXRoaW5nIHdyb25nOyB5b3UgbWF5IGp1c3Qg
bmVlZCB0byBjaGVjayBpbiBuZXcgcmVzdWx0cy4KIAotLS0tLS0gW29iamVjdCBIVE1MRG9jdW1l
bnRdICg3IHByb3RvdHlwZXMpIC0tLS0tCistLS0tLSBbb2JqZWN0IEhUTUxEb2N1bWVudF0gKDYg
cHJvdG90eXBlcykgLS0tLS0KIAogW29iamVjdCBPYmplY3RdCiAKQEAgLTE0LDggKzE0LDYgQEAg
Tk9URTogVGhpcyB0ZXN0IHdpbGwgc3RhcnQgZmFpbGluZyBpZiB5bwogCiBbb2JqZWN0IERvY3Vt
ZW50UHJvdG90eXBlXQogCi1bb2JqZWN0IERPTUhUTUxEb2N1bWVudFByb3RvdHlwZV0KLQogW29i
amVjdCBIVE1MRG9jdW1lbnRQcm90b3R5cGVdCiAKIC0tLS0tIFtvYmplY3QgSFRNTERpdkVsZW1l
bnRdICg4IHByb3RvdHlwZXMpIC0tLS0tCkBAIC0zNiw2ICszNCwyNCBAQCBOT1RFOiBUaGlzIHRl
c3Qgd2lsbCBzdGFydCBmYWlsaW5nIGlmIHlvCiAKIFtvYmplY3QgSFRNTERpdkVsZW1lbnRQcm90
b3R5cGVdCiAKKy0tLS0tIFtvYmplY3QgSFRNTEZvcm1FbGVtZW50XSAoOCBwcm90b3R5cGVzKSAt
LS0tLQorCitbb2JqZWN0IE9iamVjdF0KKworW29iamVjdCBET01Ob2RlUHJvdG90eXBlXQorCitb
b2JqZWN0IE5vZGVQcm90b3R5cGVdCisKK1tvYmplY3QgRE9NRXZlbnRUYXJnZXROb2RlUHJvdG90
eXBlXQorCitbb2JqZWN0IEVsZW1lbnRQcm90b3R5cGVdCisKK1tvYmplY3QgSFRNTEVsZW1lbnRQ
cm90b3R5cGVdCisKK1tvYmplY3QgSFRNTEVsZW1lbnRQcm90b3R5cGVdCisKK1tvYmplY3QgSFRN
TEZvcm1FbGVtZW50UHJvdG90eXBlXQorCiAtLS0tLSBbb2JqZWN0IFVJRXZlbnRdICg0IHByb3Rv
dHlwZXMpIC0tLS0tCiAKIFtvYmplY3QgT2JqZWN0XQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9k
b20vcHJvdG90eXBlLWNoYWluLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9k
b20vcHJvdG90eXBlLWNoYWluLmh0bWwJKHJldmlzaW9uIDIxNjU0KQorKysgTGF5b3V0VGVzdHMv
ZmFzdC9kb20vcHJvdG90eXBlLWNoYWluLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2
LDkgQEAgZnVuY3Rpb24gdGVzdCgpCiAgICAgCiAgICAgZSA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJkaXYiKTsKICAgICBwcmludFByb3RvdHlwZXMoZSk7CisKKyAgICBlID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgiZm9ybSIpOworICAgIHByaW50UHJvdG90eXBlcyhlKTsKICAgICAKICAg
ICBlID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoIlVJRXZlbnRzIik7CiAgICAgcHJpbnRQcm90b3R5
cGVzKGUpOwo=
</data>
<flag name="review"
          id="6029"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>14692</attachid>
            <date>2007-05-23 11:43:47 -0700</date>
            <delta_ts>2007-05-23 15:54:47 -0700</delta_ts>
            <desc>Updated JSHTMLDocument patch</desc>
            <filename>autoHTMLDocument2.diff</filename>
            <type>text/plain</type>
            <size>52661</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMTY3MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjEgQEAKKzIwMDctMDUtMjMgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXJ0IHR3
byBvZiBwYXRjaCBmb3IgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM4
MzAKKyAgICAgICAgQXV0by1nZW5lcmF0ZSBKUyBET00gYmluZGluZ3MgZm9yIEhUTUxEb2N1bWVu
dCBhbmQgbW9zdCBvZiB0aGUgcmVzdAorICAgICAgICBvZiBIVE1MRWxlbWVudAorCisgICAgICAg
IC0gSnVzdCB0aGUgSFRNTERvY3VtZW50IHBhcnQuCisKKyAgICAgICAgKiBXZWJDb3JlLnBybzoK
KyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNIVE1MRG9jdW1lbnRDdXN0b20uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkpTSFRNTERvY3VtZW50OjpjYW5HZXRJdGVtc0Zvck5hbWUpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNIVE1MRG9jdW1lbnQ6Om5hbWVHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNI
VE1MRG9jdW1lbnQ6OmFsbCk6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxEb2N1bWVudDo6c2V0
QWxsKToKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTERvY3VtZW50Ojpsb2NhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpKU0hUTUxEb2N1bWVudDo6c2V0TG9jYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6SlNIVE1MRG9jdW1lbnQ6Om9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVIZWxw
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MRG9jdW1lbnQ6OndyaXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTSFRNTERvY3VtZW50Ojp3cml0ZWxuKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
SFRNTERvY3VtZW50OjpjbGVhcik6CisgICAgICAgICogYmluZGluZ3MvanMva2pzX2RvbS5jcHA6
CisgICAgICAgIChLSlM6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL2tqc19kb20uaDoK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9ranNfaHRtbC5jcHA6CisgICAgICAgICogYmluZGluZ3Mv
anMva2pzX2h0bWwuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9vYmpjL0RPTVByaXZhdGUuaDoKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbTogQWRkIFtEZWxldGFi
bGVdIHByb3BlcnR5CisgICAgICAgIGZvciBEb2N1bWVudC5hbGwgYW5kIGZpeCBIYXNPdmVycmlk
aW5nTmFtZUdldHRlciB0byBhbGxvdyBjb3JyZWN0CisgICAgICAgIHByb3RvdHlwZSBjaGFpbgor
ICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6
cGx1Z2lucyk6IGFkZHMgYWxpYXMgdG8gZW1iZWRzKCkgZm9yIGJpbmRpbmdzCisgICAgICAgICog
ZG9tL0RvY3VtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MRG9jdW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTERvY3VtZW50Ojp3aWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
RG9jdW1lbnQ6OmhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnQ6OmRpcik6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnQ6OnNldERpcik6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MRG9jdW1lbnQ6OmRlc2lnbk1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERv
Y3VtZW50OjpzZXREZXNpZ25Nb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudDo6
YmdDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnQ6OnNldEJnQ29sb3IpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTERvY3VtZW50OjpmZ0NvbG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxEb2N1bWVudDo6c2V0RmdDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9j
dW1lbnQ6OmFsaW5rQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERvY3VtZW50OjpzZXRB
bGlua0NvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudDo6bGlua0NvbG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudDo6c2V0TGlua0NvbG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxEb2N1bWVudDo6dmxpbmtDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MRG9jdW1lbnQ6OnNldFZsaW5rQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERvY3Vt
ZW50OjpjYXB0dXJlRXZlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudDo6cmVs
ZWFzZUV2ZW50cyk6CisgICAgICAgICogaHRtbC9IVE1MRG9jdW1lbnQuaDoKKyAgICAgICAgKiBo
dG1sL0hUTUxEb2N1bWVudC5pZGw6CisKIDIwMDctMDUtMjMgIFBhdHRpICA8cGF0dGlAYXBwbGUu
Y29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmlkIEhhcnJpc29uLgpJbmRleDogV2ViQ29y
ZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUucHJvCShyZXZpc2lv
biAyMTY3MSkKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTI2Nyw2
ICsyNjcsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBiaW5kaW5ncy9qcy9KU0N1c3RvbVhQYXRoTlNS
ZXNvbHZlci5jcHAgXAogICAgIGJpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwIFwKICAg
ICBiaW5kaW5ncy9qcy9KU0hUTUxBbmNob3JFbGVtZW50Q3VzdG9tLmNwcCBcCisgICAgYmluZGlu
Z3MvanMvSlNIVE1MRG9jdW1lbnRDdXN0b20uY3BwIFwKICAgICBiaW5kaW5ncy9qcy9KU0hUTUxF
bGVtZW50V3JhcHBlckZhY3RvcnkuY3BwIFwKICAgICBiaW5kaW5ncy9qcy9KU0hUTUxGb3JtRWxl
bWVudEN1c3RvbS5jcHAgXAogICAgIGJpbmRpbmdzL2pzL0pTSFRNTElucHV0RWxlbWVudEJhc2Uu
Y3BwIFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShy
ZXZpc2lvbiAyMTY3MSkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNzc0LDYgKzI3NzQsNyBAQAogCQlCQzUxNTZGNDBDMDNC
N0RDMDA4QkIwRUUgLyogRE9NSFRNTEZyYW1lRWxlbWVudFByaXZhdGUuaCBpbiBDb3B5IEdlbmVy
YXRlZCBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNTE1NkYz
MEMwM0I3REMwMDhCQjBFRSAvKiBET01IVE1MRnJhbWVFbGVtZW50UHJpdmF0ZS5oICovOyB9Owog
CQlCQzUxNTc5RjBDMDNCQkQzMDA4QkIwRUUgLyogRE9NSFRNTE1hcnF1ZWVFbGVtZW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzUxNTZFNTBDMDNC
NzQxMDA4QkIwRUUgLyogRE9NSFRNTE1hcnF1ZWVFbGVtZW50LmggKi87IH07CiAJCUJDNTE1N0RE
MEMwM0JDMjIwMDhCQjBFRSAvKiBET01IVE1MRnJhbWVFbGVtZW50UHJpdmF0ZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM1MTU2RjMwQzAzQjdEQzAw
OEJCMEVFIC8qIERPTUhUTUxGcmFtZUVsZW1lbnRQcml2YXRlLmggKi87IH07CisJCUJDNTE1ODBC
MEMwM0Q0MDQwMDhCQjBFRSAvKiBKU0hUTUxEb2N1bWVudEN1c3RvbS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzUxNTgwQTBDMDNENDA0MDA4QkIw
RUUgLyogSlNIVE1MRG9jdW1lbnRDdXN0b20uY3BwICovOyB9OwogCQlCQzU4OEFGMDBCRkE2Q0Y5
MDBFRTY3OUUgLyogSFRNTFBhcnNlckVycm9yQ29kZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNTg4QUVGMEJGQTZDRjkwMEVFNjc5RSAvKiBIVE1M
UGFyc2VyRXJyb3JDb2Rlcy5oICovOyB9OwogCQlCQzU4OEI0QjBCRkE3MjNDMDBFRTY3OUUgLyog
SFRNTFBhcnNlckVycm9yQ29kZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQkM1ODhCNEEwQkZBNzIzQzAwRUU2NzlFIC8qIEhUTUxQYXJzZXJFcnJv
ckNvZGVzLmNwcCAqLzsgfTsKIAkJQkM2RDZERDIwOUFGOTA2NjAwRjU5NzU5IC8qIEZvbnQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM2RDZERDAw
OUFGOTA2NjAwRjU5NzU5IC8qIEZvbnQuY3BwICovOyB9OwpAQCAtMjc4NSw2ICsyNzg2LDggQEAK
IAkJQkM2REIzNjkwQTFBN0NCNzAwRTVDRDE0IC8qIEdseXBoUGFnZVRyZWVOb2RlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzZEQjM2ODBBMUE3Q0I3
MDBFNUNEMTQgLyogR2x5cGhQYWdlVHJlZU5vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzZEQjQ3NDBBMUE5MEZCMDBFNUNEMTQgLyogR2x5
cGhQYWdlVHJlZU5vZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQkM2REI0NzMwQTFBOTBGQjAwRTVDRDE0IC8qIEdseXBoUGFnZVRyZWVOb2RlLmNw
cCAqLzsgfTsKIAkJQkM2REI0RDQwQTFBRkVFRjAwRTVDRDE0IC8qIEdseXBoUGFnZVRyZWVOb2Rl
TWFjLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJD
NkRCNEQzMEExQUZFRUYwMEU1Q0QxNCAvKiBHbHlwaFBhZ2VUcmVlTm9kZU1hYy5jcHAgKi87IH07
CisJCUJDNkUyQjFBMEMwNEI5MzYwMDQ0NEVGOCAvKiBET01IVE1MRG9jdW1lbnRQcml2YXRlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzZFMkIxOTBD
MDRCOTM2MDA0NDRFRjggLyogRE9NSFRNTERvY3VtZW50UHJpdmF0ZS5oICovOyB9OworCQlCQzZF
MkIyOTBDMDRCOTU0MDA0NDRFRjggLyogRE9NSFRNTERvY3VtZW50UHJpdmF0ZS5oIGluIENvcHkg
R2VuZXJhdGVkIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM2
RTJCMTkwQzA0QjkzNjAwNDQ0RUY4IC8qIERPTUhUTUxEb2N1bWVudFByaXZhdGUuaCAqLzsgfTsK
IAkJQkM3RjQ0QTgwQjlFMzI0RTAwQTlEMDgxIC8qIEltYWdlT2JzZXJ2ZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDN0Y0NEE3MEI5RTMyNEUwMEE5
RDA4MSAvKiBJbWFnZU9ic2VydmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJQkNBMTY5QTIwQkZENTVCNDAwMTlDQTc2IC8qIEpTSFRNTFRhYmxl
Q2FwdGlvbkVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQkNBMTY5QTAwQkZENTVCNDAwMTlDQTc2IC8qIEpTSFRNTFRhYmxlQ2FwdGlvbkVs
ZW1lbnQuY3BwICovOyB9OwogCQlCQ0ExNjlBMzBCRkQ1NUI0MDAxOUNBNzYgLyogSlNIVE1MVGFi
bGVDYXB0aW9uRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQkNBMTY5QTEwQkZENTVCNDAwMTlDQTc2IC8qIEpTSFRNTFRhYmxlQ2FwdGlvbkVs
ZW1lbnQuaCAqLzsgfTsKQEAgLTI5ODEsNiArMjk4NCw3IEBACiAJCQlkc3RQYXRoID0gVmVyc2lv
bnMvQS9Qcml2YXRlSGVhZGVyczsKIAkJCWRzdFN1YmZvbGRlclNwZWMgPSAxOwogCQkJZmlsZXMg
PSAoCisJCQkJQkM2RTJCMjkwQzA0Qjk1NDAwNDQ0RUY4IC8qIERPTUhUTUxEb2N1bWVudFByaXZh
dGUuaCBpbiBDb3B5IEdlbmVyYXRlZCBIZWFkZXJzICovLAogCQkJCUJDNTE1NkU4MEMwM0I3NDEw
MDhCQjBFRSAvKiBET01IVE1MTWFycXVlZUVsZW1lbnQuaCBpbiBDb3B5IEdlbmVyYXRlZCBIZWFk
ZXJzICovLAogCQkJCUJDNTE1NkY0MEMwM0I3REMwMDhCQjBFRSAvKiBET01IVE1MRnJhbWVFbGVt
ZW50UHJpdmF0ZS5oIGluIENvcHkgR2VuZXJhdGVkIEhlYWRlcnMgKi8sCiAJCQkJOTNGOUI2NTYw
QkEwRjM1RTAwODU0MDY0IC8qIERPTUhUTUxDYW52YXNFbGVtZW50LmggaW4gQ29weSBHZW5lcmF0
ZWQgSGVhZGVycyAqLywKQEAgLTYwMTAsNiArNjAxNCw3IEBACiAJCUJDNTE1NkU2MEMwM0I3NDEw
MDhCQjBFRSAvKiBET01IVE1MTWFycXVlZUVsZW1lbnQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gRE9NSFRNTE1hcnF1ZWVFbGVtZW50Lm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlCQzUxNTZFNzBDMDNCNzQxMDA4QkIwRUUgLyogRE9NSFRNTE1h
cnF1ZWVFbGVtZW50SW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IERPTUhUTUxNYXJxdWVlRWxlbWVudEludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUJDNTE1NkYzMEMwM0I3REMwMDhCQjBFRSAvKiBET01IVE1MRnJhbWVFbGVtZW50UHJp
dmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NSFRNTEZyYW1lRWxl
bWVudFByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkM1MTU4MEEwQzAz
RDQwNDAwOEJCMEVFIC8qIEpTSFRNTERvY3VtZW50Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0hUTUxEb2N1bWVudEN1c3RvbS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDNTg4QUVGMEJGQTZDRjkwMEVFNjc5RSAvKiBIVE1MUGFy
c2VyRXJyb3JDb2Rlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTFBh
cnNlckVycm9yQ29kZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM1ODhCNEEw
QkZBNzIzQzAwRUU2NzlFIC8qIEhUTUxQYXJzZXJFcnJvckNvZGVzLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIVE1MUGFyc2VyRXJyb3JDb2Rlcy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDNUVDMTc2MEE1MDdFM0UwMDYwMDdGNSAvKiB2aWV3
LXNvdXJjZS5jc3MgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9ICJ2aWV3LXNvdXJjZS5jc3MiOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjAyMiw2ICs2MDI3LDcgQEAKIAkJQkM2REIz
NjgwQTFBN0NCNzAwRTVDRDE0IC8qIEdseXBoUGFnZVRyZWVOb2RlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBHbHlwaFBhZ2VUcmVlTm9kZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlCQzZEQjQ3MzBBMUE5MEZCMDBFNUNEMTQgLyogR2x5cGhQYWdlVHJlZU5v
ZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdseXBoUGFnZVRy
ZWVOb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM2REI0RDMwQTFBRkVF
RjAwRTVDRDE0IC8qIEdseXBoUGFnZVRyZWVOb2RlTWFjLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBHbHlwaFBhZ2VUcmVlTm9kZU1hYy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUJDNkUyQjE5MEMwNEI5MzYwMDQ0NEVGOCAvKiBET01IVE1MRG9j
dW1lbnRQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01IVE1M
RG9jdW1lbnRQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDN0IyQUY4
MDQ1MDgyNDEwMEE4MDAwRiAvKiBTY3JvbGxCYXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Nyb2xsQmFyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlCQzdCMkFGOTA0NTA4MjQx
MDBBODAwMEYgLyogUGxhdGZvcm1TY3JvbGxCYXJNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQbGF0Zm9ybVNjcm9sbEJhck1h
Yy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7
IH07CiAJCUJDN0Y0NEE3MEI5RTMyNEUwMEE5RDA4MSAvKiBJbWFnZU9ic2VydmVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZU9ic2VydmVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC03NjM1LDYgKzc2NDEsNyBAQAogCQkJCTg1QkE0RDAyMEFBNjg4
NjgwMDg4MDUyRCAvKiBET01IVE1MRExpc3RFbGVtZW50Lm1tICovLAogCQkJCTg1QkNCQzExMEFC
QkE4N0QwMDM4MTE2MCAvKiBET01IVE1MRG9jdW1lbnQuaCAqLywKIAkJCQk4NUJDQkMxMjBBQkJB
ODdEMDAzODExNjAgLyogRE9NSFRNTERvY3VtZW50Lm1tICovLAorCQkJCUJDNkUyQjE5MEMwNEI5
MzYwMDQ0NEVGOCAvKiBET01IVE1MRG9jdW1lbnRQcml2YXRlLmggKi8sCiAJCQkJODVERjJFRUIw
QUEzODdDQjAwQUQ2NEM1IC8qIERPTUhUTUxFbGVtZW50LmggKi8sCiAJCQkJODVERjJFRUMwQUEz
ODdDQjAwQUQ2NEM1IC8qIERPTUhUTUxFbGVtZW50Lm1tICovLAogCQkJCTg1NDA3NTY1MEFENkNC
RjkwMDYyMEM1NyAvKiBET01IVE1MRW1iZWRFbGVtZW50LmggKi8sCkBAIC05MDYzLDYgKzkwNzAs
NyBAQAogCQkJCUUxMEI5MzdCMEI3M0MwMEEwMDNFRDg5MCAvKiBKU0N1c3RvbVhQYXRoTlNSZXNv
bHZlci5oICovLAogCQkJCTkyOTI2NDc2MEI2MUZDNzIwMEI0MUQzNCAvKiBKU0RvY3VtZW50Q3Vz
dG9tLmNwcCAqLywKIAkJCQlCQ0Y0MTE3NzBCRkNDNzZBMDAxMjU2MjIgLyogSlNIVE1MQW5jaG9y
RWxlbWVudEN1c3RvbS5jcHAgKi8sCisJCQkJQkM1MTU4MEEwQzAzRDQwNDAwOEJCMEVFIC8qIEpT
SFRNTERvY3VtZW50Q3VzdG9tLmNwcCAqLywKIAkJCQk5MzhFNjVGNjA5RjA5ODVEMDA4QTQ4RUMg
LyogSlNIVE1MRWxlbWVudFdyYXBwZXJGYWN0b3J5LmNwcCAqLywKIAkJCQk5MzhFNjVGMDA5RjA5
ODQwMDA4QTQ4RUMgLyogSlNIVE1MRWxlbWVudFdyYXBwZXJGYWN0b3J5LmggKi8sCiAJCQkJQThE
MDY1QUQwQTI0NDZDRDAwNUU3MjAzIC8qIEpTSFRNTEZvcm1FbGVtZW50Q3VzdG9tLmNwcCAqLywK
QEAgLTExMzY5LDYgKzExMzc3LDcgQEAKIAkJCQlCQzUxNTZFQTBDMDNCNzQxMDA4QkIwRUUgLyog
RE9NSFRNTE1hcnF1ZWVFbGVtZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNTE1
NzlGMEMwM0JCRDMwMDhCQjBFRSAvKiBET01IVE1MTWFycXVlZUVsZW1lbnQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDNTE1N0REMEMwM0JDMjIwMDhCQjBFRSAvKiBET01IVE1MRnJhbWVFbGVtZW50
UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkM2RTJCMUEwQzA0QjkzNjAwNDQ0RUY4IC8q
IERPTUhUTUxEb2N1bWVudFByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9u
bHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMTI3NTcsNiArMTI3
NjYsNyBAQAogCQkJCUJDNDkxQjc4MEMwMjNFRkQwMDlENjMxNiAvKiBKU0hUTUxNYXJxdWVlRWxl
bWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzUxNTZFOTBDMDNCNzQxMDA4QkIwRUUgLyog
RE9NSFRNTE1hcnF1ZWVFbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQUJBRjIyMDgwQzAz
QjFDNzAwQjBCQ0YwIC8qIENocm9tZU1hYy5tbSBpbiBTb3VyY2VzICovLAorCQkJCUJDNTE1ODBC
MEMwM0Q0MDQwMDhCQjBFRSAvKiBKU0hUTUxEb2N1bWVudEN1c3RvbS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJ
fTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRG9jdW1lbnRDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRG9jdW1lbnRDdXN0b20uY3Bw
CShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxEb2N1bWVudEN1c3Rv
bS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTcyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTSFRNTERvY3VtZW50LmgiCisKKyNpbmNsdWRlICJGcmFt
ZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiSFRNTEJvZHlFbGVtZW50
LmgiCisjaW5jbHVkZSAiSFRNTENvbGxlY3Rpb24uaCIKKyNpbmNsdWRlICJIVE1MRG9jdW1lbnQu
aCIKKyNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxJRnJhbWVFbGVtZW50
LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAia2pzX2h0bWwuaCIKKyNpbmNs
dWRlICJranNfd2luZG93LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNw
YWNlIEtKUzsKK3VzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CisKK2Jvb2wgSlNIVE1MRG9jdW1l
bnQ6OmNhbkdldEl0ZW1zRm9yTmFtZShFeGVjU3RhdGUqLCBIVE1MRG9jdW1lbnQqIGRvYywgY29u
c3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIGRvYy0+aGFzTmFt
ZWRJdGVtKHByb3BlcnR5TmFtZSkgfHwgZG9jLT5oYXNEb2NFeHRyYU5hbWVkSXRlbShwcm9wZXJ0
eU5hbWUpOworfQorCitKU1ZhbHVlKiBKU0hUTUxEb2N1bWVudDo6bmFtZUdldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiBvcmlnaW5hbE9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgSlNIVE1MRG9jdW1l
bnQqIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxKU0hUTUxEb2N1bWVudCo+KHNsb3Quc2xvdEJhc2Uo
KSk7CisgICAgSFRNTERvY3VtZW50KiBkb2MgPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQqPih0
aGlzT2JqLT5pbXBsKCkpOworCisgICAgU3RyaW5nIG5hbWUgPSBwcm9wZXJ0eU5hbWU7CisgICAg
UmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBjb2xsZWN0aW9uID0gZG9jLT5kb2N1bWVudE5hbWVkSXRl
bXMobmFtZSk7CisKKyAgICBpZiAoY29sbGVjdGlvbi0+bGVuZ3RoKCkgPT0gMSkgeworICAgICAg
ICBOb2RlKiBub2RlID0gY29sbGVjdGlvbi0+Zmlyc3RJdGVtKCk7CisKKyAgICAgICAgRnJhbWUq
IGZyYW1lOworICAgICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShpZnJhbWVUYWcpICYmIChmcmFt
ZSA9IHN0YXRpY19jYXN0PEhUTUxJRnJhbWVFbGVtZW50Kj4obm9kZSktPmNvbnRlbnRGcmFtZSgp
KSkKKyAgICAgICAgICAgIHJldHVybiBXaW5kb3c6OnJldHJpZXZlKGZyYW1lKTsKKworICAgICAg
ICByZXR1cm4gdG9KUyhleGVjLCBub2RlKTsKKyAgICB9IGVsc2UgaWYgKCFjb2xsZWN0aW9uLT5s
ZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICByZXR1cm4gZ2V0
SFRNTENvbGxlY3Rpb24oZXhlYywgY29sbGVjdGlvbi5nZXQoKSk7Cit9CisKKy8vIEN1c3RvbSBh
dHRyaWJ1dGVzCisKK0pTVmFsdWUqIEpTSFRNTERvY3VtZW50OjphbGwoRXhlY1N0YXRlKiBleGVj
KSBjb25zdAoreworICAgIC8vIElmICJhbGwiIGhhcyBiZWVuIG92ZXJ3cml0dGVuLCByZXR1cm4g
dGhlIG92ZXJ3cml0dGVuIHZhbHVlCisgICAgaWYgKEpTVmFsdWUqIHYgPSBnZXREaXJlY3QoImFs
bCIpKQorICAgICAgICByZXR1cm4gdjsKKworICAgIHJldHVybiBnZXRBbGxIVE1MQ29sbGVjdGlv
bihleGVjLCBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQqPihpbXBsKCkpLT5hbGwoKS5nZXQoKSk7
Cit9CisKK3ZvaWQgSlNIVE1MRG9jdW1lbnQ6OnNldEFsbChFeGVjU3RhdGUqLCBKU1ZhbHVlKiB2
YWx1ZSkKK3sKKyAgICAvLyBBZGQgImFsbCIgdG8gdGhlIHByb3BlcnR5IG1hcC4KKyAgICBwdXRE
aXJlY3QoImFsbCIsIHZhbHVlKTsKK30KKworSlNWYWx1ZSogSlNIVE1MRG9jdW1lbnQ6OmxvY2F0
aW9uKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK3sKKyAgICBGcmFtZSogZnJhbWUgPSBzdGF0aWNf
Y2FzdDxIVE1MRG9jdW1lbnQqPihpbXBsKCkpLT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisg
ICAgICAgIHJldHVybiBqc051bGwoKTsKKworICAgIFdpbmRvdyogd2luID0gV2luZG93OjpyZXRy
aWV2ZVdpbmRvdyhmcmFtZSk7CisgICAgQVNTRVJUKHdpbik7CisgICAgcmV0dXJuIHdpbi0+bG9j
YXRpb24oKTsKK30KKwordm9pZCBKU0hUTUxEb2N1bWVudDo6c2V0TG9jYXRpb24oRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBGcmFtZSogZnJhbWUgPSBzdGF0aWNfY2Fz
dDxIVE1MRG9jdW1lbnQqPihpbXBsKCkpLT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAg
ICAgIHJldHVybjsKKworICAgIFN0cmluZyBzdHIgPSB2YWx1ZS0+dG9TdHJpbmcoZXhlYyk7CisK
KyAgICAvLyBXaGVuIGFzc2lnbmluZyBsb2NhdGlvbiwgSUUgYW5kIE1vemlsbGEgYm90aCByZXNv
bHZlIHRoZSBVUkwKKyAgICAvLyByZWxhdGl2ZSBub3QgdGhlIHRhcmdldCBmcmFtZS4KKyAgICBG
cmFtZSogYWN0aXZlRnJhbWUgPSBzdGF0aWNfY2FzdDxTY3JpcHRJbnRlcnByZXRlcio+KGV4ZWMt
PmR5bmFtaWNJbnRlcnByZXRlcigpKS0+ZnJhbWUoKTsKKyAgICBpZiAoYWN0aXZlRnJhbWUpCisg
ICAgICAgIHN0ciA9IGFjdGl2ZUZyYW1lLT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTChzdHIpOwor
CisgICAgLy8gV2Ugd2FudCBhIG5ldyBoaXN0b3J5IGl0ZW0gaWYgdGhpcyBKUyB3YXMgY2FsbGVk
IHZpYSBhIHVzZXIgZ2VzdHVyZQorICAgIGJvb2wgdXNlckdlc3R1cmUgPSBzdGF0aWNfY2FzdDxT
Y3JpcHRJbnRlcnByZXRlcio+KGV4ZWMtPmR5bmFtaWNJbnRlcnByZXRlcigpKS0+d2FzUnVuQnlV
c2VyR2VzdHVyZSgpOworICAgIGZyYW1lLT5sb2FkZXIoKS0+c2NoZWR1bGVMb2NhdGlvbkNoYW5n
ZShzdHIsIGFjdGl2ZUZyYW1lLT5sb2FkZXIoKS0+b3V0Z29pbmdSZWZlcnJlcigpLCAhdXNlckdl
c3R1cmUpOworfQorCisvLyBDdXN0b20gZnVuY3Rpb25zCisKK0pTVmFsdWUqIEpTSFRNTERvY3Vt
ZW50OjpvcGVuKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgTGlzdCYgYXJncykKK3sKKyAgICAvLyBG
b3IgY29tcGF0aWJpbGl0eSB3aXRoIG90aGVyIGJyb3dzZXJzLCBwYXNzIG9wZW4gY2FsbHMgd2l0
aCBtb3JlIHRoYW4gMiBwYXJhbWV0ZXJzIHRvIHRoZSB3aW5kb3cuCisgICAgaWYgKGFyZ3Muc2l6
ZSgpID4gMikgeworICAgICAgICBGcmFtZSogZnJhbWUgPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1l
bnQqPihpbXBsKCkpLT5mcmFtZSgpOworICAgICAgICBpZiAoZnJhbWUpIHsKKyAgICAgICAgICAg
IFdpbmRvdyogd2luZG93ID0gV2luZG93OjpyZXRyaWV2ZVdpbmRvdyhmcmFtZSk7CisgICAgICAg
ICAgICBpZiAod2luZG93KSB7CisgICAgICAgICAgICAgICAgSlNPYmplY3QqIGZ1bmN0aW9uT2Jq
ZWN0ID0gd2luZG93LT5nZXQoZXhlYywgIm9wZW4iKS0+Z2V0T2JqZWN0KCk7CisgICAgICAgICAg
ICAgICAgaWYgKCFmdW5jdGlvbk9iamVjdCB8fCAhZnVuY3Rpb25PYmplY3QtPmltcGxlbWVudHND
YWxsKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVF
cnJvcik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uT2JqZWN0LT5jYWxsKGV4ZWMs
IHdpbmRvdywgYXJncyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CisgICAgfQorCisgICAgLy8gSW4gdGhlIGNhc2Ugb2YgdHdvIHBhcmFt
ZXRlcnMgb3IgZmV3ZXIsIGRvIGEgbm9ybWFsIGRvY3VtZW50IG9wZW4uCisgICAgc3RhdGljX2Nh
c3Q8SFRNTERvY3VtZW50Kj4oaW1wbCgpKS0+b3BlbigpOworICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOworfQorCitzdGF0aWMgU3RyaW5nIHdyaXRlSGVscGVyKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgTGlzdCYgYXJncykKK3sKKyAgICAvLyBET00gb25seSBzcGVjaWZpZXMgc2luZ2xlIHN0cmlu
ZyBhcmd1bWVudCwgYnV0IE5TICYgSUUgYWxsb3cgbXVsdGlwbGUKKyAgICAvLyBvciBubyBhcmd1
bWVudHMuCisgICAgU3RyaW5nIHN0ciA9ICIiOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJn
cy5zaXplKCk7ICsraSkKKyAgICAgICAgc3RyICs9IGFyZ3NbaV0tPnRvU3RyaW5nKGV4ZWMpOwor
ICAgIHJldHVybiBzdHI7Cit9CisKK0pTVmFsdWUqIEpTSFRNTERvY3VtZW50Ojp3cml0ZShFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IExpc3QmIGFyZ3MpCit7CisgICAgc3RhdGljX2Nhc3Q8SFRNTERv
Y3VtZW50Kj4oaW1wbCgpKS0+d3JpdGUod3JpdGVIZWxwZXIoZXhlYywgYXJncykpOworICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOworfQorCitKU1ZhbHVlKiBKU0hUTUxEb2N1bWVudDo6d3JpdGVs
bihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IExpc3QmIGFyZ3MpCit7CisgICAgc3RhdGljX2Nhc3Q8
SFRNTERvY3VtZW50Kj4oaW1wbCgpKS0+d3JpdGUod3JpdGVIZWxwZXIoZXhlYywgYXJncykgKyAi
XG4iKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKK30KKworSlNWYWx1ZSogSlNIVE1MRG9j
dW1lbnQ6OmNsZWFyKEV4ZWNTdGF0ZSosIGNvbnN0IExpc3QmKQoreworICAgIC8vIGV2ZW4gSUUg
ZG9lc24ndCBzdXBwb3J0IHRoaXMgb25lLi4uCisgICAgLy8gc3RhdGljX2Nhc3Q8SFRNTERvY3Vt
ZW50Kj4oaW1wbCgpKS0+Y2xlYXIoKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfZG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19kb20uY3BwCShyZXZp
c2lvbiAyMTY3MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX2RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNzEsOSArMTA3MSw5IEBAIEpTVmFsdWUqIGdldFJ1bnRpbWVPYmplY3QoRXhl
Y1N0YXRlKiBleGUKICAgICByZXR1cm4gMDsKIH0KIAotSlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUq
IGV4ZWMsIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IGwpCitKU1ZhbHVlKiB0b0pTKEV4ZWNTdGF0ZSog
ZXhlYywgTm9kZUxpc3QqIGwpCiB7Ci0gICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PE5vZGVMaXN0
LCBET01Ob2RlTGlzdD4oZXhlYywgbC5nZXQoKSk7CisgICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0
PE5vZGVMaXN0LCBET01Ob2RlTGlzdD4oZXhlYywgbCk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMva2pzX2RvbS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYmluZGluZ3MvanMva2pzX2RvbS5oCShyZXZpc2lvbiAyMTY3MSkKKysrIFdlYkNvcmUv
YmluZGluZ3MvanMva2pzX2RvbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcsNyArMTM3LDcgQEAg
bmFtZXNwYWNlIEtKUyB7CiAgIEpTVmFsdWUqIGdldFJ1bnRpbWVPYmplY3QoRXhlY1N0YXRlKiwg
V2ViQ29yZTo6Tm9kZSopOwogICBKU1ZhbHVlKiB0b0pTKEV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8
V2ViQ29yZTo6Tm9kZT4pOwogICBKU1ZhbHVlKiB0b0pTKEV4ZWNTdGF0ZSosIFdlYkNvcmU6Ok5h
bWVkTm9kZU1hcCopOwotICBKU1ZhbHVlKiB0b0pTKEV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8V2Vi
Q29yZTo6Tm9kZUxpc3Q+KTsKKyAgSlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUqLCBXZWJDb3JlOjpO
b2RlTGlzdCopOwogICBKU1ZhbHVlKiB0b0pTKEV4ZWNTdGF0ZSosIFdlYkNvcmU6OkV2ZW50VGFy
Z2V0Kik7CiAgIEpTT2JqZWN0KiBnZXROb2RlQ29uc3RydWN0b3IoRXhlY1N0YXRlKik7CiAgIEpT
T2JqZWN0KiBnZXRET01FeGNlcHRpb25Db25zdHJ1Y3RvcihFeGVjU3RhdGUqKTsKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvanMva2pzX2h0bWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3MvanMva2pzX2h0bWwuY3BwCShyZXZpc2lvbiAyMTY3MSkKKysrIFdlYkNvcmUvYmluZGlu
Z3MvanMva2pzX2h0bWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MSwzNDUgKzcxLDYgQEAgcHJp
dmF0ZToKICAgaW50IGlkOwogfTsKIAotLyogCi1AYmVnaW4gSlNIVE1MRG9jdW1lbnRQcm90b3R5
cGVUYWJsZSA4Ci1jbGVhciAgICAgICAgICAgICAgICAgSlNIVE1MRG9jdW1lbnQ6OkNsZWFyICAg
ICAgICAgICAgIERvbnREZWxldGV8RnVuY3Rpb24gMAotb3BlbiAgICAgICAgICAgICAgICAgIEpT
SFRNTERvY3VtZW50OjpPcGVuICAgICAgICAgICAgICBEb250RGVsZXRlfEZ1bmN0aW9uIDAKLWNs
b3NlICAgICAgICAgICAgICAgICBKU0hUTUxEb2N1bWVudDo6Q2xvc2UgICAgICAgICAgICAgRG9u
dERlbGV0ZXxGdW5jdGlvbiAwCi13cml0ZSAgICAgICAgICAgICAgICAgSlNIVE1MRG9jdW1lbnQ6
OldyaXRlICAgICAgICAgICAgIERvbnREZWxldGV8RnVuY3Rpb24gMQotd3JpdGVsbiAgICAgICAg
ICAgICAgIEpTSFRNTERvY3VtZW50OjpXcml0ZUxuICAgICAgICAgICBEb250RGVsZXRlfEZ1bmN0
aW9uIDEKLWdldEVsZW1lbnRzQnlOYW1lICAgICBKU0hUTUxEb2N1bWVudDo6R2V0RWxlbWVudHNC
eU5hbWUgRG9udERlbGV0ZXxGdW5jdGlvbiAxCi1jYXB0dXJlRXZlbnRzICAgICAgICAgSlNIVE1M
RG9jdW1lbnQ6OkNhcHR1cmVFdmVudHMgICAgIERvbnREZWxldGV8RnVuY3Rpb24gMAotcmVsZWFz
ZUV2ZW50cyAgICAgICAgIEpTSFRNTERvY3VtZW50OjpSZWxlYXNlRXZlbnRzICAgICBEb250RGVs
ZXRlfEZ1bmN0aW9uIDAKLUBlbmQKLSovCi1LSlNfSU1QTEVNRU5UX1BST1RPVFlQRV9GVU5DVElP
TihKU0hUTUxEb2N1bWVudFByb3RvdHlwZUZ1bmN0aW9uKQotS0pTX0lNUExFTUVOVF9QUk9UT1RZ
UEUoIkRPTUhUTUxEb2N1bWVudCIsIEpTSFRNTERvY3VtZW50UHJvdG90eXBlLCBKU0hUTUxEb2N1
bWVudFByb3RvdHlwZUZ1bmN0aW9uKQotCi1KU1ZhbHVlICpKU0hUTUxEb2N1bWVudFByb3RvdHlw
ZUZ1bmN0aW9uOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlz
T2JqLCBjb25zdCBMaXN0ICZhcmdzKQotewotICAgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJkpT
SFRNTERvY3VtZW50OjppbmZvKSkKLSAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlw
ZUVycm9yKTsKLSAgICBIVE1MRG9jdW1lbnQgJmRvYyA9ICpzdGF0aWNfY2FzdDxIVE1MRG9jdW1l
bnQqPihzdGF0aWNfY2FzdDxKU0hUTUxEb2N1bWVudCo+KHRoaXNPYmopLT5pbXBsKCkpOwotICAg
IAotICAgIHN3aXRjaCAoaWQpIHsKLSAgICAgICAgY2FzZSBKU0hUTUxEb2N1bWVudDo6Q2xlYXI6
IC8vIGV2ZW4gSUUgZG9lc24ndCBzdXBwb3J0IHRoYXQgb25lLi4uCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvL2RvYy5jbGVhcigpOyAvLyBUT0RPCi0gICAgICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAgICAgY2FzZSBKU0hUTUxEb2N1bWVudDo6T3BlbjoK
LSAgICAgICAgICAgIC8vIEZvciBjb21wYXRpYmlsaXR5IHdpdGggb3RoZXIgYnJvd3NlcnMsIHBh
c3Mgb3BlbiBjYWxscyB3aXRoIG1vcmUgdGhhbiAyIHBhcmFtZXRlcnMgdG8gdGhlIHdpbmRvdy4K
LSAgICAgICAgICAgIGlmIChhcmdzLnNpemUoKSA+IDIpIHsKLSAgICAgICAgICAgICAgICBGcmFt
ZSAqZnJhbWUgPSBkb2MuZnJhbWUoKTsKLSAgICAgICAgICAgICAgICBpZiAoZnJhbWUpIHsKLSAg
ICAgICAgICAgICAgICAgICAgV2luZG93ICp3aW5kb3cgPSBXaW5kb3c6OnJldHJpZXZlV2luZG93
KGZyYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHdpbmRvdykgewotICAgICAgICAgICAg
ICAgICAgICAgICAgSlNPYmplY3QqIGZ1bmN0aW9uT2JqZWN0ID0gd2luZG93LT5nZXQoZXhlYywg
Im9wZW4iKS0+Z2V0T2JqZWN0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZ1bmN0
aW9uT2JqZWN0IHx8ICFmdW5jdGlvbk9iamVjdC0+aW1wbGVtZW50c0NhbGwoKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uT2JqZWN0LT5jYWxsKGV4ZWMs
IHdpbmRvdywgYXJncyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAvLyBJbiB0aGUgY2FzZSBvZiB0d28gcGFyYW1ldGVycyBvciBmZXdlciwgZG8g
YSBub3JtYWwgZG9jdW1lbnQgb3Blbi4KLSAgICAgICAgICAgIGRvYy5vcGVuKCk7Ci0gICAgICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAgICAgY2FzZSBKU0hUTUxEb2N1bWVudDo6
Q2xvc2U6Ci0gICAgICAgICAgICBkb2MuY2xvc2UoKTsKLSAgICAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwotICAgICAgICBjYXNlIEpTSFRNTERvY3VtZW50OjpXcml0ZToKLSAgICAgICAg
Y2FzZSBKU0hUTUxEb2N1bWVudDo6V3JpdGVMbjogewotICAgICAgICAgICAgLy8gRE9NIG9ubHkg
c3BlY2lmaWVzIHNpbmdsZSBzdHJpbmcgYXJndW1lbnQsIGJ1dCBOUyAmIElFIGFsbG93IG11bHRp
cGxlCi0gICAgICAgICAgICAvLyBvciBubyBhcmd1bWVudHMKLSAgICAgICAgICAgIFN0cmluZyBz
dHIgPSAiIjsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJncy5zaXplKCk7IGkr
KykKLSAgICAgICAgICAgICAgICBzdHIgKz0gYXJnc1tpXS0+dG9TdHJpbmcoZXhlYyk7Ci0gICAg
ICAgICAgICBpZiAoaWQgPT0gSlNIVE1MRG9jdW1lbnQ6OldyaXRlTG4pCi0gICAgICAgICAgICAg
ICAgc3RyICs9ICJcbiI7Ci0gICAgICAgICAgICBkb2Mud3JpdGUoc3RyKTsKLSAgICAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgSlNIVE1MRG9j
dW1lbnQ6OkdldEVsZW1lbnRzQnlOYW1lOgotICAgICAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywg
ZG9jLmdldEVsZW1lbnRzQnlOYW1lKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpKS5nZXQoKSk7Ci0g
ICAgICAgIGNhc2UgSlNIVE1MRG9jdW1lbnQ6OkNhcHR1cmVFdmVudHM6Ci0gICAgICAgIGNhc2Ug
SlNIVE1MRG9jdW1lbnQ6OlJlbGVhc2VFdmVudHM6Ci0gICAgICAgICAgICAvLyBEbyBub3RoaW5n
IGZvciBub3cuIFRoZXNlIGFyZSBOUy1zcGVjaWZpYyBsZWdhY3kgY2FsbHMuCi0gICAgICAgICAg
ICBicmVhazsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci19Ci0KLQot
Ly8gRklYTUU6IGZ1bmN0aW9ucyBzaG91bGQgYmUgaW4gdGhlIHByb3RvdHlwZQotY29uc3QgQ2xh
c3NJbmZvIEpTSFRNTERvY3VtZW50OjppbmZvID0KLSAgeyAiRE9NSFRNTERvY3VtZW50IiwgJkpT
RG9jdW1lbnQ6OmluZm8sICZIVE1MRG9jdW1lbnRUYWJsZSwgMCB9OwotLyogU291cmNlIGZvciBI
VE1MRG9jdW1lbnRUYWJsZS4gVXNlICJtYWtlIGhhc2h0YWJsZXMiIHRvIHJlZ2VuZXJhdGUuCi1A
YmVnaW4gSFRNTERvY3VtZW50VGFibGUgMzAKLSAgdGl0bGUgICAgICAgICAgICAgICAgIEpTSFRN
TERvY3VtZW50OjpUaXRsZSAgICAgICAgICAgICBEb250RGVsZXRlCi0gIHJlZmVycmVyICAgICAg
ICAgICAgICBKU0hUTUxEb2N1bWVudDo6UmVmZXJyZXIgICAgICAgICAgRG9udERlbGV0ZXxSZWFk
T25seQotICBkb21haW4gICAgICAgICAgICAgICAgSlNIVE1MRG9jdW1lbnQ6OkRvbWFpbiAgICAg
ICAgICAgIERvbnREZWxldGUKLSAgYm9keSAgICAgICAgICAgICAgICAgIEpTSFRNTERvY3VtZW50
OjpCb2R5ICAgICAgICAgICAgICBEb250RGVsZXRlCi0gIGxvY2F0aW9uICAgICAgICAgICAgICBK
U0hUTUxEb2N1bWVudDo6TG9jYXRpb24gICAgICAgICAgRG9udERlbGV0ZQotICBjb29raWUgICAg
ICAgICAgICAgICAgSlNIVE1MRG9jdW1lbnQ6OkNvb2tpZSAgICAgICAgICAgIERvbnREZWxldGUK
LSAgaW1hZ2VzICAgICAgICAgICAgICAgIEpTSFRNTERvY3VtZW50OjpJbWFnZXMgICAgICAgICAg
ICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIGVtYmVkcyAgICAgICAgICAgICAgICBKU0hUTUxEb2N1
bWVudDo6RW1iZWRzICAgICAgICAgICAgRG9udERlbGV0ZXxSZWFkT25seQotICBwbHVnaW5zICAg
ICAgICAgICAgICAgSlNIVE1MRG9jdW1lbnQ6OkVtYmVkcyAgICAgICAgICAgIERvbnREZWxldGV8
UmVhZE9ubHkKLSAgYXBwbGV0cyAgICAgICAgICAgICAgIEpTSFRNTERvY3VtZW50OjpBcHBsZXRz
ICAgICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIGxpbmtzICAgICAgICAgICAgICAgICBK
U0hUTUxEb2N1bWVudDo6TGlua3MgICAgICAgICAgICAgRG9udERlbGV0ZXxSZWFkT25seQotICBm
b3JtcyAgICAgICAgICAgICAgICAgSlNIVE1MRG9jdW1lbnQ6OkZvcm1zICAgICAgICAgICAgIERv
bnREZWxldGV8UmVhZE9ubHkKLSAgYW5jaG9ycyAgICAgICAgICAgICAgIEpTSFRNTERvY3VtZW50
OjpBbmNob3JzICAgICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIHNjcmlwdHMgICAgICAg
ICAgICAgICBKU0hUTUxEb2N1bWVudDo6U2NyaXB0cyAgICAgICAgICAgRG9udERlbGV0ZXxSZWFk
T25seQotICBhbGwgICAgICAgICAgICAgICAgICAgSlNIVE1MRG9jdW1lbnQ6OkFsbCAgICAgICAg
ICAgICAgIAotICBiZ0NvbG9yICAgICAgICAgICAgICAgSlNIVE1MRG9jdW1lbnQ6OkJnQ29sb3Ig
ICAgICAgICAgIERvbnREZWxldGUKLSAgZmdDb2xvciAgICAgICAgICAgICAgIEpTSFRNTERvY3Vt
ZW50OjpGZ0NvbG9yICAgICAgICAgICBEb250RGVsZXRlCi0gIGFsaW5rQ29sb3IgICAgICAgICAg
ICBKU0hUTUxEb2N1bWVudDo6QWxpbmtDb2xvciAgICAgICAgRG9udERlbGV0ZQotICBsaW5rQ29s
b3IgICAgICAgICAgICAgSlNIVE1MRG9jdW1lbnQ6OkxpbmtDb2xvciAgICAgICAgIERvbnREZWxl
dGUKLSAgdmxpbmtDb2xvciAgICAgICAgICAgIEpTSFRNTERvY3VtZW50OjpWbGlua0NvbG9yICAg
ICAgICBEb250RGVsZXRlCi0gIGxhc3RNb2RpZmllZCAgICAgICAgICBKU0hUTUxEb2N1bWVudDo6
TGFzdE1vZGlmaWVkICAgICAgRG9udERlbGV0ZXxSZWFkT25seQotICBoZWlnaHQgICAgICAgICAg
ICAgICAgSlNIVE1MRG9jdW1lbnQ6OkhlaWdodCAgICAgICAgICAgIERvbnREZWxldGV8UmVhZE9u
bHkKLSAgd2lkdGggICAgICAgICAgICAgICAgIEpTSFRNTERvY3VtZW50OjpXaWR0aCAgICAgICAg
ICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIGRpciAgICAgICAgICAgICAgICAgICBKU0hUTUxE
b2N1bWVudDo6RGlyICAgICAgICAgICAgICAgRG9udERlbGV0ZQotICBkZXNpZ25Nb2RlICAgICAg
ICAgICAgSlNIVE1MRG9jdW1lbnQ6OkRlc2lnbk1vZGUgICAgICAgIERvbnREZWxldGUKLSNwb3Rl
bnRpYWxseSBvYnNvbGV0ZSBhcnJheSBwcm9wZXJ0aWVzCi0jIGxheWVycwotIyBwbHVnaW5zCi0j
IHRhZ3MKLSNwb3RlbnRpYWxseSBvYnNvbGV0ZSBwcm9wZXJ0aWVzCi0jIGVtYmVkcwotIyBpZHMK
LUBlbmQKLSovCi0KLUpTSFRNTERvY3VtZW50OjpKU0hUTUxEb2N1bWVudChFeGVjU3RhdGUqIGV4
ZWMsIEhUTUxEb2N1bWVudCAqZCkKLSAgOiBKU0RvY3VtZW50KGV4ZWMsIGQpCi17Ci0gICAgc2V0
UHJvdG90eXBlKEpTSFRNTERvY3VtZW50UHJvdG90eXBlOjpzZWxmKGV4ZWMpKTsKLX0KLQotSlNW
YWx1ZSAqSlNIVE1MRG9jdW1lbnQ6Om5hbWVkSXRlbUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiBvcmlnaW5hbE9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBj
b25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCi17Ci0gIEpTSFRNTERvY3VtZW50ICp0aGlzT2JqID0g
c3RhdGljX2Nhc3Q8SlNIVE1MRG9jdW1lbnQqPihzbG90LnNsb3RCYXNlKCkpOwotICBIVE1MRG9j
dW1lbnQgJmRvYyA9ICpzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQqPih0aGlzT2JqLT5pbXBsKCkp
OwotCi0gIFN0cmluZyBuYW1lID0gcHJvcGVydHlOYW1lOwotICBSZWZQdHI8SFRNTENvbGxlY3Rp
b24+IGNvbGxlY3Rpb24gPSBkb2MuZG9jdW1lbnROYW1lZEl0ZW1zKG5hbWUpOwotCi0gIGlmIChj
b2xsZWN0aW9uLT5sZW5ndGgoKSA9PSAxKSB7Ci0gICAgTm9kZSogbm9kZSA9IGNvbGxlY3Rpb24t
PmZpcnN0SXRlbSgpOwotICAgIEZyYW1lICpmcmFtZTsKLSAgICBpZiAobm9kZS0+aGFzVGFnTmFt
ZShpZnJhbWVUYWcpICYmIChmcmFtZSA9IHN0YXRpY19jYXN0PEhUTUxJRnJhbWVFbGVtZW50Kj4o
bm9kZSktPmNvbnRlbnRGcmFtZSgpKSkKLSAgICAgIHJldHVybiBXaW5kb3c6OnJldHJpZXZlKGZy
YW1lKTsKLSAgICByZXR1cm4gdG9KUyhleGVjLCBub2RlKTsKLSAgfSBlbHNlIGlmIChjb2xsZWN0
aW9uLT5sZW5ndGgoKSA9PSAwKQotICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0KLSAgcmV0
dXJuIGdldEhUTUxDb2xsZWN0aW9uKGV4ZWMsIGNvbGxlY3Rpb24uZ2V0KCkpOwotfQotCi1KU1Zh
bHVlICpKU0hUTUxEb2N1bWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIGlu
dCB0b2tlbikgY29uc3QKLXsKLSAgSFRNTERvY3VtZW50JiBkb2MgPSAqc3RhdGljX2Nhc3Q8SFRN
TERvY3VtZW50Kj4oaW1wbCgpKTsKLQotICBGcmFtZVZpZXcqIHZpZXcgPSBkb2MudmlldygpOwot
ICBGcmFtZSogZnJhbWUgPSBkb2MuZnJhbWUoKTsKLQotICBIVE1MRWxlbWVudCogYm9keSA9IGRv
Yy5ib2R5KCk7Ci0gIEhUTUxCb2R5RWxlbWVudCogYm9keUVsZW1lbnQgPSAoYm9keSAmJiBib2R5
LT5oYXNUYWdOYW1lKGJvZHlUYWcpKSA/IHN0YXRpY19jYXN0PEhUTUxCb2R5RWxlbWVudCo+KGJv
ZHkpIDogMDsKLSAgICAKLSAgc3dpdGNoICh0b2tlbikgewotICBjYXNlIFRpdGxlOgotICAgIHJl
dHVybiBqc1N0cmluZyhkb2MudGl0bGUoKSk7Ci0gIGNhc2UgUmVmZXJyZXI6Ci0gICAgcmV0dXJu
IGpzU3RyaW5nKGRvYy5yZWZlcnJlcigpKTsKLSAgY2FzZSBEb21haW46Ci0gICAgcmV0dXJuIGpz
U3RyaW5nKGRvYy5kb21haW4oKSk7Ci0gIGNhc2UgQm9keToKLSAgICByZXR1cm4gdG9KUyhleGVj
LCBib2R5KTsKLSAgY2FzZSBMb2NhdGlvbjoKLSAgICBpZiAoIWZyYW1lKQotICAgICAgcmV0dXJu
IGpzTnVsbCgpOwotICAgIGlmIChXaW5kb3cqIHdpbiA9IFdpbmRvdzo6cmV0cmlldmVXaW5kb3co
ZnJhbWUpKQotICAgICAgcmV0dXJuIHdpbi0+bG9jYXRpb24oKTsKLSAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKLSAgY2FzZSBDb29raWU6Ci0gICAgcmV0dXJuIGpzU3RyaW5nKGRvYy5jb29raWUo
KSk7Ci0gIGNhc2UgSW1hZ2VzOgotICAgIHJldHVybiBnZXRIVE1MQ29sbGVjdGlvbihleGVjLCBk
b2MuaW1hZ2VzKCkuZ2V0KCkpOwotICBjYXNlIEVtYmVkczoKLSAgICByZXR1cm4gZ2V0SFRNTENv
bGxlY3Rpb24oZXhlYywgZG9jLmVtYmVkcygpLmdldCgpKTsKLSAgY2FzZSBBcHBsZXRzOgotICAg
IHJldHVybiBnZXRIVE1MQ29sbGVjdGlvbihleGVjLCBkb2MuYXBwbGV0cygpLmdldCgpKTsKLSAg
Y2FzZSBMaW5rczoKLSAgICByZXR1cm4gZ2V0SFRNTENvbGxlY3Rpb24oZXhlYywgZG9jLmxpbmtz
KCkuZ2V0KCkpOwotICBjYXNlIEZvcm1zOgotICAgIHJldHVybiBnZXRIVE1MQ29sbGVjdGlvbihl
eGVjLCBkb2MuZm9ybXMoKS5nZXQoKSk7Ci0gIGNhc2UgQW5jaG9yczoKLSAgICByZXR1cm4gZ2V0
SFRNTENvbGxlY3Rpb24oZXhlYywgZG9jLmFuY2hvcnMoKS5nZXQoKSk7Ci0gIGNhc2UgU2NyaXB0
czoKLSAgICByZXR1cm4gZ2V0SFRNTENvbGxlY3Rpb24oZXhlYywgZG9jLnNjcmlwdHMoKS5nZXQo
KSk7Ci0gIGNhc2UgQWxsOgotICAgIC8vIElmICJhbGwiIGhhcyBiZWVuIG92ZXJ3cml0dGVuLCBy
ZXR1cm4gdGhlIG92ZXJ3cml0dGVuIHZhbHVlCi0gICAgaWYgKEpTVmFsdWUgKnYgPSBnZXREaXJl
Y3QoImFsbCIpKQotICAgICAgcmV0dXJuIHY7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIGdldEFs
bEhUTUxDb2xsZWN0aW9uKGV4ZWMsIGRvYy5hbGwoKS5nZXQoKSk7Ci0gIGNhc2UgQmdDb2xvcjoK
LSAgICBpZiAoIWJvZHlFbGVtZW50KQotICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAg
cmV0dXJuIGpzU3RyaW5nKGJvZHlFbGVtZW50LT5iZ0NvbG9yKCkpOwotICBjYXNlIEZnQ29sb3I6
Ci0gICAgaWYgKCFib2R5RWxlbWVudCkKLSAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAg
IHJldHVybiBqc1N0cmluZyhib2R5RWxlbWVudC0+dGV4dCgpKTsKLSAgY2FzZSBBbGlua0NvbG9y
OgotICAgIGlmICghYm9keUVsZW1lbnQpCi0gICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAg
ICByZXR1cm4ganNTdHJpbmcoYm9keUVsZW1lbnQtPmFMaW5rKCkpOwotICBjYXNlIExpbmtDb2xv
cjoKLSAgICBpZiAoIWJvZHlFbGVtZW50KQotICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0g
ICAgcmV0dXJuIGpzU3RyaW5nKGJvZHlFbGVtZW50LT5saW5rKCkpOwotICBjYXNlIFZsaW5rQ29s
b3I6Ci0gICAgaWYgKCFib2R5RWxlbWVudCkKLSAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwot
ICAgIHJldHVybiBqc1N0cmluZyhib2R5RWxlbWVudC0+dkxpbmsoKSk7Ci0gIGNhc2UgTGFzdE1v
ZGlmaWVkOgotICAgIHJldHVybiBqc1N0cmluZyhkb2MubGFzdE1vZGlmaWVkKCkpOwotICBjYXNl
IEhlaWdodDoKLSAgICByZXR1cm4ganNOdW1iZXIodmlldyA/IHZpZXctPmNvbnRlbnRzSGVpZ2h0
KCkgOiAwKTsKLSAgY2FzZSBXaWR0aDoKLSAgICByZXR1cm4ganNOdW1iZXIodmlldyA/IHZpZXct
PmNvbnRlbnRzV2lkdGgoKSA6IDApOwotICBjYXNlIERpcjoKLSAgICBpZiAoIWJvZHkpCi0gICAg
ICByZXR1cm4ganNTdHJpbmcoIiIpOwotICAgIHJldHVybiBqc1N0cmluZyhib2R5LT5kaXIoKSk7
Ci0gIGNhc2UgRGVzaWduTW9kZToKLSAgICByZXR1cm4ganNTdHJpbmcoZG9jLmluRGVzaWduTW9k
ZSgpID8gIm9uIiA6ICJvZmYiKTsKLSAgZGVmYXVsdDoKLSAgICBBU1NFUlQoMCk7Ci0gICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7Ci0gIH0KLX0KLQotYm9vbCBKU0hUTUxEb2N1bWVudDo6Z2V0T3du
UHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlO
YW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCi17Ci0gIEhUTUxEb2N1bWVudCAmZG9jID0gKnN0YXRp
Y19jYXN0PEhUTUxEb2N1bWVudCo+KGltcGwoKSk7Ci0KLSAgU3RyaW5nIG5hbWUgPSBwcm9wZXJ0
eU5hbWU7Ci0gIGlmIChkb2MuaGFzTmFtZWRJdGVtKG5hbWUpIHx8IGRvYy5oYXNEb2NFeHRyYU5h
bWVkSXRlbShuYW1lKSkgewotICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXMsIG5hbWVkSXRlbUdldHRl
cik7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICByZXR1cm4gZ2V0U3RhdGljVmFsdWVTbG90
PEpTSFRNTERvY3VtZW50LCBKU0RvY3VtZW50PihleGVjLCAmSFRNTERvY3VtZW50VGFibGUsIHRo
aXMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Ci19Ci0KLXZvaWQgSlNIVE1MRG9jdW1lbnQ6OnB1dChF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgSlNWYWx1ZSAq
dmFsdWUsIGludCBhdHRyKQotewotICAgIGxvb2t1cFB1dDxKU0hUTUxEb2N1bWVudCwgSlNEb2N1
bWVudD4oZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0ciwgJkhUTUxEb2N1bWVudFRhYmxl
LCB0aGlzKTsKLX0KLQotdm9pZCBKU0hUTUxEb2N1bWVudDo6cHV0VmFsdWVQcm9wZXJ0eShFeGVj
U3RhdGUqIGV4ZWMsIGludCB0b2tlbiwgSlNWYWx1ZSAqdmFsdWUsIGludCAvKmF0dHIqLykKLXsK
LSAgRE9NRXhjZXB0aW9uVHJhbnNsYXRvciBleGNlcHRpb24oZXhlYyk7Ci0gIEhUTUxEb2N1bWVu
dCAmZG9jID0gKnN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCo+KGltcGwoKSk7Ci0gIEhUTUxFbGVt
ZW50KiBib2R5ID0gZG9jLmJvZHkoKTsKLSAgSFRNTEJvZHlFbGVtZW50KiBib2R5RWxlbWVudCA9
IChib2R5ICYmIGJvZHktPmhhc1RhZ05hbWUoYm9keVRhZykpID8gc3RhdGljX2Nhc3Q8SFRNTEJv
ZHlFbGVtZW50Kj4oYm9keSkgOiAwOwotCi0gIHN3aXRjaCAodG9rZW4pIHsKLSAgY2FzZSBUaXRs
ZToKLSAgICBkb2Muc2V0VGl0bGUodmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2soZXhlYywgdmFs
dWUpKTsKLSAgICBicmVhazsKLSAgY2FzZSBCb2R5OgotICAgIGRvYy5zZXRCb2R5KHRvSFRNTEVs
ZW1lbnQodmFsdWUpLCBleGNlcHRpb24pOwotICAgIGJyZWFrOwotICBjYXNlIERvbWFpbjogLy8g
bm90IHBhcnQgb2YgdGhlIERPTQotICAgIGRvYy5zZXREb21haW4odmFsdWUtPnRvU3RyaW5nKGV4
ZWMpKTsKLSAgICBicmVhazsKLSAgY2FzZSBDb29raWU6Ci0gICAgZG9jLnNldENvb2tpZSh2YWx1
ZVRvU3RyaW5nV2l0aE51bGxDaGVjayhleGVjLCB2YWx1ZSkpOwotICAgIGJyZWFrOwotICBjYXNl
IExvY2F0aW9uOgotICAgIGlmIChGcmFtZSogZnJhbWUgPSBkb2MuZnJhbWUoKSkgewotICAgICAg
RGVwcmVjYXRlZFN0cmluZyBzdHIgPSB2YWx1ZS0+dG9TdHJpbmcoZXhlYyk7Ci0KLSAgICAgIC8v
IFdoZW4gYXNzaWduaW5nIGxvY2F0aW9uLCBJRSBhbmQgTW96aWxsYSBib3RoIHJlc29sdmUgdGhl
IFVSTAotICAgICAgLy8gcmVsYXRpdmUgdG8gdGhlIGZyYW1lIHdoZXJlIHRoZSBKYXZhU2NyaXB0
IGlzIGV4ZWN1dGluZyBub3QKLSAgICAgIC8vIHRoZSB0YXJnZXQgZnJhbWUuCi0gICAgICBGcmFt
ZSogYWN0aXZlRnJhbWUgPSBzdGF0aWNfY2FzdDxTY3JpcHRJbnRlcnByZXRlcio+KCBleGVjLT5k
eW5hbWljSW50ZXJwcmV0ZXIoKSApLT5mcmFtZSgpOwotICAgICAgaWYgKGFjdGl2ZUZyYW1lKQot
ICAgICAgICBzdHIgPSBhY3RpdmVGcmFtZS0+ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoc3RyKTsK
LQotICAgICAgLy8gV2Ugd2FudCBhIG5ldyBoaXN0b3J5IGl0ZW0gaWYgdGhpcyBKUyB3YXMgY2Fs
bGVkIHZpYSBhIHVzZXIgZ2VzdHVyZQotICAgICAgYm9vbCB1c2VyR2VzdHVyZSA9IHN0YXRpY19j
YXN0PFNjcmlwdEludGVycHJldGVyKj4oZXhlYy0+ZHluYW1pY0ludGVycHJldGVyKCkpLT53YXNS
dW5CeVVzZXJHZXN0dXJlKCk7Ci0gICAgICBmcmFtZS0+bG9hZGVyKCktPnNjaGVkdWxlTG9jYXRp
b25DaGFuZ2Uoc3RyLCBhY3RpdmVGcmFtZS0+bG9hZGVyKCktPm91dGdvaW5nUmVmZXJyZXIoKSwg
IXVzZXJHZXN0dXJlKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0gIGNhc2UgQmdDb2xvcjoKLSAgICBp
ZiAoYm9keUVsZW1lbnQpCi0gICAgICBib2R5RWxlbWVudC0+c2V0QmdDb2xvcih2YWx1ZVRvU3Ry
aW5nV2l0aE51bGxDaGVjayhleGVjLCB2YWx1ZSkpOwotICAgIGJyZWFrOwotICBjYXNlIEZnQ29s
b3I6Ci0gICAgaWYgKGJvZHlFbGVtZW50KQotICAgICAgYm9keUVsZW1lbnQtPnNldFRleHQodmFs
dWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2soZXhlYywgdmFsdWUpKTsKLSAgICBicmVhazsKLSAgY2Fz
ZSBBbGlua0NvbG9yOgotICAgIGlmIChib2R5RWxlbWVudCkgewotICAgICAgLy8gdGhpcyBjaGVj
ayBpcyBhIGJpdCBzaWxseSwgYnV0IHNvbWUgYmVuY2htYXJrcyBsaWtlIHRvIHNldCB0aGUKLSAg
ICAgIC8vIGRvY3VtZW50J3MgbGluayBjb2xvcnMgb3ZlciBhbmQgb3ZlciB0byB0aGUgc2FtZSB2
YWx1ZSBhbmQgd2UKLSAgICAgIC8vIGRvbid0IHdhbnQgdG8gaW5jdXIgYSBzdHlsZSB1cGRhdGUg
ZWFjaCB0aW1lLgotICAgICAgU3RyaW5nIG5ld0NvbG9yID0gdmFsdWVUb1N0cmluZ1dpdGhOdWxs
Q2hlY2soZXhlYywgdmFsdWUpOwotICAgICAgaWYgKGJvZHlFbGVtZW50LT5hTGluaygpICE9IG5l
d0NvbG9yKQotICAgICAgICBib2R5RWxlbWVudC0+c2V0QUxpbmsobmV3Q29sb3IpOwotICAgIH0K
LSAgICBicmVhazsKLSAgY2FzZSBMaW5rQ29sb3I6Ci0gICAgaWYgKGJvZHlFbGVtZW50KSB7Ci0g
ICAgICAvLyB0aGlzIGNoZWNrIGlzIGEgYml0IHNpbGx5LCBidXQgc29tZSBiZW5jaG1hcmtzIGxp
a2UgdG8gc2V0IHRoZQotICAgICAgLy8gZG9jdW1lbnQncyBsaW5rIGNvbG9ycyBvdmVyIGFuZCBv
dmVyIHRvIHRoZSBzYW1lIHZhbHVlIGFuZCB3ZQotICAgICAgLy8gZG9uJ3Qgd2FudCB0byBpbmN1
ciBhIHN0eWxlIHVwZGF0ZSBlYWNoIHRpbWUuCi0gICAgICBTdHJpbmcgbmV3Q29sb3IgPSB2YWx1
ZVRvU3RyaW5nV2l0aE51bGxDaGVjayhleGVjLCB2YWx1ZSk7Ci0gICAgICBpZiAoYm9keUVsZW1l
bnQtPmxpbmsoKSAhPSBuZXdDb2xvcikKLSAgICAgICAgYm9keUVsZW1lbnQtPnNldExpbmsobmV3
Q29sb3IpOwotICAgIH0KLSAgICBicmVhazsKLSAgY2FzZSBWbGlua0NvbG9yOgotICAgIGlmIChi
b2R5RWxlbWVudCkgewotICAgICAgLy8gdGhpcyBjaGVjayBpcyBhIGJpdCBzaWxseSwgYnV0IHNv
bWUgYmVuY2htYXJrcyBsaWtlIHRvIHNldCB0aGUKLSAgICAgIC8vIGRvY3VtZW50J3MgbGluayBj
b2xvcnMgb3ZlciBhbmQgb3ZlciB0byB0aGUgc2FtZSB2YWx1ZSBhbmQgd2UKLSAgICAgIC8vIGRv
bid0IHdhbnQgdG8gaW5jdXIgYSBzdHlsZSB1cGRhdGUgZWFjaCB0aW1lLgotICAgICAgU3RyaW5n
IG5ld0NvbG9yID0gdmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2soZXhlYywgdmFsdWUpOwotICAg
ICAgaWYgKGJvZHlFbGVtZW50LT52TGluaygpICE9IG5ld0NvbG9yKQotICAgICAgICBib2R5RWxl
bWVudC0+c2V0VkxpbmsobmV3Q29sb3IpOwotICAgIH0KLSAgICBicmVhazsKLSAgY2FzZSBEaXI6
Ci0gICAgaWYgKGJvZHkpCi0gICAgICBib2R5LT5zZXREaXIodmFsdWVUb1N0cmluZ1dpdGhOdWxs
Q2hlY2soZXhlYywgdmFsdWUpKTsKLSAgICBicmVhazsKLSAgY2FzZSBEZXNpZ25Nb2RlOgotICAg
IHsKLSAgICAgIFN0cmluZyBtb2RlU3RyaW5nID0gdmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2so
ZXhlYywgdmFsdWUpOwotICAgICAgRG9jdW1lbnQ6OkluaGVyaXRlZEJvb2wgbW9kZTsKLSAgICAg
IGlmIChlcXVhbElnbm9yaW5nQ2FzZShtb2RlU3RyaW5nLCAib24iKSkKLSAgICAgICAgbW9kZSA9
IERvY3VtZW50OjpvbjsKLSAgICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG1vZGVTdHJp
bmcsICJvZmYiKSkKLSAgICAgICAgbW9kZSA9IERvY3VtZW50OjpvZmY7Ci0gICAgICBlbHNlCi0g
ICAgICAgIG1vZGUgPSBEb2N1bWVudDo6aW5oZXJpdDsKLSAgICAgIGRvYy5zZXREZXNpZ25Nb2Rl
KG1vZGUpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICBjYXNlIEFsbDoKLSAgICAvLyBBZGQgImFs
bCIgdG8gdGhlIHByb3BlcnR5IG1hcC4KLSAgICBwdXREaXJlY3QoImFsbCIsIHZhbHVlKTsKLSAg
ICBicmVhazsKLSAgfQotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KIGNvbnN0IENsYXNzSW5m
byBKU0hUTUxFbGVtZW50OjppbmZvID0geyAiSFRNTEVsZW1lbnQiLCAmSlNFbGVtZW50OjppbmZv
LCAmSFRNTEVsZW1lbnRUYWJsZSwgMCB9OwogCiBjb25zdCBDbGFzc0luZm8gSlNIVE1MRWxlbWVu
dDo6ZW1iZWRfaW5mbyA9IHsgIkhUTUxFbWJlZEVsZW1lbnQiLCAmSlNIVE1MRWxlbWVudDo6aW5m
bywgJkhUTUxFbWJlZEVsZW1lbnRUYWJsZSwgMCB9OwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9q
cy9ranNfaHRtbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX2h0bWwu
aAkocmV2aXNpb24gMjE2NzEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19odG1sLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM3LDI1ICszNyw2IEBAIG5hbWVzcGFjZSBLSlMgewogCiAgIGNsYXNz
IEpTQWJzdHJhY3RFdmVudExpc3RlbmVyOwogCi0gIEtKU19ERUZJTkVfUFJPVE9UWVBFX1dJVEhf
UFJPVE9UWVBFKEpTSFRNTERvY3VtZW50UHJvdG90eXBlLCBXZWJDb3JlOjpKU0RvY3VtZW50UHJv
dG90eXBlKQotCi0gIGNsYXNzIEpTSFRNTERvY3VtZW50IDogcHVibGljIFdlYkNvcmU6OkpTRG9j
dW1lbnQgewotICBwdWJsaWM6Ci0gICAgSlNIVE1MRG9jdW1lbnQoRXhlY1N0YXRlKiwgV2ViQ29y
ZTo6SFRNTERvY3VtZW50Kik7Ci0gICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChF
eGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7Ci0gICAgSlNWYWx1
ZSogZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUqLCBpbnQgdG9rZW4pIGNvbnN0OwotICAgIHZp
cnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBKU1ZhbHVlKiwgaW50IGF0dHIgPSBOb25lKTsKLSAgICB2b2lkIHB1dFZhbHVlUHJvcGVydHko
RXhlY1N0YXRlKiwgaW50IHRva2VuLCBKU1ZhbHVlKiwgaW50IC8qYXR0ciovKTsKLSAgICB2aXJ0
dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0K
LSAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87Ci0gICAgZW51bSB7IFRpdGxlLCBSZWZl
cnJlciwgRG9tYWluLCBCb2R5LCBMb2NhdGlvbiwgQ29va2llLAotICAgICAgICAgICBJbWFnZXMs
IEFwcGxldHMsIEVtYmVkcywgTGlua3MsIEZvcm1zLCBBbmNob3JzLCBTY3JpcHRzLCBBbGwsIENs
ZWFyLCBPcGVuLCBDbG9zZSwKLSAgICAgICAgICAgV3JpdGUsIFdyaXRlTG4sIEdldEVsZW1lbnRz
QnlOYW1lLCBDYXB0dXJlRXZlbnRzLCBSZWxlYXNlRXZlbnRzLAotICAgICAgICAgICBCZ0NvbG9y
LCBGZ0NvbG9yLCBBbGlua0NvbG9yLCBMaW5rQ29sb3IsIFZsaW5rQ29sb3IsIExhc3RNb2RpZmll
ZCwgSGVpZ2h0LCBXaWR0aCwgRGlyLCBEZXNpZ25Nb2RlIH07Ci0gIHByaXZhdGU6Ci0gICAgc3Rh
dGljIEpTVmFsdWUqIG5hbWVkSXRlbUdldHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0
IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKLSAgfTsKLQogICAvLyBUaGUgaW5o
ZXJpdGFuY2UgY2hhaW4gZm9yIEpTSFRNTEVsZW1lbnQgaXMgYSBiaXQgZGlmZmVyZW50IGZyb20g
b3RoZXIKICAgLy8gY2xhc3NlcyB0aGF0IGFyZSAiaGFsZi1hdXRvZ2VuZXJhdGVkIi4gQmVjYXVz
ZSB3ZSByZXR1cm4gZGlmZmVyZW50IENsYXNzSW5mbyBzdHJ1Y3RzCiAgIC8vIGRlcGVuZGluZyBv
biB0aGUgdHlwZSBvZiBlbGVtZW50LCB3ZSBpbmhlcml0IEpTSFRNTEVsZW1lbnQgZnJvbSBXZWJD
b3JlOjpKU0hUTUxFbGVtZW50CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NUHJpdmF0
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01Qcml2YXRlLmgJKHJl
dmlzaW9uIDIxNjcxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTVByaXZhdGUuaAkod29y
a2luZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9ET01IVE1MQXJl
YUVsZW1lbnRQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0RPTUhUTUxCb2R5RWxlbWVudFBy
aXZhdGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvRE9NSFRNTEJ1dHRvbkVsZW1lbnRQcml2YXRlLmg+
CisjaW1wb3J0IDxXZWJDb3JlL0RPTUhUTUxEb2N1bWVudFByaXZhdGUuaD4KICNpbXBvcnQgPFdl
YkNvcmUvRE9NSFRNTEZvcm1FbGVtZW50UHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9ET01I
VE1MRnJhbWVFbGVtZW50UHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9ET01IVE1MSW1hZ2VF
bGVtZW50UHJpdmF0ZS5oPgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvckpTLnBtCShyZXZpc2lvbiAyMTY3MSkKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTMsNyArMyw3IEBACiAjIENv
cHlyaWdodCAoQykgMjAwNiBBbmRlcnMgQ2FybHNzb24gPGFuZGVyc2NhQG1hYy5jb20+CiAjIENv
cHlyaWdodCAoQykgMjAwNiwgMjAwNyBTYW11ZWwgV2VpbmlnIDxzYW1Ad2Via2l0Lm9yZz4KICMg
Q29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQHdlYmtpdC5vcmc+Ci0j
IENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorIyBDb3B5cmlnaHQgKEMp
IDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBUaGlzIGZp
bGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKICMKQEAgLTU3Miw4ICs1NzIsMTAgQEAgc3Vi
IEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDogV0tfdWNmaXJzdCgkYXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWUpIC4gIkF0dHJO
dW0iKTsKICAgICAgICAgICAgIHB1c2goQGhhc2hWYWx1ZXMsICR2YWx1ZSk7CiAKLSAgICAgICAg
ICAgIG15ICRzcGVjaWFsID0gIkRvbnREZWxldGUiOwotICAgICAgICAgICAgJHNwZWNpYWwgLj0g
InxSZWFkT25seSIgaWYgKCRhdHRyaWJ1dGUtPnR5cGUgPX4gL3JlYWRvbmx5Lyk7CisgICAgICAg
ICAgICBteSBAc3BlY2lhbHMgPSAoKTsKKyAgICAgICAgICAgIHB1c2goQHNwZWNpYWxzLCAiRG9u
dERlbGV0ZSIpIHVubGVzcyAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJEZWxldGFibGUifTsKKyAgICAgICAgICAgIHB1c2goQHNwZWNpYWxzLCAiUmVhZE9ubHki
KSBpZiAkYXR0cmlidXRlLT50eXBlID1+IC9yZWFkb25seS87CisgICAgICAgICAgICBteSAkc3Bl
Y2lhbCA9IChAc3BlY2lhbHMgPiAwKSA/IGpvaW4oInwiLCBAc3BlY2lhbHMpIDogIjAiOwogICAg
ICAgICAgICAgcHVzaChAaGFzaFNwZWNpYWxzLCAkc3BlY2lhbCk7CiAKICAgICAgICAgICAgIG15
ICRudW1QYXJhbWV0ZXJzID0gIjAiOwpAQCAtNjUyLDcgKzY1NCwxMCBAQCBzdWIgR2VuZXJhdGVJ
bXBsZW1lbnRhdGlvbgogICAgICAgICBteSAkdmFsdWUgPSAkY2xhc3NOYW1lIC4gIjo6IiAuIFdL
X3VjZmlyc3QoJG5hbWUpIC4gIkZ1bmNOdW0iOwogICAgICAgICBwdXNoKEBoYXNoVmFsdWVzLCAk
dmFsdWUpOwogCi0gICAgICAgIG15ICRzcGVjaWFsID0gIkRvbnREZWxldGV8RnVuY3Rpb24iOwor
ICAgICAgICBteSBAc3BlY2lhbHMgPSAoKTsKKyAgICAgICAgcHVzaChAc3BlY2lhbHMsICJEb250
RGVsZXRlIikgdW5sZXNzICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiRGVsZXRhYmxlIn07CisgICAgICAgIHB1c2goQHNwZWNpYWxzLCAiRnVuY3Rpb24iKTsgICAg
ICAgIAorICAgICAgICBteSAkc3BlY2lhbCA9IChAc3BlY2lhbHMgPiAwKSA/IGpvaW4oInwiLCBA
c3BlY2lhbHMpIDogIjAiOwogICAgICAgICBwdXNoKEBoYXNoU3BlY2lhbHMsICRzcGVjaWFsKTsK
IAogICAgICAgICBteSAkbnVtUGFyYW1ldGVycyA9IEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfTsK
QEAgLTc4NSwxMiArNzkwLDYgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH1cbiIpOwogICAgICAgICB9CiAKLSAgICAgICAg
aWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ikhhc05hbWVHZXR0ZXIifSB8fCAk
ZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJIYXNPdmVycmlkaW5nTmFtZUdldHRlciJ9
KSB7Ci0gICAgICAgICAgICAjIGlmIGl0IGhhcyBhIHByb3RvdHlwZSwgd2UgbmVlZCB0byBjaGVj
ayB0aGF0IGZpcnN0IHRvbwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYg
KHByb3RvdHlwZSgpLT5pc09iamVjdCgpICYmIHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4ocHJvdG90
eXBlKCkpLT5oYXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUpKVxuIik7Ci0gICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIGZhbHNlO1xuIik7Ci0gICAgICAg
IH0KLQogICAgICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSGFzSW5k
ZXhHZXR0ZXIifSkgewogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYm9vbCBv
aztcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgdW5zaWduZWQgdSA9
IHByb3BlcnR5TmFtZS50b1VJbnQzMigmb2spO1xuIik7CkBAIC0xNDIyLDggKzE0MjEsMTMgQEAg
c3ViIE5hdGl2ZVRvSlNWYWx1ZQogICAgIH0gZWxzaWYgKCR0eXBlIGVxICJFdmVudCIpIHsKICAg
ICAgICAgJGltcGxJbmNsdWRlc3sia2pzX2V2ZW50cy5oIn0gPSAxOwogICAgICAgICAkaW1wbElu
Y2x1ZGVzeyJFdmVudC5oIn0gPSAxOwotICAgIH0gZWxzaWYgKCR0eXBlIGVxICJOb2RlTGlzdCIg
b3IgJHR5cGUgZXEgIk5hbWVkTm9kZU1hcCIpIHsKKyAgICB9IGVsc2lmICgkdHlwZSBlcSAiTm9k
ZUxpc3QiKSB7CisgICAgICAgICRpbXBsSW5jbHVkZXN7Imtqc19kb20uaCJ9ID0gMTsKKyAgICAg
ICAgJGltcGxJbmNsdWRlc3siTm9kZUxpc3QuaCJ9ID0gMTsKKyAgICAgICAgJGltcGxJbmNsdWRl
c3siTmFtZU5vZGVMaXN0LmgifSA9IDE7CisgICAgfSBlbHNpZiAoJHR5cGUgZXEgIk5hbWVkTm9k
ZU1hcCIpIHsKICAgICAgICAgJGltcGxJbmNsdWRlc3sia2pzX2RvbS5oIn0gPSAxOworICAgICAg
ICAkaW1wbEluY2x1ZGVzeyJOYW1lZE5vZGVNYXAuaCJ9ID0gMTsKICAgICB9IGVsc2lmICgkdHlw
ZSBlcSAiQ1NTU3R5bGVTaGVldCIgb3IgJHR5cGUgZXEgIlN0eWxlU2hlZXQiIG9yICR0eXBlIGVx
ICJNZWRpYUxpc3QiKSB7CiAgICAgICAgICRpbXBsSW5jbHVkZXN7IkNTU1N0eWxlU2hlZXQuaCJ9
ID0gMTsKICAgICAgICAgJGltcGxJbmNsdWRlc3siTWVkaWFMaXN0LmgifSA9IDE7CkluZGV4OiBX
ZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1l
bnQuY3BwCShyZXZpc2lvbiAyMTY3MSkKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzMyOSw2ICszMzI5LDEyIEBAIFBhc3NSZWZQdHI8SFRNTENvbGxlY3Rp
b24+IERvY3VtZW50OjplbWIKICAgICByZXR1cm4gbmV3IEhUTUxDb2xsZWN0aW9uKHRoaXMsIEhU
TUxDb2xsZWN0aW9uOjpEb2NFbWJlZHMpOwogfQogCitQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9u
PiBEb2N1bWVudDo6cGx1Z2lucygpCit7CisgICAgLy8gVGhpcyBpcyBhbiBhbGlhcyBmb3IgZW1i
ZWRzKCkgcmVxdWlyZWQgZm9yIHRoZSBKUyBET00gYmluZGluZ3MuCisgICAgcmV0dXJuIG5ldyBI
VE1MQ29sbGVjdGlvbih0aGlzLCBIVE1MQ29sbGVjdGlvbjo6RG9jRW1iZWRzKTsKK30KKwogUGFz
c1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gRG9jdW1lbnQ6Om9iamVjdHMoKQogewogICAgIHJldHVy
biBuZXcgSFRNTENvbGxlY3Rpb24odGhpcywgSFRNTENvbGxlY3Rpb246OkRvY09iamVjdHMpOwpJ
bmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9E
b2N1bWVudC5oCShyZXZpc2lvbiAyMTY3MSkKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTIwNyw2ICsyMDcsNyBAQCBwdWJsaWM6CiAKICAgICBQYXNzUmVmUHRy
PEhUTUxDb2xsZWN0aW9uPiBpbWFnZXMoKTsKICAgICBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9u
PiBlbWJlZHMoKTsKKyAgICBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBwbHVnaW5zKCk7IC8v
IGFuIGFsaWFzIGZvciBlbWJlZHMoKSByZXF1aXJlZCBmb3IgdGhlIEpTIERPTSBiaW5kaW5ncy4K
ICAgICBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBhcHBsZXRzKCk7CiAgICAgUGFzc1JlZlB0
cjxIVE1MQ29sbGVjdGlvbj4gbGlua3MoKTsKICAgICBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9u
PiBmb3JtcygpOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5jcHAJKHJldmlzaW9uIDIxNjcxKQorKysg
V2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDYgKzYx
LDggQEAKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNp
bmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUg
IkhUTUxCb2R5RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAi
SFRNTEVsZW1lbnRGYWN0b3J5LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCkBAIC0xMTYsNiAr
MTE4LDE2OCBAQCB2b2lkIEhUTUxEb2N1bWVudDo6c2V0Qm9keShIVE1MRWxlbWVudCogCiAgICAg
ICAgIGRvY3VtZW50RWxlbWVudCgpLT5yZXBsYWNlQ2hpbGQobmV3Qm9keSwgYiwgZWMpOwogfQog
CitpbnQgSFRNTERvY3VtZW50Ojp3aWR0aCgpIGNvbnN0Cit7CisgICAgRnJhbWVWaWV3KiBmcmFt
ZVZpZXcgPSB2aWV3KCk7CisgICAgcmV0dXJuIGZyYW1lVmlldyA/IGZyYW1lVmlldy0+Y29udGVu
dHNXaWR0aCgpIDogMDsKK30KKworaW50IEhUTUxEb2N1bWVudDo6aGVpZ2h0KCkgY29uc3QKK3sK
KyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IHZpZXcoKTsKKyAgICByZXR1cm4gZnJhbWVWaWV3
ID8gZnJhbWVWaWV3LT5jb250ZW50c0hlaWdodCgpIDogMDsKK30KKworU3RyaW5nIEhUTUxEb2N1
bWVudDo6ZGlyKCkKK3sKKyAgICBIVE1MRWxlbWVudCogYiA9IGJvZHkoKTsKKyAgICBpZiAoIWIp
CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICByZXR1cm4gYi0+ZGlyKCk7Cit9CisKK3Zv
aWQgSFRNTERvY3VtZW50OjpzZXREaXIoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBIVE1M
RWxlbWVudCogYiA9IGJvZHkoKTsKKyAgICBpZiAoYikKKyAgICAgICAgYi0+c2V0RGlyKHZhbHVl
KTsKK30KKworU3RyaW5nIEhUTUxEb2N1bWVudDo6ZGVzaWduTW9kZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGluRGVzaWduTW9kZSgpID8gIm9uIiA6ICJvZmYiOworfQorCit2b2lkIEhUTUxEb2N1
bWVudDo6c2V0RGVzaWduTW9kZShjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIEluaGVyaXRl
ZEJvb2wgbW9kZTsKKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWUsICJvbiIpKQorICAg
ICAgICBtb2RlID0gb247CisgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWUsICJv
ZmYiKSkKKyAgICAgICAgbW9kZSA9IG9mZjsKKyAgICBlbHNlCisgICAgICAgIG1vZGUgPSBpbmhl
cml0OworICAgIERvY3VtZW50OjpzZXREZXNpZ25Nb2RlKG1vZGUpOworfQorCitTdHJpbmcgSFRN
TERvY3VtZW50OjpiZ0NvbG9yKCkKK3sKKyAgICBIVE1MRWxlbWVudCogYiA9IGJvZHkoKTsKKyAg
ICBIVE1MQm9keUVsZW1lbnQqIGJvZHlFbGVtZW50ID0gKGIgJiYgYi0+aGFzVGFnTmFtZShib2R5
VGFnKSkgPyBzdGF0aWNfY2FzdDxIVE1MQm9keUVsZW1lbnQqPihiKSA6IDA7CisKKyAgICBpZiAo
IWJvZHlFbGVtZW50KQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIGJvZHlF
bGVtZW50LT5iZ0NvbG9yKCk7Cit9CisKK3ZvaWQgSFRNTERvY3VtZW50OjpzZXRCZ0NvbG9yKGNv
bnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgSFRNTEVsZW1lbnQqIGIgPSBib2R5KCk7CisgICAg
SFRNTEJvZHlFbGVtZW50KiBib2R5RWxlbWVudCA9IChiICYmIGItPmhhc1RhZ05hbWUoYm9keVRh
ZykpID8gc3RhdGljX2Nhc3Q8SFRNTEJvZHlFbGVtZW50Kj4oYikgOiAwOworCisgICAgaWYgKGJv
ZHlFbGVtZW50KQorICAgICAgICBib2R5RWxlbWVudC0+c2V0QmdDb2xvcih2YWx1ZSk7Cit9CisK
K1N0cmluZyBIVE1MRG9jdW1lbnQ6OmZnQ29sb3IoKQoreworICAgIEhUTUxFbGVtZW50KiBiID0g
Ym9keSgpOworICAgIEhUTUxCb2R5RWxlbWVudCogYm9keUVsZW1lbnQgPSAoYiAmJiBiLT5oYXNU
YWdOYW1lKGJvZHlUYWcpKSA/IHN0YXRpY19jYXN0PEhUTUxCb2R5RWxlbWVudCo+KGIpIDogMDsK
KworICAgIGlmICghYm9keUVsZW1lbnQpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICBy
ZXR1cm4gYm9keUVsZW1lbnQtPnRleHQoKTsKK30KKwordm9pZCBIVE1MRG9jdW1lbnQ6OnNldEZn
Q29sb3IoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBIVE1MRWxlbWVudCogYiA9IGJvZHko
KTsKKyAgICBIVE1MQm9keUVsZW1lbnQqIGJvZHlFbGVtZW50ID0gKGIgJiYgYi0+aGFzVGFnTmFt
ZShib2R5VGFnKSkgPyBzdGF0aWNfY2FzdDxIVE1MQm9keUVsZW1lbnQqPihiKSA6IDA7CisKKyAg
ICBpZiAoYm9keUVsZW1lbnQpCisgICAgICAgIGJvZHlFbGVtZW50LT5zZXRUZXh0KHZhbHVlKTsK
K30KKworU3RyaW5nIEhUTUxEb2N1bWVudDo6YWxpbmtDb2xvcigpCit7CisgICAgSFRNTEVsZW1l
bnQqIGIgPSBib2R5KCk7CisgICAgSFRNTEJvZHlFbGVtZW50KiBib2R5RWxlbWVudCA9IChiICYm
IGItPmhhc1RhZ05hbWUoYm9keVRhZykpID8gc3RhdGljX2Nhc3Q8SFRNTEJvZHlFbGVtZW50Kj4o
YikgOiAwOworCisgICAgaWYgKCFib2R5RWxlbWVudCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygp
OworICAgIHJldHVybiBib2R5RWxlbWVudC0+YUxpbmsoKTsKK30KKwordm9pZCBIVE1MRG9jdW1l
bnQ6OnNldEFsaW5rQ29sb3IoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBIVE1MRWxlbWVu
dCogYiA9IGJvZHkoKTsKKyAgICBIVE1MQm9keUVsZW1lbnQqIGJvZHlFbGVtZW50ID0gKGIgJiYg
Yi0+aGFzVGFnTmFtZShib2R5VGFnKSkgPyBzdGF0aWNfY2FzdDxIVE1MQm9keUVsZW1lbnQqPihi
KSA6IDA7CisKKyAgICBpZiAoYm9keUVsZW1lbnQpIHsKKyAgICAgICAgLy8gVGhpcyBjaGVjayBp
cyBhIGJpdCBzaWxseSwgYnV0IHNvbWUgYmVuY2htYXJrcyBsaWtlIHRvIHNldCB0aGUKKyAgICAg
ICAgLy8gZG9jdW1lbnQncyBsaW5rIGNvbG9ycyBvdmVyIGFuZCBvdmVyIHRvIHRoZSBzYW1lIHZh
bHVlIGFuZCB3ZQorICAgICAgICAvLyBkb24ndCB3YW50IHRvIGluY3VyIGEgc3R5bGUgdXBkYXRl
IGVhY2ggdGltZS4KKyAgICAgICAgaWYgKGJvZHlFbGVtZW50LT5hTGluaygpICE9IHZhbHVlKQor
ICAgICAgICAgICAgYm9keUVsZW1lbnQtPnNldEFMaW5rKHZhbHVlKTsKKyAgICB9Cit9CisKK1N0
cmluZyBIVE1MRG9jdW1lbnQ6OmxpbmtDb2xvcigpCit7CisgICAgSFRNTEVsZW1lbnQqIGIgPSBi
b2R5KCk7CisgICAgSFRNTEJvZHlFbGVtZW50KiBib2R5RWxlbWVudCA9IChiICYmIGItPmhhc1Rh
Z05hbWUoYm9keVRhZykpID8gc3RhdGljX2Nhc3Q8SFRNTEJvZHlFbGVtZW50Kj4oYikgOiAwOwor
CisgICAgaWYgKCFib2R5RWxlbWVudCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIHJl
dHVybiBib2R5RWxlbWVudC0+bGluaygpOworfQorCit2b2lkIEhUTUxEb2N1bWVudDo6c2V0TGlu
a0NvbG9yKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgSFRNTEVsZW1lbnQqIGIgPSBib2R5
KCk7CisgICAgSFRNTEJvZHlFbGVtZW50KiBib2R5RWxlbWVudCA9IChiICYmIGItPmhhc1RhZ05h
bWUoYm9keVRhZykpID8gc3RhdGljX2Nhc3Q8SFRNTEJvZHlFbGVtZW50Kj4oYikgOiAwOworCisg
ICAgaWYgKGJvZHlFbGVtZW50KSB7CisgICAgICAgIC8vIFRoaXMgY2hlY2sgaXMgYSBiaXQgc2ls
bHksIGJ1dCBzb21lIGJlbmNobWFya3MgbGlrZSB0byBzZXQgdGhlCisgICAgICAgIC8vIGRvY3Vt
ZW50J3MgbGluayBjb2xvcnMgb3ZlciBhbmQgb3ZlciB0byB0aGUgc2FtZSB2YWx1ZSBhbmQgd2UK
KyAgICAgICAgLy8gZG9uJ3Qgd2FudCB0byBpbmN1ciBhIHN0eWxlIHVwZGF0ZSBlYWNoIHRpbWUu
CisgICAgICAgIGlmIChib2R5RWxlbWVudC0+bGluaygpICE9IHZhbHVlKQorICAgICAgICAgICAg
Ym9keUVsZW1lbnQtPnNldExpbmsodmFsdWUpOworICAgIH0KK30KKworU3RyaW5nIEhUTUxEb2N1
bWVudDo6dmxpbmtDb2xvcigpCit7CisgICAgSFRNTEVsZW1lbnQqIGIgPSBib2R5KCk7CisgICAg
SFRNTEJvZHlFbGVtZW50KiBib2R5RWxlbWVudCA9IChiICYmIGItPmhhc1RhZ05hbWUoYm9keVRh
ZykpID8gc3RhdGljX2Nhc3Q8SFRNTEJvZHlFbGVtZW50Kj4oYikgOiAwOworCisgICAgaWYgKCFi
b2R5RWxlbWVudCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiBib2R5RWxl
bWVudC0+dkxpbmsoKTsKK30KKwordm9pZCBIVE1MRG9jdW1lbnQ6OnNldFZsaW5rQ29sb3IoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBIVE1MRWxlbWVudCogYiA9IGJvZHkoKTsKKyAgICBI
VE1MQm9keUVsZW1lbnQqIGJvZHlFbGVtZW50ID0gKGIgJiYgYi0+aGFzVGFnTmFtZShib2R5VGFn
KSkgPyBzdGF0aWNfY2FzdDxIVE1MQm9keUVsZW1lbnQqPihiKSA6IDA7CisKKyAgICBpZiAoYm9k
eUVsZW1lbnQpIHsKKyAgICAgICAgLy8gVGhpcyBjaGVjayBpcyBhIGJpdCBzaWxseSwgYnV0IHNv
bWUgYmVuY2htYXJrcyBsaWtlIHRvIHNldCB0aGUKKyAgICAgICAgLy8gZG9jdW1lbnQncyBsaW5r
IGNvbG9ycyBvdmVyIGFuZCBvdmVyIHRvIHRoZSBzYW1lIHZhbHVlIGFuZCB3ZQorICAgICAgICAv
LyBkb24ndCB3YW50IHRvIGluY3VyIGEgc3R5bGUgdXBkYXRlIGVhY2ggdGltZS4KKyAgICAgICAg
aWYgKGJvZHlFbGVtZW50LT52TGluaygpICE9IHZhbHVlKQorICAgICAgICAgICAgYm9keUVsZW1l
bnQtPnNldFZMaW5rKHZhbHVlKTsKKyAgICB9Cit9CisKK3ZvaWQgSFRNTERvY3VtZW50OjpjYXB0
dXJlRXZlbnRzKCkKK3sKK30KKwordm9pZCBIVE1MRG9jdW1lbnQ6OnJlbGVhc2VFdmVudHMoKQor
eworfQorCiBUb2tlbml6ZXIgKkhUTUxEb2N1bWVudDo6Y3JlYXRlVG9rZW5pemVyKCkKIHsKICAg
ICByZXR1cm4gbmV3IEhUTUxUb2tlbml6ZXIodGhpcyk7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRN
TERvY3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5oCShy
ZXZpc2lvbiAyMTY3MSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtNDQsNiArNDQsMjkgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRCb2R5KEhUTUxF
bGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOwogCisgICAgaW50IHdpZHRoKCkgY29uc3Q7CisgICAg
aW50IGhlaWdodCgpIGNvbnN0OworCisgICAgU3RyaW5nIGRpcigpOworICAgIHZvaWQgc2V0RGly
KGNvbnN0IFN0cmluZyYpOworCisgICAgU3RyaW5nIGRlc2lnbk1vZGUoKSBjb25zdDsKKyAgICB2
b2lkIHNldERlc2lnbk1vZGUoY29uc3QgU3RyaW5nJik7CisKKyAgICBTdHJpbmcgYmdDb2xvcigp
OworICAgIHZvaWQgc2V0QmdDb2xvcihjb25zdCBTdHJpbmcmKTsKKyAgICBTdHJpbmcgZmdDb2xv
cigpOworICAgIHZvaWQgc2V0RmdDb2xvcihjb25zdCBTdHJpbmcmKTsKKyAgICBTdHJpbmcgYWxp
bmtDb2xvcigpOworICAgIHZvaWQgc2V0QWxpbmtDb2xvcihjb25zdCBTdHJpbmcmKTsKKyAgICBT
dHJpbmcgbGlua0NvbG9yKCk7CisgICAgdm9pZCBzZXRMaW5rQ29sb3IoY29uc3QgU3RyaW5nJik7
CisgICAgU3RyaW5nIHZsaW5rQ29sb3IoKTsKKyAgICB2b2lkIHNldFZsaW5rQ29sb3IoY29uc3Qg
U3RyaW5nJik7CisKKyAgICB2b2lkIGNhcHR1cmVFdmVudHMoKTsKKyAgICB2b2lkIHJlbGVhc2VF
dmVudHMoKTsKKwogICAgIHZpcnR1YWwgVG9rZW5pemVyKiBjcmVhdGVUb2tlbml6ZXIoKTsKIAog
ICAgIHZpcnR1YWwgYm9vbCBjaGlsZEFsbG93ZWQoTm9kZSopOwpJbmRleDogV2ViQ29yZS9odG1s
L0hUTUxEb2N1bWVudC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVu
dC5pZGwJKHJldmlzaW9uIDIxNjcxKQorKysgV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5pZGwJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2
IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBX
ZWluaWcgPHNhbS53ZWluaWdAZ21haWwuY29tPgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIwLDExICsyMCwx
NCBAQAogCiBtb2R1bGUgaHRtbCB7CiAKLSAgICBpbnRlcmZhY2UgW0xlZ2FjeVBhcmVudD1LSlM6
OkpTSFRNTERvY3VtZW50LCBHZW5lcmF0ZUNvbnN0cnVjdG9yXSBIVE1MRG9jdW1lbnQgOiBEb2N1
bWVudCB7Ci0jaWYgIWRlZmluZWQoTEFOR1VBR0VfSkFWQVNDUklQVCkKKyAgICBpbnRlcmZhY2Ug
W0dlbmVyYXRlQ29uc3RydWN0b3IsIEhhc092ZXJyaWRpbmdOYW1lR2V0dGVyXSBIVE1MRG9jdW1l
bnQgOiBEb2N1bWVudCB7CiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBbQ29udmVydE51bGxU
b051bGxTdHJpbmddIERPTVN0cmluZyB0aXRsZTsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRl
IERPTVN0cmluZyByZWZlcnJlcjsKKyNpZiBkZWZpbmVkKExBTkdVQUdFX0pBVkFTQ1JJUFQpCisg
ICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgZG9tYWluOworI2Vsc2UKICAgICAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBkb21haW47CisjZW5kaWYKICAgICAgICAg
cmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBVUkw7CiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgIC8vIEZJWE1FOiB0aGUgRE9NIHNwZWMgZG9lcyBOT1QgaGF2ZSB0aGlzIGF0dHJpYnV0ZQpA
QCAtNDMsMTYgKzQ2LDQ3IEBAIG1vZHVsZSBodG1sIHsKICAgICAgICAgICAgICAgICAgYXR0cmli
dXRlIFtDb252ZXJ0TnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIGNvb2tpZQogICAgICAgICAg
ICAgICAgICAgICAgLypzZXR0ZXIgcmFpc2VzIChET01FeGNlcHRpb24pKi87CiAKLSAgICAgICAg
dm9pZCAgICAgICAgICAgICAgIG9wZW4oKTsKLSAgICAgICAgdm9pZCAgICAgICAgICAgICAgIGNs
b3NlKCk7Ci0gICAgICAgIHZvaWQgICAgICAgICAgICAgICB3cml0ZShpbiBET01TdHJpbmcgdGV4
dCk7Ci0gICAgICAgIHZvaWQgICAgICAgICAgICAgICB3cml0ZWxuKGluIERPTVN0cmluZyB0ZXh0
KTsKLSAgICAgICAgTm9kZUxpc3QgICAgICAgICAgIGdldEVsZW1lbnRzQnlOYW1lKGluIERPTVN0
cmluZyBlbGVtZW50TmFtZSk7CisgICAgICAgIFtDdXN0b21dIHZvaWQgb3BlbigpOworICAgICAg
ICB2b2lkIGNsb3NlKCk7CisgICAgICAgIFtDdXN0b21dIHZvaWQgd3JpdGUoaW4gRE9NU3RyaW5n
IHRleHQpOworICAgICAgICBbQ3VzdG9tXSB2b2lkIHdyaXRlbG4oaW4gRE9NU3RyaW5nIHRleHQp
OworICAgICAgICBOb2RlTGlzdCBnZXRFbGVtZW50c0J5TmFtZShpbiBET01TdHJpbmcgZWxlbWVu
dE5hbWUpOworCisgICAgICAgIC8vIEV4dGVuc2lvbnMKKyAgICAgICAgRWxlbWVudCBnZXRFbGVt
ZW50QnlJZChpbiBET01TdHJpbmcgZWxlbWVudElkKTsKKworICAgICAgICByZWFkb25seSBhdHRy
aWJ1dGUgSFRNTENvbGxlY3Rpb24gZW1iZWRzOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUg
SFRNTENvbGxlY3Rpb24gcGx1Z2luczsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIEhUTUxD
b2xsZWN0aW9uIHNjcmlwdHM7CisKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmlu
ZyBsYXN0TW9kaWZpZWQ7CisKKyNpZiBkZWZpbmVkKExBTkdVQUdFX0pBVkFTQ1JJUFQpCisgICAg
ICAgIC8vIEZJWE1FOiBUaGVzZSBzaG91bGQgZXZlbnR1YWxseSBiZSBhdmFpbGFibGUgKGlmIHRo
ZXkgYXJlIHdhbnRlZCkgZm9yIGFsbCBsYW5ndWFnZXMuCiAKLSAgICAgICAgLy8gbm9uLXN0YW5k
YXJkCisgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBbQ3VzdG9tLCBEZWxldGFibGVdIEhUTUxD
b2xsZWN0aW9uIGFsbDsKIAotICAgICAgICBFbGVtZW50ICAgICAgICAgICAgZ2V0RWxlbWVudEJ5
SWQoaW4gRE9NU3RyaW5nIGVsZW1lbnRJZCk7CisgICAgICAgIC8vIEZJWE1FOiBDcmVhdGUgYW4g
W05vT3BdIHByb3BlcnR5IGZvciBsZWdhY3kgZnVuY3Rpb25zIHRoYXQgZG8gbm90aGluZyBsaWtl
IHRoaXMuCisgICAgICAgIFtDdXN0b21dIHZvaWQgY2xlYXIoKTsKKworICAgICAgICAgICAgICAg
ICBhdHRyaWJ1dGUgW0N1c3RvbV0gV2luZG93IGxvY2F0aW9uOwogI2VuZGlmCisKKyAgICAgICAg
dm9pZCBjYXB0dXJlRXZlbnRzKCk7CisgICAgICAgIHZvaWQgcmVsZWFzZUV2ZW50cygpOworCisg
ICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBsb25nIHdpZHRoOworICAgICAgICByZWFkb25seSBh
dHRyaWJ1dGUgbG9uZyBoZWlnaHQ7CisgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBbQ29udmVy
dE51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyBkaXI7CisgICAgICAgICAgICAgICAgIGF0dHJp
YnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyBkZXNpZ25Nb2RlOworCisg
ICAgICAgIC8vIERlcHJlY2F0ZWQgYXR0cmlidXRlcworICAgICAgICAgICAgICAgICBhdHRyaWJ1
dGUgW0NvbnZlcnROdWxsVG9OdWxsU3RyaW5nXSBET01TdHJpbmcgYmdDb2xvcjsKKyAgICAgICAg
ICAgICAgICAgYXR0cmlidXRlIFtDb252ZXJ0TnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIGZn
Q29sb3I7CisgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJp
bmddIERPTVN0cmluZyBhbGlua0NvbG9yOworICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgW0Nv
bnZlcnROdWxsVG9OdWxsU3RyaW5nXSBET01TdHJpbmcgbGlua0NvbG9yOworICAgICAgICAgICAg
ICAgICBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsVG9OdWxsU3RyaW5nXSBET01TdHJpbmcgdmxpbmtD
b2xvcjsKKwogICAgIH07CiAKIH0KSW5kZXg6IFdlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjE2NzEpCisrKyBXZWJLaXQvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMDctMDUtMjMgIFNhbSBXZWluaWcg
IDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBQYXRjaCBmb3IgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTM4MzAKKyAgICAgICAgQXV0by1nZW5lcmF0ZSBKUyBET00gYmluZGluZ3MgZm9yIEhUTUxE
b2N1bWVudCBhbmQgbW9zdCBvZiB0aGUgcmVzdAorICAgICAgICBvZiBIVE1MRWxlbWVudAorCisg
ICAgICAgICogTWlncmF0ZUhlYWRlcnMubWFrZTogYWRkIERPTUhUTUxEb2N1bWVudFByaXZhdGUu
aAorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDA3LTA1
LTIyICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
QWRhbS4KSW5kZXg6IFdlYktpdC9NaWdyYXRlSGVhZGVycy5tYWtlCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC9NaWdyYXRlSGVhZGVycy5tYWtlCShyZXZpc2lvbiAyMTY3MSkKKysrIFdlYktpdC9NaWdy
YXRlSGVhZGVycy5tYWtlCSh3b3JraW5nIGNvcHkpCkBAIC05Myw2ICs5Myw3IEBAIGFsbCA6IFwK
ICAgICAkKFBVQkxJQ19IRUFERVJTX0RJUikvRE9NSFRNTERpcmVjdG9yeUVsZW1lbnQuaCBcCiAg
ICAgJChQVUJMSUNfSEVBREVSU19ESVIpL0RPTUhUTUxEaXZFbGVtZW50LmggXAogICAgICQoUFVC
TElDX0hFQURFUlNfRElSKS9ET01IVE1MRG9jdW1lbnQuaCBcCisgICAgJChQUklWQVRFX0hFQURF
UlNfRElSKS9ET01IVE1MRG9jdW1lbnRQcml2YXRlLmggXAogICAgICQoUFVCTElDX0hFQURFUlNf
RElSKS9ET01IVE1MRWxlbWVudC5oIFwKICAgICAkKElOVEVSTkFMX0hFQURFUlNfRElSKS9ET01I
VE1MRWxlbWVudEludGVybmFsLmggXAogICAgICQoUFVCTElDX0hFQURFUlNfRElSKS9ET01IVE1M
RW1iZWRFbGVtZW50LmggXApJbmRleDogV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkocmV2aXNpb24gMjE2NzEpCisrKyBXZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEzMTcsNyArMTMxNyw2IEBACiAJCTA4NjdENjkw
RkU4NDAyOEZDMDJBQUMwNyAvKiBQcm9qZWN0IG9iamVjdCAqLyA9IHsKIAkJCWlzYSA9IFBCWFBy
b2plY3Q7CiAJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMTQ5QzI4MzIwODkwMkIwRjAwOEE5
RUZDIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVjdCAiV2ViS2l0IiAq
LzsKLQkJCWNvbXBhdGliaWxpdHlWZXJzaW9uID0gIlhjb2RlIDIuNCI7CiAJCQloYXNTY2FubmVk
Rm9yRW5jb2RpbmdzID0gMTsKIAkJCWtub3duUmVnaW9ucyA9ICgKIAkJCQlFbmdsaXNoLApAQCAt
MTMzMiw3ICsxMzMxLDYgQEAKIAkJCXByb2R1Y3RSZWZHcm91cCA9IDAzNDc2OERGRkYzOEE1MDQx
MURCOUM4QiAvKiBQcm9kdWN0cyAqLzsKIAkJCXByb2plY3REaXJQYXRoID0gIiI7CiAJCQlwcm9q
ZWN0Um9vdCA9ICIiOwotCQkJc2hvdWxkQ2hlY2tDb21wYXRpYmlsaXR5ID0gMTsKIAkJCXRhcmdl
dHMgPSAoCiAJCQkJOTM5ODEwMEEwODI0QkYwMTAwOERGMDM4IC8qIFdlYktpdCAqLywKIAkJCSk7
CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCShyZXZpc2lvbiAyMTY3MSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDA3LTA1LTIzICBTYW0gV2VpbmlnICA8c2Ft
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVXBkYXRlIHRlc3RzIGZvciBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMzgzMAorICAgICAgICBBdXRvLWdlbmVyYXRlIEpTIERPTSBiaW5kaW5ncyBmb3IgSFRN
TERvY3VtZW50IGFuZCBtb3N0IG9mIAorICAgICAgICB0aGUgcmVzdCBvZiBIVE1MRWxlbWVudAor
CisgICAgICAgIC0gQ29ycmVjdHMgcHJvdG90eXBlIGNoYWluIGZvciBKU0hUTUxEb2N1bWVudCBh
bmQgYWRkcyB0ZXN0CisgICAgICAgICAgZm9yIEhUTUxGb3JtRWxlbWVudC4KKworICAgICAgICAq
IGZhc3QvZG9tL3Byb3RvdHlwZS1jaGFpbi1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9k
b20vcHJvdG90eXBlLWNoYWluLmh0bWw6CisKIDIwMDctMDUtMjMgIEtldmluIE1jQ3VsbG91Z2gg
IDxrbWNjdWxsb3VnaEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkuCkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L2RvbS9wcm90b3R5cGUtY2hhaW4tZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL3Byb3RvdHlwZS1jaGFpbi1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDIxNjcxKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vcHJvdG90eXBlLWNoYWlu
LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMiw3ICsyLDcgQEAgVGhpcyBwYWdlIHBy
aW50cyBvdXQgdGhlIHByb3RvdHlwZSBjaGFpbgogCiBOT1RFOiBUaGlzIHRlc3Qgd2lsbCBzdGFy
dCBmYWlsaW5nIGlmIHlvdSBjaGFuZ2UgdGhlIGxheW91dCBvZiBhIHJlbGF0ZWQgcHJvdG90eXBl
IGNoYWluIGluIFdlYkNvcmUuIFRoYXQgZG9lcyBub3QgbmVjZXNzYXJpbHkgbWVhbiB0aGF0IHlv
dSBoYXZlIGRvbmUgc29tZXRoaW5nIHdyb25nOyB5b3UgbWF5IGp1c3QgbmVlZCB0byBjaGVjayBp
biBuZXcgcmVzdWx0cy4KIAotLS0tLS0gW29iamVjdCBIVE1MRG9jdW1lbnRdICg3IHByb3RvdHlw
ZXMpIC0tLS0tCistLS0tLSBbb2JqZWN0IEhUTUxEb2N1bWVudF0gKDYgcHJvdG90eXBlcykgLS0t
LS0KIAogW29iamVjdCBPYmplY3RdCiAKQEAgLTE0LDggKzE0LDYgQEAgTk9URTogVGhpcyB0ZXN0
IHdpbGwgc3RhcnQgZmFpbGluZyBpZiB5bwogCiBbb2JqZWN0IERvY3VtZW50UHJvdG90eXBlXQog
Ci1bb2JqZWN0IERPTUhUTUxEb2N1bWVudFByb3RvdHlwZV0KLQogW29iamVjdCBIVE1MRG9jdW1l
bnRQcm90b3R5cGVdCiAKIC0tLS0tIFtvYmplY3QgSFRNTERpdkVsZW1lbnRdICg4IHByb3RvdHlw
ZXMpIC0tLS0tCkBAIC0zNiw2ICszNCwyNCBAQCBOT1RFOiBUaGlzIHRlc3Qgd2lsbCBzdGFydCBm
YWlsaW5nIGlmIHlvCiAKIFtvYmplY3QgSFRNTERpdkVsZW1lbnRQcm90b3R5cGVdCiAKKy0tLS0t
IFtvYmplY3QgSFRNTEZvcm1FbGVtZW50XSAoOCBwcm90b3R5cGVzKSAtLS0tLQorCitbb2JqZWN0
IE9iamVjdF0KKworW29iamVjdCBET01Ob2RlUHJvdG90eXBlXQorCitbb2JqZWN0IE5vZGVQcm90
b3R5cGVdCisKK1tvYmplY3QgRE9NRXZlbnRUYXJnZXROb2RlUHJvdG90eXBlXQorCitbb2JqZWN0
IEVsZW1lbnRQcm90b3R5cGVdCisKK1tvYmplY3QgSFRNTEVsZW1lbnRQcm90b3R5cGVdCisKK1tv
YmplY3QgSFRNTEVsZW1lbnRQcm90b3R5cGVdCisKK1tvYmplY3QgSFRNTEZvcm1FbGVtZW50UHJv
dG90eXBlXQorCiAtLS0tLSBbb2JqZWN0IFVJRXZlbnRdICg0IHByb3RvdHlwZXMpIC0tLS0tCiAK
IFtvYmplY3QgT2JqZWN0XQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vcHJvdG90eXBlLWNo
YWluLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vcHJvdG90eXBlLWNo
YWluLmh0bWwJKHJldmlzaW9uIDIxNjcxKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vcHJvdG90
eXBlLWNoYWluLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDkgQEAgZnVuY3Rpb24g
dGVzdCgpCiAgICAgCiAgICAgZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkaXYiKTsKICAg
ICBwcmludFByb3RvdHlwZXMoZSk7CisKKyAgICBlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
Zm9ybSIpOworICAgIHByaW50UHJvdG90eXBlcyhlKTsKICAgICAKICAgICBlID0gZG9jdW1lbnQu
Y3JlYXRlRXZlbnQoIlVJRXZlbnRzIik7CiAgICAgcHJpbnRQcm90b3R5cGVzKGUpOwo=
</data>
<flag name="review"
          id="6040"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>