<?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>15737</bug_id>
          
          <creation_ts>2007-10-28 13:18:14 -0700</creation_ts>
          <short_desc>[GTK] A MenuList should look like a GtkComboBox</short_desc>
          <delta_ts>2007-11-03 08:15:18 -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>WebKitGTK</component>
          <version>523.x (Safari 3)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Christian Dywan">christian</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>59713</commentid>
    <comment_count>0</comment_count>
    <who name="Christian Dywan">christian</who>
    <bug_when>2007-10-28 13:18:14 -0700</bug_when>
    <thetext>Currently the MenuList is only a box. It should look like a GtkComboBox.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>59714</commentid>
    <comment_count>1</comment_count>
      <attachid>16918</attachid>
    <who name="Christian Dywan">christian</who>
    <bug_when>2007-10-28 13:31:51 -0700</bug_when>
    <thetext>Created attachment 16918
Try to make a MenuList look like a GtkComboBox

This is not quite a GtkComboBox, very similar to it. I don&apos;t know how close the match can be as themes render it differently.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>59745</commentid>
    <comment_count>2</comment_count>
    <who name="Alp Toker">alp</who>
    <bug_when>2007-10-28 18:14:03 -0700</bug_when>
    <thetext>I like the idea here but it doesn&apos;t look quite right yet (as you explained yourself).

I&apos;ve been seriously thinking about porting http://lxr.mozilla.org/seamonkey/source/widget/src/gtk2/gtk2drawing.c wholesale, as Mozilla does a pretty good job of this, and we might spend months just discovering and working around the same quirks they did.

Can you take a look at that and see if it&apos;s feasible, Christian? I&apos;d value your opinion here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>59756</commentid>
    <comment_count>3</comment_count>
      <attachid>16918</attachid>
    <who name="Alp Toker">alp</who>
    <bug_when>2007-10-28 19:39:12 -0700</bug_when>
    <thetext>Comment on attachment 16918
Try to make a MenuList look like a GtkComboBox

This doesn&apos;t match GTK+&apos;s style well enough.

This shows how difficult it is to get right, so I&apos;ve started work to port an existing solution to WebKit/GTK+.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>59812</commentid>
    <comment_count>4</comment_count>
    <who name="Alp Toker">alp</who>
    <bug_when>2007-10-29 16:34:56 -0700</bug_when>
    <thetext>I&apos;ve done the work to integrate gtkdrawing, will submit a patch soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>59959</commentid>
    <comment_count>5</comment_count>
      <attachid>16970</attachid>
    <who name="Alp Toker">alp</who>
    <bug_when>2007-10-31 16:54:39 -0700</bug_when>
    <thetext>Created attachment 16970
New RenderThemeGtk implementation (code shared with Mozilla)

RenderThemeGtk.cpp is a complete rewrite; any matching lines in the diff are coincidence or have a shared source from another port.

It now uses code shared with Mozilla to do the dirty work, since the GTK+ style API contains a lot of quirks which would take a long time to re-discover.

Coding style for the borrowed code should not be modified or reformatted.

I do not know if we need to change the copyright header of the Mozilla sources to plain LGPL or not, but it would be nice to be able to continue sharing it under the original license. Thoughts?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>59960</commentid>
    <comment_count>6</comment_count>
      <attachid>16971</attachid>
    <who name="Alp Toker">alp</who>
    <bug_when>2007-10-31 16:59:14 -0700</bug_when>
    <thetext>Created attachment 16971
New RenderThemeGtk implementation (code shared with Mozilla)

This is the actual patch. See comments of previous attachment.

Note also that the code is heavily TODO&apos;d to avoid the assumption from contributors that I knew what I was doing when I wrote those parts, and especially to avoid having them copied into other ports until they are properly implemented.

This is just the start of this feature, but I expect others will be keen to contribute once it&apos;s in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60024</commentid>
    <comment_count>7</comment_count>
    <who name="Christian Dywan">christian</who>
    <bug_when>2007-11-01 16:03:18 -0700</bug_when>
    <thetext>(In reply to comment #6) 
&gt; This is just the start of this feature, but I expect others will be keen to
&gt; contribute once it&apos;s in.

This is very nice and reusing mozilla code is better than starting from scratch.

What I don&apos;t really like is the GtkOptionMenu. It is deprecated since Gtk+ 2.4 and there should be a good reason to not use GtkComboBox in my opinion. If there is such a reason please add an appropriate comment in the code.

I like it that you already implemented the search control. I had code for this lying around as well. I wonder wether we should use an actual &quot;find&quot; icon like the mac port does, as the function of the dropdown button is not very obvious.

I agree that the remaining issues can be fixed in separate bugs, which will probably be combobox popup menu placement, check/ radio prelight, unwanted control background (Clearlooks), range control and file control.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60136</commentid>
    <comment_count>8</comment_count>
      <attachid>16971</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2007-11-02 21:46:53 -0700</bug_when>
    <thetext>Comment on attachment 16971
New RenderThemeGtk implementation (code shared with Mozilla)

It looks like in many of the adjust*Style methods you are no longer allowing web developers to style form controls at all, where the old code allowed for at least limited styling. Are you sure this is the direction the GTK port should go in? In the Mac/Windows ports there are heuristics to determine whether the native look should be used or a more generic, styled look should be used for each control, which gives a nice balance between native look-and-feel and stylability. Maybe that&apos;s something you want to emulate?

+    // TODO: This strategy is possibly incorrect for the GTK+ port.

Would you mind changing all your TODOs to FIXMEs?

+static void setMozState(RenderTheme* theme, GtkWidgetState* state, RenderObject* o)

It would be slightly nicer for the second paramater to be a GtkWidgetState&amp;, but it&apos;s not a big deal.
+    //state-&gt;active = theme-&gt;isChecked(o);

I think this commented-out code should be removed.

+    // It could be made a configuration option if 13 actually breaks site compatibility.

I think you mean &quot;...if sizes other than 13 actually break...&quot;

+void RenderThemeGtk::adjustSearchFieldResultsButtonStyle(CSSStyleSelector* selector, RenderStyle* style, Element* e) const
+{
+    adjustSearchFieldCancelButtonStyle(selector, style, e);
+}

This seems a little strange to me, but I suppose you&apos;re just saying that the cancel and results buttons should have the same style? It&apos;s a little confusing, though, since adjustSearchFieldResultsDecorationStyle doesn&apos;t call through to adjustSearchFieldCancelButtonStyle.

+bool RenderThemeGtk::paintSearchFieldResultsDecoration(RenderObject* o, const RenderObject::PaintInfo&amp; i, const IntRect&amp; rect)
+{
+    return paintSearchFieldCancelButton(o, i, rect);
+}

I&apos;m very confused by this. On Mac/Windows, the results button and the results decoration are both magnifying glasses. The difference is that the results button has a little downward-pointing arrow that indicates it will show a menu when you click on it. I don&apos;t think you want to show a cancel button where the results decoration goes, because then you&apos;d have cancel buttons on both sides of the control, but one wouldn&apos;t do anything.

+static void gtkStyleSetCb(GtkWidget* widget, GtkStyle* previous, RenderTheme* renderTheme)

Can you replace &quot;Cb&quot; with &quot;Callback&quot;?

r=me, though I do think you should consider the issue of stylability. You could land the code as-is and file a bug about it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60176</commentid>
    <comment_count>9</comment_count>
    <who name="Alp Toker">alp</who>
    <bug_when>2007-11-03 08:15:18 -0700</bug_when>
    <thetext>Landed in r27398.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>16918</attachid>
            <date>2007-10-28 13:31:51 -0700</date>
            <delta_ts>2007-10-28 19:39:12 -0700</delta_ts>
            <desc>Try to make a MenuList look like a GtkComboBox</desc>
            <filename>combobox.diff</filename>
            <type>text/plain</type>
            <size>4603</size>
            <attacher name="Christian Dywan">christian</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShSZXZpc2lvbiAyNzE4NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCShBcmJlaXRza29waWUpCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMDctMTAtMjggIENocmlzdGlhbiBEeXdhbiAgPGNocmlzdGlhbkB0
d290b2FzdHMuZGU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgV0FSTklORzogTk8gVEVTVCBDQVNFUyBBRERFRCBPUiBDSEFOR0VECisKKyAgICAgICAg
KiBwbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVHdGs6OmFkanVzdE1lbnVMaXN0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVHdGs6OnBhaW50TWVudUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVHdGs6Omd0a0NvbWJvQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpn
dGtDb21ib0JveEFycm93KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsu
aDoKKwogMjAwNy0xMC0yOCAgS2V2aW4gT2xsaXZpZXIgIDxrZXZpbm9AdGhlb2xsaXZpZXJzLmNv
bT4KIAogICAgICAgICBEZWZpbmUgdHlwZXMgYW5kIGFjY2Vzc29ycyBuZWVkZWQgZm9yIHd4IGlt
cGxlbWVudGF0aW9uCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuY3Bw
CShSZXZpc2lvbiAyNzE4MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3Rr
LmNwcAkoQXJiZWl0c2tvcGllKQpAQCAtMjcwLDE3ICsyNzAsMzEgQEAKIHZvaWQgUmVuZGVyVGhl
bWVHdGs6OmFkanVzdE1lbnVMaXN0U3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJl
bmRlclN0eWxlKiBzdHlsZSwgV2ViQ29yZTo6RWxlbWVudCogZSkgY29uc3QKIHsKICAgICBhZGRJ
bnRyaW5zaWNNYXJnaW5zKHN0eWxlKTsKKyAgICBzdHlsZS0+c2V0UGFkZGluZ1RvcChMZW5ndGgo
NCwgRml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKDQsIEZpeGVkKSk7
CisgICAgc3R5bGUtPnNldFBhZGRpbmdSaWdodChMZW5ndGgoMTgsIEZpeGVkKSk7CisgICAgc3R5
bGUtPnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKDQsIEZpeGVkKSk7CiB9CiAKIGJvb2wgUmVuZGVy
VGhlbWVHdGs6OnBhaW50TWVudUxpc3QoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmpl
Y3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICAvLyBUT0RPOiBS
ZW5kZXIgYSByZWFsIG1lbnUgbGlzdCBidXR0b24sIG5vdCBqdXN0IGEgYm94Ci0gICAgR3RrV2lk
Z2V0KiBidXR0b24gPSBndGtCdXR0b24oKTsKKyAgICAvLyBXZSBkb24ndCB1c2UgYW4gYWN0dWFs
IENvbWJvQm94IGJ1dCBhIEJ1dHRvbgorICAgIC8vIEFuIGFjdHVhbCBDb21ib0JveCB3b3VsZCBu
b3QgbG9vayBsaWtlIGludGVuZGVkCisgICAgR3RrV2lkZ2V0KiBjb21ib2JveCA9IGd0a0J1dHRv
bigpOworICAgIEd0a1dpZGdldCogYXJyb3cgPSBndGtDb21ib0JveEFycm93KCk7CiAgICAgSW50
UG9pbnQgcG9zID0gaS5jb250ZXh0LT50cmFuc2xhdGVQb2ludChyZWN0LmxvY2F0aW9uKCkpOwot
ICAgIGd0a19wYWludF9ib3goYnV0dG9uLT5zdHlsZSwgaS5jb250ZXh0LT5nZGtEcmF3YWJsZSgp
LAorICAgIGd0a19wYWludF9ib3goY29tYm9ib3gtPnN0eWxlLCBpLmNvbnRleHQtPmdka0RyYXdh
YmxlKCksCiAgICAgICAgICAgICAgICAgICBkZXRlcm1pbmVTdGF0ZShvKSwgZGV0ZXJtaW5lU2hh
ZG93KG8pLAotICAgICAgICAgICAgICAgICAgMCwgYnV0dG9uLCAwLAorICAgICAgICAgICAgICAg
ICAgMCwgY29tYm9ib3gsICJidXR0b24iLAogICAgICAgICAgICAgICAgICAgcG9zLngoKSwgcG9z
LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICBndGtfcGFpbnRfdmxpbmUo
Y29tYm9ib3gtPnN0eWxlLCBpLmNvbnRleHQtPmdka0RyYXdhYmxlKCksCisgICAgICAgICAgICAg
ICAgICBkZXRlcm1pbmVTdGF0ZShvKSwgMCwgY29tYm9ib3gsICJjb21ib2JveCIsCisgICAgICAg
ICAgICAgICAgICBwb3MueSgpICsgNCwgcG9zLnkoKSArIHJlY3QuaGVpZ2h0KCkgLSA0LCBwb3Mu
eCgpICsgcmVjdC53aWR0aCgpIC0gMTYpOworICAgIGd0a19wYWludF9hcnJvdyhhcnJvdy0+c3R5
bGUsIGkuY29udGV4dC0+Z2RrRHJhd2FibGUoKSwKKyAgICAgICAgICAgICAgICAgIGRldGVybWlu
ZVN0YXRlKG8pLCBkZXRlcm1pbmVTaGFkb3cobyksCisgICAgICAgICAgICAgICAgICAwLCBhcnJv
dywgImNvbWJvYm94IiwKKyAgICAgICAgICAgICAgICAgIEdUS19BUlJPV19ET1dOLCBUUlVFLAor
ICAgICAgICAgICAgICAgICAgcG9zLngoKSArIHJlY3Qud2lkdGgoKSAtIDE0LCBwb3MueSgpICsg
MiwgOCwgcmVjdC5oZWlnaHQoKSAtIDIpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtNDQ0
LDYgKzQ1OCwzMyBAQAogICAgIHJldHVybiBtX2d0a0VudHJ5OwogfQogCitHdGtXaWRnZXQqIFJl
bmRlclRoZW1lR3RrOjpndGtDb21ib0JveCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2d0a0NvbWJv
Qm94KSB7CisgICAgICAgIG1fZ3RrQ29tYm9Cb3ggPSBndGtfY29tYm9fYm94X25ld190ZXh0KCk7
CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9ndGtDb21ib0JveCwgInN0eWxlLXNldCIsIEdf
Q0FMTEJBQ0soZ3RrU3R5bGVTZXQpLCB0aGVtZSgpKTsKKyAgICAgICAgZ3RrX2NvbnRhaW5lcl9h
ZGQoR1RLX0NPTlRBSU5FUihndGtXaW5kb3dDb250YWluZXIoKSksIG1fZ3RrQ29tYm9Cb3gpOwor
ICAgICAgICBndGtfd2lkZ2V0X3JlYWxpemUobV9ndGtDb21ib0JveCk7CisgICAgfQorCisgICAg
cmV0dXJuIG1fZ3RrQ29tYm9Cb3g7Cit9CisKK0d0a1dpZGdldCogUmVuZGVyVGhlbWVHdGs6Omd0
a0NvbWJvQm94QXJyb3coKSBjb25zdAoreworICAgIGlmICghbV9ndGtDb21ib0JveEFycm93KSB7
CisgICAgICAgIC8vIFdlIG5lZWQgdG8gYWRkIHRoZSBhcnJvdyB0byBhIGNvbWJvYm94IGJlY2F1
c2Ugc29tZSB0aGVtZXMKKyAgICAgICAgLy8gcmVuZGVyIGl0IGRpZmZlcmVudGx5IGluIHRoYXQg
c3BlY2lhbCBjYXNlLgorICAgICAgICBtX2d0a0NvbWJvQm94QXJyb3cgPSBndGtfYXJyb3dfbmV3
KEdUS19BUlJPV19ET1dOLCBHVEtfU0hBRE9XX09VVCk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5l
Y3QobV9ndGtDb21ib0JveEFycm93LCAic3R5bGUtc2V0IiwgR19DQUxMQkFDSyhndGtTdHlsZVNl
dCksIHRoZW1lKCkpOworICAgICAgICBndGtfd2lkZ2V0X2Rlc3Ryb3koZ3RrX2Jpbl9nZXRfY2hp
bGQoR1RLX0JJTihndGtDb21ib0JveCgpKSkpOworICAgICAgICBndGtfY29udGFpbmVyX2FkZChH
VEtfQ09OVEFJTkVSKGd0a0NvbWJvQm94KCkpLCBtX2d0a0NvbWJvQm94QXJyb3cpOworICAgICAg
ICBndGtfd2lkZ2V0X3JlYWxpemUobV9ndGtDb21ib0JveEFycm93KTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gbV9ndGtDb21ib0JveEFycm93OworfQorCiBHdGtXaWRnZXQqIFJlbmRlclRoZW1lR3Rr
OjpndGtUcmVlVmlldygpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2d0a1RyZWVWaWV3KSB7CkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmgJKFJldmlzaW9uIDI3MTgwKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuaAkoQXJiZWl0c2tvcGllKQpAQCAt
MTE3LDYgKzExNyw4IEBACiAgICAgR3RrV2lkZ2V0KiBndGtSYWRpb0J1dHRvbigpIGNvbnN0Owog
ICAgIEd0a1dpZGdldCogZ3RrRW50cnkoKSBjb25zdDsKICAgICBHdGtXaWRnZXQqIGd0a0VkaXRh
YmxlKCkgY29uc3Q7CisgICAgR3RrV2lkZ2V0KiBndGtDb21ib0JveCgpIGNvbnN0OworICAgIEd0
a1dpZGdldCogZ3RrQ29tYm9Cb3hBcnJvdygpIGNvbnN0OwogICAgIEd0a1dpZGdldCogZ3RrVHJl
ZVZpZXcoKSBjb25zdDsKIAogICAgIC8qCkBAIC0xMzEsNiArMTMzLDggQEAKICAgICBtdXRhYmxl
IEd0a1dpZGdldCogbV9ndGtSYWRpb0J1dHRvbjsKICAgICBtdXRhYmxlIEd0a1dpZGdldCogbV9n
dGtFbnRyeTsKICAgICBtdXRhYmxlIEd0a1dpZGdldCogbV9ndGtFZGl0YWJsZTsKKyAgICBtdXRh
YmxlIEd0a1dpZGdldCogbV9ndGtDb21ib0JveDsKKyAgICBtdXRhYmxlIEd0a1dpZGdldCogbV9n
dGtDb21ib0JveEFycm93OwogICAgIG11dGFibGUgR3RrV2lkZ2V0KiBtX2d0a1RyZWVWaWV3Owog
CiAgICAgbXV0YWJsZSBHdGtXaWRnZXQqIG1fdW5tYXBwZWRXaW5kb3c7Cg==
</data>
<flag name="review"
          id="7174"
          type_id="1"
          status="-"
          setter="alp"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>16970</attachid>
            <date>2007-10-31 16:54:39 -0700</date>
            <delta_ts>2007-10-31 16:59:14 -0700</delta_ts>
            <desc>New RenderThemeGtk implementation (code shared with Mozilla)</desc>
            <filename>RenderThemeGtk.cpp</filename>
            <type>text/plain</type>
            <size>13237</size>
            <attacher name="Alp Toker">alp</attacher>
            
              <data encoding="base64">LyoKICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4KICogQ29weXJpZ2h0IChDKSAyMDA3
IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CiAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCiAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgogKgogKi8KCiNpbmNsdWRlICJjb25maWcuaCIKI2luY2x1ZGUgIk5vdEltcGxlbWVudGVk
LmgiCiNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKI2luY2x1ZGUgIlJlbmRlclRoZW1lR3RrLmgi
CiNpbmNsdWRlICJndGtkcmF3aW5nLmgiCgojaW5jbHVkZSA8Z2RrL2dkay5oPgoKbmFtZXNwYWNl
IFdlYkNvcmUgewoKUmVuZGVyVGhlbWUqIHRoZW1lKCkKewogICAgc3RhdGljIFJlbmRlclRoZW1l
R3RrIGd0a1RoZW1lOwogICAgcmV0dXJuICZndGtUaGVtZTsKfQoKUmVuZGVyVGhlbWVHdGs6OlJl
bmRlclRoZW1lR3RrKCkKICAgIDogbV9ndGtXaW5kb3coMCkKICAgICwgbV9ndGtDb250YWluZXIo
MCkKICAgICwgbV9ndGtFbnRyeSgwKQogICAgLCBtX2d0a1RyZWVWaWV3KDApCnsKfQoKc3RhdGlj
IGJvb2wgc3VwcG9ydHNGb2N1cyhFQXBwZWFyYW5jZSBhcHBlYXJhbmNlKQp7CiAgICBzd2l0Y2gg
KGFwcGVhcmFuY2UpIHsKICAgICAgICBjYXNlIFB1c2hCdXR0b25BcHBlYXJhbmNlOgogICAgICAg
IGNhc2UgQnV0dG9uQXBwZWFyYW5jZToKICAgICAgICBjYXNlIFRleHRGaWVsZEFwcGVhcmFuY2U6
CiAgICAgICAgY2FzZSBUZXh0QXJlYUFwcGVhcmFuY2U6CiAgICAgICAgY2FzZSBTZWFyY2hGaWVs
ZEFwcGVhcmFuY2U6CiAgICAgICAgY2FzZSBNZW51bGlzdEFwcGVhcmFuY2U6CiAgICAgICAgY2Fz
ZSBSYWRpb0FwcGVhcmFuY2U6CiAgICAgICAgY2FzZSBDaGVja2JveEFwcGVhcmFuY2U6CiAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgIH0KfQoKYm9vbCBSZW5kZXJUaGVtZUd0azo6c3VwcG9ydHNGb2N1c1JpbmcoY29u
c3QgUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAp7CiAgICByZXR1cm4gc3VwcG9ydHNGb2N1cyhz
dHlsZS0+YXBwZWFyYW5jZSgpKTsKfQoKYm9vbCBSZW5kZXJUaGVtZUd0azo6Y29udHJvbFN1cHBv
cnRzVGludHMoY29uc3QgUmVuZGVyT2JqZWN0KiBvKSBjb25zdAp7CiAgICByZXR1cm4gaXNFbmFi
bGVkKG8pOwp9CgpzaG9ydCBSZW5kZXJUaGVtZUd0azo6YmFzZWxpbmVQb3NpdGlvbihjb25zdCBS
ZW5kZXJPYmplY3QqIG8pIGNvbnN0CnsKICAgIC8vIFRPRE86IFRoaXMgc3RyYXRlZ3kgaXMgcG9z
c2libHkgaW5jb3JyZWN0IGZvciB0aGUgR1RLKyBwb3J0LgogICAgaWYgKG8tPnN0eWxlKCktPmFw
cGVhcmFuY2UoKSA9PSBDaGVja2JveEFwcGVhcmFuY2UgfHwKICAgICAgICBvLT5zdHlsZSgpLT5h
cHBlYXJhbmNlKCkgPT0gUmFkaW9BcHBlYXJhbmNlKQogICAgICAgIHJldHVybiBvLT5tYXJnaW5U
b3AoKSArIG8tPmhlaWdodCgpIC0gMjsKICAgIHJldHVybiBSZW5kZXJUaGVtZTo6YmFzZWxpbmVQ
b3NpdGlvbihvKTsKfQoKc3RhdGljIHZvaWQgYWRqdXN0TW96U3R5bGUoUmVuZGVyU3R5bGUqIHN0
eWxlLCBHdGtUaGVtZVdpZGdldFR5cGUgdHlwZSkKewogICAgZ2ludCBsZWZ0LCB0b3AsIHJpZ2h0
LCBib3R0b207CiAgICBnYm9vbGVhbiBpbmh0bWwgPSB0cnVlOwoKICAgIGlmIChtb3pfZ3RrX2dl
dF93aWRnZXRfYm9yZGVyKHR5cGUsICZsZWZ0LCAmdG9wLCAmcmlnaHQsICZib3R0b20sIGluaHRt
bCkgIT0gTU9aX0dUS19TVUNDRVNTKQogICAgICAgIHJldHVybjsKCiAgICAvLyBUT0RPOiBUaGlz
IGFwcHJvYWNoIGlzIGxpa2VseSB0byBiZSBpbmNvcnJlY3QuIFNlZSBvdGhlciBwb3J0cyBhbmQg
bGF5b3V0IHRlc3RzIHRvIHNlZSB0aGUgcHJvYmxlbS4KICAgIGNvbnN0IGludCB4cGFkZGluZyA9
IDE7CiAgICBjb25zdCBpbnQgeXBhZGRpbmcgPSAxOwoKICAgIHN0eWxlLT5zZXRQYWRkaW5nTGVm
dChMZW5ndGgoeHBhZGRpbmcgKyBsZWZ0LCBGaXhlZCkpOwogICAgc3R5bGUtPnNldFBhZGRpbmdU
b3AoTGVuZ3RoKHlwYWRkaW5nICsgdG9wLCBGaXhlZCkpOwogICAgc3R5bGUtPnNldFBhZGRpbmdS
aWdodChMZW5ndGgoeHBhZGRpbmcgKyByaWdodCwgRml4ZWQpKTsKICAgIHN0eWxlLT5zZXRQYWRk
aW5nQm90dG9tKExlbmd0aCh5cGFkZGluZyArIGJvdHRvbSwgRml4ZWQpKTsKfQoKc3RhdGljIHZv
aWQgc2V0TW96U3RhdGUoUmVuZGVyVGhlbWUqIHRoZW1lLCBHdGtXaWRnZXRTdGF0ZSogc3RhdGUs
IFJlbmRlck9iamVjdCogbykKewogICAgLy9zdGF0ZS0+YWN0aXZlID0gdGhlbWUtPmlzQ2hlY2tl
ZChvKTsKICAgIHN0YXRlLT5hY3RpdmUgPSB0aGVtZS0+aXNQcmVzc2VkKG8pOwogICAgc3RhdGUt
PmZvY3VzZWQgPSB0aGVtZS0+aXNGb2N1c2VkKG8pOwogICAgc3RhdGUtPmluSG92ZXIgPSB0aGVt
ZS0+aXNIb3ZlcmVkKG8pOwogICAgLy8gVE9ETzogRGlzYWJsZWQgZG9lcyBub3QgYWx3YXlzIGdp
dmUgdGhlIGNvcnJlY3QgYXBwZWFyYW5jZSBmb3IgUmVhZE9ubHkKICAgIHN0YXRlLT5kaXNhYmxl
ZCA9ICF0aGVtZS0+aXNFbmFibGVkKG8pIHx8IHRoZW1lLT5pc1JlYWRPbmx5Q29udHJvbChvKTsK
ICAgIHN0YXRlLT5pc0RlZmF1bHQgPSBmYWxzZTsKICAgIHN0YXRlLT5jYW5EZWZhdWx0ID0gZmFs
c2U7Cn0KCnN0YXRpYyBib29sIHBhaW50TW96V2lkZ2V0KFJlbmRlclRoZW1lKiB0aGVtZSwgR3Rr
VGhlbWVXaWRnZXRUeXBlIHR5cGUsIFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0
OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpCnsKICAgIEd0a1dpZGdldFN0YXRl
IG1velN0YXRlOwogICAgc2V0TW96U3RhdGUodGhlbWUsICZtb3pTdGF0ZSwgbyk7CgogICAgaW50
IGZsYWdzOwoKICAgIC8vIFdlIG1pZ2h0IHdhbnQgdG8gbWFrZSBzZXR0aW5nIGZsYWdzIHRoZSBj
YWxsZXIncyBqb2IgYXQgc29tZSBwb2ludCByYXRoZXIgdGhhbiBkb2luZyBpdCBoZXJlLgogICAg
c3dpdGNoICh0eXBlKSB7CiAgICAgICAgY2FzZSBNT1pfR1RLX0JVVFRPTjoKICAgICAgICAgICAg
ZmxhZ3MgPSBHVEtfUkVMSUVGX05PUk1BTDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2Fz
ZSBNT1pfR1RLX0NIRUNLQlVUVE9OOgogICAgICAgIGNhc2UgTU9aX0dUS19SQURJT0JVVFRPTjoK
ICAgICAgICAgICAgZmxhZ3MgPSB0aGVtZS0+aXNDaGVja2VkKG8pOwogICAgICAgICAgICBicmVh
azsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICBmbGFncyA9IDA7CiAgICAgICAgICAgIGJy
ZWFrOwogICAgfQoKICAgIEludFBvaW50IHBvcyA9IGkuY29udGV4dC0+dHJhbnNsYXRlUG9pbnQo
cmVjdC5sb2NhdGlvbigpKTsKICAgIEdka1JlY3RhbmdsZSBnZGtSZWN0ID0gSW50UmVjdChwb3Mu
eCgpLCBwb3MueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwoKICAgIC8vIFRPRE86
IFBhc3MgdGhlIHJlYWwgY2xpcCByZWdpb24uCiAgICByZXR1cm4gbW96X2d0a193aWRnZXRfcGFp
bnQodHlwZSwgaS5jb250ZXh0LT5nZGtEcmF3YWJsZSgpLCAmZ2RrUmVjdCwgJmdka1JlY3QsICZt
b3pTdGF0ZSwgZmxhZ3MpICE9IE1PWl9HVEtfU1VDQ0VTUzsKfQoKc3RhdGljIHZvaWQgc2V0QnV0
dG9uUGFkZGluZyhSZW5kZXJTdHlsZSogc3R5bGUpCnsKICAgIC8vIFRPRE86IFRoaXMgbG9va3Mg
aW5jb3JyZWN0LgogICAgY29uc3QgaW50IHBhZGRpbmcgPSA4OwogICAgc3R5bGUtPnNldFBhZGRp
bmdMZWZ0KExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOwogICAgc3R5bGUtPnNldFBhZGRpbmdSaWdo
dChMZW5ndGgocGFkZGluZywgRml4ZWQpKTsKICAgIHN0eWxlLT5zZXRQYWRkaW5nVG9wKExlbmd0
aChwYWRkaW5nIC8gMiwgRml4ZWQpKTsKICAgIHN0eWxlLT5zZXRQYWRkaW5nQm90dG9tKExlbmd0
aChwYWRkaW5nIC8gMiwgRml4ZWQpKTsKfQoKc3RhdGljIHZvaWQgc2V0VG9nZ2xlU2l6ZShSZW5k
ZXJTdHlsZSogc3R5bGUsIEVBcHBlYXJhbmNlIGFwcGVhcmFuY2UpCnsKICAgIC8vIFRoZSB3aWR0
aCBhbmQgaGVpZ2h0IGFyZSBib3RoIHNwZWNpZmllZCwgc28gd2Ugc2hvdWxkbid0IGNoYW5nZSB0
aGVtLgogICAgaWYgKCFzdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYmICFzdHls
ZS0+aGVpZ2h0KCkuaXNBdXRvKCkpCiAgICAgICAgcmV0dXJuOwoKICAgIC8vIFRPRE86IFRoaXMg
aXMgcHJvYmFibHkgbm90IGNvcnJlY3QgdXNlIG9mIGluZGljYXRvcl9zaXplIGFuZCBpbmRpY2F0
b3Jfc3BhY2luZy4KICAgIGdpbnQgaW5kaWNhdG9yX3NpemUsIGluZGljYXRvcl9zcGFjaW5nOwoK
ICAgIHN3aXRjaCAoYXBwZWFyYW5jZSkgewogICAgICAgIGNhc2UgQ2hlY2tib3hBcHBlYXJhbmNl
OgogICAgICAgICAgICBpZiAobW96X2d0a19jaGVja2JveF9nZXRfbWV0cmljcygmaW5kaWNhdG9y
X3NpemUsICZpbmRpY2F0b3Jfc3BhY2luZykgIT0gTU9aX0dUS19TVUNDRVNTKQogICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIFJhZGlvQXBwZWFy
YW5jZToKICAgICAgICAgICAgaWYgKG1vel9ndGtfcmFkaW9fZ2V0X21ldHJpY3MoJmluZGljYXRv
cl9zaXplLCAmaW5kaWNhdG9yX3NwYWNpbmcpICE9IE1PWl9HVEtfU1VDQ0VTUykKICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAg
ICAgICAgcmV0dXJuOwogICAgfQoKICAgIC8vIE90aGVyIHBvcnRzIGhhcmQtY29kZSB0aGlzIHRv
IDEzLCBidXQgR1RLKyB1c2VycyB0ZW5kIHRvIGRlbWFuZCB0aGUgbmF0aXZlIGxvb2suCiAgICAv
LyBJdCBjb3VsZCBiZSBtYWRlIGEgY29uZmlndXJhdGlvbiBvcHRpb24gaWYgMTMgYWN0dWFsbHkg
YnJlYWtzIHNpdGUgY29tcGF0aWJpbGl0eS4KICAgIGludCBsZW5ndGggPSBpbmRpY2F0b3Jfc2l6
ZSArIGluZGljYXRvcl9zcGFjaW5nOwogICAgaWYgKHN0eWxlLT53aWR0aCgpLmlzSW50cmluc2lj
T3JBdXRvKCkpCiAgICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChsZW5ndGgsIEZpeGVkKSk7
CgogICAgaWYgKHN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKICAgICAgICBzdHlsZS0+c2V0SGVp
Z2h0KExlbmd0aChsZW5ndGgsIEZpeGVkKSk7Cn0KCnZvaWQgUmVuZGVyVGhlbWVHdGs6OnNldENo
ZWNrYm94U2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CnsKICAgIHNldFRvZ2dsZVNpemUo
c3R5bGUsIFJhZGlvQXBwZWFyYW5jZSk7Cn0KCmJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50Q2hl
Y2tib3goUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwg
Y29uc3QgSW50UmVjdCYgcmVjdCkKewogICAgcmV0dXJuIHBhaW50TW96V2lkZ2V0KHRoaXMsIE1P
Wl9HVEtfQ0hFQ0tCVVRUT04sIG8sIGksIHJlY3QpOwp9Cgp2b2lkIFJlbmRlclRoZW1lR3RrOjpz
ZXRSYWRpb1NpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAp7CiAgICBzZXRUb2dnbGVTaXpl
KHN0eWxlLCBSYWRpb0FwcGVhcmFuY2UpOwp9Cgpib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFJh
ZGlvKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNv
bnN0IEludFJlY3QmIHJlY3QpCnsKICAgIHJldHVybiBwYWludE1veldpZGdldCh0aGlzLCBNT1pf
R1RLX1JBRElPQlVUVE9OLCBvLCBpLCByZWN0KTsKfQoKdm9pZCBSZW5kZXJUaGVtZUd0azo6YWRq
dXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBz
dHlsZSwgV2ViQ29yZTo6RWxlbWVudCogZSkgY29uc3QKewogICAgLy8gVE9ETzogSXMgdGhpcyBj
b25kaXRpb24gbmVjZXNzYXJ5PwogICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gUHVzaEJ1
dHRvbkFwcGVhcmFuY2UpIHsKICAgICAgICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsKICAgICAgICBz
dHlsZS0+c2V0SGVpZ2h0KExlbmd0aChBdXRvKSk7CiAgICAgICAgc3R5bGUtPnNldFdoaXRlU3Bh
Y2UoUFJFKTsKICAgICAgICBzZXRCdXR0b25QYWRkaW5nKHN0eWxlKTsKICAgIH0gZWxzZSB7CiAg
ICAgICAgLy8gVE9ETzogVGhpcyBzaG91bGQgbm90IGJlIGhhcmQtY29kZWQuCiAgICAgICAgc3R5
bGUtPnNldE1pbkhlaWdodChMZW5ndGgoMTQsIEZpeGVkKSk7CiAgICAgICAgc3R5bGUtPnJlc2V0
Qm9yZGVyVG9wKCk7CiAgICAgICAgc3R5bGUtPnJlc2V0Qm9yZGVyQm90dG9tKCk7CiAgICB9Cn0K
CmJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3Qg
UmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpCnsKICAgIHJl
dHVybiBwYWludE1veldpZGdldCh0aGlzLCBNT1pfR1RLX0JVVFRPTiwgbywgaSwgcmVjdCk7Cn0K
CnZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdE1lbnVMaXN0U3R5bGUoQ1NTU3R5bGVTZWxlY3Rv
ciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgV2ViQ29yZTo6RWxlbWVudCogZSkgY29u
c3QKewogICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7CiAgICBzdHlsZS0+cmVzZXRQYWRkaW5nKCk7
CiAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChBdXRvKSk7CiAgICBzdHlsZS0+c2V0V2hpdGVT
cGFjZShQUkUpOwogICAgYWRqdXN0TW96U3R5bGUoc3R5bGUsIE1PWl9HVEtfRFJPUERPV04pOwp9
Cgpib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCogbywgY29u
c3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpCnsKICAg
IHJldHVybiBwYWludE1veldpZGdldCh0aGlzLCBNT1pfR1RLX0RST1BET1dOLCBvLCBpLCByZWN0
KTsKfQoKdm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0VGV4dEZpZWxkU3R5bGUoQ1NTU3R5bGVT
ZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QK
ewogICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7CiAgICBzdHlsZS0+cmVzZXRQYWRkaW5nKCk7CiAg
ICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChBdXRvKSk7CiAgICBzdHlsZS0+c2V0V2hpdGVTcGFj
ZShQUkUpOwogICAgYWRqdXN0TW96U3R5bGUoc3R5bGUsIE1PWl9HVEtfRU5UUlkpOwp9Cgpib29s
IFJlbmRlclRoZW1lR3RrOjpwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJl
bmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQp7CiAgICByZXR1
cm4gcGFpbnRNb3pXaWRnZXQodGhpcywgTU9aX0dUS19FTlRSWSwgbywgaSwgcmVjdCk7Cn0KCnZv
aWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFRleHRBcmVhU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciog
c2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKewogICAgYWRq
dXN0VGV4dEZpZWxkU3R5bGUoc2VsZWN0b3IsIHN0eWxlLCBlKTsKfQoKYm9vbCBSZW5kZXJUaGVt
ZUd0azo6cGFpbnRUZXh0QXJlYShSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6
UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQp7CiAgICByZXR1cm4gcGFpbnRUZXh0Rmll
bGQobywgaSwgcik7Cn0KCnZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNlYXJjaEZpZWxkUmVz
dWx0c0J1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSog
c3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0CnsKICAgIGFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0
dG9uU3R5bGUoc2VsZWN0b3IsIHN0eWxlLCBlKTsKfQoKYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFp
bnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJP
YmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkKewogICAgcmV0dXJuIHBh
aW50TW96V2lkZ2V0KHRoaXMsIE1PWl9HVEtfRFJPUERPV05fQVJST1csIG8sIGksIHJlY3QpOwp9
Cgp2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9u
U3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxl
bWVudCogZSkgY29uc3QKewogICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7CiAgICBzdHlsZS0+cmVz
ZXRQYWRkaW5nKCk7CgogICAgLy8gVE9ETzogVGhpcyBzaG91bGQgbm90IGJlIGhhcmQtY29kZWQu
CiAgICBJbnRTaXplIHNpemUgPSBJbnRTaXplKDE0LCAxNCk7CiAgICBzdHlsZS0+c2V0V2lkdGgo
TGVuZ3RoKHNpemUud2lkdGgoKSwgRml4ZWQpKTsKICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3Ro
KHNpemUuaGVpZ2h0KCksIEZpeGVkKSk7Cn0KCmJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50U2Vh
cmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9i
amVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQp7CiAgICByZXR1cm4gcGFp
bnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihvLCBpLCByZWN0KTsKfQoKdm9pZCBSZW5kZXJUaGVt
ZUd0azo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9y
KiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAp7CiAgICBz
dHlsZS0+cmVzZXRCb3JkZXIoKTsKICAgIHN0eWxlLT5yZXNldFBhZGRpbmcoKTsKCiAgICAvLyBU
T0RPOiBUaGlzIHNob3VsZCBub3QgYmUgaGFyZC1jb2RlZC4KICAgIEludFNpemUgc2l6ZSA9IElu
dFNpemUoMTQsIDE0KTsKICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoc2l6ZS53aWR0aCgpLCBG
aXhlZCkpOwogICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoc2l6ZS5oZWlnaHQoKSwgRml4ZWQp
KTsKfQoKYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihS
ZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJ
bnRSZWN0JiByZWN0KQp7CiAgICByZXR1cm4gcGFpbnRNb3pXaWRnZXQodGhpcywgTU9aX0dUS19D
SEVDS01FTlVJVEVNLCBvLCBpLCByZWN0KTsKfQoKdm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0
U2VhcmNoRmllbGRTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUq
IHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAp7CiAgICBhZGp1c3RUZXh0RmllbGRTdHlsZShzZWxl
Y3Rvciwgc3R5bGUsIGUpOwp9Cgpib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFNlYXJjaEZpZWxk
KFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0
IEludFJlY3QmIHJlY3QpCnsKICAgIHJldHVybiBwYWludFRleHRGaWVsZChvLCBpLCByZWN0KTsK
fQoKQ29sb3IgUmVuZGVyVGhlbWVHdGs6OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3Vu
ZENvbG9yKCkgY29uc3QKewogICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBndGtFbnRyeSgpOwogICAg
cmV0dXJuIHdpZGdldC0+c3R5bGUtPmJhc2VbR1RLX1NUQVRFX1NFTEVDVEVEXTsKfQoKQ29sb3Ig
UmVuZGVyVGhlbWVHdGs6OnBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3Io
KSBjb25zdAp7CiAgICBHdGtXaWRnZXQqIHdpZGdldCA9IGd0a0VudHJ5KCk7CiAgICByZXR1cm4g
d2lkZ2V0LT5zdHlsZS0+YmFzZVtHVEtfU1RBVEVfQUNUSVZFXTsKfQoKQ29sb3IgUmVuZGVyVGhl
bWVHdGs6OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKewog
ICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBndGtFbnRyeSgpOwogICAgcmV0dXJuIHdpZGdldC0+c3R5
bGUtPnRleHRbR1RLX1NUQVRFX1NFTEVDVEVEXTsKfQoKQ29sb3IgUmVuZGVyVGhlbWVHdGs6OnBs
YXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAp7CiAgICBHdGtX
aWRnZXQqIHdpZGdldCA9IGd0a0VudHJ5KCk7CiAgICByZXR1cm4gd2lkZ2V0LT5zdHlsZS0+dGV4
dFtHVEtfU1RBVEVfQUNUSVZFXTsKfQoKQ29sb3IgUmVuZGVyVGhlbWVHdGs6OmFjdGl2ZUxpc3RC
b3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAp7CiAgICBHdGtXaWRnZXQqIHdpZGdl
dCA9IGd0a1RyZWVWaWV3KCk7CiAgICByZXR1cm4gd2lkZ2V0LT5zdHlsZS0+YmFzZVtHVEtfU1RB
VEVfU0VMRUNURURdOwp9CgpDb2xvciBSZW5kZXJUaGVtZUd0azo6aW5hY3RpdmVMaXN0Qm94U2Vs
ZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKewogICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBn
dGtUcmVlVmlldygpOwogICAgcmV0dXJuIHdpZGdldC0+c3R5bGUtPmJhc2VbR1RLX1NUQVRFX0FD
VElWRV07Cn0KCkNvbG9yIFJlbmRlclRoZW1lR3RrOjphY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9y
ZWdyb3VuZENvbG9yKCkgY29uc3QKewogICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBndGtUcmVlVmll
dygpOwogICAgcmV0dXJuIHdpZGdldC0+c3R5bGUtPnRleHRbR1RLX1NUQVRFX1NFTEVDVEVEXTsK
fQoKQ29sb3IgUmVuZGVyVGhlbWVHdGs6OmluYWN0aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVncm91
bmRDb2xvcigpIGNvbnN0CnsKICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gZ3RrVHJlZVZpZXcoKTsK
ICAgIHJldHVybiB3aWRnZXQtPnN0eWxlLT50ZXh0W0dUS19TVEFURV9BQ1RJVkVdOwp9Cgpkb3Vi
bGUgUmVuZGVyVGhlbWVHdGs6OmNhcmV0QmxpbmtGcmVxdWVuY3koKSBjb25zdAp7CiAgICBHdGtT
ZXR0aW5ncyogc2V0dGluZ3MgPSBndGtfc2V0dGluZ3NfZ2V0X2RlZmF1bHQoKTsKCiAgICBnYm9v
bGVhbiBzaG91bGRCbGluazsKICAgIGdpbnQgdGltZTsKCiAgICBnX29iamVjdF9nZXQoc2V0dGlu
Z3MsICJndGstY3Vyc29yLWJsaW5rIiwgJnNob3VsZEJsaW5rLCAiZ3RrLWN1cnNvci1ibGluay10
aW1lIiwgJnRpbWUsIDApOwoKICAgIGlmICghc2hvdWxkQmxpbmspCiAgICAgICAgcmV0dXJuIDA7
CgogICAgcmV0dXJuIHRpbWUgLyAyMDAwLjsKfQoKdm9pZCBSZW5kZXJUaGVtZUd0azo6c3lzdGVt
Rm9udChpbnQsIEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0CnsKICAgIC8vIElmIHlvdSByZW1vdmUg
dGhpcyBub3RJbXBsZW1lbnRlZCgpLCByZXBsYWNlIGl0IHdpdGggYW4gY29tbWVudCB0aGF0IGV4
cGxhaW5zIHdoeS4KICAgIG5vdEltcGxlbWVudGVkKCk7Cn0KCnN0YXRpYyB2b2lkIGd0a1N0eWxl
U2V0Q2IoR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a1N0eWxlKiBwcmV2aW91cywgUmVuZGVyVGhlbWUq
IHJlbmRlclRoZW1lKQp7CiAgICAvLyBUT0RPOiBNYWtlIHN1cmUgdGhpcyBmdW5jdGlvbiBkb2Vz
bid0IGdldCBjYWxsZWQgbWFueSB0aW1lcyBmb3IgYSBzaW5nbGUgR1RLKyBzdHlsZSBjaGFuZ2Ug
c2lnbmFsLgogICAgcmVuZGVyVGhlbWUtPnBsYXRmb3JtQ29sb3JzRGlkQ2hhbmdlKCk7Cn0KCkd0
a0NvbnRhaW5lciogUmVuZGVyVGhlbWVHdGs6Omd0a0NvbnRhaW5lcigpIGNvbnN0CnsKICAgIGlm
IChtX2d0a0NvbnRhaW5lcikKICAgICAgICByZXR1cm4gbV9ndGtDb250YWluZXI7CgogICAgbV9n
dGtXaW5kb3cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1BPUFVQKTsKICAgIG1fZ3RrQ29u
dGFpbmVyID0gR1RLX0NPTlRBSU5FUihndGtfZml4ZWRfbmV3KCkpOwogICAgZ3RrX2NvbnRhaW5l
cl9hZGQoR1RLX0NPTlRBSU5FUihtX2d0a1dpbmRvdyksIEdUS19XSURHRVQobV9ndGtDb250YWlu
ZXIpKTsKICAgIGd0a193aWRnZXRfcmVhbGl6ZShtX2d0a1dpbmRvdyk7CgogICAgcmV0dXJuIG1f
Z3RrQ29udGFpbmVyOwp9CgpHdGtXaWRnZXQqIFJlbmRlclRoZW1lR3RrOjpndGtFbnRyeSgpIGNv
bnN0CnsKICAgIGlmIChtX2d0a0VudHJ5KQogICAgICAgIHJldHVybiBtX2d0a0VudHJ5OwoKICAg
IG1fZ3RrRW50cnkgPSBndGtfZW50cnlfbmV3KCk7CiAgICBnX3NpZ25hbF9jb25uZWN0KG1fZ3Rr
RW50cnksICJzdHlsZS1zZXQiLCBHX0NBTExCQUNLKGd0a1N0eWxlU2V0Q2IpLCB0aGVtZSgpKTsK
ICAgIGd0a19jb250YWluZXJfYWRkKGd0a0NvbnRhaW5lcigpLCBtX2d0a0VudHJ5KTsKICAgIGd0
a193aWRnZXRfcmVhbGl6ZShtX2d0a0VudHJ5KTsKCiAgICByZXR1cm4gbV9ndGtFbnRyeTsKfQoK
R3RrV2lkZ2V0KiBSZW5kZXJUaGVtZUd0azo6Z3RrVHJlZVZpZXcoKSBjb25zdAp7CiAgICBpZiAo
bV9ndGtUcmVlVmlldykKICAgICAgICByZXR1cm4gbV9ndGtUcmVlVmlldzsKCiAgICBtX2d0a1Ry
ZWVWaWV3ID0gZ3RrX3RyZWVfdmlld19uZXcoKTsKICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9ndGtU
cmVlVmlldywgInN0eWxlLXNldCIsIEdfQ0FMTEJBQ0soZ3RrU3R5bGVTZXRDYiksIHRoZW1lKCkp
OwogICAgZ3RrX2NvbnRhaW5lcl9hZGQoZ3RrQ29udGFpbmVyKCksIG1fZ3RrVHJlZVZpZXcpOwog
ICAgZ3RrX3dpZGdldF9yZWFsaXplKG1fZ3RrVHJlZVZpZXcpOwoKICAgIHJldHVybiBtX2d0a1Ry
ZWVWaWV3Owp9Cgp9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>16971</attachid>
            <date>2007-10-31 16:59:14 -0700</date>
            <delta_ts>2007-11-02 21:46:53 -0700</delta_ts>
            <desc>New RenderThemeGtk implementation (code shared with Mozilla)</desc>
            <filename>moz-theming.patch</filename>
            <type>text/plain</type>
            <size>107028</size>
            <attacher name="Alp Toker">alp</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3Jl
LnBybwkocmV2aXNpb24gMjczMzMpCisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNv
cHkpCkBAIC05NDksNiArOTQ5LDcgQEAgZ3RrLXBvcnQgewogICAgICAgICBwbGF0Zm9ybS9ndGsv
VGhyZWFkaW5nR3RrLmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2d0ay9XaGVlbEV2ZW50R3RrLmNw
cCBcCiAgICAgICAgIHBsYXRmb3JtL2d0ay9XaWRnZXRHdGsuY3BwIFwKKyAgICAgICAgcGxhdGZv
cm0vZ3RrL2d0azJkcmF3aW5nLmMgXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvQ29s
b3JHdGsuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ljb25HdGsuY3BwIFwK
ICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ltYWdlR3RrLmNwcCBcCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuY3BwCShyZXZpc2lvbiAyNzMzMykKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSwxMSArMSw2IEBACiAvKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9q
ZWN0LgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgotICog
Q29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20gCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKLSAqIENvcHly
aWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscC50b2tlckBjb2xsYWJvcmEuY28udWs+Ci0gKiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4KKyAq
IENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgogICoKICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCkBAIC0yNSwxMDAgKzIwLDM3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIlJlbmRlclRoZW1lR3RrLmgiCi0KICNpbmNsdWRlICJOb3RJbXBsZW1lbnRl
ZC5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgorI2luY2x1ZGUgIlJlbmRlclRoZW1lR3Rr
LmgiCisjaW5jbHVkZSAiZ3RrZHJhd2luZy5oIgogCiAjaW5jbHVkZSA8Z2RrL2dkay5oPgogCi0j
ZGVmaW5lIFRIRU1FX0NPTE9SIDIwNAotI2RlZmluZSBUSEVNRV9GT05UICAyMTAKLQotLy8gQnV0
dG9uIGNvbnN0YW50cwotI2RlZmluZSBCUF9CVVRUT04gICAgMQotI2RlZmluZSBCUF9SQURJTyAg
ICAgMgotI2RlZmluZSBCUF9DSEVDS0JPWCAgMwotCi0vLyBUZXh0ZmllbGQgY29uc3RhbnRzCi0j
ZGVmaW5lIFRGUF9URVhURklFTEQgMQotI2RlZmluZSBURlNfUkVBRE9OTFkgIDYKLQotLyoKLSAq
IEFwcHJvYWNoIHRvIHRoZW1pbmc6Ci0gKiAgYSkga2VlcCBvbmUgY29weSBvZiBlYWNoIHRvIGJl
IGRyYXduIHdpZGdldCwgR3RrRW50cnksIEd0a0J1dHRvbiwgR3RrLi4uCi0gKiAgICAgKyB0aGUg
YnV0dG9uIHdpbGwgbG9vayBsaWtlIHRoZSBuYXRpdmUgY29udHJvbAotICogICAgICsgd2UgZG9u
J3QgbmVlZCB0byB3b3JyeSBhYm91dCBzdHlsZSB1cGRhdGVzIGFuZCBsb2FkaW5nIHRoZSByaWdo
dCBHdGtTdHlsZQotICogICAgIC0gcmVzb3VyY2VzIGFyZSB3YXN0ZWQuIFRoZSBuYXRpdmUgd2lu
ZG93cyB3aWxsIG5vdCBiZSB1c2VkLCB3ZSBtaWdodCBoYXZlIGlzc3VlcwotICogICAgICAgd2l0
aAotICoKLSAqICBiKSBVc2UgR3RrU3R5bGUgZGlyZWN0bHkgYW5kIGNvcHkgYW5kIHBhc3RlIEd0
aysgY29kZQotICoKLSAqCi0gKiBXZSB3aWxsIG1peCBhIGFuZCBiCi0gKgotICogLSBDcmVhdGUg
R3RrV2lkZ2V0cyB0byBob2xkIHRoZSBzdGF0ZSAoZGlzYWJsZWQvZW5hYmxlZCksIHNlbGVjdGVk
LCBub3Qgc2VsZWN0ZWQuCi0gKiAtIFVzZSBhIEdka1BpeG1hcCB0byBtYWtlIHRoZSBHdGtTdHls
ZSBkcmF3IHRvIGFuZCB0aGVuIHRyeSB0byBjb252ZXJ0IHNldCBpdCB0aGUKLSAqICAgc291cmNl
IG9mIHRoZSBjdXJyZW50IG9wZXJhdGlvbi4KLSAqCi0gKi8KLQogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBSZW5kZXJUaGVtZSogdGhlbWUoKQogewotICAgIHN0YXRpYyBSZW5kZXJUaGVtZUd0ayBn
ZGtUaGVtZTsKLSAgICByZXR1cm4gJmdka1RoZW1lOworICAgIHN0YXRpYyBSZW5kZXJUaGVtZUd0
ayBndGtUaGVtZTsKKyAgICByZXR1cm4gJmd0a1RoZW1lOwogfQogCiBSZW5kZXJUaGVtZUd0azo6
UmVuZGVyVGhlbWVHdGsoKQotICAgIDogbV9ndGtCdXR0b24oMCkKLSAgICAsIG1fZ3RrQ2hlY2ti
b3goMCkKLSAgICAsIG1fZ3RrUmFkaW9CdXR0b24oMCkKKyAgICA6IG1fZ3RrV2luZG93KDApCisg
ICAgLCBtX2d0a0NvbnRhaW5lcigwKQogICAgICwgbV9ndGtFbnRyeSgwKQotICAgICwgbV9ndGtF
ZGl0YWJsZSgwKQogICAgICwgbV9ndGtUcmVlVmlldygwKQotICAgICwgbV91bm1hcHBlZFdpbmRv
dygwKQotICAgICwgbV9jb250YWluZXIoMCkKLXsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZUd0azo6
Y2xvc2UoKQogewogfQogCi12b2lkIFJlbmRlclRoZW1lR3RrOjphZGRJbnRyaW5zaWNNYXJnaW5z
KFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKLXsKLSAgICAvLyBDdXQgb3V0IHRoZSBpbnRyaW5z
aWMgbWFyZ2lucyBjb21wbGV0ZWx5IGlmIHdlIGVuZCB1cCB1c2luZyBhIHNtYWxsIGZvbnQgc2l6
ZQotICAgIGlmIChzdHlsZS0+Zm9udFNpemUoKSA8IDExKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICAvLyBJbnRyaW5zaWMgbWFyZ2luIHZhbHVlLgotICAgIGNvbnN0IGludCBtID0gMjsKLQotICAg
IC8vIEZJWE1FOiBVc2luZyB3aWR0aC9oZWlnaHQgYWxvbmUgYW5kIG5vdCBhbHNvIGRlYWxpbmcg
d2l0aCBtaW4td2lkdGgvbWF4LXdpZHRoIGlzIGZsYXdlZC4KLSAgICBpZiAoc3R5bGUtPndpZHRo
KCkuaXNJbnRyaW5zaWNPckF1dG8oKSkgewotICAgICAgICBpZiAoc3R5bGUtPm1hcmdpbkxlZnQo
KS5xdWlyaygpKQotICAgICAgICAgICAgc3R5bGUtPnNldE1hcmdpbkxlZnQoTGVuZ3RoKG0sIEZp
eGVkKSk7Ci0gICAgICAgIGlmIChzdHlsZS0+bWFyZ2luUmlnaHQoKS5xdWlyaygpKQotICAgICAg
ICAgICAgc3R5bGUtPnNldE1hcmdpblJpZ2h0KExlbmd0aChtLCBGaXhlZCkpOwotICAgIH0KLQot
ICAgIGlmIChzdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpIHsKLSAgICAgICAgaWYgKHN0eWxlLT5t
YXJnaW5Ub3AoKS5xdWlyaygpKQotICAgICAgICAgICAgc3R5bGUtPnNldE1hcmdpblRvcChMZW5n
dGgobSwgRml4ZWQpKTsKLSAgICAgICAgaWYgKHN0eWxlLT5tYXJnaW5Cb3R0b20oKS5xdWlyaygp
KQotICAgICAgICAgICAgc3R5bGUtPnNldE1hcmdpbkJvdHRvbShMZW5ndGgobSwgRml4ZWQpKTsK
LSAgICB9Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnN1cHBvcnRzRm9jdXMoRUFwcGVhcmFu
Y2UgYXBwZWFyYW5jZSkgY29uc3QKK3N0YXRpYyBib29sIHN1cHBvcnRzRm9jdXMoRUFwcGVhcmFu
Y2UgYXBwZWFyYW5jZSkKIHsKICAgICBzd2l0Y2ggKGFwcGVhcmFuY2UpIHsKICAgICAgICAgY2Fz
ZSBQdXNoQnV0dG9uQXBwZWFyYW5jZToKICAgICAgICAgY2FzZSBCdXR0b25BcHBlYXJhbmNlOgog
ICAgICAgICBjYXNlIFRleHRGaWVsZEFwcGVhcmFuY2U6CiAgICAgICAgIGNhc2UgVGV4dEFyZWFB
cHBlYXJhbmNlOgorICAgICAgICBjYXNlIFNlYXJjaEZpZWxkQXBwZWFyYW5jZToKICAgICAgICAg
Y2FzZSBNZW51bGlzdEFwcGVhcmFuY2U6CiAgICAgICAgIGNhc2UgUmFkaW9BcHBlYXJhbmNlOgog
ICAgICAgICBjYXNlIENoZWNrYm94QXBwZWFyYW5jZToKQEAgLTEyOCwxNzcgKzYwLDE5NyBAQCBi
b29sIFJlbmRlclRoZW1lR3RrOjpzdXBwb3J0c0ZvY3VzKEVBcHBlCiAgICAgfQogfQogCi1ib29s
IFJlbmRlclRoZW1lR3RrOjpzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSogc3R5
bGUpIGNvbnN0IAorYm9vbCBSZW5kZXJUaGVtZUd0azo6c3VwcG9ydHNGb2N1c1JpbmcoY29uc3Qg
UmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAogewogICAgIHJldHVybiBzdXBwb3J0c0ZvY3VzKHN0
eWxlLT5hcHBlYXJhbmNlKCkpOwogfQogCiBib29sIFJlbmRlclRoZW1lR3RrOjpjb250cm9sU3Vw
cG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0CiB7Ci0gICAgaWYgKCFpc0Vu
YWJsZWQobykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIENoZWNrYm94ZXMgaGF2
ZSB0aW50cyB3aGVuIGVuYWJsZWQuCi0gICAgaWYgKG8tPnN0eWxlKCktPmFwcGVhcmFuY2UoKSA9
PSBDaGVja2JveEFwcGVhcmFuY2UpCi0gICAgICAgIHJldHVybiBpc0NoZWNrZWQobyk7Ci0KLSAg
ICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gaXNFbmFibGVkKG8pOwogfQogCi1zaG9ydCBSZW5k
ZXJUaGVtZUd0azo6YmFzZWxpbmVQb3NpdGlvbihjb25zdCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0
IAorc2hvcnQgUmVuZGVyVGhlbWVHdGs6OmJhc2VsaW5lUG9zaXRpb24oY29uc3QgUmVuZGVyT2Jq
ZWN0KiBvKSBjb25zdAogeworICAgIC8vIFRPRE86IFRoaXMgc3RyYXRlZ3kgaXMgcG9zc2libHkg
aW5jb3JyZWN0IGZvciB0aGUgR1RLKyBwb3J0LgogICAgIGlmIChvLT5zdHlsZSgpLT5hcHBlYXJh
bmNlKCkgPT0gQ2hlY2tib3hBcHBlYXJhbmNlIHx8CiAgICAgICAgIG8tPnN0eWxlKCktPmFwcGVh
cmFuY2UoKSA9PSBSYWRpb0FwcGVhcmFuY2UpCi0gICAgICAgIHJldHVybiBvLT5tYXJnaW5Ub3Ao
KSArIG8tPmhlaWdodCgpIC0gMjsgLy8gU2FtZSBhcyBpbiBvbGQga2h0bWwKKyAgICAgICAgcmV0
dXJuIG8tPm1hcmdpblRvcCgpICsgby0+aGVpZ2h0KCkgLSAyOwogICAgIHJldHVybiBSZW5kZXJU
aGVtZTo6YmFzZWxpbmVQb3NpdGlvbihvKTsKIH0KLSAgICAKLUd0a1N0YXRlVHlwZSBSZW5kZXJU
aGVtZUd0azo6ZGV0ZXJtaW5lU3RhdGUoUmVuZGVyT2JqZWN0KiBvKQorCitzdGF0aWMgdm9pZCBh
ZGp1c3RNb3pTdHlsZShSZW5kZXJTdHlsZSogc3R5bGUsIEd0a1RoZW1lV2lkZ2V0VHlwZSB0eXBl
KQogewotICAgIGlmICghaXNFbmFibGVkKG8pIHx8IGlzUmVhZE9ubHlDb250cm9sKG8pKQotICAg
ICAgICByZXR1cm4gR1RLX1NUQVRFX0lOU0VOU0lUSVZFOwotICAgIGlmIChpc1ByZXNzZWQobykg
fHwgaXNGb2N1c2VkKG8pKQotICAgICAgICByZXR1cm4gR1RLX1NUQVRFX0FDVElWRTsKLSAgICBp
ZiAoaXNIb3ZlcmVkKG8pKQotICAgICAgICByZXR1cm4gR1RLX1NUQVRFX1BSRUxJR0hUOwotICAg
IGlmIChpc0NoZWNrZWQobykpCi0gICAgICAgIHJldHVybiBHVEtfU1RBVEVfU0VMRUNURUQ7Cisg
ICAgZ2ludCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b207CisgICAgZ2Jvb2xlYW4gaW5odG1sID0g
dHJ1ZTsKIAotICAgIHJldHVybiBHVEtfU1RBVEVfTk9STUFMOworICAgIGlmIChtb3pfZ3RrX2dl
dF93aWRnZXRfYm9yZGVyKHR5cGUsICZsZWZ0LCAmdG9wLCAmcmlnaHQsICZib3R0b20sIGluaHRt
bCkgIT0gTU9aX0dUS19TVUNDRVNTKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBUT0RPOiBU
aGlzIGFwcHJvYWNoIGlzIGxpa2VseSB0byBiZSBpbmNvcnJlY3QuIFNlZSBvdGhlciBwb3J0cyBh
bmQgbGF5b3V0IHRlc3RzIHRvIHNlZSB0aGUgcHJvYmxlbS4KKyAgICBjb25zdCBpbnQgeHBhZGRp
bmcgPSAxOworICAgIGNvbnN0IGludCB5cGFkZGluZyA9IDE7CisKKyAgICBzdHlsZS0+c2V0UGFk
ZGluZ0xlZnQoTGVuZ3RoKHhwYWRkaW5nICsgbGVmdCwgRml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0
UGFkZGluZ1RvcChMZW5ndGgoeXBhZGRpbmcgKyB0b3AsIEZpeGVkKSk7CisgICAgc3R5bGUtPnNl
dFBhZGRpbmdSaWdodChMZW5ndGgoeHBhZGRpbmcgKyByaWdodCwgRml4ZWQpKTsKKyAgICBzdHls
ZS0+c2V0UGFkZGluZ0JvdHRvbShMZW5ndGgoeXBhZGRpbmcgKyBib3R0b20sIEZpeGVkKSk7CiB9
CiAKLUd0a1NoYWRvd1R5cGUgUmVuZGVyVGhlbWVHdGs6OmRldGVybWluZVNoYWRvdyhSZW5kZXJP
YmplY3QqIG8pCitzdGF0aWMgdm9pZCBzZXRNb3pTdGF0ZShSZW5kZXJUaGVtZSogdGhlbWUsIEd0
a1dpZGdldFN0YXRlKiBzdGF0ZSwgUmVuZGVyT2JqZWN0KiBvKQogewotICAgIHJldHVybiBpc0No
ZWNrZWQobykgPyBHVEtfU0hBRE9XX0lOIDogR1RLX1NIQURPV19PVVQ7CisgICAgLy9zdGF0ZS0+
YWN0aXZlID0gdGhlbWUtPmlzQ2hlY2tlZChvKTsKKyAgICBzdGF0ZS0+YWN0aXZlID0gdGhlbWUt
PmlzUHJlc3NlZChvKTsKKyAgICBzdGF0ZS0+Zm9jdXNlZCA9IHRoZW1lLT5pc0ZvY3VzZWQobyk7
CisgICAgc3RhdGUtPmluSG92ZXIgPSB0aGVtZS0+aXNIb3ZlcmVkKG8pOworICAgIC8vIFRPRE86
IERpc2FibGVkIGRvZXMgbm90IGFsd2F5cyBnaXZlIHRoZSBjb3JyZWN0IGFwcGVhcmFuY2UgZm9y
IFJlYWRPbmx5CisgICAgc3RhdGUtPmRpc2FibGVkID0gIXRoZW1lLT5pc0VuYWJsZWQobykgfHwg
dGhlbWUtPmlzUmVhZE9ubHlDb250cm9sKG8pOworICAgIHN0YXRlLT5pc0RlZmF1bHQgPSBmYWxz
ZTsKKyAgICBzdGF0ZS0+Y2FuRGVmYXVsdCA9IGZhbHNlOwogfQogCi1UaGVtZURhdGEgUmVuZGVy
VGhlbWVHdGs6OmdldFRoZW1lRGF0YShSZW5kZXJPYmplY3QqIG8pCitzdGF0aWMgYm9vbCBwYWlu
dE1veldpZGdldChSZW5kZXJUaGVtZSogdGhlbWUsIEd0a1RoZW1lV2lkZ2V0VHlwZSB0eXBlLCBS
ZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJ
bnRSZWN0JiByZWN0KQogewotICAgIFRoZW1lRGF0YSByZXN1bHQ7Ci0gICAgc3dpdGNoIChvLT5z
dHlsZSgpLT5hcHBlYXJhbmNlKCkpIHsKLSAgICAgICAgY2FzZSBQdXNoQnV0dG9uQXBwZWFyYW5j
ZToKLSAgICAgICAgY2FzZSBCdXR0b25BcHBlYXJhbmNlOgotICAgICAgICAgICAgcmVzdWx0Lm1f
cGFydCA9IEJQX0JVVFRPTjsKKyAgICBHdGtXaWRnZXRTdGF0ZSBtb3pTdGF0ZTsKKyAgICBzZXRN
b3pTdGF0ZSh0aGVtZSwgJm1velN0YXRlLCBvKTsKKworICAgIGludCBmbGFnczsKKworICAgIC8v
IFdlIG1pZ2h0IHdhbnQgdG8gbWFrZSBzZXR0aW5nIGZsYWdzIHRoZSBjYWxsZXIncyBqb2IgYXQg
c29tZSBwb2ludCByYXRoZXIgdGhhbiBkb2luZyBpdCBoZXJlLgorICAgIHN3aXRjaCAodHlwZSkg
eworICAgICAgICBjYXNlIE1PWl9HVEtfQlVUVE9OOgorICAgICAgICAgICAgZmxhZ3MgPSBHVEtf
UkVMSUVGX05PUk1BTDsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENoZWNrYm94
QXBwZWFyYW5jZToKLSAgICAgICAgICAgIHJlc3VsdC5tX3BhcnQgPSBCUF9DSEVDS0JPWDsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFJhZGlvQXBwZWFyYW5jZToKLSAgICAgICAg
ICAgIHJlc3VsdC5tX3BhcnQgPSBCUF9SQURJTzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIFRleHRGaWVsZEFwcGVhcmFuY2U6Ci0gICAgICAgIGNhc2UgTGlzdGJveEFwcGVhcmFu
Y2U6Ci0gICAgICAgIGNhc2UgTWVudWxpc3RBcHBlYXJhbmNlOgotICAgICAgICBjYXNlIFRleHRB
cmVhQXBwZWFyYW5jZToKLSAgICAgICAgICAgIHJlc3VsdC5tX3BhcnQgPSBURlBfVEVYVEZJRUxE
OworICAgICAgICBjYXNlIE1PWl9HVEtfQ0hFQ0tCVVRUT046CisgICAgICAgIGNhc2UgTU9aX0dU
S19SQURJT0JVVFRPTjoKKyAgICAgICAgICAgIGZsYWdzID0gdGhlbWUtPmlzQ2hlY2tlZChvKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7
IC8vIEZJWE1FOiBtdWNoIG1vcmU/CisgICAgICAgICAgICBmbGFncyA9IDA7CisgICAgICAgICAg
ICBicmVhazsKICAgICB9CiAKLSAgICByZXN1bHQubV9zdGF0ZSA9IGRldGVybWluZVN0YXRlKG8p
OwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KKyAgICBJbnRQb2ludCBwb3MgPSBpLmNvbnRleHQt
PnRyYW5zbGF0ZVBvaW50KHJlY3QubG9jYXRpb24oKSk7CisgICAgR2RrUmVjdGFuZ2xlIGdka1Jl
Y3QgPSBJbnRSZWN0KHBvcy54KCksIHBvcy55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQo
KSk7CiAKLXZvaWQgUmVuZGVyVGhlbWVHdGs6OnNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSog
c3R5bGUpIGNvbnN0IAoteyAKLSAgICBzZXRSYWRpb1NpemUoc3R5bGUpOworICAgIC8vIFRPRE86
IFBhc3MgdGhlIHJlYWwgY2xpcCByZWdpb24uCisgICAgcmV0dXJuIG1vel9ndGtfd2lkZ2V0X3Bh
aW50KHR5cGUsIGkuY29udGV4dC0+Z2RrRHJhd2FibGUoKSwgJmdka1JlY3QsICZnZGtSZWN0LCAm
bW96U3RhdGUsIGZsYWdzKSAhPSBNT1pfR1RLX1NVQ0NFU1M7CiB9CiAKLWJvb2wgUmVuZGVyVGhl
bWVHdGs6OnBhaW50Q2hlY2tib3goUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6
OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3N0YXRpYyB2b2lkIHNldEJ1dHRv
blBhZGRpbmcoUmVuZGVyU3R5bGUqIHN0eWxlKQogewotICAgIHBhaW50QnV0dG9uKG8sIGksIHJl
Y3QpOyAgICAKLSAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gVE9ETzogVGhpcyBsb29rcyBpbmNv
cnJlY3QuCisgICAgY29uc3QgaW50IHBhZGRpbmcgPSA4OworICAgIHN0eWxlLT5zZXRQYWRkaW5n
TGVmdChMZW5ndGgocGFkZGluZywgRml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0UGFkZGluZ1JpZ2h0
KExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOworICAgIHN0eWxlLT5zZXRQYWRkaW5nVG9wKExlbmd0
aChwYWRkaW5nIC8gMiwgRml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0UGFkZGluZ0JvdHRvbShMZW5n
dGgocGFkZGluZyAvIDIsIEZpeGVkKSk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50
UmFkaW8oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwg
Y29uc3QgSW50UmVjdCYgcmVjdCkKK3N0YXRpYyB2b2lkIHNldFRvZ2dsZVNpemUoUmVuZGVyU3R5
bGUqIHN0eWxlLCBFQXBwZWFyYW5jZSBhcHBlYXJhbmNlKQogewotICAgIHBhaW50QnV0dG9uKG8s
IGksIHJlY3QpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZUd0azo6
c2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QgCi17IAotICAgIC8vIElmIHRo
ZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBib3RoIHNwZWNpZmllZCwgdGhlbiB3ZSBoYXZlIG5vdGhp
bmcgdG8gZG8uCisgICAgLy8gVGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGJvdGggc3BlY2lmaWVk
LCBzbyB3ZSBzaG91bGRuJ3QgY2hhbmdlIHRoZW0uCiAgICAgaWYgKCFzdHlsZS0+d2lkdGgoKS5p
c0ludHJpbnNpY09yQXV0bygpICYmICFzdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpCiAgICAgICAg
IHJldHVybjsKIAorICAgIC8vIFRPRE86IFRoaXMgaXMgcHJvYmFibHkgbm90IGNvcnJlY3QgdXNl
IG9mIGluZGljYXRvcl9zaXplIGFuZCBpbmRpY2F0b3Jfc3BhY2luZy4KKyAgICBnaW50IGluZGlj
YXRvcl9zaXplLCBpbmRpY2F0b3Jfc3BhY2luZzsKKworICAgIHN3aXRjaCAoYXBwZWFyYW5jZSkg
eworICAgICAgICBjYXNlIENoZWNrYm94QXBwZWFyYW5jZToKKyAgICAgICAgICAgIGlmIChtb3pf
Z3RrX2NoZWNrYm94X2dldF9tZXRyaWNzKCZpbmRpY2F0b3Jfc2l6ZSwgJmluZGljYXRvcl9zcGFj
aW5nKSAhPSBNT1pfR1RLX1NVQ0NFU1MpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUmFkaW9BcHBlYXJhbmNlOgorICAgICAgICAgICAg
aWYgKG1vel9ndGtfcmFkaW9fZ2V0X21ldHJpY3MoJmluZGljYXRvcl9zaXplLCAmaW5kaWNhdG9y
X3NwYWNpbmcpICE9IE1PWl9HVEtfU1VDQ0VTUykKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICB9CiAKLSAgICAvLyBGSVhNRTogIEEgaGFyZC1jb2RlZCBzaXplIG9mIDEzIGlzIHVzZWQu
ICBUaGlzIGlzIHdyb25nIGJ1dCBuZWNlc3NhcnkgZm9yIG5vdy4gIEl0IG1hdGNoZXMgRmlyZWZv
eC4KLSAgICAvLyBBdCBkaWZmZXJlbnQgRFBJIHNldHRpbmdzIG9uIFdpbmRvd3MsIHF1ZXJ5aW5n
IHRoZSB0aGVtZSBnaXZlcyB5b3UgYSBsYXJnZXIgc2l6ZSB0aGF0IGFjY291bnRzIGZvcgotICAg
IC8vIHRoZSBoaWdoZXIgRFBJLiAgVW50aWwgb3VyIGVudGlyZSBlbmdpbmUgaG9ub3JzIGEgRFBJ
IHNldHRpbmcgb3RoZXIgdGhhbiA5Niwgd2UgY2FuJ3QgcmVseSBvbiB0aGUgdGhlbWUncwotICAg
IC8vIG1ldHJpY3MuCi0gICAgY29uc3QgaW50IGZmID0gMTM7CisgICAgLy8gT3RoZXIgcG9ydHMg
aGFyZC1jb2RlIHRoaXMgdG8gMTMsIGJ1dCBHVEsrIHVzZXJzIHRlbmQgdG8gZGVtYW5kIHRoZSBu
YXRpdmUgbG9vay4KKyAgICAvLyBJdCBjb3VsZCBiZSBtYWRlIGEgY29uZmlndXJhdGlvbiBvcHRp
b24gaWYgMTMgYWN0dWFsbHkgYnJlYWtzIHNpdGUgY29tcGF0aWJpbGl0eS4KKyAgICBpbnQgbGVu
Z3RoID0gaW5kaWNhdG9yX3NpemUgKyBpbmRpY2F0b3Jfc3BhY2luZzsKICAgICBpZiAoc3R5bGUt
PndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSkKLSAgICAgICAgc3R5bGUtPnNldFdpZHRoKExl
bmd0aChmZiwgRml4ZWQpKTsKKyAgICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChsZW5ndGgs
IEZpeGVkKSk7CiAKICAgICBpZiAoc3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKQotICAgICAgICBz
dHlsZS0+c2V0SGVpZ2h0KExlbmd0aChmZiwgRml4ZWQpKTsKKyAgICAgICAgc3R5bGUtPnNldEhl
aWdodChMZW5ndGgobGVuZ3RoLCBGaXhlZCkpOworfQorCit2b2lkIFJlbmRlclRoZW1lR3RrOjpz
ZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoreworICAgIHNldFRvZ2ds
ZVNpemUoc3R5bGUsIFJhZGlvQXBwZWFyYW5jZSk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6
OnBhaW50Q2hlY2tib3goUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50
SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICByZXR1cm4gcGFpbnRNb3pXaWRn
ZXQodGhpcywgTU9aX0dUS19DSEVDS0JVVFRPTiwgbywgaSwgcmVjdCk7CiB9CiAKLWJvb2wgUmVu
ZGVyVGhlbWVHdGs6OnBhaW50QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2Jq
ZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpIAordm9pZCBSZW5kZXJUaGVt
ZUd0azo6c2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKIHsKLSAgICBFQXBw
ZWFyYW5jZSBhcHBlYXJhbmNlID0gby0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpOworICAgIHNldFRv
Z2dsZVNpemUoc3R5bGUsIFJhZGlvQXBwZWFyYW5jZSk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVH
dGs6OnBhaW50UmFkaW8oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50
SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICByZXR1cm4gcGFpbnRNb3pXaWRn
ZXQodGhpcywgTU9aX0dUS19SQURJT0JVVFRPTiwgbywgaSwgcmVjdCk7Cit9CiAKLSAgICBpZiAo
YXBwZWFyYW5jZSA9PSBQdXNoQnV0dG9uQXBwZWFyYW5jZSB8fCBhcHBlYXJhbmNlID09IEJ1dHRv
bkFwcGVhcmFuY2UpIHsKLSAgICAgICAgR3RrV2lkZ2V0KiBidXR0b24gPSBndGtCdXR0b24oKTsK
LSAgICAgICAgSW50UG9pbnQgcG9zID0gaS5jb250ZXh0LT50cmFuc2xhdGVQb2ludChyZWN0Lmxv
Y2F0aW9uKCkpOwotICAgICAgICBndGtfcGFpbnRfYm94KGJ1dHRvbi0+c3R5bGUsIGkuY29udGV4
dC0+Z2RrRHJhd2FibGUoKSwKLSAgICAgICAgICAgICAgICAgICAgICBkZXRlcm1pbmVTdGF0ZShv
KSwgZGV0ZXJtaW5lU2hhZG93KG8pLAotICAgICAgICAgICAgICAgICAgICAgIDAsIGJ1dHRvbiwg
ImJ1dHRvbiIsCi0gICAgICAgICAgICAgICAgICAgICAgcG9zLngoKSwgcG9zLnkoKSwgcmVjdC53
aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKLSAgICB9IGVsc2UgaWYgKGFwcGVhcmFuY2UgPT0gQ2hl
Y2tib3hBcHBlYXJhbmNlKSB7Ci0gICAgICAgIEd0a1dpZGdldCogY2hlY2tib3ggPSBndGtDaGVj
a2JveCgpOwotICAgICAgICBJbnRQb2ludCBwb3MgPSBpLmNvbnRleHQtPnRyYW5zbGF0ZVBvaW50
KHJlY3QubG9jYXRpb24oKSk7Ci0gICAgICAgIGd0a19wYWludF9jaGVjayhjaGVja2JveC0+c3R5
bGUsIGkuY29udGV4dC0+Z2RrRHJhd2FibGUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGRl
dGVybWluZVN0YXRlKG8pLCBkZXRlcm1pbmVTaGFkb3cobyksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAwLCBjaGVja2JveCwgImNoZWNrYnV0dG9uIiwKLSAgICAgICAgICAgICAgICAgICAgICAg
IHBvcy54KCksIHBvcy55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7Ci0gICAgfSBl
bHNlIGlmIChhcHBlYXJhbmNlID09IFJhZGlvQXBwZWFyYW5jZSkgewotICAgICAgICBHdGtXaWRn
ZXQqIHJhZGlvID0gZ3RrUmFkaW9CdXR0b24oKTsKLSAgICAgICAgSW50UG9pbnQgcG9zID0gaS5j
b250ZXh0LT50cmFuc2xhdGVQb2ludChyZWN0LmxvY2F0aW9uKCkpOwotICAgICAgICBndGtfcGFp
bnRfb3B0aW9uKHJhZGlvLT5zdHlsZSwgaS5jb250ZXh0LT5nZGtEcmF3YWJsZSgpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgIGRldGVybWluZVN0YXRlKG8pLCBkZXRlcm1pbmVTaGFkb3cobyks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgMCwgcmFkaW8sICJyYWRpb2J1dHRvbiIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgcG9zLngoKSwgcG9zLnkoKSwgcmVjdC53aWR0aCgpLCByZWN0
LmhlaWdodCgpKTsKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdEJ1dHRvblN0eWxlKENTU1N0
eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIFdlYkNvcmU6OkVsZW1l
bnQqIGUpIGNvbnN0Cit7CisgICAgLy8gVE9ETzogSXMgdGhpcyBjb25kaXRpb24gbmVjZXNzYXJ5
PworICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IFB1c2hCdXR0b25BcHBlYXJhbmNlKSB7
CisgICAgICAgIHN0eWxlLT5yZXNldEJvcmRlcigpOworICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0
KExlbmd0aChBdXRvKSk7CisgICAgICAgIHN0eWxlLT5zZXRXaGl0ZVNwYWNlKFBSRSk7CisgICAg
ICAgIHNldEJ1dHRvblBhZGRpbmcoc3R5bGUpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFRP
RE86IFRoaXMgc2hvdWxkIG5vdCBiZSBoYXJkLWNvZGVkLgorICAgICAgICBzdHlsZS0+c2V0TWlu
SGVpZ2h0KExlbmd0aCgxNCwgRml4ZWQpKTsKKyAgICAgICAgc3R5bGUtPnJlc2V0Qm9yZGVyVG9w
KCk7CisgICAgICAgIHN0eWxlLT5yZXNldEJvcmRlckJvdHRvbSgpOwogICAgIH0KK30KIAotICAg
IHJldHVybiBmYWxzZTsKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50QnV0dG9uKFJlbmRlck9i
amVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3Qm
IHJlY3QpCit7CisgICAgcmV0dXJuIHBhaW50TW96V2lkZ2V0KHRoaXMsIE1PWl9HVEtfQlVUVE9O
LCBvLCBpLCByZWN0KTsKIH0KIAogdm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0TWVudUxpc3RT
dHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBXZWJD
b3JlOjpFbGVtZW50KiBlKSBjb25zdAogewotICAgIGFkZEludHJpbnNpY01hcmdpbnMoc3R5bGUp
OworICAgIHN0eWxlLT5yZXNldEJvcmRlcigpOworICAgIHN0eWxlLT5yZXNldFBhZGRpbmcoKTsK
KyAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChBdXRvKSk7CisgICAgc3R5bGUtPnNldFdoaXRl
U3BhY2UoUFJFKTsKKyAgICBhZGp1c3RNb3pTdHlsZShzdHlsZSwgTU9aX0dUS19EUk9QRE9XTik7
CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVudUxpc3QoUmVuZGVyT2JqZWN0KiBv
LCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkK
IHsKLSAgICAvLyBUT0RPOiBSZW5kZXIgYSByZWFsIG1lbnUgbGlzdCBidXR0b24sIG5vdCBqdXN0
IGEgYm94Ci0gICAgR3RrV2lkZ2V0KiBidXR0b24gPSBndGtCdXR0b24oKTsKLSAgICBJbnRQb2lu
dCBwb3MgPSBpLmNvbnRleHQtPnRyYW5zbGF0ZVBvaW50KHJlY3QubG9jYXRpb24oKSk7Ci0gICAg
Z3RrX3BhaW50X2JveChidXR0b24tPnN0eWxlLCBpLmNvbnRleHQtPmdka0RyYXdhYmxlKCksCi0g
ICAgICAgICAgICAgICAgICBkZXRlcm1pbmVTdGF0ZShvKSwgZGV0ZXJtaW5lU2hhZG93KG8pLAot
ICAgICAgICAgICAgICAgICAgMCwgYnV0dG9uLCAwLAotICAgICAgICAgICAgICAgICAgcG9zLngo
KSwgcG9zLnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKLSAgICByZXR1cm4gZmFs
c2U7CisgICAgcmV0dXJuIHBhaW50TW96V2lkZ2V0KHRoaXMsIE1PWl9HVEtfRFJPUERPV04sIG8s
IGksIHJlY3QpOwogfQogCi12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RUZXh0RmllbGRTdHls
ZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50
KiBlKSBjb25zdCAKLXsgCi0gICAgYWRkSW50cmluc2ljTWFyZ2lucyhzdHlsZSk7Cit2b2lkIFJl
bmRlclRoZW1lR3RrOjphZGp1c3RUZXh0RmllbGRTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxl
Y3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAoreworICAgIHN0eWxl
LT5yZXNldEJvcmRlcigpOworICAgIHN0eWxlLT5yZXNldFBhZGRpbmcoKTsKKyAgICBzdHlsZS0+
c2V0SGVpZ2h0KExlbmd0aChBdXRvKSk7CisgICAgc3R5bGUtPnNldFdoaXRlU3BhY2UoUFJFKTsK
KyAgICBhZGp1c3RNb3pTdHlsZShzdHlsZSwgTU9aX0dUS19FTlRSWSk7CiB9CiAKIGJvb2wgUmVu
ZGVyVGhlbWVHdGs6OnBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVy
T2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgR3RrV2lk
Z2V0KiBlbnRyeSA9IGd0a0VudHJ5KCk7Ci0gICAgSW50UG9pbnQgcG9zID0gaS5jb250ZXh0LT50
cmFuc2xhdGVQb2ludChyZWN0LmxvY2F0aW9uKCkpOworICAgIHJldHVybiBwYWludE1veldpZGdl
dCh0aGlzLCBNT1pfR1RLX0VOVFJZLCBvLCBpLCByZWN0KTsKK30KIAotICAgIGd0a19wYWludF9z
aGFkb3coZW50cnktPnN0eWxlLCBpLmNvbnRleHQtPmdka0RyYXdhYmxlKCksCi0gICAgICAgICAg
ICAgICAgICAgICBkZXRlcm1pbmVTdGF0ZShvKSwgZGV0ZXJtaW5lU2hhZG93KG8pLAotICAgICAg
ICAgICAgICAgICAgICAgMCwgZW50cnksICJlbnRyeSIsCi0gICAgICAgICAgICAgICAgICAgICBw
b3MueCgpLCBwb3MueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwotICAgIHJldHVy
biBmYWxzZTsKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFRleHRBcmVhU3R5bGUoQ1NTU3R5
bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29u
c3QKK3sKKyAgICBhZGp1c3RUZXh0RmllbGRTdHlsZShzZWxlY3Rvciwgc3R5bGUsIGUpOwogfQog
CiBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFRleHRBcmVhKFJlbmRlck9iamVjdCogbywgY29u
c3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCkBAIC0zMDYs
MTcxICsyNTgsMTcwIEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50VGV4dEFyZWEoUmVuZGUK
ICAgICByZXR1cm4gcGFpbnRUZXh0RmllbGQobywgaSwgcik7CiB9CiAKLXZvaWQgUmVuZGVyVGhl
bWVHdGs6OmFkanVzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5k
ZXJTdHlsZSogc3R5bGUsIFdlYkNvcmU6OkVsZW1lbnQqIGUpIGNvbnN0Cit2b2lkIFJlbmRlclRo
ZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVj
dG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAorewor
ICAgIGFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoc2VsZWN0b3IsIHN0eWxlLCBl
KTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0
b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29u
c3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICByZXR1cm4gcGFpbnRNb3pXaWRnZXQodGhpcywgTU9a
X0dUS19EUk9QRE9XTl9BUlJPVywgbywgaSwgcmVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVH
dGs6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TdHlsZShDU1NTdHlsZVNlbGVj
dG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAorewor
ICAgIHN0eWxlLT5yZXNldEJvcmRlcigpOworICAgIHN0eWxlLT5yZXNldFBhZGRpbmcoKTsKKwor
ICAgIC8vIFRPRE86IFRoaXMgc2hvdWxkIG5vdCBiZSBoYXJkLWNvZGVkLgorICAgIEludFNpemUg
c2l6ZSA9IEludFNpemUoMTQsIDE0KTsKKyAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNpemUu
d2lkdGgoKSwgRml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzaXplLmhlaWdo
dCgpLCBGaXhlZCkpOworfQorCitib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFNlYXJjaEZpZWxk
UmVzdWx0c0RlY29yYXRpb24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBh
aW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICByZXR1cm4gcGFpbnRTZWFy
Y2hGaWVsZENhbmNlbEJ1dHRvbihvLCBpLCByZWN0KTsKK30KKwordm9pZCBSZW5kZXJUaGVtZUd0
azo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBz
ZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAoreworICAgIHN0
eWxlLT5yZXNldEJvcmRlcigpOworICAgIHN0eWxlLT5yZXNldFBhZGRpbmcoKTsKKworICAgIC8v
IFRPRE86IFRoaXMgc2hvdWxkIG5vdCBiZSBoYXJkLWNvZGVkLgorICAgIEludFNpemUgc2l6ZSA9
IEludFNpemUoMTQsIDE0KTsKKyAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNpemUud2lkdGgo
KSwgRml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBG
aXhlZCkpOworfQorCitib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFNlYXJjaEZpZWxkQ2FuY2Vs
QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGks
IGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgcmV0dXJuIHBhaW50TW96V2lkZ2V0KHRoaXMs
IE1PWl9HVEtfQ0hFQ0tNRU5VSVRFTSwgbywgaSwgcmVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyVGhl
bWVHdGs6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3Is
IFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKK3sKKyAgICBhZGp1c3RUZXh0
RmllbGRTdHlsZShzZWxlY3Rvciwgc3R5bGUsIGUpOworfQorCitib29sIFJlbmRlclRoZW1lR3Rr
OjpwYWludFNlYXJjaEZpZWxkKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQ
YWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgYWRkSW50cmluc2ljTWFy
Z2lucyhzdHlsZSk7CisgICAgcmV0dXJuIHBhaW50VGV4dEZpZWxkKG8sIGksIHJlY3QpOwogfQog
CiBDb2xvciBSZW5kZXJUaGVtZUd0azo6cGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5k
Q29sb3IoKSBjb25zdAogewotICAgIEd0a1dpZGdldCogZW50cnkgPSBndGtFbnRyeSgpOwotICAg
IEdka0NvbG9yIGNvbG9yID0gZW50cnktPnN0eWxlLT5iYXNlW0dUS19TVEFURV9TRUxFQ1RFRF07
Ci0gICAgcmV0dXJuIENvbG9yKGNvbG9yLnJlZCA+PiA4LCBjb2xvci5ncmVlbiA+PiA4LCBjb2xv
ci5ibHVlID4+IDgpOworICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gZ3RrRW50cnkoKTsKKyAgICBy
ZXR1cm4gd2lkZ2V0LT5zdHlsZS0+YmFzZVtHVEtfU1RBVEVfU0VMRUNURURdOwogfQogCiBDb2xv
ciBSZW5kZXJUaGVtZUd0azo6cGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xv
cigpIGNvbnN0CiB7Ci0gICAgR3RrV2lkZ2V0KiBlbnRyeSA9IGd0a0VudHJ5KCk7Ci0gICAgR2Rr
Q29sb3IgY29sb3IgPSBlbnRyeS0+c3R5bGUtPmJhc2VbR1RLX1NUQVRFX0FDVElWRV07Ci0gICAg
cmV0dXJuIENvbG9yKGNvbG9yLnJlZCA+PiA4LCBjb2xvci5ncmVlbiA+PiA4LCBjb2xvci5ibHVl
ID4+IDgpOworICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gZ3RrRW50cnkoKTsKKyAgICByZXR1cm4g
d2lkZ2V0LT5zdHlsZS0+YmFzZVtHVEtfU1RBVEVfQUNUSVZFXTsKIH0KIAogQ29sb3IgUmVuZGVy
VGhlbWVHdGs6OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QK
IHsKLSAgICBHdGtXaWRnZXQqIGVudHJ5ID0gZ3RrRW50cnkoKTsKLSAgICBHZGtDb2xvciBjb2xv
ciA9IGVudHJ5LT5zdHlsZS0+dGV4dFtHVEtfU1RBVEVfU0VMRUNURURdOwotICAgIHJldHVybiBD
b2xvcihjb2xvci5yZWQgPj4gOCwgY29sb3IuZ3JlZW4gPj4gOCwgY29sb3IuYmx1ZSA+PiA4KTsK
KyAgICBHdGtXaWRnZXQqIHdpZGdldCA9IGd0a0VudHJ5KCk7CisgICAgcmV0dXJuIHdpZGdldC0+
c3R5bGUtPnRleHRbR1RLX1NUQVRFX1NFTEVDVEVEXTsKIH0KIAogQ29sb3IgUmVuZGVyVGhlbWVH
dGs6OnBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAogewot
ICAgIEd0a1dpZGdldCogZW50cnkgPSBndGtFbnRyeSgpOwotICAgIEdka0NvbG9yIGNvbG9yID0g
ZW50cnktPnN0eWxlLT50ZXh0W0dUS19TVEFURV9BQ1RJVkVdOwotICAgIHJldHVybiBDb2xvcihj
b2xvci5yZWQgPj4gOCwgY29sb3IuZ3JlZW4gPj4gOCwgY29sb3IuYmx1ZSA+PiA4KTsKKyAgICBH
dGtXaWRnZXQqIHdpZGdldCA9IGd0a0VudHJ5KCk7CisgICAgcmV0dXJuIHdpZGdldC0+c3R5bGUt
PnRleHRbR1RLX1NUQVRFX0FDVElWRV07CiB9CiAKIENvbG9yIFJlbmRlclRoZW1lR3RrOjphY3Rp
dmVMaXN0Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKIHsKICAgICBHdGtXaWRn
ZXQqIHdpZGdldCA9IGd0a1RyZWVWaWV3KCk7Ci0gICAgR2RrQ29sb3IgY29sb3IgPSB3aWRnZXQt
PnN0eWxlLT5iYXNlW0dUS19TVEFURV9TRUxFQ1RFRF07Ci0gICAgcmV0dXJuIENvbG9yKGNvbG9y
LnJlZCA+PiA4LCBjb2xvci5ncmVlbiA+PiA4LCBjb2xvci5ibHVlID4+IDgpOworICAgIHJldHVy
biB3aWRnZXQtPnN0eWxlLT5iYXNlW0dUS19TVEFURV9TRUxFQ1RFRF07CiB9CiAKIENvbG9yIFJl
bmRlclRoZW1lR3RrOjppbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBj
b25zdAogewogICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gZ3RrVHJlZVZpZXcoKTsKLSAgICBHZGtD
b2xvciBjb2xvciA9IHdpZGdldC0+c3R5bGUtPmJhc2VbR1RLX1NUQVRFX0FDVElWRV07Ci0gICAg
cmV0dXJuIENvbG9yKGNvbG9yLnJlZCA+PiA4LCBjb2xvci5ncmVlbiA+PiA4LCBjb2xvci5ibHVl
ID4+IDgpOworICAgIHJldHVybiB3aWRnZXQtPnN0eWxlLT5iYXNlW0dUS19TVEFURV9BQ1RJVkVd
OwogfQogCiBDb2xvciBSZW5kZXJUaGVtZUd0azo6YWN0aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVn
cm91bmRDb2xvcigpIGNvbnN0CiB7CiAgICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBndGtUcmVlVmll
dygpOwotICAgIEdka0NvbG9yIGNvbG9yID0gd2lkZ2V0LT5zdHlsZS0+dGV4dFtHVEtfU1RBVEVf
U0VMRUNURURdOwotICAgIHJldHVybiBDb2xvcihjb2xvci5yZWQgPj4gOCwgY29sb3IuZ3JlZW4g
Pj4gOCwgY29sb3IuYmx1ZSA+PiA4KTsKKyAgICByZXR1cm4gd2lkZ2V0LT5zdHlsZS0+dGV4dFtH
VEtfU1RBVEVfU0VMRUNURURdOwogfQogCiBDb2xvciBSZW5kZXJUaGVtZUd0azo6aW5hY3RpdmVM
aXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKIHsKICAgICBHdGtXaWRnZXQq
IHdpZGdldCA9IGd0a1RyZWVWaWV3KCk7Ci0gICAgR2RrQ29sb3IgY29sb3IgPSB3aWRnZXQtPnN0
eWxlLT50ZXh0W0dUS19TVEFURV9BQ1RJVkVdOwotICAgIHJldHVybiBDb2xvcihjb2xvci5yZWQg
Pj4gOCwgY29sb3IuZ3JlZW4gPj4gOCwgY29sb3IuYmx1ZSA+PiA4KTsKKyAgICByZXR1cm4gd2lk
Z2V0LT5zdHlsZS0+dGV4dFtHVEtfU1RBVEVfQUNUSVZFXTsKIH0KIAotYm9vbCBSZW5kZXJUaGVt
ZUd0azo6Y2FyZXRTaG91bGRCbGluaygpIGNvbnN0Citkb3VibGUgUmVuZGVyVGhlbWVHdGs6OmNh
cmV0QmxpbmtGcmVxdWVuY3koKSBjb25zdAogewotICAgIEd0a1NldHRpbmdzKiBzZXR0aW5ncyA9
IGd0a193aWRnZXRfZ2V0X3NldHRpbmdzKGd0a0VudHJ5KCkpOworICAgIEd0a1NldHRpbmdzKiBz
ZXR0aW5ncyA9IGd0a19zZXR0aW5nc19nZXRfZGVmYXVsdCgpOwogCi0gICAgZ2Jvb2xlYW4gdmFs
dWU7Ci0gICAgZ19vYmplY3RfZ2V0KHNldHRpbmdzLCAiZ3RrLWN1cnNvci1ibGluayIsICZ2YWx1
ZSwgMCk7CisgICAgZ2Jvb2xlYW4gc2hvdWxkQmxpbms7CisgICAgZ2ludCB0aW1lOwogCi0gICAg
cmV0dXJuIHZhbHVlOwotfQorICAgIGdfb2JqZWN0X2dldChzZXR0aW5ncywgImd0ay1jdXJzb3It
YmxpbmsiLCAmc2hvdWxkQmxpbmssICJndGstY3Vyc29yLWJsaW5rLXRpbWUiLCAmdGltZSwgMCk7
CiAKLWRvdWJsZSBSZW5kZXJUaGVtZUd0azo6Y2FyZXRCbGlua0ZyZXF1ZW5jeSgpIGNvbnN0Ci17
Ci0gICAgaWYgKCFjYXJldFNob3VsZEJsaW5rKCkpCisgICAgaWYgKCFzaG91bGRCbGluaykKICAg
ICAgICAgcmV0dXJuIDA7CiAKLSAgICBHdGtTZXR0aW5ncyogc2V0dGluZ3MgPSBndGtfd2lkZ2V0
X2dldF9zZXR0aW5ncyhndGtFbnRyeSgpKTsKLQotICAgIGdpbnQgdGltZTsKLSAgICBnX29iamVj
dF9nZXQoc2V0dGluZ3MsICJndGstY3Vyc29yLWJsaW5rLXRpbWUiLCAmdGltZSwgMCk7Ci0KICAg
ICByZXR1cm4gdGltZSAvIDIwMDAuOwogfQogCi12b2lkIFJlbmRlclRoZW1lR3RrOjpzeXN0ZW1G
b250KGludCBwcm9wSWQsIEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1l
R3RrOjpzeXN0ZW1Gb250KGludCwgRm9udERlc2NyaXB0aW9uJikgY29uc3QKIHsKKyAgICAvLyBJ
ZiB5b3UgcmVtb3ZlIHRoaXMgbm90SW1wbGVtZW50ZWQoKSwgcmVwbGFjZSBpdCB3aXRoIGFuIGNv
bW1lbnQgdGhhdCBleHBsYWlucyB3aHkuCisgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotR3Rr
V2lkZ2V0KiBSZW5kZXJUaGVtZUd0azo6Z3RrQnV0dG9uKCkgY29uc3QKK3N0YXRpYyB2b2lkIGd0
a1N0eWxlU2V0Q2IoR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a1N0eWxlKiBwcmV2aW91cywgUmVuZGVy
VGhlbWUqIHJlbmRlclRoZW1lKQogewotICAgIGlmICghbV9ndGtCdXR0b24pIHsKLSAgICAgICAg
bV9ndGtCdXR0b24gPSBndGtfYnV0dG9uX25ldygpOwotICAgICAgICBndGtfY29udGFpbmVyX2Fk
ZChHVEtfQ09OVEFJTkVSKGd0a1dpbmRvd0NvbnRhaW5lcigpKSwgbV9ndGtCdXR0b24pOwotICAg
ICAgICBndGtfd2lkZ2V0X3JlYWxpemUobV9ndGtCdXR0b24pOwotICAgIH0KLQotICAgIHJldHVy
biBtX2d0a0J1dHRvbjsKLX0KLQotR3RrV2lkZ2V0KiBSZW5kZXJUaGVtZUd0azo6Z3RrQ2hlY2ti
b3goKSBjb25zdAotewotICAgIGlmICghbV9ndGtDaGVja2JveCkgewotICAgICAgICBtX2d0a0No
ZWNrYm94ID0gZ3RrX2NoZWNrX2J1dHRvbl9uZXcoKTsKLSAgICAgICAgZ3RrX2NvbnRhaW5lcl9h
ZGQoR1RLX0NPTlRBSU5FUihndGtXaW5kb3dDb250YWluZXIoKSksIG1fZ3RrQ2hlY2tib3gpOwot
ICAgICAgICBndGtfd2lkZ2V0X3JlYWxpemUobV9ndGtDaGVja2JveCk7Ci0gICAgfQotCi0gICAg
cmV0dXJuIG1fZ3RrQ2hlY2tib3g7CisgICAgLy8gVE9ETzogTWFrZSBzdXJlIHRoaXMgZnVuY3Rp
b24gZG9lc24ndCBnZXQgY2FsbGVkIG1hbnkgdGltZXMgZm9yIGEgc2luZ2xlIEdUSysgc3R5bGUg
Y2hhbmdlIHNpZ25hbC4KKyAgICByZW5kZXJUaGVtZS0+cGxhdGZvcm1Db2xvcnNEaWRDaGFuZ2Uo
KTsKIH0KIAotR3RrV2lkZ2V0KiBSZW5kZXJUaGVtZUd0azo6Z3RrUmFkaW9CdXR0b24oKSBjb25z
dAorR3RrQ29udGFpbmVyKiBSZW5kZXJUaGVtZUd0azo6Z3RrQ29udGFpbmVyKCkgY29uc3QKIHsK
LSAgICBpZiAoIW1fZ3RrUmFkaW9CdXR0b24pIHsKLSAgICAgICAgbV9ndGtSYWRpb0J1dHRvbiA9
IGd0a19yYWRpb19idXR0b25fbmV3KE5VTEwpOwotICAgICAgICBndGtfY29udGFpbmVyX2FkZChH
VEtfQ09OVEFJTkVSKGd0a1dpbmRvd0NvbnRhaW5lcigpKSwgbV9ndGtSYWRpb0J1dHRvbik7Ci0g
ICAgICAgIGd0a193aWRnZXRfcmVhbGl6ZShtX2d0a1JhZGlvQnV0dG9uKTsKLSAgICB9CisgICAg
aWYgKG1fZ3RrQ29udGFpbmVyKQorICAgICAgICByZXR1cm4gbV9ndGtDb250YWluZXI7CiAKLSAg
ICByZXR1cm4gbV9ndGtSYWRpb0J1dHRvbjsKLX0KKyAgICBtX2d0a1dpbmRvdyA9IGd0a193aW5k
b3dfbmV3KEdUS19XSU5ET1dfUE9QVVApOworICAgIG1fZ3RrQ29udGFpbmVyID0gR1RLX0NPTlRB
SU5FUihndGtfZml4ZWRfbmV3KCkpOworICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlO
RVIobV9ndGtXaW5kb3cpLCBHVEtfV0lER0VUKG1fZ3RrQ29udGFpbmVyKSk7CisgICAgZ3RrX3dp
ZGdldF9yZWFsaXplKG1fZ3RrV2luZG93KTsKIAotdm9pZCBSZW5kZXJUaGVtZUd0azo6Z3RrU3R5
bGVTZXQoR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a1N0eWxlKiBwcmV2aW91cywgUmVuZGVyVGhlbWUq
IHJlbmRlclRoZW1lKQotewotICAgIHJlbmRlclRoZW1lLT5wbGF0Zm9ybUNvbG9yc0RpZENoYW5n
ZSgpOworICAgIHJldHVybiBtX2d0a0NvbnRhaW5lcjsKIH0KIAogR3RrV2lkZ2V0KiBSZW5kZXJU
aGVtZUd0azo6Z3RrRW50cnkoKSBjb25zdAogewotICAgIGlmICghbV9ndGtFbnRyeSkgewotICAg
ICAgICBtX2d0a0VudHJ5ID0gZ3RrX2VudHJ5X25ldygpOwotICAgICAgICBnX3NpZ25hbF9jb25u
ZWN0KG1fZ3RrRW50cnksICJzdHlsZS1zZXQiLCBHX0NBTExCQUNLKGd0a1N0eWxlU2V0KSwgdGhl
bWUoKSk7Ci0gICAgICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIoZ3RrV2luZG93
Q29udGFpbmVyKCkpLCBtX2d0a0VudHJ5KTsKLSAgICAgICAgZ3RrX3dpZGdldF9yZWFsaXplKG1f
Z3RrRW50cnkpOwotICAgIH0KKyAgICBpZiAobV9ndGtFbnRyeSkKKyAgICAgICAgcmV0dXJuIG1f
Z3RrRW50cnk7CisKKyAgICBtX2d0a0VudHJ5ID0gZ3RrX2VudHJ5X25ldygpOworICAgIGdfc2ln
bmFsX2Nvbm5lY3QobV9ndGtFbnRyeSwgInN0eWxlLXNldCIsIEdfQ0FMTEJBQ0soZ3RrU3R5bGVT
ZXRDYiksIHRoZW1lKCkpOworICAgIGd0a19jb250YWluZXJfYWRkKGd0a0NvbnRhaW5lcigpLCBt
X2d0a0VudHJ5KTsKKyAgICBndGtfd2lkZ2V0X3JlYWxpemUobV9ndGtFbnRyeSk7CiAKICAgICBy
ZXR1cm4gbV9ndGtFbnRyeTsKIH0KIAogR3RrV2lkZ2V0KiBSZW5kZXJUaGVtZUd0azo6Z3RrVHJl
ZVZpZXcoKSBjb25zdAogewotICAgIGlmICghbV9ndGtUcmVlVmlldykgewotICAgICAgICBtX2d0
a1RyZWVWaWV3ID0gZ3RrX3RyZWVfdmlld19uZXcoKTsKLSAgICAgICAgZ19zaWduYWxfY29ubmVj
dChtX2d0a1RyZWVWaWV3LCAic3R5bGUtc2V0IiwgR19DQUxMQkFDSyhndGtTdHlsZVNldCksIHRo
ZW1lKCkpOwotICAgICAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKGd0a1dpbmRv
d0NvbnRhaW5lcigpKSwgbV9ndGtUcmVlVmlldyk7Ci0gICAgICAgIGd0a193aWRnZXRfcmVhbGl6
ZShtX2d0a1RyZWVWaWV3KTsKLSAgICB9CisgICAgaWYgKG1fZ3RrVHJlZVZpZXcpCisgICAgICAg
IHJldHVybiBtX2d0a1RyZWVWaWV3OworCisgICAgbV9ndGtUcmVlVmlldyA9IGd0a190cmVlX3Zp
ZXdfbmV3KCk7CisgICAgZ19zaWduYWxfY29ubmVjdChtX2d0a1RyZWVWaWV3LCAic3R5bGUtc2V0
IiwgR19DQUxMQkFDSyhndGtTdHlsZVNldENiKSwgdGhlbWUoKSk7CisgICAgZ3RrX2NvbnRhaW5l
cl9hZGQoZ3RrQ29udGFpbmVyKCksIG1fZ3RrVHJlZVZpZXcpOworICAgIGd0a193aWRnZXRfcmVh
bGl6ZShtX2d0a1RyZWVWaWV3KTsKIAogICAgIHJldHVybiBtX2d0a1RyZWVWaWV3OwogfQogCi1H
dGtXaWRnZXQqIFJlbmRlclRoZW1lR3RrOjpndGtXaW5kb3dDb250YWluZXIoKSBjb25zdAotewot
ICAgIGlmICghbV9jb250YWluZXIpIHsKLSAgICAgICAgbV91bm1hcHBlZFdpbmRvdyA9IGd0a193
aW5kb3dfbmV3KEdUS19XSU5ET1dfUE9QVVApOwotICAgICAgICAvLyBTb21lIEdUSyB0aGVtZXMg
KGkuZS4gQ2xlYXJsb29rcykgZHJhdyB0aGUgYnV0dG9ucyBkaWZmZXJlbnRseQotICAgICAgICAv
LyAoaW4gcGFydGljdWxhciwgY2FsbCBndGtfc3R5bGVfYXBwbHlfZGVmYXVsdF9iYWNrZ3JvdW5k
KSBpZiB0aGV5Ci0gICAgICAgIC8vIGFyZSB1bmFsbG9jYXRlZCBhbmQgYXJlIGNoaWxkcmVuIG9m
IGEgR3RrRml4ZWQgd2lkZ2V0LCB3aGljaCBpcwotICAgICAgICAvLyBhcHBhcmVudGx5IHdoYXQg
c29tZSAibWFrZSBGaXJlZm94IGJ1dHRvbnMgbG9vayBsaWtlIEdUSyIgY29kZQotICAgICAgICAv
LyBkb2VzLiAgVG8gYXZvaWQgdGhpcyB1Z2x5IGxvb2ssIHdlIHVzZSBhIEd0a0hCb3ggYXMgYSBw
YXJlbnQsCi0gICAgICAgIC8vIHJhdGhlciB0aGFuIGEgR3RrRml4ZWQuCi0gICAgICAgIG1fY29u
dGFpbmVyID0gZ3RrX2hib3hfbmV3KGZhbHNlLCAwKTsKLSAgICAgICAgZ3RrX2NvbnRhaW5lcl9h
ZGQoR1RLX0NPTlRBSU5FUihtX3VubWFwcGVkV2luZG93KSwgbV9jb250YWluZXIpOwotICAgICAg
ICBndGtfd2lkZ2V0X3JlYWxpemUobV91bm1hcHBlZFdpbmRvdyk7Ci0gICAgfQotCi0gICAgcmV0
dXJuIG1fY29udGFpbmVyOwotfQogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVy
VGhlbWVHdGsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVt
ZUd0ay5oCShyZXZpc2lvbiAyNzMzMykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRo
ZW1lR3RrLmgJKHdvcmtpbmcgY29weSkKQEAgLTQsNiArNCw3IEBACiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KICAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVs
IEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAogICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdl
ciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxh
bHBAYXRva2VyLmNvbT4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAt
MzMsMTMgKzM0LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdHJ1Y3QgVGhlbWVEYXRh
IHsKLSAgICBUaGVtZURhdGEoKSA6IG1fcGFydCgwKSwgbV9zdGF0ZSgwKSB7fQotCi0gICAgdW5z
aWduZWQgbV9wYXJ0OwotICAgIHVuc2lnbmVkIG1fc3RhdGU7Ci19OwotCiBjbGFzcyBSZW5kZXJU
aGVtZUd0ayA6IHB1YmxpYyBSZW5kZXJUaGVtZSB7CiBwdWJsaWM6CiAgICAgUmVuZGVyVGhlbWVH
dGsoKTsKQEAgLTczLDcgKzY3LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgQ29sb3IgaW5hY3Rp
dmVMaXN0Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7CiAgICAgdmlydHVhbCBD
b2xvciBpbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdDsKIAot
ICAgIHZpcnR1YWwgYm9vbCBjYXJldFNob3VsZEJsaW5rKCkgY29uc3Q7CiAgICAgdmlydHVhbCBk
b3VibGUgY2FyZXRCbGlua0ZyZXF1ZW5jeSgpIGNvbnN0OwogCiAgICAgLy8gU3lzdGVtIGZvbnRz
LgpAQCAtOTIsNDkgKzg1LDQzIEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
VGV4dEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCop
IGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqLCBj
b25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAorICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RUZXh0QXJlYVN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJT
dHlsZSosIEVsZW1lbnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJlYShS
ZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdFN0eWxlKENTU1N0eWxlU2Vs
ZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKTsKIAotcHJpdmF0ZToKLSAgICB2b2lkIGFkZEludHJpbnNpY01h
cmdpbnMoUmVuZGVyU3R5bGUqKSBjb25zdDsKLSAgICB2b2lkIGNsb3NlKCk7CisgICAgdmlydHVh
bCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TdHlsZShDU1NTdHlsZVNl
bGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCBib29s
IHBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbihSZW5kZXJPYmplY3QqLCBjb25zdCBS
ZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAotICAgIEd0a1N0YXRl
VHlwZSBkZXRlcm1pbmVTdGF0ZShSZW5kZXJPYmplY3QqKTsKLSAgICBHdGtTaGFkb3dUeXBlIGRl
dGVybWluZVNoYWRvdyhSZW5kZXJPYmplY3QqKTsKLSAgICBib29sIHN1cHBvcnRzRm9jdXMoRUFw
cGVhcmFuY2UpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFN0eWxl
KENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZChSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJP
YmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAotICAgIFRoZW1lRGF0YSBnZXRU
aGVtZURhdGEoUmVuZGVyT2JqZWN0Kik7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZp
ZWxkUmVzdWx0c0J1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVs
ZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNC
dXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jik7CiAKLSAgICBzdGF0aWMgdm9pZCBndGtTdHlsZVNldChHdGtXaWRnZXQqLCBH
dGtTdHlsZSosIFJlbmRlclRoZW1lKik7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZp
ZWxkQ2FuY2VsQnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxl
bWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0
dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpOwogCisKK3ByaXZhdGU6CiAgICAgLyoKICAgICAgKiBob2xkIHRoZSBzdGF0ZQog
ICAgICAqLwotICAgIEd0a1dpZGdldCogZ3RrQnV0dG9uKCkgY29uc3Q7Ci0gICAgR3RrV2lkZ2V0
KiBndGtDaGVja2JveCgpIGNvbnN0OwotICAgIEd0a1dpZGdldCogZ3RrUmFkaW9CdXR0b24oKSBj
b25zdDsKICAgICBHdGtXaWRnZXQqIGd0a0VudHJ5KCkgY29uc3Q7Ci0gICAgR3RrV2lkZ2V0KiBn
dGtFZGl0YWJsZSgpIGNvbnN0OwogICAgIEd0a1dpZGdldCogZ3RrVHJlZVZpZXcoKSBjb25zdDsK
IAogICAgIC8qCiAgICAgICogdW5tYXBwZWQgR2RrV2luZG93IGhhdmluZyBhIGNvbnRhaW5lci4g
VGhpcyBpcyBob2xkaW5nIGFsbAogICAgICAqIG91ciBmYWtlIHdpZGdldHMKICAgICAgKi8KLSAg
ICBHdGtXaWRnZXQqIGd0a1dpbmRvd0NvbnRhaW5lcigpIGNvbnN0OworICAgIEd0a0NvbnRhaW5l
ciogZ3RrQ29udGFpbmVyKCkgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgbXV0YWJsZSBHdGtXaWRn
ZXQqIG1fZ3RrQnV0dG9uOwotICAgIG11dGFibGUgR3RrV2lkZ2V0KiBtX2d0a0NoZWNrYm94Owot
ICAgIG11dGFibGUgR3RrV2lkZ2V0KiBtX2d0a1JhZGlvQnV0dG9uOworICAgIG11dGFibGUgR3Rr
V2lkZ2V0KiBtX2d0a1dpbmRvdzsKKyAgICBtdXRhYmxlIEd0a0NvbnRhaW5lciogbV9ndGtDb250
YWluZXI7CiAgICAgbXV0YWJsZSBHdGtXaWRnZXQqIG1fZ3RrRW50cnk7Ci0gICAgbXV0YWJsZSBH
dGtXaWRnZXQqIG1fZ3RrRWRpdGFibGU7CiAgICAgbXV0YWJsZSBHdGtXaWRnZXQqIG1fZ3RrVHJl
ZVZpZXc7Ci0KLSAgICBtdXRhYmxlIEd0a1dpZGdldCogbV91bm1hcHBlZFdpbmRvdzsKLSAgICBt
dXRhYmxlIEd0a1dpZGdldCogbV9jb250YWluZXI7CiB9OwogCiB9CkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2d0ay9ndGsyZHJhd2luZy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3RrL2d0azJkcmF3aW5nLmMJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2d0ay9n
dGsyZHJhd2luZy5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE5MjMgQEAKKy8qIC0qLSBNb2Rl
OiBDKys7IHRhYi13aWR0aDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNl
dDogNCAtKi0gKi8KKy8qICoqKioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioqKioKKyAqIFZlcnNp
b246IE1QTCAxLjEvR1BMIDIuMC9MR1BMIDIuMQorICoKKyAqIFRoZSBjb250ZW50cyBvZiB0aGlz
IGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbgor
ICogMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQg
aW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5
IG9mIHRoZSBMaWNlbnNlIGF0CisgKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyAqCisg
KiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBv
biBhbiAiQVMgSVMiIGJhc2lzLAorICogV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0
aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlCisgKiBmb3IgdGhlIHNwZWNp
ZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZQor
ICogTGljZW5zZS4KKyAqCisgKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBtb3ppbGxhLm9yZyBjb2Rl
LgorICoKKyAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcwor
ICogTmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29ycG9yYXRpb24uCisgKiBQb3J0aW9ucyBjcmVh
dGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAyMDAyCisgKiB0
aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogQ29udHJp
YnV0b3Iocyk6CisgKiAgQnJpYW4gUnluZXIgPGJyeW5lckBicmlhbnJ5bmVyLmNvbT4gIChPcmln
aW5hbCBBdXRob3IpCisgKiAgUGllcnJlIENoYW5pYWwgPHBfY2hAdmVyaXpvbi5uZXQ+CisgKiAg
TWljaGFlbCBWZW50bm9yIDxtLnZlbnRub3JAZ21haWwuY29tPgorICoKKyAqIEFsdGVybmF0aXZl
bHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1z
IG9mCisgKiBlaXRoZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiBv
ciBsYXRlciAodGhlICJHUEwiKSwgb3IKKyAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgVmVyc2lvbiAyLjEgb3IgbGF0ZXIgKHRoZSAiTEdQTCIpLAorICogaW4gd2hpY2gg
Y2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIG9yIHRoZSBMR1BMIGFyZSBhcHBsaWNhYmxl
IGluc3RlYWQKKyAqIG9mIHRob3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2Yg
eW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5CisgKiB1bmRlciB0aGUgdGVybXMgb2YgZWl0
aGVyIHRoZSBHUEwgb3IgdGhlIExHUEwsIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvCisgKiB1
c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1QTCwg
aW5kaWNhdGUgeW91cgorICogZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJv
dmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyAqIGFuZCBvdGhlciBwcm92aXNp
b25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3IgdGhlIExHUEwuIElmIHlvdSBkbyBub3QgZGVsZXRl
CisgKiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNp
b24gb2YgdGhpcyBmaWxlIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgYW55IG9uZSBvZiB0aGUgTVBM
LCB0aGUgR1BMIG9yIHRoZSBMR1BMLgorICoKKyAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoq
KioqICovCisKKy8qCisgKiBUaGlzIGZpbGUgY29udGFpbnMgcGFpbnRpbmcgZnVuY3Rpb25zIGZv
ciBlYWNoIG9mIHRoZSBndGsyIHdpZGdldHMuCisgKiBBZGFwdGVkIGZyb20gdGhlIGd0a2RyYXdp
bmcuYywgYW5kIGd0aysyLjAgc291cmNlLgorICovCisKKyNpbmNsdWRlIDxndGsvZ3RrLmg+Cisj
aW5jbHVkZSA8Z2RrL2dka3ByaXZhdGUuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRl
ICJndGtkcmF3aW5nLmgiCisKKyNpbmNsdWRlIDxtYXRoLmg+CisKKyNkZWZpbmUgWFRISUNLTkVT
UyhzdHlsZSkgKHN0eWxlLT54dGhpY2tuZXNzKQorI2RlZmluZSBZVEhJQ0tORVNTKHN0eWxlKSAo
c3R5bGUtPnl0aGlja25lc3MpCisjZGVmaW5lIFdJTkRPV19JU19NQVBQRUQod2luZG93KSAoKHdp
bmRvdykgJiYgR0RLX0lTX1dJTkRPVyh3aW5kb3cpICYmIGdka193aW5kb3dfaXNfdmlzaWJsZSh3
aW5kb3cpKQorCitzdGF0aWMgR3RrV2lkZ2V0KiBnUHJvdG9XaW5kb3c7CitzdGF0aWMgR3RrV2lk
Z2V0KiBnQnV0dG9uV2lkZ2V0Oworc3RhdGljIEd0a1dpZGdldCogZ0NoZWNrYm94V2lkZ2V0Owor
c3RhdGljIEd0a1dpZGdldCogZ1JhZGlvYnV0dG9uV2lkZ2V0Oworc3RhdGljIEd0a1dpZGdldCog
Z0hvcml6U2Nyb2xsYmFyV2lkZ2V0Oworc3RhdGljIEd0a1dpZGdldCogZ1ZlcnRTY3JvbGxiYXJX
aWRnZXQ7CitzdGF0aWMgR3RrV2lkZ2V0KiBnU3BpbldpZGdldDsKK3N0YXRpYyBHdGtXaWRnZXQq
IGdIU2NhbGVXaWRnZXQ7CitzdGF0aWMgR3RrV2lkZ2V0KiBnVlNjYWxlV2lkZ2V0Oworc3RhdGlj
IEd0a1dpZGdldCogZ0VudHJ5V2lkZ2V0Oworc3RhdGljIEd0a1dpZGdldCogZ0Fycm93V2lkZ2V0
Oworc3RhdGljIEd0a1dpZGdldCogZ09wdGlvbk1lbnVXaWRnZXQ7CitzdGF0aWMgR3RrV2lkZ2V0
KiBnRHJvcGRvd25CdXR0b25XaWRnZXQ7CitzdGF0aWMgR3RrV2lkZ2V0KiBnSGFuZGxlQm94V2lk
Z2V0Oworc3RhdGljIEd0a1dpZGdldCogZ1Rvb2xiYXJXaWRnZXQ7CitzdGF0aWMgR3RrV2lkZ2V0
KiBnRnJhbWVXaWRnZXQ7CitzdGF0aWMgR3RrV2lkZ2V0KiBnUHJvZ3Jlc3NXaWRnZXQ7CitzdGF0
aWMgR3RrV2lkZ2V0KiBnVGFiV2lkZ2V0Oworc3RhdGljIEd0a1dpZGdldCogZ1Rvb2x0aXBXaWRn
ZXQ7CitzdGF0aWMgR3RrV2lkZ2V0KiBnTWVudUJhcldpZGdldDsKK3N0YXRpYyBHdGtXaWRnZXQq
IGdNZW51QmFySXRlbVdpZGdldDsKK3N0YXRpYyBHdGtXaWRnZXQqIGdNZW51UG9wdXBXaWRnZXQ7
CitzdGF0aWMgR3RrV2lkZ2V0KiBnTWVudUl0ZW1XaWRnZXQ7CitzdGF0aWMgR3RrV2lkZ2V0KiBn
Q2hlY2tNZW51SXRlbVdpZGdldDsKKworc3RhdGljIEd0a1NoYWRvd1R5cGUgZ01lbnVCYXJTaGFk
b3dUeXBlOworc3RhdGljIEd0a1NoYWRvd1R5cGUgZ1Rvb2xiYXJTaGFkb3dUeXBlOworCitzdGF0
aWMgc3R5bGVfcHJvcF90IHN0eWxlX3Byb3BfZnVuYzsKK3N0YXRpYyBnYm9vbGVhbiBoYXZlX21l
bnVfc2hhZG93X3R5cGU7CitzdGF0aWMgZ2Jvb2xlYW4gaXNfaW5pdGlhbGl6ZWQ7CisKK2dpbnQK
K21vel9ndGtfZW5hYmxlX3N0eWxlX3Byb3BzKHN0eWxlX3Byb3BfdCBzdHlsZUdldFByb3ApCit7
CisgICAgc3R5bGVfcHJvcF9mdW5jID0gc3R5bGVHZXRQcm9wOworICAgIHJldHVybiBNT1pfR1RL
X1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBnaW50CitlbnN1cmVfd2luZG93X3dpZGdldCgpCit7Cisg
ICAgaWYgKCFnUHJvdG9XaW5kb3cpIHsKKyAgICAgICAgZ1Byb3RvV2luZG93ID0gZ3RrX3dpbmRv
d19uZXcoR1RLX1dJTkRPV19QT1BVUCk7CisgICAgICAgIGd0a193aWRnZXRfcmVhbGl6ZShnUHJv
dG9XaW5kb3cpOworICAgIH0KKyAgICByZXR1cm4gTU9aX0dUS19TVUNDRVNTOworfQorCitzdGF0
aWMgZ2ludAorc2V0dXBfd2lkZ2V0X3Byb3RvdHlwZShHdGtXaWRnZXQqIHdpZGdldCkKK3sKKyAg
ICBzdGF0aWMgR3RrV2lkZ2V0KiBwcm90b0xheW91dDsKKyAgICBlbnN1cmVfd2luZG93X3dpZGdl
dCgpOworICAgIGlmICghcHJvdG9MYXlvdXQpIHsKKyAgICAgICAgcHJvdG9MYXlvdXQgPSBndGtf
aGJveF9uZXcoRkFMU0UsIDApOworICAgICAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJ
TkVSKGdQcm90b1dpbmRvdyksIHByb3RvTGF5b3V0KTsKKyAgICB9CisKKyAgICBndGtfY29udGFp
bmVyX2FkZChHVEtfQ09OVEFJTkVSKHByb3RvTGF5b3V0KSwgd2lkZ2V0KTsKKyAgICBndGtfd2lk
Z2V0X3JlYWxpemUod2lkZ2V0KTsKKyAgICByZXR1cm4gTU9aX0dUS19TVUNDRVNTOworfQorCitz
dGF0aWMgZ2ludAorZW5zdXJlX2J1dHRvbl93aWRnZXQoKQoreworICAgIGlmICghZ0J1dHRvbldp
ZGdldCkgeworICAgICAgICBnQnV0dG9uV2lkZ2V0ID0gZ3RrX2J1dHRvbl9uZXdfd2l0aF9sYWJl
bCgiTSIpOworICAgICAgICBzZXR1cF93aWRnZXRfcHJvdG90eXBlKGdCdXR0b25XaWRnZXQpOwor
ICAgIH0KKyAgICByZXR1cm4gTU9aX0dUS19TVUNDRVNTOworfQorCitzdGF0aWMgZ2ludAorZW5z
dXJlX2NoZWNrYm94X3dpZGdldCgpCit7CisgICAgaWYgKCFnQ2hlY2tib3hXaWRnZXQpIHsKKyAg
ICAgICAgZ0NoZWNrYm94V2lkZ2V0ID0gZ3RrX2NoZWNrX2J1dHRvbl9uZXdfd2l0aF9sYWJlbCgi
TSIpOworICAgICAgICBzZXR1cF93aWRnZXRfcHJvdG90eXBlKGdDaGVja2JveFdpZGdldCk7Cisg
ICAgfQorICAgIHJldHVybiBNT1pfR1RLX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBnaW50CitlbnN1
cmVfcmFkaW9idXR0b25fd2lkZ2V0KCkKK3sKKyAgICBpZiAoIWdSYWRpb2J1dHRvbldpZGdldCkg
eworICAgICAgICBnUmFkaW9idXR0b25XaWRnZXQgPSBndGtfcmFkaW9fYnV0dG9uX25ld193aXRo
X2xhYmVsKE5VTEwsICJNIik7CisgICAgICAgIHNldHVwX3dpZGdldF9wcm90b3R5cGUoZ1JhZGlv
YnV0dG9uV2lkZ2V0KTsKKyAgICB9CisgICAgcmV0dXJuIE1PWl9HVEtfU1VDQ0VTUzsKK30KKwor
c3RhdGljIGdpbnQKK2Vuc3VyZV9zY3JvbGxiYXJfd2lkZ2V0KCkKK3sKKyAgICBpZiAoIWdWZXJ0
U2Nyb2xsYmFyV2lkZ2V0KSB7CisgICAgICAgIGdWZXJ0U2Nyb2xsYmFyV2lkZ2V0ID0gZ3RrX3Zz
Y3JvbGxiYXJfbmV3KE5VTEwpOworICAgICAgICBzZXR1cF93aWRnZXRfcHJvdG90eXBlKGdWZXJ0
U2Nyb2xsYmFyV2lkZ2V0KTsKKyAgICB9CisgICAgaWYgKCFnSG9yaXpTY3JvbGxiYXJXaWRnZXQp
IHsKKyAgICAgICAgZ0hvcml6U2Nyb2xsYmFyV2lkZ2V0ID0gZ3RrX2hzY3JvbGxiYXJfbmV3KE5V
TEwpOworICAgICAgICBzZXR1cF93aWRnZXRfcHJvdG90eXBlKGdIb3JpelNjcm9sbGJhcldpZGdl
dCk7CisgICAgfQorICAgIHJldHVybiBNT1pfR1RLX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBnaW50
CitlbnN1cmVfc3Bpbl93aWRnZXQoKQoreworICBpZiAoIWdTcGluV2lkZ2V0KSB7CisgICAgZ1Nw
aW5XaWRnZXQgPSBndGtfc3Bpbl9idXR0b25fbmV3KE5VTEwsIDEsIDApOworICAgIHNldHVwX3dp
ZGdldF9wcm90b3R5cGUoZ1NwaW5XaWRnZXQpOworICB9CisgIHJldHVybiBNT1pfR1RLX1NVQ0NF
U1M7Cit9CisKK3N0YXRpYyBnaW50CitlbnN1cmVfc2NhbGVfd2lkZ2V0KCkKK3sKKyAgaWYgKCFn
SFNjYWxlV2lkZ2V0KSB7CisgICAgZ0hTY2FsZVdpZGdldCA9IGd0a19oc2NhbGVfbmV3KE5VTEwp
OworICAgIHNldHVwX3dpZGdldF9wcm90b3R5cGUoZ0hTY2FsZVdpZGdldCk7CisgIH0KKyAgaWYg
KCFnVlNjYWxlV2lkZ2V0KSB7CisgICAgZ1ZTY2FsZVdpZGdldCA9IGd0a192c2NhbGVfbmV3KE5V
TEwpOworICAgIHNldHVwX3dpZGdldF9wcm90b3R5cGUoZ1ZTY2FsZVdpZGdldCk7CisgIH0KKyAg
cmV0dXJuIE1PWl9HVEtfU1VDQ0VTUzsKK30KKworc3RhdGljIGdpbnQKK2Vuc3VyZV9lbnRyeV93
aWRnZXQoKQoreworICAgIGlmICghZ0VudHJ5V2lkZ2V0KSB7CisgICAgICAgIGdFbnRyeVdpZGdl
dCA9IGd0a19lbnRyeV9uZXcoKTsKKyAgICAgICAgc2V0dXBfd2lkZ2V0X3Byb3RvdHlwZShnRW50
cnlXaWRnZXQpOworICAgIH0KKyAgICByZXR1cm4gTU9aX0dUS19TVUNDRVNTOworfQorCitzdGF0
aWMgZ2ludAorZW5zdXJlX29wdGlvbl9tZW51X3dpZGdldCgpCit7CisgICAgaWYgKCFnT3B0aW9u
TWVudVdpZGdldCkgeworICAgICAgICBnT3B0aW9uTWVudVdpZGdldCA9IGd0a19vcHRpb25fbWVu
dV9uZXcoKTsKKyAgICAgICAgc2V0dXBfd2lkZ2V0X3Byb3RvdHlwZShnT3B0aW9uTWVudVdpZGdl
dCk7ICAgICAgICAKKyAgICB9CisgICAgcmV0dXJuIE1PWl9HVEtfU1VDQ0VTUzsKK30KKworc3Rh
dGljIGdpbnQKK2Vuc3VyZV9hcnJvd193aWRnZXQoKQoreworICAgIGlmICghZ0Fycm93V2lkZ2V0
KSB7CisgICAgICAgIGdEcm9wZG93bkJ1dHRvbldpZGdldCA9IGd0a19idXR0b25fbmV3KCk7Cisg
ICAgICAgIHNldHVwX3dpZGdldF9wcm90b3R5cGUoZ0Ryb3Bkb3duQnV0dG9uV2lkZ2V0KTsKKyAg
ICAgICAgZ0Fycm93V2lkZ2V0ID0gZ3RrX2Fycm93X25ldyhHVEtfQVJST1dfRE9XTiwgR1RLX1NI
QURPV19PVVQpOworICAgICAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKGdEcm9w
ZG93bkJ1dHRvbldpZGdldCksIGdBcnJvd1dpZGdldCk7CisgICAgICAgIGd0a193aWRnZXRfcmVh
bGl6ZShnQXJyb3dXaWRnZXQpOworICAgIH0KKyAgICByZXR1cm4gTU9aX0dUS19TVUNDRVNTOwor
fQorCitzdGF0aWMgZ2ludAorZW5zdXJlX2hhbmRsZWJveF93aWRnZXQoKQoreworICAgIGlmICgh
Z0hhbmRsZUJveFdpZGdldCkgeworICAgICAgICBnSGFuZGxlQm94V2lkZ2V0ID0gZ3RrX2hhbmRs
ZV9ib3hfbmV3KCk7CisgICAgICAgIHNldHVwX3dpZGdldF9wcm90b3R5cGUoZ0hhbmRsZUJveFdp
ZGdldCk7CisgICAgfQorICAgIHJldHVybiBNT1pfR1RLX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBn
aW50CitlbnN1cmVfdG9vbGJhcl93aWRnZXQoKQoreworICAgIGlmICghZ1Rvb2xiYXJXaWRnZXQp
IHsKKyAgICAgICAgZW5zdXJlX2hhbmRsZWJveF93aWRnZXQoKTsKKyAgICAgICAgZ1Rvb2xiYXJX
aWRnZXQgPSBndGtfdG9vbGJhcl9uZXcoKTsKKyAgICAgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RL
X0NPTlRBSU5FUihnSGFuZGxlQm94V2lkZ2V0KSwgZ1Rvb2xiYXJXaWRnZXQpOworICAgICAgICBn
dGtfd2lkZ2V0X3JlYWxpemUoZ1Rvb2xiYXJXaWRnZXQpOworICAgICAgICBndGtfd2lkZ2V0X3N0
eWxlX2dldChnVG9vbGJhcldpZGdldCwgInNoYWRvd190eXBlIiwgJmdUb29sYmFyU2hhZG93VHlw
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgfQorICAgIHJldHVy
biBNT1pfR1RLX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBnaW50CitlbnN1cmVfdG9vbHRpcF93aWRn
ZXQoKQoreworICAgIGlmICghZ1Rvb2x0aXBXaWRnZXQpIHsKKyAgICAgICAgZ1Rvb2x0aXBXaWRn
ZXQgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1BPUFVQKTsKKyAgICAgICAgZ3RrX3dpZGdl
dF9yZWFsaXplKGdUb29sdGlwV2lkZ2V0KTsKKyAgICB9CisgICAgcmV0dXJuIE1PWl9HVEtfU1VD
Q0VTUzsKK30KKworc3RhdGljIGdpbnQKK2Vuc3VyZV90YWJfd2lkZ2V0KCkKK3sKKyAgICBpZiAo
IWdUYWJXaWRnZXQpIHsKKyAgICAgICAgZ1RhYldpZGdldCA9IGd0a19ub3RlYm9va19uZXcoKTsK
KyAgICAgICAgc2V0dXBfd2lkZ2V0X3Byb3RvdHlwZShnVGFiV2lkZ2V0KTsKKyAgICB9CisgICAg
cmV0dXJuIE1PWl9HVEtfU1VDQ0VTUzsKK30KKworc3RhdGljIGdpbnQKK2Vuc3VyZV9wcm9ncmVz
c193aWRnZXQoKQoreworICAgIGlmICghZ1Byb2dyZXNzV2lkZ2V0KSB7CisgICAgICAgIGdQcm9n
cmVzc1dpZGdldCA9IGd0a19wcm9ncmVzc19iYXJfbmV3KCk7CisgICAgICAgIHNldHVwX3dpZGdl
dF9wcm90b3R5cGUoZ1Byb2dyZXNzV2lkZ2V0KTsKKyAgICB9CisgICAgcmV0dXJuIE1PWl9HVEtf
U1VDQ0VTUzsKK30KKworc3RhdGljIGdpbnQKK2Vuc3VyZV9mcmFtZV93aWRnZXQoKQoreworICAg
IGlmICghZ0ZyYW1lV2lkZ2V0KSB7CisgICAgICAgIGdGcmFtZVdpZGdldCA9IGd0a19mcmFtZV9u
ZXcoTlVMTCk7CisgICAgICAgIHNldHVwX3dpZGdldF9wcm90b3R5cGUoZ0ZyYW1lV2lkZ2V0KTsK
KyAgICB9CisgICAgcmV0dXJuIE1PWl9HVEtfU1VDQ0VTUzsKK30KKworc3RhdGljIGdpbnQKK2Vu
c3VyZV9tZW51X2Jhcl93aWRnZXQoKQoreworICAgIGlmICghZ01lbnVCYXJXaWRnZXQpIHsKKyAg
ICAgICAgZ01lbnVCYXJXaWRnZXQgPSBndGtfbWVudV9iYXJfbmV3KCk7CisgICAgICAgIHNldHVw
X3dpZGdldF9wcm90b3R5cGUoZ01lbnVCYXJXaWRnZXQpOworICAgICAgIGd0a193aWRnZXRfc3R5
bGVfZ2V0KGdNZW51QmFyV2lkZ2V0LCAic2hhZG93X3R5cGUiLCAmZ01lbnVCYXJTaGFkb3dUeXBl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAgIH0KKyAgICByZXR1cm4g
TU9aX0dUS19TVUNDRVNTOworfQorCitzdGF0aWMgZ2ludAorZW5zdXJlX21lbnVfYmFyX2l0ZW1f
d2lkZ2V0KCkKK3sKKyAgICBpZiAoIWdNZW51QmFySXRlbVdpZGdldCkgeworICAgICAgICBlbnN1
cmVfbWVudV9iYXJfd2lkZ2V0KCk7CisgICAgICAgIGdNZW51QmFySXRlbVdpZGdldCA9IGd0a19t
ZW51X2l0ZW1fbmV3KCk7CisgICAgICAgIGd0a19tZW51X3NoZWxsX2FwcGVuZChHVEtfTUVOVV9T
SEVMTChnTWVudUJhcldpZGdldCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnTWVu
dUJhckl0ZW1XaWRnZXQpOworICAgICAgICBndGtfd2lkZ2V0X3JlYWxpemUoZ01lbnVCYXJJdGVt
V2lkZ2V0KTsKKyAgICB9CisgICAgcmV0dXJuIE1PWl9HVEtfU1VDQ0VTUzsKK30KKworc3RhdGlj
IGdpbnQKK2Vuc3VyZV9tZW51X3BvcHVwX3dpZGdldCgpCit7CisgICAgaWYgKCFnTWVudVBvcHVw
V2lkZ2V0KSB7CisgICAgICAgIGVuc3VyZV9tZW51X2Jhcl9pdGVtX3dpZGdldCgpOworICAgICAg
ICBnTWVudVBvcHVwV2lkZ2V0ID0gZ3RrX21lbnVfbmV3KCk7CisgICAgICAgIGd0a19tZW51X2l0
ZW1fc2V0X3N1Ym1lbnUoR1RLX01FTlVfSVRFTShnTWVudUJhckl0ZW1XaWRnZXQpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdNZW51UG9wdXBXaWRnZXQpOworICAgICAgICBn
dGtfd2lkZ2V0X3JlYWxpemUoZ01lbnVQb3B1cFdpZGdldCk7CisgICAgfQorICAgIHJldHVybiBN
T1pfR1RLX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBnaW50CitlbnN1cmVfbWVudV9pdGVtX3dpZGdl
dCgpCit7CisgICAgaWYgKCFnTWVudUl0ZW1XaWRnZXQpIHsKKyAgICAgICAgZW5zdXJlX21lbnVf
cG9wdXBfd2lkZ2V0KCk7CisgICAgICAgIGdNZW51SXRlbVdpZGdldCA9IGd0a19tZW51X2l0ZW1f
bmV3X3dpdGhfbGFiZWwoIk0iKTsKKyAgICAgICAgZ3RrX21lbnVfc2hlbGxfYXBwZW5kKEdUS19N
RU5VX1NIRUxMKGdNZW51UG9wdXBXaWRnZXQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ01lbnVJdGVtV2lkZ2V0KTsKKyAgICAgICAgZ3RrX3dpZGdldF9yZWFsaXplKGdNZW51SXRl
bVdpZGdldCk7CisgICAgfQorICAgIHJldHVybiBNT1pfR1RLX1NVQ0NFU1M7Cit9CisKK3N0YXRp
YyBnaW50CitlbnN1cmVfY2hlY2tfbWVudV9pdGVtX3dpZGdldCgpCit7CisgICAgaWYgKCFnQ2hl
Y2tNZW51SXRlbVdpZGdldCkgeworICAgICAgICBlbnN1cmVfbWVudV9wb3B1cF93aWRnZXQoKTsK
KyAgICAgICAgZ0NoZWNrTWVudUl0ZW1XaWRnZXQgPSBndGtfY2hlY2tfbWVudV9pdGVtX25ld193
aXRoX2xhYmVsKCJNIik7CisgICAgICAgIGd0a19tZW51X3NoZWxsX2FwcGVuZChHVEtfTUVOVV9T
SEVMTChnTWVudVBvcHVwV2lkZ2V0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdD
aGVja01lbnVJdGVtV2lkZ2V0KTsKKyAgICAgICAgZ3RrX3dpZGdldF9yZWFsaXplKGdDaGVja01l
bnVJdGVtV2lkZ2V0KTsKKyAgICB9CisgICAgcmV0dXJuIE1PWl9HVEtfU1VDQ0VTUzsKK30KKwor
c3RhdGljIEd0a1N0YXRlVHlwZQorQ29udmVydEd0a1N0YXRlKEd0a1dpZGdldFN0YXRlKiBzdGF0
ZSkKK3sKKyAgICBpZiAoc3RhdGUtPmRpc2FibGVkKQorICAgICAgICByZXR1cm4gR1RLX1NUQVRF
X0lOU0VOU0lUSVZFOworICAgIGVsc2UgaWYgKHN0YXRlLT5pbkhvdmVyKQorICAgICAgICByZXR1
cm4gKHN0YXRlLT5hY3RpdmUgPyBHVEtfU1RBVEVfQUNUSVZFIDogR1RLX1NUQVRFX1BSRUxJR0hU
KTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBHVEtfU1RBVEVfTk9STUFMOworfQorCitzdGF0
aWMgZ2ludAorVFNPZmZzZXRTdHlsZUdDQXJyYXkoR2RrR0MqKiBnY3MsIGdpbnQgeG9yaWdpbiwg
Z2ludCB5b3JpZ2luKQoreworICAgIGludCBpOworICAgIC8qIHRoZXJlIGFyZSA1IGdjJ3MgaW4g
ZWFjaCBhcnJheSwgZm9yIGVhY2ggb2YgdGhlIHdpZGdldCBzdGF0ZXMgKi8KKyAgICBmb3IgKGkg
PSAwOyBpIDwgNTsgKytpKQorICAgICAgICBnZGtfZ2Nfc2V0X3RzX29yaWdpbihnY3NbaV0sIHhv
cmlnaW4sIHlvcmlnaW4pOworICAgIHJldHVybiBNT1pfR1RLX1NVQ0NFU1M7Cit9CisKK3N0YXRp
YyBnaW50CitUU09mZnNldFN0eWxlR0NzKEd0a1N0eWxlKiBzdHlsZSwgZ2ludCB4b3JpZ2luLCBn
aW50IHlvcmlnaW4pCit7CisgICAgVFNPZmZzZXRTdHlsZUdDQXJyYXkoc3R5bGUtPmZnX2djLCB4
b3JpZ2luLCB5b3JpZ2luKTsKKyAgICBUU09mZnNldFN0eWxlR0NBcnJheShzdHlsZS0+YmdfZ2Ms
IHhvcmlnaW4sIHlvcmlnaW4pOworICAgIFRTT2Zmc2V0U3R5bGVHQ0FycmF5KHN0eWxlLT5saWdo
dF9nYywgeG9yaWdpbiwgeW9yaWdpbik7CisgICAgVFNPZmZzZXRTdHlsZUdDQXJyYXkoc3R5bGUt
PmRhcmtfZ2MsIHhvcmlnaW4sIHlvcmlnaW4pOworICAgIFRTT2Zmc2V0U3R5bGVHQ0FycmF5KHN0
eWxlLT5taWRfZ2MsIHhvcmlnaW4sIHlvcmlnaW4pOworICAgIFRTT2Zmc2V0U3R5bGVHQ0FycmF5
KHN0eWxlLT50ZXh0X2djLCB4b3JpZ2luLCB5b3JpZ2luKTsKKyAgICBUU09mZnNldFN0eWxlR0NB
cnJheShzdHlsZS0+YmFzZV9nYywgeG9yaWdpbiwgeW9yaWdpbik7CisgICAgZ2RrX2djX3NldF90
c19vcmlnaW4oc3R5bGUtPmJsYWNrX2djLCB4b3JpZ2luLCB5b3JpZ2luKTsKKyAgICBnZGtfZ2Nf
c2V0X3RzX29yaWdpbihzdHlsZS0+d2hpdGVfZ2MsIHhvcmlnaW4sIHlvcmlnaW4pOworICAgIHJl
dHVybiBNT1pfR1RLX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBnaW50Cittb3pfZ3RrX2J1dHRvbl9w
YWludChHZGtEcmF3YWJsZSogZHJhd2FibGUsIEdka1JlY3RhbmdsZSogcmVjdCwKKyAgICAgICAg
ICAgICAgICAgICAgIEdka1JlY3RhbmdsZSogY2xpcHJlY3QsIEd0a1dpZGdldFN0YXRlKiBzdGF0
ZSwKKyAgICAgICAgICAgICAgICAgICAgIEd0a1JlbGllZlN0eWxlIHJlbGllZiwgR3RrV2lkZ2V0
KiB3aWRnZXQpCit7CisgICAgR3RrU2hhZG93VHlwZSBzaGFkb3dfdHlwZTsKKyAgICBHdGtTdHls
ZSogc3R5bGUgPSB3aWRnZXQtPnN0eWxlOworICAgIEd0a1N0YXRlVHlwZSBidXR0b25fc3RhdGUg
PSBDb252ZXJ0R3RrU3RhdGUoc3RhdGUpOworICAgIGdpbnQgeCA9IHJlY3QtPngsIHk9cmVjdC0+
eSwgd2lkdGg9cmVjdC0+d2lkdGgsIGhlaWdodD1yZWN0LT5oZWlnaHQ7CisKKyAgICBnYm9vbGVh
biBpbnRlcmlvcl9mb2N1czsKKyAgICBnaW50IGZvY3VzX3dpZHRoLCBmb2N1c19wYWQ7CisKKyAg
ICBtb3pfZ3RrX2J1dHRvbl9nZXRfZm9jdXMoJmludGVyaW9yX2ZvY3VzLCAmZm9jdXNfd2lkdGgs
ICZmb2N1c19wYWQpOworCisgICAgaWYgKFdJTkRPV19JU19NQVBQRUQoZHJhd2FibGUpKSB7Cisg
ICAgICAgIGdka193aW5kb3dfc2V0X2JhY2tfcGl4bWFwKGRyYXdhYmxlLCBOVUxMLCBUUlVFKTsK
KyAgICAgICAgZ2RrX3dpbmRvd19jbGVhcl9hcmVhKGRyYXdhYmxlLCBjbGlwcmVjdC0+eCwgY2xp
cHJlY3QtPnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGlwcmVjdC0+d2lkdGgs
IGNsaXByZWN0LT5oZWlnaHQpOworICAgIH0KKworICAgIGd0a193aWRnZXRfc2V0X3N0YXRlKHdp
ZGdldCwgYnV0dG9uX3N0YXRlKTsKKworICAgIGlmIChzdGF0ZS0+aXNEZWZhdWx0KQorICAgICAg
ICBHVEtfV0lER0VUX1NFVF9GTEFHUyh3aWRnZXQsIEdUS19IQVNfREVGQVVMVCk7CisKKyAgICBp
ZiAoIWludGVyaW9yX2ZvY3VzICYmIHN0YXRlLT5mb2N1c2VkKSB7CisgICAgICAgIHggKz0gZm9j
dXNfd2lkdGggKyBmb2N1c19wYWQ7CisgICAgICAgIHkgKz0gZm9jdXNfd2lkdGggKyBmb2N1c19w
YWQ7CisgICAgICAgIHdpZHRoIC09IDIgKiAoZm9jdXNfd2lkdGggKyBmb2N1c19wYWQpOworICAg
ICAgICBoZWlnaHQgLT0gMiAqIChmb2N1c193aWR0aCArIGZvY3VzX3BhZCk7CisgICAgfQorCisg
ICAgc2hhZG93X3R5cGUgPSBidXR0b25fc3RhdGUgPT0gR1RLX1NUQVRFX0FDVElWRSA/IEdUS19T
SEFET1dfSU4gOiBHVEtfU0hBRE9XX09VVDsKKworICAgIGlmIChyZWxpZWYgIT0gR1RLX1JFTElF
Rl9OT05FIHx8IChidXR0b25fc3RhdGUgIT0gR1RLX1NUQVRFX05PUk1BTCAmJgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXR0b25fc3RhdGUgIT0gR1RLX1NUQVRFX0lO
U0VOU0lUSVZFKSkgeworICAgICAgICBUU09mZnNldFN0eWxlR0NzKHN0eWxlLCB4LCB5KTsKKyAg
ICAgICAgLyogdGhlIGZvbGxvd2luZyBsaW5lIGNhbiB0cmlnZ2VyIGFuIGFzc2VydGlvbiAoQ3J1
eCB0aGVtZSkKKyAgICAgICAgICAgZmlsZSAuLi8uLi9nZGsvZ2Rrd2luZG93LmM6IGxpbmUgMTg0
NiAoZ2RrX3dpbmRvd19jbGVhcl9hcmVhKToKKyAgICAgICAgICAgYXNzZXJ0aW9uIGBHREtfSVNf
V0lORE9XICh3aW5kb3cpJyBmYWlsZWQgKi8KKyAgICAgICAgZ3RrX3BhaW50X2JveChzdHlsZSwg
ZHJhd2FibGUsIGJ1dHRvbl9zdGF0ZSwgc2hhZG93X3R5cGUsIGNsaXByZWN0LAorICAgICAgICAg
ICAgICAgICAgICAgIHdpZGdldCwgImJ1dHRvbiIsIHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAg
IH0KKworICAgIGlmIChzdGF0ZS0+Zm9jdXNlZCkgeworICAgICAgICBpZiAoaW50ZXJpb3JfZm9j
dXMpIHsKKyAgICAgICAgICAgIHggKz0gd2lkZ2V0LT5zdHlsZS0+eHRoaWNrbmVzcyArIGZvY3Vz
X3BhZDsKKyAgICAgICAgICAgIHkgKz0gd2lkZ2V0LT5zdHlsZS0+eXRoaWNrbmVzcyArIGZvY3Vz
X3BhZDsKKyAgICAgICAgICAgIHdpZHRoIC09IDIgKiAod2lkZ2V0LT5zdHlsZS0+eHRoaWNrbmVz
cyArIGZvY3VzX3BhZCk7CisgICAgICAgICAgICBoZWlnaHQgLT0gMiAqICh3aWRnZXQtPnN0eWxl
LT55dGhpY2tuZXNzICsgZm9jdXNfcGFkKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IHggLT0gZm9jdXNfd2lkdGggKyBmb2N1c19wYWQ7CisgICAgICAgICAgICB5IC09IGZvY3VzX3dp
ZHRoICsgZm9jdXNfcGFkOworICAgICAgICAgICAgd2lkdGggKz0gMiAqIChmb2N1c193aWR0aCAr
IGZvY3VzX3BhZCk7CisgICAgICAgICAgICBoZWlnaHQgKz0gMiAqIChmb2N1c193aWR0aCArIGZv
Y3VzX3BhZCk7CisgICAgICAgIH0KKworICAgICAgICBUU09mZnNldFN0eWxlR0NzKHN0eWxlLCB4
LCB5KTsKKyAgICAgICAgZ3RrX3BhaW50X2ZvY3VzKHN0eWxlLCBkcmF3YWJsZSwgYnV0dG9uX3N0
YXRlLCBjbGlwcmVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpZGdldCwgImJ1dHRvbiIs
IHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgIH0KKworICAgIEdUS19XSURHRVRfVU5TRVRfRkxB
R1Mod2lkZ2V0LCBHVEtfSEFTX0RFRkFVTFQpOworICAgIHJldHVybiBNT1pfR1RLX1NVQ0NFU1M7
Cit9CisKK2dpbnQKK21vel9ndGtfaW5pdCgpCit7CisgICAgaXNfaW5pdGlhbGl6ZWQgPSBUUlVF
OworICAgIGhhdmVfbWVudV9zaGFkb3dfdHlwZSA9CisgICAgICAgIChndGtfbWFqb3JfdmVyc2lv
biA+IDIgfHwKKyAgICAgICAgIChndGtfbWFqb3JfdmVyc2lvbiA9PSAyICYmIGd0a19taW5vcl92
ZXJzaW9uID49IDEpKTsKKworICAgIHJldHVybiBNT1pfR1RLX1NVQ0NFU1M7Cit9CisKK2dpbnQK
K21vel9ndGtfY2hlY2tib3hfZ2V0X21ldHJpY3MoZ2ludCogaW5kaWNhdG9yX3NpemUsIGdpbnQq
IGluZGljYXRvcl9zcGFjaW5nKQoreworICAgIGVuc3VyZV9jaGVja2JveF93aWRnZXQoKTsKKwor
ICAgIGd0a193aWRnZXRfc3R5bGVfZ2V0IChnQ2hlY2tib3hXaWRnZXQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICJpbmRpY2F0b3Jfc2l6ZSIsIGluZGljYXRvcl9zaXplLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAiaW5kaWNhdG9yX3NwYWNpbmciLCBpbmRpY2F0b3Jfc3BhY2luZywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAgICByZXR1cm4gTU9aX0dUS19T
VUNDRVNTOworfQorCitnaW50Cittb3pfZ3RrX3JhZGlvX2dldF9tZXRyaWNzKGdpbnQqIGluZGlj
YXRvcl9zaXplLCBnaW50KiBpbmRpY2F0b3Jfc3BhY2luZykKK3sKKyAgICBlbnN1cmVfcmFkaW9i
dXR0b25fd2lkZ2V0KCk7CisKKyAgICBndGtfd2lkZ2V0X3N0eWxlX2dldCAoZ1JhZGlvYnV0dG9u
V2lkZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5kaWNhdG9yX3NpemUiLCBpbmRp
Y2F0b3Jfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImluZGljYXRvcl9zcGFjaW5n
IiwgaW5kaWNhdG9yX3NwYWNpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwor
CisgICAgcmV0dXJuIE1PWl9HVEtfU1VDQ0VTUzsKK30KKworZ2ludAorbW96X2d0a19jaGVja2Jv
eF9nZXRfZm9jdXMoZ2Jvb2xlYW4qIGludGVyaW9yX2ZvY3VzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ2ludCogZm9jdXNfd2lkdGgsIGdpbnQqIGZvY3VzX3BhZCkKK3sKKyAgICBlbnN1
cmVfY2hlY2tib3hfd2lkZ2V0KCk7CisKKyAgICBndGtfd2lkZ2V0X3N0eWxlX2dldCAoZ0NoZWNr
Ym94V2lkZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAiaW50ZXJpb3ItZm9jdXMiLCBp
bnRlcmlvcl9mb2N1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImZvY3VzLWxpbmUtd2lk
dGgiLCBmb2N1c193aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImZvY3VzLXBhZGRp
bmciLCBmb2N1c19wYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworCisgICAg
cmV0dXJuIE1PWl9HVEtfU1VDQ0VTUzsKK30KKworZ2ludAorbW96X2d0a19yYWRpb19nZXRfZm9j
dXMoZ2Jvb2xlYW4qIGludGVyaW9yX2ZvY3VzLAorICAgICAgICAgICAgICAgICAgICAgICAgZ2lu
dCogZm9jdXNfd2lkdGgsIGdpbnQqIGZvY3VzX3BhZCkKK3sKKyAgICBlbnN1cmVfcmFkaW9idXR0
b25fd2lkZ2V0KCk7CisKKyAgICBndGtfd2lkZ2V0X3N0eWxlX2dldCAoZ1JhZGlvYnV0dG9uV2lk
Z2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAiaW50ZXJpb3ItZm9jdXMiLCBpbnRlcmlv
cl9mb2N1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImZvY3VzLWxpbmUtd2lkdGgiLCBm
b2N1c193aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImZvY3VzLXBhZGRpbmciLCBm
b2N1c19wYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworCisgICAgcmV0dXJu
IE1PWl9HVEtfU1VDQ0VTUzsKK30KKworZ2ludAorbW96X2d0a19idXR0b25fZ2V0X2ZvY3VzKGdi
b29sZWFuKiBpbnRlcmlvcl9mb2N1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICBnaW50KiBm
b2N1c193aWR0aCwgZ2ludCogZm9jdXNfcGFkKQoreworICAgIGVuc3VyZV9idXR0b25fd2lkZ2V0
KCk7CisKKyAgICBndGtfd2lkZ2V0X3N0eWxlX2dldCAoZ0J1dHRvbldpZGdldCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgImludGVyaW9yLWZvY3VzIiwgaW50ZXJpb3JfZm9jdXMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICJmb2N1cy1saW5lLXdpZHRoIiwgZm9jdXNfd2lkdGgsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICJmb2N1cy1wYWRkaW5nIiwgZm9jdXNfcGFkLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKworICAgIHJldHVybiBNT1pfR1RLX1NVQ0NF
U1M7Cit9CisKK3N0YXRpYyBnaW50Cittb3pfZ3RrX29wdGlvbl9tZW51X2dldF9tZXRyaWNzKGdi
b29sZWFuKiBpbnRlcmlvcl9mb2N1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R3RrUmVxdWlzaXRpb24qIGluZGljYXRvcl9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHdGtCb3JkZXIqIGluZGljYXRvcl9zcGFjaW5nLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnaW50KiBmb2N1c193aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ2ludCogZm9jdXNfcGFkKQoreworICAgIHN0YXRpYyBjb25zdCBHdGtSZXF1aXNp
dGlvbiBkZWZhdWx0X2luZGljYXRvcl9zaXplID0geyA3LCAxMyB9OworICAgIHN0YXRpYyBjb25z
dCBHdGtCb3JkZXIgZGVmYXVsdF9pbmRpY2F0b3Jfc3BhY2luZyA9IHsgNywgNSwgMiwgMiB9Owor
ICAgIC8qIHRoZXNlIGRlZmF1bHQgdmFsdWVzIGFyZSBub3QgdXNlZCBpbiBndGtvcHRpb25tZW51
LmMKKyAgICBzdGF0aWMgY29uc3QgZ2Jvb2xlYW4gZGVmYXVsdF9pbnRlcmlvcl9mb2N1cyA9IFRS
VUU7CisgICAgc3RhdGljIGNvbnN0IGdpbnQgZGVmYXVsdF9mb2N1c193aWR0aCA9IDE7CisgICAg
c3RhdGljIGNvbnN0IGdpbnQgZGVmYXVsdF9mb2N1c19wYWQgPSAwOyAqLworICAgIEd0a1JlcXVp
c2l0aW9uICp0bXBfaW5kaWNhdG9yX3NpemU7CisgICAgR3RrQm9yZGVyICp0bXBfaW5kaWNhdG9y
X3NwYWNpbmc7CisKKyAgICBndGtfd2lkZ2V0X3N0eWxlX2dldChnT3B0aW9uTWVudVdpZGdldCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAiaW50ZXJpb3JfZm9jdXMiLCBpbnRlcmlvcl9mb2N1
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAiaW5kaWNhdG9yX3NpemUiLCAmdG1wX2luZGlj
YXRvcl9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICJpbmRpY2F0b3Jfc3BhY2luZyIs
ICZ0bXBfaW5kaWNhdG9yX3NwYWNpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgImZvY3Vz
X2xpbmVfd2lkdGgiLCBmb2N1c193aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZm9j
dXNfcGFkZGluZyIsIGZvY3VzX3BhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsK
KworICAgIGlmICh0bXBfaW5kaWNhdG9yX3NpemUpCisgICAgICAgICppbmRpY2F0b3Jfc2l6ZSA9
ICp0bXBfaW5kaWNhdG9yX3NpemU7CisgICAgZWxzZQorICAgICAgICAqaW5kaWNhdG9yX3NpemUg
PSBkZWZhdWx0X2luZGljYXRvcl9zaXplOworICAgIGlmICh0bXBfaW5kaWNhdG9yX3NwYWNpbmcp
CisgICAgICAgICppbmRpY2F0b3Jfc3BhY2luZyA9ICp0bXBfaW5kaWNhdG9yX3NwYWNpbmc7Cisg
ICAgZWxzZQorICAgICAgICAqaW5kaWNhdG9yX3NwYWNpbmcgPSBkZWZhdWx0X2luZGljYXRvcl9z
cGFjaW5nOworCisgICAgZ3RrX3JlcXVpc2l0aW9uX2ZyZWUodG1wX2luZGljYXRvcl9zaXplKTsK
KyAgICBndGtfYm9yZGVyX2ZyZWUodG1wX2luZGljYXRvcl9zcGFjaW5nKTsKKyAKKyAgICByZXR1
cm4gTU9aX0dUS19TVUNDRVNTOworfQorCitzdGF0aWMgZ2ludAorbW96X2d0a190b2dnbGVfcGFp
bnQoR2RrRHJhd2FibGUqIGRyYXdhYmxlLCBHZGtSZWN0YW5nbGUqIHJlY3QsCisgICAgICAgICAg
ICAgICAgICAgICBHZGtSZWN0YW5nbGUqIGNsaXByZWN0LCBHdGtXaWRnZXRTdGF0ZSogc3RhdGUs
CisgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiBzZWxlY3RlZCwgZ2Jvb2xlYW4gaXNyYWRp
bykKK3sKKyAgICBHdGtTdGF0ZVR5cGUgc3RhdGVfdHlwZSA9IENvbnZlcnRHdGtTdGF0ZShzdGF0
ZSk7CisgICAgR3RrU2hhZG93VHlwZSBzaGFkb3dfdHlwZSA9IChzZWxlY3RlZCk/R1RLX1NIQURP
V19JTjpHVEtfU0hBRE9XX09VVDsKKyAgICBnaW50IGluZGljYXRvcl9zaXplLCBpbmRpY2F0b3Jf
c3BhY2luZzsKKyAgICBnaW50IHgsIHksIHdpZHRoLCBoZWlnaHQ7CisgICAgR3RrV2lkZ2V0ICp3
OworICAgIEd0a1N0eWxlICpzdHlsZTsKKworICAgIGlmIChpc3JhZGlvKSB7CisgICAgICAgIG1v
el9ndGtfcmFkaW9fZ2V0X21ldHJpY3MoJmluZGljYXRvcl9zaXplLCAmaW5kaWNhdG9yX3NwYWNp
bmcpOworICAgICAgICB3ID0gZ1JhZGlvYnV0dG9uV2lkZ2V0OworICAgIH0gZWxzZSB7CisgICAg
ICAgIG1vel9ndGtfY2hlY2tib3hfZ2V0X21ldHJpY3MoJmluZGljYXRvcl9zaXplLCAmaW5kaWNh
dG9yX3NwYWNpbmcpOworICAgICAgICB3ID0gZ0NoZWNrYm94V2lkZ2V0OworICAgIH0KKworICAg
IC8qIG9mZnNldCBieSBpbmRpY2F0b3Jfc3BhY2luZywgYW5kIGNlbnRlcmVkIHZlcnRpY2FsbHkg
d2l0aGluIHRoZSByZWN0ICovCisgICAgeCA9IHJlY3QtPnggKyBpbmRpY2F0b3Jfc3BhY2luZzsK
KyAgICB5ID0gcmVjdC0+eSArIChyZWN0LT5oZWlnaHQgLSBpbmRpY2F0b3Jfc2l6ZSkgLyAyOwor
ICAgIHdpZHRoID0gaW5kaWNhdG9yX3NpemU7CisgICAgaGVpZ2h0ID0gaW5kaWNhdG9yX3NpemU7
CisgIAorICAgIHN0eWxlID0gdy0+c3R5bGU7CisgICAgVFNPZmZzZXRTdHlsZUdDcyhzdHlsZSwg
eCwgeSk7CisKKyAgICBndGtfd2lkZ2V0X3NldF9zZW5zaXRpdmUodywgIXN0YXRlLT5kaXNhYmxl
ZCk7CisgICAgR1RLX1RPR0dMRV9CVVRUT04odyktPmFjdGl2ZSA9IHNlbGVjdGVkOworICAgICAg
CisgICAgaWYgKGlzcmFkaW8pIHsKKyAgICAgICAgZ3RrX3BhaW50X29wdGlvbihzdHlsZSwgZHJh
d2FibGUsIHN0YXRlX3R5cGUsIHNoYWRvd190eXBlLCBjbGlwcmVjdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICBnUmFkaW9idXR0b25XaWRnZXQsICJyYWRpb2J1dHRvbiIsIHgsIHksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgd2lkdGgsIGhlaWdodCk7CisgICAgICAgIGlmIChzdGF0ZS0+
Zm9jdXNlZCkgeworICAgICAgICAgICAgZ3RrX3BhaW50X2ZvY3VzKHN0eWxlLCBkcmF3YWJsZSwg
R1RLX1NUQVRFX0FDVElWRSwgY2xpcHJlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z1JhZGlvYnV0dG9uV2lkZ2V0LCAicmFkaW9idXR0b24iLCByZWN0LT54LCByZWN0LT55LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QtPndpZHRoLCByZWN0LT5oZWlnaHQpOworICAg
ICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBndGtfcGFpbnRfY2hlY2soc3R5bGUs
IGRyYXdhYmxlLCBzdGF0ZV90eXBlLCBzaGFkb3dfdHlwZSwgY2xpcHJlY3QsIAorICAgICAgICAg
ICAgICAgICAgICAgICAgZ0NoZWNrYm94V2lkZ2V0LCAiY2hlY2tidXR0b24iLCB4LCB5LCB3aWR0
aCwgaGVpZ2h0KTsKKyAgICAgICAgaWYgKHN0YXRlLT5mb2N1c2VkKSB7CisgICAgICAgICAgICBn
dGtfcGFpbnRfZm9jdXMoc3R5bGUsIGRyYXdhYmxlLCBHVEtfU1RBVEVfQUNUSVZFLCBjbGlwcmVj
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnQ2hlY2tib3hXaWRnZXQsICJjaGVja2J1
dHRvbiIsIHJlY3QtPngsIHJlY3QtPnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVj
dC0+d2lkdGgsIHJlY3QtPmhlaWdodCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4g
TU9aX0dUS19TVUNDRVNTOworfQorCitzdGF0aWMgZ2ludAorY2FsY3VsYXRlX2Fycm93X2RpbWVu
c2lvbnMoR2RrUmVjdGFuZ2xlKiByZWN0LCBHZGtSZWN0YW5nbGUqIGFycm93X3JlY3QpCit7Cisg
ICAgR3RrTWlzYyogbWlzYyA9IEdUS19NSVNDKGdBcnJvd1dpZGdldCk7CisKKyAgICBnaW50IGV4
dGVudCA9IE1JTihyZWN0LT53aWR0aCAtIG1pc2MtPnhwYWQgKiAyLAorICAgICAgICAgICAgICAg
ICAgICAgIHJlY3QtPmhlaWdodCAtIG1pc2MtPnlwYWQgKiAyKTsKKworICAgIGFycm93X3JlY3Qt
PnggPSAoKHJlY3QtPnggKyBtaXNjLT54cGFkKSAqICgxLjAgLSBtaXNjLT54YWxpZ24pICsKKyAg
ICAgICAgICAgICAgICAgICAgIChyZWN0LT54ICsgcmVjdC0+d2lkdGggLSBleHRlbnQgLSBtaXNj
LT54cGFkKSAqCisgICAgICAgICAgICAgICAgICAgICBtaXNjLT54YWxpZ24pOworCisgICAgYXJy
b3dfcmVjdC0+eSA9ICgocmVjdC0+eSArIG1pc2MtPnlwYWQpICogKDEuMCAtIG1pc2MtPnlhbGln
bikgKworICAgICAgICAgICAgICAgICAgICAgKHJlY3QtPnkgKyByZWN0LT5oZWlnaHQgLSBleHRl
bnQgLSBtaXNjLT55cGFkKSAqCisgICAgICAgICAgICAgICAgICAgICBtaXNjLT55YWxpZ24pOwor
CisgICAgYXJyb3dfcmVjdC0+d2lkdGggPSBhcnJvd19yZWN0LT5oZWlnaHQgPSBleHRlbnQ7CisK
KyAgICByZXR1cm4gTU9aX0dUS19TVUNDRVNTOworfQorCitzdGF0aWMgZ2ludAorbW96X2d0a19z
Y3JvbGxiYXJfYnV0dG9uX3BhaW50KEdka0RyYXdhYmxlKiBkcmF3YWJsZSwgR2RrUmVjdGFuZ2xl
KiByZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdka1JlY3RhbmdsZSogY2xp
cHJlY3QsIEd0a1dpZGdldFN0YXRlKiBzdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHdGtBcnJvd1R5cGUgdHlwZSkKK3sKKyAgICBHdGtTdGF0ZVR5cGUgc3RhdGVfdHlwZSA9
IENvbnZlcnRHdGtTdGF0ZShzdGF0ZSk7CisgICAgR3RrU2hhZG93VHlwZSBzaGFkb3dfdHlwZSA9
IChzdGF0ZS0+YWN0aXZlKSA/CisgICAgICAgIEdUS19TSEFET1dfSU4gOiBHVEtfU0hBRE9XX09V
VDsKKyAgICBHZGtSZWN0YW5nbGUgYnV0dG9uX3JlY3Q7CisgICAgR2RrUmVjdGFuZ2xlIGFycm93
X3JlY3Q7CisgICAgR3RrU3R5bGUqIHN0eWxlOworICAgIEd0a0FkanVzdG1lbnQgKmFkajsKKyAg
ICBHdGtTY3JvbGxiYXIgKnNjcm9sbGJhcjsKKworICAgIGVuc3VyZV9zY3JvbGxiYXJfd2lkZ2V0
KCk7CisKKyAgICBpZiAodHlwZSA8IDIpCisgICAgICAgIHNjcm9sbGJhciA9IEdUS19TQ1JPTExC
QVIoZ1ZlcnRTY3JvbGxiYXJXaWRnZXQpOworICAgIGVsc2UKKyAgICAgICAgc2Nyb2xsYmFyID0g
R1RLX1NDUk9MTEJBUihnSG9yaXpTY3JvbGxiYXJXaWRnZXQpOworCisgICAgLyogU29tZSB0aGVt
ZSBlbmdpbmVzIChpLmUuLCBDbGVhckxvb2tzKSBjaGVjayB0aGUgc2Nyb2xsYmFyJ3MgYWxsb2Nh
dGlvbgorICAgICAgIHRvIGRldGVybWluZSB3aGVyZSBpdCBzaG91bGQgcGFpbnQgcm91bmRlZCBj
b3JuZXJzIG9uIHRoZSBidXR0b25zLgorICAgICAgIFdlIG5lZWQgdG8gdHJpY2sgdGhlbSBpbnRv
IGRyYXdpbmcgdGhlIGJ1dHRvbnMgdGhlIHdheSB3ZSB3YW50IHRoZW0uICovCisKKyAgICBHVEtf
V0lER0VUKHNjcm9sbGJhciktPmFsbG9jYXRpb24ueCA9IHJlY3QtPng7CisgICAgR1RLX1dJREdF
VChzY3JvbGxiYXIpLT5hbGxvY2F0aW9uLnkgPSByZWN0LT55OworICAgIEdUS19XSURHRVQoc2Ny
b2xsYmFyKS0+YWxsb2NhdGlvbi53aWR0aCA9IHJlY3QtPndpZHRoOworICAgIEdUS19XSURHRVQo
c2Nyb2xsYmFyKS0+YWxsb2NhdGlvbi5oZWlnaHQgPSByZWN0LT5oZWlnaHQ7CisKKyAgICBpZiAo
dHlwZSA8IDIpIHsKKyAgICAgICAgR1RLX1dJREdFVChzY3JvbGxiYXIpLT5hbGxvY2F0aW9uLmhl
aWdodCAqPSAzOworICAgICAgICBpZiAodHlwZSA9PSBHVEtfQVJST1dfRE9XTikKKyAgICAgICAg
ICAgIEdUS19XSURHRVQoc2Nyb2xsYmFyKS0+YWxsb2NhdGlvbi55IC09IDIgKiByZWN0LT5oZWln
aHQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgR1RLX1dJREdFVChzY3JvbGxiYXIpLT5hbGxvY2F0
aW9uLndpZHRoICo9IDM7CisgICAgICAgIGlmICh0eXBlID09IEdUS19BUlJPV19SSUdIVCkKKyAg
ICAgICAgICAgIEdUS19XSURHRVQoc2Nyb2xsYmFyKS0+YWxsb2NhdGlvbi54IC09IDIgKiByZWN0
LT53aWR0aDsKKyAgICB9CisKKyAgICBzdHlsZSA9IEdUS19XSURHRVQoc2Nyb2xsYmFyKS0+c3R5
bGU7CisKKyAgICBlbnN1cmVfYXJyb3dfd2lkZ2V0KCk7CisgIAorICAgIGNhbGN1bGF0ZV9hcnJv
d19kaW1lbnNpb25zKHJlY3QsICZidXR0b25fcmVjdCk7CisgICAgVFNPZmZzZXRTdHlsZUdDcyhz
dHlsZSwgYnV0dG9uX3JlY3QueCwgYnV0dG9uX3JlY3QueSk7CisKKyAgICBndGtfcGFpbnRfYm94
KHN0eWxlLCBkcmF3YWJsZSwgc3RhdGVfdHlwZSwgc2hhZG93X3R5cGUsIGNsaXByZWN0LAorICAg
ICAgICAgICAgICAgICAgR1RLX1dJREdFVChzY3JvbGxiYXIpLAorICAgICAgICAgICAgICAgICAg
KHR5cGUgPCAyKSA/ICJ2c2Nyb2xsYmFyIiA6ICJoc2Nyb2xsYmFyIiwKKyAgICAgICAgICAgICAg
ICAgIGJ1dHRvbl9yZWN0LngsIGJ1dHRvbl9yZWN0LnksIGJ1dHRvbl9yZWN0LndpZHRoLAorICAg
ICAgICAgICAgICAgICAgYnV0dG9uX3JlY3QuaGVpZ2h0KTsKKworICAgIGFycm93X3JlY3Qud2lk
dGggPSBidXR0b25fcmVjdC53aWR0aCAvIDI7CisgICAgYXJyb3dfcmVjdC5oZWlnaHQgPSBidXR0
b25fcmVjdC5oZWlnaHQgLyAyOworICAgIGFycm93X3JlY3QueCA9IGJ1dHRvbl9yZWN0LnggKyAo
YnV0dG9uX3JlY3Qud2lkdGggLSBhcnJvd19yZWN0LndpZHRoKSAvIDI7CisgICAgYXJyb3dfcmVj
dC55ID0gYnV0dG9uX3JlY3QueSArCisgICAgICAgIChidXR0b25fcmVjdC5oZWlnaHQgLSBhcnJv
d19yZWN0LmhlaWdodCkgLyAyOyAgCisKKyAgICBndGtfcGFpbnRfYXJyb3coc3R5bGUsIGRyYXdh
YmxlLCBzdGF0ZV90eXBlLCBzaGFkb3dfdHlwZSwgY2xpcHJlY3QsCisgICAgICAgICAgICAgICAg
ICAgIEdUS19XSURHRVQoc2Nyb2xsYmFyKSwgKHR5cGUgPCAyKSA/CisgICAgICAgICAgICAgICAg
ICAgICJ2c2Nyb2xsYmFyIiA6ICJoc2Nyb2xsYmFyIiwgCisgICAgICAgICAgICAgICAgICAgIHR5
cGUsIFRSVUUsIGFycm93X3JlY3QueCwgYXJyb3dfcmVjdC55LCBhcnJvd19yZWN0LndpZHRoLAor
ICAgICAgICAgICAgICAgICAgICBhcnJvd19yZWN0LmhlaWdodCk7CisKKyAgICByZXR1cm4gTU9a
X0dUS19TVUNDRVNTOworfQorCitzdGF0aWMgZ2ludAorbW96X2d0a19zY3JvbGxiYXJfdHJvdWdo
X3BhaW50KEd0a1RoZW1lV2lkZ2V0VHlwZSB3aWRnZXQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR2RrRHJhd2FibGUqIGRyYXdhYmxlLCBHZGtSZWN0YW5nbGUqIHJlY3QsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR2RrUmVjdGFuZ2xlKiBjbGlwcmVjdCwgR3RrV2lk
Z2V0U3RhdGUqIHN0YXRlKQoreworICAgIEd0a1N0eWxlKiBzdHlsZTsKKyAgICBHdGtTY3JvbGxi
YXIgKnNjcm9sbGJhcjsKKworICAgIGVuc3VyZV9zY3JvbGxiYXJfd2lkZ2V0KCk7CisKKyAgICBp
ZiAod2lkZ2V0ID09ICBNT1pfR1RLX1NDUk9MTEJBUl9UUkFDS19IT1JJWk9OVEFMKQorICAgICAg
ICBzY3JvbGxiYXIgPSBHVEtfU0NST0xMQkFSKGdIb3JpelNjcm9sbGJhcldpZGdldCk7CisgICAg
ZWxzZQorICAgICAgICBzY3JvbGxiYXIgPSBHVEtfU0NST0xMQkFSKGdWZXJ0U2Nyb2xsYmFyV2lk
Z2V0KTsKKworICAgIHN0eWxlID0gR1RLX1dJREdFVChzY3JvbGxiYXIpLT5zdHlsZTsKKworICAg
IFRTT2Zmc2V0U3R5bGVHQ3Moc3R5bGUsIHJlY3QtPngsIHJlY3QtPnkpOworICAgIGd0a19zdHls
ZV9hcHBseV9kZWZhdWx0X2JhY2tncm91bmQoc3R5bGUsIGRyYXdhYmxlLCBUUlVFLCBHVEtfU1RB
VEVfQUNUSVZFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHJl
Y3QsIHJlY3QtPngsIHJlY3QtPnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZWN0LT53aWR0aCwgcmVjdC0+aGVpZ2h0KTsKKworICAgIGd0a19wYWludF9ib3goc3R5
bGUsIGRyYXdhYmxlLCBHVEtfU1RBVEVfQUNUSVZFLCBHVEtfU0hBRE9XX0lOLCBjbGlwcmVjdCwK
KyAgICAgICAgICAgICAgICAgIEdUS19XSURHRVQoc2Nyb2xsYmFyKSwgInRyb3VnaCIsIHJlY3Qt
PngsIHJlY3QtPnksCisgICAgICAgICAgICAgICAgICByZWN0LT53aWR0aCwgcmVjdC0+aGVpZ2h0
KTsKKworICAgIGlmIChzdGF0ZS0+Zm9jdXNlZCkgeworICAgICAgICBndGtfcGFpbnRfZm9jdXMo
c3R5bGUsIGRyYXdhYmxlLCBHVEtfU1RBVEVfQUNUSVZFLCBjbGlwcmVjdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIEdUS19XSURHRVQoc2Nyb2xsYmFyKSwgInRyb3VnaCIsCisgICAgICAgICAg
ICAgICAgICAgICAgICByZWN0LT54LCByZWN0LT55LCByZWN0LT53aWR0aCwgcmVjdC0+aGVpZ2h0
KTsKKyAgICB9CisKKyAgICByZXR1cm4gTU9aX0dUS19TVUNDRVNTOworfQorCitzdGF0aWMgZ2lu
dAorbW96X2d0a19zY3JvbGxiYXJfdGh1bWJfcGFpbnQoR3RrVGhlbWVXaWRnZXRUeXBlIHdpZGdl
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdka0RyYXdhYmxlKiBkcmF3YWJsZSwg
R2RrUmVjdGFuZ2xlKiByZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2RrUmVj
dGFuZ2xlKiBjbGlwcmVjdCwgR3RrV2lkZ2V0U3RhdGUqIHN0YXRlKQoreworICAgIEd0a1N0YXRl
VHlwZSBzdGF0ZV90eXBlID0gKHN0YXRlLT5pbkhvdmVyIHx8IHN0YXRlLT5hY3RpdmUpID8KKyAg
ICAgICAgR1RLX1NUQVRFX1BSRUxJR0hUIDogR1RLX1NUQVRFX05PUk1BTDsKKyAgICBHdGtTdHls
ZSogc3R5bGU7CisgICAgR3RrU2Nyb2xsYmFyICpzY3JvbGxiYXI7CisgICAgR3RrQWRqdXN0bWVu
dCAqYWRqOworCisgICAgZW5zdXJlX3Njcm9sbGJhcl93aWRnZXQoKTsKKworICAgIGlmICh3aWRn
ZXQgPT0gTU9aX0dUS19TQ1JPTExCQVJfVEhVTUJfSE9SSVpPTlRBTCkKKyAgICAgICAgc2Nyb2xs
YmFyID0gR1RLX1NDUk9MTEJBUihnSG9yaXpTY3JvbGxiYXJXaWRnZXQpOworICAgIGVsc2UKKyAg
ICAgICAgc2Nyb2xsYmFyID0gR1RLX1NDUk9MTEJBUihnVmVydFNjcm9sbGJhcldpZGdldCk7CisK
KyAgICAvKiBNYWtlIHN1cmUgdG8gc2V0IHRoZSBzY3JvbGxiYXIgcmFuZ2UgYmVmb3JlIHBhaW50
aW5nIHNvIHRoYXQKKyAgICAgICBldmVyeXRoaW5nIGlzIGRyYXduIHByb3Blcmx5LiAgQXQgbGVh
c3QgdGhlIGJsdWVjdXJ2ZSAoYW5kCisgICAgICAgbWF5YmUgb3RoZXIpIHRoZW1lcyBkb24ndCBk
cmF3IHRoZSB0b3Agb3IgYm90dG9tIGJsYWNrIGxpbmUKKyAgICAgICBzdXJyb3VuZGluZyB0aGUg
c2Nyb2xsYmFyIGlmIHRoZSB0aGVtZSB0aGlua3MgdGhhdCBpdCdzIGJ1dHRlZAorICAgICAgIHVw
IGFnYWluc3QgdGhlIHNjcm9sbGJhciBhcnJvd3MuICBOb3RlIHRoZSBpbmNyZWFzZXMgb2YgdGhl
CisgICAgICAgY2xpcCByZWN0IGJlbG93LiAqLworICAgIC8qIENoYW5naW5nIHRoZSBjbGlwcmVj
dCBpcyBwcmV0dHkgYm9ndXMuIFRoaXMgbGV0cyB0aGVtZXMgZHJhdworICAgICAgIG91dHNpZGUg
dGhlIGZyYW1lLCB3aGljaCBtZWFucyB3ZSBkb24ndCBpbnZhbGlkYXRlIHRoZW0KKyAgICAgICBj
b3JyZWN0bHkuIFNlZSBidWcgMjk3NTA4LiBCdXQgc29tZSB0aGVtZXMgZG8gc2VlbSB0byBuZWVk
CisgICAgICAgaXQuIFNvIHdlIG1vZGlmeSB0aGUgZnJhbWUncyBvdmVyZmxvdyBhcmVhIHRvIGFj
Y291bnQgZm9yIHdoYXQKKyAgICAgICB3ZSdyZSBkb2luZyBoZXJlOyBzZWUgbnNOYXRpdmVUaGVt
ZUdUSzo6R2V0V2lkZ2V0T3ZlcmZsb3cuICovCisgICAgYWRqID0gZ3RrX3JhbmdlX2dldF9hZGp1
c3RtZW50KEdUS19SQU5HRShzY3JvbGxiYXIpKTsKKworICAgIGlmICh3aWRnZXQgPT0gTU9aX0dU
S19TQ1JPTExCQVJfVEhVTUJfSE9SSVpPTlRBTCkgeworICAgICAgICBjbGlwcmVjdC0+eCAtPSAx
OworICAgICAgICBjbGlwcmVjdC0+d2lkdGggKz0gMjsKKyAgICAgICAgYWRqLT5wYWdlX3NpemUg
PSByZWN0LT53aWR0aDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGNsaXByZWN0LT55IC09
IDE7CisgICAgICAgIGNsaXByZWN0LT5oZWlnaHQgKz0gMjsKKyAgICAgICAgYWRqLT5wYWdlX3Np
emUgPSByZWN0LT5oZWlnaHQ7CisgICAgfQorCisgICAgYWRqLT5sb3dlciA9IDA7CisgICAgYWRq
LT52YWx1ZSA9IHN0YXRlLT5jdXJwb3M7CisgICAgYWRqLT51cHBlciA9IHN0YXRlLT5tYXhwb3M7
CisgICAgZ3RrX2FkanVzdG1lbnRfY2hhbmdlZChhZGopOworCisgICAgc3R5bGUgPSBHVEtfV0lE
R0VUKHNjcm9sbGJhciktPnN0eWxlOworCisgICAgVFNPZmZzZXRTdHlsZUdDcyhzdHlsZSwgcmVj
dC0+eCwgcmVjdC0+eSk7CisKKyAgICBndGtfcGFpbnRfc2xpZGVyKHN0eWxlLCBkcmF3YWJsZSwg
c3RhdGVfdHlwZSwgR1RLX1NIQURPV19PVVQsIGNsaXByZWN0LAorICAgICAgICAgICAgICAgICAg
ICAgR1RLX1dJREdFVChzY3JvbGxiYXIpLCAic2xpZGVyIiwgcmVjdC0+eCwgcmVjdC0+eSwKKyAg
ICAgICAgICAgICAgICAgICAgIHJlY3QtPndpZHRoLCAgcmVjdC0+aGVpZ2h0LAorICAgICAgICAg
ICAgICAgICAgICAgKHdpZGdldCA9PSBNT1pfR1RLX1NDUk9MTEJBUl9USFVNQl9IT1JJWk9OVEFM
KSA/CisgICAgICAgICAgICAgICAgICAgICBHVEtfT1JJRU5UQVRJT05fSE9SSVpPTlRBTCA6IEdU
S19PUklFTlRBVElPTl9WRVJUSUNBTCk7CisKKyAgICByZXR1cm4gTU9aX0dUS19TVUNDRVNTOwor
fQorCitzdGF0aWMgZ2ludAorbW96X2d0a19zcGluX3BhaW50KEdka0RyYXdhYmxlKiBkcmF3YWJs
ZSwgR2RrUmVjdGFuZ2xlKiByZWN0LCBnYm9vbGVhbiBpc0Rvd24sCisgICAgICAgICAgICAgICAg
ICAgR3RrV2lkZ2V0U3RhdGUqIHN0YXRlKQoreworICAgIEdka1JlY3RhbmdsZSBhcnJvd19yZWN0
OworICAgIEd0a1N0YXRlVHlwZSBzdGF0ZV90eXBlID0gQ29udmVydEd0a1N0YXRlKHN0YXRlKTsK
KyAgICBHdGtTaGFkb3dUeXBlIHNoYWRvd190eXBlID0gc3RhdGVfdHlwZSA9PSBHVEtfU1RBVEVf
QUNUSVZFID8gR1RLX1NIQURPV19JTiA6IEdUS19TSEFET1dfT1VUOworICAgIEd0a1N0eWxlKiBz
dHlsZTsKKworICAgIGVuc3VyZV9zcGluX3dpZGdldCgpOworICAgIHN0eWxlID0gZ1NwaW5XaWRn
ZXQtPnN0eWxlOworCisgICAgVFNPZmZzZXRTdHlsZUdDcyhzdHlsZSwgcmVjdC0+eCwgcmVjdC0+
eSk7CisgICAgZ3RrX3BhaW50X2JveChzdHlsZSwgZHJhd2FibGUsIHN0YXRlX3R5cGUsIHNoYWRv
d190eXBlLCBOVUxMLCBnU3BpbldpZGdldCwKKyAgICAgICAgICAgICAgICAgIGlzRG93biA/ICJz
cGluYnV0dG9uX2Rvd24iIDogInNwaW5idXR0b25fdXAiLAorICAgICAgICAgICAgICAgICAgcmVj
dC0+eCwgcmVjdC0+eSwgcmVjdC0+d2lkdGgsIHJlY3QtPmhlaWdodCk7CisKKyAgICAvKiBoYXJk
IGNvZGUgdGhlc2UgdmFsdWVzICovCisgICAgYXJyb3dfcmVjdC53aWR0aCA9IDY7CisgICAgYXJy
b3dfcmVjdC5oZWlnaHQgPSA2OworICAgIGFycm93X3JlY3QueCA9IHJlY3QtPnggKyAocmVjdC0+
d2lkdGggLSBhcnJvd19yZWN0LndpZHRoKSAvIDI7CisgICAgYXJyb3dfcmVjdC55ID0gcmVjdC0+
eSArIChyZWN0LT5oZWlnaHQgLSBhcnJvd19yZWN0LmhlaWdodCkgLyAyOworICAgIGFycm93X3Jl
Y3QueSArPSBpc0Rvd24gPyAtMSA6IDE7CisKKyAgICBndGtfcGFpbnRfYXJyb3coc3R5bGUsIGRy
YXdhYmxlLCBzdGF0ZV90eXBlLCBzaGFkb3dfdHlwZSwgTlVMTCwKKyAgICAgICAgICAgICAgICAg
ICAgZ1NwaW5XaWRnZXQsICJzcGluYnV0dG9uIiwKKyAgICAgICAgICAgICAgICAgICAgaXNEb3du
ID8gR1RLX0FSUk9XX0RPV04gOiBHVEtfQVJST1dfVVAsIFRSVUUsCisgICAgICAgICAgICAgICAg
ICAgIGFycm93X3JlY3QueCwgYXJyb3dfcmVjdC55LAorICAgICAgICAgICAgICAgICAgICBhcnJv
d19yZWN0LndpZHRoLCBhcnJvd19yZWN0LmhlaWdodCk7CisKKyAgICByZXR1cm4gTU9aX0dUS19T
VUNDRVNTOworfQorCitzdGF0aWMgZ2ludAorbW96X2d0a19zY2FsZV9wYWludChHZGtEcmF3YWJs
ZSogZHJhd2FibGUsIEdka1JlY3RhbmdsZSogcmVjdCwKKyAgICAgICAgICAgICAgICAgICAgR2Rr
UmVjdGFuZ2xlKiBjbGlwcmVjdCwgR3RrV2lkZ2V0U3RhdGUqIHN0YXRlLAorICAgICAgICAgICAg
ICAgICAgICBHdGtPcmllbnRhdGlvbiBmbGFncykKK3sKKyAgZ2ludCB4ID0gMCwgeSA9IDA7Cisg
IEd0a1N0YXRlVHlwZSBzdGF0ZV90eXBlID0gQ29udmVydEd0a1N0YXRlKHN0YXRlKTsKKyAgR3Rr
U3R5bGUqIHN0eWxlOworICBHdGtXaWRnZXQqIHdpZGdldDsKKworICBlbnN1cmVfc2NhbGVfd2lk
Z2V0KCk7CisgIHdpZGdldCA9ICgoZmxhZ3MgPT0gR1RLX09SSUVOVEFUSU9OX0hPUklaT05UQUwp
ID8gZ0hTY2FsZVdpZGdldCA6IGdWU2NhbGVXaWRnZXQpOworICBzdHlsZSA9IHdpZGdldC0+c3R5
bGU7CisKKyAgaWYgKGZsYWdzID09IEdUS19PUklFTlRBVElPTl9IT1JJWk9OVEFMKSB7CisgICAg
eCA9IFhUSElDS05FU1Moc3R5bGUpOworICAgIHkrKzsKKyAgfQorICBlbHNlIHsKKyAgICB4Kys7
CisgICAgeSA9IFlUSElDS05FU1Moc3R5bGUpOworICB9CisKKyAgVFNPZmZzZXRTdHlsZUdDcyhz
dHlsZSwgcmVjdC0+eCwgcmVjdC0+eSk7CisgIGd0a19zdHlsZV9hcHBseV9kZWZhdWx0X2JhY2tn
cm91bmQoc3R5bGUsIGRyYXdhYmxlLCBUUlVFLCBHVEtfU1RBVEVfTk9STUFMLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXByZWN0LCByZWN0LT54LCByZWN0LT55LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QtPndpZHRoLCByZWN0LT5o
ZWlnaHQpOworCisgIGd0a19wYWludF9ib3goc3R5bGUsIGRyYXdhYmxlLCBHVEtfU1RBVEVfQUNU
SVZFLCBHVEtfU0hBRE9XX0lOLCBjbGlwcmVjdCwKKyAgICAgICAgICAgICAgICB3aWRnZXQsICJ0
cm91Z2giLCByZWN0LT54ICsgeCwgcmVjdC0+eSArIHksCisgICAgICAgICAgICAgICAgcmVjdC0+
d2lkdGggLSAyKngsIHJlY3QtPmhlaWdodCAtIDIqeSk7CisKKyAgaWYgKHN0YXRlLT5mb2N1c2Vk
KQorICAgIGd0a19wYWludF9mb2N1cyhzdHlsZSwgZHJhd2FibGUsIHN0YXRlX3R5cGUsIGNsaXBy
ZWN0LCB3aWRnZXQsICJ0cm91Z2giLAorICAgICAgICAgICAgICAgICAgICByZWN0LT54LCByZWN0
LT55LCByZWN0LT53aWR0aCwgcmVjdC0+aGVpZ2h0KTsKKworICByZXR1cm4gTU9aX0dUS19TVUND
RVNTOworfQorCitzdGF0aWMgZ2ludAorbW96X2d0a19zY2FsZV90aHVtYl9wYWludChHZGtEcmF3
YWJsZSogZHJhd2FibGUsIEdka1JlY3RhbmdsZSogcmVjdCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgR2RrUmVjdGFuZ2xlKiBjbGlwcmVjdCwgR3RrV2lkZ2V0U3RhdGUqIHN0YXRlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBHdGtPcmllbnRhdGlvbiBmbGFncykKK3sKKyAgR3RrU3Rh
dGVUeXBlIHN0YXRlX3R5cGUgPSBDb252ZXJ0R3RrU3RhdGUoc3RhdGUpOworICBHdGtTdHlsZSog
c3R5bGU7CisgIEd0a1dpZGdldCogd2lkZ2V0OworICBnaW50IHRodW1iX3dpZHRoLCB0aHVtYl9o
ZWlnaHQsIHgsIHk7CisKKyAgZW5zdXJlX3NjYWxlX3dpZGdldCgpOworICB3aWRnZXQgPSAoKGZs
YWdzID09IEdUS19PUklFTlRBVElPTl9IT1JJWk9OVEFMKSA/IGdIU2NhbGVXaWRnZXQgOiBnVlNj
YWxlV2lkZ2V0KTsKKyAgc3R5bGUgPSB3aWRnZXQtPnN0eWxlOworCisgIC8qIGRldGVybWluZSB0
aGUgdGh1bWIgc2l6ZSwgYW5kIHBvc2l0aW9uIHRoZSB0aHVtYiBpbiB0aGUgY2VudGVyIGluIHRo
ZSBvcHBvc2l0ZSBheGlzICovCisgIGlmIChmbGFncyA9PSBHVEtfT1JJRU5UQVRJT05fSE9SSVpP
TlRBTCkgeworICAgIG1vel9ndGtfZ2V0X3NjYWxldGh1bWJfbWV0cmljcyhHVEtfT1JJRU5UQVRJ
T05fSE9SSVpPTlRBTCwgJnRodW1iX3dpZHRoLCAmdGh1bWJfaGVpZ2h0KTsKKyAgICB4ID0gcmVj
dC0+eDsKKyAgICB5ID0gcmVjdC0+eSArIChyZWN0LT5oZWlnaHQgLSB0aHVtYl9oZWlnaHQpIC8g
MjsKKyAgfQorICBlbHNlIHsKKyAgICBtb3pfZ3RrX2dldF9zY2FsZXRodW1iX21ldHJpY3MoR1RL
X09SSUVOVEFUSU9OX1ZFUlRJQ0FMLCAmdGh1bWJfaGVpZ2h0LCAmdGh1bWJfd2lkdGgpOworICAg
IHggPSByZWN0LT54ICsgKHJlY3QtPndpZHRoIC0gdGh1bWJfd2lkdGgpIC8gMjsKKyAgICB5ID0g
cmVjdC0+eTsKKyAgfQorCisgIFRTT2Zmc2V0U3R5bGVHQ3Moc3R5bGUsIHJlY3QtPngsIHJlY3Qt
PnkpOworICBndGtfcGFpbnRfc2xpZGVyKHN0eWxlLCBkcmF3YWJsZSwgc3RhdGVfdHlwZSwgR1RL
X1NIQURPV19PVVQsIGNsaXByZWN0LAorICAgICAgICAgICAgICAgICAgIHdpZGdldCwgKGZsYWdz
ID09IEdUS19PUklFTlRBVElPTl9IT1JJWk9OVEFMKSA/ICJoc2NhbGUiIDogInZzY2FsZSIsCisg
ICAgICAgICAgICAgICAgICAgeCwgeSwgdGh1bWJfd2lkdGgsIHRodW1iX2hlaWdodCwgZmxhZ3Mp
OworCisgIHJldHVybiBNT1pfR1RLX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBnaW50Cittb3pfZ3Rr
X2dyaXBwZXJfcGFpbnQoR2RrRHJhd2FibGUqIGRyYXdhYmxlLCBHZGtSZWN0YW5nbGUqIHJlY3Qs
CisgICAgICAgICAgICAgICAgICAgICAgR2RrUmVjdGFuZ2xlKiBjbGlwcmVjdCwgR3RrV2lkZ2V0
U3RhdGUqIHN0YXRlKQoreworICAgIEd0a1N0YXRlVHlwZSBzdGF0ZV90eXBlID0gQ29udmVydEd0
a1N0YXRlKHN0YXRlKTsKKyAgICBHdGtTaGFkb3dUeXBlIHNoYWRvd190eXBlOworICAgIEd0a1N0
eWxlKiBzdHlsZTsKKworICAgIGVuc3VyZV9oYW5kbGVib3hfd2lkZ2V0KCk7CisgICAgc3R5bGUg
PSBnSGFuZGxlQm94V2lkZ2V0LT5zdHlsZTsKKyAgICBzaGFkb3dfdHlwZSA9IEdUS19IQU5ETEVf
Qk9YKGdIYW5kbGVCb3hXaWRnZXQpLT5zaGFkb3dfdHlwZTsKKworICAgIFRTT2Zmc2V0U3R5bGVH
Q3Moc3R5bGUsIHJlY3QtPngsIHJlY3QtPnkpOworICAgIGd0a19wYWludF9ib3goc3R5bGUsIGRy
YXdhYmxlLCBzdGF0ZV90eXBlLCBzaGFkb3dfdHlwZSwgY2xpcHJlY3QsCisgICAgICAgICAgICAg
ICAgICBnSGFuZGxlQm94V2lkZ2V0LCAiaGFuZGxlYm94X2JpbiIsIHJlY3QtPngsIHJlY3QtPnks
CisgICAgICAgICAgICAgICAgICByZWN0LT53aWR0aCwgcmVjdC0+aGVpZ2h0KTsKKworICAgIHJl
dHVybiBNT1pfR1RLX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBnaW50Cittb3pfZ3RrX2VudHJ5X3Bh
aW50KEdka0RyYXdhYmxlKiBkcmF3YWJsZSwgR2RrUmVjdGFuZ2xlKiByZWN0LAorICAgICAgICAg
ICAgICAgICAgICBHZGtSZWN0YW5nbGUqIGNsaXByZWN0LCBHdGtXaWRnZXRTdGF0ZSogc3RhdGUp
Cit7CisgICAgZ2ludCB4LCB5LCB3aWR0aCA9IHJlY3QtPndpZHRoLCBoZWlnaHQgPSByZWN0LT5o
ZWlnaHQ7CisgICAgR3RrU3R5bGUqIHN0eWxlOworICAgIGdib29sZWFuIGludGVyaW9yX2ZvY3Vz
OworICAgIGdpbnQgZm9jdXNfd2lkdGg7CisKKyAgICBlbnN1cmVfZW50cnlfd2lkZ2V0KCk7Cisg
ICAgc3R5bGUgPSBnRW50cnlXaWRnZXQtPnN0eWxlOworCisgICAgLyogcGFpbnQgdGhlIGJhY2tn
cm91bmQgZmlyc3QgKi8KKyAgICB4ID0gWFRISUNLTkVTUyhzdHlsZSk7CisgICAgeSA9IFlUSElD
S05FU1Moc3R5bGUpOworCisgICAgLyogVGhpcyBnZXRzIHVzIGEgbG92ZWx5IGdyZXlpc2ggZGlz
YWJsZWRpc2ggbG9vayAqLworICAgIGd0a193aWRnZXRfc2V0X3NlbnNpdGl2ZShnRW50cnlXaWRn
ZXQsICFzdGF0ZS0+ZGlzYWJsZWQpOworCisgICAgVFNPZmZzZXRTdHlsZUdDcyhzdHlsZSwgcmVj
dC0+eCArIHgsIHJlY3QtPnkgKyB5KTsKKyAgICBndGtfcGFpbnRfZmxhdF9ib3goc3R5bGUsIGRy
YXdhYmxlLCBHVEtfU1RBVEVfTk9STUFMLCBHVEtfU0hBRE9XX05PTkUsCisgICAgICAgICAgICAg
ICAgICAgICAgIGNsaXByZWN0LCBnRW50cnlXaWRnZXQsICJlbnRyeV9iZyIsICByZWN0LT54ICsg
eCwKKyAgICAgICAgICAgICAgICAgICAgICAgcmVjdC0+eSArIHksIHJlY3QtPndpZHRoIC0gMip4
LCByZWN0LT5oZWlnaHQgLSAyKnkpOworCisgICAgZ3RrX3dpZGdldF9zdHlsZV9nZXQoZ0VudHJ5
V2lkZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICJpbnRlcmlvci1mb2N1cyIsICZpbnRl
cmlvcl9mb2N1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZm9jdXMtbGluZS13aWR0aCIs
ICZmb2N1c193aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKworICAgIC8q
CisgICAgICogTm93IHBhaW50IHRoZSBzaGFkb3cgYW5kIGZvY3VzIGJvcmRlci4KKyAgICAgKgor
ICAgICAqIGd0aysgaXMgYWJsZSB0byBkcmF3IG92ZXIgdG9wIG9mIHRoZSBlbnRyeSB3aGVuIGl0
IGdhaW5zIGZvY3VzLAorICAgICAqIHNvIHRoZSBub24tZm9jdXNlZCB0ZXh0IGJvcmRlciBpcyBp
bXBsaWNpdGx5IGFscmVhZHkgZHJhd24gd2hlbgorICAgICAqIHRoZSBlbnRyeSBpcyBkcmF3biBp
biBhIGZvY3VzZWQgc3RhdGUuCisgICAgICoKKyAgICAgKiBHZWNrbyBkb2Vzbid0IHF1aXRlIHdv
cmsgdGhpcyB3YXksIHNvIGFsd2F5cyBkcmF3IHRoZSBub24tZm9jdXNlZAorICAgICAqIHNoYWRv
dywgdGhlbiBkcmF3IHRoZSBzaGFkb3cgYWdhaW4sIGluc2V0LCBpZiB3ZSdyZSBmb2N1c2VkLgor
ICAgICAqLworCisgICAgeCA9IHJlY3QtPng7CisgICAgeSA9IHJlY3QtPnk7CisKKyAgICBpZiAo
c3RhdGUtPmZvY3VzZWQgJiYgIXN0YXRlLT5kaXNhYmxlZCkgeworICAgICAgICAgLyogVGhpcyB3
aWxsIGdldCB1cyB0aGUgbGl0IGJvcmRlcnMgdGhhdCBmb2N1c2VkIHRleHRib3hlcyBlbmpveSBv
biBzb21lIHRoZW1lcy4gKi8KKyAgICAgICAgR1RLX1dJREdFVF9TRVRfRkxBR1MoZ0VudHJ5V2lk
Z2V0LCBHVEtfSEFTX0ZPQ1VTKTsKKworICAgICAgICBpZiAoIWludGVyaW9yX2ZvY3VzKSB7Cisg
ICAgICAgICAgICAvKiBJbmRlbnQgdGhlIGJvcmRlciBhIGxpdHRsZSBiaXQgaWYgd2UgaGF2ZSBl
eHRlcmlvciBmb2N1cyAKKyAgICAgICAgICAgICAgICh0aGlzIGlzIHdoYXQgR1RLIGRvZXMgdG8g
ZHJhdyBuYXRpdmUgZW50cmllcykgKi8KKyAgICAgICAgICAgIHggKz0gZm9jdXNfd2lkdGg7Cisg
ICAgICAgICAgICB5ICs9IGZvY3VzX3dpZHRoOworICAgICAgICAgICAgd2lkdGggLT0gMiAqIGZv
Y3VzX3dpZHRoOworICAgICAgICAgICAgaGVpZ2h0IC09IDIgKiBmb2N1c193aWR0aDsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIFRTT2Zmc2V0U3R5bGVHQ3Moc3R5bGUsIHgsIHkpOworICAgIGd0
a19wYWludF9zaGFkb3coc3R5bGUsIGRyYXdhYmxlLCBHVEtfU1RBVEVfTk9STUFMLCBHVEtfU0hB
RE9XX0lOLAorICAgICAgICAgICAgICAgICAgICAgY2xpcHJlY3QsIGdFbnRyeVdpZGdldCwgImVu
dHJ5IiwgeCwgeSwgd2lkdGgsIGhlaWdodCk7CisKKyAgICBpZiAoc3RhdGUtPmZvY3VzZWQgJiYg
IXN0YXRlLT5kaXNhYmxlZCkgeworICAgICAgICBpZiAoIWludGVyaW9yX2ZvY3VzKSB7CisgICAg
ICAgICAgICBUU09mZnNldFN0eWxlR0NzKHN0eWxlLCByZWN0LT54LCByZWN0LT55KTsKKyAgICAg
ICAgICAgIGd0a19wYWludF9mb2N1cyhzdHlsZSwgZHJhd2FibGUsICBHVEtfU1RBVEVfTk9STUFM
LCBjbGlwcmVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnRW50cnlXaWRnZXQsICJl
bnRyeSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC0+eCwgcmVjdC0+eSwgcmVj
dC0+d2lkdGgsIHJlY3QtPmhlaWdodCk7CisgICAgICAgIH0KKworICAgICAgICAvKiBOb3cgdW5z
ZXQgdGhlIGZvY3VzIGZsYWcuIFdlIGRvbid0IHdhbnQgb3RoZXIgZW50cmllcyB0byBsb29rIGxp
a2UgdGhleSdyZSBmb2N1c2VkIHRvbyEgKi8KKyAgICAgICAgR1RLX1dJREdFVF9VTlNFVF9GTEFH
UyhnRW50cnlXaWRnZXQsIEdUS19IQVNfRk9DVVMpOworICAgIH0KKworICAgIHJldHVybiBNT1pf
R1RLX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBnaW50Cittb3pfZ3RrX29wdGlvbl9tZW51X3BhaW50
KEdka0RyYXdhYmxlKiBkcmF3YWJsZSwgR2RrUmVjdGFuZ2xlKiByZWN0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICBHZGtSZWN0YW5nbGUqIGNsaXByZWN0LCBHdGtXaWRnZXRTdGF0ZSogc3Rh
dGUpCit7CisgICAgR3RrU3R5bGUqIHN0eWxlOworICAgIEd0a1N0YXRlVHlwZSBzdGF0ZV90eXBl
ID0gQ29udmVydEd0a1N0YXRlKHN0YXRlKTsKKyAgICBnaW50IHggPSByZWN0LT54LCB5PXJlY3Qt
PnksIHdpZHRoPXJlY3QtPndpZHRoLCBoZWlnaHQ9cmVjdC0+aGVpZ2h0OworICAgIGdpbnQgdGFi
X3gsIHRhYl95OworICAgIGdib29sZWFuIGludGVyaW9yX2ZvY3VzOworICAgIEd0a1JlcXVpc2l0
aW9uIGluZGljYXRvcl9zaXplOworICAgIEd0a0JvcmRlciBpbmRpY2F0b3Jfc3BhY2luZzsKKyAg
ICBnaW50IGZvY3VzX3dpZHRoOworICAgIGdpbnQgZm9jdXNfcGFkOworCisgICAgZW5zdXJlX29w
dGlvbl9tZW51X3dpZGdldCgpOworICAgIG1vel9ndGtfb3B0aW9uX21lbnVfZ2V0X21ldHJpY3Mo
JmludGVyaW9yX2ZvY3VzLCAmaW5kaWNhdG9yX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAmaW5kaWNhdG9yX3NwYWNpbmcsICZmb2N1c193aWR0aCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmb2N1c19wYWQpOworCisgICAgc3R5bGUgPSBn
T3B0aW9uTWVudVdpZGdldC0+c3R5bGU7CisKKyAgICBpZiAoIWludGVyaW9yX2ZvY3VzICYmIHN0
YXRlLT5mb2N1c2VkKSB7CisgICAgICAgIHggKz0gZm9jdXNfd2lkdGggKyBmb2N1c19wYWQ7Cisg
ICAgICAgIHkgKz0gZm9jdXNfd2lkdGggKyBmb2N1c19wYWQ7CisgICAgICAgIHdpZHRoIC09IDIg
KiAoZm9jdXNfd2lkdGggKyBmb2N1c19wYWQpOworICAgICAgICBoZWlnaHQgLT0gMiAqIChmb2N1
c193aWR0aCArIGZvY3VzX3BhZCk7CisgICAgfQorCisgICAgVFNPZmZzZXRTdHlsZUdDcyhzdHls
ZSwgeCwgeSk7CisgICAgZ3RrX3BhaW50X2JveChzdHlsZSwgZHJhd2FibGUsIHN0YXRlX3R5cGUs
IEdUS19TSEFET1dfT1VULAorICAgICAgICAgICAgICAgICAgY2xpcHJlY3QsIGdPcHRpb25NZW51
V2lkZ2V0LCAib3B0aW9ubWVudSIsCisgICAgICAgICAgICAgICAgICB4LCB5LCB3aWR0aCwgaGVp
Z2h0KTsKKyAgICAgIAorICAgIGlmIChndGtfd2lkZ2V0X2dldF9kaXJlY3Rpb24oZ09wdGlvbk1l
bnVXaWRnZXQpID09IEdUS19URVhUX0RJUl9SVEwpIHsKKyAgICAgICAgdGFiX3ggPSB4ICsgaW5k
aWNhdG9yX3NwYWNpbmcucmlnaHQgKyBYVEhJQ0tORVNTKHN0eWxlKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICB0YWJfeCA9IHggKyB3aWR0aCAtIGluZGljYXRvcl9zaXplLndpZHRoIC0gaW5kaWNh
dG9yX3NwYWNpbmcucmlnaHQgLQorICAgICAgICAgICAgICAgIFhUSElDS05FU1Moc3R5bGUpOwor
ICAgIH0KKyAgICB0YWJfeSA9IHkgKyAoaGVpZ2h0IC0gaW5kaWNhdG9yX3NpemUuaGVpZ2h0KSAv
IDI7CisKKyAgICBUU09mZnNldFN0eWxlR0NzKHN0eWxlLCB0YWJfeCwgdGFiX3kpOworICAgIGd0
a19wYWludF90YWIoc3R5bGUsIGRyYXdhYmxlLCBzdGF0ZV90eXBlLCBHVEtfU0hBRE9XX09VVCwg
Y2xpcHJlY3QsCisgICAgICAgICAgICAgICAgICBnT3B0aW9uTWVudVdpZGdldCwgIm9wdGlvbm1l
bnV0YWIiLCB0YWJfeCwgdGFiX3ksIAorICAgICAgICAgICAgICAgICAgaW5kaWNhdG9yX3NpemUu
d2lkdGgsIGluZGljYXRvcl9zaXplLmhlaWdodCk7CisgICAgICAKKyAgICBpZiAoc3RhdGUtPmZv
Y3VzZWQpIHsKKyAgICAgIGlmIChpbnRlcmlvcl9mb2N1cykgeworICAgICAgICAgIHggKz0gWFRI
SUNLTkVTUyhzdHlsZSkgKyBmb2N1c19wYWQ7CisgICAgICAgICAgeSArPSBZVEhJQ0tORVNTKHN0
eWxlKSArIGZvY3VzX3BhZDsKKyAgICAgICAgICAvKiBTdGFuZGFyZCBHVEsgY29tYm9zIGhhdmUg
dGhlaXIgZm9jdXMgcmluZyBhcm91bmQgdGhlIGVudGlyZQorICAgICAgICAgICAgIGNvbnRyb2ws
IG5vdCBqdXN0IHRoZSB0ZXh0IGJpdCAqLworICAgICAgICAgIHdpZHRoIC09IDIgKiAoWFRISUNL
TkVTUyhzdHlsZSkgKyBmb2N1c19wYWQpOworICAgICAgICAgIGhlaWdodCAtPSAyICogKFlUSElD
S05FU1Moc3R5bGUpICsgZm9jdXNfcGFkKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgICAgeCAt
PSBmb2N1c193aWR0aCArIGZvY3VzX3BhZDsKKyAgICAgICAgICB5IC09IGZvY3VzX3dpZHRoICsg
Zm9jdXNfcGFkOworICAgICAgICAgIHdpZHRoICs9IDIgKiAoZm9jdXNfd2lkdGggKyBmb2N1c19w
YWQpOworICAgICAgICAgIGhlaWdodCArPSAyICogKGZvY3VzX3dpZHRoICsgZm9jdXNfcGFkKTsK
KyAgICAgIH0KKyAgICAgICAgCisgICAgICBUU09mZnNldFN0eWxlR0NzKHN0eWxlLCB4LCB5KTsK
KyAgICAgIGd0a19wYWludF9mb2N1cyAoc3R5bGUsIGRyYXdhYmxlLCBzdGF0ZV90eXBlLCBjbGlw
cmVjdCwgZ09wdGlvbk1lbnVXaWRnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICJidXR0b24i
LCB4LCB5LCAgd2lkdGgsIGhlaWdodCk7CisgICAgfQorICAgIAorICAgIHJldHVybiBNT1pfR1RL
X1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBnaW50Cittb3pfZ3RrX2Ryb3Bkb3duX2Fycm93X3BhaW50
KEdka0RyYXdhYmxlKiBkcmF3YWJsZSwgR2RrUmVjdGFuZ2xlKiByZWN0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHZGtSZWN0YW5nbGUqIGNsaXByZWN0LCBHdGtXaWRnZXRTdGF0ZSog
c3RhdGUpCit7CisgICAgR2RrUmVjdGFuZ2xlIGFycm93X3JlY3QsIHJlYWxfYXJyb3dfcmVjdDsK
KyAgICBHdGtTdGF0ZVR5cGUgc3RhdGVfdHlwZSA9IENvbnZlcnRHdGtTdGF0ZShzdGF0ZSk7Cisg
ICAgR3RrU2hhZG93VHlwZSBzaGFkb3dfdHlwZSA9IHN0YXRlLT5hY3RpdmUgPyBHVEtfU0hBRE9X
X0lOIDogR1RLX1NIQURPV19PVVQ7CisgICAgR3RrU3R5bGUqIHN0eWxlOworCisgICAgZW5zdXJl
X2Fycm93X3dpZGdldCgpOworICAgIG1vel9ndGtfYnV0dG9uX3BhaW50KGRyYXdhYmxlLCByZWN0
LCBjbGlwcmVjdCwgc3RhdGUsIEdUS19SRUxJRUZfTk9STUFMLAorICAgICAgICAgICAgICAgICAg
ICAgICAgIGdEcm9wZG93bkJ1dHRvbldpZGdldCk7CisKKyAgICAvKiBUaGlzIG1pcnJvcnMgZ3Rr
YnV0dG9uJ3MgY2hpbGQgcG9zaXRpb25pbmcgKi8KKyAgICBzdHlsZSA9IGdEcm9wZG93bkJ1dHRv
bldpZGdldC0+c3R5bGU7CisgICAgYXJyb3dfcmVjdC54ID0gcmVjdC0+eCArIDEgKyBYVEhJQ0tO
RVNTKGdEcm9wZG93bkJ1dHRvbldpZGdldC0+c3R5bGUpOworICAgIGFycm93X3JlY3QueSA9IHJl
Y3QtPnkgKyAxICsgWVRISUNLTkVTUyhnRHJvcGRvd25CdXR0b25XaWRnZXQtPnN0eWxlKTsKKyAg
ICBhcnJvd19yZWN0LndpZHRoID0gTUFYKDEsIHJlY3QtPndpZHRoIC0gKGFycm93X3JlY3QueCAt
IHJlY3QtPngpICogMik7CisgICAgYXJyb3dfcmVjdC5oZWlnaHQgPSBNQVgoMSwgcmVjdC0+aGVp
Z2h0IC0gKGFycm93X3JlY3QueSAtIHJlY3QtPnkpICogMik7CisKKyAgICBjYWxjdWxhdGVfYXJy
b3dfZGltZW5zaW9ucygmYXJyb3dfcmVjdCwgJnJlYWxfYXJyb3dfcmVjdCk7CisgICAgc3R5bGUg
PSBnQXJyb3dXaWRnZXQtPnN0eWxlOworICAgIFRTT2Zmc2V0U3R5bGVHQ3Moc3R5bGUsIHJlYWxf
YXJyb3dfcmVjdC54LCByZWFsX2Fycm93X3JlY3QueSk7CisKKyAgICByZWFsX2Fycm93X3JlY3Qu
d2lkdGggPSByZWFsX2Fycm93X3JlY3QuaGVpZ2h0ID0KKyAgICAgICAgTUlOIChyZWFsX2Fycm93
X3JlY3Qud2lkdGgsIHJlYWxfYXJyb3dfcmVjdC5oZWlnaHQpICogMC45OyAKKworICAgIHJlYWxf
YXJyb3dfcmVjdC54ID0gZmxvb3IgKGFycm93X3JlY3QueCArICgoYXJyb3dfcmVjdC53aWR0aCAt
IHJlYWxfYXJyb3dfcmVjdC53aWR0aCkgLyAyKSArIDAuNSk7CisgICAgcmVhbF9hcnJvd19yZWN0
LnkgPSBmbG9vciAoYXJyb3dfcmVjdC55ICsgKChhcnJvd19yZWN0LmhlaWdodCAtIHJlYWxfYXJy
b3dfcmVjdC5oZWlnaHQpIC8gMikgKyAwLjUpOworCisgICAgZ3RrX3BhaW50X2Fycm93KHN0eWxl
LCBkcmF3YWJsZSwgc3RhdGVfdHlwZSwgc2hhZG93X3R5cGUsIGNsaXByZWN0LAorICAgICAgICAg
ICAgICAgICAgICBnSG9yaXpTY3JvbGxiYXJXaWRnZXQsICJhcnJvdyIsICBHVEtfQVJST1dfRE9X
TiwgVFJVRSwKKyAgICAgICAgICAgICAgICAgICAgcmVhbF9hcnJvd19yZWN0LngsIHJlYWxfYXJy
b3dfcmVjdC55LAorICAgICAgICAgICAgICAgICAgICByZWFsX2Fycm93X3JlY3Qud2lkdGgsIHJl
YWxfYXJyb3dfcmVjdC5oZWlnaHQpOworCisgICAgcmV0dXJuIE1PWl9HVEtfU1VDQ0VTUzsKK30K
Kworc3RhdGljIGdpbnQKK21vel9ndGtfY29udGFpbmVyX3BhaW50KEdka0RyYXdhYmxlKiBkcmF3
YWJsZSwgR2RrUmVjdGFuZ2xlKiByZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgR2RrUmVj
dGFuZ2xlKiBjbGlwcmVjdCwgR3RrV2lkZ2V0U3RhdGUqIHN0YXRlLCAKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGdib29sZWFuIGlzcmFkaW8pCit7CisgICAgR3RrU3RhdGVUeXBlIHN0YXRlX3R5
cGUgPSBDb252ZXJ0R3RrU3RhdGUoc3RhdGUpOworICAgIEd0a1N0eWxlKiBzdHlsZTsKKyAgICBn
Ym9vbGVhbiBpbnRlcmlvcl9mb2N1czsKKyAgICBnaW50IGZvY3VzX3dpZHRoLCBmb2N1c19wYWQ7
CisKKyAgICBpZiAoaXNyYWRpbykgeworICAgICAgICBlbnN1cmVfcmFkaW9idXR0b25fd2lkZ2V0
KCk7CisgICAgICAgIHN0eWxlID0gZ1JhZGlvYnV0dG9uV2lkZ2V0LT5zdHlsZTsgIAorICAgICAg
ICBtb3pfZ3RrX3JhZGlvX2dldF9mb2N1cygmaW50ZXJpb3JfZm9jdXMsICZmb2N1c193aWR0aCwg
JmZvY3VzX3BhZCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW5zdXJlX2NoZWNrYm94X3dpZGdl
dCgpOworICAgICAgICBzdHlsZSA9IGdDaGVja2JveFdpZGdldC0+c3R5bGU7CisgICAgICAgIG1v
el9ndGtfY2hlY2tib3hfZ2V0X2ZvY3VzKCZpbnRlcmlvcl9mb2N1cywgJmZvY3VzX3dpZHRoLCAm
Zm9jdXNfcGFkKTsKKyAgICB9CisKKyAgICBUU09mZnNldFN0eWxlR0NzKHN0eWxlLCByZWN0LT54
LCByZWN0LT55KTsKKworICAgIC8qIFRoZSBkZXRhaWwgYXJndW1lbnQgZm9yIHRoZSBndGtfcGFp
bnRfKiBjYWxscyBiZWxvdyBhcmUgImNoZWNrYnV0dG9uIgorICAgICAgIGV2ZW4gZm9yIHJhZGlv
IGJ1dHRvbnMsIHRvIG1hdGNoIHdoYXQgZ3RrIGRvZXMuICovCisKKyAgICAvKiB0aGlzIGlzIGZv
ciBkcmF3aW5nIGEgcHJlbGlnaHQgYm94ICovCisgICAgaWYgKHN0YXRlX3R5cGUgPT0gR1RLX1NU
QVRFX1BSRUxJR0hUIHx8IHN0YXRlX3R5cGUgPT0gR1RLX1NUQVRFX0FDVElWRSkgeworICAgICAg
ICBndGtfcGFpbnRfZmxhdF9ib3goc3R5bGUsIGRyYXdhYmxlLCBHVEtfU1RBVEVfUFJFTElHSFQs
IEdUS19TSEFET1dfRVRDSEVEX09VVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBy
ZWN0LCBnQ2hlY2tib3hXaWRnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2hlY2ti
dXR0b24iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC0+eCwgcmVjdC0+eSwgcmVj
dC0+d2lkdGgsIHJlY3QtPmhlaWdodCk7CisgICAgfQorCisgICAgaWYgKHN0YXRlX3R5cGUgIT0g
R1RLX1NUQVRFX05PUk1BTCAmJiBzdGF0ZV90eXBlICE9IEdUS19TVEFURV9QUkVMSUdIVCkKKyAg
ICAgICAgc3RhdGVfdHlwZSA9IEdUS19TVEFURV9OT1JNQUw7CisKKyAgICBpZiAoc3RhdGUtPmZv
Y3VzZWQgJiYgIWludGVyaW9yX2ZvY3VzKSB7CisgICAgICAgIGd0a19wYWludF9mb2N1cyhzdHls
ZSwgZHJhd2FibGUsIHN0YXRlX3R5cGUsIGNsaXByZWN0LCBnQ2hlY2tib3hXaWRnZXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAiY2hlY2tidXR0b24iLAorICAgICAgICAgICAgICAgICAgICAg
ICAgcmVjdC0+eCwgcmVjdC0+eSwgcmVjdC0+d2lkdGgsIHJlY3QtPmhlaWdodCk7CisgICAgfQor
CisgICAgcmV0dXJuIE1PWl9HVEtfU1VDQ0VTUzsKK30KKworc3RhdGljIGdpbnQKK21vel9ndGtf
dG9nZ2xlX2xhYmVsX3BhaW50KEdka0RyYXdhYmxlKiBkcmF3YWJsZSwgR2RrUmVjdGFuZ2xlKiBy
ZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgR2RrUmVjdGFuZ2xlKiBjbGlwcmVjdCwg
R3RrV2lkZ2V0U3RhdGUqIHN0YXRlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGdib29s
ZWFuIGlzcmFkaW8pCit7CisgICAgR3RrU3RhdGVUeXBlIHN0YXRlX3R5cGU7CisgICAgR3RrU3R5
bGUgKnN0eWxlOworICAgIEd0a1dpZGdldCAqd2lkZ2V0OworICAgIGdib29sZWFuIGludGVyaW9y
X2ZvY3VzOworCisgICAgaWYgKCFzdGF0ZS0+Zm9jdXNlZCkKKyAgICAgICAgcmV0dXJuIE1PWl9H
VEtfU1VDQ0VTUzsKKworICAgIGlmIChpc3JhZGlvKSB7CisgICAgICAgIGVuc3VyZV9yYWRpb2J1
dHRvbl93aWRnZXQoKTsKKyAgICAgICAgd2lkZ2V0ID0gZ1JhZGlvYnV0dG9uV2lkZ2V0OworICAg
IH0gZWxzZSB7CisgICAgICAgIGVuc3VyZV9jaGVja2JveF93aWRnZXQoKTsKKyAgICAgICAgd2lk
Z2V0ID0gZ0NoZWNrYm94V2lkZ2V0OworICAgIH0KKworICAgIGd0a193aWRnZXRfc3R5bGVfZ2V0
KHdpZGdldCwgImludGVyaW9yLWZvY3VzIiwgJmludGVyaW9yX2ZvY3VzLCBOVUxMKTsKKyAgICBp
ZiAoIWludGVyaW9yX2ZvY3VzKQorICAgICAgICByZXR1cm4gTU9aX0dUS19TVUNDRVNTOworCisg
ICAgc3RhdGVfdHlwZSA9IENvbnZlcnRHdGtTdGF0ZShzdGF0ZSk7CisKKyAgICBzdHlsZSA9IHdp
ZGdldC0+c3R5bGU7CisgICAgVFNPZmZzZXRTdHlsZUdDcyhzdHlsZSwgcmVjdC0+eCwgcmVjdC0+
eSk7CisKKyAgICAvKiBBbHdheXMgImNoZWNrYnV0dG9uIiB0byBtYXRjaCBndGtjaGVja2J1dHRv
bi5jICovCisgICAgZ3RrX3BhaW50X2ZvY3VzKHN0eWxlLCBkcmF3YWJsZSwgc3RhdGVfdHlwZSwg
Y2xpcHJlY3QsIHdpZGdldCwKKyAgICAgICAgICAgICAgICAgICAgImNoZWNrYnV0dG9uIiwKKyAg
ICAgICAgICAgICAgICAgICAgcmVjdC0+eCwgcmVjdC0+eSwgcmVjdC0+d2lkdGgsIHJlY3QtPmhl
aWdodCk7CisKKyAgICByZXR1cm4gTU9aX0dUS19TVUNDRVNTOworfQorCitzdGF0aWMgZ2ludAor
bW96X2d0a190b29sYmFyX3BhaW50KEdka0RyYXdhYmxlKiBkcmF3YWJsZSwgR2RrUmVjdGFuZ2xl
KiByZWN0LAorICAgICAgICAgICAgICAgICAgICAgIEdka1JlY3RhbmdsZSogY2xpcHJlY3QpCit7
CisgICAgR3RrU3R5bGUqIHN0eWxlOworICAgIEd0a1NoYWRvd1R5cGUgc2hhZG93X3R5cGU7CisK
KyAgICBlbnN1cmVfdG9vbGJhcl93aWRnZXQoKTsKKyAgICBzdHlsZSA9IGdUb29sYmFyV2lkZ2V0
LT5zdHlsZTsKKworICAgIFRTT2Zmc2V0U3R5bGVHQ3Moc3R5bGUsIHJlY3QtPngsIHJlY3QtPnkp
OworCisgICAgZ3RrX3N0eWxlX2FwcGx5X2RlZmF1bHRfYmFja2dyb3VuZChzdHlsZSwgZHJhd2Fi
bGUsIFRSVUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfU1RB
VEVfTk9STUFMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHJl
Y3QsIHJlY3QtPngsIHJlY3QtPnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZWN0LT53aWR0aCwgcmVjdC0+aGVpZ2h0KTsKKworICAgIGd0a19wYWludF9ib3ggKHN0
eWxlLCBkcmF3YWJsZSwgR1RLX1NUQVRFX05PUk1BTCwgZ1Rvb2xiYXJTaGFkb3dUeXBlLAorICAg
ICAgICAgICAgICAgICAgIGNsaXByZWN0LCBnVG9vbGJhcldpZGdldCwgInRvb2xiYXIiLAorICAg
ICAgICAgICAgICAgICAgIHJlY3QtPngsIHJlY3QtPnksIHJlY3QtPndpZHRoLCByZWN0LT5oZWln
aHQpOworCisgICAgcmV0dXJuIE1PWl9HVEtfU1VDQ0VTUzsKK30KKworc3RhdGljIGdpbnQKK21v
el9ndGtfdG9vbHRpcF9wYWludChHZGtEcmF3YWJsZSogZHJhd2FibGUsIEdka1JlY3RhbmdsZSog
cmVjdCwKKyAgICAgICAgICAgICAgICAgICAgICBHZGtSZWN0YW5nbGUqIGNsaXByZWN0KQorewor
ICAgIEd0a1N0eWxlKiBzdHlsZTsKKworICAgIGVuc3VyZV90b29sdGlwX3dpZGdldCgpOworICAg
IHN0eWxlID0gZ3RrX3JjX2dldF9zdHlsZV9ieV9wYXRocyhndGtfc2V0dGluZ3NfZ2V0X2RlZmF1
bHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImd0ay10b29sdGlw
cyIsICJHdGtXaW5kb3ciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
VEtfVFlQRV9XSU5ET1cpOworCisgICAgc3R5bGUgPSBndGtfc3R5bGVfYXR0YWNoKHN0eWxlLCBn
VG9vbHRpcFdpZGdldC0+d2luZG93KTsKKyAgICBUU09mZnNldFN0eWxlR0NzKHN0eWxlLCByZWN0
LT54LCByZWN0LT55KTsKKyAgICBndGtfcGFpbnRfZmxhdF9ib3goc3R5bGUsIGRyYXdhYmxlLCBH
VEtfU1RBVEVfTk9STUFMLCBHVEtfU0hBRE9XX09VVCwKKyAgICAgICAgICAgICAgICAgICAgICAg
Y2xpcHJlY3QsIGdUb29sdGlwV2lkZ2V0LCAidG9vbHRpcCIsCisgICAgICAgICAgICAgICAgICAg
ICAgIHJlY3QtPngsIHJlY3QtPnksIHJlY3QtPndpZHRoLCByZWN0LT5oZWlnaHQpOworCisgICAg
cmV0dXJuIE1PWl9HVEtfU1VDQ0VTUzsKK30KKworc3RhdGljIGdpbnQKK21vel9ndGtfZnJhbWVf
cGFpbnQoR2RrRHJhd2FibGUqIGRyYXdhYmxlLCBHZGtSZWN0YW5nbGUqIHJlY3QsCisgICAgICAg
ICAgICAgICAgICAgIEdka1JlY3RhbmdsZSogY2xpcHJlY3QpCit7CisgICAgR3RrU3R5bGUqIHN0
eWxlID0gZ1Byb3RvV2luZG93LT5zdHlsZTsKKworICAgIFRTT2Zmc2V0U3R5bGVHQ3Moc3R5bGUs
IHJlY3QtPngsIHJlY3QtPnkpOworICAgIGd0a19wYWludF9mbGF0X2JveChzdHlsZSwgZHJhd2Fi
bGUsIEdUS19TVEFURV9OT1JNQUwsIEdUS19TSEFET1dfTk9ORSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgTlVMTCwgZ1Byb3RvV2luZG93LCAiYmFzZSIsIHJlY3QtPngsIHJlY3QtPnksCisgICAg
ICAgICAgICAgICAgICAgICAgIHJlY3QtPndpZHRoLCByZWN0LT5oZWlnaHQpOworCisgICAgZW5z
dXJlX2ZyYW1lX3dpZGdldCgpOworICAgIHN0eWxlID0gZ0ZyYW1lV2lkZ2V0LT5zdHlsZTsKKwor
ICAgIFRTT2Zmc2V0U3R5bGVHQ3Moc3R5bGUsIHJlY3QtPngsIHJlY3QtPnkpOworICAgIGd0a19w
YWludF9zaGFkb3coc3R5bGUsIGRyYXdhYmxlLCBHVEtfU1RBVEVfTk9STUFMLCBHVEtfU0hBRE9X
X0lOLAorICAgICAgICAgICAgICAgICAgICAgY2xpcHJlY3QsIGdGcmFtZVdpZGdldCwgImZyYW1l
IiwgcmVjdC0+eCwgcmVjdC0+eSwKKyAgICAgICAgICAgICAgICAgICAgIHJlY3QtPndpZHRoLCBy
ZWN0LT5oZWlnaHQpOworCisgICAgcmV0dXJuIE1PWl9HVEtfU1VDQ0VTUzsKK30KKworc3RhdGlj
IGdpbnQKK21vel9ndGtfcHJvZ3Jlc3NiYXJfcGFpbnQoR2RrRHJhd2FibGUqIGRyYXdhYmxlLCBH
ZGtSZWN0YW5nbGUqIHJlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEdka1JlY3Rhbmds
ZSogY2xpcHJlY3QpCit7CisgICAgR3RrU3R5bGUqIHN0eWxlOworCisgICAgZW5zdXJlX3Byb2dy
ZXNzX3dpZGdldCgpOworICAgIHN0eWxlID0gZ1Byb2dyZXNzV2lkZ2V0LT5zdHlsZTsKKworICAg
IFRTT2Zmc2V0U3R5bGVHQ3Moc3R5bGUsIHJlY3QtPngsIHJlY3QtPnkpOworICAgIGd0a19wYWlu
dF9ib3goc3R5bGUsIGRyYXdhYmxlLCBHVEtfU1RBVEVfTk9STUFMLCBHVEtfU0hBRE9XX0lOLAor
ICAgICAgICAgICAgICAgICAgY2xpcHJlY3QsIGdQcm9ncmVzc1dpZGdldCwgInRyb3VnaCIsIHJl
Y3QtPngsIHJlY3QtPnksCisgICAgICAgICAgICAgICAgICByZWN0LT53aWR0aCwgcmVjdC0+aGVp
Z2h0KTsKKworICAgIHJldHVybiBNT1pfR1RLX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBnaW50Citt
b3pfZ3RrX3Byb2dyZXNzX2NodW5rX3BhaW50KEdka0RyYXdhYmxlKiBkcmF3YWJsZSwgR2RrUmVj
dGFuZ2xlKiByZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZGtSZWN0YW5nbGUq
IGNsaXByZWN0KQoreworICAgIEd0a1N0eWxlKiBzdHlsZTsKKworICAgIGVuc3VyZV9wcm9ncmVz
c193aWRnZXQoKTsKKyAgICBzdHlsZSA9IGdQcm9ncmVzc1dpZGdldC0+c3R5bGU7CisKKyAgICBU
U09mZnNldFN0eWxlR0NzKHN0eWxlLCByZWN0LT54LCByZWN0LT55KTsKKyAgICBndGtfcGFpbnRf
Ym94KHN0eWxlLCBkcmF3YWJsZSwgR1RLX1NUQVRFX1BSRUxJR0hULCBHVEtfU0hBRE9XX09VVCwK
KyAgICAgICAgICAgICAgICAgIGNsaXByZWN0LCBnUHJvZ3Jlc3NXaWRnZXQsICJiYXIiLCByZWN0
LT54LCByZWN0LT55LAorICAgICAgICAgICAgICAgICAgcmVjdC0+d2lkdGgsIHJlY3QtPmhlaWdo
dCk7CisKKyAgICByZXR1cm4gTU9aX0dUS19TVUNDRVNTOworfQorCitzdGF0aWMgZ2ludAorbW96
X2d0a190YWJfcGFpbnQoR2RrRHJhd2FibGUqIGRyYXdhYmxlLCBHZGtSZWN0YW5nbGUqIHJlY3Qs
CisgICAgICAgICAgICAgICAgICBHZGtSZWN0YW5nbGUqIGNsaXByZWN0LCBnaW50IGZsYWdzKQor
eworICAgIC8qCisgICAgICogSW4gb3JkZXIgdG8gZ2V0IHRoZSBjb3JyZWN0IHNoYWRvd3MgYW5k
IGhpZ2hsaWdodHMsIEdUSyBwYWludHMKKyAgICAgKiB0YWJzIHJpZ2h0LXRvLWxlZnQgKGVuZC10
by1iZWdpbm5pbmcsIHRvIGJlIGdlbmVyaWMpLCBsZWF2aW5nCisgICAgICogb3V0IHRoZSBhY3Rp
dmUgdGFiLCBhbmQgdGhlbiBwYWludHMgdGhlIGN1cnJlbnQgdGFiIG9uY2UKKyAgICAgKiBldmVy
eXRoaW5nIGVsc2UgaXMgcGFpbnRlZC4gIEluIGFkZGl0aW9uLCBHVEsgdXNlcyBhIDItcGl4ZWwK
KyAgICAgKiBvdmVybGFwIGJldHdlZW4gYWRqYWNlbnQgdGFicyAodGhpcyB2YWx1ZSBpcyBoYXJk
LWNvZGVkIGluCisgICAgICogZ3Rrbm90ZWJvb2suYykuICBGb3IgcHVycG9zZXMgb2YgbWFwcGlu
ZyB0byBnZWNrbydzIGZyYW1lCisgICAgICogcG9zaXRpb25zLCB3ZSBwdXQgdGhpcyBvdmVybGFw
IG9uIHRoZSBmYXIgZWRnZSBvZiB0aGUgZnJhbWUKKyAgICAgKiAoaS5lLiwgZm9yIGEgaG9yaXpv
bnRhbC90b3AgdGFiIHN0cmlwLCB3ZSBzaGlmdCB0aGUgbGVmdCBzaWRlCisgICAgICogb2YgZWFj
aCB0YWIgMnB4IHRvIHRoZSBsZWZ0LCBpbnRvIHRoZSBuZWlnaGJvcmluZyB0YWIncyBmcmFtZQor
ICAgICAqIHJlY3QuICBUaGUgcmlnaHQgMnB4ICogb2YgYSB0YWIncyBmcmFtZSB3aWxsIGJlIHJl
ZmVycmVkIHRvIGFzCisgICAgICogdGhlICJvdmVybGFwIGFyZWEiLgorICAgICAqCisgICAgICog
U2luY2Ugd2UgY2FuJ3QgZ3VhcmFudGVlIHBhaW50aW5nIG9yZGVyIHdpdGggZ2Vja28sIHdlIG5l
ZWQgdG8KKyAgICAgKiBtYW5hZ2UgdGhlIG92ZXJsYXAgYXJlYSBtYW51YWxseS4gVGhlcmUgYXJl
IHRocmVlIHR5cGVzIG9mIHRhYgorICAgICAqIGJvdW5kYXJpZXMgd2UgbmVlZCB0byBoYW5kbGU6
CisgICAgICoKKyAgICAgKiAqIHR3byBub24tYWN0aXZlIHRhYnM6IEluIHRoaXMgY2FzZSwgd2Ug
anVzdCBoYXZlIGJvdGggdGFicworICAgICAqICAgcGFpbnQgbm9ybWFsbHkuCisgICAgICoKKyAg
ICAgKiAqIG5vbi1hY3RpdmUgdG8gYWN0aXZlIHRhYjogSGVyZSwgd2UgbmVlZCB0aGUgdGFiIG9u
IHRoZSBsZWZ0IHRvIHBhaW50CisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0
c2VsZiBub3JtYWxseSwgdGhlbiBwYWludCB0aGUgZWRnZSBvZiB0aGUKKyAgICAgKiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYWN0aXZlIHRhYiBpbiBpdHMgb3ZlcmxhcCBhcmVhLgorICAg
ICAqCisgICAgICogKiBhY3RpdmUgdG8gbm9uLWFjdGl2ZSB0YWI6IEluIHRoaXMgY2FzZSwgd2Ug
anVzdCBoYXZlIGJvdGggdGFicyBwYWludAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBub3JtYWxseS4KKyAgICAgKgorICAgICAqIFdlIG5lZWQgdG8gbWFrZSBhbiBleGNlcHRp
b24gZm9yIHRoZSBmaXJzdCB0YWIgLSBzaW5jZSB0aGVyZSBpcworICAgICAqIG5vIHRhYiB0byB0
aGUgbGVmdCB0byBwYWludCB0aGUgb3ZlcmxhcCBhcmVhLCB3ZSBkbyBfbm90XyBzaGlmdAorICAg
ICAqIHRoZSB0YWIgbGVmdCBieSAycHguCisgICAgICovCisKKyAgICBHdGtTdHlsZSogc3R5bGU7
CisgICAgZW5zdXJlX3RhYl93aWRnZXQoKTsKKworICAgIGlmICghKGZsYWdzICYgTU9aX0dUS19U
QUJfRklSU1QpKSB7CisgICAgICAgIHJlY3QtPnggLT0gMjsKKyAgICAgICAgcmVjdC0+d2lkdGgg
Kz0gMjsKKyAgICB9CisKKyAgICBzdHlsZSA9IGdUYWJXaWRnZXQtPnN0eWxlOworICAgIFRTT2Zm
c2V0U3R5bGVHQ3Moc3R5bGUsIHJlY3QtPngsIHJlY3QtPnkpOworICAgIGd0a19wYWludF9leHRl
bnNpb24oc3R5bGUsIGRyYXdhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgKChmbGFncyAm
IE1PWl9HVEtfVEFCX1NFTEVDVEVEKSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX1NU
QVRFX05PUk1BTCA6IEdUS19TVEFURV9BQ1RJVkUpLAorICAgICAgICAgICAgICAgICAgICAgICAg
R1RLX1NIQURPV19PVVQsIGNsaXByZWN0LCBnVGFiV2lkZ2V0LCAidGFiIiwgcmVjdC0+eCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJlY3QtPnksIHJlY3QtPndpZHRoLCByZWN0LT5oZWlnaHQs
IEdUS19QT1NfQk9UVE9NKTsKKworICAgIGlmIChmbGFncyAmIE1PWl9HVEtfVEFCX0JFRk9SRV9T
RUxFQ1RFRCkgeworICAgICAgICBnYm9vbGVhbiBiZWZvcmVfc2VsZWN0ZWQgPSAoKGZsYWdzICYg
TU9aX0dUS19UQUJfQkVGT1JFX1NFTEVDVEVEKSE9MCk7CisgICAgICAgIGNsaXByZWN0LT55IC09
IDI7CisgICAgICAgIGNsaXByZWN0LT5oZWlnaHQgKz0gMjsKKworICAgICAgICBUU09mZnNldFN0
eWxlR0NzKHN0eWxlLCByZWN0LT54ICsgcmVjdC0+d2lkdGggLSAyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlY3QtPnkgLSAoMiAqIGJlZm9yZV9zZWxlY3RlZCkpOworCisgICAgICAgIGd0
a19wYWludF9leHRlbnNpb24oc3R5bGUsIGRyYXdhYmxlLCBHVEtfU1RBVEVfTk9STUFMLCBHVEtf
U0hBRE9XX09VVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGlwcmVjdCwgZ1RhYldp
ZGdldCwgInRhYiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC0+eCArIHJlY3Qt
PndpZHRoIC0gMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LT55IC0gKDIgKiBi
ZWZvcmVfc2VsZWN0ZWQpLCByZWN0LT53aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZWN0LT5oZWlnaHQgKyAoMiAqIGJlZm9yZV9zZWxlY3RlZCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR1RLX1BPU19CT1RUT00pOworICAgIH0KKworICAgIHJldHVybiBNT1pfR1RL
X1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBnaW50Cittb3pfZ3RrX3RhYnBhbmVsc19wYWludChHZGtE
cmF3YWJsZSogZHJhd2FibGUsIEdka1JlY3RhbmdsZSogcmVjdCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIEdka1JlY3RhbmdsZSogY2xpcHJlY3QpCit7CisgICAgR3RrU3R5bGUqIHN0eWxlOwor
CisgICAgZW5zdXJlX3RhYl93aWRnZXQoKTsKKyAgICBzdHlsZSA9IGdUYWJXaWRnZXQtPnN0eWxl
OworCisgICAgVFNPZmZzZXRTdHlsZUdDcyhzdHlsZSwgcmVjdC0+eCwgcmVjdC0+eSk7CisgICAg
Z3RrX3BhaW50X2JveChzdHlsZSwgZHJhd2FibGUsIEdUS19TVEFURV9OT1JNQUwsIEdUS19TSEFE
T1dfT1VULAorICAgICAgICAgICAgICAgICAgY2xpcHJlY3QsIGdUYWJXaWRnZXQsICJub3RlYm9v
ayIsIHJlY3QtPngsIHJlY3QtPnksCisgICAgICAgICAgICAgICAgICByZWN0LT53aWR0aCwgcmVj
dC0+aGVpZ2h0KTsKKworICAgIHJldHVybiBNT1pfR1RLX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBn
aW50Cittb3pfZ3RrX21lbnVfYmFyX3BhaW50KEdka0RyYXdhYmxlKiBkcmF3YWJsZSwgR2RrUmVj
dGFuZ2xlKiByZWN0LAorICAgICAgICAgICAgICAgICAgICAgICBHZGtSZWN0YW5nbGUqIGNsaXBy
ZWN0KQoreworICAgIEd0a1N0eWxlKiBzdHlsZTsKKyAgICBHdGtTaGFkb3dUeXBlIHNoYWRvd190
eXBlOworICAgIGVuc3VyZV9tZW51X2Jhcl93aWRnZXQoKTsKKyAgICBzdHlsZSA9IGdNZW51QmFy
V2lkZ2V0LT5zdHlsZTsKKworICAgIFRTT2Zmc2V0U3R5bGVHQ3Moc3R5bGUsIHJlY3QtPngsIHJl
Y3QtPnkpOworICAgIGd0a19zdHlsZV9hcHBseV9kZWZhdWx0X2JhY2tncm91bmQoc3R5bGUsIGRy
YXdhYmxlLCBUUlVFLCBHVEtfU1RBVEVfTk9STUFMLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2xpcHJlY3QsIHJlY3QtPngsIHJlY3QtPnksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LT53aWR0aCwgcmVjdC0+aGVpZ2h0KTsKKyAg
ICBndGtfcGFpbnRfYm94KHN0eWxlLCBkcmF3YWJsZSwgR1RLX1NUQVRFX05PUk1BTCwgZ01lbnVC
YXJTaGFkb3dUeXBlLAorICAgICAgICAgICAgICAgICAgY2xpcHJlY3QsIGdNZW51QmFyV2lkZ2V0
LCAibWVudWJhciIsIHJlY3QtPngsIHJlY3QtPnksCisgICAgICAgICAgICAgICAgICByZWN0LT53
aWR0aCwgcmVjdC0+aGVpZ2h0KTsKKyAgICByZXR1cm4gTU9aX0dUS19TVUNDRVNTOworfQorCitz
dGF0aWMgZ2ludAorbW96X2d0a19tZW51X3BvcHVwX3BhaW50KEdka0RyYXdhYmxlKiBkcmF3YWJs
ZSwgR2RrUmVjdGFuZ2xlKiByZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgIEdka1JlY3Rh
bmdsZSogY2xpcHJlY3QpCit7CisgICAgR3RrU3R5bGUqIHN0eWxlOworICAgIGVuc3VyZV9tZW51
X3BvcHVwX3dpZGdldCgpOworICAgIHN0eWxlID0gZ01lbnVQb3B1cFdpZGdldC0+c3R5bGU7CisK
KyAgICBUU09mZnNldFN0eWxlR0NzKHN0eWxlLCByZWN0LT54LCByZWN0LT55KTsKKyAgICBndGtf
c3R5bGVfYXBwbHlfZGVmYXVsdF9iYWNrZ3JvdW5kKHN0eWxlLCBkcmF3YWJsZSwgVFJVRSwgR1RL
X1NUQVRFX05PUk1BTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNs
aXByZWN0LCByZWN0LT54LCByZWN0LT55LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVjdC0+d2lkdGgsIHJlY3QtPmhlaWdodCk7CisgICAgZ3RrX3BhaW50X2JveChz
dHlsZSwgZHJhd2FibGUsIEdUS19TVEFURV9OT1JNQUwsIEdUS19TSEFET1dfT1VULCAKKyAgICAg
ICAgICAgICAgICAgIGNsaXByZWN0LCBnTWVudVBvcHVwV2lkZ2V0LCAibWVudSIsCisgICAgICAg
ICAgICAgICAgICByZWN0LT54LCByZWN0LT55LCByZWN0LT53aWR0aCwgcmVjdC0+aGVpZ2h0KTsK
KworICAgIHJldHVybiBNT1pfR1RLX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBnaW50Cittb3pfZ3Rr
X21lbnVfaXRlbV9wYWludChHZGtEcmF3YWJsZSogZHJhd2FibGUsIEdka1JlY3RhbmdsZSogcmVj
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEdka1JlY3RhbmdsZSogY2xpcHJlY3QsIEd0a1dp
ZGdldFN0YXRlKiBzdGF0ZSkKK3sKKyAgICBHdGtTdHlsZSogc3R5bGU7CisgICAgR3RrU2hhZG93
VHlwZSBzaGFkb3dfdHlwZTsKKworICAgIGlmIChzdGF0ZS0+aW5Ib3ZlciAmJiAhc3RhdGUtPmRp
c2FibGVkKSB7CisgICAgICAgIGVuc3VyZV9tZW51X2l0ZW1fd2lkZ2V0KCk7CisKKyAgICAgICAg
c3R5bGUgPSBnTWVudUl0ZW1XaWRnZXQtPnN0eWxlOworICAgICAgICBUU09mZnNldFN0eWxlR0Nz
KHN0eWxlLCByZWN0LT54LCByZWN0LT55KTsKKyAgICAgICAgaWYgKGhhdmVfbWVudV9zaGFkb3df
dHlwZSkgeworICAgICAgICAgICAgZ3RrX3dpZGdldF9zdHlsZV9nZXQoZ01lbnVJdGVtV2lkZ2V0
LCAic2VsZWN0ZWRfc2hhZG93X3R5cGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJnNoYWRvd190eXBlLCBOVUxMKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNo
YWRvd190eXBlID0gR1RLX1NIQURPV19PVVQ7CisgICAgICAgIH0KKworICAgICAgICBndGtfcGFp
bnRfYm94KHN0eWxlLCBkcmF3YWJsZSwgR1RLX1NUQVRFX1BSRUxJR0hULCBzaGFkb3dfdHlwZSwK
KyAgICAgICAgICAgICAgICAgICAgICBjbGlwcmVjdCwgZ01lbnVJdGVtV2lkZ2V0LCAibWVudWl0
ZW0iLCByZWN0LT54LCByZWN0LT55LAorICAgICAgICAgICAgICAgICAgICAgIHJlY3QtPndpZHRo
LCByZWN0LT5oZWlnaHQpOworICAgIH0KKworICAgIHJldHVybiBNT1pfR1RLX1NVQ0NFU1M7Cit9
CisKK3N0YXRpYyBnaW50Cittb3pfZ3RrX2NoZWNrX21lbnVfaXRlbV9wYWludChHZGtEcmF3YWJs
ZSogZHJhd2FibGUsIEdka1JlY3RhbmdsZSogcmVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdka1JlY3RhbmdsZSogY2xpcHJlY3QsIEd0a1dpZGdldFN0YXRlKiBzdGF0ZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdib29sZWFuIGNoZWNrZWQsIGdib29sZWFuIGlz
cmFkaW8pCit7CisgICAgR3RrU3RhdGVUeXBlIHN0YXRlX3R5cGU7CisgICAgR3RrU3R5bGUqIHN0
eWxlOworICAgIEd0a1NoYWRvd1R5cGUgc2hhZG93X3R5cGUgPSAoY2hlY2tlZCk/R1RLX1NIQURP
V19JTjpHVEtfU0hBRE9XX09VVDsKKyAgICBnaW50IG9mZnNldDsKKyAgICBnaW50IGluZGljYXRv
cl9zaXplID0gODsgLyogaXQncyBhIGZpeGVkIHZhbHVlIGluIGd0ayAyLjIgKi8KKyAgICBnaW50
IHgsIHk7CisgICAgCisgICAgbW96X2d0a19tZW51X2l0ZW1fcGFpbnQoZHJhd2FibGUsIHJlY3Qs
IGNsaXByZWN0LCBzdGF0ZSk7CisgICAgCisgICAgZW5zdXJlX2NoZWNrX21lbnVfaXRlbV93aWRn
ZXQoKTsKKworICAgIGlmIChjaGVja2VkIHx8IEdUS19DSEVDS19NRU5VX0lURU0oZ0NoZWNrTWVu
dUl0ZW1XaWRnZXQpLT5hbHdheXNfc2hvd190b2dnbGUpIHsKKyAgICAgIHN0eWxlID0gZ0NoZWNr
TWVudUl0ZW1XaWRnZXQtPnN0eWxlOworICAgICAgCisgICAgICBpZiAoc3RhdGUtPmluSG92ZXIg
JiYgIXN0YXRlLT5kaXNhYmxlZCkgeworICAgICAgICBzdGF0ZV90eXBlID0gR1RLX1NUQVRFX1BS
RUxJR0hUOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdGVfdHlwZSA9IEdUS19TVEFURV9O
T1JNQUw7CisgICAgICB9CisgICAgICAKKyAgICAgIG9mZnNldCA9IEdUS19DT05UQUlORVIoZ0No
ZWNrTWVudUl0ZW1XaWRnZXQpLT5ib3JkZXJfd2lkdGggKyAKKyAgICAgICAgICAgICBnQ2hlY2tN
ZW51SXRlbVdpZGdldC0+c3R5bGUtPnh0aGlja25lc3MgKyAyOworICAgICAgCisgICAgICB4ID0g
cmVjdC0+eCArIG9mZnNldDsKKyAgICAgIHkgPSByZWN0LT55ICsgKHJlY3QtPmhlaWdodCAtIGlu
ZGljYXRvcl9zaXplKSAvIDI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgVFNPZmZz
ZXRTdHlsZUdDcyhzdHlsZSwgeCwgeSk7CisgICAgICBndGtfY2hlY2tfbWVudV9pdGVtX3NldF9h
Y3RpdmUoR1RLX0NIRUNLX01FTlVfSVRFTShnQ2hlY2tNZW51SXRlbVdpZGdldCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZCk7CisgICAgICAKKyAgICAgIGlm
IChpc3JhZGlvKSB7CisgICAgICAgIGd0a19wYWludF9vcHRpb24oc3R5bGUsIGRyYXdhYmxlLCBz
dGF0ZV90eXBlLCBzaGFkb3dfdHlwZSwgY2xpcHJlY3QsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgZ0NoZWNrTWVudUl0ZW1XaWRnZXQsICJvcHRpb24iLAorICAgICAgICAgICAgICAgICAgICAg
ICAgIHgsIHksIGluZGljYXRvcl9zaXplLCBpbmRpY2F0b3Jfc2l6ZSk7CisgICAgICB9IGVsc2Ug
eworICAgICAgICBndGtfcGFpbnRfY2hlY2soc3R5bGUsIGRyYXdhYmxlLCBzdGF0ZV90eXBlLCBz
aGFkb3dfdHlwZSwgY2xpcHJlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICBnQ2hlY2tNZW51
SXRlbVdpZGdldCwgImNoZWNrIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHgsIHksIGluZGlj
YXRvcl9zaXplLCBpbmRpY2F0b3Jfc2l6ZSk7CisgICAgICB9CisgICAgfQorICAgIAorICAgIHJl
dHVybiBNT1pfR1RLX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBnaW50Cittb3pfZ3RrX3dpbmRvd19w
YWludChHZGtEcmF3YWJsZSogZHJhd2FibGUsIEdka1JlY3RhbmdsZSogcmVjdCwKKyAgICAgICAg
ICAgICAgICAgICAgIEdka1JlY3RhbmdsZSogY2xpcHJlY3QpCit7CisgICAgR3RrU3R5bGUqIHN0
eWxlOworCisgICAgZW5zdXJlX3dpbmRvd193aWRnZXQoKTsKKyAgICBzdHlsZSA9IGdQcm90b1dp
bmRvdy0+c3R5bGU7CisKKyAgICBUU09mZnNldFN0eWxlR0NzKHN0eWxlLCByZWN0LT54LCByZWN0
LT55KTsKKyAgICBndGtfc3R5bGVfYXBwbHlfZGVmYXVsdF9iYWNrZ3JvdW5kKHN0eWxlLCBkcmF3
YWJsZSwgVFJVRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19T
VEFURV9OT1JNQUwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGlw
cmVjdCwgcmVjdC0+eCwgcmVjdC0+eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlY3QtPndpZHRoLCByZWN0LT5oZWlnaHQpOworICAgIHJldHVybiBNT1pfR1RLX1NV
Q0NFU1M7Cit9CisKK2dpbnQKK21vel9ndGtfZ2V0X3dpZGdldF9ib3JkZXIoR3RrVGhlbWVXaWRn
ZXRUeXBlIHdpZGdldCwgZ2ludCogbGVmdCwgZ2ludCogdG9wLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICBnaW50KiByaWdodCwgZ2ludCogYm90dG9tLCBnYm9vbGVhbiBpbmh0bWwpCit7Cisg
ICAgR3RrV2lkZ2V0KiB3OworCisgICAgc3dpdGNoICh3aWRnZXQpIHsKKyAgICBjYXNlIE1PWl9H
VEtfQlVUVE9OOgorICAgICAgICB7CisgICAgICAgICAgICAvKiBDb25zdGFudCBpbiBndGtidXR0
b24uYyAqLworICAgICAgICAgICAgc3RhdGljIGNvbnN0IGdpbnQgY2hpbGRfc3BhY2luZyA9IDE7
CisgICAgICAgICAgICBnYm9vbGVhbiBpbnRlcmlvcl9mb2N1czsKKyAgICAgICAgICAgIGdpbnQg
Zm9jdXNfd2lkdGgsIGZvY3VzX3BhZDsKKworICAgICAgICAgICAgZW5zdXJlX2J1dHRvbl93aWRn
ZXQoKTsKKyAgICAgICAgICAgICpsZWZ0ID0gKnRvcCA9ICpyaWdodCA9ICpib3R0b20gPSBHVEtf
Q09OVEFJTkVSKGdCdXR0b25XaWRnZXQpLT5ib3JkZXJfd2lkdGg7CisKKyAgICAgICAgICAgIC8q
IERvbid0IGFkZCB0aGlzIHBhZGRpbmcgaW4gSFRNTCwgb3RoZXJ3aXNlIHRoZSBidXR0b25zIHdp
bGwKKyAgICAgICAgICAgICAgIGJlY29tZSB0b28gYmlnIGFuZCBzdHVmZiB0aGUgbGF5b3V0LiAq
LworICAgICAgICAgICAgaWYgKCFpbmh0bWwpIHsKKyAgICAgICAgICAgICAgICBtb3pfZ3RrX2J1
dHRvbl9nZXRfZm9jdXMoJmludGVyaW9yX2ZvY3VzLCAmZm9jdXNfd2lkdGgsICZmb2N1c19wYWQp
OworICAgICAgICAgICAgICAgICpsZWZ0ICs9IGZvY3VzX3dpZHRoICsgZm9jdXNfcGFkICsgY2hp
bGRfc3BhY2luZzsKKyAgICAgICAgICAgICAgICAqcmlnaHQgKz0gZm9jdXNfd2lkdGggKyBmb2N1
c19wYWQgKyBjaGlsZF9zcGFjaW5nOworICAgICAgICAgICAgICAgICp0b3AgKz0gZm9jdXNfd2lk
dGggKyBmb2N1c19wYWQgKyBjaGlsZF9zcGFjaW5nOworICAgICAgICAgICAgICAgICpib3R0b20g
Kz0gZm9jdXNfd2lkdGggKyBmb2N1c19wYWQgKyBjaGlsZF9zcGFjaW5nOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAqbGVmdCArPSBnQnV0dG9uV2lkZ2V0LT5zdHlsZS0+eHRoaWNrbmVz
czsKKyAgICAgICAgICAgICpyaWdodCArPSBnQnV0dG9uV2lkZ2V0LT5zdHlsZS0+eHRoaWNrbmVz
czsKKyAgICAgICAgICAgICp0b3AgKz0gZ0J1dHRvbldpZGdldC0+c3R5bGUtPnl0aGlja25lc3M7
CisgICAgICAgICAgICAqYm90dG9tICs9IGdCdXR0b25XaWRnZXQtPnN0eWxlLT55dGhpY2tuZXNz
OworICAgICAgICAgICAgcmV0dXJuIE1PWl9HVEtfU1VDQ0VTUzsKKyAgICAgICAgfQorCisgICAg
Y2FzZSBNT1pfR1RLX1RPT0xCQVI6CisgICAgICAgIGVuc3VyZV90b29sYmFyX3dpZGdldCgpOwor
ICAgICAgICB3ID0gZ1Rvb2xiYXJXaWRnZXQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTU9a
X0dUS19FTlRSWToKKyAgICAgICAgZW5zdXJlX2VudHJ5X3dpZGdldCgpOworICAgICAgICB3ID0g
Z0VudHJ5V2lkZ2V0OworICAgICAgICBicmVhazsKKyAgICBjYXNlIE1PWl9HVEtfRFJPUERPV05f
QVJST1c6CisgICAgICAgIGVuc3VyZV9hcnJvd193aWRnZXQoKTsKKyAgICAgICAgdyA9IGdEcm9w
ZG93bkJ1dHRvbldpZGdldDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNT1pfR1RLX0RST1BE
T1dOOgorICAgICAgICB7CisgICAgICAgICAgICAvKiBXZSBuZWVkIHRvIGFjY291bnQgZm9yIHRo
ZSBhcnJvdyBvbiB0aGUgZHJvcGRvd24sIHNvIHRleHQgZG9lc24ndAorICAgICAgICAgICAgICAg
Y29tZSB0b28gY2xvc2UgdG8gdGhlIGFycm93LCBvciBpbiBzb21lIGNhc2VzIHNwaWxsIGludG8g
dGhlIGFycm93LiAqLworICAgICAgICAgICAgZ2Jvb2xlYW4gaW50ZXJpb3JfZm9jdXM7CisgICAg
ICAgICAgICBHdGtSZXF1aXNpdGlvbiBpbmRpY2F0b3Jfc2l6ZTsKKyAgICAgICAgICAgIEd0a0Jv
cmRlciBpbmRpY2F0b3Jfc3BhY2luZzsKKyAgICAgICAgICAgIGdpbnQgZm9jdXNfd2lkdGgsIGZv
Y3VzX3BhZDsKKworICAgICAgICAgICAgZW5zdXJlX29wdGlvbl9tZW51X3dpZGdldCgpOworICAg
ICAgICAgICAgKnJpZ2h0ID0gKmxlZnQgPSBnT3B0aW9uTWVudVdpZGdldC0+c3R5bGUtPnh0aGlj
a25lc3M7CisgICAgICAgICAgICAqYm90dG9tID0gKnRvcCA9IGdPcHRpb25NZW51V2lkZ2V0LT5z
dHlsZS0+eXRoaWNrbmVzczsKKyAgICAgICAgICAgIG1vel9ndGtfb3B0aW9uX21lbnVfZ2V0X21l
dHJpY3MoJmludGVyaW9yX2ZvY3VzLCAmaW5kaWNhdG9yX3NpemUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbmRpY2F0b3Jfc3BhY2luZywgJmZvY3VzX3dp
ZHRoLCAmZm9jdXNfcGFkKTsKKworICAgICAgICAgICAgaWYgKGd0a193aWRnZXRfZ2V0X2RpcmVj
dGlvbihnT3B0aW9uTWVudVdpZGdldCkgPT0gR1RLX1RFWFRfRElSX1JUTCkKKyAgICAgICAgICAg
ICAgICAqbGVmdCArPSBpbmRpY2F0b3Jfc3BhY2luZy5sZWZ0ICsgaW5kaWNhdG9yX3NpemUud2lk
dGggKyBpbmRpY2F0b3Jfc3BhY2luZy5yaWdodDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICAqcmlnaHQgKz0gaW5kaWNhdG9yX3NwYWNpbmcubGVmdCArIGluZGljYXRvcl9zaXpl
LndpZHRoICsgaW5kaWNhdG9yX3NwYWNpbmcucmlnaHQ7CisgICAgICAgICAgICByZXR1cm4gTU9a
X0dUS19TVUNDRVNTOworICAgICAgICB9CisgICAgY2FzZSBNT1pfR1RLX1RBQlBBTkVMUzoKKyAg
ICAgICAgZW5zdXJlX3RhYl93aWRnZXQoKTsKKyAgICAgICAgdyA9IGdUYWJXaWRnZXQ7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgTU9aX0dUS19QUk9HUkVTU0JBUjoKKyAgICAgICAgZW5zdXJl
X3Byb2dyZXNzX3dpZGdldCgpOworICAgICAgICB3ID0gZ1Byb2dyZXNzV2lkZ2V0OworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIE1PWl9HVEtfU1BJTkJVVFRPTl9VUDoKKyAgICBjYXNlIE1PWl9H
VEtfU1BJTkJVVFRPTl9ET1dOOgorICAgICAgICBlbnN1cmVfc3Bpbl93aWRnZXQoKTsKKyAgICAg
ICAgdyA9IGdTcGluV2lkZ2V0OworICAgICAgICBicmVhazsKKyAgICBjYXNlIE1PWl9HVEtfU0NB
TEVfSE9SSVpPTlRBTDoKKyAgICAgICAgZW5zdXJlX3NjYWxlX3dpZGdldCgpOworICAgICAgICB3
ID0gZ0hTY2FsZVdpZGdldDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNT1pfR1RLX1NDQUxF
X1ZFUlRJQ0FMOgorICAgICAgICBlbnN1cmVfc2NhbGVfd2lkZ2V0KCk7CisgICAgICAgIHcgPSBn
VlNjYWxlV2lkZ2V0OworICAgICAgICBicmVhazsKKyAgICBjYXNlIE1PWl9HVEtfRlJBTUU6Cisg
ICAgICAgIGVuc3VyZV9mcmFtZV93aWRnZXQoKTsKKyAgICAgICAgdyA9IGdGcmFtZVdpZGdldDsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNT1pfR1RLX0NIRUNLQlVUVE9OX0xBQkVMOgorICAg
IGNhc2UgTU9aX0dUS19SQURJT0JVVFRPTl9MQUJFTDoKKyAgICAgICAgeworICAgICAgICAgICAg
Z2Jvb2xlYW4gaW50ZXJpb3JfZm9jdXM7CisgICAgICAgICAgICBnaW50IGZvY3VzX3dpZHRoLCBm
b2N1c19wYWQ7CisKKyAgICAgICAgICAgIC8qIElmIHRoZSBmb2N1cyBpcyBpbnRlcmlvciwgdGhl
biB0aGUgbGFiZWwgaGFzIGEgYm9yZGVyIG9mCisgICAgICAgICAgICAgICAoZm9jdXNfd2lkdGgg
KyBmb2N1c19wYWQpLiAqLworICAgICAgICAgICAgaWYgKHdpZGdldCA9PSBNT1pfR1RLX0NIRUNL
QlVUVE9OX0xBQkVMKQorICAgICAgICAgICAgICAgIG1vel9ndGtfY2hlY2tib3hfZ2V0X2ZvY3Vz
KCZpbnRlcmlvcl9mb2N1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmZm9jdXNfd2lkdGgsICZmb2N1c19wYWQpOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIG1vel9ndGtfcmFkaW9fZ2V0X2ZvY3VzKCZpbnRlcmlvcl9mb2N1cywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZm9jdXNfd2lkdGgsICZmb2N1c19w
YWQpOworCisgICAgICAgICAgICBpZiAoaW50ZXJpb3JfZm9jdXMpCisgICAgICAgICAgICAgICAg
KmxlZnQgPSAqdG9wID0gKnJpZ2h0ID0gKmJvdHRvbSA9IChmb2N1c193aWR0aCArIGZvY3VzX3Bh
ZCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgKmxlZnQgPSAqdG9wID0gKnJp
Z2h0ID0gKmJvdHRvbSA9IDA7CisKKyAgICAgICAgICAgIHJldHVybiBNT1pfR1RLX1NVQ0NFU1M7
CisgICAgICAgIH0KKworICAgIGNhc2UgTU9aX0dUS19DSEVDS0JVVFRPTl9DT05UQUlORVI6Cisg
ICAgY2FzZSBNT1pfR1RLX1JBRElPQlVUVE9OX0NPTlRBSU5FUjoKKyAgICAgICAgeworICAgICAg
ICAgICAgZ2Jvb2xlYW4gaW50ZXJpb3JfZm9jdXM7CisgICAgICAgICAgICBnaW50IGZvY3VzX3dp
ZHRoLCBmb2N1c19wYWQ7CisKKyAgICAgICAgICAgIC8qIElmIHRoZSBmb2N1cyBpcyBfbm90XyBp
bnRlcmlvciwgdGhlbiB0aGUgY29udGFpbmVyIGhhcyBhIGJvcmRlcgorICAgICAgICAgICAgICAg
b2YgKGZvY3VzX3dpZHRoICsgZm9jdXNfcGFkKS4gKi8KKyAgICAgICAgICAgIGlmICh3aWRnZXQg
PT0gTU9aX0dUS19DSEVDS0JVVFRPTl9DT05UQUlORVIpIHsKKyAgICAgICAgICAgICAgICBtb3pf
Z3RrX2NoZWNrYm94X2dldF9mb2N1cygmaW50ZXJpb3JfZm9jdXMsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZvY3VzX3dpZHRoLCAmZm9jdXNfcGFkKTsKKyAg
ICAgICAgICAgICAgICB3ID0gZ0NoZWNrYm94V2lkZ2V0OworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBtb3pfZ3RrX3JhZGlvX2dldF9mb2N1cygmaW50ZXJpb3JfZm9jdXMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZvY3VzX3dpZHRoLCAm
Zm9jdXNfcGFkKTsKKyAgICAgICAgICAgICAgICB3ID0gZ1JhZGlvYnV0dG9uV2lkZ2V0OworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAqbGVmdCA9ICp0b3AgPSAqcmlnaHQgPSAqYm90dG9t
ID0gR1RLX0NPTlRBSU5FUih3KS0+Ym9yZGVyX3dpZHRoOworCisgICAgICAgICAgICBpZiAoIWlu
dGVyaW9yX2ZvY3VzKSB7CisgICAgICAgICAgICAgICAgKmxlZnQgKz0gKGZvY3VzX3dpZHRoICsg
Zm9jdXNfcGFkKTsKKyAgICAgICAgICAgICAgICAqcmlnaHQgKz0gKGZvY3VzX3dpZHRoICsgZm9j
dXNfcGFkKTsKKyAgICAgICAgICAgICAgICAqdG9wICs9IChmb2N1c193aWR0aCArIGZvY3VzX3Bh
ZCk7CisgICAgICAgICAgICAgICAgKmJvdHRvbSArPSAoZm9jdXNfd2lkdGggKyBmb2N1c19wYWQp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gTU9aX0dUS19TVUNDRVNTOwor
ICAgICAgICB9CisgICAgY2FzZSBNT1pfR1RLX01FTlVCQVI6CisgICAgICAgIGVuc3VyZV9tZW51
X2Jhcl93aWRnZXQoKTsKKyAgICAgICAgdyA9IGdNZW51QmFyV2lkZ2V0OworICAgICAgICBicmVh
azsKKyAgICBjYXNlIE1PWl9HVEtfTUVOVVBPUFVQOgorICAgICAgICBlbnN1cmVfbWVudV9wb3B1
cF93aWRnZXQoKTsKKyAgICAgICAgdyA9IGdNZW51UG9wdXBXaWRnZXQ7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgTU9aX0dUS19NRU5VSVRFTToKKyAgICAgICAgZW5zdXJlX21lbnVfaXRlbV93
aWRnZXQoKTsKKyAgICAgICAgdyA9IGdNZW51SXRlbVdpZGdldDsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBNT1pfR1RLX0NIRUNLTUVOVUlURU06CisgICAgY2FzZSBNT1pfR1RLX1JBRElPTUVO
VUlURU06CisgICAgICAgIGVuc3VyZV9jaGVja19tZW51X2l0ZW1fd2lkZ2V0KCk7CisgICAgICAg
IHcgPSBnQ2hlY2tNZW51SXRlbVdpZGdldDsKKyAgICAgICAgYnJlYWs7CisgICAgLyogVGhlc2Ug
d2lkZ2V0cyBoYXZlIG5vIGJvcmRlcnMsIHNpbmNlIHRoZXkgYXJlIG5vdCBjb250YWluZXJzLiAq
LworICAgIGNhc2UgTU9aX0dUS19DSEVDS0JVVFRPTjoKKyAgICBjYXNlIE1PWl9HVEtfUkFESU9C
VVRUT046CisgICAgY2FzZSBNT1pfR1RLX1NDUk9MTEJBUl9CVVRUT046CisgICAgY2FzZSBNT1pf
R1RLX1NDUk9MTEJBUl9UUkFDS19IT1JJWk9OVEFMOgorICAgIGNhc2UgTU9aX0dUS19TQ1JPTExC
QVJfVFJBQ0tfVkVSVElDQUw6CisgICAgY2FzZSBNT1pfR1RLX1NDUk9MTEJBUl9USFVNQl9IT1JJ
Wk9OVEFMOgorICAgIGNhc2UgTU9aX0dUS19TQ1JPTExCQVJfVEhVTUJfVkVSVElDQUw6CisgICAg
Y2FzZSBNT1pfR1RLX1NDQUxFX1RIVU1CX0hPUklaT05UQUw6CisgICAgY2FzZSBNT1pfR1RLX1ND
QUxFX1RIVU1CX1ZFUlRJQ0FMOgorICAgIGNhc2UgTU9aX0dUS19HUklQUEVSOgorICAgIGNhc2Ug
TU9aX0dUS19QUk9HUkVTU19DSFVOSzoKKyAgICBjYXNlIE1PWl9HVEtfVEFCOgorICAgIC8qIFRo
ZXNlIHdpZGdldHMgaGF2ZSBubyBib3JkZXJzLiovCisgICAgY2FzZSBNT1pfR1RLX1RPT0xUSVA6
CisgICAgY2FzZSBNT1pfR1RLX1dJTkRPVzoKKyAgICAgICAgKmxlZnQgPSAqdG9wID0gKnJpZ2h0
ID0gKmJvdHRvbSA9IDA7CisgICAgICAgIHJldHVybiBNT1pfR1RLX1NVQ0NFU1M7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgZ193YXJuaW5nKCJVbnN1cHBvcnRlZCB3aWRnZXQgdHlwZTogJWQiLCB3
aWRnZXQpOworICAgICAgICByZXR1cm4gTU9aX0dUS19VTktOT1dOX1dJREdFVDsKKyAgICB9CisK
KyAgICAqcmlnaHQgPSAqbGVmdCA9IFhUSElDS05FU1Mody0+c3R5bGUpOworICAgICpib3R0b20g
PSAqdG9wID0gWVRISUNLTkVTUyh3LT5zdHlsZSk7CisKKyAgICByZXR1cm4gTU9aX0dUS19TVUND
RVNTOworfQorCitnaW50Cittb3pfZ3RrX2dldF9kcm9wZG93bl9hcnJvd19zaXplKGdpbnQqIHdp
ZHRoLCBnaW50KiBoZWlnaHQpCit7CisgICAgZW5zdXJlX2Fycm93X3dpZGdldCgpOworCisgICAg
LyoKKyAgICAgKiBGaXJzdCBnZXQgdGhlIGJvcmRlciBvZiB0aGUgZHJvcGRvd24gYXJyb3csIHRo
ZW4gYWRkIGluIHRoZSByZXF1ZXN0ZWQKKyAgICAgKiBzaXplIG9mIHRoZSBhcnJvdy4gIE5vdGUg
dGhhdCB0aGUgbWluaW11bSBhcnJvdyBzaXplIGlzIGZpeGVkIGF0CisgICAgICogMTEgcGl4ZWxz
LgorICAgICAqLworCisgICAgKndpZHRoID0gMiAqICgxICsgWFRISUNLTkVTUyhnRHJvcGRvd25C
dXR0b25XaWRnZXQtPnN0eWxlKSk7CisgICAgKndpZHRoICs9IDExICsgR1RLX01JU0MoZ0Fycm93
V2lkZ2V0KS0+eHBhZCAqIDI7CisKKyAgICAqaGVpZ2h0ID0gMiAqICgxICsgWVRISUNLTkVTUyhn
RHJvcGRvd25CdXR0b25XaWRnZXQtPnN0eWxlKSk7CisgICAgKmhlaWdodCArPSAxMSArIEdUS19N
SVNDKGdBcnJvd1dpZGdldCktPnlwYWQgKiAyOworCisgICAgcmV0dXJuIE1PWl9HVEtfU1VDQ0VT
UzsKK30KKworZ2ludAorbW96X2d0a19nZXRfc2NhbGV0aHVtYl9tZXRyaWNzKEd0a09yaWVudGF0
aW9uIG9yaWVudCwgZ2ludCogdGh1bWJfbGVuZ3RoLCBnaW50KiB0aHVtYl9oZWlnaHQpCit7Cisg
IEd0a1dpZGdldCogd2lkZ2V0OworCisgIGVuc3VyZV9zY2FsZV93aWRnZXQoKTsKKyAgd2lkZ2V0
ID0gKChvcmllbnQgPT0gR1RLX09SSUVOVEFUSU9OX0hPUklaT05UQUwpID8gZ0hTY2FsZVdpZGdl
dCA6IGdWU2NhbGVXaWRnZXQpOworCisgIGd0a193aWRnZXRfc3R5bGVfZ2V0ICh3aWRnZXQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAic2xpZGVyX2xlbmd0aCIsIHRodW1iX2xlbmd0aCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICJzbGlkZXJfd2lkdGgiLCB0aHVtYl9oZWlnaHQsCisgICAg
ICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKworICByZXR1cm4gTU9aX0dUS19TVUNDRVNTOwor
fQorCitnaW50Cittb3pfZ3RrX2dldF9zY3JvbGxiYXJfbWV0cmljcyhNb3pHdGtTY3JvbGxiYXJN
ZXRyaWNzICptZXRyaWNzKQoreworICAgIGVuc3VyZV9zY3JvbGxiYXJfd2lkZ2V0KCk7CisKKyAg
ICBndGtfd2lkZ2V0X3N0eWxlX2dldCAoZ0hvcml6U2Nyb2xsYmFyV2lkZ2V0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAic2xpZGVyX3dpZHRoIiwgJm1ldHJpY3MtPnNsaWRlcl93aWR0aCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgInRyb3VnaF9ib3JkZXIiLCAmbWV0cmljcy0+dHJv
dWdoX2JvcmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgInN0ZXBwZXJfc2l6ZSIsICZt
ZXRyaWNzLT5zdGVwcGVyX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJzdGVwcGVy
X3NwYWNpbmciLCAmbWV0cmljcy0+c3RlcHBlcl9zcGFjaW5nLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICBOVUxMKTsKKworICAgIG1ldHJpY3MtPm1pbl9zbGlkZXJfc2l6ZSA9CisgICAgICAg
IEdUS19SQU5HRShnSG9yaXpTY3JvbGxiYXJXaWRnZXQpLT5taW5fc2xpZGVyX3NpemU7CisKKyAg
ICByZXR1cm4gTU9aX0dUS19TVUNDRVNTOworfQorCitnaW50Cittb3pfZ3RrX3dpZGdldF9wYWlu
dChHdGtUaGVtZVdpZGdldFR5cGUgd2lkZ2V0LCBHZGtEcmF3YWJsZSogZHJhd2FibGUsCisgICAg
ICAgICAgICAgICAgICAgICBHZGtSZWN0YW5nbGUqIHJlY3QsIEdka1JlY3RhbmdsZSogY2xpcHJl
Y3QsCisgICAgICAgICAgICAgICAgICAgICBHdGtXaWRnZXRTdGF0ZSogc3RhdGUsIGdpbnQgZmxh
Z3MpCit7CisgICAgc3dpdGNoICh3aWRnZXQpIHsKKyAgICBjYXNlIE1PWl9HVEtfQlVUVE9OOgor
ICAgICAgICBlbnN1cmVfYnV0dG9uX3dpZGdldCgpOworICAgICAgICByZXR1cm4gbW96X2d0a19i
dXR0b25fcGFpbnQoZHJhd2FibGUsIHJlY3QsIGNsaXByZWN0LCBzdGF0ZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChHdGtSZWxpZWZTdHlsZSkgZmxhZ3MsIGdCdXR0b25X
aWRnZXQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE1PWl9HVEtfQ0hFQ0tCVVRUT046Cisg
ICAgY2FzZSBNT1pfR1RLX1JBRElPQlVUVE9OOgorICAgICAgICByZXR1cm4gbW96X2d0a190b2dn
bGVfcGFpbnQoZHJhd2FibGUsIHJlY3QsIGNsaXByZWN0LCBzdGF0ZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChnYm9vbGVhbikgZmxhZ3MsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAod2lkZ2V0ID09IE1PWl9HVEtfUkFESU9CVVRUT04pKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBNT1pfR1RLX1NDUk9MTEJBUl9CVVRUT046CisgICAgICAg
IHJldHVybiBtb3pfZ3RrX3Njcm9sbGJhcl9idXR0b25fcGFpbnQoZHJhd2FibGUsIHJlY3QsIGNs
aXByZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
YXRlLCAoR3RrQXJyb3dUeXBlKSBmbGFncyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTU9a
X0dUS19TQ1JPTExCQVJfVFJBQ0tfSE9SSVpPTlRBTDoKKyAgICBjYXNlIE1PWl9HVEtfU0NST0xM
QkFSX1RSQUNLX1ZFUlRJQ0FMOgorICAgICAgICByZXR1cm4gbW96X2d0a19zY3JvbGxiYXJfdHJv
dWdoX3BhaW50KHdpZGdldCwgZHJhd2FibGUsIHJlY3QsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHJlY3QsIHN0YXRlKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBNT1pfR1RLX1NDUk9MTEJBUl9USFVNQl9IT1JJWk9OVEFMOgorICAgIGNhc2Ug
TU9aX0dUS19TQ1JPTExCQVJfVEhVTUJfVkVSVElDQUw6CisgICAgICAgIHJldHVybiBtb3pfZ3Rr
X3Njcm9sbGJhcl90aHVtYl9wYWludCh3aWRnZXQsIGRyYXdhYmxlLCByZWN0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHJlY3QsIHN0YXRlKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBNT1pfR1RLX1NDQUxFX0hPUklaT05UQUw6CisgICAgY2Fz
ZSBNT1pfR1RLX1NDQUxFX1ZFUlRJQ0FMOgorICAgICAgICByZXR1cm4gbW96X2d0a19zY2FsZV9w
YWludChkcmF3YWJsZSwgcmVjdCwgY2xpcHJlY3QsIHN0YXRlLCAoR3RrT3JpZW50YXRpb24pIGZs
YWdzKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNT1pfR1RLX1NDQUxFX1RIVU1CX0hPUkla
T05UQUw6CisgICAgY2FzZSBNT1pfR1RLX1NDQUxFX1RIVU1CX1ZFUlRJQ0FMOgorICAgICAgICBy
ZXR1cm4gbW96X2d0a19zY2FsZV90aHVtYl9wYWludChkcmF3YWJsZSwgcmVjdCwgY2xpcHJlY3Qs
IHN0YXRlLCAoR3RrT3JpZW50YXRpb24pIGZsYWdzKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBNT1pfR1RLX1NQSU5CVVRUT05fVVA6CisgICAgY2FzZSBNT1pfR1RLX1NQSU5CVVRUT05fRE9X
TjoKKyAgICAgICAgcmV0dXJuIG1vel9ndGtfc3Bpbl9wYWludChkcmF3YWJsZSwgcmVjdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAod2lkZ2V0ID09IE1PWl9HVEtfU1BJTkJV
VFRPTl9ET1dOKSwgc3RhdGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE1PWl9HVEtfR1JJ
UFBFUjoKKyAgICAgICAgcmV0dXJuIG1vel9ndGtfZ3JpcHBlcl9wYWludChkcmF3YWJsZSwgcmVj
dCwgY2xpcHJlY3QsIHN0YXRlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNT1pfR1RLX0VO
VFJZOgorICAgICAgICByZXR1cm4gbW96X2d0a19lbnRyeV9wYWludChkcmF3YWJsZSwgcmVjdCwg
Y2xpcHJlY3QsIHN0YXRlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNT1pfR1RLX0RST1BE
T1dOOgorICAgICAgICByZXR1cm4gbW96X2d0a19vcHRpb25fbWVudV9wYWludChkcmF3YWJsZSwg
cmVjdCwgY2xpcHJlY3QsIHN0YXRlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNT1pfR1RL
X0RST1BET1dOX0FSUk9XOgorICAgICAgICByZXR1cm4gbW96X2d0a19kcm9wZG93bl9hcnJvd19w
YWludChkcmF3YWJsZSwgcmVjdCwgY2xpcHJlY3QsIHN0YXRlKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBNT1pfR1RLX0NIRUNLQlVUVE9OX0NPTlRBSU5FUjoKKyAgICBjYXNlIE1PWl9HVEtf
UkFESU9CVVRUT05fQ09OVEFJTkVSOgorICAgICAgICByZXR1cm4gbW96X2d0a19jb250YWluZXJf
cGFpbnQoZHJhd2FibGUsIHJlY3QsIGNsaXByZWN0LCBzdGF0ZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICh3aWRnZXQgPT0gTU9aX0dUS19SQURJT0JVVFRPTl9DT05U
QUlORVIpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNT1pfR1RLX0NIRUNLQlVUVE9OX0xB
QkVMOgorICAgIGNhc2UgTU9aX0dUS19SQURJT0JVVFRPTl9MQUJFTDoKKyAgICAgICAgcmV0dXJu
IG1vel9ndGtfdG9nZ2xlX2xhYmVsX3BhaW50KGRyYXdhYmxlLCByZWN0LCBjbGlwcmVjdCwgc3Rh
dGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAod2lkZ2V0ID09
IE1PWl9HVEtfUkFESU9CVVRUT05fTEFCRUwpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBN
T1pfR1RLX1RPT0xCQVI6CisgICAgICAgIHJldHVybiBtb3pfZ3RrX3Rvb2xiYXJfcGFpbnQoZHJh
d2FibGUsIHJlY3QsIGNsaXByZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNT1pfR1RL
X1RPT0xUSVA6CisgICAgICAgIHJldHVybiBtb3pfZ3RrX3Rvb2x0aXBfcGFpbnQoZHJhd2FibGUs
IHJlY3QsIGNsaXByZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNT1pfR1RLX0ZSQU1F
OgorICAgICAgICByZXR1cm4gbW96X2d0a19mcmFtZV9wYWludChkcmF3YWJsZSwgcmVjdCwgY2xp
cHJlY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE1PWl9HVEtfUFJPR1JFU1NCQVI6Cisg
ICAgICAgIHJldHVybiBtb3pfZ3RrX3Byb2dyZXNzYmFyX3BhaW50KGRyYXdhYmxlLCByZWN0LCBj
bGlwcmVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTU9aX0dUS19QUk9HUkVTU19DSFVO
SzoKKyAgICAgICAgcmV0dXJuIG1vel9ndGtfcHJvZ3Jlc3NfY2h1bmtfcGFpbnQoZHJhd2FibGUs
IHJlY3QsIGNsaXByZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNT1pfR1RLX1RBQjoK
KyAgICAgICAgcmV0dXJuIG1vel9ndGtfdGFiX3BhaW50KGRyYXdhYmxlLCByZWN0LCBjbGlwcmVj
dCwgZmxhZ3MpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE1PWl9HVEtfVEFCUEFORUxTOgor
ICAgICAgICByZXR1cm4gbW96X2d0a190YWJwYW5lbHNfcGFpbnQoZHJhd2FibGUsIHJlY3QsIGNs
aXByZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNT1pfR1RLX01FTlVCQVI6CisgICAg
ICAgIHJldHVybiBtb3pfZ3RrX21lbnVfYmFyX3BhaW50KGRyYXdhYmxlLCByZWN0LCBjbGlwcmVj
dCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTU9aX0dUS19NRU5VUE9QVVA6CisgICAgICAg
IHJldHVybiBtb3pfZ3RrX21lbnVfcG9wdXBfcGFpbnQoZHJhd2FibGUsIHJlY3QsIGNsaXByZWN0
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNT1pfR1RLX01FTlVJVEVNOgorICAgICAgICBy
ZXR1cm4gbW96X2d0a19tZW51X2l0ZW1fcGFpbnQoZHJhd2FibGUsIHJlY3QsIGNsaXByZWN0LCBz
dGF0ZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTU9aX0dUS19DSEVDS01FTlVJVEVNOgor
ICAgIGNhc2UgTU9aX0dUS19SQURJT01FTlVJVEVNOgorICAgICAgICByZXR1cm4gbW96X2d0a19j
aGVja19tZW51X2l0ZW1fcGFpbnQoZHJhd2FibGUsIHJlY3QsIGNsaXByZWN0LCBzdGF0ZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnYm9vbGVhbikgZmxh
Z3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAod2lkZ2V0
ID09IE1PWl9HVEtfUkFESU9NRU5VSVRFTSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE1P
Wl9HVEtfV0lORE9XOgorICAgICAgICByZXR1cm4gbW96X2d0a193aW5kb3dfcGFpbnQoZHJhd2Fi
bGUsIHJlY3QsIGNsaXByZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgZ193YXJuaW5nKCJVbmtub3duIHdpZGdldCB0eXBlOiAlZCIsIHdpZGdldCk7CisgICAgfQor
CisgICAgcmV0dXJuIE1PWl9HVEtfVU5LTk9XTl9XSURHRVQ7Cit9CisKK0d0a1dpZGdldCogbW96
X2d0a19nZXRfc2Nyb2xsYmFyX3dpZGdldCh2b2lkKQoreworICAgIGlmICghaXNfaW5pdGlhbGl6
ZWQpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGVuc3VyZV9zY3JvbGxiYXJfd2lkZ2V0KCk7
CisgICAgcmV0dXJuIGdIb3JpelNjcm9sbGJhcldpZGdldDsKK30KKworZ2ludAorbW96X2d0a19z
aHV0ZG93bigpCit7CisgICAgaWYgKGdUb29sdGlwV2lkZ2V0KQorICAgICAgICBndGtfd2lkZ2V0
X2Rlc3Ryb3koZ1Rvb2x0aXBXaWRnZXQpOworICAgIC8qIFRoaXMgd2lsbCBkZXN0cm95IGFsbCBv
ZiBvdXIgd2lkZ2V0cyAqLworICAgIGlmIChnUHJvdG9XaW5kb3cpCisgICAgICAgIGd0a193aWRn
ZXRfZGVzdHJveShnUHJvdG9XaW5kb3cpOworCisgICAgZ1Byb3RvV2luZG93ID0gTlVMTDsKKyAg
ICBnQnV0dG9uV2lkZ2V0ID0gTlVMTDsKKyAgICBnQ2hlY2tib3hXaWRnZXQgPSBOVUxMOworICAg
IGdSYWRpb2J1dHRvbldpZGdldCA9IE5VTEw7CisgICAgZ0hvcml6U2Nyb2xsYmFyV2lkZ2V0ID0g
TlVMTDsKKyAgICBnVmVydFNjcm9sbGJhcldpZGdldCA9IE5VTEw7CisgICAgZ0hTY2FsZVdpZGdl
dCA9IE5VTEw7CisgICAgZ1ZTY2FsZVdpZGdldCA9IE5VTEw7CisgICAgZ0VudHJ5V2lkZ2V0ID0g
TlVMTDsKKyAgICBnQXJyb3dXaWRnZXQgPSBOVUxMOworICAgIGdEcm9wZG93bkJ1dHRvbldpZGdl
dCA9IE5VTEw7CisgICAgZ0hhbmRsZUJveFdpZGdldCA9IE5VTEw7CisgICAgZ1Rvb2xiYXJXaWRn
ZXQgPSBOVUxMOworICAgIGdGcmFtZVdpZGdldCA9IE5VTEw7CisgICAgZ1Byb2dyZXNzV2lkZ2V0
ID0gTlVMTDsKKyAgICBnVGFiV2lkZ2V0ID0gTlVMTDsKKyAgICBnVG9vbHRpcFdpZGdldCA9IE5V
TEw7CisgICAgZ01lbnVCYXJXaWRnZXQgPSBOVUxMOworICAgIGdNZW51QmFySXRlbVdpZGdldCA9
IE5VTEw7CisgICAgZ01lbnVQb3B1cFdpZGdldCA9IE5VTEw7CisgICAgZ01lbnVJdGVtV2lkZ2V0
ID0gTlVMTDsKKyAgICBnQ2hlY2tNZW51SXRlbVdpZGdldCA9IE5VTEw7CisKKyAgICBpc19pbml0
aWFsaXplZCA9IEZBTFNFOworCisgICAgcmV0dXJuIE1PWl9HVEtfU1VDQ0VTUzsKK30KSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3RrL2d0a2RyYXdpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2d0ay9ndGtkcmF3aW5nLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2d0ay9ndGtkcmF3aW5nLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzAxIEBACisvKiAt
Ki0gTW9kZTogQzsgdGFiLXdpZHRoOiAyOyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMt
b2Zmc2V0OiAyIC0qLSAqLworLyogKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKgorICog
VmVyc2lvbjogTVBMIDEuMS9HUEwgMi4wL0xHUEwgMi4xCisgKgorICogVGhlIGNvbnRlbnRzIG9m
IHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJz
aW9uCisgKiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4
Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBh
IGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLwor
ICoKKyAqIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1
dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsCisgKiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5E
LCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UKKyAqIGZvciB0aGUg
c3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIg
dGhlCisgKiBMaWNlbnNlLgorICoKKyAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIG1vemlsbGEub3Jn
IGNvZGUuCisgKgorICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2Rl
IGlzCisgKiBOZXRzY2FwZSBDb21tdW5pY2F0aW9ucyBDb3Jwb3JhdGlvbi4KKyAqIFBvcnRpb25z
IGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmlnaHQgKEMpIDIwMDIK
KyAqIHRoZSBJbml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBD
b250cmlidXRvcihzKToKKyAqICBCcmlhbiBSeW5lciA8YnJ5bmVyQGJyaWFucnluZXIuY29tPiAg
KE9yaWdpbmFsIEF1dGhvcikKKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2Yg
dGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZgorICogZWl0aGVyIHRoZSBH
TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIgb3IgbGF0ZXIgKHRoZSAiR1BMIiks
IG9yCisgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4x
IG9yIGxhdGVyICh0aGUgIkxHUEwiKSwKKyAqIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMg
b2YgdGhlIEdQTCBvciB0aGUgTEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkCisgKiBvZiB0aG9z
ZSBhYm92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlz
IGZpbGUgb25seQorICogdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlciB0aGUgR1BMIG9yIHRoZSBM
R1BMLCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0bworICogdXNlIHlvdXIgdmVyc2lvbiBvZiB0
aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNUEwsIGluZGljYXRlIHlvdXIKKyAqIGRl
Y2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0g
d2l0aCB0aGUgbm90aWNlCisgKiBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUg
R1BMIG9yIHRoZSBMR1BMLiBJZiB5b3UgZG8gbm90IGRlbGV0ZQorICogdGhlIHByb3Zpc2lvbnMg
YWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRl
cgorICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQ
TC4KKyAqCisgKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAqLworCisvKioKKyAqIGd0
a2RyYXdpbmcuaDogR1RLIHdpZGdldCByZW5kZXJpbmcgdXRpbGl0aWVzCisgKgorICogZ3RrZHJh
d2luZyBwcm92aWRlcyBhbiBBUEkgZm9yIHJlbmRlcmluZyBHVEsgd2lkZ2V0cyBpbiB0aGUKKyAq
IGN1cnJlbnQgdGhlbWUgdG8gYSBwaXhtYXAgb3Igd2luZG93LCB3aXRob3V0IHJlcXVpcmluZyBh
biBhY3R1YWwKKyAqIHdpZGdldCBpbnN0YW50aWF0aW9uLCBzaW1pbGFyIHRvIHRoZSBNYWNpbnRv
c2ggQXBwZWFyYW5jZSBNYW5hZ2VyCisgKiBvciBXaW5kb3dzIFhQJ3MgRHJhd1RoZW1lQmFja2dy
b3VuZCgpIEFQSS4KKyAqLworCisjaWZuZGVmIF9HVEtfRFJBV0lOR19IXworI2RlZmluZSBfR1RL
X0RSQVdJTkdfSF8KKworI2luY2x1ZGUgPGdkay9nZGsuaD4KKyNpbmNsdWRlIDxndGsvZ3Rrc3R5
bGUuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2Nw
bHVzcGx1cyAqLworCisvKioqIHR5cGUgZGVmaW5pdGlvbnMgKioqLwordHlwZWRlZiBzdHJ1Y3Qg
eworICBndWludDggYWN0aXZlOworICBndWludDggZm9jdXNlZDsKKyAgZ3VpbnQ4IGluSG92ZXI7
CisgIGd1aW50OCBkaXNhYmxlZDsKKyAgZ3VpbnQ4IGlzRGVmYXVsdDsKKyAgZ3VpbnQ4IGNhbkRl
ZmF1bHQ7CisgIGdpbnQzMiBjdXJwb3M7IC8qIGN1cnBvcyBhbmQgbWF4cG9zIGFyZSB1c2VkIGZv
ciBzY3JvbGxiYXJzICovCisgIGdpbnQzMiBtYXhwb3M7Cit9IEd0a1dpZGdldFN0YXRlOworCit0
eXBlZGVmIHN0cnVjdCB7CisgIGdpbnQgc2xpZGVyX3dpZHRoOworICBnaW50IHRyb3VnaF9ib3Jk
ZXI7CisgIGdpbnQgc3RlcHBlcl9zaXplOworICBnaW50IHN0ZXBwZXJfc3BhY2luZzsKKyAgZ2lu
dCBtaW5fc2xpZGVyX3NpemU7Cit9IE1vekd0a1Njcm9sbGJhck1ldHJpY3M7CisKKy8qKiBmbGFn
cyBmb3IgdGFiIHN0YXRlICoqLwordHlwZWRlZiBlbnVtIHsKKyAgLyogdGhlIGZpcnN0IHRhYiBp
biB0aGUgZ3JvdXAgKi8KKyAgTU9aX0dUS19UQUJfRklSU1QgICAgICAgICAgID0gMSA8PCAwLAor
ICAvKiB0aGUgdGFiIGp1c3QgYmVmb3JlIHRoZSBzZWxlY3RlZCB0YWIgKi8KKyAgTU9aX0dUS19U
QUJfQkVGT1JFX1NFTEVDVEVEID0gMSA8PCAxLAorICAvKiB0aGUgc2VsZWN0ZWQgdGFiICovCisg
IE1PWl9HVEtfVEFCX1NFTEVDVEVEICAgICAgICA9IDEgPDwgMgorfSBHdGtUYWJGbGFnczsKKwor
LyogZnVuY3Rpb24gdHlwZSBmb3IgbW96X2d0a19lbmFibGVfc3R5bGVfcHJvcHMgKi8KK3R5cGVk
ZWYgZ2ludCAoKnN0eWxlX3Byb3BfdCkoR3RrU3R5bGUqLCBjb25zdCBnY2hhciosIGdpbnQpOwor
CisvKioqIHJlc3VsdC9lcnJvciBjb2RlcyAqKiovCisjZGVmaW5lIE1PWl9HVEtfU1VDQ0VTUyAw
CisjZGVmaW5lIE1PWl9HVEtfVU5LTk9XTl9XSURHRVQgLTEKKyNkZWZpbmUgTU9aX0dUS19VTlNB
RkVfVEhFTUUgLTIKKworLyoqKiB3aWRnZXQgdHlwZSBjb25zdGFudHMgKioqLwordHlwZWRlZiBl
bnVtIHsKKyAgLyogUGFpbnRzIGEgR3RrQnV0dG9uLiBmbGFncyBpcyBhIEd0a1JlbGllZlN0eWxl
LiAqLworICBNT1pfR1RLX0JVVFRPTiwKKyAgLyogUGFpbnRzIGEgR3RrQ2hlY2tCdXR0b24uIGZs
YWdzIGlzIGEgYm9vbGVhbiwgMT1jaGVja2VkLCAwPW5vdCBjaGVja2VkLiAqLworICBNT1pfR1RL
X0NIRUNLQlVUVE9OLAorICAvKiBQYWludHMgYSBHdGtSYWRpb0J1dHRvbi4gZmxhZ3MgaXMgYSBi
b29sZWFuLCAxPWNoZWNrZWQsIDA9bm90IGNoZWNrZWQuICovCisgIE1PWl9HVEtfUkFESU9CVVRU
T04sCisgIC8qKgorICAgKiBQYWludHMgdGhlIGJ1dHRvbiBvZiBhIEd0a1Njcm9sbGJhci4gZmxh
Z3MgaXMgYSBHdGtBcnJvd1R5cGUgZ2l2aW5nCisgICAqIHRoZSBhcnJvdyBkaXJlY3Rpb24uCisg
ICAqLworICBNT1pfR1RLX1NDUk9MTEJBUl9CVVRUT04sCisgIC8qIFBhaW50cyB0aGUgdHJvdWdo
ICh0cmFjaykgb2YgYSBHdGtTY3JvbGxiYXIuICovCisgIE1PWl9HVEtfU0NST0xMQkFSX1RSQUNL
X0hPUklaT05UQUwsCisgIE1PWl9HVEtfU0NST0xMQkFSX1RSQUNLX1ZFUlRJQ0FMLAorICAvKiBQ
YWludHMgdGhlIHNsaWRlciAodGh1bWIpIG9mIGEgR3RrU2Nyb2xsYmFyLiAqLworICBNT1pfR1RL
X1NDUk9MTEJBUl9USFVNQl9IT1JJWk9OVEFMLAorICBNT1pfR1RLX1NDUk9MTEJBUl9USFVNQl9W
RVJUSUNBTCwKKyAgLyogUGFpbnRzIGEgR3RrU2NhbGUuICovCisgIE1PWl9HVEtfU0NBTEVfSE9S
SVpPTlRBTCwKKyAgTU9aX0dUS19TQ0FMRV9WRVJUSUNBTCwKKyAgLyogUGFpbnRzIGEgR3RrU2Nh
bGUgdGh1bWIuICovCisgIE1PWl9HVEtfU0NBTEVfVEhVTUJfSE9SSVpPTlRBTCwKKyAgTU9aX0dU
S19TQ0FMRV9USFVNQl9WRVJUSUNBTCwKKyAgLyogUGFpbnRzIGEgR3RrU3BpbkJ1dHRvbiAqLwor
ICBNT1pfR1RLX1NQSU5CVVRUT05fVVAsCisgIE1PWl9HVEtfU1BJTkJVVFRPTl9ET1dOLAorICAv
KiBQYWludHMgdGhlIGdyaXBwZXIgb2YgYSBHdGtIYW5kbGVCb3guICovCisgIE1PWl9HVEtfR1JJ
UFBFUiwKKyAgLyogUGFpbnRzIGEgR3RrRW50cnkuICovCisgIE1PWl9HVEtfRU5UUlksCisgIC8q
IFBhaW50cyBhIEd0a09wdGlvbk1lbnUuICovCisgIE1PWl9HVEtfRFJPUERPV04sCisgIC8qIFBh
aW50cyBhIGRyb3Bkb3duIGFycm93IChhIEd0a0J1dHRvbiBjb250YWluaW5nIGEgZG93biBHdGtB
cnJvdykuICovCisgIE1PWl9HVEtfRFJPUERPV05fQVJST1csCisgIC8qIFBhaW50cyB0aGUgY29u
dGFpbmVyIHBhcnQgb2YgYSBHdGtDaGVja0J1dHRvbi4gKi8KKyAgTU9aX0dUS19DSEVDS0JVVFRP
Tl9DT05UQUlORVIsCisgIC8qIFBhaW50cyB0aGUgY29udGFpbmVyIHBhcnQgb2YgYSBHdGtSYWRp
b0J1dHRvbi4gKi8KKyAgTU9aX0dUS19SQURJT0JVVFRPTl9DT05UQUlORVIsCisgIC8qIFBhaW50
cyB0aGUgbGFiZWwgb2YgYSBHdGtDaGVja0J1dHRvbiAoZm9jdXMgb3V0bGluZSkgKi8KKyAgTU9a
X0dUS19DSEVDS0JVVFRPTl9MQUJFTCwKKyAgLyogUGFpbnRzIHRoZSBsYWJlbCBvZiBhIEd0a1Jh
ZGlvQnV0dG9uIChmb2N1cyBvdXRsaW5lKSAqLworICBNT1pfR1RLX1JBRElPQlVUVE9OX0xBQkVM
LAorICAvKiBQYWludHMgdGhlIGJhY2tncm91bmQgb2YgYSBHdGtIYW5kbGVCb3guICovCisgIE1P
Wl9HVEtfVE9PTEJBUiwKKyAgLyogUGFpbnRzIGEgR3RrVG9vbFRpcCAqLworICBNT1pfR1RLX1RP
T0xUSVAsCisgIC8qIFBhaW50cyBhIEd0a0ZyYW1lIChlLmcuIGEgc3RhdHVzIGJhciBwYW5lbCku
ICovCisgIE1PWl9HVEtfRlJBTUUsCisgIC8qIFBhaW50cyBhIEd0a1Byb2dyZXNzQmFyLiAqLwor
ICBNT1pfR1RLX1BST0dSRVNTQkFSLAorICAvKiBQYWludHMgYSBwcm9ncmVzcyBjaHVuayBvZiBh
IEd0a1Byb2dyZXNzQmFyLiAqLworICBNT1pfR1RLX1BST0dSRVNTX0NIVU5LLAorICAvKiBQYWlu
dHMgYSB0YWIgb2YgYSBHdGtOb3RlYm9vay4gZmxhZ3MgaXMgYSBHdGtUYWJGbGFncywgZGVmaW5l
ZCBhYm92ZS4gKi8KKyAgTU9aX0dUS19UQUIsCisgIC8qIFBhaW50cyB0aGUgYmFja2dyb3VuZCBh
bmQgYm9yZGVyIG9mIGEgR3RrTm90ZWJvb2suICovCisgIE1PWl9HVEtfVEFCUEFORUxTLAorICAv
KiBQYWludHMgdGhlIGJhY2tncm91bmQgb2YgdGhlIG1lbnUgYmFyLiAqLworICBNT1pfR1RLX01F
TlVCQVIsCisgIC8qIFBhaW50cyB0aGUgYmFja2dyb3VuZCBvZiBtZW51cywgY29udGV4dCBtZW51
cy4gKi8KKyAgTU9aX0dUS19NRU5VUE9QVVAsCisgIC8qIFBhaW50cyBpdGVtcyBvZiBtZW51YmFy
IGFuZCBwb3B1cHMuICovCisgIE1PWl9HVEtfTUVOVUlURU0sCisgIE1PWl9HVEtfQ0hFQ0tNRU5V
SVRFTSwKKyAgTU9aX0dUS19SQURJT01FTlVJVEVNLAorICAvKiBQYWludHMgdGhlIGJhY2tncm91
bmQgb2YgYSB3aW5kb3csIGRpYWxvZyBvciBwYWdlLiAqLworICBNT1pfR1RLX1dJTkRPVworfSBH
dGtUaGVtZVdpZGdldFR5cGU7CisKKy8qKiogR2VuZXJhbCBsaWJyYXJ5IGZ1bmN0aW9ucyAqKiov
CisvKioKKyAqIEluaXRpYWxpemVzIHRoZSBkcmF3aW5nIGxpYnJhcnkuICBZb3UgbXVzdCBjYWxs
IHRoaXMgZnVuY3Rpb24KKyAqIHByaW9yIHRvIHVzaW5nIGFueSBvdGhlciBmdW5jdGlvbmFsaXR5
LgorICogcmV0dXJuczogTU9aX0dUS19TVUNDRVNTIGlmIHRoZXJlIHdlcmUgbm8gZXJyb3JzCisg
KiAgICAgICAgICBNT1pfR1RLX1VOU0FGRV9USEVNRSBpZiB0aGUgY3VycmVudCB0aGVtZSBlbmdp
bmUgaXMga25vd24KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGNyYXNoIHdp
dGggZ3RrZHJhd2luZy4KKyAqLworZ2ludCBtb3pfZ3RrX2luaXQoKTsKKworLyoqCisgKiBFbmFi
bGUgR1RLKyAxLjIuOSsgdGhlbWUgZW5oYW5jZW1lbnRzLiBZb3UgbXVzdCBwcm92aWRlIGEgcG9p
bnRlcgorICogdG8gdGhlIEdUSysgMS4yLjkrIGZ1bmN0aW9uICJndGtfc3R5bGVfZ2V0X3Byb3Bf
ZXhwZXJpbWVudGFsIi4KKyAqIHN0eWxlR2V0UHJvcDogIHBvaW50ZXIgdG8gZ3RrX3N0eWxlX2dl
dF9wcm9wX2V4cGVyaW1lbnRhbAorICogCisgKiByZXR1cm5zOiBNT1pfR1RLX1NVQ0NFU1MgaWYg
dGhlcmUgd2FzIG5vIGVycm9yLCBhbiBlcnJvciBjb2RlIG90aGVyd2lzZQorICovCitnaW50IG1v
el9ndGtfZW5hYmxlX3N0eWxlX3Byb3BzKHN0eWxlX3Byb3BfdCBzdHlsZUdldFByb3ApOworCisv
KioKKyAqIFBlcmZvcm0gY2xlYW51cCBvZiB0aGUgZHJhd2luZyBsaWJyYXJ5LiBZb3Ugc2hvdWxk
IGNhbGwgdGhpcyBmdW5jdGlvbgorICogd2hlbiB5b3VyIHByb2dyYW0gZXhpdHMsIG9yIHlvdSBu
byBsb25nZXIgbmVlZCB0aGUgbGlicmFyeS4KKyAqCisgKiByZXR1cm5zOiBNT1pfR1RLX1NVQ0NF
U1MgaWYgdGhlcmUgd2FzIG5vIGVycm9yLCBhbiBlcnJvciBjb2RlIG90aGVyd2lzZQorICovCitn
aW50IG1vel9ndGtfc2h1dGRvd24oKTsKKworCisvKioqIFdpZGdldCBkcmF3aW5nICoqKi8KKy8q
KgorICogUGFpbnQgYSB3aWRnZXQgaW4gdGhlIGN1cnJlbnQgdGhlbWUuCisgKiB3aWRnZXQ6ICAg
YSBjb25zdGFudCBnaXZpbmcgdGhlIHdpZGdldCB0byBwYWludAorICogcmVjdDogICAgIHRoZSBi
b3VuZGluZyByZWN0YW5nbGUgZm9yIHRoZSB3aWRnZXQKKyAqIGNsaXByZWN0OiBhIGNsaXBwcmVj
dCByZWN0YW5nbGUgZm9yIHRoaXMgcGFpbnRpbmcgb3BlcmF0aW9uCisgKiBzdGF0ZTogICAgdGhl
IHN0YXRlIG9mIHRoZSB3aWRnZXQuICBpZ25vcmVkIGZvciBzb21lIHdpZGdldHMuCisgKiBmbGFn
czogICAgd2lkZ2V0LWRlcGVuZGFudCBmbGFnczsgc2VlIHRoZSBHdGtUaGVtZVdpZGdldFR5cGUg
ZGVmaW5pdGlvbi4KKyAqLworZ2ludAorbW96X2d0a193aWRnZXRfcGFpbnQoR3RrVGhlbWVXaWRn
ZXRUeXBlIHdpZGdldCwgR2RrRHJhd2FibGUqIGRyYXdhYmxlLAorICAgICAgICAgICAgICAgICAg
ICAgR2RrUmVjdGFuZ2xlKiByZWN0LCBHZGtSZWN0YW5nbGUqIGNsaXByZWN0LAorICAgICAgICAg
ICAgICAgICAgICAgR3RrV2lkZ2V0U3RhdGUqIHN0YXRlLCBnaW50IGZsYWdzKTsKKworCisvKioq
IFdpZGdldCBtZXRyaWNzICoqKi8KKy8qKgorICogR2V0IHRoZSBib3JkZXIgc2l6ZSBvZiBhIHdp
ZGdldAorICogbGVmdC9yaWdodDogIFtPVVRdIHRoZSB3aWRnZXQncyBsZWZ0L3JpZ2h0IGJvcmRl
cgorICogdG9wL2JvdHRvbTogIFtPVVRdIHRoZSB3aWRnZXQncyB0b3AvYm90dG9tIGJvcmRlcgor
ICogaW5odG1sOiAgICAgIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoaXMgd2lkZ2V0IHdp
bGwgYmUgZHJhd24gYXMgYSBIVE1MIGZvcm0gY29udHJvbCwKKyAqICAgICAgICAgICAgICBpbiBv
cmRlciB0byB3b3JrYXJvdW5kIGEgc2l6ZSBpc3N1ZSAoTU9aX0dUS19CVVRUT04gb25seSwgaWdu
b3JlZCBvdGhlcndpc2UpCisgKgorICogcmV0dXJuczogICAgTU9aX0dUS19TVUNDRVNTIGlmIHRo
ZXJlIHdhcyBubyBlcnJvciwgYW4gZXJyb3IgY29kZSBvdGhlcndpc2UKKyAqLworZ2ludCBtb3pf
Z3RrX2dldF93aWRnZXRfYm9yZGVyKEd0a1RoZW1lV2lkZ2V0VHlwZSB3aWRnZXQsIGdpbnQqIGxl
ZnQsIGdpbnQqIHRvcCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCogcmln
aHQsIGdpbnQqIGJvdHRvbSwgZ2Jvb2xlYW4gaW5odG1sKTsKKworLyoqCisgKiBHZXQgdGhlIGRl
c2lyZWQgc2l6ZSBvZiBhIEd0a0NoZWNrQnV0dG9uCisgKiBpbmRpY2F0b3Jfc2l6ZTogICAgIFtP
VVRdIHRoZSBpbmRpY2F0b3Igc2l6ZQorICogaW5kaWNhdG9yX3NwYWNpbmc6ICBbT1VUXSB0aGUg
c3BhY2luZyBiZXR3ZWVuIHRoZSBpbmRpY2F0b3IgYW5kIGl0cworICogICAgICAgICAgICAgICAg
ICAgICBjb250YWluZXIKKyAqCisgKiByZXR1cm5zOiAgICBNT1pfR1RLX1NVQ0NFU1MgaWYgdGhl
cmUgd2FzIG5vIGVycm9yLCBhbiBlcnJvciBjb2RlIG90aGVyd2lzZQorICovCitnaW50Cittb3pf
Z3RrX2NoZWNrYm94X2dldF9tZXRyaWNzKGdpbnQqIGluZGljYXRvcl9zaXplLCBnaW50KiBpbmRp
Y2F0b3Jfc3BhY2luZyk7CisKKy8qKgorICogR2V0IHRoZSBkZXNpcmVkIHNpemUgb2YgYSBHdGtS
YWRpb0J1dHRvbgorICogaW5kaWNhdG9yX3NpemU6ICAgICBbT1VUXSB0aGUgaW5kaWNhdG9yIHNp
emUKKyAqIGluZGljYXRvcl9zcGFjaW5nOiAgW09VVF0gdGhlIHNwYWNpbmcgYmV0d2VlbiB0aGUg
aW5kaWNhdG9yIGFuZCBpdHMKKyAqICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyCisgKgor
ICogcmV0dXJuczogICAgTU9aX0dUS19TVUNDRVNTIGlmIHRoZXJlIHdhcyBubyBlcnJvciwgYW4g
ZXJyb3IgY29kZSBvdGhlcndpc2UKKyAqLworZ2ludAorbW96X2d0a19yYWRpb19nZXRfbWV0cmlj
cyhnaW50KiBpbmRpY2F0b3Jfc2l6ZSwgZ2ludCogaW5kaWNhdG9yX3NwYWNpbmcpOworCisvKiog
R2V0IHRoZSBmb2N1cyBtZXRyaWNzIGZvciBhIGJ1dHRvbiwgY2hlY2tib3gsIG9yIHJhZGlvIGJ1
dHRvbi4KKyAqIGludGVyaW9yX2ZvY3VzOiAgICAgW09VVF0gd2hldGhlciB0aGUgZm9jdXMgaXMg
ZHJhd24gYXJvdW5kIHRoZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbCAoVFJV
RSkgb3IgYXJvdW5kIHRoZSB3aG9sZSBjb250YWluZXIgKEZBTFNFKQorICogZm9jdXNfd2lkdGg6
ICAgICAgICBbT1VUXSB0aGUgd2lkdGggb2YgdGhlIGZvY3VzIGxpbmUKKyAqIGZvY3VzX3BhZDog
ICAgICAgICAgW09VVF0gdGhlIHBhZGRpbmcgYmV0d2VlbiB0aGUgZm9jdXMgbGluZSBhbmQgY2hp
bGRyZW4KKyAqCisgKiByZXR1cm5zOiAgICBNT1pfR1RLX1NVQ0NFU1MgaWYgdGhlcmUgd2FzIG5v
IGVycm9yLCBhbiBlcnJvciBjb2RlIG90aGVyd2lzZQorICovCitnaW50Cittb3pfZ3RrX2J1dHRv
bl9nZXRfZm9jdXMoZ2Jvb2xlYW4qIGludGVyaW9yX2ZvY3VzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgIGdpbnQqIGZvY3VzX3dpZHRoLCBnaW50KiBmb2N1c19wYWQpOworZ2ludAorbW96X2d0
a19jaGVja2JveF9nZXRfZm9jdXMoZ2Jvb2xlYW4qIGludGVyaW9yX2ZvY3VzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2ludCogZm9jdXNfd2lkdGgsIGdpbnQqIGZvY3VzX3BhZCk7Citn
aW50Cittb3pfZ3RrX3JhZGlvX2dldF9mb2N1cyhnYm9vbGVhbiogaW50ZXJpb3JfZm9jdXMsCisg
ICAgICAgICAgICAgICAgICAgICAgICBnaW50KiBmb2N1c193aWR0aCwgZ2ludCogZm9jdXNfcGFk
KTsKKworLyoqCisgKiBHZXQgdGhlIGRlc2lyZWQgc2l6ZSBvZiBhIEd0a1NjYWxlIHRodW1iCisg
KiBvcmllbnQ6ICAgICAgICAgICBbSU5dIHRoZSBzY2FsZSBvcmllbnRhdGlvbgorICogdGh1bWJf
bGVuZ3RoOiAgICAgW09VVF0gdGhlIGxlbmd0aCBvZiB0aGUgdGh1bWIKKyAqIHRodW1iX2hlaWdo
dDogICAgIFtPVVRdIHRoZSBoZWlnaHQgb2YgdGhlIHRodW1iCisgKgorICogcmV0dXJuczogICAg
TU9aX0dUS19TVUNDRVNTIGlmIHRoZXJlIHdhcyBubyBlcnJvciwgYW4gZXJyb3IgY29kZSBvdGhl
cndpc2UKKyAqLworZ2ludAorbW96X2d0a19nZXRfc2NhbGV0aHVtYl9tZXRyaWNzKEd0a09yaWVu
dGF0aW9uIG9yaWVudCwgZ2ludCogdGh1bWJfbGVuZ3RoLCBnaW50KiB0aHVtYl9oZWlnaHQpOwor
CisvKioKKyAqIEdldCB0aGUgZGVzaXJlZCBtZXRyaWNzIGZvciBhIEd0a1Njcm9sbGJhcgorICog
bWV0cmljczogICAgICAgICAgW0lOXSAgc3RydWN0IHdoaWNoIHdpbGwgY29udGFpbiB0aGUgbWV0
cmljcworICoKKyAqIHJldHVybnM6ICAgIE1PWl9HVEtfU1VDQ0VTUyBpZiB0aGVyZSB3YXMgbm8g
ZXJyb3IsIGFuIGVycm9yIGNvZGUgb3RoZXJ3aXNlCisgKi8KK2dpbnQKK21vel9ndGtfZ2V0X3Nj
cm9sbGJhcl9tZXRyaWNzKE1vekd0a1Njcm9sbGJhck1ldHJpY3MqIG1ldHJpY3MpOworCisvKioK
KyAqIEdldCB0aGUgZGVzaXJlZCBzaXplIG9mIGEgZHJvcGRvd24gYXJyb3cgYnV0dG9uCisgKiB3
aWR0aDogICBbT1VUXSB0aGUgZGVzaXJlZCB3aWR0aAorICogaGVpZ2h0OiAgW09VVF0gdGhlIGRl
c2lyZWQgaGVpZ2h0CisgKgorICogcmV0dXJuczogICAgTU9aX0dUS19TVUNDRVNTIGlmIHRoZXJl
IHdhcyBubyBlcnJvciwgYW4gZXJyb3IgY29kZSBvdGhlcndpc2UKKyAqLworZ2ludCBtb3pfZ3Rr
X2dldF9kcm9wZG93bl9hcnJvd19zaXplKGdpbnQqIHdpZHRoLCBnaW50KiBoZWlnaHQpOworCisv
KioKKyAqIFJldHJpZXZlIGFuIGFjdHVhbCBHVEsgc2Nyb2xsYmFyIHdpZGdldCBmb3Igc3R5bGUg
YW5hbHlzaXMuIEl0IHdpbGwgbm90CisgKiBiZSBtb2RpZmllZC4KKyAqLworR3RrV2lkZ2V0KiBt
b3pfZ3RrX2dldF9zY3JvbGxiYXJfd2lkZ2V0KHZvaWQpOworCisjaWZkZWYgX19jcGx1c3BsdXMK
K30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYK
</data>
<flag name="review"
          id="7204"
          type_id="1"
          status="+"
          setter="aroben"
    />
          </attachment>
      

    </bug>

</bugzilla>