<?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>197198</bug_id>
          
          <creation_ts>2019-04-23 07:43:14 -0700</creation_ts>
          <short_desc>[LFC][IFC] Introduce DisplayRun to display tree</short_desc>
          <delta_ts>2019-05-25 13:15:19 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>koivisto</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1529576</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2019-04-23 07:43:14 -0700</bug_when>
    <thetext>ssia</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1529580</commentid>
    <comment_count>1</comment_count>
      <attachid>368031</attachid>
    <who name="alan">zalan</who>
    <bug_when>2019-04-23 07:52:15 -0700</bug_when>
    <thetext>Created attachment 368031
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1529898</commentid>
    <comment_count>2</comment_count>
      <attachid>368107</attachid>
    <who name="alan">zalan</who>
    <bug_when>2019-04-23 21:02:19 -0700</bug_when>
    <thetext>Created attachment 368107
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1530241</commentid>
    <comment_count>3</comment_count>
      <attachid>368198</attachid>
    <who name="alan">zalan</who>
    <bug_when>2019-04-24 16:33:29 -0700</bug_when>
    <thetext>Created attachment 368198
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1530298</commentid>
    <comment_count>4</comment_count>
      <attachid>368210</attachid>
    <who name="alan">zalan</who>
    <bug_when>2019-04-24 21:36:54 -0700</bug_when>
    <thetext>Created attachment 368210
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1530558</commentid>
    <comment_count>5</comment_count>
      <attachid>368282</attachid>
    <who name="alan">zalan</who>
    <bug_when>2019-04-25 16:05:34 -0700</bug_when>
    <thetext>Created attachment 368282
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1538117</commentid>
    <comment_count>6</comment_count>
      <attachid>370379</attachid>
    <who name="alan">zalan</who>
    <bug_when>2019-05-21 21:41:44 -0700</bug_when>
    <thetext>Created attachment 370379
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1538164</commentid>
    <comment_count>7</comment_count>
      <attachid>370394</attachid>
    <who name="alan">zalan</who>
    <bug_when>2019-05-22 06:23:42 -0700</bug_when>
    <thetext>Created attachment 370394
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1538904</commentid>
    <comment_count>8</comment_count>
      <attachid>370549</attachid>
    <who name="alan">zalan</who>
    <bug_when>2019-05-23 19:33:04 -0700</bug_when>
    <thetext>Created attachment 370549
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1539070</commentid>
    <comment_count>9</comment_count>
      <attachid>370549</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-05-24 14:40:47 -0700</bug_when>
    <thetext>Comment on attachment 370549
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=370549&amp;action=review

Cool patch!

&gt; Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp:285
&gt; +    // Traverse the tree and create inline items out of containers and leaf node. This essentially truns the tree inline structure into a flat one.

&quot;leaf nodes&quot;
&quot;turns&quot;

&gt; Source/WebCore/layout/inlineformatting/InlineLineBox.h:56
&gt; +    {
&gt; +    }

Weird indent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1539220</commentid>
    <comment_count>10</comment_count>
      <attachid>370639</attachid>
    <who name="alan">zalan</who>
    <bug_when>2019-05-25 11:52:48 -0700</bug_when>
    <thetext>Created attachment 370639
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1539223</commentid>
    <comment_count>11</comment_count>
      <attachid>370639</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-05-25 13:14:16 -0700</bug_when>
    <thetext>Comment on attachment 370639
Patch

Clearing flags on attachment: 370639

Committed r245776: &lt;https://trac.webkit.org/changeset/245776&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1539224</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-05-25 13:14:17 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1539225</commentid>
    <comment_count>13</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-05-25 13:15:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/51138490&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>368031</attachid>
            <date>2019-04-23 07:52:15 -0700</date>
            <delta_ts>2019-04-23 21:02:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-197198-20190423075152.patch</filename>
            <type>text/plain</type>
            <size>146540</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ0MDk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWYyZDVlM2FkZDNmOGMz
NjgxZDk0NWQ1YmZjYjQzZDVmZTI2MGQ3OS4uZTlhOThmMTE1ODJkMWFjYmQzMWY4NTAzMzc5M2Zl
NDAxYjcwN2JkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3MCBAQAorMjAxOS0wNC0yMyAgWmFs
YW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgorCisgICAgICAgIFtMRkNdW0lGQ10gSW50cm9k
dWNlIERpc3BsYXlSdW4gdG8gdGhlIGRpc3BsYXkgdHJlZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk3MTk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV0lQLgorCisgICAgICAgICogU291cmNlcy50eHQ6
CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IGxheW91dC9Gb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6Y29udGVudEhlaWdodEZvckZvcm1hdHRpbmdDb250ZXh0Um9vdCk6CisgICAgICAg
ICogbGF5b3V0L1ZlcmlmaWNhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OmFy
ZUVzc2VudGlhbGx5RXF1YWwpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpvdXRwdXRNaXNt
YXRjaGluZ1NpbXBsZUxpbmVJbmZvcm1hdGlvbklmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6Y2hlY2tGb3JNYXRjaGluZ05vblRleHRSdW5zKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6Y2hlY2tGb3JNYXRjaGluZ1RleHRSdW5zKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6b3V0cHV0TWlzbWF0Y2hpbmdDb21wbGV4TGluZUluZm9ybWF0aW9uSWZOZWVkZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMYXlvdXRTdGF0ZTo6dmVyaWZ5QW5kT3V0cHV0TWlz
bWF0Y2hpbmdMYXlvdXRUcmVlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6cmVz
b2x2ZUZvclJlbGF0aXZlUG9zaXRpb25JZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgICogbGF5
b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRy
eTo6aW5GbG93Tm9uUmVwbGFjZWRIZWlnaHRBbmRNYXJnaW4pOgorICAgICAgICAqIGxheW91dC9k
aXNwbGF5dHJlZS9EaXNwbGF5Qm94Lmg6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3g6
Omhvcml6b250YWxNYXJnaW4gY29uc3QpOgorICAgICAgICAqIGxheW91dC9kaXNwbGF5dHJlZS9E
aXNwbGF5UnVuLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9y
bWF0dGluZy9JbmxpbmVSdW4uaC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJ1bjo6VGV4
dENvbnRleHQ6OnNldFN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJ1bjo6VGV4
dENvbnRleHQ6OnNldExlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSdW46OlRl
eHRDb250ZXh0OjpzdGFydCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSdW46
OlRleHRDb250ZXh0OjplbmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UnVu
OjpUZXh0Q29udGV4dDo6bGVuZ3RoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6
OlJ1bjo6bG9naWNhbFRvcExlZnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6
UnVuOjpsb2dpY2FsTGVmdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSdW46
OmxvZ2ljYWxSaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSdW46Omxv
Z2ljYWxUb3AgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UnVuOjpsb2dpY2Fs
Qm90dG9tIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJ1bjo6bG9naWNhbFdp
ZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJ1bjo6bG9naWNhbEhlaWdo
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSdW46OnNldExvZ2ljYWxXaWR0
aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSdW46OnNldExvZ2ljYWxMZWZ0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJ1bjo6c2V0TG9naWNhbFJpZ2h0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXk6OlJ1bjo6bW92ZVZlcnRpY2FsbHkpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheTo6UnVuOjptb3ZlSG9yaXpvbnRhbGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXk6OlJ1bjo6ZXhwYW5kVmVydGljYWxseSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
OjpSdW46OmV4cGFuZEhvcml6b250YWxseSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpS
dW46OmV4cGFuc2lvbk9wcG9ydHVuaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJ1
bjo6c2V0VGV4dENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UnVuOjp0ZXh0
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSdW46OnRleHRDb250ZXh0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJ1bjo6UnVuKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXk6OlJ1bjo6VGV4dENvbnRleHQ6OlRleHRDb250ZXh0KToKKyAgICAgICAg
KiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpsYXlvdXQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dDo6Y29tcHV0ZUludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUludHJpbnNpY1dp
ZHRoRm9yRmxvYXRCb3ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVG
b3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUludHJpbnNpY1dpZHRoRm9ySW5saW5lQmxvY2sgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6
aW5pdGlhbGl6ZVZlcnRpY2FsTWFyZ2luRm9ySW5saW5lQ29udGFpbmVyIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVIb3Jp
em9udGFsTWFyZ2luIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9y
bWF0dGluZ0NvbnRleHQ6OmNvbGxlY3RJbmxpbmVDb250ZW50IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVNYXJnaW4gY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjphZGREZXRhY2hpbmdSdWxl
cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OmNyZWF0ZUFuZEFwcGVuZElu
bGluZUl0ZW0pOiBEZWxldGVkLgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lu
bGluZUZvcm1hdHRpbmdDb250ZXh0Lmg6CisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRp
bmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6TGluZTo6cnVucyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6
OmlzRW1wdHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjppc0ZpcnN0
TGluZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6OmF2YWlsYWJsZVdp
ZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZTo6bG9naWNhbExlZnQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjpsb2dpY2FsUmlnaHQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjppbml0KToKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6TGluZTo6Y2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0Ojpp
c1RyaW1tYWJsZUNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjpoYXNU
cmFpbGluZ1doaXRlc3BhY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5l
Ojp0cmFpbGluZ1doaXRlc3BhY2VXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkxpbmU6Omhhc0NvbnRlbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpM
aW5lOjphcHBlbmROb25CcmVha2FibGVTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkxpbmU6OmFwcGVuZFRleHRDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGlu
ZTo6YXBwZW5kTm9uVGV4dENvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5l
OjphZGp1c3RMb2dpY2FsTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6OmFk
anVzdExvZ2ljYWxSaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1h
dHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpsYXlvdXQgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6Y2xvc2VMaW5l
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQ6OkxpbmVMYXlvdXQ6OmNvbW1pdElubGluZUl0ZW1Ub0xpbmUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6Y29t
cHV0ZUZsb2F0UG9zaXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxp
bmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6anVzdGlmeVJ1bnMpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6Y29t
cHV0ZUV4cGFuc2lvbk9wcG9ydHVuaXRpZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6YWxpZ25SdW5zIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZTo6Y29udGVudExvZ2ljYWxMZWZ0IGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZTo6bGFzdFJ1blR5
cGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjpjb250
ZW50TG9naWNhbFJpZ2h0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6TGluZTo6YXBwZW5kQ29udGVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpzcGxpdElubGluZVJ1bklm
TmVlZGVkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OmNyZWF0ZUZpbmFsUnVucyBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0
OjpMaW5lTGF5b3V0Ojpwb3N0UHJvY2Vzc0lubGluZVJ1bnMgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91
dDo6YXBwZW5kQ29udGVudFRvTGluZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpwbGFjZUluRmxv
d1Bvc2l0aW9uZWRDaGlsZHJlbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpydW5XaWR0aCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9y
bWF0dGluZ1N0YXRlLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRp
bmdTdGF0ZTo6aW5saW5lSXRlbXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVG
b3JtYXR0aW5nU3RhdGU6OmFkZElubGluZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpJbmxpbmVGb3JtYXR0aW5nU3RhdGU6OmFkZElubGluZVJ1bik6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdTdGF0ZTo6aW5saW5lQ29udGVudCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdTdGF0ZTo6bGFzdElu
bGluZUl0ZW0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxp
bmVGb3JtYXR0aW5nU3RhdGU6OmFwcGVuZElubGluZVJ1bik6IERlbGV0ZWQuCisgICAgICAgICog
bGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lSXRlbS5oOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpJbmxpbmVJdGVtOjp0eXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6SW5saW5lSXRlbTo6aXNUZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
SW5saW5lSXRlbTo6aXNCb3ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxp
bmVJdGVtOjppc0hhcmRMaW5lQnJlYWsgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpJbmxpbmVJdGVtOjppc0Zsb2F0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
SW5saW5lSXRlbTo6aXNMaW5lQnJlYWsgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpJbmxpbmVJdGVtOjppc0NvbnRhaW5lclN0YXJ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6SW5saW5lSXRlbTo6aXNDb250YWluZXJFbmQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpJbmxpbmVJdGVtOjpJbmxpbmVJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6SW5saW5lSXRlbTo6c2V0V2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpJbmxpbmVJdGVtOjp3aWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Oklu
bGluZUl0ZW06OmFkZERldGFjaGluZ1J1bGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpJbmxpbmVJdGVtOjpkZXRhY2hpbmdSdWxlcyBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUl0ZW06Om5vbkJyZWFrYWJsZVN0YXJ0IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lSXRlbTo6bm9uQnJl
YWthYmxlRW5kIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5s
aW5lSXRlbTo6YWRkTm9uQnJlYWthYmxlU3RhcnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpJbmxpbmVJdGVtOjphZGROb25CcmVha2FibGVFbmQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVJdGVtOjp0ZXh0Q29udGVudCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJyZWFr
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnJlYWtlcjo6TGluZUJyZWFr
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnJlYWtlcjo6YnJlYWtpbmdDb250
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJyZWFrZXI6OndvcmRCcmVha2lu
Z0JlaGF2aW9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJyZWFrZXI6
OnJ1bldpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJyZWFrZXI6
OnRleHRXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUxpbmVC
cmVha2VyOjpJbmxpbmVMaW5lQnJlYWtlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OklubGluZUxpbmVCcmVha2VyOjpuZXh0UnVuKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6SW5saW5lTGluZUJyZWFrZXI6OmlzQXRDb250ZW50RW5kIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lTGluZUJyZWFrZXI6Omxp
bmVCcmVha2luZ0JlaGF2aW9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
SW5saW5lTGluZUJyZWFrZXI6OnJ1bldpZHRoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6SW5saW5lTGluZUJyZWFrZXI6OnRleHRXaWR0aCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUxpbmVCcmVha2VyOjpzcGxpdFJ1
bik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUxpbmVCcmVha2Vy
OjphZGp1c3RTcGxpdFBvc2l0aW9uV2l0aEh5cGhlbmF0aW9uIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnJlYWtlci5oOgorICAg
ICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZVJ1blByb3ZpZGVyLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVSdW5Qcm92aWRl
ci5oOiBSZW1vdmVkLgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZVRl
eHRJdGVtLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OmlzV2hpdGVzcGFj
ZUNoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OmlzU29mdExpbmVCcmVhayk6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Om1vdmVUb05leHROb25XaGl0ZXNwYWNlUG9zaXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0Ojptb3ZlVG9OZXh0QnJlYWthYmxlUG9zaXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVUZXh0SXRlbTo6Y3JlYXRlQW5k
QXBwZW5kVGV4dEl0ZW1zKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lVGV4dEl0
ZW06OklubGluZVRleHRJdGVtKToKKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9J
bmxpbmVUZXh0SXRlbS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5l
Zm9ybWF0dGluZy90ZXh0L1RleHRVdGlsLmguCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Oklu
bGluZVRleHRJdGVtOjpzdGFydCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Oklu
bGluZVRleHRJdGVtOjplbmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxp
bmVUZXh0SXRlbTo6bGVuZ3RoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5s
aW5lVGV4dEl0ZW06OmlzV2hpdGVzcGFjZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OklubGluZVRleHRJdGVtOjppc0NvbGxhcHNlZCBjb25zdCk6CisgICAgICAgICogbGF5b3V0
L2lubGluZWZvcm1hdHRpbmcvdGV4dC9UZXh0VXRpbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OlRleHRVdGlsOjpoeXBoZW5Qb3NpdGlvbkJlZm9yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OlRleHRVdGlsOjp3aWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRl
eHRVdGlsOjpmaXhlZFBpdGNoV2lkdGgpOgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0
aW5nL3RleHQvVGV4dFV0aWwuaDoKKyAgICAgICAgKiBsYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRS
ZXBsYWNlZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlJlcGxhY2VkOjppbnRyaW5z
aWNSYXRpbyBjb25zdCk6CisgICAgICAgICogbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0VHJlZUJ1
aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpvdXRwdXRJbmxpbmVSdW5zKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6b3V0cHV0TGF5b3V0Qm94KToKKyAgICAgICAgKiBw
YWdlL0ZyYW1lVmlld0xheW91dENvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bGF5b3V0
VXNpbmdGb3JtYXR0aW5nQ29udGV4dCk6CisKIDIwMTktMDQtMDkgIFphbGFuIEJ1anRhcyAgPHph
bGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbQXV0b1NpemluZ10gQXZvaWQgbWFraW5nIHRleHQg
cGFyYWdyYXBocyBzY3JvbGwgaG9yaXpvbnRhbGx5IHdoZW4gdGhlcmUgaXMgYSB3aWRlIHRhYmxl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXMudHh0CmluZGV4IDIxOWM4YjcwZGM5ZjU4OWFlZjY4NmUzYjJkYTE0NmFiMzkwZjc4
MDUuLmQwNTFkYmNiOWRkZmM5Y2JiOTVjMDQ3NjE4ZTE2MmYxZGZkYWUzNTcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMu
dHh0CkBAIC0xMzQzLDcgKzEzNDMsNyBAQCBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVG
b3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQuY3BwCiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9J
bmxpbmVGb3JtYXR0aW5nU3RhdGUuY3BwCiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVJ
bnZhbGlkYXRpb24uY3BwCiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnJlYWtl
ci5jcHAKLWxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZVJ1blByb3ZpZGVyLmNwcAorbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lVGV4dEl0ZW0uY3BwCiBsYXlvdXQvaW5saW5lZm9y
bWF0dGluZy90ZXh0L1RleHRVdGlsLmNwcAogbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0QmxvY2tD
b250YWluZXIuY3BwCiBsYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRCb3guY3BwCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggOGEwOTI3
Y2M2NTRkYzYwNTZlOWFkY2MyMTYwYjkyYjYyYWY2ZDk3Yy4uZGE3NGI5OGI5NTJlZjVjNjdhNTIy
YWEyOTQ3ZWE0OTQ5MmUxMTM4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjAwNCwxMCArMjAwNCw5IEBACiAJCTZFRDg3OEM1
MTQ3NDkzRjQwMDRDMzU5NyAvKiBSZW5kZXJUYWJsZUNhcHRpb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFRDg3OEMzMTQ3NDkzRjQwMDRDMzU5NyAv
KiBSZW5kZXJUYWJsZUNhcHRpb24uaCAqLzsgfTsKIAkJNkVEOEMzN0ExODNCRkY4QzAwOUU1M0JE
IC8qIEJveFNoYXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA2RUQ4QzM3ODE4M0JGRjhDMDA5RTUzQkQgLyogQm94U2hhcGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2RUU4QTc3MzEwRjgwM0YzMDA1
QTRBMjQgLyogSlNXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUU4QTc3MTEwRjgwM0YzMDA1QTRBMjQgLyogSlNX
ZWJHTENvbnRleHRBdHRyaWJ1dGVzLmggKi87IH07Ci0JCTZGMjE5RDc3MjE3OEQzNzIwMEJCMDMz
QyAvKiBJbmxpbmVSdW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDZGMjE5RDc0MjE3OEQzNzEwMEJCMDMzQyAvKiBJbmxpbmVSdW4uaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk2RjFDQzFERTIyNUY4QjQ5
MDA3MjBBRDIgLyogSW5saW5lVGV4dEl0ZW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDZGMUNDMUREMjI1RjhCNDIwMDcyMEFEMiAvKiBJbmxpbmVUZXh0
SXRlbS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTZGMjIyQjc2MUFCNTJEOEEwMDk0NjUxQSAvKiBXZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RjIyMkI3
NTFBQjUyRDhBMDA5NDY1MUEgLyogV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2UuY3BwICovOyB9
OwogCQk2RjNFMUY2MjIxMzYxNDIwMDBBNjVBMDggLyogRmxvYXRCb3guaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZGM0UxRjYxMjEzNjE0MTcwMEE2NUEw
OCAvKiBGbG9hdEJveC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07Ci0JCTZGNTIxN0M3MjE3N0Y1QTcwMDY1ODNCQiAvKiBJbmxpbmVSdW5Qcm92aWRlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkY1MjE3QzQy
MTc3RjVBNjAwNjU4M0JCIC8qIElubGluZVJ1blByb3ZpZGVyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNkY3Q0EzQzYyMDhDMjk1NzAwMkYyOUFC
IC8qIExheW91dFN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA2RjdDQTNDNDIwOEMyOTU2MDAyRjI5QUIgLyogTGF5b3V0U3RhdGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2RjdDQTNDQTIwOEMy
QjJFMDAyRjI5QUIgLyogSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZGN0NBM0M4MjA4QzJCMkUwMDJGMjlBQiAv
KiBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTZGOTk1QTE1MUE3MDc1NjIwMEE3MzVGNCAvKiBXZWJHTFN5
bmMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkY5
OTVBMTMxQTcwNzU2MjAwQTczNUY0IC8qIFdlYkdMU3luYy5jcHAgKi87IH07CkBAIC0yMDI4LDYg
KzIwMjcsNyBAQAogCQk2RkE0NDU0RTg5OEYyRkMxNjhCQzM4QzEgLyogSlNCZWZvcmVVbmxvYWRF
dmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjlF
MDRBMjdCRUQyRjgxRjk4RTkwMjJCIC8qIEpTQmVmb3JlVW5sb2FkRXZlbnQuaCAqLzsgfTsKIAkJ
NkZCMTFCNUMyMTc4M0ZEMDAwRTJBNTc0IC8qIFRleHRVdGlsLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RkIxMUI1OTIxNzgzRkNGMDBFMkE1NzQgLyog
VGV4dFV0aWwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk2RkI1RTIxNDIyMUYyNDUzMDAzOTg5Q0YgLyogQ29udGVudENoYW5nZU9ic2VydmVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RkI1RTIxMjIy
MUYyNDQ3MDAzOTg5Q0YgLyogQ29udGVudENoYW5nZU9ic2VydmVyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNkZDRTFBMUEyMjYxOEFCRDAwNEYw
MzQzIC8qIERpc3BsYXlSdW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDZGQ0UxQTE4MjI2MThBQjMwMDRGMDM0MyAvKiBEaXNwbGF5UnVuLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNkZFMTk4MTcyMTc4
Mzk3QzAwNDQ2RjA4IC8qIElubGluZUxpbmVCcmVha2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RkUxOTgxNTIxNzgzOTdDMDA0NDZGMDggLyogSW5s
aW5lTGluZUJyZWFrZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk2RkU3Q0ZBMjIxNzdFRUYyMDA1QjE1NzMgLyogSW5saW5lSXRlbS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkZFN0NGQTAyMTc3RUVG
MTAwNUIxNTczIC8qIElubGluZUl0ZW0uaCAqLzsgfTsKIAkJNkZFN0NGQTQyMTc3RUYxMDAwNUIx
NTczIC8qIExheW91dExpbmVCcmVha0JveC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNkZFN0NGQTMyMTc3RUYxMDAwNUIxNTczIC8qIExheW91dExpbmVC
cmVha0JveC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CkBAIC05MDg1LDE1ICs5MDg1LDE0IEBACiAJCTZFRThBNzcwMTBGODAzRjMwMDVBNEEyNCAvKiBK
U1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNkVFOEE3NzExMEY4MDNGMzAwNUE0QTI0IC8qIEpTV2ViR0xDb250ZXh0QXR0
cmlidXRlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dlYkdMQ29udGV4
dEF0dHJpYnV0ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkYwODMwREYyMEI0
Njk1MTAwOEE5NDVCIC8qIEJsb2NrRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk2RjIxOUQ3NDIxNzhEMzcxMDBCQjAzM0MgLyogSW5saW5l
UnVuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElubGluZVJ1bi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RjFDQzFEQzIyNUY4QjQxMDA3MjBBRDIgLyogSW5s
aW5lVGV4dEl0ZW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5saW5lVGV4dEl0ZW0uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RjFDQzFERDIyNUY4QjQyMDA3MjBBRDIgLyog
SW5saW5lVGV4dEl0ZW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5saW5lVGV4dEl0ZW0uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkYyMjJCNzQxQUI1MkQ2NDAwOTQ2NTFBIC8qIFdlYkdM
VmVydGV4QXJyYXlPYmplY3RCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdMVmVydGV4QXJyYXlP
YmplY3RCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGMjIyQjc1MUFCNTJE
OEEwMDk0NjUxQSAvKiBXZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGMjVCMjAwMjIwQTg1QUIwMDAwMDExQiAv
KiBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSW5saW5lRm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNkYzNUVGQUYyMTg3Q0JENTAwNDRFMEY0IC8qIElubGluZUZvcm1hdHRp
bmdDb250ZXh0R2VvbWV0cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSW5saW5lRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTZGM0UxRjVGMjEzNjE0MTcwMEE2NUEwOCAvKiBGbG9hdEJveC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBGbG9hdEJveC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTZGM0UxRjYxMjEzNjE0MTcwMEE2NUEwOCAvKiBGbG9hdEJveC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGbG9hdEJveC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2RjUyMTdDNDIxNzdG
NUE2MDA2NTgzQkIgLyogSW5saW5lUnVuUHJvdmlkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW5saW5lUnVuUHJvdmlkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJNkY1MjE3QzYyMTc3RjVBNjAwNjU4M0JCIC8qIElubGluZVJ1blByb3ZpZGVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElubGluZVJ1blByb3ZpZGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkY3MzkxOEMyMTA2Q0VERDAwNkFGMjYy
IC8qIExheW91dFVuaXRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheW91dFVuaXRzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGN0NBM0M0MjA4QzI5NTYwMDJGMjlBQiAvKiBMYXlvdXRT
dGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBMYXlvdXRTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk2RjdDQTNDNTIwOEMyOTU2MDAyRjI5QUIgLyogTGF5b3V0U3RhdGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gTGF5b3V0U3RhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtOTEzMCw2ICs5MTI5LDcgQEAKIAkJNkZCMTFCNUIyMTc4M0ZDRjAwRTJBNTc0IC8q
IFRleHRVdGlsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRleHRV
dGlsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkZCNUUyMTIyMjFGMjQ0NzAw
Mzk4OUNGIC8qIENvbnRlbnRDaGFuZ2VPYnNlcnZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb250ZW50
Q2hhbmdlT2JzZXJ2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkZCQjg2MDUy
MEI0NjRCNjAwREFEOTM4IC8qIEZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTZGQ0UxQTE4MjI2MThBQjMwMDRGMDM0MyAvKiBEaXNwbGF5UnVuLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IERpc3BsYXlSdW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNkZFMTk4MTMyMTc4Mzk3QjAwNDQ2RjA4IC8qIElubGluZUxpbmVCcmVha2VyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElubGluZUxpbmVCcmVha2VyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkZFMTk4MTUyMTc4Mzk3QzAwNDQ2RjA4IC8q
IElubGluZUxpbmVCcmVha2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElu
bGluZUxpbmVCcmVha2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGRTdBQTI2
MjFDMzdCNjMwMDI5NkRDRCAvKiBNYXJnaW5UeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXJnaW5U
eXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTYzMzgsOSArMTYzMzgsOCBA
QAogCQkJCTZGRTdDRkEwMjE3N0VFRjEwMDVCMTU3MyAvKiBJbmxpbmVJdGVtLmggKi8sCiAJCQkJ
NkZFMTk4MTMyMTc4Mzk3QjAwNDQ2RjA4IC8qIElubGluZUxpbmVCcmVha2VyLmNwcCAqLywKIAkJ
CQk2RkUxOTgxNTIxNzgzOTdDMDA0NDZGMDggLyogSW5saW5lTGluZUJyZWFrZXIuaCAqLywKLQkJ
CQk2RjIxOUQ3NDIxNzhEMzcxMDBCQjAzM0MgLyogSW5saW5lUnVuLmggKi8sCi0JCQkJNkY1MjE3
QzYyMTc3RjVBNjAwNjU4M0JCIC8qIElubGluZVJ1blByb3ZpZGVyLmNwcCAqLywKLQkJCQk2RjUy
MTdDNDIxNzdGNUE2MDA2NTgzQkIgLyogSW5saW5lUnVuUHJvdmlkZXIuaCAqLywKKwkJCQk2RjFD
QzFEQzIyNUY4QjQxMDA3MjBBRDIgLyogSW5saW5lVGV4dEl0ZW0uY3BwICovLAorCQkJCTZGMUND
MUREMjI1RjhCNDIwMDcyMEFEMiAvKiBJbmxpbmVUZXh0SXRlbS5oICovLAogCQkJKTsKIAkJCXBh
dGggPSBpbmxpbmVmb3JtYXR0aW5nOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTE2
MzUwLDYgKzE2MzQ5LDcgQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCTExOTlGQTVBMjA4RTNDN0Yw
MDIzNThDQyAvKiBEaXNwbGF5Qm94LmNwcCAqLywKIAkJCQkxMTk5RkE1OTIwOEUzQzdGMDAyMzU4
Q0MgLyogRGlzcGxheUJveC5oICovLAorCQkJCTZGQ0UxQTE4MjI2MThBQjMwMDRGMDM0MyAvKiBE
aXNwbGF5UnVuLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IGRpc3BsYXl0cmVlOwogCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTI4NzYyLDYgKzI4NzYyLDcgQEAKIAkJCQkyRDI5RUNDQTE5
MkYxRjFEMDA5ODRCNzggLyogRGlzcGxheVJlZnJlc2hNb25pdG9ySU9TLmggaW4gSGVhZGVycyAq
LywKIAkJCQkyREU3MDAyMzE5MkZFODJBMDBCMDk3NUMgLyogRGlzcGxheVJlZnJlc2hNb25pdG9y
TWFjLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDI5RUNDODE5MkVDQzgzMDA5ODRCNzggLyogRGlz
cGxheVJlZnJlc2hNb25pdG9yTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNkZDRTFBMUEy
MjYxOEFCRDAwNEYwMzQzIC8qIERpc3BsYXlSdW4uaCBpbiBIZWFkZXJzICovLAogCQkJCUZEMzE2
MDkxMTJCMDI2RjcwMEMxQTM1OSAvKiBEaXN0YW5jZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODQ3
MzBENzcxMjQ4RjBCMzAwRDNBOUM5IC8qIERpc3RhbnRMaWdodFNvdXJjZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQjJGMzRGRTYwRTgyRjgxNDAwRjYyN0NEIC8qIEROUy5oIGluIEhlYWRlcnMgKi8s
CkBAIC0yOTM5MCwxMSArMjkzOTEsMTAgQEAKIAkJCQk2RkU3Q0ZBMjIxNzdFRUYyMDA1QjE1NzMg
LyogSW5saW5lSXRlbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFNzg5MTYxMTIwRDYwODAwNjBF
Q0U1IC8qIElubGluZUl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk2RkUxOTgxNzIxNzgz
OTdDMDA0NDZGMDggLyogSW5saW5lTGluZUJyZWFrZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTZG
MjE5RDc3MjE3OEQzNzIwMEJCMDMzQyAvKiBJbmxpbmVSdW4uaCBpbiBIZWFkZXJzICovLAotCQkJ
CTZGNTIxN0M3MjE3N0Y1QTcwMDY1ODNCQiAvKiBJbmxpbmVSdW5Qcm92aWRlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQUE0QzNBNzcwQjJCMTY3OTAwMjMzNEEyIC8qIElubGluZVN0eWxlU2hlZXRP
d25lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFQTQ4NUEwOTdEOTMwMjAwOTRDOUU0IC8qIElu
bGluZVRleHRCb3guaCBpbiBIZWFkZXJzICovLAogCQkJCTFDMDEwNzAxMTkyNTk0REYwMDhBNDIw
MSAvKiBJbmxpbmVUZXh0Qm94U3R5bGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTZGMUNDMURFMjI1
RjhCNDkwMDcyMEFEMiAvKiBJbmxpbmVUZXh0SXRlbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEw
QTU4RTUxQkFBNDBCMTAwQzE5MjgyIC8qIEluUHJvY2Vzc0lEQlNlcnZlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMkVCNzY3NTcxREExOUJERjAwM0UyM0I1IC8qIElucHV0RXZlbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUU1MkVGREY0MjExMjg3NUEwMEFEMjgyQSAvKiBJbnB1dE1vZGUuaCBpbiBI
ZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdD
b250ZXh0R2VvbWV0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdDb250
ZXh0R2VvbWV0cnkuY3BwCmluZGV4IDk2N2NmZDQ5OThiNmExYTA4OTdkMDYyZmYwZGJhYjVlZDVh
MTczZTcuLjE4OTYzYzM1NjZkMmMxZDUzZGRlNzA4MDU2NmM3YWNlOGIzYTg5YzYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAK
QEAgLTExMiw4ICsxMTIsOCBAQCBzdGF0aWMgTGF5b3V0VW5pdCBjb250ZW50SGVpZ2h0Rm9yRm9y
bWF0dGluZ0NvbnRleHRSb290KGNvbnN0IExheW91dFN0YXRlJiBsYXlvdQogICAgICAgICAvLyBU
aGlzIGlzIHRlbXAgYW5kIHdpbGwgYmUgcmVwbGFjZWQgYnkgdGhlIGNvcnJlY3QgZGlzcGxheSBi
b3ggb25jZSBpbmxpbmUgcnVucyBtb3ZlIG92ZXIgdG8gdGhlIGRpc3BsYXkgdHJlZS4KICAgICAg
ICAgYXV0byYgaW5saW5lUnVucyA9IGRvd25jYXN0PElubGluZUZvcm1hdHRpbmdTdGF0ZT4obGF5
b3V0U3RhdGUuZXN0YWJsaXNoZWRGb3JtYXR0aW5nU3RhdGUobGF5b3V0Qm94KSkuaW5saW5lUnVu
cygpOwogICAgICAgICBpZiAoIWlubGluZVJ1bnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICB0
b3AgPSBpbmxpbmVSdW5zWzBdLmxvZ2ljYWxUb3AoKTsKLSAgICAgICAgICAgIGJvdHRvbSA9ICBp
bmxpbmVSdW5zLmxhc3QoKS5sb2dpY2FsQm90dG9tKCk7CisgICAgICAgICAgICB0b3AgPSBpbmxp
bmVSdW5zWzBdLT5sb2dpY2FsVG9wKCk7CisgICAgICAgICAgICBib3R0b20gPSAgaW5saW5lUnVu
cy5sYXN0KCktPmxvZ2ljYWxCb3R0b20oKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoZm9y
bWF0dGluZ1Jvb3RDb250YWluZXIuZXN0YWJsaXNoZXNCbG9ja0Zvcm1hdHRpbmdDb250ZXh0KCkg
fHwgbGF5b3V0Qm94LmlzRG9jdW1lbnRCb3goKSkgewogICAgICAgICBpZiAoZm9ybWF0dGluZ1Jv
b3RDb250YWluZXIuaGFzSW5GbG93Q2hpbGQoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L1ZlcmlmaWNhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvVmVyaWZp
Y2F0aW9uLmNwcAppbmRleCAyZTc3YzM5ZTkyMTQ0OTQyZWYyOWU0MGU0Yzc0MzZlNTExMjAwYmMy
Li4yYzRmNDg1Y2QzMjJiZGM3ZjE0YjcyZDI0YmRlM2I2MTA1NTBiZDc0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvVmVyaWZpY2F0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvVmVyaWZpY2F0aW9uLmNwcApAQCAtNDYsNyArNDYsNyBAQCBzdGF0aWMgYm9vbCBh
cmVFc3NlbnRpYWxseUVxdWFsKGZsb2F0IGEsIExheW91dFVuaXQgYikKICAgICBpZiAoYSA9PSBi
LnRvRmxvYXQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICByZXR1cm4gZmFicyhhIC0g
Yi50b0Zsb2F0KCkpIDw9IDggKiBMYXlvdXRVbml0OjplcHNpbG9uKCk7CisgICAgcmV0dXJuIGZh
YnMoYSAtIGIudG9GbG9hdCgpKSA8PSAxMCAqIExheW91dFVuaXQ6OmVwc2lsb24oKTsKIH0KIAog
c3RhdGljIGJvb2wgb3V0cHV0TWlzbWF0Y2hpbmdTaW1wbGVMaW5lSW5mb3JtYXRpb25JZk5lZWRl
ZChUZXh0U3RyZWFtJiBzdHJlYW0sIGNvbnN0IExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgY29u
c3QgUmVuZGVyQmxvY2tGbG93JiBibG9ja0Zsb3csIGNvbnN0IENvbnRhaW5lciYgaW5saW5lRm9y
bWF0dGluZ1Jvb3QpCkBAIC03MiwzMiArNzIsMzIgQEAgc3RhdGljIGJvb2wgb3V0cHV0TWlzbWF0
Y2hpbmdTaW1wbGVMaW5lSW5mb3JtYXRpb25JZk5lZWRlZChUZXh0U3RyZWFtJiBzdHJlYW0sIGMK
ICAgICAgICAgYXV0byYgc2ltcGxlUnVuID0gbGluZUxheW91dERhdGEtPnJ1bkF0KGkpOwogICAg
ICAgICBhdXRvJiBpbmxpbmVSdW4gPSBpbmxpbmVSdW5MaXN0W2ldOwogCi0gICAgICAgIGF1dG8g
bWF0Y2hpbmdSdW5zID0gYXJlRXNzZW50aWFsbHlFcXVhbChzaW1wbGVSdW4ubG9naWNhbExlZnQs
IGlubGluZVJ1bi5sb2dpY2FsTGVmdCgpKSAmJiBhcmVFc3NlbnRpYWxseUVxdWFsKHNpbXBsZVJ1
bi5sb2dpY2FsUmlnaHQsIGlubGluZVJ1bi5sb2dpY2FsUmlnaHQoKSk7CisgICAgICAgIGF1dG8g
bWF0Y2hpbmdSdW5zID0gYXJlRXNzZW50aWFsbHlFcXVhbChzaW1wbGVSdW4ubG9naWNhbExlZnQs
IGlubGluZVJ1bi0+bG9naWNhbExlZnQoKSkgJiYgYXJlRXNzZW50aWFsbHlFcXVhbChzaW1wbGVS
dW4ubG9naWNhbFJpZ2h0LCBpbmxpbmVSdW4tPmxvZ2ljYWxSaWdodCgpKTsKICAgICAgICAgaWYg
KG1hdGNoaW5nUnVucykKLSAgICAgICAgICAgIG1hdGNoaW5nUnVucyA9IChzaW1wbGVSdW4uc3Rh
cnQgPT0gaW5saW5lUnVuLnRleHRDb250ZXh0KCktPnN0YXJ0KCkgJiYgc2ltcGxlUnVuLmVuZCA9
PSAoaW5saW5lUnVuLnRleHRDb250ZXh0KCktPnN0YXJ0KCkgKyBpbmxpbmVSdW4udGV4dENvbnRl
eHQoKS0+bGVuZ3RoKCkpKTsKKyAgICAgICAgICAgIG1hdGNoaW5nUnVucyA9IHNpbXBsZVJ1bi5z
dGFydCA9PSBpbmxpbmVSdW4tPnRleHRDb250ZXh0KCktPnN0YXJ0KCkgJiYgc2ltcGxlUnVuLmVu
ZCA9PSBpbmxpbmVSdW4tPnRleHRDb250ZXh0KCktPmVuZCgpOwogICAgICAgICBpZiAobWF0Y2hp
bmdSdW5zKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgc3RyZWFtIDw8ICJNaXNt
YXRjaGluZzogc2ltcGxlIHJ1bigiIDw8IHNpbXBsZVJ1bi5zdGFydCA8PCAiLCAiIDw8IHNpbXBs
ZVJ1bi5lbmQgPDwgIikgKCIgPDwgc2ltcGxlUnVuLmxvZ2ljYWxMZWZ0IDw8ICIsICIgPDwgc2lt
cGxlUnVuLmxvZ2ljYWxSaWdodCA8PCAiKSBsYXlvdXQgcnVuKCIgPDwgaW5saW5lUnVuLnRleHRD
b250ZXh0KCktPnN0YXJ0KCkgPDwgIiwgIiA8PCBpbmxpbmVSdW4udGV4dENvbnRleHQoKS0+c3Rh
cnQoKSArIGlubGluZVJ1bi50ZXh0Q29udGV4dCgpLT5sZW5ndGgoKSA8PCAiKSAoIiA8PCBpbmxp
bmVSdW4ubG9naWNhbExlZnQoKSA8PCAiLCAiIDw8IGlubGluZVJ1bi5sb2dpY2FsUmlnaHQoKSA8
PCAiKSI7CisgICAgICAgIHN0cmVhbSA8PCAiTWlzbWF0Y2hpbmc6IHNpbXBsZSBydW4oIiA8PCBz
aW1wbGVSdW4uc3RhcnQgPDwgIiwgIiA8PCBzaW1wbGVSdW4uZW5kIDw8ICIpICgiIDw8IHNpbXBs
ZVJ1bi5sb2dpY2FsTGVmdCA8PCAiLCAiIDw8IHNpbXBsZVJ1bi5sb2dpY2FsUmlnaHQgPDwgIikg
bGF5b3V0IHJ1bigiIDw8IGlubGluZVJ1bi0+dGV4dENvbnRleHQoKS0+c3RhcnQoKSA8PCAiLCAi
IDw8IGlubGluZVJ1bi0+dGV4dENvbnRleHQoKS0+ZW5kKCkgPDwgIikgKCIgPDwgaW5saW5lUnVu
LT5sb2dpY2FsTGVmdCgpIDw8ICIsICIgPDwgaW5saW5lUnVuLT5sb2dpY2FsUmlnaHQoKSA8PCAi
KSI7CiAgICAgICAgIHN0cmVhbS5uZXh0TGluZSgpOwogICAgICAgICBtaXNtYXRjaGVkID0gdHJ1
ZTsKICAgICB9CiAgICAgcmV0dXJuIG1pc21hdGNoZWQ7CiB9CiAKLXN0YXRpYyBib29sIGNoZWNr
Rm9yTWF0Y2hpbmdOb25UZXh0UnVucyhjb25zdCBJbmxpbmVSdW4mIGlubGluZVJ1biwgY29uc3Qg
V2ViQ29yZTo6SW5saW5lQm94JiBpbmxpbmVCb3gpCitzdGF0aWMgYm9vbCBjaGVja0Zvck1hdGNo
aW5nTm9uVGV4dFJ1bnMoY29uc3QgRGlzcGxheTo6UnVuJiBpbmxpbmVSdW4sIGNvbnN0IFdlYkNv
cmU6OklubGluZUJveCYgaW5saW5lQm94KQogewogICAgIHJldHVybiBhcmVFc3NlbnRpYWxseUVx
dWFsKGlubGluZUJveC5sb2dpY2FsTGVmdCgpLCBpbmxpbmVSdW4ubG9naWNhbExlZnQoKSkKICAg
ICAgICAgJiYgYXJlRXNzZW50aWFsbHlFcXVhbChpbmxpbmVCb3gubG9naWNhbFJpZ2h0KCksIGlu
bGluZVJ1bi5sb2dpY2FsUmlnaHQoKSkKICAgICAgICAgJiYgYXJlRXNzZW50aWFsbHlFcXVhbChp
bmxpbmVCb3gubG9naWNhbEhlaWdodCgpLCBpbmxpbmVSdW4ubG9naWNhbEhlaWdodCgpKTsKIH0K
IAotc3RhdGljIGJvb2wgY2hlY2tGb3JNYXRjaGluZ1RleHRSdW5zKGNvbnN0IElubGluZVJ1biYg
aW5saW5lUnVuLCBmbG9hdCBsb2dpY2FsTGVmdCwgZmxvYXQgbG9naWNhbFJpZ2h0LCB1bnNpZ25l
ZCBzdGFydCwgdW5zaWduZWQgZW5kLCBmbG9hdCBsb2dpY2FsSGVpZ2h0KQorc3RhdGljIGJvb2wg
Y2hlY2tGb3JNYXRjaGluZ1RleHRSdW5zKGNvbnN0IERpc3BsYXk6OlJ1biYgaW5saW5lUnVuLCBm
bG9hdCBsb2dpY2FsTGVmdCwgZmxvYXQgbG9naWNhbFJpZ2h0LCB1bnNpZ25lZCBzdGFydCwgdW5z
aWduZWQgZW5kLCBmbG9hdCBsb2dpY2FsSGVpZ2h0KQogewogICAgIHJldHVybiBhcmVFc3NlbnRp
YWxseUVxdWFsKGxvZ2ljYWxMZWZ0LCBpbmxpbmVSdW4ubG9naWNhbExlZnQoKSkKICAgICAgICAg
JiYgYXJlRXNzZW50aWFsbHlFcXVhbChsb2dpY2FsUmlnaHQsIGlubGluZVJ1bi5sb2dpY2FsUmln
aHQoKSkKICAgICAgICAgJiYgc3RhcnQgPT0gaW5saW5lUnVuLnRleHRDb250ZXh0KCktPnN0YXJ0
KCkKLSAgICAgICAgJiYgKGVuZCA9PSAoaW5saW5lUnVuLnRleHRDb250ZXh0KCktPnN0YXJ0KCkg
KyBpbmxpbmVSdW4udGV4dENvbnRleHQoKS0+bGVuZ3RoKCkpKQorICAgICAgICAmJiBlbmQgPT0g
aW5saW5lUnVuLnRleHRDb250ZXh0KCktPmVuZCgpCiAgICAgICAgICYmIGFyZUVzc2VudGlhbGx5
RXF1YWwobG9naWNhbEhlaWdodCwgaW5saW5lUnVuLmxvZ2ljYWxIZWlnaHQoKSk7CiB9CiAKQEAg
LTEyNiwxOSArMTI2LDYgQEAgc3RhdGljIHZvaWQgY29sbGVjdElubGluZUJveGVzKGNvbnN0IFJl
bmRlckJsb2NrRmxvdyYgcm9vdCwgVmVjdG9yPFdlYkNvcmU6OklubGkKICAgICB9CiB9CiAKLXN0
YXRpYyBMYXlvdXRVbml0IHJlc29sdmVGb3JSZWxhdGl2ZVBvc2l0aW9uSWZOZWVkZWQoY29uc3Qg
SW5saW5lVGV4dEJveCYgaW5saW5lVGV4dEJveCkKLXsKLSAgICBMYXlvdXRVbml0IHhPZmZzZXQ7
Ci0gICAgYXV0byogcGFyZW50ID0gaW5saW5lVGV4dEJveC5wYXJlbnQoKTsKLSAgICB3aGlsZSAo
aXM8SW5saW5lRmxvd0JveD4ocGFyZW50KSkgewotICAgICAgICBhdXRvJiByZW5kZXJlciA9IHBh
cmVudC0+cmVuZGVyZXIoKTsKLSAgICAgICAgaWYgKHJlbmRlcmVyLmlzSW5GbG93UG9zaXRpb25l
ZCgpKQotICAgICAgICAgICAgeE9mZnNldCA9IHJlbmRlcmVyLm9mZnNldEZvckluRmxvd1Bvc2l0
aW9uKCkud2lkdGgoKTsKLSAgICAgICAgcGFyZW50ID0gcGFyZW50LT5wYXJlbnQoKTsKLSAgICB9
Ci0gICAgcmV0dXJuIHhPZmZzZXQ7Ci19Ci0KIHN0YXRpYyBib29sIG91dHB1dE1pc21hdGNoaW5n
Q29tcGxleExpbmVJbmZvcm1hdGlvbklmTmVlZGVkKFRleHRTdHJlYW0mIHN0cmVhbSwgY29uc3Qg
TGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGJsb2NrRmxv
dywgY29uc3QgQ29udGFpbmVyJiBpbmxpbmVGb3JtYXR0aW5nUm9vdCkKIHsKICAgICBhdXRvJiBp
bmxpbmVGb3JtYXR0aW5nU3RhdGUgPSBsYXlvdXRTdGF0ZS5lc3RhYmxpc2hlZEZvcm1hdHRpbmdT
dGF0ZShpbmxpbmVGb3JtYXR0aW5nUm9vdCk7CkBAIC0xNjQsNDcgKzE1MSw0OSBAQCBzdGF0aWMg
Ym9vbCBvdXRwdXRNaXNtYXRjaGluZ0NvbXBsZXhMaW5lSW5mb3JtYXRpb25JZk5lZWRlZChUZXh0
U3RyZWFtJiBzdHJlYW0sCiAgICAgICAgIGF1dG8mIGlubGluZVJ1biA9IGlubGluZVJ1bkxpc3Rb
cnVuSW5kZXhdOwogICAgICAgICBhdXRvIG1hdGNoaW5nUnVucyA9IGZhbHNlOwogICAgICAgICBp
ZiAoaW5saW5lVGV4dEJveCkgewotICAgICAgICAgICAgYXV0byB4T2Zmc2V0ID0gcmVzb2x2ZUZv
clJlbGF0aXZlUG9zaXRpb25JZk5lZWRlZCgqaW5saW5lVGV4dEJveCk7Ci0gICAgICAgICAgICBt
YXRjaGluZ1J1bnMgPSBjaGVja0Zvck1hdGNoaW5nVGV4dFJ1bnMoaW5saW5lUnVuLCBpbmxpbmVU
ZXh0Qm94LT5sb2dpY2FsTGVmdCgpICsgeE9mZnNldCwKLSAgICAgICAgICAgICAgICBpbmxpbmVU
ZXh0Qm94LT5sb2dpY2FsUmlnaHQoKSArIHhPZmZzZXQsCisgICAgICAgICAgICBtYXRjaGluZ1J1
bnMgPSBjaGVja0Zvck1hdGNoaW5nVGV4dFJ1bnMoKmlubGluZVJ1biwgaW5saW5lVGV4dEJveC0+
bG9naWNhbExlZnQoKSwKKyAgICAgICAgICAgICAgICBpbmxpbmVUZXh0Qm94LT5sb2dpY2FsUmln
aHQoKSwKICAgICAgICAgICAgICAgICBpbmxpbmVUZXh0Qm94LT5zdGFydCgpLAogICAgICAgICAg
ICAgICAgIGlubGluZVRleHRCb3gtPmVuZCgpICsgMSwKICAgICAgICAgICAgICAgICBpbmxpbmVU
ZXh0Qm94LT5sb2dpY2FsSGVpZ2h0KCkpOwogCiAgICAgICAgICAgICAvLyA8c3Bhbj5mb29iYXI8
L3NwYW4+Zm9vYmFyIGdlbmVyYXRlcyAyIGlubGluZSB0ZXh0IGJveGVzIHdoaWxlIHdlIG9ubHkg
Z2VuZXJhdGUgb25lIGlubGluZSBydW4uCiAgICAgICAgICAgICAvLyBhbHNvIDxkaXY+Zm9vPGlt
ZyBzdHlsZT0iZmxvYXQ6IGxlZnQ7Ij5iYXI8L2Rpdj4gdG9vLgotICAgICAgICAgICAgYXV0byBp
bmxpbmVSdW5FbmQgPSBpbmxpbmVSdW4udGV4dENvbnRleHQoKS0+c3RhcnQoKSArIGlubGluZVJ1
bi50ZXh0Q29udGV4dCgpLT5sZW5ndGgoKTsKLSAgICAgICAgICAgIGF1dG8gdGV4dFJ1bk1pZ2h0
QmVFeHRlbmRlZCA9ICFtYXRjaGluZ1J1bnMgJiYgaW5saW5lVGV4dEJveC0+ZW5kKCkgPCBpbmxp
bmVSdW5FbmQgJiYgaW5saW5lQm94SW5kZXggPCBpbmxpbmVCb3hlcy5zaXplKCkgLSAxOworICAg
ICAgICAgICAgYXV0byB0ZXh0UnVuTWlnaHRCZUV4dGVuZGVkID0gIW1hdGNoaW5nUnVucyAmJiBp
bmxpbmVSdW4tPnRleHRDb250ZXh0KCkgJiYgaW5saW5lVGV4dEJveC0+ZW5kKCkgPCBpbmxpbmVS
dW4tPnRleHRDb250ZXh0KCktPmVuZCgpICYmIGlubGluZUJveEluZGV4IDwgaW5saW5lQm94ZXMu
c2l6ZSgpIC0gMTsKIAogICAgICAgICAgICAgaWYgKHRleHRSdW5NaWdodEJlRXh0ZW5kZWQpIHsK
LSAgICAgICAgICAgICAgICBhdXRvIGxvZ2ljYWxMZWZ0ID0gaW5saW5lVGV4dEJveC0+bG9naWNh
bExlZnQoKSArIHhPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgYXV0byBsb2dpY2FsUmlnaHQgPSBp
bmxpbmVUZXh0Qm94LT5sb2dpY2FsUmlnaHQoKSArIHhPZmZzZXQ7CisgICAgICAgICAgICAgICAg
YXV0byBsb2dpY2FsTGVmdCA9IGlubGluZVRleHRCb3gtPmxvZ2ljYWxMZWZ0KCk7CisgICAgICAg
ICAgICAgICAgYXV0byBsb2dpY2FsUmlnaHQgPSBpbmxpbmVUZXh0Qm94LT5sb2dpY2FsUmlnaHQo
KTsKICAgICAgICAgICAgICAgICBhdXRvIHN0YXJ0ID0gaW5saW5lVGV4dEJveC0+c3RhcnQoKTsK
ICAgICAgICAgICAgICAgICBhdXRvIGVuZCA9IGlubGluZVRleHRCb3gtPmVuZCgpICsgMTsKKyAg
ICAgICAgICAgICAgICBhdXRvIG9yaWdpbmFsSW5saW5lQm94SW5kZXggPSBpbmxpbmVCb3hJbmRl
eDsgCiAgICAgICAgICAgICAgICAgYXV0byBpbmRleCA9ICsraW5saW5lQm94SW5kZXg7CiAgICAg
ICAgICAgICAgICAgZm9yICg7IGluZGV4IDwgaW5saW5lQm94ZXMuc2l6ZSgpOyArK2luZGV4KSB7
CiAgICAgICAgICAgICAgICAgICAgIGF1dG8qIGlubGluZUJveCA9IGlubGluZUJveGVzW2luZGV4
XTsKICAgICAgICAgICAgICAgICAgICAgYXV0byogaW5saW5lVGV4dEJveCA9IGlzPElubGluZVRl
eHRCb3g+KGlubGluZUJveCkgPyBkb3duY2FzdDxJbmxpbmVUZXh0Qm94PihpbmxpbmVCb3gpIDog
bnVsbHB0cjsKICAgICAgICAgICAgICAgICAgICAgLy8gQ2FuJ3QgbWl4IGRpZmZlcmVudCBpbmxp
bmUgYm94ZXMuCi0gICAgICAgICAgICAgICAgICAgIGlmICghaW5saW5lVGV4dEJveCkKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFpbmxpbmVUZXh0Qm94KSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpbmxpbmVCb3hJbmRleCA9IG9yaWdpbmFsSW5saW5lQm94SW5kZXg7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICAgICAgICAgIGF1dG8geE9mZnNldCA9IHJlc29sdmVGb3JSZWxhdGl2ZVBvc2l0aW9uSWZOZWVk
ZWQoKmlubGluZVRleHRCb3gpOwotICAgICAgICAgICAgICAgICAgICBsb2dpY2FsUmlnaHQgPSBp
bmxpbmVUZXh0Qm94LT5sb2dpY2FsUmlnaHQoKSArIHhPZmZzZXQ7CisgICAgICAgICAgICAgICAg
ICAgIGxvZ2ljYWxSaWdodCA9IGlubGluZVRleHRCb3gtPmxvZ2ljYWxSaWdodCgpOwogICAgICAg
ICAgICAgICAgICAgICBlbmQgKz0gKGlubGluZVRleHRCb3gtPmVuZCgpICsgMSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChjaGVja0Zvck1hdGNoaW5nVGV4dFJ1bnMoaW5saW5lUnVuLCBsb2dp
Y2FsTGVmdCwgbG9naWNhbFJpZ2h0LCBzdGFydCwgZW5kLCBpbmxpbmVUZXh0Qm94LT5sb2dpY2Fs
SGVpZ2h0KCkpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjaGVja0Zvck1hdGNoaW5nVGV4
dFJ1bnMoKmlubGluZVJ1biwgbG9naWNhbExlZnQsIGxvZ2ljYWxSaWdodCwgc3RhcnQsIGVuZCwg
aW5saW5lVGV4dEJveC0+bG9naWNhbEhlaWdodCgpKSkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgbWF0Y2hpbmdSdW5zID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlubGluZUJv
eEluZGV4ID0gaW5kZXg7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgIC8vIFdlbnQgdG9vIGZhcj8KLSAg
ICAgICAgICAgICAgICAgICAgaWYgKGVuZCA+PSBpbmxpbmVSdW5FbmQpCisgICAgICAgICAgICAg
ICAgICAgIGlmIChlbmQgPj0gaW5saW5lUnVuLT50ZXh0Q29udGV4dCgpLT5lbmQoKSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgaW5saW5lQm94SW5kZXggPSBvcmlnaW5hbElubGluZUJveElu
ZGV4OwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgbWF0Y2hpbmdSdW5zID0gY2hlY2tGb3JNYXRjaGluZ05vblRleHRSdW5zKGlubGlu
ZVJ1biwgKmlubGluZUJveCk7CisgICAgICAgICAgICBtYXRjaGluZ1J1bnMgPSBjaGVja0Zvck1h
dGNoaW5nTm9uVGV4dFJ1bnMoKmlubGluZVJ1biwgKmlubGluZUJveCk7CiAKIAogICAgICAgICBp
ZiAoIW1hdGNoaW5nUnVucykgewpAQCAtMjE0LDEwICsyMDMsMTAgQEAgc3RhdGljIGJvb2wgb3V0
cHV0TWlzbWF0Y2hpbmdDb21wbGV4TGluZUluZm9ybWF0aW9uSWZOZWVkZWQoVGV4dFN0cmVhbSYg
c3RyZWFtLAogICAgICAgICAgICAgICAgIHN0cmVhbSA8PCAiKCIgPDwgaW5saW5lVGV4dEJveC0+
c3RhcnQoKSA8PCAiLCAiIDw8IGlubGluZVRleHRCb3gtPmVuZCgpICsgMSA8PCAiKSI7CiAgICAg
ICAgICAgICBzdHJlYW0gPDwgIiAoIiA8PCBpbmxpbmVCb3gtPmxvZ2ljYWxMZWZ0KCkgPDwgIiwg
IiA8PCBpbmxpbmVCb3gtPmxvZ2ljYWxSaWdodCgpIDw8ICIpICgiIDw8IGlubGluZUJveC0+bG9n
aWNhbFdpZHRoKCkgPDwgIngiIDw8IGlubGluZUJveC0+bG9naWNhbEhlaWdodCgpIDw8ICIpIjsK
IAotICAgICAgICAgICAgc3RyZWFtIDw8ICJpbmxpbmUgcnVuICI7Ci0gICAgICAgICAgICBpZiAo
aW5saW5lUnVuLnRleHRDb250ZXh0KCkpCi0gICAgICAgICAgICAgICAgc3RyZWFtIDw8ICIoIiA8
PCBpbmxpbmVSdW4udGV4dENvbnRleHQoKS0+c3RhcnQoKSA8PCAiLCAiIDw8IGlubGluZVJ1bi50
ZXh0Q29udGV4dCgpLT5zdGFydCgpICsgaW5saW5lUnVuLnRleHRDb250ZXh0KCktPmxlbmd0aCgp
IDw8ICIpICI7Ci0gICAgICAgICAgICBzdHJlYW0gPDwgIigiIDw8IGlubGluZVJ1bi5sb2dpY2Fs
TGVmdCgpIDw8ICIsICIgPDwgaW5saW5lUnVuLmxvZ2ljYWxSaWdodCgpIDw8ICIpICgiIDw8IGlu
bGluZVJ1bi5sb2dpY2FsV2lkdGgoKSA8PCAieCIgPDwgaW5saW5lUnVuLmxvZ2ljYWxIZWlnaHQo
KSA8PCAiKSI7CisgICAgICAgICAgICBzdHJlYW0gPDwgIiBpbmxpbmUgcnVuICI7CisgICAgICAg
ICAgICBpZiAoaW5saW5lUnVuLT50ZXh0Q29udGV4dCgpKQorICAgICAgICAgICAgICAgIHN0cmVh
bSA8PCAiKCIgPDwgaW5saW5lUnVuLT50ZXh0Q29udGV4dCgpLT5zdGFydCgpIDw8ICIsICIgPDwg
aW5saW5lUnVuLT50ZXh0Q29udGV4dCgpLT5lbmQoKSA8PCAiKSI7CisgICAgICAgICAgICBzdHJl
YW0gPDwgIiAoIiA8PCBpbmxpbmVSdW4tPmxvZ2ljYWxMZWZ0KCkgPDwgIiwgIiA8PCBpbmxpbmVS
dW4tPmxvZ2ljYWxSaWdodCgpIDw8ICIpICgiIDw8IGlubGluZVJ1bi0+bG9naWNhbFdpZHRoKCkg
PDwgIngiIDw8IGlubGluZVJ1bi0+bG9naWNhbEhlaWdodCgpIDw8ICIpIjsKICAgICAgICAgICAg
IHN0cmVhbS5uZXh0TGluZSgpOwogICAgICAgICAgICAgbWlzbWF0Y2hlZCA9IHRydWU7CiAgICAg
ICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9ibG9ja2Zvcm1hdHRpbmcv
QmxvY2tGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcAppbmRl
eCBmOTYzM2I0MzhhMWIxYjIyN2RhNWI4NzE0NmZmMzFlYmM1Njg2MjVjLi4xY2M2Mzk3NTI3MzU2
N2VlYTRiMGRlOWMxODQwZTU3NDVkOTYzMjRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRp
bmdDb250ZXh0R2VvbWV0cnkuY3BwCkBAIC03Nyw3ICs3Nyw3IEBAIEhlaWdodEFuZE1hcmdpbiBC
bG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6aW5GbG93Tm9uUmVwbGFjZWRIZWlnaHRB
bmRNYXJnCiAgICAgICAgIGlmIChsYXlvdXRCb3guZXN0YWJsaXNoZXNJbmxpbmVGb3JtYXR0aW5n
Q29udGV4dCgpKSB7CiAgICAgICAgICAgICAvLyBUaGlzIGlzIHRlbXAgYW5kIHdpbGwgYmUgcmVw
bGFjZWQgYnkgdGhlIGNvcnJlY3QgZGlzcGxheSBib3ggb25jZSBpbmxpbmUgcnVucyBtb3ZlIG92
ZXIgdG8gdGhlIGRpc3BsYXkgdHJlZS4KICAgICAgICAgICAgIGF1dG8mIGlubGluZVJ1bnMgPSBk
b3duY2FzdDxJbmxpbmVGb3JtYXR0aW5nU3RhdGU+KGxheW91dFN0YXRlLmVzdGFibGlzaGVkRm9y
bWF0dGluZ1N0YXRlKGxheW91dEJveCkpLmlubGluZVJ1bnMoKTsKLSAgICAgICAgICAgIGF1dG8g
Ym90dG9tRWRnZSA9IGlubGluZVJ1bnMuaXNFbXB0eSgpID8gTGF5b3V0VW5pdCgpIDogaW5saW5l
UnVucy5sYXN0KCkubG9naWNhbEJvdHRvbSgpOworICAgICAgICAgICAgYXV0byBib3R0b21FZGdl
ID0gaW5saW5lUnVucy5pc0VtcHR5KCkgPyBMYXlvdXRVbml0KCkgOiBpbmxpbmVSdW5zLmxhc3Qo
KS0+bG9naWNhbEJvdHRvbSgpOwogICAgICAgICAgICAgcmV0dXJuIHsgYm90dG9tRWRnZSAtIGJv
cmRlckFuZFBhZGRpbmdUb3AsIG5vbkNvbGxhcHNlZE1hcmdpbiB9OwogICAgICAgICB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5Qm94Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheUJveC5oCmluZGV4IGQ0
Y2Q3YmExNDE2OTBlOGJjZmQzNzc5OWUyMmI2MmRiODhmZDYzZWYuLjExMzNlNDk5YjE5NWQwMzQ5
YzBlZjM1Mjg2ZGIyYWMzYzgzZTMzZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9kaXNwbGF5dHJlZS9EaXNwbGF5Qm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Rp
c3BsYXl0cmVlL0Rpc3BsYXlCb3guaApAQCAtMTM5LDYgKzEzOSw3IEBAIHB1YmxpYzoKICAgICBS
ZWN0IHJlY3RXaXRoTWFyZ2luKCkgY29uc3Q7CiAKICAgICBMYXlvdXQ6OlVzZWRWZXJ0aWNhbE1h
cmdpbiB2ZXJ0aWNhbE1hcmdpbigpIGNvbnN0OworICAgIExheW91dDo6VXNlZEhvcml6b250YWxN
YXJnaW4gaG9yaXpvbnRhbE1hcmdpbigpIGNvbnN0OwogICAgIExheW91dFVuaXQgbWFyZ2luQmVm
b3JlKCkgY29uc3Q7CiAgICAgTGF5b3V0VW5pdCBtYXJnaW5TdGFydCgpIGNvbnN0OwogICAgIExh
eW91dFVuaXQgbWFyZ2luQWZ0ZXIoKSBjb25zdDsKQEAgLTU4MCw2ICs1ODEsMTIgQEAgaW5saW5l
IExheW91dDo6VXNlZFZlcnRpY2FsTWFyZ2luIEJveDo6dmVydGljYWxNYXJnaW4oKSBjb25zdAog
ICAgIHJldHVybiBtX3ZlcnRpY2FsTWFyZ2luOwogfQogCitpbmxpbmUgTGF5b3V0OjpVc2VkSG9y
aXpvbnRhbE1hcmdpbiBCb3g6Omhvcml6b250YWxNYXJnaW4oKSBjb25zdAoreworICAgIEFTU0VS
VChtX2hhc1ZhbGlkSG9yaXpvbnRhbE1hcmdpbik7CisgICAgcmV0dXJuIG1faG9yaXpvbnRhbE1h
cmdpbjsKK30KKwogaW5saW5lIExheW91dFVuaXQgQm94OjptYXJnaW5CZWZvcmUoKSBjb25zdAog
ewogICAgIEFTU0VSVChtX2hhc1ZhbGlkVmVydGljYWxNYXJnaW4pOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2Rpc3BsYXl0cmVlL0Rpc3BsYXlSdW4uaCBiL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5UnVuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzI5Nzg1MmEy
MDExNzM4MTU2OGZlZGU2NDlhMTQ1YzI5YWJkNDBhOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5UnVuLmgKQEAgLTAsMCArMSwxMTIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShMQVlPVVRfRk9STUFU
VElOR19DT05URVhUKQorCisjaW5jbHVkZSAiSW5saW5lSXRlbS5oIgorI2luY2x1ZGUgIkxheW91
dFVuaXQuaCIKKyNpbmNsdWRlICJUZXh0RmxhZ3MuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
bmFtZXNwYWNlIERpc3BsYXkgeworCitzdHJ1Y3QgUnVuIHsKKyAgICBzdHJ1Y3QgVGV4dENvbnRl
eHQgeworICAgIHB1YmxpYzoKKyAgICAgICAgVGV4dENvbnRleHQodW5zaWduZWQgcG9zaXRpb24s
IHVuc2lnbmVkIGxlbmd0aCk7CisKKyAgICAgICAgdm9pZCBzZXRTdGFydCh1bnNpZ25lZCBzdGFy
dCkgeyBtX3N0YXJ0ID0gc3RhcnQ7IH0KKyAgICAgICAgdm9pZCBzZXRMZW5ndGgodW5zaWduZWQg
bGVuZ3RoKSB7IG1fbGVuZ3RoID0gbGVuZ3RoOyB9CisKKyAgICAgICAgdW5zaWduZWQgc3RhcnQo
KSBjb25zdCB7IHJldHVybiBtX3N0YXJ0OyB9CisgICAgICAgIHVuc2lnbmVkIGVuZCgpIGNvbnN0
IHsgcmV0dXJuIHN0YXJ0KCkgKyBsZW5ndGgoKTsgfQorICAgICAgICB1bnNpZ25lZCBsZW5ndGgo
KSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgdW5z
aWduZWQgbV9zdGFydDsKKyAgICAgICAgdW5zaWduZWQgbV9sZW5ndGg7CisgICAgfTsKKworICAg
IFJ1bihCb3g6OlJlY3QgbG9naWNhbFJlY3QsIE9wdGlvbmFsPFRleHRDb250ZXh0Pik7CisgICAg
UnVuKGNvbnN0IFJ1biYpOworCisgICAgTGF5b3V0UG9pbnQgbG9naWNhbFRvcExlZnQoKSBjb25z
dCB7IHJldHVybiBtX2xvZ2ljYWxSZWN0LnRvcExlZnQoKTsgfQorICAgIExheW91dFVuaXQgbG9n
aWNhbExlZnQoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxSZWN0LmxlZnQoKTsgfQorICAgIExh
eW91dFVuaXQgbG9naWNhbFJpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsUmVjdC5yaWdo
dCgpOyB9CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9wKCkgY29uc3QgeyByZXR1cm4gbV9sb2dp
Y2FsUmVjdC50b3AoKTsgfQorICAgIExheW91dFVuaXQgbG9naWNhbEJvdHRvbSgpIGNvbnN0IHsg
cmV0dXJuIG1fbG9naWNhbFJlY3QuYm90dG9tKCk7IH0KKworICAgIExheW91dFVuaXQgbG9naWNh
bFdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsUmVjdC53aWR0aCgpOyB9CisgICAgTGF5
b3V0VW5pdCBsb2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsUmVjdC5oZWln
aHQoKTsgfQorCisgICAgdm9pZCBzZXRMb2dpY2FsV2lkdGgoTGF5b3V0VW5pdCB3aWR0aCkgeyBt
X2xvZ2ljYWxSZWN0LnNldFdpZHRoKHdpZHRoKTsgfQorICAgIHZvaWQgc2V0TG9naWNhbExlZnQo
TGF5b3V0VW5pdCBsb2dpY2FsTGVmdCkgeyBtX2xvZ2ljYWxSZWN0LnNldExlZnQobG9naWNhbExl
ZnQpOyB9CisgICAgdm9pZCBzZXRMb2dpY2FsUmlnaHQoTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHQp
IHsgbV9sb2dpY2FsUmVjdC5zaGlmdFJpZ2h0VG8obG9naWNhbFJpZ2h0KTsgfQorICAgIHZvaWQg
bW92ZVZlcnRpY2FsbHkoTGF5b3V0VW5pdCBkZWx0YSkgeyBtX2xvZ2ljYWxSZWN0Lm1vdmVWZXJ0
aWNhbGx5KGRlbHRhKTsgfQorICAgIHZvaWQgbW92ZUhvcml6b250YWxseShMYXlvdXRVbml0IGRl
bHRhKSB7IG1fbG9naWNhbFJlY3QubW92ZUhvcml6b250YWxseShkZWx0YSk7IH0KKyAgICB2b2lk
IGV4cGFuZFZlcnRpY2FsbHkoTGF5b3V0VW5pdCBkZWx0YSkgeyBtX2xvZ2ljYWxSZWN0LmV4cGFu
ZCgwLCBkZWx0YSk7IH0KKyAgICB2b2lkIGV4cGFuZEhvcml6b250YWxseShMYXlvdXRVbml0IGRl
bHRhKSB7IG1fbG9naWNhbFJlY3QuZXhwYW5kKGRlbHRhLCAwKTsgfQorCisgICAgc3RydWN0IEV4
cGFuc2lvbk9wcG9ydHVuaXR5IHsKKyAgICAgICAgdW5zaWduZWQgY291bnQgeyAwIH07CisgICAg
ICAgIEV4cGFuc2lvbkJlaGF2aW9yIGJlaGF2aW9yIHsgRm9yYmlkTGVhZGluZ0V4cGFuc2lvbiB8
IEZvcmJpZFRyYWlsaW5nRXhwYW5zaW9uIH07CisgICAgICAgIExheW91dFVuaXQgZXhwYW5zaW9u
OworICAgIH07CisgICAgRXhwYW5zaW9uT3Bwb3J0dW5pdHkmIGV4cGFuc2lvbk9wcG9ydHVuaXR5
KCkgeyByZXR1cm4gbV9leHBhbnNpb25PcHBvcnR1bml0eTsgfQorCisgICAgdm9pZCBzZXRUZXh0
Q29udGV4dChUZXh0Q29udGV4dCB0ZXh0Q29udGV4dCkgeyBtX3RleHRDb250ZXh0LmVtcGxhY2Uo
dGV4dENvbnRleHQpOyB9CisgICAgT3B0aW9uYWw8VGV4dENvbnRleHQ+JiB0ZXh0Q29udGV4dCgp
IHsgcmV0dXJuIG1fdGV4dENvbnRleHQ7IH0KKyAgICBPcHRpb25hbDxUZXh0Q29udGV4dD4gdGV4
dENvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX3RleHRDb250ZXh0OyB9CisKK3ByaXZhdGU6Cisg
ICAgQm94OjpSZWN0IG1fbG9naWNhbFJlY3Q7CisgICAgRXhwYW5zaW9uT3Bwb3J0dW5pdHkgbV9l
eHBhbnNpb25PcHBvcnR1bml0eTsKKyAgICBPcHRpb25hbDxUZXh0Q29udGV4dD4gbV90ZXh0Q29u
dGV4dDsKK307CisKK2lubGluZSBSdW46OlJ1bihCb3g6OlJlY3QgbG9naWNhbFJlY3QsIE9wdGlv
bmFsPFRleHRDb250ZXh0PiB0ZXh0Q29udGV4dCkKKyAgICA6IG1fbG9naWNhbFJlY3QobG9naWNh
bFJlY3QpCisgICAgLCBtX3RleHRDb250ZXh0KHRleHRDb250ZXh0KQoreworfQorCitpbmxpbmUg
UnVuOjpUZXh0Q29udGV4dDo6VGV4dENvbnRleHQodW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxl
bmd0aCkKKyAgICA6IG1fc3RhcnQoc3RhcnQpCisgICAgLCBtX2xlbmd0aChsZW5ndGgpCit7Cit9
CisKK2lubGluZSBSdW46OlJ1bihjb25zdCBSdW4mIG90aGVyKQoreworICAgIG1fbG9naWNhbFJl
Y3QgPSBvdGhlci5tX2xvZ2ljYWxSZWN0OworICAgIG1fZXhwYW5zaW9uT3Bwb3J0dW5pdHkgPSBv
dGhlci5tX2V4cGFuc2lvbk9wcG9ydHVuaXR5OworICAgIG1fdGV4dENvbnRleHQgPSBvdGhlci5t
X3RleHRDb250ZXh0OworfQorCit9Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdD
b250ZXh0LmNwcAppbmRleCBlM2MxNTM2ZGNkMzJhMWVmZWQ4MTI4ZDMzMmIxMThlMjhiZGQ5ZTcy
Li4zMzY2ODQ5OTA5N2RkNmQ2ZGEzMGYwYmRkNDg4NTAzNTBlMTY1YWZlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwCkBAIC0zMCw3ICszMCw3IEBACiAKICNpbmNsdWRlICJJ
bmxpbmVGb3JtYXR0aW5nU3RhdGUuaCIKICNpbmNsdWRlICJJbmxpbmVMaW5lQnJlYWtlci5oIgot
I2luY2x1ZGUgIklubGluZVJ1blByb3ZpZGVyLmgiCisjaW5jbHVkZSAiSW5saW5lVGV4dEl0ZW0u
aCIKICNpbmNsdWRlICJMYXlvdXRCb3guaCIKICNpbmNsdWRlICJMYXlvdXRDb250YWluZXIuaCIK
ICNpbmNsdWRlICJMYXlvdXRJbmxpbmVCb3guaCIKQEAgLTc5LDE2ICs3OSwyMCBAQCB2b2lkIElu
bGluZUZvcm1hdHRpbmdDb250ZXh0OjpsYXlvdXQoKSBjb25zdAogICAgICAgICAgICAgbGF5b3V0
Rm9ybWF0dGluZ0NvbnRleHRSb290KCpsYXlvdXRCb3gsIHVzZWRWYWx1ZXMpOwogICAgICAgICBl
bHNlIGlmIChpczxDb250YWluZXI+KCpsYXlvdXRCb3gpKSB7CiAgICAgICAgICAgICBhdXRvJiBp
bmxpbmVDb250YWluZXIgPSBkb3duY2FzdDxJbmxpbmVDb250YWluZXI+KCpsYXlvdXRCb3gpOwot
ICAgICAgICAgICAgY29tcHV0ZU1hcmdpbihpbmxpbmVDb250YWluZXIsIHVzZWRWYWx1ZXMpOwor
ICAgICAgICAgICAgY29tcHV0ZUhvcml6b250YWxNYXJnaW4oaW5saW5lQ29udGFpbmVyLCB1c2Vk
VmFsdWVzKTsKICAgICAgICAgICAgIGNvbXB1dGVCb3JkZXJBbmRQYWRkaW5nKGlubGluZUNvbnRh
aW5lciwgdXNlZFZhbHVlcyk7CisgICAgICAgICAgICBpbml0aWFsaXplVmVydGljYWxNYXJnaW5G
b3JJbmxpbmVDb250YWluZXIoaW5saW5lQ29udGFpbmVyKTsKICAgICAgICAgfSBlbHNlIGlmIChs
YXlvdXRCb3gtPmlzUmVwbGFjZWQoKSkKICAgICAgICAgICAgIGNvbXB1dGVXaWR0aEFuZEhlaWdo
dEZvclJlcGxhY2VkSW5saW5lQm94KCpsYXlvdXRCb3gsIHVzZWRWYWx1ZXMpOwogICAgICAgICBs
YXlvdXRCb3ggPSBuZXh0SW5QcmVPcmRlcigqbGF5b3V0Qm94LCByb290KTsKICAgICB9CiAKLSAg
ICBJbmxpbmVSdW5Qcm92aWRlciBpbmxpbmVSdW5Qcm92aWRlcjsKLSAgICBjb2xsZWN0SW5saW5l
Q29udGVudChpbmxpbmVSdW5Qcm92aWRlcik7Ci0gICAgTGluZUxheW91dCgqdGhpcykubGF5b3V0
KGlubGluZVJ1blByb3ZpZGVyKTsKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBzdWNoIGEgd2FzdGUg
d2hlbiBpbnRyaW5zaWMgd2lkdGggY29tcHV0YXRpb24gYWxyZWFkeSBjb2xsZWN0ZWQgdGhlIGlu
bGluZSBpdGVtcy4KKyAgICBmb3JtYXR0aW5nU3RhdGUoKS5pbmxpbmVJdGVtcygpLmNsZWFyKCk7
CisgICAgZm9ybWF0dGluZ1N0YXRlKCkuaW5saW5lUnVucygpLmNsZWFyKCk7CisKKyAgICBjb2xs
ZWN0SW5saW5lQ29udGVudCgpOworICAgIExpbmVMYXlvdXQoKnRoaXMpLmxheW91dCgpOwogICAg
IExPR19XSVRIX1NUUkVBTShGb3JtYXR0aW5nQ29udGV4dExheW91dCwgc3RyZWFtIDw8ICJbRW5k
XSAtPiBpbmxpbmUgZm9ybWF0dGluZyBjb250ZXh0IC0+IGZvcm1hdHRpbmcgcm9vdCgiIDw8ICZy
b290IDw8ICIpIik7CiB9CiAKQEAgLTEyMCwzMyArMTI0LDM0IEBAIHZvaWQgSW5saW5lRm9ybWF0
dGluZ0NvbnRleHQ6OmNvbXB1dGVJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKCkgY29uc3QKICAg
ICAgICAgICAgICAgICBjb21wdXRlV2lkdGhBbmRNYXJnaW4oKmxheW91dEJveCwgdXNlZFZhbHVl
cyk7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBTaW1wbGUgaW5saW5l
IGNvbnRhaW5lciB3aXRoIG5vIGludHJpbnNpYyB3aWR0aCA8c3Bhbj4uCi0gICAgICAgICAgICAg
ICAgY29tcHV0ZU1hcmdpbigqbGF5b3V0Qm94LCB1c2VkVmFsdWVzKTsKKyAgICAgICAgICAgICAg
ICBjb21wdXRlSG9yaXpvbnRhbE1hcmdpbigqbGF5b3V0Qm94LCB1c2VkVmFsdWVzKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBsYXlvdXRCb3ggPSBuZXh0SW5QcmVPcmRlcigq
bGF5b3V0Qm94LCByb290KTsKICAgICB9CiAKLSAgICBJbmxpbmVSdW5Qcm92aWRlciBpbmxpbmVS
dW5Qcm92aWRlcjsKLSAgICBjb2xsZWN0SW5saW5lQ29udGVudChpbmxpbmVSdW5Qcm92aWRlcik7
CisgICAgY29sbGVjdElubGluZUNvbnRlbnQoKTsKIAogICAgIGF1dG8gbWF4aW11bUxpbmVXaWR0
aCA9IFsmXShhdXRvIGF2YWlsYWJsZVdpZHRoKSB7Ci0gICAgICAgIExheW91dFVuaXQgbWF4Q29u
dGVudExvZ2ljYWxSaWdodDsKLSAgICAgICAgYXV0byBsaW5lQnJlYWtlciA9IElubGluZUxpbmVC
cmVha2VyIHsgbGF5b3V0U3RhdGUsIGZvcm1hdHRpbmdTdGF0ZSgpLmlubGluZUNvbnRlbnQoKSwg
aW5saW5lUnVuUHJvdmlkZXIucnVucygpIH07Ci0gICAgICAgIExheW91dFVuaXQgbGluZUxvZ2lj
YWxSaWdodDsKLQogICAgICAgICAvLyBTd2l0Y2ggdG8gdGhlIG1pbi9tYXggZm9ybWF0dGluZyBy
b290IHdpZHRoIHZhbHVlcyBiZWZvcmUgZm9ybWF0dGluZyB0aGUgbGluZXMuCiAgICAgICAgIGZv
ciAoYXV0byogZm9ybWF0dGluZ1Jvb3QgOiBmb3JtYXR0aW5nQ29udGV4dFJvb3RMaXN0KSB7CiAg
ICAgICAgICAgICBhdXRvIGludHJpbnNpY1dpZHRocyA9IGxheW91dFN0YXRlLmZvcm1hdHRpbmdT
dGF0ZUZvckJveCgqZm9ybWF0dGluZ1Jvb3QpLmludHJpbnNpY1dpZHRoQ29uc3RyYWludHMoKmZv
cm1hdHRpbmdSb290KTsKICAgICAgICAgICAgIGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlv
dXRCb3goKmZvcm1hdHRpbmdSb290KS5zZXRDb250ZW50Qm94V2lkdGgoYXZhaWxhYmxlV2lkdGgg
PyBpbnRyaW5zaWNXaWR0aHMtPm1heGltdW0gOiBpbnRyaW5zaWNXaWR0aHMtPm1pbmltdW0pOwog
ICAgICAgICB9CisgICAgICAgIExheW91dFVuaXQgbWF4Q29udGVudExvZ2ljYWxSaWdodDsKKyAg
ICAgICAgTGF5b3V0VW5pdCBsaW5lTG9naWNhbFJpZ2h0OwogCi0gICAgICAgIHdoaWxlIChhdXRv
IHJ1biA9IGxpbmVCcmVha2VyLm5leHRSdW4obGluZUxvZ2ljYWxSaWdodCwgYXZhaWxhYmxlV2lk
dGgsICFsaW5lTG9naWNhbFJpZ2h0KSkgewotICAgICAgICAgICAgaWYgKHJ1bi0+cG9zaXRpb24g
PT0gSW5saW5lTGluZUJyZWFrZXI6OlJ1bjo6UG9zaXRpb246OkxpbmVCZWdpbikKKyAgICAgICAg
TGluZUJyZWFrZXIgbGluZUJyZWFrZXIobGF5b3V0U3RhdGUpOworICAgICAgICBhdXRvJiBpbmxp
bmVDb250ZW50ID0gZm9ybWF0dGluZ1N0YXRlKCkuaW5saW5lSXRlbXMoKTsKKyAgICAgICAgZm9y
IChhdXRvJiBpbmxpbmVJdGVtIDogaW5saW5lQ29udGVudCkgeworICAgICAgICAgICAgYXV0byBi
cmVha2luZ0NvbnRleHQgPSBsaW5lQnJlYWtlci5icmVha2luZ0NvbnRleHQoKmlubGluZUl0ZW0s
IHsgYXZhaWxhYmxlV2lkdGgsIGxpbmVMb2dpY2FsUmlnaHQsICFsaW5lTG9naWNhbFJpZ2h0IH0p
OworICAgICAgICAgICAgaWYgKGJyZWFraW5nQ29udGV4dC5icmVha2luZ0JlaGF2aW9yID09IExp
bmVCcmVha2VyOjpCcmVha2luZ0JlaGF2aW9yOjpXcmFwKQogICAgICAgICAgICAgICAgIGxpbmVM
b2dpY2FsUmlnaHQgPSAwOwotICAgICAgICAgICAgbGluZUxvZ2ljYWxSaWdodCArPSBydW4tPndp
ZHRoOworICAgICAgICAgICAgbGluZUxvZ2ljYWxSaWdodCArPSBpbmxpbmVJdGVtLT53aWR0aCgp
OwogCiAgICAgICAgICAgICBtYXhDb250ZW50TG9naWNhbFJpZ2h0ID0gc3RkOjptYXgobWF4Q29u
dGVudExvZ2ljYWxSaWdodCwgbGluZUxvZ2ljYWxSaWdodCk7CiAgICAgICAgIH0KKwogICAgICAg
ICByZXR1cm4gbWF4Q29udGVudExvZ2ljYWxSaWdodDsKICAgICB9OwogCkBAIC0xNjEsNyArMTY2
LDcgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUludHJpbnNpY1dpZHRo
Rm9yRmxvYXRCb3goY29uc3QgQm94JiBsYXlvdXQKIAogICAgIGF1dG8gdXNlZEhvcml6b250YWxW
YWx1ZXMgPSBVc2VkSG9yaXpvbnRhbFZhbHVlcyB7IH07CiAgICAgY29tcHV0ZUJvcmRlckFuZFBh
ZGRpbmcobGF5b3V0Qm94LCB1c2VkSG9yaXpvbnRhbFZhbHVlcyk7Ci0gICAgY29tcHV0ZU1hcmdp
bihsYXlvdXRCb3gsIHVzZWRIb3Jpem9udGFsVmFsdWVzKTsKKyAgICBjb21wdXRlSG9yaXpvbnRh
bE1hcmdpbihsYXlvdXRCb3gsIHVzZWRIb3Jpem9udGFsVmFsdWVzKTsKICAgICBsYXlvdXRTdGF0
ZS5jcmVhdGVGb3JtYXR0aW5nQ29udGV4dChsYXlvdXRCb3gpLT5jb21wdXRlSW50cmluc2ljV2lk
dGhDb25zdHJhaW50cygpOwogCiAgICAgYXV0byB1c2VkVmVydGljYWxWYWx1ZXMgPSBVc2VkVmVy
dGljYWxWYWx1ZXMgeyB9OwpAQCAtMTc4LDExICsxODMsMTYgQEAgdm9pZCBJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dDo6Y29tcHV0ZUludHJpbnNpY1dpZHRoRm9ySW5saW5lQmxvY2soY29uc3QgQm94
JiBsYXkKIAogICAgIGF1dG8gdXNlZFZhbHVlcyA9IFVzZWRIb3Jpem9udGFsVmFsdWVzIHsgfTsK
ICAgICBjb21wdXRlQm9yZGVyQW5kUGFkZGluZyhsYXlvdXRCb3gsIHVzZWRWYWx1ZXMpOwotICAg
IGNvbXB1dGVNYXJnaW4obGF5b3V0Qm94LCB1c2VkVmFsdWVzKTsKKyAgICBjb21wdXRlSG9yaXpv
bnRhbE1hcmdpbihsYXlvdXRCb3gsIHVzZWRWYWx1ZXMpOwogICAgIGxheW91dFN0YXRlKCkuY3Jl
YXRlRm9ybWF0dGluZ0NvbnRleHQobGF5b3V0Qm94KS0+Y29tcHV0ZUludHJpbnNpY1dpZHRoQ29u
c3RyYWludHMoKTsKIH0KIAotdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZU1h
cmdpbihjb25zdCBCb3gmIGxheW91dEJveCwgVXNlZEhvcml6b250YWxWYWx1ZXMgdXNlZFZhbHVl
cykgY29uc3QKK3ZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmluaXRpYWxpemVWZXJ0aWNh
bE1hcmdpbkZvcklubGluZUNvbnRhaW5lcihjb25zdCBCb3gmIGxheW91dEJveCkgY29uc3QKK3sK
KyAgICBsYXlvdXRTdGF0ZSgpLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KS5zZXRW
ZXJ0aWNhbE1hcmdpbih7IH0pOworfQorCit2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpj
b21wdXRlSG9yaXpvbnRhbE1hcmdpbihjb25zdCBCb3gmIGxheW91dEJveCwgVXNlZEhvcml6b250
YWxWYWx1ZXMgdXNlZFZhbHVlcykgY29uc3QKIHsKICAgICBhdXRvIGNvbXB1dGVkSG9yaXpvbnRh
bE1hcmdpbiA9IEdlb21ldHJ5Ojpjb21wdXRlZEhvcml6b250YWxNYXJnaW4obGF5b3V0Qm94LCB1
c2VkVmFsdWVzKTsKICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUoKS5kaXNwbGF5
Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7CkBAIC0yNTYsMzEgKzI2Niw3IEBAIHZvaWQgSW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVXaWR0aEFuZEhlaWdodEZvclJlcGxhY2VkSW5s
aW5lQm94KGNvbnN0IEJvCiAgICAgY29tcHV0ZUhlaWdodEFuZE1hcmdpbihsYXlvdXRCb3gpOwog
fQogCi1zdGF0aWMgdm9pZCBhZGREZXRhY2hpbmdSdWxlcyhJbmxpbmVJdGVtJiBpbmxpbmVJdGVt
LCBPcHRpb25hbDxMYXlvdXRVbml0PiBub25CcmVha2FibGVTdGFydFdpZHRoLCBPcHRpb25hbDxM
YXlvdXRVbml0PiBub25CcmVha2FibGVFbmRXaWR0aCkKLXsKLSAgICBPcHRpb25TZXQ8SW5saW5l
SXRlbTo6RGV0YWNoaW5nUnVsZT4gZGV0YWNoaW5nUnVsZXM7Ci0gICAgaWYgKG5vbkJyZWFrYWJs
ZVN0YXJ0V2lkdGgpIHsKLSAgICAgICAgZGV0YWNoaW5nUnVsZXMuYWRkKElubGluZUl0ZW06OkRl
dGFjaGluZ1J1bGU6OkJyZWFrQXRTdGFydCk7Ci0gICAgICAgIGlubGluZUl0ZW0uYWRkTm9uQnJl
YWthYmxlU3RhcnQoKm5vbkJyZWFrYWJsZVN0YXJ0V2lkdGgpOwotICAgIH0KLSAgICBpZiAobm9u
QnJlYWthYmxlRW5kV2lkdGgpIHsKLSAgICAgICAgZGV0YWNoaW5nUnVsZXMuYWRkKElubGluZUl0
ZW06OkRldGFjaGluZ1J1bGU6OkJyZWFrQXRFbmQpOwotICAgICAgICBpbmxpbmVJdGVtLmFkZE5v
bkJyZWFrYWJsZUVuZCgqbm9uQnJlYWthYmxlRW5kV2lkdGgpOwotICAgIH0KLSAgICBpbmxpbmVJ
dGVtLmFkZERldGFjaGluZ1J1bGUoZGV0YWNoaW5nUnVsZXMpOwotfQotCi1zdGF0aWMgSW5saW5l
SXRlbSYgY3JlYXRlQW5kQXBwZW5kSW5saW5lSXRlbShJbmxpbmVSdW5Qcm92aWRlciYgaW5saW5l
UnVuUHJvdmlkZXIsIElubGluZUNvbnRlbnQmIGlubGluZUNvbnRlbnQsIGNvbnN0IEJveCYgbGF5
b3V0Qm94KQotewotICAgIEFTU0VSVChsYXlvdXRCb3guaXNJbmxpbmVMZXZlbEJveCgpIHx8IGxh
eW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpKTsKLSAgICBhdXRvIGlubGluZUl0ZW0gPSBz
dGQ6Om1ha2VfdW5pcXVlPElubGluZUl0ZW0+KGxheW91dEJveCk7Ci0gICAgYXV0byogaW5saW5l
SXRlbVB0ciA9IGlubGluZUl0ZW0uZ2V0KCk7Ci0gICAgaW5saW5lQ29udGVudC5hZGQoV1RGTW92
ZShpbmxpbmVJdGVtKSk7Ci0gICAgaW5saW5lUnVuUHJvdmlkZXIuYXBwZW5kKCppbmxpbmVJdGVt
UHRyKTsKLSAgICByZXR1cm4gKmlubGluZUl0ZW1QdHI7Ci19Ci0KLXZvaWQgSW5saW5lRm9ybWF0
dGluZ0NvbnRleHQ6OmNvbGxlY3RJbmxpbmVDb250ZW50KElubGluZVJ1blByb3ZpZGVyJiBpbmxp
bmVSdW5Qcm92aWRlcikgY29uc3QKK3ZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbGxl
Y3RJbmxpbmVDb250ZW50KCkgY29uc3QKIHsKICAgICBpZiAoIWlzPENvbnRhaW5lcj4ocm9vdCgp
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjg4LDU2ICsyNzQsMjAgQEAgdm9pZCBJbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dDo6Y29sbGVjdElubGluZUNvbnRlbnQoSW5saW5lUnVuUHJvdmlkZXImIGlu
bGluZVJ1blAKICAgICBpZiAoIXJvb3QuaGFzSW5GbG93T3JGbG9hdGluZ0NoaWxkKCkpCiAgICAg
ICAgIHJldHVybjsKICAgICAvLyBUaGUgbG9naWMgaGVyZSBpcyB2ZXJ5IHNpbWlsYXIgdG8gQkZD
IGxheW91dC4KLSAgICAvLyAxLiBUcmF2ZXJzIGRvd24gdGhlIGxheW91dCB0cmVlIGFuZCBjb2xs
ZWN0ICJzdGFydCIgdW5icmVha2FibGUgd2lkdGhzIChtYXJnaW4tbGVmdCwgYm9yZGVyLWxlZnQs
IHBhZGRpbmctbGVmdCkKLSAgICAvLyAyLiBDcmVhdGUgSW5saW5lSXRlbSBwZXIgbGVhZiBpbmxp
bmUgYm94ICh0ZXh0IG5vZGVzLCBpbmxpbmUtYmxvY2tzLCBmbG9hdHMpIGFuZCBzZXQgInN0YXJ0
IiB1bmJyZWFrYWJsZSB3aWR0aCBvbiB0aGVtLiAKLSAgICAvLyAzLiBDbGltYiBiYWNrIGFuZCBj
b2xsZWN0ICJlbmQiIHVuYnJlYWthYmxlIHdpZHRoIGFuZCBzZXQgaXQgb24gdGhlIGxhc3QgSW5s
aW5lSXRlbS4KLSAgICBhdXRvJiBsYXlvdXRTdGF0ZSA9IHRoaXMtPmxheW91dFN0YXRlKCk7Ci0g
ICAgYXV0byYgaW5saW5lQ29udGVudCA9IGZvcm1hdHRpbmdTdGF0ZSgpLmlubGluZUNvbnRlbnQo
KTsKLQotICAgIGVudW0gY2xhc3MgTm9uQnJlYWthYmxlV2lkdGhUeXBlIHsgU3RhcnQsIEVuZCB9
OwotICAgIGF1dG8gbm9uQnJlYWthYmxlV2lkdGggPSBbJl0oYXV0byYgY29udGFpbmVyLCBhdXRv
IHR5cGUpIHsKLSAgICAgICAgYXV0byYgZGlzcGxheUJveCA9IGxheW91dFN0YXRlLmRpc3BsYXlC
b3hGb3JMYXlvdXRCb3goY29udGFpbmVyKTsKLSAgICAgICAgaWYgKHR5cGUgPT0gTm9uQnJlYWth
YmxlV2lkdGhUeXBlOjpTdGFydCkKLSAgICAgICAgICAgIHJldHVybiBkaXNwbGF5Qm94Lm1hcmdp
blN0YXJ0KCkgKyBkaXNwbGF5Qm94LmJvcmRlckxlZnQoKSArIGRpc3BsYXlCb3gucGFkZGluZ0xl
ZnQoKS52YWx1ZU9yKDApOwotICAgICAgICByZXR1cm4gZGlzcGxheUJveC5tYXJnaW5FbmQoKSAr
IGRpc3BsYXlCb3guYm9yZGVyUmlnaHQoKSArIGRpc3BsYXlCb3gucGFkZGluZ1JpZ2h0KCkudmFs
dWVPcigwKTsKLSAgICB9OwotCisgICAgYXV0byYgZm9ybWF0dGluZ1N0YXRlID0gdGhpcy0+Zm9y
bWF0dGluZ1N0YXRlKCk7CiAgICAgTGF5b3V0UXVldWUgbGF5b3V0UXVldWU7CiAgICAgbGF5b3V0
UXVldWUuYXBwZW5kKHJvb3QuZmlyc3RJbkZsb3dPckZsb2F0aW5nQ2hpbGQoKSk7Ci0KLSAgICBP
cHRpb25hbDxMYXlvdXRVbml0PiBub25CcmVha2FibGVTdGFydFdpZHRoOwotICAgIE9wdGlvbmFs
PExheW91dFVuaXQ+IG5vbkJyZWFrYWJsZUVuZFdpZHRoOwotICAgIElubGluZUl0ZW0qIGxhc3RJ
bmxpbmVJdGVtID0gbnVsbHB0cjsKICAgICB3aGlsZSAoIWxheW91dFF1ZXVlLmlzRW1wdHkoKSkg
eworICAgICAgICBhdXRvIHRyZWF0QXNJbmxpbmVDb250YWluZXIgPSBbXShhdXRvJiBsYXlvdXRC
b3gpIHsKKyAgICAgICAgICAgIHJldHVybiBpczxDb250YWluZXI+KGxheW91dEJveCkgJiYgIWxh
eW91dEJveC5lc3RhYmxpc2hlc0Zvcm1hdHRpbmdDb250ZXh0KCk7CisgICAgICAgIH07CiAgICAg
ICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSAqbGF5b3V0
UXVldWUubGFzdCgpOwotICAgICAgICAgICAgaWYgKCFpczxDb250YWluZXI+KGxheW91dEJveCkp
CisgICAgICAgICAgICBpZiAoIXRyZWF0QXNJbmxpbmVDb250YWluZXIobGF5b3V0Qm94KSkKICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIHN0YXJ0IG9m
IGFuIGlubGluZSBjb250YWluZXIgKGUuZy4gPHNwYW4+KS4KKyAgICAgICAgICAgIGZvcm1hdHRp
bmdTdGF0ZS5hZGRJbmxpbmVJdGVtKHN0ZDo6bWFrZV91bmlxdWU8SW5saW5lSXRlbT4obGF5b3V0
Qm94LCBJbmxpbmVJdGVtOjpUeXBlOjpDb250YWluZXJTdGFydCkpOwogICAgICAgICAgICAgYXV0
byYgY29udGFpbmVyID0gZG93bmNhc3Q8Q29udGFpbmVyPihsYXlvdXRCb3gpOwotCi0gICAgICAg
ICAgICBpZiAoY29udGFpbmVyLmVzdGFibGlzaGVzRm9ybWF0dGluZ0NvbnRleHQoKSkgewotICAg
ICAgICAgICAgICAgIC8vIEZvcm1hdHRpbmcgY29udGV4dHMgYXJlIHRyZWF0ZWQgYXMgbGVhZiBu
b2Rlcy4KLSAgICAgICAgICAgICAgICBhdXRvJiBpbmxpbmVJdGVtID0gY3JlYXRlQW5kQXBwZW5k
SW5saW5lSXRlbShpbmxpbmVSdW5Qcm92aWRlciwgaW5saW5lQ29udGVudCwgY29udGFpbmVyKTsK
LSAgICAgICAgICAgICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUuZGlzcGxheUJv
eEZvckxheW91dEJveChjb250YWluZXIpOwotICAgICAgICAgICAgICAgIGF1dG8gY3VycmVudE5v
bkJyZWFrYWJsZVN0YXJ0V2lkdGggPSBub25CcmVha2FibGVTdGFydFdpZHRoLnZhbHVlT3IoMCkg
KyBkaXNwbGF5Qm94Lm1hcmdpblN0YXJ0KCkgKyBub25CcmVha2FibGVFbmRXaWR0aC52YWx1ZU9y
KDApOwotICAgICAgICAgICAgICAgIGFkZERldGFjaGluZ1J1bGVzKGlubGluZUl0ZW0sIGN1cnJl
bnROb25CcmVha2FibGVTdGFydFdpZHRoLCBkaXNwbGF5Qm94Lm1hcmdpbkVuZCgpKTsKLSAgICAg
ICAgICAgICAgICBub25CcmVha2FibGVTdGFydFdpZHRoID0geyB9OwotICAgICAgICAgICAgICAg
IG5vbkJyZWFrYWJsZUVuZFdpZHRoID0geyB9OwotCi0gICAgICAgICAgICAgICAgLy8gRm9ybWF0
dGluZyBjb250ZXh0IHJvb3RzIHRha2UgY2FyZSBvZiB0aGVpciBzdWJ0cmVlcy4gQ29udGludWUg
d2l0aCBuZXh0IHNpYmxpbmcgaWYgZXhpc3RzLgotICAgICAgICAgICAgICAgIGxheW91dFF1ZXVl
LnJlbW92ZUxhc3QoKTsKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRhaW5lci5uZXh0SW5GbG93
T3JGbG9hdGluZ1NpYmxpbmcoKSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgbGF5b3V0UXVldWUuYXBwZW5kKGNvbnRhaW5lci5uZXh0SW5GbG93T3JGbG9hdGlu
Z1NpYmxpbmcoKSk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoaXMgbm9uLWZvcm1hdHRpbmcgY29udGV4dCBjb250
YWluZXIgaGFzIGFueSBub24tYnJlYWthYmxlIHN0YXJ0IHByb3BlcnRpZXMgKG1hcmdpbi1sZWZ0
LCBib3JkZXItbGVmdCwgcGFkZGluZy1sZWZ0KQotICAgICAgICAgICAgLy8gPHNwYW4gc3R5bGU9
InBhZGRpbmctbGVmdDogNXB4Ij48c3BhbiBzdHlsZT0icGFkZGluZy1sZWZ0OiA1cHgiPmZvb2Jh
cjwvc3Bhbj48L3NwYW4+IC0+IDVweCArIDVweAotICAgICAgICAgICAgYXV0byBjdXJyZW50Tm9u
QnJlYWthYmxlU3RhcnRXaWR0aCA9IG5vbkJyZWFrYWJsZVdpZHRoKGxheW91dEJveCwgTm9uQnJl
YWthYmxlV2lkdGhUeXBlOjpTdGFydCk7Ci0gICAgICAgICAgICBpZiAoY3VycmVudE5vbkJyZWFr
YWJsZVN0YXJ0V2lkdGggfHwgbGF5b3V0Qm94LmlzUG9zaXRpb25lZCgpKQotICAgICAgICAgICAg
ICAgIG5vbkJyZWFrYWJsZVN0YXJ0V2lkdGggPSBub25CcmVha2FibGVTdGFydFdpZHRoLnZhbHVl
T3IoMCkgKyBjdXJyZW50Tm9uQnJlYWthYmxlU3RhcnRXaWR0aDsKLQogICAgICAgICAgICAgaWYg
KCFjb250YWluZXIuaGFzSW5GbG93T3JGbG9hdGluZ0NoaWxkKCkpCiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBsYXlvdXRRdWV1ZS5hcHBlbmQoY29udGFpbmVyLmZpcnN0SW5G
bG93T3JGbG9hdGluZ0NoaWxkKCkpOwpAQCAtMzQ1LDI5ICsyOTUsMTkgQEAgdm9pZCBJbmxpbmVG
b3JtYXR0aW5nQ29udGV4dDo6Y29sbGVjdElubGluZUNvbnRlbnQoSW5saW5lUnVuUHJvdmlkZXIm
IGlubGluZVJ1blAKIAogICAgICAgICB3aGlsZSAoIWxheW91dFF1ZXVlLmlzRW1wdHkoKSkgewog
ICAgICAgICAgICAgYXV0byYgbGF5b3V0Qm94ID0gKmxheW91dFF1ZXVlLnRha2VMYXN0KCk7Ci0g
ICAgICAgICAgICBpZiAoaXM8Q29udGFpbmVyPihsYXlvdXRCb3gpKSB7Ci0gICAgICAgICAgICAg
ICAgLy8gVGhpcyBpcyB0aGUgZW5kIG9mIGFuIGlubGluZSBjb250YWluZXIuIENvbXB1dGUgdGhl
IG5vbi1icmVha2FibGUgZW5kIHdpZHRoIGFuZCBhZGQgaXQgdG8gdGhlIGxhc3QgaW5saW5lIGJv
eC4KLSAgICAgICAgICAgICAgICAvLyA8c3BhbiBzdHlsZT0icGFkZGluZy1yaWdodDogNXB4Ij5m
b29iYXI8L3NwYW4+IC0+IDVweDsgbGFzdCBpbmxpbmUgaXRlbSAtPiAiZm9vYmFyIgotICAgICAg
ICAgICAgICAgIGF1dG8gY3VycmVudE5vbkJyZWFrYWJsZUVuZFdpZHRoID0gbm9uQnJlYWthYmxl
V2lkdGgobGF5b3V0Qm94LCBOb25CcmVha2FibGVXaWR0aFR5cGU6OkVuZCk7Ci0gICAgICAgICAg
ICAgICAgaWYgKGN1cnJlbnROb25CcmVha2FibGVFbmRXaWR0aCB8fCBsYXlvdXRCb3guaXNQb3Np
dGlvbmVkKCkpCi0gICAgICAgICAgICAgICAgICAgIG5vbkJyZWFrYWJsZUVuZFdpZHRoID0gbm9u
QnJlYWthYmxlRW5kV2lkdGgudmFsdWVPcigwKSArIGN1cnJlbnROb25CcmVha2FibGVFbmRXaWR0
aDsKLSAgICAgICAgICAgICAgICAvLyBBZGQgaXQgdG8gdGhlIGxhc3QgaW5saW5lIGJveAotICAg
ICAgICAgICAgICAgIGlmIChsYXN0SW5saW5lSXRlbSkgewotICAgICAgICAgICAgICAgICAgICBh
ZGREZXRhY2hpbmdSdWxlcygqbGFzdElubGluZUl0ZW0sIHsgfSwgbm9uQnJlYWthYmxlRW5kV2lk
dGgpOwotICAgICAgICAgICAgICAgICAgICBub25CcmVha2FibGVFbmRXaWR0aCA9IHsgfTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8v
IExlYWYgaW5saW5lIGJveAotICAgICAgICAgICAgICAgIGF1dG8mIGlubGluZUl0ZW0gPSBjcmVh
dGVBbmRBcHBlbmRJbmxpbmVJdGVtKGlubGluZVJ1blByb3ZpZGVyLCBpbmxpbmVDb250ZW50LCBs
YXlvdXRCb3gpOwotICAgICAgICAgICAgICAgIC8vIEFkZCBzdGFydCBhbmQgdGhlICh0aHJvdWdo
IGVtcHR5IGNvbnRhaW5lcnMpIGFjY3VtdWxhdGVkIGVuZCB3aWR0aC4KLSAgICAgICAgICAgICAg
ICAvLyA8c3BhbiBzdHlsZT0icGFkZGluZy1sZWZ0OiAxcHgiPmZvb2Jhcjwvc3Bhbj4gLT4gbm9u
QnJlYWthYmxlU3RhcnRXaWR0aDogMXB4OwotICAgICAgICAgICAgICAgIC8vIDxzcGFuIHN0eWxl
PSJwYWRkaW5nOiA1cHgiPjwvc3Bhbj5mb29iYXIgLT4gbm9uQnJlYWthYmxlU3RhcnRXaWR0aDog
NXB4OyBub25CcmVha2FibGVFbmRXaWR0aDogNXB4Ci0gICAgICAgICAgICAgICAgaWYgKG5vbkJy
ZWFrYWJsZVN0YXJ0V2lkdGggfHwgbm9uQnJlYWthYmxlRW5kV2lkdGgpIHsKLSAgICAgICAgICAg
ICAgICAgICAgYWRkRGV0YWNoaW5nUnVsZXMoaW5saW5lSXRlbSwgbm9uQnJlYWthYmxlU3RhcnRX
aWR0aC52YWx1ZU9yKDApICsgbm9uQnJlYWthYmxlRW5kV2lkdGgudmFsdWVPcigwKSwgeyB9KTsK
LSAgICAgICAgICAgICAgICAgICAgbm9uQnJlYWthYmxlU3RhcnRXaWR0aCA9IHsgfTsKLSAgICAg
ICAgICAgICAgICAgICAgbm9uQnJlYWthYmxlRW5kV2lkdGggPSB7IH07Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGxhc3RJbmxpbmVJdGVtID0gJmlubGluZUl0ZW07CisgICAg
ICAgICAgICAvLyBUaGlzIGlzIHRoZSBlbmQgb2YgYW4gaW5saW5lIGNvbnRhaW5lciAoZS5nLiA8
L3NwYW4+KS4KKyAgICAgICAgICAgIGlmICh0cmVhdEFzSW5saW5lQ29udGFpbmVyKGxheW91dEJv
eCkpCisgICAgICAgICAgICAgICAgZm9ybWF0dGluZ1N0YXRlLmFkZElubGluZUl0ZW0oc3RkOjpt
YWtlX3VuaXF1ZTxJbmxpbmVJdGVtPihsYXlvdXRCb3gsIElubGluZUl0ZW06OlR5cGU6OkNvbnRh
aW5lckVuZCkpOworICAgICAgICAgICAgZWxzZSBpZiAoaXM8TGluZUJyZWFrQm94PihsYXlvdXRC
b3gpKQorICAgICAgICAgICAgICAgIGZvcm1hdHRpbmdTdGF0ZS5hZGRJbmxpbmVJdGVtKHN0ZDo6
bWFrZV91bmlxdWU8SW5saW5lSXRlbT4obGF5b3V0Qm94LCBJbmxpbmVJdGVtOjpUeXBlOjpIYXJk
TGluZUJyZWFrKSk7CisgICAgICAgICAgICBlbHNlIGlmIChsYXlvdXRCb3guaXNGbG9hdGluZ1Bv
c2l0aW9uZWQoKSkKKyAgICAgICAgICAgICAgICBmb3JtYXR0aW5nU3RhdGUuYWRkSW5saW5lSXRl
bShzdGQ6Om1ha2VfdW5pcXVlPElubGluZUl0ZW0+KGxheW91dEJveCwgSW5saW5lSXRlbTo6VHlw
ZTo6RmxvYXQpKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIEFTU0VSVChp
czxJbmxpbmVCb3g+KGxheW91dEJveCkgfHwgbGF5b3V0Qm94LmlzSW5saW5lQmxvY2tCb3goKSk7
CisgICAgICAgICAgICAgICAgaWYgKGlzPElubGluZUJveD4obGF5b3V0Qm94KSAmJiBkb3duY2Fz
dDxJbmxpbmVCb3g+KGxheW91dEJveCkuaGFzVGV4dENvbnRlbnQoKSkKKyAgICAgICAgICAgICAg
ICAgICAgSW5saW5lVGV4dEl0ZW06OmNyZWF0ZUFuZEFwcGVuZFRleHRJdGVtcyhmb3JtYXR0aW5n
U3RhdGUuaW5saW5lSXRlbXMoKSwgZG93bmNhc3Q8SW5saW5lQm94PihsYXlvdXRCb3gpKTsKKyAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRpbmdTdGF0ZS5h
ZGRJbmxpbmVJdGVtKHN0ZDo6bWFrZV91bmlxdWU8SW5saW5lSXRlbT4obGF5b3V0Qm94LCBJbmxp
bmVJdGVtOjpUeXBlOjpCb3gpKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGF1
dG8qIG5leHRTaWJsaW5nID0gbGF5b3V0Qm94Lm5leHRJbkZsb3dPckZsb2F0aW5nU2libGluZygp
KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9J
bmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZv
cm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaAppbmRleCBhNGZiMzE1ODRhZGY4Yjgx
ZDhkNWM2MWMzMzcyNjEyYjBkYTkzMjgxLi4yYzMwYjRlZTgyMjRhMzJkMTUzMDk1YjU1YTg3MDM5
N2Y2OWVkNDIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0
dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmgKQEAgLTMwLDcgKzMw
LDYgQEAKICNpbmNsdWRlICJEaXNwbGF5Qm94LmgiCiAjaW5jbHVkZSAiRm9ybWF0dGluZ0NvbnRl
eHQuaCIKICNpbmNsdWRlICJJbmxpbmVGb3JtYXR0aW5nU3RhdGUuaCIKLSNpbmNsdWRlICJJbmxp
bmVSdW4uaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKQEAgLTM4LDcgKzM3LDYgQEAgbmFtZXNwYWNlIExheW91dCB7CiAKIGNsYXNzIEZsb2F0aW5n
U3RhdGU7CiBjbGFzcyBJbmxpbmVDb250YWluZXI7Ci1jbGFzcyBJbmxpbmVSdW5Qcm92aWRlcjsK
IGNsYXNzIExpbmU7CiAKIC8vIFRoaXMgY2xhc3MgaW1wbGVtZW50cyB0aGUgbGF5b3V0IGxvZ2lj
IGZvciBpbmxpbmUgZm9ybWF0dGluZyBjb250ZXh0cy4KQEAgLTU1LDIxICs1MywxNiBAQCBwcml2
YXRlOgogICAgIGNsYXNzIExpbmVMYXlvdXQgewogICAgIHB1YmxpYzoKICAgICAgICAgTGluZUxh
eW91dChjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYpOwotICAgICAgICB2b2lkIGxheW91
dChjb25zdCBJbmxpbmVSdW5Qcm92aWRlciYpIGNvbnN0OworICAgICAgICB2b2lkIGxheW91dCgp
IGNvbnN0OwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgZW51bSBjbGFzcyBJc0xhc3RMaW5lIHsg
Tm8sIFllcyB9OwogICAgICAgICB2b2lkIGluaXRpYWxpemVOZXdMaW5lKExpbmUmKSBjb25zdDsK
ICAgICAgICAgdm9pZCBjbG9zZUxpbmUoTGluZSYsIElzTGFzdExpbmUpIGNvbnN0OwotICAgICAg
ICB2b2lkIGFwcGVuZENvbnRlbnRUb0xpbmUoTGluZSYsIGNvbnN0IElubGluZVJ1blByb3ZpZGVy
OjpSdW4mLCBjb25zdCBMYXlvdXRTaXplJikgY29uc3Q7Ci0gICAgICAgIHZvaWQgcG9zdFByb2Nl
c3NJbmxpbmVSdW5zKExpbmUmLCBJc0xhc3RMaW5lKSBjb25zdDsKLSAgICAgICAgdm9pZCBjcmVh
dGVGaW5hbFJ1bnMoTGluZSYpIGNvbnN0OwotICAgICAgICB2b2lkIHNwbGl0SW5saW5lUnVuSWZO
ZWVkZWQoY29uc3QgSW5saW5lUnVuJiwgSW5saW5lUnVucyYgc3BsaXRSdW5zKSBjb25zdDsKKyAg
ICAgICAgdm9pZCBjb21taXRJbmxpbmVJdGVtVG9MaW5lKExpbmUmLCBjb25zdCBJbmxpbmVJdGVt
JikgY29uc3Q7CiAgICAgICAgIHZvaWQgY29tcHV0ZUZsb2F0UG9zaXRpb24oY29uc3QgRmxvYXRp
bmdDb250ZXh0JiwgTGluZSYsIGNvbnN0IEJveCYpIGNvbnN0OwotICAgICAgICB2b2lkIHBsYWNl
SW5GbG93UG9zaXRpb25lZENoaWxkcmVuKHVuc2lnbmVkIGZpcnN0UnVuSW5kZXgpIGNvbnN0Owog
ICAgICAgICB2b2lkIGFsaWduUnVucyhUZXh0QWxpZ25Nb2RlLCBMaW5lJiwgSXNMYXN0TGluZSkg
Y29uc3Q7Ci0gICAgICAgIHZvaWQgY29tcHV0ZUV4cGFuc2lvbk9wcG9ydHVuaXRpZXMoTGluZSYs
IGNvbnN0IElubGluZVJ1blByb3ZpZGVyOjpSdW4mLCBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpU
eXBlIGxhc3RSdW5UeXBlKSBjb25zdDsKLSAgICAgICAgTGF5b3V0VW5pdCBydW5XaWR0aChjb25z
dCBJbmxpbmVDb250ZW50JiwgY29uc3QgSW5saW5lSXRlbSYsIEl0ZW1Qb3NpdGlvbiBmcm9tLCB1
bnNpZ25lZCBsZW5ndGgsIExheW91dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0KSBjb25zdDsKKyAg
ICAgICAgdm9pZCBjb21wdXRlRXhwYW5zaW9uT3Bwb3J0dW5pdGllcyhMaW5lJiwgY29uc3QgSW5s
aW5lSXRlbSYsIGJvb2wgcHJldmlvdXNSdW5Jc1doaXRlcGFjZSkgY29uc3Q7CiAKICAgICBwcml2
YXRlOgogICAgICAgICBzdGF0aWMgdm9pZCBqdXN0aWZ5UnVucyhMaW5lJik7CkBAIC05MSwxMSAr
ODQsMTIgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbXB1dGVJbnRyaW5zaWNXaWR0aEZvckZsb2F0
Qm94KGNvbnN0IEJveCYpIGNvbnN0OwogICAgIHZvaWQgY29tcHV0ZUludHJpbnNpY1dpZHRoRm9y
SW5saW5lQmxvY2soY29uc3QgQm94JikgY29uc3Q7CiAgICAgdm9pZCBjb21wdXRlV2lkdGhBbmRI
ZWlnaHRGb3JSZXBsYWNlZElubGluZUJveChjb25zdCBCb3gmLCBVc2VkSG9yaXpvbnRhbFZhbHVl
cykgY29uc3Q7Ci0gICAgdm9pZCBjb21wdXRlTWFyZ2luKGNvbnN0IEJveCYsIFVzZWRIb3Jpem9u
dGFsVmFsdWVzKSBjb25zdDsKKyAgICB2b2lkIGNvbXB1dGVIb3Jpem9udGFsTWFyZ2luKGNvbnN0
IEJveCYsIFVzZWRIb3Jpem9udGFsVmFsdWVzKSBjb25zdDsKICAgICB2b2lkIGNvbXB1dGVIZWln
aHRBbmRNYXJnaW4oY29uc3QgQm94JikgY29uc3Q7CiAgICAgdm9pZCBjb21wdXRlV2lkdGhBbmRN
YXJnaW4oY29uc3QgQm94JiwgVXNlZEhvcml6b250YWxWYWx1ZXMpIGNvbnN0OworICAgIHZvaWQg
aW5pdGlhbGl6ZVZlcnRpY2FsTWFyZ2luRm9ySW5saW5lQ29udGFpbmVyKGNvbnN0IEJveCYpIGNv
bnN0OwogCi0gICAgdm9pZCBjb2xsZWN0SW5saW5lQ29udGVudChJbmxpbmVSdW5Qcm92aWRlciYp
IGNvbnN0OworICAgIHZvaWQgY29sbGVjdElubGluZUNvbnRlbnQoKSBjb25zdDsKIAogICAgIElu
bGluZUZvcm1hdHRpbmdTdGF0ZSYgZm9ybWF0dGluZ1N0YXRlKCkgY29uc3QgeyByZXR1cm4gZG93
bmNhc3Q8SW5saW5lRm9ybWF0dGluZ1N0YXRlPihGb3JtYXR0aW5nQ29udGV4dDo6Zm9ybWF0dGlu
Z1N0YXRlKCkpOyB9CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0
TGluZUxheW91dC5jcHAKaW5kZXggN2IxM2FiMGI0ZWJjYmQyNTcxZmU2YzM2OGE4Zjc3MDE2ZmNh
YTBlNC4uNGI2YzRjODFlZmFhOGVlM2I1NzBhN2E1YzZjZmJjMWJkZTE3ZTNhMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGlu
Z0NvbnRleHRMaW5lTGF5b3V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5l
Zm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQuY3BwCkBAIC0zMiw3
ICszMiw2IEBACiAjaW5jbHVkZSAiRmxvYXRpbmdTdGF0ZS5oIgogI2luY2x1ZGUgIklubGluZUZv
cm1hdHRpbmdTdGF0ZS5oIgogI2luY2x1ZGUgIklubGluZUxpbmVCcmVha2VyLmgiCi0jaW5jbHVk
ZSAiSW5saW5lUnVuUHJvdmlkZXIuaCIKICNpbmNsdWRlICJMYXlvdXRCb3guaCIKICNpbmNsdWRl
ICJMYXlvdXRDb250YWluZXIuaCIKICNpbmNsdWRlICJMYXlvdXRTdGF0ZS5oIgpAQCAtNDYsMzgg
KzQ1LDQyIEBAIHB1YmxpYzoKICAgICB2b2lkIGluaXQoY29uc3QgTGF5b3V0UG9pbnQmIHRvcExl
ZnQsIExheW91dFVuaXQgYXZhaWxhYmxlV2lkdGgsIExheW91dFVuaXQgbWluaW1hbEhlaWdodCk7
CiAgICAgdm9pZCBjbG9zZSgpOwogCi0gICAgdm9pZCBhcHBlbmRDb250ZW50KGNvbnN0IElubGlu
ZVJ1blByb3ZpZGVyOjpSdW4mLCBjb25zdCBMYXlvdXRTaXplJik7CisgICAgdm9pZCBhcHBlbmRU
ZXh0Q29udGVudChjb25zdCBJbmxpbmVUZXh0SXRlbSYsIExheW91dFNpemUpOworICAgIHZvaWQg
YXBwZW5kTm9uVGV4dENvbnRlbnQoY29uc3QgSW5saW5lSXRlbSYsIExheW91dFNpemUsIFVzZWRI
b3Jpem9udGFsTWFyZ2luKTsKKyAgICB2b2lkIGFwcGVuZE5vbkJyZWFrYWJsZVNwYWNlKGNvbnN0
IElubGluZUl0ZW0mKTsKIAotICAgIHZvaWQgYWRqdXN0TG9naWNhbExlZnQoTGF5b3V0VW5pdCBk
ZWx0YSk7Ci0gICAgdm9pZCBhZGp1c3RMb2dpY2FsUmlnaHQoTGF5b3V0VW5pdCBkZWx0YSk7Cisg
ICAgdm9pZCBhZGp1c3RMb2dpY2FsTGVmdChMYXlvdXRVbml0KTsKKyAgICB2b2lkIGFkanVzdExv
Z2ljYWxSaWdodChMYXlvdXRVbml0KTsKIAotICAgIGJvb2wgaGFzQ29udGVudCgpIGNvbnN0IHsg
cmV0dXJuICFtX2lubGluZVJ1bnMuaXNFbXB0eSgpOyB9CisgICAgc3RydWN0IFJ1biB7CisgICAg
ICAgIERpc3BsYXk6OlJ1biBpbmxpbmVSdW47CisgICAgICAgIGNvbnN0IElubGluZUl0ZW0mIGlu
bGluZUl0ZW07CisgICAgfTsKKyAgICBWZWN0b3I8UnVuPiYgcnVucygpIHsgcmV0dXJuIG1fcnVu
czsgfQorCisgICAgYm9vbCBoYXNDb250ZW50KCkgY29uc3Q7CisgICAgYm9vbCBpc0VtcHR5KCkg
Y29uc3QgeyByZXR1cm4gbV9ydW5zLmlzRW1wdHkoKTsgfQorICAgIExheW91dFVuaXQgdHJhaWxp
bmdXaGl0ZXNwYWNlV2lkdGgoKSBjb25zdDsKKyAgICBib29sIGhhc1RyYWlsaW5nV2hpdGVzcGFj
ZSgpIGNvbnN0OwogICAgIGJvb2wgaXNDbG9zZWQoKSBjb25zdCB7IHJldHVybiBtX2Nsb3NlZDsg
fQogICAgIGJvb2wgaXNGaXJzdExpbmUoKSBjb25zdCB7IHJldHVybiBtX2lzRmlyc3RMaW5lOyB9
Ci0gICAgVmVjdG9yPElubGluZVJ1bj4mIHJ1bnMoKSB7IHJldHVybiBtX2lubGluZVJ1bnM7IH0K
LQotICAgIExheW91dFVuaXQgY29udGVudExvZ2ljYWxSaWdodCgpIGNvbnN0OwotICAgIExheW91
dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0KCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsUmVjdC5s
ZWZ0KCk7IH0KLSAgICBMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoKCkgY29uc3QgeyByZXR1cm4g
bV9hdmFpbGFibGVXaWR0aDsgfQotICAgIE9wdGlvbmFsPElubGluZVJ1blByb3ZpZGVyOjpSdW46
OlR5cGU+IGxhc3RSdW5UeXBlKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0UnVuVHlwZTsgfQogCisg
ICAgTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZVdpZHRo
IC0gbV9sb2dpY2FsUmVjdC53aWR0aCgpOyB9CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9wKCkg
Y29uc3QgeyByZXR1cm4gbV9sb2dpY2FsUmVjdC50b3AoKTsgfQorICAgIExheW91dFVuaXQgbG9n
aWNhbExlZnQoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxSZWN0LmxlZnQoKTsgfQogICAgIExh
eW91dFVuaXQgbG9naWNhbEJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFJlY3QuYm90
dG9tKCk7IH0KKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1f
bG9naWNhbFJlY3QucmlnaHQoKTsgfQorCiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0KCkg
Y29uc3QgeyByZXR1cm4gbG9naWNhbEJvdHRvbSgpIC0gbG9naWNhbFRvcCgpOyB9CiAKIHByaXZh
dGU6Ci0gICAgc3RydWN0IFRyYWlsaW5nVHJpbW1hYmxlQ29udGVudCB7Ci0gICAgICAgIExheW91
dFVuaXQgd2lkdGg7Ci0gICAgICAgIHVuc2lnbmVkIGxlbmd0aDsKLSAgICB9OwotICAgIE9wdGlv
bmFsPFRyYWlsaW5nVHJpbW1hYmxlQ29udGVudD4gbV90cmFpbGluZ1RyaW1tYWJsZUNvbnRlbnQ7
Ci0gICAgT3B0aW9uYWw8SW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6VHlwZT4gbV9sYXN0UnVuVHlw
ZTsKKyAgICB1bnNpZ25lZCBtX251bWJlck9mVHJpbW1hYmxlUnVucyB7IDAgfTsKICAgICBib29s
IG1fbGFzdFJ1bkNhbkV4cGFuZCB7IGZhbHNlIH07CiAKICAgICBEaXNwbGF5OjpCb3g6OlJlY3Qg
bV9sb2dpY2FsUmVjdDsKLSAgICBMYXlvdXRVbml0IG1fYXZhaWxhYmxlV2lkdGg7CisgICAgTGF5
b3V0VW5pdCBtX2xpbmVXaWR0aDsKIAotICAgIFZlY3RvcjxJbmxpbmVSdW4+IG1faW5saW5lUnVu
czsKKyAgICBWZWN0b3I8UnVuPiBtX3J1bnM7CiAgICAgYm9vbCBtX2lzRmlyc3RMaW5lIHsgdHJ1
ZSB9OwogICAgIGJvb2wgbV9jbG9zZWQgeyB0cnVlIH07CiB9OwpAQCAtODUsMTA3ICs4OCwxNzgg
QEAgcHJpdmF0ZToKIHZvaWQgTGluZTo6aW5pdChjb25zdCBMYXlvdXRQb2ludCYgdG9wTGVmdCwg
TGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCwgTGF5b3V0VW5pdCBtaW5pbWFsSGVpZ2h0KQogewog
ICAgIG1fbG9naWNhbFJlY3Quc2V0VG9wTGVmdCh0b3BMZWZ0KTsKLSAgICBtX2xvZ2ljYWxSZWN0
LnNldFdpZHRoKGF2YWlsYWJsZVdpZHRoKTsKKyAgICBtX2xvZ2ljYWxSZWN0LnNldFdpZHRoKDAp
OwogICAgIG1fbG9naWNhbFJlY3Quc2V0SGVpZ2h0KG1pbmltYWxIZWlnaHQpOwotICAgIG1fYXZh
aWxhYmxlV2lkdGggPSBhdmFpbGFibGVXaWR0aDsKKyAgICBtX2xpbmVXaWR0aCA9IGF2YWlsYWJs
ZVdpZHRoOwogCi0gICAgbV9pbmxpbmVSdW5zLmNsZWFyKCk7Ci0gICAgbV9sYXN0UnVuVHlwZSA9
IHsgfTsKKyAgICBtX3J1bnMuY2xlYXIoKTsKICAgICBtX2xhc3RSdW5DYW5FeHBhbmQgPSBmYWxz
ZTsKLSAgICBtX3RyYWlsaW5nVHJpbW1hYmxlQ29udGVudCA9IHsgfTsKKyAgICBtX251bWJlck9m
VHJpbW1hYmxlUnVucyA9IDA7CiAgICAgbV9jbG9zZWQgPSBmYWxzZTsKIH0KIAotdm9pZCBMaW5l
OjphZGp1c3RMb2dpY2FsTGVmdChMYXlvdXRVbml0IGRlbHRhKQordm9pZCBMaW5lOjpjbG9zZSgp
CiB7Ci0gICAgQVNTRVJUKGRlbHRhID4gMCk7CisgICAgYXV0byB0cmltVHJhaWxpbmdDb250ZW50
ID0gWyZdIHsKKyAgICAgICAgQVNTRVJUKG1fcnVucy5zaXplKCkpOworICAgICAgICBhdXRvIGxh
c3RSdW5JbmRleCA9IG1fcnVucy5zaXplKCkgLSAxOworICAgICAgICB3aGlsZSAobV9udW1iZXJP
ZlRyaW1tYWJsZVJ1bnMpIHsKKyAgICAgICAgICAgIGF1dG8mIGxhc3RSdW4gPSBtX3J1bnNbbGFz
dFJ1bkluZGV4XTsKKyAgICAgICAgICAgIGlmIChsYXN0UnVuLmlubGluZUl0ZW0uaXNDb250YWlu
ZXJTdGFydCgpIHx8IGxhc3RSdW4uaW5saW5lSXRlbS5pc0NvbnRhaW5lckVuZCgpKSB7CisgICAg
ICAgICAgICAgICAgLS1sYXN0UnVuSW5kZXg7CisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBtX2xvZ2ljYWxSZWN0LmV4cGFuZCgtbGFzdFJ1bi5p
bmxpbmVSdW4ubG9naWNhbFdpZHRoKCksIDApOworICAgICAgICAgICAgbV9ydW5zLnJlbW92ZShs
YXN0UnVuSW5kZXgpOworICAgICAgICAgICAgLS1tX251bWJlck9mVHJpbW1hYmxlUnVuczsKKyAg
ICAgICAgICAgIC0tbGFzdFJ1bkluZGV4OworICAgICAgICB9CisgICAgfTsKIAotICAgIG1fYXZh
aWxhYmxlV2lkdGggLT0gZGVsdGE7Ci0gICAgbV9sb2dpY2FsUmVjdC5zaGlmdExlZnRUbyhtX2xv
Z2ljYWxSZWN0LmxlZnQoKSArIGRlbHRhKTsKKyAgICBpZiAoaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm47CiAKLSAgICBmb3IgKGF1dG8mIGlubGluZVJ1biA6IG1faW5saW5lUnVucykKLSAgICAg
ICAgaW5saW5lUnVuLm1vdmVIb3Jpem9udGFsbHkoZGVsdGEpOworICAgIHRyaW1UcmFpbGluZ0Nv
bnRlbnQoKTsKKyAgICBtX2lzRmlyc3RMaW5lID0gZmFsc2U7CisgICAgbV9jbG9zZWQgPSB0cnVl
OwogfQogCi12b2lkIExpbmU6OmFkanVzdExvZ2ljYWxSaWdodChMYXlvdXRVbml0IGRlbHRhKQor
c3RhdGljIGJvb2wgaXNUcmltbWFibGVDb250ZW50KGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0
ZW0pCiB7Ci0gICAgQVNTRVJUKGRlbHRhID4gMCk7Ci0KLSAgICBtX2F2YWlsYWJsZVdpZHRoIC09
IGRlbHRhOwotICAgIG1fbG9naWNhbFJlY3Quc2hpZnRSaWdodFRvKG1fbG9naWNhbFJlY3Qucmln
aHQoKSAtIGRlbHRhKTsKKyAgICBpZiAoIWlzPElubGluZVRleHRJdGVtPihpbmxpbmVJdGVtKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8mIGlubGluZVRleHRJdGVtID0gZG93bmNh
c3Q8SW5saW5lVGV4dEl0ZW0+KGlubGluZUl0ZW0pOworICAgIHJldHVybiBpbmxpbmVUZXh0SXRl
bS5pc1doaXRlc3BhY2UoKSAmJiBpbmxpbmVUZXh0SXRlbS5zdHlsZSgpLmNvbGxhcHNlV2hpdGVT
cGFjZSgpOwogfQogCi1zdGF0aWMgYm9vbCBpc1RyaW1tYWJsZUNvbnRlbnQoY29uc3QgSW5saW5l
UnVuUHJvdmlkZXI6OlJ1biYgaW5saW5lUnVuKQorYm9vbCBMaW5lOjpoYXNUcmFpbGluZ1doaXRl
c3BhY2UoKSBjb25zdAogewotICAgIHJldHVybiBpbmxpbmVSdW4uaXNXaGl0ZXNwYWNlKCkgJiYg
aW5saW5lUnVuLnN0eWxlKCkuY29sbGFwc2VXaGl0ZVNwYWNlKCk7CisgICAgcmV0dXJuIG1fbnVt
YmVyT2ZUcmltbWFibGVSdW5zOwogfQogCi1MYXlvdXRVbml0IExpbmU6OmNvbnRlbnRMb2dpY2Fs
UmlnaHQoKSBjb25zdAorTGF5b3V0VW5pdCBMaW5lOjp0cmFpbGluZ1doaXRlc3BhY2VXaWR0aCgp
IGNvbnN0CiB7Ci0gICAgaWYgKG1faW5saW5lUnVucy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
biBtX2xvZ2ljYWxSZWN0LmxlZnQoKTsKKyAgICBpZiAoaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm4geyB9OworICAgIExheW91dFVuaXQgdHJpbW1hYmxlV2lkdGg7CisgICAgYXV0byBudW1iZXJP
ZlRyaW1tYWJsZVJ1bnMgPSBtX251bWJlck9mVHJpbW1hYmxlUnVuczsKKyAgICBhdXRvIGxhc3RS
dW5JbmRleCA9IG1fcnVucy5zaXplKCkgLSAxOworICAgIHdoaWxlIChudW1iZXJPZlRyaW1tYWJs
ZVJ1bnMpIHsKKyAgICAgICAgYXV0byYgbGFzdFJ1biA9IG1fcnVuc1tsYXN0UnVuSW5kZXgtLV07
CisgICAgICAgIGlmIChsYXN0UnVuLmlubGluZUl0ZW0uaXNDb250YWluZXJTdGFydCgpIHx8IGxh
c3RSdW4uaW5saW5lSXRlbS5pc0NvbnRhaW5lckVuZCgpKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIHRyaW1tYWJsZVdpZHRoICs9IGxhc3RSdW4uaW5saW5lUnVuLmxvZ2ljYWxXaWR0
aCgpOworICAgICAgICAtLW51bWJlck9mVHJpbW1hYmxlUnVuczsKKyAgICB9CisgICAgcmV0dXJu
IHRyaW1tYWJsZVdpZHRoOworfQogCi0gICAgcmV0dXJuIG1faW5saW5lUnVucy5sYXN0KCkubG9n
aWNhbFJpZ2h0KCk7Citib29sIExpbmU6Omhhc0NvbnRlbnQoKSBjb25zdAoreworICAgIGlmICht
X3J1bnMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZm9yIChhdXRvJiBy
dW4gOiBtX3J1bnMpIHsKKyAgICAgICAgaWYgKHJ1bi5pbmxpbmVJdGVtLmlzQ29udGFpbmVyU3Rh
cnQoKSB8fCBydW4uaW5saW5lSXRlbS5pc0NvbnRhaW5lckVuZCgpKQorICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIGlmIChydW4uaW5saW5lUnVuLmxvZ2ljYWxXaWR0aCgpKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBM
aW5lOjphcHBlbmRDb250ZW50KGNvbnN0IElubGluZVJ1blByb3ZpZGVyOjpSdW4mIHJ1biwgY29u
c3QgTGF5b3V0U2l6ZSYgcnVuU2l6ZSkKK3ZvaWQgTGluZTo6YXBwZW5kTm9uQnJlYWthYmxlU3Bh
Y2UoY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSkKIHsKICAgICBBU1NFUlQoIWlzQ2xvc2Vk
KCkpOworICAgIC8vIEZJWE1FIGhlaWdodAorICAgIGF1dG8gbG9naWNhbFJlY3QgPSBEaXNwbGF5
OjpCb3g6OlJlY3QgeyBsb2dpY2FsVG9wKCksIGxvZ2ljYWxSaWdodCgpLCBpbmxpbmVJdGVtLndp
ZHRoKCksIDAgfTsKKyAgICBtX3J1bnMuYXBwZW5kKHsgRGlzcGxheTo6UnVuIHsgbG9naWNhbFJl
Y3QsIHsgfX0sIGlubGluZUl0ZW0gfSk7CisgICAgbV9sb2dpY2FsUmVjdC5leHBhbmQoaW5saW5l
SXRlbS53aWR0aCgpLCAwKTsKKyAgICBtX2xhc3RSdW5DYW5FeHBhbmQgPSBmYWxzZTsKK30KIAot
ICAgIC8vIEFwcGVuZCB0aGlzIHRleHQgcnVuIHRvIHRoZSBlbmQgb2YgdGhlIGxhc3QgdGV4dCBy
dW4sIGlmIHRoZSBsYXN0IHJ1biBpcyBjb250aW51b3VzLgotICAgIE9wdGlvbmFsPElubGluZVJ1
bjo6VGV4dENvbnRleHQ+IHRleHRSdW47Ci0gICAgaWYgKHJ1bi5pc1RleHQoKSkgewotICAgICAg
ICBhdXRvIHRleHRDb250ZXh0ID0gcnVuLnRleHRDb250ZXh0KCk7Ci0gICAgICAgIGF1dG8gcnVu
TGVuZ3RoID0gdGV4dENvbnRleHQtPmlzQ29sbGFwc2VkKCkgPyAxIDogdGV4dENvbnRleHQtPmxl
bmd0aCgpOwotICAgICAgICB0ZXh0UnVuID0gSW5saW5lUnVuOjpUZXh0Q29udGV4dCB7IHRleHRD
b250ZXh0LT5zdGFydCgpLCBydW5MZW5ndGggfTsKLSAgICB9Cit2b2lkIExpbmU6OmFwcGVuZFRl
eHRDb250ZW50KGNvbnN0IElubGluZVRleHRJdGVtJiBpbmxpbmVJdGVtLCBMYXlvdXRTaXplIHJ1
blNpemUpCit7CisgICAgYXV0byBpc1RyaW1tYWJsZSA9IGlzVHJpbW1hYmxlQ29udGVudChpbmxp
bmVJdGVtKTsKKworICAgIGF1dG8gc2hvdWxkQ29sbGFwc2UgPSBbJl0oKSB7CisgICAgICAgIGlm
ICghaXNUcmltbWFibGUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIC8vIFNr
aXAgbGVhZGluZyB3aGl0ZXNwYWNlLgorICAgICAgICBpZiAoIWhhc0NvbnRlbnQoKSkKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAvLyBDaGVjayBpZiB0aGUgcHJldmlvdXMgcnVu
IGlzIGEgd2hpdGVzcGFjZSBhbmQgd2hldGhlciB3ZSBjYW4gY29sbGFwc2UgdGhpcyBjdXJyZW50
IHJ1bi4KKyAgICAgICAgQVNTRVJUKCFtX3J1bnMuaXNFbXB0eSgpKTsKKyAgICAgICAgYXV0byBj
dXJyZW50SW5kZXggPSBtX3J1bnMuc2l6ZSgpIC0gMTsKKyAgICAgICAgd2hpbGUgKGN1cnJlbnRJ
bmRleCkgeworICAgICAgICAgICAgYXV0byYgY3VycmVudEl0ZW0gPSBtX3J1bnNbY3VycmVudElu
ZGV4XS5pbmxpbmVJdGVtOworICAgICAgICAgICAgaWYgKGN1cnJlbnRJdGVtLmlzQ29udGFpbmVy
U3RhcnQoKSB8fCBjdXJyZW50SXRlbS5pc0NvbnRhaW5lckVuZCgpKSB7CisgICAgICAgICAgICAg
ICAgLS1jdXJyZW50SW5kZXg7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAoIWN1cnJlbnRJdGVtLmlzVGV4dCgpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIC8vIENvbGxhcHNlZCB3aGl0ZXNwYWNlCisg
ICAgICAgICAgICBpZiAoaXNUcmltbWFibGVDb250ZW50KGRvd25jYXN0PElubGluZVRleHRJdGVt
PihjdXJyZW50SXRlbSkpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
OworCisgICAgaWYgKHNob3VsZENvbGxhcHNlKCkpCisgICAgICAgIHJldHVybjsKIAotICAgIGF1
dG8gcmVxdWlyZXNOZXdJbmxpbmVSdW4gPSAhaGFzQ29udGVudCgpIHx8ICFydW4uaXNUZXh0KCkg
fHwgIW1fbGFzdFJ1bkNhbkV4cGFuZDsKLSAgICBpZiAocmVxdWlyZXNOZXdJbmxpbmVSdW4pIHsK
LSAgICAgICAgLy8gRklYTUU6IFRoaXMgbmVlZHMgcHJvcGVyIGJhc2VsaW5lIGhhbmRsaW5nCi0g
ICAgICAgIGF1dG8gaW5saW5lUnVuID0gSW5saW5lUnVuIHsgeyBsb2dpY2FsVG9wKCksIGNvbnRl
bnRMb2dpY2FsUmlnaHQoKSwgcnVuU2l6ZS53aWR0aCgpLCBydW5TaXplLmhlaWdodCgpIH0sIHJ1
bi5pbmxpbmVJdGVtKCkgfTsKLSAgICAgICAgaWYgKHRleHRSdW4pCi0gICAgICAgICAgICBpbmxp
bmVSdW4uc2V0VGV4dENvbnRleHQoeyB0ZXh0UnVuLT5zdGFydCgpLCB0ZXh0UnVuLT5sZW5ndGgo
KSB9KTsKLSAgICAgICAgbV9pbmxpbmVSdW5zLmFwcGVuZChpbmxpbmVSdW4pOworICAgIEFTU0VS
VCghaXNDbG9zZWQoKSk7CisgICAgbV9sYXN0UnVuQ2FuRXhwYW5kID0gIWlubGluZUl0ZW0uaXND
b2xsYXBzZWQoKTsKKyAgICBtX251bWJlck9mVHJpbW1hYmxlUnVucyA9IGlzVHJpbW1hYmxlID8g
bV9udW1iZXJPZlRyaW1tYWJsZVJ1bnMgKyAxIDogMDsgCisgICAgYXV0byBydW5MZW5ndGggPSBp
bmxpbmVJdGVtLmlzQ29sbGFwc2VkKCkgPyAxIDogaW5saW5lSXRlbS5sZW5ndGgoKTsKKworICAg
IGF1dG8gcmVxdWlyZXNOZXdSdW4gPSBpc0VtcHR5KCkgfHwgIW1fbGFzdFJ1bkNhbkV4cGFuZCB8
fCAmbV9ydW5zLmxhc3QoKS5pbmxpbmVJdGVtICE9ICZpbmxpbmVJdGVtOworICAgIGlmIChyZXF1
aXJlc05ld1J1bikgeworICAgICAgICBhdXRvIGRpc3BsYXlSdW5Mb2dpY2FsUmVjdCA9IERpc3Bs
YXk6OkJveDo6UmVjdCB7IGxvZ2ljYWxUb3AoKSwgbG9naWNhbFJpZ2h0KCksIHJ1blNpemUud2lk
dGgoKSwgcnVuU2l6ZS5oZWlnaHQoKSB9OworICAgICAgICBhdXRvIHRleHRDb250ZXh0ID0gRGlz
cGxheTo6UnVuOjpUZXh0Q29udGV4dCB7IGlubGluZUl0ZW0uc3RhcnQoKSwgcnVuTGVuZ3RoIH07
CisgICAgICAgIGF1dG8gZGlzcGxheVJ1biA9IERpc3BsYXk6OlJ1bihkaXNwbGF5UnVuTG9naWNh
bFJlY3QsIHRleHRDb250ZXh0KTsKKyAgICAgICAgbV9ydW5zLmFwcGVuZCh7IGRpc3BsYXlSdW4s
IGlubGluZUl0ZW0gfSk7CiAgICAgICAgIG1fbG9naWNhbFJlY3Quc2V0SGVpZ2h0KHN0ZDo6bWF4
KHJ1blNpemUuaGVpZ2h0KCksIG1fbG9naWNhbFJlY3QuaGVpZ2h0KCkpKTsKLSAgICB9IGVsc2Ug
ewotICAgICAgICAvLyBOb24tdGV4dCBydW5zIGFsd2F5cyByZXF1aXJlIG5ldyBpbmxpbmUgcnVu
LgotICAgICAgICBBU1NFUlQodGV4dFJ1bik7Ci0gICAgICAgIGF1dG8mIGlubGluZVJ1biA9IG1f
aW5saW5lUnVucy5sYXN0KCk7Ci0gICAgICAgIEFTU0VSVChydW5TaXplLmhlaWdodCgpID09IGlu
bGluZVJ1bi5sb2dpY2FsSGVpZ2h0KCkpOwotICAgICAgICBpbmxpbmVSdW4uc2V0TG9naWNhbFdp
ZHRoKGlubGluZVJ1bi5sb2dpY2FsV2lkdGgoKSArIHJ1blNpemUud2lkdGgoKSk7Ci0gICAgICAg
IGlubGluZVJ1bi50ZXh0Q29udGV4dCgpLT5zZXRMZW5ndGgoaW5saW5lUnVuLnRleHRDb250ZXh0
KCktPmxlbmd0aCgpICsgdGV4dFJ1bi0+bGVuZ3RoKCkpOworICAgICAgICBtX2xvZ2ljYWxSZWN0
LmV4cGFuZChydW5TaXplLndpZHRoKCksIDApOworICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgbV9hdmFpbGFibGVXaWR0aCAtPSBydW5TaXplLndpZHRoKCk7Ci0gICAgbV9sYXN0UnVuVHlw
ZSA9IHJ1bi50eXBlKCk7Ci0gICAgbV9sYXN0UnVuQ2FuRXhwYW5kID0gcnVuLmlzVGV4dCgpICYm
ICFydW4udGV4dENvbnRleHQoKS0+aXNDb2xsYXBzZWQoKTsKLSAgICBtX3RyYWlsaW5nVHJpbW1h
YmxlQ29udGVudCA9IHsgfTsKLSAgICBpZiAoaXNUcmltbWFibGVDb250ZW50KHJ1bikpCi0gICAg
ICAgIG1fdHJhaWxpbmdUcmltbWFibGVDb250ZW50ID0gVHJhaWxpbmdUcmltbWFibGVDb250ZW50
IHsgcnVuU2l6ZS53aWR0aCgpLCB0ZXh0UnVuLT5sZW5ndGgoKSB9OworICAgIGF1dG8mIGxhc3RJ
bmxpbmVSdW4gPSBtX3J1bnMubGFzdCgpLmlubGluZVJ1bjsKKyAgICBBU1NFUlQocnVuU2l6ZS5o
ZWlnaHQoKSA9PSBsYXN0SW5saW5lUnVuLmxvZ2ljYWxIZWlnaHQoKSk7CisgICAgbGFzdElubGlu
ZVJ1bi5leHBhbmRIb3Jpem9udGFsbHkocnVuU2l6ZS53aWR0aCgpKTsKKyAgICBsYXN0SW5saW5l
UnVuLnRleHRDb250ZXh0KCktPnNldExlbmd0aChsYXN0SW5saW5lUnVuLnRleHRDb250ZXh0KCkt
Pmxlbmd0aCgpICsgcnVuTGVuZ3RoKTsKKyAgICBtX2xvZ2ljYWxSZWN0LmV4cGFuZChydW5TaXpl
LndpZHRoKCksIDApOwogfQogCi12b2lkIExpbmU6OmNsb3NlKCkKK3ZvaWQgTGluZTo6YXBwZW5k
Tm9uVGV4dENvbnRlbnQoY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSwgTGF5b3V0U2l6ZSBy
dW5TaXplLCBVc2VkSG9yaXpvbnRhbE1hcmdpbiBob3Jpem9udGFsTWFyZ2luKQogewotICAgIGF1
dG8gdHJpbVRyYWlsaW5nQ29udGVudCA9IFsmXSB7Ci0gICAgICAgIGlmICghbV90cmFpbGluZ1Ry
aW1tYWJsZUNvbnRlbnQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGF1dG8mIGxhc3RJ
bmxpbmVSdW4gPSBtX2lubGluZVJ1bnMubGFzdCgpOwotICAgICAgICBsYXN0SW5saW5lUnVuLnNl
dExvZ2ljYWxXaWR0aChsYXN0SW5saW5lUnVuLmxvZ2ljYWxXaWR0aCgpIC0gbV90cmFpbGluZ1Ry
aW1tYWJsZUNvbnRlbnQtPndpZHRoKTsKLSAgICAgICAgbGFzdElubGluZVJ1bi50ZXh0Q29udGV4
dCgpLT5zZXRMZW5ndGgobGFzdElubGluZVJ1bi50ZXh0Q29udGV4dCgpLT5sZW5ndGgoKSAtIG1f
dHJhaWxpbmdUcmltbWFibGVDb250ZW50LT5sZW5ndGgpOwotCi0gICAgICAgIGlmICghbGFzdElu
bGluZVJ1bi50ZXh0Q29udGV4dCgpLT5sZW5ndGgoKSkKLSAgICAgICAgICAgIG1faW5saW5lUnVu
cy5yZW1vdmVMYXN0KCk7Ci0gICAgICAgIG1fYXZhaWxhYmxlV2lkdGggKz0gbV90cmFpbGluZ1Ry
aW1tYWJsZUNvbnRlbnQtPndpZHRoOwotICAgICAgICBtX3RyYWlsaW5nVHJpbW1hYmxlQ29udGVu
dCA9IHsgfTsKLSAgICB9OworICAgIEFTU0VSVCghaXNDbG9zZWQoKSk7CisKKyAgICBhdXRvIGxv
Z2ljYWxSZWN0ID0gRGlzcGxheTo6Qm94OjpSZWN0IHsgbG9naWNhbFRvcCgpLCBsb2dpY2FsUmln
aHQoKSArIGhvcml6b250YWxNYXJnaW4uc3RhcnQsIHJ1blNpemUud2lkdGgoKSwgcnVuU2l6ZS5o
ZWlnaHQoKSB9OworICAgIG1fcnVucy5hcHBlbmQoeyBEaXNwbGF5OjpSdW4geyBsb2dpY2FsUmVj
dCwgeyB9fSwgaW5saW5lSXRlbSB9KTsKKyAgICBtX2xvZ2ljYWxSZWN0LnNldEhlaWdodChzdGQ6
Om1heChydW5TaXplLmhlaWdodCgpLCBtX2xvZ2ljYWxSZWN0LmhlaWdodCgpKSk7CisgICAgbV9s
b2dpY2FsUmVjdC5leHBhbmQocnVuU2l6ZS53aWR0aCgpICsgaG9yaXpvbnRhbE1hcmdpbi5zdGFy
dCArIGhvcml6b250YWxNYXJnaW4uZW5kLCAwKTsKKworICAgIG1fbGFzdFJ1bkNhbkV4cGFuZCA9
IGZhbHNlOworICAgIG1fbnVtYmVyT2ZUcmltbWFibGVSdW5zID0gMDsKK30KIAotICAgIGlmICgh
aGFzQ29udGVudCgpKQordm9pZCBMaW5lOjphZGp1c3RMb2dpY2FsTGVmdChMYXlvdXRVbml0IGRl
bHRhKQoreworICAgIGlmICghZGVsdGEpCiAgICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQoZGVs
dGEgPiAwKTsKKyAgICBtX2xpbmVXaWR0aC09IGRlbHRhOworICAgIG1fbG9naWNhbFJlY3QubW92
ZUhvcml6b250YWxseShkZWx0YSk7CisgICAgZm9yIChhdXRvJiBydW4gOiBtX3J1bnMpCisgICAg
ICAgIHJ1bi5pbmxpbmVSdW4ubW92ZUhvcml6b250YWxseShkZWx0YSk7Cit9CiAKLSAgICB0cmlt
VHJhaWxpbmdDb250ZW50KCk7Ci0gICAgbV9pc0ZpcnN0TGluZSA9IGZhbHNlOwotICAgIG1fY2xv
c2VkID0gdHJ1ZTsKK3ZvaWQgTGluZTo6YWRqdXN0TG9naWNhbFJpZ2h0KExheW91dFVuaXQgZGVs
dGEpCit7CisgICAgQVNTRVJUKGRlbHRhID4gMCk7CisgICAgbV9saW5lV2lkdGgtPSBkZWx0YTsK
IH0KIAogSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OkxpbmVMYXlvdXQoY29u
c3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIGlubGluZUZvcm1hdHRpbmdDb250ZXh0KQpAQCAt
MTk2LDY2ICsyNzAsNjggQEAgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6Okxp
bmVMYXlvdXQoY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIGkKIHsKIH0KIAotc3RhdGlj
IGJvb2wgaXNUcmltbWFibGVDb250ZW50KGNvbnN0IElubGluZUxpbmVCcmVha2VyOjpSdW4mIHJ1
bikKK3ZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OmxheW91dCgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIHJ1bi5jb250ZW50LmlzV2hpdGVzcGFjZSgpICYmIHJ1bi5jb250
ZW50LnN0eWxlKCkuY29sbGFwc2VXaGl0ZVNwYWNlKCk7Ci19Ci0KLXZvaWQgSW5saW5lRm9ybWF0
dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OmxheW91dChjb25zdCBJbmxpbmVSdW5Qcm92aWRlciYg
aW5saW5lUnVuUHJvdmlkZXIpIGNvbnN0Ci17Ci0gICAgYXV0byYgbGF5b3V0U3RhdGUgPSBtX2Zv
cm1hdHRpbmdDb250ZXh0LmxheW91dFN0YXRlKCk7CisgICAgYXV0byYgaW5saW5lQ29udGVudCA9
IG1fZm9ybWF0dGluZ1N0YXRlLmlubGluZUl0ZW1zKCk7CiAgICAgYXV0byBmbG9hdGluZ0NvbnRl
eHQgPSBGbG9hdGluZ0NvbnRleHQgeyBtX2Zsb2F0aW5nU3RhdGUgfTsKIAogICAgIExpbmUgbGlu
ZTsKICAgICBpbml0aWFsaXplTmV3TGluZShsaW5lKTsKKyAgICBWZWN0b3I8SW5saW5lSXRlbSo+
IHVuY29tbWl0dGVkSXRlbXM7CisgICAgTGF5b3V0VW5pdCB1bmNvbW1pdHRlZFdpZHRoID0gMDsK
KworICAgIGF1dG8gY29tbWl0UGVuZGluZ0NvbnRlbnQgPSBbJl0geworICAgICAgICBmb3IgKGF1
dG8qIHVuY29tbWl0dGVkIDogdW5jb21taXR0ZWRJdGVtcykKKyAgICAgICAgICAgIGNvbW1pdElu
bGluZUl0ZW1Ub0xpbmUobGluZSwgKnVuY29tbWl0dGVkKTsKKyAgICAgICAgdW5jb21taXR0ZWRJ
dGVtcy5jbGVhcigpOworICAgICAgICB1bmNvbW1pdHRlZFdpZHRoID0gMDsKKyAgICB9OwogCi0g
ICAgSW5saW5lTGluZUJyZWFrZXIgbGluZUJyZWFrZXIobGF5b3V0U3RhdGUsIG1fZm9ybWF0dGlu
Z1N0YXRlLmlubGluZUNvbnRlbnQoKSwgaW5saW5lUnVuUHJvdmlkZXIucnVucygpKTsKLSAgICB3
aGlsZSAoYXV0byBydW4gPSBsaW5lQnJlYWtlci5uZXh0UnVuKGxpbmUuY29udGVudExvZ2ljYWxS
aWdodCgpLCBsaW5lLmF2YWlsYWJsZVdpZHRoKCksICFsaW5lLmhhc0NvbnRlbnQoKSkpIHsKLSAg
ICAgICAgYXV0byBpc0ZpcnN0UnVuID0gcnVuLT5wb3NpdGlvbiA9PSBJbmxpbmVMaW5lQnJlYWtl
cjo6UnVuOjpQb3NpdGlvbjo6TGluZUJlZ2luOwotICAgICAgICBhdXRvIGlzTGFzdFJ1biA9IHJ1
bi0+cG9zaXRpb24gPT0gSW5saW5lTGluZUJyZWFrZXI6OlJ1bjo6UG9zaXRpb246OkxpbmVFbmQ7
Ci0gICAgICAgIGF1dG8gZ2VuZXJhdGVzSW5saW5lUnVuID0gdHJ1ZTsKKyAgICBMaW5lQnJlYWtl
ciBsaW5lQnJlYWtlcihtX2Zvcm1hdHRpbmdDb250ZXh0LmxheW91dFN0YXRlKCkpOworICAgIGZv
ciAoYXV0byYgaW5saW5lSXRlbSA6IGlubGluZUNvbnRlbnQpIHsKKyAgICAgICAgLy8gMS4gU2lt
cGx5IGFkZCBub24tYnJlYWthYmxlIHNwYWNlcyB0byB0aGUgY3VycmVudCBsaW5lLiBUaGV5IGRv
bid0IHdyYXAuCisgICAgICAgIC8vIDIuIE5vcm1hbCBpbmxpbmUgYm94ZXMgZWl0aGVyIGdvIG9u
IHRoZSBjdXJyZW50IG9yIHdyYXAvYnJlYWsgdG8gdGhlIG5leHQgbGluZS4KKyAgICAgICAgLy8g
My4gRmxvYXRzIGFyZSBzcGVjaWFsLiBUaGV5IGNvbnN0cmFpbiB0aGUgbGluZXMgaW5zdGVhZCBv
ZiBiZWluZyBvbiB0aGVtLgorICAgICAgICBhdXRvIGF2YWlsYWJsZVdpZHRoID0gbGluZS5hdmFp
bGFibGVXaWR0aCgpIC0gdW5jb21taXR0ZWRXaWR0aDsKKyAgICAgICAgYXV0byBjdXJyZW50TG9n
aWNhbFJpZ2h0ID0gbGluZS5sb2dpY2FsUmlnaHQoKSArIHVuY29tbWl0dGVkV2lkdGg7CisgICAg
ICAgIGF1dG8gYnJlYWtpbmdDb250ZXh0ID0gbGluZUJyZWFrZXIuYnJlYWtpbmdDb250ZXh0KCpp
bmxpbmVJdGVtLCB7IGF2YWlsYWJsZVdpZHRoLCBjdXJyZW50TG9naWNhbFJpZ2h0LCBsaW5lLnRy
YWlsaW5nV2hpdGVzcGFjZVdpZHRoKCksICFsaW5lLmhhc0NvbnRlbnQoKSB9KTsKKyAgICAgICAg
aWYgKGJyZWFraW5nQ29udGV4dC5pc0F0QnJlYWtpbmdPcHBvcnR1bml0eSkKKyAgICAgICAgICAg
IGNvbW1pdFBlbmRpbmdDb250ZW50KCk7CisKKyAgICAgICAgaWYgKGJyZWFraW5nQ29udGV4dC5i
cmVha2luZ0JlaGF2aW9yID09IExpbmVCcmVha2VyOjpCcmVha2luZ0JlaGF2aW9yOjpCcmVhaykg
eworICAgICAgICAgICAgQVNTRVJUX05PVF9JTVBMRU1FTlRFRF9ZRVQoKTsKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICB9CiAKLSAgICAgICAgLy8gUG9zaXRpb24gZmxvYXQgYW5kIGFk
anVzdCB0aGUgcnVucyBvbiBsaW5lLgotICAgICAgICBpZiAocnVuLT5jb250ZW50LmlzRmxvYXQo
KSkgewotICAgICAgICAgICAgYXV0byYgZmxvYXRCb3ggPSBydW4tPmNvbnRlbnQuaW5saW5lSXRl
bSgpLmxheW91dEJveCgpOworICAgICAgICBpZiAoYnJlYWtpbmdDb250ZXh0LmJyZWFraW5nQmVo
YXZpb3IgPT0gTGluZUJyZWFrZXI6OkJyZWFraW5nQmVoYXZpb3I6OldyYXApIHsKKyAgICAgICAg
ICAgIGNsb3NlTGluZShsaW5lLCBJc0xhc3RMaW5lOjpObyk7CisgICAgICAgICAgICBpbml0aWFs
aXplTmV3TGluZShsaW5lKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpbmxpbmVJdGVtLT5p
c0Zsb2F0KCkpIHsKKyAgICAgICAgICAgIGF1dG8mIGZsb2F0Qm94ID0gaW5saW5lSXRlbS0+bGF5
b3V0Qm94KCk7CiAgICAgICAgICAgICBjb21wdXRlRmxvYXRQb3NpdGlvbihmbG9hdGluZ0NvbnRl
eHQsIGxpbmUsIGZsb2F0Qm94KTsKICAgICAgICAgICAgIG1fZmxvYXRpbmdTdGF0ZS5hcHBlbmQo
ZmxvYXRCb3gpOwotCi0gICAgICAgICAgICBhdXRvIGZsb2F0Qm94V2lkdGggPSBsYXlvdXRTdGF0
ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGZsb2F0Qm94KS5tYXJnaW5Cb3goKS53aWR0aCgpOwog
ICAgICAgICAgICAgLy8gU2hyaW5rIGF2YWlsYmxlIHNwYWNlIGZvciBjdXJyZW50IGxpbmUgYW5k
IG1vdmUgZXhpc3RpbmcgaW5saW5lIHJ1bnMuCisgICAgICAgICAgICBhdXRvIGZsb2F0Qm94V2lk
dGggPSBpbmxpbmVJdGVtLT53aWR0aCgpOwogICAgICAgICAgICAgZmxvYXRCb3guaXNMZWZ0Rmxv
YXRpbmdQb3NpdGlvbmVkKCkgPyBsaW5lLmFkanVzdExvZ2ljYWxMZWZ0KGZsb2F0Qm94V2lkdGgp
IDogbGluZS5hZGp1c3RMb2dpY2FsUmlnaHQoZmxvYXRCb3hXaWR0aCk7Ci0KLSAgICAgICAgICAg
IGdlbmVyYXRlc0lubGluZVJ1biA9IGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gMS4g
SW5pdGlhbGl6ZSBuZXcgbGluZSBpZiBuZWVkZWQuCi0gICAgICAgIC8vIDIuIEFwcGVuZCBpbmxp
bmUgcnVuIHVubGVzcyBpdCBpcyBza2lwcGVkLgotICAgICAgICAvLyAzLiBDbG9zZSBjdXJyZW50
IGxpbmUgaWYgbmVlZGVkLgotICAgICAgICBpZiAoaXNGaXJzdFJ1bikgewotICAgICAgICAgICAg
Ly8gV2hlbiB0aGUgZmlyc3QgcnVuIGRvZXMgbm90IGdlbmVyYXRlIGFuIGFjdHVhbCBpbmxpbmUg
cnVuLCB0aGUgbmV4dCBydW4gY29tZXMgaW4gZmlyc3QtcnVuIGFzIHdlbGwuCi0gICAgICAgICAg
ICAvLyBObyBuZWVkIHRvIHNwZW5kIHRpbWUgb24gY2xvc2luZy9pbml0aWFsaXppbmcuCi0gICAg
ICAgICAgICAvLyBTa2lwIGxlYWRpbmcgd2hpdGVzcGFjZS4KLSAgICAgICAgICAgIGlmICghZ2Vu
ZXJhdGVzSW5saW5lUnVuIHx8IGlzVHJpbW1hYmxlQ29udGVudCgqcnVuKSkKLSAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgaWYgKGxpbmUuaGFzQ29udGVudCgpKSB7Ci0g
ICAgICAgICAgICAgICAgLy8gUHJldmlvdXMgcnVuIGVuZGVkIHVwIGJlaW5nIGF0IHRoZSBsaW5l
IGVuZC4gQWRqdXN0IHRoZSBsaW5lIGFjY29yZGluZ2x5LgotICAgICAgICAgICAgICAgIGlmICgh
bGluZS5pc0Nsb3NlZCgpKQotICAgICAgICAgICAgICAgICAgICBjbG9zZUxpbmUobGluZSwgSXNM
YXN0TGluZTo6Tm8pOwotICAgICAgICAgICAgICAgIGluaXRpYWxpemVOZXdMaW5lKGxpbmUpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGJyZWFraW5nQ29udGV4dC5pc0F0QnJl
YWtpbmdPcHBvcnR1bml0eSkKKyAgICAgICAgICAgICAgICBjb21taXRJbmxpbmVJdGVtVG9MaW5l
KGxpbmUsICppbmxpbmVJdGVtKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
IHVuY29tbWl0dGVkSXRlbXMuYXBwZW5kKGlubGluZUl0ZW0uZ2V0KCkpOworICAgICAgICAgICAg
ICAgIHVuY29tbWl0dGVkV2lkdGggKz0gaW5saW5lSXRlbS0+d2lkdGgoKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQotCi0gICAgICAgIGlmIChnZW5lcmF0ZXNJbmxpbmVSdW4pIHsKLSAgICAg
ICAgICAgIGF1dG8gd2lkdGggPSBydW4tPndpZHRoOwotICAgICAgICAgICAgYXV0byBoZWlnaHQg
PSBydW4tPmNvbnRlbnQuaXNUZXh0KCkgPyBMYXlvdXRVbml0KG1fZm9ybWF0dGluZ1Jvb3Quc3R5
bGUoKS5jb21wdXRlZExpbmVIZWlnaHQoKSkgOiBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5
b3V0Qm94KHJ1bi0+Y29udGVudC5pbmxpbmVJdGVtKCkubGF5b3V0Qm94KCkpLmhlaWdodCgpOyAK
LSAgICAgICAgICAgIGFwcGVuZENvbnRlbnRUb0xpbmUobGluZSwgcnVuLT5jb250ZW50LCB7IHdp
ZHRoLCBoZWlnaHQgfSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaXNMYXN0UnVuKQorICAg
IH0KKyAgICAvLyBQcm9jZXNzIHJlbWFpbmluZyB1bmNvbW1pdHRlZCBjb250ZW50LgorICAgIGlm
ICghdW5jb21taXR0ZWRJdGVtcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKGxpbmUuYXZhaWxh
YmxlV2lkdGgoKSA8IHVuY29tbWl0dGVkV2lkdGgpIHsKICAgICAgICAgICAgIGNsb3NlTGluZShs
aW5lLCBJc0xhc3RMaW5lOjpObyk7CisgICAgICAgICAgICBpbml0aWFsaXplTmV3TGluZShsaW5l
KTsKKyAgICAgICAgfQorICAgICAgICBjb21taXRQZW5kaW5nQ29udGVudCgpOwogICAgIH0KLQog
ICAgIGNsb3NlTGluZShsaW5lLCBJc0xhc3RMaW5lOjpZZXMpOwogfQogCkBAIC0yOTQsMTUyICsz
NzAsODIgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6aW5pdGlh
bGl6ZU5ld0xpbmUoTGluZSYgbGluZSkgY29uc3QKICAgICBsaW5lLmluaXQoeyBsaW5lTG9naWNh
bExlZnQsIGxpbmVMb2dpY2FsVG9wIH0sIGF2YWlsYWJsZVdpZHRoLCBtX2Zvcm1hdHRpbmdSb290
LnN0eWxlKCkuY29tcHV0ZWRMaW5lSGVpZ2h0KCkpOwogfQogCi12b2lkIElubGluZUZvcm1hdHRp
bmdDb250ZXh0OjpMaW5lTGF5b3V0OjpzcGxpdElubGluZVJ1bklmTmVlZGVkKGNvbnN0IElubGlu
ZVJ1biYgaW5saW5lUnVuLCBJbmxpbmVSdW5zJiBzcGxpdFJ1bnMpIGNvbnN0Cit2b2lkIElubGlu
ZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpjbG9zZUxpbmUoTGluZSYgbGluZSwgSXNM
YXN0TGluZSBpc0xhc3RMaW5lKSBjb25zdAogewotICAgIEFTU0VSVChpbmxpbmVSdW4udGV4dENv
bnRleHQoKSk7Ci0gICAgQVNTRVJUKGlubGluZVJ1bi5vdmVybGFwc011bHRpcGxlSW5saW5lSXRl
bXMoKSk7Ci0gICAgLy8gSW4gY2VydGFpbiBjYXNlcywgYSBydW4gY2FuIG92ZXJsYXAgbXVsdGlw
bGUgaW5saW5lIGVsZW1lbnRzIGxpa2UgdGhpczoKLSAgICAvLyA8c3Bhbj5ub3JtYWwgdGV4dCBj
b250ZW50PC9zcGFuPjxzcGFuIHN0eWxlPSJwb3NpdGlvbjogcmVsYXRpdmU7IGxlZnQ6IDEwcHg7
Ij5idXQgdGhpcyBvbmUgbmVlZHMgYSBkZWRpY2F0ZWQgcnVuPC9zcGFuPjxzcGFuPmVuZCBvZiB0
ZXh0PC9zcGFuPgotICAgIC8vIFRoZSBjb250ZW50IGFib3ZlIGdlbmVyYXRlcyBvbmUgbG9uZyBy
dW4gPG5vcm1hbCB0ZXh0IGNvbnRlbnRidXQgdGhpcyBvbmUgbmVlZHMgZGVkaWNhdGVkIHJ1bmVu
ZCBvZiB0ZXh0PgotICAgIC8vIEhvd2V2ZXIsIHNpbmNlIHRoZSBtaWRkbGUgcnVuIGlzIHBvc2l0
aW9uZWQsIGl0IG5lZWRzIHRvIGJlIG1vdmVkIGluZGVwZW5kZW50bHkgZnJvbSB0aGUgcmVzdCBv
ZiB0aGUgY29udGVudCwgaGVuY2UgaXQgbmVlZHMgYSBkZWRpY2F0ZWQgaW5saW5lIHJ1bi4KLQot
ICAgIC8vIDEuIFN0YXJ0IHdpdGggdGhlIGZpcnN0IGlubGluZSBpdGVtIChlbGVtZW50KSBhbmQg
dHJhdmVycyB0aGUgbGlzdCB1bnRpbAotICAgIC8vIDIuIGVpdGhlciBmaW5kIGFuIGlubGluZSBp
dGVtIHRoYXQgbmVlZHMgYSBkZWRpY2F0ZWQgcnVuIG9yIHdlIHJlYWNoIHRoZSBlbmQgb2YgdGhl
IHJ1bgotICAgIC8vIDMuIENyZWF0ZSBkZWRpY2F0ZSBpbmxpbmUgcnVucy4KLSAgICBhdXRvJiBp
bmxpbmVDb250ZW50ID0gbV9mb3JtYXR0aW5nU3RhdGUuaW5saW5lQ29udGVudCgpOwotICAgIGF1
dG8gY29udGVudFN0YXJ0ID0gaW5saW5lUnVuLmxvZ2ljYWxMZWZ0KCk7Ci0gICAgYXV0byBzdGFy
dFBvc2l0aW9uID0gaW5saW5lUnVuLnRleHRDb250ZXh0KCktPnN0YXJ0KCk7Ci0gICAgYXV0byBy
ZW1hbmluZ0xlbmd0aCA9IGlubGluZVJ1bi50ZXh0Q29udGV4dCgpLT5sZW5ndGgoKTsKLQotICAg
IHN0cnVjdCBVbmNvbW1pdHRlZCB7Ci0gICAgICAgIGNvbnN0IElubGluZUl0ZW0qIGZpcnN0SW5s
aW5lSXRlbSB7IG51bGxwdHIgfTsKLSAgICAgICAgY29uc3QgSW5saW5lSXRlbSogbGFzdElubGlu
ZUl0ZW0geyBudWxscHRyIH07Ci0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCB7IDAgfTsKLSAgICB9
OwotICAgIE9wdGlvbmFsPFVuY29tbWl0dGVkPiB1bmNvbW1pdHRlZDsKLQotICAgIGF1dG8gY29t
bWl0ID0gWyZdIHsKLSAgICAgICAgaWYgKCF1bmNvbW1pdHRlZCkKLSAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICBjb250ZW50U3RhcnQgKz0gdW5jb21taXR0ZWQtPmZpcnN0SW5saW5lSXRl
bS0+bm9uQnJlYWthYmxlU3RhcnQoKTsKLQotICAgICAgICBhdXRvIHJ1bldpZHRoID0gdGhpcy0+
cnVuV2lkdGgoaW5saW5lQ29udGVudCwgKnVuY29tbWl0dGVkLT5maXJzdElubGluZUl0ZW0sIHN0
YXJ0UG9zaXRpb24sIHVuY29tbWl0dGVkLT5sZW5ndGgsIGNvbnRlbnRTdGFydCk7Ci0gICAgICAg
IGF1dG8gcnVuID0gSW5saW5lUnVuIHsgeyBpbmxpbmVSdW4ubG9naWNhbFRvcCgpLCBjb250ZW50
U3RhcnQsIHJ1bldpZHRoLCBpbmxpbmVSdW4ubG9naWNhbEhlaWdodCgpIH0sICp1bmNvbW1pdHRl
ZC0+Zmlyc3RJbmxpbmVJdGVtIH07Ci0gICAgICAgIHJ1bi5zZXRUZXh0Q29udGV4dCh7IHN0YXJ0
UG9zaXRpb24sIHVuY29tbWl0dGVkLT5sZW5ndGggfSk7Ci0gICAgICAgIHNwbGl0UnVucy5hcHBl
bmQocnVuKTsKLQotICAgICAgICBjb250ZW50U3RhcnQgKz0gcnVuV2lkdGggKyB1bmNvbW1pdHRl
ZC0+bGFzdElubGluZUl0ZW0tPm5vbkJyZWFrYWJsZUVuZCgpOwotCi0gICAgICAgIHN0YXJ0UG9z
aXRpb24gPSAwOwotICAgICAgICB1bmNvbW1pdHRlZCA9IHsgfTsKLSAgICB9OwotCi0gICAgZm9y
IChhdXRvIGl0ZXJhdG9yID0gaW5saW5lQ29udGVudC5maW5kKGNvbnN0X2Nhc3Q8SW5saW5lSXRl
bSo+KCZpbmxpbmVSdW4uaW5saW5lSXRlbSgpKSk7IGl0ZXJhdG9yICE9IGlubGluZUNvbnRlbnQu
ZW5kKCkgJiYgcmVtYW5pbmdMZW5ndGggPiAwOyArK2l0ZXJhdG9yKSB7Ci0gICAgICAgIGF1dG8m
IGlubGluZUl0ZW0gPSAqKml0ZXJhdG9yOworICAgIGxpbmUuY2xvc2UoKTsKKyAgICBpZiAobGlu
ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKIAotICAgICAgICAvLyBTa2lwIGFsbCBub24t
aW5mbG93IGJveGVzIChmbG9hdHMsIG91dC1vZi1mbG93IHBvc2l0aW9uZWQgZWxlbWVudHMpLiBU
aGV5IGRvbid0IHBhcnRpY2lwYXRlIGluIHRoZSBpbmxpbmUgcnVuIGNvbnRleHQuCi0gICAgICAg
IGlmICghaW5saW5lSXRlbS5sYXlvdXRCb3goKS5pc0luRmxvdygpKQorICAgIGF1dG8mIGxheW91
dFN0YXRlID0gbV9mb3JtYXR0aW5nQ29udGV4dC5sYXlvdXRTdGF0ZSgpOworICAgIGFsaWduUnVu
cyhtX2Zvcm1hdHRpbmdSb290LnN0eWxlKCkudGV4dEFsaWduKCksIGxpbmUsIGlzTGFzdExpbmUp
OworICAgIAorICAgIGF1dG8mIHJ1bnMgPSBsaW5lLnJ1bnMoKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGluZGV4ID0gMDsgaW5kZXggPCBydW5zLnNpemUoKTsgKytpbmRleCkgeworICAgICAgICBhdXRv
JiBydW4gPSBydW5zLmF0KGluZGV4KTsKKyAgICAgICAgYXV0byYgbGF5b3V0Qm94ID0gcnVuLmlu
bGluZUl0ZW0ubGF5b3V0Qm94KCk7CisgICAgICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBsYXlvdXRT
dGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7CisKKyAgICAgICAgaWYgKHJ1
bi5pbmxpbmVJdGVtLmlzQ29udGFpbmVyU3RhcnQoKSB8fCBydW4uaW5saW5lSXRlbS5pc0JveCgp
KSB7CisgICAgICAgICAgICAvLyBTZXQgaW5saW5lIGNvbnRhaW5lcidzIGxvZ2ljYWwgdG9wbGVm
dCBwb3NpdGlvbiAtdGFraW5nIHJlbGF0aXZlIHBvc2l0aW9uaW5nIGludG8gYWNjb3VudC4KKyAg
ICAgICAgICAgIGF1dG8gdG9wTGVmdCA9IHJ1bi5pbmxpbmVSdW4ubG9naWNhbFRvcExlZnQoKTsK
KyAgICAgICAgICAgIGlmIChsYXlvdXRCb3guaXNJbkZsb3dQb3NpdGlvbmVkKCkpCisgICAgICAg
ICAgICAgICAgdG9wTGVmdCArPSBHZW9tZXRyeTo6aW5GbG93UG9zaXRpb25lZFBvc2l0aW9uT2Zm
c2V0KGxheW91dFN0YXRlLCBsYXlvdXRCb3gpOworICAgICAgICAgICAgZGlzcGxheUJveC5zZXRU
b3BMZWZ0KHRvcExlZnQpOworCisgICAgICAgICAgICBpZiAocnVuLmlubGluZUl0ZW0uaXNCb3go
KSkKKyAgICAgICAgICAgICAgICBtX2Zvcm1hdHRpbmdTdGF0ZS5hZGRJbmxpbmVSdW4oc3RkOjpt
YWtlX3VuaXF1ZTxEaXNwbGF5OjpSdW4+KHJ1bi5pbmxpbmVSdW4pKTsKICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICB9CiAKLSAgICAgICAgYXV0byBjdXJyZW50TGVuZ3RoID0gWyZdIHsK
LSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1pbihyZW1hbmluZ0xlbmd0aCwgaW5saW5lSXRlbS50
ZXh0Q29udGVudCgpLmxlbmd0aCgpIC0gc3RhcnRQb3NpdGlvbik7Ci0gICAgICAgIH07Ci0KLSAg
ICAgICAgLy8gMS4gQnJlYWsgYmVmb3JlL2FmdGVyIC0+IHJlcXVpcmVzIGRlZGljYXRlZCBydW4g
LT4gY29tbWl0IHdoYXQgd2UndmUgZ290IHNvIGZhciBhbmQgYWxzbyBjb21taXQgdGhlIGN1cnJl
bnQgaW5saW5lIGVsZW1lbnQgYXMgYSBzZXBhcmF0ZSBpbmxpbmUgcnVuLgotICAgICAgICAvLyAy
LiBCcmVhayBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBpbmxpbmUgZWxlbWVudCAtPiBjb21taXQg
d2hhdCB3ZSd2ZSBnb3Qgc28gZmFyLiBDdXJyZW50IGVsZW1lbnQgYmVjb21lcyB0aGUgZmlyc3Qg
dW5jb21taXR0ZWQuCi0gICAgICAgIC8vIDMuIEJyZWFrIGF0IHRoZSBlbmQgb2YgdGhlIGlubGlu
ZSBlbGVtZW50IC0+IGNvbW1pdCB3aGF0IHdlJ3ZlIGdvdCBzbyBmYXIgaW5jbHVkaW5nIHRoZSBj
dXJyZW50IGVsZW1lbnQuCi0gICAgICAgIC8vIDQuIElubGluZSBlbGVtZW50IGRvZXMgbm90IHJl
cXVpcmUgcnVuIGJyZWFraW5nIC0+IGFkZCBjdXJyZW50IGlubGluZSBlbGVtZW50IHRvIHVuY29t
bWl0dGVkLiBKdW1wIHRvIHRoZSBuZXh0IGVsZW1lbnQuCi0gICAgICAgIGF1dG8gZGV0YWNoaW5n
UnVsZXMgPSBpbmxpbmVJdGVtLmRldGFjaGluZ1J1bGVzKCk7Ci0KLSAgICAgICAgLy8gIzEKLSAg
ICAgICAgaWYgKGRldGFjaGluZ1J1bGVzLmNvbnRhaW5zQWxsKHsgSW5saW5lSXRlbTo6RGV0YWNo
aW5nUnVsZTo6QnJlYWtBdFN0YXJ0LCBJbmxpbmVJdGVtOjpEZXRhY2hpbmdSdWxlOjpCcmVha0F0
RW5kIH0pKSB7Ci0gICAgICAgICAgICBjb21taXQoKTsKLSAgICAgICAgICAgIGF1dG8gY29udGVu
dExlbmd0aCA9IGN1cnJlbnRMZW5ndGgoKTsKLSAgICAgICAgICAgIHVuY29tbWl0dGVkID0gVW5j
b21taXR0ZWQgeyAmaW5saW5lSXRlbSwgJmlubGluZUl0ZW0sIGNvbnRlbnRMZW5ndGggfTsKLSAg
ICAgICAgICAgIHJlbWFuaW5nTGVuZ3RoIC09IGNvbnRlbnRMZW5ndGg7Ci0gICAgICAgICAgICBj
b21taXQoKTsKKyAgICAgICAgaWYgKHJ1bi5pbmxpbmVJdGVtLmlzQ29udGFpbmVyRW5kKCkpIHsK
KyAgICAgICAgICAgIC8vIFNldCBpbmxpbmUgY29udGFpbmVyJ3Mgd2lkdGggYW5kIGhlaWdodC4K
KyAgICAgICAgICAgIGF1dG8gbWFyZ2luQm94V2lkdGggPSBydW4uaW5saW5lUnVuLmxvZ2ljYWxM
ZWZ0KCkgLSBkaXNwbGF5Qm94LmxlZnQoKTsKKyAgICAgICAgICAgIGF1dG8gY29udGVudEJveFdp
ZHRoID0gbWFyZ2luQm94V2lkdGggLSAoZGlzcGxheUJveC5tYXJnaW5TdGFydCgpICsgZGlzcGxh
eUJveC5ib3JkZXJMZWZ0KCkgKyBkaXNwbGF5Qm94LnBhZGRpbmdMZWZ0KCkudmFsdWVPcigwKSk7
CisgICAgICAgICAgICAvLyBGSVhNRSBmaXggaXQgZm9yIG11bHRpbGluZS4KKyAgICAgICAgICAg
IGRpc3BsYXlCb3guc2V0Q29udGVudEJveFdpZHRoKGNvbnRlbnRCb3hXaWR0aCk7CisgICAgICAg
ICAgICAvLyBGSVhNRTogaGVpZ2h0CisgICAgICAgICAgICBkaXNwbGF5Qm94LnNldENvbnRlbnRC
b3hIZWlnaHQobGluZS5sb2dpY2FsSGVpZ2h0KCkpOwogICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIH0KIAotICAgICAgICAvLyAjMgotICAgICAgICBpZiAoZGV0YWNoaW5nUnVsZXMuY29u
dGFpbnMoSW5saW5lSXRlbTo6RGV0YWNoaW5nUnVsZTo6QnJlYWtBdFN0YXJ0KSkKLSAgICAgICAg
ICAgIGNvbW1pdCgpOwotCi0gICAgICAgIC8vIEFkZCBjdXJyZW50IGlubGluZSBpdGVtIHRvIHVu
Y29tbWl0dGVkLgotICAgICAgICAvLyAjMyBhbmQgIzQKLSAgICAgICAgYXV0byBjb250ZW50TGVu
Z3RoID0gY3VycmVudExlbmd0aCgpOwotICAgICAgICBpZiAoIXVuY29tbWl0dGVkKQotICAgICAg
ICAgICAgdW5jb21taXR0ZWQgPSBVbmNvbW1pdHRlZCB7ICZpbmxpbmVJdGVtLCAmaW5saW5lSXRl
bSwgMCB9OwotICAgICAgICB1bmNvbW1pdHRlZC0+bGVuZ3RoICs9IGNvbnRlbnRMZW5ndGg7Ci0g
ICAgICAgIHVuY29tbWl0dGVkLT5sYXN0SW5saW5lSXRlbSA9ICZpbmxpbmVJdGVtOwotICAgICAg
ICByZW1hbmluZ0xlbmd0aCAtPSBjb250ZW50TGVuZ3RoOwotCi0gICAgICAgIC8vICMzCi0gICAg
ICAgIGlmIChkZXRhY2hpbmdSdWxlcy5jb250YWlucyhJbmxpbmVJdGVtOjpEZXRhY2hpbmdSdWxl
OjpCcmVha0F0RW5kKSkKLSAgICAgICAgICAgIGNvbW1pdCgpOwotICAgIH0KLSAgICAvLyBFaXRo
ZXIgYWxsIGlubGluZSBlbGVtZW50cyBuZWVkZWQgZGVkaWNhdGVkIHJ1bnMgb3IgbmVpdGhlciBv
ZiB0aGVtLgotICAgIGlmICghcmVtYW5pbmdMZW5ndGggfHwgcmVtYW5pbmdMZW5ndGggPT0gaW5s
aW5lUnVuLnRleHRDb250ZXh0KCktPmxlbmd0aCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBj
b21taXQoKTsKLX0KKyAgICAgICAgaWYgKHJ1bi5pbmxpbmVJdGVtLmlzSGFyZExpbmVCcmVhaygp
KQorICAgICAgICAgICAgY29udGludWU7CiAKLXZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6
OkxpbmVMYXlvdXQ6OmNyZWF0ZUZpbmFsUnVucyhMaW5lJiBsaW5lKSBjb25zdAotewotICAgIGZv
ciAoYXV0byYgaW5saW5lUnVuIDogbGluZS5ydW5zKCkpIHsKLSAgICAgICAgaWYgKGlubGluZVJ1
bi5vdmVybGFwc011bHRpcGxlSW5saW5lSXRlbXMoKSkgewotICAgICAgICAgICAgSW5saW5lUnVu
cyBzcGxpdFJ1bnM7Ci0gICAgICAgICAgICBzcGxpdElubGluZVJ1bklmTmVlZGVkKGlubGluZVJ1
biwgc3BsaXRSdW5zKTsKLSAgICAgICAgICAgIGZvciAoYXV0byYgc3BsaXRSdW4gOiBzcGxpdFJ1
bnMpCi0gICAgICAgICAgICAgICAgbV9mb3JtYXR0aW5nU3RhdGUuYXBwZW5kSW5saW5lUnVuKHNw
bGl0UnVuKTsKLQotICAgICAgICAgICAgaWYgKCFzcGxpdFJ1bnMuaXNFbXB0eSgpKQotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBBU1NFUlQocnVuLmlubGluZVJ1bi50ZXh0Q29u
dGV4dCgpKTsKKyAgICAgICAgYXV0byYgaW5saW5lVGV4dEl0ZW0gPSBkb3duY2FzdDxJbmxpbmVU
ZXh0SXRlbT4ocnVuLmlubGluZUl0ZW0pOworICAgICAgICBjb25zdCBJbmxpbmVJdGVtKiBwcmV2
aW91c0lubGluZUl0ZW0gPSAhaW5kZXggPyBudWxscHRyIDogJnJ1bnNbaW5kZXggLSAxXS5pbmxp
bmVJdGVtOworICAgICAgICBhdXRvIHByZXZpb3VzUnVuSGFzQ29sbGFwc2VkV2hpdGVzcGFjZSA9
IGZhbHNlOworICAgICAgICBpZiAoaXM8SW5saW5lVGV4dEl0ZW0+KHByZXZpb3VzSW5saW5lSXRl
bSkpCisgICAgICAgICAgICBwcmV2aW91c1J1bkhhc0NvbGxhcHNlZFdoaXRlc3BhY2UgPSBkb3du
Y2FzdDxJbmxpbmVUZXh0SXRlbT4oKnByZXZpb3VzSW5saW5lSXRlbSkuaXNDb2xsYXBzZWQoKTsK
KworICAgICAgICBhdXRvIHJlcXVpcmVzTmV3UnVuID0gIWluZGV4IHx8ICZydW4uaW5saW5lSXRl
bS5sYXlvdXRCb3goKSAhPSAmcHJldmlvdXNJbmxpbmVJdGVtLT5sYXlvdXRCb3goKSB8fCBwcmV2
aW91c1J1bkhhc0NvbGxhcHNlZFdoaXRlc3BhY2U7CisgICAgICAgIGlmIChyZXF1aXJlc05ld1J1
bikKKyAgICAgICAgICAgIG1fZm9ybWF0dGluZ1N0YXRlLmFkZElubGluZVJ1bihzdGQ6Om1ha2Vf
dW5pcXVlPERpc3BsYXk6OlJ1bj4ocnVuLmlubGluZVJ1bikpOworICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIGF1dG8mIGxhc3REaXNwbGF5UnVuID0gbV9mb3JtYXR0aW5nU3RhdGUuaW5saW5l
UnVucygpLmxhc3QoKTsKKyAgICAgICAgICAgIGxhc3REaXNwbGF5UnVuLT5leHBhbmRIb3Jpem9u
dGFsbHkoaW5saW5lVGV4dEl0ZW0ud2lkdGgoKSk7CisgICAgICAgICAgICBsYXN0RGlzcGxheVJ1
bi0+dGV4dENvbnRleHQoKS0+c2V0TGVuZ3RoKGxhc3REaXNwbGF5UnVuLT50ZXh0Q29udGV4dCgp
LT5sZW5ndGgoKSArIHJ1bi5pbmxpbmVSdW4udGV4dENvbnRleHQoKS0+bGVuZ3RoKCkpOwogICAg
ICAgICB9Ci0KLSAgICAgICAgYXV0byBmaW5hbFJ1biA9IFsmXSB7Ci0gICAgICAgICAgICBhdXRv
JiBpbmxpbmVJdGVtID0gaW5saW5lUnVuLmlubGluZUl0ZW0oKTsKLSAgICAgICAgICAgIGlmIChp
bmxpbmVJdGVtLmRldGFjaGluZ1J1bGVzKCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBpbmxpbmVSdW47Ci0KLSAgICAgICAgICAgIElubGluZVJ1biBhZGp1c3RlZFJ1biA9IGlu
bGluZVJ1bjsKLSAgICAgICAgICAgIGF1dG8gd2lkdGggPSBpbmxpbmVSdW4ubG9naWNhbFdpZHRo
KCkgLSBpbmxpbmVJdGVtLm5vbkJyZWFrYWJsZVN0YXJ0KCkgLSBpbmxpbmVJdGVtLm5vbkJyZWFr
YWJsZUVuZCgpOwotICAgICAgICAgICAgYWRqdXN0ZWRSdW4uc2V0TG9naWNhbExlZnQoaW5saW5l
UnVuLmxvZ2ljYWxMZWZ0KCkgKyBpbmxpbmVJdGVtLm5vbkJyZWFrYWJsZVN0YXJ0KCkpOwotICAg
ICAgICAgICAgYWRqdXN0ZWRSdW4uc2V0TG9naWNhbFdpZHRoKHdpZHRoKTsKLSAgICAgICAgICAg
IHJldHVybiBhZGp1c3RlZFJ1bjsKLSAgICAgICAgfTsKLQotICAgICAgICBtX2Zvcm1hdHRpbmdT
dGF0ZS5hcHBlbmRJbmxpbmVSdW4oZmluYWxSdW4oKSk7CiAgICAgfQogfQogCi12b2lkIElubGlu
ZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0Ojpwb3N0UHJvY2Vzc0lubGluZVJ1bnMoTGlu
ZSYgbGluZSwgSXNMYXN0TGluZSBpc0xhc3RMaW5lKSBjb25zdAotewotICAgIGFsaWduUnVucyht
X2Zvcm1hdHRpbmdSb290LnN0eWxlKCkudGV4dEFsaWduKCksIGxpbmUsIGlzTGFzdExpbmUpOwot
ICAgIGF1dG8gZmlyc3RSdW5JbmRleCA9IG1fZm9ybWF0dGluZ1N0YXRlLmlubGluZVJ1bnMoKS5z
aXplKCk7Ci0gICAgY3JlYXRlRmluYWxSdW5zKGxpbmUpOwotCi0gICAgcGxhY2VJbkZsb3dQb3Np
dGlvbmVkQ2hpbGRyZW4oZmlyc3RSdW5JbmRleCk7Ci19Ci0KLXZvaWQgSW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQ6OkxpbmVMYXlvdXQ6OmNsb3NlTGluZShMaW5lJiBsaW5lLCBJc0xhc3RMaW5lIGlz
TGFzdExpbmUpIGNvbnN0Cit2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0
Ojpjb21taXRJbmxpbmVJdGVtVG9MaW5lKExpbmUmIGxpbmUsIGNvbnN0IElubGluZUl0ZW0mIGlu
bGluZUl0ZW0pIGNvbnN0CiB7Ci0gICAgbGluZS5jbG9zZSgpOwotICAgIGlmICghbGluZS5oYXND
b250ZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHBvc3RQcm9jZXNzSW5saW5lUnVucyhs
aW5lLCBpc0xhc3RMaW5lKTsKLX0KLQotdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGlu
ZUxheW91dDo6YXBwZW5kQ29udGVudFRvTGluZShMaW5lJiBsaW5lLCBjb25zdCBJbmxpbmVSdW5Q
cm92aWRlcjo6UnVuJiBydW4sIGNvbnN0IExheW91dFNpemUmIHJ1blNpemUpIGNvbnN0Ci17Ci0g
ICAgYXV0byBsYXN0UnVuVHlwZSA9IGxpbmUubGFzdFJ1blR5cGUoKTsKLSAgICBsaW5lLmFwcGVu
ZENvbnRlbnQocnVuLCBydW5TaXplKTsKKyAgICBhdXRvJiBsYXlvdXRCb3ggPSBpbmxpbmVJdGVt
LmxheW91dEJveCgpOworICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBtX2Zvcm1hdHRpbmdDb250ZXh0
LmxheW91dFN0YXRlKCkuZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpOworICAgIAor
ICAgIC8vIEZJWE1FIHRoZXNlIDIgc2hvdWxkIGJlIGF0IGNsb3NlTGluZQorICAgIGlmIChpbmxp
bmVJdGVtLmlzQ29udGFpbmVyU3RhcnQoKSB8fCBpbmxpbmVJdGVtLmlzQ29udGFpbmVyRW5kKCkp
CisgICAgICAgIHJldHVybiBsaW5lLmFwcGVuZE5vbkJyZWFrYWJsZVNwYWNlKGlubGluZUl0ZW0p
OworCisgICAgYXV0byB3aWR0aCA9IGlubGluZUl0ZW0ud2lkdGgoKTsKKyAgICBpZiAoaXM8SW5s
aW5lVGV4dEl0ZW0+KGlubGluZUl0ZW0pKQorICAgICAgICBsaW5lLmFwcGVuZFRleHRDb250ZW50
KGRvd25jYXN0PElubGluZVRleHRJdGVtPihpbmxpbmVJdGVtKSwgeyB3aWR0aCwgbV9mb3JtYXR0
aW5nUm9vdC5zdHlsZSgpLmNvbXB1dGVkTGluZUhlaWdodCgpIH0pOworICAgIGVsc2UKKyAgICAg
ICAgbGluZS5hcHBlbmROb25UZXh0Q29udGVudChpbmxpbmVJdGVtLCB7IHdpZHRoLCBkaXNwbGF5
Qm94LmhlaWdodCgpIH0sIGRpc3BsYXlCb3guaG9yaXpvbnRhbE1hcmdpbigpKTsKIAogICAgIGlm
IChtX2Zvcm1hdHRpbmdSb290LnN0eWxlKCkudGV4dEFsaWduKCkgPT0gVGV4dEFsaWduTW9kZTo6
SnVzdGlmeSkKLSAgICAgICAgY29tcHV0ZUV4cGFuc2lvbk9wcG9ydHVuaXRpZXMobGluZSwgcnVu
LCBsYXN0UnVuVHlwZS52YWx1ZU9yKElubGluZVJ1blByb3ZpZGVyOjpSdW46OlR5cGU6Ok5vbldo
aXRlc3BhY2UpKTsKKyAgICAgICAgY29tcHV0ZUV4cGFuc2lvbk9wcG9ydHVuaXRpZXMobGluZSwg
aW5saW5lSXRlbSwgbGluZS5oYXNUcmFpbGluZ1doaXRlc3BhY2UoKSk7CiB9CiAKIHZvaWQgSW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OmNvbXB1dGVGbG9hdFBvc2l0aW9uKGNv
bnN0IEZsb2F0aW5nQ29udGV4dCYgZmxvYXRpbmdDb250ZXh0LCBMaW5lJiBsaW5lLCBjb25zdCBC
b3gmIGZsb2F0Qm94KSBjb25zdApAQCAtNDQ5LDM2ICs0NTUsMTEgQEAgdm9pZCBJbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6Y29tcHV0ZUZsb2F0UG9zaXRpb24oY29uc3QgRmxv
YXRpbmdDb24KICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZv
ckxheW91dEJveChmbG9hdEJveCk7CiAKICAgICAvLyBTZXQgc3RhdGljIHBvc2l0aW9uIGZpcnN0
LgotICAgIGRpc3BsYXlCb3guc2V0VG9wTGVmdCh7IGxpbmUuY29udGVudExvZ2ljYWxSaWdodCgp
LCBsaW5lLmxvZ2ljYWxUb3AoKSB9KTsKKyAgICBkaXNwbGF5Qm94LnNldFRvcExlZnQoeyBsaW5l
LmxvZ2ljYWxSaWdodCgpLCBsaW5lLmxvZ2ljYWxUb3AoKSB9KTsKICAgICAvLyBGbG9hdCBpdC4K
ICAgICBkaXNwbGF5Qm94LnNldFRvcExlZnQoZmxvYXRpbmdDb250ZXh0LnBvc2l0aW9uRm9yRmxv
YXQoZmxvYXRCb3gpKTsKIH0KIAotdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxh
eW91dDo6cGxhY2VJbkZsb3dQb3NpdGlvbmVkQ2hpbGRyZW4odW5zaWduZWQgZmlzdFJ1bkluZGV4
KSBjb25zdAotewotICAgIGF1dG8mIGxheW91dFN0YXRlID0gbV9mb3JtYXR0aW5nQ29udGV4dC5s
YXlvdXRTdGF0ZSgpOwotICAgIGF1dG8mIGlubGluZVJ1bnMgPSBtX2Zvcm1hdHRpbmdTdGF0ZS5p
bmxpbmVSdW5zKCk7Ci0gICAgZm9yIChhdXRvIHJ1bkluZGV4ID0gZmlzdFJ1bkluZGV4OyBydW5J
bmRleCA8IGlubGluZVJ1bnMuc2l6ZSgpOyArK3J1bkluZGV4KSB7Ci0gICAgICAgIGF1dG8mIGlu
bGluZVJ1biA9IGlubGluZVJ1bnNbcnVuSW5kZXhdOwotCi0gICAgICAgIGF1dG8gcG9zaXRpb25P
ZmZzZXQgPSBbJl0oYXV0byYgbGF5b3V0Qm94KSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogTmVl
ZCB0byBmaWd1cmUgb3V0IHdoZXRoZXIgaW4tZmxvdyBvZmZzZXQgc2hvdWxkIHN0aWNrLiBUaGlz
IG1pZ2h0IHZlcnkgd2VsbCBiZSB0ZW1wb3JhcnkuCi0gICAgICAgICAgICBPcHRpb25hbDxMYXlv
dXRTaXplPiBvZmZzZXQ7Ci0gICAgICAgICAgICBmb3IgKGF1dG8qIGJveCA9ICZsYXlvdXRCb3g7
IGJveCAhPSAmbV9mb3JtYXR0aW5nUm9vdDsgYm94ID0gYm94LT5wYXJlbnQoKSkgewotICAgICAg
ICAgICAgICAgIGlmICghYm94LT5pc0luRmxvd1Bvc2l0aW9uZWQoKSkKLSAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0LnZhbHVlT3Io
TGF5b3V0U2l6ZSgpKSArIEdlb21ldHJ5OjppbkZsb3dQb3NpdGlvbmVkUG9zaXRpb25PZmZzZXQo
bGF5b3V0U3RhdGUsICpib3gpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIG9m
ZnNldDsKLSAgICAgICAgfTsKLQotICAgICAgICBpZiAoYXV0byBvZmZzZXQgPSBwb3NpdGlvbk9m
ZnNldChpbmxpbmVSdW4uaW5saW5lSXRlbSgpLmxheW91dEJveCgpKSkgewotICAgICAgICAgICAg
aW5saW5lUnVuLm1vdmVWZXJ0aWNhbGx5KG9mZnNldC0+aGVpZ2h0KCkpOwotICAgICAgICAgICAg
aW5saW5lUnVuLm1vdmVIb3Jpem9udGFsbHkob2Zmc2V0LT53aWR0aCgpKTsKLSAgICAgICAgfQot
ICAgIH0KLX0KLQogc3RhdGljIExheW91dFVuaXQgYWRqdXN0ZWRMaW5lTG9naWNhbExlZnQoVGV4
dEFsaWduTW9kZSBhbGlnbiwgTGF5b3V0VW5pdCBsaW5lTG9naWNhbExlZnQsIExheW91dFVuaXQg
cmVtYWluaW5nV2lkdGgpCiB7CiAgICAgc3dpdGNoIChhbGlnbikgewpAQCAtNTA0LDcgKzQ4NSw3
IEBAIHN0YXRpYyBMYXlvdXRVbml0IGFkanVzdGVkTGluZUxvZ2ljYWxMZWZ0KFRleHRBbGlnbk1v
ZGUgYWxpZ24sIExheW91dFVuaXQgbGluZUxvCiB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0
OjpMaW5lTGF5b3V0OjpqdXN0aWZ5UnVucyhMaW5lJiBsaW5lKQogewogICAgIGF1dG8mIGlubGlu
ZVJ1bnMgPSBsaW5lLnJ1bnMoKTsKLSAgICBhdXRvJiBsYXN0SW5saW5lUnVuID0gaW5saW5lUnVu
cy5sYXN0KCk7CisgICAgYXV0byYgbGFzdElubGluZVJ1biA9IGlubGluZVJ1bnMubGFzdCgpLmlu
bGluZVJ1bjsKIAogICAgIC8vIEFkanVzdCAoZm9yYmlkKSB0cmFpbGluZyBleHBhbnNpb24gZm9y
IHRoZSBsYXN0IHRleHQgcnVuIG9uIGxpbmUuCiAgICAgYXV0byBleHBhbnNpb25CZWhhdmlvciA9
IGxhc3RJbmxpbmVSdW4uZXhwYW5zaW9uT3Bwb3J0dW5pdHkoKS5iZWhhdmlvcjsKQEAgLTUxOSwy
OCArNTAwLDI5IEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6Omp1
c3RpZnlSdW5zKExpbmUmIGxpbmUpCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8gZXhwYW5z
aW9uT3Bwb3J0dW5pdGllcyA9IDA7Ci0gICAgZm9yIChhdXRvJiBpbmxpbmVSdW4gOiBpbmxpbmVS
dW5zKQotICAgICAgICBleHBhbnNpb25PcHBvcnR1bml0aWVzICs9IGlubGluZVJ1bi5leHBhbnNp
b25PcHBvcnR1bml0eSgpLmNvdW50OworICAgIGZvciAoYXV0byYgcnVuIDogaW5saW5lUnVucykK
KyAgICAgICAgZXhwYW5zaW9uT3Bwb3J0dW5pdGllcyArPSBydW4uaW5saW5lUnVuLmV4cGFuc2lv
bk9wcG9ydHVuaXR5KCkuY291bnQ7CiAKICAgICBpZiAoIWV4cGFuc2lvbk9wcG9ydHVuaXRpZXMp
CiAgICAgICAgIHJldHVybjsKIAogICAgIGZsb2F0IGV4cGFuc2lvbiA9IHdpZHRoVG9EaXN0cmli
dXRlLnRvRmxvYXQoKSAvIGV4cGFuc2lvbk9wcG9ydHVuaXRpZXM7CiAgICAgTGF5b3V0VW5pdCBh
Y2N1bXVsYXRlZEV4cGFuc2lvbjsKLSAgICBmb3IgKGF1dG8mIGlubGluZVJ1biA6IGlubGluZVJ1
bnMpIHsKKyAgICBmb3IgKGF1dG8mIHJ1biA6IGlubGluZVJ1bnMpIHsKKyAgICAgICAgYXV0byYg
aW5saW5lUnVuID0gcnVuLmlubGluZVJ1bjsgCiAgICAgICAgIGF1dG8gZXhwYW5zaW9uRm9yUnVu
ID0gaW5saW5lUnVuLmV4cGFuc2lvbk9wcG9ydHVuaXR5KCkuY291bnQgKiBleHBhbnNpb247CiAK
ICAgICAgICAgaW5saW5lUnVuLmV4cGFuc2lvbk9wcG9ydHVuaXR5KCkuZXhwYW5zaW9uID0gZXhw
YW5zaW9uRm9yUnVuOwotICAgICAgICBpbmxpbmVSdW4uc2V0TG9naWNhbExlZnQoaW5saW5lUnVu
LmxvZ2ljYWxMZWZ0KCkgKyBhY2N1bXVsYXRlZEV4cGFuc2lvbik7Ci0gICAgICAgIGlubGluZVJ1
bi5zZXRMb2dpY2FsV2lkdGgoaW5saW5lUnVuLmxvZ2ljYWxXaWR0aCgpICsgZXhwYW5zaW9uRm9y
UnVuKTsKKyAgICAgICAgaW5saW5lUnVuLm1vdmVIb3Jpem9udGFsbHkoYWNjdW11bGF0ZWRFeHBh
bnNpb24pOworICAgICAgICBpbmxpbmVSdW4uZXhwYW5kSG9yaXpvbnRhbGx5KGV4cGFuc2lvbkZv
clJ1bik7CiAgICAgICAgIGFjY3VtdWxhdGVkRXhwYW5zaW9uICs9IGV4cGFuc2lvbkZvclJ1bjsK
ICAgICB9CiB9CiAKLXZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OmNv
bXB1dGVFeHBhbnNpb25PcHBvcnR1bml0aWVzKExpbmUmIGxpbmUsIGNvbnN0IElubGluZVJ1blBy
b3ZpZGVyOjpSdW4mIHJ1biwgSW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6VHlwZSBsYXN0UnVuVHlw
ZSkgY29uc3QKK3ZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OmNvbXB1
dGVFeHBhbnNpb25PcHBvcnR1bml0aWVzKExpbmUmIGxpbmUsIGNvbnN0IElubGluZUl0ZW0mIGlu
bGluZUl0ZW0sIGJvb2wgcHJldmlvdXNSdW5Jc1doaXRlcGFjZSkgY29uc3QKIHsKLSAgICBhdXRv
IGlzRXhwYW5zaW9uT3Bwb3J0dW5pdHkgPSBbXShhdXRvIGN1cnJlbnRSdW5Jc1doaXRlc3BhY2Us
IGF1dG8gbGFzdFJ1bklzV2hpdGVzcGFjZSkgewotICAgICAgICByZXR1cm4gY3VycmVudFJ1bklz
V2hpdGVzcGFjZSB8fCAoIWN1cnJlbnRSdW5Jc1doaXRlc3BhY2UgJiYgIWxhc3RSdW5Jc1doaXRl
c3BhY2UpOworICAgIGF1dG8gaXNFeHBhbnNpb25PcHBvcnR1bml0eSA9IFtdKGF1dG8gY3VycmVu
dFJ1bklzV2hpdGVzcGFjZSwgYXV0byBwcmV2aW91c1J1bklzV2hpdGVwYWNlKSB7CisgICAgICAg
IHJldHVybiBjdXJyZW50UnVuSXNXaGl0ZXNwYWNlIHx8ICghY3VycmVudFJ1bklzV2hpdGVzcGFj
ZSAmJiAhcHJldmlvdXNSdW5Jc1doaXRlcGFjZSk7CiAgICAgfTsKIAogICAgIGF1dG8gZXhwYW5z
aW9uQmVoYXZpb3IgPSBbXShhdXRvIGlzQXRFeHBhbnNpb25PcHBvcnR1bml0eSkgewpAQCAtNTQ5
LDkgKzUzMSwxMCBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0Ojpj
b21wdXRlRXhwYW5zaW9uT3Bwb3J0dW5pdGllcyhMaW5lJiBsaQogICAgICAgICByZXR1cm4gZXhw
YW5zaW9uQmVoYXZpb3I7CiAgICAgfTsKIAotICAgIGF1dG8gaXNBdEV4cGFuc2lvbk9wcG9ydHVu
aXR5ID0gaXNFeHBhbnNpb25PcHBvcnR1bml0eShydW4uaXNXaGl0ZXNwYWNlKCksIGxhc3RSdW5U
eXBlID09IElubGluZVJ1blByb3ZpZGVyOjpSdW46OlR5cGU6OldoaXRlc3BhY2UpOworICAgIGF1
dG8gY3VycmVudFJ1bklzV2hpdGVzcGFjZSA9IGlzPElubGluZVRleHRJdGVtPihpbmxpbmVJdGVt
KSA/IGRvd25jYXN0PElubGluZVRleHRJdGVtPihpbmxpbmVJdGVtKS5pc1doaXRlc3BhY2UoKSA6
IGZhbHNlOworICAgIGF1dG8gaXNBdEV4cGFuc2lvbk9wcG9ydHVuaXR5ID0gaXNFeHBhbnNpb25P
cHBvcnR1bml0eShjdXJyZW50UnVuSXNXaGl0ZXNwYWNlLCBwcmV2aW91c1J1bklzV2hpdGVwYWNl
KTsKIAotICAgIGF1dG8mIGN1cnJlbnRJbmxpbmVSdW4gPSBsaW5lLnJ1bnMoKS5sYXN0KCk7Cisg
ICAgYXV0byYgY3VycmVudElubGluZVJ1biA9IGxpbmUucnVucygpLmxhc3QoKS5pbmxpbmVSdW47
CiAgICAgYXV0byYgZXhwYW5zaW9uT3Bwb3J0dW5pdHkgPSBjdXJyZW50SW5saW5lUnVuLmV4cGFu
c2lvbk9wcG9ydHVuaXR5KCk7CiAgICAgaWYgKGlzQXRFeHBhbnNpb25PcHBvcnR1bml0eSkKICAg
ICAgICAgKytleHBhbnNpb25PcHBvcnR1bml0eS5jb3VudDsKQEAgLTU2NywzOCArNTUwLDE0IEBA
IHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OmFsaWduUnVucyhUZXh0
QWxpZ25Nb2RlIHRleHRBbGlnbiwgTGluCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBh
dXRvIGxpbmVMb2dpY2FsTGVmdCA9IGxpbmUuY29udGVudExvZ2ljYWxMZWZ0KCk7CisgICAgYXV0
byBsaW5lTG9naWNhbExlZnQgPSBsaW5lLmxvZ2ljYWxMZWZ0KCk7CiAgICAgYXV0byBhZGp1c3Rl
ZExvZ2ljYWxMZWZ0ID0gYWRqdXN0ZWRMaW5lTG9naWNhbExlZnQoYWRqdXRlZFRleHRBbGlnbm1l
bnQsIGxpbmVMb2dpY2FsTGVmdCwgbGluZS5hdmFpbGFibGVXaWR0aCgpKTsKICAgICBpZiAoYWRq
dXN0ZWRMb2dpY2FsTGVmdCA9PSBsaW5lTG9naWNhbExlZnQpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGF1dG8gZGVsdGEgPSBhZGp1c3RlZExvZ2ljYWxMZWZ0IC0gbGluZUxvZ2ljYWxMZWZ0Owot
ICAgIGZvciAoYXV0byYgaW5saW5lUnVuIDogbGluZS5ydW5zKCkpCi0gICAgICAgIGlubGluZVJ1
bi5zZXRMb2dpY2FsTGVmdChpbmxpbmVSdW4ubG9naWNhbExlZnQoKSArIGRlbHRhKTsKLX0KLQot
TGF5b3V0VW5pdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6cnVuV2lkdGgo
Y29uc3QgSW5saW5lQ29udGVudCYgaW5saW5lQ29udGVudCwgY29uc3QgSW5saW5lSXRlbSYgaW5s
aW5lSXRlbSwgSXRlbVBvc2l0aW9uIGZyb20sIHVuc2lnbmVkIGxlbmd0aCwgTGF5b3V0VW5pdCBj
b250ZW50TG9naWNhbExlZnQpIGNvbnN0IAotewotICAgIExheW91dFVuaXQgd2lkdGg7Ci0gICAg
YXV0byBzdGFydFBvc2l0aW9uID0gZnJvbTsKLSAgICBhdXRvIGl0ZXJhdG9yID0gaW5saW5lQ29u
dGVudC5maW5kKGNvbnN0X2Nhc3Q8SW5saW5lSXRlbSo+KCZpbmxpbmVJdGVtKSk7Ci0jaWYgIUFT
U0VSVF9ESVNBQkxFRAotICAgIGF1dG8gaW5saW5lSXRlbUVuZCA9IGlubGluZUNvbnRlbnQuZW5k
KCk7Ci0jZW5kaWYKLSAgICB3aGlsZSAobGVuZ3RoKSB7Ci0gICAgICAgIEFTU0VSVChpdGVyYXRv
ciAhPSBpbmxpbmVJdGVtRW5kKTsKLSAgICAgICAgYXV0byYgY3VycmVudElubGluZUl0ZW0gPSAq
Kml0ZXJhdG9yOwotICAgICAgICBhdXRvIGVuZFBvc2l0aW9uID0gc3RkOjptaW48SXRlbVBvc2l0
aW9uPihzdGFydFBvc2l0aW9uICsgbGVuZ3RoLCBjdXJyZW50SW5saW5lSXRlbS50ZXh0Q29udGVu
dCgpLmxlbmd0aCgpKTsKLSAgICAgICAgYXV0byB0ZXh0V2lkdGggPSBUZXh0VXRpbDo6d2lkdGgo
Y3VycmVudElubGluZUl0ZW0sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uLCBjb250ZW50TG9n
aWNhbExlZnQpOwotCi0gICAgICAgIGNvbnRlbnRMb2dpY2FsTGVmdCArPSB0ZXh0V2lkdGg7Ci0g
ICAgICAgIHdpZHRoICs9IHRleHRXaWR0aDsKLSAgICAgICAgbGVuZ3RoIC09IChlbmRQb3NpdGlv
biAtIHN0YXJ0UG9zaXRpb24pOwotCi0gICAgICAgIHN0YXJ0UG9zaXRpb24gPSAwOwotICAgICAg
ICArK2l0ZXJhdG9yOwotICAgIH0KLSAgICByZXR1cm4gd2lkdGg7CisgICAgZm9yIChhdXRvJiBy
dW4gOiBsaW5lLnJ1bnMoKSkKKyAgICAgICAgcnVuLmlubGluZVJ1bi5tb3ZlSG9yaXpvbnRhbGx5
KGRlbHRhKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ1N0YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nU3RhdGUuaAppbmRleCA2NjJhODNj
M2ViYzUxYmE3YjBlM2M0ZWFjY2Y1MTg0NGU5ZWQ2NTljLi4wOGIxYTVmOTcxOTIzOWRhN2U1ZTZl
ZmVhZjdiYmQyZGNhNDE3NDgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5s
aW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nU3RhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nU3RhdGUuaApAQCAtMjcs
MTUgKzI3LDE4IEBACiAKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKIAor
I2luY2x1ZGUgIkRpc3BsYXlSdW4uaCIKICNpbmNsdWRlICJGb3JtYXR0aW5nU3RhdGUuaCIKICNp
bmNsdWRlICJJbmxpbmVJdGVtLmgiCi0jaW5jbHVkZSAiSW5saW5lUnVuLmgiCiAjaW5jbHVkZSA8
d3RmL0lzb01hbGxvYy5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogbmFtZXNwYWNlIExheW91dCB7CiAKKy8vIFRlbXAKK3VzaW5nIElubGluZUl0
ZW1zID0gTGlzdEhhc2hTZXQ8c3RkOjp1bmlxdWVfcHRyPElubGluZUl0ZW0+PjsKK3VzaW5nIElu
bGluZVJ1bnMgPSBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPERpc3BsYXk6OlJ1bj4+OwogLy8gSW5s
aW5lRm9ybWF0dGluZ1N0YXRlIGhvbGRzIHRoZSBzdGF0ZSBmb3IgYSBwYXJ0aWN1bGFyIGlubGlu
ZSBmb3JtYXR0aW5nIGNvbnRleHQgdHJlZS4KIGNsYXNzIElubGluZUZvcm1hdHRpbmdTdGF0ZSA6
IHB1YmxpYyBGb3JtYXR0aW5nU3RhdGUgewogICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoSW5s
aW5lRm9ybWF0dGluZ1N0YXRlKTsKQEAgLTQzLDE1ICs0NiwxNiBAQCBwdWJsaWM6CiAgICAgSW5s
aW5lRm9ybWF0dGluZ1N0YXRlKFJlZjxGbG9hdGluZ1N0YXRlPiYmLCBMYXlvdXRTdGF0ZSYpOwog
ICAgIHZpcnR1YWwgfklubGluZUZvcm1hdHRpbmdTdGF0ZSgpOwogCi0gICAgSW5saW5lQ29udGVu
dCYgaW5saW5lQ29udGVudCgpIHsgcmV0dXJuIG1faW5saW5lQ29udGVudDsgfQotICAgIElubGlu
ZUl0ZW0qIGxhc3RJbmxpbmVJdGVtKCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVDb250ZW50Lmlz
RW1wdHkoKSA/IG51bGxwdHIgOiBtX2lubGluZUNvbnRlbnQubGFzdCgpLmdldCgpOyB9CisgICAg
dm9pZCBhZGRJbmxpbmVUZXh0SXRlbSgpOwogCi0gICAgLy8gVGVtcAorICAgIElubGluZUl0ZW1z
JiBpbmxpbmVJdGVtcygpIHsgcmV0dXJuIG1faW5saW5lSXRlbXM7IH0KICAgICBJbmxpbmVSdW5z
JiBpbmxpbmVSdW5zKCkgeyByZXR1cm4gbV9pbmxpbmVSdW5zOyB9Ci0gICAgdm9pZCBhcHBlbmRJ
bmxpbmVSdW4oSW5saW5lUnVuIGlubGluZVJ1bikgeyBtX2lubGluZVJ1bnMuYXBwZW5kKGlubGlu
ZVJ1bik7IH0KKworICAgIHZvaWQgYWRkSW5saW5lSXRlbShzdGQ6OnVuaXF1ZV9wdHI8SW5saW5l
SXRlbT4mJiBpbmxpbmVJdGVtKSB7IG1faW5saW5lSXRlbXMuYWRkKFdURk1vdmUoaW5saW5lSXRl
bSkpOyB9CisgICAgdm9pZCBhZGRJbmxpbmVSdW4oc3RkOjp1bmlxdWVfcHRyPERpc3BsYXk6OlJ1
bj4mJiBpbmxpbmVSdW4pIHsgbV9pbmxpbmVSdW5zLmFwcGVuZChXVEZNb3ZlKGlubGluZVJ1bikp
OyB9CiAKIHByaXZhdGU6Ci0gICAgSW5saW5lQ29udGVudCBtX2lubGluZUNvbnRlbnQ7CisgICAg
SW5saW5lSXRlbXMgbV9pbmxpbmVJdGVtczsKICAgICBJbmxpbmVSdW5zIG1faW5saW5lUnVuczsK
IH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5n
L0lubGluZUl0ZW0uaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lu
bGluZUl0ZW0uaAppbmRleCA1YTEwZmMxZDFmZmNhNjM0NGUwNDAwZTU5ZDZhNTAwN2ExNWJiODRl
Li44N2VkOWMzNmY2YzkyM2FlOGU0Zjg5OTc0OTZlYmNhYzVhY2ZlOWM0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVJdGVtLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lSXRlbS5oCkBAIC0z
Niw4MyArMzYsNTcgQEAgbmFtZXNwYWNlIExheW91dCB7CiAKIGNsYXNzIElubGluZUl0ZW0gewog
cHVibGljOgotICAgIElubGluZUl0ZW0oY29uc3QgQm94JiBsYXlvdXRCb3gpOworICAgIGVudW0g
Y2xhc3MgVHlwZSB7IFRleHQsIEhhcmRMaW5lQnJlYWssIEJveCwgRmxvYXQsIENvbnRhaW5lclN0
YXJ0LCBDb250YWluZXJFbmQgfTsKKyAgICBJbmxpbmVJdGVtKGNvbnN0IEJveCYgbGF5b3V0Qm94
LCBUeXBlKTsKIAotICAgIGVudW0gY2xhc3MgVHlwZSB7IFRleHQsIEhhcmRMaW5lQnJlYWssIElu
bGluZUJveCwgRmxvYXQgfTsKLSAgICBUeXBlIHR5cGUoKSBjb25zdDsKKyAgICBUeXBlIHR5cGUo
KSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KICAgICBjb25zdCBCb3gmIGxheW91dEJveCgpIGNv
bnN0IHsgcmV0dXJuIG1fbGF5b3V0Qm94OyB9CiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxl
KCkgY29uc3QgeyByZXR1cm4gbV9sYXlvdXRCb3guc3R5bGUoKTsgfQotICAgIFN0cmluZyB0ZXh0
Q29udGVudCgpIGNvbnN0OwotICAgIC8vIERldGFjaGluZ1J1bGUgaW5kaWNhdGVzIHdoZXRoZXIg
dGhlIGlubGluZSBlbGVtZW50IG5lZWRzIHRvIGJlIHdyYXBwZWQgaW4gYSBkZWRpY2V0ZWQgcnVu
IG9yIGJyZWFrIGZyb20gcHJldmlvdXMvbmV4dCBydW5zLgotICAgIC8vIDxzcGFuPnN0YXJ0PC9z
cGFuPjxzcGFuIHN0eWxlPSJwb3NpdGlvbjogcmVsYXRpdmU7Ij4gbWlkZGxlIDwvc3Bhbj48c3Bh
bj5lbmQ8L3NwYW4+Ci0gICAgLy8gaW5wdXQgdG8gbGluZSBicmVha2luZyAtPiA8c3RhcnQgbWlk
ZGxlIGVuZD4KLSAgICAvLyBvdXRwdXQgb2YgbGluZSBicmVha2luZyAoY29uc2lkZXJpbmcgaW5m
aW5pdGUgY29uc3RyYWludCkgLT4gPHN0YXJ0IG1pZGRsZSBlbmQ+Ci0gICAgLy8gZHVlIHRvIHRo
ZSBpbi1mbG93IHBvc2l0aW9uaW5nLCB0aGUgZmluYWwgcnVucyBhcmU6IDxzdGFydD48IG1pZGRs
ZSA+PGVuZD4KLSAgICAvLyAic3RhcnQiIC0+IG4vYQotICAgIC8vICIgbWlkZGxlICIgLT4gQnJl
YWtBdFN0YXJ0IGFuZCBCcmVha0F0RW5kCi0gICAgLy8gImVuZCIgLT4gbi9hCi0gICAgLy8KLSAg
ICAvLyA8c3Bhbj5wYXJlbnQgPC9zcGFuPjxzcGFuIHN0eWxlPSJwYWRkaW5nOiAxMHB4OyI+c3Rh
cnQ8c3Bhbj4gbWlkZGxlIDwvc3Bhbj5lbmQ8L3NwYW4+PHNwYW4+IHBhcmVudDwvc3Bhbj4KLSAg
ICAvLyBpbnB1dCB0byBsaW5lIGJyZWFraW5nIC0+IDxwYXJlbnQgc3RhcnQgbWlkZGxlIGVuZCBw
YXJlbnQ+Ci0gICAgLy8gb3V0cHV0IG9mIGxpbmUgYnJlYWtpbmcgKGNvbnNpZGVyaW5nIGluZmlu
aXRlIGNvbnN0cmFpbnQpIC0+IDxwYXJlbnQgc3RhcnQgbWlkZGxlIGVuZCBwYXJlbnQ+Ci0gICAg
Ly8gZHVlIHRvIHBhZGRpbmcsIGZpbmFsIHJ1bnMgLT4gPHBhcmVudD48c3RhcnQgbWlkZGxlIGVu
ZD48cGFyZW50PgotICAgIC8vICJwYXJlbnQiIC0+IG4vYQotICAgIC8vICJzdGFydCIgLT4gQnJl
YWtBdFN0YXJ0Ci0gICAgLy8gIiBtaWRkbGUgIiAtPiBuL2EKLSAgICAvLyAiZW5kIiAtPiBCcmVh
a0F0RW5kCi0gICAgLy8gInBhcmVudCIgLT4gbi9hCi0gICAgZW51bSBjbGFzcyBEZXRhY2hpbmdS
dWxlIHsKLSAgICAgICAgQnJlYWtBdFN0YXJ0ID0gMSA8PCAwLAotICAgICAgICBCcmVha0F0RW5k
ID0gMSA8PCAxCi0gICAgfTsKLSAgICB2b2lkIGFkZERldGFjaGluZ1J1bGUoT3B0aW9uU2V0PERl
dGFjaGluZ1J1bGU+IGRldGFjaGluZ1J1bGUpIHsgbV9kZXRhY2hpbmdSdWxlcy5hZGQoZGV0YWNo
aW5nUnVsZSk7IH0KLSAgICBPcHRpb25TZXQ8RGV0YWNoaW5nUnVsZT4gZGV0YWNoaW5nUnVsZXMo
KSBjb25zdCB7IHJldHVybiBtX2RldGFjaGluZ1J1bGVzOyB9CisgICAgdm9pZCBzZXRXaWR0aChM
YXlvdXRVbml0KTsKKyAgICBMYXlvdXRVbml0IHdpZHRoKCkgY29uc3Q7CiAKLSAgICAvLyBOb24t
YnJlYWthYmxlIHN0YXJ0L2VuZCBtYXJrcyBtYXJnaW4vcGFkZGluZy9ib3JkZXIgc3BhY2UgKGV2
ZW4gd2hlbiBpdCBkb2VzIG5vdCBkaXJlY3RseSBjb21lIGZyb20gdGhlIGFzc29jaWF0ZWQgbGF5
b3V0IGJveCkKLSAgICAvLyA8c3BhbiBzdHlsZT0icGFkZGluZzogNXB4Ij48c3Bhbj5uZXN0ZWQg
Y29udGVudCB3aXRoIHBhZGRpbmcgcGFyZW50PC9zcGFuPC9zcGFuPgotICAgIC8vIDxuZXN0ZWQg
Y29udGVudCB3aXRoIHBhZGRpbmcgcGFyZW50PiBpbmxpbmUgcnVuIGhhcyA1cHggbm9uLWJyZWFr
YWJsZSBzdGFydC9lbmQuCi0gICAgTGF5b3V0VW5pdCBub25CcmVha2FibGVTdGFydCgpIGNvbnN0
IHsgcmV0dXJuIG1fbm9uQnJlYWthYmxlU3RhcnQ7IH0KLSAgICBMYXlvdXRVbml0IG5vbkJyZWFr
YWJsZUVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fbm9uQnJlYWthYmxlRW5kOyB9Ci0gICAgdm9pZCBh
ZGROb25CcmVha2FibGVTdGFydChMYXlvdXRVbml0IHZhbHVlKSB7IG1fbm9uQnJlYWthYmxlU3Rh
cnQgKz0gdmFsdWU7IH0KLSAgICB2b2lkIGFkZE5vbkJyZWFrYWJsZUVuZChMYXlvdXRVbml0IHZh
bHVlKSB7IG1fbm9uQnJlYWthYmxlRW5kICs9IHZhbHVlOyB9CisgICAgYm9vbCBpc1RleHQoKSBj
b25zdCB7IHJldHVybiB0eXBlKCkgPT0gVHlwZTo6VGV4dDsgfQorICAgIGJvb2wgaXNCb3goKSBj
b25zdCB7IHJldHVybiB0eXBlKCkgPT0gVHlwZTo6Qm94OyB9CisgICAgYm9vbCBpc0hhcmRMaW5l
QnJlYWsoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gVHlwZTo6SGFyZExpbmVCcmVhazsgfQor
ICAgIGJvb2wgaXNGbG9hdCgpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBUeXBlOjpGbG9hdDsg
fQorICAgIGJvb2wgaXNMaW5lQnJlYWsoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gVHlwZTo6
SGFyZExpbmVCcmVhazsgfQorICAgIGJvb2wgaXNDb250YWluZXJTdGFydCgpIGNvbnN0IHsgcmV0
dXJuIHR5cGUoKSA9PSBUeXBlOjpDb250YWluZXJTdGFydDsgfQorICAgIGJvb2wgaXNDb250YWlu
ZXJFbmQoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gVHlwZTo6Q29udGFpbmVyRW5kOyB9CiAK
IHByaXZhdGU6CiAgICAgY29uc3QgQm94JiBtX2xheW91dEJveDsKLSAgICBPcHRpb25TZXQ8RGV0
YWNoaW5nUnVsZT4gbV9kZXRhY2hpbmdSdWxlczsKLSAgICBMYXlvdXRVbml0IG1fbm9uQnJlYWth
YmxlU3RhcnQ7Ci0gICAgTGF5b3V0VW5pdCBtX25vbkJyZWFrYWJsZUVuZDsKKyAgICBjb25zdCBU
eXBlIG1fdHlwZTsKKyAgICBMYXlvdXRVbml0IG1fd2lkdGg7CisjaWYgIUFTU0VSVF9ESVNBQkxF
RAorICAgIGJvb2wgbV9oYXNWYWxpZFdpZHRoIHsgZmFsc2UgfTsKKyNlbmRpZgogfTsKIAotdXNp
bmcgSW5saW5lQ29udGVudCA9IExpc3RIYXNoU2V0PHN0ZDo6dW5pcXVlX3B0cjxJbmxpbmVJdGVt
Pj47Ci0KLWlubGluZSBJbmxpbmVJdGVtOjpJbmxpbmVJdGVtKGNvbnN0IEJveCYgbGF5b3V0Qm94
KQoraW5saW5lIElubGluZUl0ZW06OklubGluZUl0ZW0oY29uc3QgQm94JiBsYXlvdXRCb3gsIFR5
cGUgdHlwZSkKICAgICA6IG1fbGF5b3V0Qm94KGxheW91dEJveCkKKyAgICAsIG1fdHlwZSh0eXBl
KQogewogfQogCi1pbmxpbmUgSW5saW5lSXRlbTo6VHlwZSBJbmxpbmVJdGVtOjp0eXBlKCkgY29u
c3QKK2lubGluZSB2b2lkIElubGluZUl0ZW06OnNldFdpZHRoKExheW91dFVuaXQgd2lkdGgpCiB7
Ci0gICAgaWYgKGlzPElubGluZUJveD4obV9sYXlvdXRCb3gpICYmIGRvd25jYXN0PElubGluZUJv
eD4obV9sYXlvdXRCb3gpLmhhc1RleHRDb250ZW50KCkpCi0gICAgICAgIHJldHVybiBUeXBlOjpU
ZXh0OwotCi0gICAgaWYgKGlzPExpbmVCcmVha0JveD4obV9sYXlvdXRCb3gpKQotICAgICAgICBy
ZXR1cm4gVHlwZTo6SGFyZExpbmVCcmVhazsKLQotICAgIGlmIChtX2xheW91dEJveC5pc0Zsb2F0
aW5nUG9zaXRpb25lZCgpKQotICAgICAgICByZXR1cm4gVHlwZTo6RmxvYXQ7Ci0KLSAgICBBU1NF
UlQobV9sYXlvdXRCb3guaXNJbmxpbmVMZXZlbEJveCgpKTsKLSAgICByZXR1cm4gVHlwZTo6SW5s
aW5lQm94OworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBtX2hhc1ZhbGlkV2lkdGggPSB0cnVl
OworI2VuZGlmCisgICAgbV93aWR0aCA9IHdpZHRoOwogfQogCi1pbmxpbmUgU3RyaW5nIElubGlu
ZUl0ZW06OnRleHRDb250ZW50KCkgY29uc3QKK2lubGluZSBMYXlvdXRVbml0IElubGluZUl0ZW06
OndpZHRoKCkgY29uc3QKIHsKLSAgICBpZiAodHlwZSgpICE9IFR5cGU6OlRleHQpCi0gICAgICAg
IHJldHVybiB7IH07Ci0KLSAgICByZXR1cm4gZG93bmNhc3Q8SW5saW5lQm94PihtX2xheW91dEJv
eCkudGV4dENvbnRlbnQoKTsKKyAgICBBU1NFUlQobV9oYXNWYWxpZFdpZHRoKTsKKyAgICByZXR1
cm4gbV93aWR0aDsKIH0KIAorI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0lOTElORV9J
VEVNKFRvVmFsdWVUeXBlTmFtZSwgcHJlZGljYXRlKSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0JFR0lOKFdlYkNvcmU6OkxheW91dDo6VG9WYWx1ZVR5cGVOYW1lKSBcCisgICAgc3RhdGljIGJv
b2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkxheW91dDo6SW5saW5lSXRlbSYgaW5saW5lSXRlbSkg
eyByZXR1cm4gaW5saW5lSXRlbS5wcmVkaWNhdGU7IH0gXAorU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19FTkQoKQorCiB9CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCcmVha2VyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCcmVha2VyLmNwcAppbmRleCA1NzZh
MGJiNzk1NDM3ZTAxMzc0MmE3Mjg2OTQzYWYyNDgxMDA0ZmVjLi4yMDE1N2NhMGVlOTZmYjhkZTJh
NTNlZTg2YmJkNjhkN2RkMmQyZTgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
aW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnJlYWtlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJyZWFrZXIuY3BwCkBAIC0yOCwx
NzMgKzI4LDk5IEBACiAKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKIAot
I2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiSHlwaGVuYXRpb24uaCIKLSNpbmNs
dWRlICJJbmxpbmVSdW5Qcm92aWRlci5oIgotI2luY2x1ZGUgIlRleHRVdGlsLmgiCi0jaW5jbHVk
ZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKyNpbmNsdWRlICJMYXlvdXRTdGF0ZS5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgTGF5b3V0IHsKIAotV1RGX01BS0VfSVNPX0FM
TE9DQVRFRF9JTVBMKElubGluZUxpbmVCcmVha2VyKTsKLQotSW5saW5lTGluZUJyZWFrZXI6Oklu
bGluZUxpbmVCcmVha2VyKGNvbnN0IExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgY29uc3QgSW5s
aW5lQ29udGVudCYgaW5saW5lQ29udGVudCwgY29uc3QgVmVjdG9yPElubGluZVJ1blByb3ZpZGVy
OjpSdW4+JiBpbmxpbmVSdW5zKQorTGluZUJyZWFrZXI6OkxpbmVCcmVha2VyKGNvbnN0IExheW91
dFN0YXRlJiBsYXlvdXRTdGF0ZSkKICAgICA6IG1fbGF5b3V0U3RhdGUobGF5b3V0U3RhdGUpCi0g
ICAgLCBtX2lubGluZUNvbnRlbnQoaW5saW5lQ29udGVudCkKLSAgICAsIG1faW5saW5lUnVucyhp
bmxpbmVSdW5zKQogeworCiB9CiAKLU9wdGlvbmFsPElubGluZUxpbmVCcmVha2VyOjpSdW4+IElu
bGluZUxpbmVCcmVha2VyOjpuZXh0UnVuKExheW91dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0LCBM
YXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoLCBib29sIGxpbmVJc0VtcHR5KQorTGluZUJyZWFrZXI6
OkJyZWFraW5nQ29udGV4dCBMaW5lQnJlYWtlcjo6YnJlYWtpbmdDb250ZXh0KElubGluZUl0ZW0m
IGlubGluZUl0ZW0sIExpbmVDb250ZXh0IGxpbmVDb250ZXh0KQogewotICAgIGlmIChpc0F0Q29u
dGVudEVuZCgpKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgSW5saW5lUnVu
UHJvdmlkZXI6OlJ1biBjdXJyZW50SW5saW5lUnVuID0gbV9pbmxpbmVSdW5zW21fY3VycmVudFJ1
bkluZGV4XTsKLSAgICAvLyBBZGp1c3QgdGhlIGN1cnJlbnQgcnVuIGlmIGl0IGlzIHNwbGl0IG1p
ZHdvcmQuCi0gICAgaWYgKG1fc3BsaXRQb3NpdGlvbikgewotICAgICAgICBBU1NFUlQoY3VycmVu
dElubGluZVJ1bi5pc1RleHQoKSk7Ci0gICAgICAgIG1fc3BsaXRQb3NpdGlvbiA9IFdURjo6bnVs
bG9wdDsKLSAgICB9CisgICAgYXV0byBpc0F0QnJlYWtpbmdPcHBvcnR1bml0eSA9IGlzPElubGlu
ZVRleHRJdGVtPihpbmxpbmVJdGVtKSA/IGRvd25jYXN0PElubGluZVRleHRJdGVtPihpbmxpbmVJ
dGVtKS5pc1doaXRlc3BhY2UoKSAKKyAgICAgICAgOiAhaW5saW5lSXRlbS5pc0Zsb2F0KCkgJiYg
IWlubGluZUl0ZW0uaXNDb250YWluZXJTdGFydCgpICYmICFpbmxpbmVJdGVtLmlzQ29udGFpbmVy
RW5kKCk7CiAKLSAgICBpZiAoY3VycmVudElubGluZVJ1bi5pc0xpbmVCcmVhaygpKSB7Ci0gICAg
ICAgICsrbV9jdXJyZW50UnVuSW5kZXg7Ci0gICAgICAgIHJldHVybiBSdW4geyBSdW46OlBvc2l0
aW9uOjpMaW5lRW5kLCAwLCBjdXJyZW50SW5saW5lUnVuIH07Ci0gICAgfQorICAgIGlubGluZUl0
ZW0uc2V0V2lkdGgocnVuV2lkdGgoaW5saW5lSXRlbSwgbGluZUNvbnRleHQubG9naWNhbExlZnQp
KTsKKyAgICBpZiAoaW5saW5lSXRlbS53aWR0aCgpIDw9IGxpbmVDb250ZXh0LmF2YWlsYWJsZVdp
ZHRoKQorICAgICAgICByZXR1cm4geyBCcmVha2luZ0JlaGF2aW9yOjpLZWVwLCBpc0F0QnJlYWtp
bmdPcHBvcnR1bml0eSB9OwogCi0gICAgYXV0byBjb250ZW50V2lkdGggPSBydW5XaWR0aChjdXJy
ZW50SW5saW5lUnVuLCBjb250ZW50TG9naWNhbExlZnQpOwotICAgIC8vIDEuIFBsZW50eSBvZiBz
cGFjZSBsZWZ0LgotICAgIGlmIChjb250ZW50V2lkdGggPD0gYXZhaWxhYmxlV2lkdGgpIHsKLSAg
ICAgICAgKyttX2N1cnJlbnRSdW5JbmRleDsKLSAgICAgICAgcmV0dXJuIFJ1biB7IGxpbmVJc0Vt
cHR5ID8gUnVuOjpQb3NpdGlvbjo6TGluZUJlZ2luIDogUnVuOjpQb3NpdGlvbjo6VW5kZXRlcm1p
bmVkLCBjb250ZW50V2lkdGgsIGN1cnJlbnRJbmxpbmVSdW4gfTsKLSAgICB9Ci0KLSAgICAvLyAy
LiBObyBzcGFjZSBsZWZ0IHdoYXRzb2V2ZXIuCi0gICAgaWYgKGF2YWlsYWJsZVdpZHRoIDw9IDAp
IHsKLSAgICAgICAgKyttX2N1cnJlbnRSdW5JbmRleDsKLSAgICAgICAgcmV0dXJuIFJ1biB7IFJ1
bjo6UG9zaXRpb246OkxpbmVCZWdpbiwgY29udGVudFdpZHRoLCBjdXJyZW50SW5saW5lUnVuIH07
Ci0gICAgfQotCi0gICAgLy8gMy4gU29tZSBzcGFjZSBsZWZ0LiBMZXQncyBmaW5kIG91dCB3aGF0
IHdlIG5lZWQgdG8gZG8gd2l0aCB0aGlzIHJ1bi4KLSAgICBhdXRvIGJyZWFraW5nQmVoYXZpb3Ig
PSBsaW5lQnJlYWtpbmdCZWhhdmlvcihjdXJyZW50SW5saW5lUnVuLCBsaW5lSXNFbXB0eSk7Ci0g
ICAgaWYgKGJyZWFraW5nQmVoYXZpb3IgPT0gTGluZUJyZWFraW5nQmVoYXZpb3I6OktlZXApIHsK
LSAgICAgICAgKyttX2N1cnJlbnRSdW5JbmRleDsKLSAgICAgICAgcmV0dXJuIFJ1biB7IGxpbmVJ
c0VtcHR5ID8gUnVuOjpQb3NpdGlvbjo6TGluZUJlZ2luIDogUnVuOjpQb3NpdGlvbjo6VW5kZXRl
cm1pbmVkLCBjb250ZW50V2lkdGgsIGN1cnJlbnRJbmxpbmVSdW4gfTsKLSAgICB9Ci0KLSAgICBp
ZiAoYnJlYWtpbmdCZWhhdmlvciA9PSBMaW5lQnJlYWtpbmdCZWhhdmlvcjo6V3JhcFRvTmV4dExp
bmUpIHsKLSAgICAgICAgKyttX2N1cnJlbnRSdW5JbmRleDsKLSAgICAgICAgcmV0dXJuIFJ1biB7
IFJ1bjo6UG9zaXRpb246OkxpbmVCZWdpbiwgY29udGVudFdpZHRoLCBjdXJyZW50SW5saW5lUnVu
IH07Ci0gICAgfQotCi0gICAgQVNTRVJUKGJyZWFraW5nQmVoYXZpb3IgPT0gTGluZUJyZWFraW5n
QmVoYXZpb3I6OkJyZWFrKTsKLSAgICAvLyBTcGxpdCBjb250ZW50LgotICAgIHJldHVybiBzcGxp
dFJ1bihjdXJyZW50SW5saW5lUnVuLCBjb250ZW50TG9naWNhbExlZnQsIGF2YWlsYWJsZVdpZHRo
LCBsaW5lSXNFbXB0eSk7Ci19CisgICAgaWYgKGlzPElubGluZVRleHRJdGVtPihpbmxpbmVJdGVt
KSkKKyAgICAgICAgcmV0dXJuIHsgd29yZEJyZWFraW5nQmVoYXZpb3IoZG93bmNhc3Q8SW5saW5l
VGV4dEl0ZW0+KGlubGluZUl0ZW0pLCBsaW5lQ29udGV4dC5pc0VtcHR5KSwgaXNBdEJyZWFraW5n
T3Bwb3J0dW5pdHkgfTsKIAotYm9vbCBJbmxpbmVMaW5lQnJlYWtlcjo6aXNBdENvbnRlbnRFbmQo
KSBjb25zdAotewotICAgIHJldHVybiBtX2N1cnJlbnRSdW5JbmRleCA9PSBtX2lubGluZVJ1bnMu
c2l6ZSgpOworICAgIC8vIFdyYXAgbm9uLXRleHQgYm94ZXMgdG8gdGhlIG5leHQgbGluZSB1bmxl
c3Mgd2UgY2FuIHRyaW0gdHJhaWxpbmcgd2hpdGVzcGFjZS4KKyAgICBhdXRvIGF2YWlsYWJsZVdp
ZHRoID0gbGluZUNvbnRleHQuYXZhaWxhYmxlV2lkdGggKyBsaW5lQ29udGV4dC50cmltbWFibGVX
aWR0aDsKKyAgICBpZiAoaW5saW5lSXRlbS53aWR0aCgpIDw9IGF2YWlsYWJsZVdpZHRoKQorICAg
ICAgICByZXR1cm4geyBCcmVha2luZ0JlaGF2aW9yOjpLZWVwLCBpc0F0QnJlYWtpbmdPcHBvcnR1
bml0eSB9OworICAgIHJldHVybiB7IEJyZWFraW5nQmVoYXZpb3I6OldyYXAsIGlzQXRCcmVha2lu
Z09wcG9ydHVuaXR5IH07CiB9CiAKLUlubGluZUxpbmVCcmVha2VyOjpMaW5lQnJlYWtpbmdCZWhh
dmlvciBJbmxpbmVMaW5lQnJlYWtlcjo6bGluZUJyZWFraW5nQmVoYXZpb3IoY29uc3QgSW5saW5l
UnVuUHJvdmlkZXI6OlJ1biYgaW5saW5lUnVuLCBib29sIGxpbmVJc0VtcHR5KQorTGluZUJyZWFr
ZXI6OkJyZWFraW5nQmVoYXZpb3IgTGluZUJyZWFrZXI6OndvcmRCcmVha2luZ0JlaGF2aW9yKGNv
bnN0IElubGluZVRleHRJdGVtJiBpbmxpbmVJdGVtLCBib29sIGxpbmVJc0VtcHR5KSBjb25zdAog
ewotICAgIC8vIExpbmUgYnJlYWtpbmcgYmVoYXZpb3VyOgorICAgIC8vIFdvcmQgYnJlYWtpbmcg
YmVoYXZpb3VyOgogICAgIC8vIDEuIFdoaXRlc2FwY2UgY29sbGFwc2Ugb24gLT4gcHVzaCB3aGl0
ZXNwYWNlIHRvIG5leHQgbGluZS4KICAgICAvLyAyLiBXaGl0ZXNwYWNlIGNvbGxhcHNlIG9mZiAt
PiB3aGl0ZXNwYWNlIGlzIHNwbGl0IHdoZXJlIHBvc3NpYmxlLgogICAgIC8vIDMuIE5vbi13aGl0
ZXNwYWNlIC0+IGZpcnN0IHJ1biBvbiB0aGUgbGluZSAtPiBlaXRoZXIgc3BsaXQgb3Iga2VwdCBv
biB0aGUgbGluZS4gKGRlcGVuZHMgb24gb3ZlcmZsb3ctd3JhcCkKICAgICAvLyA0LiBOb24td2hp
dGVzcGFjZSAtPiBhbHJlYWR5IGNvbnRlbnQgb24gdGhlIGxpbmUgLT4gZWl0aGVyIGdldHMgc3Bs
aXQgKHdvcmQtYnJlYWs6IGJyZWFrLWFsbCkgb3IgZ2V0cyBwdXNoZWQgdG8gdGhlIG5leHQgbGlu
ZS4KICAgICAvLyAoSHlwaGVuYXRlIHdoZW4gcG9zc2libGUpCiAgICAgLy8gNS4gTm9uLXRleHQg
dHlwZSAtPiBuZXh0IGxpbmUKLSAgICBhdXRvJiBzdHlsZSA9IGlubGluZVJ1bi5zdHlsZSgpOwot
Ci0gICAgaWYgKGlubGluZVJ1bi5pc1doaXRlc3BhY2UoKSkKLSAgICAgICAgcmV0dXJuIHN0eWxl
LmNvbGxhcHNlV2hpdGVTcGFjZSgpID8gTGluZUJyZWFraW5nQmVoYXZpb3I6OldyYXBUb05leHRM
aW5lIDogTGluZUJyZWFraW5nQmVoYXZpb3I6OkJyZWFrOworICAgIGF1dG8mIHN0eWxlID0gaW5s
aW5lSXRlbS5zdHlsZSgpOwogCi0gICAgaWYgKGlubGluZVJ1bi5pc05vbldoaXRlc3BhY2UoKSkg
ewotICAgICAgICBhdXRvIHNob3VsZEh5cGVuYXRlID0gIW1faHlwaGVuYXRpb25Jc0Rpc2FibGVk
ICYmIHN0eWxlLmh5cGhlbnMoKSA9PSBIeXBoZW5zOjpBdXRvICYmIGNhbkh5cGhlbmF0ZShzdHls
ZS5sb2NhbGUoKSk7Ci0gICAgICAgIGlmIChzaG91bGRIeXBlbmF0ZSkKLSAgICAgICAgICAgIHJl
dHVybiBMaW5lQnJlYWtpbmdCZWhhdmlvcjo6QnJlYWs7CisgICAgaWYgKGlubGluZUl0ZW0uaXNX
aGl0ZXNwYWNlKCkpCisgICAgICAgIHJldHVybiBzdHlsZS5jb2xsYXBzZVdoaXRlU3BhY2UoKSA/
IEJyZWFraW5nQmVoYXZpb3I6OldyYXAgOiBCcmVha2luZ0JlaGF2aW9yOjpCcmVhazsKIAotICAg
ICAgICBpZiAoc3R5bGUuYXV0b1dyYXAoKSkgewotICAgICAgICAgICAgLy8gQnJlYWsgYW55IHdv
cmQKLSAgICAgICAgICAgIGlmIChzdHlsZS53b3JkQnJlYWsoKSA9PSBXb3JkQnJlYWs6OkJyZWFr
QWxsKQotICAgICAgICAgICAgICAgIHJldHVybiBMaW5lQnJlYWtpbmdCZWhhdmlvcjo6QnJlYWs7
CisgICAgYXV0byBzaG91bGRIeXBlbmF0ZSA9ICFtX2h5cGhlbmF0aW9uSXNEaXNhYmxlZCAmJiBz
dHlsZS5oeXBoZW5zKCkgPT0gSHlwaGVuczo6QXV0byAmJiBjYW5IeXBoZW5hdGUoc3R5bGUubG9j
YWxlKCkpOworICAgIGlmIChzaG91bGRIeXBlbmF0ZSkKKyAgICAgICAgcmV0dXJuIEJyZWFraW5n
QmVoYXZpb3I6OkJyZWFrOwogCi0gICAgICAgICAgICAvLyBCcmVhayBmaXJzdCBydW4gb24gbGlu
ZS4KLSAgICAgICAgICAgIGlmIChsaW5lSXNFbXB0eSAmJiBzdHlsZS5icmVha1dvcmRzKCkgJiYg
c3R5bGUucHJlc2VydmVOZXdsaW5lKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIExpbmVCcmVh
a2luZ0JlaGF2aW9yOjpCcmVhazsKLSAgICAgICAgfQorICAgIGlmIChzdHlsZS5hdXRvV3JhcCgp
KSB7CisgICAgICAgIC8vIEJyZWFrIGFueSB3b3JkCisgICAgICAgIGlmIChzdHlsZS53b3JkQnJl
YWsoKSA9PSBXb3JkQnJlYWs6OkJyZWFrQWxsKQorICAgICAgICAgICAgcmV0dXJuIEJyZWFraW5n
QmVoYXZpb3I6OkJyZWFrOwogCi0gICAgICAgIC8vIE5vbi1icmVha2FibGUgbm9uLXdoaXRlc3Bh
Y2UgcnVuLgotICAgICAgICByZXR1cm4gbGluZUlzRW1wdHkgPyBMaW5lQnJlYWtpbmdCZWhhdmlv
cjo6S2VlcCA6IExpbmVCcmVha2luZ0JlaGF2aW9yOjpXcmFwVG9OZXh0TGluZTsKKyAgICAgICAg
Ly8gQnJlYWsgZmlyc3QgcnVuIG9uIGxpbmUuCisgICAgICAgIGlmIChsaW5lSXNFbXB0eSAmJiBz
dHlsZS5icmVha1dvcmRzKCkgJiYgc3R5bGUucHJlc2VydmVOZXdsaW5lKCkpCisgICAgICAgICAg
ICByZXR1cm4gQnJlYWtpbmdCZWhhdmlvcjo6QnJlYWs7CiAgICAgfQogCi0gICAgQVNTRVJUKGlu
bGluZVJ1bi5pc0JveCgpIHx8IGlubGluZVJ1bi5pc0Zsb2F0KCkpOwotICAgIC8vIE5vbi10ZXh0
IGlubGluZSBydW5zLgotICAgIHJldHVybiBMaW5lQnJlYWtpbmdCZWhhdmlvcjo6V3JhcFRvTmV4
dExpbmU7CisgICAgLy8gTm9uLWJyZWFrYWJsZSBub24td2hpdGVzcGFjZSBydW4uCisgICAgcmV0
dXJuIGxpbmVJc0VtcHR5ID8gQnJlYWtpbmdCZWhhdmlvcjo6S2VlcCA6IEJyZWFraW5nQmVoYXZp
b3I6OldyYXA7CiB9CiAKLUxheW91dFVuaXQgSW5saW5lTGluZUJyZWFrZXI6OnJ1bldpZHRoKGNv
bnN0IElubGluZVJ1blByb3ZpZGVyOjpSdW4mIGlubGluZVJ1biwgTGF5b3V0VW5pdCBjb250ZW50
TG9naWNhbExlZnQpIGNvbnN0CitMYXlvdXRVbml0IExpbmVCcmVha2VyOjpydW5XaWR0aChjb25z
dCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtLCBMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsTGVmdCkg
Y29uc3QKIHsKLSAgICBBU1NFUlQoIWlubGluZVJ1bi5pc0xpbmVCcmVhaygpKTsKKyAgICBpZiAo
aXM8SW5saW5lVGV4dEl0ZW0+KGlubGluZUl0ZW0pKQorICAgICAgICByZXR1cm4gdGV4dFdpZHRo
KGRvd25jYXN0PElubGluZVRleHRJdGVtPihpbmxpbmVJdGVtKSwgY29udGVudExvZ2ljYWxMZWZ0
KTsKIAotICAgIGlmIChpbmxpbmVSdW4uaXNUZXh0KCkpCi0gICAgICAgIHJldHVybiB0ZXh0V2lk
dGgoaW5saW5lUnVuLCBjb250ZW50TG9naWNhbExlZnQpOwotCi0gICAgQVNTRVJUKGlubGluZVJ1
bi5pc0JveCgpIHx8IGlubGluZVJ1bi5pc0Zsb2F0KCkpOwotICAgIGF1dG8mIGlubGluZUl0ZW0g
PSBpbmxpbmVSdW4uaW5saW5lSXRlbSgpOwogICAgIGF1dG8mIGxheW91dEJveCA9IGlubGluZUl0
ZW0ubGF5b3V0Qm94KCk7CiAgICAgQVNTRVJUKG1fbGF5b3V0U3RhdGUuaGFzRGlzcGxheUJveChs
YXlvdXRCb3gpKTsKICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gbV9sYXlvdXRTdGF0ZS5kaXNwbGF5
Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7Ci0gICAgcmV0dXJuIGlubGluZUl0ZW0ubm9uQnJl
YWthYmxlU3RhcnQoKSArIGRpc3BsYXlCb3gud2lkdGgoKSArIGlubGluZUl0ZW0ubm9uQnJlYWth
YmxlRW5kKCk7Ci19CiAKLUxheW91dFVuaXQgSW5saW5lTGluZUJyZWFrZXI6OnRleHRXaWR0aChj
b25zdCBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuJiBpbmxpbmVSdW4sIExheW91dFVuaXQgY29udGVu
dExvZ2ljYWxMZWZ0KSBjb25zdAotewotICAgIC8vIEZJWE1FOiBGaW5kIGEgd2F5IHRvIG1lcmdl
IHRoaXMgYW5kIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6cnVuV2lkdGguCi0g
ICAgYXV0byYgaW5saW5lSXRlbSA9IGlubGluZVJ1bi5pbmxpbmVJdGVtKCk7Ci0gICAgYXV0byB0
ZXh0Q29udGV4dCA9IGlubGluZVJ1bi50ZXh0Q29udGV4dCgpOwotICAgIGF1dG8gc3RhcnRQb3Np
dGlvbiA9IHRleHRDb250ZXh0LT5zdGFydCgpOwotICAgIGF1dG8gbGVuZ3RoID0gdGV4dENvbnRl
eHQtPmlzQ29sbGFwc2VkKCkgPyAxIDogdGV4dENvbnRleHQtPmxlbmd0aCgpOwotCi0gICAgLy8g
RklYTUU6IEl0IGRvZXMgbm90IGRvIHByb3BlciBrZXJuaW5nL2xpZ2F0dXJlIGhhbmRsaW5nLgot
ICAgIExheW91dFVuaXQgd2lkdGg7Ci0gICAgYXV0byBpdGVyYXRvciA9IG1faW5saW5lQ29udGVu
dC5maW5kKGNvbnN0X2Nhc3Q8SW5saW5lSXRlbSo+KCZpbmxpbmVJdGVtKSk7Ci0jaWYgIUFTU0VS
VF9ESVNBQkxFRAotICAgIGF1dG8gaW5saW5lSXRlbUVuZCA9IG1faW5saW5lQ29udGVudC5lbmQo
KTsKLSNlbmRpZgotICAgIHdoaWxlIChsZW5ndGgpIHsKLSAgICAgICAgQVNTRVJUKGl0ZXJhdG9y
ICE9IGlubGluZUl0ZW1FbmQpOwotICAgICAgICBhdXRvJiBjdXJyZW50SW5saW5lSXRlbSA9ICoq
aXRlcmF0b3I7Ci0gICAgICAgIGF1dG8gaW5saW5lSXRlbUxlbmd0aCA9IGN1cnJlbnRJbmxpbmVJ
dGVtLnRleHRDb250ZW50KCkubGVuZ3RoKCk7Ci0gICAgICAgIGF1dG8gZW5kUG9zaXRpb24gPSBz
dGQ6Om1pbjxJdGVtUG9zaXRpb24+KHN0YXJ0UG9zaXRpb24gKyBsZW5ndGgsIGlubGluZUl0ZW1M
ZW5ndGgpOwotICAgICAgICBhdXRvIHRleHRXaWR0aCA9IFRleHRVdGlsOjp3aWR0aChjdXJyZW50
SW5saW5lSXRlbSwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24sIGNvbnRlbnRMb2dpY2FsTGVm
dCk7Ci0KLSAgICAgICAgYXV0byBub25CcmVha2FibGVTdGFydCA9ICFzdGFydFBvc2l0aW9uID8g
Y3VycmVudElubGluZUl0ZW0ubm9uQnJlYWthYmxlU3RhcnQoKSA6IDBfbHU7Ci0gICAgICAgIGF1
dG8gbm9uQnJlYWthYmxlRW5kID0gIGVuZFBvc2l0aW9uID09IGlubGluZUl0ZW1MZW5ndGggPyBj
dXJyZW50SW5saW5lSXRlbS5ub25CcmVha2FibGVFbmQoKSA6IDBfbHU7Ci0gICAgICAgIGF1dG8g
Y29udGVudFdpZHRoID0gbm9uQnJlYWthYmxlU3RhcnQgKyB0ZXh0V2lkdGggKyBub25CcmVha2Fi
bGVFbmQ7Ci0gICAgICAgIGNvbnRlbnRMb2dpY2FsTGVmdCArPSBjb250ZW50V2lkdGg7Ci0gICAg
ICAgIHdpZHRoICs9IGNvbnRlbnRXaWR0aDsKLSAgICAgICAgbGVuZ3RoIC09IChlbmRQb3NpdGlv
biAtIHN0YXJ0UG9zaXRpb24pOwotCi0gICAgICAgIHN0YXJ0UG9zaXRpb24gPSAwOwotICAgICAg
ICArK2l0ZXJhdG9yOwotICAgIH0KLSAgICByZXR1cm4gd2lkdGg7Ci19CisgICAgaWYgKGlubGlu
ZUl0ZW0uaXNDb250YWluZXJTdGFydCgpKQorICAgICAgICByZXR1cm4gZGlzcGxheUJveC5tYXJn
aW5TdGFydCgpICsgZGlzcGxheUJveC5ib3JkZXJMZWZ0KCkgKyBkaXNwbGF5Qm94LnBhZGRpbmdM
ZWZ0KCkudmFsdWVPcigwKTsKIAotSW5saW5lTGluZUJyZWFrZXI6OlJ1biBJbmxpbmVMaW5lQnJl
YWtlcjo6c3BsaXRSdW4oY29uc3QgSW5saW5lUnVuUHJvdmlkZXI6OlJ1biYgaW5saW5lUnVuLCBM
YXlvdXRVbml0LCBMYXlvdXRVbml0LCBib29sKQotewotICAgIHJldHVybiB7IFJ1bjo6UG9zaXRp
b246OlVuZGV0ZXJtaW5lZCwgeyB9LCBpbmxpbmVSdW4gfTsKKyAgICBpZiAoaW5saW5lSXRlbS5p
c0NvbnRhaW5lckVuZCgpKQorICAgICAgICByZXR1cm4gZGlzcGxheUJveC5tYXJnaW5FbmQoKSAr
IGRpc3BsYXlCb3guYm9yZGVyUmlnaHQoKSArIGRpc3BsYXlCb3gucGFkZGluZ1JpZ2h0KCkudmFs
dWVPcigwKTsKKworICAgIGlmIChpbmxpbmVJdGVtLmlzTGluZUJyZWFrKCkpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgaWYgKGlubGluZUl0ZW0uaXNGbG9hdCgpKQorICAgICAgICByZXR1cm4g
ZGlzcGxheUJveC5tYXJnaW5Cb3goKS53aWR0aCgpOworCisgICAgcmV0dXJuIGRpc3BsYXlCb3gu
d2lkdGgoKTsKIH0KIAotT3B0aW9uYWw8SXRlbVBvc2l0aW9uPiBJbmxpbmVMaW5lQnJlYWtlcjo6
YWRqdXN0U3BsaXRQb3NpdGlvbldpdGhIeXBoZW5hdGlvbihjb25zdCBJbmxpbmVSdW5Qcm92aWRl
cjo6UnVuJiwgSXRlbVBvc2l0aW9uLCBMYXlvdXRVbml0LCBMYXlvdXRVbml0LCBib29sKSBjb25z
dAorTGF5b3V0VW5pdCBMaW5lQnJlYWtlcjo6dGV4dFdpZHRoKGNvbnN0IElubGluZVRleHRJdGVt
JiBpbmxpbmVUZXh0SXRlbSwgTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbExlZnQpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIHsgfTsKKyAgICBpZiAoaW5saW5lVGV4dEl0ZW0uaXNDb2xsYXBzZWQoKSkK
KyAgICAgICAgcmV0dXJuIFRleHRVdGlsOjp3aWR0aChkb3duY2FzdDxJbmxpbmVCb3g+KGlubGlu
ZVRleHRJdGVtLmxheW91dEJveCgpKSwgaW5saW5lVGV4dEl0ZW0uc3RhcnQoKSwgaW5saW5lVGV4
dEl0ZW0uc3RhcnQoKSArIDEsIGNvbnRlbnRMb2dpY2FsTGVmdCk7CisgICAgcmV0dXJuIFRleHRV
dGlsOjp3aWR0aChkb3duY2FzdDxJbmxpbmVCb3g+KGlubGluZVRleHRJdGVtLmxheW91dEJveCgp
KSwgaW5saW5lVGV4dEl0ZW0uc3RhcnQoKSwgaW5saW5lVGV4dEl0ZW0uZW5kKCksIGNvbnRlbnRM
b2dpY2FsTGVmdCk7CiB9Ci0KIH0KIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJyZWFrZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCcmVha2VyLmgKaW5kZXgg
Mzg3YjBmY2YzNWY2NTY4MTUwYWY1YjAzNmNhMGFlYzhiYzFiNzk4OS4uYTc5NGUyZGUxZTQzNGRm
ODc5OTU3ZjdlMTZlOWE3ZmI1M2Q2OWU2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJyZWFrZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnJlYWtlci5oCkBAIC0yNyw0
MSArMjcsMzYgQEAKIAogI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQogCi0j
aW5jbHVkZSAiSW5saW5lUnVuUHJvdmlkZXIuaCIKLSNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+
Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBMYXlvdXQgewogCi1jbGFzcyBJbmxp
bmVMaW5lQnJlYWtlciB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChJbmxpbmVMaW5lQnJl
YWtlcik7CitjbGFzcyBJbmxpbmVUZXh0SXRlbTsKKworY2xhc3MgTGluZUJyZWFrZXIgewogcHVi
bGljOgotICAgIElubGluZUxpbmVCcmVha2VyKGNvbnN0IExheW91dFN0YXRlJiwgY29uc3QgSW5s
aW5lQ29udGVudCYsIGNvbnN0IFZlY3RvcjxJbmxpbmVSdW5Qcm92aWRlcjo6UnVuPiYpOworICAg
IExpbmVCcmVha2VyKGNvbnN0IExheW91dFN0YXRlJik7CiAKLSAgICBzdHJ1Y3QgUnVuIHsKLSAg
ICAgICAgZW51bSBjbGFzcyBQb3NpdGlvbiB7IFVuZGV0ZXJtaW5lZCwgTGluZUJlZ2luLCBMaW5l
RW5kIH07Ci0gICAgICAgIFBvc2l0aW9uIHBvc2l0aW9uOwotICAgICAgICBMYXlvdXRVbml0IHdp
ZHRoOwotICAgICAgICBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuIGNvbnRlbnQ7CisgICAgZW51bSBj
bGFzcyBCcmVha2luZ0JlaGF2aW9yIHsgS2VlcCwgQnJlYWssIFdyYXAgfTsKKyAgICBzdHJ1Y3Qg
QnJlYWtpbmdDb250ZXh0IHsKKyAgICAgICAgQnJlYWtpbmdCZWhhdmlvciBicmVha2luZ0JlaGF2
aW9yOworICAgICAgICBib29sIGlzQXRCcmVha2luZ09wcG9ydHVuaXR5IHsgZmFsc2UgfTsKKyAg
ICB9OworICAgIHN0cnVjdCBMaW5lQ29udGV4dCB7CisgICAgICAgIExheW91dFVuaXQgYXZhaWxh
YmxlV2lkdGg7CisgICAgICAgIExheW91dFVuaXQgbG9naWNhbExlZnQ7CisgICAgICAgIExheW91
dFVuaXQgdHJpbW1hYmxlV2lkdGg7CisgICAgICAgIGJvb2wgaXNFbXB0eSB7IGZhbHNlIH07CiAg
ICAgfTsKLSAgICBPcHRpb25hbDxSdW4+IG5leHRSdW4oTGF5b3V0VW5pdCBjb250ZW50TG9naWNh
bExlZnQsIExheW91dFVuaXQgYXZhaWxhYmxlV2lkdGgsIGJvb2wgbGluZUlzRW1wdHkpOworICAg
IEJyZWFraW5nQ29udGV4dCBicmVha2luZ0NvbnRleHQoSW5saW5lSXRlbSYsIGNvbnN0IExpbmVD
b250ZXh0KTsKIAogcHJpdmF0ZToKLSAgICBlbnVtIGNsYXNzIExpbmVCcmVha2luZ0JlaGF2aW9y
IHsgS2VlcCwgQnJlYWssIFdyYXBUb05leHRMaW5lIH07Ci0gICAgTGluZUJyZWFraW5nQmVoYXZp
b3IgbGluZUJyZWFraW5nQmVoYXZpb3IoY29uc3QgSW5saW5lUnVuUHJvdmlkZXI6OlJ1biYsIGJv
b2wgbGluZUlzRW1wdHkpOwotICAgIGJvb2wgaXNBdENvbnRlbnRFbmQoKSBjb25zdDsKLSAgICBS
dW4gc3BsaXRSdW4oY29uc3QgSW5saW5lUnVuUHJvdmlkZXI6OlJ1biYsIExheW91dFVuaXQgY29u
dGVudExvZ2ljYWxMZWZ0LCBMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoLCBib29sIGxpbmVJc0Vt
cHR5KTsKLSAgICBMYXlvdXRVbml0IHJ1bldpZHRoKGNvbnN0IElubGluZVJ1blByb3ZpZGVyOjpS
dW4mLCBMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsTGVmdCkgY29uc3Q7Ci0gICAgTGF5b3V0VW5p
dCB0ZXh0V2lkdGgoY29uc3QgSW5saW5lUnVuUHJvdmlkZXI6OlJ1biYsIExheW91dFVuaXQgY29u
dGVudExvZ2ljYWxMZWZ0KSBjb25zdDsKLSAgICBPcHRpb25hbDxJdGVtUG9zaXRpb24+IGFkanVz
dFNwbGl0UG9zaXRpb25XaXRoSHlwaGVuYXRpb24oY29uc3QgSW5saW5lUnVuUHJvdmlkZXI6OlJ1
biYsIEl0ZW1Qb3NpdGlvbiBzcGxpdFBvc2l0aW9uLCBMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2Fs
TGVmdCwgTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCwgYm9vbCBpc0xpbmVFbXB0eSkgY29uc3Q7
CiAKLSAgICBjb25zdCBMYXlvdXRTdGF0ZSYgbV9sYXlvdXRTdGF0ZTsKLSAgICBjb25zdCBJbmxp
bmVDb250ZW50JiBtX2lubGluZUNvbnRlbnQ7Ci0gICAgY29uc3QgVmVjdG9yPElubGluZVJ1blBy
b3ZpZGVyOjpSdW4+JiBtX2lubGluZVJ1bnM7CisgICAgQnJlYWtpbmdCZWhhdmlvciB3b3JkQnJl
YWtpbmdCZWhhdmlvcihjb25zdCBJbmxpbmVUZXh0SXRlbSYsIGJvb2wgbGluZUlzRW1wdHkpIGNv
bnN0OworICAgIExheW91dFVuaXQgcnVuV2lkdGgoY29uc3QgSW5saW5lSXRlbSYsIExheW91dFVu
aXQgY29udGVudExvZ2ljYWxMZWZ0KSBjb25zdDsKKyAgICBMYXlvdXRVbml0IHRleHRXaWR0aChj
b25zdCBJbmxpbmVUZXh0SXRlbSYsIExheW91dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0KSBjb25z
dDsKIAotICAgIHVuc2lnbmVkIG1fY3VycmVudFJ1bkluZGV4IHsgMCB9OwotICAgIE9wdGlvbmFs
PEl0ZW1Qb3NpdGlvbj4gbV9zcGxpdFBvc2l0aW9uOwotICAgIGJvb2wgbV9oeXBoZW5hdGlvbklz
RGlzYWJsZWQgeyBmYWxzZSB9OworICAgIGNvbnN0IExheW91dFN0YXRlJiBtX2xheW91dFN0YXRl
OworICAgIGJvb2wgbV9oeXBoZW5hdGlvbklzRGlzYWJsZWQgeyB0cnVlIH07CiB9OwogCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVS
dW4uaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZVJ1bi5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjU1NDQxNmFhNTExNTAyOWY1ZDUzZjZh
MDQ3MWJlZGQxZWUxMTVlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZVJ1bi5o
CisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9u
Y2UKLQotI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQotCi0jaW5jbHVkZSAi
SW5saW5lUnVuUHJvdmlkZXIuaCIKLSNpbmNsdWRlICJMYXlvdXRVbml0LmgiCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLW5hbWVzcGFjZSBMYXlvdXQgewotCi1zdHJ1Y3QgSW5saW5lUnVuIHsKLSAg
ICBJbmxpbmVSdW4oRGlzcGxheTo6Qm94OjpSZWN0IGxvZ2ljYWxSZWN0LCBjb25zdCBJbmxpbmVJ
dGVtJik7Ci0KLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0KCkgY29uc3QgeyByZXR1cm4gbV9s
b2dpY2FsUmVjdC5sZWZ0KCk7IH0KLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodCgpIGNvbnN0
IHsgcmV0dXJuIG1fbG9naWNhbFJlY3QucmlnaHQoKTsgfQotICAgIExheW91dFVuaXQgbG9naWNh
bFRvcCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFJlY3QudG9wKCk7IH0KLSAgICBMYXlvdXRV
bml0IGxvZ2ljYWxCb3R0b20oKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxSZWN0LmJvdHRvbSgp
OyB9Ci0KLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9n
aWNhbFJlY3Qud2lkdGgoKTsgfQotICAgIExheW91dFVuaXQgbG9naWNhbEhlaWdodCgpIGNvbnN0
IHsgcmV0dXJuIG1fbG9naWNhbFJlY3QuaGVpZ2h0KCk7IH0KLSAgICBib29sIG92ZXJsYXBzTXVs
dGlwbGVJbmxpbmVJdGVtcygpIGNvbnN0OwotCi0gICAgdm9pZCBzZXRMb2dpY2FsV2lkdGgoTGF5
b3V0VW5pdCB3aWR0aCkgeyBtX2xvZ2ljYWxSZWN0LnNldFdpZHRoKHdpZHRoKTsgfQotICAgIHZv
aWQgc2V0TG9naWNhbExlZnQoTGF5b3V0VW5pdCBsb2dpY2FsTGVmdCkgeyBtX2xvZ2ljYWxSZWN0
LnNldExlZnQobG9naWNhbExlZnQpOyB9Ci0gICAgdm9pZCBzZXRMb2dpY2FsUmlnaHQoTGF5b3V0
VW5pdCBsb2dpY2FsUmlnaHQpIHsgbV9sb2dpY2FsUmVjdC5zaGlmdFJpZ2h0VG8obG9naWNhbFJp
Z2h0KTsgfQotICAgIHZvaWQgbW92ZVZlcnRpY2FsbHkoTGF5b3V0VW5pdCBkZWx0YSkgeyBtX2xv
Z2ljYWxSZWN0Lm1vdmVWZXJ0aWNhbGx5KGRlbHRhKTsgfQotICAgIHZvaWQgbW92ZUhvcml6b250
YWxseShMYXlvdXRVbml0IGRlbHRhKSB7IG1fbG9naWNhbFJlY3QubW92ZUhvcml6b250YWxseShk
ZWx0YSk7IH0KLQotICAgIHN0cnVjdCBFeHBhbnNpb25PcHBvcnR1bml0eSB7Ci0gICAgICAgIHVu
c2lnbmVkIGNvdW50IHsgMCB9OwotICAgICAgICBFeHBhbnNpb25CZWhhdmlvciBiZWhhdmlvciB7
IEZvcmJpZExlYWRpbmdFeHBhbnNpb24gfCBGb3JiaWRUcmFpbGluZ0V4cGFuc2lvbiB9OwotICAg
ICAgICBMYXlvdXRVbml0IGV4cGFuc2lvbjsKLSAgICB9OwotICAgIEV4cGFuc2lvbk9wcG9ydHVu
aXR5JiBleHBhbnNpb25PcHBvcnR1bml0eSgpIHsgcmV0dXJuIG1fZXhwYW5zaW9uT3Bwb3J0dW5p
dHk7IH0KLQotICAgIHN0cnVjdCBUZXh0Q29udGV4dCB7Ci0gICAgcHVibGljOgotICAgICAgICBU
ZXh0Q29udGV4dChJdGVtUG9zaXRpb24sIHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICAgICAgdm9p
ZCBzZXRTdGFydChJdGVtUG9zaXRpb24gc3RhcnQpIHsgbV9zdGFydCA9IHN0YXJ0OyB9Ci0gICAg
ICAgIHZvaWQgc2V0TGVuZ3RoKHVuc2lnbmVkIGxlbmd0aCkgeyBtX2xlbmd0aCA9IGxlbmd0aDsg
fQotCi0gICAgICAgIEl0ZW1Qb3NpdGlvbiBzdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnQ7
IH0KLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0K
LQotICAgIHByaXZhdGU6Ci0gICAgICAgIEl0ZW1Qb3NpdGlvbiBtX3N0YXJ0OwotICAgICAgICB1
bnNpZ25lZCBtX2xlbmd0aDsKLSAgICB9OwotICAgIHZvaWQgc2V0VGV4dENvbnRleHQoVGV4dENv
bnRleHQgdGV4dENvbnRleHQpIHsgbV90ZXh0Q29udGV4dC5lbXBsYWNlKHRleHRDb250ZXh0KTsg
fQotICAgIE9wdGlvbmFsPFRleHRDb250ZXh0PiYgdGV4dENvbnRleHQoKSB7IHJldHVybiBtX3Rl
eHRDb250ZXh0OyB9Ci0gICAgT3B0aW9uYWw8VGV4dENvbnRleHQ+IHRleHRDb250ZXh0KCkgY29u
c3QgeyByZXR1cm4gbV90ZXh0Q29udGV4dDsgfQotCi0gICAgY29uc3QgSW5saW5lSXRlbSYgaW5s
aW5lSXRlbSgpIGNvbnN0IHsgcmV0dXJuIG1faW5saW5lSXRlbTsgfQotCi1wcml2YXRlOgotICAg
IERpc3BsYXk6OkJveDo6UmVjdCBtX2xvZ2ljYWxSZWN0OwotICAgIEV4cGFuc2lvbk9wcG9ydHVu
aXR5IG1fZXhwYW5zaW9uT3Bwb3J0dW5pdHk7Ci0KLSAgICBjb25zdCBJbmxpbmVJdGVtJiBtX2lu
bGluZUl0ZW07Ci0gICAgT3B0aW9uYWw8VGV4dENvbnRleHQ+IG1fdGV4dENvbnRleHQ7Ci19Owot
Ci11c2luZyBJbmxpbmVSdW5zID0gVmVjdG9yPElubGluZVJ1bj47Ci0KLWlubGluZSBJbmxpbmVS
dW46OklubGluZVJ1bihEaXNwbGF5OjpCb3g6OlJlY3QgbG9naWNhbFJlY3QsIGNvbnN0IElubGlu
ZUl0ZW0mIGlubGluZUl0ZW0pCi0gICAgOiBtX2xvZ2ljYWxSZWN0KGxvZ2ljYWxSZWN0KQotICAg
ICwgbV9pbmxpbmVJdGVtKGlubGluZUl0ZW0pCi17Ci19Ci0KLWlubGluZSBJbmxpbmVSdW46OlRl
eHRDb250ZXh0OjpUZXh0Q29udGV4dChJdGVtUG9zaXRpb24gc3RhcnQsIHVuc2lnbmVkIGxlbmd0
aCkKLSAgICA6IG1fc3RhcnQoc3RhcnQpCi0gICAgLCBtX2xlbmd0aChsZW5ndGgpCi17Ci19Ci0K
LWlubGluZSBib29sIElubGluZVJ1bjo6b3ZlcmxhcHNNdWx0aXBsZUlubGluZUl0ZW1zKCkgY29u
c3QKLXsKLSAgICAvLyBPbmx5IHRleHQgY29udGVudCBjYW4gb3ZlcmxhcCBtdWx0aXBsZSBpbmxp
bmUgZWxlbWVudHMuCi0gICAgaWYgKCFtX3RleHRDb250ZXh0KQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBhdXRvIGVuZFBvc2l0aW9uID0gbV90ZXh0Q29udGV4dC0+c3RhcnQoKSArIG1f
dGV4dENvbnRleHQtPmxlbmd0aCgpOwotICAgIHJldHVybiBlbmRQb3NpdGlvbiA+IG1faW5saW5l
SXRlbS50ZXh0Q29udGVudCgpLmxlbmd0aCgpOwotfQotCi19Ci19Ci0jZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZVJ1blByb3Zp
ZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZVJ1
blByb3ZpZGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWViMjBmMGFmZDcx
MmI1MzYyMDFkMDZmN2NiNDM3NWU4YjFlNGNkOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGlu
Zy9JbmxpbmVSdW5Qcm92aWRlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxOTggKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbmxpbmVSdW5Qcm92
aWRlci5oIgotCi0jaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCi0KLSNpbmNs
dWRlICJCcmVha0xpbmVzLmgiCi0jaW5jbHVkZSAiTGF5b3V0SW5saW5lQm94LmgiCi0jaW5jbHVk
ZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotbmFtZXNw
YWNlIExheW91dCB7Ci0KLVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChJbmxpbmVSdW5Qcm92
aWRlcik7Ci0KLUlubGluZVJ1blByb3ZpZGVyOjpJbmxpbmVSdW5Qcm92aWRlcigpCi17Ci19Ci0K
LXZvaWQgSW5saW5lUnVuUHJvdmlkZXI6OmFwcGVuZChjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJ
dGVtKQotewotICAgIHN3aXRjaCAoaW5saW5lSXRlbS50eXBlKCkpIHsKLSAgICBjYXNlIElubGlu
ZUl0ZW06OlR5cGU6OlRleHQ6Ci0gICAgICAgIC8vIFNwZWNpYWwgY2FzZSB0ZXh0IGNvbnRlbnQu
IFRoZXkgY2FuIG92ZXJsYXAgbXVsdGlwbGUgaXRlbXMuIDxzcGFuPmZvbzwvc3Bhbj48c3Bhbj5i
YXI8L3NwYW4+Ci0gICAgICAgIHByb2Nlc3NJbmxpbmVUZXh0SXRlbShpbmxpbmVJdGVtKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbmxpbmVJdGVtOjpUeXBlOjpIYXJkTGluZUJyZWFrOgot
ICAgICAgICBtX2lubGluZVJ1bnMuYXBwZW5kKElubGluZVJ1blByb3ZpZGVyOjpSdW46OmNyZWF0
ZUhhcmRMaW5lQnJlYWtSdW4oaW5saW5lSXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IElubGluZUl0ZW06OlR5cGU6OklubGluZUJveDoKLSAgICAgICAgbV9pbmxpbmVSdW5zLmFwcGVu
ZChJbmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpjcmVhdGVCb3hSdW4oaW5saW5lSXRlbSkpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIElubGluZUl0ZW06OlR5cGU6OkZsb2F0OgotICAgICAgICBt
X2lubGluZVJ1bnMuYXBwZW5kKElubGluZVJ1blByb3ZpZGVyOjpSdW46OmNyZWF0ZUZsb2F0UnVu
KGlubGluZUl0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNT
RVJUX05PVF9JTVBMRU1FTlRFRF9ZRVQoKTsKLSAgICB9Ci19Ci0KLXZvaWQgSW5saW5lUnVuUHJv
dmlkZXI6Omluc2VydEJlZm9yZShjb25zdCBCb3gmLCBjb25zdCBCb3gmKQotewotfQotCi12b2lk
IElubGluZVJ1blByb3ZpZGVyOjpyZW1vdmUoY29uc3QgQm94JikKLXsKLX0KLQotc3RhdGljIGlu
bGluZSBib29sIGlzV2hpdGVzcGFjZShjaGFyIGNoYXJhY3RlciwgYm9vbCBwcmVzZXJ2ZU5ld2xp
bmUpCi17Ci0gICAgcmV0dXJuIGNoYXJhY3RlciA9PSAnICcgfHwgY2hhcmFjdGVyID09ICdcdCcg
fHwgKGNoYXJhY3RlciA9PSAnXG4nICYmICFwcmVzZXJ2ZU5ld2xpbmUpOwotfQotCi1zdGF0aWMg
aW5saW5lIGJvb2wgaXNTb2Z0TGluZUJyZWFrKGNoYXIgY2hhcmFjdGVyLCBib29sIHByZXNlcnZl
TmV3bGluZSkKLXsKLSAgICByZXR1cm4gcHJlc2VydmVOZXdsaW5lICYmIGNoYXJhY3RlciA9PSAn
XG4nOwotfQotCi1ib29sIElubGluZVJ1blByb3ZpZGVyOjppc0NvbnRpbm91c0NvbnRlbnQoSW5s
aW5lUnVuUHJvdmlkZXI6OlJ1bjo6VHlwZSBuZXdSdW5UeXBlLCBjb25zdCBJbmxpbmVJdGVtJiBu
ZXdJbmxpbmVJdGVtKQotewotICAgIGlmIChtX2lubGluZVJ1bnMuaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvJiBsYXN0UnVuID0gbV9pbmxpbmVSdW5zLmxhc3Qo
KTsKLSAgICAvLyBTYW1lIGVsZW1lbnQsIGNoZWNrIHR5cGUgb25seS4KLSAgICBpZiAoJm5ld0lu
bGluZUl0ZW0gPT0gJmxhc3RSdW4uaW5saW5lSXRlbSgpKQotICAgICAgICByZXR1cm4gbmV3UnVu
VHlwZSA9PSBsYXN0UnVuLnR5cGUoKTsKLQotICAgIC8vIFRoaXMgbmV3IHJ1biBpcyBmcm9tIGEg
ZGlmZmVyZW50IGlubGluZSBib3guCi0gICAgLy8gRklYTUU6IGNoZWNrIHN0eWxlLgotICAgIGlm
IChuZXdSdW5UeXBlID09IElubGluZVJ1blByb3ZpZGVyOjpSdW46OlR5cGU6Ok5vbldoaXRlc3Bh
Y2UgJiYgbGFzdFJ1bi5pc05vbldoaXRlc3BhY2UoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0K
LSAgICBpZiAobmV3UnVuVHlwZSA9PSBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpUeXBlOjpXaGl0
ZXNwYWNlICYmIGxhc3RSdW4uaXNXaGl0ZXNwYWNlKCkpCi0gICAgICAgIHJldHVybiBuZXdJbmxp
bmVJdGVtLnN0eWxlKCkuY29sbGFwc2VXaGl0ZVNwYWNlKCkgPT0gbGFzdFJ1bi5zdHlsZSgpLmNv
bGxhcHNlV2hpdGVTcGFjZSgpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIElubGlu
ZVJ1blByb3ZpZGVyOjpwcm9jZXNzSW5saW5lVGV4dEl0ZW0oY29uc3QgSW5saW5lSXRlbSYgaW5s
aW5lSXRlbSkKLXsKLSAgICAvLyBXZSBuZWVkIHRvIHJlc2V0IHRoZSBydW4gaXRlcmF0b3Igd2hl
biB0aGUgdGV4dCBjb250ZW50IGlzIG5vdCBjb250aW51b3VzLgotICAgIC8vIDxzcGFuPmZvbzwv
c3Bhbj48aW1nIHNyYz0iIj48c3Bhbj5iYXI8L3NwYW4+IChGSVhNRTogZmxvYXRzPykKLSAgICBp
ZiAoIW1faW5saW5lUnVucy5pc0VtcHR5KCkgJiYgIW1faW5saW5lUnVucy5sYXN0KCkuaXNUZXh0
KCkpIHsKLSAgICAgICAgbV9saW5lQnJlYWtJdGVyYXRvci5yZXNldFByaW9yQ29udGV4dCgpOwot
ICAgICAgICBtX2xpbmVCcmVha0l0ZXJhdG9yLnJlc2V0U3RyaW5nQW5kUmVsZWFzZUl0ZXJhdG9y
KCIiLCAiIiwgTGluZUJyZWFrSXRlcmF0b3JNb2RlOjpEZWZhdWx0KTsKLSAgICB9Ci0KLSAgICBh
dXRvJiBzdHlsZSA9IGlubGluZUl0ZW0uc3R5bGUoKTsKLSAgICBhdXRvIHRleHQgPSBpbmxpbmVJ
dGVtLnRleHRDb250ZW50KCk7Ci0gICAgSXRlbVBvc2l0aW9uIGN1cnJlbnRJdGVtUG9zaXRpb24g
PSAwOwotICAgIHdoaWxlIChjdXJyZW50SXRlbVBvc2l0aW9uIDwgdGV4dC5sZW5ndGgoKSkgewot
Ci0gICAgICAgIC8vIFNvZnQgbGluZWJyZWFrPwotICAgICAgICBpZiAoaXNTb2Z0TGluZUJyZWFr
KHRleHRbY3VycmVudEl0ZW1Qb3NpdGlvbl0sIHN0eWxlLnByZXNlcnZlTmV3bGluZSgpKSkgewot
ICAgICAgICAgICAgbV9pbmxpbmVSdW5zLmFwcGVuZChJbmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpj
cmVhdGVTb2Z0TGluZUJyZWFrUnVuKGlubGluZUl0ZW0pKTsKLSAgICAgICAgICAgICsrY3VycmVu
dEl0ZW1Qb3NpdGlvbjsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAg
ICAgYXV0byBpc1doaXRlc3BhY2VSdW4gPSBpc1doaXRlc3BhY2UodGV4dFtjdXJyZW50SXRlbVBv
c2l0aW9uXSwgc3R5bGUucHJlc2VydmVOZXdsaW5lKCkpOwotICAgICAgICBhdXRvIGxlbmd0aCA9
IGlzV2hpdGVzcGFjZVJ1biA/IG1vdmVUb05leHROb25XaGl0ZXNwYWNlUG9zaXRpb24oaW5saW5l
SXRlbSwgY3VycmVudEl0ZW1Qb3NpdGlvbikgOiBtb3ZlVG9OZXh0QnJlYWthYmxlUG9zaXRpb24o
aW5saW5lSXRlbSwgY3VycmVudEl0ZW1Qb3NpdGlvbik7Ci0KLSAgICAgICAgaWYgKGlzQ29udGlu
b3VzQ29udGVudChpc1doaXRlc3BhY2VSdW4gPyBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpUeXBl
OjpXaGl0ZXNwYWNlIDogSW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6VHlwZTo6Tm9uV2hpdGVzcGFj
ZSwgaW5saW5lSXRlbSkpCi0gICAgICAgICAgICBtX2lubGluZVJ1bnMubGFzdCgpLnRleHRDb250
ZXh0KCktPmV4cGFuZChsZW5ndGgpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIG1faW5s
aW5lUnVucy5hcHBlbmQoaXNXaGl0ZXNwYWNlUnVuID8gSW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6
Y3JlYXRlV2hpdGVzcGFjZVJ1bihpbmxpbmVJdGVtLCBjdXJyZW50SXRlbVBvc2l0aW9uLCBsZW5n
dGgsIHN0eWxlLmNvbGxhcHNlV2hpdGVTcGFjZSgpKQotICAgICAgICAgICAgICAgIDogSW5saW5l
UnVuUHJvdmlkZXI6OlJ1bjo6Y3JlYXRlTm9uV2hpdGVzcGFjZVJ1bihpbmxpbmVJdGVtLCBjdXJy
ZW50SXRlbVBvc2l0aW9uLCBsZW5ndGgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGN1cnJlbnRJ
dGVtUG9zaXRpb24gKz0gbGVuZ3RoOwotICAgIH0KLX0KLQotdW5zaWduZWQgSW5saW5lUnVuUHJv
dmlkZXI6Om1vdmVUb05leHROb25XaGl0ZXNwYWNlUG9zaXRpb24oY29uc3QgSW5saW5lSXRlbSYg
aW5saW5lSXRlbSwgSXRlbVBvc2l0aW9uIGN1cnJlbnRJdGVtUG9zaXRpb24pCi17Ci0gICAgYXV0
byB0ZXh0ID0gaW5saW5lSXRlbS50ZXh0Q29udGVudCgpOwotICAgIGF1dG8gcHJlc2VydmVOZXds
aW5lID0gaW5saW5lSXRlbS5zdHlsZSgpLnByZXNlcnZlTmV3bGluZSgpOwotICAgIGF1dG8gbmV4
dE5vbldoaXRlU3BhY2VQb3NpdGlvbiA9IGN1cnJlbnRJdGVtUG9zaXRpb247Ci0KLSAgICB3aGls
ZSAobmV4dE5vbldoaXRlU3BhY2VQb3NpdGlvbiA8IHRleHQubGVuZ3RoKCkgJiYgaXNXaGl0ZXNw
YWNlKHRleHRbbmV4dE5vbldoaXRlU3BhY2VQb3NpdGlvbl0sIHByZXNlcnZlTmV3bGluZSkpCi0g
ICAgICAgICsrbmV4dE5vbldoaXRlU3BhY2VQb3NpdGlvbjsKLSAgICByZXR1cm4gbmV4dE5vbldo
aXRlU3BhY2VQb3NpdGlvbiAtIGN1cnJlbnRJdGVtUG9zaXRpb247Ci19Ci0KLXVuc2lnbmVkIElu
bGluZVJ1blByb3ZpZGVyOjptb3ZlVG9OZXh0QnJlYWthYmxlUG9zaXRpb24oY29uc3QgSW5saW5l
SXRlbSYgaW5saW5lSXRlbSwgSXRlbVBvc2l0aW9uIGN1cnJlbnRJdGVtUG9zaXRpb24pCi17Ci0g
ICAgYXV0byBmaW5kTmV4dEJyZWFrYWJsZVBvc2l0aW9uID0gWyZdKGF1dG8gaW5saW5lVGV4dCwg
YXV0byYgc3R5bGUsIEl0ZW1Qb3NpdGlvbiBzdGFydFBvc2l0aW9uKSB7Ci0gICAgICAgIC8vIFN3
YXAgaXRlcmF0b3IncyBjb250ZW50IGlmIHdlIGFkdmFuY2VkIHRvIGEgbmV3IHN0cmluZy4KLSAg
ICAgICAgYXV0byBpdGVyYXRvclRleHQgPSBtX2xpbmVCcmVha0l0ZXJhdG9yLnN0cmluZ1ZpZXco
KTsKLQotICAgICAgICBpZiAoaXRlcmF0b3JUZXh0ICE9IGlubGluZVRleHQpIHsKLSAgICAgICAg
ICAgIGF1dG8gdGV4dExlbmd0aCA9IGl0ZXJhdG9yVGV4dC5sZW5ndGgoKTsKLSAgICAgICAgICAg
IGF1dG8gbGFzdENoYXJhY3RlciA9IHRleHRMZW5ndGggPiAwID8gaXRlcmF0b3JUZXh0W3RleHRM
ZW5ndGggLSAxXSA6IDA7Ci0gICAgICAgICAgICBhdXRvIHNlY29uZFRvTGFzdENoYXJhY3RlciA9
IHRleHRMZW5ndGggPiAxID8gaXRlcmF0b3JUZXh0W3RleHRMZW5ndGggLSAyXSA6IDA7Ci0gICAg
ICAgICAgICBtX2xpbmVCcmVha0l0ZXJhdG9yLnNldFByaW9yQ29udGV4dChsYXN0Q2hhcmFjdGVy
LCBzZWNvbmRUb0xhc3RDaGFyYWN0ZXIpOwotICAgICAgICAgICAgbV9saW5lQnJlYWtJdGVyYXRv
ci5yZXNldFN0cmluZ0FuZFJlbGVhc2VJdGVyYXRvcihpbmxpbmVUZXh0LCBzdHlsZS5sb2NhbGUo
KSwgTGluZUJyZWFrSXRlcmF0b3JNb2RlOjpEZWZhdWx0KTsKLSAgICAgICAgfQotCi0gICAgICAg
IGF1dG8ga2VlcEFsbFdvcmRzRm9yQ0pLID0gc3R5bGUud29yZEJyZWFrKCkgPT0gV29yZEJyZWFr
OjpLZWVwQWxsOwotICAgICAgICBhdXRvIGJyZWFrTkJTUCA9IHN0eWxlLmF1dG9XcmFwKCkgJiYg
c3R5bGUubmJzcE1vZGUoKSA9PSBOQlNQTW9kZTo6U3BhY2U7Ci0KLSAgICAgICAgaWYgKGtlZXBB
bGxXb3Jkc0ZvckNKSykgewotICAgICAgICAgICAgaWYgKGJyZWFrTkJTUCkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gbmV4dEJyZWFrYWJsZVBvc2l0aW9uS2VlcGluZ0FsbFdvcmRzKG1fbGluZUJy
ZWFrSXRlcmF0b3IsIHN0YXJ0UG9zaXRpb24pOwotICAgICAgICAgICAgcmV0dXJuIG5leHRCcmVh
a2FibGVQb3NpdGlvbktlZXBpbmdBbGxXb3Jkc0lnbm9yaW5nTkJTUChtX2xpbmVCcmVha0l0ZXJh
dG9yLCBzdGFydFBvc2l0aW9uKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtX2xpbmVCcmVh
a0l0ZXJhdG9yLm1vZGUoKSA9PSBMaW5lQnJlYWtJdGVyYXRvck1vZGU6OkRlZmF1bHQpIHsKLSAg
ICAgICAgICAgIGlmIChicmVha05CU1ApCi0gICAgICAgICAgICAgICAgcmV0dXJuIFdlYkNvcmU6
Om5leHRCcmVha2FibGVQb3NpdGlvbihtX2xpbmVCcmVha0l0ZXJhdG9yLCBzdGFydFBvc2l0aW9u
KTsKLSAgICAgICAgICAgIHJldHVybiBuZXh0QnJlYWthYmxlUG9zaXRpb25JZ25vcmluZ05CU1Ao
bV9saW5lQnJlYWtJdGVyYXRvciwgc3RhcnRQb3NpdGlvbik7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAoYnJlYWtOQlNQKQotICAgICAgICAgICAgcmV0dXJuIG5leHRCcmVha2FibGVQb3NpdGlv
bldpdGhvdXRTaG9ydGN1dChtX2xpbmVCcmVha0l0ZXJhdG9yLCBzdGFydFBvc2l0aW9uKTsKLSAg
ICAgICAgcmV0dXJuIG5leHRCcmVha2FibGVQb3NpdGlvbklnbm9yaW5nTkJTUFdpdGhvdXRTaG9y
dGN1dChtX2xpbmVCcmVha0l0ZXJhdG9yLCBzdGFydFBvc2l0aW9uKTsKLSAgICB9OwotCi0gICAg
YXV0byYgc3R5bGUgPSBpbmxpbmVJdGVtLnN0eWxlKCk7Ci0gICAgYXV0byB0ZXh0TGVuZ3RoID0g
aW5saW5lSXRlbS50ZXh0Q29udGVudCgpLmxlbmd0aCgpOwotICAgIEFTU0VSVCh0ZXh0TGVuZ3Ro
KTsKLSAgICB3aGlsZSAoY3VycmVudEl0ZW1Qb3NpdGlvbiA8IHRleHRMZW5ndGggLSAxKSB7Ci0g
ICAgICAgIGF1dG8gbmV4dEJyZWFrYWJsZVBvc2l0aW9uID0gZmluZE5leHRCcmVha2FibGVQb3Np
dGlvbihpbmxpbmVJdGVtLnRleHRDb250ZW50KCksIHN0eWxlLCBjdXJyZW50SXRlbVBvc2l0aW9u
KTsKLSAgICAgICAgaWYgKG5leHRCcmVha2FibGVQb3NpdGlvbiAhPSBjdXJyZW50SXRlbVBvc2l0
aW9uKQotICAgICAgICAgICAgcmV0dXJuIG5leHRCcmVha2FibGVQb3NpdGlvbiAtIGN1cnJlbnRJ
dGVtUG9zaXRpb247Ci0gICAgICAgICsrY3VycmVudEl0ZW1Qb3NpdGlvbjsKLSAgICB9Ci0gICAg
cmV0dXJuIHRleHRMZW5ndGg7Ci19Ci0KLX0KLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lUnVuUHJvdmlkZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZVJ1blByb3ZpZGVyLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3N2MxNDhlZWVlMGNhZGEyNDU2NjFlZmVi
OGZjNTY3ZGVlZDg2MDguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lUnVuUHJv
dmlkZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDE2OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3By
YWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKLQotI2lu
Y2x1ZGUgIklubGluZUl0ZW0uaCIKLSNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvVGV4dEJyZWFrSXRlcmF0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
bmFtZXNwYWNlIExheW91dCB7Ci0KLXVzaW5nIEl0ZW1Qb3NpdGlvbiA9IHVuc2lnbmVkOwotCi1j
bGFzcyBJbmxpbmVSdW5Qcm92aWRlciB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChJbmxp
bmVSdW5Qcm92aWRlcik7Ci1wdWJsaWM6Ci0gICAgSW5saW5lUnVuUHJvdmlkZXIoKTsKLQotICAg
IHZvaWQgYXBwZW5kKGNvbnN0IElubGluZUl0ZW0mKTsKLSAgICB2b2lkIGluc2VydEJlZm9yZShj
b25zdCBCb3gmLCBjb25zdCBCb3gmIGJlZm9yZSk7Ci0gICAgdm9pZCByZW1vdmUoY29uc3QgQm94
Jik7Ci0KLSAgICBzdHJ1Y3QgUnVuIHsKLQotICAgICAgICBzdGF0aWMgUnVuIGNyZWF0ZUJveFJ1
bihjb25zdCBJbmxpbmVJdGVtJik7Ci0gICAgICAgIHN0YXRpYyBSdW4gY3JlYXRlRmxvYXRSdW4o
Y29uc3QgSW5saW5lSXRlbSYpOwotICAgICAgICBzdGF0aWMgUnVuIGNyZWF0ZUhhcmRMaW5lQnJl
YWtSdW4oY29uc3QgSW5saW5lSXRlbSYpOwotICAgICAgICBzdGF0aWMgUnVuIGNyZWF0ZVNvZnRM
aW5lQnJlYWtSdW4oY29uc3QgSW5saW5lSXRlbSYpOwotICAgICAgICBzdGF0aWMgUnVuIGNyZWF0
ZVdoaXRlc3BhY2VSdW4oY29uc3QgSW5saW5lSXRlbSYsIEl0ZW1Qb3NpdGlvbiBzdGFydCwgdW5z
aWduZWQgbGVuZ3RoLCBib29sIGlzQ29sbGFwc2libGUpOwotICAgICAgICBzdGF0aWMgUnVuIGNy
ZWF0ZU5vbldoaXRlc3BhY2VSdW4oY29uc3QgSW5saW5lSXRlbSYsIEl0ZW1Qb3NpdGlvbiBzdGFy
dCwgdW5zaWduZWQgbGVuZ3RoKTsKLQotICAgICAgICBlbnVtIGNsYXNzIFR5cGUgewotICAgICAg
ICAgICAgQm94LAotICAgICAgICAgICAgRmxvYXQsCi0gICAgICAgICAgICBTb2Z0TGluZUJyZWFr
LAotICAgICAgICAgICAgSGFyZExpbmVCcmVhaywKLSAgICAgICAgICAgIFdoaXRlc3BhY2UsCi0g
ICAgICAgICAgICBOb25XaGl0ZXNwYWNlCi0gICAgICAgIH07Ci0gICAgICAgIFR5cGUgdHlwZSgp
IGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQotICAgICAgICBib29sIGlzVGV4dCgpIGNvbnN0IHsg
cmV0dXJuIG1fdHlwZSA9PSBSdW46OlR5cGU6OldoaXRlc3BhY2UgfHwgbV90eXBlID09IFJ1bjo6
VHlwZTo6Tm9uV2hpdGVzcGFjZSB8fCBtX3R5cGUgPT0gUnVuOjpUeXBlOjpTb2Z0TGluZUJyZWFr
IHx8IG1fdHlwZSA9PSBSdW46OlR5cGU6OkhhcmRMaW5lQnJlYWs7IH0KLSAgICAgICAgYm9vbCBp
c1doaXRlc3BhY2UoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gVHlwZTo6V2hpdGVzcGFjZTsg
fQotICAgICAgICBib29sIGlzTm9uV2hpdGVzcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9
PSBUeXBlOjpOb25XaGl0ZXNwYWNlOyB9Ci0gICAgICAgIGJvb2wgaXNMaW5lQnJlYWsoKSBjb25z
dCB7IHJldHVybiBtX3R5cGUgPT0gUnVuOjpUeXBlOjpTb2Z0TGluZUJyZWFrIHx8IG1fdHlwZSA9
PSBSdW46OlR5cGU6OkhhcmRMaW5lQnJlYWs7IH0KLSAgICAgICAgYm9vbCBpc0JveCgpIGNvbnN0
IHsgcmV0dXJuIG1fdHlwZSA9PSBUeXBlOjpCb3g7IH0KLSAgICAgICAgYm9vbCBpc0Zsb2F0KCkg
Y29uc3QgeyByZXR1cm4gbV90eXBlID09IFR5cGU6OkZsb2F0OyB9Ci0KLSAgICAgICAgc3RydWN0
IFRleHRDb250ZXh0IHsKLQotICAgICAgICAgICAgZW51bSBjbGFzcyBJc0NvbGxhcHNlZCB7IE5v
LCBZZXMgfTsKLSAgICAgICAgICAgIFRleHRDb250ZXh0KEl0ZW1Qb3NpdGlvbiwgdW5zaWduZWQg
bGVuZ3RoLCBJc0NvbGxhcHNlZCk7Ci0KLSAgICAgICAgICAgIEl0ZW1Qb3NpdGlvbiBzdGFydCgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhcnQ7IH0KLSAgICAgICAgICAgIC8vIE5vdGUgdGhhdCAnZW5k
JyBwb3NpdGlvbiBkb2VzIG5vdCBlcXVhbCB0byBzdGFydCArIGxlbmd0aCB3aGVuIHJ1biBvdmVy
bGFwcyBtdWx0aXBsZSBJbmxpbmVJdGVtcy4KLSAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCgp
IGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9Ci0gICAgICAgICAgICBib29sIGlzQ29sbGFwc2Vk
KCkgY29uc3QgeyByZXR1cm4gbV9pc0NvbGxhcHNlZCA9PSBJc0NvbGxhcHNlZDo6WWVzOyB9Ci0K
LSAgICAgICAgcHJpdmF0ZToKLSAgICAgICAgICAgIGZyaWVuZCBjbGFzcyBJbmxpbmVSdW5Qcm92
aWRlcjsKLQotICAgICAgICAgICAgdm9pZCBleHBhbmQodW5zaWduZWQgbGVuZ3RoKSB7IG1fbGVu
Z3RoICs9IGxlbmd0aDsgfQotCi0gICAgICAgICAgICBJdGVtUG9zaXRpb24gbV9zdGFydCB7IDAg
fTsKLSAgICAgICAgICAgIHVuc2lnbmVkIG1fbGVuZ3RoIHsgMCB9OwotICAgICAgICAgICAgSXND
b2xsYXBzZWQgbV9pc0NvbGxhcHNlZCB7IElzQ29sbGFwc2VkOjpObyB9OwotICAgICAgICB9Owot
ICAgICAgICBPcHRpb25hbDxUZXh0Q29udGV4dD4gdGV4dENvbnRleHQoKSBjb25zdCB7IHJldHVy
biBtX3RleHRDb250ZXh0OyB9Ci0gICAgICAgIC8vIE5vdGUgdGhhdCBzdHlsZSgpIGFuZCBpbmxp
bmVJdGVtKCkgYWx3YXlzIHJldHVybnMgdGhlIGZpcnN0IElubGluZUl0ZW0gZm9yIGEgcnVuLgot
ICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUoKSBjb25zdCB7IHJldHVybiBtX2lubGlu
ZUl0ZW0uc3R5bGUoKTsgfQotICAgICAgICBjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtKCkg
Y29uc3QgeyByZXR1cm4gbV9pbmxpbmVJdGVtOyB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBm
cmllbmQgY2xhc3MgSW5saW5lUnVuUHJvdmlkZXI7Ci0KLSAgICAgICAgUnVuKGNvbnN0IElubGlu
ZUl0ZW0mLCBUeXBlLCBPcHRpb25hbDxUZXh0Q29udGV4dD4pOwotICAgICAgICBPcHRpb25hbDxU
ZXh0Q29udGV4dD4mIHRleHRDb250ZXh0KCkgeyByZXR1cm4gbV90ZXh0Q29udGV4dDsgfQotCi0g
ICAgICAgIGNvbnN0IFR5cGUgbV90eXBlOwotICAgICAgICBjb25zdCBJbmxpbmVJdGVtJiBtX2lu
bGluZUl0ZW07Ci0gICAgICAgIE9wdGlvbmFsPFRleHRDb250ZXh0PiBtX3RleHRDb250ZXh0Owot
ICAgIH07Ci0gICAgY29uc3QgVmVjdG9yPElubGluZVJ1blByb3ZpZGVyOjpSdW4+JiBydW5zKCkg
Y29uc3QgeyByZXR1cm4gbV9pbmxpbmVSdW5zOyB9Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBjb21t
aXRUZXh0UnVuKCk7Ci0gICAgdm9pZCBwcm9jZXNzSW5saW5lVGV4dEl0ZW0oY29uc3QgSW5saW5l
SXRlbSYpOwotICAgIHVuc2lnbmVkIG1vdmVUb05leHROb25XaGl0ZXNwYWNlUG9zaXRpb24oY29u
c3QgSW5saW5lSXRlbSYsIEl0ZW1Qb3NpdGlvbiBjdXJyZW50UG9zaXRpb24pOwotICAgIHVuc2ln
bmVkIG1vdmVUb05leHRCcmVha2FibGVQb3NpdGlvbihjb25zdCBJbmxpbmVJdGVtJiwgSXRlbVBv
c2l0aW9uIGN1cnJlbnRQb3NpdGlvbik7Ci0gICAgYm9vbCBpc0NvbnRpbm91c0NvbnRlbnQoUnVu
OjpUeXBlIG5ld1J1blR5cGUsIGNvbnN0IElubGluZUl0ZW0mIG5ld0lubGluZUl0ZW0pOwotCi0g
ICAgTGF6eUxpbmVCcmVha0l0ZXJhdG9yIG1fbGluZUJyZWFrSXRlcmF0b3I7Ci0KLSAgICBWZWN0
b3I8SW5saW5lUnVuUHJvdmlkZXI6OlJ1bj4gbV9pbmxpbmVSdW5zOwotfTsKLQotaW5saW5lIElu
bGluZVJ1blByb3ZpZGVyOjpSdW4gSW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6Y3JlYXRlQm94UnVu
KGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0pCi17Ci0gICAgcmV0dXJuIHsgaW5saW5lSXRl
bSwgVHlwZTo6Qm94LCBXVEY6Om51bGxvcHQgfTsKLX0KLQotaW5saW5lIElubGluZVJ1blByb3Zp
ZGVyOjpSdW4gSW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6Y3JlYXRlRmxvYXRSdW4oY29uc3QgSW5s
aW5lSXRlbSYgaW5saW5lSXRlbSkKLXsKLSAgICByZXR1cm4geyBpbmxpbmVJdGVtLCBUeXBlOjpG
bG9hdCwgV1RGOjpudWxsb3B0IH07Ci19Ci0KLWlubGluZSBJbmxpbmVSdW5Qcm92aWRlcjo6UnVu
IElubGluZVJ1blByb3ZpZGVyOjpSdW46OmNyZWF0ZVNvZnRMaW5lQnJlYWtSdW4oY29uc3QgSW5s
aW5lSXRlbSYgaW5saW5lSXRlbSkKLXsKLSAgICByZXR1cm4geyBpbmxpbmVJdGVtLCBUeXBlOjpT
b2Z0TGluZUJyZWFrLCBXVEY6Om51bGxvcHQgfTsKLX0KLQotaW5saW5lIElubGluZVJ1blByb3Zp
ZGVyOjpSdW4gSW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6Y3JlYXRlSGFyZExpbmVCcmVha1J1bihj
b25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtKQotewotICAgIHJldHVybiB7IGlubGluZUl0ZW0s
IFR5cGU6OkhhcmRMaW5lQnJlYWssIFdURjo6bnVsbG9wdCB9OwotfQotCi1pbmxpbmUgSW5saW5l
UnVuUHJvdmlkZXI6OlJ1biBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpjcmVhdGVXaGl0ZXNwYWNl
UnVuKGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0sIEl0ZW1Qb3NpdGlvbiBzdGFydCwgdW5z
aWduZWQgbGVuZ3RoLCBib29sIGlzQ29sbGFwc2libGUpCi17Ci0gICAgQVNTRVJUKGxlbmd0aCk7
Ci0gICAgYXV0byBpc0NvbGxhcHNlZCA9IGlzQ29sbGFwc2libGUgJiYgbGVuZ3RoID4gMSA/IFRl
eHRDb250ZXh0OjpJc0NvbGxhcHNlZDo6WWVzIDogVGV4dENvbnRleHQ6OklzQ29sbGFwc2VkOjpO
bzsKLSAgICByZXR1cm4geyBpbmxpbmVJdGVtLCBUeXBlOjpXaGl0ZXNwYWNlLCBUZXh0Q29udGV4
dChzdGFydCwgbGVuZ3RoLCBpc0NvbGxhcHNlZCkgfTsKLX0KLQotaW5saW5lIElubGluZVJ1blBy
b3ZpZGVyOjpSdW4gSW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6Y3JlYXRlTm9uV2hpdGVzcGFjZVJ1
bihjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtLCBJdGVtUG9zaXRpb24gc3RhcnQsIHVuc2ln
bmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4geyBpbmxpbmVJdGVtLCBUeXBlOjpOb25XaGl0ZXNw
YWNlLCBUZXh0Q29udGV4dChzdGFydCwgbGVuZ3RoLCBUZXh0Q29udGV4dDo6SXNDb2xsYXBzZWQ6
Ok5vKSB9OwotfQotCi1pbmxpbmUgSW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6UnVuKGNvbnN0IElu
bGluZUl0ZW0mIGlubGluZUl0ZW0sIFR5cGUgdHlwZSwgT3B0aW9uYWw8VGV4dENvbnRleHQ+IHRl
eHRDb250ZXh0KQotICAgIDogbV90eXBlKHR5cGUpCi0gICAgLCBtX2lubGluZUl0ZW0oaW5saW5l
SXRlbSkKLSAgICAsIG1fdGV4dENvbnRleHQodGV4dENvbnRleHQpCi17Ci19Ci0KLWlubGluZSBJ
bmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpUZXh0Q29udGV4dDo6VGV4dENvbnRleHQoSXRlbVBvc2l0
aW9uIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIElzQ29sbGFwc2VkIGlzQ29sbGFwc2VkKQotICAg
IDogbV9zdGFydChzdGFydCkKLSAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKLSAgICAsIG1faXNDb2xs
YXBzZWQoaXNDb2xsYXBzZWQpCi17Ci19Ci0KLX0KLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lVGV4dEl0ZW0uY3BwIGIv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lVGV4dEl0ZW0uY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmNmNTQyNDY0ZmRiYmY0NmY0MThiMDExY2EwNDgzYTVlN2I5MmQxOGMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9J
bmxpbmVUZXh0SXRlbS5jcHAKQEAgLTAsMCArMSwxMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5saW5lVGV4dEl0ZW0uaCIKKworI2lmIEVOQUJMRShM
QVlPVVRfRk9STUFUVElOR19DT05URVhUKQorCisjaW5jbHVkZSAiQnJlYWtMaW5lcy5oIgorI2lu
Y2x1ZGUgIkxheW91dElubGluZUJveC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3Bh
Y2UgTGF5b3V0IHsKKworc3RhdGljIGlubGluZSBib29sIGlzV2hpdGVzcGFjZUNoYXJhY3Rlcihj
aGFyIGNoYXJhY3RlciwgYm9vbCBwcmVzZXJ2ZU5ld2xpbmUpCit7CisgICAgcmV0dXJuIGNoYXJh
Y3RlciA9PSAnICcgfHwgY2hhcmFjdGVyID09ICdcdCcgfHwgKGNoYXJhY3RlciA9PSAnXG4nICYm
ICFwcmVzZXJ2ZU5ld2xpbmUpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNTb2Z0TGluZUJy
ZWFrKGNoYXIgY2hhcmFjdGVyLCBib29sIHByZXNlcnZlTmV3bGluZSkKK3sKKyAgICByZXR1cm4g
cHJlc2VydmVOZXdsaW5lICYmIGNoYXJhY3RlciA9PSAnXG4nOworfQorCitzdGF0aWMgdW5zaWdu
ZWQgbW92ZVRvTmV4dE5vbldoaXRlc3BhY2VQb3NpdGlvbihTdHJpbmcgdGV4dENvbnRlbnQsIHVu
c2lnbmVkIHN0YXJ0UG9zaXRpb24sIGJvb2wgcHJlc2VydmVOZXdsaW5lKQoreworICAgIGF1dG8g
bmV4dE5vbldoaXRlU3BhY2VQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb247CisgICAgd2hpbGUgKG5l
eHROb25XaGl0ZVNwYWNlUG9zaXRpb24gPCB0ZXh0Q29udGVudC5sZW5ndGgoKSAmJiBpc1doaXRl
c3BhY2VDaGFyYWN0ZXIodGV4dENvbnRlbnRbbmV4dE5vbldoaXRlU3BhY2VQb3NpdGlvbl0sIHBy
ZXNlcnZlTmV3bGluZSkpCisgICAgICAgICsrbmV4dE5vbldoaXRlU3BhY2VQb3NpdGlvbjsKKyAg
ICByZXR1cm4gbmV4dE5vbldoaXRlU3BhY2VQb3NpdGlvbiAtIHN0YXJ0UG9zaXRpb247Cit9CisK
K3N0YXRpYyB1bnNpZ25lZCBtb3ZlVG9OZXh0QnJlYWthYmxlUG9zaXRpb24odW5zaWduZWQgc3Rh
cnRQb3NpdGlvbiwgTGF6eUxpbmVCcmVha0l0ZXJhdG9yIGxpbmVCcmVha0l0ZXJhdG9yLCBjb25z
dCBSZW5kZXJTdHlsZSYgc3R5bGUpCit7CisgICAgYXV0byBmaW5kTmV4dEJyZWFrYWJsZVBvc2l0
aW9uID0gWyZdKGF1dG8gc3RhcnRQb3NpdGlvbikgeworICAgICAgICBhdXRvIGtlZXBBbGxXb3Jk
c0ZvckNKSyA9IHN0eWxlLndvcmRCcmVhaygpID09IFdvcmRCcmVhazo6S2VlcEFsbDsKKyAgICAg
ICAgYXV0byBicmVha05CU1AgPSBzdHlsZS5hdXRvV3JhcCgpICYmIHN0eWxlLm5ic3BNb2RlKCkg
PT0gTkJTUE1vZGU6OlNwYWNlOworCisgICAgICAgIGlmIChrZWVwQWxsV29yZHNGb3JDSkspIHsK
KyAgICAgICAgICAgIGlmIChicmVha05CU1ApCisgICAgICAgICAgICAgICAgcmV0dXJuIG5leHRC
cmVha2FibGVQb3NpdGlvbktlZXBpbmdBbGxXb3JkcyhsaW5lQnJlYWtJdGVyYXRvciwgc3RhcnRQ
b3NpdGlvbik7CisgICAgICAgICAgICByZXR1cm4gbmV4dEJyZWFrYWJsZVBvc2l0aW9uS2VlcGlu
Z0FsbFdvcmRzSWdub3JpbmdOQlNQKGxpbmVCcmVha0l0ZXJhdG9yLCBzdGFydFBvc2l0aW9uKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChsaW5lQnJlYWtJdGVyYXRvci5tb2RlKCkgPT0gTGlu
ZUJyZWFrSXRlcmF0b3JNb2RlOjpEZWZhdWx0KSB7CisgICAgICAgICAgICBpZiAoYnJlYWtOQlNQ
KQorICAgICAgICAgICAgICAgIHJldHVybiBXZWJDb3JlOjpuZXh0QnJlYWthYmxlUG9zaXRpb24o
bGluZUJyZWFrSXRlcmF0b3IsIHN0YXJ0UG9zaXRpb24pOworICAgICAgICAgICAgcmV0dXJuIG5l
eHRCcmVha2FibGVQb3NpdGlvbklnbm9yaW5nTkJTUChsaW5lQnJlYWtJdGVyYXRvciwgc3RhcnRQ
b3NpdGlvbik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoYnJlYWtOQlNQKQorICAgICAgICAg
ICAgcmV0dXJuIG5leHRCcmVha2FibGVQb3NpdGlvbldpdGhvdXRTaG9ydGN1dChsaW5lQnJlYWtJ
dGVyYXRvciwgc3RhcnRQb3NpdGlvbik7CisgICAgICAgIHJldHVybiBuZXh0QnJlYWthYmxlUG9z
aXRpb25JZ25vcmluZ05CU1BXaXRob3V0U2hvcnRjdXQobGluZUJyZWFrSXRlcmF0b3IsIHN0YXJ0
UG9zaXRpb24pOworICAgIH07CisKKyAgICBhdXRvIHRleHRMZW5ndGggPSBsaW5lQnJlYWtJdGVy
YXRvci5zdHJpbmdWaWV3KCkubGVuZ3RoKCk7CisgICAgYXV0byBjdXJyZW50UG9zaXRpb24gPSBz
dGFydFBvc2l0aW9uOworICAgIHdoaWxlIChjdXJyZW50UG9zaXRpb24gPCB0ZXh0TGVuZ3RoIC0g
MSkgeworICAgICAgICBhdXRvIG5leHRCcmVha2FibGVQb3NpdGlvbiA9IGZpbmROZXh0QnJlYWth
YmxlUG9zaXRpb24oY3VycmVudFBvc2l0aW9uKTsKKyAgICAgICAgaWYgKG5leHRCcmVha2FibGVQ
b3NpdGlvbiAhPSBjdXJyZW50UG9zaXRpb24pCisgICAgICAgICAgICByZXR1cm4gbmV4dEJyZWFr
YWJsZVBvc2l0aW9uIC0gY3VycmVudFBvc2l0aW9uOworICAgICAgICArK2N1cnJlbnRQb3NpdGlv
bjsKKyAgICB9CisgICAgcmV0dXJuIHRleHRMZW5ndGggLSBzdGFydFBvc2l0aW9uOworfQorCit2
b2lkIElubGluZVRleHRJdGVtOjpjcmVhdGVBbmRBcHBlbmRUZXh0SXRlbXMoSW5saW5lSXRlbXMm
IGlubGluZUNvbnRlbnQsIGNvbnN0IElubGluZUJveCYgaW5saW5lQm94KQoreworICAgIGF1dG8m
IHN0eWxlID0gaW5saW5lQm94LnN0eWxlKCk7CisgICAgYXV0byBwcmVzZXJ2ZU5ld2xpbmUgPSBz
dHlsZS5wcmVzZXJ2ZU5ld2xpbmUoKTsKKyAgICBhdXRvIGNvbGxhcHNlV2hpdGVTcGFjZSA9IHN0
eWxlLmNvbGxhcHNlV2hpdGVTcGFjZSgpOworICAgIGF1dG8gdGV4dCA9IGlubGluZUJveC50ZXh0
Q29udGVudCgpOworICAgIExhenlMaW5lQnJlYWtJdGVyYXRvciBsaW5lQnJlYWtJdGVyYXRvcih0
ZXh0KTsKKworICAgIHVuc2lnbmVkIGN1cnJlbnRQb3NpdGlvbiA9IDA7CisgICAgd2hpbGUgKGN1
cnJlbnRQb3NpdGlvbiA8IHRleHQubGVuZ3RoKCkpIHsKKyAgICAgICAgLy8gU29mdCBsaW5lYnJl
YWs/CisgICAgICAgIGlmIChpc1NvZnRMaW5lQnJlYWsodGV4dFtjdXJyZW50UG9zaXRpb25dLCBw
cmVzZXJ2ZU5ld2xpbmUpKSB7CisgICAgICAgICAgICBpbmxpbmVDb250ZW50LmFkZChzdGQ6Om1h
a2VfdW5pcXVlPElubGluZVRleHRJdGVtPihpbmxpbmVCb3gsIGN1cnJlbnRQb3NpdGlvbiwgMSwg
dHJ1ZSwgZmFsc2UpKTsKKyAgICAgICAgICAgICsrY3VycmVudFBvc2l0aW9uOworICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlzV2hpdGVzcGFjZUNoYXJhY3Rl
cih0ZXh0W2N1cnJlbnRQb3NpdGlvbl0sIHByZXNlcnZlTmV3bGluZSkpIHsKKyAgICAgICAgICAg
IGF1dG8gbGVuZ3RoID0gbW92ZVRvTmV4dE5vbldoaXRlc3BhY2VQb3NpdGlvbih0ZXh0LCBjdXJy
ZW50UG9zaXRpb24sIHByZXNlcnZlTmV3bGluZSk7CisgICAgICAgICAgICBhdXRvIGlzQ29sbGFw
c2VkID0gY29sbGFwc2VXaGl0ZVNwYWNlICYmIGxlbmd0aCA+IDE7CisgICAgICAgICAgICBpbmxp
bmVDb250ZW50LmFkZChzdGQ6Om1ha2VfdW5pcXVlPElubGluZVRleHRJdGVtPihpbmxpbmVCb3gs
IGN1cnJlbnRQb3NpdGlvbiwgbGVuZ3RoLCB0cnVlLCBpc0NvbGxhcHNlZCkpOworICAgICAgICAg
ICAgY3VycmVudFBvc2l0aW9uICs9IGxlbmd0aDsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICB9CisKKyAgICAgICAgYXV0byBsZW5ndGggPSBtb3ZlVG9OZXh0QnJlYWthYmxlUG9zaXRp
b24oY3VycmVudFBvc2l0aW9uLCBsaW5lQnJlYWtJdGVyYXRvciwgc3R5bGUpOworICAgICAgICBp
bmxpbmVDb250ZW50LmFkZChzdGQ6Om1ha2VfdW5pcXVlPElubGluZVRleHRJdGVtPihpbmxpbmVC
b3gsIGN1cnJlbnRQb3NpdGlvbiwgbGVuZ3RoLCBmYWxzZSwgZmFsc2UpKTsKKyAgICAgICAgY3Vy
cmVudFBvc2l0aW9uICs9IGxlbmd0aDsKKyAgICB9Cit9CisKK0lubGluZVRleHRJdGVtOjpJbmxp
bmVUZXh0SXRlbShjb25zdCBJbmxpbmVCb3gmIGlubGluZUJveCwgdW5zaWduZWQgc3RhcnQsIHVu
c2lnbmVkIGxlbmd0aCwgYm9vbCBpc1doaXRlc3BhY2UsIGJvb2wgaXNDb2xsYXBzZWQpCisgICAg
OiBJbmxpbmVJdGVtKGlubGluZUJveCwgVHlwZTo6VGV4dCkKKyAgICAsIG1fc3RhcnQoc3RhcnQp
CisgICAgLCBtX2xlbmd0aChsZW5ndGgpCisgICAgLCBtX2lzV2hpdGVzcGFjZShpc1doaXRlc3Bh
Y2UpCisgICAgLCBtX2lzQ29sbGFwc2VkKGlzQ29sbGFwc2VkKQoreworfQorCit9Cit9CisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lu
bGluZVRleHRJdGVtLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9J
bmxpbmVUZXh0SXRlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI4NzRmMjhhMzFkY2QwMGFiZWRlODg5NzU3NDUx
M2NiZTI5ZTE2ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5s
aW5lZm9ybWF0dGluZy9JbmxpbmVUZXh0SXRlbS5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhU
KQorCisjaW5jbHVkZSAiSW5saW5lSXRlbS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1l
c3BhY2UgTGF5b3V0IHsKKworY2xhc3MgSW5saW5lVGV4dEl0ZW0gOiBwdWJsaWMgSW5saW5lSXRl
bSB7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgY3JlYXRlQW5kQXBwZW5kVGV4dEl0ZW1zKElu
bGluZUl0ZW1zJiwgY29uc3QgSW5saW5lQm94Jik7CisKKyAgICBJbmxpbmVUZXh0SXRlbShjb25z
dCBJbmxpbmVCb3gmLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoLCBib29sIGlzV2hp
dGVzcGFjZSwgYm9vbCBpc0NvbGxhcHNlZCk7CisKKyAgICB1bnNpZ25lZCBzdGFydCgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhcnQ7IH0KKyAgICB1bnNpZ25lZCBlbmQoKSBjb25zdCB7IHJldHVybiBz
dGFydCgpICsgbGVuZ3RoKCk7IH0KKyAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVy
biBtX2xlbmd0aDsgfQorCisgICAgYm9vbCBpc1doaXRlc3BhY2UoKSBjb25zdCB7IHJldHVybiBt
X2lzV2hpdGVzcGFjZTsgfQorICAgIGJvb2wgaXNDb2xsYXBzZWQoKSBjb25zdCB7IHJldHVybiBt
X2lzQ29sbGFwc2VkOyB9CisKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgbV9zdGFydCB7IDAgfTsK
KyAgICB1bnNpZ25lZCBtX2xlbmd0aCB7IDAgfTsKKyAgICBib29sIG1faXNXaGl0ZXNwYWNlIHsg
ZmFsc2UgfTsKKyAgICBib29sIG1faXNDb2xsYXBzZWQgeyBmYWxzZSB9OworfTsKKworfQorfQor
CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0lOTElORV9JVEVNKElubGluZVRleHRJdGVtLCBpc1Rl
eHQoKSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5l
Zm9ybWF0dGluZy90ZXh0L1RleHRVdGlsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxp
bmVmb3JtYXR0aW5nL3RleHQvVGV4dFV0aWwuY3BwCmluZGV4IDM3NWVkNzIzY2QyYjI5ODRkZjcz
ZTBlNzMyMTFiYTAyODQxOGZlMDguLmMxMzllYWJhNzU3Njk2ZDNjODc2ZjQ0NGRjYzk3ZmVjN2Mz
YTYzZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5n
L3RleHQvVGV4dFV0aWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3Jt
YXR0aW5nL3RleHQvVGV4dFV0aWwuY3BwCkBAIC0zNCwxOSArMzQsMTkgQEAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIG5hbWVzcGFjZSBMYXlvdXQgewogCi1PcHRpb25hbDxJdGVtUG9zaXRpb24+IFRl
eHRVdGlsOjpoeXBoZW5Qb3NpdGlvbkJlZm9yZShjb25zdCBJbmxpbmVJdGVtJiwgSXRlbVBvc2l0
aW9uLCB1bnNpZ25lZCkKK09wdGlvbmFsPHVuc2lnbmVkPiBUZXh0VXRpbDo6aHlwaGVuUG9zaXRp
b25CZWZvcmUoY29uc3QgSW5saW5lSXRlbSYsIHVuc2lnbmVkLCB1bnNpZ25lZCkKIHsKICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCi1MYXlvdXRVbml0IFRleHRVdGlsOjp3aWR0aChjb25z
dCBJbmxpbmVJdGVtJiBpbmxpbmVUZXh0SXRlbSwgSXRlbVBvc2l0aW9uIGZyb20sIEl0ZW1Qb3Np
dGlvbiB0bywgTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbExlZnQpCitMYXlvdXRVbml0IFRleHRV
dGlsOjp3aWR0aChjb25zdCBJbmxpbmVCb3gmIGlubGluZUJveCwgdW5zaWduZWQgZnJvbSwgdW5z
aWduZWQgdG8sIExheW91dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0KQogewotICAgIGF1dG8mIHN0
eWxlID0gaW5saW5lVGV4dEl0ZW0uc3R5bGUoKTsKKyAgICBhdXRvJiBzdHlsZSA9IGlubGluZUJv
eC5zdHlsZSgpOwogICAgIGF1dG8mIGZvbnQgPSBzdHlsZS5mb250Q2FzY2FkZSgpOwogICAgIGlm
ICghZm9udC5zaXplKCkgfHwgZnJvbSA9PSB0bykKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBh
dXRvIHRleHQgPSBpbmxpbmVUZXh0SXRlbS50ZXh0Q29udGVudCgpOworICAgIGF1dG8gdGV4dCA9
IGlubGluZUJveC50ZXh0Q29udGVudCgpOwogICAgIEFTU0VSVCh0byA8PSB0ZXh0Lmxlbmd0aCgp
KTsKIAogICAgIGlmIChmb250LmlzRml4ZWRQaXRjaCgpKQpAQCAtNzAsNyArNzAsNyBAQCBMYXlv
dXRVbml0IFRleHRVdGlsOjp3aWR0aChjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVUZXh0SXRlbSwg
SXRlbVBvc2l0aW9uIGZyb20sCiAgICAgcmV0dXJuIHN0ZDo6bWF4PExheW91dFVuaXQ+KDAsIHdp
ZHRoKTsKIH0KIAotTGF5b3V0VW5pdCBUZXh0VXRpbDo6Zml4ZWRQaXRjaFdpZHRoKFN0cmluZyB0
ZXh0LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIEl0ZW1Qb3NpdGlvbiBmcm9tLCBJdGVtUG9z
aXRpb24gdG8sIExheW91dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0KQorTGF5b3V0VW5pdCBUZXh0
VXRpbDo6Zml4ZWRQaXRjaFdpZHRoKFN0cmluZyB0ZXh0LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5
bGUsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvLCBMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2Fs
TGVmdCkKIHsKICAgICBhdXRvJiBmb250ID0gc3R5bGUuZm9udENhc2NhZGUoKTsKICAgICBhdXRv
IG1vbm9zcGFjZUNoYXJhY3RlcldpZHRoID0gZm9udC5zcGFjZVdpZHRoKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy90ZXh0L1RleHRVdGlsLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy90ZXh0L1RleHRVdGlsLmgK
aW5kZXggODM2YTllYzQwZDNhNzJlYjkyNjc0YTUzYjM3MmU1MGQyZjNkYWNiNy4uZDBmZWE2YWQx
ZGRkNzI5ZDc0ZjliZGZiMWJjOWQyMWM5ODdkMmUwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvdGV4dC9UZXh0VXRpbC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL3RleHQvVGV4dFV0aWwuaApAQCAtMjgsMTgg
KzI4LDE3IEBACiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCiAKICNpbmNs
dWRlICJJbmxpbmVJdGVtLmgiCi0jaW5jbHVkZSAiSW5saW5lUnVuUHJvdmlkZXIuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIExheW91dCB7CiAKIGNsYXNzIFRleHRVdGlsIHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgTGF5b3V0VW5pdCB3aWR0aChjb25zdCBJbmxpbmVJdGVtJiwg
SXRlbVBvc2l0aW9uIGZyb20sIEl0ZW1Qb3NpdGlvbiB0bywgTGF5b3V0VW5pdCBjb250ZW50TG9n
aWNhbExlZnQpOwotICAgIHN0YXRpYyBPcHRpb25hbDxJdGVtUG9zaXRpb24+IGh5cGhlblBvc2l0
aW9uQmVmb3JlKGNvbnN0IElubGluZUl0ZW0mLCBJdGVtUG9zaXRpb24gZnJvbSwgdW5zaWduZWQg
bGVuZ3RoKTsKKyAgICBzdGF0aWMgTGF5b3V0VW5pdCB3aWR0aChjb25zdCBJbmxpbmVCb3gmLCB1
bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bywgTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbExlZnQp
OworICAgIHN0YXRpYyBPcHRpb25hbDx1bnNpZ25lZD4gaHlwaGVuUG9zaXRpb25CZWZvcmUoY29u
c3QgSW5saW5lSXRlbSYsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbmd0aCk7CiAKIHByaXZh
dGU6Ci0gICAgc3RhdGljIExheW91dFVuaXQgZml4ZWRQaXRjaFdpZHRoKFN0cmluZywgY29uc3Qg
UmVuZGVyU3R5bGUmLCBJdGVtUG9zaXRpb24gZnJvbSwgSXRlbVBvc2l0aW9uIHRvLCBMYXlvdXRV
bml0IGNvbnRlbnRMb2dpY2FsTGVmdCk7CisgICAgc3RhdGljIExheW91dFVuaXQgZml4ZWRQaXRj
aFdpZHRoKFN0cmluZywgY29uc3QgUmVuZGVyU3R5bGUmLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25l
ZCB0bywgTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbExlZnQpOwogfTsKIAogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0UmVwbGFjZWQuY3BwIGIv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0UmVwbGFjZWQuY3BwCmluZGV4
IDAwY2Q1ZDA2ODI5OGIxNjYzYWNmZmM5ZDQ5ZjBmZmIxYjY1YzRmMjMuLjk2NGE2YjM2YjRmNTNh
NDM1MDQ3MjIyN2Q4MWY0NzFlNjVlZjAzYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9sYXlvdXR0cmVlL0xheW91dFJlcGxhY2VkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRSZXBsYWNlZC5jcHAKQEAgLTgwLDcgKzgwLDcgQEAgTGF5
b3V0VW5pdCBSZXBsYWNlZDo6aW50cmluc2ljUmF0aW8oKSBjb25zdAogICAgIEFTU0VSVChoYXNJ
bnRyaW5zaWNSYXRpbygpIHx8IChoYXNJbnRyaW5zaWNXaWR0aCgpICYmIGhhc0ludHJpbnNpY0hl
aWdodCgpKSk7CiAgICAgaWYgKG1faW50cmluc2ljUmF0aW8pCiAgICAgICAgIHJldHVybiAqbV9p
bnRyaW5zaWNSYXRpbzsKLSAgICBpZiAobV9pbnRyaW5zaWNTaXplKQorICAgIGlmIChtX2ludHJp
bnNpY1NpemUgJiYgbV9pbnRyaW5zaWNTaXplLT5oZWlnaHQoKSkKICAgICAgICAgcmV0dXJuIG1f
aW50cmluc2ljU2l6ZS0+d2lkdGgoKSAvIG1faW50cmluc2ljU2l6ZS0+aGVpZ2h0KCk7CiAgICAg
cmV0dXJuIDE7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvbGF5b3V0dHJl
ZS9MYXlvdXRUcmVlQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvbGF5b3V0dHJl
ZS9MYXlvdXRUcmVlQnVpbGRlci5jcHAKaW5kZXggZTYxMDJkY2FlZDRhZjgzNGZhMDBlYTRlNGI3
MmU2Y2ZmYWI4Njk3Zi4uNzUwYTc3NjExY2VkMTA0NmRjYzA1ZmViOTk4NTcxZjdkZDliZmI0ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0VHJlZUJ1
aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9sYXlvdXR0cmVlL0xheW91dFRy
ZWVCdWlsZGVyLmNwcApAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShMQVlPVVRfRk9STUFU
VElOR19DT05URVhUKQogCiAjaW5jbHVkZSAiRGlzcGxheUJveC5oIgorI2luY2x1ZGUgIkRpc3Bs
YXlSdW4uaCIKICNpbmNsdWRlICJJbmxpbmVGb3JtYXR0aW5nU3RhdGUuaCIKICNpbmNsdWRlICJM
YXlvdXRCbG9ja0NvbnRhaW5lci5oIgogI2luY2x1ZGUgIkxheW91dEJveC5oIgpAQCAtMTY2LDEx
ICsxNjcsMTEgQEAgc3RhdGljIHZvaWQgb3V0cHV0SW5saW5lUnVucyhUZXh0U3RyZWFtJiBzdHJl
YW0sIGNvbnN0IExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwKICAgICAgICAgd2hpbGUgKCsrcHJp
bnRlZENoYXJhY3RlcnMgPD0gZGVwdGggKiAyKQogICAgICAgICAgICAgc3RyZWFtIDw8ICIgIjsK
ICAgICAgICAgc3RyZWFtIDw8ICJydW4iOwotICAgICAgICBpZiAoaW5saW5lUnVuLnRleHRDb250
ZXh0KCkpCi0gICAgICAgICAgICBzdHJlYW0gPDwgIigiIDw8IGlubGluZVJ1bi50ZXh0Q29udGV4
dCgpLT5zdGFydCgpIDw8ICIsICIgPDwgaW5saW5lUnVuLnRleHRDb250ZXh0KCktPnN0YXJ0KCkg
KyBpbmxpbmVSdW4udGV4dENvbnRleHQoKS0+bGVuZ3RoKCkgPDwgIikgIjsKKyAgICAgICAgaWYg
KGlubGluZVJ1bi0+dGV4dENvbnRleHQoKSkKKyAgICAgICAgICAgIHN0cmVhbSA8PCAiKCIgPDwg
aW5saW5lUnVuLT50ZXh0Q29udGV4dCgpLT5zdGFydCgpIDw8ICIsICIgPDwgaW5saW5lUnVuLT50
ZXh0Q29udGV4dCgpLT5zdGFydCgpICsgaW5saW5lUnVuLT50ZXh0Q29udGV4dCgpLT5sZW5ndGgo
KSA8PCAiKSAiOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBzdHJlYW0gPDwgIih4LCB4KSAi
OwotICAgICAgICBzdHJlYW0gPDwgImF0IFsiIDw8IGlubGluZVJ1bi5sb2dpY2FsTGVmdCgpIDw8
ICIsICIgPDwgaW5saW5lUnVuLmxvZ2ljYWxUb3AoKSA8PCAiXSBzaXplIFsiIDw8IGlubGluZVJ1
bi5sb2dpY2FsV2lkdGgoKSA8PCAiICIgPDwgaW5saW5lUnVuLmxvZ2ljYWxIZWlnaHQoKSA8PCAi
XSI7CisgICAgICAgIHN0cmVhbSA8PCAiYXQgWyIgPDwgaW5saW5lUnVuLT5sb2dpY2FsTGVmdCgp
IDw8ICIsICIgPDwgaW5saW5lUnVuLT5sb2dpY2FsVG9wKCkgPDwgIl0gc2l6ZSBbIiA8PCBpbmxp
bmVSdW4tPmxvZ2ljYWxXaWR0aCgpIDw8ICIgIiA8PCBpbmxpbmVSdW4tPmxvZ2ljYWxIZWlnaHQo
KSA8PCAiXSI7CiAgICAgICAgIHN0cmVhbS5uZXh0TGluZSgpOwogICAgIH0KIH0KQEAgLTE4Niwx
MSArMTg3LDEzIEBAIHN0YXRpYyB2b2lkIG91dHB1dExheW91dEJveChUZXh0U3RyZWFtJiBzdHJl
YW0sIGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBEaXNwCiAgICAgZWxzZSBpZiAoaXM8SW5s
aW5lQm94PihsYXlvdXRCb3gpKSB7CiAgICAgICAgIGlmIChsYXlvdXRCb3gucmVwbGFjZWQoKSkK
ICAgICAgICAgICAgIHN0cmVhbSA8PCAiaW5saW5lIHJlcGxhY2VkIGJveCI7Ci0gICAgICAgIGVs
c2UgaWYgKGRvd25jYXN0PElubGluZUJveD4obGF5b3V0Qm94KS5oYXNUZXh0Q29udGVudCgpKSB7
Ci0gICAgICAgICAgICBhdXRvIHRleHRDb250ZW50ID0gZG93bmNhc3Q8SW5saW5lQm94PihsYXlv
dXRCb3gpLnRleHRDb250ZW50KCk7Ci0gICAgICAgICAgICBzdHJlYW0gPDwgImlubGluZSB0ZXh0
IFtcIiIgPDwgdGV4dENvbnRlbnQudXRmOCgpLmRhdGEoKSA8PCAiXCJdIjsKLSAgICAgICAgfSBl
bHNlCisgICAgICAgIGVsc2UgaWYgKGxheW91dEJveC5pc0Fub255bW91cygpKQorICAgICAgICAg
ICAgc3RyZWFtIDw8ICJhbm9ueW1vdXMgaW5saW5lIGJveCI7CisgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIHN0cmVhbSA8PCAiaW5saW5lIGJveCI7CisKKyAgICAgICAgaWYgKGRvd25jYXN0PElu
bGluZUJveD4obGF5b3V0Qm94KS5oYXNUZXh0Q29udGVudCgpKQorICAgICAgICAgICAgc3RyZWFt
IDw8ICIgd2l0aCB0ZXh0IGNvbnRlbnQgW1wiIiA8PCBkb3duY2FzdDxJbmxpbmVCb3g+KGxheW91
dEJveCkudGV4dENvbnRlbnQoKS51dGY4KCkuZGF0YSgpIDw8ICJcIl0iOwogICAgIH0gZWxzZSBp
ZiAoaXM8QmxvY2tDb250YWluZXI+KGxheW91dEJveCkpIHsKICAgICAgICAgaWYgKCFsYXlvdXRC
b3gucGFyZW50KCkpCiAgICAgICAgICAgICBzdHJlYW0gPDwgImluaXRpYWwgIjsKQEAgLTIwMCwx
MyArMjAzLDggQEAgc3RhdGljIHZvaWQgb3V0cHV0TGF5b3V0Qm94KFRleHRTdHJlYW0mIHN0cmVh
bSwgY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IERpc3AKICAgICBlbHNlCiAgICAgICAgIHN0
cmVhbSA8PCAiYm94IjsKICAgICAvLyBGSVhNRTogSW5saW5lIHRleHQgcnVucyBkb24ndCBjcmVh
dGUgZGlzcGxheSBib3hlcyB5ZXQuCi0gICAgaWYgKGRpc3BsYXlCb3gpIHsKLSAgICAgICAgLy8g
RklYTUU6IGRpc3BsYXkgYm94IGlzIG5vdCBjb21wbGV0ZWx5IHNldCB5ZXQuCi0gICAgICAgIGlm
ICgoaXM8SW5saW5lQm94PihsYXlvdXRCb3gpIHx8IGlzPElubGluZUNvbnRhaW5lcj4obGF5b3V0
Qm94KSkgJiYgIWxheW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpKQotICAgICAgICAgICAg
c3RyZWFtIDw8ICIgYXQgWyIgPDwgIi4iIDw8ICIgIiA8PCAiLiIgPDwgIl0gc2l6ZSBbIiA8PCBk
aXNwbGF5Qm94LT53aWR0aCgpIDw8ICIgIiA8PCBkaXNwbGF5Qm94LT5oZWlnaHQoKSA8PCAiXSI7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0cmVhbSA8PCAiIGF0IFsiIDw8IGRpc3BsYXlC
b3gtPmxlZnQoKSA8PCAiICIgPDwgZGlzcGxheUJveC0+dG9wKCkgPDwgIl0gc2l6ZSBbIiA8PCBk
aXNwbGF5Qm94LT53aWR0aCgpIDw8ICIgIiA8PCBkaXNwbGF5Qm94LT5oZWlnaHQoKSA8PCAiXSI7
Ci0gICAgfQorICAgIGlmIChkaXNwbGF5Qm94ICYmICFsYXlvdXRCb3guaXNBbm9ueW1vdXMoKSkK
KyAgICAgICAgc3RyZWFtIDw8ICIgYXQgWyIgPDwgZGlzcGxheUJveC0+bGVmdCgpIDw8ICIgIiA8
PCBkaXNwbGF5Qm94LT50b3AoKSA8PCAiXSBzaXplIFsiIDw8IGRpc3BsYXlCb3gtPndpZHRoKCkg
PDwgIiAiIDw8IGRpc3BsYXlCb3gtPmhlaWdodCgpIDw8ICJdIjsKICAgICBzdHJlYW0gPDwgIiBb
IiA8PCAmbGF5b3V0Qm94IDw8ICJdIjsKIAogICAgIHN0cmVhbS5uZXh0TGluZSgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>368107</attachid>
            <date>2019-04-23 21:02:19 -0700</date>
            <delta_ts>2019-04-24 16:32:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-197198-20190423210218.patch</filename>
            <type>text/plain</type>
            <size>147865</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ0MDk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWYyZDVlM2FkZDNmOGMz
NjgxZDk0NWQ1YmZjYjQzZDVmZTI2MGQ3OS4uZTlhOThmMTE1ODJkMWFjYmQzMWY4NTAzMzc5M2Zl
NDAxYjcwN2JkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3MCBAQAorMjAxOS0wNC0yMyAgWmFs
YW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgorCisgICAgICAgIFtMRkNdW0lGQ10gSW50cm9k
dWNlIERpc3BsYXlSdW4gdG8gdGhlIGRpc3BsYXkgdHJlZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk3MTk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV0lQLgorCisgICAgICAgICogU291cmNlcy50eHQ6
CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IGxheW91dC9Gb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6Y29udGVudEhlaWdodEZvckZvcm1hdHRpbmdDb250ZXh0Um9vdCk6CisgICAgICAg
ICogbGF5b3V0L1ZlcmlmaWNhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OmFy
ZUVzc2VudGlhbGx5RXF1YWwpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpvdXRwdXRNaXNt
YXRjaGluZ1NpbXBsZUxpbmVJbmZvcm1hdGlvbklmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6Y2hlY2tGb3JNYXRjaGluZ05vblRleHRSdW5zKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6Y2hlY2tGb3JNYXRjaGluZ1RleHRSdW5zKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6b3V0cHV0TWlzbWF0Y2hpbmdDb21wbGV4TGluZUluZm9ybWF0aW9uSWZOZWVkZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMYXlvdXRTdGF0ZTo6dmVyaWZ5QW5kT3V0cHV0TWlz
bWF0Y2hpbmdMYXlvdXRUcmVlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6cmVz
b2x2ZUZvclJlbGF0aXZlUG9zaXRpb25JZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgICogbGF5
b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRy
eTo6aW5GbG93Tm9uUmVwbGFjZWRIZWlnaHRBbmRNYXJnaW4pOgorICAgICAgICAqIGxheW91dC9k
aXNwbGF5dHJlZS9EaXNwbGF5Qm94Lmg6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3g6
Omhvcml6b250YWxNYXJnaW4gY29uc3QpOgorICAgICAgICAqIGxheW91dC9kaXNwbGF5dHJlZS9E
aXNwbGF5UnVuLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9y
bWF0dGluZy9JbmxpbmVSdW4uaC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJ1bjo6VGV4
dENvbnRleHQ6OnNldFN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJ1bjo6VGV4
dENvbnRleHQ6OnNldExlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSdW46OlRl
eHRDb250ZXh0OjpzdGFydCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSdW46
OlRleHRDb250ZXh0OjplbmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UnVu
OjpUZXh0Q29udGV4dDo6bGVuZ3RoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6
OlJ1bjo6bG9naWNhbFRvcExlZnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6
UnVuOjpsb2dpY2FsTGVmdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSdW46
OmxvZ2ljYWxSaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSdW46Omxv
Z2ljYWxUb3AgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UnVuOjpsb2dpY2Fs
Qm90dG9tIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJ1bjo6bG9naWNhbFdp
ZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJ1bjo6bG9naWNhbEhlaWdo
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSdW46OnNldExvZ2ljYWxXaWR0
aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSdW46OnNldExvZ2ljYWxMZWZ0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJ1bjo6c2V0TG9naWNhbFJpZ2h0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXk6OlJ1bjo6bW92ZVZlcnRpY2FsbHkpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheTo6UnVuOjptb3ZlSG9yaXpvbnRhbGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXk6OlJ1bjo6ZXhwYW5kVmVydGljYWxseSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
OjpSdW46OmV4cGFuZEhvcml6b250YWxseSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpS
dW46OmV4cGFuc2lvbk9wcG9ydHVuaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJ1
bjo6c2V0VGV4dENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UnVuOjp0ZXh0
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSdW46OnRleHRDb250ZXh0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJ1bjo6UnVuKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXk6OlJ1bjo6VGV4dENvbnRleHQ6OlRleHRDb250ZXh0KToKKyAgICAgICAg
KiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpsYXlvdXQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dDo6Y29tcHV0ZUludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUludHJpbnNpY1dp
ZHRoRm9yRmxvYXRCb3ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVG
b3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUludHJpbnNpY1dpZHRoRm9ySW5saW5lQmxvY2sgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6
aW5pdGlhbGl6ZVZlcnRpY2FsTWFyZ2luRm9ySW5saW5lQ29udGFpbmVyIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVIb3Jp
em9udGFsTWFyZ2luIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9y
bWF0dGluZ0NvbnRleHQ6OmNvbGxlY3RJbmxpbmVDb250ZW50IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVNYXJnaW4gY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjphZGREZXRhY2hpbmdSdWxl
cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OmNyZWF0ZUFuZEFwcGVuZElu
bGluZUl0ZW0pOiBEZWxldGVkLgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lu
bGluZUZvcm1hdHRpbmdDb250ZXh0Lmg6CisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRp
bmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6TGluZTo6cnVucyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6
OmlzRW1wdHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjppc0ZpcnN0
TGluZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6OmF2YWlsYWJsZVdp
ZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZTo6bG9naWNhbExlZnQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjpsb2dpY2FsUmlnaHQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjppbml0KToKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6TGluZTo6Y2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0Ojpp
c1RyaW1tYWJsZUNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjpoYXNU
cmFpbGluZ1doaXRlc3BhY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5l
Ojp0cmFpbGluZ1doaXRlc3BhY2VXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkxpbmU6Omhhc0NvbnRlbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpM
aW5lOjphcHBlbmROb25CcmVha2FibGVTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkxpbmU6OmFwcGVuZFRleHRDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGlu
ZTo6YXBwZW5kTm9uVGV4dENvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5l
OjphZGp1c3RMb2dpY2FsTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6OmFk
anVzdExvZ2ljYWxSaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1h
dHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpsYXlvdXQgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6Y2xvc2VMaW5l
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQ6OkxpbmVMYXlvdXQ6OmNvbW1pdElubGluZUl0ZW1Ub0xpbmUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6Y29t
cHV0ZUZsb2F0UG9zaXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxp
bmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6anVzdGlmeVJ1bnMpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6Y29t
cHV0ZUV4cGFuc2lvbk9wcG9ydHVuaXRpZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6YWxpZ25SdW5zIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZTo6Y29udGVudExvZ2ljYWxMZWZ0IGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZTo6bGFzdFJ1blR5
cGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjpjb250
ZW50TG9naWNhbFJpZ2h0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6TGluZTo6YXBwZW5kQ29udGVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpzcGxpdElubGluZVJ1bklm
TmVlZGVkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OmNyZWF0ZUZpbmFsUnVucyBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0
OjpMaW5lTGF5b3V0Ojpwb3N0UHJvY2Vzc0lubGluZVJ1bnMgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91
dDo6YXBwZW5kQ29udGVudFRvTGluZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpwbGFjZUluRmxv
d1Bvc2l0aW9uZWRDaGlsZHJlbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpydW5XaWR0aCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9y
bWF0dGluZ1N0YXRlLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRp
bmdTdGF0ZTo6aW5saW5lSXRlbXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVG
b3JtYXR0aW5nU3RhdGU6OmFkZElubGluZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpJbmxpbmVGb3JtYXR0aW5nU3RhdGU6OmFkZElubGluZVJ1bik6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdTdGF0ZTo6aW5saW5lQ29udGVudCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdTdGF0ZTo6bGFzdElu
bGluZUl0ZW0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxp
bmVGb3JtYXR0aW5nU3RhdGU6OmFwcGVuZElubGluZVJ1bik6IERlbGV0ZWQuCisgICAgICAgICog
bGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lSXRlbS5oOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpJbmxpbmVJdGVtOjp0eXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6SW5saW5lSXRlbTo6aXNUZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
SW5saW5lSXRlbTo6aXNCb3ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxp
bmVJdGVtOjppc0hhcmRMaW5lQnJlYWsgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpJbmxpbmVJdGVtOjppc0Zsb2F0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
SW5saW5lSXRlbTo6aXNMaW5lQnJlYWsgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpJbmxpbmVJdGVtOjppc0NvbnRhaW5lclN0YXJ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6SW5saW5lSXRlbTo6aXNDb250YWluZXJFbmQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpJbmxpbmVJdGVtOjpJbmxpbmVJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6SW5saW5lSXRlbTo6c2V0V2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpJbmxpbmVJdGVtOjp3aWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Oklu
bGluZUl0ZW06OmFkZERldGFjaGluZ1J1bGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpJbmxpbmVJdGVtOjpkZXRhY2hpbmdSdWxlcyBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUl0ZW06Om5vbkJyZWFrYWJsZVN0YXJ0IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lSXRlbTo6bm9uQnJl
YWthYmxlRW5kIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5s
aW5lSXRlbTo6YWRkTm9uQnJlYWthYmxlU3RhcnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpJbmxpbmVJdGVtOjphZGROb25CcmVha2FibGVFbmQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVJdGVtOjp0ZXh0Q29udGVudCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJyZWFr
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnJlYWtlcjo6TGluZUJyZWFr
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnJlYWtlcjo6YnJlYWtpbmdDb250
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJyZWFrZXI6OndvcmRCcmVha2lu
Z0JlaGF2aW9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJyZWFrZXI6
OnJ1bldpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJyZWFrZXI6
OnRleHRXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUxpbmVC
cmVha2VyOjpJbmxpbmVMaW5lQnJlYWtlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OklubGluZUxpbmVCcmVha2VyOjpuZXh0UnVuKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6SW5saW5lTGluZUJyZWFrZXI6OmlzQXRDb250ZW50RW5kIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lTGluZUJyZWFrZXI6Omxp
bmVCcmVha2luZ0JlaGF2aW9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
SW5saW5lTGluZUJyZWFrZXI6OnJ1bldpZHRoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6SW5saW5lTGluZUJyZWFrZXI6OnRleHRXaWR0aCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUxpbmVCcmVha2VyOjpzcGxpdFJ1
bik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUxpbmVCcmVha2Vy
OjphZGp1c3RTcGxpdFBvc2l0aW9uV2l0aEh5cGhlbmF0aW9uIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnJlYWtlci5oOgorICAg
ICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZVJ1blByb3ZpZGVyLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVSdW5Qcm92aWRl
ci5oOiBSZW1vdmVkLgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZVRl
eHRJdGVtLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OmlzV2hpdGVzcGFj
ZUNoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OmlzU29mdExpbmVCcmVhayk6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Om1vdmVUb05leHROb25XaGl0ZXNwYWNlUG9zaXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0Ojptb3ZlVG9OZXh0QnJlYWthYmxlUG9zaXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVUZXh0SXRlbTo6Y3JlYXRlQW5k
QXBwZW5kVGV4dEl0ZW1zKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lVGV4dEl0
ZW06OklubGluZVRleHRJdGVtKToKKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9J
bmxpbmVUZXh0SXRlbS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5l
Zm9ybWF0dGluZy90ZXh0L1RleHRVdGlsLmguCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Oklu
bGluZVRleHRJdGVtOjpzdGFydCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Oklu
bGluZVRleHRJdGVtOjplbmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxp
bmVUZXh0SXRlbTo6bGVuZ3RoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5s
aW5lVGV4dEl0ZW06OmlzV2hpdGVzcGFjZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OklubGluZVRleHRJdGVtOjppc0NvbGxhcHNlZCBjb25zdCk6CisgICAgICAgICogbGF5b3V0
L2lubGluZWZvcm1hdHRpbmcvdGV4dC9UZXh0VXRpbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OlRleHRVdGlsOjpoeXBoZW5Qb3NpdGlvbkJlZm9yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OlRleHRVdGlsOjp3aWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRl
eHRVdGlsOjpmaXhlZFBpdGNoV2lkdGgpOgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0
aW5nL3RleHQvVGV4dFV0aWwuaDoKKyAgICAgICAgKiBsYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRS
ZXBsYWNlZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlJlcGxhY2VkOjppbnRyaW5z
aWNSYXRpbyBjb25zdCk6CisgICAgICAgICogbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0VHJlZUJ1
aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpvdXRwdXRJbmxpbmVSdW5zKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6b3V0cHV0TGF5b3V0Qm94KToKKyAgICAgICAgKiBw
YWdlL0ZyYW1lVmlld0xheW91dENvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bGF5b3V0
VXNpbmdGb3JtYXR0aW5nQ29udGV4dCk6CisKIDIwMTktMDQtMDkgIFphbGFuIEJ1anRhcyAgPHph
bGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbQXV0b1NpemluZ10gQXZvaWQgbWFraW5nIHRleHQg
cGFyYWdyYXBocyBzY3JvbGwgaG9yaXpvbnRhbGx5IHdoZW4gdGhlcmUgaXMgYSB3aWRlIHRhYmxl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXMudHh0CmluZGV4IDIxOWM4YjcwZGM5ZjU4OWFlZjY4NmUzYjJkYTE0NmFiMzkwZjc4
MDUuLmQwNTFkYmNiOWRkZmM5Y2JiOTVjMDQ3NjE4ZTE2MmYxZGZkYWUzNTcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMu
dHh0CkBAIC0xMzQzLDcgKzEzNDMsNyBAQCBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVG
b3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQuY3BwCiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9J
bmxpbmVGb3JtYXR0aW5nU3RhdGUuY3BwCiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVJ
bnZhbGlkYXRpb24uY3BwCiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnJlYWtl
ci5jcHAKLWxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZVJ1blByb3ZpZGVyLmNwcAorbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lVGV4dEl0ZW0uY3BwCiBsYXlvdXQvaW5saW5lZm9y
bWF0dGluZy90ZXh0L1RleHRVdGlsLmNwcAogbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0QmxvY2tD
b250YWluZXIuY3BwCiBsYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRCb3guY3BwCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggOGEwOTI3
Y2M2NTRkYzYwNTZlOWFkY2MyMTYwYjkyYjYyYWY2ZDk3Yy4uZGE3NGI5OGI5NTJlZjVjNjdhNTIy
YWEyOTQ3ZWE0OTQ5MmUxMTM4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjAwNCwxMCArMjAwNCw5IEBACiAJCTZFRDg3OEM1
MTQ3NDkzRjQwMDRDMzU5NyAvKiBSZW5kZXJUYWJsZUNhcHRpb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFRDg3OEMzMTQ3NDkzRjQwMDRDMzU5NyAv
KiBSZW5kZXJUYWJsZUNhcHRpb24uaCAqLzsgfTsKIAkJNkVEOEMzN0ExODNCRkY4QzAwOUU1M0JE
IC8qIEJveFNoYXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA2RUQ4QzM3ODE4M0JGRjhDMDA5RTUzQkQgLyogQm94U2hhcGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2RUU4QTc3MzEwRjgwM0YzMDA1
QTRBMjQgLyogSlNXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUU4QTc3MTEwRjgwM0YzMDA1QTRBMjQgLyogSlNX
ZWJHTENvbnRleHRBdHRyaWJ1dGVzLmggKi87IH07Ci0JCTZGMjE5RDc3MjE3OEQzNzIwMEJCMDMz
QyAvKiBJbmxpbmVSdW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDZGMjE5RDc0MjE3OEQzNzEwMEJCMDMzQyAvKiBJbmxpbmVSdW4uaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk2RjFDQzFERTIyNUY4QjQ5
MDA3MjBBRDIgLyogSW5saW5lVGV4dEl0ZW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDZGMUNDMUREMjI1RjhCNDIwMDcyMEFEMiAvKiBJbmxpbmVUZXh0
SXRlbS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTZGMjIyQjc2MUFCNTJEOEEwMDk0NjUxQSAvKiBXZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RjIyMkI3
NTFBQjUyRDhBMDA5NDY1MUEgLyogV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2UuY3BwICovOyB9
OwogCQk2RjNFMUY2MjIxMzYxNDIwMDBBNjVBMDggLyogRmxvYXRCb3guaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZGM0UxRjYxMjEzNjE0MTcwMEE2NUEw
OCAvKiBGbG9hdEJveC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07Ci0JCTZGNTIxN0M3MjE3N0Y1QTcwMDY1ODNCQiAvKiBJbmxpbmVSdW5Qcm92aWRlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkY1MjE3QzQy
MTc3RjVBNjAwNjU4M0JCIC8qIElubGluZVJ1blByb3ZpZGVyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNkY3Q0EzQzYyMDhDMjk1NzAwMkYyOUFC
IC8qIExheW91dFN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA2RjdDQTNDNDIwOEMyOTU2MDAyRjI5QUIgLyogTGF5b3V0U3RhdGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2RjdDQTNDQTIwOEMy
QjJFMDAyRjI5QUIgLyogSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZGN0NBM0M4MjA4QzJCMkUwMDJGMjlBQiAv
KiBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTZGOTk1QTE1MUE3MDc1NjIwMEE3MzVGNCAvKiBXZWJHTFN5
bmMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkY5
OTVBMTMxQTcwNzU2MjAwQTczNUY0IC8qIFdlYkdMU3luYy5jcHAgKi87IH07CkBAIC0yMDI4LDYg
KzIwMjcsNyBAQAogCQk2RkE0NDU0RTg5OEYyRkMxNjhCQzM4QzEgLyogSlNCZWZvcmVVbmxvYWRF
dmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjlF
MDRBMjdCRUQyRjgxRjk4RTkwMjJCIC8qIEpTQmVmb3JlVW5sb2FkRXZlbnQuaCAqLzsgfTsKIAkJ
NkZCMTFCNUMyMTc4M0ZEMDAwRTJBNTc0IC8qIFRleHRVdGlsLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RkIxMUI1OTIxNzgzRkNGMDBFMkE1NzQgLyog
VGV4dFV0aWwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk2RkI1RTIxNDIyMUYyNDUzMDAzOTg5Q0YgLyogQ29udGVudENoYW5nZU9ic2VydmVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RkI1RTIxMjIy
MUYyNDQ3MDAzOTg5Q0YgLyogQ29udGVudENoYW5nZU9ic2VydmVyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNkZDRTFBMUEyMjYxOEFCRDAwNEYw
MzQzIC8qIERpc3BsYXlSdW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDZGQ0UxQTE4MjI2MThBQjMwMDRGMDM0MyAvKiBEaXNwbGF5UnVuLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNkZFMTk4MTcyMTc4
Mzk3QzAwNDQ2RjA4IC8qIElubGluZUxpbmVCcmVha2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RkUxOTgxNTIxNzgzOTdDMDA0NDZGMDggLyogSW5s
aW5lTGluZUJyZWFrZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk2RkU3Q0ZBMjIxNzdFRUYyMDA1QjE1NzMgLyogSW5saW5lSXRlbS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkZFN0NGQTAyMTc3RUVG
MTAwNUIxNTczIC8qIElubGluZUl0ZW0uaCAqLzsgfTsKIAkJNkZFN0NGQTQyMTc3RUYxMDAwNUIx
NTczIC8qIExheW91dExpbmVCcmVha0JveC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNkZFN0NGQTMyMTc3RUYxMDAwNUIxNTczIC8qIExheW91dExpbmVC
cmVha0JveC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CkBAIC05MDg1LDE1ICs5MDg1LDE0IEBACiAJCTZFRThBNzcwMTBGODAzRjMwMDVBNEEyNCAvKiBK
U1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNkVFOEE3NzExMEY4MDNGMzAwNUE0QTI0IC8qIEpTV2ViR0xDb250ZXh0QXR0
cmlidXRlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dlYkdMQ29udGV4
dEF0dHJpYnV0ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkYwODMwREYyMEI0
Njk1MTAwOEE5NDVCIC8qIEJsb2NrRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk2RjIxOUQ3NDIxNzhEMzcxMDBCQjAzM0MgLyogSW5saW5l
UnVuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElubGluZVJ1bi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RjFDQzFEQzIyNUY4QjQxMDA3MjBBRDIgLyogSW5s
aW5lVGV4dEl0ZW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5saW5lVGV4dEl0ZW0uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RjFDQzFERDIyNUY4QjQyMDA3MjBBRDIgLyog
SW5saW5lVGV4dEl0ZW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5saW5lVGV4dEl0ZW0uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkYyMjJCNzQxQUI1MkQ2NDAwOTQ2NTFBIC8qIFdlYkdM
VmVydGV4QXJyYXlPYmplY3RCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdMVmVydGV4QXJyYXlP
YmplY3RCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGMjIyQjc1MUFCNTJE
OEEwMDk0NjUxQSAvKiBXZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGMjVCMjAwMjIwQTg1QUIwMDAwMDExQiAv
KiBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSW5saW5lRm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNkYzNUVGQUYyMTg3Q0JENTAwNDRFMEY0IC8qIElubGluZUZvcm1hdHRp
bmdDb250ZXh0R2VvbWV0cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSW5saW5lRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTZGM0UxRjVGMjEzNjE0MTcwMEE2NUEwOCAvKiBGbG9hdEJveC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBGbG9hdEJveC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTZGM0UxRjYxMjEzNjE0MTcwMEE2NUEwOCAvKiBGbG9hdEJveC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGbG9hdEJveC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2RjUyMTdDNDIxNzdG
NUE2MDA2NTgzQkIgLyogSW5saW5lUnVuUHJvdmlkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW5saW5lUnVuUHJvdmlkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJNkY1MjE3QzYyMTc3RjVBNjAwNjU4M0JCIC8qIElubGluZVJ1blByb3ZpZGVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElubGluZVJ1blByb3ZpZGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkY3MzkxOEMyMTA2Q0VERDAwNkFGMjYy
IC8qIExheW91dFVuaXRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheW91dFVuaXRzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGN0NBM0M0MjA4QzI5NTYwMDJGMjlBQiAvKiBMYXlvdXRT
dGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBMYXlvdXRTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk2RjdDQTNDNTIwOEMyOTU2MDAyRjI5QUIgLyogTGF5b3V0U3RhdGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gTGF5b3V0U3RhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtOTEzMCw2ICs5MTI5LDcgQEAKIAkJNkZCMTFCNUIyMTc4M0ZDRjAwRTJBNTc0IC8q
IFRleHRVdGlsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRleHRV
dGlsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkZCNUUyMTIyMjFGMjQ0NzAw
Mzk4OUNGIC8qIENvbnRlbnRDaGFuZ2VPYnNlcnZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb250ZW50
Q2hhbmdlT2JzZXJ2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkZCQjg2MDUy
MEI0NjRCNjAwREFEOTM4IC8qIEZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTZGQ0UxQTE4MjI2MThBQjMwMDRGMDM0MyAvKiBEaXNwbGF5UnVuLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IERpc3BsYXlSdW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNkZFMTk4MTMyMTc4Mzk3QjAwNDQ2RjA4IC8qIElubGluZUxpbmVCcmVha2VyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElubGluZUxpbmVCcmVha2VyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkZFMTk4MTUyMTc4Mzk3QzAwNDQ2RjA4IC8q
IElubGluZUxpbmVCcmVha2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElu
bGluZUxpbmVCcmVha2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGRTdBQTI2
MjFDMzdCNjMwMDI5NkRDRCAvKiBNYXJnaW5UeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXJnaW5U
eXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTYzMzgsOSArMTYzMzgsOCBA
QAogCQkJCTZGRTdDRkEwMjE3N0VFRjEwMDVCMTU3MyAvKiBJbmxpbmVJdGVtLmggKi8sCiAJCQkJ
NkZFMTk4MTMyMTc4Mzk3QjAwNDQ2RjA4IC8qIElubGluZUxpbmVCcmVha2VyLmNwcCAqLywKIAkJ
CQk2RkUxOTgxNTIxNzgzOTdDMDA0NDZGMDggLyogSW5saW5lTGluZUJyZWFrZXIuaCAqLywKLQkJ
CQk2RjIxOUQ3NDIxNzhEMzcxMDBCQjAzM0MgLyogSW5saW5lUnVuLmggKi8sCi0JCQkJNkY1MjE3
QzYyMTc3RjVBNjAwNjU4M0JCIC8qIElubGluZVJ1blByb3ZpZGVyLmNwcCAqLywKLQkJCQk2RjUy
MTdDNDIxNzdGNUE2MDA2NTgzQkIgLyogSW5saW5lUnVuUHJvdmlkZXIuaCAqLywKKwkJCQk2RjFD
QzFEQzIyNUY4QjQxMDA3MjBBRDIgLyogSW5saW5lVGV4dEl0ZW0uY3BwICovLAorCQkJCTZGMUND
MUREMjI1RjhCNDIwMDcyMEFEMiAvKiBJbmxpbmVUZXh0SXRlbS5oICovLAogCQkJKTsKIAkJCXBh
dGggPSBpbmxpbmVmb3JtYXR0aW5nOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTE2
MzUwLDYgKzE2MzQ5LDcgQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCTExOTlGQTVBMjA4RTNDN0Yw
MDIzNThDQyAvKiBEaXNwbGF5Qm94LmNwcCAqLywKIAkJCQkxMTk5RkE1OTIwOEUzQzdGMDAyMzU4
Q0MgLyogRGlzcGxheUJveC5oICovLAorCQkJCTZGQ0UxQTE4MjI2MThBQjMwMDRGMDM0MyAvKiBE
aXNwbGF5UnVuLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IGRpc3BsYXl0cmVlOwogCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTI4NzYyLDYgKzI4NzYyLDcgQEAKIAkJCQkyRDI5RUNDQTE5
MkYxRjFEMDA5ODRCNzggLyogRGlzcGxheVJlZnJlc2hNb25pdG9ySU9TLmggaW4gSGVhZGVycyAq
LywKIAkJCQkyREU3MDAyMzE5MkZFODJBMDBCMDk3NUMgLyogRGlzcGxheVJlZnJlc2hNb25pdG9y
TWFjLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDI5RUNDODE5MkVDQzgzMDA5ODRCNzggLyogRGlz
cGxheVJlZnJlc2hNb25pdG9yTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNkZDRTFBMUEy
MjYxOEFCRDAwNEYwMzQzIC8qIERpc3BsYXlSdW4uaCBpbiBIZWFkZXJzICovLAogCQkJCUZEMzE2
MDkxMTJCMDI2RjcwMEMxQTM1OSAvKiBEaXN0YW5jZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODQ3
MzBENzcxMjQ4RjBCMzAwRDNBOUM5IC8qIERpc3RhbnRMaWdodFNvdXJjZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQjJGMzRGRTYwRTgyRjgxNDAwRjYyN0NEIC8qIEROUy5oIGluIEhlYWRlcnMgKi8s
CkBAIC0yOTM5MCwxMSArMjkzOTEsMTAgQEAKIAkJCQk2RkU3Q0ZBMjIxNzdFRUYyMDA1QjE1NzMg
LyogSW5saW5lSXRlbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFNzg5MTYxMTIwRDYwODAwNjBF
Q0U1IC8qIElubGluZUl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk2RkUxOTgxNzIxNzgz
OTdDMDA0NDZGMDggLyogSW5saW5lTGluZUJyZWFrZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTZG
MjE5RDc3MjE3OEQzNzIwMEJCMDMzQyAvKiBJbmxpbmVSdW4uaCBpbiBIZWFkZXJzICovLAotCQkJ
CTZGNTIxN0M3MjE3N0Y1QTcwMDY1ODNCQiAvKiBJbmxpbmVSdW5Qcm92aWRlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQUE0QzNBNzcwQjJCMTY3OTAwMjMzNEEyIC8qIElubGluZVN0eWxlU2hlZXRP
d25lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFQTQ4NUEwOTdEOTMwMjAwOTRDOUU0IC8qIElu
bGluZVRleHRCb3guaCBpbiBIZWFkZXJzICovLAogCQkJCTFDMDEwNzAxMTkyNTk0REYwMDhBNDIw
MSAvKiBJbmxpbmVUZXh0Qm94U3R5bGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTZGMUNDMURFMjI1
RjhCNDkwMDcyMEFEMiAvKiBJbmxpbmVUZXh0SXRlbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEw
QTU4RTUxQkFBNDBCMTAwQzE5MjgyIC8qIEluUHJvY2Vzc0lEQlNlcnZlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMkVCNzY3NTcxREExOUJERjAwM0UyM0I1IC8qIElucHV0RXZlbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUU1MkVGREY0MjExMjg3NUEwMEFEMjgyQSAvKiBJbnB1dE1vZGUuaCBpbiBI
ZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdD
b250ZXh0R2VvbWV0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdDb250
ZXh0R2VvbWV0cnkuY3BwCmluZGV4IDk2N2NmZDQ5OThiNmExYTA4OTdkMDYyZmYwZGJhYjVlZDVh
MTczZTcuLjE4OTYzYzM1NjZkMmMxZDUzZGRlNzA4MDU2NmM3YWNlOGIzYTg5YzYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAK
QEAgLTExMiw4ICsxMTIsOCBAQCBzdGF0aWMgTGF5b3V0VW5pdCBjb250ZW50SGVpZ2h0Rm9yRm9y
bWF0dGluZ0NvbnRleHRSb290KGNvbnN0IExheW91dFN0YXRlJiBsYXlvdQogICAgICAgICAvLyBU
aGlzIGlzIHRlbXAgYW5kIHdpbGwgYmUgcmVwbGFjZWQgYnkgdGhlIGNvcnJlY3QgZGlzcGxheSBi
b3ggb25jZSBpbmxpbmUgcnVucyBtb3ZlIG92ZXIgdG8gdGhlIGRpc3BsYXkgdHJlZS4KICAgICAg
ICAgYXV0byYgaW5saW5lUnVucyA9IGRvd25jYXN0PElubGluZUZvcm1hdHRpbmdTdGF0ZT4obGF5
b3V0U3RhdGUuZXN0YWJsaXNoZWRGb3JtYXR0aW5nU3RhdGUobGF5b3V0Qm94KSkuaW5saW5lUnVu
cygpOwogICAgICAgICBpZiAoIWlubGluZVJ1bnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICB0
b3AgPSBpbmxpbmVSdW5zWzBdLmxvZ2ljYWxUb3AoKTsKLSAgICAgICAgICAgIGJvdHRvbSA9ICBp
bmxpbmVSdW5zLmxhc3QoKS5sb2dpY2FsQm90dG9tKCk7CisgICAgICAgICAgICB0b3AgPSBpbmxp
bmVSdW5zWzBdLT5sb2dpY2FsVG9wKCk7CisgICAgICAgICAgICBib3R0b20gPSAgaW5saW5lUnVu
cy5sYXN0KCktPmxvZ2ljYWxCb3R0b20oKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoZm9y
bWF0dGluZ1Jvb3RDb250YWluZXIuZXN0YWJsaXNoZXNCbG9ja0Zvcm1hdHRpbmdDb250ZXh0KCkg
fHwgbGF5b3V0Qm94LmlzRG9jdW1lbnRCb3goKSkgewogICAgICAgICBpZiAoZm9ybWF0dGluZ1Jv
b3RDb250YWluZXIuaGFzSW5GbG93Q2hpbGQoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L1ZlcmlmaWNhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvVmVyaWZp
Y2F0aW9uLmNwcAppbmRleCAyZTc3YzM5ZTkyMTQ0OTQyZWYyOWU0MGU0Yzc0MzZlNTExMjAwYmMy
Li5mMDZlM2RlYmYzNzRjYzAzMTFiZDNkNjQ2ODczMGZiMGMyMjUxZjRlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvVmVyaWZpY2F0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvVmVyaWZpY2F0aW9uLmNwcApAQCAtNDYsNyArNDYsNyBAQCBzdGF0aWMgYm9vbCBh
cmVFc3NlbnRpYWxseUVxdWFsKGZsb2F0IGEsIExheW91dFVuaXQgYikKICAgICBpZiAoYSA9PSBi
LnRvRmxvYXQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICByZXR1cm4gZmFicyhhIC0g
Yi50b0Zsb2F0KCkpIDw9IDggKiBMYXlvdXRVbml0OjplcHNpbG9uKCk7CisgICAgcmV0dXJuIGZh
YnMoYSAtIGIudG9GbG9hdCgpKSA8PSAxMCAqIExheW91dFVuaXQ6OmVwc2lsb24oKTsKIH0KIAog
c3RhdGljIGJvb2wgb3V0cHV0TWlzbWF0Y2hpbmdTaW1wbGVMaW5lSW5mb3JtYXRpb25JZk5lZWRl
ZChUZXh0U3RyZWFtJiBzdHJlYW0sIGNvbnN0IExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgY29u
c3QgUmVuZGVyQmxvY2tGbG93JiBibG9ja0Zsb3csIGNvbnN0IENvbnRhaW5lciYgaW5saW5lRm9y
bWF0dGluZ1Jvb3QpCkBAIC03MiwzMyArNzIsMzMgQEAgc3RhdGljIGJvb2wgb3V0cHV0TWlzbWF0
Y2hpbmdTaW1wbGVMaW5lSW5mb3JtYXRpb25JZk5lZWRlZChUZXh0U3RyZWFtJiBzdHJlYW0sIGMK
ICAgICAgICAgYXV0byYgc2ltcGxlUnVuID0gbGluZUxheW91dERhdGEtPnJ1bkF0KGkpOwogICAg
ICAgICBhdXRvJiBpbmxpbmVSdW4gPSBpbmxpbmVSdW5MaXN0W2ldOwogCi0gICAgICAgIGF1dG8g
bWF0Y2hpbmdSdW5zID0gYXJlRXNzZW50aWFsbHlFcXVhbChzaW1wbGVSdW4ubG9naWNhbExlZnQs
IGlubGluZVJ1bi5sb2dpY2FsTGVmdCgpKSAmJiBhcmVFc3NlbnRpYWxseUVxdWFsKHNpbXBsZVJ1
bi5sb2dpY2FsUmlnaHQsIGlubGluZVJ1bi5sb2dpY2FsUmlnaHQoKSk7CisgICAgICAgIGF1dG8g
bWF0Y2hpbmdSdW5zID0gYXJlRXNzZW50aWFsbHlFcXVhbChzaW1wbGVSdW4ubG9naWNhbExlZnQs
IGlubGluZVJ1bi0+bG9naWNhbExlZnQoKSkgJiYgYXJlRXNzZW50aWFsbHlFcXVhbChzaW1wbGVS
dW4ubG9naWNhbFJpZ2h0LCBpbmxpbmVSdW4tPmxvZ2ljYWxSaWdodCgpKTsKICAgICAgICAgaWYg
KG1hdGNoaW5nUnVucykKLSAgICAgICAgICAgIG1hdGNoaW5nUnVucyA9IChzaW1wbGVSdW4uc3Rh
cnQgPT0gaW5saW5lUnVuLnRleHRDb250ZXh0KCktPnN0YXJ0KCkgJiYgc2ltcGxlUnVuLmVuZCA9
PSAoaW5saW5lUnVuLnRleHRDb250ZXh0KCktPnN0YXJ0KCkgKyBpbmxpbmVSdW4udGV4dENvbnRl
eHQoKS0+bGVuZ3RoKCkpKTsKKyAgICAgICAgICAgIG1hdGNoaW5nUnVucyA9IHNpbXBsZVJ1bi5z
dGFydCA9PSBpbmxpbmVSdW4tPnRleHRDb250ZXh0KCktPnN0YXJ0KCkgJiYgc2ltcGxlUnVuLmVu
ZCA9PSBpbmxpbmVSdW4tPnRleHRDb250ZXh0KCktPmVuZCgpOwogICAgICAgICBpZiAobWF0Y2hp
bmdSdW5zKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgc3RyZWFtIDw8ICJNaXNt
YXRjaGluZzogc2ltcGxlIHJ1bigiIDw8IHNpbXBsZVJ1bi5zdGFydCA8PCAiLCAiIDw8IHNpbXBs
ZVJ1bi5lbmQgPDwgIikgKCIgPDwgc2ltcGxlUnVuLmxvZ2ljYWxMZWZ0IDw8ICIsICIgPDwgc2lt
cGxlUnVuLmxvZ2ljYWxSaWdodCA8PCAiKSBsYXlvdXQgcnVuKCIgPDwgaW5saW5lUnVuLnRleHRD
b250ZXh0KCktPnN0YXJ0KCkgPDwgIiwgIiA8PCBpbmxpbmVSdW4udGV4dENvbnRleHQoKS0+c3Rh
cnQoKSArIGlubGluZVJ1bi50ZXh0Q29udGV4dCgpLT5sZW5ndGgoKSA8PCAiKSAoIiA8PCBpbmxp
bmVSdW4ubG9naWNhbExlZnQoKSA8PCAiLCAiIDw8IGlubGluZVJ1bi5sb2dpY2FsUmlnaHQoKSA8
PCAiKSI7CisgICAgICAgIHN0cmVhbSA8PCAiTWlzbWF0Y2hpbmc6IHNpbXBsZSBydW4oIiA8PCBz
aW1wbGVSdW4uc3RhcnQgPDwgIiwgIiA8PCBzaW1wbGVSdW4uZW5kIDw8ICIpICgiIDw8IHNpbXBs
ZVJ1bi5sb2dpY2FsTGVmdCA8PCAiLCAiIDw8IHNpbXBsZVJ1bi5sb2dpY2FsUmlnaHQgPDwgIikg
bGF5b3V0IHJ1bigiIDw8IGlubGluZVJ1bi0+dGV4dENvbnRleHQoKS0+c3RhcnQoKSA8PCAiLCAi
IDw8IGlubGluZVJ1bi0+dGV4dENvbnRleHQoKS0+ZW5kKCkgPDwgIikgKCIgPDwgaW5saW5lUnVu
LT5sb2dpY2FsTGVmdCgpIDw8ICIsICIgPDwgaW5saW5lUnVuLT5sb2dpY2FsUmlnaHQoKSA8PCAi
KSI7CiAgICAgICAgIHN0cmVhbS5uZXh0TGluZSgpOwogICAgICAgICBtaXNtYXRjaGVkID0gdHJ1
ZTsKICAgICB9CiAgICAgcmV0dXJuIG1pc21hdGNoZWQ7CiB9CiAKLXN0YXRpYyBib29sIGNoZWNr
Rm9yTWF0Y2hpbmdOb25UZXh0UnVucyhjb25zdCBJbmxpbmVSdW4mIGlubGluZVJ1biwgY29uc3Qg
V2ViQ29yZTo6SW5saW5lQm94JiBpbmxpbmVCb3gpCitzdGF0aWMgYm9vbCBjaGVja0Zvck1hdGNo
aW5nTm9uVGV4dFJ1bnMoY29uc3QgRGlzcGxheTo6UnVuJiBpbmxpbmVSdW4sIGNvbnN0IFdlYkNv
cmU6OklubGluZUJveCYgaW5saW5lQm94KQogewogICAgIHJldHVybiBhcmVFc3NlbnRpYWxseUVx
dWFsKGlubGluZUJveC5sb2dpY2FsTGVmdCgpLCBpbmxpbmVSdW4ubG9naWNhbExlZnQoKSkKICAg
ICAgICAgJiYgYXJlRXNzZW50aWFsbHlFcXVhbChpbmxpbmVCb3gubG9naWNhbFJpZ2h0KCksIGlu
bGluZVJ1bi5sb2dpY2FsUmlnaHQoKSkKICAgICAgICAgJiYgYXJlRXNzZW50aWFsbHlFcXVhbChp
bmxpbmVCb3gubG9naWNhbEhlaWdodCgpLCBpbmxpbmVSdW4ubG9naWNhbEhlaWdodCgpKTsKIH0K
IAotc3RhdGljIGJvb2wgY2hlY2tGb3JNYXRjaGluZ1RleHRSdW5zKGNvbnN0IElubGluZVJ1biYg
aW5saW5lUnVuLCBmbG9hdCBsb2dpY2FsTGVmdCwgZmxvYXQgbG9naWNhbFJpZ2h0LCB1bnNpZ25l
ZCBzdGFydCwgdW5zaWduZWQgZW5kLCBmbG9hdCBsb2dpY2FsSGVpZ2h0KQorc3RhdGljIGJvb2wg
Y2hlY2tGb3JNYXRjaGluZ1RleHRSdW5zKGNvbnN0IERpc3BsYXk6OlJ1biYgaW5saW5lUnVuLCBj
b25zdCBJbmxpbmVUZXh0Qm94JiBpbmxpbmVUZXh0Qm94KQogewotICAgIHJldHVybiBhcmVFc3Nl
bnRpYWxseUVxdWFsKGxvZ2ljYWxMZWZ0LCBpbmxpbmVSdW4ubG9naWNhbExlZnQoKSkKLSAgICAg
ICAgJiYgYXJlRXNzZW50aWFsbHlFcXVhbChsb2dpY2FsUmlnaHQsIGlubGluZVJ1bi5sb2dpY2Fs
UmlnaHQoKSkKLSAgICAgICAgJiYgc3RhcnQgPT0gaW5saW5lUnVuLnRleHRDb250ZXh0KCktPnN0
YXJ0KCkKLSAgICAgICAgJiYgKGVuZCA9PSAoaW5saW5lUnVuLnRleHRDb250ZXh0KCktPnN0YXJ0
KCkgKyBpbmxpbmVSdW4udGV4dENvbnRleHQoKS0+bGVuZ3RoKCkpKQotICAgICAgICAmJiBhcmVF
c3NlbnRpYWxseUVxdWFsKGxvZ2ljYWxIZWlnaHQsIGlubGluZVJ1bi5sb2dpY2FsSGVpZ2h0KCkp
OworICAgIHJldHVybiBhcmVFc3NlbnRpYWxseUVxdWFsKGlubGluZVRleHRCb3gubG9naWNhbExl
ZnQoKSwgaW5saW5lUnVuLmxvZ2ljYWxMZWZ0KCkpCisgICAgICAgICYmIGFyZUVzc2VudGlhbGx5
RXF1YWwoaW5saW5lVGV4dEJveC5sb2dpY2FsUmlnaHQoKSwgaW5saW5lUnVuLmxvZ2ljYWxSaWdo
dCgpKQorICAgICAgICAmJiBpbmxpbmVUZXh0Qm94LnN0YXJ0KCkgPT0gaW5saW5lUnVuLnRleHRD
b250ZXh0KCktPnN0YXJ0KCkKKyAgICAgICAgJiYgKGlubGluZVRleHRCb3guZW5kKCkgKyAxKSA9
PSBpbmxpbmVSdW4udGV4dENvbnRleHQoKS0+ZW5kKCkKKyAgICAgICAgJiYgYXJlRXNzZW50aWFs
bHlFcXVhbChpbmxpbmVUZXh0Qm94LmxvZ2ljYWxIZWlnaHQoKSwgaW5saW5lUnVuLmxvZ2ljYWxI
ZWlnaHQoKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGNvbGxlY3RGbG93Qm94U3VidHJlZShjb25zdCBJ
bmxpbmVGbG93Qm94JiBmbG93Ym94LCBWZWN0b3I8V2ViQ29yZTo6SW5saW5lQm94Kj4mIGlubGlu
ZUJveGVzKQpAQCAtMTI2LDE5ICsxMjYsNiBAQCBzdGF0aWMgdm9pZCBjb2xsZWN0SW5saW5lQm94
ZXMoY29uc3QgUmVuZGVyQmxvY2tGbG93JiByb290LCBWZWN0b3I8V2ViQ29yZTo6SW5saQogICAg
IH0KIH0KIAotc3RhdGljIExheW91dFVuaXQgcmVzb2x2ZUZvclJlbGF0aXZlUG9zaXRpb25JZk5l
ZWRlZChjb25zdCBJbmxpbmVUZXh0Qm94JiBpbmxpbmVUZXh0Qm94KQotewotICAgIExheW91dFVu
aXQgeE9mZnNldDsKLSAgICBhdXRvKiBwYXJlbnQgPSBpbmxpbmVUZXh0Qm94LnBhcmVudCgpOwot
ICAgIHdoaWxlIChpczxJbmxpbmVGbG93Qm94PihwYXJlbnQpKSB7Ci0gICAgICAgIGF1dG8mIHJl
bmRlcmVyID0gcGFyZW50LT5yZW5kZXJlcigpOwotICAgICAgICBpZiAocmVuZGVyZXIuaXNJbkZs
b3dQb3NpdGlvbmVkKCkpCi0gICAgICAgICAgICB4T2Zmc2V0ID0gcmVuZGVyZXIub2Zmc2V0Rm9y
SW5GbG93UG9zaXRpb24oKS53aWR0aCgpOwotICAgICAgICBwYXJlbnQgPSBwYXJlbnQtPnBhcmVu
dCgpOwotICAgIH0KLSAgICByZXR1cm4geE9mZnNldDsKLX0KLQogc3RhdGljIGJvb2wgb3V0cHV0
TWlzbWF0Y2hpbmdDb21wbGV4TGluZUluZm9ybWF0aW9uSWZOZWVkZWQoVGV4dFN0cmVhbSYgc3Ry
ZWFtLCBjb25zdCBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IFJlbmRlckJsb2NrRmxv
dyYgYmxvY2tGbG93LCBjb25zdCBDb250YWluZXImIGlubGluZUZvcm1hdHRpbmdSb290KQogewog
ICAgIGF1dG8mIGlubGluZUZvcm1hdHRpbmdTdGF0ZSA9IGxheW91dFN0YXRlLmVzdGFibGlzaGVk
Rm9ybWF0dGluZ1N0YXRlKGlubGluZUZvcm1hdHRpbmdSb290KTsKQEAgLTE1OCw1NCArMTQ1LDEw
IEBAIHN0YXRpYyBib29sIG91dHB1dE1pc21hdGNoaW5nQ29tcGxleExpbmVJbmZvcm1hdGlvbklm
TmVlZGVkKFRleHRTdHJlYW0mIHN0cmVhbSwKICAgICB9CiAKICAgICBmb3IgKHVuc2lnbmVkIGlu
bGluZUJveEluZGV4ID0gMDsgaW5saW5lQm94SW5kZXggPCBpbmxpbmVCb3hlcy5zaXplKCkgJiYg
cnVuSW5kZXggPCBpbmxpbmVSdW5MaXN0LnNpemUoKTsgKytpbmxpbmVCb3hJbmRleCkgeworICAg
ICAgICBhdXRvJiBpbmxpbmVSdW4gPSBpbmxpbmVSdW5MaXN0W3J1bkluZGV4XTsKICAgICAgICAg
YXV0byogaW5saW5lQm94ID0gaW5saW5lQm94ZXNbaW5saW5lQm94SW5kZXhdOwogICAgICAgICBh
dXRvKiBpbmxpbmVUZXh0Qm94ID0gaXM8SW5saW5lVGV4dEJveD4oaW5saW5lQm94KSA/IGRvd25j
YXN0PElubGluZVRleHRCb3g+KGlubGluZUJveCkgOiBudWxscHRyOwotCi0gICAgICAgIGF1dG8m
IGlubGluZVJ1biA9IGlubGluZVJ1bkxpc3RbcnVuSW5kZXhdOwotICAgICAgICBhdXRvIG1hdGNo
aW5nUnVucyA9IGZhbHNlOwotICAgICAgICBpZiAoaW5saW5lVGV4dEJveCkgewotICAgICAgICAg
ICAgYXV0byB4T2Zmc2V0ID0gcmVzb2x2ZUZvclJlbGF0aXZlUG9zaXRpb25JZk5lZWRlZCgqaW5s
aW5lVGV4dEJveCk7Ci0gICAgICAgICAgICBtYXRjaGluZ1J1bnMgPSBjaGVja0Zvck1hdGNoaW5n
VGV4dFJ1bnMoaW5saW5lUnVuLCBpbmxpbmVUZXh0Qm94LT5sb2dpY2FsTGVmdCgpICsgeE9mZnNl
dCwKLSAgICAgICAgICAgICAgICBpbmxpbmVUZXh0Qm94LT5sb2dpY2FsUmlnaHQoKSArIHhPZmZz
ZXQsCi0gICAgICAgICAgICAgICAgaW5saW5lVGV4dEJveC0+c3RhcnQoKSwKLSAgICAgICAgICAg
ICAgICBpbmxpbmVUZXh0Qm94LT5lbmQoKSArIDEsCi0gICAgICAgICAgICAgICAgaW5saW5lVGV4
dEJveC0+bG9naWNhbEhlaWdodCgpKTsKLQotICAgICAgICAgICAgLy8gPHNwYW4+Zm9vYmFyPC9z
cGFuPmZvb2JhciBnZW5lcmF0ZXMgMiBpbmxpbmUgdGV4dCBib3hlcyB3aGlsZSB3ZSBvbmx5IGdl
bmVyYXRlIG9uZSBpbmxpbmUgcnVuLgotICAgICAgICAgICAgLy8gYWxzbyA8ZGl2PmZvbzxpbWcg
c3R5bGU9ImZsb2F0OiBsZWZ0OyI+YmFyPC9kaXY+IHRvby4KLSAgICAgICAgICAgIGF1dG8gaW5s
aW5lUnVuRW5kID0gaW5saW5lUnVuLnRleHRDb250ZXh0KCktPnN0YXJ0KCkgKyBpbmxpbmVSdW4u
dGV4dENvbnRleHQoKS0+bGVuZ3RoKCk7Ci0gICAgICAgICAgICBhdXRvIHRleHRSdW5NaWdodEJl
RXh0ZW5kZWQgPSAhbWF0Y2hpbmdSdW5zICYmIGlubGluZVRleHRCb3gtPmVuZCgpIDwgaW5saW5l
UnVuRW5kICYmIGlubGluZUJveEluZGV4IDwgaW5saW5lQm94ZXMuc2l6ZSgpIC0gMTsKLQotICAg
ICAgICAgICAgaWYgKHRleHRSdW5NaWdodEJlRXh0ZW5kZWQpIHsKLSAgICAgICAgICAgICAgICBh
dXRvIGxvZ2ljYWxMZWZ0ID0gaW5saW5lVGV4dEJveC0+bG9naWNhbExlZnQoKSArIHhPZmZzZXQ7
Ci0gICAgICAgICAgICAgICAgYXV0byBsb2dpY2FsUmlnaHQgPSBpbmxpbmVUZXh0Qm94LT5sb2dp
Y2FsUmlnaHQoKSArIHhPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgYXV0byBzdGFydCA9IGlubGlu
ZVRleHRCb3gtPnN0YXJ0KCk7Ci0gICAgICAgICAgICAgICAgYXV0byBlbmQgPSBpbmxpbmVUZXh0
Qm94LT5lbmQoKSArIDE7Ci0gICAgICAgICAgICAgICAgYXV0byBpbmRleCA9ICsraW5saW5lQm94
SW5kZXg7Ci0gICAgICAgICAgICAgICAgZm9yICg7IGluZGV4IDwgaW5saW5lQm94ZXMuc2l6ZSgp
OyArK2luZGV4KSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8qIGlubGluZUJveCA9IGlubGlu
ZUJveGVzW2luZGV4XTsKLSAgICAgICAgICAgICAgICAgICAgYXV0byogaW5saW5lVGV4dEJveCA9
IGlzPElubGluZVRleHRCb3g+KGlubGluZUJveCkgPyBkb3duY2FzdDxJbmxpbmVUZXh0Qm94Pihp
bmxpbmVCb3gpIDogbnVsbHB0cjsKLSAgICAgICAgICAgICAgICAgICAgLy8gQ2FuJ3QgbWl4IGRp
ZmZlcmVudCBpbmxpbmUgYm94ZXMuCi0gICAgICAgICAgICAgICAgICAgIGlmICghaW5saW5lVGV4
dEJveCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAg
ICAgIGF1dG8geE9mZnNldCA9IHJlc29sdmVGb3JSZWxhdGl2ZVBvc2l0aW9uSWZOZWVkZWQoKmlu
bGluZVRleHRCb3gpOwotICAgICAgICAgICAgICAgICAgICBsb2dpY2FsUmlnaHQgPSBpbmxpbmVU
ZXh0Qm94LT5sb2dpY2FsUmlnaHQoKSArIHhPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgICAgIGVu
ZCArPSAoaW5saW5lVGV4dEJveC0+ZW5kKCkgKyAxKTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KGNoZWNrRm9yTWF0Y2hpbmdUZXh0UnVucyhpbmxpbmVSdW4sIGxvZ2ljYWxMZWZ0LCBsb2dpY2Fs
UmlnaHQsIHN0YXJ0LCBlbmQsIGlubGluZVRleHRCb3gtPmxvZ2ljYWxIZWlnaHQoKSkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIG1hdGNoaW5nUnVucyA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpbmxpbmVCb3hJbmRleCA9IGluZGV4OwotICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAv
LyBXZW50IHRvbyBmYXI/Ci0gICAgICAgICAgICAgICAgICAgIGlmIChlbmQgPj0gaW5saW5lUnVu
RW5kKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1hdGNoaW5nUnVucyA9
IGNoZWNrRm9yTWF0Y2hpbmdOb25UZXh0UnVucyhpbmxpbmVSdW4sICppbmxpbmVCb3gpOwotCisg
ICAgICAgIGJvb2wgbWF0Y2hpbmdSdW5zID0gaW5saW5lVGV4dEJveCA/IGNoZWNrRm9yTWF0Y2hp
bmdUZXh0UnVucygqaW5saW5lUnVuLCAqaW5saW5lVGV4dEJveCkgOiBtYXRjaGluZ1J1bnMgPSBj
aGVja0Zvck1hdGNoaW5nTm9uVGV4dFJ1bnMoKmlubGluZVJ1biwgKmlubGluZUJveCk7CiAKICAg
ICAgICAgaWYgKCFtYXRjaGluZ1J1bnMpIHsKICAgICAgICAgICAgIHN0cmVhbSA8PCAiTWlzbWF0
Y2hpbmc6IHJ1biAiOwpAQCAtMjE0LDEwICsxNTcsMTAgQEAgc3RhdGljIGJvb2wgb3V0cHV0TWlz
bWF0Y2hpbmdDb21wbGV4TGluZUluZm9ybWF0aW9uSWZOZWVkZWQoVGV4dFN0cmVhbSYgc3RyZWFt
LAogICAgICAgICAgICAgICAgIHN0cmVhbSA8PCAiKCIgPDwgaW5saW5lVGV4dEJveC0+c3RhcnQo
KSA8PCAiLCAiIDw8IGlubGluZVRleHRCb3gtPmVuZCgpICsgMSA8PCAiKSI7CiAgICAgICAgICAg
ICBzdHJlYW0gPDwgIiAoIiA8PCBpbmxpbmVCb3gtPmxvZ2ljYWxMZWZ0KCkgPDwgIiwgIiA8PCBp
bmxpbmVCb3gtPmxvZ2ljYWxSaWdodCgpIDw8ICIpICgiIDw8IGlubGluZUJveC0+bG9naWNhbFdp
ZHRoKCkgPDwgIngiIDw8IGlubGluZUJveC0+bG9naWNhbEhlaWdodCgpIDw8ICIpIjsKIAotICAg
ICAgICAgICAgc3RyZWFtIDw8ICJpbmxpbmUgcnVuICI7Ci0gICAgICAgICAgICBpZiAoaW5saW5l
UnVuLnRleHRDb250ZXh0KCkpCi0gICAgICAgICAgICAgICAgc3RyZWFtIDw8ICIoIiA8PCBpbmxp
bmVSdW4udGV4dENvbnRleHQoKS0+c3RhcnQoKSA8PCAiLCAiIDw8IGlubGluZVJ1bi50ZXh0Q29u
dGV4dCgpLT5zdGFydCgpICsgaW5saW5lUnVuLnRleHRDb250ZXh0KCktPmxlbmd0aCgpIDw8ICIp
ICI7Ci0gICAgICAgICAgICBzdHJlYW0gPDwgIigiIDw8IGlubGluZVJ1bi5sb2dpY2FsTGVmdCgp
IDw8ICIsICIgPDwgaW5saW5lUnVuLmxvZ2ljYWxSaWdodCgpIDw8ICIpICgiIDw8IGlubGluZVJ1
bi5sb2dpY2FsV2lkdGgoKSA8PCAieCIgPDwgaW5saW5lUnVuLmxvZ2ljYWxIZWlnaHQoKSA8PCAi
KSI7CisgICAgICAgICAgICBzdHJlYW0gPDwgIiBpbmxpbmUgcnVuICI7CisgICAgICAgICAgICBp
ZiAoaW5saW5lUnVuLT50ZXh0Q29udGV4dCgpKQorICAgICAgICAgICAgICAgIHN0cmVhbSA8PCAi
KCIgPDwgaW5saW5lUnVuLT50ZXh0Q29udGV4dCgpLT5zdGFydCgpIDw8ICIsICIgPDwgaW5saW5l
UnVuLT50ZXh0Q29udGV4dCgpLT5lbmQoKSA8PCAiKSI7CisgICAgICAgICAgICBzdHJlYW0gPDwg
IiAoIiA8PCBpbmxpbmVSdW4tPmxvZ2ljYWxMZWZ0KCkgPDwgIiwgIiA8PCBpbmxpbmVSdW4tPmxv
Z2ljYWxSaWdodCgpIDw8ICIpICgiIDw8IGlubGluZVJ1bi0+bG9naWNhbFdpZHRoKCkgPDwgIngi
IDw8IGlubGluZVJ1bi0+bG9naWNhbEhlaWdodCgpIDw8ICIpIjsKICAgICAgICAgICAgIHN0cmVh
bS5uZXh0TGluZSgpOwogICAgICAgICAgICAgbWlzbWF0Y2hlZCA9IHRydWU7CiAgICAgICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tG
b3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9ibG9j
a2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcAppbmRleCBmOTYz
M2I0MzhhMWIxYjIyN2RhNWI4NzE0NmZmMzFlYmM1Njg2MjVjLi4xY2M2Mzk3NTI3MzU2N2VlYTRi
MGRlOWMxODQwZTU3NDVkOTYzMjRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
YmxvY2tmb3JtYXR0aW5nL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250
ZXh0R2VvbWV0cnkuY3BwCkBAIC03Nyw3ICs3Nyw3IEBAIEhlaWdodEFuZE1hcmdpbiBCbG9ja0Zv
cm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6aW5GbG93Tm9uUmVwbGFjZWRIZWlnaHRBbmRNYXJn
CiAgICAgICAgIGlmIChsYXlvdXRCb3guZXN0YWJsaXNoZXNJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dCgpKSB7CiAgICAgICAgICAgICAvLyBUaGlzIGlzIHRlbXAgYW5kIHdpbGwgYmUgcmVwbGFjZWQg
YnkgdGhlIGNvcnJlY3QgZGlzcGxheSBib3ggb25jZSBpbmxpbmUgcnVucyBtb3ZlIG92ZXIgdG8g
dGhlIGRpc3BsYXkgdHJlZS4KICAgICAgICAgICAgIGF1dG8mIGlubGluZVJ1bnMgPSBkb3duY2Fz
dDxJbmxpbmVGb3JtYXR0aW5nU3RhdGU+KGxheW91dFN0YXRlLmVzdGFibGlzaGVkRm9ybWF0dGlu
Z1N0YXRlKGxheW91dEJveCkpLmlubGluZVJ1bnMoKTsKLSAgICAgICAgICAgIGF1dG8gYm90dG9t
RWRnZSA9IGlubGluZVJ1bnMuaXNFbXB0eSgpID8gTGF5b3V0VW5pdCgpIDogaW5saW5lUnVucy5s
YXN0KCkubG9naWNhbEJvdHRvbSgpOworICAgICAgICAgICAgYXV0byBib3R0b21FZGdlID0gaW5s
aW5lUnVucy5pc0VtcHR5KCkgPyBMYXlvdXRVbml0KCkgOiBpbmxpbmVSdW5zLmxhc3QoKS0+bG9n
aWNhbEJvdHRvbSgpOwogICAgICAgICAgICAgcmV0dXJuIHsgYm90dG9tRWRnZSAtIGJvcmRlckFu
ZFBhZGRpbmdUb3AsIG5vbkNvbGxhcHNlZE1hcmdpbiB9OwogICAgICAgICB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5Qm94LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheUJveC5oCmluZGV4IGQ0Y2Q3YmEx
NDE2OTBlOGJjZmQzNzc5OWUyMmI2MmRiODhmZDYzZWYuLjExMzNlNDk5YjE5NWQwMzQ5YzBlZjM1
Mjg2ZGIyYWMzYzgzZTMzZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNw
bGF5dHJlZS9EaXNwbGF5Qm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Rpc3BsYXl0
cmVlL0Rpc3BsYXlCb3guaApAQCAtMTM5LDYgKzEzOSw3IEBAIHB1YmxpYzoKICAgICBSZWN0IHJl
Y3RXaXRoTWFyZ2luKCkgY29uc3Q7CiAKICAgICBMYXlvdXQ6OlVzZWRWZXJ0aWNhbE1hcmdpbiB2
ZXJ0aWNhbE1hcmdpbigpIGNvbnN0OworICAgIExheW91dDo6VXNlZEhvcml6b250YWxNYXJnaW4g
aG9yaXpvbnRhbE1hcmdpbigpIGNvbnN0OwogICAgIExheW91dFVuaXQgbWFyZ2luQmVmb3JlKCkg
Y29uc3Q7CiAgICAgTGF5b3V0VW5pdCBtYXJnaW5TdGFydCgpIGNvbnN0OwogICAgIExheW91dFVu
aXQgbWFyZ2luQWZ0ZXIoKSBjb25zdDsKQEAgLTU4MCw2ICs1ODEsMTIgQEAgaW5saW5lIExheW91
dDo6VXNlZFZlcnRpY2FsTWFyZ2luIEJveDo6dmVydGljYWxNYXJnaW4oKSBjb25zdAogICAgIHJl
dHVybiBtX3ZlcnRpY2FsTWFyZ2luOwogfQogCitpbmxpbmUgTGF5b3V0OjpVc2VkSG9yaXpvbnRh
bE1hcmdpbiBCb3g6Omhvcml6b250YWxNYXJnaW4oKSBjb25zdAoreworICAgIEFTU0VSVChtX2hh
c1ZhbGlkSG9yaXpvbnRhbE1hcmdpbik7CisgICAgcmV0dXJuIG1faG9yaXpvbnRhbE1hcmdpbjsK
K30KKwogaW5saW5lIExheW91dFVuaXQgQm94OjptYXJnaW5CZWZvcmUoKSBjb25zdAogewogICAg
IEFTU0VSVChtX2hhc1ZhbGlkVmVydGljYWxNYXJnaW4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2Rpc3BsYXl0cmVlL0Rpc3BsYXlSdW4uaCBiL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5UnVuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzI5Nzg1MmEyMDExNzM4
MTU2OGZlZGU2NDlhMTQ1YzI5YWJkNDBhOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5UnVuLmgKQEAgLTAsMCArMSwxMTIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19D
T05URVhUKQorCisjaW5jbHVkZSAiSW5saW5lSXRlbS5oIgorI2luY2x1ZGUgIkxheW91dFVuaXQu
aCIKKyNpbmNsdWRlICJUZXh0RmxhZ3MuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNw
YWNlIERpc3BsYXkgeworCitzdHJ1Y3QgUnVuIHsKKyAgICBzdHJ1Y3QgVGV4dENvbnRleHQgewor
ICAgIHB1YmxpYzoKKyAgICAgICAgVGV4dENvbnRleHQodW5zaWduZWQgcG9zaXRpb24sIHVuc2ln
bmVkIGxlbmd0aCk7CisKKyAgICAgICAgdm9pZCBzZXRTdGFydCh1bnNpZ25lZCBzdGFydCkgeyBt
X3N0YXJ0ID0gc3RhcnQ7IH0KKyAgICAgICAgdm9pZCBzZXRMZW5ndGgodW5zaWduZWQgbGVuZ3Ro
KSB7IG1fbGVuZ3RoID0gbGVuZ3RoOyB9CisKKyAgICAgICAgdW5zaWduZWQgc3RhcnQoKSBjb25z
dCB7IHJldHVybiBtX3N0YXJ0OyB9CisgICAgICAgIHVuc2lnbmVkIGVuZCgpIGNvbnN0IHsgcmV0
dXJuIHN0YXJ0KCkgKyBsZW5ndGgoKTsgfQorICAgICAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25z
dCB7IHJldHVybiBtX2xlbmd0aDsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgdW5zaWduZWQg
bV9zdGFydDsKKyAgICAgICAgdW5zaWduZWQgbV9sZW5ndGg7CisgICAgfTsKKworICAgIFJ1bihC
b3g6OlJlY3QgbG9naWNhbFJlY3QsIE9wdGlvbmFsPFRleHRDb250ZXh0Pik7CisgICAgUnVuKGNv
bnN0IFJ1biYpOworCisgICAgTGF5b3V0UG9pbnQgbG9naWNhbFRvcExlZnQoKSBjb25zdCB7IHJl
dHVybiBtX2xvZ2ljYWxSZWN0LnRvcExlZnQoKTsgfQorICAgIExheW91dFVuaXQgbG9naWNhbExl
ZnQoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxSZWN0LmxlZnQoKTsgfQorICAgIExheW91dFVu
aXQgbG9naWNhbFJpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsUmVjdC5yaWdodCgpOyB9
CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9wKCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsUmVj
dC50b3AoKTsgfQorICAgIExheW91dFVuaXQgbG9naWNhbEJvdHRvbSgpIGNvbnN0IHsgcmV0dXJu
IG1fbG9naWNhbFJlY3QuYm90dG9tKCk7IH0KKworICAgIExheW91dFVuaXQgbG9naWNhbFdpZHRo
KCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsUmVjdC53aWR0aCgpOyB9CisgICAgTGF5b3V0VW5p
dCBsb2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsUmVjdC5oZWlnaHQoKTsg
fQorCisgICAgdm9pZCBzZXRMb2dpY2FsV2lkdGgoTGF5b3V0VW5pdCB3aWR0aCkgeyBtX2xvZ2lj
YWxSZWN0LnNldFdpZHRoKHdpZHRoKTsgfQorICAgIHZvaWQgc2V0TG9naWNhbExlZnQoTGF5b3V0
VW5pdCBsb2dpY2FsTGVmdCkgeyBtX2xvZ2ljYWxSZWN0LnNldExlZnQobG9naWNhbExlZnQpOyB9
CisgICAgdm9pZCBzZXRMb2dpY2FsUmlnaHQoTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHQpIHsgbV9s
b2dpY2FsUmVjdC5zaGlmdFJpZ2h0VG8obG9naWNhbFJpZ2h0KTsgfQorICAgIHZvaWQgbW92ZVZl
cnRpY2FsbHkoTGF5b3V0VW5pdCBkZWx0YSkgeyBtX2xvZ2ljYWxSZWN0Lm1vdmVWZXJ0aWNhbGx5
KGRlbHRhKTsgfQorICAgIHZvaWQgbW92ZUhvcml6b250YWxseShMYXlvdXRVbml0IGRlbHRhKSB7
IG1fbG9naWNhbFJlY3QubW92ZUhvcml6b250YWxseShkZWx0YSk7IH0KKyAgICB2b2lkIGV4cGFu
ZFZlcnRpY2FsbHkoTGF5b3V0VW5pdCBkZWx0YSkgeyBtX2xvZ2ljYWxSZWN0LmV4cGFuZCgwLCBk
ZWx0YSk7IH0KKyAgICB2b2lkIGV4cGFuZEhvcml6b250YWxseShMYXlvdXRVbml0IGRlbHRhKSB7
IG1fbG9naWNhbFJlY3QuZXhwYW5kKGRlbHRhLCAwKTsgfQorCisgICAgc3RydWN0IEV4cGFuc2lv
bk9wcG9ydHVuaXR5IHsKKyAgICAgICAgdW5zaWduZWQgY291bnQgeyAwIH07CisgICAgICAgIEV4
cGFuc2lvbkJlaGF2aW9yIGJlaGF2aW9yIHsgRm9yYmlkTGVhZGluZ0V4cGFuc2lvbiB8IEZvcmJp
ZFRyYWlsaW5nRXhwYW5zaW9uIH07CisgICAgICAgIExheW91dFVuaXQgZXhwYW5zaW9uOworICAg
IH07CisgICAgRXhwYW5zaW9uT3Bwb3J0dW5pdHkmIGV4cGFuc2lvbk9wcG9ydHVuaXR5KCkgeyBy
ZXR1cm4gbV9leHBhbnNpb25PcHBvcnR1bml0eTsgfQorCisgICAgdm9pZCBzZXRUZXh0Q29udGV4
dChUZXh0Q29udGV4dCB0ZXh0Q29udGV4dCkgeyBtX3RleHRDb250ZXh0LmVtcGxhY2UodGV4dENv
bnRleHQpOyB9CisgICAgT3B0aW9uYWw8VGV4dENvbnRleHQ+JiB0ZXh0Q29udGV4dCgpIHsgcmV0
dXJuIG1fdGV4dENvbnRleHQ7IH0KKyAgICBPcHRpb25hbDxUZXh0Q29udGV4dD4gdGV4dENvbnRl
eHQoKSBjb25zdCB7IHJldHVybiBtX3RleHRDb250ZXh0OyB9CisKK3ByaXZhdGU6CisgICAgQm94
OjpSZWN0IG1fbG9naWNhbFJlY3Q7CisgICAgRXhwYW5zaW9uT3Bwb3J0dW5pdHkgbV9leHBhbnNp
b25PcHBvcnR1bml0eTsKKyAgICBPcHRpb25hbDxUZXh0Q29udGV4dD4gbV90ZXh0Q29udGV4dDsK
K307CisKK2lubGluZSBSdW46OlJ1bihCb3g6OlJlY3QgbG9naWNhbFJlY3QsIE9wdGlvbmFsPFRl
eHRDb250ZXh0PiB0ZXh0Q29udGV4dCkKKyAgICA6IG1fbG9naWNhbFJlY3QobG9naWNhbFJlY3Qp
CisgICAgLCBtX3RleHRDb250ZXh0KHRleHRDb250ZXh0KQoreworfQorCitpbmxpbmUgUnVuOjpU
ZXh0Q29udGV4dDo6VGV4dENvbnRleHQodW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCkK
KyAgICA6IG1fc3RhcnQoc3RhcnQpCisgICAgLCBtX2xlbmd0aChsZW5ndGgpCit7Cit9CisKK2lu
bGluZSBSdW46OlJ1bihjb25zdCBSdW4mIG90aGVyKQoreworICAgIG1fbG9naWNhbFJlY3QgPSBv
dGhlci5tX2xvZ2ljYWxSZWN0OworICAgIG1fZXhwYW5zaW9uT3Bwb3J0dW5pdHkgPSBvdGhlci5t
X2V4cGFuc2lvbk9wcG9ydHVuaXR5OworICAgIG1fdGV4dENvbnRleHQgPSBvdGhlci5tX3RleHRD
b250ZXh0OworfQorCit9Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0
LmNwcAppbmRleCBlM2MxNTM2ZGNkMzJhMWVmZWQ4MTI4ZDMzMmIxMThlMjhiZGQ5ZTcyLi4zMzY2
ODQ5OTA5N2RkNmQ2ZGEzMGYwYmRkNDg4NTAzNTBlMTY1YWZlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9y
bWF0dGluZ0NvbnRleHQuY3BwCkBAIC0zMCw3ICszMCw3IEBACiAKICNpbmNsdWRlICJJbmxpbmVG
b3JtYXR0aW5nU3RhdGUuaCIKICNpbmNsdWRlICJJbmxpbmVMaW5lQnJlYWtlci5oIgotI2luY2x1
ZGUgIklubGluZVJ1blByb3ZpZGVyLmgiCisjaW5jbHVkZSAiSW5saW5lVGV4dEl0ZW0uaCIKICNp
bmNsdWRlICJMYXlvdXRCb3guaCIKICNpbmNsdWRlICJMYXlvdXRDb250YWluZXIuaCIKICNpbmNs
dWRlICJMYXlvdXRJbmxpbmVCb3guaCIKQEAgLTc5LDE2ICs3OSwyMCBAQCB2b2lkIElubGluZUZv
cm1hdHRpbmdDb250ZXh0OjpsYXlvdXQoKSBjb25zdAogICAgICAgICAgICAgbGF5b3V0Rm9ybWF0
dGluZ0NvbnRleHRSb290KCpsYXlvdXRCb3gsIHVzZWRWYWx1ZXMpOwogICAgICAgICBlbHNlIGlm
IChpczxDb250YWluZXI+KCpsYXlvdXRCb3gpKSB7CiAgICAgICAgICAgICBhdXRvJiBpbmxpbmVD
b250YWluZXIgPSBkb3duY2FzdDxJbmxpbmVDb250YWluZXI+KCpsYXlvdXRCb3gpOwotICAgICAg
ICAgICAgY29tcHV0ZU1hcmdpbihpbmxpbmVDb250YWluZXIsIHVzZWRWYWx1ZXMpOworICAgICAg
ICAgICAgY29tcHV0ZUhvcml6b250YWxNYXJnaW4oaW5saW5lQ29udGFpbmVyLCB1c2VkVmFsdWVz
KTsKICAgICAgICAgICAgIGNvbXB1dGVCb3JkZXJBbmRQYWRkaW5nKGlubGluZUNvbnRhaW5lciwg
dXNlZFZhbHVlcyk7CisgICAgICAgICAgICBpbml0aWFsaXplVmVydGljYWxNYXJnaW5Gb3JJbmxp
bmVDb250YWluZXIoaW5saW5lQ29udGFpbmVyKTsKICAgICAgICAgfSBlbHNlIGlmIChsYXlvdXRC
b3gtPmlzUmVwbGFjZWQoKSkKICAgICAgICAgICAgIGNvbXB1dGVXaWR0aEFuZEhlaWdodEZvclJl
cGxhY2VkSW5saW5lQm94KCpsYXlvdXRCb3gsIHVzZWRWYWx1ZXMpOwogICAgICAgICBsYXlvdXRC
b3ggPSBuZXh0SW5QcmVPcmRlcigqbGF5b3V0Qm94LCByb290KTsKICAgICB9CiAKLSAgICBJbmxp
bmVSdW5Qcm92aWRlciBpbmxpbmVSdW5Qcm92aWRlcjsKLSAgICBjb2xsZWN0SW5saW5lQ29udGVu
dChpbmxpbmVSdW5Qcm92aWRlcik7Ci0gICAgTGluZUxheW91dCgqdGhpcykubGF5b3V0KGlubGlu
ZVJ1blByb3ZpZGVyKTsKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBzdWNoIGEgd2FzdGUgd2hlbiBp
bnRyaW5zaWMgd2lkdGggY29tcHV0YXRpb24gYWxyZWFkeSBjb2xsZWN0ZWQgdGhlIGlubGluZSBp
dGVtcy4KKyAgICBmb3JtYXR0aW5nU3RhdGUoKS5pbmxpbmVJdGVtcygpLmNsZWFyKCk7CisgICAg
Zm9ybWF0dGluZ1N0YXRlKCkuaW5saW5lUnVucygpLmNsZWFyKCk7CisKKyAgICBjb2xsZWN0SW5s
aW5lQ29udGVudCgpOworICAgIExpbmVMYXlvdXQoKnRoaXMpLmxheW91dCgpOwogICAgIExPR19X
SVRIX1NUUkVBTShGb3JtYXR0aW5nQ29udGV4dExheW91dCwgc3RyZWFtIDw8ICJbRW5kXSAtPiBp
bmxpbmUgZm9ybWF0dGluZyBjb250ZXh0IC0+IGZvcm1hdHRpbmcgcm9vdCgiIDw8ICZyb290IDw8
ICIpIik7CiB9CiAKQEAgLTEyMCwzMyArMTI0LDM0IEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQ6OmNvbXB1dGVJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKCkgY29uc3QKICAgICAgICAg
ICAgICAgICBjb21wdXRlV2lkdGhBbmRNYXJnaW4oKmxheW91dEJveCwgdXNlZFZhbHVlcyk7CiAg
ICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBTaW1wbGUgaW5saW5lIGNvbnRh
aW5lciB3aXRoIG5vIGludHJpbnNpYyB3aWR0aCA8c3Bhbj4uCi0gICAgICAgICAgICAgICAgY29t
cHV0ZU1hcmdpbigqbGF5b3V0Qm94LCB1c2VkVmFsdWVzKTsKKyAgICAgICAgICAgICAgICBjb21w
dXRlSG9yaXpvbnRhbE1hcmdpbigqbGF5b3V0Qm94LCB1c2VkVmFsdWVzKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgICAgICBsYXlvdXRCb3ggPSBuZXh0SW5QcmVPcmRlcigqbGF5b3V0
Qm94LCByb290KTsKICAgICB9CiAKLSAgICBJbmxpbmVSdW5Qcm92aWRlciBpbmxpbmVSdW5Qcm92
aWRlcjsKLSAgICBjb2xsZWN0SW5saW5lQ29udGVudChpbmxpbmVSdW5Qcm92aWRlcik7CisgICAg
Y29sbGVjdElubGluZUNvbnRlbnQoKTsKIAogICAgIGF1dG8gbWF4aW11bUxpbmVXaWR0aCA9IFsm
XShhdXRvIGF2YWlsYWJsZVdpZHRoKSB7Ci0gICAgICAgIExheW91dFVuaXQgbWF4Q29udGVudExv
Z2ljYWxSaWdodDsKLSAgICAgICAgYXV0byBsaW5lQnJlYWtlciA9IElubGluZUxpbmVCcmVha2Vy
IHsgbGF5b3V0U3RhdGUsIGZvcm1hdHRpbmdTdGF0ZSgpLmlubGluZUNvbnRlbnQoKSwgaW5saW5l
UnVuUHJvdmlkZXIucnVucygpIH07Ci0gICAgICAgIExheW91dFVuaXQgbGluZUxvZ2ljYWxSaWdo
dDsKLQogICAgICAgICAvLyBTd2l0Y2ggdG8gdGhlIG1pbi9tYXggZm9ybWF0dGluZyByb290IHdp
ZHRoIHZhbHVlcyBiZWZvcmUgZm9ybWF0dGluZyB0aGUgbGluZXMuCiAgICAgICAgIGZvciAoYXV0
byogZm9ybWF0dGluZ1Jvb3QgOiBmb3JtYXR0aW5nQ29udGV4dFJvb3RMaXN0KSB7CiAgICAgICAg
ICAgICBhdXRvIGludHJpbnNpY1dpZHRocyA9IGxheW91dFN0YXRlLmZvcm1hdHRpbmdTdGF0ZUZv
ckJveCgqZm9ybWF0dGluZ1Jvb3QpLmludHJpbnNpY1dpZHRoQ29uc3RyYWludHMoKmZvcm1hdHRp
bmdSb290KTsKICAgICAgICAgICAgIGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3go
KmZvcm1hdHRpbmdSb290KS5zZXRDb250ZW50Qm94V2lkdGgoYXZhaWxhYmxlV2lkdGggPyBpbnRy
aW5zaWNXaWR0aHMtPm1heGltdW0gOiBpbnRyaW5zaWNXaWR0aHMtPm1pbmltdW0pOwogICAgICAg
ICB9CisgICAgICAgIExheW91dFVuaXQgbWF4Q29udGVudExvZ2ljYWxSaWdodDsKKyAgICAgICAg
TGF5b3V0VW5pdCBsaW5lTG9naWNhbFJpZ2h0OwogCi0gICAgICAgIHdoaWxlIChhdXRvIHJ1biA9
IGxpbmVCcmVha2VyLm5leHRSdW4obGluZUxvZ2ljYWxSaWdodCwgYXZhaWxhYmxlV2lkdGgsICFs
aW5lTG9naWNhbFJpZ2h0KSkgewotICAgICAgICAgICAgaWYgKHJ1bi0+cG9zaXRpb24gPT0gSW5s
aW5lTGluZUJyZWFrZXI6OlJ1bjo6UG9zaXRpb246OkxpbmVCZWdpbikKKyAgICAgICAgTGluZUJy
ZWFrZXIgbGluZUJyZWFrZXIobGF5b3V0U3RhdGUpOworICAgICAgICBhdXRvJiBpbmxpbmVDb250
ZW50ID0gZm9ybWF0dGluZ1N0YXRlKCkuaW5saW5lSXRlbXMoKTsKKyAgICAgICAgZm9yIChhdXRv
JiBpbmxpbmVJdGVtIDogaW5saW5lQ29udGVudCkgeworICAgICAgICAgICAgYXV0byBicmVha2lu
Z0NvbnRleHQgPSBsaW5lQnJlYWtlci5icmVha2luZ0NvbnRleHQoKmlubGluZUl0ZW0sIHsgYXZh
aWxhYmxlV2lkdGgsIGxpbmVMb2dpY2FsUmlnaHQsICFsaW5lTG9naWNhbFJpZ2h0IH0pOworICAg
ICAgICAgICAgaWYgKGJyZWFraW5nQ29udGV4dC5icmVha2luZ0JlaGF2aW9yID09IExpbmVCcmVh
a2VyOjpCcmVha2luZ0JlaGF2aW9yOjpXcmFwKQogICAgICAgICAgICAgICAgIGxpbmVMb2dpY2Fs
UmlnaHQgPSAwOwotICAgICAgICAgICAgbGluZUxvZ2ljYWxSaWdodCArPSBydW4tPndpZHRoOwor
ICAgICAgICAgICAgbGluZUxvZ2ljYWxSaWdodCArPSBpbmxpbmVJdGVtLT53aWR0aCgpOwogCiAg
ICAgICAgICAgICBtYXhDb250ZW50TG9naWNhbFJpZ2h0ID0gc3RkOjptYXgobWF4Q29udGVudExv
Z2ljYWxSaWdodCwgbGluZUxvZ2ljYWxSaWdodCk7CiAgICAgICAgIH0KKwogICAgICAgICByZXR1
cm4gbWF4Q29udGVudExvZ2ljYWxSaWdodDsKICAgICB9OwogCkBAIC0xNjEsNyArMTY2LDcgQEAg
dm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUludHJpbnNpY1dpZHRoRm9yRmxv
YXRCb3goY29uc3QgQm94JiBsYXlvdXQKIAogICAgIGF1dG8gdXNlZEhvcml6b250YWxWYWx1ZXMg
PSBVc2VkSG9yaXpvbnRhbFZhbHVlcyB7IH07CiAgICAgY29tcHV0ZUJvcmRlckFuZFBhZGRpbmco
bGF5b3V0Qm94LCB1c2VkSG9yaXpvbnRhbFZhbHVlcyk7Ci0gICAgY29tcHV0ZU1hcmdpbihsYXlv
dXRCb3gsIHVzZWRIb3Jpem9udGFsVmFsdWVzKTsKKyAgICBjb21wdXRlSG9yaXpvbnRhbE1hcmdp
bihsYXlvdXRCb3gsIHVzZWRIb3Jpem9udGFsVmFsdWVzKTsKICAgICBsYXlvdXRTdGF0ZS5jcmVh
dGVGb3JtYXR0aW5nQ29udGV4dChsYXlvdXRCb3gpLT5jb21wdXRlSW50cmluc2ljV2lkdGhDb25z
dHJhaW50cygpOwogCiAgICAgYXV0byB1c2VkVmVydGljYWxWYWx1ZXMgPSBVc2VkVmVydGljYWxW
YWx1ZXMgeyB9OwpAQCAtMTc4LDExICsxODMsMTYgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dDo6Y29tcHV0ZUludHJpbnNpY1dpZHRoRm9ySW5saW5lQmxvY2soY29uc3QgQm94JiBsYXkK
IAogICAgIGF1dG8gdXNlZFZhbHVlcyA9IFVzZWRIb3Jpem9udGFsVmFsdWVzIHsgfTsKICAgICBj
b21wdXRlQm9yZGVyQW5kUGFkZGluZyhsYXlvdXRCb3gsIHVzZWRWYWx1ZXMpOwotICAgIGNvbXB1
dGVNYXJnaW4obGF5b3V0Qm94LCB1c2VkVmFsdWVzKTsKKyAgICBjb21wdXRlSG9yaXpvbnRhbE1h
cmdpbihsYXlvdXRCb3gsIHVzZWRWYWx1ZXMpOwogICAgIGxheW91dFN0YXRlKCkuY3JlYXRlRm9y
bWF0dGluZ0NvbnRleHQobGF5b3V0Qm94KS0+Y29tcHV0ZUludHJpbnNpY1dpZHRoQ29uc3RyYWlu
dHMoKTsKIH0KIAotdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZU1hcmdpbihj
b25zdCBCb3gmIGxheW91dEJveCwgVXNlZEhvcml6b250YWxWYWx1ZXMgdXNlZFZhbHVlcykgY29u
c3QKK3ZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmluaXRpYWxpemVWZXJ0aWNhbE1hcmdp
bkZvcklubGluZUNvbnRhaW5lcihjb25zdCBCb3gmIGxheW91dEJveCkgY29uc3QKK3sKKyAgICBs
YXlvdXRTdGF0ZSgpLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KS5zZXRWZXJ0aWNh
bE1hcmdpbih7IH0pOworfQorCit2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRl
SG9yaXpvbnRhbE1hcmdpbihjb25zdCBCb3gmIGxheW91dEJveCwgVXNlZEhvcml6b250YWxWYWx1
ZXMgdXNlZFZhbHVlcykgY29uc3QKIHsKICAgICBhdXRvIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdp
biA9IEdlb21ldHJ5Ojpjb21wdXRlZEhvcml6b250YWxNYXJnaW4obGF5b3V0Qm94LCB1c2VkVmFs
dWVzKTsKICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUoKS5kaXNwbGF5Qm94Rm9y
TGF5b3V0Qm94KGxheW91dEJveCk7CkBAIC0yNTYsMzEgKzI2Niw3IEBAIHZvaWQgSW5saW5lRm9y
bWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVXaWR0aEFuZEhlaWdodEZvclJlcGxhY2VkSW5saW5lQm94
KGNvbnN0IEJvCiAgICAgY29tcHV0ZUhlaWdodEFuZE1hcmdpbihsYXlvdXRCb3gpOwogfQogCi1z
dGF0aWMgdm9pZCBhZGREZXRhY2hpbmdSdWxlcyhJbmxpbmVJdGVtJiBpbmxpbmVJdGVtLCBPcHRp
b25hbDxMYXlvdXRVbml0PiBub25CcmVha2FibGVTdGFydFdpZHRoLCBPcHRpb25hbDxMYXlvdXRV
bml0PiBub25CcmVha2FibGVFbmRXaWR0aCkKLXsKLSAgICBPcHRpb25TZXQ8SW5saW5lSXRlbTo6
RGV0YWNoaW5nUnVsZT4gZGV0YWNoaW5nUnVsZXM7Ci0gICAgaWYgKG5vbkJyZWFrYWJsZVN0YXJ0
V2lkdGgpIHsKLSAgICAgICAgZGV0YWNoaW5nUnVsZXMuYWRkKElubGluZUl0ZW06OkRldGFjaGlu
Z1J1bGU6OkJyZWFrQXRTdGFydCk7Ci0gICAgICAgIGlubGluZUl0ZW0uYWRkTm9uQnJlYWthYmxl
U3RhcnQoKm5vbkJyZWFrYWJsZVN0YXJ0V2lkdGgpOwotICAgIH0KLSAgICBpZiAobm9uQnJlYWth
YmxlRW5kV2lkdGgpIHsKLSAgICAgICAgZGV0YWNoaW5nUnVsZXMuYWRkKElubGluZUl0ZW06OkRl
dGFjaGluZ1J1bGU6OkJyZWFrQXRFbmQpOwotICAgICAgICBpbmxpbmVJdGVtLmFkZE5vbkJyZWFr
YWJsZUVuZCgqbm9uQnJlYWthYmxlRW5kV2lkdGgpOwotICAgIH0KLSAgICBpbmxpbmVJdGVtLmFk
ZERldGFjaGluZ1J1bGUoZGV0YWNoaW5nUnVsZXMpOwotfQotCi1zdGF0aWMgSW5saW5lSXRlbSYg
Y3JlYXRlQW5kQXBwZW5kSW5saW5lSXRlbShJbmxpbmVSdW5Qcm92aWRlciYgaW5saW5lUnVuUHJv
dmlkZXIsIElubGluZUNvbnRlbnQmIGlubGluZUNvbnRlbnQsIGNvbnN0IEJveCYgbGF5b3V0Qm94
KQotewotICAgIEFTU0VSVChsYXlvdXRCb3guaXNJbmxpbmVMZXZlbEJveCgpIHx8IGxheW91dEJv
eC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpKTsKLSAgICBhdXRvIGlubGluZUl0ZW0gPSBzdGQ6Om1h
a2VfdW5pcXVlPElubGluZUl0ZW0+KGxheW91dEJveCk7Ci0gICAgYXV0byogaW5saW5lSXRlbVB0
ciA9IGlubGluZUl0ZW0uZ2V0KCk7Ci0gICAgaW5saW5lQ29udGVudC5hZGQoV1RGTW92ZShpbmxp
bmVJdGVtKSk7Ci0gICAgaW5saW5lUnVuUHJvdmlkZXIuYXBwZW5kKCppbmxpbmVJdGVtUHRyKTsK
LSAgICByZXR1cm4gKmlubGluZUl0ZW1QdHI7Ci19Ci0KLXZvaWQgSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQ6OmNvbGxlY3RJbmxpbmVDb250ZW50KElubGluZVJ1blByb3ZpZGVyJiBpbmxpbmVSdW5Q
cm92aWRlcikgY29uc3QKK3ZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbGxlY3RJbmxp
bmVDb250ZW50KCkgY29uc3QKIHsKICAgICBpZiAoIWlzPENvbnRhaW5lcj4ocm9vdCgpKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMjg4LDU2ICsyNzQsMjAgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5n
Q29udGV4dDo6Y29sbGVjdElubGluZUNvbnRlbnQoSW5saW5lUnVuUHJvdmlkZXImIGlubGluZVJ1
blAKICAgICBpZiAoIXJvb3QuaGFzSW5GbG93T3JGbG9hdGluZ0NoaWxkKCkpCiAgICAgICAgIHJl
dHVybjsKICAgICAvLyBUaGUgbG9naWMgaGVyZSBpcyB2ZXJ5IHNpbWlsYXIgdG8gQkZDIGxheW91
dC4KLSAgICAvLyAxLiBUcmF2ZXJzIGRvd24gdGhlIGxheW91dCB0cmVlIGFuZCBjb2xsZWN0ICJz
dGFydCIgdW5icmVha2FibGUgd2lkdGhzIChtYXJnaW4tbGVmdCwgYm9yZGVyLWxlZnQsIHBhZGRp
bmctbGVmdCkKLSAgICAvLyAyLiBDcmVhdGUgSW5saW5lSXRlbSBwZXIgbGVhZiBpbmxpbmUgYm94
ICh0ZXh0IG5vZGVzLCBpbmxpbmUtYmxvY2tzLCBmbG9hdHMpIGFuZCBzZXQgInN0YXJ0IiB1bmJy
ZWFrYWJsZSB3aWR0aCBvbiB0aGVtLiAKLSAgICAvLyAzLiBDbGltYiBiYWNrIGFuZCBjb2xsZWN0
ICJlbmQiIHVuYnJlYWthYmxlIHdpZHRoIGFuZCBzZXQgaXQgb24gdGhlIGxhc3QgSW5saW5lSXRl
bS4KLSAgICBhdXRvJiBsYXlvdXRTdGF0ZSA9IHRoaXMtPmxheW91dFN0YXRlKCk7Ci0gICAgYXV0
byYgaW5saW5lQ29udGVudCA9IGZvcm1hdHRpbmdTdGF0ZSgpLmlubGluZUNvbnRlbnQoKTsKLQot
ICAgIGVudW0gY2xhc3MgTm9uQnJlYWthYmxlV2lkdGhUeXBlIHsgU3RhcnQsIEVuZCB9OwotICAg
IGF1dG8gbm9uQnJlYWthYmxlV2lkdGggPSBbJl0oYXV0byYgY29udGFpbmVyLCBhdXRvIHR5cGUp
IHsKLSAgICAgICAgYXV0byYgZGlzcGxheUJveCA9IGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JM
YXlvdXRCb3goY29udGFpbmVyKTsKLSAgICAgICAgaWYgKHR5cGUgPT0gTm9uQnJlYWthYmxlV2lk
dGhUeXBlOjpTdGFydCkKLSAgICAgICAgICAgIHJldHVybiBkaXNwbGF5Qm94Lm1hcmdpblN0YXJ0
KCkgKyBkaXNwbGF5Qm94LmJvcmRlckxlZnQoKSArIGRpc3BsYXlCb3gucGFkZGluZ0xlZnQoKS52
YWx1ZU9yKDApOwotICAgICAgICByZXR1cm4gZGlzcGxheUJveC5tYXJnaW5FbmQoKSArIGRpc3Bs
YXlCb3guYm9yZGVyUmlnaHQoKSArIGRpc3BsYXlCb3gucGFkZGluZ1JpZ2h0KCkudmFsdWVPcigw
KTsKLSAgICB9OwotCisgICAgYXV0byYgZm9ybWF0dGluZ1N0YXRlID0gdGhpcy0+Zm9ybWF0dGlu
Z1N0YXRlKCk7CiAgICAgTGF5b3V0UXVldWUgbGF5b3V0UXVldWU7CiAgICAgbGF5b3V0UXVldWUu
YXBwZW5kKHJvb3QuZmlyc3RJbkZsb3dPckZsb2F0aW5nQ2hpbGQoKSk7Ci0KLSAgICBPcHRpb25h
bDxMYXlvdXRVbml0PiBub25CcmVha2FibGVTdGFydFdpZHRoOwotICAgIE9wdGlvbmFsPExheW91
dFVuaXQ+IG5vbkJyZWFrYWJsZUVuZFdpZHRoOwotICAgIElubGluZUl0ZW0qIGxhc3RJbmxpbmVJ
dGVtID0gbnVsbHB0cjsKICAgICB3aGlsZSAoIWxheW91dFF1ZXVlLmlzRW1wdHkoKSkgeworICAg
ICAgICBhdXRvIHRyZWF0QXNJbmxpbmVDb250YWluZXIgPSBbXShhdXRvJiBsYXlvdXRCb3gpIHsK
KyAgICAgICAgICAgIHJldHVybiBpczxDb250YWluZXI+KGxheW91dEJveCkgJiYgIWxheW91dEJv
eC5lc3RhYmxpc2hlc0Zvcm1hdHRpbmdDb250ZXh0KCk7CisgICAgICAgIH07CiAgICAgICAgIHdo
aWxlICh0cnVlKSB7CiAgICAgICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSAqbGF5b3V0UXVldWUu
bGFzdCgpOwotICAgICAgICAgICAgaWYgKCFpczxDb250YWluZXI+KGxheW91dEJveCkpCisgICAg
ICAgICAgICBpZiAoIXRyZWF0QXNJbmxpbmVDb250YWluZXIobGF5b3V0Qm94KSkKICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIHN0YXJ0IG9mIGFuIGlu
bGluZSBjb250YWluZXIgKGUuZy4gPHNwYW4+KS4KKyAgICAgICAgICAgIGZvcm1hdHRpbmdTdGF0
ZS5hZGRJbmxpbmVJdGVtKHN0ZDo6bWFrZV91bmlxdWU8SW5saW5lSXRlbT4obGF5b3V0Qm94LCBJ
bmxpbmVJdGVtOjpUeXBlOjpDb250YWluZXJTdGFydCkpOwogICAgICAgICAgICAgYXV0byYgY29u
dGFpbmVyID0gZG93bmNhc3Q8Q29udGFpbmVyPihsYXlvdXRCb3gpOwotCi0gICAgICAgICAgICBp
ZiAoY29udGFpbmVyLmVzdGFibGlzaGVzRm9ybWF0dGluZ0NvbnRleHQoKSkgewotICAgICAgICAg
ICAgICAgIC8vIEZvcm1hdHRpbmcgY29udGV4dHMgYXJlIHRyZWF0ZWQgYXMgbGVhZiBub2Rlcy4K
LSAgICAgICAgICAgICAgICBhdXRvJiBpbmxpbmVJdGVtID0gY3JlYXRlQW5kQXBwZW5kSW5saW5l
SXRlbShpbmxpbmVSdW5Qcm92aWRlciwgaW5saW5lQ29udGVudCwgY29udGFpbmVyKTsKLSAgICAg
ICAgICAgICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxh
eW91dEJveChjb250YWluZXIpOwotICAgICAgICAgICAgICAgIGF1dG8gY3VycmVudE5vbkJyZWFr
YWJsZVN0YXJ0V2lkdGggPSBub25CcmVha2FibGVTdGFydFdpZHRoLnZhbHVlT3IoMCkgKyBkaXNw
bGF5Qm94Lm1hcmdpblN0YXJ0KCkgKyBub25CcmVha2FibGVFbmRXaWR0aC52YWx1ZU9yKDApOwot
ICAgICAgICAgICAgICAgIGFkZERldGFjaGluZ1J1bGVzKGlubGluZUl0ZW0sIGN1cnJlbnROb25C
cmVha2FibGVTdGFydFdpZHRoLCBkaXNwbGF5Qm94Lm1hcmdpbkVuZCgpKTsKLSAgICAgICAgICAg
ICAgICBub25CcmVha2FibGVTdGFydFdpZHRoID0geyB9OwotICAgICAgICAgICAgICAgIG5vbkJy
ZWFrYWJsZUVuZFdpZHRoID0geyB9OwotCi0gICAgICAgICAgICAgICAgLy8gRm9ybWF0dGluZyBj
b250ZXh0IHJvb3RzIHRha2UgY2FyZSBvZiB0aGVpciBzdWJ0cmVlcy4gQ29udGludWUgd2l0aCBu
ZXh0IHNpYmxpbmcgaWYgZXhpc3RzLgotICAgICAgICAgICAgICAgIGxheW91dFF1ZXVlLnJlbW92
ZUxhc3QoKTsKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRhaW5lci5uZXh0SW5GbG93T3JGbG9h
dGluZ1NpYmxpbmcoKSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgbGF5b3V0UXVldWUuYXBwZW5kKGNvbnRhaW5lci5uZXh0SW5GbG93T3JGbG9hdGluZ1NpYmxp
bmcoKSk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIC8vIENoZWNrIGlmIHRoaXMgbm9uLWZvcm1hdHRpbmcgY29udGV4dCBjb250YWluZXIg
aGFzIGFueSBub24tYnJlYWthYmxlIHN0YXJ0IHByb3BlcnRpZXMgKG1hcmdpbi1sZWZ0LCBib3Jk
ZXItbGVmdCwgcGFkZGluZy1sZWZ0KQotICAgICAgICAgICAgLy8gPHNwYW4gc3R5bGU9InBhZGRp
bmctbGVmdDogNXB4Ij48c3BhbiBzdHlsZT0icGFkZGluZy1sZWZ0OiA1cHgiPmZvb2Jhcjwvc3Bh
bj48L3NwYW4+IC0+IDVweCArIDVweAotICAgICAgICAgICAgYXV0byBjdXJyZW50Tm9uQnJlYWth
YmxlU3RhcnRXaWR0aCA9IG5vbkJyZWFrYWJsZVdpZHRoKGxheW91dEJveCwgTm9uQnJlYWthYmxl
V2lkdGhUeXBlOjpTdGFydCk7Ci0gICAgICAgICAgICBpZiAoY3VycmVudE5vbkJyZWFrYWJsZVN0
YXJ0V2lkdGggfHwgbGF5b3V0Qm94LmlzUG9zaXRpb25lZCgpKQotICAgICAgICAgICAgICAgIG5v
bkJyZWFrYWJsZVN0YXJ0V2lkdGggPSBub25CcmVha2FibGVTdGFydFdpZHRoLnZhbHVlT3IoMCkg
KyBjdXJyZW50Tm9uQnJlYWthYmxlU3RhcnRXaWR0aDsKLQogICAgICAgICAgICAgaWYgKCFjb250
YWluZXIuaGFzSW5GbG93T3JGbG9hdGluZ0NoaWxkKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICBsYXlvdXRRdWV1ZS5hcHBlbmQoY29udGFpbmVyLmZpcnN0SW5GbG93T3JG
bG9hdGluZ0NoaWxkKCkpOwpAQCAtMzQ1LDI5ICsyOTUsMTkgQEAgdm9pZCBJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dDo6Y29sbGVjdElubGluZUNvbnRlbnQoSW5saW5lUnVuUHJvdmlkZXImIGlubGlu
ZVJ1blAKIAogICAgICAgICB3aGlsZSAoIWxheW91dFF1ZXVlLmlzRW1wdHkoKSkgewogICAgICAg
ICAgICAgYXV0byYgbGF5b3V0Qm94ID0gKmxheW91dFF1ZXVlLnRha2VMYXN0KCk7Ci0gICAgICAg
ICAgICBpZiAoaXM8Q29udGFpbmVyPihsYXlvdXRCb3gpKSB7Ci0gICAgICAgICAgICAgICAgLy8g
VGhpcyBpcyB0aGUgZW5kIG9mIGFuIGlubGluZSBjb250YWluZXIuIENvbXB1dGUgdGhlIG5vbi1i
cmVha2FibGUgZW5kIHdpZHRoIGFuZCBhZGQgaXQgdG8gdGhlIGxhc3QgaW5saW5lIGJveC4KLSAg
ICAgICAgICAgICAgICAvLyA8c3BhbiBzdHlsZT0icGFkZGluZy1yaWdodDogNXB4Ij5mb29iYXI8
L3NwYW4+IC0+IDVweDsgbGFzdCBpbmxpbmUgaXRlbSAtPiAiZm9vYmFyIgotICAgICAgICAgICAg
ICAgIGF1dG8gY3VycmVudE5vbkJyZWFrYWJsZUVuZFdpZHRoID0gbm9uQnJlYWthYmxlV2lkdGgo
bGF5b3V0Qm94LCBOb25CcmVha2FibGVXaWR0aFR5cGU6OkVuZCk7Ci0gICAgICAgICAgICAgICAg
aWYgKGN1cnJlbnROb25CcmVha2FibGVFbmRXaWR0aCB8fCBsYXlvdXRCb3guaXNQb3NpdGlvbmVk
KCkpCi0gICAgICAgICAgICAgICAgICAgIG5vbkJyZWFrYWJsZUVuZFdpZHRoID0gbm9uQnJlYWth
YmxlRW5kV2lkdGgudmFsdWVPcigwKSArIGN1cnJlbnROb25CcmVha2FibGVFbmRXaWR0aDsKLSAg
ICAgICAgICAgICAgICAvLyBBZGQgaXQgdG8gdGhlIGxhc3QgaW5saW5lIGJveAotICAgICAgICAg
ICAgICAgIGlmIChsYXN0SW5saW5lSXRlbSkgewotICAgICAgICAgICAgICAgICAgICBhZGREZXRh
Y2hpbmdSdWxlcygqbGFzdElubGluZUl0ZW0sIHsgfSwgbm9uQnJlYWthYmxlRW5kV2lkdGgpOwot
ICAgICAgICAgICAgICAgICAgICBub25CcmVha2FibGVFbmRXaWR0aCA9IHsgfTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIExlYWYg
aW5saW5lIGJveAotICAgICAgICAgICAgICAgIGF1dG8mIGlubGluZUl0ZW0gPSBjcmVhdGVBbmRB
cHBlbmRJbmxpbmVJdGVtKGlubGluZVJ1blByb3ZpZGVyLCBpbmxpbmVDb250ZW50LCBsYXlvdXRC
b3gpOwotICAgICAgICAgICAgICAgIC8vIEFkZCBzdGFydCBhbmQgdGhlICh0aHJvdWdoIGVtcHR5
IGNvbnRhaW5lcnMpIGFjY3VtdWxhdGVkIGVuZCB3aWR0aC4KLSAgICAgICAgICAgICAgICAvLyA8
c3BhbiBzdHlsZT0icGFkZGluZy1sZWZ0OiAxcHgiPmZvb2Jhcjwvc3Bhbj4gLT4gbm9uQnJlYWth
YmxlU3RhcnRXaWR0aDogMXB4OwotICAgICAgICAgICAgICAgIC8vIDxzcGFuIHN0eWxlPSJwYWRk
aW5nOiA1cHgiPjwvc3Bhbj5mb29iYXIgLT4gbm9uQnJlYWthYmxlU3RhcnRXaWR0aDogNXB4OyBu
b25CcmVha2FibGVFbmRXaWR0aDogNXB4Ci0gICAgICAgICAgICAgICAgaWYgKG5vbkJyZWFrYWJs
ZVN0YXJ0V2lkdGggfHwgbm9uQnJlYWthYmxlRW5kV2lkdGgpIHsKLSAgICAgICAgICAgICAgICAg
ICAgYWRkRGV0YWNoaW5nUnVsZXMoaW5saW5lSXRlbSwgbm9uQnJlYWthYmxlU3RhcnRXaWR0aC52
YWx1ZU9yKDApICsgbm9uQnJlYWthYmxlRW5kV2lkdGgudmFsdWVPcigwKSwgeyB9KTsKLSAgICAg
ICAgICAgICAgICAgICAgbm9uQnJlYWthYmxlU3RhcnRXaWR0aCA9IHsgfTsKLSAgICAgICAgICAg
ICAgICAgICAgbm9uQnJlYWthYmxlRW5kV2lkdGggPSB7IH07Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGxhc3RJbmxpbmVJdGVtID0gJmlubGluZUl0ZW07CisgICAgICAgICAg
ICAvLyBUaGlzIGlzIHRoZSBlbmQgb2YgYW4gaW5saW5lIGNvbnRhaW5lciAoZS5nLiA8L3NwYW4+
KS4KKyAgICAgICAgICAgIGlmICh0cmVhdEFzSW5saW5lQ29udGFpbmVyKGxheW91dEJveCkpCisg
ICAgICAgICAgICAgICAgZm9ybWF0dGluZ1N0YXRlLmFkZElubGluZUl0ZW0oc3RkOjptYWtlX3Vu
aXF1ZTxJbmxpbmVJdGVtPihsYXlvdXRCb3gsIElubGluZUl0ZW06OlR5cGU6OkNvbnRhaW5lckVu
ZCkpOworICAgICAgICAgICAgZWxzZSBpZiAoaXM8TGluZUJyZWFrQm94PihsYXlvdXRCb3gpKQor
ICAgICAgICAgICAgICAgIGZvcm1hdHRpbmdTdGF0ZS5hZGRJbmxpbmVJdGVtKHN0ZDo6bWFrZV91
bmlxdWU8SW5saW5lSXRlbT4obGF5b3V0Qm94LCBJbmxpbmVJdGVtOjpUeXBlOjpIYXJkTGluZUJy
ZWFrKSk7CisgICAgICAgICAgICBlbHNlIGlmIChsYXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9u
ZWQoKSkKKyAgICAgICAgICAgICAgICBmb3JtYXR0aW5nU3RhdGUuYWRkSW5saW5lSXRlbShzdGQ6
Om1ha2VfdW5pcXVlPElubGluZUl0ZW0+KGxheW91dEJveCwgSW5saW5lSXRlbTo6VHlwZTo6Rmxv
YXQpKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIEFTU0VSVChpczxJbmxp
bmVCb3g+KGxheW91dEJveCkgfHwgbGF5b3V0Qm94LmlzSW5saW5lQmxvY2tCb3goKSk7CisgICAg
ICAgICAgICAgICAgaWYgKGlzPElubGluZUJveD4obGF5b3V0Qm94KSAmJiBkb3duY2FzdDxJbmxp
bmVCb3g+KGxheW91dEJveCkuaGFzVGV4dENvbnRlbnQoKSkKKyAgICAgICAgICAgICAgICAgICAg
SW5saW5lVGV4dEl0ZW06OmNyZWF0ZUFuZEFwcGVuZFRleHRJdGVtcyhmb3JtYXR0aW5nU3RhdGUu
aW5saW5lSXRlbXMoKSwgZG93bmNhc3Q8SW5saW5lQm94PihsYXlvdXRCb3gpKTsKKyAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRpbmdTdGF0ZS5hZGRJbmxp
bmVJdGVtKHN0ZDo6bWFrZV91bmlxdWU8SW5saW5lSXRlbT4obGF5b3V0Qm94LCBJbmxpbmVJdGVt
OjpUeXBlOjpCb3gpKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGF1dG8qIG5l
eHRTaWJsaW5nID0gbGF5b3V0Qm94Lm5leHRJbkZsb3dPckZsb2F0aW5nU2libGluZygpKSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVG
b3JtYXR0aW5nQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRp
bmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaAppbmRleCBhNGZiMzE1ODRhZGY4YjgxZDhkNWM2
MWMzMzcyNjEyYjBkYTkzMjgxLi4yYzMwYjRlZTgyMjRhMzJkMTUzMDk1YjU1YTg3MDM5N2Y2OWVk
NDIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9J
bmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxp
bmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmgKQEAgLTMwLDcgKzMwLDYgQEAK
ICNpbmNsdWRlICJEaXNwbGF5Qm94LmgiCiAjaW5jbHVkZSAiRm9ybWF0dGluZ0NvbnRleHQuaCIK
ICNpbmNsdWRlICJJbmxpbmVGb3JtYXR0aW5nU3RhdGUuaCIKLSNpbmNsdWRlICJJbmxpbmVSdW4u
aCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAg
LTM4LDcgKzM3LDYgQEAgbmFtZXNwYWNlIExheW91dCB7CiAKIGNsYXNzIEZsb2F0aW5nU3RhdGU7
CiBjbGFzcyBJbmxpbmVDb250YWluZXI7Ci1jbGFzcyBJbmxpbmVSdW5Qcm92aWRlcjsKIGNsYXNz
IExpbmU7CiAKIC8vIFRoaXMgY2xhc3MgaW1wbGVtZW50cyB0aGUgbGF5b3V0IGxvZ2ljIGZvciBp
bmxpbmUgZm9ybWF0dGluZyBjb250ZXh0cy4KQEAgLTU1LDIxICs1MywxNiBAQCBwcml2YXRlOgog
ICAgIGNsYXNzIExpbmVMYXlvdXQgewogICAgIHB1YmxpYzoKICAgICAgICAgTGluZUxheW91dChj
b25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYpOwotICAgICAgICB2b2lkIGxheW91dChjb25z
dCBJbmxpbmVSdW5Qcm92aWRlciYpIGNvbnN0OworICAgICAgICB2b2lkIGxheW91dCgpIGNvbnN0
OwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgZW51bSBjbGFzcyBJc0xhc3RMaW5lIHsgTm8sIFll
cyB9OwogICAgICAgICB2b2lkIGluaXRpYWxpemVOZXdMaW5lKExpbmUmKSBjb25zdDsKICAgICAg
ICAgdm9pZCBjbG9zZUxpbmUoTGluZSYsIElzTGFzdExpbmUpIGNvbnN0OwotICAgICAgICB2b2lk
IGFwcGVuZENvbnRlbnRUb0xpbmUoTGluZSYsIGNvbnN0IElubGluZVJ1blByb3ZpZGVyOjpSdW4m
LCBjb25zdCBMYXlvdXRTaXplJikgY29uc3Q7Ci0gICAgICAgIHZvaWQgcG9zdFByb2Nlc3NJbmxp
bmVSdW5zKExpbmUmLCBJc0xhc3RMaW5lKSBjb25zdDsKLSAgICAgICAgdm9pZCBjcmVhdGVGaW5h
bFJ1bnMoTGluZSYpIGNvbnN0OwotICAgICAgICB2b2lkIHNwbGl0SW5saW5lUnVuSWZOZWVkZWQo
Y29uc3QgSW5saW5lUnVuJiwgSW5saW5lUnVucyYgc3BsaXRSdW5zKSBjb25zdDsKKyAgICAgICAg
dm9pZCBjb21taXRJbmxpbmVJdGVtVG9MaW5lKExpbmUmLCBjb25zdCBJbmxpbmVJdGVtJikgY29u
c3Q7CiAgICAgICAgIHZvaWQgY29tcHV0ZUZsb2F0UG9zaXRpb24oY29uc3QgRmxvYXRpbmdDb250
ZXh0JiwgTGluZSYsIGNvbnN0IEJveCYpIGNvbnN0OwotICAgICAgICB2b2lkIHBsYWNlSW5GbG93
UG9zaXRpb25lZENoaWxkcmVuKHVuc2lnbmVkIGZpcnN0UnVuSW5kZXgpIGNvbnN0OwogICAgICAg
ICB2b2lkIGFsaWduUnVucyhUZXh0QWxpZ25Nb2RlLCBMaW5lJiwgSXNMYXN0TGluZSkgY29uc3Q7
Ci0gICAgICAgIHZvaWQgY29tcHV0ZUV4cGFuc2lvbk9wcG9ydHVuaXRpZXMoTGluZSYsIGNvbnN0
IElubGluZVJ1blByb3ZpZGVyOjpSdW4mLCBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpUeXBlIGxh
c3RSdW5UeXBlKSBjb25zdDsKLSAgICAgICAgTGF5b3V0VW5pdCBydW5XaWR0aChjb25zdCBJbmxp
bmVDb250ZW50JiwgY29uc3QgSW5saW5lSXRlbSYsIEl0ZW1Qb3NpdGlvbiBmcm9tLCB1bnNpZ25l
ZCBsZW5ndGgsIExheW91dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0KSBjb25zdDsKKyAgICAgICAg
dm9pZCBjb21wdXRlRXhwYW5zaW9uT3Bwb3J0dW5pdGllcyhMaW5lJiwgY29uc3QgSW5saW5lSXRl
bSYsIGJvb2wgcHJldmlvdXNSdW5Jc1doaXRlcGFjZSkgY29uc3Q7CiAKICAgICBwcml2YXRlOgog
ICAgICAgICBzdGF0aWMgdm9pZCBqdXN0aWZ5UnVucyhMaW5lJik7CkBAIC05MSwxMSArODQsMTIg
QEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbXB1dGVJbnRyaW5zaWNXaWR0aEZvckZsb2F0Qm94KGNv
bnN0IEJveCYpIGNvbnN0OwogICAgIHZvaWQgY29tcHV0ZUludHJpbnNpY1dpZHRoRm9ySW5saW5l
QmxvY2soY29uc3QgQm94JikgY29uc3Q7CiAgICAgdm9pZCBjb21wdXRlV2lkdGhBbmRIZWlnaHRG
b3JSZXBsYWNlZElubGluZUJveChjb25zdCBCb3gmLCBVc2VkSG9yaXpvbnRhbFZhbHVlcykgY29u
c3Q7Ci0gICAgdm9pZCBjb21wdXRlTWFyZ2luKGNvbnN0IEJveCYsIFVzZWRIb3Jpem9udGFsVmFs
dWVzKSBjb25zdDsKKyAgICB2b2lkIGNvbXB1dGVIb3Jpem9udGFsTWFyZ2luKGNvbnN0IEJveCYs
IFVzZWRIb3Jpem9udGFsVmFsdWVzKSBjb25zdDsKICAgICB2b2lkIGNvbXB1dGVIZWlnaHRBbmRN
YXJnaW4oY29uc3QgQm94JikgY29uc3Q7CiAgICAgdm9pZCBjb21wdXRlV2lkdGhBbmRNYXJnaW4o
Y29uc3QgQm94JiwgVXNlZEhvcml6b250YWxWYWx1ZXMpIGNvbnN0OworICAgIHZvaWQgaW5pdGlh
bGl6ZVZlcnRpY2FsTWFyZ2luRm9ySW5saW5lQ29udGFpbmVyKGNvbnN0IEJveCYpIGNvbnN0Owog
Ci0gICAgdm9pZCBjb2xsZWN0SW5saW5lQ29udGVudChJbmxpbmVSdW5Qcm92aWRlciYpIGNvbnN0
OworICAgIHZvaWQgY29sbGVjdElubGluZUNvbnRlbnQoKSBjb25zdDsKIAogICAgIElubGluZUZv
cm1hdHRpbmdTdGF0ZSYgZm9ybWF0dGluZ1N0YXRlKCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8
SW5saW5lRm9ybWF0dGluZ1N0YXRlPihGb3JtYXR0aW5nQ29udGV4dDo6Zm9ybWF0dGluZ1N0YXRl
KCkpOyB9CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1h
dHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0TGluZUxh
eW91dC5jcHAKaW5kZXggN2IxM2FiMGI0ZWJjYmQyNTcxZmU2YzM2OGE4Zjc3MDE2ZmNhYTBlNC4u
NGI2YzRjODFlZmFhOGVlM2I1NzBhN2E1YzZjZmJjMWJkZTE3ZTNhMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRl
eHRMaW5lTGF5b3V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0
dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQuY3BwCkBAIC0zMiw3ICszMiw2
IEBACiAjaW5jbHVkZSAiRmxvYXRpbmdTdGF0ZS5oIgogI2luY2x1ZGUgIklubGluZUZvcm1hdHRp
bmdTdGF0ZS5oIgogI2luY2x1ZGUgIklubGluZUxpbmVCcmVha2VyLmgiCi0jaW5jbHVkZSAiSW5s
aW5lUnVuUHJvdmlkZXIuaCIKICNpbmNsdWRlICJMYXlvdXRCb3guaCIKICNpbmNsdWRlICJMYXlv
dXRDb250YWluZXIuaCIKICNpbmNsdWRlICJMYXlvdXRTdGF0ZS5oIgpAQCAtNDYsMzggKzQ1LDQy
IEBAIHB1YmxpYzoKICAgICB2b2lkIGluaXQoY29uc3QgTGF5b3V0UG9pbnQmIHRvcExlZnQsIExh
eW91dFVuaXQgYXZhaWxhYmxlV2lkdGgsIExheW91dFVuaXQgbWluaW1hbEhlaWdodCk7CiAgICAg
dm9pZCBjbG9zZSgpOwogCi0gICAgdm9pZCBhcHBlbmRDb250ZW50KGNvbnN0IElubGluZVJ1blBy
b3ZpZGVyOjpSdW4mLCBjb25zdCBMYXlvdXRTaXplJik7CisgICAgdm9pZCBhcHBlbmRUZXh0Q29u
dGVudChjb25zdCBJbmxpbmVUZXh0SXRlbSYsIExheW91dFNpemUpOworICAgIHZvaWQgYXBwZW5k
Tm9uVGV4dENvbnRlbnQoY29uc3QgSW5saW5lSXRlbSYsIExheW91dFNpemUsIFVzZWRIb3Jpem9u
dGFsTWFyZ2luKTsKKyAgICB2b2lkIGFwcGVuZE5vbkJyZWFrYWJsZVNwYWNlKGNvbnN0IElubGlu
ZUl0ZW0mKTsKIAotICAgIHZvaWQgYWRqdXN0TG9naWNhbExlZnQoTGF5b3V0VW5pdCBkZWx0YSk7
Ci0gICAgdm9pZCBhZGp1c3RMb2dpY2FsUmlnaHQoTGF5b3V0VW5pdCBkZWx0YSk7CisgICAgdm9p
ZCBhZGp1c3RMb2dpY2FsTGVmdChMYXlvdXRVbml0KTsKKyAgICB2b2lkIGFkanVzdExvZ2ljYWxS
aWdodChMYXlvdXRVbml0KTsKIAotICAgIGJvb2wgaGFzQ29udGVudCgpIGNvbnN0IHsgcmV0dXJu
ICFtX2lubGluZVJ1bnMuaXNFbXB0eSgpOyB9CisgICAgc3RydWN0IFJ1biB7CisgICAgICAgIERp
c3BsYXk6OlJ1biBpbmxpbmVSdW47CisgICAgICAgIGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0
ZW07CisgICAgfTsKKyAgICBWZWN0b3I8UnVuPiYgcnVucygpIHsgcmV0dXJuIG1fcnVuczsgfQor
CisgICAgYm9vbCBoYXNDb250ZW50KCkgY29uc3Q7CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Qg
eyByZXR1cm4gbV9ydW5zLmlzRW1wdHkoKTsgfQorICAgIExheW91dFVuaXQgdHJhaWxpbmdXaGl0
ZXNwYWNlV2lkdGgoKSBjb25zdDsKKyAgICBib29sIGhhc1RyYWlsaW5nV2hpdGVzcGFjZSgpIGNv
bnN0OwogICAgIGJvb2wgaXNDbG9zZWQoKSBjb25zdCB7IHJldHVybiBtX2Nsb3NlZDsgfQogICAg
IGJvb2wgaXNGaXJzdExpbmUoKSBjb25zdCB7IHJldHVybiBtX2lzRmlyc3RMaW5lOyB9Ci0gICAg
VmVjdG9yPElubGluZVJ1bj4mIHJ1bnMoKSB7IHJldHVybiBtX2lubGluZVJ1bnM7IH0KLQotICAg
IExheW91dFVuaXQgY29udGVudExvZ2ljYWxSaWdodCgpIGNvbnN0OwotICAgIExheW91dFVuaXQg
Y29udGVudExvZ2ljYWxMZWZ0KCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsUmVjdC5sZWZ0KCk7
IH0KLSAgICBMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9hdmFp
bGFibGVXaWR0aDsgfQotICAgIE9wdGlvbmFsPElubGluZVJ1blByb3ZpZGVyOjpSdW46OlR5cGU+
IGxhc3RSdW5UeXBlKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0UnVuVHlwZTsgfQogCisgICAgTGF5
b3V0VW5pdCBhdmFpbGFibGVXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZVdpZHRoIC0gbV9s
b2dpY2FsUmVjdC53aWR0aCgpOyB9CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9wKCkgY29uc3Qg
eyByZXR1cm4gbV9sb2dpY2FsUmVjdC50b3AoKTsgfQorICAgIExheW91dFVuaXQgbG9naWNhbExl
ZnQoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxSZWN0LmxlZnQoKTsgfQogICAgIExheW91dFVu
aXQgbG9naWNhbEJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFJlY3QuYm90dG9tKCk7
IH0KKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNh
bFJlY3QucmlnaHQoKTsgfQorCiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0KCkgY29uc3Qg
eyByZXR1cm4gbG9naWNhbEJvdHRvbSgpIC0gbG9naWNhbFRvcCgpOyB9CiAKIHByaXZhdGU6Ci0g
ICAgc3RydWN0IFRyYWlsaW5nVHJpbW1hYmxlQ29udGVudCB7Ci0gICAgICAgIExheW91dFVuaXQg
d2lkdGg7Ci0gICAgICAgIHVuc2lnbmVkIGxlbmd0aDsKLSAgICB9OwotICAgIE9wdGlvbmFsPFRy
YWlsaW5nVHJpbW1hYmxlQ29udGVudD4gbV90cmFpbGluZ1RyaW1tYWJsZUNvbnRlbnQ7Ci0gICAg
T3B0aW9uYWw8SW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6VHlwZT4gbV9sYXN0UnVuVHlwZTsKKyAg
ICB1bnNpZ25lZCBtX251bWJlck9mVHJpbW1hYmxlUnVucyB7IDAgfTsKICAgICBib29sIG1fbGFz
dFJ1bkNhbkV4cGFuZCB7IGZhbHNlIH07CiAKICAgICBEaXNwbGF5OjpCb3g6OlJlY3QgbV9sb2dp
Y2FsUmVjdDsKLSAgICBMYXlvdXRVbml0IG1fYXZhaWxhYmxlV2lkdGg7CisgICAgTGF5b3V0VW5p
dCBtX2xpbmVXaWR0aDsKIAotICAgIFZlY3RvcjxJbmxpbmVSdW4+IG1faW5saW5lUnVuczsKKyAg
ICBWZWN0b3I8UnVuPiBtX3J1bnM7CiAgICAgYm9vbCBtX2lzRmlyc3RMaW5lIHsgdHJ1ZSB9Owog
ICAgIGJvb2wgbV9jbG9zZWQgeyB0cnVlIH07CiB9OwpAQCAtODUsMTA3ICs4OCwxNzggQEAgcHJp
dmF0ZToKIHZvaWQgTGluZTo6aW5pdChjb25zdCBMYXlvdXRQb2ludCYgdG9wTGVmdCwgTGF5b3V0
VW5pdCBhdmFpbGFibGVXaWR0aCwgTGF5b3V0VW5pdCBtaW5pbWFsSGVpZ2h0KQogewogICAgIG1f
bG9naWNhbFJlY3Quc2V0VG9wTGVmdCh0b3BMZWZ0KTsKLSAgICBtX2xvZ2ljYWxSZWN0LnNldFdp
ZHRoKGF2YWlsYWJsZVdpZHRoKTsKKyAgICBtX2xvZ2ljYWxSZWN0LnNldFdpZHRoKDApOwogICAg
IG1fbG9naWNhbFJlY3Quc2V0SGVpZ2h0KG1pbmltYWxIZWlnaHQpOwotICAgIG1fYXZhaWxhYmxl
V2lkdGggPSBhdmFpbGFibGVXaWR0aDsKKyAgICBtX2xpbmVXaWR0aCA9IGF2YWlsYWJsZVdpZHRo
OwogCi0gICAgbV9pbmxpbmVSdW5zLmNsZWFyKCk7Ci0gICAgbV9sYXN0UnVuVHlwZSA9IHsgfTsK
KyAgICBtX3J1bnMuY2xlYXIoKTsKICAgICBtX2xhc3RSdW5DYW5FeHBhbmQgPSBmYWxzZTsKLSAg
ICBtX3RyYWlsaW5nVHJpbW1hYmxlQ29udGVudCA9IHsgfTsKKyAgICBtX251bWJlck9mVHJpbW1h
YmxlUnVucyA9IDA7CiAgICAgbV9jbG9zZWQgPSBmYWxzZTsKIH0KIAotdm9pZCBMaW5lOjphZGp1
c3RMb2dpY2FsTGVmdChMYXlvdXRVbml0IGRlbHRhKQordm9pZCBMaW5lOjpjbG9zZSgpCiB7Ci0g
ICAgQVNTRVJUKGRlbHRhID4gMCk7CisgICAgYXV0byB0cmltVHJhaWxpbmdDb250ZW50ID0gWyZd
IHsKKyAgICAgICAgQVNTRVJUKG1fcnVucy5zaXplKCkpOworICAgICAgICBhdXRvIGxhc3RSdW5J
bmRleCA9IG1fcnVucy5zaXplKCkgLSAxOworICAgICAgICB3aGlsZSAobV9udW1iZXJPZlRyaW1t
YWJsZVJ1bnMpIHsKKyAgICAgICAgICAgIGF1dG8mIGxhc3RSdW4gPSBtX3J1bnNbbGFzdFJ1bklu
ZGV4XTsKKyAgICAgICAgICAgIGlmIChsYXN0UnVuLmlubGluZUl0ZW0uaXNDb250YWluZXJTdGFy
dCgpIHx8IGxhc3RSdW4uaW5saW5lSXRlbS5pc0NvbnRhaW5lckVuZCgpKSB7CisgICAgICAgICAg
ICAgICAgLS1sYXN0UnVuSW5kZXg7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBtX2xvZ2ljYWxSZWN0LmV4cGFuZCgtbGFzdFJ1bi5pbmxpbmVS
dW4ubG9naWNhbFdpZHRoKCksIDApOworICAgICAgICAgICAgbV9ydW5zLnJlbW92ZShsYXN0UnVu
SW5kZXgpOworICAgICAgICAgICAgLS1tX251bWJlck9mVHJpbW1hYmxlUnVuczsKKyAgICAgICAg
ICAgIC0tbGFzdFJ1bkluZGV4OworICAgICAgICB9CisgICAgfTsKIAotICAgIG1fYXZhaWxhYmxl
V2lkdGggLT0gZGVsdGE7Ci0gICAgbV9sb2dpY2FsUmVjdC5zaGlmdExlZnRUbyhtX2xvZ2ljYWxS
ZWN0LmxlZnQoKSArIGRlbHRhKTsKKyAgICBpZiAoaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47
CiAKLSAgICBmb3IgKGF1dG8mIGlubGluZVJ1biA6IG1faW5saW5lUnVucykKLSAgICAgICAgaW5s
aW5lUnVuLm1vdmVIb3Jpem9udGFsbHkoZGVsdGEpOworICAgIHRyaW1UcmFpbGluZ0NvbnRlbnQo
KTsKKyAgICBtX2lzRmlyc3RMaW5lID0gZmFsc2U7CisgICAgbV9jbG9zZWQgPSB0cnVlOwogfQog
Ci12b2lkIExpbmU6OmFkanVzdExvZ2ljYWxSaWdodChMYXlvdXRVbml0IGRlbHRhKQorc3RhdGlj
IGJvb2wgaXNUcmltbWFibGVDb250ZW50KGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0pCiB7
Ci0gICAgQVNTRVJUKGRlbHRhID4gMCk7Ci0KLSAgICBtX2F2YWlsYWJsZVdpZHRoIC09IGRlbHRh
OwotICAgIG1fbG9naWNhbFJlY3Quc2hpZnRSaWdodFRvKG1fbG9naWNhbFJlY3QucmlnaHQoKSAt
IGRlbHRhKTsKKyAgICBpZiAoIWlzPElubGluZVRleHRJdGVtPihpbmxpbmVJdGVtKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8mIGlubGluZVRleHRJdGVtID0gZG93bmNhc3Q8SW5s
aW5lVGV4dEl0ZW0+KGlubGluZUl0ZW0pOworICAgIHJldHVybiBpbmxpbmVUZXh0SXRlbS5pc1do
aXRlc3BhY2UoKSAmJiBpbmxpbmVUZXh0SXRlbS5zdHlsZSgpLmNvbGxhcHNlV2hpdGVTcGFjZSgp
OwogfQogCi1zdGF0aWMgYm9vbCBpc1RyaW1tYWJsZUNvbnRlbnQoY29uc3QgSW5saW5lUnVuUHJv
dmlkZXI6OlJ1biYgaW5saW5lUnVuKQorYm9vbCBMaW5lOjpoYXNUcmFpbGluZ1doaXRlc3BhY2Uo
KSBjb25zdAogewotICAgIHJldHVybiBpbmxpbmVSdW4uaXNXaGl0ZXNwYWNlKCkgJiYgaW5saW5l
UnVuLnN0eWxlKCkuY29sbGFwc2VXaGl0ZVNwYWNlKCk7CisgICAgcmV0dXJuIG1fbnVtYmVyT2ZU
cmltbWFibGVSdW5zOwogfQogCi1MYXlvdXRVbml0IExpbmU6OmNvbnRlbnRMb2dpY2FsUmlnaHQo
KSBjb25zdAorTGF5b3V0VW5pdCBMaW5lOjp0cmFpbGluZ1doaXRlc3BhY2VXaWR0aCgpIGNvbnN0
CiB7Ci0gICAgaWYgKG1faW5saW5lUnVucy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBtX2xv
Z2ljYWxSZWN0LmxlZnQoKTsKKyAgICBpZiAoaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4geyB9
OworICAgIExheW91dFVuaXQgdHJpbW1hYmxlV2lkdGg7CisgICAgYXV0byBudW1iZXJPZlRyaW1t
YWJsZVJ1bnMgPSBtX251bWJlck9mVHJpbW1hYmxlUnVuczsKKyAgICBhdXRvIGxhc3RSdW5JbmRl
eCA9IG1fcnVucy5zaXplKCkgLSAxOworICAgIHdoaWxlIChudW1iZXJPZlRyaW1tYWJsZVJ1bnMp
IHsKKyAgICAgICAgYXV0byYgbGFzdFJ1biA9IG1fcnVuc1tsYXN0UnVuSW5kZXgtLV07CisgICAg
ICAgIGlmIChsYXN0UnVuLmlubGluZUl0ZW0uaXNDb250YWluZXJTdGFydCgpIHx8IGxhc3RSdW4u
aW5saW5lSXRlbS5pc0NvbnRhaW5lckVuZCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIHRyaW1tYWJsZVdpZHRoICs9IGxhc3RSdW4uaW5saW5lUnVuLmxvZ2ljYWxXaWR0aCgpOwor
ICAgICAgICAtLW51bWJlck9mVHJpbW1hYmxlUnVuczsKKyAgICB9CisgICAgcmV0dXJuIHRyaW1t
YWJsZVdpZHRoOworfQogCi0gICAgcmV0dXJuIG1faW5saW5lUnVucy5sYXN0KCkubG9naWNhbFJp
Z2h0KCk7Citib29sIExpbmU6Omhhc0NvbnRlbnQoKSBjb25zdAoreworICAgIGlmIChtX3J1bnMu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZm9yIChhdXRvJiBydW4gOiBt
X3J1bnMpIHsKKyAgICAgICAgaWYgKHJ1bi5pbmxpbmVJdGVtLmlzQ29udGFpbmVyU3RhcnQoKSB8
fCBydW4uaW5saW5lSXRlbS5pc0NvbnRhaW5lckVuZCgpKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIGlmIChydW4uaW5saW5lUnVuLmxvZ2ljYWxXaWR0aCgpKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBMaW5lOjph
cHBlbmRDb250ZW50KGNvbnN0IElubGluZVJ1blByb3ZpZGVyOjpSdW4mIHJ1biwgY29uc3QgTGF5
b3V0U2l6ZSYgcnVuU2l6ZSkKK3ZvaWQgTGluZTo6YXBwZW5kTm9uQnJlYWthYmxlU3BhY2UoY29u
c3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSkKIHsKICAgICBBU1NFUlQoIWlzQ2xvc2VkKCkpOwor
ICAgIC8vIEZJWE1FIGhlaWdodAorICAgIGF1dG8gbG9naWNhbFJlY3QgPSBEaXNwbGF5OjpCb3g6
OlJlY3QgeyBsb2dpY2FsVG9wKCksIGxvZ2ljYWxSaWdodCgpLCBpbmxpbmVJdGVtLndpZHRoKCks
IDAgfTsKKyAgICBtX3J1bnMuYXBwZW5kKHsgRGlzcGxheTo6UnVuIHsgbG9naWNhbFJlY3QsIHsg
fX0sIGlubGluZUl0ZW0gfSk7CisgICAgbV9sb2dpY2FsUmVjdC5leHBhbmQoaW5saW5lSXRlbS53
aWR0aCgpLCAwKTsKKyAgICBtX2xhc3RSdW5DYW5FeHBhbmQgPSBmYWxzZTsKK30KIAotICAgIC8v
IEFwcGVuZCB0aGlzIHRleHQgcnVuIHRvIHRoZSBlbmQgb2YgdGhlIGxhc3QgdGV4dCBydW4sIGlm
IHRoZSBsYXN0IHJ1biBpcyBjb250aW51b3VzLgotICAgIE9wdGlvbmFsPElubGluZVJ1bjo6VGV4
dENvbnRleHQ+IHRleHRSdW47Ci0gICAgaWYgKHJ1bi5pc1RleHQoKSkgewotICAgICAgICBhdXRv
IHRleHRDb250ZXh0ID0gcnVuLnRleHRDb250ZXh0KCk7Ci0gICAgICAgIGF1dG8gcnVuTGVuZ3Ro
ID0gdGV4dENvbnRleHQtPmlzQ29sbGFwc2VkKCkgPyAxIDogdGV4dENvbnRleHQtPmxlbmd0aCgp
OwotICAgICAgICB0ZXh0UnVuID0gSW5saW5lUnVuOjpUZXh0Q29udGV4dCB7IHRleHRDb250ZXh0
LT5zdGFydCgpLCBydW5MZW5ndGggfTsKLSAgICB9Cit2b2lkIExpbmU6OmFwcGVuZFRleHRDb250
ZW50KGNvbnN0IElubGluZVRleHRJdGVtJiBpbmxpbmVJdGVtLCBMYXlvdXRTaXplIHJ1blNpemUp
Cit7CisgICAgYXV0byBpc1RyaW1tYWJsZSA9IGlzVHJpbW1hYmxlQ29udGVudChpbmxpbmVJdGVt
KTsKKworICAgIGF1dG8gc2hvdWxkQ29sbGFwc2UgPSBbJl0oKSB7CisgICAgICAgIGlmICghaXNU
cmltbWFibGUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIC8vIFNraXAgbGVh
ZGluZyB3aGl0ZXNwYWNlLgorICAgICAgICBpZiAoIWhhc0NvbnRlbnQoKSkKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICAvLyBDaGVjayBpZiB0aGUgcHJldmlvdXMgcnVuIGlzIGEg
d2hpdGVzcGFjZSBhbmQgd2hldGhlciB3ZSBjYW4gY29sbGFwc2UgdGhpcyBjdXJyZW50IHJ1bi4K
KyAgICAgICAgQVNTRVJUKCFtX3J1bnMuaXNFbXB0eSgpKTsKKyAgICAgICAgYXV0byBjdXJyZW50
SW5kZXggPSBtX3J1bnMuc2l6ZSgpIC0gMTsKKyAgICAgICAgd2hpbGUgKGN1cnJlbnRJbmRleCkg
eworICAgICAgICAgICAgYXV0byYgY3VycmVudEl0ZW0gPSBtX3J1bnNbY3VycmVudEluZGV4XS5p
bmxpbmVJdGVtOworICAgICAgICAgICAgaWYgKGN1cnJlbnRJdGVtLmlzQ29udGFpbmVyU3RhcnQo
KSB8fCBjdXJyZW50SXRlbS5pc0NvbnRhaW5lckVuZCgpKSB7CisgICAgICAgICAgICAgICAgLS1j
dXJyZW50SW5kZXg7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAoIWN1cnJlbnRJdGVtLmlzVGV4dCgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIC8vIENvbGxhcHNlZCB3aGl0ZXNwYWNlCisgICAgICAg
ICAgICBpZiAoaXNUcmltbWFibGVDb250ZW50KGRvd25jYXN0PElubGluZVRleHRJdGVtPihjdXJy
ZW50SXRlbSkpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9OworCisg
ICAgaWYgKHNob3VsZENvbGxhcHNlKCkpCisgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gcmVx
dWlyZXNOZXdJbmxpbmVSdW4gPSAhaGFzQ29udGVudCgpIHx8ICFydW4uaXNUZXh0KCkgfHwgIW1f
bGFzdFJ1bkNhbkV4cGFuZDsKLSAgICBpZiAocmVxdWlyZXNOZXdJbmxpbmVSdW4pIHsKLSAgICAg
ICAgLy8gRklYTUU6IFRoaXMgbmVlZHMgcHJvcGVyIGJhc2VsaW5lIGhhbmRsaW5nCi0gICAgICAg
IGF1dG8gaW5saW5lUnVuID0gSW5saW5lUnVuIHsgeyBsb2dpY2FsVG9wKCksIGNvbnRlbnRMb2dp
Y2FsUmlnaHQoKSwgcnVuU2l6ZS53aWR0aCgpLCBydW5TaXplLmhlaWdodCgpIH0sIHJ1bi5pbmxp
bmVJdGVtKCkgfTsKLSAgICAgICAgaWYgKHRleHRSdW4pCi0gICAgICAgICAgICBpbmxpbmVSdW4u
c2V0VGV4dENvbnRleHQoeyB0ZXh0UnVuLT5zdGFydCgpLCB0ZXh0UnVuLT5sZW5ndGgoKSB9KTsK
LSAgICAgICAgbV9pbmxpbmVSdW5zLmFwcGVuZChpbmxpbmVSdW4pOworICAgIEFTU0VSVCghaXND
bG9zZWQoKSk7CisgICAgbV9sYXN0UnVuQ2FuRXhwYW5kID0gIWlubGluZUl0ZW0uaXNDb2xsYXBz
ZWQoKTsKKyAgICBtX251bWJlck9mVHJpbW1hYmxlUnVucyA9IGlzVHJpbW1hYmxlID8gbV9udW1i
ZXJPZlRyaW1tYWJsZVJ1bnMgKyAxIDogMDsgCisgICAgYXV0byBydW5MZW5ndGggPSBpbmxpbmVJ
dGVtLmlzQ29sbGFwc2VkKCkgPyAxIDogaW5saW5lSXRlbS5sZW5ndGgoKTsKKworICAgIGF1dG8g
cmVxdWlyZXNOZXdSdW4gPSBpc0VtcHR5KCkgfHwgIW1fbGFzdFJ1bkNhbkV4cGFuZCB8fCAmbV9y
dW5zLmxhc3QoKS5pbmxpbmVJdGVtICE9ICZpbmxpbmVJdGVtOworICAgIGlmIChyZXF1aXJlc05l
d1J1bikgeworICAgICAgICBhdXRvIGRpc3BsYXlSdW5Mb2dpY2FsUmVjdCA9IERpc3BsYXk6OkJv
eDo6UmVjdCB7IGxvZ2ljYWxUb3AoKSwgbG9naWNhbFJpZ2h0KCksIHJ1blNpemUud2lkdGgoKSwg
cnVuU2l6ZS5oZWlnaHQoKSB9OworICAgICAgICBhdXRvIHRleHRDb250ZXh0ID0gRGlzcGxheTo6
UnVuOjpUZXh0Q29udGV4dCB7IGlubGluZUl0ZW0uc3RhcnQoKSwgcnVuTGVuZ3RoIH07CisgICAg
ICAgIGF1dG8gZGlzcGxheVJ1biA9IERpc3BsYXk6OlJ1bihkaXNwbGF5UnVuTG9naWNhbFJlY3Qs
IHRleHRDb250ZXh0KTsKKyAgICAgICAgbV9ydW5zLmFwcGVuZCh7IGRpc3BsYXlSdW4sIGlubGlu
ZUl0ZW0gfSk7CiAgICAgICAgIG1fbG9naWNhbFJlY3Quc2V0SGVpZ2h0KHN0ZDo6bWF4KHJ1blNp
emUuaGVpZ2h0KCksIG1fbG9naWNhbFJlY3QuaGVpZ2h0KCkpKTsKLSAgICB9IGVsc2UgewotICAg
ICAgICAvLyBOb24tdGV4dCBydW5zIGFsd2F5cyByZXF1aXJlIG5ldyBpbmxpbmUgcnVuLgotICAg
ICAgICBBU1NFUlQodGV4dFJ1bik7Ci0gICAgICAgIGF1dG8mIGlubGluZVJ1biA9IG1faW5saW5l
UnVucy5sYXN0KCk7Ci0gICAgICAgIEFTU0VSVChydW5TaXplLmhlaWdodCgpID09IGlubGluZVJ1
bi5sb2dpY2FsSGVpZ2h0KCkpOwotICAgICAgICBpbmxpbmVSdW4uc2V0TG9naWNhbFdpZHRoKGlu
bGluZVJ1bi5sb2dpY2FsV2lkdGgoKSArIHJ1blNpemUud2lkdGgoKSk7Ci0gICAgICAgIGlubGlu
ZVJ1bi50ZXh0Q29udGV4dCgpLT5zZXRMZW5ndGgoaW5saW5lUnVuLnRleHRDb250ZXh0KCktPmxl
bmd0aCgpICsgdGV4dFJ1bi0+bGVuZ3RoKCkpOworICAgICAgICBtX2xvZ2ljYWxSZWN0LmV4cGFu
ZChydW5TaXplLndpZHRoKCksIDApOworICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9h
dmFpbGFibGVXaWR0aCAtPSBydW5TaXplLndpZHRoKCk7Ci0gICAgbV9sYXN0UnVuVHlwZSA9IHJ1
bi50eXBlKCk7Ci0gICAgbV9sYXN0UnVuQ2FuRXhwYW5kID0gcnVuLmlzVGV4dCgpICYmICFydW4u
dGV4dENvbnRleHQoKS0+aXNDb2xsYXBzZWQoKTsKLSAgICBtX3RyYWlsaW5nVHJpbW1hYmxlQ29u
dGVudCA9IHsgfTsKLSAgICBpZiAoaXNUcmltbWFibGVDb250ZW50KHJ1bikpCi0gICAgICAgIG1f
dHJhaWxpbmdUcmltbWFibGVDb250ZW50ID0gVHJhaWxpbmdUcmltbWFibGVDb250ZW50IHsgcnVu
U2l6ZS53aWR0aCgpLCB0ZXh0UnVuLT5sZW5ndGgoKSB9OworICAgIGF1dG8mIGxhc3RJbmxpbmVS
dW4gPSBtX3J1bnMubGFzdCgpLmlubGluZVJ1bjsKKyAgICBBU1NFUlQocnVuU2l6ZS5oZWlnaHQo
KSA9PSBsYXN0SW5saW5lUnVuLmxvZ2ljYWxIZWlnaHQoKSk7CisgICAgbGFzdElubGluZVJ1bi5l
eHBhbmRIb3Jpem9udGFsbHkocnVuU2l6ZS53aWR0aCgpKTsKKyAgICBsYXN0SW5saW5lUnVuLnRl
eHRDb250ZXh0KCktPnNldExlbmd0aChsYXN0SW5saW5lUnVuLnRleHRDb250ZXh0KCktPmxlbmd0
aCgpICsgcnVuTGVuZ3RoKTsKKyAgICBtX2xvZ2ljYWxSZWN0LmV4cGFuZChydW5TaXplLndpZHRo
KCksIDApOwogfQogCi12b2lkIExpbmU6OmNsb3NlKCkKK3ZvaWQgTGluZTo6YXBwZW5kTm9uVGV4
dENvbnRlbnQoY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSwgTGF5b3V0U2l6ZSBydW5TaXpl
LCBVc2VkSG9yaXpvbnRhbE1hcmdpbiBob3Jpem9udGFsTWFyZ2luKQogewotICAgIGF1dG8gdHJp
bVRyYWlsaW5nQ29udGVudCA9IFsmXSB7Ci0gICAgICAgIGlmICghbV90cmFpbGluZ1RyaW1tYWJs
ZUNvbnRlbnQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGF1dG8mIGxhc3RJbmxpbmVS
dW4gPSBtX2lubGluZVJ1bnMubGFzdCgpOwotICAgICAgICBsYXN0SW5saW5lUnVuLnNldExvZ2lj
YWxXaWR0aChsYXN0SW5saW5lUnVuLmxvZ2ljYWxXaWR0aCgpIC0gbV90cmFpbGluZ1RyaW1tYWJs
ZUNvbnRlbnQtPndpZHRoKTsKLSAgICAgICAgbGFzdElubGluZVJ1bi50ZXh0Q29udGV4dCgpLT5z
ZXRMZW5ndGgobGFzdElubGluZVJ1bi50ZXh0Q29udGV4dCgpLT5sZW5ndGgoKSAtIG1fdHJhaWxp
bmdUcmltbWFibGVDb250ZW50LT5sZW5ndGgpOwotCi0gICAgICAgIGlmICghbGFzdElubGluZVJ1
bi50ZXh0Q29udGV4dCgpLT5sZW5ndGgoKSkKLSAgICAgICAgICAgIG1faW5saW5lUnVucy5yZW1v
dmVMYXN0KCk7Ci0gICAgICAgIG1fYXZhaWxhYmxlV2lkdGggKz0gbV90cmFpbGluZ1RyaW1tYWJs
ZUNvbnRlbnQtPndpZHRoOwotICAgICAgICBtX3RyYWlsaW5nVHJpbW1hYmxlQ29udGVudCA9IHsg
fTsKLSAgICB9OworICAgIEFTU0VSVCghaXNDbG9zZWQoKSk7CisKKyAgICBhdXRvIGxvZ2ljYWxS
ZWN0ID0gRGlzcGxheTo6Qm94OjpSZWN0IHsgbG9naWNhbFRvcCgpLCBsb2dpY2FsUmlnaHQoKSAr
IGhvcml6b250YWxNYXJnaW4uc3RhcnQsIHJ1blNpemUud2lkdGgoKSwgcnVuU2l6ZS5oZWlnaHQo
KSB9OworICAgIG1fcnVucy5hcHBlbmQoeyBEaXNwbGF5OjpSdW4geyBsb2dpY2FsUmVjdCwgeyB9
fSwgaW5saW5lSXRlbSB9KTsKKyAgICBtX2xvZ2ljYWxSZWN0LnNldEhlaWdodChzdGQ6Om1heChy
dW5TaXplLmhlaWdodCgpLCBtX2xvZ2ljYWxSZWN0LmhlaWdodCgpKSk7CisgICAgbV9sb2dpY2Fs
UmVjdC5leHBhbmQocnVuU2l6ZS53aWR0aCgpICsgaG9yaXpvbnRhbE1hcmdpbi5zdGFydCArIGhv
cml6b250YWxNYXJnaW4uZW5kLCAwKTsKKworICAgIG1fbGFzdFJ1bkNhbkV4cGFuZCA9IGZhbHNl
OworICAgIG1fbnVtYmVyT2ZUcmltbWFibGVSdW5zID0gMDsKK30KIAotICAgIGlmICghaGFzQ29u
dGVudCgpKQordm9pZCBMaW5lOjphZGp1c3RMb2dpY2FsTGVmdChMYXlvdXRVbml0IGRlbHRhKQor
eworICAgIGlmICghZGVsdGEpCiAgICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQoZGVsdGEgPiAw
KTsKKyAgICBtX2xpbmVXaWR0aC09IGRlbHRhOworICAgIG1fbG9naWNhbFJlY3QubW92ZUhvcml6
b250YWxseShkZWx0YSk7CisgICAgZm9yIChhdXRvJiBydW4gOiBtX3J1bnMpCisgICAgICAgIHJ1
bi5pbmxpbmVSdW4ubW92ZUhvcml6b250YWxseShkZWx0YSk7Cit9CiAKLSAgICB0cmltVHJhaWxp
bmdDb250ZW50KCk7Ci0gICAgbV9pc0ZpcnN0TGluZSA9IGZhbHNlOwotICAgIG1fY2xvc2VkID0g
dHJ1ZTsKK3ZvaWQgTGluZTo6YWRqdXN0TG9naWNhbFJpZ2h0KExheW91dFVuaXQgZGVsdGEpCit7
CisgICAgQVNTRVJUKGRlbHRhID4gMCk7CisgICAgbV9saW5lV2lkdGgtPSBkZWx0YTsKIH0KIAog
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OkxpbmVMYXlvdXQoY29uc3QgSW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQmIGlubGluZUZvcm1hdHRpbmdDb250ZXh0KQpAQCAtMTk2LDY2
ICsyNzAsNjggQEAgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OkxpbmVMYXlv
dXQoY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIGkKIHsKIH0KIAotc3RhdGljIGJvb2wg
aXNUcmltbWFibGVDb250ZW50KGNvbnN0IElubGluZUxpbmVCcmVha2VyOjpSdW4mIHJ1bikKK3Zv
aWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OmxheW91dCgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIHJ1bi5jb250ZW50LmlzV2hpdGVzcGFjZSgpICYmIHJ1bi5jb250ZW50LnN0
eWxlKCkuY29sbGFwc2VXaGl0ZVNwYWNlKCk7Ci19Ci0KLXZvaWQgSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQ6OkxpbmVMYXlvdXQ6OmxheW91dChjb25zdCBJbmxpbmVSdW5Qcm92aWRlciYgaW5saW5l
UnVuUHJvdmlkZXIpIGNvbnN0Ci17Ci0gICAgYXV0byYgbGF5b3V0U3RhdGUgPSBtX2Zvcm1hdHRp
bmdDb250ZXh0LmxheW91dFN0YXRlKCk7CisgICAgYXV0byYgaW5saW5lQ29udGVudCA9IG1fZm9y
bWF0dGluZ1N0YXRlLmlubGluZUl0ZW1zKCk7CiAgICAgYXV0byBmbG9hdGluZ0NvbnRleHQgPSBG
bG9hdGluZ0NvbnRleHQgeyBtX2Zsb2F0aW5nU3RhdGUgfTsKIAogICAgIExpbmUgbGluZTsKICAg
ICBpbml0aWFsaXplTmV3TGluZShsaW5lKTsKKyAgICBWZWN0b3I8SW5saW5lSXRlbSo+IHVuY29t
bWl0dGVkSXRlbXM7CisgICAgTGF5b3V0VW5pdCB1bmNvbW1pdHRlZFdpZHRoID0gMDsKKworICAg
IGF1dG8gY29tbWl0UGVuZGluZ0NvbnRlbnQgPSBbJl0geworICAgICAgICBmb3IgKGF1dG8qIHVu
Y29tbWl0dGVkIDogdW5jb21taXR0ZWRJdGVtcykKKyAgICAgICAgICAgIGNvbW1pdElubGluZUl0
ZW1Ub0xpbmUobGluZSwgKnVuY29tbWl0dGVkKTsKKyAgICAgICAgdW5jb21taXR0ZWRJdGVtcy5j
bGVhcigpOworICAgICAgICB1bmNvbW1pdHRlZFdpZHRoID0gMDsKKyAgICB9OwogCi0gICAgSW5s
aW5lTGluZUJyZWFrZXIgbGluZUJyZWFrZXIobGF5b3V0U3RhdGUsIG1fZm9ybWF0dGluZ1N0YXRl
LmlubGluZUNvbnRlbnQoKSwgaW5saW5lUnVuUHJvdmlkZXIucnVucygpKTsKLSAgICB3aGlsZSAo
YXV0byBydW4gPSBsaW5lQnJlYWtlci5uZXh0UnVuKGxpbmUuY29udGVudExvZ2ljYWxSaWdodCgp
LCBsaW5lLmF2YWlsYWJsZVdpZHRoKCksICFsaW5lLmhhc0NvbnRlbnQoKSkpIHsKLSAgICAgICAg
YXV0byBpc0ZpcnN0UnVuID0gcnVuLT5wb3NpdGlvbiA9PSBJbmxpbmVMaW5lQnJlYWtlcjo6UnVu
OjpQb3NpdGlvbjo6TGluZUJlZ2luOwotICAgICAgICBhdXRvIGlzTGFzdFJ1biA9IHJ1bi0+cG9z
aXRpb24gPT0gSW5saW5lTGluZUJyZWFrZXI6OlJ1bjo6UG9zaXRpb246OkxpbmVFbmQ7Ci0gICAg
ICAgIGF1dG8gZ2VuZXJhdGVzSW5saW5lUnVuID0gdHJ1ZTsKKyAgICBMaW5lQnJlYWtlciBsaW5l
QnJlYWtlcihtX2Zvcm1hdHRpbmdDb250ZXh0LmxheW91dFN0YXRlKCkpOworICAgIGZvciAoYXV0
byYgaW5saW5lSXRlbSA6IGlubGluZUNvbnRlbnQpIHsKKyAgICAgICAgLy8gMS4gU2ltcGx5IGFk
ZCBub24tYnJlYWthYmxlIHNwYWNlcyB0byB0aGUgY3VycmVudCBsaW5lLiBUaGV5IGRvbid0IHdy
YXAuCisgICAgICAgIC8vIDIuIE5vcm1hbCBpbmxpbmUgYm94ZXMgZWl0aGVyIGdvIG9uIHRoZSBj
dXJyZW50IG9yIHdyYXAvYnJlYWsgdG8gdGhlIG5leHQgbGluZS4KKyAgICAgICAgLy8gMy4gRmxv
YXRzIGFyZSBzcGVjaWFsLiBUaGV5IGNvbnN0cmFpbiB0aGUgbGluZXMgaW5zdGVhZCBvZiBiZWlu
ZyBvbiB0aGVtLgorICAgICAgICBhdXRvIGF2YWlsYWJsZVdpZHRoID0gbGluZS5hdmFpbGFibGVX
aWR0aCgpIC0gdW5jb21taXR0ZWRXaWR0aDsKKyAgICAgICAgYXV0byBjdXJyZW50TG9naWNhbFJp
Z2h0ID0gbGluZS5sb2dpY2FsUmlnaHQoKSArIHVuY29tbWl0dGVkV2lkdGg7CisgICAgICAgIGF1
dG8gYnJlYWtpbmdDb250ZXh0ID0gbGluZUJyZWFrZXIuYnJlYWtpbmdDb250ZXh0KCppbmxpbmVJ
dGVtLCB7IGF2YWlsYWJsZVdpZHRoLCBjdXJyZW50TG9naWNhbFJpZ2h0LCBsaW5lLnRyYWlsaW5n
V2hpdGVzcGFjZVdpZHRoKCksICFsaW5lLmhhc0NvbnRlbnQoKSB9KTsKKyAgICAgICAgaWYgKGJy
ZWFraW5nQ29udGV4dC5pc0F0QnJlYWtpbmdPcHBvcnR1bml0eSkKKyAgICAgICAgICAgIGNvbW1p
dFBlbmRpbmdDb250ZW50KCk7CisKKyAgICAgICAgaWYgKGJyZWFraW5nQ29udGV4dC5icmVha2lu
Z0JlaGF2aW9yID09IExpbmVCcmVha2VyOjpCcmVha2luZ0JlaGF2aW9yOjpCcmVhaykgeworICAg
ICAgICAgICAgQVNTRVJUX05PVF9JTVBMRU1FTlRFRF9ZRVQoKTsKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICB9CiAKLSAgICAgICAgLy8gUG9zaXRpb24gZmxvYXQgYW5kIGFkanVzdCB0
aGUgcnVucyBvbiBsaW5lLgotICAgICAgICBpZiAocnVuLT5jb250ZW50LmlzRmxvYXQoKSkgewot
ICAgICAgICAgICAgYXV0byYgZmxvYXRCb3ggPSBydW4tPmNvbnRlbnQuaW5saW5lSXRlbSgpLmxh
eW91dEJveCgpOworICAgICAgICBpZiAoYnJlYWtpbmdDb250ZXh0LmJyZWFraW5nQmVoYXZpb3Ig
PT0gTGluZUJyZWFrZXI6OkJyZWFraW5nQmVoYXZpb3I6OldyYXApIHsKKyAgICAgICAgICAgIGNs
b3NlTGluZShsaW5lLCBJc0xhc3RMaW5lOjpObyk7CisgICAgICAgICAgICBpbml0aWFsaXplTmV3
TGluZShsaW5lKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpbmxpbmVJdGVtLT5pc0Zsb2F0
KCkpIHsKKyAgICAgICAgICAgIGF1dG8mIGZsb2F0Qm94ID0gaW5saW5lSXRlbS0+bGF5b3V0Qm94
KCk7CiAgICAgICAgICAgICBjb21wdXRlRmxvYXRQb3NpdGlvbihmbG9hdGluZ0NvbnRleHQsIGxp
bmUsIGZsb2F0Qm94KTsKICAgICAgICAgICAgIG1fZmxvYXRpbmdTdGF0ZS5hcHBlbmQoZmxvYXRC
b3gpOwotCi0gICAgICAgICAgICBhdXRvIGZsb2F0Qm94V2lkdGggPSBsYXlvdXRTdGF0ZS5kaXNw
bGF5Qm94Rm9yTGF5b3V0Qm94KGZsb2F0Qm94KS5tYXJnaW5Cb3goKS53aWR0aCgpOwogICAgICAg
ICAgICAgLy8gU2hyaW5rIGF2YWlsYmxlIHNwYWNlIGZvciBjdXJyZW50IGxpbmUgYW5kIG1vdmUg
ZXhpc3RpbmcgaW5saW5lIHJ1bnMuCisgICAgICAgICAgICBhdXRvIGZsb2F0Qm94V2lkdGggPSBp
bmxpbmVJdGVtLT53aWR0aCgpOwogICAgICAgICAgICAgZmxvYXRCb3guaXNMZWZ0RmxvYXRpbmdQ
b3NpdGlvbmVkKCkgPyBsaW5lLmFkanVzdExvZ2ljYWxMZWZ0KGZsb2F0Qm94V2lkdGgpIDogbGlu
ZS5hZGp1c3RMb2dpY2FsUmlnaHQoZmxvYXRCb3hXaWR0aCk7Ci0KLSAgICAgICAgICAgIGdlbmVy
YXRlc0lubGluZVJ1biA9IGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gMS4gSW5pdGlh
bGl6ZSBuZXcgbGluZSBpZiBuZWVkZWQuCi0gICAgICAgIC8vIDIuIEFwcGVuZCBpbmxpbmUgcnVu
IHVubGVzcyBpdCBpcyBza2lwcGVkLgotICAgICAgICAvLyAzLiBDbG9zZSBjdXJyZW50IGxpbmUg
aWYgbmVlZGVkLgotICAgICAgICBpZiAoaXNGaXJzdFJ1bikgewotICAgICAgICAgICAgLy8gV2hl
biB0aGUgZmlyc3QgcnVuIGRvZXMgbm90IGdlbmVyYXRlIGFuIGFjdHVhbCBpbmxpbmUgcnVuLCB0
aGUgbmV4dCBydW4gY29tZXMgaW4gZmlyc3QtcnVuIGFzIHdlbGwuCi0gICAgICAgICAgICAvLyBO
byBuZWVkIHRvIHNwZW5kIHRpbWUgb24gY2xvc2luZy9pbml0aWFsaXppbmcuCi0gICAgICAgICAg
ICAvLyBTa2lwIGxlYWRpbmcgd2hpdGVzcGFjZS4KLSAgICAgICAgICAgIGlmICghZ2VuZXJhdGVz
SW5saW5lUnVuIHx8IGlzVHJpbW1hYmxlQ29udGVudCgqcnVuKSkKLSAgICAgICAgICAgICAgICBj
b250aW51ZTsKLQotICAgICAgICAgICAgaWYgKGxpbmUuaGFzQ29udGVudCgpKSB7Ci0gICAgICAg
ICAgICAgICAgLy8gUHJldmlvdXMgcnVuIGVuZGVkIHVwIGJlaW5nIGF0IHRoZSBsaW5lIGVuZC4g
QWRqdXN0IHRoZSBsaW5lIGFjY29yZGluZ2x5LgotICAgICAgICAgICAgICAgIGlmICghbGluZS5p
c0Nsb3NlZCgpKQotICAgICAgICAgICAgICAgICAgICBjbG9zZUxpbmUobGluZSwgSXNMYXN0TGlu
ZTo6Tm8pOwotICAgICAgICAgICAgICAgIGluaXRpYWxpemVOZXdMaW5lKGxpbmUpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGJyZWFraW5nQ29udGV4dC5pc0F0QnJlYWtpbmdP
cHBvcnR1bml0eSkKKyAgICAgICAgICAgICAgICBjb21taXRJbmxpbmVJdGVtVG9MaW5lKGxpbmUs
ICppbmxpbmVJdGVtKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHVuY29t
bWl0dGVkSXRlbXMuYXBwZW5kKGlubGluZUl0ZW0uZ2V0KCkpOworICAgICAgICAgICAgICAgIHVu
Y29tbWl0dGVkV2lkdGggKz0gaW5saW5lSXRlbS0+d2lkdGgoKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQotCi0gICAgICAgIGlmIChnZW5lcmF0ZXNJbmxpbmVSdW4pIHsKLSAgICAgICAgICAg
IGF1dG8gd2lkdGggPSBydW4tPndpZHRoOwotICAgICAgICAgICAgYXV0byBoZWlnaHQgPSBydW4t
PmNvbnRlbnQuaXNUZXh0KCkgPyBMYXlvdXRVbml0KG1fZm9ybWF0dGluZ1Jvb3Quc3R5bGUoKS5j
b21wdXRlZExpbmVIZWlnaHQoKSkgOiBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94
KHJ1bi0+Y29udGVudC5pbmxpbmVJdGVtKCkubGF5b3V0Qm94KCkpLmhlaWdodCgpOyAKLSAgICAg
ICAgICAgIGFwcGVuZENvbnRlbnRUb0xpbmUobGluZSwgcnVuLT5jb250ZW50LCB7IHdpZHRoLCBo
ZWlnaHQgfSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaXNMYXN0UnVuKQorICAgIH0KKyAg
ICAvLyBQcm9jZXNzIHJlbWFpbmluZyB1bmNvbW1pdHRlZCBjb250ZW50LgorICAgIGlmICghdW5j
b21taXR0ZWRJdGVtcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKGxpbmUuYXZhaWxhYmxlV2lk
dGgoKSA8IHVuY29tbWl0dGVkV2lkdGgpIHsKICAgICAgICAgICAgIGNsb3NlTGluZShsaW5lLCBJ
c0xhc3RMaW5lOjpObyk7CisgICAgICAgICAgICBpbml0aWFsaXplTmV3TGluZShsaW5lKTsKKyAg
ICAgICAgfQorICAgICAgICBjb21taXRQZW5kaW5nQ29udGVudCgpOwogICAgIH0KLQogICAgIGNs
b3NlTGluZShsaW5lLCBJc0xhc3RMaW5lOjpZZXMpOwogfQogCkBAIC0yOTQsMTUyICszNzAsODIg
QEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6aW5pdGlhbGl6ZU5l
d0xpbmUoTGluZSYgbGluZSkgY29uc3QKICAgICBsaW5lLmluaXQoeyBsaW5lTG9naWNhbExlZnQs
IGxpbmVMb2dpY2FsVG9wIH0sIGF2YWlsYWJsZVdpZHRoLCBtX2Zvcm1hdHRpbmdSb290LnN0eWxl
KCkuY29tcHV0ZWRMaW5lSGVpZ2h0KCkpOwogfQogCi12b2lkIElubGluZUZvcm1hdHRpbmdDb250
ZXh0OjpMaW5lTGF5b3V0OjpzcGxpdElubGluZVJ1bklmTmVlZGVkKGNvbnN0IElubGluZVJ1biYg
aW5saW5lUnVuLCBJbmxpbmVSdW5zJiBzcGxpdFJ1bnMpIGNvbnN0Cit2b2lkIElubGluZUZvcm1h
dHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpjbG9zZUxpbmUoTGluZSYgbGluZSwgSXNMYXN0TGlu
ZSBpc0xhc3RMaW5lKSBjb25zdAogewotICAgIEFTU0VSVChpbmxpbmVSdW4udGV4dENvbnRleHQo
KSk7Ci0gICAgQVNTRVJUKGlubGluZVJ1bi5vdmVybGFwc011bHRpcGxlSW5saW5lSXRlbXMoKSk7
Ci0gICAgLy8gSW4gY2VydGFpbiBjYXNlcywgYSBydW4gY2FuIG92ZXJsYXAgbXVsdGlwbGUgaW5s
aW5lIGVsZW1lbnRzIGxpa2UgdGhpczoKLSAgICAvLyA8c3Bhbj5ub3JtYWwgdGV4dCBjb250ZW50
PC9zcGFuPjxzcGFuIHN0eWxlPSJwb3NpdGlvbjogcmVsYXRpdmU7IGxlZnQ6IDEwcHg7Ij5idXQg
dGhpcyBvbmUgbmVlZHMgYSBkZWRpY2F0ZWQgcnVuPC9zcGFuPjxzcGFuPmVuZCBvZiB0ZXh0PC9z
cGFuPgotICAgIC8vIFRoZSBjb250ZW50IGFib3ZlIGdlbmVyYXRlcyBvbmUgbG9uZyBydW4gPG5v
cm1hbCB0ZXh0IGNvbnRlbnRidXQgdGhpcyBvbmUgbmVlZHMgZGVkaWNhdGVkIHJ1bmVuZCBvZiB0
ZXh0PgotICAgIC8vIEhvd2V2ZXIsIHNpbmNlIHRoZSBtaWRkbGUgcnVuIGlzIHBvc2l0aW9uZWQs
IGl0IG5lZWRzIHRvIGJlIG1vdmVkIGluZGVwZW5kZW50bHkgZnJvbSB0aGUgcmVzdCBvZiB0aGUg
Y29udGVudCwgaGVuY2UgaXQgbmVlZHMgYSBkZWRpY2F0ZWQgaW5saW5lIHJ1bi4KLQotICAgIC8v
IDEuIFN0YXJ0IHdpdGggdGhlIGZpcnN0IGlubGluZSBpdGVtIChlbGVtZW50KSBhbmQgdHJhdmVy
cyB0aGUgbGlzdCB1bnRpbAotICAgIC8vIDIuIGVpdGhlciBmaW5kIGFuIGlubGluZSBpdGVtIHRo
YXQgbmVlZHMgYSBkZWRpY2F0ZWQgcnVuIG9yIHdlIHJlYWNoIHRoZSBlbmQgb2YgdGhlIHJ1bgot
ICAgIC8vIDMuIENyZWF0ZSBkZWRpY2F0ZSBpbmxpbmUgcnVucy4KLSAgICBhdXRvJiBpbmxpbmVD
b250ZW50ID0gbV9mb3JtYXR0aW5nU3RhdGUuaW5saW5lQ29udGVudCgpOwotICAgIGF1dG8gY29u
dGVudFN0YXJ0ID0gaW5saW5lUnVuLmxvZ2ljYWxMZWZ0KCk7Ci0gICAgYXV0byBzdGFydFBvc2l0
aW9uID0gaW5saW5lUnVuLnRleHRDb250ZXh0KCktPnN0YXJ0KCk7Ci0gICAgYXV0byByZW1hbmlu
Z0xlbmd0aCA9IGlubGluZVJ1bi50ZXh0Q29udGV4dCgpLT5sZW5ndGgoKTsKLQotICAgIHN0cnVj
dCBVbmNvbW1pdHRlZCB7Ci0gICAgICAgIGNvbnN0IElubGluZUl0ZW0qIGZpcnN0SW5saW5lSXRl
bSB7IG51bGxwdHIgfTsKLSAgICAgICAgY29uc3QgSW5saW5lSXRlbSogbGFzdElubGluZUl0ZW0g
eyBudWxscHRyIH07Ci0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCB7IDAgfTsKLSAgICB9OwotICAg
IE9wdGlvbmFsPFVuY29tbWl0dGVkPiB1bmNvbW1pdHRlZDsKLQotICAgIGF1dG8gY29tbWl0ID0g
WyZdIHsKLSAgICAgICAgaWYgKCF1bmNvbW1pdHRlZCkKLSAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICBjb250ZW50U3RhcnQgKz0gdW5jb21taXR0ZWQtPmZpcnN0SW5saW5lSXRlbS0+bm9u
QnJlYWthYmxlU3RhcnQoKTsKLQotICAgICAgICBhdXRvIHJ1bldpZHRoID0gdGhpcy0+cnVuV2lk
dGgoaW5saW5lQ29udGVudCwgKnVuY29tbWl0dGVkLT5maXJzdElubGluZUl0ZW0sIHN0YXJ0UG9z
aXRpb24sIHVuY29tbWl0dGVkLT5sZW5ndGgsIGNvbnRlbnRTdGFydCk7Ci0gICAgICAgIGF1dG8g
cnVuID0gSW5saW5lUnVuIHsgeyBpbmxpbmVSdW4ubG9naWNhbFRvcCgpLCBjb250ZW50U3RhcnQs
IHJ1bldpZHRoLCBpbmxpbmVSdW4ubG9naWNhbEhlaWdodCgpIH0sICp1bmNvbW1pdHRlZC0+Zmly
c3RJbmxpbmVJdGVtIH07Ci0gICAgICAgIHJ1bi5zZXRUZXh0Q29udGV4dCh7IHN0YXJ0UG9zaXRp
b24sIHVuY29tbWl0dGVkLT5sZW5ndGggfSk7Ci0gICAgICAgIHNwbGl0UnVucy5hcHBlbmQocnVu
KTsKLQotICAgICAgICBjb250ZW50U3RhcnQgKz0gcnVuV2lkdGggKyB1bmNvbW1pdHRlZC0+bGFz
dElubGluZUl0ZW0tPm5vbkJyZWFrYWJsZUVuZCgpOwotCi0gICAgICAgIHN0YXJ0UG9zaXRpb24g
PSAwOwotICAgICAgICB1bmNvbW1pdHRlZCA9IHsgfTsKLSAgICB9OwotCi0gICAgZm9yIChhdXRv
IGl0ZXJhdG9yID0gaW5saW5lQ29udGVudC5maW5kKGNvbnN0X2Nhc3Q8SW5saW5lSXRlbSo+KCZp
bmxpbmVSdW4uaW5saW5lSXRlbSgpKSk7IGl0ZXJhdG9yICE9IGlubGluZUNvbnRlbnQuZW5kKCkg
JiYgcmVtYW5pbmdMZW5ndGggPiAwOyArK2l0ZXJhdG9yKSB7Ci0gICAgICAgIGF1dG8mIGlubGlu
ZUl0ZW0gPSAqKml0ZXJhdG9yOworICAgIGxpbmUuY2xvc2UoKTsKKyAgICBpZiAobGluZS5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybjsKIAotICAgICAgICAvLyBTa2lwIGFsbCBub24taW5mbG93
IGJveGVzIChmbG9hdHMsIG91dC1vZi1mbG93IHBvc2l0aW9uZWQgZWxlbWVudHMpLiBUaGV5IGRv
bid0IHBhcnRpY2lwYXRlIGluIHRoZSBpbmxpbmUgcnVuIGNvbnRleHQuCi0gICAgICAgIGlmICgh
aW5saW5lSXRlbS5sYXlvdXRCb3goKS5pc0luRmxvdygpKQorICAgIGF1dG8mIGxheW91dFN0YXRl
ID0gbV9mb3JtYXR0aW5nQ29udGV4dC5sYXlvdXRTdGF0ZSgpOworICAgIGFsaWduUnVucyhtX2Zv
cm1hdHRpbmdSb290LnN0eWxlKCkudGV4dEFsaWduKCksIGxpbmUsIGlzTGFzdExpbmUpOworICAg
IAorICAgIGF1dG8mIHJ1bnMgPSBsaW5lLnJ1bnMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4
ID0gMDsgaW5kZXggPCBydW5zLnNpemUoKTsgKytpbmRleCkgeworICAgICAgICBhdXRvJiBydW4g
PSBydW5zLmF0KGluZGV4KTsKKyAgICAgICAgYXV0byYgbGF5b3V0Qm94ID0gcnVuLmlubGluZUl0
ZW0ubGF5b3V0Qm94KCk7CisgICAgICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBsYXlvdXRTdGF0ZS5k
aXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7CisKKyAgICAgICAgaWYgKHJ1bi5pbmxp
bmVJdGVtLmlzQ29udGFpbmVyU3RhcnQoKSB8fCBydW4uaW5saW5lSXRlbS5pc0JveCgpKSB7Cisg
ICAgICAgICAgICAvLyBTZXQgaW5saW5lIGNvbnRhaW5lcidzIGxvZ2ljYWwgdG9wbGVmdCBwb3Np
dGlvbiAtdGFraW5nIHJlbGF0aXZlIHBvc2l0aW9uaW5nIGludG8gYWNjb3VudC4KKyAgICAgICAg
ICAgIGF1dG8gdG9wTGVmdCA9IHJ1bi5pbmxpbmVSdW4ubG9naWNhbFRvcExlZnQoKTsKKyAgICAg
ICAgICAgIGlmIChsYXlvdXRCb3guaXNJbkZsb3dQb3NpdGlvbmVkKCkpCisgICAgICAgICAgICAg
ICAgdG9wTGVmdCArPSBHZW9tZXRyeTo6aW5GbG93UG9zaXRpb25lZFBvc2l0aW9uT2Zmc2V0KGxh
eW91dFN0YXRlLCBsYXlvdXRCb3gpOworICAgICAgICAgICAgZGlzcGxheUJveC5zZXRUb3BMZWZ0
KHRvcExlZnQpOworCisgICAgICAgICAgICBpZiAocnVuLmlubGluZUl0ZW0uaXNCb3goKSkKKyAg
ICAgICAgICAgICAgICBtX2Zvcm1hdHRpbmdTdGF0ZS5hZGRJbmxpbmVSdW4oc3RkOjptYWtlX3Vu
aXF1ZTxEaXNwbGF5OjpSdW4+KHJ1bi5pbmxpbmVSdW4pKTsKICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICB9CiAKLSAgICAgICAgYXV0byBjdXJyZW50TGVuZ3RoID0gWyZdIHsKLSAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om1pbihyZW1hbmluZ0xlbmd0aCwgaW5saW5lSXRlbS50ZXh0Q29u
dGVudCgpLmxlbmd0aCgpIC0gc3RhcnRQb3NpdGlvbik7Ci0gICAgICAgIH07Ci0KLSAgICAgICAg
Ly8gMS4gQnJlYWsgYmVmb3JlL2FmdGVyIC0+IHJlcXVpcmVzIGRlZGljYXRlZCBydW4gLT4gY29t
bWl0IHdoYXQgd2UndmUgZ290IHNvIGZhciBhbmQgYWxzbyBjb21taXQgdGhlIGN1cnJlbnQgaW5s
aW5lIGVsZW1lbnQgYXMgYSBzZXBhcmF0ZSBpbmxpbmUgcnVuLgotICAgICAgICAvLyAyLiBCcmVh
ayBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBpbmxpbmUgZWxlbWVudCAtPiBjb21taXQgd2hhdCB3
ZSd2ZSBnb3Qgc28gZmFyLiBDdXJyZW50IGVsZW1lbnQgYmVjb21lcyB0aGUgZmlyc3QgdW5jb21t
aXR0ZWQuCi0gICAgICAgIC8vIDMuIEJyZWFrIGF0IHRoZSBlbmQgb2YgdGhlIGlubGluZSBlbGVt
ZW50IC0+IGNvbW1pdCB3aGF0IHdlJ3ZlIGdvdCBzbyBmYXIgaW5jbHVkaW5nIHRoZSBjdXJyZW50
IGVsZW1lbnQuCi0gICAgICAgIC8vIDQuIElubGluZSBlbGVtZW50IGRvZXMgbm90IHJlcXVpcmUg
cnVuIGJyZWFraW5nIC0+IGFkZCBjdXJyZW50IGlubGluZSBlbGVtZW50IHRvIHVuY29tbWl0dGVk
LiBKdW1wIHRvIHRoZSBuZXh0IGVsZW1lbnQuCi0gICAgICAgIGF1dG8gZGV0YWNoaW5nUnVsZXMg
PSBpbmxpbmVJdGVtLmRldGFjaGluZ1J1bGVzKCk7Ci0KLSAgICAgICAgLy8gIzEKLSAgICAgICAg
aWYgKGRldGFjaGluZ1J1bGVzLmNvbnRhaW5zQWxsKHsgSW5saW5lSXRlbTo6RGV0YWNoaW5nUnVs
ZTo6QnJlYWtBdFN0YXJ0LCBJbmxpbmVJdGVtOjpEZXRhY2hpbmdSdWxlOjpCcmVha0F0RW5kIH0p
KSB7Ci0gICAgICAgICAgICBjb21taXQoKTsKLSAgICAgICAgICAgIGF1dG8gY29udGVudExlbmd0
aCA9IGN1cnJlbnRMZW5ndGgoKTsKLSAgICAgICAgICAgIHVuY29tbWl0dGVkID0gVW5jb21taXR0
ZWQgeyAmaW5saW5lSXRlbSwgJmlubGluZUl0ZW0sIGNvbnRlbnRMZW5ndGggfTsKLSAgICAgICAg
ICAgIHJlbWFuaW5nTGVuZ3RoIC09IGNvbnRlbnRMZW5ndGg7Ci0gICAgICAgICAgICBjb21taXQo
KTsKKyAgICAgICAgaWYgKHJ1bi5pbmxpbmVJdGVtLmlzQ29udGFpbmVyRW5kKCkpIHsKKyAgICAg
ICAgICAgIC8vIFNldCBpbmxpbmUgY29udGFpbmVyJ3Mgd2lkdGggYW5kIGhlaWdodC4KKyAgICAg
ICAgICAgIGF1dG8gbWFyZ2luQm94V2lkdGggPSBydW4uaW5saW5lUnVuLmxvZ2ljYWxMZWZ0KCkg
LSBkaXNwbGF5Qm94LmxlZnQoKTsKKyAgICAgICAgICAgIGF1dG8gY29udGVudEJveFdpZHRoID0g
bWFyZ2luQm94V2lkdGggLSAoZGlzcGxheUJveC5tYXJnaW5TdGFydCgpICsgZGlzcGxheUJveC5i
b3JkZXJMZWZ0KCkgKyBkaXNwbGF5Qm94LnBhZGRpbmdMZWZ0KCkudmFsdWVPcigwKSk7CisgICAg
ICAgICAgICAvLyBGSVhNRSBmaXggaXQgZm9yIG11bHRpbGluZS4KKyAgICAgICAgICAgIGRpc3Bs
YXlCb3guc2V0Q29udGVudEJveFdpZHRoKGNvbnRlbnRCb3hXaWR0aCk7CisgICAgICAgICAgICAv
LyBGSVhNRTogaGVpZ2h0CisgICAgICAgICAgICBkaXNwbGF5Qm94LnNldENvbnRlbnRCb3hIZWln
aHQobGluZS5sb2dpY2FsSGVpZ2h0KCkpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IH0KIAotICAgICAgICAvLyAjMgotICAgICAgICBpZiAoZGV0YWNoaW5nUnVsZXMuY29udGFpbnMo
SW5saW5lSXRlbTo6RGV0YWNoaW5nUnVsZTo6QnJlYWtBdFN0YXJ0KSkKLSAgICAgICAgICAgIGNv
bW1pdCgpOwotCi0gICAgICAgIC8vIEFkZCBjdXJyZW50IGlubGluZSBpdGVtIHRvIHVuY29tbWl0
dGVkLgotICAgICAgICAvLyAjMyBhbmQgIzQKLSAgICAgICAgYXV0byBjb250ZW50TGVuZ3RoID0g
Y3VycmVudExlbmd0aCgpOwotICAgICAgICBpZiAoIXVuY29tbWl0dGVkKQotICAgICAgICAgICAg
dW5jb21taXR0ZWQgPSBVbmNvbW1pdHRlZCB7ICZpbmxpbmVJdGVtLCAmaW5saW5lSXRlbSwgMCB9
OwotICAgICAgICB1bmNvbW1pdHRlZC0+bGVuZ3RoICs9IGNvbnRlbnRMZW5ndGg7Ci0gICAgICAg
IHVuY29tbWl0dGVkLT5sYXN0SW5saW5lSXRlbSA9ICZpbmxpbmVJdGVtOwotICAgICAgICByZW1h
bmluZ0xlbmd0aCAtPSBjb250ZW50TGVuZ3RoOwotCi0gICAgICAgIC8vICMzCi0gICAgICAgIGlm
IChkZXRhY2hpbmdSdWxlcy5jb250YWlucyhJbmxpbmVJdGVtOjpEZXRhY2hpbmdSdWxlOjpCcmVh
a0F0RW5kKSkKLSAgICAgICAgICAgIGNvbW1pdCgpOwotICAgIH0KLSAgICAvLyBFaXRoZXIgYWxs
IGlubGluZSBlbGVtZW50cyBuZWVkZWQgZGVkaWNhdGVkIHJ1bnMgb3IgbmVpdGhlciBvZiB0aGVt
LgotICAgIGlmICghcmVtYW5pbmdMZW5ndGggfHwgcmVtYW5pbmdMZW5ndGggPT0gaW5saW5lUnVu
LnRleHRDb250ZXh0KCktPmxlbmd0aCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjb21taXQo
KTsKLX0KKyAgICAgICAgaWYgKHJ1bi5pbmxpbmVJdGVtLmlzSGFyZExpbmVCcmVhaygpKQorICAg
ICAgICAgICAgY29udGludWU7CiAKLXZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVM
YXlvdXQ6OmNyZWF0ZUZpbmFsUnVucyhMaW5lJiBsaW5lKSBjb25zdAotewotICAgIGZvciAoYXV0
byYgaW5saW5lUnVuIDogbGluZS5ydW5zKCkpIHsKLSAgICAgICAgaWYgKGlubGluZVJ1bi5vdmVy
bGFwc011bHRpcGxlSW5saW5lSXRlbXMoKSkgewotICAgICAgICAgICAgSW5saW5lUnVucyBzcGxp
dFJ1bnM7Ci0gICAgICAgICAgICBzcGxpdElubGluZVJ1bklmTmVlZGVkKGlubGluZVJ1biwgc3Bs
aXRSdW5zKTsKLSAgICAgICAgICAgIGZvciAoYXV0byYgc3BsaXRSdW4gOiBzcGxpdFJ1bnMpCi0g
ICAgICAgICAgICAgICAgbV9mb3JtYXR0aW5nU3RhdGUuYXBwZW5kSW5saW5lUnVuKHNwbGl0UnVu
KTsKLQotICAgICAgICAgICAgaWYgKCFzcGxpdFJ1bnMuaXNFbXB0eSgpKQotICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICBBU1NFUlQocnVuLmlubGluZVJ1bi50ZXh0Q29udGV4dCgp
KTsKKyAgICAgICAgYXV0byYgaW5saW5lVGV4dEl0ZW0gPSBkb3duY2FzdDxJbmxpbmVUZXh0SXRl
bT4ocnVuLmlubGluZUl0ZW0pOworICAgICAgICBjb25zdCBJbmxpbmVJdGVtKiBwcmV2aW91c0lu
bGluZUl0ZW0gPSAhaW5kZXggPyBudWxscHRyIDogJnJ1bnNbaW5kZXggLSAxXS5pbmxpbmVJdGVt
OworICAgICAgICBhdXRvIHByZXZpb3VzUnVuSGFzQ29sbGFwc2VkV2hpdGVzcGFjZSA9IGZhbHNl
OworICAgICAgICBpZiAoaXM8SW5saW5lVGV4dEl0ZW0+KHByZXZpb3VzSW5saW5lSXRlbSkpCisg
ICAgICAgICAgICBwcmV2aW91c1J1bkhhc0NvbGxhcHNlZFdoaXRlc3BhY2UgPSBkb3duY2FzdDxJ
bmxpbmVUZXh0SXRlbT4oKnByZXZpb3VzSW5saW5lSXRlbSkuaXNDb2xsYXBzZWQoKTsKKworICAg
ICAgICBhdXRvIHJlcXVpcmVzTmV3UnVuID0gIWluZGV4IHx8ICZydW4uaW5saW5lSXRlbS5sYXlv
dXRCb3goKSAhPSAmcHJldmlvdXNJbmxpbmVJdGVtLT5sYXlvdXRCb3goKSB8fCBwcmV2aW91c1J1
bkhhc0NvbGxhcHNlZFdoaXRlc3BhY2U7CisgICAgICAgIGlmIChyZXF1aXJlc05ld1J1bikKKyAg
ICAgICAgICAgIG1fZm9ybWF0dGluZ1N0YXRlLmFkZElubGluZVJ1bihzdGQ6Om1ha2VfdW5pcXVl
PERpc3BsYXk6OlJ1bj4ocnVuLmlubGluZVJ1bikpOworICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIGF1dG8mIGxhc3REaXNwbGF5UnVuID0gbV9mb3JtYXR0aW5nU3RhdGUuaW5saW5lUnVucygp
Lmxhc3QoKTsKKyAgICAgICAgICAgIGxhc3REaXNwbGF5UnVuLT5leHBhbmRIb3Jpem9udGFsbHko
aW5saW5lVGV4dEl0ZW0ud2lkdGgoKSk7CisgICAgICAgICAgICBsYXN0RGlzcGxheVJ1bi0+dGV4
dENvbnRleHQoKS0+c2V0TGVuZ3RoKGxhc3REaXNwbGF5UnVuLT50ZXh0Q29udGV4dCgpLT5sZW5n
dGgoKSArIHJ1bi5pbmxpbmVSdW4udGV4dENvbnRleHQoKS0+bGVuZ3RoKCkpOwogICAgICAgICB9
Ci0KLSAgICAgICAgYXV0byBmaW5hbFJ1biA9IFsmXSB7Ci0gICAgICAgICAgICBhdXRvJiBpbmxp
bmVJdGVtID0gaW5saW5lUnVuLmlubGluZUl0ZW0oKTsKLSAgICAgICAgICAgIGlmIChpbmxpbmVJ
dGVtLmRldGFjaGluZ1J1bGVzKCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBp
bmxpbmVSdW47Ci0KLSAgICAgICAgICAgIElubGluZVJ1biBhZGp1c3RlZFJ1biA9IGlubGluZVJ1
bjsKLSAgICAgICAgICAgIGF1dG8gd2lkdGggPSBpbmxpbmVSdW4ubG9naWNhbFdpZHRoKCkgLSBp
bmxpbmVJdGVtLm5vbkJyZWFrYWJsZVN0YXJ0KCkgLSBpbmxpbmVJdGVtLm5vbkJyZWFrYWJsZUVu
ZCgpOwotICAgICAgICAgICAgYWRqdXN0ZWRSdW4uc2V0TG9naWNhbExlZnQoaW5saW5lUnVuLmxv
Z2ljYWxMZWZ0KCkgKyBpbmxpbmVJdGVtLm5vbkJyZWFrYWJsZVN0YXJ0KCkpOwotICAgICAgICAg
ICAgYWRqdXN0ZWRSdW4uc2V0TG9naWNhbFdpZHRoKHdpZHRoKTsKLSAgICAgICAgICAgIHJldHVy
biBhZGp1c3RlZFJ1bjsKLSAgICAgICAgfTsKLQotICAgICAgICBtX2Zvcm1hdHRpbmdTdGF0ZS5h
cHBlbmRJbmxpbmVSdW4oZmluYWxSdW4oKSk7CiAgICAgfQogfQogCi12b2lkIElubGluZUZvcm1h
dHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0Ojpwb3N0UHJvY2Vzc0lubGluZVJ1bnMoTGluZSYgbGlu
ZSwgSXNMYXN0TGluZSBpc0xhc3RMaW5lKSBjb25zdAotewotICAgIGFsaWduUnVucyhtX2Zvcm1h
dHRpbmdSb290LnN0eWxlKCkudGV4dEFsaWduKCksIGxpbmUsIGlzTGFzdExpbmUpOwotICAgIGF1
dG8gZmlyc3RSdW5JbmRleCA9IG1fZm9ybWF0dGluZ1N0YXRlLmlubGluZVJ1bnMoKS5zaXplKCk7
Ci0gICAgY3JlYXRlRmluYWxSdW5zKGxpbmUpOwotCi0gICAgcGxhY2VJbkZsb3dQb3NpdGlvbmVk
Q2hpbGRyZW4oZmlyc3RSdW5JbmRleCk7Ci19Ci0KLXZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQ6OkxpbmVMYXlvdXQ6OmNsb3NlTGluZShMaW5lJiBsaW5lLCBJc0xhc3RMaW5lIGlzTGFzdExp
bmUpIGNvbnN0Cit2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0Ojpjb21t
aXRJbmxpbmVJdGVtVG9MaW5lKExpbmUmIGxpbmUsIGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0
ZW0pIGNvbnN0CiB7Ci0gICAgbGluZS5jbG9zZSgpOwotICAgIGlmICghbGluZS5oYXNDb250ZW50
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHBvc3RQcm9jZXNzSW5saW5lUnVucyhsaW5lLCBp
c0xhc3RMaW5lKTsKLX0KLQotdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91
dDo6YXBwZW5kQ29udGVudFRvTGluZShMaW5lJiBsaW5lLCBjb25zdCBJbmxpbmVSdW5Qcm92aWRl
cjo6UnVuJiBydW4sIGNvbnN0IExheW91dFNpemUmIHJ1blNpemUpIGNvbnN0Ci17Ci0gICAgYXV0
byBsYXN0UnVuVHlwZSA9IGxpbmUubGFzdFJ1blR5cGUoKTsKLSAgICBsaW5lLmFwcGVuZENvbnRl
bnQocnVuLCBydW5TaXplKTsKKyAgICBhdXRvJiBsYXlvdXRCb3ggPSBpbmxpbmVJdGVtLmxheW91
dEJveCgpOworICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBtX2Zvcm1hdHRpbmdDb250ZXh0LmxheW91
dFN0YXRlKCkuZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpOworICAgIAorICAgIC8v
IEZJWE1FIHRoZXNlIDIgc2hvdWxkIGJlIGF0IGNsb3NlTGluZQorICAgIGlmIChpbmxpbmVJdGVt
LmlzQ29udGFpbmVyU3RhcnQoKSB8fCBpbmxpbmVJdGVtLmlzQ29udGFpbmVyRW5kKCkpCisgICAg
ICAgIHJldHVybiBsaW5lLmFwcGVuZE5vbkJyZWFrYWJsZVNwYWNlKGlubGluZUl0ZW0pOworCisg
ICAgYXV0byB3aWR0aCA9IGlubGluZUl0ZW0ud2lkdGgoKTsKKyAgICBpZiAoaXM8SW5saW5lVGV4
dEl0ZW0+KGlubGluZUl0ZW0pKQorICAgICAgICBsaW5lLmFwcGVuZFRleHRDb250ZW50KGRvd25j
YXN0PElubGluZVRleHRJdGVtPihpbmxpbmVJdGVtKSwgeyB3aWR0aCwgbV9mb3JtYXR0aW5nUm9v
dC5zdHlsZSgpLmNvbXB1dGVkTGluZUhlaWdodCgpIH0pOworICAgIGVsc2UKKyAgICAgICAgbGlu
ZS5hcHBlbmROb25UZXh0Q29udGVudChpbmxpbmVJdGVtLCB7IHdpZHRoLCBkaXNwbGF5Qm94Lmhl
aWdodCgpIH0sIGRpc3BsYXlCb3guaG9yaXpvbnRhbE1hcmdpbigpKTsKIAogICAgIGlmIChtX2Zv
cm1hdHRpbmdSb290LnN0eWxlKCkudGV4dEFsaWduKCkgPT0gVGV4dEFsaWduTW9kZTo6SnVzdGlm
eSkKLSAgICAgICAgY29tcHV0ZUV4cGFuc2lvbk9wcG9ydHVuaXRpZXMobGluZSwgcnVuLCBsYXN0
UnVuVHlwZS52YWx1ZU9yKElubGluZVJ1blByb3ZpZGVyOjpSdW46OlR5cGU6Ok5vbldoaXRlc3Bh
Y2UpKTsKKyAgICAgICAgY29tcHV0ZUV4cGFuc2lvbk9wcG9ydHVuaXRpZXMobGluZSwgaW5saW5l
SXRlbSwgbGluZS5oYXNUcmFpbGluZ1doaXRlc3BhY2UoKSk7CiB9CiAKIHZvaWQgSW5saW5lRm9y
bWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OmNvbXB1dGVGbG9hdFBvc2l0aW9uKGNvbnN0IEZs
b2F0aW5nQ29udGV4dCYgZmxvYXRpbmdDb250ZXh0LCBMaW5lJiBsaW5lLCBjb25zdCBCb3gmIGZs
b2F0Qm94KSBjb25zdApAQCAtNDQ5LDM2ICs0NTUsMTEgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5n
Q29udGV4dDo6TGluZUxheW91dDo6Y29tcHV0ZUZsb2F0UG9zaXRpb24oY29uc3QgRmxvYXRpbmdD
b24KICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91
dEJveChmbG9hdEJveCk7CiAKICAgICAvLyBTZXQgc3RhdGljIHBvc2l0aW9uIGZpcnN0LgotICAg
IGRpc3BsYXlCb3guc2V0VG9wTGVmdCh7IGxpbmUuY29udGVudExvZ2ljYWxSaWdodCgpLCBsaW5l
LmxvZ2ljYWxUb3AoKSB9KTsKKyAgICBkaXNwbGF5Qm94LnNldFRvcExlZnQoeyBsaW5lLmxvZ2lj
YWxSaWdodCgpLCBsaW5lLmxvZ2ljYWxUb3AoKSB9KTsKICAgICAvLyBGbG9hdCBpdC4KICAgICBk
aXNwbGF5Qm94LnNldFRvcExlZnQoZmxvYXRpbmdDb250ZXh0LnBvc2l0aW9uRm9yRmxvYXQoZmxv
YXRCb3gpKTsKIH0KIAotdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6
cGxhY2VJbkZsb3dQb3NpdGlvbmVkQ2hpbGRyZW4odW5zaWduZWQgZmlzdFJ1bkluZGV4KSBjb25z
dAotewotICAgIGF1dG8mIGxheW91dFN0YXRlID0gbV9mb3JtYXR0aW5nQ29udGV4dC5sYXlvdXRT
dGF0ZSgpOwotICAgIGF1dG8mIGlubGluZVJ1bnMgPSBtX2Zvcm1hdHRpbmdTdGF0ZS5pbmxpbmVS
dW5zKCk7Ci0gICAgZm9yIChhdXRvIHJ1bkluZGV4ID0gZmlzdFJ1bkluZGV4OyBydW5JbmRleCA8
IGlubGluZVJ1bnMuc2l6ZSgpOyArK3J1bkluZGV4KSB7Ci0gICAgICAgIGF1dG8mIGlubGluZVJ1
biA9IGlubGluZVJ1bnNbcnVuSW5kZXhdOwotCi0gICAgICAgIGF1dG8gcG9zaXRpb25PZmZzZXQg
PSBbJl0oYXV0byYgbGF5b3V0Qm94KSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogTmVlZCB0byBm
aWd1cmUgb3V0IHdoZXRoZXIgaW4tZmxvdyBvZmZzZXQgc2hvdWxkIHN0aWNrLiBUaGlzIG1pZ2h0
IHZlcnkgd2VsbCBiZSB0ZW1wb3JhcnkuCi0gICAgICAgICAgICBPcHRpb25hbDxMYXlvdXRTaXpl
PiBvZmZzZXQ7Ci0gICAgICAgICAgICBmb3IgKGF1dG8qIGJveCA9ICZsYXlvdXRCb3g7IGJveCAh
PSAmbV9mb3JtYXR0aW5nUm9vdDsgYm94ID0gYm94LT5wYXJlbnQoKSkgewotICAgICAgICAgICAg
ICAgIGlmICghYm94LT5pc0luRmxvd1Bvc2l0aW9uZWQoKSkKLSAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0LnZhbHVlT3IoTGF5b3V0
U2l6ZSgpKSArIEdlb21ldHJ5OjppbkZsb3dQb3NpdGlvbmVkUG9zaXRpb25PZmZzZXQobGF5b3V0
U3RhdGUsICpib3gpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIG9mZnNldDsK
LSAgICAgICAgfTsKLQotICAgICAgICBpZiAoYXV0byBvZmZzZXQgPSBwb3NpdGlvbk9mZnNldChp
bmxpbmVSdW4uaW5saW5lSXRlbSgpLmxheW91dEJveCgpKSkgewotICAgICAgICAgICAgaW5saW5l
UnVuLm1vdmVWZXJ0aWNhbGx5KG9mZnNldC0+aGVpZ2h0KCkpOwotICAgICAgICAgICAgaW5saW5l
UnVuLm1vdmVIb3Jpem9udGFsbHkob2Zmc2V0LT53aWR0aCgpKTsKLSAgICAgICAgfQotICAgIH0K
LX0KLQogc3RhdGljIExheW91dFVuaXQgYWRqdXN0ZWRMaW5lTG9naWNhbExlZnQoVGV4dEFsaWdu
TW9kZSBhbGlnbiwgTGF5b3V0VW5pdCBsaW5lTG9naWNhbExlZnQsIExheW91dFVuaXQgcmVtYWlu
aW5nV2lkdGgpCiB7CiAgICAgc3dpdGNoIChhbGlnbikgewpAQCAtNTA0LDcgKzQ4NSw3IEBAIHN0
YXRpYyBMYXlvdXRVbml0IGFkanVzdGVkTGluZUxvZ2ljYWxMZWZ0KFRleHRBbGlnbk1vZGUgYWxp
Z24sIExheW91dFVuaXQgbGluZUxvCiB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5l
TGF5b3V0OjpqdXN0aWZ5UnVucyhMaW5lJiBsaW5lKQogewogICAgIGF1dG8mIGlubGluZVJ1bnMg
PSBsaW5lLnJ1bnMoKTsKLSAgICBhdXRvJiBsYXN0SW5saW5lUnVuID0gaW5saW5lUnVucy5sYXN0
KCk7CisgICAgYXV0byYgbGFzdElubGluZVJ1biA9IGlubGluZVJ1bnMubGFzdCgpLmlubGluZVJ1
bjsKIAogICAgIC8vIEFkanVzdCAoZm9yYmlkKSB0cmFpbGluZyBleHBhbnNpb24gZm9yIHRoZSBs
YXN0IHRleHQgcnVuIG9uIGxpbmUuCiAgICAgYXV0byBleHBhbnNpb25CZWhhdmlvciA9IGxhc3RJ
bmxpbmVSdW4uZXhwYW5zaW9uT3Bwb3J0dW5pdHkoKS5iZWhhdmlvcjsKQEAgLTUxOSwyOCArNTAw
LDI5IEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6Omp1c3RpZnlS
dW5zKExpbmUmIGxpbmUpCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8gZXhwYW5zaW9uT3Bw
b3J0dW5pdGllcyA9IDA7Ci0gICAgZm9yIChhdXRvJiBpbmxpbmVSdW4gOiBpbmxpbmVSdW5zKQot
ICAgICAgICBleHBhbnNpb25PcHBvcnR1bml0aWVzICs9IGlubGluZVJ1bi5leHBhbnNpb25PcHBv
cnR1bml0eSgpLmNvdW50OworICAgIGZvciAoYXV0byYgcnVuIDogaW5saW5lUnVucykKKyAgICAg
ICAgZXhwYW5zaW9uT3Bwb3J0dW5pdGllcyArPSBydW4uaW5saW5lUnVuLmV4cGFuc2lvbk9wcG9y
dHVuaXR5KCkuY291bnQ7CiAKICAgICBpZiAoIWV4cGFuc2lvbk9wcG9ydHVuaXRpZXMpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIGZsb2F0IGV4cGFuc2lvbiA9IHdpZHRoVG9EaXN0cmlidXRlLnRv
RmxvYXQoKSAvIGV4cGFuc2lvbk9wcG9ydHVuaXRpZXM7CiAgICAgTGF5b3V0VW5pdCBhY2N1bXVs
YXRlZEV4cGFuc2lvbjsKLSAgICBmb3IgKGF1dG8mIGlubGluZVJ1biA6IGlubGluZVJ1bnMpIHsK
KyAgICBmb3IgKGF1dG8mIHJ1biA6IGlubGluZVJ1bnMpIHsKKyAgICAgICAgYXV0byYgaW5saW5l
UnVuID0gcnVuLmlubGluZVJ1bjsgCiAgICAgICAgIGF1dG8gZXhwYW5zaW9uRm9yUnVuID0gaW5s
aW5lUnVuLmV4cGFuc2lvbk9wcG9ydHVuaXR5KCkuY291bnQgKiBleHBhbnNpb247CiAKICAgICAg
ICAgaW5saW5lUnVuLmV4cGFuc2lvbk9wcG9ydHVuaXR5KCkuZXhwYW5zaW9uID0gZXhwYW5zaW9u
Rm9yUnVuOwotICAgICAgICBpbmxpbmVSdW4uc2V0TG9naWNhbExlZnQoaW5saW5lUnVuLmxvZ2lj
YWxMZWZ0KCkgKyBhY2N1bXVsYXRlZEV4cGFuc2lvbik7Ci0gICAgICAgIGlubGluZVJ1bi5zZXRM
b2dpY2FsV2lkdGgoaW5saW5lUnVuLmxvZ2ljYWxXaWR0aCgpICsgZXhwYW5zaW9uRm9yUnVuKTsK
KyAgICAgICAgaW5saW5lUnVuLm1vdmVIb3Jpem9udGFsbHkoYWNjdW11bGF0ZWRFeHBhbnNpb24p
OworICAgICAgICBpbmxpbmVSdW4uZXhwYW5kSG9yaXpvbnRhbGx5KGV4cGFuc2lvbkZvclJ1bik7
CiAgICAgICAgIGFjY3VtdWxhdGVkRXhwYW5zaW9uICs9IGV4cGFuc2lvbkZvclJ1bjsKICAgICB9
CiB9CiAKLXZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OmNvbXB1dGVF
eHBhbnNpb25PcHBvcnR1bml0aWVzKExpbmUmIGxpbmUsIGNvbnN0IElubGluZVJ1blByb3ZpZGVy
OjpSdW4mIHJ1biwgSW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6VHlwZSBsYXN0UnVuVHlwZSkgY29u
c3QKK3ZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OmNvbXB1dGVFeHBh
bnNpb25PcHBvcnR1bml0aWVzKExpbmUmIGxpbmUsIGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0
ZW0sIGJvb2wgcHJldmlvdXNSdW5Jc1doaXRlcGFjZSkgY29uc3QKIHsKLSAgICBhdXRvIGlzRXhw
YW5zaW9uT3Bwb3J0dW5pdHkgPSBbXShhdXRvIGN1cnJlbnRSdW5Jc1doaXRlc3BhY2UsIGF1dG8g
bGFzdFJ1bklzV2hpdGVzcGFjZSkgewotICAgICAgICByZXR1cm4gY3VycmVudFJ1bklzV2hpdGVz
cGFjZSB8fCAoIWN1cnJlbnRSdW5Jc1doaXRlc3BhY2UgJiYgIWxhc3RSdW5Jc1doaXRlc3BhY2Up
OworICAgIGF1dG8gaXNFeHBhbnNpb25PcHBvcnR1bml0eSA9IFtdKGF1dG8gY3VycmVudFJ1bklz
V2hpdGVzcGFjZSwgYXV0byBwcmV2aW91c1J1bklzV2hpdGVwYWNlKSB7CisgICAgICAgIHJldHVy
biBjdXJyZW50UnVuSXNXaGl0ZXNwYWNlIHx8ICghY3VycmVudFJ1bklzV2hpdGVzcGFjZSAmJiAh
cHJldmlvdXNSdW5Jc1doaXRlcGFjZSk7CiAgICAgfTsKIAogICAgIGF1dG8gZXhwYW5zaW9uQmVo
YXZpb3IgPSBbXShhdXRvIGlzQXRFeHBhbnNpb25PcHBvcnR1bml0eSkgewpAQCAtNTQ5LDkgKzUz
MSwxMCBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0Ojpjb21wdXRl
RXhwYW5zaW9uT3Bwb3J0dW5pdGllcyhMaW5lJiBsaQogICAgICAgICByZXR1cm4gZXhwYW5zaW9u
QmVoYXZpb3I7CiAgICAgfTsKIAotICAgIGF1dG8gaXNBdEV4cGFuc2lvbk9wcG9ydHVuaXR5ID0g
aXNFeHBhbnNpb25PcHBvcnR1bml0eShydW4uaXNXaGl0ZXNwYWNlKCksIGxhc3RSdW5UeXBlID09
IElubGluZVJ1blByb3ZpZGVyOjpSdW46OlR5cGU6OldoaXRlc3BhY2UpOworICAgIGF1dG8gY3Vy
cmVudFJ1bklzV2hpdGVzcGFjZSA9IGlzPElubGluZVRleHRJdGVtPihpbmxpbmVJdGVtKSA/IGRv
d25jYXN0PElubGluZVRleHRJdGVtPihpbmxpbmVJdGVtKS5pc1doaXRlc3BhY2UoKSA6IGZhbHNl
OworICAgIGF1dG8gaXNBdEV4cGFuc2lvbk9wcG9ydHVuaXR5ID0gaXNFeHBhbnNpb25PcHBvcnR1
bml0eShjdXJyZW50UnVuSXNXaGl0ZXNwYWNlLCBwcmV2aW91c1J1bklzV2hpdGVwYWNlKTsKIAot
ICAgIGF1dG8mIGN1cnJlbnRJbmxpbmVSdW4gPSBsaW5lLnJ1bnMoKS5sYXN0KCk7CisgICAgYXV0
byYgY3VycmVudElubGluZVJ1biA9IGxpbmUucnVucygpLmxhc3QoKS5pbmxpbmVSdW47CiAgICAg
YXV0byYgZXhwYW5zaW9uT3Bwb3J0dW5pdHkgPSBjdXJyZW50SW5saW5lUnVuLmV4cGFuc2lvbk9w
cG9ydHVuaXR5KCk7CiAgICAgaWYgKGlzQXRFeHBhbnNpb25PcHBvcnR1bml0eSkKICAgICAgICAg
KytleHBhbnNpb25PcHBvcnR1bml0eS5jb3VudDsKQEAgLTU2NywzOCArNTUwLDE0IEBAIHZvaWQg
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OmFsaWduUnVucyhUZXh0QWxpZ25N
b2RlIHRleHRBbGlnbiwgTGluCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGxp
bmVMb2dpY2FsTGVmdCA9IGxpbmUuY29udGVudExvZ2ljYWxMZWZ0KCk7CisgICAgYXV0byBsaW5l
TG9naWNhbExlZnQgPSBsaW5lLmxvZ2ljYWxMZWZ0KCk7CiAgICAgYXV0byBhZGp1c3RlZExvZ2lj
YWxMZWZ0ID0gYWRqdXN0ZWRMaW5lTG9naWNhbExlZnQoYWRqdXRlZFRleHRBbGlnbm1lbnQsIGxp
bmVMb2dpY2FsTGVmdCwgbGluZS5hdmFpbGFibGVXaWR0aCgpKTsKICAgICBpZiAoYWRqdXN0ZWRM
b2dpY2FsTGVmdCA9PSBsaW5lTG9naWNhbExlZnQpCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1
dG8gZGVsdGEgPSBhZGp1c3RlZExvZ2ljYWxMZWZ0IC0gbGluZUxvZ2ljYWxMZWZ0OwotICAgIGZv
ciAoYXV0byYgaW5saW5lUnVuIDogbGluZS5ydW5zKCkpCi0gICAgICAgIGlubGluZVJ1bi5zZXRM
b2dpY2FsTGVmdChpbmxpbmVSdW4ubG9naWNhbExlZnQoKSArIGRlbHRhKTsKLX0KLQotTGF5b3V0
VW5pdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6cnVuV2lkdGgoY29uc3Qg
SW5saW5lQ29udGVudCYgaW5saW5lQ29udGVudCwgY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRl
bSwgSXRlbVBvc2l0aW9uIGZyb20sIHVuc2lnbmVkIGxlbmd0aCwgTGF5b3V0VW5pdCBjb250ZW50
TG9naWNhbExlZnQpIGNvbnN0IAotewotICAgIExheW91dFVuaXQgd2lkdGg7Ci0gICAgYXV0byBz
dGFydFBvc2l0aW9uID0gZnJvbTsKLSAgICBhdXRvIGl0ZXJhdG9yID0gaW5saW5lQ29udGVudC5m
aW5kKGNvbnN0X2Nhc3Q8SW5saW5lSXRlbSo+KCZpbmxpbmVJdGVtKSk7Ci0jaWYgIUFTU0VSVF9E
SVNBQkxFRAotICAgIGF1dG8gaW5saW5lSXRlbUVuZCA9IGlubGluZUNvbnRlbnQuZW5kKCk7Ci0j
ZW5kaWYKLSAgICB3aGlsZSAobGVuZ3RoKSB7Ci0gICAgICAgIEFTU0VSVChpdGVyYXRvciAhPSBp
bmxpbmVJdGVtRW5kKTsKLSAgICAgICAgYXV0byYgY3VycmVudElubGluZUl0ZW0gPSAqKml0ZXJh
dG9yOwotICAgICAgICBhdXRvIGVuZFBvc2l0aW9uID0gc3RkOjptaW48SXRlbVBvc2l0aW9uPihz
dGFydFBvc2l0aW9uICsgbGVuZ3RoLCBjdXJyZW50SW5saW5lSXRlbS50ZXh0Q29udGVudCgpLmxl
bmd0aCgpKTsKLSAgICAgICAgYXV0byB0ZXh0V2lkdGggPSBUZXh0VXRpbDo6d2lkdGgoY3VycmVu
dElubGluZUl0ZW0sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uLCBjb250ZW50TG9naWNhbExl
ZnQpOwotCi0gICAgICAgIGNvbnRlbnRMb2dpY2FsTGVmdCArPSB0ZXh0V2lkdGg7Ci0gICAgICAg
IHdpZHRoICs9IHRleHRXaWR0aDsKLSAgICAgICAgbGVuZ3RoIC09IChlbmRQb3NpdGlvbiAtIHN0
YXJ0UG9zaXRpb24pOwotCi0gICAgICAgIHN0YXJ0UG9zaXRpb24gPSAwOwotICAgICAgICArK2l0
ZXJhdG9yOwotICAgIH0KLSAgICByZXR1cm4gd2lkdGg7CisgICAgZm9yIChhdXRvJiBydW4gOiBs
aW5lLnJ1bnMoKSkKKyAgICAgICAgcnVuLmlubGluZVJ1bi5tb3ZlSG9yaXpvbnRhbGx5KGRlbHRh
KTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1h
dHRpbmcvSW5saW5lRm9ybWF0dGluZ1N0YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5s
aW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nU3RhdGUuaAppbmRleCA2NjJhODNjM2ViYzUx
YmE3YjBlM2M0ZWFjY2Y1MTg0NGU5ZWQ2NTljLi4wOGIxYTVmOTcxOTIzOWRhN2U1ZTZlZmVhZjdi
YmQyZGNhNDE3NDgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9y
bWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nU3RhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nU3RhdGUuaApAQCAtMjcsMTUgKzI3
LDE4IEBACiAKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKIAorI2luY2x1
ZGUgIkRpc3BsYXlSdW4uaCIKICNpbmNsdWRlICJGb3JtYXR0aW5nU3RhdGUuaCIKICNpbmNsdWRl
ICJJbmxpbmVJdGVtLmgiCi0jaW5jbHVkZSAiSW5saW5lUnVuLmgiCiAjaW5jbHVkZSA8d3RmL0lz
b01hbGxvYy5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogbmFtZXNwYWNlIExheW91dCB7CiAKKy8vIFRlbXAKK3VzaW5nIElubGluZUl0ZW1zID0g
TGlzdEhhc2hTZXQ8c3RkOjp1bmlxdWVfcHRyPElubGluZUl0ZW0+PjsKK3VzaW5nIElubGluZVJ1
bnMgPSBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPERpc3BsYXk6OlJ1bj4+OwogLy8gSW5saW5lRm9y
bWF0dGluZ1N0YXRlIGhvbGRzIHRoZSBzdGF0ZSBmb3IgYSBwYXJ0aWN1bGFyIGlubGluZSBmb3Jt
YXR0aW5nIGNvbnRleHQgdHJlZS4KIGNsYXNzIElubGluZUZvcm1hdHRpbmdTdGF0ZSA6IHB1Ymxp
YyBGb3JtYXR0aW5nU3RhdGUgewogICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoSW5saW5lRm9y
bWF0dGluZ1N0YXRlKTsKQEAgLTQzLDE1ICs0NiwxNiBAQCBwdWJsaWM6CiAgICAgSW5saW5lRm9y
bWF0dGluZ1N0YXRlKFJlZjxGbG9hdGluZ1N0YXRlPiYmLCBMYXlvdXRTdGF0ZSYpOwogICAgIHZp
cnR1YWwgfklubGluZUZvcm1hdHRpbmdTdGF0ZSgpOwogCi0gICAgSW5saW5lQ29udGVudCYgaW5s
aW5lQ29udGVudCgpIHsgcmV0dXJuIG1faW5saW5lQ29udGVudDsgfQotICAgIElubGluZUl0ZW0q
IGxhc3RJbmxpbmVJdGVtKCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVDb250ZW50LmlzRW1wdHko
KSA/IG51bGxwdHIgOiBtX2lubGluZUNvbnRlbnQubGFzdCgpLmdldCgpOyB9CisgICAgdm9pZCBh
ZGRJbmxpbmVUZXh0SXRlbSgpOwogCi0gICAgLy8gVGVtcAorICAgIElubGluZUl0ZW1zJiBpbmxp
bmVJdGVtcygpIHsgcmV0dXJuIG1faW5saW5lSXRlbXM7IH0KICAgICBJbmxpbmVSdW5zJiBpbmxp
bmVSdW5zKCkgeyByZXR1cm4gbV9pbmxpbmVSdW5zOyB9Ci0gICAgdm9pZCBhcHBlbmRJbmxpbmVS
dW4oSW5saW5lUnVuIGlubGluZVJ1bikgeyBtX2lubGluZVJ1bnMuYXBwZW5kKGlubGluZVJ1bik7
IH0KKworICAgIHZvaWQgYWRkSW5saW5lSXRlbShzdGQ6OnVuaXF1ZV9wdHI8SW5saW5lSXRlbT4m
JiBpbmxpbmVJdGVtKSB7IG1faW5saW5lSXRlbXMuYWRkKFdURk1vdmUoaW5saW5lSXRlbSkpOyB9
CisgICAgdm9pZCBhZGRJbmxpbmVSdW4oc3RkOjp1bmlxdWVfcHRyPERpc3BsYXk6OlJ1bj4mJiBp
bmxpbmVSdW4pIHsgbV9pbmxpbmVSdW5zLmFwcGVuZChXVEZNb3ZlKGlubGluZVJ1bikpOyB9CiAK
IHByaXZhdGU6Ci0gICAgSW5saW5lQ29udGVudCBtX2lubGluZUNvbnRlbnQ7CisgICAgSW5saW5l
SXRlbXMgbV9pbmxpbmVJdGVtczsKICAgICBJbmxpbmVSdW5zIG1faW5saW5lUnVuczsKIH07CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGlu
ZUl0ZW0uaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUl0
ZW0uaAppbmRleCA1YTEwZmMxZDFmZmNhNjM0NGUwNDAwZTU5ZDZhNTAwN2ExNWJiODRlLi44N2Vk
OWMzNmY2YzkyM2FlOGU0Zjg5OTc0OTZlYmNhYzVhY2ZlOWM0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVJdGVtLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lSXRlbS5oCkBAIC0zNiw4MyAr
MzYsNTcgQEAgbmFtZXNwYWNlIExheW91dCB7CiAKIGNsYXNzIElubGluZUl0ZW0gewogcHVibGlj
OgotICAgIElubGluZUl0ZW0oY29uc3QgQm94JiBsYXlvdXRCb3gpOworICAgIGVudW0gY2xhc3Mg
VHlwZSB7IFRleHQsIEhhcmRMaW5lQnJlYWssIEJveCwgRmxvYXQsIENvbnRhaW5lclN0YXJ0LCBD
b250YWluZXJFbmQgfTsKKyAgICBJbmxpbmVJdGVtKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBUeXBl
KTsKIAotICAgIGVudW0gY2xhc3MgVHlwZSB7IFRleHQsIEhhcmRMaW5lQnJlYWssIElubGluZUJv
eCwgRmxvYXQgfTsKLSAgICBUeXBlIHR5cGUoKSBjb25zdDsKKyAgICBUeXBlIHR5cGUoKSBjb25z
dCB7IHJldHVybiBtX3R5cGU7IH0KICAgICBjb25zdCBCb3gmIGxheW91dEJveCgpIGNvbnN0IHsg
cmV0dXJuIG1fbGF5b3V0Qm94OyB9CiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKCkgY29u
c3QgeyByZXR1cm4gbV9sYXlvdXRCb3guc3R5bGUoKTsgfQotICAgIFN0cmluZyB0ZXh0Q29udGVu
dCgpIGNvbnN0OwotICAgIC8vIERldGFjaGluZ1J1bGUgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGlu
bGluZSBlbGVtZW50IG5lZWRzIHRvIGJlIHdyYXBwZWQgaW4gYSBkZWRpY2V0ZWQgcnVuIG9yIGJy
ZWFrIGZyb20gcHJldmlvdXMvbmV4dCBydW5zLgotICAgIC8vIDxzcGFuPnN0YXJ0PC9zcGFuPjxz
cGFuIHN0eWxlPSJwb3NpdGlvbjogcmVsYXRpdmU7Ij4gbWlkZGxlIDwvc3Bhbj48c3Bhbj5lbmQ8
L3NwYW4+Ci0gICAgLy8gaW5wdXQgdG8gbGluZSBicmVha2luZyAtPiA8c3RhcnQgbWlkZGxlIGVu
ZD4KLSAgICAvLyBvdXRwdXQgb2YgbGluZSBicmVha2luZyAoY29uc2lkZXJpbmcgaW5maW5pdGUg
Y29uc3RyYWludCkgLT4gPHN0YXJ0IG1pZGRsZSBlbmQ+Ci0gICAgLy8gZHVlIHRvIHRoZSBpbi1m
bG93IHBvc2l0aW9uaW5nLCB0aGUgZmluYWwgcnVucyBhcmU6IDxzdGFydD48IG1pZGRsZSA+PGVu
ZD4KLSAgICAvLyAic3RhcnQiIC0+IG4vYQotICAgIC8vICIgbWlkZGxlICIgLT4gQnJlYWtBdFN0
YXJ0IGFuZCBCcmVha0F0RW5kCi0gICAgLy8gImVuZCIgLT4gbi9hCi0gICAgLy8KLSAgICAvLyA8
c3Bhbj5wYXJlbnQgPC9zcGFuPjxzcGFuIHN0eWxlPSJwYWRkaW5nOiAxMHB4OyI+c3RhcnQ8c3Bh
bj4gbWlkZGxlIDwvc3Bhbj5lbmQ8L3NwYW4+PHNwYW4+IHBhcmVudDwvc3Bhbj4KLSAgICAvLyBp
bnB1dCB0byBsaW5lIGJyZWFraW5nIC0+IDxwYXJlbnQgc3RhcnQgbWlkZGxlIGVuZCBwYXJlbnQ+
Ci0gICAgLy8gb3V0cHV0IG9mIGxpbmUgYnJlYWtpbmcgKGNvbnNpZGVyaW5nIGluZmluaXRlIGNv
bnN0cmFpbnQpIC0+IDxwYXJlbnQgc3RhcnQgbWlkZGxlIGVuZCBwYXJlbnQ+Ci0gICAgLy8gZHVl
IHRvIHBhZGRpbmcsIGZpbmFsIHJ1bnMgLT4gPHBhcmVudD48c3RhcnQgbWlkZGxlIGVuZD48cGFy
ZW50PgotICAgIC8vICJwYXJlbnQiIC0+IG4vYQotICAgIC8vICJzdGFydCIgLT4gQnJlYWtBdFN0
YXJ0Ci0gICAgLy8gIiBtaWRkbGUgIiAtPiBuL2EKLSAgICAvLyAiZW5kIiAtPiBCcmVha0F0RW5k
Ci0gICAgLy8gInBhcmVudCIgLT4gbi9hCi0gICAgZW51bSBjbGFzcyBEZXRhY2hpbmdSdWxlIHsK
LSAgICAgICAgQnJlYWtBdFN0YXJ0ID0gMSA8PCAwLAotICAgICAgICBCcmVha0F0RW5kID0gMSA8
PCAxCi0gICAgfTsKLSAgICB2b2lkIGFkZERldGFjaGluZ1J1bGUoT3B0aW9uU2V0PERldGFjaGlu
Z1J1bGU+IGRldGFjaGluZ1J1bGUpIHsgbV9kZXRhY2hpbmdSdWxlcy5hZGQoZGV0YWNoaW5nUnVs
ZSk7IH0KLSAgICBPcHRpb25TZXQ8RGV0YWNoaW5nUnVsZT4gZGV0YWNoaW5nUnVsZXMoKSBjb25z
dCB7IHJldHVybiBtX2RldGFjaGluZ1J1bGVzOyB9CisgICAgdm9pZCBzZXRXaWR0aChMYXlvdXRV
bml0KTsKKyAgICBMYXlvdXRVbml0IHdpZHRoKCkgY29uc3Q7CiAKLSAgICAvLyBOb24tYnJlYWth
YmxlIHN0YXJ0L2VuZCBtYXJrcyBtYXJnaW4vcGFkZGluZy9ib3JkZXIgc3BhY2UgKGV2ZW4gd2hl
biBpdCBkb2VzIG5vdCBkaXJlY3RseSBjb21lIGZyb20gdGhlIGFzc29jaWF0ZWQgbGF5b3V0IGJv
eCkKLSAgICAvLyA8c3BhbiBzdHlsZT0icGFkZGluZzogNXB4Ij48c3Bhbj5uZXN0ZWQgY29udGVu
dCB3aXRoIHBhZGRpbmcgcGFyZW50PC9zcGFuPC9zcGFuPgotICAgIC8vIDxuZXN0ZWQgY29udGVu
dCB3aXRoIHBhZGRpbmcgcGFyZW50PiBpbmxpbmUgcnVuIGhhcyA1cHggbm9uLWJyZWFrYWJsZSBz
dGFydC9lbmQuCi0gICAgTGF5b3V0VW5pdCBub25CcmVha2FibGVTdGFydCgpIGNvbnN0IHsgcmV0
dXJuIG1fbm9uQnJlYWthYmxlU3RhcnQ7IH0KLSAgICBMYXlvdXRVbml0IG5vbkJyZWFrYWJsZUVu
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fbm9uQnJlYWthYmxlRW5kOyB9Ci0gICAgdm9pZCBhZGROb25C
cmVha2FibGVTdGFydChMYXlvdXRVbml0IHZhbHVlKSB7IG1fbm9uQnJlYWthYmxlU3RhcnQgKz0g
dmFsdWU7IH0KLSAgICB2b2lkIGFkZE5vbkJyZWFrYWJsZUVuZChMYXlvdXRVbml0IHZhbHVlKSB7
IG1fbm9uQnJlYWthYmxlRW5kICs9IHZhbHVlOyB9CisgICAgYm9vbCBpc1RleHQoKSBjb25zdCB7
IHJldHVybiB0eXBlKCkgPT0gVHlwZTo6VGV4dDsgfQorICAgIGJvb2wgaXNCb3goKSBjb25zdCB7
IHJldHVybiB0eXBlKCkgPT0gVHlwZTo6Qm94OyB9CisgICAgYm9vbCBpc0hhcmRMaW5lQnJlYWso
KSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gVHlwZTo6SGFyZExpbmVCcmVhazsgfQorICAgIGJv
b2wgaXNGbG9hdCgpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBUeXBlOjpGbG9hdDsgfQorICAg
IGJvb2wgaXNMaW5lQnJlYWsoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gVHlwZTo6SGFyZExp
bmVCcmVhazsgfQorICAgIGJvb2wgaXNDb250YWluZXJTdGFydCgpIGNvbnN0IHsgcmV0dXJuIHR5
cGUoKSA9PSBUeXBlOjpDb250YWluZXJTdGFydDsgfQorICAgIGJvb2wgaXNDb250YWluZXJFbmQo
KSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gVHlwZTo6Q29udGFpbmVyRW5kOyB9CiAKIHByaXZh
dGU6CiAgICAgY29uc3QgQm94JiBtX2xheW91dEJveDsKLSAgICBPcHRpb25TZXQ8RGV0YWNoaW5n
UnVsZT4gbV9kZXRhY2hpbmdSdWxlczsKLSAgICBMYXlvdXRVbml0IG1fbm9uQnJlYWthYmxlU3Rh
cnQ7Ci0gICAgTGF5b3V0VW5pdCBtX25vbkJyZWFrYWJsZUVuZDsKKyAgICBjb25zdCBUeXBlIG1f
dHlwZTsKKyAgICBMYXlvdXRVbml0IG1fd2lkdGg7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAg
IGJvb2wgbV9oYXNWYWxpZFdpZHRoIHsgZmFsc2UgfTsKKyNlbmRpZgogfTsKIAotdXNpbmcgSW5s
aW5lQ29udGVudCA9IExpc3RIYXNoU2V0PHN0ZDo6dW5pcXVlX3B0cjxJbmxpbmVJdGVtPj47Ci0K
LWlubGluZSBJbmxpbmVJdGVtOjpJbmxpbmVJdGVtKGNvbnN0IEJveCYgbGF5b3V0Qm94KQoraW5s
aW5lIElubGluZUl0ZW06OklubGluZUl0ZW0oY29uc3QgQm94JiBsYXlvdXRCb3gsIFR5cGUgdHlw
ZSkKICAgICA6IG1fbGF5b3V0Qm94KGxheW91dEJveCkKKyAgICAsIG1fdHlwZSh0eXBlKQogewog
fQogCi1pbmxpbmUgSW5saW5lSXRlbTo6VHlwZSBJbmxpbmVJdGVtOjp0eXBlKCkgY29uc3QKK2lu
bGluZSB2b2lkIElubGluZUl0ZW06OnNldFdpZHRoKExheW91dFVuaXQgd2lkdGgpCiB7Ci0gICAg
aWYgKGlzPElubGluZUJveD4obV9sYXlvdXRCb3gpICYmIGRvd25jYXN0PElubGluZUJveD4obV9s
YXlvdXRCb3gpLmhhc1RleHRDb250ZW50KCkpCi0gICAgICAgIHJldHVybiBUeXBlOjpUZXh0Owot
Ci0gICAgaWYgKGlzPExpbmVCcmVha0JveD4obV9sYXlvdXRCb3gpKQotICAgICAgICByZXR1cm4g
VHlwZTo6SGFyZExpbmVCcmVhazsKLQotICAgIGlmIChtX2xheW91dEJveC5pc0Zsb2F0aW5nUG9z
aXRpb25lZCgpKQotICAgICAgICByZXR1cm4gVHlwZTo6RmxvYXQ7Ci0KLSAgICBBU1NFUlQobV9s
YXlvdXRCb3guaXNJbmxpbmVMZXZlbEJveCgpKTsKLSAgICByZXR1cm4gVHlwZTo6SW5saW5lQm94
OworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBtX2hhc1ZhbGlkV2lkdGggPSB0cnVlOworI2Vu
ZGlmCisgICAgbV93aWR0aCA9IHdpZHRoOwogfQogCi1pbmxpbmUgU3RyaW5nIElubGluZUl0ZW06
OnRleHRDb250ZW50KCkgY29uc3QKK2lubGluZSBMYXlvdXRVbml0IElubGluZUl0ZW06OndpZHRo
KCkgY29uc3QKIHsKLSAgICBpZiAodHlwZSgpICE9IFR5cGU6OlRleHQpCi0gICAgICAgIHJldHVy
biB7IH07Ci0KLSAgICByZXR1cm4gZG93bmNhc3Q8SW5saW5lQm94PihtX2xheW91dEJveCkudGV4
dENvbnRlbnQoKTsKKyAgICBBU1NFUlQobV9oYXNWYWxpZFdpZHRoKTsKKyAgICByZXR1cm4gbV93
aWR0aDsKIH0KIAorI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0lOTElORV9JVEVNKFRv
VmFsdWVUeXBlTmFtZSwgcHJlZGljYXRlKSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lO
KFdlYkNvcmU6OkxheW91dDo6VG9WYWx1ZVR5cGVOYW1lKSBcCisgICAgc3RhdGljIGJvb2wgaXNU
eXBlKGNvbnN0IFdlYkNvcmU6OkxheW91dDo6SW5saW5lSXRlbSYgaW5saW5lSXRlbSkgeyByZXR1
cm4gaW5saW5lSXRlbS5wcmVkaWNhdGU7IH0gXAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQo
KQorCiB9CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxp
bmVmb3JtYXR0aW5nL0lubGluZUxpbmVCcmVha2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCcmVha2VyLmNwcAppbmRleCA1NzZhMGJiNzk1
NDM3ZTAxMzc0MmE3Mjg2OTQzYWYyNDgxMDA0ZmVjLi5jZWI3NzAyMzM2ZmVlM2U1ODQ5MzVmNzE0
ODllZDNiNDYzZDZiYWIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5l
Zm9ybWF0dGluZy9JbmxpbmVMaW5lQnJlYWtlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJyZWFrZXIuY3BwCkBAIC0yOCwxNzMgKzI4
LDk5IEBACiAKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKIAotI2luY2x1
ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiSHlwaGVuYXRpb24uaCIKLSNpbmNsdWRlICJJ
bmxpbmVSdW5Qcm92aWRlci5oIgotI2luY2x1ZGUgIlRleHRVdGlsLmgiCi0jaW5jbHVkZSA8d3Rm
L0lzb01hbGxvY0lubGluZXMuaD4KKyNpbmNsdWRlICJMYXlvdXRTdGF0ZS5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgTGF5b3V0IHsKIAotV1RGX01BS0VfSVNPX0FMTE9DQVRF
RF9JTVBMKElubGluZUxpbmVCcmVha2VyKTsKLQotSW5saW5lTGluZUJyZWFrZXI6OklubGluZUxp
bmVCcmVha2VyKGNvbnN0IExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgY29uc3QgSW5saW5lQ29u
dGVudCYgaW5saW5lQ29udGVudCwgY29uc3QgVmVjdG9yPElubGluZVJ1blByb3ZpZGVyOjpSdW4+
JiBpbmxpbmVSdW5zKQorTGluZUJyZWFrZXI6OkxpbmVCcmVha2VyKGNvbnN0IExheW91dFN0YXRl
JiBsYXlvdXRTdGF0ZSkKICAgICA6IG1fbGF5b3V0U3RhdGUobGF5b3V0U3RhdGUpCi0gICAgLCBt
X2lubGluZUNvbnRlbnQoaW5saW5lQ29udGVudCkKLSAgICAsIG1faW5saW5lUnVucyhpbmxpbmVS
dW5zKQogeworCiB9CiAKLU9wdGlvbmFsPElubGluZUxpbmVCcmVha2VyOjpSdW4+IElubGluZUxp
bmVCcmVha2VyOjpuZXh0UnVuKExheW91dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0LCBMYXlvdXRV
bml0IGF2YWlsYWJsZVdpZHRoLCBib29sIGxpbmVJc0VtcHR5KQorTGluZUJyZWFrZXI6OkJyZWFr
aW5nQ29udGV4dCBMaW5lQnJlYWtlcjo6YnJlYWtpbmdDb250ZXh0KElubGluZUl0ZW0mIGlubGlu
ZUl0ZW0sIExpbmVDb250ZXh0IGxpbmVDb250ZXh0KQogewotICAgIGlmIChpc0F0Q29udGVudEVu
ZCgpKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgSW5saW5lUnVuUHJvdmlk
ZXI6OlJ1biBjdXJyZW50SW5saW5lUnVuID0gbV9pbmxpbmVSdW5zW21fY3VycmVudFJ1bkluZGV4
XTsKLSAgICAvLyBBZGp1c3QgdGhlIGN1cnJlbnQgcnVuIGlmIGl0IGlzIHNwbGl0IG1pZHdvcmQu
Ci0gICAgaWYgKG1fc3BsaXRQb3NpdGlvbikgewotICAgICAgICBBU1NFUlQoY3VycmVudElubGlu
ZVJ1bi5pc1RleHQoKSk7Ci0gICAgICAgIG1fc3BsaXRQb3NpdGlvbiA9IFdURjo6bnVsbG9wdDsK
LSAgICB9CisgICAgYXV0byBpc0F0QnJlYWtpbmdPcHBvcnR1bml0eSA9IGlzPElubGluZVRleHRJ
dGVtPihpbmxpbmVJdGVtKSA/IGRvd25jYXN0PElubGluZVRleHRJdGVtPihpbmxpbmVJdGVtKS5p
c1doaXRlc3BhY2UoKSAKKyAgICAgICAgOiAhaW5saW5lSXRlbS5pc0Zsb2F0KCkgJiYgIWlubGlu
ZUl0ZW0uaXNDb250YWluZXJTdGFydCgpICYmICFpbmxpbmVJdGVtLmlzQ29udGFpbmVyRW5kKCk7
CiAKLSAgICBpZiAoY3VycmVudElubGluZVJ1bi5pc0xpbmVCcmVhaygpKSB7Ci0gICAgICAgICsr
bV9jdXJyZW50UnVuSW5kZXg7Ci0gICAgICAgIHJldHVybiBSdW4geyBSdW46OlBvc2l0aW9uOjpM
aW5lRW5kLCAwLCBjdXJyZW50SW5saW5lUnVuIH07Ci0gICAgfQorICAgIGlubGluZUl0ZW0uc2V0
V2lkdGgocnVuV2lkdGgoaW5saW5lSXRlbSwgbGluZUNvbnRleHQubG9naWNhbExlZnQpKTsKKyAg
ICBpZiAoaW5saW5lSXRlbS53aWR0aCgpIDw9IGxpbmVDb250ZXh0LmF2YWlsYWJsZVdpZHRoKQor
ICAgICAgICByZXR1cm4geyBCcmVha2luZ0JlaGF2aW9yOjpLZWVwLCBpc0F0QnJlYWtpbmdPcHBv
cnR1bml0eSB9OwogCi0gICAgYXV0byBjb250ZW50V2lkdGggPSBydW5XaWR0aChjdXJyZW50SW5s
aW5lUnVuLCBjb250ZW50TG9naWNhbExlZnQpOwotICAgIC8vIDEuIFBsZW50eSBvZiBzcGFjZSBs
ZWZ0LgotICAgIGlmIChjb250ZW50V2lkdGggPD0gYXZhaWxhYmxlV2lkdGgpIHsKLSAgICAgICAg
KyttX2N1cnJlbnRSdW5JbmRleDsKLSAgICAgICAgcmV0dXJuIFJ1biB7IGxpbmVJc0VtcHR5ID8g
UnVuOjpQb3NpdGlvbjo6TGluZUJlZ2luIDogUnVuOjpQb3NpdGlvbjo6VW5kZXRlcm1pbmVkLCBj
b250ZW50V2lkdGgsIGN1cnJlbnRJbmxpbmVSdW4gfTsKLSAgICB9Ci0KLSAgICAvLyAyLiBObyBz
cGFjZSBsZWZ0IHdoYXRzb2V2ZXIuCi0gICAgaWYgKGF2YWlsYWJsZVdpZHRoIDw9IDApIHsKLSAg
ICAgICAgKyttX2N1cnJlbnRSdW5JbmRleDsKLSAgICAgICAgcmV0dXJuIFJ1biB7IFJ1bjo6UG9z
aXRpb246OkxpbmVCZWdpbiwgY29udGVudFdpZHRoLCBjdXJyZW50SW5saW5lUnVuIH07Ci0gICAg
fQotCi0gICAgLy8gMy4gU29tZSBzcGFjZSBsZWZ0LiBMZXQncyBmaW5kIG91dCB3aGF0IHdlIG5l
ZWQgdG8gZG8gd2l0aCB0aGlzIHJ1bi4KLSAgICBhdXRvIGJyZWFraW5nQmVoYXZpb3IgPSBsaW5l
QnJlYWtpbmdCZWhhdmlvcihjdXJyZW50SW5saW5lUnVuLCBsaW5lSXNFbXB0eSk7Ci0gICAgaWYg
KGJyZWFraW5nQmVoYXZpb3IgPT0gTGluZUJyZWFraW5nQmVoYXZpb3I6OktlZXApIHsKLSAgICAg
ICAgKyttX2N1cnJlbnRSdW5JbmRleDsKLSAgICAgICAgcmV0dXJuIFJ1biB7IGxpbmVJc0VtcHR5
ID8gUnVuOjpQb3NpdGlvbjo6TGluZUJlZ2luIDogUnVuOjpQb3NpdGlvbjo6VW5kZXRlcm1pbmVk
LCBjb250ZW50V2lkdGgsIGN1cnJlbnRJbmxpbmVSdW4gfTsKLSAgICB9Ci0KLSAgICBpZiAoYnJl
YWtpbmdCZWhhdmlvciA9PSBMaW5lQnJlYWtpbmdCZWhhdmlvcjo6V3JhcFRvTmV4dExpbmUpIHsK
LSAgICAgICAgKyttX2N1cnJlbnRSdW5JbmRleDsKLSAgICAgICAgcmV0dXJuIFJ1biB7IFJ1bjo6
UG9zaXRpb246OkxpbmVCZWdpbiwgY29udGVudFdpZHRoLCBjdXJyZW50SW5saW5lUnVuIH07Ci0g
ICAgfQotCi0gICAgQVNTRVJUKGJyZWFraW5nQmVoYXZpb3IgPT0gTGluZUJyZWFraW5nQmVoYXZp
b3I6OkJyZWFrKTsKLSAgICAvLyBTcGxpdCBjb250ZW50LgotICAgIHJldHVybiBzcGxpdFJ1bihj
dXJyZW50SW5saW5lUnVuLCBjb250ZW50TG9naWNhbExlZnQsIGF2YWlsYWJsZVdpZHRoLCBsaW5l
SXNFbXB0eSk7Ci19CisgICAgaWYgKGlzPElubGluZVRleHRJdGVtPihpbmxpbmVJdGVtKSkKKyAg
ICAgICAgcmV0dXJuIHsgd29yZEJyZWFraW5nQmVoYXZpb3IoZG93bmNhc3Q8SW5saW5lVGV4dEl0
ZW0+KGlubGluZUl0ZW0pLCBsaW5lQ29udGV4dC5pc0VtcHR5KSwgaXNBdEJyZWFraW5nT3Bwb3J0
dW5pdHkgfTsKIAotYm9vbCBJbmxpbmVMaW5lQnJlYWtlcjo6aXNBdENvbnRlbnRFbmQoKSBjb25z
dAotewotICAgIHJldHVybiBtX2N1cnJlbnRSdW5JbmRleCA9PSBtX2lubGluZVJ1bnMuc2l6ZSgp
OworICAgIC8vIFdyYXAgbm9uLXRleHQgYm94ZXMgdG8gdGhlIG5leHQgbGluZSB1bmxlc3Mgd2Ug
Y2FuIHRyaW0gdHJhaWxpbmcgd2hpdGVzcGFjZS9pdCdzIHRoZSBmaXJzdCBpdGVtIG9uIHRoZSBs
aW5lLgorICAgIGF1dG8gYXZhaWxhYmxlV2lkdGggPSBsaW5lQ29udGV4dC5hdmFpbGFibGVXaWR0
aCArIGxpbmVDb250ZXh0LnRyaW1tYWJsZVdpZHRoOworICAgIGlmIChpbmxpbmVJdGVtLndpZHRo
KCkgPD0gYXZhaWxhYmxlV2lkdGggfHwgbGluZUNvbnRleHQuaXNFbXB0eSkKKyAgICAgICAgcmV0
dXJuIHsgQnJlYWtpbmdCZWhhdmlvcjo6S2VlcCwgaXNBdEJyZWFraW5nT3Bwb3J0dW5pdHkgfTsK
KyAgICByZXR1cm4geyBCcmVha2luZ0JlaGF2aW9yOjpXcmFwLCBpc0F0QnJlYWtpbmdPcHBvcnR1
bml0eSB9OwogfQogCi1JbmxpbmVMaW5lQnJlYWtlcjo6TGluZUJyZWFraW5nQmVoYXZpb3IgSW5s
aW5lTGluZUJyZWFrZXI6OmxpbmVCcmVha2luZ0JlaGF2aW9yKGNvbnN0IElubGluZVJ1blByb3Zp
ZGVyOjpSdW4mIGlubGluZVJ1biwgYm9vbCBsaW5lSXNFbXB0eSkKK0xpbmVCcmVha2VyOjpCcmVh
a2luZ0JlaGF2aW9yIExpbmVCcmVha2VyOjp3b3JkQnJlYWtpbmdCZWhhdmlvcihjb25zdCBJbmxp
bmVUZXh0SXRlbSYgaW5saW5lSXRlbSwgYm9vbCBsaW5lSXNFbXB0eSkgY29uc3QKIHsKLSAgICAv
LyBMaW5lIGJyZWFraW5nIGJlaGF2aW91cjoKKyAgICAvLyBXb3JkIGJyZWFraW5nIGJlaGF2aW91
cjoKICAgICAvLyAxLiBXaGl0ZXNhcGNlIGNvbGxhcHNlIG9uIC0+IHB1c2ggd2hpdGVzcGFjZSB0
byBuZXh0IGxpbmUuCiAgICAgLy8gMi4gV2hpdGVzcGFjZSBjb2xsYXBzZSBvZmYgLT4gd2hpdGVz
cGFjZSBpcyBzcGxpdCB3aGVyZSBwb3NzaWJsZS4KICAgICAvLyAzLiBOb24td2hpdGVzcGFjZSAt
PiBmaXJzdCBydW4gb24gdGhlIGxpbmUgLT4gZWl0aGVyIHNwbGl0IG9yIGtlcHQgb24gdGhlIGxp
bmUuIChkZXBlbmRzIG9uIG92ZXJmbG93LXdyYXApCiAgICAgLy8gNC4gTm9uLXdoaXRlc3BhY2Ug
LT4gYWxyZWFkeSBjb250ZW50IG9uIHRoZSBsaW5lIC0+IGVpdGhlciBnZXRzIHNwbGl0ICh3b3Jk
LWJyZWFrOiBicmVhay1hbGwpIG9yIGdldHMgcHVzaGVkIHRvIHRoZSBuZXh0IGxpbmUuCiAgICAg
Ly8gKEh5cGhlbmF0ZSB3aGVuIHBvc3NpYmxlKQogICAgIC8vIDUuIE5vbi10ZXh0IHR5cGUgLT4g
bmV4dCBsaW5lCi0gICAgYXV0byYgc3R5bGUgPSBpbmxpbmVSdW4uc3R5bGUoKTsKLQotICAgIGlm
IChpbmxpbmVSdW4uaXNXaGl0ZXNwYWNlKCkpCi0gICAgICAgIHJldHVybiBzdHlsZS5jb2xsYXBz
ZVdoaXRlU3BhY2UoKSA/IExpbmVCcmVha2luZ0JlaGF2aW9yOjpXcmFwVG9OZXh0TGluZSA6IExp
bmVCcmVha2luZ0JlaGF2aW9yOjpCcmVhazsKKyAgICBhdXRvJiBzdHlsZSA9IGlubGluZUl0ZW0u
c3R5bGUoKTsKIAotICAgIGlmIChpbmxpbmVSdW4uaXNOb25XaGl0ZXNwYWNlKCkpIHsKLSAgICAg
ICAgYXV0byBzaG91bGRIeXBlbmF0ZSA9ICFtX2h5cGhlbmF0aW9uSXNEaXNhYmxlZCAmJiBzdHls
ZS5oeXBoZW5zKCkgPT0gSHlwaGVuczo6QXV0byAmJiBjYW5IeXBoZW5hdGUoc3R5bGUubG9jYWxl
KCkpOwotICAgICAgICBpZiAoc2hvdWxkSHlwZW5hdGUpCi0gICAgICAgICAgICByZXR1cm4gTGlu
ZUJyZWFraW5nQmVoYXZpb3I6OkJyZWFrOworICAgIGlmIChpbmxpbmVJdGVtLmlzV2hpdGVzcGFj
ZSgpKQorICAgICAgICByZXR1cm4gc3R5bGUuY29sbGFwc2VXaGl0ZVNwYWNlKCkgPyBCcmVha2lu
Z0JlaGF2aW9yOjpXcmFwIDogQnJlYWtpbmdCZWhhdmlvcjo6QnJlYWs7CiAKLSAgICAgICAgaWYg
KHN0eWxlLmF1dG9XcmFwKCkpIHsKLSAgICAgICAgICAgIC8vIEJyZWFrIGFueSB3b3JkCi0gICAg
ICAgICAgICBpZiAoc3R5bGUud29yZEJyZWFrKCkgPT0gV29yZEJyZWFrOjpCcmVha0FsbCkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gTGluZUJyZWFraW5nQmVoYXZpb3I6OkJyZWFrOworICAgIGF1
dG8gc2hvdWxkSHlwZW5hdGUgPSAhbV9oeXBoZW5hdGlvbklzRGlzYWJsZWQgJiYgc3R5bGUuaHlw
aGVucygpID09IEh5cGhlbnM6OkF1dG8gJiYgY2FuSHlwaGVuYXRlKHN0eWxlLmxvY2FsZSgpKTsK
KyAgICBpZiAoc2hvdWxkSHlwZW5hdGUpCisgICAgICAgIHJldHVybiBCcmVha2luZ0JlaGF2aW9y
OjpCcmVhazsKIAotICAgICAgICAgICAgLy8gQnJlYWsgZmlyc3QgcnVuIG9uIGxpbmUuCi0gICAg
ICAgICAgICBpZiAobGluZUlzRW1wdHkgJiYgc3R5bGUuYnJlYWtXb3JkcygpICYmIHN0eWxlLnBy
ZXNlcnZlTmV3bGluZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBMaW5lQnJlYWtpbmdCZWhh
dmlvcjo6QnJlYWs7Ci0gICAgICAgIH0KKyAgICBpZiAoc3R5bGUuYXV0b1dyYXAoKSkgeworICAg
ICAgICAvLyBCcmVhayBhbnkgd29yZAorICAgICAgICBpZiAoc3R5bGUud29yZEJyZWFrKCkgPT0g
V29yZEJyZWFrOjpCcmVha0FsbCkKKyAgICAgICAgICAgIHJldHVybiBCcmVha2luZ0JlaGF2aW9y
OjpCcmVhazsKIAotICAgICAgICAvLyBOb24tYnJlYWthYmxlIG5vbi13aGl0ZXNwYWNlIHJ1bi4K
LSAgICAgICAgcmV0dXJuIGxpbmVJc0VtcHR5ID8gTGluZUJyZWFraW5nQmVoYXZpb3I6OktlZXAg
OiBMaW5lQnJlYWtpbmdCZWhhdmlvcjo6V3JhcFRvTmV4dExpbmU7CisgICAgICAgIC8vIEJyZWFr
IGZpcnN0IHJ1biBvbiBsaW5lLgorICAgICAgICBpZiAobGluZUlzRW1wdHkgJiYgc3R5bGUuYnJl
YWtXb3JkcygpICYmIHN0eWxlLnByZXNlcnZlTmV3bGluZSgpKQorICAgICAgICAgICAgcmV0dXJu
IEJyZWFraW5nQmVoYXZpb3I6OkJyZWFrOwogICAgIH0KIAotICAgIEFTU0VSVChpbmxpbmVSdW4u
aXNCb3goKSB8fCBpbmxpbmVSdW4uaXNGbG9hdCgpKTsKLSAgICAvLyBOb24tdGV4dCBpbmxpbmUg
cnVucy4KLSAgICByZXR1cm4gTGluZUJyZWFraW5nQmVoYXZpb3I6OldyYXBUb05leHRMaW5lOwor
ICAgIC8vIE5vbi1icmVha2FibGUgbm9uLXdoaXRlc3BhY2UgcnVuLgorICAgIHJldHVybiBsaW5l
SXNFbXB0eSA/IEJyZWFraW5nQmVoYXZpb3I6OktlZXAgOiBCcmVha2luZ0JlaGF2aW9yOjpXcmFw
OwogfQogCi1MYXlvdXRVbml0IElubGluZUxpbmVCcmVha2VyOjpydW5XaWR0aChjb25zdCBJbmxp
bmVSdW5Qcm92aWRlcjo6UnVuJiBpbmxpbmVSdW4sIExheW91dFVuaXQgY29udGVudExvZ2ljYWxM
ZWZ0KSBjb25zdAorTGF5b3V0VW5pdCBMaW5lQnJlYWtlcjo6cnVuV2lkdGgoY29uc3QgSW5saW5l
SXRlbSYgaW5saW5lSXRlbSwgTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbExlZnQpIGNvbnN0CiB7
Ci0gICAgQVNTRVJUKCFpbmxpbmVSdW4uaXNMaW5lQnJlYWsoKSk7CisgICAgaWYgKGlzPElubGlu
ZVRleHRJdGVtPihpbmxpbmVJdGVtKSkKKyAgICAgICAgcmV0dXJuIHRleHRXaWR0aChkb3duY2Fz
dDxJbmxpbmVUZXh0SXRlbT4oaW5saW5lSXRlbSksIGNvbnRlbnRMb2dpY2FsTGVmdCk7CiAKLSAg
ICBpZiAoaW5saW5lUnVuLmlzVGV4dCgpKQotICAgICAgICByZXR1cm4gdGV4dFdpZHRoKGlubGlu
ZVJ1biwgY29udGVudExvZ2ljYWxMZWZ0KTsKLQotICAgIEFTU0VSVChpbmxpbmVSdW4uaXNCb3go
KSB8fCBpbmxpbmVSdW4uaXNGbG9hdCgpKTsKLSAgICBhdXRvJiBpbmxpbmVJdGVtID0gaW5saW5l
UnVuLmlubGluZUl0ZW0oKTsKICAgICBhdXRvJiBsYXlvdXRCb3ggPSBpbmxpbmVJdGVtLmxheW91
dEJveCgpOwogICAgIEFTU0VSVChtX2xheW91dFN0YXRlLmhhc0Rpc3BsYXlCb3gobGF5b3V0Qm94
KSk7CiAgICAgYXV0byYgZGlzcGxheUJveCA9IG1fbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxh
eW91dEJveChsYXlvdXRCb3gpOwotICAgIHJldHVybiBpbmxpbmVJdGVtLm5vbkJyZWFrYWJsZVN0
YXJ0KCkgKyBkaXNwbGF5Qm94LndpZHRoKCkgKyBpbmxpbmVJdGVtLm5vbkJyZWFrYWJsZUVuZCgp
OwotfQogCi1MYXlvdXRVbml0IElubGluZUxpbmVCcmVha2VyOjp0ZXh0V2lkdGgoY29uc3QgSW5s
aW5lUnVuUHJvdmlkZXI6OlJ1biYgaW5saW5lUnVuLCBMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2Fs
TGVmdCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogRmluZCBhIHdheSB0byBtZXJnZSB0aGlzIGFu
ZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OnJ1bldpZHRoLgotICAgIGF1dG8m
IGlubGluZUl0ZW0gPSBpbmxpbmVSdW4uaW5saW5lSXRlbSgpOwotICAgIGF1dG8gdGV4dENvbnRl
eHQgPSBpbmxpbmVSdW4udGV4dENvbnRleHQoKTsKLSAgICBhdXRvIHN0YXJ0UG9zaXRpb24gPSB0
ZXh0Q29udGV4dC0+c3RhcnQoKTsKLSAgICBhdXRvIGxlbmd0aCA9IHRleHRDb250ZXh0LT5pc0Nv
bGxhcHNlZCgpID8gMSA6IHRleHRDb250ZXh0LT5sZW5ndGgoKTsKLQotICAgIC8vIEZJWE1FOiBJ
dCBkb2VzIG5vdCBkbyBwcm9wZXIga2VybmluZy9saWdhdHVyZSBoYW5kbGluZy4KLSAgICBMYXlv
dXRVbml0IHdpZHRoOwotICAgIGF1dG8gaXRlcmF0b3IgPSBtX2lubGluZUNvbnRlbnQuZmluZChj
b25zdF9jYXN0PElubGluZUl0ZW0qPigmaW5saW5lSXRlbSkpOwotI2lmICFBU1NFUlRfRElTQUJM
RUQKLSAgICBhdXRvIGlubGluZUl0ZW1FbmQgPSBtX2lubGluZUNvbnRlbnQuZW5kKCk7Ci0jZW5k
aWYKLSAgICB3aGlsZSAobGVuZ3RoKSB7Ci0gICAgICAgIEFTU0VSVChpdGVyYXRvciAhPSBpbmxp
bmVJdGVtRW5kKTsKLSAgICAgICAgYXV0byYgY3VycmVudElubGluZUl0ZW0gPSAqKml0ZXJhdG9y
OwotICAgICAgICBhdXRvIGlubGluZUl0ZW1MZW5ndGggPSBjdXJyZW50SW5saW5lSXRlbS50ZXh0
Q29udGVudCgpLmxlbmd0aCgpOwotICAgICAgICBhdXRvIGVuZFBvc2l0aW9uID0gc3RkOjptaW48
SXRlbVBvc2l0aW9uPihzdGFydFBvc2l0aW9uICsgbGVuZ3RoLCBpbmxpbmVJdGVtTGVuZ3RoKTsK
LSAgICAgICAgYXV0byB0ZXh0V2lkdGggPSBUZXh0VXRpbDo6d2lkdGgoY3VycmVudElubGluZUl0
ZW0sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uLCBjb250ZW50TG9naWNhbExlZnQpOwotCi0g
ICAgICAgIGF1dG8gbm9uQnJlYWthYmxlU3RhcnQgPSAhc3RhcnRQb3NpdGlvbiA/IGN1cnJlbnRJ
bmxpbmVJdGVtLm5vbkJyZWFrYWJsZVN0YXJ0KCkgOiAwX2x1OwotICAgICAgICBhdXRvIG5vbkJy
ZWFrYWJsZUVuZCA9ICBlbmRQb3NpdGlvbiA9PSBpbmxpbmVJdGVtTGVuZ3RoID8gY3VycmVudElu
bGluZUl0ZW0ubm9uQnJlYWthYmxlRW5kKCkgOiAwX2x1OwotICAgICAgICBhdXRvIGNvbnRlbnRX
aWR0aCA9IG5vbkJyZWFrYWJsZVN0YXJ0ICsgdGV4dFdpZHRoICsgbm9uQnJlYWthYmxlRW5kOwot
ICAgICAgICBjb250ZW50TG9naWNhbExlZnQgKz0gY29udGVudFdpZHRoOwotICAgICAgICB3aWR0
aCArPSBjb250ZW50V2lkdGg7Ci0gICAgICAgIGxlbmd0aCAtPSAoZW5kUG9zaXRpb24gLSBzdGFy
dFBvc2l0aW9uKTsKLQotICAgICAgICBzdGFydFBvc2l0aW9uID0gMDsKLSAgICAgICAgKytpdGVy
YXRvcjsKLSAgICB9Ci0gICAgcmV0dXJuIHdpZHRoOwotfQorICAgIGlmIChpbmxpbmVJdGVtLmlz
Q29udGFpbmVyU3RhcnQoKSkKKyAgICAgICAgcmV0dXJuIGRpc3BsYXlCb3gubWFyZ2luU3RhcnQo
KSArIGRpc3BsYXlCb3guYm9yZGVyTGVmdCgpICsgZGlzcGxheUJveC5wYWRkaW5nTGVmdCgpLnZh
bHVlT3IoMCk7CiAKLUlubGluZUxpbmVCcmVha2VyOjpSdW4gSW5saW5lTGluZUJyZWFrZXI6OnNw
bGl0UnVuKGNvbnN0IElubGluZVJ1blByb3ZpZGVyOjpSdW4mIGlubGluZVJ1biwgTGF5b3V0VW5p
dCwgTGF5b3V0VW5pdCwgYm9vbCkKLXsKLSAgICByZXR1cm4geyBSdW46OlBvc2l0aW9uOjpVbmRl
dGVybWluZWQsIHsgfSwgaW5saW5lUnVuIH07CisgICAgaWYgKGlubGluZUl0ZW0uaXNDb250YWlu
ZXJFbmQoKSkKKyAgICAgICAgcmV0dXJuIGRpc3BsYXlCb3gubWFyZ2luRW5kKCkgKyBkaXNwbGF5
Qm94LmJvcmRlclJpZ2h0KCkgKyBkaXNwbGF5Qm94LnBhZGRpbmdSaWdodCgpLnZhbHVlT3IoMCk7
CisKKyAgICBpZiAoaW5saW5lSXRlbS5pc0xpbmVCcmVhaygpKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIGlmIChpbmxpbmVJdGVtLmlzRmxvYXQoKSkKKyAgICAgICAgcmV0dXJuIGRpc3BsYXlC
b3gubWFyZ2luQm94KCkud2lkdGgoKTsKKworICAgIHJldHVybiBkaXNwbGF5Qm94LndpZHRoKCk7
CiB9CiAKLU9wdGlvbmFsPEl0ZW1Qb3NpdGlvbj4gSW5saW5lTGluZUJyZWFrZXI6OmFkanVzdFNw
bGl0UG9zaXRpb25XaXRoSHlwaGVuYXRpb24oY29uc3QgSW5saW5lUnVuUHJvdmlkZXI6OlJ1biYs
IEl0ZW1Qb3NpdGlvbiwgTGF5b3V0VW5pdCwgTGF5b3V0VW5pdCwgYm9vbCkgY29uc3QKK0xheW91
dFVuaXQgTGluZUJyZWFrZXI6OnRleHRXaWR0aChjb25zdCBJbmxpbmVUZXh0SXRlbSYgaW5saW5l
VGV4dEl0ZW0sIExheW91dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0KSBjb25zdAogewotICAgIHJl
dHVybiB7IH07CisgICAgaWYgKGlubGluZVRleHRJdGVtLmlzQ29sbGFwc2VkKCkpCisgICAgICAg
IHJldHVybiBUZXh0VXRpbDo6d2lkdGgoZG93bmNhc3Q8SW5saW5lQm94PihpbmxpbmVUZXh0SXRl
bS5sYXlvdXRCb3goKSksIGlubGluZVRleHRJdGVtLnN0YXJ0KCksIGlubGluZVRleHRJdGVtLnN0
YXJ0KCkgKyAxLCBjb250ZW50TG9naWNhbExlZnQpOworICAgIHJldHVybiBUZXh0VXRpbDo6d2lk
dGgoZG93bmNhc3Q8SW5saW5lQm94PihpbmxpbmVUZXh0SXRlbS5sYXlvdXRCb3goKSksIGlubGlu
ZVRleHRJdGVtLnN0YXJ0KCksIGlubGluZVRleHRJdGVtLmVuZCgpLCBjb250ZW50TG9naWNhbExl
ZnQpOwogfQotCiB9CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCcmVha2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnJlYWtlci5oCmluZGV4IDM4N2IwZmNm
MzVmNjU2ODE1MGFmNWIwMzZjYTBhZWM4YmMxYjc5ODkuLmE3OTRlMmRlMWU0MzRkZjg3OTk1N2Y3
ZTE2ZTlhN2ZiNTNkNjllNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxp
bmVmb3JtYXR0aW5nL0lubGluZUxpbmVCcmVha2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJyZWFrZXIuaApAQCAtMjcsNDEgKzI3LDM2
IEBACiAKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKIAotI2luY2x1ZGUg
IklubGluZVJ1blByb3ZpZGVyLmgiCi0jaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgotCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgTGF5b3V0IHsKIAotY2xhc3MgSW5saW5lTGluZUJy
ZWFrZXIgewotICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoSW5saW5lTGluZUJyZWFrZXIpOwor
Y2xhc3MgSW5saW5lVGV4dEl0ZW07CisKK2NsYXNzIExpbmVCcmVha2VyIHsKIHB1YmxpYzoKLSAg
ICBJbmxpbmVMaW5lQnJlYWtlcihjb25zdCBMYXlvdXRTdGF0ZSYsIGNvbnN0IElubGluZUNvbnRl
bnQmLCBjb25zdCBWZWN0b3I8SW5saW5lUnVuUHJvdmlkZXI6OlJ1bj4mKTsKKyAgICBMaW5lQnJl
YWtlcihjb25zdCBMYXlvdXRTdGF0ZSYpOwogCi0gICAgc3RydWN0IFJ1biB7Ci0gICAgICAgIGVu
dW0gY2xhc3MgUG9zaXRpb24geyBVbmRldGVybWluZWQsIExpbmVCZWdpbiwgTGluZUVuZCB9Owot
ICAgICAgICBQb3NpdGlvbiBwb3NpdGlvbjsKLSAgICAgICAgTGF5b3V0VW5pdCB3aWR0aDsKLSAg
ICAgICAgSW5saW5lUnVuUHJvdmlkZXI6OlJ1biBjb250ZW50OworICAgIGVudW0gY2xhc3MgQnJl
YWtpbmdCZWhhdmlvciB7IEtlZXAsIEJyZWFrLCBXcmFwIH07CisgICAgc3RydWN0IEJyZWFraW5n
Q29udGV4dCB7CisgICAgICAgIEJyZWFraW5nQmVoYXZpb3IgYnJlYWtpbmdCZWhhdmlvcjsKKyAg
ICAgICAgYm9vbCBpc0F0QnJlYWtpbmdPcHBvcnR1bml0eSB7IGZhbHNlIH07CisgICAgfTsKKyAg
ICBzdHJ1Y3QgTGluZUNvbnRleHQgeworICAgICAgICBMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRo
OworICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0OworICAgICAgICBMYXlvdXRVbml0IHRy
aW1tYWJsZVdpZHRoOworICAgICAgICBib29sIGlzRW1wdHkgeyBmYWxzZSB9OwogICAgIH07Ci0g
ICAgT3B0aW9uYWw8UnVuPiBuZXh0UnVuKExheW91dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0LCBM
YXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoLCBib29sIGxpbmVJc0VtcHR5KTsKKyAgICBCcmVha2lu
Z0NvbnRleHQgYnJlYWtpbmdDb250ZXh0KElubGluZUl0ZW0mLCBjb25zdCBMaW5lQ29udGV4dCk7
CiAKIHByaXZhdGU6Ci0gICAgZW51bSBjbGFzcyBMaW5lQnJlYWtpbmdCZWhhdmlvciB7IEtlZXAs
IEJyZWFrLCBXcmFwVG9OZXh0TGluZSB9OwotICAgIExpbmVCcmVha2luZ0JlaGF2aW9yIGxpbmVC
cmVha2luZ0JlaGF2aW9yKGNvbnN0IElubGluZVJ1blByb3ZpZGVyOjpSdW4mLCBib29sIGxpbmVJ
c0VtcHR5KTsKLSAgICBib29sIGlzQXRDb250ZW50RW5kKCkgY29uc3Q7Ci0gICAgUnVuIHNwbGl0
UnVuKGNvbnN0IElubGluZVJ1blByb3ZpZGVyOjpSdW4mLCBMYXlvdXRVbml0IGNvbnRlbnRMb2dp
Y2FsTGVmdCwgTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCwgYm9vbCBsaW5lSXNFbXB0eSk7Ci0g
ICAgTGF5b3V0VW5pdCBydW5XaWR0aChjb25zdCBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuJiwgTGF5
b3V0VW5pdCBjb250ZW50TG9naWNhbExlZnQpIGNvbnN0OwotICAgIExheW91dFVuaXQgdGV4dFdp
ZHRoKGNvbnN0IElubGluZVJ1blByb3ZpZGVyOjpSdW4mLCBMYXlvdXRVbml0IGNvbnRlbnRMb2dp
Y2FsTGVmdCkgY29uc3Q7Ci0gICAgT3B0aW9uYWw8SXRlbVBvc2l0aW9uPiBhZGp1c3RTcGxpdFBv
c2l0aW9uV2l0aEh5cGhlbmF0aW9uKGNvbnN0IElubGluZVJ1blByb3ZpZGVyOjpSdW4mLCBJdGVt
UG9zaXRpb24gc3BsaXRQb3NpdGlvbiwgTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbExlZnQsIExh
eW91dFVuaXQgYXZhaWxhYmxlV2lkdGgsIGJvb2wgaXNMaW5lRW1wdHkpIGNvbnN0OwogCi0gICAg
Y29uc3QgTGF5b3V0U3RhdGUmIG1fbGF5b3V0U3RhdGU7Ci0gICAgY29uc3QgSW5saW5lQ29udGVu
dCYgbV9pbmxpbmVDb250ZW50OwotICAgIGNvbnN0IFZlY3RvcjxJbmxpbmVSdW5Qcm92aWRlcjo6
UnVuPiYgbV9pbmxpbmVSdW5zOworICAgIEJyZWFraW5nQmVoYXZpb3Igd29yZEJyZWFraW5nQmVo
YXZpb3IoY29uc3QgSW5saW5lVGV4dEl0ZW0mLCBib29sIGxpbmVJc0VtcHR5KSBjb25zdDsKKyAg
ICBMYXlvdXRVbml0IHJ1bldpZHRoKGNvbnN0IElubGluZUl0ZW0mLCBMYXlvdXRVbml0IGNvbnRl
bnRMb2dpY2FsTGVmdCkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCB0ZXh0V2lkdGgoY29uc3QgSW5s
aW5lVGV4dEl0ZW0mLCBMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsTGVmdCkgY29uc3Q7CiAKLSAg
ICB1bnNpZ25lZCBtX2N1cnJlbnRSdW5JbmRleCB7IDAgfTsKLSAgICBPcHRpb25hbDxJdGVtUG9z
aXRpb24+IG1fc3BsaXRQb3NpdGlvbjsKLSAgICBib29sIG1faHlwaGVuYXRpb25Jc0Rpc2FibGVk
IHsgZmFsc2UgfTsKKyAgICBjb25zdCBMYXlvdXRTdGF0ZSYgbV9sYXlvdXRTdGF0ZTsKKyAgICBi
b29sIG1faHlwaGVuYXRpb25Jc0Rpc2FibGVkIHsgdHJ1ZSB9OwogfTsKIAogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lUnVuLmggYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVSdW4uaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDY1NTQ0MTZhYTUxMTUwMjlmNWQ1M2Y2YTA0NzFiZWRk
MWVlMTE1ZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVSdW4uaAorKysgL2Rl
di9udWxsCkBAIC0xLDExNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNp
ZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKLQotI2luY2x1ZGUgIklubGluZVJ1
blByb3ZpZGVyLmgiCi0jaW5jbHVkZSAiTGF5b3V0VW5pdC5oIgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci1uYW1lc3BhY2UgTGF5b3V0IHsKLQotc3RydWN0IElubGluZVJ1biB7Ci0gICAgSW5saW5l
UnVuKERpc3BsYXk6OkJveDo6UmVjdCBsb2dpY2FsUmVjdCwgY29uc3QgSW5saW5lSXRlbSYpOwot
Ci0gICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFJl
Y3QubGVmdCgpOyB9Ci0gICAgTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHQoKSBjb25zdCB7IHJldHVy
biBtX2xvZ2ljYWxSZWN0LnJpZ2h0KCk7IH0KLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxUb3AoKSBj
b25zdCB7IHJldHVybiBtX2xvZ2ljYWxSZWN0LnRvcCgpOyB9Ci0gICAgTGF5b3V0VW5pdCBsb2dp
Y2FsQm90dG9tKCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsUmVjdC5ib3R0b20oKTsgfQotCi0g
ICAgTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxSZWN0
LndpZHRoKCk7IH0KLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQoKSBjb25zdCB7IHJldHVy
biBtX2xvZ2ljYWxSZWN0LmhlaWdodCgpOyB9Ci0gICAgYm9vbCBvdmVybGFwc011bHRpcGxlSW5s
aW5lSXRlbXMoKSBjb25zdDsKLQotICAgIHZvaWQgc2V0TG9naWNhbFdpZHRoKExheW91dFVuaXQg
d2lkdGgpIHsgbV9sb2dpY2FsUmVjdC5zZXRXaWR0aCh3aWR0aCk7IH0KLSAgICB2b2lkIHNldExv
Z2ljYWxMZWZ0KExheW91dFVuaXQgbG9naWNhbExlZnQpIHsgbV9sb2dpY2FsUmVjdC5zZXRMZWZ0
KGxvZ2ljYWxMZWZ0KTsgfQotICAgIHZvaWQgc2V0TG9naWNhbFJpZ2h0KExheW91dFVuaXQgbG9n
aWNhbFJpZ2h0KSB7IG1fbG9naWNhbFJlY3Quc2hpZnRSaWdodFRvKGxvZ2ljYWxSaWdodCk7IH0K
LSAgICB2b2lkIG1vdmVWZXJ0aWNhbGx5KExheW91dFVuaXQgZGVsdGEpIHsgbV9sb2dpY2FsUmVj
dC5tb3ZlVmVydGljYWxseShkZWx0YSk7IH0KLSAgICB2b2lkIG1vdmVIb3Jpem9udGFsbHkoTGF5
b3V0VW5pdCBkZWx0YSkgeyBtX2xvZ2ljYWxSZWN0Lm1vdmVIb3Jpem9udGFsbHkoZGVsdGEpOyB9
Ci0KLSAgICBzdHJ1Y3QgRXhwYW5zaW9uT3Bwb3J0dW5pdHkgewotICAgICAgICB1bnNpZ25lZCBj
b3VudCB7IDAgfTsKLSAgICAgICAgRXhwYW5zaW9uQmVoYXZpb3IgYmVoYXZpb3IgeyBGb3JiaWRM
ZWFkaW5nRXhwYW5zaW9uIHwgRm9yYmlkVHJhaWxpbmdFeHBhbnNpb24gfTsKLSAgICAgICAgTGF5
b3V0VW5pdCBleHBhbnNpb247Ci0gICAgfTsKLSAgICBFeHBhbnNpb25PcHBvcnR1bml0eSYgZXhw
YW5zaW9uT3Bwb3J0dW5pdHkoKSB7IHJldHVybiBtX2V4cGFuc2lvbk9wcG9ydHVuaXR5OyB9Ci0K
LSAgICBzdHJ1Y3QgVGV4dENvbnRleHQgewotICAgIHB1YmxpYzoKLSAgICAgICAgVGV4dENvbnRl
eHQoSXRlbVBvc2l0aW9uLCB1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgICAgIHZvaWQgc2V0U3Rh
cnQoSXRlbVBvc2l0aW9uIHN0YXJ0KSB7IG1fc3RhcnQgPSBzdGFydDsgfQotICAgICAgICB2b2lk
IHNldExlbmd0aCh1bnNpZ25lZCBsZW5ndGgpIHsgbV9sZW5ndGggPSBsZW5ndGg7IH0KLQotICAg
ICAgICBJdGVtUG9zaXRpb24gc3RhcnQoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0OyB9Ci0gICAg
ICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9Ci0KLSAgICBw
cml2YXRlOgotICAgICAgICBJdGVtUG9zaXRpb24gbV9zdGFydDsKLSAgICAgICAgdW5zaWduZWQg
bV9sZW5ndGg7Ci0gICAgfTsKLSAgICB2b2lkIHNldFRleHRDb250ZXh0KFRleHRDb250ZXh0IHRl
eHRDb250ZXh0KSB7IG1fdGV4dENvbnRleHQuZW1wbGFjZSh0ZXh0Q29udGV4dCk7IH0KLSAgICBP
cHRpb25hbDxUZXh0Q29udGV4dD4mIHRleHRDb250ZXh0KCkgeyByZXR1cm4gbV90ZXh0Q29udGV4
dDsgfQotICAgIE9wdGlvbmFsPFRleHRDb250ZXh0PiB0ZXh0Q29udGV4dCgpIGNvbnN0IHsgcmV0
dXJuIG1fdGV4dENvbnRleHQ7IH0KLQotICAgIGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0o
KSBjb25zdCB7IHJldHVybiBtX2lubGluZUl0ZW07IH0KLQotcHJpdmF0ZToKLSAgICBEaXNwbGF5
OjpCb3g6OlJlY3QgbV9sb2dpY2FsUmVjdDsKLSAgICBFeHBhbnNpb25PcHBvcnR1bml0eSBtX2V4
cGFuc2lvbk9wcG9ydHVuaXR5OwotCi0gICAgY29uc3QgSW5saW5lSXRlbSYgbV9pbmxpbmVJdGVt
OwotICAgIE9wdGlvbmFsPFRleHRDb250ZXh0PiBtX3RleHRDb250ZXh0OwotfTsKLQotdXNpbmcg
SW5saW5lUnVucyA9IFZlY3RvcjxJbmxpbmVSdW4+OwotCi1pbmxpbmUgSW5saW5lUnVuOjpJbmxp
bmVSdW4oRGlzcGxheTo6Qm94OjpSZWN0IGxvZ2ljYWxSZWN0LCBjb25zdCBJbmxpbmVJdGVtJiBp
bmxpbmVJdGVtKQotICAgIDogbV9sb2dpY2FsUmVjdChsb2dpY2FsUmVjdCkKLSAgICAsIG1faW5s
aW5lSXRlbShpbmxpbmVJdGVtKQotewotfQotCi1pbmxpbmUgSW5saW5lUnVuOjpUZXh0Q29udGV4
dDo6VGV4dENvbnRleHQoSXRlbVBvc2l0aW9uIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgpCi0gICAg
OiBtX3N0YXJ0KHN0YXJ0KQotICAgICwgbV9sZW5ndGgobGVuZ3RoKQotewotfQotCi1pbmxpbmUg
Ym9vbCBJbmxpbmVSdW46Om92ZXJsYXBzTXVsdGlwbGVJbmxpbmVJdGVtcygpIGNvbnN0Ci17Ci0g
ICAgLy8gT25seSB0ZXh0IGNvbnRlbnQgY2FuIG92ZXJsYXAgbXVsdGlwbGUgaW5saW5lIGVsZW1l
bnRzLgotICAgIGlmICghbV90ZXh0Q29udGV4dCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgYXV0byBlbmRQb3NpdGlvbiA9IG1fdGV4dENvbnRleHQtPnN0YXJ0KCkgKyBtX3RleHRDb250
ZXh0LT5sZW5ndGgoKTsKLSAgICByZXR1cm4gZW5kUG9zaXRpb24gPiBtX2lubGluZUl0ZW0udGV4
dENvbnRlbnQoKS5sZW5ndGgoKTsKLX0KLQotfQotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVSdW5Qcm92aWRlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVSdW5Qcm92aWRl
ci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllYjIwZjBhZmQ3MTJiNTM2MjAx
ZDA2ZjdjYjQzNzVlOGIxZTRjZDkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5l
UnVuUHJvdmlkZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTk4ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW5saW5lUnVuUHJvdmlkZXIuaCIK
LQotI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQotCi0jaW5jbHVkZSAiQnJl
YWtMaW5lcy5oIgotI2luY2x1ZGUgIkxheW91dElubGluZUJveC5oIgotI2luY2x1ZGUgPHd0Zi9J
c29NYWxsb2NJbmxpbmVzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLW5hbWVzcGFjZSBMYXlv
dXQgewotCi1XVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSW5saW5lUnVuUHJvdmlkZXIpOwot
Ci1JbmxpbmVSdW5Qcm92aWRlcjo6SW5saW5lUnVuUHJvdmlkZXIoKQotewotfQotCi12b2lkIElu
bGluZVJ1blByb3ZpZGVyOjphcHBlbmQoY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSkKLXsK
LSAgICBzd2l0Y2ggKGlubGluZUl0ZW0udHlwZSgpKSB7Ci0gICAgY2FzZSBJbmxpbmVJdGVtOjpU
eXBlOjpUZXh0OgotICAgICAgICAvLyBTcGVjaWFsIGNhc2UgdGV4dCBjb250ZW50LiBUaGV5IGNh
biBvdmVybGFwIG11bHRpcGxlIGl0ZW1zLiA8c3Bhbj5mb288L3NwYW4+PHNwYW4+YmFyPC9zcGFu
PgotICAgICAgICBwcm9jZXNzSW5saW5lVGV4dEl0ZW0oaW5saW5lSXRlbSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgSW5saW5lSXRlbTo6VHlwZTo6SGFyZExpbmVCcmVhazoKLSAgICAgICAg
bV9pbmxpbmVSdW5zLmFwcGVuZChJbmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpjcmVhdGVIYXJkTGlu
ZUJyZWFrUnVuKGlubGluZUl0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbmxpbmVJ
dGVtOjpUeXBlOjpJbmxpbmVCb3g6Ci0gICAgICAgIG1faW5saW5lUnVucy5hcHBlbmQoSW5saW5l
UnVuUHJvdmlkZXI6OlJ1bjo6Y3JlYXRlQm94UnVuKGlubGluZUl0ZW0pKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBJbmxpbmVJdGVtOjpUeXBlOjpGbG9hdDoKLSAgICAgICAgbV9pbmxpbmVS
dW5zLmFwcGVuZChJbmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpjcmVhdGVGbG9hdFJ1bihpbmxpbmVJ
dGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1Rf
SU1QTEVNRU5URURfWUVUKCk7Ci0gICAgfQotfQotCi12b2lkIElubGluZVJ1blByb3ZpZGVyOjpp
bnNlcnRCZWZvcmUoY29uc3QgQm94JiwgY29uc3QgQm94JikKLXsKLX0KLQotdm9pZCBJbmxpbmVS
dW5Qcm92aWRlcjo6cmVtb3ZlKGNvbnN0IEJveCYpCi17Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9v
bCBpc1doaXRlc3BhY2UoY2hhciBjaGFyYWN0ZXIsIGJvb2wgcHJlc2VydmVOZXdsaW5lKQotewot
ICAgIHJldHVybiBjaGFyYWN0ZXIgPT0gJyAnIHx8IGNoYXJhY3RlciA9PSAnXHQnIHx8IChjaGFy
YWN0ZXIgPT0gJ1xuJyAmJiAhcHJlc2VydmVOZXdsaW5lKTsKLX0KLQotc3RhdGljIGlubGluZSBi
b29sIGlzU29mdExpbmVCcmVhayhjaGFyIGNoYXJhY3RlciwgYm9vbCBwcmVzZXJ2ZU5ld2xpbmUp
Ci17Ci0gICAgcmV0dXJuIHByZXNlcnZlTmV3bGluZSAmJiBjaGFyYWN0ZXIgPT0gJ1xuJzsKLX0K
LQotYm9vbCBJbmxpbmVSdW5Qcm92aWRlcjo6aXNDb250aW5vdXNDb250ZW50KElubGluZVJ1blBy
b3ZpZGVyOjpSdW46OlR5cGUgbmV3UnVuVHlwZSwgY29uc3QgSW5saW5lSXRlbSYgbmV3SW5saW5l
SXRlbSkKLXsKLSAgICBpZiAobV9pbmxpbmVSdW5zLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgYXV0byYgbGFzdFJ1biA9IG1faW5saW5lUnVucy5sYXN0KCk7Ci0gICAg
Ly8gU2FtZSBlbGVtZW50LCBjaGVjayB0eXBlIG9ubHkuCi0gICAgaWYgKCZuZXdJbmxpbmVJdGVt
ID09ICZsYXN0UnVuLmlubGluZUl0ZW0oKSkKLSAgICAgICAgcmV0dXJuIG5ld1J1blR5cGUgPT0g
bGFzdFJ1bi50eXBlKCk7Ci0KLSAgICAvLyBUaGlzIG5ldyBydW4gaXMgZnJvbSBhIGRpZmZlcmVu
dCBpbmxpbmUgYm94LgotICAgIC8vIEZJWE1FOiBjaGVjayBzdHlsZS4KLSAgICBpZiAobmV3UnVu
VHlwZSA9PSBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpUeXBlOjpOb25XaGl0ZXNwYWNlICYmIGxh
c3RSdW4uaXNOb25XaGl0ZXNwYWNlKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYg
KG5ld1J1blR5cGUgPT0gSW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6VHlwZTo6V2hpdGVzcGFjZSAm
JiBsYXN0UnVuLmlzV2hpdGVzcGFjZSgpKQotICAgICAgICByZXR1cm4gbmV3SW5saW5lSXRlbS5z
dHlsZSgpLmNvbGxhcHNlV2hpdGVTcGFjZSgpID09IGxhc3RSdW4uc3R5bGUoKS5jb2xsYXBzZVdo
aXRlU3BhY2UoKTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBJbmxpbmVSdW5Qcm92
aWRlcjo6cHJvY2Vzc0lubGluZVRleHRJdGVtKGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0p
Ci17Ci0gICAgLy8gV2UgbmVlZCB0byByZXNldCB0aGUgcnVuIGl0ZXJhdG9yIHdoZW4gdGhlIHRl
eHQgY29udGVudCBpcyBub3QgY29udGludW91cy4KLSAgICAvLyA8c3Bhbj5mb288L3NwYW4+PGlt
ZyBzcmM9IiI+PHNwYW4+YmFyPC9zcGFuPiAoRklYTUU6IGZsb2F0cz8pCi0gICAgaWYgKCFtX2lu
bGluZVJ1bnMuaXNFbXB0eSgpICYmICFtX2lubGluZVJ1bnMubGFzdCgpLmlzVGV4dCgpKSB7Ci0g
ICAgICAgIG1fbGluZUJyZWFrSXRlcmF0b3IucmVzZXRQcmlvckNvbnRleHQoKTsKLSAgICAgICAg
bV9saW5lQnJlYWtJdGVyYXRvci5yZXNldFN0cmluZ0FuZFJlbGVhc2VJdGVyYXRvcigiIiwgIiIs
IExpbmVCcmVha0l0ZXJhdG9yTW9kZTo6RGVmYXVsdCk7Ci0gICAgfQotCi0gICAgYXV0byYgc3R5
bGUgPSBpbmxpbmVJdGVtLnN0eWxlKCk7Ci0gICAgYXV0byB0ZXh0ID0gaW5saW5lSXRlbS50ZXh0
Q29udGVudCgpOwotICAgIEl0ZW1Qb3NpdGlvbiBjdXJyZW50SXRlbVBvc2l0aW9uID0gMDsKLSAg
ICB3aGlsZSAoY3VycmVudEl0ZW1Qb3NpdGlvbiA8IHRleHQubGVuZ3RoKCkpIHsKLQotICAgICAg
ICAvLyBTb2Z0IGxpbmVicmVhaz8KLSAgICAgICAgaWYgKGlzU29mdExpbmVCcmVhayh0ZXh0W2N1
cnJlbnRJdGVtUG9zaXRpb25dLCBzdHlsZS5wcmVzZXJ2ZU5ld2xpbmUoKSkpIHsKLSAgICAgICAg
ICAgIG1faW5saW5lUnVucy5hcHBlbmQoSW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6Y3JlYXRlU29m
dExpbmVCcmVha1J1bihpbmxpbmVJdGVtKSk7Ci0gICAgICAgICAgICArK2N1cnJlbnRJdGVtUG9z
aXRpb247Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGF1dG8g
aXNXaGl0ZXNwYWNlUnVuID0gaXNXaGl0ZXNwYWNlKHRleHRbY3VycmVudEl0ZW1Qb3NpdGlvbl0s
IHN0eWxlLnByZXNlcnZlTmV3bGluZSgpKTsKLSAgICAgICAgYXV0byBsZW5ndGggPSBpc1doaXRl
c3BhY2VSdW4gPyBtb3ZlVG9OZXh0Tm9uV2hpdGVzcGFjZVBvc2l0aW9uKGlubGluZUl0ZW0sIGN1
cnJlbnRJdGVtUG9zaXRpb24pIDogbW92ZVRvTmV4dEJyZWFrYWJsZVBvc2l0aW9uKGlubGluZUl0
ZW0sIGN1cnJlbnRJdGVtUG9zaXRpb24pOwotCi0gICAgICAgIGlmIChpc0NvbnRpbm91c0NvbnRl
bnQoaXNXaGl0ZXNwYWNlUnVuID8gSW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6VHlwZTo6V2hpdGVz
cGFjZSA6IElubGluZVJ1blByb3ZpZGVyOjpSdW46OlR5cGU6Ok5vbldoaXRlc3BhY2UsIGlubGlu
ZUl0ZW0pKQotICAgICAgICAgICAgbV9pbmxpbmVSdW5zLmxhc3QoKS50ZXh0Q29udGV4dCgpLT5l
eHBhbmQobGVuZ3RoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBtX2lubGluZVJ1bnMu
YXBwZW5kKGlzV2hpdGVzcGFjZVJ1biA/IElubGluZVJ1blByb3ZpZGVyOjpSdW46OmNyZWF0ZVdo
aXRlc3BhY2VSdW4oaW5saW5lSXRlbSwgY3VycmVudEl0ZW1Qb3NpdGlvbiwgbGVuZ3RoLCBzdHls
ZS5jb2xsYXBzZVdoaXRlU3BhY2UoKSkKLSAgICAgICAgICAgICAgICA6IElubGluZVJ1blByb3Zp
ZGVyOjpSdW46OmNyZWF0ZU5vbldoaXRlc3BhY2VSdW4oaW5saW5lSXRlbSwgY3VycmVudEl0ZW1Q
b3NpdGlvbiwgbGVuZ3RoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBjdXJyZW50SXRlbVBvc2l0
aW9uICs9IGxlbmd0aDsKLSAgICB9Ci19Ci0KLXVuc2lnbmVkIElubGluZVJ1blByb3ZpZGVyOjpt
b3ZlVG9OZXh0Tm9uV2hpdGVzcGFjZVBvc2l0aW9uKGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0
ZW0sIEl0ZW1Qb3NpdGlvbiBjdXJyZW50SXRlbVBvc2l0aW9uKQotewotICAgIGF1dG8gdGV4dCA9
IGlubGluZUl0ZW0udGV4dENvbnRlbnQoKTsKLSAgICBhdXRvIHByZXNlcnZlTmV3bGluZSA9IGlu
bGluZUl0ZW0uc3R5bGUoKS5wcmVzZXJ2ZU5ld2xpbmUoKTsKLSAgICBhdXRvIG5leHROb25XaGl0
ZVNwYWNlUG9zaXRpb24gPSBjdXJyZW50SXRlbVBvc2l0aW9uOwotCi0gICAgd2hpbGUgKG5leHRO
b25XaGl0ZVNwYWNlUG9zaXRpb24gPCB0ZXh0Lmxlbmd0aCgpICYmIGlzV2hpdGVzcGFjZSh0ZXh0
W25leHROb25XaGl0ZVNwYWNlUG9zaXRpb25dLCBwcmVzZXJ2ZU5ld2xpbmUpKQotICAgICAgICAr
K25leHROb25XaGl0ZVNwYWNlUG9zaXRpb247Ci0gICAgcmV0dXJuIG5leHROb25XaGl0ZVNwYWNl
UG9zaXRpb24gLSBjdXJyZW50SXRlbVBvc2l0aW9uOwotfQotCi11bnNpZ25lZCBJbmxpbmVSdW5Q
cm92aWRlcjo6bW92ZVRvTmV4dEJyZWFrYWJsZVBvc2l0aW9uKGNvbnN0IElubGluZUl0ZW0mIGlu
bGluZUl0ZW0sIEl0ZW1Qb3NpdGlvbiBjdXJyZW50SXRlbVBvc2l0aW9uKQotewotICAgIGF1dG8g
ZmluZE5leHRCcmVha2FibGVQb3NpdGlvbiA9IFsmXShhdXRvIGlubGluZVRleHQsIGF1dG8mIHN0
eWxlLCBJdGVtUG9zaXRpb24gc3RhcnRQb3NpdGlvbikgewotICAgICAgICAvLyBTd2FwIGl0ZXJh
dG9yJ3MgY29udGVudCBpZiB3ZSBhZHZhbmNlZCB0byBhIG5ldyBzdHJpbmcuCi0gICAgICAgIGF1
dG8gaXRlcmF0b3JUZXh0ID0gbV9saW5lQnJlYWtJdGVyYXRvci5zdHJpbmdWaWV3KCk7Ci0KLSAg
ICAgICAgaWYgKGl0ZXJhdG9yVGV4dCAhPSBpbmxpbmVUZXh0KSB7Ci0gICAgICAgICAgICBhdXRv
IHRleHRMZW5ndGggPSBpdGVyYXRvclRleHQubGVuZ3RoKCk7Ci0gICAgICAgICAgICBhdXRvIGxh
c3RDaGFyYWN0ZXIgPSB0ZXh0TGVuZ3RoID4gMCA/IGl0ZXJhdG9yVGV4dFt0ZXh0TGVuZ3RoIC0g
MV0gOiAwOwotICAgICAgICAgICAgYXV0byBzZWNvbmRUb0xhc3RDaGFyYWN0ZXIgPSB0ZXh0TGVu
Z3RoID4gMSA/IGl0ZXJhdG9yVGV4dFt0ZXh0TGVuZ3RoIC0gMl0gOiAwOwotICAgICAgICAgICAg
bV9saW5lQnJlYWtJdGVyYXRvci5zZXRQcmlvckNvbnRleHQobGFzdENoYXJhY3Rlciwgc2Vjb25k
VG9MYXN0Q2hhcmFjdGVyKTsKLSAgICAgICAgICAgIG1fbGluZUJyZWFrSXRlcmF0b3IucmVzZXRT
dHJpbmdBbmRSZWxlYXNlSXRlcmF0b3IoaW5saW5lVGV4dCwgc3R5bGUubG9jYWxlKCksIExpbmVC
cmVha0l0ZXJhdG9yTW9kZTo6RGVmYXVsdCk7Ci0gICAgICAgIH0KLQotICAgICAgICBhdXRvIGtl
ZXBBbGxXb3Jkc0ZvckNKSyA9IHN0eWxlLndvcmRCcmVhaygpID09IFdvcmRCcmVhazo6S2VlcEFs
bDsKLSAgICAgICAgYXV0byBicmVha05CU1AgPSBzdHlsZS5hdXRvV3JhcCgpICYmIHN0eWxlLm5i
c3BNb2RlKCkgPT0gTkJTUE1vZGU6OlNwYWNlOwotCi0gICAgICAgIGlmIChrZWVwQWxsV29yZHNG
b3JDSkspIHsKLSAgICAgICAgICAgIGlmIChicmVha05CU1ApCi0gICAgICAgICAgICAgICAgcmV0
dXJuIG5leHRCcmVha2FibGVQb3NpdGlvbktlZXBpbmdBbGxXb3JkcyhtX2xpbmVCcmVha0l0ZXJh
dG9yLCBzdGFydFBvc2l0aW9uKTsKLSAgICAgICAgICAgIHJldHVybiBuZXh0QnJlYWthYmxlUG9z
aXRpb25LZWVwaW5nQWxsV29yZHNJZ25vcmluZ05CU1AobV9saW5lQnJlYWtJdGVyYXRvciwgc3Rh
cnRQb3NpdGlvbik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobV9saW5lQnJlYWtJdGVyYXRv
ci5tb2RlKCkgPT0gTGluZUJyZWFrSXRlcmF0b3JNb2RlOjpEZWZhdWx0KSB7Ci0gICAgICAgICAg
ICBpZiAoYnJlYWtOQlNQKQotICAgICAgICAgICAgICAgIHJldHVybiBXZWJDb3JlOjpuZXh0QnJl
YWthYmxlUG9zaXRpb24obV9saW5lQnJlYWtJdGVyYXRvciwgc3RhcnRQb3NpdGlvbik7Ci0gICAg
ICAgICAgICByZXR1cm4gbmV4dEJyZWFrYWJsZVBvc2l0aW9uSWdub3JpbmdOQlNQKG1fbGluZUJy
ZWFrSXRlcmF0b3IsIHN0YXJ0UG9zaXRpb24pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGJy
ZWFrTkJTUCkKLSAgICAgICAgICAgIHJldHVybiBuZXh0QnJlYWthYmxlUG9zaXRpb25XaXRob3V0
U2hvcnRjdXQobV9saW5lQnJlYWtJdGVyYXRvciwgc3RhcnRQb3NpdGlvbik7Ci0gICAgICAgIHJl
dHVybiBuZXh0QnJlYWthYmxlUG9zaXRpb25JZ25vcmluZ05CU1BXaXRob3V0U2hvcnRjdXQobV9s
aW5lQnJlYWtJdGVyYXRvciwgc3RhcnRQb3NpdGlvbik7Ci0gICAgfTsKLQotICAgIGF1dG8mIHN0
eWxlID0gaW5saW5lSXRlbS5zdHlsZSgpOwotICAgIGF1dG8gdGV4dExlbmd0aCA9IGlubGluZUl0
ZW0udGV4dENvbnRlbnQoKS5sZW5ndGgoKTsKLSAgICBBU1NFUlQodGV4dExlbmd0aCk7Ci0gICAg
d2hpbGUgKGN1cnJlbnRJdGVtUG9zaXRpb24gPCB0ZXh0TGVuZ3RoIC0gMSkgewotICAgICAgICBh
dXRvIG5leHRCcmVha2FibGVQb3NpdGlvbiA9IGZpbmROZXh0QnJlYWthYmxlUG9zaXRpb24oaW5s
aW5lSXRlbS50ZXh0Q29udGVudCgpLCBzdHlsZSwgY3VycmVudEl0ZW1Qb3NpdGlvbik7Ci0gICAg
ICAgIGlmIChuZXh0QnJlYWthYmxlUG9zaXRpb24gIT0gY3VycmVudEl0ZW1Qb3NpdGlvbikKLSAg
ICAgICAgICAgIHJldHVybiBuZXh0QnJlYWthYmxlUG9zaXRpb24gLSBjdXJyZW50SXRlbVBvc2l0
aW9uOwotICAgICAgICArK2N1cnJlbnRJdGVtUG9zaXRpb247Ci0gICAgfQotICAgIHJldHVybiB0
ZXh0TGVuZ3RoOwotfQotCi19Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZVJ1blByb3ZpZGVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVSdW5Qcm92aWRlci5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNzdjMTQ4ZWVlZTBjYWRhMjQ1NjYxZWZlYjhmYzU2N2Rl
ZWQ4NjA4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZVJ1blByb3ZpZGVyLmgK
KysrIC9kZXYvbnVsbApAQCAtMSwxNjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25j
ZQotCi0jaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCi0KLSNpbmNsdWRlICJJ
bmxpbmVJdGVtLmgiCi0jaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLW5hbWVzcGFj
ZSBMYXlvdXQgewotCi11c2luZyBJdGVtUG9zaXRpb24gPSB1bnNpZ25lZDsKLQotY2xhc3MgSW5s
aW5lUnVuUHJvdmlkZXIgewotICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoSW5saW5lUnVuUHJv
dmlkZXIpOwotcHVibGljOgotICAgIElubGluZVJ1blByb3ZpZGVyKCk7Ci0KLSAgICB2b2lkIGFw
cGVuZChjb25zdCBJbmxpbmVJdGVtJik7Ci0gICAgdm9pZCBpbnNlcnRCZWZvcmUoY29uc3QgQm94
JiwgY29uc3QgQm94JiBiZWZvcmUpOwotICAgIHZvaWQgcmVtb3ZlKGNvbnN0IEJveCYpOwotCi0g
ICAgc3RydWN0IFJ1biB7Ci0KLSAgICAgICAgc3RhdGljIFJ1biBjcmVhdGVCb3hSdW4oY29uc3Qg
SW5saW5lSXRlbSYpOwotICAgICAgICBzdGF0aWMgUnVuIGNyZWF0ZUZsb2F0UnVuKGNvbnN0IElu
bGluZUl0ZW0mKTsKLSAgICAgICAgc3RhdGljIFJ1biBjcmVhdGVIYXJkTGluZUJyZWFrUnVuKGNv
bnN0IElubGluZUl0ZW0mKTsKLSAgICAgICAgc3RhdGljIFJ1biBjcmVhdGVTb2Z0TGluZUJyZWFr
UnVuKGNvbnN0IElubGluZUl0ZW0mKTsKLSAgICAgICAgc3RhdGljIFJ1biBjcmVhdGVXaGl0ZXNw
YWNlUnVuKGNvbnN0IElubGluZUl0ZW0mLCBJdGVtUG9zaXRpb24gc3RhcnQsIHVuc2lnbmVkIGxl
bmd0aCwgYm9vbCBpc0NvbGxhcHNpYmxlKTsKLSAgICAgICAgc3RhdGljIFJ1biBjcmVhdGVOb25X
aGl0ZXNwYWNlUnVuKGNvbnN0IElubGluZUl0ZW0mLCBJdGVtUG9zaXRpb24gc3RhcnQsIHVuc2ln
bmVkIGxlbmd0aCk7Ci0KLSAgICAgICAgZW51bSBjbGFzcyBUeXBlIHsKLSAgICAgICAgICAgIEJv
eCwKLSAgICAgICAgICAgIEZsb2F0LAotICAgICAgICAgICAgU29mdExpbmVCcmVhaywKLSAgICAg
ICAgICAgIEhhcmRMaW5lQnJlYWssCi0gICAgICAgICAgICBXaGl0ZXNwYWNlLAotICAgICAgICAg
ICAgTm9uV2hpdGVzcGFjZQotICAgICAgICB9OwotICAgICAgICBUeXBlIHR5cGUoKSBjb25zdCB7
IHJldHVybiBtX3R5cGU7IH0KLSAgICAgICAgYm9vbCBpc1RleHQoKSBjb25zdCB7IHJldHVybiBt
X3R5cGUgPT0gUnVuOjpUeXBlOjpXaGl0ZXNwYWNlIHx8IG1fdHlwZSA9PSBSdW46OlR5cGU6Ok5v
bldoaXRlc3BhY2UgfHwgbV90eXBlID09IFJ1bjo6VHlwZTo6U29mdExpbmVCcmVhayB8fCBtX3R5
cGUgPT0gUnVuOjpUeXBlOjpIYXJkTGluZUJyZWFrOyB9Ci0gICAgICAgIGJvb2wgaXNXaGl0ZXNw
YWNlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IFR5cGU6OldoaXRlc3BhY2U7IH0KLSAgICAg
ICAgYm9vbCBpc05vbldoaXRlc3BhY2UoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gVHlwZTo6
Tm9uV2hpdGVzcGFjZTsgfQotICAgICAgICBib29sIGlzTGluZUJyZWFrKCkgY29uc3QgeyByZXR1
cm4gbV90eXBlID09IFJ1bjo6VHlwZTo6U29mdExpbmVCcmVhayB8fCBtX3R5cGUgPT0gUnVuOjpU
eXBlOjpIYXJkTGluZUJyZWFrOyB9Ci0gICAgICAgIGJvb2wgaXNCb3goKSBjb25zdCB7IHJldHVy
biBtX3R5cGUgPT0gVHlwZTo6Qm94OyB9Ci0gICAgICAgIGJvb2wgaXNGbG9hdCgpIGNvbnN0IHsg
cmV0dXJuIG1fdHlwZSA9PSBUeXBlOjpGbG9hdDsgfQotCi0gICAgICAgIHN0cnVjdCBUZXh0Q29u
dGV4dCB7Ci0KLSAgICAgICAgICAgIGVudW0gY2xhc3MgSXNDb2xsYXBzZWQgeyBObywgWWVzIH07
Ci0gICAgICAgICAgICBUZXh0Q29udGV4dChJdGVtUG9zaXRpb24sIHVuc2lnbmVkIGxlbmd0aCwg
SXNDb2xsYXBzZWQpOwotCi0gICAgICAgICAgICBJdGVtUG9zaXRpb24gc3RhcnQoKSBjb25zdCB7
IHJldHVybiBtX3N0YXJ0OyB9Ci0gICAgICAgICAgICAvLyBOb3RlIHRoYXQgJ2VuZCcgcG9zaXRp
b24gZG9lcyBub3QgZXF1YWwgdG8gc3RhcnQgKyBsZW5ndGggd2hlbiBydW4gb3ZlcmxhcHMgbXVs
dGlwbGUgSW5saW5lSXRlbXMuCi0gICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7
IHJldHVybiBtX2xlbmd0aDsgfQotICAgICAgICAgICAgYm9vbCBpc0NvbGxhcHNlZCgpIGNvbnN0
IHsgcmV0dXJuIG1faXNDb2xsYXBzZWQgPT0gSXNDb2xsYXBzZWQ6OlllczsgfQotCi0gICAgICAg
IHByaXZhdGU6Ci0gICAgICAgICAgICBmcmllbmQgY2xhc3MgSW5saW5lUnVuUHJvdmlkZXI7Ci0K
LSAgICAgICAgICAgIHZvaWQgZXhwYW5kKHVuc2lnbmVkIGxlbmd0aCkgeyBtX2xlbmd0aCArPSBs
ZW5ndGg7IH0KLQotICAgICAgICAgICAgSXRlbVBvc2l0aW9uIG1fc3RhcnQgeyAwIH07Ci0gICAg
ICAgICAgICB1bnNpZ25lZCBtX2xlbmd0aCB7IDAgfTsKLSAgICAgICAgICAgIElzQ29sbGFwc2Vk
IG1faXNDb2xsYXBzZWQgeyBJc0NvbGxhcHNlZDo6Tm8gfTsKLSAgICAgICAgfTsKLSAgICAgICAg
T3B0aW9uYWw8VGV4dENvbnRleHQ+IHRleHRDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV90ZXh0
Q29udGV4dDsgfQotICAgICAgICAvLyBOb3RlIHRoYXQgc3R5bGUoKSBhbmQgaW5saW5lSXRlbSgp
IGFsd2F5cyByZXR1cm5zIHRoZSBmaXJzdCBJbmxpbmVJdGVtIGZvciBhIHJ1bi4KLSAgICAgICAg
Y29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVJdGVtLnN0
eWxlKCk7IH0KLSAgICAgICAgY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSgpIGNvbnN0IHsg
cmV0dXJuIG1faW5saW5lSXRlbTsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgZnJpZW5kIGNs
YXNzIElubGluZVJ1blByb3ZpZGVyOwotCi0gICAgICAgIFJ1bihjb25zdCBJbmxpbmVJdGVtJiwg
VHlwZSwgT3B0aW9uYWw8VGV4dENvbnRleHQ+KTsKLSAgICAgICAgT3B0aW9uYWw8VGV4dENvbnRl
eHQ+JiB0ZXh0Q29udGV4dCgpIHsgcmV0dXJuIG1fdGV4dENvbnRleHQ7IH0KLQotICAgICAgICBj
b25zdCBUeXBlIG1fdHlwZTsKLSAgICAgICAgY29uc3QgSW5saW5lSXRlbSYgbV9pbmxpbmVJdGVt
OwotICAgICAgICBPcHRpb25hbDxUZXh0Q29udGV4dD4gbV90ZXh0Q29udGV4dDsKLSAgICB9Owot
ICAgIGNvbnN0IFZlY3RvcjxJbmxpbmVSdW5Qcm92aWRlcjo6UnVuPiYgcnVucygpIGNvbnN0IHsg
cmV0dXJuIG1faW5saW5lUnVuczsgfQotCi1wcml2YXRlOgotICAgIHZvaWQgY29tbWl0VGV4dFJ1
bigpOwotICAgIHZvaWQgcHJvY2Vzc0lubGluZVRleHRJdGVtKGNvbnN0IElubGluZUl0ZW0mKTsK
LSAgICB1bnNpZ25lZCBtb3ZlVG9OZXh0Tm9uV2hpdGVzcGFjZVBvc2l0aW9uKGNvbnN0IElubGlu
ZUl0ZW0mLCBJdGVtUG9zaXRpb24gY3VycmVudFBvc2l0aW9uKTsKLSAgICB1bnNpZ25lZCBtb3Zl
VG9OZXh0QnJlYWthYmxlUG9zaXRpb24oY29uc3QgSW5saW5lSXRlbSYsIEl0ZW1Qb3NpdGlvbiBj
dXJyZW50UG9zaXRpb24pOwotICAgIGJvb2wgaXNDb250aW5vdXNDb250ZW50KFJ1bjo6VHlwZSBu
ZXdSdW5UeXBlLCBjb25zdCBJbmxpbmVJdGVtJiBuZXdJbmxpbmVJdGVtKTsKLQotICAgIExhenlM
aW5lQnJlYWtJdGVyYXRvciBtX2xpbmVCcmVha0l0ZXJhdG9yOwotCi0gICAgVmVjdG9yPElubGlu
ZVJ1blByb3ZpZGVyOjpSdW4+IG1faW5saW5lUnVuczsKLX07Ci0KLWlubGluZSBJbmxpbmVSdW5Q
cm92aWRlcjo6UnVuIElubGluZVJ1blByb3ZpZGVyOjpSdW46OmNyZWF0ZUJveFJ1bihjb25zdCBJ
bmxpbmVJdGVtJiBpbmxpbmVJdGVtKQotewotICAgIHJldHVybiB7IGlubGluZUl0ZW0sIFR5cGU6
OkJveCwgV1RGOjpudWxsb3B0IH07Ci19Ci0KLWlubGluZSBJbmxpbmVSdW5Qcm92aWRlcjo6UnVu
IElubGluZVJ1blByb3ZpZGVyOjpSdW46OmNyZWF0ZUZsb2F0UnVuKGNvbnN0IElubGluZUl0ZW0m
IGlubGluZUl0ZW0pCi17Ci0gICAgcmV0dXJuIHsgaW5saW5lSXRlbSwgVHlwZTo6RmxvYXQsIFdU
Rjo6bnVsbG9wdCB9OwotfQotCi1pbmxpbmUgSW5saW5lUnVuUHJvdmlkZXI6OlJ1biBJbmxpbmVS
dW5Qcm92aWRlcjo6UnVuOjpjcmVhdGVTb2Z0TGluZUJyZWFrUnVuKGNvbnN0IElubGluZUl0ZW0m
IGlubGluZUl0ZW0pCi17Ci0gICAgcmV0dXJuIHsgaW5saW5lSXRlbSwgVHlwZTo6U29mdExpbmVC
cmVhaywgV1RGOjpudWxsb3B0IH07Ci19Ci0KLWlubGluZSBJbmxpbmVSdW5Qcm92aWRlcjo6UnVu
IElubGluZVJ1blByb3ZpZGVyOjpSdW46OmNyZWF0ZUhhcmRMaW5lQnJlYWtSdW4oY29uc3QgSW5s
aW5lSXRlbSYgaW5saW5lSXRlbSkKLXsKLSAgICByZXR1cm4geyBpbmxpbmVJdGVtLCBUeXBlOjpI
YXJkTGluZUJyZWFrLCBXVEY6Om51bGxvcHQgfTsKLX0KLQotaW5saW5lIElubGluZVJ1blByb3Zp
ZGVyOjpSdW4gSW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6Y3JlYXRlV2hpdGVzcGFjZVJ1bihjb25z
dCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtLCBJdGVtUG9zaXRpb24gc3RhcnQsIHVuc2lnbmVkIGxl
bmd0aCwgYm9vbCBpc0NvbGxhcHNpYmxlKQotewotICAgIEFTU0VSVChsZW5ndGgpOwotICAgIGF1
dG8gaXNDb2xsYXBzZWQgPSBpc0NvbGxhcHNpYmxlICYmIGxlbmd0aCA+IDEgPyBUZXh0Q29udGV4
dDo6SXNDb2xsYXBzZWQ6OlllcyA6IFRleHRDb250ZXh0OjpJc0NvbGxhcHNlZDo6Tm87Ci0gICAg
cmV0dXJuIHsgaW5saW5lSXRlbSwgVHlwZTo6V2hpdGVzcGFjZSwgVGV4dENvbnRleHQoc3RhcnQs
IGxlbmd0aCwgaXNDb2xsYXBzZWQpIH07Ci19Ci0KLWlubGluZSBJbmxpbmVSdW5Qcm92aWRlcjo6
UnVuIElubGluZVJ1blByb3ZpZGVyOjpSdW46OmNyZWF0ZU5vbldoaXRlc3BhY2VSdW4oY29uc3Qg
SW5saW5lSXRlbSYgaW5saW5lSXRlbSwgSXRlbVBvc2l0aW9uIHN0YXJ0LCB1bnNpZ25lZCBsZW5n
dGgpCi17Ci0gICAgcmV0dXJuIHsgaW5saW5lSXRlbSwgVHlwZTo6Tm9uV2hpdGVzcGFjZSwgVGV4
dENvbnRleHQoc3RhcnQsIGxlbmd0aCwgVGV4dENvbnRleHQ6OklzQ29sbGFwc2VkOjpObykgfTsK
LX0KLQotaW5saW5lIElubGluZVJ1blByb3ZpZGVyOjpSdW46OlJ1bihjb25zdCBJbmxpbmVJdGVt
JiBpbmxpbmVJdGVtLCBUeXBlIHR5cGUsIE9wdGlvbmFsPFRleHRDb250ZXh0PiB0ZXh0Q29udGV4
dCkKLSAgICA6IG1fdHlwZSh0eXBlKQotICAgICwgbV9pbmxpbmVJdGVtKGlubGluZUl0ZW0pCi0g
ICAgLCBtX3RleHRDb250ZXh0KHRleHRDb250ZXh0KQotewotfQotCi1pbmxpbmUgSW5saW5lUnVu
UHJvdmlkZXI6OlJ1bjo6VGV4dENvbnRleHQ6OlRleHRDb250ZXh0KEl0ZW1Qb3NpdGlvbiBzdGFy
dCwgdW5zaWduZWQgbGVuZ3RoLCBJc0NvbGxhcHNlZCBpc0NvbGxhcHNlZCkKLSAgICA6IG1fc3Rh
cnQoc3RhcnQpCi0gICAgLCBtX2xlbmd0aChsZW5ndGgpCi0gICAgLCBtX2lzQ29sbGFwc2VkKGlz
Q29sbGFwc2VkKQotewotfQotCi19Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZVRleHRJdGVtLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZVRleHRJdGVtLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5jZjU0MjQ2NGZkYmJmNDZmNDE4YjAxMWNhMDQ4M2E1ZTdiOTJkMThjCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lVGV4
dEl0ZW0uY3BwCkBAIC0wLDAgKzEsMTMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIklubGluZVRleHRJdGVtLmgiCisKKyNpZiBFTkFCTEUoTEFZT1VUX0ZP
Uk1BVFRJTkdfQ09OVEVYVCkKKworI2luY2x1ZGUgIkJyZWFrTGluZXMuaCIKKyNpbmNsdWRlICJM
YXlvdXRJbmxpbmVCb3guaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIExheW91
dCB7CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc1doaXRlc3BhY2VDaGFyYWN0ZXIoY2hhciBjaGFy
YWN0ZXIsIGJvb2wgcHJlc2VydmVOZXdsaW5lKQoreworICAgIHJldHVybiBjaGFyYWN0ZXIgPT0g
JyAnIHx8IGNoYXJhY3RlciA9PSAnXHQnIHx8IChjaGFyYWN0ZXIgPT0gJ1xuJyAmJiAhcHJlc2Vy
dmVOZXdsaW5lKTsKK30KKworc3RhdGljIGlubGluZSBib29sIGlzU29mdExpbmVCcmVhayhjaGFy
IGNoYXJhY3RlciwgYm9vbCBwcmVzZXJ2ZU5ld2xpbmUpCit7CisgICAgcmV0dXJuIHByZXNlcnZl
TmV3bGluZSAmJiBjaGFyYWN0ZXIgPT0gJ1xuJzsKK30KKworc3RhdGljIHVuc2lnbmVkIG1vdmVU
b05leHROb25XaGl0ZXNwYWNlUG9zaXRpb24oU3RyaW5nIHRleHRDb250ZW50LCB1bnNpZ25lZCBz
dGFydFBvc2l0aW9uLCBib29sIHByZXNlcnZlTmV3bGluZSkKK3sKKyAgICBhdXRvIG5leHROb25X
aGl0ZVNwYWNlUG9zaXRpb24gPSBzdGFydFBvc2l0aW9uOworICAgIHdoaWxlIChuZXh0Tm9uV2hp
dGVTcGFjZVBvc2l0aW9uIDwgdGV4dENvbnRlbnQubGVuZ3RoKCkgJiYgaXNXaGl0ZXNwYWNlQ2hh
cmFjdGVyKHRleHRDb250ZW50W25leHROb25XaGl0ZVNwYWNlUG9zaXRpb25dLCBwcmVzZXJ2ZU5l
d2xpbmUpKQorICAgICAgICArK25leHROb25XaGl0ZVNwYWNlUG9zaXRpb247CisgICAgcmV0dXJu
IG5leHROb25XaGl0ZVNwYWNlUG9zaXRpb24gLSBzdGFydFBvc2l0aW9uOworfQorCitzdGF0aWMg
dW5zaWduZWQgbW92ZVRvTmV4dEJyZWFrYWJsZVBvc2l0aW9uKHVuc2lnbmVkIHN0YXJ0UG9zaXRp
b24sIExhenlMaW5lQnJlYWtJdGVyYXRvciBsaW5lQnJlYWtJdGVyYXRvciwgY29uc3QgUmVuZGVy
U3R5bGUmIHN0eWxlKQoreworICAgIGF1dG8gZmluZE5leHRCcmVha2FibGVQb3NpdGlvbiA9IFsm
XShhdXRvIHN0YXJ0UG9zaXRpb24pIHsKKyAgICAgICAgYXV0byBrZWVwQWxsV29yZHNGb3JDSksg
PSBzdHlsZS53b3JkQnJlYWsoKSA9PSBXb3JkQnJlYWs6OktlZXBBbGw7CisgICAgICAgIGF1dG8g
YnJlYWtOQlNQID0gc3R5bGUuYXV0b1dyYXAoKSAmJiBzdHlsZS5uYnNwTW9kZSgpID09IE5CU1BN
b2RlOjpTcGFjZTsKKworICAgICAgICBpZiAoa2VlcEFsbFdvcmRzRm9yQ0pLKSB7CisgICAgICAg
ICAgICBpZiAoYnJlYWtOQlNQKQorICAgICAgICAgICAgICAgIHJldHVybiBuZXh0QnJlYWthYmxl
UG9zaXRpb25LZWVwaW5nQWxsV29yZHMobGluZUJyZWFrSXRlcmF0b3IsIHN0YXJ0UG9zaXRpb24p
OworICAgICAgICAgICAgcmV0dXJuIG5leHRCcmVha2FibGVQb3NpdGlvbktlZXBpbmdBbGxXb3Jk
c0lnbm9yaW5nTkJTUChsaW5lQnJlYWtJdGVyYXRvciwgc3RhcnRQb3NpdGlvbik7CisgICAgICAg
IH0KKworICAgICAgICBpZiAobGluZUJyZWFrSXRlcmF0b3IubW9kZSgpID09IExpbmVCcmVha0l0
ZXJhdG9yTW9kZTo6RGVmYXVsdCkgeworICAgICAgICAgICAgaWYgKGJyZWFrTkJTUCkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gV2ViQ29yZTo6bmV4dEJyZWFrYWJsZVBvc2l0aW9uKGxpbmVCcmVh
a0l0ZXJhdG9yLCBzdGFydFBvc2l0aW9uKTsKKyAgICAgICAgICAgIHJldHVybiBuZXh0QnJlYWth
YmxlUG9zaXRpb25JZ25vcmluZ05CU1AobGluZUJyZWFrSXRlcmF0b3IsIHN0YXJ0UG9zaXRpb24p
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGJyZWFrTkJTUCkKKyAgICAgICAgICAgIHJldHVy
biBuZXh0QnJlYWthYmxlUG9zaXRpb25XaXRob3V0U2hvcnRjdXQobGluZUJyZWFrSXRlcmF0b3Is
IHN0YXJ0UG9zaXRpb24pOworICAgICAgICByZXR1cm4gbmV4dEJyZWFrYWJsZVBvc2l0aW9uSWdu
b3JpbmdOQlNQV2l0aG91dFNob3J0Y3V0KGxpbmVCcmVha0l0ZXJhdG9yLCBzdGFydFBvc2l0aW9u
KTsKKyAgICB9OworCisgICAgYXV0byB0ZXh0TGVuZ3RoID0gbGluZUJyZWFrSXRlcmF0b3Iuc3Ry
aW5nVmlldygpLmxlbmd0aCgpOworICAgIGF1dG8gY3VycmVudFBvc2l0aW9uID0gc3RhcnRQb3Np
dGlvbjsKKyAgICB3aGlsZSAoY3VycmVudFBvc2l0aW9uIDwgdGV4dExlbmd0aCAtIDEpIHsKKyAg
ICAgICAgYXV0byBuZXh0QnJlYWthYmxlUG9zaXRpb24gPSBmaW5kTmV4dEJyZWFrYWJsZVBvc2l0
aW9uKGN1cnJlbnRQb3NpdGlvbik7CisgICAgICAgIGlmIChuZXh0QnJlYWthYmxlUG9zaXRpb24g
IT0gY3VycmVudFBvc2l0aW9uKQorICAgICAgICAgICAgcmV0dXJuIG5leHRCcmVha2FibGVQb3Np
dGlvbiAtIGN1cnJlbnRQb3NpdGlvbjsKKyAgICAgICAgKytjdXJyZW50UG9zaXRpb247CisgICAg
fQorICAgIHJldHVybiB0ZXh0TGVuZ3RoIC0gc3RhcnRQb3NpdGlvbjsKK30KKwordm9pZCBJbmxp
bmVUZXh0SXRlbTo6Y3JlYXRlQW5kQXBwZW5kVGV4dEl0ZW1zKElubGluZUl0ZW1zJiBpbmxpbmVD
b250ZW50LCBjb25zdCBJbmxpbmVCb3gmIGlubGluZUJveCkKK3sKKyAgICBhdXRvJiBzdHlsZSA9
IGlubGluZUJveC5zdHlsZSgpOworICAgIGF1dG8gcHJlc2VydmVOZXdsaW5lID0gc3R5bGUucHJl
c2VydmVOZXdsaW5lKCk7CisgICAgYXV0byBjb2xsYXBzZVdoaXRlU3BhY2UgPSBzdHlsZS5jb2xs
YXBzZVdoaXRlU3BhY2UoKTsKKyAgICBhdXRvIHRleHQgPSBpbmxpbmVCb3gudGV4dENvbnRlbnQo
KTsKKyAgICBMYXp5TGluZUJyZWFrSXRlcmF0b3IgbGluZUJyZWFrSXRlcmF0b3IodGV4dCk7CisK
KyAgICB1bnNpZ25lZCBjdXJyZW50UG9zaXRpb24gPSAwOworICAgIHdoaWxlIChjdXJyZW50UG9z
aXRpb24gPCB0ZXh0Lmxlbmd0aCgpKSB7CisgICAgICAgIC8vIFNvZnQgbGluZWJyZWFrPworICAg
ICAgICBpZiAoaXNTb2Z0TGluZUJyZWFrKHRleHRbY3VycmVudFBvc2l0aW9uXSwgcHJlc2VydmVO
ZXdsaW5lKSkgeworICAgICAgICAgICAgaW5saW5lQ29udGVudC5hZGQoc3RkOjptYWtlX3VuaXF1
ZTxJbmxpbmVUZXh0SXRlbT4oaW5saW5lQm94LCBjdXJyZW50UG9zaXRpb24sIDEsIHRydWUsIGZh
bHNlKSk7CisgICAgICAgICAgICArK2N1cnJlbnRQb3NpdGlvbjsKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICB9CisgICAgICAgIGlmIChpc1doaXRlc3BhY2VDaGFyYWN0ZXIodGV4dFtj
dXJyZW50UG9zaXRpb25dLCBwcmVzZXJ2ZU5ld2xpbmUpKSB7CisgICAgICAgICAgICBhdXRvIGxl
bmd0aCA9IG1vdmVUb05leHROb25XaGl0ZXNwYWNlUG9zaXRpb24odGV4dCwgY3VycmVudFBvc2l0
aW9uLCBwcmVzZXJ2ZU5ld2xpbmUpOworICAgICAgICAgICAgYXV0byBpc0NvbGxhcHNlZCA9IGNv
bGxhcHNlV2hpdGVTcGFjZSAmJiBsZW5ndGggPiAxOworICAgICAgICAgICAgaW5saW5lQ29udGVu
dC5hZGQoc3RkOjptYWtlX3VuaXF1ZTxJbmxpbmVUZXh0SXRlbT4oaW5saW5lQm94LCBjdXJyZW50
UG9zaXRpb24sIGxlbmd0aCwgdHJ1ZSwgaXNDb2xsYXBzZWQpKTsKKyAgICAgICAgICAgIGN1cnJl
bnRQb3NpdGlvbiArPSBsZW5ndGg7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQor
CisgICAgICAgIGF1dG8gbGVuZ3RoID0gbW92ZVRvTmV4dEJyZWFrYWJsZVBvc2l0aW9uKGN1cnJl
bnRQb3NpdGlvbiwgbGluZUJyZWFrSXRlcmF0b3IsIHN0eWxlKTsKKyAgICAgICAgaW5saW5lQ29u
dGVudC5hZGQoc3RkOjptYWtlX3VuaXF1ZTxJbmxpbmVUZXh0SXRlbT4oaW5saW5lQm94LCBjdXJy
ZW50UG9zaXRpb24sIGxlbmd0aCwgZmFsc2UsIGZhbHNlKSk7CisgICAgICAgIGN1cnJlbnRQb3Np
dGlvbiArPSBsZW5ndGg7CisgICAgfQorfQorCitJbmxpbmVUZXh0SXRlbTo6SW5saW5lVGV4dEl0
ZW0oY29uc3QgSW5saW5lQm94JiBpbmxpbmVCb3gsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBs
ZW5ndGgsIGJvb2wgaXNXaGl0ZXNwYWNlLCBib29sIGlzQ29sbGFwc2VkKQorICAgIDogSW5saW5l
SXRlbShpbmxpbmVCb3gsIFR5cGU6OlRleHQpCisgICAgLCBtX3N0YXJ0KHN0YXJ0KQorICAgICwg
bV9sZW5ndGgobGVuZ3RoKQorICAgICwgbV9pc1doaXRlc3BhY2UoaXNXaGl0ZXNwYWNlKQorICAg
ICwgbV9pc0NvbGxhcHNlZChpc0NvbGxhcHNlZCkKK3sKK30KKworfQorfQorI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVUZXh0
SXRlbS5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lVGV4
dEl0ZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4yODc0ZjI4YTMxZGNkMDBhYmVkZTg4OTc1NzQ1MTNjYmUyOWUx
NmRlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1h
dHRpbmcvSW5saW5lVGV4dEl0ZW0uaApAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKKworI2lu
Y2x1ZGUgIklubGluZUl0ZW0uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIExh
eW91dCB7CisKK2NsYXNzIElubGluZVRleHRJdGVtIDogcHVibGljIElubGluZUl0ZW0geworcHVi
bGljOgorICAgIHN0YXRpYyB2b2lkIGNyZWF0ZUFuZEFwcGVuZFRleHRJdGVtcyhJbmxpbmVJdGVt
cyYsIGNvbnN0IElubGluZUJveCYpOworCisgICAgSW5saW5lVGV4dEl0ZW0oY29uc3QgSW5saW5l
Qm94JiwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwgYm9vbCBpc1doaXRlc3BhY2Us
IGJvb2wgaXNDb2xsYXBzZWQpOworCisgICAgdW5zaWduZWQgc3RhcnQoKSBjb25zdCB7IHJldHVy
biBtX3N0YXJ0OyB9CisgICAgdW5zaWduZWQgZW5kKCkgY29uc3QgeyByZXR1cm4gc3RhcnQoKSAr
IGxlbmd0aCgpOyB9CisgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5n
dGg7IH0KKworICAgIGJvb2wgaXNXaGl0ZXNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9pc1doaXRl
c3BhY2U7IH0KKyAgICBib29sIGlzQ29sbGFwc2VkKCkgY29uc3QgeyByZXR1cm4gbV9pc0NvbGxh
cHNlZDsgfQorCitwcml2YXRlOgorICAgIHVuc2lnbmVkIG1fc3RhcnQgeyAwIH07CisgICAgdW5z
aWduZWQgbV9sZW5ndGggeyAwIH07CisgICAgYm9vbCBtX2lzV2hpdGVzcGFjZSB7IGZhbHNlIH07
CisgICAgYm9vbCBtX2lzQ29sbGFwc2VkIHsgZmFsc2UgfTsKK307CisKK30KK30KKworU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19JTkxJTkVfSVRFTShJbmxpbmVUZXh0SXRlbSwgaXNUZXh0KCkpCisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRp
bmcvdGV4dC9UZXh0VXRpbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0
dGluZy90ZXh0L1RleHRVdGlsLmNwcAppbmRleCAzNzVlZDcyM2NkMmIyOTg0ZGY3M2UwZTczMjEx
YmEwMjg0MThmZTA4Li5jMTM5ZWFiYTc1NzY5NmQzYzg3NmY0NDRkY2M5N2ZlYzdjM2E2M2ViIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy90ZXh0L1Rl
eHRVdGlsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy90
ZXh0L1RleHRVdGlsLmNwcApAQCAtMzQsMTkgKzM0LDE5IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiBuYW1lc3BhY2UgTGF5b3V0IHsKIAotT3B0aW9uYWw8SXRlbVBvc2l0aW9uPiBUZXh0VXRpbDo6
aHlwaGVuUG9zaXRpb25CZWZvcmUoY29uc3QgSW5saW5lSXRlbSYsIEl0ZW1Qb3NpdGlvbiwgdW5z
aWduZWQpCitPcHRpb25hbDx1bnNpZ25lZD4gVGV4dFV0aWw6Omh5cGhlblBvc2l0aW9uQmVmb3Jl
KGNvbnN0IElubGluZUl0ZW0mLCB1bnNpZ25lZCwgdW5zaWduZWQpCiB7CiAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKIH0KIAotTGF5b3V0VW5pdCBUZXh0VXRpbDo6d2lkdGgoY29uc3QgSW5saW5l
SXRlbSYgaW5saW5lVGV4dEl0ZW0sIEl0ZW1Qb3NpdGlvbiBmcm9tLCBJdGVtUG9zaXRpb24gdG8s
IExheW91dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0KQorTGF5b3V0VW5pdCBUZXh0VXRpbDo6d2lk
dGgoY29uc3QgSW5saW5lQm94JiBpbmxpbmVCb3gsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRv
LCBMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsTGVmdCkKIHsKLSAgICBhdXRvJiBzdHlsZSA9IGlu
bGluZVRleHRJdGVtLnN0eWxlKCk7CisgICAgYXV0byYgc3R5bGUgPSBpbmxpbmVCb3guc3R5bGUo
KTsKICAgICBhdXRvJiBmb250ID0gc3R5bGUuZm9udENhc2NhZGUoKTsKICAgICBpZiAoIWZvbnQu
c2l6ZSgpIHx8IGZyb20gPT0gdG8pCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgYXV0byB0ZXh0
ID0gaW5saW5lVGV4dEl0ZW0udGV4dENvbnRlbnQoKTsKKyAgICBhdXRvIHRleHQgPSBpbmxpbmVC
b3gudGV4dENvbnRlbnQoKTsKICAgICBBU1NFUlQodG8gPD0gdGV4dC5sZW5ndGgoKSk7CiAKICAg
ICBpZiAoZm9udC5pc0ZpeGVkUGl0Y2goKSkKQEAgLTcwLDcgKzcwLDcgQEAgTGF5b3V0VW5pdCBU
ZXh0VXRpbDo6d2lkdGgoY29uc3QgSW5saW5lSXRlbSYgaW5saW5lVGV4dEl0ZW0sIEl0ZW1Qb3Np
dGlvbiBmcm9tLAogICAgIHJldHVybiBzdGQ6Om1heDxMYXlvdXRVbml0PigwLCB3aWR0aCk7CiB9
CiAKLUxheW91dFVuaXQgVGV4dFV0aWw6OmZpeGVkUGl0Y2hXaWR0aChTdHJpbmcgdGV4dCwgY29u
c3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBJdGVtUG9zaXRpb24gZnJvbSwgSXRlbVBvc2l0aW9uIHRv
LCBMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsTGVmdCkKK0xheW91dFVuaXQgVGV4dFV0aWw6OmZp
eGVkUGl0Y2hXaWR0aChTdHJpbmcgdGV4dCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCB1bnNp
Z25lZCBmcm9tLCB1bnNpZ25lZCB0bywgTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbExlZnQpCiB7
CiAgICAgYXV0byYgZm9udCA9IHN0eWxlLmZvbnRDYXNjYWRlKCk7CiAgICAgYXV0byBtb25vc3Bh
Y2VDaGFyYWN0ZXJXaWR0aCA9IGZvbnQuc3BhY2VXaWR0aCgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvdGV4dC9UZXh0VXRpbC5oIGIvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvdGV4dC9UZXh0VXRpbC5oCmluZGV4IDgz
NmE5ZWM0MGQzYTcyZWI5MjY3NGE1M2IzNzJlNTBkMmYzZGFjYjcuLmQwZmVhNmFkMWRkZDcyOWQ3
NGY5YmRmYjFiYzlkMjFjOTg3ZDJlMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9pbmxpbmVmb3JtYXR0aW5nL3RleHQvVGV4dFV0aWwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvaW5saW5lZm9ybWF0dGluZy90ZXh0L1RleHRVdGlsLmgKQEAgLTI4LDE4ICsyOCwxNyBA
QAogI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQogCiAjaW5jbHVkZSAiSW5s
aW5lSXRlbS5oIgotI2luY2x1ZGUgIklubGluZVJ1blByb3ZpZGVyLmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIG5hbWVzcGFjZSBMYXlvdXQgewogCiBjbGFzcyBUZXh0VXRpbCB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIExheW91dFVuaXQgd2lkdGgoY29uc3QgSW5saW5lSXRlbSYsIEl0ZW1Qb3Np
dGlvbiBmcm9tLCBJdGVtUG9zaXRpb24gdG8sIExheW91dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0
KTsKLSAgICBzdGF0aWMgT3B0aW9uYWw8SXRlbVBvc2l0aW9uPiBoeXBoZW5Qb3NpdGlvbkJlZm9y
ZShjb25zdCBJbmxpbmVJdGVtJiwgSXRlbVBvc2l0aW9uIGZyb20sIHVuc2lnbmVkIGxlbmd0aCk7
CisgICAgc3RhdGljIExheW91dFVuaXQgd2lkdGgoY29uc3QgSW5saW5lQm94JiwgdW5zaWduZWQg
ZnJvbSwgdW5zaWduZWQgdG8sIExheW91dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0KTsKKyAgICBz
dGF0aWMgT3B0aW9uYWw8dW5zaWduZWQ+IGh5cGhlblBvc2l0aW9uQmVmb3JlKGNvbnN0IElubGlu
ZUl0ZW0mLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW5ndGgpOwogCiBwcml2YXRlOgotICAg
IHN0YXRpYyBMYXlvdXRVbml0IGZpeGVkUGl0Y2hXaWR0aChTdHJpbmcsIGNvbnN0IFJlbmRlclN0
eWxlJiwgSXRlbVBvc2l0aW9uIGZyb20sIEl0ZW1Qb3NpdGlvbiB0bywgTGF5b3V0VW5pdCBjb250
ZW50TG9naWNhbExlZnQpOworICAgIHN0YXRpYyBMYXlvdXRVbml0IGZpeGVkUGl0Y2hXaWR0aChT
dHJpbmcsIGNvbnN0IFJlbmRlclN0eWxlJiwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8sIExh
eW91dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0KTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9sYXlvdXR0cmVlL0xheW91dFJlcGxhY2VkLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9sYXlvdXR0cmVlL0xheW91dFJlcGxhY2VkLmNwcAppbmRleCAwMGNkNWQw
NjgyOThiMTY2M2FjZmZjOWQ0OWYwZmZiMWI2NWM0ZjIzLi45NjRhNmIzNmI0ZjUzYTQzNTA0NzIy
MjdkODFmNDcxZTY1ZWYwM2E4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvbGF5
b3V0dHJlZS9MYXlvdXRSZXBsYWNlZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2xh
eW91dHRyZWUvTGF5b3V0UmVwbGFjZWQuY3BwCkBAIC04MCw3ICs4MCw3IEBAIExheW91dFVuaXQg
UmVwbGFjZWQ6OmludHJpbnNpY1JhdGlvKCkgY29uc3QKICAgICBBU1NFUlQoaGFzSW50cmluc2lj
UmF0aW8oKSB8fCAoaGFzSW50cmluc2ljV2lkdGgoKSAmJiBoYXNJbnRyaW5zaWNIZWlnaHQoKSkp
OwogICAgIGlmIChtX2ludHJpbnNpY1JhdGlvKQogICAgICAgICByZXR1cm4gKm1faW50cmluc2lj
UmF0aW87Ci0gICAgaWYgKG1faW50cmluc2ljU2l6ZSkKKyAgICBpZiAobV9pbnRyaW5zaWNTaXpl
ICYmIG1faW50cmluc2ljU2l6ZS0+aGVpZ2h0KCkpCiAgICAgICAgIHJldHVybiBtX2ludHJpbnNp
Y1NpemUtPndpZHRoKCkgLyBtX2ludHJpbnNpY1NpemUtPmhlaWdodCgpOwogICAgIHJldHVybiAx
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0
VHJlZUJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0
VHJlZUJ1aWxkZXIuY3BwCmluZGV4IGU2MTAyZGNhZWQ0YWY4MzRmYTAwZWE0ZTRiNzJlNmNmZmFi
ODY5N2YuLjc1MGE3NzYxMWNlZDEwNDZkY2MwNWZlYjk5ODU3MWY3ZGQ5YmZiNGUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9sYXlvdXR0cmVlL0xheW91dFRyZWVCdWlsZGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRUcmVlQnVpbGRl
ci5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09O
VEVYVCkKIAogI2luY2x1ZGUgIkRpc3BsYXlCb3guaCIKKyNpbmNsdWRlICJEaXNwbGF5UnVuLmgi
CiAjaW5jbHVkZSAiSW5saW5lRm9ybWF0dGluZ1N0YXRlLmgiCiAjaW5jbHVkZSAiTGF5b3V0Qmxv
Y2tDb250YWluZXIuaCIKICNpbmNsdWRlICJMYXlvdXRCb3guaCIKQEAgLTE2NiwxMSArMTY3LDEx
IEBAIHN0YXRpYyB2b2lkIG91dHB1dElubGluZVJ1bnMoVGV4dFN0cmVhbSYgc3RyZWFtLCBjb25z
dCBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsCiAgICAgICAgIHdoaWxlICgrK3ByaW50ZWRDaGFy
YWN0ZXJzIDw9IGRlcHRoICogMikKICAgICAgICAgICAgIHN0cmVhbSA8PCAiICI7CiAgICAgICAg
IHN0cmVhbSA8PCAicnVuIjsKLSAgICAgICAgaWYgKGlubGluZVJ1bi50ZXh0Q29udGV4dCgpKQot
ICAgICAgICAgICAgc3RyZWFtIDw8ICIoIiA8PCBpbmxpbmVSdW4udGV4dENvbnRleHQoKS0+c3Rh
cnQoKSA8PCAiLCAiIDw8IGlubGluZVJ1bi50ZXh0Q29udGV4dCgpLT5zdGFydCgpICsgaW5saW5l
UnVuLnRleHRDb250ZXh0KCktPmxlbmd0aCgpIDw8ICIpICI7CisgICAgICAgIGlmIChpbmxpbmVS
dW4tPnRleHRDb250ZXh0KCkpCisgICAgICAgICAgICBzdHJlYW0gPDwgIigiIDw8IGlubGluZVJ1
bi0+dGV4dENvbnRleHQoKS0+c3RhcnQoKSA8PCAiLCAiIDw8IGlubGluZVJ1bi0+dGV4dENvbnRl
eHQoKS0+c3RhcnQoKSArIGlubGluZVJ1bi0+dGV4dENvbnRleHQoKS0+bGVuZ3RoKCkgPDwgIikg
IjsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgc3RyZWFtIDw8ICIoeCwgeCkgIjsKLSAgICAg
ICAgc3RyZWFtIDw8ICJhdCBbIiA8PCBpbmxpbmVSdW4ubG9naWNhbExlZnQoKSA8PCAiLCAiIDw8
IGlubGluZVJ1bi5sb2dpY2FsVG9wKCkgPDwgIl0gc2l6ZSBbIiA8PCBpbmxpbmVSdW4ubG9naWNh
bFdpZHRoKCkgPDwgIiAiIDw8IGlubGluZVJ1bi5sb2dpY2FsSGVpZ2h0KCkgPDwgIl0iOworICAg
ICAgICBzdHJlYW0gPDwgImF0IFsiIDw8IGlubGluZVJ1bi0+bG9naWNhbExlZnQoKSA8PCAiLCAi
IDw8IGlubGluZVJ1bi0+bG9naWNhbFRvcCgpIDw8ICJdIHNpemUgWyIgPDwgaW5saW5lUnVuLT5s
b2dpY2FsV2lkdGgoKSA8PCAiICIgPDwgaW5saW5lUnVuLT5sb2dpY2FsSGVpZ2h0KCkgPDwgIl0i
OwogICAgICAgICBzdHJlYW0ubmV4dExpbmUoKTsKICAgICB9CiB9CkBAIC0xODYsMTEgKzE4Nywx
MyBAQCBzdGF0aWMgdm9pZCBvdXRwdXRMYXlvdXRCb3goVGV4dFN0cmVhbSYgc3RyZWFtLCBjb25z
dCBCb3gmIGxheW91dEJveCwgY29uc3QgRGlzcAogICAgIGVsc2UgaWYgKGlzPElubGluZUJveD4o
bGF5b3V0Qm94KSkgewogICAgICAgICBpZiAobGF5b3V0Qm94LnJlcGxhY2VkKCkpCiAgICAgICAg
ICAgICBzdHJlYW0gPDwgImlubGluZSByZXBsYWNlZCBib3giOwotICAgICAgICBlbHNlIGlmIChk
b3duY2FzdDxJbmxpbmVCb3g+KGxheW91dEJveCkuaGFzVGV4dENvbnRlbnQoKSkgewotICAgICAg
ICAgICAgYXV0byB0ZXh0Q29udGVudCA9IGRvd25jYXN0PElubGluZUJveD4obGF5b3V0Qm94KS50
ZXh0Q29udGVudCgpOwotICAgICAgICAgICAgc3RyZWFtIDw8ICJpbmxpbmUgdGV4dCBbXCIiIDw8
IHRleHRDb250ZW50LnV0ZjgoKS5kYXRhKCkgPDwgIlwiXSI7Ci0gICAgICAgIH0gZWxzZQorICAg
ICAgICBlbHNlIGlmIChsYXlvdXRCb3guaXNBbm9ueW1vdXMoKSkKKyAgICAgICAgICAgIHN0cmVh
bSA8PCAiYW5vbnltb3VzIGlubGluZSBib3giOworICAgICAgICBlbHNlCiAgICAgICAgICAgICBz
dHJlYW0gPDwgImlubGluZSBib3giOworCisgICAgICAgIGlmIChkb3duY2FzdDxJbmxpbmVCb3g+
KGxheW91dEJveCkuaGFzVGV4dENvbnRlbnQoKSkKKyAgICAgICAgICAgIHN0cmVhbSA8PCAiIHdp
dGggdGV4dCBjb250ZW50IFtcIiIgPDwgZG93bmNhc3Q8SW5saW5lQm94PihsYXlvdXRCb3gpLnRl
eHRDb250ZW50KCkudXRmOCgpLmRhdGEoKSA8PCAiXCJdIjsKICAgICB9IGVsc2UgaWYgKGlzPEJs
b2NrQ29udGFpbmVyPihsYXlvdXRCb3gpKSB7CiAgICAgICAgIGlmICghbGF5b3V0Qm94LnBhcmVu
dCgpKQogICAgICAgICAgICAgc3RyZWFtIDw8ICJpbml0aWFsICI7CkBAIC0yMDAsMTMgKzIwMyw4
IEBAIHN0YXRpYyB2b2lkIG91dHB1dExheW91dEJveChUZXh0U3RyZWFtJiBzdHJlYW0sIGNvbnN0
IEJveCYgbGF5b3V0Qm94LCBjb25zdCBEaXNwCiAgICAgZWxzZQogICAgICAgICBzdHJlYW0gPDwg
ImJveCI7CiAgICAgLy8gRklYTUU6IElubGluZSB0ZXh0IHJ1bnMgZG9uJ3QgY3JlYXRlIGRpc3Bs
YXkgYm94ZXMgeWV0LgotICAgIGlmIChkaXNwbGF5Qm94KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBk
aXNwbGF5IGJveCBpcyBub3QgY29tcGxldGVseSBzZXQgeWV0LgotICAgICAgICBpZiAoKGlzPElu
bGluZUJveD4obGF5b3V0Qm94KSB8fCBpczxJbmxpbmVDb250YWluZXI+KGxheW91dEJveCkpICYm
ICFsYXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSkKLSAgICAgICAgICAgIHN0cmVhbSA8
PCAiIGF0IFsiIDw8ICIuIiA8PCAiICIgPDwgIi4iIDw8ICJdIHNpemUgWyIgPDwgZGlzcGxheUJv
eC0+d2lkdGgoKSA8PCAiICIgPDwgZGlzcGxheUJveC0+aGVpZ2h0KCkgPDwgIl0iOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBzdHJlYW0gPDwgIiBhdCBbIiA8PCBkaXNwbGF5Qm94LT5sZWZ0
KCkgPDwgIiAiIDw8IGRpc3BsYXlCb3gtPnRvcCgpIDw8ICJdIHNpemUgWyIgPDwgZGlzcGxheUJv
eC0+d2lkdGgoKSA8PCAiICIgPDwgZGlzcGxheUJveC0+aGVpZ2h0KCkgPDwgIl0iOwotICAgIH0K
KyAgICBpZiAoZGlzcGxheUJveCAmJiAhbGF5b3V0Qm94LmlzQW5vbnltb3VzKCkpCisgICAgICAg
IHN0cmVhbSA8PCAiIGF0IFsiIDw8IGRpc3BsYXlCb3gtPmxlZnQoKSA8PCAiICIgPDwgZGlzcGxh
eUJveC0+dG9wKCkgPDwgIl0gc2l6ZSBbIiA8PCBkaXNwbGF5Qm94LT53aWR0aCgpIDw8ICIgIiA8
PCBkaXNwbGF5Qm94LT5oZWlnaHQoKSA8PCAiXSI7CiAgICAgc3RyZWFtIDw8ICIgWyIgPDwgJmxh
eW91dEJveCA8PCAiXSI7CiAKICAgICBzdHJlYW0ubmV4dExpbmUoKTsKZGlmZiAtLWdpdCBhL1Rv
b2xzL0xheW91dFJlbG9hZGVkL21pc2MvTEZDLXBhc3NpbmctdGVzdHMudHh0IGIvVG9vbHMvTGF5
b3V0UmVsb2FkZWQvbWlzYy9MRkMtcGFzc2luZy10ZXN0cy50eHQKaW5kZXggY2VkMDA5ZWRkNGIy
ODk5NWIyMzBiMWRhNDhiZDg2MWNjMzRkMjNjYS4uZjJjZmQxMWQyZmQ2NTk4OWI5MzE0ZGNlM2E0
ODIzODZiYzYxMDA4YSAxMDA2NDQKLS0tIGEvVG9vbHMvTGF5b3V0UmVsb2FkZWQvbWlzYy9MRkMt
cGFzc2luZy10ZXN0cy50eHQKKysrIGIvVG9vbHMvTGF5b3V0UmVsb2FkZWQvbWlzYy9MRkMtcGFz
c2luZy10ZXN0cy50eHQKQEAgLTQ3Myw3ICs0NzMsNiBAQCBjc3MyLjEvdDA1MTEtYzIxLXBzZXVk
LWxpbmstMDAtZS5odG1sCiBjc3MyLjEvdDA1MTEtYzIxLXBzZXVkLWxpbmstMDEtZS5odG1sCiBj
c3MyLjEvdDA1MTEtYzIxLXBzZXVkLWxpbmstMDItZS5odG1sCiBjc3MyLjEvdDA1MTEtYzIxLXBz
ZXVkLWxpbmstMDMtZS5odG1sCi1jc3MyLjEvdDA2MDItYzEzLWluaC11bmRlcmxpbi0wMC1lLmh0
bWwKIGNzczIuMS90MDYwMy1jMTEtaW1wb3J0LTAwLWIuaHRtbAogY3NzMi4xL3QwODAzLWM1NTAy
LWltcmduLXItMDAtYi1hZy5odG1sCiBjc3MyLjEvdDA4MDMtYzU1MDItbXJnbi1yLTAyLWMuaHRt
bApAQCAtNjQzLDcgKzY0Miw2IEBAIGNzczIuMS90MDYwNDAzLWMyMS1wc2V1LWlkLTAwLWUtaS5o
dG1sCiBjc3MyLjEvdDA5MDUwMS1jNDE0LWZsdC0wMC1kLmh0bWwKIGNzczIuMS90MDkwNTAxLWM0
MTQtZmx0LTAyLWQtZy5odG1sCiBjc3MyLjEvdDEwMDMwMy1jNDEyLWJsb2Nrdy0wMC1kLWFnLmh0
bWwKLWNzczIuMS90MTAwODAxLWM1NDQtdmFsZ24tMDQtZC1hZ2kuaHRtbAogY3NzMi4xL3QxMDA4
MDEtYzU0OC1sbi1odC0wMS1iLWFnLmh0bWwKIGNzczIuMS90MTAwODAxLWM1NDgtbG4taHQtMDIt
Yi1hZy5odG1sCiBjc3MyLjEvdDEwMDgwMS1jNTQ4LWxuLWh0LTAzLWQtYWcuaHRtbApAQCAtODU5
LDcgKzg1Nyw2IEBAIGNzczIuMS8yMDExMDMyMy9pbmxpbmUtYmxvY2stcmVwbGFjZWQtaGVpZ2h0
LTAwNS5odG0KIGNzczIuMS8yMDExMDMyMy9pbmxpbmUtYmxvY2stcmVwbGFjZWQtaGVpZ2h0LTAw
Ny5odG0KIGNzczIuMS8yMDExMDMyMy9pbmxpbmUtYmxvY2stcmVwbGFjZWQtd2lkdGgtMDAxLmh0
bQogY3NzMi4xLzIwMTEwMzIzL2lubGluZS1ibG9jay1yZXBsYWNlZC13aWR0aC0wMDYuaHRtCi1j
c3MyLjEvMjAxMTAzMjMvaW5saW5lLWJveC0wMDIuaHRtCiBjc3MyLjEvMjAxMTAzMjMvaW5saW5l
LXJlcGxhY2VkLWhlaWdodC0wMDEuaHRtCiBjc3MyLjEvMjAxMTAzMjMvaW5saW5lLXJlcGxhY2Vk
LWhlaWdodC0wMDIuaHRtCiBjc3MyLjEvMjAxMTAzMjMvaW5saW5lLXJlcGxhY2VkLWhlaWdodC0w
MDMuaHRtCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>368198</attachid>
            <date>2019-04-24 16:33:29 -0700</date>
            <delta_ts>2019-04-24 21:36:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-197198-20190424163326.patch</filename>
            <type>text/plain</type>
            <size>149902</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ0MDk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWYyZDVlM2FkZDNmOGMz
NjgxZDk0NWQ1YmZjYjQzZDVmZTI2MGQ3OS4uZTlhOThmMTE1ODJkMWFjYmQzMWY4NTAzMzc5M2Zl
NDAxYjcwN2JkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3MCBAQAorMjAxOS0wNC0yMyAgWmFs
YW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgorCisgICAgICAgIFtMRkNdW0lGQ10gSW50cm9k
dWNlIERpc3BsYXlSdW4gdG8gdGhlIGRpc3BsYXkgdHJlZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk3MTk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV0lQLgorCisgICAgICAgICogU291cmNlcy50eHQ6
CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IGxheW91dC9Gb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6Y29udGVudEhlaWdodEZvckZvcm1hdHRpbmdDb250ZXh0Um9vdCk6CisgICAgICAg
ICogbGF5b3V0L1ZlcmlmaWNhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OmFy
ZUVzc2VudGlhbGx5RXF1YWwpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpvdXRwdXRNaXNt
YXRjaGluZ1NpbXBsZUxpbmVJbmZvcm1hdGlvbklmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6Y2hlY2tGb3JNYXRjaGluZ05vblRleHRSdW5zKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6Y2hlY2tGb3JNYXRjaGluZ1RleHRSdW5zKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6b3V0cHV0TWlzbWF0Y2hpbmdDb21wbGV4TGluZUluZm9ybWF0aW9uSWZOZWVkZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMYXlvdXRTdGF0ZTo6dmVyaWZ5QW5kT3V0cHV0TWlz
bWF0Y2hpbmdMYXlvdXRUcmVlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6cmVz
b2x2ZUZvclJlbGF0aXZlUG9zaXRpb25JZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgICogbGF5
b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRy
eTo6aW5GbG93Tm9uUmVwbGFjZWRIZWlnaHRBbmRNYXJnaW4pOgorICAgICAgICAqIGxheW91dC9k
aXNwbGF5dHJlZS9EaXNwbGF5Qm94Lmg6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3g6
Omhvcml6b250YWxNYXJnaW4gY29uc3QpOgorICAgICAgICAqIGxheW91dC9kaXNwbGF5dHJlZS9E
aXNwbGF5UnVuLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9y
bWF0dGluZy9JbmxpbmVSdW4uaC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJ1bjo6VGV4
dENvbnRleHQ6OnNldFN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJ1bjo6VGV4
dENvbnRleHQ6OnNldExlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSdW46OlRl
eHRDb250ZXh0OjpzdGFydCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSdW46
OlRleHRDb250ZXh0OjplbmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UnVu
OjpUZXh0Q29udGV4dDo6bGVuZ3RoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6
OlJ1bjo6bG9naWNhbFRvcExlZnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6
UnVuOjpsb2dpY2FsTGVmdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSdW46
OmxvZ2ljYWxSaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSdW46Omxv
Z2ljYWxUb3AgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UnVuOjpsb2dpY2Fs
Qm90dG9tIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJ1bjo6bG9naWNhbFdp
ZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJ1bjo6bG9naWNhbEhlaWdo
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSdW46OnNldExvZ2ljYWxXaWR0
aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSdW46OnNldExvZ2ljYWxMZWZ0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJ1bjo6c2V0TG9naWNhbFJpZ2h0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXk6OlJ1bjo6bW92ZVZlcnRpY2FsbHkpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheTo6UnVuOjptb3ZlSG9yaXpvbnRhbGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXk6OlJ1bjo6ZXhwYW5kVmVydGljYWxseSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
OjpSdW46OmV4cGFuZEhvcml6b250YWxseSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpS
dW46OmV4cGFuc2lvbk9wcG9ydHVuaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJ1
bjo6c2V0VGV4dENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UnVuOjp0ZXh0
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSdW46OnRleHRDb250ZXh0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJ1bjo6UnVuKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXk6OlJ1bjo6VGV4dENvbnRleHQ6OlRleHRDb250ZXh0KToKKyAgICAgICAg
KiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpsYXlvdXQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dDo6Y29tcHV0ZUludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUludHJpbnNpY1dp
ZHRoRm9yRmxvYXRCb3ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVG
b3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUludHJpbnNpY1dpZHRoRm9ySW5saW5lQmxvY2sgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6
aW5pdGlhbGl6ZVZlcnRpY2FsTWFyZ2luRm9ySW5saW5lQ29udGFpbmVyIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVIb3Jp
em9udGFsTWFyZ2luIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9y
bWF0dGluZ0NvbnRleHQ6OmNvbGxlY3RJbmxpbmVDb250ZW50IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVNYXJnaW4gY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjphZGREZXRhY2hpbmdSdWxl
cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OmNyZWF0ZUFuZEFwcGVuZElu
bGluZUl0ZW0pOiBEZWxldGVkLgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lu
bGluZUZvcm1hdHRpbmdDb250ZXh0Lmg6CisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRp
bmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6TGluZTo6cnVucyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6
OmlzRW1wdHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjppc0ZpcnN0
TGluZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6OmF2YWlsYWJsZVdp
ZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZTo6bG9naWNhbExlZnQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjpsb2dpY2FsUmlnaHQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjppbml0KToKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6TGluZTo6Y2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0Ojpp
c1RyaW1tYWJsZUNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjpoYXNU
cmFpbGluZ1doaXRlc3BhY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5l
Ojp0cmFpbGluZ1doaXRlc3BhY2VXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkxpbmU6Omhhc0NvbnRlbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpM
aW5lOjphcHBlbmROb25CcmVha2FibGVTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkxpbmU6OmFwcGVuZFRleHRDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGlu
ZTo6YXBwZW5kTm9uVGV4dENvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5l
OjphZGp1c3RMb2dpY2FsTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6OmFk
anVzdExvZ2ljYWxSaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1h
dHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpsYXlvdXQgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6Y2xvc2VMaW5l
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQ6OkxpbmVMYXlvdXQ6OmNvbW1pdElubGluZUl0ZW1Ub0xpbmUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6Y29t
cHV0ZUZsb2F0UG9zaXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxp
bmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6anVzdGlmeVJ1bnMpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6Y29t
cHV0ZUV4cGFuc2lvbk9wcG9ydHVuaXRpZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6YWxpZ25SdW5zIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZTo6Y29udGVudExvZ2ljYWxMZWZ0IGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZTo6bGFzdFJ1blR5
cGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjpjb250
ZW50TG9naWNhbFJpZ2h0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6TGluZTo6YXBwZW5kQ29udGVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpzcGxpdElubGluZVJ1bklm
TmVlZGVkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OmNyZWF0ZUZpbmFsUnVucyBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0
OjpMaW5lTGF5b3V0Ojpwb3N0UHJvY2Vzc0lubGluZVJ1bnMgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91
dDo6YXBwZW5kQ29udGVudFRvTGluZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpwbGFjZUluRmxv
d1Bvc2l0aW9uZWRDaGlsZHJlbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpydW5XaWR0aCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9y
bWF0dGluZ1N0YXRlLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRp
bmdTdGF0ZTo6aW5saW5lSXRlbXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVG
b3JtYXR0aW5nU3RhdGU6OmFkZElubGluZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpJbmxpbmVGb3JtYXR0aW5nU3RhdGU6OmFkZElubGluZVJ1bik6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdTdGF0ZTo6aW5saW5lQ29udGVudCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdTdGF0ZTo6bGFzdElu
bGluZUl0ZW0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxp
bmVGb3JtYXR0aW5nU3RhdGU6OmFwcGVuZElubGluZVJ1bik6IERlbGV0ZWQuCisgICAgICAgICog
bGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lSXRlbS5oOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpJbmxpbmVJdGVtOjp0eXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6SW5saW5lSXRlbTo6aXNUZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
SW5saW5lSXRlbTo6aXNCb3ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxp
bmVJdGVtOjppc0hhcmRMaW5lQnJlYWsgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpJbmxpbmVJdGVtOjppc0Zsb2F0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
SW5saW5lSXRlbTo6aXNMaW5lQnJlYWsgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpJbmxpbmVJdGVtOjppc0NvbnRhaW5lclN0YXJ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6SW5saW5lSXRlbTo6aXNDb250YWluZXJFbmQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpJbmxpbmVJdGVtOjpJbmxpbmVJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6SW5saW5lSXRlbTo6c2V0V2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpJbmxpbmVJdGVtOjp3aWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Oklu
bGluZUl0ZW06OmFkZERldGFjaGluZ1J1bGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpJbmxpbmVJdGVtOjpkZXRhY2hpbmdSdWxlcyBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUl0ZW06Om5vbkJyZWFrYWJsZVN0YXJ0IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lSXRlbTo6bm9uQnJl
YWthYmxlRW5kIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5s
aW5lSXRlbTo6YWRkTm9uQnJlYWthYmxlU3RhcnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpJbmxpbmVJdGVtOjphZGROb25CcmVha2FibGVFbmQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVJdGVtOjp0ZXh0Q29udGVudCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJyZWFr
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnJlYWtlcjo6TGluZUJyZWFr
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnJlYWtlcjo6YnJlYWtpbmdDb250
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJyZWFrZXI6OndvcmRCcmVha2lu
Z0JlaGF2aW9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJyZWFrZXI6
OnJ1bldpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJyZWFrZXI6
OnRleHRXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUxpbmVC
cmVha2VyOjpJbmxpbmVMaW5lQnJlYWtlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OklubGluZUxpbmVCcmVha2VyOjpuZXh0UnVuKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6SW5saW5lTGluZUJyZWFrZXI6OmlzQXRDb250ZW50RW5kIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lTGluZUJyZWFrZXI6Omxp
bmVCcmVha2luZ0JlaGF2aW9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
SW5saW5lTGluZUJyZWFrZXI6OnJ1bldpZHRoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6SW5saW5lTGluZUJyZWFrZXI6OnRleHRXaWR0aCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUxpbmVCcmVha2VyOjpzcGxpdFJ1
bik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUxpbmVCcmVha2Vy
OjphZGp1c3RTcGxpdFBvc2l0aW9uV2l0aEh5cGhlbmF0aW9uIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnJlYWtlci5oOgorICAg
ICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZVJ1blByb3ZpZGVyLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVSdW5Qcm92aWRl
ci5oOiBSZW1vdmVkLgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZVRl
eHRJdGVtLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OmlzV2hpdGVzcGFj
ZUNoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OmlzU29mdExpbmVCcmVhayk6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Om1vdmVUb05leHROb25XaGl0ZXNwYWNlUG9zaXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0Ojptb3ZlVG9OZXh0QnJlYWthYmxlUG9zaXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVUZXh0SXRlbTo6Y3JlYXRlQW5k
QXBwZW5kVGV4dEl0ZW1zKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lVGV4dEl0
ZW06OklubGluZVRleHRJdGVtKToKKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9J
bmxpbmVUZXh0SXRlbS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5l
Zm9ybWF0dGluZy90ZXh0L1RleHRVdGlsLmguCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Oklu
bGluZVRleHRJdGVtOjpzdGFydCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Oklu
bGluZVRleHRJdGVtOjplbmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxp
bmVUZXh0SXRlbTo6bGVuZ3RoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5s
aW5lVGV4dEl0ZW06OmlzV2hpdGVzcGFjZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OklubGluZVRleHRJdGVtOjppc0NvbGxhcHNlZCBjb25zdCk6CisgICAgICAgICogbGF5b3V0
L2lubGluZWZvcm1hdHRpbmcvdGV4dC9UZXh0VXRpbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OlRleHRVdGlsOjpoeXBoZW5Qb3NpdGlvbkJlZm9yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OlRleHRVdGlsOjp3aWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRl
eHRVdGlsOjpmaXhlZFBpdGNoV2lkdGgpOgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0
aW5nL3RleHQvVGV4dFV0aWwuaDoKKyAgICAgICAgKiBsYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRS
ZXBsYWNlZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlJlcGxhY2VkOjppbnRyaW5z
aWNSYXRpbyBjb25zdCk6CisgICAgICAgICogbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0VHJlZUJ1
aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpvdXRwdXRJbmxpbmVSdW5zKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6b3V0cHV0TGF5b3V0Qm94KToKKyAgICAgICAgKiBw
YWdlL0ZyYW1lVmlld0xheW91dENvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bGF5b3V0
VXNpbmdGb3JtYXR0aW5nQ29udGV4dCk6CisKIDIwMTktMDQtMDkgIFphbGFuIEJ1anRhcyAgPHph
bGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbQXV0b1NpemluZ10gQXZvaWQgbWFraW5nIHRleHQg
cGFyYWdyYXBocyBzY3JvbGwgaG9yaXpvbnRhbGx5IHdoZW4gdGhlcmUgaXMgYSB3aWRlIHRhYmxl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXMudHh0CmluZGV4IDIxOWM4YjcwZGM5ZjU4OWFlZjY4NmUzYjJkYTE0NmFiMzkwZjc4
MDUuLmQwNTFkYmNiOWRkZmM5Y2JiOTVjMDQ3NjE4ZTE2MmYxZGZkYWUzNTcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMu
dHh0CkBAIC0xMzQzLDcgKzEzNDMsNyBAQCBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVG
b3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQuY3BwCiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9J
bmxpbmVGb3JtYXR0aW5nU3RhdGUuY3BwCiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVJ
bnZhbGlkYXRpb24uY3BwCiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnJlYWtl
ci5jcHAKLWxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZVJ1blByb3ZpZGVyLmNwcAorbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lVGV4dEl0ZW0uY3BwCiBsYXlvdXQvaW5saW5lZm9y
bWF0dGluZy90ZXh0L1RleHRVdGlsLmNwcAogbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0QmxvY2tD
b250YWluZXIuY3BwCiBsYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRCb3guY3BwCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggOGEwOTI3
Y2M2NTRkYzYwNTZlOWFkY2MyMTYwYjkyYjYyYWY2ZDk3Yy4uZGE3NGI5OGI5NTJlZjVjNjdhNTIy
YWEyOTQ3ZWE0OTQ5MmUxMTM4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjAwNCwxMCArMjAwNCw5IEBACiAJCTZFRDg3OEM1
MTQ3NDkzRjQwMDRDMzU5NyAvKiBSZW5kZXJUYWJsZUNhcHRpb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFRDg3OEMzMTQ3NDkzRjQwMDRDMzU5NyAv
KiBSZW5kZXJUYWJsZUNhcHRpb24uaCAqLzsgfTsKIAkJNkVEOEMzN0ExODNCRkY4QzAwOUU1M0JE
IC8qIEJveFNoYXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA2RUQ4QzM3ODE4M0JGRjhDMDA5RTUzQkQgLyogQm94U2hhcGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2RUU4QTc3MzEwRjgwM0YzMDA1
QTRBMjQgLyogSlNXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUU4QTc3MTEwRjgwM0YzMDA1QTRBMjQgLyogSlNX
ZWJHTENvbnRleHRBdHRyaWJ1dGVzLmggKi87IH07Ci0JCTZGMjE5RDc3MjE3OEQzNzIwMEJCMDMz
QyAvKiBJbmxpbmVSdW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDZGMjE5RDc0MjE3OEQzNzEwMEJCMDMzQyAvKiBJbmxpbmVSdW4uaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk2RjFDQzFERTIyNUY4QjQ5
MDA3MjBBRDIgLyogSW5saW5lVGV4dEl0ZW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDZGMUNDMUREMjI1RjhCNDIwMDcyMEFEMiAvKiBJbmxpbmVUZXh0
SXRlbS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTZGMjIyQjc2MUFCNTJEOEEwMDk0NjUxQSAvKiBXZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RjIyMkI3
NTFBQjUyRDhBMDA5NDY1MUEgLyogV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2UuY3BwICovOyB9
OwogCQk2RjNFMUY2MjIxMzYxNDIwMDBBNjVBMDggLyogRmxvYXRCb3guaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZGM0UxRjYxMjEzNjE0MTcwMEE2NUEw
OCAvKiBGbG9hdEJveC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07Ci0JCTZGNTIxN0M3MjE3N0Y1QTcwMDY1ODNCQiAvKiBJbmxpbmVSdW5Qcm92aWRlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkY1MjE3QzQy
MTc3RjVBNjAwNjU4M0JCIC8qIElubGluZVJ1blByb3ZpZGVyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNkY3Q0EzQzYyMDhDMjk1NzAwMkYyOUFC
IC8qIExheW91dFN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA2RjdDQTNDNDIwOEMyOTU2MDAyRjI5QUIgLyogTGF5b3V0U3RhdGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2RjdDQTNDQTIwOEMy
QjJFMDAyRjI5QUIgLyogSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZGN0NBM0M4MjA4QzJCMkUwMDJGMjlBQiAv
KiBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTZGOTk1QTE1MUE3MDc1NjIwMEE3MzVGNCAvKiBXZWJHTFN5
bmMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkY5
OTVBMTMxQTcwNzU2MjAwQTczNUY0IC8qIFdlYkdMU3luYy5jcHAgKi87IH07CkBAIC0yMDI4LDYg
KzIwMjcsNyBAQAogCQk2RkE0NDU0RTg5OEYyRkMxNjhCQzM4QzEgLyogSlNCZWZvcmVVbmxvYWRF
dmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjlF
MDRBMjdCRUQyRjgxRjk4RTkwMjJCIC8qIEpTQmVmb3JlVW5sb2FkRXZlbnQuaCAqLzsgfTsKIAkJ
NkZCMTFCNUMyMTc4M0ZEMDAwRTJBNTc0IC8qIFRleHRVdGlsLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RkIxMUI1OTIxNzgzRkNGMDBFMkE1NzQgLyog
VGV4dFV0aWwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk2RkI1RTIxNDIyMUYyNDUzMDAzOTg5Q0YgLyogQ29udGVudENoYW5nZU9ic2VydmVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RkI1RTIxMjIy
MUYyNDQ3MDAzOTg5Q0YgLyogQ29udGVudENoYW5nZU9ic2VydmVyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNkZDRTFBMUEyMjYxOEFCRDAwNEYw
MzQzIC8qIERpc3BsYXlSdW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDZGQ0UxQTE4MjI2MThBQjMwMDRGMDM0MyAvKiBEaXNwbGF5UnVuLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNkZFMTk4MTcyMTc4
Mzk3QzAwNDQ2RjA4IC8qIElubGluZUxpbmVCcmVha2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RkUxOTgxNTIxNzgzOTdDMDA0NDZGMDggLyogSW5s
aW5lTGluZUJyZWFrZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk2RkU3Q0ZBMjIxNzdFRUYyMDA1QjE1NzMgLyogSW5saW5lSXRlbS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkZFN0NGQTAyMTc3RUVG
MTAwNUIxNTczIC8qIElubGluZUl0ZW0uaCAqLzsgfTsKIAkJNkZFN0NGQTQyMTc3RUYxMDAwNUIx
NTczIC8qIExheW91dExpbmVCcmVha0JveC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNkZFN0NGQTMyMTc3RUYxMDAwNUIxNTczIC8qIExheW91dExpbmVC
cmVha0JveC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CkBAIC05MDg1LDE1ICs5MDg1LDE0IEBACiAJCTZFRThBNzcwMTBGODAzRjMwMDVBNEEyNCAvKiBK
U1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNkVFOEE3NzExMEY4MDNGMzAwNUE0QTI0IC8qIEpTV2ViR0xDb250ZXh0QXR0
cmlidXRlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dlYkdMQ29udGV4
dEF0dHJpYnV0ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkYwODMwREYyMEI0
Njk1MTAwOEE5NDVCIC8qIEJsb2NrRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk2RjIxOUQ3NDIxNzhEMzcxMDBCQjAzM0MgLyogSW5saW5l
UnVuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElubGluZVJ1bi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RjFDQzFEQzIyNUY4QjQxMDA3MjBBRDIgLyogSW5s
aW5lVGV4dEl0ZW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5saW5lVGV4dEl0ZW0uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RjFDQzFERDIyNUY4QjQyMDA3MjBBRDIgLyog
SW5saW5lVGV4dEl0ZW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5saW5lVGV4dEl0ZW0uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkYyMjJCNzQxQUI1MkQ2NDAwOTQ2NTFBIC8qIFdlYkdM
VmVydGV4QXJyYXlPYmplY3RCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdMVmVydGV4QXJyYXlP
YmplY3RCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGMjIyQjc1MUFCNTJE
OEEwMDk0NjUxQSAvKiBXZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGMjVCMjAwMjIwQTg1QUIwMDAwMDExQiAv
KiBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSW5saW5lRm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNkYzNUVGQUYyMTg3Q0JENTAwNDRFMEY0IC8qIElubGluZUZvcm1hdHRp
bmdDb250ZXh0R2VvbWV0cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSW5saW5lRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTZGM0UxRjVGMjEzNjE0MTcwMEE2NUEwOCAvKiBGbG9hdEJveC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBGbG9hdEJveC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTZGM0UxRjYxMjEzNjE0MTcwMEE2NUEwOCAvKiBGbG9hdEJveC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGbG9hdEJveC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2RjUyMTdDNDIxNzdG
NUE2MDA2NTgzQkIgLyogSW5saW5lUnVuUHJvdmlkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW5saW5lUnVuUHJvdmlkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJNkY1MjE3QzYyMTc3RjVBNjAwNjU4M0JCIC8qIElubGluZVJ1blByb3ZpZGVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElubGluZVJ1blByb3ZpZGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkY3MzkxOEMyMTA2Q0VERDAwNkFGMjYy
IC8qIExheW91dFVuaXRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheW91dFVuaXRzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGN0NBM0M0MjA4QzI5NTYwMDJGMjlBQiAvKiBMYXlvdXRT
dGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBMYXlvdXRTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk2RjdDQTNDNTIwOEMyOTU2MDAyRjI5QUIgLyogTGF5b3V0U3RhdGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gTGF5b3V0U3RhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtOTEzMCw2ICs5MTI5LDcgQEAKIAkJNkZCMTFCNUIyMTc4M0ZDRjAwRTJBNTc0IC8q
IFRleHRVdGlsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRleHRV
dGlsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkZCNUUyMTIyMjFGMjQ0NzAw
Mzk4OUNGIC8qIENvbnRlbnRDaGFuZ2VPYnNlcnZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb250ZW50
Q2hhbmdlT2JzZXJ2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkZCQjg2MDUy
MEI0NjRCNjAwREFEOTM4IC8qIEZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTZGQ0UxQTE4MjI2MThBQjMwMDRGMDM0MyAvKiBEaXNwbGF5UnVuLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IERpc3BsYXlSdW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNkZFMTk4MTMyMTc4Mzk3QjAwNDQ2RjA4IC8qIElubGluZUxpbmVCcmVha2VyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElubGluZUxpbmVCcmVha2VyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkZFMTk4MTUyMTc4Mzk3QzAwNDQ2RjA4IC8q
IElubGluZUxpbmVCcmVha2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElu
bGluZUxpbmVCcmVha2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGRTdBQTI2
MjFDMzdCNjMwMDI5NkRDRCAvKiBNYXJnaW5UeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXJnaW5U
eXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTYzMzgsOSArMTYzMzgsOCBA
QAogCQkJCTZGRTdDRkEwMjE3N0VFRjEwMDVCMTU3MyAvKiBJbmxpbmVJdGVtLmggKi8sCiAJCQkJ
NkZFMTk4MTMyMTc4Mzk3QjAwNDQ2RjA4IC8qIElubGluZUxpbmVCcmVha2VyLmNwcCAqLywKIAkJ
CQk2RkUxOTgxNTIxNzgzOTdDMDA0NDZGMDggLyogSW5saW5lTGluZUJyZWFrZXIuaCAqLywKLQkJ
CQk2RjIxOUQ3NDIxNzhEMzcxMDBCQjAzM0MgLyogSW5saW5lUnVuLmggKi8sCi0JCQkJNkY1MjE3
QzYyMTc3RjVBNjAwNjU4M0JCIC8qIElubGluZVJ1blByb3ZpZGVyLmNwcCAqLywKLQkJCQk2RjUy
MTdDNDIxNzdGNUE2MDA2NTgzQkIgLyogSW5saW5lUnVuUHJvdmlkZXIuaCAqLywKKwkJCQk2RjFD
QzFEQzIyNUY4QjQxMDA3MjBBRDIgLyogSW5saW5lVGV4dEl0ZW0uY3BwICovLAorCQkJCTZGMUND
MUREMjI1RjhCNDIwMDcyMEFEMiAvKiBJbmxpbmVUZXh0SXRlbS5oICovLAogCQkJKTsKIAkJCXBh
dGggPSBpbmxpbmVmb3JtYXR0aW5nOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTE2
MzUwLDYgKzE2MzQ5LDcgQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCTExOTlGQTVBMjA4RTNDN0Yw
MDIzNThDQyAvKiBEaXNwbGF5Qm94LmNwcCAqLywKIAkJCQkxMTk5RkE1OTIwOEUzQzdGMDAyMzU4
Q0MgLyogRGlzcGxheUJveC5oICovLAorCQkJCTZGQ0UxQTE4MjI2MThBQjMwMDRGMDM0MyAvKiBE
aXNwbGF5UnVuLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IGRpc3BsYXl0cmVlOwogCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTI4NzYyLDYgKzI4NzYyLDcgQEAKIAkJCQkyRDI5RUNDQTE5
MkYxRjFEMDA5ODRCNzggLyogRGlzcGxheVJlZnJlc2hNb25pdG9ySU9TLmggaW4gSGVhZGVycyAq
LywKIAkJCQkyREU3MDAyMzE5MkZFODJBMDBCMDk3NUMgLyogRGlzcGxheVJlZnJlc2hNb25pdG9y
TWFjLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDI5RUNDODE5MkVDQzgzMDA5ODRCNzggLyogRGlz
cGxheVJlZnJlc2hNb25pdG9yTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNkZDRTFBMUEy
MjYxOEFCRDAwNEYwMzQzIC8qIERpc3BsYXlSdW4uaCBpbiBIZWFkZXJzICovLAogCQkJCUZEMzE2
MDkxMTJCMDI2RjcwMEMxQTM1OSAvKiBEaXN0YW5jZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODQ3
MzBENzcxMjQ4RjBCMzAwRDNBOUM5IC8qIERpc3RhbnRMaWdodFNvdXJjZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQjJGMzRGRTYwRTgyRjgxNDAwRjYyN0NEIC8qIEROUy5oIGluIEhlYWRlcnMgKi8s
CkBAIC0yOTM5MCwxMSArMjkzOTEsMTAgQEAKIAkJCQk2RkU3Q0ZBMjIxNzdFRUYyMDA1QjE1NzMg
LyogSW5saW5lSXRlbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFNzg5MTYxMTIwRDYwODAwNjBF
Q0U1IC8qIElubGluZUl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk2RkUxOTgxNzIxNzgz
OTdDMDA0NDZGMDggLyogSW5saW5lTGluZUJyZWFrZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTZG
MjE5RDc3MjE3OEQzNzIwMEJCMDMzQyAvKiBJbmxpbmVSdW4uaCBpbiBIZWFkZXJzICovLAotCQkJ
CTZGNTIxN0M3MjE3N0Y1QTcwMDY1ODNCQiAvKiBJbmxpbmVSdW5Qcm92aWRlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQUE0QzNBNzcwQjJCMTY3OTAwMjMzNEEyIC8qIElubGluZVN0eWxlU2hlZXRP
d25lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFQTQ4NUEwOTdEOTMwMjAwOTRDOUU0IC8qIElu
bGluZVRleHRCb3guaCBpbiBIZWFkZXJzICovLAogCQkJCTFDMDEwNzAxMTkyNTk0REYwMDhBNDIw
MSAvKiBJbmxpbmVUZXh0Qm94U3R5bGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTZGMUNDMURFMjI1
RjhCNDkwMDcyMEFEMiAvKiBJbmxpbmVUZXh0SXRlbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEw
QTU4RTUxQkFBNDBCMTAwQzE5MjgyIC8qIEluUHJvY2Vzc0lEQlNlcnZlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMkVCNzY3NTcxREExOUJERjAwM0UyM0I1IC8qIElucHV0RXZlbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUU1MkVGREY0MjExMjg3NUEwMEFEMjgyQSAvKiBJbnB1dE1vZGUuaCBpbiBI
ZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdD
b250ZXh0R2VvbWV0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdDb250
ZXh0R2VvbWV0cnkuY3BwCmluZGV4IDk2N2NmZDQ5OThiNmExYTA4OTdkMDYyZmYwZGJhYjVlZDVh
MTczZTcuLjE4OTYzYzM1NjZkMmMxZDUzZGRlNzA4MDU2NmM3YWNlOGIzYTg5YzYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAK
QEAgLTExMiw4ICsxMTIsOCBAQCBzdGF0aWMgTGF5b3V0VW5pdCBjb250ZW50SGVpZ2h0Rm9yRm9y
bWF0dGluZ0NvbnRleHRSb290KGNvbnN0IExheW91dFN0YXRlJiBsYXlvdQogICAgICAgICAvLyBU
aGlzIGlzIHRlbXAgYW5kIHdpbGwgYmUgcmVwbGFjZWQgYnkgdGhlIGNvcnJlY3QgZGlzcGxheSBi
b3ggb25jZSBpbmxpbmUgcnVucyBtb3ZlIG92ZXIgdG8gdGhlIGRpc3BsYXkgdHJlZS4KICAgICAg
ICAgYXV0byYgaW5saW5lUnVucyA9IGRvd25jYXN0PElubGluZUZvcm1hdHRpbmdTdGF0ZT4obGF5
b3V0U3RhdGUuZXN0YWJsaXNoZWRGb3JtYXR0aW5nU3RhdGUobGF5b3V0Qm94KSkuaW5saW5lUnVu
cygpOwogICAgICAgICBpZiAoIWlubGluZVJ1bnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICB0
b3AgPSBpbmxpbmVSdW5zWzBdLmxvZ2ljYWxUb3AoKTsKLSAgICAgICAgICAgIGJvdHRvbSA9ICBp
bmxpbmVSdW5zLmxhc3QoKS5sb2dpY2FsQm90dG9tKCk7CisgICAgICAgICAgICB0b3AgPSBpbmxp
bmVSdW5zWzBdLT5sb2dpY2FsVG9wKCk7CisgICAgICAgICAgICBib3R0b20gPSAgaW5saW5lUnVu
cy5sYXN0KCktPmxvZ2ljYWxCb3R0b20oKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoZm9y
bWF0dGluZ1Jvb3RDb250YWluZXIuZXN0YWJsaXNoZXNCbG9ja0Zvcm1hdHRpbmdDb250ZXh0KCkg
fHwgbGF5b3V0Qm94LmlzRG9jdW1lbnRCb3goKSkgewogICAgICAgICBpZiAoZm9ybWF0dGluZ1Jv
b3RDb250YWluZXIuaGFzSW5GbG93Q2hpbGQoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L1ZlcmlmaWNhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvVmVyaWZp
Y2F0aW9uLmNwcAppbmRleCAyZTc3YzM5ZTkyMTQ0OTQyZWYyOWU0MGU0Yzc0MzZlNTExMjAwYmMy
Li5mMDZlM2RlYmYzNzRjYzAzMTFiZDNkNjQ2ODczMGZiMGMyMjUxZjRlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvVmVyaWZpY2F0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvVmVyaWZpY2F0aW9uLmNwcApAQCAtNDYsNyArNDYsNyBAQCBzdGF0aWMgYm9vbCBh
cmVFc3NlbnRpYWxseUVxdWFsKGZsb2F0IGEsIExheW91dFVuaXQgYikKICAgICBpZiAoYSA9PSBi
LnRvRmxvYXQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICByZXR1cm4gZmFicyhhIC0g
Yi50b0Zsb2F0KCkpIDw9IDggKiBMYXlvdXRVbml0OjplcHNpbG9uKCk7CisgICAgcmV0dXJuIGZh
YnMoYSAtIGIudG9GbG9hdCgpKSA8PSAxMCAqIExheW91dFVuaXQ6OmVwc2lsb24oKTsKIH0KIAog
c3RhdGljIGJvb2wgb3V0cHV0TWlzbWF0Y2hpbmdTaW1wbGVMaW5lSW5mb3JtYXRpb25JZk5lZWRl
ZChUZXh0U3RyZWFtJiBzdHJlYW0sIGNvbnN0IExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgY29u
c3QgUmVuZGVyQmxvY2tGbG93JiBibG9ja0Zsb3csIGNvbnN0IENvbnRhaW5lciYgaW5saW5lRm9y
bWF0dGluZ1Jvb3QpCkBAIC03MiwzMyArNzIsMzMgQEAgc3RhdGljIGJvb2wgb3V0cHV0TWlzbWF0
Y2hpbmdTaW1wbGVMaW5lSW5mb3JtYXRpb25JZk5lZWRlZChUZXh0U3RyZWFtJiBzdHJlYW0sIGMK
ICAgICAgICAgYXV0byYgc2ltcGxlUnVuID0gbGluZUxheW91dERhdGEtPnJ1bkF0KGkpOwogICAg
ICAgICBhdXRvJiBpbmxpbmVSdW4gPSBpbmxpbmVSdW5MaXN0W2ldOwogCi0gICAgICAgIGF1dG8g
bWF0Y2hpbmdSdW5zID0gYXJlRXNzZW50aWFsbHlFcXVhbChzaW1wbGVSdW4ubG9naWNhbExlZnQs
IGlubGluZVJ1bi5sb2dpY2FsTGVmdCgpKSAmJiBhcmVFc3NlbnRpYWxseUVxdWFsKHNpbXBsZVJ1
bi5sb2dpY2FsUmlnaHQsIGlubGluZVJ1bi5sb2dpY2FsUmlnaHQoKSk7CisgICAgICAgIGF1dG8g
bWF0Y2hpbmdSdW5zID0gYXJlRXNzZW50aWFsbHlFcXVhbChzaW1wbGVSdW4ubG9naWNhbExlZnQs
IGlubGluZVJ1bi0+bG9naWNhbExlZnQoKSkgJiYgYXJlRXNzZW50aWFsbHlFcXVhbChzaW1wbGVS
dW4ubG9naWNhbFJpZ2h0LCBpbmxpbmVSdW4tPmxvZ2ljYWxSaWdodCgpKTsKICAgICAgICAgaWYg
KG1hdGNoaW5nUnVucykKLSAgICAgICAgICAgIG1hdGNoaW5nUnVucyA9IChzaW1wbGVSdW4uc3Rh
cnQgPT0gaW5saW5lUnVuLnRleHRDb250ZXh0KCktPnN0YXJ0KCkgJiYgc2ltcGxlUnVuLmVuZCA9
PSAoaW5saW5lUnVuLnRleHRDb250ZXh0KCktPnN0YXJ0KCkgKyBpbmxpbmVSdW4udGV4dENvbnRl
eHQoKS0+bGVuZ3RoKCkpKTsKKyAgICAgICAgICAgIG1hdGNoaW5nUnVucyA9IHNpbXBsZVJ1bi5z
dGFydCA9PSBpbmxpbmVSdW4tPnRleHRDb250ZXh0KCktPnN0YXJ0KCkgJiYgc2ltcGxlUnVuLmVu
ZCA9PSBpbmxpbmVSdW4tPnRleHRDb250ZXh0KCktPmVuZCgpOwogICAgICAgICBpZiAobWF0Y2hp
bmdSdW5zKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgc3RyZWFtIDw8ICJNaXNt
YXRjaGluZzogc2ltcGxlIHJ1bigiIDw8IHNpbXBsZVJ1bi5zdGFydCA8PCAiLCAiIDw8IHNpbXBs
ZVJ1bi5lbmQgPDwgIikgKCIgPDwgc2ltcGxlUnVuLmxvZ2ljYWxMZWZ0IDw8ICIsICIgPDwgc2lt
cGxlUnVuLmxvZ2ljYWxSaWdodCA8PCAiKSBsYXlvdXQgcnVuKCIgPDwgaW5saW5lUnVuLnRleHRD
b250ZXh0KCktPnN0YXJ0KCkgPDwgIiwgIiA8PCBpbmxpbmVSdW4udGV4dENvbnRleHQoKS0+c3Rh
cnQoKSArIGlubGluZVJ1bi50ZXh0Q29udGV4dCgpLT5sZW5ndGgoKSA8PCAiKSAoIiA8PCBpbmxp
bmVSdW4ubG9naWNhbExlZnQoKSA8PCAiLCAiIDw8IGlubGluZVJ1bi5sb2dpY2FsUmlnaHQoKSA8
PCAiKSI7CisgICAgICAgIHN0cmVhbSA8PCAiTWlzbWF0Y2hpbmc6IHNpbXBsZSBydW4oIiA8PCBz
aW1wbGVSdW4uc3RhcnQgPDwgIiwgIiA8PCBzaW1wbGVSdW4uZW5kIDw8ICIpICgiIDw8IHNpbXBs
ZVJ1bi5sb2dpY2FsTGVmdCA8PCAiLCAiIDw8IHNpbXBsZVJ1bi5sb2dpY2FsUmlnaHQgPDwgIikg
bGF5b3V0IHJ1bigiIDw8IGlubGluZVJ1bi0+dGV4dENvbnRleHQoKS0+c3RhcnQoKSA8PCAiLCAi
IDw8IGlubGluZVJ1bi0+dGV4dENvbnRleHQoKS0+ZW5kKCkgPDwgIikgKCIgPDwgaW5saW5lUnVu
LT5sb2dpY2FsTGVmdCgpIDw8ICIsICIgPDwgaW5saW5lUnVuLT5sb2dpY2FsUmlnaHQoKSA8PCAi
KSI7CiAgICAgICAgIHN0cmVhbS5uZXh0TGluZSgpOwogICAgICAgICBtaXNtYXRjaGVkID0gdHJ1
ZTsKICAgICB9CiAgICAgcmV0dXJuIG1pc21hdGNoZWQ7CiB9CiAKLXN0YXRpYyBib29sIGNoZWNr
Rm9yTWF0Y2hpbmdOb25UZXh0UnVucyhjb25zdCBJbmxpbmVSdW4mIGlubGluZVJ1biwgY29uc3Qg
V2ViQ29yZTo6SW5saW5lQm94JiBpbmxpbmVCb3gpCitzdGF0aWMgYm9vbCBjaGVja0Zvck1hdGNo
aW5nTm9uVGV4dFJ1bnMoY29uc3QgRGlzcGxheTo6UnVuJiBpbmxpbmVSdW4sIGNvbnN0IFdlYkNv
cmU6OklubGluZUJveCYgaW5saW5lQm94KQogewogICAgIHJldHVybiBhcmVFc3NlbnRpYWxseUVx
dWFsKGlubGluZUJveC5sb2dpY2FsTGVmdCgpLCBpbmxpbmVSdW4ubG9naWNhbExlZnQoKSkKICAg
ICAgICAgJiYgYXJlRXNzZW50aWFsbHlFcXVhbChpbmxpbmVCb3gubG9naWNhbFJpZ2h0KCksIGlu
bGluZVJ1bi5sb2dpY2FsUmlnaHQoKSkKICAgICAgICAgJiYgYXJlRXNzZW50aWFsbHlFcXVhbChp
bmxpbmVCb3gubG9naWNhbEhlaWdodCgpLCBpbmxpbmVSdW4ubG9naWNhbEhlaWdodCgpKTsKIH0K
IAotc3RhdGljIGJvb2wgY2hlY2tGb3JNYXRjaGluZ1RleHRSdW5zKGNvbnN0IElubGluZVJ1biYg
aW5saW5lUnVuLCBmbG9hdCBsb2dpY2FsTGVmdCwgZmxvYXQgbG9naWNhbFJpZ2h0LCB1bnNpZ25l
ZCBzdGFydCwgdW5zaWduZWQgZW5kLCBmbG9hdCBsb2dpY2FsSGVpZ2h0KQorc3RhdGljIGJvb2wg
Y2hlY2tGb3JNYXRjaGluZ1RleHRSdW5zKGNvbnN0IERpc3BsYXk6OlJ1biYgaW5saW5lUnVuLCBj
b25zdCBJbmxpbmVUZXh0Qm94JiBpbmxpbmVUZXh0Qm94KQogewotICAgIHJldHVybiBhcmVFc3Nl
bnRpYWxseUVxdWFsKGxvZ2ljYWxMZWZ0LCBpbmxpbmVSdW4ubG9naWNhbExlZnQoKSkKLSAgICAg
ICAgJiYgYXJlRXNzZW50aWFsbHlFcXVhbChsb2dpY2FsUmlnaHQsIGlubGluZVJ1bi5sb2dpY2Fs
UmlnaHQoKSkKLSAgICAgICAgJiYgc3RhcnQgPT0gaW5saW5lUnVuLnRleHRDb250ZXh0KCktPnN0
YXJ0KCkKLSAgICAgICAgJiYgKGVuZCA9PSAoaW5saW5lUnVuLnRleHRDb250ZXh0KCktPnN0YXJ0
KCkgKyBpbmxpbmVSdW4udGV4dENvbnRleHQoKS0+bGVuZ3RoKCkpKQotICAgICAgICAmJiBhcmVF
c3NlbnRpYWxseUVxdWFsKGxvZ2ljYWxIZWlnaHQsIGlubGluZVJ1bi5sb2dpY2FsSGVpZ2h0KCkp
OworICAgIHJldHVybiBhcmVFc3NlbnRpYWxseUVxdWFsKGlubGluZVRleHRCb3gubG9naWNhbExl
ZnQoKSwgaW5saW5lUnVuLmxvZ2ljYWxMZWZ0KCkpCisgICAgICAgICYmIGFyZUVzc2VudGlhbGx5
RXF1YWwoaW5saW5lVGV4dEJveC5sb2dpY2FsUmlnaHQoKSwgaW5saW5lUnVuLmxvZ2ljYWxSaWdo
dCgpKQorICAgICAgICAmJiBpbmxpbmVUZXh0Qm94LnN0YXJ0KCkgPT0gaW5saW5lUnVuLnRleHRD
b250ZXh0KCktPnN0YXJ0KCkKKyAgICAgICAgJiYgKGlubGluZVRleHRCb3guZW5kKCkgKyAxKSA9
PSBpbmxpbmVSdW4udGV4dENvbnRleHQoKS0+ZW5kKCkKKyAgICAgICAgJiYgYXJlRXNzZW50aWFs
bHlFcXVhbChpbmxpbmVUZXh0Qm94LmxvZ2ljYWxIZWlnaHQoKSwgaW5saW5lUnVuLmxvZ2ljYWxI
ZWlnaHQoKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGNvbGxlY3RGbG93Qm94U3VidHJlZShjb25zdCBJ
bmxpbmVGbG93Qm94JiBmbG93Ym94LCBWZWN0b3I8V2ViQ29yZTo6SW5saW5lQm94Kj4mIGlubGlu
ZUJveGVzKQpAQCAtMTI2LDE5ICsxMjYsNiBAQCBzdGF0aWMgdm9pZCBjb2xsZWN0SW5saW5lQm94
ZXMoY29uc3QgUmVuZGVyQmxvY2tGbG93JiByb290LCBWZWN0b3I8V2ViQ29yZTo6SW5saQogICAg
IH0KIH0KIAotc3RhdGljIExheW91dFVuaXQgcmVzb2x2ZUZvclJlbGF0aXZlUG9zaXRpb25JZk5l
ZWRlZChjb25zdCBJbmxpbmVUZXh0Qm94JiBpbmxpbmVUZXh0Qm94KQotewotICAgIExheW91dFVu
aXQgeE9mZnNldDsKLSAgICBhdXRvKiBwYXJlbnQgPSBpbmxpbmVUZXh0Qm94LnBhcmVudCgpOwot
ICAgIHdoaWxlIChpczxJbmxpbmVGbG93Qm94PihwYXJlbnQpKSB7Ci0gICAgICAgIGF1dG8mIHJl
bmRlcmVyID0gcGFyZW50LT5yZW5kZXJlcigpOwotICAgICAgICBpZiAocmVuZGVyZXIuaXNJbkZs
b3dQb3NpdGlvbmVkKCkpCi0gICAgICAgICAgICB4T2Zmc2V0ID0gcmVuZGVyZXIub2Zmc2V0Rm9y
SW5GbG93UG9zaXRpb24oKS53aWR0aCgpOwotICAgICAgICBwYXJlbnQgPSBwYXJlbnQtPnBhcmVu
dCgpOwotICAgIH0KLSAgICByZXR1cm4geE9mZnNldDsKLX0KLQogc3RhdGljIGJvb2wgb3V0cHV0
TWlzbWF0Y2hpbmdDb21wbGV4TGluZUluZm9ybWF0aW9uSWZOZWVkZWQoVGV4dFN0cmVhbSYgc3Ry
ZWFtLCBjb25zdCBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IFJlbmRlckJsb2NrRmxv
dyYgYmxvY2tGbG93LCBjb25zdCBDb250YWluZXImIGlubGluZUZvcm1hdHRpbmdSb290KQogewog
ICAgIGF1dG8mIGlubGluZUZvcm1hdHRpbmdTdGF0ZSA9IGxheW91dFN0YXRlLmVzdGFibGlzaGVk
Rm9ybWF0dGluZ1N0YXRlKGlubGluZUZvcm1hdHRpbmdSb290KTsKQEAgLTE1OCw1NCArMTQ1LDEw
IEBAIHN0YXRpYyBib29sIG91dHB1dE1pc21hdGNoaW5nQ29tcGxleExpbmVJbmZvcm1hdGlvbklm
TmVlZGVkKFRleHRTdHJlYW0mIHN0cmVhbSwKICAgICB9CiAKICAgICBmb3IgKHVuc2lnbmVkIGlu
bGluZUJveEluZGV4ID0gMDsgaW5saW5lQm94SW5kZXggPCBpbmxpbmVCb3hlcy5zaXplKCkgJiYg
cnVuSW5kZXggPCBpbmxpbmVSdW5MaXN0LnNpemUoKTsgKytpbmxpbmVCb3hJbmRleCkgeworICAg
ICAgICBhdXRvJiBpbmxpbmVSdW4gPSBpbmxpbmVSdW5MaXN0W3J1bkluZGV4XTsKICAgICAgICAg
YXV0byogaW5saW5lQm94ID0gaW5saW5lQm94ZXNbaW5saW5lQm94SW5kZXhdOwogICAgICAgICBh
dXRvKiBpbmxpbmVUZXh0Qm94ID0gaXM8SW5saW5lVGV4dEJveD4oaW5saW5lQm94KSA/IGRvd25j
YXN0PElubGluZVRleHRCb3g+KGlubGluZUJveCkgOiBudWxscHRyOwotCi0gICAgICAgIGF1dG8m
IGlubGluZVJ1biA9IGlubGluZVJ1bkxpc3RbcnVuSW5kZXhdOwotICAgICAgICBhdXRvIG1hdGNo
aW5nUnVucyA9IGZhbHNlOwotICAgICAgICBpZiAoaW5saW5lVGV4dEJveCkgewotICAgICAgICAg
ICAgYXV0byB4T2Zmc2V0ID0gcmVzb2x2ZUZvclJlbGF0aXZlUG9zaXRpb25JZk5lZWRlZCgqaW5s
aW5lVGV4dEJveCk7Ci0gICAgICAgICAgICBtYXRjaGluZ1J1bnMgPSBjaGVja0Zvck1hdGNoaW5n
VGV4dFJ1bnMoaW5saW5lUnVuLCBpbmxpbmVUZXh0Qm94LT5sb2dpY2FsTGVmdCgpICsgeE9mZnNl
dCwKLSAgICAgICAgICAgICAgICBpbmxpbmVUZXh0Qm94LT5sb2dpY2FsUmlnaHQoKSArIHhPZmZz
ZXQsCi0gICAgICAgICAgICAgICAgaW5saW5lVGV4dEJveC0+c3RhcnQoKSwKLSAgICAgICAgICAg
ICAgICBpbmxpbmVUZXh0Qm94LT5lbmQoKSArIDEsCi0gICAgICAgICAgICAgICAgaW5saW5lVGV4
dEJveC0+bG9naWNhbEhlaWdodCgpKTsKLQotICAgICAgICAgICAgLy8gPHNwYW4+Zm9vYmFyPC9z
cGFuPmZvb2JhciBnZW5lcmF0ZXMgMiBpbmxpbmUgdGV4dCBib3hlcyB3aGlsZSB3ZSBvbmx5IGdl
bmVyYXRlIG9uZSBpbmxpbmUgcnVuLgotICAgICAgICAgICAgLy8gYWxzbyA8ZGl2PmZvbzxpbWcg
c3R5bGU9ImZsb2F0OiBsZWZ0OyI+YmFyPC9kaXY+IHRvby4KLSAgICAgICAgICAgIGF1dG8gaW5s
aW5lUnVuRW5kID0gaW5saW5lUnVuLnRleHRDb250ZXh0KCktPnN0YXJ0KCkgKyBpbmxpbmVSdW4u
dGV4dENvbnRleHQoKS0+bGVuZ3RoKCk7Ci0gICAgICAgICAgICBhdXRvIHRleHRSdW5NaWdodEJl
RXh0ZW5kZWQgPSAhbWF0Y2hpbmdSdW5zICYmIGlubGluZVRleHRCb3gtPmVuZCgpIDwgaW5saW5l
UnVuRW5kICYmIGlubGluZUJveEluZGV4IDwgaW5saW5lQm94ZXMuc2l6ZSgpIC0gMTsKLQotICAg
ICAgICAgICAgaWYgKHRleHRSdW5NaWdodEJlRXh0ZW5kZWQpIHsKLSAgICAgICAgICAgICAgICBh
dXRvIGxvZ2ljYWxMZWZ0ID0gaW5saW5lVGV4dEJveC0+bG9naWNhbExlZnQoKSArIHhPZmZzZXQ7
Ci0gICAgICAgICAgICAgICAgYXV0byBsb2dpY2FsUmlnaHQgPSBpbmxpbmVUZXh0Qm94LT5sb2dp
Y2FsUmlnaHQoKSArIHhPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgYXV0byBzdGFydCA9IGlubGlu
ZVRleHRCb3gtPnN0YXJ0KCk7Ci0gICAgICAgICAgICAgICAgYXV0byBlbmQgPSBpbmxpbmVUZXh0
Qm94LT5lbmQoKSArIDE7Ci0gICAgICAgICAgICAgICAgYXV0byBpbmRleCA9ICsraW5saW5lQm94
SW5kZXg7Ci0gICAgICAgICAgICAgICAgZm9yICg7IGluZGV4IDwgaW5saW5lQm94ZXMuc2l6ZSgp
OyArK2luZGV4KSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8qIGlubGluZUJveCA9IGlubGlu
ZUJveGVzW2luZGV4XTsKLSAgICAgICAgICAgICAgICAgICAgYXV0byogaW5saW5lVGV4dEJveCA9
IGlzPElubGluZVRleHRCb3g+KGlubGluZUJveCkgPyBkb3duY2FzdDxJbmxpbmVUZXh0Qm94Pihp
bmxpbmVCb3gpIDogbnVsbHB0cjsKLSAgICAgICAgICAgICAgICAgICAgLy8gQ2FuJ3QgbWl4IGRp
ZmZlcmVudCBpbmxpbmUgYm94ZXMuCi0gICAgICAgICAgICAgICAgICAgIGlmICghaW5saW5lVGV4
dEJveCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAg
ICAgIGF1dG8geE9mZnNldCA9IHJlc29sdmVGb3JSZWxhdGl2ZVBvc2l0aW9uSWZOZWVkZWQoKmlu
bGluZVRleHRCb3gpOwotICAgICAgICAgICAgICAgICAgICBsb2dpY2FsUmlnaHQgPSBpbmxpbmVU
ZXh0Qm94LT5sb2dpY2FsUmlnaHQoKSArIHhPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgICAgIGVu
ZCArPSAoaW5saW5lVGV4dEJveC0+ZW5kKCkgKyAxKTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KGNoZWNrRm9yTWF0Y2hpbmdUZXh0UnVucyhpbmxpbmVSdW4sIGxvZ2ljYWxMZWZ0LCBsb2dpY2Fs
UmlnaHQsIHN0YXJ0LCBlbmQsIGlubGluZVRleHRCb3gtPmxvZ2ljYWxIZWlnaHQoKSkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIG1hdGNoaW5nUnVucyA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpbmxpbmVCb3hJbmRleCA9IGluZGV4OwotICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAv
LyBXZW50IHRvbyBmYXI/Ci0gICAgICAgICAgICAgICAgICAgIGlmIChlbmQgPj0gaW5saW5lUnVu
RW5kKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1hdGNoaW5nUnVucyA9
IGNoZWNrRm9yTWF0Y2hpbmdOb25UZXh0UnVucyhpbmxpbmVSdW4sICppbmxpbmVCb3gpOwotCisg
ICAgICAgIGJvb2wgbWF0Y2hpbmdSdW5zID0gaW5saW5lVGV4dEJveCA/IGNoZWNrRm9yTWF0Y2hp
bmdUZXh0UnVucygqaW5saW5lUnVuLCAqaW5saW5lVGV4dEJveCkgOiBtYXRjaGluZ1J1bnMgPSBj
aGVja0Zvck1hdGNoaW5nTm9uVGV4dFJ1bnMoKmlubGluZVJ1biwgKmlubGluZUJveCk7CiAKICAg
ICAgICAgaWYgKCFtYXRjaGluZ1J1bnMpIHsKICAgICAgICAgICAgIHN0cmVhbSA8PCAiTWlzbWF0
Y2hpbmc6IHJ1biAiOwpAQCAtMjE0LDEwICsxNTcsMTAgQEAgc3RhdGljIGJvb2wgb3V0cHV0TWlz
bWF0Y2hpbmdDb21wbGV4TGluZUluZm9ybWF0aW9uSWZOZWVkZWQoVGV4dFN0cmVhbSYgc3RyZWFt
LAogICAgICAgICAgICAgICAgIHN0cmVhbSA8PCAiKCIgPDwgaW5saW5lVGV4dEJveC0+c3RhcnQo
KSA8PCAiLCAiIDw8IGlubGluZVRleHRCb3gtPmVuZCgpICsgMSA8PCAiKSI7CiAgICAgICAgICAg
ICBzdHJlYW0gPDwgIiAoIiA8PCBpbmxpbmVCb3gtPmxvZ2ljYWxMZWZ0KCkgPDwgIiwgIiA8PCBp
bmxpbmVCb3gtPmxvZ2ljYWxSaWdodCgpIDw8ICIpICgiIDw8IGlubGluZUJveC0+bG9naWNhbFdp
ZHRoKCkgPDwgIngiIDw8IGlubGluZUJveC0+bG9naWNhbEhlaWdodCgpIDw8ICIpIjsKIAotICAg
ICAgICAgICAgc3RyZWFtIDw8ICJpbmxpbmUgcnVuICI7Ci0gICAgICAgICAgICBpZiAoaW5saW5l
UnVuLnRleHRDb250ZXh0KCkpCi0gICAgICAgICAgICAgICAgc3RyZWFtIDw8ICIoIiA8PCBpbmxp
bmVSdW4udGV4dENvbnRleHQoKS0+c3RhcnQoKSA8PCAiLCAiIDw8IGlubGluZVJ1bi50ZXh0Q29u
dGV4dCgpLT5zdGFydCgpICsgaW5saW5lUnVuLnRleHRDb250ZXh0KCktPmxlbmd0aCgpIDw8ICIp
ICI7Ci0gICAgICAgICAgICBzdHJlYW0gPDwgIigiIDw8IGlubGluZVJ1bi5sb2dpY2FsTGVmdCgp
IDw8ICIsICIgPDwgaW5saW5lUnVuLmxvZ2ljYWxSaWdodCgpIDw8ICIpICgiIDw8IGlubGluZVJ1
bi5sb2dpY2FsV2lkdGgoKSA8PCAieCIgPDwgaW5saW5lUnVuLmxvZ2ljYWxIZWlnaHQoKSA8PCAi
KSI7CisgICAgICAgICAgICBzdHJlYW0gPDwgIiBpbmxpbmUgcnVuICI7CisgICAgICAgICAgICBp
ZiAoaW5saW5lUnVuLT50ZXh0Q29udGV4dCgpKQorICAgICAgICAgICAgICAgIHN0cmVhbSA8PCAi
KCIgPDwgaW5saW5lUnVuLT50ZXh0Q29udGV4dCgpLT5zdGFydCgpIDw8ICIsICIgPDwgaW5saW5l
UnVuLT50ZXh0Q29udGV4dCgpLT5lbmQoKSA8PCAiKSI7CisgICAgICAgICAgICBzdHJlYW0gPDwg
IiAoIiA8PCBpbmxpbmVSdW4tPmxvZ2ljYWxMZWZ0KCkgPDwgIiwgIiA8PCBpbmxpbmVSdW4tPmxv
Z2ljYWxSaWdodCgpIDw8ICIpICgiIDw8IGlubGluZVJ1bi0+bG9naWNhbFdpZHRoKCkgPDwgIngi
IDw8IGlubGluZVJ1bi0+bG9naWNhbEhlaWdodCgpIDw8ICIpIjsKICAgICAgICAgICAgIHN0cmVh
bS5uZXh0TGluZSgpOwogICAgICAgICAgICAgbWlzbWF0Y2hlZCA9IHRydWU7CiAgICAgICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tG
b3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9ibG9j
a2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcAppbmRleCBmOTYz
M2I0MzhhMWIxYjIyN2RhNWI4NzE0NmZmMzFlYmM1Njg2MjVjLi4xY2M2Mzk3NTI3MzU2N2VlYTRi
MGRlOWMxODQwZTU3NDVkOTYzMjRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
YmxvY2tmb3JtYXR0aW5nL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250
ZXh0R2VvbWV0cnkuY3BwCkBAIC03Nyw3ICs3Nyw3IEBAIEhlaWdodEFuZE1hcmdpbiBCbG9ja0Zv
cm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6aW5GbG93Tm9uUmVwbGFjZWRIZWlnaHRBbmRNYXJn
CiAgICAgICAgIGlmIChsYXlvdXRCb3guZXN0YWJsaXNoZXNJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dCgpKSB7CiAgICAgICAgICAgICAvLyBUaGlzIGlzIHRlbXAgYW5kIHdpbGwgYmUgcmVwbGFjZWQg
YnkgdGhlIGNvcnJlY3QgZGlzcGxheSBib3ggb25jZSBpbmxpbmUgcnVucyBtb3ZlIG92ZXIgdG8g
dGhlIGRpc3BsYXkgdHJlZS4KICAgICAgICAgICAgIGF1dG8mIGlubGluZVJ1bnMgPSBkb3duY2Fz
dDxJbmxpbmVGb3JtYXR0aW5nU3RhdGU+KGxheW91dFN0YXRlLmVzdGFibGlzaGVkRm9ybWF0dGlu
Z1N0YXRlKGxheW91dEJveCkpLmlubGluZVJ1bnMoKTsKLSAgICAgICAgICAgIGF1dG8gYm90dG9t
RWRnZSA9IGlubGluZVJ1bnMuaXNFbXB0eSgpID8gTGF5b3V0VW5pdCgpIDogaW5saW5lUnVucy5s
YXN0KCkubG9naWNhbEJvdHRvbSgpOworICAgICAgICAgICAgYXV0byBib3R0b21FZGdlID0gaW5s
aW5lUnVucy5pc0VtcHR5KCkgPyBMYXlvdXRVbml0KCkgOiBpbmxpbmVSdW5zLmxhc3QoKS0+bG9n
aWNhbEJvdHRvbSgpOwogICAgICAgICAgICAgcmV0dXJuIHsgYm90dG9tRWRnZSAtIGJvcmRlckFu
ZFBhZGRpbmdUb3AsIG5vbkNvbGxhcHNlZE1hcmdpbiB9OwogICAgICAgICB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5Qm94LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheUJveC5oCmluZGV4IGQ0Y2Q3YmEx
NDE2OTBlOGJjZmQzNzc5OWUyMmI2MmRiODhmZDYzZWYuLjExMzNlNDk5YjE5NWQwMzQ5YzBlZjM1
Mjg2ZGIyYWMzYzgzZTMzZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNw
bGF5dHJlZS9EaXNwbGF5Qm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Rpc3BsYXl0
cmVlL0Rpc3BsYXlCb3guaApAQCAtMTM5LDYgKzEzOSw3IEBAIHB1YmxpYzoKICAgICBSZWN0IHJl
Y3RXaXRoTWFyZ2luKCkgY29uc3Q7CiAKICAgICBMYXlvdXQ6OlVzZWRWZXJ0aWNhbE1hcmdpbiB2
ZXJ0aWNhbE1hcmdpbigpIGNvbnN0OworICAgIExheW91dDo6VXNlZEhvcml6b250YWxNYXJnaW4g
aG9yaXpvbnRhbE1hcmdpbigpIGNvbnN0OwogICAgIExheW91dFVuaXQgbWFyZ2luQmVmb3JlKCkg
Y29uc3Q7CiAgICAgTGF5b3V0VW5pdCBtYXJnaW5TdGFydCgpIGNvbnN0OwogICAgIExheW91dFVu
aXQgbWFyZ2luQWZ0ZXIoKSBjb25zdDsKQEAgLTU4MCw2ICs1ODEsMTIgQEAgaW5saW5lIExheW91
dDo6VXNlZFZlcnRpY2FsTWFyZ2luIEJveDo6dmVydGljYWxNYXJnaW4oKSBjb25zdAogICAgIHJl
dHVybiBtX3ZlcnRpY2FsTWFyZ2luOwogfQogCitpbmxpbmUgTGF5b3V0OjpVc2VkSG9yaXpvbnRh
bE1hcmdpbiBCb3g6Omhvcml6b250YWxNYXJnaW4oKSBjb25zdAoreworICAgIEFTU0VSVChtX2hh
c1ZhbGlkSG9yaXpvbnRhbE1hcmdpbik7CisgICAgcmV0dXJuIG1faG9yaXpvbnRhbE1hcmdpbjsK
K30KKwogaW5saW5lIExheW91dFVuaXQgQm94OjptYXJnaW5CZWZvcmUoKSBjb25zdAogewogICAg
IEFTU0VSVChtX2hhc1ZhbGlkVmVydGljYWxNYXJnaW4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2Rpc3BsYXl0cmVlL0Rpc3BsYXlSdW4uaCBiL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5UnVuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzI5Nzg1MmEyMDExNzM4
MTU2OGZlZGU2NDlhMTQ1YzI5YWJkNDBhOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5UnVuLmgKQEAgLTAsMCArMSwxMTIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19D
T05URVhUKQorCisjaW5jbHVkZSAiSW5saW5lSXRlbS5oIgorI2luY2x1ZGUgIkxheW91dFVuaXQu
aCIKKyNpbmNsdWRlICJUZXh0RmxhZ3MuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNw
YWNlIERpc3BsYXkgeworCitzdHJ1Y3QgUnVuIHsKKyAgICBzdHJ1Y3QgVGV4dENvbnRleHQgewor
ICAgIHB1YmxpYzoKKyAgICAgICAgVGV4dENvbnRleHQodW5zaWduZWQgcG9zaXRpb24sIHVuc2ln
bmVkIGxlbmd0aCk7CisKKyAgICAgICAgdm9pZCBzZXRTdGFydCh1bnNpZ25lZCBzdGFydCkgeyBt
X3N0YXJ0ID0gc3RhcnQ7IH0KKyAgICAgICAgdm9pZCBzZXRMZW5ndGgodW5zaWduZWQgbGVuZ3Ro
KSB7IG1fbGVuZ3RoID0gbGVuZ3RoOyB9CisKKyAgICAgICAgdW5zaWduZWQgc3RhcnQoKSBjb25z
dCB7IHJldHVybiBtX3N0YXJ0OyB9CisgICAgICAgIHVuc2lnbmVkIGVuZCgpIGNvbnN0IHsgcmV0
dXJuIHN0YXJ0KCkgKyBsZW5ndGgoKTsgfQorICAgICAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25z
dCB7IHJldHVybiBtX2xlbmd0aDsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgdW5zaWduZWQg
bV9zdGFydDsKKyAgICAgICAgdW5zaWduZWQgbV9sZW5ndGg7CisgICAgfTsKKworICAgIFJ1bihC
b3g6OlJlY3QgbG9naWNhbFJlY3QsIE9wdGlvbmFsPFRleHRDb250ZXh0Pik7CisgICAgUnVuKGNv
bnN0IFJ1biYpOworCisgICAgTGF5b3V0UG9pbnQgbG9naWNhbFRvcExlZnQoKSBjb25zdCB7IHJl
dHVybiBtX2xvZ2ljYWxSZWN0LnRvcExlZnQoKTsgfQorICAgIExheW91dFVuaXQgbG9naWNhbExl
ZnQoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxSZWN0LmxlZnQoKTsgfQorICAgIExheW91dFVu
aXQgbG9naWNhbFJpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsUmVjdC5yaWdodCgpOyB9
CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9wKCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsUmVj
dC50b3AoKTsgfQorICAgIExheW91dFVuaXQgbG9naWNhbEJvdHRvbSgpIGNvbnN0IHsgcmV0dXJu
IG1fbG9naWNhbFJlY3QuYm90dG9tKCk7IH0KKworICAgIExheW91dFVuaXQgbG9naWNhbFdpZHRo
KCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsUmVjdC53aWR0aCgpOyB9CisgICAgTGF5b3V0VW5p
dCBsb2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsUmVjdC5oZWlnaHQoKTsg
fQorCisgICAgdm9pZCBzZXRMb2dpY2FsV2lkdGgoTGF5b3V0VW5pdCB3aWR0aCkgeyBtX2xvZ2lj
YWxSZWN0LnNldFdpZHRoKHdpZHRoKTsgfQorICAgIHZvaWQgc2V0TG9naWNhbExlZnQoTGF5b3V0
VW5pdCBsb2dpY2FsTGVmdCkgeyBtX2xvZ2ljYWxSZWN0LnNldExlZnQobG9naWNhbExlZnQpOyB9
CisgICAgdm9pZCBzZXRMb2dpY2FsUmlnaHQoTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHQpIHsgbV9s
b2dpY2FsUmVjdC5zaGlmdFJpZ2h0VG8obG9naWNhbFJpZ2h0KTsgfQorICAgIHZvaWQgbW92ZVZl
cnRpY2FsbHkoTGF5b3V0VW5pdCBkZWx0YSkgeyBtX2xvZ2ljYWxSZWN0Lm1vdmVWZXJ0aWNhbGx5
KGRlbHRhKTsgfQorICAgIHZvaWQgbW92ZUhvcml6b250YWxseShMYXlvdXRVbml0IGRlbHRhKSB7
IG1fbG9naWNhbFJlY3QubW92ZUhvcml6b250YWxseShkZWx0YSk7IH0KKyAgICB2b2lkIGV4cGFu
ZFZlcnRpY2FsbHkoTGF5b3V0VW5pdCBkZWx0YSkgeyBtX2xvZ2ljYWxSZWN0LmV4cGFuZCgwLCBk
ZWx0YSk7IH0KKyAgICB2b2lkIGV4cGFuZEhvcml6b250YWxseShMYXlvdXRVbml0IGRlbHRhKSB7
IG1fbG9naWNhbFJlY3QuZXhwYW5kKGRlbHRhLCAwKTsgfQorCisgICAgc3RydWN0IEV4cGFuc2lv
bk9wcG9ydHVuaXR5IHsKKyAgICAgICAgdW5zaWduZWQgY291bnQgeyAwIH07CisgICAgICAgIEV4
cGFuc2lvbkJlaGF2aW9yIGJlaGF2aW9yIHsgRm9yYmlkTGVhZGluZ0V4cGFuc2lvbiB8IEZvcmJp
ZFRyYWlsaW5nRXhwYW5zaW9uIH07CisgICAgICAgIExheW91dFVuaXQgZXhwYW5zaW9uOworICAg
IH07CisgICAgRXhwYW5zaW9uT3Bwb3J0dW5pdHkmIGV4cGFuc2lvbk9wcG9ydHVuaXR5KCkgeyBy
ZXR1cm4gbV9leHBhbnNpb25PcHBvcnR1bml0eTsgfQorCisgICAgdm9pZCBzZXRUZXh0Q29udGV4
dChUZXh0Q29udGV4dCB0ZXh0Q29udGV4dCkgeyBtX3RleHRDb250ZXh0LmVtcGxhY2UodGV4dENv
bnRleHQpOyB9CisgICAgT3B0aW9uYWw8VGV4dENvbnRleHQ+JiB0ZXh0Q29udGV4dCgpIHsgcmV0
dXJuIG1fdGV4dENvbnRleHQ7IH0KKyAgICBPcHRpb25hbDxUZXh0Q29udGV4dD4gdGV4dENvbnRl
eHQoKSBjb25zdCB7IHJldHVybiBtX3RleHRDb250ZXh0OyB9CisKK3ByaXZhdGU6CisgICAgQm94
OjpSZWN0IG1fbG9naWNhbFJlY3Q7CisgICAgRXhwYW5zaW9uT3Bwb3J0dW5pdHkgbV9leHBhbnNp
b25PcHBvcnR1bml0eTsKKyAgICBPcHRpb25hbDxUZXh0Q29udGV4dD4gbV90ZXh0Q29udGV4dDsK
K307CisKK2lubGluZSBSdW46OlJ1bihCb3g6OlJlY3QgbG9naWNhbFJlY3QsIE9wdGlvbmFsPFRl
eHRDb250ZXh0PiB0ZXh0Q29udGV4dCkKKyAgICA6IG1fbG9naWNhbFJlY3QobG9naWNhbFJlY3Qp
CisgICAgLCBtX3RleHRDb250ZXh0KHRleHRDb250ZXh0KQoreworfQorCitpbmxpbmUgUnVuOjpU
ZXh0Q29udGV4dDo6VGV4dENvbnRleHQodW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCkK
KyAgICA6IG1fc3RhcnQoc3RhcnQpCisgICAgLCBtX2xlbmd0aChsZW5ndGgpCit7Cit9CisKK2lu
bGluZSBSdW46OlJ1bihjb25zdCBSdW4mIG90aGVyKQoreworICAgIG1fbG9naWNhbFJlY3QgPSBv
dGhlci5tX2xvZ2ljYWxSZWN0OworICAgIG1fZXhwYW5zaW9uT3Bwb3J0dW5pdHkgPSBvdGhlci5t
X2V4cGFuc2lvbk9wcG9ydHVuaXR5OworICAgIG1fdGV4dENvbnRleHQgPSBvdGhlci5tX3RleHRD
b250ZXh0OworfQorCit9Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0
LmNwcAppbmRleCBlM2MxNTM2ZGNkMzJhMWVmZWQ4MTI4ZDMzMmIxMThlMjhiZGQ5ZTcyLi4zMzY2
ODQ5OTA5N2RkNmQ2ZGEzMGYwYmRkNDg4NTAzNTBlMTY1YWZlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9y
bWF0dGluZ0NvbnRleHQuY3BwCkBAIC0zMCw3ICszMCw3IEBACiAKICNpbmNsdWRlICJJbmxpbmVG
b3JtYXR0aW5nU3RhdGUuaCIKICNpbmNsdWRlICJJbmxpbmVMaW5lQnJlYWtlci5oIgotI2luY2x1
ZGUgIklubGluZVJ1blByb3ZpZGVyLmgiCisjaW5jbHVkZSAiSW5saW5lVGV4dEl0ZW0uaCIKICNp
bmNsdWRlICJMYXlvdXRCb3guaCIKICNpbmNsdWRlICJMYXlvdXRDb250YWluZXIuaCIKICNpbmNs
dWRlICJMYXlvdXRJbmxpbmVCb3guaCIKQEAgLTc5LDE2ICs3OSwyMCBAQCB2b2lkIElubGluZUZv
cm1hdHRpbmdDb250ZXh0OjpsYXlvdXQoKSBjb25zdAogICAgICAgICAgICAgbGF5b3V0Rm9ybWF0
dGluZ0NvbnRleHRSb290KCpsYXlvdXRCb3gsIHVzZWRWYWx1ZXMpOwogICAgICAgICBlbHNlIGlm
IChpczxDb250YWluZXI+KCpsYXlvdXRCb3gpKSB7CiAgICAgICAgICAgICBhdXRvJiBpbmxpbmVD
b250YWluZXIgPSBkb3duY2FzdDxJbmxpbmVDb250YWluZXI+KCpsYXlvdXRCb3gpOwotICAgICAg
ICAgICAgY29tcHV0ZU1hcmdpbihpbmxpbmVDb250YWluZXIsIHVzZWRWYWx1ZXMpOworICAgICAg
ICAgICAgY29tcHV0ZUhvcml6b250YWxNYXJnaW4oaW5saW5lQ29udGFpbmVyLCB1c2VkVmFsdWVz
KTsKICAgICAgICAgICAgIGNvbXB1dGVCb3JkZXJBbmRQYWRkaW5nKGlubGluZUNvbnRhaW5lciwg
dXNlZFZhbHVlcyk7CisgICAgICAgICAgICBpbml0aWFsaXplVmVydGljYWxNYXJnaW5Gb3JJbmxp
bmVDb250YWluZXIoaW5saW5lQ29udGFpbmVyKTsKICAgICAgICAgfSBlbHNlIGlmIChsYXlvdXRC
b3gtPmlzUmVwbGFjZWQoKSkKICAgICAgICAgICAgIGNvbXB1dGVXaWR0aEFuZEhlaWdodEZvclJl
cGxhY2VkSW5saW5lQm94KCpsYXlvdXRCb3gsIHVzZWRWYWx1ZXMpOwogICAgICAgICBsYXlvdXRC
b3ggPSBuZXh0SW5QcmVPcmRlcigqbGF5b3V0Qm94LCByb290KTsKICAgICB9CiAKLSAgICBJbmxp
bmVSdW5Qcm92aWRlciBpbmxpbmVSdW5Qcm92aWRlcjsKLSAgICBjb2xsZWN0SW5saW5lQ29udGVu
dChpbmxpbmVSdW5Qcm92aWRlcik7Ci0gICAgTGluZUxheW91dCgqdGhpcykubGF5b3V0KGlubGlu
ZVJ1blByb3ZpZGVyKTsKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBzdWNoIGEgd2FzdGUgd2hlbiBp
bnRyaW5zaWMgd2lkdGggY29tcHV0YXRpb24gYWxyZWFkeSBjb2xsZWN0ZWQgdGhlIGlubGluZSBp
dGVtcy4KKyAgICBmb3JtYXR0aW5nU3RhdGUoKS5pbmxpbmVJdGVtcygpLmNsZWFyKCk7CisgICAg
Zm9ybWF0dGluZ1N0YXRlKCkuaW5saW5lUnVucygpLmNsZWFyKCk7CisKKyAgICBjb2xsZWN0SW5s
aW5lQ29udGVudCgpOworICAgIExpbmVMYXlvdXQoKnRoaXMpLmxheW91dCgpOwogICAgIExPR19X
SVRIX1NUUkVBTShGb3JtYXR0aW5nQ29udGV4dExheW91dCwgc3RyZWFtIDw8ICJbRW5kXSAtPiBp
bmxpbmUgZm9ybWF0dGluZyBjb250ZXh0IC0+IGZvcm1hdHRpbmcgcm9vdCgiIDw8ICZyb290IDw8
ICIpIik7CiB9CiAKQEAgLTEyMCwzMyArMTI0LDM0IEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQ6OmNvbXB1dGVJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKCkgY29uc3QKICAgICAgICAg
ICAgICAgICBjb21wdXRlV2lkdGhBbmRNYXJnaW4oKmxheW91dEJveCwgdXNlZFZhbHVlcyk7CiAg
ICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBTaW1wbGUgaW5saW5lIGNvbnRh
aW5lciB3aXRoIG5vIGludHJpbnNpYyB3aWR0aCA8c3Bhbj4uCi0gICAgICAgICAgICAgICAgY29t
cHV0ZU1hcmdpbigqbGF5b3V0Qm94LCB1c2VkVmFsdWVzKTsKKyAgICAgICAgICAgICAgICBjb21w
dXRlSG9yaXpvbnRhbE1hcmdpbigqbGF5b3V0Qm94LCB1c2VkVmFsdWVzKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgICAgICBsYXlvdXRCb3ggPSBuZXh0SW5QcmVPcmRlcigqbGF5b3V0
Qm94LCByb290KTsKICAgICB9CiAKLSAgICBJbmxpbmVSdW5Qcm92aWRlciBpbmxpbmVSdW5Qcm92
aWRlcjsKLSAgICBjb2xsZWN0SW5saW5lQ29udGVudChpbmxpbmVSdW5Qcm92aWRlcik7CisgICAg
Y29sbGVjdElubGluZUNvbnRlbnQoKTsKIAogICAgIGF1dG8gbWF4aW11bUxpbmVXaWR0aCA9IFsm
XShhdXRvIGF2YWlsYWJsZVdpZHRoKSB7Ci0gICAgICAgIExheW91dFVuaXQgbWF4Q29udGVudExv
Z2ljYWxSaWdodDsKLSAgICAgICAgYXV0byBsaW5lQnJlYWtlciA9IElubGluZUxpbmVCcmVha2Vy
IHsgbGF5b3V0U3RhdGUsIGZvcm1hdHRpbmdTdGF0ZSgpLmlubGluZUNvbnRlbnQoKSwgaW5saW5l
UnVuUHJvdmlkZXIucnVucygpIH07Ci0gICAgICAgIExheW91dFVuaXQgbGluZUxvZ2ljYWxSaWdo
dDsKLQogICAgICAgICAvLyBTd2l0Y2ggdG8gdGhlIG1pbi9tYXggZm9ybWF0dGluZyByb290IHdp
ZHRoIHZhbHVlcyBiZWZvcmUgZm9ybWF0dGluZyB0aGUgbGluZXMuCiAgICAgICAgIGZvciAoYXV0
byogZm9ybWF0dGluZ1Jvb3QgOiBmb3JtYXR0aW5nQ29udGV4dFJvb3RMaXN0KSB7CiAgICAgICAg
ICAgICBhdXRvIGludHJpbnNpY1dpZHRocyA9IGxheW91dFN0YXRlLmZvcm1hdHRpbmdTdGF0ZUZv
ckJveCgqZm9ybWF0dGluZ1Jvb3QpLmludHJpbnNpY1dpZHRoQ29uc3RyYWludHMoKmZvcm1hdHRp
bmdSb290KTsKICAgICAgICAgICAgIGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3go
KmZvcm1hdHRpbmdSb290KS5zZXRDb250ZW50Qm94V2lkdGgoYXZhaWxhYmxlV2lkdGggPyBpbnRy
aW5zaWNXaWR0aHMtPm1heGltdW0gOiBpbnRyaW5zaWNXaWR0aHMtPm1pbmltdW0pOwogICAgICAg
ICB9CisgICAgICAgIExheW91dFVuaXQgbWF4Q29udGVudExvZ2ljYWxSaWdodDsKKyAgICAgICAg
TGF5b3V0VW5pdCBsaW5lTG9naWNhbFJpZ2h0OwogCi0gICAgICAgIHdoaWxlIChhdXRvIHJ1biA9
IGxpbmVCcmVha2VyLm5leHRSdW4obGluZUxvZ2ljYWxSaWdodCwgYXZhaWxhYmxlV2lkdGgsICFs
aW5lTG9naWNhbFJpZ2h0KSkgewotICAgICAgICAgICAgaWYgKHJ1bi0+cG9zaXRpb24gPT0gSW5s
aW5lTGluZUJyZWFrZXI6OlJ1bjo6UG9zaXRpb246OkxpbmVCZWdpbikKKyAgICAgICAgTGluZUJy
ZWFrZXIgbGluZUJyZWFrZXIobGF5b3V0U3RhdGUpOworICAgICAgICBhdXRvJiBpbmxpbmVDb250
ZW50ID0gZm9ybWF0dGluZ1N0YXRlKCkuaW5saW5lSXRlbXMoKTsKKyAgICAgICAgZm9yIChhdXRv
JiBpbmxpbmVJdGVtIDogaW5saW5lQ29udGVudCkgeworICAgICAgICAgICAgYXV0byBicmVha2lu
Z0NvbnRleHQgPSBsaW5lQnJlYWtlci5icmVha2luZ0NvbnRleHQoKmlubGluZUl0ZW0sIHsgYXZh
aWxhYmxlV2lkdGgsIGxpbmVMb2dpY2FsUmlnaHQsICFsaW5lTG9naWNhbFJpZ2h0IH0pOworICAg
ICAgICAgICAgaWYgKGJyZWFraW5nQ29udGV4dC5icmVha2luZ0JlaGF2aW9yID09IExpbmVCcmVh
a2VyOjpCcmVha2luZ0JlaGF2aW9yOjpXcmFwKQogICAgICAgICAgICAgICAgIGxpbmVMb2dpY2Fs
UmlnaHQgPSAwOwotICAgICAgICAgICAgbGluZUxvZ2ljYWxSaWdodCArPSBydW4tPndpZHRoOwor
ICAgICAgICAgICAgbGluZUxvZ2ljYWxSaWdodCArPSBpbmxpbmVJdGVtLT53aWR0aCgpOwogCiAg
ICAgICAgICAgICBtYXhDb250ZW50TG9naWNhbFJpZ2h0ID0gc3RkOjptYXgobWF4Q29udGVudExv
Z2ljYWxSaWdodCwgbGluZUxvZ2ljYWxSaWdodCk7CiAgICAgICAgIH0KKwogICAgICAgICByZXR1
cm4gbWF4Q29udGVudExvZ2ljYWxSaWdodDsKICAgICB9OwogCkBAIC0xNjEsNyArMTY2LDcgQEAg
dm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUludHJpbnNpY1dpZHRoRm9yRmxv
YXRCb3goY29uc3QgQm94JiBsYXlvdXQKIAogICAgIGF1dG8gdXNlZEhvcml6b250YWxWYWx1ZXMg
PSBVc2VkSG9yaXpvbnRhbFZhbHVlcyB7IH07CiAgICAgY29tcHV0ZUJvcmRlckFuZFBhZGRpbmco
bGF5b3V0Qm94LCB1c2VkSG9yaXpvbnRhbFZhbHVlcyk7Ci0gICAgY29tcHV0ZU1hcmdpbihsYXlv
dXRCb3gsIHVzZWRIb3Jpem9udGFsVmFsdWVzKTsKKyAgICBjb21wdXRlSG9yaXpvbnRhbE1hcmdp
bihsYXlvdXRCb3gsIHVzZWRIb3Jpem9udGFsVmFsdWVzKTsKICAgICBsYXlvdXRTdGF0ZS5jcmVh
dGVGb3JtYXR0aW5nQ29udGV4dChsYXlvdXRCb3gpLT5jb21wdXRlSW50cmluc2ljV2lkdGhDb25z
dHJhaW50cygpOwogCiAgICAgYXV0byB1c2VkVmVydGljYWxWYWx1ZXMgPSBVc2VkVmVydGljYWxW
YWx1ZXMgeyB9OwpAQCAtMTc4LDExICsxODMsMTYgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dDo6Y29tcHV0ZUludHJpbnNpY1dpZHRoRm9ySW5saW5lQmxvY2soY29uc3QgQm94JiBsYXkK
IAogICAgIGF1dG8gdXNlZFZhbHVlcyA9IFVzZWRIb3Jpem9udGFsVmFsdWVzIHsgfTsKICAgICBj
b21wdXRlQm9yZGVyQW5kUGFkZGluZyhsYXlvdXRCb3gsIHVzZWRWYWx1ZXMpOwotICAgIGNvbXB1
dGVNYXJnaW4obGF5b3V0Qm94LCB1c2VkVmFsdWVzKTsKKyAgICBjb21wdXRlSG9yaXpvbnRhbE1h
cmdpbihsYXlvdXRCb3gsIHVzZWRWYWx1ZXMpOwogICAgIGxheW91dFN0YXRlKCkuY3JlYXRlRm9y
bWF0dGluZ0NvbnRleHQobGF5b3V0Qm94KS0+Y29tcHV0ZUludHJpbnNpY1dpZHRoQ29uc3RyYWlu
dHMoKTsKIH0KIAotdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZU1hcmdpbihj
b25zdCBCb3gmIGxheW91dEJveCwgVXNlZEhvcml6b250YWxWYWx1ZXMgdXNlZFZhbHVlcykgY29u
c3QKK3ZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmluaXRpYWxpemVWZXJ0aWNhbE1hcmdp
bkZvcklubGluZUNvbnRhaW5lcihjb25zdCBCb3gmIGxheW91dEJveCkgY29uc3QKK3sKKyAgICBs
YXlvdXRTdGF0ZSgpLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KS5zZXRWZXJ0aWNh
bE1hcmdpbih7IH0pOworfQorCit2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRl
SG9yaXpvbnRhbE1hcmdpbihjb25zdCBCb3gmIGxheW91dEJveCwgVXNlZEhvcml6b250YWxWYWx1
ZXMgdXNlZFZhbHVlcykgY29uc3QKIHsKICAgICBhdXRvIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdp
biA9IEdlb21ldHJ5Ojpjb21wdXRlZEhvcml6b250YWxNYXJnaW4obGF5b3V0Qm94LCB1c2VkVmFs
dWVzKTsKICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUoKS5kaXNwbGF5Qm94Rm9y
TGF5b3V0Qm94KGxheW91dEJveCk7CkBAIC0yNTYsMzEgKzI2Niw3IEBAIHZvaWQgSW5saW5lRm9y
bWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVXaWR0aEFuZEhlaWdodEZvclJlcGxhY2VkSW5saW5lQm94
KGNvbnN0IEJvCiAgICAgY29tcHV0ZUhlaWdodEFuZE1hcmdpbihsYXlvdXRCb3gpOwogfQogCi1z
dGF0aWMgdm9pZCBhZGREZXRhY2hpbmdSdWxlcyhJbmxpbmVJdGVtJiBpbmxpbmVJdGVtLCBPcHRp
b25hbDxMYXlvdXRVbml0PiBub25CcmVha2FibGVTdGFydFdpZHRoLCBPcHRpb25hbDxMYXlvdXRV
bml0PiBub25CcmVha2FibGVFbmRXaWR0aCkKLXsKLSAgICBPcHRpb25TZXQ8SW5saW5lSXRlbTo6
RGV0YWNoaW5nUnVsZT4gZGV0YWNoaW5nUnVsZXM7Ci0gICAgaWYgKG5vbkJyZWFrYWJsZVN0YXJ0
V2lkdGgpIHsKLSAgICAgICAgZGV0YWNoaW5nUnVsZXMuYWRkKElubGluZUl0ZW06OkRldGFjaGlu
Z1J1bGU6OkJyZWFrQXRTdGFydCk7Ci0gICAgICAgIGlubGluZUl0ZW0uYWRkTm9uQnJlYWthYmxl
U3RhcnQoKm5vbkJyZWFrYWJsZVN0YXJ0V2lkdGgpOwotICAgIH0KLSAgICBpZiAobm9uQnJlYWth
YmxlRW5kV2lkdGgpIHsKLSAgICAgICAgZGV0YWNoaW5nUnVsZXMuYWRkKElubGluZUl0ZW06OkRl
dGFjaGluZ1J1bGU6OkJyZWFrQXRFbmQpOwotICAgICAgICBpbmxpbmVJdGVtLmFkZE5vbkJyZWFr
YWJsZUVuZCgqbm9uQnJlYWthYmxlRW5kV2lkdGgpOwotICAgIH0KLSAgICBpbmxpbmVJdGVtLmFk
ZERldGFjaGluZ1J1bGUoZGV0YWNoaW5nUnVsZXMpOwotfQotCi1zdGF0aWMgSW5saW5lSXRlbSYg
Y3JlYXRlQW5kQXBwZW5kSW5saW5lSXRlbShJbmxpbmVSdW5Qcm92aWRlciYgaW5saW5lUnVuUHJv
dmlkZXIsIElubGluZUNvbnRlbnQmIGlubGluZUNvbnRlbnQsIGNvbnN0IEJveCYgbGF5b3V0Qm94
KQotewotICAgIEFTU0VSVChsYXlvdXRCb3guaXNJbmxpbmVMZXZlbEJveCgpIHx8IGxheW91dEJv
eC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpKTsKLSAgICBhdXRvIGlubGluZUl0ZW0gPSBzdGQ6Om1h
a2VfdW5pcXVlPElubGluZUl0ZW0+KGxheW91dEJveCk7Ci0gICAgYXV0byogaW5saW5lSXRlbVB0
ciA9IGlubGluZUl0ZW0uZ2V0KCk7Ci0gICAgaW5saW5lQ29udGVudC5hZGQoV1RGTW92ZShpbmxp
bmVJdGVtKSk7Ci0gICAgaW5saW5lUnVuUHJvdmlkZXIuYXBwZW5kKCppbmxpbmVJdGVtUHRyKTsK
LSAgICByZXR1cm4gKmlubGluZUl0ZW1QdHI7Ci19Ci0KLXZvaWQgSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQ6OmNvbGxlY3RJbmxpbmVDb250ZW50KElubGluZVJ1blByb3ZpZGVyJiBpbmxpbmVSdW5Q
cm92aWRlcikgY29uc3QKK3ZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbGxlY3RJbmxp
bmVDb250ZW50KCkgY29uc3QKIHsKICAgICBpZiAoIWlzPENvbnRhaW5lcj4ocm9vdCgpKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMjg4LDU2ICsyNzQsMjAgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5n
Q29udGV4dDo6Y29sbGVjdElubGluZUNvbnRlbnQoSW5saW5lUnVuUHJvdmlkZXImIGlubGluZVJ1
blAKICAgICBpZiAoIXJvb3QuaGFzSW5GbG93T3JGbG9hdGluZ0NoaWxkKCkpCiAgICAgICAgIHJl
dHVybjsKICAgICAvLyBUaGUgbG9naWMgaGVyZSBpcyB2ZXJ5IHNpbWlsYXIgdG8gQkZDIGxheW91
dC4KLSAgICAvLyAxLiBUcmF2ZXJzIGRvd24gdGhlIGxheW91dCB0cmVlIGFuZCBjb2xsZWN0ICJz
dGFydCIgdW5icmVha2FibGUgd2lkdGhzIChtYXJnaW4tbGVmdCwgYm9yZGVyLWxlZnQsIHBhZGRp
bmctbGVmdCkKLSAgICAvLyAyLiBDcmVhdGUgSW5saW5lSXRlbSBwZXIgbGVhZiBpbmxpbmUgYm94
ICh0ZXh0IG5vZGVzLCBpbmxpbmUtYmxvY2tzLCBmbG9hdHMpIGFuZCBzZXQgInN0YXJ0IiB1bmJy
ZWFrYWJsZSB3aWR0aCBvbiB0aGVtLiAKLSAgICAvLyAzLiBDbGltYiBiYWNrIGFuZCBjb2xsZWN0
ICJlbmQiIHVuYnJlYWthYmxlIHdpZHRoIGFuZCBzZXQgaXQgb24gdGhlIGxhc3QgSW5saW5lSXRl
bS4KLSAgICBhdXRvJiBsYXlvdXRTdGF0ZSA9IHRoaXMtPmxheW91dFN0YXRlKCk7Ci0gICAgYXV0
byYgaW5saW5lQ29udGVudCA9IGZvcm1hdHRpbmdTdGF0ZSgpLmlubGluZUNvbnRlbnQoKTsKLQot
ICAgIGVudW0gY2xhc3MgTm9uQnJlYWthYmxlV2lkdGhUeXBlIHsgU3RhcnQsIEVuZCB9OwotICAg
IGF1dG8gbm9uQnJlYWthYmxlV2lkdGggPSBbJl0oYXV0byYgY29udGFpbmVyLCBhdXRvIHR5cGUp
IHsKLSAgICAgICAgYXV0byYgZGlzcGxheUJveCA9IGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JM
YXlvdXRCb3goY29udGFpbmVyKTsKLSAgICAgICAgaWYgKHR5cGUgPT0gTm9uQnJlYWthYmxlV2lk
dGhUeXBlOjpTdGFydCkKLSAgICAgICAgICAgIHJldHVybiBkaXNwbGF5Qm94Lm1hcmdpblN0YXJ0
KCkgKyBkaXNwbGF5Qm94LmJvcmRlckxlZnQoKSArIGRpc3BsYXlCb3gucGFkZGluZ0xlZnQoKS52
YWx1ZU9yKDApOwotICAgICAgICByZXR1cm4gZGlzcGxheUJveC5tYXJnaW5FbmQoKSArIGRpc3Bs
YXlCb3guYm9yZGVyUmlnaHQoKSArIGRpc3BsYXlCb3gucGFkZGluZ1JpZ2h0KCkudmFsdWVPcigw
KTsKLSAgICB9OwotCisgICAgYXV0byYgZm9ybWF0dGluZ1N0YXRlID0gdGhpcy0+Zm9ybWF0dGlu
Z1N0YXRlKCk7CiAgICAgTGF5b3V0UXVldWUgbGF5b3V0UXVldWU7CiAgICAgbGF5b3V0UXVldWUu
YXBwZW5kKHJvb3QuZmlyc3RJbkZsb3dPckZsb2F0aW5nQ2hpbGQoKSk7Ci0KLSAgICBPcHRpb25h
bDxMYXlvdXRVbml0PiBub25CcmVha2FibGVTdGFydFdpZHRoOwotICAgIE9wdGlvbmFsPExheW91
dFVuaXQ+IG5vbkJyZWFrYWJsZUVuZFdpZHRoOwotICAgIElubGluZUl0ZW0qIGxhc3RJbmxpbmVJ
dGVtID0gbnVsbHB0cjsKICAgICB3aGlsZSAoIWxheW91dFF1ZXVlLmlzRW1wdHkoKSkgeworICAg
ICAgICBhdXRvIHRyZWF0QXNJbmxpbmVDb250YWluZXIgPSBbXShhdXRvJiBsYXlvdXRCb3gpIHsK
KyAgICAgICAgICAgIHJldHVybiBpczxDb250YWluZXI+KGxheW91dEJveCkgJiYgIWxheW91dEJv
eC5lc3RhYmxpc2hlc0Zvcm1hdHRpbmdDb250ZXh0KCk7CisgICAgICAgIH07CiAgICAgICAgIHdo
aWxlICh0cnVlKSB7CiAgICAgICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSAqbGF5b3V0UXVldWUu
bGFzdCgpOwotICAgICAgICAgICAgaWYgKCFpczxDb250YWluZXI+KGxheW91dEJveCkpCisgICAg
ICAgICAgICBpZiAoIXRyZWF0QXNJbmxpbmVDb250YWluZXIobGF5b3V0Qm94KSkKICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIHN0YXJ0IG9mIGFuIGlu
bGluZSBjb250YWluZXIgKGUuZy4gPHNwYW4+KS4KKyAgICAgICAgICAgIGZvcm1hdHRpbmdTdGF0
ZS5hZGRJbmxpbmVJdGVtKHN0ZDo6bWFrZV91bmlxdWU8SW5saW5lSXRlbT4obGF5b3V0Qm94LCBJ
bmxpbmVJdGVtOjpUeXBlOjpDb250YWluZXJTdGFydCkpOwogICAgICAgICAgICAgYXV0byYgY29u
dGFpbmVyID0gZG93bmNhc3Q8Q29udGFpbmVyPihsYXlvdXRCb3gpOwotCi0gICAgICAgICAgICBp
ZiAoY29udGFpbmVyLmVzdGFibGlzaGVzRm9ybWF0dGluZ0NvbnRleHQoKSkgewotICAgICAgICAg
ICAgICAgIC8vIEZvcm1hdHRpbmcgY29udGV4dHMgYXJlIHRyZWF0ZWQgYXMgbGVhZiBub2Rlcy4K
LSAgICAgICAgICAgICAgICBhdXRvJiBpbmxpbmVJdGVtID0gY3JlYXRlQW5kQXBwZW5kSW5saW5l
SXRlbShpbmxpbmVSdW5Qcm92aWRlciwgaW5saW5lQ29udGVudCwgY29udGFpbmVyKTsKLSAgICAg
ICAgICAgICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxh
eW91dEJveChjb250YWluZXIpOwotICAgICAgICAgICAgICAgIGF1dG8gY3VycmVudE5vbkJyZWFr
YWJsZVN0YXJ0V2lkdGggPSBub25CcmVha2FibGVTdGFydFdpZHRoLnZhbHVlT3IoMCkgKyBkaXNw
bGF5Qm94Lm1hcmdpblN0YXJ0KCkgKyBub25CcmVha2FibGVFbmRXaWR0aC52YWx1ZU9yKDApOwot
ICAgICAgICAgICAgICAgIGFkZERldGFjaGluZ1J1bGVzKGlubGluZUl0ZW0sIGN1cnJlbnROb25C
cmVha2FibGVTdGFydFdpZHRoLCBkaXNwbGF5Qm94Lm1hcmdpbkVuZCgpKTsKLSAgICAgICAgICAg
ICAgICBub25CcmVha2FibGVTdGFydFdpZHRoID0geyB9OwotICAgICAgICAgICAgICAgIG5vbkJy
ZWFrYWJsZUVuZFdpZHRoID0geyB9OwotCi0gICAgICAgICAgICAgICAgLy8gRm9ybWF0dGluZyBj
b250ZXh0IHJvb3RzIHRha2UgY2FyZSBvZiB0aGVpciBzdWJ0cmVlcy4gQ29udGludWUgd2l0aCBu
ZXh0IHNpYmxpbmcgaWYgZXhpc3RzLgotICAgICAgICAgICAgICAgIGxheW91dFF1ZXVlLnJlbW92
ZUxhc3QoKTsKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRhaW5lci5uZXh0SW5GbG93T3JGbG9h
dGluZ1NpYmxpbmcoKSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgbGF5b3V0UXVldWUuYXBwZW5kKGNvbnRhaW5lci5uZXh0SW5GbG93T3JGbG9hdGluZ1NpYmxp
bmcoKSk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIC8vIENoZWNrIGlmIHRoaXMgbm9uLWZvcm1hdHRpbmcgY29udGV4dCBjb250YWluZXIg
aGFzIGFueSBub24tYnJlYWthYmxlIHN0YXJ0IHByb3BlcnRpZXMgKG1hcmdpbi1sZWZ0LCBib3Jk
ZXItbGVmdCwgcGFkZGluZy1sZWZ0KQotICAgICAgICAgICAgLy8gPHNwYW4gc3R5bGU9InBhZGRp
bmctbGVmdDogNXB4Ij48c3BhbiBzdHlsZT0icGFkZGluZy1sZWZ0OiA1cHgiPmZvb2Jhcjwvc3Bh
bj48L3NwYW4+IC0+IDVweCArIDVweAotICAgICAgICAgICAgYXV0byBjdXJyZW50Tm9uQnJlYWth
YmxlU3RhcnRXaWR0aCA9IG5vbkJyZWFrYWJsZVdpZHRoKGxheW91dEJveCwgTm9uQnJlYWthYmxl
V2lkdGhUeXBlOjpTdGFydCk7Ci0gICAgICAgICAgICBpZiAoY3VycmVudE5vbkJyZWFrYWJsZVN0
YXJ0V2lkdGggfHwgbGF5b3V0Qm94LmlzUG9zaXRpb25lZCgpKQotICAgICAgICAgICAgICAgIG5v
bkJyZWFrYWJsZVN0YXJ0V2lkdGggPSBub25CcmVha2FibGVTdGFydFdpZHRoLnZhbHVlT3IoMCkg
KyBjdXJyZW50Tm9uQnJlYWthYmxlU3RhcnRXaWR0aDsKLQogICAgICAgICAgICAgaWYgKCFjb250
YWluZXIuaGFzSW5GbG93T3JGbG9hdGluZ0NoaWxkKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICBsYXlvdXRRdWV1ZS5hcHBlbmQoY29udGFpbmVyLmZpcnN0SW5GbG93T3JG
bG9hdGluZ0NoaWxkKCkpOwpAQCAtMzQ1LDI5ICsyOTUsMTkgQEAgdm9pZCBJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dDo6Y29sbGVjdElubGluZUNvbnRlbnQoSW5saW5lUnVuUHJvdmlkZXImIGlubGlu
ZVJ1blAKIAogICAgICAgICB3aGlsZSAoIWxheW91dFF1ZXVlLmlzRW1wdHkoKSkgewogICAgICAg
ICAgICAgYXV0byYgbGF5b3V0Qm94ID0gKmxheW91dFF1ZXVlLnRha2VMYXN0KCk7Ci0gICAgICAg
ICAgICBpZiAoaXM8Q29udGFpbmVyPihsYXlvdXRCb3gpKSB7Ci0gICAgICAgICAgICAgICAgLy8g
VGhpcyBpcyB0aGUgZW5kIG9mIGFuIGlubGluZSBjb250YWluZXIuIENvbXB1dGUgdGhlIG5vbi1i
cmVha2FibGUgZW5kIHdpZHRoIGFuZCBhZGQgaXQgdG8gdGhlIGxhc3QgaW5saW5lIGJveC4KLSAg
ICAgICAgICAgICAgICAvLyA8c3BhbiBzdHlsZT0icGFkZGluZy1yaWdodDogNXB4Ij5mb29iYXI8
L3NwYW4+IC0+IDVweDsgbGFzdCBpbmxpbmUgaXRlbSAtPiAiZm9vYmFyIgotICAgICAgICAgICAg
ICAgIGF1dG8gY3VycmVudE5vbkJyZWFrYWJsZUVuZFdpZHRoID0gbm9uQnJlYWthYmxlV2lkdGgo
bGF5b3V0Qm94LCBOb25CcmVha2FibGVXaWR0aFR5cGU6OkVuZCk7Ci0gICAgICAgICAgICAgICAg
aWYgKGN1cnJlbnROb25CcmVha2FibGVFbmRXaWR0aCB8fCBsYXlvdXRCb3guaXNQb3NpdGlvbmVk
KCkpCi0gICAgICAgICAgICAgICAgICAgIG5vbkJyZWFrYWJsZUVuZFdpZHRoID0gbm9uQnJlYWth
YmxlRW5kV2lkdGgudmFsdWVPcigwKSArIGN1cnJlbnROb25CcmVha2FibGVFbmRXaWR0aDsKLSAg
ICAgICAgICAgICAgICAvLyBBZGQgaXQgdG8gdGhlIGxhc3QgaW5saW5lIGJveAotICAgICAgICAg
ICAgICAgIGlmIChsYXN0SW5saW5lSXRlbSkgewotICAgICAgICAgICAgICAgICAgICBhZGREZXRh
Y2hpbmdSdWxlcygqbGFzdElubGluZUl0ZW0sIHsgfSwgbm9uQnJlYWthYmxlRW5kV2lkdGgpOwot
ICAgICAgICAgICAgICAgICAgICBub25CcmVha2FibGVFbmRXaWR0aCA9IHsgfTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIExlYWYg
aW5saW5lIGJveAotICAgICAgICAgICAgICAgIGF1dG8mIGlubGluZUl0ZW0gPSBjcmVhdGVBbmRB
cHBlbmRJbmxpbmVJdGVtKGlubGluZVJ1blByb3ZpZGVyLCBpbmxpbmVDb250ZW50LCBsYXlvdXRC
b3gpOwotICAgICAgICAgICAgICAgIC8vIEFkZCBzdGFydCBhbmQgdGhlICh0aHJvdWdoIGVtcHR5
IGNvbnRhaW5lcnMpIGFjY3VtdWxhdGVkIGVuZCB3aWR0aC4KLSAgICAgICAgICAgICAgICAvLyA8
c3BhbiBzdHlsZT0icGFkZGluZy1sZWZ0OiAxcHgiPmZvb2Jhcjwvc3Bhbj4gLT4gbm9uQnJlYWth
YmxlU3RhcnRXaWR0aDogMXB4OwotICAgICAgICAgICAgICAgIC8vIDxzcGFuIHN0eWxlPSJwYWRk
aW5nOiA1cHgiPjwvc3Bhbj5mb29iYXIgLT4gbm9uQnJlYWthYmxlU3RhcnRXaWR0aDogNXB4OyBu
b25CcmVha2FibGVFbmRXaWR0aDogNXB4Ci0gICAgICAgICAgICAgICAgaWYgKG5vbkJyZWFrYWJs
ZVN0YXJ0V2lkdGggfHwgbm9uQnJlYWthYmxlRW5kV2lkdGgpIHsKLSAgICAgICAgICAgICAgICAg
ICAgYWRkRGV0YWNoaW5nUnVsZXMoaW5saW5lSXRlbSwgbm9uQnJlYWthYmxlU3RhcnRXaWR0aC52
YWx1ZU9yKDApICsgbm9uQnJlYWthYmxlRW5kV2lkdGgudmFsdWVPcigwKSwgeyB9KTsKLSAgICAg
ICAgICAgICAgICAgICAgbm9uQnJlYWthYmxlU3RhcnRXaWR0aCA9IHsgfTsKLSAgICAgICAgICAg
ICAgICAgICAgbm9uQnJlYWthYmxlRW5kV2lkdGggPSB7IH07Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGxhc3RJbmxpbmVJdGVtID0gJmlubGluZUl0ZW07CisgICAgICAgICAg
ICAvLyBUaGlzIGlzIHRoZSBlbmQgb2YgYW4gaW5saW5lIGNvbnRhaW5lciAoZS5nLiA8L3NwYW4+
KS4KKyAgICAgICAgICAgIGlmICh0cmVhdEFzSW5saW5lQ29udGFpbmVyKGxheW91dEJveCkpCisg
ICAgICAgICAgICAgICAgZm9ybWF0dGluZ1N0YXRlLmFkZElubGluZUl0ZW0oc3RkOjptYWtlX3Vu
aXF1ZTxJbmxpbmVJdGVtPihsYXlvdXRCb3gsIElubGluZUl0ZW06OlR5cGU6OkNvbnRhaW5lckVu
ZCkpOworICAgICAgICAgICAgZWxzZSBpZiAoaXM8TGluZUJyZWFrQm94PihsYXlvdXRCb3gpKQor
ICAgICAgICAgICAgICAgIGZvcm1hdHRpbmdTdGF0ZS5hZGRJbmxpbmVJdGVtKHN0ZDo6bWFrZV91
bmlxdWU8SW5saW5lSXRlbT4obGF5b3V0Qm94LCBJbmxpbmVJdGVtOjpUeXBlOjpIYXJkTGluZUJy
ZWFrKSk7CisgICAgICAgICAgICBlbHNlIGlmIChsYXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9u
ZWQoKSkKKyAgICAgICAgICAgICAgICBmb3JtYXR0aW5nU3RhdGUuYWRkSW5saW5lSXRlbShzdGQ6
Om1ha2VfdW5pcXVlPElubGluZUl0ZW0+KGxheW91dEJveCwgSW5saW5lSXRlbTo6VHlwZTo6Rmxv
YXQpKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIEFTU0VSVChpczxJbmxp
bmVCb3g+KGxheW91dEJveCkgfHwgbGF5b3V0Qm94LmlzSW5saW5lQmxvY2tCb3goKSk7CisgICAg
ICAgICAgICAgICAgaWYgKGlzPElubGluZUJveD4obGF5b3V0Qm94KSAmJiBkb3duY2FzdDxJbmxp
bmVCb3g+KGxheW91dEJveCkuaGFzVGV4dENvbnRlbnQoKSkKKyAgICAgICAgICAgICAgICAgICAg
SW5saW5lVGV4dEl0ZW06OmNyZWF0ZUFuZEFwcGVuZFRleHRJdGVtcyhmb3JtYXR0aW5nU3RhdGUu
aW5saW5lSXRlbXMoKSwgZG93bmNhc3Q8SW5saW5lQm94PihsYXlvdXRCb3gpKTsKKyAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRpbmdTdGF0ZS5hZGRJbmxp
bmVJdGVtKHN0ZDo6bWFrZV91bmlxdWU8SW5saW5lSXRlbT4obGF5b3V0Qm94LCBJbmxpbmVJdGVt
OjpUeXBlOjpCb3gpKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGF1dG8qIG5l
eHRTaWJsaW5nID0gbGF5b3V0Qm94Lm5leHRJbkZsb3dPckZsb2F0aW5nU2libGluZygpKSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVG
b3JtYXR0aW5nQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRp
bmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaAppbmRleCBhNGZiMzE1ODRhZGY4YjgxZDhkNWM2
MWMzMzcyNjEyYjBkYTkzMjgxLi4yYzMwYjRlZTgyMjRhMzJkMTUzMDk1YjU1YTg3MDM5N2Y2OWVk
NDIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9J
bmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxp
bmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmgKQEAgLTMwLDcgKzMwLDYgQEAK
ICNpbmNsdWRlICJEaXNwbGF5Qm94LmgiCiAjaW5jbHVkZSAiRm9ybWF0dGluZ0NvbnRleHQuaCIK
ICNpbmNsdWRlICJJbmxpbmVGb3JtYXR0aW5nU3RhdGUuaCIKLSNpbmNsdWRlICJJbmxpbmVSdW4u
aCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAg
LTM4LDcgKzM3LDYgQEAgbmFtZXNwYWNlIExheW91dCB7CiAKIGNsYXNzIEZsb2F0aW5nU3RhdGU7
CiBjbGFzcyBJbmxpbmVDb250YWluZXI7Ci1jbGFzcyBJbmxpbmVSdW5Qcm92aWRlcjsKIGNsYXNz
IExpbmU7CiAKIC8vIFRoaXMgY2xhc3MgaW1wbGVtZW50cyB0aGUgbGF5b3V0IGxvZ2ljIGZvciBp
bmxpbmUgZm9ybWF0dGluZyBjb250ZXh0cy4KQEAgLTU1LDIxICs1MywxNiBAQCBwcml2YXRlOgog
ICAgIGNsYXNzIExpbmVMYXlvdXQgewogICAgIHB1YmxpYzoKICAgICAgICAgTGluZUxheW91dChj
b25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYpOwotICAgICAgICB2b2lkIGxheW91dChjb25z
dCBJbmxpbmVSdW5Qcm92aWRlciYpIGNvbnN0OworICAgICAgICB2b2lkIGxheW91dCgpIGNvbnN0
OwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgZW51bSBjbGFzcyBJc0xhc3RMaW5lIHsgTm8sIFll
cyB9OwogICAgICAgICB2b2lkIGluaXRpYWxpemVOZXdMaW5lKExpbmUmKSBjb25zdDsKICAgICAg
ICAgdm9pZCBjbG9zZUxpbmUoTGluZSYsIElzTGFzdExpbmUpIGNvbnN0OwotICAgICAgICB2b2lk
IGFwcGVuZENvbnRlbnRUb0xpbmUoTGluZSYsIGNvbnN0IElubGluZVJ1blByb3ZpZGVyOjpSdW4m
LCBjb25zdCBMYXlvdXRTaXplJikgY29uc3Q7Ci0gICAgICAgIHZvaWQgcG9zdFByb2Nlc3NJbmxp
bmVSdW5zKExpbmUmLCBJc0xhc3RMaW5lKSBjb25zdDsKLSAgICAgICAgdm9pZCBjcmVhdGVGaW5h
bFJ1bnMoTGluZSYpIGNvbnN0OwotICAgICAgICB2b2lkIHNwbGl0SW5saW5lUnVuSWZOZWVkZWQo
Y29uc3QgSW5saW5lUnVuJiwgSW5saW5lUnVucyYgc3BsaXRSdW5zKSBjb25zdDsKKyAgICAgICAg
dm9pZCBjb21taXRJbmxpbmVJdGVtVG9MaW5lKExpbmUmLCBjb25zdCBJbmxpbmVJdGVtJikgY29u
c3Q7CiAgICAgICAgIHZvaWQgY29tcHV0ZUZsb2F0UG9zaXRpb24oY29uc3QgRmxvYXRpbmdDb250
ZXh0JiwgTGluZSYsIGNvbnN0IEJveCYpIGNvbnN0OwotICAgICAgICB2b2lkIHBsYWNlSW5GbG93
UG9zaXRpb25lZENoaWxkcmVuKHVuc2lnbmVkIGZpcnN0UnVuSW5kZXgpIGNvbnN0OwogICAgICAg
ICB2b2lkIGFsaWduUnVucyhUZXh0QWxpZ25Nb2RlLCBMaW5lJiwgSXNMYXN0TGluZSkgY29uc3Q7
Ci0gICAgICAgIHZvaWQgY29tcHV0ZUV4cGFuc2lvbk9wcG9ydHVuaXRpZXMoTGluZSYsIGNvbnN0
IElubGluZVJ1blByb3ZpZGVyOjpSdW4mLCBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpUeXBlIGxh
c3RSdW5UeXBlKSBjb25zdDsKLSAgICAgICAgTGF5b3V0VW5pdCBydW5XaWR0aChjb25zdCBJbmxp
bmVDb250ZW50JiwgY29uc3QgSW5saW5lSXRlbSYsIEl0ZW1Qb3NpdGlvbiBmcm9tLCB1bnNpZ25l
ZCBsZW5ndGgsIExheW91dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0KSBjb25zdDsKKyAgICAgICAg
dm9pZCBjb21wdXRlRXhwYW5zaW9uT3Bwb3J0dW5pdGllcyhMaW5lJiwgY29uc3QgSW5saW5lSXRl
bSYsIGJvb2wgcHJldmlvdXNSdW5Jc1doaXRlcGFjZSkgY29uc3Q7CiAKICAgICBwcml2YXRlOgog
ICAgICAgICBzdGF0aWMgdm9pZCBqdXN0aWZ5UnVucyhMaW5lJik7CkBAIC05MSwxMSArODQsMTIg
QEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbXB1dGVJbnRyaW5zaWNXaWR0aEZvckZsb2F0Qm94KGNv
bnN0IEJveCYpIGNvbnN0OwogICAgIHZvaWQgY29tcHV0ZUludHJpbnNpY1dpZHRoRm9ySW5saW5l
QmxvY2soY29uc3QgQm94JikgY29uc3Q7CiAgICAgdm9pZCBjb21wdXRlV2lkdGhBbmRIZWlnaHRG
b3JSZXBsYWNlZElubGluZUJveChjb25zdCBCb3gmLCBVc2VkSG9yaXpvbnRhbFZhbHVlcykgY29u
c3Q7Ci0gICAgdm9pZCBjb21wdXRlTWFyZ2luKGNvbnN0IEJveCYsIFVzZWRIb3Jpem9udGFsVmFs
dWVzKSBjb25zdDsKKyAgICB2b2lkIGNvbXB1dGVIb3Jpem9udGFsTWFyZ2luKGNvbnN0IEJveCYs
IFVzZWRIb3Jpem9udGFsVmFsdWVzKSBjb25zdDsKICAgICB2b2lkIGNvbXB1dGVIZWlnaHRBbmRN
YXJnaW4oY29uc3QgQm94JikgY29uc3Q7CiAgICAgdm9pZCBjb21wdXRlV2lkdGhBbmRNYXJnaW4o
Y29uc3QgQm94JiwgVXNlZEhvcml6b250YWxWYWx1ZXMpIGNvbnN0OworICAgIHZvaWQgaW5pdGlh
bGl6ZVZlcnRpY2FsTWFyZ2luRm9ySW5saW5lQ29udGFpbmVyKGNvbnN0IEJveCYpIGNvbnN0Owog
Ci0gICAgdm9pZCBjb2xsZWN0SW5saW5lQ29udGVudChJbmxpbmVSdW5Qcm92aWRlciYpIGNvbnN0
OworICAgIHZvaWQgY29sbGVjdElubGluZUNvbnRlbnQoKSBjb25zdDsKIAogICAgIElubGluZUZv
cm1hdHRpbmdTdGF0ZSYgZm9ybWF0dGluZ1N0YXRlKCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8
SW5saW5lRm9ybWF0dGluZ1N0YXRlPihGb3JtYXR0aW5nQ29udGV4dDo6Zm9ybWF0dGluZ1N0YXRl
KCkpOyB9CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1h
dHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0TGluZUxh
eW91dC5jcHAKaW5kZXggN2IxM2FiMGI0ZWJjYmQyNTcxZmU2YzM2OGE4Zjc3MDE2ZmNhYTBlNC4u
NGI2YzRjODFlZmFhOGVlM2I1NzBhN2E1YzZjZmJjMWJkZTE3ZTNhMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRl
eHRMaW5lTGF5b3V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0
dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQuY3BwCkBAIC0zMiw3ICszMiw2
IEBACiAjaW5jbHVkZSAiRmxvYXRpbmdTdGF0ZS5oIgogI2luY2x1ZGUgIklubGluZUZvcm1hdHRp
bmdTdGF0ZS5oIgogI2luY2x1ZGUgIklubGluZUxpbmVCcmVha2VyLmgiCi0jaW5jbHVkZSAiSW5s
aW5lUnVuUHJvdmlkZXIuaCIKICNpbmNsdWRlICJMYXlvdXRCb3guaCIKICNpbmNsdWRlICJMYXlv
dXRDb250YWluZXIuaCIKICNpbmNsdWRlICJMYXlvdXRTdGF0ZS5oIgpAQCAtNDYsMzggKzQ1LDQy
IEBAIHB1YmxpYzoKICAgICB2b2lkIGluaXQoY29uc3QgTGF5b3V0UG9pbnQmIHRvcExlZnQsIExh
eW91dFVuaXQgYXZhaWxhYmxlV2lkdGgsIExheW91dFVuaXQgbWluaW1hbEhlaWdodCk7CiAgICAg
dm9pZCBjbG9zZSgpOwogCi0gICAgdm9pZCBhcHBlbmRDb250ZW50KGNvbnN0IElubGluZVJ1blBy
b3ZpZGVyOjpSdW4mLCBjb25zdCBMYXlvdXRTaXplJik7CisgICAgdm9pZCBhcHBlbmRUZXh0Q29u
dGVudChjb25zdCBJbmxpbmVUZXh0SXRlbSYsIExheW91dFNpemUpOworICAgIHZvaWQgYXBwZW5k
Tm9uVGV4dENvbnRlbnQoY29uc3QgSW5saW5lSXRlbSYsIExheW91dFNpemUsIFVzZWRIb3Jpem9u
dGFsTWFyZ2luKTsKKyAgICB2b2lkIGFwcGVuZE5vbkJyZWFrYWJsZVNwYWNlKGNvbnN0IElubGlu
ZUl0ZW0mKTsKIAotICAgIHZvaWQgYWRqdXN0TG9naWNhbExlZnQoTGF5b3V0VW5pdCBkZWx0YSk7
Ci0gICAgdm9pZCBhZGp1c3RMb2dpY2FsUmlnaHQoTGF5b3V0VW5pdCBkZWx0YSk7CisgICAgdm9p
ZCBhZGp1c3RMb2dpY2FsTGVmdChMYXlvdXRVbml0KTsKKyAgICB2b2lkIGFkanVzdExvZ2ljYWxS
aWdodChMYXlvdXRVbml0KTsKIAotICAgIGJvb2wgaGFzQ29udGVudCgpIGNvbnN0IHsgcmV0dXJu
ICFtX2lubGluZVJ1bnMuaXNFbXB0eSgpOyB9CisgICAgc3RydWN0IFJ1biB7CisgICAgICAgIERp
c3BsYXk6OlJ1biBpbmxpbmVSdW47CisgICAgICAgIGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0
ZW07CisgICAgfTsKKyAgICBWZWN0b3I8UnVuPiYgcnVucygpIHsgcmV0dXJuIG1fcnVuczsgfQor
CisgICAgYm9vbCBoYXNDb250ZW50KCkgY29uc3Q7CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Qg
eyByZXR1cm4gbV9ydW5zLmlzRW1wdHkoKTsgfQorICAgIExheW91dFVuaXQgdHJhaWxpbmdXaGl0
ZXNwYWNlV2lkdGgoKSBjb25zdDsKKyAgICBib29sIGhhc1RyYWlsaW5nV2hpdGVzcGFjZSgpIGNv
bnN0OwogICAgIGJvb2wgaXNDbG9zZWQoKSBjb25zdCB7IHJldHVybiBtX2Nsb3NlZDsgfQogICAg
IGJvb2wgaXNGaXJzdExpbmUoKSBjb25zdCB7IHJldHVybiBtX2lzRmlyc3RMaW5lOyB9Ci0gICAg
VmVjdG9yPElubGluZVJ1bj4mIHJ1bnMoKSB7IHJldHVybiBtX2lubGluZVJ1bnM7IH0KLQotICAg
IExheW91dFVuaXQgY29udGVudExvZ2ljYWxSaWdodCgpIGNvbnN0OwotICAgIExheW91dFVuaXQg
Y29udGVudExvZ2ljYWxMZWZ0KCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsUmVjdC5sZWZ0KCk7
IH0KLSAgICBMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9hdmFp
bGFibGVXaWR0aDsgfQotICAgIE9wdGlvbmFsPElubGluZVJ1blByb3ZpZGVyOjpSdW46OlR5cGU+
IGxhc3RSdW5UeXBlKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0UnVuVHlwZTsgfQogCisgICAgTGF5
b3V0VW5pdCBhdmFpbGFibGVXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZVdpZHRoIC0gbV9s
b2dpY2FsUmVjdC53aWR0aCgpOyB9CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9wKCkgY29uc3Qg
eyByZXR1cm4gbV9sb2dpY2FsUmVjdC50b3AoKTsgfQorICAgIExheW91dFVuaXQgbG9naWNhbExl
ZnQoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxSZWN0LmxlZnQoKTsgfQogICAgIExheW91dFVu
aXQgbG9naWNhbEJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFJlY3QuYm90dG9tKCk7
IH0KKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNh
bFJlY3QucmlnaHQoKTsgfQorCiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0KCkgY29uc3Qg
eyByZXR1cm4gbG9naWNhbEJvdHRvbSgpIC0gbG9naWNhbFRvcCgpOyB9CiAKIHByaXZhdGU6Ci0g
ICAgc3RydWN0IFRyYWlsaW5nVHJpbW1hYmxlQ29udGVudCB7Ci0gICAgICAgIExheW91dFVuaXQg
d2lkdGg7Ci0gICAgICAgIHVuc2lnbmVkIGxlbmd0aDsKLSAgICB9OwotICAgIE9wdGlvbmFsPFRy
YWlsaW5nVHJpbW1hYmxlQ29udGVudD4gbV90cmFpbGluZ1RyaW1tYWJsZUNvbnRlbnQ7Ci0gICAg
T3B0aW9uYWw8SW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6VHlwZT4gbV9sYXN0UnVuVHlwZTsKKyAg
ICB1bnNpZ25lZCBtX251bWJlck9mVHJpbW1hYmxlUnVucyB7IDAgfTsKICAgICBib29sIG1fbGFz
dFJ1bkNhbkV4cGFuZCB7IGZhbHNlIH07CiAKICAgICBEaXNwbGF5OjpCb3g6OlJlY3QgbV9sb2dp
Y2FsUmVjdDsKLSAgICBMYXlvdXRVbml0IG1fYXZhaWxhYmxlV2lkdGg7CisgICAgTGF5b3V0VW5p
dCBtX2xpbmVXaWR0aDsKIAotICAgIFZlY3RvcjxJbmxpbmVSdW4+IG1faW5saW5lUnVuczsKKyAg
ICBWZWN0b3I8UnVuPiBtX3J1bnM7CiAgICAgYm9vbCBtX2lzRmlyc3RMaW5lIHsgdHJ1ZSB9Owog
ICAgIGJvb2wgbV9jbG9zZWQgeyB0cnVlIH07CiB9OwpAQCAtODUsMTA3ICs4OCwxNzggQEAgcHJp
dmF0ZToKIHZvaWQgTGluZTo6aW5pdChjb25zdCBMYXlvdXRQb2ludCYgdG9wTGVmdCwgTGF5b3V0
VW5pdCBhdmFpbGFibGVXaWR0aCwgTGF5b3V0VW5pdCBtaW5pbWFsSGVpZ2h0KQogewogICAgIG1f
bG9naWNhbFJlY3Quc2V0VG9wTGVmdCh0b3BMZWZ0KTsKLSAgICBtX2xvZ2ljYWxSZWN0LnNldFdp
ZHRoKGF2YWlsYWJsZVdpZHRoKTsKKyAgICBtX2xvZ2ljYWxSZWN0LnNldFdpZHRoKDApOwogICAg
IG1fbG9naWNhbFJlY3Quc2V0SGVpZ2h0KG1pbmltYWxIZWlnaHQpOwotICAgIG1fYXZhaWxhYmxl
V2lkdGggPSBhdmFpbGFibGVXaWR0aDsKKyAgICBtX2xpbmVXaWR0aCA9IGF2YWlsYWJsZVdpZHRo
OwogCi0gICAgbV9pbmxpbmVSdW5zLmNsZWFyKCk7Ci0gICAgbV9sYXN0UnVuVHlwZSA9IHsgfTsK
KyAgICBtX3J1bnMuY2xlYXIoKTsKICAgICBtX2xhc3RSdW5DYW5FeHBhbmQgPSBmYWxzZTsKLSAg
ICBtX3RyYWlsaW5nVHJpbW1hYmxlQ29udGVudCA9IHsgfTsKKyAgICBtX251bWJlck9mVHJpbW1h
YmxlUnVucyA9IDA7CiAgICAgbV9jbG9zZWQgPSBmYWxzZTsKIH0KIAotdm9pZCBMaW5lOjphZGp1
c3RMb2dpY2FsTGVmdChMYXlvdXRVbml0IGRlbHRhKQordm9pZCBMaW5lOjpjbG9zZSgpCiB7Ci0g
ICAgQVNTRVJUKGRlbHRhID4gMCk7CisgICAgYXV0byB0cmltVHJhaWxpbmdDb250ZW50ID0gWyZd
IHsKKyAgICAgICAgQVNTRVJUKG1fcnVucy5zaXplKCkpOworICAgICAgICBhdXRvIGxhc3RSdW5J
bmRleCA9IG1fcnVucy5zaXplKCkgLSAxOworICAgICAgICB3aGlsZSAobV9udW1iZXJPZlRyaW1t
YWJsZVJ1bnMpIHsKKyAgICAgICAgICAgIGF1dG8mIGxhc3RSdW4gPSBtX3J1bnNbbGFzdFJ1bklu
ZGV4XTsKKyAgICAgICAgICAgIGlmIChsYXN0UnVuLmlubGluZUl0ZW0uaXNDb250YWluZXJTdGFy
dCgpIHx8IGxhc3RSdW4uaW5saW5lSXRlbS5pc0NvbnRhaW5lckVuZCgpKSB7CisgICAgICAgICAg
ICAgICAgLS1sYXN0UnVuSW5kZXg7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBtX2xvZ2ljYWxSZWN0LmV4cGFuZCgtbGFzdFJ1bi5pbmxpbmVS
dW4ubG9naWNhbFdpZHRoKCksIDApOworICAgICAgICAgICAgbV9ydW5zLnJlbW92ZShsYXN0UnVu
SW5kZXgpOworICAgICAgICAgICAgLS1tX251bWJlck9mVHJpbW1hYmxlUnVuczsKKyAgICAgICAg
ICAgIC0tbGFzdFJ1bkluZGV4OworICAgICAgICB9CisgICAgfTsKIAotICAgIG1fYXZhaWxhYmxl
V2lkdGggLT0gZGVsdGE7Ci0gICAgbV9sb2dpY2FsUmVjdC5zaGlmdExlZnRUbyhtX2xvZ2ljYWxS
ZWN0LmxlZnQoKSArIGRlbHRhKTsKKyAgICBpZiAoaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47
CiAKLSAgICBmb3IgKGF1dG8mIGlubGluZVJ1biA6IG1faW5saW5lUnVucykKLSAgICAgICAgaW5s
aW5lUnVuLm1vdmVIb3Jpem9udGFsbHkoZGVsdGEpOworICAgIHRyaW1UcmFpbGluZ0NvbnRlbnQo
KTsKKyAgICBtX2lzRmlyc3RMaW5lID0gZmFsc2U7CisgICAgbV9jbG9zZWQgPSB0cnVlOwogfQog
Ci12b2lkIExpbmU6OmFkanVzdExvZ2ljYWxSaWdodChMYXlvdXRVbml0IGRlbHRhKQorc3RhdGlj
IGJvb2wgaXNUcmltbWFibGVDb250ZW50KGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0pCiB7
Ci0gICAgQVNTRVJUKGRlbHRhID4gMCk7Ci0KLSAgICBtX2F2YWlsYWJsZVdpZHRoIC09IGRlbHRh
OwotICAgIG1fbG9naWNhbFJlY3Quc2hpZnRSaWdodFRvKG1fbG9naWNhbFJlY3QucmlnaHQoKSAt
IGRlbHRhKTsKKyAgICBpZiAoIWlzPElubGluZVRleHRJdGVtPihpbmxpbmVJdGVtKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8mIGlubGluZVRleHRJdGVtID0gZG93bmNhc3Q8SW5s
aW5lVGV4dEl0ZW0+KGlubGluZUl0ZW0pOworICAgIHJldHVybiBpbmxpbmVUZXh0SXRlbS5pc1do
aXRlc3BhY2UoKSAmJiBpbmxpbmVUZXh0SXRlbS5zdHlsZSgpLmNvbGxhcHNlV2hpdGVTcGFjZSgp
OwogfQogCi1zdGF0aWMgYm9vbCBpc1RyaW1tYWJsZUNvbnRlbnQoY29uc3QgSW5saW5lUnVuUHJv
dmlkZXI6OlJ1biYgaW5saW5lUnVuKQorYm9vbCBMaW5lOjpoYXNUcmFpbGluZ1doaXRlc3BhY2Uo
KSBjb25zdAogewotICAgIHJldHVybiBpbmxpbmVSdW4uaXNXaGl0ZXNwYWNlKCkgJiYgaW5saW5l
UnVuLnN0eWxlKCkuY29sbGFwc2VXaGl0ZVNwYWNlKCk7CisgICAgcmV0dXJuIG1fbnVtYmVyT2ZU
cmltbWFibGVSdW5zOwogfQogCi1MYXlvdXRVbml0IExpbmU6OmNvbnRlbnRMb2dpY2FsUmlnaHQo
KSBjb25zdAorTGF5b3V0VW5pdCBMaW5lOjp0cmFpbGluZ1doaXRlc3BhY2VXaWR0aCgpIGNvbnN0
CiB7Ci0gICAgaWYgKG1faW5saW5lUnVucy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBtX2xv
Z2ljYWxSZWN0LmxlZnQoKTsKKyAgICBpZiAoaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4geyB9
OworICAgIExheW91dFVuaXQgdHJpbW1hYmxlV2lkdGg7CisgICAgYXV0byBudW1iZXJPZlRyaW1t
YWJsZVJ1bnMgPSBtX251bWJlck9mVHJpbW1hYmxlUnVuczsKKyAgICBhdXRvIGxhc3RSdW5JbmRl
eCA9IG1fcnVucy5zaXplKCkgLSAxOworICAgIHdoaWxlIChudW1iZXJPZlRyaW1tYWJsZVJ1bnMp
IHsKKyAgICAgICAgYXV0byYgbGFzdFJ1biA9IG1fcnVuc1tsYXN0UnVuSW5kZXgtLV07CisgICAg
ICAgIGlmIChsYXN0UnVuLmlubGluZUl0ZW0uaXNDb250YWluZXJTdGFydCgpIHx8IGxhc3RSdW4u
aW5saW5lSXRlbS5pc0NvbnRhaW5lckVuZCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIHRyaW1tYWJsZVdpZHRoICs9IGxhc3RSdW4uaW5saW5lUnVuLmxvZ2ljYWxXaWR0aCgpOwor
ICAgICAgICAtLW51bWJlck9mVHJpbW1hYmxlUnVuczsKKyAgICB9CisgICAgcmV0dXJuIHRyaW1t
YWJsZVdpZHRoOworfQogCi0gICAgcmV0dXJuIG1faW5saW5lUnVucy5sYXN0KCkubG9naWNhbFJp
Z2h0KCk7Citib29sIExpbmU6Omhhc0NvbnRlbnQoKSBjb25zdAoreworICAgIGlmIChtX3J1bnMu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZm9yIChhdXRvJiBydW4gOiBt
X3J1bnMpIHsKKyAgICAgICAgaWYgKHJ1bi5pbmxpbmVJdGVtLmlzQ29udGFpbmVyU3RhcnQoKSB8
fCBydW4uaW5saW5lSXRlbS5pc0NvbnRhaW5lckVuZCgpKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIGlmIChydW4uaW5saW5lUnVuLmxvZ2ljYWxXaWR0aCgpKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBMaW5lOjph
cHBlbmRDb250ZW50KGNvbnN0IElubGluZVJ1blByb3ZpZGVyOjpSdW4mIHJ1biwgY29uc3QgTGF5
b3V0U2l6ZSYgcnVuU2l6ZSkKK3ZvaWQgTGluZTo6YXBwZW5kTm9uQnJlYWthYmxlU3BhY2UoY29u
c3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSkKIHsKICAgICBBU1NFUlQoIWlzQ2xvc2VkKCkpOwor
ICAgIC8vIEZJWE1FIGhlaWdodAorICAgIGF1dG8gbG9naWNhbFJlY3QgPSBEaXNwbGF5OjpCb3g6
OlJlY3QgeyBsb2dpY2FsVG9wKCksIGxvZ2ljYWxSaWdodCgpLCBpbmxpbmVJdGVtLndpZHRoKCks
IDAgfTsKKyAgICBtX3J1bnMuYXBwZW5kKHsgRGlzcGxheTo6UnVuIHsgbG9naWNhbFJlY3QsIHsg
fX0sIGlubGluZUl0ZW0gfSk7CisgICAgbV9sb2dpY2FsUmVjdC5leHBhbmQoaW5saW5lSXRlbS53
aWR0aCgpLCAwKTsKKyAgICBtX2xhc3RSdW5DYW5FeHBhbmQgPSBmYWxzZTsKK30KIAotICAgIC8v
IEFwcGVuZCB0aGlzIHRleHQgcnVuIHRvIHRoZSBlbmQgb2YgdGhlIGxhc3QgdGV4dCBydW4sIGlm
IHRoZSBsYXN0IHJ1biBpcyBjb250aW51b3VzLgotICAgIE9wdGlvbmFsPElubGluZVJ1bjo6VGV4
dENvbnRleHQ+IHRleHRSdW47Ci0gICAgaWYgKHJ1bi5pc1RleHQoKSkgewotICAgICAgICBhdXRv
IHRleHRDb250ZXh0ID0gcnVuLnRleHRDb250ZXh0KCk7Ci0gICAgICAgIGF1dG8gcnVuTGVuZ3Ro
ID0gdGV4dENvbnRleHQtPmlzQ29sbGFwc2VkKCkgPyAxIDogdGV4dENvbnRleHQtPmxlbmd0aCgp
OwotICAgICAgICB0ZXh0UnVuID0gSW5saW5lUnVuOjpUZXh0Q29udGV4dCB7IHRleHRDb250ZXh0
LT5zdGFydCgpLCBydW5MZW5ndGggfTsKLSAgICB9Cit2b2lkIExpbmU6OmFwcGVuZFRleHRDb250
ZW50KGNvbnN0IElubGluZVRleHRJdGVtJiBpbmxpbmVJdGVtLCBMYXlvdXRTaXplIHJ1blNpemUp
Cit7CisgICAgYXV0byBpc1RyaW1tYWJsZSA9IGlzVHJpbW1hYmxlQ29udGVudChpbmxpbmVJdGVt
KTsKKworICAgIGF1dG8gc2hvdWxkQ29sbGFwc2UgPSBbJl0oKSB7CisgICAgICAgIGlmICghaXNU
cmltbWFibGUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIC8vIFNraXAgbGVh
ZGluZyB3aGl0ZXNwYWNlLgorICAgICAgICBpZiAoIWhhc0NvbnRlbnQoKSkKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICAvLyBDaGVjayBpZiB0aGUgcHJldmlvdXMgcnVuIGlzIGEg
d2hpdGVzcGFjZSBhbmQgd2hldGhlciB3ZSBjYW4gY29sbGFwc2UgdGhpcyBjdXJyZW50IHJ1bi4K
KyAgICAgICAgQVNTRVJUKCFtX3J1bnMuaXNFbXB0eSgpKTsKKyAgICAgICAgYXV0byBjdXJyZW50
SW5kZXggPSBtX3J1bnMuc2l6ZSgpIC0gMTsKKyAgICAgICAgd2hpbGUgKGN1cnJlbnRJbmRleCkg
eworICAgICAgICAgICAgYXV0byYgY3VycmVudEl0ZW0gPSBtX3J1bnNbY3VycmVudEluZGV4XS5p
bmxpbmVJdGVtOworICAgICAgICAgICAgaWYgKGN1cnJlbnRJdGVtLmlzQ29udGFpbmVyU3RhcnQo
KSB8fCBjdXJyZW50SXRlbS5pc0NvbnRhaW5lckVuZCgpKSB7CisgICAgICAgICAgICAgICAgLS1j
dXJyZW50SW5kZXg7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAoIWN1cnJlbnRJdGVtLmlzVGV4dCgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIC8vIENvbGxhcHNlZCB3aGl0ZXNwYWNlCisgICAgICAg
ICAgICBpZiAoaXNUcmltbWFibGVDb250ZW50KGRvd25jYXN0PElubGluZVRleHRJdGVtPihjdXJy
ZW50SXRlbSkpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9OworCisg
ICAgaWYgKHNob3VsZENvbGxhcHNlKCkpCisgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gcmVx
dWlyZXNOZXdJbmxpbmVSdW4gPSAhaGFzQ29udGVudCgpIHx8ICFydW4uaXNUZXh0KCkgfHwgIW1f
bGFzdFJ1bkNhbkV4cGFuZDsKLSAgICBpZiAocmVxdWlyZXNOZXdJbmxpbmVSdW4pIHsKLSAgICAg
ICAgLy8gRklYTUU6IFRoaXMgbmVlZHMgcHJvcGVyIGJhc2VsaW5lIGhhbmRsaW5nCi0gICAgICAg
IGF1dG8gaW5saW5lUnVuID0gSW5saW5lUnVuIHsgeyBsb2dpY2FsVG9wKCksIGNvbnRlbnRMb2dp
Y2FsUmlnaHQoKSwgcnVuU2l6ZS53aWR0aCgpLCBydW5TaXplLmhlaWdodCgpIH0sIHJ1bi5pbmxp
bmVJdGVtKCkgfTsKLSAgICAgICAgaWYgKHRleHRSdW4pCi0gICAgICAgICAgICBpbmxpbmVSdW4u
c2V0VGV4dENvbnRleHQoeyB0ZXh0UnVuLT5zdGFydCgpLCB0ZXh0UnVuLT5sZW5ndGgoKSB9KTsK
LSAgICAgICAgbV9pbmxpbmVSdW5zLmFwcGVuZChpbmxpbmVSdW4pOworICAgIEFTU0VSVCghaXND
bG9zZWQoKSk7CisgICAgbV9sYXN0UnVuQ2FuRXhwYW5kID0gIWlubGluZUl0ZW0uaXNDb2xsYXBz
ZWQoKTsKKyAgICBtX251bWJlck9mVHJpbW1hYmxlUnVucyA9IGlzVHJpbW1hYmxlID8gbV9udW1i
ZXJPZlRyaW1tYWJsZVJ1bnMgKyAxIDogMDsgCisgICAgYXV0byBydW5MZW5ndGggPSBpbmxpbmVJ
dGVtLmlzQ29sbGFwc2VkKCkgPyAxIDogaW5saW5lSXRlbS5sZW5ndGgoKTsKKworICAgIGF1dG8g
cmVxdWlyZXNOZXdSdW4gPSBpc0VtcHR5KCkgfHwgIW1fbGFzdFJ1bkNhbkV4cGFuZCB8fCAmbV9y
dW5zLmxhc3QoKS5pbmxpbmVJdGVtICE9ICZpbmxpbmVJdGVtOworICAgIGlmIChyZXF1aXJlc05l
d1J1bikgeworICAgICAgICBhdXRvIGRpc3BsYXlSdW5Mb2dpY2FsUmVjdCA9IERpc3BsYXk6OkJv
eDo6UmVjdCB7IGxvZ2ljYWxUb3AoKSwgbG9naWNhbFJpZ2h0KCksIHJ1blNpemUud2lkdGgoKSwg
cnVuU2l6ZS5oZWlnaHQoKSB9OworICAgICAgICBhdXRvIHRleHRDb250ZXh0ID0gRGlzcGxheTo6
UnVuOjpUZXh0Q29udGV4dCB7IGlubGluZUl0ZW0uc3RhcnQoKSwgcnVuTGVuZ3RoIH07CisgICAg
ICAgIGF1dG8gZGlzcGxheVJ1biA9IERpc3BsYXk6OlJ1bihkaXNwbGF5UnVuTG9naWNhbFJlY3Qs
IHRleHRDb250ZXh0KTsKKyAgICAgICAgbV9ydW5zLmFwcGVuZCh7IGRpc3BsYXlSdW4sIGlubGlu
ZUl0ZW0gfSk7CiAgICAgICAgIG1fbG9naWNhbFJlY3Quc2V0SGVpZ2h0KHN0ZDo6bWF4KHJ1blNp
emUuaGVpZ2h0KCksIG1fbG9naWNhbFJlY3QuaGVpZ2h0KCkpKTsKLSAgICB9IGVsc2UgewotICAg
ICAgICAvLyBOb24tdGV4dCBydW5zIGFsd2F5cyByZXF1aXJlIG5ldyBpbmxpbmUgcnVuLgotICAg
ICAgICBBU1NFUlQodGV4dFJ1bik7Ci0gICAgICAgIGF1dG8mIGlubGluZVJ1biA9IG1faW5saW5l
UnVucy5sYXN0KCk7Ci0gICAgICAgIEFTU0VSVChydW5TaXplLmhlaWdodCgpID09IGlubGluZVJ1
bi5sb2dpY2FsSGVpZ2h0KCkpOwotICAgICAgICBpbmxpbmVSdW4uc2V0TG9naWNhbFdpZHRoKGlu
bGluZVJ1bi5sb2dpY2FsV2lkdGgoKSArIHJ1blNpemUud2lkdGgoKSk7Ci0gICAgICAgIGlubGlu
ZVJ1bi50ZXh0Q29udGV4dCgpLT5zZXRMZW5ndGgoaW5saW5lUnVuLnRleHRDb250ZXh0KCktPmxl
bmd0aCgpICsgdGV4dFJ1bi0+bGVuZ3RoKCkpOworICAgICAgICBtX2xvZ2ljYWxSZWN0LmV4cGFu
ZChydW5TaXplLndpZHRoKCksIDApOworICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9h
dmFpbGFibGVXaWR0aCAtPSBydW5TaXplLndpZHRoKCk7Ci0gICAgbV9sYXN0UnVuVHlwZSA9IHJ1
bi50eXBlKCk7Ci0gICAgbV9sYXN0UnVuQ2FuRXhwYW5kID0gcnVuLmlzVGV4dCgpICYmICFydW4u
dGV4dENvbnRleHQoKS0+aXNDb2xsYXBzZWQoKTsKLSAgICBtX3RyYWlsaW5nVHJpbW1hYmxlQ29u
dGVudCA9IHsgfTsKLSAgICBpZiAoaXNUcmltbWFibGVDb250ZW50KHJ1bikpCi0gICAgICAgIG1f
dHJhaWxpbmdUcmltbWFibGVDb250ZW50ID0gVHJhaWxpbmdUcmltbWFibGVDb250ZW50IHsgcnVu
U2l6ZS53aWR0aCgpLCB0ZXh0UnVuLT5sZW5ndGgoKSB9OworICAgIGF1dG8mIGxhc3RJbmxpbmVS
dW4gPSBtX3J1bnMubGFzdCgpLmlubGluZVJ1bjsKKyAgICBBU1NFUlQocnVuU2l6ZS5oZWlnaHQo
KSA9PSBsYXN0SW5saW5lUnVuLmxvZ2ljYWxIZWlnaHQoKSk7CisgICAgbGFzdElubGluZVJ1bi5l
eHBhbmRIb3Jpem9udGFsbHkocnVuU2l6ZS53aWR0aCgpKTsKKyAgICBsYXN0SW5saW5lUnVuLnRl
eHRDb250ZXh0KCktPnNldExlbmd0aChsYXN0SW5saW5lUnVuLnRleHRDb250ZXh0KCktPmxlbmd0
aCgpICsgcnVuTGVuZ3RoKTsKKyAgICBtX2xvZ2ljYWxSZWN0LmV4cGFuZChydW5TaXplLndpZHRo
KCksIDApOwogfQogCi12b2lkIExpbmU6OmNsb3NlKCkKK3ZvaWQgTGluZTo6YXBwZW5kTm9uVGV4
dENvbnRlbnQoY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSwgTGF5b3V0U2l6ZSBydW5TaXpl
LCBVc2VkSG9yaXpvbnRhbE1hcmdpbiBob3Jpem9udGFsTWFyZ2luKQogewotICAgIGF1dG8gdHJp
bVRyYWlsaW5nQ29udGVudCA9IFsmXSB7Ci0gICAgICAgIGlmICghbV90cmFpbGluZ1RyaW1tYWJs
ZUNvbnRlbnQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGF1dG8mIGxhc3RJbmxpbmVS
dW4gPSBtX2lubGluZVJ1bnMubGFzdCgpOwotICAgICAgICBsYXN0SW5saW5lUnVuLnNldExvZ2lj
YWxXaWR0aChsYXN0SW5saW5lUnVuLmxvZ2ljYWxXaWR0aCgpIC0gbV90cmFpbGluZ1RyaW1tYWJs
ZUNvbnRlbnQtPndpZHRoKTsKLSAgICAgICAgbGFzdElubGluZVJ1bi50ZXh0Q29udGV4dCgpLT5z
ZXRMZW5ndGgobGFzdElubGluZVJ1bi50ZXh0Q29udGV4dCgpLT5sZW5ndGgoKSAtIG1fdHJhaWxp
bmdUcmltbWFibGVDb250ZW50LT5sZW5ndGgpOwotCi0gICAgICAgIGlmICghbGFzdElubGluZVJ1
bi50ZXh0Q29udGV4dCgpLT5sZW5ndGgoKSkKLSAgICAgICAgICAgIG1faW5saW5lUnVucy5yZW1v
dmVMYXN0KCk7Ci0gICAgICAgIG1fYXZhaWxhYmxlV2lkdGggKz0gbV90cmFpbGluZ1RyaW1tYWJs
ZUNvbnRlbnQtPndpZHRoOwotICAgICAgICBtX3RyYWlsaW5nVHJpbW1hYmxlQ29udGVudCA9IHsg
fTsKLSAgICB9OworICAgIEFTU0VSVCghaXNDbG9zZWQoKSk7CisKKyAgICBhdXRvIGxvZ2ljYWxS
ZWN0ID0gRGlzcGxheTo6Qm94OjpSZWN0IHsgbG9naWNhbFRvcCgpLCBsb2dpY2FsUmlnaHQoKSAr
IGhvcml6b250YWxNYXJnaW4uc3RhcnQsIHJ1blNpemUud2lkdGgoKSwgcnVuU2l6ZS5oZWlnaHQo
KSB9OworICAgIG1fcnVucy5hcHBlbmQoeyBEaXNwbGF5OjpSdW4geyBsb2dpY2FsUmVjdCwgeyB9
fSwgaW5saW5lSXRlbSB9KTsKKyAgICBtX2xvZ2ljYWxSZWN0LnNldEhlaWdodChzdGQ6Om1heChy
dW5TaXplLmhlaWdodCgpLCBtX2xvZ2ljYWxSZWN0LmhlaWdodCgpKSk7CisgICAgbV9sb2dpY2Fs
UmVjdC5leHBhbmQocnVuU2l6ZS53aWR0aCgpICsgaG9yaXpvbnRhbE1hcmdpbi5zdGFydCArIGhv
cml6b250YWxNYXJnaW4uZW5kLCAwKTsKKworICAgIG1fbGFzdFJ1bkNhbkV4cGFuZCA9IGZhbHNl
OworICAgIG1fbnVtYmVyT2ZUcmltbWFibGVSdW5zID0gMDsKK30KIAotICAgIGlmICghaGFzQ29u
dGVudCgpKQordm9pZCBMaW5lOjphZGp1c3RMb2dpY2FsTGVmdChMYXlvdXRVbml0IGRlbHRhKQor
eworICAgIGlmICghZGVsdGEpCiAgICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQoZGVsdGEgPiAw
KTsKKyAgICBtX2xpbmVXaWR0aC09IGRlbHRhOworICAgIG1fbG9naWNhbFJlY3QubW92ZUhvcml6
b250YWxseShkZWx0YSk7CisgICAgZm9yIChhdXRvJiBydW4gOiBtX3J1bnMpCisgICAgICAgIHJ1
bi5pbmxpbmVSdW4ubW92ZUhvcml6b250YWxseShkZWx0YSk7Cit9CiAKLSAgICB0cmltVHJhaWxp
bmdDb250ZW50KCk7Ci0gICAgbV9pc0ZpcnN0TGluZSA9IGZhbHNlOwotICAgIG1fY2xvc2VkID0g
dHJ1ZTsKK3ZvaWQgTGluZTo6YWRqdXN0TG9naWNhbFJpZ2h0KExheW91dFVuaXQgZGVsdGEpCit7
CisgICAgQVNTRVJUKGRlbHRhID4gMCk7CisgICAgbV9saW5lV2lkdGgtPSBkZWx0YTsKIH0KIAog
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OkxpbmVMYXlvdXQoY29uc3QgSW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQmIGlubGluZUZvcm1hdHRpbmdDb250ZXh0KQpAQCAtMTk2LDY2
ICsyNzAsNjggQEAgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OkxpbmVMYXlv
dXQoY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIGkKIHsKIH0KIAotc3RhdGljIGJvb2wg
aXNUcmltbWFibGVDb250ZW50KGNvbnN0IElubGluZUxpbmVCcmVha2VyOjpSdW4mIHJ1bikKK3Zv
aWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OmxheW91dCgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIHJ1bi5jb250ZW50LmlzV2hpdGVzcGFjZSgpICYmIHJ1bi5jb250ZW50LnN0
eWxlKCkuY29sbGFwc2VXaGl0ZVNwYWNlKCk7Ci19Ci0KLXZvaWQgSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQ6OkxpbmVMYXlvdXQ6OmxheW91dChjb25zdCBJbmxpbmVSdW5Qcm92aWRlciYgaW5saW5l
UnVuUHJvdmlkZXIpIGNvbnN0Ci17Ci0gICAgYXV0byYgbGF5b3V0U3RhdGUgPSBtX2Zvcm1hdHRp
bmdDb250ZXh0LmxheW91dFN0YXRlKCk7CisgICAgYXV0byYgaW5saW5lQ29udGVudCA9IG1fZm9y
bWF0dGluZ1N0YXRlLmlubGluZUl0ZW1zKCk7CiAgICAgYXV0byBmbG9hdGluZ0NvbnRleHQgPSBG
bG9hdGluZ0NvbnRleHQgeyBtX2Zsb2F0aW5nU3RhdGUgfTsKIAogICAgIExpbmUgbGluZTsKICAg
ICBpbml0aWFsaXplTmV3TGluZShsaW5lKTsKKyAgICBWZWN0b3I8SW5saW5lSXRlbSo+IHVuY29t
bWl0dGVkSXRlbXM7CisgICAgTGF5b3V0VW5pdCB1bmNvbW1pdHRlZFdpZHRoID0gMDsKKworICAg
IGF1dG8gY29tbWl0UGVuZGluZ0NvbnRlbnQgPSBbJl0geworICAgICAgICBmb3IgKGF1dG8qIHVu
Y29tbWl0dGVkIDogdW5jb21taXR0ZWRJdGVtcykKKyAgICAgICAgICAgIGNvbW1pdElubGluZUl0
ZW1Ub0xpbmUobGluZSwgKnVuY29tbWl0dGVkKTsKKyAgICAgICAgdW5jb21taXR0ZWRJdGVtcy5j
bGVhcigpOworICAgICAgICB1bmNvbW1pdHRlZFdpZHRoID0gMDsKKyAgICB9OwogCi0gICAgSW5s
aW5lTGluZUJyZWFrZXIgbGluZUJyZWFrZXIobGF5b3V0U3RhdGUsIG1fZm9ybWF0dGluZ1N0YXRl
LmlubGluZUNvbnRlbnQoKSwgaW5saW5lUnVuUHJvdmlkZXIucnVucygpKTsKLSAgICB3aGlsZSAo
YXV0byBydW4gPSBsaW5lQnJlYWtlci5uZXh0UnVuKGxpbmUuY29udGVudExvZ2ljYWxSaWdodCgp
LCBsaW5lLmF2YWlsYWJsZVdpZHRoKCksICFsaW5lLmhhc0NvbnRlbnQoKSkpIHsKLSAgICAgICAg
YXV0byBpc0ZpcnN0UnVuID0gcnVuLT5wb3NpdGlvbiA9PSBJbmxpbmVMaW5lQnJlYWtlcjo6UnVu
OjpQb3NpdGlvbjo6TGluZUJlZ2luOwotICAgICAgICBhdXRvIGlzTGFzdFJ1biA9IHJ1bi0+cG9z
aXRpb24gPT0gSW5saW5lTGluZUJyZWFrZXI6OlJ1bjo6UG9zaXRpb246OkxpbmVFbmQ7Ci0gICAg
ICAgIGF1dG8gZ2VuZXJhdGVzSW5saW5lUnVuID0gdHJ1ZTsKKyAgICBMaW5lQnJlYWtlciBsaW5l
QnJlYWtlcihtX2Zvcm1hdHRpbmdDb250ZXh0LmxheW91dFN0YXRlKCkpOworICAgIGZvciAoYXV0
byYgaW5saW5lSXRlbSA6IGlubGluZUNvbnRlbnQpIHsKKyAgICAgICAgLy8gMS4gU2ltcGx5IGFk
ZCBub24tYnJlYWthYmxlIHNwYWNlcyB0byB0aGUgY3VycmVudCBsaW5lLiBUaGV5IGRvbid0IHdy
YXAuCisgICAgICAgIC8vIDIuIE5vcm1hbCBpbmxpbmUgYm94ZXMgZWl0aGVyIGdvIG9uIHRoZSBj
dXJyZW50IG9yIHdyYXAvYnJlYWsgdG8gdGhlIG5leHQgbGluZS4KKyAgICAgICAgLy8gMy4gRmxv
YXRzIGFyZSBzcGVjaWFsLiBUaGV5IGNvbnN0cmFpbiB0aGUgbGluZXMgaW5zdGVhZCBvZiBiZWlu
ZyBvbiB0aGVtLgorICAgICAgICBhdXRvIGF2YWlsYWJsZVdpZHRoID0gbGluZS5hdmFpbGFibGVX
aWR0aCgpIC0gdW5jb21taXR0ZWRXaWR0aDsKKyAgICAgICAgYXV0byBjdXJyZW50TG9naWNhbFJp
Z2h0ID0gbGluZS5sb2dpY2FsUmlnaHQoKSArIHVuY29tbWl0dGVkV2lkdGg7CisgICAgICAgIGF1
dG8gYnJlYWtpbmdDb250ZXh0ID0gbGluZUJyZWFrZXIuYnJlYWtpbmdDb250ZXh0KCppbmxpbmVJ
dGVtLCB7IGF2YWlsYWJsZVdpZHRoLCBjdXJyZW50TG9naWNhbFJpZ2h0LCBsaW5lLnRyYWlsaW5n
V2hpdGVzcGFjZVdpZHRoKCksICFsaW5lLmhhc0NvbnRlbnQoKSB9KTsKKyAgICAgICAgaWYgKGJy
ZWFraW5nQ29udGV4dC5pc0F0QnJlYWtpbmdPcHBvcnR1bml0eSkKKyAgICAgICAgICAgIGNvbW1p
dFBlbmRpbmdDb250ZW50KCk7CisKKyAgICAgICAgaWYgKGJyZWFraW5nQ29udGV4dC5icmVha2lu
Z0JlaGF2aW9yID09IExpbmVCcmVha2VyOjpCcmVha2luZ0JlaGF2aW9yOjpCcmVhaykgeworICAg
ICAgICAgICAgQVNTRVJUX05PVF9JTVBMRU1FTlRFRF9ZRVQoKTsKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICB9CiAKLSAgICAgICAgLy8gUG9zaXRpb24gZmxvYXQgYW5kIGFkanVzdCB0
aGUgcnVucyBvbiBsaW5lLgotICAgICAgICBpZiAocnVuLT5jb250ZW50LmlzRmxvYXQoKSkgewot
ICAgICAgICAgICAgYXV0byYgZmxvYXRCb3ggPSBydW4tPmNvbnRlbnQuaW5saW5lSXRlbSgpLmxh
eW91dEJveCgpOworICAgICAgICBpZiAoYnJlYWtpbmdDb250ZXh0LmJyZWFraW5nQmVoYXZpb3Ig
PT0gTGluZUJyZWFrZXI6OkJyZWFraW5nQmVoYXZpb3I6OldyYXApIHsKKyAgICAgICAgICAgIGNs
b3NlTGluZShsaW5lLCBJc0xhc3RMaW5lOjpObyk7CisgICAgICAgICAgICBpbml0aWFsaXplTmV3
TGluZShsaW5lKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpbmxpbmVJdGVtLT5pc0Zsb2F0
KCkpIHsKKyAgICAgICAgICAgIGF1dG8mIGZsb2F0Qm94ID0gaW5saW5lSXRlbS0+bGF5b3V0Qm94
KCk7CiAgICAgICAgICAgICBjb21wdXRlRmxvYXRQb3NpdGlvbihmbG9hdGluZ0NvbnRleHQsIGxp
bmUsIGZsb2F0Qm94KTsKICAgICAgICAgICAgIG1fZmxvYXRpbmdTdGF0ZS5hcHBlbmQoZmxvYXRC
b3gpOwotCi0gICAgICAgICAgICBhdXRvIGZsb2F0Qm94V2lkdGggPSBsYXlvdXRTdGF0ZS5kaXNw
bGF5Qm94Rm9yTGF5b3V0Qm94KGZsb2F0Qm94KS5tYXJnaW5Cb3goKS53aWR0aCgpOwogICAgICAg
ICAgICAgLy8gU2hyaW5rIGF2YWlsYmxlIHNwYWNlIGZvciBjdXJyZW50IGxpbmUgYW5kIG1vdmUg
ZXhpc3RpbmcgaW5saW5lIHJ1bnMuCisgICAgICAgICAgICBhdXRvIGZsb2F0Qm94V2lkdGggPSBp
bmxpbmVJdGVtLT53aWR0aCgpOwogICAgICAgICAgICAgZmxvYXRCb3guaXNMZWZ0RmxvYXRpbmdQ
b3NpdGlvbmVkKCkgPyBsaW5lLmFkanVzdExvZ2ljYWxMZWZ0KGZsb2F0Qm94V2lkdGgpIDogbGlu
ZS5hZGp1c3RMb2dpY2FsUmlnaHQoZmxvYXRCb3hXaWR0aCk7Ci0KLSAgICAgICAgICAgIGdlbmVy
YXRlc0lubGluZVJ1biA9IGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gMS4gSW5pdGlh
bGl6ZSBuZXcgbGluZSBpZiBuZWVkZWQuCi0gICAgICAgIC8vIDIuIEFwcGVuZCBpbmxpbmUgcnVu
IHVubGVzcyBpdCBpcyBza2lwcGVkLgotICAgICAgICAvLyAzLiBDbG9zZSBjdXJyZW50IGxpbmUg
aWYgbmVlZGVkLgotICAgICAgICBpZiAoaXNGaXJzdFJ1bikgewotICAgICAgICAgICAgLy8gV2hl
biB0aGUgZmlyc3QgcnVuIGRvZXMgbm90IGdlbmVyYXRlIGFuIGFjdHVhbCBpbmxpbmUgcnVuLCB0
aGUgbmV4dCBydW4gY29tZXMgaW4gZmlyc3QtcnVuIGFzIHdlbGwuCi0gICAgICAgICAgICAvLyBO
byBuZWVkIHRvIHNwZW5kIHRpbWUgb24gY2xvc2luZy9pbml0aWFsaXppbmcuCi0gICAgICAgICAg
ICAvLyBTa2lwIGxlYWRpbmcgd2hpdGVzcGFjZS4KLSAgICAgICAgICAgIGlmICghZ2VuZXJhdGVz
SW5saW5lUnVuIHx8IGlzVHJpbW1hYmxlQ29udGVudCgqcnVuKSkKLSAgICAgICAgICAgICAgICBj
b250aW51ZTsKLQotICAgICAgICAgICAgaWYgKGxpbmUuaGFzQ29udGVudCgpKSB7Ci0gICAgICAg
ICAgICAgICAgLy8gUHJldmlvdXMgcnVuIGVuZGVkIHVwIGJlaW5nIGF0IHRoZSBsaW5lIGVuZC4g
QWRqdXN0IHRoZSBsaW5lIGFjY29yZGluZ2x5LgotICAgICAgICAgICAgICAgIGlmICghbGluZS5p
c0Nsb3NlZCgpKQotICAgICAgICAgICAgICAgICAgICBjbG9zZUxpbmUobGluZSwgSXNMYXN0TGlu
ZTo6Tm8pOwotICAgICAgICAgICAgICAgIGluaXRpYWxpemVOZXdMaW5lKGxpbmUpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGJyZWFraW5nQ29udGV4dC5pc0F0QnJlYWtpbmdP
cHBvcnR1bml0eSkKKyAgICAgICAgICAgICAgICBjb21taXRJbmxpbmVJdGVtVG9MaW5lKGxpbmUs
ICppbmxpbmVJdGVtKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHVuY29t
bWl0dGVkSXRlbXMuYXBwZW5kKGlubGluZUl0ZW0uZ2V0KCkpOworICAgICAgICAgICAgICAgIHVu
Y29tbWl0dGVkV2lkdGggKz0gaW5saW5lSXRlbS0+d2lkdGgoKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQotCi0gICAgICAgIGlmIChnZW5lcmF0ZXNJbmxpbmVSdW4pIHsKLSAgICAgICAgICAg
IGF1dG8gd2lkdGggPSBydW4tPndpZHRoOwotICAgICAgICAgICAgYXV0byBoZWlnaHQgPSBydW4t
PmNvbnRlbnQuaXNUZXh0KCkgPyBMYXlvdXRVbml0KG1fZm9ybWF0dGluZ1Jvb3Quc3R5bGUoKS5j
b21wdXRlZExpbmVIZWlnaHQoKSkgOiBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94
KHJ1bi0+Y29udGVudC5pbmxpbmVJdGVtKCkubGF5b3V0Qm94KCkpLmhlaWdodCgpOyAKLSAgICAg
ICAgICAgIGFwcGVuZENvbnRlbnRUb0xpbmUobGluZSwgcnVuLT5jb250ZW50LCB7IHdpZHRoLCBo
ZWlnaHQgfSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaXNMYXN0UnVuKQorICAgIH0KKyAg
ICAvLyBQcm9jZXNzIHJlbWFpbmluZyB1bmNvbW1pdHRlZCBjb250ZW50LgorICAgIGlmICghdW5j
b21taXR0ZWRJdGVtcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKGxpbmUuYXZhaWxhYmxlV2lk
dGgoKSA8IHVuY29tbWl0dGVkV2lkdGgpIHsKICAgICAgICAgICAgIGNsb3NlTGluZShsaW5lLCBJ
c0xhc3RMaW5lOjpObyk7CisgICAgICAgICAgICBpbml0aWFsaXplTmV3TGluZShsaW5lKTsKKyAg
ICAgICAgfQorICAgICAgICBjb21taXRQZW5kaW5nQ29udGVudCgpOwogICAgIH0KLQogICAgIGNs
b3NlTGluZShsaW5lLCBJc0xhc3RMaW5lOjpZZXMpOwogfQogCkBAIC0yOTQsMTUyICszNzAsODIg
QEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6aW5pdGlhbGl6ZU5l
d0xpbmUoTGluZSYgbGluZSkgY29uc3QKICAgICBsaW5lLmluaXQoeyBsaW5lTG9naWNhbExlZnQs
IGxpbmVMb2dpY2FsVG9wIH0sIGF2YWlsYWJsZVdpZHRoLCBtX2Zvcm1hdHRpbmdSb290LnN0eWxl
KCkuY29tcHV0ZWRMaW5lSGVpZ2h0KCkpOwogfQogCi12b2lkIElubGluZUZvcm1hdHRpbmdDb250
ZXh0OjpMaW5lTGF5b3V0OjpzcGxpdElubGluZVJ1bklmTmVlZGVkKGNvbnN0IElubGluZVJ1biYg
aW5saW5lUnVuLCBJbmxpbmVSdW5zJiBzcGxpdFJ1bnMpIGNvbnN0Cit2b2lkIElubGluZUZvcm1h
dHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpjbG9zZUxpbmUoTGluZSYgbGluZSwgSXNMYXN0TGlu
ZSBpc0xhc3RMaW5lKSBjb25zdAogewotICAgIEFTU0VSVChpbmxpbmVSdW4udGV4dENvbnRleHQo
KSk7Ci0gICAgQVNTRVJUKGlubGluZVJ1bi5vdmVybGFwc011bHRpcGxlSW5saW5lSXRlbXMoKSk7
Ci0gICAgLy8gSW4gY2VydGFpbiBjYXNlcywgYSBydW4gY2FuIG92ZXJsYXAgbXVsdGlwbGUgaW5s
aW5lIGVsZW1lbnRzIGxpa2UgdGhpczoKLSAgICAvLyA8c3Bhbj5ub3JtYWwgdGV4dCBjb250ZW50
PC9zcGFuPjxzcGFuIHN0eWxlPSJwb3NpdGlvbjogcmVsYXRpdmU7IGxlZnQ6IDEwcHg7Ij5idXQg
dGhpcyBvbmUgbmVlZHMgYSBkZWRpY2F0ZWQgcnVuPC9zcGFuPjxzcGFuPmVuZCBvZiB0ZXh0PC9z
cGFuPgotICAgIC8vIFRoZSBjb250ZW50IGFib3ZlIGdlbmVyYXRlcyBvbmUgbG9uZyBydW4gPG5v
cm1hbCB0ZXh0IGNvbnRlbnRidXQgdGhpcyBvbmUgbmVlZHMgZGVkaWNhdGVkIHJ1bmVuZCBvZiB0
ZXh0PgotICAgIC8vIEhvd2V2ZXIsIHNpbmNlIHRoZSBtaWRkbGUgcnVuIGlzIHBvc2l0aW9uZWQs
IGl0IG5lZWRzIHRvIGJlIG1vdmVkIGluZGVwZW5kZW50bHkgZnJvbSB0aGUgcmVzdCBvZiB0aGUg
Y29udGVudCwgaGVuY2UgaXQgbmVlZHMgYSBkZWRpY2F0ZWQgaW5saW5lIHJ1bi4KLQotICAgIC8v
IDEuIFN0YXJ0IHdpdGggdGhlIGZpcnN0IGlubGluZSBpdGVtIChlbGVtZW50KSBhbmQgdHJhdmVy
cyB0aGUgbGlzdCB1bnRpbAotICAgIC8vIDIuIGVpdGhlciBmaW5kIGFuIGlubGluZSBpdGVtIHRo
YXQgbmVlZHMgYSBkZWRpY2F0ZWQgcnVuIG9yIHdlIHJlYWNoIHRoZSBlbmQgb2YgdGhlIHJ1bgot
ICAgIC8vIDMuIENyZWF0ZSBkZWRpY2F0ZSBpbmxpbmUgcnVucy4KLSAgICBhdXRvJiBpbmxpbmVD
b250ZW50ID0gbV9mb3JtYXR0aW5nU3RhdGUuaW5saW5lQ29udGVudCgpOwotICAgIGF1dG8gY29u
dGVudFN0YXJ0ID0gaW5saW5lUnVuLmxvZ2ljYWxMZWZ0KCk7Ci0gICAgYXV0byBzdGFydFBvc2l0
aW9uID0gaW5saW5lUnVuLnRleHRDb250ZXh0KCktPnN0YXJ0KCk7Ci0gICAgYXV0byByZW1hbmlu
Z0xlbmd0aCA9IGlubGluZVJ1bi50ZXh0Q29udGV4dCgpLT5sZW5ndGgoKTsKLQotICAgIHN0cnVj
dCBVbmNvbW1pdHRlZCB7Ci0gICAgICAgIGNvbnN0IElubGluZUl0ZW0qIGZpcnN0SW5saW5lSXRl
bSB7IG51bGxwdHIgfTsKLSAgICAgICAgY29uc3QgSW5saW5lSXRlbSogbGFzdElubGluZUl0ZW0g
eyBudWxscHRyIH07Ci0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCB7IDAgfTsKLSAgICB9OwotICAg
IE9wdGlvbmFsPFVuY29tbWl0dGVkPiB1bmNvbW1pdHRlZDsKLQotICAgIGF1dG8gY29tbWl0ID0g
WyZdIHsKLSAgICAgICAgaWYgKCF1bmNvbW1pdHRlZCkKLSAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICBjb250ZW50U3RhcnQgKz0gdW5jb21taXR0ZWQtPmZpcnN0SW5saW5lSXRlbS0+bm9u
QnJlYWthYmxlU3RhcnQoKTsKLQotICAgICAgICBhdXRvIHJ1bldpZHRoID0gdGhpcy0+cnVuV2lk
dGgoaW5saW5lQ29udGVudCwgKnVuY29tbWl0dGVkLT5maXJzdElubGluZUl0ZW0sIHN0YXJ0UG9z
aXRpb24sIHVuY29tbWl0dGVkLT5sZW5ndGgsIGNvbnRlbnRTdGFydCk7Ci0gICAgICAgIGF1dG8g
cnVuID0gSW5saW5lUnVuIHsgeyBpbmxpbmVSdW4ubG9naWNhbFRvcCgpLCBjb250ZW50U3RhcnQs
IHJ1bldpZHRoLCBpbmxpbmVSdW4ubG9naWNhbEhlaWdodCgpIH0sICp1bmNvbW1pdHRlZC0+Zmly
c3RJbmxpbmVJdGVtIH07Ci0gICAgICAgIHJ1bi5zZXRUZXh0Q29udGV4dCh7IHN0YXJ0UG9zaXRp
b24sIHVuY29tbWl0dGVkLT5sZW5ndGggfSk7Ci0gICAgICAgIHNwbGl0UnVucy5hcHBlbmQocnVu
KTsKLQotICAgICAgICBjb250ZW50U3RhcnQgKz0gcnVuV2lkdGggKyB1bmNvbW1pdHRlZC0+bGFz
dElubGluZUl0ZW0tPm5vbkJyZWFrYWJsZUVuZCgpOwotCi0gICAgICAgIHN0YXJ0UG9zaXRpb24g
PSAwOwotICAgICAgICB1bmNvbW1pdHRlZCA9IHsgfTsKLSAgICB9OwotCi0gICAgZm9yIChhdXRv
IGl0ZXJhdG9yID0gaW5saW5lQ29udGVudC5maW5kKGNvbnN0X2Nhc3Q8SW5saW5lSXRlbSo+KCZp
bmxpbmVSdW4uaW5saW5lSXRlbSgpKSk7IGl0ZXJhdG9yICE9IGlubGluZUNvbnRlbnQuZW5kKCkg
JiYgcmVtYW5pbmdMZW5ndGggPiAwOyArK2l0ZXJhdG9yKSB7Ci0gICAgICAgIGF1dG8mIGlubGlu
ZUl0ZW0gPSAqKml0ZXJhdG9yOworICAgIGxpbmUuY2xvc2UoKTsKKyAgICBpZiAobGluZS5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybjsKIAotICAgICAgICAvLyBTa2lwIGFsbCBub24taW5mbG93
IGJveGVzIChmbG9hdHMsIG91dC1vZi1mbG93IHBvc2l0aW9uZWQgZWxlbWVudHMpLiBUaGV5IGRv
bid0IHBhcnRpY2lwYXRlIGluIHRoZSBpbmxpbmUgcnVuIGNvbnRleHQuCi0gICAgICAgIGlmICgh
aW5saW5lSXRlbS5sYXlvdXRCb3goKS5pc0luRmxvdygpKQorICAgIGF1dG8mIGxheW91dFN0YXRl
ID0gbV9mb3JtYXR0aW5nQ29udGV4dC5sYXlvdXRTdGF0ZSgpOworICAgIGFsaWduUnVucyhtX2Zv
cm1hdHRpbmdSb290LnN0eWxlKCkudGV4dEFsaWduKCksIGxpbmUsIGlzTGFzdExpbmUpOworICAg
IAorICAgIGF1dG8mIHJ1bnMgPSBsaW5lLnJ1bnMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4
ID0gMDsgaW5kZXggPCBydW5zLnNpemUoKTsgKytpbmRleCkgeworICAgICAgICBhdXRvJiBydW4g
PSBydW5zLmF0KGluZGV4KTsKKyAgICAgICAgYXV0byYgbGF5b3V0Qm94ID0gcnVuLmlubGluZUl0
ZW0ubGF5b3V0Qm94KCk7CisgICAgICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBsYXlvdXRTdGF0ZS5k
aXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7CisKKyAgICAgICAgaWYgKHJ1bi5pbmxp
bmVJdGVtLmlzQ29udGFpbmVyU3RhcnQoKSB8fCBydW4uaW5saW5lSXRlbS5pc0JveCgpKSB7Cisg
ICAgICAgICAgICAvLyBTZXQgaW5saW5lIGNvbnRhaW5lcidzIGxvZ2ljYWwgdG9wbGVmdCBwb3Np
dGlvbiAtdGFraW5nIHJlbGF0aXZlIHBvc2l0aW9uaW5nIGludG8gYWNjb3VudC4KKyAgICAgICAg
ICAgIGF1dG8gdG9wTGVmdCA9IHJ1bi5pbmxpbmVSdW4ubG9naWNhbFRvcExlZnQoKTsKKyAgICAg
ICAgICAgIGlmIChsYXlvdXRCb3guaXNJbkZsb3dQb3NpdGlvbmVkKCkpCisgICAgICAgICAgICAg
ICAgdG9wTGVmdCArPSBHZW9tZXRyeTo6aW5GbG93UG9zaXRpb25lZFBvc2l0aW9uT2Zmc2V0KGxh
eW91dFN0YXRlLCBsYXlvdXRCb3gpOworICAgICAgICAgICAgZGlzcGxheUJveC5zZXRUb3BMZWZ0
KHRvcExlZnQpOworCisgICAgICAgICAgICBpZiAocnVuLmlubGluZUl0ZW0uaXNCb3goKSkKKyAg
ICAgICAgICAgICAgICBtX2Zvcm1hdHRpbmdTdGF0ZS5hZGRJbmxpbmVSdW4oc3RkOjptYWtlX3Vu
aXF1ZTxEaXNwbGF5OjpSdW4+KHJ1bi5pbmxpbmVSdW4pKTsKICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICB9CiAKLSAgICAgICAgYXV0byBjdXJyZW50TGVuZ3RoID0gWyZdIHsKLSAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om1pbihyZW1hbmluZ0xlbmd0aCwgaW5saW5lSXRlbS50ZXh0Q29u
dGVudCgpLmxlbmd0aCgpIC0gc3RhcnRQb3NpdGlvbik7Ci0gICAgICAgIH07Ci0KLSAgICAgICAg
Ly8gMS4gQnJlYWsgYmVmb3JlL2FmdGVyIC0+IHJlcXVpcmVzIGRlZGljYXRlZCBydW4gLT4gY29t
bWl0IHdoYXQgd2UndmUgZ290IHNvIGZhciBhbmQgYWxzbyBjb21taXQgdGhlIGN1cnJlbnQgaW5s
aW5lIGVsZW1lbnQgYXMgYSBzZXBhcmF0ZSBpbmxpbmUgcnVuLgotICAgICAgICAvLyAyLiBCcmVh
ayBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBpbmxpbmUgZWxlbWVudCAtPiBjb21taXQgd2hhdCB3
ZSd2ZSBnb3Qgc28gZmFyLiBDdXJyZW50IGVsZW1lbnQgYmVjb21lcyB0aGUgZmlyc3QgdW5jb21t
aXR0ZWQuCi0gICAgICAgIC8vIDMuIEJyZWFrIGF0IHRoZSBlbmQgb2YgdGhlIGlubGluZSBlbGVt
ZW50IC0+IGNvbW1pdCB3aGF0IHdlJ3ZlIGdvdCBzbyBmYXIgaW5jbHVkaW5nIHRoZSBjdXJyZW50
IGVsZW1lbnQuCi0gICAgICAgIC8vIDQuIElubGluZSBlbGVtZW50IGRvZXMgbm90IHJlcXVpcmUg
cnVuIGJyZWFraW5nIC0+IGFkZCBjdXJyZW50IGlubGluZSBlbGVtZW50IHRvIHVuY29tbWl0dGVk
LiBKdW1wIHRvIHRoZSBuZXh0IGVsZW1lbnQuCi0gICAgICAgIGF1dG8gZGV0YWNoaW5nUnVsZXMg
PSBpbmxpbmVJdGVtLmRldGFjaGluZ1J1bGVzKCk7Ci0KLSAgICAgICAgLy8gIzEKLSAgICAgICAg
aWYgKGRldGFjaGluZ1J1bGVzLmNvbnRhaW5zQWxsKHsgSW5saW5lSXRlbTo6RGV0YWNoaW5nUnVs
ZTo6QnJlYWtBdFN0YXJ0LCBJbmxpbmVJdGVtOjpEZXRhY2hpbmdSdWxlOjpCcmVha0F0RW5kIH0p
KSB7Ci0gICAgICAgICAgICBjb21taXQoKTsKLSAgICAgICAgICAgIGF1dG8gY29udGVudExlbmd0
aCA9IGN1cnJlbnRMZW5ndGgoKTsKLSAgICAgICAgICAgIHVuY29tbWl0dGVkID0gVW5jb21taXR0
ZWQgeyAmaW5saW5lSXRlbSwgJmlubGluZUl0ZW0sIGNvbnRlbnRMZW5ndGggfTsKLSAgICAgICAg
ICAgIHJlbWFuaW5nTGVuZ3RoIC09IGNvbnRlbnRMZW5ndGg7Ci0gICAgICAgICAgICBjb21taXQo
KTsKKyAgICAgICAgaWYgKHJ1bi5pbmxpbmVJdGVtLmlzQ29udGFpbmVyRW5kKCkpIHsKKyAgICAg
ICAgICAgIC8vIFNldCBpbmxpbmUgY29udGFpbmVyJ3Mgd2lkdGggYW5kIGhlaWdodC4KKyAgICAg
ICAgICAgIGF1dG8gbWFyZ2luQm94V2lkdGggPSBydW4uaW5saW5lUnVuLmxvZ2ljYWxMZWZ0KCkg
LSBkaXNwbGF5Qm94LmxlZnQoKTsKKyAgICAgICAgICAgIGF1dG8gY29udGVudEJveFdpZHRoID0g
bWFyZ2luQm94V2lkdGggLSAoZGlzcGxheUJveC5tYXJnaW5TdGFydCgpICsgZGlzcGxheUJveC5i
b3JkZXJMZWZ0KCkgKyBkaXNwbGF5Qm94LnBhZGRpbmdMZWZ0KCkudmFsdWVPcigwKSk7CisgICAg
ICAgICAgICAvLyBGSVhNRSBmaXggaXQgZm9yIG11bHRpbGluZS4KKyAgICAgICAgICAgIGRpc3Bs
YXlCb3guc2V0Q29udGVudEJveFdpZHRoKGNvbnRlbnRCb3hXaWR0aCk7CisgICAgICAgICAgICAv
LyBGSVhNRTogaGVpZ2h0CisgICAgICAgICAgICBkaXNwbGF5Qm94LnNldENvbnRlbnRCb3hIZWln
aHQobGluZS5sb2dpY2FsSGVpZ2h0KCkpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IH0KIAotICAgICAgICAvLyAjMgotICAgICAgICBpZiAoZGV0YWNoaW5nUnVsZXMuY29udGFpbnMo
SW5saW5lSXRlbTo6RGV0YWNoaW5nUnVsZTo6QnJlYWtBdFN0YXJ0KSkKLSAgICAgICAgICAgIGNv
bW1pdCgpOwotCi0gICAgICAgIC8vIEFkZCBjdXJyZW50IGlubGluZSBpdGVtIHRvIHVuY29tbWl0
dGVkLgotICAgICAgICAvLyAjMyBhbmQgIzQKLSAgICAgICAgYXV0byBjb250ZW50TGVuZ3RoID0g
Y3VycmVudExlbmd0aCgpOwotICAgICAgICBpZiAoIXVuY29tbWl0dGVkKQotICAgICAgICAgICAg
dW5jb21taXR0ZWQgPSBVbmNvbW1pdHRlZCB7ICZpbmxpbmVJdGVtLCAmaW5saW5lSXRlbSwgMCB9
OwotICAgICAgICB1bmNvbW1pdHRlZC0+bGVuZ3RoICs9IGNvbnRlbnRMZW5ndGg7Ci0gICAgICAg
IHVuY29tbWl0dGVkLT5sYXN0SW5saW5lSXRlbSA9ICZpbmxpbmVJdGVtOwotICAgICAgICByZW1h
bmluZ0xlbmd0aCAtPSBjb250ZW50TGVuZ3RoOwotCi0gICAgICAgIC8vICMzCi0gICAgICAgIGlm
IChkZXRhY2hpbmdSdWxlcy5jb250YWlucyhJbmxpbmVJdGVtOjpEZXRhY2hpbmdSdWxlOjpCcmVh
a0F0RW5kKSkKLSAgICAgICAgICAgIGNvbW1pdCgpOwotICAgIH0KLSAgICAvLyBFaXRoZXIgYWxs
IGlubGluZSBlbGVtZW50cyBuZWVkZWQgZGVkaWNhdGVkIHJ1bnMgb3IgbmVpdGhlciBvZiB0aGVt
LgotICAgIGlmICghcmVtYW5pbmdMZW5ndGggfHwgcmVtYW5pbmdMZW5ndGggPT0gaW5saW5lUnVu
LnRleHRDb250ZXh0KCktPmxlbmd0aCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjb21taXQo
KTsKLX0KKyAgICAgICAgaWYgKHJ1bi5pbmxpbmVJdGVtLmlzSGFyZExpbmVCcmVhaygpKQorICAg
ICAgICAgICAgY29udGludWU7CiAKLXZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVM
YXlvdXQ6OmNyZWF0ZUZpbmFsUnVucyhMaW5lJiBsaW5lKSBjb25zdAotewotICAgIGZvciAoYXV0
byYgaW5saW5lUnVuIDogbGluZS5ydW5zKCkpIHsKLSAgICAgICAgaWYgKGlubGluZVJ1bi5vdmVy
bGFwc011bHRpcGxlSW5saW5lSXRlbXMoKSkgewotICAgICAgICAgICAgSW5saW5lUnVucyBzcGxp
dFJ1bnM7Ci0gICAgICAgICAgICBzcGxpdElubGluZVJ1bklmTmVlZGVkKGlubGluZVJ1biwgc3Bs
aXRSdW5zKTsKLSAgICAgICAgICAgIGZvciAoYXV0byYgc3BsaXRSdW4gOiBzcGxpdFJ1bnMpCi0g
ICAgICAgICAgICAgICAgbV9mb3JtYXR0aW5nU3RhdGUuYXBwZW5kSW5saW5lUnVuKHNwbGl0UnVu
KTsKLQotICAgICAgICAgICAgaWYgKCFzcGxpdFJ1bnMuaXNFbXB0eSgpKQotICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICBBU1NFUlQocnVuLmlubGluZVJ1bi50ZXh0Q29udGV4dCgp
KTsKKyAgICAgICAgYXV0byYgaW5saW5lVGV4dEl0ZW0gPSBkb3duY2FzdDxJbmxpbmVUZXh0SXRl
bT4ocnVuLmlubGluZUl0ZW0pOworICAgICAgICBjb25zdCBJbmxpbmVJdGVtKiBwcmV2aW91c0lu
bGluZUl0ZW0gPSAhaW5kZXggPyBudWxscHRyIDogJnJ1bnNbaW5kZXggLSAxXS5pbmxpbmVJdGVt
OworICAgICAgICBhdXRvIHByZXZpb3VzUnVuSGFzQ29sbGFwc2VkV2hpdGVzcGFjZSA9IGZhbHNl
OworICAgICAgICBpZiAoaXM8SW5saW5lVGV4dEl0ZW0+KHByZXZpb3VzSW5saW5lSXRlbSkpCisg
ICAgICAgICAgICBwcmV2aW91c1J1bkhhc0NvbGxhcHNlZFdoaXRlc3BhY2UgPSBkb3duY2FzdDxJ
bmxpbmVUZXh0SXRlbT4oKnByZXZpb3VzSW5saW5lSXRlbSkuaXNDb2xsYXBzZWQoKTsKKworICAg
ICAgICBhdXRvIHJlcXVpcmVzTmV3UnVuID0gIWluZGV4IHx8ICZydW4uaW5saW5lSXRlbS5sYXlv
dXRCb3goKSAhPSAmcHJldmlvdXNJbmxpbmVJdGVtLT5sYXlvdXRCb3goKSB8fCBwcmV2aW91c1J1
bkhhc0NvbGxhcHNlZFdoaXRlc3BhY2U7CisgICAgICAgIGlmIChyZXF1aXJlc05ld1J1bikKKyAg
ICAgICAgICAgIG1fZm9ybWF0dGluZ1N0YXRlLmFkZElubGluZVJ1bihzdGQ6Om1ha2VfdW5pcXVl
PERpc3BsYXk6OlJ1bj4ocnVuLmlubGluZVJ1bikpOworICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIGF1dG8mIGxhc3REaXNwbGF5UnVuID0gbV9mb3JtYXR0aW5nU3RhdGUuaW5saW5lUnVucygp
Lmxhc3QoKTsKKyAgICAgICAgICAgIGxhc3REaXNwbGF5UnVuLT5leHBhbmRIb3Jpem9udGFsbHko
aW5saW5lVGV4dEl0ZW0ud2lkdGgoKSk7CisgICAgICAgICAgICBsYXN0RGlzcGxheVJ1bi0+dGV4
dENvbnRleHQoKS0+c2V0TGVuZ3RoKGxhc3REaXNwbGF5UnVuLT50ZXh0Q29udGV4dCgpLT5sZW5n
dGgoKSArIHJ1bi5pbmxpbmVSdW4udGV4dENvbnRleHQoKS0+bGVuZ3RoKCkpOwogICAgICAgICB9
Ci0KLSAgICAgICAgYXV0byBmaW5hbFJ1biA9IFsmXSB7Ci0gICAgICAgICAgICBhdXRvJiBpbmxp
bmVJdGVtID0gaW5saW5lUnVuLmlubGluZUl0ZW0oKTsKLSAgICAgICAgICAgIGlmIChpbmxpbmVJ
dGVtLmRldGFjaGluZ1J1bGVzKCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBp
bmxpbmVSdW47Ci0KLSAgICAgICAgICAgIElubGluZVJ1biBhZGp1c3RlZFJ1biA9IGlubGluZVJ1
bjsKLSAgICAgICAgICAgIGF1dG8gd2lkdGggPSBpbmxpbmVSdW4ubG9naWNhbFdpZHRoKCkgLSBp
bmxpbmVJdGVtLm5vbkJyZWFrYWJsZVN0YXJ0KCkgLSBpbmxpbmVJdGVtLm5vbkJyZWFrYWJsZUVu
ZCgpOwotICAgICAgICAgICAgYWRqdXN0ZWRSdW4uc2V0TG9naWNhbExlZnQoaW5saW5lUnVuLmxv
Z2ljYWxMZWZ0KCkgKyBpbmxpbmVJdGVtLm5vbkJyZWFrYWJsZVN0YXJ0KCkpOwotICAgICAgICAg
ICAgYWRqdXN0ZWRSdW4uc2V0TG9naWNhbFdpZHRoKHdpZHRoKTsKLSAgICAgICAgICAgIHJldHVy
biBhZGp1c3RlZFJ1bjsKLSAgICAgICAgfTsKLQotICAgICAgICBtX2Zvcm1hdHRpbmdTdGF0ZS5h
cHBlbmRJbmxpbmVSdW4oZmluYWxSdW4oKSk7CiAgICAgfQogfQogCi12b2lkIElubGluZUZvcm1h
dHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0Ojpwb3N0UHJvY2Vzc0lubGluZVJ1bnMoTGluZSYgbGlu
ZSwgSXNMYXN0TGluZSBpc0xhc3RMaW5lKSBjb25zdAotewotICAgIGFsaWduUnVucyhtX2Zvcm1h
dHRpbmdSb290LnN0eWxlKCkudGV4dEFsaWduKCksIGxpbmUsIGlzTGFzdExpbmUpOwotICAgIGF1
dG8gZmlyc3RSdW5JbmRleCA9IG1fZm9ybWF0dGluZ1N0YXRlLmlubGluZVJ1bnMoKS5zaXplKCk7
Ci0gICAgY3JlYXRlRmluYWxSdW5zKGxpbmUpOwotCi0gICAgcGxhY2VJbkZsb3dQb3NpdGlvbmVk
Q2hpbGRyZW4oZmlyc3RSdW5JbmRleCk7Ci19Ci0KLXZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQ6OkxpbmVMYXlvdXQ6OmNsb3NlTGluZShMaW5lJiBsaW5lLCBJc0xhc3RMaW5lIGlzTGFzdExp
bmUpIGNvbnN0Cit2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0Ojpjb21t
aXRJbmxpbmVJdGVtVG9MaW5lKExpbmUmIGxpbmUsIGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0
ZW0pIGNvbnN0CiB7Ci0gICAgbGluZS5jbG9zZSgpOwotICAgIGlmICghbGluZS5oYXNDb250ZW50
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHBvc3RQcm9jZXNzSW5saW5lUnVucyhsaW5lLCBp
c0xhc3RMaW5lKTsKLX0KLQotdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91
dDo6YXBwZW5kQ29udGVudFRvTGluZShMaW5lJiBsaW5lLCBjb25zdCBJbmxpbmVSdW5Qcm92aWRl
cjo6UnVuJiBydW4sIGNvbnN0IExheW91dFNpemUmIHJ1blNpemUpIGNvbnN0Ci17Ci0gICAgYXV0
byBsYXN0UnVuVHlwZSA9IGxpbmUubGFzdFJ1blR5cGUoKTsKLSAgICBsaW5lLmFwcGVuZENvbnRl
bnQocnVuLCBydW5TaXplKTsKKyAgICBhdXRvJiBsYXlvdXRCb3ggPSBpbmxpbmVJdGVtLmxheW91
dEJveCgpOworICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBtX2Zvcm1hdHRpbmdDb250ZXh0LmxheW91
dFN0YXRlKCkuZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpOworICAgIAorICAgIC8v
IEZJWE1FIHRoZXNlIDIgc2hvdWxkIGJlIGF0IGNsb3NlTGluZQorICAgIGlmIChpbmxpbmVJdGVt
LmlzQ29udGFpbmVyU3RhcnQoKSB8fCBpbmxpbmVJdGVtLmlzQ29udGFpbmVyRW5kKCkpCisgICAg
ICAgIHJldHVybiBsaW5lLmFwcGVuZE5vbkJyZWFrYWJsZVNwYWNlKGlubGluZUl0ZW0pOworCisg
ICAgYXV0byB3aWR0aCA9IGlubGluZUl0ZW0ud2lkdGgoKTsKKyAgICBpZiAoaXM8SW5saW5lVGV4
dEl0ZW0+KGlubGluZUl0ZW0pKQorICAgICAgICBsaW5lLmFwcGVuZFRleHRDb250ZW50KGRvd25j
YXN0PElubGluZVRleHRJdGVtPihpbmxpbmVJdGVtKSwgeyB3aWR0aCwgbV9mb3JtYXR0aW5nUm9v
dC5zdHlsZSgpLmNvbXB1dGVkTGluZUhlaWdodCgpIH0pOworICAgIGVsc2UKKyAgICAgICAgbGlu
ZS5hcHBlbmROb25UZXh0Q29udGVudChpbmxpbmVJdGVtLCB7IHdpZHRoLCBkaXNwbGF5Qm94Lmhl
aWdodCgpIH0sIGRpc3BsYXlCb3guaG9yaXpvbnRhbE1hcmdpbigpKTsKIAogICAgIGlmIChtX2Zv
cm1hdHRpbmdSb290LnN0eWxlKCkudGV4dEFsaWduKCkgPT0gVGV4dEFsaWduTW9kZTo6SnVzdGlm
eSkKLSAgICAgICAgY29tcHV0ZUV4cGFuc2lvbk9wcG9ydHVuaXRpZXMobGluZSwgcnVuLCBsYXN0
UnVuVHlwZS52YWx1ZU9yKElubGluZVJ1blByb3ZpZGVyOjpSdW46OlR5cGU6Ok5vbldoaXRlc3Bh
Y2UpKTsKKyAgICAgICAgY29tcHV0ZUV4cGFuc2lvbk9wcG9ydHVuaXRpZXMobGluZSwgaW5saW5l
SXRlbSwgbGluZS5oYXNUcmFpbGluZ1doaXRlc3BhY2UoKSk7CiB9CiAKIHZvaWQgSW5saW5lRm9y
bWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OmNvbXB1dGVGbG9hdFBvc2l0aW9uKGNvbnN0IEZs
b2F0aW5nQ29udGV4dCYgZmxvYXRpbmdDb250ZXh0LCBMaW5lJiBsaW5lLCBjb25zdCBCb3gmIGZs
b2F0Qm94KSBjb25zdApAQCAtNDQ5LDM2ICs0NTUsMTEgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5n
Q29udGV4dDo6TGluZUxheW91dDo6Y29tcHV0ZUZsb2F0UG9zaXRpb24oY29uc3QgRmxvYXRpbmdD
b24KICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91
dEJveChmbG9hdEJveCk7CiAKICAgICAvLyBTZXQgc3RhdGljIHBvc2l0aW9uIGZpcnN0LgotICAg
IGRpc3BsYXlCb3guc2V0VG9wTGVmdCh7IGxpbmUuY29udGVudExvZ2ljYWxSaWdodCgpLCBsaW5l
LmxvZ2ljYWxUb3AoKSB9KTsKKyAgICBkaXNwbGF5Qm94LnNldFRvcExlZnQoeyBsaW5lLmxvZ2lj
YWxSaWdodCgpLCBsaW5lLmxvZ2ljYWxUb3AoKSB9KTsKICAgICAvLyBGbG9hdCBpdC4KICAgICBk
aXNwbGF5Qm94LnNldFRvcExlZnQoZmxvYXRpbmdDb250ZXh0LnBvc2l0aW9uRm9yRmxvYXQoZmxv
YXRCb3gpKTsKIH0KIAotdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6
cGxhY2VJbkZsb3dQb3NpdGlvbmVkQ2hpbGRyZW4odW5zaWduZWQgZmlzdFJ1bkluZGV4KSBjb25z
dAotewotICAgIGF1dG8mIGxheW91dFN0YXRlID0gbV9mb3JtYXR0aW5nQ29udGV4dC5sYXlvdXRT
dGF0ZSgpOwotICAgIGF1dG8mIGlubGluZVJ1bnMgPSBtX2Zvcm1hdHRpbmdTdGF0ZS5pbmxpbmVS
dW5zKCk7Ci0gICAgZm9yIChhdXRvIHJ1bkluZGV4ID0gZmlzdFJ1bkluZGV4OyBydW5JbmRleCA8
IGlubGluZVJ1bnMuc2l6ZSgpOyArK3J1bkluZGV4KSB7Ci0gICAgICAgIGF1dG8mIGlubGluZVJ1
biA9IGlubGluZVJ1bnNbcnVuSW5kZXhdOwotCi0gICAgICAgIGF1dG8gcG9zaXRpb25PZmZzZXQg
PSBbJl0oYXV0byYgbGF5b3V0Qm94KSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogTmVlZCB0byBm
aWd1cmUgb3V0IHdoZXRoZXIgaW4tZmxvdyBvZmZzZXQgc2hvdWxkIHN0aWNrLiBUaGlzIG1pZ2h0
IHZlcnkgd2VsbCBiZSB0ZW1wb3JhcnkuCi0gICAgICAgICAgICBPcHRpb25hbDxMYXlvdXRTaXpl
PiBvZmZzZXQ7Ci0gICAgICAgICAgICBmb3IgKGF1dG8qIGJveCA9ICZsYXlvdXRCb3g7IGJveCAh
PSAmbV9mb3JtYXR0aW5nUm9vdDsgYm94ID0gYm94LT5wYXJlbnQoKSkgewotICAgICAgICAgICAg
ICAgIGlmICghYm94LT5pc0luRmxvd1Bvc2l0aW9uZWQoKSkKLSAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0LnZhbHVlT3IoTGF5b3V0
U2l6ZSgpKSArIEdlb21ldHJ5OjppbkZsb3dQb3NpdGlvbmVkUG9zaXRpb25PZmZzZXQobGF5b3V0
U3RhdGUsICpib3gpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIG9mZnNldDsK
LSAgICAgICAgfTsKLQotICAgICAgICBpZiAoYXV0byBvZmZzZXQgPSBwb3NpdGlvbk9mZnNldChp
bmxpbmVSdW4uaW5saW5lSXRlbSgpLmxheW91dEJveCgpKSkgewotICAgICAgICAgICAgaW5saW5l
UnVuLm1vdmVWZXJ0aWNhbGx5KG9mZnNldC0+aGVpZ2h0KCkpOwotICAgICAgICAgICAgaW5saW5l
UnVuLm1vdmVIb3Jpem9udGFsbHkob2Zmc2V0LT53aWR0aCgpKTsKLSAgICAgICAgfQotICAgIH0K
LX0KLQogc3RhdGljIExheW91dFVuaXQgYWRqdXN0ZWRMaW5lTG9naWNhbExlZnQoVGV4dEFsaWdu
TW9kZSBhbGlnbiwgTGF5b3V0VW5pdCBsaW5lTG9naWNhbExlZnQsIExheW91dFVuaXQgcmVtYWlu
aW5nV2lkdGgpCiB7CiAgICAgc3dpdGNoIChhbGlnbikgewpAQCAtNTA0LDcgKzQ4NSw3IEBAIHN0
YXRpYyBMYXlvdXRVbml0IGFkanVzdGVkTGluZUxvZ2ljYWxMZWZ0KFRleHRBbGlnbk1vZGUgYWxp
Z24sIExheW91dFVuaXQgbGluZUxvCiB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5l
TGF5b3V0OjpqdXN0aWZ5UnVucyhMaW5lJiBsaW5lKQogewogICAgIGF1dG8mIGlubGluZVJ1bnMg
PSBsaW5lLnJ1bnMoKTsKLSAgICBhdXRvJiBsYXN0SW5saW5lUnVuID0gaW5saW5lUnVucy5sYXN0
KCk7CisgICAgYXV0byYgbGFzdElubGluZVJ1biA9IGlubGluZVJ1bnMubGFzdCgpLmlubGluZVJ1
bjsKIAogICAgIC8vIEFkanVzdCAoZm9yYmlkKSB0cmFpbGluZyBleHBhbnNpb24gZm9yIHRoZSBs
YXN0IHRleHQgcnVuIG9uIGxpbmUuCiAgICAgYXV0byBleHBhbnNpb25CZWhhdmlvciA9IGxhc3RJ
bmxpbmVSdW4uZXhwYW5zaW9uT3Bwb3J0dW5pdHkoKS5iZWhhdmlvcjsKQEAgLTUxOSwyOCArNTAw
LDI5IEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6Omp1c3RpZnlS
dW5zKExpbmUmIGxpbmUpCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8gZXhwYW5zaW9uT3Bw
b3J0dW5pdGllcyA9IDA7Ci0gICAgZm9yIChhdXRvJiBpbmxpbmVSdW4gOiBpbmxpbmVSdW5zKQot
ICAgICAgICBleHBhbnNpb25PcHBvcnR1bml0aWVzICs9IGlubGluZVJ1bi5leHBhbnNpb25PcHBv
cnR1bml0eSgpLmNvdW50OworICAgIGZvciAoYXV0byYgcnVuIDogaW5saW5lUnVucykKKyAgICAg
ICAgZXhwYW5zaW9uT3Bwb3J0dW5pdGllcyArPSBydW4uaW5saW5lUnVuLmV4cGFuc2lvbk9wcG9y
dHVuaXR5KCkuY291bnQ7CiAKICAgICBpZiAoIWV4cGFuc2lvbk9wcG9ydHVuaXRpZXMpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIGZsb2F0IGV4cGFuc2lvbiA9IHdpZHRoVG9EaXN0cmlidXRlLnRv
RmxvYXQoKSAvIGV4cGFuc2lvbk9wcG9ydHVuaXRpZXM7CiAgICAgTGF5b3V0VW5pdCBhY2N1bXVs
YXRlZEV4cGFuc2lvbjsKLSAgICBmb3IgKGF1dG8mIGlubGluZVJ1biA6IGlubGluZVJ1bnMpIHsK
KyAgICBmb3IgKGF1dG8mIHJ1biA6IGlubGluZVJ1bnMpIHsKKyAgICAgICAgYXV0byYgaW5saW5l
UnVuID0gcnVuLmlubGluZVJ1bjsgCiAgICAgICAgIGF1dG8gZXhwYW5zaW9uRm9yUnVuID0gaW5s
aW5lUnVuLmV4cGFuc2lvbk9wcG9ydHVuaXR5KCkuY291bnQgKiBleHBhbnNpb247CiAKICAgICAg
ICAgaW5saW5lUnVuLmV4cGFuc2lvbk9wcG9ydHVuaXR5KCkuZXhwYW5zaW9uID0gZXhwYW5zaW9u
Rm9yUnVuOwotICAgICAgICBpbmxpbmVSdW4uc2V0TG9naWNhbExlZnQoaW5saW5lUnVuLmxvZ2lj
YWxMZWZ0KCkgKyBhY2N1bXVsYXRlZEV4cGFuc2lvbik7Ci0gICAgICAgIGlubGluZVJ1bi5zZXRM
b2dpY2FsV2lkdGgoaW5saW5lUnVuLmxvZ2ljYWxXaWR0aCgpICsgZXhwYW5zaW9uRm9yUnVuKTsK
KyAgICAgICAgaW5saW5lUnVuLm1vdmVIb3Jpem9udGFsbHkoYWNjdW11bGF0ZWRFeHBhbnNpb24p
OworICAgICAgICBpbmxpbmVSdW4uZXhwYW5kSG9yaXpvbnRhbGx5KGV4cGFuc2lvbkZvclJ1bik7
CiAgICAgICAgIGFjY3VtdWxhdGVkRXhwYW5zaW9uICs9IGV4cGFuc2lvbkZvclJ1bjsKICAgICB9
CiB9CiAKLXZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OmNvbXB1dGVF
eHBhbnNpb25PcHBvcnR1bml0aWVzKExpbmUmIGxpbmUsIGNvbnN0IElubGluZVJ1blByb3ZpZGVy
OjpSdW4mIHJ1biwgSW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6VHlwZSBsYXN0UnVuVHlwZSkgY29u
c3QKK3ZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OmNvbXB1dGVFeHBh
bnNpb25PcHBvcnR1bml0aWVzKExpbmUmIGxpbmUsIGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0
ZW0sIGJvb2wgcHJldmlvdXNSdW5Jc1doaXRlcGFjZSkgY29uc3QKIHsKLSAgICBhdXRvIGlzRXhw
YW5zaW9uT3Bwb3J0dW5pdHkgPSBbXShhdXRvIGN1cnJlbnRSdW5Jc1doaXRlc3BhY2UsIGF1dG8g
bGFzdFJ1bklzV2hpdGVzcGFjZSkgewotICAgICAgICByZXR1cm4gY3VycmVudFJ1bklzV2hpdGVz
cGFjZSB8fCAoIWN1cnJlbnRSdW5Jc1doaXRlc3BhY2UgJiYgIWxhc3RSdW5Jc1doaXRlc3BhY2Up
OworICAgIGF1dG8gaXNFeHBhbnNpb25PcHBvcnR1bml0eSA9IFtdKGF1dG8gY3VycmVudFJ1bklz
V2hpdGVzcGFjZSwgYXV0byBwcmV2aW91c1J1bklzV2hpdGVwYWNlKSB7CisgICAgICAgIHJldHVy
biBjdXJyZW50UnVuSXNXaGl0ZXNwYWNlIHx8ICghY3VycmVudFJ1bklzV2hpdGVzcGFjZSAmJiAh
cHJldmlvdXNSdW5Jc1doaXRlcGFjZSk7CiAgICAgfTsKIAogICAgIGF1dG8gZXhwYW5zaW9uQmVo
YXZpb3IgPSBbXShhdXRvIGlzQXRFeHBhbnNpb25PcHBvcnR1bml0eSkgewpAQCAtNTQ5LDkgKzUz
MSwxMCBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0Ojpjb21wdXRl
RXhwYW5zaW9uT3Bwb3J0dW5pdGllcyhMaW5lJiBsaQogICAgICAgICByZXR1cm4gZXhwYW5zaW9u
QmVoYXZpb3I7CiAgICAgfTsKIAotICAgIGF1dG8gaXNBdEV4cGFuc2lvbk9wcG9ydHVuaXR5ID0g
aXNFeHBhbnNpb25PcHBvcnR1bml0eShydW4uaXNXaGl0ZXNwYWNlKCksIGxhc3RSdW5UeXBlID09
IElubGluZVJ1blByb3ZpZGVyOjpSdW46OlR5cGU6OldoaXRlc3BhY2UpOworICAgIGF1dG8gY3Vy
cmVudFJ1bklzV2hpdGVzcGFjZSA9IGlzPElubGluZVRleHRJdGVtPihpbmxpbmVJdGVtKSA/IGRv
d25jYXN0PElubGluZVRleHRJdGVtPihpbmxpbmVJdGVtKS5pc1doaXRlc3BhY2UoKSA6IGZhbHNl
OworICAgIGF1dG8gaXNBdEV4cGFuc2lvbk9wcG9ydHVuaXR5ID0gaXNFeHBhbnNpb25PcHBvcnR1
bml0eShjdXJyZW50UnVuSXNXaGl0ZXNwYWNlLCBwcmV2aW91c1J1bklzV2hpdGVwYWNlKTsKIAot
ICAgIGF1dG8mIGN1cnJlbnRJbmxpbmVSdW4gPSBsaW5lLnJ1bnMoKS5sYXN0KCk7CisgICAgYXV0
byYgY3VycmVudElubGluZVJ1biA9IGxpbmUucnVucygpLmxhc3QoKS5pbmxpbmVSdW47CiAgICAg
YXV0byYgZXhwYW5zaW9uT3Bwb3J0dW5pdHkgPSBjdXJyZW50SW5saW5lUnVuLmV4cGFuc2lvbk9w
cG9ydHVuaXR5KCk7CiAgICAgaWYgKGlzQXRFeHBhbnNpb25PcHBvcnR1bml0eSkKICAgICAgICAg
KytleHBhbnNpb25PcHBvcnR1bml0eS5jb3VudDsKQEAgLTU2NywzOCArNTUwLDE0IEBAIHZvaWQg
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OmFsaWduUnVucyhUZXh0QWxpZ25N
b2RlIHRleHRBbGlnbiwgTGluCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGxp
bmVMb2dpY2FsTGVmdCA9IGxpbmUuY29udGVudExvZ2ljYWxMZWZ0KCk7CisgICAgYXV0byBsaW5l
TG9naWNhbExlZnQgPSBsaW5lLmxvZ2ljYWxMZWZ0KCk7CiAgICAgYXV0byBhZGp1c3RlZExvZ2lj
YWxMZWZ0ID0gYWRqdXN0ZWRMaW5lTG9naWNhbExlZnQoYWRqdXRlZFRleHRBbGlnbm1lbnQsIGxp
bmVMb2dpY2FsTGVmdCwgbGluZS5hdmFpbGFibGVXaWR0aCgpKTsKICAgICBpZiAoYWRqdXN0ZWRM
b2dpY2FsTGVmdCA9PSBsaW5lTG9naWNhbExlZnQpCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1
dG8gZGVsdGEgPSBhZGp1c3RlZExvZ2ljYWxMZWZ0IC0gbGluZUxvZ2ljYWxMZWZ0OwotICAgIGZv
ciAoYXV0byYgaW5saW5lUnVuIDogbGluZS5ydW5zKCkpCi0gICAgICAgIGlubGluZVJ1bi5zZXRM
b2dpY2FsTGVmdChpbmxpbmVSdW4ubG9naWNhbExlZnQoKSArIGRlbHRhKTsKLX0KLQotTGF5b3V0
VW5pdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6cnVuV2lkdGgoY29uc3Qg
SW5saW5lQ29udGVudCYgaW5saW5lQ29udGVudCwgY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRl
bSwgSXRlbVBvc2l0aW9uIGZyb20sIHVuc2lnbmVkIGxlbmd0aCwgTGF5b3V0VW5pdCBjb250ZW50
TG9naWNhbExlZnQpIGNvbnN0IAotewotICAgIExheW91dFVuaXQgd2lkdGg7Ci0gICAgYXV0byBz
dGFydFBvc2l0aW9uID0gZnJvbTsKLSAgICBhdXRvIGl0ZXJhdG9yID0gaW5saW5lQ29udGVudC5m
aW5kKGNvbnN0X2Nhc3Q8SW5saW5lSXRlbSo+KCZpbmxpbmVJdGVtKSk7Ci0jaWYgIUFTU0VSVF9E
SVNBQkxFRAotICAgIGF1dG8gaW5saW5lSXRlbUVuZCA9IGlubGluZUNvbnRlbnQuZW5kKCk7Ci0j
ZW5kaWYKLSAgICB3aGlsZSAobGVuZ3RoKSB7Ci0gICAgICAgIEFTU0VSVChpdGVyYXRvciAhPSBp
bmxpbmVJdGVtRW5kKTsKLSAgICAgICAgYXV0byYgY3VycmVudElubGluZUl0ZW0gPSAqKml0ZXJh
dG9yOwotICAgICAgICBhdXRvIGVuZFBvc2l0aW9uID0gc3RkOjptaW48SXRlbVBvc2l0aW9uPihz
dGFydFBvc2l0aW9uICsgbGVuZ3RoLCBjdXJyZW50SW5saW5lSXRlbS50ZXh0Q29udGVudCgpLmxl
bmd0aCgpKTsKLSAgICAgICAgYXV0byB0ZXh0V2lkdGggPSBUZXh0VXRpbDo6d2lkdGgoY3VycmVu
dElubGluZUl0ZW0sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uLCBjb250ZW50TG9naWNhbExl
ZnQpOwotCi0gICAgICAgIGNvbnRlbnRMb2dpY2FsTGVmdCArPSB0ZXh0V2lkdGg7Ci0gICAgICAg
IHdpZHRoICs9IHRleHRXaWR0aDsKLSAgICAgICAgbGVuZ3RoIC09IChlbmRQb3NpdGlvbiAtIHN0
YXJ0UG9zaXRpb24pOwotCi0gICAgICAgIHN0YXJ0UG9zaXRpb24gPSAwOwotICAgICAgICArK2l0
ZXJhdG9yOwotICAgIH0KLSAgICByZXR1cm4gd2lkdGg7CisgICAgZm9yIChhdXRvJiBydW4gOiBs
aW5lLnJ1bnMoKSkKKyAgICAgICAgcnVuLmlubGluZVJ1bi5tb3ZlSG9yaXpvbnRhbGx5KGRlbHRh
KTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1h
dHRpbmcvSW5saW5lRm9ybWF0dGluZ1N0YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5s
aW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nU3RhdGUuaAppbmRleCA2NjJhODNjM2ViYzUx
YmE3YjBlM2M0ZWFjY2Y1MTg0NGU5ZWQ2NTljLi4wOGIxYTVmOTcxOTIzOWRhN2U1ZTZlZmVhZjdi
YmQyZGNhNDE3NDgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9y
bWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nU3RhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nU3RhdGUuaApAQCAtMjcsMTUgKzI3
LDE4IEBACiAKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKIAorI2luY2x1
ZGUgIkRpc3BsYXlSdW4uaCIKICNpbmNsdWRlICJGb3JtYXR0aW5nU3RhdGUuaCIKICNpbmNsdWRl
ICJJbmxpbmVJdGVtLmgiCi0jaW5jbHVkZSAiSW5saW5lUnVuLmgiCiAjaW5jbHVkZSA8d3RmL0lz
b01hbGxvYy5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogbmFtZXNwYWNlIExheW91dCB7CiAKKy8vIFRlbXAKK3VzaW5nIElubGluZUl0ZW1zID0g
TGlzdEhhc2hTZXQ8c3RkOjp1bmlxdWVfcHRyPElubGluZUl0ZW0+PjsKK3VzaW5nIElubGluZVJ1
bnMgPSBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPERpc3BsYXk6OlJ1bj4+OwogLy8gSW5saW5lRm9y
bWF0dGluZ1N0YXRlIGhvbGRzIHRoZSBzdGF0ZSBmb3IgYSBwYXJ0aWN1bGFyIGlubGluZSBmb3Jt
YXR0aW5nIGNvbnRleHQgdHJlZS4KIGNsYXNzIElubGluZUZvcm1hdHRpbmdTdGF0ZSA6IHB1Ymxp
YyBGb3JtYXR0aW5nU3RhdGUgewogICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoSW5saW5lRm9y
bWF0dGluZ1N0YXRlKTsKQEAgLTQzLDE1ICs0NiwxNiBAQCBwdWJsaWM6CiAgICAgSW5saW5lRm9y
bWF0dGluZ1N0YXRlKFJlZjxGbG9hdGluZ1N0YXRlPiYmLCBMYXlvdXRTdGF0ZSYpOwogICAgIHZp
cnR1YWwgfklubGluZUZvcm1hdHRpbmdTdGF0ZSgpOwogCi0gICAgSW5saW5lQ29udGVudCYgaW5s
aW5lQ29udGVudCgpIHsgcmV0dXJuIG1faW5saW5lQ29udGVudDsgfQotICAgIElubGluZUl0ZW0q
IGxhc3RJbmxpbmVJdGVtKCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVDb250ZW50LmlzRW1wdHko
KSA/IG51bGxwdHIgOiBtX2lubGluZUNvbnRlbnQubGFzdCgpLmdldCgpOyB9CisgICAgdm9pZCBh
ZGRJbmxpbmVUZXh0SXRlbSgpOwogCi0gICAgLy8gVGVtcAorICAgIElubGluZUl0ZW1zJiBpbmxp
bmVJdGVtcygpIHsgcmV0dXJuIG1faW5saW5lSXRlbXM7IH0KICAgICBJbmxpbmVSdW5zJiBpbmxp
bmVSdW5zKCkgeyByZXR1cm4gbV9pbmxpbmVSdW5zOyB9Ci0gICAgdm9pZCBhcHBlbmRJbmxpbmVS
dW4oSW5saW5lUnVuIGlubGluZVJ1bikgeyBtX2lubGluZVJ1bnMuYXBwZW5kKGlubGluZVJ1bik7
IH0KKworICAgIHZvaWQgYWRkSW5saW5lSXRlbShzdGQ6OnVuaXF1ZV9wdHI8SW5saW5lSXRlbT4m
JiBpbmxpbmVJdGVtKSB7IG1faW5saW5lSXRlbXMuYWRkKFdURk1vdmUoaW5saW5lSXRlbSkpOyB9
CisgICAgdm9pZCBhZGRJbmxpbmVSdW4oc3RkOjp1bmlxdWVfcHRyPERpc3BsYXk6OlJ1bj4mJiBp
bmxpbmVSdW4pIHsgbV9pbmxpbmVSdW5zLmFwcGVuZChXVEZNb3ZlKGlubGluZVJ1bikpOyB9CiAK
IHByaXZhdGU6Ci0gICAgSW5saW5lQ29udGVudCBtX2lubGluZUNvbnRlbnQ7CisgICAgSW5saW5l
SXRlbXMgbV9pbmxpbmVJdGVtczsKICAgICBJbmxpbmVSdW5zIG1faW5saW5lUnVuczsKIH07CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGlu
ZUl0ZW0uaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUl0
ZW0uaAppbmRleCA1YTEwZmMxZDFmZmNhNjM0NGUwNDAwZTU5ZDZhNTAwN2ExNWJiODRlLi44N2Vk
OWMzNmY2YzkyM2FlOGU0Zjg5OTc0OTZlYmNhYzVhY2ZlOWM0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVJdGVtLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lSXRlbS5oCkBAIC0zNiw4MyAr
MzYsNTcgQEAgbmFtZXNwYWNlIExheW91dCB7CiAKIGNsYXNzIElubGluZUl0ZW0gewogcHVibGlj
OgotICAgIElubGluZUl0ZW0oY29uc3QgQm94JiBsYXlvdXRCb3gpOworICAgIGVudW0gY2xhc3Mg
VHlwZSB7IFRleHQsIEhhcmRMaW5lQnJlYWssIEJveCwgRmxvYXQsIENvbnRhaW5lclN0YXJ0LCBD
b250YWluZXJFbmQgfTsKKyAgICBJbmxpbmVJdGVtKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBUeXBl
KTsKIAotICAgIGVudW0gY2xhc3MgVHlwZSB7IFRleHQsIEhhcmRMaW5lQnJlYWssIElubGluZUJv
eCwgRmxvYXQgfTsKLSAgICBUeXBlIHR5cGUoKSBjb25zdDsKKyAgICBUeXBlIHR5cGUoKSBjb25z
dCB7IHJldHVybiBtX3R5cGU7IH0KICAgICBjb25zdCBCb3gmIGxheW91dEJveCgpIGNvbnN0IHsg
cmV0dXJuIG1fbGF5b3V0Qm94OyB9CiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKCkgY29u
c3QgeyByZXR1cm4gbV9sYXlvdXRCb3guc3R5bGUoKTsgfQotICAgIFN0cmluZyB0ZXh0Q29udGVu
dCgpIGNvbnN0OwotICAgIC8vIERldGFjaGluZ1J1bGUgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGlu
bGluZSBlbGVtZW50IG5lZWRzIHRvIGJlIHdyYXBwZWQgaW4gYSBkZWRpY2V0ZWQgcnVuIG9yIGJy
ZWFrIGZyb20gcHJldmlvdXMvbmV4dCBydW5zLgotICAgIC8vIDxzcGFuPnN0YXJ0PC9zcGFuPjxz
cGFuIHN0eWxlPSJwb3NpdGlvbjogcmVsYXRpdmU7Ij4gbWlkZGxlIDwvc3Bhbj48c3Bhbj5lbmQ8
L3NwYW4+Ci0gICAgLy8gaW5wdXQgdG8gbGluZSBicmVha2luZyAtPiA8c3RhcnQgbWlkZGxlIGVu
ZD4KLSAgICAvLyBvdXRwdXQgb2YgbGluZSBicmVha2luZyAoY29uc2lkZXJpbmcgaW5maW5pdGUg
Y29uc3RyYWludCkgLT4gPHN0YXJ0IG1pZGRsZSBlbmQ+Ci0gICAgLy8gZHVlIHRvIHRoZSBpbi1m
bG93IHBvc2l0aW9uaW5nLCB0aGUgZmluYWwgcnVucyBhcmU6IDxzdGFydD48IG1pZGRsZSA+PGVu
ZD4KLSAgICAvLyAic3RhcnQiIC0+IG4vYQotICAgIC8vICIgbWlkZGxlICIgLT4gQnJlYWtBdFN0
YXJ0IGFuZCBCcmVha0F0RW5kCi0gICAgLy8gImVuZCIgLT4gbi9hCi0gICAgLy8KLSAgICAvLyA8
c3Bhbj5wYXJlbnQgPC9zcGFuPjxzcGFuIHN0eWxlPSJwYWRkaW5nOiAxMHB4OyI+c3RhcnQ8c3Bh
bj4gbWlkZGxlIDwvc3Bhbj5lbmQ8L3NwYW4+PHNwYW4+IHBhcmVudDwvc3Bhbj4KLSAgICAvLyBp
bnB1dCB0byBsaW5lIGJyZWFraW5nIC0+IDxwYXJlbnQgc3RhcnQgbWlkZGxlIGVuZCBwYXJlbnQ+
Ci0gICAgLy8gb3V0cHV0IG9mIGxpbmUgYnJlYWtpbmcgKGNvbnNpZGVyaW5nIGluZmluaXRlIGNv
bnN0cmFpbnQpIC0+IDxwYXJlbnQgc3RhcnQgbWlkZGxlIGVuZCBwYXJlbnQ+Ci0gICAgLy8gZHVl
IHRvIHBhZGRpbmcsIGZpbmFsIHJ1bnMgLT4gPHBhcmVudD48c3RhcnQgbWlkZGxlIGVuZD48cGFy
ZW50PgotICAgIC8vICJwYXJlbnQiIC0+IG4vYQotICAgIC8vICJzdGFydCIgLT4gQnJlYWtBdFN0
YXJ0Ci0gICAgLy8gIiBtaWRkbGUgIiAtPiBuL2EKLSAgICAvLyAiZW5kIiAtPiBCcmVha0F0RW5k
Ci0gICAgLy8gInBhcmVudCIgLT4gbi9hCi0gICAgZW51bSBjbGFzcyBEZXRhY2hpbmdSdWxlIHsK
LSAgICAgICAgQnJlYWtBdFN0YXJ0ID0gMSA8PCAwLAotICAgICAgICBCcmVha0F0RW5kID0gMSA8
PCAxCi0gICAgfTsKLSAgICB2b2lkIGFkZERldGFjaGluZ1J1bGUoT3B0aW9uU2V0PERldGFjaGlu
Z1J1bGU+IGRldGFjaGluZ1J1bGUpIHsgbV9kZXRhY2hpbmdSdWxlcy5hZGQoZGV0YWNoaW5nUnVs
ZSk7IH0KLSAgICBPcHRpb25TZXQ8RGV0YWNoaW5nUnVsZT4gZGV0YWNoaW5nUnVsZXMoKSBjb25z
dCB7IHJldHVybiBtX2RldGFjaGluZ1J1bGVzOyB9CisgICAgdm9pZCBzZXRXaWR0aChMYXlvdXRV
bml0KTsKKyAgICBMYXlvdXRVbml0IHdpZHRoKCkgY29uc3Q7CiAKLSAgICAvLyBOb24tYnJlYWth
YmxlIHN0YXJ0L2VuZCBtYXJrcyBtYXJnaW4vcGFkZGluZy9ib3JkZXIgc3BhY2UgKGV2ZW4gd2hl
biBpdCBkb2VzIG5vdCBkaXJlY3RseSBjb21lIGZyb20gdGhlIGFzc29jaWF0ZWQgbGF5b3V0IGJv
eCkKLSAgICAvLyA8c3BhbiBzdHlsZT0icGFkZGluZzogNXB4Ij48c3Bhbj5uZXN0ZWQgY29udGVu
dCB3aXRoIHBhZGRpbmcgcGFyZW50PC9zcGFuPC9zcGFuPgotICAgIC8vIDxuZXN0ZWQgY29udGVu
dCB3aXRoIHBhZGRpbmcgcGFyZW50PiBpbmxpbmUgcnVuIGhhcyA1cHggbm9uLWJyZWFrYWJsZSBz
dGFydC9lbmQuCi0gICAgTGF5b3V0VW5pdCBub25CcmVha2FibGVTdGFydCgpIGNvbnN0IHsgcmV0
dXJuIG1fbm9uQnJlYWthYmxlU3RhcnQ7IH0KLSAgICBMYXlvdXRVbml0IG5vbkJyZWFrYWJsZUVu
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fbm9uQnJlYWthYmxlRW5kOyB9Ci0gICAgdm9pZCBhZGROb25C
cmVha2FibGVTdGFydChMYXlvdXRVbml0IHZhbHVlKSB7IG1fbm9uQnJlYWthYmxlU3RhcnQgKz0g
dmFsdWU7IH0KLSAgICB2b2lkIGFkZE5vbkJyZWFrYWJsZUVuZChMYXlvdXRVbml0IHZhbHVlKSB7
IG1fbm9uQnJlYWthYmxlRW5kICs9IHZhbHVlOyB9CisgICAgYm9vbCBpc1RleHQoKSBjb25zdCB7
IHJldHVybiB0eXBlKCkgPT0gVHlwZTo6VGV4dDsgfQorICAgIGJvb2wgaXNCb3goKSBjb25zdCB7
IHJldHVybiB0eXBlKCkgPT0gVHlwZTo6Qm94OyB9CisgICAgYm9vbCBpc0hhcmRMaW5lQnJlYWso
KSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gVHlwZTo6SGFyZExpbmVCcmVhazsgfQorICAgIGJv
b2wgaXNGbG9hdCgpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBUeXBlOjpGbG9hdDsgfQorICAg
IGJvb2wgaXNMaW5lQnJlYWsoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gVHlwZTo6SGFyZExp
bmVCcmVhazsgfQorICAgIGJvb2wgaXNDb250YWluZXJTdGFydCgpIGNvbnN0IHsgcmV0dXJuIHR5
cGUoKSA9PSBUeXBlOjpDb250YWluZXJTdGFydDsgfQorICAgIGJvb2wgaXNDb250YWluZXJFbmQo
KSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gVHlwZTo6Q29udGFpbmVyRW5kOyB9CiAKIHByaXZh
dGU6CiAgICAgY29uc3QgQm94JiBtX2xheW91dEJveDsKLSAgICBPcHRpb25TZXQ8RGV0YWNoaW5n
UnVsZT4gbV9kZXRhY2hpbmdSdWxlczsKLSAgICBMYXlvdXRVbml0IG1fbm9uQnJlYWthYmxlU3Rh
cnQ7Ci0gICAgTGF5b3V0VW5pdCBtX25vbkJyZWFrYWJsZUVuZDsKKyAgICBjb25zdCBUeXBlIG1f
dHlwZTsKKyAgICBMYXlvdXRVbml0IG1fd2lkdGg7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAg
IGJvb2wgbV9oYXNWYWxpZFdpZHRoIHsgZmFsc2UgfTsKKyNlbmRpZgogfTsKIAotdXNpbmcgSW5s
aW5lQ29udGVudCA9IExpc3RIYXNoU2V0PHN0ZDo6dW5pcXVlX3B0cjxJbmxpbmVJdGVtPj47Ci0K
LWlubGluZSBJbmxpbmVJdGVtOjpJbmxpbmVJdGVtKGNvbnN0IEJveCYgbGF5b3V0Qm94KQoraW5s
aW5lIElubGluZUl0ZW06OklubGluZUl0ZW0oY29uc3QgQm94JiBsYXlvdXRCb3gsIFR5cGUgdHlw
ZSkKICAgICA6IG1fbGF5b3V0Qm94KGxheW91dEJveCkKKyAgICAsIG1fdHlwZSh0eXBlKQogewog
fQogCi1pbmxpbmUgSW5saW5lSXRlbTo6VHlwZSBJbmxpbmVJdGVtOjp0eXBlKCkgY29uc3QKK2lu
bGluZSB2b2lkIElubGluZUl0ZW06OnNldFdpZHRoKExheW91dFVuaXQgd2lkdGgpCiB7Ci0gICAg
aWYgKGlzPElubGluZUJveD4obV9sYXlvdXRCb3gpICYmIGRvd25jYXN0PElubGluZUJveD4obV9s
YXlvdXRCb3gpLmhhc1RleHRDb250ZW50KCkpCi0gICAgICAgIHJldHVybiBUeXBlOjpUZXh0Owot
Ci0gICAgaWYgKGlzPExpbmVCcmVha0JveD4obV9sYXlvdXRCb3gpKQotICAgICAgICByZXR1cm4g
VHlwZTo6SGFyZExpbmVCcmVhazsKLQotICAgIGlmIChtX2xheW91dEJveC5pc0Zsb2F0aW5nUG9z
aXRpb25lZCgpKQotICAgICAgICByZXR1cm4gVHlwZTo6RmxvYXQ7Ci0KLSAgICBBU1NFUlQobV9s
YXlvdXRCb3guaXNJbmxpbmVMZXZlbEJveCgpKTsKLSAgICByZXR1cm4gVHlwZTo6SW5saW5lQm94
OworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBtX2hhc1ZhbGlkV2lkdGggPSB0cnVlOworI2Vu
ZGlmCisgICAgbV93aWR0aCA9IHdpZHRoOwogfQogCi1pbmxpbmUgU3RyaW5nIElubGluZUl0ZW06
OnRleHRDb250ZW50KCkgY29uc3QKK2lubGluZSBMYXlvdXRVbml0IElubGluZUl0ZW06OndpZHRo
KCkgY29uc3QKIHsKLSAgICBpZiAodHlwZSgpICE9IFR5cGU6OlRleHQpCi0gICAgICAgIHJldHVy
biB7IH07Ci0KLSAgICByZXR1cm4gZG93bmNhc3Q8SW5saW5lQm94PihtX2xheW91dEJveCkudGV4
dENvbnRlbnQoKTsKKyAgICBBU1NFUlQobV9oYXNWYWxpZFdpZHRoKTsKKyAgICByZXR1cm4gbV93
aWR0aDsKIH0KIAorI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0lOTElORV9JVEVNKFRv
VmFsdWVUeXBlTmFtZSwgcHJlZGljYXRlKSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lO
KFdlYkNvcmU6OkxheW91dDo6VG9WYWx1ZVR5cGVOYW1lKSBcCisgICAgc3RhdGljIGJvb2wgaXNU
eXBlKGNvbnN0IFdlYkNvcmU6OkxheW91dDo6SW5saW5lSXRlbSYgaW5saW5lSXRlbSkgeyByZXR1
cm4gaW5saW5lSXRlbS5wcmVkaWNhdGU7IH0gXAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQo
KQorCiB9CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxp
bmVmb3JtYXR0aW5nL0lubGluZUxpbmVCcmVha2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCcmVha2VyLmNwcAppbmRleCA1NzZhMGJiNzk1
NDM3ZTAxMzc0MmE3Mjg2OTQzYWYyNDgxMDA0ZmVjLi5kYjViYmZhMGY4NWNhYzdlNzEwNGNmYzkw
YWVjZDZjZjBhODNjNTYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5l
Zm9ybWF0dGluZy9JbmxpbmVMaW5lQnJlYWtlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJyZWFrZXIuY3BwCkBAIC0yOCwxNzMgKzI4
LDEwMyBAQAogCiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCiAKLSNpbmNs
dWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkh5cGhlbmF0aW9uLmgiCi0jaW5jbHVkZSAi
SW5saW5lUnVuUHJvdmlkZXIuaCIKLSNpbmNsdWRlICJUZXh0VXRpbC5oIgotI2luY2x1ZGUgPHd0
Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisjaW5jbHVkZSAiTGF5b3V0U3RhdGUuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIExheW91dCB7CiAKLVdURl9NQUtFX0lTT19BTExPQ0FU
RURfSU1QTChJbmxpbmVMaW5lQnJlYWtlcik7Ci0KLUlubGluZUxpbmVCcmVha2VyOjpJbmxpbmVM
aW5lQnJlYWtlcihjb25zdCBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IElubGluZUNv
bnRlbnQmIGlubGluZUNvbnRlbnQsIGNvbnN0IFZlY3RvcjxJbmxpbmVSdW5Qcm92aWRlcjo6UnVu
PiYgaW5saW5lUnVucykKK0xpbmVCcmVha2VyOjpMaW5lQnJlYWtlcihjb25zdCBMYXlvdXRTdGF0
ZSYgbGF5b3V0U3RhdGUpCiAgICAgOiBtX2xheW91dFN0YXRlKGxheW91dFN0YXRlKQotICAgICwg
bV9pbmxpbmVDb250ZW50KGlubGluZUNvbnRlbnQpCi0gICAgLCBtX2lubGluZVJ1bnMoaW5saW5l
UnVucykKIHsKKwogfQogCi1PcHRpb25hbDxJbmxpbmVMaW5lQnJlYWtlcjo6UnVuPiBJbmxpbmVM
aW5lQnJlYWtlcjo6bmV4dFJ1bihMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsTGVmdCwgTGF5b3V0
VW5pdCBhdmFpbGFibGVXaWR0aCwgYm9vbCBsaW5lSXNFbXB0eSkKK0xpbmVCcmVha2VyOjpCcmVh
a2luZ0NvbnRleHQgTGluZUJyZWFrZXI6OmJyZWFraW5nQ29udGV4dChJbmxpbmVJdGVtJiBpbmxp
bmVJdGVtLCBMaW5lQ29udGV4dCBsaW5lQ29udGV4dCkKIHsKLSAgICBpZiAoaXNBdENvbnRlbnRF
bmQoKSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIElubGluZVJ1blByb3Zp
ZGVyOjpSdW4gY3VycmVudElubGluZVJ1biA9IG1faW5saW5lUnVuc1ttX2N1cnJlbnRSdW5JbmRl
eF07Ci0gICAgLy8gQWRqdXN0IHRoZSBjdXJyZW50IHJ1biBpZiBpdCBpcyBzcGxpdCBtaWR3b3Jk
LgotICAgIGlmIChtX3NwbGl0UG9zaXRpb24pIHsKLSAgICAgICAgQVNTRVJUKGN1cnJlbnRJbmxp
bmVSdW4uaXNUZXh0KCkpOwotICAgICAgICBtX3NwbGl0UG9zaXRpb24gPSBXVEY6Om51bGxvcHQ7
Ci0gICAgfQorICAgIGF1dG8gaXNBdEJyZWFraW5nT3Bwb3J0dW5pdHkgPSBpczxJbmxpbmVUZXh0
SXRlbT4oaW5saW5lSXRlbSkgPyBkb3duY2FzdDxJbmxpbmVUZXh0SXRlbT4oaW5saW5lSXRlbSku
aXNXaGl0ZXNwYWNlKCkgCisgICAgICAgIDogIWlubGluZUl0ZW0uaXNGbG9hdCgpICYmICFpbmxp
bmVJdGVtLmlzQ29udGFpbmVyU3RhcnQoKSAmJiAhaW5saW5lSXRlbS5pc0NvbnRhaW5lckVuZCgp
OwogCi0gICAgaWYgKGN1cnJlbnRJbmxpbmVSdW4uaXNMaW5lQnJlYWsoKSkgewotICAgICAgICAr
K21fY3VycmVudFJ1bkluZGV4OwotICAgICAgICByZXR1cm4gUnVuIHsgUnVuOjpQb3NpdGlvbjo6
TGluZUVuZCwgMCwgY3VycmVudElubGluZVJ1biB9OwotICAgIH0KKyAgICBpbmxpbmVJdGVtLnNl
dFdpZHRoKHJ1bldpZHRoKGlubGluZUl0ZW0sIGxpbmVDb250ZXh0LmxvZ2ljYWxMZWZ0KSk7Cisg
ICAgLy8gRmlyc3QgY29udGVudCBhbHdheXMgc3RheXMgb24gbGluZS4KKyAgICBpZiAobGluZUNv
bnRleHQuaXNFbXB0eSkKKyAgICAgICAgcmV0dXJuIHsgQnJlYWtpbmdCZWhhdmlvcjo6S2VlcCwg
aXNBdEJyZWFraW5nT3Bwb3J0dW5pdHkgfTsKIAotICAgIGF1dG8gY29udGVudFdpZHRoID0gcnVu
V2lkdGgoY3VycmVudElubGluZVJ1biwgY29udGVudExvZ2ljYWxMZWZ0KTsKLSAgICAvLyAxLiBQ
bGVudHkgb2Ygc3BhY2UgbGVmdC4KLSAgICBpZiAoY29udGVudFdpZHRoIDw9IGF2YWlsYWJsZVdp
ZHRoKSB7Ci0gICAgICAgICsrbV9jdXJyZW50UnVuSW5kZXg7Ci0gICAgICAgIHJldHVybiBSdW4g
eyBsaW5lSXNFbXB0eSA/IFJ1bjo6UG9zaXRpb246OkxpbmVCZWdpbiA6IFJ1bjo6UG9zaXRpb246
OlVuZGV0ZXJtaW5lZCwgY29udGVudFdpZHRoLCBjdXJyZW50SW5saW5lUnVuIH07Ci0gICAgfQor
ICAgIGlmIChpbmxpbmVJdGVtLndpZHRoKCkgPD0gbGluZUNvbnRleHQuYXZhaWxhYmxlV2lkdGgp
CisgICAgICAgIHJldHVybiB7IEJyZWFraW5nQmVoYXZpb3I6OktlZXAsIGlzQXRCcmVha2luZ09w
cG9ydHVuaXR5IH07CiAKLSAgICAvLyAyLiBObyBzcGFjZSBsZWZ0IHdoYXRzb2V2ZXIuCi0gICAg
aWYgKGF2YWlsYWJsZVdpZHRoIDw9IDApIHsKLSAgICAgICAgKyttX2N1cnJlbnRSdW5JbmRleDsK
LSAgICAgICAgcmV0dXJuIFJ1biB7IFJ1bjo6UG9zaXRpb246OkxpbmVCZWdpbiwgY29udGVudFdp
ZHRoLCBjdXJyZW50SW5saW5lUnVuIH07Ci0gICAgfQorICAgIGlmIChpczxJbmxpbmVUZXh0SXRl
bT4oaW5saW5lSXRlbSkpCisgICAgICAgIHJldHVybiB7IHdvcmRCcmVha2luZ0JlaGF2aW9yKGRv
d25jYXN0PElubGluZVRleHRJdGVtPihpbmxpbmVJdGVtKSwgbGluZUNvbnRleHQuaXNFbXB0eSks
IGlzQXRCcmVha2luZ09wcG9ydHVuaXR5IH07CiAKLSAgICAvLyAzLiBTb21lIHNwYWNlIGxlZnQu
IExldCdzIGZpbmQgb3V0IHdoYXQgd2UgbmVlZCB0byBkbyB3aXRoIHRoaXMgcnVuLgotICAgIGF1
dG8gYnJlYWtpbmdCZWhhdmlvciA9IGxpbmVCcmVha2luZ0JlaGF2aW9yKGN1cnJlbnRJbmxpbmVS
dW4sIGxpbmVJc0VtcHR5KTsKLSAgICBpZiAoYnJlYWtpbmdCZWhhdmlvciA9PSBMaW5lQnJlYWtp
bmdCZWhhdmlvcjo6S2VlcCkgewotICAgICAgICArK21fY3VycmVudFJ1bkluZGV4OwotICAgICAg
ICByZXR1cm4gUnVuIHsgbGluZUlzRW1wdHkgPyBSdW46OlBvc2l0aW9uOjpMaW5lQmVnaW4gOiBS
dW46OlBvc2l0aW9uOjpVbmRldGVybWluZWQsIGNvbnRlbnRXaWR0aCwgY3VycmVudElubGluZVJ1
biB9OwotICAgIH0KLQotICAgIGlmIChicmVha2luZ0JlaGF2aW9yID09IExpbmVCcmVha2luZ0Jl
aGF2aW9yOjpXcmFwVG9OZXh0TGluZSkgewotICAgICAgICArK21fY3VycmVudFJ1bkluZGV4Owot
ICAgICAgICByZXR1cm4gUnVuIHsgUnVuOjpQb3NpdGlvbjo6TGluZUJlZ2luLCBjb250ZW50V2lk
dGgsIGN1cnJlbnRJbmxpbmVSdW4gfTsKLSAgICB9Ci0KLSAgICBBU1NFUlQoYnJlYWtpbmdCZWhh
dmlvciA9PSBMaW5lQnJlYWtpbmdCZWhhdmlvcjo6QnJlYWspOwotICAgIC8vIFNwbGl0IGNvbnRl
bnQuCi0gICAgcmV0dXJuIHNwbGl0UnVuKGN1cnJlbnRJbmxpbmVSdW4sIGNvbnRlbnRMb2dpY2Fs
TGVmdCwgYXZhaWxhYmxlV2lkdGgsIGxpbmVJc0VtcHR5KTsKLX0KLQotYm9vbCBJbmxpbmVMaW5l
QnJlYWtlcjo6aXNBdENvbnRlbnRFbmQoKSBjb25zdAotewotICAgIHJldHVybiBtX2N1cnJlbnRS
dW5JbmRleCA9PSBtX2lubGluZVJ1bnMuc2l6ZSgpOworICAgIC8vIFdyYXAgbm9uLXRleHQgYm94
ZXMgdG8gdGhlIG5leHQgbGluZSB1bmxlc3Mgd2UgY2FuIHRyaW0gdHJhaWxpbmcgd2hpdGVzcGFj
ZS9pdCdzIHRoZSBmaXJzdCBpdGVtIG9uIHRoZSBsaW5lLgorICAgIGF1dG8gYXZhaWxhYmxlV2lk
dGggPSBsaW5lQ29udGV4dC5hdmFpbGFibGVXaWR0aCArIGxpbmVDb250ZXh0LnRyaW1tYWJsZVdp
ZHRoOworICAgIGlmIChpbmxpbmVJdGVtLndpZHRoKCkgPD0gYXZhaWxhYmxlV2lkdGgpCisgICAg
ICAgIHJldHVybiB7IEJyZWFraW5nQmVoYXZpb3I6OktlZXAsIGlzQXRCcmVha2luZ09wcG9ydHVu
aXR5IH07CisgICAgcmV0dXJuIHsgQnJlYWtpbmdCZWhhdmlvcjo6V3JhcCwgaXNBdEJyZWFraW5n
T3Bwb3J0dW5pdHkgfTsKIH0KIAotSW5saW5lTGluZUJyZWFrZXI6OkxpbmVCcmVha2luZ0JlaGF2
aW9yIElubGluZUxpbmVCcmVha2VyOjpsaW5lQnJlYWtpbmdCZWhhdmlvcihjb25zdCBJbmxpbmVS
dW5Qcm92aWRlcjo6UnVuJiBpbmxpbmVSdW4sIGJvb2wgbGluZUlzRW1wdHkpCitMaW5lQnJlYWtl
cjo6QnJlYWtpbmdCZWhhdmlvciBMaW5lQnJlYWtlcjo6d29yZEJyZWFraW5nQmVoYXZpb3IoY29u
c3QgSW5saW5lVGV4dEl0ZW0mIGlubGluZUl0ZW0sIGJvb2wgbGluZUlzRW1wdHkpIGNvbnN0CiB7
Ci0gICAgLy8gTGluZSBicmVha2luZyBiZWhhdmlvdXI6CisgICAgLy8gV29yZCBicmVha2luZyBi
ZWhhdmlvdXI6CiAgICAgLy8gMS4gV2hpdGVzYXBjZSBjb2xsYXBzZSBvbiAtPiBwdXNoIHdoaXRl
c3BhY2UgdG8gbmV4dCBsaW5lLgogICAgIC8vIDIuIFdoaXRlc3BhY2UgY29sbGFwc2Ugb2ZmIC0+
IHdoaXRlc3BhY2UgaXMgc3BsaXQgd2hlcmUgcG9zc2libGUuCiAgICAgLy8gMy4gTm9uLXdoaXRl
c3BhY2UgLT4gZmlyc3QgcnVuIG9uIHRoZSBsaW5lIC0+IGVpdGhlciBzcGxpdCBvciBrZXB0IG9u
IHRoZSBsaW5lLiAoZGVwZW5kcyBvbiBvdmVyZmxvdy13cmFwKQogICAgIC8vIDQuIE5vbi13aGl0
ZXNwYWNlIC0+IGFscmVhZHkgY29udGVudCBvbiB0aGUgbGluZSAtPiBlaXRoZXIgZ2V0cyBzcGxp
dCAod29yZC1icmVhazogYnJlYWstYWxsKSBvciBnZXRzIHB1c2hlZCB0byB0aGUgbmV4dCBsaW5l
LgogICAgIC8vIChIeXBoZW5hdGUgd2hlbiBwb3NzaWJsZSkKICAgICAvLyA1LiBOb24tdGV4dCB0
eXBlIC0+IG5leHQgbGluZQotICAgIGF1dG8mIHN0eWxlID0gaW5saW5lUnVuLnN0eWxlKCk7Cisg
ICAgYXV0byYgc3R5bGUgPSBpbmxpbmVJdGVtLnN0eWxlKCk7CiAKLSAgICBpZiAoaW5saW5lUnVu
LmlzV2hpdGVzcGFjZSgpKQotICAgICAgICByZXR1cm4gc3R5bGUuY29sbGFwc2VXaGl0ZVNwYWNl
KCkgPyBMaW5lQnJlYWtpbmdCZWhhdmlvcjo6V3JhcFRvTmV4dExpbmUgOiBMaW5lQnJlYWtpbmdC
ZWhhdmlvcjo6QnJlYWs7CisgICAgaWYgKGlubGluZUl0ZW0uaXNXaGl0ZXNwYWNlKCkpCisgICAg
ICAgIHJldHVybiBzdHlsZS5jb2xsYXBzZVdoaXRlU3BhY2UoKSA/IEJyZWFraW5nQmVoYXZpb3I6
OldyYXAgOiBCcmVha2luZ0JlaGF2aW9yOjpCcmVhazsKIAotICAgIGlmIChpbmxpbmVSdW4uaXNO
b25XaGl0ZXNwYWNlKCkpIHsKLSAgICAgICAgYXV0byBzaG91bGRIeXBlbmF0ZSA9ICFtX2h5cGhl
bmF0aW9uSXNEaXNhYmxlZCAmJiBzdHlsZS5oeXBoZW5zKCkgPT0gSHlwaGVuczo6QXV0byAmJiBj
YW5IeXBoZW5hdGUoc3R5bGUubG9jYWxlKCkpOwotICAgICAgICBpZiAoc2hvdWxkSHlwZW5hdGUp
Ci0gICAgICAgICAgICByZXR1cm4gTGluZUJyZWFraW5nQmVoYXZpb3I6OkJyZWFrOworICAgIGF1
dG8gc2hvdWxkSHlwZW5hdGUgPSAhbV9oeXBoZW5hdGlvbklzRGlzYWJsZWQgJiYgc3R5bGUuaHlw
aGVucygpID09IEh5cGhlbnM6OkF1dG8gJiYgY2FuSHlwaGVuYXRlKHN0eWxlLmxvY2FsZSgpKTsK
KyAgICBpZiAoc2hvdWxkSHlwZW5hdGUpCisgICAgICAgIHJldHVybiBCcmVha2luZ0JlaGF2aW9y
OjpCcmVhazsKIAotICAgICAgICBpZiAoc3R5bGUuYXV0b1dyYXAoKSkgewotICAgICAgICAgICAg
Ly8gQnJlYWsgYW55IHdvcmQKLSAgICAgICAgICAgIGlmIChzdHlsZS53b3JkQnJlYWsoKSA9PSBX
b3JkQnJlYWs6OkJyZWFrQWxsKQotICAgICAgICAgICAgICAgIHJldHVybiBMaW5lQnJlYWtpbmdC
ZWhhdmlvcjo6QnJlYWs7CisgICAgaWYgKHN0eWxlLmF1dG9XcmFwKCkpIHsKKyAgICAgICAgLy8g
QnJlYWsgYW55IHdvcmQKKyAgICAgICAgaWYgKHN0eWxlLndvcmRCcmVhaygpID09IFdvcmRCcmVh
azo6QnJlYWtBbGwpCisgICAgICAgICAgICByZXR1cm4gQnJlYWtpbmdCZWhhdmlvcjo6QnJlYWs7
CiAKLSAgICAgICAgICAgIC8vIEJyZWFrIGZpcnN0IHJ1biBvbiBsaW5lLgotICAgICAgICAgICAg
aWYgKGxpbmVJc0VtcHR5ICYmIHN0eWxlLmJyZWFrV29yZHMoKSAmJiBzdHlsZS5wcmVzZXJ2ZU5l
d2xpbmUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gTGluZUJyZWFraW5nQmVoYXZpb3I6OkJy
ZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gTm9uLWJyZWFrYWJsZSBub24td2hpdGVzcGFj
ZSBydW4uCi0gICAgICAgIHJldHVybiBsaW5lSXNFbXB0eSA/IExpbmVCcmVha2luZ0JlaGF2aW9y
OjpLZWVwIDogTGluZUJyZWFraW5nQmVoYXZpb3I6OldyYXBUb05leHRMaW5lOworICAgICAgICAv
LyBCcmVhayBmaXJzdCBydW4gb24gbGluZS4KKyAgICAgICAgaWYgKGxpbmVJc0VtcHR5ICYmIHN0
eWxlLmJyZWFrV29yZHMoKSAmJiBzdHlsZS5wcmVzZXJ2ZU5ld2xpbmUoKSkKKyAgICAgICAgICAg
IHJldHVybiBCcmVha2luZ0JlaGF2aW9yOjpCcmVhazsKICAgICB9CiAKLSAgICBBU1NFUlQoaW5s
aW5lUnVuLmlzQm94KCkgfHwgaW5saW5lUnVuLmlzRmxvYXQoKSk7Ci0gICAgLy8gTm9uLXRleHQg
aW5saW5lIHJ1bnMuCi0gICAgcmV0dXJuIExpbmVCcmVha2luZ0JlaGF2aW9yOjpXcmFwVG9OZXh0
TGluZTsKKyAgICAvLyBOb24tYnJlYWthYmxlIG5vbi13aGl0ZXNwYWNlIHJ1bi4KKyAgICByZXR1
cm4gbGluZUlzRW1wdHkgPyBCcmVha2luZ0JlaGF2aW9yOjpLZWVwIDogQnJlYWtpbmdCZWhhdmlv
cjo6V3JhcDsKIH0KIAotTGF5b3V0VW5pdCBJbmxpbmVMaW5lQnJlYWtlcjo6cnVuV2lkdGgoY29u
c3QgSW5saW5lUnVuUHJvdmlkZXI6OlJ1biYgaW5saW5lUnVuLCBMYXlvdXRVbml0IGNvbnRlbnRM
b2dpY2FsTGVmdCkgY29uc3QKK0xheW91dFVuaXQgTGluZUJyZWFrZXI6OnJ1bldpZHRoKGNvbnN0
IElubGluZUl0ZW0mIGlubGluZUl0ZW0sIExheW91dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0KSBj
b25zdAogewotICAgIEFTU0VSVCghaW5saW5lUnVuLmlzTGluZUJyZWFrKCkpOwotCi0gICAgaWYg
KGlubGluZVJ1bi5pc1RleHQoKSkKLSAgICAgICAgcmV0dXJuIHRleHRXaWR0aChpbmxpbmVSdW4s
IGNvbnRlbnRMb2dpY2FsTGVmdCk7CisgICAgaWYgKGlzPElubGluZVRleHRJdGVtPihpbmxpbmVJ
dGVtKSkKKyAgICAgICAgcmV0dXJuIHRleHRXaWR0aChkb3duY2FzdDxJbmxpbmVUZXh0SXRlbT4o
aW5saW5lSXRlbSksIGNvbnRlbnRMb2dpY2FsTGVmdCk7CiAKLSAgICBBU1NFUlQoaW5saW5lUnVu
LmlzQm94KCkgfHwgaW5saW5lUnVuLmlzRmxvYXQoKSk7Ci0gICAgYXV0byYgaW5saW5lSXRlbSA9
IGlubGluZVJ1bi5pbmxpbmVJdGVtKCk7CiAgICAgYXV0byYgbGF5b3V0Qm94ID0gaW5saW5lSXRl
bS5sYXlvdXRCb3goKTsKICAgICBBU1NFUlQobV9sYXlvdXRTdGF0ZS5oYXNEaXNwbGF5Qm94KGxh
eW91dEJveCkpOwogICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBtX2xheW91dFN0YXRlLmRpc3BsYXlC
b3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KTsKLSAgICByZXR1cm4gaW5saW5lSXRlbS5ub25CcmVh
a2FibGVTdGFydCgpICsgZGlzcGxheUJveC53aWR0aCgpICsgaW5saW5lSXRlbS5ub25CcmVha2Fi
bGVFbmQoKTsKLX0KIAotTGF5b3V0VW5pdCBJbmxpbmVMaW5lQnJlYWtlcjo6dGV4dFdpZHRoKGNv
bnN0IElubGluZVJ1blByb3ZpZGVyOjpSdW4mIGlubGluZVJ1biwgTGF5b3V0VW5pdCBjb250ZW50
TG9naWNhbExlZnQpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IEZpbmQgYSB3YXkgdG8gbWVyZ2Ug
dGhpcyBhbmQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpydW5XaWR0aC4KLSAg
ICBhdXRvJiBpbmxpbmVJdGVtID0gaW5saW5lUnVuLmlubGluZUl0ZW0oKTsKLSAgICBhdXRvIHRl
eHRDb250ZXh0ID0gaW5saW5lUnVuLnRleHRDb250ZXh0KCk7Ci0gICAgYXV0byBzdGFydFBvc2l0
aW9uID0gdGV4dENvbnRleHQtPnN0YXJ0KCk7Ci0gICAgYXV0byBsZW5ndGggPSB0ZXh0Q29udGV4
dC0+aXNDb2xsYXBzZWQoKSA/IDEgOiB0ZXh0Q29udGV4dC0+bGVuZ3RoKCk7Ci0KLSAgICAvLyBG
SVhNRTogSXQgZG9lcyBub3QgZG8gcHJvcGVyIGtlcm5pbmcvbGlnYXR1cmUgaGFuZGxpbmcuCi0g
ICAgTGF5b3V0VW5pdCB3aWR0aDsKLSAgICBhdXRvIGl0ZXJhdG9yID0gbV9pbmxpbmVDb250ZW50
LmZpbmQoY29uc3RfY2FzdDxJbmxpbmVJdGVtKj4oJmlubGluZUl0ZW0pKTsKLSNpZiAhQVNTRVJU
X0RJU0FCTEVECi0gICAgYXV0byBpbmxpbmVJdGVtRW5kID0gbV9pbmxpbmVDb250ZW50LmVuZCgp
OwotI2VuZGlmCi0gICAgd2hpbGUgKGxlbmd0aCkgewotICAgICAgICBBU1NFUlQoaXRlcmF0b3Ig
IT0gaW5saW5lSXRlbUVuZCk7Ci0gICAgICAgIGF1dG8mIGN1cnJlbnRJbmxpbmVJdGVtID0gKipp
dGVyYXRvcjsKLSAgICAgICAgYXV0byBpbmxpbmVJdGVtTGVuZ3RoID0gY3VycmVudElubGluZUl0
ZW0udGV4dENvbnRlbnQoKS5sZW5ndGgoKTsKLSAgICAgICAgYXV0byBlbmRQb3NpdGlvbiA9IHN0
ZDo6bWluPEl0ZW1Qb3NpdGlvbj4oc3RhcnRQb3NpdGlvbiArIGxlbmd0aCwgaW5saW5lSXRlbUxl
bmd0aCk7Ci0gICAgICAgIGF1dG8gdGV4dFdpZHRoID0gVGV4dFV0aWw6OndpZHRoKGN1cnJlbnRJ
bmxpbmVJdGVtLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbiwgY29udGVudExvZ2ljYWxMZWZ0
KTsKLQotICAgICAgICBhdXRvIG5vbkJyZWFrYWJsZVN0YXJ0ID0gIXN0YXJ0UG9zaXRpb24gPyBj
dXJyZW50SW5saW5lSXRlbS5ub25CcmVha2FibGVTdGFydCgpIDogMF9sdTsKLSAgICAgICAgYXV0
byBub25CcmVha2FibGVFbmQgPSAgZW5kUG9zaXRpb24gPT0gaW5saW5lSXRlbUxlbmd0aCA/IGN1
cnJlbnRJbmxpbmVJdGVtLm5vbkJyZWFrYWJsZUVuZCgpIDogMF9sdTsKLSAgICAgICAgYXV0byBj
b250ZW50V2lkdGggPSBub25CcmVha2FibGVTdGFydCArIHRleHRXaWR0aCArIG5vbkJyZWFrYWJs
ZUVuZDsKLSAgICAgICAgY29udGVudExvZ2ljYWxMZWZ0ICs9IGNvbnRlbnRXaWR0aDsKLSAgICAg
ICAgd2lkdGggKz0gY29udGVudFdpZHRoOwotICAgICAgICBsZW5ndGggLT0gKGVuZFBvc2l0aW9u
IC0gc3RhcnRQb3NpdGlvbik7Ci0KLSAgICAgICAgc3RhcnRQb3NpdGlvbiA9IDA7Ci0gICAgICAg
ICsraXRlcmF0b3I7Ci0gICAgfQotICAgIHJldHVybiB3aWR0aDsKLX0KKyAgICBpZiAoaW5saW5l
SXRlbS5pc0NvbnRhaW5lclN0YXJ0KCkpCisgICAgICAgIHJldHVybiBkaXNwbGF5Qm94Lm1hcmdp
blN0YXJ0KCkgKyBkaXNwbGF5Qm94LmJvcmRlckxlZnQoKSArIGRpc3BsYXlCb3gucGFkZGluZ0xl
ZnQoKS52YWx1ZU9yKDApOwogCi1JbmxpbmVMaW5lQnJlYWtlcjo6UnVuIElubGluZUxpbmVCcmVh
a2VyOjpzcGxpdFJ1bihjb25zdCBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuJiBpbmxpbmVSdW4sIExh
eW91dFVuaXQsIExheW91dFVuaXQsIGJvb2wpCi17Ci0gICAgcmV0dXJuIHsgUnVuOjpQb3NpdGlv
bjo6VW5kZXRlcm1pbmVkLCB7IH0sIGlubGluZVJ1biB9OworICAgIGlmIChpbmxpbmVJdGVtLmlz
Q29udGFpbmVyRW5kKCkpCisgICAgICAgIHJldHVybiBkaXNwbGF5Qm94Lm1hcmdpbkVuZCgpICsg
ZGlzcGxheUJveC5ib3JkZXJSaWdodCgpICsgZGlzcGxheUJveC5wYWRkaW5nUmlnaHQoKS52YWx1
ZU9yKDApOworCisgICAgaWYgKGlubGluZUl0ZW0uaXNMaW5lQnJlYWsoKSkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICBpZiAoaW5saW5lSXRlbS5pc0Zsb2F0KCkpCisgICAgICAgIHJldHVybiBk
aXNwbGF5Qm94Lm1hcmdpbkJveCgpLndpZHRoKCk7CisKKyAgICByZXR1cm4gZGlzcGxheUJveC53
aWR0aCgpOwogfQogCi1PcHRpb25hbDxJdGVtUG9zaXRpb24+IElubGluZUxpbmVCcmVha2VyOjph
ZGp1c3RTcGxpdFBvc2l0aW9uV2l0aEh5cGhlbmF0aW9uKGNvbnN0IElubGluZVJ1blByb3ZpZGVy
OjpSdW4mLCBJdGVtUG9zaXRpb24sIExheW91dFVuaXQsIExheW91dFVuaXQsIGJvb2wpIGNvbnN0
CitMYXlvdXRVbml0IExpbmVCcmVha2VyOjp0ZXh0V2lkdGgoY29uc3QgSW5saW5lVGV4dEl0ZW0m
IGlubGluZVRleHRJdGVtLCBMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsTGVmdCkgY29uc3QKIHsK
LSAgICByZXR1cm4geyB9OworICAgIGlmIChpbmxpbmVUZXh0SXRlbS5pc0NvbGxhcHNlZCgpKQor
ICAgICAgICByZXR1cm4gVGV4dFV0aWw6OndpZHRoKGRvd25jYXN0PElubGluZUJveD4oaW5saW5l
VGV4dEl0ZW0ubGF5b3V0Qm94KCkpLCBpbmxpbmVUZXh0SXRlbS5zdGFydCgpLCBpbmxpbmVUZXh0
SXRlbS5zdGFydCgpICsgMSwgY29udGVudExvZ2ljYWxMZWZ0KTsKKyAgICByZXR1cm4gVGV4dFV0
aWw6OndpZHRoKGRvd25jYXN0PElubGluZUJveD4oaW5saW5lVGV4dEl0ZW0ubGF5b3V0Qm94KCkp
LCBpbmxpbmVUZXh0SXRlbS5zdGFydCgpLCBpbmxpbmVUZXh0SXRlbS5lbmQoKSwgY29udGVudExv
Z2ljYWxMZWZ0KTsKIH0KLQogfQogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnJlYWtlci5oIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJyZWFrZXIuaAppbmRleCAz
ODdiMGZjZjM1ZjY1NjgxNTBhZjViMDM2Y2EwYWVjOGJjMWI3OTg5Li5hNzk0ZTJkZTFlNDM0ZGY4
Nzk5NTdmN2UxNmU5YTdmYjUzZDY5ZTY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnJlYWtlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCcmVha2VyLmgKQEAgLTI3LDQx
ICsyNywzNiBAQAogCiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCiAKLSNp
bmNsdWRlICJJbmxpbmVSdW5Qcm92aWRlci5oIgotI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4K
LQogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIExheW91dCB7CiAKLWNsYXNzIElubGlu
ZUxpbmVCcmVha2VyIHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKElubGluZUxpbmVCcmVh
a2VyKTsKK2NsYXNzIElubGluZVRleHRJdGVtOworCitjbGFzcyBMaW5lQnJlYWtlciB7CiBwdWJs
aWM6Ci0gICAgSW5saW5lTGluZUJyZWFrZXIoY29uc3QgTGF5b3V0U3RhdGUmLCBjb25zdCBJbmxp
bmVDb250ZW50JiwgY29uc3QgVmVjdG9yPElubGluZVJ1blByb3ZpZGVyOjpSdW4+Jik7CisgICAg
TGluZUJyZWFrZXIoY29uc3QgTGF5b3V0U3RhdGUmKTsKIAotICAgIHN0cnVjdCBSdW4gewotICAg
ICAgICBlbnVtIGNsYXNzIFBvc2l0aW9uIHsgVW5kZXRlcm1pbmVkLCBMaW5lQmVnaW4sIExpbmVF
bmQgfTsKLSAgICAgICAgUG9zaXRpb24gcG9zaXRpb247Ci0gICAgICAgIExheW91dFVuaXQgd2lk
dGg7Ci0gICAgICAgIElubGluZVJ1blByb3ZpZGVyOjpSdW4gY29udGVudDsKKyAgICBlbnVtIGNs
YXNzIEJyZWFraW5nQmVoYXZpb3IgeyBLZWVwLCBCcmVhaywgV3JhcCB9OworICAgIHN0cnVjdCBC
cmVha2luZ0NvbnRleHQgeworICAgICAgICBCcmVha2luZ0JlaGF2aW9yIGJyZWFraW5nQmVoYXZp
b3I7CisgICAgICAgIGJvb2wgaXNBdEJyZWFraW5nT3Bwb3J0dW5pdHkgeyBmYWxzZSB9OworICAg
IH07CisgICAgc3RydWN0IExpbmVDb250ZXh0IHsKKyAgICAgICAgTGF5b3V0VW5pdCBhdmFpbGFi
bGVXaWR0aDsKKyAgICAgICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdDsKKyAgICAgICAgTGF5b3V0
VW5pdCB0cmltbWFibGVXaWR0aDsKKyAgICAgICAgYm9vbCBpc0VtcHR5IHsgZmFsc2UgfTsKICAg
ICB9OwotICAgIE9wdGlvbmFsPFJ1bj4gbmV4dFJ1bihMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2Fs
TGVmdCwgTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCwgYm9vbCBsaW5lSXNFbXB0eSk7CisgICAg
QnJlYWtpbmdDb250ZXh0IGJyZWFraW5nQ29udGV4dChJbmxpbmVJdGVtJiwgY29uc3QgTGluZUNv
bnRleHQpOwogCiBwcml2YXRlOgotICAgIGVudW0gY2xhc3MgTGluZUJyZWFraW5nQmVoYXZpb3Ig
eyBLZWVwLCBCcmVhaywgV3JhcFRvTmV4dExpbmUgfTsKLSAgICBMaW5lQnJlYWtpbmdCZWhhdmlv
ciBsaW5lQnJlYWtpbmdCZWhhdmlvcihjb25zdCBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuJiwgYm9v
bCBsaW5lSXNFbXB0eSk7Ci0gICAgYm9vbCBpc0F0Q29udGVudEVuZCgpIGNvbnN0OwotICAgIFJ1
biBzcGxpdFJ1bihjb25zdCBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuJiwgTGF5b3V0VW5pdCBjb250
ZW50TG9naWNhbExlZnQsIExheW91dFVuaXQgYXZhaWxhYmxlV2lkdGgsIGJvb2wgbGluZUlzRW1w
dHkpOwotICAgIExheW91dFVuaXQgcnVuV2lkdGgoY29uc3QgSW5saW5lUnVuUHJvdmlkZXI6OlJ1
biYsIExheW91dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0KSBjb25zdDsKLSAgICBMYXlvdXRVbml0
IHRleHRXaWR0aChjb25zdCBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuJiwgTGF5b3V0VW5pdCBjb250
ZW50TG9naWNhbExlZnQpIGNvbnN0OwotICAgIE9wdGlvbmFsPEl0ZW1Qb3NpdGlvbj4gYWRqdXN0
U3BsaXRQb3NpdGlvbldpdGhIeXBoZW5hdGlvbihjb25zdCBJbmxpbmVSdW5Qcm92aWRlcjo6UnVu
JiwgSXRlbVBvc2l0aW9uIHNwbGl0UG9zaXRpb24sIExheW91dFVuaXQgY29udGVudExvZ2ljYWxM
ZWZ0LCBMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoLCBib29sIGlzTGluZUVtcHR5KSBjb25zdDsK
IAotICAgIGNvbnN0IExheW91dFN0YXRlJiBtX2xheW91dFN0YXRlOwotICAgIGNvbnN0IElubGlu
ZUNvbnRlbnQmIG1faW5saW5lQ29udGVudDsKLSAgICBjb25zdCBWZWN0b3I8SW5saW5lUnVuUHJv
dmlkZXI6OlJ1bj4mIG1faW5saW5lUnVuczsKKyAgICBCcmVha2luZ0JlaGF2aW9yIHdvcmRCcmVh
a2luZ0JlaGF2aW9yKGNvbnN0IElubGluZVRleHRJdGVtJiwgYm9vbCBsaW5lSXNFbXB0eSkgY29u
c3Q7CisgICAgTGF5b3V0VW5pdCBydW5XaWR0aChjb25zdCBJbmxpbmVJdGVtJiwgTGF5b3V0VW5p
dCBjb250ZW50TG9naWNhbExlZnQpIGNvbnN0OworICAgIExheW91dFVuaXQgdGV4dFdpZHRoKGNv
bnN0IElubGluZVRleHRJdGVtJiwgTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbExlZnQpIGNvbnN0
OwogCi0gICAgdW5zaWduZWQgbV9jdXJyZW50UnVuSW5kZXggeyAwIH07Ci0gICAgT3B0aW9uYWw8
SXRlbVBvc2l0aW9uPiBtX3NwbGl0UG9zaXRpb247Ci0gICAgYm9vbCBtX2h5cGhlbmF0aW9uSXNE
aXNhYmxlZCB7IGZhbHNlIH07CisgICAgY29uc3QgTGF5b3V0U3RhdGUmIG1fbGF5b3V0U3RhdGU7
CisgICAgYm9vbCBtX2h5cGhlbmF0aW9uSXNEaXNhYmxlZCB7IHRydWUgfTsKIH07CiAKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZVJ1
bi5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lUnVuLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2NTU0NDE2YWE1MTE1MDI5ZjVkNTNmNmEw
NDcxYmVkZDFlZTExNWUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lUnVuLmgK
KysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25j
ZQotCi0jaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCi0KLSNpbmNsdWRlICJJ
bmxpbmVSdW5Qcm92aWRlci5oIgotI2luY2x1ZGUgIkxheW91dFVuaXQuaCIKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotbmFtZXNwYWNlIExheW91dCB7Ci0KLXN0cnVjdCBJbmxpbmVSdW4gewotICAg
IElubGluZVJ1bihEaXNwbGF5OjpCb3g6OlJlY3QgbG9naWNhbFJlY3QsIGNvbnN0IElubGluZUl0
ZW0mKTsKLQotICAgIExheW91dFVuaXQgbG9naWNhbExlZnQoKSBjb25zdCB7IHJldHVybiBtX2xv
Z2ljYWxSZWN0LmxlZnQoKTsgfQotICAgIExheW91dFVuaXQgbG9naWNhbFJpZ2h0KCkgY29uc3Qg
eyByZXR1cm4gbV9sb2dpY2FsUmVjdC5yaWdodCgpOyB9Ci0gICAgTGF5b3V0VW5pdCBsb2dpY2Fs
VG9wKCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsUmVjdC50b3AoKTsgfQotICAgIExheW91dFVu
aXQgbG9naWNhbEJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFJlY3QuYm90dG9tKCk7
IH0KLQotICAgIExheW91dFVuaXQgbG9naWNhbFdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9sb2dp
Y2FsUmVjdC53aWR0aCgpOyB9Ci0gICAgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0KCkgY29uc3Qg
eyByZXR1cm4gbV9sb2dpY2FsUmVjdC5oZWlnaHQoKTsgfQotICAgIGJvb2wgb3ZlcmxhcHNNdWx0
aXBsZUlubGluZUl0ZW1zKCkgY29uc3Q7Ci0KLSAgICB2b2lkIHNldExvZ2ljYWxXaWR0aChMYXlv
dXRVbml0IHdpZHRoKSB7IG1fbG9naWNhbFJlY3Quc2V0V2lkdGgod2lkdGgpOyB9Ci0gICAgdm9p
ZCBzZXRMb2dpY2FsTGVmdChMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0KSB7IG1fbG9naWNhbFJlY3Qu
c2V0TGVmdChsb2dpY2FsTGVmdCk7IH0KLSAgICB2b2lkIHNldExvZ2ljYWxSaWdodChMYXlvdXRV
bml0IGxvZ2ljYWxSaWdodCkgeyBtX2xvZ2ljYWxSZWN0LnNoaWZ0UmlnaHRUbyhsb2dpY2FsUmln
aHQpOyB9Ci0gICAgdm9pZCBtb3ZlVmVydGljYWxseShMYXlvdXRVbml0IGRlbHRhKSB7IG1fbG9n
aWNhbFJlY3QubW92ZVZlcnRpY2FsbHkoZGVsdGEpOyB9Ci0gICAgdm9pZCBtb3ZlSG9yaXpvbnRh
bGx5KExheW91dFVuaXQgZGVsdGEpIHsgbV9sb2dpY2FsUmVjdC5tb3ZlSG9yaXpvbnRhbGx5KGRl
bHRhKTsgfQotCi0gICAgc3RydWN0IEV4cGFuc2lvbk9wcG9ydHVuaXR5IHsKLSAgICAgICAgdW5z
aWduZWQgY291bnQgeyAwIH07Ci0gICAgICAgIEV4cGFuc2lvbkJlaGF2aW9yIGJlaGF2aW9yIHsg
Rm9yYmlkTGVhZGluZ0V4cGFuc2lvbiB8IEZvcmJpZFRyYWlsaW5nRXhwYW5zaW9uIH07Ci0gICAg
ICAgIExheW91dFVuaXQgZXhwYW5zaW9uOwotICAgIH07Ci0gICAgRXhwYW5zaW9uT3Bwb3J0dW5p
dHkmIGV4cGFuc2lvbk9wcG9ydHVuaXR5KCkgeyByZXR1cm4gbV9leHBhbnNpb25PcHBvcnR1bml0
eTsgfQotCi0gICAgc3RydWN0IFRleHRDb250ZXh0IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFRl
eHRDb250ZXh0KEl0ZW1Qb3NpdGlvbiwgdW5zaWduZWQgbGVuZ3RoKTsKLQotICAgICAgICB2b2lk
IHNldFN0YXJ0KEl0ZW1Qb3NpdGlvbiBzdGFydCkgeyBtX3N0YXJ0ID0gc3RhcnQ7IH0KLSAgICAg
ICAgdm9pZCBzZXRMZW5ndGgodW5zaWduZWQgbGVuZ3RoKSB7IG1fbGVuZ3RoID0gbGVuZ3RoOyB9
Ci0KLSAgICAgICAgSXRlbVBvc2l0aW9uIHN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9zdGFydDsg
fQotICAgICAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQot
Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgSXRlbVBvc2l0aW9uIG1fc3RhcnQ7Ci0gICAgICAgIHVu
c2lnbmVkIG1fbGVuZ3RoOwotICAgIH07Ci0gICAgdm9pZCBzZXRUZXh0Q29udGV4dChUZXh0Q29u
dGV4dCB0ZXh0Q29udGV4dCkgeyBtX3RleHRDb250ZXh0LmVtcGxhY2UodGV4dENvbnRleHQpOyB9
Ci0gICAgT3B0aW9uYWw8VGV4dENvbnRleHQ+JiB0ZXh0Q29udGV4dCgpIHsgcmV0dXJuIG1fdGV4
dENvbnRleHQ7IH0KLSAgICBPcHRpb25hbDxUZXh0Q29udGV4dD4gdGV4dENvbnRleHQoKSBjb25z
dCB7IHJldHVybiBtX3RleHRDb250ZXh0OyB9Ci0KLSAgICBjb25zdCBJbmxpbmVJdGVtJiBpbmxp
bmVJdGVtKCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVJdGVtOyB9Ci0KLXByaXZhdGU6Ci0gICAg
RGlzcGxheTo6Qm94OjpSZWN0IG1fbG9naWNhbFJlY3Q7Ci0gICAgRXhwYW5zaW9uT3Bwb3J0dW5p
dHkgbV9leHBhbnNpb25PcHBvcnR1bml0eTsKLQotICAgIGNvbnN0IElubGluZUl0ZW0mIG1faW5s
aW5lSXRlbTsKLSAgICBPcHRpb25hbDxUZXh0Q29udGV4dD4gbV90ZXh0Q29udGV4dDsKLX07Ci0K
LXVzaW5nIElubGluZVJ1bnMgPSBWZWN0b3I8SW5saW5lUnVuPjsKLQotaW5saW5lIElubGluZVJ1
bjo6SW5saW5lUnVuKERpc3BsYXk6OkJveDo6UmVjdCBsb2dpY2FsUmVjdCwgY29uc3QgSW5saW5l
SXRlbSYgaW5saW5lSXRlbSkKLSAgICA6IG1fbG9naWNhbFJlY3QobG9naWNhbFJlY3QpCi0gICAg
LCBtX2lubGluZUl0ZW0oaW5saW5lSXRlbSkKLXsKLX0KLQotaW5saW5lIElubGluZVJ1bjo6VGV4
dENvbnRleHQ6OlRleHRDb250ZXh0KEl0ZW1Qb3NpdGlvbiBzdGFydCwgdW5zaWduZWQgbGVuZ3Ro
KQotICAgIDogbV9zdGFydChzdGFydCkKLSAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKLXsKLX0KLQot
aW5saW5lIGJvb2wgSW5saW5lUnVuOjpvdmVybGFwc011bHRpcGxlSW5saW5lSXRlbXMoKSBjb25z
dAotewotICAgIC8vIE9ubHkgdGV4dCBjb250ZW50IGNhbiBvdmVybGFwIG11bHRpcGxlIGlubGlu
ZSBlbGVtZW50cy4KLSAgICBpZiAoIW1fdGV4dENvbnRleHQpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGF1dG8gZW5kUG9zaXRpb24gPSBtX3RleHRDb250ZXh0LT5zdGFydCgpICsgbV90
ZXh0Q29udGV4dC0+bGVuZ3RoKCk7Ci0gICAgcmV0dXJuIGVuZFBvc2l0aW9uID4gbV9pbmxpbmVJ
dGVtLnRleHRDb250ZW50KCkubGVuZ3RoKCk7Ci19Ci0KLX0KLX0KLSNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lUnVuUHJvdmlk
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lUnVu
UHJvdmlkZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWIyMGYwYWZkNzEy
YjUzNjIwMWQwNmY3Y2I0Mzc1ZThiMWU0Y2Q5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5n
L0lubGluZVJ1blByb3ZpZGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE5OCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIklubGluZVJ1blByb3Zp
ZGVyLmgiCi0KLSNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKLQotI2luY2x1
ZGUgIkJyZWFrTGluZXMuaCIKLSNpbmNsdWRlICJMYXlvdXRJbmxpbmVCb3guaCIKLSNpbmNsdWRl
IDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1uYW1lc3Bh
Y2UgTGF5b3V0IHsKLQotV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKElubGluZVJ1blByb3Zp
ZGVyKTsKLQotSW5saW5lUnVuUHJvdmlkZXI6OklubGluZVJ1blByb3ZpZGVyKCkKLXsKLX0KLQot
dm9pZCBJbmxpbmVSdW5Qcm92aWRlcjo6YXBwZW5kKGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0
ZW0pCi17Ci0gICAgc3dpdGNoIChpbmxpbmVJdGVtLnR5cGUoKSkgewotICAgIGNhc2UgSW5saW5l
SXRlbTo6VHlwZTo6VGV4dDoKLSAgICAgICAgLy8gU3BlY2lhbCBjYXNlIHRleHQgY29udGVudC4g
VGhleSBjYW4gb3ZlcmxhcCBtdWx0aXBsZSBpdGVtcy4gPHNwYW4+Zm9vPC9zcGFuPjxzcGFuPmJh
cjwvc3Bhbj4KLSAgICAgICAgcHJvY2Vzc0lubGluZVRleHRJdGVtKGlubGluZUl0ZW0pOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIElubGluZUl0ZW06OlR5cGU6OkhhcmRMaW5lQnJlYWs6Ci0g
ICAgICAgIG1faW5saW5lUnVucy5hcHBlbmQoSW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6Y3JlYXRl
SGFyZExpbmVCcmVha1J1bihpbmxpbmVJdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
SW5saW5lSXRlbTo6VHlwZTo6SW5saW5lQm94OgotICAgICAgICBtX2lubGluZVJ1bnMuYXBwZW5k
KElubGluZVJ1blByb3ZpZGVyOjpSdW46OmNyZWF0ZUJveFJ1bihpbmxpbmVJdGVtKSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgSW5saW5lSXRlbTo6VHlwZTo6RmxvYXQ6Ci0gICAgICAgIG1f
aW5saW5lUnVucy5hcHBlbmQoSW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6Y3JlYXRlRmxvYXRSdW4o
aW5saW5lSXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NF
UlRfTk9UX0lNUExFTUVOVEVEX1lFVCgpOwotICAgIH0KLX0KLQotdm9pZCBJbmxpbmVSdW5Qcm92
aWRlcjo6aW5zZXJ0QmVmb3JlKGNvbnN0IEJveCYsIGNvbnN0IEJveCYpCi17Ci19Ci0KLXZvaWQg
SW5saW5lUnVuUHJvdmlkZXI6OnJlbW92ZShjb25zdCBCb3gmKQotewotfQotCi1zdGF0aWMgaW5s
aW5lIGJvb2wgaXNXaGl0ZXNwYWNlKGNoYXIgY2hhcmFjdGVyLCBib29sIHByZXNlcnZlTmV3bGlu
ZSkKLXsKLSAgICByZXR1cm4gY2hhcmFjdGVyID09ICcgJyB8fCBjaGFyYWN0ZXIgPT0gJ1x0JyB8
fCAoY2hhcmFjdGVyID09ICdcbicgJiYgIXByZXNlcnZlTmV3bGluZSk7Ci19Ci0KLXN0YXRpYyBp
bmxpbmUgYm9vbCBpc1NvZnRMaW5lQnJlYWsoY2hhciBjaGFyYWN0ZXIsIGJvb2wgcHJlc2VydmVO
ZXdsaW5lKQotewotICAgIHJldHVybiBwcmVzZXJ2ZU5ld2xpbmUgJiYgY2hhcmFjdGVyID09ICdc
bic7Ci19Ci0KLWJvb2wgSW5saW5lUnVuUHJvdmlkZXI6OmlzQ29udGlub3VzQ29udGVudChJbmxp
bmVSdW5Qcm92aWRlcjo6UnVuOjpUeXBlIG5ld1J1blR5cGUsIGNvbnN0IElubGluZUl0ZW0mIG5l
d0lubGluZUl0ZW0pCi17Ci0gICAgaWYgKG1faW5saW5lUnVucy5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8mIGxhc3RSdW4gPSBtX2lubGluZVJ1bnMubGFzdCgp
OwotICAgIC8vIFNhbWUgZWxlbWVudCwgY2hlY2sgdHlwZSBvbmx5LgotICAgIGlmICgmbmV3SW5s
aW5lSXRlbSA9PSAmbGFzdFJ1bi5pbmxpbmVJdGVtKCkpCi0gICAgICAgIHJldHVybiBuZXdSdW5U
eXBlID09IGxhc3RSdW4udHlwZSgpOwotCi0gICAgLy8gVGhpcyBuZXcgcnVuIGlzIGZyb20gYSBk
aWZmZXJlbnQgaW5saW5lIGJveC4KLSAgICAvLyBGSVhNRTogY2hlY2sgc3R5bGUuCi0gICAgaWYg
KG5ld1J1blR5cGUgPT0gSW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6VHlwZTo6Tm9uV2hpdGVzcGFj
ZSAmJiBsYXN0UnVuLmlzTm9uV2hpdGVzcGFjZSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQot
ICAgIGlmIChuZXdSdW5UeXBlID09IElubGluZVJ1blByb3ZpZGVyOjpSdW46OlR5cGU6OldoaXRl
c3BhY2UgJiYgbGFzdFJ1bi5pc1doaXRlc3BhY2UoKSkKLSAgICAgICAgcmV0dXJuIG5ld0lubGlu
ZUl0ZW0uc3R5bGUoKS5jb2xsYXBzZVdoaXRlU3BhY2UoKSA9PSBsYXN0UnVuLnN0eWxlKCkuY29s
bGFwc2VXaGl0ZVNwYWNlKCk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgSW5saW5l
UnVuUHJvdmlkZXI6OnByb2Nlc3NJbmxpbmVUZXh0SXRlbShjb25zdCBJbmxpbmVJdGVtJiBpbmxp
bmVJdGVtKQotewotICAgIC8vIFdlIG5lZWQgdG8gcmVzZXQgdGhlIHJ1biBpdGVyYXRvciB3aGVu
IHRoZSB0ZXh0IGNvbnRlbnQgaXMgbm90IGNvbnRpbnVvdXMuCi0gICAgLy8gPHNwYW4+Zm9vPC9z
cGFuPjxpbWcgc3JjPSIiPjxzcGFuPmJhcjwvc3Bhbj4gKEZJWE1FOiBmbG9hdHM/KQotICAgIGlm
ICghbV9pbmxpbmVSdW5zLmlzRW1wdHkoKSAmJiAhbV9pbmxpbmVSdW5zLmxhc3QoKS5pc1RleHQo
KSkgewotICAgICAgICBtX2xpbmVCcmVha0l0ZXJhdG9yLnJlc2V0UHJpb3JDb250ZXh0KCk7Ci0g
ICAgICAgIG1fbGluZUJyZWFrSXRlcmF0b3IucmVzZXRTdHJpbmdBbmRSZWxlYXNlSXRlcmF0b3Io
IiIsICIiLCBMaW5lQnJlYWtJdGVyYXRvck1vZGU6OkRlZmF1bHQpOwotICAgIH0KLQotICAgIGF1
dG8mIHN0eWxlID0gaW5saW5lSXRlbS5zdHlsZSgpOwotICAgIGF1dG8gdGV4dCA9IGlubGluZUl0
ZW0udGV4dENvbnRlbnQoKTsKLSAgICBJdGVtUG9zaXRpb24gY3VycmVudEl0ZW1Qb3NpdGlvbiA9
IDA7Ci0gICAgd2hpbGUgKGN1cnJlbnRJdGVtUG9zaXRpb24gPCB0ZXh0Lmxlbmd0aCgpKSB7Ci0K
LSAgICAgICAgLy8gU29mdCBsaW5lYnJlYWs/Ci0gICAgICAgIGlmIChpc1NvZnRMaW5lQnJlYWso
dGV4dFtjdXJyZW50SXRlbVBvc2l0aW9uXSwgc3R5bGUucHJlc2VydmVOZXdsaW5lKCkpKSB7Ci0g
ICAgICAgICAgICBtX2lubGluZVJ1bnMuYXBwZW5kKElubGluZVJ1blByb3ZpZGVyOjpSdW46OmNy
ZWF0ZVNvZnRMaW5lQnJlYWtSdW4oaW5saW5lSXRlbSkpOwotICAgICAgICAgICAgKytjdXJyZW50
SXRlbVBvc2l0aW9uOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAg
ICBhdXRvIGlzV2hpdGVzcGFjZVJ1biA9IGlzV2hpdGVzcGFjZSh0ZXh0W2N1cnJlbnRJdGVtUG9z
aXRpb25dLCBzdHlsZS5wcmVzZXJ2ZU5ld2xpbmUoKSk7Ci0gICAgICAgIGF1dG8gbGVuZ3RoID0g
aXNXaGl0ZXNwYWNlUnVuID8gbW92ZVRvTmV4dE5vbldoaXRlc3BhY2VQb3NpdGlvbihpbmxpbmVJ
dGVtLCBjdXJyZW50SXRlbVBvc2l0aW9uKSA6IG1vdmVUb05leHRCcmVha2FibGVQb3NpdGlvbihp
bmxpbmVJdGVtLCBjdXJyZW50SXRlbVBvc2l0aW9uKTsKLQotICAgICAgICBpZiAoaXNDb250aW5v
dXNDb250ZW50KGlzV2hpdGVzcGFjZVJ1biA/IElubGluZVJ1blByb3ZpZGVyOjpSdW46OlR5cGU6
OldoaXRlc3BhY2UgOiBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpUeXBlOjpOb25XaGl0ZXNwYWNl
LCBpbmxpbmVJdGVtKSkKLSAgICAgICAgICAgIG1faW5saW5lUnVucy5sYXN0KCkudGV4dENvbnRl
eHQoKS0+ZXhwYW5kKGxlbmd0aCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgbV9pbmxp
bmVSdW5zLmFwcGVuZChpc1doaXRlc3BhY2VSdW4gPyBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpj
cmVhdGVXaGl0ZXNwYWNlUnVuKGlubGluZUl0ZW0sIGN1cnJlbnRJdGVtUG9zaXRpb24sIGxlbmd0
aCwgc3R5bGUuY29sbGFwc2VXaGl0ZVNwYWNlKCkpCi0gICAgICAgICAgICAgICAgOiBJbmxpbmVS
dW5Qcm92aWRlcjo6UnVuOjpjcmVhdGVOb25XaGl0ZXNwYWNlUnVuKGlubGluZUl0ZW0sIGN1cnJl
bnRJdGVtUG9zaXRpb24sIGxlbmd0aCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgY3VycmVudEl0
ZW1Qb3NpdGlvbiArPSBsZW5ndGg7Ci0gICAgfQotfQotCi11bnNpZ25lZCBJbmxpbmVSdW5Qcm92
aWRlcjo6bW92ZVRvTmV4dE5vbldoaXRlc3BhY2VQb3NpdGlvbihjb25zdCBJbmxpbmVJdGVtJiBp
bmxpbmVJdGVtLCBJdGVtUG9zaXRpb24gY3VycmVudEl0ZW1Qb3NpdGlvbikKLXsKLSAgICBhdXRv
IHRleHQgPSBpbmxpbmVJdGVtLnRleHRDb250ZW50KCk7Ci0gICAgYXV0byBwcmVzZXJ2ZU5ld2xp
bmUgPSBpbmxpbmVJdGVtLnN0eWxlKCkucHJlc2VydmVOZXdsaW5lKCk7Ci0gICAgYXV0byBuZXh0
Tm9uV2hpdGVTcGFjZVBvc2l0aW9uID0gY3VycmVudEl0ZW1Qb3NpdGlvbjsKLQotICAgIHdoaWxl
IChuZXh0Tm9uV2hpdGVTcGFjZVBvc2l0aW9uIDwgdGV4dC5sZW5ndGgoKSAmJiBpc1doaXRlc3Bh
Y2UodGV4dFtuZXh0Tm9uV2hpdGVTcGFjZVBvc2l0aW9uXSwgcHJlc2VydmVOZXdsaW5lKSkKLSAg
ICAgICAgKytuZXh0Tm9uV2hpdGVTcGFjZVBvc2l0aW9uOwotICAgIHJldHVybiBuZXh0Tm9uV2hp
dGVTcGFjZVBvc2l0aW9uIC0gY3VycmVudEl0ZW1Qb3NpdGlvbjsKLX0KLQotdW5zaWduZWQgSW5s
aW5lUnVuUHJvdmlkZXI6Om1vdmVUb05leHRCcmVha2FibGVQb3NpdGlvbihjb25zdCBJbmxpbmVJ
dGVtJiBpbmxpbmVJdGVtLCBJdGVtUG9zaXRpb24gY3VycmVudEl0ZW1Qb3NpdGlvbikKLXsKLSAg
ICBhdXRvIGZpbmROZXh0QnJlYWthYmxlUG9zaXRpb24gPSBbJl0oYXV0byBpbmxpbmVUZXh0LCBh
dXRvJiBzdHlsZSwgSXRlbVBvc2l0aW9uIHN0YXJ0UG9zaXRpb24pIHsKLSAgICAgICAgLy8gU3dh
cCBpdGVyYXRvcidzIGNvbnRlbnQgaWYgd2UgYWR2YW5jZWQgdG8gYSBuZXcgc3RyaW5nLgotICAg
ICAgICBhdXRvIGl0ZXJhdG9yVGV4dCA9IG1fbGluZUJyZWFrSXRlcmF0b3Iuc3RyaW5nVmlldygp
OwotCi0gICAgICAgIGlmIChpdGVyYXRvclRleHQgIT0gaW5saW5lVGV4dCkgewotICAgICAgICAg
ICAgYXV0byB0ZXh0TGVuZ3RoID0gaXRlcmF0b3JUZXh0Lmxlbmd0aCgpOwotICAgICAgICAgICAg
YXV0byBsYXN0Q2hhcmFjdGVyID0gdGV4dExlbmd0aCA+IDAgPyBpdGVyYXRvclRleHRbdGV4dExl
bmd0aCAtIDFdIDogMDsKLSAgICAgICAgICAgIGF1dG8gc2Vjb25kVG9MYXN0Q2hhcmFjdGVyID0g
dGV4dExlbmd0aCA+IDEgPyBpdGVyYXRvclRleHRbdGV4dExlbmd0aCAtIDJdIDogMDsKLSAgICAg
ICAgICAgIG1fbGluZUJyZWFrSXRlcmF0b3Iuc2V0UHJpb3JDb250ZXh0KGxhc3RDaGFyYWN0ZXIs
IHNlY29uZFRvTGFzdENoYXJhY3Rlcik7Ci0gICAgICAgICAgICBtX2xpbmVCcmVha0l0ZXJhdG9y
LnJlc2V0U3RyaW5nQW5kUmVsZWFzZUl0ZXJhdG9yKGlubGluZVRleHQsIHN0eWxlLmxvY2FsZSgp
LCBMaW5lQnJlYWtJdGVyYXRvck1vZGU6OkRlZmF1bHQpOwotICAgICAgICB9Ci0KLSAgICAgICAg
YXV0byBrZWVwQWxsV29yZHNGb3JDSksgPSBzdHlsZS53b3JkQnJlYWsoKSA9PSBXb3JkQnJlYWs6
OktlZXBBbGw7Ci0gICAgICAgIGF1dG8gYnJlYWtOQlNQID0gc3R5bGUuYXV0b1dyYXAoKSAmJiBz
dHlsZS5uYnNwTW9kZSgpID09IE5CU1BNb2RlOjpTcGFjZTsKLQotICAgICAgICBpZiAoa2VlcEFs
bFdvcmRzRm9yQ0pLKSB7Ci0gICAgICAgICAgICBpZiAoYnJlYWtOQlNQKQotICAgICAgICAgICAg
ICAgIHJldHVybiBuZXh0QnJlYWthYmxlUG9zaXRpb25LZWVwaW5nQWxsV29yZHMobV9saW5lQnJl
YWtJdGVyYXRvciwgc3RhcnRQb3NpdGlvbik7Ci0gICAgICAgICAgICByZXR1cm4gbmV4dEJyZWFr
YWJsZVBvc2l0aW9uS2VlcGluZ0FsbFdvcmRzSWdub3JpbmdOQlNQKG1fbGluZUJyZWFrSXRlcmF0
b3IsIHN0YXJ0UG9zaXRpb24pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1fbGluZUJyZWFr
SXRlcmF0b3IubW9kZSgpID09IExpbmVCcmVha0l0ZXJhdG9yTW9kZTo6RGVmYXVsdCkgewotICAg
ICAgICAgICAgaWYgKGJyZWFrTkJTUCkKLSAgICAgICAgICAgICAgICByZXR1cm4gV2ViQ29yZTo6
bmV4dEJyZWFrYWJsZVBvc2l0aW9uKG1fbGluZUJyZWFrSXRlcmF0b3IsIHN0YXJ0UG9zaXRpb24p
OwotICAgICAgICAgICAgcmV0dXJuIG5leHRCcmVha2FibGVQb3NpdGlvbklnbm9yaW5nTkJTUCht
X2xpbmVCcmVha0l0ZXJhdG9yLCBzdGFydFBvc2l0aW9uKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChicmVha05CU1ApCi0gICAgICAgICAgICByZXR1cm4gbmV4dEJyZWFrYWJsZVBvc2l0aW9u
V2l0aG91dFNob3J0Y3V0KG1fbGluZUJyZWFrSXRlcmF0b3IsIHN0YXJ0UG9zaXRpb24pOwotICAg
ICAgICByZXR1cm4gbmV4dEJyZWFrYWJsZVBvc2l0aW9uSWdub3JpbmdOQlNQV2l0aG91dFNob3J0
Y3V0KG1fbGluZUJyZWFrSXRlcmF0b3IsIHN0YXJ0UG9zaXRpb24pOwotICAgIH07Ci0KLSAgICBh
dXRvJiBzdHlsZSA9IGlubGluZUl0ZW0uc3R5bGUoKTsKLSAgICBhdXRvIHRleHRMZW5ndGggPSBp
bmxpbmVJdGVtLnRleHRDb250ZW50KCkubGVuZ3RoKCk7Ci0gICAgQVNTRVJUKHRleHRMZW5ndGgp
OwotICAgIHdoaWxlIChjdXJyZW50SXRlbVBvc2l0aW9uIDwgdGV4dExlbmd0aCAtIDEpIHsKLSAg
ICAgICAgYXV0byBuZXh0QnJlYWthYmxlUG9zaXRpb24gPSBmaW5kTmV4dEJyZWFrYWJsZVBvc2l0
aW9uKGlubGluZUl0ZW0udGV4dENvbnRlbnQoKSwgc3R5bGUsIGN1cnJlbnRJdGVtUG9zaXRpb24p
OwotICAgICAgICBpZiAobmV4dEJyZWFrYWJsZVBvc2l0aW9uICE9IGN1cnJlbnRJdGVtUG9zaXRp
b24pCi0gICAgICAgICAgICByZXR1cm4gbmV4dEJyZWFrYWJsZVBvc2l0aW9uIC0gY3VycmVudEl0
ZW1Qb3NpdGlvbjsKLSAgICAgICAgKytjdXJyZW50SXRlbVBvc2l0aW9uOwotICAgIH0KLSAgICBy
ZXR1cm4gdGV4dExlbmd0aDsKLX0KLQotfQotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVSdW5Qcm92aWRlci5oIGIvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lUnVuUHJvdmlkZXIuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDc3YzE0OGVlZWUwY2FkYTI0NTY2MWVmZWI4
ZmM1NjdkZWVkODYwOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVSdW5Qcm92
aWRlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTY5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJh
Z21hIG9uY2UKLQotI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQotCi0jaW5j
bHVkZSAiSW5saW5lSXRlbS5oIgotI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9UZXh0QnJlYWtJdGVyYXRvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1u
YW1lc3BhY2UgTGF5b3V0IHsKLQotdXNpbmcgSXRlbVBvc2l0aW9uID0gdW5zaWduZWQ7Ci0KLWNs
YXNzIElubGluZVJ1blByb3ZpZGVyIHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKElubGlu
ZVJ1blByb3ZpZGVyKTsKLXB1YmxpYzoKLSAgICBJbmxpbmVSdW5Qcm92aWRlcigpOwotCi0gICAg
dm9pZCBhcHBlbmQoY29uc3QgSW5saW5lSXRlbSYpOwotICAgIHZvaWQgaW5zZXJ0QmVmb3JlKGNv
bnN0IEJveCYsIGNvbnN0IEJveCYgYmVmb3JlKTsKLSAgICB2b2lkIHJlbW92ZShjb25zdCBCb3gm
KTsKLQotICAgIHN0cnVjdCBSdW4gewotCi0gICAgICAgIHN0YXRpYyBSdW4gY3JlYXRlQm94UnVu
KGNvbnN0IElubGluZUl0ZW0mKTsKLSAgICAgICAgc3RhdGljIFJ1biBjcmVhdGVGbG9hdFJ1bihj
b25zdCBJbmxpbmVJdGVtJik7Ci0gICAgICAgIHN0YXRpYyBSdW4gY3JlYXRlSGFyZExpbmVCcmVh
a1J1bihjb25zdCBJbmxpbmVJdGVtJik7Ci0gICAgICAgIHN0YXRpYyBSdW4gY3JlYXRlU29mdExp
bmVCcmVha1J1bihjb25zdCBJbmxpbmVJdGVtJik7Ci0gICAgICAgIHN0YXRpYyBSdW4gY3JlYXRl
V2hpdGVzcGFjZVJ1bihjb25zdCBJbmxpbmVJdGVtJiwgSXRlbVBvc2l0aW9uIHN0YXJ0LCB1bnNp
Z25lZCBsZW5ndGgsIGJvb2wgaXNDb2xsYXBzaWJsZSk7Ci0gICAgICAgIHN0YXRpYyBSdW4gY3Jl
YXRlTm9uV2hpdGVzcGFjZVJ1bihjb25zdCBJbmxpbmVJdGVtJiwgSXRlbVBvc2l0aW9uIHN0YXJ0
LCB1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgICAgIGVudW0gY2xhc3MgVHlwZSB7Ci0gICAgICAg
ICAgICBCb3gsCi0gICAgICAgICAgICBGbG9hdCwKLSAgICAgICAgICAgIFNvZnRMaW5lQnJlYWss
Ci0gICAgICAgICAgICBIYXJkTGluZUJyZWFrLAotICAgICAgICAgICAgV2hpdGVzcGFjZSwKLSAg
ICAgICAgICAgIE5vbldoaXRlc3BhY2UKLSAgICAgICAgfTsKLSAgICAgICAgVHlwZSB0eXBlKCkg
Y29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0gICAgICAgIGJvb2wgaXNUZXh0KCkgY29uc3QgeyBy
ZXR1cm4gbV90eXBlID09IFJ1bjo6VHlwZTo6V2hpdGVzcGFjZSB8fCBtX3R5cGUgPT0gUnVuOjpU
eXBlOjpOb25XaGl0ZXNwYWNlIHx8IG1fdHlwZSA9PSBSdW46OlR5cGU6OlNvZnRMaW5lQnJlYWsg
fHwgbV90eXBlID09IFJ1bjo6VHlwZTo6SGFyZExpbmVCcmVhazsgfQotICAgICAgICBib29sIGlz
V2hpdGVzcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBUeXBlOjpXaGl0ZXNwYWNlOyB9
Ci0gICAgICAgIGJvb2wgaXNOb25XaGl0ZXNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09
IFR5cGU6Ok5vbldoaXRlc3BhY2U7IH0KLSAgICAgICAgYm9vbCBpc0xpbmVCcmVhaygpIGNvbnN0
IHsgcmV0dXJuIG1fdHlwZSA9PSBSdW46OlR5cGU6OlNvZnRMaW5lQnJlYWsgfHwgbV90eXBlID09
IFJ1bjo6VHlwZTo6SGFyZExpbmVCcmVhazsgfQotICAgICAgICBib29sIGlzQm94KCkgY29uc3Qg
eyByZXR1cm4gbV90eXBlID09IFR5cGU6OkJveDsgfQotICAgICAgICBib29sIGlzRmxvYXQoKSBj
b25zdCB7IHJldHVybiBtX3R5cGUgPT0gVHlwZTo6RmxvYXQ7IH0KLQotICAgICAgICBzdHJ1Y3Qg
VGV4dENvbnRleHQgewotCi0gICAgICAgICAgICBlbnVtIGNsYXNzIElzQ29sbGFwc2VkIHsgTm8s
IFllcyB9OwotICAgICAgICAgICAgVGV4dENvbnRleHQoSXRlbVBvc2l0aW9uLCB1bnNpZ25lZCBs
ZW5ndGgsIElzQ29sbGFwc2VkKTsKLQotICAgICAgICAgICAgSXRlbVBvc2l0aW9uIHN0YXJ0KCkg
Y29uc3QgeyByZXR1cm4gbV9zdGFydDsgfQotICAgICAgICAgICAgLy8gTm90ZSB0aGF0ICdlbmQn
IHBvc2l0aW9uIGRvZXMgbm90IGVxdWFsIHRvIHN0YXJ0ICsgbGVuZ3RoIHdoZW4gcnVuIG92ZXJs
YXBzIG11bHRpcGxlIElubGluZUl0ZW1zLgotICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoKCkg
Y29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KLSAgICAgICAgICAgIGJvb2wgaXNDb2xsYXBzZWQo
KSBjb25zdCB7IHJldHVybiBtX2lzQ29sbGFwc2VkID09IElzQ29sbGFwc2VkOjpZZXM7IH0KLQot
ICAgICAgICBwcml2YXRlOgotICAgICAgICAgICAgZnJpZW5kIGNsYXNzIElubGluZVJ1blByb3Zp
ZGVyOwotCi0gICAgICAgICAgICB2b2lkIGV4cGFuZCh1bnNpZ25lZCBsZW5ndGgpIHsgbV9sZW5n
dGggKz0gbGVuZ3RoOyB9Ci0KLSAgICAgICAgICAgIEl0ZW1Qb3NpdGlvbiBtX3N0YXJ0IHsgMCB9
OwotICAgICAgICAgICAgdW5zaWduZWQgbV9sZW5ndGggeyAwIH07Ci0gICAgICAgICAgICBJc0Nv
bGxhcHNlZCBtX2lzQ29sbGFwc2VkIHsgSXNDb2xsYXBzZWQ6Ok5vIH07Ci0gICAgICAgIH07Ci0g
ICAgICAgIE9wdGlvbmFsPFRleHRDb250ZXh0PiB0ZXh0Q29udGV4dCgpIGNvbnN0IHsgcmV0dXJu
IG1fdGV4dENvbnRleHQ7IH0KLSAgICAgICAgLy8gTm90ZSB0aGF0IHN0eWxlKCkgYW5kIGlubGlu
ZUl0ZW0oKSBhbHdheXMgcmV0dXJucyB0aGUgZmlyc3QgSW5saW5lSXRlbSBmb3IgYSBydW4uCi0g
ICAgICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5saW5l
SXRlbS5zdHlsZSgpOyB9Ci0gICAgICAgIGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0oKSBj
b25zdCB7IHJldHVybiBtX2lubGluZUl0ZW07IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIGZy
aWVuZCBjbGFzcyBJbmxpbmVSdW5Qcm92aWRlcjsKLQotICAgICAgICBSdW4oY29uc3QgSW5saW5l
SXRlbSYsIFR5cGUsIE9wdGlvbmFsPFRleHRDb250ZXh0Pik7Ci0gICAgICAgIE9wdGlvbmFsPFRl
eHRDb250ZXh0PiYgdGV4dENvbnRleHQoKSB7IHJldHVybiBtX3RleHRDb250ZXh0OyB9Ci0KLSAg
ICAgICAgY29uc3QgVHlwZSBtX3R5cGU7Ci0gICAgICAgIGNvbnN0IElubGluZUl0ZW0mIG1faW5s
aW5lSXRlbTsKLSAgICAgICAgT3B0aW9uYWw8VGV4dENvbnRleHQ+IG1fdGV4dENvbnRleHQ7Ci0g
ICAgfTsKLSAgICBjb25zdCBWZWN0b3I8SW5saW5lUnVuUHJvdmlkZXI6OlJ1bj4mIHJ1bnMoKSBj
b25zdCB7IHJldHVybiBtX2lubGluZVJ1bnM7IH0KLQotcHJpdmF0ZToKLSAgICB2b2lkIGNvbW1p
dFRleHRSdW4oKTsKLSAgICB2b2lkIHByb2Nlc3NJbmxpbmVUZXh0SXRlbShjb25zdCBJbmxpbmVJ
dGVtJik7Ci0gICAgdW5zaWduZWQgbW92ZVRvTmV4dE5vbldoaXRlc3BhY2VQb3NpdGlvbihjb25z
dCBJbmxpbmVJdGVtJiwgSXRlbVBvc2l0aW9uIGN1cnJlbnRQb3NpdGlvbik7Ci0gICAgdW5zaWdu
ZWQgbW92ZVRvTmV4dEJyZWFrYWJsZVBvc2l0aW9uKGNvbnN0IElubGluZUl0ZW0mLCBJdGVtUG9z
aXRpb24gY3VycmVudFBvc2l0aW9uKTsKLSAgICBib29sIGlzQ29udGlub3VzQ29udGVudChSdW46
OlR5cGUgbmV3UnVuVHlwZSwgY29uc3QgSW5saW5lSXRlbSYgbmV3SW5saW5lSXRlbSk7Ci0KLSAg
ICBMYXp5TGluZUJyZWFrSXRlcmF0b3IgbV9saW5lQnJlYWtJdGVyYXRvcjsKLQotICAgIFZlY3Rv
cjxJbmxpbmVSdW5Qcm92aWRlcjo6UnVuPiBtX2lubGluZVJ1bnM7Ci19OwotCi1pbmxpbmUgSW5s
aW5lUnVuUHJvdmlkZXI6OlJ1biBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpjcmVhdGVCb3hSdW4o
Y29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSkKLXsKLSAgICByZXR1cm4geyBpbmxpbmVJdGVt
LCBUeXBlOjpCb3gsIFdURjo6bnVsbG9wdCB9OwotfQotCi1pbmxpbmUgSW5saW5lUnVuUHJvdmlk
ZXI6OlJ1biBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpjcmVhdGVGbG9hdFJ1bihjb25zdCBJbmxp
bmVJdGVtJiBpbmxpbmVJdGVtKQotewotICAgIHJldHVybiB7IGlubGluZUl0ZW0sIFR5cGU6OkZs
b2F0LCBXVEY6Om51bGxvcHQgfTsKLX0KLQotaW5saW5lIElubGluZVJ1blByb3ZpZGVyOjpSdW4g
SW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6Y3JlYXRlU29mdExpbmVCcmVha1J1bihjb25zdCBJbmxp
bmVJdGVtJiBpbmxpbmVJdGVtKQotewotICAgIHJldHVybiB7IGlubGluZUl0ZW0sIFR5cGU6OlNv
ZnRMaW5lQnJlYWssIFdURjo6bnVsbG9wdCB9OwotfQotCi1pbmxpbmUgSW5saW5lUnVuUHJvdmlk
ZXI6OlJ1biBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpjcmVhdGVIYXJkTGluZUJyZWFrUnVuKGNv
bnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0pCi17Ci0gICAgcmV0dXJuIHsgaW5saW5lSXRlbSwg
VHlwZTo6SGFyZExpbmVCcmVhaywgV1RGOjpudWxsb3B0IH07Ci19Ci0KLWlubGluZSBJbmxpbmVS
dW5Qcm92aWRlcjo6UnVuIElubGluZVJ1blByb3ZpZGVyOjpSdW46OmNyZWF0ZVdoaXRlc3BhY2VS
dW4oY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSwgSXRlbVBvc2l0aW9uIHN0YXJ0LCB1bnNp
Z25lZCBsZW5ndGgsIGJvb2wgaXNDb2xsYXBzaWJsZSkKLXsKLSAgICBBU1NFUlQobGVuZ3RoKTsK
LSAgICBhdXRvIGlzQ29sbGFwc2VkID0gaXNDb2xsYXBzaWJsZSAmJiBsZW5ndGggPiAxID8gVGV4
dENvbnRleHQ6OklzQ29sbGFwc2VkOjpZZXMgOiBUZXh0Q29udGV4dDo6SXNDb2xsYXBzZWQ6Ok5v
OwotICAgIHJldHVybiB7IGlubGluZUl0ZW0sIFR5cGU6OldoaXRlc3BhY2UsIFRleHRDb250ZXh0
KHN0YXJ0LCBsZW5ndGgsIGlzQ29sbGFwc2VkKSB9OwotfQotCi1pbmxpbmUgSW5saW5lUnVuUHJv
dmlkZXI6OlJ1biBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpjcmVhdGVOb25XaGl0ZXNwYWNlUnVu
KGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0sIEl0ZW1Qb3NpdGlvbiBzdGFydCwgdW5zaWdu
ZWQgbGVuZ3RoKQotewotICAgIHJldHVybiB7IGlubGluZUl0ZW0sIFR5cGU6Ok5vbldoaXRlc3Bh
Y2UsIFRleHRDb250ZXh0KHN0YXJ0LCBsZW5ndGgsIFRleHRDb250ZXh0OjpJc0NvbGxhcHNlZDo6
Tm8pIH07Ci19Ci0KLWlubGluZSBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpSdW4oY29uc3QgSW5s
aW5lSXRlbSYgaW5saW5lSXRlbSwgVHlwZSB0eXBlLCBPcHRpb25hbDxUZXh0Q29udGV4dD4gdGV4
dENvbnRleHQpCi0gICAgOiBtX3R5cGUodHlwZSkKLSAgICAsIG1faW5saW5lSXRlbShpbmxpbmVJ
dGVtKQotICAgICwgbV90ZXh0Q29udGV4dCh0ZXh0Q29udGV4dCkKLXsKLX0KLQotaW5saW5lIElu
bGluZVJ1blByb3ZpZGVyOjpSdW46OlRleHRDb250ZXh0OjpUZXh0Q29udGV4dChJdGVtUG9zaXRp
b24gc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwgSXNDb2xsYXBzZWQgaXNDb2xsYXBzZWQpCi0gICAg
OiBtX3N0YXJ0KHN0YXJ0KQotICAgICwgbV9sZW5ndGgobGVuZ3RoKQotICAgICwgbV9pc0NvbGxh
cHNlZChpc0NvbGxhcHNlZCkKLXsKLX0KLQotfQotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVUZXh0SXRlbS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVUZXh0SXRlbS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uY2Y1NDI0NjRmZGJiZjQ2ZjQxOGIwMTFjYTA0ODNhNWU3YjkyZDE4YwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lu
bGluZVRleHRJdGVtLmNwcApAQCAtMCwwICsxLDEzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJJbmxpbmVUZXh0SXRlbS5oIgorCisjaWYgRU5BQkxFKExB
WU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRlICJCcmVha0xpbmVzLmgiCisjaW5j
bHVkZSAiTGF5b3V0SW5saW5lQm94LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFj
ZSBMYXlvdXQgeworCitzdGF0aWMgaW5saW5lIGJvb2wgaXNXaGl0ZXNwYWNlQ2hhcmFjdGVyKGNo
YXIgY2hhcmFjdGVyLCBib29sIHByZXNlcnZlTmV3bGluZSkKK3sKKyAgICByZXR1cm4gY2hhcmFj
dGVyID09ICcgJyB8fCBjaGFyYWN0ZXIgPT0gJ1x0JyB8fCAoY2hhcmFjdGVyID09ICdcbicgJiYg
IXByZXNlcnZlTmV3bGluZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc1NvZnRMaW5lQnJl
YWsoY2hhciBjaGFyYWN0ZXIsIGJvb2wgcHJlc2VydmVOZXdsaW5lKQoreworICAgIHJldHVybiBw
cmVzZXJ2ZU5ld2xpbmUgJiYgY2hhcmFjdGVyID09ICdcbic7Cit9CisKK3N0YXRpYyB1bnNpZ25l
ZCBtb3ZlVG9OZXh0Tm9uV2hpdGVzcGFjZVBvc2l0aW9uKFN0cmluZyB0ZXh0Q29udGVudCwgdW5z
aWduZWQgc3RhcnRQb3NpdGlvbiwgYm9vbCBwcmVzZXJ2ZU5ld2xpbmUpCit7CisgICAgYXV0byBu
ZXh0Tm9uV2hpdGVTcGFjZVBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbjsKKyAgICB3aGlsZSAobmV4
dE5vbldoaXRlU3BhY2VQb3NpdGlvbiA8IHRleHRDb250ZW50Lmxlbmd0aCgpICYmIGlzV2hpdGVz
cGFjZUNoYXJhY3Rlcih0ZXh0Q29udGVudFtuZXh0Tm9uV2hpdGVTcGFjZVBvc2l0aW9uXSwgcHJl
c2VydmVOZXdsaW5lKSkKKyAgICAgICAgKytuZXh0Tm9uV2hpdGVTcGFjZVBvc2l0aW9uOworICAg
IHJldHVybiBuZXh0Tm9uV2hpdGVTcGFjZVBvc2l0aW9uIC0gc3RhcnRQb3NpdGlvbjsKK30KKwor
c3RhdGljIHVuc2lnbmVkIG1vdmVUb05leHRCcmVha2FibGVQb3NpdGlvbih1bnNpZ25lZCBzdGFy
dFBvc2l0aW9uLCBMYXp5TGluZUJyZWFrSXRlcmF0b3IgbGluZUJyZWFrSXRlcmF0b3IsIGNvbnN0
IFJlbmRlclN0eWxlJiBzdHlsZSkKK3sKKyAgICBhdXRvIGZpbmROZXh0QnJlYWthYmxlUG9zaXRp
b24gPSBbJl0oYXV0byBzdGFydFBvc2l0aW9uKSB7CisgICAgICAgIGF1dG8ga2VlcEFsbFdvcmRz
Rm9yQ0pLID0gc3R5bGUud29yZEJyZWFrKCkgPT0gV29yZEJyZWFrOjpLZWVwQWxsOworICAgICAg
ICBhdXRvIGJyZWFrTkJTUCA9IHN0eWxlLmF1dG9XcmFwKCkgJiYgc3R5bGUubmJzcE1vZGUoKSA9
PSBOQlNQTW9kZTo6U3BhY2U7CisKKyAgICAgICAgaWYgKGtlZXBBbGxXb3Jkc0ZvckNKSykgewor
ICAgICAgICAgICAgaWYgKGJyZWFrTkJTUCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV4dEJy
ZWFrYWJsZVBvc2l0aW9uS2VlcGluZ0FsbFdvcmRzKGxpbmVCcmVha0l0ZXJhdG9yLCBzdGFydFBv
c2l0aW9uKTsKKyAgICAgICAgICAgIHJldHVybiBuZXh0QnJlYWthYmxlUG9zaXRpb25LZWVwaW5n
QWxsV29yZHNJZ25vcmluZ05CU1AobGluZUJyZWFrSXRlcmF0b3IsIHN0YXJ0UG9zaXRpb24pOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKGxpbmVCcmVha0l0ZXJhdG9yLm1vZGUoKSA9PSBMaW5l
QnJlYWtJdGVyYXRvck1vZGU6OkRlZmF1bHQpIHsKKyAgICAgICAgICAgIGlmIChicmVha05CU1Ap
CisgICAgICAgICAgICAgICAgcmV0dXJuIFdlYkNvcmU6Om5leHRCcmVha2FibGVQb3NpdGlvbihs
aW5lQnJlYWtJdGVyYXRvciwgc3RhcnRQb3NpdGlvbik7CisgICAgICAgICAgICByZXR1cm4gbmV4
dEJyZWFrYWJsZVBvc2l0aW9uSWdub3JpbmdOQlNQKGxpbmVCcmVha0l0ZXJhdG9yLCBzdGFydFBv
c2l0aW9uKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChicmVha05CU1ApCisgICAgICAgICAg
ICByZXR1cm4gbmV4dEJyZWFrYWJsZVBvc2l0aW9uV2l0aG91dFNob3J0Y3V0KGxpbmVCcmVha0l0
ZXJhdG9yLCBzdGFydFBvc2l0aW9uKTsKKyAgICAgICAgcmV0dXJuIG5leHRCcmVha2FibGVQb3Np
dGlvbklnbm9yaW5nTkJTUFdpdGhvdXRTaG9ydGN1dChsaW5lQnJlYWtJdGVyYXRvciwgc3RhcnRQ
b3NpdGlvbik7CisgICAgfTsKKworICAgIGF1dG8gdGV4dExlbmd0aCA9IGxpbmVCcmVha0l0ZXJh
dG9yLnN0cmluZ1ZpZXcoKS5sZW5ndGgoKTsKKyAgICBhdXRvIGN1cnJlbnRQb3NpdGlvbiA9IHN0
YXJ0UG9zaXRpb247CisgICAgd2hpbGUgKGN1cnJlbnRQb3NpdGlvbiA8IHRleHRMZW5ndGggLSAx
KSB7CisgICAgICAgIGF1dG8gbmV4dEJyZWFrYWJsZVBvc2l0aW9uID0gZmluZE5leHRCcmVha2Fi
bGVQb3NpdGlvbihjdXJyZW50UG9zaXRpb24pOworICAgICAgICBpZiAobmV4dEJyZWFrYWJsZVBv
c2l0aW9uICE9IGN1cnJlbnRQb3NpdGlvbikKKyAgICAgICAgICAgIHJldHVybiBuZXh0QnJlYWth
YmxlUG9zaXRpb24gLSBjdXJyZW50UG9zaXRpb247CisgICAgICAgICsrY3VycmVudFBvc2l0aW9u
OworICAgIH0KKyAgICByZXR1cm4gdGV4dExlbmd0aCAtIHN0YXJ0UG9zaXRpb247Cit9CisKK3Zv
aWQgSW5saW5lVGV4dEl0ZW06OmNyZWF0ZUFuZEFwcGVuZFRleHRJdGVtcyhJbmxpbmVJdGVtcyYg
aW5saW5lQ29udGVudCwgY29uc3QgSW5saW5lQm94JiBpbmxpbmVCb3gpCit7CisgICAgYXV0byYg
c3R5bGUgPSBpbmxpbmVCb3guc3R5bGUoKTsKKyAgICBhdXRvIHByZXNlcnZlTmV3bGluZSA9IHN0
eWxlLnByZXNlcnZlTmV3bGluZSgpOworICAgIGF1dG8gY29sbGFwc2VXaGl0ZVNwYWNlID0gc3R5
bGUuY29sbGFwc2VXaGl0ZVNwYWNlKCk7CisgICAgYXV0byB0ZXh0ID0gaW5saW5lQm94LnRleHRD
b250ZW50KCk7CisgICAgTGF6eUxpbmVCcmVha0l0ZXJhdG9yIGxpbmVCcmVha0l0ZXJhdG9yKHRl
eHQpOworCisgICAgdW5zaWduZWQgY3VycmVudFBvc2l0aW9uID0gMDsKKyAgICB3aGlsZSAoY3Vy
cmVudFBvc2l0aW9uIDwgdGV4dC5sZW5ndGgoKSkgeworICAgICAgICAvLyBTb2Z0IGxpbmVicmVh
az8KKyAgICAgICAgaWYgKGlzU29mdExpbmVCcmVhayh0ZXh0W2N1cnJlbnRQb3NpdGlvbl0sIHBy
ZXNlcnZlTmV3bGluZSkpIHsKKyAgICAgICAgICAgIGlubGluZUNvbnRlbnQuYWRkKHN0ZDo6bWFr
ZV91bmlxdWU8SW5saW5lVGV4dEl0ZW0+KGlubGluZUJveCwgY3VycmVudFBvc2l0aW9uLCAxLCB0
cnVlLCBmYWxzZSkpOworICAgICAgICAgICAgKytjdXJyZW50UG9zaXRpb247CisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXNXaGl0ZXNwYWNlQ2hhcmFjdGVy
KHRleHRbY3VycmVudFBvc2l0aW9uXSwgcHJlc2VydmVOZXdsaW5lKSkgeworICAgICAgICAgICAg
YXV0byBsZW5ndGggPSBtb3ZlVG9OZXh0Tm9uV2hpdGVzcGFjZVBvc2l0aW9uKHRleHQsIGN1cnJl
bnRQb3NpdGlvbiwgcHJlc2VydmVOZXdsaW5lKTsKKyAgICAgICAgICAgIGF1dG8gaXNDb2xsYXBz
ZWQgPSBjb2xsYXBzZVdoaXRlU3BhY2UgJiYgbGVuZ3RoID4gMTsKKyAgICAgICAgICAgIGlubGlu
ZUNvbnRlbnQuYWRkKHN0ZDo6bWFrZV91bmlxdWU8SW5saW5lVGV4dEl0ZW0+KGlubGluZUJveCwg
Y3VycmVudFBvc2l0aW9uLCBsZW5ndGgsIHRydWUsIGlzQ29sbGFwc2VkKSk7CisgICAgICAgICAg
ICBjdXJyZW50UG9zaXRpb24gKz0gbGVuZ3RoOworICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIH0KKworICAgICAgICBhdXRvIGxlbmd0aCA9IG1vdmVUb05leHRCcmVha2FibGVQb3NpdGlv
bihjdXJyZW50UG9zaXRpb24sIGxpbmVCcmVha0l0ZXJhdG9yLCBzdHlsZSk7CisgICAgICAgIGlu
bGluZUNvbnRlbnQuYWRkKHN0ZDo6bWFrZV91bmlxdWU8SW5saW5lVGV4dEl0ZW0+KGlubGluZUJv
eCwgY3VycmVudFBvc2l0aW9uLCBsZW5ndGgsIGZhbHNlLCBmYWxzZSkpOworICAgICAgICBjdXJy
ZW50UG9zaXRpb24gKz0gbGVuZ3RoOworICAgIH0KK30KKworSW5saW5lVGV4dEl0ZW06OklubGlu
ZVRleHRJdGVtKGNvbnN0IElubGluZUJveCYgaW5saW5lQm94LCB1bnNpZ25lZCBzdGFydCwgdW5z
aWduZWQgbGVuZ3RoLCBib29sIGlzV2hpdGVzcGFjZSwgYm9vbCBpc0NvbGxhcHNlZCkKKyAgICA6
IElubGluZUl0ZW0oaW5saW5lQm94LCBUeXBlOjpUZXh0KQorICAgICwgbV9zdGFydChzdGFydCkK
KyAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKKyAgICAsIG1faXNXaGl0ZXNwYWNlKGlzV2hpdGVzcGFj
ZSkKKyAgICAsIG1faXNDb2xsYXBzZWQoaXNDb2xsYXBzZWQpCit7Cit9CisKK30KK30KKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5s
aW5lVGV4dEl0ZW0uaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lu
bGluZVRleHRJdGVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjg3NGYyOGEzMWRjZDAwYWJlZGU4ODk3NTc0NTEz
Y2JlMjllMTZkZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxp
bmVmb3JtYXR0aW5nL0lubGluZVRleHRJdGVtLmgKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQp
CisKKyNpbmNsdWRlICJJbmxpbmVJdGVtLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVz
cGFjZSBMYXlvdXQgeworCitjbGFzcyBJbmxpbmVUZXh0SXRlbSA6IHB1YmxpYyBJbmxpbmVJdGVt
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCBjcmVhdGVBbmRBcHBlbmRUZXh0SXRlbXMoSW5s
aW5lSXRlbXMmLCBjb25zdCBJbmxpbmVCb3gmKTsKKworICAgIElubGluZVRleHRJdGVtKGNvbnN0
IElubGluZUJveCYsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIGJvb2wgaXNXaGl0
ZXNwYWNlLCBib29sIGlzQ29sbGFwc2VkKTsKKworICAgIHVuc2lnbmVkIHN0YXJ0KCkgY29uc3Qg
eyByZXR1cm4gbV9zdGFydDsgfQorICAgIHVuc2lnbmVkIGVuZCgpIGNvbnN0IHsgcmV0dXJuIHN0
YXJ0KCkgKyBsZW5ndGgoKTsgfQorICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJu
IG1fbGVuZ3RoOyB9CisKKyAgICBib29sIGlzV2hpdGVzcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1f
aXNXaGl0ZXNwYWNlOyB9CisgICAgYm9vbCBpc0NvbGxhcHNlZCgpIGNvbnN0IHsgcmV0dXJuIG1f
aXNDb2xsYXBzZWQ7IH0KKworcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBtX3N0YXJ0IHsgMCB9Owor
ICAgIHVuc2lnbmVkIG1fbGVuZ3RoIHsgMCB9OworICAgIGJvb2wgbV9pc1doaXRlc3BhY2UgeyBm
YWxzZSB9OworICAgIGJvb2wgbV9pc0NvbGxhcHNlZCB7IGZhbHNlIH07Cit9OworCit9Cit9CisK
K1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfSU5MSU5FX0lURU0oSW5saW5lVGV4dEl0ZW0sIGlzVGV4
dCgpKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVm
b3JtYXR0aW5nL3RleHQvVGV4dFV0aWwuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvdGV4dC9UZXh0VXRpbC5jcHAKaW5kZXggMzc1ZWQ3MjNjZDJiMjk4NGRmNzNl
MGU3MzIxMWJhMDI4NDE4ZmUwOC4uYzEzOWVhYmE3NTc2OTZkM2M4NzZmNDQ0ZGNjOTdmZWM3YzNh
NjNlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcv
dGV4dC9UZXh0VXRpbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1h
dHRpbmcvdGV4dC9UZXh0VXRpbC5jcHAKQEAgLTM0LDE5ICszNCwxOSBAQAogbmFtZXNwYWNlIFdl
YkNvcmUgewogbmFtZXNwYWNlIExheW91dCB7CiAKLU9wdGlvbmFsPEl0ZW1Qb3NpdGlvbj4gVGV4
dFV0aWw6Omh5cGhlblBvc2l0aW9uQmVmb3JlKGNvbnN0IElubGluZUl0ZW0mLCBJdGVtUG9zaXRp
b24sIHVuc2lnbmVkKQorT3B0aW9uYWw8dW5zaWduZWQ+IFRleHRVdGlsOjpoeXBoZW5Qb3NpdGlv
bkJlZm9yZShjb25zdCBJbmxpbmVJdGVtJiwgdW5zaWduZWQsIHVuc2lnbmVkKQogewogICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKLUxheW91dFVuaXQgVGV4dFV0aWw6OndpZHRoKGNvbnN0
IElubGluZUl0ZW0mIGlubGluZVRleHRJdGVtLCBJdGVtUG9zaXRpb24gZnJvbSwgSXRlbVBvc2l0
aW9uIHRvLCBMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsTGVmdCkKK0xheW91dFVuaXQgVGV4dFV0
aWw6OndpZHRoKGNvbnN0IElubGluZUJveCYgaW5saW5lQm94LCB1bnNpZ25lZCBmcm9tLCB1bnNp
Z25lZCB0bywgTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbExlZnQpCiB7Ci0gICAgYXV0byYgc3R5
bGUgPSBpbmxpbmVUZXh0SXRlbS5zdHlsZSgpOworICAgIGF1dG8mIHN0eWxlID0gaW5saW5lQm94
LnN0eWxlKCk7CiAgICAgYXV0byYgZm9udCA9IHN0eWxlLmZvbnRDYXNjYWRlKCk7CiAgICAgaWYg
KCFmb250LnNpemUoKSB8fCBmcm9tID09IHRvKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIGF1
dG8gdGV4dCA9IGlubGluZVRleHRJdGVtLnRleHRDb250ZW50KCk7CisgICAgYXV0byB0ZXh0ID0g
aW5saW5lQm94LnRleHRDb250ZW50KCk7CiAgICAgQVNTRVJUKHRvIDw9IHRleHQubGVuZ3RoKCkp
OwogCiAgICAgaWYgKGZvbnQuaXNGaXhlZFBpdGNoKCkpCkBAIC03MCw3ICs3MCw3IEBAIExheW91
dFVuaXQgVGV4dFV0aWw6OndpZHRoKGNvbnN0IElubGluZUl0ZW0mIGlubGluZVRleHRJdGVtLCBJ
dGVtUG9zaXRpb24gZnJvbSwKICAgICByZXR1cm4gc3RkOjptYXg8TGF5b3V0VW5pdD4oMCwgd2lk
dGgpOwogfQogCi1MYXlvdXRVbml0IFRleHRVdGlsOjpmaXhlZFBpdGNoV2lkdGgoU3RyaW5nIHRl
eHQsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgSXRlbVBvc2l0aW9uIGZyb20sIEl0ZW1Qb3Np
dGlvbiB0bywgTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbExlZnQpCitMYXlvdXRVbml0IFRleHRV
dGlsOjpmaXhlZFBpdGNoV2lkdGgoU3RyaW5nIHRleHQsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHls
ZSwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8sIExheW91dFVuaXQgY29udGVudExvZ2ljYWxM
ZWZ0KQogewogICAgIGF1dG8mIGZvbnQgPSBzdHlsZS5mb250Q2FzY2FkZSgpOwogICAgIGF1dG8g
bW9ub3NwYWNlQ2hhcmFjdGVyV2lkdGggPSBmb250LnNwYWNlV2lkdGgoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL3RleHQvVGV4dFV0aWwuaCBi
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL3RleHQvVGV4dFV0aWwuaApp
bmRleCA4MzZhOWVjNDBkM2E3MmViOTI2NzRhNTNiMzcyZTUwZDJmM2RhY2I3Li5kMGZlYTZhZDFk
ZGQ3MjlkNzRmOWJkZmIxYmM5ZDIxYzk4N2QyZTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy90ZXh0L1RleHRVdGlsLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvdGV4dC9UZXh0VXRpbC5oCkBAIC0yOCwxOCAr
MjgsMTcgQEAKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKIAogI2luY2x1
ZGUgIklubGluZUl0ZW0uaCIKLSNpbmNsdWRlICJJbmxpbmVSdW5Qcm92aWRlci5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgTGF5b3V0IHsKIAogY2xhc3MgVGV4dFV0aWwgewog
cHVibGljOgotICAgIHN0YXRpYyBMYXlvdXRVbml0IHdpZHRoKGNvbnN0IElubGluZUl0ZW0mLCBJ
dGVtUG9zaXRpb24gZnJvbSwgSXRlbVBvc2l0aW9uIHRvLCBMYXlvdXRVbml0IGNvbnRlbnRMb2dp
Y2FsTGVmdCk7Ci0gICAgc3RhdGljIE9wdGlvbmFsPEl0ZW1Qb3NpdGlvbj4gaHlwaGVuUG9zaXRp
b25CZWZvcmUoY29uc3QgSW5saW5lSXRlbSYsIEl0ZW1Qb3NpdGlvbiBmcm9tLCB1bnNpZ25lZCBs
ZW5ndGgpOworICAgIHN0YXRpYyBMYXlvdXRVbml0IHdpZHRoKGNvbnN0IElubGluZUJveCYsIHVu
c2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvLCBMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsTGVmdCk7
CisgICAgc3RhdGljIE9wdGlvbmFsPHVuc2lnbmVkPiBoeXBoZW5Qb3NpdGlvbkJlZm9yZShjb25z
dCBJbmxpbmVJdGVtJiwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuZ3RoKTsKIAogcHJpdmF0
ZToKLSAgICBzdGF0aWMgTGF5b3V0VW5pdCBmaXhlZFBpdGNoV2lkdGgoU3RyaW5nLCBjb25zdCBS
ZW5kZXJTdHlsZSYsIEl0ZW1Qb3NpdGlvbiBmcm9tLCBJdGVtUG9zaXRpb24gdG8sIExheW91dFVu
aXQgY29udGVudExvZ2ljYWxMZWZ0KTsKKyAgICBzdGF0aWMgTGF5b3V0VW5pdCBmaXhlZFBpdGNo
V2lkdGgoU3RyaW5nLCBjb25zdCBSZW5kZXJTdHlsZSYsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVk
IHRvLCBMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsTGVmdCk7CiB9OwogCiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRSZXBsYWNlZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRSZXBsYWNlZC5jcHAKaW5kZXgg
MDBjZDVkMDY4Mjk4YjE2NjNhY2ZmYzlkNDlmMGZmYjFiNjVjNGYyMy4uOTY0YTZiMzZiNGY1M2E0
MzUwNDcyMjI3ZDgxZjQ3MWU2NWVmMDNhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2xheW91dHRyZWUvTGF5b3V0UmVwbGFjZWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9sYXlvdXR0cmVlL0xheW91dFJlcGxhY2VkLmNwcApAQCAtODAsNyArODAsNyBAQCBMYXlv
dXRVbml0IFJlcGxhY2VkOjppbnRyaW5zaWNSYXRpbygpIGNvbnN0CiAgICAgQVNTRVJUKGhhc0lu
dHJpbnNpY1JhdGlvKCkgfHwgKGhhc0ludHJpbnNpY1dpZHRoKCkgJiYgaGFzSW50cmluc2ljSGVp
Z2h0KCkpKTsKICAgICBpZiAobV9pbnRyaW5zaWNSYXRpbykKICAgICAgICAgcmV0dXJuICptX2lu
dHJpbnNpY1JhdGlvOwotICAgIGlmIChtX2ludHJpbnNpY1NpemUpCisgICAgaWYgKG1faW50cmlu
c2ljU2l6ZSAmJiBtX2ludHJpbnNpY1NpemUtPmhlaWdodCgpKQogICAgICAgICByZXR1cm4gbV9p
bnRyaW5zaWNTaXplLT53aWR0aCgpIC8gbV9pbnRyaW5zaWNTaXplLT5oZWlnaHQoKTsKICAgICBy
ZXR1cm4gMTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9sYXlvdXR0cmVl
L0xheW91dFRyZWVCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9sYXlvdXR0cmVl
L0xheW91dFRyZWVCdWlsZGVyLmNwcAppbmRleCBlNjEwMmRjYWVkNGFmODM0ZmEwMGVhNGU0Yjcy
ZTZjZmZhYjg2OTdmLi43YWRhMGU2MmY1ODg1Yzg4MzE0YjZmOTg0NzlhNmU5ZDU3N2Y4NTk5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRUcmVlQnVp
bGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0VHJl
ZUJ1aWxkZXIuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRU
SU5HX0NPTlRFWFQpCiAKICNpbmNsdWRlICJEaXNwbGF5Qm94LmgiCisjaW5jbHVkZSAiRGlzcGxh
eVJ1bi5oIgogI2luY2x1ZGUgIklubGluZUZvcm1hdHRpbmdTdGF0ZS5oIgogI2luY2x1ZGUgIkxh
eW91dEJsb2NrQ29udGFpbmVyLmgiCiAjaW5jbHVkZSAiTGF5b3V0Qm94LmgiCkBAIC02MCw2ICs2
MSwxNSBAQCBzdGQ6OnVuaXF1ZV9wdHI8Q29udGFpbmVyPiBUcmVlQnVpbGRlcjo6Y3JlYXRlTGF5
b3V0VHJlZShjb25zdCBSZW5kZXJWaWV3JiByZW5kZQogICAgIHJldHVybiBpbml0aWFsQ29udGFp
bmluZ0Jsb2NrOwogfQogCitzdGF0aWMgT3B0aW9uYWw8TGF5b3V0U2l6ZT4gYWNjdW11bGF0ZWRP
ZmZzZXRGb3JJbkZsb3dQb3NpdGlvbmVkQ29udGludWF0aW9uKGNvbnN0IFJlbmRlckJsb2NrJiBi
bG9jaykKK3sKKyAgICAvLyBGSVhFOiBUaGlzIGlzIGEgd29ya2Fyb3VuZCBvZiB0aGUgY29udGlu
dWF0aW9uIGxvZ2ljIHdoZW4gdGhlIHJlbGF0aXZlbHkgcG9zaXRpb25lZCBwYXJlbnQgaW5saW5l
IGJveAorICAgIC8vIGJlY29tZXMgYSBzaWJsaW5nIGJveCBvZiB0aGlzIGJsb2NrIGFuZCBvbmx5
IHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBjb250aW51YXRpb24gbGluayB3aGljaCB3ZSBkb24ndCBo
YXZlIGhlcmUuCisgICAgaWYgKCFibG9jay5pc0Fub255bW91cygpIHx8ICFibG9jay5pc0luRmxv
d1Bvc2l0aW9uZWQoKSB8fCAhYmxvY2suaXNDb250aW51YXRpb24oKSkKKyAgICAgICAgcmV0dXJu
IHsgfTsKKyAgICByZXR1cm4gYmxvY2sucmVsYXRpdmVQb3NpdGlvbk9mZnNldCgpOworfQorCiB2
b2lkIFRyZWVCdWlsZGVyOjpjcmVhdGVTdWJUcmVlKGNvbnN0IFJlbmRlckVsZW1lbnQmIHJvb3RS
ZW5kZXJlciwgQ29udGFpbmVyJiByb290Q29udGFpbmVyKQogewogICAgIGF1dG8gZWxlbWVudEF0
dHJpYnV0ZXMgPSBbXSAoY29uc3QgUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIpIC0+IE9wdGlvbmFs
PEJveDo6RWxlbWVudEF0dHJpYnV0ZXM+IHsKQEAgLTExNSw5ICsxMjUsMTUgQEAgdm9pZCBUcmVl
QnVpbGRlcjo6Y3JlYXRlU3ViVHJlZShjb25zdCBSZW5kZXJFbGVtZW50JiByb290UmVuZGVyZXIs
IENvbnRhaW5lciYgcm8KICAgICAgICAgfSBlbHNlIGlmIChpczxSZW5kZXJFbGVtZW50PihjaGls
ZCkpIHsKICAgICAgICAgICAgIGF1dG8mIHJlbmRlcmVyID0gZG93bmNhc3Q8UmVuZGVyRWxlbWVu
dD4oY2hpbGQpOwogICAgICAgICAgICAgYXV0byBkaXNwbGF5ID0gcmVuZGVyZXIuc3R5bGUoKS5k
aXNwbGF5KCk7Ci0gICAgICAgICAgICBpZiAoZGlzcGxheSA9PSBEaXNwbGF5VHlwZTo6QmxvY2sp
Ci0gICAgICAgICAgICAgICAgYm94ID0gc3RkOjptYWtlX3VuaXF1ZTxCbG9ja0NvbnRhaW5lcj4o
ZWxlbWVudEF0dHJpYnV0ZXMocmVuZGVyZXIpLCBSZW5kZXJTdHlsZTo6Y2xvbmUocmVuZGVyZXIu
c3R5bGUoKSkpOwotICAgICAgICAgICAgZWxzZSBpZiAoZGlzcGxheSA9PSBEaXNwbGF5VHlwZTo6
SW5saW5lKQorICAgICAgICAgICAgaWYgKGRpc3BsYXkgPT0gRGlzcGxheVR5cGU6OkJsb2NrKSB7
CisgICAgICAgICAgICAgICAgaWYgKGF1dG8gb2Zmc2V0ID0gYWNjdW11bGF0ZWRPZmZzZXRGb3JJ
bkZsb3dQb3NpdGlvbmVkQ29udGludWF0aW9uKGRvd25jYXN0PFJlbmRlckJsb2NrPihyZW5kZXJl
cikpKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gc3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xv
bmVQdHIocmVuZGVyZXIuc3R5bGUoKSk7CisgICAgICAgICAgICAgICAgICAgIHN0eWxlLT5zZXRU
b3AoeyBvZmZzZXQtPmhlaWdodCgpLCBGaXhlZCB9KTsKKyAgICAgICAgICAgICAgICAgICAgc3R5
bGUtPnNldExlZnQoeyBvZmZzZXQtPndpZHRoKCksIEZpeGVkIH0pOworICAgICAgICAgICAgICAg
ICAgICBib3ggPSBzdGQ6Om1ha2VfdW5pcXVlPEJsb2NrQ29udGFpbmVyPihlbGVtZW50QXR0cmli
dXRlcyhyZW5kZXJlciksIFdURk1vdmUoKnN0eWxlKSk7CisgICAgICAgICAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICAgICAgICAgIGJveCA9IHN0ZDo6bWFrZV91bmlxdWU8QmxvY2tDb250YWlu
ZXI+KGVsZW1lbnRBdHRyaWJ1dGVzKHJlbmRlcmVyKSwgUmVuZGVyU3R5bGU6OmNsb25lKHJlbmRl
cmVyLnN0eWxlKCkpKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoZGlzcGxheSA9PSBEaXNwbGF5
VHlwZTo6SW5saW5lKQogICAgICAgICAgICAgICAgIGJveCA9IHN0ZDo6bWFrZV91bmlxdWU8SW5s
aW5lQ29udGFpbmVyPihlbGVtZW50QXR0cmlidXRlcyhyZW5kZXJlciksIFJlbmRlclN0eWxlOjpj
bG9uZShyZW5kZXJlci5zdHlsZSgpKSk7CiAgICAgICAgICAgICBlbHNlIGlmIChkaXNwbGF5ID09
IERpc3BsYXlUeXBlOjpJbmxpbmVCbG9jaykKICAgICAgICAgICAgICAgICBib3ggPSBzdGQ6Om1h
a2VfdW5pcXVlPElubGluZUNvbnRhaW5lcj4oZWxlbWVudEF0dHJpYnV0ZXMocmVuZGVyZXIpLCBS
ZW5kZXJTdHlsZTo6Y2xvbmUocmVuZGVyZXIuc3R5bGUoKSkpOwpAQCAtMTY2LDExICsxODIsMTEg
QEAgc3RhdGljIHZvaWQgb3V0cHV0SW5saW5lUnVucyhUZXh0U3RyZWFtJiBzdHJlYW0sIGNvbnN0
IExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwKICAgICAgICAgd2hpbGUgKCsrcHJpbnRlZENoYXJh
Y3RlcnMgPD0gZGVwdGggKiAyKQogICAgICAgICAgICAgc3RyZWFtIDw8ICIgIjsKICAgICAgICAg
c3RyZWFtIDw8ICJydW4iOwotICAgICAgICBpZiAoaW5saW5lUnVuLnRleHRDb250ZXh0KCkpCi0g
ICAgICAgICAgICBzdHJlYW0gPDwgIigiIDw8IGlubGluZVJ1bi50ZXh0Q29udGV4dCgpLT5zdGFy
dCgpIDw8ICIsICIgPDwgaW5saW5lUnVuLnRleHRDb250ZXh0KCktPnN0YXJ0KCkgKyBpbmxpbmVS
dW4udGV4dENvbnRleHQoKS0+bGVuZ3RoKCkgPDwgIikgIjsKKyAgICAgICAgaWYgKGlubGluZVJ1
bi0+dGV4dENvbnRleHQoKSkKKyAgICAgICAgICAgIHN0cmVhbSA8PCAiKCIgPDwgaW5saW5lUnVu
LT50ZXh0Q29udGV4dCgpLT5zdGFydCgpIDw8ICIsICIgPDwgaW5saW5lUnVuLT50ZXh0Q29udGV4
dCgpLT5zdGFydCgpICsgaW5saW5lUnVuLT50ZXh0Q29udGV4dCgpLT5sZW5ndGgoKSA8PCAiKSAi
OwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBzdHJlYW0gPDwgIih4LCB4KSAiOwotICAgICAg
ICBzdHJlYW0gPDwgImF0IFsiIDw8IGlubGluZVJ1bi5sb2dpY2FsTGVmdCgpIDw8ICIsICIgPDwg
aW5saW5lUnVuLmxvZ2ljYWxUb3AoKSA8PCAiXSBzaXplIFsiIDw8IGlubGluZVJ1bi5sb2dpY2Fs
V2lkdGgoKSA8PCAiICIgPDwgaW5saW5lUnVuLmxvZ2ljYWxIZWlnaHQoKSA8PCAiXSI7CisgICAg
ICAgIHN0cmVhbSA8PCAiYXQgWyIgPDwgaW5saW5lUnVuLT5sb2dpY2FsTGVmdCgpIDw8ICIsICIg
PDwgaW5saW5lUnVuLT5sb2dpY2FsVG9wKCkgPDwgIl0gc2l6ZSBbIiA8PCBpbmxpbmVSdW4tPmxv
Z2ljYWxXaWR0aCgpIDw8ICIgIiA8PCBpbmxpbmVSdW4tPmxvZ2ljYWxIZWlnaHQoKSA8PCAiXSI7
CiAgICAgICAgIHN0cmVhbS5uZXh0TGluZSgpOwogICAgIH0KIH0KQEAgLTE4NiwxMSArMjAyLDEz
IEBAIHN0YXRpYyB2b2lkIG91dHB1dExheW91dEJveChUZXh0U3RyZWFtJiBzdHJlYW0sIGNvbnN0
IEJveCYgbGF5b3V0Qm94LCBjb25zdCBEaXNwCiAgICAgZWxzZSBpZiAoaXM8SW5saW5lQm94Pihs
YXlvdXRCb3gpKSB7CiAgICAgICAgIGlmIChsYXlvdXRCb3gucmVwbGFjZWQoKSkKICAgICAgICAg
ICAgIHN0cmVhbSA8PCAiaW5saW5lIHJlcGxhY2VkIGJveCI7Ci0gICAgICAgIGVsc2UgaWYgKGRv
d25jYXN0PElubGluZUJveD4obGF5b3V0Qm94KS5oYXNUZXh0Q29udGVudCgpKSB7Ci0gICAgICAg
ICAgICBhdXRvIHRleHRDb250ZW50ID0gZG93bmNhc3Q8SW5saW5lQm94PihsYXlvdXRCb3gpLnRl
eHRDb250ZW50KCk7Ci0gICAgICAgICAgICBzdHJlYW0gPDwgImlubGluZSB0ZXh0IFtcIiIgPDwg
dGV4dENvbnRlbnQudXRmOCgpLmRhdGEoKSA8PCAiXCJdIjsKLSAgICAgICAgfSBlbHNlCisgICAg
ICAgIGVsc2UgaWYgKGxheW91dEJveC5pc0Fub255bW91cygpKQorICAgICAgICAgICAgc3RyZWFt
IDw8ICJhbm9ueW1vdXMgaW5saW5lIGJveCI7CisgICAgICAgIGVsc2UKICAgICAgICAgICAgIHN0
cmVhbSA8PCAiaW5saW5lIGJveCI7CisKKyAgICAgICAgaWYgKGRvd25jYXN0PElubGluZUJveD4o
bGF5b3V0Qm94KS5oYXNUZXh0Q29udGVudCgpKQorICAgICAgICAgICAgc3RyZWFtIDw8ICIgd2l0
aCB0ZXh0IGNvbnRlbnQgW1wiIiA8PCBkb3duY2FzdDxJbmxpbmVCb3g+KGxheW91dEJveCkudGV4
dENvbnRlbnQoKS51dGY4KCkuZGF0YSgpIDw8ICJcIl0iOwogICAgIH0gZWxzZSBpZiAoaXM8Qmxv
Y2tDb250YWluZXI+KGxheW91dEJveCkpIHsKICAgICAgICAgaWYgKCFsYXlvdXRCb3gucGFyZW50
KCkpCiAgICAgICAgICAgICBzdHJlYW0gPDwgImluaXRpYWwgIjsKQEAgLTIwMCwxMyArMjE4LDgg
QEAgc3RhdGljIHZvaWQgb3V0cHV0TGF5b3V0Qm94KFRleHRTdHJlYW0mIHN0cmVhbSwgY29uc3Qg
Qm94JiBsYXlvdXRCb3gsIGNvbnN0IERpc3AKICAgICBlbHNlCiAgICAgICAgIHN0cmVhbSA8PCAi
Ym94IjsKICAgICAvLyBGSVhNRTogSW5saW5lIHRleHQgcnVucyBkb24ndCBjcmVhdGUgZGlzcGxh
eSBib3hlcyB5ZXQuCi0gICAgaWYgKGRpc3BsYXlCb3gpIHsKLSAgICAgICAgLy8gRklYTUU6IGRp
c3BsYXkgYm94IGlzIG5vdCBjb21wbGV0ZWx5IHNldCB5ZXQuCi0gICAgICAgIGlmICgoaXM8SW5s
aW5lQm94PihsYXlvdXRCb3gpIHx8IGlzPElubGluZUNvbnRhaW5lcj4obGF5b3V0Qm94KSkgJiYg
IWxheW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpKQotICAgICAgICAgICAgc3RyZWFtIDw8
ICIgYXQgWyIgPDwgIi4iIDw8ICIgIiA8PCAiLiIgPDwgIl0gc2l6ZSBbIiA8PCBkaXNwbGF5Qm94
LT53aWR0aCgpIDw8ICIgIiA8PCBkaXNwbGF5Qm94LT5oZWlnaHQoKSA8PCAiXSI7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHN0cmVhbSA8PCAiIGF0IFsiIDw8IGRpc3BsYXlCb3gtPmxlZnQo
KSA8PCAiICIgPDwgZGlzcGxheUJveC0+dG9wKCkgPDwgIl0gc2l6ZSBbIiA8PCBkaXNwbGF5Qm94
LT53aWR0aCgpIDw8ICIgIiA8PCBkaXNwbGF5Qm94LT5oZWlnaHQoKSA8PCAiXSI7Ci0gICAgfQor
ICAgIGlmIChkaXNwbGF5Qm94ICYmICFsYXlvdXRCb3guaXNBbm9ueW1vdXMoKSkKKyAgICAgICAg
c3RyZWFtIDw8ICIgYXQgWyIgPDwgZGlzcGxheUJveC0+bGVmdCgpIDw8ICIgIiA8PCBkaXNwbGF5
Qm94LT50b3AoKSA8PCAiXSBzaXplIFsiIDw8IGRpc3BsYXlCb3gtPndpZHRoKCkgPDwgIiAiIDw8
IGRpc3BsYXlCb3gtPmhlaWdodCgpIDw8ICJdIjsKICAgICBzdHJlYW0gPDwgIiBbIiA8PCAmbGF5
b3V0Qm94IDw8ICJdIjsKIAogICAgIHN0cmVhbS5uZXh0TGluZSgpOwpkaWZmIC0tZ2l0IGEvVG9v
bHMvTGF5b3V0UmVsb2FkZWQvbWlzYy9MRkMtcGFzc2luZy10ZXN0cy50eHQgYi9Ub29scy9MYXlv
dXRSZWxvYWRlZC9taXNjL0xGQy1wYXNzaW5nLXRlc3RzLnR4dAppbmRleCBjZWQwMDllZGQ0YjI4
OTk1YjIzMGIxZGE0OGJkODYxY2MzNGQyM2NhLi41MGM3Njk4ZTBmYzlkZTRkY2E1OGRkMzM0NzYy
ODBhNjYzZWMxZTE3IDEwMDY0NAotLS0gYS9Ub29scy9MYXlvdXRSZWxvYWRlZC9taXNjL0xGQy1w
YXNzaW5nLXRlc3RzLnR4dAorKysgYi9Ub29scy9MYXlvdXRSZWxvYWRlZC9taXNjL0xGQy1wYXNz
aW5nLXRlc3RzLnR4dApAQCAtNDczLDcgKzQ3Myw2IEBAIGNzczIuMS90MDUxMS1jMjEtcHNldWQt
bGluay0wMC1lLmh0bWwKIGNzczIuMS90MDUxMS1jMjEtcHNldWQtbGluay0wMS1lLmh0bWwKIGNz
czIuMS90MDUxMS1jMjEtcHNldWQtbGluay0wMi1lLmh0bWwKIGNzczIuMS90MDUxMS1jMjEtcHNl
dWQtbGluay0wMy1lLmh0bWwKLWNzczIuMS90MDYwMi1jMTMtaW5oLXVuZGVybGluLTAwLWUuaHRt
bAogY3NzMi4xL3QwNjAzLWMxMS1pbXBvcnQtMDAtYi5odG1sCiBjc3MyLjEvdDA4MDMtYzU1MDIt
aW1yZ24tci0wMC1iLWFnLmh0bWwKIGNzczIuMS90MDgwMy1jNTUwMi1tcmduLXItMDItYy5odG1s
CkBAIC02NDMsNyArNjQyLDYgQEAgY3NzMi4xL3QwNjA0MDMtYzIxLXBzZXUtaWQtMDAtZS1pLmh0
bWwKIGNzczIuMS90MDkwNTAxLWM0MTQtZmx0LTAwLWQuaHRtbAogY3NzMi4xL3QwOTA1MDEtYzQx
NC1mbHQtMDItZC1nLmh0bWwKIGNzczIuMS90MTAwMzAzLWM0MTItYmxvY2t3LTAwLWQtYWcuaHRt
bAotY3NzMi4xL3QxMDA4MDEtYzU0NC12YWxnbi0wNC1kLWFnaS5odG1sCiBjc3MyLjEvdDEwMDgw
MS1jNTQ4LWxuLWh0LTAxLWItYWcuaHRtbAogY3NzMi4xL3QxMDA4MDEtYzU0OC1sbi1odC0wMi1i
LWFnLmh0bWwKIGNzczIuMS90MTAwODAxLWM1NDgtbG4taHQtMDMtZC1hZy5odG1sCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>368210</attachid>
            <date>2019-04-24 21:36:54 -0700</date>
            <delta_ts>2019-04-25 16:05:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-197198-20190424213650.patch</filename>
            <type>text/plain</type>
            <size>150864</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ0MDk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWYyZDVlM2FkZDNmOGMz
NjgxZDk0NWQ1YmZjYjQzZDVmZTI2MGQ3OS4uZTlhOThmMTE1ODJkMWFjYmQzMWY4NTAzMzc5M2Zl
NDAxYjcwN2JkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3MCBAQAorMjAxOS0wNC0yMyAgWmFs
YW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgorCisgICAgICAgIFtMRkNdW0lGQ10gSW50cm9k
dWNlIERpc3BsYXlSdW4gdG8gdGhlIGRpc3BsYXkgdHJlZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk3MTk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV0lQLgorCisgICAgICAgICogU291cmNlcy50eHQ6
CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IGxheW91dC9Gb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6Y29udGVudEhlaWdodEZvckZvcm1hdHRpbmdDb250ZXh0Um9vdCk6CisgICAgICAg
ICogbGF5b3V0L1ZlcmlmaWNhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OmFy
ZUVzc2VudGlhbGx5RXF1YWwpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpvdXRwdXRNaXNt
YXRjaGluZ1NpbXBsZUxpbmVJbmZvcm1hdGlvbklmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6Y2hlY2tGb3JNYXRjaGluZ05vblRleHRSdW5zKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6Y2hlY2tGb3JNYXRjaGluZ1RleHRSdW5zKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6b3V0cHV0TWlzbWF0Y2hpbmdDb21wbGV4TGluZUluZm9ybWF0aW9uSWZOZWVkZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMYXlvdXRTdGF0ZTo6dmVyaWZ5QW5kT3V0cHV0TWlz
bWF0Y2hpbmdMYXlvdXRUcmVlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6cmVz
b2x2ZUZvclJlbGF0aXZlUG9zaXRpb25JZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgICogbGF5
b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRy
eTo6aW5GbG93Tm9uUmVwbGFjZWRIZWlnaHRBbmRNYXJnaW4pOgorICAgICAgICAqIGxheW91dC9k
aXNwbGF5dHJlZS9EaXNwbGF5Qm94Lmg6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3g6
Omhvcml6b250YWxNYXJnaW4gY29uc3QpOgorICAgICAgICAqIGxheW91dC9kaXNwbGF5dHJlZS9E
aXNwbGF5UnVuLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9y
bWF0dGluZy9JbmxpbmVSdW4uaC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJ1bjo6VGV4
dENvbnRleHQ6OnNldFN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJ1bjo6VGV4
dENvbnRleHQ6OnNldExlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSdW46OlRl
eHRDb250ZXh0OjpzdGFydCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSdW46
OlRleHRDb250ZXh0OjplbmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UnVu
OjpUZXh0Q29udGV4dDo6bGVuZ3RoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6
OlJ1bjo6bG9naWNhbFRvcExlZnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6
UnVuOjpsb2dpY2FsTGVmdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSdW46
OmxvZ2ljYWxSaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSdW46Omxv
Z2ljYWxUb3AgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UnVuOjpsb2dpY2Fs
Qm90dG9tIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJ1bjo6bG9naWNhbFdp
ZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJ1bjo6bG9naWNhbEhlaWdo
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSdW46OnNldExvZ2ljYWxXaWR0
aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSdW46OnNldExvZ2ljYWxMZWZ0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJ1bjo6c2V0TG9naWNhbFJpZ2h0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXk6OlJ1bjo6bW92ZVZlcnRpY2FsbHkpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheTo6UnVuOjptb3ZlSG9yaXpvbnRhbGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXk6OlJ1bjo6ZXhwYW5kVmVydGljYWxseSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
OjpSdW46OmV4cGFuZEhvcml6b250YWxseSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpS
dW46OmV4cGFuc2lvbk9wcG9ydHVuaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJ1
bjo6c2V0VGV4dENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UnVuOjp0ZXh0
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSdW46OnRleHRDb250ZXh0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJ1bjo6UnVuKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXk6OlJ1bjo6VGV4dENvbnRleHQ6OlRleHRDb250ZXh0KToKKyAgICAgICAg
KiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpsYXlvdXQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dDo6Y29tcHV0ZUludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUludHJpbnNpY1dp
ZHRoRm9yRmxvYXRCb3ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVG
b3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUludHJpbnNpY1dpZHRoRm9ySW5saW5lQmxvY2sgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6
aW5pdGlhbGl6ZVZlcnRpY2FsTWFyZ2luRm9ySW5saW5lQ29udGFpbmVyIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVIb3Jp
em9udGFsTWFyZ2luIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9y
bWF0dGluZ0NvbnRleHQ6OmNvbGxlY3RJbmxpbmVDb250ZW50IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVNYXJnaW4gY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjphZGREZXRhY2hpbmdSdWxl
cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OmNyZWF0ZUFuZEFwcGVuZElu
bGluZUl0ZW0pOiBEZWxldGVkLgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lu
bGluZUZvcm1hdHRpbmdDb250ZXh0Lmg6CisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRp
bmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6TGluZTo6cnVucyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6
OmlzRW1wdHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjppc0ZpcnN0
TGluZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6OmF2YWlsYWJsZVdp
ZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZTo6bG9naWNhbExlZnQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjpsb2dpY2FsUmlnaHQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjppbml0KToKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6TGluZTo6Y2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0Ojpp
c1RyaW1tYWJsZUNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjpoYXNU
cmFpbGluZ1doaXRlc3BhY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5l
Ojp0cmFpbGluZ1doaXRlc3BhY2VXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkxpbmU6Omhhc0NvbnRlbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpM
aW5lOjphcHBlbmROb25CcmVha2FibGVTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkxpbmU6OmFwcGVuZFRleHRDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGlu
ZTo6YXBwZW5kTm9uVGV4dENvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5l
OjphZGp1c3RMb2dpY2FsTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6OmFk
anVzdExvZ2ljYWxSaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1h
dHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpsYXlvdXQgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6Y2xvc2VMaW5l
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQ6OkxpbmVMYXlvdXQ6OmNvbW1pdElubGluZUl0ZW1Ub0xpbmUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6Y29t
cHV0ZUZsb2F0UG9zaXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxp
bmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6anVzdGlmeVJ1bnMpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6Y29t
cHV0ZUV4cGFuc2lvbk9wcG9ydHVuaXRpZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6YWxpZ25SdW5zIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZTo6Y29udGVudExvZ2ljYWxMZWZ0IGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZTo6bGFzdFJ1blR5
cGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjpjb250
ZW50TG9naWNhbFJpZ2h0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6TGluZTo6YXBwZW5kQ29udGVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpzcGxpdElubGluZVJ1bklm
TmVlZGVkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OmNyZWF0ZUZpbmFsUnVucyBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0
OjpMaW5lTGF5b3V0Ojpwb3N0UHJvY2Vzc0lubGluZVJ1bnMgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91
dDo6YXBwZW5kQ29udGVudFRvTGluZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpwbGFjZUluRmxv
d1Bvc2l0aW9uZWRDaGlsZHJlbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpydW5XaWR0aCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9y
bWF0dGluZ1N0YXRlLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRp
bmdTdGF0ZTo6aW5saW5lSXRlbXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVG
b3JtYXR0aW5nU3RhdGU6OmFkZElubGluZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpJbmxpbmVGb3JtYXR0aW5nU3RhdGU6OmFkZElubGluZVJ1bik6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdTdGF0ZTo6aW5saW5lQ29udGVudCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdTdGF0ZTo6bGFzdElu
bGluZUl0ZW0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxp
bmVGb3JtYXR0aW5nU3RhdGU6OmFwcGVuZElubGluZVJ1bik6IERlbGV0ZWQuCisgICAgICAgICog
bGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lSXRlbS5oOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpJbmxpbmVJdGVtOjp0eXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6SW5saW5lSXRlbTo6aXNUZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
SW5saW5lSXRlbTo6aXNCb3ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxp
bmVJdGVtOjppc0hhcmRMaW5lQnJlYWsgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpJbmxpbmVJdGVtOjppc0Zsb2F0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
SW5saW5lSXRlbTo6aXNMaW5lQnJlYWsgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpJbmxpbmVJdGVtOjppc0NvbnRhaW5lclN0YXJ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6SW5saW5lSXRlbTo6aXNDb250YWluZXJFbmQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpJbmxpbmVJdGVtOjpJbmxpbmVJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6SW5saW5lSXRlbTo6c2V0V2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpJbmxpbmVJdGVtOjp3aWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Oklu
bGluZUl0ZW06OmFkZERldGFjaGluZ1J1bGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpJbmxpbmVJdGVtOjpkZXRhY2hpbmdSdWxlcyBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUl0ZW06Om5vbkJyZWFrYWJsZVN0YXJ0IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lSXRlbTo6bm9uQnJl
YWthYmxlRW5kIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5s
aW5lSXRlbTo6YWRkTm9uQnJlYWthYmxlU3RhcnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpJbmxpbmVJdGVtOjphZGROb25CcmVha2FibGVFbmQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVJdGVtOjp0ZXh0Q29udGVudCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJyZWFr
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnJlYWtlcjo6TGluZUJyZWFr
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnJlYWtlcjo6YnJlYWtpbmdDb250
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJyZWFrZXI6OndvcmRCcmVha2lu
Z0JlaGF2aW9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJyZWFrZXI6
OnJ1bldpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJyZWFrZXI6
OnRleHRXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUxpbmVC
cmVha2VyOjpJbmxpbmVMaW5lQnJlYWtlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OklubGluZUxpbmVCcmVha2VyOjpuZXh0UnVuKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6SW5saW5lTGluZUJyZWFrZXI6OmlzQXRDb250ZW50RW5kIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lTGluZUJyZWFrZXI6Omxp
bmVCcmVha2luZ0JlaGF2aW9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
SW5saW5lTGluZUJyZWFrZXI6OnJ1bldpZHRoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6SW5saW5lTGluZUJyZWFrZXI6OnRleHRXaWR0aCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUxpbmVCcmVha2VyOjpzcGxpdFJ1
bik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUxpbmVCcmVha2Vy
OjphZGp1c3RTcGxpdFBvc2l0aW9uV2l0aEh5cGhlbmF0aW9uIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnJlYWtlci5oOgorICAg
ICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZVJ1blByb3ZpZGVyLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVSdW5Qcm92aWRl
ci5oOiBSZW1vdmVkLgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZVRl
eHRJdGVtLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OmlzV2hpdGVzcGFj
ZUNoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OmlzU29mdExpbmVCcmVhayk6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Om1vdmVUb05leHROb25XaGl0ZXNwYWNlUG9zaXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0Ojptb3ZlVG9OZXh0QnJlYWthYmxlUG9zaXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVUZXh0SXRlbTo6Y3JlYXRlQW5k
QXBwZW5kVGV4dEl0ZW1zKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lVGV4dEl0
ZW06OklubGluZVRleHRJdGVtKToKKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9J
bmxpbmVUZXh0SXRlbS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5l
Zm9ybWF0dGluZy90ZXh0L1RleHRVdGlsLmguCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Oklu
bGluZVRleHRJdGVtOjpzdGFydCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Oklu
bGluZVRleHRJdGVtOjplbmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxp
bmVUZXh0SXRlbTo6bGVuZ3RoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5s
aW5lVGV4dEl0ZW06OmlzV2hpdGVzcGFjZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OklubGluZVRleHRJdGVtOjppc0NvbGxhcHNlZCBjb25zdCk6CisgICAgICAgICogbGF5b3V0
L2lubGluZWZvcm1hdHRpbmcvdGV4dC9UZXh0VXRpbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OlRleHRVdGlsOjpoeXBoZW5Qb3NpdGlvbkJlZm9yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OlRleHRVdGlsOjp3aWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRl
eHRVdGlsOjpmaXhlZFBpdGNoV2lkdGgpOgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0
aW5nL3RleHQvVGV4dFV0aWwuaDoKKyAgICAgICAgKiBsYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRS
ZXBsYWNlZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlJlcGxhY2VkOjppbnRyaW5z
aWNSYXRpbyBjb25zdCk6CisgICAgICAgICogbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0VHJlZUJ1
aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpvdXRwdXRJbmxpbmVSdW5zKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6b3V0cHV0TGF5b3V0Qm94KToKKyAgICAgICAgKiBw
YWdlL0ZyYW1lVmlld0xheW91dENvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bGF5b3V0
VXNpbmdGb3JtYXR0aW5nQ29udGV4dCk6CisKIDIwMTktMDQtMDkgIFphbGFuIEJ1anRhcyAgPHph
bGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbQXV0b1NpemluZ10gQXZvaWQgbWFraW5nIHRleHQg
cGFyYWdyYXBocyBzY3JvbGwgaG9yaXpvbnRhbGx5IHdoZW4gdGhlcmUgaXMgYSB3aWRlIHRhYmxl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXMudHh0CmluZGV4IDIxOWM4YjcwZGM5ZjU4OWFlZjY4NmUzYjJkYTE0NmFiMzkwZjc4
MDUuLmQwNTFkYmNiOWRkZmM5Y2JiOTVjMDQ3NjE4ZTE2MmYxZGZkYWUzNTcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMu
dHh0CkBAIC0xMzQzLDcgKzEzNDMsNyBAQCBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVG
b3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQuY3BwCiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9J
bmxpbmVGb3JtYXR0aW5nU3RhdGUuY3BwCiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVJ
bnZhbGlkYXRpb24uY3BwCiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnJlYWtl
ci5jcHAKLWxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZVJ1blByb3ZpZGVyLmNwcAorbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lVGV4dEl0ZW0uY3BwCiBsYXlvdXQvaW5saW5lZm9y
bWF0dGluZy90ZXh0L1RleHRVdGlsLmNwcAogbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0QmxvY2tD
b250YWluZXIuY3BwCiBsYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRCb3guY3BwCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggOGEwOTI3
Y2M2NTRkYzYwNTZlOWFkY2MyMTYwYjkyYjYyYWY2ZDk3Yy4uZGE3NGI5OGI5NTJlZjVjNjdhNTIy
YWEyOTQ3ZWE0OTQ5MmUxMTM4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjAwNCwxMCArMjAwNCw5IEBACiAJCTZFRDg3OEM1
MTQ3NDkzRjQwMDRDMzU5NyAvKiBSZW5kZXJUYWJsZUNhcHRpb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFRDg3OEMzMTQ3NDkzRjQwMDRDMzU5NyAv
KiBSZW5kZXJUYWJsZUNhcHRpb24uaCAqLzsgfTsKIAkJNkVEOEMzN0ExODNCRkY4QzAwOUU1M0JE
IC8qIEJveFNoYXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA2RUQ4QzM3ODE4M0JGRjhDMDA5RTUzQkQgLyogQm94U2hhcGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2RUU4QTc3MzEwRjgwM0YzMDA1
QTRBMjQgLyogSlNXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUU4QTc3MTEwRjgwM0YzMDA1QTRBMjQgLyogSlNX
ZWJHTENvbnRleHRBdHRyaWJ1dGVzLmggKi87IH07Ci0JCTZGMjE5RDc3MjE3OEQzNzIwMEJCMDMz
QyAvKiBJbmxpbmVSdW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDZGMjE5RDc0MjE3OEQzNzEwMEJCMDMzQyAvKiBJbmxpbmVSdW4uaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk2RjFDQzFERTIyNUY4QjQ5
MDA3MjBBRDIgLyogSW5saW5lVGV4dEl0ZW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDZGMUNDMUREMjI1RjhCNDIwMDcyMEFEMiAvKiBJbmxpbmVUZXh0
SXRlbS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTZGMjIyQjc2MUFCNTJEOEEwMDk0NjUxQSAvKiBXZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RjIyMkI3
NTFBQjUyRDhBMDA5NDY1MUEgLyogV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2UuY3BwICovOyB9
OwogCQk2RjNFMUY2MjIxMzYxNDIwMDBBNjVBMDggLyogRmxvYXRCb3guaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZGM0UxRjYxMjEzNjE0MTcwMEE2NUEw
OCAvKiBGbG9hdEJveC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07Ci0JCTZGNTIxN0M3MjE3N0Y1QTcwMDY1ODNCQiAvKiBJbmxpbmVSdW5Qcm92aWRlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkY1MjE3QzQy
MTc3RjVBNjAwNjU4M0JCIC8qIElubGluZVJ1blByb3ZpZGVyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNkY3Q0EzQzYyMDhDMjk1NzAwMkYyOUFC
IC8qIExheW91dFN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA2RjdDQTNDNDIwOEMyOTU2MDAyRjI5QUIgLyogTGF5b3V0U3RhdGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2RjdDQTNDQTIwOEMy
QjJFMDAyRjI5QUIgLyogSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZGN0NBM0M4MjA4QzJCMkUwMDJGMjlBQiAv
KiBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTZGOTk1QTE1MUE3MDc1NjIwMEE3MzVGNCAvKiBXZWJHTFN5
bmMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkY5
OTVBMTMxQTcwNzU2MjAwQTczNUY0IC8qIFdlYkdMU3luYy5jcHAgKi87IH07CkBAIC0yMDI4LDYg
KzIwMjcsNyBAQAogCQk2RkE0NDU0RTg5OEYyRkMxNjhCQzM4QzEgLyogSlNCZWZvcmVVbmxvYWRF
dmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjlF
MDRBMjdCRUQyRjgxRjk4RTkwMjJCIC8qIEpTQmVmb3JlVW5sb2FkRXZlbnQuaCAqLzsgfTsKIAkJ
NkZCMTFCNUMyMTc4M0ZEMDAwRTJBNTc0IC8qIFRleHRVdGlsLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RkIxMUI1OTIxNzgzRkNGMDBFMkE1NzQgLyog
VGV4dFV0aWwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk2RkI1RTIxNDIyMUYyNDUzMDAzOTg5Q0YgLyogQ29udGVudENoYW5nZU9ic2VydmVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RkI1RTIxMjIy
MUYyNDQ3MDAzOTg5Q0YgLyogQ29udGVudENoYW5nZU9ic2VydmVyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNkZDRTFBMUEyMjYxOEFCRDAwNEYw
MzQzIC8qIERpc3BsYXlSdW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDZGQ0UxQTE4MjI2MThBQjMwMDRGMDM0MyAvKiBEaXNwbGF5UnVuLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNkZFMTk4MTcyMTc4
Mzk3QzAwNDQ2RjA4IC8qIElubGluZUxpbmVCcmVha2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RkUxOTgxNTIxNzgzOTdDMDA0NDZGMDggLyogSW5s
aW5lTGluZUJyZWFrZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk2RkU3Q0ZBMjIxNzdFRUYyMDA1QjE1NzMgLyogSW5saW5lSXRlbS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkZFN0NGQTAyMTc3RUVG
MTAwNUIxNTczIC8qIElubGluZUl0ZW0uaCAqLzsgfTsKIAkJNkZFN0NGQTQyMTc3RUYxMDAwNUIx
NTczIC8qIExheW91dExpbmVCcmVha0JveC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNkZFN0NGQTMyMTc3RUYxMDAwNUIxNTczIC8qIExheW91dExpbmVC
cmVha0JveC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CkBAIC05MDg1LDE1ICs5MDg1LDE0IEBACiAJCTZFRThBNzcwMTBGODAzRjMwMDVBNEEyNCAvKiBK
U1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNkVFOEE3NzExMEY4MDNGMzAwNUE0QTI0IC8qIEpTV2ViR0xDb250ZXh0QXR0
cmlidXRlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dlYkdMQ29udGV4
dEF0dHJpYnV0ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkYwODMwREYyMEI0
Njk1MTAwOEE5NDVCIC8qIEJsb2NrRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk2RjIxOUQ3NDIxNzhEMzcxMDBCQjAzM0MgLyogSW5saW5l
UnVuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElubGluZVJ1bi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RjFDQzFEQzIyNUY4QjQxMDA3MjBBRDIgLyogSW5s
aW5lVGV4dEl0ZW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5saW5lVGV4dEl0ZW0uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RjFDQzFERDIyNUY4QjQyMDA3MjBBRDIgLyog
SW5saW5lVGV4dEl0ZW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5saW5lVGV4dEl0ZW0uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkYyMjJCNzQxQUI1MkQ2NDAwOTQ2NTFBIC8qIFdlYkdM
VmVydGV4QXJyYXlPYmplY3RCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdMVmVydGV4QXJyYXlP
YmplY3RCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGMjIyQjc1MUFCNTJE
OEEwMDk0NjUxQSAvKiBXZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGMjVCMjAwMjIwQTg1QUIwMDAwMDExQiAv
KiBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSW5saW5lRm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNkYzNUVGQUYyMTg3Q0JENTAwNDRFMEY0IC8qIElubGluZUZvcm1hdHRp
bmdDb250ZXh0R2VvbWV0cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSW5saW5lRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTZGM0UxRjVGMjEzNjE0MTcwMEE2NUEwOCAvKiBGbG9hdEJveC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBGbG9hdEJveC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTZGM0UxRjYxMjEzNjE0MTcwMEE2NUEwOCAvKiBGbG9hdEJveC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGbG9hdEJveC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2RjUyMTdDNDIxNzdG
NUE2MDA2NTgzQkIgLyogSW5saW5lUnVuUHJvdmlkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW5saW5lUnVuUHJvdmlkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJNkY1MjE3QzYyMTc3RjVBNjAwNjU4M0JCIC8qIElubGluZVJ1blByb3ZpZGVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElubGluZVJ1blByb3ZpZGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkY3MzkxOEMyMTA2Q0VERDAwNkFGMjYy
IC8qIExheW91dFVuaXRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheW91dFVuaXRzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGN0NBM0M0MjA4QzI5NTYwMDJGMjlBQiAvKiBMYXlvdXRT
dGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBMYXlvdXRTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk2RjdDQTNDNTIwOEMyOTU2MDAyRjI5QUIgLyogTGF5b3V0U3RhdGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gTGF5b3V0U3RhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtOTEzMCw2ICs5MTI5LDcgQEAKIAkJNkZCMTFCNUIyMTc4M0ZDRjAwRTJBNTc0IC8q
IFRleHRVdGlsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRleHRV
dGlsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkZCNUUyMTIyMjFGMjQ0NzAw
Mzk4OUNGIC8qIENvbnRlbnRDaGFuZ2VPYnNlcnZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb250ZW50
Q2hhbmdlT2JzZXJ2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkZCQjg2MDUy
MEI0NjRCNjAwREFEOTM4IC8qIEZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTZGQ0UxQTE4MjI2MThBQjMwMDRGMDM0MyAvKiBEaXNwbGF5UnVuLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IERpc3BsYXlSdW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNkZFMTk4MTMyMTc4Mzk3QjAwNDQ2RjA4IC8qIElubGluZUxpbmVCcmVha2VyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElubGluZUxpbmVCcmVha2VyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkZFMTk4MTUyMTc4Mzk3QzAwNDQ2RjA4IC8q
IElubGluZUxpbmVCcmVha2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElu
bGluZUxpbmVCcmVha2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGRTdBQTI2
MjFDMzdCNjMwMDI5NkRDRCAvKiBNYXJnaW5UeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXJnaW5U
eXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTYzMzgsOSArMTYzMzgsOCBA
QAogCQkJCTZGRTdDRkEwMjE3N0VFRjEwMDVCMTU3MyAvKiBJbmxpbmVJdGVtLmggKi8sCiAJCQkJ
NkZFMTk4MTMyMTc4Mzk3QjAwNDQ2RjA4IC8qIElubGluZUxpbmVCcmVha2VyLmNwcCAqLywKIAkJ
CQk2RkUxOTgxNTIxNzgzOTdDMDA0NDZGMDggLyogSW5saW5lTGluZUJyZWFrZXIuaCAqLywKLQkJ
CQk2RjIxOUQ3NDIxNzhEMzcxMDBCQjAzM0MgLyogSW5saW5lUnVuLmggKi8sCi0JCQkJNkY1MjE3
QzYyMTc3RjVBNjAwNjU4M0JCIC8qIElubGluZVJ1blByb3ZpZGVyLmNwcCAqLywKLQkJCQk2RjUy
MTdDNDIxNzdGNUE2MDA2NTgzQkIgLyogSW5saW5lUnVuUHJvdmlkZXIuaCAqLywKKwkJCQk2RjFD
QzFEQzIyNUY4QjQxMDA3MjBBRDIgLyogSW5saW5lVGV4dEl0ZW0uY3BwICovLAorCQkJCTZGMUND
MUREMjI1RjhCNDIwMDcyMEFEMiAvKiBJbmxpbmVUZXh0SXRlbS5oICovLAogCQkJKTsKIAkJCXBh
dGggPSBpbmxpbmVmb3JtYXR0aW5nOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTE2
MzUwLDYgKzE2MzQ5LDcgQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCTExOTlGQTVBMjA4RTNDN0Yw
MDIzNThDQyAvKiBEaXNwbGF5Qm94LmNwcCAqLywKIAkJCQkxMTk5RkE1OTIwOEUzQzdGMDAyMzU4
Q0MgLyogRGlzcGxheUJveC5oICovLAorCQkJCTZGQ0UxQTE4MjI2MThBQjMwMDRGMDM0MyAvKiBE
aXNwbGF5UnVuLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IGRpc3BsYXl0cmVlOwogCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTI4NzYyLDYgKzI4NzYyLDcgQEAKIAkJCQkyRDI5RUNDQTE5
MkYxRjFEMDA5ODRCNzggLyogRGlzcGxheVJlZnJlc2hNb25pdG9ySU9TLmggaW4gSGVhZGVycyAq
LywKIAkJCQkyREU3MDAyMzE5MkZFODJBMDBCMDk3NUMgLyogRGlzcGxheVJlZnJlc2hNb25pdG9y
TWFjLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDI5RUNDODE5MkVDQzgzMDA5ODRCNzggLyogRGlz
cGxheVJlZnJlc2hNb25pdG9yTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNkZDRTFBMUEy
MjYxOEFCRDAwNEYwMzQzIC8qIERpc3BsYXlSdW4uaCBpbiBIZWFkZXJzICovLAogCQkJCUZEMzE2
MDkxMTJCMDI2RjcwMEMxQTM1OSAvKiBEaXN0YW5jZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODQ3
MzBENzcxMjQ4RjBCMzAwRDNBOUM5IC8qIERpc3RhbnRMaWdodFNvdXJjZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQjJGMzRGRTYwRTgyRjgxNDAwRjYyN0NEIC8qIEROUy5oIGluIEhlYWRlcnMgKi8s
CkBAIC0yOTM5MCwxMSArMjkzOTEsMTAgQEAKIAkJCQk2RkU3Q0ZBMjIxNzdFRUYyMDA1QjE1NzMg
LyogSW5saW5lSXRlbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFNzg5MTYxMTIwRDYwODAwNjBF
Q0U1IC8qIElubGluZUl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk2RkUxOTgxNzIxNzgz
OTdDMDA0NDZGMDggLyogSW5saW5lTGluZUJyZWFrZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTZG
MjE5RDc3MjE3OEQzNzIwMEJCMDMzQyAvKiBJbmxpbmVSdW4uaCBpbiBIZWFkZXJzICovLAotCQkJ
CTZGNTIxN0M3MjE3N0Y1QTcwMDY1ODNCQiAvKiBJbmxpbmVSdW5Qcm92aWRlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQUE0QzNBNzcwQjJCMTY3OTAwMjMzNEEyIC8qIElubGluZVN0eWxlU2hlZXRP
d25lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFQTQ4NUEwOTdEOTMwMjAwOTRDOUU0IC8qIElu
bGluZVRleHRCb3guaCBpbiBIZWFkZXJzICovLAogCQkJCTFDMDEwNzAxMTkyNTk0REYwMDhBNDIw
MSAvKiBJbmxpbmVUZXh0Qm94U3R5bGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTZGMUNDMURFMjI1
RjhCNDkwMDcyMEFEMiAvKiBJbmxpbmVUZXh0SXRlbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEw
QTU4RTUxQkFBNDBCMTAwQzE5MjgyIC8qIEluUHJvY2Vzc0lEQlNlcnZlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMkVCNzY3NTcxREExOUJERjAwM0UyM0I1IC8qIElucHV0RXZlbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUU1MkVGREY0MjExMjg3NUEwMEFEMjgyQSAvKiBJbnB1dE1vZGUuaCBpbiBI
ZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdD
b250ZXh0R2VvbWV0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdDb250
ZXh0R2VvbWV0cnkuY3BwCmluZGV4IDk2N2NmZDQ5OThiNmExYTA4OTdkMDYyZmYwZGJhYjVlZDVh
MTczZTcuLjE4OTYzYzM1NjZkMmMxZDUzZGRlNzA4MDU2NmM3YWNlOGIzYTg5YzYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAK
QEAgLTExMiw4ICsxMTIsOCBAQCBzdGF0aWMgTGF5b3V0VW5pdCBjb250ZW50SGVpZ2h0Rm9yRm9y
bWF0dGluZ0NvbnRleHRSb290KGNvbnN0IExheW91dFN0YXRlJiBsYXlvdQogICAgICAgICAvLyBU
aGlzIGlzIHRlbXAgYW5kIHdpbGwgYmUgcmVwbGFjZWQgYnkgdGhlIGNvcnJlY3QgZGlzcGxheSBi
b3ggb25jZSBpbmxpbmUgcnVucyBtb3ZlIG92ZXIgdG8gdGhlIGRpc3BsYXkgdHJlZS4KICAgICAg
ICAgYXV0byYgaW5saW5lUnVucyA9IGRvd25jYXN0PElubGluZUZvcm1hdHRpbmdTdGF0ZT4obGF5
b3V0U3RhdGUuZXN0YWJsaXNoZWRGb3JtYXR0aW5nU3RhdGUobGF5b3V0Qm94KSkuaW5saW5lUnVu
cygpOwogICAgICAgICBpZiAoIWlubGluZVJ1bnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICB0
b3AgPSBpbmxpbmVSdW5zWzBdLmxvZ2ljYWxUb3AoKTsKLSAgICAgICAgICAgIGJvdHRvbSA9ICBp
bmxpbmVSdW5zLmxhc3QoKS5sb2dpY2FsQm90dG9tKCk7CisgICAgICAgICAgICB0b3AgPSBpbmxp
bmVSdW5zWzBdLT5sb2dpY2FsVG9wKCk7CisgICAgICAgICAgICBib3R0b20gPSAgaW5saW5lUnVu
cy5sYXN0KCktPmxvZ2ljYWxCb3R0b20oKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoZm9y
bWF0dGluZ1Jvb3RDb250YWluZXIuZXN0YWJsaXNoZXNCbG9ja0Zvcm1hdHRpbmdDb250ZXh0KCkg
fHwgbGF5b3V0Qm94LmlzRG9jdW1lbnRCb3goKSkgewogICAgICAgICBpZiAoZm9ybWF0dGluZ1Jv
b3RDb250YWluZXIuaGFzSW5GbG93Q2hpbGQoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L1ZlcmlmaWNhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvVmVyaWZp
Y2F0aW9uLmNwcAppbmRleCAyZTc3YzM5ZTkyMTQ0OTQyZWYyOWU0MGU0Yzc0MzZlNTExMjAwYmMy
Li5mMDZlM2RlYmYzNzRjYzAzMTFiZDNkNjQ2ODczMGZiMGMyMjUxZjRlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvVmVyaWZpY2F0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvVmVyaWZpY2F0aW9uLmNwcApAQCAtNDYsNyArNDYsNyBAQCBzdGF0aWMgYm9vbCBh
cmVFc3NlbnRpYWxseUVxdWFsKGZsb2F0IGEsIExheW91dFVuaXQgYikKICAgICBpZiAoYSA9PSBi
LnRvRmxvYXQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICByZXR1cm4gZmFicyhhIC0g
Yi50b0Zsb2F0KCkpIDw9IDggKiBMYXlvdXRVbml0OjplcHNpbG9uKCk7CisgICAgcmV0dXJuIGZh
YnMoYSAtIGIudG9GbG9hdCgpKSA8PSAxMCAqIExheW91dFVuaXQ6OmVwc2lsb24oKTsKIH0KIAog
c3RhdGljIGJvb2wgb3V0cHV0TWlzbWF0Y2hpbmdTaW1wbGVMaW5lSW5mb3JtYXRpb25JZk5lZWRl
ZChUZXh0U3RyZWFtJiBzdHJlYW0sIGNvbnN0IExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgY29u
c3QgUmVuZGVyQmxvY2tGbG93JiBibG9ja0Zsb3csIGNvbnN0IENvbnRhaW5lciYgaW5saW5lRm9y
bWF0dGluZ1Jvb3QpCkBAIC03MiwzMyArNzIsMzMgQEAgc3RhdGljIGJvb2wgb3V0cHV0TWlzbWF0
Y2hpbmdTaW1wbGVMaW5lSW5mb3JtYXRpb25JZk5lZWRlZChUZXh0U3RyZWFtJiBzdHJlYW0sIGMK
ICAgICAgICAgYXV0byYgc2ltcGxlUnVuID0gbGluZUxheW91dERhdGEtPnJ1bkF0KGkpOwogICAg
ICAgICBhdXRvJiBpbmxpbmVSdW4gPSBpbmxpbmVSdW5MaXN0W2ldOwogCi0gICAgICAgIGF1dG8g
bWF0Y2hpbmdSdW5zID0gYXJlRXNzZW50aWFsbHlFcXVhbChzaW1wbGVSdW4ubG9naWNhbExlZnQs
IGlubGluZVJ1bi5sb2dpY2FsTGVmdCgpKSAmJiBhcmVFc3NlbnRpYWxseUVxdWFsKHNpbXBsZVJ1
bi5sb2dpY2FsUmlnaHQsIGlubGluZVJ1bi5sb2dpY2FsUmlnaHQoKSk7CisgICAgICAgIGF1dG8g
bWF0Y2hpbmdSdW5zID0gYXJlRXNzZW50aWFsbHlFcXVhbChzaW1wbGVSdW4ubG9naWNhbExlZnQs
IGlubGluZVJ1bi0+bG9naWNhbExlZnQoKSkgJiYgYXJlRXNzZW50aWFsbHlFcXVhbChzaW1wbGVS
dW4ubG9naWNhbFJpZ2h0LCBpbmxpbmVSdW4tPmxvZ2ljYWxSaWdodCgpKTsKICAgICAgICAgaWYg
KG1hdGNoaW5nUnVucykKLSAgICAgICAgICAgIG1hdGNoaW5nUnVucyA9IChzaW1wbGVSdW4uc3Rh
cnQgPT0gaW5saW5lUnVuLnRleHRDb250ZXh0KCktPnN0YXJ0KCkgJiYgc2ltcGxlUnVuLmVuZCA9
PSAoaW5saW5lUnVuLnRleHRDb250ZXh0KCktPnN0YXJ0KCkgKyBpbmxpbmVSdW4udGV4dENvbnRl
eHQoKS0+bGVuZ3RoKCkpKTsKKyAgICAgICAgICAgIG1hdGNoaW5nUnVucyA9IHNpbXBsZVJ1bi5z
dGFydCA9PSBpbmxpbmVSdW4tPnRleHRDb250ZXh0KCktPnN0YXJ0KCkgJiYgc2ltcGxlUnVuLmVu
ZCA9PSBpbmxpbmVSdW4tPnRleHRDb250ZXh0KCktPmVuZCgpOwogICAgICAgICBpZiAobWF0Y2hp
bmdSdW5zKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgc3RyZWFtIDw8ICJNaXNt
YXRjaGluZzogc2ltcGxlIHJ1bigiIDw8IHNpbXBsZVJ1bi5zdGFydCA8PCAiLCAiIDw8IHNpbXBs
ZVJ1bi5lbmQgPDwgIikgKCIgPDwgc2ltcGxlUnVuLmxvZ2ljYWxMZWZ0IDw8ICIsICIgPDwgc2lt
cGxlUnVuLmxvZ2ljYWxSaWdodCA8PCAiKSBsYXlvdXQgcnVuKCIgPDwgaW5saW5lUnVuLnRleHRD
b250ZXh0KCktPnN0YXJ0KCkgPDwgIiwgIiA8PCBpbmxpbmVSdW4udGV4dENvbnRleHQoKS0+c3Rh
cnQoKSArIGlubGluZVJ1bi50ZXh0Q29udGV4dCgpLT5sZW5ndGgoKSA8PCAiKSAoIiA8PCBpbmxp
bmVSdW4ubG9naWNhbExlZnQoKSA8PCAiLCAiIDw8IGlubGluZVJ1bi5sb2dpY2FsUmlnaHQoKSA8
PCAiKSI7CisgICAgICAgIHN0cmVhbSA8PCAiTWlzbWF0Y2hpbmc6IHNpbXBsZSBydW4oIiA8PCBz
aW1wbGVSdW4uc3RhcnQgPDwgIiwgIiA8PCBzaW1wbGVSdW4uZW5kIDw8ICIpICgiIDw8IHNpbXBs
ZVJ1bi5sb2dpY2FsTGVmdCA8PCAiLCAiIDw8IHNpbXBsZVJ1bi5sb2dpY2FsUmlnaHQgPDwgIikg
bGF5b3V0IHJ1bigiIDw8IGlubGluZVJ1bi0+dGV4dENvbnRleHQoKS0+c3RhcnQoKSA8PCAiLCAi
IDw8IGlubGluZVJ1bi0+dGV4dENvbnRleHQoKS0+ZW5kKCkgPDwgIikgKCIgPDwgaW5saW5lUnVu
LT5sb2dpY2FsTGVmdCgpIDw8ICIsICIgPDwgaW5saW5lUnVuLT5sb2dpY2FsUmlnaHQoKSA8PCAi
KSI7CiAgICAgICAgIHN0cmVhbS5uZXh0TGluZSgpOwogICAgICAgICBtaXNtYXRjaGVkID0gdHJ1
ZTsKICAgICB9CiAgICAgcmV0dXJuIG1pc21hdGNoZWQ7CiB9CiAKLXN0YXRpYyBib29sIGNoZWNr
Rm9yTWF0Y2hpbmdOb25UZXh0UnVucyhjb25zdCBJbmxpbmVSdW4mIGlubGluZVJ1biwgY29uc3Qg
V2ViQ29yZTo6SW5saW5lQm94JiBpbmxpbmVCb3gpCitzdGF0aWMgYm9vbCBjaGVja0Zvck1hdGNo
aW5nTm9uVGV4dFJ1bnMoY29uc3QgRGlzcGxheTo6UnVuJiBpbmxpbmVSdW4sIGNvbnN0IFdlYkNv
cmU6OklubGluZUJveCYgaW5saW5lQm94KQogewogICAgIHJldHVybiBhcmVFc3NlbnRpYWxseUVx
dWFsKGlubGluZUJveC5sb2dpY2FsTGVmdCgpLCBpbmxpbmVSdW4ubG9naWNhbExlZnQoKSkKICAg
ICAgICAgJiYgYXJlRXNzZW50aWFsbHlFcXVhbChpbmxpbmVCb3gubG9naWNhbFJpZ2h0KCksIGlu
bGluZVJ1bi5sb2dpY2FsUmlnaHQoKSkKICAgICAgICAgJiYgYXJlRXNzZW50aWFsbHlFcXVhbChp
bmxpbmVCb3gubG9naWNhbEhlaWdodCgpLCBpbmxpbmVSdW4ubG9naWNhbEhlaWdodCgpKTsKIH0K
IAotc3RhdGljIGJvb2wgY2hlY2tGb3JNYXRjaGluZ1RleHRSdW5zKGNvbnN0IElubGluZVJ1biYg
aW5saW5lUnVuLCBmbG9hdCBsb2dpY2FsTGVmdCwgZmxvYXQgbG9naWNhbFJpZ2h0LCB1bnNpZ25l
ZCBzdGFydCwgdW5zaWduZWQgZW5kLCBmbG9hdCBsb2dpY2FsSGVpZ2h0KQorc3RhdGljIGJvb2wg
Y2hlY2tGb3JNYXRjaGluZ1RleHRSdW5zKGNvbnN0IERpc3BsYXk6OlJ1biYgaW5saW5lUnVuLCBj
b25zdCBJbmxpbmVUZXh0Qm94JiBpbmxpbmVUZXh0Qm94KQogewotICAgIHJldHVybiBhcmVFc3Nl
bnRpYWxseUVxdWFsKGxvZ2ljYWxMZWZ0LCBpbmxpbmVSdW4ubG9naWNhbExlZnQoKSkKLSAgICAg
ICAgJiYgYXJlRXNzZW50aWFsbHlFcXVhbChsb2dpY2FsUmlnaHQsIGlubGluZVJ1bi5sb2dpY2Fs
UmlnaHQoKSkKLSAgICAgICAgJiYgc3RhcnQgPT0gaW5saW5lUnVuLnRleHRDb250ZXh0KCktPnN0
YXJ0KCkKLSAgICAgICAgJiYgKGVuZCA9PSAoaW5saW5lUnVuLnRleHRDb250ZXh0KCktPnN0YXJ0
KCkgKyBpbmxpbmVSdW4udGV4dENvbnRleHQoKS0+bGVuZ3RoKCkpKQotICAgICAgICAmJiBhcmVF
c3NlbnRpYWxseUVxdWFsKGxvZ2ljYWxIZWlnaHQsIGlubGluZVJ1bi5sb2dpY2FsSGVpZ2h0KCkp
OworICAgIHJldHVybiBhcmVFc3NlbnRpYWxseUVxdWFsKGlubGluZVRleHRCb3gubG9naWNhbExl
ZnQoKSwgaW5saW5lUnVuLmxvZ2ljYWxMZWZ0KCkpCisgICAgICAgICYmIGFyZUVzc2VudGlhbGx5
RXF1YWwoaW5saW5lVGV4dEJveC5sb2dpY2FsUmlnaHQoKSwgaW5saW5lUnVuLmxvZ2ljYWxSaWdo
dCgpKQorICAgICAgICAmJiBpbmxpbmVUZXh0Qm94LnN0YXJ0KCkgPT0gaW5saW5lUnVuLnRleHRD
b250ZXh0KCktPnN0YXJ0KCkKKyAgICAgICAgJiYgKGlubGluZVRleHRCb3guZW5kKCkgKyAxKSA9
PSBpbmxpbmVSdW4udGV4dENvbnRleHQoKS0+ZW5kKCkKKyAgICAgICAgJiYgYXJlRXNzZW50aWFs
bHlFcXVhbChpbmxpbmVUZXh0Qm94LmxvZ2ljYWxIZWlnaHQoKSwgaW5saW5lUnVuLmxvZ2ljYWxI
ZWlnaHQoKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGNvbGxlY3RGbG93Qm94U3VidHJlZShjb25zdCBJ
bmxpbmVGbG93Qm94JiBmbG93Ym94LCBWZWN0b3I8V2ViQ29yZTo6SW5saW5lQm94Kj4mIGlubGlu
ZUJveGVzKQpAQCAtMTI2LDE5ICsxMjYsNiBAQCBzdGF0aWMgdm9pZCBjb2xsZWN0SW5saW5lQm94
ZXMoY29uc3QgUmVuZGVyQmxvY2tGbG93JiByb290LCBWZWN0b3I8V2ViQ29yZTo6SW5saQogICAg
IH0KIH0KIAotc3RhdGljIExheW91dFVuaXQgcmVzb2x2ZUZvclJlbGF0aXZlUG9zaXRpb25JZk5l
ZWRlZChjb25zdCBJbmxpbmVUZXh0Qm94JiBpbmxpbmVUZXh0Qm94KQotewotICAgIExheW91dFVu
aXQgeE9mZnNldDsKLSAgICBhdXRvKiBwYXJlbnQgPSBpbmxpbmVUZXh0Qm94LnBhcmVudCgpOwot
ICAgIHdoaWxlIChpczxJbmxpbmVGbG93Qm94PihwYXJlbnQpKSB7Ci0gICAgICAgIGF1dG8mIHJl
bmRlcmVyID0gcGFyZW50LT5yZW5kZXJlcigpOwotICAgICAgICBpZiAocmVuZGVyZXIuaXNJbkZs
b3dQb3NpdGlvbmVkKCkpCi0gICAgICAgICAgICB4T2Zmc2V0ID0gcmVuZGVyZXIub2Zmc2V0Rm9y
SW5GbG93UG9zaXRpb24oKS53aWR0aCgpOwotICAgICAgICBwYXJlbnQgPSBwYXJlbnQtPnBhcmVu
dCgpOwotICAgIH0KLSAgICByZXR1cm4geE9mZnNldDsKLX0KLQogc3RhdGljIGJvb2wgb3V0cHV0
TWlzbWF0Y2hpbmdDb21wbGV4TGluZUluZm9ybWF0aW9uSWZOZWVkZWQoVGV4dFN0cmVhbSYgc3Ry
ZWFtLCBjb25zdCBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IFJlbmRlckJsb2NrRmxv
dyYgYmxvY2tGbG93LCBjb25zdCBDb250YWluZXImIGlubGluZUZvcm1hdHRpbmdSb290KQogewog
ICAgIGF1dG8mIGlubGluZUZvcm1hdHRpbmdTdGF0ZSA9IGxheW91dFN0YXRlLmVzdGFibGlzaGVk
Rm9ybWF0dGluZ1N0YXRlKGlubGluZUZvcm1hdHRpbmdSb290KTsKQEAgLTE1OCw1NCArMTQ1LDEw
IEBAIHN0YXRpYyBib29sIG91dHB1dE1pc21hdGNoaW5nQ29tcGxleExpbmVJbmZvcm1hdGlvbklm
TmVlZGVkKFRleHRTdHJlYW0mIHN0cmVhbSwKICAgICB9CiAKICAgICBmb3IgKHVuc2lnbmVkIGlu
bGluZUJveEluZGV4ID0gMDsgaW5saW5lQm94SW5kZXggPCBpbmxpbmVCb3hlcy5zaXplKCkgJiYg
cnVuSW5kZXggPCBpbmxpbmVSdW5MaXN0LnNpemUoKTsgKytpbmxpbmVCb3hJbmRleCkgeworICAg
ICAgICBhdXRvJiBpbmxpbmVSdW4gPSBpbmxpbmVSdW5MaXN0W3J1bkluZGV4XTsKICAgICAgICAg
YXV0byogaW5saW5lQm94ID0gaW5saW5lQm94ZXNbaW5saW5lQm94SW5kZXhdOwogICAgICAgICBh
dXRvKiBpbmxpbmVUZXh0Qm94ID0gaXM8SW5saW5lVGV4dEJveD4oaW5saW5lQm94KSA/IGRvd25j
YXN0PElubGluZVRleHRCb3g+KGlubGluZUJveCkgOiBudWxscHRyOwotCi0gICAgICAgIGF1dG8m
IGlubGluZVJ1biA9IGlubGluZVJ1bkxpc3RbcnVuSW5kZXhdOwotICAgICAgICBhdXRvIG1hdGNo
aW5nUnVucyA9IGZhbHNlOwotICAgICAgICBpZiAoaW5saW5lVGV4dEJveCkgewotICAgICAgICAg
ICAgYXV0byB4T2Zmc2V0ID0gcmVzb2x2ZUZvclJlbGF0aXZlUG9zaXRpb25JZk5lZWRlZCgqaW5s
aW5lVGV4dEJveCk7Ci0gICAgICAgICAgICBtYXRjaGluZ1J1bnMgPSBjaGVja0Zvck1hdGNoaW5n
VGV4dFJ1bnMoaW5saW5lUnVuLCBpbmxpbmVUZXh0Qm94LT5sb2dpY2FsTGVmdCgpICsgeE9mZnNl
dCwKLSAgICAgICAgICAgICAgICBpbmxpbmVUZXh0Qm94LT5sb2dpY2FsUmlnaHQoKSArIHhPZmZz
ZXQsCi0gICAgICAgICAgICAgICAgaW5saW5lVGV4dEJveC0+c3RhcnQoKSwKLSAgICAgICAgICAg
ICAgICBpbmxpbmVUZXh0Qm94LT5lbmQoKSArIDEsCi0gICAgICAgICAgICAgICAgaW5saW5lVGV4
dEJveC0+bG9naWNhbEhlaWdodCgpKTsKLQotICAgICAgICAgICAgLy8gPHNwYW4+Zm9vYmFyPC9z
cGFuPmZvb2JhciBnZW5lcmF0ZXMgMiBpbmxpbmUgdGV4dCBib3hlcyB3aGlsZSB3ZSBvbmx5IGdl
bmVyYXRlIG9uZSBpbmxpbmUgcnVuLgotICAgICAgICAgICAgLy8gYWxzbyA8ZGl2PmZvbzxpbWcg
c3R5bGU9ImZsb2F0OiBsZWZ0OyI+YmFyPC9kaXY+IHRvby4KLSAgICAgICAgICAgIGF1dG8gaW5s
aW5lUnVuRW5kID0gaW5saW5lUnVuLnRleHRDb250ZXh0KCktPnN0YXJ0KCkgKyBpbmxpbmVSdW4u
dGV4dENvbnRleHQoKS0+bGVuZ3RoKCk7Ci0gICAgICAgICAgICBhdXRvIHRleHRSdW5NaWdodEJl
RXh0ZW5kZWQgPSAhbWF0Y2hpbmdSdW5zICYmIGlubGluZVRleHRCb3gtPmVuZCgpIDwgaW5saW5l
UnVuRW5kICYmIGlubGluZUJveEluZGV4IDwgaW5saW5lQm94ZXMuc2l6ZSgpIC0gMTsKLQotICAg
ICAgICAgICAgaWYgKHRleHRSdW5NaWdodEJlRXh0ZW5kZWQpIHsKLSAgICAgICAgICAgICAgICBh
dXRvIGxvZ2ljYWxMZWZ0ID0gaW5saW5lVGV4dEJveC0+bG9naWNhbExlZnQoKSArIHhPZmZzZXQ7
Ci0gICAgICAgICAgICAgICAgYXV0byBsb2dpY2FsUmlnaHQgPSBpbmxpbmVUZXh0Qm94LT5sb2dp
Y2FsUmlnaHQoKSArIHhPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgYXV0byBzdGFydCA9IGlubGlu
ZVRleHRCb3gtPnN0YXJ0KCk7Ci0gICAgICAgICAgICAgICAgYXV0byBlbmQgPSBpbmxpbmVUZXh0
Qm94LT5lbmQoKSArIDE7Ci0gICAgICAgICAgICAgICAgYXV0byBpbmRleCA9ICsraW5saW5lQm94
SW5kZXg7Ci0gICAgICAgICAgICAgICAgZm9yICg7IGluZGV4IDwgaW5saW5lQm94ZXMuc2l6ZSgp
OyArK2luZGV4KSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8qIGlubGluZUJveCA9IGlubGlu
ZUJveGVzW2luZGV4XTsKLSAgICAgICAgICAgICAgICAgICAgYXV0byogaW5saW5lVGV4dEJveCA9
IGlzPElubGluZVRleHRCb3g+KGlubGluZUJveCkgPyBkb3duY2FzdDxJbmxpbmVUZXh0Qm94Pihp
bmxpbmVCb3gpIDogbnVsbHB0cjsKLSAgICAgICAgICAgICAgICAgICAgLy8gQ2FuJ3QgbWl4IGRp
ZmZlcmVudCBpbmxpbmUgYm94ZXMuCi0gICAgICAgICAgICAgICAgICAgIGlmICghaW5saW5lVGV4
dEJveCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAg
ICAgIGF1dG8geE9mZnNldCA9IHJlc29sdmVGb3JSZWxhdGl2ZVBvc2l0aW9uSWZOZWVkZWQoKmlu
bGluZVRleHRCb3gpOwotICAgICAgICAgICAgICAgICAgICBsb2dpY2FsUmlnaHQgPSBpbmxpbmVU
ZXh0Qm94LT5sb2dpY2FsUmlnaHQoKSArIHhPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgICAgIGVu
ZCArPSAoaW5saW5lVGV4dEJveC0+ZW5kKCkgKyAxKTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KGNoZWNrRm9yTWF0Y2hpbmdUZXh0UnVucyhpbmxpbmVSdW4sIGxvZ2ljYWxMZWZ0LCBsb2dpY2Fs
UmlnaHQsIHN0YXJ0LCBlbmQsIGlubGluZVRleHRCb3gtPmxvZ2ljYWxIZWlnaHQoKSkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIG1hdGNoaW5nUnVucyA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpbmxpbmVCb3hJbmRleCA9IGluZGV4OwotICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAv
LyBXZW50IHRvbyBmYXI/Ci0gICAgICAgICAgICAgICAgICAgIGlmIChlbmQgPj0gaW5saW5lUnVu
RW5kKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1hdGNoaW5nUnVucyA9
IGNoZWNrRm9yTWF0Y2hpbmdOb25UZXh0UnVucyhpbmxpbmVSdW4sICppbmxpbmVCb3gpOwotCisg
ICAgICAgIGJvb2wgbWF0Y2hpbmdSdW5zID0gaW5saW5lVGV4dEJveCA/IGNoZWNrRm9yTWF0Y2hp
bmdUZXh0UnVucygqaW5saW5lUnVuLCAqaW5saW5lVGV4dEJveCkgOiBtYXRjaGluZ1J1bnMgPSBj
aGVja0Zvck1hdGNoaW5nTm9uVGV4dFJ1bnMoKmlubGluZVJ1biwgKmlubGluZUJveCk7CiAKICAg
ICAgICAgaWYgKCFtYXRjaGluZ1J1bnMpIHsKICAgICAgICAgICAgIHN0cmVhbSA8PCAiTWlzbWF0
Y2hpbmc6IHJ1biAiOwpAQCAtMjE0LDEwICsxNTcsMTAgQEAgc3RhdGljIGJvb2wgb3V0cHV0TWlz
bWF0Y2hpbmdDb21wbGV4TGluZUluZm9ybWF0aW9uSWZOZWVkZWQoVGV4dFN0cmVhbSYgc3RyZWFt
LAogICAgICAgICAgICAgICAgIHN0cmVhbSA8PCAiKCIgPDwgaW5saW5lVGV4dEJveC0+c3RhcnQo
KSA8PCAiLCAiIDw8IGlubGluZVRleHRCb3gtPmVuZCgpICsgMSA8PCAiKSI7CiAgICAgICAgICAg
ICBzdHJlYW0gPDwgIiAoIiA8PCBpbmxpbmVCb3gtPmxvZ2ljYWxMZWZ0KCkgPDwgIiwgIiA8PCBp
bmxpbmVCb3gtPmxvZ2ljYWxSaWdodCgpIDw8ICIpICgiIDw8IGlubGluZUJveC0+bG9naWNhbFdp
ZHRoKCkgPDwgIngiIDw8IGlubGluZUJveC0+bG9naWNhbEhlaWdodCgpIDw8ICIpIjsKIAotICAg
ICAgICAgICAgc3RyZWFtIDw8ICJpbmxpbmUgcnVuICI7Ci0gICAgICAgICAgICBpZiAoaW5saW5l
UnVuLnRleHRDb250ZXh0KCkpCi0gICAgICAgICAgICAgICAgc3RyZWFtIDw8ICIoIiA8PCBpbmxp
bmVSdW4udGV4dENvbnRleHQoKS0+c3RhcnQoKSA8PCAiLCAiIDw8IGlubGluZVJ1bi50ZXh0Q29u
dGV4dCgpLT5zdGFydCgpICsgaW5saW5lUnVuLnRleHRDb250ZXh0KCktPmxlbmd0aCgpIDw8ICIp
ICI7Ci0gICAgICAgICAgICBzdHJlYW0gPDwgIigiIDw8IGlubGluZVJ1bi5sb2dpY2FsTGVmdCgp
IDw8ICIsICIgPDwgaW5saW5lUnVuLmxvZ2ljYWxSaWdodCgpIDw8ICIpICgiIDw8IGlubGluZVJ1
bi5sb2dpY2FsV2lkdGgoKSA8PCAieCIgPDwgaW5saW5lUnVuLmxvZ2ljYWxIZWlnaHQoKSA8PCAi
KSI7CisgICAgICAgICAgICBzdHJlYW0gPDwgIiBpbmxpbmUgcnVuICI7CisgICAgICAgICAgICBp
ZiAoaW5saW5lUnVuLT50ZXh0Q29udGV4dCgpKQorICAgICAgICAgICAgICAgIHN0cmVhbSA8PCAi
KCIgPDwgaW5saW5lUnVuLT50ZXh0Q29udGV4dCgpLT5zdGFydCgpIDw8ICIsICIgPDwgaW5saW5l
UnVuLT50ZXh0Q29udGV4dCgpLT5lbmQoKSA8PCAiKSI7CisgICAgICAgICAgICBzdHJlYW0gPDwg
IiAoIiA8PCBpbmxpbmVSdW4tPmxvZ2ljYWxMZWZ0KCkgPDwgIiwgIiA8PCBpbmxpbmVSdW4tPmxv
Z2ljYWxSaWdodCgpIDw8ICIpICgiIDw8IGlubGluZVJ1bi0+bG9naWNhbFdpZHRoKCkgPDwgIngi
IDw8IGlubGluZVJ1bi0+bG9naWNhbEhlaWdodCgpIDw8ICIpIjsKICAgICAgICAgICAgIHN0cmVh
bS5uZXh0TGluZSgpOwogICAgICAgICAgICAgbWlzbWF0Y2hlZCA9IHRydWU7CiAgICAgICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tG
b3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9ibG9j
a2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcAppbmRleCBmOTYz
M2I0MzhhMWIxYjIyN2RhNWI4NzE0NmZmMzFlYmM1Njg2MjVjLi4xY2M2Mzk3NTI3MzU2N2VlYTRi
MGRlOWMxODQwZTU3NDVkOTYzMjRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
YmxvY2tmb3JtYXR0aW5nL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250
ZXh0R2VvbWV0cnkuY3BwCkBAIC03Nyw3ICs3Nyw3IEBAIEhlaWdodEFuZE1hcmdpbiBCbG9ja0Zv
cm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6aW5GbG93Tm9uUmVwbGFjZWRIZWlnaHRBbmRNYXJn
CiAgICAgICAgIGlmIChsYXlvdXRCb3guZXN0YWJsaXNoZXNJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dCgpKSB7CiAgICAgICAgICAgICAvLyBUaGlzIGlzIHRlbXAgYW5kIHdpbGwgYmUgcmVwbGFjZWQg
YnkgdGhlIGNvcnJlY3QgZGlzcGxheSBib3ggb25jZSBpbmxpbmUgcnVucyBtb3ZlIG92ZXIgdG8g
dGhlIGRpc3BsYXkgdHJlZS4KICAgICAgICAgICAgIGF1dG8mIGlubGluZVJ1bnMgPSBkb3duY2Fz
dDxJbmxpbmVGb3JtYXR0aW5nU3RhdGU+KGxheW91dFN0YXRlLmVzdGFibGlzaGVkRm9ybWF0dGlu
Z1N0YXRlKGxheW91dEJveCkpLmlubGluZVJ1bnMoKTsKLSAgICAgICAgICAgIGF1dG8gYm90dG9t
RWRnZSA9IGlubGluZVJ1bnMuaXNFbXB0eSgpID8gTGF5b3V0VW5pdCgpIDogaW5saW5lUnVucy5s
YXN0KCkubG9naWNhbEJvdHRvbSgpOworICAgICAgICAgICAgYXV0byBib3R0b21FZGdlID0gaW5s
aW5lUnVucy5pc0VtcHR5KCkgPyBMYXlvdXRVbml0KCkgOiBpbmxpbmVSdW5zLmxhc3QoKS0+bG9n
aWNhbEJvdHRvbSgpOwogICAgICAgICAgICAgcmV0dXJuIHsgYm90dG9tRWRnZSAtIGJvcmRlckFu
ZFBhZGRpbmdUb3AsIG5vbkNvbGxhcHNlZE1hcmdpbiB9OwogICAgICAgICB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5Qm94LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheUJveC5oCmluZGV4IGQ0Y2Q3YmEx
NDE2OTBlOGJjZmQzNzc5OWUyMmI2MmRiODhmZDYzZWYuLjExMzNlNDk5YjE5NWQwMzQ5YzBlZjM1
Mjg2ZGIyYWMzYzgzZTMzZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNw
bGF5dHJlZS9EaXNwbGF5Qm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Rpc3BsYXl0
cmVlL0Rpc3BsYXlCb3guaApAQCAtMTM5LDYgKzEzOSw3IEBAIHB1YmxpYzoKICAgICBSZWN0IHJl
Y3RXaXRoTWFyZ2luKCkgY29uc3Q7CiAKICAgICBMYXlvdXQ6OlVzZWRWZXJ0aWNhbE1hcmdpbiB2
ZXJ0aWNhbE1hcmdpbigpIGNvbnN0OworICAgIExheW91dDo6VXNlZEhvcml6b250YWxNYXJnaW4g
aG9yaXpvbnRhbE1hcmdpbigpIGNvbnN0OwogICAgIExheW91dFVuaXQgbWFyZ2luQmVmb3JlKCkg
Y29uc3Q7CiAgICAgTGF5b3V0VW5pdCBtYXJnaW5TdGFydCgpIGNvbnN0OwogICAgIExheW91dFVu
aXQgbWFyZ2luQWZ0ZXIoKSBjb25zdDsKQEAgLTU4MCw2ICs1ODEsMTIgQEAgaW5saW5lIExheW91
dDo6VXNlZFZlcnRpY2FsTWFyZ2luIEJveDo6dmVydGljYWxNYXJnaW4oKSBjb25zdAogICAgIHJl
dHVybiBtX3ZlcnRpY2FsTWFyZ2luOwogfQogCitpbmxpbmUgTGF5b3V0OjpVc2VkSG9yaXpvbnRh
bE1hcmdpbiBCb3g6Omhvcml6b250YWxNYXJnaW4oKSBjb25zdAoreworICAgIEFTU0VSVChtX2hh
c1ZhbGlkSG9yaXpvbnRhbE1hcmdpbik7CisgICAgcmV0dXJuIG1faG9yaXpvbnRhbE1hcmdpbjsK
K30KKwogaW5saW5lIExheW91dFVuaXQgQm94OjptYXJnaW5CZWZvcmUoKSBjb25zdAogewogICAg
IEFTU0VSVChtX2hhc1ZhbGlkVmVydGljYWxNYXJnaW4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2Rpc3BsYXl0cmVlL0Rpc3BsYXlSdW4uaCBiL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5UnVuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmZiMWNkZDBjZDc3OTYw
OTMxNmVjMGEzZGYzYjNiMmJhZDVhYzkwZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5UnVuLmgKQEAgLTAsMCArMSwxMTEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19D
T05URVhUKQorCisjaW5jbHVkZSAiSW5saW5lSXRlbS5oIgorI2luY2x1ZGUgIkxheW91dFVuaXQu
aCIKKyNpbmNsdWRlICJUZXh0RmxhZ3MuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNw
YWNlIERpc3BsYXkgeworCitzdHJ1Y3QgUnVuIHsKKyAgICBzdHJ1Y3QgVGV4dENvbnRleHQgewor
ICAgIHB1YmxpYzoKKyAgICAgICAgVGV4dENvbnRleHQodW5zaWduZWQgcG9zaXRpb24sIHVuc2ln
bmVkIGxlbmd0aCk7CisKKyAgICAgICAgdW5zaWduZWQgc3RhcnQoKSBjb25zdCB7IHJldHVybiBt
X3N0YXJ0OyB9CisgICAgICAgIHVuc2lnbmVkIGVuZCgpIGNvbnN0IHsgcmV0dXJuIHN0YXJ0KCkg
KyBsZW5ndGgoKTsgfQorICAgICAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBt
X2xlbmd0aDsgfQorCisgICAgICAgIHZvaWQgZXhwYW5kKHVuc2lnbmVkIGxlbmd0aCkgeyBtX2xl
bmd0aCArPSBsZW5ndGg7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIHVuc2lnbmVkIG1fc3Rh
cnQ7CisgICAgICAgIHVuc2lnbmVkIG1fbGVuZ3RoOworICAgIH07CisKKyAgICBSdW4oQm94OjpS
ZWN0IGxvZ2ljYWxSZWN0LCBPcHRpb25hbDxUZXh0Q29udGV4dD4pOworICAgIFJ1bihjb25zdCBS
dW4mKTsKKworICAgIExheW91dFBvaW50IGxvZ2ljYWxUb3BMZWZ0KCkgY29uc3QgeyByZXR1cm4g
bV9sb2dpY2FsUmVjdC50b3BMZWZ0KCk7IH0KKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0KCkg
Y29uc3QgeyByZXR1cm4gbV9sb2dpY2FsUmVjdC5sZWZ0KCk7IH0KKyAgICBMYXlvdXRVbml0IGxv
Z2ljYWxSaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFJlY3QucmlnaHQoKTsgfQorICAg
IExheW91dFVuaXQgbG9naWNhbFRvcCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFJlY3QudG9w
KCk7IH0KKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxCb3R0b20oKSBjb25zdCB7IHJldHVybiBtX2xv
Z2ljYWxSZWN0LmJvdHRvbSgpOyB9CisKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCgpIGNv
bnN0IHsgcmV0dXJuIG1fbG9naWNhbFJlY3Qud2lkdGgoKTsgfQorICAgIExheW91dFVuaXQgbG9n
aWNhbEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFJlY3QuaGVpZ2h0KCk7IH0KKwor
ICAgIHZvaWQgc2V0TG9naWNhbFdpZHRoKExheW91dFVuaXQgd2lkdGgpIHsgbV9sb2dpY2FsUmVj
dC5zZXRXaWR0aCh3aWR0aCk7IH0KKyAgICB2b2lkIHNldExvZ2ljYWxMZWZ0KExheW91dFVuaXQg
bG9naWNhbExlZnQpIHsgbV9sb2dpY2FsUmVjdC5zZXRMZWZ0KGxvZ2ljYWxMZWZ0KTsgfQorICAg
IHZvaWQgc2V0TG9naWNhbFJpZ2h0KExheW91dFVuaXQgbG9naWNhbFJpZ2h0KSB7IG1fbG9naWNh
bFJlY3Quc2hpZnRSaWdodFRvKGxvZ2ljYWxSaWdodCk7IH0KKyAgICB2b2lkIG1vdmVWZXJ0aWNh
bGx5KExheW91dFVuaXQgZGVsdGEpIHsgbV9sb2dpY2FsUmVjdC5tb3ZlVmVydGljYWxseShkZWx0
YSk7IH0KKyAgICB2b2lkIG1vdmVIb3Jpem9udGFsbHkoTGF5b3V0VW5pdCBkZWx0YSkgeyBtX2xv
Z2ljYWxSZWN0Lm1vdmVIb3Jpem9udGFsbHkoZGVsdGEpOyB9CisgICAgdm9pZCBleHBhbmRWZXJ0
aWNhbGx5KExheW91dFVuaXQgZGVsdGEpIHsgbV9sb2dpY2FsUmVjdC5leHBhbmQoMCwgZGVsdGEp
OyB9CisgICAgdm9pZCBleHBhbmRIb3Jpem9udGFsbHkoTGF5b3V0VW5pdCBkZWx0YSkgeyBtX2xv
Z2ljYWxSZWN0LmV4cGFuZChkZWx0YSwgMCk7IH0KKworICAgIHN0cnVjdCBFeHBhbnNpb25PcHBv
cnR1bml0eSB7CisgICAgICAgIHVuc2lnbmVkIGNvdW50IHsgMCB9OworICAgICAgICBFeHBhbnNp
b25CZWhhdmlvciBiZWhhdmlvciB7IEZvcmJpZExlYWRpbmdFeHBhbnNpb24gfCBGb3JiaWRUcmFp
bGluZ0V4cGFuc2lvbiB9OworICAgICAgICBMYXlvdXRVbml0IGV4cGFuc2lvbjsKKyAgICB9Owor
ICAgIEV4cGFuc2lvbk9wcG9ydHVuaXR5JiBleHBhbnNpb25PcHBvcnR1bml0eSgpIHsgcmV0dXJu
IG1fZXhwYW5zaW9uT3Bwb3J0dW5pdHk7IH0KKworICAgIHZvaWQgc2V0VGV4dENvbnRleHQoVGV4
dENvbnRleHQgdGV4dENvbnRleHQpIHsgbV90ZXh0Q29udGV4dC5lbXBsYWNlKHRleHRDb250ZXh0
KTsgfQorICAgIE9wdGlvbmFsPFRleHRDb250ZXh0PiYgdGV4dENvbnRleHQoKSB7IHJldHVybiBt
X3RleHRDb250ZXh0OyB9CisgICAgT3B0aW9uYWw8VGV4dENvbnRleHQ+IHRleHRDb250ZXh0KCkg
Y29uc3QgeyByZXR1cm4gbV90ZXh0Q29udGV4dDsgfQorCitwcml2YXRlOgorICAgIEJveDo6UmVj
dCBtX2xvZ2ljYWxSZWN0OworICAgIEV4cGFuc2lvbk9wcG9ydHVuaXR5IG1fZXhwYW5zaW9uT3Bw
b3J0dW5pdHk7CisgICAgT3B0aW9uYWw8VGV4dENvbnRleHQ+IG1fdGV4dENvbnRleHQ7Cit9Owor
CitpbmxpbmUgUnVuOjpSdW4oQm94OjpSZWN0IGxvZ2ljYWxSZWN0LCBPcHRpb25hbDxUZXh0Q29u
dGV4dD4gdGV4dENvbnRleHQpCisgICAgOiBtX2xvZ2ljYWxSZWN0KGxvZ2ljYWxSZWN0KQorICAg
ICwgbV90ZXh0Q29udGV4dCh0ZXh0Q29udGV4dCkKK3sKK30KKworaW5saW5lIFJ1bjo6VGV4dENv
bnRleHQ6OlRleHRDb250ZXh0KHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgpCisgICAg
OiBtX3N0YXJ0KHN0YXJ0KQorICAgICwgbV9sZW5ndGgobGVuZ3RoKQoreworfQorCitpbmxpbmUg
UnVuOjpSdW4oY29uc3QgUnVuJiBvdGhlcikKK3sKKyAgICBtX2xvZ2ljYWxSZWN0ID0gb3RoZXIu
bV9sb2dpY2FsUmVjdDsKKyAgICBtX2V4cGFuc2lvbk9wcG9ydHVuaXR5ID0gb3RoZXIubV9leHBh
bnNpb25PcHBvcnR1bml0eTsKKyAgICBtX3RleHRDb250ZXh0ID0gb3RoZXIubV90ZXh0Q29udGV4
dDsKK30KKworfQorfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
aW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAK
aW5kZXggZTNjMTUzNmRjZDMyYTFlZmVkODEyOGQzMzJiMTE4ZTI4YmRkOWU3Mi4uNDM1ZDBiM2Y1
ODkzYjBhYWY5ZjIxMzY0MTg2ZjQzMmQ2MjU0NDhiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRp
bmdDb250ZXh0LmNwcApAQCAtMzAsNyArMzAsNyBAQAogCiAjaW5jbHVkZSAiSW5saW5lRm9ybWF0
dGluZ1N0YXRlLmgiCiAjaW5jbHVkZSAiSW5saW5lTGluZUJyZWFrZXIuaCIKLSNpbmNsdWRlICJJ
bmxpbmVSdW5Qcm92aWRlci5oIgorI2luY2x1ZGUgIklubGluZVRleHRJdGVtLmgiCiAjaW5jbHVk
ZSAiTGF5b3V0Qm94LmgiCiAjaW5jbHVkZSAiTGF5b3V0Q29udGFpbmVyLmgiCiAjaW5jbHVkZSAi
TGF5b3V0SW5saW5lQm94LmgiCkBAIC03OSwxNiArNzksMTkgQEAgdm9pZCBJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dDo6bGF5b3V0KCkgY29uc3QKICAgICAgICAgICAgIGxheW91dEZvcm1hdHRpbmdD
b250ZXh0Um9vdCgqbGF5b3V0Qm94LCB1c2VkVmFsdWVzKTsKICAgICAgICAgZWxzZSBpZiAoaXM8
Q29udGFpbmVyPigqbGF5b3V0Qm94KSkgewogICAgICAgICAgICAgYXV0byYgaW5saW5lQ29udGFp
bmVyID0gZG93bmNhc3Q8SW5saW5lQ29udGFpbmVyPigqbGF5b3V0Qm94KTsKLSAgICAgICAgICAg
IGNvbXB1dGVNYXJnaW4oaW5saW5lQ29udGFpbmVyLCB1c2VkVmFsdWVzKTsKKyAgICAgICAgICAg
IGNvbXB1dGVIb3Jpem9udGFsTWFyZ2luKGlubGluZUNvbnRhaW5lciwgdXNlZFZhbHVlcyk7CiAg
ICAgICAgICAgICBjb21wdXRlQm9yZGVyQW5kUGFkZGluZyhpbmxpbmVDb250YWluZXIsIHVzZWRW
YWx1ZXMpOwogICAgICAgICB9IGVsc2UgaWYgKGxheW91dEJveC0+aXNSZXBsYWNlZCgpKQogICAg
ICAgICAgICAgY29tcHV0ZVdpZHRoQW5kSGVpZ2h0Rm9yUmVwbGFjZWRJbmxpbmVCb3goKmxheW91
dEJveCwgdXNlZFZhbHVlcyk7CiAgICAgICAgIGxheW91dEJveCA9IG5leHRJblByZU9yZGVyKCps
YXlvdXRCb3gsIHJvb3QpOwogICAgIH0KIAotICAgIElubGluZVJ1blByb3ZpZGVyIGlubGluZVJ1
blByb3ZpZGVyOwotICAgIGNvbGxlY3RJbmxpbmVDb250ZW50KGlubGluZVJ1blByb3ZpZGVyKTsK
LSAgICBMaW5lTGF5b3V0KCp0aGlzKS5sYXlvdXQoaW5saW5lUnVuUHJvdmlkZXIpOworICAgIC8v
IEZJWE1FOiBUaGlzIGlzIHN1Y2ggYSB3YXN0ZSB3aGVuIGludHJpbnNpYyB3aWR0aCBjb21wdXRh
dGlvbiBhbHJlYWR5IGNvbGxlY3RlZCB0aGUgaW5saW5lIGl0ZW1zLgorICAgIGZvcm1hdHRpbmdT
dGF0ZSgpLmlubGluZUl0ZW1zKCkuY2xlYXIoKTsKKyAgICBmb3JtYXR0aW5nU3RhdGUoKS5pbmxp
bmVSdW5zKCkuY2xlYXIoKTsKKworICAgIGNvbGxlY3RJbmxpbmVDb250ZW50KCk7CisgICAgTGlu
ZUxheW91dCgqdGhpcykubGF5b3V0KCk7CiAgICAgTE9HX1dJVEhfU1RSRUFNKEZvcm1hdHRpbmdD
b250ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIltFbmRdIC0+IGlubGluZSBmb3JtYXR0aW5nIGNvbnRl
eHQgLT4gZm9ybWF0dGluZyByb290KCIgPDwgJnJvb3QgPDwgIikiKTsKIH0KIApAQCAtMTIwLDMw
ICsxMjMsMzAgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUludHJpbnNp
Y1dpZHRoQ29uc3RyYWludHMoKSBjb25zdAogICAgICAgICAgICAgICAgIGNvbXB1dGVXaWR0aEFu
ZE1hcmdpbigqbGF5b3V0Qm94LCB1c2VkVmFsdWVzKTsKICAgICAgICAgICAgIGVsc2UgewogICAg
ICAgICAgICAgICAgIC8vIFNpbXBsZSBpbmxpbmUgY29udGFpbmVyIHdpdGggbm8gaW50cmluc2lj
IHdpZHRoIDxzcGFuPi4KLSAgICAgICAgICAgICAgICBjb21wdXRlTWFyZ2luKCpsYXlvdXRCb3gs
IHVzZWRWYWx1ZXMpOworICAgICAgICAgICAgICAgIGNvbXB1dGVIb3Jpem9udGFsTWFyZ2luKCps
YXlvdXRCb3gsIHVzZWRWYWx1ZXMpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAg
IGxheW91dEJveCA9IG5leHRJblByZU9yZGVyKCpsYXlvdXRCb3gsIHJvb3QpOwogICAgIH0KIAot
ICAgIElubGluZVJ1blByb3ZpZGVyIGlubGluZVJ1blByb3ZpZGVyOwotICAgIGNvbGxlY3RJbmxp
bmVDb250ZW50KGlubGluZVJ1blByb3ZpZGVyKTsKKyAgICBjb2xsZWN0SW5saW5lQ29udGVudCgp
OwogCiAgICAgYXV0byBtYXhpbXVtTGluZVdpZHRoID0gWyZdKGF1dG8gYXZhaWxhYmxlV2lkdGgp
IHsKLSAgICAgICAgTGF5b3V0VW5pdCBtYXhDb250ZW50TG9naWNhbFJpZ2h0OwotICAgICAgICBh
dXRvIGxpbmVCcmVha2VyID0gSW5saW5lTGluZUJyZWFrZXIgeyBsYXlvdXRTdGF0ZSwgZm9ybWF0
dGluZ1N0YXRlKCkuaW5saW5lQ29udGVudCgpLCBpbmxpbmVSdW5Qcm92aWRlci5ydW5zKCkgfTsK
LSAgICAgICAgTGF5b3V0VW5pdCBsaW5lTG9naWNhbFJpZ2h0OwotCiAgICAgICAgIC8vIFN3aXRj
aCB0byB0aGUgbWluL21heCBmb3JtYXR0aW5nIHJvb3Qgd2lkdGggdmFsdWVzIGJlZm9yZSBmb3Jt
YXR0aW5nIHRoZSBsaW5lcy4KICAgICAgICAgZm9yIChhdXRvKiBmb3JtYXR0aW5nUm9vdCA6IGZv
cm1hdHRpbmdDb250ZXh0Um9vdExpc3QpIHsKICAgICAgICAgICAgIGF1dG8gaW50cmluc2ljV2lk
dGhzID0gbGF5b3V0U3RhdGUuZm9ybWF0dGluZ1N0YXRlRm9yQm94KCpmb3JtYXR0aW5nUm9vdCku
aW50cmluc2ljV2lkdGhDb25zdHJhaW50cygqZm9ybWF0dGluZ1Jvb3QpOwogICAgICAgICAgICAg
bGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveCgqZm9ybWF0dGluZ1Jvb3QpLnNldENv
bnRlbnRCb3hXaWR0aChhdmFpbGFibGVXaWR0aCA/IGludHJpbnNpY1dpZHRocy0+bWF4aW11bSA6
IGludHJpbnNpY1dpZHRocy0+bWluaW11bSk7CiAgICAgICAgIH0KKyAgICAgICAgTGF5b3V0VW5p
dCBtYXhDb250ZW50TG9naWNhbFJpZ2h0OworICAgICAgICBMYXlvdXRVbml0IGxpbmVMb2dpY2Fs
UmlnaHQ7CiAKLSAgICAgICAgd2hpbGUgKGF1dG8gcnVuID0gbGluZUJyZWFrZXIubmV4dFJ1bihs
aW5lTG9naWNhbFJpZ2h0LCBhdmFpbGFibGVXaWR0aCwgIWxpbmVMb2dpY2FsUmlnaHQpKSB7Ci0g
ICAgICAgICAgICBpZiAocnVuLT5wb3NpdGlvbiA9PSBJbmxpbmVMaW5lQnJlYWtlcjo6UnVuOjpQ
b3NpdGlvbjo6TGluZUJlZ2luKQorICAgICAgICBMaW5lQnJlYWtlciBsaW5lQnJlYWtlcihsYXlv
dXRTdGF0ZSk7CisgICAgICAgIGF1dG8mIGlubGluZUNvbnRlbnQgPSBmb3JtYXR0aW5nU3RhdGUo
KS5pbmxpbmVJdGVtcygpOworICAgICAgICBmb3IgKGF1dG8mIGlubGluZUl0ZW0gOiBpbmxpbmVD
b250ZW50KSB7CisgICAgICAgICAgICBhdXRvIGJyZWFraW5nQ29udGV4dCA9IGxpbmVCcmVha2Vy
LmJyZWFraW5nQ29udGV4dCgqaW5saW5lSXRlbSwgeyBhdmFpbGFibGVXaWR0aCwgbGluZUxvZ2lj
YWxSaWdodCwgIWxpbmVMb2dpY2FsUmlnaHQgfSk7CisgICAgICAgICAgICBpZiAoYnJlYWtpbmdD
b250ZXh0LmJyZWFraW5nQmVoYXZpb3IgPT0gTGluZUJyZWFrZXI6OkJyZWFraW5nQmVoYXZpb3I6
OldyYXApCiAgICAgICAgICAgICAgICAgbGluZUxvZ2ljYWxSaWdodCA9IDA7Ci0gICAgICAgICAg
ICBsaW5lTG9naWNhbFJpZ2h0ICs9IHJ1bi0+d2lkdGg7CisgICAgICAgICAgICBsaW5lTG9naWNh
bFJpZ2h0ICs9IGlubGluZUl0ZW0tPndpZHRoKCk7CiAKICAgICAgICAgICAgIG1heENvbnRlbnRM
b2dpY2FsUmlnaHQgPSBzdGQ6Om1heChtYXhDb250ZW50TG9naWNhbFJpZ2h0LCBsaW5lTG9naWNh
bFJpZ2h0KTsKICAgICAgICAgfQpAQCAtMTYxLDcgKzE2NCw3IEBAIHZvaWQgSW5saW5lRm9ybWF0
dGluZ0NvbnRleHQ6OmNvbXB1dGVJbnRyaW5zaWNXaWR0aEZvckZsb2F0Qm94KGNvbnN0IEJveCYg
bGF5b3V0CiAKICAgICBhdXRvIHVzZWRIb3Jpem9udGFsVmFsdWVzID0gVXNlZEhvcml6b250YWxW
YWx1ZXMgeyB9OwogICAgIGNvbXB1dGVCb3JkZXJBbmRQYWRkaW5nKGxheW91dEJveCwgdXNlZEhv
cml6b250YWxWYWx1ZXMpOwotICAgIGNvbXB1dGVNYXJnaW4obGF5b3V0Qm94LCB1c2VkSG9yaXpv
bnRhbFZhbHVlcyk7CisgICAgY29tcHV0ZUhvcml6b250YWxNYXJnaW4obGF5b3V0Qm94LCB1c2Vk
SG9yaXpvbnRhbFZhbHVlcyk7CiAgICAgbGF5b3V0U3RhdGUuY3JlYXRlRm9ybWF0dGluZ0NvbnRl
eHQobGF5b3V0Qm94KS0+Y29tcHV0ZUludHJpbnNpY1dpZHRoQ29uc3RyYWludHMoKTsKIAogICAg
IGF1dG8gdXNlZFZlcnRpY2FsVmFsdWVzID0gVXNlZFZlcnRpY2FsVmFsdWVzIHsgfTsKQEAgLTE3
OCwxMSArMTgxLDExIEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVJbnRy
aW5zaWNXaWR0aEZvcklubGluZUJsb2NrKGNvbnN0IEJveCYgbGF5CiAKICAgICBhdXRvIHVzZWRW
YWx1ZXMgPSBVc2VkSG9yaXpvbnRhbFZhbHVlcyB7IH07CiAgICAgY29tcHV0ZUJvcmRlckFuZFBh
ZGRpbmcobGF5b3V0Qm94LCB1c2VkVmFsdWVzKTsKLSAgICBjb21wdXRlTWFyZ2luKGxheW91dEJv
eCwgdXNlZFZhbHVlcyk7CisgICAgY29tcHV0ZUhvcml6b250YWxNYXJnaW4obGF5b3V0Qm94LCB1
c2VkVmFsdWVzKTsKICAgICBsYXlvdXRTdGF0ZSgpLmNyZWF0ZUZvcm1hdHRpbmdDb250ZXh0KGxh
eW91dEJveCktPmNvbXB1dGVJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKCk7CiB9CiAKLXZvaWQg
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVNYXJnaW4oY29uc3QgQm94JiBsYXlvdXRC
b3gsIFVzZWRIb3Jpem9udGFsVmFsdWVzIHVzZWRWYWx1ZXMpIGNvbnN0Cit2b2lkIElubGluZUZv
cm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSG9yaXpvbnRhbE1hcmdpbihjb25zdCBCb3gmIGxheW91
dEJveCwgVXNlZEhvcml6b250YWxWYWx1ZXMgdXNlZFZhbHVlcykgY29uc3QKIHsKICAgICBhdXRv
IGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbiA9IEdlb21ldHJ5Ojpjb21wdXRlZEhvcml6b250YWxN
YXJnaW4obGF5b3V0Qm94LCB1c2VkVmFsdWVzKTsKICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gbGF5
b3V0U3RhdGUoKS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7CkBAIC0yNTYsODgg
KzI1OSwyOSBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlV2lkdGhBbmRI
ZWlnaHRGb3JSZXBsYWNlZElubGluZUJveChjb25zdCBCbwogICAgIGNvbXB1dGVIZWlnaHRBbmRN
YXJnaW4obGF5b3V0Qm94KTsKIH0KIAotc3RhdGljIHZvaWQgYWRkRGV0YWNoaW5nUnVsZXMoSW5s
aW5lSXRlbSYgaW5saW5lSXRlbSwgT3B0aW9uYWw8TGF5b3V0VW5pdD4gbm9uQnJlYWthYmxlU3Rh
cnRXaWR0aCwgT3B0aW9uYWw8TGF5b3V0VW5pdD4gbm9uQnJlYWthYmxlRW5kV2lkdGgpCi17Ci0g
ICAgT3B0aW9uU2V0PElubGluZUl0ZW06OkRldGFjaGluZ1J1bGU+IGRldGFjaGluZ1J1bGVzOwot
ICAgIGlmIChub25CcmVha2FibGVTdGFydFdpZHRoKSB7Ci0gICAgICAgIGRldGFjaGluZ1J1bGVz
LmFkZChJbmxpbmVJdGVtOjpEZXRhY2hpbmdSdWxlOjpCcmVha0F0U3RhcnQpOwotICAgICAgICBp
bmxpbmVJdGVtLmFkZE5vbkJyZWFrYWJsZVN0YXJ0KCpub25CcmVha2FibGVTdGFydFdpZHRoKTsK
LSAgICB9Ci0gICAgaWYgKG5vbkJyZWFrYWJsZUVuZFdpZHRoKSB7Ci0gICAgICAgIGRldGFjaGlu
Z1J1bGVzLmFkZChJbmxpbmVJdGVtOjpEZXRhY2hpbmdSdWxlOjpCcmVha0F0RW5kKTsKLSAgICAg
ICAgaW5saW5lSXRlbS5hZGROb25CcmVha2FibGVFbmQoKm5vbkJyZWFrYWJsZUVuZFdpZHRoKTsK
LSAgICB9Ci0gICAgaW5saW5lSXRlbS5hZGREZXRhY2hpbmdSdWxlKGRldGFjaGluZ1J1bGVzKTsK
LX0KLQotc3RhdGljIElubGluZUl0ZW0mIGNyZWF0ZUFuZEFwcGVuZElubGluZUl0ZW0oSW5saW5l
UnVuUHJvdmlkZXImIGlubGluZVJ1blByb3ZpZGVyLCBJbmxpbmVDb250ZW50JiBpbmxpbmVDb250
ZW50LCBjb25zdCBCb3gmIGxheW91dEJveCkKLXsKLSAgICBBU1NFUlQobGF5b3V0Qm94LmlzSW5s
aW5lTGV2ZWxCb3goKSB8fCBsYXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSk7Ci0gICAg
YXV0byBpbmxpbmVJdGVtID0gc3RkOjptYWtlX3VuaXF1ZTxJbmxpbmVJdGVtPihsYXlvdXRCb3gp
OwotICAgIGF1dG8qIGlubGluZUl0ZW1QdHIgPSBpbmxpbmVJdGVtLmdldCgpOwotICAgIGlubGlu
ZUNvbnRlbnQuYWRkKFdURk1vdmUoaW5saW5lSXRlbSkpOwotICAgIGlubGluZVJ1blByb3ZpZGVy
LmFwcGVuZCgqaW5saW5lSXRlbVB0cik7Ci0gICAgcmV0dXJuICppbmxpbmVJdGVtUHRyOwotfQot
Ci12b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb2xsZWN0SW5saW5lQ29udGVudChJbmxp
bmVSdW5Qcm92aWRlciYgaW5saW5lUnVuUHJvdmlkZXIpIGNvbnN0Cit2b2lkIElubGluZUZvcm1h
dHRpbmdDb250ZXh0Ojpjb2xsZWN0SW5saW5lQ29udGVudCgpIGNvbnN0CiB7CiAgICAgaWYgKCFp
czxDb250YWluZXI+KHJvb3QoKSkpCiAgICAgICAgIHJldHVybjsKICAgICBhdXRvJiByb290ID0g
ZG93bmNhc3Q8Q29udGFpbmVyPih0aGlzLT5yb290KCkpOwogICAgIGlmICghcm9vdC5oYXNJbkZs
b3dPckZsb2F0aW5nQ2hpbGQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIC8vIFRoZSBsb2dpYyBo
ZXJlIGlzIHZlcnkgc2ltaWxhciB0byBCRkMgbGF5b3V0LgotICAgIC8vIDEuIFRyYXZlcnMgZG93
biB0aGUgbGF5b3V0IHRyZWUgYW5kIGNvbGxlY3QgInN0YXJ0IiB1bmJyZWFrYWJsZSB3aWR0aHMg
KG1hcmdpbi1sZWZ0LCBib3JkZXItbGVmdCwgcGFkZGluZy1sZWZ0KQotICAgIC8vIDIuIENyZWF0
ZSBJbmxpbmVJdGVtIHBlciBsZWFmIGlubGluZSBib3ggKHRleHQgbm9kZXMsIGlubGluZS1ibG9j
a3MsIGZsb2F0cykgYW5kIHNldCAic3RhcnQiIHVuYnJlYWthYmxlIHdpZHRoIG9uIHRoZW0uIAot
ICAgIC8vIDMuIENsaW1iIGJhY2sgYW5kIGNvbGxlY3QgImVuZCIgdW5icmVha2FibGUgd2lkdGgg
YW5kIHNldCBpdCBvbiB0aGUgbGFzdCBJbmxpbmVJdGVtLgotICAgIGF1dG8mIGxheW91dFN0YXRl
ID0gdGhpcy0+bGF5b3V0U3RhdGUoKTsKLSAgICBhdXRvJiBpbmxpbmVDb250ZW50ID0gZm9ybWF0
dGluZ1N0YXRlKCkuaW5saW5lQ29udGVudCgpOwotCi0gICAgZW51bSBjbGFzcyBOb25CcmVha2Fi
bGVXaWR0aFR5cGUgeyBTdGFydCwgRW5kIH07Ci0gICAgYXV0byBub25CcmVha2FibGVXaWR0aCA9
IFsmXShhdXRvJiBjb250YWluZXIsIGF1dG8gdHlwZSkgewotICAgICAgICBhdXRvJiBkaXNwbGF5
Qm94ID0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveChjb250YWluZXIpOwotICAg
ICAgICBpZiAodHlwZSA9PSBOb25CcmVha2FibGVXaWR0aFR5cGU6OlN0YXJ0KQotICAgICAgICAg
ICAgcmV0dXJuIGRpc3BsYXlCb3gubWFyZ2luU3RhcnQoKSArIGRpc3BsYXlCb3guYm9yZGVyTGVm
dCgpICsgZGlzcGxheUJveC5wYWRkaW5nTGVmdCgpLnZhbHVlT3IoMCk7Ci0gICAgICAgIHJldHVy
biBkaXNwbGF5Qm94Lm1hcmdpbkVuZCgpICsgZGlzcGxheUJveC5ib3JkZXJSaWdodCgpICsgZGlz
cGxheUJveC5wYWRkaW5nUmlnaHQoKS52YWx1ZU9yKDApOwotICAgIH07Ci0KKyAgICAvLyBUcmF2
ZXJzZSB0aGUgdHJlZSBhbmQgY3JlYXRlIGlubGluZSBpdGVtcyBvdXQgb2YgY29udGFpbmVycyBh
bmQgbGVhZiBub2RlLiBUaGlzIGVzc2VudGlhbGx5IHRydW5zIHRoZSB0cmVlIGlubGluZSBzdHJ1
Y3R1cmUgaW50byBhIGZsYXQgb25lLgorICAgIC8vIDxzcGFuPnRleHQ8c3Bhbj48L3NwYW4+PGlt
Zz48L3NwYW4+IC0+IFtDb250YWluZXJTdGFydF1bSW5saW5lQm94XVtDb250YWluZXJTdGFydF1b
Q29udGFpbmVyRW5kXVtJbmxpbmVCb3hdW0NvbnRhaW5lckVuZF0KKyAgICBhdXRvJiBmb3JtYXR0
aW5nU3RhdGUgPSB0aGlzLT5mb3JtYXR0aW5nU3RhdGUoKTsKICAgICBMYXlvdXRRdWV1ZSBsYXlv
dXRRdWV1ZTsKICAgICBsYXlvdXRRdWV1ZS5hcHBlbmQocm9vdC5maXJzdEluRmxvd09yRmxvYXRp
bmdDaGlsZCgpKTsKLQotICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IG5vbkJyZWFrYWJsZVN0YXJ0
V2lkdGg7Ci0gICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gbm9uQnJlYWthYmxlRW5kV2lkdGg7Ci0g
ICAgSW5saW5lSXRlbSogbGFzdElubGluZUl0ZW0gPSBudWxscHRyOwogICAgIHdoaWxlICghbGF5
b3V0UXVldWUuaXNFbXB0eSgpKSB7CisgICAgICAgIGF1dG8gdHJlYXRBc0lubGluZUNvbnRhaW5l
ciA9IFtdKGF1dG8mIGxheW91dEJveCkgeworICAgICAgICAgICAgcmV0dXJuIGlzPENvbnRhaW5l
cj4obGF5b3V0Qm94KSAmJiAhbGF5b3V0Qm94LmVzdGFibGlzaGVzRm9ybWF0dGluZ0NvbnRleHQo
KTsKKyAgICAgICAgfTsKICAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgIGF1dG8m
IGxheW91dEJveCA9ICpsYXlvdXRRdWV1ZS5sYXN0KCk7Ci0gICAgICAgICAgICBpZiAoIWlzPENv
bnRhaW5lcj4obGF5b3V0Qm94KSkKKyAgICAgICAgICAgIGlmICghdHJlYXRBc0lubGluZUNvbnRh
aW5lcihsYXlvdXRCb3gpKQogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgLy8g
VGhpcyBpcyB0aGUgc3RhcnQgb2YgYW4gaW5saW5lIGNvbnRhaW5lciAoZS5nLiA8c3Bhbj4pLgor
ICAgICAgICAgICAgZm9ybWF0dGluZ1N0YXRlLmFkZElubGluZUl0ZW0oc3RkOjptYWtlX3VuaXF1
ZTxJbmxpbmVJdGVtPihsYXlvdXRCb3gsIElubGluZUl0ZW06OlR5cGU6OkNvbnRhaW5lclN0YXJ0
KSk7CiAgICAgICAgICAgICBhdXRvJiBjb250YWluZXIgPSBkb3duY2FzdDxDb250YWluZXI+KGxh
eW91dEJveCk7Ci0KLSAgICAgICAgICAgIGlmIChjb250YWluZXIuZXN0YWJsaXNoZXNGb3JtYXR0
aW5nQ29udGV4dCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gRm9ybWF0dGluZyBjb250ZXh0cyBh
cmUgdHJlYXRlZCBhcyBsZWFmIG5vZGVzLgotICAgICAgICAgICAgICAgIGF1dG8mIGlubGluZUl0
ZW0gPSBjcmVhdGVBbmRBcHBlbmRJbmxpbmVJdGVtKGlubGluZVJ1blByb3ZpZGVyLCBpbmxpbmVD
b250ZW50LCBjb250YWluZXIpOwotICAgICAgICAgICAgICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBs
YXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGNvbnRhaW5lcik7Ci0gICAgICAgICAg
ICAgICAgYXV0byBjdXJyZW50Tm9uQnJlYWthYmxlU3RhcnRXaWR0aCA9IG5vbkJyZWFrYWJsZVN0
YXJ0V2lkdGgudmFsdWVPcigwKSArIGRpc3BsYXlCb3gubWFyZ2luU3RhcnQoKSArIG5vbkJyZWFr
YWJsZUVuZFdpZHRoLnZhbHVlT3IoMCk7Ci0gICAgICAgICAgICAgICAgYWRkRGV0YWNoaW5nUnVs
ZXMoaW5saW5lSXRlbSwgY3VycmVudE5vbkJyZWFrYWJsZVN0YXJ0V2lkdGgsIGRpc3BsYXlCb3gu
bWFyZ2luRW5kKCkpOwotICAgICAgICAgICAgICAgIG5vbkJyZWFrYWJsZVN0YXJ0V2lkdGggPSB7
IH07Ci0gICAgICAgICAgICAgICAgbm9uQnJlYWthYmxlRW5kV2lkdGggPSB7IH07Ci0KLSAgICAg
ICAgICAgICAgICAvLyBGb3JtYXR0aW5nIGNvbnRleHQgcm9vdHMgdGFrZSBjYXJlIG9mIHRoZWly
IHN1YnRyZWVzLiBDb250aW51ZSB3aXRoIG5leHQgc2libGluZyBpZiBleGlzdHMuCi0gICAgICAg
ICAgICAgICAgbGF5b3V0UXVldWUucmVtb3ZlTGFzdCgpOwotICAgICAgICAgICAgICAgIGlmICgh
Y29udGFpbmVyLm5leHRJbkZsb3dPckZsb2F0aW5nU2libGluZygpKQotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBsYXlvdXRRdWV1ZS5hcHBlbmQoY29udGFpbmVy
Lm5leHRJbkZsb3dPckZsb2F0aW5nU2libGluZygpKTsKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBub24tZm9y
bWF0dGluZyBjb250ZXh0IGNvbnRhaW5lciBoYXMgYW55IG5vbi1icmVha2FibGUgc3RhcnQgcHJv
cGVydGllcyAobWFyZ2luLWxlZnQsIGJvcmRlci1sZWZ0LCBwYWRkaW5nLWxlZnQpCi0gICAgICAg
ICAgICAvLyA8c3BhbiBzdHlsZT0icGFkZGluZy1sZWZ0OiA1cHgiPjxzcGFuIHN0eWxlPSJwYWRk
aW5nLWxlZnQ6IDVweCI+Zm9vYmFyPC9zcGFuPjwvc3Bhbj4gLT4gNXB4ICsgNXB4Ci0gICAgICAg
ICAgICBhdXRvIGN1cnJlbnROb25CcmVha2FibGVTdGFydFdpZHRoID0gbm9uQnJlYWthYmxlV2lk
dGgobGF5b3V0Qm94LCBOb25CcmVha2FibGVXaWR0aFR5cGU6OlN0YXJ0KTsKLSAgICAgICAgICAg
IGlmIChjdXJyZW50Tm9uQnJlYWthYmxlU3RhcnRXaWR0aCB8fCBsYXlvdXRCb3guaXNQb3NpdGlv
bmVkKCkpCi0gICAgICAgICAgICAgICAgbm9uQnJlYWthYmxlU3RhcnRXaWR0aCA9IG5vbkJyZWFr
YWJsZVN0YXJ0V2lkdGgudmFsdWVPcigwKSArIGN1cnJlbnROb25CcmVha2FibGVTdGFydFdpZHRo
OwotCiAgICAgICAgICAgICBpZiAoIWNvbnRhaW5lci5oYXNJbkZsb3dPckZsb2F0aW5nQ2hpbGQo
KSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGxheW91dFF1ZXVlLmFwcGVu
ZChjb250YWluZXIuZmlyc3RJbkZsb3dPckZsb2F0aW5nQ2hpbGQoKSk7CkBAIC0zNDUsMjkgKzI4
OSwxOSBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb2xsZWN0SW5saW5lQ29udGVu
dChJbmxpbmVSdW5Qcm92aWRlciYgaW5saW5lUnVuUAogCiAgICAgICAgIHdoaWxlICghbGF5b3V0
UXVldWUuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSAqbGF5b3V0
UXVldWUudGFrZUxhc3QoKTsKLSAgICAgICAgICAgIGlmIChpczxDb250YWluZXI+KGxheW91dEJv
eCkpIHsKLSAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBlbmQgb2YgYW4gaW5saW5lIGNv
bnRhaW5lci4gQ29tcHV0ZSB0aGUgbm9uLWJyZWFrYWJsZSBlbmQgd2lkdGggYW5kIGFkZCBpdCB0
byB0aGUgbGFzdCBpbmxpbmUgYm94LgotICAgICAgICAgICAgICAgIC8vIDxzcGFuIHN0eWxlPSJw
YWRkaW5nLXJpZ2h0OiA1cHgiPmZvb2Jhcjwvc3Bhbj4gLT4gNXB4OyBsYXN0IGlubGluZSBpdGVt
IC0+ICJmb29iYXIiCi0gICAgICAgICAgICAgICAgYXV0byBjdXJyZW50Tm9uQnJlYWthYmxlRW5k
V2lkdGggPSBub25CcmVha2FibGVXaWR0aChsYXlvdXRCb3gsIE5vbkJyZWFrYWJsZVdpZHRoVHlw
ZTo6RW5kKTsKLSAgICAgICAgICAgICAgICBpZiAoY3VycmVudE5vbkJyZWFrYWJsZUVuZFdpZHRo
IHx8IGxheW91dEJveC5pc1Bvc2l0aW9uZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgbm9uQnJl
YWthYmxlRW5kV2lkdGggPSBub25CcmVha2FibGVFbmRXaWR0aC52YWx1ZU9yKDApICsgY3VycmVu
dE5vbkJyZWFrYWJsZUVuZFdpZHRoOwotICAgICAgICAgICAgICAgIC8vIEFkZCBpdCB0byB0aGUg
bGFzdCBpbmxpbmUgYm94Ci0gICAgICAgICAgICAgICAgaWYgKGxhc3RJbmxpbmVJdGVtKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGFkZERldGFjaGluZ1J1bGVzKCpsYXN0SW5saW5lSXRlbSwgeyB9
LCBub25CcmVha2FibGVFbmRXaWR0aCk7Ci0gICAgICAgICAgICAgICAgICAgIG5vbkJyZWFrYWJs
ZUVuZFdpZHRoID0geyB9OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgLy8gTGVhZiBpbmxpbmUgYm94Ci0gICAgICAgICAgICAgICAgYXV0
byYgaW5saW5lSXRlbSA9IGNyZWF0ZUFuZEFwcGVuZElubGluZUl0ZW0oaW5saW5lUnVuUHJvdmlk
ZXIsIGlubGluZUNvbnRlbnQsIGxheW91dEJveCk7Ci0gICAgICAgICAgICAgICAgLy8gQWRkIHN0
YXJ0IGFuZCB0aGUgKHRocm91Z2ggZW1wdHkgY29udGFpbmVycykgYWNjdW11bGF0ZWQgZW5kIHdp
ZHRoLgotICAgICAgICAgICAgICAgIC8vIDxzcGFuIHN0eWxlPSJwYWRkaW5nLWxlZnQ6IDFweCI+
Zm9vYmFyPC9zcGFuPiAtPiBub25CcmVha2FibGVTdGFydFdpZHRoOiAxcHg7Ci0gICAgICAgICAg
ICAgICAgLy8gPHNwYW4gc3R5bGU9InBhZGRpbmc6IDVweCI+PC9zcGFuPmZvb2JhciAtPiBub25C
cmVha2FibGVTdGFydFdpZHRoOiA1cHg7IG5vbkJyZWFrYWJsZUVuZFdpZHRoOiA1cHgKLSAgICAg
ICAgICAgICAgICBpZiAobm9uQnJlYWthYmxlU3RhcnRXaWR0aCB8fCBub25CcmVha2FibGVFbmRX
aWR0aCkgewotICAgICAgICAgICAgICAgICAgICBhZGREZXRhY2hpbmdSdWxlcyhpbmxpbmVJdGVt
LCBub25CcmVha2FibGVTdGFydFdpZHRoLnZhbHVlT3IoMCkgKyBub25CcmVha2FibGVFbmRXaWR0
aC52YWx1ZU9yKDApLCB7IH0pOwotICAgICAgICAgICAgICAgICAgICBub25CcmVha2FibGVTdGFy
dFdpZHRoID0geyB9OwotICAgICAgICAgICAgICAgICAgICBub25CcmVha2FibGVFbmRXaWR0aCA9
IHsgfTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbGFzdElubGluZUl0ZW0g
PSAmaW5saW5lSXRlbTsKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGVuZCBvZiBhbiBpbmxp
bmUgY29udGFpbmVyIChlLmcuIDwvc3Bhbj4pLgorICAgICAgICAgICAgaWYgKHRyZWF0QXNJbmxp
bmVDb250YWluZXIobGF5b3V0Qm94KSkKKyAgICAgICAgICAgICAgICBmb3JtYXR0aW5nU3RhdGUu
YWRkSW5saW5lSXRlbShzdGQ6Om1ha2VfdW5pcXVlPElubGluZUl0ZW0+KGxheW91dEJveCwgSW5s
aW5lSXRlbTo6VHlwZTo6Q29udGFpbmVyRW5kKSk7CisgICAgICAgICAgICBlbHNlIGlmIChpczxM
aW5lQnJlYWtCb3g+KGxheW91dEJveCkpCisgICAgICAgICAgICAgICAgZm9ybWF0dGluZ1N0YXRl
LmFkZElubGluZUl0ZW0oc3RkOjptYWtlX3VuaXF1ZTxJbmxpbmVJdGVtPihsYXlvdXRCb3gsIElu
bGluZUl0ZW06OlR5cGU6OkhhcmRMaW5lQnJlYWspKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGxh
eW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpKQorICAgICAgICAgICAgICAgIGZvcm1hdHRp
bmdTdGF0ZS5hZGRJbmxpbmVJdGVtKHN0ZDo6bWFrZV91bmlxdWU8SW5saW5lSXRlbT4obGF5b3V0
Qm94LCBJbmxpbmVJdGVtOjpUeXBlOjpGbG9hdCkpOworICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgQVNTRVJUKGlzPElubGluZUJveD4obGF5b3V0Qm94KSB8fCBsYXlvdXRCb3gu
aXNJbmxpbmVCbG9ja0JveCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoaXM8SW5saW5lQm94Pihs
YXlvdXRCb3gpICYmIGRvd25jYXN0PElubGluZUJveD4obGF5b3V0Qm94KS5oYXNUZXh0Q29udGVu
dCgpKQorICAgICAgICAgICAgICAgICAgICBJbmxpbmVUZXh0SXRlbTo6Y3JlYXRlQW5kQXBwZW5k
VGV4dEl0ZW1zKGZvcm1hdHRpbmdTdGF0ZS5pbmxpbmVJdGVtcygpLCBkb3duY2FzdDxJbmxpbmVC
b3g+KGxheW91dEJveCkpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgZm9ybWF0dGluZ1N0YXRlLmFkZElubGluZUl0ZW0oc3RkOjptYWtlX3VuaXF1ZTxJbmxpbmVJ
dGVtPihsYXlvdXRCb3gsIElubGluZUl0ZW06OlR5cGU6OkJveCkpOwogICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICBpZiAoYXV0byogbmV4dFNpYmxpbmcgPSBsYXlvdXRCb3gubmV4dEluRmxv
d09yRmxvYXRpbmdTaWJsaW5nKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oCmlu
ZGV4IGE0ZmIzMTU4NGFkZjhiODFkOGQ1YzYxYzMzNzI2MTJiMGRhOTMyODEuLjJkZGYzZDYzNzU3
ZDhmMjVmNTJlMzQyM2RlOWNjMjM2ZGNhMTU3Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQuaApAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgIkRpc3BsYXlCb3guaCIKICNpbmNs
dWRlICJGb3JtYXR0aW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIklubGluZUZvcm1hdHRpbmdTdGF0
ZS5oIgotI2luY2x1ZGUgIklubGluZVJ1bi5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzgsNyArMzcsNiBAQCBuYW1lc3BhY2UgTGF5b3V0
IHsKIAogY2xhc3MgRmxvYXRpbmdTdGF0ZTsKIGNsYXNzIElubGluZUNvbnRhaW5lcjsKLWNsYXNz
IElubGluZVJ1blByb3ZpZGVyOwogY2xhc3MgTGluZTsKIAogLy8gVGhpcyBjbGFzcyBpbXBsZW1l
bnRzIHRoZSBsYXlvdXQgbG9naWMgZm9yIGlubGluZSBmb3JtYXR0aW5nIGNvbnRleHRzLgpAQCAt
NTUsMjEgKzUzLDE3IEBAIHByaXZhdGU6CiAgICAgY2xhc3MgTGluZUxheW91dCB7CiAgICAgcHVi
bGljOgogICAgICAgICBMaW5lTGF5b3V0KGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0Jik7
Ci0gICAgICAgIHZvaWQgbGF5b3V0KGNvbnN0IElubGluZVJ1blByb3ZpZGVyJikgY29uc3Q7Cisg
ICAgICAgIHZvaWQgbGF5b3V0KCkgY29uc3Q7CiAKICAgICBwcml2YXRlOgorICAgICAgICBMYXlv
dXRTdGF0ZSYgbGF5b3V0U3RhdGUoKSBjb25zdCB7IHJldHVybiBtX2Zvcm1hdHRpbmdDb250ZXh0
LmxheW91dFN0YXRlKCk7IH0KICAgICAgICAgZW51bSBjbGFzcyBJc0xhc3RMaW5lIHsgTm8sIFll
cyB9OwogICAgICAgICB2b2lkIGluaXRpYWxpemVOZXdMaW5lKExpbmUmKSBjb25zdDsKICAgICAg
ICAgdm9pZCBjbG9zZUxpbmUoTGluZSYsIElzTGFzdExpbmUpIGNvbnN0OwotICAgICAgICB2b2lk
IGFwcGVuZENvbnRlbnRUb0xpbmUoTGluZSYsIGNvbnN0IElubGluZVJ1blByb3ZpZGVyOjpSdW4m
LCBjb25zdCBMYXlvdXRTaXplJikgY29uc3Q7Ci0gICAgICAgIHZvaWQgcG9zdFByb2Nlc3NJbmxp
bmVSdW5zKExpbmUmLCBJc0xhc3RMaW5lKSBjb25zdDsKLSAgICAgICAgdm9pZCBjcmVhdGVGaW5h
bFJ1bnMoTGluZSYpIGNvbnN0OwotICAgICAgICB2b2lkIHNwbGl0SW5saW5lUnVuSWZOZWVkZWQo
Y29uc3QgSW5saW5lUnVuJiwgSW5saW5lUnVucyYgc3BsaXRSdW5zKSBjb25zdDsKKyAgICAgICAg
dm9pZCBjb21taXRJbmxpbmVJdGVtVG9MaW5lKExpbmUmLCBjb25zdCBJbmxpbmVJdGVtJikgY29u
c3Q7CiAgICAgICAgIHZvaWQgY29tcHV0ZUZsb2F0UG9zaXRpb24oY29uc3QgRmxvYXRpbmdDb250
ZXh0JiwgTGluZSYsIGNvbnN0IEJveCYpIGNvbnN0OwotICAgICAgICB2b2lkIHBsYWNlSW5GbG93
UG9zaXRpb25lZENoaWxkcmVuKHVuc2lnbmVkIGZpcnN0UnVuSW5kZXgpIGNvbnN0OwogICAgICAg
ICB2b2lkIGFsaWduUnVucyhUZXh0QWxpZ25Nb2RlLCBMaW5lJiwgSXNMYXN0TGluZSkgY29uc3Q7
Ci0gICAgICAgIHZvaWQgY29tcHV0ZUV4cGFuc2lvbk9wcG9ydHVuaXRpZXMoTGluZSYsIGNvbnN0
IElubGluZVJ1blByb3ZpZGVyOjpSdW4mLCBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpUeXBlIGxh
c3RSdW5UeXBlKSBjb25zdDsKLSAgICAgICAgTGF5b3V0VW5pdCBydW5XaWR0aChjb25zdCBJbmxp
bmVDb250ZW50JiwgY29uc3QgSW5saW5lSXRlbSYsIEl0ZW1Qb3NpdGlvbiBmcm9tLCB1bnNpZ25l
ZCBsZW5ndGgsIExheW91dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0KSBjb25zdDsKKyAgICAgICAg
dm9pZCBjb21wdXRlRXhwYW5zaW9uT3Bwb3J0dW5pdGllcyhMaW5lJiwgY29uc3QgSW5saW5lSXRl
bSYsIGJvb2wgcHJldmlvdXNSdW5Jc1doaXRlcGFjZSkgY29uc3Q7CiAKICAgICBwcml2YXRlOgog
ICAgICAgICBzdGF0aWMgdm9pZCBqdXN0aWZ5UnVucyhMaW5lJik7CkBAIC05MSwxMSArODUsMTEg
QEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbXB1dGVJbnRyaW5zaWNXaWR0aEZvckZsb2F0Qm94KGNv
bnN0IEJveCYpIGNvbnN0OwogICAgIHZvaWQgY29tcHV0ZUludHJpbnNpY1dpZHRoRm9ySW5saW5l
QmxvY2soY29uc3QgQm94JikgY29uc3Q7CiAgICAgdm9pZCBjb21wdXRlV2lkdGhBbmRIZWlnaHRG
b3JSZXBsYWNlZElubGluZUJveChjb25zdCBCb3gmLCBVc2VkSG9yaXpvbnRhbFZhbHVlcykgY29u
c3Q7Ci0gICAgdm9pZCBjb21wdXRlTWFyZ2luKGNvbnN0IEJveCYsIFVzZWRIb3Jpem9udGFsVmFs
dWVzKSBjb25zdDsKKyAgICB2b2lkIGNvbXB1dGVIb3Jpem9udGFsTWFyZ2luKGNvbnN0IEJveCYs
IFVzZWRIb3Jpem9udGFsVmFsdWVzKSBjb25zdDsKICAgICB2b2lkIGNvbXB1dGVIZWlnaHRBbmRN
YXJnaW4oY29uc3QgQm94JikgY29uc3Q7CiAgICAgdm9pZCBjb21wdXRlV2lkdGhBbmRNYXJnaW4o
Y29uc3QgQm94JiwgVXNlZEhvcml6b250YWxWYWx1ZXMpIGNvbnN0OwogCi0gICAgdm9pZCBjb2xs
ZWN0SW5saW5lQ29udGVudChJbmxpbmVSdW5Qcm92aWRlciYpIGNvbnN0OworICAgIHZvaWQgY29s
bGVjdElubGluZUNvbnRlbnQoKSBjb25zdDsKIAogICAgIElubGluZUZvcm1hdHRpbmdTdGF0ZSYg
Zm9ybWF0dGluZ1N0YXRlKCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8SW5saW5lRm9ybWF0dGlu
Z1N0YXRlPihGb3JtYXR0aW5nQ29udGV4dDo6Zm9ybWF0dGluZ1N0YXRlKCkpOyB9CiB9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9y
bWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxp
bmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0TGluZUxheW91dC5jcHAKaW5kZXgg
N2IxM2FiMGI0ZWJjYmQyNTcxZmU2YzM2OGE4Zjc3MDE2ZmNhYTBlNC4uOTQ1MmNlOWNlZmExNzE5
YjUyMzAxODcyYjgyYWE0MWQ0NmQ3YWVkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dExpbmVMYXlvdXQuY3BwCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSAi
RmxvYXRpbmdTdGF0ZS5oIgogI2luY2x1ZGUgIklubGluZUZvcm1hdHRpbmdTdGF0ZS5oIgogI2lu
Y2x1ZGUgIklubGluZUxpbmVCcmVha2VyLmgiCi0jaW5jbHVkZSAiSW5saW5lUnVuUHJvdmlkZXIu
aCIKICNpbmNsdWRlICJMYXlvdXRCb3guaCIKICNpbmNsdWRlICJMYXlvdXRDb250YWluZXIuaCIK
ICNpbmNsdWRlICJMYXlvdXRTdGF0ZS5oIgpAQCAtNDMsMTQ0ICs0MiwyMTkgQEAgbmFtZXNwYWNl
IExheW91dCB7CiAKIGNsYXNzIExpbmUgewogcHVibGljOgorICAgIExpbmUoY29uc3QgTGF5b3V0
U3RhdGUmKTsKKwogICAgIHZvaWQgaW5pdChjb25zdCBMYXlvdXRQb2ludCYgdG9wTGVmdCwgTGF5
b3V0VW5pdCBhdmFpbGFibGVXaWR0aCwgTGF5b3V0VW5pdCBtaW5pbWFsSGVpZ2h0KTsKICAgICB2
b2lkIGNsb3NlKCk7CiAKLSAgICB2b2lkIGFwcGVuZENvbnRlbnQoY29uc3QgSW5saW5lUnVuUHJv
dmlkZXI6OlJ1biYsIGNvbnN0IExheW91dFNpemUmKTsKKyAgICB2b2lkIGFwcGVuZFRleHRDb250
ZW50KGNvbnN0IElubGluZVRleHRJdGVtJiwgTGF5b3V0U2l6ZSk7CisgICAgdm9pZCBhcHBlbmRO
b25UZXh0Q29udGVudChjb25zdCBJbmxpbmVJdGVtJiwgTGF5b3V0U2l6ZSk7CisgICAgdm9pZCBh
cHBlbmROb25CcmVha2FibGVTcGFjZShjb25zdCBJbmxpbmVJdGVtJik7CisKKyAgICB2b2lkIGFk
anVzdExvZ2ljYWxMZWZ0KExheW91dFVuaXQpOworICAgIHZvaWQgYWRqdXN0TG9naWNhbFJpZ2h0
KExheW91dFVuaXQpOwogCi0gICAgdm9pZCBhZGp1c3RMb2dpY2FsTGVmdChMYXlvdXRVbml0IGRl
bHRhKTsKLSAgICB2b2lkIGFkanVzdExvZ2ljYWxSaWdodChMYXlvdXRVbml0IGRlbHRhKTsKKyAg
ICBzdHJ1Y3QgUnVuIHsKKyAgICAgICAgRGlzcGxheTo6UnVuIGlubGluZVJ1bjsKKyAgICAgICAg
Y29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbTsKKyAgICB9OworICAgIFZlY3RvcjxSdW4+JiBy
dW5zKCkgeyByZXR1cm4gbV9ydW5zOyB9CiAKLSAgICBib29sIGhhc0NvbnRlbnQoKSBjb25zdCB7
IHJldHVybiAhbV9pbmxpbmVSdW5zLmlzRW1wdHkoKTsgfQorICAgIGJvb2wgaGFzQ29udGVudCgp
IGNvbnN0OworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fcnVucy5pc0VtcHR5
KCk7IH0KKyAgICBMYXlvdXRVbml0IHRyYWlsaW5nV2hpdGVzcGFjZVdpZHRoKCkgY29uc3Q7Cisg
ICAgYm9vbCBoYXNUcmFpbGluZ1doaXRlc3BhY2UoKSBjb25zdCB7IHJldHVybiBtX251bWJlck9m
VHJpbW1hYmxlUnVuczsgfQogICAgIGJvb2wgaXNDbG9zZWQoKSBjb25zdCB7IHJldHVybiBtX2Ns
b3NlZDsgfQogICAgIGJvb2wgaXNGaXJzdExpbmUoKSBjb25zdCB7IHJldHVybiBtX2lzRmlyc3RM
aW5lOyB9Ci0gICAgVmVjdG9yPElubGluZVJ1bj4mIHJ1bnMoKSB7IHJldHVybiBtX2lubGluZVJ1
bnM7IH0KLQotICAgIExheW91dFVuaXQgY29udGVudExvZ2ljYWxSaWdodCgpIGNvbnN0OwotICAg
IExheW91dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0KCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2Fs
UmVjdC5sZWZ0KCk7IH0KLSAgICBMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoKCkgY29uc3QgeyBy
ZXR1cm4gbV9hdmFpbGFibGVXaWR0aDsgfQotICAgIE9wdGlvbmFsPElubGluZVJ1blByb3ZpZGVy
OjpSdW46OlR5cGU+IGxhc3RSdW5UeXBlKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0UnVuVHlwZTsg
fQogCisgICAgTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGlu
ZVdpZHRoIC0gbV9sb2dpY2FsUmVjdC53aWR0aCgpOyB9CiAgICAgTGF5b3V0VW5pdCBsb2dpY2Fs
VG9wKCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsUmVjdC50b3AoKTsgfQorICAgIExheW91dFVu
aXQgbG9naWNhbExlZnQoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxSZWN0LmxlZnQoKTsgfQog
ICAgIExheW91dFVuaXQgbG9naWNhbEJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFJl
Y3QuYm90dG9tKCk7IH0KKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodCgpIGNvbnN0IHsgcmV0
dXJuIG1fbG9naWNhbFJlY3QucmlnaHQoKTsgfQorCiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsSGVp
Z2h0KCkgY29uc3QgeyByZXR1cm4gbG9naWNhbEJvdHRvbSgpIC0gbG9naWNhbFRvcCgpOyB9CiAK
IHByaXZhdGU6Ci0gICAgc3RydWN0IFRyYWlsaW5nVHJpbW1hYmxlQ29udGVudCB7Ci0gICAgICAg
IExheW91dFVuaXQgd2lkdGg7Ci0gICAgICAgIHVuc2lnbmVkIGxlbmd0aDsKLSAgICB9OwotICAg
IE9wdGlvbmFsPFRyYWlsaW5nVHJpbW1hYmxlQ29udGVudD4gbV90cmFpbGluZ1RyaW1tYWJsZUNv
bnRlbnQ7Ci0gICAgT3B0aW9uYWw8SW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6VHlwZT4gbV9sYXN0
UnVuVHlwZTsKKyAgICBjb25zdCBMYXlvdXRTdGF0ZSYgbV9sYXlvdXRTdGF0ZTsKKyAgICB1bnNp
Z25lZCBtX251bWJlck9mVHJpbW1hYmxlUnVucyB7IDAgfTsKICAgICBib29sIG1fbGFzdFJ1bkNh
bkV4cGFuZCB7IGZhbHNlIH07CiAKICAgICBEaXNwbGF5OjpCb3g6OlJlY3QgbV9sb2dpY2FsUmVj
dDsKLSAgICBMYXlvdXRVbml0IG1fYXZhaWxhYmxlV2lkdGg7CisgICAgTGF5b3V0VW5pdCBtX2xp
bmVXaWR0aDsKIAotICAgIFZlY3RvcjxJbmxpbmVSdW4+IG1faW5saW5lUnVuczsKKyAgICBWZWN0
b3I8UnVuPiBtX3J1bnM7CiAgICAgYm9vbCBtX2lzRmlyc3RMaW5lIHsgdHJ1ZSB9OwogICAgIGJv
b2wgbV9jbG9zZWQgeyB0cnVlIH07CiB9OwogCitMaW5lOjpMaW5lKGNvbnN0IExheW91dFN0YXRl
JiBsYXlvdXRTdGF0ZSkKKyAgICA6IG1fbGF5b3V0U3RhdGUobGF5b3V0U3RhdGUpCit7CisKK30K
Kwogdm9pZCBMaW5lOjppbml0KGNvbnN0IExheW91dFBvaW50JiB0b3BMZWZ0LCBMYXlvdXRVbml0
IGF2YWlsYWJsZVdpZHRoLCBMYXlvdXRVbml0IG1pbmltYWxIZWlnaHQpCiB7CiAgICAgbV9sb2dp
Y2FsUmVjdC5zZXRUb3BMZWZ0KHRvcExlZnQpOwotICAgIG1fbG9naWNhbFJlY3Quc2V0V2lkdGgo
YXZhaWxhYmxlV2lkdGgpOworICAgIG1fbG9naWNhbFJlY3Quc2V0V2lkdGgoMCk7CiAgICAgbV9s
b2dpY2FsUmVjdC5zZXRIZWlnaHQobWluaW1hbEhlaWdodCk7Ci0gICAgbV9hdmFpbGFibGVXaWR0
aCA9IGF2YWlsYWJsZVdpZHRoOworICAgIG1fbGluZVdpZHRoID0gYXZhaWxhYmxlV2lkdGg7CiAK
LSAgICBtX2lubGluZVJ1bnMuY2xlYXIoKTsKLSAgICBtX2xhc3RSdW5UeXBlID0geyB9OworICAg
IG1fcnVucy5jbGVhcigpOwogICAgIG1fbGFzdFJ1bkNhbkV4cGFuZCA9IGZhbHNlOwotICAgIG1f
dHJhaWxpbmdUcmltbWFibGVDb250ZW50ID0geyB9OworICAgIG1fbnVtYmVyT2ZUcmltbWFibGVS
dW5zID0gMDsKICAgICBtX2Nsb3NlZCA9IGZhbHNlOwogfQogCiB2b2lkIExpbmU6OmFkanVzdExv
Z2ljYWxMZWZ0KExheW91dFVuaXQgZGVsdGEpCiB7CisgICAgaWYgKCFkZWx0YSkKKyAgICAgICAg
cmV0dXJuOwogICAgIEFTU0VSVChkZWx0YSA+IDApOwotCi0gICAgbV9hdmFpbGFibGVXaWR0aCAt
PSBkZWx0YTsKLSAgICBtX2xvZ2ljYWxSZWN0LnNoaWZ0TGVmdFRvKG1fbG9naWNhbFJlY3QubGVm
dCgpICsgZGVsdGEpOwotCi0gICAgZm9yIChhdXRvJiBpbmxpbmVSdW4gOiBtX2lubGluZVJ1bnMp
Ci0gICAgICAgIGlubGluZVJ1bi5tb3ZlSG9yaXpvbnRhbGx5KGRlbHRhKTsKKyAgICBtX2xpbmVX
aWR0aC09IGRlbHRhOworICAgIG1fbG9naWNhbFJlY3QubW92ZUhvcml6b250YWxseShkZWx0YSk7
CisgICAgZm9yIChhdXRvJiBydW4gOiBtX3J1bnMpCisgICAgICAgIHJ1bi5pbmxpbmVSdW4ubW92
ZUhvcml6b250YWxseShkZWx0YSk7CiB9CiAKIHZvaWQgTGluZTo6YWRqdXN0TG9naWNhbFJpZ2h0
KExheW91dFVuaXQgZGVsdGEpCiB7CiAgICAgQVNTRVJUKGRlbHRhID4gMCk7CisgICAgbV9saW5l
V2lkdGgtPSBkZWx0YTsKK30KIAotICAgIG1fYXZhaWxhYmxlV2lkdGggLT0gZGVsdGE7Ci0gICAg
bV9sb2dpY2FsUmVjdC5zaGlmdFJpZ2h0VG8obV9sb2dpY2FsUmVjdC5yaWdodCgpIC0gZGVsdGEp
Oworc3RhdGljIGJvb2wgaXNUcmltbWFibGVDb250ZW50KGNvbnN0IElubGluZUl0ZW0mIGlubGlu
ZUl0ZW0pCit7CisgICAgaWYgKCFpczxJbmxpbmVUZXh0SXRlbT4oaW5saW5lSXRlbSkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvJiBpbmxpbmVUZXh0SXRlbSA9IGRvd25jYXN0PElu
bGluZVRleHRJdGVtPihpbmxpbmVJdGVtKTsKKyAgICByZXR1cm4gaW5saW5lVGV4dEl0ZW0uaXNX
aGl0ZXNwYWNlKCkgJiYgaW5saW5lVGV4dEl0ZW0uc3R5bGUoKS5jb2xsYXBzZVdoaXRlU3BhY2Uo
KTsKIH0KIAotc3RhdGljIGJvb2wgaXNUcmltbWFibGVDb250ZW50KGNvbnN0IElubGluZVJ1blBy
b3ZpZGVyOjpSdW4mIGlubGluZVJ1bikKK0xheW91dFVuaXQgTGluZTo6dHJhaWxpbmdXaGl0ZXNw
YWNlV2lkdGgoKSBjb25zdAogewotICAgIHJldHVybiBpbmxpbmVSdW4uaXNXaGl0ZXNwYWNlKCkg
JiYgaW5saW5lUnVuLnN0eWxlKCkuY29sbGFwc2VXaGl0ZVNwYWNlKCk7CisgICAgaWYgKGlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICBMYXlvdXRVbml0IHRyaW1tYWJsZVdpZHRo
OworICAgIGF1dG8gbnVtYmVyT2ZUcmltbWFibGVSdW5zID0gbV9udW1iZXJPZlRyaW1tYWJsZVJ1
bnM7CisgICAgYXV0byBsYXN0UnVuSW5kZXggPSBtX3J1bnMuc2l6ZSgpIC0gMTsKKyAgICB3aGls
ZSAobnVtYmVyT2ZUcmltbWFibGVSdW5zKSB7CisgICAgICAgIGF1dG8mIGxhc3RSdW4gPSBtX3J1
bnNbbGFzdFJ1bkluZGV4LS1dOworICAgICAgICBpZiAobGFzdFJ1bi5pbmxpbmVJdGVtLmlzQ29u
dGFpbmVyU3RhcnQoKSB8fCBsYXN0UnVuLmlubGluZUl0ZW0uaXNDb250YWluZXJFbmQoKSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB0cmltbWFibGVXaWR0aCArPSBsYXN0UnVuLmlu
bGluZVJ1bi5sb2dpY2FsV2lkdGgoKTsKKyAgICAgICAgLS1udW1iZXJPZlRyaW1tYWJsZVJ1bnM7
CisgICAgfQorICAgIHJldHVybiB0cmltbWFibGVXaWR0aDsKIH0KIAotTGF5b3V0VW5pdCBMaW5l
Ojpjb250ZW50TG9naWNhbFJpZ2h0KCkgY29uc3QKK2Jvb2wgTGluZTo6aGFzQ29udGVudCgpIGNv
bnN0CiB7Ci0gICAgaWYgKG1faW5saW5lUnVucy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBt
X2xvZ2ljYWxSZWN0LmxlZnQoKTsKKyAgICBpZiAobV9ydW5zLmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGZvciAoYXV0byYgcnVuIDogbV9ydW5zKSB7CisgICAgICAgIGlm
IChydW4uaW5saW5lSXRlbS5pc0NvbnRhaW5lclN0YXJ0KCkgfHwgcnVuLmlubGluZUl0ZW0uaXND
b250YWluZXJFbmQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAocnVuLmlu
bGluZVJ1bi5sb2dpY2FsV2lkdGgoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICByZXR1cm4gZmFsc2U7Cit9CiAKLSAgICByZXR1cm4gbV9pbmxpbmVSdW5zLmxhc3QoKS5s
b2dpY2FsUmlnaHQoKTsKK3ZvaWQgTGluZTo6YXBwZW5kTm9uQnJlYWthYmxlU3BhY2UoY29uc3Qg
SW5saW5lSXRlbSYgaW5saW5lSXRlbSkKK3sKKyAgICBBU1NFUlQoIWlzQ2xvc2VkKCkpOworICAg
IC8vIEZJWE1FIGhlaWdodAorICAgIGF1dG8gbG9naWNhbFJlY3QgPSBEaXNwbGF5OjpCb3g6OlJl
Y3QgeyBsb2dpY2FsVG9wKCksIGxvZ2ljYWxSaWdodCgpLCBpbmxpbmVJdGVtLndpZHRoKCksIDAg
fTsKKyAgICBtX3J1bnMuYXBwZW5kKHsgRGlzcGxheTo6UnVuIHsgbG9naWNhbFJlY3QsIHsgfX0s
IGlubGluZUl0ZW0gfSk7CisgICAgbV9sb2dpY2FsUmVjdC5leHBhbmQoaW5saW5lSXRlbS53aWR0
aCgpLCAwKTsKKyAgICBtX2xhc3RSdW5DYW5FeHBhbmQgPSBmYWxzZTsKIH0KIAotdm9pZCBMaW5l
OjphcHBlbmRDb250ZW50KGNvbnN0IElubGluZVJ1blByb3ZpZGVyOjpSdW4mIHJ1biwgY29uc3Qg
TGF5b3V0U2l6ZSYgcnVuU2l6ZSkKK3ZvaWQgTGluZTo6YXBwZW5kVGV4dENvbnRlbnQoY29uc3Qg
SW5saW5lVGV4dEl0ZW0mIGlubGluZUl0ZW0sIExheW91dFNpemUgcnVuU2l6ZSkKIHsKICAgICBB
U1NFUlQoIWlzQ2xvc2VkKCkpOworICAgIGF1dG8gaXNUcmltbWFibGUgPSBpc1RyaW1tYWJsZUNv
bnRlbnQoaW5saW5lSXRlbSk7CisKKyAgICBhdXRvIHNob3VsZENvbGxhcHNlID0gWyZdKCkgewor
ICAgICAgICBpZiAoIWlzVHJpbW1hYmxlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAvLyBTa2lwIGxlYWRpbmcgd2hpdGVzcGFjZS4KKyAgICAgICAgaWYgKGlzRW1wdHkoKSkK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAvLyBDaGVjayBpZiB0aGUgcHJldmlv
dXMgcnVuIGlzIGEgd2hpdGVzcGFjZSBhbmQgd2hldGhlciB3ZSBjYW4gY29sbGFwc2UgaXQgd2l0
aCB0aGlzIHJ1bi4KKyAgICAgICAgYXV0byBjdXJyZW50SW5kZXggPSBtX3J1bnMuc2l6ZSgpIC0g
MTsKKyAgICAgICAgYXV0byogY3VycmVudEl0ZW0gPSAmbV9ydW5zW2N1cnJlbnRJbmRleF0uaW5s
aW5lSXRlbTsKKyAgICAgICAgLy8gU2tpcCBub24tY29uZW50IGlubGluZSBpdGVtcy4KKyAgICAg
ICAgd2hpbGUgKGN1cnJlbnRJdGVtLT5pc0NvbnRhaW5lclN0YXJ0KCkgfHwgY3VycmVudEl0ZW0t
PmlzQ29udGFpbmVyRW5kKCkpIHsKKyAgICAgICAgICAgIGlmICghY3VycmVudEluZGV4LS0pCisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7IAorICAgICAgICAgICAgY3VycmVudEl0ZW0gPSAm
bV9ydW5zW2N1cnJlbnRJbmRleF0uaW5saW5lSXRlbTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gY3VycmVudEl0ZW0tPmlzVGV4dCgpICYmIGlzVHJpbW1hYmxlQ29udGVudChkb3duY2FzdDxJ
bmxpbmVUZXh0SXRlbT4oKmN1cnJlbnRJdGVtKSk7CisgICAgfTsKIAotICAgIC8vIEFwcGVuZCB0
aGlzIHRleHQgcnVuIHRvIHRoZSBlbmQgb2YgdGhlIGxhc3QgdGV4dCBydW4sIGlmIHRoZSBsYXN0
IHJ1biBpcyBjb250aW51b3VzLgotICAgIE9wdGlvbmFsPElubGluZVJ1bjo6VGV4dENvbnRleHQ+
IHRleHRSdW47Ci0gICAgaWYgKHJ1bi5pc1RleHQoKSkgewotICAgICAgICBhdXRvIHRleHRDb250
ZXh0ID0gcnVuLnRleHRDb250ZXh0KCk7Ci0gICAgICAgIGF1dG8gcnVuTGVuZ3RoID0gdGV4dENv
bnRleHQtPmlzQ29sbGFwc2VkKCkgPyAxIDogdGV4dENvbnRleHQtPmxlbmd0aCgpOwotICAgICAg
ICB0ZXh0UnVuID0gSW5saW5lUnVuOjpUZXh0Q29udGV4dCB7IHRleHRDb250ZXh0LT5zdGFydCgp
LCBydW5MZW5ndGggfTsKLSAgICB9CisgICAgaWYgKHNob3VsZENvbGxhcHNlKCkpCisgICAgICAg
IHJldHVybjsKIAotICAgIGF1dG8gcmVxdWlyZXNOZXdJbmxpbmVSdW4gPSAhaGFzQ29udGVudCgp
IHx8ICFydW4uaXNUZXh0KCkgfHwgIW1fbGFzdFJ1bkNhbkV4cGFuZDsKLSAgICBpZiAocmVxdWly
ZXNOZXdJbmxpbmVSdW4pIHsKLSAgICAgICAgLy8gRklYTUU6IFRoaXMgbmVlZHMgcHJvcGVyIGJh
c2VsaW5lIGhhbmRsaW5nCi0gICAgICAgIGF1dG8gaW5saW5lUnVuID0gSW5saW5lUnVuIHsgeyBs
b2dpY2FsVG9wKCksIGNvbnRlbnRMb2dpY2FsUmlnaHQoKSwgcnVuU2l6ZS53aWR0aCgpLCBydW5T
aXplLmhlaWdodCgpIH0sIHJ1bi5pbmxpbmVJdGVtKCkgfTsKLSAgICAgICAgaWYgKHRleHRSdW4p
Ci0gICAgICAgICAgICBpbmxpbmVSdW4uc2V0VGV4dENvbnRleHQoeyB0ZXh0UnVuLT5zdGFydCgp
LCB0ZXh0UnVuLT5sZW5ndGgoKSB9KTsKLSAgICAgICAgbV9pbmxpbmVSdW5zLmFwcGVuZChpbmxp
bmVSdW4pOworICAgIG1fbGFzdFJ1bkNhbkV4cGFuZCA9ICFpbmxpbmVJdGVtLmlzQ29sbGFwc2Vk
KCk7CisgICAgbV9udW1iZXJPZlRyaW1tYWJsZVJ1bnMgPSBpc1RyaW1tYWJsZSA/IG1fbnVtYmVy
T2ZUcmltbWFibGVSdW5zICsgMSA6IDA7IAorICAgIGF1dG8gcnVuTGVuZ3RoID0gaW5saW5lSXRl
bS5pc0NvbGxhcHNlZCgpID8gMSA6IGlubGluZUl0ZW0ubGVuZ3RoKCk7CisKKyAgICBhdXRvIHJl
cXVpcmVzTmV3UnVuID0gaXNFbXB0eSgpIHx8ICFtX2xhc3RSdW5DYW5FeHBhbmQgfHwgJm1fcnVu
cy5sYXN0KCkuaW5saW5lSXRlbSAhPSAmaW5saW5lSXRlbTsKKyAgICBpZiAocmVxdWlyZXNOZXdS
dW4pIHsKKyAgICAgICAgYXV0byBsb2dpY2FsUmVjdCA9IERpc3BsYXk6OkJveDo6UmVjdCB7IGxv
Z2ljYWxUb3AoKSwgbG9naWNhbFJpZ2h0KCksIHJ1blNpemUud2lkdGgoKSwgcnVuU2l6ZS5oZWln
aHQoKSB9OworICAgICAgICBhdXRvIHRleHRDb250ZXh0ID0gRGlzcGxheTo6UnVuOjpUZXh0Q29u
dGV4dCB7IGlubGluZUl0ZW0uc3RhcnQoKSwgcnVuTGVuZ3RoIH07CisgICAgICAgIGF1dG8gZGlz
cGxheVJ1biA9IERpc3BsYXk6OlJ1bihsb2dpY2FsUmVjdCwgdGV4dENvbnRleHQpOworICAgICAg
ICBtX3J1bnMuYXBwZW5kKHsgZGlzcGxheVJ1biwgaW5saW5lSXRlbSB9KTsKKyAgICAgICAgbV9s
b2dpY2FsUmVjdC5leHBhbmQocnVuU2l6ZS53aWR0aCgpLCAwKTsKICAgICAgICAgbV9sb2dpY2Fs
UmVjdC5zZXRIZWlnaHQoc3RkOjptYXgocnVuU2l6ZS5oZWlnaHQoKSwgbV9sb2dpY2FsUmVjdC5o
ZWlnaHQoKSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIE5vbi10ZXh0IHJ1bnMgYWx3YXlz
IHJlcXVpcmUgbmV3IGlubGluZSBydW4uCi0gICAgICAgIEFTU0VSVCh0ZXh0UnVuKTsKLSAgICAg
ICAgYXV0byYgaW5saW5lUnVuID0gbV9pbmxpbmVSdW5zLmxhc3QoKTsKLSAgICAgICAgQVNTRVJU
KHJ1blNpemUuaGVpZ2h0KCkgPT0gaW5saW5lUnVuLmxvZ2ljYWxIZWlnaHQoKSk7Ci0gICAgICAg
IGlubGluZVJ1bi5zZXRMb2dpY2FsV2lkdGgoaW5saW5lUnVuLmxvZ2ljYWxXaWR0aCgpICsgcnVu
U2l6ZS53aWR0aCgpKTsKLSAgICAgICAgaW5saW5lUnVuLnRleHRDb250ZXh0KCktPnNldExlbmd0
aChpbmxpbmVSdW4udGV4dENvbnRleHQoKS0+bGVuZ3RoKCkgKyB0ZXh0UnVuLT5sZW5ndGgoKSk7
CisgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX2F2YWlsYWJsZVdpZHRoIC09IHJ1blNp
emUud2lkdGgoKTsKLSAgICBtX2xhc3RSdW5UeXBlID0gcnVuLnR5cGUoKTsKLSAgICBtX2xhc3RS
dW5DYW5FeHBhbmQgPSBydW4uaXNUZXh0KCkgJiYgIXJ1bi50ZXh0Q29udGV4dCgpLT5pc0NvbGxh
cHNlZCgpOwotICAgIG1fdHJhaWxpbmdUcmltbWFibGVDb250ZW50ID0geyB9OwotICAgIGlmIChp
c1RyaW1tYWJsZUNvbnRlbnQocnVuKSkKLSAgICAgICAgbV90cmFpbGluZ1RyaW1tYWJsZUNvbnRl
bnQgPSBUcmFpbGluZ1RyaW1tYWJsZUNvbnRlbnQgeyBydW5TaXplLndpZHRoKCksIHRleHRSdW4t
Pmxlbmd0aCgpIH07CisgICAgYXV0byYgbGFzdElubGluZVJ1biA9IG1fcnVucy5sYXN0KCkuaW5s
aW5lUnVuOworICAgIEFTU0VSVChydW5TaXplLmhlaWdodCgpID09IGxhc3RJbmxpbmVSdW4ubG9n
aWNhbEhlaWdodCgpKTsKKyAgICBsYXN0SW5saW5lUnVuLmV4cGFuZEhvcml6b250YWxseShydW5T
aXplLndpZHRoKCkpOworICAgIGxhc3RJbmxpbmVSdW4udGV4dENvbnRleHQoKS0+ZXhwYW5kKHJ1
bkxlbmd0aCk7CisgICAgbV9sb2dpY2FsUmVjdC5leHBhbmQocnVuU2l6ZS53aWR0aCgpLCAwKTsK
K30KKwordm9pZCBMaW5lOjphcHBlbmROb25UZXh0Q29udGVudChjb25zdCBJbmxpbmVJdGVtJiBp
bmxpbmVJdGVtLCBMYXlvdXRTaXplIHJ1blNpemUpCit7CisgICAgQVNTRVJUKCFpc0Nsb3NlZCgp
KTsKKworICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBtX2xheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JM
YXlvdXRCb3goaW5saW5lSXRlbS5sYXlvdXRCb3goKSk7CisgICAgYXV0byBob3Jpem9udGFsTWFy
Z2luID0gZGlzcGxheUJveC5ob3Jpem9udGFsTWFyZ2luKCk7CisKKyAgICBhdXRvIGxvZ2ljYWxS
ZWN0ID0gRGlzcGxheTo6Qm94OjpSZWN0IHsgbG9naWNhbFRvcCgpLCBsb2dpY2FsUmlnaHQoKSAr
IGhvcml6b250YWxNYXJnaW4uc3RhcnQsIHJ1blNpemUud2lkdGgoKSwgcnVuU2l6ZS5oZWlnaHQo
KSB9OworICAgIG1fcnVucy5hcHBlbmQoeyBEaXNwbGF5OjpSdW4geyBsb2dpY2FsUmVjdCwgeyB9
fSwgaW5saW5lSXRlbSB9KTsKKyAgICBtX2xvZ2ljYWxSZWN0LnNldEhlaWdodChzdGQ6Om1heChy
dW5TaXplLmhlaWdodCgpLCBtX2xvZ2ljYWxSZWN0LmhlaWdodCgpKSk7CisgICAgbV9sb2dpY2Fs
UmVjdC5leHBhbmQocnVuU2l6ZS53aWR0aCgpICsgaG9yaXpvbnRhbE1hcmdpbi5zdGFydCArIGhv
cml6b250YWxNYXJnaW4uZW5kLCAwKTsKKworICAgIG1fbGFzdFJ1bkNhbkV4cGFuZCA9IGZhbHNl
OworICAgIG1fbnVtYmVyT2ZUcmltbWFibGVSdW5zID0gMDsKIH0KIAogdm9pZCBMaW5lOjpjbG9z
ZSgpCiB7CiAgICAgYXV0byB0cmltVHJhaWxpbmdDb250ZW50ID0gWyZdIHsKLSAgICAgICAgaWYg
KCFtX3RyYWlsaW5nVHJpbW1hYmxlQ29udGVudCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgYXV0byYgbGFzdElubGluZVJ1biA9IG1faW5saW5lUnVucy5sYXN0KCk7Ci0gICAgICAgIGxh
c3RJbmxpbmVSdW4uc2V0TG9naWNhbFdpZHRoKGxhc3RJbmxpbmVSdW4ubG9naWNhbFdpZHRoKCkg
LSBtX3RyYWlsaW5nVHJpbW1hYmxlQ29udGVudC0+d2lkdGgpOwotICAgICAgICBsYXN0SW5saW5l
UnVuLnRleHRDb250ZXh0KCktPnNldExlbmd0aChsYXN0SW5saW5lUnVuLnRleHRDb250ZXh0KCkt
Pmxlbmd0aCgpIC0gbV90cmFpbGluZ1RyaW1tYWJsZUNvbnRlbnQtPmxlbmd0aCk7Ci0KLSAgICAg
ICAgaWYgKCFsYXN0SW5saW5lUnVuLnRleHRDb250ZXh0KCktPmxlbmd0aCgpKQotICAgICAgICAg
ICAgbV9pbmxpbmVSdW5zLnJlbW92ZUxhc3QoKTsKLSAgICAgICAgbV9hdmFpbGFibGVXaWR0aCAr
PSBtX3RyYWlsaW5nVHJpbW1hYmxlQ29udGVudC0+d2lkdGg7Ci0gICAgICAgIG1fdHJhaWxpbmdU
cmltbWFibGVDb250ZW50ID0geyB9OworICAgICAgICBBU1NFUlQobV9ydW5zLnNpemUoKSk7Cisg
ICAgICAgIGF1dG8gbGFzdFJ1bkluZGV4ID0gbV9ydW5zLnNpemUoKSAtIDE7CisgICAgICAgIHdo
aWxlIChtX251bWJlck9mVHJpbW1hYmxlUnVucykgeworICAgICAgICAgICAgYXV0byYgbGFzdFJ1
biA9IG1fcnVuc1tsYXN0UnVuSW5kZXhdOworICAgICAgICAgICAgaWYgKGxhc3RSdW4uaW5saW5l
SXRlbS5pc0NvbnRhaW5lclN0YXJ0KCkgfHwgbGFzdFJ1bi5pbmxpbmVJdGVtLmlzQ29udGFpbmVy
RW5kKCkpIHsKKyAgICAgICAgICAgICAgICAtLWxhc3RSdW5JbmRleDsKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fbG9naWNhbFJlY3QuZXhw
YW5kKC1sYXN0UnVuLmlubGluZVJ1bi5sb2dpY2FsV2lkdGgoKSwgMCk7CisgICAgICAgICAgICBt
X3J1bnMucmVtb3ZlKGxhc3RSdW5JbmRleCk7CisgICAgICAgICAgICAtLW1fbnVtYmVyT2ZUcmlt
bWFibGVSdW5zOworICAgICAgICAgICAgLS1sYXN0UnVuSW5kZXg7CisgICAgICAgIH0KICAgICB9
OwogCi0gICAgaWYgKCFoYXNDb250ZW50KCkpCisgICAgaWYgKGlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgdHJpbVRyYWlsaW5nQ29udGVudCgpOwpAQCAtMTg4LDYgKzI2MiwzMSBA
QCB2b2lkIExpbmU6OmNsb3NlKCkKICAgICBtX2Nsb3NlZCA9IHRydWU7CiB9CiAKK3N0cnVjdCBV
bmNvbW1pdHRlZENvbnRlbnQgeworICAgIHZvaWQgYWRkKElubGluZUl0ZW0mKTsKKyAgICB2b2lk
IHJlc2V0KCk7CisKKyAgICBWZWN0b3I8SW5saW5lSXRlbSo+IGlubGluZUl0ZW1zKCkgeyByZXR1
cm4gbV9pbmxpbmVJdGVtczsgfQorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1f
aW5saW5lSXRlbXMuaXNFbXB0eSgpOyB9CisgICAgTGF5b3V0VW5pdCB3aWR0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fd2lkdGg7IH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8SW5saW5lSXRlbSo+IG1f
aW5saW5lSXRlbXM7CisgICAgTGF5b3V0VW5pdCBtX3dpZHRoOworfTsKKwordm9pZCBVbmNvbW1p
dHRlZENvbnRlbnQ6OmFkZChJbmxpbmVJdGVtJiBpbmxpbmVJdGVtKQoreworICAgIG1faW5saW5l
SXRlbXMuYXBwZW5kKCZpbmxpbmVJdGVtKTsKKyAgICBtX3dpZHRoICs9IGlubGluZUl0ZW0ud2lk
dGgoKTsKK30KKwordm9pZCBVbmNvbW1pdHRlZENvbnRlbnQ6OnJlc2V0KCkKK3sKKyAgICBtX2lu
bGluZUl0ZW1zLmNsZWFyKCk7CisgICAgbV93aWR0aCA9IDA7Cit9CisKIElubGluZUZvcm1hdHRp
bmdDb250ZXh0OjpMaW5lTGF5b3V0OjpMaW5lTGF5b3V0KGNvbnN0IElubGluZUZvcm1hdHRpbmdD
b250ZXh0JiBpbmxpbmVGb3JtYXR0aW5nQ29udGV4dCkKICAgICA6IG1fZm9ybWF0dGluZ0NvbnRl
eHQoaW5saW5lRm9ybWF0dGluZ0NvbnRleHQpCiAgICAgLCBtX2Zvcm1hdHRpbmdTdGF0ZShtX2Zv
cm1hdHRpbmdDb250ZXh0LmZvcm1hdHRpbmdTdGF0ZSgpKQpAQCAtMTk2LDcyICsyOTUsNzEgQEAg
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OkxpbmVMYXlvdXQoY29uc3QgSW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQmIGkKIHsKIH0KIAotc3RhdGljIGJvb2wgaXNUcmltbWFibGVD
b250ZW50KGNvbnN0IElubGluZUxpbmVCcmVha2VyOjpSdW4mIHJ1bikKK3ZvaWQgSW5saW5lRm9y
bWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OmxheW91dCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IHJ1bi5jb250ZW50LmlzV2hpdGVzcGFjZSgpICYmIHJ1bi5jb250ZW50LnN0eWxlKCkuY29sbGFw
c2VXaGl0ZVNwYWNlKCk7Ci19Ci0KLXZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVM
YXlvdXQ6OmxheW91dChjb25zdCBJbmxpbmVSdW5Qcm92aWRlciYgaW5saW5lUnVuUHJvdmlkZXIp
IGNvbnN0Ci17Ci0gICAgYXV0byYgbGF5b3V0U3RhdGUgPSBtX2Zvcm1hdHRpbmdDb250ZXh0Lmxh
eW91dFN0YXRlKCk7CiAgICAgYXV0byBmbG9hdGluZ0NvbnRleHQgPSBGbG9hdGluZ0NvbnRleHQg
eyBtX2Zsb2F0aW5nU3RhdGUgfTsKKyAgICBMaW5lIGxpbmUobGF5b3V0U3RhdGUoKSk7CisgICAg
VW5jb21taXR0ZWRDb250ZW50IHVuY29tbWl0dGVkQ29udGVudDsKIAotICAgIExpbmUgbGluZTsK
ICAgICBpbml0aWFsaXplTmV3TGluZShsaW5lKTsKIAotICAgIElubGluZUxpbmVCcmVha2VyIGxp
bmVCcmVha2VyKGxheW91dFN0YXRlLCBtX2Zvcm1hdHRpbmdTdGF0ZS5pbmxpbmVDb250ZW50KCks
IGlubGluZVJ1blByb3ZpZGVyLnJ1bnMoKSk7Ci0gICAgd2hpbGUgKGF1dG8gcnVuID0gbGluZUJy
ZWFrZXIubmV4dFJ1bihsaW5lLmNvbnRlbnRMb2dpY2FsUmlnaHQoKSwgbGluZS5hdmFpbGFibGVX
aWR0aCgpLCAhbGluZS5oYXNDb250ZW50KCkpKSB7Ci0gICAgICAgIGF1dG8gaXNGaXJzdFJ1biA9
IHJ1bi0+cG9zaXRpb24gPT0gSW5saW5lTGluZUJyZWFrZXI6OlJ1bjo6UG9zaXRpb246OkxpbmVC
ZWdpbjsKLSAgICAgICAgYXV0byBpc0xhc3RSdW4gPSBydW4tPnBvc2l0aW9uID09IElubGluZUxp
bmVCcmVha2VyOjpSdW46OlBvc2l0aW9uOjpMaW5lRW5kOwotICAgICAgICBhdXRvIGdlbmVyYXRl
c0lubGluZVJ1biA9IHRydWU7Ci0KLSAgICAgICAgLy8gUG9zaXRpb24gZmxvYXQgYW5kIGFkanVz
dCB0aGUgcnVucyBvbiBsaW5lLgotICAgICAgICBpZiAocnVuLT5jb250ZW50LmlzRmxvYXQoKSkg
ewotICAgICAgICAgICAgYXV0byYgZmxvYXRCb3ggPSBydW4tPmNvbnRlbnQuaW5saW5lSXRlbSgp
LmxheW91dEJveCgpOwotICAgICAgICAgICAgY29tcHV0ZUZsb2F0UG9zaXRpb24oZmxvYXRpbmdD
b250ZXh0LCBsaW5lLCBmbG9hdEJveCk7Ci0gICAgICAgICAgICBtX2Zsb2F0aW5nU3RhdGUuYXBw
ZW5kKGZsb2F0Qm94KTsKLQotICAgICAgICAgICAgYXV0byBmbG9hdEJveFdpZHRoID0gbGF5b3V0
U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveChmbG9hdEJveCkubWFyZ2luQm94KCkud2lkdGgo
KTsKLSAgICAgICAgICAgIC8vIFNocmluayBhdmFpbGJsZSBzcGFjZSBmb3IgY3VycmVudCBsaW5l
IGFuZCBtb3ZlIGV4aXN0aW5nIGlubGluZSBydW5zLgotICAgICAgICAgICAgZmxvYXRCb3guaXNM
ZWZ0RmxvYXRpbmdQb3NpdGlvbmVkKCkgPyBsaW5lLmFkanVzdExvZ2ljYWxMZWZ0KGZsb2F0Qm94
V2lkdGgpIDogbGluZS5hZGp1c3RMb2dpY2FsUmlnaHQoZmxvYXRCb3hXaWR0aCk7CisgICAgYXV0
byBjb21taXRQZW5kaW5nQ29udGVudCA9IFsmXSB7CisgICAgICAgIGZvciAoYXV0byogdW5jb21t
aXR0ZWQgOiB1bmNvbW1pdHRlZENvbnRlbnQuaW5saW5lSXRlbXMoKSkKKyAgICAgICAgICAgIGNv
bW1pdElubGluZUl0ZW1Ub0xpbmUobGluZSwgKnVuY29tbWl0dGVkKTsKKyAgICAgICAgdW5jb21t
aXR0ZWRDb250ZW50LnJlc2V0KCk7CisgICAgfTsKIAotICAgICAgICAgICAgZ2VuZXJhdGVzSW5s
aW5lUnVuID0gZmFsc2U7CisgICAgTGluZUJyZWFrZXIgbGluZUJyZWFrZXIobGF5b3V0U3RhdGUo
KSk7CisgICAgYXV0byYgaW5saW5lQ29udGVudCA9IG1fZm9ybWF0dGluZ1N0YXRlLmlubGluZUl0
ZW1zKCk7CisgICAgZm9yIChhdXRvJiBpbmxpbmVJdGVtIDogaW5saW5lQ29udGVudCkgeworICAg
ICAgICAvLyAxLiBTaW1wbHkgYWRkIG5vbi1icmVha2FibGUgc3BhY2VzIHRvIHRoZSBjdXJyZW50
IGxpbmUuIFRoZXkgZG9uJ3Qgd3JhcC4KKyAgICAgICAgLy8gMi4gTm9ybWFsIGlubGluZSBib3hl
cyBlaXRoZXIgZ28gb24gdGhlIGN1cnJlbnQgb3Igd3JhcC9icmVhayB0byB0aGUgbmV4dCBsaW5l
LgorICAgICAgICAvLyAzLiBGbG9hdHMgYXJlIHNwZWNpYWwuIFRoZXkgY29uc3RyYWluIHRoZSBs
aW5lcyBpbnN0ZWFkIG9mIGJlaW5nIG9uIHRoZW0uCisgICAgICAgIGF1dG8gYXZhaWxhYmxlV2lk
dGggPSBsaW5lLmF2YWlsYWJsZVdpZHRoKCkgLSB1bmNvbW1pdHRlZENvbnRlbnQud2lkdGgoKTsK
KyAgICAgICAgYXV0byBjdXJyZW50TG9naWNhbFJpZ2h0ID0gbGluZS5sb2dpY2FsUmlnaHQoKSAr
IHVuY29tbWl0dGVkQ29udGVudC53aWR0aCgpOworICAgICAgICAvLyBGSVhNRTogRW5zdXJlIExp
bmVDb250ZXh0Ojp0cmltbWFibGVXaWR0aCBpbmNsdWRlcyB1bmNvbW1pdHRlZCBjb250ZW50IGlm
IG5lZWRlZC4KKyAgICAgICAgYXV0byBicmVha2luZ0NvbnRleHQgPSBsaW5lQnJlYWtlci5icmVh
a2luZ0NvbnRleHQoKmlubGluZUl0ZW0sIHsgYXZhaWxhYmxlV2lkdGgsIGN1cnJlbnRMb2dpY2Fs
UmlnaHQsIGxpbmUudHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGgoKSwgIWxpbmUuaGFzQ29udGVudCgp
IH0pOworICAgICAgICBpZiAoYnJlYWtpbmdDb250ZXh0LmlzQXRCcmVha2luZ09wcG9ydHVuaXR5
KQorICAgICAgICAgICAgY29tbWl0UGVuZGluZ0NvbnRlbnQoKTsKKworICAgICAgICBpZiAoYnJl
YWtpbmdDb250ZXh0LmJyZWFraW5nQmVoYXZpb3IgPT0gTGluZUJyZWFrZXI6OkJyZWFraW5nQmVo
YXZpb3I6OkJyZWFrKSB7CisgICAgICAgICAgICBBU1NFUlRfTk9UX0lNUExFTUVOVEVEX1lFVCgp
OworICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICAvLyAxLiBJbml0
aWFsaXplIG5ldyBsaW5lIGlmIG5lZWRlZC4KLSAgICAgICAgLy8gMi4gQXBwZW5kIGlubGluZSBy
dW4gdW5sZXNzIGl0IGlzIHNraXBwZWQuCi0gICAgICAgIC8vIDMuIENsb3NlIGN1cnJlbnQgbGlu
ZSBpZiBuZWVkZWQuCi0gICAgICAgIGlmIChpc0ZpcnN0UnVuKSB7Ci0gICAgICAgICAgICAvLyBX
aGVuIHRoZSBmaXJzdCBydW4gZG9lcyBub3QgZ2VuZXJhdGUgYW4gYWN0dWFsIGlubGluZSBydW4s
IHRoZSBuZXh0IHJ1biBjb21lcyBpbiBmaXJzdC1ydW4gYXMgd2VsbC4KLSAgICAgICAgICAgIC8v
IE5vIG5lZWQgdG8gc3BlbmQgdGltZSBvbiBjbG9zaW5nL2luaXRpYWxpemluZy4KLSAgICAgICAg
ICAgIC8vIFNraXAgbGVhZGluZyB3aGl0ZXNwYWNlLgotICAgICAgICAgICAgaWYgKCFnZW5lcmF0
ZXNJbmxpbmVSdW4gfHwgaXNUcmltbWFibGVDb250ZW50KCpydW4pKQotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotCi0gICAgICAgICAgICBpZiAobGluZS5oYXNDb250ZW50KCkpIHsKLSAgICAg
ICAgICAgICAgICAvLyBQcmV2aW91cyBydW4gZW5kZWQgdXAgYmVpbmcgYXQgdGhlIGxpbmUgZW5k
LiBBZGp1c3QgdGhlIGxpbmUgYWNjb3JkaW5nbHkuCi0gICAgICAgICAgICAgICAgaWYgKCFsaW5l
LmlzQ2xvc2VkKCkpCi0gICAgICAgICAgICAgICAgICAgIGNsb3NlTGluZShsaW5lLCBJc0xhc3RM
aW5lOjpObyk7Ci0gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZU5ld0xpbmUobGluZSk7Ci0gICAg
ICAgICAgICB9CisgICAgICAgIGlmIChicmVha2luZ0NvbnRleHQuYnJlYWtpbmdCZWhhdmlvciA9
PSBMaW5lQnJlYWtlcjo6QnJlYWtpbmdCZWhhdmlvcjo6V3JhcCkgeworICAgICAgICAgICAgY2xv
c2VMaW5lKGxpbmUsIElzTGFzdExpbmU6Ok5vKTsKKyAgICAgICAgICAgIGluaXRpYWxpemVOZXdM
aW5lKGxpbmUpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGdlbmVyYXRlc0lubGluZVJ1bikg
ewotICAgICAgICAgICAgYXV0byB3aWR0aCA9IHJ1bi0+d2lkdGg7Ci0gICAgICAgICAgICBhdXRv
IGhlaWdodCA9IHJ1bi0+Y29udGVudC5pc1RleHQoKSA/IExheW91dFVuaXQobV9mb3JtYXR0aW5n
Um9vdC5zdHlsZSgpLmNvbXB1dGVkTGluZUhlaWdodCgpKSA6IGxheW91dFN0YXRlLmRpc3BsYXlC
b3hGb3JMYXlvdXRCb3gocnVuLT5jb250ZW50LmlubGluZUl0ZW0oKS5sYXlvdXRCb3goKSkuaGVp
Z2h0KCk7IAotICAgICAgICAgICAgYXBwZW5kQ29udGVudFRvTGluZShsaW5lLCBydW4tPmNvbnRl
bnQsIHsgd2lkdGgsIGhlaWdodCB9KTsKKyAgICAgICAgaWYgKGlubGluZUl0ZW0tPmlzRmxvYXQo
KSkgeworICAgICAgICAgICAgYXV0byYgZmxvYXRCb3ggPSBpbmxpbmVJdGVtLT5sYXlvdXRCb3go
KTsKKyAgICAgICAgICAgIGNvbXB1dGVGbG9hdFBvc2l0aW9uKGZsb2F0aW5nQ29udGV4dCwgbGlu
ZSwgZmxvYXRCb3gpOworICAgICAgICAgICAgbV9mbG9hdGluZ1N0YXRlLmFwcGVuZChmbG9hdEJv
eCk7CisgICAgICAgICAgICAvLyBTaHJpbmsgYXZhaWxibGUgc3BhY2UgZm9yIGN1cnJlbnQgbGlu
ZSBhbmQgbW92ZSBleGlzdGluZyBpbmxpbmUgcnVucy4KKyAgICAgICAgICAgIGF1dG8gZmxvYXRC
b3hXaWR0aCA9IGlubGluZUl0ZW0tPndpZHRoKCk7CisgICAgICAgICAgICBmbG9hdEJveC5pc0xl
ZnRGbG9hdGluZ1Bvc2l0aW9uZWQoKSA/IGxpbmUuYWRqdXN0TG9naWNhbExlZnQoZmxvYXRCb3hX
aWR0aCkgOiBsaW5lLmFkanVzdExvZ2ljYWxSaWdodChmbG9hdEJveFdpZHRoKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChicmVha2luZ0NvbnRleHQuaXNBdEJyZWFraW5nT3Bw
b3J0dW5pdHkpCisgICAgICAgICAgICAgICAgY29tbWl0SW5saW5lSXRlbVRvTGluZShsaW5lLCAq
aW5saW5lSXRlbSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgdW5jb21taXR0
ZWRDb250ZW50LmFkZCgqaW5saW5lSXRlbSk7CiAgICAgICAgIH0KLQotICAgICAgICBpZiAoaXNM
YXN0UnVuKQorICAgIH0KKyAgICAvLyBQcm9jZXNzIHJlbWFpbmluZyB1bmNvbW1pdHRlZCBjb250
ZW50LgorICAgIGlmICghdW5jb21taXR0ZWRDb250ZW50LmlzRW1wdHkoKSkgeworICAgICAgICBp
ZiAobGluZS5hdmFpbGFibGVXaWR0aCgpIDwgdW5jb21taXR0ZWRDb250ZW50LndpZHRoKCkpIHsK
ICAgICAgICAgICAgIGNsb3NlTGluZShsaW5lLCBJc0xhc3RMaW5lOjpObyk7CisgICAgICAgICAg
ICBpbml0aWFsaXplTmV3TGluZShsaW5lKTsKKyAgICAgICAgfQorICAgICAgICBjb21taXRQZW5k
aW5nQ29udGVudCgpOwogICAgIH0KLQogICAgIGNsb3NlTGluZShsaW5lLCBJc0xhc3RMaW5lOjpZ
ZXMpOwogfQogCiB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0Ojppbml0
aWFsaXplTmV3TGluZShMaW5lJiBsaW5lKSBjb25zdAogewotICAgIGF1dG8mIGZvcm1hdHRpbmdS
b290RGlzcGxheUJveCA9IG1fZm9ybWF0dGluZ0NvbnRleHQubGF5b3V0U3RhdGUoKS5kaXNwbGF5
Qm94Rm9yTGF5b3V0Qm94KG1fZm9ybWF0dGluZ1Jvb3QpOworICAgIGF1dG8mIGZvcm1hdHRpbmdS
b290RGlzcGxheUJveCA9IGxheW91dFN0YXRlKCkuZGlzcGxheUJveEZvckxheW91dEJveChtX2Zv
cm1hdHRpbmdSb290KTsKIAogICAgIGF1dG8gbGluZUxvZ2ljYWxMZWZ0ID0gZm9ybWF0dGluZ1Jv
b3REaXNwbGF5Qm94LmNvbnRlbnRCb3hMZWZ0KCk7CiAgICAgYXV0byBsaW5lTG9naWNhbFRvcCA9
IGxpbmUuaXNGaXJzdExpbmUoKSA/IGZvcm1hdHRpbmdSb290RGlzcGxheUJveC5jb250ZW50Qm94
VG9wKCkgOiBsaW5lLmxvZ2ljYWxCb3R0b20oKTsKQEAgLTI5NCwxOTEgKzM5Miw5NCBAQCB2b2lk
IElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0Ojppbml0aWFsaXplTmV3TGluZShM
aW5lJiBsaW5lKSBjb25zdAogICAgIGxpbmUuaW5pdCh7IGxpbmVMb2dpY2FsTGVmdCwgbGluZUxv
Z2ljYWxUb3AgfSwgYXZhaWxhYmxlV2lkdGgsIG1fZm9ybWF0dGluZ1Jvb3Quc3R5bGUoKS5jb21w
dXRlZExpbmVIZWlnaHQoKSk7CiB9CiAKLXZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6Okxp
bmVMYXlvdXQ6OnNwbGl0SW5saW5lUnVuSWZOZWVkZWQoY29uc3QgSW5saW5lUnVuJiBpbmxpbmVS
dW4sIElubGluZVJ1bnMmIHNwbGl0UnVucykgY29uc3QKK3ZvaWQgSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQ6OkxpbmVMYXlvdXQ6OmNsb3NlTGluZShMaW5lJiBsaW5lLCBJc0xhc3RMaW5lIGlzTGFz
dExpbmUpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGlubGluZVJ1bi50ZXh0Q29udGV4dCgpKTsKLSAg
ICBBU1NFUlQoaW5saW5lUnVuLm92ZXJsYXBzTXVsdGlwbGVJbmxpbmVJdGVtcygpKTsKLSAgICAv
LyBJbiBjZXJ0YWluIGNhc2VzLCBhIHJ1biBjYW4gb3ZlcmxhcCBtdWx0aXBsZSBpbmxpbmUgZWxl
bWVudHMgbGlrZSB0aGlzOgotICAgIC8vIDxzcGFuPm5vcm1hbCB0ZXh0IGNvbnRlbnQ8L3NwYW4+
PHNwYW4gc3R5bGU9InBvc2l0aW9uOiByZWxhdGl2ZTsgbGVmdDogMTBweDsiPmJ1dCB0aGlzIG9u
ZSBuZWVkcyBhIGRlZGljYXRlZCBydW48L3NwYW4+PHNwYW4+ZW5kIG9mIHRleHQ8L3NwYW4+Ci0g
ICAgLy8gVGhlIGNvbnRlbnQgYWJvdmUgZ2VuZXJhdGVzIG9uZSBsb25nIHJ1biA8bm9ybWFsIHRl
eHQgY29udGVudGJ1dCB0aGlzIG9uZSBuZWVkcyBkZWRpY2F0ZWQgcnVuZW5kIG9mIHRleHQ+Ci0g
ICAgLy8gSG93ZXZlciwgc2luY2UgdGhlIG1pZGRsZSBydW4gaXMgcG9zaXRpb25lZCwgaXQgbmVl
ZHMgdG8gYmUgbW92ZWQgaW5kZXBlbmRlbnRseSBmcm9tIHRoZSByZXN0IG9mIHRoZSBjb250ZW50
LCBoZW5jZSBpdCBuZWVkcyBhIGRlZGljYXRlZCBpbmxpbmUgcnVuLgotCi0gICAgLy8gMS4gU3Rh
cnQgd2l0aCB0aGUgZmlyc3QgaW5saW5lIGl0ZW0gKGVsZW1lbnQpIGFuZCB0cmF2ZXJzIHRoZSBs
aXN0IHVudGlsCi0gICAgLy8gMi4gZWl0aGVyIGZpbmQgYW4gaW5saW5lIGl0ZW0gdGhhdCBuZWVk
cyBhIGRlZGljYXRlZCBydW4gb3Igd2UgcmVhY2ggdGhlIGVuZCBvZiB0aGUgcnVuCi0gICAgLy8g
My4gQ3JlYXRlIGRlZGljYXRlIGlubGluZSBydW5zLgotICAgIGF1dG8mIGlubGluZUNvbnRlbnQg
PSBtX2Zvcm1hdHRpbmdTdGF0ZS5pbmxpbmVDb250ZW50KCk7Ci0gICAgYXV0byBjb250ZW50U3Rh
cnQgPSBpbmxpbmVSdW4ubG9naWNhbExlZnQoKTsKLSAgICBhdXRvIHN0YXJ0UG9zaXRpb24gPSBp
bmxpbmVSdW4udGV4dENvbnRleHQoKS0+c3RhcnQoKTsKLSAgICBhdXRvIHJlbWFuaW5nTGVuZ3Ro
ID0gaW5saW5lUnVuLnRleHRDb250ZXh0KCktPmxlbmd0aCgpOwotCi0gICAgc3RydWN0IFVuY29t
bWl0dGVkIHsKLSAgICAgICAgY29uc3QgSW5saW5lSXRlbSogZmlyc3RJbmxpbmVJdGVtIHsgbnVs
bHB0ciB9OwotICAgICAgICBjb25zdCBJbmxpbmVJdGVtKiBsYXN0SW5saW5lSXRlbSB7IG51bGxw
dHIgfTsKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoIHsgMCB9OwotICAgIH07Ci0gICAgT3B0aW9u
YWw8VW5jb21taXR0ZWQ+IHVuY29tbWl0dGVkOwotCi0gICAgYXV0byBjb21taXQgPSBbJl0gewot
ICAgICAgICBpZiAoIXVuY29tbWl0dGVkKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAg
IGNvbnRlbnRTdGFydCArPSB1bmNvbW1pdHRlZC0+Zmlyc3RJbmxpbmVJdGVtLT5ub25CcmVha2Fi
bGVTdGFydCgpOwotCi0gICAgICAgIGF1dG8gcnVuV2lkdGggPSB0aGlzLT5ydW5XaWR0aChpbmxp
bmVDb250ZW50LCAqdW5jb21taXR0ZWQtPmZpcnN0SW5saW5lSXRlbSwgc3RhcnRQb3NpdGlvbiwg
dW5jb21taXR0ZWQtPmxlbmd0aCwgY29udGVudFN0YXJ0KTsKLSAgICAgICAgYXV0byBydW4gPSBJ
bmxpbmVSdW4geyB7IGlubGluZVJ1bi5sb2dpY2FsVG9wKCksIGNvbnRlbnRTdGFydCwgcnVuV2lk
dGgsIGlubGluZVJ1bi5sb2dpY2FsSGVpZ2h0KCkgfSwgKnVuY29tbWl0dGVkLT5maXJzdElubGlu
ZUl0ZW0gfTsKLSAgICAgICAgcnVuLnNldFRleHRDb250ZXh0KHsgc3RhcnRQb3NpdGlvbiwgdW5j
b21taXR0ZWQtPmxlbmd0aCB9KTsKLSAgICAgICAgc3BsaXRSdW5zLmFwcGVuZChydW4pOwotCi0g
ICAgICAgIGNvbnRlbnRTdGFydCArPSBydW5XaWR0aCArIHVuY29tbWl0dGVkLT5sYXN0SW5saW5l
SXRlbS0+bm9uQnJlYWthYmxlRW5kKCk7Ci0KLSAgICAgICAgc3RhcnRQb3NpdGlvbiA9IDA7Ci0g
ICAgICAgIHVuY29tbWl0dGVkID0geyB9OwotICAgIH07Ci0KLSAgICBmb3IgKGF1dG8gaXRlcmF0
b3IgPSBpbmxpbmVDb250ZW50LmZpbmQoY29uc3RfY2FzdDxJbmxpbmVJdGVtKj4oJmlubGluZVJ1
bi5pbmxpbmVJdGVtKCkpKTsgaXRlcmF0b3IgIT0gaW5saW5lQ29udGVudC5lbmQoKSAmJiByZW1h
bmluZ0xlbmd0aCA+IDA7ICsraXRlcmF0b3IpIHsKLSAgICAgICAgYXV0byYgaW5saW5lSXRlbSA9
ICoqaXRlcmF0b3I7CisgICAgbGluZS5jbG9zZSgpOworICAgIGlmIChsaW5lLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIC8vIFNraXAgYWxsIG5vbi1pbmZsb3cgYm94ZXMg
KGZsb2F0cywgb3V0LW9mLWZsb3cgcG9zaXRpb25lZCBlbGVtZW50cykuIFRoZXkgZG9uJ3QgcGFy
dGljaXBhdGUgaW4gdGhlIGlubGluZSBydW4gY29udGV4dC4KLSAgICAgICAgaWYgKCFpbmxpbmVJ
dGVtLmxheW91dEJveCgpLmlzSW5GbG93KCkpCisgICAgYWxpZ25SdW5zKG1fZm9ybWF0dGluZ1Jv
b3Quc3R5bGUoKS50ZXh0QWxpZ24oKSwgbGluZSwgaXNMYXN0TGluZSk7CisgICAgCisgICAgYXV0
byYgcnVucyA9IGxpbmUucnVucygpOworICAgIC8vIENyZWF0ZSBmaW5hbCBkaXNwbGF5IHJ1bnMu
CisgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgcnVucy5zaXplKCk7ICsraW5k
ZXgpIHsKKyAgICAgICAgYXV0byYgcnVuID0gcnVucy5hdChpbmRleCk7CisgICAgICAgIGF1dG8m
IGxheW91dEJveCA9IHJ1bi5pbmxpbmVJdGVtLmxheW91dEJveCgpOworICAgICAgICBhdXRvJiBk
aXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUoKS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJv
eCk7CisKKyAgICAgICAgaWYgKHJ1bi5pbmxpbmVJdGVtLmlzQ29udGFpbmVyU3RhcnQoKSB8fCBy
dW4uaW5saW5lSXRlbS5pc0JveCgpKSB7CisgICAgICAgICAgICAvLyBTZXQgaW5saW5lIGNvbnRh
aW5lcidzIGxvZ2ljYWwgdG9wbGVmdCBwb3NpdGlvbiAtdGFraW5nIHJlbGF0aXZlIHBvc2l0aW9u
aW5nIGludG8gYWNjb3VudC4KKyAgICAgICAgICAgIGF1dG8gdG9wTGVmdCA9IHJ1bi5pbmxpbmVS
dW4ubG9naWNhbFRvcExlZnQoKTsKKyAgICAgICAgICAgIGlmIChsYXlvdXRCb3guaXNJbkZsb3dQ
b3NpdGlvbmVkKCkpCisgICAgICAgICAgICAgICAgdG9wTGVmdCArPSBHZW9tZXRyeTo6aW5GbG93
UG9zaXRpb25lZFBvc2l0aW9uT2Zmc2V0KGxheW91dFN0YXRlKCksIGxheW91dEJveCk7CisgICAg
ICAgICAgICBkaXNwbGF5Qm94LnNldFRvcExlZnQodG9wTGVmdCk7CisKKyAgICAgICAgICAgIGlm
IChydW4uaW5saW5lSXRlbS5pc0JveCgpKQorICAgICAgICAgICAgICAgIG1fZm9ybWF0dGluZ1N0
YXRlLmFkZElubGluZVJ1bihzdGQ6Om1ha2VfdW5pcXVlPERpc3BsYXk6OlJ1bj4ocnVuLmlubGlu
ZVJ1bikpOwogICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KIAotICAgICAgICBhdXRv
IGN1cnJlbnRMZW5ndGggPSBbJl0gewotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWluKHJlbWFu
aW5nTGVuZ3RoLCBpbmxpbmVJdGVtLnRleHRDb250ZW50KCkubGVuZ3RoKCkgLSBzdGFydFBvc2l0
aW9uKTsKLSAgICAgICAgfTsKLQotICAgICAgICAvLyAxLiBCcmVhayBiZWZvcmUvYWZ0ZXIgLT4g
cmVxdWlyZXMgZGVkaWNhdGVkIHJ1biAtPiBjb21taXQgd2hhdCB3ZSd2ZSBnb3Qgc28gZmFyIGFu
ZCBhbHNvIGNvbW1pdCB0aGUgY3VycmVudCBpbmxpbmUgZWxlbWVudCBhcyBhIHNlcGFyYXRlIGlu
bGluZSBydW4uCi0gICAgICAgIC8vIDIuIEJyZWFrIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGlu
bGluZSBlbGVtZW50IC0+IGNvbW1pdCB3aGF0IHdlJ3ZlIGdvdCBzbyBmYXIuIEN1cnJlbnQgZWxl
bWVudCBiZWNvbWVzIHRoZSBmaXJzdCB1bmNvbW1pdHRlZC4KLSAgICAgICAgLy8gMy4gQnJlYWsg
YXQgdGhlIGVuZCBvZiB0aGUgaW5saW5lIGVsZW1lbnQgLT4gY29tbWl0IHdoYXQgd2UndmUgZ290
IHNvIGZhciBpbmNsdWRpbmcgdGhlIGN1cnJlbnQgZWxlbWVudC4KLSAgICAgICAgLy8gNC4gSW5s
aW5lIGVsZW1lbnQgZG9lcyBub3QgcmVxdWlyZSBydW4gYnJlYWtpbmcgLT4gYWRkIGN1cnJlbnQg
aW5saW5lIGVsZW1lbnQgdG8gdW5jb21taXR0ZWQuIEp1bXAgdG8gdGhlIG5leHQgZWxlbWVudC4K
LSAgICAgICAgYXV0byBkZXRhY2hpbmdSdWxlcyA9IGlubGluZUl0ZW0uZGV0YWNoaW5nUnVsZXMo
KTsKLQotICAgICAgICAvLyAjMQotICAgICAgICBpZiAoZGV0YWNoaW5nUnVsZXMuY29udGFpbnNB
bGwoeyBJbmxpbmVJdGVtOjpEZXRhY2hpbmdSdWxlOjpCcmVha0F0U3RhcnQsIElubGluZUl0ZW06
OkRldGFjaGluZ1J1bGU6OkJyZWFrQXRFbmQgfSkpIHsKLSAgICAgICAgICAgIGNvbW1pdCgpOwot
ICAgICAgICAgICAgYXV0byBjb250ZW50TGVuZ3RoID0gY3VycmVudExlbmd0aCgpOwotICAgICAg
ICAgICAgdW5jb21taXR0ZWQgPSBVbmNvbW1pdHRlZCB7ICZpbmxpbmVJdGVtLCAmaW5saW5lSXRl
bSwgY29udGVudExlbmd0aCB9OwotICAgICAgICAgICAgcmVtYW5pbmdMZW5ndGggLT0gY29udGVu
dExlbmd0aDsKLSAgICAgICAgICAgIGNvbW1pdCgpOworICAgICAgICBpZiAocnVuLmlubGluZUl0
ZW0uaXNDb250YWluZXJFbmQoKSkgeworICAgICAgICAgICAgLy8gU2V0IGlubGluZSBjb250YWlu
ZXIncyB3aWR0aCBhbmQgaGVpZ2h0LgorICAgICAgICAgICAgYXV0byBtYXJnaW5Cb3hXaWR0aCA9
IHJ1bi5pbmxpbmVSdW4ubG9naWNhbExlZnQoKSAtIGRpc3BsYXlCb3gubGVmdCgpOworICAgICAg
ICAgICAgYXV0byBjb250ZW50Qm94V2lkdGggPSBtYXJnaW5Cb3hXaWR0aCAtIChkaXNwbGF5Qm94
Lm1hcmdpblN0YXJ0KCkgKyBkaXNwbGF5Qm94LmJvcmRlckxlZnQoKSArIGRpc3BsYXlCb3gucGFk
ZGluZ0xlZnQoKS52YWx1ZU9yKDApKTsKKyAgICAgICAgICAgIC8vIEZJWE1FIGZpeCBpdCBmb3Ig
bXVsdGlsaW5lLgorICAgICAgICAgICAgZGlzcGxheUJveC5zZXRDb250ZW50Qm94V2lkdGgoY29u
dGVudEJveFdpZHRoKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBoZWlnaHQKKyAgICAgICAgICAg
IGRpc3BsYXlCb3guc2V0Q29udGVudEJveEhlaWdodChsaW5lLmxvZ2ljYWxIZWlnaHQoKSk7CiAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIC8vICMyCi0gICAgICAg
IGlmIChkZXRhY2hpbmdSdWxlcy5jb250YWlucyhJbmxpbmVJdGVtOjpEZXRhY2hpbmdSdWxlOjpC
cmVha0F0U3RhcnQpKQotICAgICAgICAgICAgY29tbWl0KCk7Ci0KLSAgICAgICAgLy8gQWRkIGN1
cnJlbnQgaW5saW5lIGl0ZW0gdG8gdW5jb21taXR0ZWQuCi0gICAgICAgIC8vICMzIGFuZCAjNAot
ICAgICAgICBhdXRvIGNvbnRlbnRMZW5ndGggPSBjdXJyZW50TGVuZ3RoKCk7Ci0gICAgICAgIGlm
ICghdW5jb21taXR0ZWQpCi0gICAgICAgICAgICB1bmNvbW1pdHRlZCA9IFVuY29tbWl0dGVkIHsg
JmlubGluZUl0ZW0sICZpbmxpbmVJdGVtLCAwIH07Ci0gICAgICAgIHVuY29tbWl0dGVkLT5sZW5n
dGggKz0gY29udGVudExlbmd0aDsKLSAgICAgICAgdW5jb21taXR0ZWQtPmxhc3RJbmxpbmVJdGVt
ID0gJmlubGluZUl0ZW07Ci0gICAgICAgIHJlbWFuaW5nTGVuZ3RoIC09IGNvbnRlbnRMZW5ndGg7
Ci0KLSAgICAgICAgLy8gIzMKLSAgICAgICAgaWYgKGRldGFjaGluZ1J1bGVzLmNvbnRhaW5zKElu
bGluZUl0ZW06OkRldGFjaGluZ1J1bGU6OkJyZWFrQXRFbmQpKQotICAgICAgICAgICAgY29tbWl0
KCk7Ci0gICAgfQotICAgIC8vIEVpdGhlciBhbGwgaW5saW5lIGVsZW1lbnRzIG5lZWRlZCBkZWRp
Y2F0ZWQgcnVucyBvciBuZWl0aGVyIG9mIHRoZW0uCi0gICAgaWYgKCFyZW1hbmluZ0xlbmd0aCB8
fCByZW1hbmluZ0xlbmd0aCA9PSBpbmxpbmVSdW4udGV4dENvbnRleHQoKS0+bGVuZ3RoKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGNvbW1pdCgpOwotfQorICAgICAgICBpZiAocnVuLmlubGlu
ZUl0ZW0uaXNIYXJkTGluZUJyZWFrKCkpCisgICAgICAgICAgICBjb250aW51ZTsKIAotdm9pZCBJ
bmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6Y3JlYXRlRmluYWxSdW5zKExpbmUm
IGxpbmUpIGNvbnN0Ci17Ci0gICAgZm9yIChhdXRvJiBpbmxpbmVSdW4gOiBsaW5lLnJ1bnMoKSkg
ewotICAgICAgICBpZiAoaW5saW5lUnVuLm92ZXJsYXBzTXVsdGlwbGVJbmxpbmVJdGVtcygpKSB7
Ci0gICAgICAgICAgICBJbmxpbmVSdW5zIHNwbGl0UnVuczsKLSAgICAgICAgICAgIHNwbGl0SW5s
aW5lUnVuSWZOZWVkZWQoaW5saW5lUnVuLCBzcGxpdFJ1bnMpOwotICAgICAgICAgICAgZm9yIChh
dXRvJiBzcGxpdFJ1biA6IHNwbGl0UnVucykKLSAgICAgICAgICAgICAgICBtX2Zvcm1hdHRpbmdT
dGF0ZS5hcHBlbmRJbmxpbmVSdW4oc3BsaXRSdW4pOwotCi0gICAgICAgICAgICBpZiAoIXNwbGl0
UnVucy5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIEFTU0VS
VChydW4uaW5saW5lUnVuLnRleHRDb250ZXh0KCkpOworICAgICAgICBhdXRvJiBpbmxpbmVUZXh0
SXRlbSA9IGRvd25jYXN0PElubGluZVRleHRJdGVtPihydW4uaW5saW5lSXRlbSk7CisgICAgICAg
IGNvbnN0IElubGluZUl0ZW0qIHByZXZpb3VzSW5saW5lSXRlbSA9ICFpbmRleCA/IG51bGxwdHIg
OiAmcnVuc1tpbmRleCAtIDFdLmlubGluZUl0ZW07CisgICAgICAgIGF1dG8gcHJldmlvdXNSdW5I
YXNDb2xsYXBzZWRXaGl0ZXNwYWNlID0gZmFsc2U7CisgICAgICAgIGlmIChpczxJbmxpbmVUZXh0
SXRlbT4ocHJldmlvdXNJbmxpbmVJdGVtKSkKKyAgICAgICAgICAgIHByZXZpb3VzUnVuSGFzQ29s
bGFwc2VkV2hpdGVzcGFjZSA9IGRvd25jYXN0PElubGluZVRleHRJdGVtPigqcHJldmlvdXNJbmxp
bmVJdGVtKS5pc0NvbGxhcHNlZCgpOworCisgICAgICAgIGF1dG8gcmVxdWlyZXNOZXdSdW4gPSAh
aW5kZXggfHwgJnJ1bi5pbmxpbmVJdGVtLmxheW91dEJveCgpICE9ICZwcmV2aW91c0lubGluZUl0
ZW0tPmxheW91dEJveCgpIHx8IHByZXZpb3VzUnVuSGFzQ29sbGFwc2VkV2hpdGVzcGFjZTsKKyAg
ICAgICAgaWYgKHJlcXVpcmVzTmV3UnVuKQorICAgICAgICAgICAgbV9mb3JtYXR0aW5nU3RhdGUu
YWRkSW5saW5lUnVuKHN0ZDo6bWFrZV91bmlxdWU8RGlzcGxheTo6UnVuPihydW4uaW5saW5lUnVu
KSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYXV0byYgbGFzdERpc3BsYXlSdW4gPSBt
X2Zvcm1hdHRpbmdTdGF0ZS5pbmxpbmVSdW5zKCkubGFzdCgpOworICAgICAgICAgICAgbGFzdERp
c3BsYXlSdW4tPmV4cGFuZEhvcml6b250YWxseShpbmxpbmVUZXh0SXRlbS53aWR0aCgpKTsKKyAg
ICAgICAgICAgIGxhc3REaXNwbGF5UnVuLT50ZXh0Q29udGV4dCgpLT5leHBhbmQocnVuLmlubGlu
ZVJ1bi50ZXh0Q29udGV4dCgpLT5sZW5ndGgoKSk7CiAgICAgICAgIH0KLQotICAgICAgICBhdXRv
IGZpbmFsUnVuID0gWyZdIHsKLSAgICAgICAgICAgIGF1dG8mIGlubGluZUl0ZW0gPSBpbmxpbmVS
dW4uaW5saW5lSXRlbSgpOwotICAgICAgICAgICAgaWYgKGlubGluZUl0ZW0uZGV0YWNoaW5nUnVs
ZXMoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGlubGluZVJ1bjsKLQotICAg
ICAgICAgICAgSW5saW5lUnVuIGFkanVzdGVkUnVuID0gaW5saW5lUnVuOwotICAgICAgICAgICAg
YXV0byB3aWR0aCA9IGlubGluZVJ1bi5sb2dpY2FsV2lkdGgoKSAtIGlubGluZUl0ZW0ubm9uQnJl
YWthYmxlU3RhcnQoKSAtIGlubGluZUl0ZW0ubm9uQnJlYWthYmxlRW5kKCk7Ci0gICAgICAgICAg
ICBhZGp1c3RlZFJ1bi5zZXRMb2dpY2FsTGVmdChpbmxpbmVSdW4ubG9naWNhbExlZnQoKSArIGlu
bGluZUl0ZW0ubm9uQnJlYWthYmxlU3RhcnQoKSk7Ci0gICAgICAgICAgICBhZGp1c3RlZFJ1bi5z
ZXRMb2dpY2FsV2lkdGgod2lkdGgpOwotICAgICAgICAgICAgcmV0dXJuIGFkanVzdGVkUnVuOwot
ICAgICAgICB9OwotCi0gICAgICAgIG1fZm9ybWF0dGluZ1N0YXRlLmFwcGVuZElubGluZVJ1bihm
aW5hbFJ1bigpKTsKICAgICB9CiB9CiAKLXZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6Okxp
bmVMYXlvdXQ6OnBvc3RQcm9jZXNzSW5saW5lUnVucyhMaW5lJiBsaW5lLCBJc0xhc3RMaW5lIGlz
TGFzdExpbmUpIGNvbnN0Ci17Ci0gICAgYWxpZ25SdW5zKG1fZm9ybWF0dGluZ1Jvb3Quc3R5bGUo
KS50ZXh0QWxpZ24oKSwgbGluZSwgaXNMYXN0TGluZSk7Ci0gICAgYXV0byBmaXJzdFJ1bkluZGV4
ID0gbV9mb3JtYXR0aW5nU3RhdGUuaW5saW5lUnVucygpLnNpemUoKTsKLSAgICBjcmVhdGVGaW5h
bFJ1bnMobGluZSk7Ci0KLSAgICBwbGFjZUluRmxvd1Bvc2l0aW9uZWRDaGlsZHJlbihmaXJzdFJ1
bkluZGV4KTsKLX0KLQotdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6
Y2xvc2VMaW5lKExpbmUmIGxpbmUsIElzTGFzdExpbmUgaXNMYXN0TGluZSkgY29uc3QKLXsKLSAg
ICBsaW5lLmNsb3NlKCk7Ci0gICAgaWYgKCFsaW5lLmhhc0NvbnRlbnQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgcG9zdFByb2Nlc3NJbmxpbmVSdW5zKGxpbmUsIGlzTGFzdExpbmUpOwotfQot
Ci12b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjphcHBlbmRDb250ZW50
VG9MaW5lKExpbmUmIGxpbmUsIGNvbnN0IElubGluZVJ1blByb3ZpZGVyOjpSdW4mIHJ1biwgY29u
c3QgTGF5b3V0U2l6ZSYgcnVuU2l6ZSkgY29uc3QKK3ZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQ6OkxpbmVMYXlvdXQ6OmNvbW1pdElubGluZUl0ZW1Ub0xpbmUoTGluZSYgbGluZSwgY29uc3Qg
SW5saW5lSXRlbSYgaW5saW5lSXRlbSkgY29uc3QKIHsKLSAgICBhdXRvIGxhc3RSdW5UeXBlID0g
bGluZS5sYXN0UnVuVHlwZSgpOwotICAgIGxpbmUuYXBwZW5kQ29udGVudChydW4sIHJ1blNpemUp
OworICAgIC8vIEZJWE1FIHRoZXNlIDIgc2hvdWxkIGJlIGF0IGNsb3NlTGluZQorICAgIGlmIChp
bmxpbmVJdGVtLmlzQ29udGFpbmVyU3RhcnQoKSB8fCBpbmxpbmVJdGVtLmlzQ29udGFpbmVyRW5k
KCkpCisgICAgICAgIHJldHVybiBsaW5lLmFwcGVuZE5vbkJyZWFrYWJsZVNwYWNlKGlubGluZUl0
ZW0pOworCisgICAgYXV0byB3aWR0aCA9IGlubGluZUl0ZW0ud2lkdGgoKTsKKyAgICBpZiAoaXM8
SW5saW5lVGV4dEl0ZW0+KGlubGluZUl0ZW0pKQorICAgICAgICBsaW5lLmFwcGVuZFRleHRDb250
ZW50KGRvd25jYXN0PElubGluZVRleHRJdGVtPihpbmxpbmVJdGVtKSwgeyB3aWR0aCwgbV9mb3Jt
YXR0aW5nUm9vdC5zdHlsZSgpLmNvbXB1dGVkTGluZUhlaWdodCgpIH0pOworICAgIGVsc2Ugewor
ICAgICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUoKS5kaXNwbGF5Qm94Rm9yTGF5
b3V0Qm94KGlubGluZUl0ZW0ubGF5b3V0Qm94KCkpOworICAgICAgICBsaW5lLmFwcGVuZE5vblRl
eHRDb250ZW50KGlubGluZUl0ZW0sIHsgd2lkdGgsIGRpc3BsYXlCb3guaGVpZ2h0KCkgfSk7Cisg
ICAgfQogCiAgICAgaWYgKG1fZm9ybWF0dGluZ1Jvb3Quc3R5bGUoKS50ZXh0QWxpZ24oKSA9PSBU
ZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5KQotICAgICAgICBjb21wdXRlRXhwYW5zaW9uT3Bwb3J0dW5p
dGllcyhsaW5lLCBydW4sIGxhc3RSdW5UeXBlLnZhbHVlT3IoSW5saW5lUnVuUHJvdmlkZXI6OlJ1
bjo6VHlwZTo6Tm9uV2hpdGVzcGFjZSkpOworICAgICAgICBjb21wdXRlRXhwYW5zaW9uT3Bwb3J0
dW5pdGllcyhsaW5lLCBpbmxpbmVJdGVtLCBsaW5lLmhhc1RyYWlsaW5nV2hpdGVzcGFjZSgpKTsK
IH0KIAogdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6Y29tcHV0ZUZs
b2F0UG9zaXRpb24oY29uc3QgRmxvYXRpbmdDb250ZXh0JiBmbG9hdGluZ0NvbnRleHQsIExpbmUm
IGxpbmUsIGNvbnN0IEJveCYgZmxvYXRCb3gpIGNvbnN0CiB7Ci0gICAgYXV0byYgbGF5b3V0U3Rh
dGUgPSBtX2Zvcm1hdHRpbmdDb250ZXh0LmxheW91dFN0YXRlKCk7Ci0gICAgQVNTRVJUKGxheW91
dFN0YXRlLmhhc0Rpc3BsYXlCb3goZmxvYXRCb3gpKTsKLSAgICBhdXRvJiBkaXNwbGF5Qm94ID0g
bGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveChmbG9hdEJveCk7CisgICAgQVNTRVJU
KGxheW91dFN0YXRlKCkuaGFzRGlzcGxheUJveChmbG9hdEJveCkpOworICAgIGF1dG8mIGRpc3Bs
YXlCb3ggPSBsYXlvdXRTdGF0ZSgpLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goZmxvYXRCb3gpOwog
CiAgICAgLy8gU2V0IHN0YXRpYyBwb3NpdGlvbiBmaXJzdC4KLSAgICBkaXNwbGF5Qm94LnNldFRv
cExlZnQoeyBsaW5lLmNvbnRlbnRMb2dpY2FsUmlnaHQoKSwgbGluZS5sb2dpY2FsVG9wKCkgfSk7
CisgICAgZGlzcGxheUJveC5zZXRUb3BMZWZ0KHsgbGluZS5sb2dpY2FsUmlnaHQoKSwgbGluZS5s
b2dpY2FsVG9wKCkgfSk7CiAgICAgLy8gRmxvYXQgaXQuCiAgICAgZGlzcGxheUJveC5zZXRUb3BM
ZWZ0KGZsb2F0aW5nQ29udGV4dC5wb3NpdGlvbkZvckZsb2F0KGZsb2F0Qm94KSk7CiB9CiAKLXZv
aWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OnBsYWNlSW5GbG93UG9zaXRp
b25lZENoaWxkcmVuKHVuc2lnbmVkIGZpc3RSdW5JbmRleCkgY29uc3QKLXsKLSAgICBhdXRvJiBs
YXlvdXRTdGF0ZSA9IG1fZm9ybWF0dGluZ0NvbnRleHQubGF5b3V0U3RhdGUoKTsKLSAgICBhdXRv
JiBpbmxpbmVSdW5zID0gbV9mb3JtYXR0aW5nU3RhdGUuaW5saW5lUnVucygpOwotICAgIGZvciAo
YXV0byBydW5JbmRleCA9IGZpc3RSdW5JbmRleDsgcnVuSW5kZXggPCBpbmxpbmVSdW5zLnNpemUo
KTsgKytydW5JbmRleCkgewotICAgICAgICBhdXRvJiBpbmxpbmVSdW4gPSBpbmxpbmVSdW5zW3J1
bkluZGV4XTsKLQotICAgICAgICBhdXRvIHBvc2l0aW9uT2Zmc2V0ID0gWyZdKGF1dG8mIGxheW91
dEJveCkgewotICAgICAgICAgICAgLy8gRklYTUU6IE5lZWQgdG8gZmlndXJlIG91dCB3aGV0aGVy
IGluLWZsb3cgb2Zmc2V0IHNob3VsZCBzdGljay4gVGhpcyBtaWdodCB2ZXJ5IHdlbGwgYmUgdGVt
cG9yYXJ5LgotICAgICAgICAgICAgT3B0aW9uYWw8TGF5b3V0U2l6ZT4gb2Zmc2V0OwotICAgICAg
ICAgICAgZm9yIChhdXRvKiBib3ggPSAmbGF5b3V0Qm94OyBib3ggIT0gJm1fZm9ybWF0dGluZ1Jv
b3Q7IGJveCA9IGJveC0+cGFyZW50KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWJveC0+aXNJ
bkZsb3dQb3NpdGlvbmVkKCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgICAgIG9mZnNldCA9IG9mZnNldC52YWx1ZU9yKExheW91dFNpemUoKSkgKyBHZW9tZXRy
eTo6aW5GbG93UG9zaXRpb25lZFBvc2l0aW9uT2Zmc2V0KGxheW91dFN0YXRlLCAqYm94KTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBvZmZzZXQ7Ci0gICAgICAgIH07Ci0KLSAg
ICAgICAgaWYgKGF1dG8gb2Zmc2V0ID0gcG9zaXRpb25PZmZzZXQoaW5saW5lUnVuLmlubGluZUl0
ZW0oKS5sYXlvdXRCb3goKSkpIHsKLSAgICAgICAgICAgIGlubGluZVJ1bi5tb3ZlVmVydGljYWxs
eShvZmZzZXQtPmhlaWdodCgpKTsKLSAgICAgICAgICAgIGlubGluZVJ1bi5tb3ZlSG9yaXpvbnRh
bGx5KG9mZnNldC0+d2lkdGgoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KIHN0YXRpYyBMYXlv
dXRVbml0IGFkanVzdGVkTGluZUxvZ2ljYWxMZWZ0KFRleHRBbGlnbk1vZGUgYWxpZ24sIExheW91
dFVuaXQgbGluZUxvZ2ljYWxMZWZ0LCBMYXlvdXRVbml0IHJlbWFpbmluZ1dpZHRoKQogewogICAg
IHN3aXRjaCAoYWxpZ24pIHsKQEAgLTUwNCw3ICs1MDUsNyBAQCBzdGF0aWMgTGF5b3V0VW5pdCBh
ZGp1c3RlZExpbmVMb2dpY2FsTGVmdChUZXh0QWxpZ25Nb2RlIGFsaWduLCBMYXlvdXRVbml0IGxp
bmVMbwogdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6anVzdGlmeVJ1
bnMoTGluZSYgbGluZSkKIHsKICAgICBhdXRvJiBpbmxpbmVSdW5zID0gbGluZS5ydW5zKCk7Ci0g
ICAgYXV0byYgbGFzdElubGluZVJ1biA9IGlubGluZVJ1bnMubGFzdCgpOworICAgIGF1dG8mIGxh
c3RJbmxpbmVSdW4gPSBpbmxpbmVSdW5zLmxhc3QoKS5pbmxpbmVSdW47CiAKICAgICAvLyBBZGp1
c3QgKGZvcmJpZCkgdHJhaWxpbmcgZXhwYW5zaW9uIGZvciB0aGUgbGFzdCB0ZXh0IHJ1biBvbiBs
aW5lLgogICAgIGF1dG8gZXhwYW5zaW9uQmVoYXZpb3IgPSBsYXN0SW5saW5lUnVuLmV4cGFuc2lv
bk9wcG9ydHVuaXR5KCkuYmVoYXZpb3I7CkBAIC01MTksMjggKzUyMCwyOSBAQCB2b2lkIElubGlu
ZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpqdXN0aWZ5UnVucyhMaW5lJiBsaW5lKQog
ICAgICAgICByZXR1cm47CiAKICAgICBhdXRvIGV4cGFuc2lvbk9wcG9ydHVuaXRpZXMgPSAwOwot
ICAgIGZvciAoYXV0byYgaW5saW5lUnVuIDogaW5saW5lUnVucykKLSAgICAgICAgZXhwYW5zaW9u
T3Bwb3J0dW5pdGllcyArPSBpbmxpbmVSdW4uZXhwYW5zaW9uT3Bwb3J0dW5pdHkoKS5jb3VudDsK
KyAgICBmb3IgKGF1dG8mIHJ1biA6IGlubGluZVJ1bnMpCisgICAgICAgIGV4cGFuc2lvbk9wcG9y
dHVuaXRpZXMgKz0gcnVuLmlubGluZVJ1bi5leHBhbnNpb25PcHBvcnR1bml0eSgpLmNvdW50Owog
CiAgICAgaWYgKCFleHBhbnNpb25PcHBvcnR1bml0aWVzKQogICAgICAgICByZXR1cm47CiAKICAg
ICBmbG9hdCBleHBhbnNpb24gPSB3aWR0aFRvRGlzdHJpYnV0ZS50b0Zsb2F0KCkgLyBleHBhbnNp
b25PcHBvcnR1bml0aWVzOwogICAgIExheW91dFVuaXQgYWNjdW11bGF0ZWRFeHBhbnNpb247Ci0g
ICAgZm9yIChhdXRvJiBpbmxpbmVSdW4gOiBpbmxpbmVSdW5zKSB7CisgICAgZm9yIChhdXRvJiBy
dW4gOiBpbmxpbmVSdW5zKSB7CisgICAgICAgIGF1dG8mIGlubGluZVJ1biA9IHJ1bi5pbmxpbmVS
dW47IAogICAgICAgICBhdXRvIGV4cGFuc2lvbkZvclJ1biA9IGlubGluZVJ1bi5leHBhbnNpb25P
cHBvcnR1bml0eSgpLmNvdW50ICogZXhwYW5zaW9uOwogCiAgICAgICAgIGlubGluZVJ1bi5leHBh
bnNpb25PcHBvcnR1bml0eSgpLmV4cGFuc2lvbiA9IGV4cGFuc2lvbkZvclJ1bjsKLSAgICAgICAg
aW5saW5lUnVuLnNldExvZ2ljYWxMZWZ0KGlubGluZVJ1bi5sb2dpY2FsTGVmdCgpICsgYWNjdW11
bGF0ZWRFeHBhbnNpb24pOwotICAgICAgICBpbmxpbmVSdW4uc2V0TG9naWNhbFdpZHRoKGlubGlu
ZVJ1bi5sb2dpY2FsV2lkdGgoKSArIGV4cGFuc2lvbkZvclJ1bik7CisgICAgICAgIGlubGluZVJ1
bi5tb3ZlSG9yaXpvbnRhbGx5KGFjY3VtdWxhdGVkRXhwYW5zaW9uKTsKKyAgICAgICAgaW5saW5l
UnVuLmV4cGFuZEhvcml6b250YWxseShleHBhbnNpb25Gb3JSdW4pOwogICAgICAgICBhY2N1bXVs
YXRlZEV4cGFuc2lvbiArPSBleHBhbnNpb25Gb3JSdW47CiAgICAgfQogfQogCi12b2lkIElubGlu
ZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0Ojpjb21wdXRlRXhwYW5zaW9uT3Bwb3J0dW5p
dGllcyhMaW5lJiBsaW5lLCBjb25zdCBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuJiBydW4sIElubGlu
ZVJ1blByb3ZpZGVyOjpSdW46OlR5cGUgbGFzdFJ1blR5cGUpIGNvbnN0Cit2b2lkIElubGluZUZv
cm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0Ojpjb21wdXRlRXhwYW5zaW9uT3Bwb3J0dW5pdGll
cyhMaW5lJiBsaW5lLCBjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtLCBib29sIHByZXZpb3Vz
UnVuSXNXaGl0ZXBhY2UpIGNvbnN0CiB7Ci0gICAgYXV0byBpc0V4cGFuc2lvbk9wcG9ydHVuaXR5
ID0gW10oYXV0byBjdXJyZW50UnVuSXNXaGl0ZXNwYWNlLCBhdXRvIGxhc3RSdW5Jc1doaXRlc3Bh
Y2UpIHsKLSAgICAgICAgcmV0dXJuIGN1cnJlbnRSdW5Jc1doaXRlc3BhY2UgfHwgKCFjdXJyZW50
UnVuSXNXaGl0ZXNwYWNlICYmICFsYXN0UnVuSXNXaGl0ZXNwYWNlKTsKKyAgICBhdXRvIGlzRXhw
YW5zaW9uT3Bwb3J0dW5pdHkgPSBbXShhdXRvIGN1cnJlbnRSdW5Jc1doaXRlc3BhY2UsIGF1dG8g
cHJldmlvdXNSdW5Jc1doaXRlcGFjZSkgeworICAgICAgICByZXR1cm4gY3VycmVudFJ1bklzV2hp
dGVzcGFjZSB8fCAoIWN1cnJlbnRSdW5Jc1doaXRlc3BhY2UgJiYgIXByZXZpb3VzUnVuSXNXaGl0
ZXBhY2UpOwogICAgIH07CiAKICAgICBhdXRvIGV4cGFuc2lvbkJlaGF2aW9yID0gW10oYXV0byBp
c0F0RXhwYW5zaW9uT3Bwb3J0dW5pdHkpIHsKQEAgLTU0OSw5ICs1NTEsMTAgQEAgdm9pZCBJbmxp
bmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6Y29tcHV0ZUV4cGFuc2lvbk9wcG9ydHVu
aXRpZXMoTGluZSYgbGkKICAgICAgICAgcmV0dXJuIGV4cGFuc2lvbkJlaGF2aW9yOwogICAgIH07
CiAKLSAgICBhdXRvIGlzQXRFeHBhbnNpb25PcHBvcnR1bml0eSA9IGlzRXhwYW5zaW9uT3Bwb3J0
dW5pdHkocnVuLmlzV2hpdGVzcGFjZSgpLCBsYXN0UnVuVHlwZSA9PSBJbmxpbmVSdW5Qcm92aWRl
cjo6UnVuOjpUeXBlOjpXaGl0ZXNwYWNlKTsKKyAgICBhdXRvIGN1cnJlbnRSdW5Jc1doaXRlc3Bh
Y2UgPSBpczxJbmxpbmVUZXh0SXRlbT4oaW5saW5lSXRlbSkgPyBkb3duY2FzdDxJbmxpbmVUZXh0
SXRlbT4oaW5saW5lSXRlbSkuaXNXaGl0ZXNwYWNlKCkgOiBmYWxzZTsKKyAgICBhdXRvIGlzQXRF
eHBhbnNpb25PcHBvcnR1bml0eSA9IGlzRXhwYW5zaW9uT3Bwb3J0dW5pdHkoY3VycmVudFJ1bklz
V2hpdGVzcGFjZSwgcHJldmlvdXNSdW5Jc1doaXRlcGFjZSk7CiAKLSAgICBhdXRvJiBjdXJyZW50
SW5saW5lUnVuID0gbGluZS5ydW5zKCkubGFzdCgpOworICAgIGF1dG8mIGN1cnJlbnRJbmxpbmVS
dW4gPSBsaW5lLnJ1bnMoKS5sYXN0KCkuaW5saW5lUnVuOwogICAgIGF1dG8mIGV4cGFuc2lvbk9w
cG9ydHVuaXR5ID0gY3VycmVudElubGluZVJ1bi5leHBhbnNpb25PcHBvcnR1bml0eSgpOwogICAg
IGlmIChpc0F0RXhwYW5zaW9uT3Bwb3J0dW5pdHkpCiAgICAgICAgICsrZXhwYW5zaW9uT3Bwb3J0
dW5pdHkuY291bnQ7CkBAIC01NjcsMzggKzU3MCwxNCBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdD
b250ZXh0OjpMaW5lTGF5b3V0OjphbGlnblJ1bnMoVGV4dEFsaWduTW9kZSB0ZXh0QWxpZ24sIExp
bgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBsaW5lTG9naWNhbExlZnQgPSBs
aW5lLmNvbnRlbnRMb2dpY2FsTGVmdCgpOworICAgIGF1dG8gbGluZUxvZ2ljYWxMZWZ0ID0gbGlu
ZS5sb2dpY2FsTGVmdCgpOwogICAgIGF1dG8gYWRqdXN0ZWRMb2dpY2FsTGVmdCA9IGFkanVzdGVk
TGluZUxvZ2ljYWxMZWZ0KGFkanV0ZWRUZXh0QWxpZ25tZW50LCBsaW5lTG9naWNhbExlZnQsIGxp
bmUuYXZhaWxhYmxlV2lkdGgoKSk7CiAgICAgaWYgKGFkanVzdGVkTG9naWNhbExlZnQgPT0gbGlu
ZUxvZ2ljYWxMZWZ0KQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvIGRlbHRhID0gYWRqdXN0
ZWRMb2dpY2FsTGVmdCAtIGxpbmVMb2dpY2FsTGVmdDsKLSAgICBmb3IgKGF1dG8mIGlubGluZVJ1
biA6IGxpbmUucnVucygpKQotICAgICAgICBpbmxpbmVSdW4uc2V0TG9naWNhbExlZnQoaW5saW5l
UnVuLmxvZ2ljYWxMZWZ0KCkgKyBkZWx0YSk7Ci19Ci0KLUxheW91dFVuaXQgSW5saW5lRm9ybWF0
dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OnJ1bldpZHRoKGNvbnN0IElubGluZUNvbnRlbnQmIGlu
bGluZUNvbnRlbnQsIGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0sIEl0ZW1Qb3NpdGlvbiBm
cm9tLCB1bnNpZ25lZCBsZW5ndGgsIExheW91dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0KSBjb25z
dCAKLXsKLSAgICBMYXlvdXRVbml0IHdpZHRoOwotICAgIGF1dG8gc3RhcnRQb3NpdGlvbiA9IGZy
b207Ci0gICAgYXV0byBpdGVyYXRvciA9IGlubGluZUNvbnRlbnQuZmluZChjb25zdF9jYXN0PElu
bGluZUl0ZW0qPigmaW5saW5lSXRlbSkpOwotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICBhdXRv
IGlubGluZUl0ZW1FbmQgPSBpbmxpbmVDb250ZW50LmVuZCgpOwotI2VuZGlmCi0gICAgd2hpbGUg
KGxlbmd0aCkgewotICAgICAgICBBU1NFUlQoaXRlcmF0b3IgIT0gaW5saW5lSXRlbUVuZCk7Ci0g
ICAgICAgIGF1dG8mIGN1cnJlbnRJbmxpbmVJdGVtID0gKippdGVyYXRvcjsKLSAgICAgICAgYXV0
byBlbmRQb3NpdGlvbiA9IHN0ZDo6bWluPEl0ZW1Qb3NpdGlvbj4oc3RhcnRQb3NpdGlvbiArIGxl
bmd0aCwgY3VycmVudElubGluZUl0ZW0udGV4dENvbnRlbnQoKS5sZW5ndGgoKSk7Ci0gICAgICAg
IGF1dG8gdGV4dFdpZHRoID0gVGV4dFV0aWw6OndpZHRoKGN1cnJlbnRJbmxpbmVJdGVtLCBzdGFy
dFBvc2l0aW9uLCBlbmRQb3NpdGlvbiwgY29udGVudExvZ2ljYWxMZWZ0KTsKLQotICAgICAgICBj
b250ZW50TG9naWNhbExlZnQgKz0gdGV4dFdpZHRoOwotICAgICAgICB3aWR0aCArPSB0ZXh0V2lk
dGg7Ci0gICAgICAgIGxlbmd0aCAtPSAoZW5kUG9zaXRpb24gLSBzdGFydFBvc2l0aW9uKTsKLQot
ICAgICAgICBzdGFydFBvc2l0aW9uID0gMDsKLSAgICAgICAgKytpdGVyYXRvcjsKLSAgICB9Ci0g
ICAgcmV0dXJuIHdpZHRoOworICAgIGZvciAoYXV0byYgcnVuIDogbGluZS5ydW5zKCkpCisgICAg
ICAgIHJ1bi5pbmxpbmVSdW4ubW92ZUhvcml6b250YWxseShkZWx0YSk7CiB9CiAKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1h
dHRpbmdTdGF0ZS5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5s
aW5lRm9ybWF0dGluZ1N0YXRlLmgKaW5kZXggNjYyYTgzYzNlYmM1MWJhN2IwZTNjNGVhY2NmNTE4
NDRlOWVkNjU5Yy4uMDhiMWE1Zjk3MTkyMzlkYTdlNWU2ZWZlYWY3YmJkMmRjYTQxNzQ4MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9y
bWF0dGluZ1N0YXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRp
bmcvSW5saW5lRm9ybWF0dGluZ1N0YXRlLmgKQEAgLTI3LDE1ICsyNywxOCBAQAogCiAjaWYgRU5B
QkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCiAKKyNpbmNsdWRlICJEaXNwbGF5UnVuLmgi
CiAjaW5jbHVkZSAiRm9ybWF0dGluZ1N0YXRlLmgiCiAjaW5jbHVkZSAiSW5saW5lSXRlbS5oIgot
I2luY2x1ZGUgIklubGluZVJ1bi5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KICNpbmNs
dWRlIDx3dGYvT3B0aW9uU2V0Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBM
YXlvdXQgewogCisvLyBUZW1wCit1c2luZyBJbmxpbmVJdGVtcyA9IExpc3RIYXNoU2V0PHN0ZDo6
dW5pcXVlX3B0cjxJbmxpbmVJdGVtPj47Cit1c2luZyBJbmxpbmVSdW5zID0gVmVjdG9yPHN0ZDo6
dW5pcXVlX3B0cjxEaXNwbGF5OjpSdW4+PjsKIC8vIElubGluZUZvcm1hdHRpbmdTdGF0ZSBob2xk
cyB0aGUgc3RhdGUgZm9yIGEgcGFydGljdWxhciBpbmxpbmUgZm9ybWF0dGluZyBjb250ZXh0IHRy
ZWUuCiBjbGFzcyBJbmxpbmVGb3JtYXR0aW5nU3RhdGUgOiBwdWJsaWMgRm9ybWF0dGluZ1N0YXRl
IHsKICAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKElubGluZUZvcm1hdHRpbmdTdGF0ZSk7CkBA
IC00MywxNSArNDYsMTYgQEAgcHVibGljOgogICAgIElubGluZUZvcm1hdHRpbmdTdGF0ZShSZWY8
RmxvYXRpbmdTdGF0ZT4mJiwgTGF5b3V0U3RhdGUmKTsKICAgICB2aXJ0dWFsIH5JbmxpbmVGb3Jt
YXR0aW5nU3RhdGUoKTsKIAotICAgIElubGluZUNvbnRlbnQmIGlubGluZUNvbnRlbnQoKSB7IHJl
dHVybiBtX2lubGluZUNvbnRlbnQ7IH0KLSAgICBJbmxpbmVJdGVtKiBsYXN0SW5saW5lSXRlbSgp
IGNvbnN0IHsgcmV0dXJuIG1faW5saW5lQ29udGVudC5pc0VtcHR5KCkgPyBudWxscHRyIDogbV9p
bmxpbmVDb250ZW50Lmxhc3QoKS5nZXQoKTsgfQorICAgIHZvaWQgYWRkSW5saW5lVGV4dEl0ZW0o
KTsKIAotICAgIC8vIFRlbXAKKyAgICBJbmxpbmVJdGVtcyYgaW5saW5lSXRlbXMoKSB7IHJldHVy
biBtX2lubGluZUl0ZW1zOyB9CiAgICAgSW5saW5lUnVucyYgaW5saW5lUnVucygpIHsgcmV0dXJu
IG1faW5saW5lUnVuczsgfQotICAgIHZvaWQgYXBwZW5kSW5saW5lUnVuKElubGluZVJ1biBpbmxp
bmVSdW4pIHsgbV9pbmxpbmVSdW5zLmFwcGVuZChpbmxpbmVSdW4pOyB9CisKKyAgICB2b2lkIGFk
ZElubGluZUl0ZW0oc3RkOjp1bmlxdWVfcHRyPElubGluZUl0ZW0+JiYgaW5saW5lSXRlbSkgeyBt
X2lubGluZUl0ZW1zLmFkZChXVEZNb3ZlKGlubGluZUl0ZW0pKTsgfQorICAgIHZvaWQgYWRkSW5s
aW5lUnVuKHN0ZDo6dW5pcXVlX3B0cjxEaXNwbGF5OjpSdW4+JiYgaW5saW5lUnVuKSB7IG1faW5s
aW5lUnVucy5hcHBlbmQoV1RGTW92ZShpbmxpbmVSdW4pKTsgfQogCiBwcml2YXRlOgotICAgIElu
bGluZUNvbnRlbnQgbV9pbmxpbmVDb250ZW50OworICAgIElubGluZUl0ZW1zIG1faW5saW5lSXRl
bXM7CiAgICAgSW5saW5lUnVucyBtX2lubGluZVJ1bnM7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVJdGVtLmggYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVJdGVtLmgKaW5kZXggNWExMGZj
MWQxZmZjYTYzNDRlMDQwMGU1OWQ2YTUwMDdhMTViYjg0ZS4uODdlZDljMzZmNmM5MjNhZThlNGY4
OTk3NDk2ZWJjYWM1YWNmZTljNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lu
bGluZWZvcm1hdHRpbmcvSW5saW5lSXRlbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9p
bmxpbmVmb3JtYXR0aW5nL0lubGluZUl0ZW0uaApAQCAtMzYsODMgKzM2LDU3IEBAIG5hbWVzcGFj
ZSBMYXlvdXQgewogCiBjbGFzcyBJbmxpbmVJdGVtIHsKIHB1YmxpYzoKLSAgICBJbmxpbmVJdGVt
KGNvbnN0IEJveCYgbGF5b3V0Qm94KTsKKyAgICBlbnVtIGNsYXNzIFR5cGUgeyBUZXh0LCBIYXJk
TGluZUJyZWFrLCBCb3gsIEZsb2F0LCBDb250YWluZXJTdGFydCwgQ29udGFpbmVyRW5kIH07Cisg
ICAgSW5saW5lSXRlbShjb25zdCBCb3gmIGxheW91dEJveCwgVHlwZSk7CiAKLSAgICBlbnVtIGNs
YXNzIFR5cGUgeyBUZXh0LCBIYXJkTGluZUJyZWFrLCBJbmxpbmVCb3gsIEZsb2F0IH07Ci0gICAg
VHlwZSB0eXBlKCkgY29uc3Q7CisgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBl
OyB9CiAgICAgY29uc3QgQm94JiBsYXlvdXRCb3goKSBjb25zdCB7IHJldHVybiBtX2xheW91dEJv
eDsgfQogICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5
b3V0Qm94LnN0eWxlKCk7IH0KLSAgICBTdHJpbmcgdGV4dENvbnRlbnQoKSBjb25zdDsKLSAgICAv
LyBEZXRhY2hpbmdSdWxlIGluZGljYXRlcyB3aGV0aGVyIHRoZSBpbmxpbmUgZWxlbWVudCBuZWVk
cyB0byBiZSB3cmFwcGVkIGluIGEgZGVkaWNldGVkIHJ1biBvciBicmVhayBmcm9tIHByZXZpb3Vz
L25leHQgcnVucy4KLSAgICAvLyA8c3Bhbj5zdGFydDwvc3Bhbj48c3BhbiBzdHlsZT0icG9zaXRp
b246IHJlbGF0aXZlOyI+IG1pZGRsZSA8L3NwYW4+PHNwYW4+ZW5kPC9zcGFuPgotICAgIC8vIGlu
cHV0IHRvIGxpbmUgYnJlYWtpbmcgLT4gPHN0YXJ0IG1pZGRsZSBlbmQ+Ci0gICAgLy8gb3V0cHV0
IG9mIGxpbmUgYnJlYWtpbmcgKGNvbnNpZGVyaW5nIGluZmluaXRlIGNvbnN0cmFpbnQpIC0+IDxz
dGFydCBtaWRkbGUgZW5kPgotICAgIC8vIGR1ZSB0byB0aGUgaW4tZmxvdyBwb3NpdGlvbmluZywg
dGhlIGZpbmFsIHJ1bnMgYXJlOiA8c3RhcnQ+PCBtaWRkbGUgPjxlbmQ+Ci0gICAgLy8gInN0YXJ0
IiAtPiBuL2EKLSAgICAvLyAiIG1pZGRsZSAiIC0+IEJyZWFrQXRTdGFydCBhbmQgQnJlYWtBdEVu
ZAotICAgIC8vICJlbmQiIC0+IG4vYQotICAgIC8vCi0gICAgLy8gPHNwYW4+cGFyZW50IDwvc3Bh
bj48c3BhbiBzdHlsZT0icGFkZGluZzogMTBweDsiPnN0YXJ0PHNwYW4+IG1pZGRsZSA8L3NwYW4+
ZW5kPC9zcGFuPjxzcGFuPiBwYXJlbnQ8L3NwYW4+Ci0gICAgLy8gaW5wdXQgdG8gbGluZSBicmVh
a2luZyAtPiA8cGFyZW50IHN0YXJ0IG1pZGRsZSBlbmQgcGFyZW50PgotICAgIC8vIG91dHB1dCBv
ZiBsaW5lIGJyZWFraW5nIChjb25zaWRlcmluZyBpbmZpbml0ZSBjb25zdHJhaW50KSAtPiA8cGFy
ZW50IHN0YXJ0IG1pZGRsZSBlbmQgcGFyZW50PgotICAgIC8vIGR1ZSB0byBwYWRkaW5nLCBmaW5h
bCBydW5zIC0+IDxwYXJlbnQ+PHN0YXJ0IG1pZGRsZSBlbmQ+PHBhcmVudD4KLSAgICAvLyAicGFy
ZW50IiAtPiBuL2EKLSAgICAvLyAic3RhcnQiIC0+IEJyZWFrQXRTdGFydAotICAgIC8vICIgbWlk
ZGxlICIgLT4gbi9hCi0gICAgLy8gImVuZCIgLT4gQnJlYWtBdEVuZAotICAgIC8vICJwYXJlbnQi
IC0+IG4vYQotICAgIGVudW0gY2xhc3MgRGV0YWNoaW5nUnVsZSB7Ci0gICAgICAgIEJyZWFrQXRT
dGFydCA9IDEgPDwgMCwKLSAgICAgICAgQnJlYWtBdEVuZCA9IDEgPDwgMQotICAgIH07Ci0gICAg
dm9pZCBhZGREZXRhY2hpbmdSdWxlKE9wdGlvblNldDxEZXRhY2hpbmdSdWxlPiBkZXRhY2hpbmdS
dWxlKSB7IG1fZGV0YWNoaW5nUnVsZXMuYWRkKGRldGFjaGluZ1J1bGUpOyB9Ci0gICAgT3B0aW9u
U2V0PERldGFjaGluZ1J1bGU+IGRldGFjaGluZ1J1bGVzKCkgY29uc3QgeyByZXR1cm4gbV9kZXRh
Y2hpbmdSdWxlczsgfQorICAgIHZvaWQgc2V0V2lkdGgoTGF5b3V0VW5pdCk7CisgICAgTGF5b3V0
VW5pdCB3aWR0aCgpIGNvbnN0OwogCi0gICAgLy8gTm9uLWJyZWFrYWJsZSBzdGFydC9lbmQgbWFy
a3MgbWFyZ2luL3BhZGRpbmcvYm9yZGVyIHNwYWNlIChldmVuIHdoZW4gaXQgZG9lcyBub3QgZGly
ZWN0bHkgY29tZSBmcm9tIHRoZSBhc3NvY2lhdGVkIGxheW91dCBib3gpCi0gICAgLy8gPHNwYW4g
c3R5bGU9InBhZGRpbmc6IDVweCI+PHNwYW4+bmVzdGVkIGNvbnRlbnQgd2l0aCBwYWRkaW5nIHBh
cmVudDwvc3Bhbjwvc3Bhbj4KLSAgICAvLyA8bmVzdGVkIGNvbnRlbnQgd2l0aCBwYWRkaW5nIHBh
cmVudD4gaW5saW5lIHJ1biBoYXMgNXB4IG5vbi1icmVha2FibGUgc3RhcnQvZW5kLgotICAgIExh
eW91dFVuaXQgbm9uQnJlYWthYmxlU3RhcnQoKSBjb25zdCB7IHJldHVybiBtX25vbkJyZWFrYWJs
ZVN0YXJ0OyB9Ci0gICAgTGF5b3V0VW5pdCBub25CcmVha2FibGVFbmQoKSBjb25zdCB7IHJldHVy
biBtX25vbkJyZWFrYWJsZUVuZDsgfQotICAgIHZvaWQgYWRkTm9uQnJlYWthYmxlU3RhcnQoTGF5
b3V0VW5pdCB2YWx1ZSkgeyBtX25vbkJyZWFrYWJsZVN0YXJ0ICs9IHZhbHVlOyB9Ci0gICAgdm9p
ZCBhZGROb25CcmVha2FibGVFbmQoTGF5b3V0VW5pdCB2YWx1ZSkgeyBtX25vbkJyZWFrYWJsZUVu
ZCArPSB2YWx1ZTsgfQorICAgIGJvb2wgaXNUZXh0KCkgY29uc3QgeyByZXR1cm4gdHlwZSgpID09
IFR5cGU6OlRleHQ7IH0KKyAgICBib29sIGlzQm94KCkgY29uc3QgeyByZXR1cm4gdHlwZSgpID09
IFR5cGU6OkJveDsgfQorICAgIGJvb2wgaXNIYXJkTGluZUJyZWFrKCkgY29uc3QgeyByZXR1cm4g
dHlwZSgpID09IFR5cGU6OkhhcmRMaW5lQnJlYWs7IH0KKyAgICBib29sIGlzRmxvYXQoKSBjb25z
dCB7IHJldHVybiB0eXBlKCkgPT0gVHlwZTo6RmxvYXQ7IH0KKyAgICBib29sIGlzTGluZUJyZWFr
KCkgY29uc3QgeyByZXR1cm4gdHlwZSgpID09IFR5cGU6OkhhcmRMaW5lQnJlYWs7IH0KKyAgICBi
b29sIGlzQ29udGFpbmVyU3RhcnQoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gVHlwZTo6Q29u
dGFpbmVyU3RhcnQ7IH0KKyAgICBib29sIGlzQ29udGFpbmVyRW5kKCkgY29uc3QgeyByZXR1cm4g
dHlwZSgpID09IFR5cGU6OkNvbnRhaW5lckVuZDsgfQogCiBwcml2YXRlOgogICAgIGNvbnN0IEJv
eCYgbV9sYXlvdXRCb3g7Ci0gICAgT3B0aW9uU2V0PERldGFjaGluZ1J1bGU+IG1fZGV0YWNoaW5n
UnVsZXM7Ci0gICAgTGF5b3V0VW5pdCBtX25vbkJyZWFrYWJsZVN0YXJ0OwotICAgIExheW91dFVu
aXQgbV9ub25CcmVha2FibGVFbmQ7CisgICAgY29uc3QgVHlwZSBtX3R5cGU7CisgICAgTGF5b3V0
VW5pdCBtX3dpZHRoOworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBib29sIG1faGFzVmFsaWRX
aWR0aCB7IGZhbHNlIH07CisjZW5kaWYKIH07CiAKLXVzaW5nIElubGluZUNvbnRlbnQgPSBMaXN0
SGFzaFNldDxzdGQ6OnVuaXF1ZV9wdHI8SW5saW5lSXRlbT4+OwotCi1pbmxpbmUgSW5saW5lSXRl
bTo6SW5saW5lSXRlbShjb25zdCBCb3gmIGxheW91dEJveCkKK2lubGluZSBJbmxpbmVJdGVtOjpJ
bmxpbmVJdGVtKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBUeXBlIHR5cGUpCiAgICAgOiBtX2xheW91
dEJveChsYXlvdXRCb3gpCisgICAgLCBtX3R5cGUodHlwZSkKIHsKIH0KIAotaW5saW5lIElubGlu
ZUl0ZW06OlR5cGUgSW5saW5lSXRlbTo6dHlwZSgpIGNvbnN0CitpbmxpbmUgdm9pZCBJbmxpbmVJ
dGVtOjpzZXRXaWR0aChMYXlvdXRVbml0IHdpZHRoKQogewotICAgIGlmIChpczxJbmxpbmVCb3g+
KG1fbGF5b3V0Qm94KSAmJiBkb3duY2FzdDxJbmxpbmVCb3g+KG1fbGF5b3V0Qm94KS5oYXNUZXh0
Q29udGVudCgpKQotICAgICAgICByZXR1cm4gVHlwZTo6VGV4dDsKLQotICAgIGlmIChpczxMaW5l
QnJlYWtCb3g+KG1fbGF5b3V0Qm94KSkKLSAgICAgICAgcmV0dXJuIFR5cGU6OkhhcmRMaW5lQnJl
YWs7Ci0KLSAgICBpZiAobV9sYXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSkKLSAgICAg
ICAgcmV0dXJuIFR5cGU6OkZsb2F0OwotCi0gICAgQVNTRVJUKG1fbGF5b3V0Qm94LmlzSW5saW5l
TGV2ZWxCb3goKSk7Ci0gICAgcmV0dXJuIFR5cGU6OklubGluZUJveDsKKyNpZiAhQVNTRVJUX0RJ
U0FCTEVECisgICAgbV9oYXNWYWxpZFdpZHRoID0gdHJ1ZTsKKyNlbmRpZgorICAgIG1fd2lkdGgg
PSB3aWR0aDsKIH0KIAotaW5saW5lIFN0cmluZyBJbmxpbmVJdGVtOjp0ZXh0Q29udGVudCgpIGNv
bnN0CitpbmxpbmUgTGF5b3V0VW5pdCBJbmxpbmVJdGVtOjp3aWR0aCgpIGNvbnN0CiB7Ci0gICAg
aWYgKHR5cGUoKSAhPSBUeXBlOjpUZXh0KQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgcmV0
dXJuIGRvd25jYXN0PElubGluZUJveD4obV9sYXlvdXRCb3gpLnRleHRDb250ZW50KCk7CisgICAg
QVNTRVJUKG1faGFzVmFsaWRXaWR0aCk7CisgICAgcmV0dXJuIG1fd2lkdGg7CiB9CiAKKyNkZWZp
bmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19JTkxJTkVfSVRFTShUb1ZhbHVlVHlwZU5hbWUsIHBy
ZWRpY2F0ZSkgXAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpMYXlvdXQ6
OlRvVmFsdWVUeXBlTmFtZSkgXAorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3Jl
OjpMYXlvdXQ6OklubGluZUl0ZW0mIGlubGluZUl0ZW0pIHsgcmV0dXJuIGlubGluZUl0ZW0ucHJl
ZGljYXRlOyB9IFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKKwogfQogfQogI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9Jbmxp
bmVMaW5lQnJlYWtlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGlu
Zy9JbmxpbmVMaW5lQnJlYWtlci5jcHAKaW5kZXggNTc2YTBiYjc5NTQzN2UwMTM3NDJhNzI4Njk0
M2FmMjQ4MTAwNGZlYy4uMzFjM2NkMmI5NzFkYjc3YWNiODRjZDZlN2I3MmE4MWRmY2EwNmY0NSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5l
TGluZUJyZWFrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0
aW5nL0lubGluZUxpbmVCcmVha2VyLmNwcApAQCAtMjgsMTczICsyOCwxMDMgQEAKIAogI2lmIEVO
QUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQogCi0jaW5jbHVkZSAiRm9udENhc2NhZGUu
aCIKICNpbmNsdWRlICJIeXBoZW5hdGlvbi5oIgotI2luY2x1ZGUgIklubGluZVJ1blByb3ZpZGVy
LmgiCi0jaW5jbHVkZSAiVGV4dFV0aWwuaCIKLSNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5l
cy5oPgorI2luY2x1ZGUgIkxheW91dFN0YXRlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5h
bWVzcGFjZSBMYXlvdXQgewogCi1XVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSW5saW5lTGlu
ZUJyZWFrZXIpOwotCi1JbmxpbmVMaW5lQnJlYWtlcjo6SW5saW5lTGluZUJyZWFrZXIoY29uc3Qg
TGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBjb25zdCBJbmxpbmVDb250ZW50JiBpbmxpbmVDb250
ZW50LCBjb25zdCBWZWN0b3I8SW5saW5lUnVuUHJvdmlkZXI6OlJ1bj4mIGlubGluZVJ1bnMpCitM
aW5lQnJlYWtlcjo6TGluZUJyZWFrZXIoY29uc3QgTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlKQog
ICAgIDogbV9sYXlvdXRTdGF0ZShsYXlvdXRTdGF0ZSkKLSAgICAsIG1faW5saW5lQ29udGVudChp
bmxpbmVDb250ZW50KQotICAgICwgbV9pbmxpbmVSdW5zKGlubGluZVJ1bnMpCi17Ci19Ci0KLU9w
dGlvbmFsPElubGluZUxpbmVCcmVha2VyOjpSdW4+IElubGluZUxpbmVCcmVha2VyOjpuZXh0UnVu
KExheW91dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0LCBMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRo
LCBib29sIGxpbmVJc0VtcHR5KQogewotICAgIGlmIChpc0F0Q29udGVudEVuZCgpKQotICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgSW5saW5lUnVuUHJvdmlkZXI6OlJ1biBjdXJy
ZW50SW5saW5lUnVuID0gbV9pbmxpbmVSdW5zW21fY3VycmVudFJ1bkluZGV4XTsKLSAgICAvLyBB
ZGp1c3QgdGhlIGN1cnJlbnQgcnVuIGlmIGl0IGlzIHNwbGl0IG1pZHdvcmQuCi0gICAgaWYgKG1f
c3BsaXRQb3NpdGlvbikgewotICAgICAgICBBU1NFUlQoY3VycmVudElubGluZVJ1bi5pc1RleHQo
KSk7Ci0gICAgICAgIG1fc3BsaXRQb3NpdGlvbiA9IFdURjo6bnVsbG9wdDsKLSAgICB9Ci0KLSAg
ICBpZiAoY3VycmVudElubGluZVJ1bi5pc0xpbmVCcmVhaygpKSB7Ci0gICAgICAgICsrbV9jdXJy
ZW50UnVuSW5kZXg7Ci0gICAgICAgIHJldHVybiBSdW4geyBSdW46OlBvc2l0aW9uOjpMaW5lRW5k
LCAwLCBjdXJyZW50SW5saW5lUnVuIH07Ci0gICAgfQotCi0gICAgYXV0byBjb250ZW50V2lkdGgg
PSBydW5XaWR0aChjdXJyZW50SW5saW5lUnVuLCBjb250ZW50TG9naWNhbExlZnQpOwotICAgIC8v
IDEuIFBsZW50eSBvZiBzcGFjZSBsZWZ0LgotICAgIGlmIChjb250ZW50V2lkdGggPD0gYXZhaWxh
YmxlV2lkdGgpIHsKLSAgICAgICAgKyttX2N1cnJlbnRSdW5JbmRleDsKLSAgICAgICAgcmV0dXJu
IFJ1biB7IGxpbmVJc0VtcHR5ID8gUnVuOjpQb3NpdGlvbjo6TGluZUJlZ2luIDogUnVuOjpQb3Np
dGlvbjo6VW5kZXRlcm1pbmVkLCBjb250ZW50V2lkdGgsIGN1cnJlbnRJbmxpbmVSdW4gfTsKLSAg
ICB9Ci0KLSAgICAvLyAyLiBObyBzcGFjZSBsZWZ0IHdoYXRzb2V2ZXIuCi0gICAgaWYgKGF2YWls
YWJsZVdpZHRoIDw9IDApIHsKLSAgICAgICAgKyttX2N1cnJlbnRSdW5JbmRleDsKLSAgICAgICAg
cmV0dXJuIFJ1biB7IFJ1bjo6UG9zaXRpb246OkxpbmVCZWdpbiwgY29udGVudFdpZHRoLCBjdXJy
ZW50SW5saW5lUnVuIH07Ci0gICAgfQotCi0gICAgLy8gMy4gU29tZSBzcGFjZSBsZWZ0LiBMZXQn
cyBmaW5kIG91dCB3aGF0IHdlIG5lZWQgdG8gZG8gd2l0aCB0aGlzIHJ1bi4KLSAgICBhdXRvIGJy
ZWFraW5nQmVoYXZpb3IgPSBsaW5lQnJlYWtpbmdCZWhhdmlvcihjdXJyZW50SW5saW5lUnVuLCBs
aW5lSXNFbXB0eSk7Ci0gICAgaWYgKGJyZWFraW5nQmVoYXZpb3IgPT0gTGluZUJyZWFraW5nQmVo
YXZpb3I6OktlZXApIHsKLSAgICAgICAgKyttX2N1cnJlbnRSdW5JbmRleDsKLSAgICAgICAgcmV0
dXJuIFJ1biB7IGxpbmVJc0VtcHR5ID8gUnVuOjpQb3NpdGlvbjo6TGluZUJlZ2luIDogUnVuOjpQ
b3NpdGlvbjo6VW5kZXRlcm1pbmVkLCBjb250ZW50V2lkdGgsIGN1cnJlbnRJbmxpbmVSdW4gfTsK
LSAgICB9Ci0KLSAgICBpZiAoYnJlYWtpbmdCZWhhdmlvciA9PSBMaW5lQnJlYWtpbmdCZWhhdmlv
cjo6V3JhcFRvTmV4dExpbmUpIHsKLSAgICAgICAgKyttX2N1cnJlbnRSdW5JbmRleDsKLSAgICAg
ICAgcmV0dXJuIFJ1biB7IFJ1bjo6UG9zaXRpb246OkxpbmVCZWdpbiwgY29udGVudFdpZHRoLCBj
dXJyZW50SW5saW5lUnVuIH07Ci0gICAgfQogCi0gICAgQVNTRVJUKGJyZWFraW5nQmVoYXZpb3Ig
PT0gTGluZUJyZWFraW5nQmVoYXZpb3I6OkJyZWFrKTsKLSAgICAvLyBTcGxpdCBjb250ZW50Lgot
ICAgIHJldHVybiBzcGxpdFJ1bihjdXJyZW50SW5saW5lUnVuLCBjb250ZW50TG9naWNhbExlZnQs
IGF2YWlsYWJsZVdpZHRoLCBsaW5lSXNFbXB0eSk7CiB9CiAKLWJvb2wgSW5saW5lTGluZUJyZWFr
ZXI6OmlzQXRDb250ZW50RW5kKCkgY29uc3QKK0xpbmVCcmVha2VyOjpCcmVha2luZ0NvbnRleHQg
TGluZUJyZWFrZXI6OmJyZWFraW5nQ29udGV4dChJbmxpbmVJdGVtJiBpbmxpbmVJdGVtLCBMaW5l
Q29udGV4dCBsaW5lQ29udGV4dCkKIHsKLSAgICByZXR1cm4gbV9jdXJyZW50UnVuSW5kZXggPT0g
bV9pbmxpbmVSdW5zLnNpemUoKTsKKyAgICBpbmxpbmVJdGVtLnNldFdpZHRoKHJ1bldpZHRoKGlu
bGluZUl0ZW0sIGxpbmVDb250ZXh0LmxvZ2ljYWxMZWZ0KSk7CisgICAgLy8gRmlyc3QgY29udGVu
dCBhbHdheXMgc3RheXMgb24gbGluZS4KKyAgICBpZiAobGluZUNvbnRleHQuaXNFbXB0eSB8fCBp
bmxpbmVJdGVtLndpZHRoKCkgPD0gbGluZUNvbnRleHQuYXZhaWxhYmxlV2lkdGgpCisgICAgICAg
IHJldHVybiB7IEJyZWFraW5nQmVoYXZpb3I6OktlZXAsIGlzQXRCcmVha2luZ09wcG9ydHVuaXR5
KGlubGluZUl0ZW0pIH07CisKKyAgICBpZiAoaXM8SW5saW5lVGV4dEl0ZW0+KGlubGluZUl0ZW0p
KQorICAgICAgICByZXR1cm4geyB3b3JkQnJlYWtpbmdCZWhhdmlvcihkb3duY2FzdDxJbmxpbmVU
ZXh0SXRlbT4oaW5saW5lSXRlbSksIGxpbmVDb250ZXh0LmlzRW1wdHkpLCBpc0F0QnJlYWtpbmdP
cHBvcnR1bml0eShpbmxpbmVJdGVtKSB9OworCisgICAgLy8gV3JhcCBub24tdGV4dCBib3hlcyB0
byB0aGUgbmV4dCBsaW5lIHVubGVzcyB3ZSBjYW4gdHJpbSB0cmFpbGluZyB3aGl0ZXNwYWNlLgor
ICAgIGF1dG8gYXZhaWxhYmxlV2lkdGggPSBsaW5lQ29udGV4dC5hdmFpbGFibGVXaWR0aCArIGxp
bmVDb250ZXh0LnRyaW1tYWJsZVdpZHRoOworICAgIGlmIChpbmxpbmVJdGVtLndpZHRoKCkgPD0g
YXZhaWxhYmxlV2lkdGgpCisgICAgICAgIHJldHVybiB7IEJyZWFraW5nQmVoYXZpb3I6OktlZXAs
IGlzQXRCcmVha2luZ09wcG9ydHVuaXR5KGlubGluZUl0ZW0pIH07CisgICAgcmV0dXJuIHsgQnJl
YWtpbmdCZWhhdmlvcjo6V3JhcCwgaXNBdEJyZWFraW5nT3Bwb3J0dW5pdHkoaW5saW5lSXRlbSkg
fTsKIH0KIAotSW5saW5lTGluZUJyZWFrZXI6OkxpbmVCcmVha2luZ0JlaGF2aW9yIElubGluZUxp
bmVCcmVha2VyOjpsaW5lQnJlYWtpbmdCZWhhdmlvcihjb25zdCBJbmxpbmVSdW5Qcm92aWRlcjo6
UnVuJiBpbmxpbmVSdW4sIGJvb2wgbGluZUlzRW1wdHkpCitMaW5lQnJlYWtlcjo6QnJlYWtpbmdC
ZWhhdmlvciBMaW5lQnJlYWtlcjo6d29yZEJyZWFraW5nQmVoYXZpb3IoY29uc3QgSW5saW5lVGV4
dEl0ZW0mIGlubGluZUl0ZW0sIGJvb2wgbGluZUlzRW1wdHkpIGNvbnN0CiB7Ci0gICAgLy8gTGlu
ZSBicmVha2luZyBiZWhhdmlvdXI6CisgICAgLy8gV29yZCBicmVha2luZyBiZWhhdmlvdXI6CiAg
ICAgLy8gMS4gV2hpdGVzYXBjZSBjb2xsYXBzZSBvbiAtPiBwdXNoIHdoaXRlc3BhY2UgdG8gbmV4
dCBsaW5lLgogICAgIC8vIDIuIFdoaXRlc3BhY2UgY29sbGFwc2Ugb2ZmIC0+IHdoaXRlc3BhY2Ug
aXMgc3BsaXQgd2hlcmUgcG9zc2libGUuCiAgICAgLy8gMy4gTm9uLXdoaXRlc3BhY2UgLT4gZmly
c3QgcnVuIG9uIHRoZSBsaW5lIC0+IGVpdGhlciBzcGxpdCBvciBrZXB0IG9uIHRoZSBsaW5lLiAo
ZGVwZW5kcyBvbiBvdmVyZmxvdy13cmFwKQogICAgIC8vIDQuIE5vbi13aGl0ZXNwYWNlIC0+IGFs
cmVhZHkgY29udGVudCBvbiB0aGUgbGluZSAtPiBlaXRoZXIgZ2V0cyBzcGxpdCAod29yZC1icmVh
azogYnJlYWstYWxsKSBvciBnZXRzIHB1c2hlZCB0byB0aGUgbmV4dCBsaW5lLgogICAgIC8vIChI
eXBoZW5hdGUgd2hlbiBwb3NzaWJsZSkKICAgICAvLyA1LiBOb24tdGV4dCB0eXBlIC0+IG5leHQg
bGluZQotICAgIGF1dG8mIHN0eWxlID0gaW5saW5lUnVuLnN0eWxlKCk7CisgICAgYXV0byYgc3R5
bGUgPSBpbmxpbmVJdGVtLnN0eWxlKCk7CiAKLSAgICBpZiAoaW5saW5lUnVuLmlzV2hpdGVzcGFj
ZSgpKQotICAgICAgICByZXR1cm4gc3R5bGUuY29sbGFwc2VXaGl0ZVNwYWNlKCkgPyBMaW5lQnJl
YWtpbmdCZWhhdmlvcjo6V3JhcFRvTmV4dExpbmUgOiBMaW5lQnJlYWtpbmdCZWhhdmlvcjo6QnJl
YWs7CisgICAgaWYgKGlubGluZUl0ZW0uaXNXaGl0ZXNwYWNlKCkpCisgICAgICAgIHJldHVybiBz
dHlsZS5jb2xsYXBzZVdoaXRlU3BhY2UoKSA/IEJyZWFraW5nQmVoYXZpb3I6OldyYXAgOiBCcmVh
a2luZ0JlaGF2aW9yOjpCcmVhazsKIAotICAgIGlmIChpbmxpbmVSdW4uaXNOb25XaGl0ZXNwYWNl
KCkpIHsKLSAgICAgICAgYXV0byBzaG91bGRIeXBlbmF0ZSA9ICFtX2h5cGhlbmF0aW9uSXNEaXNh
YmxlZCAmJiBzdHlsZS5oeXBoZW5zKCkgPT0gSHlwaGVuczo6QXV0byAmJiBjYW5IeXBoZW5hdGUo
c3R5bGUubG9jYWxlKCkpOwotICAgICAgICBpZiAoc2hvdWxkSHlwZW5hdGUpCi0gICAgICAgICAg
ICByZXR1cm4gTGluZUJyZWFraW5nQmVoYXZpb3I6OkJyZWFrOworICAgIGF1dG8gc2hvdWxkSHlw
ZW5hdGUgPSAhbV9oeXBoZW5hdGlvbklzRGlzYWJsZWQgJiYgc3R5bGUuaHlwaGVucygpID09IEh5
cGhlbnM6OkF1dG8gJiYgY2FuSHlwaGVuYXRlKHN0eWxlLmxvY2FsZSgpKTsKKyAgICBpZiAoc2hv
dWxkSHlwZW5hdGUpCisgICAgICAgIHJldHVybiBCcmVha2luZ0JlaGF2aW9yOjpCcmVhazsKIAot
ICAgICAgICBpZiAoc3R5bGUuYXV0b1dyYXAoKSkgewotICAgICAgICAgICAgLy8gQnJlYWsgYW55
IHdvcmQKLSAgICAgICAgICAgIGlmIChzdHlsZS53b3JkQnJlYWsoKSA9PSBXb3JkQnJlYWs6OkJy
ZWFrQWxsKQotICAgICAgICAgICAgICAgIHJldHVybiBMaW5lQnJlYWtpbmdCZWhhdmlvcjo6QnJl
YWs7CisgICAgaWYgKHN0eWxlLmF1dG9XcmFwKCkpIHsKKyAgICAgICAgLy8gQnJlYWsgYW55IHdv
cmQKKyAgICAgICAgaWYgKHN0eWxlLndvcmRCcmVhaygpID09IFdvcmRCcmVhazo6QnJlYWtBbGwp
CisgICAgICAgICAgICByZXR1cm4gQnJlYWtpbmdCZWhhdmlvcjo6QnJlYWs7CiAKLSAgICAgICAg
ICAgIC8vIEJyZWFrIGZpcnN0IHJ1biBvbiBsaW5lLgotICAgICAgICAgICAgaWYgKGxpbmVJc0Vt
cHR5ICYmIHN0eWxlLmJyZWFrV29yZHMoKSAmJiBzdHlsZS5wcmVzZXJ2ZU5ld2xpbmUoKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gTGluZUJyZWFraW5nQmVoYXZpb3I6OkJyZWFrOwotICAgICAg
ICB9Ci0KLSAgICAgICAgLy8gTm9uLWJyZWFrYWJsZSBub24td2hpdGVzcGFjZSBydW4uCi0gICAg
ICAgIHJldHVybiBsaW5lSXNFbXB0eSA/IExpbmVCcmVha2luZ0JlaGF2aW9yOjpLZWVwIDogTGlu
ZUJyZWFraW5nQmVoYXZpb3I6OldyYXBUb05leHRMaW5lOworICAgICAgICAvLyBCcmVhayBmaXJz
dCBydW4gb24gbGluZS4KKyAgICAgICAgaWYgKGxpbmVJc0VtcHR5ICYmIHN0eWxlLmJyZWFrV29y
ZHMoKSAmJiBzdHlsZS5wcmVzZXJ2ZU5ld2xpbmUoKSkKKyAgICAgICAgICAgIHJldHVybiBCcmVh
a2luZ0JlaGF2aW9yOjpCcmVhazsKICAgICB9CiAKLSAgICBBU1NFUlQoaW5saW5lUnVuLmlzQm94
KCkgfHwgaW5saW5lUnVuLmlzRmxvYXQoKSk7Ci0gICAgLy8gTm9uLXRleHQgaW5saW5lIHJ1bnMu
Ci0gICAgcmV0dXJuIExpbmVCcmVha2luZ0JlaGF2aW9yOjpXcmFwVG9OZXh0TGluZTsKKyAgICAv
LyBOb24tYnJlYWthYmxlIG5vbi13aGl0ZXNwYWNlIHJ1bi4KKyAgICByZXR1cm4gbGluZUlzRW1w
dHkgPyBCcmVha2luZ0JlaGF2aW9yOjpLZWVwIDogQnJlYWtpbmdCZWhhdmlvcjo6V3JhcDsKIH0K
IAotTGF5b3V0VW5pdCBJbmxpbmVMaW5lQnJlYWtlcjo6cnVuV2lkdGgoY29uc3QgSW5saW5lUnVu
UHJvdmlkZXI6OlJ1biYgaW5saW5lUnVuLCBMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsTGVmdCkg
Y29uc3QKK0xheW91dFVuaXQgTGluZUJyZWFrZXI6OnJ1bldpZHRoKGNvbnN0IElubGluZUl0ZW0m
IGlubGluZUl0ZW0sIExheW91dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0KSBjb25zdAogewotICAg
IEFTU0VSVCghaW5saW5lUnVuLmlzTGluZUJyZWFrKCkpOworICAgIGlmIChpczxJbmxpbmVUZXh0
SXRlbT4oaW5saW5lSXRlbSkpCisgICAgICAgIHJldHVybiB0ZXh0V2lkdGgoZG93bmNhc3Q8SW5s
aW5lVGV4dEl0ZW0+KGlubGluZUl0ZW0pLCBjb250ZW50TG9naWNhbExlZnQpOwogCi0gICAgaWYg
KGlubGluZVJ1bi5pc1RleHQoKSkKLSAgICAgICAgcmV0dXJuIHRleHRXaWR0aChpbmxpbmVSdW4s
IGNvbnRlbnRMb2dpY2FsTGVmdCk7CisgICAgaWYgKGlubGluZUl0ZW0uaXNMaW5lQnJlYWsoKSkK
KyAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBBU1NFUlQoaW5saW5lUnVuLmlzQm94KCkgfHwgaW5s
aW5lUnVuLmlzRmxvYXQoKSk7Ci0gICAgYXV0byYgaW5saW5lSXRlbSA9IGlubGluZVJ1bi5pbmxp
bmVJdGVtKCk7CiAgICAgYXV0byYgbGF5b3V0Qm94ID0gaW5saW5lSXRlbS5sYXlvdXRCb3goKTsK
ICAgICBBU1NFUlQobV9sYXlvdXRTdGF0ZS5oYXNEaXNwbGF5Qm94KGxheW91dEJveCkpOwogICAg
IGF1dG8mIGRpc3BsYXlCb3ggPSBtX2xheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3go
bGF5b3V0Qm94KTsKLSAgICByZXR1cm4gaW5saW5lSXRlbS5ub25CcmVha2FibGVTdGFydCgpICsg
ZGlzcGxheUJveC53aWR0aCgpICsgaW5saW5lSXRlbS5ub25CcmVha2FibGVFbmQoKTsKLX0KIAot
TGF5b3V0VW5pdCBJbmxpbmVMaW5lQnJlYWtlcjo6dGV4dFdpZHRoKGNvbnN0IElubGluZVJ1blBy
b3ZpZGVyOjpSdW4mIGlubGluZVJ1biwgTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbExlZnQpIGNv
bnN0Ci17Ci0gICAgLy8gRklYTUU6IEZpbmQgYSB3YXkgdG8gbWVyZ2UgdGhpcyBhbmQgSW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpydW5XaWR0aC4KLSAgICBhdXRvJiBpbmxpbmVJ
dGVtID0gaW5saW5lUnVuLmlubGluZUl0ZW0oKTsKLSAgICBhdXRvIHRleHRDb250ZXh0ID0gaW5s
aW5lUnVuLnRleHRDb250ZXh0KCk7Ci0gICAgYXV0byBzdGFydFBvc2l0aW9uID0gdGV4dENvbnRl
eHQtPnN0YXJ0KCk7Ci0gICAgYXV0byBsZW5ndGggPSB0ZXh0Q29udGV4dC0+aXNDb2xsYXBzZWQo
KSA/IDEgOiB0ZXh0Q29udGV4dC0+bGVuZ3RoKCk7Ci0KLSAgICAvLyBGSVhNRTogSXQgZG9lcyBu
b3QgZG8gcHJvcGVyIGtlcm5pbmcvbGlnYXR1cmUgaGFuZGxpbmcuCi0gICAgTGF5b3V0VW5pdCB3
aWR0aDsKLSAgICBhdXRvIGl0ZXJhdG9yID0gbV9pbmxpbmVDb250ZW50LmZpbmQoY29uc3RfY2Fz
dDxJbmxpbmVJdGVtKj4oJmlubGluZUl0ZW0pKTsKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAg
YXV0byBpbmxpbmVJdGVtRW5kID0gbV9pbmxpbmVDb250ZW50LmVuZCgpOwotI2VuZGlmCi0gICAg
d2hpbGUgKGxlbmd0aCkgewotICAgICAgICBBU1NFUlQoaXRlcmF0b3IgIT0gaW5saW5lSXRlbUVu
ZCk7Ci0gICAgICAgIGF1dG8mIGN1cnJlbnRJbmxpbmVJdGVtID0gKippdGVyYXRvcjsKLSAgICAg
ICAgYXV0byBpbmxpbmVJdGVtTGVuZ3RoID0gY3VycmVudElubGluZUl0ZW0udGV4dENvbnRlbnQo
KS5sZW5ndGgoKTsKLSAgICAgICAgYXV0byBlbmRQb3NpdGlvbiA9IHN0ZDo6bWluPEl0ZW1Qb3Np
dGlvbj4oc3RhcnRQb3NpdGlvbiArIGxlbmd0aCwgaW5saW5lSXRlbUxlbmd0aCk7Ci0gICAgICAg
IGF1dG8gdGV4dFdpZHRoID0gVGV4dFV0aWw6OndpZHRoKGN1cnJlbnRJbmxpbmVJdGVtLCBzdGFy
dFBvc2l0aW9uLCBlbmRQb3NpdGlvbiwgY29udGVudExvZ2ljYWxMZWZ0KTsKLQotICAgICAgICBh
dXRvIG5vbkJyZWFrYWJsZVN0YXJ0ID0gIXN0YXJ0UG9zaXRpb24gPyBjdXJyZW50SW5saW5lSXRl
bS5ub25CcmVha2FibGVTdGFydCgpIDogMF9sdTsKLSAgICAgICAgYXV0byBub25CcmVha2FibGVF
bmQgPSAgZW5kUG9zaXRpb24gPT0gaW5saW5lSXRlbUxlbmd0aCA/IGN1cnJlbnRJbmxpbmVJdGVt
Lm5vbkJyZWFrYWJsZUVuZCgpIDogMF9sdTsKLSAgICAgICAgYXV0byBjb250ZW50V2lkdGggPSBu
b25CcmVha2FibGVTdGFydCArIHRleHRXaWR0aCArIG5vbkJyZWFrYWJsZUVuZDsKLSAgICAgICAg
Y29udGVudExvZ2ljYWxMZWZ0ICs9IGNvbnRlbnRXaWR0aDsKLSAgICAgICAgd2lkdGggKz0gY29u
dGVudFdpZHRoOwotICAgICAgICBsZW5ndGggLT0gKGVuZFBvc2l0aW9uIC0gc3RhcnRQb3NpdGlv
bik7Ci0KLSAgICAgICAgc3RhcnRQb3NpdGlvbiA9IDA7Ci0gICAgICAgICsraXRlcmF0b3I7Ci0g
ICAgfQotICAgIHJldHVybiB3aWR0aDsKKyAgICBpZiAoaW5saW5lSXRlbS5pc0NvbnRhaW5lclN0
YXJ0KCkpCisgICAgICAgIHJldHVybiBkaXNwbGF5Qm94Lm1hcmdpblN0YXJ0KCkgKyBkaXNwbGF5
Qm94LmJvcmRlckxlZnQoKSArIGRpc3BsYXlCb3gucGFkZGluZ0xlZnQoKS52YWx1ZU9yKDApOwor
CisgICAgaWYgKGlubGluZUl0ZW0uaXNDb250YWluZXJFbmQoKSkKKyAgICAgICAgcmV0dXJuIGRp
c3BsYXlCb3gubWFyZ2luRW5kKCkgKyBkaXNwbGF5Qm94LmJvcmRlclJpZ2h0KCkgKyBkaXNwbGF5
Qm94LnBhZGRpbmdSaWdodCgpLnZhbHVlT3IoMCk7CisKKyAgICBpZiAoaW5saW5lSXRlbS5pc0Zs
b2F0KCkpCisgICAgICAgIHJldHVybiBkaXNwbGF5Qm94Lm1hcmdpbkJveCgpLndpZHRoKCk7CisK
KyAgICByZXR1cm4gZGlzcGxheUJveC53aWR0aCgpOwogfQogCi1JbmxpbmVMaW5lQnJlYWtlcjo6
UnVuIElubGluZUxpbmVCcmVha2VyOjpzcGxpdFJ1bihjb25zdCBJbmxpbmVSdW5Qcm92aWRlcjo6
UnVuJiBpbmxpbmVSdW4sIExheW91dFVuaXQsIExheW91dFVuaXQsIGJvb2wpCitib29sIExpbmVC
cmVha2VyOjppc0F0QnJlYWtpbmdPcHBvcnR1bml0eShjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJ
dGVtKQogewotICAgIHJldHVybiB7IFJ1bjo6UG9zaXRpb246OlVuZGV0ZXJtaW5lZCwgeyB9LCBp
bmxpbmVSdW4gfTsKKyAgICBpZiAoaXM8SW5saW5lVGV4dEl0ZW0+KGlubGluZUl0ZW0pKQorICAg
ICAgICByZXR1cm4gZG93bmNhc3Q8SW5saW5lVGV4dEl0ZW0+KGlubGluZUl0ZW0pLmlzV2hpdGVz
cGFjZSgpOworICAgIHJldHVybiAhaW5saW5lSXRlbS5pc0Zsb2F0KCkgJiYgIWlubGluZUl0ZW0u
aXNDb250YWluZXJTdGFydCgpICYmICFpbmxpbmVJdGVtLmlzQ29udGFpbmVyRW5kKCk7CiB9CiAK
LU9wdGlvbmFsPEl0ZW1Qb3NpdGlvbj4gSW5saW5lTGluZUJyZWFrZXI6OmFkanVzdFNwbGl0UG9z
aXRpb25XaXRoSHlwaGVuYXRpb24oY29uc3QgSW5saW5lUnVuUHJvdmlkZXI6OlJ1biYsIEl0ZW1Q
b3NpdGlvbiwgTGF5b3V0VW5pdCwgTGF5b3V0VW5pdCwgYm9vbCkgY29uc3QKK0xheW91dFVuaXQg
TGluZUJyZWFrZXI6OnRleHRXaWR0aChjb25zdCBJbmxpbmVUZXh0SXRlbSYgaW5saW5lVGV4dEl0
ZW0sIExheW91dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0KSBjb25zdAogewotICAgIHJldHVybiB7
IH07CisgICAgYXV0byBlbmQgPSBpbmxpbmVUZXh0SXRlbS5pc0NvbGxhcHNlZCgpID8gaW5saW5l
VGV4dEl0ZW0uc3RhcnQoKSArIDEgOiBpbmxpbmVUZXh0SXRlbS5lbmQoKTsKKyAgICByZXR1cm4g
VGV4dFV0aWw6OndpZHRoKGRvd25jYXN0PElubGluZUJveD4oaW5saW5lVGV4dEl0ZW0ubGF5b3V0
Qm94KCkpLCBpbmxpbmVUZXh0SXRlbS5zdGFydCgpLCBlbmQsIGNvbnRlbnRMb2dpY2FsTGVmdCk7
CiB9Ci0KIH0KIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lu
bGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJyZWFrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCcmVha2VyLmgKaW5kZXggMzg3YjBmY2YzNWY2
NTY4MTUwYWY1YjAzNmNhMGFlYzhiYzFiNzk4OS4uMDY1MzMwMjYzZGQ3YTRjOTZiMmQ5NDNmNzhj
NDEzMmJjODRjNjQzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZv
cm1hdHRpbmcvSW5saW5lTGluZUJyZWFrZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
aW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnJlYWtlci5oCkBAIC0yNyw0MSArMjcsMzcgQEAK
IAogI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQogCi0jaW5jbHVkZSAiSW5s
aW5lUnVuUHJvdmlkZXIuaCIKLSNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+Ci0KIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBMYXlvdXQgewogCi1jbGFzcyBJbmxpbmVMaW5lQnJlYWtl
ciB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChJbmxpbmVMaW5lQnJlYWtlcik7CitjbGFz
cyBJbmxpbmVUZXh0SXRlbTsKKworY2xhc3MgTGluZUJyZWFrZXIgewogcHVibGljOgotICAgIElu
bGluZUxpbmVCcmVha2VyKGNvbnN0IExheW91dFN0YXRlJiwgY29uc3QgSW5saW5lQ29udGVudCYs
IGNvbnN0IFZlY3RvcjxJbmxpbmVSdW5Qcm92aWRlcjo6UnVuPiYpOworICAgIExpbmVCcmVha2Vy
KGNvbnN0IExheW91dFN0YXRlJik7CiAKLSAgICBzdHJ1Y3QgUnVuIHsKLSAgICAgICAgZW51bSBj
bGFzcyBQb3NpdGlvbiB7IFVuZGV0ZXJtaW5lZCwgTGluZUJlZ2luLCBMaW5lRW5kIH07Ci0gICAg
ICAgIFBvc2l0aW9uIHBvc2l0aW9uOwotICAgICAgICBMYXlvdXRVbml0IHdpZHRoOwotICAgICAg
ICBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuIGNvbnRlbnQ7CisgICAgZW51bSBjbGFzcyBCcmVha2lu
Z0JlaGF2aW9yIHsgS2VlcCwgQnJlYWssIFdyYXAgfTsKKyAgICBzdHJ1Y3QgQnJlYWtpbmdDb250
ZXh0IHsKKyAgICAgICAgQnJlYWtpbmdCZWhhdmlvciBicmVha2luZ0JlaGF2aW9yOworICAgICAg
ICBib29sIGlzQXRCcmVha2luZ09wcG9ydHVuaXR5IHsgZmFsc2UgfTsKKyAgICB9OworICAgIHN0
cnVjdCBMaW5lQ29udGV4dCB7CisgICAgICAgIExheW91dFVuaXQgYXZhaWxhYmxlV2lkdGg7Cisg
ICAgICAgIExheW91dFVuaXQgbG9naWNhbExlZnQ7CisgICAgICAgIExheW91dFVuaXQgdHJpbW1h
YmxlV2lkdGg7CisgICAgICAgIGJvb2wgaXNFbXB0eSB7IGZhbHNlIH07CiAgICAgfTsKLSAgICBP
cHRpb25hbDxSdW4+IG5leHRSdW4oTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbExlZnQsIExheW91
dFVuaXQgYXZhaWxhYmxlV2lkdGgsIGJvb2wgbGluZUlzRW1wdHkpOworICAgIEJyZWFraW5nQ29u
dGV4dCBicmVha2luZ0NvbnRleHQoSW5saW5lSXRlbSYsIGNvbnN0IExpbmVDb250ZXh0KTsKIAog
cHJpdmF0ZToKLSAgICBlbnVtIGNsYXNzIExpbmVCcmVha2luZ0JlaGF2aW9yIHsgS2VlcCwgQnJl
YWssIFdyYXBUb05leHRMaW5lIH07Ci0gICAgTGluZUJyZWFraW5nQmVoYXZpb3IgbGluZUJyZWFr
aW5nQmVoYXZpb3IoY29uc3QgSW5saW5lUnVuUHJvdmlkZXI6OlJ1biYsIGJvb2wgbGluZUlzRW1w
dHkpOwotICAgIGJvb2wgaXNBdENvbnRlbnRFbmQoKSBjb25zdDsKLSAgICBSdW4gc3BsaXRSdW4o
Y29uc3QgSW5saW5lUnVuUHJvdmlkZXI6OlJ1biYsIExheW91dFVuaXQgY29udGVudExvZ2ljYWxM
ZWZ0LCBMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoLCBib29sIGxpbmVJc0VtcHR5KTsKLSAgICBM
YXlvdXRVbml0IHJ1bldpZHRoKGNvbnN0IElubGluZVJ1blByb3ZpZGVyOjpSdW4mLCBMYXlvdXRV
bml0IGNvbnRlbnRMb2dpY2FsTGVmdCkgY29uc3Q7Ci0gICAgTGF5b3V0VW5pdCB0ZXh0V2lkdGgo
Y29uc3QgSW5saW5lUnVuUHJvdmlkZXI6OlJ1biYsIExheW91dFVuaXQgY29udGVudExvZ2ljYWxM
ZWZ0KSBjb25zdDsKLSAgICBPcHRpb25hbDxJdGVtUG9zaXRpb24+IGFkanVzdFNwbGl0UG9zaXRp
b25XaXRoSHlwaGVuYXRpb24oY29uc3QgSW5saW5lUnVuUHJvdmlkZXI6OlJ1biYsIEl0ZW1Qb3Np
dGlvbiBzcGxpdFBvc2l0aW9uLCBMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsTGVmdCwgTGF5b3V0
VW5pdCBhdmFpbGFibGVXaWR0aCwgYm9vbCBpc0xpbmVFbXB0eSkgY29uc3Q7CiAKLSAgICBjb25z
dCBMYXlvdXRTdGF0ZSYgbV9sYXlvdXRTdGF0ZTsKLSAgICBjb25zdCBJbmxpbmVDb250ZW50JiBt
X2lubGluZUNvbnRlbnQ7Ci0gICAgY29uc3QgVmVjdG9yPElubGluZVJ1blByb3ZpZGVyOjpSdW4+
JiBtX2lubGluZVJ1bnM7CisgICAgQnJlYWtpbmdCZWhhdmlvciB3b3JkQnJlYWtpbmdCZWhhdmlv
cihjb25zdCBJbmxpbmVUZXh0SXRlbSYsIGJvb2wgbGluZUlzRW1wdHkpIGNvbnN0OworICAgIGJv
b2wgaXNBdEJyZWFraW5nT3Bwb3J0dW5pdHkoY29uc3QgSW5saW5lSXRlbSYpOworICAgIExheW91
dFVuaXQgcnVuV2lkdGgoY29uc3QgSW5saW5lSXRlbSYsIExheW91dFVuaXQgY29udGVudExvZ2lj
YWxMZWZ0KSBjb25zdDsKKyAgICBMYXlvdXRVbml0IHRleHRXaWR0aChjb25zdCBJbmxpbmVUZXh0
SXRlbSYsIExheW91dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0KSBjb25zdDsKIAotICAgIHVuc2ln
bmVkIG1fY3VycmVudFJ1bkluZGV4IHsgMCB9OwotICAgIE9wdGlvbmFsPEl0ZW1Qb3NpdGlvbj4g
bV9zcGxpdFBvc2l0aW9uOwotICAgIGJvb2wgbV9oeXBoZW5hdGlvbklzRGlzYWJsZWQgeyBmYWxz
ZSB9OworICAgIGNvbnN0IExheW91dFN0YXRlJiBtX2xheW91dFN0YXRlOworICAgIGJvb2wgbV9o
eXBoZW5hdGlvbklzRGlzYWJsZWQgeyB0cnVlIH07CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVSdW4uaCBiL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZVJ1bi5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBkNjU1NDQxNmFhNTExNTAyOWY1ZDUzZjZhMDQ3MWJlZGQxZWUxMTVl
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZVJ1bi5oCisrKyAvZGV2L251bGwK
QEAgLTEsMTE1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJM
RShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQotCi0jaW5jbHVkZSAiSW5saW5lUnVuUHJvdmlk
ZXIuaCIKLSNpbmNsdWRlICJMYXlvdXRVbml0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLW5h
bWVzcGFjZSBMYXlvdXQgewotCi1zdHJ1Y3QgSW5saW5lUnVuIHsKLSAgICBJbmxpbmVSdW4oRGlz
cGxheTo6Qm94OjpSZWN0IGxvZ2ljYWxSZWN0LCBjb25zdCBJbmxpbmVJdGVtJik7Ci0KLSAgICBM
YXlvdXRVbml0IGxvZ2ljYWxMZWZ0KCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsUmVjdC5sZWZ0
KCk7IH0KLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9n
aWNhbFJlY3QucmlnaHQoKTsgfQotICAgIExheW91dFVuaXQgbG9naWNhbFRvcCgpIGNvbnN0IHsg
cmV0dXJuIG1fbG9naWNhbFJlY3QudG9wKCk7IH0KLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxCb3R0
b20oKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxSZWN0LmJvdHRvbSgpOyB9Ci0KLSAgICBMYXlv
dXRVbml0IGxvZ2ljYWxXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFJlY3Qud2lkdGgo
KTsgfQotICAgIExheW91dFVuaXQgbG9naWNhbEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9n
aWNhbFJlY3QuaGVpZ2h0KCk7IH0KLSAgICBib29sIG92ZXJsYXBzTXVsdGlwbGVJbmxpbmVJdGVt
cygpIGNvbnN0OwotCi0gICAgdm9pZCBzZXRMb2dpY2FsV2lkdGgoTGF5b3V0VW5pdCB3aWR0aCkg
eyBtX2xvZ2ljYWxSZWN0LnNldFdpZHRoKHdpZHRoKTsgfQotICAgIHZvaWQgc2V0TG9naWNhbExl
ZnQoTGF5b3V0VW5pdCBsb2dpY2FsTGVmdCkgeyBtX2xvZ2ljYWxSZWN0LnNldExlZnQobG9naWNh
bExlZnQpOyB9Ci0gICAgdm9pZCBzZXRMb2dpY2FsUmlnaHQoTGF5b3V0VW5pdCBsb2dpY2FsUmln
aHQpIHsgbV9sb2dpY2FsUmVjdC5zaGlmdFJpZ2h0VG8obG9naWNhbFJpZ2h0KTsgfQotICAgIHZv
aWQgbW92ZVZlcnRpY2FsbHkoTGF5b3V0VW5pdCBkZWx0YSkgeyBtX2xvZ2ljYWxSZWN0Lm1vdmVW
ZXJ0aWNhbGx5KGRlbHRhKTsgfQotICAgIHZvaWQgbW92ZUhvcml6b250YWxseShMYXlvdXRVbml0
IGRlbHRhKSB7IG1fbG9naWNhbFJlY3QubW92ZUhvcml6b250YWxseShkZWx0YSk7IH0KLQotICAg
IHN0cnVjdCBFeHBhbnNpb25PcHBvcnR1bml0eSB7Ci0gICAgICAgIHVuc2lnbmVkIGNvdW50IHsg
MCB9OwotICAgICAgICBFeHBhbnNpb25CZWhhdmlvciBiZWhhdmlvciB7IEZvcmJpZExlYWRpbmdF
eHBhbnNpb24gfCBGb3JiaWRUcmFpbGluZ0V4cGFuc2lvbiB9OwotICAgICAgICBMYXlvdXRVbml0
IGV4cGFuc2lvbjsKLSAgICB9OwotICAgIEV4cGFuc2lvbk9wcG9ydHVuaXR5JiBleHBhbnNpb25P
cHBvcnR1bml0eSgpIHsgcmV0dXJuIG1fZXhwYW5zaW9uT3Bwb3J0dW5pdHk7IH0KLQotICAgIHN0
cnVjdCBUZXh0Q29udGV4dCB7Ci0gICAgcHVibGljOgotICAgICAgICBUZXh0Q29udGV4dChJdGVt
UG9zaXRpb24sIHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICAgICAgdm9pZCBzZXRTdGFydChJdGVt
UG9zaXRpb24gc3RhcnQpIHsgbV9zdGFydCA9IHN0YXJ0OyB9Ci0gICAgICAgIHZvaWQgc2V0TGVu
Z3RoKHVuc2lnbmVkIGxlbmd0aCkgeyBtX2xlbmd0aCA9IGxlbmd0aDsgfQotCi0gICAgICAgIEl0
ZW1Qb3NpdGlvbiBzdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnQ7IH0KLSAgICAgICAgdW5z
aWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KLQotICAgIHByaXZhdGU6
Ci0gICAgICAgIEl0ZW1Qb3NpdGlvbiBtX3N0YXJ0OwotICAgICAgICB1bnNpZ25lZCBtX2xlbmd0
aDsKLSAgICB9OwotICAgIHZvaWQgc2V0VGV4dENvbnRleHQoVGV4dENvbnRleHQgdGV4dENvbnRl
eHQpIHsgbV90ZXh0Q29udGV4dC5lbXBsYWNlKHRleHRDb250ZXh0KTsgfQotICAgIE9wdGlvbmFs
PFRleHRDb250ZXh0PiYgdGV4dENvbnRleHQoKSB7IHJldHVybiBtX3RleHRDb250ZXh0OyB9Ci0g
ICAgT3B0aW9uYWw8VGV4dENvbnRleHQ+IHRleHRDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV90
ZXh0Q29udGV4dDsgfQotCi0gICAgY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSgpIGNvbnN0
IHsgcmV0dXJuIG1faW5saW5lSXRlbTsgfQotCi1wcml2YXRlOgotICAgIERpc3BsYXk6OkJveDo6
UmVjdCBtX2xvZ2ljYWxSZWN0OwotICAgIEV4cGFuc2lvbk9wcG9ydHVuaXR5IG1fZXhwYW5zaW9u
T3Bwb3J0dW5pdHk7Ci0KLSAgICBjb25zdCBJbmxpbmVJdGVtJiBtX2lubGluZUl0ZW07Ci0gICAg
T3B0aW9uYWw8VGV4dENvbnRleHQ+IG1fdGV4dENvbnRleHQ7Ci19OwotCi11c2luZyBJbmxpbmVS
dW5zID0gVmVjdG9yPElubGluZVJ1bj47Ci0KLWlubGluZSBJbmxpbmVSdW46OklubGluZVJ1bihE
aXNwbGF5OjpCb3g6OlJlY3QgbG9naWNhbFJlY3QsIGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0
ZW0pCi0gICAgOiBtX2xvZ2ljYWxSZWN0KGxvZ2ljYWxSZWN0KQotICAgICwgbV9pbmxpbmVJdGVt
KGlubGluZUl0ZW0pCi17Ci19Ci0KLWlubGluZSBJbmxpbmVSdW46OlRleHRDb250ZXh0OjpUZXh0
Q29udGV4dChJdGVtUG9zaXRpb24gc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCkKLSAgICA6IG1fc3Rh
cnQoc3RhcnQpCi0gICAgLCBtX2xlbmd0aChsZW5ndGgpCi17Ci19Ci0KLWlubGluZSBib29sIElu
bGluZVJ1bjo6b3ZlcmxhcHNNdWx0aXBsZUlubGluZUl0ZW1zKCkgY29uc3QKLXsKLSAgICAvLyBP
bmx5IHRleHQgY29udGVudCBjYW4gb3ZlcmxhcCBtdWx0aXBsZSBpbmxpbmUgZWxlbWVudHMuCi0g
ICAgaWYgKCFtX3RleHRDb250ZXh0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRv
IGVuZFBvc2l0aW9uID0gbV90ZXh0Q29udGV4dC0+c3RhcnQoKSArIG1fdGV4dENvbnRleHQtPmxl
bmd0aCgpOwotICAgIHJldHVybiBlbmRQb3NpdGlvbiA+IG1faW5saW5lSXRlbS50ZXh0Q29udGVu
dCgpLmxlbmd0aCgpOwotfQotCi19Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZVJ1blByb3ZpZGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZVJ1blByb3ZpZGVyLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWViMjBmMGFmZDcxMmI1MzYyMDFkMDZmN2Ni
NDM3NWU4YjFlNGNkOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVSdW5Qcm92
aWRlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxOTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbmxpbmVSdW5Qcm92aWRlci5oIgotCi0jaWYg
RU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCi0KLSNpbmNsdWRlICJCcmVha0xpbmVz
LmgiCi0jaW5jbHVkZSAiTGF5b3V0SW5saW5lQm94LmgiCi0jaW5jbHVkZSA8d3RmL0lzb01hbGxv
Y0lubGluZXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotbmFtZXNwYWNlIExheW91dCB7Ci0K
LVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChJbmxpbmVSdW5Qcm92aWRlcik7Ci0KLUlubGlu
ZVJ1blByb3ZpZGVyOjpJbmxpbmVSdW5Qcm92aWRlcigpCi17Ci19Ci0KLXZvaWQgSW5saW5lUnVu
UHJvdmlkZXI6OmFwcGVuZChjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtKQotewotICAgIHN3
aXRjaCAoaW5saW5lSXRlbS50eXBlKCkpIHsKLSAgICBjYXNlIElubGluZUl0ZW06OlR5cGU6OlRl
eHQ6Ci0gICAgICAgIC8vIFNwZWNpYWwgY2FzZSB0ZXh0IGNvbnRlbnQuIFRoZXkgY2FuIG92ZXJs
YXAgbXVsdGlwbGUgaXRlbXMuIDxzcGFuPmZvbzwvc3Bhbj48c3Bhbj5iYXI8L3NwYW4+Ci0gICAg
ICAgIHByb2Nlc3NJbmxpbmVUZXh0SXRlbShpbmxpbmVJdGVtKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBJbmxpbmVJdGVtOjpUeXBlOjpIYXJkTGluZUJyZWFrOgotICAgICAgICBtX2lubGlu
ZVJ1bnMuYXBwZW5kKElubGluZVJ1blByb3ZpZGVyOjpSdW46OmNyZWF0ZUhhcmRMaW5lQnJlYWtS
dW4oaW5saW5lSXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIElubGluZUl0ZW06OlR5
cGU6OklubGluZUJveDoKLSAgICAgICAgbV9pbmxpbmVSdW5zLmFwcGVuZChJbmxpbmVSdW5Qcm92
aWRlcjo6UnVuOjpjcmVhdGVCb3hSdW4oaW5saW5lSXRlbSkpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIElubGluZUl0ZW06OlR5cGU6OkZsb2F0OgotICAgICAgICBtX2lubGluZVJ1bnMuYXBw
ZW5kKElubGluZVJ1blByb3ZpZGVyOjpSdW46OmNyZWF0ZUZsb2F0UnVuKGlubGluZUl0ZW0pKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9JTVBMRU1F
TlRFRF9ZRVQoKTsKLSAgICB9Ci19Ci0KLXZvaWQgSW5saW5lUnVuUHJvdmlkZXI6Omluc2VydEJl
Zm9yZShjb25zdCBCb3gmLCBjb25zdCBCb3gmKQotewotfQotCi12b2lkIElubGluZVJ1blByb3Zp
ZGVyOjpyZW1vdmUoY29uc3QgQm94JikKLXsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGlzV2hp
dGVzcGFjZShjaGFyIGNoYXJhY3RlciwgYm9vbCBwcmVzZXJ2ZU5ld2xpbmUpCi17Ci0gICAgcmV0
dXJuIGNoYXJhY3RlciA9PSAnICcgfHwgY2hhcmFjdGVyID09ICdcdCcgfHwgKGNoYXJhY3RlciA9
PSAnXG4nICYmICFwcmVzZXJ2ZU5ld2xpbmUpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNT
b2Z0TGluZUJyZWFrKGNoYXIgY2hhcmFjdGVyLCBib29sIHByZXNlcnZlTmV3bGluZSkKLXsKLSAg
ICByZXR1cm4gcHJlc2VydmVOZXdsaW5lICYmIGNoYXJhY3RlciA9PSAnXG4nOwotfQotCi1ib29s
IElubGluZVJ1blByb3ZpZGVyOjppc0NvbnRpbm91c0NvbnRlbnQoSW5saW5lUnVuUHJvdmlkZXI6
OlJ1bjo6VHlwZSBuZXdSdW5UeXBlLCBjb25zdCBJbmxpbmVJdGVtJiBuZXdJbmxpbmVJdGVtKQot
ewotICAgIGlmIChtX2lubGluZVJ1bnMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBhdXRvJiBsYXN0UnVuID0gbV9pbmxpbmVSdW5zLmxhc3QoKTsKLSAgICAvLyBTYW1l
IGVsZW1lbnQsIGNoZWNrIHR5cGUgb25seS4KLSAgICBpZiAoJm5ld0lubGluZUl0ZW0gPT0gJmxh
c3RSdW4uaW5saW5lSXRlbSgpKQotICAgICAgICByZXR1cm4gbmV3UnVuVHlwZSA9PSBsYXN0UnVu
LnR5cGUoKTsKLQotICAgIC8vIFRoaXMgbmV3IHJ1biBpcyBmcm9tIGEgZGlmZmVyZW50IGlubGlu
ZSBib3guCi0gICAgLy8gRklYTUU6IGNoZWNrIHN0eWxlLgotICAgIGlmIChuZXdSdW5UeXBlID09
IElubGluZVJ1blByb3ZpZGVyOjpSdW46OlR5cGU6Ok5vbldoaXRlc3BhY2UgJiYgbGFzdFJ1bi5p
c05vbldoaXRlc3BhY2UoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAobmV3UnVu
VHlwZSA9PSBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpUeXBlOjpXaGl0ZXNwYWNlICYmIGxhc3RS
dW4uaXNXaGl0ZXNwYWNlKCkpCi0gICAgICAgIHJldHVybiBuZXdJbmxpbmVJdGVtLnN0eWxlKCku
Y29sbGFwc2VXaGl0ZVNwYWNlKCkgPT0gbGFzdFJ1bi5zdHlsZSgpLmNvbGxhcHNlV2hpdGVTcGFj
ZSgpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIElubGluZVJ1blByb3ZpZGVyOjpw
cm9jZXNzSW5saW5lVGV4dEl0ZW0oY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSkKLXsKLSAg
ICAvLyBXZSBuZWVkIHRvIHJlc2V0IHRoZSBydW4gaXRlcmF0b3Igd2hlbiB0aGUgdGV4dCBjb250
ZW50IGlzIG5vdCBjb250aW51b3VzLgotICAgIC8vIDxzcGFuPmZvbzwvc3Bhbj48aW1nIHNyYz0i
Ij48c3Bhbj5iYXI8L3NwYW4+IChGSVhNRTogZmxvYXRzPykKLSAgICBpZiAoIW1faW5saW5lUnVu
cy5pc0VtcHR5KCkgJiYgIW1faW5saW5lUnVucy5sYXN0KCkuaXNUZXh0KCkpIHsKLSAgICAgICAg
bV9saW5lQnJlYWtJdGVyYXRvci5yZXNldFByaW9yQ29udGV4dCgpOwotICAgICAgICBtX2xpbmVC
cmVha0l0ZXJhdG9yLnJlc2V0U3RyaW5nQW5kUmVsZWFzZUl0ZXJhdG9yKCIiLCAiIiwgTGluZUJy
ZWFrSXRlcmF0b3JNb2RlOjpEZWZhdWx0KTsKLSAgICB9Ci0KLSAgICBhdXRvJiBzdHlsZSA9IGlu
bGluZUl0ZW0uc3R5bGUoKTsKLSAgICBhdXRvIHRleHQgPSBpbmxpbmVJdGVtLnRleHRDb250ZW50
KCk7Ci0gICAgSXRlbVBvc2l0aW9uIGN1cnJlbnRJdGVtUG9zaXRpb24gPSAwOwotICAgIHdoaWxl
IChjdXJyZW50SXRlbVBvc2l0aW9uIDwgdGV4dC5sZW5ndGgoKSkgewotCi0gICAgICAgIC8vIFNv
ZnQgbGluZWJyZWFrPwotICAgICAgICBpZiAoaXNTb2Z0TGluZUJyZWFrKHRleHRbY3VycmVudEl0
ZW1Qb3NpdGlvbl0sIHN0eWxlLnByZXNlcnZlTmV3bGluZSgpKSkgewotICAgICAgICAgICAgbV9p
bmxpbmVSdW5zLmFwcGVuZChJbmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpjcmVhdGVTb2Z0TGluZUJy
ZWFrUnVuKGlubGluZUl0ZW0pKTsKLSAgICAgICAgICAgICsrY3VycmVudEl0ZW1Qb3NpdGlvbjsK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgYXV0byBpc1doaXRl
c3BhY2VSdW4gPSBpc1doaXRlc3BhY2UodGV4dFtjdXJyZW50SXRlbVBvc2l0aW9uXSwgc3R5bGUu
cHJlc2VydmVOZXdsaW5lKCkpOwotICAgICAgICBhdXRvIGxlbmd0aCA9IGlzV2hpdGVzcGFjZVJ1
biA/IG1vdmVUb05leHROb25XaGl0ZXNwYWNlUG9zaXRpb24oaW5saW5lSXRlbSwgY3VycmVudEl0
ZW1Qb3NpdGlvbikgOiBtb3ZlVG9OZXh0QnJlYWthYmxlUG9zaXRpb24oaW5saW5lSXRlbSwgY3Vy
cmVudEl0ZW1Qb3NpdGlvbik7Ci0KLSAgICAgICAgaWYgKGlzQ29udGlub3VzQ29udGVudChpc1do
aXRlc3BhY2VSdW4gPyBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpUeXBlOjpXaGl0ZXNwYWNlIDog
SW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6VHlwZTo6Tm9uV2hpdGVzcGFjZSwgaW5saW5lSXRlbSkp
Ci0gICAgICAgICAgICBtX2lubGluZVJ1bnMubGFzdCgpLnRleHRDb250ZXh0KCktPmV4cGFuZChs
ZW5ndGgpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIG1faW5saW5lUnVucy5hcHBlbmQo
aXNXaGl0ZXNwYWNlUnVuID8gSW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6Y3JlYXRlV2hpdGVzcGFj
ZVJ1bihpbmxpbmVJdGVtLCBjdXJyZW50SXRlbVBvc2l0aW9uLCBsZW5ndGgsIHN0eWxlLmNvbGxh
cHNlV2hpdGVTcGFjZSgpKQotICAgICAgICAgICAgICAgIDogSW5saW5lUnVuUHJvdmlkZXI6OlJ1
bjo6Y3JlYXRlTm9uV2hpdGVzcGFjZVJ1bihpbmxpbmVJdGVtLCBjdXJyZW50SXRlbVBvc2l0aW9u
LCBsZW5ndGgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGN1cnJlbnRJdGVtUG9zaXRpb24gKz0g
bGVuZ3RoOwotICAgIH0KLX0KLQotdW5zaWduZWQgSW5saW5lUnVuUHJvdmlkZXI6Om1vdmVUb05l
eHROb25XaGl0ZXNwYWNlUG9zaXRpb24oY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSwgSXRl
bVBvc2l0aW9uIGN1cnJlbnRJdGVtUG9zaXRpb24pCi17Ci0gICAgYXV0byB0ZXh0ID0gaW5saW5l
SXRlbS50ZXh0Q29udGVudCgpOwotICAgIGF1dG8gcHJlc2VydmVOZXdsaW5lID0gaW5saW5lSXRl
bS5zdHlsZSgpLnByZXNlcnZlTmV3bGluZSgpOwotICAgIGF1dG8gbmV4dE5vbldoaXRlU3BhY2VQ
b3NpdGlvbiA9IGN1cnJlbnRJdGVtUG9zaXRpb247Ci0KLSAgICB3aGlsZSAobmV4dE5vbldoaXRl
U3BhY2VQb3NpdGlvbiA8IHRleHQubGVuZ3RoKCkgJiYgaXNXaGl0ZXNwYWNlKHRleHRbbmV4dE5v
bldoaXRlU3BhY2VQb3NpdGlvbl0sIHByZXNlcnZlTmV3bGluZSkpCi0gICAgICAgICsrbmV4dE5v
bldoaXRlU3BhY2VQb3NpdGlvbjsKLSAgICByZXR1cm4gbmV4dE5vbldoaXRlU3BhY2VQb3NpdGlv
biAtIGN1cnJlbnRJdGVtUG9zaXRpb247Ci19Ci0KLXVuc2lnbmVkIElubGluZVJ1blByb3ZpZGVy
Ojptb3ZlVG9OZXh0QnJlYWthYmxlUG9zaXRpb24oY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRl
bSwgSXRlbVBvc2l0aW9uIGN1cnJlbnRJdGVtUG9zaXRpb24pCi17Ci0gICAgYXV0byBmaW5kTmV4
dEJyZWFrYWJsZVBvc2l0aW9uID0gWyZdKGF1dG8gaW5saW5lVGV4dCwgYXV0byYgc3R5bGUsIEl0
ZW1Qb3NpdGlvbiBzdGFydFBvc2l0aW9uKSB7Ci0gICAgICAgIC8vIFN3YXAgaXRlcmF0b3IncyBj
b250ZW50IGlmIHdlIGFkdmFuY2VkIHRvIGEgbmV3IHN0cmluZy4KLSAgICAgICAgYXV0byBpdGVy
YXRvclRleHQgPSBtX2xpbmVCcmVha0l0ZXJhdG9yLnN0cmluZ1ZpZXcoKTsKLQotICAgICAgICBp
ZiAoaXRlcmF0b3JUZXh0ICE9IGlubGluZVRleHQpIHsKLSAgICAgICAgICAgIGF1dG8gdGV4dExl
bmd0aCA9IGl0ZXJhdG9yVGV4dC5sZW5ndGgoKTsKLSAgICAgICAgICAgIGF1dG8gbGFzdENoYXJh
Y3RlciA9IHRleHRMZW5ndGggPiAwID8gaXRlcmF0b3JUZXh0W3RleHRMZW5ndGggLSAxXSA6IDA7
Ci0gICAgICAgICAgICBhdXRvIHNlY29uZFRvTGFzdENoYXJhY3RlciA9IHRleHRMZW5ndGggPiAx
ID8gaXRlcmF0b3JUZXh0W3RleHRMZW5ndGggLSAyXSA6IDA7Ci0gICAgICAgICAgICBtX2xpbmVC
cmVha0l0ZXJhdG9yLnNldFByaW9yQ29udGV4dChsYXN0Q2hhcmFjdGVyLCBzZWNvbmRUb0xhc3RD
aGFyYWN0ZXIpOwotICAgICAgICAgICAgbV9saW5lQnJlYWtJdGVyYXRvci5yZXNldFN0cmluZ0Fu
ZFJlbGVhc2VJdGVyYXRvcihpbmxpbmVUZXh0LCBzdHlsZS5sb2NhbGUoKSwgTGluZUJyZWFrSXRl
cmF0b3JNb2RlOjpEZWZhdWx0KTsKLSAgICAgICAgfQotCi0gICAgICAgIGF1dG8ga2VlcEFsbFdv
cmRzRm9yQ0pLID0gc3R5bGUud29yZEJyZWFrKCkgPT0gV29yZEJyZWFrOjpLZWVwQWxsOwotICAg
ICAgICBhdXRvIGJyZWFrTkJTUCA9IHN0eWxlLmF1dG9XcmFwKCkgJiYgc3R5bGUubmJzcE1vZGUo
KSA9PSBOQlNQTW9kZTo6U3BhY2U7Ci0KLSAgICAgICAgaWYgKGtlZXBBbGxXb3Jkc0ZvckNKSykg
ewotICAgICAgICAgICAgaWYgKGJyZWFrTkJTUCkKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV4
dEJyZWFrYWJsZVBvc2l0aW9uS2VlcGluZ0FsbFdvcmRzKG1fbGluZUJyZWFrSXRlcmF0b3IsIHN0
YXJ0UG9zaXRpb24pOwotICAgICAgICAgICAgcmV0dXJuIG5leHRCcmVha2FibGVQb3NpdGlvbktl
ZXBpbmdBbGxXb3Jkc0lnbm9yaW5nTkJTUChtX2xpbmVCcmVha0l0ZXJhdG9yLCBzdGFydFBvc2l0
aW9uKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtX2xpbmVCcmVha0l0ZXJhdG9yLm1vZGUo
KSA9PSBMaW5lQnJlYWtJdGVyYXRvck1vZGU6OkRlZmF1bHQpIHsKLSAgICAgICAgICAgIGlmIChi
cmVha05CU1ApCi0gICAgICAgICAgICAgICAgcmV0dXJuIFdlYkNvcmU6Om5leHRCcmVha2FibGVQ
b3NpdGlvbihtX2xpbmVCcmVha0l0ZXJhdG9yLCBzdGFydFBvc2l0aW9uKTsKLSAgICAgICAgICAg
IHJldHVybiBuZXh0QnJlYWthYmxlUG9zaXRpb25JZ25vcmluZ05CU1AobV9saW5lQnJlYWtJdGVy
YXRvciwgc3RhcnRQb3NpdGlvbik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYnJlYWtOQlNQ
KQotICAgICAgICAgICAgcmV0dXJuIG5leHRCcmVha2FibGVQb3NpdGlvbldpdGhvdXRTaG9ydGN1
dChtX2xpbmVCcmVha0l0ZXJhdG9yLCBzdGFydFBvc2l0aW9uKTsKLSAgICAgICAgcmV0dXJuIG5l
eHRCcmVha2FibGVQb3NpdGlvbklnbm9yaW5nTkJTUFdpdGhvdXRTaG9ydGN1dChtX2xpbmVCcmVh
a0l0ZXJhdG9yLCBzdGFydFBvc2l0aW9uKTsKLSAgICB9OwotCi0gICAgYXV0byYgc3R5bGUgPSBp
bmxpbmVJdGVtLnN0eWxlKCk7Ci0gICAgYXV0byB0ZXh0TGVuZ3RoID0gaW5saW5lSXRlbS50ZXh0
Q29udGVudCgpLmxlbmd0aCgpOwotICAgIEFTU0VSVCh0ZXh0TGVuZ3RoKTsKLSAgICB3aGlsZSAo
Y3VycmVudEl0ZW1Qb3NpdGlvbiA8IHRleHRMZW5ndGggLSAxKSB7Ci0gICAgICAgIGF1dG8gbmV4
dEJyZWFrYWJsZVBvc2l0aW9uID0gZmluZE5leHRCcmVha2FibGVQb3NpdGlvbihpbmxpbmVJdGVt
LnRleHRDb250ZW50KCksIHN0eWxlLCBjdXJyZW50SXRlbVBvc2l0aW9uKTsKLSAgICAgICAgaWYg
KG5leHRCcmVha2FibGVQb3NpdGlvbiAhPSBjdXJyZW50SXRlbVBvc2l0aW9uKQotICAgICAgICAg
ICAgcmV0dXJuIG5leHRCcmVha2FibGVQb3NpdGlvbiAtIGN1cnJlbnRJdGVtUG9zaXRpb247Ci0g
ICAgICAgICsrY3VycmVudEl0ZW1Qb3NpdGlvbjsKLSAgICB9Ci0gICAgcmV0dXJuIHRleHRMZW5n
dGg7Ci19Ci0KLX0KLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2lubGluZWZvcm1hdHRpbmcvSW5saW5lUnVuUHJvdmlkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZVJ1blByb3ZpZGVyLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGQ3N2MxNDhlZWVlMGNhZGEyNDU2NjFlZmViOGZjNTY3ZGVlZDg2MDgu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lUnVuUHJvdmlkZXIuaAorKysgL2Rl
di9udWxsCkBAIC0xLDE2OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNp
ZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKLQotI2luY2x1ZGUgIklubGluZUl0
ZW0uaCIKLSNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvVGV4
dEJyZWFrSXRlcmF0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotbmFtZXNwYWNlIExheW91
dCB7Ci0KLXVzaW5nIEl0ZW1Qb3NpdGlvbiA9IHVuc2lnbmVkOwotCi1jbGFzcyBJbmxpbmVSdW5Q
cm92aWRlciB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChJbmxpbmVSdW5Qcm92aWRlcik7
Ci1wdWJsaWM6Ci0gICAgSW5saW5lUnVuUHJvdmlkZXIoKTsKLQotICAgIHZvaWQgYXBwZW5kKGNv
bnN0IElubGluZUl0ZW0mKTsKLSAgICB2b2lkIGluc2VydEJlZm9yZShjb25zdCBCb3gmLCBjb25z
dCBCb3gmIGJlZm9yZSk7Ci0gICAgdm9pZCByZW1vdmUoY29uc3QgQm94Jik7Ci0KLSAgICBzdHJ1
Y3QgUnVuIHsKLQotICAgICAgICBzdGF0aWMgUnVuIGNyZWF0ZUJveFJ1bihjb25zdCBJbmxpbmVJ
dGVtJik7Ci0gICAgICAgIHN0YXRpYyBSdW4gY3JlYXRlRmxvYXRSdW4oY29uc3QgSW5saW5lSXRl
bSYpOwotICAgICAgICBzdGF0aWMgUnVuIGNyZWF0ZUhhcmRMaW5lQnJlYWtSdW4oY29uc3QgSW5s
aW5lSXRlbSYpOwotICAgICAgICBzdGF0aWMgUnVuIGNyZWF0ZVNvZnRMaW5lQnJlYWtSdW4oY29u
c3QgSW5saW5lSXRlbSYpOwotICAgICAgICBzdGF0aWMgUnVuIGNyZWF0ZVdoaXRlc3BhY2VSdW4o
Y29uc3QgSW5saW5lSXRlbSYsIEl0ZW1Qb3NpdGlvbiBzdGFydCwgdW5zaWduZWQgbGVuZ3RoLCBi
b29sIGlzQ29sbGFwc2libGUpOwotICAgICAgICBzdGF0aWMgUnVuIGNyZWF0ZU5vbldoaXRlc3Bh
Y2VSdW4oY29uc3QgSW5saW5lSXRlbSYsIEl0ZW1Qb3NpdGlvbiBzdGFydCwgdW5zaWduZWQgbGVu
Z3RoKTsKLQotICAgICAgICBlbnVtIGNsYXNzIFR5cGUgewotICAgICAgICAgICAgQm94LAotICAg
ICAgICAgICAgRmxvYXQsCi0gICAgICAgICAgICBTb2Z0TGluZUJyZWFrLAotICAgICAgICAgICAg
SGFyZExpbmVCcmVhaywKLSAgICAgICAgICAgIFdoaXRlc3BhY2UsCi0gICAgICAgICAgICBOb25X
aGl0ZXNwYWNlCi0gICAgICAgIH07Ci0gICAgICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdHlwZTsgfQotICAgICAgICBib29sIGlzVGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9
PSBSdW46OlR5cGU6OldoaXRlc3BhY2UgfHwgbV90eXBlID09IFJ1bjo6VHlwZTo6Tm9uV2hpdGVz
cGFjZSB8fCBtX3R5cGUgPT0gUnVuOjpUeXBlOjpTb2Z0TGluZUJyZWFrIHx8IG1fdHlwZSA9PSBS
dW46OlR5cGU6OkhhcmRMaW5lQnJlYWs7IH0KLSAgICAgICAgYm9vbCBpc1doaXRlc3BhY2UoKSBj
b25zdCB7IHJldHVybiBtX3R5cGUgPT0gVHlwZTo6V2hpdGVzcGFjZTsgfQotICAgICAgICBib29s
IGlzTm9uV2hpdGVzcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBUeXBlOjpOb25XaGl0
ZXNwYWNlOyB9Ci0gICAgICAgIGJvb2wgaXNMaW5lQnJlYWsoKSBjb25zdCB7IHJldHVybiBtX3R5
cGUgPT0gUnVuOjpUeXBlOjpTb2Z0TGluZUJyZWFrIHx8IG1fdHlwZSA9PSBSdW46OlR5cGU6Okhh
cmRMaW5lQnJlYWs7IH0KLSAgICAgICAgYm9vbCBpc0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlw
ZSA9PSBUeXBlOjpCb3g7IH0KLSAgICAgICAgYm9vbCBpc0Zsb2F0KCkgY29uc3QgeyByZXR1cm4g
bV90eXBlID09IFR5cGU6OkZsb2F0OyB9Ci0KLSAgICAgICAgc3RydWN0IFRleHRDb250ZXh0IHsK
LQotICAgICAgICAgICAgZW51bSBjbGFzcyBJc0NvbGxhcHNlZCB7IE5vLCBZZXMgfTsKLSAgICAg
ICAgICAgIFRleHRDb250ZXh0KEl0ZW1Qb3NpdGlvbiwgdW5zaWduZWQgbGVuZ3RoLCBJc0NvbGxh
cHNlZCk7Ci0KLSAgICAgICAgICAgIEl0ZW1Qb3NpdGlvbiBzdGFydCgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhcnQ7IH0KLSAgICAgICAgICAgIC8vIE5vdGUgdGhhdCAnZW5kJyBwb3NpdGlvbiBkb2Vz
IG5vdCBlcXVhbCB0byBzdGFydCArIGxlbmd0aCB3aGVuIHJ1biBvdmVybGFwcyBtdWx0aXBsZSBJ
bmxpbmVJdGVtcy4KLSAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJu
IG1fbGVuZ3RoOyB9Ci0gICAgICAgICAgICBib29sIGlzQ29sbGFwc2VkKCkgY29uc3QgeyByZXR1
cm4gbV9pc0NvbGxhcHNlZCA9PSBJc0NvbGxhcHNlZDo6WWVzOyB9Ci0KLSAgICAgICAgcHJpdmF0
ZToKLSAgICAgICAgICAgIGZyaWVuZCBjbGFzcyBJbmxpbmVSdW5Qcm92aWRlcjsKLQotICAgICAg
ICAgICAgdm9pZCBleHBhbmQodW5zaWduZWQgbGVuZ3RoKSB7IG1fbGVuZ3RoICs9IGxlbmd0aDsg
fQotCi0gICAgICAgICAgICBJdGVtUG9zaXRpb24gbV9zdGFydCB7IDAgfTsKLSAgICAgICAgICAg
IHVuc2lnbmVkIG1fbGVuZ3RoIHsgMCB9OwotICAgICAgICAgICAgSXNDb2xsYXBzZWQgbV9pc0Nv
bGxhcHNlZCB7IElzQ29sbGFwc2VkOjpObyB9OwotICAgICAgICB9OwotICAgICAgICBPcHRpb25h
bDxUZXh0Q29udGV4dD4gdGV4dENvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX3RleHRDb250ZXh0
OyB9Ci0gICAgICAgIC8vIE5vdGUgdGhhdCBzdHlsZSgpIGFuZCBpbmxpbmVJdGVtKCkgYWx3YXlz
IHJldHVybnMgdGhlIGZpcnN0IElubGluZUl0ZW0gZm9yIGEgcnVuLgotICAgICAgICBjb25zdCBS
ZW5kZXJTdHlsZSYgc3R5bGUoKSBjb25zdCB7IHJldHVybiBtX2lubGluZUl0ZW0uc3R5bGUoKTsg
fQotICAgICAgICBjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtKCkgY29uc3QgeyByZXR1cm4g
bV9pbmxpbmVJdGVtOyB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBmcmllbmQgY2xhc3MgSW5s
aW5lUnVuUHJvdmlkZXI7Ci0KLSAgICAgICAgUnVuKGNvbnN0IElubGluZUl0ZW0mLCBUeXBlLCBP
cHRpb25hbDxUZXh0Q29udGV4dD4pOwotICAgICAgICBPcHRpb25hbDxUZXh0Q29udGV4dD4mIHRl
eHRDb250ZXh0KCkgeyByZXR1cm4gbV90ZXh0Q29udGV4dDsgfQotCi0gICAgICAgIGNvbnN0IFR5
cGUgbV90eXBlOwotICAgICAgICBjb25zdCBJbmxpbmVJdGVtJiBtX2lubGluZUl0ZW07Ci0gICAg
ICAgIE9wdGlvbmFsPFRleHRDb250ZXh0PiBtX3RleHRDb250ZXh0OwotICAgIH07Ci0gICAgY29u
c3QgVmVjdG9yPElubGluZVJ1blByb3ZpZGVyOjpSdW4+JiBydW5zKCkgY29uc3QgeyByZXR1cm4g
bV9pbmxpbmVSdW5zOyB9Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBjb21taXRUZXh0UnVuKCk7Ci0g
ICAgdm9pZCBwcm9jZXNzSW5saW5lVGV4dEl0ZW0oY29uc3QgSW5saW5lSXRlbSYpOwotICAgIHVu
c2lnbmVkIG1vdmVUb05leHROb25XaGl0ZXNwYWNlUG9zaXRpb24oY29uc3QgSW5saW5lSXRlbSYs
IEl0ZW1Qb3NpdGlvbiBjdXJyZW50UG9zaXRpb24pOwotICAgIHVuc2lnbmVkIG1vdmVUb05leHRC
cmVha2FibGVQb3NpdGlvbihjb25zdCBJbmxpbmVJdGVtJiwgSXRlbVBvc2l0aW9uIGN1cnJlbnRQ
b3NpdGlvbik7Ci0gICAgYm9vbCBpc0NvbnRpbm91c0NvbnRlbnQoUnVuOjpUeXBlIG5ld1J1blR5
cGUsIGNvbnN0IElubGluZUl0ZW0mIG5ld0lubGluZUl0ZW0pOwotCi0gICAgTGF6eUxpbmVCcmVh
a0l0ZXJhdG9yIG1fbGluZUJyZWFrSXRlcmF0b3I7Ci0KLSAgICBWZWN0b3I8SW5saW5lUnVuUHJv
dmlkZXI6OlJ1bj4gbV9pbmxpbmVSdW5zOwotfTsKLQotaW5saW5lIElubGluZVJ1blByb3ZpZGVy
OjpSdW4gSW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6Y3JlYXRlQm94UnVuKGNvbnN0IElubGluZUl0
ZW0mIGlubGluZUl0ZW0pCi17Ci0gICAgcmV0dXJuIHsgaW5saW5lSXRlbSwgVHlwZTo6Qm94LCBX
VEY6Om51bGxvcHQgfTsKLX0KLQotaW5saW5lIElubGluZVJ1blByb3ZpZGVyOjpSdW4gSW5saW5l
UnVuUHJvdmlkZXI6OlJ1bjo6Y3JlYXRlRmxvYXRSdW4oY29uc3QgSW5saW5lSXRlbSYgaW5saW5l
SXRlbSkKLXsKLSAgICByZXR1cm4geyBpbmxpbmVJdGVtLCBUeXBlOjpGbG9hdCwgV1RGOjpudWxs
b3B0IH07Ci19Ci0KLWlubGluZSBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuIElubGluZVJ1blByb3Zp
ZGVyOjpSdW46OmNyZWF0ZVNvZnRMaW5lQnJlYWtSdW4oY29uc3QgSW5saW5lSXRlbSYgaW5saW5l
SXRlbSkKLXsKLSAgICByZXR1cm4geyBpbmxpbmVJdGVtLCBUeXBlOjpTb2Z0TGluZUJyZWFrLCBX
VEY6Om51bGxvcHQgfTsKLX0KLQotaW5saW5lIElubGluZVJ1blByb3ZpZGVyOjpSdW4gSW5saW5l
UnVuUHJvdmlkZXI6OlJ1bjo6Y3JlYXRlSGFyZExpbmVCcmVha1J1bihjb25zdCBJbmxpbmVJdGVt
JiBpbmxpbmVJdGVtKQotewotICAgIHJldHVybiB7IGlubGluZUl0ZW0sIFR5cGU6OkhhcmRMaW5l
QnJlYWssIFdURjo6bnVsbG9wdCB9OwotfQotCi1pbmxpbmUgSW5saW5lUnVuUHJvdmlkZXI6OlJ1
biBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpjcmVhdGVXaGl0ZXNwYWNlUnVuKGNvbnN0IElubGlu
ZUl0ZW0mIGlubGluZUl0ZW0sIEl0ZW1Qb3NpdGlvbiBzdGFydCwgdW5zaWduZWQgbGVuZ3RoLCBi
b29sIGlzQ29sbGFwc2libGUpCi17Ci0gICAgQVNTRVJUKGxlbmd0aCk7Ci0gICAgYXV0byBpc0Nv
bGxhcHNlZCA9IGlzQ29sbGFwc2libGUgJiYgbGVuZ3RoID4gMSA/IFRleHRDb250ZXh0OjpJc0Nv
bGxhcHNlZDo6WWVzIDogVGV4dENvbnRleHQ6OklzQ29sbGFwc2VkOjpObzsKLSAgICByZXR1cm4g
eyBpbmxpbmVJdGVtLCBUeXBlOjpXaGl0ZXNwYWNlLCBUZXh0Q29udGV4dChzdGFydCwgbGVuZ3Ro
LCBpc0NvbGxhcHNlZCkgfTsKLX0KLQotaW5saW5lIElubGluZVJ1blByb3ZpZGVyOjpSdW4gSW5s
aW5lUnVuUHJvdmlkZXI6OlJ1bjo6Y3JlYXRlTm9uV2hpdGVzcGFjZVJ1bihjb25zdCBJbmxpbmVJ
dGVtJiBpbmxpbmVJdGVtLCBJdGVtUG9zaXRpb24gc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCkKLXsK
LSAgICByZXR1cm4geyBpbmxpbmVJdGVtLCBUeXBlOjpOb25XaGl0ZXNwYWNlLCBUZXh0Q29udGV4
dChzdGFydCwgbGVuZ3RoLCBUZXh0Q29udGV4dDo6SXNDb2xsYXBzZWQ6Ok5vKSB9OwotfQotCi1p
bmxpbmUgSW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6UnVuKGNvbnN0IElubGluZUl0ZW0mIGlubGlu
ZUl0ZW0sIFR5cGUgdHlwZSwgT3B0aW9uYWw8VGV4dENvbnRleHQ+IHRleHRDb250ZXh0KQotICAg
IDogbV90eXBlKHR5cGUpCi0gICAgLCBtX2lubGluZUl0ZW0oaW5saW5lSXRlbSkKLSAgICAsIG1f
dGV4dENvbnRleHQodGV4dENvbnRleHQpCi17Ci19Ci0KLWlubGluZSBJbmxpbmVSdW5Qcm92aWRl
cjo6UnVuOjpUZXh0Q29udGV4dDo6VGV4dENvbnRleHQoSXRlbVBvc2l0aW9uIHN0YXJ0LCB1bnNp
Z25lZCBsZW5ndGgsIElzQ29sbGFwc2VkIGlzQ29sbGFwc2VkKQotICAgIDogbV9zdGFydChzdGFy
dCkKLSAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKLSAgICAsIG1faXNDb2xsYXBzZWQoaXNDb2xsYXBz
ZWQpCi17Ci19Ci0KLX0KLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lVGV4dEl0ZW0uY3BwIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lVGV4dEl0ZW0uY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNm
NTQyNDY0ZmRiYmY0NmY0MThiMDExY2EwNDgzYTVlN2I5MmQxOGMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVUZXh0SXRlbS5j
cHAKQEAgLTAsMCArMSwxMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiSW5saW5lVGV4dEl0ZW0uaCIKKworI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElO
R19DT05URVhUKQorCisjaW5jbHVkZSAiQnJlYWtMaW5lcy5oIgorI2luY2x1ZGUgIkxheW91dElu
bGluZUJveC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgTGF5b3V0IHsKKwor
c3RhdGljIGlubGluZSBib29sIGlzV2hpdGVzcGFjZUNoYXJhY3RlcihjaGFyIGNoYXJhY3Rlciwg
Ym9vbCBwcmVzZXJ2ZU5ld2xpbmUpCit7CisgICAgcmV0dXJuIGNoYXJhY3RlciA9PSAnICcgfHwg
Y2hhcmFjdGVyID09ICdcdCcgfHwgKGNoYXJhY3RlciA9PSAnXG4nICYmICFwcmVzZXJ2ZU5ld2xp
bmUpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNTb2Z0TGluZUJyZWFrKGNoYXIgY2hhcmFj
dGVyLCBib29sIHByZXNlcnZlTmV3bGluZSkKK3sKKyAgICByZXR1cm4gcHJlc2VydmVOZXdsaW5l
ICYmIGNoYXJhY3RlciA9PSAnXG4nOworfQorCitzdGF0aWMgdW5zaWduZWQgbW92ZVRvTmV4dE5v
bldoaXRlc3BhY2VQb3NpdGlvbihTdHJpbmcgdGV4dENvbnRlbnQsIHVuc2lnbmVkIHN0YXJ0UG9z
aXRpb24sIGJvb2wgcHJlc2VydmVOZXdsaW5lKQoreworICAgIGF1dG8gbmV4dE5vbldoaXRlU3Bh
Y2VQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb247CisgICAgd2hpbGUgKG5leHROb25XaGl0ZVNwYWNl
UG9zaXRpb24gPCB0ZXh0Q29udGVudC5sZW5ndGgoKSAmJiBpc1doaXRlc3BhY2VDaGFyYWN0ZXIo
dGV4dENvbnRlbnRbbmV4dE5vbldoaXRlU3BhY2VQb3NpdGlvbl0sIHByZXNlcnZlTmV3bGluZSkp
CisgICAgICAgICsrbmV4dE5vbldoaXRlU3BhY2VQb3NpdGlvbjsKKyAgICByZXR1cm4gbmV4dE5v
bldoaXRlU3BhY2VQb3NpdGlvbiAtIHN0YXJ0UG9zaXRpb247Cit9CisKK3N0YXRpYyB1bnNpZ25l
ZCBtb3ZlVG9OZXh0QnJlYWthYmxlUG9zaXRpb24odW5zaWduZWQgc3RhcnRQb3NpdGlvbiwgTGF6
eUxpbmVCcmVha0l0ZXJhdG9yIGxpbmVCcmVha0l0ZXJhdG9yLCBjb25zdCBSZW5kZXJTdHlsZSYg
c3R5bGUpCit7CisgICAgYXV0byBmaW5kTmV4dEJyZWFrYWJsZVBvc2l0aW9uID0gWyZdKGF1dG8g
c3RhcnRQb3NpdGlvbikgeworICAgICAgICBhdXRvIGtlZXBBbGxXb3Jkc0ZvckNKSyA9IHN0eWxl
LndvcmRCcmVhaygpID09IFdvcmRCcmVhazo6S2VlcEFsbDsKKyAgICAgICAgYXV0byBicmVha05C
U1AgPSBzdHlsZS5hdXRvV3JhcCgpICYmIHN0eWxlLm5ic3BNb2RlKCkgPT0gTkJTUE1vZGU6OlNw
YWNlOworCisgICAgICAgIGlmIChrZWVwQWxsV29yZHNGb3JDSkspIHsKKyAgICAgICAgICAgIGlm
IChicmVha05CU1ApCisgICAgICAgICAgICAgICAgcmV0dXJuIG5leHRCcmVha2FibGVQb3NpdGlv
bktlZXBpbmdBbGxXb3JkcyhsaW5lQnJlYWtJdGVyYXRvciwgc3RhcnRQb3NpdGlvbik7CisgICAg
ICAgICAgICByZXR1cm4gbmV4dEJyZWFrYWJsZVBvc2l0aW9uS2VlcGluZ0FsbFdvcmRzSWdub3Jp
bmdOQlNQKGxpbmVCcmVha0l0ZXJhdG9yLCBzdGFydFBvc2l0aW9uKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChsaW5lQnJlYWtJdGVyYXRvci5tb2RlKCkgPT0gTGluZUJyZWFrSXRlcmF0b3JN
b2RlOjpEZWZhdWx0KSB7CisgICAgICAgICAgICBpZiAoYnJlYWtOQlNQKQorICAgICAgICAgICAg
ICAgIHJldHVybiBXZWJDb3JlOjpuZXh0QnJlYWthYmxlUG9zaXRpb24obGluZUJyZWFrSXRlcmF0
b3IsIHN0YXJ0UG9zaXRpb24pOworICAgICAgICAgICAgcmV0dXJuIG5leHRCcmVha2FibGVQb3Np
dGlvbklnbm9yaW5nTkJTUChsaW5lQnJlYWtJdGVyYXRvciwgc3RhcnRQb3NpdGlvbik7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoYnJlYWtOQlNQKQorICAgICAgICAgICAgcmV0dXJuIG5leHRC
cmVha2FibGVQb3NpdGlvbldpdGhvdXRTaG9ydGN1dChsaW5lQnJlYWtJdGVyYXRvciwgc3RhcnRQ
b3NpdGlvbik7CisgICAgICAgIHJldHVybiBuZXh0QnJlYWthYmxlUG9zaXRpb25JZ25vcmluZ05C
U1BXaXRob3V0U2hvcnRjdXQobGluZUJyZWFrSXRlcmF0b3IsIHN0YXJ0UG9zaXRpb24pOworICAg
IH07CisKKyAgICBhdXRvIHRleHRMZW5ndGggPSBsaW5lQnJlYWtJdGVyYXRvci5zdHJpbmdWaWV3
KCkubGVuZ3RoKCk7CisgICAgYXV0byBjdXJyZW50UG9zaXRpb24gPSBzdGFydFBvc2l0aW9uOwor
ICAgIHdoaWxlIChjdXJyZW50UG9zaXRpb24gPCB0ZXh0TGVuZ3RoIC0gMSkgeworICAgICAgICBh
dXRvIG5leHRCcmVha2FibGVQb3NpdGlvbiA9IGZpbmROZXh0QnJlYWthYmxlUG9zaXRpb24oY3Vy
cmVudFBvc2l0aW9uKTsKKyAgICAgICAgaWYgKG5leHRCcmVha2FibGVQb3NpdGlvbiAhPSBjdXJy
ZW50UG9zaXRpb24pCisgICAgICAgICAgICByZXR1cm4gbmV4dEJyZWFrYWJsZVBvc2l0aW9uIC0g
Y3VycmVudFBvc2l0aW9uOworICAgICAgICArK2N1cnJlbnRQb3NpdGlvbjsKKyAgICB9CisgICAg
cmV0dXJuIHRleHRMZW5ndGggLSBzdGFydFBvc2l0aW9uOworfQorCit2b2lkIElubGluZVRleHRJ
dGVtOjpjcmVhdGVBbmRBcHBlbmRUZXh0SXRlbXMoSW5saW5lSXRlbXMmIGlubGluZUNvbnRlbnQs
IGNvbnN0IElubGluZUJveCYgaW5saW5lQm94KQoreworICAgIGF1dG8mIHN0eWxlID0gaW5saW5l
Qm94LnN0eWxlKCk7CisgICAgYXV0byBwcmVzZXJ2ZU5ld2xpbmUgPSBzdHlsZS5wcmVzZXJ2ZU5l
d2xpbmUoKTsKKyAgICBhdXRvIGNvbGxhcHNlV2hpdGVTcGFjZSA9IHN0eWxlLmNvbGxhcHNlV2hp
dGVTcGFjZSgpOworICAgIGF1dG8gdGV4dCA9IGlubGluZUJveC50ZXh0Q29udGVudCgpOworICAg
IExhenlMaW5lQnJlYWtJdGVyYXRvciBsaW5lQnJlYWtJdGVyYXRvcih0ZXh0KTsKKworICAgIHVu
c2lnbmVkIGN1cnJlbnRQb3NpdGlvbiA9IDA7CisgICAgd2hpbGUgKGN1cnJlbnRQb3NpdGlvbiA8
IHRleHQubGVuZ3RoKCkpIHsKKyAgICAgICAgLy8gU29mdCBsaW5lYnJlYWs/CisgICAgICAgIGlm
IChpc1NvZnRMaW5lQnJlYWsodGV4dFtjdXJyZW50UG9zaXRpb25dLCBwcmVzZXJ2ZU5ld2xpbmUp
KSB7CisgICAgICAgICAgICBpbmxpbmVDb250ZW50LmFkZChzdGQ6Om1ha2VfdW5pcXVlPElubGlu
ZVRleHRJdGVtPihpbmxpbmVCb3gsIGN1cnJlbnRQb3NpdGlvbiwgMSwgdHJ1ZSwgZmFsc2UpKTsK
KyAgICAgICAgICAgICsrY3VycmVudFBvc2l0aW9uOworICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKGlzV2hpdGVzcGFjZUNoYXJhY3Rlcih0ZXh0W2N1cnJlbnRQ
b3NpdGlvbl0sIHByZXNlcnZlTmV3bGluZSkpIHsKKyAgICAgICAgICAgIGF1dG8gbGVuZ3RoID0g
bW92ZVRvTmV4dE5vbldoaXRlc3BhY2VQb3NpdGlvbih0ZXh0LCBjdXJyZW50UG9zaXRpb24sIHBy
ZXNlcnZlTmV3bGluZSk7CisgICAgICAgICAgICBhdXRvIGlzQ29sbGFwc2VkID0gY29sbGFwc2VX
aGl0ZVNwYWNlICYmIGxlbmd0aCA+IDE7CisgICAgICAgICAgICBpbmxpbmVDb250ZW50LmFkZChz
dGQ6Om1ha2VfdW5pcXVlPElubGluZVRleHRJdGVtPihpbmxpbmVCb3gsIGN1cnJlbnRQb3NpdGlv
biwgbGVuZ3RoLCB0cnVlLCBpc0NvbGxhcHNlZCkpOworICAgICAgICAgICAgY3VycmVudFBvc2l0
aW9uICs9IGxlbmd0aDsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAg
ICAgYXV0byBsZW5ndGggPSBtb3ZlVG9OZXh0QnJlYWthYmxlUG9zaXRpb24oY3VycmVudFBvc2l0
aW9uLCBsaW5lQnJlYWtJdGVyYXRvciwgc3R5bGUpOworICAgICAgICBpbmxpbmVDb250ZW50LmFk
ZChzdGQ6Om1ha2VfdW5pcXVlPElubGluZVRleHRJdGVtPihpbmxpbmVCb3gsIGN1cnJlbnRQb3Np
dGlvbiwgbGVuZ3RoLCBmYWxzZSwgZmFsc2UpKTsKKyAgICAgICAgY3VycmVudFBvc2l0aW9uICs9
IGxlbmd0aDsKKyAgICB9Cit9CisKK0lubGluZVRleHRJdGVtOjpJbmxpbmVUZXh0SXRlbShjb25z
dCBJbmxpbmVCb3gmIGlubGluZUJveCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwg
Ym9vbCBpc1doaXRlc3BhY2UsIGJvb2wgaXNDb2xsYXBzZWQpCisgICAgOiBJbmxpbmVJdGVtKGlu
bGluZUJveCwgVHlwZTo6VGV4dCkKKyAgICAsIG1fc3RhcnQoc3RhcnQpCisgICAgLCBtX2xlbmd0
aChsZW5ndGgpCisgICAgLCBtX2lzV2hpdGVzcGFjZShpc1doaXRlc3BhY2UpCisgICAgLCBtX2lz
Q29sbGFwc2VkKGlzQ29sbGFwc2VkKQoreworfQorCit9Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZVRleHRJdGVtLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVUZXh0SXRlbS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjI4NzRmMjhhMzFkY2QwMGFiZWRlODg5NzU3NDUxM2NiZTI5ZTE2ZGUKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9J
bmxpbmVUZXh0SXRlbS5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQorCisjaW5jbHVkZSAi
SW5saW5lSXRlbS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgTGF5b3V0IHsK
KworY2xhc3MgSW5saW5lVGV4dEl0ZW0gOiBwdWJsaWMgSW5saW5lSXRlbSB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIHZvaWQgY3JlYXRlQW5kQXBwZW5kVGV4dEl0ZW1zKElubGluZUl0ZW1zJiwgY29u
c3QgSW5saW5lQm94Jik7CisKKyAgICBJbmxpbmVUZXh0SXRlbShjb25zdCBJbmxpbmVCb3gmLCB1
bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoLCBib29sIGlzV2hpdGVzcGFjZSwgYm9vbCBp
c0NvbGxhcHNlZCk7CisKKyAgICB1bnNpZ25lZCBzdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
cnQ7IH0KKyAgICB1bnNpZ25lZCBlbmQoKSBjb25zdCB7IHJldHVybiBzdGFydCgpICsgbGVuZ3Ro
KCk7IH0KKyAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQor
CisgICAgYm9vbCBpc1doaXRlc3BhY2UoKSBjb25zdCB7IHJldHVybiBtX2lzV2hpdGVzcGFjZTsg
fQorICAgIGJvb2wgaXNDb2xsYXBzZWQoKSBjb25zdCB7IHJldHVybiBtX2lzQ29sbGFwc2VkOyB9
CisKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgbV9zdGFydCB7IDAgfTsKKyAgICB1bnNpZ25lZCBt
X2xlbmd0aCB7IDAgfTsKKyAgICBib29sIG1faXNXaGl0ZXNwYWNlIHsgZmFsc2UgfTsKKyAgICBi
b29sIG1faXNDb2xsYXBzZWQgeyBmYWxzZSB9OworfTsKKworfQorfQorCitTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0lOTElORV9JVEVNKElubGluZVRleHRJdGVtLCBpc1RleHQoKSkKKworI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy90ZXh0
L1RleHRVdGlsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL3Rl
eHQvVGV4dFV0aWwuY3BwCmluZGV4IDM3NWVkNzIzY2QyYjI5ODRkZjczZTBlNzMyMTFiYTAyODQx
OGZlMDguLmMxMzllYWJhNzU3Njk2ZDNjODc2ZjQ0NGRjYzk3ZmVjN2MzYTYzZWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL3RleHQvVGV4dFV0aWwu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL3RleHQvVGV4
dFV0aWwuY3BwCkBAIC0zNCwxOSArMzQsMTkgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVz
cGFjZSBMYXlvdXQgewogCi1PcHRpb25hbDxJdGVtUG9zaXRpb24+IFRleHRVdGlsOjpoeXBoZW5Q
b3NpdGlvbkJlZm9yZShjb25zdCBJbmxpbmVJdGVtJiwgSXRlbVBvc2l0aW9uLCB1bnNpZ25lZCkK
K09wdGlvbmFsPHVuc2lnbmVkPiBUZXh0VXRpbDo6aHlwaGVuUG9zaXRpb25CZWZvcmUoY29uc3Qg
SW5saW5lSXRlbSYsIHVuc2lnbmVkLCB1bnNpZ25lZCkKIHsKICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogfQogCi1MYXlvdXRVbml0IFRleHRVdGlsOjp3aWR0aChjb25zdCBJbmxpbmVJdGVtJiBp
bmxpbmVUZXh0SXRlbSwgSXRlbVBvc2l0aW9uIGZyb20sIEl0ZW1Qb3NpdGlvbiB0bywgTGF5b3V0
VW5pdCBjb250ZW50TG9naWNhbExlZnQpCitMYXlvdXRVbml0IFRleHRVdGlsOjp3aWR0aChjb25z
dCBJbmxpbmVCb3gmIGlubGluZUJveCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8sIExheW91
dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0KQogewotICAgIGF1dG8mIHN0eWxlID0gaW5saW5lVGV4
dEl0ZW0uc3R5bGUoKTsKKyAgICBhdXRvJiBzdHlsZSA9IGlubGluZUJveC5zdHlsZSgpOwogICAg
IGF1dG8mIGZvbnQgPSBzdHlsZS5mb250Q2FzY2FkZSgpOwogICAgIGlmICghZm9udC5zaXplKCkg
fHwgZnJvbSA9PSB0bykKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBhdXRvIHRleHQgPSBpbmxp
bmVUZXh0SXRlbS50ZXh0Q29udGVudCgpOworICAgIGF1dG8gdGV4dCA9IGlubGluZUJveC50ZXh0
Q29udGVudCgpOwogICAgIEFTU0VSVCh0byA8PSB0ZXh0Lmxlbmd0aCgpKTsKIAogICAgIGlmIChm
b250LmlzRml4ZWRQaXRjaCgpKQpAQCAtNzAsNyArNzAsNyBAQCBMYXlvdXRVbml0IFRleHRVdGls
Ojp3aWR0aChjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVUZXh0SXRlbSwgSXRlbVBvc2l0aW9uIGZy
b20sCiAgICAgcmV0dXJuIHN0ZDo6bWF4PExheW91dFVuaXQ+KDAsIHdpZHRoKTsKIH0KIAotTGF5
b3V0VW5pdCBUZXh0VXRpbDo6Zml4ZWRQaXRjaFdpZHRoKFN0cmluZyB0ZXh0LCBjb25zdCBSZW5k
ZXJTdHlsZSYgc3R5bGUsIEl0ZW1Qb3NpdGlvbiBmcm9tLCBJdGVtUG9zaXRpb24gdG8sIExheW91
dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0KQorTGF5b3V0VW5pdCBUZXh0VXRpbDo6Zml4ZWRQaXRj
aFdpZHRoKFN0cmluZyB0ZXh0LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIHVuc2lnbmVkIGZy
b20sIHVuc2lnbmVkIHRvLCBMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsTGVmdCkKIHsKICAgICBh
dXRvJiBmb250ID0gc3R5bGUuZm9udENhc2NhZGUoKTsKICAgICBhdXRvIG1vbm9zcGFjZUNoYXJh
Y3RlcldpZHRoID0gZm9udC5zcGFjZVdpZHRoKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy90ZXh0L1RleHRVdGlsLmggYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy90ZXh0L1RleHRVdGlsLmgKaW5kZXggODM2YTllYzQw
ZDNhNzJlYjkyNjc0YTUzYjM3MmU1MGQyZjNkYWNiNy4uZDBmZWE2YWQxZGRkNzI5ZDc0ZjliZGZi
MWJjOWQyMWM5ODdkMmUwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvdGV4dC9UZXh0VXRpbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9p
bmxpbmVmb3JtYXR0aW5nL3RleHQvVGV4dFV0aWwuaApAQCAtMjgsMTggKzI4LDE3IEBACiAjaWYg
RU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCiAKICNpbmNsdWRlICJJbmxpbmVJdGVt
LmgiCi0jaW5jbHVkZSAiSW5saW5lUnVuUHJvdmlkZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogbmFtZXNwYWNlIExheW91dCB7CiAKIGNsYXNzIFRleHRVdGlsIHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgTGF5b3V0VW5pdCB3aWR0aChjb25zdCBJbmxpbmVJdGVtJiwgSXRlbVBvc2l0aW9uIGZy
b20sIEl0ZW1Qb3NpdGlvbiB0bywgTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbExlZnQpOwotICAg
IHN0YXRpYyBPcHRpb25hbDxJdGVtUG9zaXRpb24+IGh5cGhlblBvc2l0aW9uQmVmb3JlKGNvbnN0
IElubGluZUl0ZW0mLCBJdGVtUG9zaXRpb24gZnJvbSwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBz
dGF0aWMgTGF5b3V0VW5pdCB3aWR0aChjb25zdCBJbmxpbmVCb3gmLCB1bnNpZ25lZCBmcm9tLCB1
bnNpZ25lZCB0bywgTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbExlZnQpOworICAgIHN0YXRpYyBP
cHRpb25hbDx1bnNpZ25lZD4gaHlwaGVuUG9zaXRpb25CZWZvcmUoY29uc3QgSW5saW5lSXRlbSYs
IHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbmd0aCk7CiAKIHByaXZhdGU6Ci0gICAgc3RhdGlj
IExheW91dFVuaXQgZml4ZWRQaXRjaFdpZHRoKFN0cmluZywgY29uc3QgUmVuZGVyU3R5bGUmLCBJ
dGVtUG9zaXRpb24gZnJvbSwgSXRlbVBvc2l0aW9uIHRvLCBMYXlvdXRVbml0IGNvbnRlbnRMb2dp
Y2FsTGVmdCk7CisgICAgc3RhdGljIExheW91dFVuaXQgZml4ZWRQaXRjaFdpZHRoKFN0cmluZywg
Y29uc3QgUmVuZGVyU3R5bGUmLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bywgTGF5b3V0VW5p
dCBjb250ZW50TG9naWNhbExlZnQpOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0UmVwbGFjZWQuY3BwIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2xheW91dHRyZWUvTGF5b3V0UmVwbGFjZWQuY3BwCmluZGV4IDAwY2Q1ZDA2ODI5OGIx
NjYzYWNmZmM5ZDQ5ZjBmZmIxYjY1YzRmMjMuLjk2NGE2YjM2YjRmNTNhNDM1MDQ3MjIyN2Q4MWY0
NzFlNjVlZjAzYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9sYXlvdXR0cmVl
L0xheW91dFJlcGxhY2VkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvbGF5b3V0dHJl
ZS9MYXlvdXRSZXBsYWNlZC5jcHAKQEAgLTgwLDcgKzgwLDcgQEAgTGF5b3V0VW5pdCBSZXBsYWNl
ZDo6aW50cmluc2ljUmF0aW8oKSBjb25zdAogICAgIEFTU0VSVChoYXNJbnRyaW5zaWNSYXRpbygp
IHx8IChoYXNJbnRyaW5zaWNXaWR0aCgpICYmIGhhc0ludHJpbnNpY0hlaWdodCgpKSk7CiAgICAg
aWYgKG1faW50cmluc2ljUmF0aW8pCiAgICAgICAgIHJldHVybiAqbV9pbnRyaW5zaWNSYXRpbzsK
LSAgICBpZiAobV9pbnRyaW5zaWNTaXplKQorICAgIGlmIChtX2ludHJpbnNpY1NpemUgJiYgbV9p
bnRyaW5zaWNTaXplLT5oZWlnaHQoKSkKICAgICAgICAgcmV0dXJuIG1faW50cmluc2ljU2l6ZS0+
d2lkdGgoKSAvIG1faW50cmluc2ljU2l6ZS0+aGVpZ2h0KCk7CiAgICAgcmV0dXJuIDE7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRUcmVlQnVp
bGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRUcmVlQnVp
bGRlci5jcHAKaW5kZXggZTYxMDJkY2FlZDRhZjgzNGZhMDBlYTRlNGI3MmU2Y2ZmYWI4Njk3Zi4u
NGNjMjMzOTViNDM0NjVmNWRhZGM2YmU3YzA2MDNjM2NjYjY1M2UzOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0VHJlZUJ1aWxkZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9sYXlvdXR0cmVlL0xheW91dFRyZWVCdWlsZGVyLmNwcApA
QCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQog
CiAjaW5jbHVkZSAiRGlzcGxheUJveC5oIgorI2luY2x1ZGUgIkRpc3BsYXlSdW4uaCIKICNpbmNs
dWRlICJJbmxpbmVGb3JtYXR0aW5nU3RhdGUuaCIKICNpbmNsdWRlICJMYXlvdXRCbG9ja0NvbnRh
aW5lci5oIgogI2luY2x1ZGUgIkxheW91dEJveC5oIgpAQCAtNjAsNiArNjEsMTUgQEAgc3RkOjp1
bmlxdWVfcHRyPENvbnRhaW5lcj4gVHJlZUJ1aWxkZXI6OmNyZWF0ZUxheW91dFRyZWUoY29uc3Qg
UmVuZGVyVmlldyYgcmVuZGUKICAgICByZXR1cm4gaW5pdGlhbENvbnRhaW5pbmdCbG9jazsKIH0K
IAorc3RhdGljIE9wdGlvbmFsPExheW91dFNpemU+IGFjY3VtdWxhdGVkT2Zmc2V0Rm9ySW5GbG93
UG9zaXRpb25lZENvbnRpbnVhdGlvbihjb25zdCBSZW5kZXJCbG9jayYgYmxvY2spCit7CisgICAg
Ly8gRklYRTogVGhpcyBpcyBhIHdvcmthcm91bmQgb2YgdGhlIGNvbnRpbnVhdGlvbiBsb2dpYyB3
aGVuIHRoZSByZWxhdGl2ZWx5IHBvc2l0aW9uZWQgcGFyZW50IGlubGluZSBib3gKKyAgICAvLyBi
ZWNvbWVzIGEgc2libGluZyBib3ggb2YgdGhpcyBibG9jayBhbmQgb25seSByZWFjaGFibGUgdGhy
b3VnaCB0aGUgY29udGludWF0aW9uIGxpbmsgd2hpY2ggd2UgZG9uJ3QgaGF2ZSBoZXJlLgorICAg
IGlmICghYmxvY2suaXNBbm9ueW1vdXMoKSB8fCAhYmxvY2suaXNJbkZsb3dQb3NpdGlvbmVkKCkg
fHwgIWJsb2NrLmlzQ29udGludWF0aW9uKCkpCisgICAgICAgIHJldHVybiB7IH07CisgICAgcmV0
dXJuIGJsb2NrLnJlbGF0aXZlUG9zaXRpb25PZmZzZXQoKTsKK30KKwogdm9pZCBUcmVlQnVpbGRl
cjo6Y3JlYXRlU3ViVHJlZShjb25zdCBSZW5kZXJFbGVtZW50JiByb290UmVuZGVyZXIsIENvbnRh
aW5lciYgcm9vdENvbnRhaW5lcikKIHsKICAgICBhdXRvIGVsZW1lbnRBdHRyaWJ1dGVzID0gW10g
KGNvbnN0IFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyKSAtPiBPcHRpb25hbDxCb3g6OkVsZW1lbnRB
dHRyaWJ1dGVzPiB7CkBAIC0xMTUsOSArMTI1LDE1IEBAIHZvaWQgVHJlZUJ1aWxkZXI6OmNyZWF0
ZVN1YlRyZWUoY29uc3QgUmVuZGVyRWxlbWVudCYgcm9vdFJlbmRlcmVyLCBDb250YWluZXImIHJv
CiAgICAgICAgIH0gZWxzZSBpZiAoaXM8UmVuZGVyRWxlbWVudD4oY2hpbGQpKSB7CiAgICAgICAg
ICAgICBhdXRvJiByZW5kZXJlciA9IGRvd25jYXN0PFJlbmRlckVsZW1lbnQ+KGNoaWxkKTsKICAg
ICAgICAgICAgIGF1dG8gZGlzcGxheSA9IHJlbmRlcmVyLnN0eWxlKCkuZGlzcGxheSgpOwotICAg
ICAgICAgICAgaWYgKGRpc3BsYXkgPT0gRGlzcGxheVR5cGU6OkJsb2NrKQotICAgICAgICAgICAg
ICAgIGJveCA9IHN0ZDo6bWFrZV91bmlxdWU8QmxvY2tDb250YWluZXI+KGVsZW1lbnRBdHRyaWJ1
dGVzKHJlbmRlcmVyKSwgUmVuZGVyU3R5bGU6OmNsb25lKHJlbmRlcmVyLnN0eWxlKCkpKTsKLSAg
ICAgICAgICAgIGVsc2UgaWYgKGRpc3BsYXkgPT0gRGlzcGxheVR5cGU6OklubGluZSkKKyAgICAg
ICAgICAgIGlmIChkaXNwbGF5ID09IERpc3BsYXlUeXBlOjpCbG9jaykgeworICAgICAgICAgICAg
ICAgIGlmIChhdXRvIG9mZnNldCA9IGFjY3VtdWxhdGVkT2Zmc2V0Rm9ySW5GbG93UG9zaXRpb25l
ZENvbnRpbnVhdGlvbihkb3duY2FzdDxSZW5kZXJCbG9jaz4ocmVuZGVyZXIpKSkgeworICAgICAg
ICAgICAgICAgICAgICBhdXRvIHN0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lUHRyKHJlbmRlcmVy
LnN0eWxlKCkpOworICAgICAgICAgICAgICAgICAgICBzdHlsZS0+c2V0VG9wKHsgb2Zmc2V0LT5o
ZWlnaHQoKSwgRml4ZWQgfSk7CisgICAgICAgICAgICAgICAgICAgIHN0eWxlLT5zZXRMZWZ0KHsg
b2Zmc2V0LT53aWR0aCgpLCBGaXhlZCB9KTsKKyAgICAgICAgICAgICAgICAgICAgYm94ID0gc3Rk
OjptYWtlX3VuaXF1ZTxCbG9ja0NvbnRhaW5lcj4oZWxlbWVudEF0dHJpYnV0ZXMocmVuZGVyZXIp
LCBXVEZNb3ZlKCpzdHlsZSkpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
ICAgICAgICBib3ggPSBzdGQ6Om1ha2VfdW5pcXVlPEJsb2NrQ29udGFpbmVyPihlbGVtZW50QXR0
cmlidXRlcyhyZW5kZXJlciksIFJlbmRlclN0eWxlOjpjbG9uZShyZW5kZXJlci5zdHlsZSgpKSk7
CisgICAgICAgICAgICB9IGVsc2UgaWYgKGRpc3BsYXkgPT0gRGlzcGxheVR5cGU6OklubGluZSkK
ICAgICAgICAgICAgICAgICBib3ggPSBzdGQ6Om1ha2VfdW5pcXVlPElubGluZUNvbnRhaW5lcj4o
ZWxlbWVudEF0dHJpYnV0ZXMocmVuZGVyZXIpLCBSZW5kZXJTdHlsZTo6Y2xvbmUocmVuZGVyZXIu
c3R5bGUoKSkpOwogICAgICAgICAgICAgZWxzZSBpZiAoZGlzcGxheSA9PSBEaXNwbGF5VHlwZTo6
SW5saW5lQmxvY2spCiAgICAgICAgICAgICAgICAgYm94ID0gc3RkOjptYWtlX3VuaXF1ZTxJbmxp
bmVDb250YWluZXI+KGVsZW1lbnRBdHRyaWJ1dGVzKHJlbmRlcmVyKSwgUmVuZGVyU3R5bGU6OmNs
b25lKHJlbmRlcmVyLnN0eWxlKCkpKTsKQEAgLTE2NiwxMSArMTgyLDExIEBAIHN0YXRpYyB2b2lk
IG91dHB1dElubGluZVJ1bnMoVGV4dFN0cmVhbSYgc3RyZWFtLCBjb25zdCBMYXlvdXRTdGF0ZSYg
bGF5b3V0U3RhdGUsCiAgICAgICAgIHdoaWxlICgrK3ByaW50ZWRDaGFyYWN0ZXJzIDw9IGRlcHRo
ICogMikKICAgICAgICAgICAgIHN0cmVhbSA8PCAiICI7CiAgICAgICAgIHN0cmVhbSA8PCAicnVu
IjsKLSAgICAgICAgaWYgKGlubGluZVJ1bi50ZXh0Q29udGV4dCgpKQotICAgICAgICAgICAgc3Ry
ZWFtIDw8ICIoIiA8PCBpbmxpbmVSdW4udGV4dENvbnRleHQoKS0+c3RhcnQoKSA8PCAiLCAiIDw8
IGlubGluZVJ1bi50ZXh0Q29udGV4dCgpLT5zdGFydCgpICsgaW5saW5lUnVuLnRleHRDb250ZXh0
KCktPmxlbmd0aCgpIDw8ICIpICI7CisgICAgICAgIGlmIChpbmxpbmVSdW4tPnRleHRDb250ZXh0
KCkpCisgICAgICAgICAgICBzdHJlYW0gPDwgIigiIDw8IGlubGluZVJ1bi0+dGV4dENvbnRleHQo
KS0+c3RhcnQoKSA8PCAiLCAiIDw8IGlubGluZVJ1bi0+dGV4dENvbnRleHQoKS0+c3RhcnQoKSAr
IGlubGluZVJ1bi0+dGV4dENvbnRleHQoKS0+bGVuZ3RoKCkgPDwgIikgIjsKICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgc3RyZWFtIDw8ICIoeCwgeCkgIjsKLSAgICAgICAgc3RyZWFtIDw8ICJh
dCBbIiA8PCBpbmxpbmVSdW4ubG9naWNhbExlZnQoKSA8PCAiLCAiIDw8IGlubGluZVJ1bi5sb2dp
Y2FsVG9wKCkgPDwgIl0gc2l6ZSBbIiA8PCBpbmxpbmVSdW4ubG9naWNhbFdpZHRoKCkgPDwgIiAi
IDw8IGlubGluZVJ1bi5sb2dpY2FsSGVpZ2h0KCkgPDwgIl0iOworICAgICAgICBzdHJlYW0gPDwg
ImF0IFsiIDw8IGlubGluZVJ1bi0+bG9naWNhbExlZnQoKSA8PCAiLCAiIDw8IGlubGluZVJ1bi0+
bG9naWNhbFRvcCgpIDw8ICJdIHNpemUgWyIgPDwgaW5saW5lUnVuLT5sb2dpY2FsV2lkdGgoKSA8
PCAiICIgPDwgaW5saW5lUnVuLT5sb2dpY2FsSGVpZ2h0KCkgPDwgIl0iOwogICAgICAgICBzdHJl
YW0ubmV4dExpbmUoKTsKICAgICB9CiB9CkBAIC0xODYsMTEgKzIwMiwxMyBAQCBzdGF0aWMgdm9p
ZCBvdXRwdXRMYXlvdXRCb3goVGV4dFN0cmVhbSYgc3RyZWFtLCBjb25zdCBCb3gmIGxheW91dEJv
eCwgY29uc3QgRGlzcAogICAgIGVsc2UgaWYgKGlzPElubGluZUJveD4obGF5b3V0Qm94KSkgewog
ICAgICAgICBpZiAobGF5b3V0Qm94LnJlcGxhY2VkKCkpCiAgICAgICAgICAgICBzdHJlYW0gPDwg
ImlubGluZSByZXBsYWNlZCBib3giOwotICAgICAgICBlbHNlIGlmIChkb3duY2FzdDxJbmxpbmVC
b3g+KGxheW91dEJveCkuaGFzVGV4dENvbnRlbnQoKSkgewotICAgICAgICAgICAgYXV0byB0ZXh0
Q29udGVudCA9IGRvd25jYXN0PElubGluZUJveD4obGF5b3V0Qm94KS50ZXh0Q29udGVudCgpOwot
ICAgICAgICAgICAgc3RyZWFtIDw8ICJpbmxpbmUgdGV4dCBbXCIiIDw8IHRleHRDb250ZW50LnV0
ZjgoKS5kYXRhKCkgPDwgIlwiXSI7Ci0gICAgICAgIH0gZWxzZQorICAgICAgICBlbHNlIGlmIChs
YXlvdXRCb3guaXNBbm9ueW1vdXMoKSkKKyAgICAgICAgICAgIHN0cmVhbSA8PCAiYW5vbnltb3Vz
IGlubGluZSBib3giOworICAgICAgICBlbHNlCiAgICAgICAgICAgICBzdHJlYW0gPDwgImlubGlu
ZSBib3giOworCisgICAgICAgIGlmIChkb3duY2FzdDxJbmxpbmVCb3g+KGxheW91dEJveCkuaGFz
VGV4dENvbnRlbnQoKSkKKyAgICAgICAgICAgIHN0cmVhbSA8PCAiIHdpdGggdGV4dCBjb250ZW50
IFtcIiIgPDwgZG93bmNhc3Q8SW5saW5lQm94PihsYXlvdXRCb3gpLnRleHRDb250ZW50KCkudXRm
OCgpLmRhdGEoKSA8PCAiXCJdIjsKICAgICB9IGVsc2UgaWYgKGlzPEJsb2NrQ29udGFpbmVyPihs
YXlvdXRCb3gpKSB7CiAgICAgICAgIGlmICghbGF5b3V0Qm94LnBhcmVudCgpKQogICAgICAgICAg
ICAgc3RyZWFtIDw8ICJpbml0aWFsICI7CkBAIC0yMDEsMTAgKzIxOSw5IEBAIHN0YXRpYyB2b2lk
IG91dHB1dExheW91dEJveChUZXh0U3RyZWFtJiBzdHJlYW0sIGNvbnN0IEJveCYgbGF5b3V0Qm94
LCBjb25zdCBEaXNwCiAgICAgICAgIHN0cmVhbSA8PCAiYm94IjsKICAgICAvLyBGSVhNRTogSW5s
aW5lIHRleHQgcnVucyBkb24ndCBjcmVhdGUgZGlzcGxheSBib3hlcyB5ZXQuCiAgICAgaWYgKGRp
c3BsYXlCb3gpIHsKLSAgICAgICAgLy8gRklYTUU6IGRpc3BsYXkgYm94IGlzIG5vdCBjb21wbGV0
ZWx5IHNldCB5ZXQuCi0gICAgICAgIGlmICgoaXM8SW5saW5lQm94PihsYXlvdXRCb3gpIHx8IGlz
PElubGluZUNvbnRhaW5lcj4obGF5b3V0Qm94KSkgJiYgIWxheW91dEJveC5pc0Zsb2F0aW5nUG9z
aXRpb25lZCgpKQotICAgICAgICAgICAgc3RyZWFtIDw8ICIgYXQgWyIgPDwgIi4iIDw8ICIgIiA8
PCAiLiIgPDwgIl0gc2l6ZSBbIiA8PCBkaXNwbGF5Qm94LT53aWR0aCgpIDw8ICIgIiA8PCBkaXNw
bGF5Qm94LT5oZWlnaHQoKSA8PCAiXSI7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgaWYgKGlzPElu
bGluZUNvbnRhaW5lcj4obGF5b3V0Qm94KSkKKyAgICAgICAgICAgIHN0cmVhbSA8PCAiIGF0IFsi
IDw8IGRpc3BsYXlCb3gtPmxlZnQoKSA8PCAiXSB3aWR0aCBbIiA8PCBkaXNwbGF5Qm94LT53aWR0
aCgpIDw8ICJdIjsKKyAgICAgICAgZWxzZSBpZiAoIWxheW91dEJveC5pc0Fub255bW91cygpKQog
ICAgICAgICAgICAgc3RyZWFtIDw8ICIgYXQgWyIgPDwgZGlzcGxheUJveC0+bGVmdCgpIDw8ICIg
IiA8PCBkaXNwbGF5Qm94LT50b3AoKSA8PCAiXSBzaXplIFsiIDw8IGRpc3BsYXlCb3gtPndpZHRo
KCkgPDwgIiAiIDw8IGRpc3BsYXlCb3gtPmhlaWdodCgpIDw8ICJdIjsKICAgICB9CiAgICAgc3Ry
ZWFtIDw8ICIgWyIgPDwgJmxheW91dEJveCA8PCAiXSI7CmRpZmYgLS1naXQgYS9Ub29scy9MYXlv
dXRSZWxvYWRlZC9taXNjL0xGQy1wYXNzaW5nLXRlc3RzLnR4dCBiL1Rvb2xzL0xheW91dFJlbG9h
ZGVkL21pc2MvTEZDLXBhc3NpbmctdGVzdHMudHh0CmluZGV4IGNlZDAwOWVkZDRiMjg5OTViMjMw
YjFkYTQ4YmQ4NjFjYzM0ZDIzY2EuLjUwYzc2OThlMGZjOWRlNGRjYTU4ZGQzMzQ3NjI4MGE2NjNl
YzFlMTcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0xheW91dFJlbG9hZGVkL21pc2MvTEZDLXBhc3Npbmct
dGVzdHMudHh0CisrKyBiL1Rvb2xzL0xheW91dFJlbG9hZGVkL21pc2MvTEZDLXBhc3NpbmctdGVz
dHMudHh0CkBAIC00NzMsNyArNDczLDYgQEAgY3NzMi4xL3QwNTExLWMyMS1wc2V1ZC1saW5rLTAw
LWUuaHRtbAogY3NzMi4xL3QwNTExLWMyMS1wc2V1ZC1saW5rLTAxLWUuaHRtbAogY3NzMi4xL3Qw
NTExLWMyMS1wc2V1ZC1saW5rLTAyLWUuaHRtbAogY3NzMi4xL3QwNTExLWMyMS1wc2V1ZC1saW5r
LTAzLWUuaHRtbAotY3NzMi4xL3QwNjAyLWMxMy1pbmgtdW5kZXJsaW4tMDAtZS5odG1sCiBjc3My
LjEvdDA2MDMtYzExLWltcG9ydC0wMC1iLmh0bWwKIGNzczIuMS90MDgwMy1jNTUwMi1pbXJnbi1y
LTAwLWItYWcuaHRtbAogY3NzMi4xL3QwODAzLWM1NTAyLW1yZ24tci0wMi1jLmh0bWwKQEAgLTY0
Myw3ICs2NDIsNiBAQCBjc3MyLjEvdDA2MDQwMy1jMjEtcHNldS1pZC0wMC1lLWkuaHRtbAogY3Nz
Mi4xL3QwOTA1MDEtYzQxNC1mbHQtMDAtZC5odG1sCiBjc3MyLjEvdDA5MDUwMS1jNDE0LWZsdC0w
Mi1kLWcuaHRtbAogY3NzMi4xL3QxMDAzMDMtYzQxMi1ibG9ja3ctMDAtZC1hZy5odG1sCi1jc3My
LjEvdDEwMDgwMS1jNTQ0LXZhbGduLTA0LWQtYWdpLmh0bWwKIGNzczIuMS90MTAwODAxLWM1NDgt
bG4taHQtMDEtYi1hZy5odG1sCiBjc3MyLjEvdDEwMDgwMS1jNTQ4LWxuLWh0LTAyLWItYWcuaHRt
bAogY3NzMi4xL3QxMDA4MDEtYzU0OC1sbi1odC0wMy1kLWFnLmh0bWwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>368282</attachid>
            <date>2019-04-25 16:05:34 -0700</date>
            <delta_ts>2019-05-21 21:41:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-197198-20190425160530.patch</filename>
            <type>text/plain</type>
            <size>151819</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ0MDk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWYyZDVlM2FkZDNmOGMz
NjgxZDk0NWQ1YmZjYjQzZDVmZTI2MGQ3OS4uZTlhOThmMTE1ODJkMWFjYmQzMWY4NTAzMzc5M2Zl
NDAxYjcwN2JkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3MCBAQAorMjAxOS0wNC0yMyAgWmFs
YW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgorCisgICAgICAgIFtMRkNdW0lGQ10gSW50cm9k
dWNlIERpc3BsYXlSdW4gdG8gdGhlIGRpc3BsYXkgdHJlZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk3MTk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV0lQLgorCisgICAgICAgICogU291cmNlcy50eHQ6
CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IGxheW91dC9Gb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6Y29udGVudEhlaWdodEZvckZvcm1hdHRpbmdDb250ZXh0Um9vdCk6CisgICAgICAg
ICogbGF5b3V0L1ZlcmlmaWNhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OmFy
ZUVzc2VudGlhbGx5RXF1YWwpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpvdXRwdXRNaXNt
YXRjaGluZ1NpbXBsZUxpbmVJbmZvcm1hdGlvbklmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6Y2hlY2tGb3JNYXRjaGluZ05vblRleHRSdW5zKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6Y2hlY2tGb3JNYXRjaGluZ1RleHRSdW5zKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6b3V0cHV0TWlzbWF0Y2hpbmdDb21wbGV4TGluZUluZm9ybWF0aW9uSWZOZWVkZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMYXlvdXRTdGF0ZTo6dmVyaWZ5QW5kT3V0cHV0TWlz
bWF0Y2hpbmdMYXlvdXRUcmVlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6cmVz
b2x2ZUZvclJlbGF0aXZlUG9zaXRpb25JZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgICogbGF5
b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRy
eTo6aW5GbG93Tm9uUmVwbGFjZWRIZWlnaHRBbmRNYXJnaW4pOgorICAgICAgICAqIGxheW91dC9k
aXNwbGF5dHJlZS9EaXNwbGF5Qm94Lmg6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3g6
Omhvcml6b250YWxNYXJnaW4gY29uc3QpOgorICAgICAgICAqIGxheW91dC9kaXNwbGF5dHJlZS9E
aXNwbGF5UnVuLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9y
bWF0dGluZy9JbmxpbmVSdW4uaC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJ1bjo6VGV4
dENvbnRleHQ6OnNldFN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJ1bjo6VGV4
dENvbnRleHQ6OnNldExlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSdW46OlRl
eHRDb250ZXh0OjpzdGFydCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSdW46
OlRleHRDb250ZXh0OjplbmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UnVu
OjpUZXh0Q29udGV4dDo6bGVuZ3RoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6
OlJ1bjo6bG9naWNhbFRvcExlZnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6
UnVuOjpsb2dpY2FsTGVmdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSdW46
OmxvZ2ljYWxSaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSdW46Omxv
Z2ljYWxUb3AgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UnVuOjpsb2dpY2Fs
Qm90dG9tIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJ1bjo6bG9naWNhbFdp
ZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJ1bjo6bG9naWNhbEhlaWdo
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSdW46OnNldExvZ2ljYWxXaWR0
aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSdW46OnNldExvZ2ljYWxMZWZ0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJ1bjo6c2V0TG9naWNhbFJpZ2h0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXk6OlJ1bjo6bW92ZVZlcnRpY2FsbHkpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheTo6UnVuOjptb3ZlSG9yaXpvbnRhbGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXk6OlJ1bjo6ZXhwYW5kVmVydGljYWxseSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
OjpSdW46OmV4cGFuZEhvcml6b250YWxseSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpS
dW46OmV4cGFuc2lvbk9wcG9ydHVuaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJ1
bjo6c2V0VGV4dENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UnVuOjp0ZXh0
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSdW46OnRleHRDb250ZXh0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJ1bjo6UnVuKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXk6OlJ1bjo6VGV4dENvbnRleHQ6OlRleHRDb250ZXh0KToKKyAgICAgICAg
KiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpsYXlvdXQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dDo6Y29tcHV0ZUludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUludHJpbnNpY1dp
ZHRoRm9yRmxvYXRCb3ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVG
b3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUludHJpbnNpY1dpZHRoRm9ySW5saW5lQmxvY2sgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6
aW5pdGlhbGl6ZVZlcnRpY2FsTWFyZ2luRm9ySW5saW5lQ29udGFpbmVyIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVIb3Jp
em9udGFsTWFyZ2luIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9y
bWF0dGluZ0NvbnRleHQ6OmNvbGxlY3RJbmxpbmVDb250ZW50IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVNYXJnaW4gY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjphZGREZXRhY2hpbmdSdWxl
cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OmNyZWF0ZUFuZEFwcGVuZElu
bGluZUl0ZW0pOiBEZWxldGVkLgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lu
bGluZUZvcm1hdHRpbmdDb250ZXh0Lmg6CisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRp
bmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6TGluZTo6cnVucyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6
OmlzRW1wdHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjppc0ZpcnN0
TGluZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6OmF2YWlsYWJsZVdp
ZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZTo6bG9naWNhbExlZnQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjpsb2dpY2FsUmlnaHQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjppbml0KToKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6TGluZTo6Y2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0Ojpp
c1RyaW1tYWJsZUNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjpoYXNU
cmFpbGluZ1doaXRlc3BhY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5l
Ojp0cmFpbGluZ1doaXRlc3BhY2VXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkxpbmU6Omhhc0NvbnRlbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpM
aW5lOjphcHBlbmROb25CcmVha2FibGVTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkxpbmU6OmFwcGVuZFRleHRDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGlu
ZTo6YXBwZW5kTm9uVGV4dENvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5l
OjphZGp1c3RMb2dpY2FsTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6OmFk
anVzdExvZ2ljYWxSaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1h
dHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpsYXlvdXQgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6Y2xvc2VMaW5l
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQ6OkxpbmVMYXlvdXQ6OmNvbW1pdElubGluZUl0ZW1Ub0xpbmUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6Y29t
cHV0ZUZsb2F0UG9zaXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxp
bmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6anVzdGlmeVJ1bnMpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6Y29t
cHV0ZUV4cGFuc2lvbk9wcG9ydHVuaXRpZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6YWxpZ25SdW5zIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZTo6Y29udGVudExvZ2ljYWxMZWZ0IGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZTo6bGFzdFJ1blR5
cGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjpjb250
ZW50TG9naWNhbFJpZ2h0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6TGluZTo6YXBwZW5kQ29udGVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpzcGxpdElubGluZVJ1bklm
TmVlZGVkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OmNyZWF0ZUZpbmFsUnVucyBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0
OjpMaW5lTGF5b3V0Ojpwb3N0UHJvY2Vzc0lubGluZVJ1bnMgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91
dDo6YXBwZW5kQ29udGVudFRvTGluZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpwbGFjZUluRmxv
d1Bvc2l0aW9uZWRDaGlsZHJlbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpydW5XaWR0aCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9y
bWF0dGluZ1N0YXRlLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRp
bmdTdGF0ZTo6aW5saW5lSXRlbXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVG
b3JtYXR0aW5nU3RhdGU6OmFkZElubGluZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpJbmxpbmVGb3JtYXR0aW5nU3RhdGU6OmFkZElubGluZVJ1bik6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdTdGF0ZTo6aW5saW5lQ29udGVudCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdTdGF0ZTo6bGFzdElu
bGluZUl0ZW0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxp
bmVGb3JtYXR0aW5nU3RhdGU6OmFwcGVuZElubGluZVJ1bik6IERlbGV0ZWQuCisgICAgICAgICog
bGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lSXRlbS5oOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpJbmxpbmVJdGVtOjp0eXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6SW5saW5lSXRlbTo6aXNUZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
SW5saW5lSXRlbTo6aXNCb3ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxp
bmVJdGVtOjppc0hhcmRMaW5lQnJlYWsgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpJbmxpbmVJdGVtOjppc0Zsb2F0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
SW5saW5lSXRlbTo6aXNMaW5lQnJlYWsgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpJbmxpbmVJdGVtOjppc0NvbnRhaW5lclN0YXJ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6SW5saW5lSXRlbTo6aXNDb250YWluZXJFbmQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpJbmxpbmVJdGVtOjpJbmxpbmVJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6SW5saW5lSXRlbTo6c2V0V2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpJbmxpbmVJdGVtOjp3aWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Oklu
bGluZUl0ZW06OmFkZERldGFjaGluZ1J1bGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpJbmxpbmVJdGVtOjpkZXRhY2hpbmdSdWxlcyBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUl0ZW06Om5vbkJyZWFrYWJsZVN0YXJ0IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lSXRlbTo6bm9uQnJl
YWthYmxlRW5kIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5s
aW5lSXRlbTo6YWRkTm9uQnJlYWthYmxlU3RhcnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpJbmxpbmVJdGVtOjphZGROb25CcmVha2FibGVFbmQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVJdGVtOjp0ZXh0Q29udGVudCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJyZWFr
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnJlYWtlcjo6TGluZUJyZWFr
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnJlYWtlcjo6YnJlYWtpbmdDb250
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJyZWFrZXI6OndvcmRCcmVha2lu
Z0JlaGF2aW9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJyZWFrZXI6
OnJ1bldpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJyZWFrZXI6
OnRleHRXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUxpbmVC
cmVha2VyOjpJbmxpbmVMaW5lQnJlYWtlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OklubGluZUxpbmVCcmVha2VyOjpuZXh0UnVuKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6SW5saW5lTGluZUJyZWFrZXI6OmlzQXRDb250ZW50RW5kIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lTGluZUJyZWFrZXI6Omxp
bmVCcmVha2luZ0JlaGF2aW9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
SW5saW5lTGluZUJyZWFrZXI6OnJ1bldpZHRoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6SW5saW5lTGluZUJyZWFrZXI6OnRleHRXaWR0aCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUxpbmVCcmVha2VyOjpzcGxpdFJ1
bik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUxpbmVCcmVha2Vy
OjphZGp1c3RTcGxpdFBvc2l0aW9uV2l0aEh5cGhlbmF0aW9uIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnJlYWtlci5oOgorICAg
ICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZVJ1blByb3ZpZGVyLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVSdW5Qcm92aWRl
ci5oOiBSZW1vdmVkLgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZVRl
eHRJdGVtLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OmlzV2hpdGVzcGFj
ZUNoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OmlzU29mdExpbmVCcmVhayk6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Om1vdmVUb05leHROb25XaGl0ZXNwYWNlUG9zaXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0Ojptb3ZlVG9OZXh0QnJlYWthYmxlUG9zaXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVUZXh0SXRlbTo6Y3JlYXRlQW5k
QXBwZW5kVGV4dEl0ZW1zKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lVGV4dEl0
ZW06OklubGluZVRleHRJdGVtKToKKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9J
bmxpbmVUZXh0SXRlbS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5l
Zm9ybWF0dGluZy90ZXh0L1RleHRVdGlsLmguCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Oklu
bGluZVRleHRJdGVtOjpzdGFydCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Oklu
bGluZVRleHRJdGVtOjplbmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxp
bmVUZXh0SXRlbTo6bGVuZ3RoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5s
aW5lVGV4dEl0ZW06OmlzV2hpdGVzcGFjZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OklubGluZVRleHRJdGVtOjppc0NvbGxhcHNlZCBjb25zdCk6CisgICAgICAgICogbGF5b3V0
L2lubGluZWZvcm1hdHRpbmcvdGV4dC9UZXh0VXRpbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OlRleHRVdGlsOjpoeXBoZW5Qb3NpdGlvbkJlZm9yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OlRleHRVdGlsOjp3aWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRl
eHRVdGlsOjpmaXhlZFBpdGNoV2lkdGgpOgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0
aW5nL3RleHQvVGV4dFV0aWwuaDoKKyAgICAgICAgKiBsYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRS
ZXBsYWNlZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlJlcGxhY2VkOjppbnRyaW5z
aWNSYXRpbyBjb25zdCk6CisgICAgICAgICogbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0VHJlZUJ1
aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpvdXRwdXRJbmxpbmVSdW5zKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6b3V0cHV0TGF5b3V0Qm94KToKKyAgICAgICAgKiBw
YWdlL0ZyYW1lVmlld0xheW91dENvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bGF5b3V0
VXNpbmdGb3JtYXR0aW5nQ29udGV4dCk6CisKIDIwMTktMDQtMDkgIFphbGFuIEJ1anRhcyAgPHph
bGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbQXV0b1NpemluZ10gQXZvaWQgbWFraW5nIHRleHQg
cGFyYWdyYXBocyBzY3JvbGwgaG9yaXpvbnRhbGx5IHdoZW4gdGhlcmUgaXMgYSB3aWRlIHRhYmxl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXMudHh0CmluZGV4IDIxOWM4YjcwZGM5ZjU4OWFlZjY4NmUzYjJkYTE0NmFiMzkwZjc4
MDUuLmQwNTFkYmNiOWRkZmM5Y2JiOTVjMDQ3NjE4ZTE2MmYxZGZkYWUzNTcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMu
dHh0CkBAIC0xMzQzLDcgKzEzNDMsNyBAQCBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVG
b3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQuY3BwCiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9J
bmxpbmVGb3JtYXR0aW5nU3RhdGUuY3BwCiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVJ
bnZhbGlkYXRpb24uY3BwCiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnJlYWtl
ci5jcHAKLWxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZVJ1blByb3ZpZGVyLmNwcAorbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lVGV4dEl0ZW0uY3BwCiBsYXlvdXQvaW5saW5lZm9y
bWF0dGluZy90ZXh0L1RleHRVdGlsLmNwcAogbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0QmxvY2tD
b250YWluZXIuY3BwCiBsYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRCb3guY3BwCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggOGEwOTI3
Y2M2NTRkYzYwNTZlOWFkY2MyMTYwYjkyYjYyYWY2ZDk3Yy4uZGE3NGI5OGI5NTJlZjVjNjdhNTIy
YWEyOTQ3ZWE0OTQ5MmUxMTM4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjAwNCwxMCArMjAwNCw5IEBACiAJCTZFRDg3OEM1
MTQ3NDkzRjQwMDRDMzU5NyAvKiBSZW5kZXJUYWJsZUNhcHRpb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFRDg3OEMzMTQ3NDkzRjQwMDRDMzU5NyAv
KiBSZW5kZXJUYWJsZUNhcHRpb24uaCAqLzsgfTsKIAkJNkVEOEMzN0ExODNCRkY4QzAwOUU1M0JE
IC8qIEJveFNoYXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA2RUQ4QzM3ODE4M0JGRjhDMDA5RTUzQkQgLyogQm94U2hhcGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2RUU4QTc3MzEwRjgwM0YzMDA1
QTRBMjQgLyogSlNXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUU4QTc3MTEwRjgwM0YzMDA1QTRBMjQgLyogSlNX
ZWJHTENvbnRleHRBdHRyaWJ1dGVzLmggKi87IH07Ci0JCTZGMjE5RDc3MjE3OEQzNzIwMEJCMDMz
QyAvKiBJbmxpbmVSdW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDZGMjE5RDc0MjE3OEQzNzEwMEJCMDMzQyAvKiBJbmxpbmVSdW4uaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk2RjFDQzFERTIyNUY4QjQ5
MDA3MjBBRDIgLyogSW5saW5lVGV4dEl0ZW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDZGMUNDMUREMjI1RjhCNDIwMDcyMEFEMiAvKiBJbmxpbmVUZXh0
SXRlbS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTZGMjIyQjc2MUFCNTJEOEEwMDk0NjUxQSAvKiBXZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RjIyMkI3
NTFBQjUyRDhBMDA5NDY1MUEgLyogV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2UuY3BwICovOyB9
OwogCQk2RjNFMUY2MjIxMzYxNDIwMDBBNjVBMDggLyogRmxvYXRCb3guaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZGM0UxRjYxMjEzNjE0MTcwMEE2NUEw
OCAvKiBGbG9hdEJveC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07Ci0JCTZGNTIxN0M3MjE3N0Y1QTcwMDY1ODNCQiAvKiBJbmxpbmVSdW5Qcm92aWRlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkY1MjE3QzQy
MTc3RjVBNjAwNjU4M0JCIC8qIElubGluZVJ1blByb3ZpZGVyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNkY3Q0EzQzYyMDhDMjk1NzAwMkYyOUFC
IC8qIExheW91dFN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA2RjdDQTNDNDIwOEMyOTU2MDAyRjI5QUIgLyogTGF5b3V0U3RhdGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2RjdDQTNDQTIwOEMy
QjJFMDAyRjI5QUIgLyogSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZGN0NBM0M4MjA4QzJCMkUwMDJGMjlBQiAv
KiBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTZGOTk1QTE1MUE3MDc1NjIwMEE3MzVGNCAvKiBXZWJHTFN5
bmMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkY5
OTVBMTMxQTcwNzU2MjAwQTczNUY0IC8qIFdlYkdMU3luYy5jcHAgKi87IH07CkBAIC0yMDI4LDYg
KzIwMjcsNyBAQAogCQk2RkE0NDU0RTg5OEYyRkMxNjhCQzM4QzEgLyogSlNCZWZvcmVVbmxvYWRF
dmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjlF
MDRBMjdCRUQyRjgxRjk4RTkwMjJCIC8qIEpTQmVmb3JlVW5sb2FkRXZlbnQuaCAqLzsgfTsKIAkJ
NkZCMTFCNUMyMTc4M0ZEMDAwRTJBNTc0IC8qIFRleHRVdGlsLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RkIxMUI1OTIxNzgzRkNGMDBFMkE1NzQgLyog
VGV4dFV0aWwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk2RkI1RTIxNDIyMUYyNDUzMDAzOTg5Q0YgLyogQ29udGVudENoYW5nZU9ic2VydmVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RkI1RTIxMjIy
MUYyNDQ3MDAzOTg5Q0YgLyogQ29udGVudENoYW5nZU9ic2VydmVyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNkZDRTFBMUEyMjYxOEFCRDAwNEYw
MzQzIC8qIERpc3BsYXlSdW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDZGQ0UxQTE4MjI2MThBQjMwMDRGMDM0MyAvKiBEaXNwbGF5UnVuLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNkZFMTk4MTcyMTc4
Mzk3QzAwNDQ2RjA4IC8qIElubGluZUxpbmVCcmVha2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RkUxOTgxNTIxNzgzOTdDMDA0NDZGMDggLyogSW5s
aW5lTGluZUJyZWFrZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk2RkU3Q0ZBMjIxNzdFRUYyMDA1QjE1NzMgLyogSW5saW5lSXRlbS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkZFN0NGQTAyMTc3RUVG
MTAwNUIxNTczIC8qIElubGluZUl0ZW0uaCAqLzsgfTsKIAkJNkZFN0NGQTQyMTc3RUYxMDAwNUIx
NTczIC8qIExheW91dExpbmVCcmVha0JveC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNkZFN0NGQTMyMTc3RUYxMDAwNUIxNTczIC8qIExheW91dExpbmVC
cmVha0JveC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CkBAIC05MDg1LDE1ICs5MDg1LDE0IEBACiAJCTZFRThBNzcwMTBGODAzRjMwMDVBNEEyNCAvKiBK
U1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNkVFOEE3NzExMEY4MDNGMzAwNUE0QTI0IC8qIEpTV2ViR0xDb250ZXh0QXR0
cmlidXRlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dlYkdMQ29udGV4
dEF0dHJpYnV0ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkYwODMwREYyMEI0
Njk1MTAwOEE5NDVCIC8qIEJsb2NrRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk2RjIxOUQ3NDIxNzhEMzcxMDBCQjAzM0MgLyogSW5saW5l
UnVuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElubGluZVJ1bi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RjFDQzFEQzIyNUY4QjQxMDA3MjBBRDIgLyogSW5s
aW5lVGV4dEl0ZW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5saW5lVGV4dEl0ZW0uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RjFDQzFERDIyNUY4QjQyMDA3MjBBRDIgLyog
SW5saW5lVGV4dEl0ZW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5saW5lVGV4dEl0ZW0uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkYyMjJCNzQxQUI1MkQ2NDAwOTQ2NTFBIC8qIFdlYkdM
VmVydGV4QXJyYXlPYmplY3RCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdMVmVydGV4QXJyYXlP
YmplY3RCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGMjIyQjc1MUFCNTJE
OEEwMDk0NjUxQSAvKiBXZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGMjVCMjAwMjIwQTg1QUIwMDAwMDExQiAv
KiBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSW5saW5lRm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNkYzNUVGQUYyMTg3Q0JENTAwNDRFMEY0IC8qIElubGluZUZvcm1hdHRp
bmdDb250ZXh0R2VvbWV0cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSW5saW5lRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTZGM0UxRjVGMjEzNjE0MTcwMEE2NUEwOCAvKiBGbG9hdEJveC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBGbG9hdEJveC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTZGM0UxRjYxMjEzNjE0MTcwMEE2NUEwOCAvKiBGbG9hdEJveC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGbG9hdEJveC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2RjUyMTdDNDIxNzdG
NUE2MDA2NTgzQkIgLyogSW5saW5lUnVuUHJvdmlkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW5saW5lUnVuUHJvdmlkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJNkY1MjE3QzYyMTc3RjVBNjAwNjU4M0JCIC8qIElubGluZVJ1blByb3ZpZGVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElubGluZVJ1blByb3ZpZGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkY3MzkxOEMyMTA2Q0VERDAwNkFGMjYy
IC8qIExheW91dFVuaXRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheW91dFVuaXRzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGN0NBM0M0MjA4QzI5NTYwMDJGMjlBQiAvKiBMYXlvdXRT
dGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBMYXlvdXRTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk2RjdDQTNDNTIwOEMyOTU2MDAyRjI5QUIgLyogTGF5b3V0U3RhdGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gTGF5b3V0U3RhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtOTEzMCw2ICs5MTI5LDcgQEAKIAkJNkZCMTFCNUIyMTc4M0ZDRjAwRTJBNTc0IC8q
IFRleHRVdGlsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRleHRV
dGlsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkZCNUUyMTIyMjFGMjQ0NzAw
Mzk4OUNGIC8qIENvbnRlbnRDaGFuZ2VPYnNlcnZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb250ZW50
Q2hhbmdlT2JzZXJ2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkZCQjg2MDUy
MEI0NjRCNjAwREFEOTM4IC8qIEZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTZGQ0UxQTE4MjI2MThBQjMwMDRGMDM0MyAvKiBEaXNwbGF5UnVuLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IERpc3BsYXlSdW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNkZFMTk4MTMyMTc4Mzk3QjAwNDQ2RjA4IC8qIElubGluZUxpbmVCcmVha2VyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElubGluZUxpbmVCcmVha2VyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkZFMTk4MTUyMTc4Mzk3QzAwNDQ2RjA4IC8q
IElubGluZUxpbmVCcmVha2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElu
bGluZUxpbmVCcmVha2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGRTdBQTI2
MjFDMzdCNjMwMDI5NkRDRCAvKiBNYXJnaW5UeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXJnaW5U
eXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTYzMzgsOSArMTYzMzgsOCBA
QAogCQkJCTZGRTdDRkEwMjE3N0VFRjEwMDVCMTU3MyAvKiBJbmxpbmVJdGVtLmggKi8sCiAJCQkJ
NkZFMTk4MTMyMTc4Mzk3QjAwNDQ2RjA4IC8qIElubGluZUxpbmVCcmVha2VyLmNwcCAqLywKIAkJ
CQk2RkUxOTgxNTIxNzgzOTdDMDA0NDZGMDggLyogSW5saW5lTGluZUJyZWFrZXIuaCAqLywKLQkJ
CQk2RjIxOUQ3NDIxNzhEMzcxMDBCQjAzM0MgLyogSW5saW5lUnVuLmggKi8sCi0JCQkJNkY1MjE3
QzYyMTc3RjVBNjAwNjU4M0JCIC8qIElubGluZVJ1blByb3ZpZGVyLmNwcCAqLywKLQkJCQk2RjUy
MTdDNDIxNzdGNUE2MDA2NTgzQkIgLyogSW5saW5lUnVuUHJvdmlkZXIuaCAqLywKKwkJCQk2RjFD
QzFEQzIyNUY4QjQxMDA3MjBBRDIgLyogSW5saW5lVGV4dEl0ZW0uY3BwICovLAorCQkJCTZGMUND
MUREMjI1RjhCNDIwMDcyMEFEMiAvKiBJbmxpbmVUZXh0SXRlbS5oICovLAogCQkJKTsKIAkJCXBh
dGggPSBpbmxpbmVmb3JtYXR0aW5nOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTE2
MzUwLDYgKzE2MzQ5LDcgQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCTExOTlGQTVBMjA4RTNDN0Yw
MDIzNThDQyAvKiBEaXNwbGF5Qm94LmNwcCAqLywKIAkJCQkxMTk5RkE1OTIwOEUzQzdGMDAyMzU4
Q0MgLyogRGlzcGxheUJveC5oICovLAorCQkJCTZGQ0UxQTE4MjI2MThBQjMwMDRGMDM0MyAvKiBE
aXNwbGF5UnVuLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IGRpc3BsYXl0cmVlOwogCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTI4NzYyLDYgKzI4NzYyLDcgQEAKIAkJCQkyRDI5RUNDQTE5
MkYxRjFEMDA5ODRCNzggLyogRGlzcGxheVJlZnJlc2hNb25pdG9ySU9TLmggaW4gSGVhZGVycyAq
LywKIAkJCQkyREU3MDAyMzE5MkZFODJBMDBCMDk3NUMgLyogRGlzcGxheVJlZnJlc2hNb25pdG9y
TWFjLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDI5RUNDODE5MkVDQzgzMDA5ODRCNzggLyogRGlz
cGxheVJlZnJlc2hNb25pdG9yTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNkZDRTFBMUEy
MjYxOEFCRDAwNEYwMzQzIC8qIERpc3BsYXlSdW4uaCBpbiBIZWFkZXJzICovLAogCQkJCUZEMzE2
MDkxMTJCMDI2RjcwMEMxQTM1OSAvKiBEaXN0YW5jZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODQ3
MzBENzcxMjQ4RjBCMzAwRDNBOUM5IC8qIERpc3RhbnRMaWdodFNvdXJjZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQjJGMzRGRTYwRTgyRjgxNDAwRjYyN0NEIC8qIEROUy5oIGluIEhlYWRlcnMgKi8s
CkBAIC0yOTM5MCwxMSArMjkzOTEsMTAgQEAKIAkJCQk2RkU3Q0ZBMjIxNzdFRUYyMDA1QjE1NzMg
LyogSW5saW5lSXRlbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFNzg5MTYxMTIwRDYwODAwNjBF
Q0U1IC8qIElubGluZUl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk2RkUxOTgxNzIxNzgz
OTdDMDA0NDZGMDggLyogSW5saW5lTGluZUJyZWFrZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTZG
MjE5RDc3MjE3OEQzNzIwMEJCMDMzQyAvKiBJbmxpbmVSdW4uaCBpbiBIZWFkZXJzICovLAotCQkJ
CTZGNTIxN0M3MjE3N0Y1QTcwMDY1ODNCQiAvKiBJbmxpbmVSdW5Qcm92aWRlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQUE0QzNBNzcwQjJCMTY3OTAwMjMzNEEyIC8qIElubGluZVN0eWxlU2hlZXRP
d25lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFQTQ4NUEwOTdEOTMwMjAwOTRDOUU0IC8qIElu
bGluZVRleHRCb3guaCBpbiBIZWFkZXJzICovLAogCQkJCTFDMDEwNzAxMTkyNTk0REYwMDhBNDIw
MSAvKiBJbmxpbmVUZXh0Qm94U3R5bGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTZGMUNDMURFMjI1
RjhCNDkwMDcyMEFEMiAvKiBJbmxpbmVUZXh0SXRlbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEw
QTU4RTUxQkFBNDBCMTAwQzE5MjgyIC8qIEluUHJvY2Vzc0lEQlNlcnZlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMkVCNzY3NTcxREExOUJERjAwM0UyM0I1IC8qIElucHV0RXZlbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUU1MkVGREY0MjExMjg3NUEwMEFEMjgyQSAvKiBJbnB1dE1vZGUuaCBpbiBI
ZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdD
b250ZXh0R2VvbWV0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdDb250
ZXh0R2VvbWV0cnkuY3BwCmluZGV4IDk2N2NmZDQ5OThiNmExYTA4OTdkMDYyZmYwZGJhYjVlZDVh
MTczZTcuLjE4OTYzYzM1NjZkMmMxZDUzZGRlNzA4MDU2NmM3YWNlOGIzYTg5YzYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAK
QEAgLTExMiw4ICsxMTIsOCBAQCBzdGF0aWMgTGF5b3V0VW5pdCBjb250ZW50SGVpZ2h0Rm9yRm9y
bWF0dGluZ0NvbnRleHRSb290KGNvbnN0IExheW91dFN0YXRlJiBsYXlvdQogICAgICAgICAvLyBU
aGlzIGlzIHRlbXAgYW5kIHdpbGwgYmUgcmVwbGFjZWQgYnkgdGhlIGNvcnJlY3QgZGlzcGxheSBi
b3ggb25jZSBpbmxpbmUgcnVucyBtb3ZlIG92ZXIgdG8gdGhlIGRpc3BsYXkgdHJlZS4KICAgICAg
ICAgYXV0byYgaW5saW5lUnVucyA9IGRvd25jYXN0PElubGluZUZvcm1hdHRpbmdTdGF0ZT4obGF5
b3V0U3RhdGUuZXN0YWJsaXNoZWRGb3JtYXR0aW5nU3RhdGUobGF5b3V0Qm94KSkuaW5saW5lUnVu
cygpOwogICAgICAgICBpZiAoIWlubGluZVJ1bnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICB0
b3AgPSBpbmxpbmVSdW5zWzBdLmxvZ2ljYWxUb3AoKTsKLSAgICAgICAgICAgIGJvdHRvbSA9ICBp
bmxpbmVSdW5zLmxhc3QoKS5sb2dpY2FsQm90dG9tKCk7CisgICAgICAgICAgICB0b3AgPSBpbmxp
bmVSdW5zWzBdLT5sb2dpY2FsVG9wKCk7CisgICAgICAgICAgICBib3R0b20gPSAgaW5saW5lUnVu
cy5sYXN0KCktPmxvZ2ljYWxCb3R0b20oKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoZm9y
bWF0dGluZ1Jvb3RDb250YWluZXIuZXN0YWJsaXNoZXNCbG9ja0Zvcm1hdHRpbmdDb250ZXh0KCkg
fHwgbGF5b3V0Qm94LmlzRG9jdW1lbnRCb3goKSkgewogICAgICAgICBpZiAoZm9ybWF0dGluZ1Jv
b3RDb250YWluZXIuaGFzSW5GbG93Q2hpbGQoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L1ZlcmlmaWNhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvVmVyaWZp
Y2F0aW9uLmNwcAppbmRleCAyZTc3YzM5ZTkyMTQ0OTQyZWYyOWU0MGU0Yzc0MzZlNTExMjAwYmMy
Li5mMDZlM2RlYmYzNzRjYzAzMTFiZDNkNjQ2ODczMGZiMGMyMjUxZjRlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvVmVyaWZpY2F0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvVmVyaWZpY2F0aW9uLmNwcApAQCAtNDYsNyArNDYsNyBAQCBzdGF0aWMgYm9vbCBh
cmVFc3NlbnRpYWxseUVxdWFsKGZsb2F0IGEsIExheW91dFVuaXQgYikKICAgICBpZiAoYSA9PSBi
LnRvRmxvYXQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICByZXR1cm4gZmFicyhhIC0g
Yi50b0Zsb2F0KCkpIDw9IDggKiBMYXlvdXRVbml0OjplcHNpbG9uKCk7CisgICAgcmV0dXJuIGZh
YnMoYSAtIGIudG9GbG9hdCgpKSA8PSAxMCAqIExheW91dFVuaXQ6OmVwc2lsb24oKTsKIH0KIAog
c3RhdGljIGJvb2wgb3V0cHV0TWlzbWF0Y2hpbmdTaW1wbGVMaW5lSW5mb3JtYXRpb25JZk5lZWRl
ZChUZXh0U3RyZWFtJiBzdHJlYW0sIGNvbnN0IExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgY29u
c3QgUmVuZGVyQmxvY2tGbG93JiBibG9ja0Zsb3csIGNvbnN0IENvbnRhaW5lciYgaW5saW5lRm9y
bWF0dGluZ1Jvb3QpCkBAIC03MiwzMyArNzIsMzMgQEAgc3RhdGljIGJvb2wgb3V0cHV0TWlzbWF0
Y2hpbmdTaW1wbGVMaW5lSW5mb3JtYXRpb25JZk5lZWRlZChUZXh0U3RyZWFtJiBzdHJlYW0sIGMK
ICAgICAgICAgYXV0byYgc2ltcGxlUnVuID0gbGluZUxheW91dERhdGEtPnJ1bkF0KGkpOwogICAg
ICAgICBhdXRvJiBpbmxpbmVSdW4gPSBpbmxpbmVSdW5MaXN0W2ldOwogCi0gICAgICAgIGF1dG8g
bWF0Y2hpbmdSdW5zID0gYXJlRXNzZW50aWFsbHlFcXVhbChzaW1wbGVSdW4ubG9naWNhbExlZnQs
IGlubGluZVJ1bi5sb2dpY2FsTGVmdCgpKSAmJiBhcmVFc3NlbnRpYWxseUVxdWFsKHNpbXBsZVJ1
bi5sb2dpY2FsUmlnaHQsIGlubGluZVJ1bi5sb2dpY2FsUmlnaHQoKSk7CisgICAgICAgIGF1dG8g
bWF0Y2hpbmdSdW5zID0gYXJlRXNzZW50aWFsbHlFcXVhbChzaW1wbGVSdW4ubG9naWNhbExlZnQs
IGlubGluZVJ1bi0+bG9naWNhbExlZnQoKSkgJiYgYXJlRXNzZW50aWFsbHlFcXVhbChzaW1wbGVS
dW4ubG9naWNhbFJpZ2h0LCBpbmxpbmVSdW4tPmxvZ2ljYWxSaWdodCgpKTsKICAgICAgICAgaWYg
KG1hdGNoaW5nUnVucykKLSAgICAgICAgICAgIG1hdGNoaW5nUnVucyA9IChzaW1wbGVSdW4uc3Rh
cnQgPT0gaW5saW5lUnVuLnRleHRDb250ZXh0KCktPnN0YXJ0KCkgJiYgc2ltcGxlUnVuLmVuZCA9
PSAoaW5saW5lUnVuLnRleHRDb250ZXh0KCktPnN0YXJ0KCkgKyBpbmxpbmVSdW4udGV4dENvbnRl
eHQoKS0+bGVuZ3RoKCkpKTsKKyAgICAgICAgICAgIG1hdGNoaW5nUnVucyA9IHNpbXBsZVJ1bi5z
dGFydCA9PSBpbmxpbmVSdW4tPnRleHRDb250ZXh0KCktPnN0YXJ0KCkgJiYgc2ltcGxlUnVuLmVu
ZCA9PSBpbmxpbmVSdW4tPnRleHRDb250ZXh0KCktPmVuZCgpOwogICAgICAgICBpZiAobWF0Y2hp
bmdSdW5zKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgc3RyZWFtIDw8ICJNaXNt
YXRjaGluZzogc2ltcGxlIHJ1bigiIDw8IHNpbXBsZVJ1bi5zdGFydCA8PCAiLCAiIDw8IHNpbXBs
ZVJ1bi5lbmQgPDwgIikgKCIgPDwgc2ltcGxlUnVuLmxvZ2ljYWxMZWZ0IDw8ICIsICIgPDwgc2lt
cGxlUnVuLmxvZ2ljYWxSaWdodCA8PCAiKSBsYXlvdXQgcnVuKCIgPDwgaW5saW5lUnVuLnRleHRD
b250ZXh0KCktPnN0YXJ0KCkgPDwgIiwgIiA8PCBpbmxpbmVSdW4udGV4dENvbnRleHQoKS0+c3Rh
cnQoKSArIGlubGluZVJ1bi50ZXh0Q29udGV4dCgpLT5sZW5ndGgoKSA8PCAiKSAoIiA8PCBpbmxp
bmVSdW4ubG9naWNhbExlZnQoKSA8PCAiLCAiIDw8IGlubGluZVJ1bi5sb2dpY2FsUmlnaHQoKSA8
PCAiKSI7CisgICAgICAgIHN0cmVhbSA8PCAiTWlzbWF0Y2hpbmc6IHNpbXBsZSBydW4oIiA8PCBz
aW1wbGVSdW4uc3RhcnQgPDwgIiwgIiA8PCBzaW1wbGVSdW4uZW5kIDw8ICIpICgiIDw8IHNpbXBs
ZVJ1bi5sb2dpY2FsTGVmdCA8PCAiLCAiIDw8IHNpbXBsZVJ1bi5sb2dpY2FsUmlnaHQgPDwgIikg
bGF5b3V0IHJ1bigiIDw8IGlubGluZVJ1bi0+dGV4dENvbnRleHQoKS0+c3RhcnQoKSA8PCAiLCAi
IDw8IGlubGluZVJ1bi0+dGV4dENvbnRleHQoKS0+ZW5kKCkgPDwgIikgKCIgPDwgaW5saW5lUnVu
LT5sb2dpY2FsTGVmdCgpIDw8ICIsICIgPDwgaW5saW5lUnVuLT5sb2dpY2FsUmlnaHQoKSA8PCAi
KSI7CiAgICAgICAgIHN0cmVhbS5uZXh0TGluZSgpOwogICAgICAgICBtaXNtYXRjaGVkID0gdHJ1
ZTsKICAgICB9CiAgICAgcmV0dXJuIG1pc21hdGNoZWQ7CiB9CiAKLXN0YXRpYyBib29sIGNoZWNr
Rm9yTWF0Y2hpbmdOb25UZXh0UnVucyhjb25zdCBJbmxpbmVSdW4mIGlubGluZVJ1biwgY29uc3Qg
V2ViQ29yZTo6SW5saW5lQm94JiBpbmxpbmVCb3gpCitzdGF0aWMgYm9vbCBjaGVja0Zvck1hdGNo
aW5nTm9uVGV4dFJ1bnMoY29uc3QgRGlzcGxheTo6UnVuJiBpbmxpbmVSdW4sIGNvbnN0IFdlYkNv
cmU6OklubGluZUJveCYgaW5saW5lQm94KQogewogICAgIHJldHVybiBhcmVFc3NlbnRpYWxseUVx
dWFsKGlubGluZUJveC5sb2dpY2FsTGVmdCgpLCBpbmxpbmVSdW4ubG9naWNhbExlZnQoKSkKICAg
ICAgICAgJiYgYXJlRXNzZW50aWFsbHlFcXVhbChpbmxpbmVCb3gubG9naWNhbFJpZ2h0KCksIGlu
bGluZVJ1bi5sb2dpY2FsUmlnaHQoKSkKICAgICAgICAgJiYgYXJlRXNzZW50aWFsbHlFcXVhbChp
bmxpbmVCb3gubG9naWNhbEhlaWdodCgpLCBpbmxpbmVSdW4ubG9naWNhbEhlaWdodCgpKTsKIH0K
IAotc3RhdGljIGJvb2wgY2hlY2tGb3JNYXRjaGluZ1RleHRSdW5zKGNvbnN0IElubGluZVJ1biYg
aW5saW5lUnVuLCBmbG9hdCBsb2dpY2FsTGVmdCwgZmxvYXQgbG9naWNhbFJpZ2h0LCB1bnNpZ25l
ZCBzdGFydCwgdW5zaWduZWQgZW5kLCBmbG9hdCBsb2dpY2FsSGVpZ2h0KQorc3RhdGljIGJvb2wg
Y2hlY2tGb3JNYXRjaGluZ1RleHRSdW5zKGNvbnN0IERpc3BsYXk6OlJ1biYgaW5saW5lUnVuLCBj
b25zdCBJbmxpbmVUZXh0Qm94JiBpbmxpbmVUZXh0Qm94KQogewotICAgIHJldHVybiBhcmVFc3Nl
bnRpYWxseUVxdWFsKGxvZ2ljYWxMZWZ0LCBpbmxpbmVSdW4ubG9naWNhbExlZnQoKSkKLSAgICAg
ICAgJiYgYXJlRXNzZW50aWFsbHlFcXVhbChsb2dpY2FsUmlnaHQsIGlubGluZVJ1bi5sb2dpY2Fs
UmlnaHQoKSkKLSAgICAgICAgJiYgc3RhcnQgPT0gaW5saW5lUnVuLnRleHRDb250ZXh0KCktPnN0
YXJ0KCkKLSAgICAgICAgJiYgKGVuZCA9PSAoaW5saW5lUnVuLnRleHRDb250ZXh0KCktPnN0YXJ0
KCkgKyBpbmxpbmVSdW4udGV4dENvbnRleHQoKS0+bGVuZ3RoKCkpKQotICAgICAgICAmJiBhcmVF
c3NlbnRpYWxseUVxdWFsKGxvZ2ljYWxIZWlnaHQsIGlubGluZVJ1bi5sb2dpY2FsSGVpZ2h0KCkp
OworICAgIHJldHVybiBhcmVFc3NlbnRpYWxseUVxdWFsKGlubGluZVRleHRCb3gubG9naWNhbExl
ZnQoKSwgaW5saW5lUnVuLmxvZ2ljYWxMZWZ0KCkpCisgICAgICAgICYmIGFyZUVzc2VudGlhbGx5
RXF1YWwoaW5saW5lVGV4dEJveC5sb2dpY2FsUmlnaHQoKSwgaW5saW5lUnVuLmxvZ2ljYWxSaWdo
dCgpKQorICAgICAgICAmJiBpbmxpbmVUZXh0Qm94LnN0YXJ0KCkgPT0gaW5saW5lUnVuLnRleHRD
b250ZXh0KCktPnN0YXJ0KCkKKyAgICAgICAgJiYgKGlubGluZVRleHRCb3guZW5kKCkgKyAxKSA9
PSBpbmxpbmVSdW4udGV4dENvbnRleHQoKS0+ZW5kKCkKKyAgICAgICAgJiYgYXJlRXNzZW50aWFs
bHlFcXVhbChpbmxpbmVUZXh0Qm94LmxvZ2ljYWxIZWlnaHQoKSwgaW5saW5lUnVuLmxvZ2ljYWxI
ZWlnaHQoKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGNvbGxlY3RGbG93Qm94U3VidHJlZShjb25zdCBJ
bmxpbmVGbG93Qm94JiBmbG93Ym94LCBWZWN0b3I8V2ViQ29yZTo6SW5saW5lQm94Kj4mIGlubGlu
ZUJveGVzKQpAQCAtMTI2LDE5ICsxMjYsNiBAQCBzdGF0aWMgdm9pZCBjb2xsZWN0SW5saW5lQm94
ZXMoY29uc3QgUmVuZGVyQmxvY2tGbG93JiByb290LCBWZWN0b3I8V2ViQ29yZTo6SW5saQogICAg
IH0KIH0KIAotc3RhdGljIExheW91dFVuaXQgcmVzb2x2ZUZvclJlbGF0aXZlUG9zaXRpb25JZk5l
ZWRlZChjb25zdCBJbmxpbmVUZXh0Qm94JiBpbmxpbmVUZXh0Qm94KQotewotICAgIExheW91dFVu
aXQgeE9mZnNldDsKLSAgICBhdXRvKiBwYXJlbnQgPSBpbmxpbmVUZXh0Qm94LnBhcmVudCgpOwot
ICAgIHdoaWxlIChpczxJbmxpbmVGbG93Qm94PihwYXJlbnQpKSB7Ci0gICAgICAgIGF1dG8mIHJl
bmRlcmVyID0gcGFyZW50LT5yZW5kZXJlcigpOwotICAgICAgICBpZiAocmVuZGVyZXIuaXNJbkZs
b3dQb3NpdGlvbmVkKCkpCi0gICAgICAgICAgICB4T2Zmc2V0ID0gcmVuZGVyZXIub2Zmc2V0Rm9y
SW5GbG93UG9zaXRpb24oKS53aWR0aCgpOwotICAgICAgICBwYXJlbnQgPSBwYXJlbnQtPnBhcmVu
dCgpOwotICAgIH0KLSAgICByZXR1cm4geE9mZnNldDsKLX0KLQogc3RhdGljIGJvb2wgb3V0cHV0
TWlzbWF0Y2hpbmdDb21wbGV4TGluZUluZm9ybWF0aW9uSWZOZWVkZWQoVGV4dFN0cmVhbSYgc3Ry
ZWFtLCBjb25zdCBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IFJlbmRlckJsb2NrRmxv
dyYgYmxvY2tGbG93LCBjb25zdCBDb250YWluZXImIGlubGluZUZvcm1hdHRpbmdSb290KQogewog
ICAgIGF1dG8mIGlubGluZUZvcm1hdHRpbmdTdGF0ZSA9IGxheW91dFN0YXRlLmVzdGFibGlzaGVk
Rm9ybWF0dGluZ1N0YXRlKGlubGluZUZvcm1hdHRpbmdSb290KTsKQEAgLTE1OCw1NCArMTQ1LDEw
IEBAIHN0YXRpYyBib29sIG91dHB1dE1pc21hdGNoaW5nQ29tcGxleExpbmVJbmZvcm1hdGlvbklm
TmVlZGVkKFRleHRTdHJlYW0mIHN0cmVhbSwKICAgICB9CiAKICAgICBmb3IgKHVuc2lnbmVkIGlu
bGluZUJveEluZGV4ID0gMDsgaW5saW5lQm94SW5kZXggPCBpbmxpbmVCb3hlcy5zaXplKCkgJiYg
cnVuSW5kZXggPCBpbmxpbmVSdW5MaXN0LnNpemUoKTsgKytpbmxpbmVCb3hJbmRleCkgeworICAg
ICAgICBhdXRvJiBpbmxpbmVSdW4gPSBpbmxpbmVSdW5MaXN0W3J1bkluZGV4XTsKICAgICAgICAg
YXV0byogaW5saW5lQm94ID0gaW5saW5lQm94ZXNbaW5saW5lQm94SW5kZXhdOwogICAgICAgICBh
dXRvKiBpbmxpbmVUZXh0Qm94ID0gaXM8SW5saW5lVGV4dEJveD4oaW5saW5lQm94KSA/IGRvd25j
YXN0PElubGluZVRleHRCb3g+KGlubGluZUJveCkgOiBudWxscHRyOwotCi0gICAgICAgIGF1dG8m
IGlubGluZVJ1biA9IGlubGluZVJ1bkxpc3RbcnVuSW5kZXhdOwotICAgICAgICBhdXRvIG1hdGNo
aW5nUnVucyA9IGZhbHNlOwotICAgICAgICBpZiAoaW5saW5lVGV4dEJveCkgewotICAgICAgICAg
ICAgYXV0byB4T2Zmc2V0ID0gcmVzb2x2ZUZvclJlbGF0aXZlUG9zaXRpb25JZk5lZWRlZCgqaW5s
aW5lVGV4dEJveCk7Ci0gICAgICAgICAgICBtYXRjaGluZ1J1bnMgPSBjaGVja0Zvck1hdGNoaW5n
VGV4dFJ1bnMoaW5saW5lUnVuLCBpbmxpbmVUZXh0Qm94LT5sb2dpY2FsTGVmdCgpICsgeE9mZnNl
dCwKLSAgICAgICAgICAgICAgICBpbmxpbmVUZXh0Qm94LT5sb2dpY2FsUmlnaHQoKSArIHhPZmZz
ZXQsCi0gICAgICAgICAgICAgICAgaW5saW5lVGV4dEJveC0+c3RhcnQoKSwKLSAgICAgICAgICAg
ICAgICBpbmxpbmVUZXh0Qm94LT5lbmQoKSArIDEsCi0gICAgICAgICAgICAgICAgaW5saW5lVGV4
dEJveC0+bG9naWNhbEhlaWdodCgpKTsKLQotICAgICAgICAgICAgLy8gPHNwYW4+Zm9vYmFyPC9z
cGFuPmZvb2JhciBnZW5lcmF0ZXMgMiBpbmxpbmUgdGV4dCBib3hlcyB3aGlsZSB3ZSBvbmx5IGdl
bmVyYXRlIG9uZSBpbmxpbmUgcnVuLgotICAgICAgICAgICAgLy8gYWxzbyA8ZGl2PmZvbzxpbWcg
c3R5bGU9ImZsb2F0OiBsZWZ0OyI+YmFyPC9kaXY+IHRvby4KLSAgICAgICAgICAgIGF1dG8gaW5s
aW5lUnVuRW5kID0gaW5saW5lUnVuLnRleHRDb250ZXh0KCktPnN0YXJ0KCkgKyBpbmxpbmVSdW4u
dGV4dENvbnRleHQoKS0+bGVuZ3RoKCk7Ci0gICAgICAgICAgICBhdXRvIHRleHRSdW5NaWdodEJl
RXh0ZW5kZWQgPSAhbWF0Y2hpbmdSdW5zICYmIGlubGluZVRleHRCb3gtPmVuZCgpIDwgaW5saW5l
UnVuRW5kICYmIGlubGluZUJveEluZGV4IDwgaW5saW5lQm94ZXMuc2l6ZSgpIC0gMTsKLQotICAg
ICAgICAgICAgaWYgKHRleHRSdW5NaWdodEJlRXh0ZW5kZWQpIHsKLSAgICAgICAgICAgICAgICBh
dXRvIGxvZ2ljYWxMZWZ0ID0gaW5saW5lVGV4dEJveC0+bG9naWNhbExlZnQoKSArIHhPZmZzZXQ7
Ci0gICAgICAgICAgICAgICAgYXV0byBsb2dpY2FsUmlnaHQgPSBpbmxpbmVUZXh0Qm94LT5sb2dp
Y2FsUmlnaHQoKSArIHhPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgYXV0byBzdGFydCA9IGlubGlu
ZVRleHRCb3gtPnN0YXJ0KCk7Ci0gICAgICAgICAgICAgICAgYXV0byBlbmQgPSBpbmxpbmVUZXh0
Qm94LT5lbmQoKSArIDE7Ci0gICAgICAgICAgICAgICAgYXV0byBpbmRleCA9ICsraW5saW5lQm94
SW5kZXg7Ci0gICAgICAgICAgICAgICAgZm9yICg7IGluZGV4IDwgaW5saW5lQm94ZXMuc2l6ZSgp
OyArK2luZGV4KSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8qIGlubGluZUJveCA9IGlubGlu
ZUJveGVzW2luZGV4XTsKLSAgICAgICAgICAgICAgICAgICAgYXV0byogaW5saW5lVGV4dEJveCA9
IGlzPElubGluZVRleHRCb3g+KGlubGluZUJveCkgPyBkb3duY2FzdDxJbmxpbmVUZXh0Qm94Pihp
bmxpbmVCb3gpIDogbnVsbHB0cjsKLSAgICAgICAgICAgICAgICAgICAgLy8gQ2FuJ3QgbWl4IGRp
ZmZlcmVudCBpbmxpbmUgYm94ZXMuCi0gICAgICAgICAgICAgICAgICAgIGlmICghaW5saW5lVGV4
dEJveCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAg
ICAgIGF1dG8geE9mZnNldCA9IHJlc29sdmVGb3JSZWxhdGl2ZVBvc2l0aW9uSWZOZWVkZWQoKmlu
bGluZVRleHRCb3gpOwotICAgICAgICAgICAgICAgICAgICBsb2dpY2FsUmlnaHQgPSBpbmxpbmVU
ZXh0Qm94LT5sb2dpY2FsUmlnaHQoKSArIHhPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgICAgIGVu
ZCArPSAoaW5saW5lVGV4dEJveC0+ZW5kKCkgKyAxKTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KGNoZWNrRm9yTWF0Y2hpbmdUZXh0UnVucyhpbmxpbmVSdW4sIGxvZ2ljYWxMZWZ0LCBsb2dpY2Fs
UmlnaHQsIHN0YXJ0LCBlbmQsIGlubGluZVRleHRCb3gtPmxvZ2ljYWxIZWlnaHQoKSkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIG1hdGNoaW5nUnVucyA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpbmxpbmVCb3hJbmRleCA9IGluZGV4OwotICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAv
LyBXZW50IHRvbyBmYXI/Ci0gICAgICAgICAgICAgICAgICAgIGlmIChlbmQgPj0gaW5saW5lUnVu
RW5kKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1hdGNoaW5nUnVucyA9
IGNoZWNrRm9yTWF0Y2hpbmdOb25UZXh0UnVucyhpbmxpbmVSdW4sICppbmxpbmVCb3gpOwotCisg
ICAgICAgIGJvb2wgbWF0Y2hpbmdSdW5zID0gaW5saW5lVGV4dEJveCA/IGNoZWNrRm9yTWF0Y2hp
bmdUZXh0UnVucygqaW5saW5lUnVuLCAqaW5saW5lVGV4dEJveCkgOiBtYXRjaGluZ1J1bnMgPSBj
aGVja0Zvck1hdGNoaW5nTm9uVGV4dFJ1bnMoKmlubGluZVJ1biwgKmlubGluZUJveCk7CiAKICAg
ICAgICAgaWYgKCFtYXRjaGluZ1J1bnMpIHsKICAgICAgICAgICAgIHN0cmVhbSA8PCAiTWlzbWF0
Y2hpbmc6IHJ1biAiOwpAQCAtMjE0LDEwICsxNTcsMTAgQEAgc3RhdGljIGJvb2wgb3V0cHV0TWlz
bWF0Y2hpbmdDb21wbGV4TGluZUluZm9ybWF0aW9uSWZOZWVkZWQoVGV4dFN0cmVhbSYgc3RyZWFt
LAogICAgICAgICAgICAgICAgIHN0cmVhbSA8PCAiKCIgPDwgaW5saW5lVGV4dEJveC0+c3RhcnQo
KSA8PCAiLCAiIDw8IGlubGluZVRleHRCb3gtPmVuZCgpICsgMSA8PCAiKSI7CiAgICAgICAgICAg
ICBzdHJlYW0gPDwgIiAoIiA8PCBpbmxpbmVCb3gtPmxvZ2ljYWxMZWZ0KCkgPDwgIiwgIiA8PCBp
bmxpbmVCb3gtPmxvZ2ljYWxSaWdodCgpIDw8ICIpICgiIDw8IGlubGluZUJveC0+bG9naWNhbFdp
ZHRoKCkgPDwgIngiIDw8IGlubGluZUJveC0+bG9naWNhbEhlaWdodCgpIDw8ICIpIjsKIAotICAg
ICAgICAgICAgc3RyZWFtIDw8ICJpbmxpbmUgcnVuICI7Ci0gICAgICAgICAgICBpZiAoaW5saW5l
UnVuLnRleHRDb250ZXh0KCkpCi0gICAgICAgICAgICAgICAgc3RyZWFtIDw8ICIoIiA8PCBpbmxp
bmVSdW4udGV4dENvbnRleHQoKS0+c3RhcnQoKSA8PCAiLCAiIDw8IGlubGluZVJ1bi50ZXh0Q29u
dGV4dCgpLT5zdGFydCgpICsgaW5saW5lUnVuLnRleHRDb250ZXh0KCktPmxlbmd0aCgpIDw8ICIp
ICI7Ci0gICAgICAgICAgICBzdHJlYW0gPDwgIigiIDw8IGlubGluZVJ1bi5sb2dpY2FsTGVmdCgp
IDw8ICIsICIgPDwgaW5saW5lUnVuLmxvZ2ljYWxSaWdodCgpIDw8ICIpICgiIDw8IGlubGluZVJ1
bi5sb2dpY2FsV2lkdGgoKSA8PCAieCIgPDwgaW5saW5lUnVuLmxvZ2ljYWxIZWlnaHQoKSA8PCAi
KSI7CisgICAgICAgICAgICBzdHJlYW0gPDwgIiBpbmxpbmUgcnVuICI7CisgICAgICAgICAgICBp
ZiAoaW5saW5lUnVuLT50ZXh0Q29udGV4dCgpKQorICAgICAgICAgICAgICAgIHN0cmVhbSA8PCAi
KCIgPDwgaW5saW5lUnVuLT50ZXh0Q29udGV4dCgpLT5zdGFydCgpIDw8ICIsICIgPDwgaW5saW5l
UnVuLT50ZXh0Q29udGV4dCgpLT5lbmQoKSA8PCAiKSI7CisgICAgICAgICAgICBzdHJlYW0gPDwg
IiAoIiA8PCBpbmxpbmVSdW4tPmxvZ2ljYWxMZWZ0KCkgPDwgIiwgIiA8PCBpbmxpbmVSdW4tPmxv
Z2ljYWxSaWdodCgpIDw8ICIpICgiIDw8IGlubGluZVJ1bi0+bG9naWNhbFdpZHRoKCkgPDwgIngi
IDw8IGlubGluZVJ1bi0+bG9naWNhbEhlaWdodCgpIDw8ICIpIjsKICAgICAgICAgICAgIHN0cmVh
bS5uZXh0TGluZSgpOwogICAgICAgICAgICAgbWlzbWF0Y2hlZCA9IHRydWU7CiAgICAgICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tG
b3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9ibG9j
a2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcAppbmRleCBmOTYz
M2I0MzhhMWIxYjIyN2RhNWI4NzE0NmZmMzFlYmM1Njg2MjVjLi4xY2M2Mzk3NTI3MzU2N2VlYTRi
MGRlOWMxODQwZTU3NDVkOTYzMjRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
YmxvY2tmb3JtYXR0aW5nL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250
ZXh0R2VvbWV0cnkuY3BwCkBAIC03Nyw3ICs3Nyw3IEBAIEhlaWdodEFuZE1hcmdpbiBCbG9ja0Zv
cm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6aW5GbG93Tm9uUmVwbGFjZWRIZWlnaHRBbmRNYXJn
CiAgICAgICAgIGlmIChsYXlvdXRCb3guZXN0YWJsaXNoZXNJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dCgpKSB7CiAgICAgICAgICAgICAvLyBUaGlzIGlzIHRlbXAgYW5kIHdpbGwgYmUgcmVwbGFjZWQg
YnkgdGhlIGNvcnJlY3QgZGlzcGxheSBib3ggb25jZSBpbmxpbmUgcnVucyBtb3ZlIG92ZXIgdG8g
dGhlIGRpc3BsYXkgdHJlZS4KICAgICAgICAgICAgIGF1dG8mIGlubGluZVJ1bnMgPSBkb3duY2Fz
dDxJbmxpbmVGb3JtYXR0aW5nU3RhdGU+KGxheW91dFN0YXRlLmVzdGFibGlzaGVkRm9ybWF0dGlu
Z1N0YXRlKGxheW91dEJveCkpLmlubGluZVJ1bnMoKTsKLSAgICAgICAgICAgIGF1dG8gYm90dG9t
RWRnZSA9IGlubGluZVJ1bnMuaXNFbXB0eSgpID8gTGF5b3V0VW5pdCgpIDogaW5saW5lUnVucy5s
YXN0KCkubG9naWNhbEJvdHRvbSgpOworICAgICAgICAgICAgYXV0byBib3R0b21FZGdlID0gaW5s
aW5lUnVucy5pc0VtcHR5KCkgPyBMYXlvdXRVbml0KCkgOiBpbmxpbmVSdW5zLmxhc3QoKS0+bG9n
aWNhbEJvdHRvbSgpOwogICAgICAgICAgICAgcmV0dXJuIHsgYm90dG9tRWRnZSAtIGJvcmRlckFu
ZFBhZGRpbmdUb3AsIG5vbkNvbGxhcHNlZE1hcmdpbiB9OwogICAgICAgICB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5Qm94LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheUJveC5oCmluZGV4IGQ0Y2Q3YmEx
NDE2OTBlOGJjZmQzNzc5OWUyMmI2MmRiODhmZDYzZWYuLjExMzNlNDk5YjE5NWQwMzQ5YzBlZjM1
Mjg2ZGIyYWMzYzgzZTMzZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNw
bGF5dHJlZS9EaXNwbGF5Qm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Rpc3BsYXl0
cmVlL0Rpc3BsYXlCb3guaApAQCAtMTM5LDYgKzEzOSw3IEBAIHB1YmxpYzoKICAgICBSZWN0IHJl
Y3RXaXRoTWFyZ2luKCkgY29uc3Q7CiAKICAgICBMYXlvdXQ6OlVzZWRWZXJ0aWNhbE1hcmdpbiB2
ZXJ0aWNhbE1hcmdpbigpIGNvbnN0OworICAgIExheW91dDo6VXNlZEhvcml6b250YWxNYXJnaW4g
aG9yaXpvbnRhbE1hcmdpbigpIGNvbnN0OwogICAgIExheW91dFVuaXQgbWFyZ2luQmVmb3JlKCkg
Y29uc3Q7CiAgICAgTGF5b3V0VW5pdCBtYXJnaW5TdGFydCgpIGNvbnN0OwogICAgIExheW91dFVu
aXQgbWFyZ2luQWZ0ZXIoKSBjb25zdDsKQEAgLTU4MCw2ICs1ODEsMTIgQEAgaW5saW5lIExheW91
dDo6VXNlZFZlcnRpY2FsTWFyZ2luIEJveDo6dmVydGljYWxNYXJnaW4oKSBjb25zdAogICAgIHJl
dHVybiBtX3ZlcnRpY2FsTWFyZ2luOwogfQogCitpbmxpbmUgTGF5b3V0OjpVc2VkSG9yaXpvbnRh
bE1hcmdpbiBCb3g6Omhvcml6b250YWxNYXJnaW4oKSBjb25zdAoreworICAgIEFTU0VSVChtX2hh
c1ZhbGlkSG9yaXpvbnRhbE1hcmdpbik7CisgICAgcmV0dXJuIG1faG9yaXpvbnRhbE1hcmdpbjsK
K30KKwogaW5saW5lIExheW91dFVuaXQgQm94OjptYXJnaW5CZWZvcmUoKSBjb25zdAogewogICAg
IEFTU0VSVChtX2hhc1ZhbGlkVmVydGljYWxNYXJnaW4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2Rpc3BsYXl0cmVlL0Rpc3BsYXlSdW4uaCBiL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5UnVuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmZiMWNkZDBjZDc3OTYw
OTMxNmVjMGEzZGYzYjNiMmJhZDVhYzkwZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5UnVuLmgKQEAgLTAsMCArMSwxMTEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19D
T05URVhUKQorCisjaW5jbHVkZSAiSW5saW5lSXRlbS5oIgorI2luY2x1ZGUgIkxheW91dFVuaXQu
aCIKKyNpbmNsdWRlICJUZXh0RmxhZ3MuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNw
YWNlIERpc3BsYXkgeworCitzdHJ1Y3QgUnVuIHsKKyAgICBzdHJ1Y3QgVGV4dENvbnRleHQgewor
ICAgIHB1YmxpYzoKKyAgICAgICAgVGV4dENvbnRleHQodW5zaWduZWQgcG9zaXRpb24sIHVuc2ln
bmVkIGxlbmd0aCk7CisKKyAgICAgICAgdW5zaWduZWQgc3RhcnQoKSBjb25zdCB7IHJldHVybiBt
X3N0YXJ0OyB9CisgICAgICAgIHVuc2lnbmVkIGVuZCgpIGNvbnN0IHsgcmV0dXJuIHN0YXJ0KCkg
KyBsZW5ndGgoKTsgfQorICAgICAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBt
X2xlbmd0aDsgfQorCisgICAgICAgIHZvaWQgZXhwYW5kKHVuc2lnbmVkIGxlbmd0aCkgeyBtX2xl
bmd0aCArPSBsZW5ndGg7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIHVuc2lnbmVkIG1fc3Rh
cnQ7CisgICAgICAgIHVuc2lnbmVkIG1fbGVuZ3RoOworICAgIH07CisKKyAgICBSdW4oQm94OjpS
ZWN0IGxvZ2ljYWxSZWN0LCBPcHRpb25hbDxUZXh0Q29udGV4dD4pOworICAgIFJ1bihjb25zdCBS
dW4mKTsKKworICAgIExheW91dFBvaW50IGxvZ2ljYWxUb3BMZWZ0KCkgY29uc3QgeyByZXR1cm4g
bV9sb2dpY2FsUmVjdC50b3BMZWZ0KCk7IH0KKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0KCkg
Y29uc3QgeyByZXR1cm4gbV9sb2dpY2FsUmVjdC5sZWZ0KCk7IH0KKyAgICBMYXlvdXRVbml0IGxv
Z2ljYWxSaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFJlY3QucmlnaHQoKTsgfQorICAg
IExheW91dFVuaXQgbG9naWNhbFRvcCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFJlY3QudG9w
KCk7IH0KKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxCb3R0b20oKSBjb25zdCB7IHJldHVybiBtX2xv
Z2ljYWxSZWN0LmJvdHRvbSgpOyB9CisKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCgpIGNv
bnN0IHsgcmV0dXJuIG1fbG9naWNhbFJlY3Qud2lkdGgoKTsgfQorICAgIExheW91dFVuaXQgbG9n
aWNhbEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFJlY3QuaGVpZ2h0KCk7IH0KKwor
ICAgIHZvaWQgc2V0TG9naWNhbFdpZHRoKExheW91dFVuaXQgd2lkdGgpIHsgbV9sb2dpY2FsUmVj
dC5zZXRXaWR0aCh3aWR0aCk7IH0KKyAgICB2b2lkIHNldExvZ2ljYWxMZWZ0KExheW91dFVuaXQg
bG9naWNhbExlZnQpIHsgbV9sb2dpY2FsUmVjdC5zZXRMZWZ0KGxvZ2ljYWxMZWZ0KTsgfQorICAg
IHZvaWQgc2V0TG9naWNhbFJpZ2h0KExheW91dFVuaXQgbG9naWNhbFJpZ2h0KSB7IG1fbG9naWNh
bFJlY3Quc2hpZnRSaWdodFRvKGxvZ2ljYWxSaWdodCk7IH0KKyAgICB2b2lkIG1vdmVWZXJ0aWNh
bGx5KExheW91dFVuaXQgZGVsdGEpIHsgbV9sb2dpY2FsUmVjdC5tb3ZlVmVydGljYWxseShkZWx0
YSk7IH0KKyAgICB2b2lkIG1vdmVIb3Jpem9udGFsbHkoTGF5b3V0VW5pdCBkZWx0YSkgeyBtX2xv
Z2ljYWxSZWN0Lm1vdmVIb3Jpem9udGFsbHkoZGVsdGEpOyB9CisgICAgdm9pZCBleHBhbmRWZXJ0
aWNhbGx5KExheW91dFVuaXQgZGVsdGEpIHsgbV9sb2dpY2FsUmVjdC5leHBhbmQoMCwgZGVsdGEp
OyB9CisgICAgdm9pZCBleHBhbmRIb3Jpem9udGFsbHkoTGF5b3V0VW5pdCBkZWx0YSkgeyBtX2xv
Z2ljYWxSZWN0LmV4cGFuZChkZWx0YSwgMCk7IH0KKworICAgIHN0cnVjdCBFeHBhbnNpb25PcHBv
cnR1bml0eSB7CisgICAgICAgIHVuc2lnbmVkIGNvdW50IHsgMCB9OworICAgICAgICBFeHBhbnNp
b25CZWhhdmlvciBiZWhhdmlvciB7IEZvcmJpZExlYWRpbmdFeHBhbnNpb24gfCBGb3JiaWRUcmFp
bGluZ0V4cGFuc2lvbiB9OworICAgICAgICBMYXlvdXRVbml0IGV4cGFuc2lvbjsKKyAgICB9Owor
ICAgIEV4cGFuc2lvbk9wcG9ydHVuaXR5JiBleHBhbnNpb25PcHBvcnR1bml0eSgpIHsgcmV0dXJu
IG1fZXhwYW5zaW9uT3Bwb3J0dW5pdHk7IH0KKworICAgIHZvaWQgc2V0VGV4dENvbnRleHQoVGV4
dENvbnRleHQgdGV4dENvbnRleHQpIHsgbV90ZXh0Q29udGV4dC5lbXBsYWNlKHRleHRDb250ZXh0
KTsgfQorICAgIE9wdGlvbmFsPFRleHRDb250ZXh0PiYgdGV4dENvbnRleHQoKSB7IHJldHVybiBt
X3RleHRDb250ZXh0OyB9CisgICAgT3B0aW9uYWw8VGV4dENvbnRleHQ+IHRleHRDb250ZXh0KCkg
Y29uc3QgeyByZXR1cm4gbV90ZXh0Q29udGV4dDsgfQorCitwcml2YXRlOgorICAgIEJveDo6UmVj
dCBtX2xvZ2ljYWxSZWN0OworICAgIEV4cGFuc2lvbk9wcG9ydHVuaXR5IG1fZXhwYW5zaW9uT3Bw
b3J0dW5pdHk7CisgICAgT3B0aW9uYWw8VGV4dENvbnRleHQ+IG1fdGV4dENvbnRleHQ7Cit9Owor
CitpbmxpbmUgUnVuOjpSdW4oQm94OjpSZWN0IGxvZ2ljYWxSZWN0LCBPcHRpb25hbDxUZXh0Q29u
dGV4dD4gdGV4dENvbnRleHQpCisgICAgOiBtX2xvZ2ljYWxSZWN0KGxvZ2ljYWxSZWN0KQorICAg
ICwgbV90ZXh0Q29udGV4dCh0ZXh0Q29udGV4dCkKK3sKK30KKworaW5saW5lIFJ1bjo6VGV4dENv
bnRleHQ6OlRleHRDb250ZXh0KHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgpCisgICAg
OiBtX3N0YXJ0KHN0YXJ0KQorICAgICwgbV9sZW5ndGgobGVuZ3RoKQoreworfQorCitpbmxpbmUg
UnVuOjpSdW4oY29uc3QgUnVuJiBvdGhlcikKK3sKKyAgICBtX2xvZ2ljYWxSZWN0ID0gb3RoZXIu
bV9sb2dpY2FsUmVjdDsKKyAgICBtX2V4cGFuc2lvbk9wcG9ydHVuaXR5ID0gb3RoZXIubV9leHBh
bnNpb25PcHBvcnR1bml0eTsKKyAgICBtX3RleHRDb250ZXh0ID0gb3RoZXIubV90ZXh0Q29udGV4
dDsKK30KKworfQorfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
aW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAK
aW5kZXggZTNjMTUzNmRjZDMyYTFlZmVkODEyOGQzMzJiMTE4ZTI4YmRkOWU3Mi4uNDM1ZDBiM2Y1
ODkzYjBhYWY5ZjIxMzY0MTg2ZjQzMmQ2MjU0NDhiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRp
bmdDb250ZXh0LmNwcApAQCAtMzAsNyArMzAsNyBAQAogCiAjaW5jbHVkZSAiSW5saW5lRm9ybWF0
dGluZ1N0YXRlLmgiCiAjaW5jbHVkZSAiSW5saW5lTGluZUJyZWFrZXIuaCIKLSNpbmNsdWRlICJJ
bmxpbmVSdW5Qcm92aWRlci5oIgorI2luY2x1ZGUgIklubGluZVRleHRJdGVtLmgiCiAjaW5jbHVk
ZSAiTGF5b3V0Qm94LmgiCiAjaW5jbHVkZSAiTGF5b3V0Q29udGFpbmVyLmgiCiAjaW5jbHVkZSAi
TGF5b3V0SW5saW5lQm94LmgiCkBAIC03OSwxNiArNzksMTkgQEAgdm9pZCBJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dDo6bGF5b3V0KCkgY29uc3QKICAgICAgICAgICAgIGxheW91dEZvcm1hdHRpbmdD
b250ZXh0Um9vdCgqbGF5b3V0Qm94LCB1c2VkVmFsdWVzKTsKICAgICAgICAgZWxzZSBpZiAoaXM8
Q29udGFpbmVyPigqbGF5b3V0Qm94KSkgewogICAgICAgICAgICAgYXV0byYgaW5saW5lQ29udGFp
bmVyID0gZG93bmNhc3Q8SW5saW5lQ29udGFpbmVyPigqbGF5b3V0Qm94KTsKLSAgICAgICAgICAg
IGNvbXB1dGVNYXJnaW4oaW5saW5lQ29udGFpbmVyLCB1c2VkVmFsdWVzKTsKKyAgICAgICAgICAg
IGNvbXB1dGVIb3Jpem9udGFsTWFyZ2luKGlubGluZUNvbnRhaW5lciwgdXNlZFZhbHVlcyk7CiAg
ICAgICAgICAgICBjb21wdXRlQm9yZGVyQW5kUGFkZGluZyhpbmxpbmVDb250YWluZXIsIHVzZWRW
YWx1ZXMpOwogICAgICAgICB9IGVsc2UgaWYgKGxheW91dEJveC0+aXNSZXBsYWNlZCgpKQogICAg
ICAgICAgICAgY29tcHV0ZVdpZHRoQW5kSGVpZ2h0Rm9yUmVwbGFjZWRJbmxpbmVCb3goKmxheW91
dEJveCwgdXNlZFZhbHVlcyk7CiAgICAgICAgIGxheW91dEJveCA9IG5leHRJblByZU9yZGVyKCps
YXlvdXRCb3gsIHJvb3QpOwogICAgIH0KIAotICAgIElubGluZVJ1blByb3ZpZGVyIGlubGluZVJ1
blByb3ZpZGVyOwotICAgIGNvbGxlY3RJbmxpbmVDb250ZW50KGlubGluZVJ1blByb3ZpZGVyKTsK
LSAgICBMaW5lTGF5b3V0KCp0aGlzKS5sYXlvdXQoaW5saW5lUnVuUHJvdmlkZXIpOworICAgIC8v
IEZJWE1FOiBUaGlzIGlzIHN1Y2ggYSB3YXN0ZSB3aGVuIGludHJpbnNpYyB3aWR0aCBjb21wdXRh
dGlvbiBhbHJlYWR5IGNvbGxlY3RlZCB0aGUgaW5saW5lIGl0ZW1zLgorICAgIGZvcm1hdHRpbmdT
dGF0ZSgpLmlubGluZUl0ZW1zKCkuY2xlYXIoKTsKKyAgICBmb3JtYXR0aW5nU3RhdGUoKS5pbmxp
bmVSdW5zKCkuY2xlYXIoKTsKKworICAgIGNvbGxlY3RJbmxpbmVDb250ZW50KCk7CisgICAgTGlu
ZUxheW91dCgqdGhpcykubGF5b3V0KCk7CiAgICAgTE9HX1dJVEhfU1RSRUFNKEZvcm1hdHRpbmdD
b250ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIltFbmRdIC0+IGlubGluZSBmb3JtYXR0aW5nIGNvbnRl
eHQgLT4gZm9ybWF0dGluZyByb290KCIgPDwgJnJvb3QgPDwgIikiKTsKIH0KIApAQCAtMTIwLDMw
ICsxMjMsMzAgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUludHJpbnNp
Y1dpZHRoQ29uc3RyYWludHMoKSBjb25zdAogICAgICAgICAgICAgICAgIGNvbXB1dGVXaWR0aEFu
ZE1hcmdpbigqbGF5b3V0Qm94LCB1c2VkVmFsdWVzKTsKICAgICAgICAgICAgIGVsc2UgewogICAg
ICAgICAgICAgICAgIC8vIFNpbXBsZSBpbmxpbmUgY29udGFpbmVyIHdpdGggbm8gaW50cmluc2lj
IHdpZHRoIDxzcGFuPi4KLSAgICAgICAgICAgICAgICBjb21wdXRlTWFyZ2luKCpsYXlvdXRCb3gs
IHVzZWRWYWx1ZXMpOworICAgICAgICAgICAgICAgIGNvbXB1dGVIb3Jpem9udGFsTWFyZ2luKCps
YXlvdXRCb3gsIHVzZWRWYWx1ZXMpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAg
IGxheW91dEJveCA9IG5leHRJblByZU9yZGVyKCpsYXlvdXRCb3gsIHJvb3QpOwogICAgIH0KIAot
ICAgIElubGluZVJ1blByb3ZpZGVyIGlubGluZVJ1blByb3ZpZGVyOwotICAgIGNvbGxlY3RJbmxp
bmVDb250ZW50KGlubGluZVJ1blByb3ZpZGVyKTsKKyAgICBjb2xsZWN0SW5saW5lQ29udGVudCgp
OwogCiAgICAgYXV0byBtYXhpbXVtTGluZVdpZHRoID0gWyZdKGF1dG8gYXZhaWxhYmxlV2lkdGgp
IHsKLSAgICAgICAgTGF5b3V0VW5pdCBtYXhDb250ZW50TG9naWNhbFJpZ2h0OwotICAgICAgICBh
dXRvIGxpbmVCcmVha2VyID0gSW5saW5lTGluZUJyZWFrZXIgeyBsYXlvdXRTdGF0ZSwgZm9ybWF0
dGluZ1N0YXRlKCkuaW5saW5lQ29udGVudCgpLCBpbmxpbmVSdW5Qcm92aWRlci5ydW5zKCkgfTsK
LSAgICAgICAgTGF5b3V0VW5pdCBsaW5lTG9naWNhbFJpZ2h0OwotCiAgICAgICAgIC8vIFN3aXRj
aCB0byB0aGUgbWluL21heCBmb3JtYXR0aW5nIHJvb3Qgd2lkdGggdmFsdWVzIGJlZm9yZSBmb3Jt
YXR0aW5nIHRoZSBsaW5lcy4KICAgICAgICAgZm9yIChhdXRvKiBmb3JtYXR0aW5nUm9vdCA6IGZv
cm1hdHRpbmdDb250ZXh0Um9vdExpc3QpIHsKICAgICAgICAgICAgIGF1dG8gaW50cmluc2ljV2lk
dGhzID0gbGF5b3V0U3RhdGUuZm9ybWF0dGluZ1N0YXRlRm9yQm94KCpmb3JtYXR0aW5nUm9vdCku
aW50cmluc2ljV2lkdGhDb25zdHJhaW50cygqZm9ybWF0dGluZ1Jvb3QpOwogICAgICAgICAgICAg
bGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveCgqZm9ybWF0dGluZ1Jvb3QpLnNldENv
bnRlbnRCb3hXaWR0aChhdmFpbGFibGVXaWR0aCA/IGludHJpbnNpY1dpZHRocy0+bWF4aW11bSA6
IGludHJpbnNpY1dpZHRocy0+bWluaW11bSk7CiAgICAgICAgIH0KKyAgICAgICAgTGF5b3V0VW5p
dCBtYXhDb250ZW50TG9naWNhbFJpZ2h0OworICAgICAgICBMYXlvdXRVbml0IGxpbmVMb2dpY2Fs
UmlnaHQ7CiAKLSAgICAgICAgd2hpbGUgKGF1dG8gcnVuID0gbGluZUJyZWFrZXIubmV4dFJ1bihs
aW5lTG9naWNhbFJpZ2h0LCBhdmFpbGFibGVXaWR0aCwgIWxpbmVMb2dpY2FsUmlnaHQpKSB7Ci0g
ICAgICAgICAgICBpZiAocnVuLT5wb3NpdGlvbiA9PSBJbmxpbmVMaW5lQnJlYWtlcjo6UnVuOjpQ
b3NpdGlvbjo6TGluZUJlZ2luKQorICAgICAgICBMaW5lQnJlYWtlciBsaW5lQnJlYWtlcihsYXlv
dXRTdGF0ZSk7CisgICAgICAgIGF1dG8mIGlubGluZUNvbnRlbnQgPSBmb3JtYXR0aW5nU3RhdGUo
KS5pbmxpbmVJdGVtcygpOworICAgICAgICBmb3IgKGF1dG8mIGlubGluZUl0ZW0gOiBpbmxpbmVD
b250ZW50KSB7CisgICAgICAgICAgICBhdXRvIGJyZWFraW5nQ29udGV4dCA9IGxpbmVCcmVha2Vy
LmJyZWFraW5nQ29udGV4dCgqaW5saW5lSXRlbSwgeyBhdmFpbGFibGVXaWR0aCwgbGluZUxvZ2lj
YWxSaWdodCwgIWxpbmVMb2dpY2FsUmlnaHQgfSk7CisgICAgICAgICAgICBpZiAoYnJlYWtpbmdD
b250ZXh0LmJyZWFraW5nQmVoYXZpb3IgPT0gTGluZUJyZWFrZXI6OkJyZWFraW5nQmVoYXZpb3I6
OldyYXApCiAgICAgICAgICAgICAgICAgbGluZUxvZ2ljYWxSaWdodCA9IDA7Ci0gICAgICAgICAg
ICBsaW5lTG9naWNhbFJpZ2h0ICs9IHJ1bi0+d2lkdGg7CisgICAgICAgICAgICBsaW5lTG9naWNh
bFJpZ2h0ICs9IGlubGluZUl0ZW0tPndpZHRoKCk7CiAKICAgICAgICAgICAgIG1heENvbnRlbnRM
b2dpY2FsUmlnaHQgPSBzdGQ6Om1heChtYXhDb250ZW50TG9naWNhbFJpZ2h0LCBsaW5lTG9naWNh
bFJpZ2h0KTsKICAgICAgICAgfQpAQCAtMTYxLDcgKzE2NCw3IEBAIHZvaWQgSW5saW5lRm9ybWF0
dGluZ0NvbnRleHQ6OmNvbXB1dGVJbnRyaW5zaWNXaWR0aEZvckZsb2F0Qm94KGNvbnN0IEJveCYg
bGF5b3V0CiAKICAgICBhdXRvIHVzZWRIb3Jpem9udGFsVmFsdWVzID0gVXNlZEhvcml6b250YWxW
YWx1ZXMgeyB9OwogICAgIGNvbXB1dGVCb3JkZXJBbmRQYWRkaW5nKGxheW91dEJveCwgdXNlZEhv
cml6b250YWxWYWx1ZXMpOwotICAgIGNvbXB1dGVNYXJnaW4obGF5b3V0Qm94LCB1c2VkSG9yaXpv
bnRhbFZhbHVlcyk7CisgICAgY29tcHV0ZUhvcml6b250YWxNYXJnaW4obGF5b3V0Qm94LCB1c2Vk
SG9yaXpvbnRhbFZhbHVlcyk7CiAgICAgbGF5b3V0U3RhdGUuY3JlYXRlRm9ybWF0dGluZ0NvbnRl
eHQobGF5b3V0Qm94KS0+Y29tcHV0ZUludHJpbnNpY1dpZHRoQ29uc3RyYWludHMoKTsKIAogICAg
IGF1dG8gdXNlZFZlcnRpY2FsVmFsdWVzID0gVXNlZFZlcnRpY2FsVmFsdWVzIHsgfTsKQEAgLTE3
OCwxMSArMTgxLDExIEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVJbnRy
aW5zaWNXaWR0aEZvcklubGluZUJsb2NrKGNvbnN0IEJveCYgbGF5CiAKICAgICBhdXRvIHVzZWRW
YWx1ZXMgPSBVc2VkSG9yaXpvbnRhbFZhbHVlcyB7IH07CiAgICAgY29tcHV0ZUJvcmRlckFuZFBh
ZGRpbmcobGF5b3V0Qm94LCB1c2VkVmFsdWVzKTsKLSAgICBjb21wdXRlTWFyZ2luKGxheW91dEJv
eCwgdXNlZFZhbHVlcyk7CisgICAgY29tcHV0ZUhvcml6b250YWxNYXJnaW4obGF5b3V0Qm94LCB1
c2VkVmFsdWVzKTsKICAgICBsYXlvdXRTdGF0ZSgpLmNyZWF0ZUZvcm1hdHRpbmdDb250ZXh0KGxh
eW91dEJveCktPmNvbXB1dGVJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKCk7CiB9CiAKLXZvaWQg
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVNYXJnaW4oY29uc3QgQm94JiBsYXlvdXRC
b3gsIFVzZWRIb3Jpem9udGFsVmFsdWVzIHVzZWRWYWx1ZXMpIGNvbnN0Cit2b2lkIElubGluZUZv
cm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSG9yaXpvbnRhbE1hcmdpbihjb25zdCBCb3gmIGxheW91
dEJveCwgVXNlZEhvcml6b250YWxWYWx1ZXMgdXNlZFZhbHVlcykgY29uc3QKIHsKICAgICBhdXRv
IGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbiA9IEdlb21ldHJ5Ojpjb21wdXRlZEhvcml6b250YWxN
YXJnaW4obGF5b3V0Qm94LCB1c2VkVmFsdWVzKTsKICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gbGF5
b3V0U3RhdGUoKS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7CkBAIC0yNTYsODgg
KzI1OSwyOSBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlV2lkdGhBbmRI
ZWlnaHRGb3JSZXBsYWNlZElubGluZUJveChjb25zdCBCbwogICAgIGNvbXB1dGVIZWlnaHRBbmRN
YXJnaW4obGF5b3V0Qm94KTsKIH0KIAotc3RhdGljIHZvaWQgYWRkRGV0YWNoaW5nUnVsZXMoSW5s
aW5lSXRlbSYgaW5saW5lSXRlbSwgT3B0aW9uYWw8TGF5b3V0VW5pdD4gbm9uQnJlYWthYmxlU3Rh
cnRXaWR0aCwgT3B0aW9uYWw8TGF5b3V0VW5pdD4gbm9uQnJlYWthYmxlRW5kV2lkdGgpCi17Ci0g
ICAgT3B0aW9uU2V0PElubGluZUl0ZW06OkRldGFjaGluZ1J1bGU+IGRldGFjaGluZ1J1bGVzOwot
ICAgIGlmIChub25CcmVha2FibGVTdGFydFdpZHRoKSB7Ci0gICAgICAgIGRldGFjaGluZ1J1bGVz
LmFkZChJbmxpbmVJdGVtOjpEZXRhY2hpbmdSdWxlOjpCcmVha0F0U3RhcnQpOwotICAgICAgICBp
bmxpbmVJdGVtLmFkZE5vbkJyZWFrYWJsZVN0YXJ0KCpub25CcmVha2FibGVTdGFydFdpZHRoKTsK
LSAgICB9Ci0gICAgaWYgKG5vbkJyZWFrYWJsZUVuZFdpZHRoKSB7Ci0gICAgICAgIGRldGFjaGlu
Z1J1bGVzLmFkZChJbmxpbmVJdGVtOjpEZXRhY2hpbmdSdWxlOjpCcmVha0F0RW5kKTsKLSAgICAg
ICAgaW5saW5lSXRlbS5hZGROb25CcmVha2FibGVFbmQoKm5vbkJyZWFrYWJsZUVuZFdpZHRoKTsK
LSAgICB9Ci0gICAgaW5saW5lSXRlbS5hZGREZXRhY2hpbmdSdWxlKGRldGFjaGluZ1J1bGVzKTsK
LX0KLQotc3RhdGljIElubGluZUl0ZW0mIGNyZWF0ZUFuZEFwcGVuZElubGluZUl0ZW0oSW5saW5l
UnVuUHJvdmlkZXImIGlubGluZVJ1blByb3ZpZGVyLCBJbmxpbmVDb250ZW50JiBpbmxpbmVDb250
ZW50LCBjb25zdCBCb3gmIGxheW91dEJveCkKLXsKLSAgICBBU1NFUlQobGF5b3V0Qm94LmlzSW5s
aW5lTGV2ZWxCb3goKSB8fCBsYXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSk7Ci0gICAg
YXV0byBpbmxpbmVJdGVtID0gc3RkOjptYWtlX3VuaXF1ZTxJbmxpbmVJdGVtPihsYXlvdXRCb3gp
OwotICAgIGF1dG8qIGlubGluZUl0ZW1QdHIgPSBpbmxpbmVJdGVtLmdldCgpOwotICAgIGlubGlu
ZUNvbnRlbnQuYWRkKFdURk1vdmUoaW5saW5lSXRlbSkpOwotICAgIGlubGluZVJ1blByb3ZpZGVy
LmFwcGVuZCgqaW5saW5lSXRlbVB0cik7Ci0gICAgcmV0dXJuICppbmxpbmVJdGVtUHRyOwotfQot
Ci12b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb2xsZWN0SW5saW5lQ29udGVudChJbmxp
bmVSdW5Qcm92aWRlciYgaW5saW5lUnVuUHJvdmlkZXIpIGNvbnN0Cit2b2lkIElubGluZUZvcm1h
dHRpbmdDb250ZXh0Ojpjb2xsZWN0SW5saW5lQ29udGVudCgpIGNvbnN0CiB7CiAgICAgaWYgKCFp
czxDb250YWluZXI+KHJvb3QoKSkpCiAgICAgICAgIHJldHVybjsKICAgICBhdXRvJiByb290ID0g
ZG93bmNhc3Q8Q29udGFpbmVyPih0aGlzLT5yb290KCkpOwogICAgIGlmICghcm9vdC5oYXNJbkZs
b3dPckZsb2F0aW5nQ2hpbGQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIC8vIFRoZSBsb2dpYyBo
ZXJlIGlzIHZlcnkgc2ltaWxhciB0byBCRkMgbGF5b3V0LgotICAgIC8vIDEuIFRyYXZlcnMgZG93
biB0aGUgbGF5b3V0IHRyZWUgYW5kIGNvbGxlY3QgInN0YXJ0IiB1bmJyZWFrYWJsZSB3aWR0aHMg
KG1hcmdpbi1sZWZ0LCBib3JkZXItbGVmdCwgcGFkZGluZy1sZWZ0KQotICAgIC8vIDIuIENyZWF0
ZSBJbmxpbmVJdGVtIHBlciBsZWFmIGlubGluZSBib3ggKHRleHQgbm9kZXMsIGlubGluZS1ibG9j
a3MsIGZsb2F0cykgYW5kIHNldCAic3RhcnQiIHVuYnJlYWthYmxlIHdpZHRoIG9uIHRoZW0uIAot
ICAgIC8vIDMuIENsaW1iIGJhY2sgYW5kIGNvbGxlY3QgImVuZCIgdW5icmVha2FibGUgd2lkdGgg
YW5kIHNldCBpdCBvbiB0aGUgbGFzdCBJbmxpbmVJdGVtLgotICAgIGF1dG8mIGxheW91dFN0YXRl
ID0gdGhpcy0+bGF5b3V0U3RhdGUoKTsKLSAgICBhdXRvJiBpbmxpbmVDb250ZW50ID0gZm9ybWF0
dGluZ1N0YXRlKCkuaW5saW5lQ29udGVudCgpOwotCi0gICAgZW51bSBjbGFzcyBOb25CcmVha2Fi
bGVXaWR0aFR5cGUgeyBTdGFydCwgRW5kIH07Ci0gICAgYXV0byBub25CcmVha2FibGVXaWR0aCA9
IFsmXShhdXRvJiBjb250YWluZXIsIGF1dG8gdHlwZSkgewotICAgICAgICBhdXRvJiBkaXNwbGF5
Qm94ID0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveChjb250YWluZXIpOwotICAg
ICAgICBpZiAodHlwZSA9PSBOb25CcmVha2FibGVXaWR0aFR5cGU6OlN0YXJ0KQotICAgICAgICAg
ICAgcmV0dXJuIGRpc3BsYXlCb3gubWFyZ2luU3RhcnQoKSArIGRpc3BsYXlCb3guYm9yZGVyTGVm
dCgpICsgZGlzcGxheUJveC5wYWRkaW5nTGVmdCgpLnZhbHVlT3IoMCk7Ci0gICAgICAgIHJldHVy
biBkaXNwbGF5Qm94Lm1hcmdpbkVuZCgpICsgZGlzcGxheUJveC5ib3JkZXJSaWdodCgpICsgZGlz
cGxheUJveC5wYWRkaW5nUmlnaHQoKS52YWx1ZU9yKDApOwotICAgIH07Ci0KKyAgICAvLyBUcmF2
ZXJzZSB0aGUgdHJlZSBhbmQgY3JlYXRlIGlubGluZSBpdGVtcyBvdXQgb2YgY29udGFpbmVycyBh
bmQgbGVhZiBub2RlLiBUaGlzIGVzc2VudGlhbGx5IHRydW5zIHRoZSB0cmVlIGlubGluZSBzdHJ1
Y3R1cmUgaW50byBhIGZsYXQgb25lLgorICAgIC8vIDxzcGFuPnRleHQ8c3Bhbj48L3NwYW4+PGlt
Zz48L3NwYW4+IC0+IFtDb250YWluZXJTdGFydF1bSW5saW5lQm94XVtDb250YWluZXJTdGFydF1b
Q29udGFpbmVyRW5kXVtJbmxpbmVCb3hdW0NvbnRhaW5lckVuZF0KKyAgICBhdXRvJiBmb3JtYXR0
aW5nU3RhdGUgPSB0aGlzLT5mb3JtYXR0aW5nU3RhdGUoKTsKICAgICBMYXlvdXRRdWV1ZSBsYXlv
dXRRdWV1ZTsKICAgICBsYXlvdXRRdWV1ZS5hcHBlbmQocm9vdC5maXJzdEluRmxvd09yRmxvYXRp
bmdDaGlsZCgpKTsKLQotICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IG5vbkJyZWFrYWJsZVN0YXJ0
V2lkdGg7Ci0gICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gbm9uQnJlYWthYmxlRW5kV2lkdGg7Ci0g
ICAgSW5saW5lSXRlbSogbGFzdElubGluZUl0ZW0gPSBudWxscHRyOwogICAgIHdoaWxlICghbGF5
b3V0UXVldWUuaXNFbXB0eSgpKSB7CisgICAgICAgIGF1dG8gdHJlYXRBc0lubGluZUNvbnRhaW5l
ciA9IFtdKGF1dG8mIGxheW91dEJveCkgeworICAgICAgICAgICAgcmV0dXJuIGlzPENvbnRhaW5l
cj4obGF5b3V0Qm94KSAmJiAhbGF5b3V0Qm94LmVzdGFibGlzaGVzRm9ybWF0dGluZ0NvbnRleHQo
KTsKKyAgICAgICAgfTsKICAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgIGF1dG8m
IGxheW91dEJveCA9ICpsYXlvdXRRdWV1ZS5sYXN0KCk7Ci0gICAgICAgICAgICBpZiAoIWlzPENv
bnRhaW5lcj4obGF5b3V0Qm94KSkKKyAgICAgICAgICAgIGlmICghdHJlYXRBc0lubGluZUNvbnRh
aW5lcihsYXlvdXRCb3gpKQogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgLy8g
VGhpcyBpcyB0aGUgc3RhcnQgb2YgYW4gaW5saW5lIGNvbnRhaW5lciAoZS5nLiA8c3Bhbj4pLgor
ICAgICAgICAgICAgZm9ybWF0dGluZ1N0YXRlLmFkZElubGluZUl0ZW0oc3RkOjptYWtlX3VuaXF1
ZTxJbmxpbmVJdGVtPihsYXlvdXRCb3gsIElubGluZUl0ZW06OlR5cGU6OkNvbnRhaW5lclN0YXJ0
KSk7CiAgICAgICAgICAgICBhdXRvJiBjb250YWluZXIgPSBkb3duY2FzdDxDb250YWluZXI+KGxh
eW91dEJveCk7Ci0KLSAgICAgICAgICAgIGlmIChjb250YWluZXIuZXN0YWJsaXNoZXNGb3JtYXR0
aW5nQ29udGV4dCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gRm9ybWF0dGluZyBjb250ZXh0cyBh
cmUgdHJlYXRlZCBhcyBsZWFmIG5vZGVzLgotICAgICAgICAgICAgICAgIGF1dG8mIGlubGluZUl0
ZW0gPSBjcmVhdGVBbmRBcHBlbmRJbmxpbmVJdGVtKGlubGluZVJ1blByb3ZpZGVyLCBpbmxpbmVD
b250ZW50LCBjb250YWluZXIpOwotICAgICAgICAgICAgICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBs
YXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGNvbnRhaW5lcik7Ci0gICAgICAgICAg
ICAgICAgYXV0byBjdXJyZW50Tm9uQnJlYWthYmxlU3RhcnRXaWR0aCA9IG5vbkJyZWFrYWJsZVN0
YXJ0V2lkdGgudmFsdWVPcigwKSArIGRpc3BsYXlCb3gubWFyZ2luU3RhcnQoKSArIG5vbkJyZWFr
YWJsZUVuZFdpZHRoLnZhbHVlT3IoMCk7Ci0gICAgICAgICAgICAgICAgYWRkRGV0YWNoaW5nUnVs
ZXMoaW5saW5lSXRlbSwgY3VycmVudE5vbkJyZWFrYWJsZVN0YXJ0V2lkdGgsIGRpc3BsYXlCb3gu
bWFyZ2luRW5kKCkpOwotICAgICAgICAgICAgICAgIG5vbkJyZWFrYWJsZVN0YXJ0V2lkdGggPSB7
IH07Ci0gICAgICAgICAgICAgICAgbm9uQnJlYWthYmxlRW5kV2lkdGggPSB7IH07Ci0KLSAgICAg
ICAgICAgICAgICAvLyBGb3JtYXR0aW5nIGNvbnRleHQgcm9vdHMgdGFrZSBjYXJlIG9mIHRoZWly
IHN1YnRyZWVzLiBDb250aW51ZSB3aXRoIG5leHQgc2libGluZyBpZiBleGlzdHMuCi0gICAgICAg
ICAgICAgICAgbGF5b3V0UXVldWUucmVtb3ZlTGFzdCgpOwotICAgICAgICAgICAgICAgIGlmICgh
Y29udGFpbmVyLm5leHRJbkZsb3dPckZsb2F0aW5nU2libGluZygpKQotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBsYXlvdXRRdWV1ZS5hcHBlbmQoY29udGFpbmVy
Lm5leHRJbkZsb3dPckZsb2F0aW5nU2libGluZygpKTsKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBub24tZm9y
bWF0dGluZyBjb250ZXh0IGNvbnRhaW5lciBoYXMgYW55IG5vbi1icmVha2FibGUgc3RhcnQgcHJv
cGVydGllcyAobWFyZ2luLWxlZnQsIGJvcmRlci1sZWZ0LCBwYWRkaW5nLWxlZnQpCi0gICAgICAg
ICAgICAvLyA8c3BhbiBzdHlsZT0icGFkZGluZy1sZWZ0OiA1cHgiPjxzcGFuIHN0eWxlPSJwYWRk
aW5nLWxlZnQ6IDVweCI+Zm9vYmFyPC9zcGFuPjwvc3Bhbj4gLT4gNXB4ICsgNXB4Ci0gICAgICAg
ICAgICBhdXRvIGN1cnJlbnROb25CcmVha2FibGVTdGFydFdpZHRoID0gbm9uQnJlYWthYmxlV2lk
dGgobGF5b3V0Qm94LCBOb25CcmVha2FibGVXaWR0aFR5cGU6OlN0YXJ0KTsKLSAgICAgICAgICAg
IGlmIChjdXJyZW50Tm9uQnJlYWthYmxlU3RhcnRXaWR0aCB8fCBsYXlvdXRCb3guaXNQb3NpdGlv
bmVkKCkpCi0gICAgICAgICAgICAgICAgbm9uQnJlYWthYmxlU3RhcnRXaWR0aCA9IG5vbkJyZWFr
YWJsZVN0YXJ0V2lkdGgudmFsdWVPcigwKSArIGN1cnJlbnROb25CcmVha2FibGVTdGFydFdpZHRo
OwotCiAgICAgICAgICAgICBpZiAoIWNvbnRhaW5lci5oYXNJbkZsb3dPckZsb2F0aW5nQ2hpbGQo
KSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGxheW91dFF1ZXVlLmFwcGVu
ZChjb250YWluZXIuZmlyc3RJbkZsb3dPckZsb2F0aW5nQ2hpbGQoKSk7CkBAIC0zNDUsMjkgKzI4
OSwxOSBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb2xsZWN0SW5saW5lQ29udGVu
dChJbmxpbmVSdW5Qcm92aWRlciYgaW5saW5lUnVuUAogCiAgICAgICAgIHdoaWxlICghbGF5b3V0
UXVldWUuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSAqbGF5b3V0
UXVldWUudGFrZUxhc3QoKTsKLSAgICAgICAgICAgIGlmIChpczxDb250YWluZXI+KGxheW91dEJv
eCkpIHsKLSAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBlbmQgb2YgYW4gaW5saW5lIGNv
bnRhaW5lci4gQ29tcHV0ZSB0aGUgbm9uLWJyZWFrYWJsZSBlbmQgd2lkdGggYW5kIGFkZCBpdCB0
byB0aGUgbGFzdCBpbmxpbmUgYm94LgotICAgICAgICAgICAgICAgIC8vIDxzcGFuIHN0eWxlPSJw
YWRkaW5nLXJpZ2h0OiA1cHgiPmZvb2Jhcjwvc3Bhbj4gLT4gNXB4OyBsYXN0IGlubGluZSBpdGVt
IC0+ICJmb29iYXIiCi0gICAgICAgICAgICAgICAgYXV0byBjdXJyZW50Tm9uQnJlYWthYmxlRW5k
V2lkdGggPSBub25CcmVha2FibGVXaWR0aChsYXlvdXRCb3gsIE5vbkJyZWFrYWJsZVdpZHRoVHlw
ZTo6RW5kKTsKLSAgICAgICAgICAgICAgICBpZiAoY3VycmVudE5vbkJyZWFrYWJsZUVuZFdpZHRo
IHx8IGxheW91dEJveC5pc1Bvc2l0aW9uZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgbm9uQnJl
YWthYmxlRW5kV2lkdGggPSBub25CcmVha2FibGVFbmRXaWR0aC52YWx1ZU9yKDApICsgY3VycmVu
dE5vbkJyZWFrYWJsZUVuZFdpZHRoOwotICAgICAgICAgICAgICAgIC8vIEFkZCBpdCB0byB0aGUg
bGFzdCBpbmxpbmUgYm94Ci0gICAgICAgICAgICAgICAgaWYgKGxhc3RJbmxpbmVJdGVtKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGFkZERldGFjaGluZ1J1bGVzKCpsYXN0SW5saW5lSXRlbSwgeyB9
LCBub25CcmVha2FibGVFbmRXaWR0aCk7Ci0gICAgICAgICAgICAgICAgICAgIG5vbkJyZWFrYWJs
ZUVuZFdpZHRoID0geyB9OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgLy8gTGVhZiBpbmxpbmUgYm94Ci0gICAgICAgICAgICAgICAgYXV0
byYgaW5saW5lSXRlbSA9IGNyZWF0ZUFuZEFwcGVuZElubGluZUl0ZW0oaW5saW5lUnVuUHJvdmlk
ZXIsIGlubGluZUNvbnRlbnQsIGxheW91dEJveCk7Ci0gICAgICAgICAgICAgICAgLy8gQWRkIHN0
YXJ0IGFuZCB0aGUgKHRocm91Z2ggZW1wdHkgY29udGFpbmVycykgYWNjdW11bGF0ZWQgZW5kIHdp
ZHRoLgotICAgICAgICAgICAgICAgIC8vIDxzcGFuIHN0eWxlPSJwYWRkaW5nLWxlZnQ6IDFweCI+
Zm9vYmFyPC9zcGFuPiAtPiBub25CcmVha2FibGVTdGFydFdpZHRoOiAxcHg7Ci0gICAgICAgICAg
ICAgICAgLy8gPHNwYW4gc3R5bGU9InBhZGRpbmc6IDVweCI+PC9zcGFuPmZvb2JhciAtPiBub25C
cmVha2FibGVTdGFydFdpZHRoOiA1cHg7IG5vbkJyZWFrYWJsZUVuZFdpZHRoOiA1cHgKLSAgICAg
ICAgICAgICAgICBpZiAobm9uQnJlYWthYmxlU3RhcnRXaWR0aCB8fCBub25CcmVha2FibGVFbmRX
aWR0aCkgewotICAgICAgICAgICAgICAgICAgICBhZGREZXRhY2hpbmdSdWxlcyhpbmxpbmVJdGVt
LCBub25CcmVha2FibGVTdGFydFdpZHRoLnZhbHVlT3IoMCkgKyBub25CcmVha2FibGVFbmRXaWR0
aC52YWx1ZU9yKDApLCB7IH0pOwotICAgICAgICAgICAgICAgICAgICBub25CcmVha2FibGVTdGFy
dFdpZHRoID0geyB9OwotICAgICAgICAgICAgICAgICAgICBub25CcmVha2FibGVFbmRXaWR0aCA9
IHsgfTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbGFzdElubGluZUl0ZW0g
PSAmaW5saW5lSXRlbTsKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGVuZCBvZiBhbiBpbmxp
bmUgY29udGFpbmVyIChlLmcuIDwvc3Bhbj4pLgorICAgICAgICAgICAgaWYgKHRyZWF0QXNJbmxp
bmVDb250YWluZXIobGF5b3V0Qm94KSkKKyAgICAgICAgICAgICAgICBmb3JtYXR0aW5nU3RhdGUu
YWRkSW5saW5lSXRlbShzdGQ6Om1ha2VfdW5pcXVlPElubGluZUl0ZW0+KGxheW91dEJveCwgSW5s
aW5lSXRlbTo6VHlwZTo6Q29udGFpbmVyRW5kKSk7CisgICAgICAgICAgICBlbHNlIGlmIChpczxM
aW5lQnJlYWtCb3g+KGxheW91dEJveCkpCisgICAgICAgICAgICAgICAgZm9ybWF0dGluZ1N0YXRl
LmFkZElubGluZUl0ZW0oc3RkOjptYWtlX3VuaXF1ZTxJbmxpbmVJdGVtPihsYXlvdXRCb3gsIElu
bGluZUl0ZW06OlR5cGU6OkhhcmRMaW5lQnJlYWspKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGxh
eW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpKQorICAgICAgICAgICAgICAgIGZvcm1hdHRp
bmdTdGF0ZS5hZGRJbmxpbmVJdGVtKHN0ZDo6bWFrZV91bmlxdWU8SW5saW5lSXRlbT4obGF5b3V0
Qm94LCBJbmxpbmVJdGVtOjpUeXBlOjpGbG9hdCkpOworICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgQVNTRVJUKGlzPElubGluZUJveD4obGF5b3V0Qm94KSB8fCBsYXlvdXRCb3gu
aXNJbmxpbmVCbG9ja0JveCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoaXM8SW5saW5lQm94Pihs
YXlvdXRCb3gpICYmIGRvd25jYXN0PElubGluZUJveD4obGF5b3V0Qm94KS5oYXNUZXh0Q29udGVu
dCgpKQorICAgICAgICAgICAgICAgICAgICBJbmxpbmVUZXh0SXRlbTo6Y3JlYXRlQW5kQXBwZW5k
VGV4dEl0ZW1zKGZvcm1hdHRpbmdTdGF0ZS5pbmxpbmVJdGVtcygpLCBkb3duY2FzdDxJbmxpbmVC
b3g+KGxheW91dEJveCkpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgZm9ybWF0dGluZ1N0YXRlLmFkZElubGluZUl0ZW0oc3RkOjptYWtlX3VuaXF1ZTxJbmxpbmVJ
dGVtPihsYXlvdXRCb3gsIElubGluZUl0ZW06OlR5cGU6OkJveCkpOwogICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICBpZiAoYXV0byogbmV4dFNpYmxpbmcgPSBsYXlvdXRCb3gubmV4dEluRmxv
d09yRmxvYXRpbmdTaWJsaW5nKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oCmlu
ZGV4IGE0ZmIzMTU4NGFkZjhiODFkOGQ1YzYxYzMzNzI2MTJiMGRhOTMyODEuLjJkZGYzZDYzNzU3
ZDhmMjVmNTJlMzQyM2RlOWNjMjM2ZGNhMTU3Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQuaApAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgIkRpc3BsYXlCb3guaCIKICNpbmNs
dWRlICJGb3JtYXR0aW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIklubGluZUZvcm1hdHRpbmdTdGF0
ZS5oIgotI2luY2x1ZGUgIklubGluZVJ1bi5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzgsNyArMzcsNiBAQCBuYW1lc3BhY2UgTGF5b3V0
IHsKIAogY2xhc3MgRmxvYXRpbmdTdGF0ZTsKIGNsYXNzIElubGluZUNvbnRhaW5lcjsKLWNsYXNz
IElubGluZVJ1blByb3ZpZGVyOwogY2xhc3MgTGluZTsKIAogLy8gVGhpcyBjbGFzcyBpbXBsZW1l
bnRzIHRoZSBsYXlvdXQgbG9naWMgZm9yIGlubGluZSBmb3JtYXR0aW5nIGNvbnRleHRzLgpAQCAt
NTUsMjEgKzUzLDE3IEBAIHByaXZhdGU6CiAgICAgY2xhc3MgTGluZUxheW91dCB7CiAgICAgcHVi
bGljOgogICAgICAgICBMaW5lTGF5b3V0KGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0Jik7
Ci0gICAgICAgIHZvaWQgbGF5b3V0KGNvbnN0IElubGluZVJ1blByb3ZpZGVyJikgY29uc3Q7Cisg
ICAgICAgIHZvaWQgbGF5b3V0KCkgY29uc3Q7CiAKICAgICBwcml2YXRlOgorICAgICAgICBMYXlv
dXRTdGF0ZSYgbGF5b3V0U3RhdGUoKSBjb25zdCB7IHJldHVybiBtX2Zvcm1hdHRpbmdDb250ZXh0
LmxheW91dFN0YXRlKCk7IH0KICAgICAgICAgZW51bSBjbGFzcyBJc0xhc3RMaW5lIHsgTm8sIFll
cyB9OwogICAgICAgICB2b2lkIGluaXRpYWxpemVOZXdMaW5lKExpbmUmKSBjb25zdDsKICAgICAg
ICAgdm9pZCBjbG9zZUxpbmUoTGluZSYsIElzTGFzdExpbmUpIGNvbnN0OwotICAgICAgICB2b2lk
IGFwcGVuZENvbnRlbnRUb0xpbmUoTGluZSYsIGNvbnN0IElubGluZVJ1blByb3ZpZGVyOjpSdW4m
LCBjb25zdCBMYXlvdXRTaXplJikgY29uc3Q7Ci0gICAgICAgIHZvaWQgcG9zdFByb2Nlc3NJbmxp
bmVSdW5zKExpbmUmLCBJc0xhc3RMaW5lKSBjb25zdDsKLSAgICAgICAgdm9pZCBjcmVhdGVGaW5h
bFJ1bnMoTGluZSYpIGNvbnN0OwotICAgICAgICB2b2lkIHNwbGl0SW5saW5lUnVuSWZOZWVkZWQo
Y29uc3QgSW5saW5lUnVuJiwgSW5saW5lUnVucyYgc3BsaXRSdW5zKSBjb25zdDsKKyAgICAgICAg
dm9pZCBjb21taXRJbmxpbmVJdGVtVG9MaW5lKExpbmUmLCBjb25zdCBJbmxpbmVJdGVtJikgY29u
c3Q7CiAgICAgICAgIHZvaWQgY29tcHV0ZUZsb2F0UG9zaXRpb24oY29uc3QgRmxvYXRpbmdDb250
ZXh0JiwgTGluZSYsIGNvbnN0IEJveCYpIGNvbnN0OwotICAgICAgICB2b2lkIHBsYWNlSW5GbG93
UG9zaXRpb25lZENoaWxkcmVuKHVuc2lnbmVkIGZpcnN0UnVuSW5kZXgpIGNvbnN0OwogICAgICAg
ICB2b2lkIGFsaWduUnVucyhUZXh0QWxpZ25Nb2RlLCBMaW5lJiwgSXNMYXN0TGluZSkgY29uc3Q7
Ci0gICAgICAgIHZvaWQgY29tcHV0ZUV4cGFuc2lvbk9wcG9ydHVuaXRpZXMoTGluZSYsIGNvbnN0
IElubGluZVJ1blByb3ZpZGVyOjpSdW4mLCBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpUeXBlIGxh
c3RSdW5UeXBlKSBjb25zdDsKLSAgICAgICAgTGF5b3V0VW5pdCBydW5XaWR0aChjb25zdCBJbmxp
bmVDb250ZW50JiwgY29uc3QgSW5saW5lSXRlbSYsIEl0ZW1Qb3NpdGlvbiBmcm9tLCB1bnNpZ25l
ZCBsZW5ndGgsIExheW91dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0KSBjb25zdDsKKyAgICAgICAg
dm9pZCBjb21wdXRlRXhwYW5zaW9uT3Bwb3J0dW5pdGllcyhMaW5lJiwgY29uc3QgSW5saW5lSXRl
bSYsIGJvb2wgcHJldmlvdXNSdW5Jc1doaXRlcGFjZSkgY29uc3Q7CiAKICAgICBwcml2YXRlOgog
ICAgICAgICBzdGF0aWMgdm9pZCBqdXN0aWZ5UnVucyhMaW5lJik7CkBAIC05MSwxMSArODUsMTEg
QEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbXB1dGVJbnRyaW5zaWNXaWR0aEZvckZsb2F0Qm94KGNv
bnN0IEJveCYpIGNvbnN0OwogICAgIHZvaWQgY29tcHV0ZUludHJpbnNpY1dpZHRoRm9ySW5saW5l
QmxvY2soY29uc3QgQm94JikgY29uc3Q7CiAgICAgdm9pZCBjb21wdXRlV2lkdGhBbmRIZWlnaHRG
b3JSZXBsYWNlZElubGluZUJveChjb25zdCBCb3gmLCBVc2VkSG9yaXpvbnRhbFZhbHVlcykgY29u
c3Q7Ci0gICAgdm9pZCBjb21wdXRlTWFyZ2luKGNvbnN0IEJveCYsIFVzZWRIb3Jpem9udGFsVmFs
dWVzKSBjb25zdDsKKyAgICB2b2lkIGNvbXB1dGVIb3Jpem9udGFsTWFyZ2luKGNvbnN0IEJveCYs
IFVzZWRIb3Jpem9udGFsVmFsdWVzKSBjb25zdDsKICAgICB2b2lkIGNvbXB1dGVIZWlnaHRBbmRN
YXJnaW4oY29uc3QgQm94JikgY29uc3Q7CiAgICAgdm9pZCBjb21wdXRlV2lkdGhBbmRNYXJnaW4o
Y29uc3QgQm94JiwgVXNlZEhvcml6b250YWxWYWx1ZXMpIGNvbnN0OwogCi0gICAgdm9pZCBjb2xs
ZWN0SW5saW5lQ29udGVudChJbmxpbmVSdW5Qcm92aWRlciYpIGNvbnN0OworICAgIHZvaWQgY29s
bGVjdElubGluZUNvbnRlbnQoKSBjb25zdDsKIAogICAgIElubGluZUZvcm1hdHRpbmdTdGF0ZSYg
Zm9ybWF0dGluZ1N0YXRlKCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8SW5saW5lRm9ybWF0dGlu
Z1N0YXRlPihGb3JtYXR0aW5nQ29udGV4dDo6Zm9ybWF0dGluZ1N0YXRlKCkpOyB9CiB9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9y
bWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxp
bmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0TGluZUxheW91dC5jcHAKaW5kZXgg
N2IxM2FiMGI0ZWJjYmQyNTcxZmU2YzM2OGE4Zjc3MDE2ZmNhYTBlNC4uZDgxOGExYWFjZmZiZjdm
NjQ5MTFkZTMzMTNmZDNiYjgzM2EzMmJjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dExpbmVMYXlvdXQuY3BwCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSAi
RmxvYXRpbmdTdGF0ZS5oIgogI2luY2x1ZGUgIklubGluZUZvcm1hdHRpbmdTdGF0ZS5oIgogI2lu
Y2x1ZGUgIklubGluZUxpbmVCcmVha2VyLmgiCi0jaW5jbHVkZSAiSW5saW5lUnVuUHJvdmlkZXIu
aCIKICNpbmNsdWRlICJMYXlvdXRCb3guaCIKICNpbmNsdWRlICJMYXlvdXRDb250YWluZXIuaCIK
ICNpbmNsdWRlICJMYXlvdXRTdGF0ZS5oIgpAQCAtNDMsMTUxICs0MiwyNTAgQEAgbmFtZXNwYWNl
IExheW91dCB7CiAKIGNsYXNzIExpbmUgewogcHVibGljOgotICAgIHZvaWQgaW5pdChjb25zdCBM
YXlvdXRQb2ludCYgdG9wTGVmdCwgTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCwgTGF5b3V0VW5p
dCBtaW5pbWFsSGVpZ2h0KTsKKyAgICBMaW5lKGNvbnN0IExheW91dFN0YXRlJik7CisKKyAgICB2
b2lkIHJlc2V0KGNvbnN0IExheW91dFBvaW50JiB0b3BMZWZ0LCBMYXlvdXRVbml0IGF2YWlsYWJs
ZVdpZHRoLCBMYXlvdXRVbml0IG1pbmltdW1IZWlnaHQpOwogICAgIHZvaWQgY2xvc2UoKTsKIAot
ICAgIHZvaWQgYXBwZW5kQ29udGVudChjb25zdCBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuJiwgY29u
c3QgTGF5b3V0U2l6ZSYpOworICAgIHZvaWQgYXBwZW5kVGV4dENvbnRlbnQoY29uc3QgSW5saW5l
VGV4dEl0ZW0mLCBMYXlvdXRTaXplKTsKKyAgICB2b2lkIGFwcGVuZE5vblRleHRDb250ZW50KGNv
bnN0IElubGluZUl0ZW0mLCBMYXlvdXRTaXplKTsKKyAgICB2b2lkIGFwcGVuZE5vbkJyZWFrYWJs
ZVNwYWNlKGNvbnN0IElubGluZUl0ZW0mKTsKKworICAgIHZvaWQgYWRqdXN0TG9naWNhbExlZnQo
TGF5b3V0VW5pdCk7CisgICAgdm9pZCBhZGp1c3RMb2dpY2FsUmlnaHQoTGF5b3V0VW5pdCk7CiAK
LSAgICB2b2lkIGFkanVzdExvZ2ljYWxMZWZ0KExheW91dFVuaXQgZGVsdGEpOwotICAgIHZvaWQg
YWRqdXN0TG9naWNhbFJpZ2h0KExheW91dFVuaXQgZGVsdGEpOworICAgIHN0cnVjdCBMaW5lSXRl
bSB7CisgICAgICAgIERpc3BsYXk6OlJ1biBpbmxpbmVSdW47CisgICAgICAgIGNvbnN0IElubGlu
ZUl0ZW0mIGlubGluZUl0ZW07CisgICAgfTsKKyAgICBWZWN0b3I8TGluZUl0ZW0+JiBsaW5lSXRl
bXMoKSB7IHJldHVybiBtX2xpbmVJdGVtczsgfQogCi0gICAgYm9vbCBoYXNDb250ZW50KCkgY29u
c3QgeyByZXR1cm4gIW1faW5saW5lUnVucy5pc0VtcHR5KCk7IH0KKyAgICBib29sIGhhc0NvbnRl
bnQoKSBjb25zdDsKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2xpbmVJdGVt
cy5pc0VtcHR5KCk7IH0KKyAgICBib29sIGhhc1RyYWlsaW5nV2hpdGVzcGFjZSgpIGNvbnN0IHsg
cmV0dXJuIG1fbnVtYmVyT2ZUcmltbWFibGVSdW5zOyB9CisgICAgTGF5b3V0VW5pdCB0cmFpbGlu
Z1doaXRlc3BhY2VXaWR0aCgpIGNvbnN0OwogICAgIGJvb2wgaXNDbG9zZWQoKSBjb25zdCB7IHJl
dHVybiBtX2Nsb3NlZDsgfQogICAgIGJvb2wgaXNGaXJzdExpbmUoKSBjb25zdCB7IHJldHVybiBt
X2lzRmlyc3RMaW5lOyB9Ci0gICAgVmVjdG9yPElubGluZVJ1bj4mIHJ1bnMoKSB7IHJldHVybiBt
X2lubGluZVJ1bnM7IH0KLQotICAgIExheW91dFVuaXQgY29udGVudExvZ2ljYWxSaWdodCgpIGNv
bnN0OwotICAgIExheW91dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0KCkgY29uc3QgeyByZXR1cm4g
bV9sb2dpY2FsUmVjdC5sZWZ0KCk7IH0KLSAgICBMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoKCkg
Y29uc3QgeyByZXR1cm4gbV9hdmFpbGFibGVXaWR0aDsgfQotICAgIE9wdGlvbmFsPElubGluZVJ1
blByb3ZpZGVyOjpSdW46OlR5cGU+IGxhc3RSdW5UeXBlKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0
UnVuVHlwZTsgfQogCisgICAgTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fbGluZVdpZHRoIC0gbV9sb2dpY2FsUmVjdC53aWR0aCgpOyB9CiAgICAgTGF5b3V0VW5p
dCBsb2dpY2FsVG9wKCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsUmVjdC50b3AoKTsgfQorICAg
IExheW91dFVuaXQgbG9naWNhbExlZnQoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxSZWN0Lmxl
ZnQoKTsgfQogICAgIExheW91dFVuaXQgbG9naWNhbEJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIG1f
bG9naWNhbFJlY3QuYm90dG9tKCk7IH0KKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodCgpIGNv
bnN0IHsgcmV0dXJuIG1fbG9naWNhbFJlY3QucmlnaHQoKTsgfQorCiAgICAgTGF5b3V0VW5pdCBs
b2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbG9naWNhbEJvdHRvbSgpIC0gbG9naWNhbFRv
cCgpOyB9CiAKIHByaXZhdGU6Ci0gICAgc3RydWN0IFRyYWlsaW5nVHJpbW1hYmxlQ29udGVudCB7
Ci0gICAgICAgIExheW91dFVuaXQgd2lkdGg7Ci0gICAgICAgIHVuc2lnbmVkIGxlbmd0aDsKLSAg
ICB9OwotICAgIE9wdGlvbmFsPFRyYWlsaW5nVHJpbW1hYmxlQ29udGVudD4gbV90cmFpbGluZ1Ry
aW1tYWJsZUNvbnRlbnQ7Ci0gICAgT3B0aW9uYWw8SW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6VHlw
ZT4gbV9sYXN0UnVuVHlwZTsKKyAgICBjb25zdCBMYXlvdXRTdGF0ZSYgbV9sYXlvdXRTdGF0ZTsK
KyAgICB1bnNpZ25lZCBtX251bWJlck9mVHJpbW1hYmxlUnVucyB7IDAgfTsKICAgICBib29sIG1f
bGFzdFJ1bkNhbkV4cGFuZCB7IGZhbHNlIH07CiAKICAgICBEaXNwbGF5OjpCb3g6OlJlY3QgbV9s
b2dpY2FsUmVjdDsKLSAgICBMYXlvdXRVbml0IG1fYXZhaWxhYmxlV2lkdGg7CisgICAgTGF5b3V0
VW5pdCBtX2xpbmVXaWR0aDsKIAotICAgIFZlY3RvcjxJbmxpbmVSdW4+IG1faW5saW5lUnVuczsK
KyAgICBWZWN0b3I8TGluZUl0ZW0+IG1fbGluZUl0ZW1zOwogICAgIGJvb2wgbV9pc0ZpcnN0TGlu
ZSB7IHRydWUgfTsKICAgICBib29sIG1fY2xvc2VkIHsgdHJ1ZSB9OwogfTsKIAotdm9pZCBMaW5l
Ojppbml0KGNvbnN0IExheW91dFBvaW50JiB0b3BMZWZ0LCBMYXlvdXRVbml0IGF2YWlsYWJsZVdp
ZHRoLCBMYXlvdXRVbml0IG1pbmltYWxIZWlnaHQpCitMaW5lOjpMaW5lKGNvbnN0IExheW91dFN0
YXRlJiBsYXlvdXRTdGF0ZSkKKyAgICA6IG1fbGF5b3V0U3RhdGUobGF5b3V0U3RhdGUpCit7Cit9
CisKK3ZvaWQgTGluZTo6cmVzZXQoY29uc3QgTGF5b3V0UG9pbnQmIHRvcExlZnQsIExheW91dFVu
aXQgYXZhaWxhYmxlV2lkdGgsIExheW91dFVuaXQgbWluaW11bUhlaWdodCkKIHsKLSAgICBtX2xv
Z2ljYWxSZWN0LnNldFRvcExlZnQodG9wTGVmdCk7Ci0gICAgbV9sb2dpY2FsUmVjdC5zZXRXaWR0
aChhdmFpbGFibGVXaWR0aCk7Ci0gICAgbV9sb2dpY2FsUmVjdC5zZXRIZWlnaHQobWluaW1hbEhl
aWdodCk7Ci0gICAgbV9hdmFpbGFibGVXaWR0aCA9IGF2YWlsYWJsZVdpZHRoOworICAgIG1fbG9n
aWNhbFJlY3QgPSB7IHRvcExlZnQueSgpLCB0b3BMZWZ0LngoKSwgMCwgbWluaW11bUhlaWdodCB9
OworICAgIG1fbGluZVdpZHRoID0gYXZhaWxhYmxlV2lkdGg7CiAKLSAgICBtX2lubGluZVJ1bnMu
Y2xlYXIoKTsKLSAgICBtX2xhc3RSdW5UeXBlID0geyB9OworICAgIG1fbGluZUl0ZW1zLmNsZWFy
KCk7CiAgICAgbV9sYXN0UnVuQ2FuRXhwYW5kID0gZmFsc2U7Ci0gICAgbV90cmFpbGluZ1RyaW1t
YWJsZUNvbnRlbnQgPSB7IH07CisgICAgbV9udW1iZXJPZlRyaW1tYWJsZVJ1bnMgPSAwOwogICAg
IG1fY2xvc2VkID0gZmFsc2U7CiB9CiAKIHZvaWQgTGluZTo6YWRqdXN0TG9naWNhbExlZnQoTGF5
b3V0VW5pdCBkZWx0YSkKIHsKKyAgICBpZiAoIWRlbHRhKQorICAgICAgICByZXR1cm47CiAgICAg
QVNTRVJUKGRlbHRhID4gMCk7Ci0KLSAgICBtX2F2YWlsYWJsZVdpZHRoIC09IGRlbHRhOwotICAg
IG1fbG9naWNhbFJlY3Quc2hpZnRMZWZ0VG8obV9sb2dpY2FsUmVjdC5sZWZ0KCkgKyBkZWx0YSk7
Ci0KLSAgICBmb3IgKGF1dG8mIGlubGluZVJ1biA6IG1faW5saW5lUnVucykKLSAgICAgICAgaW5s
aW5lUnVuLm1vdmVIb3Jpem9udGFsbHkoZGVsdGEpOworICAgIC8vIFNocmluayB0aGUgbGluZSBh
bmQgbW92ZSB0aGUgaXRlbXMuCisgICAgbV9saW5lV2lkdGgtPSBkZWx0YTsKKyAgICBtX2xvZ2lj
YWxSZWN0Lm1vdmVIb3Jpem9udGFsbHkoZGVsdGEpOworICAgIGZvciAoYXV0byYgbGluZUl0ZW0g
OiBtX2xpbmVJdGVtcykKKyAgICAgICAgbGluZUl0ZW0uaW5saW5lUnVuLm1vdmVIb3Jpem9udGFs
bHkoZGVsdGEpOwogfQogCiB2b2lkIExpbmU6OmFkanVzdExvZ2ljYWxSaWdodChMYXlvdXRVbml0
IGRlbHRhKQogewogICAgIEFTU0VSVChkZWx0YSA+IDApOworICAgIG1fbGluZVdpZHRoLT0gZGVs
dGE7Cit9CiAKLSAgICBtX2F2YWlsYWJsZVdpZHRoIC09IGRlbHRhOwotICAgIG1fbG9naWNhbFJl
Y3Quc2hpZnRSaWdodFRvKG1fbG9naWNhbFJlY3QucmlnaHQoKSAtIGRlbHRhKTsKK3N0YXRpYyBi
b29sIGlzVHJpbW1hYmxlQ29udGVudChjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtKQorewor
ICAgIGlmICghaXM8SW5saW5lVGV4dEl0ZW0+KGlubGluZUl0ZW0pKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgYXV0byYgaW5saW5lVGV4dEl0ZW0gPSBkb3duY2FzdDxJbmxpbmVUZXh0SXRl
bT4oaW5saW5lSXRlbSk7CisgICAgcmV0dXJuIGlubGluZVRleHRJdGVtLmlzV2hpdGVzcGFjZSgp
ICYmIGlubGluZVRleHRJdGVtLnN0eWxlKCkuY29sbGFwc2VXaGl0ZVNwYWNlKCk7CiB9CiAKLXN0
YXRpYyBib29sIGlzVHJpbW1hYmxlQ29udGVudChjb25zdCBJbmxpbmVSdW5Qcm92aWRlcjo6UnVu
JiBpbmxpbmVSdW4pCitMYXlvdXRVbml0IExpbmU6OnRyYWlsaW5nV2hpdGVzcGFjZVdpZHRoKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gaW5saW5lUnVuLmlzV2hpdGVzcGFjZSgpICYmIGlubGluZVJ1
bi5zdHlsZSgpLmNvbGxhcHNlV2hpdGVTcGFjZSgpOworICAgIGlmIChpc0VtcHR5KCkgfHwgIW1f
bnVtYmVyT2ZUcmltbWFibGVSdW5zKQorICAgICAgICByZXR1cm4geyB9OworICAgIExheW91dFVu
aXQgdHJpbW1hYmxlV2lkdGg7CisgICAgYXV0byBudW1iZXJPZlRyaW1tYWJsZVJ1bnMgPSBtX251
bWJlck9mVHJpbW1hYmxlUnVuczsKKyAgICBhdXRvIHJ1bkluZGV4ID0gbV9saW5lSXRlbXMuc2l6
ZSgpIC0gMTsKKyAgICB3aGlsZSAobnVtYmVyT2ZUcmltbWFibGVSdW5zKSB7CisgICAgICAgIGF1
dG8mIGxpbmVJdGVtID0gbV9saW5lSXRlbXNbcnVuSW5kZXgtLV07CisgICAgICAgIGlmIChsaW5l
SXRlbS5pbmxpbmVJdGVtLmlzQ29udGFpbmVyU3RhcnQoKSB8fCBsaW5lSXRlbS5pbmxpbmVJdGVt
LmlzQ29udGFpbmVyRW5kKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgdHJpbW1h
YmxlV2lkdGggKz0gbGluZUl0ZW0uaW5saW5lUnVuLmxvZ2ljYWxXaWR0aCgpOworICAgICAgICAt
LW51bWJlck9mVHJpbW1hYmxlUnVuczsKKyAgICB9CisgICAgcmV0dXJuIHRyaW1tYWJsZVdpZHRo
OwogfQogCi1MYXlvdXRVbml0IExpbmU6OmNvbnRlbnRMb2dpY2FsUmlnaHQoKSBjb25zdAorYm9v
bCBMaW5lOjpoYXNDb250ZW50KCkgY29uc3QKIHsKLSAgICBpZiAobV9pbmxpbmVSdW5zLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuIG1fbG9naWNhbFJlY3QubGVmdCgpOworICAgIC8vIFJldHVy
biBmYWxzZSBmb3IgZW1wdHkgY29udGFpbmVycyBsaWtlIDxzcGFuPjwvc3Bhbj4uCisgICAgaWYg
KG1fbGluZUl0ZW1zLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGZvciAo
YXV0byYgbGluZUl0ZW0gOiBtX2xpbmVJdGVtcykgeworICAgICAgICBpZiAobGluZUl0ZW0uaW5s
aW5lSXRlbS5pc0NvbnRhaW5lclN0YXJ0KCkgfHwgbGluZUl0ZW0uaW5saW5lSXRlbS5pc0NvbnRh
aW5lckVuZCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChsaW5lSXRlbS5p
bmxpbmVSdW4ubG9naWNhbFdpZHRoKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgcmV0dXJuIGZhbHNlOworfQogCi0gICAgcmV0dXJuIG1faW5saW5lUnVucy5sYXN0KCku
bG9naWNhbFJpZ2h0KCk7Cit2b2lkIExpbmU6OmFwcGVuZE5vbkJyZWFrYWJsZVNwYWNlKGNvbnN0
IElubGluZUl0ZW0mIGlubGluZUl0ZW0pCit7CisgICAgQVNTRVJUKCFpc0Nsb3NlZCgpKTsKKyAg
ICAvLyBGSVhNRSBoZWlnaHQKKyAgICBhdXRvIGxvZ2ljYWxSZWN0ID0gRGlzcGxheTo6Qm94OjpS
ZWN0IHsgbG9naWNhbFRvcCgpLCBsb2dpY2FsUmlnaHQoKSwgaW5saW5lSXRlbS53aWR0aCgpLCAw
IH07CisgICAgbV9saW5lSXRlbXMuYXBwZW5kKHsgRGlzcGxheTo6UnVuIHsgbG9naWNhbFJlY3Qs
IHsgfX0sIGlubGluZUl0ZW0gfSk7CisgICAgbV9sb2dpY2FsUmVjdC5leHBhbmQoaW5saW5lSXRl
bS53aWR0aCgpLCAwKTsKKyAgICBtX2xhc3RSdW5DYW5FeHBhbmQgPSBmYWxzZTsKIH0KIAotdm9p
ZCBMaW5lOjphcHBlbmRDb250ZW50KGNvbnN0IElubGluZVJ1blByb3ZpZGVyOjpSdW4mIHJ1biwg
Y29uc3QgTGF5b3V0U2l6ZSYgcnVuU2l6ZSkKK3ZvaWQgTGluZTo6YXBwZW5kVGV4dENvbnRlbnQo
Y29uc3QgSW5saW5lVGV4dEl0ZW0mIGlubGluZUl0ZW0sIExheW91dFNpemUgcnVuU2l6ZSkKIHsK
ICAgICBBU1NFUlQoIWlzQ2xvc2VkKCkpOworICAgIGF1dG8gaXNUcmltbWFibGUgPSBpc1RyaW1t
YWJsZUNvbnRlbnQoaW5saW5lSXRlbSk7CisKKyAgICBhdXRvIHNob3VsZENvbGxhcHNlID0gWyZd
KCkgeworICAgICAgICBpZiAoIWlzVHJpbW1hYmxlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAvLyBTa2lwIGxlYWRpbmcgd2hpdGVzcGFjZS4KKyAgICAgICAgaWYgKGlzRW1w
dHkoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAvLyBDaGVjayBpZiB0aGUg
cHJldmlvdXMgcnVuIGlzIGEgd2hpdGVzcGFjZSBhbmQgd2hldGhlciB3ZSBjYW4gY29sbGFwc2Ug
aXQgd2l0aCB0aGlzIHJ1bi4KKyAgICAgICAgYXV0byBjdXJyZW50SW5kZXggPSBtX2xpbmVJdGVt
cy5zaXplKCkgLSAxOworICAgICAgICBhdXRvKiBjdXJyZW50SXRlbSA9ICZtX2xpbmVJdGVtc1tj
dXJyZW50SW5kZXhdLmlubGluZUl0ZW07CisgICAgICAgIC8vIFNraXAgbm9uLWNvbmVudCBpbmxp
bmUgaXRlbXMuCisgICAgICAgIHdoaWxlIChjdXJyZW50SXRlbS0+aXNDb250YWluZXJTdGFydCgp
IHx8IGN1cnJlbnRJdGVtLT5pc0NvbnRhaW5lckVuZCgpKSB7CisgICAgICAgICAgICBpZiAoIWN1
cnJlbnRJbmRleC0tKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOyAKKyAgICAgICAgICAg
IGN1cnJlbnRJdGVtID0gJm1fbGluZUl0ZW1zW2N1cnJlbnRJbmRleF0uaW5saW5lSXRlbTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gY3VycmVudEl0ZW0tPmlzVGV4dCgpICYmIGlzVHJpbW1h
YmxlQ29udGVudChkb3duY2FzdDxJbmxpbmVUZXh0SXRlbT4oKmN1cnJlbnRJdGVtKSk7CisgICAg
fTsKIAotICAgIC8vIEFwcGVuZCB0aGlzIHRleHQgcnVuIHRvIHRoZSBlbmQgb2YgdGhlIGxhc3Qg
dGV4dCBydW4sIGlmIHRoZSBsYXN0IHJ1biBpcyBjb250aW51b3VzLgotICAgIE9wdGlvbmFsPElu
bGluZVJ1bjo6VGV4dENvbnRleHQ+IHRleHRSdW47Ci0gICAgaWYgKHJ1bi5pc1RleHQoKSkgewot
ICAgICAgICBhdXRvIHRleHRDb250ZXh0ID0gcnVuLnRleHRDb250ZXh0KCk7Ci0gICAgICAgIGF1
dG8gcnVuTGVuZ3RoID0gdGV4dENvbnRleHQtPmlzQ29sbGFwc2VkKCkgPyAxIDogdGV4dENvbnRl
eHQtPmxlbmd0aCgpOwotICAgICAgICB0ZXh0UnVuID0gSW5saW5lUnVuOjpUZXh0Q29udGV4dCB7
IHRleHRDb250ZXh0LT5zdGFydCgpLCBydW5MZW5ndGggfTsKLSAgICB9CisgICAgaWYgKHNob3Vs
ZENvbGxhcHNlKCkpCisgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gcmVxdWlyZXNOZXdJbmxp
bmVSdW4gPSAhaGFzQ29udGVudCgpIHx8ICFydW4uaXNUZXh0KCkgfHwgIW1fbGFzdFJ1bkNhbkV4
cGFuZDsKLSAgICBpZiAocmVxdWlyZXNOZXdJbmxpbmVSdW4pIHsKLSAgICAgICAgLy8gRklYTUU6
IFRoaXMgbmVlZHMgcHJvcGVyIGJhc2VsaW5lIGhhbmRsaW5nCi0gICAgICAgIGF1dG8gaW5saW5l
UnVuID0gSW5saW5lUnVuIHsgeyBsb2dpY2FsVG9wKCksIGNvbnRlbnRMb2dpY2FsUmlnaHQoKSwg
cnVuU2l6ZS53aWR0aCgpLCBydW5TaXplLmhlaWdodCgpIH0sIHJ1bi5pbmxpbmVJdGVtKCkgfTsK
LSAgICAgICAgaWYgKHRleHRSdW4pCi0gICAgICAgICAgICBpbmxpbmVSdW4uc2V0VGV4dENvbnRl
eHQoeyB0ZXh0UnVuLT5zdGFydCgpLCB0ZXh0UnVuLT5sZW5ndGgoKSB9KTsKLSAgICAgICAgbV9p
bmxpbmVSdW5zLmFwcGVuZChpbmxpbmVSdW4pOworICAgIG1fbGFzdFJ1bkNhbkV4cGFuZCA9ICFp
bmxpbmVJdGVtLmlzQ29sbGFwc2VkKCk7CisgICAgbV9udW1iZXJPZlRyaW1tYWJsZVJ1bnMgPSBp
c1RyaW1tYWJsZSA/IG1fbnVtYmVyT2ZUcmltbWFibGVSdW5zICsgMSA6IDA7IAorICAgIGF1dG8g
cnVuTGVuZ3RoID0gaW5saW5lSXRlbS5pc0NvbGxhcHNlZCgpID8gMSA6IGlubGluZUl0ZW0ubGVu
Z3RoKCk7CisKKyAgICBhdXRvIHJlcXVpcmVzTmV3UnVuID0gaXNFbXB0eSgpIHx8ICFtX2xhc3RS
dW5DYW5FeHBhbmQgfHwgJm1fbGluZUl0ZW1zLmxhc3QoKS5pbmxpbmVJdGVtICE9ICZpbmxpbmVJ
dGVtOworICAgIGlmIChyZXF1aXJlc05ld1J1bikgeworICAgICAgICBhdXRvIGxvZ2ljYWxSZWN0
ID0gRGlzcGxheTo6Qm94OjpSZWN0IHsgbG9naWNhbFRvcCgpLCBsb2dpY2FsUmlnaHQoKSwgcnVu
U2l6ZS53aWR0aCgpLCBydW5TaXplLmhlaWdodCgpIH07CisgICAgICAgIGF1dG8gdGV4dENvbnRl
eHQgPSBEaXNwbGF5OjpSdW46OlRleHRDb250ZXh0IHsgaW5saW5lSXRlbS5zdGFydCgpLCBydW5M
ZW5ndGggfTsKKyAgICAgICAgYXV0byBkaXNwbGF5UnVuID0gRGlzcGxheTo6UnVuKGxvZ2ljYWxS
ZWN0LCB0ZXh0Q29udGV4dCk7CisgICAgICAgIG1fbGluZUl0ZW1zLmFwcGVuZCh7IGRpc3BsYXlS
dW4sIGlubGluZUl0ZW0gfSk7CisgICAgICAgIG1fbG9naWNhbFJlY3QuZXhwYW5kKHJ1blNpemUu
d2lkdGgoKSwgMCk7CiAgICAgICAgIG1fbG9naWNhbFJlY3Quc2V0SGVpZ2h0KHN0ZDo6bWF4KHJ1
blNpemUuaGVpZ2h0KCksIG1fbG9naWNhbFJlY3QuaGVpZ2h0KCkpKTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICAvLyBOb24tdGV4dCBydW5zIGFsd2F5cyByZXF1aXJlIG5ldyBpbmxpbmUgcnVuLgot
ICAgICAgICBBU1NFUlQodGV4dFJ1bik7Ci0gICAgICAgIGF1dG8mIGlubGluZVJ1biA9IG1faW5s
aW5lUnVucy5sYXN0KCk7Ci0gICAgICAgIEFTU0VSVChydW5TaXplLmhlaWdodCgpID09IGlubGlu
ZVJ1bi5sb2dpY2FsSGVpZ2h0KCkpOwotICAgICAgICBpbmxpbmVSdW4uc2V0TG9naWNhbFdpZHRo
KGlubGluZVJ1bi5sb2dpY2FsV2lkdGgoKSArIHJ1blNpemUud2lkdGgoKSk7Ci0gICAgICAgIGlu
bGluZVJ1bi50ZXh0Q29udGV4dCgpLT5zZXRMZW5ndGgoaW5saW5lUnVuLnRleHRDb250ZXh0KCkt
Pmxlbmd0aCgpICsgdGV4dFJ1bi0+bGVuZ3RoKCkpOworICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgbV9hdmFpbGFibGVXaWR0aCAtPSBydW5TaXplLndpZHRoKCk7Ci0gICAgbV9sYXN0UnVu
VHlwZSA9IHJ1bi50eXBlKCk7Ci0gICAgbV9sYXN0UnVuQ2FuRXhwYW5kID0gcnVuLmlzVGV4dCgp
ICYmICFydW4udGV4dENvbnRleHQoKS0+aXNDb2xsYXBzZWQoKTsKLSAgICBtX3RyYWlsaW5nVHJp
bW1hYmxlQ29udGVudCA9IHsgfTsKLSAgICBpZiAoaXNUcmltbWFibGVDb250ZW50KHJ1bikpCi0g
ICAgICAgIG1fdHJhaWxpbmdUcmltbWFibGVDb250ZW50ID0gVHJhaWxpbmdUcmltbWFibGVDb250
ZW50IHsgcnVuU2l6ZS53aWR0aCgpLCB0ZXh0UnVuLT5sZW5ndGgoKSB9OworICAgIGF1dG8mIGxh
c3RJbmxpbmVSdW4gPSBtX2xpbmVJdGVtcy5sYXN0KCkuaW5saW5lUnVuOworICAgIEFTU0VSVChy
dW5TaXplLmhlaWdodCgpID09IGxhc3RJbmxpbmVSdW4ubG9naWNhbEhlaWdodCgpKTsKKyAgICBs
YXN0SW5saW5lUnVuLmV4cGFuZEhvcml6b250YWxseShydW5TaXplLndpZHRoKCkpOworICAgIGxh
c3RJbmxpbmVSdW4udGV4dENvbnRleHQoKS0+ZXhwYW5kKHJ1bkxlbmd0aCk7CisgICAgbV9sb2dp
Y2FsUmVjdC5leHBhbmQocnVuU2l6ZS53aWR0aCgpLCAwKTsKK30KKwordm9pZCBMaW5lOjphcHBl
bmROb25UZXh0Q29udGVudChjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtLCBMYXlvdXRTaXpl
IHJ1blNpemUpCit7CisgICAgQVNTRVJUKCFpc0Nsb3NlZCgpKTsKKworICAgIGF1dG8mIGRpc3Bs
YXlCb3ggPSBtX2xheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goaW5saW5lSXRlbS5s
YXlvdXRCb3goKSk7CisgICAgYXV0byBob3Jpem9udGFsTWFyZ2luID0gZGlzcGxheUJveC5ob3Jp
em9udGFsTWFyZ2luKCk7CisKKyAgICBhdXRvIGxvZ2ljYWxSZWN0ID0gRGlzcGxheTo6Qm94OjpS
ZWN0IHsgbG9naWNhbFRvcCgpLCBsb2dpY2FsUmlnaHQoKSArIGhvcml6b250YWxNYXJnaW4uc3Rh
cnQsIHJ1blNpemUud2lkdGgoKSwgcnVuU2l6ZS5oZWlnaHQoKSB9OworICAgIG1fbGluZUl0ZW1z
LmFwcGVuZCh7IERpc3BsYXk6OlJ1biB7IGxvZ2ljYWxSZWN0LCB7IH19LCBpbmxpbmVJdGVtIH0p
OworICAgIG1fbG9naWNhbFJlY3Quc2V0SGVpZ2h0KHN0ZDo6bWF4KHJ1blNpemUuaGVpZ2h0KCks
IG1fbG9naWNhbFJlY3QuaGVpZ2h0KCkpKTsKKyAgICBtX2xvZ2ljYWxSZWN0LmV4cGFuZChydW5T
aXplLndpZHRoKCkgKyBob3Jpem9udGFsTWFyZ2luLnN0YXJ0ICsgaG9yaXpvbnRhbE1hcmdpbi5l
bmQsIDApOworCisgICAgbV9sYXN0UnVuQ2FuRXhwYW5kID0gZmFsc2U7CisgICAgbV9udW1iZXJP
ZlRyaW1tYWJsZVJ1bnMgPSAwOwogfQogCiB2b2lkIExpbmU6OmNsb3NlKCkKIHsKLSAgICBhdXRv
IHRyaW1UcmFpbGluZ0NvbnRlbnQgPSBbJl0gewotICAgICAgICBpZiAoIW1fdHJhaWxpbmdUcmlt
bWFibGVDb250ZW50KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBhdXRvJiBsYXN0SW5s
aW5lUnVuID0gbV9pbmxpbmVSdW5zLmxhc3QoKTsKLSAgICAgICAgbGFzdElubGluZVJ1bi5zZXRM
b2dpY2FsV2lkdGgobGFzdElubGluZVJ1bi5sb2dpY2FsV2lkdGgoKSAtIG1fdHJhaWxpbmdUcmlt
bWFibGVDb250ZW50LT53aWR0aCk7Ci0gICAgICAgIGxhc3RJbmxpbmVSdW4udGV4dENvbnRleHQo
KS0+c2V0TGVuZ3RoKGxhc3RJbmxpbmVSdW4udGV4dENvbnRleHQoKS0+bGVuZ3RoKCkgLSBtX3Ry
YWlsaW5nVHJpbW1hYmxlQ29udGVudC0+bGVuZ3RoKTsKLQotICAgICAgICBpZiAoIWxhc3RJbmxp
bmVSdW4udGV4dENvbnRleHQoKS0+bGVuZ3RoKCkpCi0gICAgICAgICAgICBtX2lubGluZVJ1bnMu
cmVtb3ZlTGFzdCgpOwotICAgICAgICBtX2F2YWlsYWJsZVdpZHRoICs9IG1fdHJhaWxpbmdUcmlt
bWFibGVDb250ZW50LT53aWR0aDsKLSAgICAgICAgbV90cmFpbGluZ1RyaW1tYWJsZUNvbnRlbnQg
PSB7IH07CisgICAgYXV0byByZW1vdmVUcmltbWFibGVUcmFpbGluZ0NvbnRlbnQgPSBbJl0gewor
ICAgICAgICBBU1NFUlQobV9saW5lSXRlbXMuc2l6ZSgpKTsKKyAgICAgICAgYXV0byBsYXN0TGlu
ZUl0ZW1JbmRleCA9IG1fbGluZUl0ZW1zLnNpemUoKSAtIDE7CisgICAgICAgIHdoaWxlIChtX251
bWJlck9mVHJpbW1hYmxlUnVucykgeworICAgICAgICAgICAgYXV0byYgbGFzdExpbmVJdGVtID0g
bV9saW5lSXRlbXNbbGFzdExpbmVJdGVtSW5kZXhdOworICAgICAgICAgICAgaWYgKGxhc3RMaW5l
SXRlbS5pbmxpbmVJdGVtLmlzQ29udGFpbmVyU3RhcnQoKSB8fCBsYXN0TGluZUl0ZW0uaW5saW5l
SXRlbS5pc0NvbnRhaW5lckVuZCgpKSB7CisgICAgICAgICAgICAgICAgLS1sYXN0TGluZUl0ZW1J
bmRleDsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIG1fbG9naWNhbFJlY3QuZXhwYW5kKC1sYXN0TGluZUl0ZW0uaW5saW5lUnVuLmxvZ2ljYWxX
aWR0aCgpLCAwKTsKKyAgICAgICAgICAgIG1fbGluZUl0ZW1zLnJlbW92ZShsYXN0TGluZUl0ZW1J
bmRleCk7CisgICAgICAgICAgICAtLW1fbnVtYmVyT2ZUcmltbWFibGVSdW5zOworICAgICAgICAg
ICAgLS1sYXN0TGluZUl0ZW1JbmRleDsKKyAgICAgICAgfQogICAgIH07CiAKLSAgICBpZiAoIWhh
c0NvbnRlbnQoKSkKKyAgICBpZiAoaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICB0
cmltVHJhaWxpbmdDb250ZW50KCk7CisgICAgcmVtb3ZlVHJpbW1hYmxlVHJhaWxpbmdDb250ZW50
KCk7CiAgICAgbV9pc0ZpcnN0TGluZSA9IGZhbHNlOwogICAgIG1fY2xvc2VkID0gdHJ1ZTsKIH0K
IAorc3RydWN0IFVuY29tbWl0dGVkQ29udGVudCB7CisgICAgdm9pZCBhZGQoSW5saW5lSXRlbSYp
OworICAgIHZvaWQgcmVzZXQoKTsKKworICAgIFZlY3RvcjxJbmxpbmVJdGVtKj4gaW5saW5lSXRl
bXMoKSB7IHJldHVybiBtX2lubGluZUl0ZW1zOyB9CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Qg
eyByZXR1cm4gbV9pbmxpbmVJdGVtcy5pc0VtcHR5KCk7IH0KKyAgICBMYXlvdXRVbml0IHdpZHRo
KCkgY29uc3QgeyByZXR1cm4gbV93aWR0aDsgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxJbmxp
bmVJdGVtKj4gbV9pbmxpbmVJdGVtczsKKyAgICBMYXlvdXRVbml0IG1fd2lkdGg7Cit9OworCit2
b2lkIFVuY29tbWl0dGVkQ29udGVudDo6YWRkKElubGluZUl0ZW0mIGlubGluZUl0ZW0pCit7Cisg
ICAgbV9pbmxpbmVJdGVtcy5hcHBlbmQoJmlubGluZUl0ZW0pOworICAgIG1fd2lkdGggKz0gaW5s
aW5lSXRlbS53aWR0aCgpOworfQorCit2b2lkIFVuY29tbWl0dGVkQ29udGVudDo6cmVzZXQoKQor
eworICAgIG1faW5saW5lSXRlbXMuY2xlYXIoKTsKKyAgICBtX3dpZHRoID0gMDsKK30KKwogSW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OkxpbmVMYXlvdXQoY29uc3QgSW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQmIGlubGluZUZvcm1hdHRpbmdDb250ZXh0KQogICAgIDogbV9mb3Jt
YXR0aW5nQ29udGV4dChpbmxpbmVGb3JtYXR0aW5nQ29udGV4dCkKICAgICAsIG1fZm9ybWF0dGlu
Z1N0YXRlKG1fZm9ybWF0dGluZ0NvbnRleHQuZm9ybWF0dGluZ1N0YXRlKCkpCkBAIC0xOTYsNzIg
KzI5NCw3MSBAQCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6TGluZUxheW91
dChjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgaQogewogfQogCi1zdGF0aWMgYm9vbCBp
c1RyaW1tYWJsZUNvbnRlbnQoY29uc3QgSW5saW5lTGluZUJyZWFrZXI6OlJ1biYgcnVuKQotewot
ICAgIHJldHVybiBydW4uY29udGVudC5pc1doaXRlc3BhY2UoKSAmJiBydW4uY29udGVudC5zdHls
ZSgpLmNvbGxhcHNlV2hpdGVTcGFjZSgpOwotfQotCi12b2lkIElubGluZUZvcm1hdHRpbmdDb250
ZXh0OjpMaW5lTGF5b3V0OjpsYXlvdXQoY29uc3QgSW5saW5lUnVuUHJvdmlkZXImIGlubGluZVJ1
blByb3ZpZGVyKSBjb25zdAordm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91
dDo6bGF5b3V0KCkgY29uc3QKIHsKLSAgICBhdXRvJiBsYXlvdXRTdGF0ZSA9IG1fZm9ybWF0dGlu
Z0NvbnRleHQubGF5b3V0U3RhdGUoKTsKICAgICBhdXRvIGZsb2F0aW5nQ29udGV4dCA9IEZsb2F0
aW5nQ29udGV4dCB7IG1fZmxvYXRpbmdTdGF0ZSB9OworICAgIExpbmUgbGluZShsYXlvdXRTdGF0
ZSgpKTsKKyAgICBVbmNvbW1pdHRlZENvbnRlbnQgdW5jb21taXR0ZWRDb250ZW50OwogCi0gICAg
TGluZSBsaW5lOwogICAgIGluaXRpYWxpemVOZXdMaW5lKGxpbmUpOwogCi0gICAgSW5saW5lTGlu
ZUJyZWFrZXIgbGluZUJyZWFrZXIobGF5b3V0U3RhdGUsIG1fZm9ybWF0dGluZ1N0YXRlLmlubGlu
ZUNvbnRlbnQoKSwgaW5saW5lUnVuUHJvdmlkZXIucnVucygpKTsKLSAgICB3aGlsZSAoYXV0byBy
dW4gPSBsaW5lQnJlYWtlci5uZXh0UnVuKGxpbmUuY29udGVudExvZ2ljYWxSaWdodCgpLCBsaW5l
LmF2YWlsYWJsZVdpZHRoKCksICFsaW5lLmhhc0NvbnRlbnQoKSkpIHsKLSAgICAgICAgYXV0byBp
c0ZpcnN0UnVuID0gcnVuLT5wb3NpdGlvbiA9PSBJbmxpbmVMaW5lQnJlYWtlcjo6UnVuOjpQb3Np
dGlvbjo6TGluZUJlZ2luOwotICAgICAgICBhdXRvIGlzTGFzdFJ1biA9IHJ1bi0+cG9zaXRpb24g
PT0gSW5saW5lTGluZUJyZWFrZXI6OlJ1bjo6UG9zaXRpb246OkxpbmVFbmQ7Ci0gICAgICAgIGF1
dG8gZ2VuZXJhdGVzSW5saW5lUnVuID0gdHJ1ZTsKLQotICAgICAgICAvLyBQb3NpdGlvbiBmbG9h
dCBhbmQgYWRqdXN0IHRoZSBydW5zIG9uIGxpbmUuCi0gICAgICAgIGlmIChydW4tPmNvbnRlbnQu
aXNGbG9hdCgpKSB7Ci0gICAgICAgICAgICBhdXRvJiBmbG9hdEJveCA9IHJ1bi0+Y29udGVudC5p
bmxpbmVJdGVtKCkubGF5b3V0Qm94KCk7Ci0gICAgICAgICAgICBjb21wdXRlRmxvYXRQb3NpdGlv
bihmbG9hdGluZ0NvbnRleHQsIGxpbmUsIGZsb2F0Qm94KTsKLSAgICAgICAgICAgIG1fZmxvYXRp
bmdTdGF0ZS5hcHBlbmQoZmxvYXRCb3gpOwotCi0gICAgICAgICAgICBhdXRvIGZsb2F0Qm94V2lk
dGggPSBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGZsb2F0Qm94KS5tYXJnaW5C
b3goKS53aWR0aCgpOwotICAgICAgICAgICAgLy8gU2hyaW5rIGF2YWlsYmxlIHNwYWNlIGZvciBj
dXJyZW50IGxpbmUgYW5kIG1vdmUgZXhpc3RpbmcgaW5saW5lIHJ1bnMuCi0gICAgICAgICAgICBm
bG9hdEJveC5pc0xlZnRGbG9hdGluZ1Bvc2l0aW9uZWQoKSA/IGxpbmUuYWRqdXN0TG9naWNhbExl
ZnQoZmxvYXRCb3hXaWR0aCkgOiBsaW5lLmFkanVzdExvZ2ljYWxSaWdodChmbG9hdEJveFdpZHRo
KTsKKyAgICBhdXRvIGNvbW1pdFBlbmRpbmdDb250ZW50ID0gWyZdIHsKKyAgICAgICAgZm9yIChh
dXRvKiB1bmNvbW1pdHRlZCA6IHVuY29tbWl0dGVkQ29udGVudC5pbmxpbmVJdGVtcygpKQorICAg
ICAgICAgICAgY29tbWl0SW5saW5lSXRlbVRvTGluZShsaW5lLCAqdW5jb21taXR0ZWQpOworICAg
ICAgICB1bmNvbW1pdHRlZENvbnRlbnQucmVzZXQoKTsKKyAgICB9OwogCi0gICAgICAgICAgICBn
ZW5lcmF0ZXNJbmxpbmVSdW4gPSBmYWxzZTsKKyAgICBMaW5lQnJlYWtlciBsaW5lQnJlYWtlcihs
YXlvdXRTdGF0ZSgpKTsKKyAgICBhdXRvJiBpbmxpbmVDb250ZW50ID0gbV9mb3JtYXR0aW5nU3Rh
dGUuaW5saW5lSXRlbXMoKTsKKyAgICBmb3IgKGF1dG8mIGlubGluZUl0ZW0gOiBpbmxpbmVDb250
ZW50KSB7CisgICAgICAgIC8vIDEuIFNpbXBseSBhZGQgbm9uLWJyZWFrYWJsZSBzcGFjZXMgdG8g
dGhlIGN1cnJlbnQgbGluZS4gVGhleSBkb24ndCB3cmFwLgorICAgICAgICAvLyAyLiBOb3JtYWwg
aW5saW5lIGJveGVzIGVpdGhlciBnbyBvbiB0aGUgY3VycmVudCBvciB3cmFwL2JyZWFrIHRvIHRo
ZSBuZXh0IGxpbmUuCisgICAgICAgIC8vIDMuIEZsb2F0cyBhcmUgc3BlY2lhbC4gVGhleSBjb25z
dHJhaW4gdGhlIGxpbmVzIGluc3RlYWQgb2YgYmVpbmcgb24gdGhlbS4KKyAgICAgICAgYXV0byBh
dmFpbGFibGVXaWR0aCA9IGxpbmUuYXZhaWxhYmxlV2lkdGgoKSAtIHVuY29tbWl0dGVkQ29udGVu
dC53aWR0aCgpOworICAgICAgICBhdXRvIGN1cnJlbnRMb2dpY2FsUmlnaHQgPSBsaW5lLmxvZ2lj
YWxSaWdodCgpICsgdW5jb21taXR0ZWRDb250ZW50LndpZHRoKCk7CisgICAgICAgIC8vIEZJWE1F
OiBFbnN1cmUgTGluZUNvbnRleHQ6OnRyaW1tYWJsZVdpZHRoIGluY2x1ZGVzIHVuY29tbWl0dGVk
IGNvbnRlbnQgaWYgbmVlZGVkLgorICAgICAgICBhdXRvIGJyZWFraW5nQ29udGV4dCA9IGxpbmVC
cmVha2VyLmJyZWFraW5nQ29udGV4dCgqaW5saW5lSXRlbSwgeyBhdmFpbGFibGVXaWR0aCwgY3Vy
cmVudExvZ2ljYWxSaWdodCwgbGluZS50cmFpbGluZ1doaXRlc3BhY2VXaWR0aCgpLCAhbGluZS5o
YXNDb250ZW50KCkgfSk7CisgICAgICAgIGlmIChicmVha2luZ0NvbnRleHQuaXNBdEJyZWFraW5n
T3Bwb3J0dW5pdHkpCisgICAgICAgICAgICBjb21taXRQZW5kaW5nQ29udGVudCgpOworCisgICAg
ICAgIGlmIChicmVha2luZ0NvbnRleHQuYnJlYWtpbmdCZWhhdmlvciA9PSBMaW5lQnJlYWtlcjo6
QnJlYWtpbmdCZWhhdmlvcjo6QnJlYWspIHsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfSU1QTEVN
RU5URURfWUVUKCk7CisgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAg
IC8vIDEuIEluaXRpYWxpemUgbmV3IGxpbmUgaWYgbmVlZGVkLgotICAgICAgICAvLyAyLiBBcHBl
bmQgaW5saW5lIHJ1biB1bmxlc3MgaXQgaXMgc2tpcHBlZC4KLSAgICAgICAgLy8gMy4gQ2xvc2Ug
Y3VycmVudCBsaW5lIGlmIG5lZWRlZC4KLSAgICAgICAgaWYgKGlzRmlyc3RSdW4pIHsKLSAgICAg
ICAgICAgIC8vIFdoZW4gdGhlIGZpcnN0IHJ1biBkb2VzIG5vdCBnZW5lcmF0ZSBhbiBhY3R1YWwg
aW5saW5lIHJ1biwgdGhlIG5leHQgcnVuIGNvbWVzIGluIGZpcnN0LXJ1biBhcyB3ZWxsLgotICAg
ICAgICAgICAgLy8gTm8gbmVlZCB0byBzcGVuZCB0aW1lIG9uIGNsb3NpbmcvaW5pdGlhbGl6aW5n
LgotICAgICAgICAgICAgLy8gU2tpcCBsZWFkaW5nIHdoaXRlc3BhY2UuCi0gICAgICAgICAgICBp
ZiAoIWdlbmVyYXRlc0lubGluZVJ1biB8fCBpc1RyaW1tYWJsZUNvbnRlbnQoKnJ1bikpCi0gICAg
ICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIGlmIChsaW5lLmhhc0NvbnRlbnQo
KSkgewotICAgICAgICAgICAgICAgIC8vIFByZXZpb3VzIHJ1biBlbmRlZCB1cCBiZWluZyBhdCB0
aGUgbGluZSBlbmQuIEFkanVzdCB0aGUgbGluZSBhY2NvcmRpbmdseS4KLSAgICAgICAgICAgICAg
ICBpZiAoIWxpbmUuaXNDbG9zZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgY2xvc2VMaW5lKGxp
bmUsIElzTGFzdExpbmU6Ok5vKTsKLSAgICAgICAgICAgICAgICBpbml0aWFsaXplTmV3TGluZShs
aW5lKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgaWYgKGJyZWFraW5nQ29udGV4dC5icmVha2lu
Z0JlaGF2aW9yID09IExpbmVCcmVha2VyOjpCcmVha2luZ0JlaGF2aW9yOjpXcmFwKSB7CisgICAg
ICAgICAgICBjbG9zZUxpbmUobGluZSwgSXNMYXN0TGluZTo6Tm8pOworICAgICAgICAgICAgaW5p
dGlhbGl6ZU5ld0xpbmUobGluZSk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoZ2VuZXJhdGVz
SW5saW5lUnVuKSB7Ci0gICAgICAgICAgICBhdXRvIHdpZHRoID0gcnVuLT53aWR0aDsKLSAgICAg
ICAgICAgIGF1dG8gaGVpZ2h0ID0gcnVuLT5jb250ZW50LmlzVGV4dCgpID8gTGF5b3V0VW5pdCht
X2Zvcm1hdHRpbmdSb290LnN0eWxlKCkuY29tcHV0ZWRMaW5lSGVpZ2h0KCkpIDogbGF5b3V0U3Rh
dGUuZGlzcGxheUJveEZvckxheW91dEJveChydW4tPmNvbnRlbnQuaW5saW5lSXRlbSgpLmxheW91
dEJveCgpKS5oZWlnaHQoKTsgCi0gICAgICAgICAgICBhcHBlbmRDb250ZW50VG9MaW5lKGxpbmUs
IHJ1bi0+Y29udGVudCwgeyB3aWR0aCwgaGVpZ2h0IH0pOworICAgICAgICBpZiAoaW5saW5lSXRl
bS0+aXNGbG9hdCgpKSB7CisgICAgICAgICAgICBhdXRvJiBmbG9hdEJveCA9IGlubGluZUl0ZW0t
PmxheW91dEJveCgpOworICAgICAgICAgICAgY29tcHV0ZUZsb2F0UG9zaXRpb24oZmxvYXRpbmdD
b250ZXh0LCBsaW5lLCBmbG9hdEJveCk7CisgICAgICAgICAgICBtX2Zsb2F0aW5nU3RhdGUuYXBw
ZW5kKGZsb2F0Qm94KTsKKyAgICAgICAgICAgIC8vIFNocmluayBhdmFpbGJsZSBzcGFjZSBmb3Ig
Y3VycmVudCBsaW5lIGFuZCBtb3ZlIGV4aXN0aW5nIGlubGluZSBydW5zLgorICAgICAgICAgICAg
YXV0byBmbG9hdEJveFdpZHRoID0gaW5saW5lSXRlbS0+d2lkdGgoKTsKKyAgICAgICAgICAgIGZs
b2F0Qm94LmlzTGVmdEZsb2F0aW5nUG9zaXRpb25lZCgpID8gbGluZS5hZGp1c3RMb2dpY2FsTGVm
dChmbG9hdEJveFdpZHRoKSA6IGxpbmUuYWRqdXN0TG9naWNhbFJpZ2h0KGZsb2F0Qm94V2lkdGgp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGJyZWFraW5nQ29udGV4dC5pc0F0
QnJlYWtpbmdPcHBvcnR1bml0eSkKKyAgICAgICAgICAgICAgICBjb21taXRJbmxpbmVJdGVtVG9M
aW5lKGxpbmUsICppbmxpbmVJdGVtKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICB1bmNvbW1pdHRlZENvbnRlbnQuYWRkKCppbmxpbmVJdGVtKTsKICAgICAgICAgfQotCi0gICAg
ICAgIGlmIChpc0xhc3RSdW4pCisgICAgfQorICAgIC8vIFByb2Nlc3MgcmVtYWluaW5nIHVuY29t
bWl0dGVkIGNvbnRlbnQuCisgICAgaWYgKCF1bmNvbW1pdHRlZENvbnRlbnQuaXNFbXB0eSgpKSB7
CisgICAgICAgIGlmIChsaW5lLmF2YWlsYWJsZVdpZHRoKCkgPCB1bmNvbW1pdHRlZENvbnRlbnQu
d2lkdGgoKSkgewogICAgICAgICAgICAgY2xvc2VMaW5lKGxpbmUsIElzTGFzdExpbmU6Ok5vKTsK
KyAgICAgICAgICAgIGluaXRpYWxpemVOZXdMaW5lKGxpbmUpOworICAgICAgICB9CisgICAgICAg
IGNvbW1pdFBlbmRpbmdDb250ZW50KCk7CiAgICAgfQotCiAgICAgY2xvc2VMaW5lKGxpbmUsIElz
TGFzdExpbmU6Olllcyk7CiB9CiAKIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVM
YXlvdXQ6OmluaXRpYWxpemVOZXdMaW5lKExpbmUmIGxpbmUpIGNvbnN0CiB7Ci0gICAgYXV0byYg
Zm9ybWF0dGluZ1Jvb3REaXNwbGF5Qm94ID0gbV9mb3JtYXR0aW5nQ29udGV4dC5sYXlvdXRTdGF0
ZSgpLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobV9mb3JtYXR0aW5nUm9vdCk7CisgICAgYXV0byYg
Zm9ybWF0dGluZ1Jvb3REaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUoKS5kaXNwbGF5Qm94Rm9yTGF5
b3V0Qm94KG1fZm9ybWF0dGluZ1Jvb3QpOwogCiAgICAgYXV0byBsaW5lTG9naWNhbExlZnQgPSBm
b3JtYXR0aW5nUm9vdERpc3BsYXlCb3guY29udGVudEJveExlZnQoKTsKICAgICBhdXRvIGxpbmVM
b2dpY2FsVG9wID0gbGluZS5pc0ZpcnN0TGluZSgpID8gZm9ybWF0dGluZ1Jvb3REaXNwbGF5Qm94
LmNvbnRlbnRCb3hUb3AoKSA6IGxpbmUubG9naWNhbEJvdHRvbSgpOwpAQCAtMjkwLDE5NSArMzg3
LDk5IEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OmluaXRpYWxp
emVOZXdMaW5lKExpbmUmIGxpbmUpIGNvbnN0CiAgICAgICAgICAgICBhdmFpbGFibGVXaWR0aCA9
ICpmbG9hdENvbnN0cmFpbnRzLnJpZ2h0IC0gbGluZUxvZ2ljYWxMZWZ0OwogICAgICAgICB9CiAg
ICAgfQotCi0gICAgbGluZS5pbml0KHsgbGluZUxvZ2ljYWxMZWZ0LCBsaW5lTG9naWNhbFRvcCB9
LCBhdmFpbGFibGVXaWR0aCwgbV9mb3JtYXR0aW5nUm9vdC5zdHlsZSgpLmNvbXB1dGVkTGluZUhl
aWdodCgpKTsKKyAgICBsaW5lLnJlc2V0KHsgbGluZUxvZ2ljYWxMZWZ0LCBsaW5lTG9naWNhbFRv
cCB9LCBhdmFpbGFibGVXaWR0aCwgbV9mb3JtYXR0aW5nUm9vdC5zdHlsZSgpLmNvbXB1dGVkTGlu
ZUhlaWdodCgpKTsKIH0KIAotdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91
dDo6c3BsaXRJbmxpbmVSdW5JZk5lZWRlZChjb25zdCBJbmxpbmVSdW4mIGlubGluZVJ1biwgSW5s
aW5lUnVucyYgc3BsaXRSdW5zKSBjb25zdAordm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6
TGluZUxheW91dDo6Y2xvc2VMaW5lKExpbmUmIGxpbmUsIElzTGFzdExpbmUgaXNMYXN0TGluZSkg
Y29uc3QKIHsKLSAgICBBU1NFUlQoaW5saW5lUnVuLnRleHRDb250ZXh0KCkpOwotICAgIEFTU0VS
VChpbmxpbmVSdW4ub3ZlcmxhcHNNdWx0aXBsZUlubGluZUl0ZW1zKCkpOwotICAgIC8vIEluIGNl
cnRhaW4gY2FzZXMsIGEgcnVuIGNhbiBvdmVybGFwIG11bHRpcGxlIGlubGluZSBlbGVtZW50cyBs
aWtlIHRoaXM6Ci0gICAgLy8gPHNwYW4+bm9ybWFsIHRleHQgY29udGVudDwvc3Bhbj48c3BhbiBz
dHlsZT0icG9zaXRpb246IHJlbGF0aXZlOyBsZWZ0OiAxMHB4OyI+YnV0IHRoaXMgb25lIG5lZWRz
IGEgZGVkaWNhdGVkIHJ1bjwvc3Bhbj48c3Bhbj5lbmQgb2YgdGV4dDwvc3Bhbj4KLSAgICAvLyBU
aGUgY29udGVudCBhYm92ZSBnZW5lcmF0ZXMgb25lIGxvbmcgcnVuIDxub3JtYWwgdGV4dCBjb250
ZW50YnV0IHRoaXMgb25lIG5lZWRzIGRlZGljYXRlZCBydW5lbmQgb2YgdGV4dD4KLSAgICAvLyBI
b3dldmVyLCBzaW5jZSB0aGUgbWlkZGxlIHJ1biBpcyBwb3NpdGlvbmVkLCBpdCBuZWVkcyB0byBi
ZSBtb3ZlZCBpbmRlcGVuZGVudGx5IGZyb20gdGhlIHJlc3Qgb2YgdGhlIGNvbnRlbnQsIGhlbmNl
IGl0IG5lZWRzIGEgZGVkaWNhdGVkIGlubGluZSBydW4uCi0KLSAgICAvLyAxLiBTdGFydCB3aXRo
IHRoZSBmaXJzdCBpbmxpbmUgaXRlbSAoZWxlbWVudCkgYW5kIHRyYXZlcnMgdGhlIGxpc3QgdW50
aWwKLSAgICAvLyAyLiBlaXRoZXIgZmluZCBhbiBpbmxpbmUgaXRlbSB0aGF0IG5lZWRzIGEgZGVk
aWNhdGVkIHJ1biBvciB3ZSByZWFjaCB0aGUgZW5kIG9mIHRoZSBydW4KLSAgICAvLyAzLiBDcmVh
dGUgZGVkaWNhdGUgaW5saW5lIHJ1bnMuCi0gICAgYXV0byYgaW5saW5lQ29udGVudCA9IG1fZm9y
bWF0dGluZ1N0YXRlLmlubGluZUNvbnRlbnQoKTsKLSAgICBhdXRvIGNvbnRlbnRTdGFydCA9IGlu
bGluZVJ1bi5sb2dpY2FsTGVmdCgpOwotICAgIGF1dG8gc3RhcnRQb3NpdGlvbiA9IGlubGluZVJ1
bi50ZXh0Q29udGV4dCgpLT5zdGFydCgpOwotICAgIGF1dG8gcmVtYW5pbmdMZW5ndGggPSBpbmxp
bmVSdW4udGV4dENvbnRleHQoKS0+bGVuZ3RoKCk7Ci0KLSAgICBzdHJ1Y3QgVW5jb21taXR0ZWQg
ewotICAgICAgICBjb25zdCBJbmxpbmVJdGVtKiBmaXJzdElubGluZUl0ZW0geyBudWxscHRyIH07
Ci0gICAgICAgIGNvbnN0IElubGluZUl0ZW0qIGxhc3RJbmxpbmVJdGVtIHsgbnVsbHB0ciB9Owot
ICAgICAgICB1bnNpZ25lZCBsZW5ndGggeyAwIH07Ci0gICAgfTsKLSAgICBPcHRpb25hbDxVbmNv
bW1pdHRlZD4gdW5jb21taXR0ZWQ7Ci0KLSAgICBhdXRvIGNvbW1pdCA9IFsmXSB7Ci0gICAgICAg
IGlmICghdW5jb21taXR0ZWQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgY29udGVu
dFN0YXJ0ICs9IHVuY29tbWl0dGVkLT5maXJzdElubGluZUl0ZW0tPm5vbkJyZWFrYWJsZVN0YXJ0
KCk7Ci0KLSAgICAgICAgYXV0byBydW5XaWR0aCA9IHRoaXMtPnJ1bldpZHRoKGlubGluZUNvbnRl
bnQsICp1bmNvbW1pdHRlZC0+Zmlyc3RJbmxpbmVJdGVtLCBzdGFydFBvc2l0aW9uLCB1bmNvbW1p
dHRlZC0+bGVuZ3RoLCBjb250ZW50U3RhcnQpOwotICAgICAgICBhdXRvIHJ1biA9IElubGluZVJ1
biB7IHsgaW5saW5lUnVuLmxvZ2ljYWxUb3AoKSwgY29udGVudFN0YXJ0LCBydW5XaWR0aCwgaW5s
aW5lUnVuLmxvZ2ljYWxIZWlnaHQoKSB9LCAqdW5jb21taXR0ZWQtPmZpcnN0SW5saW5lSXRlbSB9
OwotICAgICAgICBydW4uc2V0VGV4dENvbnRleHQoeyBzdGFydFBvc2l0aW9uLCB1bmNvbW1pdHRl
ZC0+bGVuZ3RoIH0pOwotICAgICAgICBzcGxpdFJ1bnMuYXBwZW5kKHJ1bik7Ci0KLSAgICAgICAg
Y29udGVudFN0YXJ0ICs9IHJ1bldpZHRoICsgdW5jb21taXR0ZWQtPmxhc3RJbmxpbmVJdGVtLT5u
b25CcmVha2FibGVFbmQoKTsKLQotICAgICAgICBzdGFydFBvc2l0aW9uID0gMDsKLSAgICAgICAg
dW5jb21taXR0ZWQgPSB7IH07Ci0gICAgfTsKLQotICAgIGZvciAoYXV0byBpdGVyYXRvciA9IGlu
bGluZUNvbnRlbnQuZmluZChjb25zdF9jYXN0PElubGluZUl0ZW0qPigmaW5saW5lUnVuLmlubGlu
ZUl0ZW0oKSkpOyBpdGVyYXRvciAhPSBpbmxpbmVDb250ZW50LmVuZCgpICYmIHJlbWFuaW5nTGVu
Z3RoID4gMDsgKytpdGVyYXRvcikgewotICAgICAgICBhdXRvJiBpbmxpbmVJdGVtID0gKippdGVy
YXRvcjsKKyAgICBsaW5lLmNsb3NlKCk7CisgICAgaWYgKGxpbmUuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm47CiAKLSAgICAgICAgLy8gU2tpcCBhbGwgbm9uLWluZmxvdyBib3hlcyAoZmxvYXRz
LCBvdXQtb2YtZmxvdyBwb3NpdGlvbmVkIGVsZW1lbnRzKS4gVGhleSBkb24ndCBwYXJ0aWNpcGF0
ZSBpbiB0aGUgaW5saW5lIHJ1biBjb250ZXh0LgotICAgICAgICBpZiAoIWlubGluZUl0ZW0ubGF5
b3V0Qm94KCkuaXNJbkZsb3coKSkKKyAgICBhbGlnblJ1bnMobV9mb3JtYXR0aW5nUm9vdC5zdHls
ZSgpLnRleHRBbGlnbigpLCBsaW5lLCBpc0xhc3RMaW5lKTsKKyAgICAKKyAgICBhdXRvJiBsaW5l
SXRlbXMgPSBsaW5lLmxpbmVJdGVtcygpOworICAgIC8vIENyZWF0ZSBmaW5hbCBkaXNwbGF5IHJ1
bnMuCisgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgbGluZUl0ZW1zLnNpemUo
KTsgKytpbmRleCkgeworICAgICAgICBhdXRvJiBsaW5lSXRlbSA9IGxpbmVJdGVtcy5hdChpbmRl
eCk7CisKKyAgICAgICAgYXV0byYgaW5saW5lSXRlbSA9IGxpbmVJdGVtLmlubGluZUl0ZW07Cisg
ICAgICAgIGF1dG8mIGlubGluZVJ1biA9IGxpbmVJdGVtLmlubGluZVJ1bjsKKyAgICAgICAgYXV0
byYgbGF5b3V0Qm94ID0gaW5saW5lSXRlbS5sYXlvdXRCb3goKTsKKyAgICAgICAgYXV0byYgZGlz
cGxheUJveCA9IGxheW91dFN0YXRlKCkuZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gp
OworCisgICAgICAgIGlmIChpbmxpbmVJdGVtLmlzQ29udGFpbmVyU3RhcnQoKSB8fCBpbmxpbmVJ
dGVtLmlzQm94KCkpIHsKKyAgICAgICAgICAgIC8vIFNldCBpbmxpbmUgY29udGFpbmVyJ3MgbG9n
aWNhbCB0b3BsZWZ0IHBvc2l0aW9uIC10YWtpbmcgcmVsYXRpdmUgcG9zaXRpb25pbmcgaW50byBh
Y2NvdW50LgorICAgICAgICAgICAgYXV0byB0b3BMZWZ0ID0gaW5saW5lUnVuLmxvZ2ljYWxUb3BM
ZWZ0KCk7CisgICAgICAgICAgICBpZiAobGF5b3V0Qm94LmlzSW5GbG93UG9zaXRpb25lZCgpKQor
ICAgICAgICAgICAgICAgIHRvcExlZnQgKz0gR2VvbWV0cnk6OmluRmxvd1Bvc2l0aW9uZWRQb3Np
dGlvbk9mZnNldChsYXlvdXRTdGF0ZSgpLCBsYXlvdXRCb3gpOworICAgICAgICAgICAgZGlzcGxh
eUJveC5zZXRUb3BMZWZ0KHRvcExlZnQpOworCisgICAgICAgICAgICBpZiAoaW5saW5lSXRlbS5p
c0JveCgpKQorICAgICAgICAgICAgICAgIG1fZm9ybWF0dGluZ1N0YXRlLmFkZElubGluZVJ1bihz
dGQ6Om1ha2VfdW5pcXVlPERpc3BsYXk6OlJ1bj4oaW5saW5lUnVuKSk7CiAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgfQogCi0gICAgICAgIGF1dG8gY3VycmVudExlbmd0aCA9IFsmXSB7
Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjptaW4ocmVtYW5pbmdMZW5ndGgsIGlubGluZUl0ZW0u
dGV4dENvbnRlbnQoKS5sZW5ndGgoKSAtIHN0YXJ0UG9zaXRpb24pOwotICAgICAgICB9OwotCi0g
ICAgICAgIC8vIDEuIEJyZWFrIGJlZm9yZS9hZnRlciAtPiByZXF1aXJlcyBkZWRpY2F0ZWQgcnVu
IC0+IGNvbW1pdCB3aGF0IHdlJ3ZlIGdvdCBzbyBmYXIgYW5kIGFsc28gY29tbWl0IHRoZSBjdXJy
ZW50IGlubGluZSBlbGVtZW50IGFzIGEgc2VwYXJhdGUgaW5saW5lIHJ1bi4KLSAgICAgICAgLy8g
Mi4gQnJlYWsgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgaW5saW5lIGVsZW1lbnQgLT4gY29tbWl0
IHdoYXQgd2UndmUgZ290IHNvIGZhci4gQ3VycmVudCBlbGVtZW50IGJlY29tZXMgdGhlIGZpcnN0
IHVuY29tbWl0dGVkLgotICAgICAgICAvLyAzLiBCcmVhayBhdCB0aGUgZW5kIG9mIHRoZSBpbmxp
bmUgZWxlbWVudCAtPiBjb21taXQgd2hhdCB3ZSd2ZSBnb3Qgc28gZmFyIGluY2x1ZGluZyB0aGUg
Y3VycmVudCBlbGVtZW50LgotICAgICAgICAvLyA0LiBJbmxpbmUgZWxlbWVudCBkb2VzIG5vdCBy
ZXF1aXJlIHJ1biBicmVha2luZyAtPiBhZGQgY3VycmVudCBpbmxpbmUgZWxlbWVudCB0byB1bmNv
bW1pdHRlZC4gSnVtcCB0byB0aGUgbmV4dCBlbGVtZW50LgotICAgICAgICBhdXRvIGRldGFjaGlu
Z1J1bGVzID0gaW5saW5lSXRlbS5kZXRhY2hpbmdSdWxlcygpOwotCi0gICAgICAgIC8vICMxCi0g
ICAgICAgIGlmIChkZXRhY2hpbmdSdWxlcy5jb250YWluc0FsbCh7IElubGluZUl0ZW06OkRldGFj
aGluZ1J1bGU6OkJyZWFrQXRTdGFydCwgSW5saW5lSXRlbTo6RGV0YWNoaW5nUnVsZTo6QnJlYWtB
dEVuZCB9KSkgewotICAgICAgICAgICAgY29tbWl0KCk7Ci0gICAgICAgICAgICBhdXRvIGNvbnRl
bnRMZW5ndGggPSBjdXJyZW50TGVuZ3RoKCk7Ci0gICAgICAgICAgICB1bmNvbW1pdHRlZCA9IFVu
Y29tbWl0dGVkIHsgJmlubGluZUl0ZW0sICZpbmxpbmVJdGVtLCBjb250ZW50TGVuZ3RoIH07Ci0g
ICAgICAgICAgICByZW1hbmluZ0xlbmd0aCAtPSBjb250ZW50TGVuZ3RoOwotICAgICAgICAgICAg
Y29tbWl0KCk7CisgICAgICAgIGlmIChpbmxpbmVJdGVtLmlzQ29udGFpbmVyRW5kKCkpIHsKKyAg
ICAgICAgICAgIC8vIFNldCBpbmxpbmUgY29udGFpbmVyJ3Mgd2lkdGggYW5kIGhlaWdodC4KKyAg
ICAgICAgICAgIGF1dG8gbWFyZ2luQm94V2lkdGggPSBpbmxpbmVSdW4ubG9naWNhbExlZnQoKSAt
IGRpc3BsYXlCb3gubGVmdCgpOworICAgICAgICAgICAgYXV0byBjb250ZW50Qm94V2lkdGggPSBt
YXJnaW5Cb3hXaWR0aCAtIChkaXNwbGF5Qm94Lm1hcmdpblN0YXJ0KCkgKyBkaXNwbGF5Qm94LmJv
cmRlckxlZnQoKSArIGRpc3BsYXlCb3gucGFkZGluZ0xlZnQoKS52YWx1ZU9yKDApKTsKKyAgICAg
ICAgICAgIC8vIEZJWE1FIGZpeCBpdCBmb3IgbXVsdGlsaW5lLgorICAgICAgICAgICAgZGlzcGxh
eUJveC5zZXRDb250ZW50Qm94V2lkdGgoY29udGVudEJveFdpZHRoKTsKKyAgICAgICAgICAgIC8v
IEZJWE1FOiBoZWlnaHQKKyAgICAgICAgICAgIGRpc3BsYXlCb3guc2V0Q29udGVudEJveEhlaWdo
dChsaW5lLmxvZ2ljYWxIZWlnaHQoKSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
fQogCi0gICAgICAgIC8vICMyCi0gICAgICAgIGlmIChkZXRhY2hpbmdSdWxlcy5jb250YWlucyhJ
bmxpbmVJdGVtOjpEZXRhY2hpbmdSdWxlOjpCcmVha0F0U3RhcnQpKQotICAgICAgICAgICAgY29t
bWl0KCk7Ci0KLSAgICAgICAgLy8gQWRkIGN1cnJlbnQgaW5saW5lIGl0ZW0gdG8gdW5jb21taXR0
ZWQuCi0gICAgICAgIC8vICMzIGFuZCAjNAotICAgICAgICBhdXRvIGNvbnRlbnRMZW5ndGggPSBj
dXJyZW50TGVuZ3RoKCk7Ci0gICAgICAgIGlmICghdW5jb21taXR0ZWQpCi0gICAgICAgICAgICB1
bmNvbW1pdHRlZCA9IFVuY29tbWl0dGVkIHsgJmlubGluZUl0ZW0sICZpbmxpbmVJdGVtLCAwIH07
Ci0gICAgICAgIHVuY29tbWl0dGVkLT5sZW5ndGggKz0gY29udGVudExlbmd0aDsKLSAgICAgICAg
dW5jb21taXR0ZWQtPmxhc3RJbmxpbmVJdGVtID0gJmlubGluZUl0ZW07Ci0gICAgICAgIHJlbWFu
aW5nTGVuZ3RoIC09IGNvbnRlbnRMZW5ndGg7Ci0KLSAgICAgICAgLy8gIzMKLSAgICAgICAgaWYg
KGRldGFjaGluZ1J1bGVzLmNvbnRhaW5zKElubGluZUl0ZW06OkRldGFjaGluZ1J1bGU6OkJyZWFr
QXRFbmQpKQotICAgICAgICAgICAgY29tbWl0KCk7Ci0gICAgfQotICAgIC8vIEVpdGhlciBhbGwg
aW5saW5lIGVsZW1lbnRzIG5lZWRlZCBkZWRpY2F0ZWQgcnVucyBvciBuZWl0aGVyIG9mIHRoZW0u
Ci0gICAgaWYgKCFyZW1hbmluZ0xlbmd0aCB8fCByZW1hbmluZ0xlbmd0aCA9PSBpbmxpbmVSdW4u
dGV4dENvbnRleHQoKS0+bGVuZ3RoKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNvbW1pdCgp
OwotfQorICAgICAgICBpZiAoaW5saW5lSXRlbS5pc0hhcmRMaW5lQnJlYWsoKSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOwogCi12b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0
OjpjcmVhdGVGaW5hbFJ1bnMoTGluZSYgbGluZSkgY29uc3QKLXsKLSAgICBmb3IgKGF1dG8mIGlu
bGluZVJ1biA6IGxpbmUucnVucygpKSB7Ci0gICAgICAgIGlmIChpbmxpbmVSdW4ub3ZlcmxhcHNN
dWx0aXBsZUlubGluZUl0ZW1zKCkpIHsKLSAgICAgICAgICAgIElubGluZVJ1bnMgc3BsaXRSdW5z
OwotICAgICAgICAgICAgc3BsaXRJbmxpbmVSdW5JZk5lZWRlZChpbmxpbmVSdW4sIHNwbGl0UnVu
cyk7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIHNwbGl0UnVuIDogc3BsaXRSdW5zKQotICAgICAg
ICAgICAgICAgIG1fZm9ybWF0dGluZ1N0YXRlLmFwcGVuZElubGluZVJ1bihzcGxpdFJ1bik7Ci0K
LSAgICAgICAgICAgIGlmICghc3BsaXRSdW5zLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgQVNTRVJUKGlubGluZVJ1bi50ZXh0Q29udGV4dCgpKTsKKyAgICAg
ICAgYXV0byYgaW5saW5lVGV4dEl0ZW0gPSBkb3duY2FzdDxJbmxpbmVUZXh0SXRlbT4oaW5saW5l
SXRlbSk7CisgICAgICAgIGNvbnN0IElubGluZUl0ZW0qIHByZXZpb3VzSW5saW5lSXRlbSA9ICFp
bmRleCA/IG51bGxwdHIgOiAmbGluZUl0ZW1zW2luZGV4IC0gMV0uaW5saW5lSXRlbTsKKyAgICAg
ICAgYXV0byBwcmV2aW91c1J1bkhhc0NvbGxhcHNlZFdoaXRlc3BhY2UgPSBmYWxzZTsKKyAgICAg
ICAgaWYgKGlzPElubGluZVRleHRJdGVtPihwcmV2aW91c0lubGluZUl0ZW0pKQorICAgICAgICAg
ICAgcHJldmlvdXNSdW5IYXNDb2xsYXBzZWRXaGl0ZXNwYWNlID0gZG93bmNhc3Q8SW5saW5lVGV4
dEl0ZW0+KCpwcmV2aW91c0lubGluZUl0ZW0pLmlzQ29sbGFwc2VkKCk7CisKKyAgICAgICAgYXV0
byByZXF1aXJlc05ld1J1biA9ICFpbmRleCB8fCAmaW5saW5lSXRlbS5sYXlvdXRCb3goKSAhPSAm
cHJldmlvdXNJbmxpbmVJdGVtLT5sYXlvdXRCb3goKSB8fCBwcmV2aW91c1J1bkhhc0NvbGxhcHNl
ZFdoaXRlc3BhY2U7CisgICAgICAgIGlmIChyZXF1aXJlc05ld1J1bikKKyAgICAgICAgICAgIG1f
Zm9ybWF0dGluZ1N0YXRlLmFkZElubGluZVJ1bihzdGQ6Om1ha2VfdW5pcXVlPERpc3BsYXk6OlJ1
bj4oaW5saW5lUnVuKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYXV0byYgbGFzdERp
c3BsYXlSdW4gPSBtX2Zvcm1hdHRpbmdTdGF0ZS5pbmxpbmVSdW5zKCkubGFzdCgpOworICAgICAg
ICAgICAgbGFzdERpc3BsYXlSdW4tPmV4cGFuZEhvcml6b250YWxseShpbmxpbmVUZXh0SXRlbS53
aWR0aCgpKTsKKyAgICAgICAgICAgIGxhc3REaXNwbGF5UnVuLT50ZXh0Q29udGV4dCgpLT5leHBh
bmQoaW5saW5lUnVuLnRleHRDb250ZXh0KCktPmxlbmd0aCgpKTsKICAgICAgICAgfQotCi0gICAg
ICAgIGF1dG8gZmluYWxSdW4gPSBbJl0gewotICAgICAgICAgICAgYXV0byYgaW5saW5lSXRlbSA9
IGlubGluZVJ1bi5pbmxpbmVJdGVtKCk7Ci0gICAgICAgICAgICBpZiAoaW5saW5lSXRlbS5kZXRh
Y2hpbmdSdWxlcygpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gaW5saW5lUnVu
OwotCi0gICAgICAgICAgICBJbmxpbmVSdW4gYWRqdXN0ZWRSdW4gPSBpbmxpbmVSdW47Ci0gICAg
ICAgICAgICBhdXRvIHdpZHRoID0gaW5saW5lUnVuLmxvZ2ljYWxXaWR0aCgpIC0gaW5saW5lSXRl
bS5ub25CcmVha2FibGVTdGFydCgpIC0gaW5saW5lSXRlbS5ub25CcmVha2FibGVFbmQoKTsKLSAg
ICAgICAgICAgIGFkanVzdGVkUnVuLnNldExvZ2ljYWxMZWZ0KGlubGluZVJ1bi5sb2dpY2FsTGVm
dCgpICsgaW5saW5lSXRlbS5ub25CcmVha2FibGVTdGFydCgpKTsKLSAgICAgICAgICAgIGFkanVz
dGVkUnVuLnNldExvZ2ljYWxXaWR0aCh3aWR0aCk7Ci0gICAgICAgICAgICByZXR1cm4gYWRqdXN0
ZWRSdW47Ci0gICAgICAgIH07Ci0KLSAgICAgICAgbV9mb3JtYXR0aW5nU3RhdGUuYXBwZW5kSW5s
aW5lUnVuKGZpbmFsUnVuKCkpOwogICAgIH0KIH0KIAotdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dDo6TGluZUxheW91dDo6cG9zdFByb2Nlc3NJbmxpbmVSdW5zKExpbmUmIGxpbmUsIElzTGFz
dExpbmUgaXNMYXN0TGluZSkgY29uc3QKLXsKLSAgICBhbGlnblJ1bnMobV9mb3JtYXR0aW5nUm9v
dC5zdHlsZSgpLnRleHRBbGlnbigpLCBsaW5lLCBpc0xhc3RMaW5lKTsKLSAgICBhdXRvIGZpcnN0
UnVuSW5kZXggPSBtX2Zvcm1hdHRpbmdTdGF0ZS5pbmxpbmVSdW5zKCkuc2l6ZSgpOwotICAgIGNy
ZWF0ZUZpbmFsUnVucyhsaW5lKTsKLQotICAgIHBsYWNlSW5GbG93UG9zaXRpb25lZENoaWxkcmVu
KGZpcnN0UnVuSW5kZXgpOwotfQotCi12b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5l
TGF5b3V0OjpjbG9zZUxpbmUoTGluZSYgbGluZSwgSXNMYXN0TGluZSBpc0xhc3RMaW5lKSBjb25z
dAotewotICAgIGxpbmUuY2xvc2UoKTsKLSAgICBpZiAoIWxpbmUuaGFzQ29udGVudCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBwb3N0UHJvY2Vzc0lubGluZVJ1bnMobGluZSwgaXNMYXN0TGlu
ZSk7Ci19Ci0KLXZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OmFwcGVu
ZENvbnRlbnRUb0xpbmUoTGluZSYgbGluZSwgY29uc3QgSW5saW5lUnVuUHJvdmlkZXI6OlJ1biYg
cnVuLCBjb25zdCBMYXlvdXRTaXplJiBydW5TaXplKSBjb25zdAordm9pZCBJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dDo6TGluZUxheW91dDo6Y29tbWl0SW5saW5lSXRlbVRvTGluZShMaW5lJiBsaW5l
LCBjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtKSBjb25zdAogewotICAgIGF1dG8gbGFzdFJ1
blR5cGUgPSBsaW5lLmxhc3RSdW5UeXBlKCk7Ci0gICAgbGluZS5hcHBlbmRDb250ZW50KHJ1biwg
cnVuU2l6ZSk7CisgICAgaWYgKGlubGluZUl0ZW0uaXNDb250YWluZXJTdGFydCgpIHx8IGlubGlu
ZUl0ZW0uaXNDb250YWluZXJFbmQoKSkKKyAgICAgICAgcmV0dXJuIGxpbmUuYXBwZW5kTm9uQnJl
YWthYmxlU3BhY2UoaW5saW5lSXRlbSk7CisKKyAgICBhdXRvIHdpZHRoID0gaW5saW5lSXRlbS53
aWR0aCgpOworICAgIGlmIChpczxJbmxpbmVUZXh0SXRlbT4oaW5saW5lSXRlbSkpCisgICAgICAg
IGxpbmUuYXBwZW5kVGV4dENvbnRlbnQoZG93bmNhc3Q8SW5saW5lVGV4dEl0ZW0+KGlubGluZUl0
ZW0pLCB7IHdpZHRoLCBtX2Zvcm1hdHRpbmdSb290LnN0eWxlKCkuY29tcHV0ZWRMaW5lSGVpZ2h0
KCkgfSk7CisgICAgZWxzZSB7CisgICAgICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBsYXlvdXRTdGF0
ZSgpLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goaW5saW5lSXRlbS5sYXlvdXRCb3goKSk7CisgICAg
ICAgIGxpbmUuYXBwZW5kTm9uVGV4dENvbnRlbnQoaW5saW5lSXRlbSwgeyB3aWR0aCwgZGlzcGxh
eUJveC5oZWlnaHQoKSB9KTsKKyAgICB9CiAKICAgICBpZiAobV9mb3JtYXR0aW5nUm9vdC5zdHls
ZSgpLnRleHRBbGlnbigpID09IFRleHRBbGlnbk1vZGU6Okp1c3RpZnkpCi0gICAgICAgIGNvbXB1
dGVFeHBhbnNpb25PcHBvcnR1bml0aWVzKGxpbmUsIHJ1biwgbGFzdFJ1blR5cGUudmFsdWVPcihJ
bmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpUeXBlOjpOb25XaGl0ZXNwYWNlKSk7CisgICAgICAgIGNv
bXB1dGVFeHBhbnNpb25PcHBvcnR1bml0aWVzKGxpbmUsIGlubGluZUl0ZW0sIGxpbmUuaGFzVHJh
aWxpbmdXaGl0ZXNwYWNlKCkpOwogfQogCiB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpM
aW5lTGF5b3V0Ojpjb21wdXRlRmxvYXRQb3NpdGlvbihjb25zdCBGbG9hdGluZ0NvbnRleHQmIGZs
b2F0aW5nQ29udGV4dCwgTGluZSYgbGluZSwgY29uc3QgQm94JiBmbG9hdEJveCkgY29uc3QKIHsK
LSAgICBhdXRvJiBsYXlvdXRTdGF0ZSA9IG1fZm9ybWF0dGluZ0NvbnRleHQubGF5b3V0U3RhdGUo
KTsKLSAgICBBU1NFUlQobGF5b3V0U3RhdGUuaGFzRGlzcGxheUJveChmbG9hdEJveCkpOwotICAg
IGF1dG8mIGRpc3BsYXlCb3ggPSBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGZs
b2F0Qm94KTsKKyAgICBBU1NFUlQobGF5b3V0U3RhdGUoKS5oYXNEaXNwbGF5Qm94KGZsb2F0Qm94
KSk7CisgICAgYXV0byYgZGlzcGxheUJveCA9IGxheW91dFN0YXRlKCkuZGlzcGxheUJveEZvckxh
eW91dEJveChmbG9hdEJveCk7CiAKICAgICAvLyBTZXQgc3RhdGljIHBvc2l0aW9uIGZpcnN0Lgot
ICAgIGRpc3BsYXlCb3guc2V0VG9wTGVmdCh7IGxpbmUuY29udGVudExvZ2ljYWxSaWdodCgpLCBs
aW5lLmxvZ2ljYWxUb3AoKSB9KTsKKyAgICBkaXNwbGF5Qm94LnNldFRvcExlZnQoeyBsaW5lLmxv
Z2ljYWxSaWdodCgpLCBsaW5lLmxvZ2ljYWxUb3AoKSB9KTsKICAgICAvLyBGbG9hdCBpdC4KICAg
ICBkaXNwbGF5Qm94LnNldFRvcExlZnQoZmxvYXRpbmdDb250ZXh0LnBvc2l0aW9uRm9yRmxvYXQo
ZmxvYXRCb3gpKTsKIH0KIAotdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91
dDo6cGxhY2VJbkZsb3dQb3NpdGlvbmVkQ2hpbGRyZW4odW5zaWduZWQgZmlzdFJ1bkluZGV4KSBj
b25zdAotewotICAgIGF1dG8mIGxheW91dFN0YXRlID0gbV9mb3JtYXR0aW5nQ29udGV4dC5sYXlv
dXRTdGF0ZSgpOwotICAgIGF1dG8mIGlubGluZVJ1bnMgPSBtX2Zvcm1hdHRpbmdTdGF0ZS5pbmxp
bmVSdW5zKCk7Ci0gICAgZm9yIChhdXRvIHJ1bkluZGV4ID0gZmlzdFJ1bkluZGV4OyBydW5JbmRl
eCA8IGlubGluZVJ1bnMuc2l6ZSgpOyArK3J1bkluZGV4KSB7Ci0gICAgICAgIGF1dG8mIGlubGlu
ZVJ1biA9IGlubGluZVJ1bnNbcnVuSW5kZXhdOwotCi0gICAgICAgIGF1dG8gcG9zaXRpb25PZmZz
ZXQgPSBbJl0oYXV0byYgbGF5b3V0Qm94KSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogTmVlZCB0
byBmaWd1cmUgb3V0IHdoZXRoZXIgaW4tZmxvdyBvZmZzZXQgc2hvdWxkIHN0aWNrLiBUaGlzIG1p
Z2h0IHZlcnkgd2VsbCBiZSB0ZW1wb3JhcnkuCi0gICAgICAgICAgICBPcHRpb25hbDxMYXlvdXRT
aXplPiBvZmZzZXQ7Ci0gICAgICAgICAgICBmb3IgKGF1dG8qIGJveCA9ICZsYXlvdXRCb3g7IGJv
eCAhPSAmbV9mb3JtYXR0aW5nUm9vdDsgYm94ID0gYm94LT5wYXJlbnQoKSkgewotICAgICAgICAg
ICAgICAgIGlmICghYm94LT5pc0luRmxvd1Bvc2l0aW9uZWQoKSkKLSAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0LnZhbHVlT3IoTGF5
b3V0U2l6ZSgpKSArIEdlb21ldHJ5OjppbkZsb3dQb3NpdGlvbmVkUG9zaXRpb25PZmZzZXQobGF5
b3V0U3RhdGUsICpib3gpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIG9mZnNl
dDsKLSAgICAgICAgfTsKLQotICAgICAgICBpZiAoYXV0byBvZmZzZXQgPSBwb3NpdGlvbk9mZnNl
dChpbmxpbmVSdW4uaW5saW5lSXRlbSgpLmxheW91dEJveCgpKSkgewotICAgICAgICAgICAgaW5s
aW5lUnVuLm1vdmVWZXJ0aWNhbGx5KG9mZnNldC0+aGVpZ2h0KCkpOwotICAgICAgICAgICAgaW5s
aW5lUnVuLm1vdmVIb3Jpem9udGFsbHkob2Zmc2V0LT53aWR0aCgpKTsKLSAgICAgICAgfQotICAg
IH0KLX0KLQogc3RhdGljIExheW91dFVuaXQgYWRqdXN0ZWRMaW5lTG9naWNhbExlZnQoVGV4dEFs
aWduTW9kZSBhbGlnbiwgTGF5b3V0VW5pdCBsaW5lTG9naWNhbExlZnQsIExheW91dFVuaXQgcmVt
YWluaW5nV2lkdGgpCiB7CiAgICAgc3dpdGNoIChhbGlnbikgewpAQCAtNTAzLDggKzUwNCw4IEBA
IHN0YXRpYyBMYXlvdXRVbml0IGFkanVzdGVkTGluZUxvZ2ljYWxMZWZ0KFRleHRBbGlnbk1vZGUg
YWxpZ24sIExheW91dFVuaXQgbGluZUxvCiAKIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6
OkxpbmVMYXlvdXQ6Omp1c3RpZnlSdW5zKExpbmUmIGxpbmUpCiB7Ci0gICAgYXV0byYgaW5saW5l
UnVucyA9IGxpbmUucnVucygpOwotICAgIGF1dG8mIGxhc3RJbmxpbmVSdW4gPSBpbmxpbmVSdW5z
Lmxhc3QoKTsKKyAgICBhdXRvJiBsaW5lSXRlbXMgPSBsaW5lLmxpbmVJdGVtcygpOworICAgIGF1
dG8mIGxhc3RJbmxpbmVSdW4gPSBsaW5lSXRlbXMubGFzdCgpLmlubGluZVJ1bjsKIAogICAgIC8v
IEFkanVzdCAoZm9yYmlkKSB0cmFpbGluZyBleHBhbnNpb24gZm9yIHRoZSBsYXN0IHRleHQgcnVu
IG9uIGxpbmUuCiAgICAgYXV0byBleHBhbnNpb25CZWhhdmlvciA9IGxhc3RJbmxpbmVSdW4uZXhw
YW5zaW9uT3Bwb3J0dW5pdHkoKS5iZWhhdmlvcjsKQEAgLTUxOSwyOCArNTIwLDI5IEBAIHZvaWQg
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6Omp1c3RpZnlSdW5zKExpbmUmIGxp
bmUpCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8gZXhwYW5zaW9uT3Bwb3J0dW5pdGllcyA9
IDA7Ci0gICAgZm9yIChhdXRvJiBpbmxpbmVSdW4gOiBpbmxpbmVSdW5zKQotICAgICAgICBleHBh
bnNpb25PcHBvcnR1bml0aWVzICs9IGlubGluZVJ1bi5leHBhbnNpb25PcHBvcnR1bml0eSgpLmNv
dW50OworICAgIGZvciAoYXV0byYgbGluZUl0ZW0gOiBsaW5lSXRlbXMpCisgICAgICAgIGV4cGFu
c2lvbk9wcG9ydHVuaXRpZXMgKz0gbGluZUl0ZW0uaW5saW5lUnVuLmV4cGFuc2lvbk9wcG9ydHVu
aXR5KCkuY291bnQ7CiAKICAgICBpZiAoIWV4cGFuc2lvbk9wcG9ydHVuaXRpZXMpCiAgICAgICAg
IHJldHVybjsKIAogICAgIGZsb2F0IGV4cGFuc2lvbiA9IHdpZHRoVG9EaXN0cmlidXRlLnRvRmxv
YXQoKSAvIGV4cGFuc2lvbk9wcG9ydHVuaXRpZXM7CiAgICAgTGF5b3V0VW5pdCBhY2N1bXVsYXRl
ZEV4cGFuc2lvbjsKLSAgICBmb3IgKGF1dG8mIGlubGluZVJ1biA6IGlubGluZVJ1bnMpIHsKKyAg
ICBmb3IgKGF1dG8mIGxpbmVJdGVtIDogbGluZUl0ZW1zKSB7CisgICAgICAgIGF1dG8mIGlubGlu
ZVJ1biA9IGxpbmVJdGVtLmlubGluZVJ1bjsgCiAgICAgICAgIGF1dG8gZXhwYW5zaW9uRm9yUnVu
ID0gaW5saW5lUnVuLmV4cGFuc2lvbk9wcG9ydHVuaXR5KCkuY291bnQgKiBleHBhbnNpb247CiAK
ICAgICAgICAgaW5saW5lUnVuLmV4cGFuc2lvbk9wcG9ydHVuaXR5KCkuZXhwYW5zaW9uID0gZXhw
YW5zaW9uRm9yUnVuOwotICAgICAgICBpbmxpbmVSdW4uc2V0TG9naWNhbExlZnQoaW5saW5lUnVu
LmxvZ2ljYWxMZWZ0KCkgKyBhY2N1bXVsYXRlZEV4cGFuc2lvbik7Ci0gICAgICAgIGlubGluZVJ1
bi5zZXRMb2dpY2FsV2lkdGgoaW5saW5lUnVuLmxvZ2ljYWxXaWR0aCgpICsgZXhwYW5zaW9uRm9y
UnVuKTsKKyAgICAgICAgaW5saW5lUnVuLm1vdmVIb3Jpem9udGFsbHkoYWNjdW11bGF0ZWRFeHBh
bnNpb24pOworICAgICAgICBpbmxpbmVSdW4uZXhwYW5kSG9yaXpvbnRhbGx5KGV4cGFuc2lvbkZv
clJ1bik7CiAgICAgICAgIGFjY3VtdWxhdGVkRXhwYW5zaW9uICs9IGV4cGFuc2lvbkZvclJ1bjsK
ICAgICB9CiB9CiAKLXZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OmNv
bXB1dGVFeHBhbnNpb25PcHBvcnR1bml0aWVzKExpbmUmIGxpbmUsIGNvbnN0IElubGluZVJ1blBy
b3ZpZGVyOjpSdW4mIHJ1biwgSW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6VHlwZSBsYXN0UnVuVHlw
ZSkgY29uc3QKK3ZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OmNvbXB1
dGVFeHBhbnNpb25PcHBvcnR1bml0aWVzKExpbmUmIGxpbmUsIGNvbnN0IElubGluZUl0ZW0mIGlu
bGluZUl0ZW0sIGJvb2wgcHJldmlvdXNSdW5Jc1doaXRlcGFjZSkgY29uc3QKIHsKLSAgICBhdXRv
IGlzRXhwYW5zaW9uT3Bwb3J0dW5pdHkgPSBbXShhdXRvIGN1cnJlbnRSdW5Jc1doaXRlc3BhY2Us
IGF1dG8gbGFzdFJ1bklzV2hpdGVzcGFjZSkgewotICAgICAgICByZXR1cm4gY3VycmVudFJ1bklz
V2hpdGVzcGFjZSB8fCAoIWN1cnJlbnRSdW5Jc1doaXRlc3BhY2UgJiYgIWxhc3RSdW5Jc1doaXRl
c3BhY2UpOworICAgIGF1dG8gaXNFeHBhbnNpb25PcHBvcnR1bml0eSA9IFtdKGF1dG8gY3VycmVu
dFJ1bklzV2hpdGVzcGFjZSwgYXV0byBwcmV2aW91c1J1bklzV2hpdGVwYWNlKSB7CisgICAgICAg
IHJldHVybiBjdXJyZW50UnVuSXNXaGl0ZXNwYWNlIHx8ICghY3VycmVudFJ1bklzV2hpdGVzcGFj
ZSAmJiAhcHJldmlvdXNSdW5Jc1doaXRlcGFjZSk7CiAgICAgfTsKIAogICAgIGF1dG8gZXhwYW5z
aW9uQmVoYXZpb3IgPSBbXShhdXRvIGlzQXRFeHBhbnNpb25PcHBvcnR1bml0eSkgewpAQCAtNTQ5
LDkgKzU1MSwxMCBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0Ojpj
b21wdXRlRXhwYW5zaW9uT3Bwb3J0dW5pdGllcyhMaW5lJiBsaQogICAgICAgICByZXR1cm4gZXhw
YW5zaW9uQmVoYXZpb3I7CiAgICAgfTsKIAotICAgIGF1dG8gaXNBdEV4cGFuc2lvbk9wcG9ydHVu
aXR5ID0gaXNFeHBhbnNpb25PcHBvcnR1bml0eShydW4uaXNXaGl0ZXNwYWNlKCksIGxhc3RSdW5U
eXBlID09IElubGluZVJ1blByb3ZpZGVyOjpSdW46OlR5cGU6OldoaXRlc3BhY2UpOworICAgIGF1
dG8gY3VycmVudFJ1bklzV2hpdGVzcGFjZSA9IGlzPElubGluZVRleHRJdGVtPihpbmxpbmVJdGVt
KSA/IGRvd25jYXN0PElubGluZVRleHRJdGVtPihpbmxpbmVJdGVtKS5pc1doaXRlc3BhY2UoKSA6
IGZhbHNlOworICAgIGF1dG8gaXNBdEV4cGFuc2lvbk9wcG9ydHVuaXR5ID0gaXNFeHBhbnNpb25P
cHBvcnR1bml0eShjdXJyZW50UnVuSXNXaGl0ZXNwYWNlLCBwcmV2aW91c1J1bklzV2hpdGVwYWNl
KTsKIAotICAgIGF1dG8mIGN1cnJlbnRJbmxpbmVSdW4gPSBsaW5lLnJ1bnMoKS5sYXN0KCk7Cisg
ICAgYXV0byYgY3VycmVudElubGluZVJ1biA9IGxpbmUubGluZUl0ZW1zKCkubGFzdCgpLmlubGlu
ZVJ1bjsKICAgICBhdXRvJiBleHBhbnNpb25PcHBvcnR1bml0eSA9IGN1cnJlbnRJbmxpbmVSdW4u
ZXhwYW5zaW9uT3Bwb3J0dW5pdHkoKTsKICAgICBpZiAoaXNBdEV4cGFuc2lvbk9wcG9ydHVuaXR5
KQogICAgICAgICArK2V4cGFuc2lvbk9wcG9ydHVuaXR5LmNvdW50OwpAQCAtNTY3LDM4ICs1NzAs
MTQgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6YWxpZ25SdW5z
KFRleHRBbGlnbk1vZGUgdGV4dEFsaWduLCBMaW4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIGF1dG8gbGluZUxvZ2ljYWxMZWZ0ID0gbGluZS5jb250ZW50TG9naWNhbExlZnQoKTsKKyAg
ICBhdXRvIGxpbmVMb2dpY2FsTGVmdCA9IGxpbmUubG9naWNhbExlZnQoKTsKICAgICBhdXRvIGFk
anVzdGVkTG9naWNhbExlZnQgPSBhZGp1c3RlZExpbmVMb2dpY2FsTGVmdChhZGp1dGVkVGV4dEFs
aWdubWVudCwgbGluZUxvZ2ljYWxMZWZ0LCBsaW5lLmF2YWlsYWJsZVdpZHRoKCkpOwogICAgIGlm
IChhZGp1c3RlZExvZ2ljYWxMZWZ0ID09IGxpbmVMb2dpY2FsTGVmdCkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgYXV0byBkZWx0YSA9IGFkanVzdGVkTG9naWNhbExlZnQgLSBsaW5lTG9naWNhbExl
ZnQ7Ci0gICAgZm9yIChhdXRvJiBpbmxpbmVSdW4gOiBsaW5lLnJ1bnMoKSkKLSAgICAgICAgaW5s
aW5lUnVuLnNldExvZ2ljYWxMZWZ0KGlubGluZVJ1bi5sb2dpY2FsTGVmdCgpICsgZGVsdGEpOwot
fQotCi1MYXlvdXRVbml0IElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpydW5X
aWR0aChjb25zdCBJbmxpbmVDb250ZW50JiBpbmxpbmVDb250ZW50LCBjb25zdCBJbmxpbmVJdGVt
JiBpbmxpbmVJdGVtLCBJdGVtUG9zaXRpb24gZnJvbSwgdW5zaWduZWQgbGVuZ3RoLCBMYXlvdXRV
bml0IGNvbnRlbnRMb2dpY2FsTGVmdCkgY29uc3QgCi17Ci0gICAgTGF5b3V0VW5pdCB3aWR0aDsK
LSAgICBhdXRvIHN0YXJ0UG9zaXRpb24gPSBmcm9tOwotICAgIGF1dG8gaXRlcmF0b3IgPSBpbmxp
bmVDb250ZW50LmZpbmQoY29uc3RfY2FzdDxJbmxpbmVJdGVtKj4oJmlubGluZUl0ZW0pKTsKLSNp
ZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgYXV0byBpbmxpbmVJdGVtRW5kID0gaW5saW5lQ29udGVu
dC5lbmQoKTsKLSNlbmRpZgotICAgIHdoaWxlIChsZW5ndGgpIHsKLSAgICAgICAgQVNTRVJUKGl0
ZXJhdG9yICE9IGlubGluZUl0ZW1FbmQpOwotICAgICAgICBhdXRvJiBjdXJyZW50SW5saW5lSXRl
bSA9ICoqaXRlcmF0b3I7Ci0gICAgICAgIGF1dG8gZW5kUG9zaXRpb24gPSBzdGQ6Om1pbjxJdGVt
UG9zaXRpb24+KHN0YXJ0UG9zaXRpb24gKyBsZW5ndGgsIGN1cnJlbnRJbmxpbmVJdGVtLnRleHRD
b250ZW50KCkubGVuZ3RoKCkpOwotICAgICAgICBhdXRvIHRleHRXaWR0aCA9IFRleHRVdGlsOjp3
aWR0aChjdXJyZW50SW5saW5lSXRlbSwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24sIGNvbnRl
bnRMb2dpY2FsTGVmdCk7Ci0KLSAgICAgICAgY29udGVudExvZ2ljYWxMZWZ0ICs9IHRleHRXaWR0
aDsKLSAgICAgICAgd2lkdGggKz0gdGV4dFdpZHRoOwotICAgICAgICBsZW5ndGggLT0gKGVuZFBv
c2l0aW9uIC0gc3RhcnRQb3NpdGlvbik7Ci0KLSAgICAgICAgc3RhcnRQb3NpdGlvbiA9IDA7Ci0g
ICAgICAgICsraXRlcmF0b3I7Ci0gICAgfQotICAgIHJldHVybiB3aWR0aDsKKyAgICBmb3IgKGF1
dG8mIGxpbmVJdGVtIDogbGluZS5saW5lSXRlbXMoKSkKKyAgICAgICAgbGluZUl0ZW0uaW5saW5l
UnVuLm1vdmVIb3Jpem9udGFsbHkoZGVsdGEpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nU3RhdGUuaCBi
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdT
dGF0ZS5oCmluZGV4IDY2MmE4M2MzZWJjNTFiYTdiMGUzYzRlYWNjZjUxODQ0ZTllZDY1OWMuLjA4
YjFhNWY5NzE5MjM5ZGE3ZTVlNmVmZWFmN2JiZDJkY2E0MTc0ODIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdTdGF0ZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1h
dHRpbmdTdGF0ZS5oCkBAIC0yNywxNSArMjcsMTggQEAKIAogI2lmIEVOQUJMRShMQVlPVVRfRk9S
TUFUVElOR19DT05URVhUKQogCisjaW5jbHVkZSAiRGlzcGxheVJ1bi5oIgogI2luY2x1ZGUgIkZv
cm1hdHRpbmdTdGF0ZS5oIgogI2luY2x1ZGUgIklubGluZUl0ZW0uaCIKLSNpbmNsdWRlICJJbmxp
bmVSdW4uaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlv
blNldC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgTGF5b3V0IHsKIAorLy8g
VGVtcAordXNpbmcgSW5saW5lSXRlbXMgPSBMaXN0SGFzaFNldDxzdGQ6OnVuaXF1ZV9wdHI8SW5s
aW5lSXRlbT4+OwordXNpbmcgSW5saW5lUnVucyA9IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8RGlz
cGxheTo6UnVuPj47CiAvLyBJbmxpbmVGb3JtYXR0aW5nU3RhdGUgaG9sZHMgdGhlIHN0YXRlIGZv
ciBhIHBhcnRpY3VsYXIgaW5saW5lIGZvcm1hdHRpbmcgY29udGV4dCB0cmVlLgogY2xhc3MgSW5s
aW5lRm9ybWF0dGluZ1N0YXRlIDogcHVibGljIEZvcm1hdHRpbmdTdGF0ZSB7CiAgICAgV1RGX01B
S0VfSVNPX0FMTE9DQVRFRChJbmxpbmVGb3JtYXR0aW5nU3RhdGUpOwpAQCAtNDMsMTUgKzQ2LDE2
IEBAIHB1YmxpYzoKICAgICBJbmxpbmVGb3JtYXR0aW5nU3RhdGUoUmVmPEZsb2F0aW5nU3RhdGU+
JiYsIExheW91dFN0YXRlJik7CiAgICAgdmlydHVhbCB+SW5saW5lRm9ybWF0dGluZ1N0YXRlKCk7
CiAKLSAgICBJbmxpbmVDb250ZW50JiBpbmxpbmVDb250ZW50KCkgeyByZXR1cm4gbV9pbmxpbmVD
b250ZW50OyB9Ci0gICAgSW5saW5lSXRlbSogbGFzdElubGluZUl0ZW0oKSBjb25zdCB7IHJldHVy
biBtX2lubGluZUNvbnRlbnQuaXNFbXB0eSgpID8gbnVsbHB0ciA6IG1faW5saW5lQ29udGVudC5s
YXN0KCkuZ2V0KCk7IH0KKyAgICB2b2lkIGFkZElubGluZVRleHRJdGVtKCk7CiAKLSAgICAvLyBU
ZW1wCisgICAgSW5saW5lSXRlbXMmIGlubGluZUl0ZW1zKCkgeyByZXR1cm4gbV9pbmxpbmVJdGVt
czsgfQogICAgIElubGluZVJ1bnMmIGlubGluZVJ1bnMoKSB7IHJldHVybiBtX2lubGluZVJ1bnM7
IH0KLSAgICB2b2lkIGFwcGVuZElubGluZVJ1bihJbmxpbmVSdW4gaW5saW5lUnVuKSB7IG1faW5s
aW5lUnVucy5hcHBlbmQoaW5saW5lUnVuKTsgfQorCisgICAgdm9pZCBhZGRJbmxpbmVJdGVtKHN0
ZDo6dW5pcXVlX3B0cjxJbmxpbmVJdGVtPiYmIGlubGluZUl0ZW0pIHsgbV9pbmxpbmVJdGVtcy5h
ZGQoV1RGTW92ZShpbmxpbmVJdGVtKSk7IH0KKyAgICB2b2lkIGFkZElubGluZVJ1bihzdGQ6OnVu
aXF1ZV9wdHI8RGlzcGxheTo6UnVuPiYmIGlubGluZVJ1bikgeyBtX2lubGluZVJ1bnMuYXBwZW5k
KFdURk1vdmUoaW5saW5lUnVuKSk7IH0KIAogcHJpdmF0ZToKLSAgICBJbmxpbmVDb250ZW50IG1f
aW5saW5lQ29udGVudDsKKyAgICBJbmxpbmVJdGVtcyBtX2lubGluZUl0ZW1zOwogICAgIElubGlu
ZVJ1bnMgbV9pbmxpbmVSdW5zOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lSXRlbS5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2lubGluZWZvcm1hdHRpbmcvSW5saW5lSXRlbS5oCmluZGV4IDVhMTBmYzFkMWZmY2E2MzQ0ZTA0
MDBlNTlkNmE1MDA3YTE1YmI4NGUuLjg3ZWQ5YzM2ZjZjOTIzYWU4ZTRmODk5NzQ5NmViY2FjNWFj
ZmU5YzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5n
L0lubGluZUl0ZW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGlu
Zy9JbmxpbmVJdGVtLmgKQEAgLTM2LDgzICszNiw1NyBAQCBuYW1lc3BhY2UgTGF5b3V0IHsKIAog
Y2xhc3MgSW5saW5lSXRlbSB7CiBwdWJsaWM6Ci0gICAgSW5saW5lSXRlbShjb25zdCBCb3gmIGxh
eW91dEJveCk7CisgICAgZW51bSBjbGFzcyBUeXBlIHsgVGV4dCwgSGFyZExpbmVCcmVhaywgQm94
LCBGbG9hdCwgQ29udGFpbmVyU3RhcnQsIENvbnRhaW5lckVuZCB9OworICAgIElubGluZUl0ZW0o
Y29uc3QgQm94JiBsYXlvdXRCb3gsIFR5cGUpOwogCi0gICAgZW51bSBjbGFzcyBUeXBlIHsgVGV4
dCwgSGFyZExpbmVCcmVhaywgSW5saW5lQm94LCBGbG9hdCB9OwotICAgIFR5cGUgdHlwZSgpIGNv
bnN0OworICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQogICAgIGNvbnN0
IEJveCYgbGF5b3V0Qm94KCkgY29uc3QgeyByZXR1cm4gbV9sYXlvdXRCb3g7IH0KICAgICBjb25z
dCBSZW5kZXJTdHlsZSYgc3R5bGUoKSBjb25zdCB7IHJldHVybiBtX2xheW91dEJveC5zdHlsZSgp
OyB9Ci0gICAgU3RyaW5nIHRleHRDb250ZW50KCkgY29uc3Q7Ci0gICAgLy8gRGV0YWNoaW5nUnVs
ZSBpbmRpY2F0ZXMgd2hldGhlciB0aGUgaW5saW5lIGVsZW1lbnQgbmVlZHMgdG8gYmUgd3JhcHBl
ZCBpbiBhIGRlZGljZXRlZCBydW4gb3IgYnJlYWsgZnJvbSBwcmV2aW91cy9uZXh0IHJ1bnMuCi0g
ICAgLy8gPHNwYW4+c3RhcnQ8L3NwYW4+PHNwYW4gc3R5bGU9InBvc2l0aW9uOiByZWxhdGl2ZTsi
PiBtaWRkbGUgPC9zcGFuPjxzcGFuPmVuZDwvc3Bhbj4KLSAgICAvLyBpbnB1dCB0byBsaW5lIGJy
ZWFraW5nIC0+IDxzdGFydCBtaWRkbGUgZW5kPgotICAgIC8vIG91dHB1dCBvZiBsaW5lIGJyZWFr
aW5nIChjb25zaWRlcmluZyBpbmZpbml0ZSBjb25zdHJhaW50KSAtPiA8c3RhcnQgbWlkZGxlIGVu
ZD4KLSAgICAvLyBkdWUgdG8gdGhlIGluLWZsb3cgcG9zaXRpb25pbmcsIHRoZSBmaW5hbCBydW5z
IGFyZTogPHN0YXJ0PjwgbWlkZGxlID48ZW5kPgotICAgIC8vICJzdGFydCIgLT4gbi9hCi0gICAg
Ly8gIiBtaWRkbGUgIiAtPiBCcmVha0F0U3RhcnQgYW5kIEJyZWFrQXRFbmQKLSAgICAvLyAiZW5k
IiAtPiBuL2EKLSAgICAvLwotICAgIC8vIDxzcGFuPnBhcmVudCA8L3NwYW4+PHNwYW4gc3R5bGU9
InBhZGRpbmc6IDEwcHg7Ij5zdGFydDxzcGFuPiBtaWRkbGUgPC9zcGFuPmVuZDwvc3Bhbj48c3Bh
bj4gcGFyZW50PC9zcGFuPgotICAgIC8vIGlucHV0IHRvIGxpbmUgYnJlYWtpbmcgLT4gPHBhcmVu
dCBzdGFydCBtaWRkbGUgZW5kIHBhcmVudD4KLSAgICAvLyBvdXRwdXQgb2YgbGluZSBicmVha2lu
ZyAoY29uc2lkZXJpbmcgaW5maW5pdGUgY29uc3RyYWludCkgLT4gPHBhcmVudCBzdGFydCBtaWRk
bGUgZW5kIHBhcmVudD4KLSAgICAvLyBkdWUgdG8gcGFkZGluZywgZmluYWwgcnVucyAtPiA8cGFy
ZW50PjxzdGFydCBtaWRkbGUgZW5kPjxwYXJlbnQ+Ci0gICAgLy8gInBhcmVudCIgLT4gbi9hCi0g
ICAgLy8gInN0YXJ0IiAtPiBCcmVha0F0U3RhcnQKLSAgICAvLyAiIG1pZGRsZSAiIC0+IG4vYQot
ICAgIC8vICJlbmQiIC0+IEJyZWFrQXRFbmQKLSAgICAvLyAicGFyZW50IiAtPiBuL2EKLSAgICBl
bnVtIGNsYXNzIERldGFjaGluZ1J1bGUgewotICAgICAgICBCcmVha0F0U3RhcnQgPSAxIDw8IDAs
Ci0gICAgICAgIEJyZWFrQXRFbmQgPSAxIDw8IDEKLSAgICB9OwotICAgIHZvaWQgYWRkRGV0YWNo
aW5nUnVsZShPcHRpb25TZXQ8RGV0YWNoaW5nUnVsZT4gZGV0YWNoaW5nUnVsZSkgeyBtX2RldGFj
aGluZ1J1bGVzLmFkZChkZXRhY2hpbmdSdWxlKTsgfQotICAgIE9wdGlvblNldDxEZXRhY2hpbmdS
dWxlPiBkZXRhY2hpbmdSdWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fZGV0YWNoaW5nUnVsZXM7IH0K
KyAgICB2b2lkIHNldFdpZHRoKExheW91dFVuaXQpOworICAgIExheW91dFVuaXQgd2lkdGgoKSBj
b25zdDsKIAotICAgIC8vIE5vbi1icmVha2FibGUgc3RhcnQvZW5kIG1hcmtzIG1hcmdpbi9wYWRk
aW5nL2JvcmRlciBzcGFjZSAoZXZlbiB3aGVuIGl0IGRvZXMgbm90IGRpcmVjdGx5IGNvbWUgZnJv
bSB0aGUgYXNzb2NpYXRlZCBsYXlvdXQgYm94KQotICAgIC8vIDxzcGFuIHN0eWxlPSJwYWRkaW5n
OiA1cHgiPjxzcGFuPm5lc3RlZCBjb250ZW50IHdpdGggcGFkZGluZyBwYXJlbnQ8L3NwYW48L3Nw
YW4+Ci0gICAgLy8gPG5lc3RlZCBjb250ZW50IHdpdGggcGFkZGluZyBwYXJlbnQ+IGlubGluZSBy
dW4gaGFzIDVweCBub24tYnJlYWthYmxlIHN0YXJ0L2VuZC4KLSAgICBMYXlvdXRVbml0IG5vbkJy
ZWFrYWJsZVN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9ub25CcmVha2FibGVTdGFydDsgfQotICAg
IExheW91dFVuaXQgbm9uQnJlYWthYmxlRW5kKCkgY29uc3QgeyByZXR1cm4gbV9ub25CcmVha2Fi
bGVFbmQ7IH0KLSAgICB2b2lkIGFkZE5vbkJyZWFrYWJsZVN0YXJ0KExheW91dFVuaXQgdmFsdWUp
IHsgbV9ub25CcmVha2FibGVTdGFydCArPSB2YWx1ZTsgfQotICAgIHZvaWQgYWRkTm9uQnJlYWth
YmxlRW5kKExheW91dFVuaXQgdmFsdWUpIHsgbV9ub25CcmVha2FibGVFbmQgKz0gdmFsdWU7IH0K
KyAgICBib29sIGlzVGV4dCgpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBUeXBlOjpUZXh0OyB9
CisgICAgYm9vbCBpc0JveCgpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBUeXBlOjpCb3g7IH0K
KyAgICBib29sIGlzSGFyZExpbmVCcmVhaygpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBUeXBl
OjpIYXJkTGluZUJyZWFrOyB9CisgICAgYm9vbCBpc0Zsb2F0KCkgY29uc3QgeyByZXR1cm4gdHlw
ZSgpID09IFR5cGU6OkZsb2F0OyB9CisgICAgYm9vbCBpc0xpbmVCcmVhaygpIGNvbnN0IHsgcmV0
dXJuIHR5cGUoKSA9PSBUeXBlOjpIYXJkTGluZUJyZWFrOyB9CisgICAgYm9vbCBpc0NvbnRhaW5l
clN0YXJ0KCkgY29uc3QgeyByZXR1cm4gdHlwZSgpID09IFR5cGU6OkNvbnRhaW5lclN0YXJ0OyB9
CisgICAgYm9vbCBpc0NvbnRhaW5lckVuZCgpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBUeXBl
OjpDb250YWluZXJFbmQ7IH0KIAogcHJpdmF0ZToKICAgICBjb25zdCBCb3gmIG1fbGF5b3V0Qm94
OwotICAgIE9wdGlvblNldDxEZXRhY2hpbmdSdWxlPiBtX2RldGFjaGluZ1J1bGVzOwotICAgIExh
eW91dFVuaXQgbV9ub25CcmVha2FibGVTdGFydDsKLSAgICBMYXlvdXRVbml0IG1fbm9uQnJlYWth
YmxlRW5kOworICAgIGNvbnN0IFR5cGUgbV90eXBlOworICAgIExheW91dFVuaXQgbV93aWR0aDsK
KyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgYm9vbCBtX2hhc1ZhbGlkV2lkdGggeyBmYWxzZSB9
OworI2VuZGlmCiB9OwogCi11c2luZyBJbmxpbmVDb250ZW50ID0gTGlzdEhhc2hTZXQ8c3RkOjp1
bmlxdWVfcHRyPElubGluZUl0ZW0+PjsKLQotaW5saW5lIElubGluZUl0ZW06OklubGluZUl0ZW0o
Y29uc3QgQm94JiBsYXlvdXRCb3gpCitpbmxpbmUgSW5saW5lSXRlbTo6SW5saW5lSXRlbShjb25z
dCBCb3gmIGxheW91dEJveCwgVHlwZSB0eXBlKQogICAgIDogbV9sYXlvdXRCb3gobGF5b3V0Qm94
KQorICAgICwgbV90eXBlKHR5cGUpCiB7CiB9CiAKLWlubGluZSBJbmxpbmVJdGVtOjpUeXBlIElu
bGluZUl0ZW06OnR5cGUoKSBjb25zdAoraW5saW5lIHZvaWQgSW5saW5lSXRlbTo6c2V0V2lkdGgo
TGF5b3V0VW5pdCB3aWR0aCkKIHsKLSAgICBpZiAoaXM8SW5saW5lQm94PihtX2xheW91dEJveCkg
JiYgZG93bmNhc3Q8SW5saW5lQm94PihtX2xheW91dEJveCkuaGFzVGV4dENvbnRlbnQoKSkKLSAg
ICAgICAgcmV0dXJuIFR5cGU6OlRleHQ7Ci0KLSAgICBpZiAoaXM8TGluZUJyZWFrQm94PihtX2xh
eW91dEJveCkpCi0gICAgICAgIHJldHVybiBUeXBlOjpIYXJkTGluZUJyZWFrOwotCi0gICAgaWYg
KG1fbGF5b3V0Qm94LmlzRmxvYXRpbmdQb3NpdGlvbmVkKCkpCi0gICAgICAgIHJldHVybiBUeXBl
OjpGbG9hdDsKLQotICAgIEFTU0VSVChtX2xheW91dEJveC5pc0lubGluZUxldmVsQm94KCkpOwot
ICAgIHJldHVybiBUeXBlOjpJbmxpbmVCb3g7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIG1f
aGFzVmFsaWRXaWR0aCA9IHRydWU7CisjZW5kaWYKKyAgICBtX3dpZHRoID0gd2lkdGg7CiB9CiAK
LWlubGluZSBTdHJpbmcgSW5saW5lSXRlbTo6dGV4dENvbnRlbnQoKSBjb25zdAoraW5saW5lIExh
eW91dFVuaXQgSW5saW5lSXRlbTo6d2lkdGgoKSBjb25zdAogewotICAgIGlmICh0eXBlKCkgIT0g
VHlwZTo6VGV4dCkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIHJldHVybiBkb3duY2FzdDxJ
bmxpbmVCb3g+KG1fbGF5b3V0Qm94KS50ZXh0Q29udGVudCgpOworICAgIEFTU0VSVChtX2hhc1Zh
bGlkV2lkdGgpOworICAgIHJldHVybiBtX3dpZHRoOwogfQogCisjZGVmaW5lIFNQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfSU5MSU5FX0lURU0oVG9WYWx1ZVR5cGVOYW1lLCBwcmVkaWNhdGUpIFwKK1NQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6TGF5b3V0OjpUb1ZhbHVlVHlwZU5h
bWUpIFwKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6TGF5b3V0OjpJbmxp
bmVJdGVtJiBpbmxpbmVJdGVtKSB7IHJldHVybiBpbmxpbmVJdGVtLnByZWRpY2F0ZTsgfSBcCitT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKIH0KIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJyZWFrZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJy
ZWFrZXIuY3BwCmluZGV4IDU3NmEwYmI3OTU0MzdlMDEzNzQyYTcyODY5NDNhZjI0ODEwMDRmZWMu
LjMxYzNjZDJiOTcxZGI3N2FjYjg0Y2Q2ZTdiNzJhODFkZmNhMDZmNDUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCcmVha2VyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5l
QnJlYWtlci5jcHAKQEAgLTI4LDE3MyArMjgsMTAzIEBACiAKICNpZiBFTkFCTEUoTEFZT1VUX0ZP
Uk1BVFRJTkdfQ09OVEVYVCkKIAotI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAi
SHlwaGVuYXRpb24uaCIKLSNpbmNsdWRlICJJbmxpbmVSdW5Qcm92aWRlci5oIgotI2luY2x1ZGUg
IlRleHRVdGlsLmgiCi0jaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKyNpbmNsdWRl
ICJMYXlvdXRTdGF0ZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgTGF5b3V0
IHsKIAotV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKElubGluZUxpbmVCcmVha2VyKTsKLQot
SW5saW5lTGluZUJyZWFrZXI6OklubGluZUxpbmVCcmVha2VyKGNvbnN0IExheW91dFN0YXRlJiBs
YXlvdXRTdGF0ZSwgY29uc3QgSW5saW5lQ29udGVudCYgaW5saW5lQ29udGVudCwgY29uc3QgVmVj
dG9yPElubGluZVJ1blByb3ZpZGVyOjpSdW4+JiBpbmxpbmVSdW5zKQorTGluZUJyZWFrZXI6Okxp
bmVCcmVha2VyKGNvbnN0IExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSkKICAgICA6IG1fbGF5b3V0
U3RhdGUobGF5b3V0U3RhdGUpCi0gICAgLCBtX2lubGluZUNvbnRlbnQoaW5saW5lQ29udGVudCkK
LSAgICAsIG1faW5saW5lUnVucyhpbmxpbmVSdW5zKQotewotfQotCi1PcHRpb25hbDxJbmxpbmVM
aW5lQnJlYWtlcjo6UnVuPiBJbmxpbmVMaW5lQnJlYWtlcjo6bmV4dFJ1bihMYXlvdXRVbml0IGNv
bnRlbnRMb2dpY2FsTGVmdCwgTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCwgYm9vbCBsaW5lSXNF
bXB0eSkKIHsKLSAgICBpZiAoaXNBdENvbnRlbnRFbmQoKSkKLSAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKLQotICAgIElubGluZVJ1blByb3ZpZGVyOjpSdW4gY3VycmVudElubGluZVJ1biA9
IG1faW5saW5lUnVuc1ttX2N1cnJlbnRSdW5JbmRleF07Ci0gICAgLy8gQWRqdXN0IHRoZSBjdXJy
ZW50IHJ1biBpZiBpdCBpcyBzcGxpdCBtaWR3b3JkLgotICAgIGlmIChtX3NwbGl0UG9zaXRpb24p
IHsKLSAgICAgICAgQVNTRVJUKGN1cnJlbnRJbmxpbmVSdW4uaXNUZXh0KCkpOwotICAgICAgICBt
X3NwbGl0UG9zaXRpb24gPSBXVEY6Om51bGxvcHQ7Ci0gICAgfQotCi0gICAgaWYgKGN1cnJlbnRJ
bmxpbmVSdW4uaXNMaW5lQnJlYWsoKSkgewotICAgICAgICArK21fY3VycmVudFJ1bkluZGV4Owot
ICAgICAgICByZXR1cm4gUnVuIHsgUnVuOjpQb3NpdGlvbjo6TGluZUVuZCwgMCwgY3VycmVudElu
bGluZVJ1biB9OwotICAgIH0KLQotICAgIGF1dG8gY29udGVudFdpZHRoID0gcnVuV2lkdGgoY3Vy
cmVudElubGluZVJ1biwgY29udGVudExvZ2ljYWxMZWZ0KTsKLSAgICAvLyAxLiBQbGVudHkgb2Yg
c3BhY2UgbGVmdC4KLSAgICBpZiAoY29udGVudFdpZHRoIDw9IGF2YWlsYWJsZVdpZHRoKSB7Ci0g
ICAgICAgICsrbV9jdXJyZW50UnVuSW5kZXg7Ci0gICAgICAgIHJldHVybiBSdW4geyBsaW5lSXNF
bXB0eSA/IFJ1bjo6UG9zaXRpb246OkxpbmVCZWdpbiA6IFJ1bjo6UG9zaXRpb246OlVuZGV0ZXJt
aW5lZCwgY29udGVudFdpZHRoLCBjdXJyZW50SW5saW5lUnVuIH07Ci0gICAgfQotCi0gICAgLy8g
Mi4gTm8gc3BhY2UgbGVmdCB3aGF0c29ldmVyLgotICAgIGlmIChhdmFpbGFibGVXaWR0aCA8PSAw
KSB7Ci0gICAgICAgICsrbV9jdXJyZW50UnVuSW5kZXg7Ci0gICAgICAgIHJldHVybiBSdW4geyBS
dW46OlBvc2l0aW9uOjpMaW5lQmVnaW4sIGNvbnRlbnRXaWR0aCwgY3VycmVudElubGluZVJ1biB9
OwotICAgIH0KLQotICAgIC8vIDMuIFNvbWUgc3BhY2UgbGVmdC4gTGV0J3MgZmluZCBvdXQgd2hh
dCB3ZSBuZWVkIHRvIGRvIHdpdGggdGhpcyBydW4uCi0gICAgYXV0byBicmVha2luZ0JlaGF2aW9y
ID0gbGluZUJyZWFraW5nQmVoYXZpb3IoY3VycmVudElubGluZVJ1biwgbGluZUlzRW1wdHkpOwot
ICAgIGlmIChicmVha2luZ0JlaGF2aW9yID09IExpbmVCcmVha2luZ0JlaGF2aW9yOjpLZWVwKSB7
Ci0gICAgICAgICsrbV9jdXJyZW50UnVuSW5kZXg7Ci0gICAgICAgIHJldHVybiBSdW4geyBsaW5l
SXNFbXB0eSA/IFJ1bjo6UG9zaXRpb246OkxpbmVCZWdpbiA6IFJ1bjo6UG9zaXRpb246OlVuZGV0
ZXJtaW5lZCwgY29udGVudFdpZHRoLCBjdXJyZW50SW5saW5lUnVuIH07Ci0gICAgfQotCi0gICAg
aWYgKGJyZWFraW5nQmVoYXZpb3IgPT0gTGluZUJyZWFraW5nQmVoYXZpb3I6OldyYXBUb05leHRM
aW5lKSB7Ci0gICAgICAgICsrbV9jdXJyZW50UnVuSW5kZXg7Ci0gICAgICAgIHJldHVybiBSdW4g
eyBSdW46OlBvc2l0aW9uOjpMaW5lQmVnaW4sIGNvbnRlbnRXaWR0aCwgY3VycmVudElubGluZVJ1
biB9OwotICAgIH0KIAotICAgIEFTU0VSVChicmVha2luZ0JlaGF2aW9yID09IExpbmVCcmVha2lu
Z0JlaGF2aW9yOjpCcmVhayk7Ci0gICAgLy8gU3BsaXQgY29udGVudC4KLSAgICByZXR1cm4gc3Bs
aXRSdW4oY3VycmVudElubGluZVJ1biwgY29udGVudExvZ2ljYWxMZWZ0LCBhdmFpbGFibGVXaWR0
aCwgbGluZUlzRW1wdHkpOwogfQogCi1ib29sIElubGluZUxpbmVCcmVha2VyOjppc0F0Q29udGVu
dEVuZCgpIGNvbnN0CitMaW5lQnJlYWtlcjo6QnJlYWtpbmdDb250ZXh0IExpbmVCcmVha2VyOjpi
cmVha2luZ0NvbnRleHQoSW5saW5lSXRlbSYgaW5saW5lSXRlbSwgTGluZUNvbnRleHQgbGluZUNv
bnRleHQpCiB7Ci0gICAgcmV0dXJuIG1fY3VycmVudFJ1bkluZGV4ID09IG1faW5saW5lUnVucy5z
aXplKCk7CisgICAgaW5saW5lSXRlbS5zZXRXaWR0aChydW5XaWR0aChpbmxpbmVJdGVtLCBsaW5l
Q29udGV4dC5sb2dpY2FsTGVmdCkpOworICAgIC8vIEZpcnN0IGNvbnRlbnQgYWx3YXlzIHN0YXlz
IG9uIGxpbmUuCisgICAgaWYgKGxpbmVDb250ZXh0LmlzRW1wdHkgfHwgaW5saW5lSXRlbS53aWR0
aCgpIDw9IGxpbmVDb250ZXh0LmF2YWlsYWJsZVdpZHRoKQorICAgICAgICByZXR1cm4geyBCcmVh
a2luZ0JlaGF2aW9yOjpLZWVwLCBpc0F0QnJlYWtpbmdPcHBvcnR1bml0eShpbmxpbmVJdGVtKSB9
OworCisgICAgaWYgKGlzPElubGluZVRleHRJdGVtPihpbmxpbmVJdGVtKSkKKyAgICAgICAgcmV0
dXJuIHsgd29yZEJyZWFraW5nQmVoYXZpb3IoZG93bmNhc3Q8SW5saW5lVGV4dEl0ZW0+KGlubGlu
ZUl0ZW0pLCBsaW5lQ29udGV4dC5pc0VtcHR5KSwgaXNBdEJyZWFraW5nT3Bwb3J0dW5pdHkoaW5s
aW5lSXRlbSkgfTsKKworICAgIC8vIFdyYXAgbm9uLXRleHQgYm94ZXMgdG8gdGhlIG5leHQgbGlu
ZSB1bmxlc3Mgd2UgY2FuIHRyaW0gdHJhaWxpbmcgd2hpdGVzcGFjZS4KKyAgICBhdXRvIGF2YWls
YWJsZVdpZHRoID0gbGluZUNvbnRleHQuYXZhaWxhYmxlV2lkdGggKyBsaW5lQ29udGV4dC50cmlt
bWFibGVXaWR0aDsKKyAgICBpZiAoaW5saW5lSXRlbS53aWR0aCgpIDw9IGF2YWlsYWJsZVdpZHRo
KQorICAgICAgICByZXR1cm4geyBCcmVha2luZ0JlaGF2aW9yOjpLZWVwLCBpc0F0QnJlYWtpbmdP
cHBvcnR1bml0eShpbmxpbmVJdGVtKSB9OworICAgIHJldHVybiB7IEJyZWFraW5nQmVoYXZpb3I6
OldyYXAsIGlzQXRCcmVha2luZ09wcG9ydHVuaXR5KGlubGluZUl0ZW0pIH07CiB9CiAKLUlubGlu
ZUxpbmVCcmVha2VyOjpMaW5lQnJlYWtpbmdCZWhhdmlvciBJbmxpbmVMaW5lQnJlYWtlcjo6bGlu
ZUJyZWFraW5nQmVoYXZpb3IoY29uc3QgSW5saW5lUnVuUHJvdmlkZXI6OlJ1biYgaW5saW5lUnVu
LCBib29sIGxpbmVJc0VtcHR5KQorTGluZUJyZWFrZXI6OkJyZWFraW5nQmVoYXZpb3IgTGluZUJy
ZWFrZXI6OndvcmRCcmVha2luZ0JlaGF2aW9yKGNvbnN0IElubGluZVRleHRJdGVtJiBpbmxpbmVJ
dGVtLCBib29sIGxpbmVJc0VtcHR5KSBjb25zdAogewotICAgIC8vIExpbmUgYnJlYWtpbmcgYmVo
YXZpb3VyOgorICAgIC8vIFdvcmQgYnJlYWtpbmcgYmVoYXZpb3VyOgogICAgIC8vIDEuIFdoaXRl
c2FwY2UgY29sbGFwc2Ugb24gLT4gcHVzaCB3aGl0ZXNwYWNlIHRvIG5leHQgbGluZS4KICAgICAv
LyAyLiBXaGl0ZXNwYWNlIGNvbGxhcHNlIG9mZiAtPiB3aGl0ZXNwYWNlIGlzIHNwbGl0IHdoZXJl
IHBvc3NpYmxlLgogICAgIC8vIDMuIE5vbi13aGl0ZXNwYWNlIC0+IGZpcnN0IHJ1biBvbiB0aGUg
bGluZSAtPiBlaXRoZXIgc3BsaXQgb3Iga2VwdCBvbiB0aGUgbGluZS4gKGRlcGVuZHMgb24gb3Zl
cmZsb3ctd3JhcCkKICAgICAvLyA0LiBOb24td2hpdGVzcGFjZSAtPiBhbHJlYWR5IGNvbnRlbnQg
b24gdGhlIGxpbmUgLT4gZWl0aGVyIGdldHMgc3BsaXQgKHdvcmQtYnJlYWs6IGJyZWFrLWFsbCkg
b3IgZ2V0cyBwdXNoZWQgdG8gdGhlIG5leHQgbGluZS4KICAgICAvLyAoSHlwaGVuYXRlIHdoZW4g
cG9zc2libGUpCiAgICAgLy8gNS4gTm9uLXRleHQgdHlwZSAtPiBuZXh0IGxpbmUKLSAgICBhdXRv
JiBzdHlsZSA9IGlubGluZVJ1bi5zdHlsZSgpOworICAgIGF1dG8mIHN0eWxlID0gaW5saW5lSXRl
bS5zdHlsZSgpOwogCi0gICAgaWYgKGlubGluZVJ1bi5pc1doaXRlc3BhY2UoKSkKLSAgICAgICAg
cmV0dXJuIHN0eWxlLmNvbGxhcHNlV2hpdGVTcGFjZSgpID8gTGluZUJyZWFraW5nQmVoYXZpb3I6
OldyYXBUb05leHRMaW5lIDogTGluZUJyZWFraW5nQmVoYXZpb3I6OkJyZWFrOworICAgIGlmIChp
bmxpbmVJdGVtLmlzV2hpdGVzcGFjZSgpKQorICAgICAgICByZXR1cm4gc3R5bGUuY29sbGFwc2VX
aGl0ZVNwYWNlKCkgPyBCcmVha2luZ0JlaGF2aW9yOjpXcmFwIDogQnJlYWtpbmdCZWhhdmlvcjo6
QnJlYWs7CiAKLSAgICBpZiAoaW5saW5lUnVuLmlzTm9uV2hpdGVzcGFjZSgpKSB7Ci0gICAgICAg
IGF1dG8gc2hvdWxkSHlwZW5hdGUgPSAhbV9oeXBoZW5hdGlvbklzRGlzYWJsZWQgJiYgc3R5bGUu
aHlwaGVucygpID09IEh5cGhlbnM6OkF1dG8gJiYgY2FuSHlwaGVuYXRlKHN0eWxlLmxvY2FsZSgp
KTsKLSAgICAgICAgaWYgKHNob3VsZEh5cGVuYXRlKQotICAgICAgICAgICAgcmV0dXJuIExpbmVC
cmVha2luZ0JlaGF2aW9yOjpCcmVhazsKKyAgICBhdXRvIHNob3VsZEh5cGVuYXRlID0gIW1faHlw
aGVuYXRpb25Jc0Rpc2FibGVkICYmIHN0eWxlLmh5cGhlbnMoKSA9PSBIeXBoZW5zOjpBdXRvICYm
IGNhbkh5cGhlbmF0ZShzdHlsZS5sb2NhbGUoKSk7CisgICAgaWYgKHNob3VsZEh5cGVuYXRlKQor
ICAgICAgICByZXR1cm4gQnJlYWtpbmdCZWhhdmlvcjo6QnJlYWs7CiAKLSAgICAgICAgaWYgKHN0
eWxlLmF1dG9XcmFwKCkpIHsKLSAgICAgICAgICAgIC8vIEJyZWFrIGFueSB3b3JkCi0gICAgICAg
ICAgICBpZiAoc3R5bGUud29yZEJyZWFrKCkgPT0gV29yZEJyZWFrOjpCcmVha0FsbCkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gTGluZUJyZWFraW5nQmVoYXZpb3I6OkJyZWFrOworICAgIGlmIChz
dHlsZS5hdXRvV3JhcCgpKSB7CisgICAgICAgIC8vIEJyZWFrIGFueSB3b3JkCisgICAgICAgIGlm
IChzdHlsZS53b3JkQnJlYWsoKSA9PSBXb3JkQnJlYWs6OkJyZWFrQWxsKQorICAgICAgICAgICAg
cmV0dXJuIEJyZWFraW5nQmVoYXZpb3I6OkJyZWFrOwogCi0gICAgICAgICAgICAvLyBCcmVhayBm
aXJzdCBydW4gb24gbGluZS4KLSAgICAgICAgICAgIGlmIChsaW5lSXNFbXB0eSAmJiBzdHlsZS5i
cmVha1dvcmRzKCkgJiYgc3R5bGUucHJlc2VydmVOZXdsaW5lKCkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIExpbmVCcmVha2luZ0JlaGF2aW9yOjpCcmVhazsKLSAgICAgICAgfQotCi0gICAgICAg
IC8vIE5vbi1icmVha2FibGUgbm9uLXdoaXRlc3BhY2UgcnVuLgotICAgICAgICByZXR1cm4gbGlu
ZUlzRW1wdHkgPyBMaW5lQnJlYWtpbmdCZWhhdmlvcjo6S2VlcCA6IExpbmVCcmVha2luZ0JlaGF2
aW9yOjpXcmFwVG9OZXh0TGluZTsKKyAgICAgICAgLy8gQnJlYWsgZmlyc3QgcnVuIG9uIGxpbmUu
CisgICAgICAgIGlmIChsaW5lSXNFbXB0eSAmJiBzdHlsZS5icmVha1dvcmRzKCkgJiYgc3R5bGUu
cHJlc2VydmVOZXdsaW5lKCkpCisgICAgICAgICAgICByZXR1cm4gQnJlYWtpbmdCZWhhdmlvcjo6
QnJlYWs7CiAgICAgfQogCi0gICAgQVNTRVJUKGlubGluZVJ1bi5pc0JveCgpIHx8IGlubGluZVJ1
bi5pc0Zsb2F0KCkpOwotICAgIC8vIE5vbi10ZXh0IGlubGluZSBydW5zLgotICAgIHJldHVybiBM
aW5lQnJlYWtpbmdCZWhhdmlvcjo6V3JhcFRvTmV4dExpbmU7CisgICAgLy8gTm9uLWJyZWFrYWJs
ZSBub24td2hpdGVzcGFjZSBydW4uCisgICAgcmV0dXJuIGxpbmVJc0VtcHR5ID8gQnJlYWtpbmdC
ZWhhdmlvcjo6S2VlcCA6IEJyZWFraW5nQmVoYXZpb3I6OldyYXA7CiB9CiAKLUxheW91dFVuaXQg
SW5saW5lTGluZUJyZWFrZXI6OnJ1bldpZHRoKGNvbnN0IElubGluZVJ1blByb3ZpZGVyOjpSdW4m
IGlubGluZVJ1biwgTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbExlZnQpIGNvbnN0CitMYXlvdXRV
bml0IExpbmVCcmVha2VyOjpydW5XaWR0aChjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtLCBM
YXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsTGVmdCkgY29uc3QKIHsKLSAgICBBU1NFUlQoIWlubGlu
ZVJ1bi5pc0xpbmVCcmVhaygpKTsKKyAgICBpZiAoaXM8SW5saW5lVGV4dEl0ZW0+KGlubGluZUl0
ZW0pKQorICAgICAgICByZXR1cm4gdGV4dFdpZHRoKGRvd25jYXN0PElubGluZVRleHRJdGVtPihp
bmxpbmVJdGVtKSwgY29udGVudExvZ2ljYWxMZWZ0KTsKIAotICAgIGlmIChpbmxpbmVSdW4uaXNU
ZXh0KCkpCi0gICAgICAgIHJldHVybiB0ZXh0V2lkdGgoaW5saW5lUnVuLCBjb250ZW50TG9naWNh
bExlZnQpOworICAgIGlmIChpbmxpbmVJdGVtLmlzTGluZUJyZWFrKCkpCisgICAgICAgIHJldHVy
biAwOwogCi0gICAgQVNTRVJUKGlubGluZVJ1bi5pc0JveCgpIHx8IGlubGluZVJ1bi5pc0Zsb2F0
KCkpOwotICAgIGF1dG8mIGlubGluZUl0ZW0gPSBpbmxpbmVSdW4uaW5saW5lSXRlbSgpOwogICAg
IGF1dG8mIGxheW91dEJveCA9IGlubGluZUl0ZW0ubGF5b3V0Qm94KCk7CiAgICAgQVNTRVJUKG1f
bGF5b3V0U3RhdGUuaGFzRGlzcGxheUJveChsYXlvdXRCb3gpKTsKICAgICBhdXRvJiBkaXNwbGF5
Qm94ID0gbV9sYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7Ci0g
ICAgcmV0dXJuIGlubGluZUl0ZW0ubm9uQnJlYWthYmxlU3RhcnQoKSArIGRpc3BsYXlCb3gud2lk
dGgoKSArIGlubGluZUl0ZW0ubm9uQnJlYWthYmxlRW5kKCk7Ci19CiAKLUxheW91dFVuaXQgSW5s
aW5lTGluZUJyZWFrZXI6OnRleHRXaWR0aChjb25zdCBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuJiBp
bmxpbmVSdW4sIExheW91dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0KSBjb25zdAotewotICAgIC8v
IEZJWE1FOiBGaW5kIGEgd2F5IHRvIG1lcmdlIHRoaXMgYW5kIElubGluZUZvcm1hdHRpbmdDb250
ZXh0OjpHZW9tZXRyeTo6cnVuV2lkdGguCi0gICAgYXV0byYgaW5saW5lSXRlbSA9IGlubGluZVJ1
bi5pbmxpbmVJdGVtKCk7Ci0gICAgYXV0byB0ZXh0Q29udGV4dCA9IGlubGluZVJ1bi50ZXh0Q29u
dGV4dCgpOwotICAgIGF1dG8gc3RhcnRQb3NpdGlvbiA9IHRleHRDb250ZXh0LT5zdGFydCgpOwot
ICAgIGF1dG8gbGVuZ3RoID0gdGV4dENvbnRleHQtPmlzQ29sbGFwc2VkKCkgPyAxIDogdGV4dENv
bnRleHQtPmxlbmd0aCgpOwotCi0gICAgLy8gRklYTUU6IEl0IGRvZXMgbm90IGRvIHByb3BlciBr
ZXJuaW5nL2xpZ2F0dXJlIGhhbmRsaW5nLgotICAgIExheW91dFVuaXQgd2lkdGg7Ci0gICAgYXV0
byBpdGVyYXRvciA9IG1faW5saW5lQ29udGVudC5maW5kKGNvbnN0X2Nhc3Q8SW5saW5lSXRlbSo+
KCZpbmxpbmVJdGVtKSk7Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIGF1dG8gaW5saW5lSXRl
bUVuZCA9IG1faW5saW5lQ29udGVudC5lbmQoKTsKLSNlbmRpZgotICAgIHdoaWxlIChsZW5ndGgp
IHsKLSAgICAgICAgQVNTRVJUKGl0ZXJhdG9yICE9IGlubGluZUl0ZW1FbmQpOwotICAgICAgICBh
dXRvJiBjdXJyZW50SW5saW5lSXRlbSA9ICoqaXRlcmF0b3I7Ci0gICAgICAgIGF1dG8gaW5saW5l
SXRlbUxlbmd0aCA9IGN1cnJlbnRJbmxpbmVJdGVtLnRleHRDb250ZW50KCkubGVuZ3RoKCk7Ci0g
ICAgICAgIGF1dG8gZW5kUG9zaXRpb24gPSBzdGQ6Om1pbjxJdGVtUG9zaXRpb24+KHN0YXJ0UG9z
aXRpb24gKyBsZW5ndGgsIGlubGluZUl0ZW1MZW5ndGgpOwotICAgICAgICBhdXRvIHRleHRXaWR0
aCA9IFRleHRVdGlsOjp3aWR0aChjdXJyZW50SW5saW5lSXRlbSwgc3RhcnRQb3NpdGlvbiwgZW5k
UG9zaXRpb24sIGNvbnRlbnRMb2dpY2FsTGVmdCk7Ci0KLSAgICAgICAgYXV0byBub25CcmVha2Fi
bGVTdGFydCA9ICFzdGFydFBvc2l0aW9uID8gY3VycmVudElubGluZUl0ZW0ubm9uQnJlYWthYmxl
U3RhcnQoKSA6IDBfbHU7Ci0gICAgICAgIGF1dG8gbm9uQnJlYWthYmxlRW5kID0gIGVuZFBvc2l0
aW9uID09IGlubGluZUl0ZW1MZW5ndGggPyBjdXJyZW50SW5saW5lSXRlbS5ub25CcmVha2FibGVF
bmQoKSA6IDBfbHU7Ci0gICAgICAgIGF1dG8gY29udGVudFdpZHRoID0gbm9uQnJlYWthYmxlU3Rh
cnQgKyB0ZXh0V2lkdGggKyBub25CcmVha2FibGVFbmQ7Ci0gICAgICAgIGNvbnRlbnRMb2dpY2Fs
TGVmdCArPSBjb250ZW50V2lkdGg7Ci0gICAgICAgIHdpZHRoICs9IGNvbnRlbnRXaWR0aDsKLSAg
ICAgICAgbGVuZ3RoIC09IChlbmRQb3NpdGlvbiAtIHN0YXJ0UG9zaXRpb24pOwotCi0gICAgICAg
IHN0YXJ0UG9zaXRpb24gPSAwOwotICAgICAgICArK2l0ZXJhdG9yOwotICAgIH0KLSAgICByZXR1
cm4gd2lkdGg7CisgICAgaWYgKGlubGluZUl0ZW0uaXNDb250YWluZXJTdGFydCgpKQorICAgICAg
ICByZXR1cm4gZGlzcGxheUJveC5tYXJnaW5TdGFydCgpICsgZGlzcGxheUJveC5ib3JkZXJMZWZ0
KCkgKyBkaXNwbGF5Qm94LnBhZGRpbmdMZWZ0KCkudmFsdWVPcigwKTsKKworICAgIGlmIChpbmxp
bmVJdGVtLmlzQ29udGFpbmVyRW5kKCkpCisgICAgICAgIHJldHVybiBkaXNwbGF5Qm94Lm1hcmdp
bkVuZCgpICsgZGlzcGxheUJveC5ib3JkZXJSaWdodCgpICsgZGlzcGxheUJveC5wYWRkaW5nUmln
aHQoKS52YWx1ZU9yKDApOworCisgICAgaWYgKGlubGluZUl0ZW0uaXNGbG9hdCgpKQorICAgICAg
ICByZXR1cm4gZGlzcGxheUJveC5tYXJnaW5Cb3goKS53aWR0aCgpOworCisgICAgcmV0dXJuIGRp
c3BsYXlCb3gud2lkdGgoKTsKIH0KIAotSW5saW5lTGluZUJyZWFrZXI6OlJ1biBJbmxpbmVMaW5l
QnJlYWtlcjo6c3BsaXRSdW4oY29uc3QgSW5saW5lUnVuUHJvdmlkZXI6OlJ1biYgaW5saW5lUnVu
LCBMYXlvdXRVbml0LCBMYXlvdXRVbml0LCBib29sKQorYm9vbCBMaW5lQnJlYWtlcjo6aXNBdEJy
ZWFraW5nT3Bwb3J0dW5pdHkoY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSkKIHsKLSAgICBy
ZXR1cm4geyBSdW46OlBvc2l0aW9uOjpVbmRldGVybWluZWQsIHsgfSwgaW5saW5lUnVuIH07Cisg
ICAgaWYgKGlzPElubGluZVRleHRJdGVtPihpbmxpbmVJdGVtKSkKKyAgICAgICAgcmV0dXJuIGRv
d25jYXN0PElubGluZVRleHRJdGVtPihpbmxpbmVJdGVtKS5pc1doaXRlc3BhY2UoKTsKKyAgICBy
ZXR1cm4gIWlubGluZUl0ZW0uaXNGbG9hdCgpICYmICFpbmxpbmVJdGVtLmlzQ29udGFpbmVyU3Rh
cnQoKSAmJiAhaW5saW5lSXRlbS5pc0NvbnRhaW5lckVuZCgpOwogfQogCi1PcHRpb25hbDxJdGVt
UG9zaXRpb24+IElubGluZUxpbmVCcmVha2VyOjphZGp1c3RTcGxpdFBvc2l0aW9uV2l0aEh5cGhl
bmF0aW9uKGNvbnN0IElubGluZVJ1blByb3ZpZGVyOjpSdW4mLCBJdGVtUG9zaXRpb24sIExheW91
dFVuaXQsIExheW91dFVuaXQsIGJvb2wpIGNvbnN0CitMYXlvdXRVbml0IExpbmVCcmVha2VyOjp0
ZXh0V2lkdGgoY29uc3QgSW5saW5lVGV4dEl0ZW0mIGlubGluZVRleHRJdGVtLCBMYXlvdXRVbml0
IGNvbnRlbnRMb2dpY2FsTGVmdCkgY29uc3QKIHsKLSAgICByZXR1cm4geyB9OworICAgIGF1dG8g
ZW5kID0gaW5saW5lVGV4dEl0ZW0uaXNDb2xsYXBzZWQoKSA/IGlubGluZVRleHRJdGVtLnN0YXJ0
KCkgKyAxIDogaW5saW5lVGV4dEl0ZW0uZW5kKCk7CisgICAgcmV0dXJuIFRleHRVdGlsOjp3aWR0
aChkb3duY2FzdDxJbmxpbmVCb3g+KGlubGluZVRleHRJdGVtLmxheW91dEJveCgpKSwgaW5saW5l
VGV4dEl0ZW0uc3RhcnQoKSwgZW5kLCBjb250ZW50TG9naWNhbExlZnQpOwogfQotCiB9CiB9CiAj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5n
L0lubGluZUxpbmVCcmVha2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0
dGluZy9JbmxpbmVMaW5lQnJlYWtlci5oCmluZGV4IDM4N2IwZmNmMzVmNjU2ODE1MGFmNWIwMzZj
YTBhZWM4YmMxYjc5ODkuLjA2NTMzMDI2M2RkN2E0Yzk2YjJkOTQzZjc4YzQxMzJiYzg0YzY0Mzkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGlu
ZUxpbmVCcmVha2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRp
bmcvSW5saW5lTGluZUJyZWFrZXIuaApAQCAtMjcsNDEgKzI3LDM3IEBACiAKICNpZiBFTkFCTEUo
TEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKIAotI2luY2x1ZGUgIklubGluZVJ1blByb3ZpZGVy
LmgiCi0jaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBu
YW1lc3BhY2UgTGF5b3V0IHsKIAotY2xhc3MgSW5saW5lTGluZUJyZWFrZXIgewotICAgIFdURl9N
QUtFX0lTT19BTExPQ0FURUQoSW5saW5lTGluZUJyZWFrZXIpOworY2xhc3MgSW5saW5lVGV4dEl0
ZW07CisKK2NsYXNzIExpbmVCcmVha2VyIHsKIHB1YmxpYzoKLSAgICBJbmxpbmVMaW5lQnJlYWtl
cihjb25zdCBMYXlvdXRTdGF0ZSYsIGNvbnN0IElubGluZUNvbnRlbnQmLCBjb25zdCBWZWN0b3I8
SW5saW5lUnVuUHJvdmlkZXI6OlJ1bj4mKTsKKyAgICBMaW5lQnJlYWtlcihjb25zdCBMYXlvdXRT
dGF0ZSYpOwogCi0gICAgc3RydWN0IFJ1biB7Ci0gICAgICAgIGVudW0gY2xhc3MgUG9zaXRpb24g
eyBVbmRldGVybWluZWQsIExpbmVCZWdpbiwgTGluZUVuZCB9OwotICAgICAgICBQb3NpdGlvbiBw
b3NpdGlvbjsKLSAgICAgICAgTGF5b3V0VW5pdCB3aWR0aDsKLSAgICAgICAgSW5saW5lUnVuUHJv
dmlkZXI6OlJ1biBjb250ZW50OworICAgIGVudW0gY2xhc3MgQnJlYWtpbmdCZWhhdmlvciB7IEtl
ZXAsIEJyZWFrLCBXcmFwIH07CisgICAgc3RydWN0IEJyZWFraW5nQ29udGV4dCB7CisgICAgICAg
IEJyZWFraW5nQmVoYXZpb3IgYnJlYWtpbmdCZWhhdmlvcjsKKyAgICAgICAgYm9vbCBpc0F0QnJl
YWtpbmdPcHBvcnR1bml0eSB7IGZhbHNlIH07CisgICAgfTsKKyAgICBzdHJ1Y3QgTGluZUNvbnRl
eHQgeworICAgICAgICBMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoOworICAgICAgICBMYXlvdXRV
bml0IGxvZ2ljYWxMZWZ0OworICAgICAgICBMYXlvdXRVbml0IHRyaW1tYWJsZVdpZHRoOworICAg
ICAgICBib29sIGlzRW1wdHkgeyBmYWxzZSB9OwogICAgIH07Ci0gICAgT3B0aW9uYWw8UnVuPiBu
ZXh0UnVuKExheW91dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0LCBMYXlvdXRVbml0IGF2YWlsYWJs
ZVdpZHRoLCBib29sIGxpbmVJc0VtcHR5KTsKKyAgICBCcmVha2luZ0NvbnRleHQgYnJlYWtpbmdD
b250ZXh0KElubGluZUl0ZW0mLCBjb25zdCBMaW5lQ29udGV4dCk7CiAKIHByaXZhdGU6Ci0gICAg
ZW51bSBjbGFzcyBMaW5lQnJlYWtpbmdCZWhhdmlvciB7IEtlZXAsIEJyZWFrLCBXcmFwVG9OZXh0
TGluZSB9OwotICAgIExpbmVCcmVha2luZ0JlaGF2aW9yIGxpbmVCcmVha2luZ0JlaGF2aW9yKGNv
bnN0IElubGluZVJ1blByb3ZpZGVyOjpSdW4mLCBib29sIGxpbmVJc0VtcHR5KTsKLSAgICBib29s
IGlzQXRDb250ZW50RW5kKCkgY29uc3Q7Ci0gICAgUnVuIHNwbGl0UnVuKGNvbnN0IElubGluZVJ1
blByb3ZpZGVyOjpSdW4mLCBMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsTGVmdCwgTGF5b3V0VW5p
dCBhdmFpbGFibGVXaWR0aCwgYm9vbCBsaW5lSXNFbXB0eSk7Ci0gICAgTGF5b3V0VW5pdCBydW5X
aWR0aChjb25zdCBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuJiwgTGF5b3V0VW5pdCBjb250ZW50TG9n
aWNhbExlZnQpIGNvbnN0OwotICAgIExheW91dFVuaXQgdGV4dFdpZHRoKGNvbnN0IElubGluZVJ1
blByb3ZpZGVyOjpSdW4mLCBMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsTGVmdCkgY29uc3Q7Ci0g
ICAgT3B0aW9uYWw8SXRlbVBvc2l0aW9uPiBhZGp1c3RTcGxpdFBvc2l0aW9uV2l0aEh5cGhlbmF0
aW9uKGNvbnN0IElubGluZVJ1blByb3ZpZGVyOjpSdW4mLCBJdGVtUG9zaXRpb24gc3BsaXRQb3Np
dGlvbiwgTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbExlZnQsIExheW91dFVuaXQgYXZhaWxhYmxl
V2lkdGgsIGJvb2wgaXNMaW5lRW1wdHkpIGNvbnN0OwogCi0gICAgY29uc3QgTGF5b3V0U3RhdGUm
IG1fbGF5b3V0U3RhdGU7Ci0gICAgY29uc3QgSW5saW5lQ29udGVudCYgbV9pbmxpbmVDb250ZW50
OwotICAgIGNvbnN0IFZlY3RvcjxJbmxpbmVSdW5Qcm92aWRlcjo6UnVuPiYgbV9pbmxpbmVSdW5z
OworICAgIEJyZWFraW5nQmVoYXZpb3Igd29yZEJyZWFraW5nQmVoYXZpb3IoY29uc3QgSW5saW5l
VGV4dEl0ZW0mLCBib29sIGxpbmVJc0VtcHR5KSBjb25zdDsKKyAgICBib29sIGlzQXRCcmVha2lu
Z09wcG9ydHVuaXR5KGNvbnN0IElubGluZUl0ZW0mKTsKKyAgICBMYXlvdXRVbml0IHJ1bldpZHRo
KGNvbnN0IElubGluZUl0ZW0mLCBMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsTGVmdCkgY29uc3Q7
CisgICAgTGF5b3V0VW5pdCB0ZXh0V2lkdGgoY29uc3QgSW5saW5lVGV4dEl0ZW0mLCBMYXlvdXRV
bml0IGNvbnRlbnRMb2dpY2FsTGVmdCkgY29uc3Q7CiAKLSAgICB1bnNpZ25lZCBtX2N1cnJlbnRS
dW5JbmRleCB7IDAgfTsKLSAgICBPcHRpb25hbDxJdGVtUG9zaXRpb24+IG1fc3BsaXRQb3NpdGlv
bjsKLSAgICBib29sIG1faHlwaGVuYXRpb25Jc0Rpc2FibGVkIHsgZmFsc2UgfTsKKyAgICBjb25z
dCBMYXlvdXRTdGF0ZSYgbV9sYXlvdXRTdGF0ZTsKKyAgICBib29sIG1faHlwaGVuYXRpb25Jc0Rp
c2FibGVkIHsgdHJ1ZSB9OwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lUnVuLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
aW5saW5lZm9ybWF0dGluZy9JbmxpbmVSdW4uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZDY1NTQ0MTZhYTUxMTUwMjlmNWQ1M2Y2YTA0NzFiZWRkMWVlMTE1ZS4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
aW5saW5lZm9ybWF0dGluZy9JbmxpbmVSdW4uaAorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1B
VFRJTkdfQ09OVEVYVCkKLQotI2luY2x1ZGUgIklubGluZVJ1blByb3ZpZGVyLmgiCi0jaW5jbHVk
ZSAiTGF5b3V0VW5pdC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1uYW1lc3BhY2UgTGF5b3V0
IHsKLQotc3RydWN0IElubGluZVJ1biB7Ci0gICAgSW5saW5lUnVuKERpc3BsYXk6OkJveDo6UmVj
dCBsb2dpY2FsUmVjdCwgY29uc3QgSW5saW5lSXRlbSYpOwotCi0gICAgTGF5b3V0VW5pdCBsb2dp
Y2FsTGVmdCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFJlY3QubGVmdCgpOyB9Ci0gICAgTGF5
b3V0VW5pdCBsb2dpY2FsUmlnaHQoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxSZWN0LnJpZ2h0
KCk7IH0KLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxUb3AoKSBjb25zdCB7IHJldHVybiBtX2xvZ2lj
YWxSZWN0LnRvcCgpOyB9Ci0gICAgTGF5b3V0VW5pdCBsb2dpY2FsQm90dG9tKCkgY29uc3QgeyBy
ZXR1cm4gbV9sb2dpY2FsUmVjdC5ib3R0b20oKTsgfQotCi0gICAgTGF5b3V0VW5pdCBsb2dpY2Fs
V2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxSZWN0LndpZHRoKCk7IH0KLSAgICBMYXlv
dXRVbml0IGxvZ2ljYWxIZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxSZWN0LmhlaWdo
dCgpOyB9Ci0gICAgYm9vbCBvdmVybGFwc011bHRpcGxlSW5saW5lSXRlbXMoKSBjb25zdDsKLQot
ICAgIHZvaWQgc2V0TG9naWNhbFdpZHRoKExheW91dFVuaXQgd2lkdGgpIHsgbV9sb2dpY2FsUmVj
dC5zZXRXaWR0aCh3aWR0aCk7IH0KLSAgICB2b2lkIHNldExvZ2ljYWxMZWZ0KExheW91dFVuaXQg
bG9naWNhbExlZnQpIHsgbV9sb2dpY2FsUmVjdC5zZXRMZWZ0KGxvZ2ljYWxMZWZ0KTsgfQotICAg
IHZvaWQgc2V0TG9naWNhbFJpZ2h0KExheW91dFVuaXQgbG9naWNhbFJpZ2h0KSB7IG1fbG9naWNh
bFJlY3Quc2hpZnRSaWdodFRvKGxvZ2ljYWxSaWdodCk7IH0KLSAgICB2b2lkIG1vdmVWZXJ0aWNh
bGx5KExheW91dFVuaXQgZGVsdGEpIHsgbV9sb2dpY2FsUmVjdC5tb3ZlVmVydGljYWxseShkZWx0
YSk7IH0KLSAgICB2b2lkIG1vdmVIb3Jpem9udGFsbHkoTGF5b3V0VW5pdCBkZWx0YSkgeyBtX2xv
Z2ljYWxSZWN0Lm1vdmVIb3Jpem9udGFsbHkoZGVsdGEpOyB9Ci0KLSAgICBzdHJ1Y3QgRXhwYW5z
aW9uT3Bwb3J0dW5pdHkgewotICAgICAgICB1bnNpZ25lZCBjb3VudCB7IDAgfTsKLSAgICAgICAg
RXhwYW5zaW9uQmVoYXZpb3IgYmVoYXZpb3IgeyBGb3JiaWRMZWFkaW5nRXhwYW5zaW9uIHwgRm9y
YmlkVHJhaWxpbmdFeHBhbnNpb24gfTsKLSAgICAgICAgTGF5b3V0VW5pdCBleHBhbnNpb247Ci0g
ICAgfTsKLSAgICBFeHBhbnNpb25PcHBvcnR1bml0eSYgZXhwYW5zaW9uT3Bwb3J0dW5pdHkoKSB7
IHJldHVybiBtX2V4cGFuc2lvbk9wcG9ydHVuaXR5OyB9Ci0KLSAgICBzdHJ1Y3QgVGV4dENvbnRl
eHQgewotICAgIHB1YmxpYzoKLSAgICAgICAgVGV4dENvbnRleHQoSXRlbVBvc2l0aW9uLCB1bnNp
Z25lZCBsZW5ndGgpOwotCi0gICAgICAgIHZvaWQgc2V0U3RhcnQoSXRlbVBvc2l0aW9uIHN0YXJ0
KSB7IG1fc3RhcnQgPSBzdGFydDsgfQotICAgICAgICB2b2lkIHNldExlbmd0aCh1bnNpZ25lZCBs
ZW5ndGgpIHsgbV9sZW5ndGggPSBsZW5ndGg7IH0KLQotICAgICAgICBJdGVtUG9zaXRpb24gc3Rh
cnQoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0OyB9Ci0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCgp
IGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBJdGVt
UG9zaXRpb24gbV9zdGFydDsKLSAgICAgICAgdW5zaWduZWQgbV9sZW5ndGg7Ci0gICAgfTsKLSAg
ICB2b2lkIHNldFRleHRDb250ZXh0KFRleHRDb250ZXh0IHRleHRDb250ZXh0KSB7IG1fdGV4dENv
bnRleHQuZW1wbGFjZSh0ZXh0Q29udGV4dCk7IH0KLSAgICBPcHRpb25hbDxUZXh0Q29udGV4dD4m
IHRleHRDb250ZXh0KCkgeyByZXR1cm4gbV90ZXh0Q29udGV4dDsgfQotICAgIE9wdGlvbmFsPFRl
eHRDb250ZXh0PiB0ZXh0Q29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dENvbnRleHQ7IH0K
LQotICAgIGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0oKSBjb25zdCB7IHJldHVybiBtX2lu
bGluZUl0ZW07IH0KLQotcHJpdmF0ZToKLSAgICBEaXNwbGF5OjpCb3g6OlJlY3QgbV9sb2dpY2Fs
UmVjdDsKLSAgICBFeHBhbnNpb25PcHBvcnR1bml0eSBtX2V4cGFuc2lvbk9wcG9ydHVuaXR5Owot
Ci0gICAgY29uc3QgSW5saW5lSXRlbSYgbV9pbmxpbmVJdGVtOwotICAgIE9wdGlvbmFsPFRleHRD
b250ZXh0PiBtX3RleHRDb250ZXh0OwotfTsKLQotdXNpbmcgSW5saW5lUnVucyA9IFZlY3RvcjxJ
bmxpbmVSdW4+OwotCi1pbmxpbmUgSW5saW5lUnVuOjpJbmxpbmVSdW4oRGlzcGxheTo6Qm94OjpS
ZWN0IGxvZ2ljYWxSZWN0LCBjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtKQotICAgIDogbV9s
b2dpY2FsUmVjdChsb2dpY2FsUmVjdCkKLSAgICAsIG1faW5saW5lSXRlbShpbmxpbmVJdGVtKQot
ewotfQotCi1pbmxpbmUgSW5saW5lUnVuOjpUZXh0Q29udGV4dDo6VGV4dENvbnRleHQoSXRlbVBv
c2l0aW9uIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgpCi0gICAgOiBtX3N0YXJ0KHN0YXJ0KQotICAg
ICwgbV9sZW5ndGgobGVuZ3RoKQotewotfQotCi1pbmxpbmUgYm9vbCBJbmxpbmVSdW46Om92ZXJs
YXBzTXVsdGlwbGVJbmxpbmVJdGVtcygpIGNvbnN0Ci17Ci0gICAgLy8gT25seSB0ZXh0IGNvbnRl
bnQgY2FuIG92ZXJsYXAgbXVsdGlwbGUgaW5saW5lIGVsZW1lbnRzLgotICAgIGlmICghbV90ZXh0
Q29udGV4dCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBlbmRQb3NpdGlvbiA9
IG1fdGV4dENvbnRleHQtPnN0YXJ0KCkgKyBtX3RleHRDb250ZXh0LT5sZW5ndGgoKTsKLSAgICBy
ZXR1cm4gZW5kUG9zaXRpb24gPiBtX2lubGluZUl0ZW0udGV4dENvbnRlbnQoKS5sZW5ndGgoKTsK
LX0KLQotfQotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5s
aW5lZm9ybWF0dGluZy9JbmxpbmVSdW5Qcm92aWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVSdW5Qcm92aWRlci5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDllYjIwZjBhZmQ3MTJiNTM2MjAxZDA2ZjdjYjQzNzVlOGIxZTRjZDku
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lUnVuUHJvdmlkZXIuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsMTk4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiSW5saW5lUnVuUHJvdmlkZXIuaCIKLQotI2lmIEVOQUJMRShMQVlPVVRf
Rk9STUFUVElOR19DT05URVhUKQotCi0jaW5jbHVkZSAiQnJlYWtMaW5lcy5oIgotI2luY2x1ZGUg
IkxheW91dElubGluZUJveC5oIgotI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLW5hbWVzcGFjZSBMYXlvdXQgewotCi1XVEZfTUFLRV9JU09f
QUxMT0NBVEVEX0lNUEwoSW5saW5lUnVuUHJvdmlkZXIpOwotCi1JbmxpbmVSdW5Qcm92aWRlcjo6
SW5saW5lUnVuUHJvdmlkZXIoKQotewotfQotCi12b2lkIElubGluZVJ1blByb3ZpZGVyOjphcHBl
bmQoY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSkKLXsKLSAgICBzd2l0Y2ggKGlubGluZUl0
ZW0udHlwZSgpKSB7Ci0gICAgY2FzZSBJbmxpbmVJdGVtOjpUeXBlOjpUZXh0OgotICAgICAgICAv
LyBTcGVjaWFsIGNhc2UgdGV4dCBjb250ZW50LiBUaGV5IGNhbiBvdmVybGFwIG11bHRpcGxlIGl0
ZW1zLiA8c3Bhbj5mb288L3NwYW4+PHNwYW4+YmFyPC9zcGFuPgotICAgICAgICBwcm9jZXNzSW5s
aW5lVGV4dEl0ZW0oaW5saW5lSXRlbSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW5saW5l
SXRlbTo6VHlwZTo6SGFyZExpbmVCcmVhazoKLSAgICAgICAgbV9pbmxpbmVSdW5zLmFwcGVuZChJ
bmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpjcmVhdGVIYXJkTGluZUJyZWFrUnVuKGlubGluZUl0ZW0p
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbmxpbmVJdGVtOjpUeXBlOjpJbmxpbmVCb3g6
Ci0gICAgICAgIG1faW5saW5lUnVucy5hcHBlbmQoSW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6Y3Jl
YXRlQm94UnVuKGlubGluZUl0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbmxpbmVJ
dGVtOjpUeXBlOjpGbG9hdDoKLSAgICAgICAgbV9pbmxpbmVSdW5zLmFwcGVuZChJbmxpbmVSdW5Q
cm92aWRlcjo6UnVuOjpjcmVhdGVGbG9hdFJ1bihpbmxpbmVJdGVtKSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7Ci0g
ICAgfQotfQotCi12b2lkIElubGluZVJ1blByb3ZpZGVyOjppbnNlcnRCZWZvcmUoY29uc3QgQm94
JiwgY29uc3QgQm94JikKLXsKLX0KLQotdm9pZCBJbmxpbmVSdW5Qcm92aWRlcjo6cmVtb3ZlKGNv
bnN0IEJveCYpCi17Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1doaXRlc3BhY2UoY2hhciBj
aGFyYWN0ZXIsIGJvb2wgcHJlc2VydmVOZXdsaW5lKQotewotICAgIHJldHVybiBjaGFyYWN0ZXIg
PT0gJyAnIHx8IGNoYXJhY3RlciA9PSAnXHQnIHx8IChjaGFyYWN0ZXIgPT0gJ1xuJyAmJiAhcHJl
c2VydmVOZXdsaW5lKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGlzU29mdExpbmVCcmVhayhj
aGFyIGNoYXJhY3RlciwgYm9vbCBwcmVzZXJ2ZU5ld2xpbmUpCi17Ci0gICAgcmV0dXJuIHByZXNl
cnZlTmV3bGluZSAmJiBjaGFyYWN0ZXIgPT0gJ1xuJzsKLX0KLQotYm9vbCBJbmxpbmVSdW5Qcm92
aWRlcjo6aXNDb250aW5vdXNDb250ZW50KElubGluZVJ1blByb3ZpZGVyOjpSdW46OlR5cGUgbmV3
UnVuVHlwZSwgY29uc3QgSW5saW5lSXRlbSYgbmV3SW5saW5lSXRlbSkKLXsKLSAgICBpZiAobV9p
bmxpbmVSdW5zLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byYg
bGFzdFJ1biA9IG1faW5saW5lUnVucy5sYXN0KCk7Ci0gICAgLy8gU2FtZSBlbGVtZW50LCBjaGVj
ayB0eXBlIG9ubHkuCi0gICAgaWYgKCZuZXdJbmxpbmVJdGVtID09ICZsYXN0UnVuLmlubGluZUl0
ZW0oKSkKLSAgICAgICAgcmV0dXJuIG5ld1J1blR5cGUgPT0gbGFzdFJ1bi50eXBlKCk7Ci0KLSAg
ICAvLyBUaGlzIG5ldyBydW4gaXMgZnJvbSBhIGRpZmZlcmVudCBpbmxpbmUgYm94LgotICAgIC8v
IEZJWE1FOiBjaGVjayBzdHlsZS4KLSAgICBpZiAobmV3UnVuVHlwZSA9PSBJbmxpbmVSdW5Qcm92
aWRlcjo6UnVuOjpUeXBlOjpOb25XaGl0ZXNwYWNlICYmIGxhc3RSdW4uaXNOb25XaGl0ZXNwYWNl
KCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKG5ld1J1blR5cGUgPT0gSW5saW5l
UnVuUHJvdmlkZXI6OlJ1bjo6VHlwZTo6V2hpdGVzcGFjZSAmJiBsYXN0UnVuLmlzV2hpdGVzcGFj
ZSgpKQotICAgICAgICByZXR1cm4gbmV3SW5saW5lSXRlbS5zdHlsZSgpLmNvbGxhcHNlV2hpdGVT
cGFjZSgpID09IGxhc3RSdW4uc3R5bGUoKS5jb2xsYXBzZVdoaXRlU3BhY2UoKTsKLQotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotdm9pZCBJbmxpbmVSdW5Qcm92aWRlcjo6cHJvY2Vzc0lubGluZVRl
eHRJdGVtKGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0pCi17Ci0gICAgLy8gV2UgbmVlZCB0
byByZXNldCB0aGUgcnVuIGl0ZXJhdG9yIHdoZW4gdGhlIHRleHQgY29udGVudCBpcyBub3QgY29u
dGludW91cy4KLSAgICAvLyA8c3Bhbj5mb288L3NwYW4+PGltZyBzcmM9IiI+PHNwYW4+YmFyPC9z
cGFuPiAoRklYTUU6IGZsb2F0cz8pCi0gICAgaWYgKCFtX2lubGluZVJ1bnMuaXNFbXB0eSgpICYm
ICFtX2lubGluZVJ1bnMubGFzdCgpLmlzVGV4dCgpKSB7Ci0gICAgICAgIG1fbGluZUJyZWFrSXRl
cmF0b3IucmVzZXRQcmlvckNvbnRleHQoKTsKLSAgICAgICAgbV9saW5lQnJlYWtJdGVyYXRvci5y
ZXNldFN0cmluZ0FuZFJlbGVhc2VJdGVyYXRvcigiIiwgIiIsIExpbmVCcmVha0l0ZXJhdG9yTW9k
ZTo6RGVmYXVsdCk7Ci0gICAgfQotCi0gICAgYXV0byYgc3R5bGUgPSBpbmxpbmVJdGVtLnN0eWxl
KCk7Ci0gICAgYXV0byB0ZXh0ID0gaW5saW5lSXRlbS50ZXh0Q29udGVudCgpOwotICAgIEl0ZW1Q
b3NpdGlvbiBjdXJyZW50SXRlbVBvc2l0aW9uID0gMDsKLSAgICB3aGlsZSAoY3VycmVudEl0ZW1Q
b3NpdGlvbiA8IHRleHQubGVuZ3RoKCkpIHsKLQotICAgICAgICAvLyBTb2Z0IGxpbmVicmVhaz8K
LSAgICAgICAgaWYgKGlzU29mdExpbmVCcmVhayh0ZXh0W2N1cnJlbnRJdGVtUG9zaXRpb25dLCBz
dHlsZS5wcmVzZXJ2ZU5ld2xpbmUoKSkpIHsKLSAgICAgICAgICAgIG1faW5saW5lUnVucy5hcHBl
bmQoSW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6Y3JlYXRlU29mdExpbmVCcmVha1J1bihpbmxpbmVJ
dGVtKSk7Ci0gICAgICAgICAgICArK2N1cnJlbnRJdGVtUG9zaXRpb247Ci0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGF1dG8gaXNXaGl0ZXNwYWNlUnVuID0gaXNX
aGl0ZXNwYWNlKHRleHRbY3VycmVudEl0ZW1Qb3NpdGlvbl0sIHN0eWxlLnByZXNlcnZlTmV3bGlu
ZSgpKTsKLSAgICAgICAgYXV0byBsZW5ndGggPSBpc1doaXRlc3BhY2VSdW4gPyBtb3ZlVG9OZXh0
Tm9uV2hpdGVzcGFjZVBvc2l0aW9uKGlubGluZUl0ZW0sIGN1cnJlbnRJdGVtUG9zaXRpb24pIDog
bW92ZVRvTmV4dEJyZWFrYWJsZVBvc2l0aW9uKGlubGluZUl0ZW0sIGN1cnJlbnRJdGVtUG9zaXRp
b24pOwotCi0gICAgICAgIGlmIChpc0NvbnRpbm91c0NvbnRlbnQoaXNXaGl0ZXNwYWNlUnVuID8g
SW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6VHlwZTo6V2hpdGVzcGFjZSA6IElubGluZVJ1blByb3Zp
ZGVyOjpSdW46OlR5cGU6Ok5vbldoaXRlc3BhY2UsIGlubGluZUl0ZW0pKQotICAgICAgICAgICAg
bV9pbmxpbmVSdW5zLmxhc3QoKS50ZXh0Q29udGV4dCgpLT5leHBhbmQobGVuZ3RoKTsKLSAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICBtX2lubGluZVJ1bnMuYXBwZW5kKGlzV2hpdGVzcGFjZVJ1
biA/IElubGluZVJ1blByb3ZpZGVyOjpSdW46OmNyZWF0ZVdoaXRlc3BhY2VSdW4oaW5saW5lSXRl
bSwgY3VycmVudEl0ZW1Qb3NpdGlvbiwgbGVuZ3RoLCBzdHlsZS5jb2xsYXBzZVdoaXRlU3BhY2Uo
KSkKLSAgICAgICAgICAgICAgICA6IElubGluZVJ1blByb3ZpZGVyOjpSdW46OmNyZWF0ZU5vbldo
aXRlc3BhY2VSdW4oaW5saW5lSXRlbSwgY3VycmVudEl0ZW1Qb3NpdGlvbiwgbGVuZ3RoKSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBjdXJyZW50SXRlbVBvc2l0aW9uICs9IGxlbmd0aDsKLSAgICB9
Ci19Ci0KLXVuc2lnbmVkIElubGluZVJ1blByb3ZpZGVyOjptb3ZlVG9OZXh0Tm9uV2hpdGVzcGFj
ZVBvc2l0aW9uKGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0sIEl0ZW1Qb3NpdGlvbiBjdXJy
ZW50SXRlbVBvc2l0aW9uKQotewotICAgIGF1dG8gdGV4dCA9IGlubGluZUl0ZW0udGV4dENvbnRl
bnQoKTsKLSAgICBhdXRvIHByZXNlcnZlTmV3bGluZSA9IGlubGluZUl0ZW0uc3R5bGUoKS5wcmVz
ZXJ2ZU5ld2xpbmUoKTsKLSAgICBhdXRvIG5leHROb25XaGl0ZVNwYWNlUG9zaXRpb24gPSBjdXJy
ZW50SXRlbVBvc2l0aW9uOwotCi0gICAgd2hpbGUgKG5leHROb25XaGl0ZVNwYWNlUG9zaXRpb24g
PCB0ZXh0Lmxlbmd0aCgpICYmIGlzV2hpdGVzcGFjZSh0ZXh0W25leHROb25XaGl0ZVNwYWNlUG9z
aXRpb25dLCBwcmVzZXJ2ZU5ld2xpbmUpKQotICAgICAgICArK25leHROb25XaGl0ZVNwYWNlUG9z
aXRpb247Ci0gICAgcmV0dXJuIG5leHROb25XaGl0ZVNwYWNlUG9zaXRpb24gLSBjdXJyZW50SXRl
bVBvc2l0aW9uOwotfQotCi11bnNpZ25lZCBJbmxpbmVSdW5Qcm92aWRlcjo6bW92ZVRvTmV4dEJy
ZWFrYWJsZVBvc2l0aW9uKGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0sIEl0ZW1Qb3NpdGlv
biBjdXJyZW50SXRlbVBvc2l0aW9uKQotewotICAgIGF1dG8gZmluZE5leHRCcmVha2FibGVQb3Np
dGlvbiA9IFsmXShhdXRvIGlubGluZVRleHQsIGF1dG8mIHN0eWxlLCBJdGVtUG9zaXRpb24gc3Rh
cnRQb3NpdGlvbikgewotICAgICAgICAvLyBTd2FwIGl0ZXJhdG9yJ3MgY29udGVudCBpZiB3ZSBh
ZHZhbmNlZCB0byBhIG5ldyBzdHJpbmcuCi0gICAgICAgIGF1dG8gaXRlcmF0b3JUZXh0ID0gbV9s
aW5lQnJlYWtJdGVyYXRvci5zdHJpbmdWaWV3KCk7Ci0KLSAgICAgICAgaWYgKGl0ZXJhdG9yVGV4
dCAhPSBpbmxpbmVUZXh0KSB7Ci0gICAgICAgICAgICBhdXRvIHRleHRMZW5ndGggPSBpdGVyYXRv
clRleHQubGVuZ3RoKCk7Ci0gICAgICAgICAgICBhdXRvIGxhc3RDaGFyYWN0ZXIgPSB0ZXh0TGVu
Z3RoID4gMCA/IGl0ZXJhdG9yVGV4dFt0ZXh0TGVuZ3RoIC0gMV0gOiAwOwotICAgICAgICAgICAg
YXV0byBzZWNvbmRUb0xhc3RDaGFyYWN0ZXIgPSB0ZXh0TGVuZ3RoID4gMSA/IGl0ZXJhdG9yVGV4
dFt0ZXh0TGVuZ3RoIC0gMl0gOiAwOwotICAgICAgICAgICAgbV9saW5lQnJlYWtJdGVyYXRvci5z
ZXRQcmlvckNvbnRleHQobGFzdENoYXJhY3Rlciwgc2Vjb25kVG9MYXN0Q2hhcmFjdGVyKTsKLSAg
ICAgICAgICAgIG1fbGluZUJyZWFrSXRlcmF0b3IucmVzZXRTdHJpbmdBbmRSZWxlYXNlSXRlcmF0
b3IoaW5saW5lVGV4dCwgc3R5bGUubG9jYWxlKCksIExpbmVCcmVha0l0ZXJhdG9yTW9kZTo6RGVm
YXVsdCk7Ci0gICAgICAgIH0KLQotICAgICAgICBhdXRvIGtlZXBBbGxXb3Jkc0ZvckNKSyA9IHN0
eWxlLndvcmRCcmVhaygpID09IFdvcmRCcmVhazo6S2VlcEFsbDsKLSAgICAgICAgYXV0byBicmVh
a05CU1AgPSBzdHlsZS5hdXRvV3JhcCgpICYmIHN0eWxlLm5ic3BNb2RlKCkgPT0gTkJTUE1vZGU6
OlNwYWNlOwotCi0gICAgICAgIGlmIChrZWVwQWxsV29yZHNGb3JDSkspIHsKLSAgICAgICAgICAg
IGlmIChicmVha05CU1ApCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5leHRCcmVha2FibGVQb3Np
dGlvbktlZXBpbmdBbGxXb3JkcyhtX2xpbmVCcmVha0l0ZXJhdG9yLCBzdGFydFBvc2l0aW9uKTsK
LSAgICAgICAgICAgIHJldHVybiBuZXh0QnJlYWthYmxlUG9zaXRpb25LZWVwaW5nQWxsV29yZHNJ
Z25vcmluZ05CU1AobV9saW5lQnJlYWtJdGVyYXRvciwgc3RhcnRQb3NpdGlvbik7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAobV9saW5lQnJlYWtJdGVyYXRvci5tb2RlKCkgPT0gTGluZUJyZWFr
SXRlcmF0b3JNb2RlOjpEZWZhdWx0KSB7Ci0gICAgICAgICAgICBpZiAoYnJlYWtOQlNQKQotICAg
ICAgICAgICAgICAgIHJldHVybiBXZWJDb3JlOjpuZXh0QnJlYWthYmxlUG9zaXRpb24obV9saW5l
QnJlYWtJdGVyYXRvciwgc3RhcnRQb3NpdGlvbik7Ci0gICAgICAgICAgICByZXR1cm4gbmV4dEJy
ZWFrYWJsZVBvc2l0aW9uSWdub3JpbmdOQlNQKG1fbGluZUJyZWFrSXRlcmF0b3IsIHN0YXJ0UG9z
aXRpb24pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGJyZWFrTkJTUCkKLSAgICAgICAgICAg
IHJldHVybiBuZXh0QnJlYWthYmxlUG9zaXRpb25XaXRob3V0U2hvcnRjdXQobV9saW5lQnJlYWtJ
dGVyYXRvciwgc3RhcnRQb3NpdGlvbik7Ci0gICAgICAgIHJldHVybiBuZXh0QnJlYWthYmxlUG9z
aXRpb25JZ25vcmluZ05CU1BXaXRob3V0U2hvcnRjdXQobV9saW5lQnJlYWtJdGVyYXRvciwgc3Rh
cnRQb3NpdGlvbik7Ci0gICAgfTsKLQotICAgIGF1dG8mIHN0eWxlID0gaW5saW5lSXRlbS5zdHls
ZSgpOwotICAgIGF1dG8gdGV4dExlbmd0aCA9IGlubGluZUl0ZW0udGV4dENvbnRlbnQoKS5sZW5n
dGgoKTsKLSAgICBBU1NFUlQodGV4dExlbmd0aCk7Ci0gICAgd2hpbGUgKGN1cnJlbnRJdGVtUG9z
aXRpb24gPCB0ZXh0TGVuZ3RoIC0gMSkgewotICAgICAgICBhdXRvIG5leHRCcmVha2FibGVQb3Np
dGlvbiA9IGZpbmROZXh0QnJlYWthYmxlUG9zaXRpb24oaW5saW5lSXRlbS50ZXh0Q29udGVudCgp
LCBzdHlsZSwgY3VycmVudEl0ZW1Qb3NpdGlvbik7Ci0gICAgICAgIGlmIChuZXh0QnJlYWthYmxl
UG9zaXRpb24gIT0gY3VycmVudEl0ZW1Qb3NpdGlvbikKLSAgICAgICAgICAgIHJldHVybiBuZXh0
QnJlYWthYmxlUG9zaXRpb24gLSBjdXJyZW50SXRlbVBvc2l0aW9uOwotICAgICAgICArK2N1cnJl
bnRJdGVtUG9zaXRpb247Ci0gICAgfQotICAgIHJldHVybiB0ZXh0TGVuZ3RoOwotfQotCi19Ci19
Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0
aW5nL0lubGluZVJ1blByb3ZpZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9y
bWF0dGluZy9JbmxpbmVSdW5Qcm92aWRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBkNzdjMTQ4ZWVlZTBjYWRhMjQ1NjYxZWZlYjhmYzU2N2RlZWQ4NjA4Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9p
bmxpbmVmb3JtYXR0aW5nL0lubGluZVJ1blByb3ZpZGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwx
NjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKExBWU9V
VF9GT1JNQVRUSU5HX0NPTlRFWFQpCi0KLSNpbmNsdWRlICJJbmxpbmVJdGVtLmgiCi0jaW5jbHVk
ZSA8d3RmL0lzb01hbGxvYy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRCcmVha0l0ZXJhdG9y
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLW5hbWVzcGFjZSBMYXlvdXQgewotCi11c2luZyBJ
dGVtUG9zaXRpb24gPSB1bnNpZ25lZDsKLQotY2xhc3MgSW5saW5lUnVuUHJvdmlkZXIgewotICAg
IFdURl9NQUtFX0lTT19BTExPQ0FURUQoSW5saW5lUnVuUHJvdmlkZXIpOwotcHVibGljOgotICAg
IElubGluZVJ1blByb3ZpZGVyKCk7Ci0KLSAgICB2b2lkIGFwcGVuZChjb25zdCBJbmxpbmVJdGVt
Jik7Ci0gICAgdm9pZCBpbnNlcnRCZWZvcmUoY29uc3QgQm94JiwgY29uc3QgQm94JiBiZWZvcmUp
OwotICAgIHZvaWQgcmVtb3ZlKGNvbnN0IEJveCYpOwotCi0gICAgc3RydWN0IFJ1biB7Ci0KLSAg
ICAgICAgc3RhdGljIFJ1biBjcmVhdGVCb3hSdW4oY29uc3QgSW5saW5lSXRlbSYpOwotICAgICAg
ICBzdGF0aWMgUnVuIGNyZWF0ZUZsb2F0UnVuKGNvbnN0IElubGluZUl0ZW0mKTsKLSAgICAgICAg
c3RhdGljIFJ1biBjcmVhdGVIYXJkTGluZUJyZWFrUnVuKGNvbnN0IElubGluZUl0ZW0mKTsKLSAg
ICAgICAgc3RhdGljIFJ1biBjcmVhdGVTb2Z0TGluZUJyZWFrUnVuKGNvbnN0IElubGluZUl0ZW0m
KTsKLSAgICAgICAgc3RhdGljIFJ1biBjcmVhdGVXaGl0ZXNwYWNlUnVuKGNvbnN0IElubGluZUl0
ZW0mLCBJdGVtUG9zaXRpb24gc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwgYm9vbCBpc0NvbGxhcHNp
YmxlKTsKLSAgICAgICAgc3RhdGljIFJ1biBjcmVhdGVOb25XaGl0ZXNwYWNlUnVuKGNvbnN0IElu
bGluZUl0ZW0mLCBJdGVtUG9zaXRpb24gc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICAg
ICAgZW51bSBjbGFzcyBUeXBlIHsKLSAgICAgICAgICAgIEJveCwKLSAgICAgICAgICAgIEZsb2F0
LAotICAgICAgICAgICAgU29mdExpbmVCcmVhaywKLSAgICAgICAgICAgIEhhcmRMaW5lQnJlYWss
Ci0gICAgICAgICAgICBXaGl0ZXNwYWNlLAotICAgICAgICAgICAgTm9uV2hpdGVzcGFjZQotICAg
ICAgICB9OwotICAgICAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KLSAg
ICAgICAgYm9vbCBpc1RleHQoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gUnVuOjpUeXBlOjpX
aGl0ZXNwYWNlIHx8IG1fdHlwZSA9PSBSdW46OlR5cGU6Ok5vbldoaXRlc3BhY2UgfHwgbV90eXBl
ID09IFJ1bjo6VHlwZTo6U29mdExpbmVCcmVhayB8fCBtX3R5cGUgPT0gUnVuOjpUeXBlOjpIYXJk
TGluZUJyZWFrOyB9Ci0gICAgICAgIGJvb2wgaXNXaGl0ZXNwYWNlKCkgY29uc3QgeyByZXR1cm4g
bV90eXBlID09IFR5cGU6OldoaXRlc3BhY2U7IH0KLSAgICAgICAgYm9vbCBpc05vbldoaXRlc3Bh
Y2UoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gVHlwZTo6Tm9uV2hpdGVzcGFjZTsgfQotICAg
ICAgICBib29sIGlzTGluZUJyZWFrKCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IFJ1bjo6VHlw
ZTo6U29mdExpbmVCcmVhayB8fCBtX3R5cGUgPT0gUnVuOjpUeXBlOjpIYXJkTGluZUJyZWFrOyB9
Ci0gICAgICAgIGJvb2wgaXNCb3goKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gVHlwZTo6Qm94
OyB9Ci0gICAgICAgIGJvb2wgaXNGbG9hdCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBUeXBl
OjpGbG9hdDsgfQotCi0gICAgICAgIHN0cnVjdCBUZXh0Q29udGV4dCB7Ci0KLSAgICAgICAgICAg
IGVudW0gY2xhc3MgSXNDb2xsYXBzZWQgeyBObywgWWVzIH07Ci0gICAgICAgICAgICBUZXh0Q29u
dGV4dChJdGVtUG9zaXRpb24sIHVuc2lnbmVkIGxlbmd0aCwgSXNDb2xsYXBzZWQpOwotCi0gICAg
ICAgICAgICBJdGVtUG9zaXRpb24gc3RhcnQoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0OyB9Ci0g
ICAgICAgICAgICAvLyBOb3RlIHRoYXQgJ2VuZCcgcG9zaXRpb24gZG9lcyBub3QgZXF1YWwgdG8g
c3RhcnQgKyBsZW5ndGggd2hlbiBydW4gb3ZlcmxhcHMgbXVsdGlwbGUgSW5saW5lSXRlbXMuCi0g
ICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQot
ICAgICAgICAgICAgYm9vbCBpc0NvbGxhcHNlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNDb2xsYXBz
ZWQgPT0gSXNDb2xsYXBzZWQ6OlllczsgfQotCi0gICAgICAgIHByaXZhdGU6Ci0gICAgICAgICAg
ICBmcmllbmQgY2xhc3MgSW5saW5lUnVuUHJvdmlkZXI7Ci0KLSAgICAgICAgICAgIHZvaWQgZXhw
YW5kKHVuc2lnbmVkIGxlbmd0aCkgeyBtX2xlbmd0aCArPSBsZW5ndGg7IH0KLQotICAgICAgICAg
ICAgSXRlbVBvc2l0aW9uIG1fc3RhcnQgeyAwIH07Ci0gICAgICAgICAgICB1bnNpZ25lZCBtX2xl
bmd0aCB7IDAgfTsKLSAgICAgICAgICAgIElzQ29sbGFwc2VkIG1faXNDb2xsYXBzZWQgeyBJc0Nv
bGxhcHNlZDo6Tm8gfTsKLSAgICAgICAgfTsKLSAgICAgICAgT3B0aW9uYWw8VGV4dENvbnRleHQ+
IHRleHRDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV90ZXh0Q29udGV4dDsgfQotICAgICAgICAv
LyBOb3RlIHRoYXQgc3R5bGUoKSBhbmQgaW5saW5lSXRlbSgpIGFsd2F5cyByZXR1cm5zIHRoZSBm
aXJzdCBJbmxpbmVJdGVtIGZvciBhIHJ1bi4KLSAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0
eWxlKCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVJdGVtLnN0eWxlKCk7IH0KLSAgICAgICAgY29u
c3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSgpIGNvbnN0IHsgcmV0dXJuIG1faW5saW5lSXRlbTsg
fQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgZnJpZW5kIGNsYXNzIElubGluZVJ1blByb3ZpZGVy
OwotCi0gICAgICAgIFJ1bihjb25zdCBJbmxpbmVJdGVtJiwgVHlwZSwgT3B0aW9uYWw8VGV4dENv
bnRleHQ+KTsKLSAgICAgICAgT3B0aW9uYWw8VGV4dENvbnRleHQ+JiB0ZXh0Q29udGV4dCgpIHsg
cmV0dXJuIG1fdGV4dENvbnRleHQ7IH0KLQotICAgICAgICBjb25zdCBUeXBlIG1fdHlwZTsKLSAg
ICAgICAgY29uc3QgSW5saW5lSXRlbSYgbV9pbmxpbmVJdGVtOwotICAgICAgICBPcHRpb25hbDxU
ZXh0Q29udGV4dD4gbV90ZXh0Q29udGV4dDsKLSAgICB9OwotICAgIGNvbnN0IFZlY3RvcjxJbmxp
bmVSdW5Qcm92aWRlcjo6UnVuPiYgcnVucygpIGNvbnN0IHsgcmV0dXJuIG1faW5saW5lUnVuczsg
fQotCi1wcml2YXRlOgotICAgIHZvaWQgY29tbWl0VGV4dFJ1bigpOwotICAgIHZvaWQgcHJvY2Vz
c0lubGluZVRleHRJdGVtKGNvbnN0IElubGluZUl0ZW0mKTsKLSAgICB1bnNpZ25lZCBtb3ZlVG9O
ZXh0Tm9uV2hpdGVzcGFjZVBvc2l0aW9uKGNvbnN0IElubGluZUl0ZW0mLCBJdGVtUG9zaXRpb24g
Y3VycmVudFBvc2l0aW9uKTsKLSAgICB1bnNpZ25lZCBtb3ZlVG9OZXh0QnJlYWthYmxlUG9zaXRp
b24oY29uc3QgSW5saW5lSXRlbSYsIEl0ZW1Qb3NpdGlvbiBjdXJyZW50UG9zaXRpb24pOwotICAg
IGJvb2wgaXNDb250aW5vdXNDb250ZW50KFJ1bjo6VHlwZSBuZXdSdW5UeXBlLCBjb25zdCBJbmxp
bmVJdGVtJiBuZXdJbmxpbmVJdGVtKTsKLQotICAgIExhenlMaW5lQnJlYWtJdGVyYXRvciBtX2xp
bmVCcmVha0l0ZXJhdG9yOwotCi0gICAgVmVjdG9yPElubGluZVJ1blByb3ZpZGVyOjpSdW4+IG1f
aW5saW5lUnVuczsKLX07Ci0KLWlubGluZSBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuIElubGluZVJ1
blByb3ZpZGVyOjpSdW46OmNyZWF0ZUJveFJ1bihjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVt
KQotewotICAgIHJldHVybiB7IGlubGluZUl0ZW0sIFR5cGU6OkJveCwgV1RGOjpudWxsb3B0IH07
Ci19Ci0KLWlubGluZSBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuIElubGluZVJ1blByb3ZpZGVyOjpS
dW46OmNyZWF0ZUZsb2F0UnVuKGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0pCi17Ci0gICAg
cmV0dXJuIHsgaW5saW5lSXRlbSwgVHlwZTo6RmxvYXQsIFdURjo6bnVsbG9wdCB9OwotfQotCi1p
bmxpbmUgSW5saW5lUnVuUHJvdmlkZXI6OlJ1biBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpjcmVh
dGVTb2Z0TGluZUJyZWFrUnVuKGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0pCi17Ci0gICAg
cmV0dXJuIHsgaW5saW5lSXRlbSwgVHlwZTo6U29mdExpbmVCcmVhaywgV1RGOjpudWxsb3B0IH07
Ci19Ci0KLWlubGluZSBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuIElubGluZVJ1blByb3ZpZGVyOjpS
dW46OmNyZWF0ZUhhcmRMaW5lQnJlYWtSdW4oY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSkK
LXsKLSAgICByZXR1cm4geyBpbmxpbmVJdGVtLCBUeXBlOjpIYXJkTGluZUJyZWFrLCBXVEY6Om51
bGxvcHQgfTsKLX0KLQotaW5saW5lIElubGluZVJ1blByb3ZpZGVyOjpSdW4gSW5saW5lUnVuUHJv
dmlkZXI6OlJ1bjo6Y3JlYXRlV2hpdGVzcGFjZVJ1bihjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJ
dGVtLCBJdGVtUG9zaXRpb24gc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwgYm9vbCBpc0NvbGxhcHNp
YmxlKQotewotICAgIEFTU0VSVChsZW5ndGgpOwotICAgIGF1dG8gaXNDb2xsYXBzZWQgPSBpc0Nv
bGxhcHNpYmxlICYmIGxlbmd0aCA+IDEgPyBUZXh0Q29udGV4dDo6SXNDb2xsYXBzZWQ6OlllcyA6
IFRleHRDb250ZXh0OjpJc0NvbGxhcHNlZDo6Tm87Ci0gICAgcmV0dXJuIHsgaW5saW5lSXRlbSwg
VHlwZTo6V2hpdGVzcGFjZSwgVGV4dENvbnRleHQoc3RhcnQsIGxlbmd0aCwgaXNDb2xsYXBzZWQp
IH07Ci19Ci0KLWlubGluZSBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuIElubGluZVJ1blByb3ZpZGVy
OjpSdW46OmNyZWF0ZU5vbldoaXRlc3BhY2VSdW4oY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRl
bSwgSXRlbVBvc2l0aW9uIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIHsg
aW5saW5lSXRlbSwgVHlwZTo6Tm9uV2hpdGVzcGFjZSwgVGV4dENvbnRleHQoc3RhcnQsIGxlbmd0
aCwgVGV4dENvbnRleHQ6OklzQ29sbGFwc2VkOjpObykgfTsKLX0KLQotaW5saW5lIElubGluZVJ1
blByb3ZpZGVyOjpSdW46OlJ1bihjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtLCBUeXBlIHR5
cGUsIE9wdGlvbmFsPFRleHRDb250ZXh0PiB0ZXh0Q29udGV4dCkKLSAgICA6IG1fdHlwZSh0eXBl
KQotICAgICwgbV9pbmxpbmVJdGVtKGlubGluZUl0ZW0pCi0gICAgLCBtX3RleHRDb250ZXh0KHRl
eHRDb250ZXh0KQotewotfQotCi1pbmxpbmUgSW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6VGV4dENv
bnRleHQ6OlRleHRDb250ZXh0KEl0ZW1Qb3NpdGlvbiBzdGFydCwgdW5zaWduZWQgbGVuZ3RoLCBJ
c0NvbGxhcHNlZCBpc0NvbGxhcHNlZCkKLSAgICA6IG1fc3RhcnQoc3RhcnQpCi0gICAgLCBtX2xl
bmd0aChsZW5ndGgpCi0gICAgLCBtX2lzQ29sbGFwc2VkKGlzQ29sbGFwc2VkKQotewotfQotCi19
Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3Jt
YXR0aW5nL0lubGluZVRleHRJdGVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVm
b3JtYXR0aW5nL0lubGluZVRleHRJdGVtLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZjU0MjQ2NGZkYmJmNDZm
NDE4YjAxMWNhMDQ4M2E1ZTdiOTJkMThjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lVGV4dEl0ZW0uY3BwCkBAIC0wLDAgKzEs
MTMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklubGlu
ZVRleHRJdGVtLmgiCisKKyNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKKwor
I2luY2x1ZGUgIkJyZWFrTGluZXMuaCIKKyNpbmNsdWRlICJMYXlvdXRJbmxpbmVCb3guaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIExheW91dCB7CisKK3N0YXRpYyBpbmxpbmUg
Ym9vbCBpc1doaXRlc3BhY2VDaGFyYWN0ZXIoY2hhciBjaGFyYWN0ZXIsIGJvb2wgcHJlc2VydmVO
ZXdsaW5lKQoreworICAgIHJldHVybiBjaGFyYWN0ZXIgPT0gJyAnIHx8IGNoYXJhY3RlciA9PSAn
XHQnIHx8IChjaGFyYWN0ZXIgPT0gJ1xuJyAmJiAhcHJlc2VydmVOZXdsaW5lKTsKK30KKworc3Rh
dGljIGlubGluZSBib29sIGlzU29mdExpbmVCcmVhayhjaGFyIGNoYXJhY3RlciwgYm9vbCBwcmVz
ZXJ2ZU5ld2xpbmUpCit7CisgICAgcmV0dXJuIHByZXNlcnZlTmV3bGluZSAmJiBjaGFyYWN0ZXIg
PT0gJ1xuJzsKK30KKworc3RhdGljIHVuc2lnbmVkIG1vdmVUb05leHROb25XaGl0ZXNwYWNlUG9z
aXRpb24oU3RyaW5nIHRleHRDb250ZW50LCB1bnNpZ25lZCBzdGFydFBvc2l0aW9uLCBib29sIHBy
ZXNlcnZlTmV3bGluZSkKK3sKKyAgICBhdXRvIG5leHROb25XaGl0ZVNwYWNlUG9zaXRpb24gPSBz
dGFydFBvc2l0aW9uOworICAgIHdoaWxlIChuZXh0Tm9uV2hpdGVTcGFjZVBvc2l0aW9uIDwgdGV4
dENvbnRlbnQubGVuZ3RoKCkgJiYgaXNXaGl0ZXNwYWNlQ2hhcmFjdGVyKHRleHRDb250ZW50W25l
eHROb25XaGl0ZVNwYWNlUG9zaXRpb25dLCBwcmVzZXJ2ZU5ld2xpbmUpKQorICAgICAgICArK25l
eHROb25XaGl0ZVNwYWNlUG9zaXRpb247CisgICAgcmV0dXJuIG5leHROb25XaGl0ZVNwYWNlUG9z
aXRpb24gLSBzdGFydFBvc2l0aW9uOworfQorCitzdGF0aWMgdW5zaWduZWQgbW92ZVRvTmV4dEJy
ZWFrYWJsZVBvc2l0aW9uKHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24sIExhenlMaW5lQnJlYWtJdGVy
YXRvciBsaW5lQnJlYWtJdGVyYXRvciwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQoreworICAg
IGF1dG8gZmluZE5leHRCcmVha2FibGVQb3NpdGlvbiA9IFsmXShhdXRvIHN0YXJ0UG9zaXRpb24p
IHsKKyAgICAgICAgYXV0byBrZWVwQWxsV29yZHNGb3JDSksgPSBzdHlsZS53b3JkQnJlYWsoKSA9
PSBXb3JkQnJlYWs6OktlZXBBbGw7CisgICAgICAgIGF1dG8gYnJlYWtOQlNQID0gc3R5bGUuYXV0
b1dyYXAoKSAmJiBzdHlsZS5uYnNwTW9kZSgpID09IE5CU1BNb2RlOjpTcGFjZTsKKworICAgICAg
ICBpZiAoa2VlcEFsbFdvcmRzRm9yQ0pLKSB7CisgICAgICAgICAgICBpZiAoYnJlYWtOQlNQKQor
ICAgICAgICAgICAgICAgIHJldHVybiBuZXh0QnJlYWthYmxlUG9zaXRpb25LZWVwaW5nQWxsV29y
ZHMobGluZUJyZWFrSXRlcmF0b3IsIHN0YXJ0UG9zaXRpb24pOworICAgICAgICAgICAgcmV0dXJu
IG5leHRCcmVha2FibGVQb3NpdGlvbktlZXBpbmdBbGxXb3Jkc0lnbm9yaW5nTkJTUChsaW5lQnJl
YWtJdGVyYXRvciwgc3RhcnRQb3NpdGlvbik7CisgICAgICAgIH0KKworICAgICAgICBpZiAobGlu
ZUJyZWFrSXRlcmF0b3IubW9kZSgpID09IExpbmVCcmVha0l0ZXJhdG9yTW9kZTo6RGVmYXVsdCkg
eworICAgICAgICAgICAgaWYgKGJyZWFrTkJTUCkKKyAgICAgICAgICAgICAgICByZXR1cm4gV2Vi
Q29yZTo6bmV4dEJyZWFrYWJsZVBvc2l0aW9uKGxpbmVCcmVha0l0ZXJhdG9yLCBzdGFydFBvc2l0
aW9uKTsKKyAgICAgICAgICAgIHJldHVybiBuZXh0QnJlYWthYmxlUG9zaXRpb25JZ25vcmluZ05C
U1AobGluZUJyZWFrSXRlcmF0b3IsIHN0YXJ0UG9zaXRpb24pOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKGJyZWFrTkJTUCkKKyAgICAgICAgICAgIHJldHVybiBuZXh0QnJlYWthYmxlUG9zaXRp
b25XaXRob3V0U2hvcnRjdXQobGluZUJyZWFrSXRlcmF0b3IsIHN0YXJ0UG9zaXRpb24pOworICAg
ICAgICByZXR1cm4gbmV4dEJyZWFrYWJsZVBvc2l0aW9uSWdub3JpbmdOQlNQV2l0aG91dFNob3J0
Y3V0KGxpbmVCcmVha0l0ZXJhdG9yLCBzdGFydFBvc2l0aW9uKTsKKyAgICB9OworCisgICAgYXV0
byB0ZXh0TGVuZ3RoID0gbGluZUJyZWFrSXRlcmF0b3Iuc3RyaW5nVmlldygpLmxlbmd0aCgpOwor
ICAgIGF1dG8gY3VycmVudFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbjsKKyAgICB3aGlsZSAoY3Vy
cmVudFBvc2l0aW9uIDwgdGV4dExlbmd0aCAtIDEpIHsKKyAgICAgICAgYXV0byBuZXh0QnJlYWth
YmxlUG9zaXRpb24gPSBmaW5kTmV4dEJyZWFrYWJsZVBvc2l0aW9uKGN1cnJlbnRQb3NpdGlvbik7
CisgICAgICAgIGlmIChuZXh0QnJlYWthYmxlUG9zaXRpb24gIT0gY3VycmVudFBvc2l0aW9uKQor
ICAgICAgICAgICAgcmV0dXJuIG5leHRCcmVha2FibGVQb3NpdGlvbiAtIGN1cnJlbnRQb3NpdGlv
bjsKKyAgICAgICAgKytjdXJyZW50UG9zaXRpb247CisgICAgfQorICAgIHJldHVybiB0ZXh0TGVu
Z3RoIC0gc3RhcnRQb3NpdGlvbjsKK30KKwordm9pZCBJbmxpbmVUZXh0SXRlbTo6Y3JlYXRlQW5k
QXBwZW5kVGV4dEl0ZW1zKElubGluZUl0ZW1zJiBpbmxpbmVDb250ZW50LCBjb25zdCBJbmxpbmVC
b3gmIGlubGluZUJveCkKK3sKKyAgICBhdXRvJiBzdHlsZSA9IGlubGluZUJveC5zdHlsZSgpOwor
ICAgIGF1dG8gcHJlc2VydmVOZXdsaW5lID0gc3R5bGUucHJlc2VydmVOZXdsaW5lKCk7CisgICAg
YXV0byBjb2xsYXBzZVdoaXRlU3BhY2UgPSBzdHlsZS5jb2xsYXBzZVdoaXRlU3BhY2UoKTsKKyAg
ICBhdXRvIHRleHQgPSBpbmxpbmVCb3gudGV4dENvbnRlbnQoKTsKKyAgICBMYXp5TGluZUJyZWFr
SXRlcmF0b3IgbGluZUJyZWFrSXRlcmF0b3IodGV4dCk7CisKKyAgICB1bnNpZ25lZCBjdXJyZW50
UG9zaXRpb24gPSAwOworICAgIHdoaWxlIChjdXJyZW50UG9zaXRpb24gPCB0ZXh0Lmxlbmd0aCgp
KSB7CisgICAgICAgIC8vIFNvZnQgbGluZWJyZWFrPworICAgICAgICBpZiAoaXNTb2Z0TGluZUJy
ZWFrKHRleHRbY3VycmVudFBvc2l0aW9uXSwgcHJlc2VydmVOZXdsaW5lKSkgeworICAgICAgICAg
ICAgaW5saW5lQ29udGVudC5hZGQoc3RkOjptYWtlX3VuaXF1ZTxJbmxpbmVUZXh0SXRlbT4oaW5s
aW5lQm94LCBjdXJyZW50UG9zaXRpb24sIDEsIHRydWUsIGZhbHNlKSk7CisgICAgICAgICAgICAr
K2N1cnJlbnRQb3NpdGlvbjsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAg
ICAgIGlmIChpc1doaXRlc3BhY2VDaGFyYWN0ZXIodGV4dFtjdXJyZW50UG9zaXRpb25dLCBwcmVz
ZXJ2ZU5ld2xpbmUpKSB7CisgICAgICAgICAgICBhdXRvIGxlbmd0aCA9IG1vdmVUb05leHROb25X
aGl0ZXNwYWNlUG9zaXRpb24odGV4dCwgY3VycmVudFBvc2l0aW9uLCBwcmVzZXJ2ZU5ld2xpbmUp
OworICAgICAgICAgICAgYXV0byBpc0NvbGxhcHNlZCA9IGNvbGxhcHNlV2hpdGVTcGFjZSAmJiBs
ZW5ndGggPiAxOworICAgICAgICAgICAgaW5saW5lQ29udGVudC5hZGQoc3RkOjptYWtlX3VuaXF1
ZTxJbmxpbmVUZXh0SXRlbT4oaW5saW5lQm94LCBjdXJyZW50UG9zaXRpb24sIGxlbmd0aCwgdHJ1
ZSwgaXNDb2xsYXBzZWQpKTsKKyAgICAgICAgICAgIGN1cnJlbnRQb3NpdGlvbiArPSBsZW5ndGg7
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gbGVuZ3Ro
ID0gbW92ZVRvTmV4dEJyZWFrYWJsZVBvc2l0aW9uKGN1cnJlbnRQb3NpdGlvbiwgbGluZUJyZWFr
SXRlcmF0b3IsIHN0eWxlKTsKKyAgICAgICAgaW5saW5lQ29udGVudC5hZGQoc3RkOjptYWtlX3Vu
aXF1ZTxJbmxpbmVUZXh0SXRlbT4oaW5saW5lQm94LCBjdXJyZW50UG9zaXRpb24sIGxlbmd0aCwg
ZmFsc2UsIGZhbHNlKSk7CisgICAgICAgIGN1cnJlbnRQb3NpdGlvbiArPSBsZW5ndGg7CisgICAg
fQorfQorCitJbmxpbmVUZXh0SXRlbTo6SW5saW5lVGV4dEl0ZW0oY29uc3QgSW5saW5lQm94JiBp
bmxpbmVCb3gsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIGJvb2wgaXNXaGl0ZXNw
YWNlLCBib29sIGlzQ29sbGFwc2VkKQorICAgIDogSW5saW5lSXRlbShpbmxpbmVCb3gsIFR5cGU6
OlRleHQpCisgICAgLCBtX3N0YXJ0KHN0YXJ0KQorICAgICwgbV9sZW5ndGgobGVuZ3RoKQorICAg
ICwgbV9pc1doaXRlc3BhY2UoaXNXaGl0ZXNwYWNlKQorICAgICwgbV9pc0NvbGxhcHNlZChpc0Nv
bGxhcHNlZCkKK3sKK30KKworfQorfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVUZXh0SXRlbS5oIGIvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lVGV4dEl0ZW0uaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4y
ODc0ZjI4YTMxZGNkMDBhYmVkZTg4OTc1NzQ1MTNjYmUyOWUxNmRlCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lVGV4dEl0ZW0u
aApAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFC
TEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKKworI2luY2x1ZGUgIklubGluZUl0ZW0uaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIExheW91dCB7CisKK2NsYXNzIElubGlu
ZVRleHRJdGVtIDogcHVibGljIElubGluZUl0ZW0geworcHVibGljOgorICAgIHN0YXRpYyB2b2lk
IGNyZWF0ZUFuZEFwcGVuZFRleHRJdGVtcyhJbmxpbmVJdGVtcyYsIGNvbnN0IElubGluZUJveCYp
OworCisgICAgSW5saW5lVGV4dEl0ZW0oY29uc3QgSW5saW5lQm94JiwgdW5zaWduZWQgc3RhcnQs
IHVuc2lnbmVkIGxlbmd0aCwgYm9vbCBpc1doaXRlc3BhY2UsIGJvb2wgaXNDb2xsYXBzZWQpOwor
CisgICAgdW5zaWduZWQgc3RhcnQoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0OyB9CisgICAgdW5z
aWduZWQgZW5kKCkgY29uc3QgeyByZXR1cm4gc3RhcnQoKSArIGxlbmd0aCgpOyB9CisgICAgdW5z
aWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KKworICAgIGJvb2wgaXNX
aGl0ZXNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9pc1doaXRlc3BhY2U7IH0KKyAgICBib29sIGlz
Q29sbGFwc2VkKCkgY29uc3QgeyByZXR1cm4gbV9pc0NvbGxhcHNlZDsgfQorCitwcml2YXRlOgor
ICAgIHVuc2lnbmVkIG1fc3RhcnQgeyAwIH07CisgICAgdW5zaWduZWQgbV9sZW5ndGggeyAwIH07
CisgICAgYm9vbCBtX2lzV2hpdGVzcGFjZSB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzQ29sbGFw
c2VkIHsgZmFsc2UgfTsKK307CisKK30KK30KKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19JTkxJ
TkVfSVRFTShJbmxpbmVUZXh0SXRlbSwgaXNUZXh0KCkpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvdGV4dC9UZXh0VXRpbC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy90ZXh0L1RleHRVdGlsLmNw
cAppbmRleCAzNzVlZDcyM2NkMmIyOTg0ZGY3M2UwZTczMjExYmEwMjg0MThmZTA4Li5jMTM5ZWFi
YTc1NzY5NmQzYzg3NmY0NDRkY2M5N2ZlYzdjM2E2M2ViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy90ZXh0L1RleHRVdGlsLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy90ZXh0L1RleHRVdGlsLmNwcApAQCAt
MzQsMTkgKzM0LDE5IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgTGF5b3V0IHsK
IAotT3B0aW9uYWw8SXRlbVBvc2l0aW9uPiBUZXh0VXRpbDo6aHlwaGVuUG9zaXRpb25CZWZvcmUo
Y29uc3QgSW5saW5lSXRlbSYsIEl0ZW1Qb3NpdGlvbiwgdW5zaWduZWQpCitPcHRpb25hbDx1bnNp
Z25lZD4gVGV4dFV0aWw6Omh5cGhlblBvc2l0aW9uQmVmb3JlKGNvbnN0IElubGluZUl0ZW0mLCB1
bnNpZ25lZCwgdW5zaWduZWQpCiB7CiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAotTGF5
b3V0VW5pdCBUZXh0VXRpbDo6d2lkdGgoY29uc3QgSW5saW5lSXRlbSYgaW5saW5lVGV4dEl0ZW0s
IEl0ZW1Qb3NpdGlvbiBmcm9tLCBJdGVtUG9zaXRpb24gdG8sIExheW91dFVuaXQgY29udGVudExv
Z2ljYWxMZWZ0KQorTGF5b3V0VW5pdCBUZXh0VXRpbDo6d2lkdGgoY29uc3QgSW5saW5lQm94JiBp
bmxpbmVCb3gsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvLCBMYXlvdXRVbml0IGNvbnRlbnRM
b2dpY2FsTGVmdCkKIHsKLSAgICBhdXRvJiBzdHlsZSA9IGlubGluZVRleHRJdGVtLnN0eWxlKCk7
CisgICAgYXV0byYgc3R5bGUgPSBpbmxpbmVCb3guc3R5bGUoKTsKICAgICBhdXRvJiBmb250ID0g
c3R5bGUuZm9udENhc2NhZGUoKTsKICAgICBpZiAoIWZvbnQuc2l6ZSgpIHx8IGZyb20gPT0gdG8p
CiAgICAgICAgIHJldHVybiAwOwogCi0gICAgYXV0byB0ZXh0ID0gaW5saW5lVGV4dEl0ZW0udGV4
dENvbnRlbnQoKTsKKyAgICBhdXRvIHRleHQgPSBpbmxpbmVCb3gudGV4dENvbnRlbnQoKTsKICAg
ICBBU1NFUlQodG8gPD0gdGV4dC5sZW5ndGgoKSk7CiAKICAgICBpZiAoZm9udC5pc0ZpeGVkUGl0
Y2goKSkKQEAgLTcwLDcgKzcwLDcgQEAgTGF5b3V0VW5pdCBUZXh0VXRpbDo6d2lkdGgoY29uc3Qg
SW5saW5lSXRlbSYgaW5saW5lVGV4dEl0ZW0sIEl0ZW1Qb3NpdGlvbiBmcm9tLAogICAgIHJldHVy
biBzdGQ6Om1heDxMYXlvdXRVbml0PigwLCB3aWR0aCk7CiB9CiAKLUxheW91dFVuaXQgVGV4dFV0
aWw6OmZpeGVkUGl0Y2hXaWR0aChTdHJpbmcgdGV4dCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxl
LCBJdGVtUG9zaXRpb24gZnJvbSwgSXRlbVBvc2l0aW9uIHRvLCBMYXlvdXRVbml0IGNvbnRlbnRM
b2dpY2FsTGVmdCkKK0xheW91dFVuaXQgVGV4dFV0aWw6OmZpeGVkUGl0Y2hXaWR0aChTdHJpbmcg
dGV4dCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0
bywgTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbExlZnQpCiB7CiAgICAgYXV0byYgZm9udCA9IHN0
eWxlLmZvbnRDYXNjYWRlKCk7CiAgICAgYXV0byBtb25vc3BhY2VDaGFyYWN0ZXJXaWR0aCA9IGZv
bnQuc3BhY2VXaWR0aCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvdGV4dC9UZXh0VXRpbC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvdGV4dC9UZXh0VXRpbC5oCmluZGV4IDgzNmE5ZWM0MGQzYTcyZWI5MjY3NGE1
M2IzNzJlNTBkMmYzZGFjYjcuLmQwZmVhNmFkMWRkZDcyOWQ3NGY5YmRmYjFiYzlkMjFjOTg3ZDJl
MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL3Rl
eHQvVGV4dFV0aWwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGlu
Zy90ZXh0L1RleHRVdGlsLmgKQEAgLTI4LDE4ICsyOCwxNyBAQAogI2lmIEVOQUJMRShMQVlPVVRf
Rk9STUFUVElOR19DT05URVhUKQogCiAjaW5jbHVkZSAiSW5saW5lSXRlbS5oIgotI2luY2x1ZGUg
IklubGluZVJ1blByb3ZpZGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBM
YXlvdXQgewogCiBjbGFzcyBUZXh0VXRpbCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIExheW91dFVu
aXQgd2lkdGgoY29uc3QgSW5saW5lSXRlbSYsIEl0ZW1Qb3NpdGlvbiBmcm9tLCBJdGVtUG9zaXRp
b24gdG8sIExheW91dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0KTsKLSAgICBzdGF0aWMgT3B0aW9u
YWw8SXRlbVBvc2l0aW9uPiBoeXBoZW5Qb3NpdGlvbkJlZm9yZShjb25zdCBJbmxpbmVJdGVtJiwg
SXRlbVBvc2l0aW9uIGZyb20sIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgc3RhdGljIExheW91dFVu
aXQgd2lkdGgoY29uc3QgSW5saW5lQm94JiwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8sIExh
eW91dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0KTsKKyAgICBzdGF0aWMgT3B0aW9uYWw8dW5zaWdu
ZWQ+IGh5cGhlblBvc2l0aW9uQmVmb3JlKGNvbnN0IElubGluZUl0ZW0mLCB1bnNpZ25lZCBmcm9t
LCB1bnNpZ25lZCBsZW5ndGgpOwogCiBwcml2YXRlOgotICAgIHN0YXRpYyBMYXlvdXRVbml0IGZp
eGVkUGl0Y2hXaWR0aChTdHJpbmcsIGNvbnN0IFJlbmRlclN0eWxlJiwgSXRlbVBvc2l0aW9uIGZy
b20sIEl0ZW1Qb3NpdGlvbiB0bywgTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbExlZnQpOworICAg
IHN0YXRpYyBMYXlvdXRVbml0IGZpeGVkUGl0Y2hXaWR0aChTdHJpbmcsIGNvbnN0IFJlbmRlclN0
eWxlJiwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8sIExheW91dFVuaXQgY29udGVudExvZ2lj
YWxMZWZ0KTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9sYXlv
dXR0cmVlL0xheW91dFJlcGxhY2VkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9sYXlvdXR0
cmVlL0xheW91dFJlcGxhY2VkLmNwcAppbmRleCAwMGNkNWQwNjgyOThiMTY2M2FjZmZjOWQ0OWYw
ZmZiMWI2NWM0ZjIzLi45NjRhNmIzNmI0ZjUzYTQzNTA0NzIyMjdkODFmNDcxZTY1ZWYwM2E4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRSZXBsYWNl
ZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0UmVwbGFj
ZWQuY3BwCkBAIC04MCw3ICs4MCw3IEBAIExheW91dFVuaXQgUmVwbGFjZWQ6OmludHJpbnNpY1Jh
dGlvKCkgY29uc3QKICAgICBBU1NFUlQoaGFzSW50cmluc2ljUmF0aW8oKSB8fCAoaGFzSW50cmlu
c2ljV2lkdGgoKSAmJiBoYXNJbnRyaW5zaWNIZWlnaHQoKSkpOwogICAgIGlmIChtX2ludHJpbnNp
Y1JhdGlvKQogICAgICAgICByZXR1cm4gKm1faW50cmluc2ljUmF0aW87Ci0gICAgaWYgKG1faW50
cmluc2ljU2l6ZSkKKyAgICBpZiAobV9pbnRyaW5zaWNTaXplICYmIG1faW50cmluc2ljU2l6ZS0+
aGVpZ2h0KCkpCiAgICAgICAgIHJldHVybiBtX2ludHJpbnNpY1NpemUtPndpZHRoKCkgLyBtX2lu
dHJpbnNpY1NpemUtPmhlaWdodCgpOwogICAgIHJldHVybiAxOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0VHJlZUJ1aWxkZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0VHJlZUJ1aWxkZXIuY3BwCmluZGV4
IGU2MTAyZGNhZWQ0YWY4MzRmYTAwZWE0ZTRiNzJlNmNmZmFiODY5N2YuLjRjYzIzMzk1YjQzNDY1
ZjVkYWRjNmJlN2MwNjAzYzNjY2I2NTNlMzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9sYXlvdXR0cmVlL0xheW91dFRyZWVCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRUcmVlQnVpbGRlci5jcHAKQEAgLTI5LDYgKzI5LDcg
QEAKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKIAogI2luY2x1ZGUgIkRp
c3BsYXlCb3guaCIKKyNpbmNsdWRlICJEaXNwbGF5UnVuLmgiCiAjaW5jbHVkZSAiSW5saW5lRm9y
bWF0dGluZ1N0YXRlLmgiCiAjaW5jbHVkZSAiTGF5b3V0QmxvY2tDb250YWluZXIuaCIKICNpbmNs
dWRlICJMYXlvdXRCb3guaCIKQEAgLTYwLDYgKzYxLDE1IEBAIHN0ZDo6dW5pcXVlX3B0cjxDb250
YWluZXI+IFRyZWVCdWlsZGVyOjpjcmVhdGVMYXlvdXRUcmVlKGNvbnN0IFJlbmRlclZpZXcmIHJl
bmRlCiAgICAgcmV0dXJuIGluaXRpYWxDb250YWluaW5nQmxvY2s7CiB9CiAKK3N0YXRpYyBPcHRp
b25hbDxMYXlvdXRTaXplPiBhY2N1bXVsYXRlZE9mZnNldEZvckluRmxvd1Bvc2l0aW9uZWRDb250
aW51YXRpb24oY29uc3QgUmVuZGVyQmxvY2smIGJsb2NrKQoreworICAgIC8vIEZJWEU6IFRoaXMg
aXMgYSB3b3JrYXJvdW5kIG9mIHRoZSBjb250aW51YXRpb24gbG9naWMgd2hlbiB0aGUgcmVsYXRp
dmVseSBwb3NpdGlvbmVkIHBhcmVudCBpbmxpbmUgYm94CisgICAgLy8gYmVjb21lcyBhIHNpYmxp
bmcgYm94IG9mIHRoaXMgYmxvY2sgYW5kIG9ubHkgcmVhY2hhYmxlIHRocm91Z2ggdGhlIGNvbnRp
bnVhdGlvbiBsaW5rIHdoaWNoIHdlIGRvbid0IGhhdmUgaGVyZS4KKyAgICBpZiAoIWJsb2NrLmlz
QW5vbnltb3VzKCkgfHwgIWJsb2NrLmlzSW5GbG93UG9zaXRpb25lZCgpIHx8ICFibG9jay5pc0Nv
bnRpbnVhdGlvbigpKQorICAgICAgICByZXR1cm4geyB9OworICAgIHJldHVybiBibG9jay5yZWxh
dGl2ZVBvc2l0aW9uT2Zmc2V0KCk7Cit9CisKIHZvaWQgVHJlZUJ1aWxkZXI6OmNyZWF0ZVN1YlRy
ZWUoY29uc3QgUmVuZGVyRWxlbWVudCYgcm9vdFJlbmRlcmVyLCBDb250YWluZXImIHJvb3RDb250
YWluZXIpCiB7CiAgICAgYXV0byBlbGVtZW50QXR0cmlidXRlcyA9IFtdIChjb25zdCBSZW5kZXJF
bGVtZW50JiByZW5kZXJlcikgLT4gT3B0aW9uYWw8Qm94OjpFbGVtZW50QXR0cmlidXRlcz4gewpA
QCAtMTE1LDkgKzEyNSwxNSBAQCB2b2lkIFRyZWVCdWlsZGVyOjpjcmVhdGVTdWJUcmVlKGNvbnN0
IFJlbmRlckVsZW1lbnQmIHJvb3RSZW5kZXJlciwgQ29udGFpbmVyJiBybwogICAgICAgICB9IGVs
c2UgaWYgKGlzPFJlbmRlckVsZW1lbnQ+KGNoaWxkKSkgewogICAgICAgICAgICAgYXV0byYgcmVu
ZGVyZXIgPSBkb3duY2FzdDxSZW5kZXJFbGVtZW50PihjaGlsZCk7CiAgICAgICAgICAgICBhdXRv
IGRpc3BsYXkgPSByZW5kZXJlci5zdHlsZSgpLmRpc3BsYXkoKTsKLSAgICAgICAgICAgIGlmIChk
aXNwbGF5ID09IERpc3BsYXlUeXBlOjpCbG9jaykKLSAgICAgICAgICAgICAgICBib3ggPSBzdGQ6
Om1ha2VfdW5pcXVlPEJsb2NrQ29udGFpbmVyPihlbGVtZW50QXR0cmlidXRlcyhyZW5kZXJlciks
IFJlbmRlclN0eWxlOjpjbG9uZShyZW5kZXJlci5zdHlsZSgpKSk7Ci0gICAgICAgICAgICBlbHNl
IGlmIChkaXNwbGF5ID09IERpc3BsYXlUeXBlOjpJbmxpbmUpCisgICAgICAgICAgICBpZiAoZGlz
cGxheSA9PSBEaXNwbGF5VHlwZTo6QmxvY2spIHsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byBv
ZmZzZXQgPSBhY2N1bXVsYXRlZE9mZnNldEZvckluRmxvd1Bvc2l0aW9uZWRDb250aW51YXRpb24o
ZG93bmNhc3Q8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKSkpIHsKKyAgICAgICAgICAgICAgICAgICAg
YXV0byBzdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZVB0cihyZW5kZXJlci5zdHlsZSgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgc3R5bGUtPnNldFRvcCh7IG9mZnNldC0+aGVpZ2h0KCksIEZpeGVk
IH0pOworICAgICAgICAgICAgICAgICAgICBzdHlsZS0+c2V0TGVmdCh7IG9mZnNldC0+d2lkdGgo
KSwgRml4ZWQgfSk7CisgICAgICAgICAgICAgICAgICAgIGJveCA9IHN0ZDo6bWFrZV91bmlxdWU8
QmxvY2tDb250YWluZXI+KGVsZW1lbnRBdHRyaWJ1dGVzKHJlbmRlcmVyKSwgV1RGTW92ZSgqc3R5
bGUpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYm94ID0g
c3RkOjptYWtlX3VuaXF1ZTxCbG9ja0NvbnRhaW5lcj4oZWxlbWVudEF0dHJpYnV0ZXMocmVuZGVy
ZXIpLCBSZW5kZXJTdHlsZTo6Y2xvbmUocmVuZGVyZXIuc3R5bGUoKSkpOworICAgICAgICAgICAg
fSBlbHNlIGlmIChkaXNwbGF5ID09IERpc3BsYXlUeXBlOjpJbmxpbmUpCiAgICAgICAgICAgICAg
ICAgYm94ID0gc3RkOjptYWtlX3VuaXF1ZTxJbmxpbmVDb250YWluZXI+KGVsZW1lbnRBdHRyaWJ1
dGVzKHJlbmRlcmVyKSwgUmVuZGVyU3R5bGU6OmNsb25lKHJlbmRlcmVyLnN0eWxlKCkpKTsKICAg
ICAgICAgICAgIGVsc2UgaWYgKGRpc3BsYXkgPT0gRGlzcGxheVR5cGU6OklubGluZUJsb2NrKQog
ICAgICAgICAgICAgICAgIGJveCA9IHN0ZDo6bWFrZV91bmlxdWU8SW5saW5lQ29udGFpbmVyPihl
bGVtZW50QXR0cmlidXRlcyhyZW5kZXJlciksIFJlbmRlclN0eWxlOjpjbG9uZShyZW5kZXJlci5z
dHlsZSgpKSk7CkBAIC0xNjYsMTEgKzE4MiwxMSBAQCBzdGF0aWMgdm9pZCBvdXRwdXRJbmxpbmVS
dW5zKFRleHRTdHJlYW0mIHN0cmVhbSwgY29uc3QgTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLAog
ICAgICAgICB3aGlsZSAoKytwcmludGVkQ2hhcmFjdGVycyA8PSBkZXB0aCAqIDIpCiAgICAgICAg
ICAgICBzdHJlYW0gPDwgIiAiOwogICAgICAgICBzdHJlYW0gPDwgInJ1biI7Ci0gICAgICAgIGlm
IChpbmxpbmVSdW4udGV4dENvbnRleHQoKSkKLSAgICAgICAgICAgIHN0cmVhbSA8PCAiKCIgPDwg
aW5saW5lUnVuLnRleHRDb250ZXh0KCktPnN0YXJ0KCkgPDwgIiwgIiA8PCBpbmxpbmVSdW4udGV4
dENvbnRleHQoKS0+c3RhcnQoKSArIGlubGluZVJ1bi50ZXh0Q29udGV4dCgpLT5sZW5ndGgoKSA8
PCAiKSAiOworICAgICAgICBpZiAoaW5saW5lUnVuLT50ZXh0Q29udGV4dCgpKQorICAgICAgICAg
ICAgc3RyZWFtIDw8ICIoIiA8PCBpbmxpbmVSdW4tPnRleHRDb250ZXh0KCktPnN0YXJ0KCkgPDwg
IiwgIiA8PCBpbmxpbmVSdW4tPnRleHRDb250ZXh0KCktPnN0YXJ0KCkgKyBpbmxpbmVSdW4tPnRl
eHRDb250ZXh0KCktPmxlbmd0aCgpIDw8ICIpICI7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAg
IHN0cmVhbSA8PCAiKHgsIHgpICI7Ci0gICAgICAgIHN0cmVhbSA8PCAiYXQgWyIgPDwgaW5saW5l
UnVuLmxvZ2ljYWxMZWZ0KCkgPDwgIiwgIiA8PCBpbmxpbmVSdW4ubG9naWNhbFRvcCgpIDw8ICJd
IHNpemUgWyIgPDwgaW5saW5lUnVuLmxvZ2ljYWxXaWR0aCgpIDw8ICIgIiA8PCBpbmxpbmVSdW4u
bG9naWNhbEhlaWdodCgpIDw8ICJdIjsKKyAgICAgICAgc3RyZWFtIDw8ICJhdCBbIiA8PCBpbmxp
bmVSdW4tPmxvZ2ljYWxMZWZ0KCkgPDwgIiwgIiA8PCBpbmxpbmVSdW4tPmxvZ2ljYWxUb3AoKSA8
PCAiXSBzaXplIFsiIDw8IGlubGluZVJ1bi0+bG9naWNhbFdpZHRoKCkgPDwgIiAiIDw8IGlubGlu
ZVJ1bi0+bG9naWNhbEhlaWdodCgpIDw8ICJdIjsKICAgICAgICAgc3RyZWFtLm5leHRMaW5lKCk7
CiAgICAgfQogfQpAQCAtMTg2LDExICsyMDIsMTMgQEAgc3RhdGljIHZvaWQgb3V0cHV0TGF5b3V0
Qm94KFRleHRTdHJlYW0mIHN0cmVhbSwgY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IERpc3AK
ICAgICBlbHNlIGlmIChpczxJbmxpbmVCb3g+KGxheW91dEJveCkpIHsKICAgICAgICAgaWYgKGxh
eW91dEJveC5yZXBsYWNlZCgpKQogICAgICAgICAgICAgc3RyZWFtIDw8ICJpbmxpbmUgcmVwbGFj
ZWQgYm94IjsKLSAgICAgICAgZWxzZSBpZiAoZG93bmNhc3Q8SW5saW5lQm94PihsYXlvdXRCb3gp
Lmhhc1RleHRDb250ZW50KCkpIHsKLSAgICAgICAgICAgIGF1dG8gdGV4dENvbnRlbnQgPSBkb3du
Y2FzdDxJbmxpbmVCb3g+KGxheW91dEJveCkudGV4dENvbnRlbnQoKTsKLSAgICAgICAgICAgIHN0
cmVhbSA8PCAiaW5saW5lIHRleHQgW1wiIiA8PCB0ZXh0Q29udGVudC51dGY4KCkuZGF0YSgpIDw8
ICJcIl0iOwotICAgICAgICB9IGVsc2UKKyAgICAgICAgZWxzZSBpZiAobGF5b3V0Qm94LmlzQW5v
bnltb3VzKCkpCisgICAgICAgICAgICBzdHJlYW0gPDwgImFub255bW91cyBpbmxpbmUgYm94IjsK
KyAgICAgICAgZWxzZQogICAgICAgICAgICAgc3RyZWFtIDw8ICJpbmxpbmUgYm94IjsKKworICAg
ICAgICBpZiAoZG93bmNhc3Q8SW5saW5lQm94PihsYXlvdXRCb3gpLmhhc1RleHRDb250ZW50KCkp
CisgICAgICAgICAgICBzdHJlYW0gPDwgIiB3aXRoIHRleHQgY29udGVudCBbXCIiIDw8IGRvd25j
YXN0PElubGluZUJveD4obGF5b3V0Qm94KS50ZXh0Q29udGVudCgpLnV0ZjgoKS5kYXRhKCkgPDwg
IlwiXSI7CiAgICAgfSBlbHNlIGlmIChpczxCbG9ja0NvbnRhaW5lcj4obGF5b3V0Qm94KSkgewog
ICAgICAgICBpZiAoIWxheW91dEJveC5wYXJlbnQoKSkKICAgICAgICAgICAgIHN0cmVhbSA8PCAi
aW5pdGlhbCAiOwpAQCAtMjAxLDEwICsyMTksOSBAQCBzdGF0aWMgdm9pZCBvdXRwdXRMYXlvdXRC
b3goVGV4dFN0cmVhbSYgc3RyZWFtLCBjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3QgRGlzcAog
ICAgICAgICBzdHJlYW0gPDwgImJveCI7CiAgICAgLy8gRklYTUU6IElubGluZSB0ZXh0IHJ1bnMg
ZG9uJ3QgY3JlYXRlIGRpc3BsYXkgYm94ZXMgeWV0LgogICAgIGlmIChkaXNwbGF5Qm94KSB7Ci0g
ICAgICAgIC8vIEZJWE1FOiBkaXNwbGF5IGJveCBpcyBub3QgY29tcGxldGVseSBzZXQgeWV0Lgot
ICAgICAgICBpZiAoKGlzPElubGluZUJveD4obGF5b3V0Qm94KSB8fCBpczxJbmxpbmVDb250YWlu
ZXI+KGxheW91dEJveCkpICYmICFsYXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSkKLSAg
ICAgICAgICAgIHN0cmVhbSA8PCAiIGF0IFsiIDw8ICIuIiA8PCAiICIgPDwgIi4iIDw8ICJdIHNp
emUgWyIgPDwgZGlzcGxheUJveC0+d2lkdGgoKSA8PCAiICIgPDwgZGlzcGxheUJveC0+aGVpZ2h0
KCkgPDwgIl0iOwotICAgICAgICBlbHNlCisgICAgICAgIGlmIChpczxJbmxpbmVDb250YWluZXI+
KGxheW91dEJveCkpCisgICAgICAgICAgICBzdHJlYW0gPDwgIiBhdCBbIiA8PCBkaXNwbGF5Qm94
LT5sZWZ0KCkgPDwgIl0gd2lkdGggWyIgPDwgZGlzcGxheUJveC0+d2lkdGgoKSA8PCAiXSI7Cisg
ICAgICAgIGVsc2UgaWYgKCFsYXlvdXRCb3guaXNBbm9ueW1vdXMoKSkKICAgICAgICAgICAgIHN0
cmVhbSA8PCAiIGF0IFsiIDw8IGRpc3BsYXlCb3gtPmxlZnQoKSA8PCAiICIgPDwgZGlzcGxheUJv
eC0+dG9wKCkgPDwgIl0gc2l6ZSBbIiA8PCBkaXNwbGF5Qm94LT53aWR0aCgpIDw8ICIgIiA8PCBk
aXNwbGF5Qm94LT5oZWlnaHQoKSA8PCAiXSI7CiAgICAgfQogICAgIHN0cmVhbSA8PCAiIFsiIDw8
ICZsYXlvdXRCb3ggPDwgIl0iOwpkaWZmIC0tZ2l0IGEvVG9vbHMvTGF5b3V0UmVsb2FkZWQvbWlz
Yy9MRkMtcGFzc2luZy10ZXN0cy50eHQgYi9Ub29scy9MYXlvdXRSZWxvYWRlZC9taXNjL0xGQy1w
YXNzaW5nLXRlc3RzLnR4dAppbmRleCBjZWQwMDllZGQ0YjI4OTk1YjIzMGIxZGE0OGJkODYxY2Mz
NGQyM2NhLi41MGM3Njk4ZTBmYzlkZTRkY2E1OGRkMzM0NzYyODBhNjYzZWMxZTE3IDEwMDY0NAot
LS0gYS9Ub29scy9MYXlvdXRSZWxvYWRlZC9taXNjL0xGQy1wYXNzaW5nLXRlc3RzLnR4dAorKysg
Yi9Ub29scy9MYXlvdXRSZWxvYWRlZC9taXNjL0xGQy1wYXNzaW5nLXRlc3RzLnR4dApAQCAtNDcz
LDcgKzQ3Myw2IEBAIGNzczIuMS90MDUxMS1jMjEtcHNldWQtbGluay0wMC1lLmh0bWwKIGNzczIu
MS90MDUxMS1jMjEtcHNldWQtbGluay0wMS1lLmh0bWwKIGNzczIuMS90MDUxMS1jMjEtcHNldWQt
bGluay0wMi1lLmh0bWwKIGNzczIuMS90MDUxMS1jMjEtcHNldWQtbGluay0wMy1lLmh0bWwKLWNz
czIuMS90MDYwMi1jMTMtaW5oLXVuZGVybGluLTAwLWUuaHRtbAogY3NzMi4xL3QwNjAzLWMxMS1p
bXBvcnQtMDAtYi5odG1sCiBjc3MyLjEvdDA4MDMtYzU1MDItaW1yZ24tci0wMC1iLWFnLmh0bWwK
IGNzczIuMS90MDgwMy1jNTUwMi1tcmduLXItMDItYy5odG1sCkBAIC02NDMsNyArNjQyLDYgQEAg
Y3NzMi4xL3QwNjA0MDMtYzIxLXBzZXUtaWQtMDAtZS1pLmh0bWwKIGNzczIuMS90MDkwNTAxLWM0
MTQtZmx0LTAwLWQuaHRtbAogY3NzMi4xL3QwOTA1MDEtYzQxNC1mbHQtMDItZC1nLmh0bWwKIGNz
czIuMS90MTAwMzAzLWM0MTItYmxvY2t3LTAwLWQtYWcuaHRtbAotY3NzMi4xL3QxMDA4MDEtYzU0
NC12YWxnbi0wNC1kLWFnaS5odG1sCiBjc3MyLjEvdDEwMDgwMS1jNTQ4LWxuLWh0LTAxLWItYWcu
aHRtbAogY3NzMi4xL3QxMDA4MDEtYzU0OC1sbi1odC0wMi1iLWFnLmh0bWwKIGNzczIuMS90MTAw
ODAxLWM1NDgtbG4taHQtMDMtZC1hZy5odG1sCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>370379</attachid>
            <date>2019-05-21 21:41:44 -0700</date>
            <delta_ts>2019-05-22 06:23:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-197198-20190521214143.patch</filename>
            <type>text/plain</type>
            <size>200849</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ1NjEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjcxOGQ5YmJkZGJkZDU1
ZmRhODlmNzQwZDAzZjFmMzU3YjQ5NzQ5MC4uOTgwMzQwNDE4Y2MxNGMyM2M0ZmYzNWVkYzk1MDVm
MmE0ZTFlMTA3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwMiBAQAorMjAxOS0wNS0yMSAgWmFs
YW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgorCisgICAgICAgIFtMRkNdW0lGQ10gSW50cm9k
dWNlIERpc3BsYXlSdW4gdG8gZGlzcGxheSB0cmVlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTcxOTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBzaW1wbGUgaW5saW5lIGxheW91dCBpbXBsZW1l
bnRhdGlvbi4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBsYXlvdXQvRm9ybWF0dGluZ0NvbnRl
eHRHZW9tZXRyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OmNvbnRlbnRIZWlnaHRG
b3JGb3JtYXR0aW5nQ29udGV4dFJvb3QpOgorICAgICAgICAqIGxheW91dC9WZXJpZmljYXRpb24u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjphcmVFc3NlbnRpYWxseUVxdWFsKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6b3V0cHV0TWlzbWF0Y2hpbmdTaW1wbGVMaW5lSW5mb3Jt
YXRpb25JZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OmNoZWNrRm9yTWF0Y2hp
bmdOb25UZXh0UnVucyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OmNoZWNrRm9yTWF0Y2hp
bmdUZXh0UnVucyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Om91dHB1dE1pc21hdGNoaW5n
Q29tcGxleExpbmVJbmZvcm1hdGlvbklmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6b3V0cHV0TWlzbWF0Y2hpbmdCbG9ja0JveEluZm9ybWF0aW9uSWZOZWVkZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpyZXNvbHZlRm9yUmVsYXRpdmVQb3NpdGlvbklmTmVlZGVkKTog
RGVsZXRlZC4KKyAgICAgICAgKiBsYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrRm9ybWF0dGlu
Z0NvbnRleHRHZW9tZXRyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9y
bWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbkZsb3dOb25SZXBsYWNlZEhlaWdodEFuZE1hcmdp
bik6CisgICAgICAgICogbGF5b3V0L2Rpc3BsYXl0cmVlL0Rpc3BsYXlCb3guY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheTo6Qm94OjptYXJnaW5Cb3ggY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheTo6Qm94Ojpub25Db2xsYXBzZWRNYXJnaW5Cb3ggY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheTo6Qm94Ojpib3JkZXJCb3ggY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheTo6Qm94OjpwYWRkaW5nQm94IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXk6OkJveDo6Y29udGVudEJveCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5OjpCb3g6OlJlY3Q6OlJlY3QpOiBEZWxldGVkLgorICAgICAgICAqIGxheW91dC9kaXNwbGF5
dHJlZS9EaXNwbGF5Qm94Lmg6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3g6OnJlY3RX
aXRoTWFyZ2luIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveDo6aG9yaXpv
bnRhbE1hcmdpbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3g6OlJlY3Q6
OmludGVyc2VjdHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6
Qm94OjpSZWN0OjppbnZhbGlkYXRlVG9wKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXk6OkJveDo6UmVjdDo6aW52YWxpZGF0ZUxlZnQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheTo6Qm94OjpSZWN0OjppbnZhbGlkYXRlV2lkdGgpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Qm94OjpSZWN0OjppbnZhbGlkYXRlSGVpZ2h0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveDo6UmVjdDo6aGFzVmFsaWRQb3Np
dGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3g6OlJl
Y3Q6Omhhc1ZhbGlkU2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5OjpCb3g6OlJlY3Q6Omhhc1ZhbGlkR2VvbWV0cnkgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheTo6Qm94OjpSZWN0OjppbnZhbGlkYXRlUG9zaXRpb24pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Qm94OjpSZWN0OjpzZXRIYXNWYWxpZFBv
c2l0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveDo6UmVjdDo6
c2V0SGFzVmFsaWRTaXplKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJv
eDo6UmVjdDo6dG9wIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6
OkJveDo6UmVjdDo6bGVmdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5OjpCb3g6OlJlY3Q6OmJvdHRvbSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5OjpCb3g6OlJlY3Q6OnJpZ2h0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXk6OkJveDo6UmVjdDo6dG9wTGVmdCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3g6OlJlY3Q6OmJvdHRvbVJpZ2h0IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveDo6UmVjdDo6c2l6ZSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3g6OlJlY3Q6OndpZHRoIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveDo6UmVjdDo6aGVp
Z2h0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveDo6UmVj
dDo6c2V0VG9wTGVmdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3g6
OlJlY3Q6OnNldFRvcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3g6
OlJlY3Q6OnNldExlZnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Qm94
OjpSZWN0OjpzZXRXaWR0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpC
b3g6OlJlY3Q6OnNldEhlaWdodCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
OjpCb3g6OlJlY3Q6OnNldFNpemUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eTo6Qm94OjpSZWN0OjpzaGlmdExlZnRUbyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5OjpCb3g6OlJlY3Q6OnNoaWZ0UmlnaHRUbyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5OjpCb3g6OlJlY3Q6OnNoaWZ0VG9wVG8pOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheTo6Qm94OjpSZWN0OjpzaGlmdEJvdHRvbVRvKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveDo6UmVjdDo6bW92ZUhvcml6b250YWxseSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3g6OlJlY3Q6Om1vdmVWZXJ0aWNh
bGx5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveDo6UmVjdDo6ZXhw
YW5kKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveDo6UmVjdDo6Y2xv
bmUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Qm94OjpSZWN0
OjpvcGVyYXRvciBMYXlvdXRSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBsYXlvdXQv
ZGlzcGxheXRyZWUvRGlzcGxheVJlY3QuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5OjpSZWN0OjpleHBhbmRIb3Jpem9udGFsbHkpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eTo6UmVjdDo6ZXhwYW5kVmVydGljYWxseSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpS
ZWN0OjppbnRlcnNlY3RzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJlY3Q6
OmludmFsaWRhdGVUb3ApOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UmVjdDo6aW52YWxp
ZGF0ZUxlZnQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UmVjdDo6aW52YWxpZGF0ZVdp
ZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJlY3Q6OmludmFsaWRhdGVIZWlnaHQp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UmVjdDo6aGFzVmFsaWRQb3NpdGlvbiBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSZWN0OjpoYXNWYWxpZFNpemUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UmVjdDo6aGFzVmFsaWRHZW9tZXRyeSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSZWN0OjpSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXk6OlJlY3Q6OmludmFsaWRhdGVQb3NpdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5OjpSZWN0OjpzZXRIYXNWYWxpZFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXk6OlJlY3Q6OnNldEhhc1ZhbGlkU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5OjpSZWN0Ojp0b3AgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UmVj
dDo6bGVmdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSZWN0Ojpib3R0b20g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UmVjdDo6cmlnaHQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UmVjdDo6dG9wTGVmdCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5OjpSZWN0Ojpib3R0b21SaWdodCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5OjpSZWN0OjpzaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXk6OlJlY3Q6OndpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJl
Y3Q6OmhlaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSZWN0OjpzZXRU
b3BMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJlY3Q6OnNldFRvcCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSZWN0OjpzZXRMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXk6OlJlY3Q6OnNldFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJl
Y3Q6OnNldEhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSZWN0OjpzZXRTaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJlY3Q6OnNoaWZ0TGVmdFRvKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJlY3Q6OnNoaWZ0UmlnaHRUbyk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5OjpSZWN0OjpzaGlmdFRvcFRvKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXk6OlJlY3Q6OnNoaWZ0Qm90dG9tVG8pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UmVj
dDo6bW92ZUhvcml6b250YWxseSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSZWN0Ojpt
b3ZlVmVydGljYWxseSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSZWN0OjpleHBhbmQp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UmVjdDo6Y2xvbmUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheTo6UmVjdDo6b3BlcmF0b3IgTGF5b3V0UmVjdCBjb25zdCk6Cisg
ICAgICAgICogbGF5b3V0L2Rpc3BsYXl0cmVlL0Rpc3BsYXlSdW4uaDogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZVJ1bi5oLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheTo6UnVuOjpUZXh0Q29udGV4dDo6c3RhcnQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UnVuOjpUZXh0Q29udGV4dDo6ZW5kIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJ1bjo6VGV4dENvbnRleHQ6Omxlbmd0aCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSdW46OlRleHRDb250ZXh0OjpleHBhbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UnVuOjpsb2dpY2FsVG9wTGVmdCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSdW46OmxvZ2ljYWxMZWZ0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJ1bjo6bG9naWNhbFJpZ2h0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXk6OlJ1bjo6bG9naWNhbFRvcCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5OjpSdW46OmxvZ2ljYWxCb3R0b20gY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheTo6UnVuOjpsb2dpY2FsV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheTo6UnVuOjpsb2dpY2FsSGVpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXk6OlJ1bjo6c2V0TG9naWNhbFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6
OlJ1bjo6c2V0TG9naWNhbFRvcCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSdW46OnNl
dExvZ2ljYWxMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJ1bjo6c2V0TG9naWNh
bFJpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJ1bjo6bW92ZVZlcnRpY2FsbHkp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UnVuOjptb3ZlSG9yaXpvbnRhbGx5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJ1bjo6ZXhwYW5kVmVydGljYWxseSk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5OjpSdW46OmV4cGFuZEhvcml6b250YWxseSk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5OjpSdW46OnNldFRleHRDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXk6OlJ1bjo6dGV4dENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6
UnVuOjp0ZXh0Q29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSdW46
OlJ1bik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSdW46OlRleHRDb250ZXh0OjpUZXh0
Q29udGV4dCk6CisgICAgICAgICogbGF5b3V0L2Zsb2F0cy9GbG9hdEF2b2lkZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGbG9hdEF2b2lkZXI6OnJlY3RJbkNvbnRhaW5pbmdCbG9j
ayBjb25zdCk6CisgICAgICAgICogbGF5b3V0L2Zsb2F0cy9GbG9hdEF2b2lkZXIuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6RmxvYXRBdm9pZGVyOjpyZWN0IGNvbnN0KToKKyAgICAgICAg
KiBsYXlvdXQvZmxvYXRzL0Zsb2F0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
RmxvYXRCb3g6OnJlY3QgY29uc3QpOgorICAgICAgICAqIGxheW91dC9mbG9hdHMvRmxvYXRCb3gu
aDoKKyAgICAgICAgKiBsYXlvdXQvZmxvYXRzL0Zsb2F0aW5nQ29udGV4dC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OkZsb2F0UGFpcjo6aW50ZXJzZWN0cyBjb25zdCk6CisgICAgICAg
ICogbGF5b3V0L2Zsb2F0cy9GbG9hdGluZ1N0YXRlLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkZsb2F0aW5nU3RhdGU6OkZsb2F0SXRlbTo6cmVjdFdpdGhNYXJnaW4gY29uc3QpOgorICAg
ICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6Omxh
eW91dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdD
b250ZXh0Ojpjb21wdXRlSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0Ojppbml0aWFsaXplTWFy
Z2luQm9yZGVyQW5kUGFkZGluZ0ZvckdlbmVyaWNJbmxpbmVCb3ggY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZU1hcmdpbkJv
cmRlckFuZFBhZGRpbmdGb3JJbmxpbmVDb250YWluZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUludHJpbnNpY1dpZHRo
Rm9yRmxvYXRCb3ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dDo6Y29tcHV0ZUludHJpbnNpY1dpZHRoRm9ySW5saW5lQmxvY2sgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29t
cHV0ZUhvcml6b250YWxNYXJnaW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJ
bmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRSb290IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNv
bGxlY3RJbmxpbmVDb250ZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVNYXJnaW4gY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjphZGREZXRhY2hpbmdSdWxlcyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OmNyZWF0ZUFuZEFwcGVuZElubGluZUl0ZW0pOiBEZWxldGVk
LgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250
ZXh0Lmg6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0
OjpMaW5lTGF5b3V0OjpsYXlvdXRTdGF0ZSBjb25zdCk6CisgICAgICAgICogbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6aGFsZkxlYWRpbmdNZXRyaWNzKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6TGluZTo6YXZhaWxhYmxlV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpMaW5lOjpjb250ZW50TG9naWNhbFJpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6TGluZTo6Y29udGVudExvZ2ljYWxXaWR0aCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6OmxvZ2ljYWxUb3AgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpMaW5lOjpsb2dpY2FsTGVmdCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkxpbmU6OmxvZ2ljYWxSaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OkxpbmU6OmxvZ2ljYWxCb3R0b20gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpMaW5lOjpsb2dpY2FsV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpMaW5lOjpsb2dpY2FsSGVpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
TGluZTo6TGluZUl0ZW06OkxpbmVJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGlu
ZTo6TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6OnJlc2V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6TGluZTo6Y2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpMaW5lOjpyZW1vdmVUcmFpbGluZ1RyaW1tYWJsZUNvbnRlbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpMaW5lOjptb3ZlTG9naWNhbExlZnQpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpMaW5lOjptb3ZlTG9naWNhbFJpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6aXNUcmltbWFibGVDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZTo6
dHJhaWxpbmdUcmltbWFibGVXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkxpbmU6Omhhc0NvbnRlbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5l
OjphcHBlbmROb25CcmVha2FibGVTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Okxp
bmU6OmFwcGVuZElubGluZUNvbnRhaW5lclN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6TGluZTo6YXBwZW5kSW5saW5lQ29udGFpbmVyRW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6TGluZTo6YXBwZW5kVGV4dENvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpMaW5lOjphcHBlbmROb25UZXh0Q29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkxpbmU6OmFwcGVuZEhhcmRMaW5lQnJlYWspOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpV
bmNvbW1pdHRlZENvbnRlbnQ6OmlzRW1wdHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpVbmNvbW1pdHRlZENvbnRlbnQ6OndpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6VW5jb21taXR0ZWRDb250ZW50OjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpVbmNvbW1pdHRlZENvbnRlbnQ6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OkxpbmVMYXlvdXQpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91
dDo6aW5pdGlhbGl6ZUxpbmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxp
bmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6bGF5b3V0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OmNs
b3NlTGluZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRp
bmdDb250ZXh0OjpMaW5lTGF5b3V0OjpoYW5kbGVGbG9hdCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0Ojpjb21taXRJ
bmxpbmVJdGVtVG9MaW5lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6aG9yaXpv
bnRhbEFkanVzdG1lbnRGb3JBbGlnbm1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJ
bmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6YWxpZ25SdW5zIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZTo6aXNDbG9zZWQgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjppc0ZpcnN0TGluZSBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6OnJ1bnMpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjpjb250ZW50TG9naWNhbExlZnQgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjpsYXN0UnVuVHlwZSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6OmluaXQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjphZGp1c3RMb2dpY2FsTGVmdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6OmFkanVzdExvZ2ljYWxS
aWdodCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6OmFwcGVuZENv
bnRlbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dDo6TGluZUxheW91dDo6aW5pdGlhbGl6ZU5ld0xpbmUgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGlu
ZUxheW91dDo6c3BsaXRJbmxpbmVSdW5JZk5lZWRlZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0Ojpj
cmVhdGVGaW5hbFJ1bnMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6cG9zdFByb2Nlc3NJbmxpbmVS
dW5zIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9y
bWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OmFwcGVuZENvbnRlbnRUb0xpbmUgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dDo6TGluZUxheW91dDo6Y29tcHV0ZUZsb2F0UG9zaXRpb24gY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91
dDo6cGxhY2VJbkZsb3dQb3NpdGlvbmVkQ2hpbGRyZW4gY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjphZGp1c3RlZExpbmVMb2dpY2FsTGVmdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5
b3V0OjpqdXN0aWZ5UnVucyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Oklu
bGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0Ojpjb21wdXRlRXhwYW5zaW9uT3Bwb3J0
dW5pdGllcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGlu
ZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpydW5XaWR0aCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ1N0YXRl
Lmg6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdTdGF0ZTo6aW5s
aW5lSXRlbXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nU3Rh
dGU6OmxpbmVCb3hlcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRp
bmdTdGF0ZTo6YWRkSW5saW5lSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGlu
ZUZvcm1hdHRpbmdTdGF0ZTo6YWRkSW5saW5lUnVuKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6SW5saW5lRm9ybWF0dGluZ1N0YXRlOjphZGRMaW5lQm94KToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ1N0YXRlOjppbmxpbmVDb250ZW50KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ1N0YXRlOjpsYXN0SW5s
aW5lSXRlbSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGlu
ZUZvcm1hdHRpbmdTdGF0ZTo6YXBwZW5kSW5saW5lUnVuKTogRGVsZXRlZC4KKyAgICAgICAgKiBs
YXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVJdGVtLmg6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OklubGluZUl0ZW06OnR5cGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpJbmxpbmVJdGVtOjppc1RleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJ
bmxpbmVJdGVtOjppc0JveCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGlu
ZUl0ZW06OmlzSGFyZExpbmVCcmVhayBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OklubGluZUl0ZW06OmlzRmxvYXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJ
bmxpbmVJdGVtOjppc0xpbmVCcmVhayBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OklubGluZUl0ZW06OmlzQ29udGFpbmVyU3RhcnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpJbmxpbmVJdGVtOjppc0NvbnRhaW5lckVuZCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OklubGluZUl0ZW06OklubGluZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpJbmxpbmVJdGVtOjpzZXRXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OklubGluZUl0ZW06OndpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5s
aW5lSXRlbTo6YWRkRGV0YWNoaW5nUnVsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OklubGluZUl0ZW06OmRldGFjaGluZ1J1bGVzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lSXRlbTo6bm9uQnJlYWthYmxlU3RhcnQgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVJdGVtOjpub25CcmVh
a2FibGVFbmQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxp
bmVJdGVtOjphZGROb25CcmVha2FibGVTdGFydCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OklubGluZUl0ZW06OmFkZE5vbkJyZWFrYWJsZUVuZCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUl0ZW06OnRleHRDb250ZW50IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQm94Lmg6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2xheW91dC9mbG9hdHMvRmxvYXRCb3guaC4KKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6bG9naWNhbFRvcExlZnQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94Ojpsb2dpY2FsTGVmdCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OmxvZ2ljYWxSaWdodCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OmxvZ2ljYWxUb3AgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94Ojpsb2dpY2FsQm90dG9tIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6bG9naWNhbFdpZHRoIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6bG9naWNhbEhlaWdodCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OkxpbmVCb3gpOgorICAgICAgICAqIGxh
eW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCcmVha2VyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6TGluZUJyZWFrZXI6OkxpbmVCcmVha2VyKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6TGluZUJyZWFrZXI6OmJyZWFraW5nQ29udGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OkxpbmVCcmVha2VyOjp3b3JkQnJlYWtpbmdCZWhhdmlvciBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCcmVha2VyOjpydW5XaWR0aCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCcmVha2VyOjppc0F0QnJlYWtpbmdPcHBvcnR1
bml0eSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCcmVha2VyOjp0ZXh0V2lkdGgg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVMaW5lQnJlYWtlcjo6SW5s
aW5lTGluZUJyZWFrZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxp
bmVMaW5lQnJlYWtlcjo6bmV4dFJ1bik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OklubGluZUxpbmVCcmVha2VyOjppc0F0Q29udGVudEVuZCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUxpbmVCcmVha2VyOjpsaW5lQnJlYWtpbmdC
ZWhhdmlvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUxpbmVC
cmVha2VyOjpydW5XaWR0aCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OklubGluZUxpbmVCcmVha2VyOjp0ZXh0V2lkdGggY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVMaW5lQnJlYWtlcjo6c3BsaXRSdW4pOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVMaW5lQnJlYWtlcjo6YWRqdXN0U3Bs
aXRQb3NpdGlvbldpdGhIeXBoZW5hdGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJyZWFrZXIuaDoKKyAgICAgICAgKiBsYXlv
dXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVSdW5Qcm92aWRlci5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lUnVuUHJvdmlkZXIuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVUZXh0SXRlbS5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0Ojppc1doaXRlc3BhY2VDaGFyYWN0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0Ojppc1NvZnRMaW5lQnJlYWspOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0Ojptb3ZlVG9OZXh0Tm9uV2hpdGVzcGFjZVBvc2l0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6bW92ZVRvTmV4dEJyZWFrYWJsZVBvc2l0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lVGV4dEl0ZW06OmNyZWF0ZUFuZEFwcGVuZFRleHRJ
dGVtcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZVRleHRJdGVtOjpJbmxpbmVU
ZXh0SXRlbSk6CisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lVGV4dEl0
ZW0uaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcv
dGV4dC9UZXh0VXRpbC5oLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVUZXh0SXRl
bTo6c3RhcnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVUZXh0SXRl
bTo6ZW5kIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lVGV4dEl0ZW06
Omxlbmd0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZVRleHRJdGVt
Ojppc1doaXRlc3BhY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVU
ZXh0SXRlbTo6aXNDb2xsYXBzZWQgY29uc3QpOgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3Jt
YXR0aW5nL3RleHQvVGV4dFV0aWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpUZXh0
VXRpbDo6aHlwaGVuUG9zaXRpb25CZWZvcmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpU
ZXh0VXRpbDo6d2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpUZXh0VXRpbDo6Zml4
ZWRQaXRjaFdpZHRoKToKKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy90ZXh0L1Rl
eHRVdGlsLmg6CisgICAgICAgICogbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0Qm94Lmg6CisgICAg
ICAgICogbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0UmVwbGFjZWQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpSZXBsYWNlZDo6aW50cmluc2ljUmF0aW8gY29uc3QpOgorICAgICAgICAq
IGxheW91dC9sYXlvdXR0cmVlL0xheW91dFRyZWVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6YWNjdW11bGF0ZWRPZmZzZXRGb3JJbkZsb3dQb3NpdGlvbmVkQ29udGludWF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6VHJlZUJ1aWxkZXI6OmNyZWF0ZVN1YlRy
ZWUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpvdXRwdXRJbmxpbmVSdW5zKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6b3V0cHV0TGF5b3V0Qm94KToKKwogMjAxOS0wNS0yMSAgU2Fh
bSBiYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBXSExTTDogQWRkIGFuIEFT
VCBkdW1wZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNl
L1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggMDQyMGM1MDNjY2NlOGYxNTYwODU0MjRmYjRkYWJl
YWI1NTI3YTdlYy4uY2MxZDY5Yjg5NTYzMjgzZTY5ZDBkMDk2NzA4YjA2YWVkZWM4YzNmMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUv
U291cmNlcy50eHQKQEAgLTEzNDcsNyArMTM0Nyw3IEBAIGxheW91dC9pbmxpbmVmb3JtYXR0aW5n
L0lubGluZUZvcm1hdHRpbmdDb250ZXh0TGluZUxheW91dC5jcHAKIGxheW91dC9pbmxpbmVmb3Jt
YXR0aW5nL0lubGluZUZvcm1hdHRpbmdTdGF0ZS5jcHAKIGxheW91dC9pbmxpbmVmb3JtYXR0aW5n
L0lubGluZUludmFsaWRhdGlvbi5jcHAKIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxp
bmVCcmVha2VyLmNwcAotbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lUnVuUHJvdmlkZXIu
Y3BwCitsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVUZXh0SXRlbS5jcHAKIGxheW91dC9p
bmxpbmVmb3JtYXR0aW5nL3RleHQvVGV4dFV0aWwuY3BwCiBsYXlvdXQvbGF5b3V0dHJlZS9MYXlv
dXRCbG9ja0NvbnRhaW5lci5jcHAKIGxheW91dC9sYXlvdXR0cmVlL0xheW91dEJveC5jcHAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
aiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRl
eCA1MjJiNmQwOGNjMGQzOWEzNGQ1YzE1NDI2NjY4MDA2ZDBlMWJhODkyLi4yN2Q3ZDdhODhlZDI5
ZGZlM2EzMDA2MjdlNjQ3ZTlmZDNlYjlkZWM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMDA4LDEwICsyMDA4LDkgQEAKIAkJ
NkVEODc4QzUxNDc0OTNGNDAwNEMzNTk3IC8qIFJlbmRlclRhYmxlQ2FwdGlvbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkVEODc4QzMxNDc0OTNGNDAw
NEMzNTk3IC8qIFJlbmRlclRhYmxlQ2FwdGlvbi5oICovOyB9OwogCQk2RUQ4QzM3QTE4M0JGRjhD
MDA5RTUzQkQgLyogQm94U2hhcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDZFRDhDMzc4MTgzQkZGOEMwMDlFNTNCRCAvKiBCb3hTaGFwZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTZFRThBNzczMTBG
ODAzRjMwMDVBNEEyNCAvKiBKU1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFRThBNzcxMTBGODAzRjMwMDVBNEEy
NCAvKiBKU1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaCAqLzsgfTsKLQkJNkYyMTlENzcyMTc4RDM3
MjAwQkIwMzNDIC8qIElubGluZVJ1bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNkYyMTlENzQyMTc4RDM3MTAwQkIwMzNDIC8qIElubGluZVJ1bi5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTZGMUNDMURF
MjI1RjhCNDkwMDcyMEFEMiAvKiBJbmxpbmVUZXh0SXRlbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkYxQ0MxREQyMjVGOEI0MjAwNzIwQUQyIC8qIElu
bGluZVRleHRJdGVtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJNkYyMjJCNzYxQUI1MkQ4QTAwOTQ2NTFBIC8qIFdlYkdMVmVydGV4QXJyYXlPYmpl
Y3RCYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDZGMjIyQjc1MUFCNTJEOEEwMDk0NjUxQSAvKiBXZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5j
cHAgKi87IH07CiAJCTZGM0UxRjYyMjEzNjE0MjAwMEE2NUEwOCAvKiBGbG9hdEJveC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkYzRTFGNjEyMTM2MTQx
NzAwQTY1QTA4IC8qIEZsb2F0Qm94LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKLQkJNkY1MjE3QzcyMTc3RjVBNzAwNjU4M0JCIC8qIElubGluZVJ1blBy
b3ZpZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2
RjUyMTdDNDIxNzdGNUE2MDA2NTgzQkIgLyogSW5saW5lUnVuUHJvdmlkZXIuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2RjdDQTNDNjIwOEMyOTU3
MDAyRjI5QUIgLyogTGF5b3V0U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDZGN0NBM0M0MjA4QzI5NTYwMDJGMjlBQiAvKiBMYXlvdXRTdGF0ZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTZGN0NB
M0NBMjA4QzJCMkUwMDJGMjlBQiAvKiBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkY3Q0EzQzgyMDhDMkIyRTAw
MkYyOUFCIC8qIElubGluZUZvcm1hdHRpbmdDb250ZXh0LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNkY5OTVBMTUxQTcwNzU2MjAwQTczNUY0IC8q
IFdlYkdMU3luYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA2Rjk5NUExMzFBNzA3NTYyMDBBNzM1RjQgLyogV2ViR0xTeW5jLmNwcCAqLzsgfTsKQEAg
LTIwMzEsNyArMjAzMCwxMCBAQAogCQk2Rjk5NUEzQTFBNzA4MzM3MDBBNzM1RjQgLyogSlNXZWJH
TFZlcnRleEFycmF5T2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA2Rjk5NUEzMDFBNzA4MzM3MDBBNzM1RjQgLyogSlNXZWJHTFZlcnRleEFycmF5
T2JqZWN0LmggKi87IH07CiAJCTZGQTQ0NTRFODk4RjJGQzE2OEJDMzhDMSAvKiBKU0JlZm9yZVVu
bG9hZEV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAyOUUwNEEyN0JFRDJGODFGOThFOTAyMkIgLyogSlNCZWZvcmVVbmxvYWRFdmVudC5oICovOyB9
OwogCQk2RkIxMUI1QzIxNzgzRkQwMDBFMkE1NzQgLyogVGV4dFV0aWwuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZGQjExQjU5MjE3ODNGQ0YwMEUyQTU3
NCAvKiBUZXh0VXRpbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTZGQjQ3RTYzMjI3NzQyNUEwMEM3QkNCMCAvKiBJbmxpbmVMaW5lQm94LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RkI0N0U2MTIyNzc0
MjVBMDBDN0JDQjAgLyogSW5saW5lTGluZUJveC5oICovOyB9OwogCQk2RkI1RTIxNDIyMUYyNDUz
MDAzOTg5Q0YgLyogQ29udGVudENoYW5nZU9ic2VydmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RkI1RTIxMjIyMUYyNDQ3MDAzOTg5Q0YgLyogQ29u
dGVudENoYW5nZU9ic2VydmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJNkZDRTFBMUEyMjYxOEFCRDAwNEYwMzQzIC8qIERpc3BsYXlSdW4uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZGQ0UxQTE4MjI2
MThBQjMwMDRGMDM0MyAvKiBEaXNwbGF5UnVuLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNkZEOUNENTQyMjdFMjFDODAwRTUzOTU3IC8qIERpc3Bs
YXlSZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2
RkQ5Q0Q1MjIyN0UyMUM4MDBFNTM5NTcgLyogRGlzcGxheVJlY3QuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2RkUxOTgxNzIxNzgzOTdDMDA0NDZG
MDggLyogSW5saW5lTGluZUJyZWFrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDZGRTE5ODE1MjE3ODM5N0MwMDQ0NkYwOCAvKiBJbmxpbmVMaW5lQnJl
YWtlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTZGRTdDRkEyMjE3N0VFRjIwMDVCMTU3MyAvKiBJbmxpbmVJdGVtLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RkU3Q0ZBMDIxNzdFRUYxMDA1QjE1NzMg
LyogSW5saW5lSXRlbS5oICovOyB9OwogCQk2RkU3Q0ZBNDIxNzdFRjEwMDA1QjE1NzMgLyogTGF5
b3V0TGluZUJyZWFrQm94LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA2RkU3Q0ZBMzIxNzdFRjEwMDA1QjE1NzMgLyogTGF5b3V0TGluZUJyZWFrQm94Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTkxMDIs
MTUgKzkxMDQsMTQgQEAKIAkJNkVFOEE3NzAxMEY4MDNGMzAwNUE0QTI0IC8qIEpTV2ViR0xDb250
ZXh0QXR0cmlidXRlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBK
U1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk2RUU4QTc3MTEwRjgwM0YzMDA1QTRBMjQgLyogSlNXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV2ViR0xDb250ZXh0QXR0cmlidXRl
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RjA4MzBERjIwQjQ2OTUxMDA4QTk0
NUIgLyogQmxvY2tGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEJsb2NrRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTZGMjE5RDc0MjE3OEQzNzEwMEJCMDMzQyAvKiBJbmxpbmVSdW4uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5saW5lUnVuLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTZGMUNDMURDMjI1RjhCNDEwMDcyMEFEMiAvKiBJbmxpbmVUZXh0SXRl
bS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmxpbmVUZXh0SXRlbS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTZGMUNDMUREMjI1RjhCNDIwMDcyMEFEMiAvKiBJbmxpbmVUZXh0
SXRlbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBJbmxpbmVUZXh0SXRlbS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk2RjIyMkI3NDFBQjUyRDY0MDA5NDY1MUEgLyogV2ViR0xWZXJ0ZXhBcnJh
eU9iamVjdEJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkYyMjJCNzUxQUI1MkQ4QTAwOTQ2NTFB
IC8qIFdlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFdlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkYyNUIyMDAyMjBBODVBQjAwMDAwMTFCIC8qIElubGluZUZv
cm1hdHRpbmdDb250ZXh0TGluZUxheW91dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmxpbmVG
b3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk2RjM1RUZBRjIxODdDQkQ1MDA0NEUwRjQgLyogSW5saW5lRm9ybWF0dGluZ0NvbnRleHRH
ZW9tZXRyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmxpbmVG
b3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNkYzRTFGNUYyMTM2MTQxNzAwQTY1QTA4IC8qIEZsb2F0Qm94LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEZsb2F0Qm94LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkYzRTFG
NjEyMTM2MTQxNzAwQTY1QTA4IC8qIEZsb2F0Qm94LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZsb2F0Qm94
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZGNTIxN0M0MjE3N0Y1QTYwMDY1ODNC
QiAvKiBJbmxpbmVSdW5Qcm92aWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJbmxpbmVSdW5Qcm92aWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2RjUy
MTdDNjIxNzdGNUE2MDA2NTgzQkIgLyogSW5saW5lUnVuUHJvdmlkZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5saW5lUnVuUHJvdmlkZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk2RjczOTE4QzIxMDZDRUREMDA2QUYyNjIgLyogTGF5b3V0
VW5pdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGF5b3V0VW5pdHMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNkY3Q0EzQzQyMDhDMjk1NjAwMkYyOUFCIC8qIExheW91dFN0YXRlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IExheW91dFN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTZGN0NBM0M1MjA4QzI5NTYwMDJGMjlBQiAvKiBMYXlvdXRTdGF0ZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBMYXlvdXRTdGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05
MTQ1LDggKzkxNDYsMTEgQEAKIAkJNkY5OTVBMzAxQTcwODMzNzAwQTczNUY0IC8qIEpTV2ViR0xW
ZXJ0ZXhBcnJheU9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dl
YkdMVmVydGV4QXJyYXlPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkZC
MTFCNTkyMTc4M0ZDRjAwRTJBNTc0IC8qIFRleHRVdGlsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFRleHRVdGlsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZG
QjExQjVCMjE3ODNGQ0YwMEUyQTU3NCAvKiBUZXh0VXRpbC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBUZXh0VXRpbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTZGQjQ3RTYxMjI3NzQyNUEwMEM3QkNCMCAvKiBJbmxpbmVMaW5lQm94LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElubGluZUxpbmVCb3guaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNkZCNUUyMTIyMjFGMjQ0NzAwMzk4OUNGIC8qIENvbnRlbnRDaGFu
Z2VPYnNlcnZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb250ZW50Q2hhbmdlT2JzZXJ2ZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkZCQjg2MDUyMEI0NjRCNjAwREFEOTM4IC8qIEZv
cm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9ybWF0dGlu
Z0NvbnRleHRHZW9tZXRyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZGQ0Ux
QTE4MjI2MThBQjMwMDRGMDM0MyAvKiBEaXNwbGF5UnVuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpc3Bs
YXlSdW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkZEOUNENTIyMjdFMjFDODAw
RTUzOTU3IC8qIERpc3BsYXlSZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IERpc3BsYXlSZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGRTE5ODEzMjE3
ODM5N0IwMDQ0NkYwOCAvKiBJbmxpbmVMaW5lQnJlYWtlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBJbmxpbmVMaW5lQnJlYWtlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTZGRTE5ODE1MjE3ODM5N0MwMDQ0NkYwOCAvKiBJbmxpbmVMaW5lQnJl
YWtlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmxpbmVMaW5lQnJlYWtl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RkU3QUEyNjIxQzM3QjYzMDAyOTZE
Q0QgLyogTWFyZ2luVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFyZ2luVHlwZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2MzYwLDExICsxNjM2NCwxMSBAQAogCQkJCTExMjNB
RkREMjA5QUJCQkEwMDczNkFDQyAvKiBJbmxpbmVJbnZhbGlkYXRpb24uY3BwICovLAogCQkJCTEx
MjNBRkRDMjA5QUJCQkEwMDczNkFDQyAvKiBJbmxpbmVJbnZhbGlkYXRpb24uaCAqLywKIAkJCQk2
RkU3Q0ZBMDIxNzdFRUYxMDA1QjE1NzMgLyogSW5saW5lSXRlbS5oICovLAorCQkJCTZGQjQ3RTYx
MjI3NzQyNUEwMEM3QkNCMCAvKiBJbmxpbmVMaW5lQm94LmggKi8sCiAJCQkJNkZFMTk4MTMyMTc4
Mzk3QjAwNDQ2RjA4IC8qIElubGluZUxpbmVCcmVha2VyLmNwcCAqLywKIAkJCQk2RkUxOTgxNTIx
NzgzOTdDMDA0NDZGMDggLyogSW5saW5lTGluZUJyZWFrZXIuaCAqLywKLQkJCQk2RjIxOUQ3NDIx
NzhEMzcxMDBCQjAzM0MgLyogSW5saW5lUnVuLmggKi8sCi0JCQkJNkY1MjE3QzYyMTc3RjVBNjAw
NjU4M0JCIC8qIElubGluZVJ1blByb3ZpZGVyLmNwcCAqLywKLQkJCQk2RjUyMTdDNDIxNzdGNUE2
MDA2NTgzQkIgLyogSW5saW5lUnVuUHJvdmlkZXIuaCAqLywKKwkJCQk2RjFDQzFEQzIyNUY4QjQx
MDA3MjBBRDIgLyogSW5saW5lVGV4dEl0ZW0uY3BwICovLAorCQkJCTZGMUNDMUREMjI1RjhCNDIw
MDcyMEFEMiAvKiBJbmxpbmVUZXh0SXRlbS5oICovLAogCQkJKTsKIAkJCXBhdGggPSBpbmxpbmVm
b3JtYXR0aW5nOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTE2Mzc0LDYgKzE2Mzc4
LDggQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCTExOTlGQTVBMjA4RTNDN0YwMDIzNThDQyAvKiBE
aXNwbGF5Qm94LmNwcCAqLywKIAkJCQkxMTk5RkE1OTIwOEUzQzdGMDAyMzU4Q0MgLyogRGlzcGxh
eUJveC5oICovLAorCQkJCTZGRDlDRDUyMjI3RTIxQzgwMEU1Mzk1NyAvKiBEaXNwbGF5UmVjdC5o
ICovLAorCQkJCTZGQ0UxQTE4MjI2MThBQjMwMDRGMDM0MyAvKiBEaXNwbGF5UnVuLmggKi8sCiAJ
CQkpOwogCQkJcGF0aCA9IGRpc3BsYXl0cmVlOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
QEAgLTE2OTk4LDExICsxNzAwNCwxMSBAQAogCQkxQ0EwQzJGNjIxRUVEQUQyMDBBMTE4NjAgLyog
QVNUICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQk1MjE1
ODYyQzIyOTM3N0I3MDA1OTI1RUYgLyogV0hMU0xBU1QuaCAqLywKIAkJCQkxQzg0MEI5MDIxRUMz
MEY5MDBEMDUwMEQgLyogV0hMU0xBZGRyZXNzU3BhY2UuaCAqLywKIAkJCQlDMjFCRjcyNTIxQ0Q4
OUUyMDAyMjc5NzkgLyogV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaCAqLywKIAkJCQlDMjFCRjcw
OTIxQ0Q4OUNBMDAyMjc5NzkgLyogV0hMU0xBcnJheVR5cGUuaCAqLywKIAkJCQlDMjFCRjczMDIx
Q0Q4OUVEMDAyMjc5NzkgLyogV0hMU0xBc3NpZ25tZW50RXhwcmVzc2lvbi5oICovLAorCQkJCTUy
MTU4NjJDMjI5Mzc3QjcwMDU5MjVFRiAvKiBXSExTTEFTVC5oICovLAogCQkJCUMyMUJGNzBBMjFD
RDg5Q0IwMDIyNzk3OSAvKiBXSExTTEJhc2VGdW5jdGlvbkF0dHJpYnV0ZS5oICovLAogCQkJCUMy
MUJGNkZBMjFDRDg5QkUwMDIyNzk3OSAvKiBXSExTTEJhc2VTZW1hbnRpYy5oICovLAogCQkJCUMy
MUJGNzFFMjFDRDg5REMwMDIyNzk3OSAvKiBXSExTTEJsb2NrLmggKi8sCkBAIC0yODc5NSwxMSAr
Mjg4MDEsMTMgQEAKIAkJCQkwRkU1RkJENTFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RJ
dGVtcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNUZCRDcxQzNERDUxRTAwMDdBMkNBIC8qIERp
c3BsYXlMaXN0UmVjb3JkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTVGQkQ5MUMzREQ1MUUw
MDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlcGxheWVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk2RkQ5
Q0Q1NDIyN0UyMUM4MDBFNTM5NTcgLyogRGlzcGxheVJlY3QuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTQ5QUYyRDY5MTQ0MzVEMDUwMDE2QTc4NCAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3IuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTJEMjlFQ0M2MTkyRUNDODMwMDk4NEI3OCAvKiBEaXNwbGF5UmVmcmVz
aE1vbml0b3JDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTJEMjlFQ0NBMTkyRjFGMUQwMDk4
NEI3OCAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3JJT1MuaCBpbiBIZWFkZXJzICovLAogCQkJCTJE
RTcwMDIzMTkyRkU4MkEwMEIwOTc1QyAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3JNYWMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTJEMjlFQ0M4MTkyRUNDODMwMDk4NEI3OCAvKiBEaXNwbGF5UmVmcmVz
aE1vbml0b3JNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQk2RkNFMUExQTIyNjE4QUJEMDA0
RjAzNDMgLyogRGlzcGxheVJ1bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQzMTYwOTExMkIwMjZG
NzAwQzFBMzU5IC8qIERpc3RhbmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NDczMEQ3NzEyNDhG
MEIzMDBEM0E5QzkgLyogRGlzdGFudExpZ2h0U291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
MkYzNEZFNjBFODJGODE0MDBGNjI3Q0QgLyogRE5TLmggaW4gSGVhZGVycyAqLywKQEAgLTI5NDI5
LDEyICsyOTQzNywxMiBAQAogCQkJCTExMzEwQ0Y4MjBCQTRBNkEwMDY1QThEMCAvKiBJbmxpbmVJ
bnZhbGlkYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTZGRTdDRkEyMjE3N0VFRjIwMDVCMTU3
MyAvKiBJbmxpbmVJdGVtLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0U3ODkxNjExMjBENjA4MDA2
MEVDRTUgLyogSW5saW5lSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTZGQjQ3RTYzMjI3
NzQyNUEwMEM3QkNCMCAvKiBJbmxpbmVMaW5lQm94LmggaW4gSGVhZGVycyAqLywKIAkJCQk2RkUx
OTgxNzIxNzgzOTdDMDA0NDZGMDggLyogSW5saW5lTGluZUJyZWFrZXIuaCBpbiBIZWFkZXJzICov
LAotCQkJCTZGMjE5RDc3MjE3OEQzNzIwMEJCMDMzQyAvKiBJbmxpbmVSdW4uaCBpbiBIZWFkZXJz
ICovLAotCQkJCTZGNTIxN0M3MjE3N0Y1QTcwMDY1ODNCQiAvKiBJbmxpbmVSdW5Qcm92aWRlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQUE0QzNBNzcwQjJCMTY3OTAwMjMzNEEyIC8qIElubGluZVN0
eWxlU2hlZXRPd25lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFQTQ4NUEwOTdEOTMwMjAwOTRD
OUU0IC8qIElubGluZVRleHRCb3guaCBpbiBIZWFkZXJzICovLAogCQkJCTFDMDEwNzAxMTkyNTk0
REYwMDhBNDIwMSAvKiBJbmxpbmVUZXh0Qm94U3R5bGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTZG
MUNDMURFMjI1RjhCNDkwMDcyMEFEMiAvKiBJbmxpbmVUZXh0SXRlbS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNTEwQTU4RTUxQkFBNDBCMTAwQzE5MjgyIC8qIEluUHJvY2Vzc0lEQlNlcnZlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMkVCNzY3NTcxREExOUJERjAwM0UyM0I1IC8qIElucHV0RXZlbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUU1MkVGREY0MjExMjg3NUEwMEFEMjgyQSAvKiBJbnB1dE1v
ZGUuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zv
cm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1h
dHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwCmluZGV4IDQxMzZhZDJiZjdlMzk3YTY5OTRiMWY2NjFm
ODQ3ZDNjNWM2NWRhYjIuLjVlODk4NmJmYjcyZGRlOGY0MzA1NzNkM2MwMjk4MDI2NDk3ZjFlMzgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nQ29udGV4dEdlb21l
dHJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvRm9ybWF0dGluZ0NvbnRleHRHZW9t
ZXRyeS5jcHAKQEAgLTExMiw4ICsxMTIsOCBAQCBzdGF0aWMgTGF5b3V0VW5pdCBjb250ZW50SGVp
Z2h0Rm9yRm9ybWF0dGluZ0NvbnRleHRSb290KGNvbnN0IExheW91dFN0YXRlJiBsYXlvdQogICAg
ICAgICAvLyBUaGlzIGlzIHRlbXAgYW5kIHdpbGwgYmUgcmVwbGFjZWQgYnkgdGhlIGNvcnJlY3Qg
ZGlzcGxheSBib3ggb25jZSBpbmxpbmUgcnVucyBtb3ZlIG92ZXIgdG8gdGhlIGRpc3BsYXkgdHJl
ZS4KICAgICAgICAgYXV0byYgaW5saW5lUnVucyA9IGRvd25jYXN0PElubGluZUZvcm1hdHRpbmdT
dGF0ZT4obGF5b3V0U3RhdGUuZXN0YWJsaXNoZWRGb3JtYXR0aW5nU3RhdGUobGF5b3V0Qm94KSku
aW5saW5lUnVucygpOwogICAgICAgICBpZiAoIWlubGluZVJ1bnMuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgICAgICB0b3AgPSBpbmxpbmVSdW5zWzBdLmxvZ2ljYWxUb3AoKTsKLSAgICAgICAgICAgIGJv
dHRvbSA9ICBpbmxpbmVSdW5zLmxhc3QoKS5sb2dpY2FsQm90dG9tKCk7CisgICAgICAgICAgICB0
b3AgPSBpbmxpbmVSdW5zWzBdLT5sb2dpY2FsVG9wKCk7CisgICAgICAgICAgICBib3R0b20gPSAg
aW5saW5lUnVucy5sYXN0KCktPmxvZ2ljYWxCb3R0b20oKTsKICAgICAgICAgfQogICAgIH0gZWxz
ZSBpZiAoZm9ybWF0dGluZ1Jvb3RDb250YWluZXIuZXN0YWJsaXNoZXNCbG9ja0Zvcm1hdHRpbmdD
b250ZXh0KCkgfHwgbGF5b3V0Qm94LmlzRG9jdW1lbnRCb3goKSkgewogICAgICAgICBpZiAoZm9y
bWF0dGluZ1Jvb3RDb250YWluZXIuaGFzSW5GbG93Q2hpbGQoKSkgewpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbGF5b3V0L1ZlcmlmaWNhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvVmVyaWZpY2F0aW9uLmNwcAppbmRleCAyZTc3YzM5ZTkyMTQ0OTQyZWYyOWU0MGU0Yzc0MzZl
NTExMjAwYmMyLi5kN2ZlNmE5ZjE5MTc0OTVhZTU2ZWViZGQ3OGI1YWZlNDhmNWNkYzFjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvVmVyaWZpY2F0aW9uLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvVmVyaWZpY2F0aW9uLmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2lu
Y2x1ZGUgIkxheW91dFRyZWVCdWlsZGVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyQm94LmgiCiAjaW5j
bHVkZSAiUmVuZGVySW5saW5lLmgiCisjaW5jbHVkZSAiUmVuZGVyTGluZUJyZWFrLmgiCiAjaW5j
bHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIApA
QCAtNDYsNyArNDcsNyBAQCBzdGF0aWMgYm9vbCBhcmVFc3NlbnRpYWxseUVxdWFsKGZsb2F0IGEs
IExheW91dFVuaXQgYikKICAgICBpZiAoYSA9PSBiLnRvRmxvYXQoKSkKICAgICAgICAgcmV0dXJu
IHRydWU7CiAKLSAgICByZXR1cm4gZmFicyhhIC0gYi50b0Zsb2F0KCkpIDw9IDggKiBMYXlvdXRV
bml0OjplcHNpbG9uKCk7CisgICAgcmV0dXJuIGZhYnMoYSAtIGIudG9GbG9hdCgpKSA8PSAxMCAq
IExheW91dFVuaXQ6OmVwc2lsb24oKTsKIH0KIAogc3RhdGljIGJvb2wgb3V0cHV0TWlzbWF0Y2hp
bmdTaW1wbGVMaW5lSW5mb3JtYXRpb25JZk5lZWRlZChUZXh0U3RyZWFtJiBzdHJlYW0sIGNvbnN0
IExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgY29uc3QgUmVuZGVyQmxvY2tGbG93JiBibG9ja0Zs
b3csIGNvbnN0IENvbnRhaW5lciYgaW5saW5lRm9ybWF0dGluZ1Jvb3QpCkBAIC03MiwzMyArNzMs
MzcgQEAgc3RhdGljIGJvb2wgb3V0cHV0TWlzbWF0Y2hpbmdTaW1wbGVMaW5lSW5mb3JtYXRpb25J
Zk5lZWRlZChUZXh0U3RyZWFtJiBzdHJlYW0sIGMKICAgICAgICAgYXV0byYgc2ltcGxlUnVuID0g
bGluZUxheW91dERhdGEtPnJ1bkF0KGkpOwogICAgICAgICBhdXRvJiBpbmxpbmVSdW4gPSBpbmxp
bmVSdW5MaXN0W2ldOwogCi0gICAgICAgIGF1dG8gbWF0Y2hpbmdSdW5zID0gYXJlRXNzZW50aWFs
bHlFcXVhbChzaW1wbGVSdW4ubG9naWNhbExlZnQsIGlubGluZVJ1bi5sb2dpY2FsTGVmdCgpKSAm
JiBhcmVFc3NlbnRpYWxseUVxdWFsKHNpbXBsZVJ1bi5sb2dpY2FsUmlnaHQsIGlubGluZVJ1bi5s
b2dpY2FsUmlnaHQoKSk7Ci0gICAgICAgIGlmIChtYXRjaGluZ1J1bnMpCi0gICAgICAgICAgICBt
YXRjaGluZ1J1bnMgPSAoc2ltcGxlUnVuLnN0YXJ0ID09IGlubGluZVJ1bi50ZXh0Q29udGV4dCgp
LT5zdGFydCgpICYmIHNpbXBsZVJ1bi5lbmQgPT0gKGlubGluZVJ1bi50ZXh0Q29udGV4dCgpLT5z
dGFydCgpICsgaW5saW5lUnVuLnRleHRDb250ZXh0KCktPmxlbmd0aCgpKSk7CisgICAgICAgIGF1
dG8gbWF0Y2hpbmdSdW5zID0gYXJlRXNzZW50aWFsbHlFcXVhbChzaW1wbGVSdW4ubG9naWNhbExl
ZnQsIGlubGluZVJ1bi0+bG9naWNhbExlZnQoKSkgJiYgYXJlRXNzZW50aWFsbHlFcXVhbChzaW1w
bGVSdW4ubG9naWNhbFJpZ2h0LCBpbmxpbmVSdW4tPmxvZ2ljYWxSaWdodCgpKTsKKyAgICAgICAg
aWYgKG1hdGNoaW5nUnVucyAmJiBpbmxpbmVSdW4tPnRleHRDb250ZXh0KCkpIHsKKyAgICAgICAg
ICAgIG1hdGNoaW5nUnVucyA9IHNpbXBsZVJ1bi5zdGFydCA9PSBpbmxpbmVSdW4tPnRleHRDb250
ZXh0KCktPnN0YXJ0KCkgJiYgc2ltcGxlUnVuLmVuZCA9PSBpbmxpbmVSdW4tPnRleHRDb250ZXh0
KCktPmVuZCgpOworICAgICAgICAgICAgLy8gU0xMIGhhbmRsZXMgc3RyaW5ncyBpbiBhIG1vcmUg
Y29uY2F0ZW5hdGVkIGZvcm1hdCA8ZGl2PmZvbzxicj5iYXI8L2Rpdj4gLT4gZm9vIC0+IDAsMyBi
YXIgLT4gMyw2IHZzLiAwLDMgYW5kIDAsMworICAgICAgICAgICAgaWYgKCFtYXRjaGluZ1J1bnMp
CisgICAgICAgICAgICAgICAgbWF0Y2hpbmdSdW5zID0gKHNpbXBsZVJ1bi5lbmQgLSBzaW1wbGVS
dW4uc3RhcnQpID09IChpbmxpbmVSdW4tPnRleHRDb250ZXh0KCktPmVuZCgpIC0gaW5saW5lUnVu
LT50ZXh0Q29udGV4dCgpLT5zdGFydCgpKTsgCisgICAgICAgIH0KICAgICAgICAgaWYgKG1hdGNo
aW5nUnVucykKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIHN0cmVhbSA8PCAiTWlz
bWF0Y2hpbmc6IHNpbXBsZSBydW4oIiA8PCBzaW1wbGVSdW4uc3RhcnQgPDwgIiwgIiA8PCBzaW1w
bGVSdW4uZW5kIDw8ICIpICgiIDw8IHNpbXBsZVJ1bi5sb2dpY2FsTGVmdCA8PCAiLCAiIDw8IHNp
bXBsZVJ1bi5sb2dpY2FsUmlnaHQgPDwgIikgbGF5b3V0IHJ1bigiIDw8IGlubGluZVJ1bi50ZXh0
Q29udGV4dCgpLT5zdGFydCgpIDw8ICIsICIgPDwgaW5saW5lUnVuLnRleHRDb250ZXh0KCktPnN0
YXJ0KCkgKyBpbmxpbmVSdW4udGV4dENvbnRleHQoKS0+bGVuZ3RoKCkgPDwgIikgKCIgPDwgaW5s
aW5lUnVuLmxvZ2ljYWxMZWZ0KCkgPDwgIiwgIiA8PCBpbmxpbmVSdW4ubG9naWNhbFJpZ2h0KCkg
PDwgIikiOworICAgICAgICBzdHJlYW0gPDwgIk1pc21hdGNoaW5nOiBzaW1wbGUgcnVuKCIgPDwg
c2ltcGxlUnVuLnN0YXJ0IDw8ICIsICIgPDwgc2ltcGxlUnVuLmVuZCA8PCAiKSAoIiA8PCBzaW1w
bGVSdW4ubG9naWNhbExlZnQgPDwgIiwgIiA8PCBzaW1wbGVSdW4ubG9naWNhbFJpZ2h0IDw8ICIp
IGxheW91dCBydW4oIiA8PCBpbmxpbmVSdW4tPnRleHRDb250ZXh0KCktPnN0YXJ0KCkgPDwgIiwg
IiA8PCBpbmxpbmVSdW4tPnRleHRDb250ZXh0KCktPmVuZCgpIDw8ICIpICgiIDw8IGlubGluZVJ1
bi0+bG9naWNhbExlZnQoKSA8PCAiLCAiIDw8IGlubGluZVJ1bi0+bG9naWNhbFJpZ2h0KCkgPDwg
IikiOwogICAgICAgICBzdHJlYW0ubmV4dExpbmUoKTsKICAgICAgICAgbWlzbWF0Y2hlZCA9IHRy
dWU7CiAgICAgfQogICAgIHJldHVybiBtaXNtYXRjaGVkOwogfQogCi1zdGF0aWMgYm9vbCBjaGVj
a0Zvck1hdGNoaW5nTm9uVGV4dFJ1bnMoY29uc3QgSW5saW5lUnVuJiBpbmxpbmVSdW4sIGNvbnN0
IFdlYkNvcmU6OklubGluZUJveCYgaW5saW5lQm94KQorc3RhdGljIGJvb2wgY2hlY2tGb3JNYXRj
aGluZ05vblRleHRSdW5zKGNvbnN0IERpc3BsYXk6OlJ1biYgaW5saW5lUnVuLCBjb25zdCBXZWJD
b3JlOjpJbmxpbmVCb3gmIGlubGluZUJveCkKIHsKICAgICByZXR1cm4gYXJlRXNzZW50aWFsbHlF
cXVhbChpbmxpbmVCb3gubG9naWNhbExlZnQoKSwgaW5saW5lUnVuLmxvZ2ljYWxMZWZ0KCkpCiAg
ICAgICAgICYmIGFyZUVzc2VudGlhbGx5RXF1YWwoaW5saW5lQm94LmxvZ2ljYWxSaWdodCgpLCBp
bmxpbmVSdW4ubG9naWNhbFJpZ2h0KCkpCiAgICAgICAgICYmIGFyZUVzc2VudGlhbGx5RXF1YWwo
aW5saW5lQm94LmxvZ2ljYWxIZWlnaHQoKSwgaW5saW5lUnVuLmxvZ2ljYWxIZWlnaHQoKSk7CiB9
CiAKLXN0YXRpYyBib29sIGNoZWNrRm9yTWF0Y2hpbmdUZXh0UnVucyhjb25zdCBJbmxpbmVSdW4m
IGlubGluZVJ1biwgZmxvYXQgbG9naWNhbExlZnQsIGZsb2F0IGxvZ2ljYWxSaWdodCwgdW5zaWdu
ZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCwgZmxvYXQgbG9naWNhbEhlaWdodCkKK3N0YXRpYyBib29s
IGNoZWNrRm9yTWF0Y2hpbmdUZXh0UnVucyhjb25zdCBEaXNwbGF5OjpSdW4mIGlubGluZVJ1biwg
Y29uc3QgSW5saW5lVGV4dEJveCYgaW5saW5lVGV4dEJveCkKIHsKLSAgICByZXR1cm4gYXJlRXNz
ZW50aWFsbHlFcXVhbChsb2dpY2FsTGVmdCwgaW5saW5lUnVuLmxvZ2ljYWxMZWZ0KCkpCi0gICAg
ICAgICYmIGFyZUVzc2VudGlhbGx5RXF1YWwobG9naWNhbFJpZ2h0LCBpbmxpbmVSdW4ubG9naWNh
bFJpZ2h0KCkpCi0gICAgICAgICYmIHN0YXJ0ID09IGlubGluZVJ1bi50ZXh0Q29udGV4dCgpLT5z
dGFydCgpCi0gICAgICAgICYmIChlbmQgPT0gKGlubGluZVJ1bi50ZXh0Q29udGV4dCgpLT5zdGFy
dCgpICsgaW5saW5lUnVuLnRleHRDb250ZXh0KCktPmxlbmd0aCgpKSkKLSAgICAgICAgJiYgYXJl
RXNzZW50aWFsbHlFcXVhbChsb2dpY2FsSGVpZ2h0LCBpbmxpbmVSdW4ubG9naWNhbEhlaWdodCgp
KTsKKyAgICByZXR1cm4gYXJlRXNzZW50aWFsbHlFcXVhbChpbmxpbmVUZXh0Qm94LmxvZ2ljYWxM
ZWZ0KCksIGlubGluZVJ1bi5sb2dpY2FsTGVmdCgpKQorICAgICAgICAmJiBhcmVFc3NlbnRpYWxs
eUVxdWFsKGlubGluZVRleHRCb3gubG9naWNhbFJpZ2h0KCksIGlubGluZVJ1bi5sb2dpY2FsUmln
aHQoKSkKKyAgICAgICAgJiYgaW5saW5lVGV4dEJveC5zdGFydCgpID09IGlubGluZVJ1bi50ZXh0
Q29udGV4dCgpLT5zdGFydCgpCisgICAgICAgICYmIChpbmxpbmVUZXh0Qm94LmVuZCgpICsgMSkg
PT0gaW5saW5lUnVuLnRleHRDb250ZXh0KCktPmVuZCgpCisgICAgICAgICYmIGFyZUVzc2VudGlh
bGx5RXF1YWwoaW5saW5lVGV4dEJveC5sb2dpY2FsSGVpZ2h0KCksIGlubGluZVJ1bi5sb2dpY2Fs
SGVpZ2h0KCkpOwogfQogCiBzdGF0aWMgdm9pZCBjb2xsZWN0Rmxvd0JveFN1YnRyZWUoY29uc3Qg
SW5saW5lRmxvd0JveCYgZmxvd2JveCwgVmVjdG9yPFdlYkNvcmU6OklubGluZUJveCo+JiBpbmxp
bmVCb3hlcykKQEAgLTEyNiwxOSArMTMxLDYgQEAgc3RhdGljIHZvaWQgY29sbGVjdElubGluZUJv
eGVzKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgcm9vdCwgVmVjdG9yPFdlYkNvcmU6OklubGkKICAg
ICB9CiB9CiAKLXN0YXRpYyBMYXlvdXRVbml0IHJlc29sdmVGb3JSZWxhdGl2ZVBvc2l0aW9uSWZO
ZWVkZWQoY29uc3QgSW5saW5lVGV4dEJveCYgaW5saW5lVGV4dEJveCkKLXsKLSAgICBMYXlvdXRV
bml0IHhPZmZzZXQ7Ci0gICAgYXV0byogcGFyZW50ID0gaW5saW5lVGV4dEJveC5wYXJlbnQoKTsK
LSAgICB3aGlsZSAoaXM8SW5saW5lRmxvd0JveD4ocGFyZW50KSkgewotICAgICAgICBhdXRvJiBy
ZW5kZXJlciA9IHBhcmVudC0+cmVuZGVyZXIoKTsKLSAgICAgICAgaWYgKHJlbmRlcmVyLmlzSW5G
bG93UG9zaXRpb25lZCgpKQotICAgICAgICAgICAgeE9mZnNldCA9IHJlbmRlcmVyLm9mZnNldEZv
ckluRmxvd1Bvc2l0aW9uKCkud2lkdGgoKTsKLSAgICAgICAgcGFyZW50ID0gcGFyZW50LT5wYXJl
bnQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHhPZmZzZXQ7Ci19Ci0KIHN0YXRpYyBib29sIG91dHB1
dE1pc21hdGNoaW5nQ29tcGxleExpbmVJbmZvcm1hdGlvbklmTmVlZGVkKFRleHRTdHJlYW0mIHN0
cmVhbSwgY29uc3QgTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBjb25zdCBSZW5kZXJCbG9ja0Zs
b3cmIGJsb2NrRmxvdywgY29uc3QgQ29udGFpbmVyJiBpbmxpbmVGb3JtYXR0aW5nUm9vdCkKIHsK
ICAgICBhdXRvJiBpbmxpbmVGb3JtYXR0aW5nU3RhdGUgPSBsYXlvdXRTdGF0ZS5lc3RhYmxpc2hl
ZEZvcm1hdHRpbmdTdGF0ZShpbmxpbmVGb3JtYXR0aW5nUm9vdCk7CkBAIC0xNTgsNjYgKzE1MCwz
MCBAQCBzdGF0aWMgYm9vbCBvdXRwdXRNaXNtYXRjaGluZ0NvbXBsZXhMaW5lSW5mb3JtYXRpb25J
Zk5lZWRlZChUZXh0U3RyZWFtJiBzdHJlYW0sCiAgICAgfQogCiAgICAgZm9yICh1bnNpZ25lZCBp
bmxpbmVCb3hJbmRleCA9IDA7IGlubGluZUJveEluZGV4IDwgaW5saW5lQm94ZXMuc2l6ZSgpICYm
IHJ1bkluZGV4IDwgaW5saW5lUnVuTGlzdC5zaXplKCk7ICsraW5saW5lQm94SW5kZXgpIHsKKyAg
ICAgICAgYXV0byYgaW5saW5lUnVuID0gaW5saW5lUnVuTGlzdFtydW5JbmRleF07CiAgICAgICAg
IGF1dG8qIGlubGluZUJveCA9IGlubGluZUJveGVzW2lubGluZUJveEluZGV4XTsKICAgICAgICAg
YXV0byogaW5saW5lVGV4dEJveCA9IGlzPElubGluZVRleHRCb3g+KGlubGluZUJveCkgPyBkb3du
Y2FzdDxJbmxpbmVUZXh0Qm94PihpbmxpbmVCb3gpIDogbnVsbHB0cjsKKyAgICAgICAgYm9vbCBt
YXRjaGluZ1J1bnMgPSBpbmxpbmVUZXh0Qm94ID8gY2hlY2tGb3JNYXRjaGluZ1RleHRSdW5zKCpp
bmxpbmVSdW4sICppbmxpbmVUZXh0Qm94KSA6IG1hdGNoaW5nUnVucyA9IGNoZWNrRm9yTWF0Y2hp
bmdOb25UZXh0UnVucygqaW5saW5lUnVuLCAqaW5saW5lQm94KTsKIAotICAgICAgICBhdXRvJiBp
bmxpbmVSdW4gPSBpbmxpbmVSdW5MaXN0W3J1bkluZGV4XTsKLSAgICAgICAgYXV0byBtYXRjaGlu
Z1J1bnMgPSBmYWxzZTsKLSAgICAgICAgaWYgKGlubGluZVRleHRCb3gpIHsKLSAgICAgICAgICAg
IGF1dG8geE9mZnNldCA9IHJlc29sdmVGb3JSZWxhdGl2ZVBvc2l0aW9uSWZOZWVkZWQoKmlubGlu
ZVRleHRCb3gpOwotICAgICAgICAgICAgbWF0Y2hpbmdSdW5zID0gY2hlY2tGb3JNYXRjaGluZ1Rl
eHRSdW5zKGlubGluZVJ1biwgaW5saW5lVGV4dEJveC0+bG9naWNhbExlZnQoKSArIHhPZmZzZXQs
Ci0gICAgICAgICAgICAgICAgaW5saW5lVGV4dEJveC0+bG9naWNhbFJpZ2h0KCkgKyB4T2Zmc2V0
LAotICAgICAgICAgICAgICAgIGlubGluZVRleHRCb3gtPnN0YXJ0KCksCi0gICAgICAgICAgICAg
ICAgaW5saW5lVGV4dEJveC0+ZW5kKCkgKyAxLAotICAgICAgICAgICAgICAgIGlubGluZVRleHRC
b3gtPmxvZ2ljYWxIZWlnaHQoKSk7Ci0KLSAgICAgICAgICAgIC8vIDxzcGFuPmZvb2Jhcjwvc3Bh
bj5mb29iYXIgZ2VuZXJhdGVzIDIgaW5saW5lIHRleHQgYm94ZXMgd2hpbGUgd2Ugb25seSBnZW5l
cmF0ZSBvbmUgaW5saW5lIHJ1bi4KLSAgICAgICAgICAgIC8vIGFsc28gPGRpdj5mb288aW1nIHN0
eWxlPSJmbG9hdDogbGVmdDsiPmJhcjwvZGl2PiB0b28uCi0gICAgICAgICAgICBhdXRvIGlubGlu
ZVJ1bkVuZCA9IGlubGluZVJ1bi50ZXh0Q29udGV4dCgpLT5zdGFydCgpICsgaW5saW5lUnVuLnRl
eHRDb250ZXh0KCktPmxlbmd0aCgpOwotICAgICAgICAgICAgYXV0byB0ZXh0UnVuTWlnaHRCZUV4
dGVuZGVkID0gIW1hdGNoaW5nUnVucyAmJiBpbmxpbmVUZXh0Qm94LT5lbmQoKSA8IGlubGluZVJ1
bkVuZCAmJiBpbmxpbmVCb3hJbmRleCA8IGlubGluZUJveGVzLnNpemUoKSAtIDE7Ci0KLSAgICAg
ICAgICAgIGlmICh0ZXh0UnVuTWlnaHRCZUV4dGVuZGVkKSB7Ci0gICAgICAgICAgICAgICAgYXV0
byBsb2dpY2FsTGVmdCA9IGlubGluZVRleHRCb3gtPmxvZ2ljYWxMZWZ0KCkgKyB4T2Zmc2V0Owot
ICAgICAgICAgICAgICAgIGF1dG8gbG9naWNhbFJpZ2h0ID0gaW5saW5lVGV4dEJveC0+bG9naWNh
bFJpZ2h0KCkgKyB4T2Zmc2V0OwotICAgICAgICAgICAgICAgIGF1dG8gc3RhcnQgPSBpbmxpbmVU
ZXh0Qm94LT5zdGFydCgpOwotICAgICAgICAgICAgICAgIGF1dG8gZW5kID0gaW5saW5lVGV4dEJv
eC0+ZW5kKCkgKyAxOwotICAgICAgICAgICAgICAgIGF1dG8gaW5kZXggPSArK2lubGluZUJveElu
ZGV4OwotICAgICAgICAgICAgICAgIGZvciAoOyBpbmRleCA8IGlubGluZUJveGVzLnNpemUoKTsg
KytpbmRleCkgewotICAgICAgICAgICAgICAgICAgICBhdXRvKiBpbmxpbmVCb3ggPSBpbmxpbmVC
b3hlc1tpbmRleF07Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8qIGlubGluZVRleHRCb3ggPSBp
czxJbmxpbmVUZXh0Qm94PihpbmxpbmVCb3gpID8gZG93bmNhc3Q8SW5saW5lVGV4dEJveD4oaW5s
aW5lQm94KSA6IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgICAgIC8vIENhbid0IG1peCBkaWZm
ZXJlbnQgaW5saW5lIGJveGVzLgotICAgICAgICAgICAgICAgICAgICBpZiAoIWlubGluZVRleHRC
b3gpCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgICAg
ICBhdXRvIHhPZmZzZXQgPSByZXNvbHZlRm9yUmVsYXRpdmVQb3NpdGlvbklmTmVlZGVkKCppbmxp
bmVUZXh0Qm94KTsKLSAgICAgICAgICAgICAgICAgICAgbG9naWNhbFJpZ2h0ID0gaW5saW5lVGV4
dEJveC0+bG9naWNhbFJpZ2h0KCkgKyB4T2Zmc2V0OwotICAgICAgICAgICAgICAgICAgICBlbmQg
Kz0gKGlubGluZVRleHRCb3gtPmVuZCgpICsgMSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChj
aGVja0Zvck1hdGNoaW5nVGV4dFJ1bnMoaW5saW5lUnVuLCBsb2dpY2FsTGVmdCwgbG9naWNhbFJp
Z2h0LCBzdGFydCwgZW5kLCBpbmxpbmVUZXh0Qm94LT5sb2dpY2FsSGVpZ2h0KCkpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBtYXRjaGluZ1J1bnMgPSB0cnVlOwotICAgICAgICAgICAgICAg
ICAgICAgICAgaW5saW5lQm94SW5kZXggPSBpbmRleDsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8g
V2VudCB0b28gZmFyPwotICAgICAgICAgICAgICAgICAgICBpZiAoZW5kID49IGlubGluZVJ1bkVu
ZCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgaWYgKCFtYXRjaGluZ1J1bnMpIHsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYg
KGlzPFJlbmRlckxpbmVCcmVhaz4oaW5saW5lQm94LT5yZW5kZXJlcigpKSkgeworICAgICAgICAg
ICAgICAgIC8vIDxicj4gcG9zaXRpb25pbmcgaXMgd2VpcmQgYXQgdGhpcyBwb2ludC4gSXQgbmVl
ZHMgcHJvcGVyIGJhc2VsaW5lLgorICAgICAgICAgICAgICAgIG1hdGNoaW5nUnVucyA9IHRydWU7
CisgICAgICAgICAgICAgICAgKytydW5JbmRleDsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtYXRjaGluZ1J1bnMg
PSBjaGVja0Zvck1hdGNoaW5nTm9uVGV4dFJ1bnMoaW5saW5lUnVuLCAqaW5saW5lQm94KTsKLQog
Ci0gICAgICAgIGlmICghbWF0Y2hpbmdSdW5zKSB7Ci0gICAgICAgICAgICBzdHJlYW0gPDwgIk1p
c21hdGNoaW5nOiBydW4gIjsKKyAgICAgICAgICAgIHN0cmVhbSA8PCAiTWlzbWF0Y2hpbmc6IHJ1
biI7CiAKICAgICAgICAgICAgIGlmIChpbmxpbmVUZXh0Qm94KQotICAgICAgICAgICAgICAgIHN0
cmVhbSA8PCAiKCIgPDwgaW5saW5lVGV4dEJveC0+c3RhcnQoKSA8PCAiLCAiIDw8IGlubGluZVRl
eHRCb3gtPmVuZCgpICsgMSA8PCAiKSI7Ci0gICAgICAgICAgICBzdHJlYW0gPDwgIiAoIiA8PCBp
bmxpbmVCb3gtPmxvZ2ljYWxMZWZ0KCkgPDwgIiwgIiA8PCBpbmxpbmVCb3gtPmxvZ2ljYWxSaWdo
dCgpIDw8ICIpICgiIDw8IGlubGluZUJveC0+bG9naWNhbFdpZHRoKCkgPDwgIngiIDw8IGlubGlu
ZUJveC0+bG9naWNhbEhlaWdodCgpIDw8ICIpIjsKKyAgICAgICAgICAgICAgICBzdHJlYW0gPDwg
IiAoIiA8PCBpbmxpbmVUZXh0Qm94LT5zdGFydCgpIDw8ICIsICIgPDwgaW5saW5lVGV4dEJveC0+
ZW5kKCkgKyAxIDw8ICIpIjsKKyAgICAgICAgICAgIHN0cmVhbSA8PCAiICgiIDw8IGlubGluZUJv
eC0+bG9naWNhbExlZnQoKSA8PCAiLCAiIDw8IGlubGluZUJveC0+bG9naWNhbFRvcCgpIDw8ICIp
ICgiIDw8IGlubGluZUJveC0+bG9naWNhbFdpZHRoKCkgPDwgIngiIDw8IGlubGluZUJveC0+bG9n
aWNhbEhlaWdodCgpIDw8ICIpIjsKIAotICAgICAgICAgICAgc3RyZWFtIDw8ICJpbmxpbmUgcnVu
ICI7Ci0gICAgICAgICAgICBpZiAoaW5saW5lUnVuLnRleHRDb250ZXh0KCkpCi0gICAgICAgICAg
ICAgICAgc3RyZWFtIDw8ICIoIiA8PCBpbmxpbmVSdW4udGV4dENvbnRleHQoKS0+c3RhcnQoKSA8
PCAiLCAiIDw8IGlubGluZVJ1bi50ZXh0Q29udGV4dCgpLT5zdGFydCgpICsgaW5saW5lUnVuLnRl
eHRDb250ZXh0KCktPmxlbmd0aCgpIDw8ICIpICI7Ci0gICAgICAgICAgICBzdHJlYW0gPDwgIigi
IDw8IGlubGluZVJ1bi5sb2dpY2FsTGVmdCgpIDw8ICIsICIgPDwgaW5saW5lUnVuLmxvZ2ljYWxS
aWdodCgpIDw8ICIpICgiIDw8IGlubGluZVJ1bi5sb2dpY2FsV2lkdGgoKSA8PCAieCIgPDwgaW5s
aW5lUnVuLmxvZ2ljYWxIZWlnaHQoKSA8PCAiKSI7CisgICAgICAgICAgICBzdHJlYW0gPDwgIiBp
bmxpbmUgcnVuIjsKKyAgICAgICAgICAgIGlmIChpbmxpbmVSdW4tPnRleHRDb250ZXh0KCkpCisg
ICAgICAgICAgICAgICAgc3RyZWFtIDw8ICIgKCIgPDwgaW5saW5lUnVuLT50ZXh0Q29udGV4dCgp
LT5zdGFydCgpIDw8ICIsICIgPDwgaW5saW5lUnVuLT50ZXh0Q29udGV4dCgpLT5lbmQoKSA8PCAi
KSI7CisgICAgICAgICAgICBzdHJlYW0gPDwgIiAoIiA8PCBpbmxpbmVSdW4tPmxvZ2ljYWxMZWZ0
KCkgPDwgIiwgIiA8PCBpbmxpbmVSdW4tPmxvZ2ljYWxUb3AoKSA8PCAiKSAoIiA8PCBpbmxpbmVS
dW4tPmxvZ2ljYWxXaWR0aCgpIDw8ICJ4IiA8PCBpbmxpbmVSdW4tPmxvZ2ljYWxIZWlnaHQoKSA8
PCAiKSI7CiAgICAgICAgICAgICBzdHJlYW0ubmV4dExpbmUoKTsKICAgICAgICAgICAgIG1pc21h
dGNoZWQgPSB0cnVlOwogICAgICAgICB9CkBAIC0yNDUsNyArMjAxLDcgQEAgc3RhdGljIGJvb2wg
b3V0cHV0TWlzbWF0Y2hpbmdCbG9ja0JveEluZm9ybWF0aW9uSWZOZWVkZWQoVGV4dFN0cmVhbSYg
c3RyZWFtLCBjb24KICAgICAgICAgLy8gUHJvZHVjZSBhIFJlbmRlckJveCBtYXRjaGluZyBtYXJn
aW4gYm94LgogICAgICAgICBhdXRvIGJvcmRlckJveCA9IGRpc3BsYXlCb3guYm9yZGVyQm94KCk7
CiAKLSAgICAgICAgcmV0dXJuIERpc3BsYXk6OkJveDo6UmVjdCB7CisgICAgICAgIHJldHVybiBE
aXNwbGF5OjpSZWN0IHsKICAgICAgICAgICAgIGJvcmRlckJveC50b3AoKSAtIGRpc3BsYXlCb3gu
bm9uQ29sbGFwc2VkTWFyZ2luQmVmb3JlKCksCiAgICAgICAgICAgICBib3JkZXJCb3gubGVmdCgp
IC0gZGlzcGxheUJveC5jb21wdXRlZE1hcmdpblN0YXJ0KCkudmFsdWVPcigwKSwKICAgICAgICAg
ICAgIGRpc3BsYXlCb3guY29tcHV0ZWRNYXJnaW5TdGFydCgpLnZhbHVlT3IoMCkgKyBib3JkZXJC
b3gud2lkdGgoKSArIGRpc3BsYXlCb3guY29tcHV0ZWRNYXJnaW5FbmQoKS52YWx1ZU9yKDApLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zv
cm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Jsb2Nr
Zm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwCmluZGV4IGY5NjMz
YjQzOGExYjFiMjI3ZGE1Yjg3MTQ2ZmYzMWViYzU2ODYyNWMuLjZkNzdlNWYzMWQ5ZTFiMjY2Njg3
ZTU5ZGQ3Nzg0YWVlNGU3ODNlN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9i
bG9ja2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrRm9ybWF0dGluZ0NvbnRl
eHRHZW9tZXRyeS5jcHAKQEAgLTc2LDggKzc2LDggQEAgSGVpZ2h0QW5kTWFyZ2luIEJsb2NrRm9y
bWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbkZsb3dOb25SZXBsYWNlZEhlaWdodEFuZE1hcmcK
ICAgICAgICAgLy8gMS4gdGhlIGJvdHRvbSBlZGdlIG9mIHRoZSBsYXN0IGxpbmUgYm94LCBpZiB0
aGUgYm94IGVzdGFibGlzaGVzIGEgaW5saW5lIGZvcm1hdHRpbmcgY29udGV4dCB3aXRoIG9uZSBv
ciBtb3JlIGxpbmVzCiAgICAgICAgIGlmIChsYXlvdXRCb3guZXN0YWJsaXNoZXNJbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dCgpKSB7CiAgICAgICAgICAgICAvLyBUaGlzIGlzIHRlbXAgYW5kIHdpbGwg
YmUgcmVwbGFjZWQgYnkgdGhlIGNvcnJlY3QgZGlzcGxheSBib3ggb25jZSBpbmxpbmUgcnVucyBt
b3ZlIG92ZXIgdG8gdGhlIGRpc3BsYXkgdHJlZS4KLSAgICAgICAgICAgIGF1dG8mIGlubGluZVJ1
bnMgPSBkb3duY2FzdDxJbmxpbmVGb3JtYXR0aW5nU3RhdGU+KGxheW91dFN0YXRlLmVzdGFibGlz
aGVkRm9ybWF0dGluZ1N0YXRlKGxheW91dEJveCkpLmlubGluZVJ1bnMoKTsKLSAgICAgICAgICAg
IGF1dG8gYm90dG9tRWRnZSA9IGlubGluZVJ1bnMuaXNFbXB0eSgpID8gTGF5b3V0VW5pdCgpIDog
aW5saW5lUnVucy5sYXN0KCkubG9naWNhbEJvdHRvbSgpOworICAgICAgICAgICAgYXV0byYgbGlu
ZUJveGVzID0gZG93bmNhc3Q8SW5saW5lRm9ybWF0dGluZ1N0YXRlPihsYXlvdXRTdGF0ZS5lc3Rh
Ymxpc2hlZEZvcm1hdHRpbmdTdGF0ZShsYXlvdXRCb3gpKS5saW5lQm94ZXMoKTsKKyAgICAgICAg
ICAgIGF1dG8gYm90dG9tRWRnZSA9IGxpbmVCb3hlcy5pc0VtcHR5KCkgPyBMYXlvdXRVbml0KCkg
OiBsaW5lQm94ZXMubGFzdCgpLmxvZ2ljYWxCb3R0b20oKTsKICAgICAgICAgICAgIHJldHVybiB7
IGJvdHRvbUVkZ2UgLSBib3JkZXJBbmRQYWRkaW5nVG9wLCBub25Db2xsYXBzZWRNYXJnaW4gfTsK
ICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZGlzcGxheXRy
ZWUvRGlzcGxheUJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZGlzcGxheXRyZWUvRGlz
cGxheUJveC5jcHAKaW5kZXggMGVlZWFlY2QzNzRhYWJkYjNhZWVmMDBjOGYzMTI0YTZjYWUwYWYz
OS4uNmFkZTQwNmQ1YzQyNzVlYWQ1YmYzNWUwMmQ0NzY2OGUwNmE1MzUwMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2Rpc3BsYXl0cmVlL0Rpc3BsYXlCb3guY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5Qm94LmNwcApAQCAtMzYsMTcg
KzM2LDYgQEAgbmFtZXNwYWNlIERpc3BsYXkgewogCiBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lN
UEwoQm94KTsKIAotQm94OjpSZWN0OjpSZWN0KExheW91dFVuaXQgdG9wLCBMYXlvdXRVbml0IGxl
ZnQsIExheW91dFVuaXQgd2lkdGgsIExheW91dFVuaXQgaGVpZ2h0KQotICAgIDogbV9yZWN0KGxl
ZnQsIHRvcCwgd2lkdGgsIGhlaWdodCkKLXsKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgbV9o
YXNWYWxpZFRvcCA9IHRydWU7Ci0gICAgbV9oYXNWYWxpZExlZnQgPSB0cnVlOwotICAgIG1faGFz
VmFsaWRXaWR0aCA9IHRydWU7Ci0gICAgbV9oYXNWYWxpZEhlaWdodCA9IHRydWU7Ci0jZW5kaWYK
LX0KLQogQm94OjpCb3goY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQogICAgIDogbV9zdHlsZShz
dHlsZSkKIHsKQEAgLTg4LDcgKzc3LDcgQEAgQm94OjpTdHlsZTo6U3R5bGUoY29uc3QgUmVuZGVy
U3R5bGUmIHN0eWxlKQogewogfQogCi1Cb3g6OlJlY3QgQm94OjptYXJnaW5Cb3goKSBjb25zdAor
UmVjdCBCb3g6Om1hcmdpbkJveCgpIGNvbnN0CiB7CiAgICAgYXV0byBib3JkZXJCb3ggPSB0aGlz
LT5ib3JkZXJCb3goKTsKIApAQCAtMTAwLDcgKzg5LDcgQEAgQm94OjpSZWN0IEJveDo6bWFyZ2lu
Qm94KCkgY29uc3QKICAgICByZXR1cm4gbWFyZ2luQm94OwogfQogCi1Cb3g6OlJlY3QgQm94Ojpu
b25Db2xsYXBzZWRNYXJnaW5Cb3goKSBjb25zdAorUmVjdCBCb3g6Om5vbkNvbGxhcHNlZE1hcmdp
bkJveCgpIGNvbnN0CiB7CiAgICAgYXV0byBib3JkZXJCb3ggPSB0aGlzLT5ib3JkZXJCb3goKTsK
IApAQCAtMTEyLDcgKzEwMSw3IEBAIEJveDo6UmVjdCBCb3g6Om5vbkNvbGxhcHNlZE1hcmdpbkJv
eCgpIGNvbnN0CiAgICAgcmV0dXJuIG1hcmdpbkJveDsKIH0KIAotQm94OjpSZWN0IEJveDo6Ym9y
ZGVyQm94KCkgY29uc3QKK1JlY3QgQm94Ojpib3JkZXJCb3goKSBjb25zdAogewogICAgIFJlY3Qg
Ym9yZGVyQm94OwogICAgIGJvcmRlckJveC5zZXRUb3BMZWZ0KHsgfSk7CkBAIC0xMjAsNyArMTA5
LDcgQEAgQm94OjpSZWN0IEJveDo6Ym9yZGVyQm94KCkgY29uc3QKICAgICByZXR1cm4gYm9yZGVy
Qm94OwogfQogCi1Cb3g6OlJlY3QgQm94OjpwYWRkaW5nQm94KCkgY29uc3QKK1JlY3QgQm94Ojpw
YWRkaW5nQm94KCkgY29uc3QKIHsKICAgICBhdXRvIGJvcmRlckJveCA9IHRoaXMtPmJvcmRlckJv
eCgpOwogCkBAIC0xMzIsNyArMTIxLDcgQEAgQm94OjpSZWN0IEJveDo6cGFkZGluZ0JveCgpIGNv
bnN0CiAgICAgcmV0dXJuIHBhZGRpbmdCb3g7CiB9CiAKLUJveDo6UmVjdCBCb3g6OmNvbnRlbnRC
b3goKSBjb25zdAorUmVjdCBCb3g6OmNvbnRlbnRCb3goKSBjb25zdAogewogICAgIFJlY3QgY29u
dGVudEJveDsKICAgICBjb250ZW50Qm94LnNldFRvcChjb250ZW50Qm94VG9wKCkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Rpc3BsYXl0cmVlL0Rpc3BsYXlCb3guaCBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5Qm94LmgKaW5kZXggODY4NWMz
NzhjNDhhODg2YzI1YzFiOTM2ZDA2YjM2YTIxMzZlMmU3MS4uZjlmMTQyZmFiZjRkY2E3MThlYWZi
MGQ2Nzk2MDk0NzA3OGIwMjlmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Rp
c3BsYXl0cmVlL0Rpc3BsYXlCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZGlzcGxh
eXRyZWUvRGlzcGxheUJveC5oCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoTEFZT1VU
X0ZPUk1BVFRJTkdfQ09OVEVYVCkKIAorI2luY2x1ZGUgIkRpc3BsYXlSZWN0LmgiCiAjaW5jbHVk
ZSAiTGF5b3V0VW5pdHMuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZUNvbnN0YW50cy5oIgogI2lu
Y2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KQEAgLTYwLDY4ICs2MSw2IEBAIHB1YmxpYzoKIAogICAg
IEJveChjb25zdCBSZW5kZXJTdHlsZSYpOwogICAgIEJveChjb25zdCBCb3gmKTsKLQotICAgIGNs
YXNzIFJlY3QgewotICAgIHB1YmxpYzoKLSAgICAgICAgUmVjdCgpID0gZGVmYXVsdDsKLSAgICAg
ICAgUmVjdChMYXlvdXRVbml0IHRvcCwgTGF5b3V0VW5pdCBsZWZ0LCBMYXlvdXRVbml0IHdpZHRo
LCBMYXlvdXRVbml0IGhlaWdodCk7Ci0gICAgICAgIAotICAgICAgICBMYXlvdXRVbml0IHRvcCgp
IGNvbnN0OwotICAgICAgICBMYXlvdXRVbml0IGxlZnQoKSBjb25zdDsKLSAgICAgICAgTGF5b3V0
UG9pbnQgdG9wTGVmdCgpIGNvbnN0OwotCi0gICAgICAgIExheW91dFVuaXQgYm90dG9tKCkgY29u
c3Q7Ci0gICAgICAgIExheW91dFVuaXQgcmlnaHQoKSBjb25zdDsgICAgICAgIAotICAgICAgICBM
YXlvdXRQb2ludCBib3R0b21SaWdodCgpIGNvbnN0OwotCi0gICAgICAgIExheW91dFVuaXQgd2lk
dGgoKSBjb25zdDsKLSAgICAgICAgTGF5b3V0VW5pdCBoZWlnaHQoKSBjb25zdDsKLSAgICAgICAg
TGF5b3V0U2l6ZSBzaXplKCkgY29uc3Q7Ci0KLSAgICAgICAgdm9pZCBzZXRUb3AoTGF5b3V0VW5p
dCk7Ci0gICAgICAgIHZvaWQgc2V0TGVmdChMYXlvdXRVbml0KTsKLSAgICAgICAgdm9pZCBzZXRU
b3BMZWZ0KGNvbnN0IExheW91dFBvaW50Jik7Ci0gICAgICAgIHZvaWQgc2V0V2lkdGgoTGF5b3V0
VW5pdCk7Ci0gICAgICAgIHZvaWQgc2V0SGVpZ2h0KExheW91dFVuaXQpOwotICAgICAgICB2b2lk
IHNldFNpemUoY29uc3QgTGF5b3V0U2l6ZSYpOwotCi0gICAgICAgIHZvaWQgc2hpZnRMZWZ0VG8o
TGF5b3V0VW5pdCk7Ci0gICAgICAgIHZvaWQgc2hpZnRSaWdodFRvKExheW91dFVuaXQpOwotICAg
ICAgICB2b2lkIHNoaWZ0VG9wVG8oTGF5b3V0VW5pdCk7Ci0gICAgICAgIHZvaWQgc2hpZnRCb3R0
b21UbyhMYXlvdXRVbml0KTsKLQotICAgICAgICB2b2lkIG1vdmVIb3Jpem9udGFsbHkoTGF5b3V0
VW5pdCk7Ci0gICAgICAgIHZvaWQgbW92ZVZlcnRpY2FsbHkoTGF5b3V0VW5pdCk7Ci0KLSAgICAg
ICAgdm9pZCBleHBhbmQoTGF5b3V0VW5pdCwgTGF5b3V0VW5pdCk7Ci0gICAgICAgIGJvb2wgaW50
ZXJzZWN0cyhjb25zdCBSZWN0JiByZWN0KSBjb25zdCB7IHJldHVybiBtX3JlY3QuaW50ZXJzZWN0
cyhyZWN0KTsgfQotCi0gICAgICAgIFJlY3QgY2xvbmUoKSBjb25zdDsKLSAgICAgICAgb3BlcmF0
b3IgTGF5b3V0UmVjdCgpIGNvbnN0OwotCi0gICAgcHJpdmF0ZToKLSNpZiAhQVNTRVJUX0RJU0FC
TEVECi0gICAgICAgIHZvaWQgaW52YWxpZGF0ZVRvcCgpIHsgbV9oYXNWYWxpZFRvcCA9IGZhbHNl
OyB9Ci0gICAgICAgIHZvaWQgaW52YWxpZGF0ZUxlZnQoKSB7IG1faGFzVmFsaWRMZWZ0ID0gZmFs
c2U7IH0KLSAgICAgICAgdm9pZCBpbnZhbGlkYXRlV2lkdGgoKSB7IG1faGFzVmFsaWRXaWR0aCA9
IGZhbHNlOyB9Ci0gICAgICAgIHZvaWQgaW52YWxpZGF0ZUhlaWdodCgpIHsgbV9oYXNWYWxpZEhl
aWdodCA9IGZhbHNlOyB9Ci0gICAgICAgIHZvaWQgaW52YWxpZGF0ZVBvc2l0aW9uKCk7Ci0KLSAg
ICAgICAgYm9vbCBoYXNWYWxpZFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9oYXNWYWxpZFRv
cCAmJiBtX2hhc1ZhbGlkTGVmdDsgfQotICAgICAgICBib29sIGhhc1ZhbGlkU2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1faGFzVmFsaWRXaWR0aCAmJiBtX2hhc1ZhbGlkSGVpZ2h0OyB9Ci0gICAgICAg
IGJvb2wgaGFzVmFsaWRHZW9tZXRyeSgpIGNvbnN0IHsgcmV0dXJuIGhhc1ZhbGlkUG9zaXRpb24o
KSAmJiBoYXNWYWxpZFNpemUoKTsgfQotICAgIAotICAgICAgICB2b2lkIHNldEhhc1ZhbGlkUG9z
aXRpb24oKTsKLSAgICAgICAgdm9pZCBzZXRIYXNWYWxpZFNpemUoKTsKLQotICAgICAgICBib29s
IG1faGFzVmFsaWRUb3AgeyBmYWxzZSB9OwotICAgICAgICBib29sIG1faGFzVmFsaWRMZWZ0IHsg
ZmFsc2UgfTsKLSAgICAgICAgYm9vbCBtX2hhc1ZhbGlkV2lkdGggeyBmYWxzZSB9OwotICAgICAg
ICBib29sIG1faGFzVmFsaWRIZWlnaHQgeyBmYWxzZSB9OwotI2VuZGlmCi0gICAgICAgIExheW91
dFJlY3QgbV9yZWN0OwotICAgIH07Ci0KICAgICB+Qm94KCk7CiAKICAgICBMYXlvdXRVbml0IHRv
cCgpIGNvbnN0OwpAQCAtMTM5LDYgKzc4LDcgQEAgcHVibGljOgogICAgIFJlY3QgcmVjdFdpdGhN
YXJnaW4oKSBjb25zdDsKIAogICAgIExheW91dDo6VXNlZFZlcnRpY2FsTWFyZ2luIHZlcnRpY2Fs
TWFyZ2luKCkgY29uc3Q7CisgICAgTGF5b3V0OjpVc2VkSG9yaXpvbnRhbE1hcmdpbiBob3Jpem9u
dGFsTWFyZ2luKCkgY29uc3Q7CiAgICAgTGF5b3V0VW5pdCBtYXJnaW5CZWZvcmUoKSBjb25zdDsK
ICAgICBMYXlvdXRVbml0IG1hcmdpblN0YXJ0KCkgY29uc3Q7CiAgICAgTGF5b3V0VW5pdCBtYXJn
aW5BZnRlcigpIGNvbnN0OwpAQCAtMjY0LDI0ICsyMDQsNiBAQCBwcml2YXRlOgogfTsKIAogI2lm
ICFBU1NFUlRfRElTQUJMRUQKLWlubGluZSB2b2lkIEJveDo6UmVjdDo6aW52YWxpZGF0ZVBvc2l0
aW9uKCkKLXsKLSAgICBpbnZhbGlkYXRlVG9wKCk7Ci0gICAgaW52YWxpZGF0ZUxlZnQoKTsKLX0K
LQotaW5saW5lIHZvaWQgQm94OjpSZWN0OjpzZXRIYXNWYWxpZFBvc2l0aW9uKCkKLXsKLSAgICBt
X2hhc1ZhbGlkVG9wID0gdHJ1ZTsKLSAgICBtX2hhc1ZhbGlkTGVmdCA9IHRydWU7Ci19Ci0KLWlu
bGluZSB2b2lkIEJveDo6UmVjdDo6c2V0SGFzVmFsaWRTaXplKCkKLXsKLSAgICBtX2hhc1ZhbGlk
V2lkdGggPSB0cnVlOwotICAgIG1faGFzVmFsaWRIZWlnaHQgPSB0cnVlOwotfQotCiBpbmxpbmUg
dm9pZCBCb3g6OmludmFsaWRhdGVNYXJnaW4oKQogewogICAgIG1faGFzVmFsaWRIb3Jpem9udGFs
TWFyZ2luID0gZmFsc2U7CkBAIC0yODksMTY5ICsyMTEsNiBAQCBpbmxpbmUgdm9pZCBCb3g6Omlu
dmFsaWRhdGVNYXJnaW4oKQogfQogI2VuZGlmCiAKLWlubGluZSBMYXlvdXRVbml0IEJveDo6UmVj
dDo6dG9wKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9oYXNWYWxpZFRvcCk7Ci0gICAgcmV0dXJu
IG1fcmVjdC55KCk7Ci19Ci0KLWlubGluZSBMYXlvdXRVbml0IEJveDo6UmVjdDo6bGVmdCgpIGNv
bnN0Ci17Ci0gICAgQVNTRVJUKG1faGFzVmFsaWRMZWZ0KTsKLSAgICByZXR1cm4gbV9yZWN0Lngo
KTsKLX0KLQotaW5saW5lIExheW91dFVuaXQgQm94OjpSZWN0Ojpib3R0b20oKSBjb25zdAotewot
ICAgIEFTU0VSVChtX2hhc1ZhbGlkVG9wICYmIG1faGFzVmFsaWRIZWlnaHQpOwotICAgIHJldHVy
biBtX3JlY3QubWF4WSgpOwotfQotCi1pbmxpbmUgTGF5b3V0VW5pdCBCb3g6OlJlY3Q6OnJpZ2h0
KCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9oYXNWYWxpZExlZnQgJiYgbV9oYXNWYWxpZFdpZHRo
KTsKLSAgICByZXR1cm4gbV9yZWN0Lm1heFgoKTsKLX0KLQotaW5saW5lIExheW91dFBvaW50IEJv
eDo6UmVjdDo6dG9wTGVmdCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGhhc1ZhbGlkUG9zaXRpb24o
KSk7Ci0gICAgcmV0dXJuIG1fcmVjdC5taW5YTWluWUNvcm5lcigpOwotfQotCi1pbmxpbmUgTGF5
b3V0UG9pbnQgQm94OjpSZWN0Ojpib3R0b21SaWdodCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGhh
c1ZhbGlkR2VvbWV0cnkoKSk7Ci0gICAgcmV0dXJuIG1fcmVjdC5tYXhYTWF4WUNvcm5lcigpOwot
fQotCi1pbmxpbmUgTGF5b3V0U2l6ZSBCb3g6OlJlY3Q6OnNpemUoKSBjb25zdAotewotICAgIEFT
U0VSVChoYXNWYWxpZFNpemUoKSk7Ci0gICAgcmV0dXJuIG1fcmVjdC5zaXplKCk7Ci19Ci0KLWlu
bGluZSBMYXlvdXRVbml0IEJveDo6UmVjdDo6d2lkdGgoKSBjb25zdAotewotICAgIEFTU0VSVCht
X2hhc1ZhbGlkV2lkdGgpOwotICAgIHJldHVybiBtX3JlY3Qud2lkdGgoKTsKLX0KLQotaW5saW5l
IExheW91dFVuaXQgQm94OjpSZWN0OjpoZWlnaHQoKSBjb25zdAotewotICAgIEFTU0VSVChtX2hh
c1ZhbGlkSGVpZ2h0KTsKLSAgICByZXR1cm4gbV9yZWN0LmhlaWdodCgpOwotfQotCi1pbmxpbmUg
dm9pZCBCb3g6OlJlY3Q6OnNldFRvcExlZnQoY29uc3QgTGF5b3V0UG9pbnQmIHRvcExlZnQpCi17
Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIHNldEhhc1ZhbGlkUG9zaXRpb24oKTsKLSNlbmRp
ZgotICAgIG1fcmVjdC5zZXRMb2NhdGlvbih0b3BMZWZ0KTsKLX0KLQotaW5saW5lIHZvaWQgQm94
OjpSZWN0OjpzZXRUb3AoTGF5b3V0VW5pdCB0b3ApCi17Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAot
ICAgIG1faGFzVmFsaWRUb3AgPSB0cnVlOwotI2VuZGlmCi0gICAgbV9yZWN0LnNldFkodG9wKTsK
LX0KLQotaW5saW5lIHZvaWQgQm94OjpSZWN0OjpzZXRMZWZ0KExheW91dFVuaXQgbGVmdCkKLXsK
LSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgbV9oYXNWYWxpZExlZnQgPSB0cnVlOwotI2VuZGlm
Ci0gICAgbV9yZWN0LnNldFgobGVmdCk7Ci19Ci0KLWlubGluZSB2b2lkIEJveDo6UmVjdDo6c2V0
V2lkdGgoTGF5b3V0VW5pdCB3aWR0aCkKLXsKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgbV9o
YXNWYWxpZFdpZHRoID0gdHJ1ZTsKLSNlbmRpZgotICAgIG1fcmVjdC5zZXRXaWR0aCh3aWR0aCk7
Ci19Ci0KLWlubGluZSB2b2lkIEJveDo6UmVjdDo6c2V0SGVpZ2h0KExheW91dFVuaXQgaGVpZ2h0
KQotewotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICBtX2hhc1ZhbGlkSGVpZ2h0ID0gdHJ1ZTsK
LSNlbmRpZgotICAgIG1fcmVjdC5zZXRIZWlnaHQoaGVpZ2h0KTsKLX0KLQotaW5saW5lIHZvaWQg
Qm94OjpSZWN0OjpzZXRTaXplKGNvbnN0IExheW91dFNpemUmIHNpemUpCi17Ci0jaWYgIUFTU0VS
VF9ESVNBQkxFRAotICAgIHNldEhhc1ZhbGlkU2l6ZSgpOwotI2VuZGlmCi0gICAgbV9yZWN0LnNl
dFNpemUoc2l6ZSk7Ci19Ci0KLWlubGluZSB2b2lkIEJveDo6UmVjdDo6c2hpZnRMZWZ0VG8oTGF5
b3V0VW5pdCBsZWZ0KQotewotICAgIEFTU0VSVChtX2hhc1ZhbGlkTGVmdCk7Ci0gICAgbV9yZWN0
LnNoaWZ0WEVkZ2VUbyhsZWZ0KTsKLX0KLQotaW5saW5lIHZvaWQgQm94OjpSZWN0OjpzaGlmdFJp
Z2h0VG8oTGF5b3V0VW5pdCByaWdodCkKLXsKLSAgICBBU1NFUlQobV9oYXNWYWxpZExlZnQgJiYg
bV9oYXNWYWxpZFdpZHRoKTsKLSAgICBtX3JlY3Quc2hpZnRNYXhYRWRnZVRvKHJpZ2h0KTsKLX0K
LQotaW5saW5lIHZvaWQgQm94OjpSZWN0OjpzaGlmdFRvcFRvKExheW91dFVuaXQgdG9wKQotewot
ICAgIEFTU0VSVChtX2hhc1ZhbGlkVG9wKTsKLSAgICBtX3JlY3Quc2hpZnRZRWRnZVRvKHRvcCk7
Ci19Ci0KLWlubGluZSB2b2lkIEJveDo6UmVjdDo6c2hpZnRCb3R0b21UbyhMYXlvdXRVbml0IGJv
dHRvbSkKLXsKLSAgICBBU1NFUlQobV9oYXNWYWxpZFRvcCAmJiBtX2hhc1ZhbGlkSGVpZ2h0KTsK
LSAgICBtX3JlY3Quc2hpZnRNYXhZRWRnZVRvKGJvdHRvbSk7Ci19Ci0KLWlubGluZSB2b2lkIEJv
eDo6UmVjdDo6bW92ZUhvcml6b250YWxseShMYXlvdXRVbml0IG9mZnNldCkKLXsKLSAgICBBU1NF
UlQobV9oYXNWYWxpZExlZnQpOwotICAgIG1fcmVjdC5tb3ZlKG9mZnNldCwgMF9sdSk7Ci19Ci0K
LWlubGluZSB2b2lkIEJveDo6UmVjdDo6bW92ZVZlcnRpY2FsbHkoTGF5b3V0VW5pdCBvZmZzZXQp
Ci17Ci0gICAgQVNTRVJUKG1faGFzVmFsaWRUb3ApOwotICAgIG1fcmVjdC5tb3ZlKDBfbHUsIG9m
ZnNldCk7Ci19Ci0KLWlubGluZSB2b2lkIEJveDo6UmVjdDo6ZXhwYW5kKExheW91dFVuaXQgd2lk
dGgsIExheW91dFVuaXQgaGVpZ2h0KQotewotICAgIEFTU0VSVChoYXNWYWxpZEdlb21ldHJ5KCkp
OwotICAgIG1fcmVjdC5leHBhbmQod2lkdGgsIGhlaWdodCk7Ci19Ci0KLWlubGluZSBCb3g6OlJl
Y3QgQm94OjpSZWN0OjpjbG9uZSgpIGNvbnN0Ci17Ci0gICAgUmVjdCByZWN0OwotI2lmICFBU1NF
UlRfRElTQUJMRUQKLSAgICByZWN0Lm1faGFzVmFsaWRUb3AgPSBtX2hhc1ZhbGlkVG9wOwotICAg
IHJlY3QubV9oYXNWYWxpZExlZnQgPSBtX2hhc1ZhbGlkTGVmdDsKLSAgICByZWN0Lm1faGFzVmFs
aWRXaWR0aCA9IG1faGFzVmFsaWRXaWR0aDsKLSAgICByZWN0Lm1faGFzVmFsaWRIZWlnaHQgID0g
bV9oYXNWYWxpZEhlaWdodDsKLSNlbmRpZiAKLSAgICByZWN0Lm1fcmVjdCA9IG1fcmVjdDsKLSAg
ICByZXR1cm4gcmVjdDsKLX0KLQotaW5saW5lIEJveDo6UmVjdDo6b3BlcmF0b3IgTGF5b3V0UmVj
dCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGhhc1ZhbGlkR2VvbWV0cnkoKSk7IAotICAgIHJldHVy
biBtX3JlY3Q7Ci19Ci0KIGlubGluZSBMYXlvdXRVbml0IEJveDo6dG9wKCkgY29uc3QKIHsKICAg
ICBBU1NFUlQobV9oYXNWYWxpZFRvcCAmJiAobV9oYXNFc3RpbWF0ZWRNYXJnaW5CZWZvcmUgfHwg
bV9oYXNWYWxpZFZlcnRpY2FsTWFyZ2luKSk7CkBAIC01NjYsNyArMzI1LDcgQEAgaW5saW5lIHZv
aWQgQm94OjpzZXRQYWRkaW5nKE9wdGlvbmFsPExheW91dDo6RWRnZXM+IHBhZGRpbmcpCiAgICAg
bV9wYWRkaW5nID0gcGFkZGluZzsKIH0KIAotaW5saW5lIEJveDo6UmVjdCBCb3g6OnJlY3RXaXRo
TWFyZ2luKCkgY29uc3QKK2lubGluZSBSZWN0IEJveDo6cmVjdFdpdGhNYXJnaW4oKSBjb25zdAog
ewogICAgIGF1dG8gbWFyZ2luQWZ0ZXIgPSB0aGlzLT5tYXJnaW5BZnRlcigpOwogICAgIGlmICht
X3ZlcnRpY2FsTWFyZ2luLmNvbGxhcHNlZFZhbHVlcygpLmlzQ29sbGFwc2VkVGhyb3VnaCkKQEAg
LTU4MCw2ICszMzksMTIgQEAgaW5saW5lIExheW91dDo6VXNlZFZlcnRpY2FsTWFyZ2luIEJveDo6
dmVydGljYWxNYXJnaW4oKSBjb25zdAogICAgIHJldHVybiBtX3ZlcnRpY2FsTWFyZ2luOwogfQog
CitpbmxpbmUgTGF5b3V0OjpVc2VkSG9yaXpvbnRhbE1hcmdpbiBCb3g6Omhvcml6b250YWxNYXJn
aW4oKSBjb25zdAoreworICAgIEFTU0VSVChtX2hhc1ZhbGlkSG9yaXpvbnRhbE1hcmdpbik7Cisg
ICAgcmV0dXJuIG1faG9yaXpvbnRhbE1hcmdpbjsKK30KKwogaW5saW5lIExheW91dFVuaXQgQm94
OjptYXJnaW5CZWZvcmUoKSBjb25zdAogewogICAgIEFTU0VSVChtX2hhc1ZhbGlkVmVydGljYWxN
YXJnaW4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Rpc3BsYXl0cmVlL0Rp
c3BsYXlSZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheVJl
Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4zYTlhZmE2MmIzZmM5NWM5ZjEzMGNjNzFlZWM0NWMwNWU0ZWY1ODJi
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Rpc3BsYXl0cmVlL0Rp
c3BsYXlSZWN0LmgKQEAgLTAsMCArMSwyOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQorCisjaW5jbHVkZSAiTGF5
b3V0VW5pdHMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZW5kZXJTdHlsZTsK
KworbmFtZXNwYWNlIERpc3BsYXkgeworCitjbGFzcyBSZWN0IHsKK3B1YmxpYzoKKyAgICBSZWN0
KCkgPSBkZWZhdWx0OworICAgIFJlY3QoTGF5b3V0VW5pdCB0b3AsIExheW91dFVuaXQgbGVmdCwg
TGF5b3V0VW5pdCB3aWR0aCwgTGF5b3V0VW5pdCBoZWlnaHQpOworICAgIAorICAgIExheW91dFVu
aXQgdG9wKCkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBsZWZ0KCkgY29uc3Q7CisgICAgTGF5b3V0
UG9pbnQgdG9wTGVmdCgpIGNvbnN0OworCisgICAgTGF5b3V0VW5pdCBib3R0b20oKSBjb25zdDsK
KyAgICBMYXlvdXRVbml0IHJpZ2h0KCkgY29uc3Q7ICAgICAgICAKKyAgICBMYXlvdXRQb2ludCBi
b3R0b21SaWdodCgpIGNvbnN0OworCisgICAgTGF5b3V0VW5pdCB3aWR0aCgpIGNvbnN0OworICAg
IExheW91dFVuaXQgaGVpZ2h0KCkgY29uc3Q7CisgICAgTGF5b3V0U2l6ZSBzaXplKCkgY29uc3Q7
CisKKyAgICB2b2lkIHNldFRvcChMYXlvdXRVbml0KTsKKyAgICB2b2lkIHNldExlZnQoTGF5b3V0
VW5pdCk7CisgICAgdm9pZCBzZXRUb3BMZWZ0KGNvbnN0IExheW91dFBvaW50Jik7CisgICAgdm9p
ZCBzZXRXaWR0aChMYXlvdXRVbml0KTsKKyAgICB2b2lkIHNldEhlaWdodChMYXlvdXRVbml0KTsK
KyAgICB2b2lkIHNldFNpemUoY29uc3QgTGF5b3V0U2l6ZSYpOworCisgICAgdm9pZCBzaGlmdExl
ZnRUbyhMYXlvdXRVbml0KTsKKyAgICB2b2lkIHNoaWZ0UmlnaHRUbyhMYXlvdXRVbml0KTsKKyAg
ICB2b2lkIHNoaWZ0VG9wVG8oTGF5b3V0VW5pdCk7CisgICAgdm9pZCBzaGlmdEJvdHRvbVRvKExh
eW91dFVuaXQpOworCisgICAgdm9pZCBtb3ZlSG9yaXpvbnRhbGx5KExheW91dFVuaXQpOworICAg
IHZvaWQgbW92ZVZlcnRpY2FsbHkoTGF5b3V0VW5pdCk7CisKKyAgICB2b2lkIGV4cGFuZChMYXlv
dXRVbml0LCBMYXlvdXRVbml0KTsKKyAgICB2b2lkIGV4cGFuZEhvcml6b250YWxseShMYXlvdXRV
bml0IGRlbHRhKSB7IGV4cGFuZChkZWx0YSwgMCk7IH0KKyAgICB2b2lkIGV4cGFuZFZlcnRpY2Fs
bHkoTGF5b3V0VW5pdCBkZWx0YSkgeyBleHBhbmQoMCwgZGVsdGEpOyB9CisgICAgYm9vbCBpbnRl
cnNlY3RzKGNvbnN0IFJlY3QmIHJlY3QpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdC5pbnRlcnNlY3Rz
KHJlY3QpOyB9CisKKyAgICBSZWN0IGNsb25lKCkgY29uc3Q7CisgICAgb3BlcmF0b3IgTGF5b3V0
UmVjdCgpIGNvbnN0OworCitwcml2YXRlOgorI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICB2b2lk
IGludmFsaWRhdGVUb3AoKSB7IG1faGFzVmFsaWRUb3AgPSBmYWxzZTsgfQorICAgIHZvaWQgaW52
YWxpZGF0ZUxlZnQoKSB7IG1faGFzVmFsaWRMZWZ0ID0gZmFsc2U7IH0KKyAgICB2b2lkIGludmFs
aWRhdGVXaWR0aCgpIHsgbV9oYXNWYWxpZFdpZHRoID0gZmFsc2U7IH0KKyAgICB2b2lkIGludmFs
aWRhdGVIZWlnaHQoKSB7IG1faGFzVmFsaWRIZWlnaHQgPSBmYWxzZTsgfQorICAgIHZvaWQgaW52
YWxpZGF0ZVBvc2l0aW9uKCk7CisKKyAgICBib29sIGhhc1ZhbGlkUG9zaXRpb24oKSBjb25zdCB7
IHJldHVybiBtX2hhc1ZhbGlkVG9wICYmIG1faGFzVmFsaWRMZWZ0OyB9CisgICAgYm9vbCBoYXNW
YWxpZFNpemUoKSBjb25zdCB7IHJldHVybiBtX2hhc1ZhbGlkV2lkdGggJiYgbV9oYXNWYWxpZEhl
aWdodDsgfQorICAgIGJvb2wgaGFzVmFsaWRHZW9tZXRyeSgpIGNvbnN0IHsgcmV0dXJuIGhhc1Zh
bGlkUG9zaXRpb24oKSAmJiBoYXNWYWxpZFNpemUoKTsgfQorCisgICAgdm9pZCBzZXRIYXNWYWxp
ZFBvc2l0aW9uKCk7CisgICAgdm9pZCBzZXRIYXNWYWxpZFNpemUoKTsKKworICAgIGJvb2wgbV9o
YXNWYWxpZFRvcCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2hhc1ZhbGlkTGVmdCB7IGZhbHNlIH07
CisgICAgYm9vbCBtX2hhc1ZhbGlkV2lkdGggeyBmYWxzZSB9OworICAgIGJvb2wgbV9oYXNWYWxp
ZEhlaWdodCB7IGZhbHNlIH07CisjZW5kaWYKKyAgICBMYXlvdXRSZWN0IG1fcmVjdDsKK307CisK
K2lubGluZSBSZWN0OjpSZWN0KExheW91dFVuaXQgdG9wLCBMYXlvdXRVbml0IGxlZnQsIExheW91
dFVuaXQgd2lkdGgsIExheW91dFVuaXQgaGVpZ2h0KQorICAgIDogbV9yZWN0KGxlZnQsIHRvcCwg
d2lkdGgsIGhlaWdodCkKK3sKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgbV9oYXNWYWxpZFRv
cCA9IHRydWU7CisgICAgbV9oYXNWYWxpZExlZnQgPSB0cnVlOworICAgIG1faGFzVmFsaWRXaWR0
aCA9IHRydWU7CisgICAgbV9oYXNWYWxpZEhlaWdodCA9IHRydWU7CisjZW5kaWYKK30KKworI2lm
ICFBU1NFUlRfRElTQUJMRUQKK2lubGluZSB2b2lkIFJlY3Q6OmludmFsaWRhdGVQb3NpdGlvbigp
Cit7CisgICAgaW52YWxpZGF0ZVRvcCgpOworICAgIGludmFsaWRhdGVMZWZ0KCk7Cit9CisKK2lu
bGluZSB2b2lkIFJlY3Q6OnNldEhhc1ZhbGlkUG9zaXRpb24oKQoreworICAgIG1faGFzVmFsaWRU
b3AgPSB0cnVlOworICAgIG1faGFzVmFsaWRMZWZ0ID0gdHJ1ZTsKK30KKworaW5saW5lIHZvaWQg
UmVjdDo6c2V0SGFzVmFsaWRTaXplKCkKK3sKKyAgICBtX2hhc1ZhbGlkV2lkdGggPSB0cnVlOwor
ICAgIG1faGFzVmFsaWRIZWlnaHQgPSB0cnVlOworfQorI2VuZGlmCisKK2lubGluZSBMYXlvdXRV
bml0IFJlY3Q6OnRvcCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1faGFzVmFsaWRUb3ApOworICAg
IHJldHVybiBtX3JlY3QueSgpOworfQorCitpbmxpbmUgTGF5b3V0VW5pdCBSZWN0OjpsZWZ0KCkg
Y29uc3QKK3sKKyAgICBBU1NFUlQobV9oYXNWYWxpZExlZnQpOworICAgIHJldHVybiBtX3JlY3Qu
eCgpOworfQorCitpbmxpbmUgTGF5b3V0VW5pdCBSZWN0Ojpib3R0b20oKSBjb25zdAoreworICAg
IEFTU0VSVChtX2hhc1ZhbGlkVG9wICYmIG1faGFzVmFsaWRIZWlnaHQpOworICAgIHJldHVybiBt
X3JlY3QubWF4WSgpOworfQorCitpbmxpbmUgTGF5b3V0VW5pdCBSZWN0OjpyaWdodCgpIGNvbnN0
Cit7CisgICAgQVNTRVJUKG1faGFzVmFsaWRMZWZ0ICYmIG1faGFzVmFsaWRXaWR0aCk7CisgICAg
cmV0dXJuIG1fcmVjdC5tYXhYKCk7Cit9CisKK2lubGluZSBMYXlvdXRQb2ludCBSZWN0Ojp0b3BM
ZWZ0KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaGFzVmFsaWRQb3NpdGlvbigpKTsKKyAgICByZXR1
cm4gbV9yZWN0Lm1pblhNaW5ZQ29ybmVyKCk7Cit9CisKK2lubGluZSBMYXlvdXRQb2ludCBSZWN0
Ojpib3R0b21SaWdodCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKGhhc1ZhbGlkR2VvbWV0cnkoKSk7
CisgICAgcmV0dXJuIG1fcmVjdC5tYXhYTWF4WUNvcm5lcigpOworfQorCitpbmxpbmUgTGF5b3V0
U2l6ZSBSZWN0OjpzaXplKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaGFzVmFsaWRTaXplKCkpOwor
ICAgIHJldHVybiBtX3JlY3Quc2l6ZSgpOworfQorCitpbmxpbmUgTGF5b3V0VW5pdCBSZWN0Ojp3
aWR0aCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1faGFzVmFsaWRXaWR0aCk7CisgICAgcmV0dXJu
IG1fcmVjdC53aWR0aCgpOworfQorCitpbmxpbmUgTGF5b3V0VW5pdCBSZWN0OjpoZWlnaHQoKSBj
b25zdAoreworICAgIEFTU0VSVChtX2hhc1ZhbGlkSGVpZ2h0KTsKKyAgICByZXR1cm4gbV9yZWN0
LmhlaWdodCgpOworfQorCitpbmxpbmUgdm9pZCBSZWN0OjpzZXRUb3BMZWZ0KGNvbnN0IExheW91
dFBvaW50JiB0b3BMZWZ0KQoreworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBzZXRIYXNWYWxp
ZFBvc2l0aW9uKCk7CisjZW5kaWYKKyAgICBtX3JlY3Quc2V0TG9jYXRpb24odG9wTGVmdCk7Cit9
CisKK2lubGluZSB2b2lkIFJlY3Q6OnNldFRvcChMYXlvdXRVbml0IHRvcCkKK3sKKyNpZiAhQVNT
RVJUX0RJU0FCTEVECisgICAgbV9oYXNWYWxpZFRvcCA9IHRydWU7CisjZW5kaWYKKyAgICBtX3Jl
Y3Quc2V0WSh0b3ApOworfQorCitpbmxpbmUgdm9pZCBSZWN0OjpzZXRMZWZ0KExheW91dFVuaXQg
bGVmdCkKK3sKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgbV9oYXNWYWxpZExlZnQgPSB0cnVl
OworI2VuZGlmCisgICAgbV9yZWN0LnNldFgobGVmdCk7Cit9CisKK2lubGluZSB2b2lkIFJlY3Q6
OnNldFdpZHRoKExheW91dFVuaXQgd2lkdGgpCit7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAg
IG1faGFzVmFsaWRXaWR0aCA9IHRydWU7CisjZW5kaWYKKyAgICBtX3JlY3Quc2V0V2lkdGgod2lk
dGgpOworfQorCitpbmxpbmUgdm9pZCBSZWN0OjpzZXRIZWlnaHQoTGF5b3V0VW5pdCBoZWlnaHQp
Cit7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIG1faGFzVmFsaWRIZWlnaHQgPSB0cnVlOwor
I2VuZGlmCisgICAgbV9yZWN0LnNldEhlaWdodChoZWlnaHQpOworfQorCitpbmxpbmUgdm9pZCBS
ZWN0OjpzZXRTaXplKGNvbnN0IExheW91dFNpemUmIHNpemUpCit7CisjaWYgIUFTU0VSVF9ESVNB
QkxFRAorICAgIHNldEhhc1ZhbGlkU2l6ZSgpOworI2VuZGlmCisgICAgbV9yZWN0LnNldFNpemUo
c2l6ZSk7Cit9CisKK2lubGluZSB2b2lkIFJlY3Q6OnNoaWZ0TGVmdFRvKExheW91dFVuaXQgbGVm
dCkKK3sKKyAgICBBU1NFUlQobV9oYXNWYWxpZExlZnQpOworICAgIG1fcmVjdC5zaGlmdFhFZGdl
VG8obGVmdCk7Cit9CisKK2lubGluZSB2b2lkIFJlY3Q6OnNoaWZ0UmlnaHRUbyhMYXlvdXRVbml0
IHJpZ2h0KQoreworICAgIEFTU0VSVChtX2hhc1ZhbGlkTGVmdCAmJiBtX2hhc1ZhbGlkV2lkdGgp
OworICAgIG1fcmVjdC5zaGlmdE1heFhFZGdlVG8ocmlnaHQpOworfQorCitpbmxpbmUgdm9pZCBS
ZWN0OjpzaGlmdFRvcFRvKExheW91dFVuaXQgdG9wKQoreworICAgIEFTU0VSVChtX2hhc1ZhbGlk
VG9wKTsKKyAgICBtX3JlY3Quc2hpZnRZRWRnZVRvKHRvcCk7Cit9CisKK2lubGluZSB2b2lkIFJl
Y3Q6OnNoaWZ0Qm90dG9tVG8oTGF5b3V0VW5pdCBib3R0b20pCit7CisgICAgQVNTRVJUKG1faGFz
VmFsaWRUb3AgJiYgbV9oYXNWYWxpZEhlaWdodCk7CisgICAgbV9yZWN0LnNoaWZ0TWF4WUVkZ2VU
byhib3R0b20pOworfQorCitpbmxpbmUgdm9pZCBSZWN0Ojptb3ZlSG9yaXpvbnRhbGx5KExheW91
dFVuaXQgb2Zmc2V0KQoreworICAgIEFTU0VSVChtX2hhc1ZhbGlkTGVmdCk7CisgICAgbV9yZWN0
Lm1vdmUob2Zmc2V0LCB7IH0pOworfQorCitpbmxpbmUgdm9pZCBSZWN0Ojptb3ZlVmVydGljYWxs
eShMYXlvdXRVbml0IG9mZnNldCkKK3sKKyAgICBBU1NFUlQobV9oYXNWYWxpZFRvcCk7CisgICAg
bV9yZWN0Lm1vdmUoeyB9LCBvZmZzZXQpOworfQorCitpbmxpbmUgdm9pZCBSZWN0OjpleHBhbmQo
TGF5b3V0VW5pdCB3aWR0aCwgTGF5b3V0VW5pdCBoZWlnaHQpCit7CisgICAgQVNTRVJUKGhhc1Zh
bGlkR2VvbWV0cnkoKSk7CisgICAgbV9yZWN0LmV4cGFuZCh3aWR0aCwgaGVpZ2h0KTsKK30KKwor
aW5saW5lIFJlY3QgUmVjdDo6Y2xvbmUoKSBjb25zdAoreworICAgIFJlY3QgcmVjdDsKKyNpZiAh
QVNTRVJUX0RJU0FCTEVECisgICAgcmVjdC5tX2hhc1ZhbGlkVG9wID0gbV9oYXNWYWxpZFRvcDsK
KyAgICByZWN0Lm1faGFzVmFsaWRMZWZ0ID0gbV9oYXNWYWxpZExlZnQ7CisgICAgcmVjdC5tX2hh
c1ZhbGlkV2lkdGggPSBtX2hhc1ZhbGlkV2lkdGg7CisgICAgcmVjdC5tX2hhc1ZhbGlkSGVpZ2h0
ICA9IG1faGFzVmFsaWRIZWlnaHQ7CisjZW5kaWYgCisgICAgcmVjdC5tX3JlY3QgPSBtX3JlY3Q7
CisgICAgcmV0dXJuIHJlY3Q7Cit9CisKK2lubGluZSBSZWN0OjpvcGVyYXRvciBMYXlvdXRSZWN0
KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaGFzVmFsaWRHZW9tZXRyeSgpKTsgCisgICAgcmV0dXJu
IG1fcmVjdDsKK30KKworfQorfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheVJ1bi5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Rp
c3BsYXl0cmVlL0Rpc3BsYXlSdW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MzkyOTAzNjA4M2M0MGIwMzlmOWRl
YzQ5MzNmNjE0MmE3NGRhMWIwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2Rpc3BsYXl0cmVlL0Rpc3BsYXlSdW4uaApAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQp
CisKKyNpbmNsdWRlICJJbmxpbmVJdGVtLmgiCisjaW5jbHVkZSAiTGF5b3V0VW5pdC5oIgorI2lu
Y2x1ZGUgIlRleHRGbGFncy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgRGlz
cGxheSB7CisKK3N0cnVjdCBSdW4geworICAgIHN0cnVjdCBUZXh0Q29udGV4dCB7CisgICAgcHVi
bGljOgorICAgICAgICBUZXh0Q29udGV4dCh1bnNpZ25lZCBwb3NpdGlvbiwgdW5zaWduZWQgbGVu
Z3RoKTsKKworICAgICAgICB1bnNpZ25lZCBzdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnQ7
IH0KKyAgICAgICAgdW5zaWduZWQgZW5kKCkgY29uc3QgeyByZXR1cm4gc3RhcnQoKSArIGxlbmd0
aCgpOyB9CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3Ro
OyB9CisKKyAgICAgICAgdm9pZCBleHBhbmQodW5zaWduZWQgbGVuZ3RoKSB7IG1fbGVuZ3RoICs9
IGxlbmd0aDsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgdW5zaWduZWQgbV9zdGFydDsKKyAg
ICAgICAgdW5zaWduZWQgbV9sZW5ndGg7CisgICAgfTsKKworICAgIFJ1bihSZWN0IGxvZ2ljYWxS
ZWN0KTsKKyAgICBSdW4oUmVjdCBsb2dpY2FsUmVjdCwgVGV4dENvbnRleHQpOworICAgIFJ1bihj
b25zdCBSdW4mKTsKKworICAgIExheW91dFBvaW50IGxvZ2ljYWxUb3BMZWZ0KCkgY29uc3QgeyBy
ZXR1cm4gbV9sb2dpY2FsUmVjdC50b3BMZWZ0KCk7IH0KKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxM
ZWZ0KCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsUmVjdC5sZWZ0KCk7IH0KKyAgICBMYXlvdXRV
bml0IGxvZ2ljYWxSaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFJlY3QucmlnaHQoKTsg
fQorICAgIExheW91dFVuaXQgbG9naWNhbFRvcCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFJl
Y3QudG9wKCk7IH0KKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxCb3R0b20oKSBjb25zdCB7IHJldHVy
biBtX2xvZ2ljYWxSZWN0LmJvdHRvbSgpOyB9CisKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxXaWR0
aCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFJlY3Qud2lkdGgoKTsgfQorICAgIExheW91dFVu
aXQgbG9naWNhbEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFJlY3QuaGVpZ2h0KCk7
IH0KKworICAgIHZvaWQgc2V0TG9naWNhbFdpZHRoKExheW91dFVuaXQgd2lkdGgpIHsgbV9sb2dp
Y2FsUmVjdC5zZXRXaWR0aCh3aWR0aCk7IH0KKyAgICB2b2lkIHNldExvZ2ljYWxUb3AoTGF5b3V0
VW5pdCBsb2dpY2FsVG9wKSB7IG1fbG9naWNhbFJlY3Quc2V0VG9wKGxvZ2ljYWxUb3ApOyB9Cisg
ICAgdm9pZCBzZXRMb2dpY2FsTGVmdChMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0KSB7IG1fbG9naWNh
bFJlY3Quc2V0TGVmdChsb2dpY2FsTGVmdCk7IH0KKyAgICB2b2lkIHNldExvZ2ljYWxSaWdodChM
YXlvdXRVbml0IGxvZ2ljYWxSaWdodCkgeyBtX2xvZ2ljYWxSZWN0LnNoaWZ0UmlnaHRUbyhsb2dp
Y2FsUmlnaHQpOyB9CisgICAgdm9pZCBtb3ZlVmVydGljYWxseShMYXlvdXRVbml0IGRlbHRhKSB7
IG1fbG9naWNhbFJlY3QubW92ZVZlcnRpY2FsbHkoZGVsdGEpOyB9CisgICAgdm9pZCBtb3ZlSG9y
aXpvbnRhbGx5KExheW91dFVuaXQgZGVsdGEpIHsgbV9sb2dpY2FsUmVjdC5tb3ZlSG9yaXpvbnRh
bGx5KGRlbHRhKTsgfQorICAgIHZvaWQgZXhwYW5kVmVydGljYWxseShMYXlvdXRVbml0IGRlbHRh
KSB7IG1fbG9naWNhbFJlY3QuZXhwYW5kKDAsIGRlbHRhKTsgfQorICAgIHZvaWQgZXhwYW5kSG9y
aXpvbnRhbGx5KExheW91dFVuaXQgZGVsdGEpIHsgbV9sb2dpY2FsUmVjdC5leHBhbmQoZGVsdGEs
IDApOyB9CisKKyAgICB2b2lkIHNldFRleHRDb250ZXh0KFRleHRDb250ZXh0IHRleHRDb250ZXh0
KSB7IG1fdGV4dENvbnRleHQuZW1wbGFjZSh0ZXh0Q29udGV4dCk7IH0KKyAgICBPcHRpb25hbDxU
ZXh0Q29udGV4dD4mIHRleHRDb250ZXh0KCkgeyByZXR1cm4gbV90ZXh0Q29udGV4dDsgfQorICAg
IE9wdGlvbmFsPFRleHRDb250ZXh0PiB0ZXh0Q29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4
dENvbnRleHQ7IH0KKworcHJpdmF0ZToKKyAgICBSZWN0IG1fbG9naWNhbFJlY3Q7CisgICAgT3B0
aW9uYWw8VGV4dENvbnRleHQ+IG1fdGV4dENvbnRleHQ7Cit9OworCitpbmxpbmUgUnVuOjpSdW4o
UmVjdCBsb2dpY2FsUmVjdCkKKyAgICA6IG1fbG9naWNhbFJlY3QobG9naWNhbFJlY3QpCit7Cit9
CisKK2lubGluZSBSdW46OlJ1bihSZWN0IGxvZ2ljYWxSZWN0LCBUZXh0Q29udGV4dCB0ZXh0Q29u
dGV4dCkKKyAgICA6IG1fbG9naWNhbFJlY3QobG9naWNhbFJlY3QpCisgICAgLCBtX3RleHRDb250
ZXh0KHRleHRDb250ZXh0KQoreworfQorCitpbmxpbmUgUnVuOjpUZXh0Q29udGV4dDo6VGV4dENv
bnRleHQodW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCkKKyAgICA6IG1fc3RhcnQoc3Rh
cnQpCisgICAgLCBtX2xlbmd0aChsZW5ndGgpCit7Cit9CisKK2lubGluZSBSdW46OlJ1bihjb25z
dCBSdW4mIG90aGVyKQoreworICAgIG1fbG9naWNhbFJlY3QgPSBvdGhlci5tX2xvZ2ljYWxSZWN0
OworICAgIG1fdGV4dENvbnRleHQgPSBvdGhlci5tX3RleHRDb250ZXh0OworfQorCit9Cit9Cisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mbG9hdHMvRmxvYXRBdm9p
ZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mbG9hdHMvRmxvYXRBdm9pZGVyLmNwcApp
bmRleCAxNTFkODhlMjY3YjZiMDUwNjBkYjY0MzM1MzI5Y2QwYTEwMzgxYTA3Li44NzBjZmY1ZmNm
M2QyMmRhMzU2ZjU3YWJlMjMwN2VhNTJkNDhkYmZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvZmxvYXRzL0Zsb2F0QXZvaWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2Zsb2F0cy9GbG9hdEF2b2lkZXIuY3BwCkBAIC0xMTMsNyArMTEzLDcgQEAgYm9vbCBGbG9h
dEF2b2lkZXI6Om92ZXJmbG93c0NvbnRhaW5pbmdCbG9jaygpIGNvbnN0CiAgICAgcmV0dXJuIGNv
bnRhaW5pbmdCbG9ja0NvbnRlbnRCb3hSaWdodCA8IHJpZ2h0OwogfQogCi1EaXNwbGF5OjpCb3g6
OlJlY3QgRmxvYXRBdm9pZGVyOjpyZWN0SW5Db250YWluaW5nQmxvY2soKSBjb25zdAorRGlzcGxh
eTo6UmVjdCBGbG9hdEF2b2lkZXI6OnJlY3RJbkNvbnRhaW5pbmdCbG9jaygpIGNvbnN0CiB7CiAg
ICAgLy8gRnJvbSBmb3JtYXR0aW5nIHJvb3QgY29vcmRpbmF0ZSBzeXN0ZW0gYmFjayB0byBjb250
YWluaW5nIGJsb2NrJ3MuCiAgICAgaWYgKGxheW91dEJveCgpLmNvbnRhaW5pbmdCbG9jaygpID09
ICZmbG9hdGluZ1N0YXRlKCkucm9vdCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2Zsb2F0cy9GbG9hdEF2b2lkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mbG9hdHMv
RmxvYXRBdm9pZGVyLmgKaW5kZXggMmMzMjNkZDgwZjY2NmY4NzNkNTZlM2Y0NWNhYTMxZGE4OWIw
ZjRlZC4uNmVkOWQ0M2QzYmZmYWI5M2EwZDg4ZDg2NzFmNGU4MDdiMDIzNTFiYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zsb2F0cy9GbG9hdEF2b2lkZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvZmxvYXRzL0Zsb2F0QXZvaWRlci5oCkBAIC00Niw4ICs0Niw4IEBA
IHB1YmxpYzoKICAgICBGbG9hdEF2b2lkZXIoY29uc3QgQm94JiwgY29uc3QgRmxvYXRpbmdTdGF0
ZSYsIGNvbnN0IExheW91dFN0YXRlJik7CiAgICAgdmlydHVhbCB+RmxvYXRBdm9pZGVyKCkgPSBk
ZWZhdWx0OwogCi0gICAgdmlydHVhbCBEaXNwbGF5OjpCb3g6OlJlY3QgcmVjdCgpIGNvbnN0IHsg
cmV0dXJuIG1fYWJzb2x1dGVEaXNwbGF5Qm94LnJlY3QoKTsgfQotICAgIERpc3BsYXk6OkJveDo6
UmVjdCByZWN0SW5Db250YWluaW5nQmxvY2soKSBjb25zdDsKKyAgICB2aXJ0dWFsIERpc3BsYXk6
OlJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fYWJzb2x1dGVEaXNwbGF5Qm94LnJlY3QoKTsg
fQorICAgIERpc3BsYXk6OlJlY3QgcmVjdEluQ29udGFpbmluZ0Jsb2NrKCkgY29uc3Q7CiAKICAg
ICBzdHJ1Y3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzIHsKICAgICAgICAgT3B0aW9uYWw8UG9zaXRp
b25JbkNvbnRleHRSb290PiBsZWZ0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2Zsb2F0cy9GbG9hdEJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZmxvYXRzL0Zsb2F0
Qm94LmNwcAppbmRleCBiZWI3NTdlMzI3MTRjYjRlOWU3ZmM1MjgwYzY3ZWY5NDA5ZWI1YWNkLi5i
MmU4NmMxNTIxNjdjM2VhMjNkYTc0OThjNjc3ZmY0NDkzZmZkOGVmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvZmxvYXRzL0Zsb2F0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvZmxvYXRzL0Zsb2F0Qm94LmNwcApAQCAtNDEsNyArNDEsNyBAQCBGbG9hdEJveDo6
RmxvYXRCb3goY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IEZsb2F0aW5nU3RhdGUmIGZsb2F0
aW5nU3RhdGUsIGNvbgogICAgIGRpc3BsYXlCb3goKS5zZXRUb3BMZWZ0KHsgaW5pdGlhbEhvcml6
b250YWxQb3NpdGlvbigpLCBpbml0aWFsVmVydGljYWxQb3NpdGlvbigpIH0pOwogfQogCi1EaXNw
bGF5OjpCb3g6OlJlY3QgRmxvYXRCb3g6OnJlY3QoKSBjb25zdAorRGlzcGxheTo6UmVjdCBGbG9h
dEJveDo6cmVjdCgpIGNvbnN0CiB7CiAgICAgYXV0byByZWN0ID0gZGlzcGxheUJveCgpLnJlY3Qo
KTsKICAgICByZXR1cm4geyByZWN0LnRvcCgpIC0gbWFyZ2luQmVmb3JlKCksIHJlY3QubGVmdCgp
IC0gbWFyZ2luU3RhcnQoKSwgbWFyZ2luU3RhcnQoKSArIHJlY3Qud2lkdGgoKSArIG1hcmdpbkVu
ZCgpLCBtYXJnaW5CZWZvcmUoKSArIHJlY3QuaGVpZ2h0KCkgKyBtYXJnaW5BZnRlcigpIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZmxvYXRzL0Zsb2F0Qm94LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvZmxvYXRzL0Zsb2F0Qm94LmgKaW5kZXggMmVkY2FlODhkNzJjM2Zj
MTE4ZDQ0OGExODllY2UwMDFmM2VlMDA2Mi4uOTdkMjE1MDc1YmVkMTg0ZTM4YWFmZDRkMTczMDQ1
MjdiNWEwMGUwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zsb2F0cy9GbG9h
dEJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mbG9hdHMvRmxvYXRCb3guaApAQCAt
NDMsNyArNDMsNyBAQCBjbGFzcyBGbG9hdEJveCA6IHB1YmxpYyBGbG9hdEF2b2lkZXIgewogcHVi
bGljOgogICAgIEZsb2F0Qm94KGNvbnN0IEJveCYsIGNvbnN0IEZsb2F0aW5nU3RhdGUmLCBjb25z
dCBMYXlvdXRTdGF0ZSYpOwogCi0gICAgRGlzcGxheTo6Qm94OjpSZWN0IHJlY3QoKSBjb25zdCBm
aW5hbDsKKyAgICBEaXNwbGF5OjpSZWN0IHJlY3QoKSBjb25zdCBmaW5hbDsKIAogcHJpdmF0ZToK
ICAgICBib29sIGlzTGVmdEFsaWduZWQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBsYXlvdXRCb3go
KS5pc0xlZnRGbG9hdGluZ1Bvc2l0aW9uZWQoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2Zsb2F0cy9GbG9hdGluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2Zsb2F0cy9GbG9hdGluZ0NvbnRleHQuY3BwCmluZGV4IDA5NWFmOWYwOGRjODE4OGY2Nzdk
ZTYwZjIxNTk3OWMwZTI1MDRiMzQuLjk0OTVkMzMwODQxNjJmNjEyY2JhODVjZjkzOGQ1NzczOWQ2
Y2E3MjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mbG9hdHMvRmxvYXRpbmdD
b250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZmxvYXRzL0Zsb2F0aW5nQ29u
dGV4dC5jcHAKQEAgLTc0LDcgKzc0LDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNFbXB0eSgpIGNv
bnN0IHsgcmV0dXJuIG1fZmxvYXRQYWlyLmlzRW1wdHkoKTsgfQogICAgIGNvbnN0IEZsb2F0aW5n
U3RhdGU6OkZsb2F0SXRlbSogbGVmdCgpIGNvbnN0OwogICAgIGNvbnN0IEZsb2F0aW5nU3RhdGU6
OkZsb2F0SXRlbSogcmlnaHQoKSBjb25zdDsKLSAgICBib29sIGludGVyc2VjdHMoY29uc3QgRGlz
cGxheTo6Qm94OjpSZWN0JikgY29uc3Q7CisgICAgYm9vbCBpbnRlcnNlY3RzKGNvbnN0IERpc3Bs
YXk6OlJlY3QmKSBjb25zdDsKICAgICBQb3NpdGlvbkluQ29udGV4dFJvb3QgdmVydGljYWxDb25z
dHJhaW50KCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0aWNhbFBvc2l0aW9uOyB9CiAgICAgRmxvYXRB
dm9pZGVyOjpIb3Jpem9udGFsQ29uc3RyYWludHMgaG9yaXpvbnRhbENvbnN0cmFpbnRzKCkgY29u
c3Q7CiAgICAgUG9zaXRpb25JbkNvbnRleHRSb290IGJvdHRvbSgpIGNvbnN0OwpAQCAtMzcwLDcg
KzM3MCw3IEBAIGNvbnN0IEZsb2F0aW5nU3RhdGU6OkZsb2F0SXRlbSogRmxvYXRQYWlyOjpyaWdo
dCgpIGNvbnN0CiAgICAgcmV0dXJuICZtX2Zsb2F0c1sqbV9mbG9hdFBhaXIucmlnaHRdOwogfQog
Ci1ib29sIEZsb2F0UGFpcjo6aW50ZXJzZWN0cyhjb25zdCBEaXNwbGF5OjpCb3g6OlJlY3QmIGZs
b2F0QXZvaWRlclJlY3QpIGNvbnN0Citib29sIEZsb2F0UGFpcjo6aW50ZXJzZWN0cyhjb25zdCBE
aXNwbGF5OjpSZWN0JiBmbG9hdEF2b2lkZXJSZWN0KSBjb25zdAogewogICAgIGF1dG8gaW50ZXJz
ZWN0cyA9IFsmXShhdXRvKiBmbG9hdGluZykgewogICAgICAgICByZXR1cm4gZmxvYXRpbmcgJiYg
ZmxvYXRpbmctPnJlY3RXaXRoTWFyZ2luKCkuaW50ZXJzZWN0cyhmbG9hdEF2b2lkZXJSZWN0KTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mbG9hdHMvRmxvYXRpbmdTdGF0ZS5o
IGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zsb2F0cy9GbG9hdGluZ1N0YXRlLmgKaW5kZXggMGVm
YWU4NGQ3M2I1YWMyOTMzZmU1MTU4OTZiZGFhNDJmMjVhODhkYS4uZTFjYjhkMjBmODU3OWU3NTk3
MDZlMWU5MTJhYzNiNzVlNGIyOWQ2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2Zsb2F0cy9GbG9hdGluZ1N0YXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zsb2F0
cy9GbG9hdGluZ1N0YXRlLmgKQEAgLTc0LDcgKzc0LDcgQEAgcHVibGljOgogICAgICAgICBib29s
IGlzTGVmdFBvc2l0aW9uZWQoKSBjb25zdCB7IHJldHVybiBtX2xheW91dEJveC0+aXNMZWZ0Rmxv
YXRpbmdQb3NpdGlvbmVkKCk7IH0KICAgICAgICAgYm9vbCBpc0Rlc2NlbmRhbnRPZkZvcm1hdHRp
bmdSb290KGNvbnN0IEJveCYpIGNvbnN0OwogCi0gICAgICAgIERpc3BsYXk6OkJveDo6UmVjdCBy
ZWN0V2l0aE1hcmdpbigpIGNvbnN0IHsgcmV0dXJuIG1fYWJzb2x1dGVEaXNwbGF5Qm94LnJlY3RX
aXRoTWFyZ2luKCk7IH0KKyAgICAgICAgRGlzcGxheTo6UmVjdCByZWN0V2l0aE1hcmdpbigpIGNv
bnN0IHsgcmV0dXJuIG1fYWJzb2x1dGVEaXNwbGF5Qm94LnJlY3RXaXRoTWFyZ2luKCk7IH0KICAg
ICAgICAgUG9zaXRpb25JbkNvbnRleHRSb290IGJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIHsgbV9h
YnNvbHV0ZURpc3BsYXlCb3guYm90dG9tKCkgfTsgfQogCiAgICAgcHJpdmF0ZToKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRp
bmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lu
bGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcAppbmRleCBlM2MxNTM2ZGNkMzJhMWVmZWQ4MTI4ZDMz
MmIxMThlMjhiZGQ5ZTcyLi5kMjM1ODE2NDcwMDRiYzUyMWYwYTI0NzRjM2RjMDVlZDI0NzhlZjFj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9Jbmxp
bmVGb3JtYXR0aW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwCkBAIC0zMCw3ICszMCw3IEBA
CiAKICNpbmNsdWRlICJJbmxpbmVGb3JtYXR0aW5nU3RhdGUuaCIKICNpbmNsdWRlICJJbmxpbmVM
aW5lQnJlYWtlci5oIgotI2luY2x1ZGUgIklubGluZVJ1blByb3ZpZGVyLmgiCisjaW5jbHVkZSAi
SW5saW5lVGV4dEl0ZW0uaCIKICNpbmNsdWRlICJMYXlvdXRCb3guaCIKICNpbmNsdWRlICJMYXlv
dXRDb250YWluZXIuaCIKICNpbmNsdWRlICJMYXlvdXRJbmxpbmVCb3guaCIKQEAgLTc3LDE4ICs3
NywyMyBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpsYXlvdXQoKSBjb25zdAogICAg
IHdoaWxlIChsYXlvdXRCb3gpIHsKICAgICAgICAgaWYgKGxheW91dEJveC0+ZXN0YWJsaXNoZXNG
b3JtYXR0aW5nQ29udGV4dCgpKQogICAgICAgICAgICAgbGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRS
b290KCpsYXlvdXRCb3gsIHVzZWRWYWx1ZXMpOwotICAgICAgICBlbHNlIGlmIChpczxDb250YWlu
ZXI+KCpsYXlvdXRCb3gpKSB7Ci0gICAgICAgICAgICBhdXRvJiBpbmxpbmVDb250YWluZXIgPSBk
b3duY2FzdDxJbmxpbmVDb250YWluZXI+KCpsYXlvdXRCb3gpOwotICAgICAgICAgICAgY29tcHV0
ZU1hcmdpbihpbmxpbmVDb250YWluZXIsIHVzZWRWYWx1ZXMpOwotICAgICAgICAgICAgY29tcHV0
ZUJvcmRlckFuZFBhZGRpbmcoaW5saW5lQ29udGFpbmVyLCB1c2VkVmFsdWVzKTsKLSAgICAgICAg
fSBlbHNlIGlmIChsYXlvdXRCb3gtPmlzUmVwbGFjZWQoKSkKKyAgICAgICAgZWxzZSBpZiAoaXM8
Q29udGFpbmVyPigqbGF5b3V0Qm94KSkKKyAgICAgICAgICAgIGNvbXB1dGVNYXJnaW5Cb3JkZXJB
bmRQYWRkaW5nRm9ySW5saW5lQ29udGFpbmVyKGRvd25jYXN0PElubGluZUNvbnRhaW5lcj4oKmxh
eW91dEJveCksIHVzZWRWYWx1ZXMpOworICAgICAgICBlbHNlIGlmIChsYXlvdXRCb3gtPmlzUmVw
bGFjZWQoKSkKICAgICAgICAgICAgIGNvbXB1dGVXaWR0aEFuZEhlaWdodEZvclJlcGxhY2VkSW5s
aW5lQm94KCpsYXlvdXRCb3gsIHVzZWRWYWx1ZXMpOworICAgICAgICBlbHNlIGlmIChpczxJbmxp
bmVCb3g+KCpsYXlvdXRCb3gpKQorICAgICAgICAgICAgaW5pdGlhbGl6ZU1hcmdpbkJvcmRlckFu
ZFBhZGRpbmdGb3JHZW5lcmljSW5saW5lQm94KGRvd25jYXN0PElubGluZUJveD4oKmxheW91dEJv
eCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICAgICAgbGF5b3V0Qm94ID0gbmV4dEluUHJlT3JkZXIoKmxheW91dEJveCwgcm9vdCk7CiAgICAg
fQogCi0gICAgSW5saW5lUnVuUHJvdmlkZXIgaW5saW5lUnVuUHJvdmlkZXI7Ci0gICAgY29sbGVj
dElubGluZUNvbnRlbnQoaW5saW5lUnVuUHJvdmlkZXIpOwotICAgIExpbmVMYXlvdXQoKnRoaXMp
LmxheW91dChpbmxpbmVSdW5Qcm92aWRlcik7CisgICAgLy8gRklYTUU6IFRoaXMgaXMgc3VjaCBh
IHdhc3RlIHdoZW4gaW50cmluc2ljIHdpZHRoIGNvbXB1dGF0aW9uIGFscmVhZHkgY29sbGVjdGVk
IHRoZSBpbmxpbmUgaXRlbXMuCisgICAgZm9ybWF0dGluZ1N0YXRlKCkuaW5saW5lSXRlbXMoKS5j
bGVhcigpOworICAgIGZvcm1hdHRpbmdTdGF0ZSgpLmlubGluZVJ1bnMoKS5jbGVhcigpOworCisg
ICAgY29sbGVjdElubGluZUNvbnRlbnQoKTsKKyAgICBMaW5lTGF5b3V0KCp0aGlzKS5sYXlvdXQo
KTsKICAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVhbSA8
PCAiW0VuZF0gLT4gaW5saW5lIGZvcm1hdHRpbmcgY29udGV4dCAtPiBmb3JtYXR0aW5nIHJvb3Qo
IiA8PCAmcm9vdCA8PCAiKSIpOwogfQogCkBAIC0xMjAsMzAgKzEyNSwzMCBAQCB2b2lkIElubGlu
ZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSW50cmluc2ljV2lkdGhDb25zdHJhaW50cygpIGNv
bnN0CiAgICAgICAgICAgICAgICAgY29tcHV0ZVdpZHRoQW5kTWFyZ2luKCpsYXlvdXRCb3gsIHVz
ZWRWYWx1ZXMpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gU2ltcGxl
IGlubGluZSBjb250YWluZXIgd2l0aCBubyBpbnRyaW5zaWMgd2lkdGggPHNwYW4+LgotICAgICAg
ICAgICAgICAgIGNvbXB1dGVNYXJnaW4oKmxheW91dEJveCwgdXNlZFZhbHVlcyk7CisgICAgICAg
ICAgICAgICAgY29tcHV0ZUhvcml6b250YWxNYXJnaW4oKmxheW91dEJveCwgdXNlZFZhbHVlcyk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgbGF5b3V0Qm94ID0gbmV4dEluUHJl
T3JkZXIoKmxheW91dEJveCwgcm9vdCk7CiAgICAgfQogCi0gICAgSW5saW5lUnVuUHJvdmlkZXIg
aW5saW5lUnVuUHJvdmlkZXI7Ci0gICAgY29sbGVjdElubGluZUNvbnRlbnQoaW5saW5lUnVuUHJv
dmlkZXIpOworICAgIGNvbGxlY3RJbmxpbmVDb250ZW50KCk7CiAKICAgICBhdXRvIG1heGltdW1M
aW5lV2lkdGggPSBbJl0oYXV0byBhdmFpbGFibGVXaWR0aCkgewotICAgICAgICBMYXlvdXRVbml0
IG1heENvbnRlbnRMb2dpY2FsUmlnaHQ7Ci0gICAgICAgIGF1dG8gbGluZUJyZWFrZXIgPSBJbmxp
bmVMaW5lQnJlYWtlciB7IGxheW91dFN0YXRlLCBmb3JtYXR0aW5nU3RhdGUoKS5pbmxpbmVDb250
ZW50KCksIGlubGluZVJ1blByb3ZpZGVyLnJ1bnMoKSB9OwotICAgICAgICBMYXlvdXRVbml0IGxp
bmVMb2dpY2FsUmlnaHQ7Ci0KICAgICAgICAgLy8gU3dpdGNoIHRvIHRoZSBtaW4vbWF4IGZvcm1h
dHRpbmcgcm9vdCB3aWR0aCB2YWx1ZXMgYmVmb3JlIGZvcm1hdHRpbmcgdGhlIGxpbmVzLgogICAg
ICAgICBmb3IgKGF1dG8qIGZvcm1hdHRpbmdSb290IDogZm9ybWF0dGluZ0NvbnRleHRSb290TGlz
dCkgewogICAgICAgICAgICAgYXV0byBpbnRyaW5zaWNXaWR0aHMgPSBsYXlvdXRTdGF0ZS5mb3Jt
YXR0aW5nU3RhdGVGb3JCb3goKmZvcm1hdHRpbmdSb290KS5pbnRyaW5zaWNXaWR0aENvbnN0cmFp
bnRzKCpmb3JtYXR0aW5nUm9vdCk7CiAgICAgICAgICAgICBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94
Rm9yTGF5b3V0Qm94KCpmb3JtYXR0aW5nUm9vdCkuc2V0Q29udGVudEJveFdpZHRoKGF2YWlsYWJs
ZVdpZHRoID8gaW50cmluc2ljV2lkdGhzLT5tYXhpbXVtIDogaW50cmluc2ljV2lkdGhzLT5taW5p
bXVtKTsKICAgICAgICAgfQorICAgICAgICBMYXlvdXRVbml0IG1heENvbnRlbnRMb2dpY2FsUmln
aHQ7CisgICAgICAgIExheW91dFVuaXQgbGluZUxvZ2ljYWxSaWdodDsKIAotICAgICAgICB3aGls
ZSAoYXV0byBydW4gPSBsaW5lQnJlYWtlci5uZXh0UnVuKGxpbmVMb2dpY2FsUmlnaHQsIGF2YWls
YWJsZVdpZHRoLCAhbGluZUxvZ2ljYWxSaWdodCkpIHsKLSAgICAgICAgICAgIGlmIChydW4tPnBv
c2l0aW9uID09IElubGluZUxpbmVCcmVha2VyOjpSdW46OlBvc2l0aW9uOjpMaW5lQmVnaW4pCisg
ICAgICAgIExpbmVCcmVha2VyIGxpbmVCcmVha2VyKGxheW91dFN0YXRlKTsKKyAgICAgICAgYXV0
byYgaW5saW5lQ29udGVudCA9IGZvcm1hdHRpbmdTdGF0ZSgpLmlubGluZUl0ZW1zKCk7CisgICAg
ICAgIGZvciAoYXV0byYgaW5saW5lSXRlbSA6IGlubGluZUNvbnRlbnQpIHsKKyAgICAgICAgICAg
IGF1dG8gYnJlYWtpbmdDb250ZXh0ID0gbGluZUJyZWFrZXIuYnJlYWtpbmdDb250ZXh0KCppbmxp
bmVJdGVtLCB7IGF2YWlsYWJsZVdpZHRoLCBsaW5lTG9naWNhbFJpZ2h0LCAhbGluZUxvZ2ljYWxS
aWdodCB9KTsKKyAgICAgICAgICAgIGlmIChicmVha2luZ0NvbnRleHQuYnJlYWtpbmdCZWhhdmlv
ciA9PSBMaW5lQnJlYWtlcjo6QnJlYWtpbmdCZWhhdmlvcjo6V3JhcCkKICAgICAgICAgICAgICAg
ICBsaW5lTG9naWNhbFJpZ2h0ID0gMDsKLSAgICAgICAgICAgIGxpbmVMb2dpY2FsUmlnaHQgKz0g
cnVuLT53aWR0aDsKKyAgICAgICAgICAgIGxpbmVMb2dpY2FsUmlnaHQgKz0gaW5saW5lSXRlbS0+
d2lkdGgoKTsKIAogICAgICAgICAgICAgbWF4Q29udGVudExvZ2ljYWxSaWdodCA9IHN0ZDo6bWF4
KG1heENvbnRlbnRMb2dpY2FsUmlnaHQsIGxpbmVMb2dpY2FsUmlnaHQpOwogICAgICAgICB9CkBA
IC0xNTQsNiArMTU5LDI2IEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVJ
bnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKCkgY29uc3QKICAgICBsYXlvdXRTdGF0ZS5mb3JtYXR0
aW5nU3RhdGVGb3JCb3gocm9vdCkuc2V0SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyhyb290LCBp
bnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKTsKIH0KIAordm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dDo6aW5pdGlhbGl6ZU1hcmdpbkJvcmRlckFuZFBhZGRpbmdGb3JHZW5lcmljSW5saW5lQm94
KGNvbnN0IElubGluZUJveCYgbGF5b3V0Qm94KSBjb25zdAoreworICAgIEFTU0VSVChsYXlvdXRC
b3guaXNBbm9ueW1vdXMoKSB8fCBpczxMaW5lQnJlYWtCb3g+KGxheW91dEJveCkpOworICAgIGF1
dG8mIGxheW91dFN0YXRlID0gdGhpcy0+bGF5b3V0U3RhdGUoKTsKKyAgICBhdXRvJiBkaXNwbGF5
Qm94ID0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpOworCisg
ICAgZGlzcGxheUJveC5zZXRWZXJ0aWNhbE1hcmdpbih7IHsgfSwgeyB9IH0pOworICAgIGRpc3Bs
YXlCb3guc2V0SG9yaXpvbnRhbE1hcmdpbih7IH0pOworICAgIGRpc3BsYXlCb3guc2V0Qm9yZGVy
KHsgeyB9LCB7IH0gfSk7CisgICAgZGlzcGxheUJveC5zZXRQYWRkaW5nKHsgfSk7Cit9CisKK3Zv
aWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVNYXJnaW5Cb3JkZXJBbmRQYWRkaW5n
Rm9ySW5saW5lQ29udGFpbmVyKGNvbnN0IElubGluZUNvbnRhaW5lciYgY29udGFpbmVyLCBVc2Vk
SG9yaXpvbnRhbFZhbHVlcyB1c2VkVmFsdWVzKSBjb25zdAoreworICAgIGNvbXB1dGVIb3Jpem9u
dGFsTWFyZ2luKGNvbnRhaW5lciwgdXNlZFZhbHVlcyk7CisgICAgY29tcHV0ZUJvcmRlckFuZFBh
ZGRpbmcoY29udGFpbmVyLCB1c2VkVmFsdWVzKTsKKyAgICAvLyBJbmxpbmUgY29udGFpbmVycyAo
PHNwYW4+KSBoYXZlIDAgdmVydGljYWwgbWFyZ2lucy4KKyAgICBsYXlvdXRTdGF0ZSgpLmRpc3Bs
YXlCb3hGb3JMYXlvdXRCb3goY29udGFpbmVyKS5zZXRWZXJ0aWNhbE1hcmdpbih7IHsgfSwgeyB9
IH0pOworfQorCiB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSW50cmluc2lj
V2lkdGhGb3JGbG9hdEJveChjb25zdCBCb3gmIGxheW91dEJveCkgY29uc3QKIHsKICAgICBBU1NF
UlQobGF5b3V0Qm94LmlzRmxvYXRpbmdQb3NpdGlvbmVkKCkpOwpAQCAtMTYxLDcgKzE4Niw3IEBA
IHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVJbnRyaW5zaWNXaWR0aEZvckZs
b2F0Qm94KGNvbnN0IEJveCYgbGF5b3V0CiAKICAgICBhdXRvIHVzZWRIb3Jpem9udGFsVmFsdWVz
ID0gVXNlZEhvcml6b250YWxWYWx1ZXMgeyB9OwogICAgIGNvbXB1dGVCb3JkZXJBbmRQYWRkaW5n
KGxheW91dEJveCwgdXNlZEhvcml6b250YWxWYWx1ZXMpOwotICAgIGNvbXB1dGVNYXJnaW4obGF5
b3V0Qm94LCB1c2VkSG9yaXpvbnRhbFZhbHVlcyk7CisgICAgY29tcHV0ZUhvcml6b250YWxNYXJn
aW4obGF5b3V0Qm94LCB1c2VkSG9yaXpvbnRhbFZhbHVlcyk7CiAgICAgbGF5b3V0U3RhdGUuY3Jl
YXRlRm9ybWF0dGluZ0NvbnRleHQobGF5b3V0Qm94KS0+Y29tcHV0ZUludHJpbnNpY1dpZHRoQ29u
c3RyYWludHMoKTsKIAogICAgIGF1dG8gdXNlZFZlcnRpY2FsVmFsdWVzID0gVXNlZFZlcnRpY2Fs
VmFsdWVzIHsgfTsKQEAgLTE3OCwxMSArMjAzLDExIEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQ6OmNvbXB1dGVJbnRyaW5zaWNXaWR0aEZvcklubGluZUJsb2NrKGNvbnN0IEJveCYgbGF5
CiAKICAgICBhdXRvIHVzZWRWYWx1ZXMgPSBVc2VkSG9yaXpvbnRhbFZhbHVlcyB7IH07CiAgICAg
Y29tcHV0ZUJvcmRlckFuZFBhZGRpbmcobGF5b3V0Qm94LCB1c2VkVmFsdWVzKTsKLSAgICBjb21w
dXRlTWFyZ2luKGxheW91dEJveCwgdXNlZFZhbHVlcyk7CisgICAgY29tcHV0ZUhvcml6b250YWxN
YXJnaW4obGF5b3V0Qm94LCB1c2VkVmFsdWVzKTsKICAgICBsYXlvdXRTdGF0ZSgpLmNyZWF0ZUZv
cm1hdHRpbmdDb250ZXh0KGxheW91dEJveCktPmNvbXB1dGVJbnRyaW5zaWNXaWR0aENvbnN0cmFp
bnRzKCk7CiB9CiAKLXZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVNYXJnaW4o
Y29uc3QgQm94JiBsYXlvdXRCb3gsIFVzZWRIb3Jpem9udGFsVmFsdWVzIHVzZWRWYWx1ZXMpIGNv
bnN0Cit2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSG9yaXpvbnRhbE1hcmdp
bihjb25zdCBCb3gmIGxheW91dEJveCwgVXNlZEhvcml6b250YWxWYWx1ZXMgdXNlZFZhbHVlcykg
Y29uc3QKIHsKICAgICBhdXRvIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbiA9IEdlb21ldHJ5Ojpj
b21wdXRlZEhvcml6b250YWxNYXJnaW4obGF5b3V0Qm94LCB1c2VkVmFsdWVzKTsKICAgICBhdXRv
JiBkaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUoKS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91
dEJveCk7CkBAIC0yMzUsNiArMjYwLDggQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6
bGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRSb290KGNvbnN0IEJveCYgcm9vdCwgVXNlZEgKIAogICAg
IGNvbXB1dGVCb3JkZXJBbmRQYWRkaW5nKHJvb3QsIHVzZWRWYWx1ZXMpOwogICAgIGNvbXB1dGVX
aWR0aEFuZE1hcmdpbihyb290LCB1c2VkVmFsdWVzKTsKKyAgICAvLyBUaGlzIGlzIHNpbWlsYXIg
dG8gc3RhdGljIHBvc2l0aW9uaW5nIGluIGJsb2NrIGZvcm1hdHRpbmcgY29udGV4dC4gV2UganVz
dCBuZWVkIHRvIGluaXRpYWxpemUgdGhlIHRvcCBsZWZ0IHBvc2l0aW9uLgorICAgIGxheW91dFN0
YXRlKCkuZGlzcGxheUJveEZvckxheW91dEJveChyb290KS5zZXRUb3BMZWZ0KHsgMCwgMCB9KTsK
ICAgICAvLyBTd2ljaCBvdmVyIHRvIHRoZSBuZXcgZm9ybWF0dGluZyBjb250ZXh0ICh0aGUgb25l
IHRoYXQgdGhlIHJvb3QgY3JlYXRlcykuCiAgICAgYXV0byBmb3JtYXR0aW5nQ29udGV4dCA9IGxh
eW91dFN0YXRlKCkuY3JlYXRlRm9ybWF0dGluZ0NvbnRleHQocm9vdCk7CiAgICAgZm9ybWF0dGlu
Z0NvbnRleHQtPmxheW91dCgpOwpAQCAtMjU2LDg4ICsyODMsMjkgQEAgdm9pZCBJbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dDo6Y29tcHV0ZVdpZHRoQW5kSGVpZ2h0Rm9yUmVwbGFjZWRJbmxpbmVCb3go
Y29uc3QgQm8KICAgICBjb21wdXRlSGVpZ2h0QW5kTWFyZ2luKGxheW91dEJveCk7CiB9CiAKLXN0
YXRpYyB2b2lkIGFkZERldGFjaGluZ1J1bGVzKElubGluZUl0ZW0mIGlubGluZUl0ZW0sIE9wdGlv
bmFsPExheW91dFVuaXQ+IG5vbkJyZWFrYWJsZVN0YXJ0V2lkdGgsIE9wdGlvbmFsPExheW91dFVu
aXQ+IG5vbkJyZWFrYWJsZUVuZFdpZHRoKQotewotICAgIE9wdGlvblNldDxJbmxpbmVJdGVtOjpE
ZXRhY2hpbmdSdWxlPiBkZXRhY2hpbmdSdWxlczsKLSAgICBpZiAobm9uQnJlYWthYmxlU3RhcnRX
aWR0aCkgewotICAgICAgICBkZXRhY2hpbmdSdWxlcy5hZGQoSW5saW5lSXRlbTo6RGV0YWNoaW5n
UnVsZTo6QnJlYWtBdFN0YXJ0KTsKLSAgICAgICAgaW5saW5lSXRlbS5hZGROb25CcmVha2FibGVT
dGFydCgqbm9uQnJlYWthYmxlU3RhcnRXaWR0aCk7Ci0gICAgfQotICAgIGlmIChub25CcmVha2Fi
bGVFbmRXaWR0aCkgewotICAgICAgICBkZXRhY2hpbmdSdWxlcy5hZGQoSW5saW5lSXRlbTo6RGV0
YWNoaW5nUnVsZTo6QnJlYWtBdEVuZCk7Ci0gICAgICAgIGlubGluZUl0ZW0uYWRkTm9uQnJlYWth
YmxlRW5kKCpub25CcmVha2FibGVFbmRXaWR0aCk7Ci0gICAgfQotICAgIGlubGluZUl0ZW0uYWRk
RGV0YWNoaW5nUnVsZShkZXRhY2hpbmdSdWxlcyk7Ci19Ci0KLXN0YXRpYyBJbmxpbmVJdGVtJiBj
cmVhdGVBbmRBcHBlbmRJbmxpbmVJdGVtKElubGluZVJ1blByb3ZpZGVyJiBpbmxpbmVSdW5Qcm92
aWRlciwgSW5saW5lQ29udGVudCYgaW5saW5lQ29udGVudCwgY29uc3QgQm94JiBsYXlvdXRCb3gp
Ci17Ci0gICAgQVNTRVJUKGxheW91dEJveC5pc0lubGluZUxldmVsQm94KCkgfHwgbGF5b3V0Qm94
LmlzRmxvYXRpbmdQb3NpdGlvbmVkKCkpOwotICAgIGF1dG8gaW5saW5lSXRlbSA9IHN0ZDo6bWFr
ZV91bmlxdWU8SW5saW5lSXRlbT4obGF5b3V0Qm94KTsKLSAgICBhdXRvKiBpbmxpbmVJdGVtUHRy
ID0gaW5saW5lSXRlbS5nZXQoKTsKLSAgICBpbmxpbmVDb250ZW50LmFkZChXVEZNb3ZlKGlubGlu
ZUl0ZW0pKTsKLSAgICBpbmxpbmVSdW5Qcm92aWRlci5hcHBlbmQoKmlubGluZUl0ZW1QdHIpOwot
ICAgIHJldHVybiAqaW5saW5lSXRlbVB0cjsKLX0KLQotdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dDo6Y29sbGVjdElubGluZUNvbnRlbnQoSW5saW5lUnVuUHJvdmlkZXImIGlubGluZVJ1blBy
b3ZpZGVyKSBjb25zdAordm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29sbGVjdElubGlu
ZUNvbnRlbnQoKSBjb25zdAogewogICAgIGlmICghaXM8Q29udGFpbmVyPihyb290KCkpKQogICAg
ICAgICByZXR1cm47CiAgICAgYXV0byYgcm9vdCA9IGRvd25jYXN0PENvbnRhaW5lcj4odGhpcy0+
cm9vdCgpKTsKICAgICBpZiAoIXJvb3QuaGFzSW5GbG93T3JGbG9hdGluZ0NoaWxkKCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICAvLyBUaGUgbG9naWMgaGVyZSBpcyB2ZXJ5IHNpbWlsYXIgdG8gQkZD
IGxheW91dC4KLSAgICAvLyAxLiBUcmF2ZXJzIGRvd24gdGhlIGxheW91dCB0cmVlIGFuZCBjb2xs
ZWN0ICJzdGFydCIgdW5icmVha2FibGUgd2lkdGhzIChtYXJnaW4tbGVmdCwgYm9yZGVyLWxlZnQs
IHBhZGRpbmctbGVmdCkKLSAgICAvLyAyLiBDcmVhdGUgSW5saW5lSXRlbSBwZXIgbGVhZiBpbmxp
bmUgYm94ICh0ZXh0IG5vZGVzLCBpbmxpbmUtYmxvY2tzLCBmbG9hdHMpIGFuZCBzZXQgInN0YXJ0
IiB1bmJyZWFrYWJsZSB3aWR0aCBvbiB0aGVtLiAKLSAgICAvLyAzLiBDbGltYiBiYWNrIGFuZCBj
b2xsZWN0ICJlbmQiIHVuYnJlYWthYmxlIHdpZHRoIGFuZCBzZXQgaXQgb24gdGhlIGxhc3QgSW5s
aW5lSXRlbS4KLSAgICBhdXRvJiBsYXlvdXRTdGF0ZSA9IHRoaXMtPmxheW91dFN0YXRlKCk7Ci0g
ICAgYXV0byYgaW5saW5lQ29udGVudCA9IGZvcm1hdHRpbmdTdGF0ZSgpLmlubGluZUNvbnRlbnQo
KTsKLQotICAgIGVudW0gY2xhc3MgTm9uQnJlYWthYmxlV2lkdGhUeXBlIHsgU3RhcnQsIEVuZCB9
OwotICAgIGF1dG8gbm9uQnJlYWthYmxlV2lkdGggPSBbJl0oYXV0byYgY29udGFpbmVyLCBhdXRv
IHR5cGUpIHsKLSAgICAgICAgYXV0byYgZGlzcGxheUJveCA9IGxheW91dFN0YXRlLmRpc3BsYXlC
b3hGb3JMYXlvdXRCb3goY29udGFpbmVyKTsKLSAgICAgICAgaWYgKHR5cGUgPT0gTm9uQnJlYWth
YmxlV2lkdGhUeXBlOjpTdGFydCkKLSAgICAgICAgICAgIHJldHVybiBkaXNwbGF5Qm94Lm1hcmdp
blN0YXJ0KCkgKyBkaXNwbGF5Qm94LmJvcmRlckxlZnQoKSArIGRpc3BsYXlCb3gucGFkZGluZ0xl
ZnQoKS52YWx1ZU9yKDApOwotICAgICAgICByZXR1cm4gZGlzcGxheUJveC5tYXJnaW5FbmQoKSAr
IGRpc3BsYXlCb3guYm9yZGVyUmlnaHQoKSArIGRpc3BsYXlCb3gucGFkZGluZ1JpZ2h0KCkudmFs
dWVPcigwKTsKLSAgICB9OwotCisgICAgLy8gVHJhdmVyc2UgdGhlIHRyZWUgYW5kIGNyZWF0ZSBp
bmxpbmUgaXRlbXMgb3V0IG9mIGNvbnRhaW5lcnMgYW5kIGxlYWYgbm9kZS4gVGhpcyBlc3NlbnRp
YWxseSB0cnVucyB0aGUgdHJlZSBpbmxpbmUgc3RydWN0dXJlIGludG8gYSBmbGF0IG9uZS4KKyAg
ICAvLyA8c3Bhbj50ZXh0PHNwYW4+PC9zcGFuPjxpbWc+PC9zcGFuPiAtPiBbQ29udGFpbmVyU3Rh
cnRdW0lubGluZUJveF1bQ29udGFpbmVyU3RhcnRdW0NvbnRhaW5lckVuZF1bSW5saW5lQm94XVtD
b250YWluZXJFbmRdCisgICAgYXV0byYgZm9ybWF0dGluZ1N0YXRlID0gdGhpcy0+Zm9ybWF0dGlu
Z1N0YXRlKCk7CiAgICAgTGF5b3V0UXVldWUgbGF5b3V0UXVldWU7CiAgICAgbGF5b3V0UXVldWUu
YXBwZW5kKHJvb3QuZmlyc3RJbkZsb3dPckZsb2F0aW5nQ2hpbGQoKSk7Ci0KLSAgICBPcHRpb25h
bDxMYXlvdXRVbml0PiBub25CcmVha2FibGVTdGFydFdpZHRoOwotICAgIE9wdGlvbmFsPExheW91
dFVuaXQ+IG5vbkJyZWFrYWJsZUVuZFdpZHRoOwotICAgIElubGluZUl0ZW0qIGxhc3RJbmxpbmVJ
dGVtID0gbnVsbHB0cjsKICAgICB3aGlsZSAoIWxheW91dFF1ZXVlLmlzRW1wdHkoKSkgeworICAg
ICAgICBhdXRvIHRyZWF0QXNJbmxpbmVDb250YWluZXIgPSBbXShhdXRvJiBsYXlvdXRCb3gpIHsK
KyAgICAgICAgICAgIHJldHVybiBpczxDb250YWluZXI+KGxheW91dEJveCkgJiYgIWxheW91dEJv
eC5lc3RhYmxpc2hlc0Zvcm1hdHRpbmdDb250ZXh0KCk7CisgICAgICAgIH07CiAgICAgICAgIHdo
aWxlICh0cnVlKSB7CiAgICAgICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSAqbGF5b3V0UXVldWUu
bGFzdCgpOwotICAgICAgICAgICAgaWYgKCFpczxDb250YWluZXI+KGxheW91dEJveCkpCisgICAg
ICAgICAgICBpZiAoIXRyZWF0QXNJbmxpbmVDb250YWluZXIobGF5b3V0Qm94KSkKICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIHN0YXJ0IG9mIGFuIGlu
bGluZSBjb250YWluZXIgKGUuZy4gPHNwYW4+KS4KKyAgICAgICAgICAgIGZvcm1hdHRpbmdTdGF0
ZS5hZGRJbmxpbmVJdGVtKHN0ZDo6bWFrZV91bmlxdWU8SW5saW5lSXRlbT4obGF5b3V0Qm94LCBJ
bmxpbmVJdGVtOjpUeXBlOjpDb250YWluZXJTdGFydCkpOwogICAgICAgICAgICAgYXV0byYgY29u
dGFpbmVyID0gZG93bmNhc3Q8Q29udGFpbmVyPihsYXlvdXRCb3gpOwotCi0gICAgICAgICAgICBp
ZiAoY29udGFpbmVyLmVzdGFibGlzaGVzRm9ybWF0dGluZ0NvbnRleHQoKSkgewotICAgICAgICAg
ICAgICAgIC8vIEZvcm1hdHRpbmcgY29udGV4dHMgYXJlIHRyZWF0ZWQgYXMgbGVhZiBub2Rlcy4K
LSAgICAgICAgICAgICAgICBhdXRvJiBpbmxpbmVJdGVtID0gY3JlYXRlQW5kQXBwZW5kSW5saW5l
SXRlbShpbmxpbmVSdW5Qcm92aWRlciwgaW5saW5lQ29udGVudCwgY29udGFpbmVyKTsKLSAgICAg
ICAgICAgICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxh
eW91dEJveChjb250YWluZXIpOwotICAgICAgICAgICAgICAgIGF1dG8gY3VycmVudE5vbkJyZWFr
YWJsZVN0YXJ0V2lkdGggPSBub25CcmVha2FibGVTdGFydFdpZHRoLnZhbHVlT3IoMCkgKyBkaXNw
bGF5Qm94Lm1hcmdpblN0YXJ0KCkgKyBub25CcmVha2FibGVFbmRXaWR0aC52YWx1ZU9yKDApOwot
ICAgICAgICAgICAgICAgIGFkZERldGFjaGluZ1J1bGVzKGlubGluZUl0ZW0sIGN1cnJlbnROb25C
cmVha2FibGVTdGFydFdpZHRoLCBkaXNwbGF5Qm94Lm1hcmdpbkVuZCgpKTsKLSAgICAgICAgICAg
ICAgICBub25CcmVha2FibGVTdGFydFdpZHRoID0geyB9OwotICAgICAgICAgICAgICAgIG5vbkJy
ZWFrYWJsZUVuZFdpZHRoID0geyB9OwotCi0gICAgICAgICAgICAgICAgLy8gRm9ybWF0dGluZyBj
b250ZXh0IHJvb3RzIHRha2UgY2FyZSBvZiB0aGVpciBzdWJ0cmVlcy4gQ29udGludWUgd2l0aCBu
ZXh0IHNpYmxpbmcgaWYgZXhpc3RzLgotICAgICAgICAgICAgICAgIGxheW91dFF1ZXVlLnJlbW92
ZUxhc3QoKTsKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRhaW5lci5uZXh0SW5GbG93T3JGbG9h
dGluZ1NpYmxpbmcoKSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgbGF5b3V0UXVldWUuYXBwZW5kKGNvbnRhaW5lci5uZXh0SW5GbG93T3JGbG9hdGluZ1NpYmxp
bmcoKSk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIC8vIENoZWNrIGlmIHRoaXMgbm9uLWZvcm1hdHRpbmcgY29udGV4dCBjb250YWluZXIg
aGFzIGFueSBub24tYnJlYWthYmxlIHN0YXJ0IHByb3BlcnRpZXMgKG1hcmdpbi1sZWZ0LCBib3Jk
ZXItbGVmdCwgcGFkZGluZy1sZWZ0KQotICAgICAgICAgICAgLy8gPHNwYW4gc3R5bGU9InBhZGRp
bmctbGVmdDogNXB4Ij48c3BhbiBzdHlsZT0icGFkZGluZy1sZWZ0OiA1cHgiPmZvb2Jhcjwvc3Bh
bj48L3NwYW4+IC0+IDVweCArIDVweAotICAgICAgICAgICAgYXV0byBjdXJyZW50Tm9uQnJlYWth
YmxlU3RhcnRXaWR0aCA9IG5vbkJyZWFrYWJsZVdpZHRoKGxheW91dEJveCwgTm9uQnJlYWthYmxl
V2lkdGhUeXBlOjpTdGFydCk7Ci0gICAgICAgICAgICBpZiAoY3VycmVudE5vbkJyZWFrYWJsZVN0
YXJ0V2lkdGggfHwgbGF5b3V0Qm94LmlzUG9zaXRpb25lZCgpKQotICAgICAgICAgICAgICAgIG5v
bkJyZWFrYWJsZVN0YXJ0V2lkdGggPSBub25CcmVha2FibGVTdGFydFdpZHRoLnZhbHVlT3IoMCkg
KyBjdXJyZW50Tm9uQnJlYWthYmxlU3RhcnRXaWR0aDsKLQogICAgICAgICAgICAgaWYgKCFjb250
YWluZXIuaGFzSW5GbG93T3JGbG9hdGluZ0NoaWxkKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICBsYXlvdXRRdWV1ZS5hcHBlbmQoY29udGFpbmVyLmZpcnN0SW5GbG93T3JG
bG9hdGluZ0NoaWxkKCkpOwpAQCAtMzQ1LDI5ICszMTMsMTkgQEAgdm9pZCBJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dDo6Y29sbGVjdElubGluZUNvbnRlbnQoSW5saW5lUnVuUHJvdmlkZXImIGlubGlu
ZVJ1blAKIAogICAgICAgICB3aGlsZSAoIWxheW91dFF1ZXVlLmlzRW1wdHkoKSkgewogICAgICAg
ICAgICAgYXV0byYgbGF5b3V0Qm94ID0gKmxheW91dFF1ZXVlLnRha2VMYXN0KCk7Ci0gICAgICAg
ICAgICBpZiAoaXM8Q29udGFpbmVyPihsYXlvdXRCb3gpKSB7Ci0gICAgICAgICAgICAgICAgLy8g
VGhpcyBpcyB0aGUgZW5kIG9mIGFuIGlubGluZSBjb250YWluZXIuIENvbXB1dGUgdGhlIG5vbi1i
cmVha2FibGUgZW5kIHdpZHRoIGFuZCBhZGQgaXQgdG8gdGhlIGxhc3QgaW5saW5lIGJveC4KLSAg
ICAgICAgICAgICAgICAvLyA8c3BhbiBzdHlsZT0icGFkZGluZy1yaWdodDogNXB4Ij5mb29iYXI8
L3NwYW4+IC0+IDVweDsgbGFzdCBpbmxpbmUgaXRlbSAtPiAiZm9vYmFyIgotICAgICAgICAgICAg
ICAgIGF1dG8gY3VycmVudE5vbkJyZWFrYWJsZUVuZFdpZHRoID0gbm9uQnJlYWthYmxlV2lkdGgo
bGF5b3V0Qm94LCBOb25CcmVha2FibGVXaWR0aFR5cGU6OkVuZCk7Ci0gICAgICAgICAgICAgICAg
aWYgKGN1cnJlbnROb25CcmVha2FibGVFbmRXaWR0aCB8fCBsYXlvdXRCb3guaXNQb3NpdGlvbmVk
KCkpCi0gICAgICAgICAgICAgICAgICAgIG5vbkJyZWFrYWJsZUVuZFdpZHRoID0gbm9uQnJlYWth
YmxlRW5kV2lkdGgudmFsdWVPcigwKSArIGN1cnJlbnROb25CcmVha2FibGVFbmRXaWR0aDsKLSAg
ICAgICAgICAgICAgICAvLyBBZGQgaXQgdG8gdGhlIGxhc3QgaW5saW5lIGJveAotICAgICAgICAg
ICAgICAgIGlmIChsYXN0SW5saW5lSXRlbSkgewotICAgICAgICAgICAgICAgICAgICBhZGREZXRh
Y2hpbmdSdWxlcygqbGFzdElubGluZUl0ZW0sIHsgfSwgbm9uQnJlYWthYmxlRW5kV2lkdGgpOwot
ICAgICAgICAgICAgICAgICAgICBub25CcmVha2FibGVFbmRXaWR0aCA9IHsgfTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIExlYWYg
aW5saW5lIGJveAotICAgICAgICAgICAgICAgIGF1dG8mIGlubGluZUl0ZW0gPSBjcmVhdGVBbmRB
cHBlbmRJbmxpbmVJdGVtKGlubGluZVJ1blByb3ZpZGVyLCBpbmxpbmVDb250ZW50LCBsYXlvdXRC
b3gpOwotICAgICAgICAgICAgICAgIC8vIEFkZCBzdGFydCBhbmQgdGhlICh0aHJvdWdoIGVtcHR5
IGNvbnRhaW5lcnMpIGFjY3VtdWxhdGVkIGVuZCB3aWR0aC4KLSAgICAgICAgICAgICAgICAvLyA8
c3BhbiBzdHlsZT0icGFkZGluZy1sZWZ0OiAxcHgiPmZvb2Jhcjwvc3Bhbj4gLT4gbm9uQnJlYWth
YmxlU3RhcnRXaWR0aDogMXB4OwotICAgICAgICAgICAgICAgIC8vIDxzcGFuIHN0eWxlPSJwYWRk
aW5nOiA1cHgiPjwvc3Bhbj5mb29iYXIgLT4gbm9uQnJlYWthYmxlU3RhcnRXaWR0aDogNXB4OyBu
b25CcmVha2FibGVFbmRXaWR0aDogNXB4Ci0gICAgICAgICAgICAgICAgaWYgKG5vbkJyZWFrYWJs
ZVN0YXJ0V2lkdGggfHwgbm9uQnJlYWthYmxlRW5kV2lkdGgpIHsKLSAgICAgICAgICAgICAgICAg
ICAgYWRkRGV0YWNoaW5nUnVsZXMoaW5saW5lSXRlbSwgbm9uQnJlYWthYmxlU3RhcnRXaWR0aC52
YWx1ZU9yKDApICsgbm9uQnJlYWthYmxlRW5kV2lkdGgudmFsdWVPcigwKSwgeyB9KTsKLSAgICAg
ICAgICAgICAgICAgICAgbm9uQnJlYWthYmxlU3RhcnRXaWR0aCA9IHsgfTsKLSAgICAgICAgICAg
ICAgICAgICAgbm9uQnJlYWthYmxlRW5kV2lkdGggPSB7IH07Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGxhc3RJbmxpbmVJdGVtID0gJmlubGluZUl0ZW07CisgICAgICAgICAg
ICAvLyBUaGlzIGlzIHRoZSBlbmQgb2YgYW4gaW5saW5lIGNvbnRhaW5lciAoZS5nLiA8L3NwYW4+
KS4KKyAgICAgICAgICAgIGlmICh0cmVhdEFzSW5saW5lQ29udGFpbmVyKGxheW91dEJveCkpCisg
ICAgICAgICAgICAgICAgZm9ybWF0dGluZ1N0YXRlLmFkZElubGluZUl0ZW0oc3RkOjptYWtlX3Vu
aXF1ZTxJbmxpbmVJdGVtPihsYXlvdXRCb3gsIElubGluZUl0ZW06OlR5cGU6OkNvbnRhaW5lckVu
ZCkpOworICAgICAgICAgICAgZWxzZSBpZiAoaXM8TGluZUJyZWFrQm94PihsYXlvdXRCb3gpKQor
ICAgICAgICAgICAgICAgIGZvcm1hdHRpbmdTdGF0ZS5hZGRJbmxpbmVJdGVtKHN0ZDo6bWFrZV91
bmlxdWU8SW5saW5lSXRlbT4obGF5b3V0Qm94LCBJbmxpbmVJdGVtOjpUeXBlOjpIYXJkTGluZUJy
ZWFrKSk7CisgICAgICAgICAgICBlbHNlIGlmIChsYXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9u
ZWQoKSkKKyAgICAgICAgICAgICAgICBmb3JtYXR0aW5nU3RhdGUuYWRkSW5saW5lSXRlbShzdGQ6
Om1ha2VfdW5pcXVlPElubGluZUl0ZW0+KGxheW91dEJveCwgSW5saW5lSXRlbTo6VHlwZTo6Rmxv
YXQpKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIEFTU0VSVChpczxJbmxp
bmVCb3g+KGxheW91dEJveCkgfHwgbGF5b3V0Qm94LmlzSW5saW5lQmxvY2tCb3goKSk7CisgICAg
ICAgICAgICAgICAgaWYgKGlzPElubGluZUJveD4obGF5b3V0Qm94KSAmJiBkb3duY2FzdDxJbmxp
bmVCb3g+KGxheW91dEJveCkuaGFzVGV4dENvbnRlbnQoKSkKKyAgICAgICAgICAgICAgICAgICAg
SW5saW5lVGV4dEl0ZW06OmNyZWF0ZUFuZEFwcGVuZFRleHRJdGVtcyhmb3JtYXR0aW5nU3RhdGUu
aW5saW5lSXRlbXMoKSwgZG93bmNhc3Q8SW5saW5lQm94PihsYXlvdXRCb3gpKTsKKyAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRpbmdTdGF0ZS5hZGRJbmxp
bmVJdGVtKHN0ZDo6bWFrZV91bmlxdWU8SW5saW5lSXRlbT4obGF5b3V0Qm94LCBJbmxpbmVJdGVt
OjpUeXBlOjpCb3gpKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGF1dG8qIG5l
eHRTaWJsaW5nID0gbGF5b3V0Qm94Lm5leHRJbkZsb3dPckZsb2F0aW5nU2libGluZygpKSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVG
b3JtYXR0aW5nQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRp
bmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaAppbmRleCBhNGZiMzE1ODRhZGY4YjgxZDhkNWM2
MWMzMzcyNjEyYjBkYTkzMjgxLi45YjBkNjIyNmI1M2FjYzRlMWJmYWUyNTVmZGRmOTU4MTA2NTVl
MGRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9J
bmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxp
bmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmgKQEAgLTMwLDcgKzMwLDYgQEAK
ICNpbmNsdWRlICJEaXNwbGF5Qm94LmgiCiAjaW5jbHVkZSAiRm9ybWF0dGluZ0NvbnRleHQuaCIK
ICNpbmNsdWRlICJJbmxpbmVGb3JtYXR0aW5nU3RhdGUuaCIKLSNpbmNsdWRlICJJbmxpbmVSdW4u
aCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAg
LTM4LDcgKzM3LDYgQEAgbmFtZXNwYWNlIExheW91dCB7CiAKIGNsYXNzIEZsb2F0aW5nU3RhdGU7
CiBjbGFzcyBJbmxpbmVDb250YWluZXI7Ci1jbGFzcyBJbmxpbmVSdW5Qcm92aWRlcjsKIGNsYXNz
IExpbmU7CiAKIC8vIFRoaXMgY2xhc3MgaW1wbGVtZW50cyB0aGUgbGF5b3V0IGxvZ2ljIGZvciBp
bmxpbmUgZm9ybWF0dGluZyBjb250ZXh0cy4KQEAgLTU1LDIxICs1MywxNSBAQCBwcml2YXRlOgog
ICAgIGNsYXNzIExpbmVMYXlvdXQgewogICAgIHB1YmxpYzoKICAgICAgICAgTGluZUxheW91dChj
b25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYpOwotICAgICAgICB2b2lkIGxheW91dChjb25z
dCBJbmxpbmVSdW5Qcm92aWRlciYpIGNvbnN0OworICAgICAgICB2b2lkIGxheW91dCgpIGNvbnN0
OwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgZW51bSBjbGFzcyBJc0xhc3RMaW5lIHsgTm8sIFll
cyB9OwotICAgICAgICB2b2lkIGluaXRpYWxpemVOZXdMaW5lKExpbmUmKSBjb25zdDsKLSAgICAg
ICAgdm9pZCBjbG9zZUxpbmUoTGluZSYsIElzTGFzdExpbmUpIGNvbnN0OwotICAgICAgICB2b2lk
IGFwcGVuZENvbnRlbnRUb0xpbmUoTGluZSYsIGNvbnN0IElubGluZVJ1blByb3ZpZGVyOjpSdW4m
LCBjb25zdCBMYXlvdXRTaXplJikgY29uc3Q7Ci0gICAgICAgIHZvaWQgcG9zdFByb2Nlc3NJbmxp
bmVSdW5zKExpbmUmLCBJc0xhc3RMaW5lKSBjb25zdDsKLSAgICAgICAgdm9pZCBjcmVhdGVGaW5h
bFJ1bnMoTGluZSYpIGNvbnN0OwotICAgICAgICB2b2lkIHNwbGl0SW5saW5lUnVuSWZOZWVkZWQo
Y29uc3QgSW5saW5lUnVuJiwgSW5saW5lUnVucyYgc3BsaXRSdW5zKSBjb25zdDsKLSAgICAgICAg
dm9pZCBjb21wdXRlRmxvYXRQb3NpdGlvbihjb25zdCBGbG9hdGluZ0NvbnRleHQmLCBMaW5lJiwg
Y29uc3QgQm94JikgY29uc3Q7Ci0gICAgICAgIHZvaWQgcGxhY2VJbkZsb3dQb3NpdGlvbmVkQ2hp
bGRyZW4odW5zaWduZWQgZmlyc3RSdW5JbmRleCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgYWxpZ25S
dW5zKFRleHRBbGlnbk1vZGUsIExpbmUmLCBJc0xhc3RMaW5lKSBjb25zdDsKLSAgICAgICAgdm9p
ZCBjb21wdXRlRXhwYW5zaW9uT3Bwb3J0dW5pdGllcyhMaW5lJiwgY29uc3QgSW5saW5lUnVuUHJv
dmlkZXI6OlJ1biYsIElubGluZVJ1blByb3ZpZGVyOjpSdW46OlR5cGUgbGFzdFJ1blR5cGUpIGNv
bnN0OwotICAgICAgICBMYXlvdXRVbml0IHJ1bldpZHRoKGNvbnN0IElubGluZUNvbnRlbnQmLCBj
b25zdCBJbmxpbmVJdGVtJiwgSXRlbVBvc2l0aW9uIGZyb20sIHVuc2lnbmVkIGxlbmd0aCwgTGF5
b3V0VW5pdCBjb250ZW50TG9naWNhbExlZnQpIGNvbnN0OworICAgICAgICBMYXlvdXRTdGF0ZSYg
bGF5b3V0U3RhdGUoKSBjb25zdCB7IHJldHVybiBtX2Zvcm1hdHRpbmdDb250ZXh0LmxheW91dFN0
YXRlKCk7IH0KKyAgICAgICAgdm9pZCBpbml0aWFsaXplTGluZShMaW5lJiwgTGF5b3V0VW5pdCBs
aW5lTG9naWNhbFRvcCkgY29uc3Q7CisgICAgICAgIHZvaWQgY2xvc2VMaW5lKExpbmUmKSBjb25z
dDsKKyAgICAgICAgdm9pZCBjb21taXRJbmxpbmVJdGVtVG9MaW5lKExpbmUmLCBjb25zdCBJbmxp
bmVJdGVtJikgY29uc3Q7CisgICAgICAgIHZvaWQgaGFuZGxlRmxvYXQoTGluZSYsIGNvbnN0IEZs
b2F0aW5nQ29udGV4dCYsIGNvbnN0IElubGluZUl0ZW0mIGZsb2F0Qm94KSBjb25zdDsKKyAgICAg
ICAgdm9pZCBhbGlnblJ1bnMoVGV4dEFsaWduTW9kZSwgdW5zaWduZWQgZmlyc3RSdW5JbmRleCwg
TGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCkgY29uc3Q7CiAKICAgICBwcml2YXRlOgogICAgICAg
ICBzdGF0aWMgdm9pZCBqdXN0aWZ5UnVucyhMaW5lJik7CkBAIC04OSwxMyArODEsMTUgQEAgcHJp
dmF0ZToKIAogICAgIHZvaWQgbGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRSb290KGNvbnN0IEJveCYs
IFVzZWRIb3Jpem9udGFsVmFsdWVzKSBjb25zdDsKICAgICB2b2lkIGNvbXB1dGVJbnRyaW5zaWNX
aWR0aEZvckZsb2F0Qm94KGNvbnN0IEJveCYpIGNvbnN0OworICAgIHZvaWQgY29tcHV0ZU1hcmdp
bkJvcmRlckFuZFBhZGRpbmdGb3JJbmxpbmVDb250YWluZXIoY29uc3QgSW5saW5lQ29udGFpbmVy
JiwgVXNlZEhvcml6b250YWxWYWx1ZXMpIGNvbnN0OworICAgIHZvaWQgaW5pdGlhbGl6ZU1hcmdp
bkJvcmRlckFuZFBhZGRpbmdGb3JHZW5lcmljSW5saW5lQm94KGNvbnN0IElubGluZUJveCYpIGNv
bnN0OwogICAgIHZvaWQgY29tcHV0ZUludHJpbnNpY1dpZHRoRm9ySW5saW5lQmxvY2soY29uc3Qg
Qm94JikgY29uc3Q7CiAgICAgdm9pZCBjb21wdXRlV2lkdGhBbmRIZWlnaHRGb3JSZXBsYWNlZElu
bGluZUJveChjb25zdCBCb3gmLCBVc2VkSG9yaXpvbnRhbFZhbHVlcykgY29uc3Q7Ci0gICAgdm9p
ZCBjb21wdXRlTWFyZ2luKGNvbnN0IEJveCYsIFVzZWRIb3Jpem9udGFsVmFsdWVzKSBjb25zdDsK
KyAgICB2b2lkIGNvbXB1dGVIb3Jpem9udGFsTWFyZ2luKGNvbnN0IEJveCYsIFVzZWRIb3Jpem9u
dGFsVmFsdWVzKSBjb25zdDsKICAgICB2b2lkIGNvbXB1dGVIZWlnaHRBbmRNYXJnaW4oY29uc3Qg
Qm94JikgY29uc3Q7CiAgICAgdm9pZCBjb21wdXRlV2lkdGhBbmRNYXJnaW4oY29uc3QgQm94Jiwg
VXNlZEhvcml6b250YWxWYWx1ZXMpIGNvbnN0OwogCi0gICAgdm9pZCBjb2xsZWN0SW5saW5lQ29u
dGVudChJbmxpbmVSdW5Qcm92aWRlciYpIGNvbnN0OworICAgIHZvaWQgY29sbGVjdElubGluZUNv
bnRlbnQoKSBjb25zdDsKIAogICAgIElubGluZUZvcm1hdHRpbmdTdGF0ZSYgZm9ybWF0dGluZ1N0
YXRlKCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8SW5saW5lRm9ybWF0dGluZ1N0YXRlPihGb3Jt
YXR0aW5nQ29udGV4dDo6Zm9ybWF0dGluZ1N0YXRlKCkpOyB9CiB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRl
eHRMaW5lTGF5b3V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5n
L0lubGluZUZvcm1hdHRpbmdDb250ZXh0TGluZUxheW91dC5jcHAKaW5kZXggMzY3NWZhZGY5MThm
MTcwOTk4ODkzZGVkMzQ4YWJlNzU1ZDA0MGFmZi4uOTQxZWFkZGFmM2ZiZmJmNjJjMGY0MmI2MzM5
YjIyZTBhYzljNGQ2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZv
cm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4
dExpbmVMYXlvdXQuY3BwCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSAiRmxvYXRpbmdTdGF0
ZS5oIgogI2luY2x1ZGUgIklubGluZUZvcm1hdHRpbmdTdGF0ZS5oIgogI2luY2x1ZGUgIklubGlu
ZUxpbmVCcmVha2VyLmgiCi0jaW5jbHVkZSAiSW5saW5lUnVuUHJvdmlkZXIuaCIKICNpbmNsdWRl
ICJMYXlvdXRCb3guaCIKICNpbmNsdWRlICJMYXlvdXRDb250YWluZXIuaCIKICNpbmNsdWRlICJM
YXlvdXRTdGF0ZS5oIgpAQCAtNDEsMjMwICs0MCwzMTggQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IG5hbWVzcGFjZSBMYXlvdXQgewogCitzdHJ1Y3QgVXNlZEhlaWdodEFuZERlcHRoIHsKKyAgICBM
YXlvdXRVbml0IGhlaWdodDsKKyAgICBMYXlvdXRVbml0IGRlcHRoOworfTsKKworc3RhdGljIFVz
ZWRIZWlnaHRBbmREZXB0aCBoYWxmTGVhZGluZ01ldHJpY3MoY29uc3QgRm9udE1ldHJpY3MmIGZv
bnRNZXRyaWNzLCBMYXlvdXRVbml0IGxpbmVMb2dpY2FsSGVpZ2h0KQoreworICAgIGF1dG8gYXNj
ZW50ID0gZm9udE1ldHJpY3MuYXNjZW50KCk7CisgICAgYXV0byBkZXNjZW50ID0gZm9udE1ldHJp
Y3MuZGVzY2VudCgpOworICAgIC8vIDEwLjguMSBMZWFkaW5nIGFuZCBoYWxmLWxlYWRpbmcKKyAg
ICBhdXRvIGxlYWRpbmcgPSBsaW5lTG9naWNhbEhlaWdodCAtIChhc2NlbnQgKyBkZXNjZW50KTsK
KyAgICAvLyBJbmxpbmUgdHJlZSBpcyBhbGwgaW50ZWdlciBiYXNlZC4KKyAgICBhdXRvIGFkanVz
dGVkQXNjZW50ID0gc3RkOjptYXgoKGFzY2VudCArIGxlYWRpbmcgLyAyKS5mbG9vcigpLCAwKTsK
KyAgICBhdXRvIGFkanVzdGVkRGVzY2VudCA9IHN0ZDo6bWF4KChkZXNjZW50ICsgbGVhZGluZyAv
IDIpLmNlaWwoKSwgMCk7CisgICAgcmV0dXJuIHsgYWRqdXN0ZWRBc2NlbnQsIGFkanVzdGVkRGVz
Y2VudCB9OyAKK30KKwogY2xhc3MgTGluZSB7CiBwdWJsaWM6Ci0gICAgdm9pZCBpbml0KGNvbnN0
IExheW91dFBvaW50JiB0b3BMZWZ0LCBMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoLCBMYXlvdXRV
bml0IG1pbmltYWxIZWlnaHQpOwotICAgIHZvaWQgY2xvc2UoKTsKKyAgICBMaW5lKGNvbnN0IExh
eW91dFN0YXRlJik7CisKKyAgICB2b2lkIHJlc2V0KGNvbnN0IExheW91dFBvaW50JiB0b3BMZWZ0
LCBMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoLCBMYXlvdXRVbml0IG1pbmltdW1MaW5lSGVpZ2h0
LCBMYXlvdXRVbml0IGJhc2VsaW5lT2Zmc2V0KTsKKworICAgIHN0cnVjdCBMaW5lSXRlbSB7Cisg
ICAgICAgIExpbmVJdGVtKERpc3BsYXk6OlJ1biwgY29uc3QgSW5saW5lSXRlbSYsIGJvb2wgaXND
b2xsYXBzZWQsIGJvb2wgY2FuQmVFeHRlbmRlZCk7CisKKyAgICAgICAgLy8gUmVsYXRpdmUgdG8g
dGhlIGJhc2VsaW5lLgorICAgICAgICBEaXNwbGF5OjpSdW4gaW5saW5lUnVuOworICAgICAgICBj
b25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtOworICAgICAgICBib29sIGlzQ29sbGFwc2VkIHsg
ZmFsc2UgfTsKKyAgICAgICAgYm9vbCBjYW5CZUV4dGVuZGVkIHsgZmFsc2UgfTsKKyAgICB9Owor
CisgICAgdXNpbmcgTGluZUl0ZW1zID0gVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxMaW5lSXRlbT4+
OworICAgIGNvbnN0IExpbmVJdGVtcyYgY2xvc2UoKTsKIAotICAgIHZvaWQgYXBwZW5kQ29udGVu
dChjb25zdCBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuJiwgY29uc3QgTGF5b3V0U2l6ZSYpOworICAg
IHZvaWQgYXBwZW5kVGV4dENvbnRlbnQoY29uc3QgSW5saW5lVGV4dEl0ZW0mLCBMYXlvdXRTaXpl
KTsKKyAgICB2b2lkIGFwcGVuZE5vblRleHRDb250ZW50KGNvbnN0IElubGluZUl0ZW0mLCBMYXlv
dXRTaXplKTsKKyAgICB2b2lkIGFwcGVuZElubGluZUNvbnRhaW5lclN0YXJ0KGNvbnN0IElubGlu
ZUl0ZW0mKTsKKyAgICB2b2lkIGFwcGVuZElubGluZUNvbnRhaW5lckVuZChjb25zdCBJbmxpbmVJ
dGVtJik7CisgICAgdm9pZCBhcHBlbmRIYXJkTGluZUJyZWFrKGNvbnN0IElubGluZUl0ZW0mKTsK
IAotICAgIHZvaWQgYWRqdXN0TG9naWNhbExlZnQoTGF5b3V0VW5pdCBkZWx0YSk7Ci0gICAgdm9p
ZCBhZGp1c3RMb2dpY2FsUmlnaHQoTGF5b3V0VW5pdCBkZWx0YSk7CisgICAgYm9vbCBoYXNDb250
ZW50KCkgY29uc3Q7CiAKLSAgICBib29sIGhhc0NvbnRlbnQoKSBjb25zdCB7IHJldHVybiAhbV9p
bmxpbmVSdW5zLmlzRW1wdHkoKTsgfQotICAgIGJvb2wgaXNDbG9zZWQoKSBjb25zdCB7IHJldHVy
biBtX2Nsb3NlZDsgfQotICAgIGJvb2wgaXNGaXJzdExpbmUoKSBjb25zdCB7IHJldHVybiBtX2lz
Rmlyc3RMaW5lOyB9Ci0gICAgVmVjdG9yPElubGluZVJ1bj4mIHJ1bnMoKSB7IHJldHVybiBtX2lu
bGluZVJ1bnM7IH0KKyAgICBMYXlvdXRVbml0IHRyYWlsaW5nVHJpbW1hYmxlV2lkdGgoKSBjb25z
dDsKIAotICAgIExheW91dFVuaXQgY29udGVudExvZ2ljYWxSaWdodCgpIGNvbnN0OwotICAgIExh
eW91dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0KCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsUmVj
dC5sZWZ0KCk7IH0KLSAgICBMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoKCkgY29uc3QgeyByZXR1
cm4gbV9hdmFpbGFibGVXaWR0aDsgfQotICAgIE9wdGlvbmFsPElubGluZVJ1blByb3ZpZGVyOjpS
dW46OlR5cGU+IGxhc3RSdW5UeXBlKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0UnVuVHlwZTsgfQor
ICAgIHZvaWQgbW92ZUxvZ2ljYWxMZWZ0KExheW91dFVuaXQpOworICAgIHZvaWQgbW92ZUxvZ2lj
YWxSaWdodChMYXlvdXRVbml0KTsKIAotICAgIExheW91dFVuaXQgbG9naWNhbFRvcCgpIGNvbnN0
IHsgcmV0dXJuIG1fbG9naWNhbFJlY3QudG9wKCk7IH0KLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxC
b3R0b20oKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxSZWN0LmJvdHRvbSgpOyB9Ci0gICAgTGF5
b3V0VW5pdCBsb2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbG9naWNhbEJvdHRvbSgpIC0g
bG9naWNhbFRvcCgpOyB9CisgICAgTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCgpIGNvbnN0IHsg
cmV0dXJuIGxvZ2ljYWxXaWR0aCgpIC0gY29udGVudExvZ2ljYWxXaWR0aCgpOyB9CisgICAgCisg
ICAgTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbFJpZ2h0KCkgY29uc3QgeyByZXR1cm4gbG9naWNh
bExlZnQoKSArIGNvbnRlbnRMb2dpY2FsV2lkdGgoKTsgfQorICAgIExheW91dFVuaXQgY29udGVu
dExvZ2ljYWxXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudExvZ2ljYWxXaWR0aDsgfQor
CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9wKCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsVG9w
TGVmdC55KCk7IH0KKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0KCkgY29uc3QgeyByZXR1cm4g
bV9sb2dpY2FsVG9wTGVmdC54KCk7IH0KKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodCgpIGNv
bnN0IHsgcmV0dXJuIGxvZ2ljYWxMZWZ0KCkgKyBsb2dpY2FsV2lkdGgoKTsgfQorICAgIExheW91
dFVuaXQgbG9naWNhbEJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIGxvZ2ljYWxUb3AoKSArIGxvZ2lj
YWxIZWlnaHQoKTsgfQorICAgIExheW91dFVuaXQgbG9naWNhbFdpZHRoKCkgY29uc3QgeyByZXR1
cm4gbV9saW5lTG9naWNhbFdpZHRoOyB9CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0KCkg
Y29uc3QgeyByZXR1cm4gbV9sb2dpY2FsSGVpZ2h0LmhlaWdodCArIG1fbG9naWNhbEhlaWdodC5k
ZXB0aDsgfQogCiBwcml2YXRlOgotICAgIHN0cnVjdCBUcmFpbGluZ1RyaW1tYWJsZUNvbnRlbnQg
ewotICAgICAgICBMYXlvdXRVbml0IHdpZHRoOwotICAgICAgICB1bnNpZ25lZCBsZW5ndGg7Ci0g
ICAgfTsKLSAgICBPcHRpb25hbDxUcmFpbGluZ1RyaW1tYWJsZUNvbnRlbnQ+IG1fdHJhaWxpbmdU
cmltbWFibGVDb250ZW50OwotICAgIE9wdGlvbmFsPElubGluZVJ1blByb3ZpZGVyOjpSdW46OlR5
cGU+IG1fbGFzdFJ1blR5cGU7Ci0gICAgYm9vbCBtX2xhc3RSdW5DYW5FeHBhbmQgeyBmYWxzZSB9
OworICAgIHZvaWQgYXBwZW5kTm9uQnJlYWthYmxlU3BhY2UoY29uc3QgSW5saW5lSXRlbSYsIGNv
bnN0IERpc3BsYXk6OlJlY3QmIGxvZ2ljYWxSZWN0KTsKKyAgICB2b2lkIHJlbW92ZVRyYWlsaW5n
VHJpbW1hYmxlQ29udGVudCgpOworCisgICAgY29uc3QgTGF5b3V0U3RhdGUmIG1fbGF5b3V0U3Rh
dGU7CisgICAgTGluZUl0ZW1zIG1fbGluZUl0ZW1zOworICAgIExpc3RIYXNoU2V0PExpbmVJdGVt
Kj4gbV90cmltbWFibGVDb250ZW50OwogCi0gICAgRGlzcGxheTo6Qm94OjpSZWN0IG1fbG9naWNh
bFJlY3Q7Ci0gICAgTGF5b3V0VW5pdCBtX2F2YWlsYWJsZVdpZHRoOworICAgIExheW91dFBvaW50
IG1fbG9naWNhbFRvcExlZnQ7CisgICAgTGF5b3V0VW5pdCBtX2NvbnRlbnRMb2dpY2FsV2lkdGg7
CiAKLSAgICBWZWN0b3I8SW5saW5lUnVuPiBtX2lubGluZVJ1bnM7Ci0gICAgYm9vbCBtX2lzRmly
c3RMaW5lIHsgdHJ1ZSB9OwotICAgIGJvb2wgbV9jbG9zZWQgeyB0cnVlIH07CisgICAgVXNlZEhl
aWdodEFuZERlcHRoIG1fbG9naWNhbEhlaWdodDsKKyAgICBMYXlvdXRVbml0IG1fbGluZUxvZ2lj
YWxXaWR0aDsKIH07CiAKLXZvaWQgTGluZTo6aW5pdChjb25zdCBMYXlvdXRQb2ludCYgdG9wTGVm
dCwgTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCwgTGF5b3V0VW5pdCBtaW5pbWFsSGVpZ2h0KQor
TGluZTo6TGluZUl0ZW06OkxpbmVJdGVtKERpc3BsYXk6OlJ1biBpbmxpbmVSdW4sIGNvbnN0IElu
bGluZUl0ZW0mIGlubGluZUl0ZW0sIGJvb2wgaXNDb2xsYXBzZWQsIGJvb2wgY2FuQmVFeHRlbmRl
ZCkKKyAgICA6IGlubGluZVJ1bihpbmxpbmVSdW4pCisgICAgLCBpbmxpbmVJdGVtKGlubGluZUl0
ZW0pCisgICAgLCBpc0NvbGxhcHNlZChpc0NvbGxhcHNlZCkKKyAgICAsIGNhbkJlRXh0ZW5kZWQo
Y2FuQmVFeHRlbmRlZCkKIHsKLSAgICBtX2xvZ2ljYWxSZWN0LnNldFRvcExlZnQodG9wTGVmdCk7
Ci0gICAgbV9sb2dpY2FsUmVjdC5zZXRXaWR0aChhdmFpbGFibGVXaWR0aCk7Ci0gICAgbV9sb2dp
Y2FsUmVjdC5zZXRIZWlnaHQobWluaW1hbEhlaWdodCk7Ci0gICAgbV9hdmFpbGFibGVXaWR0aCA9
IGF2YWlsYWJsZVdpZHRoOwotCi0gICAgbV9pbmxpbmVSdW5zLmNsZWFyKCk7Ci0gICAgbV9sYXN0
UnVuVHlwZSA9IHsgfTsKLSAgICBtX2xhc3RSdW5DYW5FeHBhbmQgPSBmYWxzZTsKLSAgICBtX3Ry
YWlsaW5nVHJpbW1hYmxlQ29udGVudCA9IHsgfTsKLSAgICBtX2Nsb3NlZCA9IGZhbHNlOwogfQog
Ci12b2lkIExpbmU6OmFkanVzdExvZ2ljYWxMZWZ0KExheW91dFVuaXQgZGVsdGEpCitMaW5lOjpM
aW5lKGNvbnN0IExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSkKKyAgICA6IG1fbGF5b3V0U3RhdGUo
bGF5b3V0U3RhdGUpCiB7Ci0gICAgQVNTRVJUKGRlbHRhID4gMCk7Ci0KLSAgICBtX2F2YWlsYWJs
ZVdpZHRoIC09IGRlbHRhOwotICAgIG1fbG9naWNhbFJlY3Quc2hpZnRMZWZ0VG8obV9sb2dpY2Fs
UmVjdC5sZWZ0KCkgKyBkZWx0YSk7Cit9CiAKLSAgICBmb3IgKGF1dG8mIGlubGluZVJ1biA6IG1f
aW5saW5lUnVucykKLSAgICAgICAgaW5saW5lUnVuLm1vdmVIb3Jpem9udGFsbHkoZGVsdGEpOwor
dm9pZCBMaW5lOjpyZXNldChjb25zdCBMYXlvdXRQb2ludCYgdG9wTGVmdCwgTGF5b3V0VW5pdCBh
dmFpbGFibGVXaWR0aCwgTGF5b3V0VW5pdCBtaW5pbXVtSGVpZ2h0LCBMYXlvdXRVbml0IGJhc2Vs
aW5lT2Zmc2V0KQoreworICAgIG1fbG9naWNhbFRvcExlZnQgPSB0b3BMZWZ0OworICAgIG1fbGlu
ZUxvZ2ljYWxXaWR0aCA9IGF2YWlsYWJsZVdpZHRoOworICAgIG1fbG9naWNhbEhlaWdodCA9IHsg
YmFzZWxpbmVPZmZzZXQsIG1pbmltdW1IZWlnaHQgLSBiYXNlbGluZU9mZnNldCB9OworICAgIAor
ICAgIG1fY29udGVudExvZ2ljYWxXaWR0aCA9IHsgfTsKKworICAgIG1fbGluZUl0ZW1zLmNsZWFy
KCk7CisgICAgbV90cmltbWFibGVDb250ZW50LmNsZWFyKCk7CiB9CiAKLXZvaWQgTGluZTo6YWRq
dXN0TG9naWNhbFJpZ2h0KExheW91dFVuaXQgZGVsdGEpCitjb25zdCBMaW5lOjpMaW5lSXRlbXMm
IExpbmU6OmNsb3NlKCkKIHsKLSAgICBBU1NFUlQoZGVsdGEgPiAwKTsKKyAgICByZW1vdmVUcmFp
bGluZ1RyaW1tYWJsZUNvbnRlbnQoKTsKKyAgICAvLyBDb252ZXJ0IGlubGluZSBydW4gZ2VvbWV0
cnkgZnJvbSByZWxhdGl2ZSB0byB0aGUgYmFzZWxpbmUgdG8gcmVsYXRpdmUgdG8gbG9naWNhbCB0
b3AuCisgICAgZm9yIChhdXRvJiBsaW5lSXRlbSA6IG1fbGluZUl0ZW1zKSB7CisgICAgICAgIGF1
dG8gYWRqdXN0ZWRMb2dpY2FsVG9wID0gbGluZUl0ZW0tPmlubGluZVJ1bi5sb2dpY2FsVG9wKCkg
KyBtX2xvZ2ljYWxIZWlnaHQuaGVpZ2h0ICsgbV9sb2dpY2FsVG9wTGVmdC55KCk7CisgICAgICAg
IGxpbmVJdGVtLT5pbmxpbmVSdW4uc2V0TG9naWNhbFRvcChhZGp1c3RlZExvZ2ljYWxUb3ApOwor
ICAgIH0KKyAgICByZXR1cm4gbV9saW5lSXRlbXM7Cit9CiAKLSAgICBtX2F2YWlsYWJsZVdpZHRo
IC09IGRlbHRhOwotICAgIG1fbG9naWNhbFJlY3Quc2hpZnRSaWdodFRvKG1fbG9naWNhbFJlY3Qu
cmlnaHQoKSAtIGRlbHRhKTsKK3ZvaWQgTGluZTo6cmVtb3ZlVHJhaWxpbmdUcmltbWFibGVDb250
ZW50KCkKK3sKKyAgICAvLyBDb2xsYXBzZSB0cmltbWFibGUgdHJhaWxpbmcgY29udGVudAorICAg
IExheW91dFVuaXQgdHJpbW1hYmxlV2lkdGg7CisgICAgZm9yIChhdXRvKiB0cmltbWFibGVSdW4g
OiBtX3RyaW1tYWJsZUNvbnRlbnQpIHsKKyAgICAgICAgdHJpbW1hYmxlUnVuLT5pc0NvbGxhcHNl
ZCA9IHRydWU7CisgICAgICAgIHRyaW1tYWJsZVdpZHRoICs9IHRyaW1tYWJsZVJ1bi0+aW5saW5l
UnVuLmxvZ2ljYWxXaWR0aCgpOworICAgIH0KKyAgICBtX2NvbnRlbnRMb2dpY2FsV2lkdGggLT0g
dHJpbW1hYmxlV2lkdGg7CisgICAgLy8gRklYTUU6IGNoZWNrIGlmIHdlIG5lZWQgdG8gdW5kbyBs
aW5lIGhlaWdodCBhbmQgYmFzZWxpbmUuCiB9CiAKLXN0YXRpYyBib29sIGlzVHJpbW1hYmxlQ29u
dGVudChjb25zdCBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuJiBpbmxpbmVSdW4pCit2b2lkIExpbmU6
Om1vdmVMb2dpY2FsTGVmdChMYXlvdXRVbml0IGRlbHRhKQogewotICAgIHJldHVybiBpbmxpbmVS
dW4uaXNXaGl0ZXNwYWNlKCkgJiYgaW5saW5lUnVuLnN0eWxlKCkuY29sbGFwc2VXaGl0ZVNwYWNl
KCk7CisgICAgaWYgKCFkZWx0YSkKKyAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVChkZWx0YSA+
IDApOworICAgIC8vIFNocmluayB0aGUgbGluZSBhbmQgbW92ZSB0aGUgaXRlbXMuCisgICAgbV9s
b2dpY2FsVG9wTGVmdC5tb3ZlKGRlbHRhLCAwKTsKKyAgICBtX2xpbmVMb2dpY2FsV2lkdGggLT0g
ZGVsdGE7CisgICAgZm9yIChhdXRvJiBsaW5lSXRlbSA6IG1fbGluZUl0ZW1zKQorICAgICAgICBs
aW5lSXRlbS0+aW5saW5lUnVuLm1vdmVIb3Jpem9udGFsbHkoZGVsdGEpOwogfQogCi1MYXlvdXRV
bml0IExpbmU6OmNvbnRlbnRMb2dpY2FsUmlnaHQoKSBjb25zdAordm9pZCBMaW5lOjptb3ZlTG9n
aWNhbFJpZ2h0KExheW91dFVuaXQgZGVsdGEpCiB7Ci0gICAgaWYgKG1faW5saW5lUnVucy5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybiBtX2xvZ2ljYWxSZWN0LmxlZnQoKTsKKyAgICBBU1NFUlQo
ZGVsdGEgPiAwKTsKKyAgICBtX2xpbmVMb2dpY2FsV2lkdGggLT0gZGVsdGE7Cit9CiAKLSAgICBy
ZXR1cm4gbV9pbmxpbmVSdW5zLmxhc3QoKS5sb2dpY2FsUmlnaHQoKTsKK3N0YXRpYyBib29sIGlz
VHJpbW1hYmxlQ29udGVudChjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtKQoreworICAgIGlm
ICghaXM8SW5saW5lVGV4dEl0ZW0+KGlubGluZUl0ZW0pKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgYXV0byYgaW5saW5lVGV4dEl0ZW0gPSBkb3duY2FzdDxJbmxpbmVUZXh0SXRlbT4oaW5s
aW5lSXRlbSk7CisgICAgcmV0dXJuIGlubGluZVRleHRJdGVtLmlzV2hpdGVzcGFjZSgpICYmIGlu
bGluZVRleHRJdGVtLnN0eWxlKCkuY29sbGFwc2VXaGl0ZVNwYWNlKCk7CiB9CiAKLXZvaWQgTGlu
ZTo6YXBwZW5kQ29udGVudChjb25zdCBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuJiBydW4sIGNvbnN0
IExheW91dFNpemUmIHJ1blNpemUpCitMYXlvdXRVbml0IExpbmU6OnRyYWlsaW5nVHJpbW1hYmxl
V2lkdGgoKSBjb25zdAogewotICAgIEFTU0VSVCghaXNDbG9zZWQoKSk7Ci0KLSAgICAvLyBBcHBl
bmQgdGhpcyB0ZXh0IHJ1biB0byB0aGUgZW5kIG9mIHRoZSBsYXN0IHRleHQgcnVuLCBpZiB0aGUg
bGFzdCBydW4gaXMgY29udGludW91cy4KLSAgICBPcHRpb25hbDxJbmxpbmVSdW46OlRleHRDb250
ZXh0PiB0ZXh0UnVuOwotICAgIGlmIChydW4uaXNUZXh0KCkpIHsKLSAgICAgICAgYXV0byB0ZXh0
Q29udGV4dCA9IHJ1bi50ZXh0Q29udGV4dCgpOwotICAgICAgICBhdXRvIHJ1bkxlbmd0aCA9IHRl
eHRDb250ZXh0LT5pc0NvbGxhcHNlZCgpID8gMSA6IHRleHRDb250ZXh0LT5sZW5ndGgoKTsKLSAg
ICAgICAgdGV4dFJ1biA9IElubGluZVJ1bjo6VGV4dENvbnRleHQgeyB0ZXh0Q29udGV4dC0+c3Rh
cnQoKSwgcnVuTGVuZ3RoIH07Ci0gICAgfQorICAgIExheW91dFVuaXQgdHJpbW1hYmxlV2lkdGg7
CisgICAgZm9yIChhdXRvKiB0cmltbWFibGVSdW4gOiBtX3RyaW1tYWJsZUNvbnRlbnQpCisgICAg
ICAgIHRyaW1tYWJsZVdpZHRoICs9IHRyaW1tYWJsZVJ1bi0+aW5saW5lUnVuLmxvZ2ljYWxXaWR0
aCgpOworICAgIHJldHVybiB0cmltbWFibGVXaWR0aDsKK30KIAotICAgIGF1dG8gcmVxdWlyZXNO
ZXdJbmxpbmVSdW4gPSAhaGFzQ29udGVudCgpIHx8ICFydW4uaXNUZXh0KCkgfHwgIW1fbGFzdFJ1
bkNhbkV4cGFuZDsKLSAgICBpZiAocmVxdWlyZXNOZXdJbmxpbmVSdW4pIHsKLSAgICAgICAgLy8g
RklYTUU6IFRoaXMgbmVlZHMgcHJvcGVyIGJhc2VsaW5lIGhhbmRsaW5nCi0gICAgICAgIGF1dG8g
aW5saW5lUnVuID0gSW5saW5lUnVuIHsgeyBsb2dpY2FsVG9wKCksIGNvbnRlbnRMb2dpY2FsUmln
aHQoKSwgcnVuU2l6ZS53aWR0aCgpLCBydW5TaXplLmhlaWdodCgpIH0sIHJ1bi5pbmxpbmVJdGVt
KCkgfTsKLSAgICAgICAgaWYgKHRleHRSdW4pCi0gICAgICAgICAgICBpbmxpbmVSdW4uc2V0VGV4
dENvbnRleHQoeyB0ZXh0UnVuLT5zdGFydCgpLCB0ZXh0UnVuLT5sZW5ndGgoKSB9KTsKLSAgICAg
ICAgbV9pbmxpbmVSdW5zLmFwcGVuZChpbmxpbmVSdW4pOwotICAgICAgICBtX2xvZ2ljYWxSZWN0
LnNldEhlaWdodChzdGQ6Om1heChydW5TaXplLmhlaWdodCgpLCBtX2xvZ2ljYWxSZWN0LmhlaWdo
dCgpKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gTm9uLXRleHQgcnVucyBhbHdheXMgcmVx
dWlyZSBuZXcgaW5saW5lIHJ1bi4KLSAgICAgICAgQVNTRVJUKHRleHRSdW4pOwotICAgICAgICBh
dXRvJiBpbmxpbmVSdW4gPSBtX2lubGluZVJ1bnMubGFzdCgpOwotICAgICAgICBBU1NFUlQocnVu
U2l6ZS5oZWlnaHQoKSA9PSBpbmxpbmVSdW4ubG9naWNhbEhlaWdodCgpKTsKLSAgICAgICAgaW5s
aW5lUnVuLnNldExvZ2ljYWxXaWR0aChpbmxpbmVSdW4ubG9naWNhbFdpZHRoKCkgKyBydW5TaXpl
LndpZHRoKCkpOwotICAgICAgICBpbmxpbmVSdW4udGV4dENvbnRleHQoKS0+c2V0TGVuZ3RoKGlu
bGluZVJ1bi50ZXh0Q29udGV4dCgpLT5sZW5ndGgoKSArIHRleHRSdW4tPmxlbmd0aCgpKTsKK2Jv
b2wgTGluZTo6aGFzQ29udGVudCgpIGNvbnN0Cit7CisgICAgLy8gUmV0dXJuIGZhbHNlIGZvciBl
bXB0eSBjb250YWluZXJzIGxpa2UgPHNwYW4+PC9zcGFuPi4KKyAgICBpZiAobV9saW5lSXRlbXMu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZm9yIChhdXRvJiBsaW5lSXRl
bSA6IG1fbGluZUl0ZW1zKSB7CisgICAgICAgIGlmIChsaW5lSXRlbS0+aW5saW5lSXRlbS5pc0Nv
bnRhaW5lclN0YXJ0KCkgfHwgbGluZUl0ZW0tPmlubGluZUl0ZW0uaXNDb250YWluZXJFbmQoKSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoIWxpbmVJdGVtLT5pc0NvbGxhcHNl
ZCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9
CiAKLSAgICBtX2F2YWlsYWJsZVdpZHRoIC09IHJ1blNpemUud2lkdGgoKTsKLSAgICBtX2xhc3RS
dW5UeXBlID0gcnVuLnR5cGUoKTsKLSAgICBtX2xhc3RSdW5DYW5FeHBhbmQgPSBydW4uaXNUZXh0
KCkgJiYgIXJ1bi50ZXh0Q29udGV4dCgpLT5pc0NvbGxhcHNlZCgpOwotICAgIG1fdHJhaWxpbmdU
cmltbWFibGVDb250ZW50ID0geyB9OwotICAgIGlmIChpc1RyaW1tYWJsZUNvbnRlbnQocnVuKSkK
LSAgICAgICAgbV90cmFpbGluZ1RyaW1tYWJsZUNvbnRlbnQgPSBUcmFpbGluZ1RyaW1tYWJsZUNv
bnRlbnQgeyBydW5TaXplLndpZHRoKCksIHRleHRSdW4tPmxlbmd0aCgpIH07Cit2b2lkIExpbmU6
OmFwcGVuZE5vbkJyZWFrYWJsZVNwYWNlKGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0sIGNv
bnN0IERpc3BsYXk6OlJlY3QmIGxvZ2ljYWxSZWN0KQoreworICAgIG1fbGluZUl0ZW1zLmFwcGVu
ZChzdGQ6Om1ha2VfdW5pcXVlPExpbmVJdGVtPihEaXNwbGF5OjpSdW4geyBsb2dpY2FsUmVjdCB9
LCBpbmxpbmVJdGVtLCBmYWxzZSwgZmFsc2UpKTsKKyAgICBtX2NvbnRlbnRMb2dpY2FsV2lkdGgg
Kz0gaW5saW5lSXRlbS53aWR0aCgpOwogfQogCi12b2lkIExpbmU6OmNsb3NlKCkKK3ZvaWQgTGlu
ZTo6YXBwZW5kSW5saW5lQ29udGFpbmVyU3RhcnQoY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRl
bSkKIHsKLSAgICBhdXRvIHRyaW1UcmFpbGluZ0NvbnRlbnQgPSBbJl0gewotICAgICAgICBpZiAo
IW1fdHJhaWxpbmdUcmltbWFibGVDb250ZW50KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBhdXRvJiBsYXN0SW5saW5lUnVuID0gbV9pbmxpbmVSdW5zLmxhc3QoKTsKLSAgICAgICAgbGFz
dElubGluZVJ1bi5zZXRMb2dpY2FsV2lkdGgobGFzdElubGluZVJ1bi5sb2dpY2FsV2lkdGgoKSAt
IG1fdHJhaWxpbmdUcmltbWFibGVDb250ZW50LT53aWR0aCk7Ci0gICAgICAgIGxhc3RJbmxpbmVS
dW4udGV4dENvbnRleHQoKS0+c2V0TGVuZ3RoKGxhc3RJbmxpbmVSdW4udGV4dENvbnRleHQoKS0+
bGVuZ3RoKCkgLSBtX3RyYWlsaW5nVHJpbW1hYmxlQ29udGVudC0+bGVuZ3RoKTsKLQotICAgICAg
ICBpZiAoIWxhc3RJbmxpbmVSdW4udGV4dENvbnRleHQoKS0+bGVuZ3RoKCkpCi0gICAgICAgICAg
ICBtX2lubGluZVJ1bnMucmVtb3ZlTGFzdCgpOwotICAgICAgICBtX2F2YWlsYWJsZVdpZHRoICs9
IG1fdHJhaWxpbmdUcmltbWFibGVDb250ZW50LT53aWR0aDsKLSAgICAgICAgbV90cmFpbGluZ1Ry
aW1tYWJsZUNvbnRlbnQgPSB7IH07CisgICAgYXV0byYgbGF5b3V0Qm94ID0gaW5saW5lSXRlbS5s
YXlvdXRCb3goKTsKKyAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHlsZSgpOworICAgIGF1
dG8mIGZvbnRNZXRyaWNzID0gc3R5bGUuZm9udE1ldHJpY3MoKTsKKyAgICAKKyAgICBhdXRvIGFs
aWduQW5kQWRqdXN0TGluZUhlaWdodCA9IFsmXSB7CisgICAgICAgIExheW91dFVuaXQgaW5saW5l
Qm94SGVpZ2h0ID0gc3R5bGUuY29tcHV0ZWRMaW5lSGVpZ2h0KCk7CisKKyAgICAgICAgYXV0byBo
YWxmTGVhZGluZyA9IGhhbGZMZWFkaW5nTWV0cmljcyhmb250TWV0cmljcywgaW5saW5lQm94SGVp
Z2h0KTsKKyAgICAgICAgaWYgKGhhbGZMZWFkaW5nLmRlcHRoID4gMCkKKyAgICAgICAgICAgIG1f
bG9naWNhbEhlaWdodC5kZXB0aCA9IHN0ZDo6bWF4KG1fbG9naWNhbEhlaWdodC5kZXB0aCwgaGFs
ZkxlYWRpbmcuZGVwdGgpOworICAgICAgICBpZiAoaGFsZkxlYWRpbmcuaGVpZ2h0ID4gMCkKKyAg
ICAgICAgICAgIG1fbG9naWNhbEhlaWdodC5oZWlnaHQgPSBzdGQ6Om1heChtX2xvZ2ljYWxIZWln
aHQuaGVpZ2h0LCBoYWxmTGVhZGluZy5oZWlnaHQpOwogICAgIH07CiAKLSAgICBpZiAoIWhhc0Nv
bnRlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdHJpbVRyYWlsaW5nQ29udGVudCgpOwot
ICAgIG1faXNGaXJzdExpbmUgPSBmYWxzZTsKLSAgICBtX2Nsb3NlZCA9IHRydWU7CisgICAgYWxp
Z25BbmRBZGp1c3RMaW5lSGVpZ2h0KCk7CisgICAgYXV0byYgZGlzcGxheUJveCA9IG1fbGF5b3V0
U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpOworICAgIGF1dG8gY29udGFp
bmVySGVpZ2h0ID0gZm9udE1ldHJpY3MuaGVpZ2h0KCkgKyBkaXNwbGF5Qm94LnZlcnRpY2FsQm9y
ZGVyKCkgKyBkaXNwbGF5Qm94LnZlcnRpY2FsUGFkZGluZygpLnZhbHVlT3IoMCk7CisgICAgYXV0
byBsb2dpY2FsVG9wID0gLWZvbnRNZXRyaWNzLmFzY2VudCgpIC0gZGlzcGxheUJveC5ib3JkZXJU
b3AoKSAtIGRpc3BsYXlCb3gucGFkZGluZ1RvcCgpLnZhbHVlT3IoMCk7CisgICAgYXV0byBsb2dp
Y2FsUmVjdCA9IERpc3BsYXk6OlJlY3QgeyBsb2dpY2FsVG9wLCBjb250ZW50TG9naWNhbFJpZ2h0
KCksIGlubGluZUl0ZW0ud2lkdGgoKSwgY29udGFpbmVySGVpZ2h0IH07CisgICAgYXBwZW5kTm9u
QnJlYWthYmxlU3BhY2UoaW5saW5lSXRlbSwgbG9naWNhbFJlY3QpOwogfQogCi1JbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6TGluZUxheW91dChjb25zdCBJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dCYgaW5saW5lRm9ybWF0dGluZ0NvbnRleHQpCi0gICAgOiBtX2Zvcm1hdHRpbmdD
b250ZXh0KGlubGluZUZvcm1hdHRpbmdDb250ZXh0KQotICAgICwgbV9mb3JtYXR0aW5nU3RhdGUo
bV9mb3JtYXR0aW5nQ29udGV4dC5mb3JtYXR0aW5nU3RhdGUoKSkKLSAgICAsIG1fZmxvYXRpbmdT
dGF0ZShtX2Zvcm1hdHRpbmdTdGF0ZS5mbG9hdGluZ1N0YXRlKCkpCi0gICAgLCBtX2Zvcm1hdHRp
bmdSb290KGRvd25jYXN0PENvbnRhaW5lcj4obV9mb3JtYXR0aW5nQ29udGV4dC5yb290KCkpKQor
dm9pZCBMaW5lOjphcHBlbmRJbmxpbmVDb250YWluZXJFbmQoY29uc3QgSW5saW5lSXRlbSYgaW5s
aW5lSXRlbSkKIHsKKyAgICAvLyBUaGlzIGlzIHJlYWxseSBqdXN0IGEgcGxhY2Vob2xkZXIgdG8g
bWFyayB0aGUgZW5kIG9mIHRoZSBpbmxpbmUgbGV2ZWwgY29udGFpbmVyLgorICAgIGF1dG8gbG9n
aWNhbFJlY3QgPSBEaXNwbGF5OjpSZWN0IHsgMCwgY29udGVudExvZ2ljYWxSaWdodCgpLCBpbmxp
bmVJdGVtLndpZHRoKCksIDAgfTsKKyAgICBhcHBlbmROb25CcmVha2FibGVTcGFjZShpbmxpbmVJ
dGVtLCBsb2dpY2FsUmVjdCk7CiB9CiAKLXN0YXRpYyBib29sIGlzVHJpbW1hYmxlQ29udGVudChj
b25zdCBJbmxpbmVMaW5lQnJlYWtlcjo6UnVuJiBydW4pCit2b2lkIExpbmU6OmFwcGVuZFRleHRD
b250ZW50KGNvbnN0IElubGluZVRleHRJdGVtJiBpbmxpbmVJdGVtLCBMYXlvdXRTaXplIHJ1blNp
emUpCiB7Ci0gICAgcmV0dXJuIHJ1bi5jb250ZW50LmlzV2hpdGVzcGFjZSgpICYmIHJ1bi5jb250
ZW50LnN0eWxlKCkuY29sbGFwc2VXaGl0ZVNwYWNlKCk7Ci19CisgICAgYXV0byBpc1RyaW1tYWJs
ZSA9IGlzVHJpbW1hYmxlQ29udGVudChpbmxpbmVJdGVtKTsKKyAgICBpZiAoIWlzVHJpbW1hYmxl
KQorICAgICAgICBtX3RyaW1tYWJsZUNvbnRlbnQuY2xlYXIoKTsKKworICAgIGF1dG8gc2hvdWxk
Q29sbGFwc2VDb21wbGV0ZWx5ID0gWyZdIHsKKyAgICAgICAgaWYgKCFpc1RyaW1tYWJsZSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgLy8gTGVhZGluZyB3aGl0ZXNwYWNlLgor
ICAgICAgICBpZiAobV9saW5lSXRlbXMuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIC8vIENoZWNrIGlmIHRoZSBsYXN0IGl0ZW0gaXMgdHJpbW1hYmxlIGFzIHdl
bGwuCisgICAgICAgIGZvciAoaW50IGluZGV4ID0gbV9saW5lSXRlbXMuc2l6ZSgpIC0gMTsgaW5k
ZXggPj0gMDsgLS1pbmRleCkgeworICAgICAgICAgICAgYXV0byYgaW5saW5lSXRlbSA9IG1fbGlu
ZUl0ZW1zW2luZGV4XS0+aW5saW5lSXRlbTsKKyAgICAgICAgICAgIGlmIChpbmxpbmVJdGVtLmlz
Qm94KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKGlu
bGluZUl0ZW0uaXNUZXh0KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGlubGluZUl0ZW0uaXNU
ZXh0KCkgJiYgaXNUcmltbWFibGVDb250ZW50KGRvd25jYXN0PElubGluZVRleHRJdGVtPihpbmxp
bmVJdGVtKSk7CisgICAgICAgICAgICBBU1NFUlQoaW5saW5lSXRlbS5pc0NvbnRhaW5lclN0YXJ0
KCkgfHwgaW5saW5lSXRlbS5pc0NvbnRhaW5lckVuZCgpKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9OwogCi12b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5l
TGF5b3V0OjpsYXlvdXQoY29uc3QgSW5saW5lUnVuUHJvdmlkZXImIGlubGluZVJ1blByb3ZpZGVy
KSBjb25zdAotewotICAgIGF1dG8mIGxheW91dFN0YXRlID0gbV9mb3JtYXR0aW5nQ29udGV4dC5s
YXlvdXRTdGF0ZSgpOwotICAgIGF1dG8gZmxvYXRpbmdDb250ZXh0ID0gRmxvYXRpbmdDb250ZXh0
IHsgbV9mbG9hdGluZ1N0YXRlIH07CisgICAgLy8gQ29sbGFwc2VkIGxpbmUgaXRlbXMgZG9uJ3Qg
Y29udHJpYnV0ZSB0byB0aGUgbGluZSB3aWR0aC4KKyAgICBhdXRvIGlzQ29tcGxldGVseUNvbGxh
cHNlZCA9IHNob3VsZENvbGxhcHNlQ29tcGxldGVseSgpOworICAgIGF1dG8gY2FuQmVFeHRlbmRl
ZCA9ICFpc0NvbXBsZXRlbHlDb2xsYXBzZWQgJiYgIWlubGluZUl0ZW0uaXNDb2xsYXBzZWQoKTsK
KyAgICBhdXRvIGxvZ2ljYWxSZWN0ID0gRGlzcGxheTo6UmVjdCB7IC1pbmxpbmVJdGVtLnN0eWxl
KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSwgY29udGVudExvZ2ljYWxSaWdodCgpLCBydW5TaXpl
LndpZHRoKCksIHJ1blNpemUuaGVpZ2h0KCkgfTsKKyAgICBhdXRvIHRleHRDb250ZXh0ID0gRGlz
cGxheTo6UnVuOjpUZXh0Q29udGV4dCB7IGlubGluZUl0ZW0uc3RhcnQoKSwgaW5saW5lSXRlbS5p
c0NvbGxhcHNlZCgpID8gMSA6IGlubGluZUl0ZW0ubGVuZ3RoKCkgfTsKKyAgICBhdXRvIGRpc3Bs
YXlSdW4gPSBEaXNwbGF5OjpSdW4obG9naWNhbFJlY3QsIHRleHRDb250ZXh0KTsKIAotICAgIExp
bmUgbGluZTsKLSAgICBpbml0aWFsaXplTmV3TGluZShsaW5lKTsKKyAgICBhdXRvIGxpbmVJdGVt
ID0gc3RkOjptYWtlX3VuaXF1ZTxMaW5lSXRlbT4oZGlzcGxheVJ1biwgaW5saW5lSXRlbSwgaXND
b21wbGV0ZWx5Q29sbGFwc2VkLCBjYW5CZUV4dGVuZGVkKTsKKyAgICBpZiAoaXNUcmltbWFibGUp
IAorICAgICAgICBtX3RyaW1tYWJsZUNvbnRlbnQuYWRkKGxpbmVJdGVtLmdldCgpKTsKIAotICAg
IElubGluZUxpbmVCcmVha2VyIGxpbmVCcmVha2VyKGxheW91dFN0YXRlLCBtX2Zvcm1hdHRpbmdT
dGF0ZS5pbmxpbmVDb250ZW50KCksIGlubGluZVJ1blByb3ZpZGVyLnJ1bnMoKSk7Ci0gICAgd2hp
bGUgKGF1dG8gcnVuID0gbGluZUJyZWFrZXIubmV4dFJ1bihsaW5lLmNvbnRlbnRMb2dpY2FsUmln
aHQoKSwgbGluZS5hdmFpbGFibGVXaWR0aCgpLCAhbGluZS5oYXNDb250ZW50KCkpKSB7Ci0gICAg
ICAgIGF1dG8gaXNGaXJzdFJ1biA9IHJ1bi0+cG9zaXRpb24gPT0gSW5saW5lTGluZUJyZWFrZXI6
OlJ1bjo6UG9zaXRpb246OkxpbmVCZWdpbjsKLSAgICAgICAgYXV0byBpc0xhc3RSdW4gPSBydW4t
PnBvc2l0aW9uID09IElubGluZUxpbmVCcmVha2VyOjpSdW46OlBvc2l0aW9uOjpMaW5lRW5kOwot
ICAgICAgICBhdXRvIGdlbmVyYXRlc0lubGluZVJ1biA9IHRydWU7CisgICAgbV9saW5lSXRlbXMu
YXBwZW5kKFdURk1vdmUobGluZUl0ZW0pKTsKKyAgICBtX2NvbnRlbnRMb2dpY2FsV2lkdGggKz0g
aXNDb21wbGV0ZWx5Q29sbGFwc2VkID8gTGF5b3V0VW5pdCgpIDogcnVuU2l6ZS53aWR0aCgpOwor
fQogCi0gICAgICAgIC8vIFBvc2l0aW9uIGZsb2F0IGFuZCBhZGp1c3QgdGhlIHJ1bnMgb24gbGlu
ZS4KLSAgICAgICAgaWYgKHJ1bi0+Y29udGVudC5pc0Zsb2F0KCkpIHsKLSAgICAgICAgICAgIGF1
dG8mIGZsb2F0Qm94ID0gcnVuLT5jb250ZW50LmlubGluZUl0ZW0oKS5sYXlvdXRCb3goKTsKLSAg
ICAgICAgICAgIGNvbXB1dGVGbG9hdFBvc2l0aW9uKGZsb2F0aW5nQ29udGV4dCwgbGluZSwgZmxv
YXRCb3gpOwotICAgICAgICAgICAgbV9mbG9hdGluZ1N0YXRlLmFwcGVuZChmbG9hdEJveCk7Cit2
b2lkIExpbmU6OmFwcGVuZE5vblRleHRDb250ZW50KGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0
ZW0sIExheW91dFNpemUgcnVuU2l6ZSkKK3sKKyAgICBhdXRvIGFsaWduQW5kQWRqdXN0TGluZUhl
aWdodCA9IFsmXSB7CisgICAgICAgIGF1dG8gaW5saW5lQm94SGVpZ2h0ID0gcnVuU2l6ZS5oZWln
aHQoKTsKKyAgICAgICAgLy8gMCBkZXNjZW50IC0+IGJhc2VsaW5lIGFsaWdtZW50IGZvciBub3cu
CisgICAgICAgIG1fbG9naWNhbEhlaWdodC5kZXB0aCA9IHN0ZDo6bWF4PExheW91dFVuaXQ+KDAs
IG1fbG9naWNhbEhlaWdodC5kZXB0aCk7CisgICAgICAgIG1fbG9naWNhbEhlaWdodC5oZWlnaHQg
PSBzdGQ6Om1heChpbmxpbmVCb3hIZWlnaHQsIG1fbG9naWNhbEhlaWdodC5oZWlnaHQpOworICAg
IH07CiAKLSAgICAgICAgICAgIGF1dG8gZmxvYXRCb3hXaWR0aCA9IGxheW91dFN0YXRlLmRpc3Bs
YXlCb3hGb3JMYXlvdXRCb3goZmxvYXRCb3gpLm1hcmdpbkJveCgpLndpZHRoKCk7Ci0gICAgICAg
ICAgICAvLyBTaHJpbmsgYXZhaWxibGUgc3BhY2UgZm9yIGN1cnJlbnQgbGluZSBhbmQgbW92ZSBl
eGlzdGluZyBpbmxpbmUgcnVucy4KLSAgICAgICAgICAgIGZsb2F0Qm94LmlzTGVmdEZsb2F0aW5n
UG9zaXRpb25lZCgpID8gbGluZS5hZGp1c3RMb2dpY2FsTGVmdChmbG9hdEJveFdpZHRoKSA6IGxp
bmUuYWRqdXN0TG9naWNhbFJpZ2h0KGZsb2F0Qm94V2lkdGgpOworICAgIGFsaWduQW5kQWRqdXN0
TGluZUhlaWdodCgpOworICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBtX2xheW91dFN0YXRlLmRpc3Bs
YXlCb3hGb3JMYXlvdXRCb3goaW5saW5lSXRlbS5sYXlvdXRCb3goKSk7CisgICAgYXV0byBsb2dp
Y2FsVG9wID0gLXJ1blNpemUuaGVpZ2h0KCk7CisgICAgYXV0byBob3Jpem9udGFsTWFyZ2luID0g
ZGlzcGxheUJveC5ob3Jpem9udGFsTWFyZ2luKCk7CisgICAgYXV0byBsb2dpY2FsUmVjdCA9IERp
c3BsYXk6OlJlY3QgeyBsb2dpY2FsVG9wLCBjb250ZW50TG9naWNhbFJpZ2h0KCkgKyBob3Jpem9u
dGFsTWFyZ2luLnN0YXJ0LCBydW5TaXplLndpZHRoKCksIHJ1blNpemUuaGVpZ2h0KCkgfTsKIAot
ICAgICAgICAgICAgZ2VuZXJhdGVzSW5saW5lUnVuID0gZmFsc2U7Ci0gICAgICAgIH0KKyAgICBt
X2xpbmVJdGVtcy5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxMaW5lSXRlbT4oRGlzcGxheTo6UnVu
IHsgbG9naWNhbFJlY3QgfSwgaW5saW5lSXRlbSwgZmFsc2UsIGZhbHNlKSk7CisgICAgbV9jb250
ZW50TG9naWNhbFdpZHRoICs9IChydW5TaXplLndpZHRoKCkgKyBob3Jpem9udGFsTWFyZ2luLnN0
YXJ0ICsgaG9yaXpvbnRhbE1hcmdpbi5lbmQpOworICAgIG1fdHJpbW1hYmxlQ29udGVudC5jbGVh
cigpOworfQogCi0gICAgICAgIC8vIDEuIEluaXRpYWxpemUgbmV3IGxpbmUgaWYgbmVlZGVkLgot
ICAgICAgICAvLyAyLiBBcHBlbmQgaW5saW5lIHJ1biB1bmxlc3MgaXQgaXMgc2tpcHBlZC4KLSAg
ICAgICAgLy8gMy4gQ2xvc2UgY3VycmVudCBsaW5lIGlmIG5lZWRlZC4KLSAgICAgICAgaWYgKGlz
Rmlyc3RSdW4pIHsKLSAgICAgICAgICAgIC8vIFdoZW4gdGhlIGZpcnN0IHJ1biBkb2VzIG5vdCBn
ZW5lcmF0ZSBhbiBhY3R1YWwgaW5saW5lIHJ1biwgdGhlIG5leHQgcnVuIGNvbWVzIGluIGZpcnN0
LXJ1biBhcyB3ZWxsLgotICAgICAgICAgICAgLy8gTm8gbmVlZCB0byBzcGVuZCB0aW1lIG9uIGNs
b3NpbmcvaW5pdGlhbGl6aW5nLgotICAgICAgICAgICAgLy8gU2tpcCBsZWFkaW5nIHdoaXRlc3Bh
Y2UuCi0gICAgICAgICAgICBpZiAoIWdlbmVyYXRlc0lubGluZVJ1biB8fCBpc1RyaW1tYWJsZUNv
bnRlbnQoKnJ1bikpCi0gICAgICAgICAgICAgICAgY29udGludWU7Cit2b2lkIExpbmU6OmFwcGVu
ZEhhcmRMaW5lQnJlYWsoY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSkKK3sKKyAgICBhdXRv
IGFzY2VudCA9IGlubGluZUl0ZW0ubGF5b3V0Qm94KCkuc3R5bGUoKS5mb250TWV0cmljcygpLmFz
Y2VudCgpOyAKKyAgICBhdXRvIGxvZ2ljYWxSZWN0ID0gRGlzcGxheTo6UmVjdCB7IC1hc2NlbnQs
IGNvbnRlbnRMb2dpY2FsUmlnaHQoKSwgeyB9LCBsb2dpY2FsSGVpZ2h0KCkgfTsKKyAgICBtX2xp
bmVJdGVtcy5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxMaW5lSXRlbT4oRGlzcGxheTo6UnVuIHsg
bG9naWNhbFJlY3QgfSwgaW5saW5lSXRlbSwgZmFsc2UsIGZhbHNlKSk7Cit9CiAKLSAgICAgICAg
ICAgIGlmIChsaW5lLmhhc0NvbnRlbnQoKSkgewotICAgICAgICAgICAgICAgIC8vIFByZXZpb3Vz
IHJ1biBlbmRlZCB1cCBiZWluZyBhdCB0aGUgbGluZSBlbmQuIEFkanVzdCB0aGUgbGluZSBhY2Nv
cmRpbmdseS4KLSAgICAgICAgICAgICAgICBpZiAoIWxpbmUuaXNDbG9zZWQoKSkKLSAgICAgICAg
ICAgICAgICAgICAgY2xvc2VMaW5lKGxpbmUsIElzTGFzdExpbmU6Ok5vKTsKLSAgICAgICAgICAg
ICAgICBpbml0aWFsaXplTmV3TGluZShsaW5lKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQor
c3RydWN0IFVuY29tbWl0dGVkQ29udGVudCB7CisgICAgdm9pZCBhZGQoSW5saW5lSXRlbSYpOwor
ICAgIHZvaWQgcmVzZXQoKTsKIAotICAgICAgICBpZiAoZ2VuZXJhdGVzSW5saW5lUnVuKSB7Ci0g
ICAgICAgICAgICBhdXRvIHdpZHRoID0gcnVuLT53aWR0aDsKLSAgICAgICAgICAgIGF1dG8gaGVp
Z2h0ID0gcnVuLT5jb250ZW50LmlzVGV4dCgpID8gTGF5b3V0VW5pdChtX2Zvcm1hdHRpbmdSb290
LnN0eWxlKCkuY29tcHV0ZWRMaW5lSGVpZ2h0KCkpIDogbGF5b3V0U3RhdGUuZGlzcGxheUJveEZv
ckxheW91dEJveChydW4tPmNvbnRlbnQuaW5saW5lSXRlbSgpLmxheW91dEJveCgpKS5oZWlnaHQo
KTsgCi0gICAgICAgICAgICBhcHBlbmRDb250ZW50VG9MaW5lKGxpbmUsIHJ1bi0+Y29udGVudCwg
eyB3aWR0aCwgaGVpZ2h0IH0pOwotICAgICAgICB9CisgICAgVmVjdG9yPElubGluZUl0ZW0qPiBp
bmxpbmVJdGVtcygpIHsgcmV0dXJuIG1faW5saW5lSXRlbXM7IH0KKyAgICBib29sIGlzRW1wdHko
KSBjb25zdCB7IHJldHVybiBtX2lubGluZUl0ZW1zLmlzRW1wdHkoKTsgfQorICAgIExheW91dFVu
aXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9CiAKLSAgICAgICAgaWYgKGlzTGFz
dFJ1bikKLSAgICAgICAgICAgIGNsb3NlTGluZShsaW5lLCBJc0xhc3RMaW5lOjpObyk7Ci0gICAg
fQorcHJpdmF0ZToKKyAgICBWZWN0b3I8SW5saW5lSXRlbSo+IG1faW5saW5lSXRlbXM7CisgICAg
TGF5b3V0VW5pdCBtX3dpZHRoOworfTsKIAotICAgIGNsb3NlTGluZShsaW5lLCBJc0xhc3RMaW5l
OjpZZXMpOwordm9pZCBVbmNvbW1pdHRlZENvbnRlbnQ6OmFkZChJbmxpbmVJdGVtJiBpbmxpbmVJ
dGVtKQoreworICAgIG1faW5saW5lSXRlbXMuYXBwZW5kKCZpbmxpbmVJdGVtKTsKKyAgICBtX3dp
ZHRoICs9IGlubGluZUl0ZW0ud2lkdGgoKTsKIH0KIAotdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dDo6TGluZUxheW91dDo6aW5pdGlhbGl6ZU5ld0xpbmUoTGluZSYgbGluZSkgY29uc3QKK3Zv
aWQgVW5jb21taXR0ZWRDb250ZW50OjpyZXNldCgpCit7CisgICAgbV9pbmxpbmVJdGVtcy5jbGVh
cigpOworICAgIG1fd2lkdGggPSAwOworfQorCitJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGlu
ZUxheW91dDo6TGluZUxheW91dChjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgaW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQpCisgICAgOiBtX2Zvcm1hdHRpbmdDb250ZXh0KGlubGluZUZvcm1h
dHRpbmdDb250ZXh0KQorICAgICwgbV9mb3JtYXR0aW5nU3RhdGUobV9mb3JtYXR0aW5nQ29udGV4
dC5mb3JtYXR0aW5nU3RhdGUoKSkKKyAgICAsIG1fZmxvYXRpbmdTdGF0ZShtX2Zvcm1hdHRpbmdT
dGF0ZS5mbG9hdGluZ1N0YXRlKCkpCisgICAgLCBtX2Zvcm1hdHRpbmdSb290KGRvd25jYXN0PENv
bnRhaW5lcj4obV9mb3JtYXR0aW5nQ29udGV4dC5yb290KCkpKQogewotICAgIGF1dG8mIGZvcm1h
dHRpbmdSb290RGlzcGxheUJveCA9IG1fZm9ybWF0dGluZ0NvbnRleHQubGF5b3V0U3RhdGUoKS5k
aXNwbGF5Qm94Rm9yTGF5b3V0Qm94KG1fZm9ybWF0dGluZ1Jvb3QpOworfQogCit2b2lkIElubGlu
ZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0Ojppbml0aWFsaXplTGluZShMaW5lJiBsaW5l
LCBMYXlvdXRVbml0IGxpbmVMb2dpY2FsVG9wKSBjb25zdAoreworICAgIGF1dG8mIGZvcm1hdHRp
bmdSb290RGlzcGxheUJveCA9IGxheW91dFN0YXRlKCkuZGlzcGxheUJveEZvckxheW91dEJveCht
X2Zvcm1hdHRpbmdSb290KTsKICAgICBhdXRvIGxpbmVMb2dpY2FsTGVmdCA9IGZvcm1hdHRpbmdS
b290RGlzcGxheUJveC5jb250ZW50Qm94TGVmdCgpOwotICAgIGF1dG8gbGluZUxvZ2ljYWxUb3Ag
PSBsaW5lLmlzRmlyc3RMaW5lKCkgPyBmb3JtYXR0aW5nUm9vdERpc3BsYXlCb3guY29udGVudEJv
eFRvcCgpIDogbGluZS5sb2dpY2FsQm90dG9tKCk7CiAgICAgYXV0byBhdmFpbGFibGVXaWR0aCA9
IGZvcm1hdHRpbmdSb290RGlzcGxheUJveC5jb250ZW50Qm94V2lkdGgoKTsKIAogICAgIC8vIENo
ZWNrIGZvciBpbnRydWRpbmcgZmxvYXRzIGFuZCBhZGp1c3QgbG9naWNhbCBsZWZ0L2F2YWlsYWJs
ZSB3aWR0aCBmb3IgdGhpcyBsaW5lIGFjY29yZGluZ2x5LgpAQCAtMjkxLDMxNCArMzc4LDIzNyBA
QCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0Ojppbml0aWFsaXplTmV3
TGluZShMaW5lJiBsaW5lKSBjb25zdAogICAgICAgICB9CiAgICAgfQogCi0gICAgbGluZS5pbml0
KHsgbGluZUxvZ2ljYWxMZWZ0LCBsaW5lTG9naWNhbFRvcCB9LCBhdmFpbGFibGVXaWR0aCwgbV9m
b3JtYXR0aW5nUm9vdC5zdHlsZSgpLmNvbXB1dGVkTGluZUhlaWdodCgpKTsKKyAgICBhdXRvJiBm
b3JtYXR0aW5nUm9vdFN0eWxlID0gbV9mb3JtYXR0aW5nUm9vdC5zdHlsZSgpOworICAgIGF1dG8g
bWltaW11bUxpbmVIZWlnaHQgPSBmb3JtYXR0aW5nUm9vdFN0eWxlLmNvbXB1dGVkTGluZUhlaWdo
dCgpOworICAgIGF1dG8gYmFzZWxpbmVPZmZzZXQgPSBoYWxmTGVhZGluZ01ldHJpY3MoZm9ybWF0
dGluZ1Jvb3RTdHlsZS5mb250TWV0cmljcygpLCBtaW1pbXVtTGluZUhlaWdodCkuaGVpZ2h0Owor
ICAgIGxpbmUucmVzZXQoeyBsaW5lTG9naWNhbExlZnQsIGxpbmVMb2dpY2FsVG9wIH0sIGF2YWls
YWJsZVdpZHRoLCBtaW1pbXVtTGluZUhlaWdodCwgYmFzZWxpbmVPZmZzZXQpOwogfQogCi12b2lk
IElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpzcGxpdElubGluZVJ1bklmTmVl
ZGVkKGNvbnN0IElubGluZVJ1biYgaW5saW5lUnVuLCBJbmxpbmVSdW5zJiBzcGxpdFJ1bnMpIGNv
bnN0Cit2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpsYXlvdXQoKSBj
b25zdAogewotICAgIEFTU0VSVChpbmxpbmVSdW4udGV4dENvbnRleHQoKSk7Ci0gICAgQVNTRVJU
KGlubGluZVJ1bi5vdmVybGFwc011bHRpcGxlSW5saW5lSXRlbXMoKSk7Ci0gICAgLy8gSW4gY2Vy
dGFpbiBjYXNlcywgYSBydW4gY2FuIG92ZXJsYXAgbXVsdGlwbGUgaW5saW5lIGVsZW1lbnRzIGxp
a2UgdGhpczoKLSAgICAvLyA8c3Bhbj5ub3JtYWwgdGV4dCBjb250ZW50PC9zcGFuPjxzcGFuIHN0
eWxlPSJwb3NpdGlvbjogcmVsYXRpdmU7IGxlZnQ6IDEwcHg7Ij5idXQgdGhpcyBvbmUgbmVlZHMg
YSBkZWRpY2F0ZWQgcnVuPC9zcGFuPjxzcGFuPmVuZCBvZiB0ZXh0PC9zcGFuPgotICAgIC8vIFRo
ZSBjb250ZW50IGFib3ZlIGdlbmVyYXRlcyBvbmUgbG9uZyBydW4gPG5vcm1hbCB0ZXh0IGNvbnRl
bnRidXQgdGhpcyBvbmUgbmVlZHMgZGVkaWNhdGVkIHJ1bmVuZCBvZiB0ZXh0PgotICAgIC8vIEhv
d2V2ZXIsIHNpbmNlIHRoZSBtaWRkbGUgcnVuIGlzIHBvc2l0aW9uZWQsIGl0IG5lZWRzIHRvIGJl
IG1vdmVkIGluZGVwZW5kZW50bHkgZnJvbSB0aGUgcmVzdCBvZiB0aGUgY29udGVudCwgaGVuY2Ug
aXQgbmVlZHMgYSBkZWRpY2F0ZWQgaW5saW5lIHJ1bi4KLQotICAgIC8vIDEuIFN0YXJ0IHdpdGgg
dGhlIGZpcnN0IGlubGluZSBpdGVtIChlbGVtZW50KSBhbmQgdHJhdmVycyB0aGUgbGlzdCB1bnRp
bAotICAgIC8vIDIuIGVpdGhlciBmaW5kIGFuIGlubGluZSBpdGVtIHRoYXQgbmVlZHMgYSBkZWRp
Y2F0ZWQgcnVuIG9yIHdlIHJlYWNoIHRoZSBlbmQgb2YgdGhlIHJ1bgotICAgIC8vIDMuIENyZWF0
ZSBkZWRpY2F0ZSBpbmxpbmUgcnVucy4KLSAgICBhdXRvJiBpbmxpbmVDb250ZW50ID0gbV9mb3Jt
YXR0aW5nU3RhdGUuaW5saW5lQ29udGVudCgpOwotICAgIGF1dG8gY29udGVudFN0YXJ0ID0gaW5s
aW5lUnVuLmxvZ2ljYWxMZWZ0KCk7Ci0gICAgYXV0byBzdGFydFBvc2l0aW9uID0gaW5saW5lUnVu
LnRleHRDb250ZXh0KCktPnN0YXJ0KCk7Ci0gICAgYXV0byByZW1hbmluZ0xlbmd0aCA9IGlubGlu
ZVJ1bi50ZXh0Q29udGV4dCgpLT5sZW5ndGgoKTsKLQotICAgIHN0cnVjdCBVbmNvbW1pdHRlZCB7
Ci0gICAgICAgIGNvbnN0IElubGluZUl0ZW0qIGZpcnN0SW5saW5lSXRlbSB7IG51bGxwdHIgfTsK
LSAgICAgICAgY29uc3QgSW5saW5lSXRlbSogbGFzdElubGluZUl0ZW0geyBudWxscHRyIH07Ci0g
ICAgICAgIHVuc2lnbmVkIGxlbmd0aCB7IDAgfTsKKyAgICBhdXRvIGZsb2F0aW5nQ29udGV4dCA9
IEZsb2F0aW5nQ29udGV4dCB7IG1fZmxvYXRpbmdTdGF0ZSB9OworICAgIExpbmUgbGluZShsYXlv
dXRTdGF0ZSgpKTsKKyAgICBpbml0aWFsaXplTGluZShsaW5lLCBsYXlvdXRTdGF0ZSgpLmRpc3Bs
YXlCb3hGb3JMYXlvdXRCb3gobV9mb3JtYXR0aW5nUm9vdCkuY29udGVudEJveFRvcCgpKTsKKwor
ICAgIFVuY29tbWl0dGVkQ29udGVudCB1bmNvbW1pdHRlZENvbnRlbnQ7CisgICAgYXV0byBjb21t
aXRQZW5kaW5nQ29udGVudCA9IFsmXSB7CisgICAgICAgIGZvciAoYXV0byogdW5jb21taXR0ZWQg
OiB1bmNvbW1pdHRlZENvbnRlbnQuaW5saW5lSXRlbXMoKSkKKyAgICAgICAgICAgIGNvbW1pdElu
bGluZUl0ZW1Ub0xpbmUobGluZSwgKnVuY29tbWl0dGVkKTsKKyAgICAgICAgdW5jb21taXR0ZWRD
b250ZW50LnJlc2V0KCk7CiAgICAgfTsKLSAgICBPcHRpb25hbDxVbmNvbW1pdHRlZD4gdW5jb21t
aXR0ZWQ7Ci0KLSAgICBhdXRvIGNvbW1pdCA9IFsmXSB7Ci0gICAgICAgIGlmICghdW5jb21taXR0
ZWQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgY29udGVudFN0YXJ0ICs9IHVuY29t
bWl0dGVkLT5maXJzdElubGluZUl0ZW0tPm5vbkJyZWFrYWJsZVN0YXJ0KCk7CiAKLSAgICAgICAg
YXV0byBydW5XaWR0aCA9IHRoaXMtPnJ1bldpZHRoKGlubGluZUNvbnRlbnQsICp1bmNvbW1pdHRl
ZC0+Zmlyc3RJbmxpbmVJdGVtLCBzdGFydFBvc2l0aW9uLCB1bmNvbW1pdHRlZC0+bGVuZ3RoLCBj
b250ZW50U3RhcnQpOwotICAgICAgICBhdXRvIHJ1biA9IElubGluZVJ1biB7IHsgaW5saW5lUnVu
LmxvZ2ljYWxUb3AoKSwgY29udGVudFN0YXJ0LCBydW5XaWR0aCwgaW5saW5lUnVuLmxvZ2ljYWxI
ZWlnaHQoKSB9LCAqdW5jb21taXR0ZWQtPmZpcnN0SW5saW5lSXRlbSB9OwotICAgICAgICBydW4u
c2V0VGV4dENvbnRleHQoeyBzdGFydFBvc2l0aW9uLCB1bmNvbW1pdHRlZC0+bGVuZ3RoIH0pOwot
ICAgICAgICBzcGxpdFJ1bnMuYXBwZW5kKHJ1bik7CisgICAgTGluZUJyZWFrZXIgbGluZUJyZWFr
ZXIobGF5b3V0U3RhdGUoKSk7CisgICAgYXV0byYgaW5saW5lQ29udGVudCA9IG1fZm9ybWF0dGlu
Z1N0YXRlLmlubGluZUl0ZW1zKCk7CisgICAgZm9yIChhdXRvJiBpbmxpbmVJdGVtIDogaW5saW5l
Q29udGVudCkgeworICAgICAgICAvLyBJdGVyYXRlIHRocm91Z2ggdGhlIGlubGluZSBjb250ZW50
IGFuZCB0cnkgdG8gcHV0IHRoZSBpbmxpbmUgYm94ZXMgb24gdGhlIGN1cnJlbnQgbGluZS4KKyAg
ICAgICAgaWYgKGlubGluZUl0ZW0tPmlzSGFyZExpbmVCcmVhaygpKSB7CisgICAgICAgICAgICAv
LyBDbG9zZSB0aGUgY3VycmVudCBsaW5lIHRoZW4gY3JlYXRlIGFuZCBpbW1lZGlhdGVseSBjbG9z
ZSBhbm90aGVyIG9uZS4KKyAgICAgICAgICAgIGNvbW1pdFBlbmRpbmdDb250ZW50KCk7CisgICAg
ICAgICAgICBjb21taXRJbmxpbmVJdGVtVG9MaW5lKGxpbmUsICppbmxpbmVJdGVtKTsKKyAgICAg
ICAgICAgIGNsb3NlTGluZShsaW5lKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGF1
dG8gYXZhaWxhYmxlV2lkdGggPSBsaW5lLmF2YWlsYWJsZVdpZHRoKCkgLSB1bmNvbW1pdHRlZENv
bnRlbnQud2lkdGgoKTsKKyAgICAgICAgICAgIGF1dG8gY3VycmVudExvZ2ljYWxSaWdodCA9IGxp
bmUuY29udGVudExvZ2ljYWxSaWdodCgpICsgdW5jb21taXR0ZWRDb250ZW50LndpZHRoKCk7Cisg
ICAgICAgICAgICAvLyBGSVhNRTogRW5zdXJlIExpbmVDb250ZXh0Ojp0cmltbWFibGVXaWR0aCBp
bmNsdWRlcyB1bmNvbW1pdHRlZCBjb250ZW50IGlmIG5lZWRlZC4KKyAgICAgICAgICAgIGF1dG8g
YnJlYWtpbmdDb250ZXh0ID0gbGluZUJyZWFrZXIuYnJlYWtpbmdDb250ZXh0KCppbmxpbmVJdGVt
LCB7IGF2YWlsYWJsZVdpZHRoLCBjdXJyZW50TG9naWNhbFJpZ2h0LCBsaW5lLnRyYWlsaW5nVHJp
bW1hYmxlV2lkdGgoKSwgIWxpbmUuaGFzQ29udGVudCgpIH0pOworICAgICAgICAgICAgaWYgKGJy
ZWFraW5nQ29udGV4dC5pc0F0QnJlYWtpbmdPcHBvcnR1bml0eSkKKyAgICAgICAgICAgICAgICBj
b21taXRQZW5kaW5nQ29udGVudCgpOworCisgICAgICAgICAgICBpZiAoYnJlYWtpbmdDb250ZXh0
LmJyZWFraW5nQmVoYXZpb3IgPT0gTGluZUJyZWFrZXI6OkJyZWFraW5nQmVoYXZpb3I6OkJyZWFr
KSB7CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9JTVBMRU1FTlRFRF9ZRVQoKTsKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICBjb250ZW50U3Rh
cnQgKz0gcnVuV2lkdGggKyB1bmNvbW1pdHRlZC0+bGFzdElubGluZUl0ZW0tPm5vbkJyZWFrYWJs
ZUVuZCgpOworICAgICAgICAgICAgaWYgKGJyZWFraW5nQ29udGV4dC5icmVha2luZ0JlaGF2aW9y
ID09IExpbmVCcmVha2VyOjpCcmVha2luZ0JlaGF2aW9yOjpXcmFwKQorICAgICAgICAgICAgICAg
IGNsb3NlTGluZShsaW5lKTsKIAotICAgICAgICBzdGFydFBvc2l0aW9uID0gMDsKLSAgICAgICAg
dW5jb21taXR0ZWQgPSB7IH07Ci0gICAgfTsKKyAgICAgICAgICAgIGlmIChpbmxpbmVJdGVtLT5p
c0Zsb2F0KCkpCisgICAgICAgICAgICAgICAgaGFuZGxlRmxvYXQobGluZSwgZmxvYXRpbmdDb250
ZXh0LCAqaW5saW5lSXRlbSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBp
ZiAoYnJlYWtpbmdDb250ZXh0LmlzQXRCcmVha2luZ09wcG9ydHVuaXR5KQorICAgICAgICAgICAg
ICAgICAgICBjb21taXRJbmxpbmVJdGVtVG9MaW5lKGxpbmUsICppbmxpbmVJdGVtKTsKKyAgICAg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHVuY29tbWl0dGVkQ29udGVudC5h
ZGQoKmlubGluZUl0ZW0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIC8v
IFByb2Nlc3MgcmVtYWluaW5nIHVuY29tbWl0dGVkIGNvbnRlbnQuCisgICAgaWYgKCF1bmNvbW1p
dHRlZENvbnRlbnQuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmIChsaW5lLmF2YWlsYWJsZVdpZHRo
KCkgPCB1bmNvbW1pdHRlZENvbnRlbnQud2lkdGgoKSkKKyAgICAgICAgICAgIGNsb3NlTGluZShs
aW5lKTsKKyAgICAgICAgY29tbWl0UGVuZGluZ0NvbnRlbnQoKTsKKyAgICB9CisgICAgY2xvc2VM
aW5lKGxpbmUpOworfQogCi0gICAgZm9yIChhdXRvIGl0ZXJhdG9yID0gaW5saW5lQ29udGVudC5m
aW5kKGNvbnN0X2Nhc3Q8SW5saW5lSXRlbSo+KCZpbmxpbmVSdW4uaW5saW5lSXRlbSgpKSk7IGl0
ZXJhdG9yICE9IGlubGluZUNvbnRlbnQuZW5kKCkgJiYgcmVtYW5pbmdMZW5ndGggPiAwOyArK2l0
ZXJhdG9yKSB7Ci0gICAgICAgIGF1dG8mIGlubGluZUl0ZW0gPSAqKml0ZXJhdG9yOwordm9pZCBJ
bmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6Y2xvc2VMaW5lKExpbmUmIGxpbmUp
IGNvbnN0Cit7CisgICAgYXV0byYgbGluZUl0ZW1zID0gbGluZS5jbG9zZSgpOworICAgIGlmIChs
aW5lSXRlbXMuaXNFbXB0eSgpKSB7CisgICAgICAgIC8vIFNwZWMgdGVsbHMgdXMgdG8gY3JlYXRl
IGEgemVybyBoZWlnaHQsIGVtcHR5IGxpbmUgYm94LgorICAgICAgICBhdXRvIGxpbmVCb3ggPSBE
aXNwbGF5OjpSZWN0IHsgbGluZS5sb2dpY2FsVG9wKCksIGxpbmUubG9naWNhbExlZnQoKSwgMCAs
IDAgfTsKKyAgICAgICAgbV9mb3JtYXR0aW5nU3RhdGUuYWRkTGluZUJveCh7IGxpbmVCb3ggfSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICAgICAgLy8gU2tpcCBhbGwgbm9uLWluZmxv
dyBib3hlcyAoZmxvYXRzLCBvdXQtb2YtZmxvdyBwb3NpdGlvbmVkIGVsZW1lbnRzKS4gVGhleSBk
b24ndCBwYXJ0aWNpcGF0ZSBpbiB0aGUgaW5saW5lIHJ1biBjb250ZXh0LgotICAgICAgICBpZiAo
IWlubGluZUl0ZW0ubGF5b3V0Qm94KCkuaXNJbkZsb3coKSkKKyAgICBhdXRvJiBpbmxpbmVEaXNw
bGF5UnVucyA9IG1fZm9ybWF0dGluZ1N0YXRlLmlubGluZVJ1bnMoKTsgCisgICAgT3B0aW9uYWw8
dW5zaWduZWQ+IHByZXZpb3VzTGluZUxhc3RSdW5JbmRleCA9IGlubGluZURpc3BsYXlSdW5zLmlz
RW1wdHkoKSA/IE9wdGlvbmFsPHVuc2lnbmVkPigpIDogaW5saW5lRGlzcGxheVJ1bnMuc2l6ZSgp
IC0gMTsKKyAgICAvLyA5LjQuMiBJbmxpbmUgZm9ybWF0dGluZyBjb250ZXh0cworICAgIC8vIEEg
bGluZSBib3ggaXMgYWx3YXlzIHRhbGwgZW5vdWdoIGZvciBhbGwgb2YgdGhlIGJveGVzIGl0IGNv
bnRhaW5zLgorICAgIGF1dG8gbGluZUJveCA9IERpc3BsYXk6OlJlY3QgeyBsaW5lLmxvZ2ljYWxU
b3AoKSwgbGluZS5sb2dpY2FsTGVmdCgpLCAwICwgbGluZS5sb2dpY2FsSGVpZ2h0KCkgfTsKKyAg
ICAvLyBDcmVhdGUgZmluYWwgZGlzcGxheSBydW5zLgorICAgIGZvciAodW5zaWduZWQgaW5kZXgg
PSAwOyBpbmRleCA8IGxpbmVJdGVtcy5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAgYXV0byYg
bGluZUl0ZW0gPSBsaW5lSXRlbXMuYXQoaW5kZXgpOworCisgICAgICAgIGF1dG8mIGlubGluZUl0
ZW0gPSBsaW5lSXRlbS0+aW5saW5lSXRlbTsKKyAgICAgICAgYXV0byYgaW5saW5lUnVuID0gbGlu
ZUl0ZW0tPmlubGluZVJ1bjsKKyAgICAgICAgYXV0byYgbGF5b3V0Qm94ID0gaW5saW5lSXRlbS5s
YXlvdXRCb3goKTsKKyAgICAgICAgYXV0byYgZGlzcGxheUJveCA9IGxheW91dFN0YXRlKCkuZGlz
cGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpOworCisgICAgICAgIGlmIChpbmxpbmVJdGVt
LmlzSGFyZExpbmVCcmVhaygpKSB7CisgICAgICAgICAgICBkaXNwbGF5Qm94LnNldFRvcExlZnQo
aW5saW5lUnVuLmxvZ2ljYWxUb3BMZWZ0KCkpOworICAgICAgICAgICAgZGlzcGxheUJveC5zZXRD
b250ZW50Qm94V2lkdGgoaW5saW5lUnVuLmxvZ2ljYWxXaWR0aCgpKTsKKyAgICAgICAgICAgIGRp
c3BsYXlCb3guc2V0Q29udGVudEJveEhlaWdodChpbmxpbmVSdW4ubG9naWNhbEhlaWdodCgpKTsK
KyAgICAgICAgICAgIG1fZm9ybWF0dGluZ1N0YXRlLmFkZElubGluZVJ1bihzdGQ6Om1ha2VfdW5p
cXVlPERpc3BsYXk6OlJ1bj4oaW5saW5lUnVuKSk7CiAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgfQogCi0gICAgICAgIGF1dG8gY3VycmVudExlbmd0aCA9IFsmXSB7Ci0gICAgICAgICAg
ICByZXR1cm4gc3RkOjptaW4ocmVtYW5pbmdMZW5ndGgsIGlubGluZUl0ZW0udGV4dENvbnRlbnQo
KS5sZW5ndGgoKSAtIHN0YXJ0UG9zaXRpb24pOwotICAgICAgICB9OwotCi0gICAgICAgIC8vIDEu
IEJyZWFrIGJlZm9yZS9hZnRlciAtPiByZXF1aXJlcyBkZWRpY2F0ZWQgcnVuIC0+IGNvbW1pdCB3
aGF0IHdlJ3ZlIGdvdCBzbyBmYXIgYW5kIGFsc28gY29tbWl0IHRoZSBjdXJyZW50IGlubGluZSBl
bGVtZW50IGFzIGEgc2VwYXJhdGUgaW5saW5lIHJ1bi4KLSAgICAgICAgLy8gMi4gQnJlYWsgYXQg
dGhlIGJlZ2lubmluZyBvZiB0aGUgaW5saW5lIGVsZW1lbnQgLT4gY29tbWl0IHdoYXQgd2UndmUg
Z290IHNvIGZhci4gQ3VycmVudCBlbGVtZW50IGJlY29tZXMgdGhlIGZpcnN0IHVuY29tbWl0dGVk
LgotICAgICAgICAvLyAzLiBCcmVhayBhdCB0aGUgZW5kIG9mIHRoZSBpbmxpbmUgZWxlbWVudCAt
PiBjb21taXQgd2hhdCB3ZSd2ZSBnb3Qgc28gZmFyIGluY2x1ZGluZyB0aGUgY3VycmVudCBlbGVt
ZW50LgotICAgICAgICAvLyA0LiBJbmxpbmUgZWxlbWVudCBkb2VzIG5vdCByZXF1aXJlIHJ1biBi
cmVha2luZyAtPiBhZGQgY3VycmVudCBpbmxpbmUgZWxlbWVudCB0byB1bmNvbW1pdHRlZC4gSnVt
cCB0byB0aGUgbmV4dCBlbGVtZW50LgotICAgICAgICBhdXRvIGRldGFjaGluZ1J1bGVzID0gaW5s
aW5lSXRlbS5kZXRhY2hpbmdSdWxlcygpOwotCi0gICAgICAgIC8vICMxCi0gICAgICAgIGlmIChk
ZXRhY2hpbmdSdWxlcy5jb250YWluc0FsbCh7IElubGluZUl0ZW06OkRldGFjaGluZ1J1bGU6OkJy
ZWFrQXRTdGFydCwgSW5saW5lSXRlbTo6RGV0YWNoaW5nUnVsZTo6QnJlYWtBdEVuZCB9KSkgewot
ICAgICAgICAgICAgY29tbWl0KCk7Ci0gICAgICAgICAgICBhdXRvIGNvbnRlbnRMZW5ndGggPSBj
dXJyZW50TGVuZ3RoKCk7Ci0gICAgICAgICAgICB1bmNvbW1pdHRlZCA9IFVuY29tbWl0dGVkIHsg
JmlubGluZUl0ZW0sICZpbmxpbmVJdGVtLCBjb250ZW50TGVuZ3RoIH07Ci0gICAgICAgICAgICBy
ZW1hbmluZ0xlbmd0aCAtPSBjb250ZW50TGVuZ3RoOwotICAgICAgICAgICAgY29tbWl0KCk7Cisg
ICAgICAgIC8vIElubGluZSBsZXZlbCBib3ggKHJlcGxhY2VkIG9yIGlubGluZS1ibG9jaykKKyAg
ICAgICAgaWYgKGlubGluZUl0ZW0uaXNCb3goKSkgeworICAgICAgICAgICAgYXV0byB0b3BMZWZ0
ID0gaW5saW5lUnVuLmxvZ2ljYWxUb3BMZWZ0KCk7CisgICAgICAgICAgICBpZiAobGF5b3V0Qm94
LmlzSW5GbG93UG9zaXRpb25lZCgpKQorICAgICAgICAgICAgICAgIHRvcExlZnQgKz0gR2VvbWV0
cnk6OmluRmxvd1Bvc2l0aW9uZWRQb3NpdGlvbk9mZnNldChsYXlvdXRTdGF0ZSgpLCBsYXlvdXRC
b3gpOworICAgICAgICAgICAgZGlzcGxheUJveC5zZXRUb3BMZWZ0KHRvcExlZnQpOworICAgICAg
ICAgICAgbGluZUJveC5leHBhbmRIb3Jpem9udGFsbHkoaW5saW5lUnVuLmxvZ2ljYWxXaWR0aCgp
KTsKKyAgICAgICAgICAgIG1fZm9ybWF0dGluZ1N0YXRlLmFkZElubGluZVJ1bihzdGQ6Om1ha2Vf
dW5pcXVlPERpc3BsYXk6OlJ1bj4oaW5saW5lUnVuKSk7CiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgfQogCi0gICAgICAgIC8vICMyCi0gICAgICAgIGlmIChkZXRhY2hpbmdSdWxlcy5j
b250YWlucyhJbmxpbmVJdGVtOjpEZXRhY2hpbmdSdWxlOjpCcmVha0F0U3RhcnQpKQotICAgICAg
ICAgICAgY29tbWl0KCk7Ci0KLSAgICAgICAgLy8gQWRkIGN1cnJlbnQgaW5saW5lIGl0ZW0gdG8g
dW5jb21taXR0ZWQuCi0gICAgICAgIC8vICMzIGFuZCAjNAotICAgICAgICBhdXRvIGNvbnRlbnRM
ZW5ndGggPSBjdXJyZW50TGVuZ3RoKCk7Ci0gICAgICAgIGlmICghdW5jb21taXR0ZWQpCi0gICAg
ICAgICAgICB1bmNvbW1pdHRlZCA9IFVuY29tbWl0dGVkIHsgJmlubGluZUl0ZW0sICZpbmxpbmVJ
dGVtLCAwIH07Ci0gICAgICAgIHVuY29tbWl0dGVkLT5sZW5ndGggKz0gY29udGVudExlbmd0aDsK
LSAgICAgICAgdW5jb21taXR0ZWQtPmxhc3RJbmxpbmVJdGVtID0gJmlubGluZUl0ZW07Ci0gICAg
ICAgIHJlbWFuaW5nTGVuZ3RoIC09IGNvbnRlbnRMZW5ndGg7Ci0KLSAgICAgICAgLy8gIzMKLSAg
ICAgICAgaWYgKGRldGFjaGluZ1J1bGVzLmNvbnRhaW5zKElubGluZUl0ZW06OkRldGFjaGluZ1J1
bGU6OkJyZWFrQXRFbmQpKQotICAgICAgICAgICAgY29tbWl0KCk7Ci0gICAgfQotICAgIC8vIEVp
dGhlciBhbGwgaW5saW5lIGVsZW1lbnRzIG5lZWRlZCBkZWRpY2F0ZWQgcnVucyBvciBuZWl0aGVy
IG9mIHRoZW0uCi0gICAgaWYgKCFyZW1hbmluZ0xlbmd0aCB8fCByZW1hbmluZ0xlbmd0aCA9PSBp
bmxpbmVSdW4udGV4dENvbnRleHQoKS0+bGVuZ3RoKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGNvbW1pdCgpOwotfQotCi12b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0
OjpjcmVhdGVGaW5hbFJ1bnMoTGluZSYgbGluZSkgY29uc3QKLXsKLSAgICBmb3IgKGF1dG8mIGlu
bGluZVJ1biA6IGxpbmUucnVucygpKSB7Ci0gICAgICAgIGlmIChpbmxpbmVSdW4ub3ZlcmxhcHNN
dWx0aXBsZUlubGluZUl0ZW1zKCkpIHsKLSAgICAgICAgICAgIElubGluZVJ1bnMgc3BsaXRSdW5z
OwotICAgICAgICAgICAgc3BsaXRJbmxpbmVSdW5JZk5lZWRlZChpbmxpbmVSdW4sIHNwbGl0UnVu
cyk7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIHNwbGl0UnVuIDogc3BsaXRSdW5zKQotICAgICAg
ICAgICAgICAgIG1fZm9ybWF0dGluZ1N0YXRlLmFwcGVuZElubGluZVJ1bihzcGxpdFJ1bik7Ci0K
LSAgICAgICAgICAgIGlmICghc3BsaXRSdW5zLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgLy8gSW5saW5lIGxldmVsIGNvbnRhaW5lciBzdGFydCAoPHNwYW4+
KQorICAgICAgICBpZiAoaW5saW5lSXRlbS5pc0NvbnRhaW5lclN0YXJ0KCkpIHsKKyAgICAgICAg
ICAgIGRpc3BsYXlCb3guc2V0VG9wTGVmdChpbmxpbmVSdW4ubG9naWNhbFRvcExlZnQoKSk7Cisg
ICAgICAgICAgICBsaW5lQm94LmV4cGFuZEhvcml6b250YWxseShpbmxpbmVSdW4ubG9naWNhbFdp
ZHRoKCkpOworICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBhdXRv
IGZpbmFsUnVuID0gWyZdIHsKLSAgICAgICAgICAgIGF1dG8mIGlubGluZUl0ZW0gPSBpbmxpbmVS
dW4uaW5saW5lSXRlbSgpOwotICAgICAgICAgICAgaWYgKGlubGluZUl0ZW0uZGV0YWNoaW5nUnVs
ZXMoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGlubGluZVJ1bjsKLQotICAg
ICAgICAgICAgSW5saW5lUnVuIGFkanVzdGVkUnVuID0gaW5saW5lUnVuOwotICAgICAgICAgICAg
YXV0byB3aWR0aCA9IGlubGluZVJ1bi5sb2dpY2FsV2lkdGgoKSAtIGlubGluZUl0ZW0ubm9uQnJl
YWthYmxlU3RhcnQoKSAtIGlubGluZUl0ZW0ubm9uQnJlYWthYmxlRW5kKCk7Ci0gICAgICAgICAg
ICBhZGp1c3RlZFJ1bi5zZXRMb2dpY2FsTGVmdChpbmxpbmVSdW4ubG9naWNhbExlZnQoKSArIGlu
bGluZUl0ZW0ubm9uQnJlYWthYmxlU3RhcnQoKSk7Ci0gICAgICAgICAgICBhZGp1c3RlZFJ1bi5z
ZXRMb2dpY2FsV2lkdGgod2lkdGgpOwotICAgICAgICAgICAgcmV0dXJuIGFkanVzdGVkUnVuOwot
ICAgICAgICB9OworICAgICAgICAvLyBJbmxpbmUgbGV2ZWwgY29udGFpbmVyIGVuZCAoPC9zcGFu
PikKKyAgICAgICAgaWYgKGlubGluZUl0ZW0uaXNDb250YWluZXJFbmQoKSkgeworICAgICAgICAg
ICAgaWYgKGxheW91dEJveC5pc0luRmxvd1Bvc2l0aW9uZWQoKSkgeworICAgICAgICAgICAgICAg
IGF1dG8gaW5mbG93T2Zmc2V0ID0gR2VvbWV0cnk6OmluRmxvd1Bvc2l0aW9uZWRQb3NpdGlvbk9m
ZnNldChsYXlvdXRTdGF0ZSgpLCBsYXlvdXRCb3gpOworICAgICAgICAgICAgICAgIGRpc3BsYXlC
b3gubW92ZUhvcml6b250YWxseShpbmZsb3dPZmZzZXQud2lkdGgoKSk7CisgICAgICAgICAgICAg
ICAgZGlzcGxheUJveC5tb3ZlVmVydGljYWxseShpbmZsb3dPZmZzZXQuaGVpZ2h0KCkpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgYXV0byBtYXJnaW5Cb3hXaWR0aCA9IGlubGluZVJ1bi5s
b2dpY2FsTGVmdCgpIC0gZGlzcGxheUJveC5sZWZ0KCk7CisgICAgICAgICAgICBhdXRvIGNvbnRl
bnRCb3hXaWR0aCA9IG1hcmdpbkJveFdpZHRoIC0gKGRpc3BsYXlCb3gubWFyZ2luU3RhcnQoKSAr
IGRpc3BsYXlCb3guYm9yZGVyTGVmdCgpICsgZGlzcGxheUJveC5wYWRkaW5nTGVmdCgpLnZhbHVl
T3IoMCkpOworICAgICAgICAgICAgLy8gRklYTUUgZml4IGl0IGZvciBtdWx0aWxpbmUuCisgICAg
ICAgICAgICBkaXNwbGF5Qm94LnNldENvbnRlbnRCb3hXaWR0aChjb250ZW50Qm94V2lkdGgpOwor
ICAgICAgICAgICAgZGlzcGxheUJveC5zZXRDb250ZW50Qm94SGVpZ2h0KGlubGluZVJ1bi5sb2dp
Y2FsSGVpZ2h0KCkpOworICAgICAgICAgICAgbGluZUJveC5leHBhbmRIb3Jpem9udGFsbHkoaW5s
aW5lUnVuLmxvZ2ljYWxXaWR0aCgpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9
CiAKLSAgICAgICAgbV9mb3JtYXR0aW5nU3RhdGUuYXBwZW5kSW5saW5lUnVuKGZpbmFsUnVuKCkp
OworICAgICAgICAvLyBUZXh0IGNvbnRlbnQuIFRyeSB0byBqb2luIG11bHRpcGxlIHRleHQgcnVu
cyB3aGVuIHBvc3NpYmxlLgorICAgICAgICBBU1NFUlQoaW5saW5lUnVuLnRleHRDb250ZXh0KCkp
OyAgICAgICAgCisgICAgICAgIGNvbnN0IExpbmU6OkxpbmVJdGVtKiBwcmV2aW91c0xpbmVJdGVt
ID0gIWluZGV4ID8gbnVsbHB0ciA6IGxpbmVJdGVtc1tpbmRleCAtIDFdLmdldCgpOworICAgICAg
ICBpZiAoIWxpbmVJdGVtLT5pc0NvbGxhcHNlZCkgeworICAgICAgICAgICAgYXV0byYgaW5saW5l
VGV4dEl0ZW0gPSBkb3duY2FzdDxJbmxpbmVUZXh0SXRlbT4oaW5saW5lSXRlbSk7CisgICAgICAg
ICAgICBhdXRvIHByZXZpb3VzUnVuQ2FuQmVFeHRlbmRlZCA9IHByZXZpb3VzTGluZUl0ZW0gPyBw
cmV2aW91c0xpbmVJdGVtLT5jYW5CZUV4dGVuZGVkIDogZmFsc2U7CisgICAgICAgICAgICBhdXRv
IHJlcXVpcmVzTmV3UnVuID0gIWluZGV4IHx8ICFwcmV2aW91c1J1bkNhbkJlRXh0ZW5kZWQgfHwg
JmxheW91dEJveCAhPSAmcHJldmlvdXNMaW5lSXRlbS0+aW5saW5lSXRlbS5sYXlvdXRCb3goKTsK
KyAgICAgICAgICAgIGlmIChyZXF1aXJlc05ld1J1bikKKyAgICAgICAgICAgICAgICBtX2Zvcm1h
dHRpbmdTdGF0ZS5hZGRJbmxpbmVSdW4oc3RkOjptYWtlX3VuaXF1ZTxEaXNwbGF5OjpSdW4+KGlu
bGluZVJ1bikpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgYXV0byYgbGFz
dERpc3BsYXlSdW4gPSBtX2Zvcm1hdHRpbmdTdGF0ZS5pbmxpbmVSdW5zKCkubGFzdCgpOworICAg
ICAgICAgICAgICAgIGxhc3REaXNwbGF5UnVuLT5leHBhbmRIb3Jpem9udGFsbHkoaW5saW5lVGV4
dEl0ZW0ud2lkdGgoKSk7CisgICAgICAgICAgICAgICAgbGFzdERpc3BsYXlSdW4tPnRleHRDb250
ZXh0KCktPmV4cGFuZChpbmxpbmVSdW4udGV4dENvbnRleHQoKS0+bGVuZ3RoKCkpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgbGluZUJveC5leHBhbmRIb3Jpem9udGFsbHkoaW5saW5lUnVu
LmxvZ2ljYWxXaWR0aCgpKTsKKyAgICAgICAgfQorICAgICAgICAvLyBGSVhNRSB0YWtlIGNvbnRl
bnQgYnJlYWtpbmcgaW50byBhY2NvdW50IHdoZW4gcGFydCBvZiB0aGUgbGF5b3V0IGJveCBpcyBv
biB0aGUgcHJldmlvdXMgbGluZS4KKyAgICAgICAgYXV0byBmaXJzdElubGluZVJ1bkZvckxheW91
dEJveCA9ICFwcmV2aW91c0xpbmVJdGVtIHx8ICZwcmV2aW91c0xpbmVJdGVtLT5pbmxpbmVJdGVt
LmxheW91dEJveCgpICE9ICZsYXlvdXRCb3g7CisgICAgICAgIGlmIChmaXJzdElubGluZVJ1bkZv
ckxheW91dEJveCkgeworICAgICAgICAgICAgLy8gU2V0dXAgZGlzcGxheSBib3ggZm9yIHRoZSBh
c3NvY2lhdGVkIGxheW91dCBib3guCisgICAgICAgICAgICBkaXNwbGF5Qm94LnNldFRvcExlZnQo
aW5saW5lUnVuLmxvZ2ljYWxUb3BMZWZ0KCkpOworICAgICAgICAgICAgZGlzcGxheUJveC5zZXRD
b250ZW50Qm94V2lkdGgoaW5saW5lUnVuLmxvZ2ljYWxXaWR0aCgpKTsKKyAgICAgICAgICAgIGRp
c3BsYXlCb3guc2V0Q29udGVudEJveEhlaWdodChpbmxpbmVSdW4ubG9naWNhbEhlaWdodCgpKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIEZJWE1FIGZpeCBpdCBmb3IgbXVsdGly
dW4vbXVsdGlsaW5lLgorICAgICAgICAgICAgZGlzcGxheUJveC5zZXRDb250ZW50Qm94V2lkdGgo
ZGlzcGxheUJveC5jb250ZW50Qm94V2lkdGgoKSArIGlubGluZVJ1bi5sb2dpY2FsV2lkdGgoKSk7
CisgICAgICAgIH0KICAgICB9Ci19Ci0KLXZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6Okxp
bmVMYXlvdXQ6OnBvc3RQcm9jZXNzSW5saW5lUnVucyhMaW5lJiBsaW5lLCBJc0xhc3RMaW5lIGlz
TGFzdExpbmUpIGNvbnN0Ci17Ci0gICAgYWxpZ25SdW5zKG1fZm9ybWF0dGluZ1Jvb3Quc3R5bGUo
KS50ZXh0QWxpZ24oKSwgbGluZSwgaXNMYXN0TGluZSk7Ci0gICAgYXV0byBmaXJzdFJ1bkluZGV4
ID0gbV9mb3JtYXR0aW5nU3RhdGUuaW5saW5lUnVucygpLnNpemUoKTsKLSAgICBjcmVhdGVGaW5h
bFJ1bnMobGluZSk7Ci0KLSAgICBwbGFjZUluRmxvd1Bvc2l0aW9uZWRDaGlsZHJlbihmaXJzdFJ1
bkluZGV4KTsKLX0KLQotdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6
Y2xvc2VMaW5lKExpbmUmIGxpbmUsIElzTGFzdExpbmUgaXNMYXN0TGluZSkgY29uc3QKLXsKLSAg
ICBsaW5lLmNsb3NlKCk7Ci0gICAgaWYgKCFsaW5lLmhhc0NvbnRlbnQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgcG9zdFByb2Nlc3NJbmxpbmVSdW5zKGxpbmUsIGlzTGFzdExpbmUpOwotfQog
Ci12b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjphcHBlbmRDb250ZW50
VG9MaW5lKExpbmUmIGxpbmUsIGNvbnN0IElubGluZVJ1blByb3ZpZGVyOjpSdW4mIHJ1biwgY29u
c3QgTGF5b3V0U2l6ZSYgcnVuU2l6ZSkgY29uc3QKLXsKLSAgICBhdXRvIGxhc3RSdW5UeXBlID0g
bGluZS5sYXN0UnVuVHlwZSgpOwotICAgIGxpbmUuYXBwZW5kQ29udGVudChydW4sIHJ1blNpemUp
OworICAgIGlmIChsaW5lLmhhc0NvbnRlbnQoKSkgeworICAgICAgICBtX2Zvcm1hdHRpbmdTdGF0
ZS5hZGRMaW5lQm94KHsgbGluZUJveCB9KTsKKyAgICAgICAgYWxpZ25SdW5zKG1fZm9ybWF0dGlu
Z1Jvb3Quc3R5bGUoKS50ZXh0QWxpZ24oKSwgcHJldmlvdXNMaW5lTGFzdFJ1bkluZGV4LnZhbHVl
T3IoLTEpICsgMSwgbGluZS5hdmFpbGFibGVXaWR0aCgpKTsKKyAgICB9CiAKLSAgICBpZiAobV9m
b3JtYXR0aW5nUm9vdC5zdHlsZSgpLnRleHRBbGlnbigpID09IFRleHRBbGlnbk1vZGU6Okp1c3Rp
ZnkpCi0gICAgICAgIGNvbXB1dGVFeHBhbnNpb25PcHBvcnR1bml0aWVzKGxpbmUsIHJ1biwgbGFz
dFJ1blR5cGUudmFsdWVPcihJbmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpUeXBlOjpOb25XaGl0ZXNw
YWNlKSk7CisgICAgaW5pdGlhbGl6ZUxpbmUobGluZSwgbGluZS5sb2dpY2FsQm90dG9tKCkpOwog
fQogCi12b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0Ojpjb21wdXRlRmxv
YXRQb3NpdGlvbihjb25zdCBGbG9hdGluZ0NvbnRleHQmIGZsb2F0aW5nQ29udGV4dCwgTGluZSYg
bGluZSwgY29uc3QgQm94JiBmbG9hdEJveCkgY29uc3QKK3ZvaWQgSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQ6OkxpbmVMYXlvdXQ6OmhhbmRsZUZsb2F0KExpbmUmIGxpbmUsIGNvbnN0IEZsb2F0aW5n
Q29udGV4dCYgZmxvYXRpbmdDb250ZXh0LCBjb25zdCBJbmxpbmVJdGVtJiBmbG9hdEl0ZW0pIGNv
bnN0CiB7Ci0gICAgYXV0byYgbGF5b3V0U3RhdGUgPSBtX2Zvcm1hdHRpbmdDb250ZXh0LmxheW91
dFN0YXRlKCk7Ci0gICAgQVNTRVJUKGxheW91dFN0YXRlLmhhc0Rpc3BsYXlCb3goZmxvYXRCb3gp
KTsKLSAgICBhdXRvJiBkaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91
dEJveChmbG9hdEJveCk7Ci0KKyAgICBhdXRvJiBmbG9hdEJveCA9IGZsb2F0SXRlbS5sYXlvdXRC
b3goKTsKKyAgICBBU1NFUlQobGF5b3V0U3RhdGUoKS5oYXNEaXNwbGF5Qm94KGZsb2F0Qm94KSk7
CisgICAgYXV0byYgZGlzcGxheUJveCA9IGxheW91dFN0YXRlKCkuZGlzcGxheUJveEZvckxheW91
dEJveChmbG9hdEJveCk7CiAgICAgLy8gU2V0IHN0YXRpYyBwb3NpdGlvbiBmaXJzdC4KICAgICBk
aXNwbGF5Qm94LnNldFRvcExlZnQoeyBsaW5lLmNvbnRlbnRMb2dpY2FsUmlnaHQoKSwgbGluZS5s
b2dpY2FsVG9wKCkgfSk7CiAgICAgLy8gRmxvYXQgaXQuCiAgICAgZGlzcGxheUJveC5zZXRUb3BM
ZWZ0KGZsb2F0aW5nQ29udGV4dC5wb3NpdGlvbkZvckZsb2F0KGZsb2F0Qm94KSk7CisgICAgbV9m
bG9hdGluZ1N0YXRlLmFwcGVuZChmbG9hdEJveCk7CisgICAgLy8gU2hyaW5rIGF2YWlsYmxlIHNw
YWNlIGZvciBjdXJyZW50IGxpbmUgYW5kIG1vdmUgZXhpc3RpbmcgaW5saW5lIHJ1bnMuCisgICAg
YXV0byBmbG9hdEJveFdpZHRoID0gZmxvYXRJdGVtLndpZHRoKCk7CisgICAgZmxvYXRCb3guaXNM
ZWZ0RmxvYXRpbmdQb3NpdGlvbmVkKCkgPyBsaW5lLm1vdmVMb2dpY2FsTGVmdChmbG9hdEJveFdp
ZHRoKSA6IGxpbmUubW92ZUxvZ2ljYWxSaWdodChmbG9hdEJveFdpZHRoKTsKIH0KIAotdm9pZCBJ
bmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6cGxhY2VJbkZsb3dQb3NpdGlvbmVk
Q2hpbGRyZW4odW5zaWduZWQgZmlzdFJ1bkluZGV4KSBjb25zdAordm9pZCBJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dDo6TGluZUxheW91dDo6Y29tbWl0SW5saW5lSXRlbVRvTGluZShMaW5lJiBsaW5l
LCBjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtKSBjb25zdAogewotICAgIGF1dG8mIGxheW91
dFN0YXRlID0gbV9mb3JtYXR0aW5nQ29udGV4dC5sYXlvdXRTdGF0ZSgpOwotICAgIGF1dG8mIGlu
bGluZVJ1bnMgPSBtX2Zvcm1hdHRpbmdTdGF0ZS5pbmxpbmVSdW5zKCk7Ci0gICAgZm9yIChhdXRv
IHJ1bkluZGV4ID0gZmlzdFJ1bkluZGV4OyBydW5JbmRleCA8IGlubGluZVJ1bnMuc2l6ZSgpOyAr
K3J1bkluZGV4KSB7Ci0gICAgICAgIGF1dG8mIGlubGluZVJ1biA9IGlubGluZVJ1bnNbcnVuSW5k
ZXhdOwotCi0gICAgICAgIGF1dG8gcG9zaXRpb25PZmZzZXQgPSBbJl0oYXV0byYgbGF5b3V0Qm94
KSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogTmVlZCB0byBmaWd1cmUgb3V0IHdoZXRoZXIgaW4t
ZmxvdyBvZmZzZXQgc2hvdWxkIHN0aWNrLiBUaGlzIG1pZ2h0IHZlcnkgd2VsbCBiZSB0ZW1wb3Jh
cnkuCi0gICAgICAgICAgICBPcHRpb25hbDxMYXlvdXRTaXplPiBvZmZzZXQ7Ci0gICAgICAgICAg
ICBmb3IgKGF1dG8qIGJveCA9ICZsYXlvdXRCb3g7IGJveCAhPSAmbV9mb3JtYXR0aW5nUm9vdDsg
Ym94ID0gYm94LT5wYXJlbnQoKSkgewotICAgICAgICAgICAgICAgIGlmICghYm94LT5pc0luRmxv
d1Bvc2l0aW9uZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICAgICAgb2Zmc2V0ID0gb2Zmc2V0LnZhbHVlT3IoTGF5b3V0U2l6ZSgpKSArIEdlb21ldHJ5Ojpp
bkZsb3dQb3NpdGlvbmVkUG9zaXRpb25PZmZzZXQobGF5b3V0U3RhdGUsICpib3gpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIG9mZnNldDsKLSAgICAgICAgfTsKKyAgICBpZiAo
aW5saW5lSXRlbS5pc0NvbnRhaW5lclN0YXJ0KCkpCisgICAgICAgIHJldHVybiBsaW5lLmFwcGVu
ZElubGluZUNvbnRhaW5lclN0YXJ0KGlubGluZUl0ZW0pOwogCi0gICAgICAgIGlmIChhdXRvIG9m
ZnNldCA9IHBvc2l0aW9uT2Zmc2V0KGlubGluZVJ1bi5pbmxpbmVJdGVtKCkubGF5b3V0Qm94KCkp
KSB7Ci0gICAgICAgICAgICBpbmxpbmVSdW4ubW92ZVZlcnRpY2FsbHkob2Zmc2V0LT5oZWlnaHQo
KSk7Ci0gICAgICAgICAgICBpbmxpbmVSdW4ubW92ZUhvcml6b250YWxseShvZmZzZXQtPndpZHRo
KCkpOwotICAgICAgICB9Ci0gICAgfQorICAgIGlmIChpbmxpbmVJdGVtLmlzQ29udGFpbmVyRW5k
KCkpCisgICAgICAgIHJldHVybiBsaW5lLmFwcGVuZElubGluZUNvbnRhaW5lckVuZChpbmxpbmVJ
dGVtKTsKKworICAgIGlmIChpbmxpbmVJdGVtLmlzSGFyZExpbmVCcmVhaygpKQorICAgICAgICBy
ZXR1cm4gbGluZS5hcHBlbmRIYXJkTGluZUJyZWFrKGlubGluZUl0ZW0pOworCisgICAgYXV0byB3
aWR0aCA9IGlubGluZUl0ZW0ud2lkdGgoKTsKKyAgICBpZiAoaXM8SW5saW5lVGV4dEl0ZW0+KGlu
bGluZUl0ZW0pKQorICAgICAgICByZXR1cm4gbGluZS5hcHBlbmRUZXh0Q29udGVudChkb3duY2Fz
dDxJbmxpbmVUZXh0SXRlbT4oaW5saW5lSXRlbSksIHsgd2lkdGgsIGlubGluZUl0ZW0uc3R5bGUo
KS5mb250TWV0cmljcygpLmhlaWdodCgpIH0pOworCisgICAgYXV0byYgZGlzcGxheUJveCA9IGxh
eW91dFN0YXRlKCkuZGlzcGxheUJveEZvckxheW91dEJveChpbmxpbmVJdGVtLmxheW91dEJveCgp
KTsKKyAgICBsaW5lLmFwcGVuZE5vblRleHRDb250ZW50KGlubGluZUl0ZW0sIHsgd2lkdGgsIGRp
c3BsYXlCb3guaGVpZ2h0KCkgfSk7CiB9CiAKLXN0YXRpYyBMYXlvdXRVbml0IGFkanVzdGVkTGlu
ZUxvZ2ljYWxMZWZ0KFRleHRBbGlnbk1vZGUgYWxpZ24sIExheW91dFVuaXQgbGluZUxvZ2ljYWxM
ZWZ0LCBMYXlvdXRVbml0IHJlbWFpbmluZ1dpZHRoKQorc3RhdGljIE9wdGlvbmFsPExheW91dFVu
aXQ+IGhvcml6b250YWxBZGp1c3RtZW50Rm9yQWxpZ25tZW50KFRleHRBbGlnbk1vZGUgYWxpZ24s
IExheW91dFVuaXQgcmVtYWluaW5nV2lkdGgpCiB7CiAgICAgc3dpdGNoIChhbGlnbikgewogICAg
IGNhc2UgVGV4dEFsaWduTW9kZTo6TGVmdDoKICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OldlYktp
dExlZnQ6CiAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpTdGFydDoKLSAgICAgICAgcmV0dXJuIGxp
bmVMb2dpY2FsTGVmdDsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICBjYXNlIFRleHRBbGlnbk1v
ZGU6OlJpZ2h0OgogICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0UmlnaHQ6CiAgICAgY2Fz
ZSBUZXh0QWxpZ25Nb2RlOjpFbmQ6Ci0gICAgICAgIHJldHVybiBsaW5lTG9naWNhbExlZnQgKyBz
dGQ6Om1heChyZW1haW5pbmdXaWR0aCwgMF9sdSk7CisgICAgICAgIHJldHVybiBzdGQ6Om1heChy
ZW1haW5pbmdXaWR0aCwgMF9sdSk7CiAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpDZW50ZXI6CiAg
ICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRDZW50ZXI6Ci0gICAgICAgIHJldHVybiBsaW5l
TG9naWNhbExlZnQgKyBzdGQ6Om1heChyZW1haW5pbmdXaWR0aCAvIDIsIDBfbHUpOworICAgICAg
ICByZXR1cm4gc3RkOjptYXgocmVtYWluaW5nV2lkdGggLyAyLCAwX2x1KTsKICAgICBjYXNlIFRl
eHRBbGlnbk1vZGU6Okp1c3RpZnk6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJu
IGxpbmVMb2dpY2FsTGVmdDsKLX0KLQotdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGlu
ZUxheW91dDo6anVzdGlmeVJ1bnMoTGluZSYgbGluZSkKLXsKLSAgICBhdXRvJiBpbmxpbmVSdW5z
ID0gbGluZS5ydW5zKCk7Ci0gICAgYXV0byYgbGFzdElubGluZVJ1biA9IGlubGluZVJ1bnMubGFz
dCgpOwotCi0gICAgLy8gQWRqdXN0IChmb3JiaWQpIHRyYWlsaW5nIGV4cGFuc2lvbiBmb3IgdGhl
IGxhc3QgdGV4dCBydW4gb24gbGluZS4KLSAgICBhdXRvIGV4cGFuc2lvbkJlaGF2aW9yID0gbGFz
dElubGluZVJ1bi5leHBhbnNpb25PcHBvcnR1bml0eSgpLmJlaGF2aW9yOwotICAgIC8vIFJlbW92
ZSBhbGxvdyBhbmQgYWRkIGZvcmJpZC4KLSAgICBleHBhbnNpb25CZWhhdmlvciBePSBBbGxvd1Ry
YWlsaW5nRXhwYW5zaW9uOwotICAgIGV4cGFuc2lvbkJlaGF2aW9yIHw9IEZvcmJpZFRyYWlsaW5n
RXhwYW5zaW9uOwotICAgIGxhc3RJbmxpbmVSdW4uZXhwYW5zaW9uT3Bwb3J0dW5pdHkoKS5iZWhh
dmlvciA9IGV4cGFuc2lvbkJlaGF2aW9yOwotCi0gICAgLy8gQ29sbGVjdCBleHBhbnNpb24gb3Bw
b3J0dW5pdGllcyBhbmQganVzdGlmeSB0aGUgcnVucy4KLSAgICBhdXRvIHdpZHRoVG9EaXN0cmli
dXRlID0gbGluZS5hdmFpbGFibGVXaWR0aCgpOwotICAgIGlmICh3aWR0aFRvRGlzdHJpYnV0ZSA8
PSAwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIGV4cGFuc2lvbk9wcG9ydHVuaXRpZXMg
PSAwOwotICAgIGZvciAoYXV0byYgaW5saW5lUnVuIDogaW5saW5lUnVucykKLSAgICAgICAgZXhw
YW5zaW9uT3Bwb3J0dW5pdGllcyArPSBpbmxpbmVSdW4uZXhwYW5zaW9uT3Bwb3J0dW5pdHkoKS5j
b3VudDsKLQotICAgIGlmICghZXhwYW5zaW9uT3Bwb3J0dW5pdGllcykKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgZmxvYXQgZXhwYW5zaW9uID0gd2lkdGhUb0Rpc3RyaWJ1dGUudG9GbG9hdCgpIC8g
ZXhwYW5zaW9uT3Bwb3J0dW5pdGllczsKLSAgICBMYXlvdXRVbml0IGFjY3VtdWxhdGVkRXhwYW5z
aW9uOwotICAgIGZvciAoYXV0byYgaW5saW5lUnVuIDogaW5saW5lUnVucykgewotICAgICAgICBM
YXlvdXRVbml0IGV4cGFuc2lvbkZvclJ1biB7IGlubGluZVJ1bi5leHBhbnNpb25PcHBvcnR1bml0
eSgpLmNvdW50ICogZXhwYW5zaW9uIH07Ci0KLSAgICAgICAgaW5saW5lUnVuLmV4cGFuc2lvbk9w
cG9ydHVuaXR5KCkuZXhwYW5zaW9uID0gZXhwYW5zaW9uRm9yUnVuOwotICAgICAgICBpbmxpbmVS
dW4uc2V0TG9naWNhbExlZnQoaW5saW5lUnVuLmxvZ2ljYWxMZWZ0KCkgKyBhY2N1bXVsYXRlZEV4
cGFuc2lvbik7Ci0gICAgICAgIGlubGluZVJ1bi5zZXRMb2dpY2FsV2lkdGgoaW5saW5lUnVuLmxv
Z2ljYWxXaWR0aCgpICsgZXhwYW5zaW9uRm9yUnVuKTsKLSAgICAgICAgYWNjdW11bGF0ZWRFeHBh
bnNpb24gKz0gZXhwYW5zaW9uRm9yUnVuOwotICAgIH0KLX0KLQotdm9pZCBJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dDo6TGluZUxheW91dDo6Y29tcHV0ZUV4cGFuc2lvbk9wcG9ydHVuaXRpZXMoTGlu
ZSYgbGluZSwgY29uc3QgSW5saW5lUnVuUHJvdmlkZXI6OlJ1biYgcnVuLCBJbmxpbmVSdW5Qcm92
aWRlcjo6UnVuOjpUeXBlIGxhc3RSdW5UeXBlKSBjb25zdAotewotICAgIGF1dG8gaXNFeHBhbnNp
b25PcHBvcnR1bml0eSA9IFtdKGF1dG8gY3VycmVudFJ1bklzV2hpdGVzcGFjZSwgYXV0byBsYXN0
UnVuSXNXaGl0ZXNwYWNlKSB7Ci0gICAgICAgIHJldHVybiBjdXJyZW50UnVuSXNXaGl0ZXNwYWNl
IHx8ICghY3VycmVudFJ1bklzV2hpdGVzcGFjZSAmJiAhbGFzdFJ1bklzV2hpdGVzcGFjZSk7Ci0g
ICAgfTsKLQotICAgIGF1dG8gZXhwYW5zaW9uQmVoYXZpb3IgPSBbXShhdXRvIGlzQXRFeHBhbnNp
b25PcHBvcnR1bml0eSkgewotICAgICAgICBFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb25CZWhh
dmlvciA9IEFsbG93VHJhaWxpbmdFeHBhbnNpb247Ci0gICAgICAgIGV4cGFuc2lvbkJlaGF2aW9y
IHw9IGlzQXRFeHBhbnNpb25PcHBvcnR1bml0eSA/IEZvcmJpZExlYWRpbmdFeHBhbnNpb24gOiBB
bGxvd0xlYWRpbmdFeHBhbnNpb247Ci0gICAgICAgIHJldHVybiBleHBhbnNpb25CZWhhdmlvcjsK
LSAgICB9OwotCi0gICAgYXV0byBpc0F0RXhwYW5zaW9uT3Bwb3J0dW5pdHkgPSBpc0V4cGFuc2lv
bk9wcG9ydHVuaXR5KHJ1bi5pc1doaXRlc3BhY2UoKSwgbGFzdFJ1blR5cGUgPT0gSW5saW5lUnVu
UHJvdmlkZXI6OlJ1bjo6VHlwZTo6V2hpdGVzcGFjZSk7Ci0KLSAgICBhdXRvJiBjdXJyZW50SW5s
aW5lUnVuID0gbGluZS5ydW5zKCkubGFzdCgpOwotICAgIGF1dG8mIGV4cGFuc2lvbk9wcG9ydHVu
aXR5ID0gY3VycmVudElubGluZVJ1bi5leHBhbnNpb25PcHBvcnR1bml0eSgpOwotICAgIGlmIChp
c0F0RXhwYW5zaW9uT3Bwb3J0dW5pdHkpCi0gICAgICAgICsrZXhwYW5zaW9uT3Bwb3J0dW5pdHku
Y291bnQ7Ci0KLSAgICBleHBhbnNpb25PcHBvcnR1bml0eS5iZWhhdmlvciA9IGV4cGFuc2lvbkJl
aGF2aW9yKGlzQXRFeHBhbnNpb25PcHBvcnR1bml0eSk7CisgICAgcmV0dXJuIHsgfTsKIH0KIAot
dm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6YWxpZ25SdW5zKFRleHRB
bGlnbk1vZGUgdGV4dEFsaWduLCBMaW5lJiBsaW5lLCAgSXNMYXN0TGluZSBpc0xhc3RMaW5lKSBj
b25zdAordm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6YWxpZ25SdW5z
KFRleHRBbGlnbk1vZGUgdGV4dEFsaWduLCB1bnNpZ25lZCBmaXJzdFJ1bkluZGV4LCBMYXlvdXRV
bml0IGF2YWlsYWJsZVdpZHRoKSBjb25zdAogewotICAgIGF1dG8gYWRqdXRlZFRleHRBbGlnbm1l
bnQgPSB0ZXh0QWxpZ24gIT0gVGV4dEFsaWduTW9kZTo6SnVzdGlmeSA/IHRleHRBbGlnbiA6IGlz
TGFzdExpbmUgPT0gSXNMYXN0TGluZTo6Tm8gPyBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5IDogVGV4
dEFsaWduTW9kZTo6TGVmdDsKLSAgICBpZiAoYWRqdXRlZFRleHRBbGlnbm1lbnQgPT0gVGV4dEFs
aWduTW9kZTo6SnVzdGlmeSkgewotICAgICAgICBqdXN0aWZ5UnVucyhsaW5lKTsKKyAgICBhdXRv
IGFkanVzdG1lbnQgPSBob3Jpem9udGFsQWRqdXN0bWVudEZvckFsaWdubWVudCh0ZXh0QWxpZ24s
IGF2YWlsYWJsZVdpZHRoKTsKKyAgICBpZiAoIWFkanVzdG1lbnQpCiAgICAgICAgIHJldHVybjsK
LSAgICB9CiAKLSAgICBhdXRvIGxpbmVMb2dpY2FsTGVmdCA9IGxpbmUuY29udGVudExvZ2ljYWxM
ZWZ0KCk7Ci0gICAgYXV0byBhZGp1c3RlZExvZ2ljYWxMZWZ0ID0gYWRqdXN0ZWRMaW5lTG9naWNh
bExlZnQoYWRqdXRlZFRleHRBbGlnbm1lbnQsIGxpbmVMb2dpY2FsTGVmdCwgbGluZS5hdmFpbGFi
bGVXaWR0aCgpKTsKLSAgICBpZiAoYWRqdXN0ZWRMb2dpY2FsTGVmdCA9PSBsaW5lTG9naWNhbExl
ZnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gZGVsdGEgPSBhZGp1c3RlZExvZ2ljYWxM
ZWZ0IC0gbGluZUxvZ2ljYWxMZWZ0OwotICAgIGZvciAoYXV0byYgaW5saW5lUnVuIDogbGluZS5y
dW5zKCkpCi0gICAgICAgIGlubGluZVJ1bi5zZXRMb2dpY2FsTGVmdChpbmxpbmVSdW4ubG9naWNh
bExlZnQoKSArIGRlbHRhKTsKLX0KLQotTGF5b3V0VW5pdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dDo6TGluZUxheW91dDo6cnVuV2lkdGgoY29uc3QgSW5saW5lQ29udGVudCYgaW5saW5lQ29udGVu
dCwgY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSwgSXRlbVBvc2l0aW9uIGZyb20sIHVuc2ln
bmVkIGxlbmd0aCwgTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbExlZnQpIGNvbnN0IAotewotICAg
IExheW91dFVuaXQgd2lkdGg7Ci0gICAgYXV0byBzdGFydFBvc2l0aW9uID0gZnJvbTsKLSAgICBh
dXRvIGl0ZXJhdG9yID0gaW5saW5lQ29udGVudC5maW5kKGNvbnN0X2Nhc3Q8SW5saW5lSXRlbSo+
KCZpbmxpbmVJdGVtKSk7Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIGF1dG8gaW5saW5lSXRl
bUVuZCA9IGlubGluZUNvbnRlbnQuZW5kKCk7Ci0jZW5kaWYKLSAgICB3aGlsZSAobGVuZ3RoKSB7
Ci0gICAgICAgIEFTU0VSVChpdGVyYXRvciAhPSBpbmxpbmVJdGVtRW5kKTsKLSAgICAgICAgYXV0
byYgY3VycmVudElubGluZUl0ZW0gPSAqKml0ZXJhdG9yOwotICAgICAgICBhdXRvIGVuZFBvc2l0
aW9uID0gc3RkOjptaW48SXRlbVBvc2l0aW9uPihzdGFydFBvc2l0aW9uICsgbGVuZ3RoLCBjdXJy
ZW50SW5saW5lSXRlbS50ZXh0Q29udGVudCgpLmxlbmd0aCgpKTsKLSAgICAgICAgYXV0byB0ZXh0
V2lkdGggPSBUZXh0VXRpbDo6d2lkdGgoY3VycmVudElubGluZUl0ZW0sIHN0YXJ0UG9zaXRpb24s
IGVuZFBvc2l0aW9uLCBjb250ZW50TG9naWNhbExlZnQpOwotCi0gICAgICAgIGNvbnRlbnRMb2dp
Y2FsTGVmdCArPSB0ZXh0V2lkdGg7Ci0gICAgICAgIHdpZHRoICs9IHRleHRXaWR0aDsKLSAgICAg
ICAgbGVuZ3RoIC09IChlbmRQb3NpdGlvbiAtIHN0YXJ0UG9zaXRpb24pOwotCi0gICAgICAgIHN0
YXJ0UG9zaXRpb24gPSAwOwotICAgICAgICArK2l0ZXJhdG9yOwotICAgIH0KLSAgICByZXR1cm4g
d2lkdGg7CisgICAgYXV0byYgaW5saW5lRGlzcGxheVJ1bnMgPSBtX2Zvcm1hdHRpbmdTdGF0ZS5p
bmxpbmVSdW5zKCk7IAorICAgIGZvciAodW5zaWduZWQgaW5kZXggPSBmaXJzdFJ1bkluZGV4OyBm
aXJzdFJ1bkluZGV4IDwgaW5saW5lRGlzcGxheVJ1bnMuc2l6ZSgpOyArK2ZpcnN0UnVuSW5kZXgp
CisgICAgICAgIGlubGluZURpc3BsYXlSdW5zW2luZGV4XS0+bW92ZUhvcml6b250YWxseSgqYWRq
dXN0bWVudCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxp
bmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdTdGF0ZS5oIGIvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ1N0YXRlLmgKaW5kZXggNjYyYTgz
YzNlYmM1MWJhN2IwZTNjNGVhY2NmNTE4NDRlOWVkNjU5Yy4uZDc0ZGNlNTM4MmMyN2RjZTk2MWFh
NjY0Mzk3OTMyMDcxOTFiNWZhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lu
bGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ1N0YXRlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ1N0YXRlLmgKQEAgLTI3
LDE1ICsyNywyMCBAQAogCiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCiAK
KyNpbmNsdWRlICJEaXNwbGF5UnVuLmgiCiAjaW5jbHVkZSAiRm9ybWF0dGluZ1N0YXRlLmgiCiAj
aW5jbHVkZSAiSW5saW5lSXRlbS5oIgotI2luY2x1ZGUgIklubGluZVJ1bi5oIgorI2luY2x1ZGUg
IklubGluZUxpbmVCb3guaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+CiAjaW5jbHVkZSA8
d3RmL09wdGlvblNldC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgTGF5b3V0
IHsKIAorLy8gVGVtcAordXNpbmcgSW5saW5lSXRlbXMgPSBMaXN0SGFzaFNldDxzdGQ6OnVuaXF1
ZV9wdHI8SW5saW5lSXRlbT4+OwordXNpbmcgSW5saW5lUnVucyA9IFZlY3RvcjxzdGQ6OnVuaXF1
ZV9wdHI8RGlzcGxheTo6UnVuPj47Cit1c2luZyBMaW5lQm94ZXMgPSBWZWN0b3I8TGluZUJveD47
CiAvLyBJbmxpbmVGb3JtYXR0aW5nU3RhdGUgaG9sZHMgdGhlIHN0YXRlIGZvciBhIHBhcnRpY3Vs
YXIgaW5saW5lIGZvcm1hdHRpbmcgY29udGV4dCB0cmVlLgogY2xhc3MgSW5saW5lRm9ybWF0dGlu
Z1N0YXRlIDogcHVibGljIEZvcm1hdHRpbmdTdGF0ZSB7CiAgICAgV1RGX01BS0VfSVNPX0FMTE9D
QVRFRChJbmxpbmVGb3JtYXR0aW5nU3RhdGUpOwpAQCAtNDMsMTYgKzQ4LDIwIEBAIHB1YmxpYzoK
ICAgICBJbmxpbmVGb3JtYXR0aW5nU3RhdGUoUmVmPEZsb2F0aW5nU3RhdGU+JiYsIExheW91dFN0
YXRlJik7CiAgICAgdmlydHVhbCB+SW5saW5lRm9ybWF0dGluZ1N0YXRlKCk7CiAKLSAgICBJbmxp
bmVDb250ZW50JiBpbmxpbmVDb250ZW50KCkgeyByZXR1cm4gbV9pbmxpbmVDb250ZW50OyB9Ci0g
ICAgSW5saW5lSXRlbSogbGFzdElubGluZUl0ZW0oKSBjb25zdCB7IHJldHVybiBtX2lubGluZUNv
bnRlbnQuaXNFbXB0eSgpID8gbnVsbHB0ciA6IG1faW5saW5lQ29udGVudC5sYXN0KCkuZ2V0KCk7
IH0KKyAgICB2b2lkIGFkZElubGluZVRleHRJdGVtKCk7CiAKLSAgICAvLyBUZW1wCisgICAgSW5s
aW5lSXRlbXMmIGlubGluZUl0ZW1zKCkgeyByZXR1cm4gbV9pbmxpbmVJdGVtczsgfQogICAgIElu
bGluZVJ1bnMmIGlubGluZVJ1bnMoKSB7IHJldHVybiBtX2lubGluZVJ1bnM7IH0KLSAgICB2b2lk
IGFwcGVuZElubGluZVJ1bihJbmxpbmVSdW4gaW5saW5lUnVuKSB7IG1faW5saW5lUnVucy5hcHBl
bmQoaW5saW5lUnVuKTsgfQorICAgIExpbmVCb3hlcyYgbGluZUJveGVzKCkgeyByZXR1cm4gbV9s
aW5lQm94ZXM7IH0KKworICAgIHZvaWQgYWRkSW5saW5lSXRlbShzdGQ6OnVuaXF1ZV9wdHI8SW5s
aW5lSXRlbT4mJiBpbmxpbmVJdGVtKSB7IG1faW5saW5lSXRlbXMuYWRkKFdURk1vdmUoaW5saW5l
SXRlbSkpOyB9CisgICAgdm9pZCBhZGRJbmxpbmVSdW4oc3RkOjp1bmlxdWVfcHRyPERpc3BsYXk6
OlJ1bj4mJiBpbmxpbmVSdW4pIHsgbV9pbmxpbmVSdW5zLmFwcGVuZChXVEZNb3ZlKGlubGluZVJ1
bikpOyB9CisgICAgdm9pZCBhZGRMaW5lQm94KExpbmVCb3ggbGluZUJveCkgeyBtX2xpbmVCb3hl
cy5hcHBlbmQobGluZUJveCk7IH0KIAogcHJpdmF0ZToKLSAgICBJbmxpbmVDb250ZW50IG1faW5s
aW5lQ29udGVudDsKKyAgICBJbmxpbmVJdGVtcyBtX2lubGluZUl0ZW1zOwogICAgIElubGluZVJ1
bnMgbV9pbmxpbmVSdW5zOworICAgIExpbmVCb3hlcyBtX2xpbmVCb3hlczsKIH07CiAKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUl0
ZW0uaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUl0ZW0u
aAppbmRleCA1YTEwZmMxZDFmZmNhNjM0NGUwNDAwZTU5ZDZhNTAwN2ExNWJiODRlLi44N2VkOWMz
NmY2YzkyM2FlOGU0Zjg5OTc0OTZlYmNhYzVhY2ZlOWM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVJdGVtLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lSXRlbS5oCkBAIC0zNiw4MyArMzYs
NTcgQEAgbmFtZXNwYWNlIExheW91dCB7CiAKIGNsYXNzIElubGluZUl0ZW0gewogcHVibGljOgot
ICAgIElubGluZUl0ZW0oY29uc3QgQm94JiBsYXlvdXRCb3gpOworICAgIGVudW0gY2xhc3MgVHlw
ZSB7IFRleHQsIEhhcmRMaW5lQnJlYWssIEJveCwgRmxvYXQsIENvbnRhaW5lclN0YXJ0LCBDb250
YWluZXJFbmQgfTsKKyAgICBJbmxpbmVJdGVtKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBUeXBlKTsK
IAotICAgIGVudW0gY2xhc3MgVHlwZSB7IFRleHQsIEhhcmRMaW5lQnJlYWssIElubGluZUJveCwg
RmxvYXQgfTsKLSAgICBUeXBlIHR5cGUoKSBjb25zdDsKKyAgICBUeXBlIHR5cGUoKSBjb25zdCB7
IHJldHVybiBtX3R5cGU7IH0KICAgICBjb25zdCBCb3gmIGxheW91dEJveCgpIGNvbnN0IHsgcmV0
dXJuIG1fbGF5b3V0Qm94OyB9CiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKCkgY29uc3Qg
eyByZXR1cm4gbV9sYXlvdXRCb3guc3R5bGUoKTsgfQotICAgIFN0cmluZyB0ZXh0Q29udGVudCgp
IGNvbnN0OwotICAgIC8vIERldGFjaGluZ1J1bGUgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGlubGlu
ZSBlbGVtZW50IG5lZWRzIHRvIGJlIHdyYXBwZWQgaW4gYSBkZWRpY2V0ZWQgcnVuIG9yIGJyZWFr
IGZyb20gcHJldmlvdXMvbmV4dCBydW5zLgotICAgIC8vIDxzcGFuPnN0YXJ0PC9zcGFuPjxzcGFu
IHN0eWxlPSJwb3NpdGlvbjogcmVsYXRpdmU7Ij4gbWlkZGxlIDwvc3Bhbj48c3Bhbj5lbmQ8L3Nw
YW4+Ci0gICAgLy8gaW5wdXQgdG8gbGluZSBicmVha2luZyAtPiA8c3RhcnQgbWlkZGxlIGVuZD4K
LSAgICAvLyBvdXRwdXQgb2YgbGluZSBicmVha2luZyAoY29uc2lkZXJpbmcgaW5maW5pdGUgY29u
c3RyYWludCkgLT4gPHN0YXJ0IG1pZGRsZSBlbmQ+Ci0gICAgLy8gZHVlIHRvIHRoZSBpbi1mbG93
IHBvc2l0aW9uaW5nLCB0aGUgZmluYWwgcnVucyBhcmU6IDxzdGFydD48IG1pZGRsZSA+PGVuZD4K
LSAgICAvLyAic3RhcnQiIC0+IG4vYQotICAgIC8vICIgbWlkZGxlICIgLT4gQnJlYWtBdFN0YXJ0
IGFuZCBCcmVha0F0RW5kCi0gICAgLy8gImVuZCIgLT4gbi9hCi0gICAgLy8KLSAgICAvLyA8c3Bh
bj5wYXJlbnQgPC9zcGFuPjxzcGFuIHN0eWxlPSJwYWRkaW5nOiAxMHB4OyI+c3RhcnQ8c3Bhbj4g
bWlkZGxlIDwvc3Bhbj5lbmQ8L3NwYW4+PHNwYW4+IHBhcmVudDwvc3Bhbj4KLSAgICAvLyBpbnB1
dCB0byBsaW5lIGJyZWFraW5nIC0+IDxwYXJlbnQgc3RhcnQgbWlkZGxlIGVuZCBwYXJlbnQ+Ci0g
ICAgLy8gb3V0cHV0IG9mIGxpbmUgYnJlYWtpbmcgKGNvbnNpZGVyaW5nIGluZmluaXRlIGNvbnN0
cmFpbnQpIC0+IDxwYXJlbnQgc3RhcnQgbWlkZGxlIGVuZCBwYXJlbnQ+Ci0gICAgLy8gZHVlIHRv
IHBhZGRpbmcsIGZpbmFsIHJ1bnMgLT4gPHBhcmVudD48c3RhcnQgbWlkZGxlIGVuZD48cGFyZW50
PgotICAgIC8vICJwYXJlbnQiIC0+IG4vYQotICAgIC8vICJzdGFydCIgLT4gQnJlYWtBdFN0YXJ0
Ci0gICAgLy8gIiBtaWRkbGUgIiAtPiBuL2EKLSAgICAvLyAiZW5kIiAtPiBCcmVha0F0RW5kCi0g
ICAgLy8gInBhcmVudCIgLT4gbi9hCi0gICAgZW51bSBjbGFzcyBEZXRhY2hpbmdSdWxlIHsKLSAg
ICAgICAgQnJlYWtBdFN0YXJ0ID0gMSA8PCAwLAotICAgICAgICBCcmVha0F0RW5kID0gMSA8PCAx
Ci0gICAgfTsKLSAgICB2b2lkIGFkZERldGFjaGluZ1J1bGUoT3B0aW9uU2V0PERldGFjaGluZ1J1
bGU+IGRldGFjaGluZ1J1bGUpIHsgbV9kZXRhY2hpbmdSdWxlcy5hZGQoZGV0YWNoaW5nUnVsZSk7
IH0KLSAgICBPcHRpb25TZXQ8RGV0YWNoaW5nUnVsZT4gZGV0YWNoaW5nUnVsZXMoKSBjb25zdCB7
IHJldHVybiBtX2RldGFjaGluZ1J1bGVzOyB9CisgICAgdm9pZCBzZXRXaWR0aChMYXlvdXRVbml0
KTsKKyAgICBMYXlvdXRVbml0IHdpZHRoKCkgY29uc3Q7CiAKLSAgICAvLyBOb24tYnJlYWthYmxl
IHN0YXJ0L2VuZCBtYXJrcyBtYXJnaW4vcGFkZGluZy9ib3JkZXIgc3BhY2UgKGV2ZW4gd2hlbiBp
dCBkb2VzIG5vdCBkaXJlY3RseSBjb21lIGZyb20gdGhlIGFzc29jaWF0ZWQgbGF5b3V0IGJveCkK
LSAgICAvLyA8c3BhbiBzdHlsZT0icGFkZGluZzogNXB4Ij48c3Bhbj5uZXN0ZWQgY29udGVudCB3
aXRoIHBhZGRpbmcgcGFyZW50PC9zcGFuPC9zcGFuPgotICAgIC8vIDxuZXN0ZWQgY29udGVudCB3
aXRoIHBhZGRpbmcgcGFyZW50PiBpbmxpbmUgcnVuIGhhcyA1cHggbm9uLWJyZWFrYWJsZSBzdGFy
dC9lbmQuCi0gICAgTGF5b3V0VW5pdCBub25CcmVha2FibGVTdGFydCgpIGNvbnN0IHsgcmV0dXJu
IG1fbm9uQnJlYWthYmxlU3RhcnQ7IH0KLSAgICBMYXlvdXRVbml0IG5vbkJyZWFrYWJsZUVuZCgp
IGNvbnN0IHsgcmV0dXJuIG1fbm9uQnJlYWthYmxlRW5kOyB9Ci0gICAgdm9pZCBhZGROb25CcmVh
a2FibGVTdGFydChMYXlvdXRVbml0IHZhbHVlKSB7IG1fbm9uQnJlYWthYmxlU3RhcnQgKz0gdmFs
dWU7IH0KLSAgICB2b2lkIGFkZE5vbkJyZWFrYWJsZUVuZChMYXlvdXRVbml0IHZhbHVlKSB7IG1f
bm9uQnJlYWthYmxlRW5kICs9IHZhbHVlOyB9CisgICAgYm9vbCBpc1RleHQoKSBjb25zdCB7IHJl
dHVybiB0eXBlKCkgPT0gVHlwZTo6VGV4dDsgfQorICAgIGJvb2wgaXNCb3goKSBjb25zdCB7IHJl
dHVybiB0eXBlKCkgPT0gVHlwZTo6Qm94OyB9CisgICAgYm9vbCBpc0hhcmRMaW5lQnJlYWsoKSBj
b25zdCB7IHJldHVybiB0eXBlKCkgPT0gVHlwZTo6SGFyZExpbmVCcmVhazsgfQorICAgIGJvb2wg
aXNGbG9hdCgpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBUeXBlOjpGbG9hdDsgfQorICAgIGJv
b2wgaXNMaW5lQnJlYWsoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gVHlwZTo6SGFyZExpbmVC
cmVhazsgfQorICAgIGJvb2wgaXNDb250YWluZXJTdGFydCgpIGNvbnN0IHsgcmV0dXJuIHR5cGUo
KSA9PSBUeXBlOjpDb250YWluZXJTdGFydDsgfQorICAgIGJvb2wgaXNDb250YWluZXJFbmQoKSBj
b25zdCB7IHJldHVybiB0eXBlKCkgPT0gVHlwZTo6Q29udGFpbmVyRW5kOyB9CiAKIHByaXZhdGU6
CiAgICAgY29uc3QgQm94JiBtX2xheW91dEJveDsKLSAgICBPcHRpb25TZXQ8RGV0YWNoaW5nUnVs
ZT4gbV9kZXRhY2hpbmdSdWxlczsKLSAgICBMYXlvdXRVbml0IG1fbm9uQnJlYWthYmxlU3RhcnQ7
Ci0gICAgTGF5b3V0VW5pdCBtX25vbkJyZWFrYWJsZUVuZDsKKyAgICBjb25zdCBUeXBlIG1fdHlw
ZTsKKyAgICBMYXlvdXRVbml0IG1fd2lkdGg7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIGJv
b2wgbV9oYXNWYWxpZFdpZHRoIHsgZmFsc2UgfTsKKyNlbmRpZgogfTsKIAotdXNpbmcgSW5saW5l
Q29udGVudCA9IExpc3RIYXNoU2V0PHN0ZDo6dW5pcXVlX3B0cjxJbmxpbmVJdGVtPj47Ci0KLWlu
bGluZSBJbmxpbmVJdGVtOjpJbmxpbmVJdGVtKGNvbnN0IEJveCYgbGF5b3V0Qm94KQoraW5saW5l
IElubGluZUl0ZW06OklubGluZUl0ZW0oY29uc3QgQm94JiBsYXlvdXRCb3gsIFR5cGUgdHlwZSkK
ICAgICA6IG1fbGF5b3V0Qm94KGxheW91dEJveCkKKyAgICAsIG1fdHlwZSh0eXBlKQogewogfQog
Ci1pbmxpbmUgSW5saW5lSXRlbTo6VHlwZSBJbmxpbmVJdGVtOjp0eXBlKCkgY29uc3QKK2lubGlu
ZSB2b2lkIElubGluZUl0ZW06OnNldFdpZHRoKExheW91dFVuaXQgd2lkdGgpCiB7Ci0gICAgaWYg
KGlzPElubGluZUJveD4obV9sYXlvdXRCb3gpICYmIGRvd25jYXN0PElubGluZUJveD4obV9sYXlv
dXRCb3gpLmhhc1RleHRDb250ZW50KCkpCi0gICAgICAgIHJldHVybiBUeXBlOjpUZXh0OwotCi0g
ICAgaWYgKGlzPExpbmVCcmVha0JveD4obV9sYXlvdXRCb3gpKQotICAgICAgICByZXR1cm4gVHlw
ZTo6SGFyZExpbmVCcmVhazsKLQotICAgIGlmIChtX2xheW91dEJveC5pc0Zsb2F0aW5nUG9zaXRp
b25lZCgpKQotICAgICAgICByZXR1cm4gVHlwZTo6RmxvYXQ7Ci0KLSAgICBBU1NFUlQobV9sYXlv
dXRCb3guaXNJbmxpbmVMZXZlbEJveCgpKTsKLSAgICByZXR1cm4gVHlwZTo6SW5saW5lQm94Owor
I2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBtX2hhc1ZhbGlkV2lkdGggPSB0cnVlOworI2VuZGlm
CisgICAgbV93aWR0aCA9IHdpZHRoOwogfQogCi1pbmxpbmUgU3RyaW5nIElubGluZUl0ZW06OnRl
eHRDb250ZW50KCkgY29uc3QKK2lubGluZSBMYXlvdXRVbml0IElubGluZUl0ZW06OndpZHRoKCkg
Y29uc3QKIHsKLSAgICBpZiAodHlwZSgpICE9IFR5cGU6OlRleHQpCi0gICAgICAgIHJldHVybiB7
IH07Ci0KLSAgICByZXR1cm4gZG93bmNhc3Q8SW5saW5lQm94PihtX2xheW91dEJveCkudGV4dENv
bnRlbnQoKTsKKyAgICBBU1NFUlQobV9oYXNWYWxpZFdpZHRoKTsKKyAgICByZXR1cm4gbV93aWR0
aDsKIH0KIAorI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0lOTElORV9JVEVNKFRvVmFs
dWVUeXBlTmFtZSwgcHJlZGljYXRlKSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdl
YkNvcmU6OkxheW91dDo6VG9WYWx1ZVR5cGVOYW1lKSBcCisgICAgc3RhdGljIGJvb2wgaXNUeXBl
KGNvbnN0IFdlYkNvcmU6OkxheW91dDo6SW5saW5lSXRlbSYgaW5saW5lSXRlbSkgeyByZXR1cm4g
aW5saW5lSXRlbS5wcmVkaWNhdGU7IH0gXAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQor
CiB9CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVm
b3JtYXR0aW5nL0lubGluZUxpbmVCb3guaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVm
b3JtYXR0aW5nL0lubGluZUxpbmVCb3guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NjQ0MjI5YmE1ODRmN2FiNmU3
ZWJhZmRkY2EyMWUyNmRmYzNjZTU5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJveC5oCkBAIC0wLDAgKzEsNjEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElO
R19DT05URVhUKQorCisjaW5jbHVkZSAiRGlzcGxheUJveC5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CituYW1lc3BhY2UgTGF5b3V0IHsKKworY2xhc3MgTGluZUJveCB7CitwdWJsaWM6CisgICAg
TGluZUJveChEaXNwbGF5OjpSZWN0KTsKKyAgICAKKyAgICBMYXlvdXRQb2ludCBsb2dpY2FsVG9w
TGVmdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdC50b3BMZWZ0KCk7IH0KKworICAgIExheW91dFVu
aXQgbG9naWNhbExlZnQoKSBjb25zdCB7IHJldHVybiBtX3JlY3QubGVmdCgpOyB9CisgICAgTGF5
b3V0VW5pdCBsb2dpY2FsUmlnaHQoKSBjb25zdCB7IHJldHVybiBtX3JlY3QucmlnaHQoKTsgfQor
ICAgIExheW91dFVuaXQgbG9naWNhbFRvcCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdC50b3AoKTsg
fQorICAgIExheW91dFVuaXQgbG9naWNhbEJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdC5i
b3R0b20oKTsgfQorCisgICAgTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgoKSBjb25zdCB7IHJldHVy
biBtX3JlY3Qud2lkdGgoKTsgfQorICAgIExheW91dFVuaXQgbG9naWNhbEhlaWdodCgpIGNvbnN0
IHsgcmV0dXJuIG1fcmVjdC5oZWlnaHQoKTsgfQorCitwcml2YXRlOgorICAgIERpc3BsYXk6OlJl
Y3QgbV9yZWN0OworfTsKKworaW5saW5lIExpbmVCb3g6OkxpbmVCb3goRGlzcGxheTo6UmVjdCBy
ZWN0KQorICAgIDogbV9yZWN0KHJlY3QpCisgICAgeworICAgIH0KKworfQorfQorCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGlu
ZUxpbmVCcmVha2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5n
L0lubGluZUxpbmVCcmVha2VyLmNwcAppbmRleCA1NzZhMGJiNzk1NDM3ZTAxMzc0MmE3Mjg2OTQz
YWYyNDgxMDA0ZmVjLi45NzI2Mjc1YjUwNmI3MzM0ZmM2NmQzNTk0MzMxNTBiZjE3NjMxZWQzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVM
aW5lQnJlYWtlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRp
bmcvSW5saW5lTGluZUJyZWFrZXIuY3BwCkBAIC0yOCwxNzMgKzI4LDEwMiBAQAogCiAjaWYgRU5B
QkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCiAKLSNpbmNsdWRlICJGb250Q2FzY2FkZS5o
IgogI2luY2x1ZGUgIkh5cGhlbmF0aW9uLmgiCi0jaW5jbHVkZSAiSW5saW5lUnVuUHJvdmlkZXIu
aCIKLSNpbmNsdWRlICJUZXh0VXRpbC5oIgotI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVz
Lmg+CisjaW5jbHVkZSAiTGF5b3V0U3RhdGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFt
ZXNwYWNlIExheW91dCB7CiAKLVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChJbmxpbmVMaW5l
QnJlYWtlcik7Ci0KLUlubGluZUxpbmVCcmVha2VyOjpJbmxpbmVMaW5lQnJlYWtlcihjb25zdCBM
YXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IElubGluZUNvbnRlbnQmIGlubGluZUNvbnRl
bnQsIGNvbnN0IFZlY3RvcjxJbmxpbmVSdW5Qcm92aWRlcjo6UnVuPiYgaW5saW5lUnVucykKK0xp
bmVCcmVha2VyOjpMaW5lQnJlYWtlcihjb25zdCBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUpCiAg
ICAgOiBtX2xheW91dFN0YXRlKGxheW91dFN0YXRlKQotICAgICwgbV9pbmxpbmVDb250ZW50KGlu
bGluZUNvbnRlbnQpCi0gICAgLCBtX2lubGluZVJ1bnMoaW5saW5lUnVucykKIHsKIH0KIAotT3B0
aW9uYWw8SW5saW5lTGluZUJyZWFrZXI6OlJ1bj4gSW5saW5lTGluZUJyZWFrZXI6Om5leHRSdW4o
TGF5b3V0VW5pdCBjb250ZW50TG9naWNhbExlZnQsIExheW91dFVuaXQgYXZhaWxhYmxlV2lkdGgs
IGJvb2wgbGluZUlzRW1wdHkpCitMaW5lQnJlYWtlcjo6QnJlYWtpbmdDb250ZXh0IExpbmVCcmVh
a2VyOjpicmVha2luZ0NvbnRleHQoSW5saW5lSXRlbSYgaW5saW5lSXRlbSwgTGluZUNvbnRleHQg
bGluZUNvbnRleHQpCiB7Ci0gICAgaWYgKGlzQXRDb250ZW50RW5kKCkpCi0gICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7Ci0KLSAgICBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuIGN1cnJlbnRJbmxp
bmVSdW4gPSBtX2lubGluZVJ1bnNbbV9jdXJyZW50UnVuSW5kZXhdOwotICAgIC8vIEFkanVzdCB0
aGUgY3VycmVudCBydW4gaWYgaXQgaXMgc3BsaXQgbWlkd29yZC4KLSAgICBpZiAobV9zcGxpdFBv
c2l0aW9uKSB7Ci0gICAgICAgIEFTU0VSVChjdXJyZW50SW5saW5lUnVuLmlzVGV4dCgpKTsKLSAg
ICAgICAgbV9zcGxpdFBvc2l0aW9uID0gV1RGOjpudWxsb3B0OwotICAgIH0KLQotICAgIGlmIChj
dXJyZW50SW5saW5lUnVuLmlzTGluZUJyZWFrKCkpIHsKLSAgICAgICAgKyttX2N1cnJlbnRSdW5J
bmRleDsKLSAgICAgICAgcmV0dXJuIFJ1biB7IFJ1bjo6UG9zaXRpb246OkxpbmVFbmQsIDAsIGN1
cnJlbnRJbmxpbmVSdW4gfTsKLSAgICB9Ci0KLSAgICBhdXRvIGNvbnRlbnRXaWR0aCA9IHJ1bldp
ZHRoKGN1cnJlbnRJbmxpbmVSdW4sIGNvbnRlbnRMb2dpY2FsTGVmdCk7Ci0gICAgLy8gMS4gUGxl
bnR5IG9mIHNwYWNlIGxlZnQuCi0gICAgaWYgKGNvbnRlbnRXaWR0aCA8PSBhdmFpbGFibGVXaWR0
aCkgewotICAgICAgICArK21fY3VycmVudFJ1bkluZGV4OwotICAgICAgICByZXR1cm4gUnVuIHsg
bGluZUlzRW1wdHkgPyBSdW46OlBvc2l0aW9uOjpMaW5lQmVnaW4gOiBSdW46OlBvc2l0aW9uOjpV
bmRldGVybWluZWQsIGNvbnRlbnRXaWR0aCwgY3VycmVudElubGluZVJ1biB9OwotICAgIH0KLQot
ICAgIC8vIDIuIE5vIHNwYWNlIGxlZnQgd2hhdHNvZXZlci4KLSAgICBpZiAoYXZhaWxhYmxlV2lk
dGggPD0gMCkgewotICAgICAgICArK21fY3VycmVudFJ1bkluZGV4OwotICAgICAgICByZXR1cm4g
UnVuIHsgUnVuOjpQb3NpdGlvbjo6TGluZUJlZ2luLCBjb250ZW50V2lkdGgsIGN1cnJlbnRJbmxp
bmVSdW4gfTsKLSAgICB9Ci0KLSAgICAvLyAzLiBTb21lIHNwYWNlIGxlZnQuIExldCdzIGZpbmQg
b3V0IHdoYXQgd2UgbmVlZCB0byBkbyB3aXRoIHRoaXMgcnVuLgotICAgIGF1dG8gYnJlYWtpbmdC
ZWhhdmlvciA9IGxpbmVCcmVha2luZ0JlaGF2aW9yKGN1cnJlbnRJbmxpbmVSdW4sIGxpbmVJc0Vt
cHR5KTsKLSAgICBpZiAoYnJlYWtpbmdCZWhhdmlvciA9PSBMaW5lQnJlYWtpbmdCZWhhdmlvcjo6
S2VlcCkgewotICAgICAgICArK21fY3VycmVudFJ1bkluZGV4OwotICAgICAgICByZXR1cm4gUnVu
IHsgbGluZUlzRW1wdHkgPyBSdW46OlBvc2l0aW9uOjpMaW5lQmVnaW4gOiBSdW46OlBvc2l0aW9u
OjpVbmRldGVybWluZWQsIGNvbnRlbnRXaWR0aCwgY3VycmVudElubGluZVJ1biB9OwotICAgIH0K
LQotICAgIGlmIChicmVha2luZ0JlaGF2aW9yID09IExpbmVCcmVha2luZ0JlaGF2aW9yOjpXcmFw
VG9OZXh0TGluZSkgewotICAgICAgICArK21fY3VycmVudFJ1bkluZGV4OwotICAgICAgICByZXR1
cm4gUnVuIHsgUnVuOjpQb3NpdGlvbjo6TGluZUJlZ2luLCBjb250ZW50V2lkdGgsIGN1cnJlbnRJ
bmxpbmVSdW4gfTsKLSAgICB9Ci0KLSAgICBBU1NFUlQoYnJlYWtpbmdCZWhhdmlvciA9PSBMaW5l
QnJlYWtpbmdCZWhhdmlvcjo6QnJlYWspOwotICAgIC8vIFNwbGl0IGNvbnRlbnQuCi0gICAgcmV0
dXJuIHNwbGl0UnVuKGN1cnJlbnRJbmxpbmVSdW4sIGNvbnRlbnRMb2dpY2FsTGVmdCwgYXZhaWxh
YmxlV2lkdGgsIGxpbmVJc0VtcHR5KTsKKyAgICBpbmxpbmVJdGVtLnNldFdpZHRoKHJ1bldpZHRo
KGlubGluZUl0ZW0sIGxpbmVDb250ZXh0LmxvZ2ljYWxMZWZ0KSk7CisgICAgLy8gRmlyc3QgY29u
dGVudCBhbHdheXMgc3RheXMgb24gbGluZS4KKyAgICBpZiAobGluZUNvbnRleHQuaXNFbXB0eSB8
fCBpbmxpbmVJdGVtLndpZHRoKCkgPD0gbGluZUNvbnRleHQuYXZhaWxhYmxlV2lkdGgpCisgICAg
ICAgIHJldHVybiB7IEJyZWFraW5nQmVoYXZpb3I6OktlZXAsIGlzQXRCcmVha2luZ09wcG9ydHVu
aXR5KGlubGluZUl0ZW0pIH07CisKKyAgICBpZiAoaXM8SW5saW5lVGV4dEl0ZW0+KGlubGluZUl0
ZW0pKQorICAgICAgICByZXR1cm4geyB3b3JkQnJlYWtpbmdCZWhhdmlvcihkb3duY2FzdDxJbmxp
bmVUZXh0SXRlbT4oaW5saW5lSXRlbSksIGxpbmVDb250ZXh0LmlzRW1wdHkpLCBpc0F0QnJlYWtp
bmdPcHBvcnR1bml0eShpbmxpbmVJdGVtKSB9OworCisgICAgLy8gV3JhcCBub24tdGV4dCBib3hl
cyB0byB0aGUgbmV4dCBsaW5lIHVubGVzcyB3ZSBjYW4gdHJpbSB0cmFpbGluZyB3aGl0ZXNwYWNl
LgorICAgIGF1dG8gYXZhaWxhYmxlV2lkdGggPSBsaW5lQ29udGV4dC5hdmFpbGFibGVXaWR0aCAr
IGxpbmVDb250ZXh0LnRyaW1tYWJsZVdpZHRoOworICAgIGlmIChpbmxpbmVJdGVtLndpZHRoKCkg
PD0gYXZhaWxhYmxlV2lkdGgpCisgICAgICAgIHJldHVybiB7IEJyZWFraW5nQmVoYXZpb3I6Oktl
ZXAsIGlzQXRCcmVha2luZ09wcG9ydHVuaXR5KGlubGluZUl0ZW0pIH07CisgICAgcmV0dXJuIHsg
QnJlYWtpbmdCZWhhdmlvcjo6V3JhcCwgaXNBdEJyZWFraW5nT3Bwb3J0dW5pdHkoaW5saW5lSXRl
bSkgfTsKIH0KIAotYm9vbCBJbmxpbmVMaW5lQnJlYWtlcjo6aXNBdENvbnRlbnRFbmQoKSBjb25z
dAorTGluZUJyZWFrZXI6OkJyZWFraW5nQmVoYXZpb3IgTGluZUJyZWFrZXI6OndvcmRCcmVha2lu
Z0JlaGF2aW9yKGNvbnN0IElubGluZVRleHRJdGVtJiBpbmxpbmVJdGVtLCBib29sIGxpbmVJc0Vt
cHR5KSBjb25zdAogewotICAgIHJldHVybiBtX2N1cnJlbnRSdW5JbmRleCA9PSBtX2lubGluZVJ1
bnMuc2l6ZSgpOwotfQotCi1JbmxpbmVMaW5lQnJlYWtlcjo6TGluZUJyZWFraW5nQmVoYXZpb3Ig
SW5saW5lTGluZUJyZWFrZXI6OmxpbmVCcmVha2luZ0JlaGF2aW9yKGNvbnN0IElubGluZVJ1blBy
b3ZpZGVyOjpSdW4mIGlubGluZVJ1biwgYm9vbCBsaW5lSXNFbXB0eSkKLXsKLSAgICAvLyBMaW5l
IGJyZWFraW5nIGJlaGF2aW91cjoKKyAgICAvLyBXb3JkIGJyZWFraW5nIGJlaGF2aW91cjoKICAg
ICAvLyAxLiBXaGl0ZXNhcGNlIGNvbGxhcHNlIG9uIC0+IHB1c2ggd2hpdGVzcGFjZSB0byBuZXh0
IGxpbmUuCiAgICAgLy8gMi4gV2hpdGVzcGFjZSBjb2xsYXBzZSBvZmYgLT4gd2hpdGVzcGFjZSBp
cyBzcGxpdCB3aGVyZSBwb3NzaWJsZS4KICAgICAvLyAzLiBOb24td2hpdGVzcGFjZSAtPiBmaXJz
dCBydW4gb24gdGhlIGxpbmUgLT4gZWl0aGVyIHNwbGl0IG9yIGtlcHQgb24gdGhlIGxpbmUuIChk
ZXBlbmRzIG9uIG92ZXJmbG93LXdyYXApCiAgICAgLy8gNC4gTm9uLXdoaXRlc3BhY2UgLT4gYWxy
ZWFkeSBjb250ZW50IG9uIHRoZSBsaW5lIC0+IGVpdGhlciBnZXRzIHNwbGl0ICh3b3JkLWJyZWFr
OiBicmVhay1hbGwpIG9yIGdldHMgcHVzaGVkIHRvIHRoZSBuZXh0IGxpbmUuCiAgICAgLy8gKEh5
cGhlbmF0ZSB3aGVuIHBvc3NpYmxlKQogICAgIC8vIDUuIE5vbi10ZXh0IHR5cGUgLT4gbmV4dCBs
aW5lCi0gICAgYXV0byYgc3R5bGUgPSBpbmxpbmVSdW4uc3R5bGUoKTsKKyAgICBhdXRvJiBzdHls
ZSA9IGlubGluZUl0ZW0uc3R5bGUoKTsKIAotICAgIGlmIChpbmxpbmVSdW4uaXNXaGl0ZXNwYWNl
KCkpCi0gICAgICAgIHJldHVybiBzdHlsZS5jb2xsYXBzZVdoaXRlU3BhY2UoKSA/IExpbmVCcmVh
a2luZ0JlaGF2aW9yOjpXcmFwVG9OZXh0TGluZSA6IExpbmVCcmVha2luZ0JlaGF2aW9yOjpCcmVh
azsKKyAgICBpZiAoaW5saW5lSXRlbS5pc1doaXRlc3BhY2UoKSkKKyAgICAgICAgcmV0dXJuIHN0
eWxlLmNvbGxhcHNlV2hpdGVTcGFjZSgpID8gQnJlYWtpbmdCZWhhdmlvcjo6V3JhcCA6IEJyZWFr
aW5nQmVoYXZpb3I6OkJyZWFrOwogCi0gICAgaWYgKGlubGluZVJ1bi5pc05vbldoaXRlc3BhY2Uo
KSkgewotICAgICAgICBhdXRvIHNob3VsZEh5cGVuYXRlID0gIW1faHlwaGVuYXRpb25Jc0Rpc2Fi
bGVkICYmIHN0eWxlLmh5cGhlbnMoKSA9PSBIeXBoZW5zOjpBdXRvICYmIGNhbkh5cGhlbmF0ZShz
dHlsZS5sb2NhbGUoKSk7Ci0gICAgICAgIGlmIChzaG91bGRIeXBlbmF0ZSkKLSAgICAgICAgICAg
IHJldHVybiBMaW5lQnJlYWtpbmdCZWhhdmlvcjo6QnJlYWs7CisgICAgYXV0byBzaG91bGRIeXBl
bmF0ZSA9ICFtX2h5cGhlbmF0aW9uSXNEaXNhYmxlZCAmJiBzdHlsZS5oeXBoZW5zKCkgPT0gSHlw
aGVuczo6QXV0byAmJiBjYW5IeXBoZW5hdGUoc3R5bGUubG9jYWxlKCkpOworICAgIGlmIChzaG91
bGRIeXBlbmF0ZSkKKyAgICAgICAgcmV0dXJuIEJyZWFraW5nQmVoYXZpb3I6OkJyZWFrOwogCi0g
ICAgICAgIGlmIChzdHlsZS5hdXRvV3JhcCgpKSB7Ci0gICAgICAgICAgICAvLyBCcmVhayBhbnkg
d29yZAotICAgICAgICAgICAgaWYgKHN0eWxlLndvcmRCcmVhaygpID09IFdvcmRCcmVhazo6QnJl
YWtBbGwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIExpbmVCcmVha2luZ0JlaGF2aW9yOjpCcmVh
azsKKyAgICBpZiAoc3R5bGUuYXV0b1dyYXAoKSkgeworICAgICAgICAvLyBCcmVhayBhbnkgd29y
ZAorICAgICAgICBpZiAoc3R5bGUud29yZEJyZWFrKCkgPT0gV29yZEJyZWFrOjpCcmVha0FsbCkK
KyAgICAgICAgICAgIHJldHVybiBCcmVha2luZ0JlaGF2aW9yOjpCcmVhazsKIAotICAgICAgICAg
ICAgLy8gQnJlYWsgZmlyc3QgcnVuIG9uIGxpbmUuCi0gICAgICAgICAgICBpZiAobGluZUlzRW1w
dHkgJiYgc3R5bGUuYnJlYWtXb3JkcygpICYmIHN0eWxlLnByZXNlcnZlTmV3bGluZSgpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBMaW5lQnJlYWtpbmdCZWhhdmlvcjo6QnJlYWs7Ci0gICAgICAg
IH0KLQotICAgICAgICAvLyBOb24tYnJlYWthYmxlIG5vbi13aGl0ZXNwYWNlIHJ1bi4KLSAgICAg
ICAgcmV0dXJuIGxpbmVJc0VtcHR5ID8gTGluZUJyZWFraW5nQmVoYXZpb3I6OktlZXAgOiBMaW5l
QnJlYWtpbmdCZWhhdmlvcjo6V3JhcFRvTmV4dExpbmU7CisgICAgICAgIC8vIEJyZWFrIGZpcnN0
IHJ1biBvbiBsaW5lLgorICAgICAgICBpZiAobGluZUlzRW1wdHkgJiYgc3R5bGUuYnJlYWtXb3Jk
cygpICYmIHN0eWxlLnByZXNlcnZlTmV3bGluZSgpKQorICAgICAgICAgICAgcmV0dXJuIEJyZWFr
aW5nQmVoYXZpb3I6OkJyZWFrOwogICAgIH0KIAotICAgIEFTU0VSVChpbmxpbmVSdW4uaXNCb3go
KSB8fCBpbmxpbmVSdW4uaXNGbG9hdCgpKTsKLSAgICAvLyBOb24tdGV4dCBpbmxpbmUgcnVucy4K
LSAgICByZXR1cm4gTGluZUJyZWFraW5nQmVoYXZpb3I6OldyYXBUb05leHRMaW5lOworICAgIC8v
IE5vbi1icmVha2FibGUgbm9uLXdoaXRlc3BhY2UgcnVuLgorICAgIHJldHVybiBsaW5lSXNFbXB0
eSA/IEJyZWFraW5nQmVoYXZpb3I6OktlZXAgOiBCcmVha2luZ0JlaGF2aW9yOjpXcmFwOwogfQog
Ci1MYXlvdXRVbml0IElubGluZUxpbmVCcmVha2VyOjpydW5XaWR0aChjb25zdCBJbmxpbmVSdW5Q
cm92aWRlcjo6UnVuJiBpbmxpbmVSdW4sIExheW91dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0KSBj
b25zdAorTGF5b3V0VW5pdCBMaW5lQnJlYWtlcjo6cnVuV2lkdGgoY29uc3QgSW5saW5lSXRlbSYg
aW5saW5lSXRlbSwgTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbExlZnQpIGNvbnN0CiB7Ci0gICAg
QVNTRVJUKCFpbmxpbmVSdW4uaXNMaW5lQnJlYWsoKSk7CisgICAgaWYgKGlubGluZUl0ZW0uaXNM
aW5lQnJlYWsoKSkKKyAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpZiAoaW5saW5lUnVuLmlzVGV4
dCgpKQotICAgICAgICByZXR1cm4gdGV4dFdpZHRoKGlubGluZVJ1biwgY29udGVudExvZ2ljYWxM
ZWZ0KTsKKyAgICBpZiAoaXM8SW5saW5lVGV4dEl0ZW0+KGlubGluZUl0ZW0pKQorICAgICAgICBy
ZXR1cm4gdGV4dFdpZHRoKGRvd25jYXN0PElubGluZVRleHRJdGVtPihpbmxpbmVJdGVtKSwgY29u
dGVudExvZ2ljYWxMZWZ0KTsKIAotICAgIEFTU0VSVChpbmxpbmVSdW4uaXNCb3goKSB8fCBpbmxp
bmVSdW4uaXNGbG9hdCgpKTsKLSAgICBhdXRvJiBpbmxpbmVJdGVtID0gaW5saW5lUnVuLmlubGlu
ZUl0ZW0oKTsKICAgICBhdXRvJiBsYXlvdXRCb3ggPSBpbmxpbmVJdGVtLmxheW91dEJveCgpOwog
ICAgIEFTU0VSVChtX2xheW91dFN0YXRlLmhhc0Rpc3BsYXlCb3gobGF5b3V0Qm94KSk7CiAgICAg
YXV0byYgZGlzcGxheUJveCA9IG1fbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveChs
YXlvdXRCb3gpOwotICAgIHJldHVybiBpbmxpbmVJdGVtLm5vbkJyZWFrYWJsZVN0YXJ0KCkgKyBk
aXNwbGF5Qm94LndpZHRoKCkgKyBpbmxpbmVJdGVtLm5vbkJyZWFrYWJsZUVuZCgpOwotfQogCi1M
YXlvdXRVbml0IElubGluZUxpbmVCcmVha2VyOjp0ZXh0V2lkdGgoY29uc3QgSW5saW5lUnVuUHJv
dmlkZXI6OlJ1biYgaW5saW5lUnVuLCBMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsTGVmdCkgY29u
c3QKLXsKLSAgICAvLyBGSVhNRTogRmluZCBhIHdheSB0byBtZXJnZSB0aGlzIGFuZCBJbmxpbmVG
b3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OnJ1bldpZHRoLgotICAgIGF1dG8mIGlubGluZUl0
ZW0gPSBpbmxpbmVSdW4uaW5saW5lSXRlbSgpOwotICAgIGF1dG8gdGV4dENvbnRleHQgPSBpbmxp
bmVSdW4udGV4dENvbnRleHQoKTsKLSAgICBhdXRvIHN0YXJ0UG9zaXRpb24gPSB0ZXh0Q29udGV4
dC0+c3RhcnQoKTsKLSAgICBhdXRvIGxlbmd0aCA9IHRleHRDb250ZXh0LT5pc0NvbGxhcHNlZCgp
ID8gMSA6IHRleHRDb250ZXh0LT5sZW5ndGgoKTsKLQotICAgIC8vIEZJWE1FOiBJdCBkb2VzIG5v
dCBkbyBwcm9wZXIga2VybmluZy9saWdhdHVyZSBoYW5kbGluZy4KLSAgICBMYXlvdXRVbml0IHdp
ZHRoOwotICAgIGF1dG8gaXRlcmF0b3IgPSBtX2lubGluZUNvbnRlbnQuZmluZChjb25zdF9jYXN0
PElubGluZUl0ZW0qPigmaW5saW5lSXRlbSkpOwotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICBh
dXRvIGlubGluZUl0ZW1FbmQgPSBtX2lubGluZUNvbnRlbnQuZW5kKCk7Ci0jZW5kaWYKLSAgICB3
aGlsZSAobGVuZ3RoKSB7Ci0gICAgICAgIEFTU0VSVChpdGVyYXRvciAhPSBpbmxpbmVJdGVtRW5k
KTsKLSAgICAgICAgYXV0byYgY3VycmVudElubGluZUl0ZW0gPSAqKml0ZXJhdG9yOwotICAgICAg
ICBhdXRvIGlubGluZUl0ZW1MZW5ndGggPSBjdXJyZW50SW5saW5lSXRlbS50ZXh0Q29udGVudCgp
Lmxlbmd0aCgpOwotICAgICAgICBhdXRvIGVuZFBvc2l0aW9uID0gc3RkOjptaW48SXRlbVBvc2l0
aW9uPihzdGFydFBvc2l0aW9uICsgbGVuZ3RoLCBpbmxpbmVJdGVtTGVuZ3RoKTsKLSAgICAgICAg
YXV0byB0ZXh0V2lkdGggPSBUZXh0VXRpbDo6d2lkdGgoY3VycmVudElubGluZUl0ZW0sIHN0YXJ0
UG9zaXRpb24sIGVuZFBvc2l0aW9uLCBjb250ZW50TG9naWNhbExlZnQpOwotCi0gICAgICAgIGF1
dG8gbm9uQnJlYWthYmxlU3RhcnQgPSAhc3RhcnRQb3NpdGlvbiA/IGN1cnJlbnRJbmxpbmVJdGVt
Lm5vbkJyZWFrYWJsZVN0YXJ0KCkgOiAwX2x1OwotICAgICAgICBhdXRvIG5vbkJyZWFrYWJsZUVu
ZCA9ICBlbmRQb3NpdGlvbiA9PSBpbmxpbmVJdGVtTGVuZ3RoID8gY3VycmVudElubGluZUl0ZW0u
bm9uQnJlYWthYmxlRW5kKCkgOiAwX2x1OwotICAgICAgICBhdXRvIGNvbnRlbnRXaWR0aCA9IG5v
bkJyZWFrYWJsZVN0YXJ0ICsgdGV4dFdpZHRoICsgbm9uQnJlYWthYmxlRW5kOwotICAgICAgICBj
b250ZW50TG9naWNhbExlZnQgKz0gY29udGVudFdpZHRoOwotICAgICAgICB3aWR0aCArPSBjb250
ZW50V2lkdGg7Ci0gICAgICAgIGxlbmd0aCAtPSAoZW5kUG9zaXRpb24gLSBzdGFydFBvc2l0aW9u
KTsKLQotICAgICAgICBzdGFydFBvc2l0aW9uID0gMDsKLSAgICAgICAgKytpdGVyYXRvcjsKLSAg
ICB9Ci0gICAgcmV0dXJuIHdpZHRoOworICAgIGlmIChpbmxpbmVJdGVtLmlzQ29udGFpbmVyU3Rh
cnQoKSkKKyAgICAgICAgcmV0dXJuIGRpc3BsYXlCb3gubWFyZ2luU3RhcnQoKSArIGRpc3BsYXlC
b3guYm9yZGVyTGVmdCgpICsgZGlzcGxheUJveC5wYWRkaW5nTGVmdCgpLnZhbHVlT3IoMCk7CisK
KyAgICBpZiAoaW5saW5lSXRlbS5pc0NvbnRhaW5lckVuZCgpKQorICAgICAgICByZXR1cm4gZGlz
cGxheUJveC5tYXJnaW5FbmQoKSArIGRpc3BsYXlCb3guYm9yZGVyUmlnaHQoKSArIGRpc3BsYXlC
b3gucGFkZGluZ1JpZ2h0KCkudmFsdWVPcigwKTsKKworICAgIGlmIChpbmxpbmVJdGVtLmlzRmxv
YXQoKSkKKyAgICAgICAgcmV0dXJuIGRpc3BsYXlCb3gubWFyZ2luQm94KCkud2lkdGgoKTsKKwor
ICAgIHJldHVybiBkaXNwbGF5Qm94LndpZHRoKCk7CiB9CiAKLUlubGluZUxpbmVCcmVha2VyOjpS
dW4gSW5saW5lTGluZUJyZWFrZXI6OnNwbGl0UnVuKGNvbnN0IElubGluZVJ1blByb3ZpZGVyOjpS
dW4mIGlubGluZVJ1biwgTGF5b3V0VW5pdCwgTGF5b3V0VW5pdCwgYm9vbCkKK2Jvb2wgTGluZUJy
ZWFrZXI6OmlzQXRCcmVha2luZ09wcG9ydHVuaXR5KGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0
ZW0pCiB7Ci0gICAgcmV0dXJuIHsgUnVuOjpQb3NpdGlvbjo6VW5kZXRlcm1pbmVkLCB7IH0sIGlu
bGluZVJ1biB9OworICAgIGlmIChpczxJbmxpbmVUZXh0SXRlbT4oaW5saW5lSXRlbSkpCisgICAg
ICAgIHJldHVybiBkb3duY2FzdDxJbmxpbmVUZXh0SXRlbT4oaW5saW5lSXRlbSkuaXNXaGl0ZXNw
YWNlKCk7CisgICAgcmV0dXJuICFpbmxpbmVJdGVtLmlzRmxvYXQoKSAmJiAhaW5saW5lSXRlbS5p
c0NvbnRhaW5lclN0YXJ0KCkgJiYgIWlubGluZUl0ZW0uaXNDb250YWluZXJFbmQoKTsKIH0KIAot
T3B0aW9uYWw8SXRlbVBvc2l0aW9uPiBJbmxpbmVMaW5lQnJlYWtlcjo6YWRqdXN0U3BsaXRQb3Np
dGlvbldpdGhIeXBoZW5hdGlvbihjb25zdCBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuJiwgSXRlbVBv
c2l0aW9uLCBMYXlvdXRVbml0LCBMYXlvdXRVbml0LCBib29sKSBjb25zdAorTGF5b3V0VW5pdCBM
aW5lQnJlYWtlcjo6dGV4dFdpZHRoKGNvbnN0IElubGluZVRleHRJdGVtJiBpbmxpbmVUZXh0SXRl
bSwgTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbExlZnQpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHsg
fTsKKyAgICBhdXRvIGVuZCA9IGlubGluZVRleHRJdGVtLmlzQ29sbGFwc2VkKCkgPyBpbmxpbmVU
ZXh0SXRlbS5zdGFydCgpICsgMSA6IGlubGluZVRleHRJdGVtLmVuZCgpOworICAgIHJldHVybiBU
ZXh0VXRpbDo6d2lkdGgoZG93bmNhc3Q8SW5saW5lQm94PihpbmxpbmVUZXh0SXRlbS5sYXlvdXRC
b3goKSksIGlubGluZVRleHRJdGVtLnN0YXJ0KCksIGVuZCwgY29udGVudExvZ2ljYWxMZWZ0KTsK
IH0KLQogfQogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5s
aW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnJlYWtlci5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJyZWFrZXIuaAppbmRleCAzODdiMGZjZjM1ZjY1
NjgxNTBhZjViMDM2Y2EwYWVjOGJjMWI3OTg5Li4wNjUzMzAyNjNkZDdhNGM5NmIyZDk0M2Y3OGM0
MTMyYmM4NGM2NDM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9y
bWF0dGluZy9JbmxpbmVMaW5lQnJlYWtlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9p
bmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCcmVha2VyLmgKQEAgLTI3LDQxICsyNywzNyBAQAog
CiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCiAKLSNpbmNsdWRlICJJbmxp
bmVSdW5Qcm92aWRlci5oIgotI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KLQogbmFtZXNwYWNl
IFdlYkNvcmUgewogbmFtZXNwYWNlIExheW91dCB7CiAKLWNsYXNzIElubGluZUxpbmVCcmVha2Vy
IHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKElubGluZUxpbmVCcmVha2VyKTsKK2NsYXNz
IElubGluZVRleHRJdGVtOworCitjbGFzcyBMaW5lQnJlYWtlciB7CiBwdWJsaWM6Ci0gICAgSW5s
aW5lTGluZUJyZWFrZXIoY29uc3QgTGF5b3V0U3RhdGUmLCBjb25zdCBJbmxpbmVDb250ZW50Jiwg
Y29uc3QgVmVjdG9yPElubGluZVJ1blByb3ZpZGVyOjpSdW4+Jik7CisgICAgTGluZUJyZWFrZXIo
Y29uc3QgTGF5b3V0U3RhdGUmKTsKIAotICAgIHN0cnVjdCBSdW4gewotICAgICAgICBlbnVtIGNs
YXNzIFBvc2l0aW9uIHsgVW5kZXRlcm1pbmVkLCBMaW5lQmVnaW4sIExpbmVFbmQgfTsKLSAgICAg
ICAgUG9zaXRpb24gcG9zaXRpb247Ci0gICAgICAgIExheW91dFVuaXQgd2lkdGg7Ci0gICAgICAg
IElubGluZVJ1blByb3ZpZGVyOjpSdW4gY29udGVudDsKKyAgICBlbnVtIGNsYXNzIEJyZWFraW5n
QmVoYXZpb3IgeyBLZWVwLCBCcmVhaywgV3JhcCB9OworICAgIHN0cnVjdCBCcmVha2luZ0NvbnRl
eHQgeworICAgICAgICBCcmVha2luZ0JlaGF2aW9yIGJyZWFraW5nQmVoYXZpb3I7CisgICAgICAg
IGJvb2wgaXNBdEJyZWFraW5nT3Bwb3J0dW5pdHkgeyBmYWxzZSB9OworICAgIH07CisgICAgc3Ry
dWN0IExpbmVDb250ZXh0IHsKKyAgICAgICAgTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aDsKKyAg
ICAgICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdDsKKyAgICAgICAgTGF5b3V0VW5pdCB0cmltbWFi
bGVXaWR0aDsKKyAgICAgICAgYm9vbCBpc0VtcHR5IHsgZmFsc2UgfTsKICAgICB9OwotICAgIE9w
dGlvbmFsPFJ1bj4gbmV4dFJ1bihMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsTGVmdCwgTGF5b3V0
VW5pdCBhdmFpbGFibGVXaWR0aCwgYm9vbCBsaW5lSXNFbXB0eSk7CisgICAgQnJlYWtpbmdDb250
ZXh0IGJyZWFraW5nQ29udGV4dChJbmxpbmVJdGVtJiwgY29uc3QgTGluZUNvbnRleHQpOwogCiBw
cml2YXRlOgotICAgIGVudW0gY2xhc3MgTGluZUJyZWFraW5nQmVoYXZpb3IgeyBLZWVwLCBCcmVh
aywgV3JhcFRvTmV4dExpbmUgfTsKLSAgICBMaW5lQnJlYWtpbmdCZWhhdmlvciBsaW5lQnJlYWtp
bmdCZWhhdmlvcihjb25zdCBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuJiwgYm9vbCBsaW5lSXNFbXB0
eSk7Ci0gICAgYm9vbCBpc0F0Q29udGVudEVuZCgpIGNvbnN0OwotICAgIFJ1biBzcGxpdFJ1bihj
b25zdCBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuJiwgTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbExl
ZnQsIExheW91dFVuaXQgYXZhaWxhYmxlV2lkdGgsIGJvb2wgbGluZUlzRW1wdHkpOwotICAgIExh
eW91dFVuaXQgcnVuV2lkdGgoY29uc3QgSW5saW5lUnVuUHJvdmlkZXI6OlJ1biYsIExheW91dFVu
aXQgY29udGVudExvZ2ljYWxMZWZ0KSBjb25zdDsKLSAgICBMYXlvdXRVbml0IHRleHRXaWR0aChj
b25zdCBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuJiwgTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbExl
ZnQpIGNvbnN0OwotICAgIE9wdGlvbmFsPEl0ZW1Qb3NpdGlvbj4gYWRqdXN0U3BsaXRQb3NpdGlv
bldpdGhIeXBoZW5hdGlvbihjb25zdCBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuJiwgSXRlbVBvc2l0
aW9uIHNwbGl0UG9zaXRpb24sIExheW91dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0LCBMYXlvdXRV
bml0IGF2YWlsYWJsZVdpZHRoLCBib29sIGlzTGluZUVtcHR5KSBjb25zdDsKIAotICAgIGNvbnN0
IExheW91dFN0YXRlJiBtX2xheW91dFN0YXRlOwotICAgIGNvbnN0IElubGluZUNvbnRlbnQmIG1f
aW5saW5lQ29udGVudDsKLSAgICBjb25zdCBWZWN0b3I8SW5saW5lUnVuUHJvdmlkZXI6OlJ1bj4m
IG1faW5saW5lUnVuczsKKyAgICBCcmVha2luZ0JlaGF2aW9yIHdvcmRCcmVha2luZ0JlaGF2aW9y
KGNvbnN0IElubGluZVRleHRJdGVtJiwgYm9vbCBsaW5lSXNFbXB0eSkgY29uc3Q7CisgICAgYm9v
bCBpc0F0QnJlYWtpbmdPcHBvcnR1bml0eShjb25zdCBJbmxpbmVJdGVtJik7CisgICAgTGF5b3V0
VW5pdCBydW5XaWR0aChjb25zdCBJbmxpbmVJdGVtJiwgTGF5b3V0VW5pdCBjb250ZW50TG9naWNh
bExlZnQpIGNvbnN0OworICAgIExheW91dFVuaXQgdGV4dFdpZHRoKGNvbnN0IElubGluZVRleHRJ
dGVtJiwgTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbExlZnQpIGNvbnN0OwogCi0gICAgdW5zaWdu
ZWQgbV9jdXJyZW50UnVuSW5kZXggeyAwIH07Ci0gICAgT3B0aW9uYWw8SXRlbVBvc2l0aW9uPiBt
X3NwbGl0UG9zaXRpb247Ci0gICAgYm9vbCBtX2h5cGhlbmF0aW9uSXNEaXNhYmxlZCB7IGZhbHNl
IH07CisgICAgY29uc3QgTGF5b3V0U3RhdGUmIG1fbGF5b3V0U3RhdGU7CisgICAgYm9vbCBtX2h5
cGhlbmF0aW9uSXNEaXNhYmxlZCB7IHRydWUgfTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZVJ1bi5oIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lUnVuLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGQ2NTU0NDE2YWE1MTE1MDI5ZjVkNTNmNmEwNDcxYmVkZDFlZTExNWUu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lUnVuLmgKKysrIC9kZXYvbnVsbApA
QCAtMSwxMTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxF
KExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCi0KLSNpbmNsdWRlICJJbmxpbmVSdW5Qcm92aWRl
ci5oIgotI2luY2x1ZGUgIkxheW91dFVuaXQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotbmFt
ZXNwYWNlIExheW91dCB7Ci0KLXN0cnVjdCBJbmxpbmVSdW4gewotICAgIElubGluZVJ1bihEaXNw
bGF5OjpCb3g6OlJlY3QgbG9naWNhbFJlY3QsIGNvbnN0IElubGluZUl0ZW0mKTsKLQotICAgIExh
eW91dFVuaXQgbG9naWNhbExlZnQoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxSZWN0LmxlZnQo
KTsgfQotICAgIExheW91dFVuaXQgbG9naWNhbFJpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9sb2dp
Y2FsUmVjdC5yaWdodCgpOyB9Ci0gICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9wKCkgY29uc3QgeyBy
ZXR1cm4gbV9sb2dpY2FsUmVjdC50b3AoKTsgfQotICAgIExheW91dFVuaXQgbG9naWNhbEJvdHRv
bSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFJlY3QuYm90dG9tKCk7IH0KLQotICAgIExheW91
dFVuaXQgbG9naWNhbFdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsUmVjdC53aWR0aCgp
OyB9Ci0gICAgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9sb2dp
Y2FsUmVjdC5oZWlnaHQoKTsgfQotICAgIGJvb2wgb3ZlcmxhcHNNdWx0aXBsZUlubGluZUl0ZW1z
KCkgY29uc3Q7Ci0KLSAgICB2b2lkIHNldExvZ2ljYWxXaWR0aChMYXlvdXRVbml0IHdpZHRoKSB7
IG1fbG9naWNhbFJlY3Quc2V0V2lkdGgod2lkdGgpOyB9Ci0gICAgdm9pZCBzZXRMb2dpY2FsTGVm
dChMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0KSB7IG1fbG9naWNhbFJlY3Quc2V0TGVmdChsb2dpY2Fs
TGVmdCk7IH0KLSAgICB2b2lkIHNldExvZ2ljYWxSaWdodChMYXlvdXRVbml0IGxvZ2ljYWxSaWdo
dCkgeyBtX2xvZ2ljYWxSZWN0LnNoaWZ0UmlnaHRUbyhsb2dpY2FsUmlnaHQpOyB9Ci0gICAgdm9p
ZCBtb3ZlVmVydGljYWxseShMYXlvdXRVbml0IGRlbHRhKSB7IG1fbG9naWNhbFJlY3QubW92ZVZl
cnRpY2FsbHkoZGVsdGEpOyB9Ci0gICAgdm9pZCBtb3ZlSG9yaXpvbnRhbGx5KExheW91dFVuaXQg
ZGVsdGEpIHsgbV9sb2dpY2FsUmVjdC5tb3ZlSG9yaXpvbnRhbGx5KGRlbHRhKTsgfQotCi0gICAg
c3RydWN0IEV4cGFuc2lvbk9wcG9ydHVuaXR5IHsKLSAgICAgICAgdW5zaWduZWQgY291bnQgeyAw
IH07Ci0gICAgICAgIEV4cGFuc2lvbkJlaGF2aW9yIGJlaGF2aW9yIHsgRm9yYmlkTGVhZGluZ0V4
cGFuc2lvbiB8IEZvcmJpZFRyYWlsaW5nRXhwYW5zaW9uIH07Ci0gICAgICAgIExheW91dFVuaXQg
ZXhwYW5zaW9uOwotICAgIH07Ci0gICAgRXhwYW5zaW9uT3Bwb3J0dW5pdHkmIGV4cGFuc2lvbk9w
cG9ydHVuaXR5KCkgeyByZXR1cm4gbV9leHBhbnNpb25PcHBvcnR1bml0eTsgfQotCi0gICAgc3Ry
dWN0IFRleHRDb250ZXh0IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFRleHRDb250ZXh0KEl0ZW1Q
b3NpdGlvbiwgdW5zaWduZWQgbGVuZ3RoKTsKLQotICAgICAgICB2b2lkIHNldFN0YXJ0KEl0ZW1Q
b3NpdGlvbiBzdGFydCkgeyBtX3N0YXJ0ID0gc3RhcnQ7IH0KLSAgICAgICAgdm9pZCBzZXRMZW5n
dGgodW5zaWduZWQgbGVuZ3RoKSB7IG1fbGVuZ3RoID0gbGVuZ3RoOyB9Ci0KLSAgICAgICAgSXRl
bVBvc2l0aW9uIHN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9zdGFydDsgfQotICAgICAgICB1bnNp
Z25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQotCi0gICAgcHJpdmF0ZToK
LSAgICAgICAgSXRlbVBvc2l0aW9uIG1fc3RhcnQ7Ci0gICAgICAgIHVuc2lnbmVkIG1fbGVuZ3Ro
OwotICAgIH07Ci0gICAgdm9pZCBzZXRUZXh0Q29udGV4dChUZXh0Q29udGV4dCB0ZXh0Q29udGV4
dCkgeyBtX3RleHRDb250ZXh0LmVtcGxhY2UodGV4dENvbnRleHQpOyB9Ci0gICAgT3B0aW9uYWw8
VGV4dENvbnRleHQ+JiB0ZXh0Q29udGV4dCgpIHsgcmV0dXJuIG1fdGV4dENvbnRleHQ7IH0KLSAg
ICBPcHRpb25hbDxUZXh0Q29udGV4dD4gdGV4dENvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX3Rl
eHRDb250ZXh0OyB9Ci0KLSAgICBjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtKCkgY29uc3Qg
eyByZXR1cm4gbV9pbmxpbmVJdGVtOyB9Ci0KLXByaXZhdGU6Ci0gICAgRGlzcGxheTo6Qm94OjpS
ZWN0IG1fbG9naWNhbFJlY3Q7Ci0gICAgRXhwYW5zaW9uT3Bwb3J0dW5pdHkgbV9leHBhbnNpb25P
cHBvcnR1bml0eTsKLQotICAgIGNvbnN0IElubGluZUl0ZW0mIG1faW5saW5lSXRlbTsKLSAgICBP
cHRpb25hbDxUZXh0Q29udGV4dD4gbV90ZXh0Q29udGV4dDsKLX07Ci0KLXVzaW5nIElubGluZVJ1
bnMgPSBWZWN0b3I8SW5saW5lUnVuPjsKLQotaW5saW5lIElubGluZVJ1bjo6SW5saW5lUnVuKERp
c3BsYXk6OkJveDo6UmVjdCBsb2dpY2FsUmVjdCwgY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRl
bSkKLSAgICA6IG1fbG9naWNhbFJlY3QobG9naWNhbFJlY3QpCi0gICAgLCBtX2lubGluZUl0ZW0o
aW5saW5lSXRlbSkKLXsKLX0KLQotaW5saW5lIElubGluZVJ1bjo6VGV4dENvbnRleHQ6OlRleHRD
b250ZXh0KEl0ZW1Qb3NpdGlvbiBzdGFydCwgdW5zaWduZWQgbGVuZ3RoKQotICAgIDogbV9zdGFy
dChzdGFydCkKLSAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKLXsKLX0KLQotaW5saW5lIGJvb2wgSW5s
aW5lUnVuOjpvdmVybGFwc011bHRpcGxlSW5saW5lSXRlbXMoKSBjb25zdAotewotICAgIC8vIE9u
bHkgdGV4dCBjb250ZW50IGNhbiBvdmVybGFwIG11bHRpcGxlIGlubGluZSBlbGVtZW50cy4KLSAg
ICBpZiAoIW1fdGV4dENvbnRleHQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8g
ZW5kUG9zaXRpb24gPSBtX3RleHRDb250ZXh0LT5zdGFydCgpICsgbV90ZXh0Q29udGV4dC0+bGVu
Z3RoKCk7Ci0gICAgcmV0dXJuIGVuZFBvc2l0aW9uID4gbV9pbmxpbmVJdGVtLnRleHRDb250ZW50
KCkubGVuZ3RoKCk7Ci19Ci0KLX0KLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lUnVuUHJvdmlkZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lUnVuUHJvdmlkZXIuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWIyMGYwYWZkNzEyYjUzNjIwMWQwNmY3Y2I0
Mzc1ZThiMWU0Y2Q5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZVJ1blByb3Zp
ZGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE5OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIklubGluZVJ1blByb3ZpZGVyLmgiCi0KLSNpZiBF
TkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKLQotI2luY2x1ZGUgIkJyZWFrTGluZXMu
aCIKLSNpbmNsdWRlICJMYXlvdXRJbmxpbmVCb3guaCIKLSNpbmNsdWRlIDx3dGYvSXNvTWFsbG9j
SW5saW5lcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1uYW1lc3BhY2UgTGF5b3V0IHsKLQot
V1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKElubGluZVJ1blByb3ZpZGVyKTsKLQotSW5saW5l
UnVuUHJvdmlkZXI6OklubGluZVJ1blByb3ZpZGVyKCkKLXsKLX0KLQotdm9pZCBJbmxpbmVSdW5Q
cm92aWRlcjo6YXBwZW5kKGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0pCi17Ci0gICAgc3dp
dGNoIChpbmxpbmVJdGVtLnR5cGUoKSkgewotICAgIGNhc2UgSW5saW5lSXRlbTo6VHlwZTo6VGV4
dDoKLSAgICAgICAgLy8gU3BlY2lhbCBjYXNlIHRleHQgY29udGVudC4gVGhleSBjYW4gb3Zlcmxh
cCBtdWx0aXBsZSBpdGVtcy4gPHNwYW4+Zm9vPC9zcGFuPjxzcGFuPmJhcjwvc3Bhbj4KLSAgICAg
ICAgcHJvY2Vzc0lubGluZVRleHRJdGVtKGlubGluZUl0ZW0pOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIElubGluZUl0ZW06OlR5cGU6OkhhcmRMaW5lQnJlYWs6Ci0gICAgICAgIG1faW5saW5l
UnVucy5hcHBlbmQoSW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6Y3JlYXRlSGFyZExpbmVCcmVha1J1
bihpbmxpbmVJdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW5saW5lSXRlbTo6VHlw
ZTo6SW5saW5lQm94OgotICAgICAgICBtX2lubGluZVJ1bnMuYXBwZW5kKElubGluZVJ1blByb3Zp
ZGVyOjpSdW46OmNyZWF0ZUJveFJ1bihpbmxpbmVJdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgSW5saW5lSXRlbTo6VHlwZTo6RmxvYXQ6Ci0gICAgICAgIG1faW5saW5lUnVucy5hcHBl
bmQoSW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6Y3JlYXRlRmxvYXRSdW4oaW5saW5lSXRlbSkpOwot
ICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX0lNUExFTUVO
VEVEX1lFVCgpOwotICAgIH0KLX0KLQotdm9pZCBJbmxpbmVSdW5Qcm92aWRlcjo6aW5zZXJ0QmVm
b3JlKGNvbnN0IEJveCYsIGNvbnN0IEJveCYpCi17Ci19Ci0KLXZvaWQgSW5saW5lUnVuUHJvdmlk
ZXI6OnJlbW92ZShjb25zdCBCb3gmKQotewotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNXaGl0
ZXNwYWNlKGNoYXIgY2hhcmFjdGVyLCBib29sIHByZXNlcnZlTmV3bGluZSkKLXsKLSAgICByZXR1
cm4gY2hhcmFjdGVyID09ICcgJyB8fCBjaGFyYWN0ZXIgPT0gJ1x0JyB8fCAoY2hhcmFjdGVyID09
ICdcbicgJiYgIXByZXNlcnZlTmV3bGluZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1Nv
ZnRMaW5lQnJlYWsoY2hhciBjaGFyYWN0ZXIsIGJvb2wgcHJlc2VydmVOZXdsaW5lKQotewotICAg
IHJldHVybiBwcmVzZXJ2ZU5ld2xpbmUgJiYgY2hhcmFjdGVyID09ICdcbic7Ci19Ci0KLWJvb2wg
SW5saW5lUnVuUHJvdmlkZXI6OmlzQ29udGlub3VzQ29udGVudChJbmxpbmVSdW5Qcm92aWRlcjo6
UnVuOjpUeXBlIG5ld1J1blR5cGUsIGNvbnN0IElubGluZUl0ZW0mIG5ld0lubGluZUl0ZW0pCi17
Ci0gICAgaWYgKG1faW5saW5lUnVucy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGF1dG8mIGxhc3RSdW4gPSBtX2lubGluZVJ1bnMubGFzdCgpOwotICAgIC8vIFNhbWUg
ZWxlbWVudCwgY2hlY2sgdHlwZSBvbmx5LgotICAgIGlmICgmbmV3SW5saW5lSXRlbSA9PSAmbGFz
dFJ1bi5pbmxpbmVJdGVtKCkpCi0gICAgICAgIHJldHVybiBuZXdSdW5UeXBlID09IGxhc3RSdW4u
dHlwZSgpOwotCi0gICAgLy8gVGhpcyBuZXcgcnVuIGlzIGZyb20gYSBkaWZmZXJlbnQgaW5saW5l
IGJveC4KLSAgICAvLyBGSVhNRTogY2hlY2sgc3R5bGUuCi0gICAgaWYgKG5ld1J1blR5cGUgPT0g
SW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6VHlwZTo6Tm9uV2hpdGVzcGFjZSAmJiBsYXN0UnVuLmlz
Tm9uV2hpdGVzcGFjZSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChuZXdSdW5U
eXBlID09IElubGluZVJ1blByb3ZpZGVyOjpSdW46OlR5cGU6OldoaXRlc3BhY2UgJiYgbGFzdFJ1
bi5pc1doaXRlc3BhY2UoKSkKLSAgICAgICAgcmV0dXJuIG5ld0lubGluZUl0ZW0uc3R5bGUoKS5j
b2xsYXBzZVdoaXRlU3BhY2UoKSA9PSBsYXN0UnVuLnN0eWxlKCkuY29sbGFwc2VXaGl0ZVNwYWNl
KCk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgSW5saW5lUnVuUHJvdmlkZXI6OnBy
b2Nlc3NJbmxpbmVUZXh0SXRlbShjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtKQotewotICAg
IC8vIFdlIG5lZWQgdG8gcmVzZXQgdGhlIHJ1biBpdGVyYXRvciB3aGVuIHRoZSB0ZXh0IGNvbnRl
bnQgaXMgbm90IGNvbnRpbnVvdXMuCi0gICAgLy8gPHNwYW4+Zm9vPC9zcGFuPjxpbWcgc3JjPSIi
PjxzcGFuPmJhcjwvc3Bhbj4gKEZJWE1FOiBmbG9hdHM/KQotICAgIGlmICghbV9pbmxpbmVSdW5z
LmlzRW1wdHkoKSAmJiAhbV9pbmxpbmVSdW5zLmxhc3QoKS5pc1RleHQoKSkgewotICAgICAgICBt
X2xpbmVCcmVha0l0ZXJhdG9yLnJlc2V0UHJpb3JDb250ZXh0KCk7Ci0gICAgICAgIG1fbGluZUJy
ZWFrSXRlcmF0b3IucmVzZXRTdHJpbmdBbmRSZWxlYXNlSXRlcmF0b3IoIiIsICIiLCBMaW5lQnJl
YWtJdGVyYXRvck1vZGU6OkRlZmF1bHQpOwotICAgIH0KLQotICAgIGF1dG8mIHN0eWxlID0gaW5s
aW5lSXRlbS5zdHlsZSgpOwotICAgIGF1dG8gdGV4dCA9IGlubGluZUl0ZW0udGV4dENvbnRlbnQo
KTsKLSAgICBJdGVtUG9zaXRpb24gY3VycmVudEl0ZW1Qb3NpdGlvbiA9IDA7Ci0gICAgd2hpbGUg
KGN1cnJlbnRJdGVtUG9zaXRpb24gPCB0ZXh0Lmxlbmd0aCgpKSB7Ci0KLSAgICAgICAgLy8gU29m
dCBsaW5lYnJlYWs/Ci0gICAgICAgIGlmIChpc1NvZnRMaW5lQnJlYWsodGV4dFtjdXJyZW50SXRl
bVBvc2l0aW9uXSwgc3R5bGUucHJlc2VydmVOZXdsaW5lKCkpKSB7Ci0gICAgICAgICAgICBtX2lu
bGluZVJ1bnMuYXBwZW5kKElubGluZVJ1blByb3ZpZGVyOjpSdW46OmNyZWF0ZVNvZnRMaW5lQnJl
YWtSdW4oaW5saW5lSXRlbSkpOwotICAgICAgICAgICAgKytjdXJyZW50SXRlbVBvc2l0aW9uOwot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBhdXRvIGlzV2hpdGVz
cGFjZVJ1biA9IGlzV2hpdGVzcGFjZSh0ZXh0W2N1cnJlbnRJdGVtUG9zaXRpb25dLCBzdHlsZS5w
cmVzZXJ2ZU5ld2xpbmUoKSk7Ci0gICAgICAgIGF1dG8gbGVuZ3RoID0gaXNXaGl0ZXNwYWNlUnVu
ID8gbW92ZVRvTmV4dE5vbldoaXRlc3BhY2VQb3NpdGlvbihpbmxpbmVJdGVtLCBjdXJyZW50SXRl
bVBvc2l0aW9uKSA6IG1vdmVUb05leHRCcmVha2FibGVQb3NpdGlvbihpbmxpbmVJdGVtLCBjdXJy
ZW50SXRlbVBvc2l0aW9uKTsKLQotICAgICAgICBpZiAoaXNDb250aW5vdXNDb250ZW50KGlzV2hp
dGVzcGFjZVJ1biA/IElubGluZVJ1blByb3ZpZGVyOjpSdW46OlR5cGU6OldoaXRlc3BhY2UgOiBJ
bmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpUeXBlOjpOb25XaGl0ZXNwYWNlLCBpbmxpbmVJdGVtKSkK
LSAgICAgICAgICAgIG1faW5saW5lUnVucy5sYXN0KCkudGV4dENvbnRleHQoKS0+ZXhwYW5kKGxl
bmd0aCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgbV9pbmxpbmVSdW5zLmFwcGVuZChp
c1doaXRlc3BhY2VSdW4gPyBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpjcmVhdGVXaGl0ZXNwYWNl
UnVuKGlubGluZUl0ZW0sIGN1cnJlbnRJdGVtUG9zaXRpb24sIGxlbmd0aCwgc3R5bGUuY29sbGFw
c2VXaGl0ZVNwYWNlKCkpCi0gICAgICAgICAgICAgICAgOiBJbmxpbmVSdW5Qcm92aWRlcjo6UnVu
OjpjcmVhdGVOb25XaGl0ZXNwYWNlUnVuKGlubGluZUl0ZW0sIGN1cnJlbnRJdGVtUG9zaXRpb24s
IGxlbmd0aCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgY3VycmVudEl0ZW1Qb3NpdGlvbiArPSBs
ZW5ndGg7Ci0gICAgfQotfQotCi11bnNpZ25lZCBJbmxpbmVSdW5Qcm92aWRlcjo6bW92ZVRvTmV4
dE5vbldoaXRlc3BhY2VQb3NpdGlvbihjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtLCBJdGVt
UG9zaXRpb24gY3VycmVudEl0ZW1Qb3NpdGlvbikKLXsKLSAgICBhdXRvIHRleHQgPSBpbmxpbmVJ
dGVtLnRleHRDb250ZW50KCk7Ci0gICAgYXV0byBwcmVzZXJ2ZU5ld2xpbmUgPSBpbmxpbmVJdGVt
LnN0eWxlKCkucHJlc2VydmVOZXdsaW5lKCk7Ci0gICAgYXV0byBuZXh0Tm9uV2hpdGVTcGFjZVBv
c2l0aW9uID0gY3VycmVudEl0ZW1Qb3NpdGlvbjsKLQotICAgIHdoaWxlIChuZXh0Tm9uV2hpdGVT
cGFjZVBvc2l0aW9uIDwgdGV4dC5sZW5ndGgoKSAmJiBpc1doaXRlc3BhY2UodGV4dFtuZXh0Tm9u
V2hpdGVTcGFjZVBvc2l0aW9uXSwgcHJlc2VydmVOZXdsaW5lKSkKLSAgICAgICAgKytuZXh0Tm9u
V2hpdGVTcGFjZVBvc2l0aW9uOwotICAgIHJldHVybiBuZXh0Tm9uV2hpdGVTcGFjZVBvc2l0aW9u
IC0gY3VycmVudEl0ZW1Qb3NpdGlvbjsKLX0KLQotdW5zaWduZWQgSW5saW5lUnVuUHJvdmlkZXI6
Om1vdmVUb05leHRCcmVha2FibGVQb3NpdGlvbihjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVt
LCBJdGVtUG9zaXRpb24gY3VycmVudEl0ZW1Qb3NpdGlvbikKLXsKLSAgICBhdXRvIGZpbmROZXh0
QnJlYWthYmxlUG9zaXRpb24gPSBbJl0oYXV0byBpbmxpbmVUZXh0LCBhdXRvJiBzdHlsZSwgSXRl
bVBvc2l0aW9uIHN0YXJ0UG9zaXRpb24pIHsKLSAgICAgICAgLy8gU3dhcCBpdGVyYXRvcidzIGNv
bnRlbnQgaWYgd2UgYWR2YW5jZWQgdG8gYSBuZXcgc3RyaW5nLgotICAgICAgICBhdXRvIGl0ZXJh
dG9yVGV4dCA9IG1fbGluZUJyZWFrSXRlcmF0b3Iuc3RyaW5nVmlldygpOwotCi0gICAgICAgIGlm
IChpdGVyYXRvclRleHQgIT0gaW5saW5lVGV4dCkgewotICAgICAgICAgICAgYXV0byB0ZXh0TGVu
Z3RoID0gaXRlcmF0b3JUZXh0Lmxlbmd0aCgpOwotICAgICAgICAgICAgYXV0byBsYXN0Q2hhcmFj
dGVyID0gdGV4dExlbmd0aCA+IDAgPyBpdGVyYXRvclRleHRbdGV4dExlbmd0aCAtIDFdIDogMDsK
LSAgICAgICAgICAgIGF1dG8gc2Vjb25kVG9MYXN0Q2hhcmFjdGVyID0gdGV4dExlbmd0aCA+IDEg
PyBpdGVyYXRvclRleHRbdGV4dExlbmd0aCAtIDJdIDogMDsKLSAgICAgICAgICAgIG1fbGluZUJy
ZWFrSXRlcmF0b3Iuc2V0UHJpb3JDb250ZXh0KGxhc3RDaGFyYWN0ZXIsIHNlY29uZFRvTGFzdENo
YXJhY3Rlcik7Ci0gICAgICAgICAgICBtX2xpbmVCcmVha0l0ZXJhdG9yLnJlc2V0U3RyaW5nQW5k
UmVsZWFzZUl0ZXJhdG9yKGlubGluZVRleHQsIHN0eWxlLmxvY2FsZSgpLCBMaW5lQnJlYWtJdGVy
YXRvck1vZGU6OkRlZmF1bHQpOwotICAgICAgICB9Ci0KLSAgICAgICAgYXV0byBrZWVwQWxsV29y
ZHNGb3JDSksgPSBzdHlsZS53b3JkQnJlYWsoKSA9PSBXb3JkQnJlYWs6OktlZXBBbGw7Ci0gICAg
ICAgIGF1dG8gYnJlYWtOQlNQID0gc3R5bGUuYXV0b1dyYXAoKSAmJiBzdHlsZS5uYnNwTW9kZSgp
ID09IE5CU1BNb2RlOjpTcGFjZTsKLQotICAgICAgICBpZiAoa2VlcEFsbFdvcmRzRm9yQ0pLKSB7
Ci0gICAgICAgICAgICBpZiAoYnJlYWtOQlNQKQotICAgICAgICAgICAgICAgIHJldHVybiBuZXh0
QnJlYWthYmxlUG9zaXRpb25LZWVwaW5nQWxsV29yZHMobV9saW5lQnJlYWtJdGVyYXRvciwgc3Rh
cnRQb3NpdGlvbik7Ci0gICAgICAgICAgICByZXR1cm4gbmV4dEJyZWFrYWJsZVBvc2l0aW9uS2Vl
cGluZ0FsbFdvcmRzSWdub3JpbmdOQlNQKG1fbGluZUJyZWFrSXRlcmF0b3IsIHN0YXJ0UG9zaXRp
b24pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1fbGluZUJyZWFrSXRlcmF0b3IubW9kZSgp
ID09IExpbmVCcmVha0l0ZXJhdG9yTW9kZTo6RGVmYXVsdCkgewotICAgICAgICAgICAgaWYgKGJy
ZWFrTkJTUCkKLSAgICAgICAgICAgICAgICByZXR1cm4gV2ViQ29yZTo6bmV4dEJyZWFrYWJsZVBv
c2l0aW9uKG1fbGluZUJyZWFrSXRlcmF0b3IsIHN0YXJ0UG9zaXRpb24pOwotICAgICAgICAgICAg
cmV0dXJuIG5leHRCcmVha2FibGVQb3NpdGlvbklnbm9yaW5nTkJTUChtX2xpbmVCcmVha0l0ZXJh
dG9yLCBzdGFydFBvc2l0aW9uKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChicmVha05CU1Ap
Ci0gICAgICAgICAgICByZXR1cm4gbmV4dEJyZWFrYWJsZVBvc2l0aW9uV2l0aG91dFNob3J0Y3V0
KG1fbGluZUJyZWFrSXRlcmF0b3IsIHN0YXJ0UG9zaXRpb24pOwotICAgICAgICByZXR1cm4gbmV4
dEJyZWFrYWJsZVBvc2l0aW9uSWdub3JpbmdOQlNQV2l0aG91dFNob3J0Y3V0KG1fbGluZUJyZWFr
SXRlcmF0b3IsIHN0YXJ0UG9zaXRpb24pOwotICAgIH07Ci0KLSAgICBhdXRvJiBzdHlsZSA9IGlu
bGluZUl0ZW0uc3R5bGUoKTsKLSAgICBhdXRvIHRleHRMZW5ndGggPSBpbmxpbmVJdGVtLnRleHRD
b250ZW50KCkubGVuZ3RoKCk7Ci0gICAgQVNTRVJUKHRleHRMZW5ndGgpOwotICAgIHdoaWxlIChj
dXJyZW50SXRlbVBvc2l0aW9uIDwgdGV4dExlbmd0aCAtIDEpIHsKLSAgICAgICAgYXV0byBuZXh0
QnJlYWthYmxlUG9zaXRpb24gPSBmaW5kTmV4dEJyZWFrYWJsZVBvc2l0aW9uKGlubGluZUl0ZW0u
dGV4dENvbnRlbnQoKSwgc3R5bGUsIGN1cnJlbnRJdGVtUG9zaXRpb24pOwotICAgICAgICBpZiAo
bmV4dEJyZWFrYWJsZVBvc2l0aW9uICE9IGN1cnJlbnRJdGVtUG9zaXRpb24pCi0gICAgICAgICAg
ICByZXR1cm4gbmV4dEJyZWFrYWJsZVBvc2l0aW9uIC0gY3VycmVudEl0ZW1Qb3NpdGlvbjsKLSAg
ICAgICAgKytjdXJyZW50SXRlbVBvc2l0aW9uOwotICAgIH0KLSAgICByZXR1cm4gdGV4dExlbmd0
aDsKLX0KLQotfQotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
aW5saW5lZm9ybWF0dGluZy9JbmxpbmVSdW5Qcm92aWRlci5oIGIvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lUnVuUHJvdmlkZXIuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZDc3YzE0OGVlZWUwY2FkYTI0NTY2MWVmZWI4ZmM1NjdkZWVkODYwOC4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVSdW5Qcm92aWRlci5oCisrKyAvZGV2
L251bGwKQEAgLTEsMTY5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lm
IEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQotCi0jaW5jbHVkZSAiSW5saW5lSXRl
bS5oIgotI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0
QnJlYWtJdGVyYXRvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1uYW1lc3BhY2UgTGF5b3V0
IHsKLQotdXNpbmcgSXRlbVBvc2l0aW9uID0gdW5zaWduZWQ7Ci0KLWNsYXNzIElubGluZVJ1blBy
b3ZpZGVyIHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKElubGluZVJ1blByb3ZpZGVyKTsK
LXB1YmxpYzoKLSAgICBJbmxpbmVSdW5Qcm92aWRlcigpOwotCi0gICAgdm9pZCBhcHBlbmQoY29u
c3QgSW5saW5lSXRlbSYpOwotICAgIHZvaWQgaW5zZXJ0QmVmb3JlKGNvbnN0IEJveCYsIGNvbnN0
IEJveCYgYmVmb3JlKTsKLSAgICB2b2lkIHJlbW92ZShjb25zdCBCb3gmKTsKLQotICAgIHN0cnVj
dCBSdW4gewotCi0gICAgICAgIHN0YXRpYyBSdW4gY3JlYXRlQm94UnVuKGNvbnN0IElubGluZUl0
ZW0mKTsKLSAgICAgICAgc3RhdGljIFJ1biBjcmVhdGVGbG9hdFJ1bihjb25zdCBJbmxpbmVJdGVt
Jik7Ci0gICAgICAgIHN0YXRpYyBSdW4gY3JlYXRlSGFyZExpbmVCcmVha1J1bihjb25zdCBJbmxp
bmVJdGVtJik7Ci0gICAgICAgIHN0YXRpYyBSdW4gY3JlYXRlU29mdExpbmVCcmVha1J1bihjb25z
dCBJbmxpbmVJdGVtJik7Ci0gICAgICAgIHN0YXRpYyBSdW4gY3JlYXRlV2hpdGVzcGFjZVJ1bihj
b25zdCBJbmxpbmVJdGVtJiwgSXRlbVBvc2l0aW9uIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIGJv
b2wgaXNDb2xsYXBzaWJsZSk7Ci0gICAgICAgIHN0YXRpYyBSdW4gY3JlYXRlTm9uV2hpdGVzcGFj
ZVJ1bihjb25zdCBJbmxpbmVJdGVtJiwgSXRlbVBvc2l0aW9uIHN0YXJ0LCB1bnNpZ25lZCBsZW5n
dGgpOwotCi0gICAgICAgIGVudW0gY2xhc3MgVHlwZSB7Ci0gICAgICAgICAgICBCb3gsCi0gICAg
ICAgICAgICBGbG9hdCwKLSAgICAgICAgICAgIFNvZnRMaW5lQnJlYWssCi0gICAgICAgICAgICBI
YXJkTGluZUJyZWFrLAotICAgICAgICAgICAgV2hpdGVzcGFjZSwKLSAgICAgICAgICAgIE5vbldo
aXRlc3BhY2UKLSAgICAgICAgfTsKLSAgICAgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4g
bV90eXBlOyB9Ci0gICAgICAgIGJvb2wgaXNUZXh0KCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09
IFJ1bjo6VHlwZTo6V2hpdGVzcGFjZSB8fCBtX3R5cGUgPT0gUnVuOjpUeXBlOjpOb25XaGl0ZXNw
YWNlIHx8IG1fdHlwZSA9PSBSdW46OlR5cGU6OlNvZnRMaW5lQnJlYWsgfHwgbV90eXBlID09IFJ1
bjo6VHlwZTo6SGFyZExpbmVCcmVhazsgfQotICAgICAgICBib29sIGlzV2hpdGVzcGFjZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBUeXBlOjpXaGl0ZXNwYWNlOyB9Ci0gICAgICAgIGJvb2wg
aXNOb25XaGl0ZXNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IFR5cGU6Ok5vbldoaXRl
c3BhY2U7IH0KLSAgICAgICAgYm9vbCBpc0xpbmVCcmVhaygpIGNvbnN0IHsgcmV0dXJuIG1fdHlw
ZSA9PSBSdW46OlR5cGU6OlNvZnRMaW5lQnJlYWsgfHwgbV90eXBlID09IFJ1bjo6VHlwZTo6SGFy
ZExpbmVCcmVhazsgfQotICAgICAgICBib29sIGlzQm94KCkgY29uc3QgeyByZXR1cm4gbV90eXBl
ID09IFR5cGU6OkJveDsgfQotICAgICAgICBib29sIGlzRmxvYXQoKSBjb25zdCB7IHJldHVybiBt
X3R5cGUgPT0gVHlwZTo6RmxvYXQ7IH0KLQotICAgICAgICBzdHJ1Y3QgVGV4dENvbnRleHQgewot
Ci0gICAgICAgICAgICBlbnVtIGNsYXNzIElzQ29sbGFwc2VkIHsgTm8sIFllcyB9OwotICAgICAg
ICAgICAgVGV4dENvbnRleHQoSXRlbVBvc2l0aW9uLCB1bnNpZ25lZCBsZW5ndGgsIElzQ29sbGFw
c2VkKTsKLQotICAgICAgICAgICAgSXRlbVBvc2l0aW9uIHN0YXJ0KCkgY29uc3QgeyByZXR1cm4g
bV9zdGFydDsgfQotICAgICAgICAgICAgLy8gTm90ZSB0aGF0ICdlbmQnIHBvc2l0aW9uIGRvZXMg
bm90IGVxdWFsIHRvIHN0YXJ0ICsgbGVuZ3RoIHdoZW4gcnVuIG92ZXJsYXBzIG11bHRpcGxlIElu
bGluZUl0ZW1zLgotICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4g
bV9sZW5ndGg7IH0KLSAgICAgICAgICAgIGJvb2wgaXNDb2xsYXBzZWQoKSBjb25zdCB7IHJldHVy
biBtX2lzQ29sbGFwc2VkID09IElzQ29sbGFwc2VkOjpZZXM7IH0KLQotICAgICAgICBwcml2YXRl
OgotICAgICAgICAgICAgZnJpZW5kIGNsYXNzIElubGluZVJ1blByb3ZpZGVyOwotCi0gICAgICAg
ICAgICB2b2lkIGV4cGFuZCh1bnNpZ25lZCBsZW5ndGgpIHsgbV9sZW5ndGggKz0gbGVuZ3RoOyB9
Ci0KLSAgICAgICAgICAgIEl0ZW1Qb3NpdGlvbiBtX3N0YXJ0IHsgMCB9OwotICAgICAgICAgICAg
dW5zaWduZWQgbV9sZW5ndGggeyAwIH07Ci0gICAgICAgICAgICBJc0NvbGxhcHNlZCBtX2lzQ29s
bGFwc2VkIHsgSXNDb2xsYXBzZWQ6Ok5vIH07Ci0gICAgICAgIH07Ci0gICAgICAgIE9wdGlvbmFs
PFRleHRDb250ZXh0PiB0ZXh0Q29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dENvbnRleHQ7
IH0KLSAgICAgICAgLy8gTm90ZSB0aGF0IHN0eWxlKCkgYW5kIGlubGluZUl0ZW0oKSBhbHdheXMg
cmV0dXJucyB0aGUgZmlyc3QgSW5saW5lSXRlbSBmb3IgYSBydW4uCi0gICAgICAgIGNvbnN0IFJl
bmRlclN0eWxlJiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5saW5lSXRlbS5zdHlsZSgpOyB9
Ci0gICAgICAgIGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0oKSBjb25zdCB7IHJldHVybiBt
X2lubGluZUl0ZW07IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBJbmxp
bmVSdW5Qcm92aWRlcjsKLQotICAgICAgICBSdW4oY29uc3QgSW5saW5lSXRlbSYsIFR5cGUsIE9w
dGlvbmFsPFRleHRDb250ZXh0Pik7Ci0gICAgICAgIE9wdGlvbmFsPFRleHRDb250ZXh0PiYgdGV4
dENvbnRleHQoKSB7IHJldHVybiBtX3RleHRDb250ZXh0OyB9Ci0KLSAgICAgICAgY29uc3QgVHlw
ZSBtX3R5cGU7Ci0gICAgICAgIGNvbnN0IElubGluZUl0ZW0mIG1faW5saW5lSXRlbTsKLSAgICAg
ICAgT3B0aW9uYWw8VGV4dENvbnRleHQ+IG1fdGV4dENvbnRleHQ7Ci0gICAgfTsKLSAgICBjb25z
dCBWZWN0b3I8SW5saW5lUnVuUHJvdmlkZXI6OlJ1bj4mIHJ1bnMoKSBjb25zdCB7IHJldHVybiBt
X2lubGluZVJ1bnM7IH0KLQotcHJpdmF0ZToKLSAgICB2b2lkIGNvbW1pdFRleHRSdW4oKTsKLSAg
ICB2b2lkIHByb2Nlc3NJbmxpbmVUZXh0SXRlbShjb25zdCBJbmxpbmVJdGVtJik7Ci0gICAgdW5z
aWduZWQgbW92ZVRvTmV4dE5vbldoaXRlc3BhY2VQb3NpdGlvbihjb25zdCBJbmxpbmVJdGVtJiwg
SXRlbVBvc2l0aW9uIGN1cnJlbnRQb3NpdGlvbik7Ci0gICAgdW5zaWduZWQgbW92ZVRvTmV4dEJy
ZWFrYWJsZVBvc2l0aW9uKGNvbnN0IElubGluZUl0ZW0mLCBJdGVtUG9zaXRpb24gY3VycmVudFBv
c2l0aW9uKTsKLSAgICBib29sIGlzQ29udGlub3VzQ29udGVudChSdW46OlR5cGUgbmV3UnVuVHlw
ZSwgY29uc3QgSW5saW5lSXRlbSYgbmV3SW5saW5lSXRlbSk7Ci0KLSAgICBMYXp5TGluZUJyZWFr
SXRlcmF0b3IgbV9saW5lQnJlYWtJdGVyYXRvcjsKLQotICAgIFZlY3RvcjxJbmxpbmVSdW5Qcm92
aWRlcjo6UnVuPiBtX2lubGluZVJ1bnM7Ci19OwotCi1pbmxpbmUgSW5saW5lUnVuUHJvdmlkZXI6
OlJ1biBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpjcmVhdGVCb3hSdW4oY29uc3QgSW5saW5lSXRl
bSYgaW5saW5lSXRlbSkKLXsKLSAgICByZXR1cm4geyBpbmxpbmVJdGVtLCBUeXBlOjpCb3gsIFdU
Rjo6bnVsbG9wdCB9OwotfQotCi1pbmxpbmUgSW5saW5lUnVuUHJvdmlkZXI6OlJ1biBJbmxpbmVS
dW5Qcm92aWRlcjo6UnVuOjpjcmVhdGVGbG9hdFJ1bihjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJ
dGVtKQotewotICAgIHJldHVybiB7IGlubGluZUl0ZW0sIFR5cGU6OkZsb2F0LCBXVEY6Om51bGxv
cHQgfTsKLX0KLQotaW5saW5lIElubGluZVJ1blByb3ZpZGVyOjpSdW4gSW5saW5lUnVuUHJvdmlk
ZXI6OlJ1bjo6Y3JlYXRlU29mdExpbmVCcmVha1J1bihjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJ
dGVtKQotewotICAgIHJldHVybiB7IGlubGluZUl0ZW0sIFR5cGU6OlNvZnRMaW5lQnJlYWssIFdU
Rjo6bnVsbG9wdCB9OwotfQotCi1pbmxpbmUgSW5saW5lUnVuUHJvdmlkZXI6OlJ1biBJbmxpbmVS
dW5Qcm92aWRlcjo6UnVuOjpjcmVhdGVIYXJkTGluZUJyZWFrUnVuKGNvbnN0IElubGluZUl0ZW0m
IGlubGluZUl0ZW0pCi17Ci0gICAgcmV0dXJuIHsgaW5saW5lSXRlbSwgVHlwZTo6SGFyZExpbmVC
cmVhaywgV1RGOjpudWxsb3B0IH07Ci19Ci0KLWlubGluZSBJbmxpbmVSdW5Qcm92aWRlcjo6UnVu
IElubGluZVJ1blByb3ZpZGVyOjpSdW46OmNyZWF0ZVdoaXRlc3BhY2VSdW4oY29uc3QgSW5saW5l
SXRlbSYgaW5saW5lSXRlbSwgSXRlbVBvc2l0aW9uIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIGJv
b2wgaXNDb2xsYXBzaWJsZSkKLXsKLSAgICBBU1NFUlQobGVuZ3RoKTsKLSAgICBhdXRvIGlzQ29s
bGFwc2VkID0gaXNDb2xsYXBzaWJsZSAmJiBsZW5ndGggPiAxID8gVGV4dENvbnRleHQ6OklzQ29s
bGFwc2VkOjpZZXMgOiBUZXh0Q29udGV4dDo6SXNDb2xsYXBzZWQ6Ok5vOwotICAgIHJldHVybiB7
IGlubGluZUl0ZW0sIFR5cGU6OldoaXRlc3BhY2UsIFRleHRDb250ZXh0KHN0YXJ0LCBsZW5ndGgs
IGlzQ29sbGFwc2VkKSB9OwotfQotCi1pbmxpbmUgSW5saW5lUnVuUHJvdmlkZXI6OlJ1biBJbmxp
bmVSdW5Qcm92aWRlcjo6UnVuOjpjcmVhdGVOb25XaGl0ZXNwYWNlUnVuKGNvbnN0IElubGluZUl0
ZW0mIGlubGluZUl0ZW0sIEl0ZW1Qb3NpdGlvbiBzdGFydCwgdW5zaWduZWQgbGVuZ3RoKQotewot
ICAgIHJldHVybiB7IGlubGluZUl0ZW0sIFR5cGU6Ok5vbldoaXRlc3BhY2UsIFRleHRDb250ZXh0
KHN0YXJ0LCBsZW5ndGgsIFRleHRDb250ZXh0OjpJc0NvbGxhcHNlZDo6Tm8pIH07Ci19Ci0KLWlu
bGluZSBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpSdW4oY29uc3QgSW5saW5lSXRlbSYgaW5saW5l
SXRlbSwgVHlwZSB0eXBlLCBPcHRpb25hbDxUZXh0Q29udGV4dD4gdGV4dENvbnRleHQpCi0gICAg
OiBtX3R5cGUodHlwZSkKLSAgICAsIG1faW5saW5lSXRlbShpbmxpbmVJdGVtKQotICAgICwgbV90
ZXh0Q29udGV4dCh0ZXh0Q29udGV4dCkKLXsKLX0KLQotaW5saW5lIElubGluZVJ1blByb3ZpZGVy
OjpSdW46OlRleHRDb250ZXh0OjpUZXh0Q29udGV4dChJdGVtUG9zaXRpb24gc3RhcnQsIHVuc2ln
bmVkIGxlbmd0aCwgSXNDb2xsYXBzZWQgaXNDb2xsYXBzZWQpCi0gICAgOiBtX3N0YXJ0KHN0YXJ0
KQotICAgICwgbV9sZW5ndGgobGVuZ3RoKQotICAgICwgbV9pc0NvbGxhcHNlZChpc0NvbGxhcHNl
ZCkKLXsKLX0KLQotfQotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVUZXh0SXRlbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVUZXh0SXRlbS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2Y1
NDI0NjRmZGJiZjQ2ZjQxOGIwMTFjYTA0ODNhNWU3YjkyZDE4YwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZVRleHRJdGVtLmNw
cApAQCAtMCwwICsxLDEzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJJbmxpbmVUZXh0SXRlbS5oIgorCisjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5H
X0NPTlRFWFQpCisKKyNpbmNsdWRlICJCcmVha0xpbmVzLmgiCisjaW5jbHVkZSAiTGF5b3V0SW5s
aW5lQm94LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBMYXlvdXQgeworCitz
dGF0aWMgaW5saW5lIGJvb2wgaXNXaGl0ZXNwYWNlQ2hhcmFjdGVyKGNoYXIgY2hhcmFjdGVyLCBi
b29sIHByZXNlcnZlTmV3bGluZSkKK3sKKyAgICByZXR1cm4gY2hhcmFjdGVyID09ICcgJyB8fCBj
aGFyYWN0ZXIgPT0gJ1x0JyB8fCAoY2hhcmFjdGVyID09ICdcbicgJiYgIXByZXNlcnZlTmV3bGlu
ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc1NvZnRMaW5lQnJlYWsoY2hhciBjaGFyYWN0
ZXIsIGJvb2wgcHJlc2VydmVOZXdsaW5lKQoreworICAgIHJldHVybiBwcmVzZXJ2ZU5ld2xpbmUg
JiYgY2hhcmFjdGVyID09ICdcbic7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBtb3ZlVG9OZXh0Tm9u
V2hpdGVzcGFjZVBvc2l0aW9uKFN0cmluZyB0ZXh0Q29udGVudCwgdW5zaWduZWQgc3RhcnRQb3Np
dGlvbiwgYm9vbCBwcmVzZXJ2ZU5ld2xpbmUpCit7CisgICAgYXV0byBuZXh0Tm9uV2hpdGVTcGFj
ZVBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbjsKKyAgICB3aGlsZSAobmV4dE5vbldoaXRlU3BhY2VQ
b3NpdGlvbiA8IHRleHRDb250ZW50Lmxlbmd0aCgpICYmIGlzV2hpdGVzcGFjZUNoYXJhY3Rlcih0
ZXh0Q29udGVudFtuZXh0Tm9uV2hpdGVTcGFjZVBvc2l0aW9uXSwgcHJlc2VydmVOZXdsaW5lKSkK
KyAgICAgICAgKytuZXh0Tm9uV2hpdGVTcGFjZVBvc2l0aW9uOworICAgIHJldHVybiBuZXh0Tm9u
V2hpdGVTcGFjZVBvc2l0aW9uIC0gc3RhcnRQb3NpdGlvbjsKK30KKworc3RhdGljIHVuc2lnbmVk
IG1vdmVUb05leHRCcmVha2FibGVQb3NpdGlvbih1bnNpZ25lZCBzdGFydFBvc2l0aW9uLCBMYXp5
TGluZUJyZWFrSXRlcmF0b3IgbGluZUJyZWFrSXRlcmF0b3IsIGNvbnN0IFJlbmRlclN0eWxlJiBz
dHlsZSkKK3sKKyAgICBhdXRvIGZpbmROZXh0QnJlYWthYmxlUG9zaXRpb24gPSBbJl0oYXV0byBz
dGFydFBvc2l0aW9uKSB7CisgICAgICAgIGF1dG8ga2VlcEFsbFdvcmRzRm9yQ0pLID0gc3R5bGUu
d29yZEJyZWFrKCkgPT0gV29yZEJyZWFrOjpLZWVwQWxsOworICAgICAgICBhdXRvIGJyZWFrTkJT
UCA9IHN0eWxlLmF1dG9XcmFwKCkgJiYgc3R5bGUubmJzcE1vZGUoKSA9PSBOQlNQTW9kZTo6U3Bh
Y2U7CisKKyAgICAgICAgaWYgKGtlZXBBbGxXb3Jkc0ZvckNKSykgeworICAgICAgICAgICAgaWYg
KGJyZWFrTkJTUCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV4dEJyZWFrYWJsZVBvc2l0aW9u
S2VlcGluZ0FsbFdvcmRzKGxpbmVCcmVha0l0ZXJhdG9yLCBzdGFydFBvc2l0aW9uKTsKKyAgICAg
ICAgICAgIHJldHVybiBuZXh0QnJlYWthYmxlUG9zaXRpb25LZWVwaW5nQWxsV29yZHNJZ25vcmlu
Z05CU1AobGluZUJyZWFrSXRlcmF0b3IsIHN0YXJ0UG9zaXRpb24pOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKGxpbmVCcmVha0l0ZXJhdG9yLm1vZGUoKSA9PSBMaW5lQnJlYWtJdGVyYXRvck1v
ZGU6OkRlZmF1bHQpIHsKKyAgICAgICAgICAgIGlmIChicmVha05CU1ApCisgICAgICAgICAgICAg
ICAgcmV0dXJuIFdlYkNvcmU6Om5leHRCcmVha2FibGVQb3NpdGlvbihsaW5lQnJlYWtJdGVyYXRv
ciwgc3RhcnRQb3NpdGlvbik7CisgICAgICAgICAgICByZXR1cm4gbmV4dEJyZWFrYWJsZVBvc2l0
aW9uSWdub3JpbmdOQlNQKGxpbmVCcmVha0l0ZXJhdG9yLCBzdGFydFBvc2l0aW9uKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChicmVha05CU1ApCisgICAgICAgICAgICByZXR1cm4gbmV4dEJy
ZWFrYWJsZVBvc2l0aW9uV2l0aG91dFNob3J0Y3V0KGxpbmVCcmVha0l0ZXJhdG9yLCBzdGFydFBv
c2l0aW9uKTsKKyAgICAgICAgcmV0dXJuIG5leHRCcmVha2FibGVQb3NpdGlvbklnbm9yaW5nTkJT
UFdpdGhvdXRTaG9ydGN1dChsaW5lQnJlYWtJdGVyYXRvciwgc3RhcnRQb3NpdGlvbik7CisgICAg
fTsKKworICAgIGF1dG8gdGV4dExlbmd0aCA9IGxpbmVCcmVha0l0ZXJhdG9yLnN0cmluZ1ZpZXco
KS5sZW5ndGgoKTsKKyAgICBhdXRvIGN1cnJlbnRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb247Cisg
ICAgd2hpbGUgKGN1cnJlbnRQb3NpdGlvbiA8IHRleHRMZW5ndGggLSAxKSB7CisgICAgICAgIGF1
dG8gbmV4dEJyZWFrYWJsZVBvc2l0aW9uID0gZmluZE5leHRCcmVha2FibGVQb3NpdGlvbihjdXJy
ZW50UG9zaXRpb24pOworICAgICAgICBpZiAobmV4dEJyZWFrYWJsZVBvc2l0aW9uICE9IGN1cnJl
bnRQb3NpdGlvbikKKyAgICAgICAgICAgIHJldHVybiBuZXh0QnJlYWthYmxlUG9zaXRpb24gLSBj
dXJyZW50UG9zaXRpb247CisgICAgICAgICsrY3VycmVudFBvc2l0aW9uOworICAgIH0KKyAgICBy
ZXR1cm4gdGV4dExlbmd0aCAtIHN0YXJ0UG9zaXRpb247Cit9CisKK3ZvaWQgSW5saW5lVGV4dEl0
ZW06OmNyZWF0ZUFuZEFwcGVuZFRleHRJdGVtcyhJbmxpbmVJdGVtcyYgaW5saW5lQ29udGVudCwg
Y29uc3QgSW5saW5lQm94JiBpbmxpbmVCb3gpCit7CisgICAgYXV0byYgc3R5bGUgPSBpbmxpbmVC
b3guc3R5bGUoKTsKKyAgICBhdXRvIHByZXNlcnZlTmV3bGluZSA9IHN0eWxlLnByZXNlcnZlTmV3
bGluZSgpOworICAgIGF1dG8gY29sbGFwc2VXaGl0ZVNwYWNlID0gc3R5bGUuY29sbGFwc2VXaGl0
ZVNwYWNlKCk7CisgICAgYXV0byB0ZXh0ID0gaW5saW5lQm94LnRleHRDb250ZW50KCk7CisgICAg
TGF6eUxpbmVCcmVha0l0ZXJhdG9yIGxpbmVCcmVha0l0ZXJhdG9yKHRleHQpOworCisgICAgdW5z
aWduZWQgY3VycmVudFBvc2l0aW9uID0gMDsKKyAgICB3aGlsZSAoY3VycmVudFBvc2l0aW9uIDwg
dGV4dC5sZW5ndGgoKSkgeworICAgICAgICAvLyBTb2Z0IGxpbmVicmVhaz8KKyAgICAgICAgaWYg
KGlzU29mdExpbmVCcmVhayh0ZXh0W2N1cnJlbnRQb3NpdGlvbl0sIHByZXNlcnZlTmV3bGluZSkp
IHsKKyAgICAgICAgICAgIGlubGluZUNvbnRlbnQuYWRkKHN0ZDo6bWFrZV91bmlxdWU8SW5saW5l
VGV4dEl0ZW0+KGlubGluZUJveCwgY3VycmVudFBvc2l0aW9uLCAxLCB0cnVlLCBmYWxzZSkpOwor
ICAgICAgICAgICAgKytjdXJyZW50UG9zaXRpb247CisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoaXNXaGl0ZXNwYWNlQ2hhcmFjdGVyKHRleHRbY3VycmVudFBv
c2l0aW9uXSwgcHJlc2VydmVOZXdsaW5lKSkgeworICAgICAgICAgICAgYXV0byBsZW5ndGggPSBt
b3ZlVG9OZXh0Tm9uV2hpdGVzcGFjZVBvc2l0aW9uKHRleHQsIGN1cnJlbnRQb3NpdGlvbiwgcHJl
c2VydmVOZXdsaW5lKTsKKyAgICAgICAgICAgIGF1dG8gaXNDb2xsYXBzZWQgPSBjb2xsYXBzZVdo
aXRlU3BhY2UgJiYgbGVuZ3RoID4gMTsKKyAgICAgICAgICAgIGlubGluZUNvbnRlbnQuYWRkKHN0
ZDo6bWFrZV91bmlxdWU8SW5saW5lVGV4dEl0ZW0+KGlubGluZUJveCwgY3VycmVudFBvc2l0aW9u
LCBsZW5ndGgsIHRydWUsIGlzQ29sbGFwc2VkKSk7CisgICAgICAgICAgICBjdXJyZW50UG9zaXRp
b24gKz0gbGVuZ3RoOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAg
ICBhdXRvIGxlbmd0aCA9IG1vdmVUb05leHRCcmVha2FibGVQb3NpdGlvbihjdXJyZW50UG9zaXRp
b24sIGxpbmVCcmVha0l0ZXJhdG9yLCBzdHlsZSk7CisgICAgICAgIGlubGluZUNvbnRlbnQuYWRk
KHN0ZDo6bWFrZV91bmlxdWU8SW5saW5lVGV4dEl0ZW0+KGlubGluZUJveCwgY3VycmVudFBvc2l0
aW9uLCBsZW5ndGgsIGZhbHNlLCBmYWxzZSkpOworICAgICAgICBjdXJyZW50UG9zaXRpb24gKz0g
bGVuZ3RoOworICAgIH0KK30KKworSW5saW5lVGV4dEl0ZW06OklubGluZVRleHRJdGVtKGNvbnN0
IElubGluZUJveCYgaW5saW5lQm94LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoLCBi
b29sIGlzV2hpdGVzcGFjZSwgYm9vbCBpc0NvbGxhcHNlZCkKKyAgICA6IElubGluZUl0ZW0oaW5s
aW5lQm94LCBUeXBlOjpUZXh0KQorICAgICwgbV9zdGFydChzdGFydCkKKyAgICAsIG1fbGVuZ3Ro
KGxlbmd0aCkKKyAgICAsIG1faXNXaGl0ZXNwYWNlKGlzV2hpdGVzcGFjZSkKKyAgICAsIG1faXND
b2xsYXBzZWQoaXNDb2xsYXBzZWQpCit7Cit9CisKK30KK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lVGV4dEl0ZW0uaCBi
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZVRleHRJdGVtLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMjg3NGYyOGEzMWRjZDAwYWJlZGU4ODk3NTc0NTEzY2JlMjllMTZkZQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lu
bGluZVRleHRJdGVtLmgKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRlICJJ
bmxpbmVJdGVtLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBMYXlvdXQgewor
CitjbGFzcyBJbmxpbmVUZXh0SXRlbSA6IHB1YmxpYyBJbmxpbmVJdGVtIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgdm9pZCBjcmVhdGVBbmRBcHBlbmRUZXh0SXRlbXMoSW5saW5lSXRlbXMmLCBjb25z
dCBJbmxpbmVCb3gmKTsKKworICAgIElubGluZVRleHRJdGVtKGNvbnN0IElubGluZUJveCYsIHVu
c2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIGJvb2wgaXNXaGl0ZXNwYWNlLCBib29sIGlz
Q29sbGFwc2VkKTsKKworICAgIHVuc2lnbmVkIHN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9zdGFy
dDsgfQorICAgIHVuc2lnbmVkIGVuZCgpIGNvbnN0IHsgcmV0dXJuIHN0YXJ0KCkgKyBsZW5ndGgo
KTsgfQorICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CisK
KyAgICBib29sIGlzV2hpdGVzcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNXaGl0ZXNwYWNlOyB9
CisgICAgYm9vbCBpc0NvbGxhcHNlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNDb2xsYXBzZWQ7IH0K
KworcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBtX3N0YXJ0IHsgMCB9OworICAgIHVuc2lnbmVkIG1f
bGVuZ3RoIHsgMCB9OworICAgIGJvb2wgbV9pc1doaXRlc3BhY2UgeyBmYWxzZSB9OworICAgIGJv
b2wgbV9pc0NvbGxhcHNlZCB7IGZhbHNlIH07Cit9OworCit9Cit9CisKK1NQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfSU5MSU5FX0lURU0oSW5saW5lVGV4dEl0ZW0sIGlzVGV4dCgpKQorCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL3RleHQv
VGV4dFV0aWwuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvdGV4
dC9UZXh0VXRpbC5jcHAKaW5kZXggMzc1ZWQ3MjNjZDJiMjk4NGRmNzNlMGU3MzIxMWJhMDI4NDE4
ZmUwOC4uYzEzOWVhYmE3NTc2OTZkM2M4NzZmNDQ0ZGNjOTdmZWM3YzNhNjNlYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvdGV4dC9UZXh0VXRpbC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvdGV4dC9UZXh0
VXRpbC5jcHAKQEAgLTM0LDE5ICszNCwxOSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNw
YWNlIExheW91dCB7CiAKLU9wdGlvbmFsPEl0ZW1Qb3NpdGlvbj4gVGV4dFV0aWw6Omh5cGhlblBv
c2l0aW9uQmVmb3JlKGNvbnN0IElubGluZUl0ZW0mLCBJdGVtUG9zaXRpb24sIHVuc2lnbmVkKQor
T3B0aW9uYWw8dW5zaWduZWQ+IFRleHRVdGlsOjpoeXBoZW5Qb3NpdGlvbkJlZm9yZShjb25zdCBJ
bmxpbmVJdGVtJiwgdW5zaWduZWQsIHVuc2lnbmVkKQogewogICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiB9CiAKLUxheW91dFVuaXQgVGV4dFV0aWw6OndpZHRoKGNvbnN0IElubGluZUl0ZW0mIGlu
bGluZVRleHRJdGVtLCBJdGVtUG9zaXRpb24gZnJvbSwgSXRlbVBvc2l0aW9uIHRvLCBMYXlvdXRV
bml0IGNvbnRlbnRMb2dpY2FsTGVmdCkKK0xheW91dFVuaXQgVGV4dFV0aWw6OndpZHRoKGNvbnN0
IElubGluZUJveCYgaW5saW5lQm94LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bywgTGF5b3V0
VW5pdCBjb250ZW50TG9naWNhbExlZnQpCiB7Ci0gICAgYXV0byYgc3R5bGUgPSBpbmxpbmVUZXh0
SXRlbS5zdHlsZSgpOworICAgIGF1dG8mIHN0eWxlID0gaW5saW5lQm94LnN0eWxlKCk7CiAgICAg
YXV0byYgZm9udCA9IHN0eWxlLmZvbnRDYXNjYWRlKCk7CiAgICAgaWYgKCFmb250LnNpemUoKSB8
fCBmcm9tID09IHRvKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIGF1dG8gdGV4dCA9IGlubGlu
ZVRleHRJdGVtLnRleHRDb250ZW50KCk7CisgICAgYXV0byB0ZXh0ID0gaW5saW5lQm94LnRleHRD
b250ZW50KCk7CiAgICAgQVNTRVJUKHRvIDw9IHRleHQubGVuZ3RoKCkpOwogCiAgICAgaWYgKGZv
bnQuaXNGaXhlZFBpdGNoKCkpCkBAIC03MCw3ICs3MCw3IEBAIExheW91dFVuaXQgVGV4dFV0aWw6
OndpZHRoKGNvbnN0IElubGluZUl0ZW0mIGlubGluZVRleHRJdGVtLCBJdGVtUG9zaXRpb24gZnJv
bSwKICAgICByZXR1cm4gc3RkOjptYXg8TGF5b3V0VW5pdD4oMCwgd2lkdGgpOwogfQogCi1MYXlv
dXRVbml0IFRleHRVdGlsOjpmaXhlZFBpdGNoV2lkdGgoU3RyaW5nIHRleHQsIGNvbnN0IFJlbmRl
clN0eWxlJiBzdHlsZSwgSXRlbVBvc2l0aW9uIGZyb20sIEl0ZW1Qb3NpdGlvbiB0bywgTGF5b3V0
VW5pdCBjb250ZW50TG9naWNhbExlZnQpCitMYXlvdXRVbml0IFRleHRVdGlsOjpmaXhlZFBpdGNo
V2lkdGgoU3RyaW5nIHRleHQsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgdW5zaWduZWQgZnJv
bSwgdW5zaWduZWQgdG8sIExheW91dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0KQogewogICAgIGF1
dG8mIGZvbnQgPSBzdHlsZS5mb250Q2FzY2FkZSgpOwogICAgIGF1dG8gbW9ub3NwYWNlQ2hhcmFj
dGVyV2lkdGggPSBmb250LnNwYWNlV2lkdGgoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL3RleHQvVGV4dFV0aWwuaCBiL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL3RleHQvVGV4dFV0aWwuaAppbmRleCA4MzZhOWVjNDBk
M2E3MmViOTI2NzRhNTNiMzcyZTUwZDJmM2RhY2I3Li5kMGZlYTZhZDFkZGQ3MjlkNzRmOWJkZmIx
YmM5ZDIxYzk4N2QyZTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5l
Zm9ybWF0dGluZy90ZXh0L1RleHRVdGlsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lu
bGluZWZvcm1hdHRpbmcvdGV4dC9UZXh0VXRpbC5oCkBAIC0yOCwxOCArMjgsMTcgQEAKICNpZiBF
TkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKIAogI2luY2x1ZGUgIklubGluZUl0ZW0u
aCIKLSNpbmNsdWRlICJJbmxpbmVSdW5Qcm92aWRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiBuYW1lc3BhY2UgTGF5b3V0IHsKIAogY2xhc3MgVGV4dFV0aWwgewogcHVibGljOgotICAgIHN0
YXRpYyBMYXlvdXRVbml0IHdpZHRoKGNvbnN0IElubGluZUl0ZW0mLCBJdGVtUG9zaXRpb24gZnJv
bSwgSXRlbVBvc2l0aW9uIHRvLCBMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsTGVmdCk7Ci0gICAg
c3RhdGljIE9wdGlvbmFsPEl0ZW1Qb3NpdGlvbj4gaHlwaGVuUG9zaXRpb25CZWZvcmUoY29uc3Qg
SW5saW5lSXRlbSYsIEl0ZW1Qb3NpdGlvbiBmcm9tLCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHN0
YXRpYyBMYXlvdXRVbml0IHdpZHRoKGNvbnN0IElubGluZUJveCYsIHVuc2lnbmVkIGZyb20sIHVu
c2lnbmVkIHRvLCBMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsTGVmdCk7CisgICAgc3RhdGljIE9w
dGlvbmFsPHVuc2lnbmVkPiBoeXBoZW5Qb3NpdGlvbkJlZm9yZShjb25zdCBJbmxpbmVJdGVtJiwg
dW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuZ3RoKTsKIAogcHJpdmF0ZToKLSAgICBzdGF0aWMg
TGF5b3V0VW5pdCBmaXhlZFBpdGNoV2lkdGgoU3RyaW5nLCBjb25zdCBSZW5kZXJTdHlsZSYsIEl0
ZW1Qb3NpdGlvbiBmcm9tLCBJdGVtUG9zaXRpb24gdG8sIExheW91dFVuaXQgY29udGVudExvZ2lj
YWxMZWZ0KTsKKyAgICBzdGF0aWMgTGF5b3V0VW5pdCBmaXhlZFBpdGNoV2lkdGgoU3RyaW5nLCBj
b25zdCBSZW5kZXJTdHlsZSYsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvLCBMYXlvdXRVbml0
IGNvbnRlbnRMb2dpY2FsTGVmdCk7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRCb3guaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9s
YXlvdXR0cmVlL0xheW91dEJveC5oCmluZGV4IDYyZmIwZDE0ODA4MWMxYjRjM2YyOGQwN2UwOThi
N2E2NWJiYTgxMjEuLmFkMmQzZjg3YjhiYmFmZGM0NDNiYjgzNzY4ODdhNWQwZmM2ZGZiZDcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9sYXlvdXR0cmVlL0xheW91dEJveC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9sYXlvdXR0cmVlL0xheW91dEJveC5oCkBAIC0xNTUs
NyArMTU1LDcgQEAgcHJpdmF0ZToKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZXBsYWNlZD4gbV9y
ZXBsYWNlZDsKIAotICAgIHVuc2lnbmVkIG1fYmFzZVR5cGVGbGFncyA6IDU7CisgICAgdW5zaWdu
ZWQgbV9iYXNlVHlwZUZsYWdzIDogNjsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9sYXlvdXR0cmVlL0xheW91dFJlcGxhY2VkLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9sYXlvdXR0cmVlL0xheW91dFJlcGxhY2VkLmNwcAppbmRleCBlOTA3NDIzMTY2NjU3
NTE0Mjc5OWQ2OTg3YmY2YmEyM2VjYjY5MGM3Li40ZjNkZGRiZjE2NGNiOGQ5ZGI5YWUwZjY2ZGVi
YWVmMmIxMzZjMDM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvbGF5b3V0dHJl
ZS9MYXlvdXRSZXBsYWNlZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2xheW91dHRy
ZWUvTGF5b3V0UmVwbGFjZWQuY3BwCkBAIC04MCw3ICs4MCw3IEBAIExheW91dFVuaXQgUmVwbGFj
ZWQ6OmludHJpbnNpY1JhdGlvKCkgY29uc3QKICAgICBBU1NFUlQoaGFzSW50cmluc2ljUmF0aW8o
KSB8fCAoaGFzSW50cmluc2ljV2lkdGgoKSAmJiBoYXNJbnRyaW5zaWNIZWlnaHQoKSkpOwogICAg
IGlmIChtX2ludHJpbnNpY1JhdGlvKQogICAgICAgICByZXR1cm4gKm1faW50cmluc2ljUmF0aW87
Ci0gICAgaWYgKG1faW50cmluc2ljU2l6ZSkKKyAgICBpZiAobV9pbnRyaW5zaWNTaXplICYmIG1f
aW50cmluc2ljU2l6ZS0+aGVpZ2h0KCkpCiAgICAgICAgIHJldHVybiBtX2ludHJpbnNpY1NpemUt
PndpZHRoKCkgLyBtX2ludHJpbnNpY1NpemUtPmhlaWdodCgpOwogICAgIHJldHVybiAxOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0VHJlZUJ1
aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0VHJlZUJ1
aWxkZXIuY3BwCmluZGV4IGU2MTAyZGNhZWQ0YWY4MzRmYTAwZWE0ZTRiNzJlNmNmZmFiODY5N2Yu
LmQ2ZjJhM2VhYmExM2QxNTA1MjY3OTczZDU2Y2Y3M2E2OTVmNjIxM2MgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9sYXlvdXR0cmVlL0xheW91dFRyZWVCdWlsZGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRUcmVlQnVpbGRlci5jcHAK
QEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkK
IAogI2luY2x1ZGUgIkRpc3BsYXlCb3guaCIKKyNpbmNsdWRlICJEaXNwbGF5UnVuLmgiCiAjaW5j
bHVkZSAiSW5saW5lRm9ybWF0dGluZ1N0YXRlLmgiCiAjaW5jbHVkZSAiTGF5b3V0QmxvY2tDb250
YWluZXIuaCIKICNpbmNsdWRlICJMYXlvdXRCb3guaCIKQEAgLTQyLDYgKzQzLDcgQEAKICNpbmNs
dWRlICJSZW5kZXJFbGVtZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIKICNpbmNsdWRl
ICJSZW5kZXJJbmxpbmUuaCIKKyNpbmNsdWRlICJSZW5kZXJMaW5lQnJlYWsuaCIKICNpbmNsdWRl
ICJSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlIDx3dGYv
dGV4dC9UZXh0U3RyZWFtLmg+CkBAIC02MCw2ICs2MiwxNSBAQCBzdGQ6OnVuaXF1ZV9wdHI8Q29u
dGFpbmVyPiBUcmVlQnVpbGRlcjo6Y3JlYXRlTGF5b3V0VHJlZShjb25zdCBSZW5kZXJWaWV3JiBy
ZW5kZQogICAgIHJldHVybiBpbml0aWFsQ29udGFpbmluZ0Jsb2NrOwogfQogCitzdGF0aWMgT3B0
aW9uYWw8TGF5b3V0U2l6ZT4gYWNjdW11bGF0ZWRPZmZzZXRGb3JJbkZsb3dQb3NpdGlvbmVkQ29u
dGludWF0aW9uKGNvbnN0IFJlbmRlckJveCYgYmxvY2spCit7CisgICAgLy8gRklYRTogVGhpcyBp
cyBhIHdvcmthcm91bmQgb2YgdGhlIGNvbnRpbnVhdGlvbiBsb2dpYyB3aGVuIHRoZSByZWxhdGl2
ZWx5IHBvc2l0aW9uZWQgcGFyZW50IGlubGluZSBib3gKKyAgICAvLyBiZWNvbWVzIGEgc2libGlu
ZyBib3ggb2YgdGhpcyBibG9jayBhbmQgb25seSByZWFjaGFibGUgdGhyb3VnaCB0aGUgY29udGlu
dWF0aW9uIGxpbmsgd2hpY2ggd2UgZG9uJ3QgaGF2ZSBoZXJlLgorICAgIGlmICghYmxvY2suaXNB
bm9ueW1vdXMoKSB8fCAhYmxvY2suaXNJbkZsb3dQb3NpdGlvbmVkKCkgfHwgIWJsb2NrLmlzQ29u
dGludWF0aW9uKCkpCisgICAgICAgIHJldHVybiB7IH07CisgICAgcmV0dXJuIGJsb2NrLnJlbGF0
aXZlUG9zaXRpb25PZmZzZXQoKTsKK30KKwogdm9pZCBUcmVlQnVpbGRlcjo6Y3JlYXRlU3ViVHJl
ZShjb25zdCBSZW5kZXJFbGVtZW50JiByb290UmVuZGVyZXIsIENvbnRhaW5lciYgcm9vdENvbnRh
aW5lcikKIHsKICAgICBhdXRvIGVsZW1lbnRBdHRyaWJ1dGVzID0gW10gKGNvbnN0IFJlbmRlckVs
ZW1lbnQmIHJlbmRlcmVyKSAtPiBPcHRpb25hbDxCb3g6OkVsZW1lbnRBdHRyaWJ1dGVzPiB7CkBA
IC05Nyw2ICsxMDgsOSBAQCB2b2lkIFRyZWVCdWlsZGVyOjpjcmVhdGVTdWJUcmVlKGNvbnN0IFJl
bmRlckVsZW1lbnQmIHJvb3RSZW5kZXJlciwgQ29udGFpbmVyJiBybwogICAgICAgICBpZiAoaXM8
UmVuZGVyVGV4dD4oY2hpbGQpKSB7CiAgICAgICAgICAgICBib3ggPSBzdGQ6Om1ha2VfdW5pcXVl
PElubGluZUJveD4oT3B0aW9uYWw8Qm94OjpFbGVtZW50QXR0cmlidXRlcz4oKSwgUmVuZGVyU3R5
bGU6OmNyZWF0ZUFub255bW91c1N0eWxlV2l0aERpc3BsYXkocm9vdFJlbmRlcmVyLnN0eWxlKCks
IERpc3BsYXlUeXBlOjpJbmxpbmUpKTsKICAgICAgICAgICAgIGRvd25jYXN0PElubGluZUJveD4o
KmJveCkuc2V0VGV4dENvbnRlbnQoZG93bmNhc3Q8UmVuZGVyVGV4dD4oY2hpbGQpLm9yaWdpbmFs
VGV4dCgpKTsKKyAgICAgICAgfSBlbHNlIGlmIChpczxSZW5kZXJMaW5lQnJlYWs+KGNoaWxkKSkg
eworICAgICAgICAgICAgYXV0byYgcmVuZGVyZXIgPSBkb3duY2FzdDxSZW5kZXJMaW5lQnJlYWs+
KGNoaWxkKTsKKyAgICAgICAgICAgIGJveCA9IHN0ZDo6bWFrZV91bmlxdWU8TGluZUJyZWFrQm94
PihlbGVtZW50QXR0cmlidXRlcyhyZW5kZXJlciksIFJlbmRlclN0eWxlOjpjbG9uZShyZW5kZXJl
ci5zdHlsZSgpKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXM8UmVuZGVyUmVwbGFjZWQ+KGNoaWxk
KSkgewogICAgICAgICAgICAgYXV0byYgcmVuZGVyZXIgPSBkb3duY2FzdDxSZW5kZXJSZXBsYWNl
ZD4oY2hpbGQpOwogICAgICAgICAgICAgYXV0byBkaXNwbGF5ID0gcmVuZGVyZXIuc3R5bGUoKS5k
aXNwbGF5KCk7CkBAIC0xMTUsOSArMTI5LDE1IEBAIHZvaWQgVHJlZUJ1aWxkZXI6OmNyZWF0ZVN1
YlRyZWUoY29uc3QgUmVuZGVyRWxlbWVudCYgcm9vdFJlbmRlcmVyLCBDb250YWluZXImIHJvCiAg
ICAgICAgIH0gZWxzZSBpZiAoaXM8UmVuZGVyRWxlbWVudD4oY2hpbGQpKSB7CiAgICAgICAgICAg
ICBhdXRvJiByZW5kZXJlciA9IGRvd25jYXN0PFJlbmRlckVsZW1lbnQ+KGNoaWxkKTsKICAgICAg
ICAgICAgIGF1dG8gZGlzcGxheSA9IHJlbmRlcmVyLnN0eWxlKCkuZGlzcGxheSgpOwotICAgICAg
ICAgICAgaWYgKGRpc3BsYXkgPT0gRGlzcGxheVR5cGU6OkJsb2NrKQotICAgICAgICAgICAgICAg
IGJveCA9IHN0ZDo6bWFrZV91bmlxdWU8QmxvY2tDb250YWluZXI+KGVsZW1lbnRBdHRyaWJ1dGVz
KHJlbmRlcmVyKSwgUmVuZGVyU3R5bGU6OmNsb25lKHJlbmRlcmVyLnN0eWxlKCkpKTsKLSAgICAg
ICAgICAgIGVsc2UgaWYgKGRpc3BsYXkgPT0gRGlzcGxheVR5cGU6OklubGluZSkKKyAgICAgICAg
ICAgIGlmIChkaXNwbGF5ID09IERpc3BsYXlUeXBlOjpCbG9jaykgeworICAgICAgICAgICAgICAg
IGlmIChhdXRvIG9mZnNldCA9IGFjY3VtdWxhdGVkT2Zmc2V0Rm9ySW5GbG93UG9zaXRpb25lZENv
bnRpbnVhdGlvbihkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgYXV0byBzdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZVB0cihyZW5kZXJlci5zdHls
ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgc3R5bGUtPnNldFRvcCh7IG9mZnNldC0+aGVpZ2h0
KCksIEZpeGVkIH0pOworICAgICAgICAgICAgICAgICAgICBzdHlsZS0+c2V0TGVmdCh7IG9mZnNl
dC0+d2lkdGgoKSwgRml4ZWQgfSk7CisgICAgICAgICAgICAgICAgICAgIGJveCA9IHN0ZDo6bWFr
ZV91bmlxdWU8QmxvY2tDb250YWluZXI+KGVsZW1lbnRBdHRyaWJ1dGVzKHJlbmRlcmVyKSwgV1RG
TW92ZSgqc3R5bGUpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgYm94ID0gc3RkOjptYWtlX3VuaXF1ZTxCbG9ja0NvbnRhaW5lcj4oZWxlbWVudEF0dHJpYnV0
ZXMocmVuZGVyZXIpLCBSZW5kZXJTdHlsZTo6Y2xvbmUocmVuZGVyZXIuc3R5bGUoKSkpOworICAg
ICAgICAgICAgfSBlbHNlIGlmIChkaXNwbGF5ID09IERpc3BsYXlUeXBlOjpJbmxpbmUpCiAgICAg
ICAgICAgICAgICAgYm94ID0gc3RkOjptYWtlX3VuaXF1ZTxJbmxpbmVDb250YWluZXI+KGVsZW1l
bnRBdHRyaWJ1dGVzKHJlbmRlcmVyKSwgUmVuZGVyU3R5bGU6OmNsb25lKHJlbmRlcmVyLnN0eWxl
KCkpKTsKICAgICAgICAgICAgIGVsc2UgaWYgKGRpc3BsYXkgPT0gRGlzcGxheVR5cGU6OklubGlu
ZUJsb2NrKQogICAgICAgICAgICAgICAgIGJveCA9IHN0ZDo6bWFrZV91bmlxdWU8SW5saW5lQ29u
dGFpbmVyPihlbGVtZW50QXR0cmlidXRlcyhyZW5kZXJlciksIFJlbmRlclN0eWxlOjpjbG9uZShy
ZW5kZXJlci5zdHlsZSgpKSk7CkBAIC0xNTcsMjAgKzE3NywzMCBAQCB2b2lkIFRyZWVCdWlsZGVy
OjpjcmVhdGVTdWJUcmVlKGNvbnN0IFJlbmRlckVsZW1lbnQmIHJvb3RSZW5kZXJlciwgQ29udGFp
bmVyJiBybwogI2lmIEVOQUJMRShUUkVFX0RFQlVHR0lORykKIHN0YXRpYyB2b2lkIG91dHB1dElu
bGluZVJ1bnMoVGV4dFN0cmVhbSYgc3RyZWFtLCBjb25zdCBMYXlvdXRTdGF0ZSYgbGF5b3V0U3Rh
dGUsIGNvbnN0IENvbnRhaW5lciYgaW5saW5lRm9ybWF0dGluZ1Jvb3QsIHVuc2lnbmVkIGRlcHRo
KQogewotICAgIGF1dG8mIGlubGluZUZvcm1hdHRpbmdTdGF0ZSA9IGxheW91dFN0YXRlLmVzdGFi
bGlzaGVkRm9ybWF0dGluZ1N0YXRlKGlubGluZUZvcm1hdHRpbmdSb290KTsKLSAgICBBU1NFUlQo
aXM8SW5saW5lRm9ybWF0dGluZ1N0YXRlPihpbmxpbmVGb3JtYXR0aW5nU3RhdGUpKTsKLSAgICBh
dXRvJiBpbmxpbmVSdW5zID0gZG93bmNhc3Q8SW5saW5lRm9ybWF0dGluZ1N0YXRlPihpbmxpbmVG
b3JtYXR0aW5nU3RhdGUpLmlubGluZVJ1bnMoKTsKKyAgICBhdXRvJiBpbmxpbmVGb3JtYXR0aW5n
U3RhdGUgPSBkb3duY2FzdDxJbmxpbmVGb3JtYXR0aW5nU3RhdGU+KGxheW91dFN0YXRlLmVzdGFi
bGlzaGVkRm9ybWF0dGluZ1N0YXRlKGlubGluZUZvcm1hdHRpbmdSb290KSk7CisgICAgYXV0byYg
aW5saW5lUnVucyA9IGlubGluZUZvcm1hdHRpbmdTdGF0ZS5pbmxpbmVSdW5zKCk7CisgICAgYXV0
byYgbGluZUJveGVzID0gaW5saW5lRm9ybWF0dGluZ1N0YXRlLmxpbmVCb3hlcygpOworCisgICAg
dW5zaWduZWQgcHJpbnRlZENoYXJhY3RlcnMgPSAwOworICAgIHdoaWxlICgrK3ByaW50ZWRDaGFy
YWN0ZXJzIDw9IGRlcHRoICogMykKKyAgICAgICAgc3RyZWFtIDw8ICIgIjsKKworICAgIHN0cmVh
bSA8PCAibGluZXMgYXJlIC0+ICI7CisgICAgZm9yIChhdXRvJiBsaW5lQm94IDogbGluZUJveGVz
KQorICAgICAgICBzdHJlYW0gPDwgIlsiIDw8IGxpbmVCb3gubG9naWNhbExlZnQoKSA8PCAiLCIg
PDwgbGluZUJveC5sb2dpY2FsVG9wKCkgPDwgIiAiIDw8IGxpbmVCb3gubG9naWNhbFdpZHRoKCkg
PDwgIngiIDw8IGxpbmVCb3gubG9naWNhbEhlaWdodCgpIDw8ICJdICI7CisgICAgc3RyZWFtLm5l
eHRMaW5lKCk7CiAKICAgICBmb3IgKGF1dG8mIGlubGluZVJ1biA6IGlubGluZVJ1bnMpIHsKICAg
ICAgICAgdW5zaWduZWQgcHJpbnRlZENoYXJhY3RlcnMgPSAwOwotICAgICAgICB3aGlsZSAoKytw
cmludGVkQ2hhcmFjdGVycyA8PSBkZXB0aCAqIDIpCisgICAgICAgIHdoaWxlICgrK3ByaW50ZWRD
aGFyYWN0ZXJzIDw9IGRlcHRoICogMykKICAgICAgICAgICAgIHN0cmVhbSA8PCAiICI7Ci0gICAg
ICAgIHN0cmVhbSA8PCAicnVuIjsKLSAgICAgICAgaWYgKGlubGluZVJ1bi50ZXh0Q29udGV4dCgp
KQotICAgICAgICAgICAgc3RyZWFtIDw8ICIoIiA8PCBpbmxpbmVSdW4udGV4dENvbnRleHQoKS0+
c3RhcnQoKSA8PCAiLCAiIDw8IGlubGluZVJ1bi50ZXh0Q29udGV4dCgpLT5zdGFydCgpICsgaW5s
aW5lUnVuLnRleHRDb250ZXh0KCktPmxlbmd0aCgpIDw8ICIpICI7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHN0cmVhbSA8PCAiKHgsIHgpICI7Ci0gICAgICAgIHN0cmVhbSA8PCAiYXQgWyIg
PDwgaW5saW5lUnVuLmxvZ2ljYWxMZWZ0KCkgPDwgIiwgIiA8PCBpbmxpbmVSdW4ubG9naWNhbFRv
cCgpIDw8ICJdIHNpemUgWyIgPDwgaW5saW5lUnVuLmxvZ2ljYWxXaWR0aCgpIDw8ICIgIiA8PCBp
bmxpbmVSdW4ubG9naWNhbEhlaWdodCgpIDw8ICJdIjsKKyAgICAgICAgaWYgKGlubGluZVJ1bi0+
dGV4dENvbnRleHQoKSkKKyAgICAgICAgICAgIHN0cmVhbSA8PCAiaW5saW5lIHRleHQgYm94IjsK
KyAgICAgICAgZWxzZSAgCisgICAgICAgICAgICBzdHJlYW0gPDwgImlubGluZSBib3giOworICAg
ICAgICBzdHJlYW0gPDwgIiBhdCAoIiA8PCBpbmxpbmVSdW4tPmxvZ2ljYWxMZWZ0KCkgPDwgIiwi
IDw8IGlubGluZVJ1bi0+bG9naWNhbFRvcCgpIDw8ICIpIHNpemUgIiA8PCBpbmxpbmVSdW4tPmxv
Z2ljYWxXaWR0aCgpIDw8ICJ4IiA8PCBpbmxpbmVSdW4tPmxvZ2ljYWxIZWlnaHQoKTsKKyAgICAg
ICAgaWYgKGlubGluZVJ1bi0+dGV4dENvbnRleHQoKSkKKyAgICAgICAgICAgIHN0cmVhbSA8PCAi
IHJ1bigiIDw8IGlubGluZVJ1bi0+dGV4dENvbnRleHQoKS0+c3RhcnQoKSA8PCAiLCAiIDw8IGlu
bGluZVJ1bi0+dGV4dENvbnRleHQoKS0+ZW5kKCkgPDwgIikiOwogICAgICAgICBzdHJlYW0ubmV4
dExpbmUoKTsKICAgICB9CiB9CkBAIC0xODEsMzMgKzIxMSw0NiBAQCBzdGF0aWMgdm9pZCBvdXRw
dXRMYXlvdXRCb3goVGV4dFN0cmVhbSYgc3RyZWFtLCBjb25zdCBCb3gmIGxheW91dEJveCwgY29u
c3QgRGlzcAogICAgIHdoaWxlICgrK3ByaW50ZWRDaGFyYWN0ZXJzIDw9IGRlcHRoICogMikKICAg
ICAgICAgc3RyZWFtIDw8ICIgIjsKIAotICAgIGlmIChpczxJbmxpbmVDb250YWluZXI+KGxheW91
dEJveCkpCi0gICAgICAgIHN0cmVhbSA8PCAiaW5saW5lIGNvbnRhaW5lciI7Ci0gICAgZWxzZSBp
ZiAoaXM8SW5saW5lQm94PihsYXlvdXRCb3gpKSB7CisgICAgaWYgKGxheW91dEJveC5pc0Zsb2F0
aW5nUG9zaXRpb25lZCgpKQorICAgICAgICBzdHJlYW0gPDwgIltmbG9hdF0gIjsKKworICAgIGlm
IChpczxJbmxpbmVDb250YWluZXI+KGxheW91dEJveCkpIHsKKyAgICAgICAgLy8gRklYTUU6IGZp
eCBuYW1lcworICAgICAgICBpZiAobGF5b3V0Qm94LmlzSW5saW5lQmxvY2tCb3goKSkKKyAgICAg
ICAgICAgIHN0cmVhbSA8PCAiRElWIGlubGluZS1ibG9jayBjb250YWluZXIiOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBzdHJlYW0gPDwgIlNQQU4gaW5saW5lIGNvbnRhaW5lciI7CisgICAg
fSBlbHNlIGlmIChpczxJbmxpbmVCb3g+KGxheW91dEJveCkpIHsKICAgICAgICAgaWYgKGxheW91
dEJveC5yZXBsYWNlZCgpKQotICAgICAgICAgICAgc3RyZWFtIDw8ICJpbmxpbmUgcmVwbGFjZWQg
Ym94IjsKLSAgICAgICAgZWxzZSBpZiAoZG93bmNhc3Q8SW5saW5lQm94PihsYXlvdXRCb3gpLmhh
c1RleHRDb250ZW50KCkpIHsKLSAgICAgICAgICAgIGF1dG8gdGV4dENvbnRlbnQgPSBkb3duY2Fz
dDxJbmxpbmVCb3g+KGxheW91dEJveCkudGV4dENvbnRlbnQoKTsKLSAgICAgICAgICAgIHN0cmVh
bSA8PCAiaW5saW5lIHRleHQgW1wiIiA8PCB0ZXh0Q29udGVudC51dGY4KCkuZGF0YSgpIDw8ICJc
Il0iOwotICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHN0cmVhbSA8PCAiSU1HIHJlcGxhY2Vk
IGlubGluZSBib3giOworICAgICAgICBlbHNlIGlmIChsYXlvdXRCb3guaXNBbm9ueW1vdXMoKSkK
KyAgICAgICAgICAgIHN0cmVhbSA8PCAiYW5vbnltb3VzIGlubGluZSBib3giOworICAgICAgICBl
bHNlIGlmIChpczxMaW5lQnJlYWtCb3g+KGxheW91dEJveCkpCisgICAgICAgICAgICBzdHJlYW0g
PDwgIkJSIGxpbmUgYnJlYWsiOworICAgICAgICBlbHNlCiAgICAgICAgICAgICBzdHJlYW0gPDwg
ImlubGluZSBib3giOwogICAgIH0gZWxzZSBpZiAoaXM8QmxvY2tDb250YWluZXI+KGxheW91dEJv
eCkpIHsKICAgICAgICAgaWYgKCFsYXlvdXRCb3gucGFyZW50KCkpCi0gICAgICAgICAgICBzdHJl
YW0gPDwgImluaXRpYWwgIjsKLSAgICAgICAgc3RyZWFtIDw8ICJibG9jayBjb250YWluZXIiOwor
ICAgICAgICAgICAgc3RyZWFtIDw8ICJJbml0aWFsIjsKKyAgICAgICAgZWxzZSBpZiAobGF5b3V0
Qm94LmlzRG9jdW1lbnRCb3goKSkKKyAgICAgICAgICAgIHN0cmVhbSA8PCAiSFRNTCI7CisgICAg
ICAgIGVsc2UgaWYgKGxheW91dEJveC5pc0JvZHlCb3goKSkKKyAgICAgICAgICAgIHN0cmVhbSA8
PCAiQk9EWSI7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gRklYTUUKKyAgICAgICAg
ICAgIHN0cmVhbSA8PCAiRElWIjsKKyAgICAgICAgfQorICAgICAgICBzdHJlYW0gPDwgIiBibG9j
ayBjb250YWluZXIiOwogICAgIH0gZWxzZSBpZiAobGF5b3V0Qm94LmlzQmxvY2tMZXZlbEJveCgp
KQogICAgICAgICBzdHJlYW0gPDwgImJsb2NrIGJveCI7CiAgICAgZWxzZQogICAgICAgICBzdHJl
YW0gPDwgImJveCI7CiAgICAgLy8gRklYTUU6IElubGluZSB0ZXh0IHJ1bnMgZG9uJ3QgY3JlYXRl
IGRpc3BsYXkgYm94ZXMgeWV0LgotICAgIGlmIChkaXNwbGF5Qm94KSB7Ci0gICAgICAgIC8vIEZJ
WE1FOiBkaXNwbGF5IGJveCBpcyBub3QgY29tcGxldGVseSBzZXQgeWV0LgotICAgICAgICBpZiAo
KGlzPElubGluZUJveD4obGF5b3V0Qm94KSB8fCBpczxJbmxpbmVDb250YWluZXI+KGxheW91dEJv
eCkpICYmICFsYXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSkKLSAgICAgICAgICAgIHN0
cmVhbSA8PCAiIGF0IFsiIDw8ICIuIiA8PCAiICIgPDwgIi4iIDw8ICJdIHNpemUgWyIgPDwgZGlz
cGxheUJveC0+d2lkdGgoKSA8PCAiICIgPDwgZGlzcGxheUJveC0+aGVpZ2h0KCkgPDwgIl0iOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBzdHJlYW0gPDwgIiBhdCBbIiA8PCBkaXNwbGF5Qm94
LT5sZWZ0KCkgPDwgIiAiIDw8IGRpc3BsYXlCb3gtPnRvcCgpIDw8ICJdIHNpemUgWyIgPDwgZGlz
cGxheUJveC0+d2lkdGgoKSA8PCAiICIgPDwgZGlzcGxheUJveC0+aGVpZ2h0KCkgPDwgIl0iOwot
ICAgIH0KLSAgICBzdHJlYW0gPDwgIiBbIiA8PCAmbGF5b3V0Qm94IDw8ICJdIjsKKyAgICBpZiAo
ZGlzcGxheUJveCkKKyAgICAgICAgc3RyZWFtIDw8ICIgYXQgKCIgPDwgZGlzcGxheUJveC0+bGVm
dCgpIDw8ICIsIiA8PCBkaXNwbGF5Qm94LT50b3AoKSA8PCAiKSBzaXplICIgPDwgZGlzcGxheUJv
eC0+d2lkdGgoKSA8PCAieCIgPDwgZGlzcGxheUJveC0+aGVpZ2h0KCk7CisgICAgc3RyZWFtIDw8
ICIgbGF5b3V0IGJveC0+KCIgPDwgJmxheW91dEJveCA8PCAiKSI7CisgICAgaWYgKGlzPElubGlu
ZUJveD4obGF5b3V0Qm94KSAmJiBkb3duY2FzdDxJbmxpbmVCb3g+KGxheW91dEJveCkuaGFzVGV4
dENvbnRlbnQoKSkKKyAgICAgICAgc3RyZWFtIDw8ICIgdGV4dCBjb250ZW50IFtcIiIgPDwgZG93
bmNhc3Q8SW5saW5lQm94PihsYXlvdXRCb3gpLnRleHRDb250ZW50KCkudXRmOCgpLmRhdGEoKSA8
PCAiXCJdIjsKIAogICAgIHN0cmVhbS5uZXh0TGluZSgpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>370394</attachid>
            <date>2019-05-22 06:23:42 -0700</date>
            <delta_ts>2019-05-23 19:33:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-197198-20190522062340.patch</filename>
            <type>text/plain</type>
            <size>200875</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ1NjEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjcxOGQ5YmJkZGJkZDU1
ZmRhODlmNzQwZDAzZjFmMzU3YjQ5NzQ5MC4uOTgwMzQwNDE4Y2MxNGMyM2M0ZmYzNWVkYzk1MDVm
MmE0ZTFlMTA3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwMiBAQAorMjAxOS0wNS0yMSAgWmFs
YW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgorCisgICAgICAgIFtMRkNdW0lGQ10gSW50cm9k
dWNlIERpc3BsYXlSdW4gdG8gZGlzcGxheSB0cmVlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTcxOTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBzaW1wbGUgaW5saW5lIGxheW91dCBpbXBsZW1l
bnRhdGlvbi4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBsYXlvdXQvRm9ybWF0dGluZ0NvbnRl
eHRHZW9tZXRyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OmNvbnRlbnRIZWlnaHRG
b3JGb3JtYXR0aW5nQ29udGV4dFJvb3QpOgorICAgICAgICAqIGxheW91dC9WZXJpZmljYXRpb24u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjphcmVFc3NlbnRpYWxseUVxdWFsKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6b3V0cHV0TWlzbWF0Y2hpbmdTaW1wbGVMaW5lSW5mb3Jt
YXRpb25JZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OmNoZWNrRm9yTWF0Y2hp
bmdOb25UZXh0UnVucyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OmNoZWNrRm9yTWF0Y2hp
bmdUZXh0UnVucyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Om91dHB1dE1pc21hdGNoaW5n
Q29tcGxleExpbmVJbmZvcm1hdGlvbklmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6b3V0cHV0TWlzbWF0Y2hpbmdCbG9ja0JveEluZm9ybWF0aW9uSWZOZWVkZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpyZXNvbHZlRm9yUmVsYXRpdmVQb3NpdGlvbklmTmVlZGVkKTog
RGVsZXRlZC4KKyAgICAgICAgKiBsYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrRm9ybWF0dGlu
Z0NvbnRleHRHZW9tZXRyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9y
bWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbkZsb3dOb25SZXBsYWNlZEhlaWdodEFuZE1hcmdp
bik6CisgICAgICAgICogbGF5b3V0L2Rpc3BsYXl0cmVlL0Rpc3BsYXlCb3guY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheTo6Qm94OjptYXJnaW5Cb3ggY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheTo6Qm94Ojpub25Db2xsYXBzZWRNYXJnaW5Cb3ggY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheTo6Qm94Ojpib3JkZXJCb3ggY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheTo6Qm94OjpwYWRkaW5nQm94IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXk6OkJveDo6Y29udGVudEJveCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5OjpCb3g6OlJlY3Q6OlJlY3QpOiBEZWxldGVkLgorICAgICAgICAqIGxheW91dC9kaXNwbGF5
dHJlZS9EaXNwbGF5Qm94Lmg6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3g6OnJlY3RX
aXRoTWFyZ2luIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveDo6aG9yaXpv
bnRhbE1hcmdpbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3g6OlJlY3Q6
OmludGVyc2VjdHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6
Qm94OjpSZWN0OjppbnZhbGlkYXRlVG9wKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXk6OkJveDo6UmVjdDo6aW52YWxpZGF0ZUxlZnQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheTo6Qm94OjpSZWN0OjppbnZhbGlkYXRlV2lkdGgpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Qm94OjpSZWN0OjppbnZhbGlkYXRlSGVpZ2h0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveDo6UmVjdDo6aGFzVmFsaWRQb3Np
dGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3g6OlJl
Y3Q6Omhhc1ZhbGlkU2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5OjpCb3g6OlJlY3Q6Omhhc1ZhbGlkR2VvbWV0cnkgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheTo6Qm94OjpSZWN0OjppbnZhbGlkYXRlUG9zaXRpb24pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Qm94OjpSZWN0OjpzZXRIYXNWYWxpZFBv
c2l0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveDo6UmVjdDo6
c2V0SGFzVmFsaWRTaXplKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJv
eDo6UmVjdDo6dG9wIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6
OkJveDo6UmVjdDo6bGVmdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5OjpCb3g6OlJlY3Q6OmJvdHRvbSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5OjpCb3g6OlJlY3Q6OnJpZ2h0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXk6OkJveDo6UmVjdDo6dG9wTGVmdCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3g6OlJlY3Q6OmJvdHRvbVJpZ2h0IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveDo6UmVjdDo6c2l6ZSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3g6OlJlY3Q6OndpZHRoIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveDo6UmVjdDo6aGVp
Z2h0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveDo6UmVj
dDo6c2V0VG9wTGVmdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3g6
OlJlY3Q6OnNldFRvcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3g6
OlJlY3Q6OnNldExlZnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Qm94
OjpSZWN0OjpzZXRXaWR0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpC
b3g6OlJlY3Q6OnNldEhlaWdodCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
OjpCb3g6OlJlY3Q6OnNldFNpemUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eTo6Qm94OjpSZWN0OjpzaGlmdExlZnRUbyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5OjpCb3g6OlJlY3Q6OnNoaWZ0UmlnaHRUbyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5OjpCb3g6OlJlY3Q6OnNoaWZ0VG9wVG8pOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheTo6Qm94OjpSZWN0OjpzaGlmdEJvdHRvbVRvKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveDo6UmVjdDo6bW92ZUhvcml6b250YWxseSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3g6OlJlY3Q6Om1vdmVWZXJ0aWNh
bGx5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveDo6UmVjdDo6ZXhw
YW5kKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveDo6UmVjdDo6Y2xv
bmUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Qm94OjpSZWN0
OjpvcGVyYXRvciBMYXlvdXRSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBsYXlvdXQv
ZGlzcGxheXRyZWUvRGlzcGxheVJlY3QuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5OjpSZWN0OjpleHBhbmRIb3Jpem9udGFsbHkpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eTo6UmVjdDo6ZXhwYW5kVmVydGljYWxseSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpS
ZWN0OjppbnRlcnNlY3RzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJlY3Q6
OmludmFsaWRhdGVUb3ApOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UmVjdDo6aW52YWxp
ZGF0ZUxlZnQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UmVjdDo6aW52YWxpZGF0ZVdp
ZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJlY3Q6OmludmFsaWRhdGVIZWlnaHQp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UmVjdDo6aGFzVmFsaWRQb3NpdGlvbiBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSZWN0OjpoYXNWYWxpZFNpemUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UmVjdDo6aGFzVmFsaWRHZW9tZXRyeSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSZWN0OjpSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXk6OlJlY3Q6OmludmFsaWRhdGVQb3NpdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5OjpSZWN0OjpzZXRIYXNWYWxpZFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXk6OlJlY3Q6OnNldEhhc1ZhbGlkU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5OjpSZWN0Ojp0b3AgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UmVj
dDo6bGVmdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSZWN0Ojpib3R0b20g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UmVjdDo6cmlnaHQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UmVjdDo6dG9wTGVmdCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5OjpSZWN0Ojpib3R0b21SaWdodCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5OjpSZWN0OjpzaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXk6OlJlY3Q6OndpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJl
Y3Q6OmhlaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSZWN0OjpzZXRU
b3BMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJlY3Q6OnNldFRvcCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSZWN0OjpzZXRMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXk6OlJlY3Q6OnNldFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJl
Y3Q6OnNldEhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSZWN0OjpzZXRTaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJlY3Q6OnNoaWZ0TGVmdFRvKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJlY3Q6OnNoaWZ0UmlnaHRUbyk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5OjpSZWN0OjpzaGlmdFRvcFRvKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXk6OlJlY3Q6OnNoaWZ0Qm90dG9tVG8pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UmVj
dDo6bW92ZUhvcml6b250YWxseSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSZWN0Ojpt
b3ZlVmVydGljYWxseSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSZWN0OjpleHBhbmQp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UmVjdDo6Y2xvbmUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheTo6UmVjdDo6b3BlcmF0b3IgTGF5b3V0UmVjdCBjb25zdCk6Cisg
ICAgICAgICogbGF5b3V0L2Rpc3BsYXl0cmVlL0Rpc3BsYXlSdW4uaDogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZVJ1bi5oLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheTo6UnVuOjpUZXh0Q29udGV4dDo6c3RhcnQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UnVuOjpUZXh0Q29udGV4dDo6ZW5kIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJ1bjo6VGV4dENvbnRleHQ6Omxlbmd0aCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSdW46OlRleHRDb250ZXh0OjpleHBhbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UnVuOjpsb2dpY2FsVG9wTGVmdCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSdW46OmxvZ2ljYWxMZWZ0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJ1bjo6bG9naWNhbFJpZ2h0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXk6OlJ1bjo6bG9naWNhbFRvcCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5OjpSdW46OmxvZ2ljYWxCb3R0b20gY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheTo6UnVuOjpsb2dpY2FsV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheTo6UnVuOjpsb2dpY2FsSGVpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXk6OlJ1bjo6c2V0TG9naWNhbFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6
OlJ1bjo6c2V0TG9naWNhbFRvcCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSdW46OnNl
dExvZ2ljYWxMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJ1bjo6c2V0TG9naWNh
bFJpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJ1bjo6bW92ZVZlcnRpY2FsbHkp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UnVuOjptb3ZlSG9yaXpvbnRhbGx5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJ1bjo6ZXhwYW5kVmVydGljYWxseSk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5OjpSdW46OmV4cGFuZEhvcml6b250YWxseSk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5OjpSdW46OnNldFRleHRDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXk6OlJ1bjo6dGV4dENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6
UnVuOjp0ZXh0Q29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSdW46
OlJ1bik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSdW46OlRleHRDb250ZXh0OjpUZXh0
Q29udGV4dCk6CisgICAgICAgICogbGF5b3V0L2Zsb2F0cy9GbG9hdEF2b2lkZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGbG9hdEF2b2lkZXI6OnJlY3RJbkNvbnRhaW5pbmdCbG9j
ayBjb25zdCk6CisgICAgICAgICogbGF5b3V0L2Zsb2F0cy9GbG9hdEF2b2lkZXIuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6RmxvYXRBdm9pZGVyOjpyZWN0IGNvbnN0KToKKyAgICAgICAg
KiBsYXlvdXQvZmxvYXRzL0Zsb2F0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
RmxvYXRCb3g6OnJlY3QgY29uc3QpOgorICAgICAgICAqIGxheW91dC9mbG9hdHMvRmxvYXRCb3gu
aDoKKyAgICAgICAgKiBsYXlvdXQvZmxvYXRzL0Zsb2F0aW5nQ29udGV4dC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OkZsb2F0UGFpcjo6aW50ZXJzZWN0cyBjb25zdCk6CisgICAgICAg
ICogbGF5b3V0L2Zsb2F0cy9GbG9hdGluZ1N0YXRlLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkZsb2F0aW5nU3RhdGU6OkZsb2F0SXRlbTo6cmVjdFdpdGhNYXJnaW4gY29uc3QpOgorICAg
ICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6Omxh
eW91dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdD
b250ZXh0Ojpjb21wdXRlSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0Ojppbml0aWFsaXplTWFy
Z2luQm9yZGVyQW5kUGFkZGluZ0ZvckdlbmVyaWNJbmxpbmVCb3ggY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZU1hcmdpbkJv
cmRlckFuZFBhZGRpbmdGb3JJbmxpbmVDb250YWluZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUludHJpbnNpY1dpZHRo
Rm9yRmxvYXRCb3ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dDo6Y29tcHV0ZUludHJpbnNpY1dpZHRoRm9ySW5saW5lQmxvY2sgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29t
cHV0ZUhvcml6b250YWxNYXJnaW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJ
bmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRSb290IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNv
bGxlY3RJbmxpbmVDb250ZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVNYXJnaW4gY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjphZGREZXRhY2hpbmdSdWxlcyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OmNyZWF0ZUFuZEFwcGVuZElubGluZUl0ZW0pOiBEZWxldGVk
LgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250
ZXh0Lmg6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0
OjpMaW5lTGF5b3V0OjpsYXlvdXRTdGF0ZSBjb25zdCk6CisgICAgICAgICogbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6aGFsZkxlYWRpbmdNZXRyaWNzKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6TGluZTo6YXZhaWxhYmxlV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpMaW5lOjpjb250ZW50TG9naWNhbFJpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6TGluZTo6Y29udGVudExvZ2ljYWxXaWR0aCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6OmxvZ2ljYWxUb3AgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpMaW5lOjpsb2dpY2FsTGVmdCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkxpbmU6OmxvZ2ljYWxSaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OkxpbmU6OmxvZ2ljYWxCb3R0b20gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpMaW5lOjpsb2dpY2FsV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpMaW5lOjpsb2dpY2FsSGVpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
TGluZTo6TGluZUl0ZW06OkxpbmVJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGlu
ZTo6TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6OnJlc2V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6TGluZTo6Y2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpMaW5lOjpyZW1vdmVUcmFpbGluZ1RyaW1tYWJsZUNvbnRlbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpMaW5lOjptb3ZlTG9naWNhbExlZnQpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpMaW5lOjptb3ZlTG9naWNhbFJpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6aXNUcmltbWFibGVDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZTo6
dHJhaWxpbmdUcmltbWFibGVXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkxpbmU6Omhhc0NvbnRlbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5l
OjphcHBlbmROb25CcmVha2FibGVTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Okxp
bmU6OmFwcGVuZElubGluZUNvbnRhaW5lclN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6TGluZTo6YXBwZW5kSW5saW5lQ29udGFpbmVyRW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6TGluZTo6YXBwZW5kVGV4dENvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpMaW5lOjphcHBlbmROb25UZXh0Q29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkxpbmU6OmFwcGVuZEhhcmRMaW5lQnJlYWspOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpV
bmNvbW1pdHRlZENvbnRlbnQ6OmlzRW1wdHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpVbmNvbW1pdHRlZENvbnRlbnQ6OndpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6VW5jb21taXR0ZWRDb250ZW50OjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpVbmNvbW1pdHRlZENvbnRlbnQ6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OkxpbmVMYXlvdXQpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91
dDo6aW5pdGlhbGl6ZUxpbmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxp
bmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6bGF5b3V0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OmNs
b3NlTGluZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRp
bmdDb250ZXh0OjpMaW5lTGF5b3V0OjpoYW5kbGVGbG9hdCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0Ojpjb21taXRJ
bmxpbmVJdGVtVG9MaW5lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6aG9yaXpv
bnRhbEFkanVzdG1lbnRGb3JBbGlnbm1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJ
bmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6YWxpZ25SdW5zIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZTo6aXNDbG9zZWQgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjppc0ZpcnN0TGluZSBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6OnJ1bnMpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjpjb250ZW50TG9naWNhbExlZnQgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjpsYXN0UnVuVHlwZSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6OmluaXQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjphZGp1c3RMb2dpY2FsTGVmdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6OmFkanVzdExvZ2ljYWxS
aWdodCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6OmFwcGVuZENv
bnRlbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dDo6TGluZUxheW91dDo6aW5pdGlhbGl6ZU5ld0xpbmUgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGlu
ZUxheW91dDo6c3BsaXRJbmxpbmVSdW5JZk5lZWRlZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0Ojpj
cmVhdGVGaW5hbFJ1bnMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6cG9zdFByb2Nlc3NJbmxpbmVS
dW5zIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9y
bWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OmFwcGVuZENvbnRlbnRUb0xpbmUgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dDo6TGluZUxheW91dDo6Y29tcHV0ZUZsb2F0UG9zaXRpb24gY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91
dDo6cGxhY2VJbkZsb3dQb3NpdGlvbmVkQ2hpbGRyZW4gY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjphZGp1c3RlZExpbmVMb2dpY2FsTGVmdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5
b3V0OjpqdXN0aWZ5UnVucyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Oklu
bGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0Ojpjb21wdXRlRXhwYW5zaW9uT3Bwb3J0
dW5pdGllcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGlu
ZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpydW5XaWR0aCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ1N0YXRl
Lmg6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdTdGF0ZTo6aW5s
aW5lSXRlbXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nU3Rh
dGU6OmxpbmVCb3hlcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRp
bmdTdGF0ZTo6YWRkSW5saW5lSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGlu
ZUZvcm1hdHRpbmdTdGF0ZTo6YWRkSW5saW5lUnVuKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6SW5saW5lRm9ybWF0dGluZ1N0YXRlOjphZGRMaW5lQm94KToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ1N0YXRlOjppbmxpbmVDb250ZW50KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ1N0YXRlOjpsYXN0SW5s
aW5lSXRlbSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGlu
ZUZvcm1hdHRpbmdTdGF0ZTo6YXBwZW5kSW5saW5lUnVuKTogRGVsZXRlZC4KKyAgICAgICAgKiBs
YXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVJdGVtLmg6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OklubGluZUl0ZW06OnR5cGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpJbmxpbmVJdGVtOjppc1RleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJ
bmxpbmVJdGVtOjppc0JveCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGlu
ZUl0ZW06OmlzSGFyZExpbmVCcmVhayBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OklubGluZUl0ZW06OmlzRmxvYXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJ
bmxpbmVJdGVtOjppc0xpbmVCcmVhayBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OklubGluZUl0ZW06OmlzQ29udGFpbmVyU3RhcnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpJbmxpbmVJdGVtOjppc0NvbnRhaW5lckVuZCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OklubGluZUl0ZW06OklubGluZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpJbmxpbmVJdGVtOjpzZXRXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OklubGluZUl0ZW06OndpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5s
aW5lSXRlbTo6YWRkRGV0YWNoaW5nUnVsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OklubGluZUl0ZW06OmRldGFjaGluZ1J1bGVzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lSXRlbTo6bm9uQnJlYWthYmxlU3RhcnQgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVJdGVtOjpub25CcmVh
a2FibGVFbmQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxp
bmVJdGVtOjphZGROb25CcmVha2FibGVTdGFydCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OklubGluZUl0ZW06OmFkZE5vbkJyZWFrYWJsZUVuZCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUl0ZW06OnRleHRDb250ZW50IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQm94Lmg6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2xheW91dC9mbG9hdHMvRmxvYXRCb3guaC4KKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6bG9naWNhbFRvcExlZnQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94Ojpsb2dpY2FsTGVmdCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OmxvZ2ljYWxSaWdodCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OmxvZ2ljYWxUb3AgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94Ojpsb2dpY2FsQm90dG9tIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6bG9naWNhbFdpZHRoIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6bG9naWNhbEhlaWdodCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OkxpbmVCb3gpOgorICAgICAgICAqIGxh
eW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCcmVha2VyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6TGluZUJyZWFrZXI6OkxpbmVCcmVha2VyKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6TGluZUJyZWFrZXI6OmJyZWFraW5nQ29udGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OkxpbmVCcmVha2VyOjp3b3JkQnJlYWtpbmdCZWhhdmlvciBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCcmVha2VyOjpydW5XaWR0aCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCcmVha2VyOjppc0F0QnJlYWtpbmdPcHBvcnR1
bml0eSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCcmVha2VyOjp0ZXh0V2lkdGgg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVMaW5lQnJlYWtlcjo6SW5s
aW5lTGluZUJyZWFrZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxp
bmVMaW5lQnJlYWtlcjo6bmV4dFJ1bik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OklubGluZUxpbmVCcmVha2VyOjppc0F0Q29udGVudEVuZCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUxpbmVCcmVha2VyOjpsaW5lQnJlYWtpbmdC
ZWhhdmlvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUxpbmVC
cmVha2VyOjpydW5XaWR0aCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OklubGluZUxpbmVCcmVha2VyOjp0ZXh0V2lkdGggY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVMaW5lQnJlYWtlcjo6c3BsaXRSdW4pOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVMaW5lQnJlYWtlcjo6YWRqdXN0U3Bs
aXRQb3NpdGlvbldpdGhIeXBoZW5hdGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJyZWFrZXIuaDoKKyAgICAgICAgKiBsYXlv
dXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVSdW5Qcm92aWRlci5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lUnVuUHJvdmlkZXIuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVUZXh0SXRlbS5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0Ojppc1doaXRlc3BhY2VDaGFyYWN0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0Ojppc1NvZnRMaW5lQnJlYWspOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0Ojptb3ZlVG9OZXh0Tm9uV2hpdGVzcGFjZVBvc2l0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6bW92ZVRvTmV4dEJyZWFrYWJsZVBvc2l0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lVGV4dEl0ZW06OmNyZWF0ZUFuZEFwcGVuZFRleHRJ
dGVtcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZVRleHRJdGVtOjpJbmxpbmVU
ZXh0SXRlbSk6CisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lVGV4dEl0
ZW0uaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcv
dGV4dC9UZXh0VXRpbC5oLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVUZXh0SXRl
bTo6c3RhcnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVUZXh0SXRl
bTo6ZW5kIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lVGV4dEl0ZW06
Omxlbmd0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZVRleHRJdGVt
Ojppc1doaXRlc3BhY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVU
ZXh0SXRlbTo6aXNDb2xsYXBzZWQgY29uc3QpOgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3Jt
YXR0aW5nL3RleHQvVGV4dFV0aWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpUZXh0
VXRpbDo6aHlwaGVuUG9zaXRpb25CZWZvcmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpU
ZXh0VXRpbDo6d2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpUZXh0VXRpbDo6Zml4
ZWRQaXRjaFdpZHRoKToKKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy90ZXh0L1Rl
eHRVdGlsLmg6CisgICAgICAgICogbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0Qm94Lmg6CisgICAg
ICAgICogbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0UmVwbGFjZWQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpSZXBsYWNlZDo6aW50cmluc2ljUmF0aW8gY29uc3QpOgorICAgICAgICAq
IGxheW91dC9sYXlvdXR0cmVlL0xheW91dFRyZWVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6YWNjdW11bGF0ZWRPZmZzZXRGb3JJbkZsb3dQb3NpdGlvbmVkQ29udGludWF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6VHJlZUJ1aWxkZXI6OmNyZWF0ZVN1YlRy
ZWUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpvdXRwdXRJbmxpbmVSdW5zKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6b3V0cHV0TGF5b3V0Qm94KToKKwogMjAxOS0wNS0yMSAgU2Fh
bSBiYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBXSExTTDogQWRkIGFuIEFT
VCBkdW1wZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNl
L1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggMDQyMGM1MDNjY2NlOGYxNTYwODU0MjRmYjRkYWJl
YWI1NTI3YTdlYy4uY2MxZDY5Yjg5NTYzMjgzZTY5ZDBkMDk2NzA4YjA2YWVkZWM4YzNmMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUv
U291cmNlcy50eHQKQEAgLTEzNDcsNyArMTM0Nyw3IEBAIGxheW91dC9pbmxpbmVmb3JtYXR0aW5n
L0lubGluZUZvcm1hdHRpbmdDb250ZXh0TGluZUxheW91dC5jcHAKIGxheW91dC9pbmxpbmVmb3Jt
YXR0aW5nL0lubGluZUZvcm1hdHRpbmdTdGF0ZS5jcHAKIGxheW91dC9pbmxpbmVmb3JtYXR0aW5n
L0lubGluZUludmFsaWRhdGlvbi5jcHAKIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxp
bmVCcmVha2VyLmNwcAotbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lUnVuUHJvdmlkZXIu
Y3BwCitsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVUZXh0SXRlbS5jcHAKIGxheW91dC9p
bmxpbmVmb3JtYXR0aW5nL3RleHQvVGV4dFV0aWwuY3BwCiBsYXlvdXQvbGF5b3V0dHJlZS9MYXlv
dXRCbG9ja0NvbnRhaW5lci5jcHAKIGxheW91dC9sYXlvdXR0cmVlL0xheW91dEJveC5jcHAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
aiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRl
eCA1MjJiNmQwOGNjMGQzOWEzNGQ1YzE1NDI2NjY4MDA2ZDBlMWJhODkyLi4yN2Q3ZDdhODhlZDI5
ZGZlM2EzMDA2MjdlNjQ3ZTlmZDNlYjlkZWM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMDA4LDEwICsyMDA4LDkgQEAKIAkJ
NkVEODc4QzUxNDc0OTNGNDAwNEMzNTk3IC8qIFJlbmRlclRhYmxlQ2FwdGlvbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkVEODc4QzMxNDc0OTNGNDAw
NEMzNTk3IC8qIFJlbmRlclRhYmxlQ2FwdGlvbi5oICovOyB9OwogCQk2RUQ4QzM3QTE4M0JGRjhD
MDA5RTUzQkQgLyogQm94U2hhcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDZFRDhDMzc4MTgzQkZGOEMwMDlFNTNCRCAvKiBCb3hTaGFwZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTZFRThBNzczMTBG
ODAzRjMwMDVBNEEyNCAvKiBKU1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFRThBNzcxMTBGODAzRjMwMDVBNEEy
NCAvKiBKU1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaCAqLzsgfTsKLQkJNkYyMTlENzcyMTc4RDM3
MjAwQkIwMzNDIC8qIElubGluZVJ1bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNkYyMTlENzQyMTc4RDM3MTAwQkIwMzNDIC8qIElubGluZVJ1bi5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTZGMUNDMURF
MjI1RjhCNDkwMDcyMEFEMiAvKiBJbmxpbmVUZXh0SXRlbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkYxQ0MxREQyMjVGOEI0MjAwNzIwQUQyIC8qIElu
bGluZVRleHRJdGVtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJNkYyMjJCNzYxQUI1MkQ4QTAwOTQ2NTFBIC8qIFdlYkdMVmVydGV4QXJyYXlPYmpl
Y3RCYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDZGMjIyQjc1MUFCNTJEOEEwMDk0NjUxQSAvKiBXZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5j
cHAgKi87IH07CiAJCTZGM0UxRjYyMjEzNjE0MjAwMEE2NUEwOCAvKiBGbG9hdEJveC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkYzRTFGNjEyMTM2MTQx
NzAwQTY1QTA4IC8qIEZsb2F0Qm94LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKLQkJNkY1MjE3QzcyMTc3RjVBNzAwNjU4M0JCIC8qIElubGluZVJ1blBy
b3ZpZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2
RjUyMTdDNDIxNzdGNUE2MDA2NTgzQkIgLyogSW5saW5lUnVuUHJvdmlkZXIuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2RjdDQTNDNjIwOEMyOTU3
MDAyRjI5QUIgLyogTGF5b3V0U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDZGN0NBM0M0MjA4QzI5NTYwMDJGMjlBQiAvKiBMYXlvdXRTdGF0ZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTZGN0NB
M0NBMjA4QzJCMkUwMDJGMjlBQiAvKiBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkY3Q0EzQzgyMDhDMkIyRTAw
MkYyOUFCIC8qIElubGluZUZvcm1hdHRpbmdDb250ZXh0LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNkY5OTVBMTUxQTcwNzU2MjAwQTczNUY0IC8q
IFdlYkdMU3luYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA2Rjk5NUExMzFBNzA3NTYyMDBBNzM1RjQgLyogV2ViR0xTeW5jLmNwcCAqLzsgfTsKQEAg
LTIwMzEsNyArMjAzMCwxMCBAQAogCQk2Rjk5NUEzQTFBNzA4MzM3MDBBNzM1RjQgLyogSlNXZWJH
TFZlcnRleEFycmF5T2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA2Rjk5NUEzMDFBNzA4MzM3MDBBNzM1RjQgLyogSlNXZWJHTFZlcnRleEFycmF5
T2JqZWN0LmggKi87IH07CiAJCTZGQTQ0NTRFODk4RjJGQzE2OEJDMzhDMSAvKiBKU0JlZm9yZVVu
bG9hZEV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAyOUUwNEEyN0JFRDJGODFGOThFOTAyMkIgLyogSlNCZWZvcmVVbmxvYWRFdmVudC5oICovOyB9
OwogCQk2RkIxMUI1QzIxNzgzRkQwMDBFMkE1NzQgLyogVGV4dFV0aWwuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZGQjExQjU5MjE3ODNGQ0YwMEUyQTU3
NCAvKiBUZXh0VXRpbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTZGQjQ3RTYzMjI3NzQyNUEwMEM3QkNCMCAvKiBJbmxpbmVMaW5lQm94LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RkI0N0U2MTIyNzc0
MjVBMDBDN0JDQjAgLyogSW5saW5lTGluZUJveC5oICovOyB9OwogCQk2RkI1RTIxNDIyMUYyNDUz
MDAzOTg5Q0YgLyogQ29udGVudENoYW5nZU9ic2VydmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RkI1RTIxMjIyMUYyNDQ3MDAzOTg5Q0YgLyogQ29u
dGVudENoYW5nZU9ic2VydmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJNkZDRTFBMUEyMjYxOEFCRDAwNEYwMzQzIC8qIERpc3BsYXlSdW4uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZGQ0UxQTE4MjI2
MThBQjMwMDRGMDM0MyAvKiBEaXNwbGF5UnVuLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNkZEOUNENTQyMjdFMjFDODAwRTUzOTU3IC8qIERpc3Bs
YXlSZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2
RkQ5Q0Q1MjIyN0UyMUM4MDBFNTM5NTcgLyogRGlzcGxheVJlY3QuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2RkUxOTgxNzIxNzgzOTdDMDA0NDZG
MDggLyogSW5saW5lTGluZUJyZWFrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDZGRTE5ODE1MjE3ODM5N0MwMDQ0NkYwOCAvKiBJbmxpbmVMaW5lQnJl
YWtlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTZGRTdDRkEyMjE3N0VFRjIwMDVCMTU3MyAvKiBJbmxpbmVJdGVtLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RkU3Q0ZBMDIxNzdFRUYxMDA1QjE1NzMg
LyogSW5saW5lSXRlbS5oICovOyB9OwogCQk2RkU3Q0ZBNDIxNzdFRjEwMDA1QjE1NzMgLyogTGF5
b3V0TGluZUJyZWFrQm94LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA2RkU3Q0ZBMzIxNzdFRjEwMDA1QjE1NzMgLyogTGF5b3V0TGluZUJyZWFrQm94Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTkxMDIs
MTUgKzkxMDQsMTQgQEAKIAkJNkVFOEE3NzAxMEY4MDNGMzAwNUE0QTI0IC8qIEpTV2ViR0xDb250
ZXh0QXR0cmlidXRlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBK
U1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk2RUU4QTc3MTEwRjgwM0YzMDA1QTRBMjQgLyogSlNXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV2ViR0xDb250ZXh0QXR0cmlidXRl
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RjA4MzBERjIwQjQ2OTUxMDA4QTk0
NUIgLyogQmxvY2tGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEJsb2NrRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTZGMjE5RDc0MjE3OEQzNzEwMEJCMDMzQyAvKiBJbmxpbmVSdW4uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5saW5lUnVuLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTZGMUNDMURDMjI1RjhCNDEwMDcyMEFEMiAvKiBJbmxpbmVUZXh0SXRl
bS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmxpbmVUZXh0SXRlbS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTZGMUNDMUREMjI1RjhCNDIwMDcyMEFEMiAvKiBJbmxpbmVUZXh0
SXRlbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBJbmxpbmVUZXh0SXRlbS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk2RjIyMkI3NDFBQjUyRDY0MDA5NDY1MUEgLyogV2ViR0xWZXJ0ZXhBcnJh
eU9iamVjdEJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkYyMjJCNzUxQUI1MkQ4QTAwOTQ2NTFB
IC8qIFdlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFdlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkYyNUIyMDAyMjBBODVBQjAwMDAwMTFCIC8qIElubGluZUZv
cm1hdHRpbmdDb250ZXh0TGluZUxheW91dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmxpbmVG
b3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk2RjM1RUZBRjIxODdDQkQ1MDA0NEUwRjQgLyogSW5saW5lRm9ybWF0dGluZ0NvbnRleHRH
ZW9tZXRyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmxpbmVG
b3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNkYzRTFGNUYyMTM2MTQxNzAwQTY1QTA4IC8qIEZsb2F0Qm94LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEZsb2F0Qm94LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkYzRTFG
NjEyMTM2MTQxNzAwQTY1QTA4IC8qIEZsb2F0Qm94LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZsb2F0Qm94
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZGNTIxN0M0MjE3N0Y1QTYwMDY1ODNC
QiAvKiBJbmxpbmVSdW5Qcm92aWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJbmxpbmVSdW5Qcm92aWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2RjUy
MTdDNjIxNzdGNUE2MDA2NTgzQkIgLyogSW5saW5lUnVuUHJvdmlkZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5saW5lUnVuUHJvdmlkZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk2RjczOTE4QzIxMDZDRUREMDA2QUYyNjIgLyogTGF5b3V0
VW5pdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGF5b3V0VW5pdHMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNkY3Q0EzQzQyMDhDMjk1NjAwMkYyOUFCIC8qIExheW91dFN0YXRlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IExheW91dFN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTZGN0NBM0M1MjA4QzI5NTYwMDJGMjlBQiAvKiBMYXlvdXRTdGF0ZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBMYXlvdXRTdGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05
MTQ1LDggKzkxNDYsMTEgQEAKIAkJNkY5OTVBMzAxQTcwODMzNzAwQTczNUY0IC8qIEpTV2ViR0xW
ZXJ0ZXhBcnJheU9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dl
YkdMVmVydGV4QXJyYXlPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkZC
MTFCNTkyMTc4M0ZDRjAwRTJBNTc0IC8qIFRleHRVdGlsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFRleHRVdGlsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZG
QjExQjVCMjE3ODNGQ0YwMEUyQTU3NCAvKiBUZXh0VXRpbC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBUZXh0VXRpbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTZGQjQ3RTYxMjI3NzQyNUEwMEM3QkNCMCAvKiBJbmxpbmVMaW5lQm94LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElubGluZUxpbmVCb3guaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNkZCNUUyMTIyMjFGMjQ0NzAwMzk4OUNGIC8qIENvbnRlbnRDaGFu
Z2VPYnNlcnZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb250ZW50Q2hhbmdlT2JzZXJ2ZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkZCQjg2MDUyMEI0NjRCNjAwREFEOTM4IC8qIEZv
cm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9ybWF0dGlu
Z0NvbnRleHRHZW9tZXRyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZGQ0Ux
QTE4MjI2MThBQjMwMDRGMDM0MyAvKiBEaXNwbGF5UnVuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpc3Bs
YXlSdW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkZEOUNENTIyMjdFMjFDODAw
RTUzOTU3IC8qIERpc3BsYXlSZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IERpc3BsYXlSZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGRTE5ODEzMjE3
ODM5N0IwMDQ0NkYwOCAvKiBJbmxpbmVMaW5lQnJlYWtlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBJbmxpbmVMaW5lQnJlYWtlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTZGRTE5ODE1MjE3ODM5N0MwMDQ0NkYwOCAvKiBJbmxpbmVMaW5lQnJl
YWtlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmxpbmVMaW5lQnJlYWtl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RkU3QUEyNjIxQzM3QjYzMDAyOTZE
Q0QgLyogTWFyZ2luVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFyZ2luVHlwZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2MzYwLDExICsxNjM2NCwxMSBAQAogCQkJCTExMjNB
RkREMjA5QUJCQkEwMDczNkFDQyAvKiBJbmxpbmVJbnZhbGlkYXRpb24uY3BwICovLAogCQkJCTEx
MjNBRkRDMjA5QUJCQkEwMDczNkFDQyAvKiBJbmxpbmVJbnZhbGlkYXRpb24uaCAqLywKIAkJCQk2
RkU3Q0ZBMDIxNzdFRUYxMDA1QjE1NzMgLyogSW5saW5lSXRlbS5oICovLAorCQkJCTZGQjQ3RTYx
MjI3NzQyNUEwMEM3QkNCMCAvKiBJbmxpbmVMaW5lQm94LmggKi8sCiAJCQkJNkZFMTk4MTMyMTc4
Mzk3QjAwNDQ2RjA4IC8qIElubGluZUxpbmVCcmVha2VyLmNwcCAqLywKIAkJCQk2RkUxOTgxNTIx
NzgzOTdDMDA0NDZGMDggLyogSW5saW5lTGluZUJyZWFrZXIuaCAqLywKLQkJCQk2RjIxOUQ3NDIx
NzhEMzcxMDBCQjAzM0MgLyogSW5saW5lUnVuLmggKi8sCi0JCQkJNkY1MjE3QzYyMTc3RjVBNjAw
NjU4M0JCIC8qIElubGluZVJ1blByb3ZpZGVyLmNwcCAqLywKLQkJCQk2RjUyMTdDNDIxNzdGNUE2
MDA2NTgzQkIgLyogSW5saW5lUnVuUHJvdmlkZXIuaCAqLywKKwkJCQk2RjFDQzFEQzIyNUY4QjQx
MDA3MjBBRDIgLyogSW5saW5lVGV4dEl0ZW0uY3BwICovLAorCQkJCTZGMUNDMUREMjI1RjhCNDIw
MDcyMEFEMiAvKiBJbmxpbmVUZXh0SXRlbS5oICovLAogCQkJKTsKIAkJCXBhdGggPSBpbmxpbmVm
b3JtYXR0aW5nOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTE2Mzc0LDYgKzE2Mzc4
LDggQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCTExOTlGQTVBMjA4RTNDN0YwMDIzNThDQyAvKiBE
aXNwbGF5Qm94LmNwcCAqLywKIAkJCQkxMTk5RkE1OTIwOEUzQzdGMDAyMzU4Q0MgLyogRGlzcGxh
eUJveC5oICovLAorCQkJCTZGRDlDRDUyMjI3RTIxQzgwMEU1Mzk1NyAvKiBEaXNwbGF5UmVjdC5o
ICovLAorCQkJCTZGQ0UxQTE4MjI2MThBQjMwMDRGMDM0MyAvKiBEaXNwbGF5UnVuLmggKi8sCiAJ
CQkpOwogCQkJcGF0aCA9IGRpc3BsYXl0cmVlOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
QEAgLTE2OTk4LDExICsxNzAwNCwxMSBAQAogCQkxQ0EwQzJGNjIxRUVEQUQyMDBBMTE4NjAgLyog
QVNUICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQk1MjE1
ODYyQzIyOTM3N0I3MDA1OTI1RUYgLyogV0hMU0xBU1QuaCAqLywKIAkJCQkxQzg0MEI5MDIxRUMz
MEY5MDBEMDUwMEQgLyogV0hMU0xBZGRyZXNzU3BhY2UuaCAqLywKIAkJCQlDMjFCRjcyNTIxQ0Q4
OUUyMDAyMjc5NzkgLyogV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaCAqLywKIAkJCQlDMjFCRjcw
OTIxQ0Q4OUNBMDAyMjc5NzkgLyogV0hMU0xBcnJheVR5cGUuaCAqLywKIAkJCQlDMjFCRjczMDIx
Q0Q4OUVEMDAyMjc5NzkgLyogV0hMU0xBc3NpZ25tZW50RXhwcmVzc2lvbi5oICovLAorCQkJCTUy
MTU4NjJDMjI5Mzc3QjcwMDU5MjVFRiAvKiBXSExTTEFTVC5oICovLAogCQkJCUMyMUJGNzBBMjFD
RDg5Q0IwMDIyNzk3OSAvKiBXSExTTEJhc2VGdW5jdGlvbkF0dHJpYnV0ZS5oICovLAogCQkJCUMy
MUJGNkZBMjFDRDg5QkUwMDIyNzk3OSAvKiBXSExTTEJhc2VTZW1hbnRpYy5oICovLAogCQkJCUMy
MUJGNzFFMjFDRDg5REMwMDIyNzk3OSAvKiBXSExTTEJsb2NrLmggKi8sCkBAIC0yODc5NSwxMSAr
Mjg4MDEsMTMgQEAKIAkJCQkwRkU1RkJENTFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RJ
dGVtcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNUZCRDcxQzNERDUxRTAwMDdBMkNBIC8qIERp
c3BsYXlMaXN0UmVjb3JkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTVGQkQ5MUMzREQ1MUUw
MDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlcGxheWVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk2RkQ5
Q0Q1NDIyN0UyMUM4MDBFNTM5NTcgLyogRGlzcGxheVJlY3QuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTQ5QUYyRDY5MTQ0MzVEMDUwMDE2QTc4NCAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3IuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTJEMjlFQ0M2MTkyRUNDODMwMDk4NEI3OCAvKiBEaXNwbGF5UmVmcmVz
aE1vbml0b3JDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTJEMjlFQ0NBMTkyRjFGMUQwMDk4
NEI3OCAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3JJT1MuaCBpbiBIZWFkZXJzICovLAogCQkJCTJE
RTcwMDIzMTkyRkU4MkEwMEIwOTc1QyAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3JNYWMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTJEMjlFQ0M4MTkyRUNDODMwMDk4NEI3OCAvKiBEaXNwbGF5UmVmcmVz
aE1vbml0b3JNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQk2RkNFMUExQTIyNjE4QUJEMDA0
RjAzNDMgLyogRGlzcGxheVJ1bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQzMTYwOTExMkIwMjZG
NzAwQzFBMzU5IC8qIERpc3RhbmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NDczMEQ3NzEyNDhG
MEIzMDBEM0E5QzkgLyogRGlzdGFudExpZ2h0U291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
MkYzNEZFNjBFODJGODE0MDBGNjI3Q0QgLyogRE5TLmggaW4gSGVhZGVycyAqLywKQEAgLTI5NDI5
LDEyICsyOTQzNywxMiBAQAogCQkJCTExMzEwQ0Y4MjBCQTRBNkEwMDY1QThEMCAvKiBJbmxpbmVJ
bnZhbGlkYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTZGRTdDRkEyMjE3N0VFRjIwMDVCMTU3
MyAvKiBJbmxpbmVJdGVtLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0U3ODkxNjExMjBENjA4MDA2
MEVDRTUgLyogSW5saW5lSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTZGQjQ3RTYzMjI3
NzQyNUEwMEM3QkNCMCAvKiBJbmxpbmVMaW5lQm94LmggaW4gSGVhZGVycyAqLywKIAkJCQk2RkUx
OTgxNzIxNzgzOTdDMDA0NDZGMDggLyogSW5saW5lTGluZUJyZWFrZXIuaCBpbiBIZWFkZXJzICov
LAotCQkJCTZGMjE5RDc3MjE3OEQzNzIwMEJCMDMzQyAvKiBJbmxpbmVSdW4uaCBpbiBIZWFkZXJz
ICovLAotCQkJCTZGNTIxN0M3MjE3N0Y1QTcwMDY1ODNCQiAvKiBJbmxpbmVSdW5Qcm92aWRlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQUE0QzNBNzcwQjJCMTY3OTAwMjMzNEEyIC8qIElubGluZVN0
eWxlU2hlZXRPd25lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFQTQ4NUEwOTdEOTMwMjAwOTRD
OUU0IC8qIElubGluZVRleHRCb3guaCBpbiBIZWFkZXJzICovLAogCQkJCTFDMDEwNzAxMTkyNTk0
REYwMDhBNDIwMSAvKiBJbmxpbmVUZXh0Qm94U3R5bGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTZG
MUNDMURFMjI1RjhCNDkwMDcyMEFEMiAvKiBJbmxpbmVUZXh0SXRlbS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNTEwQTU4RTUxQkFBNDBCMTAwQzE5MjgyIC8qIEluUHJvY2Vzc0lEQlNlcnZlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMkVCNzY3NTcxREExOUJERjAwM0UyM0I1IC8qIElucHV0RXZlbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUU1MkVGREY0MjExMjg3NUEwMEFEMjgyQSAvKiBJbnB1dE1v
ZGUuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zv
cm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1h
dHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwCmluZGV4IDQxMzZhZDJiZjdlMzk3YTY5OTRiMWY2NjFm
ODQ3ZDNjNWM2NWRhYjIuLjVlODk4NmJmYjcyZGRlOGY0MzA1NzNkM2MwMjk4MDI2NDk3ZjFlMzgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nQ29udGV4dEdlb21l
dHJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvRm9ybWF0dGluZ0NvbnRleHRHZW9t
ZXRyeS5jcHAKQEAgLTExMiw4ICsxMTIsOCBAQCBzdGF0aWMgTGF5b3V0VW5pdCBjb250ZW50SGVp
Z2h0Rm9yRm9ybWF0dGluZ0NvbnRleHRSb290KGNvbnN0IExheW91dFN0YXRlJiBsYXlvdQogICAg
ICAgICAvLyBUaGlzIGlzIHRlbXAgYW5kIHdpbGwgYmUgcmVwbGFjZWQgYnkgdGhlIGNvcnJlY3Qg
ZGlzcGxheSBib3ggb25jZSBpbmxpbmUgcnVucyBtb3ZlIG92ZXIgdG8gdGhlIGRpc3BsYXkgdHJl
ZS4KICAgICAgICAgYXV0byYgaW5saW5lUnVucyA9IGRvd25jYXN0PElubGluZUZvcm1hdHRpbmdT
dGF0ZT4obGF5b3V0U3RhdGUuZXN0YWJsaXNoZWRGb3JtYXR0aW5nU3RhdGUobGF5b3V0Qm94KSku
aW5saW5lUnVucygpOwogICAgICAgICBpZiAoIWlubGluZVJ1bnMuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgICAgICB0b3AgPSBpbmxpbmVSdW5zWzBdLmxvZ2ljYWxUb3AoKTsKLSAgICAgICAgICAgIGJv
dHRvbSA9ICBpbmxpbmVSdW5zLmxhc3QoKS5sb2dpY2FsQm90dG9tKCk7CisgICAgICAgICAgICB0
b3AgPSBpbmxpbmVSdW5zWzBdLT5sb2dpY2FsVG9wKCk7CisgICAgICAgICAgICBib3R0b20gPSAg
aW5saW5lUnVucy5sYXN0KCktPmxvZ2ljYWxCb3R0b20oKTsKICAgICAgICAgfQogICAgIH0gZWxz
ZSBpZiAoZm9ybWF0dGluZ1Jvb3RDb250YWluZXIuZXN0YWJsaXNoZXNCbG9ja0Zvcm1hdHRpbmdD
b250ZXh0KCkgfHwgbGF5b3V0Qm94LmlzRG9jdW1lbnRCb3goKSkgewogICAgICAgICBpZiAoZm9y
bWF0dGluZ1Jvb3RDb250YWluZXIuaGFzSW5GbG93Q2hpbGQoKSkgewpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbGF5b3V0L1ZlcmlmaWNhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvVmVyaWZpY2F0aW9uLmNwcAppbmRleCAyZTc3YzM5ZTkyMTQ0OTQyZWYyOWU0MGU0Yzc0MzZl
NTExMjAwYmMyLi5kN2ZlNmE5ZjE5MTc0OTVhZTU2ZWViZGQ3OGI1YWZlNDhmNWNkYzFjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvVmVyaWZpY2F0aW9uLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvVmVyaWZpY2F0aW9uLmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2lu
Y2x1ZGUgIkxheW91dFRyZWVCdWlsZGVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyQm94LmgiCiAjaW5j
bHVkZSAiUmVuZGVySW5saW5lLmgiCisjaW5jbHVkZSAiUmVuZGVyTGluZUJyZWFrLmgiCiAjaW5j
bHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIApA
QCAtNDYsNyArNDcsNyBAQCBzdGF0aWMgYm9vbCBhcmVFc3NlbnRpYWxseUVxdWFsKGZsb2F0IGEs
IExheW91dFVuaXQgYikKICAgICBpZiAoYSA9PSBiLnRvRmxvYXQoKSkKICAgICAgICAgcmV0dXJu
IHRydWU7CiAKLSAgICByZXR1cm4gZmFicyhhIC0gYi50b0Zsb2F0KCkpIDw9IDggKiBMYXlvdXRV
bml0OjplcHNpbG9uKCk7CisgICAgcmV0dXJuIGZhYnMoYSAtIGIudG9GbG9hdCgpKSA8PSAxMCAq
IExheW91dFVuaXQ6OmVwc2lsb24oKTsKIH0KIAogc3RhdGljIGJvb2wgb3V0cHV0TWlzbWF0Y2hp
bmdTaW1wbGVMaW5lSW5mb3JtYXRpb25JZk5lZWRlZChUZXh0U3RyZWFtJiBzdHJlYW0sIGNvbnN0
IExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgY29uc3QgUmVuZGVyQmxvY2tGbG93JiBibG9ja0Zs
b3csIGNvbnN0IENvbnRhaW5lciYgaW5saW5lRm9ybWF0dGluZ1Jvb3QpCkBAIC03MiwzMyArNzMs
MzcgQEAgc3RhdGljIGJvb2wgb3V0cHV0TWlzbWF0Y2hpbmdTaW1wbGVMaW5lSW5mb3JtYXRpb25J
Zk5lZWRlZChUZXh0U3RyZWFtJiBzdHJlYW0sIGMKICAgICAgICAgYXV0byYgc2ltcGxlUnVuID0g
bGluZUxheW91dERhdGEtPnJ1bkF0KGkpOwogICAgICAgICBhdXRvJiBpbmxpbmVSdW4gPSBpbmxp
bmVSdW5MaXN0W2ldOwogCi0gICAgICAgIGF1dG8gbWF0Y2hpbmdSdW5zID0gYXJlRXNzZW50aWFs
bHlFcXVhbChzaW1wbGVSdW4ubG9naWNhbExlZnQsIGlubGluZVJ1bi5sb2dpY2FsTGVmdCgpKSAm
JiBhcmVFc3NlbnRpYWxseUVxdWFsKHNpbXBsZVJ1bi5sb2dpY2FsUmlnaHQsIGlubGluZVJ1bi5s
b2dpY2FsUmlnaHQoKSk7Ci0gICAgICAgIGlmIChtYXRjaGluZ1J1bnMpCi0gICAgICAgICAgICBt
YXRjaGluZ1J1bnMgPSAoc2ltcGxlUnVuLnN0YXJ0ID09IGlubGluZVJ1bi50ZXh0Q29udGV4dCgp
LT5zdGFydCgpICYmIHNpbXBsZVJ1bi5lbmQgPT0gKGlubGluZVJ1bi50ZXh0Q29udGV4dCgpLT5z
dGFydCgpICsgaW5saW5lUnVuLnRleHRDb250ZXh0KCktPmxlbmd0aCgpKSk7CisgICAgICAgIGF1
dG8gbWF0Y2hpbmdSdW5zID0gYXJlRXNzZW50aWFsbHlFcXVhbChzaW1wbGVSdW4ubG9naWNhbExl
ZnQsIGlubGluZVJ1bi0+bG9naWNhbExlZnQoKSkgJiYgYXJlRXNzZW50aWFsbHlFcXVhbChzaW1w
bGVSdW4ubG9naWNhbFJpZ2h0LCBpbmxpbmVSdW4tPmxvZ2ljYWxSaWdodCgpKTsKKyAgICAgICAg
aWYgKG1hdGNoaW5nUnVucyAmJiBpbmxpbmVSdW4tPnRleHRDb250ZXh0KCkpIHsKKyAgICAgICAg
ICAgIG1hdGNoaW5nUnVucyA9IHNpbXBsZVJ1bi5zdGFydCA9PSBpbmxpbmVSdW4tPnRleHRDb250
ZXh0KCktPnN0YXJ0KCkgJiYgc2ltcGxlUnVuLmVuZCA9PSBpbmxpbmVSdW4tPnRleHRDb250ZXh0
KCktPmVuZCgpOworICAgICAgICAgICAgLy8gU0xMIGhhbmRsZXMgc3RyaW5ncyBpbiBhIG1vcmUg
Y29uY2F0ZW5hdGVkIGZvcm1hdCA8ZGl2PmZvbzxicj5iYXI8L2Rpdj4gLT4gZm9vIC0+IDAsMyBi
YXIgLT4gMyw2IHZzLiAwLDMgYW5kIDAsMworICAgICAgICAgICAgaWYgKCFtYXRjaGluZ1J1bnMp
CisgICAgICAgICAgICAgICAgbWF0Y2hpbmdSdW5zID0gKHNpbXBsZVJ1bi5lbmQgLSBzaW1wbGVS
dW4uc3RhcnQpID09IChpbmxpbmVSdW4tPnRleHRDb250ZXh0KCktPmVuZCgpIC0gaW5saW5lUnVu
LT50ZXh0Q29udGV4dCgpLT5zdGFydCgpKTsgCisgICAgICAgIH0KICAgICAgICAgaWYgKG1hdGNo
aW5nUnVucykKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIHN0cmVhbSA8PCAiTWlz
bWF0Y2hpbmc6IHNpbXBsZSBydW4oIiA8PCBzaW1wbGVSdW4uc3RhcnQgPDwgIiwgIiA8PCBzaW1w
bGVSdW4uZW5kIDw8ICIpICgiIDw8IHNpbXBsZVJ1bi5sb2dpY2FsTGVmdCA8PCAiLCAiIDw8IHNp
bXBsZVJ1bi5sb2dpY2FsUmlnaHQgPDwgIikgbGF5b3V0IHJ1bigiIDw8IGlubGluZVJ1bi50ZXh0
Q29udGV4dCgpLT5zdGFydCgpIDw8ICIsICIgPDwgaW5saW5lUnVuLnRleHRDb250ZXh0KCktPnN0
YXJ0KCkgKyBpbmxpbmVSdW4udGV4dENvbnRleHQoKS0+bGVuZ3RoKCkgPDwgIikgKCIgPDwgaW5s
aW5lUnVuLmxvZ2ljYWxMZWZ0KCkgPDwgIiwgIiA8PCBpbmxpbmVSdW4ubG9naWNhbFJpZ2h0KCkg
PDwgIikiOworICAgICAgICBzdHJlYW0gPDwgIk1pc21hdGNoaW5nOiBzaW1wbGUgcnVuKCIgPDwg
c2ltcGxlUnVuLnN0YXJ0IDw8ICIsICIgPDwgc2ltcGxlUnVuLmVuZCA8PCAiKSAoIiA8PCBzaW1w
bGVSdW4ubG9naWNhbExlZnQgPDwgIiwgIiA8PCBzaW1wbGVSdW4ubG9naWNhbFJpZ2h0IDw8ICIp
IGxheW91dCBydW4oIiA8PCBpbmxpbmVSdW4tPnRleHRDb250ZXh0KCktPnN0YXJ0KCkgPDwgIiwg
IiA8PCBpbmxpbmVSdW4tPnRleHRDb250ZXh0KCktPmVuZCgpIDw8ICIpICgiIDw8IGlubGluZVJ1
bi0+bG9naWNhbExlZnQoKSA8PCAiLCAiIDw8IGlubGluZVJ1bi0+bG9naWNhbFJpZ2h0KCkgPDwg
IikiOwogICAgICAgICBzdHJlYW0ubmV4dExpbmUoKTsKICAgICAgICAgbWlzbWF0Y2hlZCA9IHRy
dWU7CiAgICAgfQogICAgIHJldHVybiBtaXNtYXRjaGVkOwogfQogCi1zdGF0aWMgYm9vbCBjaGVj
a0Zvck1hdGNoaW5nTm9uVGV4dFJ1bnMoY29uc3QgSW5saW5lUnVuJiBpbmxpbmVSdW4sIGNvbnN0
IFdlYkNvcmU6OklubGluZUJveCYgaW5saW5lQm94KQorc3RhdGljIGJvb2wgY2hlY2tGb3JNYXRj
aGluZ05vblRleHRSdW5zKGNvbnN0IERpc3BsYXk6OlJ1biYgaW5saW5lUnVuLCBjb25zdCBXZWJD
b3JlOjpJbmxpbmVCb3gmIGlubGluZUJveCkKIHsKICAgICByZXR1cm4gYXJlRXNzZW50aWFsbHlF
cXVhbChpbmxpbmVCb3gubG9naWNhbExlZnQoKSwgaW5saW5lUnVuLmxvZ2ljYWxMZWZ0KCkpCiAg
ICAgICAgICYmIGFyZUVzc2VudGlhbGx5RXF1YWwoaW5saW5lQm94LmxvZ2ljYWxSaWdodCgpLCBp
bmxpbmVSdW4ubG9naWNhbFJpZ2h0KCkpCiAgICAgICAgICYmIGFyZUVzc2VudGlhbGx5RXF1YWwo
aW5saW5lQm94LmxvZ2ljYWxIZWlnaHQoKSwgaW5saW5lUnVuLmxvZ2ljYWxIZWlnaHQoKSk7CiB9
CiAKLXN0YXRpYyBib29sIGNoZWNrRm9yTWF0Y2hpbmdUZXh0UnVucyhjb25zdCBJbmxpbmVSdW4m
IGlubGluZVJ1biwgZmxvYXQgbG9naWNhbExlZnQsIGZsb2F0IGxvZ2ljYWxSaWdodCwgdW5zaWdu
ZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCwgZmxvYXQgbG9naWNhbEhlaWdodCkKK3N0YXRpYyBib29s
IGNoZWNrRm9yTWF0Y2hpbmdUZXh0UnVucyhjb25zdCBEaXNwbGF5OjpSdW4mIGlubGluZVJ1biwg
Y29uc3QgSW5saW5lVGV4dEJveCYgaW5saW5lVGV4dEJveCkKIHsKLSAgICByZXR1cm4gYXJlRXNz
ZW50aWFsbHlFcXVhbChsb2dpY2FsTGVmdCwgaW5saW5lUnVuLmxvZ2ljYWxMZWZ0KCkpCi0gICAg
ICAgICYmIGFyZUVzc2VudGlhbGx5RXF1YWwobG9naWNhbFJpZ2h0LCBpbmxpbmVSdW4ubG9naWNh
bFJpZ2h0KCkpCi0gICAgICAgICYmIHN0YXJ0ID09IGlubGluZVJ1bi50ZXh0Q29udGV4dCgpLT5z
dGFydCgpCi0gICAgICAgICYmIChlbmQgPT0gKGlubGluZVJ1bi50ZXh0Q29udGV4dCgpLT5zdGFy
dCgpICsgaW5saW5lUnVuLnRleHRDb250ZXh0KCktPmxlbmd0aCgpKSkKLSAgICAgICAgJiYgYXJl
RXNzZW50aWFsbHlFcXVhbChsb2dpY2FsSGVpZ2h0LCBpbmxpbmVSdW4ubG9naWNhbEhlaWdodCgp
KTsKKyAgICByZXR1cm4gYXJlRXNzZW50aWFsbHlFcXVhbChpbmxpbmVUZXh0Qm94LmxvZ2ljYWxM
ZWZ0KCksIGlubGluZVJ1bi5sb2dpY2FsTGVmdCgpKQorICAgICAgICAmJiBhcmVFc3NlbnRpYWxs
eUVxdWFsKGlubGluZVRleHRCb3gubG9naWNhbFJpZ2h0KCksIGlubGluZVJ1bi5sb2dpY2FsUmln
aHQoKSkKKyAgICAgICAgJiYgaW5saW5lVGV4dEJveC5zdGFydCgpID09IGlubGluZVJ1bi50ZXh0
Q29udGV4dCgpLT5zdGFydCgpCisgICAgICAgICYmIChpbmxpbmVUZXh0Qm94LmVuZCgpICsgMSkg
PT0gaW5saW5lUnVuLnRleHRDb250ZXh0KCktPmVuZCgpCisgICAgICAgICYmIGFyZUVzc2VudGlh
bGx5RXF1YWwoaW5saW5lVGV4dEJveC5sb2dpY2FsSGVpZ2h0KCksIGlubGluZVJ1bi5sb2dpY2Fs
SGVpZ2h0KCkpOwogfQogCiBzdGF0aWMgdm9pZCBjb2xsZWN0Rmxvd0JveFN1YnRyZWUoY29uc3Qg
SW5saW5lRmxvd0JveCYgZmxvd2JveCwgVmVjdG9yPFdlYkNvcmU6OklubGluZUJveCo+JiBpbmxp
bmVCb3hlcykKQEAgLTEyNiwxOSArMTMxLDYgQEAgc3RhdGljIHZvaWQgY29sbGVjdElubGluZUJv
eGVzKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgcm9vdCwgVmVjdG9yPFdlYkNvcmU6OklubGkKICAg
ICB9CiB9CiAKLXN0YXRpYyBMYXlvdXRVbml0IHJlc29sdmVGb3JSZWxhdGl2ZVBvc2l0aW9uSWZO
ZWVkZWQoY29uc3QgSW5saW5lVGV4dEJveCYgaW5saW5lVGV4dEJveCkKLXsKLSAgICBMYXlvdXRV
bml0IHhPZmZzZXQ7Ci0gICAgYXV0byogcGFyZW50ID0gaW5saW5lVGV4dEJveC5wYXJlbnQoKTsK
LSAgICB3aGlsZSAoaXM8SW5saW5lRmxvd0JveD4ocGFyZW50KSkgewotICAgICAgICBhdXRvJiBy
ZW5kZXJlciA9IHBhcmVudC0+cmVuZGVyZXIoKTsKLSAgICAgICAgaWYgKHJlbmRlcmVyLmlzSW5G
bG93UG9zaXRpb25lZCgpKQotICAgICAgICAgICAgeE9mZnNldCA9IHJlbmRlcmVyLm9mZnNldEZv
ckluRmxvd1Bvc2l0aW9uKCkud2lkdGgoKTsKLSAgICAgICAgcGFyZW50ID0gcGFyZW50LT5wYXJl
bnQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHhPZmZzZXQ7Ci19Ci0KIHN0YXRpYyBib29sIG91dHB1
dE1pc21hdGNoaW5nQ29tcGxleExpbmVJbmZvcm1hdGlvbklmTmVlZGVkKFRleHRTdHJlYW0mIHN0
cmVhbSwgY29uc3QgTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBjb25zdCBSZW5kZXJCbG9ja0Zs
b3cmIGJsb2NrRmxvdywgY29uc3QgQ29udGFpbmVyJiBpbmxpbmVGb3JtYXR0aW5nUm9vdCkKIHsK
ICAgICBhdXRvJiBpbmxpbmVGb3JtYXR0aW5nU3RhdGUgPSBsYXlvdXRTdGF0ZS5lc3RhYmxpc2hl
ZEZvcm1hdHRpbmdTdGF0ZShpbmxpbmVGb3JtYXR0aW5nUm9vdCk7CkBAIC0xNTgsNjYgKzE1MCwz
MCBAQCBzdGF0aWMgYm9vbCBvdXRwdXRNaXNtYXRjaGluZ0NvbXBsZXhMaW5lSW5mb3JtYXRpb25J
Zk5lZWRlZChUZXh0U3RyZWFtJiBzdHJlYW0sCiAgICAgfQogCiAgICAgZm9yICh1bnNpZ25lZCBp
bmxpbmVCb3hJbmRleCA9IDA7IGlubGluZUJveEluZGV4IDwgaW5saW5lQm94ZXMuc2l6ZSgpICYm
IHJ1bkluZGV4IDwgaW5saW5lUnVuTGlzdC5zaXplKCk7ICsraW5saW5lQm94SW5kZXgpIHsKKyAg
ICAgICAgYXV0byYgaW5saW5lUnVuID0gaW5saW5lUnVuTGlzdFtydW5JbmRleF07CiAgICAgICAg
IGF1dG8qIGlubGluZUJveCA9IGlubGluZUJveGVzW2lubGluZUJveEluZGV4XTsKICAgICAgICAg
YXV0byogaW5saW5lVGV4dEJveCA9IGlzPElubGluZVRleHRCb3g+KGlubGluZUJveCkgPyBkb3du
Y2FzdDxJbmxpbmVUZXh0Qm94PihpbmxpbmVCb3gpIDogbnVsbHB0cjsKKyAgICAgICAgYm9vbCBt
YXRjaGluZ1J1bnMgPSBpbmxpbmVUZXh0Qm94ID8gY2hlY2tGb3JNYXRjaGluZ1RleHRSdW5zKCpp
bmxpbmVSdW4sICppbmxpbmVUZXh0Qm94KSA6IG1hdGNoaW5nUnVucyA9IGNoZWNrRm9yTWF0Y2hp
bmdOb25UZXh0UnVucygqaW5saW5lUnVuLCAqaW5saW5lQm94KTsKIAotICAgICAgICBhdXRvJiBp
bmxpbmVSdW4gPSBpbmxpbmVSdW5MaXN0W3J1bkluZGV4XTsKLSAgICAgICAgYXV0byBtYXRjaGlu
Z1J1bnMgPSBmYWxzZTsKLSAgICAgICAgaWYgKGlubGluZVRleHRCb3gpIHsKLSAgICAgICAgICAg
IGF1dG8geE9mZnNldCA9IHJlc29sdmVGb3JSZWxhdGl2ZVBvc2l0aW9uSWZOZWVkZWQoKmlubGlu
ZVRleHRCb3gpOwotICAgICAgICAgICAgbWF0Y2hpbmdSdW5zID0gY2hlY2tGb3JNYXRjaGluZ1Rl
eHRSdW5zKGlubGluZVJ1biwgaW5saW5lVGV4dEJveC0+bG9naWNhbExlZnQoKSArIHhPZmZzZXQs
Ci0gICAgICAgICAgICAgICAgaW5saW5lVGV4dEJveC0+bG9naWNhbFJpZ2h0KCkgKyB4T2Zmc2V0
LAotICAgICAgICAgICAgICAgIGlubGluZVRleHRCb3gtPnN0YXJ0KCksCi0gICAgICAgICAgICAg
ICAgaW5saW5lVGV4dEJveC0+ZW5kKCkgKyAxLAotICAgICAgICAgICAgICAgIGlubGluZVRleHRC
b3gtPmxvZ2ljYWxIZWlnaHQoKSk7Ci0KLSAgICAgICAgICAgIC8vIDxzcGFuPmZvb2Jhcjwvc3Bh
bj5mb29iYXIgZ2VuZXJhdGVzIDIgaW5saW5lIHRleHQgYm94ZXMgd2hpbGUgd2Ugb25seSBnZW5l
cmF0ZSBvbmUgaW5saW5lIHJ1bi4KLSAgICAgICAgICAgIC8vIGFsc28gPGRpdj5mb288aW1nIHN0
eWxlPSJmbG9hdDogbGVmdDsiPmJhcjwvZGl2PiB0b28uCi0gICAgICAgICAgICBhdXRvIGlubGlu
ZVJ1bkVuZCA9IGlubGluZVJ1bi50ZXh0Q29udGV4dCgpLT5zdGFydCgpICsgaW5saW5lUnVuLnRl
eHRDb250ZXh0KCktPmxlbmd0aCgpOwotICAgICAgICAgICAgYXV0byB0ZXh0UnVuTWlnaHRCZUV4
dGVuZGVkID0gIW1hdGNoaW5nUnVucyAmJiBpbmxpbmVUZXh0Qm94LT5lbmQoKSA8IGlubGluZVJ1
bkVuZCAmJiBpbmxpbmVCb3hJbmRleCA8IGlubGluZUJveGVzLnNpemUoKSAtIDE7Ci0KLSAgICAg
ICAgICAgIGlmICh0ZXh0UnVuTWlnaHRCZUV4dGVuZGVkKSB7Ci0gICAgICAgICAgICAgICAgYXV0
byBsb2dpY2FsTGVmdCA9IGlubGluZVRleHRCb3gtPmxvZ2ljYWxMZWZ0KCkgKyB4T2Zmc2V0Owot
ICAgICAgICAgICAgICAgIGF1dG8gbG9naWNhbFJpZ2h0ID0gaW5saW5lVGV4dEJveC0+bG9naWNh
bFJpZ2h0KCkgKyB4T2Zmc2V0OwotICAgICAgICAgICAgICAgIGF1dG8gc3RhcnQgPSBpbmxpbmVU
ZXh0Qm94LT5zdGFydCgpOwotICAgICAgICAgICAgICAgIGF1dG8gZW5kID0gaW5saW5lVGV4dEJv
eC0+ZW5kKCkgKyAxOwotICAgICAgICAgICAgICAgIGF1dG8gaW5kZXggPSArK2lubGluZUJveElu
ZGV4OwotICAgICAgICAgICAgICAgIGZvciAoOyBpbmRleCA8IGlubGluZUJveGVzLnNpemUoKTsg
KytpbmRleCkgewotICAgICAgICAgICAgICAgICAgICBhdXRvKiBpbmxpbmVCb3ggPSBpbmxpbmVC
b3hlc1tpbmRleF07Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8qIGlubGluZVRleHRCb3ggPSBp
czxJbmxpbmVUZXh0Qm94PihpbmxpbmVCb3gpID8gZG93bmNhc3Q8SW5saW5lVGV4dEJveD4oaW5s
aW5lQm94KSA6IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgICAgIC8vIENhbid0IG1peCBkaWZm
ZXJlbnQgaW5saW5lIGJveGVzLgotICAgICAgICAgICAgICAgICAgICBpZiAoIWlubGluZVRleHRC
b3gpCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgICAg
ICBhdXRvIHhPZmZzZXQgPSByZXNvbHZlRm9yUmVsYXRpdmVQb3NpdGlvbklmTmVlZGVkKCppbmxp
bmVUZXh0Qm94KTsKLSAgICAgICAgICAgICAgICAgICAgbG9naWNhbFJpZ2h0ID0gaW5saW5lVGV4
dEJveC0+bG9naWNhbFJpZ2h0KCkgKyB4T2Zmc2V0OwotICAgICAgICAgICAgICAgICAgICBlbmQg
Kz0gKGlubGluZVRleHRCb3gtPmVuZCgpICsgMSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChj
aGVja0Zvck1hdGNoaW5nVGV4dFJ1bnMoaW5saW5lUnVuLCBsb2dpY2FsTGVmdCwgbG9naWNhbFJp
Z2h0LCBzdGFydCwgZW5kLCBpbmxpbmVUZXh0Qm94LT5sb2dpY2FsSGVpZ2h0KCkpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBtYXRjaGluZ1J1bnMgPSB0cnVlOwotICAgICAgICAgICAgICAg
ICAgICAgICAgaW5saW5lQm94SW5kZXggPSBpbmRleDsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8g
V2VudCB0b28gZmFyPwotICAgICAgICAgICAgICAgICAgICBpZiAoZW5kID49IGlubGluZVJ1bkVu
ZCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgaWYgKCFtYXRjaGluZ1J1bnMpIHsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYg
KGlzPFJlbmRlckxpbmVCcmVhaz4oaW5saW5lQm94LT5yZW5kZXJlcigpKSkgeworICAgICAgICAg
ICAgICAgIC8vIDxicj4gcG9zaXRpb25pbmcgaXMgd2VpcmQgYXQgdGhpcyBwb2ludC4gSXQgbmVl
ZHMgcHJvcGVyIGJhc2VsaW5lLgorICAgICAgICAgICAgICAgIG1hdGNoaW5nUnVucyA9IHRydWU7
CisgICAgICAgICAgICAgICAgKytydW5JbmRleDsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtYXRjaGluZ1J1bnMg
PSBjaGVja0Zvck1hdGNoaW5nTm9uVGV4dFJ1bnMoaW5saW5lUnVuLCAqaW5saW5lQm94KTsKLQog
Ci0gICAgICAgIGlmICghbWF0Y2hpbmdSdW5zKSB7Ci0gICAgICAgICAgICBzdHJlYW0gPDwgIk1p
c21hdGNoaW5nOiBydW4gIjsKKyAgICAgICAgICAgIHN0cmVhbSA8PCAiTWlzbWF0Y2hpbmc6IHJ1
biI7CiAKICAgICAgICAgICAgIGlmIChpbmxpbmVUZXh0Qm94KQotICAgICAgICAgICAgICAgIHN0
cmVhbSA8PCAiKCIgPDwgaW5saW5lVGV4dEJveC0+c3RhcnQoKSA8PCAiLCAiIDw8IGlubGluZVRl
eHRCb3gtPmVuZCgpICsgMSA8PCAiKSI7Ci0gICAgICAgICAgICBzdHJlYW0gPDwgIiAoIiA8PCBp
bmxpbmVCb3gtPmxvZ2ljYWxMZWZ0KCkgPDwgIiwgIiA8PCBpbmxpbmVCb3gtPmxvZ2ljYWxSaWdo
dCgpIDw8ICIpICgiIDw8IGlubGluZUJveC0+bG9naWNhbFdpZHRoKCkgPDwgIngiIDw8IGlubGlu
ZUJveC0+bG9naWNhbEhlaWdodCgpIDw8ICIpIjsKKyAgICAgICAgICAgICAgICBzdHJlYW0gPDwg
IiAoIiA8PCBpbmxpbmVUZXh0Qm94LT5zdGFydCgpIDw8ICIsICIgPDwgaW5saW5lVGV4dEJveC0+
ZW5kKCkgKyAxIDw8ICIpIjsKKyAgICAgICAgICAgIHN0cmVhbSA8PCAiICgiIDw8IGlubGluZUJv
eC0+bG9naWNhbExlZnQoKSA8PCAiLCAiIDw8IGlubGluZUJveC0+bG9naWNhbFRvcCgpIDw8ICIp
ICgiIDw8IGlubGluZUJveC0+bG9naWNhbFdpZHRoKCkgPDwgIngiIDw8IGlubGluZUJveC0+bG9n
aWNhbEhlaWdodCgpIDw8ICIpIjsKIAotICAgICAgICAgICAgc3RyZWFtIDw8ICJpbmxpbmUgcnVu
ICI7Ci0gICAgICAgICAgICBpZiAoaW5saW5lUnVuLnRleHRDb250ZXh0KCkpCi0gICAgICAgICAg
ICAgICAgc3RyZWFtIDw8ICIoIiA8PCBpbmxpbmVSdW4udGV4dENvbnRleHQoKS0+c3RhcnQoKSA8
PCAiLCAiIDw8IGlubGluZVJ1bi50ZXh0Q29udGV4dCgpLT5zdGFydCgpICsgaW5saW5lUnVuLnRl
eHRDb250ZXh0KCktPmxlbmd0aCgpIDw8ICIpICI7Ci0gICAgICAgICAgICBzdHJlYW0gPDwgIigi
IDw8IGlubGluZVJ1bi5sb2dpY2FsTGVmdCgpIDw8ICIsICIgPDwgaW5saW5lUnVuLmxvZ2ljYWxS
aWdodCgpIDw8ICIpICgiIDw8IGlubGluZVJ1bi5sb2dpY2FsV2lkdGgoKSA8PCAieCIgPDwgaW5s
aW5lUnVuLmxvZ2ljYWxIZWlnaHQoKSA8PCAiKSI7CisgICAgICAgICAgICBzdHJlYW0gPDwgIiBp
bmxpbmUgcnVuIjsKKyAgICAgICAgICAgIGlmIChpbmxpbmVSdW4tPnRleHRDb250ZXh0KCkpCisg
ICAgICAgICAgICAgICAgc3RyZWFtIDw8ICIgKCIgPDwgaW5saW5lUnVuLT50ZXh0Q29udGV4dCgp
LT5zdGFydCgpIDw8ICIsICIgPDwgaW5saW5lUnVuLT50ZXh0Q29udGV4dCgpLT5lbmQoKSA8PCAi
KSI7CisgICAgICAgICAgICBzdHJlYW0gPDwgIiAoIiA8PCBpbmxpbmVSdW4tPmxvZ2ljYWxMZWZ0
KCkgPDwgIiwgIiA8PCBpbmxpbmVSdW4tPmxvZ2ljYWxUb3AoKSA8PCAiKSAoIiA8PCBpbmxpbmVS
dW4tPmxvZ2ljYWxXaWR0aCgpIDw8ICJ4IiA8PCBpbmxpbmVSdW4tPmxvZ2ljYWxIZWlnaHQoKSA8
PCAiKSI7CiAgICAgICAgICAgICBzdHJlYW0ubmV4dExpbmUoKTsKICAgICAgICAgICAgIG1pc21h
dGNoZWQgPSB0cnVlOwogICAgICAgICB9CkBAIC0yNDUsNyArMjAxLDcgQEAgc3RhdGljIGJvb2wg
b3V0cHV0TWlzbWF0Y2hpbmdCbG9ja0JveEluZm9ybWF0aW9uSWZOZWVkZWQoVGV4dFN0cmVhbSYg
c3RyZWFtLCBjb24KICAgICAgICAgLy8gUHJvZHVjZSBhIFJlbmRlckJveCBtYXRjaGluZyBtYXJn
aW4gYm94LgogICAgICAgICBhdXRvIGJvcmRlckJveCA9IGRpc3BsYXlCb3guYm9yZGVyQm94KCk7
CiAKLSAgICAgICAgcmV0dXJuIERpc3BsYXk6OkJveDo6UmVjdCB7CisgICAgICAgIHJldHVybiBE
aXNwbGF5OjpSZWN0IHsKICAgICAgICAgICAgIGJvcmRlckJveC50b3AoKSAtIGRpc3BsYXlCb3gu
bm9uQ29sbGFwc2VkTWFyZ2luQmVmb3JlKCksCiAgICAgICAgICAgICBib3JkZXJCb3gubGVmdCgp
IC0gZGlzcGxheUJveC5jb21wdXRlZE1hcmdpblN0YXJ0KCkudmFsdWVPcigwKSwKICAgICAgICAg
ICAgIGRpc3BsYXlCb3guY29tcHV0ZWRNYXJnaW5TdGFydCgpLnZhbHVlT3IoMCkgKyBib3JkZXJC
b3gud2lkdGgoKSArIGRpc3BsYXlCb3guY29tcHV0ZWRNYXJnaW5FbmQoKS52YWx1ZU9yKDApLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zv
cm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Jsb2Nr
Zm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwCmluZGV4IGY5NjMz
YjQzOGExYjFiMjI3ZGE1Yjg3MTQ2ZmYzMWViYzU2ODYyNWMuLjZkNzdlNWYzMWQ5ZTFiMjY2Njg3
ZTU5ZGQ3Nzg0YWVlNGU3ODNlN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9i
bG9ja2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrRm9ybWF0dGluZ0NvbnRl
eHRHZW9tZXRyeS5jcHAKQEAgLTc2LDggKzc2LDggQEAgSGVpZ2h0QW5kTWFyZ2luIEJsb2NrRm9y
bWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbkZsb3dOb25SZXBsYWNlZEhlaWdodEFuZE1hcmcK
ICAgICAgICAgLy8gMS4gdGhlIGJvdHRvbSBlZGdlIG9mIHRoZSBsYXN0IGxpbmUgYm94LCBpZiB0
aGUgYm94IGVzdGFibGlzaGVzIGEgaW5saW5lIGZvcm1hdHRpbmcgY29udGV4dCB3aXRoIG9uZSBv
ciBtb3JlIGxpbmVzCiAgICAgICAgIGlmIChsYXlvdXRCb3guZXN0YWJsaXNoZXNJbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dCgpKSB7CiAgICAgICAgICAgICAvLyBUaGlzIGlzIHRlbXAgYW5kIHdpbGwg
YmUgcmVwbGFjZWQgYnkgdGhlIGNvcnJlY3QgZGlzcGxheSBib3ggb25jZSBpbmxpbmUgcnVucyBt
b3ZlIG92ZXIgdG8gdGhlIGRpc3BsYXkgdHJlZS4KLSAgICAgICAgICAgIGF1dG8mIGlubGluZVJ1
bnMgPSBkb3duY2FzdDxJbmxpbmVGb3JtYXR0aW5nU3RhdGU+KGxheW91dFN0YXRlLmVzdGFibGlz
aGVkRm9ybWF0dGluZ1N0YXRlKGxheW91dEJveCkpLmlubGluZVJ1bnMoKTsKLSAgICAgICAgICAg
IGF1dG8gYm90dG9tRWRnZSA9IGlubGluZVJ1bnMuaXNFbXB0eSgpID8gTGF5b3V0VW5pdCgpIDog
aW5saW5lUnVucy5sYXN0KCkubG9naWNhbEJvdHRvbSgpOworICAgICAgICAgICAgYXV0byYgbGlu
ZUJveGVzID0gZG93bmNhc3Q8SW5saW5lRm9ybWF0dGluZ1N0YXRlPihsYXlvdXRTdGF0ZS5lc3Rh
Ymxpc2hlZEZvcm1hdHRpbmdTdGF0ZShsYXlvdXRCb3gpKS5saW5lQm94ZXMoKTsKKyAgICAgICAg
ICAgIGF1dG8gYm90dG9tRWRnZSA9IGxpbmVCb3hlcy5pc0VtcHR5KCkgPyBMYXlvdXRVbml0KCkg
OiBsaW5lQm94ZXMubGFzdCgpLmxvZ2ljYWxCb3R0b20oKTsKICAgICAgICAgICAgIHJldHVybiB7
IGJvdHRvbUVkZ2UgLSBib3JkZXJBbmRQYWRkaW5nVG9wLCBub25Db2xsYXBzZWRNYXJnaW4gfTsK
ICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZGlzcGxheXRy
ZWUvRGlzcGxheUJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZGlzcGxheXRyZWUvRGlz
cGxheUJveC5jcHAKaW5kZXggMGVlZWFlY2QzNzRhYWJkYjNhZWVmMDBjOGYzMTI0YTZjYWUwYWYz
OS4uNmFkZTQwNmQ1YzQyNzVlYWQ1YmYzNWUwMmQ0NzY2OGUwNmE1MzUwMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2Rpc3BsYXl0cmVlL0Rpc3BsYXlCb3guY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5Qm94LmNwcApAQCAtMzYsMTcg
KzM2LDYgQEAgbmFtZXNwYWNlIERpc3BsYXkgewogCiBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lN
UEwoQm94KTsKIAotQm94OjpSZWN0OjpSZWN0KExheW91dFVuaXQgdG9wLCBMYXlvdXRVbml0IGxl
ZnQsIExheW91dFVuaXQgd2lkdGgsIExheW91dFVuaXQgaGVpZ2h0KQotICAgIDogbV9yZWN0KGxl
ZnQsIHRvcCwgd2lkdGgsIGhlaWdodCkKLXsKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgbV9o
YXNWYWxpZFRvcCA9IHRydWU7Ci0gICAgbV9oYXNWYWxpZExlZnQgPSB0cnVlOwotICAgIG1faGFz
VmFsaWRXaWR0aCA9IHRydWU7Ci0gICAgbV9oYXNWYWxpZEhlaWdodCA9IHRydWU7Ci0jZW5kaWYK
LX0KLQogQm94OjpCb3goY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQogICAgIDogbV9zdHlsZShz
dHlsZSkKIHsKQEAgLTg4LDcgKzc3LDcgQEAgQm94OjpTdHlsZTo6U3R5bGUoY29uc3QgUmVuZGVy
U3R5bGUmIHN0eWxlKQogewogfQogCi1Cb3g6OlJlY3QgQm94OjptYXJnaW5Cb3goKSBjb25zdAor
UmVjdCBCb3g6Om1hcmdpbkJveCgpIGNvbnN0CiB7CiAgICAgYXV0byBib3JkZXJCb3ggPSB0aGlz
LT5ib3JkZXJCb3goKTsKIApAQCAtMTAwLDcgKzg5LDcgQEAgQm94OjpSZWN0IEJveDo6bWFyZ2lu
Qm94KCkgY29uc3QKICAgICByZXR1cm4gbWFyZ2luQm94OwogfQogCi1Cb3g6OlJlY3QgQm94Ojpu
b25Db2xsYXBzZWRNYXJnaW5Cb3goKSBjb25zdAorUmVjdCBCb3g6Om5vbkNvbGxhcHNlZE1hcmdp
bkJveCgpIGNvbnN0CiB7CiAgICAgYXV0byBib3JkZXJCb3ggPSB0aGlzLT5ib3JkZXJCb3goKTsK
IApAQCAtMTEyLDcgKzEwMSw3IEBAIEJveDo6UmVjdCBCb3g6Om5vbkNvbGxhcHNlZE1hcmdpbkJv
eCgpIGNvbnN0CiAgICAgcmV0dXJuIG1hcmdpbkJveDsKIH0KIAotQm94OjpSZWN0IEJveDo6Ym9y
ZGVyQm94KCkgY29uc3QKK1JlY3QgQm94Ojpib3JkZXJCb3goKSBjb25zdAogewogICAgIFJlY3Qg
Ym9yZGVyQm94OwogICAgIGJvcmRlckJveC5zZXRUb3BMZWZ0KHsgfSk7CkBAIC0xMjAsNyArMTA5
LDcgQEAgQm94OjpSZWN0IEJveDo6Ym9yZGVyQm94KCkgY29uc3QKICAgICByZXR1cm4gYm9yZGVy
Qm94OwogfQogCi1Cb3g6OlJlY3QgQm94OjpwYWRkaW5nQm94KCkgY29uc3QKK1JlY3QgQm94Ojpw
YWRkaW5nQm94KCkgY29uc3QKIHsKICAgICBhdXRvIGJvcmRlckJveCA9IHRoaXMtPmJvcmRlckJv
eCgpOwogCkBAIC0xMzIsNyArMTIxLDcgQEAgQm94OjpSZWN0IEJveDo6cGFkZGluZ0JveCgpIGNv
bnN0CiAgICAgcmV0dXJuIHBhZGRpbmdCb3g7CiB9CiAKLUJveDo6UmVjdCBCb3g6OmNvbnRlbnRC
b3goKSBjb25zdAorUmVjdCBCb3g6OmNvbnRlbnRCb3goKSBjb25zdAogewogICAgIFJlY3QgY29u
dGVudEJveDsKICAgICBjb250ZW50Qm94LnNldFRvcChjb250ZW50Qm94VG9wKCkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Rpc3BsYXl0cmVlL0Rpc3BsYXlCb3guaCBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5Qm94LmgKaW5kZXggODY4NWMz
NzhjNDhhODg2YzI1YzFiOTM2ZDA2YjM2YTIxMzZlMmU3MS4uZjlmMTQyZmFiZjRkY2E3MThlYWZi
MGQ2Nzk2MDk0NzA3OGIwMjlmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Rp
c3BsYXl0cmVlL0Rpc3BsYXlCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZGlzcGxh
eXRyZWUvRGlzcGxheUJveC5oCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoTEFZT1VU
X0ZPUk1BVFRJTkdfQ09OVEVYVCkKIAorI2luY2x1ZGUgIkRpc3BsYXlSZWN0LmgiCiAjaW5jbHVk
ZSAiTGF5b3V0VW5pdHMuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZUNvbnN0YW50cy5oIgogI2lu
Y2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KQEAgLTYwLDY4ICs2MSw2IEBAIHB1YmxpYzoKIAogICAg
IEJveChjb25zdCBSZW5kZXJTdHlsZSYpOwogICAgIEJveChjb25zdCBCb3gmKTsKLQotICAgIGNs
YXNzIFJlY3QgewotICAgIHB1YmxpYzoKLSAgICAgICAgUmVjdCgpID0gZGVmYXVsdDsKLSAgICAg
ICAgUmVjdChMYXlvdXRVbml0IHRvcCwgTGF5b3V0VW5pdCBsZWZ0LCBMYXlvdXRVbml0IHdpZHRo
LCBMYXlvdXRVbml0IGhlaWdodCk7Ci0gICAgICAgIAotICAgICAgICBMYXlvdXRVbml0IHRvcCgp
IGNvbnN0OwotICAgICAgICBMYXlvdXRVbml0IGxlZnQoKSBjb25zdDsKLSAgICAgICAgTGF5b3V0
UG9pbnQgdG9wTGVmdCgpIGNvbnN0OwotCi0gICAgICAgIExheW91dFVuaXQgYm90dG9tKCkgY29u
c3Q7Ci0gICAgICAgIExheW91dFVuaXQgcmlnaHQoKSBjb25zdDsgICAgICAgIAotICAgICAgICBM
YXlvdXRQb2ludCBib3R0b21SaWdodCgpIGNvbnN0OwotCi0gICAgICAgIExheW91dFVuaXQgd2lk
dGgoKSBjb25zdDsKLSAgICAgICAgTGF5b3V0VW5pdCBoZWlnaHQoKSBjb25zdDsKLSAgICAgICAg
TGF5b3V0U2l6ZSBzaXplKCkgY29uc3Q7Ci0KLSAgICAgICAgdm9pZCBzZXRUb3AoTGF5b3V0VW5p
dCk7Ci0gICAgICAgIHZvaWQgc2V0TGVmdChMYXlvdXRVbml0KTsKLSAgICAgICAgdm9pZCBzZXRU
b3BMZWZ0KGNvbnN0IExheW91dFBvaW50Jik7Ci0gICAgICAgIHZvaWQgc2V0V2lkdGgoTGF5b3V0
VW5pdCk7Ci0gICAgICAgIHZvaWQgc2V0SGVpZ2h0KExheW91dFVuaXQpOwotICAgICAgICB2b2lk
IHNldFNpemUoY29uc3QgTGF5b3V0U2l6ZSYpOwotCi0gICAgICAgIHZvaWQgc2hpZnRMZWZ0VG8o
TGF5b3V0VW5pdCk7Ci0gICAgICAgIHZvaWQgc2hpZnRSaWdodFRvKExheW91dFVuaXQpOwotICAg
ICAgICB2b2lkIHNoaWZ0VG9wVG8oTGF5b3V0VW5pdCk7Ci0gICAgICAgIHZvaWQgc2hpZnRCb3R0
b21UbyhMYXlvdXRVbml0KTsKLQotICAgICAgICB2b2lkIG1vdmVIb3Jpem9udGFsbHkoTGF5b3V0
VW5pdCk7Ci0gICAgICAgIHZvaWQgbW92ZVZlcnRpY2FsbHkoTGF5b3V0VW5pdCk7Ci0KLSAgICAg
ICAgdm9pZCBleHBhbmQoTGF5b3V0VW5pdCwgTGF5b3V0VW5pdCk7Ci0gICAgICAgIGJvb2wgaW50
ZXJzZWN0cyhjb25zdCBSZWN0JiByZWN0KSBjb25zdCB7IHJldHVybiBtX3JlY3QuaW50ZXJzZWN0
cyhyZWN0KTsgfQotCi0gICAgICAgIFJlY3QgY2xvbmUoKSBjb25zdDsKLSAgICAgICAgb3BlcmF0
b3IgTGF5b3V0UmVjdCgpIGNvbnN0OwotCi0gICAgcHJpdmF0ZToKLSNpZiAhQVNTRVJUX0RJU0FC
TEVECi0gICAgICAgIHZvaWQgaW52YWxpZGF0ZVRvcCgpIHsgbV9oYXNWYWxpZFRvcCA9IGZhbHNl
OyB9Ci0gICAgICAgIHZvaWQgaW52YWxpZGF0ZUxlZnQoKSB7IG1faGFzVmFsaWRMZWZ0ID0gZmFs
c2U7IH0KLSAgICAgICAgdm9pZCBpbnZhbGlkYXRlV2lkdGgoKSB7IG1faGFzVmFsaWRXaWR0aCA9
IGZhbHNlOyB9Ci0gICAgICAgIHZvaWQgaW52YWxpZGF0ZUhlaWdodCgpIHsgbV9oYXNWYWxpZEhl
aWdodCA9IGZhbHNlOyB9Ci0gICAgICAgIHZvaWQgaW52YWxpZGF0ZVBvc2l0aW9uKCk7Ci0KLSAg
ICAgICAgYm9vbCBoYXNWYWxpZFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9oYXNWYWxpZFRv
cCAmJiBtX2hhc1ZhbGlkTGVmdDsgfQotICAgICAgICBib29sIGhhc1ZhbGlkU2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1faGFzVmFsaWRXaWR0aCAmJiBtX2hhc1ZhbGlkSGVpZ2h0OyB9Ci0gICAgICAg
IGJvb2wgaGFzVmFsaWRHZW9tZXRyeSgpIGNvbnN0IHsgcmV0dXJuIGhhc1ZhbGlkUG9zaXRpb24o
KSAmJiBoYXNWYWxpZFNpemUoKTsgfQotICAgIAotICAgICAgICB2b2lkIHNldEhhc1ZhbGlkUG9z
aXRpb24oKTsKLSAgICAgICAgdm9pZCBzZXRIYXNWYWxpZFNpemUoKTsKLQotICAgICAgICBib29s
IG1faGFzVmFsaWRUb3AgeyBmYWxzZSB9OwotICAgICAgICBib29sIG1faGFzVmFsaWRMZWZ0IHsg
ZmFsc2UgfTsKLSAgICAgICAgYm9vbCBtX2hhc1ZhbGlkV2lkdGggeyBmYWxzZSB9OwotICAgICAg
ICBib29sIG1faGFzVmFsaWRIZWlnaHQgeyBmYWxzZSB9OwotI2VuZGlmCi0gICAgICAgIExheW91
dFJlY3QgbV9yZWN0OwotICAgIH07Ci0KICAgICB+Qm94KCk7CiAKICAgICBMYXlvdXRVbml0IHRv
cCgpIGNvbnN0OwpAQCAtMTM5LDYgKzc4LDcgQEAgcHVibGljOgogICAgIFJlY3QgcmVjdFdpdGhN
YXJnaW4oKSBjb25zdDsKIAogICAgIExheW91dDo6VXNlZFZlcnRpY2FsTWFyZ2luIHZlcnRpY2Fs
TWFyZ2luKCkgY29uc3Q7CisgICAgTGF5b3V0OjpVc2VkSG9yaXpvbnRhbE1hcmdpbiBob3Jpem9u
dGFsTWFyZ2luKCkgY29uc3Q7CiAgICAgTGF5b3V0VW5pdCBtYXJnaW5CZWZvcmUoKSBjb25zdDsK
ICAgICBMYXlvdXRVbml0IG1hcmdpblN0YXJ0KCkgY29uc3Q7CiAgICAgTGF5b3V0VW5pdCBtYXJn
aW5BZnRlcigpIGNvbnN0OwpAQCAtMjY0LDI0ICsyMDQsNiBAQCBwcml2YXRlOgogfTsKIAogI2lm
ICFBU1NFUlRfRElTQUJMRUQKLWlubGluZSB2b2lkIEJveDo6UmVjdDo6aW52YWxpZGF0ZVBvc2l0
aW9uKCkKLXsKLSAgICBpbnZhbGlkYXRlVG9wKCk7Ci0gICAgaW52YWxpZGF0ZUxlZnQoKTsKLX0K
LQotaW5saW5lIHZvaWQgQm94OjpSZWN0OjpzZXRIYXNWYWxpZFBvc2l0aW9uKCkKLXsKLSAgICBt
X2hhc1ZhbGlkVG9wID0gdHJ1ZTsKLSAgICBtX2hhc1ZhbGlkTGVmdCA9IHRydWU7Ci19Ci0KLWlu
bGluZSB2b2lkIEJveDo6UmVjdDo6c2V0SGFzVmFsaWRTaXplKCkKLXsKLSAgICBtX2hhc1ZhbGlk
V2lkdGggPSB0cnVlOwotICAgIG1faGFzVmFsaWRIZWlnaHQgPSB0cnVlOwotfQotCiBpbmxpbmUg
dm9pZCBCb3g6OmludmFsaWRhdGVNYXJnaW4oKQogewogICAgIG1faGFzVmFsaWRIb3Jpem9udGFs
TWFyZ2luID0gZmFsc2U7CkBAIC0yODksMTY5ICsyMTEsNiBAQCBpbmxpbmUgdm9pZCBCb3g6Omlu
dmFsaWRhdGVNYXJnaW4oKQogfQogI2VuZGlmCiAKLWlubGluZSBMYXlvdXRVbml0IEJveDo6UmVj
dDo6dG9wKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9oYXNWYWxpZFRvcCk7Ci0gICAgcmV0dXJu
IG1fcmVjdC55KCk7Ci19Ci0KLWlubGluZSBMYXlvdXRVbml0IEJveDo6UmVjdDo6bGVmdCgpIGNv
bnN0Ci17Ci0gICAgQVNTRVJUKG1faGFzVmFsaWRMZWZ0KTsKLSAgICByZXR1cm4gbV9yZWN0Lngo
KTsKLX0KLQotaW5saW5lIExheW91dFVuaXQgQm94OjpSZWN0Ojpib3R0b20oKSBjb25zdAotewot
ICAgIEFTU0VSVChtX2hhc1ZhbGlkVG9wICYmIG1faGFzVmFsaWRIZWlnaHQpOwotICAgIHJldHVy
biBtX3JlY3QubWF4WSgpOwotfQotCi1pbmxpbmUgTGF5b3V0VW5pdCBCb3g6OlJlY3Q6OnJpZ2h0
KCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9oYXNWYWxpZExlZnQgJiYgbV9oYXNWYWxpZFdpZHRo
KTsKLSAgICByZXR1cm4gbV9yZWN0Lm1heFgoKTsKLX0KLQotaW5saW5lIExheW91dFBvaW50IEJv
eDo6UmVjdDo6dG9wTGVmdCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGhhc1ZhbGlkUG9zaXRpb24o
KSk7Ci0gICAgcmV0dXJuIG1fcmVjdC5taW5YTWluWUNvcm5lcigpOwotfQotCi1pbmxpbmUgTGF5
b3V0UG9pbnQgQm94OjpSZWN0Ojpib3R0b21SaWdodCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGhh
c1ZhbGlkR2VvbWV0cnkoKSk7Ci0gICAgcmV0dXJuIG1fcmVjdC5tYXhYTWF4WUNvcm5lcigpOwot
fQotCi1pbmxpbmUgTGF5b3V0U2l6ZSBCb3g6OlJlY3Q6OnNpemUoKSBjb25zdAotewotICAgIEFT
U0VSVChoYXNWYWxpZFNpemUoKSk7Ci0gICAgcmV0dXJuIG1fcmVjdC5zaXplKCk7Ci19Ci0KLWlu
bGluZSBMYXlvdXRVbml0IEJveDo6UmVjdDo6d2lkdGgoKSBjb25zdAotewotICAgIEFTU0VSVCht
X2hhc1ZhbGlkV2lkdGgpOwotICAgIHJldHVybiBtX3JlY3Qud2lkdGgoKTsKLX0KLQotaW5saW5l
IExheW91dFVuaXQgQm94OjpSZWN0OjpoZWlnaHQoKSBjb25zdAotewotICAgIEFTU0VSVChtX2hh
c1ZhbGlkSGVpZ2h0KTsKLSAgICByZXR1cm4gbV9yZWN0LmhlaWdodCgpOwotfQotCi1pbmxpbmUg
dm9pZCBCb3g6OlJlY3Q6OnNldFRvcExlZnQoY29uc3QgTGF5b3V0UG9pbnQmIHRvcExlZnQpCi17
Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIHNldEhhc1ZhbGlkUG9zaXRpb24oKTsKLSNlbmRp
ZgotICAgIG1fcmVjdC5zZXRMb2NhdGlvbih0b3BMZWZ0KTsKLX0KLQotaW5saW5lIHZvaWQgQm94
OjpSZWN0OjpzZXRUb3AoTGF5b3V0VW5pdCB0b3ApCi17Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAot
ICAgIG1faGFzVmFsaWRUb3AgPSB0cnVlOwotI2VuZGlmCi0gICAgbV9yZWN0LnNldFkodG9wKTsK
LX0KLQotaW5saW5lIHZvaWQgQm94OjpSZWN0OjpzZXRMZWZ0KExheW91dFVuaXQgbGVmdCkKLXsK
LSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgbV9oYXNWYWxpZExlZnQgPSB0cnVlOwotI2VuZGlm
Ci0gICAgbV9yZWN0LnNldFgobGVmdCk7Ci19Ci0KLWlubGluZSB2b2lkIEJveDo6UmVjdDo6c2V0
V2lkdGgoTGF5b3V0VW5pdCB3aWR0aCkKLXsKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgbV9o
YXNWYWxpZFdpZHRoID0gdHJ1ZTsKLSNlbmRpZgotICAgIG1fcmVjdC5zZXRXaWR0aCh3aWR0aCk7
Ci19Ci0KLWlubGluZSB2b2lkIEJveDo6UmVjdDo6c2V0SGVpZ2h0KExheW91dFVuaXQgaGVpZ2h0
KQotewotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICBtX2hhc1ZhbGlkSGVpZ2h0ID0gdHJ1ZTsK
LSNlbmRpZgotICAgIG1fcmVjdC5zZXRIZWlnaHQoaGVpZ2h0KTsKLX0KLQotaW5saW5lIHZvaWQg
Qm94OjpSZWN0OjpzZXRTaXplKGNvbnN0IExheW91dFNpemUmIHNpemUpCi17Ci0jaWYgIUFTU0VS
VF9ESVNBQkxFRAotICAgIHNldEhhc1ZhbGlkU2l6ZSgpOwotI2VuZGlmCi0gICAgbV9yZWN0LnNl
dFNpemUoc2l6ZSk7Ci19Ci0KLWlubGluZSB2b2lkIEJveDo6UmVjdDo6c2hpZnRMZWZ0VG8oTGF5
b3V0VW5pdCBsZWZ0KQotewotICAgIEFTU0VSVChtX2hhc1ZhbGlkTGVmdCk7Ci0gICAgbV9yZWN0
LnNoaWZ0WEVkZ2VUbyhsZWZ0KTsKLX0KLQotaW5saW5lIHZvaWQgQm94OjpSZWN0OjpzaGlmdFJp
Z2h0VG8oTGF5b3V0VW5pdCByaWdodCkKLXsKLSAgICBBU1NFUlQobV9oYXNWYWxpZExlZnQgJiYg
bV9oYXNWYWxpZFdpZHRoKTsKLSAgICBtX3JlY3Quc2hpZnRNYXhYRWRnZVRvKHJpZ2h0KTsKLX0K
LQotaW5saW5lIHZvaWQgQm94OjpSZWN0OjpzaGlmdFRvcFRvKExheW91dFVuaXQgdG9wKQotewot
ICAgIEFTU0VSVChtX2hhc1ZhbGlkVG9wKTsKLSAgICBtX3JlY3Quc2hpZnRZRWRnZVRvKHRvcCk7
Ci19Ci0KLWlubGluZSB2b2lkIEJveDo6UmVjdDo6c2hpZnRCb3R0b21UbyhMYXlvdXRVbml0IGJv
dHRvbSkKLXsKLSAgICBBU1NFUlQobV9oYXNWYWxpZFRvcCAmJiBtX2hhc1ZhbGlkSGVpZ2h0KTsK
LSAgICBtX3JlY3Quc2hpZnRNYXhZRWRnZVRvKGJvdHRvbSk7Ci19Ci0KLWlubGluZSB2b2lkIEJv
eDo6UmVjdDo6bW92ZUhvcml6b250YWxseShMYXlvdXRVbml0IG9mZnNldCkKLXsKLSAgICBBU1NF
UlQobV9oYXNWYWxpZExlZnQpOwotICAgIG1fcmVjdC5tb3ZlKG9mZnNldCwgMF9sdSk7Ci19Ci0K
LWlubGluZSB2b2lkIEJveDo6UmVjdDo6bW92ZVZlcnRpY2FsbHkoTGF5b3V0VW5pdCBvZmZzZXQp
Ci17Ci0gICAgQVNTRVJUKG1faGFzVmFsaWRUb3ApOwotICAgIG1fcmVjdC5tb3ZlKDBfbHUsIG9m
ZnNldCk7Ci19Ci0KLWlubGluZSB2b2lkIEJveDo6UmVjdDo6ZXhwYW5kKExheW91dFVuaXQgd2lk
dGgsIExheW91dFVuaXQgaGVpZ2h0KQotewotICAgIEFTU0VSVChoYXNWYWxpZEdlb21ldHJ5KCkp
OwotICAgIG1fcmVjdC5leHBhbmQod2lkdGgsIGhlaWdodCk7Ci19Ci0KLWlubGluZSBCb3g6OlJl
Y3QgQm94OjpSZWN0OjpjbG9uZSgpIGNvbnN0Ci17Ci0gICAgUmVjdCByZWN0OwotI2lmICFBU1NF
UlRfRElTQUJMRUQKLSAgICByZWN0Lm1faGFzVmFsaWRUb3AgPSBtX2hhc1ZhbGlkVG9wOwotICAg
IHJlY3QubV9oYXNWYWxpZExlZnQgPSBtX2hhc1ZhbGlkTGVmdDsKLSAgICByZWN0Lm1faGFzVmFs
aWRXaWR0aCA9IG1faGFzVmFsaWRXaWR0aDsKLSAgICByZWN0Lm1faGFzVmFsaWRIZWlnaHQgID0g
bV9oYXNWYWxpZEhlaWdodDsKLSNlbmRpZiAKLSAgICByZWN0Lm1fcmVjdCA9IG1fcmVjdDsKLSAg
ICByZXR1cm4gcmVjdDsKLX0KLQotaW5saW5lIEJveDo6UmVjdDo6b3BlcmF0b3IgTGF5b3V0UmVj
dCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGhhc1ZhbGlkR2VvbWV0cnkoKSk7IAotICAgIHJldHVy
biBtX3JlY3Q7Ci19Ci0KIGlubGluZSBMYXlvdXRVbml0IEJveDo6dG9wKCkgY29uc3QKIHsKICAg
ICBBU1NFUlQobV9oYXNWYWxpZFRvcCAmJiAobV9oYXNFc3RpbWF0ZWRNYXJnaW5CZWZvcmUgfHwg
bV9oYXNWYWxpZFZlcnRpY2FsTWFyZ2luKSk7CkBAIC01NjYsNyArMzI1LDcgQEAgaW5saW5lIHZv
aWQgQm94OjpzZXRQYWRkaW5nKE9wdGlvbmFsPExheW91dDo6RWRnZXM+IHBhZGRpbmcpCiAgICAg
bV9wYWRkaW5nID0gcGFkZGluZzsKIH0KIAotaW5saW5lIEJveDo6UmVjdCBCb3g6OnJlY3RXaXRo
TWFyZ2luKCkgY29uc3QKK2lubGluZSBSZWN0IEJveDo6cmVjdFdpdGhNYXJnaW4oKSBjb25zdAog
ewogICAgIGF1dG8gbWFyZ2luQWZ0ZXIgPSB0aGlzLT5tYXJnaW5BZnRlcigpOwogICAgIGlmICht
X3ZlcnRpY2FsTWFyZ2luLmNvbGxhcHNlZFZhbHVlcygpLmlzQ29sbGFwc2VkVGhyb3VnaCkKQEAg
LTU4MCw2ICszMzksMTIgQEAgaW5saW5lIExheW91dDo6VXNlZFZlcnRpY2FsTWFyZ2luIEJveDo6
dmVydGljYWxNYXJnaW4oKSBjb25zdAogICAgIHJldHVybiBtX3ZlcnRpY2FsTWFyZ2luOwogfQog
CitpbmxpbmUgTGF5b3V0OjpVc2VkSG9yaXpvbnRhbE1hcmdpbiBCb3g6Omhvcml6b250YWxNYXJn
aW4oKSBjb25zdAoreworICAgIEFTU0VSVChtX2hhc1ZhbGlkSG9yaXpvbnRhbE1hcmdpbik7Cisg
ICAgcmV0dXJuIG1faG9yaXpvbnRhbE1hcmdpbjsKK30KKwogaW5saW5lIExheW91dFVuaXQgQm94
OjptYXJnaW5CZWZvcmUoKSBjb25zdAogewogICAgIEFTU0VSVChtX2hhc1ZhbGlkVmVydGljYWxN
YXJnaW4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Rpc3BsYXl0cmVlL0Rp
c3BsYXlSZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheVJl
Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi43MmM4OTdlYWM0OTgxZjIxZDA2MGRiNDViY2NhZmYyYjJhMjM1NjRk
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Rpc3BsYXl0cmVlL0Rp
c3BsYXlSZWN0LmgKQEAgLTAsMCArMSwyOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQorCisjaW5jbHVkZSAiTGF5
b3V0VW5pdHMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZW5kZXJTdHlsZTsK
KworbmFtZXNwYWNlIERpc3BsYXkgeworCitjbGFzcyBSZWN0IHsKK3B1YmxpYzoKKyAgICBSZWN0
KCkgPSBkZWZhdWx0OworICAgIFJlY3QoTGF5b3V0VW5pdCB0b3AsIExheW91dFVuaXQgbGVmdCwg
TGF5b3V0VW5pdCB3aWR0aCwgTGF5b3V0VW5pdCBoZWlnaHQpOworICAgIAorICAgIExheW91dFVu
aXQgdG9wKCkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBsZWZ0KCkgY29uc3Q7CisgICAgTGF5b3V0
UG9pbnQgdG9wTGVmdCgpIGNvbnN0OworCisgICAgTGF5b3V0VW5pdCBib3R0b20oKSBjb25zdDsK
KyAgICBMYXlvdXRVbml0IHJpZ2h0KCkgY29uc3Q7ICAgICAgICAKKyAgICBMYXlvdXRQb2ludCBi
b3R0b21SaWdodCgpIGNvbnN0OworCisgICAgTGF5b3V0VW5pdCB3aWR0aCgpIGNvbnN0OworICAg
IExheW91dFVuaXQgaGVpZ2h0KCkgY29uc3Q7CisgICAgTGF5b3V0U2l6ZSBzaXplKCkgY29uc3Q7
CisKKyAgICB2b2lkIHNldFRvcChMYXlvdXRVbml0KTsKKyAgICB2b2lkIHNldExlZnQoTGF5b3V0
VW5pdCk7CisgICAgdm9pZCBzZXRUb3BMZWZ0KGNvbnN0IExheW91dFBvaW50Jik7CisgICAgdm9p
ZCBzZXRXaWR0aChMYXlvdXRVbml0KTsKKyAgICB2b2lkIHNldEhlaWdodChMYXlvdXRVbml0KTsK
KyAgICB2b2lkIHNldFNpemUoY29uc3QgTGF5b3V0U2l6ZSYpOworCisgICAgdm9pZCBzaGlmdExl
ZnRUbyhMYXlvdXRVbml0KTsKKyAgICB2b2lkIHNoaWZ0UmlnaHRUbyhMYXlvdXRVbml0KTsKKyAg
ICB2b2lkIHNoaWZ0VG9wVG8oTGF5b3V0VW5pdCk7CisgICAgdm9pZCBzaGlmdEJvdHRvbVRvKExh
eW91dFVuaXQpOworCisgICAgdm9pZCBtb3ZlSG9yaXpvbnRhbGx5KExheW91dFVuaXQpOworICAg
IHZvaWQgbW92ZVZlcnRpY2FsbHkoTGF5b3V0VW5pdCk7CisKKyAgICB2b2lkIGV4cGFuZChMYXlv
dXRVbml0LCBMYXlvdXRVbml0KTsKKyAgICB2b2lkIGV4cGFuZEhvcml6b250YWxseShMYXlvdXRV
bml0IGRlbHRhKSB7IGV4cGFuZChkZWx0YSwgMCk7IH0KKyAgICB2b2lkIGV4cGFuZFZlcnRpY2Fs
bHkoTGF5b3V0VW5pdCBkZWx0YSkgeyBleHBhbmQoMCwgZGVsdGEpOyB9CisgICAgYm9vbCBpbnRl
cnNlY3RzKGNvbnN0IFJlY3QmIHJlY3QpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdC5pbnRlcnNlY3Rz
KHJlY3QpOyB9CisKKyAgICBSZWN0IGNsb25lKCkgY29uc3Q7CisgICAgb3BlcmF0b3IgTGF5b3V0
UmVjdCgpIGNvbnN0OworCitwcml2YXRlOgorI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICB2b2lk
IGludmFsaWRhdGVUb3AoKSB7IG1faGFzVmFsaWRUb3AgPSBmYWxzZTsgfQorICAgIHZvaWQgaW52
YWxpZGF0ZUxlZnQoKSB7IG1faGFzVmFsaWRMZWZ0ID0gZmFsc2U7IH0KKyAgICB2b2lkIGludmFs
aWRhdGVXaWR0aCgpIHsgbV9oYXNWYWxpZFdpZHRoID0gZmFsc2U7IH0KKyAgICB2b2lkIGludmFs
aWRhdGVIZWlnaHQoKSB7IG1faGFzVmFsaWRIZWlnaHQgPSBmYWxzZTsgfQorICAgIHZvaWQgaW52
YWxpZGF0ZVBvc2l0aW9uKCk7CisKKyAgICBib29sIGhhc1ZhbGlkUG9zaXRpb24oKSBjb25zdCB7
IHJldHVybiBtX2hhc1ZhbGlkVG9wICYmIG1faGFzVmFsaWRMZWZ0OyB9CisgICAgYm9vbCBoYXNW
YWxpZFNpemUoKSBjb25zdCB7IHJldHVybiBtX2hhc1ZhbGlkV2lkdGggJiYgbV9oYXNWYWxpZEhl
aWdodDsgfQorICAgIGJvb2wgaGFzVmFsaWRHZW9tZXRyeSgpIGNvbnN0IHsgcmV0dXJuIGhhc1Zh
bGlkUG9zaXRpb24oKSAmJiBoYXNWYWxpZFNpemUoKTsgfQorCisgICAgdm9pZCBzZXRIYXNWYWxp
ZFBvc2l0aW9uKCk7CisgICAgdm9pZCBzZXRIYXNWYWxpZFNpemUoKTsKKworICAgIGJvb2wgbV9o
YXNWYWxpZFRvcCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2hhc1ZhbGlkTGVmdCB7IGZhbHNlIH07
CisgICAgYm9vbCBtX2hhc1ZhbGlkV2lkdGggeyBmYWxzZSB9OworICAgIGJvb2wgbV9oYXNWYWxp
ZEhlaWdodCB7IGZhbHNlIH07CisjZW5kaWYKKyAgICBMYXlvdXRSZWN0IG1fcmVjdDsKK307CisK
K2lubGluZSBSZWN0OjpSZWN0KExheW91dFVuaXQgdG9wLCBMYXlvdXRVbml0IGxlZnQsIExheW91
dFVuaXQgd2lkdGgsIExheW91dFVuaXQgaGVpZ2h0KQorICAgIDogbV9yZWN0KGxlZnQsIHRvcCwg
d2lkdGgsIGhlaWdodCkKK3sKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgbV9oYXNWYWxpZFRv
cCA9IHRydWU7CisgICAgbV9oYXNWYWxpZExlZnQgPSB0cnVlOworICAgIG1faGFzVmFsaWRXaWR0
aCA9IHRydWU7CisgICAgbV9oYXNWYWxpZEhlaWdodCA9IHRydWU7CisjZW5kaWYKK30KKworI2lm
ICFBU1NFUlRfRElTQUJMRUQKK2lubGluZSB2b2lkIFJlY3Q6OmludmFsaWRhdGVQb3NpdGlvbigp
Cit7CisgICAgaW52YWxpZGF0ZVRvcCgpOworICAgIGludmFsaWRhdGVMZWZ0KCk7Cit9CisKK2lu
bGluZSB2b2lkIFJlY3Q6OnNldEhhc1ZhbGlkUG9zaXRpb24oKQoreworICAgIG1faGFzVmFsaWRU
b3AgPSB0cnVlOworICAgIG1faGFzVmFsaWRMZWZ0ID0gdHJ1ZTsKK30KKworaW5saW5lIHZvaWQg
UmVjdDo6c2V0SGFzVmFsaWRTaXplKCkKK3sKKyAgICBtX2hhc1ZhbGlkV2lkdGggPSB0cnVlOwor
ICAgIG1faGFzVmFsaWRIZWlnaHQgPSB0cnVlOworfQorI2VuZGlmCisKK2lubGluZSBMYXlvdXRV
bml0IFJlY3Q6OnRvcCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1faGFzVmFsaWRUb3ApOworICAg
IHJldHVybiBtX3JlY3QueSgpOworfQorCitpbmxpbmUgTGF5b3V0VW5pdCBSZWN0OjpsZWZ0KCkg
Y29uc3QKK3sKKyAgICBBU1NFUlQobV9oYXNWYWxpZExlZnQpOworICAgIHJldHVybiBtX3JlY3Qu
eCgpOworfQorCitpbmxpbmUgTGF5b3V0VW5pdCBSZWN0Ojpib3R0b20oKSBjb25zdAoreworICAg
IEFTU0VSVChtX2hhc1ZhbGlkVG9wICYmIG1faGFzVmFsaWRIZWlnaHQpOworICAgIHJldHVybiBt
X3JlY3QubWF4WSgpOworfQorCitpbmxpbmUgTGF5b3V0VW5pdCBSZWN0OjpyaWdodCgpIGNvbnN0
Cit7CisgICAgQVNTRVJUKG1faGFzVmFsaWRMZWZ0ICYmIG1faGFzVmFsaWRXaWR0aCk7CisgICAg
cmV0dXJuIG1fcmVjdC5tYXhYKCk7Cit9CisKK2lubGluZSBMYXlvdXRQb2ludCBSZWN0Ojp0b3BM
ZWZ0KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaGFzVmFsaWRQb3NpdGlvbigpKTsKKyAgICByZXR1
cm4gbV9yZWN0Lm1pblhNaW5ZQ29ybmVyKCk7Cit9CisKK2lubGluZSBMYXlvdXRQb2ludCBSZWN0
Ojpib3R0b21SaWdodCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKGhhc1ZhbGlkR2VvbWV0cnkoKSk7
CisgICAgcmV0dXJuIG1fcmVjdC5tYXhYTWF4WUNvcm5lcigpOworfQorCitpbmxpbmUgTGF5b3V0
U2l6ZSBSZWN0OjpzaXplKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaGFzVmFsaWRTaXplKCkpOwor
ICAgIHJldHVybiBtX3JlY3Quc2l6ZSgpOworfQorCitpbmxpbmUgTGF5b3V0VW5pdCBSZWN0Ojp3
aWR0aCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1faGFzVmFsaWRXaWR0aCk7CisgICAgcmV0dXJu
IG1fcmVjdC53aWR0aCgpOworfQorCitpbmxpbmUgTGF5b3V0VW5pdCBSZWN0OjpoZWlnaHQoKSBj
b25zdAoreworICAgIEFTU0VSVChtX2hhc1ZhbGlkSGVpZ2h0KTsKKyAgICByZXR1cm4gbV9yZWN0
LmhlaWdodCgpOworfQorCitpbmxpbmUgdm9pZCBSZWN0OjpzZXRUb3BMZWZ0KGNvbnN0IExheW91
dFBvaW50JiB0b3BMZWZ0KQoreworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBzZXRIYXNWYWxp
ZFBvc2l0aW9uKCk7CisjZW5kaWYKKyAgICBtX3JlY3Quc2V0TG9jYXRpb24odG9wTGVmdCk7Cit9
CisKK2lubGluZSB2b2lkIFJlY3Q6OnNldFRvcChMYXlvdXRVbml0IHRvcCkKK3sKKyNpZiAhQVNT
RVJUX0RJU0FCTEVECisgICAgbV9oYXNWYWxpZFRvcCA9IHRydWU7CisjZW5kaWYKKyAgICBtX3Jl
Y3Quc2V0WSh0b3ApOworfQorCitpbmxpbmUgdm9pZCBSZWN0OjpzZXRMZWZ0KExheW91dFVuaXQg
bGVmdCkKK3sKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgbV9oYXNWYWxpZExlZnQgPSB0cnVl
OworI2VuZGlmCisgICAgbV9yZWN0LnNldFgobGVmdCk7Cit9CisKK2lubGluZSB2b2lkIFJlY3Q6
OnNldFdpZHRoKExheW91dFVuaXQgd2lkdGgpCit7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAg
IG1faGFzVmFsaWRXaWR0aCA9IHRydWU7CisjZW5kaWYKKyAgICBtX3JlY3Quc2V0V2lkdGgod2lk
dGgpOworfQorCitpbmxpbmUgdm9pZCBSZWN0OjpzZXRIZWlnaHQoTGF5b3V0VW5pdCBoZWlnaHQp
Cit7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIG1faGFzVmFsaWRIZWlnaHQgPSB0cnVlOwor
I2VuZGlmCisgICAgbV9yZWN0LnNldEhlaWdodChoZWlnaHQpOworfQorCitpbmxpbmUgdm9pZCBS
ZWN0OjpzZXRTaXplKGNvbnN0IExheW91dFNpemUmIHNpemUpCit7CisjaWYgIUFTU0VSVF9ESVNB
QkxFRAorICAgIHNldEhhc1ZhbGlkU2l6ZSgpOworI2VuZGlmCisgICAgbV9yZWN0LnNldFNpemUo
c2l6ZSk7Cit9CisKK2lubGluZSB2b2lkIFJlY3Q6OnNoaWZ0TGVmdFRvKExheW91dFVuaXQgbGVm
dCkKK3sKKyAgICBBU1NFUlQobV9oYXNWYWxpZExlZnQpOworICAgIG1fcmVjdC5zaGlmdFhFZGdl
VG8obGVmdCk7Cit9CisKK2lubGluZSB2b2lkIFJlY3Q6OnNoaWZ0UmlnaHRUbyhMYXlvdXRVbml0
IHJpZ2h0KQoreworICAgIEFTU0VSVChtX2hhc1ZhbGlkTGVmdCAmJiBtX2hhc1ZhbGlkV2lkdGgp
OworICAgIG1fcmVjdC5zaGlmdE1heFhFZGdlVG8ocmlnaHQpOworfQorCitpbmxpbmUgdm9pZCBS
ZWN0OjpzaGlmdFRvcFRvKExheW91dFVuaXQgdG9wKQoreworICAgIEFTU0VSVChtX2hhc1ZhbGlk
VG9wKTsKKyAgICBtX3JlY3Quc2hpZnRZRWRnZVRvKHRvcCk7Cit9CisKK2lubGluZSB2b2lkIFJl
Y3Q6OnNoaWZ0Qm90dG9tVG8oTGF5b3V0VW5pdCBib3R0b20pCit7CisgICAgQVNTRVJUKG1faGFz
VmFsaWRUb3AgJiYgbV9oYXNWYWxpZEhlaWdodCk7CisgICAgbV9yZWN0LnNoaWZ0TWF4WUVkZ2VU
byhib3R0b20pOworfQorCitpbmxpbmUgdm9pZCBSZWN0Ojptb3ZlSG9yaXpvbnRhbGx5KExheW91
dFVuaXQgb2Zmc2V0KQoreworICAgIEFTU0VSVChtX2hhc1ZhbGlkTGVmdCk7CisgICAgbV9yZWN0
Lm1vdmUoTGF5b3V0U2l6ZSB7IG9mZnNldCwgMCB9KTsKK30KKworaW5saW5lIHZvaWQgUmVjdDo6
bW92ZVZlcnRpY2FsbHkoTGF5b3V0VW5pdCBvZmZzZXQpCit7CisgICAgQVNTRVJUKG1faGFzVmFs
aWRUb3ApOworICAgIG1fcmVjdC5tb3ZlKExheW91dFNpemUgeyAwLCBvZmZzZXQgfSk7Cit9CisK
K2lubGluZSB2b2lkIFJlY3Q6OmV4cGFuZChMYXlvdXRVbml0IHdpZHRoLCBMYXlvdXRVbml0IGhl
aWdodCkKK3sKKyAgICBBU1NFUlQoaGFzVmFsaWRHZW9tZXRyeSgpKTsKKyAgICBtX3JlY3QuZXhw
YW5kKHdpZHRoLCBoZWlnaHQpOworfQorCitpbmxpbmUgUmVjdCBSZWN0OjpjbG9uZSgpIGNvbnN0
Cit7CisgICAgUmVjdCByZWN0OworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICByZWN0Lm1faGFz
VmFsaWRUb3AgPSBtX2hhc1ZhbGlkVG9wOworICAgIHJlY3QubV9oYXNWYWxpZExlZnQgPSBtX2hh
c1ZhbGlkTGVmdDsKKyAgICByZWN0Lm1faGFzVmFsaWRXaWR0aCA9IG1faGFzVmFsaWRXaWR0aDsK
KyAgICByZWN0Lm1faGFzVmFsaWRIZWlnaHQgID0gbV9oYXNWYWxpZEhlaWdodDsKKyNlbmRpZiAK
KyAgICByZWN0Lm1fcmVjdCA9IG1fcmVjdDsKKyAgICByZXR1cm4gcmVjdDsKK30KKworaW5saW5l
IFJlY3Q6Om9wZXJhdG9yIExheW91dFJlY3QoKSBjb25zdAoreworICAgIEFTU0VSVChoYXNWYWxp
ZEdlb21ldHJ5KCkpOyAKKyAgICByZXR1cm4gbV9yZWN0OworfQorCit9Cit9CisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5UnVuLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheVJ1bi5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjYzOTI5MDM2MDgzYzQwYjAzOWY5ZGVjNDkzM2Y2MTQyYTc0ZGExYjAKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheVJ1bi5oCkBA
IC0wLDAgKzEsMTA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUo
TEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKKworI2luY2x1ZGUgIklubGluZUl0ZW0uaCIKKyNp
bmNsdWRlICJMYXlvdXRVbml0LmgiCisjaW5jbHVkZSAiVGV4dEZsYWdzLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBEaXNwbGF5IHsKKworc3RydWN0IFJ1biB7CisgICAgc3Ry
dWN0IFRleHRDb250ZXh0IHsKKyAgICBwdWJsaWM6CisgICAgICAgIFRleHRDb250ZXh0KHVuc2ln
bmVkIHBvc2l0aW9uLCB1bnNpZ25lZCBsZW5ndGgpOworCisgICAgICAgIHVuc2lnbmVkIHN0YXJ0
KCkgY29uc3QgeyByZXR1cm4gbV9zdGFydDsgfQorICAgICAgICB1bnNpZ25lZCBlbmQoKSBjb25z
dCB7IHJldHVybiBzdGFydCgpICsgbGVuZ3RoKCk7IH0KKyAgICAgICAgdW5zaWduZWQgbGVuZ3Ro
KCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KKworICAgICAgICB2b2lkIGV4cGFuZCh1bnNp
Z25lZCBsZW5ndGgpIHsgbV9sZW5ndGggKz0gbGVuZ3RoOyB9CisKKyAgICBwcml2YXRlOgorICAg
ICAgICB1bnNpZ25lZCBtX3N0YXJ0OworICAgICAgICB1bnNpZ25lZCBtX2xlbmd0aDsKKyAgICB9
OworCisgICAgUnVuKFJlY3QgbG9naWNhbFJlY3QpOworICAgIFJ1bihSZWN0IGxvZ2ljYWxSZWN0
LCBUZXh0Q29udGV4dCk7CisgICAgUnVuKGNvbnN0IFJ1biYpOworCisgICAgTGF5b3V0UG9pbnQg
bG9naWNhbFRvcExlZnQoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxSZWN0LnRvcExlZnQoKTsg
fQorICAgIExheW91dFVuaXQgbG9naWNhbExlZnQoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxS
ZWN0LmxlZnQoKTsgfQorICAgIExheW91dFVuaXQgbG9naWNhbFJpZ2h0KCkgY29uc3QgeyByZXR1
cm4gbV9sb2dpY2FsUmVjdC5yaWdodCgpOyB9CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9wKCkg
Y29uc3QgeyByZXR1cm4gbV9sb2dpY2FsUmVjdC50b3AoKTsgfQorICAgIExheW91dFVuaXQgbG9n
aWNhbEJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFJlY3QuYm90dG9tKCk7IH0KKwor
ICAgIExheW91dFVuaXQgbG9naWNhbFdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsUmVj
dC53aWR0aCgpOyB9CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1
cm4gbV9sb2dpY2FsUmVjdC5oZWlnaHQoKTsgfQorCisgICAgdm9pZCBzZXRMb2dpY2FsV2lkdGgo
TGF5b3V0VW5pdCB3aWR0aCkgeyBtX2xvZ2ljYWxSZWN0LnNldFdpZHRoKHdpZHRoKTsgfQorICAg
IHZvaWQgc2V0TG9naWNhbFRvcChMYXlvdXRVbml0IGxvZ2ljYWxUb3ApIHsgbV9sb2dpY2FsUmVj
dC5zZXRUb3AobG9naWNhbFRvcCk7IH0KKyAgICB2b2lkIHNldExvZ2ljYWxMZWZ0KExheW91dFVu
aXQgbG9naWNhbExlZnQpIHsgbV9sb2dpY2FsUmVjdC5zZXRMZWZ0KGxvZ2ljYWxMZWZ0KTsgfQor
ICAgIHZvaWQgc2V0TG9naWNhbFJpZ2h0KExheW91dFVuaXQgbG9naWNhbFJpZ2h0KSB7IG1fbG9n
aWNhbFJlY3Quc2hpZnRSaWdodFRvKGxvZ2ljYWxSaWdodCk7IH0KKyAgICB2b2lkIG1vdmVWZXJ0
aWNhbGx5KExheW91dFVuaXQgZGVsdGEpIHsgbV9sb2dpY2FsUmVjdC5tb3ZlVmVydGljYWxseShk
ZWx0YSk7IH0KKyAgICB2b2lkIG1vdmVIb3Jpem9udGFsbHkoTGF5b3V0VW5pdCBkZWx0YSkgeyBt
X2xvZ2ljYWxSZWN0Lm1vdmVIb3Jpem9udGFsbHkoZGVsdGEpOyB9CisgICAgdm9pZCBleHBhbmRW
ZXJ0aWNhbGx5KExheW91dFVuaXQgZGVsdGEpIHsgbV9sb2dpY2FsUmVjdC5leHBhbmQoMCwgZGVs
dGEpOyB9CisgICAgdm9pZCBleHBhbmRIb3Jpem9udGFsbHkoTGF5b3V0VW5pdCBkZWx0YSkgeyBt
X2xvZ2ljYWxSZWN0LmV4cGFuZChkZWx0YSwgMCk7IH0KKworICAgIHZvaWQgc2V0VGV4dENvbnRl
eHQoVGV4dENvbnRleHQgdGV4dENvbnRleHQpIHsgbV90ZXh0Q29udGV4dC5lbXBsYWNlKHRleHRD
b250ZXh0KTsgfQorICAgIE9wdGlvbmFsPFRleHRDb250ZXh0PiYgdGV4dENvbnRleHQoKSB7IHJl
dHVybiBtX3RleHRDb250ZXh0OyB9CisgICAgT3B0aW9uYWw8VGV4dENvbnRleHQ+IHRleHRDb250
ZXh0KCkgY29uc3QgeyByZXR1cm4gbV90ZXh0Q29udGV4dDsgfQorCitwcml2YXRlOgorICAgIFJl
Y3QgbV9sb2dpY2FsUmVjdDsKKyAgICBPcHRpb25hbDxUZXh0Q29udGV4dD4gbV90ZXh0Q29udGV4
dDsKK307CisKK2lubGluZSBSdW46OlJ1bihSZWN0IGxvZ2ljYWxSZWN0KQorICAgIDogbV9sb2dp
Y2FsUmVjdChsb2dpY2FsUmVjdCkKK3sKK30KKworaW5saW5lIFJ1bjo6UnVuKFJlY3QgbG9naWNh
bFJlY3QsIFRleHRDb250ZXh0IHRleHRDb250ZXh0KQorICAgIDogbV9sb2dpY2FsUmVjdChsb2dp
Y2FsUmVjdCkKKyAgICAsIG1fdGV4dENvbnRleHQodGV4dENvbnRleHQpCit7Cit9CisKK2lubGlu
ZSBSdW46OlRleHRDb250ZXh0OjpUZXh0Q29udGV4dCh1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQg
bGVuZ3RoKQorICAgIDogbV9zdGFydChzdGFydCkKKyAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKK3sK
K30KKworaW5saW5lIFJ1bjo6UnVuKGNvbnN0IFJ1biYgb3RoZXIpCit7CisgICAgbV9sb2dpY2Fs
UmVjdCA9IG90aGVyLm1fbG9naWNhbFJlY3Q7CisgICAgbV90ZXh0Q29udGV4dCA9IG90aGVyLm1f
dGV4dENvbnRleHQ7Cit9CisKK30KK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2Zsb2F0cy9GbG9hdEF2b2lkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2Zsb2F0cy9GbG9hdEF2b2lkZXIuY3BwCmluZGV4IDE1MWQ4OGUyNjdiNmIwNTA2MGRiNjQzMzUz
MjljZDBhMTAzODFhMDcuLjg3MGNmZjVmY2YzZDIyZGEzNTZmNTdhYmUyMzA3ZWE1MmQ0OGRiZmYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mbG9hdHMvRmxvYXRBdm9pZGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZmxvYXRzL0Zsb2F0QXZvaWRlci5jcHAKQEAg
LTExMyw3ICsxMTMsNyBAQCBib29sIEZsb2F0QXZvaWRlcjo6b3ZlcmZsb3dzQ29udGFpbmluZ0Js
b2NrKCkgY29uc3QKICAgICByZXR1cm4gY29udGFpbmluZ0Jsb2NrQ29udGVudEJveFJpZ2h0IDwg
cmlnaHQ7CiB9CiAKLURpc3BsYXk6OkJveDo6UmVjdCBGbG9hdEF2b2lkZXI6OnJlY3RJbkNvbnRh
aW5pbmdCbG9jaygpIGNvbnN0CitEaXNwbGF5OjpSZWN0IEZsb2F0QXZvaWRlcjo6cmVjdEluQ29u
dGFpbmluZ0Jsb2NrKCkgY29uc3QKIHsKICAgICAvLyBGcm9tIGZvcm1hdHRpbmcgcm9vdCBjb29y
ZGluYXRlIHN5c3RlbSBiYWNrIHRvIGNvbnRhaW5pbmcgYmxvY2sncy4KICAgICBpZiAobGF5b3V0
Qm94KCkuY29udGFpbmluZ0Jsb2NrKCkgPT0gJmZsb2F0aW5nU3RhdGUoKS5yb290KCkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZmxvYXRzL0Zsb2F0QXZvaWRlci5oIGIvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2Zsb2F0cy9GbG9hdEF2b2lkZXIuaAppbmRleCAyYzMyM2RkODBm
NjY2Zjg3M2Q1NmUzZjQ1Y2FhMzFkYTg5YjBmNGVkLi42ZWQ5ZDQzZDNiZmZhYjkzYTBkODhkODY3
MWY0ZTgwN2IwMjM1MWJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZmxvYXRz
L0Zsb2F0QXZvaWRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mbG9hdHMvRmxvYXRB
dm9pZGVyLmgKQEAgLTQ2LDggKzQ2LDggQEAgcHVibGljOgogICAgIEZsb2F0QXZvaWRlcihjb25z
dCBCb3gmLCBjb25zdCBGbG9hdGluZ1N0YXRlJiwgY29uc3QgTGF5b3V0U3RhdGUmKTsKICAgICB2
aXJ0dWFsIH5GbG9hdEF2b2lkZXIoKSA9IGRlZmF1bHQ7CiAKLSAgICB2aXJ0dWFsIERpc3BsYXk6
OkJveDo6UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9hYnNvbHV0ZURpc3BsYXlCb3gucmVj
dCgpOyB9Ci0gICAgRGlzcGxheTo6Qm94OjpSZWN0IHJlY3RJbkNvbnRhaW5pbmdCbG9jaygpIGNv
bnN0OworICAgIHZpcnR1YWwgRGlzcGxheTo6UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9h
YnNvbHV0ZURpc3BsYXlCb3gucmVjdCgpOyB9CisgICAgRGlzcGxheTo6UmVjdCByZWN0SW5Db250
YWluaW5nQmxvY2soKSBjb25zdDsKIAogICAgIHN0cnVjdCBIb3Jpem9udGFsQ29uc3RyYWludHMg
ewogICAgICAgICBPcHRpb25hbDxQb3NpdGlvbkluQ29udGV4dFJvb3Q+IGxlZnQ7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZmxvYXRzL0Zsb2F0Qm94LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9mbG9hdHMvRmxvYXRCb3guY3BwCmluZGV4IGJlYjc1N2UzMjcxNGNiNGU5
ZTdmYzUyODBjNjdlZjk0MDllYjVhY2QuLmIyZTg2YzE1MjE2N2MzZWEyM2RhNzQ5OGM2NzdmZjQ0
OTNmZmQ4ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mbG9hdHMvRmxvYXRC
b3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mbG9hdHMvRmxvYXRCb3guY3BwCkBA
IC00MSw3ICs0MSw3IEBAIEZsb2F0Qm94OjpGbG9hdEJveChjb25zdCBCb3gmIGxheW91dEJveCwg
Y29uc3QgRmxvYXRpbmdTdGF0ZSYgZmxvYXRpbmdTdGF0ZSwgY29uCiAgICAgZGlzcGxheUJveCgp
LnNldFRvcExlZnQoeyBpbml0aWFsSG9yaXpvbnRhbFBvc2l0aW9uKCksIGluaXRpYWxWZXJ0aWNh
bFBvc2l0aW9uKCkgfSk7CiB9CiAKLURpc3BsYXk6OkJveDo6UmVjdCBGbG9hdEJveDo6cmVjdCgp
IGNvbnN0CitEaXNwbGF5OjpSZWN0IEZsb2F0Qm94OjpyZWN0KCkgY29uc3QKIHsKICAgICBhdXRv
IHJlY3QgPSBkaXNwbGF5Qm94KCkucmVjdCgpOwogICAgIHJldHVybiB7IHJlY3QudG9wKCkgLSBt
YXJnaW5CZWZvcmUoKSwgcmVjdC5sZWZ0KCkgLSBtYXJnaW5TdGFydCgpLCBtYXJnaW5TdGFydCgp
ICsgcmVjdC53aWR0aCgpICsgbWFyZ2luRW5kKCksIG1hcmdpbkJlZm9yZSgpICsgcmVjdC5oZWln
aHQoKSArIG1hcmdpbkFmdGVyKCkgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9mbG9hdHMvRmxvYXRCb3guaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mbG9hdHMvRmxvYXRC
b3guaAppbmRleCAyZWRjYWU4OGQ3MmMzZmMxMThkNDQ4YTE4OWVjZTAwMWYzZWUwMDYyLi45N2Qy
MTUwNzViZWQxODRlMzhhYWZkNGQxNzMwNDUyN2I1YTAwZTAwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvZmxvYXRzL0Zsb2F0Qm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2Zsb2F0cy9GbG9hdEJveC5oCkBAIC00Myw3ICs0Myw3IEBAIGNsYXNzIEZsb2F0Qm94IDog
cHVibGljIEZsb2F0QXZvaWRlciB7CiBwdWJsaWM6CiAgICAgRmxvYXRCb3goY29uc3QgQm94Jiwg
Y29uc3QgRmxvYXRpbmdTdGF0ZSYsIGNvbnN0IExheW91dFN0YXRlJik7CiAKLSAgICBEaXNwbGF5
OjpCb3g6OlJlY3QgcmVjdCgpIGNvbnN0IGZpbmFsOworICAgIERpc3BsYXk6OlJlY3QgcmVjdCgp
IGNvbnN0IGZpbmFsOwogCiBwcml2YXRlOgogICAgIGJvb2wgaXNMZWZ0QWxpZ25lZCgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIGxheW91dEJveCgpLmlzTGVmdEZsb2F0aW5nUG9zaXRpb25lZCgpOyB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZmxvYXRzL0Zsb2F0aW5nQ29udGV4
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZmxvYXRzL0Zsb2F0aW5nQ29udGV4dC5jcHAK
aW5kZXggMDk1YWY5ZjA4ZGM4MTg4ZjY3N2RlNjBmMjE1OTc5YzBlMjUwNGIzNC4uOTQ5NWQzMzA4
NDE2MmY2MTJjYmE4NWNmOTM4ZDU3NzM5ZDZjYTcyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2Zsb2F0cy9GbG9hdGluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9mbG9hdHMvRmxvYXRpbmdDb250ZXh0LmNwcApAQCAtNzQsNyArNzQsNyBAQCBwdWJs
aWM6CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9mbG9hdFBhaXIuaXNFbXB0
eSgpOyB9CiAgICAgY29uc3QgRmxvYXRpbmdTdGF0ZTo6RmxvYXRJdGVtKiBsZWZ0KCkgY29uc3Q7
CiAgICAgY29uc3QgRmxvYXRpbmdTdGF0ZTo6RmxvYXRJdGVtKiByaWdodCgpIGNvbnN0OwotICAg
IGJvb2wgaW50ZXJzZWN0cyhjb25zdCBEaXNwbGF5OjpCb3g6OlJlY3QmKSBjb25zdDsKKyAgICBi
b29sIGludGVyc2VjdHMoY29uc3QgRGlzcGxheTo6UmVjdCYpIGNvbnN0OwogICAgIFBvc2l0aW9u
SW5Db250ZXh0Um9vdCB2ZXJ0aWNhbENvbnN0cmFpbnQoKSBjb25zdCB7IHJldHVybiBtX3ZlcnRp
Y2FsUG9zaXRpb247IH0KICAgICBGbG9hdEF2b2lkZXI6Okhvcml6b250YWxDb25zdHJhaW50cyBo
b3Jpem9udGFsQ29uc3RyYWludHMoKSBjb25zdDsKICAgICBQb3NpdGlvbkluQ29udGV4dFJvb3Qg
Ym90dG9tKCkgY29uc3Q7CkBAIC0zNzAsNyArMzcwLDcgQEAgY29uc3QgRmxvYXRpbmdTdGF0ZTo6
RmxvYXRJdGVtKiBGbG9hdFBhaXI6OnJpZ2h0KCkgY29uc3QKICAgICByZXR1cm4gJm1fZmxvYXRz
WyptX2Zsb2F0UGFpci5yaWdodF07CiB9CiAKLWJvb2wgRmxvYXRQYWlyOjppbnRlcnNlY3RzKGNv
bnN0IERpc3BsYXk6OkJveDo6UmVjdCYgZmxvYXRBdm9pZGVyUmVjdCkgY29uc3QKK2Jvb2wgRmxv
YXRQYWlyOjppbnRlcnNlY3RzKGNvbnN0IERpc3BsYXk6OlJlY3QmIGZsb2F0QXZvaWRlclJlY3Qp
IGNvbnN0CiB7CiAgICAgYXV0byBpbnRlcnNlY3RzID0gWyZdKGF1dG8qIGZsb2F0aW5nKSB7CiAg
ICAgICAgIHJldHVybiBmbG9hdGluZyAmJiBmbG9hdGluZy0+cmVjdFdpdGhNYXJnaW4oKS5pbnRl
cnNlY3RzKGZsb2F0QXZvaWRlclJlY3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2Zsb2F0cy9GbG9hdGluZ1N0YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZmxvYXRz
L0Zsb2F0aW5nU3RhdGUuaAppbmRleCAwZWZhZTg0ZDczYjVhYzI5MzNmZTUxNTg5NmJkYWE0MmYy
NWE4OGRhLi5lMWNiOGQyMGY4NTc5ZTc1OTcwNmUxZTkxMmFjM2I3NWU0YjI5ZDY2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZmxvYXRzL0Zsb2F0aW5nU3RhdGUuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvZmxvYXRzL0Zsb2F0aW5nU3RhdGUuaApAQCAtNzQsNyArNzQs
NyBAQCBwdWJsaWM6CiAgICAgICAgIGJvb2wgaXNMZWZ0UG9zaXRpb25lZCgpIGNvbnN0IHsgcmV0
dXJuIG1fbGF5b3V0Qm94LT5pc0xlZnRGbG9hdGluZ1Bvc2l0aW9uZWQoKTsgfQogICAgICAgICBi
b29sIGlzRGVzY2VuZGFudE9mRm9ybWF0dGluZ1Jvb3QoY29uc3QgQm94JikgY29uc3Q7CiAKLSAg
ICAgICAgRGlzcGxheTo6Qm94OjpSZWN0IHJlY3RXaXRoTWFyZ2luKCkgY29uc3QgeyByZXR1cm4g
bV9hYnNvbHV0ZURpc3BsYXlCb3gucmVjdFdpdGhNYXJnaW4oKTsgfQorICAgICAgICBEaXNwbGF5
OjpSZWN0IHJlY3RXaXRoTWFyZ2luKCkgY29uc3QgeyByZXR1cm4gbV9hYnNvbHV0ZURpc3BsYXlC
b3gucmVjdFdpdGhNYXJnaW4oKTsgfQogICAgICAgICBQb3NpdGlvbkluQ29udGV4dFJvb3QgYm90
dG9tKCkgY29uc3QgeyByZXR1cm4geyBtX2Fic29sdXRlRGlzcGxheUJveC5ib3R0b20oKSB9OyB9
CiAKICAgICBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwCmluZGV4
IGUzYzE1MzZkY2QzMmExZWZlZDgxMjhkMzMyYjExOGUyOGJkZDllNzIuLmQyMzU4MTY0NzAwNGJj
NTIxZjBhMjQ3NGMzZGMwNWVkMjQ3OGVmMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dC5jcHAKQEAgLTMwLDcgKzMwLDcgQEAKIAogI2luY2x1ZGUgIklubGluZUZvcm1hdHRpbmdT
dGF0ZS5oIgogI2luY2x1ZGUgIklubGluZUxpbmVCcmVha2VyLmgiCi0jaW5jbHVkZSAiSW5saW5l
UnVuUHJvdmlkZXIuaCIKKyNpbmNsdWRlICJJbmxpbmVUZXh0SXRlbS5oIgogI2luY2x1ZGUgIkxh
eW91dEJveC5oIgogI2luY2x1ZGUgIkxheW91dENvbnRhaW5lci5oIgogI2luY2x1ZGUgIkxheW91
dElubGluZUJveC5oIgpAQCAtNzcsMTggKzc3LDIzIEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQ6OmxheW91dCgpIGNvbnN0CiAgICAgd2hpbGUgKGxheW91dEJveCkgewogICAgICAgICBp
ZiAobGF5b3V0Qm94LT5lc3RhYmxpc2hlc0Zvcm1hdHRpbmdDb250ZXh0KCkpCiAgICAgICAgICAg
ICBsYXlvdXRGb3JtYXR0aW5nQ29udGV4dFJvb3QoKmxheW91dEJveCwgdXNlZFZhbHVlcyk7Ci0g
ICAgICAgIGVsc2UgaWYgKGlzPENvbnRhaW5lcj4oKmxheW91dEJveCkpIHsKLSAgICAgICAgICAg
IGF1dG8mIGlubGluZUNvbnRhaW5lciA9IGRvd25jYXN0PElubGluZUNvbnRhaW5lcj4oKmxheW91
dEJveCk7Ci0gICAgICAgICAgICBjb21wdXRlTWFyZ2luKGlubGluZUNvbnRhaW5lciwgdXNlZFZh
bHVlcyk7Ci0gICAgICAgICAgICBjb21wdXRlQm9yZGVyQW5kUGFkZGluZyhpbmxpbmVDb250YWlu
ZXIsIHVzZWRWYWx1ZXMpOwotICAgICAgICB9IGVsc2UgaWYgKGxheW91dEJveC0+aXNSZXBsYWNl
ZCgpKQorICAgICAgICBlbHNlIGlmIChpczxDb250YWluZXI+KCpsYXlvdXRCb3gpKQorICAgICAg
ICAgICAgY29tcHV0ZU1hcmdpbkJvcmRlckFuZFBhZGRpbmdGb3JJbmxpbmVDb250YWluZXIoZG93
bmNhc3Q8SW5saW5lQ29udGFpbmVyPigqbGF5b3V0Qm94KSwgdXNlZFZhbHVlcyk7CisgICAgICAg
IGVsc2UgaWYgKGxheW91dEJveC0+aXNSZXBsYWNlZCgpKQogICAgICAgICAgICAgY29tcHV0ZVdp
ZHRoQW5kSGVpZ2h0Rm9yUmVwbGFjZWRJbmxpbmVCb3goKmxheW91dEJveCwgdXNlZFZhbHVlcyk7
CisgICAgICAgIGVsc2UgaWYgKGlzPElubGluZUJveD4oKmxheW91dEJveCkpCisgICAgICAgICAg
ICBpbml0aWFsaXplTWFyZ2luQm9yZGVyQW5kUGFkZGluZ0ZvckdlbmVyaWNJbmxpbmVCb3goZG93
bmNhc3Q8SW5saW5lQm94PigqbGF5b3V0Qm94KSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBsYXlvdXRCb3ggPSBuZXh0SW5QcmVPcmRl
cigqbGF5b3V0Qm94LCByb290KTsKICAgICB9CiAKLSAgICBJbmxpbmVSdW5Qcm92aWRlciBpbmxp
bmVSdW5Qcm92aWRlcjsKLSAgICBjb2xsZWN0SW5saW5lQ29udGVudChpbmxpbmVSdW5Qcm92aWRl
cik7Ci0gICAgTGluZUxheW91dCgqdGhpcykubGF5b3V0KGlubGluZVJ1blByb3ZpZGVyKTsKKyAg
ICAvLyBGSVhNRTogVGhpcyBpcyBzdWNoIGEgd2FzdGUgd2hlbiBpbnRyaW5zaWMgd2lkdGggY29t
cHV0YXRpb24gYWxyZWFkeSBjb2xsZWN0ZWQgdGhlIGlubGluZSBpdGVtcy4KKyAgICBmb3JtYXR0
aW5nU3RhdGUoKS5pbmxpbmVJdGVtcygpLmNsZWFyKCk7CisgICAgZm9ybWF0dGluZ1N0YXRlKCku
aW5saW5lUnVucygpLmNsZWFyKCk7CisKKyAgICBjb2xsZWN0SW5saW5lQ29udGVudCgpOworICAg
IExpbmVMYXlvdXQoKnRoaXMpLmxheW91dCgpOwogICAgIExPR19XSVRIX1NUUkVBTShGb3JtYXR0
aW5nQ29udGV4dExheW91dCwgc3RyZWFtIDw8ICJbRW5kXSAtPiBpbmxpbmUgZm9ybWF0dGluZyBj
b250ZXh0IC0+IGZvcm1hdHRpbmcgcm9vdCgiIDw8ICZyb290IDw8ICIpIik7CiB9CiAKQEAgLTEy
MCwzMCArMTI1LDMwIEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVJbnRy
aW5zaWNXaWR0aENvbnN0cmFpbnRzKCkgY29uc3QKICAgICAgICAgICAgICAgICBjb21wdXRlV2lk
dGhBbmRNYXJnaW4oKmxheW91dEJveCwgdXNlZFZhbHVlcyk7CiAgICAgICAgICAgICBlbHNlIHsK
ICAgICAgICAgICAgICAgICAvLyBTaW1wbGUgaW5saW5lIGNvbnRhaW5lciB3aXRoIG5vIGludHJp
bnNpYyB3aWR0aCA8c3Bhbj4uCi0gICAgICAgICAgICAgICAgY29tcHV0ZU1hcmdpbigqbGF5b3V0
Qm94LCB1c2VkVmFsdWVzKTsKKyAgICAgICAgICAgICAgICBjb21wdXRlSG9yaXpvbnRhbE1hcmdp
bigqbGF5b3V0Qm94LCB1c2VkVmFsdWVzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
ICAgICBsYXlvdXRCb3ggPSBuZXh0SW5QcmVPcmRlcigqbGF5b3V0Qm94LCByb290KTsKICAgICB9
CiAKLSAgICBJbmxpbmVSdW5Qcm92aWRlciBpbmxpbmVSdW5Qcm92aWRlcjsKLSAgICBjb2xsZWN0
SW5saW5lQ29udGVudChpbmxpbmVSdW5Qcm92aWRlcik7CisgICAgY29sbGVjdElubGluZUNvbnRl
bnQoKTsKIAogICAgIGF1dG8gbWF4aW11bUxpbmVXaWR0aCA9IFsmXShhdXRvIGF2YWlsYWJsZVdp
ZHRoKSB7Ci0gICAgICAgIExheW91dFVuaXQgbWF4Q29udGVudExvZ2ljYWxSaWdodDsKLSAgICAg
ICAgYXV0byBsaW5lQnJlYWtlciA9IElubGluZUxpbmVCcmVha2VyIHsgbGF5b3V0U3RhdGUsIGZv
cm1hdHRpbmdTdGF0ZSgpLmlubGluZUNvbnRlbnQoKSwgaW5saW5lUnVuUHJvdmlkZXIucnVucygp
IH07Ci0gICAgICAgIExheW91dFVuaXQgbGluZUxvZ2ljYWxSaWdodDsKLQogICAgICAgICAvLyBT
d2l0Y2ggdG8gdGhlIG1pbi9tYXggZm9ybWF0dGluZyByb290IHdpZHRoIHZhbHVlcyBiZWZvcmUg
Zm9ybWF0dGluZyB0aGUgbGluZXMuCiAgICAgICAgIGZvciAoYXV0byogZm9ybWF0dGluZ1Jvb3Qg
OiBmb3JtYXR0aW5nQ29udGV4dFJvb3RMaXN0KSB7CiAgICAgICAgICAgICBhdXRvIGludHJpbnNp
Y1dpZHRocyA9IGxheW91dFN0YXRlLmZvcm1hdHRpbmdTdGF0ZUZvckJveCgqZm9ybWF0dGluZ1Jv
b3QpLmludHJpbnNpY1dpZHRoQ29uc3RyYWludHMoKmZvcm1hdHRpbmdSb290KTsKICAgICAgICAg
ICAgIGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmZvcm1hdHRpbmdSb290KS5z
ZXRDb250ZW50Qm94V2lkdGgoYXZhaWxhYmxlV2lkdGggPyBpbnRyaW5zaWNXaWR0aHMtPm1heGlt
dW0gOiBpbnRyaW5zaWNXaWR0aHMtPm1pbmltdW0pOwogICAgICAgICB9CisgICAgICAgIExheW91
dFVuaXQgbWF4Q29udGVudExvZ2ljYWxSaWdodDsKKyAgICAgICAgTGF5b3V0VW5pdCBsaW5lTG9n
aWNhbFJpZ2h0OwogCi0gICAgICAgIHdoaWxlIChhdXRvIHJ1biA9IGxpbmVCcmVha2VyLm5leHRS
dW4obGluZUxvZ2ljYWxSaWdodCwgYXZhaWxhYmxlV2lkdGgsICFsaW5lTG9naWNhbFJpZ2h0KSkg
ewotICAgICAgICAgICAgaWYgKHJ1bi0+cG9zaXRpb24gPT0gSW5saW5lTGluZUJyZWFrZXI6OlJ1
bjo6UG9zaXRpb246OkxpbmVCZWdpbikKKyAgICAgICAgTGluZUJyZWFrZXIgbGluZUJyZWFrZXIo
bGF5b3V0U3RhdGUpOworICAgICAgICBhdXRvJiBpbmxpbmVDb250ZW50ID0gZm9ybWF0dGluZ1N0
YXRlKCkuaW5saW5lSXRlbXMoKTsKKyAgICAgICAgZm9yIChhdXRvJiBpbmxpbmVJdGVtIDogaW5s
aW5lQ29udGVudCkgeworICAgICAgICAgICAgYXV0byBicmVha2luZ0NvbnRleHQgPSBsaW5lQnJl
YWtlci5icmVha2luZ0NvbnRleHQoKmlubGluZUl0ZW0sIHsgYXZhaWxhYmxlV2lkdGgsIGxpbmVM
b2dpY2FsUmlnaHQsICFsaW5lTG9naWNhbFJpZ2h0IH0pOworICAgICAgICAgICAgaWYgKGJyZWFr
aW5nQ29udGV4dC5icmVha2luZ0JlaGF2aW9yID09IExpbmVCcmVha2VyOjpCcmVha2luZ0JlaGF2
aW9yOjpXcmFwKQogICAgICAgICAgICAgICAgIGxpbmVMb2dpY2FsUmlnaHQgPSAwOwotICAgICAg
ICAgICAgbGluZUxvZ2ljYWxSaWdodCArPSBydW4tPndpZHRoOworICAgICAgICAgICAgbGluZUxv
Z2ljYWxSaWdodCArPSBpbmxpbmVJdGVtLT53aWR0aCgpOwogCiAgICAgICAgICAgICBtYXhDb250
ZW50TG9naWNhbFJpZ2h0ID0gc3RkOjptYXgobWF4Q29udGVudExvZ2ljYWxSaWdodCwgbGluZUxv
Z2ljYWxSaWdodCk7CiAgICAgICAgIH0KQEAgLTE1NCw2ICsxNTksMjYgQEAgdm9pZCBJbmxpbmVG
b3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUludHJpbnNpY1dpZHRoQ29uc3RyYWludHMoKSBjb25z
dAogICAgIGxheW91dFN0YXRlLmZvcm1hdHRpbmdTdGF0ZUZvckJveChyb290KS5zZXRJbnRyaW5z
aWNXaWR0aENvbnN0cmFpbnRzKHJvb3QsIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMpOwogfQog
Cit2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojppbml0aWFsaXplTWFyZ2luQm9yZGVyQW5k
UGFkZGluZ0ZvckdlbmVyaWNJbmxpbmVCb3goY29uc3QgSW5saW5lQm94JiBsYXlvdXRCb3gpIGNv
bnN0Cit7CisgICAgQVNTRVJUKGxheW91dEJveC5pc0Fub255bW91cygpIHx8IGlzPExpbmVCcmVh
a0JveD4obGF5b3V0Qm94KSk7CisgICAgYXV0byYgbGF5b3V0U3RhdGUgPSB0aGlzLT5sYXlvdXRT
dGF0ZSgpOworICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9y
TGF5b3V0Qm94KGxheW91dEJveCk7CisKKyAgICBkaXNwbGF5Qm94LnNldFZlcnRpY2FsTWFyZ2lu
KHsgeyB9LCB7IH0gfSk7CisgICAgZGlzcGxheUJveC5zZXRIb3Jpem9udGFsTWFyZ2luKHsgfSk7
CisgICAgZGlzcGxheUJveC5zZXRCb3JkZXIoeyB7IH0sIHsgfSB9KTsKKyAgICBkaXNwbGF5Qm94
LnNldFBhZGRpbmcoeyB9KTsKK30KKwordm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29t
cHV0ZU1hcmdpbkJvcmRlckFuZFBhZGRpbmdGb3JJbmxpbmVDb250YWluZXIoY29uc3QgSW5saW5l
Q29udGFpbmVyJiBjb250YWluZXIsIFVzZWRIb3Jpem9udGFsVmFsdWVzIHVzZWRWYWx1ZXMpIGNv
bnN0Cit7CisgICAgY29tcHV0ZUhvcml6b250YWxNYXJnaW4oY29udGFpbmVyLCB1c2VkVmFsdWVz
KTsKKyAgICBjb21wdXRlQm9yZGVyQW5kUGFkZGluZyhjb250YWluZXIsIHVzZWRWYWx1ZXMpOwor
ICAgIC8vIElubGluZSBjb250YWluZXJzICg8c3Bhbj4pIGhhdmUgMCB2ZXJ0aWNhbCBtYXJnaW5z
LgorICAgIGxheW91dFN0YXRlKCkuZGlzcGxheUJveEZvckxheW91dEJveChjb250YWluZXIpLnNl
dFZlcnRpY2FsTWFyZ2luKHsgeyB9LCB7IH0gfSk7Cit9CisKIHZvaWQgSW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQ6OmNvbXB1dGVJbnRyaW5zaWNXaWR0aEZvckZsb2F0Qm94KGNvbnN0IEJveCYgbGF5
b3V0Qm94KSBjb25zdAogewogICAgIEFTU0VSVChsYXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9u
ZWQoKSk7CkBAIC0xNjEsNyArMTg2LDcgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6
Y29tcHV0ZUludHJpbnNpY1dpZHRoRm9yRmxvYXRCb3goY29uc3QgQm94JiBsYXlvdXQKIAogICAg
IGF1dG8gdXNlZEhvcml6b250YWxWYWx1ZXMgPSBVc2VkSG9yaXpvbnRhbFZhbHVlcyB7IH07CiAg
ICAgY29tcHV0ZUJvcmRlckFuZFBhZGRpbmcobGF5b3V0Qm94LCB1c2VkSG9yaXpvbnRhbFZhbHVl
cyk7Ci0gICAgY29tcHV0ZU1hcmdpbihsYXlvdXRCb3gsIHVzZWRIb3Jpem9udGFsVmFsdWVzKTsK
KyAgICBjb21wdXRlSG9yaXpvbnRhbE1hcmdpbihsYXlvdXRCb3gsIHVzZWRIb3Jpem9udGFsVmFs
dWVzKTsKICAgICBsYXlvdXRTdGF0ZS5jcmVhdGVGb3JtYXR0aW5nQ29udGV4dChsYXlvdXRCb3gp
LT5jb21wdXRlSW50cmluc2ljV2lkdGhDb25zdHJhaW50cygpOwogCiAgICAgYXV0byB1c2VkVmVy
dGljYWxWYWx1ZXMgPSBVc2VkVmVydGljYWxWYWx1ZXMgeyB9OwpAQCAtMTc4LDExICsyMDMsMTEg
QEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUludHJpbnNpY1dpZHRoRm9y
SW5saW5lQmxvY2soY29uc3QgQm94JiBsYXkKIAogICAgIGF1dG8gdXNlZFZhbHVlcyA9IFVzZWRI
b3Jpem9udGFsVmFsdWVzIHsgfTsKICAgICBjb21wdXRlQm9yZGVyQW5kUGFkZGluZyhsYXlvdXRC
b3gsIHVzZWRWYWx1ZXMpOwotICAgIGNvbXB1dGVNYXJnaW4obGF5b3V0Qm94LCB1c2VkVmFsdWVz
KTsKKyAgICBjb21wdXRlSG9yaXpvbnRhbE1hcmdpbihsYXlvdXRCb3gsIHVzZWRWYWx1ZXMpOwog
ICAgIGxheW91dFN0YXRlKCkuY3JlYXRlRm9ybWF0dGluZ0NvbnRleHQobGF5b3V0Qm94KS0+Y29t
cHV0ZUludHJpbnNpY1dpZHRoQ29uc3RyYWludHMoKTsKIH0KIAotdm9pZCBJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dDo6Y29tcHV0ZU1hcmdpbihjb25zdCBCb3gmIGxheW91dEJveCwgVXNlZEhvcml6
b250YWxWYWx1ZXMgdXNlZFZhbHVlcykgY29uc3QKK3ZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQ6OmNvbXB1dGVIb3Jpem9udGFsTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBVc2VkSG9y
aXpvbnRhbFZhbHVlcyB1c2VkVmFsdWVzKSBjb25zdAogewogICAgIGF1dG8gY29tcHV0ZWRIb3Jp
em9udGFsTWFyZ2luID0gR2VvbWV0cnk6OmNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbihsYXlvdXRC
b3gsIHVzZWRWYWx1ZXMpOwogICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBsYXlvdXRTdGF0ZSgpLmRp
c3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KTsKQEAgLTIzNSw2ICsyNjAsOCBAQCB2b2lk
IElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpsYXlvdXRGb3JtYXR0aW5nQ29udGV4dFJvb3QoY29u
c3QgQm94JiByb290LCBVc2VkSAogCiAgICAgY29tcHV0ZUJvcmRlckFuZFBhZGRpbmcocm9vdCwg
dXNlZFZhbHVlcyk7CiAgICAgY29tcHV0ZVdpZHRoQW5kTWFyZ2luKHJvb3QsIHVzZWRWYWx1ZXMp
OworICAgIC8vIFRoaXMgaXMgc2ltaWxhciB0byBzdGF0aWMgcG9zaXRpb25pbmcgaW4gYmxvY2sg
Zm9ybWF0dGluZyBjb250ZXh0LiBXZSBqdXN0IG5lZWQgdG8gaW5pdGlhbGl6ZSB0aGUgdG9wIGxl
ZnQgcG9zaXRpb24uCisgICAgbGF5b3V0U3RhdGUoKS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KHJv
b3QpLnNldFRvcExlZnQoeyAwLCAwIH0pOwogICAgIC8vIFN3aWNoIG92ZXIgdG8gdGhlIG5ldyBm
b3JtYXR0aW5nIGNvbnRleHQgKHRoZSBvbmUgdGhhdCB0aGUgcm9vdCBjcmVhdGVzKS4KICAgICBh
dXRvIGZvcm1hdHRpbmdDb250ZXh0ID0gbGF5b3V0U3RhdGUoKS5jcmVhdGVGb3JtYXR0aW5nQ29u
dGV4dChyb290KTsKICAgICBmb3JtYXR0aW5nQ29udGV4dC0+bGF5b3V0KCk7CkBAIC0yNTYsODgg
KzI4MywyOSBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlV2lkdGhBbmRI
ZWlnaHRGb3JSZXBsYWNlZElubGluZUJveChjb25zdCBCbwogICAgIGNvbXB1dGVIZWlnaHRBbmRN
YXJnaW4obGF5b3V0Qm94KTsKIH0KIAotc3RhdGljIHZvaWQgYWRkRGV0YWNoaW5nUnVsZXMoSW5s
aW5lSXRlbSYgaW5saW5lSXRlbSwgT3B0aW9uYWw8TGF5b3V0VW5pdD4gbm9uQnJlYWthYmxlU3Rh
cnRXaWR0aCwgT3B0aW9uYWw8TGF5b3V0VW5pdD4gbm9uQnJlYWthYmxlRW5kV2lkdGgpCi17Ci0g
ICAgT3B0aW9uU2V0PElubGluZUl0ZW06OkRldGFjaGluZ1J1bGU+IGRldGFjaGluZ1J1bGVzOwot
ICAgIGlmIChub25CcmVha2FibGVTdGFydFdpZHRoKSB7Ci0gICAgICAgIGRldGFjaGluZ1J1bGVz
LmFkZChJbmxpbmVJdGVtOjpEZXRhY2hpbmdSdWxlOjpCcmVha0F0U3RhcnQpOwotICAgICAgICBp
bmxpbmVJdGVtLmFkZE5vbkJyZWFrYWJsZVN0YXJ0KCpub25CcmVha2FibGVTdGFydFdpZHRoKTsK
LSAgICB9Ci0gICAgaWYgKG5vbkJyZWFrYWJsZUVuZFdpZHRoKSB7Ci0gICAgICAgIGRldGFjaGlu
Z1J1bGVzLmFkZChJbmxpbmVJdGVtOjpEZXRhY2hpbmdSdWxlOjpCcmVha0F0RW5kKTsKLSAgICAg
ICAgaW5saW5lSXRlbS5hZGROb25CcmVha2FibGVFbmQoKm5vbkJyZWFrYWJsZUVuZFdpZHRoKTsK
LSAgICB9Ci0gICAgaW5saW5lSXRlbS5hZGREZXRhY2hpbmdSdWxlKGRldGFjaGluZ1J1bGVzKTsK
LX0KLQotc3RhdGljIElubGluZUl0ZW0mIGNyZWF0ZUFuZEFwcGVuZElubGluZUl0ZW0oSW5saW5l
UnVuUHJvdmlkZXImIGlubGluZVJ1blByb3ZpZGVyLCBJbmxpbmVDb250ZW50JiBpbmxpbmVDb250
ZW50LCBjb25zdCBCb3gmIGxheW91dEJveCkKLXsKLSAgICBBU1NFUlQobGF5b3V0Qm94LmlzSW5s
aW5lTGV2ZWxCb3goKSB8fCBsYXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSk7Ci0gICAg
YXV0byBpbmxpbmVJdGVtID0gc3RkOjptYWtlX3VuaXF1ZTxJbmxpbmVJdGVtPihsYXlvdXRCb3gp
OwotICAgIGF1dG8qIGlubGluZUl0ZW1QdHIgPSBpbmxpbmVJdGVtLmdldCgpOwotICAgIGlubGlu
ZUNvbnRlbnQuYWRkKFdURk1vdmUoaW5saW5lSXRlbSkpOwotICAgIGlubGluZVJ1blByb3ZpZGVy
LmFwcGVuZCgqaW5saW5lSXRlbVB0cik7Ci0gICAgcmV0dXJuICppbmxpbmVJdGVtUHRyOwotfQot
Ci12b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb2xsZWN0SW5saW5lQ29udGVudChJbmxp
bmVSdW5Qcm92aWRlciYgaW5saW5lUnVuUHJvdmlkZXIpIGNvbnN0Cit2b2lkIElubGluZUZvcm1h
dHRpbmdDb250ZXh0Ojpjb2xsZWN0SW5saW5lQ29udGVudCgpIGNvbnN0CiB7CiAgICAgaWYgKCFp
czxDb250YWluZXI+KHJvb3QoKSkpCiAgICAgICAgIHJldHVybjsKICAgICBhdXRvJiByb290ID0g
ZG93bmNhc3Q8Q29udGFpbmVyPih0aGlzLT5yb290KCkpOwogICAgIGlmICghcm9vdC5oYXNJbkZs
b3dPckZsb2F0aW5nQ2hpbGQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIC8vIFRoZSBsb2dpYyBo
ZXJlIGlzIHZlcnkgc2ltaWxhciB0byBCRkMgbGF5b3V0LgotICAgIC8vIDEuIFRyYXZlcnMgZG93
biB0aGUgbGF5b3V0IHRyZWUgYW5kIGNvbGxlY3QgInN0YXJ0IiB1bmJyZWFrYWJsZSB3aWR0aHMg
KG1hcmdpbi1sZWZ0LCBib3JkZXItbGVmdCwgcGFkZGluZy1sZWZ0KQotICAgIC8vIDIuIENyZWF0
ZSBJbmxpbmVJdGVtIHBlciBsZWFmIGlubGluZSBib3ggKHRleHQgbm9kZXMsIGlubGluZS1ibG9j
a3MsIGZsb2F0cykgYW5kIHNldCAic3RhcnQiIHVuYnJlYWthYmxlIHdpZHRoIG9uIHRoZW0uIAot
ICAgIC8vIDMuIENsaW1iIGJhY2sgYW5kIGNvbGxlY3QgImVuZCIgdW5icmVha2FibGUgd2lkdGgg
YW5kIHNldCBpdCBvbiB0aGUgbGFzdCBJbmxpbmVJdGVtLgotICAgIGF1dG8mIGxheW91dFN0YXRl
ID0gdGhpcy0+bGF5b3V0U3RhdGUoKTsKLSAgICBhdXRvJiBpbmxpbmVDb250ZW50ID0gZm9ybWF0
dGluZ1N0YXRlKCkuaW5saW5lQ29udGVudCgpOwotCi0gICAgZW51bSBjbGFzcyBOb25CcmVha2Fi
bGVXaWR0aFR5cGUgeyBTdGFydCwgRW5kIH07Ci0gICAgYXV0byBub25CcmVha2FibGVXaWR0aCA9
IFsmXShhdXRvJiBjb250YWluZXIsIGF1dG8gdHlwZSkgewotICAgICAgICBhdXRvJiBkaXNwbGF5
Qm94ID0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveChjb250YWluZXIpOwotICAg
ICAgICBpZiAodHlwZSA9PSBOb25CcmVha2FibGVXaWR0aFR5cGU6OlN0YXJ0KQotICAgICAgICAg
ICAgcmV0dXJuIGRpc3BsYXlCb3gubWFyZ2luU3RhcnQoKSArIGRpc3BsYXlCb3guYm9yZGVyTGVm
dCgpICsgZGlzcGxheUJveC5wYWRkaW5nTGVmdCgpLnZhbHVlT3IoMCk7Ci0gICAgICAgIHJldHVy
biBkaXNwbGF5Qm94Lm1hcmdpbkVuZCgpICsgZGlzcGxheUJveC5ib3JkZXJSaWdodCgpICsgZGlz
cGxheUJveC5wYWRkaW5nUmlnaHQoKS52YWx1ZU9yKDApOwotICAgIH07Ci0KKyAgICAvLyBUcmF2
ZXJzZSB0aGUgdHJlZSBhbmQgY3JlYXRlIGlubGluZSBpdGVtcyBvdXQgb2YgY29udGFpbmVycyBh
bmQgbGVhZiBub2RlLiBUaGlzIGVzc2VudGlhbGx5IHRydW5zIHRoZSB0cmVlIGlubGluZSBzdHJ1
Y3R1cmUgaW50byBhIGZsYXQgb25lLgorICAgIC8vIDxzcGFuPnRleHQ8c3Bhbj48L3NwYW4+PGlt
Zz48L3NwYW4+IC0+IFtDb250YWluZXJTdGFydF1bSW5saW5lQm94XVtDb250YWluZXJTdGFydF1b
Q29udGFpbmVyRW5kXVtJbmxpbmVCb3hdW0NvbnRhaW5lckVuZF0KKyAgICBhdXRvJiBmb3JtYXR0
aW5nU3RhdGUgPSB0aGlzLT5mb3JtYXR0aW5nU3RhdGUoKTsKICAgICBMYXlvdXRRdWV1ZSBsYXlv
dXRRdWV1ZTsKICAgICBsYXlvdXRRdWV1ZS5hcHBlbmQocm9vdC5maXJzdEluRmxvd09yRmxvYXRp
bmdDaGlsZCgpKTsKLQotICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IG5vbkJyZWFrYWJsZVN0YXJ0
V2lkdGg7Ci0gICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gbm9uQnJlYWthYmxlRW5kV2lkdGg7Ci0g
ICAgSW5saW5lSXRlbSogbGFzdElubGluZUl0ZW0gPSBudWxscHRyOwogICAgIHdoaWxlICghbGF5
b3V0UXVldWUuaXNFbXB0eSgpKSB7CisgICAgICAgIGF1dG8gdHJlYXRBc0lubGluZUNvbnRhaW5l
ciA9IFtdKGF1dG8mIGxheW91dEJveCkgeworICAgICAgICAgICAgcmV0dXJuIGlzPENvbnRhaW5l
cj4obGF5b3V0Qm94KSAmJiAhbGF5b3V0Qm94LmVzdGFibGlzaGVzRm9ybWF0dGluZ0NvbnRleHQo
KTsKKyAgICAgICAgfTsKICAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgIGF1dG8m
IGxheW91dEJveCA9ICpsYXlvdXRRdWV1ZS5sYXN0KCk7Ci0gICAgICAgICAgICBpZiAoIWlzPENv
bnRhaW5lcj4obGF5b3V0Qm94KSkKKyAgICAgICAgICAgIGlmICghdHJlYXRBc0lubGluZUNvbnRh
aW5lcihsYXlvdXRCb3gpKQogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgLy8g
VGhpcyBpcyB0aGUgc3RhcnQgb2YgYW4gaW5saW5lIGNvbnRhaW5lciAoZS5nLiA8c3Bhbj4pLgor
ICAgICAgICAgICAgZm9ybWF0dGluZ1N0YXRlLmFkZElubGluZUl0ZW0oc3RkOjptYWtlX3VuaXF1
ZTxJbmxpbmVJdGVtPihsYXlvdXRCb3gsIElubGluZUl0ZW06OlR5cGU6OkNvbnRhaW5lclN0YXJ0
KSk7CiAgICAgICAgICAgICBhdXRvJiBjb250YWluZXIgPSBkb3duY2FzdDxDb250YWluZXI+KGxh
eW91dEJveCk7Ci0KLSAgICAgICAgICAgIGlmIChjb250YWluZXIuZXN0YWJsaXNoZXNGb3JtYXR0
aW5nQ29udGV4dCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gRm9ybWF0dGluZyBjb250ZXh0cyBh
cmUgdHJlYXRlZCBhcyBsZWFmIG5vZGVzLgotICAgICAgICAgICAgICAgIGF1dG8mIGlubGluZUl0
ZW0gPSBjcmVhdGVBbmRBcHBlbmRJbmxpbmVJdGVtKGlubGluZVJ1blByb3ZpZGVyLCBpbmxpbmVD
b250ZW50LCBjb250YWluZXIpOwotICAgICAgICAgICAgICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBs
YXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGNvbnRhaW5lcik7Ci0gICAgICAgICAg
ICAgICAgYXV0byBjdXJyZW50Tm9uQnJlYWthYmxlU3RhcnRXaWR0aCA9IG5vbkJyZWFrYWJsZVN0
YXJ0V2lkdGgudmFsdWVPcigwKSArIGRpc3BsYXlCb3gubWFyZ2luU3RhcnQoKSArIG5vbkJyZWFr
YWJsZUVuZFdpZHRoLnZhbHVlT3IoMCk7Ci0gICAgICAgICAgICAgICAgYWRkRGV0YWNoaW5nUnVs
ZXMoaW5saW5lSXRlbSwgY3VycmVudE5vbkJyZWFrYWJsZVN0YXJ0V2lkdGgsIGRpc3BsYXlCb3gu
bWFyZ2luRW5kKCkpOwotICAgICAgICAgICAgICAgIG5vbkJyZWFrYWJsZVN0YXJ0V2lkdGggPSB7
IH07Ci0gICAgICAgICAgICAgICAgbm9uQnJlYWthYmxlRW5kV2lkdGggPSB7IH07Ci0KLSAgICAg
ICAgICAgICAgICAvLyBGb3JtYXR0aW5nIGNvbnRleHQgcm9vdHMgdGFrZSBjYXJlIG9mIHRoZWly
IHN1YnRyZWVzLiBDb250aW51ZSB3aXRoIG5leHQgc2libGluZyBpZiBleGlzdHMuCi0gICAgICAg
ICAgICAgICAgbGF5b3V0UXVldWUucmVtb3ZlTGFzdCgpOwotICAgICAgICAgICAgICAgIGlmICgh
Y29udGFpbmVyLm5leHRJbkZsb3dPckZsb2F0aW5nU2libGluZygpKQotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBsYXlvdXRRdWV1ZS5hcHBlbmQoY29udGFpbmVy
Lm5leHRJbkZsb3dPckZsb2F0aW5nU2libGluZygpKTsKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBub24tZm9y
bWF0dGluZyBjb250ZXh0IGNvbnRhaW5lciBoYXMgYW55IG5vbi1icmVha2FibGUgc3RhcnQgcHJv
cGVydGllcyAobWFyZ2luLWxlZnQsIGJvcmRlci1sZWZ0LCBwYWRkaW5nLWxlZnQpCi0gICAgICAg
ICAgICAvLyA8c3BhbiBzdHlsZT0icGFkZGluZy1sZWZ0OiA1cHgiPjxzcGFuIHN0eWxlPSJwYWRk
aW5nLWxlZnQ6IDVweCI+Zm9vYmFyPC9zcGFuPjwvc3Bhbj4gLT4gNXB4ICsgNXB4Ci0gICAgICAg
ICAgICBhdXRvIGN1cnJlbnROb25CcmVha2FibGVTdGFydFdpZHRoID0gbm9uQnJlYWthYmxlV2lk
dGgobGF5b3V0Qm94LCBOb25CcmVha2FibGVXaWR0aFR5cGU6OlN0YXJ0KTsKLSAgICAgICAgICAg
IGlmIChjdXJyZW50Tm9uQnJlYWthYmxlU3RhcnRXaWR0aCB8fCBsYXlvdXRCb3guaXNQb3NpdGlv
bmVkKCkpCi0gICAgICAgICAgICAgICAgbm9uQnJlYWthYmxlU3RhcnRXaWR0aCA9IG5vbkJyZWFr
YWJsZVN0YXJ0V2lkdGgudmFsdWVPcigwKSArIGN1cnJlbnROb25CcmVha2FibGVTdGFydFdpZHRo
OwotCiAgICAgICAgICAgICBpZiAoIWNvbnRhaW5lci5oYXNJbkZsb3dPckZsb2F0aW5nQ2hpbGQo
KSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGxheW91dFF1ZXVlLmFwcGVu
ZChjb250YWluZXIuZmlyc3RJbkZsb3dPckZsb2F0aW5nQ2hpbGQoKSk7CkBAIC0zNDUsMjkgKzMx
MywxOSBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb2xsZWN0SW5saW5lQ29udGVu
dChJbmxpbmVSdW5Qcm92aWRlciYgaW5saW5lUnVuUAogCiAgICAgICAgIHdoaWxlICghbGF5b3V0
UXVldWUuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSAqbGF5b3V0
UXVldWUudGFrZUxhc3QoKTsKLSAgICAgICAgICAgIGlmIChpczxDb250YWluZXI+KGxheW91dEJv
eCkpIHsKLSAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBlbmQgb2YgYW4gaW5saW5lIGNv
bnRhaW5lci4gQ29tcHV0ZSB0aGUgbm9uLWJyZWFrYWJsZSBlbmQgd2lkdGggYW5kIGFkZCBpdCB0
byB0aGUgbGFzdCBpbmxpbmUgYm94LgotICAgICAgICAgICAgICAgIC8vIDxzcGFuIHN0eWxlPSJw
YWRkaW5nLXJpZ2h0OiA1cHgiPmZvb2Jhcjwvc3Bhbj4gLT4gNXB4OyBsYXN0IGlubGluZSBpdGVt
IC0+ICJmb29iYXIiCi0gICAgICAgICAgICAgICAgYXV0byBjdXJyZW50Tm9uQnJlYWthYmxlRW5k
V2lkdGggPSBub25CcmVha2FibGVXaWR0aChsYXlvdXRCb3gsIE5vbkJyZWFrYWJsZVdpZHRoVHlw
ZTo6RW5kKTsKLSAgICAgICAgICAgICAgICBpZiAoY3VycmVudE5vbkJyZWFrYWJsZUVuZFdpZHRo
IHx8IGxheW91dEJveC5pc1Bvc2l0aW9uZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgbm9uQnJl
YWthYmxlRW5kV2lkdGggPSBub25CcmVha2FibGVFbmRXaWR0aC52YWx1ZU9yKDApICsgY3VycmVu
dE5vbkJyZWFrYWJsZUVuZFdpZHRoOwotICAgICAgICAgICAgICAgIC8vIEFkZCBpdCB0byB0aGUg
bGFzdCBpbmxpbmUgYm94Ci0gICAgICAgICAgICAgICAgaWYgKGxhc3RJbmxpbmVJdGVtKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGFkZERldGFjaGluZ1J1bGVzKCpsYXN0SW5saW5lSXRlbSwgeyB9
LCBub25CcmVha2FibGVFbmRXaWR0aCk7Ci0gICAgICAgICAgICAgICAgICAgIG5vbkJyZWFrYWJs
ZUVuZFdpZHRoID0geyB9OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgLy8gTGVhZiBpbmxpbmUgYm94Ci0gICAgICAgICAgICAgICAgYXV0
byYgaW5saW5lSXRlbSA9IGNyZWF0ZUFuZEFwcGVuZElubGluZUl0ZW0oaW5saW5lUnVuUHJvdmlk
ZXIsIGlubGluZUNvbnRlbnQsIGxheW91dEJveCk7Ci0gICAgICAgICAgICAgICAgLy8gQWRkIHN0
YXJ0IGFuZCB0aGUgKHRocm91Z2ggZW1wdHkgY29udGFpbmVycykgYWNjdW11bGF0ZWQgZW5kIHdp
ZHRoLgotICAgICAgICAgICAgICAgIC8vIDxzcGFuIHN0eWxlPSJwYWRkaW5nLWxlZnQ6IDFweCI+
Zm9vYmFyPC9zcGFuPiAtPiBub25CcmVha2FibGVTdGFydFdpZHRoOiAxcHg7Ci0gICAgICAgICAg
ICAgICAgLy8gPHNwYW4gc3R5bGU9InBhZGRpbmc6IDVweCI+PC9zcGFuPmZvb2JhciAtPiBub25C
cmVha2FibGVTdGFydFdpZHRoOiA1cHg7IG5vbkJyZWFrYWJsZUVuZFdpZHRoOiA1cHgKLSAgICAg
ICAgICAgICAgICBpZiAobm9uQnJlYWthYmxlU3RhcnRXaWR0aCB8fCBub25CcmVha2FibGVFbmRX
aWR0aCkgewotICAgICAgICAgICAgICAgICAgICBhZGREZXRhY2hpbmdSdWxlcyhpbmxpbmVJdGVt
LCBub25CcmVha2FibGVTdGFydFdpZHRoLnZhbHVlT3IoMCkgKyBub25CcmVha2FibGVFbmRXaWR0
aC52YWx1ZU9yKDApLCB7IH0pOwotICAgICAgICAgICAgICAgICAgICBub25CcmVha2FibGVTdGFy
dFdpZHRoID0geyB9OwotICAgICAgICAgICAgICAgICAgICBub25CcmVha2FibGVFbmRXaWR0aCA9
IHsgfTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbGFzdElubGluZUl0ZW0g
PSAmaW5saW5lSXRlbTsKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGVuZCBvZiBhbiBpbmxp
bmUgY29udGFpbmVyIChlLmcuIDwvc3Bhbj4pLgorICAgICAgICAgICAgaWYgKHRyZWF0QXNJbmxp
bmVDb250YWluZXIobGF5b3V0Qm94KSkKKyAgICAgICAgICAgICAgICBmb3JtYXR0aW5nU3RhdGUu
YWRkSW5saW5lSXRlbShzdGQ6Om1ha2VfdW5pcXVlPElubGluZUl0ZW0+KGxheW91dEJveCwgSW5s
aW5lSXRlbTo6VHlwZTo6Q29udGFpbmVyRW5kKSk7CisgICAgICAgICAgICBlbHNlIGlmIChpczxM
aW5lQnJlYWtCb3g+KGxheW91dEJveCkpCisgICAgICAgICAgICAgICAgZm9ybWF0dGluZ1N0YXRl
LmFkZElubGluZUl0ZW0oc3RkOjptYWtlX3VuaXF1ZTxJbmxpbmVJdGVtPihsYXlvdXRCb3gsIElu
bGluZUl0ZW06OlR5cGU6OkhhcmRMaW5lQnJlYWspKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGxh
eW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpKQorICAgICAgICAgICAgICAgIGZvcm1hdHRp
bmdTdGF0ZS5hZGRJbmxpbmVJdGVtKHN0ZDo6bWFrZV91bmlxdWU8SW5saW5lSXRlbT4obGF5b3V0
Qm94LCBJbmxpbmVJdGVtOjpUeXBlOjpGbG9hdCkpOworICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgQVNTRVJUKGlzPElubGluZUJveD4obGF5b3V0Qm94KSB8fCBsYXlvdXRCb3gu
aXNJbmxpbmVCbG9ja0JveCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoaXM8SW5saW5lQm94Pihs
YXlvdXRCb3gpICYmIGRvd25jYXN0PElubGluZUJveD4obGF5b3V0Qm94KS5oYXNUZXh0Q29udGVu
dCgpKQorICAgICAgICAgICAgICAgICAgICBJbmxpbmVUZXh0SXRlbTo6Y3JlYXRlQW5kQXBwZW5k
VGV4dEl0ZW1zKGZvcm1hdHRpbmdTdGF0ZS5pbmxpbmVJdGVtcygpLCBkb3duY2FzdDxJbmxpbmVC
b3g+KGxheW91dEJveCkpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgZm9ybWF0dGluZ1N0YXRlLmFkZElubGluZUl0ZW0oc3RkOjptYWtlX3VuaXF1ZTxJbmxpbmVJ
dGVtPihsYXlvdXRCb3gsIElubGluZUl0ZW06OlR5cGU6OkJveCkpOwogICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICBpZiAoYXV0byogbmV4dFNpYmxpbmcgPSBsYXlvdXRCb3gubmV4dEluRmxv
d09yRmxvYXRpbmdTaWJsaW5nKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oCmlu
ZGV4IGE0ZmIzMTU4NGFkZjhiODFkOGQ1YzYxYzMzNzI2MTJiMGRhOTMyODEuLjliMGQ2MjI2YjUz
YWNjNGUxYmZhZTI1NWZkZGY5NTgxMDY1NWUwZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQuaApAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgIkRpc3BsYXlCb3guaCIKICNpbmNs
dWRlICJGb3JtYXR0aW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIklubGluZUZvcm1hdHRpbmdTdGF0
ZS5oIgotI2luY2x1ZGUgIklubGluZVJ1bi5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzgsNyArMzcsNiBAQCBuYW1lc3BhY2UgTGF5b3V0
IHsKIAogY2xhc3MgRmxvYXRpbmdTdGF0ZTsKIGNsYXNzIElubGluZUNvbnRhaW5lcjsKLWNsYXNz
IElubGluZVJ1blByb3ZpZGVyOwogY2xhc3MgTGluZTsKIAogLy8gVGhpcyBjbGFzcyBpbXBsZW1l
bnRzIHRoZSBsYXlvdXQgbG9naWMgZm9yIGlubGluZSBmb3JtYXR0aW5nIGNvbnRleHRzLgpAQCAt
NTUsMjEgKzUzLDE1IEBAIHByaXZhdGU6CiAgICAgY2xhc3MgTGluZUxheW91dCB7CiAgICAgcHVi
bGljOgogICAgICAgICBMaW5lTGF5b3V0KGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0Jik7
Ci0gICAgICAgIHZvaWQgbGF5b3V0KGNvbnN0IElubGluZVJ1blByb3ZpZGVyJikgY29uc3Q7Cisg
ICAgICAgIHZvaWQgbGF5b3V0KCkgY29uc3Q7CiAKICAgICBwcml2YXRlOgotICAgICAgICBlbnVt
IGNsYXNzIElzTGFzdExpbmUgeyBObywgWWVzIH07Ci0gICAgICAgIHZvaWQgaW5pdGlhbGl6ZU5l
d0xpbmUoTGluZSYpIGNvbnN0OwotICAgICAgICB2b2lkIGNsb3NlTGluZShMaW5lJiwgSXNMYXN0
TGluZSkgY29uc3Q7Ci0gICAgICAgIHZvaWQgYXBwZW5kQ29udGVudFRvTGluZShMaW5lJiwgY29u
c3QgSW5saW5lUnVuUHJvdmlkZXI6OlJ1biYsIGNvbnN0IExheW91dFNpemUmKSBjb25zdDsKLSAg
ICAgICAgdm9pZCBwb3N0UHJvY2Vzc0lubGluZVJ1bnMoTGluZSYsIElzTGFzdExpbmUpIGNvbnN0
OwotICAgICAgICB2b2lkIGNyZWF0ZUZpbmFsUnVucyhMaW5lJikgY29uc3Q7Ci0gICAgICAgIHZv
aWQgc3BsaXRJbmxpbmVSdW5JZk5lZWRlZChjb25zdCBJbmxpbmVSdW4mLCBJbmxpbmVSdW5zJiBz
cGxpdFJ1bnMpIGNvbnN0OwotICAgICAgICB2b2lkIGNvbXB1dGVGbG9hdFBvc2l0aW9uKGNvbnN0
IEZsb2F0aW5nQ29udGV4dCYsIExpbmUmLCBjb25zdCBCb3gmKSBjb25zdDsKLSAgICAgICAgdm9p
ZCBwbGFjZUluRmxvd1Bvc2l0aW9uZWRDaGlsZHJlbih1bnNpZ25lZCBmaXJzdFJ1bkluZGV4KSBj
b25zdDsKLSAgICAgICAgdm9pZCBhbGlnblJ1bnMoVGV4dEFsaWduTW9kZSwgTGluZSYsIElzTGFz
dExpbmUpIGNvbnN0OwotICAgICAgICB2b2lkIGNvbXB1dGVFeHBhbnNpb25PcHBvcnR1bml0aWVz
KExpbmUmLCBjb25zdCBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuJiwgSW5saW5lUnVuUHJvdmlkZXI6
OlJ1bjo6VHlwZSBsYXN0UnVuVHlwZSkgY29uc3Q7Ci0gICAgICAgIExheW91dFVuaXQgcnVuV2lk
dGgoY29uc3QgSW5saW5lQ29udGVudCYsIGNvbnN0IElubGluZUl0ZW0mLCBJdGVtUG9zaXRpb24g
ZnJvbSwgdW5zaWduZWQgbGVuZ3RoLCBMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsTGVmdCkgY29u
c3Q7CisgICAgICAgIExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
Zm9ybWF0dGluZ0NvbnRleHQubGF5b3V0U3RhdGUoKTsgfQorICAgICAgICB2b2lkIGluaXRpYWxp
emVMaW5lKExpbmUmLCBMYXlvdXRVbml0IGxpbmVMb2dpY2FsVG9wKSBjb25zdDsKKyAgICAgICAg
dm9pZCBjbG9zZUxpbmUoTGluZSYpIGNvbnN0OworICAgICAgICB2b2lkIGNvbW1pdElubGluZUl0
ZW1Ub0xpbmUoTGluZSYsIGNvbnN0IElubGluZUl0ZW0mKSBjb25zdDsKKyAgICAgICAgdm9pZCBo
YW5kbGVGbG9hdChMaW5lJiwgY29uc3QgRmxvYXRpbmdDb250ZXh0JiwgY29uc3QgSW5saW5lSXRl
bSYgZmxvYXRCb3gpIGNvbnN0OworICAgICAgICB2b2lkIGFsaWduUnVucyhUZXh0QWxpZ25Nb2Rl
LCB1bnNpZ25lZCBmaXJzdFJ1bkluZGV4LCBMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoKSBjb25z
dDsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHN0YXRpYyB2b2lkIGp1c3RpZnlSdW5zKExpbmUm
KTsKQEAgLTg5LDEzICs4MSwxNSBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBsYXlvdXRGb3JtYXR0
aW5nQ29udGV4dFJvb3QoY29uc3QgQm94JiwgVXNlZEhvcml6b250YWxWYWx1ZXMpIGNvbnN0Owog
ICAgIHZvaWQgY29tcHV0ZUludHJpbnNpY1dpZHRoRm9yRmxvYXRCb3goY29uc3QgQm94JikgY29u
c3Q7CisgICAgdm9pZCBjb21wdXRlTWFyZ2luQm9yZGVyQW5kUGFkZGluZ0ZvcklubGluZUNvbnRh
aW5lcihjb25zdCBJbmxpbmVDb250YWluZXImLCBVc2VkSG9yaXpvbnRhbFZhbHVlcykgY29uc3Q7
CisgICAgdm9pZCBpbml0aWFsaXplTWFyZ2luQm9yZGVyQW5kUGFkZGluZ0ZvckdlbmVyaWNJbmxp
bmVCb3goY29uc3QgSW5saW5lQm94JikgY29uc3Q7CiAgICAgdm9pZCBjb21wdXRlSW50cmluc2lj
V2lkdGhGb3JJbmxpbmVCbG9jayhjb25zdCBCb3gmKSBjb25zdDsKICAgICB2b2lkIGNvbXB1dGVX
aWR0aEFuZEhlaWdodEZvclJlcGxhY2VkSW5saW5lQm94KGNvbnN0IEJveCYsIFVzZWRIb3Jpem9u
dGFsVmFsdWVzKSBjb25zdDsKLSAgICB2b2lkIGNvbXB1dGVNYXJnaW4oY29uc3QgQm94JiwgVXNl
ZEhvcml6b250YWxWYWx1ZXMpIGNvbnN0OworICAgIHZvaWQgY29tcHV0ZUhvcml6b250YWxNYXJn
aW4oY29uc3QgQm94JiwgVXNlZEhvcml6b250YWxWYWx1ZXMpIGNvbnN0OwogICAgIHZvaWQgY29t
cHV0ZUhlaWdodEFuZE1hcmdpbihjb25zdCBCb3gmKSBjb25zdDsKICAgICB2b2lkIGNvbXB1dGVX
aWR0aEFuZE1hcmdpbihjb25zdCBCb3gmLCBVc2VkSG9yaXpvbnRhbFZhbHVlcykgY29uc3Q7CiAK
LSAgICB2b2lkIGNvbGxlY3RJbmxpbmVDb250ZW50KElubGluZVJ1blByb3ZpZGVyJikgY29uc3Q7
CisgICAgdm9pZCBjb2xsZWN0SW5saW5lQ29udGVudCgpIGNvbnN0OwogCiAgICAgSW5saW5lRm9y
bWF0dGluZ1N0YXRlJiBmb3JtYXR0aW5nU3RhdGUoKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxJ
bmxpbmVGb3JtYXR0aW5nU3RhdGU+KEZvcm1hdHRpbmdDb250ZXh0Ojpmb3JtYXR0aW5nU3RhdGUo
KSk7IH0KIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0
dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQuY3BwIGIvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5
b3V0LmNwcAppbmRleCAzNjc1ZmFkZjkxOGYxNzA5OTg4OTNkZWQzNDhhYmU3NTVkMDQwYWZmLi45
NDFlYWRkYWYzZmJmYmY2MmMwZjQyYjYzMzliMjJlMGFjOWM0ZDZkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4
dExpbmVMYXlvdXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0
aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0TGluZUxheW91dC5jcHAKQEAgLTMyLDcgKzMyLDYg
QEAKICNpbmNsdWRlICJGbG9hdGluZ1N0YXRlLmgiCiAjaW5jbHVkZSAiSW5saW5lRm9ybWF0dGlu
Z1N0YXRlLmgiCiAjaW5jbHVkZSAiSW5saW5lTGluZUJyZWFrZXIuaCIKLSNpbmNsdWRlICJJbmxp
bmVSdW5Qcm92aWRlci5oIgogI2luY2x1ZGUgIkxheW91dEJveC5oIgogI2luY2x1ZGUgIkxheW91
dENvbnRhaW5lci5oIgogI2luY2x1ZGUgIkxheW91dFN0YXRlLmgiCkBAIC00MSwyMzAgKzQwLDMx
OCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIExheW91dCB7CiAKK3N0cnVjdCBV
c2VkSGVpZ2h0QW5kRGVwdGggeworICAgIExheW91dFVuaXQgaGVpZ2h0OworICAgIExheW91dFVu
aXQgZGVwdGg7Cit9OworCitzdGF0aWMgVXNlZEhlaWdodEFuZERlcHRoIGhhbGZMZWFkaW5nTWV0
cmljcyhjb25zdCBGb250TWV0cmljcyYgZm9udE1ldHJpY3MsIExheW91dFVuaXQgbGluZUxvZ2lj
YWxIZWlnaHQpCit7CisgICAgYXV0byBhc2NlbnQgPSBmb250TWV0cmljcy5hc2NlbnQoKTsKKyAg
ICBhdXRvIGRlc2NlbnQgPSBmb250TWV0cmljcy5kZXNjZW50KCk7CisgICAgLy8gMTAuOC4xIExl
YWRpbmcgYW5kIGhhbGYtbGVhZGluZworICAgIGF1dG8gbGVhZGluZyA9IGxpbmVMb2dpY2FsSGVp
Z2h0IC0gKGFzY2VudCArIGRlc2NlbnQpOworICAgIC8vIElubGluZSB0cmVlIGlzIGFsbCBpbnRl
Z2VyIGJhc2VkLgorICAgIGF1dG8gYWRqdXN0ZWRBc2NlbnQgPSBzdGQ6Om1heCgoYXNjZW50ICsg
bGVhZGluZyAvIDIpLmZsb29yKCksIDApOworICAgIGF1dG8gYWRqdXN0ZWREZXNjZW50ID0gc3Rk
OjptYXgoKGRlc2NlbnQgKyBsZWFkaW5nIC8gMikuY2VpbCgpLCAwKTsKKyAgICByZXR1cm4geyBh
ZGp1c3RlZEFzY2VudCwgYWRqdXN0ZWREZXNjZW50IH07IAorfQorCiBjbGFzcyBMaW5lIHsKIHB1
YmxpYzoKLSAgICB2b2lkIGluaXQoY29uc3QgTGF5b3V0UG9pbnQmIHRvcExlZnQsIExheW91dFVu
aXQgYXZhaWxhYmxlV2lkdGgsIExheW91dFVuaXQgbWluaW1hbEhlaWdodCk7Ci0gICAgdm9pZCBj
bG9zZSgpOworICAgIExpbmUoY29uc3QgTGF5b3V0U3RhdGUmKTsKKworICAgIHZvaWQgcmVzZXQo
Y29uc3QgTGF5b3V0UG9pbnQmIHRvcExlZnQsIExheW91dFVuaXQgYXZhaWxhYmxlV2lkdGgsIExh
eW91dFVuaXQgbWluaW11bUxpbmVIZWlnaHQsIExheW91dFVuaXQgYmFzZWxpbmVPZmZzZXQpOwor
CisgICAgc3RydWN0IExpbmVJdGVtIHsKKyAgICAgICAgTGluZUl0ZW0oRGlzcGxheTo6UnVuLCBj
b25zdCBJbmxpbmVJdGVtJiwgYm9vbCBpc0NvbGxhcHNlZCwgYm9vbCBjYW5CZUV4dGVuZGVkKTsK
KworICAgICAgICAvLyBSZWxhdGl2ZSB0byB0aGUgYmFzZWxpbmUuCisgICAgICAgIERpc3BsYXk6
OlJ1biBpbmxpbmVSdW47CisgICAgICAgIGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW07Cisg
ICAgICAgIGJvb2wgaXNDb2xsYXBzZWQgeyBmYWxzZSB9OworICAgICAgICBib29sIGNhbkJlRXh0
ZW5kZWQgeyBmYWxzZSB9OworICAgIH07CisKKyAgICB1c2luZyBMaW5lSXRlbXMgPSBWZWN0b3I8
c3RkOjp1bmlxdWVfcHRyPExpbmVJdGVtPj47CisgICAgY29uc3QgTGluZUl0ZW1zJiBjbG9zZSgp
OwogCi0gICAgdm9pZCBhcHBlbmRDb250ZW50KGNvbnN0IElubGluZVJ1blByb3ZpZGVyOjpSdW4m
LCBjb25zdCBMYXlvdXRTaXplJik7CisgICAgdm9pZCBhcHBlbmRUZXh0Q29udGVudChjb25zdCBJ
bmxpbmVUZXh0SXRlbSYsIExheW91dFNpemUpOworICAgIHZvaWQgYXBwZW5kTm9uVGV4dENvbnRl
bnQoY29uc3QgSW5saW5lSXRlbSYsIExheW91dFNpemUpOworICAgIHZvaWQgYXBwZW5kSW5saW5l
Q29udGFpbmVyU3RhcnQoY29uc3QgSW5saW5lSXRlbSYpOworICAgIHZvaWQgYXBwZW5kSW5saW5l
Q29udGFpbmVyRW5kKGNvbnN0IElubGluZUl0ZW0mKTsKKyAgICB2b2lkIGFwcGVuZEhhcmRMaW5l
QnJlYWsoY29uc3QgSW5saW5lSXRlbSYpOwogCi0gICAgdm9pZCBhZGp1c3RMb2dpY2FsTGVmdChM
YXlvdXRVbml0IGRlbHRhKTsKLSAgICB2b2lkIGFkanVzdExvZ2ljYWxSaWdodChMYXlvdXRVbml0
IGRlbHRhKTsKKyAgICBib29sIGhhc0NvbnRlbnQoKSBjb25zdDsKIAotICAgIGJvb2wgaGFzQ29u
dGVudCgpIGNvbnN0IHsgcmV0dXJuICFtX2lubGluZVJ1bnMuaXNFbXB0eSgpOyB9Ci0gICAgYm9v
bCBpc0Nsb3NlZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xvc2VkOyB9Ci0gICAgYm9vbCBpc0ZpcnN0
TGluZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNGaXJzdExpbmU7IH0KLSAgICBWZWN0b3I8SW5saW5l
UnVuPiYgcnVucygpIHsgcmV0dXJuIG1faW5saW5lUnVuczsgfQorICAgIExheW91dFVuaXQgdHJh
aWxpbmdUcmltbWFibGVXaWR0aCgpIGNvbnN0OwogCi0gICAgTGF5b3V0VW5pdCBjb250ZW50TG9n
aWNhbFJpZ2h0KCkgY29uc3Q7Ci0gICAgTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbExlZnQoKSBj
b25zdCB7IHJldHVybiBtX2xvZ2ljYWxSZWN0LmxlZnQoKTsgfQotICAgIExheW91dFVuaXQgYXZh
aWxhYmxlV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2F2YWlsYWJsZVdpZHRoOyB9Ci0gICAgT3B0
aW9uYWw8SW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6VHlwZT4gbGFzdFJ1blR5cGUoKSBjb25zdCB7
IHJldHVybiBtX2xhc3RSdW5UeXBlOyB9CisgICAgdm9pZCBtb3ZlTG9naWNhbExlZnQoTGF5b3V0
VW5pdCk7CisgICAgdm9pZCBtb3ZlTG9naWNhbFJpZ2h0KExheW91dFVuaXQpOwogCi0gICAgTGF5
b3V0VW5pdCBsb2dpY2FsVG9wKCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsUmVjdC50b3AoKTsg
fQotICAgIExheW91dFVuaXQgbG9naWNhbEJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNh
bFJlY3QuYm90dG9tKCk7IH0KLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQoKSBjb25zdCB7
IHJldHVybiBsb2dpY2FsQm90dG9tKCkgLSBsb2dpY2FsVG9wKCk7IH0KKyAgICBMYXlvdXRVbml0
IGF2YWlsYWJsZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gbG9naWNhbFdpZHRoKCkgLSBjb250ZW50
TG9naWNhbFdpZHRoKCk7IH0KKyAgICAKKyAgICBMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsUmln
aHQoKSBjb25zdCB7IHJldHVybiBsb2dpY2FsTGVmdCgpICsgY29udGVudExvZ2ljYWxXaWR0aCgp
OyB9CisgICAgTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbFdpZHRoKCkgY29uc3QgeyByZXR1cm4g
bV9jb250ZW50TG9naWNhbFdpZHRoOyB9CisKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxUb3AoKSBj
b25zdCB7IHJldHVybiBtX2xvZ2ljYWxUb3BMZWZ0LnkoKTsgfQorICAgIExheW91dFVuaXQgbG9n
aWNhbExlZnQoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxUb3BMZWZ0LngoKTsgfQorICAgIExh
eW91dFVuaXQgbG9naWNhbFJpZ2h0KCkgY29uc3QgeyByZXR1cm4gbG9naWNhbExlZnQoKSArIGxv
Z2ljYWxXaWR0aCgpOyB9CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsQm90dG9tKCkgY29uc3QgeyBy
ZXR1cm4gbG9naWNhbFRvcCgpICsgbG9naWNhbEhlaWdodCgpOyB9CisgICAgTGF5b3V0VW5pdCBs
b2dpY2FsV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2xpbmVMb2dpY2FsV2lkdGg7IH0KKyAgICBM
YXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxIZWlnaHQu
aGVpZ2h0ICsgbV9sb2dpY2FsSGVpZ2h0LmRlcHRoOyB9CiAKIHByaXZhdGU6Ci0gICAgc3RydWN0
IFRyYWlsaW5nVHJpbW1hYmxlQ29udGVudCB7Ci0gICAgICAgIExheW91dFVuaXQgd2lkdGg7Ci0g
ICAgICAgIHVuc2lnbmVkIGxlbmd0aDsKLSAgICB9OwotICAgIE9wdGlvbmFsPFRyYWlsaW5nVHJp
bW1hYmxlQ29udGVudD4gbV90cmFpbGluZ1RyaW1tYWJsZUNvbnRlbnQ7Ci0gICAgT3B0aW9uYWw8
SW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6VHlwZT4gbV9sYXN0UnVuVHlwZTsKLSAgICBib29sIG1f
bGFzdFJ1bkNhbkV4cGFuZCB7IGZhbHNlIH07CisgICAgdm9pZCBhcHBlbmROb25CcmVha2FibGVT
cGFjZShjb25zdCBJbmxpbmVJdGVtJiwgY29uc3QgRGlzcGxheTo6UmVjdCYgbG9naWNhbFJlY3Qp
OworICAgIHZvaWQgcmVtb3ZlVHJhaWxpbmdUcmltbWFibGVDb250ZW50KCk7CisKKyAgICBjb25z
dCBMYXlvdXRTdGF0ZSYgbV9sYXlvdXRTdGF0ZTsKKyAgICBMaW5lSXRlbXMgbV9saW5lSXRlbXM7
CisgICAgTGlzdEhhc2hTZXQ8TGluZUl0ZW0qPiBtX3RyaW1tYWJsZUNvbnRlbnQ7CiAKLSAgICBE
aXNwbGF5OjpCb3g6OlJlY3QgbV9sb2dpY2FsUmVjdDsKLSAgICBMYXlvdXRVbml0IG1fYXZhaWxh
YmxlV2lkdGg7CisgICAgTGF5b3V0UG9pbnQgbV9sb2dpY2FsVG9wTGVmdDsKKyAgICBMYXlvdXRV
bml0IG1fY29udGVudExvZ2ljYWxXaWR0aDsKIAotICAgIFZlY3RvcjxJbmxpbmVSdW4+IG1faW5s
aW5lUnVuczsKLSAgICBib29sIG1faXNGaXJzdExpbmUgeyB0cnVlIH07Ci0gICAgYm9vbCBtX2Ns
b3NlZCB7IHRydWUgfTsKKyAgICBVc2VkSGVpZ2h0QW5kRGVwdGggbV9sb2dpY2FsSGVpZ2h0Owor
ICAgIExheW91dFVuaXQgbV9saW5lTG9naWNhbFdpZHRoOwogfTsKIAotdm9pZCBMaW5lOjppbml0
KGNvbnN0IExheW91dFBvaW50JiB0b3BMZWZ0LCBMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoLCBM
YXlvdXRVbml0IG1pbmltYWxIZWlnaHQpCitMaW5lOjpMaW5lSXRlbTo6TGluZUl0ZW0oRGlzcGxh
eTo6UnVuIGlubGluZVJ1biwgY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSwgYm9vbCBpc0Nv
bGxhcHNlZCwgYm9vbCBjYW5CZUV4dGVuZGVkKQorICAgIDogaW5saW5lUnVuKGlubGluZVJ1bikK
KyAgICAsIGlubGluZUl0ZW0oaW5saW5lSXRlbSkKKyAgICAsIGlzQ29sbGFwc2VkKGlzQ29sbGFw
c2VkKQorICAgICwgY2FuQmVFeHRlbmRlZChjYW5CZUV4dGVuZGVkKQogewotICAgIG1fbG9naWNh
bFJlY3Quc2V0VG9wTGVmdCh0b3BMZWZ0KTsKLSAgICBtX2xvZ2ljYWxSZWN0LnNldFdpZHRoKGF2
YWlsYWJsZVdpZHRoKTsKLSAgICBtX2xvZ2ljYWxSZWN0LnNldEhlaWdodChtaW5pbWFsSGVpZ2h0
KTsKLSAgICBtX2F2YWlsYWJsZVdpZHRoID0gYXZhaWxhYmxlV2lkdGg7Ci0KLSAgICBtX2lubGlu
ZVJ1bnMuY2xlYXIoKTsKLSAgICBtX2xhc3RSdW5UeXBlID0geyB9OwotICAgIG1fbGFzdFJ1bkNh
bkV4cGFuZCA9IGZhbHNlOwotICAgIG1fdHJhaWxpbmdUcmltbWFibGVDb250ZW50ID0geyB9Owot
ICAgIG1fY2xvc2VkID0gZmFsc2U7CiB9CiAKLXZvaWQgTGluZTo6YWRqdXN0TG9naWNhbExlZnQo
TGF5b3V0VW5pdCBkZWx0YSkKK0xpbmU6OkxpbmUoY29uc3QgTGF5b3V0U3RhdGUmIGxheW91dFN0
YXRlKQorICAgIDogbV9sYXlvdXRTdGF0ZShsYXlvdXRTdGF0ZSkKIHsKLSAgICBBU1NFUlQoZGVs
dGEgPiAwKTsKLQotICAgIG1fYXZhaWxhYmxlV2lkdGggLT0gZGVsdGE7Ci0gICAgbV9sb2dpY2Fs
UmVjdC5zaGlmdExlZnRUbyhtX2xvZ2ljYWxSZWN0LmxlZnQoKSArIGRlbHRhKTsKK30KIAotICAg
IGZvciAoYXV0byYgaW5saW5lUnVuIDogbV9pbmxpbmVSdW5zKQotICAgICAgICBpbmxpbmVSdW4u
bW92ZUhvcml6b250YWxseShkZWx0YSk7Cit2b2lkIExpbmU6OnJlc2V0KGNvbnN0IExheW91dFBv
aW50JiB0b3BMZWZ0LCBMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoLCBMYXlvdXRVbml0IG1pbmlt
dW1IZWlnaHQsIExheW91dFVuaXQgYmFzZWxpbmVPZmZzZXQpCit7CisgICAgbV9sb2dpY2FsVG9w
TGVmdCA9IHRvcExlZnQ7CisgICAgbV9saW5lTG9naWNhbFdpZHRoID0gYXZhaWxhYmxlV2lkdGg7
CisgICAgbV9sb2dpY2FsSGVpZ2h0ID0geyBiYXNlbGluZU9mZnNldCwgbWluaW11bUhlaWdodCAt
IGJhc2VsaW5lT2Zmc2V0IH07CisgICAgCisgICAgbV9jb250ZW50TG9naWNhbFdpZHRoID0geyB9
OworCisgICAgbV9saW5lSXRlbXMuY2xlYXIoKTsKKyAgICBtX3RyaW1tYWJsZUNvbnRlbnQuY2xl
YXIoKTsKIH0KIAotdm9pZCBMaW5lOjphZGp1c3RMb2dpY2FsUmlnaHQoTGF5b3V0VW5pdCBkZWx0
YSkKK2NvbnN0IExpbmU6OkxpbmVJdGVtcyYgTGluZTo6Y2xvc2UoKQogewotICAgIEFTU0VSVChk
ZWx0YSA+IDApOworICAgIHJlbW92ZVRyYWlsaW5nVHJpbW1hYmxlQ29udGVudCgpOworICAgIC8v
IENvbnZlcnQgaW5saW5lIHJ1biBnZW9tZXRyeSBmcm9tIHJlbGF0aXZlIHRvIHRoZSBiYXNlbGlu
ZSB0byByZWxhdGl2ZSB0byBsb2dpY2FsIHRvcC4KKyAgICBmb3IgKGF1dG8mIGxpbmVJdGVtIDog
bV9saW5lSXRlbXMpIHsKKyAgICAgICAgYXV0byBhZGp1c3RlZExvZ2ljYWxUb3AgPSBsaW5lSXRl
bS0+aW5saW5lUnVuLmxvZ2ljYWxUb3AoKSArIG1fbG9naWNhbEhlaWdodC5oZWlnaHQgKyBtX2xv
Z2ljYWxUb3BMZWZ0LnkoKTsKKyAgICAgICAgbGluZUl0ZW0tPmlubGluZVJ1bi5zZXRMb2dpY2Fs
VG9wKGFkanVzdGVkTG9naWNhbFRvcCk7CisgICAgfQorICAgIHJldHVybiBtX2xpbmVJdGVtczsK
K30KIAotICAgIG1fYXZhaWxhYmxlV2lkdGggLT0gZGVsdGE7Ci0gICAgbV9sb2dpY2FsUmVjdC5z
aGlmdFJpZ2h0VG8obV9sb2dpY2FsUmVjdC5yaWdodCgpIC0gZGVsdGEpOwordm9pZCBMaW5lOjpy
ZW1vdmVUcmFpbGluZ1RyaW1tYWJsZUNvbnRlbnQoKQoreworICAgIC8vIENvbGxhcHNlIHRyaW1t
YWJsZSB0cmFpbGluZyBjb250ZW50CisgICAgTGF5b3V0VW5pdCB0cmltbWFibGVXaWR0aDsKKyAg
ICBmb3IgKGF1dG8qIHRyaW1tYWJsZVJ1biA6IG1fdHJpbW1hYmxlQ29udGVudCkgeworICAgICAg
ICB0cmltbWFibGVSdW4tPmlzQ29sbGFwc2VkID0gdHJ1ZTsKKyAgICAgICAgdHJpbW1hYmxlV2lk
dGggKz0gdHJpbW1hYmxlUnVuLT5pbmxpbmVSdW4ubG9naWNhbFdpZHRoKCk7CisgICAgfQorICAg
IG1fY29udGVudExvZ2ljYWxXaWR0aCAtPSB0cmltbWFibGVXaWR0aDsKKyAgICAvLyBGSVhNRTog
Y2hlY2sgaWYgd2UgbmVlZCB0byB1bmRvIGxpbmUgaGVpZ2h0IGFuZCBiYXNlbGluZS4KIH0KIAot
c3RhdGljIGJvb2wgaXNUcmltbWFibGVDb250ZW50KGNvbnN0IElubGluZVJ1blByb3ZpZGVyOjpS
dW4mIGlubGluZVJ1bikKK3ZvaWQgTGluZTo6bW92ZUxvZ2ljYWxMZWZ0KExheW91dFVuaXQgZGVs
dGEpCiB7Ci0gICAgcmV0dXJuIGlubGluZVJ1bi5pc1doaXRlc3BhY2UoKSAmJiBpbmxpbmVSdW4u
c3R5bGUoKS5jb2xsYXBzZVdoaXRlU3BhY2UoKTsKKyAgICBpZiAoIWRlbHRhKQorICAgICAgICBy
ZXR1cm47CisgICAgQVNTRVJUKGRlbHRhID4gMCk7CisgICAgLy8gU2hyaW5rIHRoZSBsaW5lIGFu
ZCBtb3ZlIHRoZSBpdGVtcy4KKyAgICBtX2xvZ2ljYWxUb3BMZWZ0Lm1vdmUoZGVsdGEsIDApOwor
ICAgIG1fbGluZUxvZ2ljYWxXaWR0aCAtPSBkZWx0YTsKKyAgICBmb3IgKGF1dG8mIGxpbmVJdGVt
IDogbV9saW5lSXRlbXMpCisgICAgICAgIGxpbmVJdGVtLT5pbmxpbmVSdW4ubW92ZUhvcml6b250
YWxseShkZWx0YSk7CiB9CiAKLUxheW91dFVuaXQgTGluZTo6Y29udGVudExvZ2ljYWxSaWdodCgp
IGNvbnN0Cit2b2lkIExpbmU6Om1vdmVMb2dpY2FsUmlnaHQoTGF5b3V0VW5pdCBkZWx0YSkKIHsK
LSAgICBpZiAobV9pbmxpbmVSdW5zLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG1fbG9naWNh
bFJlY3QubGVmdCgpOworICAgIEFTU0VSVChkZWx0YSA+IDApOworICAgIG1fbGluZUxvZ2ljYWxX
aWR0aCAtPSBkZWx0YTsKK30KIAotICAgIHJldHVybiBtX2lubGluZVJ1bnMubGFzdCgpLmxvZ2lj
YWxSaWdodCgpOworc3RhdGljIGJvb2wgaXNUcmltbWFibGVDb250ZW50KGNvbnN0IElubGluZUl0
ZW0mIGlubGluZUl0ZW0pCit7CisgICAgaWYgKCFpczxJbmxpbmVUZXh0SXRlbT4oaW5saW5lSXRl
bSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvJiBpbmxpbmVUZXh0SXRlbSA9IGRv
d25jYXN0PElubGluZVRleHRJdGVtPihpbmxpbmVJdGVtKTsKKyAgICByZXR1cm4gaW5saW5lVGV4
dEl0ZW0uaXNXaGl0ZXNwYWNlKCkgJiYgaW5saW5lVGV4dEl0ZW0uc3R5bGUoKS5jb2xsYXBzZVdo
aXRlU3BhY2UoKTsKIH0KIAotdm9pZCBMaW5lOjphcHBlbmRDb250ZW50KGNvbnN0IElubGluZVJ1
blByb3ZpZGVyOjpSdW4mIHJ1biwgY29uc3QgTGF5b3V0U2l6ZSYgcnVuU2l6ZSkKK0xheW91dFVu
aXQgTGluZTo6dHJhaWxpbmdUcmltbWFibGVXaWR0aCgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKCFp
c0Nsb3NlZCgpKTsKLQotICAgIC8vIEFwcGVuZCB0aGlzIHRleHQgcnVuIHRvIHRoZSBlbmQgb2Yg
dGhlIGxhc3QgdGV4dCBydW4sIGlmIHRoZSBsYXN0IHJ1biBpcyBjb250aW51b3VzLgotICAgIE9w
dGlvbmFsPElubGluZVJ1bjo6VGV4dENvbnRleHQ+IHRleHRSdW47Ci0gICAgaWYgKHJ1bi5pc1Rl
eHQoKSkgewotICAgICAgICBhdXRvIHRleHRDb250ZXh0ID0gcnVuLnRleHRDb250ZXh0KCk7Ci0g
ICAgICAgIGF1dG8gcnVuTGVuZ3RoID0gdGV4dENvbnRleHQtPmlzQ29sbGFwc2VkKCkgPyAxIDog
dGV4dENvbnRleHQtPmxlbmd0aCgpOwotICAgICAgICB0ZXh0UnVuID0gSW5saW5lUnVuOjpUZXh0
Q29udGV4dCB7IHRleHRDb250ZXh0LT5zdGFydCgpLCBydW5MZW5ndGggfTsKLSAgICB9CisgICAg
TGF5b3V0VW5pdCB0cmltbWFibGVXaWR0aDsKKyAgICBmb3IgKGF1dG8qIHRyaW1tYWJsZVJ1biA6
IG1fdHJpbW1hYmxlQ29udGVudCkKKyAgICAgICAgdHJpbW1hYmxlV2lkdGggKz0gdHJpbW1hYmxl
UnVuLT5pbmxpbmVSdW4ubG9naWNhbFdpZHRoKCk7CisgICAgcmV0dXJuIHRyaW1tYWJsZVdpZHRo
OworfQogCi0gICAgYXV0byByZXF1aXJlc05ld0lubGluZVJ1biA9ICFoYXNDb250ZW50KCkgfHwg
IXJ1bi5pc1RleHQoKSB8fCAhbV9sYXN0UnVuQ2FuRXhwYW5kOwotICAgIGlmIChyZXF1aXJlc05l
d0lubGluZVJ1bikgewotICAgICAgICAvLyBGSVhNRTogVGhpcyBuZWVkcyBwcm9wZXIgYmFzZWxp
bmUgaGFuZGxpbmcKLSAgICAgICAgYXV0byBpbmxpbmVSdW4gPSBJbmxpbmVSdW4geyB7IGxvZ2lj
YWxUb3AoKSwgY29udGVudExvZ2ljYWxSaWdodCgpLCBydW5TaXplLndpZHRoKCksIHJ1blNpemUu
aGVpZ2h0KCkgfSwgcnVuLmlubGluZUl0ZW0oKSB9OwotICAgICAgICBpZiAodGV4dFJ1bikKLSAg
ICAgICAgICAgIGlubGluZVJ1bi5zZXRUZXh0Q29udGV4dCh7IHRleHRSdW4tPnN0YXJ0KCksIHRl
eHRSdW4tPmxlbmd0aCgpIH0pOwotICAgICAgICBtX2lubGluZVJ1bnMuYXBwZW5kKGlubGluZVJ1
bik7Ci0gICAgICAgIG1fbG9naWNhbFJlY3Quc2V0SGVpZ2h0KHN0ZDo6bWF4KHJ1blNpemUuaGVp
Z2h0KCksIG1fbG9naWNhbFJlY3QuaGVpZ2h0KCkpKTsKLSAgICB9IGVsc2UgewotICAgICAgICAv
LyBOb24tdGV4dCBydW5zIGFsd2F5cyByZXF1aXJlIG5ldyBpbmxpbmUgcnVuLgotICAgICAgICBB
U1NFUlQodGV4dFJ1bik7Ci0gICAgICAgIGF1dG8mIGlubGluZVJ1biA9IG1faW5saW5lUnVucy5s
YXN0KCk7Ci0gICAgICAgIEFTU0VSVChydW5TaXplLmhlaWdodCgpID09IGlubGluZVJ1bi5sb2dp
Y2FsSGVpZ2h0KCkpOwotICAgICAgICBpbmxpbmVSdW4uc2V0TG9naWNhbFdpZHRoKGlubGluZVJ1
bi5sb2dpY2FsV2lkdGgoKSArIHJ1blNpemUud2lkdGgoKSk7Ci0gICAgICAgIGlubGluZVJ1bi50
ZXh0Q29udGV4dCgpLT5zZXRMZW5ndGgoaW5saW5lUnVuLnRleHRDb250ZXh0KCktPmxlbmd0aCgp
ICsgdGV4dFJ1bi0+bGVuZ3RoKCkpOworYm9vbCBMaW5lOjpoYXNDb250ZW50KCkgY29uc3QKK3sK
KyAgICAvLyBSZXR1cm4gZmFsc2UgZm9yIGVtcHR5IGNvbnRhaW5lcnMgbGlrZSA8c3Bhbj48L3Nw
YW4+LgorICAgIGlmIChtX2xpbmVJdGVtcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBmb3IgKGF1dG8mIGxpbmVJdGVtIDogbV9saW5lSXRlbXMpIHsKKyAgICAgICAgaWYg
KGxpbmVJdGVtLT5pbmxpbmVJdGVtLmlzQ29udGFpbmVyU3RhcnQoKSB8fCBsaW5lSXRlbS0+aW5s
aW5lSXRlbS5pc0NvbnRhaW5lckVuZCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IGlmICghbGluZUl0ZW0tPmlzQ29sbGFwc2VkKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KIAotICAgIG1fYXZhaWxhYmxlV2lkdGggLT0gcnVu
U2l6ZS53aWR0aCgpOwotICAgIG1fbGFzdFJ1blR5cGUgPSBydW4udHlwZSgpOwotICAgIG1fbGFz
dFJ1bkNhbkV4cGFuZCA9IHJ1bi5pc1RleHQoKSAmJiAhcnVuLnRleHRDb250ZXh0KCktPmlzQ29s
bGFwc2VkKCk7Ci0gICAgbV90cmFpbGluZ1RyaW1tYWJsZUNvbnRlbnQgPSB7IH07Ci0gICAgaWYg
KGlzVHJpbW1hYmxlQ29udGVudChydW4pKQotICAgICAgICBtX3RyYWlsaW5nVHJpbW1hYmxlQ29u
dGVudCA9IFRyYWlsaW5nVHJpbW1hYmxlQ29udGVudCB7IHJ1blNpemUud2lkdGgoKSwgdGV4dFJ1
bi0+bGVuZ3RoKCkgfTsKK3ZvaWQgTGluZTo6YXBwZW5kTm9uQnJlYWthYmxlU3BhY2UoY29uc3Qg
SW5saW5lSXRlbSYgaW5saW5lSXRlbSwgY29uc3QgRGlzcGxheTo6UmVjdCYgbG9naWNhbFJlY3Qp
Cit7CisgICAgbV9saW5lSXRlbXMuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8TGluZUl0ZW0+KERp
c3BsYXk6OlJ1biB7IGxvZ2ljYWxSZWN0IH0sIGlubGluZUl0ZW0sIGZhbHNlLCBmYWxzZSkpOwor
ICAgIG1fY29udGVudExvZ2ljYWxXaWR0aCArPSBpbmxpbmVJdGVtLndpZHRoKCk7CiB9CiAKLXZv
aWQgTGluZTo6Y2xvc2UoKQordm9pZCBMaW5lOjphcHBlbmRJbmxpbmVDb250YWluZXJTdGFydChj
b25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtKQogewotICAgIGF1dG8gdHJpbVRyYWlsaW5nQ29u
dGVudCA9IFsmXSB7Ci0gICAgICAgIGlmICghbV90cmFpbGluZ1RyaW1tYWJsZUNvbnRlbnQpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGF1dG8mIGxhc3RJbmxpbmVSdW4gPSBtX2lubGlu
ZVJ1bnMubGFzdCgpOwotICAgICAgICBsYXN0SW5saW5lUnVuLnNldExvZ2ljYWxXaWR0aChsYXN0
SW5saW5lUnVuLmxvZ2ljYWxXaWR0aCgpIC0gbV90cmFpbGluZ1RyaW1tYWJsZUNvbnRlbnQtPndp
ZHRoKTsKLSAgICAgICAgbGFzdElubGluZVJ1bi50ZXh0Q29udGV4dCgpLT5zZXRMZW5ndGgobGFz
dElubGluZVJ1bi50ZXh0Q29udGV4dCgpLT5sZW5ndGgoKSAtIG1fdHJhaWxpbmdUcmltbWFibGVD
b250ZW50LT5sZW5ndGgpOwotCi0gICAgICAgIGlmICghbGFzdElubGluZVJ1bi50ZXh0Q29udGV4
dCgpLT5sZW5ndGgoKSkKLSAgICAgICAgICAgIG1faW5saW5lUnVucy5yZW1vdmVMYXN0KCk7Ci0g
ICAgICAgIG1fYXZhaWxhYmxlV2lkdGggKz0gbV90cmFpbGluZ1RyaW1tYWJsZUNvbnRlbnQtPndp
ZHRoOwotICAgICAgICBtX3RyYWlsaW5nVHJpbW1hYmxlQ29udGVudCA9IHsgfTsKKyAgICBhdXRv
JiBsYXlvdXRCb3ggPSBpbmxpbmVJdGVtLmxheW91dEJveCgpOworICAgIGF1dG8mIHN0eWxlID0g
bGF5b3V0Qm94LnN0eWxlKCk7CisgICAgYXV0byYgZm9udE1ldHJpY3MgPSBzdHlsZS5mb250TWV0
cmljcygpOworICAgIAorICAgIGF1dG8gYWxpZ25BbmRBZGp1c3RMaW5lSGVpZ2h0ID0gWyZdIHsK
KyAgICAgICAgTGF5b3V0VW5pdCBpbmxpbmVCb3hIZWlnaHQgPSBzdHlsZS5jb21wdXRlZExpbmVI
ZWlnaHQoKTsKKworICAgICAgICBhdXRvIGhhbGZMZWFkaW5nID0gaGFsZkxlYWRpbmdNZXRyaWNz
KGZvbnRNZXRyaWNzLCBpbmxpbmVCb3hIZWlnaHQpOworICAgICAgICBpZiAoaGFsZkxlYWRpbmcu
ZGVwdGggPiAwKQorICAgICAgICAgICAgbV9sb2dpY2FsSGVpZ2h0LmRlcHRoID0gc3RkOjptYXgo
bV9sb2dpY2FsSGVpZ2h0LmRlcHRoLCBoYWxmTGVhZGluZy5kZXB0aCk7CisgICAgICAgIGlmICho
YWxmTGVhZGluZy5oZWlnaHQgPiAwKQorICAgICAgICAgICAgbV9sb2dpY2FsSGVpZ2h0LmhlaWdo
dCA9IHN0ZDo6bWF4KG1fbG9naWNhbEhlaWdodC5oZWlnaHQsIGhhbGZMZWFkaW5nLmhlaWdodCk7
CiAgICAgfTsKIAotICAgIGlmICghaGFzQ29udGVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICB0cmltVHJhaWxpbmdDb250ZW50KCk7Ci0gICAgbV9pc0ZpcnN0TGluZSA9IGZhbHNlOwotICAg
IG1fY2xvc2VkID0gdHJ1ZTsKKyAgICBhbGlnbkFuZEFkanVzdExpbmVIZWlnaHQoKTsKKyAgICBh
dXRvJiBkaXNwbGF5Qm94ID0gbV9sYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxh
eW91dEJveCk7CisgICAgYXV0byBjb250YWluZXJIZWlnaHQgPSBmb250TWV0cmljcy5oZWlnaHQo
KSArIGRpc3BsYXlCb3gudmVydGljYWxCb3JkZXIoKSArIGRpc3BsYXlCb3gudmVydGljYWxQYWRk
aW5nKCkudmFsdWVPcigwKTsKKyAgICBhdXRvIGxvZ2ljYWxUb3AgPSAtZm9udE1ldHJpY3MuYXNj
ZW50KCkgLSBkaXNwbGF5Qm94LmJvcmRlclRvcCgpIC0gZGlzcGxheUJveC5wYWRkaW5nVG9wKCku
dmFsdWVPcigwKTsKKyAgICBhdXRvIGxvZ2ljYWxSZWN0ID0gRGlzcGxheTo6UmVjdCB7IGxvZ2lj
YWxUb3AsIGNvbnRlbnRMb2dpY2FsUmlnaHQoKSwgaW5saW5lSXRlbS53aWR0aCgpLCBjb250YWlu
ZXJIZWlnaHQgfTsKKyAgICBhcHBlbmROb25CcmVha2FibGVTcGFjZShpbmxpbmVJdGVtLCBsb2dp
Y2FsUmVjdCk7CiB9CiAKLUlubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpMaW5l
TGF5b3V0KGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBpbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dCkKLSAgICA6IG1fZm9ybWF0dGluZ0NvbnRleHQoaW5saW5lRm9ybWF0dGluZ0NvbnRleHQp
Ci0gICAgLCBtX2Zvcm1hdHRpbmdTdGF0ZShtX2Zvcm1hdHRpbmdDb250ZXh0LmZvcm1hdHRpbmdT
dGF0ZSgpKQotICAgICwgbV9mbG9hdGluZ1N0YXRlKG1fZm9ybWF0dGluZ1N0YXRlLmZsb2F0aW5n
U3RhdGUoKSkKLSAgICAsIG1fZm9ybWF0dGluZ1Jvb3QoZG93bmNhc3Q8Q29udGFpbmVyPihtX2Zv
cm1hdHRpbmdDb250ZXh0LnJvb3QoKSkpCit2b2lkIExpbmU6OmFwcGVuZElubGluZUNvbnRhaW5l
ckVuZChjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtKQogeworICAgIC8vIFRoaXMgaXMgcmVh
bGx5IGp1c3QgYSBwbGFjZWhvbGRlciB0byBtYXJrIHRoZSBlbmQgb2YgdGhlIGlubGluZSBsZXZl
bCBjb250YWluZXIuCisgICAgYXV0byBsb2dpY2FsUmVjdCA9IERpc3BsYXk6OlJlY3QgeyAwLCBj
b250ZW50TG9naWNhbFJpZ2h0KCksIGlubGluZUl0ZW0ud2lkdGgoKSwgMCB9OworICAgIGFwcGVu
ZE5vbkJyZWFrYWJsZVNwYWNlKGlubGluZUl0ZW0sIGxvZ2ljYWxSZWN0KTsKIH0KIAotc3RhdGlj
IGJvb2wgaXNUcmltbWFibGVDb250ZW50KGNvbnN0IElubGluZUxpbmVCcmVha2VyOjpSdW4mIHJ1
bikKK3ZvaWQgTGluZTo6YXBwZW5kVGV4dENvbnRlbnQoY29uc3QgSW5saW5lVGV4dEl0ZW0mIGlu
bGluZUl0ZW0sIExheW91dFNpemUgcnVuU2l6ZSkKIHsKLSAgICByZXR1cm4gcnVuLmNvbnRlbnQu
aXNXaGl0ZXNwYWNlKCkgJiYgcnVuLmNvbnRlbnQuc3R5bGUoKS5jb2xsYXBzZVdoaXRlU3BhY2Uo
KTsKLX0KKyAgICBhdXRvIGlzVHJpbW1hYmxlID0gaXNUcmltbWFibGVDb250ZW50KGlubGluZUl0
ZW0pOworICAgIGlmICghaXNUcmltbWFibGUpCisgICAgICAgIG1fdHJpbW1hYmxlQ29udGVudC5j
bGVhcigpOworCisgICAgYXV0byBzaG91bGRDb2xsYXBzZUNvbXBsZXRlbHkgPSBbJl0geworICAg
ICAgICBpZiAoIWlzVHJpbW1hYmxlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAvLyBMZWFkaW5nIHdoaXRlc3BhY2UuCisgICAgICAgIGlmIChtX2xpbmVJdGVtcy5pc0VtcHR5
KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGxh
c3QgaXRlbSBpcyB0cmltbWFibGUgYXMgd2VsbC4KKyAgICAgICAgZm9yIChpbnQgaW5kZXggPSBt
X2xpbmVJdGVtcy5zaXplKCkgLSAxOyBpbmRleCA+PSAwOyAtLWluZGV4KSB7CisgICAgICAgICAg
ICBhdXRvJiBpbmxpbmVJdGVtID0gbV9saW5lSXRlbXNbaW5kZXhdLT5pbmxpbmVJdGVtOworICAg
ICAgICAgICAgaWYgKGlubGluZUl0ZW0uaXNCb3goKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICBpZiAoaW5saW5lSXRlbS5pc1RleHQoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gaW5saW5lSXRlbS5pc1RleHQoKSAmJiBpc1RyaW1tYWJsZUNvbnRlbnQoZG93
bmNhc3Q8SW5saW5lVGV4dEl0ZW0+KGlubGluZUl0ZW0pKTsKKyAgICAgICAgICAgIEFTU0VSVChp
bmxpbmVJdGVtLmlzQ29udGFpbmVyU3RhcnQoKSB8fCBpbmxpbmVJdGVtLmlzQ29udGFpbmVyRW5k
KCkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH07CiAKLXZvaWQgSW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OmxheW91dChjb25zdCBJbmxpbmVSdW5Q
cm92aWRlciYgaW5saW5lUnVuUHJvdmlkZXIpIGNvbnN0Ci17Ci0gICAgYXV0byYgbGF5b3V0U3Rh
dGUgPSBtX2Zvcm1hdHRpbmdDb250ZXh0LmxheW91dFN0YXRlKCk7Ci0gICAgYXV0byBmbG9hdGlu
Z0NvbnRleHQgPSBGbG9hdGluZ0NvbnRleHQgeyBtX2Zsb2F0aW5nU3RhdGUgfTsKKyAgICAvLyBD
b2xsYXBzZWQgbGluZSBpdGVtcyBkb24ndCBjb250cmlidXRlIHRvIHRoZSBsaW5lIHdpZHRoLgor
ICAgIGF1dG8gaXNDb21wbGV0ZWx5Q29sbGFwc2VkID0gc2hvdWxkQ29sbGFwc2VDb21wbGV0ZWx5
KCk7CisgICAgYXV0byBjYW5CZUV4dGVuZGVkID0gIWlzQ29tcGxldGVseUNvbGxhcHNlZCAmJiAh
aW5saW5lSXRlbS5pc0NvbGxhcHNlZCgpOworICAgIGF1dG8gbG9naWNhbFJlY3QgPSBEaXNwbGF5
OjpSZWN0IHsgLWlubGluZUl0ZW0uc3R5bGUoKS5mb250TWV0cmljcygpLmFzY2VudCgpLCBjb250
ZW50TG9naWNhbFJpZ2h0KCksIHJ1blNpemUud2lkdGgoKSwgcnVuU2l6ZS5oZWlnaHQoKSB9Owor
ICAgIGF1dG8gdGV4dENvbnRleHQgPSBEaXNwbGF5OjpSdW46OlRleHRDb250ZXh0IHsgaW5saW5l
SXRlbS5zdGFydCgpLCBpbmxpbmVJdGVtLmlzQ29sbGFwc2VkKCkgPyAxIDogaW5saW5lSXRlbS5s
ZW5ndGgoKSB9OworICAgIGF1dG8gZGlzcGxheVJ1biA9IERpc3BsYXk6OlJ1bihsb2dpY2FsUmVj
dCwgdGV4dENvbnRleHQpOwogCi0gICAgTGluZSBsaW5lOwotICAgIGluaXRpYWxpemVOZXdMaW5l
KGxpbmUpOworICAgIGF1dG8gbGluZUl0ZW0gPSBzdGQ6Om1ha2VfdW5pcXVlPExpbmVJdGVtPihk
aXNwbGF5UnVuLCBpbmxpbmVJdGVtLCBpc0NvbXBsZXRlbHlDb2xsYXBzZWQsIGNhbkJlRXh0ZW5k
ZWQpOworICAgIGlmIChpc1RyaW1tYWJsZSkgCisgICAgICAgIG1fdHJpbW1hYmxlQ29udGVudC5h
ZGQobGluZUl0ZW0uZ2V0KCkpOwogCi0gICAgSW5saW5lTGluZUJyZWFrZXIgbGluZUJyZWFrZXIo
bGF5b3V0U3RhdGUsIG1fZm9ybWF0dGluZ1N0YXRlLmlubGluZUNvbnRlbnQoKSwgaW5saW5lUnVu
UHJvdmlkZXIucnVucygpKTsKLSAgICB3aGlsZSAoYXV0byBydW4gPSBsaW5lQnJlYWtlci5uZXh0
UnVuKGxpbmUuY29udGVudExvZ2ljYWxSaWdodCgpLCBsaW5lLmF2YWlsYWJsZVdpZHRoKCksICFs
aW5lLmhhc0NvbnRlbnQoKSkpIHsKLSAgICAgICAgYXV0byBpc0ZpcnN0UnVuID0gcnVuLT5wb3Np
dGlvbiA9PSBJbmxpbmVMaW5lQnJlYWtlcjo6UnVuOjpQb3NpdGlvbjo6TGluZUJlZ2luOwotICAg
ICAgICBhdXRvIGlzTGFzdFJ1biA9IHJ1bi0+cG9zaXRpb24gPT0gSW5saW5lTGluZUJyZWFrZXI6
OlJ1bjo6UG9zaXRpb246OkxpbmVFbmQ7Ci0gICAgICAgIGF1dG8gZ2VuZXJhdGVzSW5saW5lUnVu
ID0gdHJ1ZTsKKyAgICBtX2xpbmVJdGVtcy5hcHBlbmQoV1RGTW92ZShsaW5lSXRlbSkpOworICAg
IG1fY29udGVudExvZ2ljYWxXaWR0aCArPSBpc0NvbXBsZXRlbHlDb2xsYXBzZWQgPyBMYXlvdXRV
bml0KCkgOiBydW5TaXplLndpZHRoKCk7Cit9CiAKLSAgICAgICAgLy8gUG9zaXRpb24gZmxvYXQg
YW5kIGFkanVzdCB0aGUgcnVucyBvbiBsaW5lLgotICAgICAgICBpZiAocnVuLT5jb250ZW50Lmlz
RmxvYXQoKSkgewotICAgICAgICAgICAgYXV0byYgZmxvYXRCb3ggPSBydW4tPmNvbnRlbnQuaW5s
aW5lSXRlbSgpLmxheW91dEJveCgpOwotICAgICAgICAgICAgY29tcHV0ZUZsb2F0UG9zaXRpb24o
ZmxvYXRpbmdDb250ZXh0LCBsaW5lLCBmbG9hdEJveCk7Ci0gICAgICAgICAgICBtX2Zsb2F0aW5n
U3RhdGUuYXBwZW5kKGZsb2F0Qm94KTsKK3ZvaWQgTGluZTo6YXBwZW5kTm9uVGV4dENvbnRlbnQo
Y29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSwgTGF5b3V0U2l6ZSBydW5TaXplKQoreworICAg
IGF1dG8gYWxpZ25BbmRBZGp1c3RMaW5lSGVpZ2h0ID0gWyZdIHsKKyAgICAgICAgYXV0byBpbmxp
bmVCb3hIZWlnaHQgPSBydW5TaXplLmhlaWdodCgpOworICAgICAgICAvLyAwIGRlc2NlbnQgLT4g
YmFzZWxpbmUgYWxpZ21lbnQgZm9yIG5vdy4KKyAgICAgICAgbV9sb2dpY2FsSGVpZ2h0LmRlcHRo
ID0gc3RkOjptYXg8TGF5b3V0VW5pdD4oMCwgbV9sb2dpY2FsSGVpZ2h0LmRlcHRoKTsKKyAgICAg
ICAgbV9sb2dpY2FsSGVpZ2h0LmhlaWdodCA9IHN0ZDo6bWF4KGlubGluZUJveEhlaWdodCwgbV9s
b2dpY2FsSGVpZ2h0LmhlaWdodCk7CisgICAgfTsKIAotICAgICAgICAgICAgYXV0byBmbG9hdEJv
eFdpZHRoID0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveChmbG9hdEJveCkubWFy
Z2luQm94KCkud2lkdGgoKTsKLSAgICAgICAgICAgIC8vIFNocmluayBhdmFpbGJsZSBzcGFjZSBm
b3IgY3VycmVudCBsaW5lIGFuZCBtb3ZlIGV4aXN0aW5nIGlubGluZSBydW5zLgotICAgICAgICAg
ICAgZmxvYXRCb3guaXNMZWZ0RmxvYXRpbmdQb3NpdGlvbmVkKCkgPyBsaW5lLmFkanVzdExvZ2lj
YWxMZWZ0KGZsb2F0Qm94V2lkdGgpIDogbGluZS5hZGp1c3RMb2dpY2FsUmlnaHQoZmxvYXRCb3hX
aWR0aCk7CisgICAgYWxpZ25BbmRBZGp1c3RMaW5lSGVpZ2h0KCk7CisgICAgYXV0byYgZGlzcGxh
eUJveCA9IG1fbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveChpbmxpbmVJdGVtLmxh
eW91dEJveCgpKTsKKyAgICBhdXRvIGxvZ2ljYWxUb3AgPSAtcnVuU2l6ZS5oZWlnaHQoKTsKKyAg
ICBhdXRvIGhvcml6b250YWxNYXJnaW4gPSBkaXNwbGF5Qm94Lmhvcml6b250YWxNYXJnaW4oKTsK
KyAgICBhdXRvIGxvZ2ljYWxSZWN0ID0gRGlzcGxheTo6UmVjdCB7IGxvZ2ljYWxUb3AsIGNvbnRl
bnRMb2dpY2FsUmlnaHQoKSArIGhvcml6b250YWxNYXJnaW4uc3RhcnQsIHJ1blNpemUud2lkdGgo
KSwgcnVuU2l6ZS5oZWlnaHQoKSB9OwogCi0gICAgICAgICAgICBnZW5lcmF0ZXNJbmxpbmVSdW4g
PSBmYWxzZTsKLSAgICAgICAgfQorICAgIG1fbGluZUl0ZW1zLmFwcGVuZChzdGQ6Om1ha2VfdW5p
cXVlPExpbmVJdGVtPihEaXNwbGF5OjpSdW4geyBsb2dpY2FsUmVjdCB9LCBpbmxpbmVJdGVtLCBm
YWxzZSwgZmFsc2UpKTsKKyAgICBtX2NvbnRlbnRMb2dpY2FsV2lkdGggKz0gKHJ1blNpemUud2lk
dGgoKSArIGhvcml6b250YWxNYXJnaW4uc3RhcnQgKyBob3Jpem9udGFsTWFyZ2luLmVuZCk7Cisg
ICAgbV90cmltbWFibGVDb250ZW50LmNsZWFyKCk7Cit9CiAKLSAgICAgICAgLy8gMS4gSW5pdGlh
bGl6ZSBuZXcgbGluZSBpZiBuZWVkZWQuCi0gICAgICAgIC8vIDIuIEFwcGVuZCBpbmxpbmUgcnVu
IHVubGVzcyBpdCBpcyBza2lwcGVkLgotICAgICAgICAvLyAzLiBDbG9zZSBjdXJyZW50IGxpbmUg
aWYgbmVlZGVkLgotICAgICAgICBpZiAoaXNGaXJzdFJ1bikgewotICAgICAgICAgICAgLy8gV2hl
biB0aGUgZmlyc3QgcnVuIGRvZXMgbm90IGdlbmVyYXRlIGFuIGFjdHVhbCBpbmxpbmUgcnVuLCB0
aGUgbmV4dCBydW4gY29tZXMgaW4gZmlyc3QtcnVuIGFzIHdlbGwuCi0gICAgICAgICAgICAvLyBO
byBuZWVkIHRvIHNwZW5kIHRpbWUgb24gY2xvc2luZy9pbml0aWFsaXppbmcuCi0gICAgICAgICAg
ICAvLyBTa2lwIGxlYWRpbmcgd2hpdGVzcGFjZS4KLSAgICAgICAgICAgIGlmICghZ2VuZXJhdGVz
SW5saW5lUnVuIHx8IGlzVHJpbW1hYmxlQ29udGVudCgqcnVuKSkKLSAgICAgICAgICAgICAgICBj
b250aW51ZTsKK3ZvaWQgTGluZTo6YXBwZW5kSGFyZExpbmVCcmVhayhjb25zdCBJbmxpbmVJdGVt
JiBpbmxpbmVJdGVtKQoreworICAgIGF1dG8gYXNjZW50ID0gaW5saW5lSXRlbS5sYXlvdXRCb3go
KS5zdHlsZSgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCk7IAorICAgIGF1dG8gbG9naWNhbFJlY3Qg
PSBEaXNwbGF5OjpSZWN0IHsgLWFzY2VudCwgY29udGVudExvZ2ljYWxSaWdodCgpLCB7IH0sIGxv
Z2ljYWxIZWlnaHQoKSB9OworICAgIG1fbGluZUl0ZW1zLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVl
PExpbmVJdGVtPihEaXNwbGF5OjpSdW4geyBsb2dpY2FsUmVjdCB9LCBpbmxpbmVJdGVtLCBmYWxz
ZSwgZmFsc2UpKTsKK30KIAotICAgICAgICAgICAgaWYgKGxpbmUuaGFzQ29udGVudCgpKSB7Ci0g
ICAgICAgICAgICAgICAgLy8gUHJldmlvdXMgcnVuIGVuZGVkIHVwIGJlaW5nIGF0IHRoZSBsaW5l
IGVuZC4gQWRqdXN0IHRoZSBsaW5lIGFjY29yZGluZ2x5LgotICAgICAgICAgICAgICAgIGlmICgh
bGluZS5pc0Nsb3NlZCgpKQotICAgICAgICAgICAgICAgICAgICBjbG9zZUxpbmUobGluZSwgSXNM
YXN0TGluZTo6Tm8pOwotICAgICAgICAgICAgICAgIGluaXRpYWxpemVOZXdMaW5lKGxpbmUpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9CitzdHJ1Y3QgVW5jb21taXR0ZWRDb250ZW50IHsKKyAg
ICB2b2lkIGFkZChJbmxpbmVJdGVtJik7CisgICAgdm9pZCByZXNldCgpOwogCi0gICAgICAgIGlm
IChnZW5lcmF0ZXNJbmxpbmVSdW4pIHsKLSAgICAgICAgICAgIGF1dG8gd2lkdGggPSBydW4tPndp
ZHRoOwotICAgICAgICAgICAgYXV0byBoZWlnaHQgPSBydW4tPmNvbnRlbnQuaXNUZXh0KCkgPyBM
YXlvdXRVbml0KG1fZm9ybWF0dGluZ1Jvb3Quc3R5bGUoKS5jb21wdXRlZExpbmVIZWlnaHQoKSkg
OiBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KHJ1bi0+Y29udGVudC5pbmxpbmVJ
dGVtKCkubGF5b3V0Qm94KCkpLmhlaWdodCgpOyAKLSAgICAgICAgICAgIGFwcGVuZENvbnRlbnRU
b0xpbmUobGluZSwgcnVuLT5jb250ZW50LCB7IHdpZHRoLCBoZWlnaHQgfSk7Ci0gICAgICAgIH0K
KyAgICBWZWN0b3I8SW5saW5lSXRlbSo+IGlubGluZUl0ZW1zKCkgeyByZXR1cm4gbV9pbmxpbmVJ
dGVtczsgfQorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1faW5saW5lSXRlbXMu
aXNFbXB0eSgpOyB9CisgICAgTGF5b3V0VW5pdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lk
dGg7IH0KIAotICAgICAgICBpZiAoaXNMYXN0UnVuKQotICAgICAgICAgICAgY2xvc2VMaW5lKGxp
bmUsIElzTGFzdExpbmU6Ok5vKTsKLSAgICB9Citwcml2YXRlOgorICAgIFZlY3RvcjxJbmxpbmVJ
dGVtKj4gbV9pbmxpbmVJdGVtczsKKyAgICBMYXlvdXRVbml0IG1fd2lkdGg7Cit9OwogCi0gICAg
Y2xvc2VMaW5lKGxpbmUsIElzTGFzdExpbmU6Olllcyk7Cit2b2lkIFVuY29tbWl0dGVkQ29udGVu
dDo6YWRkKElubGluZUl0ZW0mIGlubGluZUl0ZW0pCit7CisgICAgbV9pbmxpbmVJdGVtcy5hcHBl
bmQoJmlubGluZUl0ZW0pOworICAgIG1fd2lkdGggKz0gaW5saW5lSXRlbS53aWR0aCgpOwogfQog
Ci12b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0Ojppbml0aWFsaXplTmV3
TGluZShMaW5lJiBsaW5lKSBjb25zdAordm9pZCBVbmNvbW1pdHRlZENvbnRlbnQ6OnJlc2V0KCkK
K3sKKyAgICBtX2lubGluZUl0ZW1zLmNsZWFyKCk7CisgICAgbV93aWR0aCA9IDA7Cit9CisKK0lu
bGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpMaW5lTGF5b3V0KGNvbnN0IElubGlu
ZUZvcm1hdHRpbmdDb250ZXh0JiBpbmxpbmVGb3JtYXR0aW5nQ29udGV4dCkKKyAgICA6IG1fZm9y
bWF0dGluZ0NvbnRleHQoaW5saW5lRm9ybWF0dGluZ0NvbnRleHQpCisgICAgLCBtX2Zvcm1hdHRp
bmdTdGF0ZShtX2Zvcm1hdHRpbmdDb250ZXh0LmZvcm1hdHRpbmdTdGF0ZSgpKQorICAgICwgbV9m
bG9hdGluZ1N0YXRlKG1fZm9ybWF0dGluZ1N0YXRlLmZsb2F0aW5nU3RhdGUoKSkKKyAgICAsIG1f
Zm9ybWF0dGluZ1Jvb3QoZG93bmNhc3Q8Q29udGFpbmVyPihtX2Zvcm1hdHRpbmdDb250ZXh0LnJv
b3QoKSkpCiB7Ci0gICAgYXV0byYgZm9ybWF0dGluZ1Jvb3REaXNwbGF5Qm94ID0gbV9mb3JtYXR0
aW5nQ29udGV4dC5sYXlvdXRTdGF0ZSgpLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobV9mb3JtYXR0
aW5nUm9vdCk7Cit9CiAKK3ZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6
OmluaXRpYWxpemVMaW5lKExpbmUmIGxpbmUsIExheW91dFVuaXQgbGluZUxvZ2ljYWxUb3ApIGNv
bnN0Cit7CisgICAgYXV0byYgZm9ybWF0dGluZ1Jvb3REaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUo
KS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KG1fZm9ybWF0dGluZ1Jvb3QpOwogICAgIGF1dG8gbGlu
ZUxvZ2ljYWxMZWZ0ID0gZm9ybWF0dGluZ1Jvb3REaXNwbGF5Qm94LmNvbnRlbnRCb3hMZWZ0KCk7
Ci0gICAgYXV0byBsaW5lTG9naWNhbFRvcCA9IGxpbmUuaXNGaXJzdExpbmUoKSA/IGZvcm1hdHRp
bmdSb290RGlzcGxheUJveC5jb250ZW50Qm94VG9wKCkgOiBsaW5lLmxvZ2ljYWxCb3R0b20oKTsK
ICAgICBhdXRvIGF2YWlsYWJsZVdpZHRoID0gZm9ybWF0dGluZ1Jvb3REaXNwbGF5Qm94LmNvbnRl
bnRCb3hXaWR0aCgpOwogCiAgICAgLy8gQ2hlY2sgZm9yIGludHJ1ZGluZyBmbG9hdHMgYW5kIGFk
anVzdCBsb2dpY2FsIGxlZnQvYXZhaWxhYmxlIHdpZHRoIGZvciB0aGlzIGxpbmUgYWNjb3JkaW5n
bHkuCkBAIC0yOTEsMzE0ICszNzgsMjM3IEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6
OkxpbmVMYXlvdXQ6OmluaXRpYWxpemVOZXdMaW5lKExpbmUmIGxpbmUpIGNvbnN0CiAgICAgICAg
IH0KICAgICB9CiAKLSAgICBsaW5lLmluaXQoeyBsaW5lTG9naWNhbExlZnQsIGxpbmVMb2dpY2Fs
VG9wIH0sIGF2YWlsYWJsZVdpZHRoLCBtX2Zvcm1hdHRpbmdSb290LnN0eWxlKCkuY29tcHV0ZWRM
aW5lSGVpZ2h0KCkpOworICAgIGF1dG8mIGZvcm1hdHRpbmdSb290U3R5bGUgPSBtX2Zvcm1hdHRp
bmdSb290LnN0eWxlKCk7CisgICAgYXV0byBtaW1pbXVtTGluZUhlaWdodCA9IGZvcm1hdHRpbmdS
b290U3R5bGUuY29tcHV0ZWRMaW5lSGVpZ2h0KCk7CisgICAgYXV0byBiYXNlbGluZU9mZnNldCA9
IGhhbGZMZWFkaW5nTWV0cmljcyhmb3JtYXR0aW5nUm9vdFN0eWxlLmZvbnRNZXRyaWNzKCksIG1p
bWltdW1MaW5lSGVpZ2h0KS5oZWlnaHQ7CisgICAgbGluZS5yZXNldCh7IGxpbmVMb2dpY2FsTGVm
dCwgbGluZUxvZ2ljYWxUb3AgfSwgYXZhaWxhYmxlV2lkdGgsIG1pbWltdW1MaW5lSGVpZ2h0LCBi
YXNlbGluZU9mZnNldCk7CiB9CiAKLXZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVM
YXlvdXQ6OnNwbGl0SW5saW5lUnVuSWZOZWVkZWQoY29uc3QgSW5saW5lUnVuJiBpbmxpbmVSdW4s
IElubGluZVJ1bnMmIHNwbGl0UnVucykgY29uc3QKK3ZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQ6OkxpbmVMYXlvdXQ6OmxheW91dCgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGlubGluZVJ1bi50
ZXh0Q29udGV4dCgpKTsKLSAgICBBU1NFUlQoaW5saW5lUnVuLm92ZXJsYXBzTXVsdGlwbGVJbmxp
bmVJdGVtcygpKTsKLSAgICAvLyBJbiBjZXJ0YWluIGNhc2VzLCBhIHJ1biBjYW4gb3ZlcmxhcCBt
dWx0aXBsZSBpbmxpbmUgZWxlbWVudHMgbGlrZSB0aGlzOgotICAgIC8vIDxzcGFuPm5vcm1hbCB0
ZXh0IGNvbnRlbnQ8L3NwYW4+PHNwYW4gc3R5bGU9InBvc2l0aW9uOiByZWxhdGl2ZTsgbGVmdDog
MTBweDsiPmJ1dCB0aGlzIG9uZSBuZWVkcyBhIGRlZGljYXRlZCBydW48L3NwYW4+PHNwYW4+ZW5k
IG9mIHRleHQ8L3NwYW4+Ci0gICAgLy8gVGhlIGNvbnRlbnQgYWJvdmUgZ2VuZXJhdGVzIG9uZSBs
b25nIHJ1biA8bm9ybWFsIHRleHQgY29udGVudGJ1dCB0aGlzIG9uZSBuZWVkcyBkZWRpY2F0ZWQg
cnVuZW5kIG9mIHRleHQ+Ci0gICAgLy8gSG93ZXZlciwgc2luY2UgdGhlIG1pZGRsZSBydW4gaXMg
cG9zaXRpb25lZCwgaXQgbmVlZHMgdG8gYmUgbW92ZWQgaW5kZXBlbmRlbnRseSBmcm9tIHRoZSBy
ZXN0IG9mIHRoZSBjb250ZW50LCBoZW5jZSBpdCBuZWVkcyBhIGRlZGljYXRlZCBpbmxpbmUgcnVu
LgotCi0gICAgLy8gMS4gU3RhcnQgd2l0aCB0aGUgZmlyc3QgaW5saW5lIGl0ZW0gKGVsZW1lbnQp
IGFuZCB0cmF2ZXJzIHRoZSBsaXN0IHVudGlsCi0gICAgLy8gMi4gZWl0aGVyIGZpbmQgYW4gaW5s
aW5lIGl0ZW0gdGhhdCBuZWVkcyBhIGRlZGljYXRlZCBydW4gb3Igd2UgcmVhY2ggdGhlIGVuZCBv
ZiB0aGUgcnVuCi0gICAgLy8gMy4gQ3JlYXRlIGRlZGljYXRlIGlubGluZSBydW5zLgotICAgIGF1
dG8mIGlubGluZUNvbnRlbnQgPSBtX2Zvcm1hdHRpbmdTdGF0ZS5pbmxpbmVDb250ZW50KCk7Ci0g
ICAgYXV0byBjb250ZW50U3RhcnQgPSBpbmxpbmVSdW4ubG9naWNhbExlZnQoKTsKLSAgICBhdXRv
IHN0YXJ0UG9zaXRpb24gPSBpbmxpbmVSdW4udGV4dENvbnRleHQoKS0+c3RhcnQoKTsKLSAgICBh
dXRvIHJlbWFuaW5nTGVuZ3RoID0gaW5saW5lUnVuLnRleHRDb250ZXh0KCktPmxlbmd0aCgpOwot
Ci0gICAgc3RydWN0IFVuY29tbWl0dGVkIHsKLSAgICAgICAgY29uc3QgSW5saW5lSXRlbSogZmly
c3RJbmxpbmVJdGVtIHsgbnVsbHB0ciB9OwotICAgICAgICBjb25zdCBJbmxpbmVJdGVtKiBsYXN0
SW5saW5lSXRlbSB7IG51bGxwdHIgfTsKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoIHsgMCB9Owor
ICAgIGF1dG8gZmxvYXRpbmdDb250ZXh0ID0gRmxvYXRpbmdDb250ZXh0IHsgbV9mbG9hdGluZ1N0
YXRlIH07CisgICAgTGluZSBsaW5lKGxheW91dFN0YXRlKCkpOworICAgIGluaXRpYWxpemVMaW5l
KGxpbmUsIGxheW91dFN0YXRlKCkuZGlzcGxheUJveEZvckxheW91dEJveChtX2Zvcm1hdHRpbmdS
b290KS5jb250ZW50Qm94VG9wKCkpOworCisgICAgVW5jb21taXR0ZWRDb250ZW50IHVuY29tbWl0
dGVkQ29udGVudDsKKyAgICBhdXRvIGNvbW1pdFBlbmRpbmdDb250ZW50ID0gWyZdIHsKKyAgICAg
ICAgZm9yIChhdXRvKiB1bmNvbW1pdHRlZCA6IHVuY29tbWl0dGVkQ29udGVudC5pbmxpbmVJdGVt
cygpKQorICAgICAgICAgICAgY29tbWl0SW5saW5lSXRlbVRvTGluZShsaW5lLCAqdW5jb21taXR0
ZWQpOworICAgICAgICB1bmNvbW1pdHRlZENvbnRlbnQucmVzZXQoKTsKICAgICB9OwotICAgIE9w
dGlvbmFsPFVuY29tbWl0dGVkPiB1bmNvbW1pdHRlZDsKLQotICAgIGF1dG8gY29tbWl0ID0gWyZd
IHsKLSAgICAgICAgaWYgKCF1bmNvbW1pdHRlZCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICBjb250ZW50U3RhcnQgKz0gdW5jb21taXR0ZWQtPmZpcnN0SW5saW5lSXRlbS0+bm9uQnJl
YWthYmxlU3RhcnQoKTsKIAotICAgICAgICBhdXRvIHJ1bldpZHRoID0gdGhpcy0+cnVuV2lkdGgo
aW5saW5lQ29udGVudCwgKnVuY29tbWl0dGVkLT5maXJzdElubGluZUl0ZW0sIHN0YXJ0UG9zaXRp
b24sIHVuY29tbWl0dGVkLT5sZW5ndGgsIGNvbnRlbnRTdGFydCk7Ci0gICAgICAgIGF1dG8gcnVu
ID0gSW5saW5lUnVuIHsgeyBpbmxpbmVSdW4ubG9naWNhbFRvcCgpLCBjb250ZW50U3RhcnQsIHJ1
bldpZHRoLCBpbmxpbmVSdW4ubG9naWNhbEhlaWdodCgpIH0sICp1bmNvbW1pdHRlZC0+Zmlyc3RJ
bmxpbmVJdGVtIH07Ci0gICAgICAgIHJ1bi5zZXRUZXh0Q29udGV4dCh7IHN0YXJ0UG9zaXRpb24s
IHVuY29tbWl0dGVkLT5sZW5ndGggfSk7Ci0gICAgICAgIHNwbGl0UnVucy5hcHBlbmQocnVuKTsK
KyAgICBMaW5lQnJlYWtlciBsaW5lQnJlYWtlcihsYXlvdXRTdGF0ZSgpKTsKKyAgICBhdXRvJiBp
bmxpbmVDb250ZW50ID0gbV9mb3JtYXR0aW5nU3RhdGUuaW5saW5lSXRlbXMoKTsKKyAgICBmb3Ig
KGF1dG8mIGlubGluZUl0ZW0gOiBpbmxpbmVDb250ZW50KSB7CisgICAgICAgIC8vIEl0ZXJhdGUg
dGhyb3VnaCB0aGUgaW5saW5lIGNvbnRlbnQgYW5kIHRyeSB0byBwdXQgdGhlIGlubGluZSBib3hl
cyBvbiB0aGUgY3VycmVudCBsaW5lLgorICAgICAgICBpZiAoaW5saW5lSXRlbS0+aXNIYXJkTGlu
ZUJyZWFrKCkpIHsKKyAgICAgICAgICAgIC8vIENsb3NlIHRoZSBjdXJyZW50IGxpbmUgdGhlbiBj
cmVhdGUgYW5kIGltbWVkaWF0ZWx5IGNsb3NlIGFub3RoZXIgb25lLgorICAgICAgICAgICAgY29t
bWl0UGVuZGluZ0NvbnRlbnQoKTsKKyAgICAgICAgICAgIGNvbW1pdElubGluZUl0ZW1Ub0xpbmUo
bGluZSwgKmlubGluZUl0ZW0pOworICAgICAgICAgICAgY2xvc2VMaW5lKGxpbmUpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgYXV0byBhdmFpbGFibGVXaWR0aCA9IGxpbmUuYXZhaWxh
YmxlV2lkdGgoKSAtIHVuY29tbWl0dGVkQ29udGVudC53aWR0aCgpOworICAgICAgICAgICAgYXV0
byBjdXJyZW50TG9naWNhbFJpZ2h0ID0gbGluZS5jb250ZW50TG9naWNhbFJpZ2h0KCkgKyB1bmNv
bW1pdHRlZENvbnRlbnQud2lkdGgoKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBFbnN1cmUgTGlu
ZUNvbnRleHQ6OnRyaW1tYWJsZVdpZHRoIGluY2x1ZGVzIHVuY29tbWl0dGVkIGNvbnRlbnQgaWYg
bmVlZGVkLgorICAgICAgICAgICAgYXV0byBicmVha2luZ0NvbnRleHQgPSBsaW5lQnJlYWtlci5i
cmVha2luZ0NvbnRleHQoKmlubGluZUl0ZW0sIHsgYXZhaWxhYmxlV2lkdGgsIGN1cnJlbnRMb2dp
Y2FsUmlnaHQsIGxpbmUudHJhaWxpbmdUcmltbWFibGVXaWR0aCgpLCAhbGluZS5oYXNDb250ZW50
KCkgfSk7CisgICAgICAgICAgICBpZiAoYnJlYWtpbmdDb250ZXh0LmlzQXRCcmVha2luZ09wcG9y
dHVuaXR5KQorICAgICAgICAgICAgICAgIGNvbW1pdFBlbmRpbmdDb250ZW50KCk7CisKKyAgICAg
ICAgICAgIGlmIChicmVha2luZ0NvbnRleHQuYnJlYWtpbmdCZWhhdmlvciA9PSBMaW5lQnJlYWtl
cjo6QnJlYWtpbmdCZWhhdmlvcjo6QnJlYWspIHsKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9U
X0lNUExFTUVOVEVEX1lFVCgpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgfQogCi0gICAgICAgIGNvbnRlbnRTdGFydCArPSBydW5XaWR0aCArIHVuY29tbWl0dGVkLT5s
YXN0SW5saW5lSXRlbS0+bm9uQnJlYWthYmxlRW5kKCk7CisgICAgICAgICAgICBpZiAoYnJlYWtp
bmdDb250ZXh0LmJyZWFraW5nQmVoYXZpb3IgPT0gTGluZUJyZWFrZXI6OkJyZWFraW5nQmVoYXZp
b3I6OldyYXApCisgICAgICAgICAgICAgICAgY2xvc2VMaW5lKGxpbmUpOwogCi0gICAgICAgIHN0
YXJ0UG9zaXRpb24gPSAwOwotICAgICAgICB1bmNvbW1pdHRlZCA9IHsgfTsKLSAgICB9OworICAg
ICAgICAgICAgaWYgKGlubGluZUl0ZW0tPmlzRmxvYXQoKSkKKyAgICAgICAgICAgICAgICBoYW5k
bGVGbG9hdChsaW5lLCBmbG9hdGluZ0NvbnRleHQsICppbmxpbmVJdGVtKTsKKyAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChicmVha2luZ0NvbnRleHQuaXNBdEJyZWFraW5n
T3Bwb3J0dW5pdHkpCisgICAgICAgICAgICAgICAgICAgIGNvbW1pdElubGluZUl0ZW1Ub0xpbmUo
bGluZSwgKmlubGluZUl0ZW0pOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgdW5jb21taXR0ZWRDb250ZW50LmFkZCgqaW5saW5lSXRlbSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisgICAgLy8gUHJvY2VzcyByZW1haW5pbmcgdW5jb21taXR0ZWQg
Y29udGVudC4KKyAgICBpZiAoIXVuY29tbWl0dGVkQ29udGVudC5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgaWYgKGxpbmUuYXZhaWxhYmxlV2lkdGgoKSA8IHVuY29tbWl0dGVkQ29udGVudC53aWR0aCgp
KQorICAgICAgICAgICAgY2xvc2VMaW5lKGxpbmUpOworICAgICAgICBjb21taXRQZW5kaW5nQ29u
dGVudCgpOworICAgIH0KKyAgICBjbG9zZUxpbmUobGluZSk7Cit9CiAKLSAgICBmb3IgKGF1dG8g
aXRlcmF0b3IgPSBpbmxpbmVDb250ZW50LmZpbmQoY29uc3RfY2FzdDxJbmxpbmVJdGVtKj4oJmlu
bGluZVJ1bi5pbmxpbmVJdGVtKCkpKTsgaXRlcmF0b3IgIT0gaW5saW5lQ29udGVudC5lbmQoKSAm
JiByZW1hbmluZ0xlbmd0aCA+IDA7ICsraXRlcmF0b3IpIHsKLSAgICAgICAgYXV0byYgaW5saW5l
SXRlbSA9ICoqaXRlcmF0b3I7Cit2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5
b3V0OjpjbG9zZUxpbmUoTGluZSYgbGluZSkgY29uc3QKK3sKKyAgICBhdXRvJiBsaW5lSXRlbXMg
PSBsaW5lLmNsb3NlKCk7CisgICAgaWYgKGxpbmVJdGVtcy5pc0VtcHR5KCkpIHsKKyAgICAgICAg
Ly8gU3BlYyB0ZWxscyB1cyB0byBjcmVhdGUgYSB6ZXJvIGhlaWdodCwgZW1wdHkgbGluZSBib3gu
CisgICAgICAgIGF1dG8gbGluZUJveCA9IERpc3BsYXk6OlJlY3QgeyBsaW5lLmxvZ2ljYWxUb3Ao
KSwgbGluZS5sb2dpY2FsTGVmdCgpLCAwICwgMCB9OworICAgICAgICBtX2Zvcm1hdHRpbmdTdGF0
ZS5hZGRMaW5lQm94KHsgbGluZUJveCB9KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAg
ICAgICAvLyBTa2lwIGFsbCBub24taW5mbG93IGJveGVzIChmbG9hdHMsIG91dC1vZi1mbG93IHBv
c2l0aW9uZWQgZWxlbWVudHMpLiBUaGV5IGRvbid0IHBhcnRpY2lwYXRlIGluIHRoZSBpbmxpbmUg
cnVuIGNvbnRleHQuCi0gICAgICAgIGlmICghaW5saW5lSXRlbS5sYXlvdXRCb3goKS5pc0luRmxv
dygpKQorICAgIGF1dG8mIGlubGluZURpc3BsYXlSdW5zID0gbV9mb3JtYXR0aW5nU3RhdGUuaW5s
aW5lUnVucygpOyAKKyAgICBPcHRpb25hbDx1bnNpZ25lZD4gcHJldmlvdXNMaW5lTGFzdFJ1bklu
ZGV4ID0gaW5saW5lRGlzcGxheVJ1bnMuaXNFbXB0eSgpID8gT3B0aW9uYWw8dW5zaWduZWQ+KCkg
OiBpbmxpbmVEaXNwbGF5UnVucy5zaXplKCkgLSAxOworICAgIC8vIDkuNC4yIElubGluZSBmb3Jt
YXR0aW5nIGNvbnRleHRzCisgICAgLy8gQSBsaW5lIGJveCBpcyBhbHdheXMgdGFsbCBlbm91Z2gg
Zm9yIGFsbCBvZiB0aGUgYm94ZXMgaXQgY29udGFpbnMuCisgICAgYXV0byBsaW5lQm94ID0gRGlz
cGxheTo6UmVjdCB7IGxpbmUubG9naWNhbFRvcCgpLCBsaW5lLmxvZ2ljYWxMZWZ0KCksIDAgLCBs
aW5lLmxvZ2ljYWxIZWlnaHQoKSB9OworICAgIC8vIENyZWF0ZSBmaW5hbCBkaXNwbGF5IHJ1bnMu
CisgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgbGluZUl0ZW1zLnNpemUoKTsg
KytpbmRleCkgeworICAgICAgICBhdXRvJiBsaW5lSXRlbSA9IGxpbmVJdGVtcy5hdChpbmRleCk7
CisKKyAgICAgICAgYXV0byYgaW5saW5lSXRlbSA9IGxpbmVJdGVtLT5pbmxpbmVJdGVtOworICAg
ICAgICBhdXRvJiBpbmxpbmVSdW4gPSBsaW5lSXRlbS0+aW5saW5lUnVuOworICAgICAgICBhdXRv
JiBsYXlvdXRCb3ggPSBpbmxpbmVJdGVtLmxheW91dEJveCgpOworICAgICAgICBhdXRvJiBkaXNw
bGF5Qm94ID0gbGF5b3V0U3RhdGUoKS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7
CisKKyAgICAgICAgaWYgKGlubGluZUl0ZW0uaXNIYXJkTGluZUJyZWFrKCkpIHsKKyAgICAgICAg
ICAgIGRpc3BsYXlCb3guc2V0VG9wTGVmdChpbmxpbmVSdW4ubG9naWNhbFRvcExlZnQoKSk7Cisg
ICAgICAgICAgICBkaXNwbGF5Qm94LnNldENvbnRlbnRCb3hXaWR0aChpbmxpbmVSdW4ubG9naWNh
bFdpZHRoKCkpOworICAgICAgICAgICAgZGlzcGxheUJveC5zZXRDb250ZW50Qm94SGVpZ2h0KGlu
bGluZVJ1bi5sb2dpY2FsSGVpZ2h0KCkpOworICAgICAgICAgICAgbV9mb3JtYXR0aW5nU3RhdGUu
YWRkSW5saW5lUnVuKHN0ZDo6bWFrZV91bmlxdWU8RGlzcGxheTo6UnVuPihpbmxpbmVSdW4pKTsK
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CiAKLSAgICAgICAgYXV0byBjdXJyZW50
TGVuZ3RoID0gWyZdIHsKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1pbihyZW1hbmluZ0xlbmd0
aCwgaW5saW5lSXRlbS50ZXh0Q29udGVudCgpLmxlbmd0aCgpIC0gc3RhcnRQb3NpdGlvbik7Ci0g
ICAgICAgIH07Ci0KLSAgICAgICAgLy8gMS4gQnJlYWsgYmVmb3JlL2FmdGVyIC0+IHJlcXVpcmVz
IGRlZGljYXRlZCBydW4gLT4gY29tbWl0IHdoYXQgd2UndmUgZ290IHNvIGZhciBhbmQgYWxzbyBj
b21taXQgdGhlIGN1cnJlbnQgaW5saW5lIGVsZW1lbnQgYXMgYSBzZXBhcmF0ZSBpbmxpbmUgcnVu
LgotICAgICAgICAvLyAyLiBCcmVhayBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBpbmxpbmUgZWxl
bWVudCAtPiBjb21taXQgd2hhdCB3ZSd2ZSBnb3Qgc28gZmFyLiBDdXJyZW50IGVsZW1lbnQgYmVj
b21lcyB0aGUgZmlyc3QgdW5jb21taXR0ZWQuCi0gICAgICAgIC8vIDMuIEJyZWFrIGF0IHRoZSBl
bmQgb2YgdGhlIGlubGluZSBlbGVtZW50IC0+IGNvbW1pdCB3aGF0IHdlJ3ZlIGdvdCBzbyBmYXIg
aW5jbHVkaW5nIHRoZSBjdXJyZW50IGVsZW1lbnQuCi0gICAgICAgIC8vIDQuIElubGluZSBlbGVt
ZW50IGRvZXMgbm90IHJlcXVpcmUgcnVuIGJyZWFraW5nIC0+IGFkZCBjdXJyZW50IGlubGluZSBl
bGVtZW50IHRvIHVuY29tbWl0dGVkLiBKdW1wIHRvIHRoZSBuZXh0IGVsZW1lbnQuCi0gICAgICAg
IGF1dG8gZGV0YWNoaW5nUnVsZXMgPSBpbmxpbmVJdGVtLmRldGFjaGluZ1J1bGVzKCk7Ci0KLSAg
ICAgICAgLy8gIzEKLSAgICAgICAgaWYgKGRldGFjaGluZ1J1bGVzLmNvbnRhaW5zQWxsKHsgSW5s
aW5lSXRlbTo6RGV0YWNoaW5nUnVsZTo6QnJlYWtBdFN0YXJ0LCBJbmxpbmVJdGVtOjpEZXRhY2hp
bmdSdWxlOjpCcmVha0F0RW5kIH0pKSB7Ci0gICAgICAgICAgICBjb21taXQoKTsKLSAgICAgICAg
ICAgIGF1dG8gY29udGVudExlbmd0aCA9IGN1cnJlbnRMZW5ndGgoKTsKLSAgICAgICAgICAgIHVu
Y29tbWl0dGVkID0gVW5jb21taXR0ZWQgeyAmaW5saW5lSXRlbSwgJmlubGluZUl0ZW0sIGNvbnRl
bnRMZW5ndGggfTsKLSAgICAgICAgICAgIHJlbWFuaW5nTGVuZ3RoIC09IGNvbnRlbnRMZW5ndGg7
Ci0gICAgICAgICAgICBjb21taXQoKTsKKyAgICAgICAgLy8gSW5saW5lIGxldmVsIGJveCAocmVw
bGFjZWQgb3IgaW5saW5lLWJsb2NrKQorICAgICAgICBpZiAoaW5saW5lSXRlbS5pc0JveCgpKSB7
CisgICAgICAgICAgICBhdXRvIHRvcExlZnQgPSBpbmxpbmVSdW4ubG9naWNhbFRvcExlZnQoKTsK
KyAgICAgICAgICAgIGlmIChsYXlvdXRCb3guaXNJbkZsb3dQb3NpdGlvbmVkKCkpCisgICAgICAg
ICAgICAgICAgdG9wTGVmdCArPSBHZW9tZXRyeTo6aW5GbG93UG9zaXRpb25lZFBvc2l0aW9uT2Zm
c2V0KGxheW91dFN0YXRlKCksIGxheW91dEJveCk7CisgICAgICAgICAgICBkaXNwbGF5Qm94LnNl
dFRvcExlZnQodG9wTGVmdCk7CisgICAgICAgICAgICBsaW5lQm94LmV4cGFuZEhvcml6b250YWxs
eShpbmxpbmVSdW4ubG9naWNhbFdpZHRoKCkpOworICAgICAgICAgICAgbV9mb3JtYXR0aW5nU3Rh
dGUuYWRkSW5saW5lUnVuKHN0ZDo6bWFrZV91bmlxdWU8RGlzcGxheTo6UnVuPihpbmxpbmVSdW4p
KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgLy8gIzIKLSAg
ICAgICAgaWYgKGRldGFjaGluZ1J1bGVzLmNvbnRhaW5zKElubGluZUl0ZW06OkRldGFjaGluZ1J1
bGU6OkJyZWFrQXRTdGFydCkpCi0gICAgICAgICAgICBjb21taXQoKTsKLQotICAgICAgICAvLyBB
ZGQgY3VycmVudCBpbmxpbmUgaXRlbSB0byB1bmNvbW1pdHRlZC4KLSAgICAgICAgLy8gIzMgYW5k
ICM0Ci0gICAgICAgIGF1dG8gY29udGVudExlbmd0aCA9IGN1cnJlbnRMZW5ndGgoKTsKLSAgICAg
ICAgaWYgKCF1bmNvbW1pdHRlZCkKLSAgICAgICAgICAgIHVuY29tbWl0dGVkID0gVW5jb21taXR0
ZWQgeyAmaW5saW5lSXRlbSwgJmlubGluZUl0ZW0sIDAgfTsKLSAgICAgICAgdW5jb21taXR0ZWQt
Pmxlbmd0aCArPSBjb250ZW50TGVuZ3RoOwotICAgICAgICB1bmNvbW1pdHRlZC0+bGFzdElubGlu
ZUl0ZW0gPSAmaW5saW5lSXRlbTsKLSAgICAgICAgcmVtYW5pbmdMZW5ndGggLT0gY29udGVudExl
bmd0aDsKLQotICAgICAgICAvLyAjMwotICAgICAgICBpZiAoZGV0YWNoaW5nUnVsZXMuY29udGFp
bnMoSW5saW5lSXRlbTo6RGV0YWNoaW5nUnVsZTo6QnJlYWtBdEVuZCkpCi0gICAgICAgICAgICBj
b21taXQoKTsKLSAgICB9Ci0gICAgLy8gRWl0aGVyIGFsbCBpbmxpbmUgZWxlbWVudHMgbmVlZGVk
IGRlZGljYXRlZCBydW5zIG9yIG5laXRoZXIgb2YgdGhlbS4KLSAgICBpZiAoIXJlbWFuaW5nTGVu
Z3RoIHx8IHJlbWFuaW5nTGVuZ3RoID09IGlubGluZVJ1bi50ZXh0Q29udGV4dCgpLT5sZW5ndGgo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY29tbWl0KCk7Ci19Ci0KLXZvaWQgSW5saW5lRm9y
bWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OmNyZWF0ZUZpbmFsUnVucyhMaW5lJiBsaW5lKSBj
b25zdAotewotICAgIGZvciAoYXV0byYgaW5saW5lUnVuIDogbGluZS5ydW5zKCkpIHsKLSAgICAg
ICAgaWYgKGlubGluZVJ1bi5vdmVybGFwc011bHRpcGxlSW5saW5lSXRlbXMoKSkgewotICAgICAg
ICAgICAgSW5saW5lUnVucyBzcGxpdFJ1bnM7Ci0gICAgICAgICAgICBzcGxpdElubGluZVJ1bklm
TmVlZGVkKGlubGluZVJ1biwgc3BsaXRSdW5zKTsKLSAgICAgICAgICAgIGZvciAoYXV0byYgc3Bs
aXRSdW4gOiBzcGxpdFJ1bnMpCi0gICAgICAgICAgICAgICAgbV9mb3JtYXR0aW5nU3RhdGUuYXBw
ZW5kSW5saW5lUnVuKHNwbGl0UnVuKTsKLQotICAgICAgICAgICAgaWYgKCFzcGxpdFJ1bnMuaXNF
bXB0eSgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAvLyBJbmxpbmUgbGV2
ZWwgY29udGFpbmVyIHN0YXJ0ICg8c3Bhbj4pCisgICAgICAgIGlmIChpbmxpbmVJdGVtLmlzQ29u
dGFpbmVyU3RhcnQoKSkgeworICAgICAgICAgICAgZGlzcGxheUJveC5zZXRUb3BMZWZ0KGlubGlu
ZVJ1bi5sb2dpY2FsVG9wTGVmdCgpKTsKKyAgICAgICAgICAgIGxpbmVCb3guZXhwYW5kSG9yaXpv
bnRhbGx5KGlubGluZVJ1bi5sb2dpY2FsV2lkdGgoKSk7CisgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgfQogCi0gICAgICAgIGF1dG8gZmluYWxSdW4gPSBbJl0gewotICAgICAgICAgICAg
YXV0byYgaW5saW5lSXRlbSA9IGlubGluZVJ1bi5pbmxpbmVJdGVtKCk7Ci0gICAgICAgICAgICBp
ZiAoaW5saW5lSXRlbS5kZXRhY2hpbmdSdWxlcygpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gaW5saW5lUnVuOwotCi0gICAgICAgICAgICBJbmxpbmVSdW4gYWRqdXN0ZWRSdW4g
PSBpbmxpbmVSdW47Ci0gICAgICAgICAgICBhdXRvIHdpZHRoID0gaW5saW5lUnVuLmxvZ2ljYWxX
aWR0aCgpIC0gaW5saW5lSXRlbS5ub25CcmVha2FibGVTdGFydCgpIC0gaW5saW5lSXRlbS5ub25C
cmVha2FibGVFbmQoKTsKLSAgICAgICAgICAgIGFkanVzdGVkUnVuLnNldExvZ2ljYWxMZWZ0KGlu
bGluZVJ1bi5sb2dpY2FsTGVmdCgpICsgaW5saW5lSXRlbS5ub25CcmVha2FibGVTdGFydCgpKTsK
LSAgICAgICAgICAgIGFkanVzdGVkUnVuLnNldExvZ2ljYWxXaWR0aCh3aWR0aCk7Ci0gICAgICAg
ICAgICByZXR1cm4gYWRqdXN0ZWRSdW47Ci0gICAgICAgIH07CisgICAgICAgIC8vIElubGluZSBs
ZXZlbCBjb250YWluZXIgZW5kICg8L3NwYW4+KQorICAgICAgICBpZiAoaW5saW5lSXRlbS5pc0Nv
bnRhaW5lckVuZCgpKSB7CisgICAgICAgICAgICBpZiAobGF5b3V0Qm94LmlzSW5GbG93UG9zaXRp
b25lZCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byBpbmZsb3dPZmZzZXQgPSBHZW9tZXRyeTo6
aW5GbG93UG9zaXRpb25lZFBvc2l0aW9uT2Zmc2V0KGxheW91dFN0YXRlKCksIGxheW91dEJveCk7
CisgICAgICAgICAgICAgICAgZGlzcGxheUJveC5tb3ZlSG9yaXpvbnRhbGx5KGluZmxvd09mZnNl
dC53aWR0aCgpKTsKKyAgICAgICAgICAgICAgICBkaXNwbGF5Qm94Lm1vdmVWZXJ0aWNhbGx5KGlu
Zmxvd09mZnNldC5oZWlnaHQoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhdXRvIG1h
cmdpbkJveFdpZHRoID0gaW5saW5lUnVuLmxvZ2ljYWxMZWZ0KCkgLSBkaXNwbGF5Qm94LmxlZnQo
KTsKKyAgICAgICAgICAgIGF1dG8gY29udGVudEJveFdpZHRoID0gbWFyZ2luQm94V2lkdGggLSAo
ZGlzcGxheUJveC5tYXJnaW5TdGFydCgpICsgZGlzcGxheUJveC5ib3JkZXJMZWZ0KCkgKyBkaXNw
bGF5Qm94LnBhZGRpbmdMZWZ0KCkudmFsdWVPcigwKSk7CisgICAgICAgICAgICAvLyBGSVhNRSBm
aXggaXQgZm9yIG11bHRpbGluZS4KKyAgICAgICAgICAgIGRpc3BsYXlCb3guc2V0Q29udGVudEJv
eFdpZHRoKGNvbnRlbnRCb3hXaWR0aCk7CisgICAgICAgICAgICBkaXNwbGF5Qm94LnNldENvbnRl
bnRCb3hIZWlnaHQoaW5saW5lUnVuLmxvZ2ljYWxIZWlnaHQoKSk7CisgICAgICAgICAgICBsaW5l
Qm94LmV4cGFuZEhvcml6b250YWxseShpbmxpbmVSdW4ubG9naWNhbFdpZHRoKCkpOworICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIH0KIAotICAgICAgICBtX2Zvcm1hdHRpbmdTdGF0ZS5h
cHBlbmRJbmxpbmVSdW4oZmluYWxSdW4oKSk7CisgICAgICAgIC8vIFRleHQgY29udGVudC4gVHJ5
IHRvIGpvaW4gbXVsdGlwbGUgdGV4dCBydW5zIHdoZW4gcG9zc2libGUuCisgICAgICAgIEFTU0VS
VChpbmxpbmVSdW4udGV4dENvbnRleHQoKSk7ICAgICAgICAKKyAgICAgICAgY29uc3QgTGluZTo6
TGluZUl0ZW0qIHByZXZpb3VzTGluZUl0ZW0gPSAhaW5kZXggPyBudWxscHRyIDogbGluZUl0ZW1z
W2luZGV4IC0gMV0uZ2V0KCk7CisgICAgICAgIGlmICghbGluZUl0ZW0tPmlzQ29sbGFwc2VkKSB7
CisgICAgICAgICAgICBhdXRvJiBpbmxpbmVUZXh0SXRlbSA9IGRvd25jYXN0PElubGluZVRleHRJ
dGVtPihpbmxpbmVJdGVtKTsKKyAgICAgICAgICAgIGF1dG8gcHJldmlvdXNSdW5DYW5CZUV4dGVu
ZGVkID0gcHJldmlvdXNMaW5lSXRlbSA/IHByZXZpb3VzTGluZUl0ZW0tPmNhbkJlRXh0ZW5kZWQg
OiBmYWxzZTsKKyAgICAgICAgICAgIGF1dG8gcmVxdWlyZXNOZXdSdW4gPSAhaW5kZXggfHwgIXBy
ZXZpb3VzUnVuQ2FuQmVFeHRlbmRlZCB8fCAmbGF5b3V0Qm94ICE9ICZwcmV2aW91c0xpbmVJdGVt
LT5pbmxpbmVJdGVtLmxheW91dEJveCgpOworICAgICAgICAgICAgaWYgKHJlcXVpcmVzTmV3UnVu
KQorICAgICAgICAgICAgICAgIG1fZm9ybWF0dGluZ1N0YXRlLmFkZElubGluZVJ1bihzdGQ6Om1h
a2VfdW5pcXVlPERpc3BsYXk6OlJ1bj4oaW5saW5lUnVuKSk7CisgICAgICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgICAgICBhdXRvJiBsYXN0RGlzcGxheVJ1biA9IG1fZm9ybWF0dGluZ1N0YXRl
LmlubGluZVJ1bnMoKS5sYXN0KCk7CisgICAgICAgICAgICAgICAgbGFzdERpc3BsYXlSdW4tPmV4
cGFuZEhvcml6b250YWxseShpbmxpbmVUZXh0SXRlbS53aWR0aCgpKTsKKyAgICAgICAgICAgICAg
ICBsYXN0RGlzcGxheVJ1bi0+dGV4dENvbnRleHQoKS0+ZXhwYW5kKGlubGluZVJ1bi50ZXh0Q29u
dGV4dCgpLT5sZW5ndGgoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsaW5lQm94LmV4
cGFuZEhvcml6b250YWxseShpbmxpbmVSdW4ubG9naWNhbFdpZHRoKCkpOworICAgICAgICB9Cisg
ICAgICAgIC8vIEZJWE1FIHRha2UgY29udGVudCBicmVha2luZyBpbnRvIGFjY291bnQgd2hlbiBw
YXJ0IG9mIHRoZSBsYXlvdXQgYm94IGlzIG9uIHRoZSBwcmV2aW91cyBsaW5lLgorICAgICAgICBh
dXRvIGZpcnN0SW5saW5lUnVuRm9yTGF5b3V0Qm94ID0gIXByZXZpb3VzTGluZUl0ZW0gfHwgJnBy
ZXZpb3VzTGluZUl0ZW0tPmlubGluZUl0ZW0ubGF5b3V0Qm94KCkgIT0gJmxheW91dEJveDsKKyAg
ICAgICAgaWYgKGZpcnN0SW5saW5lUnVuRm9yTGF5b3V0Qm94KSB7CisgICAgICAgICAgICAvLyBT
ZXR1cCBkaXNwbGF5IGJveCBmb3IgdGhlIGFzc29jaWF0ZWQgbGF5b3V0IGJveC4KKyAgICAgICAg
ICAgIGRpc3BsYXlCb3guc2V0VG9wTGVmdChpbmxpbmVSdW4ubG9naWNhbFRvcExlZnQoKSk7Cisg
ICAgICAgICAgICBkaXNwbGF5Qm94LnNldENvbnRlbnRCb3hXaWR0aChpbmxpbmVSdW4ubG9naWNh
bFdpZHRoKCkpOworICAgICAgICAgICAgZGlzcGxheUJveC5zZXRDb250ZW50Qm94SGVpZ2h0KGlu
bGluZVJ1bi5sb2dpY2FsSGVpZ2h0KCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
Ly8gRklYTUUgZml4IGl0IGZvciBtdWx0aXJ1bi9tdWx0aWxpbmUuCisgICAgICAgICAgICBkaXNw
bGF5Qm94LnNldENvbnRlbnRCb3hXaWR0aChkaXNwbGF5Qm94LmNvbnRlbnRCb3hXaWR0aCgpICsg
aW5saW5lUnVuLmxvZ2ljYWxXaWR0aCgpKTsKKyAgICAgICAgfQogICAgIH0KLX0KLQotdm9pZCBJ
bmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6cG9zdFByb2Nlc3NJbmxpbmVSdW5z
KExpbmUmIGxpbmUsIElzTGFzdExpbmUgaXNMYXN0TGluZSkgY29uc3QKLXsKLSAgICBhbGlnblJ1
bnMobV9mb3JtYXR0aW5nUm9vdC5zdHlsZSgpLnRleHRBbGlnbigpLCBsaW5lLCBpc0xhc3RMaW5l
KTsKLSAgICBhdXRvIGZpcnN0UnVuSW5kZXggPSBtX2Zvcm1hdHRpbmdTdGF0ZS5pbmxpbmVSdW5z
KCkuc2l6ZSgpOwotICAgIGNyZWF0ZUZpbmFsUnVucyhsaW5lKTsKLQotICAgIHBsYWNlSW5GbG93
UG9zaXRpb25lZENoaWxkcmVuKGZpcnN0UnVuSW5kZXgpOwotfQotCi12b2lkIElubGluZUZvcm1h
dHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpjbG9zZUxpbmUoTGluZSYgbGluZSwgSXNMYXN0TGlu
ZSBpc0xhc3RMaW5lKSBjb25zdAotewotICAgIGxpbmUuY2xvc2UoKTsKLSAgICBpZiAoIWxpbmUu
aGFzQ29udGVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBwb3N0UHJvY2Vzc0lubGluZVJ1
bnMobGluZSwgaXNMYXN0TGluZSk7Ci19CiAKLXZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6
OkxpbmVMYXlvdXQ6OmFwcGVuZENvbnRlbnRUb0xpbmUoTGluZSYgbGluZSwgY29uc3QgSW5saW5l
UnVuUHJvdmlkZXI6OlJ1biYgcnVuLCBjb25zdCBMYXlvdXRTaXplJiBydW5TaXplKSBjb25zdAot
ewotICAgIGF1dG8gbGFzdFJ1blR5cGUgPSBsaW5lLmxhc3RSdW5UeXBlKCk7Ci0gICAgbGluZS5h
cHBlbmRDb250ZW50KHJ1biwgcnVuU2l6ZSk7CisgICAgaWYgKGxpbmUuaGFzQ29udGVudCgpKSB7
CisgICAgICAgIG1fZm9ybWF0dGluZ1N0YXRlLmFkZExpbmVCb3goeyBsaW5lQm94IH0pOworICAg
ICAgICBhbGlnblJ1bnMobV9mb3JtYXR0aW5nUm9vdC5zdHlsZSgpLnRleHRBbGlnbigpLCBwcmV2
aW91c0xpbmVMYXN0UnVuSW5kZXgudmFsdWVPcigtMSkgKyAxLCBsaW5lLmF2YWlsYWJsZVdpZHRo
KCkpOworICAgIH0KIAotICAgIGlmIChtX2Zvcm1hdHRpbmdSb290LnN0eWxlKCkudGV4dEFsaWdu
KCkgPT0gVGV4dEFsaWduTW9kZTo6SnVzdGlmeSkKLSAgICAgICAgY29tcHV0ZUV4cGFuc2lvbk9w
cG9ydHVuaXRpZXMobGluZSwgcnVuLCBsYXN0UnVuVHlwZS52YWx1ZU9yKElubGluZVJ1blByb3Zp
ZGVyOjpSdW46OlR5cGU6Ok5vbldoaXRlc3BhY2UpKTsKKyAgICBpbml0aWFsaXplTGluZShsaW5l
LCBsaW5lLmxvZ2ljYWxCb3R0b20oKSk7CiB9CiAKLXZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQ6OkxpbmVMYXlvdXQ6OmNvbXB1dGVGbG9hdFBvc2l0aW9uKGNvbnN0IEZsb2F0aW5nQ29udGV4
dCYgZmxvYXRpbmdDb250ZXh0LCBMaW5lJiBsaW5lLCBjb25zdCBCb3gmIGZsb2F0Qm94KSBjb25z
dAordm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6aGFuZGxlRmxvYXQo
TGluZSYgbGluZSwgY29uc3QgRmxvYXRpbmdDb250ZXh0JiBmbG9hdGluZ0NvbnRleHQsIGNvbnN0
IElubGluZUl0ZW0mIGZsb2F0SXRlbSkgY29uc3QKIHsKLSAgICBhdXRvJiBsYXlvdXRTdGF0ZSA9
IG1fZm9ybWF0dGluZ0NvbnRleHQubGF5b3V0U3RhdGUoKTsKLSAgICBBU1NFUlQobGF5b3V0U3Rh
dGUuaGFzRGlzcGxheUJveChmbG9hdEJveCkpOwotICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBsYXlv
dXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGZsb2F0Qm94KTsKLQorICAgIGF1dG8mIGZs
b2F0Qm94ID0gZmxvYXRJdGVtLmxheW91dEJveCgpOworICAgIEFTU0VSVChsYXlvdXRTdGF0ZSgp
Lmhhc0Rpc3BsYXlCb3goZmxvYXRCb3gpKTsKKyAgICBhdXRvJiBkaXNwbGF5Qm94ID0gbGF5b3V0
U3RhdGUoKS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGZsb2F0Qm94KTsKICAgICAvLyBTZXQgc3Rh
dGljIHBvc2l0aW9uIGZpcnN0LgogICAgIGRpc3BsYXlCb3guc2V0VG9wTGVmdCh7IGxpbmUuY29u
dGVudExvZ2ljYWxSaWdodCgpLCBsaW5lLmxvZ2ljYWxUb3AoKSB9KTsKICAgICAvLyBGbG9hdCBp
dC4KICAgICBkaXNwbGF5Qm94LnNldFRvcExlZnQoZmxvYXRpbmdDb250ZXh0LnBvc2l0aW9uRm9y
RmxvYXQoZmxvYXRCb3gpKTsKKyAgICBtX2Zsb2F0aW5nU3RhdGUuYXBwZW5kKGZsb2F0Qm94KTsK
KyAgICAvLyBTaHJpbmsgYXZhaWxibGUgc3BhY2UgZm9yIGN1cnJlbnQgbGluZSBhbmQgbW92ZSBl
eGlzdGluZyBpbmxpbmUgcnVucy4KKyAgICBhdXRvIGZsb2F0Qm94V2lkdGggPSBmbG9hdEl0ZW0u
d2lkdGgoKTsKKyAgICBmbG9hdEJveC5pc0xlZnRGbG9hdGluZ1Bvc2l0aW9uZWQoKSA/IGxpbmUu
bW92ZUxvZ2ljYWxMZWZ0KGZsb2F0Qm94V2lkdGgpIDogbGluZS5tb3ZlTG9naWNhbFJpZ2h0KGZs
b2F0Qm94V2lkdGgpOwogfQogCi12b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5
b3V0OjpwbGFjZUluRmxvd1Bvc2l0aW9uZWRDaGlsZHJlbih1bnNpZ25lZCBmaXN0UnVuSW5kZXgp
IGNvbnN0Cit2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0Ojpjb21taXRJ
bmxpbmVJdGVtVG9MaW5lKExpbmUmIGxpbmUsIGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0p
IGNvbnN0CiB7Ci0gICAgYXV0byYgbGF5b3V0U3RhdGUgPSBtX2Zvcm1hdHRpbmdDb250ZXh0Lmxh
eW91dFN0YXRlKCk7Ci0gICAgYXV0byYgaW5saW5lUnVucyA9IG1fZm9ybWF0dGluZ1N0YXRlLmlu
bGluZVJ1bnMoKTsKLSAgICBmb3IgKGF1dG8gcnVuSW5kZXggPSBmaXN0UnVuSW5kZXg7IHJ1bklu
ZGV4IDwgaW5saW5lUnVucy5zaXplKCk7ICsrcnVuSW5kZXgpIHsKLSAgICAgICAgYXV0byYgaW5s
aW5lUnVuID0gaW5saW5lUnVuc1tydW5JbmRleF07Ci0KLSAgICAgICAgYXV0byBwb3NpdGlvbk9m
ZnNldCA9IFsmXShhdXRvJiBsYXlvdXRCb3gpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBOZWVk
IHRvIGZpZ3VyZSBvdXQgd2hldGhlciBpbi1mbG93IG9mZnNldCBzaG91bGQgc3RpY2suIFRoaXMg
bWlnaHQgdmVyeSB3ZWxsIGJlIHRlbXBvcmFyeS4KLSAgICAgICAgICAgIE9wdGlvbmFsPExheW91
dFNpemU+IG9mZnNldDsKLSAgICAgICAgICAgIGZvciAoYXV0byogYm94ID0gJmxheW91dEJveDsg
Ym94ICE9ICZtX2Zvcm1hdHRpbmdSb290OyBib3ggPSBib3gtPnBhcmVudCgpKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKCFib3gtPmlzSW5GbG93UG9zaXRpb25lZCgpKQotICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBvZmZzZXQgPSBvZmZzZXQudmFsdWVPcihM
YXlvdXRTaXplKCkpICsgR2VvbWV0cnk6OmluRmxvd1Bvc2l0aW9uZWRQb3NpdGlvbk9mZnNldChs
YXlvdXRTdGF0ZSwgKmJveCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gb2Zm
c2V0OwotICAgICAgICB9OworICAgIGlmIChpbmxpbmVJdGVtLmlzQ29udGFpbmVyU3RhcnQoKSkK
KyAgICAgICAgcmV0dXJuIGxpbmUuYXBwZW5kSW5saW5lQ29udGFpbmVyU3RhcnQoaW5saW5lSXRl
bSk7CiAKLSAgICAgICAgaWYgKGF1dG8gb2Zmc2V0ID0gcG9zaXRpb25PZmZzZXQoaW5saW5lUnVu
LmlubGluZUl0ZW0oKS5sYXlvdXRCb3goKSkpIHsKLSAgICAgICAgICAgIGlubGluZVJ1bi5tb3Zl
VmVydGljYWxseShvZmZzZXQtPmhlaWdodCgpKTsKLSAgICAgICAgICAgIGlubGluZVJ1bi5tb3Zl
SG9yaXpvbnRhbGx5KG9mZnNldC0+d2lkdGgoKSk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgaWYg
KGlubGluZUl0ZW0uaXNDb250YWluZXJFbmQoKSkKKyAgICAgICAgcmV0dXJuIGxpbmUuYXBwZW5k
SW5saW5lQ29udGFpbmVyRW5kKGlubGluZUl0ZW0pOworCisgICAgaWYgKGlubGluZUl0ZW0uaXNI
YXJkTGluZUJyZWFrKCkpCisgICAgICAgIHJldHVybiBsaW5lLmFwcGVuZEhhcmRMaW5lQnJlYWso
aW5saW5lSXRlbSk7CisKKyAgICBhdXRvIHdpZHRoID0gaW5saW5lSXRlbS53aWR0aCgpOworICAg
IGlmIChpczxJbmxpbmVUZXh0SXRlbT4oaW5saW5lSXRlbSkpCisgICAgICAgIHJldHVybiBsaW5l
LmFwcGVuZFRleHRDb250ZW50KGRvd25jYXN0PElubGluZVRleHRJdGVtPihpbmxpbmVJdGVtKSwg
eyB3aWR0aCwgaW5saW5lSXRlbS5zdHlsZSgpLmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCkgfSk7CisK
KyAgICBhdXRvJiBkaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUoKS5kaXNwbGF5Qm94Rm9yTGF5b3V0
Qm94KGlubGluZUl0ZW0ubGF5b3V0Qm94KCkpOworICAgIGxpbmUuYXBwZW5kTm9uVGV4dENvbnRl
bnQoaW5saW5lSXRlbSwgeyB3aWR0aCwgZGlzcGxheUJveC5oZWlnaHQoKSB9KTsKIH0KIAotc3Rh
dGljIExheW91dFVuaXQgYWRqdXN0ZWRMaW5lTG9naWNhbExlZnQoVGV4dEFsaWduTW9kZSBhbGln
biwgTGF5b3V0VW5pdCBsaW5lTG9naWNhbExlZnQsIExheW91dFVuaXQgcmVtYWluaW5nV2lkdGgp
CitzdGF0aWMgT3B0aW9uYWw8TGF5b3V0VW5pdD4gaG9yaXpvbnRhbEFkanVzdG1lbnRGb3JBbGln
bm1lbnQoVGV4dEFsaWduTW9kZSBhbGlnbiwgTGF5b3V0VW5pdCByZW1haW5pbmdXaWR0aCkKIHsK
ICAgICBzd2l0Y2ggKGFsaWduKSB7CiAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpMZWZ0OgogICAg
IGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0TGVmdDoKICAgICBjYXNlIFRleHRBbGlnbk1vZGU6
OlN0YXJ0OgotICAgICAgICByZXR1cm4gbGluZUxvZ2ljYWxMZWZ0OworICAgICAgICByZXR1cm4g
eyB9OwogICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6UmlnaHQ6CiAgICAgY2FzZSBUZXh0QWxpZ25N
b2RlOjpXZWJLaXRSaWdodDoKICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OkVuZDoKLSAgICAgICAg
cmV0dXJuIGxpbmVMb2dpY2FsTGVmdCArIHN0ZDo6bWF4KHJlbWFpbmluZ1dpZHRoLCAwX2x1KTsK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bWF4KHJlbWFpbmluZ1dpZHRoLCAwX2x1KTsKICAgICBjYXNl
IFRleHRBbGlnbk1vZGU6OkNlbnRlcjoKICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OldlYktpdENl
bnRlcjoKLSAgICAgICAgcmV0dXJuIGxpbmVMb2dpY2FsTGVmdCArIHN0ZDo6bWF4KHJlbWFpbmlu
Z1dpZHRoIC8gMiwgMF9sdSk7CisgICAgICAgIHJldHVybiBzdGQ6Om1heChyZW1haW5pbmdXaWR0
aCAvIDIsIDBfbHUpOwogICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6SnVzdGlmeToKICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gbGluZUxvZ2ljYWxMZWZ0OwotfQotCi12b2lkIElu
bGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpqdXN0aWZ5UnVucyhMaW5lJiBsaW5l
KQotewotICAgIGF1dG8mIGlubGluZVJ1bnMgPSBsaW5lLnJ1bnMoKTsKLSAgICBhdXRvJiBsYXN0
SW5saW5lUnVuID0gaW5saW5lUnVucy5sYXN0KCk7Ci0KLSAgICAvLyBBZGp1c3QgKGZvcmJpZCkg
dHJhaWxpbmcgZXhwYW5zaW9uIGZvciB0aGUgbGFzdCB0ZXh0IHJ1biBvbiBsaW5lLgotICAgIGF1
dG8gZXhwYW5zaW9uQmVoYXZpb3IgPSBsYXN0SW5saW5lUnVuLmV4cGFuc2lvbk9wcG9ydHVuaXR5
KCkuYmVoYXZpb3I7Ci0gICAgLy8gUmVtb3ZlIGFsbG93IGFuZCBhZGQgZm9yYmlkLgotICAgIGV4
cGFuc2lvbkJlaGF2aW9yIF49IEFsbG93VHJhaWxpbmdFeHBhbnNpb247Ci0gICAgZXhwYW5zaW9u
QmVoYXZpb3IgfD0gRm9yYmlkVHJhaWxpbmdFeHBhbnNpb247Ci0gICAgbGFzdElubGluZVJ1bi5l
eHBhbnNpb25PcHBvcnR1bml0eSgpLmJlaGF2aW9yID0gZXhwYW5zaW9uQmVoYXZpb3I7Ci0KLSAg
ICAvLyBDb2xsZWN0IGV4cGFuc2lvbiBvcHBvcnR1bml0aWVzIGFuZCBqdXN0aWZ5IHRoZSBydW5z
LgotICAgIGF1dG8gd2lkdGhUb0Rpc3RyaWJ1dGUgPSBsaW5lLmF2YWlsYWJsZVdpZHRoKCk7Ci0g
ICAgaWYgKHdpZHRoVG9EaXN0cmlidXRlIDw9IDApCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1
dG8gZXhwYW5zaW9uT3Bwb3J0dW5pdGllcyA9IDA7Ci0gICAgZm9yIChhdXRvJiBpbmxpbmVSdW4g
OiBpbmxpbmVSdW5zKQotICAgICAgICBleHBhbnNpb25PcHBvcnR1bml0aWVzICs9IGlubGluZVJ1
bi5leHBhbnNpb25PcHBvcnR1bml0eSgpLmNvdW50OwotCi0gICAgaWYgKCFleHBhbnNpb25PcHBv
cnR1bml0aWVzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmbG9hdCBleHBhbnNpb24gPSB3aWR0
aFRvRGlzdHJpYnV0ZS50b0Zsb2F0KCkgLyBleHBhbnNpb25PcHBvcnR1bml0aWVzOwotICAgIExh
eW91dFVuaXQgYWNjdW11bGF0ZWRFeHBhbnNpb247Ci0gICAgZm9yIChhdXRvJiBpbmxpbmVSdW4g
OiBpbmxpbmVSdW5zKSB7Ci0gICAgICAgIExheW91dFVuaXQgZXhwYW5zaW9uRm9yUnVuIHsgaW5s
aW5lUnVuLmV4cGFuc2lvbk9wcG9ydHVuaXR5KCkuY291bnQgKiBleHBhbnNpb24gfTsKLQotICAg
ICAgICBpbmxpbmVSdW4uZXhwYW5zaW9uT3Bwb3J0dW5pdHkoKS5leHBhbnNpb24gPSBleHBhbnNp
b25Gb3JSdW47Ci0gICAgICAgIGlubGluZVJ1bi5zZXRMb2dpY2FsTGVmdChpbmxpbmVSdW4ubG9n
aWNhbExlZnQoKSArIGFjY3VtdWxhdGVkRXhwYW5zaW9uKTsKLSAgICAgICAgaW5saW5lUnVuLnNl
dExvZ2ljYWxXaWR0aChpbmxpbmVSdW4ubG9naWNhbFdpZHRoKCkgKyBleHBhbnNpb25Gb3JSdW4p
OwotICAgICAgICBhY2N1bXVsYXRlZEV4cGFuc2lvbiArPSBleHBhbnNpb25Gb3JSdW47Ci0gICAg
fQotfQotCi12b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0Ojpjb21wdXRl
RXhwYW5zaW9uT3Bwb3J0dW5pdGllcyhMaW5lJiBsaW5lLCBjb25zdCBJbmxpbmVSdW5Qcm92aWRl
cjo6UnVuJiBydW4sIElubGluZVJ1blByb3ZpZGVyOjpSdW46OlR5cGUgbGFzdFJ1blR5cGUpIGNv
bnN0Ci17Ci0gICAgYXV0byBpc0V4cGFuc2lvbk9wcG9ydHVuaXR5ID0gW10oYXV0byBjdXJyZW50
UnVuSXNXaGl0ZXNwYWNlLCBhdXRvIGxhc3RSdW5Jc1doaXRlc3BhY2UpIHsKLSAgICAgICAgcmV0
dXJuIGN1cnJlbnRSdW5Jc1doaXRlc3BhY2UgfHwgKCFjdXJyZW50UnVuSXNXaGl0ZXNwYWNlICYm
ICFsYXN0UnVuSXNXaGl0ZXNwYWNlKTsKLSAgICB9OwotCi0gICAgYXV0byBleHBhbnNpb25CZWhh
dmlvciA9IFtdKGF1dG8gaXNBdEV4cGFuc2lvbk9wcG9ydHVuaXR5KSB7Ci0gICAgICAgIEV4cGFu
c2lvbkJlaGF2aW9yIGV4cGFuc2lvbkJlaGF2aW9yID0gQWxsb3dUcmFpbGluZ0V4cGFuc2lvbjsK
LSAgICAgICAgZXhwYW5zaW9uQmVoYXZpb3IgfD0gaXNBdEV4cGFuc2lvbk9wcG9ydHVuaXR5ID8g
Rm9yYmlkTGVhZGluZ0V4cGFuc2lvbiA6IEFsbG93TGVhZGluZ0V4cGFuc2lvbjsKLSAgICAgICAg
cmV0dXJuIGV4cGFuc2lvbkJlaGF2aW9yOwotICAgIH07Ci0KLSAgICBhdXRvIGlzQXRFeHBhbnNp
b25PcHBvcnR1bml0eSA9IGlzRXhwYW5zaW9uT3Bwb3J0dW5pdHkocnVuLmlzV2hpdGVzcGFjZSgp
LCBsYXN0UnVuVHlwZSA9PSBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpUeXBlOjpXaGl0ZXNwYWNl
KTsKLQotICAgIGF1dG8mIGN1cnJlbnRJbmxpbmVSdW4gPSBsaW5lLnJ1bnMoKS5sYXN0KCk7Ci0g
ICAgYXV0byYgZXhwYW5zaW9uT3Bwb3J0dW5pdHkgPSBjdXJyZW50SW5saW5lUnVuLmV4cGFuc2lv
bk9wcG9ydHVuaXR5KCk7Ci0gICAgaWYgKGlzQXRFeHBhbnNpb25PcHBvcnR1bml0eSkKLSAgICAg
ICAgKytleHBhbnNpb25PcHBvcnR1bml0eS5jb3VudDsKLQotICAgIGV4cGFuc2lvbk9wcG9ydHVu
aXR5LmJlaGF2aW9yID0gZXhwYW5zaW9uQmVoYXZpb3IoaXNBdEV4cGFuc2lvbk9wcG9ydHVuaXR5
KTsKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpM
aW5lTGF5b3V0OjphbGlnblJ1bnMoVGV4dEFsaWduTW9kZSB0ZXh0QWxpZ24sIExpbmUmIGxpbmUs
ICBJc0xhc3RMaW5lIGlzTGFzdExpbmUpIGNvbnN0Cit2b2lkIElubGluZUZvcm1hdHRpbmdDb250
ZXh0OjpMaW5lTGF5b3V0OjphbGlnblJ1bnMoVGV4dEFsaWduTW9kZSB0ZXh0QWxpZ24sIHVuc2ln
bmVkIGZpcnN0UnVuSW5kZXgsIExheW91dFVuaXQgYXZhaWxhYmxlV2lkdGgpIGNvbnN0CiB7Ci0g
ICAgYXV0byBhZGp1dGVkVGV4dEFsaWdubWVudCA9IHRleHRBbGlnbiAhPSBUZXh0QWxpZ25Nb2Rl
OjpKdXN0aWZ5ID8gdGV4dEFsaWduIDogaXNMYXN0TGluZSA9PSBJc0xhc3RMaW5lOjpObyA/IFRl
eHRBbGlnbk1vZGU6Okp1c3RpZnkgOiBUZXh0QWxpZ25Nb2RlOjpMZWZ0OwotICAgIGlmIChhZGp1
dGVkVGV4dEFsaWdubWVudCA9PSBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5KSB7Ci0gICAgICAgIGp1
c3RpZnlSdW5zKGxpbmUpOworICAgIGF1dG8gYWRqdXN0bWVudCA9IGhvcml6b250YWxBZGp1c3Rt
ZW50Rm9yQWxpZ25tZW50KHRleHRBbGlnbiwgYXZhaWxhYmxlV2lkdGgpOworICAgIGlmICghYWRq
dXN0bWVudCkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIGF1dG8gbGluZUxvZ2ljYWxM
ZWZ0ID0gbGluZS5jb250ZW50TG9naWNhbExlZnQoKTsKLSAgICBhdXRvIGFkanVzdGVkTG9naWNh
bExlZnQgPSBhZGp1c3RlZExpbmVMb2dpY2FsTGVmdChhZGp1dGVkVGV4dEFsaWdubWVudCwgbGlu
ZUxvZ2ljYWxMZWZ0LCBsaW5lLmF2YWlsYWJsZVdpZHRoKCkpOwotICAgIGlmIChhZGp1c3RlZExv
Z2ljYWxMZWZ0ID09IGxpbmVMb2dpY2FsTGVmdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0
byBkZWx0YSA9IGFkanVzdGVkTG9naWNhbExlZnQgLSBsaW5lTG9naWNhbExlZnQ7Ci0gICAgZm9y
IChhdXRvJiBpbmxpbmVSdW4gOiBsaW5lLnJ1bnMoKSkKLSAgICAgICAgaW5saW5lUnVuLnNldExv
Z2ljYWxMZWZ0KGlubGluZVJ1bi5sb2dpY2FsTGVmdCgpICsgZGVsdGEpOwotfQotCi1MYXlvdXRV
bml0IElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpydW5XaWR0aChjb25zdCBJ
bmxpbmVDb250ZW50JiBpbmxpbmVDb250ZW50LCBjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVt
LCBJdGVtUG9zaXRpb24gZnJvbSwgdW5zaWduZWQgbGVuZ3RoLCBMYXlvdXRVbml0IGNvbnRlbnRM
b2dpY2FsTGVmdCkgY29uc3QgCi17Ci0gICAgTGF5b3V0VW5pdCB3aWR0aDsKLSAgICBhdXRvIHN0
YXJ0UG9zaXRpb24gPSBmcm9tOwotICAgIGF1dG8gaXRlcmF0b3IgPSBpbmxpbmVDb250ZW50LmZp
bmQoY29uc3RfY2FzdDxJbmxpbmVJdGVtKj4oJmlubGluZUl0ZW0pKTsKLSNpZiAhQVNTRVJUX0RJ
U0FCTEVECi0gICAgYXV0byBpbmxpbmVJdGVtRW5kID0gaW5saW5lQ29udGVudC5lbmQoKTsKLSNl
bmRpZgotICAgIHdoaWxlIChsZW5ndGgpIHsKLSAgICAgICAgQVNTRVJUKGl0ZXJhdG9yICE9IGlu
bGluZUl0ZW1FbmQpOwotICAgICAgICBhdXRvJiBjdXJyZW50SW5saW5lSXRlbSA9ICoqaXRlcmF0
b3I7Ci0gICAgICAgIGF1dG8gZW5kUG9zaXRpb24gPSBzdGQ6Om1pbjxJdGVtUG9zaXRpb24+KHN0
YXJ0UG9zaXRpb24gKyBsZW5ndGgsIGN1cnJlbnRJbmxpbmVJdGVtLnRleHRDb250ZW50KCkubGVu
Z3RoKCkpOwotICAgICAgICBhdXRvIHRleHRXaWR0aCA9IFRleHRVdGlsOjp3aWR0aChjdXJyZW50
SW5saW5lSXRlbSwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24sIGNvbnRlbnRMb2dpY2FsTGVm
dCk7Ci0KLSAgICAgICAgY29udGVudExvZ2ljYWxMZWZ0ICs9IHRleHRXaWR0aDsKLSAgICAgICAg
d2lkdGggKz0gdGV4dFdpZHRoOwotICAgICAgICBsZW5ndGggLT0gKGVuZFBvc2l0aW9uIC0gc3Rh
cnRQb3NpdGlvbik7Ci0KLSAgICAgICAgc3RhcnRQb3NpdGlvbiA9IDA7Ci0gICAgICAgICsraXRl
cmF0b3I7Ci0gICAgfQotICAgIHJldHVybiB3aWR0aDsKKyAgICBhdXRvJiBpbmxpbmVEaXNwbGF5
UnVucyA9IG1fZm9ybWF0dGluZ1N0YXRlLmlubGluZVJ1bnMoKTsgCisgICAgZm9yICh1bnNpZ25l
ZCBpbmRleCA9IGZpcnN0UnVuSW5kZXg7IGZpcnN0UnVuSW5kZXggPCBpbmxpbmVEaXNwbGF5UnVu
cy5zaXplKCk7ICsrZmlyc3RSdW5JbmRleCkKKyAgICAgICAgaW5saW5lRGlzcGxheVJ1bnNbaW5k
ZXhdLT5tb3ZlSG9yaXpvbnRhbGx5KCphZGp1c3RtZW50KTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ1N0
YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3Jt
YXR0aW5nU3RhdGUuaAppbmRleCA2NjJhODNjM2ViYzUxYmE3YjBlM2M0ZWFjY2Y1MTg0NGU5ZWQ2
NTljLi5kNzRkY2U1MzgyYzI3ZGNlOTYxYWE2NjQzOTc5MzIwNzE5MWI1ZmFjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5n
U3RhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9Jbmxp
bmVGb3JtYXR0aW5nU3RhdGUuaApAQCAtMjcsMTUgKzI3LDIwIEBACiAKICNpZiBFTkFCTEUoTEFZ
T1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKIAorI2luY2x1ZGUgIkRpc3BsYXlSdW4uaCIKICNpbmNs
dWRlICJGb3JtYXR0aW5nU3RhdGUuaCIKICNpbmNsdWRlICJJbmxpbmVJdGVtLmgiCi0jaW5jbHVk
ZSAiSW5saW5lUnVuLmgiCisjaW5jbHVkZSAiSW5saW5lTGluZUJveC5oIgogI2luY2x1ZGUgPHd0
Zi9Jc29NYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIG5hbWVzcGFjZSBMYXlvdXQgewogCisvLyBUZW1wCit1c2luZyBJbmxpbmVJdGVt
cyA9IExpc3RIYXNoU2V0PHN0ZDo6dW5pcXVlX3B0cjxJbmxpbmVJdGVtPj47Cit1c2luZyBJbmxp
bmVSdW5zID0gVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxEaXNwbGF5OjpSdW4+PjsKK3VzaW5nIExp
bmVCb3hlcyA9IFZlY3RvcjxMaW5lQm94PjsKIC8vIElubGluZUZvcm1hdHRpbmdTdGF0ZSBob2xk
cyB0aGUgc3RhdGUgZm9yIGEgcGFydGljdWxhciBpbmxpbmUgZm9ybWF0dGluZyBjb250ZXh0IHRy
ZWUuCiBjbGFzcyBJbmxpbmVGb3JtYXR0aW5nU3RhdGUgOiBwdWJsaWMgRm9ybWF0dGluZ1N0YXRl
IHsKICAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKElubGluZUZvcm1hdHRpbmdTdGF0ZSk7CkBA
IC00MywxNiArNDgsMjAgQEAgcHVibGljOgogICAgIElubGluZUZvcm1hdHRpbmdTdGF0ZShSZWY8
RmxvYXRpbmdTdGF0ZT4mJiwgTGF5b3V0U3RhdGUmKTsKICAgICB2aXJ0dWFsIH5JbmxpbmVGb3Jt
YXR0aW5nU3RhdGUoKTsKIAotICAgIElubGluZUNvbnRlbnQmIGlubGluZUNvbnRlbnQoKSB7IHJl
dHVybiBtX2lubGluZUNvbnRlbnQ7IH0KLSAgICBJbmxpbmVJdGVtKiBsYXN0SW5saW5lSXRlbSgp
IGNvbnN0IHsgcmV0dXJuIG1faW5saW5lQ29udGVudC5pc0VtcHR5KCkgPyBudWxscHRyIDogbV9p
bmxpbmVDb250ZW50Lmxhc3QoKS5nZXQoKTsgfQorICAgIHZvaWQgYWRkSW5saW5lVGV4dEl0ZW0o
KTsKIAotICAgIC8vIFRlbXAKKyAgICBJbmxpbmVJdGVtcyYgaW5saW5lSXRlbXMoKSB7IHJldHVy
biBtX2lubGluZUl0ZW1zOyB9CiAgICAgSW5saW5lUnVucyYgaW5saW5lUnVucygpIHsgcmV0dXJu
IG1faW5saW5lUnVuczsgfQotICAgIHZvaWQgYXBwZW5kSW5saW5lUnVuKElubGluZVJ1biBpbmxp
bmVSdW4pIHsgbV9pbmxpbmVSdW5zLmFwcGVuZChpbmxpbmVSdW4pOyB9CisgICAgTGluZUJveGVz
JiBsaW5lQm94ZXMoKSB7IHJldHVybiBtX2xpbmVCb3hlczsgfQorCisgICAgdm9pZCBhZGRJbmxp
bmVJdGVtKHN0ZDo6dW5pcXVlX3B0cjxJbmxpbmVJdGVtPiYmIGlubGluZUl0ZW0pIHsgbV9pbmxp
bmVJdGVtcy5hZGQoV1RGTW92ZShpbmxpbmVJdGVtKSk7IH0KKyAgICB2b2lkIGFkZElubGluZVJ1
bihzdGQ6OnVuaXF1ZV9wdHI8RGlzcGxheTo6UnVuPiYmIGlubGluZVJ1bikgeyBtX2lubGluZVJ1
bnMuYXBwZW5kKFdURk1vdmUoaW5saW5lUnVuKSk7IH0KKyAgICB2b2lkIGFkZExpbmVCb3goTGlu
ZUJveCBsaW5lQm94KSB7IG1fbGluZUJveGVzLmFwcGVuZChsaW5lQm94KTsgfQogCiBwcml2YXRl
OgotICAgIElubGluZUNvbnRlbnQgbV9pbmxpbmVDb250ZW50OworICAgIElubGluZUl0ZW1zIG1f
aW5saW5lSXRlbXM7CiAgICAgSW5saW5lUnVucyBtX2lubGluZVJ1bnM7CisgICAgTGluZUJveGVz
IG1fbGluZUJveGVzOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2lubGluZWZvcm1hdHRpbmcvSW5saW5lSXRlbS5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lu
bGluZWZvcm1hdHRpbmcvSW5saW5lSXRlbS5oCmluZGV4IDVhMTBmYzFkMWZmY2E2MzQ0ZTA0MDBl
NTlkNmE1MDA3YTE1YmI4NGUuLjg3ZWQ5YzM2ZjZjOTIzYWU4ZTRmODk5NzQ5NmViY2FjNWFjZmU5
YzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lu
bGluZUl0ZW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9J
bmxpbmVJdGVtLmgKQEAgLTM2LDgzICszNiw1NyBAQCBuYW1lc3BhY2UgTGF5b3V0IHsKIAogY2xh
c3MgSW5saW5lSXRlbSB7CiBwdWJsaWM6Ci0gICAgSW5saW5lSXRlbShjb25zdCBCb3gmIGxheW91
dEJveCk7CisgICAgZW51bSBjbGFzcyBUeXBlIHsgVGV4dCwgSGFyZExpbmVCcmVhaywgQm94LCBG
bG9hdCwgQ29udGFpbmVyU3RhcnQsIENvbnRhaW5lckVuZCB9OworICAgIElubGluZUl0ZW0oY29u
c3QgQm94JiBsYXlvdXRCb3gsIFR5cGUpOwogCi0gICAgZW51bSBjbGFzcyBUeXBlIHsgVGV4dCwg
SGFyZExpbmVCcmVhaywgSW5saW5lQm94LCBGbG9hdCB9OwotICAgIFR5cGUgdHlwZSgpIGNvbnN0
OworICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQogICAgIGNvbnN0IEJv
eCYgbGF5b3V0Qm94KCkgY29uc3QgeyByZXR1cm4gbV9sYXlvdXRCb3g7IH0KICAgICBjb25zdCBS
ZW5kZXJTdHlsZSYgc3R5bGUoKSBjb25zdCB7IHJldHVybiBtX2xheW91dEJveC5zdHlsZSgpOyB9
Ci0gICAgU3RyaW5nIHRleHRDb250ZW50KCkgY29uc3Q7Ci0gICAgLy8gRGV0YWNoaW5nUnVsZSBp
bmRpY2F0ZXMgd2hldGhlciB0aGUgaW5saW5lIGVsZW1lbnQgbmVlZHMgdG8gYmUgd3JhcHBlZCBp
biBhIGRlZGljZXRlZCBydW4gb3IgYnJlYWsgZnJvbSBwcmV2aW91cy9uZXh0IHJ1bnMuCi0gICAg
Ly8gPHNwYW4+c3RhcnQ8L3NwYW4+PHNwYW4gc3R5bGU9InBvc2l0aW9uOiByZWxhdGl2ZTsiPiBt
aWRkbGUgPC9zcGFuPjxzcGFuPmVuZDwvc3Bhbj4KLSAgICAvLyBpbnB1dCB0byBsaW5lIGJyZWFr
aW5nIC0+IDxzdGFydCBtaWRkbGUgZW5kPgotICAgIC8vIG91dHB1dCBvZiBsaW5lIGJyZWFraW5n
IChjb25zaWRlcmluZyBpbmZpbml0ZSBjb25zdHJhaW50KSAtPiA8c3RhcnQgbWlkZGxlIGVuZD4K
LSAgICAvLyBkdWUgdG8gdGhlIGluLWZsb3cgcG9zaXRpb25pbmcsIHRoZSBmaW5hbCBydW5zIGFy
ZTogPHN0YXJ0PjwgbWlkZGxlID48ZW5kPgotICAgIC8vICJzdGFydCIgLT4gbi9hCi0gICAgLy8g
IiBtaWRkbGUgIiAtPiBCcmVha0F0U3RhcnQgYW5kIEJyZWFrQXRFbmQKLSAgICAvLyAiZW5kIiAt
PiBuL2EKLSAgICAvLwotICAgIC8vIDxzcGFuPnBhcmVudCA8L3NwYW4+PHNwYW4gc3R5bGU9InBh
ZGRpbmc6IDEwcHg7Ij5zdGFydDxzcGFuPiBtaWRkbGUgPC9zcGFuPmVuZDwvc3Bhbj48c3Bhbj4g
cGFyZW50PC9zcGFuPgotICAgIC8vIGlucHV0IHRvIGxpbmUgYnJlYWtpbmcgLT4gPHBhcmVudCBz
dGFydCBtaWRkbGUgZW5kIHBhcmVudD4KLSAgICAvLyBvdXRwdXQgb2YgbGluZSBicmVha2luZyAo
Y29uc2lkZXJpbmcgaW5maW5pdGUgY29uc3RyYWludCkgLT4gPHBhcmVudCBzdGFydCBtaWRkbGUg
ZW5kIHBhcmVudD4KLSAgICAvLyBkdWUgdG8gcGFkZGluZywgZmluYWwgcnVucyAtPiA8cGFyZW50
PjxzdGFydCBtaWRkbGUgZW5kPjxwYXJlbnQ+Ci0gICAgLy8gInBhcmVudCIgLT4gbi9hCi0gICAg
Ly8gInN0YXJ0IiAtPiBCcmVha0F0U3RhcnQKLSAgICAvLyAiIG1pZGRsZSAiIC0+IG4vYQotICAg
IC8vICJlbmQiIC0+IEJyZWFrQXRFbmQKLSAgICAvLyAicGFyZW50IiAtPiBuL2EKLSAgICBlbnVt
IGNsYXNzIERldGFjaGluZ1J1bGUgewotICAgICAgICBCcmVha0F0U3RhcnQgPSAxIDw8IDAsCi0g
ICAgICAgIEJyZWFrQXRFbmQgPSAxIDw8IDEKLSAgICB9OwotICAgIHZvaWQgYWRkRGV0YWNoaW5n
UnVsZShPcHRpb25TZXQ8RGV0YWNoaW5nUnVsZT4gZGV0YWNoaW5nUnVsZSkgeyBtX2RldGFjaGlu
Z1J1bGVzLmFkZChkZXRhY2hpbmdSdWxlKTsgfQotICAgIE9wdGlvblNldDxEZXRhY2hpbmdSdWxl
PiBkZXRhY2hpbmdSdWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fZGV0YWNoaW5nUnVsZXM7IH0KKyAg
ICB2b2lkIHNldFdpZHRoKExheW91dFVuaXQpOworICAgIExheW91dFVuaXQgd2lkdGgoKSBjb25z
dDsKIAotICAgIC8vIE5vbi1icmVha2FibGUgc3RhcnQvZW5kIG1hcmtzIG1hcmdpbi9wYWRkaW5n
L2JvcmRlciBzcGFjZSAoZXZlbiB3aGVuIGl0IGRvZXMgbm90IGRpcmVjdGx5IGNvbWUgZnJvbSB0
aGUgYXNzb2NpYXRlZCBsYXlvdXQgYm94KQotICAgIC8vIDxzcGFuIHN0eWxlPSJwYWRkaW5nOiA1
cHgiPjxzcGFuPm5lc3RlZCBjb250ZW50IHdpdGggcGFkZGluZyBwYXJlbnQ8L3NwYW48L3NwYW4+
Ci0gICAgLy8gPG5lc3RlZCBjb250ZW50IHdpdGggcGFkZGluZyBwYXJlbnQ+IGlubGluZSBydW4g
aGFzIDVweCBub24tYnJlYWthYmxlIHN0YXJ0L2VuZC4KLSAgICBMYXlvdXRVbml0IG5vbkJyZWFr
YWJsZVN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9ub25CcmVha2FibGVTdGFydDsgfQotICAgIExh
eW91dFVuaXQgbm9uQnJlYWthYmxlRW5kKCkgY29uc3QgeyByZXR1cm4gbV9ub25CcmVha2FibGVF
bmQ7IH0KLSAgICB2b2lkIGFkZE5vbkJyZWFrYWJsZVN0YXJ0KExheW91dFVuaXQgdmFsdWUpIHsg
bV9ub25CcmVha2FibGVTdGFydCArPSB2YWx1ZTsgfQotICAgIHZvaWQgYWRkTm9uQnJlYWthYmxl
RW5kKExheW91dFVuaXQgdmFsdWUpIHsgbV9ub25CcmVha2FibGVFbmQgKz0gdmFsdWU7IH0KKyAg
ICBib29sIGlzVGV4dCgpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBUeXBlOjpUZXh0OyB9Cisg
ICAgYm9vbCBpc0JveCgpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBUeXBlOjpCb3g7IH0KKyAg
ICBib29sIGlzSGFyZExpbmVCcmVhaygpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBUeXBlOjpI
YXJkTGluZUJyZWFrOyB9CisgICAgYm9vbCBpc0Zsb2F0KCkgY29uc3QgeyByZXR1cm4gdHlwZSgp
ID09IFR5cGU6OkZsb2F0OyB9CisgICAgYm9vbCBpc0xpbmVCcmVhaygpIGNvbnN0IHsgcmV0dXJu
IHR5cGUoKSA9PSBUeXBlOjpIYXJkTGluZUJyZWFrOyB9CisgICAgYm9vbCBpc0NvbnRhaW5lclN0
YXJ0KCkgY29uc3QgeyByZXR1cm4gdHlwZSgpID09IFR5cGU6OkNvbnRhaW5lclN0YXJ0OyB9Cisg
ICAgYm9vbCBpc0NvbnRhaW5lckVuZCgpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBUeXBlOjpD
b250YWluZXJFbmQ7IH0KIAogcHJpdmF0ZToKICAgICBjb25zdCBCb3gmIG1fbGF5b3V0Qm94Owot
ICAgIE9wdGlvblNldDxEZXRhY2hpbmdSdWxlPiBtX2RldGFjaGluZ1J1bGVzOwotICAgIExheW91
dFVuaXQgbV9ub25CcmVha2FibGVTdGFydDsKLSAgICBMYXlvdXRVbml0IG1fbm9uQnJlYWthYmxl
RW5kOworICAgIGNvbnN0IFR5cGUgbV90eXBlOworICAgIExheW91dFVuaXQgbV93aWR0aDsKKyNp
ZiAhQVNTRVJUX0RJU0FCTEVECisgICAgYm9vbCBtX2hhc1ZhbGlkV2lkdGggeyBmYWxzZSB9Owor
I2VuZGlmCiB9OwogCi11c2luZyBJbmxpbmVDb250ZW50ID0gTGlzdEhhc2hTZXQ8c3RkOjp1bmlx
dWVfcHRyPElubGluZUl0ZW0+PjsKLQotaW5saW5lIElubGluZUl0ZW06OklubGluZUl0ZW0oY29u
c3QgQm94JiBsYXlvdXRCb3gpCitpbmxpbmUgSW5saW5lSXRlbTo6SW5saW5lSXRlbShjb25zdCBC
b3gmIGxheW91dEJveCwgVHlwZSB0eXBlKQogICAgIDogbV9sYXlvdXRCb3gobGF5b3V0Qm94KQor
ICAgICwgbV90eXBlKHR5cGUpCiB7CiB9CiAKLWlubGluZSBJbmxpbmVJdGVtOjpUeXBlIElubGlu
ZUl0ZW06OnR5cGUoKSBjb25zdAoraW5saW5lIHZvaWQgSW5saW5lSXRlbTo6c2V0V2lkdGgoTGF5
b3V0VW5pdCB3aWR0aCkKIHsKLSAgICBpZiAoaXM8SW5saW5lQm94PihtX2xheW91dEJveCkgJiYg
ZG93bmNhc3Q8SW5saW5lQm94PihtX2xheW91dEJveCkuaGFzVGV4dENvbnRlbnQoKSkKLSAgICAg
ICAgcmV0dXJuIFR5cGU6OlRleHQ7Ci0KLSAgICBpZiAoaXM8TGluZUJyZWFrQm94PihtX2xheW91
dEJveCkpCi0gICAgICAgIHJldHVybiBUeXBlOjpIYXJkTGluZUJyZWFrOwotCi0gICAgaWYgKG1f
bGF5b3V0Qm94LmlzRmxvYXRpbmdQb3NpdGlvbmVkKCkpCi0gICAgICAgIHJldHVybiBUeXBlOjpG
bG9hdDsKLQotICAgIEFTU0VSVChtX2xheW91dEJveC5pc0lubGluZUxldmVsQm94KCkpOwotICAg
IHJldHVybiBUeXBlOjpJbmxpbmVCb3g7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIG1faGFz
VmFsaWRXaWR0aCA9IHRydWU7CisjZW5kaWYKKyAgICBtX3dpZHRoID0gd2lkdGg7CiB9CiAKLWlu
bGluZSBTdHJpbmcgSW5saW5lSXRlbTo6dGV4dENvbnRlbnQoKSBjb25zdAoraW5saW5lIExheW91
dFVuaXQgSW5saW5lSXRlbTo6d2lkdGgoKSBjb25zdAogewotICAgIGlmICh0eXBlKCkgIT0gVHlw
ZTo6VGV4dCkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIHJldHVybiBkb3duY2FzdDxJbmxp
bmVCb3g+KG1fbGF5b3V0Qm94KS50ZXh0Q29udGVudCgpOworICAgIEFTU0VSVChtX2hhc1ZhbGlk
V2lkdGgpOworICAgIHJldHVybiBtX3dpZHRoOwogfQogCisjZGVmaW5lIFNQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfSU5MSU5FX0lURU0oVG9WYWx1ZVR5cGVOYW1lLCBwcmVkaWNhdGUpIFwKK1NQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6TGF5b3V0OjpUb1ZhbHVlVHlwZU5hbWUp
IFwKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVJ
dGVtJiBpbmxpbmVJdGVtKSB7IHJldHVybiBpbmxpbmVJdGVtLnByZWRpY2F0ZTsgfSBcCitTUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKIH0KIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJveC5oIGIvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJveC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjQ2NDQyMjliYTU4NGY3YWI2ZTdlYmFmZGRjYTIxZTI2ZGZjM2NlNTkKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVM
aW5lQm94LmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRlICJEaXNwbGF5
Qm94LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBMYXlvdXQgeworCitjbGFz
cyBMaW5lQm94IHsKK3B1YmxpYzoKKyAgICBMaW5lQm94KERpc3BsYXk6OlJlY3QpOworICAgIAor
ICAgIExheW91dFBvaW50IGxvZ2ljYWxUb3BMZWZ0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0LnRv
cExlZnQoKTsgfQorCisgICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdCgpIGNvbnN0IHsgcmV0dXJu
IG1fcmVjdC5sZWZ0KCk7IH0KKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVjdC5yaWdodCgpOyB9CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9wKCkgY29u
c3QgeyByZXR1cm4gbV9yZWN0LnRvcCgpOyB9CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsQm90dG9t
KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0LmJvdHRvbSgpOyB9CisKKyAgICBMYXlvdXRVbml0IGxv
Z2ljYWxXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdC53aWR0aCgpOyB9CisgICAgTGF5b3V0
VW5pdCBsb2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0LmhlaWdodCgpOyB9CisK
K3ByaXZhdGU6CisgICAgRGlzcGxheTo6UmVjdCBtX3JlY3Q7Cit9OworCitpbmxpbmUgTGluZUJv
eDo6TGluZUJveChEaXNwbGF5OjpSZWN0IHJlY3QpCisgICAgOiBtX3JlY3QocmVjdCkKKyAgICB7
CisgICAgfQorCit9Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJyZWFrZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJyZWFrZXIuY3BwCmluZGV4IDU3
NmEwYmI3OTU0MzdlMDEzNzQyYTcyODY5NDNhZjI0ODEwMDRmZWMuLjk3MjYyNzViNTA2YjczMzRm
YzY2ZDM1OTQzMzE1MGJmMTc2MzFlZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCcmVha2VyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnJlYWtlci5jcHAKQEAgLTI4
LDE3MyArMjgsMTAyIEBACiAKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkK
IAotI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiSHlwaGVuYXRpb24uaCIKLSNp
bmNsdWRlICJJbmxpbmVSdW5Qcm92aWRlci5oIgotI2luY2x1ZGUgIlRleHRVdGlsLmgiCi0jaW5j
bHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKyNpbmNsdWRlICJMYXlvdXRTdGF0ZS5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgTGF5b3V0IHsKIAotV1RGX01BS0VfSVNP
X0FMTE9DQVRFRF9JTVBMKElubGluZUxpbmVCcmVha2VyKTsKLQotSW5saW5lTGluZUJyZWFrZXI6
OklubGluZUxpbmVCcmVha2VyKGNvbnN0IExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgY29uc3Qg
SW5saW5lQ29udGVudCYgaW5saW5lQ29udGVudCwgY29uc3QgVmVjdG9yPElubGluZVJ1blByb3Zp
ZGVyOjpSdW4+JiBpbmxpbmVSdW5zKQorTGluZUJyZWFrZXI6OkxpbmVCcmVha2VyKGNvbnN0IExh
eW91dFN0YXRlJiBsYXlvdXRTdGF0ZSkKICAgICA6IG1fbGF5b3V0U3RhdGUobGF5b3V0U3RhdGUp
Ci0gICAgLCBtX2lubGluZUNvbnRlbnQoaW5saW5lQ29udGVudCkKLSAgICAsIG1faW5saW5lUnVu
cyhpbmxpbmVSdW5zKQogewogfQogCi1PcHRpb25hbDxJbmxpbmVMaW5lQnJlYWtlcjo6UnVuPiBJ
bmxpbmVMaW5lQnJlYWtlcjo6bmV4dFJ1bihMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsTGVmdCwg
TGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCwgYm9vbCBsaW5lSXNFbXB0eSkKK0xpbmVCcmVha2Vy
OjpCcmVha2luZ0NvbnRleHQgTGluZUJyZWFrZXI6OmJyZWFraW5nQ29udGV4dChJbmxpbmVJdGVt
JiBpbmxpbmVJdGVtLCBMaW5lQ29udGV4dCBsaW5lQ29udGV4dCkKIHsKLSAgICBpZiAoaXNBdENv
bnRlbnRFbmQoKSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIElubGluZVJ1
blByb3ZpZGVyOjpSdW4gY3VycmVudElubGluZVJ1biA9IG1faW5saW5lUnVuc1ttX2N1cnJlbnRS
dW5JbmRleF07Ci0gICAgLy8gQWRqdXN0IHRoZSBjdXJyZW50IHJ1biBpZiBpdCBpcyBzcGxpdCBt
aWR3b3JkLgotICAgIGlmIChtX3NwbGl0UG9zaXRpb24pIHsKLSAgICAgICAgQVNTRVJUKGN1cnJl
bnRJbmxpbmVSdW4uaXNUZXh0KCkpOwotICAgICAgICBtX3NwbGl0UG9zaXRpb24gPSBXVEY6Om51
bGxvcHQ7Ci0gICAgfQotCi0gICAgaWYgKGN1cnJlbnRJbmxpbmVSdW4uaXNMaW5lQnJlYWsoKSkg
ewotICAgICAgICArK21fY3VycmVudFJ1bkluZGV4OwotICAgICAgICByZXR1cm4gUnVuIHsgUnVu
OjpQb3NpdGlvbjo6TGluZUVuZCwgMCwgY3VycmVudElubGluZVJ1biB9OwotICAgIH0KLQotICAg
IGF1dG8gY29udGVudFdpZHRoID0gcnVuV2lkdGgoY3VycmVudElubGluZVJ1biwgY29udGVudExv
Z2ljYWxMZWZ0KTsKLSAgICAvLyAxLiBQbGVudHkgb2Ygc3BhY2UgbGVmdC4KLSAgICBpZiAoY29u
dGVudFdpZHRoIDw9IGF2YWlsYWJsZVdpZHRoKSB7Ci0gICAgICAgICsrbV9jdXJyZW50UnVuSW5k
ZXg7Ci0gICAgICAgIHJldHVybiBSdW4geyBsaW5lSXNFbXB0eSA/IFJ1bjo6UG9zaXRpb246Okxp
bmVCZWdpbiA6IFJ1bjo6UG9zaXRpb246OlVuZGV0ZXJtaW5lZCwgY29udGVudFdpZHRoLCBjdXJy
ZW50SW5saW5lUnVuIH07Ci0gICAgfQotCi0gICAgLy8gMi4gTm8gc3BhY2UgbGVmdCB3aGF0c29l
dmVyLgotICAgIGlmIChhdmFpbGFibGVXaWR0aCA8PSAwKSB7Ci0gICAgICAgICsrbV9jdXJyZW50
UnVuSW5kZXg7Ci0gICAgICAgIHJldHVybiBSdW4geyBSdW46OlBvc2l0aW9uOjpMaW5lQmVnaW4s
IGNvbnRlbnRXaWR0aCwgY3VycmVudElubGluZVJ1biB9OwotICAgIH0KLQotICAgIC8vIDMuIFNv
bWUgc3BhY2UgbGVmdC4gTGV0J3MgZmluZCBvdXQgd2hhdCB3ZSBuZWVkIHRvIGRvIHdpdGggdGhp
cyBydW4uCi0gICAgYXV0byBicmVha2luZ0JlaGF2aW9yID0gbGluZUJyZWFraW5nQmVoYXZpb3Io
Y3VycmVudElubGluZVJ1biwgbGluZUlzRW1wdHkpOwotICAgIGlmIChicmVha2luZ0JlaGF2aW9y
ID09IExpbmVCcmVha2luZ0JlaGF2aW9yOjpLZWVwKSB7Ci0gICAgICAgICsrbV9jdXJyZW50UnVu
SW5kZXg7Ci0gICAgICAgIHJldHVybiBSdW4geyBsaW5lSXNFbXB0eSA/IFJ1bjo6UG9zaXRpb246
OkxpbmVCZWdpbiA6IFJ1bjo6UG9zaXRpb246OlVuZGV0ZXJtaW5lZCwgY29udGVudFdpZHRoLCBj
dXJyZW50SW5saW5lUnVuIH07Ci0gICAgfQotCi0gICAgaWYgKGJyZWFraW5nQmVoYXZpb3IgPT0g
TGluZUJyZWFraW5nQmVoYXZpb3I6OldyYXBUb05leHRMaW5lKSB7Ci0gICAgICAgICsrbV9jdXJy
ZW50UnVuSW5kZXg7Ci0gICAgICAgIHJldHVybiBSdW4geyBSdW46OlBvc2l0aW9uOjpMaW5lQmVn
aW4sIGNvbnRlbnRXaWR0aCwgY3VycmVudElubGluZVJ1biB9OwotICAgIH0KLQotICAgIEFTU0VS
VChicmVha2luZ0JlaGF2aW9yID09IExpbmVCcmVha2luZ0JlaGF2aW9yOjpCcmVhayk7Ci0gICAg
Ly8gU3BsaXQgY29udGVudC4KLSAgICByZXR1cm4gc3BsaXRSdW4oY3VycmVudElubGluZVJ1biwg
Y29udGVudExvZ2ljYWxMZWZ0LCBhdmFpbGFibGVXaWR0aCwgbGluZUlzRW1wdHkpOworICAgIGlu
bGluZUl0ZW0uc2V0V2lkdGgocnVuV2lkdGgoaW5saW5lSXRlbSwgbGluZUNvbnRleHQubG9naWNh
bExlZnQpKTsKKyAgICAvLyBGaXJzdCBjb250ZW50IGFsd2F5cyBzdGF5cyBvbiBsaW5lLgorICAg
IGlmIChsaW5lQ29udGV4dC5pc0VtcHR5IHx8IGlubGluZUl0ZW0ud2lkdGgoKSA8PSBsaW5lQ29u
dGV4dC5hdmFpbGFibGVXaWR0aCkKKyAgICAgICAgcmV0dXJuIHsgQnJlYWtpbmdCZWhhdmlvcjo6
S2VlcCwgaXNBdEJyZWFraW5nT3Bwb3J0dW5pdHkoaW5saW5lSXRlbSkgfTsKKworICAgIGlmIChp
czxJbmxpbmVUZXh0SXRlbT4oaW5saW5lSXRlbSkpCisgICAgICAgIHJldHVybiB7IHdvcmRCcmVh
a2luZ0JlaGF2aW9yKGRvd25jYXN0PElubGluZVRleHRJdGVtPihpbmxpbmVJdGVtKSwgbGluZUNv
bnRleHQuaXNFbXB0eSksIGlzQXRCcmVha2luZ09wcG9ydHVuaXR5KGlubGluZUl0ZW0pIH07CisK
KyAgICAvLyBXcmFwIG5vbi10ZXh0IGJveGVzIHRvIHRoZSBuZXh0IGxpbmUgdW5sZXNzIHdlIGNh
biB0cmltIHRyYWlsaW5nIHdoaXRlc3BhY2UuCisgICAgYXV0byBhdmFpbGFibGVXaWR0aCA9IGxp
bmVDb250ZXh0LmF2YWlsYWJsZVdpZHRoICsgbGluZUNvbnRleHQudHJpbW1hYmxlV2lkdGg7Cisg
ICAgaWYgKGlubGluZUl0ZW0ud2lkdGgoKSA8PSBhdmFpbGFibGVXaWR0aCkKKyAgICAgICAgcmV0
dXJuIHsgQnJlYWtpbmdCZWhhdmlvcjo6S2VlcCwgaXNBdEJyZWFraW5nT3Bwb3J0dW5pdHkoaW5s
aW5lSXRlbSkgfTsKKyAgICByZXR1cm4geyBCcmVha2luZ0JlaGF2aW9yOjpXcmFwLCBpc0F0QnJl
YWtpbmdPcHBvcnR1bml0eShpbmxpbmVJdGVtKSB9OwogfQogCi1ib29sIElubGluZUxpbmVCcmVh
a2VyOjppc0F0Q29udGVudEVuZCgpIGNvbnN0CitMaW5lQnJlYWtlcjo6QnJlYWtpbmdCZWhhdmlv
ciBMaW5lQnJlYWtlcjo6d29yZEJyZWFraW5nQmVoYXZpb3IoY29uc3QgSW5saW5lVGV4dEl0ZW0m
IGlubGluZUl0ZW0sIGJvb2wgbGluZUlzRW1wdHkpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fY3Vy
cmVudFJ1bkluZGV4ID09IG1faW5saW5lUnVucy5zaXplKCk7Ci19Ci0KLUlubGluZUxpbmVCcmVh
a2VyOjpMaW5lQnJlYWtpbmdCZWhhdmlvciBJbmxpbmVMaW5lQnJlYWtlcjo6bGluZUJyZWFraW5n
QmVoYXZpb3IoY29uc3QgSW5saW5lUnVuUHJvdmlkZXI6OlJ1biYgaW5saW5lUnVuLCBib29sIGxp
bmVJc0VtcHR5KQotewotICAgIC8vIExpbmUgYnJlYWtpbmcgYmVoYXZpb3VyOgorICAgIC8vIFdv
cmQgYnJlYWtpbmcgYmVoYXZpb3VyOgogICAgIC8vIDEuIFdoaXRlc2FwY2UgY29sbGFwc2Ugb24g
LT4gcHVzaCB3aGl0ZXNwYWNlIHRvIG5leHQgbGluZS4KICAgICAvLyAyLiBXaGl0ZXNwYWNlIGNv
bGxhcHNlIG9mZiAtPiB3aGl0ZXNwYWNlIGlzIHNwbGl0IHdoZXJlIHBvc3NpYmxlLgogICAgIC8v
IDMuIE5vbi13aGl0ZXNwYWNlIC0+IGZpcnN0IHJ1biBvbiB0aGUgbGluZSAtPiBlaXRoZXIgc3Bs
aXQgb3Iga2VwdCBvbiB0aGUgbGluZS4gKGRlcGVuZHMgb24gb3ZlcmZsb3ctd3JhcCkKICAgICAv
LyA0LiBOb24td2hpdGVzcGFjZSAtPiBhbHJlYWR5IGNvbnRlbnQgb24gdGhlIGxpbmUgLT4gZWl0
aGVyIGdldHMgc3BsaXQgKHdvcmQtYnJlYWs6IGJyZWFrLWFsbCkgb3IgZ2V0cyBwdXNoZWQgdG8g
dGhlIG5leHQgbGluZS4KICAgICAvLyAoSHlwaGVuYXRlIHdoZW4gcG9zc2libGUpCiAgICAgLy8g
NS4gTm9uLXRleHQgdHlwZSAtPiBuZXh0IGxpbmUKLSAgICBhdXRvJiBzdHlsZSA9IGlubGluZVJ1
bi5zdHlsZSgpOworICAgIGF1dG8mIHN0eWxlID0gaW5saW5lSXRlbS5zdHlsZSgpOwogCi0gICAg
aWYgKGlubGluZVJ1bi5pc1doaXRlc3BhY2UoKSkKLSAgICAgICAgcmV0dXJuIHN0eWxlLmNvbGxh
cHNlV2hpdGVTcGFjZSgpID8gTGluZUJyZWFraW5nQmVoYXZpb3I6OldyYXBUb05leHRMaW5lIDog
TGluZUJyZWFraW5nQmVoYXZpb3I6OkJyZWFrOworICAgIGlmIChpbmxpbmVJdGVtLmlzV2hpdGVz
cGFjZSgpKQorICAgICAgICByZXR1cm4gc3R5bGUuY29sbGFwc2VXaGl0ZVNwYWNlKCkgPyBCcmVh
a2luZ0JlaGF2aW9yOjpXcmFwIDogQnJlYWtpbmdCZWhhdmlvcjo6QnJlYWs7CiAKLSAgICBpZiAo
aW5saW5lUnVuLmlzTm9uV2hpdGVzcGFjZSgpKSB7Ci0gICAgICAgIGF1dG8gc2hvdWxkSHlwZW5h
dGUgPSAhbV9oeXBoZW5hdGlvbklzRGlzYWJsZWQgJiYgc3R5bGUuaHlwaGVucygpID09IEh5cGhl
bnM6OkF1dG8gJiYgY2FuSHlwaGVuYXRlKHN0eWxlLmxvY2FsZSgpKTsKLSAgICAgICAgaWYgKHNo
b3VsZEh5cGVuYXRlKQotICAgICAgICAgICAgcmV0dXJuIExpbmVCcmVha2luZ0JlaGF2aW9yOjpC
cmVhazsKKyAgICBhdXRvIHNob3VsZEh5cGVuYXRlID0gIW1faHlwaGVuYXRpb25Jc0Rpc2FibGVk
ICYmIHN0eWxlLmh5cGhlbnMoKSA9PSBIeXBoZW5zOjpBdXRvICYmIGNhbkh5cGhlbmF0ZShzdHls
ZS5sb2NhbGUoKSk7CisgICAgaWYgKHNob3VsZEh5cGVuYXRlKQorICAgICAgICByZXR1cm4gQnJl
YWtpbmdCZWhhdmlvcjo6QnJlYWs7CiAKLSAgICAgICAgaWYgKHN0eWxlLmF1dG9XcmFwKCkpIHsK
LSAgICAgICAgICAgIC8vIEJyZWFrIGFueSB3b3JkCi0gICAgICAgICAgICBpZiAoc3R5bGUud29y
ZEJyZWFrKCkgPT0gV29yZEJyZWFrOjpCcmVha0FsbCkKLSAgICAgICAgICAgICAgICByZXR1cm4g
TGluZUJyZWFraW5nQmVoYXZpb3I6OkJyZWFrOworICAgIGlmIChzdHlsZS5hdXRvV3JhcCgpKSB7
CisgICAgICAgIC8vIEJyZWFrIGFueSB3b3JkCisgICAgICAgIGlmIChzdHlsZS53b3JkQnJlYWso
KSA9PSBXb3JkQnJlYWs6OkJyZWFrQWxsKQorICAgICAgICAgICAgcmV0dXJuIEJyZWFraW5nQmVo
YXZpb3I6OkJyZWFrOwogCi0gICAgICAgICAgICAvLyBCcmVhayBmaXJzdCBydW4gb24gbGluZS4K
LSAgICAgICAgICAgIGlmIChsaW5lSXNFbXB0eSAmJiBzdHlsZS5icmVha1dvcmRzKCkgJiYgc3R5
bGUucHJlc2VydmVOZXdsaW5lKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIExpbmVCcmVha2lu
Z0JlaGF2aW9yOjpCcmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIE5vbi1icmVha2FibGUg
bm9uLXdoaXRlc3BhY2UgcnVuLgotICAgICAgICByZXR1cm4gbGluZUlzRW1wdHkgPyBMaW5lQnJl
YWtpbmdCZWhhdmlvcjo6S2VlcCA6IExpbmVCcmVha2luZ0JlaGF2aW9yOjpXcmFwVG9OZXh0TGlu
ZTsKKyAgICAgICAgLy8gQnJlYWsgZmlyc3QgcnVuIG9uIGxpbmUuCisgICAgICAgIGlmIChsaW5l
SXNFbXB0eSAmJiBzdHlsZS5icmVha1dvcmRzKCkgJiYgc3R5bGUucHJlc2VydmVOZXdsaW5lKCkp
CisgICAgICAgICAgICByZXR1cm4gQnJlYWtpbmdCZWhhdmlvcjo6QnJlYWs7CiAgICAgfQogCi0g
ICAgQVNTRVJUKGlubGluZVJ1bi5pc0JveCgpIHx8IGlubGluZVJ1bi5pc0Zsb2F0KCkpOwotICAg
IC8vIE5vbi10ZXh0IGlubGluZSBydW5zLgotICAgIHJldHVybiBMaW5lQnJlYWtpbmdCZWhhdmlv
cjo6V3JhcFRvTmV4dExpbmU7CisgICAgLy8gTm9uLWJyZWFrYWJsZSBub24td2hpdGVzcGFjZSBy
dW4uCisgICAgcmV0dXJuIGxpbmVJc0VtcHR5ID8gQnJlYWtpbmdCZWhhdmlvcjo6S2VlcCA6IEJy
ZWFraW5nQmVoYXZpb3I6OldyYXA7CiB9CiAKLUxheW91dFVuaXQgSW5saW5lTGluZUJyZWFrZXI6
OnJ1bldpZHRoKGNvbnN0IElubGluZVJ1blByb3ZpZGVyOjpSdW4mIGlubGluZVJ1biwgTGF5b3V0
VW5pdCBjb250ZW50TG9naWNhbExlZnQpIGNvbnN0CitMYXlvdXRVbml0IExpbmVCcmVha2VyOjpy
dW5XaWR0aChjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtLCBMYXlvdXRVbml0IGNvbnRlbnRM
b2dpY2FsTGVmdCkgY29uc3QKIHsKLSAgICBBU1NFUlQoIWlubGluZVJ1bi5pc0xpbmVCcmVhaygp
KTsKKyAgICBpZiAoaW5saW5lSXRlbS5pc0xpbmVCcmVhaygpKQorICAgICAgICByZXR1cm4gMDsK
IAotICAgIGlmIChpbmxpbmVSdW4uaXNUZXh0KCkpCi0gICAgICAgIHJldHVybiB0ZXh0V2lkdGgo
aW5saW5lUnVuLCBjb250ZW50TG9naWNhbExlZnQpOworICAgIGlmIChpczxJbmxpbmVUZXh0SXRl
bT4oaW5saW5lSXRlbSkpCisgICAgICAgIHJldHVybiB0ZXh0V2lkdGgoZG93bmNhc3Q8SW5saW5l
VGV4dEl0ZW0+KGlubGluZUl0ZW0pLCBjb250ZW50TG9naWNhbExlZnQpOwogCi0gICAgQVNTRVJU
KGlubGluZVJ1bi5pc0JveCgpIHx8IGlubGluZVJ1bi5pc0Zsb2F0KCkpOwotICAgIGF1dG8mIGlu
bGluZUl0ZW0gPSBpbmxpbmVSdW4uaW5saW5lSXRlbSgpOwogICAgIGF1dG8mIGxheW91dEJveCA9
IGlubGluZUl0ZW0ubGF5b3V0Qm94KCk7CiAgICAgQVNTRVJUKG1fbGF5b3V0U3RhdGUuaGFzRGlz
cGxheUJveChsYXlvdXRCb3gpKTsKICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gbV9sYXlvdXRTdGF0
ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7Ci0gICAgcmV0dXJuIGlubGluZUl0
ZW0ubm9uQnJlYWthYmxlU3RhcnQoKSArIGRpc3BsYXlCb3gud2lkdGgoKSArIGlubGluZUl0ZW0u
bm9uQnJlYWthYmxlRW5kKCk7Ci19CiAKLUxheW91dFVuaXQgSW5saW5lTGluZUJyZWFrZXI6OnRl
eHRXaWR0aChjb25zdCBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuJiBpbmxpbmVSdW4sIExheW91dFVu
aXQgY29udGVudExvZ2ljYWxMZWZ0KSBjb25zdAotewotICAgIC8vIEZJWE1FOiBGaW5kIGEgd2F5
IHRvIG1lcmdlIHRoaXMgYW5kIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6cnVu
V2lkdGguCi0gICAgYXV0byYgaW5saW5lSXRlbSA9IGlubGluZVJ1bi5pbmxpbmVJdGVtKCk7Ci0g
ICAgYXV0byB0ZXh0Q29udGV4dCA9IGlubGluZVJ1bi50ZXh0Q29udGV4dCgpOwotICAgIGF1dG8g
c3RhcnRQb3NpdGlvbiA9IHRleHRDb250ZXh0LT5zdGFydCgpOwotICAgIGF1dG8gbGVuZ3RoID0g
dGV4dENvbnRleHQtPmlzQ29sbGFwc2VkKCkgPyAxIDogdGV4dENvbnRleHQtPmxlbmd0aCgpOwot
Ci0gICAgLy8gRklYTUU6IEl0IGRvZXMgbm90IGRvIHByb3BlciBrZXJuaW5nL2xpZ2F0dXJlIGhh
bmRsaW5nLgotICAgIExheW91dFVuaXQgd2lkdGg7Ci0gICAgYXV0byBpdGVyYXRvciA9IG1faW5s
aW5lQ29udGVudC5maW5kKGNvbnN0X2Nhc3Q8SW5saW5lSXRlbSo+KCZpbmxpbmVJdGVtKSk7Ci0j
aWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIGF1dG8gaW5saW5lSXRlbUVuZCA9IG1faW5saW5lQ29u
dGVudC5lbmQoKTsKLSNlbmRpZgotICAgIHdoaWxlIChsZW5ndGgpIHsKLSAgICAgICAgQVNTRVJU
KGl0ZXJhdG9yICE9IGlubGluZUl0ZW1FbmQpOwotICAgICAgICBhdXRvJiBjdXJyZW50SW5saW5l
SXRlbSA9ICoqaXRlcmF0b3I7Ci0gICAgICAgIGF1dG8gaW5saW5lSXRlbUxlbmd0aCA9IGN1cnJl
bnRJbmxpbmVJdGVtLnRleHRDb250ZW50KCkubGVuZ3RoKCk7Ci0gICAgICAgIGF1dG8gZW5kUG9z
aXRpb24gPSBzdGQ6Om1pbjxJdGVtUG9zaXRpb24+KHN0YXJ0UG9zaXRpb24gKyBsZW5ndGgsIGlu
bGluZUl0ZW1MZW5ndGgpOwotICAgICAgICBhdXRvIHRleHRXaWR0aCA9IFRleHRVdGlsOjp3aWR0
aChjdXJyZW50SW5saW5lSXRlbSwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24sIGNvbnRlbnRM
b2dpY2FsTGVmdCk7Ci0KLSAgICAgICAgYXV0byBub25CcmVha2FibGVTdGFydCA9ICFzdGFydFBv
c2l0aW9uID8gY3VycmVudElubGluZUl0ZW0ubm9uQnJlYWthYmxlU3RhcnQoKSA6IDBfbHU7Ci0g
ICAgICAgIGF1dG8gbm9uQnJlYWthYmxlRW5kID0gIGVuZFBvc2l0aW9uID09IGlubGluZUl0ZW1M
ZW5ndGggPyBjdXJyZW50SW5saW5lSXRlbS5ub25CcmVha2FibGVFbmQoKSA6IDBfbHU7Ci0gICAg
ICAgIGF1dG8gY29udGVudFdpZHRoID0gbm9uQnJlYWthYmxlU3RhcnQgKyB0ZXh0V2lkdGggKyBu
b25CcmVha2FibGVFbmQ7Ci0gICAgICAgIGNvbnRlbnRMb2dpY2FsTGVmdCArPSBjb250ZW50V2lk
dGg7Ci0gICAgICAgIHdpZHRoICs9IGNvbnRlbnRXaWR0aDsKLSAgICAgICAgbGVuZ3RoIC09IChl
bmRQb3NpdGlvbiAtIHN0YXJ0UG9zaXRpb24pOwotCi0gICAgICAgIHN0YXJ0UG9zaXRpb24gPSAw
OwotICAgICAgICArK2l0ZXJhdG9yOwotICAgIH0KLSAgICByZXR1cm4gd2lkdGg7CisgICAgaWYg
KGlubGluZUl0ZW0uaXNDb250YWluZXJTdGFydCgpKQorICAgICAgICByZXR1cm4gZGlzcGxheUJv
eC5tYXJnaW5TdGFydCgpICsgZGlzcGxheUJveC5ib3JkZXJMZWZ0KCkgKyBkaXNwbGF5Qm94LnBh
ZGRpbmdMZWZ0KCkudmFsdWVPcigwKTsKKworICAgIGlmIChpbmxpbmVJdGVtLmlzQ29udGFpbmVy
RW5kKCkpCisgICAgICAgIHJldHVybiBkaXNwbGF5Qm94Lm1hcmdpbkVuZCgpICsgZGlzcGxheUJv
eC5ib3JkZXJSaWdodCgpICsgZGlzcGxheUJveC5wYWRkaW5nUmlnaHQoKS52YWx1ZU9yKDApOwor
CisgICAgaWYgKGlubGluZUl0ZW0uaXNGbG9hdCgpKQorICAgICAgICByZXR1cm4gZGlzcGxheUJv
eC5tYXJnaW5Cb3goKS53aWR0aCgpOworCisgICAgcmV0dXJuIGRpc3BsYXlCb3gud2lkdGgoKTsK
IH0KIAotSW5saW5lTGluZUJyZWFrZXI6OlJ1biBJbmxpbmVMaW5lQnJlYWtlcjo6c3BsaXRSdW4o
Y29uc3QgSW5saW5lUnVuUHJvdmlkZXI6OlJ1biYgaW5saW5lUnVuLCBMYXlvdXRVbml0LCBMYXlv
dXRVbml0LCBib29sKQorYm9vbCBMaW5lQnJlYWtlcjo6aXNBdEJyZWFraW5nT3Bwb3J0dW5pdHko
Y29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSkKIHsKLSAgICByZXR1cm4geyBSdW46OlBvc2l0
aW9uOjpVbmRldGVybWluZWQsIHsgfSwgaW5saW5lUnVuIH07CisgICAgaWYgKGlzPElubGluZVRl
eHRJdGVtPihpbmxpbmVJdGVtKSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PElubGluZVRleHRJ
dGVtPihpbmxpbmVJdGVtKS5pc1doaXRlc3BhY2UoKTsKKyAgICByZXR1cm4gIWlubGluZUl0ZW0u
aXNGbG9hdCgpICYmICFpbmxpbmVJdGVtLmlzQ29udGFpbmVyU3RhcnQoKSAmJiAhaW5saW5lSXRl
bS5pc0NvbnRhaW5lckVuZCgpOwogfQogCi1PcHRpb25hbDxJdGVtUG9zaXRpb24+IElubGluZUxp
bmVCcmVha2VyOjphZGp1c3RTcGxpdFBvc2l0aW9uV2l0aEh5cGhlbmF0aW9uKGNvbnN0IElubGlu
ZVJ1blByb3ZpZGVyOjpSdW4mLCBJdGVtUG9zaXRpb24sIExheW91dFVuaXQsIExheW91dFVuaXQs
IGJvb2wpIGNvbnN0CitMYXlvdXRVbml0IExpbmVCcmVha2VyOjp0ZXh0V2lkdGgoY29uc3QgSW5s
aW5lVGV4dEl0ZW0mIGlubGluZVRleHRJdGVtLCBMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsTGVm
dCkgY29uc3QKIHsKLSAgICByZXR1cm4geyB9OworICAgIGF1dG8gZW5kID0gaW5saW5lVGV4dEl0
ZW0uaXNDb2xsYXBzZWQoKSA/IGlubGluZVRleHRJdGVtLnN0YXJ0KCkgKyAxIDogaW5saW5lVGV4
dEl0ZW0uZW5kKCk7CisgICAgcmV0dXJuIFRleHRVdGlsOjp3aWR0aChkb3duY2FzdDxJbmxpbmVC
b3g+KGlubGluZVRleHRJdGVtLmxheW91dEJveCgpKSwgaW5saW5lVGV4dEl0ZW0uc3RhcnQoKSwg
ZW5kLCBjb250ZW50TG9naWNhbExlZnQpOwogfQotCiB9CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCcmVha2Vy
LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnJl
YWtlci5oCmluZGV4IDM4N2IwZmNmMzVmNjU2ODE1MGFmNWIwMzZjYTBhZWM4YmMxYjc5ODkuLjA2
NTMzMDI2M2RkN2E0Yzk2YjJkOTQzZjc4YzQxMzJiYzg0YzY0MzkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCcmVha2VyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJyZWFr
ZXIuaApAQCAtMjcsNDEgKzI3LDM3IEBACiAKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdf
Q09OVEVYVCkKIAotI2luY2x1ZGUgIklubGluZVJ1blByb3ZpZGVyLmgiCi0jaW5jbHVkZSA8d3Rm
L0lzb01hbGxvYy5oPgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgTGF5b3V0IHsK
IAotY2xhc3MgSW5saW5lTGluZUJyZWFrZXIgewotICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQo
SW5saW5lTGluZUJyZWFrZXIpOworY2xhc3MgSW5saW5lVGV4dEl0ZW07CisKK2NsYXNzIExpbmVC
cmVha2VyIHsKIHB1YmxpYzoKLSAgICBJbmxpbmVMaW5lQnJlYWtlcihjb25zdCBMYXlvdXRTdGF0
ZSYsIGNvbnN0IElubGluZUNvbnRlbnQmLCBjb25zdCBWZWN0b3I8SW5saW5lUnVuUHJvdmlkZXI6
OlJ1bj4mKTsKKyAgICBMaW5lQnJlYWtlcihjb25zdCBMYXlvdXRTdGF0ZSYpOwogCi0gICAgc3Ry
dWN0IFJ1biB7Ci0gICAgICAgIGVudW0gY2xhc3MgUG9zaXRpb24geyBVbmRldGVybWluZWQsIExp
bmVCZWdpbiwgTGluZUVuZCB9OwotICAgICAgICBQb3NpdGlvbiBwb3NpdGlvbjsKLSAgICAgICAg
TGF5b3V0VW5pdCB3aWR0aDsKLSAgICAgICAgSW5saW5lUnVuUHJvdmlkZXI6OlJ1biBjb250ZW50
OworICAgIGVudW0gY2xhc3MgQnJlYWtpbmdCZWhhdmlvciB7IEtlZXAsIEJyZWFrLCBXcmFwIH07
CisgICAgc3RydWN0IEJyZWFraW5nQ29udGV4dCB7CisgICAgICAgIEJyZWFraW5nQmVoYXZpb3Ig
YnJlYWtpbmdCZWhhdmlvcjsKKyAgICAgICAgYm9vbCBpc0F0QnJlYWtpbmdPcHBvcnR1bml0eSB7
IGZhbHNlIH07CisgICAgfTsKKyAgICBzdHJ1Y3QgTGluZUNvbnRleHQgeworICAgICAgICBMYXlv
dXRVbml0IGF2YWlsYWJsZVdpZHRoOworICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0Owor
ICAgICAgICBMYXlvdXRVbml0IHRyaW1tYWJsZVdpZHRoOworICAgICAgICBib29sIGlzRW1wdHkg
eyBmYWxzZSB9OwogICAgIH07Ci0gICAgT3B0aW9uYWw8UnVuPiBuZXh0UnVuKExheW91dFVuaXQg
Y29udGVudExvZ2ljYWxMZWZ0LCBMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoLCBib29sIGxpbmVJ
c0VtcHR5KTsKKyAgICBCcmVha2luZ0NvbnRleHQgYnJlYWtpbmdDb250ZXh0KElubGluZUl0ZW0m
LCBjb25zdCBMaW5lQ29udGV4dCk7CiAKIHByaXZhdGU6Ci0gICAgZW51bSBjbGFzcyBMaW5lQnJl
YWtpbmdCZWhhdmlvciB7IEtlZXAsIEJyZWFrLCBXcmFwVG9OZXh0TGluZSB9OwotICAgIExpbmVC
cmVha2luZ0JlaGF2aW9yIGxpbmVCcmVha2luZ0JlaGF2aW9yKGNvbnN0IElubGluZVJ1blByb3Zp
ZGVyOjpSdW4mLCBib29sIGxpbmVJc0VtcHR5KTsKLSAgICBib29sIGlzQXRDb250ZW50RW5kKCkg
Y29uc3Q7Ci0gICAgUnVuIHNwbGl0UnVuKGNvbnN0IElubGluZVJ1blByb3ZpZGVyOjpSdW4mLCBM
YXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsTGVmdCwgTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCwg
Ym9vbCBsaW5lSXNFbXB0eSk7Ci0gICAgTGF5b3V0VW5pdCBydW5XaWR0aChjb25zdCBJbmxpbmVS
dW5Qcm92aWRlcjo6UnVuJiwgTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbExlZnQpIGNvbnN0Owot
ICAgIExheW91dFVuaXQgdGV4dFdpZHRoKGNvbnN0IElubGluZVJ1blByb3ZpZGVyOjpSdW4mLCBM
YXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsTGVmdCkgY29uc3Q7Ci0gICAgT3B0aW9uYWw8SXRlbVBv
c2l0aW9uPiBhZGp1c3RTcGxpdFBvc2l0aW9uV2l0aEh5cGhlbmF0aW9uKGNvbnN0IElubGluZVJ1
blByb3ZpZGVyOjpSdW4mLCBJdGVtUG9zaXRpb24gc3BsaXRQb3NpdGlvbiwgTGF5b3V0VW5pdCBj
b250ZW50TG9naWNhbExlZnQsIExheW91dFVuaXQgYXZhaWxhYmxlV2lkdGgsIGJvb2wgaXNMaW5l
RW1wdHkpIGNvbnN0OwogCi0gICAgY29uc3QgTGF5b3V0U3RhdGUmIG1fbGF5b3V0U3RhdGU7Ci0g
ICAgY29uc3QgSW5saW5lQ29udGVudCYgbV9pbmxpbmVDb250ZW50OwotICAgIGNvbnN0IFZlY3Rv
cjxJbmxpbmVSdW5Qcm92aWRlcjo6UnVuPiYgbV9pbmxpbmVSdW5zOworICAgIEJyZWFraW5nQmVo
YXZpb3Igd29yZEJyZWFraW5nQmVoYXZpb3IoY29uc3QgSW5saW5lVGV4dEl0ZW0mLCBib29sIGxp
bmVJc0VtcHR5KSBjb25zdDsKKyAgICBib29sIGlzQXRCcmVha2luZ09wcG9ydHVuaXR5KGNvbnN0
IElubGluZUl0ZW0mKTsKKyAgICBMYXlvdXRVbml0IHJ1bldpZHRoKGNvbnN0IElubGluZUl0ZW0m
LCBMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsTGVmdCkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCB0
ZXh0V2lkdGgoY29uc3QgSW5saW5lVGV4dEl0ZW0mLCBMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2Fs
TGVmdCkgY29uc3Q7CiAKLSAgICB1bnNpZ25lZCBtX2N1cnJlbnRSdW5JbmRleCB7IDAgfTsKLSAg
ICBPcHRpb25hbDxJdGVtUG9zaXRpb24+IG1fc3BsaXRQb3NpdGlvbjsKLSAgICBib29sIG1faHlw
aGVuYXRpb25Jc0Rpc2FibGVkIHsgZmFsc2UgfTsKKyAgICBjb25zdCBMYXlvdXRTdGF0ZSYgbV9s
YXlvdXRTdGF0ZTsKKyAgICBib29sIG1faHlwaGVuYXRpb25Jc0Rpc2FibGVkIHsgdHJ1ZSB9Owog
fTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRp
bmcvSW5saW5lUnVuLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9J
bmxpbmVSdW4uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDY1NTQ0MTZhYTUxMTUw
MjlmNWQ1M2Y2YTA0NzFiZWRkMWVlMTE1ZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9J
bmxpbmVSdW4uaAorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKLQot
I2luY2x1ZGUgIklubGluZVJ1blByb3ZpZGVyLmgiCi0jaW5jbHVkZSAiTGF5b3V0VW5pdC5oIgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1uYW1lc3BhY2UgTGF5b3V0IHsKLQotc3RydWN0IElubGlu
ZVJ1biB7Ci0gICAgSW5saW5lUnVuKERpc3BsYXk6OkJveDo6UmVjdCBsb2dpY2FsUmVjdCwgY29u
c3QgSW5saW5lSXRlbSYpOwotCi0gICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdCgpIGNvbnN0IHsg
cmV0dXJuIG1fbG9naWNhbFJlY3QubGVmdCgpOyB9Ci0gICAgTGF5b3V0VW5pdCBsb2dpY2FsUmln
aHQoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxSZWN0LnJpZ2h0KCk7IH0KLSAgICBMYXlvdXRV
bml0IGxvZ2ljYWxUb3AoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxSZWN0LnRvcCgpOyB9Ci0g
ICAgTGF5b3V0VW5pdCBsb2dpY2FsQm90dG9tKCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsUmVj
dC5ib3R0b20oKTsgfQotCi0gICAgTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgoKSBjb25zdCB7IHJl
dHVybiBtX2xvZ2ljYWxSZWN0LndpZHRoKCk7IH0KLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxIZWln
aHQoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxSZWN0LmhlaWdodCgpOyB9Ci0gICAgYm9vbCBv
dmVybGFwc011bHRpcGxlSW5saW5lSXRlbXMoKSBjb25zdDsKLQotICAgIHZvaWQgc2V0TG9naWNh
bFdpZHRoKExheW91dFVuaXQgd2lkdGgpIHsgbV9sb2dpY2FsUmVjdC5zZXRXaWR0aCh3aWR0aCk7
IH0KLSAgICB2b2lkIHNldExvZ2ljYWxMZWZ0KExheW91dFVuaXQgbG9naWNhbExlZnQpIHsgbV9s
b2dpY2FsUmVjdC5zZXRMZWZ0KGxvZ2ljYWxMZWZ0KTsgfQotICAgIHZvaWQgc2V0TG9naWNhbFJp
Z2h0KExheW91dFVuaXQgbG9naWNhbFJpZ2h0KSB7IG1fbG9naWNhbFJlY3Quc2hpZnRSaWdodFRv
KGxvZ2ljYWxSaWdodCk7IH0KLSAgICB2b2lkIG1vdmVWZXJ0aWNhbGx5KExheW91dFVuaXQgZGVs
dGEpIHsgbV9sb2dpY2FsUmVjdC5tb3ZlVmVydGljYWxseShkZWx0YSk7IH0KLSAgICB2b2lkIG1v
dmVIb3Jpem9udGFsbHkoTGF5b3V0VW5pdCBkZWx0YSkgeyBtX2xvZ2ljYWxSZWN0Lm1vdmVIb3Jp
em9udGFsbHkoZGVsdGEpOyB9Ci0KLSAgICBzdHJ1Y3QgRXhwYW5zaW9uT3Bwb3J0dW5pdHkgewot
ICAgICAgICB1bnNpZ25lZCBjb3VudCB7IDAgfTsKLSAgICAgICAgRXhwYW5zaW9uQmVoYXZpb3Ig
YmVoYXZpb3IgeyBGb3JiaWRMZWFkaW5nRXhwYW5zaW9uIHwgRm9yYmlkVHJhaWxpbmdFeHBhbnNp
b24gfTsKLSAgICAgICAgTGF5b3V0VW5pdCBleHBhbnNpb247Ci0gICAgfTsKLSAgICBFeHBhbnNp
b25PcHBvcnR1bml0eSYgZXhwYW5zaW9uT3Bwb3J0dW5pdHkoKSB7IHJldHVybiBtX2V4cGFuc2lv
bk9wcG9ydHVuaXR5OyB9Ci0KLSAgICBzdHJ1Y3QgVGV4dENvbnRleHQgewotICAgIHB1YmxpYzoK
LSAgICAgICAgVGV4dENvbnRleHQoSXRlbVBvc2l0aW9uLCB1bnNpZ25lZCBsZW5ndGgpOwotCi0g
ICAgICAgIHZvaWQgc2V0U3RhcnQoSXRlbVBvc2l0aW9uIHN0YXJ0KSB7IG1fc3RhcnQgPSBzdGFy
dDsgfQotICAgICAgICB2b2lkIHNldExlbmd0aCh1bnNpZ25lZCBsZW5ndGgpIHsgbV9sZW5ndGgg
PSBsZW5ndGg7IH0KLQotICAgICAgICBJdGVtUG9zaXRpb24gc3RhcnQoKSBjb25zdCB7IHJldHVy
biBtX3N0YXJ0OyB9Ci0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1f
bGVuZ3RoOyB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBJdGVtUG9zaXRpb24gbV9zdGFydDsK
LSAgICAgICAgdW5zaWduZWQgbV9sZW5ndGg7Ci0gICAgfTsKLSAgICB2b2lkIHNldFRleHRDb250
ZXh0KFRleHRDb250ZXh0IHRleHRDb250ZXh0KSB7IG1fdGV4dENvbnRleHQuZW1wbGFjZSh0ZXh0
Q29udGV4dCk7IH0KLSAgICBPcHRpb25hbDxUZXh0Q29udGV4dD4mIHRleHRDb250ZXh0KCkgeyBy
ZXR1cm4gbV90ZXh0Q29udGV4dDsgfQotICAgIE9wdGlvbmFsPFRleHRDb250ZXh0PiB0ZXh0Q29u
dGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dENvbnRleHQ7IH0KLQotICAgIGNvbnN0IElubGlu
ZUl0ZW0mIGlubGluZUl0ZW0oKSBjb25zdCB7IHJldHVybiBtX2lubGluZUl0ZW07IH0KLQotcHJp
dmF0ZToKLSAgICBEaXNwbGF5OjpCb3g6OlJlY3QgbV9sb2dpY2FsUmVjdDsKLSAgICBFeHBhbnNp
b25PcHBvcnR1bml0eSBtX2V4cGFuc2lvbk9wcG9ydHVuaXR5OwotCi0gICAgY29uc3QgSW5saW5l
SXRlbSYgbV9pbmxpbmVJdGVtOwotICAgIE9wdGlvbmFsPFRleHRDb250ZXh0PiBtX3RleHRDb250
ZXh0OwotfTsKLQotdXNpbmcgSW5saW5lUnVucyA9IFZlY3RvcjxJbmxpbmVSdW4+OwotCi1pbmxp
bmUgSW5saW5lUnVuOjpJbmxpbmVSdW4oRGlzcGxheTo6Qm94OjpSZWN0IGxvZ2ljYWxSZWN0LCBj
b25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtKQotICAgIDogbV9sb2dpY2FsUmVjdChsb2dpY2Fs
UmVjdCkKLSAgICAsIG1faW5saW5lSXRlbShpbmxpbmVJdGVtKQotewotfQotCi1pbmxpbmUgSW5s
aW5lUnVuOjpUZXh0Q29udGV4dDo6VGV4dENvbnRleHQoSXRlbVBvc2l0aW9uIHN0YXJ0LCB1bnNp
Z25lZCBsZW5ndGgpCi0gICAgOiBtX3N0YXJ0KHN0YXJ0KQotICAgICwgbV9sZW5ndGgobGVuZ3Ro
KQotewotfQotCi1pbmxpbmUgYm9vbCBJbmxpbmVSdW46Om92ZXJsYXBzTXVsdGlwbGVJbmxpbmVJ
dGVtcygpIGNvbnN0Ci17Ci0gICAgLy8gT25seSB0ZXh0IGNvbnRlbnQgY2FuIG92ZXJsYXAgbXVs
dGlwbGUgaW5saW5lIGVsZW1lbnRzLgotICAgIGlmICghbV90ZXh0Q29udGV4dCkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBlbmRQb3NpdGlvbiA9IG1fdGV4dENvbnRleHQtPnN0
YXJ0KCkgKyBtX3RleHRDb250ZXh0LT5sZW5ndGgoKTsKLSAgICByZXR1cm4gZW5kUG9zaXRpb24g
PiBtX2lubGluZUl0ZW0udGV4dENvbnRlbnQoKS5sZW5ndGgoKTsKLX0KLQotfQotfQotI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9Jbmxp
bmVSdW5Qcm92aWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGlu
Zy9JbmxpbmVSdW5Qcm92aWRlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDll
YjIwZjBhZmQ3MTJiNTM2MjAxZDA2ZjdjYjQzNzVlOGIxZTRjZDkuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvSW5saW5lUnVuUHJvdmlkZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTk4
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW5s
aW5lUnVuUHJvdmlkZXIuaCIKLQotI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhU
KQotCi0jaW5jbHVkZSAiQnJlYWtMaW5lcy5oIgotI2luY2x1ZGUgIkxheW91dElubGluZUJveC5o
IgotI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLW5hbWVzcGFjZSBMYXlvdXQgewotCi1XVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSW5s
aW5lUnVuUHJvdmlkZXIpOwotCi1JbmxpbmVSdW5Qcm92aWRlcjo6SW5saW5lUnVuUHJvdmlkZXIo
KQotewotfQotCi12b2lkIElubGluZVJ1blByb3ZpZGVyOjphcHBlbmQoY29uc3QgSW5saW5lSXRl
bSYgaW5saW5lSXRlbSkKLXsKLSAgICBzd2l0Y2ggKGlubGluZUl0ZW0udHlwZSgpKSB7Ci0gICAg
Y2FzZSBJbmxpbmVJdGVtOjpUeXBlOjpUZXh0OgotICAgICAgICAvLyBTcGVjaWFsIGNhc2UgdGV4
dCBjb250ZW50LiBUaGV5IGNhbiBvdmVybGFwIG11bHRpcGxlIGl0ZW1zLiA8c3Bhbj5mb288L3Nw
YW4+PHNwYW4+YmFyPC9zcGFuPgotICAgICAgICBwcm9jZXNzSW5saW5lVGV4dEl0ZW0oaW5saW5l
SXRlbSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW5saW5lSXRlbTo6VHlwZTo6SGFyZExp
bmVCcmVhazoKLSAgICAgICAgbV9pbmxpbmVSdW5zLmFwcGVuZChJbmxpbmVSdW5Qcm92aWRlcjo6
UnVuOjpjcmVhdGVIYXJkTGluZUJyZWFrUnVuKGlubGluZUl0ZW0pKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBJbmxpbmVJdGVtOjpUeXBlOjpJbmxpbmVCb3g6Ci0gICAgICAgIG1faW5saW5l
UnVucy5hcHBlbmQoSW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6Y3JlYXRlQm94UnVuKGlubGluZUl0
ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbmxpbmVJdGVtOjpUeXBlOjpGbG9hdDoK
LSAgICAgICAgbV9pbmxpbmVSdW5zLmFwcGVuZChJbmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpjcmVh
dGVGbG9hdFJ1bihpbmxpbmVJdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIEFTU0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7Ci0gICAgfQotfQotCi12b2lkIElu
bGluZVJ1blByb3ZpZGVyOjppbnNlcnRCZWZvcmUoY29uc3QgQm94JiwgY29uc3QgQm94JikKLXsK
LX0KLQotdm9pZCBJbmxpbmVSdW5Qcm92aWRlcjo6cmVtb3ZlKGNvbnN0IEJveCYpCi17Ci19Ci0K
LXN0YXRpYyBpbmxpbmUgYm9vbCBpc1doaXRlc3BhY2UoY2hhciBjaGFyYWN0ZXIsIGJvb2wgcHJl
c2VydmVOZXdsaW5lKQotewotICAgIHJldHVybiBjaGFyYWN0ZXIgPT0gJyAnIHx8IGNoYXJhY3Rl
ciA9PSAnXHQnIHx8IChjaGFyYWN0ZXIgPT0gJ1xuJyAmJiAhcHJlc2VydmVOZXdsaW5lKTsKLX0K
LQotc3RhdGljIGlubGluZSBib29sIGlzU29mdExpbmVCcmVhayhjaGFyIGNoYXJhY3RlciwgYm9v
bCBwcmVzZXJ2ZU5ld2xpbmUpCi17Ci0gICAgcmV0dXJuIHByZXNlcnZlTmV3bGluZSAmJiBjaGFy
YWN0ZXIgPT0gJ1xuJzsKLX0KLQotYm9vbCBJbmxpbmVSdW5Qcm92aWRlcjo6aXNDb250aW5vdXND
b250ZW50KElubGluZVJ1blByb3ZpZGVyOjpSdW46OlR5cGUgbmV3UnVuVHlwZSwgY29uc3QgSW5s
aW5lSXRlbSYgbmV3SW5saW5lSXRlbSkKLXsKLSAgICBpZiAobV9pbmxpbmVSdW5zLmlzRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byYgbGFzdFJ1biA9IG1faW5saW5l
UnVucy5sYXN0KCk7Ci0gICAgLy8gU2FtZSBlbGVtZW50LCBjaGVjayB0eXBlIG9ubHkuCi0gICAg
aWYgKCZuZXdJbmxpbmVJdGVtID09ICZsYXN0UnVuLmlubGluZUl0ZW0oKSkKLSAgICAgICAgcmV0
dXJuIG5ld1J1blR5cGUgPT0gbGFzdFJ1bi50eXBlKCk7Ci0KLSAgICAvLyBUaGlzIG5ldyBydW4g
aXMgZnJvbSBhIGRpZmZlcmVudCBpbmxpbmUgYm94LgotICAgIC8vIEZJWE1FOiBjaGVjayBzdHls
ZS4KLSAgICBpZiAobmV3UnVuVHlwZSA9PSBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpUeXBlOjpO
b25XaGl0ZXNwYWNlICYmIGxhc3RSdW4uaXNOb25XaGl0ZXNwYWNlKCkpCi0gICAgICAgIHJldHVy
biB0cnVlOwotCi0gICAgaWYgKG5ld1J1blR5cGUgPT0gSW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6
VHlwZTo6V2hpdGVzcGFjZSAmJiBsYXN0UnVuLmlzV2hpdGVzcGFjZSgpKQotICAgICAgICByZXR1
cm4gbmV3SW5saW5lSXRlbS5zdHlsZSgpLmNvbGxhcHNlV2hpdGVTcGFjZSgpID09IGxhc3RSdW4u
c3R5bGUoKS5jb2xsYXBzZVdoaXRlU3BhY2UoKTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
dm9pZCBJbmxpbmVSdW5Qcm92aWRlcjo6cHJvY2Vzc0lubGluZVRleHRJdGVtKGNvbnN0IElubGlu
ZUl0ZW0mIGlubGluZUl0ZW0pCi17Ci0gICAgLy8gV2UgbmVlZCB0byByZXNldCB0aGUgcnVuIGl0
ZXJhdG9yIHdoZW4gdGhlIHRleHQgY29udGVudCBpcyBub3QgY29udGludW91cy4KLSAgICAvLyA8
c3Bhbj5mb288L3NwYW4+PGltZyBzcmM9IiI+PHNwYW4+YmFyPC9zcGFuPiAoRklYTUU6IGZsb2F0
cz8pCi0gICAgaWYgKCFtX2lubGluZVJ1bnMuaXNFbXB0eSgpICYmICFtX2lubGluZVJ1bnMubGFz
dCgpLmlzVGV4dCgpKSB7Ci0gICAgICAgIG1fbGluZUJyZWFrSXRlcmF0b3IucmVzZXRQcmlvckNv
bnRleHQoKTsKLSAgICAgICAgbV9saW5lQnJlYWtJdGVyYXRvci5yZXNldFN0cmluZ0FuZFJlbGVh
c2VJdGVyYXRvcigiIiwgIiIsIExpbmVCcmVha0l0ZXJhdG9yTW9kZTo6RGVmYXVsdCk7Ci0gICAg
fQotCi0gICAgYXV0byYgc3R5bGUgPSBpbmxpbmVJdGVtLnN0eWxlKCk7Ci0gICAgYXV0byB0ZXh0
ID0gaW5saW5lSXRlbS50ZXh0Q29udGVudCgpOwotICAgIEl0ZW1Qb3NpdGlvbiBjdXJyZW50SXRl
bVBvc2l0aW9uID0gMDsKLSAgICB3aGlsZSAoY3VycmVudEl0ZW1Qb3NpdGlvbiA8IHRleHQubGVu
Z3RoKCkpIHsKLQotICAgICAgICAvLyBTb2Z0IGxpbmVicmVhaz8KLSAgICAgICAgaWYgKGlzU29m
dExpbmVCcmVhayh0ZXh0W2N1cnJlbnRJdGVtUG9zaXRpb25dLCBzdHlsZS5wcmVzZXJ2ZU5ld2xp
bmUoKSkpIHsKLSAgICAgICAgICAgIG1faW5saW5lUnVucy5hcHBlbmQoSW5saW5lUnVuUHJvdmlk
ZXI6OlJ1bjo6Y3JlYXRlU29mdExpbmVCcmVha1J1bihpbmxpbmVJdGVtKSk7Ci0gICAgICAgICAg
ICArK2N1cnJlbnRJdGVtUG9zaXRpb247Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
fQotCi0gICAgICAgIGF1dG8gaXNXaGl0ZXNwYWNlUnVuID0gaXNXaGl0ZXNwYWNlKHRleHRbY3Vy
cmVudEl0ZW1Qb3NpdGlvbl0sIHN0eWxlLnByZXNlcnZlTmV3bGluZSgpKTsKLSAgICAgICAgYXV0
byBsZW5ndGggPSBpc1doaXRlc3BhY2VSdW4gPyBtb3ZlVG9OZXh0Tm9uV2hpdGVzcGFjZVBvc2l0
aW9uKGlubGluZUl0ZW0sIGN1cnJlbnRJdGVtUG9zaXRpb24pIDogbW92ZVRvTmV4dEJyZWFrYWJs
ZVBvc2l0aW9uKGlubGluZUl0ZW0sIGN1cnJlbnRJdGVtUG9zaXRpb24pOwotCi0gICAgICAgIGlm
IChpc0NvbnRpbm91c0NvbnRlbnQoaXNXaGl0ZXNwYWNlUnVuID8gSW5saW5lUnVuUHJvdmlkZXI6
OlJ1bjo6VHlwZTo6V2hpdGVzcGFjZSA6IElubGluZVJ1blByb3ZpZGVyOjpSdW46OlR5cGU6Ok5v
bldoaXRlc3BhY2UsIGlubGluZUl0ZW0pKQotICAgICAgICAgICAgbV9pbmxpbmVSdW5zLmxhc3Qo
KS50ZXh0Q29udGV4dCgpLT5leHBhbmQobGVuZ3RoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICBtX2lubGluZVJ1bnMuYXBwZW5kKGlzV2hpdGVzcGFjZVJ1biA/IElubGluZVJ1blByb3Zp
ZGVyOjpSdW46OmNyZWF0ZVdoaXRlc3BhY2VSdW4oaW5saW5lSXRlbSwgY3VycmVudEl0ZW1Qb3Np
dGlvbiwgbGVuZ3RoLCBzdHlsZS5jb2xsYXBzZVdoaXRlU3BhY2UoKSkKLSAgICAgICAgICAgICAg
ICA6IElubGluZVJ1blByb3ZpZGVyOjpSdW46OmNyZWF0ZU5vbldoaXRlc3BhY2VSdW4oaW5saW5l
SXRlbSwgY3VycmVudEl0ZW1Qb3NpdGlvbiwgbGVuZ3RoKSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBjdXJyZW50SXRlbVBvc2l0aW9uICs9IGxlbmd0aDsKLSAgICB9Ci19Ci0KLXVuc2lnbmVkIElu
bGluZVJ1blByb3ZpZGVyOjptb3ZlVG9OZXh0Tm9uV2hpdGVzcGFjZVBvc2l0aW9uKGNvbnN0IElu
bGluZUl0ZW0mIGlubGluZUl0ZW0sIEl0ZW1Qb3NpdGlvbiBjdXJyZW50SXRlbVBvc2l0aW9uKQot
ewotICAgIGF1dG8gdGV4dCA9IGlubGluZUl0ZW0udGV4dENvbnRlbnQoKTsKLSAgICBhdXRvIHBy
ZXNlcnZlTmV3bGluZSA9IGlubGluZUl0ZW0uc3R5bGUoKS5wcmVzZXJ2ZU5ld2xpbmUoKTsKLSAg
ICBhdXRvIG5leHROb25XaGl0ZVNwYWNlUG9zaXRpb24gPSBjdXJyZW50SXRlbVBvc2l0aW9uOwot
Ci0gICAgd2hpbGUgKG5leHROb25XaGl0ZVNwYWNlUG9zaXRpb24gPCB0ZXh0Lmxlbmd0aCgpICYm
IGlzV2hpdGVzcGFjZSh0ZXh0W25leHROb25XaGl0ZVNwYWNlUG9zaXRpb25dLCBwcmVzZXJ2ZU5l
d2xpbmUpKQotICAgICAgICArK25leHROb25XaGl0ZVNwYWNlUG9zaXRpb247Ci0gICAgcmV0dXJu
IG5leHROb25XaGl0ZVNwYWNlUG9zaXRpb24gLSBjdXJyZW50SXRlbVBvc2l0aW9uOwotfQotCi11
bnNpZ25lZCBJbmxpbmVSdW5Qcm92aWRlcjo6bW92ZVRvTmV4dEJyZWFrYWJsZVBvc2l0aW9uKGNv
bnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0sIEl0ZW1Qb3NpdGlvbiBjdXJyZW50SXRlbVBvc2l0
aW9uKQotewotICAgIGF1dG8gZmluZE5leHRCcmVha2FibGVQb3NpdGlvbiA9IFsmXShhdXRvIGlu
bGluZVRleHQsIGF1dG8mIHN0eWxlLCBJdGVtUG9zaXRpb24gc3RhcnRQb3NpdGlvbikgewotICAg
ICAgICAvLyBTd2FwIGl0ZXJhdG9yJ3MgY29udGVudCBpZiB3ZSBhZHZhbmNlZCB0byBhIG5ldyBz
dHJpbmcuCi0gICAgICAgIGF1dG8gaXRlcmF0b3JUZXh0ID0gbV9saW5lQnJlYWtJdGVyYXRvci5z
dHJpbmdWaWV3KCk7Ci0KLSAgICAgICAgaWYgKGl0ZXJhdG9yVGV4dCAhPSBpbmxpbmVUZXh0KSB7
Ci0gICAgICAgICAgICBhdXRvIHRleHRMZW5ndGggPSBpdGVyYXRvclRleHQubGVuZ3RoKCk7Ci0g
ICAgICAgICAgICBhdXRvIGxhc3RDaGFyYWN0ZXIgPSB0ZXh0TGVuZ3RoID4gMCA/IGl0ZXJhdG9y
VGV4dFt0ZXh0TGVuZ3RoIC0gMV0gOiAwOwotICAgICAgICAgICAgYXV0byBzZWNvbmRUb0xhc3RD
aGFyYWN0ZXIgPSB0ZXh0TGVuZ3RoID4gMSA/IGl0ZXJhdG9yVGV4dFt0ZXh0TGVuZ3RoIC0gMl0g
OiAwOwotICAgICAgICAgICAgbV9saW5lQnJlYWtJdGVyYXRvci5zZXRQcmlvckNvbnRleHQobGFz
dENoYXJhY3Rlciwgc2Vjb25kVG9MYXN0Q2hhcmFjdGVyKTsKLSAgICAgICAgICAgIG1fbGluZUJy
ZWFrSXRlcmF0b3IucmVzZXRTdHJpbmdBbmRSZWxlYXNlSXRlcmF0b3IoaW5saW5lVGV4dCwgc3R5
bGUubG9jYWxlKCksIExpbmVCcmVha0l0ZXJhdG9yTW9kZTo6RGVmYXVsdCk7Ci0gICAgICAgIH0K
LQotICAgICAgICBhdXRvIGtlZXBBbGxXb3Jkc0ZvckNKSyA9IHN0eWxlLndvcmRCcmVhaygpID09
IFdvcmRCcmVhazo6S2VlcEFsbDsKLSAgICAgICAgYXV0byBicmVha05CU1AgPSBzdHlsZS5hdXRv
V3JhcCgpICYmIHN0eWxlLm5ic3BNb2RlKCkgPT0gTkJTUE1vZGU6OlNwYWNlOwotCi0gICAgICAg
IGlmIChrZWVwQWxsV29yZHNGb3JDSkspIHsKLSAgICAgICAgICAgIGlmIChicmVha05CU1ApCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIG5leHRCcmVha2FibGVQb3NpdGlvbktlZXBpbmdBbGxXb3Jk
cyhtX2xpbmVCcmVha0l0ZXJhdG9yLCBzdGFydFBvc2l0aW9uKTsKLSAgICAgICAgICAgIHJldHVy
biBuZXh0QnJlYWthYmxlUG9zaXRpb25LZWVwaW5nQWxsV29yZHNJZ25vcmluZ05CU1AobV9saW5l
QnJlYWtJdGVyYXRvciwgc3RhcnRQb3NpdGlvbik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
bV9saW5lQnJlYWtJdGVyYXRvci5tb2RlKCkgPT0gTGluZUJyZWFrSXRlcmF0b3JNb2RlOjpEZWZh
dWx0KSB7Ci0gICAgICAgICAgICBpZiAoYnJlYWtOQlNQKQotICAgICAgICAgICAgICAgIHJldHVy
biBXZWJDb3JlOjpuZXh0QnJlYWthYmxlUG9zaXRpb24obV9saW5lQnJlYWtJdGVyYXRvciwgc3Rh
cnRQb3NpdGlvbik7Ci0gICAgICAgICAgICByZXR1cm4gbmV4dEJyZWFrYWJsZVBvc2l0aW9uSWdu
b3JpbmdOQlNQKG1fbGluZUJyZWFrSXRlcmF0b3IsIHN0YXJ0UG9zaXRpb24pOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKGJyZWFrTkJTUCkKLSAgICAgICAgICAgIHJldHVybiBuZXh0QnJlYWth
YmxlUG9zaXRpb25XaXRob3V0U2hvcnRjdXQobV9saW5lQnJlYWtJdGVyYXRvciwgc3RhcnRQb3Np
dGlvbik7Ci0gICAgICAgIHJldHVybiBuZXh0QnJlYWthYmxlUG9zaXRpb25JZ25vcmluZ05CU1BX
aXRob3V0U2hvcnRjdXQobV9saW5lQnJlYWtJdGVyYXRvciwgc3RhcnRQb3NpdGlvbik7Ci0gICAg
fTsKLQotICAgIGF1dG8mIHN0eWxlID0gaW5saW5lSXRlbS5zdHlsZSgpOwotICAgIGF1dG8gdGV4
dExlbmd0aCA9IGlubGluZUl0ZW0udGV4dENvbnRlbnQoKS5sZW5ndGgoKTsKLSAgICBBU1NFUlQo
dGV4dExlbmd0aCk7Ci0gICAgd2hpbGUgKGN1cnJlbnRJdGVtUG9zaXRpb24gPCB0ZXh0TGVuZ3Ro
IC0gMSkgewotICAgICAgICBhdXRvIG5leHRCcmVha2FibGVQb3NpdGlvbiA9IGZpbmROZXh0QnJl
YWthYmxlUG9zaXRpb24oaW5saW5lSXRlbS50ZXh0Q29udGVudCgpLCBzdHlsZSwgY3VycmVudEl0
ZW1Qb3NpdGlvbik7Ci0gICAgICAgIGlmIChuZXh0QnJlYWthYmxlUG9zaXRpb24gIT0gY3VycmVu
dEl0ZW1Qb3NpdGlvbikKLSAgICAgICAgICAgIHJldHVybiBuZXh0QnJlYWthYmxlUG9zaXRpb24g
LSBjdXJyZW50SXRlbVBvc2l0aW9uOwotICAgICAgICArK2N1cnJlbnRJdGVtUG9zaXRpb247Ci0g
ICAgfQotICAgIHJldHVybiB0ZXh0TGVuZ3RoOwotfQotCi19Ci19Ci0jZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZVJ1blByb3Zp
ZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVSdW5Q
cm92aWRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNzdjMTQ4ZWVlZTBjYWRh
MjQ1NjYxZWZlYjhmYzU2N2RlZWQ4NjA4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lu
bGluZVJ1blByb3ZpZGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNjkgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRF
WFQpCi0KLSNpbmNsdWRlICJJbmxpbmVJdGVtLmgiCi0jaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLW5hbWVzcGFjZSBMYXlvdXQgewotCi11c2luZyBJdGVtUG9zaXRpb24gPSB1bnNp
Z25lZDsKLQotY2xhc3MgSW5saW5lUnVuUHJvdmlkZXIgewotICAgIFdURl9NQUtFX0lTT19BTExP
Q0FURUQoSW5saW5lUnVuUHJvdmlkZXIpOwotcHVibGljOgotICAgIElubGluZVJ1blByb3ZpZGVy
KCk7Ci0KLSAgICB2b2lkIGFwcGVuZChjb25zdCBJbmxpbmVJdGVtJik7Ci0gICAgdm9pZCBpbnNl
cnRCZWZvcmUoY29uc3QgQm94JiwgY29uc3QgQm94JiBiZWZvcmUpOwotICAgIHZvaWQgcmVtb3Zl
KGNvbnN0IEJveCYpOwotCi0gICAgc3RydWN0IFJ1biB7Ci0KLSAgICAgICAgc3RhdGljIFJ1biBj
cmVhdGVCb3hSdW4oY29uc3QgSW5saW5lSXRlbSYpOwotICAgICAgICBzdGF0aWMgUnVuIGNyZWF0
ZUZsb2F0UnVuKGNvbnN0IElubGluZUl0ZW0mKTsKLSAgICAgICAgc3RhdGljIFJ1biBjcmVhdGVI
YXJkTGluZUJyZWFrUnVuKGNvbnN0IElubGluZUl0ZW0mKTsKLSAgICAgICAgc3RhdGljIFJ1biBj
cmVhdGVTb2Z0TGluZUJyZWFrUnVuKGNvbnN0IElubGluZUl0ZW0mKTsKLSAgICAgICAgc3RhdGlj
IFJ1biBjcmVhdGVXaGl0ZXNwYWNlUnVuKGNvbnN0IElubGluZUl0ZW0mLCBJdGVtUG9zaXRpb24g
c3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwgYm9vbCBpc0NvbGxhcHNpYmxlKTsKLSAgICAgICAgc3Rh
dGljIFJ1biBjcmVhdGVOb25XaGl0ZXNwYWNlUnVuKGNvbnN0IElubGluZUl0ZW0mLCBJdGVtUG9z
aXRpb24gc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICAgICAgZW51bSBjbGFzcyBUeXBl
IHsKLSAgICAgICAgICAgIEJveCwKLSAgICAgICAgICAgIEZsb2F0LAotICAgICAgICAgICAgU29m
dExpbmVCcmVhaywKLSAgICAgICAgICAgIEhhcmRMaW5lQnJlYWssCi0gICAgICAgICAgICBXaGl0
ZXNwYWNlLAotICAgICAgICAgICAgTm9uV2hpdGVzcGFjZQotICAgICAgICB9OwotICAgICAgICBU
eXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KLSAgICAgICAgYm9vbCBpc1RleHQo
KSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gUnVuOjpUeXBlOjpXaGl0ZXNwYWNlIHx8IG1fdHlw
ZSA9PSBSdW46OlR5cGU6Ok5vbldoaXRlc3BhY2UgfHwgbV90eXBlID09IFJ1bjo6VHlwZTo6U29m
dExpbmVCcmVhayB8fCBtX3R5cGUgPT0gUnVuOjpUeXBlOjpIYXJkTGluZUJyZWFrOyB9Ci0gICAg
ICAgIGJvb2wgaXNXaGl0ZXNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IFR5cGU6Oldo
aXRlc3BhY2U7IH0KLSAgICAgICAgYm9vbCBpc05vbldoaXRlc3BhY2UoKSBjb25zdCB7IHJldHVy
biBtX3R5cGUgPT0gVHlwZTo6Tm9uV2hpdGVzcGFjZTsgfQotICAgICAgICBib29sIGlzTGluZUJy
ZWFrKCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IFJ1bjo6VHlwZTo6U29mdExpbmVCcmVhayB8
fCBtX3R5cGUgPT0gUnVuOjpUeXBlOjpIYXJkTGluZUJyZWFrOyB9Ci0gICAgICAgIGJvb2wgaXNC
b3goKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gVHlwZTo6Qm94OyB9Ci0gICAgICAgIGJvb2wg
aXNGbG9hdCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBUeXBlOjpGbG9hdDsgfQotCi0gICAg
ICAgIHN0cnVjdCBUZXh0Q29udGV4dCB7Ci0KLSAgICAgICAgICAgIGVudW0gY2xhc3MgSXNDb2xs
YXBzZWQgeyBObywgWWVzIH07Ci0gICAgICAgICAgICBUZXh0Q29udGV4dChJdGVtUG9zaXRpb24s
IHVuc2lnbmVkIGxlbmd0aCwgSXNDb2xsYXBzZWQpOwotCi0gICAgICAgICAgICBJdGVtUG9zaXRp
b24gc3RhcnQoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0OyB9Ci0gICAgICAgICAgICAvLyBOb3Rl
IHRoYXQgJ2VuZCcgcG9zaXRpb24gZG9lcyBub3QgZXF1YWwgdG8gc3RhcnQgKyBsZW5ndGggd2hl
biBydW4gb3ZlcmxhcHMgbXVsdGlwbGUgSW5saW5lSXRlbXMuCi0gICAgICAgICAgICB1bnNpZ25l
ZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQotICAgICAgICAgICAgYm9vbCBp
c0NvbGxhcHNlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNDb2xsYXBzZWQgPT0gSXNDb2xsYXBzZWQ6
OlllczsgfQotCi0gICAgICAgIHByaXZhdGU6Ci0gICAgICAgICAgICBmcmllbmQgY2xhc3MgSW5s
aW5lUnVuUHJvdmlkZXI7Ci0KLSAgICAgICAgICAgIHZvaWQgZXhwYW5kKHVuc2lnbmVkIGxlbmd0
aCkgeyBtX2xlbmd0aCArPSBsZW5ndGg7IH0KLQotICAgICAgICAgICAgSXRlbVBvc2l0aW9uIG1f
c3RhcnQgeyAwIH07Ci0gICAgICAgICAgICB1bnNpZ25lZCBtX2xlbmd0aCB7IDAgfTsKLSAgICAg
ICAgICAgIElzQ29sbGFwc2VkIG1faXNDb2xsYXBzZWQgeyBJc0NvbGxhcHNlZDo6Tm8gfTsKLSAg
ICAgICAgfTsKLSAgICAgICAgT3B0aW9uYWw8VGV4dENvbnRleHQ+IHRleHRDb250ZXh0KCkgY29u
c3QgeyByZXR1cm4gbV90ZXh0Q29udGV4dDsgfQotICAgICAgICAvLyBOb3RlIHRoYXQgc3R5bGUo
KSBhbmQgaW5saW5lSXRlbSgpIGFsd2F5cyByZXR1cm5zIHRoZSBmaXJzdCBJbmxpbmVJdGVtIGZv
ciBhIHJ1bi4KLSAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKCkgY29uc3QgeyByZXR1
cm4gbV9pbmxpbmVJdGVtLnN0eWxlKCk7IH0KLSAgICAgICAgY29uc3QgSW5saW5lSXRlbSYgaW5s
aW5lSXRlbSgpIGNvbnN0IHsgcmV0dXJuIG1faW5saW5lSXRlbTsgfQotCi0gICAgcHJpdmF0ZToK
LSAgICAgICAgZnJpZW5kIGNsYXNzIElubGluZVJ1blByb3ZpZGVyOwotCi0gICAgICAgIFJ1bihj
b25zdCBJbmxpbmVJdGVtJiwgVHlwZSwgT3B0aW9uYWw8VGV4dENvbnRleHQ+KTsKLSAgICAgICAg
T3B0aW9uYWw8VGV4dENvbnRleHQ+JiB0ZXh0Q29udGV4dCgpIHsgcmV0dXJuIG1fdGV4dENvbnRl
eHQ7IH0KLQotICAgICAgICBjb25zdCBUeXBlIG1fdHlwZTsKLSAgICAgICAgY29uc3QgSW5saW5l
SXRlbSYgbV9pbmxpbmVJdGVtOwotICAgICAgICBPcHRpb25hbDxUZXh0Q29udGV4dD4gbV90ZXh0
Q29udGV4dDsKLSAgICB9OwotICAgIGNvbnN0IFZlY3RvcjxJbmxpbmVSdW5Qcm92aWRlcjo6UnVu
PiYgcnVucygpIGNvbnN0IHsgcmV0dXJuIG1faW5saW5lUnVuczsgfQotCi1wcml2YXRlOgotICAg
IHZvaWQgY29tbWl0VGV4dFJ1bigpOwotICAgIHZvaWQgcHJvY2Vzc0lubGluZVRleHRJdGVtKGNv
bnN0IElubGluZUl0ZW0mKTsKLSAgICB1bnNpZ25lZCBtb3ZlVG9OZXh0Tm9uV2hpdGVzcGFjZVBv
c2l0aW9uKGNvbnN0IElubGluZUl0ZW0mLCBJdGVtUG9zaXRpb24gY3VycmVudFBvc2l0aW9uKTsK
LSAgICB1bnNpZ25lZCBtb3ZlVG9OZXh0QnJlYWthYmxlUG9zaXRpb24oY29uc3QgSW5saW5lSXRl
bSYsIEl0ZW1Qb3NpdGlvbiBjdXJyZW50UG9zaXRpb24pOwotICAgIGJvb2wgaXNDb250aW5vdXND
b250ZW50KFJ1bjo6VHlwZSBuZXdSdW5UeXBlLCBjb25zdCBJbmxpbmVJdGVtJiBuZXdJbmxpbmVJ
dGVtKTsKLQotICAgIExhenlMaW5lQnJlYWtJdGVyYXRvciBtX2xpbmVCcmVha0l0ZXJhdG9yOwot
Ci0gICAgVmVjdG9yPElubGluZVJ1blByb3ZpZGVyOjpSdW4+IG1faW5saW5lUnVuczsKLX07Ci0K
LWlubGluZSBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuIElubGluZVJ1blByb3ZpZGVyOjpSdW46OmNy
ZWF0ZUJveFJ1bihjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtKQotewotICAgIHJldHVybiB7
IGlubGluZUl0ZW0sIFR5cGU6OkJveCwgV1RGOjpudWxsb3B0IH07Ci19Ci0KLWlubGluZSBJbmxp
bmVSdW5Qcm92aWRlcjo6UnVuIElubGluZVJ1blByb3ZpZGVyOjpSdW46OmNyZWF0ZUZsb2F0UnVu
KGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0pCi17Ci0gICAgcmV0dXJuIHsgaW5saW5lSXRl
bSwgVHlwZTo6RmxvYXQsIFdURjo6bnVsbG9wdCB9OwotfQotCi1pbmxpbmUgSW5saW5lUnVuUHJv
dmlkZXI6OlJ1biBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpjcmVhdGVTb2Z0TGluZUJyZWFrUnVu
KGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0pCi17Ci0gICAgcmV0dXJuIHsgaW5saW5lSXRl
bSwgVHlwZTo6U29mdExpbmVCcmVhaywgV1RGOjpudWxsb3B0IH07Ci19Ci0KLWlubGluZSBJbmxp
bmVSdW5Qcm92aWRlcjo6UnVuIElubGluZVJ1blByb3ZpZGVyOjpSdW46OmNyZWF0ZUhhcmRMaW5l
QnJlYWtSdW4oY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSkKLXsKLSAgICByZXR1cm4geyBp
bmxpbmVJdGVtLCBUeXBlOjpIYXJkTGluZUJyZWFrLCBXVEY6Om51bGxvcHQgfTsKLX0KLQotaW5s
aW5lIElubGluZVJ1blByb3ZpZGVyOjpSdW4gSW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6Y3JlYXRl
V2hpdGVzcGFjZVJ1bihjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtLCBJdGVtUG9zaXRpb24g
c3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwgYm9vbCBpc0NvbGxhcHNpYmxlKQotewotICAgIEFTU0VS
VChsZW5ndGgpOwotICAgIGF1dG8gaXNDb2xsYXBzZWQgPSBpc0NvbGxhcHNpYmxlICYmIGxlbmd0
aCA+IDEgPyBUZXh0Q29udGV4dDo6SXNDb2xsYXBzZWQ6OlllcyA6IFRleHRDb250ZXh0OjpJc0Nv
bGxhcHNlZDo6Tm87Ci0gICAgcmV0dXJuIHsgaW5saW5lSXRlbSwgVHlwZTo6V2hpdGVzcGFjZSwg
VGV4dENvbnRleHQoc3RhcnQsIGxlbmd0aCwgaXNDb2xsYXBzZWQpIH07Ci19Ci0KLWlubGluZSBJ
bmxpbmVSdW5Qcm92aWRlcjo6UnVuIElubGluZVJ1blByb3ZpZGVyOjpSdW46OmNyZWF0ZU5vbldo
aXRlc3BhY2VSdW4oY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSwgSXRlbVBvc2l0aW9uIHN0
YXJ0LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIHsgaW5saW5lSXRlbSwgVHlwZTo6
Tm9uV2hpdGVzcGFjZSwgVGV4dENvbnRleHQoc3RhcnQsIGxlbmd0aCwgVGV4dENvbnRleHQ6Oklz
Q29sbGFwc2VkOjpObykgfTsKLX0KLQotaW5saW5lIElubGluZVJ1blByb3ZpZGVyOjpSdW46OlJ1
bihjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtLCBUeXBlIHR5cGUsIE9wdGlvbmFsPFRleHRD
b250ZXh0PiB0ZXh0Q29udGV4dCkKLSAgICA6IG1fdHlwZSh0eXBlKQotICAgICwgbV9pbmxpbmVJ
dGVtKGlubGluZUl0ZW0pCi0gICAgLCBtX3RleHRDb250ZXh0KHRleHRDb250ZXh0KQotewotfQot
Ci1pbmxpbmUgSW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6VGV4dENvbnRleHQ6OlRleHRDb250ZXh0
KEl0ZW1Qb3NpdGlvbiBzdGFydCwgdW5zaWduZWQgbGVuZ3RoLCBJc0NvbGxhcHNlZCBpc0NvbGxh
cHNlZCkKLSAgICA6IG1fc3RhcnQoc3RhcnQpCi0gICAgLCBtX2xlbmd0aChsZW5ndGgpCi0gICAg
LCBtX2lzQ29sbGFwc2VkKGlzQ29sbGFwc2VkKQotewotfQotCi19Ci19Ci0jZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZVRleHRJ
dGVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZVRl
eHRJdGVtLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZjU0MjQ2NGZkYmJmNDZmNDE4YjAxMWNhMDQ4M2E1ZTdi
OTJkMThjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZv
cm1hdHRpbmcvSW5saW5lVGV4dEl0ZW0uY3BwCkBAIC0wLDAgKzEsMTMwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklubGluZVRleHRJdGVtLmgiCisKKyNp
ZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKKworI2luY2x1ZGUgIkJyZWFrTGlu
ZXMuaCIKKyNpbmNsdWRlICJMYXlvdXRJbmxpbmVCb3guaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworbmFtZXNwYWNlIExheW91dCB7CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc1doaXRlc3BhY2VD
aGFyYWN0ZXIoY2hhciBjaGFyYWN0ZXIsIGJvb2wgcHJlc2VydmVOZXdsaW5lKQoreworICAgIHJl
dHVybiBjaGFyYWN0ZXIgPT0gJyAnIHx8IGNoYXJhY3RlciA9PSAnXHQnIHx8IChjaGFyYWN0ZXIg
PT0gJ1xuJyAmJiAhcHJlc2VydmVOZXdsaW5lKTsKK30KKworc3RhdGljIGlubGluZSBib29sIGlz
U29mdExpbmVCcmVhayhjaGFyIGNoYXJhY3RlciwgYm9vbCBwcmVzZXJ2ZU5ld2xpbmUpCit7Cisg
ICAgcmV0dXJuIHByZXNlcnZlTmV3bGluZSAmJiBjaGFyYWN0ZXIgPT0gJ1xuJzsKK30KKworc3Rh
dGljIHVuc2lnbmVkIG1vdmVUb05leHROb25XaGl0ZXNwYWNlUG9zaXRpb24oU3RyaW5nIHRleHRD
b250ZW50LCB1bnNpZ25lZCBzdGFydFBvc2l0aW9uLCBib29sIHByZXNlcnZlTmV3bGluZSkKK3sK
KyAgICBhdXRvIG5leHROb25XaGl0ZVNwYWNlUG9zaXRpb24gPSBzdGFydFBvc2l0aW9uOworICAg
IHdoaWxlIChuZXh0Tm9uV2hpdGVTcGFjZVBvc2l0aW9uIDwgdGV4dENvbnRlbnQubGVuZ3RoKCkg
JiYgaXNXaGl0ZXNwYWNlQ2hhcmFjdGVyKHRleHRDb250ZW50W25leHROb25XaGl0ZVNwYWNlUG9z
aXRpb25dLCBwcmVzZXJ2ZU5ld2xpbmUpKQorICAgICAgICArK25leHROb25XaGl0ZVNwYWNlUG9z
aXRpb247CisgICAgcmV0dXJuIG5leHROb25XaGl0ZVNwYWNlUG9zaXRpb24gLSBzdGFydFBvc2l0
aW9uOworfQorCitzdGF0aWMgdW5zaWduZWQgbW92ZVRvTmV4dEJyZWFrYWJsZVBvc2l0aW9uKHVu
c2lnbmVkIHN0YXJ0UG9zaXRpb24sIExhenlMaW5lQnJlYWtJdGVyYXRvciBsaW5lQnJlYWtJdGVy
YXRvciwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQoreworICAgIGF1dG8gZmluZE5leHRCcmVh
a2FibGVQb3NpdGlvbiA9IFsmXShhdXRvIHN0YXJ0UG9zaXRpb24pIHsKKyAgICAgICAgYXV0byBr
ZWVwQWxsV29yZHNGb3JDSksgPSBzdHlsZS53b3JkQnJlYWsoKSA9PSBXb3JkQnJlYWs6OktlZXBB
bGw7CisgICAgICAgIGF1dG8gYnJlYWtOQlNQID0gc3R5bGUuYXV0b1dyYXAoKSAmJiBzdHlsZS5u
YnNwTW9kZSgpID09IE5CU1BNb2RlOjpTcGFjZTsKKworICAgICAgICBpZiAoa2VlcEFsbFdvcmRz
Rm9yQ0pLKSB7CisgICAgICAgICAgICBpZiAoYnJlYWtOQlNQKQorICAgICAgICAgICAgICAgIHJl
dHVybiBuZXh0QnJlYWthYmxlUG9zaXRpb25LZWVwaW5nQWxsV29yZHMobGluZUJyZWFrSXRlcmF0
b3IsIHN0YXJ0UG9zaXRpb24pOworICAgICAgICAgICAgcmV0dXJuIG5leHRCcmVha2FibGVQb3Np
dGlvbktlZXBpbmdBbGxXb3Jkc0lnbm9yaW5nTkJTUChsaW5lQnJlYWtJdGVyYXRvciwgc3RhcnRQ
b3NpdGlvbik7CisgICAgICAgIH0KKworICAgICAgICBpZiAobGluZUJyZWFrSXRlcmF0b3IubW9k
ZSgpID09IExpbmVCcmVha0l0ZXJhdG9yTW9kZTo6RGVmYXVsdCkgeworICAgICAgICAgICAgaWYg
KGJyZWFrTkJTUCkKKyAgICAgICAgICAgICAgICByZXR1cm4gV2ViQ29yZTo6bmV4dEJyZWFrYWJs
ZVBvc2l0aW9uKGxpbmVCcmVha0l0ZXJhdG9yLCBzdGFydFBvc2l0aW9uKTsKKyAgICAgICAgICAg
IHJldHVybiBuZXh0QnJlYWthYmxlUG9zaXRpb25JZ25vcmluZ05CU1AobGluZUJyZWFrSXRlcmF0
b3IsIHN0YXJ0UG9zaXRpb24pOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGJyZWFrTkJTUCkK
KyAgICAgICAgICAgIHJldHVybiBuZXh0QnJlYWthYmxlUG9zaXRpb25XaXRob3V0U2hvcnRjdXQo
bGluZUJyZWFrSXRlcmF0b3IsIHN0YXJ0UG9zaXRpb24pOworICAgICAgICByZXR1cm4gbmV4dEJy
ZWFrYWJsZVBvc2l0aW9uSWdub3JpbmdOQlNQV2l0aG91dFNob3J0Y3V0KGxpbmVCcmVha0l0ZXJh
dG9yLCBzdGFydFBvc2l0aW9uKTsKKyAgICB9OworCisgICAgYXV0byB0ZXh0TGVuZ3RoID0gbGlu
ZUJyZWFrSXRlcmF0b3Iuc3RyaW5nVmlldygpLmxlbmd0aCgpOworICAgIGF1dG8gY3VycmVudFBv
c2l0aW9uID0gc3RhcnRQb3NpdGlvbjsKKyAgICB3aGlsZSAoY3VycmVudFBvc2l0aW9uIDwgdGV4
dExlbmd0aCAtIDEpIHsKKyAgICAgICAgYXV0byBuZXh0QnJlYWthYmxlUG9zaXRpb24gPSBmaW5k
TmV4dEJyZWFrYWJsZVBvc2l0aW9uKGN1cnJlbnRQb3NpdGlvbik7CisgICAgICAgIGlmIChuZXh0
QnJlYWthYmxlUG9zaXRpb24gIT0gY3VycmVudFBvc2l0aW9uKQorICAgICAgICAgICAgcmV0dXJu
IG5leHRCcmVha2FibGVQb3NpdGlvbiAtIGN1cnJlbnRQb3NpdGlvbjsKKyAgICAgICAgKytjdXJy
ZW50UG9zaXRpb247CisgICAgfQorICAgIHJldHVybiB0ZXh0TGVuZ3RoIC0gc3RhcnRQb3NpdGlv
bjsKK30KKwordm9pZCBJbmxpbmVUZXh0SXRlbTo6Y3JlYXRlQW5kQXBwZW5kVGV4dEl0ZW1zKElu
bGluZUl0ZW1zJiBpbmxpbmVDb250ZW50LCBjb25zdCBJbmxpbmVCb3gmIGlubGluZUJveCkKK3sK
KyAgICBhdXRvJiBzdHlsZSA9IGlubGluZUJveC5zdHlsZSgpOworICAgIGF1dG8gcHJlc2VydmVO
ZXdsaW5lID0gc3R5bGUucHJlc2VydmVOZXdsaW5lKCk7CisgICAgYXV0byBjb2xsYXBzZVdoaXRl
U3BhY2UgPSBzdHlsZS5jb2xsYXBzZVdoaXRlU3BhY2UoKTsKKyAgICBhdXRvIHRleHQgPSBpbmxp
bmVCb3gudGV4dENvbnRlbnQoKTsKKyAgICBMYXp5TGluZUJyZWFrSXRlcmF0b3IgbGluZUJyZWFr
SXRlcmF0b3IodGV4dCk7CisKKyAgICB1bnNpZ25lZCBjdXJyZW50UG9zaXRpb24gPSAwOworICAg
IHdoaWxlIChjdXJyZW50UG9zaXRpb24gPCB0ZXh0Lmxlbmd0aCgpKSB7CisgICAgICAgIC8vIFNv
ZnQgbGluZWJyZWFrPworICAgICAgICBpZiAoaXNTb2Z0TGluZUJyZWFrKHRleHRbY3VycmVudFBv
c2l0aW9uXSwgcHJlc2VydmVOZXdsaW5lKSkgeworICAgICAgICAgICAgaW5saW5lQ29udGVudC5h
ZGQoc3RkOjptYWtlX3VuaXF1ZTxJbmxpbmVUZXh0SXRlbT4oaW5saW5lQm94LCBjdXJyZW50UG9z
aXRpb24sIDEsIHRydWUsIGZhbHNlKSk7CisgICAgICAgICAgICArK2N1cnJlbnRQb3NpdGlvbjsK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChpc1doaXRlc3Bh
Y2VDaGFyYWN0ZXIodGV4dFtjdXJyZW50UG9zaXRpb25dLCBwcmVzZXJ2ZU5ld2xpbmUpKSB7Cisg
ICAgICAgICAgICBhdXRvIGxlbmd0aCA9IG1vdmVUb05leHROb25XaGl0ZXNwYWNlUG9zaXRpb24o
dGV4dCwgY3VycmVudFBvc2l0aW9uLCBwcmVzZXJ2ZU5ld2xpbmUpOworICAgICAgICAgICAgYXV0
byBpc0NvbGxhcHNlZCA9IGNvbGxhcHNlV2hpdGVTcGFjZSAmJiBsZW5ndGggPiAxOworICAgICAg
ICAgICAgaW5saW5lQ29udGVudC5hZGQoc3RkOjptYWtlX3VuaXF1ZTxJbmxpbmVUZXh0SXRlbT4o
aW5saW5lQm94LCBjdXJyZW50UG9zaXRpb24sIGxlbmd0aCwgdHJ1ZSwgaXNDb2xsYXBzZWQpKTsK
KyAgICAgICAgICAgIGN1cnJlbnRQb3NpdGlvbiArPSBsZW5ndGg7CisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gbGVuZ3RoID0gbW92ZVRvTmV4dEJyZWFr
YWJsZVBvc2l0aW9uKGN1cnJlbnRQb3NpdGlvbiwgbGluZUJyZWFrSXRlcmF0b3IsIHN0eWxlKTsK
KyAgICAgICAgaW5saW5lQ29udGVudC5hZGQoc3RkOjptYWtlX3VuaXF1ZTxJbmxpbmVUZXh0SXRl
bT4oaW5saW5lQm94LCBjdXJyZW50UG9zaXRpb24sIGxlbmd0aCwgZmFsc2UsIGZhbHNlKSk7Cisg
ICAgICAgIGN1cnJlbnRQb3NpdGlvbiArPSBsZW5ndGg7CisgICAgfQorfQorCitJbmxpbmVUZXh0
SXRlbTo6SW5saW5lVGV4dEl0ZW0oY29uc3QgSW5saW5lQm94JiBpbmxpbmVCb3gsIHVuc2lnbmVk
IHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIGJvb2wgaXNXaGl0ZXNwYWNlLCBib29sIGlzQ29sbGFw
c2VkKQorICAgIDogSW5saW5lSXRlbShpbmxpbmVCb3gsIFR5cGU6OlRleHQpCisgICAgLCBtX3N0
YXJ0KHN0YXJ0KQorICAgICwgbV9sZW5ndGgobGVuZ3RoKQorICAgICwgbV9pc1doaXRlc3BhY2Uo
aXNXaGl0ZXNwYWNlKQorICAgICwgbV9pc0NvbGxhcHNlZChpc0NvbGxhcHNlZCkKK3sKK30KKwor
fQorfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9y
bWF0dGluZy9JbmxpbmVUZXh0SXRlbS5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZv
cm1hdHRpbmcvSW5saW5lVGV4dEl0ZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yODc0ZjI4YTMxZGNkMDBhYmVk
ZTg4OTc1NzQ1MTNjYmUyOWUxNmRlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lVGV4dEl0ZW0uaApAQCAtMCwwICsxLDYwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJ
TkdfQ09OVEVYVCkKKworI2luY2x1ZGUgIklubGluZUl0ZW0uaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworbmFtZXNwYWNlIExheW91dCB7CisKK2NsYXNzIElubGluZVRleHRJdGVtIDogcHVibGlj
IElubGluZUl0ZW0geworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIGNyZWF0ZUFuZEFwcGVuZFRl
eHRJdGVtcyhJbmxpbmVJdGVtcyYsIGNvbnN0IElubGluZUJveCYpOworCisgICAgSW5saW5lVGV4
dEl0ZW0oY29uc3QgSW5saW5lQm94JiwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwg
Ym9vbCBpc1doaXRlc3BhY2UsIGJvb2wgaXNDb2xsYXBzZWQpOworCisgICAgdW5zaWduZWQgc3Rh
cnQoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0OyB9CisgICAgdW5zaWduZWQgZW5kKCkgY29uc3Qg
eyByZXR1cm4gc3RhcnQoKSArIGxlbmd0aCgpOyB9CisgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29u
c3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KKworICAgIGJvb2wgaXNXaGl0ZXNwYWNlKCkgY29uc3Qg
eyByZXR1cm4gbV9pc1doaXRlc3BhY2U7IH0KKyAgICBib29sIGlzQ29sbGFwc2VkKCkgY29uc3Qg
eyByZXR1cm4gbV9pc0NvbGxhcHNlZDsgfQorCitwcml2YXRlOgorICAgIHVuc2lnbmVkIG1fc3Rh
cnQgeyAwIH07CisgICAgdW5zaWduZWQgbV9sZW5ndGggeyAwIH07CisgICAgYm9vbCBtX2lzV2hp
dGVzcGFjZSB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzQ29sbGFwc2VkIHsgZmFsc2UgfTsKK307
CisKK30KK30KKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19JTkxJTkVfSVRFTShJbmxpbmVUZXh0
SXRlbSwgaXNUZXh0KCkpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvdGV4dC9UZXh0VXRpbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvaW5saW5lZm9ybWF0dGluZy90ZXh0L1RleHRVdGlsLmNwcAppbmRleCAzNzVlZDcyM2Nk
MmIyOTg0ZGY3M2UwZTczMjExYmEwMjg0MThmZTA4Li5jMTM5ZWFiYTc1NzY5NmQzYzg3NmY0NDRk
Y2M5N2ZlYzdjM2E2M2ViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5l
Zm9ybWF0dGluZy90ZXh0L1RleHRVdGlsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
aW5saW5lZm9ybWF0dGluZy90ZXh0L1RleHRVdGlsLmNwcApAQCAtMzQsMTkgKzM0LDE5IEBACiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgTGF5b3V0IHsKIAotT3B0aW9uYWw8SXRlbVBv
c2l0aW9uPiBUZXh0VXRpbDo6aHlwaGVuUG9zaXRpb25CZWZvcmUoY29uc3QgSW5saW5lSXRlbSYs
IEl0ZW1Qb3NpdGlvbiwgdW5zaWduZWQpCitPcHRpb25hbDx1bnNpZ25lZD4gVGV4dFV0aWw6Omh5
cGhlblBvc2l0aW9uQmVmb3JlKGNvbnN0IElubGluZUl0ZW0mLCB1bnNpZ25lZCwgdW5zaWduZWQp
CiB7CiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAotTGF5b3V0VW5pdCBUZXh0VXRpbDo6
d2lkdGgoY29uc3QgSW5saW5lSXRlbSYgaW5saW5lVGV4dEl0ZW0sIEl0ZW1Qb3NpdGlvbiBmcm9t
LCBJdGVtUG9zaXRpb24gdG8sIExheW91dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0KQorTGF5b3V0
VW5pdCBUZXh0VXRpbDo6d2lkdGgoY29uc3QgSW5saW5lQm94JiBpbmxpbmVCb3gsIHVuc2lnbmVk
IGZyb20sIHVuc2lnbmVkIHRvLCBMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsTGVmdCkKIHsKLSAg
ICBhdXRvJiBzdHlsZSA9IGlubGluZVRleHRJdGVtLnN0eWxlKCk7CisgICAgYXV0byYgc3R5bGUg
PSBpbmxpbmVCb3guc3R5bGUoKTsKICAgICBhdXRvJiBmb250ID0gc3R5bGUuZm9udENhc2NhZGUo
KTsKICAgICBpZiAoIWZvbnQuc2l6ZSgpIHx8IGZyb20gPT0gdG8pCiAgICAgICAgIHJldHVybiAw
OwogCi0gICAgYXV0byB0ZXh0ID0gaW5saW5lVGV4dEl0ZW0udGV4dENvbnRlbnQoKTsKKyAgICBh
dXRvIHRleHQgPSBpbmxpbmVCb3gudGV4dENvbnRlbnQoKTsKICAgICBBU1NFUlQodG8gPD0gdGV4
dC5sZW5ndGgoKSk7CiAKICAgICBpZiAoZm9udC5pc0ZpeGVkUGl0Y2goKSkKQEAgLTcwLDcgKzcw
LDcgQEAgTGF5b3V0VW5pdCBUZXh0VXRpbDo6d2lkdGgoY29uc3QgSW5saW5lSXRlbSYgaW5saW5l
VGV4dEl0ZW0sIEl0ZW1Qb3NpdGlvbiBmcm9tLAogICAgIHJldHVybiBzdGQ6Om1heDxMYXlvdXRV
bml0PigwLCB3aWR0aCk7CiB9CiAKLUxheW91dFVuaXQgVGV4dFV0aWw6OmZpeGVkUGl0Y2hXaWR0
aChTdHJpbmcgdGV4dCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBJdGVtUG9zaXRpb24gZnJv
bSwgSXRlbVBvc2l0aW9uIHRvLCBMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsTGVmdCkKK0xheW91
dFVuaXQgVGV4dFV0aWw6OmZpeGVkUGl0Y2hXaWR0aChTdHJpbmcgdGV4dCwgY29uc3QgUmVuZGVy
U3R5bGUmIHN0eWxlLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bywgTGF5b3V0VW5pdCBjb250
ZW50TG9naWNhbExlZnQpCiB7CiAgICAgYXV0byYgZm9udCA9IHN0eWxlLmZvbnRDYXNjYWRlKCk7
CiAgICAgYXV0byBtb25vc3BhY2VDaGFyYWN0ZXJXaWR0aCA9IGZvbnQuc3BhY2VXaWR0aCgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvdGV4dC9U
ZXh0VXRpbC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvdGV4dC9U
ZXh0VXRpbC5oCmluZGV4IDgzNmE5ZWM0MGQzYTcyZWI5MjY3NGE1M2IzNzJlNTBkMmYzZGFjYjcu
LmQwZmVhNmFkMWRkZDcyOWQ3NGY5YmRmYjFiYzlkMjFjOTg3ZDJlMGMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL3RleHQvVGV4dFV0aWwuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy90ZXh0L1RleHRVdGlsLmgK
QEAgLTI4LDE4ICsyOCwxNyBAQAogI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhU
KQogCiAjaW5jbHVkZSAiSW5saW5lSXRlbS5oIgotI2luY2x1ZGUgIklubGluZVJ1blByb3ZpZGVy
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBMYXlvdXQgewogCiBjbGFzcyBU
ZXh0VXRpbCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIExheW91dFVuaXQgd2lkdGgoY29uc3QgSW5s
aW5lSXRlbSYsIEl0ZW1Qb3NpdGlvbiBmcm9tLCBJdGVtUG9zaXRpb24gdG8sIExheW91dFVuaXQg
Y29udGVudExvZ2ljYWxMZWZ0KTsKLSAgICBzdGF0aWMgT3B0aW9uYWw8SXRlbVBvc2l0aW9uPiBo
eXBoZW5Qb3NpdGlvbkJlZm9yZShjb25zdCBJbmxpbmVJdGVtJiwgSXRlbVBvc2l0aW9uIGZyb20s
IHVuc2lnbmVkIGxlbmd0aCk7CisgICAgc3RhdGljIExheW91dFVuaXQgd2lkdGgoY29uc3QgSW5s
aW5lQm94JiwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8sIExheW91dFVuaXQgY29udGVudExv
Z2ljYWxMZWZ0KTsKKyAgICBzdGF0aWMgT3B0aW9uYWw8dW5zaWduZWQ+IGh5cGhlblBvc2l0aW9u
QmVmb3JlKGNvbnN0IElubGluZUl0ZW0mLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW5ndGgp
OwogCiBwcml2YXRlOgotICAgIHN0YXRpYyBMYXlvdXRVbml0IGZpeGVkUGl0Y2hXaWR0aChTdHJp
bmcsIGNvbnN0IFJlbmRlclN0eWxlJiwgSXRlbVBvc2l0aW9uIGZyb20sIEl0ZW1Qb3NpdGlvbiB0
bywgTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbExlZnQpOworICAgIHN0YXRpYyBMYXlvdXRVbml0
IGZpeGVkUGl0Y2hXaWR0aChTdHJpbmcsIGNvbnN0IFJlbmRlclN0eWxlJiwgdW5zaWduZWQgZnJv
bSwgdW5zaWduZWQgdG8sIExheW91dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0KTsKIH07CiAKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9sYXlvdXR0cmVlL0xheW91dEJveC5o
IGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0Qm94LmgKaW5kZXggNjJm
YjBkMTQ4MDgxYzFiNGMzZjI4ZDA3ZTA5OGI3YTY1YmJhODEyMS4uYWQyZDNmODdiOGJiYWZkYzQ0
M2JiODM3Njg4N2E1ZDBmYzZkZmJkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2xheW91dHRyZWUvTGF5b3V0Qm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2xheW91
dHRyZWUvTGF5b3V0Qm94LmgKQEAgLTE1NSw3ICsxNTUsNyBAQCBwcml2YXRlOgogCiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFJlcGxhY2VkPiBtX3JlcGxhY2VkOwogCi0gICAgdW5zaWduZWQgbV9iYXNl
VHlwZUZsYWdzIDogNTsKKyAgICB1bnNpZ25lZCBtX2Jhc2VUeXBlRmxhZ3MgOiA2OwogfTsKIAog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0UmVw
bGFjZWQuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0UmVwbGFj
ZWQuY3BwCmluZGV4IGU5MDc0MjMxNjY2NTc1MTQyNzk5ZDY5ODdiZjZiYTIzZWNiNjkwYzcuLjRm
M2RkZGJmMTY0Y2I4ZDlkYjlhZTBmNjZkZWJhZWYyYjEzNmMwMzggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9sYXlvdXR0cmVlL0xheW91dFJlcGxhY2VkLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRSZXBsYWNlZC5jcHAKQEAgLTgwLDcg
KzgwLDcgQEAgTGF5b3V0VW5pdCBSZXBsYWNlZDo6aW50cmluc2ljUmF0aW8oKSBjb25zdAogICAg
IEFTU0VSVChoYXNJbnRyaW5zaWNSYXRpbygpIHx8IChoYXNJbnRyaW5zaWNXaWR0aCgpICYmIGhh
c0ludHJpbnNpY0hlaWdodCgpKSk7CiAgICAgaWYgKG1faW50cmluc2ljUmF0aW8pCiAgICAgICAg
IHJldHVybiAqbV9pbnRyaW5zaWNSYXRpbzsKLSAgICBpZiAobV9pbnRyaW5zaWNTaXplKQorICAg
IGlmIChtX2ludHJpbnNpY1NpemUgJiYgbV9pbnRyaW5zaWNTaXplLT5oZWlnaHQoKSkKICAgICAg
ICAgcmV0dXJuIG1faW50cmluc2ljU2l6ZS0+d2lkdGgoKSAvIG1faW50cmluc2ljU2l6ZS0+aGVp
Z2h0KCk7CiAgICAgcmV0dXJuIDE7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvbGF5b3V0dHJlZS9MYXlvdXRUcmVlQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvbGF5b3V0dHJlZS9MYXlvdXRUcmVlQnVpbGRlci5jcHAKaW5kZXggZTYxMDJkY2FlZDRhZjgz
NGZhMDBlYTRlNGI3MmU2Y2ZmYWI4Njk3Zi4uZDZmMmEzZWFiYTEzZDE1MDUyNjc5NzNkNTZjZjcz
YTY5NWY2MjEzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2xheW91dHRyZWUv
TGF5b3V0VHJlZUJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9sYXlvdXR0
cmVlL0xheW91dFRyZWVCdWlsZGVyLmNwcApAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShM
QVlPVVRfRk9STUFUVElOR19DT05URVhUKQogCiAjaW5jbHVkZSAiRGlzcGxheUJveC5oIgorI2lu
Y2x1ZGUgIkRpc3BsYXlSdW4uaCIKICNpbmNsdWRlICJJbmxpbmVGb3JtYXR0aW5nU3RhdGUuaCIK
ICNpbmNsdWRlICJMYXlvdXRCbG9ja0NvbnRhaW5lci5oIgogI2luY2x1ZGUgIkxheW91dEJveC5o
IgpAQCAtNDIsNiArNDMsNyBAQAogI2luY2x1ZGUgIlJlbmRlckVsZW1lbnQuaCIKICNpbmNsdWRl
ICJSZW5kZXJJbWFnZS5oIgogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgorI2luY2x1ZGUgIlJl
bmRlckxpbmVCcmVhay5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyVmlldy5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KQEAgLTYwLDYgKzYy
LDE1IEBAIHN0ZDo6dW5pcXVlX3B0cjxDb250YWluZXI+IFRyZWVCdWlsZGVyOjpjcmVhdGVMYXlv
dXRUcmVlKGNvbnN0IFJlbmRlclZpZXcmIHJlbmRlCiAgICAgcmV0dXJuIGluaXRpYWxDb250YWlu
aW5nQmxvY2s7CiB9CiAKK3N0YXRpYyBPcHRpb25hbDxMYXlvdXRTaXplPiBhY2N1bXVsYXRlZE9m
ZnNldEZvckluRmxvd1Bvc2l0aW9uZWRDb250aW51YXRpb24oY29uc3QgUmVuZGVyQm94JiBibG9j
aykKK3sKKyAgICAvLyBGSVhFOiBUaGlzIGlzIGEgd29ya2Fyb3VuZCBvZiB0aGUgY29udGludWF0
aW9uIGxvZ2ljIHdoZW4gdGhlIHJlbGF0aXZlbHkgcG9zaXRpb25lZCBwYXJlbnQgaW5saW5lIGJv
eAorICAgIC8vIGJlY29tZXMgYSBzaWJsaW5nIGJveCBvZiB0aGlzIGJsb2NrIGFuZCBvbmx5IHJl
YWNoYWJsZSB0aHJvdWdoIHRoZSBjb250aW51YXRpb24gbGluayB3aGljaCB3ZSBkb24ndCBoYXZl
IGhlcmUuCisgICAgaWYgKCFibG9jay5pc0Fub255bW91cygpIHx8ICFibG9jay5pc0luRmxvd1Bv
c2l0aW9uZWQoKSB8fCAhYmxvY2suaXNDb250aW51YXRpb24oKSkKKyAgICAgICAgcmV0dXJuIHsg
fTsKKyAgICByZXR1cm4gYmxvY2sucmVsYXRpdmVQb3NpdGlvbk9mZnNldCgpOworfQorCiB2b2lk
IFRyZWVCdWlsZGVyOjpjcmVhdGVTdWJUcmVlKGNvbnN0IFJlbmRlckVsZW1lbnQmIHJvb3RSZW5k
ZXJlciwgQ29udGFpbmVyJiByb290Q29udGFpbmVyKQogewogICAgIGF1dG8gZWxlbWVudEF0dHJp
YnV0ZXMgPSBbXSAoY29uc3QgUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIpIC0+IE9wdGlvbmFsPEJv
eDo6RWxlbWVudEF0dHJpYnV0ZXM+IHsKQEAgLTk3LDYgKzEwOCw5IEBAIHZvaWQgVHJlZUJ1aWxk
ZXI6OmNyZWF0ZVN1YlRyZWUoY29uc3QgUmVuZGVyRWxlbWVudCYgcm9vdFJlbmRlcmVyLCBDb250
YWluZXImIHJvCiAgICAgICAgIGlmIChpczxSZW5kZXJUZXh0PihjaGlsZCkpIHsKICAgICAgICAg
ICAgIGJveCA9IHN0ZDo6bWFrZV91bmlxdWU8SW5saW5lQm94PihPcHRpb25hbDxCb3g6OkVsZW1l
bnRBdHRyaWJ1dGVzPigpLCBSZW5kZXJTdHlsZTo6Y3JlYXRlQW5vbnltb3VzU3R5bGVXaXRoRGlz
cGxheShyb290UmVuZGVyZXIuc3R5bGUoKSwgRGlzcGxheVR5cGU6OklubGluZSkpOwogICAgICAg
ICAgICAgZG93bmNhc3Q8SW5saW5lQm94PigqYm94KS5zZXRUZXh0Q29udGVudChkb3duY2FzdDxS
ZW5kZXJUZXh0PihjaGlsZCkub3JpZ2luYWxUZXh0KCkpOworICAgICAgICB9IGVsc2UgaWYgKGlz
PFJlbmRlckxpbmVCcmVhaz4oY2hpbGQpKSB7CisgICAgICAgICAgICBhdXRvJiByZW5kZXJlciA9
IGRvd25jYXN0PFJlbmRlckxpbmVCcmVhaz4oY2hpbGQpOworICAgICAgICAgICAgYm94ID0gc3Rk
OjptYWtlX3VuaXF1ZTxMaW5lQnJlYWtCb3g+KGVsZW1lbnRBdHRyaWJ1dGVzKHJlbmRlcmVyKSwg
UmVuZGVyU3R5bGU6OmNsb25lKHJlbmRlcmVyLnN0eWxlKCkpKTsKICAgICAgICAgfSBlbHNlIGlm
IChpczxSZW5kZXJSZXBsYWNlZD4oY2hpbGQpKSB7CiAgICAgICAgICAgICBhdXRvJiByZW5kZXJl
ciA9IGRvd25jYXN0PFJlbmRlclJlcGxhY2VkPihjaGlsZCk7CiAgICAgICAgICAgICBhdXRvIGRp
c3BsYXkgPSByZW5kZXJlci5zdHlsZSgpLmRpc3BsYXkoKTsKQEAgLTExNSw5ICsxMjksMTUgQEAg
dm9pZCBUcmVlQnVpbGRlcjo6Y3JlYXRlU3ViVHJlZShjb25zdCBSZW5kZXJFbGVtZW50JiByb290
UmVuZGVyZXIsIENvbnRhaW5lciYgcm8KICAgICAgICAgfSBlbHNlIGlmIChpczxSZW5kZXJFbGVt
ZW50PihjaGlsZCkpIHsKICAgICAgICAgICAgIGF1dG8mIHJlbmRlcmVyID0gZG93bmNhc3Q8UmVu
ZGVyRWxlbWVudD4oY2hpbGQpOwogICAgICAgICAgICAgYXV0byBkaXNwbGF5ID0gcmVuZGVyZXIu
c3R5bGUoKS5kaXNwbGF5KCk7Ci0gICAgICAgICAgICBpZiAoZGlzcGxheSA9PSBEaXNwbGF5VHlw
ZTo6QmxvY2spCi0gICAgICAgICAgICAgICAgYm94ID0gc3RkOjptYWtlX3VuaXF1ZTxCbG9ja0Nv
bnRhaW5lcj4oZWxlbWVudEF0dHJpYnV0ZXMocmVuZGVyZXIpLCBSZW5kZXJTdHlsZTo6Y2xvbmUo
cmVuZGVyZXIuc3R5bGUoKSkpOwotICAgICAgICAgICAgZWxzZSBpZiAoZGlzcGxheSA9PSBEaXNw
bGF5VHlwZTo6SW5saW5lKQorICAgICAgICAgICAgaWYgKGRpc3BsYXkgPT0gRGlzcGxheVR5cGU6
OkJsb2NrKSB7CisgICAgICAgICAgICAgICAgaWYgKGF1dG8gb2Zmc2V0ID0gYWNjdW11bGF0ZWRP
ZmZzZXRGb3JJbkZsb3dQb3NpdGlvbmVkQ29udGludWF0aW9uKGRvd25jYXN0PFJlbmRlckJveD4o
cmVuZGVyZXIpKSkgeworICAgICAgICAgICAgICAgICAgICBhdXRvIHN0eWxlID0gUmVuZGVyU3R5
bGU6OmNsb25lUHRyKHJlbmRlcmVyLnN0eWxlKCkpOworICAgICAgICAgICAgICAgICAgICBzdHls
ZS0+c2V0VG9wKHsgb2Zmc2V0LT5oZWlnaHQoKSwgRml4ZWQgfSk7CisgICAgICAgICAgICAgICAg
ICAgIHN0eWxlLT5zZXRMZWZ0KHsgb2Zmc2V0LT53aWR0aCgpLCBGaXhlZCB9KTsKKyAgICAgICAg
ICAgICAgICAgICAgYm94ID0gc3RkOjptYWtlX3VuaXF1ZTxCbG9ja0NvbnRhaW5lcj4oZWxlbWVu
dEF0dHJpYnV0ZXMocmVuZGVyZXIpLCBXVEZNb3ZlKCpzdHlsZSkpOworICAgICAgICAgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBib3ggPSBzdGQ6Om1ha2VfdW5pcXVlPEJsb2Nr
Q29udGFpbmVyPihlbGVtZW50QXR0cmlidXRlcyhyZW5kZXJlciksIFJlbmRlclN0eWxlOjpjbG9u
ZShyZW5kZXJlci5zdHlsZSgpKSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGRpc3BsYXkgPT0g
RGlzcGxheVR5cGU6OklubGluZSkKICAgICAgICAgICAgICAgICBib3ggPSBzdGQ6Om1ha2VfdW5p
cXVlPElubGluZUNvbnRhaW5lcj4oZWxlbWVudEF0dHJpYnV0ZXMocmVuZGVyZXIpLCBSZW5kZXJT
dHlsZTo6Y2xvbmUocmVuZGVyZXIuc3R5bGUoKSkpOwogICAgICAgICAgICAgZWxzZSBpZiAoZGlz
cGxheSA9PSBEaXNwbGF5VHlwZTo6SW5saW5lQmxvY2spCiAgICAgICAgICAgICAgICAgYm94ID0g
c3RkOjptYWtlX3VuaXF1ZTxJbmxpbmVDb250YWluZXI+KGVsZW1lbnRBdHRyaWJ1dGVzKHJlbmRl
cmVyKSwgUmVuZGVyU3R5bGU6OmNsb25lKHJlbmRlcmVyLnN0eWxlKCkpKTsKQEAgLTE1NywyMCAr
MTc3LDMwIEBAIHZvaWQgVHJlZUJ1aWxkZXI6OmNyZWF0ZVN1YlRyZWUoY29uc3QgUmVuZGVyRWxl
bWVudCYgcm9vdFJlbmRlcmVyLCBDb250YWluZXImIHJvCiAjaWYgRU5BQkxFKFRSRUVfREVCVUdH
SU5HKQogc3RhdGljIHZvaWQgb3V0cHV0SW5saW5lUnVucyhUZXh0U3RyZWFtJiBzdHJlYW0sIGNv
bnN0IExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgY29uc3QgQ29udGFpbmVyJiBpbmxpbmVGb3Jt
YXR0aW5nUm9vdCwgdW5zaWduZWQgZGVwdGgpCiB7Ci0gICAgYXV0byYgaW5saW5lRm9ybWF0dGlu
Z1N0YXRlID0gbGF5b3V0U3RhdGUuZXN0YWJsaXNoZWRGb3JtYXR0aW5nU3RhdGUoaW5saW5lRm9y
bWF0dGluZ1Jvb3QpOwotICAgIEFTU0VSVChpczxJbmxpbmVGb3JtYXR0aW5nU3RhdGU+KGlubGlu
ZUZvcm1hdHRpbmdTdGF0ZSkpOwotICAgIGF1dG8mIGlubGluZVJ1bnMgPSBkb3duY2FzdDxJbmxp
bmVGb3JtYXR0aW5nU3RhdGU+KGlubGluZUZvcm1hdHRpbmdTdGF0ZSkuaW5saW5lUnVucygpOwor
ICAgIGF1dG8mIGlubGluZUZvcm1hdHRpbmdTdGF0ZSA9IGRvd25jYXN0PElubGluZUZvcm1hdHRp
bmdTdGF0ZT4obGF5b3V0U3RhdGUuZXN0YWJsaXNoZWRGb3JtYXR0aW5nU3RhdGUoaW5saW5lRm9y
bWF0dGluZ1Jvb3QpKTsKKyAgICBhdXRvJiBpbmxpbmVSdW5zID0gaW5saW5lRm9ybWF0dGluZ1N0
YXRlLmlubGluZVJ1bnMoKTsKKyAgICBhdXRvJiBsaW5lQm94ZXMgPSBpbmxpbmVGb3JtYXR0aW5n
U3RhdGUubGluZUJveGVzKCk7CisKKyAgICB1bnNpZ25lZCBwcmludGVkQ2hhcmFjdGVycyA9IDA7
CisgICAgd2hpbGUgKCsrcHJpbnRlZENoYXJhY3RlcnMgPD0gZGVwdGggKiAzKQorICAgICAgICBz
dHJlYW0gPDwgIiAiOworCisgICAgc3RyZWFtIDw8ICJsaW5lcyBhcmUgLT4gIjsKKyAgICBmb3Ig
KGF1dG8mIGxpbmVCb3ggOiBsaW5lQm94ZXMpCisgICAgICAgIHN0cmVhbSA8PCAiWyIgPDwgbGlu
ZUJveC5sb2dpY2FsTGVmdCgpIDw8ICIsIiA8PCBsaW5lQm94LmxvZ2ljYWxUb3AoKSA8PCAiICIg
PDwgbGluZUJveC5sb2dpY2FsV2lkdGgoKSA8PCAieCIgPDwgbGluZUJveC5sb2dpY2FsSGVpZ2h0
KCkgPDwgIl0gIjsKKyAgICBzdHJlYW0ubmV4dExpbmUoKTsKIAogICAgIGZvciAoYXV0byYgaW5s
aW5lUnVuIDogaW5saW5lUnVucykgewogICAgICAgICB1bnNpZ25lZCBwcmludGVkQ2hhcmFjdGVy
cyA9IDA7Ci0gICAgICAgIHdoaWxlICgrK3ByaW50ZWRDaGFyYWN0ZXJzIDw9IGRlcHRoICogMikK
KyAgICAgICAgd2hpbGUgKCsrcHJpbnRlZENoYXJhY3RlcnMgPD0gZGVwdGggKiAzKQogICAgICAg
ICAgICAgc3RyZWFtIDw8ICIgIjsKLSAgICAgICAgc3RyZWFtIDw8ICJydW4iOwotICAgICAgICBp
ZiAoaW5saW5lUnVuLnRleHRDb250ZXh0KCkpCi0gICAgICAgICAgICBzdHJlYW0gPDwgIigiIDw8
IGlubGluZVJ1bi50ZXh0Q29udGV4dCgpLT5zdGFydCgpIDw8ICIsICIgPDwgaW5saW5lUnVuLnRl
eHRDb250ZXh0KCktPnN0YXJ0KCkgKyBpbmxpbmVSdW4udGV4dENvbnRleHQoKS0+bGVuZ3RoKCkg
PDwgIikgIjsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3RyZWFtIDw8ICIoeCwgeCkgIjsK
LSAgICAgICAgc3RyZWFtIDw8ICJhdCBbIiA8PCBpbmxpbmVSdW4ubG9naWNhbExlZnQoKSA8PCAi
LCAiIDw8IGlubGluZVJ1bi5sb2dpY2FsVG9wKCkgPDwgIl0gc2l6ZSBbIiA8PCBpbmxpbmVSdW4u
bG9naWNhbFdpZHRoKCkgPDwgIiAiIDw8IGlubGluZVJ1bi5sb2dpY2FsSGVpZ2h0KCkgPDwgIl0i
OworICAgICAgICBpZiAoaW5saW5lUnVuLT50ZXh0Q29udGV4dCgpKQorICAgICAgICAgICAgc3Ry
ZWFtIDw8ICJpbmxpbmUgdGV4dCBib3giOworICAgICAgICBlbHNlICAKKyAgICAgICAgICAgIHN0
cmVhbSA8PCAiaW5saW5lIGJveCI7CisgICAgICAgIHN0cmVhbSA8PCAiIGF0ICgiIDw8IGlubGlu
ZVJ1bi0+bG9naWNhbExlZnQoKSA8PCAiLCIgPDwgaW5saW5lUnVuLT5sb2dpY2FsVG9wKCkgPDwg
Iikgc2l6ZSAiIDw8IGlubGluZVJ1bi0+bG9naWNhbFdpZHRoKCkgPDwgIngiIDw8IGlubGluZVJ1
bi0+bG9naWNhbEhlaWdodCgpOworICAgICAgICBpZiAoaW5saW5lUnVuLT50ZXh0Q29udGV4dCgp
KQorICAgICAgICAgICAgc3RyZWFtIDw8ICIgcnVuKCIgPDwgaW5saW5lUnVuLT50ZXh0Q29udGV4
dCgpLT5zdGFydCgpIDw8ICIsICIgPDwgaW5saW5lUnVuLT50ZXh0Q29udGV4dCgpLT5lbmQoKSA8
PCAiKSI7CiAgICAgICAgIHN0cmVhbS5uZXh0TGluZSgpOwogICAgIH0KIH0KQEAgLTE4MSwzMyAr
MjExLDQ2IEBAIHN0YXRpYyB2b2lkIG91dHB1dExheW91dEJveChUZXh0U3RyZWFtJiBzdHJlYW0s
IGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBEaXNwCiAgICAgd2hpbGUgKCsrcHJpbnRlZENo
YXJhY3RlcnMgPD0gZGVwdGggKiAyKQogICAgICAgICBzdHJlYW0gPDwgIiAiOwogCi0gICAgaWYg
KGlzPElubGluZUNvbnRhaW5lcj4obGF5b3V0Qm94KSkKLSAgICAgICAgc3RyZWFtIDw8ICJpbmxp
bmUgY29udGFpbmVyIjsKLSAgICBlbHNlIGlmIChpczxJbmxpbmVCb3g+KGxheW91dEJveCkpIHsK
KyAgICBpZiAobGF5b3V0Qm94LmlzRmxvYXRpbmdQb3NpdGlvbmVkKCkpCisgICAgICAgIHN0cmVh
bSA8PCAiW2Zsb2F0XSAiOworCisgICAgaWYgKGlzPElubGluZUNvbnRhaW5lcj4obGF5b3V0Qm94
KSkgeworICAgICAgICAvLyBGSVhNRTogZml4IG5hbWVzCisgICAgICAgIGlmIChsYXlvdXRCb3gu
aXNJbmxpbmVCbG9ja0JveCgpKQorICAgICAgICAgICAgc3RyZWFtIDw8ICJESVYgaW5saW5lLWJs
b2NrIGNvbnRhaW5lciI7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHN0cmVhbSA8PCAiU1BB
TiBpbmxpbmUgY29udGFpbmVyIjsKKyAgICB9IGVsc2UgaWYgKGlzPElubGluZUJveD4obGF5b3V0
Qm94KSkgewogICAgICAgICBpZiAobGF5b3V0Qm94LnJlcGxhY2VkKCkpCi0gICAgICAgICAgICBz
dHJlYW0gPDwgImlubGluZSByZXBsYWNlZCBib3giOwotICAgICAgICBlbHNlIGlmIChkb3duY2Fz
dDxJbmxpbmVCb3g+KGxheW91dEJveCkuaGFzVGV4dENvbnRlbnQoKSkgewotICAgICAgICAgICAg
YXV0byB0ZXh0Q29udGVudCA9IGRvd25jYXN0PElubGluZUJveD4obGF5b3V0Qm94KS50ZXh0Q29u
dGVudCgpOwotICAgICAgICAgICAgc3RyZWFtIDw8ICJpbmxpbmUgdGV4dCBbXCIiIDw8IHRleHRD
b250ZW50LnV0ZjgoKS5kYXRhKCkgPDwgIlwiXSI7Ci0gICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgc3RyZWFtIDw8ICJJTUcgcmVwbGFjZWQgaW5saW5lIGJveCI7CisgICAgICAgIGVsc2UgaWYg
KGxheW91dEJveC5pc0Fub255bW91cygpKQorICAgICAgICAgICAgc3RyZWFtIDw8ICJhbm9ueW1v
dXMgaW5saW5lIGJveCI7CisgICAgICAgIGVsc2UgaWYgKGlzPExpbmVCcmVha0JveD4obGF5b3V0
Qm94KSkKKyAgICAgICAgICAgIHN0cmVhbSA8PCAiQlIgbGluZSBicmVhayI7CisgICAgICAgIGVs
c2UKICAgICAgICAgICAgIHN0cmVhbSA8PCAiaW5saW5lIGJveCI7CiAgICAgfSBlbHNlIGlmIChp
czxCbG9ja0NvbnRhaW5lcj4obGF5b3V0Qm94KSkgewogICAgICAgICBpZiAoIWxheW91dEJveC5w
YXJlbnQoKSkKLSAgICAgICAgICAgIHN0cmVhbSA8PCAiaW5pdGlhbCAiOwotICAgICAgICBzdHJl
YW0gPDwgImJsb2NrIGNvbnRhaW5lciI7CisgICAgICAgICAgICBzdHJlYW0gPDwgIkluaXRpYWwi
OworICAgICAgICBlbHNlIGlmIChsYXlvdXRCb3guaXNEb2N1bWVudEJveCgpKQorICAgICAgICAg
ICAgc3RyZWFtIDw8ICJIVE1MIjsKKyAgICAgICAgZWxzZSBpZiAobGF5b3V0Qm94LmlzQm9keUJv
eCgpKQorICAgICAgICAgICAgc3RyZWFtIDw8ICJCT0RZIjsKKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAvLyBGSVhNRQorICAgICAgICAgICAgc3RyZWFtIDw8ICJESVYiOworICAgICAgICB9
CisgICAgICAgIHN0cmVhbSA8PCAiIGJsb2NrIGNvbnRhaW5lciI7CiAgICAgfSBlbHNlIGlmIChs
YXlvdXRCb3guaXNCbG9ja0xldmVsQm94KCkpCiAgICAgICAgIHN0cmVhbSA8PCAiYmxvY2sgYm94
IjsKICAgICBlbHNlCiAgICAgICAgIHN0cmVhbSA8PCAiYm94IjsKICAgICAvLyBGSVhNRTogSW5s
aW5lIHRleHQgcnVucyBkb24ndCBjcmVhdGUgZGlzcGxheSBib3hlcyB5ZXQuCi0gICAgaWYgKGRp
c3BsYXlCb3gpIHsKLSAgICAgICAgLy8gRklYTUU6IGRpc3BsYXkgYm94IGlzIG5vdCBjb21wbGV0
ZWx5IHNldCB5ZXQuCi0gICAgICAgIGlmICgoaXM8SW5saW5lQm94PihsYXlvdXRCb3gpIHx8IGlz
PElubGluZUNvbnRhaW5lcj4obGF5b3V0Qm94KSkgJiYgIWxheW91dEJveC5pc0Zsb2F0aW5nUG9z
aXRpb25lZCgpKQotICAgICAgICAgICAgc3RyZWFtIDw8ICIgYXQgWyIgPDwgIi4iIDw8ICIgIiA8
PCAiLiIgPDwgIl0gc2l6ZSBbIiA8PCBkaXNwbGF5Qm94LT53aWR0aCgpIDw8ICIgIiA8PCBkaXNw
bGF5Qm94LT5oZWlnaHQoKSA8PCAiXSI7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0cmVh
bSA8PCAiIGF0IFsiIDw8IGRpc3BsYXlCb3gtPmxlZnQoKSA8PCAiICIgPDwgZGlzcGxheUJveC0+
dG9wKCkgPDwgIl0gc2l6ZSBbIiA8PCBkaXNwbGF5Qm94LT53aWR0aCgpIDw8ICIgIiA8PCBkaXNw
bGF5Qm94LT5oZWlnaHQoKSA8PCAiXSI7Ci0gICAgfQotICAgIHN0cmVhbSA8PCAiIFsiIDw8ICZs
YXlvdXRCb3ggPDwgIl0iOworICAgIGlmIChkaXNwbGF5Qm94KQorICAgICAgICBzdHJlYW0gPDwg
IiBhdCAoIiA8PCBkaXNwbGF5Qm94LT5sZWZ0KCkgPDwgIiwiIDw8IGRpc3BsYXlCb3gtPnRvcCgp
IDw8ICIpIHNpemUgIiA8PCBkaXNwbGF5Qm94LT53aWR0aCgpIDw8ICJ4IiA8PCBkaXNwbGF5Qm94
LT5oZWlnaHQoKTsKKyAgICBzdHJlYW0gPDwgIiBsYXlvdXQgYm94LT4oIiA8PCAmbGF5b3V0Qm94
IDw8ICIpIjsKKyAgICBpZiAoaXM8SW5saW5lQm94PihsYXlvdXRCb3gpICYmIGRvd25jYXN0PElu
bGluZUJveD4obGF5b3V0Qm94KS5oYXNUZXh0Q29udGVudCgpKQorICAgICAgICBzdHJlYW0gPDwg
IiB0ZXh0IGNvbnRlbnQgW1wiIiA8PCBkb3duY2FzdDxJbmxpbmVCb3g+KGxheW91dEJveCkudGV4
dENvbnRlbnQoKS51dGY4KCkuZGF0YSgpIDw8ICJcIl0iOwogCiAgICAgc3RyZWFtLm5leHRMaW5l
KCk7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>370549</attachid>
            <date>2019-05-23 19:33:04 -0700</date>
            <delta_ts>2019-05-25 11:52:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-197198-20190523193303.patch</filename>
            <type>text/plain</type>
            <size>203888</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ1NjEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjcxOGQ5YmJkZGJkZDU1
ZmRhODlmNzQwZDAzZjFmMzU3YjQ5NzQ5MC4uOTgwMzQwNDE4Y2MxNGMyM2M0ZmYzNWVkYzk1MDVm
MmE0ZTFlMTA3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwMiBAQAorMjAxOS0wNS0yMSAgWmFs
YW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgorCisgICAgICAgIFtMRkNdW0lGQ10gSW50cm9k
dWNlIERpc3BsYXlSdW4gdG8gZGlzcGxheSB0cmVlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTcxOTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBzaW1wbGUgaW5saW5lIGxheW91dCBpbXBsZW1l
bnRhdGlvbi4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBsYXlvdXQvRm9ybWF0dGluZ0NvbnRl
eHRHZW9tZXRyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OmNvbnRlbnRIZWlnaHRG
b3JGb3JtYXR0aW5nQ29udGV4dFJvb3QpOgorICAgICAgICAqIGxheW91dC9WZXJpZmljYXRpb24u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjphcmVFc3NlbnRpYWxseUVxdWFsKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6b3V0cHV0TWlzbWF0Y2hpbmdTaW1wbGVMaW5lSW5mb3Jt
YXRpb25JZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OmNoZWNrRm9yTWF0Y2hp
bmdOb25UZXh0UnVucyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OmNoZWNrRm9yTWF0Y2hp
bmdUZXh0UnVucyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Om91dHB1dE1pc21hdGNoaW5n
Q29tcGxleExpbmVJbmZvcm1hdGlvbklmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6b3V0cHV0TWlzbWF0Y2hpbmdCbG9ja0JveEluZm9ybWF0aW9uSWZOZWVkZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpyZXNvbHZlRm9yUmVsYXRpdmVQb3NpdGlvbklmTmVlZGVkKTog
RGVsZXRlZC4KKyAgICAgICAgKiBsYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrRm9ybWF0dGlu
Z0NvbnRleHRHZW9tZXRyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9y
bWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbkZsb3dOb25SZXBsYWNlZEhlaWdodEFuZE1hcmdp
bik6CisgICAgICAgICogbGF5b3V0L2Rpc3BsYXl0cmVlL0Rpc3BsYXlCb3guY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheTo6Qm94OjptYXJnaW5Cb3ggY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheTo6Qm94Ojpub25Db2xsYXBzZWRNYXJnaW5Cb3ggY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheTo6Qm94Ojpib3JkZXJCb3ggY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheTo6Qm94OjpwYWRkaW5nQm94IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXk6OkJveDo6Y29udGVudEJveCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5OjpCb3g6OlJlY3Q6OlJlY3QpOiBEZWxldGVkLgorICAgICAgICAqIGxheW91dC9kaXNwbGF5
dHJlZS9EaXNwbGF5Qm94Lmg6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3g6OnJlY3RX
aXRoTWFyZ2luIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveDo6aG9yaXpv
bnRhbE1hcmdpbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3g6OlJlY3Q6
OmludGVyc2VjdHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6
Qm94OjpSZWN0OjppbnZhbGlkYXRlVG9wKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXk6OkJveDo6UmVjdDo6aW52YWxpZGF0ZUxlZnQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheTo6Qm94OjpSZWN0OjppbnZhbGlkYXRlV2lkdGgpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Qm94OjpSZWN0OjppbnZhbGlkYXRlSGVpZ2h0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveDo6UmVjdDo6aGFzVmFsaWRQb3Np
dGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3g6OlJl
Y3Q6Omhhc1ZhbGlkU2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5OjpCb3g6OlJlY3Q6Omhhc1ZhbGlkR2VvbWV0cnkgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheTo6Qm94OjpSZWN0OjppbnZhbGlkYXRlUG9zaXRpb24pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Qm94OjpSZWN0OjpzZXRIYXNWYWxpZFBv
c2l0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveDo6UmVjdDo6
c2V0SGFzVmFsaWRTaXplKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJv
eDo6UmVjdDo6dG9wIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6
OkJveDo6UmVjdDo6bGVmdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5OjpCb3g6OlJlY3Q6OmJvdHRvbSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5OjpCb3g6OlJlY3Q6OnJpZ2h0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXk6OkJveDo6UmVjdDo6dG9wTGVmdCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3g6OlJlY3Q6OmJvdHRvbVJpZ2h0IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveDo6UmVjdDo6c2l6ZSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3g6OlJlY3Q6OndpZHRoIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveDo6UmVjdDo6aGVp
Z2h0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveDo6UmVj
dDo6c2V0VG9wTGVmdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3g6
OlJlY3Q6OnNldFRvcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3g6
OlJlY3Q6OnNldExlZnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Qm94
OjpSZWN0OjpzZXRXaWR0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpC
b3g6OlJlY3Q6OnNldEhlaWdodCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
OjpCb3g6OlJlY3Q6OnNldFNpemUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eTo6Qm94OjpSZWN0OjpzaGlmdExlZnRUbyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5OjpCb3g6OlJlY3Q6OnNoaWZ0UmlnaHRUbyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5OjpCb3g6OlJlY3Q6OnNoaWZ0VG9wVG8pOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheTo6Qm94OjpSZWN0OjpzaGlmdEJvdHRvbVRvKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveDo6UmVjdDo6bW92ZUhvcml6b250YWxseSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3g6OlJlY3Q6Om1vdmVWZXJ0aWNh
bGx5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveDo6UmVjdDo6ZXhw
YW5kKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveDo6UmVjdDo6Y2xv
bmUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Qm94OjpSZWN0
OjpvcGVyYXRvciBMYXlvdXRSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBsYXlvdXQv
ZGlzcGxheXRyZWUvRGlzcGxheVJlY3QuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5OjpSZWN0OjpleHBhbmRIb3Jpem9udGFsbHkpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eTo6UmVjdDo6ZXhwYW5kVmVydGljYWxseSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpS
ZWN0OjppbnRlcnNlY3RzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJlY3Q6
OmludmFsaWRhdGVUb3ApOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UmVjdDo6aW52YWxp
ZGF0ZUxlZnQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UmVjdDo6aW52YWxpZGF0ZVdp
ZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJlY3Q6OmludmFsaWRhdGVIZWlnaHQp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UmVjdDo6aGFzVmFsaWRQb3NpdGlvbiBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSZWN0OjpoYXNWYWxpZFNpemUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UmVjdDo6aGFzVmFsaWRHZW9tZXRyeSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSZWN0OjpSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXk6OlJlY3Q6OmludmFsaWRhdGVQb3NpdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5OjpSZWN0OjpzZXRIYXNWYWxpZFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXk6OlJlY3Q6OnNldEhhc1ZhbGlkU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5OjpSZWN0Ojp0b3AgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UmVj
dDo6bGVmdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSZWN0Ojpib3R0b20g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UmVjdDo6cmlnaHQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UmVjdDo6dG9wTGVmdCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5OjpSZWN0Ojpib3R0b21SaWdodCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5OjpSZWN0OjpzaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXk6OlJlY3Q6OndpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJl
Y3Q6OmhlaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSZWN0OjpzZXRU
b3BMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJlY3Q6OnNldFRvcCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSZWN0OjpzZXRMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXk6OlJlY3Q6OnNldFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJl
Y3Q6OnNldEhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSZWN0OjpzZXRTaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJlY3Q6OnNoaWZ0TGVmdFRvKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJlY3Q6OnNoaWZ0UmlnaHRUbyk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5OjpSZWN0OjpzaGlmdFRvcFRvKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXk6OlJlY3Q6OnNoaWZ0Qm90dG9tVG8pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UmVj
dDo6bW92ZUhvcml6b250YWxseSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSZWN0Ojpt
b3ZlVmVydGljYWxseSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSZWN0OjpleHBhbmQp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UmVjdDo6Y2xvbmUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheTo6UmVjdDo6b3BlcmF0b3IgTGF5b3V0UmVjdCBjb25zdCk6Cisg
ICAgICAgICogbGF5b3V0L2Rpc3BsYXl0cmVlL0Rpc3BsYXlSdW4uaDogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZVJ1bi5oLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheTo6UnVuOjpUZXh0Q29udGV4dDo6c3RhcnQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UnVuOjpUZXh0Q29udGV4dDo6ZW5kIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJ1bjo6VGV4dENvbnRleHQ6Omxlbmd0aCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSdW46OlRleHRDb250ZXh0OjpleHBhbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UnVuOjpsb2dpY2FsVG9wTGVmdCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSdW46OmxvZ2ljYWxMZWZ0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJ1bjo6bG9naWNhbFJpZ2h0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXk6OlJ1bjo6bG9naWNhbFRvcCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5OjpSdW46OmxvZ2ljYWxCb3R0b20gY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheTo6UnVuOjpsb2dpY2FsV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheTo6UnVuOjpsb2dpY2FsSGVpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXk6OlJ1bjo6c2V0TG9naWNhbFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6
OlJ1bjo6c2V0TG9naWNhbFRvcCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSdW46OnNl
dExvZ2ljYWxMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJ1bjo6c2V0TG9naWNh
bFJpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJ1bjo6bW92ZVZlcnRpY2FsbHkp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UnVuOjptb3ZlSG9yaXpvbnRhbGx5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJ1bjo6ZXhwYW5kVmVydGljYWxseSk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5OjpSdW46OmV4cGFuZEhvcml6b250YWxseSk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5OjpSdW46OnNldFRleHRDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXk6OlJ1bjo6dGV4dENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6
UnVuOjp0ZXh0Q29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSdW46
OlJ1bik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSdW46OlRleHRDb250ZXh0OjpUZXh0
Q29udGV4dCk6CisgICAgICAgICogbGF5b3V0L2Zsb2F0cy9GbG9hdEF2b2lkZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGbG9hdEF2b2lkZXI6OnJlY3RJbkNvbnRhaW5pbmdCbG9j
ayBjb25zdCk6CisgICAgICAgICogbGF5b3V0L2Zsb2F0cy9GbG9hdEF2b2lkZXIuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6RmxvYXRBdm9pZGVyOjpyZWN0IGNvbnN0KToKKyAgICAgICAg
KiBsYXlvdXQvZmxvYXRzL0Zsb2F0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
RmxvYXRCb3g6OnJlY3QgY29uc3QpOgorICAgICAgICAqIGxheW91dC9mbG9hdHMvRmxvYXRCb3gu
aDoKKyAgICAgICAgKiBsYXlvdXQvZmxvYXRzL0Zsb2F0aW5nQ29udGV4dC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OkZsb2F0UGFpcjo6aW50ZXJzZWN0cyBjb25zdCk6CisgICAgICAg
ICogbGF5b3V0L2Zsb2F0cy9GbG9hdGluZ1N0YXRlLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkZsb2F0aW5nU3RhdGU6OkZsb2F0SXRlbTo6cmVjdFdpdGhNYXJnaW4gY29uc3QpOgorICAg
ICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6Omxh
eW91dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdD
b250ZXh0Ojpjb21wdXRlSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0Ojppbml0aWFsaXplTWFy
Z2luQm9yZGVyQW5kUGFkZGluZ0ZvckdlbmVyaWNJbmxpbmVCb3ggY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZU1hcmdpbkJv
cmRlckFuZFBhZGRpbmdGb3JJbmxpbmVDb250YWluZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUludHJpbnNpY1dpZHRo
Rm9yRmxvYXRCb3ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dDo6Y29tcHV0ZUludHJpbnNpY1dpZHRoRm9ySW5saW5lQmxvY2sgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29t
cHV0ZUhvcml6b250YWxNYXJnaW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJ
bmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRSb290IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNv
bGxlY3RJbmxpbmVDb250ZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVNYXJnaW4gY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjphZGREZXRhY2hpbmdSdWxlcyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OmNyZWF0ZUFuZEFwcGVuZElubGluZUl0ZW0pOiBEZWxldGVk
LgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250
ZXh0Lmg6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0
OjpMaW5lTGF5b3V0OjpsYXlvdXRTdGF0ZSBjb25zdCk6CisgICAgICAgICogbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6aGFsZkxlYWRpbmdNZXRyaWNzKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6TGluZTo6YXZhaWxhYmxlV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpMaW5lOjpjb250ZW50TG9naWNhbFJpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6TGluZTo6Y29udGVudExvZ2ljYWxXaWR0aCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6OmxvZ2ljYWxUb3AgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpMaW5lOjpsb2dpY2FsTGVmdCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkxpbmU6OmxvZ2ljYWxSaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OkxpbmU6OmxvZ2ljYWxCb3R0b20gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpMaW5lOjpsb2dpY2FsV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpMaW5lOjpsb2dpY2FsSGVpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
TGluZTo6TGluZUl0ZW06OkxpbmVJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGlu
ZTo6TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6OnJlc2V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6TGluZTo6Y2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpMaW5lOjpyZW1vdmVUcmFpbGluZ1RyaW1tYWJsZUNvbnRlbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpMaW5lOjptb3ZlTG9naWNhbExlZnQpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpMaW5lOjptb3ZlTG9naWNhbFJpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6aXNUcmltbWFibGVDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZTo6
dHJhaWxpbmdUcmltbWFibGVXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkxpbmU6Omhhc0NvbnRlbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5l
OjphcHBlbmROb25CcmVha2FibGVTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Okxp
bmU6OmFwcGVuZElubGluZUNvbnRhaW5lclN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6TGluZTo6YXBwZW5kSW5saW5lQ29udGFpbmVyRW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6TGluZTo6YXBwZW5kVGV4dENvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpMaW5lOjphcHBlbmROb25UZXh0Q29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkxpbmU6OmFwcGVuZEhhcmRMaW5lQnJlYWspOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpV
bmNvbW1pdHRlZENvbnRlbnQ6OmlzRW1wdHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpVbmNvbW1pdHRlZENvbnRlbnQ6OndpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6VW5jb21taXR0ZWRDb250ZW50OjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpVbmNvbW1pdHRlZENvbnRlbnQ6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OkxpbmVMYXlvdXQpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91
dDo6aW5pdGlhbGl6ZUxpbmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxp
bmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6bGF5b3V0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OmNs
b3NlTGluZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRp
bmdDb250ZXh0OjpMaW5lTGF5b3V0OjpoYW5kbGVGbG9hdCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0Ojpjb21taXRJ
bmxpbmVJdGVtVG9MaW5lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6aG9yaXpv
bnRhbEFkanVzdG1lbnRGb3JBbGlnbm1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJ
bmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6YWxpZ25SdW5zIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZTo6aXNDbG9zZWQgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjppc0ZpcnN0TGluZSBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6OnJ1bnMpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjpjb250ZW50TG9naWNhbExlZnQgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjpsYXN0UnVuVHlwZSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6OmluaXQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjphZGp1c3RMb2dpY2FsTGVmdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6OmFkanVzdExvZ2ljYWxS
aWdodCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6OmFwcGVuZENv
bnRlbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dDo6TGluZUxheW91dDo6aW5pdGlhbGl6ZU5ld0xpbmUgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGlu
ZUxheW91dDo6c3BsaXRJbmxpbmVSdW5JZk5lZWRlZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0Ojpj
cmVhdGVGaW5hbFJ1bnMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6cG9zdFByb2Nlc3NJbmxpbmVS
dW5zIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9y
bWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OmFwcGVuZENvbnRlbnRUb0xpbmUgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dDo6TGluZUxheW91dDo6Y29tcHV0ZUZsb2F0UG9zaXRpb24gY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91
dDo6cGxhY2VJbkZsb3dQb3NpdGlvbmVkQ2hpbGRyZW4gY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjphZGp1c3RlZExpbmVMb2dpY2FsTGVmdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5
b3V0OjpqdXN0aWZ5UnVucyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Oklu
bGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0Ojpjb21wdXRlRXhwYW5zaW9uT3Bwb3J0
dW5pdGllcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGlu
ZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpydW5XaWR0aCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ1N0YXRl
Lmg6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdTdGF0ZTo6aW5s
aW5lSXRlbXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nU3Rh
dGU6OmxpbmVCb3hlcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRp
bmdTdGF0ZTo6YWRkSW5saW5lSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGlu
ZUZvcm1hdHRpbmdTdGF0ZTo6YWRkSW5saW5lUnVuKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6SW5saW5lRm9ybWF0dGluZ1N0YXRlOjphZGRMaW5lQm94KToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ1N0YXRlOjppbmxpbmVDb250ZW50KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ1N0YXRlOjpsYXN0SW5s
aW5lSXRlbSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGlu
ZUZvcm1hdHRpbmdTdGF0ZTo6YXBwZW5kSW5saW5lUnVuKTogRGVsZXRlZC4KKyAgICAgICAgKiBs
YXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVJdGVtLmg6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OklubGluZUl0ZW06OnR5cGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpJbmxpbmVJdGVtOjppc1RleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJ
bmxpbmVJdGVtOjppc0JveCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGlu
ZUl0ZW06OmlzSGFyZExpbmVCcmVhayBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OklubGluZUl0ZW06OmlzRmxvYXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJ
bmxpbmVJdGVtOjppc0xpbmVCcmVhayBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OklubGluZUl0ZW06OmlzQ29udGFpbmVyU3RhcnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpJbmxpbmVJdGVtOjppc0NvbnRhaW5lckVuZCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OklubGluZUl0ZW06OklubGluZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpJbmxpbmVJdGVtOjpzZXRXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OklubGluZUl0ZW06OndpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5s
aW5lSXRlbTo6YWRkRGV0YWNoaW5nUnVsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OklubGluZUl0ZW06OmRldGFjaGluZ1J1bGVzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lSXRlbTo6bm9uQnJlYWthYmxlU3RhcnQgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVJdGVtOjpub25CcmVh
a2FibGVFbmQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxp
bmVJdGVtOjphZGROb25CcmVha2FibGVTdGFydCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OklubGluZUl0ZW06OmFkZE5vbkJyZWFrYWJsZUVuZCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUl0ZW06OnRleHRDb250ZW50IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQm94Lmg6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2xheW91dC9mbG9hdHMvRmxvYXRCb3guaC4KKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6bG9naWNhbFRvcExlZnQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94Ojpsb2dpY2FsTGVmdCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OmxvZ2ljYWxSaWdodCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OmxvZ2ljYWxUb3AgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94Ojpsb2dpY2FsQm90dG9tIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6bG9naWNhbFdpZHRoIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6bG9naWNhbEhlaWdodCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OkxpbmVCb3gpOgorICAgICAgICAqIGxh
eW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCcmVha2VyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6TGluZUJyZWFrZXI6OkxpbmVCcmVha2VyKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6TGluZUJyZWFrZXI6OmJyZWFraW5nQ29udGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OkxpbmVCcmVha2VyOjp3b3JkQnJlYWtpbmdCZWhhdmlvciBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCcmVha2VyOjpydW5XaWR0aCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCcmVha2VyOjppc0F0QnJlYWtpbmdPcHBvcnR1
bml0eSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCcmVha2VyOjp0ZXh0V2lkdGgg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVMaW5lQnJlYWtlcjo6SW5s
aW5lTGluZUJyZWFrZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxp
bmVMaW5lQnJlYWtlcjo6bmV4dFJ1bik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OklubGluZUxpbmVCcmVha2VyOjppc0F0Q29udGVudEVuZCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUxpbmVCcmVha2VyOjpsaW5lQnJlYWtpbmdC
ZWhhdmlvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUxpbmVC
cmVha2VyOjpydW5XaWR0aCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OklubGluZUxpbmVCcmVha2VyOjp0ZXh0V2lkdGggY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVMaW5lQnJlYWtlcjo6c3BsaXRSdW4pOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVMaW5lQnJlYWtlcjo6YWRqdXN0U3Bs
aXRQb3NpdGlvbldpdGhIeXBoZW5hdGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJyZWFrZXIuaDoKKyAgICAgICAgKiBsYXlv
dXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVSdW5Qcm92aWRlci5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lUnVuUHJvdmlkZXIuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVUZXh0SXRlbS5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0Ojppc1doaXRlc3BhY2VDaGFyYWN0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0Ojppc1NvZnRMaW5lQnJlYWspOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0Ojptb3ZlVG9OZXh0Tm9uV2hpdGVzcGFjZVBvc2l0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6bW92ZVRvTmV4dEJyZWFrYWJsZVBvc2l0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lVGV4dEl0ZW06OmNyZWF0ZUFuZEFwcGVuZFRleHRJ
dGVtcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZVRleHRJdGVtOjpJbmxpbmVU
ZXh0SXRlbSk6CisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lVGV4dEl0
ZW0uaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcv
dGV4dC9UZXh0VXRpbC5oLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVUZXh0SXRl
bTo6c3RhcnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVUZXh0SXRl
bTo6ZW5kIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lVGV4dEl0ZW06
Omxlbmd0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZVRleHRJdGVt
Ojppc1doaXRlc3BhY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVU
ZXh0SXRlbTo6aXNDb2xsYXBzZWQgY29uc3QpOgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3Jt
YXR0aW5nL3RleHQvVGV4dFV0aWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpUZXh0
VXRpbDo6aHlwaGVuUG9zaXRpb25CZWZvcmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpU
ZXh0VXRpbDo6d2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpUZXh0VXRpbDo6Zml4
ZWRQaXRjaFdpZHRoKToKKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy90ZXh0L1Rl
eHRVdGlsLmg6CisgICAgICAgICogbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0Qm94Lmg6CisgICAg
ICAgICogbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0UmVwbGFjZWQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpSZXBsYWNlZDo6aW50cmluc2ljUmF0aW8gY29uc3QpOgorICAgICAgICAq
IGxheW91dC9sYXlvdXR0cmVlL0xheW91dFRyZWVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6YWNjdW11bGF0ZWRPZmZzZXRGb3JJbkZsb3dQb3NpdGlvbmVkQ29udGludWF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6VHJlZUJ1aWxkZXI6OmNyZWF0ZVN1YlRy
ZWUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpvdXRwdXRJbmxpbmVSdW5zKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6b3V0cHV0TGF5b3V0Qm94KToKKwogMjAxOS0wNS0yMSAgU2Fh
bSBiYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBXSExTTDogQWRkIGFuIEFT
VCBkdW1wZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNl
L1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggMDQyMGM1MDNjY2NlOGYxNTYwODU0MjRmYjRkYWJl
YWI1NTI3YTdlYy4uY2MxZDY5Yjg5NTYzMjgzZTY5ZDBkMDk2NzA4YjA2YWVkZWM4YzNmMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUv
U291cmNlcy50eHQKQEAgLTEzNDcsNyArMTM0Nyw3IEBAIGxheW91dC9pbmxpbmVmb3JtYXR0aW5n
L0lubGluZUZvcm1hdHRpbmdDb250ZXh0TGluZUxheW91dC5jcHAKIGxheW91dC9pbmxpbmVmb3Jt
YXR0aW5nL0lubGluZUZvcm1hdHRpbmdTdGF0ZS5jcHAKIGxheW91dC9pbmxpbmVmb3JtYXR0aW5n
L0lubGluZUludmFsaWRhdGlvbi5jcHAKIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxp
bmVCcmVha2VyLmNwcAotbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lUnVuUHJvdmlkZXIu
Y3BwCitsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVUZXh0SXRlbS5jcHAKIGxheW91dC9p
bmxpbmVmb3JtYXR0aW5nL3RleHQvVGV4dFV0aWwuY3BwCiBsYXlvdXQvbGF5b3V0dHJlZS9MYXlv
dXRCbG9ja0NvbnRhaW5lci5jcHAKIGxheW91dC9sYXlvdXR0cmVlL0xheW91dEJveC5jcHAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
aiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRl
eCA1MjJiNmQwOGNjMGQzOWEzNGQ1YzE1NDI2NjY4MDA2ZDBlMWJhODkyLi4yN2Q3ZDdhODhlZDI5
ZGZlM2EzMDA2MjdlNjQ3ZTlmZDNlYjlkZWM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMDA4LDEwICsyMDA4LDkgQEAKIAkJ
NkVEODc4QzUxNDc0OTNGNDAwNEMzNTk3IC8qIFJlbmRlclRhYmxlQ2FwdGlvbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkVEODc4QzMxNDc0OTNGNDAw
NEMzNTk3IC8qIFJlbmRlclRhYmxlQ2FwdGlvbi5oICovOyB9OwogCQk2RUQ4QzM3QTE4M0JGRjhD
MDA5RTUzQkQgLyogQm94U2hhcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDZFRDhDMzc4MTgzQkZGOEMwMDlFNTNCRCAvKiBCb3hTaGFwZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTZFRThBNzczMTBG
ODAzRjMwMDVBNEEyNCAvKiBKU1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFRThBNzcxMTBGODAzRjMwMDVBNEEy
NCAvKiBKU1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaCAqLzsgfTsKLQkJNkYyMTlENzcyMTc4RDM3
MjAwQkIwMzNDIC8qIElubGluZVJ1bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNkYyMTlENzQyMTc4RDM3MTAwQkIwMzNDIC8qIElubGluZVJ1bi5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTZGMUNDMURF
MjI1RjhCNDkwMDcyMEFEMiAvKiBJbmxpbmVUZXh0SXRlbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkYxQ0MxREQyMjVGOEI0MjAwNzIwQUQyIC8qIElu
bGluZVRleHRJdGVtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJNkYyMjJCNzYxQUI1MkQ4QTAwOTQ2NTFBIC8qIFdlYkdMVmVydGV4QXJyYXlPYmpl
Y3RCYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDZGMjIyQjc1MUFCNTJEOEEwMDk0NjUxQSAvKiBXZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5j
cHAgKi87IH07CiAJCTZGM0UxRjYyMjEzNjE0MjAwMEE2NUEwOCAvKiBGbG9hdEJveC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkYzRTFGNjEyMTM2MTQx
NzAwQTY1QTA4IC8qIEZsb2F0Qm94LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKLQkJNkY1MjE3QzcyMTc3RjVBNzAwNjU4M0JCIC8qIElubGluZVJ1blBy
b3ZpZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2
RjUyMTdDNDIxNzdGNUE2MDA2NTgzQkIgLyogSW5saW5lUnVuUHJvdmlkZXIuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2RjdDQTNDNjIwOEMyOTU3
MDAyRjI5QUIgLyogTGF5b3V0U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDZGN0NBM0M0MjA4QzI5NTYwMDJGMjlBQiAvKiBMYXlvdXRTdGF0ZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTZGN0NB
M0NBMjA4QzJCMkUwMDJGMjlBQiAvKiBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkY3Q0EzQzgyMDhDMkIyRTAw
MkYyOUFCIC8qIElubGluZUZvcm1hdHRpbmdDb250ZXh0LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNkY5OTVBMTUxQTcwNzU2MjAwQTczNUY0IC8q
IFdlYkdMU3luYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA2Rjk5NUExMzFBNzA3NTYyMDBBNzM1RjQgLyogV2ViR0xTeW5jLmNwcCAqLzsgfTsKQEAg
LTIwMzEsNyArMjAzMCwxMCBAQAogCQk2Rjk5NUEzQTFBNzA4MzM3MDBBNzM1RjQgLyogSlNXZWJH
TFZlcnRleEFycmF5T2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA2Rjk5NUEzMDFBNzA4MzM3MDBBNzM1RjQgLyogSlNXZWJHTFZlcnRleEFycmF5
T2JqZWN0LmggKi87IH07CiAJCTZGQTQ0NTRFODk4RjJGQzE2OEJDMzhDMSAvKiBKU0JlZm9yZVVu
bG9hZEV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAyOUUwNEEyN0JFRDJGODFGOThFOTAyMkIgLyogSlNCZWZvcmVVbmxvYWRFdmVudC5oICovOyB9
OwogCQk2RkIxMUI1QzIxNzgzRkQwMDBFMkE1NzQgLyogVGV4dFV0aWwuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZGQjExQjU5MjE3ODNGQ0YwMEUyQTU3
NCAvKiBUZXh0VXRpbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTZGQjQ3RTYzMjI3NzQyNUEwMEM3QkNCMCAvKiBJbmxpbmVMaW5lQm94LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RkI0N0U2MTIyNzc0
MjVBMDBDN0JDQjAgLyogSW5saW5lTGluZUJveC5oICovOyB9OwogCQk2RkI1RTIxNDIyMUYyNDUz
MDAzOTg5Q0YgLyogQ29udGVudENoYW5nZU9ic2VydmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RkI1RTIxMjIyMUYyNDQ3MDAzOTg5Q0YgLyogQ29u
dGVudENoYW5nZU9ic2VydmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJNkZDRTFBMUEyMjYxOEFCRDAwNEYwMzQzIC8qIERpc3BsYXlSdW4uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZGQ0UxQTE4MjI2
MThBQjMwMDRGMDM0MyAvKiBEaXNwbGF5UnVuLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNkZEOUNENTQyMjdFMjFDODAwRTUzOTU3IC8qIERpc3Bs
YXlSZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2
RkQ5Q0Q1MjIyN0UyMUM4MDBFNTM5NTcgLyogRGlzcGxheVJlY3QuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2RkUxOTgxNzIxNzgzOTdDMDA0NDZG
MDggLyogSW5saW5lTGluZUJyZWFrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDZGRTE5ODE1MjE3ODM5N0MwMDQ0NkYwOCAvKiBJbmxpbmVMaW5lQnJl
YWtlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTZGRTdDRkEyMjE3N0VFRjIwMDVCMTU3MyAvKiBJbmxpbmVJdGVtLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RkU3Q0ZBMDIxNzdFRUYxMDA1QjE1NzMg
LyogSW5saW5lSXRlbS5oICovOyB9OwogCQk2RkU3Q0ZBNDIxNzdFRjEwMDA1QjE1NzMgLyogTGF5
b3V0TGluZUJyZWFrQm94LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA2RkU3Q0ZBMzIxNzdFRjEwMDA1QjE1NzMgLyogTGF5b3V0TGluZUJyZWFrQm94Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTkxMDIs
MTUgKzkxMDQsMTQgQEAKIAkJNkVFOEE3NzAxMEY4MDNGMzAwNUE0QTI0IC8qIEpTV2ViR0xDb250
ZXh0QXR0cmlidXRlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBK
U1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk2RUU4QTc3MTEwRjgwM0YzMDA1QTRBMjQgLyogSlNXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV2ViR0xDb250ZXh0QXR0cmlidXRl
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RjA4MzBERjIwQjQ2OTUxMDA4QTk0
NUIgLyogQmxvY2tGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEJsb2NrRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTZGMjE5RDc0MjE3OEQzNzEwMEJCMDMzQyAvKiBJbmxpbmVSdW4uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5saW5lUnVuLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTZGMUNDMURDMjI1RjhCNDEwMDcyMEFEMiAvKiBJbmxpbmVUZXh0SXRl
bS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmxpbmVUZXh0SXRlbS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTZGMUNDMUREMjI1RjhCNDIwMDcyMEFEMiAvKiBJbmxpbmVUZXh0
SXRlbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBJbmxpbmVUZXh0SXRlbS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk2RjIyMkI3NDFBQjUyRDY0MDA5NDY1MUEgLyogV2ViR0xWZXJ0ZXhBcnJh
eU9iamVjdEJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkYyMjJCNzUxQUI1MkQ4QTAwOTQ2NTFB
IC8qIFdlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFdlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkYyNUIyMDAyMjBBODVBQjAwMDAwMTFCIC8qIElubGluZUZv
cm1hdHRpbmdDb250ZXh0TGluZUxheW91dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmxpbmVG
b3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk2RjM1RUZBRjIxODdDQkQ1MDA0NEUwRjQgLyogSW5saW5lRm9ybWF0dGluZ0NvbnRleHRH
ZW9tZXRyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmxpbmVG
b3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNkYzRTFGNUYyMTM2MTQxNzAwQTY1QTA4IC8qIEZsb2F0Qm94LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEZsb2F0Qm94LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkYzRTFG
NjEyMTM2MTQxNzAwQTY1QTA4IC8qIEZsb2F0Qm94LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZsb2F0Qm94
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZGNTIxN0M0MjE3N0Y1QTYwMDY1ODNC
QiAvKiBJbmxpbmVSdW5Qcm92aWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJbmxpbmVSdW5Qcm92aWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2RjUy
MTdDNjIxNzdGNUE2MDA2NTgzQkIgLyogSW5saW5lUnVuUHJvdmlkZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5saW5lUnVuUHJvdmlkZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk2RjczOTE4QzIxMDZDRUREMDA2QUYyNjIgLyogTGF5b3V0
VW5pdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGF5b3V0VW5pdHMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNkY3Q0EzQzQyMDhDMjk1NjAwMkYyOUFCIC8qIExheW91dFN0YXRlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IExheW91dFN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTZGN0NBM0M1MjA4QzI5NTYwMDJGMjlBQiAvKiBMYXlvdXRTdGF0ZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBMYXlvdXRTdGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05
MTQ1LDggKzkxNDYsMTEgQEAKIAkJNkY5OTVBMzAxQTcwODMzNzAwQTczNUY0IC8qIEpTV2ViR0xW
ZXJ0ZXhBcnJheU9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dl
YkdMVmVydGV4QXJyYXlPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkZC
MTFCNTkyMTc4M0ZDRjAwRTJBNTc0IC8qIFRleHRVdGlsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFRleHRVdGlsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZG
QjExQjVCMjE3ODNGQ0YwMEUyQTU3NCAvKiBUZXh0VXRpbC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBUZXh0VXRpbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTZGQjQ3RTYxMjI3NzQyNUEwMEM3QkNCMCAvKiBJbmxpbmVMaW5lQm94LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElubGluZUxpbmVCb3guaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNkZCNUUyMTIyMjFGMjQ0NzAwMzk4OUNGIC8qIENvbnRlbnRDaGFu
Z2VPYnNlcnZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb250ZW50Q2hhbmdlT2JzZXJ2ZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkZCQjg2MDUyMEI0NjRCNjAwREFEOTM4IC8qIEZv
cm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9ybWF0dGlu
Z0NvbnRleHRHZW9tZXRyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZGQ0Ux
QTE4MjI2MThBQjMwMDRGMDM0MyAvKiBEaXNwbGF5UnVuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpc3Bs
YXlSdW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkZEOUNENTIyMjdFMjFDODAw
RTUzOTU3IC8qIERpc3BsYXlSZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IERpc3BsYXlSZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGRTE5ODEzMjE3
ODM5N0IwMDQ0NkYwOCAvKiBJbmxpbmVMaW5lQnJlYWtlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBJbmxpbmVMaW5lQnJlYWtlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTZGRTE5ODE1MjE3ODM5N0MwMDQ0NkYwOCAvKiBJbmxpbmVMaW5lQnJl
YWtlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmxpbmVMaW5lQnJlYWtl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RkU3QUEyNjIxQzM3QjYzMDAyOTZE
Q0QgLyogTWFyZ2luVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFyZ2luVHlwZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2MzYwLDExICsxNjM2NCwxMSBAQAogCQkJCTExMjNB
RkREMjA5QUJCQkEwMDczNkFDQyAvKiBJbmxpbmVJbnZhbGlkYXRpb24uY3BwICovLAogCQkJCTEx
MjNBRkRDMjA5QUJCQkEwMDczNkFDQyAvKiBJbmxpbmVJbnZhbGlkYXRpb24uaCAqLywKIAkJCQk2
RkU3Q0ZBMDIxNzdFRUYxMDA1QjE1NzMgLyogSW5saW5lSXRlbS5oICovLAorCQkJCTZGQjQ3RTYx
MjI3NzQyNUEwMEM3QkNCMCAvKiBJbmxpbmVMaW5lQm94LmggKi8sCiAJCQkJNkZFMTk4MTMyMTc4
Mzk3QjAwNDQ2RjA4IC8qIElubGluZUxpbmVCcmVha2VyLmNwcCAqLywKIAkJCQk2RkUxOTgxNTIx
NzgzOTdDMDA0NDZGMDggLyogSW5saW5lTGluZUJyZWFrZXIuaCAqLywKLQkJCQk2RjIxOUQ3NDIx
NzhEMzcxMDBCQjAzM0MgLyogSW5saW5lUnVuLmggKi8sCi0JCQkJNkY1MjE3QzYyMTc3RjVBNjAw
NjU4M0JCIC8qIElubGluZVJ1blByb3ZpZGVyLmNwcCAqLywKLQkJCQk2RjUyMTdDNDIxNzdGNUE2
MDA2NTgzQkIgLyogSW5saW5lUnVuUHJvdmlkZXIuaCAqLywKKwkJCQk2RjFDQzFEQzIyNUY4QjQx
MDA3MjBBRDIgLyogSW5saW5lVGV4dEl0ZW0uY3BwICovLAorCQkJCTZGMUNDMUREMjI1RjhCNDIw
MDcyMEFEMiAvKiBJbmxpbmVUZXh0SXRlbS5oICovLAogCQkJKTsKIAkJCXBhdGggPSBpbmxpbmVm
b3JtYXR0aW5nOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTE2Mzc0LDYgKzE2Mzc4
LDggQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCTExOTlGQTVBMjA4RTNDN0YwMDIzNThDQyAvKiBE
aXNwbGF5Qm94LmNwcCAqLywKIAkJCQkxMTk5RkE1OTIwOEUzQzdGMDAyMzU4Q0MgLyogRGlzcGxh
eUJveC5oICovLAorCQkJCTZGRDlDRDUyMjI3RTIxQzgwMEU1Mzk1NyAvKiBEaXNwbGF5UmVjdC5o
ICovLAorCQkJCTZGQ0UxQTE4MjI2MThBQjMwMDRGMDM0MyAvKiBEaXNwbGF5UnVuLmggKi8sCiAJ
CQkpOwogCQkJcGF0aCA9IGRpc3BsYXl0cmVlOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
QEAgLTE2OTk4LDExICsxNzAwNCwxMSBAQAogCQkxQ0EwQzJGNjIxRUVEQUQyMDBBMTE4NjAgLyog
QVNUICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQk1MjE1
ODYyQzIyOTM3N0I3MDA1OTI1RUYgLyogV0hMU0xBU1QuaCAqLywKIAkJCQkxQzg0MEI5MDIxRUMz
MEY5MDBEMDUwMEQgLyogV0hMU0xBZGRyZXNzU3BhY2UuaCAqLywKIAkJCQlDMjFCRjcyNTIxQ0Q4
OUUyMDAyMjc5NzkgLyogV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaCAqLywKIAkJCQlDMjFCRjcw
OTIxQ0Q4OUNBMDAyMjc5NzkgLyogV0hMU0xBcnJheVR5cGUuaCAqLywKIAkJCQlDMjFCRjczMDIx
Q0Q4OUVEMDAyMjc5NzkgLyogV0hMU0xBc3NpZ25tZW50RXhwcmVzc2lvbi5oICovLAorCQkJCTUy
MTU4NjJDMjI5Mzc3QjcwMDU5MjVFRiAvKiBXSExTTEFTVC5oICovLAogCQkJCUMyMUJGNzBBMjFD
RDg5Q0IwMDIyNzk3OSAvKiBXSExTTEJhc2VGdW5jdGlvbkF0dHJpYnV0ZS5oICovLAogCQkJCUMy
MUJGNkZBMjFDRDg5QkUwMDIyNzk3OSAvKiBXSExTTEJhc2VTZW1hbnRpYy5oICovLAogCQkJCUMy
MUJGNzFFMjFDRDg5REMwMDIyNzk3OSAvKiBXSExTTEJsb2NrLmggKi8sCkBAIC0yODc5NSwxMSAr
Mjg4MDEsMTMgQEAKIAkJCQkwRkU1RkJENTFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RJ
dGVtcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNUZCRDcxQzNERDUxRTAwMDdBMkNBIC8qIERp
c3BsYXlMaXN0UmVjb3JkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTVGQkQ5MUMzREQ1MUUw
MDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlcGxheWVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk2RkQ5
Q0Q1NDIyN0UyMUM4MDBFNTM5NTcgLyogRGlzcGxheVJlY3QuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTQ5QUYyRDY5MTQ0MzVEMDUwMDE2QTc4NCAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3IuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTJEMjlFQ0M2MTkyRUNDODMwMDk4NEI3OCAvKiBEaXNwbGF5UmVmcmVz
aE1vbml0b3JDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTJEMjlFQ0NBMTkyRjFGMUQwMDk4
NEI3OCAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3JJT1MuaCBpbiBIZWFkZXJzICovLAogCQkJCTJE
RTcwMDIzMTkyRkU4MkEwMEIwOTc1QyAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3JNYWMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTJEMjlFQ0M4MTkyRUNDODMwMDk4NEI3OCAvKiBEaXNwbGF5UmVmcmVz
aE1vbml0b3JNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQk2RkNFMUExQTIyNjE4QUJEMDA0
RjAzNDMgLyogRGlzcGxheVJ1bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQzMTYwOTExMkIwMjZG
NzAwQzFBMzU5IC8qIERpc3RhbmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NDczMEQ3NzEyNDhG
MEIzMDBEM0E5QzkgLyogRGlzdGFudExpZ2h0U291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
MkYzNEZFNjBFODJGODE0MDBGNjI3Q0QgLyogRE5TLmggaW4gSGVhZGVycyAqLywKQEAgLTI5NDI5
LDEyICsyOTQzNywxMiBAQAogCQkJCTExMzEwQ0Y4MjBCQTRBNkEwMDY1QThEMCAvKiBJbmxpbmVJ
bnZhbGlkYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTZGRTdDRkEyMjE3N0VFRjIwMDVCMTU3
MyAvKiBJbmxpbmVJdGVtLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0U3ODkxNjExMjBENjA4MDA2
MEVDRTUgLyogSW5saW5lSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTZGQjQ3RTYzMjI3
NzQyNUEwMEM3QkNCMCAvKiBJbmxpbmVMaW5lQm94LmggaW4gSGVhZGVycyAqLywKIAkJCQk2RkUx
OTgxNzIxNzgzOTdDMDA0NDZGMDggLyogSW5saW5lTGluZUJyZWFrZXIuaCBpbiBIZWFkZXJzICov
LAotCQkJCTZGMjE5RDc3MjE3OEQzNzIwMEJCMDMzQyAvKiBJbmxpbmVSdW4uaCBpbiBIZWFkZXJz
ICovLAotCQkJCTZGNTIxN0M3MjE3N0Y1QTcwMDY1ODNCQiAvKiBJbmxpbmVSdW5Qcm92aWRlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQUE0QzNBNzcwQjJCMTY3OTAwMjMzNEEyIC8qIElubGluZVN0
eWxlU2hlZXRPd25lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFQTQ4NUEwOTdEOTMwMjAwOTRD
OUU0IC8qIElubGluZVRleHRCb3guaCBpbiBIZWFkZXJzICovLAogCQkJCTFDMDEwNzAxMTkyNTk0
REYwMDhBNDIwMSAvKiBJbmxpbmVUZXh0Qm94U3R5bGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTZG
MUNDMURFMjI1RjhCNDkwMDcyMEFEMiAvKiBJbmxpbmVUZXh0SXRlbS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNTEwQTU4RTUxQkFBNDBCMTAwQzE5MjgyIC8qIEluUHJvY2Vzc0lEQlNlcnZlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMkVCNzY3NTcxREExOUJERjAwM0UyM0I1IC8qIElucHV0RXZlbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUU1MkVGREY0MjExMjg3NUEwMEFEMjgyQSAvKiBJbnB1dE1v
ZGUuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zv
cm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1h
dHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwCmluZGV4IDQxMzZhZDJiZjdlMzk3YTY5OTRiMWY2NjFm
ODQ3ZDNjNWM2NWRhYjIuLmI4MTc5NmE0OGVkZTFkNTIzYzFiMDNhNjJhODgxNWJkNWJhZWExOTgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nQ29udGV4dEdlb21l
dHJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvRm9ybWF0dGluZ0NvbnRleHRHZW9t
ZXRyeS5jcHAKQEAgLTEwOSwxMiArMTA5LDExIEBAIHN0YXRpYyBMYXlvdXRVbml0IGNvbnRlbnRI
ZWlnaHRGb3JGb3JtYXR0aW5nQ29udGV4dFJvb3QoY29uc3QgTGF5b3V0U3RhdGUmIGxheW91CiAg
ICAgYXV0byBib3R0b20gPSBib3JkZXJBbmRQYWRkaW5nVG9wOwogICAgIGF1dG8mIGZvcm1hdHRp
bmdSb290Q29udGFpbmVyID0gZG93bmNhc3Q8Q29udGFpbmVyPihsYXlvdXRCb3gpOwogICAgIGlm
IChmb3JtYXR0aW5nUm9vdENvbnRhaW5lci5lc3RhYmxpc2hlc0lubGluZUZvcm1hdHRpbmdDb250
ZXh0KCkpIHsKLSAgICAgICAgLy8gVGhpcyBpcyB0ZW1wIGFuZCB3aWxsIGJlIHJlcGxhY2VkIGJ5
IHRoZSBjb3JyZWN0IGRpc3BsYXkgYm94IG9uY2UgaW5saW5lIHJ1bnMgbW92ZSBvdmVyIHRvIHRo
ZSBkaXNwbGF5IHRyZWUuCi0gICAgICAgIGF1dG8mIGlubGluZVJ1bnMgPSBkb3duY2FzdDxJbmxp
bmVGb3JtYXR0aW5nU3RhdGU+KGxheW91dFN0YXRlLmVzdGFibGlzaGVkRm9ybWF0dGluZ1N0YXRl
KGxheW91dEJveCkpLmlubGluZVJ1bnMoKTsKLSAgICAgICAgaWYgKCFpbmxpbmVSdW5zLmlzRW1w
dHkoKSkgewotICAgICAgICAgICAgdG9wID0gaW5saW5lUnVuc1swXS5sb2dpY2FsVG9wKCk7Ci0g
ICAgICAgICAgICBib3R0b20gPSAgaW5saW5lUnVucy5sYXN0KCkubG9naWNhbEJvdHRvbSgpOwot
ICAgICAgICB9CisgICAgICAgIGF1dG8mIGxpbmVCb3hlcyA9IGRvd25jYXN0PElubGluZUZvcm1h
dHRpbmdTdGF0ZT4obGF5b3V0U3RhdGUuZXN0YWJsaXNoZWRGb3JtYXR0aW5nU3RhdGUobGF5b3V0
Qm94KSkubGluZUJveGVzKCk7CisgICAgICAgIC8vIEV2ZW4gZW1wdHkgY29udGFpbmVycyBnZW5l
cmF0ZSBvbmUgbGluZS4gCisgICAgICAgIEFTU0VSVCghbGluZUJveGVzLmlzRW1wdHkoKSk7Cisg
ICAgICAgIHRvcCA9IGxpbmVCb3hlcy5maXJzdCgpLmxvZ2ljYWxUb3AoKTsKKyAgICAgICAgYm90
dG9tID0gbGluZUJveGVzLmxhc3QoKS5sb2dpY2FsQm90dG9tKCk7CiAgICAgfSBlbHNlIGlmIChm
b3JtYXR0aW5nUm9vdENvbnRhaW5lci5lc3RhYmxpc2hlc0Jsb2NrRm9ybWF0dGluZ0NvbnRleHQo
KSB8fCBsYXlvdXRCb3guaXNEb2N1bWVudEJveCgpKSB7CiAgICAgICAgIGlmIChmb3JtYXR0aW5n
Um9vdENvbnRhaW5lci5oYXNJbkZsb3dDaGlsZCgpKSB7CiAgICAgICAgICAgICBhdXRvJiBmaXJz
dERpc3BsYXlCb3ggPSBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpmb3JtYXR0
aW5nUm9vdENvbnRhaW5lci5maXJzdEluRmxvd0NoaWxkKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvbGF5b3V0L1ZlcmlmaWNhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
VmVyaWZpY2F0aW9uLmNwcAppbmRleCAyZTc3YzM5ZTkyMTQ0OTQyZWYyOWU0MGU0Yzc0MzZlNTEx
MjAwYmMyLi5kN2ZlNmE5ZjE5MTc0OTVhZTU2ZWViZGQ3OGI1YWZlNDhmNWNkYzFjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvVmVyaWZpY2F0aW9uLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvVmVyaWZpY2F0aW9uLmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1
ZGUgIkxheW91dFRyZWVCdWlsZGVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyQm94LmgiCiAjaW5jbHVk
ZSAiUmVuZGVySW5saW5lLmgiCisjaW5jbHVkZSAiUmVuZGVyTGluZUJyZWFrLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIApAQCAt
NDYsNyArNDcsNyBAQCBzdGF0aWMgYm9vbCBhcmVFc3NlbnRpYWxseUVxdWFsKGZsb2F0IGEsIExh
eW91dFVuaXQgYikKICAgICBpZiAoYSA9PSBiLnRvRmxvYXQoKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKLSAgICByZXR1cm4gZmFicyhhIC0gYi50b0Zsb2F0KCkpIDw9IDggKiBMYXlvdXRVbml0
OjplcHNpbG9uKCk7CisgICAgcmV0dXJuIGZhYnMoYSAtIGIudG9GbG9hdCgpKSA8PSAxMCAqIExh
eW91dFVuaXQ6OmVwc2lsb24oKTsKIH0KIAogc3RhdGljIGJvb2wgb3V0cHV0TWlzbWF0Y2hpbmdT
aW1wbGVMaW5lSW5mb3JtYXRpb25JZk5lZWRlZChUZXh0U3RyZWFtJiBzdHJlYW0sIGNvbnN0IExh
eW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgY29uc3QgUmVuZGVyQmxvY2tGbG93JiBibG9ja0Zsb3cs
IGNvbnN0IENvbnRhaW5lciYgaW5saW5lRm9ybWF0dGluZ1Jvb3QpCkBAIC03MiwzMyArNzMsMzcg
QEAgc3RhdGljIGJvb2wgb3V0cHV0TWlzbWF0Y2hpbmdTaW1wbGVMaW5lSW5mb3JtYXRpb25JZk5l
ZWRlZChUZXh0U3RyZWFtJiBzdHJlYW0sIGMKICAgICAgICAgYXV0byYgc2ltcGxlUnVuID0gbGlu
ZUxheW91dERhdGEtPnJ1bkF0KGkpOwogICAgICAgICBhdXRvJiBpbmxpbmVSdW4gPSBpbmxpbmVS
dW5MaXN0W2ldOwogCi0gICAgICAgIGF1dG8gbWF0Y2hpbmdSdW5zID0gYXJlRXNzZW50aWFsbHlF
cXVhbChzaW1wbGVSdW4ubG9naWNhbExlZnQsIGlubGluZVJ1bi5sb2dpY2FsTGVmdCgpKSAmJiBh
cmVFc3NlbnRpYWxseUVxdWFsKHNpbXBsZVJ1bi5sb2dpY2FsUmlnaHQsIGlubGluZVJ1bi5sb2dp
Y2FsUmlnaHQoKSk7Ci0gICAgICAgIGlmIChtYXRjaGluZ1J1bnMpCi0gICAgICAgICAgICBtYXRj
aGluZ1J1bnMgPSAoc2ltcGxlUnVuLnN0YXJ0ID09IGlubGluZVJ1bi50ZXh0Q29udGV4dCgpLT5z
dGFydCgpICYmIHNpbXBsZVJ1bi5lbmQgPT0gKGlubGluZVJ1bi50ZXh0Q29udGV4dCgpLT5zdGFy
dCgpICsgaW5saW5lUnVuLnRleHRDb250ZXh0KCktPmxlbmd0aCgpKSk7CisgICAgICAgIGF1dG8g
bWF0Y2hpbmdSdW5zID0gYXJlRXNzZW50aWFsbHlFcXVhbChzaW1wbGVSdW4ubG9naWNhbExlZnQs
IGlubGluZVJ1bi0+bG9naWNhbExlZnQoKSkgJiYgYXJlRXNzZW50aWFsbHlFcXVhbChzaW1wbGVS
dW4ubG9naWNhbFJpZ2h0LCBpbmxpbmVSdW4tPmxvZ2ljYWxSaWdodCgpKTsKKyAgICAgICAgaWYg
KG1hdGNoaW5nUnVucyAmJiBpbmxpbmVSdW4tPnRleHRDb250ZXh0KCkpIHsKKyAgICAgICAgICAg
IG1hdGNoaW5nUnVucyA9IHNpbXBsZVJ1bi5zdGFydCA9PSBpbmxpbmVSdW4tPnRleHRDb250ZXh0
KCktPnN0YXJ0KCkgJiYgc2ltcGxlUnVuLmVuZCA9PSBpbmxpbmVSdW4tPnRleHRDb250ZXh0KCkt
PmVuZCgpOworICAgICAgICAgICAgLy8gU0xMIGhhbmRsZXMgc3RyaW5ncyBpbiBhIG1vcmUgY29u
Y2F0ZW5hdGVkIGZvcm1hdCA8ZGl2PmZvbzxicj5iYXI8L2Rpdj4gLT4gZm9vIC0+IDAsMyBiYXIg
LT4gMyw2IHZzLiAwLDMgYW5kIDAsMworICAgICAgICAgICAgaWYgKCFtYXRjaGluZ1J1bnMpCisg
ICAgICAgICAgICAgICAgbWF0Y2hpbmdSdW5zID0gKHNpbXBsZVJ1bi5lbmQgLSBzaW1wbGVSdW4u
c3RhcnQpID09IChpbmxpbmVSdW4tPnRleHRDb250ZXh0KCktPmVuZCgpIC0gaW5saW5lUnVuLT50
ZXh0Q29udGV4dCgpLT5zdGFydCgpKTsgCisgICAgICAgIH0KICAgICAgICAgaWYgKG1hdGNoaW5n
UnVucykKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIHN0cmVhbSA8PCAiTWlzbWF0
Y2hpbmc6IHNpbXBsZSBydW4oIiA8PCBzaW1wbGVSdW4uc3RhcnQgPDwgIiwgIiA8PCBzaW1wbGVS
dW4uZW5kIDw8ICIpICgiIDw8IHNpbXBsZVJ1bi5sb2dpY2FsTGVmdCA8PCAiLCAiIDw8IHNpbXBs
ZVJ1bi5sb2dpY2FsUmlnaHQgPDwgIikgbGF5b3V0IHJ1bigiIDw8IGlubGluZVJ1bi50ZXh0Q29u
dGV4dCgpLT5zdGFydCgpIDw8ICIsICIgPDwgaW5saW5lUnVuLnRleHRDb250ZXh0KCktPnN0YXJ0
KCkgKyBpbmxpbmVSdW4udGV4dENvbnRleHQoKS0+bGVuZ3RoKCkgPDwgIikgKCIgPDwgaW5saW5l
UnVuLmxvZ2ljYWxMZWZ0KCkgPDwgIiwgIiA8PCBpbmxpbmVSdW4ubG9naWNhbFJpZ2h0KCkgPDwg
IikiOworICAgICAgICBzdHJlYW0gPDwgIk1pc21hdGNoaW5nOiBzaW1wbGUgcnVuKCIgPDwgc2lt
cGxlUnVuLnN0YXJ0IDw8ICIsICIgPDwgc2ltcGxlUnVuLmVuZCA8PCAiKSAoIiA8PCBzaW1wbGVS
dW4ubG9naWNhbExlZnQgPDwgIiwgIiA8PCBzaW1wbGVSdW4ubG9naWNhbFJpZ2h0IDw8ICIpIGxh
eW91dCBydW4oIiA8PCBpbmxpbmVSdW4tPnRleHRDb250ZXh0KCktPnN0YXJ0KCkgPDwgIiwgIiA8
PCBpbmxpbmVSdW4tPnRleHRDb250ZXh0KCktPmVuZCgpIDw8ICIpICgiIDw8IGlubGluZVJ1bi0+
bG9naWNhbExlZnQoKSA8PCAiLCAiIDw8IGlubGluZVJ1bi0+bG9naWNhbFJpZ2h0KCkgPDwgIiki
OwogICAgICAgICBzdHJlYW0ubmV4dExpbmUoKTsKICAgICAgICAgbWlzbWF0Y2hlZCA9IHRydWU7
CiAgICAgfQogICAgIHJldHVybiBtaXNtYXRjaGVkOwogfQogCi1zdGF0aWMgYm9vbCBjaGVja0Zv
ck1hdGNoaW5nTm9uVGV4dFJ1bnMoY29uc3QgSW5saW5lUnVuJiBpbmxpbmVSdW4sIGNvbnN0IFdl
YkNvcmU6OklubGluZUJveCYgaW5saW5lQm94KQorc3RhdGljIGJvb2wgY2hlY2tGb3JNYXRjaGlu
Z05vblRleHRSdW5zKGNvbnN0IERpc3BsYXk6OlJ1biYgaW5saW5lUnVuLCBjb25zdCBXZWJDb3Jl
OjpJbmxpbmVCb3gmIGlubGluZUJveCkKIHsKICAgICByZXR1cm4gYXJlRXNzZW50aWFsbHlFcXVh
bChpbmxpbmVCb3gubG9naWNhbExlZnQoKSwgaW5saW5lUnVuLmxvZ2ljYWxMZWZ0KCkpCiAgICAg
ICAgICYmIGFyZUVzc2VudGlhbGx5RXF1YWwoaW5saW5lQm94LmxvZ2ljYWxSaWdodCgpLCBpbmxp
bmVSdW4ubG9naWNhbFJpZ2h0KCkpCiAgICAgICAgICYmIGFyZUVzc2VudGlhbGx5RXF1YWwoaW5s
aW5lQm94LmxvZ2ljYWxIZWlnaHQoKSwgaW5saW5lUnVuLmxvZ2ljYWxIZWlnaHQoKSk7CiB9CiAK
LXN0YXRpYyBib29sIGNoZWNrRm9yTWF0Y2hpbmdUZXh0UnVucyhjb25zdCBJbmxpbmVSdW4mIGlu
bGluZVJ1biwgZmxvYXQgbG9naWNhbExlZnQsIGZsb2F0IGxvZ2ljYWxSaWdodCwgdW5zaWduZWQg
c3RhcnQsIHVuc2lnbmVkIGVuZCwgZmxvYXQgbG9naWNhbEhlaWdodCkKK3N0YXRpYyBib29sIGNo
ZWNrRm9yTWF0Y2hpbmdUZXh0UnVucyhjb25zdCBEaXNwbGF5OjpSdW4mIGlubGluZVJ1biwgY29u
c3QgSW5saW5lVGV4dEJveCYgaW5saW5lVGV4dEJveCkKIHsKLSAgICByZXR1cm4gYXJlRXNzZW50
aWFsbHlFcXVhbChsb2dpY2FsTGVmdCwgaW5saW5lUnVuLmxvZ2ljYWxMZWZ0KCkpCi0gICAgICAg
ICYmIGFyZUVzc2VudGlhbGx5RXF1YWwobG9naWNhbFJpZ2h0LCBpbmxpbmVSdW4ubG9naWNhbFJp
Z2h0KCkpCi0gICAgICAgICYmIHN0YXJ0ID09IGlubGluZVJ1bi50ZXh0Q29udGV4dCgpLT5zdGFy
dCgpCi0gICAgICAgICYmIChlbmQgPT0gKGlubGluZVJ1bi50ZXh0Q29udGV4dCgpLT5zdGFydCgp
ICsgaW5saW5lUnVuLnRleHRDb250ZXh0KCktPmxlbmd0aCgpKSkKLSAgICAgICAgJiYgYXJlRXNz
ZW50aWFsbHlFcXVhbChsb2dpY2FsSGVpZ2h0LCBpbmxpbmVSdW4ubG9naWNhbEhlaWdodCgpKTsK
KyAgICByZXR1cm4gYXJlRXNzZW50aWFsbHlFcXVhbChpbmxpbmVUZXh0Qm94LmxvZ2ljYWxMZWZ0
KCksIGlubGluZVJ1bi5sb2dpY2FsTGVmdCgpKQorICAgICAgICAmJiBhcmVFc3NlbnRpYWxseUVx
dWFsKGlubGluZVRleHRCb3gubG9naWNhbFJpZ2h0KCksIGlubGluZVJ1bi5sb2dpY2FsUmlnaHQo
KSkKKyAgICAgICAgJiYgaW5saW5lVGV4dEJveC5zdGFydCgpID09IGlubGluZVJ1bi50ZXh0Q29u
dGV4dCgpLT5zdGFydCgpCisgICAgICAgICYmIChpbmxpbmVUZXh0Qm94LmVuZCgpICsgMSkgPT0g
aW5saW5lUnVuLnRleHRDb250ZXh0KCktPmVuZCgpCisgICAgICAgICYmIGFyZUVzc2VudGlhbGx5
RXF1YWwoaW5saW5lVGV4dEJveC5sb2dpY2FsSGVpZ2h0KCksIGlubGluZVJ1bi5sb2dpY2FsSGVp
Z2h0KCkpOwogfQogCiBzdGF0aWMgdm9pZCBjb2xsZWN0Rmxvd0JveFN1YnRyZWUoY29uc3QgSW5s
aW5lRmxvd0JveCYgZmxvd2JveCwgVmVjdG9yPFdlYkNvcmU6OklubGluZUJveCo+JiBpbmxpbmVC
b3hlcykKQEAgLTEyNiwxOSArMTMxLDYgQEAgc3RhdGljIHZvaWQgY29sbGVjdElubGluZUJveGVz
KGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgcm9vdCwgVmVjdG9yPFdlYkNvcmU6OklubGkKICAgICB9
CiB9CiAKLXN0YXRpYyBMYXlvdXRVbml0IHJlc29sdmVGb3JSZWxhdGl2ZVBvc2l0aW9uSWZOZWVk
ZWQoY29uc3QgSW5saW5lVGV4dEJveCYgaW5saW5lVGV4dEJveCkKLXsKLSAgICBMYXlvdXRVbml0
IHhPZmZzZXQ7Ci0gICAgYXV0byogcGFyZW50ID0gaW5saW5lVGV4dEJveC5wYXJlbnQoKTsKLSAg
ICB3aGlsZSAoaXM8SW5saW5lRmxvd0JveD4ocGFyZW50KSkgewotICAgICAgICBhdXRvJiByZW5k
ZXJlciA9IHBhcmVudC0+cmVuZGVyZXIoKTsKLSAgICAgICAgaWYgKHJlbmRlcmVyLmlzSW5GbG93
UG9zaXRpb25lZCgpKQotICAgICAgICAgICAgeE9mZnNldCA9IHJlbmRlcmVyLm9mZnNldEZvcklu
Rmxvd1Bvc2l0aW9uKCkud2lkdGgoKTsKLSAgICAgICAgcGFyZW50ID0gcGFyZW50LT5wYXJlbnQo
KTsKLSAgICB9Ci0gICAgcmV0dXJuIHhPZmZzZXQ7Ci19Ci0KIHN0YXRpYyBib29sIG91dHB1dE1p
c21hdGNoaW5nQ29tcGxleExpbmVJbmZvcm1hdGlvbklmTmVlZGVkKFRleHRTdHJlYW0mIHN0cmVh
bSwgY29uc3QgTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBjb25zdCBSZW5kZXJCbG9ja0Zsb3cm
IGJsb2NrRmxvdywgY29uc3QgQ29udGFpbmVyJiBpbmxpbmVGb3JtYXR0aW5nUm9vdCkKIHsKICAg
ICBhdXRvJiBpbmxpbmVGb3JtYXR0aW5nU3RhdGUgPSBsYXlvdXRTdGF0ZS5lc3RhYmxpc2hlZEZv
cm1hdHRpbmdTdGF0ZShpbmxpbmVGb3JtYXR0aW5nUm9vdCk7CkBAIC0xNTgsNjYgKzE1MCwzMCBA
QCBzdGF0aWMgYm9vbCBvdXRwdXRNaXNtYXRjaGluZ0NvbXBsZXhMaW5lSW5mb3JtYXRpb25JZk5l
ZWRlZChUZXh0U3RyZWFtJiBzdHJlYW0sCiAgICAgfQogCiAgICAgZm9yICh1bnNpZ25lZCBpbmxp
bmVCb3hJbmRleCA9IDA7IGlubGluZUJveEluZGV4IDwgaW5saW5lQm94ZXMuc2l6ZSgpICYmIHJ1
bkluZGV4IDwgaW5saW5lUnVuTGlzdC5zaXplKCk7ICsraW5saW5lQm94SW5kZXgpIHsKKyAgICAg
ICAgYXV0byYgaW5saW5lUnVuID0gaW5saW5lUnVuTGlzdFtydW5JbmRleF07CiAgICAgICAgIGF1
dG8qIGlubGluZUJveCA9IGlubGluZUJveGVzW2lubGluZUJveEluZGV4XTsKICAgICAgICAgYXV0
byogaW5saW5lVGV4dEJveCA9IGlzPElubGluZVRleHRCb3g+KGlubGluZUJveCkgPyBkb3duY2Fz
dDxJbmxpbmVUZXh0Qm94PihpbmxpbmVCb3gpIDogbnVsbHB0cjsKKyAgICAgICAgYm9vbCBtYXRj
aGluZ1J1bnMgPSBpbmxpbmVUZXh0Qm94ID8gY2hlY2tGb3JNYXRjaGluZ1RleHRSdW5zKCppbmxp
bmVSdW4sICppbmxpbmVUZXh0Qm94KSA6IG1hdGNoaW5nUnVucyA9IGNoZWNrRm9yTWF0Y2hpbmdO
b25UZXh0UnVucygqaW5saW5lUnVuLCAqaW5saW5lQm94KTsKIAotICAgICAgICBhdXRvJiBpbmxp
bmVSdW4gPSBpbmxpbmVSdW5MaXN0W3J1bkluZGV4XTsKLSAgICAgICAgYXV0byBtYXRjaGluZ1J1
bnMgPSBmYWxzZTsKLSAgICAgICAgaWYgKGlubGluZVRleHRCb3gpIHsKLSAgICAgICAgICAgIGF1
dG8geE9mZnNldCA9IHJlc29sdmVGb3JSZWxhdGl2ZVBvc2l0aW9uSWZOZWVkZWQoKmlubGluZVRl
eHRCb3gpOwotICAgICAgICAgICAgbWF0Y2hpbmdSdW5zID0gY2hlY2tGb3JNYXRjaGluZ1RleHRS
dW5zKGlubGluZVJ1biwgaW5saW5lVGV4dEJveC0+bG9naWNhbExlZnQoKSArIHhPZmZzZXQsCi0g
ICAgICAgICAgICAgICAgaW5saW5lVGV4dEJveC0+bG9naWNhbFJpZ2h0KCkgKyB4T2Zmc2V0LAot
ICAgICAgICAgICAgICAgIGlubGluZVRleHRCb3gtPnN0YXJ0KCksCi0gICAgICAgICAgICAgICAg
aW5saW5lVGV4dEJveC0+ZW5kKCkgKyAxLAotICAgICAgICAgICAgICAgIGlubGluZVRleHRCb3gt
PmxvZ2ljYWxIZWlnaHQoKSk7Ci0KLSAgICAgICAgICAgIC8vIDxzcGFuPmZvb2Jhcjwvc3Bhbj5m
b29iYXIgZ2VuZXJhdGVzIDIgaW5saW5lIHRleHQgYm94ZXMgd2hpbGUgd2Ugb25seSBnZW5lcmF0
ZSBvbmUgaW5saW5lIHJ1bi4KLSAgICAgICAgICAgIC8vIGFsc28gPGRpdj5mb288aW1nIHN0eWxl
PSJmbG9hdDogbGVmdDsiPmJhcjwvZGl2PiB0b28uCi0gICAgICAgICAgICBhdXRvIGlubGluZVJ1
bkVuZCA9IGlubGluZVJ1bi50ZXh0Q29udGV4dCgpLT5zdGFydCgpICsgaW5saW5lUnVuLnRleHRD
b250ZXh0KCktPmxlbmd0aCgpOwotICAgICAgICAgICAgYXV0byB0ZXh0UnVuTWlnaHRCZUV4dGVu
ZGVkID0gIW1hdGNoaW5nUnVucyAmJiBpbmxpbmVUZXh0Qm94LT5lbmQoKSA8IGlubGluZVJ1bkVu
ZCAmJiBpbmxpbmVCb3hJbmRleCA8IGlubGluZUJveGVzLnNpemUoKSAtIDE7Ci0KLSAgICAgICAg
ICAgIGlmICh0ZXh0UnVuTWlnaHRCZUV4dGVuZGVkKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBs
b2dpY2FsTGVmdCA9IGlubGluZVRleHRCb3gtPmxvZ2ljYWxMZWZ0KCkgKyB4T2Zmc2V0OwotICAg
ICAgICAgICAgICAgIGF1dG8gbG9naWNhbFJpZ2h0ID0gaW5saW5lVGV4dEJveC0+bG9naWNhbFJp
Z2h0KCkgKyB4T2Zmc2V0OwotICAgICAgICAgICAgICAgIGF1dG8gc3RhcnQgPSBpbmxpbmVUZXh0
Qm94LT5zdGFydCgpOwotICAgICAgICAgICAgICAgIGF1dG8gZW5kID0gaW5saW5lVGV4dEJveC0+
ZW5kKCkgKyAxOwotICAgICAgICAgICAgICAgIGF1dG8gaW5kZXggPSArK2lubGluZUJveEluZGV4
OwotICAgICAgICAgICAgICAgIGZvciAoOyBpbmRleCA8IGlubGluZUJveGVzLnNpemUoKTsgKytp
bmRleCkgewotICAgICAgICAgICAgICAgICAgICBhdXRvKiBpbmxpbmVCb3ggPSBpbmxpbmVCb3hl
c1tpbmRleF07Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8qIGlubGluZVRleHRCb3ggPSBpczxJ
bmxpbmVUZXh0Qm94PihpbmxpbmVCb3gpID8gZG93bmNhc3Q8SW5saW5lVGV4dEJveD4oaW5saW5l
Qm94KSA6IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgICAgIC8vIENhbid0IG1peCBkaWZmZXJl
bnQgaW5saW5lIGJveGVzLgotICAgICAgICAgICAgICAgICAgICBpZiAoIWlubGluZVRleHRCb3gp
Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgICAgICBh
dXRvIHhPZmZzZXQgPSByZXNvbHZlRm9yUmVsYXRpdmVQb3NpdGlvbklmTmVlZGVkKCppbmxpbmVU
ZXh0Qm94KTsKLSAgICAgICAgICAgICAgICAgICAgbG9naWNhbFJpZ2h0ID0gaW5saW5lVGV4dEJv
eC0+bG9naWNhbFJpZ2h0KCkgKyB4T2Zmc2V0OwotICAgICAgICAgICAgICAgICAgICBlbmQgKz0g
KGlubGluZVRleHRCb3gtPmVuZCgpICsgMSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjaGVj
a0Zvck1hdGNoaW5nVGV4dFJ1bnMoaW5saW5lUnVuLCBsb2dpY2FsTGVmdCwgbG9naWNhbFJpZ2h0
LCBzdGFydCwgZW5kLCBpbmxpbmVUZXh0Qm94LT5sb2dpY2FsSGVpZ2h0KCkpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBtYXRjaGluZ1J1bnMgPSB0cnVlOwotICAgICAgICAgICAgICAgICAg
ICAgICAgaW5saW5lQm94SW5kZXggPSBpbmRleDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gV2Vu
dCB0b28gZmFyPwotICAgICAgICAgICAgICAgICAgICBpZiAoZW5kID49IGlubGluZVJ1bkVuZCkK
LSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgaWYgKCFtYXRjaGluZ1J1bnMpIHsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGlz
PFJlbmRlckxpbmVCcmVhaz4oaW5saW5lQm94LT5yZW5kZXJlcigpKSkgeworICAgICAgICAgICAg
ICAgIC8vIDxicj4gcG9zaXRpb25pbmcgaXMgd2VpcmQgYXQgdGhpcyBwb2ludC4gSXQgbmVlZHMg
cHJvcGVyIGJhc2VsaW5lLgorICAgICAgICAgICAgICAgIG1hdGNoaW5nUnVucyA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgKytydW5JbmRleDsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtYXRjaGluZ1J1bnMgPSBj
aGVja0Zvck1hdGNoaW5nTm9uVGV4dFJ1bnMoaW5saW5lUnVuLCAqaW5saW5lQm94KTsKLQogCi0g
ICAgICAgIGlmICghbWF0Y2hpbmdSdW5zKSB7Ci0gICAgICAgICAgICBzdHJlYW0gPDwgIk1pc21h
dGNoaW5nOiBydW4gIjsKKyAgICAgICAgICAgIHN0cmVhbSA8PCAiTWlzbWF0Y2hpbmc6IHJ1biI7
CiAKICAgICAgICAgICAgIGlmIChpbmxpbmVUZXh0Qm94KQotICAgICAgICAgICAgICAgIHN0cmVh
bSA8PCAiKCIgPDwgaW5saW5lVGV4dEJveC0+c3RhcnQoKSA8PCAiLCAiIDw8IGlubGluZVRleHRC
b3gtPmVuZCgpICsgMSA8PCAiKSI7Ci0gICAgICAgICAgICBzdHJlYW0gPDwgIiAoIiA8PCBpbmxp
bmVCb3gtPmxvZ2ljYWxMZWZ0KCkgPDwgIiwgIiA8PCBpbmxpbmVCb3gtPmxvZ2ljYWxSaWdodCgp
IDw8ICIpICgiIDw8IGlubGluZUJveC0+bG9naWNhbFdpZHRoKCkgPDwgIngiIDw8IGlubGluZUJv
eC0+bG9naWNhbEhlaWdodCgpIDw8ICIpIjsKKyAgICAgICAgICAgICAgICBzdHJlYW0gPDwgIiAo
IiA8PCBpbmxpbmVUZXh0Qm94LT5zdGFydCgpIDw8ICIsICIgPDwgaW5saW5lVGV4dEJveC0+ZW5k
KCkgKyAxIDw8ICIpIjsKKyAgICAgICAgICAgIHN0cmVhbSA8PCAiICgiIDw8IGlubGluZUJveC0+
bG9naWNhbExlZnQoKSA8PCAiLCAiIDw8IGlubGluZUJveC0+bG9naWNhbFRvcCgpIDw8ICIpICgi
IDw8IGlubGluZUJveC0+bG9naWNhbFdpZHRoKCkgPDwgIngiIDw8IGlubGluZUJveC0+bG9naWNh
bEhlaWdodCgpIDw8ICIpIjsKIAotICAgICAgICAgICAgc3RyZWFtIDw8ICJpbmxpbmUgcnVuICI7
Ci0gICAgICAgICAgICBpZiAoaW5saW5lUnVuLnRleHRDb250ZXh0KCkpCi0gICAgICAgICAgICAg
ICAgc3RyZWFtIDw8ICIoIiA8PCBpbmxpbmVSdW4udGV4dENvbnRleHQoKS0+c3RhcnQoKSA8PCAi
LCAiIDw8IGlubGluZVJ1bi50ZXh0Q29udGV4dCgpLT5zdGFydCgpICsgaW5saW5lUnVuLnRleHRD
b250ZXh0KCktPmxlbmd0aCgpIDw8ICIpICI7Ci0gICAgICAgICAgICBzdHJlYW0gPDwgIigiIDw8
IGlubGluZVJ1bi5sb2dpY2FsTGVmdCgpIDw8ICIsICIgPDwgaW5saW5lUnVuLmxvZ2ljYWxSaWdo
dCgpIDw8ICIpICgiIDw8IGlubGluZVJ1bi5sb2dpY2FsV2lkdGgoKSA8PCAieCIgPDwgaW5saW5l
UnVuLmxvZ2ljYWxIZWlnaHQoKSA8PCAiKSI7CisgICAgICAgICAgICBzdHJlYW0gPDwgIiBpbmxp
bmUgcnVuIjsKKyAgICAgICAgICAgIGlmIChpbmxpbmVSdW4tPnRleHRDb250ZXh0KCkpCisgICAg
ICAgICAgICAgICAgc3RyZWFtIDw8ICIgKCIgPDwgaW5saW5lUnVuLT50ZXh0Q29udGV4dCgpLT5z
dGFydCgpIDw8ICIsICIgPDwgaW5saW5lUnVuLT50ZXh0Q29udGV4dCgpLT5lbmQoKSA8PCAiKSI7
CisgICAgICAgICAgICBzdHJlYW0gPDwgIiAoIiA8PCBpbmxpbmVSdW4tPmxvZ2ljYWxMZWZ0KCkg
PDwgIiwgIiA8PCBpbmxpbmVSdW4tPmxvZ2ljYWxUb3AoKSA8PCAiKSAoIiA8PCBpbmxpbmVSdW4t
PmxvZ2ljYWxXaWR0aCgpIDw8ICJ4IiA8PCBpbmxpbmVSdW4tPmxvZ2ljYWxIZWlnaHQoKSA8PCAi
KSI7CiAgICAgICAgICAgICBzdHJlYW0ubmV4dExpbmUoKTsKICAgICAgICAgICAgIG1pc21hdGNo
ZWQgPSB0cnVlOwogICAgICAgICB9CkBAIC0yNDUsNyArMjAxLDcgQEAgc3RhdGljIGJvb2wgb3V0
cHV0TWlzbWF0Y2hpbmdCbG9ja0JveEluZm9ybWF0aW9uSWZOZWVkZWQoVGV4dFN0cmVhbSYgc3Ry
ZWFtLCBjb24KICAgICAgICAgLy8gUHJvZHVjZSBhIFJlbmRlckJveCBtYXRjaGluZyBtYXJnaW4g
Ym94LgogICAgICAgICBhdXRvIGJvcmRlckJveCA9IGRpc3BsYXlCb3guYm9yZGVyQm94KCk7CiAK
LSAgICAgICAgcmV0dXJuIERpc3BsYXk6OkJveDo6UmVjdCB7CisgICAgICAgIHJldHVybiBEaXNw
bGF5OjpSZWN0IHsKICAgICAgICAgICAgIGJvcmRlckJveC50b3AoKSAtIGRpc3BsYXlCb3gubm9u
Q29sbGFwc2VkTWFyZ2luQmVmb3JlKCksCiAgICAgICAgICAgICBib3JkZXJCb3gubGVmdCgpIC0g
ZGlzcGxheUJveC5jb21wdXRlZE1hcmdpblN0YXJ0KCkudmFsdWVPcigwKSwKICAgICAgICAgICAg
IGRpc3BsYXlCb3guY29tcHV0ZWRNYXJnaW5TdGFydCgpLnZhbHVlT3IoMCkgKyBib3JkZXJCb3gu
d2lkdGgoKSArIGRpc3BsYXlCb3guY29tcHV0ZWRNYXJnaW5FbmQoKS52YWx1ZU9yKDApLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1h
dHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Jsb2NrZm9y
bWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwCmluZGV4IGY5NjMzYjQz
OGExYjFiMjI3ZGE1Yjg3MTQ2ZmYzMWViYzU2ODYyNWMuLmFlMWEyMWVkYjhjNTJkM2I2MWMxNTA4
MzMxY2MzMGQ4NjY0YmUxYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9ibG9j
a2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHRH
ZW9tZXRyeS5jcHAKQEAgLTc1LDEwICs3NSwxMCBAQCBIZWlnaHRBbmRNYXJnaW4gQmxvY2tGb3Jt
YXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmluRmxvd05vblJlcGxhY2VkSGVpZ2h0QW5kTWFyZwog
CiAgICAgICAgIC8vIDEuIHRoZSBib3R0b20gZWRnZSBvZiB0aGUgbGFzdCBsaW5lIGJveCwgaWYg
dGhlIGJveCBlc3RhYmxpc2hlcyBhIGlubGluZSBmb3JtYXR0aW5nIGNvbnRleHQgd2l0aCBvbmUg
b3IgbW9yZSBsaW5lcwogICAgICAgICBpZiAobGF5b3V0Qm94LmVzdGFibGlzaGVzSW5saW5lRm9y
bWF0dGluZ0NvbnRleHQoKSkgewotICAgICAgICAgICAgLy8gVGhpcyBpcyB0ZW1wIGFuZCB3aWxs
IGJlIHJlcGxhY2VkIGJ5IHRoZSBjb3JyZWN0IGRpc3BsYXkgYm94IG9uY2UgaW5saW5lIHJ1bnMg
bW92ZSBvdmVyIHRvIHRoZSBkaXNwbGF5IHRyZWUuCi0gICAgICAgICAgICBhdXRvJiBpbmxpbmVS
dW5zID0gZG93bmNhc3Q8SW5saW5lRm9ybWF0dGluZ1N0YXRlPihsYXlvdXRTdGF0ZS5lc3RhYmxp
c2hlZEZvcm1hdHRpbmdTdGF0ZShsYXlvdXRCb3gpKS5pbmxpbmVSdW5zKCk7Ci0gICAgICAgICAg
ICBhdXRvIGJvdHRvbUVkZ2UgPSBpbmxpbmVSdW5zLmlzRW1wdHkoKSA/IExheW91dFVuaXQoKSA6
IGlubGluZVJ1bnMubGFzdCgpLmxvZ2ljYWxCb3R0b20oKTsKLSAgICAgICAgICAgIHJldHVybiB7
IGJvdHRvbUVkZ2UgLSBib3JkZXJBbmRQYWRkaW5nVG9wLCBub25Db2xsYXBzZWRNYXJnaW4gfTsK
KyAgICAgICAgICAgIGF1dG8mIGxpbmVCb3hlcyA9IGRvd25jYXN0PElubGluZUZvcm1hdHRpbmdT
dGF0ZT4obGF5b3V0U3RhdGUuZXN0YWJsaXNoZWRGb3JtYXR0aW5nU3RhdGUobGF5b3V0Qm94KSku
bGluZUJveGVzKCk7CisgICAgICAgICAgICAvLyBFdmVuIGVtcHR5IGNvbnRhaW5lcnMgZ2VuZXJh
dGUgb25lIGxpbmUuIAorICAgICAgICAgICAgQVNTRVJUKCFsaW5lQm94ZXMuaXNFbXB0eSgpKTsK
KyAgICAgICAgICAgIHJldHVybiB7IGxpbmVCb3hlcy5sYXN0KCkubG9naWNhbEJvdHRvbSgpIC0g
Ym9yZGVyQW5kUGFkZGluZ1RvcCwgbm9uQ29sbGFwc2VkTWFyZ2luIH07CiAgICAgICAgIH0KIAog
ICAgICAgICAvLyAyLiB0aGUgYm90dG9tIGVkZ2Ugb2YgdGhlIGJvdHRvbSAocG9zc2libHkgY29s
bGFwc2VkKSBtYXJnaW4gb2YgaXRzIGxhc3QgaW4tZmxvdyBjaGlsZCwgaWYgdGhlIGNoaWxkJ3Mg
Ym90dG9tIG1hcmdpbi4uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Rpc3Bs
YXl0cmVlL0Rpc3BsYXlCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Rpc3BsYXl0cmVl
L0Rpc3BsYXlCb3guY3BwCmluZGV4IDBlZWVhZWNkMzc0YWFiZGIzYWVlZjAwYzhmMzEyNGE2Y2Fl
MGFmMzkuLjZhZGU0MDZkNWM0Mjc1ZWFkNWJmMzVlMDJkNDc2NjhlMDZhNTM1MDMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5Qm94LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheUJveC5jcHAKQEAgLTM2
LDE3ICszNiw2IEBAIG5hbWVzcGFjZSBEaXNwbGF5IHsKIAogV1RGX01BS0VfSVNPX0FMTE9DQVRF
RF9JTVBMKEJveCk7CiAKLUJveDo6UmVjdDo6UmVjdChMYXlvdXRVbml0IHRvcCwgTGF5b3V0VW5p
dCBsZWZ0LCBMYXlvdXRVbml0IHdpZHRoLCBMYXlvdXRVbml0IGhlaWdodCkKLSAgICA6IG1fcmVj
dChsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQpCi17Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAg
IG1faGFzVmFsaWRUb3AgPSB0cnVlOwotICAgIG1faGFzVmFsaWRMZWZ0ID0gdHJ1ZTsKLSAgICBt
X2hhc1ZhbGlkV2lkdGggPSB0cnVlOwotICAgIG1faGFzVmFsaWRIZWlnaHQgPSB0cnVlOwotI2Vu
ZGlmCi19Ci0KIEJveDo6Qm94KGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKICAgICA6IG1fc3R5
bGUoc3R5bGUpCiB7CkBAIC04OCw3ICs3Nyw3IEBAIEJveDo6U3R5bGU6OlN0eWxlKGNvbnN0IFJl
bmRlclN0eWxlJiBzdHlsZSkKIHsKIH0KIAotQm94OjpSZWN0IEJveDo6bWFyZ2luQm94KCkgY29u
c3QKK1JlY3QgQm94OjptYXJnaW5Cb3goKSBjb25zdAogewogICAgIGF1dG8gYm9yZGVyQm94ID0g
dGhpcy0+Ym9yZGVyQm94KCk7CiAKQEAgLTEwMCw3ICs4OSw3IEBAIEJveDo6UmVjdCBCb3g6Om1h
cmdpbkJveCgpIGNvbnN0CiAgICAgcmV0dXJuIG1hcmdpbkJveDsKIH0KIAotQm94OjpSZWN0IEJv
eDo6bm9uQ29sbGFwc2VkTWFyZ2luQm94KCkgY29uc3QKK1JlY3QgQm94Ojpub25Db2xsYXBzZWRN
YXJnaW5Cb3goKSBjb25zdAogewogICAgIGF1dG8gYm9yZGVyQm94ID0gdGhpcy0+Ym9yZGVyQm94
KCk7CiAKQEAgLTExMiw3ICsxMDEsNyBAQCBCb3g6OlJlY3QgQm94Ojpub25Db2xsYXBzZWRNYXJn
aW5Cb3goKSBjb25zdAogICAgIHJldHVybiBtYXJnaW5Cb3g7CiB9CiAKLUJveDo6UmVjdCBCb3g6
OmJvcmRlckJveCgpIGNvbnN0CitSZWN0IEJveDo6Ym9yZGVyQm94KCkgY29uc3QKIHsKICAgICBS
ZWN0IGJvcmRlckJveDsKICAgICBib3JkZXJCb3guc2V0VG9wTGVmdCh7IH0pOwpAQCAtMTIwLDcg
KzEwOSw3IEBAIEJveDo6UmVjdCBCb3g6OmJvcmRlckJveCgpIGNvbnN0CiAgICAgcmV0dXJuIGJv
cmRlckJveDsKIH0KIAotQm94OjpSZWN0IEJveDo6cGFkZGluZ0JveCgpIGNvbnN0CitSZWN0IEJv
eDo6cGFkZGluZ0JveCgpIGNvbnN0CiB7CiAgICAgYXV0byBib3JkZXJCb3ggPSB0aGlzLT5ib3Jk
ZXJCb3goKTsKIApAQCAtMTMyLDcgKzEyMSw3IEBAIEJveDo6UmVjdCBCb3g6OnBhZGRpbmdCb3go
KSBjb25zdAogICAgIHJldHVybiBwYWRkaW5nQm94OwogfQogCi1Cb3g6OlJlY3QgQm94Ojpjb250
ZW50Qm94KCkgY29uc3QKK1JlY3QgQm94Ojpjb250ZW50Qm94KCkgY29uc3QKIHsKICAgICBSZWN0
IGNvbnRlbnRCb3g7CiAgICAgY29udGVudEJveC5zZXRUb3AoY29udGVudEJveFRvcCgpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5Qm94Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheUJveC5oCmluZGV4IDg2
ODVjMzc4YzQ4YTg4NmMyNWMxYjkzNmQwNmIzNmEyMTM2ZTJlNzEuLjVjZGY2M2JmNzc5NTkxYTg4
ZTc0ODIzMjYyYTBhOTBjMjE5N2E0YzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9kaXNwbGF5dHJlZS9EaXNwbGF5Qm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Rp
c3BsYXl0cmVlL0Rpc3BsYXlCb3guaApAQCAtMjcsNiArMjcsNyBAQAogCiAjaWYgRU5BQkxFKExB
WU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCiAKKyNpbmNsdWRlICJEaXNwbGF5UmVjdC5oIgogI2lu
Y2x1ZGUgIkxheW91dFVuaXRzLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGVDb25zdGFudHMuaCIK
ICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+CkBAIC02MCw2OCArNjEsNiBAQCBwdWJsaWM6CiAK
ICAgICBCb3goY29uc3QgUmVuZGVyU3R5bGUmKTsKICAgICBCb3goY29uc3QgQm94Jik7Ci0KLSAg
ICBjbGFzcyBSZWN0IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFJlY3QoKSA9IGRlZmF1bHQ7Ci0g
ICAgICAgIFJlY3QoTGF5b3V0VW5pdCB0b3AsIExheW91dFVuaXQgbGVmdCwgTGF5b3V0VW5pdCB3
aWR0aCwgTGF5b3V0VW5pdCBoZWlnaHQpOwotICAgICAgICAKLSAgICAgICAgTGF5b3V0VW5pdCB0
b3AoKSBjb25zdDsKLSAgICAgICAgTGF5b3V0VW5pdCBsZWZ0KCkgY29uc3Q7Ci0gICAgICAgIExh
eW91dFBvaW50IHRvcExlZnQoKSBjb25zdDsKLQotICAgICAgICBMYXlvdXRVbml0IGJvdHRvbSgp
IGNvbnN0OwotICAgICAgICBMYXlvdXRVbml0IHJpZ2h0KCkgY29uc3Q7ICAgICAgICAKLSAgICAg
ICAgTGF5b3V0UG9pbnQgYm90dG9tUmlnaHQoKSBjb25zdDsKLQotICAgICAgICBMYXlvdXRVbml0
IHdpZHRoKCkgY29uc3Q7Ci0gICAgICAgIExheW91dFVuaXQgaGVpZ2h0KCkgY29uc3Q7Ci0gICAg
ICAgIExheW91dFNpemUgc2l6ZSgpIGNvbnN0OwotCi0gICAgICAgIHZvaWQgc2V0VG9wKExheW91
dFVuaXQpOwotICAgICAgICB2b2lkIHNldExlZnQoTGF5b3V0VW5pdCk7Ci0gICAgICAgIHZvaWQg
c2V0VG9wTGVmdChjb25zdCBMYXlvdXRQb2ludCYpOwotICAgICAgICB2b2lkIHNldFdpZHRoKExh
eW91dFVuaXQpOwotICAgICAgICB2b2lkIHNldEhlaWdodChMYXlvdXRVbml0KTsKLSAgICAgICAg
dm9pZCBzZXRTaXplKGNvbnN0IExheW91dFNpemUmKTsKLQotICAgICAgICB2b2lkIHNoaWZ0TGVm
dFRvKExheW91dFVuaXQpOwotICAgICAgICB2b2lkIHNoaWZ0UmlnaHRUbyhMYXlvdXRVbml0KTsK
LSAgICAgICAgdm9pZCBzaGlmdFRvcFRvKExheW91dFVuaXQpOwotICAgICAgICB2b2lkIHNoaWZ0
Qm90dG9tVG8oTGF5b3V0VW5pdCk7Ci0KLSAgICAgICAgdm9pZCBtb3ZlSG9yaXpvbnRhbGx5KExh
eW91dFVuaXQpOwotICAgICAgICB2b2lkIG1vdmVWZXJ0aWNhbGx5KExheW91dFVuaXQpOwotCi0g
ICAgICAgIHZvaWQgZXhwYW5kKExheW91dFVuaXQsIExheW91dFVuaXQpOwotICAgICAgICBib29s
IGludGVyc2VjdHMoY29uc3QgUmVjdCYgcmVjdCkgY29uc3QgeyByZXR1cm4gbV9yZWN0LmludGVy
c2VjdHMocmVjdCk7IH0KLQotICAgICAgICBSZWN0IGNsb25lKCkgY29uc3Q7Ci0gICAgICAgIG9w
ZXJhdG9yIExheW91dFJlY3QoKSBjb25zdDsKLQotICAgIHByaXZhdGU6Ci0jaWYgIUFTU0VSVF9E
SVNBQkxFRAotICAgICAgICB2b2lkIGludmFsaWRhdGVUb3AoKSB7IG1faGFzVmFsaWRUb3AgPSBm
YWxzZTsgfQotICAgICAgICB2b2lkIGludmFsaWRhdGVMZWZ0KCkgeyBtX2hhc1ZhbGlkTGVmdCA9
IGZhbHNlOyB9Ci0gICAgICAgIHZvaWQgaW52YWxpZGF0ZVdpZHRoKCkgeyBtX2hhc1ZhbGlkV2lk
dGggPSBmYWxzZTsgfQotICAgICAgICB2b2lkIGludmFsaWRhdGVIZWlnaHQoKSB7IG1faGFzVmFs
aWRIZWlnaHQgPSBmYWxzZTsgfQotICAgICAgICB2b2lkIGludmFsaWRhdGVQb3NpdGlvbigpOwot
Ci0gICAgICAgIGJvb2wgaGFzVmFsaWRQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faGFzVmFs
aWRUb3AgJiYgbV9oYXNWYWxpZExlZnQ7IH0KLSAgICAgICAgYm9vbCBoYXNWYWxpZFNpemUoKSBj
b25zdCB7IHJldHVybiBtX2hhc1ZhbGlkV2lkdGggJiYgbV9oYXNWYWxpZEhlaWdodDsgfQotICAg
ICAgICBib29sIGhhc1ZhbGlkR2VvbWV0cnkoKSBjb25zdCB7IHJldHVybiBoYXNWYWxpZFBvc2l0
aW9uKCkgJiYgaGFzVmFsaWRTaXplKCk7IH0KLSAgICAKLSAgICAgICAgdm9pZCBzZXRIYXNWYWxp
ZFBvc2l0aW9uKCk7Ci0gICAgICAgIHZvaWQgc2V0SGFzVmFsaWRTaXplKCk7Ci0KLSAgICAgICAg
Ym9vbCBtX2hhc1ZhbGlkVG9wIHsgZmFsc2UgfTsKLSAgICAgICAgYm9vbCBtX2hhc1ZhbGlkTGVm
dCB7IGZhbHNlIH07Ci0gICAgICAgIGJvb2wgbV9oYXNWYWxpZFdpZHRoIHsgZmFsc2UgfTsKLSAg
ICAgICAgYm9vbCBtX2hhc1ZhbGlkSGVpZ2h0IHsgZmFsc2UgfTsKLSNlbmRpZgotICAgICAgICBM
YXlvdXRSZWN0IG1fcmVjdDsKLSAgICB9OwotCiAgICAgfkJveCgpOwogCiAgICAgTGF5b3V0VW5p
dCB0b3AoKSBjb25zdDsKQEAgLTEzOSw2ICs3OCw3IEBAIHB1YmxpYzoKICAgICBSZWN0IHJlY3RX
aXRoTWFyZ2luKCkgY29uc3Q7CiAKICAgICBMYXlvdXQ6OlVzZWRWZXJ0aWNhbE1hcmdpbiB2ZXJ0
aWNhbE1hcmdpbigpIGNvbnN0OworICAgIExheW91dDo6VXNlZEhvcml6b250YWxNYXJnaW4gaG9y
aXpvbnRhbE1hcmdpbigpIGNvbnN0OwogICAgIExheW91dFVuaXQgbWFyZ2luQmVmb3JlKCkgY29u
c3Q7CiAgICAgTGF5b3V0VW5pdCBtYXJnaW5TdGFydCgpIGNvbnN0OwogICAgIExheW91dFVuaXQg
bWFyZ2luQWZ0ZXIoKSBjb25zdDsKQEAgLTE3OSw2ICsxMTksOSBAQCBwdWJsaWM6CiAgICAgTGF5
b3V0VW5pdCBwYWRkaW5nQm94SGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gcGFkZGluZ1RvcCgpLnZh
bHVlT3IoMCkgKyBjb250ZW50Qm94SGVpZ2h0KCkgKyBwYWRkaW5nQm90dG9tKCkudmFsdWVPcigw
KTsgfQogICAgIExheW91dFVuaXQgcGFkZGluZ0JveFdpZHRoKCkgY29uc3QgeyByZXR1cm4gcGFk
ZGluZ0xlZnQoKS52YWx1ZU9yKDApICsgY29udGVudEJveFdpZHRoKCkgKyBwYWRkaW5nUmlnaHQo
KS52YWx1ZU9yKDApOyB9CiAKKyAgICBMYXlvdXRVbml0IGJvcmRlckJveFdpZHRoKCkgY29uc3Qg
eyByZXR1cm4gYm9yZGVyTGVmdCgpICsgcGFkZGluZ0JveFdpZHRoKCkgKyBib3JkZXJSaWdodCgp
OyB9CisgICAgTGF5b3V0VW5pdCBtYXJnaW5Cb3hXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1hcmdp
blN0YXJ0KCkgKyBib3JkZXJCb3hXaWR0aCgpICsgbWFyZ2luRW5kKCk7IH0KKwogICAgIFJlY3Qg
bWFyZ2luQm94KCkgY29uc3Q7CiAgICAgUmVjdCBub25Db2xsYXBzZWRNYXJnaW5Cb3goKSBjb25z
dDsKIApAQCAtMjY0LDI0ICsyMDcsNiBAQCBwcml2YXRlOgogfTsKIAogI2lmICFBU1NFUlRfRElT
QUJMRUQKLWlubGluZSB2b2lkIEJveDo6UmVjdDo6aW52YWxpZGF0ZVBvc2l0aW9uKCkKLXsKLSAg
ICBpbnZhbGlkYXRlVG9wKCk7Ci0gICAgaW52YWxpZGF0ZUxlZnQoKTsKLX0KLQotaW5saW5lIHZv
aWQgQm94OjpSZWN0OjpzZXRIYXNWYWxpZFBvc2l0aW9uKCkKLXsKLSAgICBtX2hhc1ZhbGlkVG9w
ID0gdHJ1ZTsKLSAgICBtX2hhc1ZhbGlkTGVmdCA9IHRydWU7Ci19Ci0KLWlubGluZSB2b2lkIEJv
eDo6UmVjdDo6c2V0SGFzVmFsaWRTaXplKCkKLXsKLSAgICBtX2hhc1ZhbGlkV2lkdGggPSB0cnVl
OwotICAgIG1faGFzVmFsaWRIZWlnaHQgPSB0cnVlOwotfQotCiBpbmxpbmUgdm9pZCBCb3g6Omlu
dmFsaWRhdGVNYXJnaW4oKQogewogICAgIG1faGFzVmFsaWRIb3Jpem9udGFsTWFyZ2luID0gZmFs
c2U7CkBAIC0yODksMTY5ICsyMTQsNiBAQCBpbmxpbmUgdm9pZCBCb3g6OmludmFsaWRhdGVNYXJn
aW4oKQogfQogI2VuZGlmCiAKLWlubGluZSBMYXlvdXRVbml0IEJveDo6UmVjdDo6dG9wKCkgY29u
c3QKLXsKLSAgICBBU1NFUlQobV9oYXNWYWxpZFRvcCk7Ci0gICAgcmV0dXJuIG1fcmVjdC55KCk7
Ci19Ci0KLWlubGluZSBMYXlvdXRVbml0IEJveDo6UmVjdDo6bGVmdCgpIGNvbnN0Ci17Ci0gICAg
QVNTRVJUKG1faGFzVmFsaWRMZWZ0KTsKLSAgICByZXR1cm4gbV9yZWN0LngoKTsKLX0KLQotaW5s
aW5lIExheW91dFVuaXQgQm94OjpSZWN0Ojpib3R0b20oKSBjb25zdAotewotICAgIEFTU0VSVCht
X2hhc1ZhbGlkVG9wICYmIG1faGFzVmFsaWRIZWlnaHQpOwotICAgIHJldHVybiBtX3JlY3QubWF4
WSgpOwotfQotCi1pbmxpbmUgTGF5b3V0VW5pdCBCb3g6OlJlY3Q6OnJpZ2h0KCkgY29uc3QKLXsK
LSAgICBBU1NFUlQobV9oYXNWYWxpZExlZnQgJiYgbV9oYXNWYWxpZFdpZHRoKTsKLSAgICByZXR1
cm4gbV9yZWN0Lm1heFgoKTsKLX0KLQotaW5saW5lIExheW91dFBvaW50IEJveDo6UmVjdDo6dG9w
TGVmdCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGhhc1ZhbGlkUG9zaXRpb24oKSk7Ci0gICAgcmV0
dXJuIG1fcmVjdC5taW5YTWluWUNvcm5lcigpOwotfQotCi1pbmxpbmUgTGF5b3V0UG9pbnQgQm94
OjpSZWN0Ojpib3R0b21SaWdodCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGhhc1ZhbGlkR2VvbWV0
cnkoKSk7Ci0gICAgcmV0dXJuIG1fcmVjdC5tYXhYTWF4WUNvcm5lcigpOwotfQotCi1pbmxpbmUg
TGF5b3V0U2l6ZSBCb3g6OlJlY3Q6OnNpemUoKSBjb25zdAotewotICAgIEFTU0VSVChoYXNWYWxp
ZFNpemUoKSk7Ci0gICAgcmV0dXJuIG1fcmVjdC5zaXplKCk7Ci19Ci0KLWlubGluZSBMYXlvdXRV
bml0IEJveDo6UmVjdDo6d2lkdGgoKSBjb25zdAotewotICAgIEFTU0VSVChtX2hhc1ZhbGlkV2lk
dGgpOwotICAgIHJldHVybiBtX3JlY3Qud2lkdGgoKTsKLX0KLQotaW5saW5lIExheW91dFVuaXQg
Qm94OjpSZWN0OjpoZWlnaHQoKSBjb25zdAotewotICAgIEFTU0VSVChtX2hhc1ZhbGlkSGVpZ2h0
KTsKLSAgICByZXR1cm4gbV9yZWN0LmhlaWdodCgpOwotfQotCi1pbmxpbmUgdm9pZCBCb3g6OlJl
Y3Q6OnNldFRvcExlZnQoY29uc3QgTGF5b3V0UG9pbnQmIHRvcExlZnQpCi17Ci0jaWYgIUFTU0VS
VF9ESVNBQkxFRAotICAgIHNldEhhc1ZhbGlkUG9zaXRpb24oKTsKLSNlbmRpZgotICAgIG1fcmVj
dC5zZXRMb2NhdGlvbih0b3BMZWZ0KTsKLX0KLQotaW5saW5lIHZvaWQgQm94OjpSZWN0OjpzZXRU
b3AoTGF5b3V0VW5pdCB0b3ApCi17Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIG1faGFzVmFs
aWRUb3AgPSB0cnVlOwotI2VuZGlmCi0gICAgbV9yZWN0LnNldFkodG9wKTsKLX0KLQotaW5saW5l
IHZvaWQgQm94OjpSZWN0OjpzZXRMZWZ0KExheW91dFVuaXQgbGVmdCkKLXsKLSNpZiAhQVNTRVJU
X0RJU0FCTEVECi0gICAgbV9oYXNWYWxpZExlZnQgPSB0cnVlOwotI2VuZGlmCi0gICAgbV9yZWN0
LnNldFgobGVmdCk7Ci19Ci0KLWlubGluZSB2b2lkIEJveDo6UmVjdDo6c2V0V2lkdGgoTGF5b3V0
VW5pdCB3aWR0aCkKLXsKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgbV9oYXNWYWxpZFdpZHRo
ID0gdHJ1ZTsKLSNlbmRpZgotICAgIG1fcmVjdC5zZXRXaWR0aCh3aWR0aCk7Ci19Ci0KLWlubGlu
ZSB2b2lkIEJveDo6UmVjdDo6c2V0SGVpZ2h0KExheW91dFVuaXQgaGVpZ2h0KQotewotI2lmICFB
U1NFUlRfRElTQUJMRUQKLSAgICBtX2hhc1ZhbGlkSGVpZ2h0ID0gdHJ1ZTsKLSNlbmRpZgotICAg
IG1fcmVjdC5zZXRIZWlnaHQoaGVpZ2h0KTsKLX0KLQotaW5saW5lIHZvaWQgQm94OjpSZWN0Ojpz
ZXRTaXplKGNvbnN0IExheW91dFNpemUmIHNpemUpCi17Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAot
ICAgIHNldEhhc1ZhbGlkU2l6ZSgpOwotI2VuZGlmCi0gICAgbV9yZWN0LnNldFNpemUoc2l6ZSk7
Ci19Ci0KLWlubGluZSB2b2lkIEJveDo6UmVjdDo6c2hpZnRMZWZ0VG8oTGF5b3V0VW5pdCBsZWZ0
KQotewotICAgIEFTU0VSVChtX2hhc1ZhbGlkTGVmdCk7Ci0gICAgbV9yZWN0LnNoaWZ0WEVkZ2VU
byhsZWZ0KTsKLX0KLQotaW5saW5lIHZvaWQgQm94OjpSZWN0OjpzaGlmdFJpZ2h0VG8oTGF5b3V0
VW5pdCByaWdodCkKLXsKLSAgICBBU1NFUlQobV9oYXNWYWxpZExlZnQgJiYgbV9oYXNWYWxpZFdp
ZHRoKTsKLSAgICBtX3JlY3Quc2hpZnRNYXhYRWRnZVRvKHJpZ2h0KTsKLX0KLQotaW5saW5lIHZv
aWQgQm94OjpSZWN0OjpzaGlmdFRvcFRvKExheW91dFVuaXQgdG9wKQotewotICAgIEFTU0VSVCht
X2hhc1ZhbGlkVG9wKTsKLSAgICBtX3JlY3Quc2hpZnRZRWRnZVRvKHRvcCk7Ci19Ci0KLWlubGlu
ZSB2b2lkIEJveDo6UmVjdDo6c2hpZnRCb3R0b21UbyhMYXlvdXRVbml0IGJvdHRvbSkKLXsKLSAg
ICBBU1NFUlQobV9oYXNWYWxpZFRvcCAmJiBtX2hhc1ZhbGlkSGVpZ2h0KTsKLSAgICBtX3JlY3Qu
c2hpZnRNYXhZRWRnZVRvKGJvdHRvbSk7Ci19Ci0KLWlubGluZSB2b2lkIEJveDo6UmVjdDo6bW92
ZUhvcml6b250YWxseShMYXlvdXRVbml0IG9mZnNldCkKLXsKLSAgICBBU1NFUlQobV9oYXNWYWxp
ZExlZnQpOwotICAgIG1fcmVjdC5tb3ZlKG9mZnNldCwgMF9sdSk7Ci19Ci0KLWlubGluZSB2b2lk
IEJveDo6UmVjdDo6bW92ZVZlcnRpY2FsbHkoTGF5b3V0VW5pdCBvZmZzZXQpCi17Ci0gICAgQVNT
RVJUKG1faGFzVmFsaWRUb3ApOwotICAgIG1fcmVjdC5tb3ZlKDBfbHUsIG9mZnNldCk7Ci19Ci0K
LWlubGluZSB2b2lkIEJveDo6UmVjdDo6ZXhwYW5kKExheW91dFVuaXQgd2lkdGgsIExheW91dFVu
aXQgaGVpZ2h0KQotewotICAgIEFTU0VSVChoYXNWYWxpZEdlb21ldHJ5KCkpOwotICAgIG1fcmVj
dC5leHBhbmQod2lkdGgsIGhlaWdodCk7Ci19Ci0KLWlubGluZSBCb3g6OlJlY3QgQm94OjpSZWN0
OjpjbG9uZSgpIGNvbnN0Ci17Ci0gICAgUmVjdCByZWN0OwotI2lmICFBU1NFUlRfRElTQUJMRUQK
LSAgICByZWN0Lm1faGFzVmFsaWRUb3AgPSBtX2hhc1ZhbGlkVG9wOwotICAgIHJlY3QubV9oYXNW
YWxpZExlZnQgPSBtX2hhc1ZhbGlkTGVmdDsKLSAgICByZWN0Lm1faGFzVmFsaWRXaWR0aCA9IG1f
aGFzVmFsaWRXaWR0aDsKLSAgICByZWN0Lm1faGFzVmFsaWRIZWlnaHQgID0gbV9oYXNWYWxpZEhl
aWdodDsKLSNlbmRpZiAKLSAgICByZWN0Lm1fcmVjdCA9IG1fcmVjdDsKLSAgICByZXR1cm4gcmVj
dDsKLX0KLQotaW5saW5lIEJveDo6UmVjdDo6b3BlcmF0b3IgTGF5b3V0UmVjdCgpIGNvbnN0Ci17
Ci0gICAgQVNTRVJUKGhhc1ZhbGlkR2VvbWV0cnkoKSk7IAotICAgIHJldHVybiBtX3JlY3Q7Ci19
Ci0KIGlubGluZSBMYXlvdXRVbml0IEJveDo6dG9wKCkgY29uc3QKIHsKICAgICBBU1NFUlQobV9o
YXNWYWxpZFRvcCAmJiAobV9oYXNFc3RpbWF0ZWRNYXJnaW5CZWZvcmUgfHwgbV9oYXNWYWxpZFZl
cnRpY2FsTWFyZ2luKSk7CkBAIC01NjYsNyArMzI4LDcgQEAgaW5saW5lIHZvaWQgQm94OjpzZXRQ
YWRkaW5nKE9wdGlvbmFsPExheW91dDo6RWRnZXM+IHBhZGRpbmcpCiAgICAgbV9wYWRkaW5nID0g
cGFkZGluZzsKIH0KIAotaW5saW5lIEJveDo6UmVjdCBCb3g6OnJlY3RXaXRoTWFyZ2luKCkgY29u
c3QKK2lubGluZSBSZWN0IEJveDo6cmVjdFdpdGhNYXJnaW4oKSBjb25zdAogewogICAgIGF1dG8g
bWFyZ2luQWZ0ZXIgPSB0aGlzLT5tYXJnaW5BZnRlcigpOwogICAgIGlmIChtX3ZlcnRpY2FsTWFy
Z2luLmNvbGxhcHNlZFZhbHVlcygpLmlzQ29sbGFwc2VkVGhyb3VnaCkKQEAgLTU4MCw2ICszNDIs
MTIgQEAgaW5saW5lIExheW91dDo6VXNlZFZlcnRpY2FsTWFyZ2luIEJveDo6dmVydGljYWxNYXJn
aW4oKSBjb25zdAogICAgIHJldHVybiBtX3ZlcnRpY2FsTWFyZ2luOwogfQogCitpbmxpbmUgTGF5
b3V0OjpVc2VkSG9yaXpvbnRhbE1hcmdpbiBCb3g6Omhvcml6b250YWxNYXJnaW4oKSBjb25zdAor
eworICAgIEFTU0VSVChtX2hhc1ZhbGlkSG9yaXpvbnRhbE1hcmdpbik7CisgICAgcmV0dXJuIG1f
aG9yaXpvbnRhbE1hcmdpbjsKK30KKwogaW5saW5lIExheW91dFVuaXQgQm94OjptYXJnaW5CZWZv
cmUoKSBjb25zdAogewogICAgIEFTU0VSVChtX2hhc1ZhbGlkVmVydGljYWxNYXJnaW4pOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Rpc3BsYXl0cmVlL0Rpc3BsYXlSZWN0Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheVJlY3QuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi43MmM4OTdlYWM0OTgxZjIxZDA2MGRiNDViY2NhZmYyYjJhMjM1NjRkCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Rpc3BsYXl0cmVlL0Rpc3BsYXlSZWN0LmgK
QEAgLTAsMCArMSwyOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJM
RShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQorCisjaW5jbHVkZSAiTGF5b3V0VW5pdHMuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZW5kZXJTdHlsZTsKKworbmFtZXNwYWNl
IERpc3BsYXkgeworCitjbGFzcyBSZWN0IHsKK3B1YmxpYzoKKyAgICBSZWN0KCkgPSBkZWZhdWx0
OworICAgIFJlY3QoTGF5b3V0VW5pdCB0b3AsIExheW91dFVuaXQgbGVmdCwgTGF5b3V0VW5pdCB3
aWR0aCwgTGF5b3V0VW5pdCBoZWlnaHQpOworICAgIAorICAgIExheW91dFVuaXQgdG9wKCkgY29u
c3Q7CisgICAgTGF5b3V0VW5pdCBsZWZ0KCkgY29uc3Q7CisgICAgTGF5b3V0UG9pbnQgdG9wTGVm
dCgpIGNvbnN0OworCisgICAgTGF5b3V0VW5pdCBib3R0b20oKSBjb25zdDsKKyAgICBMYXlvdXRV
bml0IHJpZ2h0KCkgY29uc3Q7ICAgICAgICAKKyAgICBMYXlvdXRQb2ludCBib3R0b21SaWdodCgp
IGNvbnN0OworCisgICAgTGF5b3V0VW5pdCB3aWR0aCgpIGNvbnN0OworICAgIExheW91dFVuaXQg
aGVpZ2h0KCkgY29uc3Q7CisgICAgTGF5b3V0U2l6ZSBzaXplKCkgY29uc3Q7CisKKyAgICB2b2lk
IHNldFRvcChMYXlvdXRVbml0KTsKKyAgICB2b2lkIHNldExlZnQoTGF5b3V0VW5pdCk7CisgICAg
dm9pZCBzZXRUb3BMZWZ0KGNvbnN0IExheW91dFBvaW50Jik7CisgICAgdm9pZCBzZXRXaWR0aChM
YXlvdXRVbml0KTsKKyAgICB2b2lkIHNldEhlaWdodChMYXlvdXRVbml0KTsKKyAgICB2b2lkIHNl
dFNpemUoY29uc3QgTGF5b3V0U2l6ZSYpOworCisgICAgdm9pZCBzaGlmdExlZnRUbyhMYXlvdXRV
bml0KTsKKyAgICB2b2lkIHNoaWZ0UmlnaHRUbyhMYXlvdXRVbml0KTsKKyAgICB2b2lkIHNoaWZ0
VG9wVG8oTGF5b3V0VW5pdCk7CisgICAgdm9pZCBzaGlmdEJvdHRvbVRvKExheW91dFVuaXQpOwor
CisgICAgdm9pZCBtb3ZlSG9yaXpvbnRhbGx5KExheW91dFVuaXQpOworICAgIHZvaWQgbW92ZVZl
cnRpY2FsbHkoTGF5b3V0VW5pdCk7CisKKyAgICB2b2lkIGV4cGFuZChMYXlvdXRVbml0LCBMYXlv
dXRVbml0KTsKKyAgICB2b2lkIGV4cGFuZEhvcml6b250YWxseShMYXlvdXRVbml0IGRlbHRhKSB7
IGV4cGFuZChkZWx0YSwgMCk7IH0KKyAgICB2b2lkIGV4cGFuZFZlcnRpY2FsbHkoTGF5b3V0VW5p
dCBkZWx0YSkgeyBleHBhbmQoMCwgZGVsdGEpOyB9CisgICAgYm9vbCBpbnRlcnNlY3RzKGNvbnN0
IFJlY3QmIHJlY3QpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdC5pbnRlcnNlY3RzKHJlY3QpOyB9CisK
KyAgICBSZWN0IGNsb25lKCkgY29uc3Q7CisgICAgb3BlcmF0b3IgTGF5b3V0UmVjdCgpIGNvbnN0
OworCitwcml2YXRlOgorI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICB2b2lkIGludmFsaWRhdGVU
b3AoKSB7IG1faGFzVmFsaWRUb3AgPSBmYWxzZTsgfQorICAgIHZvaWQgaW52YWxpZGF0ZUxlZnQo
KSB7IG1faGFzVmFsaWRMZWZ0ID0gZmFsc2U7IH0KKyAgICB2b2lkIGludmFsaWRhdGVXaWR0aCgp
IHsgbV9oYXNWYWxpZFdpZHRoID0gZmFsc2U7IH0KKyAgICB2b2lkIGludmFsaWRhdGVIZWlnaHQo
KSB7IG1faGFzVmFsaWRIZWlnaHQgPSBmYWxzZTsgfQorICAgIHZvaWQgaW52YWxpZGF0ZVBvc2l0
aW9uKCk7CisKKyAgICBib29sIGhhc1ZhbGlkUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX2hh
c1ZhbGlkVG9wICYmIG1faGFzVmFsaWRMZWZ0OyB9CisgICAgYm9vbCBoYXNWYWxpZFNpemUoKSBj
b25zdCB7IHJldHVybiBtX2hhc1ZhbGlkV2lkdGggJiYgbV9oYXNWYWxpZEhlaWdodDsgfQorICAg
IGJvb2wgaGFzVmFsaWRHZW9tZXRyeSgpIGNvbnN0IHsgcmV0dXJuIGhhc1ZhbGlkUG9zaXRpb24o
KSAmJiBoYXNWYWxpZFNpemUoKTsgfQorCisgICAgdm9pZCBzZXRIYXNWYWxpZFBvc2l0aW9uKCk7
CisgICAgdm9pZCBzZXRIYXNWYWxpZFNpemUoKTsKKworICAgIGJvb2wgbV9oYXNWYWxpZFRvcCB7
IGZhbHNlIH07CisgICAgYm9vbCBtX2hhc1ZhbGlkTGVmdCB7IGZhbHNlIH07CisgICAgYm9vbCBt
X2hhc1ZhbGlkV2lkdGggeyBmYWxzZSB9OworICAgIGJvb2wgbV9oYXNWYWxpZEhlaWdodCB7IGZh
bHNlIH07CisjZW5kaWYKKyAgICBMYXlvdXRSZWN0IG1fcmVjdDsKK307CisKK2lubGluZSBSZWN0
OjpSZWN0KExheW91dFVuaXQgdG9wLCBMYXlvdXRVbml0IGxlZnQsIExheW91dFVuaXQgd2lkdGgs
IExheW91dFVuaXQgaGVpZ2h0KQorICAgIDogbV9yZWN0KGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdo
dCkKK3sKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgbV9oYXNWYWxpZFRvcCA9IHRydWU7Cisg
ICAgbV9oYXNWYWxpZExlZnQgPSB0cnVlOworICAgIG1faGFzVmFsaWRXaWR0aCA9IHRydWU7Cisg
ICAgbV9oYXNWYWxpZEhlaWdodCA9IHRydWU7CisjZW5kaWYKK30KKworI2lmICFBU1NFUlRfRElT
QUJMRUQKK2lubGluZSB2b2lkIFJlY3Q6OmludmFsaWRhdGVQb3NpdGlvbigpCit7CisgICAgaW52
YWxpZGF0ZVRvcCgpOworICAgIGludmFsaWRhdGVMZWZ0KCk7Cit9CisKK2lubGluZSB2b2lkIFJl
Y3Q6OnNldEhhc1ZhbGlkUG9zaXRpb24oKQoreworICAgIG1faGFzVmFsaWRUb3AgPSB0cnVlOwor
ICAgIG1faGFzVmFsaWRMZWZ0ID0gdHJ1ZTsKK30KKworaW5saW5lIHZvaWQgUmVjdDo6c2V0SGFz
VmFsaWRTaXplKCkKK3sKKyAgICBtX2hhc1ZhbGlkV2lkdGggPSB0cnVlOworICAgIG1faGFzVmFs
aWRIZWlnaHQgPSB0cnVlOworfQorI2VuZGlmCisKK2lubGluZSBMYXlvdXRVbml0IFJlY3Q6OnRv
cCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1faGFzVmFsaWRUb3ApOworICAgIHJldHVybiBtX3Jl
Y3QueSgpOworfQorCitpbmxpbmUgTGF5b3V0VW5pdCBSZWN0OjpsZWZ0KCkgY29uc3QKK3sKKyAg
ICBBU1NFUlQobV9oYXNWYWxpZExlZnQpOworICAgIHJldHVybiBtX3JlY3QueCgpOworfQorCitp
bmxpbmUgTGF5b3V0VW5pdCBSZWN0Ojpib3R0b20oKSBjb25zdAoreworICAgIEFTU0VSVChtX2hh
c1ZhbGlkVG9wICYmIG1faGFzVmFsaWRIZWlnaHQpOworICAgIHJldHVybiBtX3JlY3QubWF4WSgp
OworfQorCitpbmxpbmUgTGF5b3V0VW5pdCBSZWN0OjpyaWdodCgpIGNvbnN0Cit7CisgICAgQVNT
RVJUKG1faGFzVmFsaWRMZWZ0ICYmIG1faGFzVmFsaWRXaWR0aCk7CisgICAgcmV0dXJuIG1fcmVj
dC5tYXhYKCk7Cit9CisKK2lubGluZSBMYXlvdXRQb2ludCBSZWN0Ojp0b3BMZWZ0KCkgY29uc3QK
K3sKKyAgICBBU1NFUlQoaGFzVmFsaWRQb3NpdGlvbigpKTsKKyAgICByZXR1cm4gbV9yZWN0Lm1p
blhNaW5ZQ29ybmVyKCk7Cit9CisKK2lubGluZSBMYXlvdXRQb2ludCBSZWN0Ojpib3R0b21SaWdo
dCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKGhhc1ZhbGlkR2VvbWV0cnkoKSk7CisgICAgcmV0dXJu
IG1fcmVjdC5tYXhYTWF4WUNvcm5lcigpOworfQorCitpbmxpbmUgTGF5b3V0U2l6ZSBSZWN0Ojpz
aXplKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaGFzVmFsaWRTaXplKCkpOworICAgIHJldHVybiBt
X3JlY3Quc2l6ZSgpOworfQorCitpbmxpbmUgTGF5b3V0VW5pdCBSZWN0Ojp3aWR0aCgpIGNvbnN0
Cit7CisgICAgQVNTRVJUKG1faGFzVmFsaWRXaWR0aCk7CisgICAgcmV0dXJuIG1fcmVjdC53aWR0
aCgpOworfQorCitpbmxpbmUgTGF5b3V0VW5pdCBSZWN0OjpoZWlnaHQoKSBjb25zdAoreworICAg
IEFTU0VSVChtX2hhc1ZhbGlkSGVpZ2h0KTsKKyAgICByZXR1cm4gbV9yZWN0LmhlaWdodCgpOwor
fQorCitpbmxpbmUgdm9pZCBSZWN0OjpzZXRUb3BMZWZ0KGNvbnN0IExheW91dFBvaW50JiB0b3BM
ZWZ0KQoreworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBzZXRIYXNWYWxpZFBvc2l0aW9uKCk7
CisjZW5kaWYKKyAgICBtX3JlY3Quc2V0TG9jYXRpb24odG9wTGVmdCk7Cit9CisKK2lubGluZSB2
b2lkIFJlY3Q6OnNldFRvcChMYXlvdXRVbml0IHRvcCkKK3sKKyNpZiAhQVNTRVJUX0RJU0FCTEVE
CisgICAgbV9oYXNWYWxpZFRvcCA9IHRydWU7CisjZW5kaWYKKyAgICBtX3JlY3Quc2V0WSh0b3Ap
OworfQorCitpbmxpbmUgdm9pZCBSZWN0OjpzZXRMZWZ0KExheW91dFVuaXQgbGVmdCkKK3sKKyNp
ZiAhQVNTRVJUX0RJU0FCTEVECisgICAgbV9oYXNWYWxpZExlZnQgPSB0cnVlOworI2VuZGlmCisg
ICAgbV9yZWN0LnNldFgobGVmdCk7Cit9CisKK2lubGluZSB2b2lkIFJlY3Q6OnNldFdpZHRoKExh
eW91dFVuaXQgd2lkdGgpCit7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIG1faGFzVmFsaWRX
aWR0aCA9IHRydWU7CisjZW5kaWYKKyAgICBtX3JlY3Quc2V0V2lkdGgod2lkdGgpOworfQorCitp
bmxpbmUgdm9pZCBSZWN0OjpzZXRIZWlnaHQoTGF5b3V0VW5pdCBoZWlnaHQpCit7CisjaWYgIUFT
U0VSVF9ESVNBQkxFRAorICAgIG1faGFzVmFsaWRIZWlnaHQgPSB0cnVlOworI2VuZGlmCisgICAg
bV9yZWN0LnNldEhlaWdodChoZWlnaHQpOworfQorCitpbmxpbmUgdm9pZCBSZWN0OjpzZXRTaXpl
KGNvbnN0IExheW91dFNpemUmIHNpemUpCit7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIHNl
dEhhc1ZhbGlkU2l6ZSgpOworI2VuZGlmCisgICAgbV9yZWN0LnNldFNpemUoc2l6ZSk7Cit9CisK
K2lubGluZSB2b2lkIFJlY3Q6OnNoaWZ0TGVmdFRvKExheW91dFVuaXQgbGVmdCkKK3sKKyAgICBB
U1NFUlQobV9oYXNWYWxpZExlZnQpOworICAgIG1fcmVjdC5zaGlmdFhFZGdlVG8obGVmdCk7Cit9
CisKK2lubGluZSB2b2lkIFJlY3Q6OnNoaWZ0UmlnaHRUbyhMYXlvdXRVbml0IHJpZ2h0KQorewor
ICAgIEFTU0VSVChtX2hhc1ZhbGlkTGVmdCAmJiBtX2hhc1ZhbGlkV2lkdGgpOworICAgIG1fcmVj
dC5zaGlmdE1heFhFZGdlVG8ocmlnaHQpOworfQorCitpbmxpbmUgdm9pZCBSZWN0OjpzaGlmdFRv
cFRvKExheW91dFVuaXQgdG9wKQoreworICAgIEFTU0VSVChtX2hhc1ZhbGlkVG9wKTsKKyAgICBt
X3JlY3Quc2hpZnRZRWRnZVRvKHRvcCk7Cit9CisKK2lubGluZSB2b2lkIFJlY3Q6OnNoaWZ0Qm90
dG9tVG8oTGF5b3V0VW5pdCBib3R0b20pCit7CisgICAgQVNTRVJUKG1faGFzVmFsaWRUb3AgJiYg
bV9oYXNWYWxpZEhlaWdodCk7CisgICAgbV9yZWN0LnNoaWZ0TWF4WUVkZ2VUbyhib3R0b20pOwor
fQorCitpbmxpbmUgdm9pZCBSZWN0Ojptb3ZlSG9yaXpvbnRhbGx5KExheW91dFVuaXQgb2Zmc2V0
KQoreworICAgIEFTU0VSVChtX2hhc1ZhbGlkTGVmdCk7CisgICAgbV9yZWN0Lm1vdmUoTGF5b3V0
U2l6ZSB7IG9mZnNldCwgMCB9KTsKK30KKworaW5saW5lIHZvaWQgUmVjdDo6bW92ZVZlcnRpY2Fs
bHkoTGF5b3V0VW5pdCBvZmZzZXQpCit7CisgICAgQVNTRVJUKG1faGFzVmFsaWRUb3ApOworICAg
IG1fcmVjdC5tb3ZlKExheW91dFNpemUgeyAwLCBvZmZzZXQgfSk7Cit9CisKK2lubGluZSB2b2lk
IFJlY3Q6OmV4cGFuZChMYXlvdXRVbml0IHdpZHRoLCBMYXlvdXRVbml0IGhlaWdodCkKK3sKKyAg
ICBBU1NFUlQoaGFzVmFsaWRHZW9tZXRyeSgpKTsKKyAgICBtX3JlY3QuZXhwYW5kKHdpZHRoLCBo
ZWlnaHQpOworfQorCitpbmxpbmUgUmVjdCBSZWN0OjpjbG9uZSgpIGNvbnN0Cit7CisgICAgUmVj
dCByZWN0OworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICByZWN0Lm1faGFzVmFsaWRUb3AgPSBt
X2hhc1ZhbGlkVG9wOworICAgIHJlY3QubV9oYXNWYWxpZExlZnQgPSBtX2hhc1ZhbGlkTGVmdDsK
KyAgICByZWN0Lm1faGFzVmFsaWRXaWR0aCA9IG1faGFzVmFsaWRXaWR0aDsKKyAgICByZWN0Lm1f
aGFzVmFsaWRIZWlnaHQgID0gbV9oYXNWYWxpZEhlaWdodDsKKyNlbmRpZiAKKyAgICByZWN0Lm1f
cmVjdCA9IG1fcmVjdDsKKyAgICByZXR1cm4gcmVjdDsKK30KKworaW5saW5lIFJlY3Q6Om9wZXJh
dG9yIExheW91dFJlY3QoKSBjb25zdAoreworICAgIEFTU0VSVChoYXNWYWxpZEdlb21ldHJ5KCkp
OyAKKyAgICByZXR1cm4gbV9yZWN0OworfQorCit9Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5UnVuLmggYi9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheVJ1bi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYzOTI5MDM2
MDgzYzQwYjAzOWY5ZGVjNDkzM2Y2MTQyYTc0ZGExYjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheVJ1bi5oCkBAIC0wLDAgKzEsMTA5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1B
VFRJTkdfQ09OVEVYVCkKKworI2luY2x1ZGUgIklubGluZUl0ZW0uaCIKKyNpbmNsdWRlICJMYXlv
dXRVbml0LmgiCisjaW5jbHVkZSAiVGV4dEZsYWdzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
K25hbWVzcGFjZSBEaXNwbGF5IHsKKworc3RydWN0IFJ1biB7CisgICAgc3RydWN0IFRleHRDb250
ZXh0IHsKKyAgICBwdWJsaWM6CisgICAgICAgIFRleHRDb250ZXh0KHVuc2lnbmVkIHBvc2l0aW9u
LCB1bnNpZ25lZCBsZW5ndGgpOworCisgICAgICAgIHVuc2lnbmVkIHN0YXJ0KCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGFydDsgfQorICAgICAgICB1bnNpZ25lZCBlbmQoKSBjb25zdCB7IHJldHVybiBz
dGFydCgpICsgbGVuZ3RoKCk7IH0KKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyBy
ZXR1cm4gbV9sZW5ndGg7IH0KKworICAgICAgICB2b2lkIGV4cGFuZCh1bnNpZ25lZCBsZW5ndGgp
IHsgbV9sZW5ndGggKz0gbGVuZ3RoOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICB1bnNpZ25l
ZCBtX3N0YXJ0OworICAgICAgICB1bnNpZ25lZCBtX2xlbmd0aDsKKyAgICB9OworCisgICAgUnVu
KFJlY3QgbG9naWNhbFJlY3QpOworICAgIFJ1bihSZWN0IGxvZ2ljYWxSZWN0LCBUZXh0Q29udGV4
dCk7CisgICAgUnVuKGNvbnN0IFJ1biYpOworCisgICAgTGF5b3V0UG9pbnQgbG9naWNhbFRvcExl
ZnQoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxSZWN0LnRvcExlZnQoKTsgfQorICAgIExheW91
dFVuaXQgbG9naWNhbExlZnQoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxSZWN0LmxlZnQoKTsg
fQorICAgIExheW91dFVuaXQgbG9naWNhbFJpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2Fs
UmVjdC5yaWdodCgpOyB9CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9wKCkgY29uc3QgeyByZXR1
cm4gbV9sb2dpY2FsUmVjdC50b3AoKTsgfQorICAgIExheW91dFVuaXQgbG9naWNhbEJvdHRvbSgp
IGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFJlY3QuYm90dG9tKCk7IH0KKworICAgIExheW91dFVu
aXQgbG9naWNhbFdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsUmVjdC53aWR0aCgpOyB9
CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2Fs
UmVjdC5oZWlnaHQoKTsgfQorCisgICAgdm9pZCBzZXRMb2dpY2FsV2lkdGgoTGF5b3V0VW5pdCB3
aWR0aCkgeyBtX2xvZ2ljYWxSZWN0LnNldFdpZHRoKHdpZHRoKTsgfQorICAgIHZvaWQgc2V0TG9n
aWNhbFRvcChMYXlvdXRVbml0IGxvZ2ljYWxUb3ApIHsgbV9sb2dpY2FsUmVjdC5zZXRUb3AobG9n
aWNhbFRvcCk7IH0KKyAgICB2b2lkIHNldExvZ2ljYWxMZWZ0KExheW91dFVuaXQgbG9naWNhbExl
ZnQpIHsgbV9sb2dpY2FsUmVjdC5zZXRMZWZ0KGxvZ2ljYWxMZWZ0KTsgfQorICAgIHZvaWQgc2V0
TG9naWNhbFJpZ2h0KExheW91dFVuaXQgbG9naWNhbFJpZ2h0KSB7IG1fbG9naWNhbFJlY3Quc2hp
ZnRSaWdodFRvKGxvZ2ljYWxSaWdodCk7IH0KKyAgICB2b2lkIG1vdmVWZXJ0aWNhbGx5KExheW91
dFVuaXQgZGVsdGEpIHsgbV9sb2dpY2FsUmVjdC5tb3ZlVmVydGljYWxseShkZWx0YSk7IH0KKyAg
ICB2b2lkIG1vdmVIb3Jpem9udGFsbHkoTGF5b3V0VW5pdCBkZWx0YSkgeyBtX2xvZ2ljYWxSZWN0
Lm1vdmVIb3Jpem9udGFsbHkoZGVsdGEpOyB9CisgICAgdm9pZCBleHBhbmRWZXJ0aWNhbGx5KExh
eW91dFVuaXQgZGVsdGEpIHsgbV9sb2dpY2FsUmVjdC5leHBhbmQoMCwgZGVsdGEpOyB9CisgICAg
dm9pZCBleHBhbmRIb3Jpem9udGFsbHkoTGF5b3V0VW5pdCBkZWx0YSkgeyBtX2xvZ2ljYWxSZWN0
LmV4cGFuZChkZWx0YSwgMCk7IH0KKworICAgIHZvaWQgc2V0VGV4dENvbnRleHQoVGV4dENvbnRl
eHQgdGV4dENvbnRleHQpIHsgbV90ZXh0Q29udGV4dC5lbXBsYWNlKHRleHRDb250ZXh0KTsgfQor
ICAgIE9wdGlvbmFsPFRleHRDb250ZXh0PiYgdGV4dENvbnRleHQoKSB7IHJldHVybiBtX3RleHRD
b250ZXh0OyB9CisgICAgT3B0aW9uYWw8VGV4dENvbnRleHQ+IHRleHRDb250ZXh0KCkgY29uc3Qg
eyByZXR1cm4gbV90ZXh0Q29udGV4dDsgfQorCitwcml2YXRlOgorICAgIFJlY3QgbV9sb2dpY2Fs
UmVjdDsKKyAgICBPcHRpb25hbDxUZXh0Q29udGV4dD4gbV90ZXh0Q29udGV4dDsKK307CisKK2lu
bGluZSBSdW46OlJ1bihSZWN0IGxvZ2ljYWxSZWN0KQorICAgIDogbV9sb2dpY2FsUmVjdChsb2dp
Y2FsUmVjdCkKK3sKK30KKworaW5saW5lIFJ1bjo6UnVuKFJlY3QgbG9naWNhbFJlY3QsIFRleHRD
b250ZXh0IHRleHRDb250ZXh0KQorICAgIDogbV9sb2dpY2FsUmVjdChsb2dpY2FsUmVjdCkKKyAg
ICAsIG1fdGV4dENvbnRleHQodGV4dENvbnRleHQpCit7Cit9CisKK2lubGluZSBSdW46OlRleHRD
b250ZXh0OjpUZXh0Q29udGV4dCh1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoKQorICAg
IDogbV9zdGFydChzdGFydCkKKyAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKK3sKK30KKworaW5saW5l
IFJ1bjo6UnVuKGNvbnN0IFJ1biYgb3RoZXIpCit7CisgICAgbV9sb2dpY2FsUmVjdCA9IG90aGVy
Lm1fbG9naWNhbFJlY3Q7CisgICAgbV90ZXh0Q29udGV4dCA9IG90aGVyLm1fdGV4dENvbnRleHQ7
Cit9CisKK30KK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zs
b2F0cy9GbG9hdEF2b2lkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zsb2F0cy9GbG9h
dEF2b2lkZXIuY3BwCmluZGV4IDE1MWQ4OGUyNjdiNmIwNTA2MGRiNjQzMzUzMjljZDBhMTAzODFh
MDcuLjg3MGNmZjVmY2YzZDIyZGEzNTZmNTdhYmUyMzA3ZWE1MmQ0OGRiZmYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9mbG9hdHMvRmxvYXRBdm9pZGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvZmxvYXRzL0Zsb2F0QXZvaWRlci5jcHAKQEAgLTExMyw3ICsxMTMs
NyBAQCBib29sIEZsb2F0QXZvaWRlcjo6b3ZlcmZsb3dzQ29udGFpbmluZ0Jsb2NrKCkgY29uc3QK
ICAgICByZXR1cm4gY29udGFpbmluZ0Jsb2NrQ29udGVudEJveFJpZ2h0IDwgcmlnaHQ7CiB9CiAK
LURpc3BsYXk6OkJveDo6UmVjdCBGbG9hdEF2b2lkZXI6OnJlY3RJbkNvbnRhaW5pbmdCbG9jaygp
IGNvbnN0CitEaXNwbGF5OjpSZWN0IEZsb2F0QXZvaWRlcjo6cmVjdEluQ29udGFpbmluZ0Jsb2Nr
KCkgY29uc3QKIHsKICAgICAvLyBGcm9tIGZvcm1hdHRpbmcgcm9vdCBjb29yZGluYXRlIHN5c3Rl
bSBiYWNrIHRvIGNvbnRhaW5pbmcgYmxvY2sncy4KICAgICBpZiAobGF5b3V0Qm94KCkuY29udGFp
bmluZ0Jsb2NrKCkgPT0gJmZsb2F0aW5nU3RhdGUoKS5yb290KCkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvZmxvYXRzL0Zsb2F0QXZvaWRlci5oIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2Zsb2F0cy9GbG9hdEF2b2lkZXIuaAppbmRleCAyYzMyM2RkODBmNjY2Zjg3M2Q1NmUz
ZjQ1Y2FhMzFkYTg5YjBmNGVkLi42ZWQ5ZDQzZDNiZmZhYjkzYTBkODhkODY3MWY0ZTgwN2IwMjM1
MWJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZmxvYXRzL0Zsb2F0QXZvaWRl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mbG9hdHMvRmxvYXRBdm9pZGVyLmgKQEAg
LTQ2LDggKzQ2LDggQEAgcHVibGljOgogICAgIEZsb2F0QXZvaWRlcihjb25zdCBCb3gmLCBjb25z
dCBGbG9hdGluZ1N0YXRlJiwgY29uc3QgTGF5b3V0U3RhdGUmKTsKICAgICB2aXJ0dWFsIH5GbG9h
dEF2b2lkZXIoKSA9IGRlZmF1bHQ7CiAKLSAgICB2aXJ0dWFsIERpc3BsYXk6OkJveDo6UmVjdCBy
ZWN0KCkgY29uc3QgeyByZXR1cm4gbV9hYnNvbHV0ZURpc3BsYXlCb3gucmVjdCgpOyB9Ci0gICAg
RGlzcGxheTo6Qm94OjpSZWN0IHJlY3RJbkNvbnRhaW5pbmdCbG9jaygpIGNvbnN0OworICAgIHZp
cnR1YWwgRGlzcGxheTo6UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9hYnNvbHV0ZURpc3Bs
YXlCb3gucmVjdCgpOyB9CisgICAgRGlzcGxheTo6UmVjdCByZWN0SW5Db250YWluaW5nQmxvY2so
KSBjb25zdDsKIAogICAgIHN0cnVjdCBIb3Jpem9udGFsQ29uc3RyYWludHMgewogICAgICAgICBP
cHRpb25hbDxQb3NpdGlvbkluQ29udGV4dFJvb3Q+IGxlZnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvZmxvYXRzL0Zsb2F0Qm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9mbG9hdHMvRmxvYXRCb3guY3BwCmluZGV4IGJlYjc1N2UzMjcxNGNiNGU5ZTdmYzUyODBjNjdl
Zjk0MDllYjVhY2QuLmIyZTg2YzE1MjE2N2MzZWEyM2RhNzQ5OGM2NzdmZjQ0OTNmZmQ4ZWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mbG9hdHMvRmxvYXRCb3guY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9mbG9hdHMvRmxvYXRCb3guY3BwCkBAIC00MSw3ICs0MSw3
IEBAIEZsb2F0Qm94OjpGbG9hdEJveChjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3QgRmxvYXRp
bmdTdGF0ZSYgZmxvYXRpbmdTdGF0ZSwgY29uCiAgICAgZGlzcGxheUJveCgpLnNldFRvcExlZnQo
eyBpbml0aWFsSG9yaXpvbnRhbFBvc2l0aW9uKCksIGluaXRpYWxWZXJ0aWNhbFBvc2l0aW9uKCkg
fSk7CiB9CiAKLURpc3BsYXk6OkJveDo6UmVjdCBGbG9hdEJveDo6cmVjdCgpIGNvbnN0CitEaXNw
bGF5OjpSZWN0IEZsb2F0Qm94OjpyZWN0KCkgY29uc3QKIHsKICAgICBhdXRvIHJlY3QgPSBkaXNw
bGF5Qm94KCkucmVjdCgpOwogICAgIHJldHVybiB7IHJlY3QudG9wKCkgLSBtYXJnaW5CZWZvcmUo
KSwgcmVjdC5sZWZ0KCkgLSBtYXJnaW5TdGFydCgpLCBtYXJnaW5TdGFydCgpICsgcmVjdC53aWR0
aCgpICsgbWFyZ2luRW5kKCksIG1hcmdpbkJlZm9yZSgpICsgcmVjdC5oZWlnaHQoKSArIG1hcmdp
bkFmdGVyKCkgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mbG9hdHMvRmxv
YXRCb3guaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mbG9hdHMvRmxvYXRCb3guaAppbmRleCAy
ZWRjYWU4OGQ3MmMzZmMxMThkNDQ4YTE4OWVjZTAwMWYzZWUwMDYyLi45N2QyMTUwNzViZWQxODRl
MzhhYWZkNGQxNzMwNDUyN2I1YTAwZTAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvZmxvYXRzL0Zsb2F0Qm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zsb2F0cy9G
bG9hdEJveC5oCkBAIC00Myw3ICs0Myw3IEBAIGNsYXNzIEZsb2F0Qm94IDogcHVibGljIEZsb2F0
QXZvaWRlciB7CiBwdWJsaWM6CiAgICAgRmxvYXRCb3goY29uc3QgQm94JiwgY29uc3QgRmxvYXRp
bmdTdGF0ZSYsIGNvbnN0IExheW91dFN0YXRlJik7CiAKLSAgICBEaXNwbGF5OjpCb3g6OlJlY3Qg
cmVjdCgpIGNvbnN0IGZpbmFsOworICAgIERpc3BsYXk6OlJlY3QgcmVjdCgpIGNvbnN0IGZpbmFs
OwogCiBwcml2YXRlOgogICAgIGJvb2wgaXNMZWZ0QWxpZ25lZCgpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIGxheW91dEJveCgpLmlzTGVmdEZsb2F0aW5nUG9zaXRpb25lZCgpOyB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZmxvYXRzL0Zsb2F0aW5nQ29udGV4dC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvZmxvYXRzL0Zsb2F0aW5nQ29udGV4dC5jcHAKaW5kZXggMDk1YWY5
ZjA4ZGM4MTg4ZjY3N2RlNjBmMjE1OTc5YzBlMjUwNGIzNC4uOTQ5NWQzMzA4NDE2MmY2MTJjYmE4
NWNmOTM4ZDU3NzM5ZDZjYTcyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zs
b2F0cy9GbG9hdGluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mbG9h
dHMvRmxvYXRpbmdDb250ZXh0LmNwcApAQCAtNzQsNyArNzQsNyBAQCBwdWJsaWM6CiAgICAgYm9v
bCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9mbG9hdFBhaXIuaXNFbXB0eSgpOyB9CiAgICAg
Y29uc3QgRmxvYXRpbmdTdGF0ZTo6RmxvYXRJdGVtKiBsZWZ0KCkgY29uc3Q7CiAgICAgY29uc3Qg
RmxvYXRpbmdTdGF0ZTo6RmxvYXRJdGVtKiByaWdodCgpIGNvbnN0OwotICAgIGJvb2wgaW50ZXJz
ZWN0cyhjb25zdCBEaXNwbGF5OjpCb3g6OlJlY3QmKSBjb25zdDsKKyAgICBib29sIGludGVyc2Vj
dHMoY29uc3QgRGlzcGxheTo6UmVjdCYpIGNvbnN0OwogICAgIFBvc2l0aW9uSW5Db250ZXh0Um9v
dCB2ZXJ0aWNhbENvbnN0cmFpbnQoKSBjb25zdCB7IHJldHVybiBtX3ZlcnRpY2FsUG9zaXRpb247
IH0KICAgICBGbG9hdEF2b2lkZXI6Okhvcml6b250YWxDb25zdHJhaW50cyBob3Jpem9udGFsQ29u
c3RyYWludHMoKSBjb25zdDsKICAgICBQb3NpdGlvbkluQ29udGV4dFJvb3QgYm90dG9tKCkgY29u
c3Q7CkBAIC0zNzAsNyArMzcwLDcgQEAgY29uc3QgRmxvYXRpbmdTdGF0ZTo6RmxvYXRJdGVtKiBG
bG9hdFBhaXI6OnJpZ2h0KCkgY29uc3QKICAgICByZXR1cm4gJm1fZmxvYXRzWyptX2Zsb2F0UGFp
ci5yaWdodF07CiB9CiAKLWJvb2wgRmxvYXRQYWlyOjppbnRlcnNlY3RzKGNvbnN0IERpc3BsYXk6
OkJveDo6UmVjdCYgZmxvYXRBdm9pZGVyUmVjdCkgY29uc3QKK2Jvb2wgRmxvYXRQYWlyOjppbnRl
cnNlY3RzKGNvbnN0IERpc3BsYXk6OlJlY3QmIGZsb2F0QXZvaWRlclJlY3QpIGNvbnN0CiB7CiAg
ICAgYXV0byBpbnRlcnNlY3RzID0gWyZdKGF1dG8qIGZsb2F0aW5nKSB7CiAgICAgICAgIHJldHVy
biBmbG9hdGluZyAmJiBmbG9hdGluZy0+cmVjdFdpdGhNYXJnaW4oKS5pbnRlcnNlY3RzKGZsb2F0
QXZvaWRlclJlY3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zsb2F0cy9G
bG9hdGluZ1N0YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZmxvYXRzL0Zsb2F0aW5nU3Rh
dGUuaAppbmRleCAwZWZhZTg0ZDczYjVhYzI5MzNmZTUxNTg5NmJkYWE0MmYyNWE4OGRhLi5lMWNi
OGQyMGY4NTc5ZTc1OTcwNmUxZTkxMmFjM2I3NWU0YjI5ZDY2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvZmxvYXRzL0Zsb2F0aW5nU3RhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvZmxvYXRzL0Zsb2F0aW5nU3RhdGUuaApAQCAtNzQsNyArNzQsNyBAQCBwdWJsaWM6
CiAgICAgICAgIGJvb2wgaXNMZWZ0UG9zaXRpb25lZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5b3V0
Qm94LT5pc0xlZnRGbG9hdGluZ1Bvc2l0aW9uZWQoKTsgfQogICAgICAgICBib29sIGlzRGVzY2Vu
ZGFudE9mRm9ybWF0dGluZ1Jvb3QoY29uc3QgQm94JikgY29uc3Q7CiAKLSAgICAgICAgRGlzcGxh
eTo6Qm94OjpSZWN0IHJlY3RXaXRoTWFyZ2luKCkgY29uc3QgeyByZXR1cm4gbV9hYnNvbHV0ZURp
c3BsYXlCb3gucmVjdFdpdGhNYXJnaW4oKTsgfQorICAgICAgICBEaXNwbGF5OjpSZWN0IHJlY3RX
aXRoTWFyZ2luKCkgY29uc3QgeyByZXR1cm4gbV9hYnNvbHV0ZURpc3BsYXlCb3gucmVjdFdpdGhN
YXJnaW4oKTsgfQogICAgICAgICBQb3NpdGlvbkluQ29udGV4dFJvb3QgYm90dG9tKCkgY29uc3Qg
eyByZXR1cm4geyBtX2Fic29sdXRlRGlzcGxheUJveC5ib3R0b20oKSB9OyB9CiAKICAgICBwcml2
YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcv
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwCmluZGV4IGUzYzE1MzZkY2Qz
MmExZWZlZDgxMjhkMzMyYjExOGUyOGJkZDllNzIuLmUxNTM5M2NjNzhmZTU4NWM5MGM4NWUxNTMx
MmJiYjQwN2RhMmJhY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVm
b3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAKQEAg
LTMwLDcgKzMwLDcgQEAKIAogI2luY2x1ZGUgIklubGluZUZvcm1hdHRpbmdTdGF0ZS5oIgogI2lu
Y2x1ZGUgIklubGluZUxpbmVCcmVha2VyLmgiCi0jaW5jbHVkZSAiSW5saW5lUnVuUHJvdmlkZXIu
aCIKKyNpbmNsdWRlICJJbmxpbmVUZXh0SXRlbS5oIgogI2luY2x1ZGUgIkxheW91dEJveC5oIgog
I2luY2x1ZGUgIkxheW91dENvbnRhaW5lci5oIgogI2luY2x1ZGUgIkxheW91dElubGluZUJveC5o
IgpAQCAtNzcsMTggKzc3LDIzIEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmxheW91
dCgpIGNvbnN0CiAgICAgd2hpbGUgKGxheW91dEJveCkgewogICAgICAgICBpZiAobGF5b3V0Qm94
LT5lc3RhYmxpc2hlc0Zvcm1hdHRpbmdDb250ZXh0KCkpCiAgICAgICAgICAgICBsYXlvdXRGb3Jt
YXR0aW5nQ29udGV4dFJvb3QoKmxheW91dEJveCwgdXNlZFZhbHVlcyk7Ci0gICAgICAgIGVsc2Ug
aWYgKGlzPENvbnRhaW5lcj4oKmxheW91dEJveCkpIHsKLSAgICAgICAgICAgIGF1dG8mIGlubGlu
ZUNvbnRhaW5lciA9IGRvd25jYXN0PElubGluZUNvbnRhaW5lcj4oKmxheW91dEJveCk7Ci0gICAg
ICAgICAgICBjb21wdXRlTWFyZ2luKGlubGluZUNvbnRhaW5lciwgdXNlZFZhbHVlcyk7Ci0gICAg
ICAgICAgICBjb21wdXRlQm9yZGVyQW5kUGFkZGluZyhpbmxpbmVDb250YWluZXIsIHVzZWRWYWx1
ZXMpOwotICAgICAgICB9IGVsc2UgaWYgKGxheW91dEJveC0+aXNSZXBsYWNlZCgpKQorICAgICAg
ICBlbHNlIGlmIChpczxDb250YWluZXI+KCpsYXlvdXRCb3gpKQorICAgICAgICAgICAgY29tcHV0
ZU1hcmdpbkJvcmRlckFuZFBhZGRpbmdGb3JJbmxpbmVDb250YWluZXIoZG93bmNhc3Q8SW5saW5l
Q29udGFpbmVyPigqbGF5b3V0Qm94KSwgdXNlZFZhbHVlcyk7CisgICAgICAgIGVsc2UgaWYgKGxh
eW91dEJveC0+aXNSZXBsYWNlZCgpKQogICAgICAgICAgICAgY29tcHV0ZVdpZHRoQW5kSGVpZ2h0
Rm9yUmVwbGFjZWRJbmxpbmVCb3goKmxheW91dEJveCwgdXNlZFZhbHVlcyk7CisgICAgICAgIGVs
c2UgaWYgKGlzPElubGluZUJveD4oKmxheW91dEJveCkpCisgICAgICAgICAgICBpbml0aWFsaXpl
TWFyZ2luQm9yZGVyQW5kUGFkZGluZ0ZvckdlbmVyaWNJbmxpbmVCb3goZG93bmNhc3Q8SW5saW5l
Qm94PigqbGF5b3V0Qm94KSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgICBsYXlvdXRCb3ggPSBuZXh0SW5QcmVPcmRlcigqbGF5b3V0Qm94
LCByb290KTsKICAgICB9CiAKLSAgICBJbmxpbmVSdW5Qcm92aWRlciBpbmxpbmVSdW5Qcm92aWRl
cjsKLSAgICBjb2xsZWN0SW5saW5lQ29udGVudChpbmxpbmVSdW5Qcm92aWRlcik7Ci0gICAgTGlu
ZUxheW91dCgqdGhpcykubGF5b3V0KGlubGluZVJ1blByb3ZpZGVyKTsKKyAgICAvLyBGSVhNRTog
VGhpcyBpcyBzdWNoIGEgd2FzdGUgd2hlbiBpbnRyaW5zaWMgd2lkdGggY29tcHV0YXRpb24gYWxy
ZWFkeSBjb2xsZWN0ZWQgdGhlIGlubGluZSBpdGVtcy4KKyAgICBmb3JtYXR0aW5nU3RhdGUoKS5p
bmxpbmVJdGVtcygpLmNsZWFyKCk7CisgICAgZm9ybWF0dGluZ1N0YXRlKCkuaW5saW5lUnVucygp
LmNsZWFyKCk7CisKKyAgICBjb2xsZWN0SW5saW5lQ29udGVudCgpOworICAgIExpbmVMYXlvdXQo
KnRoaXMpLmxheW91dCgpOwogICAgIExPR19XSVRIX1NUUkVBTShGb3JtYXR0aW5nQ29udGV4dExh
eW91dCwgc3RyZWFtIDw8ICJbRW5kXSAtPiBpbmxpbmUgZm9ybWF0dGluZyBjb250ZXh0IC0+IGZv
cm1hdHRpbmcgcm9vdCgiIDw8ICZyb290IDw8ICIpIik7CiB9CiAKQEAgLTEyMCwzMCArMTI1LDMw
IEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVJbnRyaW5zaWNXaWR0aENv
bnN0cmFpbnRzKCkgY29uc3QKICAgICAgICAgICAgICAgICBjb21wdXRlV2lkdGhBbmRNYXJnaW4o
KmxheW91dEJveCwgdXNlZFZhbHVlcyk7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAg
ICAgICAvLyBTaW1wbGUgaW5saW5lIGNvbnRhaW5lciB3aXRoIG5vIGludHJpbnNpYyB3aWR0aCA8
c3Bhbj4uCi0gICAgICAgICAgICAgICAgY29tcHV0ZU1hcmdpbigqbGF5b3V0Qm94LCB1c2VkVmFs
dWVzKTsKKyAgICAgICAgICAgICAgICBjb21wdXRlSG9yaXpvbnRhbE1hcmdpbigqbGF5b3V0Qm94
LCB1c2VkVmFsdWVzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBsYXlvdXRC
b3ggPSBuZXh0SW5QcmVPcmRlcigqbGF5b3V0Qm94LCByb290KTsKICAgICB9CiAKLSAgICBJbmxp
bmVSdW5Qcm92aWRlciBpbmxpbmVSdW5Qcm92aWRlcjsKLSAgICBjb2xsZWN0SW5saW5lQ29udGVu
dChpbmxpbmVSdW5Qcm92aWRlcik7CisgICAgY29sbGVjdElubGluZUNvbnRlbnQoKTsKIAogICAg
IGF1dG8gbWF4aW11bUxpbmVXaWR0aCA9IFsmXShhdXRvIGF2YWlsYWJsZVdpZHRoKSB7Ci0gICAg
ICAgIExheW91dFVuaXQgbWF4Q29udGVudExvZ2ljYWxSaWdodDsKLSAgICAgICAgYXV0byBsaW5l
QnJlYWtlciA9IElubGluZUxpbmVCcmVha2VyIHsgbGF5b3V0U3RhdGUsIGZvcm1hdHRpbmdTdGF0
ZSgpLmlubGluZUNvbnRlbnQoKSwgaW5saW5lUnVuUHJvdmlkZXIucnVucygpIH07Ci0gICAgICAg
IExheW91dFVuaXQgbGluZUxvZ2ljYWxSaWdodDsKLQogICAgICAgICAvLyBTd2l0Y2ggdG8gdGhl
IG1pbi9tYXggZm9ybWF0dGluZyByb290IHdpZHRoIHZhbHVlcyBiZWZvcmUgZm9ybWF0dGluZyB0
aGUgbGluZXMuCiAgICAgICAgIGZvciAoYXV0byogZm9ybWF0dGluZ1Jvb3QgOiBmb3JtYXR0aW5n
Q29udGV4dFJvb3RMaXN0KSB7CiAgICAgICAgICAgICBhdXRvIGludHJpbnNpY1dpZHRocyA9IGxh
eW91dFN0YXRlLmZvcm1hdHRpbmdTdGF0ZUZvckJveCgqZm9ybWF0dGluZ1Jvb3QpLmludHJpbnNp
Y1dpZHRoQ29uc3RyYWludHMoKmZvcm1hdHRpbmdSb290KTsKICAgICAgICAgICAgIGxheW91dFN0
YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmZvcm1hdHRpbmdSb290KS5zZXRDb250ZW50Qm94
V2lkdGgoYXZhaWxhYmxlV2lkdGggPyBpbnRyaW5zaWNXaWR0aHMtPm1heGltdW0gOiBpbnRyaW5z
aWNXaWR0aHMtPm1pbmltdW0pOwogICAgICAgICB9CisgICAgICAgIExheW91dFVuaXQgbWF4Q29u
dGVudExvZ2ljYWxSaWdodDsKKyAgICAgICAgTGF5b3V0VW5pdCBsaW5lTG9naWNhbFJpZ2h0Owog
Ci0gICAgICAgIHdoaWxlIChhdXRvIHJ1biA9IGxpbmVCcmVha2VyLm5leHRSdW4obGluZUxvZ2lj
YWxSaWdodCwgYXZhaWxhYmxlV2lkdGgsICFsaW5lTG9naWNhbFJpZ2h0KSkgewotICAgICAgICAg
ICAgaWYgKHJ1bi0+cG9zaXRpb24gPT0gSW5saW5lTGluZUJyZWFrZXI6OlJ1bjo6UG9zaXRpb246
OkxpbmVCZWdpbikKKyAgICAgICAgTGluZUJyZWFrZXIgbGluZUJyZWFrZXIobGF5b3V0U3RhdGUp
OworICAgICAgICBhdXRvJiBpbmxpbmVDb250ZW50ID0gZm9ybWF0dGluZ1N0YXRlKCkuaW5saW5l
SXRlbXMoKTsKKyAgICAgICAgZm9yIChhdXRvJiBpbmxpbmVJdGVtIDogaW5saW5lQ29udGVudCkg
eworICAgICAgICAgICAgYXV0byBicmVha2luZ0NvbnRleHQgPSBsaW5lQnJlYWtlci5icmVha2lu
Z0NvbnRleHQoKmlubGluZUl0ZW0sIHsgYXZhaWxhYmxlV2lkdGgsIGxpbmVMb2dpY2FsUmlnaHQs
ICFsaW5lTG9naWNhbFJpZ2h0IH0pOworICAgICAgICAgICAgaWYgKGJyZWFraW5nQ29udGV4dC5i
cmVha2luZ0JlaGF2aW9yID09IExpbmVCcmVha2VyOjpCcmVha2luZ0JlaGF2aW9yOjpXcmFwKQog
ICAgICAgICAgICAgICAgIGxpbmVMb2dpY2FsUmlnaHQgPSAwOwotICAgICAgICAgICAgbGluZUxv
Z2ljYWxSaWdodCArPSBydW4tPndpZHRoOworICAgICAgICAgICAgbGluZUxvZ2ljYWxSaWdodCAr
PSBpbmxpbmVJdGVtLT53aWR0aCgpOwogCiAgICAgICAgICAgICBtYXhDb250ZW50TG9naWNhbFJp
Z2h0ID0gc3RkOjptYXgobWF4Q29udGVudExvZ2ljYWxSaWdodCwgbGluZUxvZ2ljYWxSaWdodCk7
CiAgICAgICAgIH0KQEAgLTE1NCwyMiArMTU5LDM0IEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQ6OmNvbXB1dGVJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKCkgY29uc3QKICAgICBsYXlv
dXRTdGF0ZS5mb3JtYXR0aW5nU3RhdGVGb3JCb3gocm9vdCkuc2V0SW50cmluc2ljV2lkdGhDb25z
dHJhaW50cyhyb290LCBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKTsKIH0KIAotdm9pZCBJbmxp
bmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUludHJpbnNpY1dpZHRoRm9yRmxvYXRCb3goY29u
c3QgQm94JiBsYXlvdXRCb3gpIGNvbnN0Cit2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpp
bml0aWFsaXplTWFyZ2luQm9yZGVyQW5kUGFkZGluZ0ZvckdlbmVyaWNJbmxpbmVCb3goY29uc3Qg
SW5saW5lQm94JiBsYXlvdXRCb3gpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGxheW91dEJveC5pc0Zs
b2F0aW5nUG9zaXRpb25lZCgpKTsKKyAgICBBU1NFUlQobGF5b3V0Qm94LmlzQW5vbnltb3VzKCkg
fHwgaXM8TGluZUJyZWFrQm94PihsYXlvdXRCb3gpKTsKICAgICBhdXRvJiBsYXlvdXRTdGF0ZSA9
IHRoaXMtPmxheW91dFN0YXRlKCk7CisgICAgYXV0byYgZGlzcGxheUJveCA9IGxheW91dFN0YXRl
LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KTsKKworICAgIGRpc3BsYXlCb3guc2V0
VmVydGljYWxNYXJnaW4oeyB7IH0sIHsgfSB9KTsKKyAgICBkaXNwbGF5Qm94LnNldEhvcml6b250
YWxNYXJnaW4oeyB9KTsKKyAgICBkaXNwbGF5Qm94LnNldEJvcmRlcih7IHsgfSwgeyB9IH0pOwor
ICAgIGRpc3BsYXlCb3guc2V0UGFkZGluZyh7IH0pOworfQogCi0gICAgYXV0byB1c2VkSG9yaXpv
bnRhbFZhbHVlcyA9IFVzZWRIb3Jpem9udGFsVmFsdWVzIHsgfTsKLSAgICBjb21wdXRlQm9yZGVy
QW5kUGFkZGluZyhsYXlvdXRCb3gsIHVzZWRIb3Jpem9udGFsVmFsdWVzKTsKLSAgICBjb21wdXRl
TWFyZ2luKGxheW91dEJveCwgdXNlZEhvcml6b250YWxWYWx1ZXMpOwotICAgIGxheW91dFN0YXRl
LmNyZWF0ZUZvcm1hdHRpbmdDb250ZXh0KGxheW91dEJveCktPmNvbXB1dGVJbnRyaW5zaWNXaWR0
aENvbnN0cmFpbnRzKCk7Cit2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlTWFy
Z2luQm9yZGVyQW5kUGFkZGluZ0ZvcklubGluZUNvbnRhaW5lcihjb25zdCBJbmxpbmVDb250YWlu
ZXImIGNvbnRhaW5lciwgVXNlZEhvcml6b250YWxWYWx1ZXMgdXNlZFZhbHVlcykgY29uc3QKK3sK
KyAgICBjb21wdXRlSG9yaXpvbnRhbE1hcmdpbihjb250YWluZXIsIHVzZWRWYWx1ZXMpOworICAg
IGNvbXB1dGVCb3JkZXJBbmRQYWRkaW5nKGNvbnRhaW5lciwgdXNlZFZhbHVlcyk7CisgICAgLy8g
SW5saW5lIGNvbnRhaW5lcnMgKDxzcGFuPikgaGF2ZSAwIHZlcnRpY2FsIG1hcmdpbnMuCisgICAg
bGF5b3V0U3RhdGUoKS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGNvbnRhaW5lcikuc2V0VmVydGlj
YWxNYXJnaW4oeyB7IH0sIHsgfSB9KTsKK30KIAotICAgIGF1dG8gdXNlZFZlcnRpY2FsVmFsdWVz
ID0gVXNlZFZlcnRpY2FsVmFsdWVzIHsgfTsKLSAgICBhdXRvIGhlaWdodEFuZE1hcmdpbiA9IEdl
b21ldHJ5OjpmbG9hdGluZ0hlaWdodEFuZE1hcmdpbihsYXlvdXRTdGF0ZSwgbGF5b3V0Qm94LCB1
c2VkVmVydGljYWxWYWx1ZXMsIHVzZWRIb3Jpem9udGFsVmFsdWVzKTsKK3ZvaWQgSW5saW5lRm9y
bWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVJbnRyaW5zaWNXaWR0aEZvckZsb2F0Qm94KGNvbnN0IEJv
eCYgbGF5b3V0Qm94KSBjb25zdAoreworICAgIEFTU0VSVChsYXlvdXRCb3guaXNGbG9hdGluZ1Bv
c2l0aW9uZWQoKSk7CiAKLSAgICBhdXRvJiBkaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUuZGlzcGxh
eUJveEZvckxheW91dEJveChsYXlvdXRCb3gpOwotICAgIGRpc3BsYXlCb3guc2V0Q29udGVudEJv
eEhlaWdodChoZWlnaHRBbmRNYXJnaW4uaGVpZ2h0KTsKLSAgICBkaXNwbGF5Qm94LnNldFZlcnRp
Y2FsTWFyZ2luKHsgaGVpZ2h0QW5kTWFyZ2luLm5vbkNvbGxhcHNlZE1hcmdpbiwgeyB9IH0pOwor
ICAgIGF1dG8gdXNlZFZhbHVlcyA9IFVzZWRIb3Jpem9udGFsVmFsdWVzIHsgfTsKKyAgICBjb21w
dXRlQm9yZGVyQW5kUGFkZGluZyhsYXlvdXRCb3gsIHVzZWRWYWx1ZXMpOworICAgIGNvbXB1dGVI
b3Jpem9udGFsTWFyZ2luKGxheW91dEJveCwgdXNlZFZhbHVlcyk7CisgICAgbGF5b3V0U3RhdGUo
KS5jcmVhdGVGb3JtYXR0aW5nQ29udGV4dChsYXlvdXRCb3gpLT5jb21wdXRlSW50cmluc2ljV2lk
dGhDb25zdHJhaW50cygpOwogfQogCiB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21w
dXRlSW50cmluc2ljV2lkdGhGb3JJbmxpbmVCbG9jayhjb25zdCBCb3gmIGxheW91dEJveCkgY29u
c3QKQEAgLTE3OCwxMSArMTk1LDExIEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNv
bXB1dGVJbnRyaW5zaWNXaWR0aEZvcklubGluZUJsb2NrKGNvbnN0IEJveCYgbGF5CiAKICAgICBh
dXRvIHVzZWRWYWx1ZXMgPSBVc2VkSG9yaXpvbnRhbFZhbHVlcyB7IH07CiAgICAgY29tcHV0ZUJv
cmRlckFuZFBhZGRpbmcobGF5b3V0Qm94LCB1c2VkVmFsdWVzKTsKLSAgICBjb21wdXRlTWFyZ2lu
KGxheW91dEJveCwgdXNlZFZhbHVlcyk7CisgICAgY29tcHV0ZUhvcml6b250YWxNYXJnaW4obGF5
b3V0Qm94LCB1c2VkVmFsdWVzKTsKICAgICBsYXlvdXRTdGF0ZSgpLmNyZWF0ZUZvcm1hdHRpbmdD
b250ZXh0KGxheW91dEJveCktPmNvbXB1dGVJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKCk7CiB9
CiAKLXZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVNYXJnaW4oY29uc3QgQm94
JiBsYXlvdXRCb3gsIFVzZWRIb3Jpem9udGFsVmFsdWVzIHVzZWRWYWx1ZXMpIGNvbnN0Cit2b2lk
IElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSG9yaXpvbnRhbE1hcmdpbihjb25zdCBC
b3gmIGxheW91dEJveCwgVXNlZEhvcml6b250YWxWYWx1ZXMgdXNlZFZhbHVlcykgY29uc3QKIHsK
ICAgICBhdXRvIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbiA9IEdlb21ldHJ5Ojpjb21wdXRlZEhv
cml6b250YWxNYXJnaW4obGF5b3V0Qm94LCB1c2VkVmFsdWVzKTsKICAgICBhdXRvJiBkaXNwbGF5
Qm94ID0gbGF5b3V0U3RhdGUoKS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7CkBA
IC0yMzUsNiArMjUyLDggQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0Rm9y
bWF0dGluZ0NvbnRleHRSb290KGNvbnN0IEJveCYgcm9vdCwgVXNlZEgKIAogICAgIGNvbXB1dGVC
b3JkZXJBbmRQYWRkaW5nKHJvb3QsIHVzZWRWYWx1ZXMpOwogICAgIGNvbXB1dGVXaWR0aEFuZE1h
cmdpbihyb290LCB1c2VkVmFsdWVzKTsKKyAgICAvLyBUaGlzIGlzIHNpbWlsYXIgdG8gc3RhdGlj
IHBvc2l0aW9uaW5nIGluIGJsb2NrIGZvcm1hdHRpbmcgY29udGV4dC4gV2UganVzdCBuZWVkIHRv
IGluaXRpYWxpemUgdGhlIHRvcCBsZWZ0IHBvc2l0aW9uLgorICAgIGxheW91dFN0YXRlKCkuZGlz
cGxheUJveEZvckxheW91dEJveChyb290KS5zZXRUb3BMZWZ0KHsgMCwgMCB9KTsKICAgICAvLyBT
d2ljaCBvdmVyIHRvIHRoZSBuZXcgZm9ybWF0dGluZyBjb250ZXh0ICh0aGUgb25lIHRoYXQgdGhl
IHJvb3QgY3JlYXRlcykuCiAgICAgYXV0byBmb3JtYXR0aW5nQ29udGV4dCA9IGxheW91dFN0YXRl
KCkuY3JlYXRlRm9ybWF0dGluZ0NvbnRleHQocm9vdCk7CiAgICAgZm9ybWF0dGluZ0NvbnRleHQt
PmxheW91dCgpOwpAQCAtMjU2LDg4ICsyNzUsMjkgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dDo6Y29tcHV0ZVdpZHRoQW5kSGVpZ2h0Rm9yUmVwbGFjZWRJbmxpbmVCb3goY29uc3QgQm8K
ICAgICBjb21wdXRlSGVpZ2h0QW5kTWFyZ2luKGxheW91dEJveCk7CiB9CiAKLXN0YXRpYyB2b2lk
IGFkZERldGFjaGluZ1J1bGVzKElubGluZUl0ZW0mIGlubGluZUl0ZW0sIE9wdGlvbmFsPExheW91
dFVuaXQ+IG5vbkJyZWFrYWJsZVN0YXJ0V2lkdGgsIE9wdGlvbmFsPExheW91dFVuaXQ+IG5vbkJy
ZWFrYWJsZUVuZFdpZHRoKQotewotICAgIE9wdGlvblNldDxJbmxpbmVJdGVtOjpEZXRhY2hpbmdS
dWxlPiBkZXRhY2hpbmdSdWxlczsKLSAgICBpZiAobm9uQnJlYWthYmxlU3RhcnRXaWR0aCkgewot
ICAgICAgICBkZXRhY2hpbmdSdWxlcy5hZGQoSW5saW5lSXRlbTo6RGV0YWNoaW5nUnVsZTo6QnJl
YWtBdFN0YXJ0KTsKLSAgICAgICAgaW5saW5lSXRlbS5hZGROb25CcmVha2FibGVTdGFydCgqbm9u
QnJlYWthYmxlU3RhcnRXaWR0aCk7Ci0gICAgfQotICAgIGlmIChub25CcmVha2FibGVFbmRXaWR0
aCkgewotICAgICAgICBkZXRhY2hpbmdSdWxlcy5hZGQoSW5saW5lSXRlbTo6RGV0YWNoaW5nUnVs
ZTo6QnJlYWtBdEVuZCk7Ci0gICAgICAgIGlubGluZUl0ZW0uYWRkTm9uQnJlYWthYmxlRW5kKCpu
b25CcmVha2FibGVFbmRXaWR0aCk7Ci0gICAgfQotICAgIGlubGluZUl0ZW0uYWRkRGV0YWNoaW5n
UnVsZShkZXRhY2hpbmdSdWxlcyk7Ci19Ci0KLXN0YXRpYyBJbmxpbmVJdGVtJiBjcmVhdGVBbmRB
cHBlbmRJbmxpbmVJdGVtKElubGluZVJ1blByb3ZpZGVyJiBpbmxpbmVSdW5Qcm92aWRlciwgSW5s
aW5lQ29udGVudCYgaW5saW5lQ29udGVudCwgY29uc3QgQm94JiBsYXlvdXRCb3gpCi17Ci0gICAg
QVNTRVJUKGxheW91dEJveC5pc0lubGluZUxldmVsQm94KCkgfHwgbGF5b3V0Qm94LmlzRmxvYXRp
bmdQb3NpdGlvbmVkKCkpOwotICAgIGF1dG8gaW5saW5lSXRlbSA9IHN0ZDo6bWFrZV91bmlxdWU8
SW5saW5lSXRlbT4obGF5b3V0Qm94KTsKLSAgICBhdXRvKiBpbmxpbmVJdGVtUHRyID0gaW5saW5l
SXRlbS5nZXQoKTsKLSAgICBpbmxpbmVDb250ZW50LmFkZChXVEZNb3ZlKGlubGluZUl0ZW0pKTsK
LSAgICBpbmxpbmVSdW5Qcm92aWRlci5hcHBlbmQoKmlubGluZUl0ZW1QdHIpOwotICAgIHJldHVy
biAqaW5saW5lSXRlbVB0cjsKLX0KLQotdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29s
bGVjdElubGluZUNvbnRlbnQoSW5saW5lUnVuUHJvdmlkZXImIGlubGluZVJ1blByb3ZpZGVyKSBj
b25zdAordm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29sbGVjdElubGluZUNvbnRlbnQo
KSBjb25zdAogewogICAgIGlmICghaXM8Q29udGFpbmVyPihyb290KCkpKQogICAgICAgICByZXR1
cm47CiAgICAgYXV0byYgcm9vdCA9IGRvd25jYXN0PENvbnRhaW5lcj4odGhpcy0+cm9vdCgpKTsK
ICAgICBpZiAoIXJvb3QuaGFzSW5GbG93T3JGbG9hdGluZ0NoaWxkKCkpCiAgICAgICAgIHJldHVy
bjsKLSAgICAvLyBUaGUgbG9naWMgaGVyZSBpcyB2ZXJ5IHNpbWlsYXIgdG8gQkZDIGxheW91dC4K
LSAgICAvLyAxLiBUcmF2ZXJzIGRvd24gdGhlIGxheW91dCB0cmVlIGFuZCBjb2xsZWN0ICJzdGFy
dCIgdW5icmVha2FibGUgd2lkdGhzIChtYXJnaW4tbGVmdCwgYm9yZGVyLWxlZnQsIHBhZGRpbmct
bGVmdCkKLSAgICAvLyAyLiBDcmVhdGUgSW5saW5lSXRlbSBwZXIgbGVhZiBpbmxpbmUgYm94ICh0
ZXh0IG5vZGVzLCBpbmxpbmUtYmxvY2tzLCBmbG9hdHMpIGFuZCBzZXQgInN0YXJ0IiB1bmJyZWFr
YWJsZSB3aWR0aCBvbiB0aGVtLiAKLSAgICAvLyAzLiBDbGltYiBiYWNrIGFuZCBjb2xsZWN0ICJl
bmQiIHVuYnJlYWthYmxlIHdpZHRoIGFuZCBzZXQgaXQgb24gdGhlIGxhc3QgSW5saW5lSXRlbS4K
LSAgICBhdXRvJiBsYXlvdXRTdGF0ZSA9IHRoaXMtPmxheW91dFN0YXRlKCk7Ci0gICAgYXV0byYg
aW5saW5lQ29udGVudCA9IGZvcm1hdHRpbmdTdGF0ZSgpLmlubGluZUNvbnRlbnQoKTsKLQotICAg
IGVudW0gY2xhc3MgTm9uQnJlYWthYmxlV2lkdGhUeXBlIHsgU3RhcnQsIEVuZCB9OwotICAgIGF1
dG8gbm9uQnJlYWthYmxlV2lkdGggPSBbJl0oYXV0byYgY29udGFpbmVyLCBhdXRvIHR5cGUpIHsK
LSAgICAgICAgYXV0byYgZGlzcGxheUJveCA9IGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlv
dXRCb3goY29udGFpbmVyKTsKLSAgICAgICAgaWYgKHR5cGUgPT0gTm9uQnJlYWthYmxlV2lkdGhU
eXBlOjpTdGFydCkKLSAgICAgICAgICAgIHJldHVybiBkaXNwbGF5Qm94Lm1hcmdpblN0YXJ0KCkg
KyBkaXNwbGF5Qm94LmJvcmRlckxlZnQoKSArIGRpc3BsYXlCb3gucGFkZGluZ0xlZnQoKS52YWx1
ZU9yKDApOwotICAgICAgICByZXR1cm4gZGlzcGxheUJveC5tYXJnaW5FbmQoKSArIGRpc3BsYXlC
b3guYm9yZGVyUmlnaHQoKSArIGRpc3BsYXlCb3gucGFkZGluZ1JpZ2h0KCkudmFsdWVPcigwKTsK
LSAgICB9OwotCisgICAgLy8gVHJhdmVyc2UgdGhlIHRyZWUgYW5kIGNyZWF0ZSBpbmxpbmUgaXRl
bXMgb3V0IG9mIGNvbnRhaW5lcnMgYW5kIGxlYWYgbm9kZS4gVGhpcyBlc3NlbnRpYWxseSB0cnVu
cyB0aGUgdHJlZSBpbmxpbmUgc3RydWN0dXJlIGludG8gYSBmbGF0IG9uZS4KKyAgICAvLyA8c3Bh
bj50ZXh0PHNwYW4+PC9zcGFuPjxpbWc+PC9zcGFuPiAtPiBbQ29udGFpbmVyU3RhcnRdW0lubGlu
ZUJveF1bQ29udGFpbmVyU3RhcnRdW0NvbnRhaW5lckVuZF1bSW5saW5lQm94XVtDb250YWluZXJF
bmRdCisgICAgYXV0byYgZm9ybWF0dGluZ1N0YXRlID0gdGhpcy0+Zm9ybWF0dGluZ1N0YXRlKCk7
CiAgICAgTGF5b3V0UXVldWUgbGF5b3V0UXVldWU7CiAgICAgbGF5b3V0UXVldWUuYXBwZW5kKHJv
b3QuZmlyc3RJbkZsb3dPckZsb2F0aW5nQ2hpbGQoKSk7Ci0KLSAgICBPcHRpb25hbDxMYXlvdXRV
bml0PiBub25CcmVha2FibGVTdGFydFdpZHRoOwotICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IG5v
bkJyZWFrYWJsZUVuZFdpZHRoOwotICAgIElubGluZUl0ZW0qIGxhc3RJbmxpbmVJdGVtID0gbnVs
bHB0cjsKICAgICB3aGlsZSAoIWxheW91dFF1ZXVlLmlzRW1wdHkoKSkgeworICAgICAgICBhdXRv
IHRyZWF0QXNJbmxpbmVDb250YWluZXIgPSBbXShhdXRvJiBsYXlvdXRCb3gpIHsKKyAgICAgICAg
ICAgIHJldHVybiBpczxDb250YWluZXI+KGxheW91dEJveCkgJiYgIWxheW91dEJveC5lc3RhYmxp
c2hlc0Zvcm1hdHRpbmdDb250ZXh0KCk7CisgICAgICAgIH07CiAgICAgICAgIHdoaWxlICh0cnVl
KSB7CiAgICAgICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSAqbGF5b3V0UXVldWUubGFzdCgpOwot
ICAgICAgICAgICAgaWYgKCFpczxDb250YWluZXI+KGxheW91dEJveCkpCisgICAgICAgICAgICBp
ZiAoIXRyZWF0QXNJbmxpbmVDb250YWluZXIobGF5b3V0Qm94KSkKICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIHN0YXJ0IG9mIGFuIGlubGluZSBjb250
YWluZXIgKGUuZy4gPHNwYW4+KS4KKyAgICAgICAgICAgIGZvcm1hdHRpbmdTdGF0ZS5hZGRJbmxp
bmVJdGVtKHN0ZDo6bWFrZV91bmlxdWU8SW5saW5lSXRlbT4obGF5b3V0Qm94LCBJbmxpbmVJdGVt
OjpUeXBlOjpDb250YWluZXJTdGFydCkpOwogICAgICAgICAgICAgYXV0byYgY29udGFpbmVyID0g
ZG93bmNhc3Q8Q29udGFpbmVyPihsYXlvdXRCb3gpOwotCi0gICAgICAgICAgICBpZiAoY29udGFp
bmVyLmVzdGFibGlzaGVzRm9ybWF0dGluZ0NvbnRleHQoKSkgewotICAgICAgICAgICAgICAgIC8v
IEZvcm1hdHRpbmcgY29udGV4dHMgYXJlIHRyZWF0ZWQgYXMgbGVhZiBub2Rlcy4KLSAgICAgICAg
ICAgICAgICBhdXRvJiBpbmxpbmVJdGVtID0gY3JlYXRlQW5kQXBwZW5kSW5saW5lSXRlbShpbmxp
bmVSdW5Qcm92aWRlciwgaW5saW5lQ29udGVudCwgY29udGFpbmVyKTsKLSAgICAgICAgICAgICAg
ICBhdXRvJiBkaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveChj
b250YWluZXIpOwotICAgICAgICAgICAgICAgIGF1dG8gY3VycmVudE5vbkJyZWFrYWJsZVN0YXJ0
V2lkdGggPSBub25CcmVha2FibGVTdGFydFdpZHRoLnZhbHVlT3IoMCkgKyBkaXNwbGF5Qm94Lm1h
cmdpblN0YXJ0KCkgKyBub25CcmVha2FibGVFbmRXaWR0aC52YWx1ZU9yKDApOwotICAgICAgICAg
ICAgICAgIGFkZERldGFjaGluZ1J1bGVzKGlubGluZUl0ZW0sIGN1cnJlbnROb25CcmVha2FibGVT
dGFydFdpZHRoLCBkaXNwbGF5Qm94Lm1hcmdpbkVuZCgpKTsKLSAgICAgICAgICAgICAgICBub25C
cmVha2FibGVTdGFydFdpZHRoID0geyB9OwotICAgICAgICAgICAgICAgIG5vbkJyZWFrYWJsZUVu
ZFdpZHRoID0geyB9OwotCi0gICAgICAgICAgICAgICAgLy8gRm9ybWF0dGluZyBjb250ZXh0IHJv
b3RzIHRha2UgY2FyZSBvZiB0aGVpciBzdWJ0cmVlcy4gQ29udGludWUgd2l0aCBuZXh0IHNpYmxp
bmcgaWYgZXhpc3RzLgotICAgICAgICAgICAgICAgIGxheW91dFF1ZXVlLnJlbW92ZUxhc3QoKTsK
LSAgICAgICAgICAgICAgICBpZiAoIWNvbnRhaW5lci5uZXh0SW5GbG93T3JGbG9hdGluZ1NpYmxp
bmcoKSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgbGF5b3V0
UXVldWUuYXBwZW5kKGNvbnRhaW5lci5uZXh0SW5GbG93T3JGbG9hdGluZ1NpYmxpbmcoKSk7Ci0g
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8v
IENoZWNrIGlmIHRoaXMgbm9uLWZvcm1hdHRpbmcgY29udGV4dCBjb250YWluZXIgaGFzIGFueSBu
b24tYnJlYWthYmxlIHN0YXJ0IHByb3BlcnRpZXMgKG1hcmdpbi1sZWZ0LCBib3JkZXItbGVmdCwg
cGFkZGluZy1sZWZ0KQotICAgICAgICAgICAgLy8gPHNwYW4gc3R5bGU9InBhZGRpbmctbGVmdDog
NXB4Ij48c3BhbiBzdHlsZT0icGFkZGluZy1sZWZ0OiA1cHgiPmZvb2Jhcjwvc3Bhbj48L3NwYW4+
IC0+IDVweCArIDVweAotICAgICAgICAgICAgYXV0byBjdXJyZW50Tm9uQnJlYWthYmxlU3RhcnRX
aWR0aCA9IG5vbkJyZWFrYWJsZVdpZHRoKGxheW91dEJveCwgTm9uQnJlYWthYmxlV2lkdGhUeXBl
OjpTdGFydCk7Ci0gICAgICAgICAgICBpZiAoY3VycmVudE5vbkJyZWFrYWJsZVN0YXJ0V2lkdGgg
fHwgbGF5b3V0Qm94LmlzUG9zaXRpb25lZCgpKQotICAgICAgICAgICAgICAgIG5vbkJyZWFrYWJs
ZVN0YXJ0V2lkdGggPSBub25CcmVha2FibGVTdGFydFdpZHRoLnZhbHVlT3IoMCkgKyBjdXJyZW50
Tm9uQnJlYWthYmxlU3RhcnRXaWR0aDsKLQogICAgICAgICAgICAgaWYgKCFjb250YWluZXIuaGFz
SW5GbG93T3JGbG9hdGluZ0NoaWxkKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICBsYXlvdXRRdWV1ZS5hcHBlbmQoY29udGFpbmVyLmZpcnN0SW5GbG93T3JGbG9hdGluZ0No
aWxkKCkpOwpAQCAtMzQ1LDI5ICszMDUsMTkgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dDo6Y29sbGVjdElubGluZUNvbnRlbnQoSW5saW5lUnVuUHJvdmlkZXImIGlubGluZVJ1blAKIAog
ICAgICAgICB3aGlsZSAoIWxheW91dFF1ZXVlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgYXV0
byYgbGF5b3V0Qm94ID0gKmxheW91dFF1ZXVlLnRha2VMYXN0KCk7Ci0gICAgICAgICAgICBpZiAo
aXM8Q29udGFpbmVyPihsYXlvdXRCb3gpKSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0
aGUgZW5kIG9mIGFuIGlubGluZSBjb250YWluZXIuIENvbXB1dGUgdGhlIG5vbi1icmVha2FibGUg
ZW5kIHdpZHRoIGFuZCBhZGQgaXQgdG8gdGhlIGxhc3QgaW5saW5lIGJveC4KLSAgICAgICAgICAg
ICAgICAvLyA8c3BhbiBzdHlsZT0icGFkZGluZy1yaWdodDogNXB4Ij5mb29iYXI8L3NwYW4+IC0+
IDVweDsgbGFzdCBpbmxpbmUgaXRlbSAtPiAiZm9vYmFyIgotICAgICAgICAgICAgICAgIGF1dG8g
Y3VycmVudE5vbkJyZWFrYWJsZUVuZFdpZHRoID0gbm9uQnJlYWthYmxlV2lkdGgobGF5b3V0Qm94
LCBOb25CcmVha2FibGVXaWR0aFR5cGU6OkVuZCk7Ci0gICAgICAgICAgICAgICAgaWYgKGN1cnJl
bnROb25CcmVha2FibGVFbmRXaWR0aCB8fCBsYXlvdXRCb3guaXNQb3NpdGlvbmVkKCkpCi0gICAg
ICAgICAgICAgICAgICAgIG5vbkJyZWFrYWJsZUVuZFdpZHRoID0gbm9uQnJlYWthYmxlRW5kV2lk
dGgudmFsdWVPcigwKSArIGN1cnJlbnROb25CcmVha2FibGVFbmRXaWR0aDsKLSAgICAgICAgICAg
ICAgICAvLyBBZGQgaXQgdG8gdGhlIGxhc3QgaW5saW5lIGJveAotICAgICAgICAgICAgICAgIGlm
IChsYXN0SW5saW5lSXRlbSkgewotICAgICAgICAgICAgICAgICAgICBhZGREZXRhY2hpbmdSdWxl
cygqbGFzdElubGluZUl0ZW0sIHsgfSwgbm9uQnJlYWthYmxlRW5kV2lkdGgpOwotICAgICAgICAg
ICAgICAgICAgICBub25CcmVha2FibGVFbmRXaWR0aCA9IHsgfTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIExlYWYgaW5saW5lIGJv
eAotICAgICAgICAgICAgICAgIGF1dG8mIGlubGluZUl0ZW0gPSBjcmVhdGVBbmRBcHBlbmRJbmxp
bmVJdGVtKGlubGluZVJ1blByb3ZpZGVyLCBpbmxpbmVDb250ZW50LCBsYXlvdXRCb3gpOwotICAg
ICAgICAgICAgICAgIC8vIEFkZCBzdGFydCBhbmQgdGhlICh0aHJvdWdoIGVtcHR5IGNvbnRhaW5l
cnMpIGFjY3VtdWxhdGVkIGVuZCB3aWR0aC4KLSAgICAgICAgICAgICAgICAvLyA8c3BhbiBzdHls
ZT0icGFkZGluZy1sZWZ0OiAxcHgiPmZvb2Jhcjwvc3Bhbj4gLT4gbm9uQnJlYWthYmxlU3RhcnRX
aWR0aDogMXB4OwotICAgICAgICAgICAgICAgIC8vIDxzcGFuIHN0eWxlPSJwYWRkaW5nOiA1cHgi
Pjwvc3Bhbj5mb29iYXIgLT4gbm9uQnJlYWthYmxlU3RhcnRXaWR0aDogNXB4OyBub25CcmVha2Fi
bGVFbmRXaWR0aDogNXB4Ci0gICAgICAgICAgICAgICAgaWYgKG5vbkJyZWFrYWJsZVN0YXJ0V2lk
dGggfHwgbm9uQnJlYWthYmxlRW5kV2lkdGgpIHsKLSAgICAgICAgICAgICAgICAgICAgYWRkRGV0
YWNoaW5nUnVsZXMoaW5saW5lSXRlbSwgbm9uQnJlYWthYmxlU3RhcnRXaWR0aC52YWx1ZU9yKDAp
ICsgbm9uQnJlYWthYmxlRW5kV2lkdGgudmFsdWVPcigwKSwgeyB9KTsKLSAgICAgICAgICAgICAg
ICAgICAgbm9uQnJlYWthYmxlU3RhcnRXaWR0aCA9IHsgfTsKLSAgICAgICAgICAgICAgICAgICAg
bm9uQnJlYWthYmxlRW5kV2lkdGggPSB7IH07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGxhc3RJbmxpbmVJdGVtID0gJmlubGluZUl0ZW07CisgICAgICAgICAgICAvLyBUaGlz
IGlzIHRoZSBlbmQgb2YgYW4gaW5saW5lIGNvbnRhaW5lciAoZS5nLiA8L3NwYW4+KS4KKyAgICAg
ICAgICAgIGlmICh0cmVhdEFzSW5saW5lQ29udGFpbmVyKGxheW91dEJveCkpCisgICAgICAgICAg
ICAgICAgZm9ybWF0dGluZ1N0YXRlLmFkZElubGluZUl0ZW0oc3RkOjptYWtlX3VuaXF1ZTxJbmxp
bmVJdGVtPihsYXlvdXRCb3gsIElubGluZUl0ZW06OlR5cGU6OkNvbnRhaW5lckVuZCkpOworICAg
ICAgICAgICAgZWxzZSBpZiAoaXM8TGluZUJyZWFrQm94PihsYXlvdXRCb3gpKQorICAgICAgICAg
ICAgICAgIGZvcm1hdHRpbmdTdGF0ZS5hZGRJbmxpbmVJdGVtKHN0ZDo6bWFrZV91bmlxdWU8SW5s
aW5lSXRlbT4obGF5b3V0Qm94LCBJbmxpbmVJdGVtOjpUeXBlOjpIYXJkTGluZUJyZWFrKSk7Cisg
ICAgICAgICAgICBlbHNlIGlmIChsYXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSkKKyAg
ICAgICAgICAgICAgICBmb3JtYXR0aW5nU3RhdGUuYWRkSW5saW5lSXRlbShzdGQ6Om1ha2VfdW5p
cXVlPElubGluZUl0ZW0+KGxheW91dEJveCwgSW5saW5lSXRlbTo6VHlwZTo6RmxvYXQpKTsKKyAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIEFTU0VSVChpczxJbmxpbmVCb3g+KGxh
eW91dEJveCkgfHwgbGF5b3V0Qm94LmlzSW5saW5lQmxvY2tCb3goKSk7CisgICAgICAgICAgICAg
ICAgaWYgKGlzPElubGluZUJveD4obGF5b3V0Qm94KSAmJiBkb3duY2FzdDxJbmxpbmVCb3g+KGxh
eW91dEJveCkuaGFzVGV4dENvbnRlbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgSW5saW5lVGV4
dEl0ZW06OmNyZWF0ZUFuZEFwcGVuZFRleHRJdGVtcyhmb3JtYXR0aW5nU3RhdGUuaW5saW5lSXRl
bXMoKSwgZG93bmNhc3Q8SW5saW5lQm94PihsYXlvdXRCb3gpKTsKKyAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRpbmdTdGF0ZS5hZGRJbmxpbmVJdGVtKHN0
ZDo6bWFrZV91bmlxdWU8SW5saW5lSXRlbT4obGF5b3V0Qm94LCBJbmxpbmVJdGVtOjpUeXBlOjpC
b3gpKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGF1dG8qIG5leHRTaWJsaW5n
ID0gbGF5b3V0Qm94Lm5leHRJbkZsb3dPckZsb2F0aW5nU2libGluZygpKSB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5n
Q29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQuaAppbmRleCBhNGZiMzE1ODRhZGY4YjgxZDhkNWM2MWMzMzcyNjEy
YjBkYTkzMjgxLi45YjBkNjIyNmI1M2FjYzRlMWJmYWUyNTVmZGRmOTU4MTA2NTVlMGRhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0
aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmgKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRl
ICJEaXNwbGF5Qm94LmgiCiAjaW5jbHVkZSAiRm9ybWF0dGluZ0NvbnRleHQuaCIKICNpbmNsdWRl
ICJJbmxpbmVGb3JtYXR0aW5nU3RhdGUuaCIKLSNpbmNsdWRlICJJbmxpbmVSdW4uaCIKICNpbmNs
dWRlIDx3dGYvSXNvTWFsbG9jLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM4LDcgKzM3
LDYgQEAgbmFtZXNwYWNlIExheW91dCB7CiAKIGNsYXNzIEZsb2F0aW5nU3RhdGU7CiBjbGFzcyBJ
bmxpbmVDb250YWluZXI7Ci1jbGFzcyBJbmxpbmVSdW5Qcm92aWRlcjsKIGNsYXNzIExpbmU7CiAK
IC8vIFRoaXMgY2xhc3MgaW1wbGVtZW50cyB0aGUgbGF5b3V0IGxvZ2ljIGZvciBpbmxpbmUgZm9y
bWF0dGluZyBjb250ZXh0cy4KQEAgLTU1LDIxICs1MywxNSBAQCBwcml2YXRlOgogICAgIGNsYXNz
IExpbmVMYXlvdXQgewogICAgIHB1YmxpYzoKICAgICAgICAgTGluZUxheW91dChjb25zdCBJbmxp
bmVGb3JtYXR0aW5nQ29udGV4dCYpOwotICAgICAgICB2b2lkIGxheW91dChjb25zdCBJbmxpbmVS
dW5Qcm92aWRlciYpIGNvbnN0OworICAgICAgICB2b2lkIGxheW91dCgpIGNvbnN0OwogCiAgICAg
cHJpdmF0ZToKLSAgICAgICAgZW51bSBjbGFzcyBJc0xhc3RMaW5lIHsgTm8sIFllcyB9OwotICAg
ICAgICB2b2lkIGluaXRpYWxpemVOZXdMaW5lKExpbmUmKSBjb25zdDsKLSAgICAgICAgdm9pZCBj
bG9zZUxpbmUoTGluZSYsIElzTGFzdExpbmUpIGNvbnN0OwotICAgICAgICB2b2lkIGFwcGVuZENv
bnRlbnRUb0xpbmUoTGluZSYsIGNvbnN0IElubGluZVJ1blByb3ZpZGVyOjpSdW4mLCBjb25zdCBM
YXlvdXRTaXplJikgY29uc3Q7Ci0gICAgICAgIHZvaWQgcG9zdFByb2Nlc3NJbmxpbmVSdW5zKExp
bmUmLCBJc0xhc3RMaW5lKSBjb25zdDsKLSAgICAgICAgdm9pZCBjcmVhdGVGaW5hbFJ1bnMoTGlu
ZSYpIGNvbnN0OwotICAgICAgICB2b2lkIHNwbGl0SW5saW5lUnVuSWZOZWVkZWQoY29uc3QgSW5s
aW5lUnVuJiwgSW5saW5lUnVucyYgc3BsaXRSdW5zKSBjb25zdDsKLSAgICAgICAgdm9pZCBjb21w
dXRlRmxvYXRQb3NpdGlvbihjb25zdCBGbG9hdGluZ0NvbnRleHQmLCBMaW5lJiwgY29uc3QgQm94
JikgY29uc3Q7Ci0gICAgICAgIHZvaWQgcGxhY2VJbkZsb3dQb3NpdGlvbmVkQ2hpbGRyZW4odW5z
aWduZWQgZmlyc3RSdW5JbmRleCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgYWxpZ25SdW5zKFRleHRB
bGlnbk1vZGUsIExpbmUmLCBJc0xhc3RMaW5lKSBjb25zdDsKLSAgICAgICAgdm9pZCBjb21wdXRl
RXhwYW5zaW9uT3Bwb3J0dW5pdGllcyhMaW5lJiwgY29uc3QgSW5saW5lUnVuUHJvdmlkZXI6OlJ1
biYsIElubGluZVJ1blByb3ZpZGVyOjpSdW46OlR5cGUgbGFzdFJ1blR5cGUpIGNvbnN0OwotICAg
ICAgICBMYXlvdXRVbml0IHJ1bldpZHRoKGNvbnN0IElubGluZUNvbnRlbnQmLCBjb25zdCBJbmxp
bmVJdGVtJiwgSXRlbVBvc2l0aW9uIGZyb20sIHVuc2lnbmVkIGxlbmd0aCwgTGF5b3V0VW5pdCBj
b250ZW50TG9naWNhbExlZnQpIGNvbnN0OworICAgICAgICBMYXlvdXRTdGF0ZSYgbGF5b3V0U3Rh
dGUoKSBjb25zdCB7IHJldHVybiBtX2Zvcm1hdHRpbmdDb250ZXh0LmxheW91dFN0YXRlKCk7IH0K
KyAgICAgICAgdm9pZCBpbml0aWFsaXplTGluZShMaW5lJiwgTGF5b3V0VW5pdCBsaW5lTG9naWNh
bFRvcCkgY29uc3Q7CisgICAgICAgIHZvaWQgY2xvc2VMaW5lKExpbmUmKSBjb25zdDsKKyAgICAg
ICAgdm9pZCBjb21taXRJbmxpbmVJdGVtVG9MaW5lKExpbmUmLCBjb25zdCBJbmxpbmVJdGVtJikg
Y29uc3Q7CisgICAgICAgIHZvaWQgaGFuZGxlRmxvYXQoTGluZSYsIGNvbnN0IEZsb2F0aW5nQ29u
dGV4dCYsIGNvbnN0IElubGluZUl0ZW0mIGZsb2F0Qm94KSBjb25zdDsKKyAgICAgICAgdm9pZCBh
bGlnblJ1bnMoVGV4dEFsaWduTW9kZSwgdW5zaWduZWQgZmlyc3RSdW5JbmRleCwgTGF5b3V0VW5p
dCBhdmFpbGFibGVXaWR0aCkgY29uc3Q7CiAKICAgICBwcml2YXRlOgogICAgICAgICBzdGF0aWMg
dm9pZCBqdXN0aWZ5UnVucyhMaW5lJik7CkBAIC04OSwxMyArODEsMTUgQEAgcHJpdmF0ZToKIAog
ICAgIHZvaWQgbGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRSb290KGNvbnN0IEJveCYsIFVzZWRIb3Jp
em9udGFsVmFsdWVzKSBjb25zdDsKICAgICB2b2lkIGNvbXB1dGVJbnRyaW5zaWNXaWR0aEZvckZs
b2F0Qm94KGNvbnN0IEJveCYpIGNvbnN0OworICAgIHZvaWQgY29tcHV0ZU1hcmdpbkJvcmRlckFu
ZFBhZGRpbmdGb3JJbmxpbmVDb250YWluZXIoY29uc3QgSW5saW5lQ29udGFpbmVyJiwgVXNlZEhv
cml6b250YWxWYWx1ZXMpIGNvbnN0OworICAgIHZvaWQgaW5pdGlhbGl6ZU1hcmdpbkJvcmRlckFu
ZFBhZGRpbmdGb3JHZW5lcmljSW5saW5lQm94KGNvbnN0IElubGluZUJveCYpIGNvbnN0OwogICAg
IHZvaWQgY29tcHV0ZUludHJpbnNpY1dpZHRoRm9ySW5saW5lQmxvY2soY29uc3QgQm94JikgY29u
c3Q7CiAgICAgdm9pZCBjb21wdXRlV2lkdGhBbmRIZWlnaHRGb3JSZXBsYWNlZElubGluZUJveChj
b25zdCBCb3gmLCBVc2VkSG9yaXpvbnRhbFZhbHVlcykgY29uc3Q7Ci0gICAgdm9pZCBjb21wdXRl
TWFyZ2luKGNvbnN0IEJveCYsIFVzZWRIb3Jpem9udGFsVmFsdWVzKSBjb25zdDsKKyAgICB2b2lk
IGNvbXB1dGVIb3Jpem9udGFsTWFyZ2luKGNvbnN0IEJveCYsIFVzZWRIb3Jpem9udGFsVmFsdWVz
KSBjb25zdDsKICAgICB2b2lkIGNvbXB1dGVIZWlnaHRBbmRNYXJnaW4oY29uc3QgQm94JikgY29u
c3Q7CiAgICAgdm9pZCBjb21wdXRlV2lkdGhBbmRNYXJnaW4oY29uc3QgQm94JiwgVXNlZEhvcml6
b250YWxWYWx1ZXMpIGNvbnN0OwogCi0gICAgdm9pZCBjb2xsZWN0SW5saW5lQ29udGVudChJbmxp
bmVSdW5Qcm92aWRlciYpIGNvbnN0OworICAgIHZvaWQgY29sbGVjdElubGluZUNvbnRlbnQoKSBj
b25zdDsKIAogICAgIElubGluZUZvcm1hdHRpbmdTdGF0ZSYgZm9ybWF0dGluZ1N0YXRlKCkgY29u
c3QgeyByZXR1cm4gZG93bmNhc3Q8SW5saW5lRm9ybWF0dGluZ1N0YXRlPihGb3JtYXR0aW5nQ29u
dGV4dDo6Zm9ybWF0dGluZ1N0YXRlKCkpOyB9CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5
b3V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZv
cm1hdHRpbmdDb250ZXh0TGluZUxheW91dC5jcHAKaW5kZXggMzY3NWZhZGY5MThmMTcwOTk4ODkz
ZGVkMzQ4YWJlNzU1ZDA0MGFmZi4uZWE3YmQ2NmNkMjQwNWQxNTRhNjdmNTZlMjE0ZmQ2NGJhMTQx
MWMwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcv
SW5saW5lRm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlv
dXQuY3BwCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSAiRmxvYXRpbmdTdGF0ZS5oIgogI2lu
Y2x1ZGUgIklubGluZUZvcm1hdHRpbmdTdGF0ZS5oIgogI2luY2x1ZGUgIklubGluZUxpbmVCcmVh
a2VyLmgiCi0jaW5jbHVkZSAiSW5saW5lUnVuUHJvdmlkZXIuaCIKICNpbmNsdWRlICJMYXlvdXRC
b3guaCIKICNpbmNsdWRlICJMYXlvdXRDb250YWluZXIuaCIKICNpbmNsdWRlICJMYXlvdXRTdGF0
ZS5oIgpAQCAtNDEsMjMwICs0MCwzMzMgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFj
ZSBMYXlvdXQgewogCitzdHJ1Y3QgVXNlZEhlaWdodEFuZERlcHRoIHsKKyAgICBMYXlvdXRVbml0
IGhlaWdodDsKKyAgICBMYXlvdXRVbml0IGRlcHRoOworfTsKKworc3RhdGljIFVzZWRIZWlnaHRB
bmREZXB0aCBoYWxmTGVhZGluZ01ldHJpY3MoY29uc3QgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNz
LCBMYXlvdXRVbml0IGxpbmVMb2dpY2FsSGVpZ2h0KQoreworICAgIGF1dG8gYXNjZW50ID0gZm9u
dE1ldHJpY3MuYXNjZW50KCk7CisgICAgYXV0byBkZXNjZW50ID0gZm9udE1ldHJpY3MuZGVzY2Vu
dCgpOworICAgIC8vIDEwLjguMSBMZWFkaW5nIGFuZCBoYWxmLWxlYWRpbmcKKyAgICBhdXRvIGxl
YWRpbmcgPSBsaW5lTG9naWNhbEhlaWdodCAtIChhc2NlbnQgKyBkZXNjZW50KTsKKyAgICAvLyBJ
bmxpbmUgdHJlZSBpcyBhbGwgaW50ZWdlciBiYXNlZC4KKyAgICBhdXRvIGFkanVzdGVkQXNjZW50
ID0gc3RkOjptYXgoKGFzY2VudCArIGxlYWRpbmcgLyAyKS5mbG9vcigpLCAwKTsKKyAgICBhdXRv
IGFkanVzdGVkRGVzY2VudCA9IHN0ZDo6bWF4KChkZXNjZW50ICsgbGVhZGluZyAvIDIpLmNlaWwo
KSwgMCk7CisgICAgcmV0dXJuIHsgYWRqdXN0ZWRBc2NlbnQsIGFkanVzdGVkRGVzY2VudCB9OyAK
K30KKwogY2xhc3MgTGluZSB7CiBwdWJsaWM6Ci0gICAgdm9pZCBpbml0KGNvbnN0IExheW91dFBv
aW50JiB0b3BMZWZ0LCBMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoLCBMYXlvdXRVbml0IG1pbmlt
YWxIZWlnaHQpOwotICAgIHZvaWQgY2xvc2UoKTsKKyAgICBMaW5lKGNvbnN0IExheW91dFN0YXRl
Jik7CisKKyAgICB2b2lkIHJlc2V0KGNvbnN0IExheW91dFBvaW50JiB0b3BMZWZ0LCBMYXlvdXRV
bml0IGF2YWlsYWJsZVdpZHRoLCBMYXlvdXRVbml0IG1pbmltdW1MaW5lSGVpZ2h0LCBMYXlvdXRV
bml0IGJhc2VsaW5lT2Zmc2V0KTsKKworICAgIHN0cnVjdCBMaW5lSXRlbSB7CisgICAgICAgIExp
bmVJdGVtKERpc3BsYXk6OlJ1biwgY29uc3QgSW5saW5lSXRlbSYsIGJvb2wgaXNDb2xsYXBzZWQs
IGJvb2wgY2FuQmVFeHRlbmRlZCk7CisKKyAgICAgICAgLy8gUmVsYXRpdmUgdG8gdGhlIGJhc2Vs
aW5lLgorICAgICAgICBEaXNwbGF5OjpSdW4gaW5saW5lUnVuOworICAgICAgICBjb25zdCBJbmxp
bmVJdGVtJiBpbmxpbmVJdGVtOworICAgICAgICBib29sIGlzQ29sbGFwc2VkIHsgZmFsc2UgfTsK
KyAgICAgICAgYm9vbCBjYW5CZUV4dGVuZGVkIHsgZmFsc2UgfTsKKyAgICB9OworCisgICAgdXNp
bmcgTGluZUl0ZW1zID0gVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxMaW5lSXRlbT4+OworICAgIGNv
bnN0IExpbmVJdGVtcyYgY2xvc2UoKTsKIAotICAgIHZvaWQgYXBwZW5kQ29udGVudChjb25zdCBJ
bmxpbmVSdW5Qcm92aWRlcjo6UnVuJiwgY29uc3QgTGF5b3V0U2l6ZSYpOworICAgIHZvaWQgYXBw
ZW5kVGV4dENvbnRlbnQoY29uc3QgSW5saW5lVGV4dEl0ZW0mLCBMYXlvdXRTaXplKTsKKyAgICB2
b2lkIGFwcGVuZE5vblJlcGxhY2VkSW5saW5lQm94KGNvbnN0IElubGluZUl0ZW0mLCBMYXlvdXRT
aXplKTsKKyAgICB2b2lkIGFwcGVuZFJlcGxhY2VkSW5saW5lQm94KGNvbnN0IElubGluZUl0ZW0m
LCBMYXlvdXRTaXplKTsKKyAgICB2b2lkIGFwcGVuZElubGluZUNvbnRhaW5lclN0YXJ0KGNvbnN0
IElubGluZUl0ZW0mKTsKKyAgICB2b2lkIGFwcGVuZElubGluZUNvbnRhaW5lckVuZChjb25zdCBJ
bmxpbmVJdGVtJik7CisgICAgdm9pZCBhcHBlbmRIYXJkTGluZUJyZWFrKGNvbnN0IElubGluZUl0
ZW0mKTsKIAotICAgIHZvaWQgYWRqdXN0TG9naWNhbExlZnQoTGF5b3V0VW5pdCBkZWx0YSk7Ci0g
ICAgdm9pZCBhZGp1c3RMb2dpY2FsUmlnaHQoTGF5b3V0VW5pdCBkZWx0YSk7CisgICAgYm9vbCBo
YXNDb250ZW50KCkgY29uc3Q7CiAKLSAgICBib29sIGhhc0NvbnRlbnQoKSBjb25zdCB7IHJldHVy
biAhbV9pbmxpbmVSdW5zLmlzRW1wdHkoKTsgfQotICAgIGJvb2wgaXNDbG9zZWQoKSBjb25zdCB7
IHJldHVybiBtX2Nsb3NlZDsgfQotICAgIGJvb2wgaXNGaXJzdExpbmUoKSBjb25zdCB7IHJldHVy
biBtX2lzRmlyc3RMaW5lOyB9Ci0gICAgVmVjdG9yPElubGluZVJ1bj4mIHJ1bnMoKSB7IHJldHVy
biBtX2lubGluZVJ1bnM7IH0KKyAgICBMYXlvdXRVbml0IHRyYWlsaW5nVHJpbW1hYmxlV2lkdGgo
KSBjb25zdDsKIAotICAgIExheW91dFVuaXQgY29udGVudExvZ2ljYWxSaWdodCgpIGNvbnN0Owot
ICAgIExheW91dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0KCkgY29uc3QgeyByZXR1cm4gbV9sb2dp
Y2FsUmVjdC5sZWZ0KCk7IH0KLSAgICBMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoKCkgY29uc3Qg
eyByZXR1cm4gbV9hdmFpbGFibGVXaWR0aDsgfQotICAgIE9wdGlvbmFsPElubGluZVJ1blByb3Zp
ZGVyOjpSdW46OlR5cGU+IGxhc3RSdW5UeXBlKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0UnVuVHlw
ZTsgfQorICAgIHZvaWQgbW92ZUxvZ2ljYWxMZWZ0KExheW91dFVuaXQpOworICAgIHZvaWQgbW92
ZUxvZ2ljYWxSaWdodChMYXlvdXRVbml0KTsKIAotICAgIExheW91dFVuaXQgbG9naWNhbFRvcCgp
IGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFJlY3QudG9wKCk7IH0KLSAgICBMYXlvdXRVbml0IGxv
Z2ljYWxCb3R0b20oKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxSZWN0LmJvdHRvbSgpOyB9Ci0g
ICAgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbG9naWNhbEJvdHRv
bSgpIC0gbG9naWNhbFRvcCgpOyB9CisgICAgTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCgpIGNv
bnN0IHsgcmV0dXJuIGxvZ2ljYWxXaWR0aCgpIC0gY29udGVudExvZ2ljYWxXaWR0aCgpOyB9Cisg
ICAgCisgICAgTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbFJpZ2h0KCkgY29uc3QgeyByZXR1cm4g
bG9naWNhbExlZnQoKSArIGNvbnRlbnRMb2dpY2FsV2lkdGgoKTsgfQorICAgIExheW91dFVuaXQg
Y29udGVudExvZ2ljYWxXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudExvZ2ljYWxXaWR0
aDsgfQorCisgICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9wKCkgY29uc3QgeyByZXR1cm4gbV9sb2dp
Y2FsVG9wTGVmdC55KCk7IH0KKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0KCkgY29uc3QgeyBy
ZXR1cm4gbV9sb2dpY2FsVG9wTGVmdC54KCk7IH0KKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdo
dCgpIGNvbnN0IHsgcmV0dXJuIGxvZ2ljYWxMZWZ0KCkgKyBsb2dpY2FsV2lkdGgoKTsgfQorICAg
IExheW91dFVuaXQgbG9naWNhbEJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIGxvZ2ljYWxUb3AoKSAr
IGxvZ2ljYWxIZWlnaHQoKTsgfQorICAgIExheW91dFVuaXQgbG9naWNhbFdpZHRoKCkgY29uc3Qg
eyByZXR1cm4gbV9saW5lTG9naWNhbFdpZHRoOyB9CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsSGVp
Z2h0KCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsSGVpZ2h0LmhlaWdodCArIG1fbG9naWNhbEhl
aWdodC5kZXB0aDsgfQogCiBwcml2YXRlOgotICAgIHN0cnVjdCBUcmFpbGluZ1RyaW1tYWJsZUNv
bnRlbnQgewotICAgICAgICBMYXlvdXRVbml0IHdpZHRoOwotICAgICAgICB1bnNpZ25lZCBsZW5n
dGg7Ci0gICAgfTsKLSAgICBPcHRpb25hbDxUcmFpbGluZ1RyaW1tYWJsZUNvbnRlbnQ+IG1fdHJh
aWxpbmdUcmltbWFibGVDb250ZW50OwotICAgIE9wdGlvbmFsPElubGluZVJ1blByb3ZpZGVyOjpS
dW46OlR5cGU+IG1fbGFzdFJ1blR5cGU7Ci0gICAgYm9vbCBtX2xhc3RSdW5DYW5FeHBhbmQgeyBm
YWxzZSB9OworICAgIHZvaWQgYXBwZW5kTm9uQnJlYWthYmxlU3BhY2UoY29uc3QgSW5saW5lSXRl
bSYsIGNvbnN0IERpc3BsYXk6OlJlY3QmIGxvZ2ljYWxSZWN0KTsKKyAgICB2b2lkIHJlbW92ZVRy
YWlsaW5nVHJpbW1hYmxlQ29udGVudCgpOworCisgICAgY29uc3QgTGF5b3V0U3RhdGUmIG1fbGF5
b3V0U3RhdGU7CisgICAgTGluZUl0ZW1zIG1fbGluZUl0ZW1zOworICAgIExpc3RIYXNoU2V0PExp
bmVJdGVtKj4gbV90cmltbWFibGVDb250ZW50OwogCi0gICAgRGlzcGxheTo6Qm94OjpSZWN0IG1f
bG9naWNhbFJlY3Q7Ci0gICAgTGF5b3V0VW5pdCBtX2F2YWlsYWJsZVdpZHRoOworICAgIExheW91
dFBvaW50IG1fbG9naWNhbFRvcExlZnQ7CisgICAgTGF5b3V0VW5pdCBtX2NvbnRlbnRMb2dpY2Fs
V2lkdGg7CiAKLSAgICBWZWN0b3I8SW5saW5lUnVuPiBtX2lubGluZVJ1bnM7Ci0gICAgYm9vbCBt
X2lzRmlyc3RMaW5lIHsgdHJ1ZSB9OwotICAgIGJvb2wgbV9jbG9zZWQgeyB0cnVlIH07CisgICAg
VXNlZEhlaWdodEFuZERlcHRoIG1fbG9naWNhbEhlaWdodDsKKyAgICBMYXlvdXRVbml0IG1fbGlu
ZUxvZ2ljYWxXaWR0aDsKIH07CiAKLXZvaWQgTGluZTo6aW5pdChjb25zdCBMYXlvdXRQb2ludCYg
dG9wTGVmdCwgTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCwgTGF5b3V0VW5pdCBtaW5pbWFsSGVp
Z2h0KQorTGluZTo6TGluZUl0ZW06OkxpbmVJdGVtKERpc3BsYXk6OlJ1biBpbmxpbmVSdW4sIGNv
bnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0sIGJvb2wgaXNDb2xsYXBzZWQsIGJvb2wgY2FuQmVF
eHRlbmRlZCkKKyAgICA6IGlubGluZVJ1bihpbmxpbmVSdW4pCisgICAgLCBpbmxpbmVJdGVtKGlu
bGluZUl0ZW0pCisgICAgLCBpc0NvbGxhcHNlZChpc0NvbGxhcHNlZCkKKyAgICAsIGNhbkJlRXh0
ZW5kZWQoY2FuQmVFeHRlbmRlZCkKIHsKLSAgICBtX2xvZ2ljYWxSZWN0LnNldFRvcExlZnQodG9w
TGVmdCk7Ci0gICAgbV9sb2dpY2FsUmVjdC5zZXRXaWR0aChhdmFpbGFibGVXaWR0aCk7Ci0gICAg
bV9sb2dpY2FsUmVjdC5zZXRIZWlnaHQobWluaW1hbEhlaWdodCk7Ci0gICAgbV9hdmFpbGFibGVX
aWR0aCA9IGF2YWlsYWJsZVdpZHRoOwotCi0gICAgbV9pbmxpbmVSdW5zLmNsZWFyKCk7Ci0gICAg
bV9sYXN0UnVuVHlwZSA9IHsgfTsKLSAgICBtX2xhc3RSdW5DYW5FeHBhbmQgPSBmYWxzZTsKLSAg
ICBtX3RyYWlsaW5nVHJpbW1hYmxlQ29udGVudCA9IHsgfTsKLSAgICBtX2Nsb3NlZCA9IGZhbHNl
OwogfQogCi12b2lkIExpbmU6OmFkanVzdExvZ2ljYWxMZWZ0KExheW91dFVuaXQgZGVsdGEpCitM
aW5lOjpMaW5lKGNvbnN0IExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSkKKyAgICA6IG1fbGF5b3V0
U3RhdGUobGF5b3V0U3RhdGUpCiB7Ci0gICAgQVNTRVJUKGRlbHRhID4gMCk7Ci0KLSAgICBtX2F2
YWlsYWJsZVdpZHRoIC09IGRlbHRhOwotICAgIG1fbG9naWNhbFJlY3Quc2hpZnRMZWZ0VG8obV9s
b2dpY2FsUmVjdC5sZWZ0KCkgKyBkZWx0YSk7Cit9CiAKLSAgICBmb3IgKGF1dG8mIGlubGluZVJ1
biA6IG1faW5saW5lUnVucykKLSAgICAgICAgaW5saW5lUnVuLm1vdmVIb3Jpem9udGFsbHkoZGVs
dGEpOwordm9pZCBMaW5lOjpyZXNldChjb25zdCBMYXlvdXRQb2ludCYgdG9wTGVmdCwgTGF5b3V0
VW5pdCBhdmFpbGFibGVXaWR0aCwgTGF5b3V0VW5pdCBtaW5pbXVtSGVpZ2h0LCBMYXlvdXRVbml0
IGJhc2VsaW5lT2Zmc2V0KQoreworICAgIG1fbG9naWNhbFRvcExlZnQgPSB0b3BMZWZ0OworICAg
IG1fbGluZUxvZ2ljYWxXaWR0aCA9IGF2YWlsYWJsZVdpZHRoOworICAgIG1fbG9naWNhbEhlaWdo
dCA9IHsgYmFzZWxpbmVPZmZzZXQsIG1pbmltdW1IZWlnaHQgLSBiYXNlbGluZU9mZnNldCB9Owor
ICAgIAorICAgIG1fY29udGVudExvZ2ljYWxXaWR0aCA9IHsgfTsKKworICAgIG1fbGluZUl0ZW1z
LmNsZWFyKCk7CisgICAgbV90cmltbWFibGVDb250ZW50LmNsZWFyKCk7CiB9CiAKLXZvaWQgTGlu
ZTo6YWRqdXN0TG9naWNhbFJpZ2h0KExheW91dFVuaXQgZGVsdGEpCitjb25zdCBMaW5lOjpMaW5l
SXRlbXMmIExpbmU6OmNsb3NlKCkKIHsKLSAgICBBU1NFUlQoZGVsdGEgPiAwKTsKKyAgICByZW1v
dmVUcmFpbGluZ1RyaW1tYWJsZUNvbnRlbnQoKTsKKyAgICAvLyBDb252ZXJ0IGlubGluZSBydW4g
Z2VvbWV0cnkgZnJvbSByZWxhdGl2ZSB0byB0aGUgYmFzZWxpbmUgdG8gcmVsYXRpdmUgdG8gbG9n
aWNhbCB0b3AuCisgICAgZm9yIChhdXRvJiBsaW5lSXRlbSA6IG1fbGluZUl0ZW1zKSB7CisgICAg
ICAgIGF1dG8gYWRqdXN0ZWRMb2dpY2FsVG9wID0gbGluZUl0ZW0tPmlubGluZVJ1bi5sb2dpY2Fs
VG9wKCkgKyBtX2xvZ2ljYWxIZWlnaHQuaGVpZ2h0ICsgbV9sb2dpY2FsVG9wTGVmdC55KCk7Cisg
ICAgICAgIGxpbmVJdGVtLT5pbmxpbmVSdW4uc2V0TG9naWNhbFRvcChhZGp1c3RlZExvZ2ljYWxU
b3ApOworICAgIH0KKyAgICByZXR1cm4gbV9saW5lSXRlbXM7Cit9CiAKLSAgICBtX2F2YWlsYWJs
ZVdpZHRoIC09IGRlbHRhOwotICAgIG1fbG9naWNhbFJlY3Quc2hpZnRSaWdodFRvKG1fbG9naWNh
bFJlY3QucmlnaHQoKSAtIGRlbHRhKTsKK3ZvaWQgTGluZTo6cmVtb3ZlVHJhaWxpbmdUcmltbWFi
bGVDb250ZW50KCkKK3sKKyAgICAvLyBDb2xsYXBzZSB0cmltbWFibGUgdHJhaWxpbmcgY29udGVu
dAorICAgIExheW91dFVuaXQgdHJpbW1hYmxlV2lkdGg7CisgICAgZm9yIChhdXRvKiB0cmltbWFi
bGVSdW4gOiBtX3RyaW1tYWJsZUNvbnRlbnQpIHsKKyAgICAgICAgdHJpbW1hYmxlUnVuLT5pc0Nv
bGxhcHNlZCA9IHRydWU7CisgICAgICAgIHRyaW1tYWJsZVdpZHRoICs9IHRyaW1tYWJsZVJ1bi0+
aW5saW5lUnVuLmxvZ2ljYWxXaWR0aCgpOworICAgIH0KKyAgICBtX2NvbnRlbnRMb2dpY2FsV2lk
dGggLT0gdHJpbW1hYmxlV2lkdGg7CiB9CiAKLXN0YXRpYyBib29sIGlzVHJpbW1hYmxlQ29udGVu
dChjb25zdCBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuJiBpbmxpbmVSdW4pCit2b2lkIExpbmU6Om1v
dmVMb2dpY2FsTGVmdChMYXlvdXRVbml0IGRlbHRhKQogewotICAgIHJldHVybiBpbmxpbmVSdW4u
aXNXaGl0ZXNwYWNlKCkgJiYgaW5saW5lUnVuLnN0eWxlKCkuY29sbGFwc2VXaGl0ZVNwYWNlKCk7
CisgICAgaWYgKCFkZWx0YSkKKyAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVChkZWx0YSA+IDAp
OworICAgIC8vIFNocmluayB0aGUgbGluZSBhbmQgbW92ZSB0aGUgaXRlbXMuCisgICAgbV9sb2dp
Y2FsVG9wTGVmdC5tb3ZlKGRlbHRhLCAwKTsKKyAgICBtX2xpbmVMb2dpY2FsV2lkdGggLT0gZGVs
dGE7CisgICAgZm9yIChhdXRvJiBsaW5lSXRlbSA6IG1fbGluZUl0ZW1zKQorICAgICAgICBsaW5l
SXRlbS0+aW5saW5lUnVuLm1vdmVIb3Jpem9udGFsbHkoZGVsdGEpOwogfQogCi1MYXlvdXRVbml0
IExpbmU6OmNvbnRlbnRMb2dpY2FsUmlnaHQoKSBjb25zdAordm9pZCBMaW5lOjptb3ZlTG9naWNh
bFJpZ2h0KExheW91dFVuaXQgZGVsdGEpCiB7Ci0gICAgaWYgKG1faW5saW5lUnVucy5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybiBtX2xvZ2ljYWxSZWN0LmxlZnQoKTsKKyAgICBBU1NFUlQoZGVs
dGEgPiAwKTsKKyAgICBtX2xpbmVMb2dpY2FsV2lkdGggLT0gZGVsdGE7Cit9CiAKLSAgICByZXR1
cm4gbV9pbmxpbmVSdW5zLmxhc3QoKS5sb2dpY2FsUmlnaHQoKTsKK3N0YXRpYyBib29sIGlzVHJp
bW1hYmxlQ29udGVudChjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtKQoreworICAgIGlmICgh
aXM8SW5saW5lVGV4dEl0ZW0+KGlubGluZUl0ZW0pKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgYXV0byYgaW5saW5lVGV4dEl0ZW0gPSBkb3duY2FzdDxJbmxpbmVUZXh0SXRlbT4oaW5saW5l
SXRlbSk7CisgICAgcmV0dXJuIGlubGluZVRleHRJdGVtLmlzV2hpdGVzcGFjZSgpICYmIGlubGlu
ZVRleHRJdGVtLnN0eWxlKCkuY29sbGFwc2VXaGl0ZVNwYWNlKCk7CiB9CiAKLXZvaWQgTGluZTo6
YXBwZW5kQ29udGVudChjb25zdCBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuJiBydW4sIGNvbnN0IExh
eW91dFNpemUmIHJ1blNpemUpCitMYXlvdXRVbml0IExpbmU6OnRyYWlsaW5nVHJpbW1hYmxlV2lk
dGgoKSBjb25zdAogewotICAgIEFTU0VSVCghaXNDbG9zZWQoKSk7Ci0KLSAgICAvLyBBcHBlbmQg
dGhpcyB0ZXh0IHJ1biB0byB0aGUgZW5kIG9mIHRoZSBsYXN0IHRleHQgcnVuLCBpZiB0aGUgbGFz
dCBydW4gaXMgY29udGludW91cy4KLSAgICBPcHRpb25hbDxJbmxpbmVSdW46OlRleHRDb250ZXh0
PiB0ZXh0UnVuOwotICAgIGlmIChydW4uaXNUZXh0KCkpIHsKLSAgICAgICAgYXV0byB0ZXh0Q29u
dGV4dCA9IHJ1bi50ZXh0Q29udGV4dCgpOwotICAgICAgICBhdXRvIHJ1bkxlbmd0aCA9IHRleHRD
b250ZXh0LT5pc0NvbGxhcHNlZCgpID8gMSA6IHRleHRDb250ZXh0LT5sZW5ndGgoKTsKLSAgICAg
ICAgdGV4dFJ1biA9IElubGluZVJ1bjo6VGV4dENvbnRleHQgeyB0ZXh0Q29udGV4dC0+c3RhcnQo
KSwgcnVuTGVuZ3RoIH07Ci0gICAgfQorICAgIExheW91dFVuaXQgdHJpbW1hYmxlV2lkdGg7Cisg
ICAgZm9yIChhdXRvKiB0cmltbWFibGVSdW4gOiBtX3RyaW1tYWJsZUNvbnRlbnQpCisgICAgICAg
IHRyaW1tYWJsZVdpZHRoICs9IHRyaW1tYWJsZVJ1bi0+aW5saW5lUnVuLmxvZ2ljYWxXaWR0aCgp
OworICAgIHJldHVybiB0cmltbWFibGVXaWR0aDsKK30KIAotICAgIGF1dG8gcmVxdWlyZXNOZXdJ
bmxpbmVSdW4gPSAhaGFzQ29udGVudCgpIHx8ICFydW4uaXNUZXh0KCkgfHwgIW1fbGFzdFJ1bkNh
bkV4cGFuZDsKLSAgICBpZiAocmVxdWlyZXNOZXdJbmxpbmVSdW4pIHsKLSAgICAgICAgLy8gRklY
TUU6IFRoaXMgbmVlZHMgcHJvcGVyIGJhc2VsaW5lIGhhbmRsaW5nCi0gICAgICAgIGF1dG8gaW5s
aW5lUnVuID0gSW5saW5lUnVuIHsgeyBsb2dpY2FsVG9wKCksIGNvbnRlbnRMb2dpY2FsUmlnaHQo
KSwgcnVuU2l6ZS53aWR0aCgpLCBydW5TaXplLmhlaWdodCgpIH0sIHJ1bi5pbmxpbmVJdGVtKCkg
fTsKLSAgICAgICAgaWYgKHRleHRSdW4pCi0gICAgICAgICAgICBpbmxpbmVSdW4uc2V0VGV4dENv
bnRleHQoeyB0ZXh0UnVuLT5zdGFydCgpLCB0ZXh0UnVuLT5sZW5ndGgoKSB9KTsKLSAgICAgICAg
bV9pbmxpbmVSdW5zLmFwcGVuZChpbmxpbmVSdW4pOwotICAgICAgICBtX2xvZ2ljYWxSZWN0LnNl
dEhlaWdodChzdGQ6Om1heChydW5TaXplLmhlaWdodCgpLCBtX2xvZ2ljYWxSZWN0LmhlaWdodCgp
KSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gTm9uLXRleHQgcnVucyBhbHdheXMgcmVxdWly
ZSBuZXcgaW5saW5lIHJ1bi4KLSAgICAgICAgQVNTRVJUKHRleHRSdW4pOwotICAgICAgICBhdXRv
JiBpbmxpbmVSdW4gPSBtX2lubGluZVJ1bnMubGFzdCgpOwotICAgICAgICBBU1NFUlQocnVuU2l6
ZS5oZWlnaHQoKSA9PSBpbmxpbmVSdW4ubG9naWNhbEhlaWdodCgpKTsKLSAgICAgICAgaW5saW5l
UnVuLnNldExvZ2ljYWxXaWR0aChpbmxpbmVSdW4ubG9naWNhbFdpZHRoKCkgKyBydW5TaXplLndp
ZHRoKCkpOwotICAgICAgICBpbmxpbmVSdW4udGV4dENvbnRleHQoKS0+c2V0TGVuZ3RoKGlubGlu
ZVJ1bi50ZXh0Q29udGV4dCgpLT5sZW5ndGgoKSArIHRleHRSdW4tPmxlbmd0aCgpKTsKK2Jvb2wg
TGluZTo6aGFzQ29udGVudCgpIGNvbnN0Cit7CisgICAgLy8gUmV0dXJuIGZhbHNlIGZvciBlbXB0
eSBjb250YWluZXJzIGxpa2UgPHNwYW4+PC9zcGFuPi4KKyAgICBpZiAobV9saW5lSXRlbXMuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZm9yIChhdXRvJiBsaW5lSXRlbSA6
IG1fbGluZUl0ZW1zKSB7CisgICAgICAgIGlmIChsaW5lSXRlbS0+aW5saW5lSXRlbS5pc0NvbnRh
aW5lclN0YXJ0KCkgfHwgbGluZUl0ZW0tPmlubGluZUl0ZW0uaXNDb250YWluZXJFbmQoKSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoIWxpbmVJdGVtLT5pc0NvbGxhcHNlZCkK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CiAK
LSAgICBtX2F2YWlsYWJsZVdpZHRoIC09IHJ1blNpemUud2lkdGgoKTsKLSAgICBtX2xhc3RSdW5U
eXBlID0gcnVuLnR5cGUoKTsKLSAgICBtX2xhc3RSdW5DYW5FeHBhbmQgPSBydW4uaXNUZXh0KCkg
JiYgIXJ1bi50ZXh0Q29udGV4dCgpLT5pc0NvbGxhcHNlZCgpOwotICAgIG1fdHJhaWxpbmdUcmlt
bWFibGVDb250ZW50ID0geyB9OwotICAgIGlmIChpc1RyaW1tYWJsZUNvbnRlbnQocnVuKSkKLSAg
ICAgICAgbV90cmFpbGluZ1RyaW1tYWJsZUNvbnRlbnQgPSBUcmFpbGluZ1RyaW1tYWJsZUNvbnRl
bnQgeyBydW5TaXplLndpZHRoKCksIHRleHRSdW4tPmxlbmd0aCgpIH07Cit2b2lkIExpbmU6OmFw
cGVuZE5vbkJyZWFrYWJsZVNwYWNlKGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0sIGNvbnN0
IERpc3BsYXk6OlJlY3QmIGxvZ2ljYWxSZWN0KQoreworICAgIG1fbGluZUl0ZW1zLmFwcGVuZChz
dGQ6Om1ha2VfdW5pcXVlPExpbmVJdGVtPihEaXNwbGF5OjpSdW4geyBsb2dpY2FsUmVjdCB9LCBp
bmxpbmVJdGVtLCBmYWxzZSwgZmFsc2UpKTsKKyAgICBtX2NvbnRlbnRMb2dpY2FsV2lkdGggKz0g
aW5saW5lSXRlbS53aWR0aCgpOwogfQogCi12b2lkIExpbmU6OmNsb3NlKCkKK3ZvaWQgTGluZTo6
YXBwZW5kSW5saW5lQ29udGFpbmVyU3RhcnQoY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSkK
IHsKLSAgICBhdXRvIHRyaW1UcmFpbGluZ0NvbnRlbnQgPSBbJl0gewotICAgICAgICBpZiAoIW1f
dHJhaWxpbmdUcmltbWFibGVDb250ZW50KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBh
dXRvJiBsYXN0SW5saW5lUnVuID0gbV9pbmxpbmVSdW5zLmxhc3QoKTsKLSAgICAgICAgbGFzdElu
bGluZVJ1bi5zZXRMb2dpY2FsV2lkdGgobGFzdElubGluZVJ1bi5sb2dpY2FsV2lkdGgoKSAtIG1f
dHJhaWxpbmdUcmltbWFibGVDb250ZW50LT53aWR0aCk7Ci0gICAgICAgIGxhc3RJbmxpbmVSdW4u
dGV4dENvbnRleHQoKS0+c2V0TGVuZ3RoKGxhc3RJbmxpbmVSdW4udGV4dENvbnRleHQoKS0+bGVu
Z3RoKCkgLSBtX3RyYWlsaW5nVHJpbW1hYmxlQ29udGVudC0+bGVuZ3RoKTsKLQotICAgICAgICBp
ZiAoIWxhc3RJbmxpbmVSdW4udGV4dENvbnRleHQoKS0+bGVuZ3RoKCkpCi0gICAgICAgICAgICBt
X2lubGluZVJ1bnMucmVtb3ZlTGFzdCgpOwotICAgICAgICBtX2F2YWlsYWJsZVdpZHRoICs9IG1f
dHJhaWxpbmdUcmltbWFibGVDb250ZW50LT53aWR0aDsKLSAgICAgICAgbV90cmFpbGluZ1RyaW1t
YWJsZUNvbnRlbnQgPSB7IH07CisgICAgYXV0byYgbGF5b3V0Qm94ID0gaW5saW5lSXRlbS5sYXlv
dXRCb3goKTsKKyAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHlsZSgpOworICAgIGF1dG8m
IGZvbnRNZXRyaWNzID0gc3R5bGUuZm9udE1ldHJpY3MoKTsKKyAgICAKKyAgICBhdXRvIGFsaWdu
QW5kQWRqdXN0TGluZUhlaWdodCA9IFsmXSB7CisgICAgICAgIExheW91dFVuaXQgaW5saW5lQm94
SGVpZ2h0ID0gc3R5bGUuY29tcHV0ZWRMaW5lSGVpZ2h0KCk7CisKKyAgICAgICAgYXV0byBoYWxm
TGVhZGluZyA9IGhhbGZMZWFkaW5nTWV0cmljcyhmb250TWV0cmljcywgaW5saW5lQm94SGVpZ2h0
KTsKKyAgICAgICAgaWYgKGhhbGZMZWFkaW5nLmRlcHRoID4gMCkKKyAgICAgICAgICAgIG1fbG9n
aWNhbEhlaWdodC5kZXB0aCA9IHN0ZDo6bWF4KG1fbG9naWNhbEhlaWdodC5kZXB0aCwgaGFsZkxl
YWRpbmcuZGVwdGgpOworICAgICAgICBpZiAoaGFsZkxlYWRpbmcuaGVpZ2h0ID4gMCkKKyAgICAg
ICAgICAgIG1fbG9naWNhbEhlaWdodC5oZWlnaHQgPSBzdGQ6Om1heChtX2xvZ2ljYWxIZWlnaHQu
aGVpZ2h0LCBoYWxmTGVhZGluZy5oZWlnaHQpOwogICAgIH07CiAKLSAgICBpZiAoIWhhc0NvbnRl
bnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdHJpbVRyYWlsaW5nQ29udGVudCgpOwotICAg
IG1faXNGaXJzdExpbmUgPSBmYWxzZTsKLSAgICBtX2Nsb3NlZCA9IHRydWU7CisgICAgYWxpZ25B
bmRBZGp1c3RMaW5lSGVpZ2h0KCk7CisgICAgYXV0byYgZGlzcGxheUJveCA9IG1fbGF5b3V0U3Rh
dGUuZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpOworICAgIGF1dG8gY29udGFpbmVy
SGVpZ2h0ID0gZm9udE1ldHJpY3MuaGVpZ2h0KCkgKyBkaXNwbGF5Qm94LnZlcnRpY2FsQm9yZGVy
KCkgKyBkaXNwbGF5Qm94LnZlcnRpY2FsUGFkZGluZygpLnZhbHVlT3IoMCk7CisgICAgYXV0byBs
b2dpY2FsVG9wID0gLWZvbnRNZXRyaWNzLmFzY2VudCgpIC0gZGlzcGxheUJveC5ib3JkZXJUb3Ao
KSAtIGRpc3BsYXlCb3gucGFkZGluZ1RvcCgpLnZhbHVlT3IoMCk7CisgICAgYXV0byBsb2dpY2Fs
UmVjdCA9IERpc3BsYXk6OlJlY3QgeyBsb2dpY2FsVG9wLCBjb250ZW50TG9naWNhbFJpZ2h0KCks
IGlubGluZUl0ZW0ud2lkdGgoKSwgY29udGFpbmVySGVpZ2h0IH07CisgICAgYXBwZW5kTm9uQnJl
YWthYmxlU3BhY2UoaW5saW5lSXRlbSwgbG9naWNhbFJlY3QpOwogfQogCi1JbmxpbmVGb3JtYXR0
aW5nQ29udGV4dDo6TGluZUxheW91dDo6TGluZUxheW91dChjb25zdCBJbmxpbmVGb3JtYXR0aW5n
Q29udGV4dCYgaW5saW5lRm9ybWF0dGluZ0NvbnRleHQpCi0gICAgOiBtX2Zvcm1hdHRpbmdDb250
ZXh0KGlubGluZUZvcm1hdHRpbmdDb250ZXh0KQotICAgICwgbV9mb3JtYXR0aW5nU3RhdGUobV9m
b3JtYXR0aW5nQ29udGV4dC5mb3JtYXR0aW5nU3RhdGUoKSkKLSAgICAsIG1fZmxvYXRpbmdTdGF0
ZShtX2Zvcm1hdHRpbmdTdGF0ZS5mbG9hdGluZ1N0YXRlKCkpCi0gICAgLCBtX2Zvcm1hdHRpbmdS
b290KGRvd25jYXN0PENvbnRhaW5lcj4obV9mb3JtYXR0aW5nQ29udGV4dC5yb290KCkpKQordm9p
ZCBMaW5lOjphcHBlbmRJbmxpbmVDb250YWluZXJFbmQoY29uc3QgSW5saW5lSXRlbSYgaW5saW5l
SXRlbSkKIHsKKyAgICAvLyBUaGlzIGlzIHJlYWxseSBqdXN0IGEgcGxhY2Vob2xkZXIgdG8gbWFy
ayB0aGUgZW5kIG9mIHRoZSBpbmxpbmUgbGV2ZWwgY29udGFpbmVyLgorICAgIGF1dG8gbG9naWNh
bFJlY3QgPSBEaXNwbGF5OjpSZWN0IHsgMCwgY29udGVudExvZ2ljYWxSaWdodCgpLCBpbmxpbmVJ
dGVtLndpZHRoKCksIDAgfTsKKyAgICBhcHBlbmROb25CcmVha2FibGVTcGFjZShpbmxpbmVJdGVt
LCBsb2dpY2FsUmVjdCk7CiB9CiAKLXN0YXRpYyBib29sIGlzVHJpbW1hYmxlQ29udGVudChjb25z
dCBJbmxpbmVMaW5lQnJlYWtlcjo6UnVuJiBydW4pCit2b2lkIExpbmU6OmFwcGVuZFRleHRDb250
ZW50KGNvbnN0IElubGluZVRleHRJdGVtJiBpbmxpbmVJdGVtLCBMYXlvdXRTaXplIHJ1blNpemUp
CiB7Ci0gICAgcmV0dXJuIHJ1bi5jb250ZW50LmlzV2hpdGVzcGFjZSgpICYmIHJ1bi5jb250ZW50
LnN0eWxlKCkuY29sbGFwc2VXaGl0ZVNwYWNlKCk7CisgICAgYXV0byBpc1RyaW1tYWJsZSA9IGlz
VHJpbW1hYmxlQ29udGVudChpbmxpbmVJdGVtKTsKKyAgICBpZiAoIWlzVHJpbW1hYmxlKQorICAg
ICAgICBtX3RyaW1tYWJsZUNvbnRlbnQuY2xlYXIoKTsKKworICAgIGF1dG8gc2hvdWxkQ29sbGFw
c2VDb21wbGV0ZWx5ID0gWyZdIHsKKyAgICAgICAgaWYgKCFpc1RyaW1tYWJsZSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgLy8gTGVhZGluZyB3aGl0ZXNwYWNlLgorICAgICAg
ICBpZiAobV9saW5lSXRlbXMuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIC8vIENoZWNrIGlmIHRoZSBsYXN0IGl0ZW0gaXMgdHJpbW1hYmxlIGFzIHdlbGwuCisg
ICAgICAgIGZvciAoaW50IGluZGV4ID0gbV9saW5lSXRlbXMuc2l6ZSgpIC0gMTsgaW5kZXggPj0g
MDsgLS1pbmRleCkgeworICAgICAgICAgICAgYXV0byYgaW5saW5lSXRlbSA9IG1fbGluZUl0ZW1z
W2luZGV4XS0+aW5saW5lSXRlbTsKKyAgICAgICAgICAgIGlmIChpbmxpbmVJdGVtLmlzQm94KCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKGlubGluZUl0
ZW0uaXNUZXh0KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGlubGluZUl0ZW0uaXNUZXh0KCkg
JiYgaXNUcmltbWFibGVDb250ZW50KGRvd25jYXN0PElubGluZVRleHRJdGVtPihpbmxpbmVJdGVt
KSk7CisgICAgICAgICAgICBBU1NFUlQoaW5saW5lSXRlbS5pc0NvbnRhaW5lclN0YXJ0KCkgfHwg
aW5saW5lSXRlbS5pc0NvbnRhaW5lckVuZCgpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9OworCisgICAgLy8gQ29sbGFwc2VkIGxpbmUgaXRlbXMgZG9uJ3QgY29udHJp
YnV0ZSB0byB0aGUgbGluZSB3aWR0aC4KKyAgICBhdXRvIGlzQ29tcGxldGVseUNvbGxhcHNlZCA9
IHNob3VsZENvbGxhcHNlQ29tcGxldGVseSgpOworICAgIGF1dG8gY2FuQmVFeHRlbmRlZCA9ICFp
c0NvbXBsZXRlbHlDb2xsYXBzZWQgJiYgIWlubGluZUl0ZW0uaXNDb2xsYXBzZWQoKTsKKyAgICBh
dXRvIGxvZ2ljYWxSZWN0ID0gRGlzcGxheTo6UmVjdCB7IC1pbmxpbmVJdGVtLnN0eWxlKCkuZm9u
dE1ldHJpY3MoKS5hc2NlbnQoKSwgY29udGVudExvZ2ljYWxSaWdodCgpLCBydW5TaXplLndpZHRo
KCksIHJ1blNpemUuaGVpZ2h0KCkgfTsKKyAgICBhdXRvIHRleHRDb250ZXh0ID0gRGlzcGxheTo6
UnVuOjpUZXh0Q29udGV4dCB7IGlubGluZUl0ZW0uc3RhcnQoKSwgaW5saW5lSXRlbS5pc0NvbGxh
cHNlZCgpID8gMSA6IGlubGluZUl0ZW0ubGVuZ3RoKCkgfTsKKyAgICBhdXRvIGRpc3BsYXlSdW4g
PSBEaXNwbGF5OjpSdW4obG9naWNhbFJlY3QsIHRleHRDb250ZXh0KTsKKworICAgIGF1dG8gbGlu
ZUl0ZW0gPSBzdGQ6Om1ha2VfdW5pcXVlPExpbmVJdGVtPihkaXNwbGF5UnVuLCBpbmxpbmVJdGVt
LCBpc0NvbXBsZXRlbHlDb2xsYXBzZWQsIGNhbkJlRXh0ZW5kZWQpOworICAgIGlmIChpc1RyaW1t
YWJsZSkgCisgICAgICAgIG1fdHJpbW1hYmxlQ29udGVudC5hZGQobGluZUl0ZW0uZ2V0KCkpOwor
CisgICAgbV9saW5lSXRlbXMuYXBwZW5kKFdURk1vdmUobGluZUl0ZW0pKTsKKyAgICBtX2NvbnRl
bnRMb2dpY2FsV2lkdGggKz0gaXNDb21wbGV0ZWx5Q29sbGFwc2VkID8gTGF5b3V0VW5pdCgpIDog
cnVuU2l6ZS53aWR0aCgpOwogfQogCi12b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5l
TGF5b3V0OjpsYXlvdXQoY29uc3QgSW5saW5lUnVuUHJvdmlkZXImIGlubGluZVJ1blByb3ZpZGVy
KSBjb25zdAordm9pZCBMaW5lOjphcHBlbmROb25SZXBsYWNlZElubGluZUJveChjb25zdCBJbmxp
bmVJdGVtJiBpbmxpbmVJdGVtLCBMYXlvdXRTaXplIHJ1blNpemUpCiB7Ci0gICAgYXV0byYgbGF5
b3V0U3RhdGUgPSBtX2Zvcm1hdHRpbmdDb250ZXh0LmxheW91dFN0YXRlKCk7Ci0gICAgYXV0byBm
bG9hdGluZ0NvbnRleHQgPSBGbG9hdGluZ0NvbnRleHQgeyBtX2Zsb2F0aW5nU3RhdGUgfTsKLQot
ICAgIExpbmUgbGluZTsKLSAgICBpbml0aWFsaXplTmV3TGluZShsaW5lKTsKKyAgICBhdXRvIGFs
aWduQW5kQWRqdXN0TGluZUhlaWdodCA9IFsmXSB7CisgICAgICAgIGF1dG8gaW5saW5lQm94SGVp
Z2h0ID0gcnVuU2l6ZS5oZWlnaHQoKTsKKyAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gbG9v
ayBpbnNpZGUgdGhlIGlubGluZS1ibG9jaydzIGZvcm1hdHRpbmcgY29udGV4dCBhbmQgY2hlY2sg
dGhlIGxpbmVib3hlcyAoaWYgYW55KSB0byBiZSBhYmxlIHRvIGJhc2VsaW5lIGFsaWduLgorICAg
ICAgICBpZiAoaW5saW5lSXRlbS5sYXlvdXRCb3goKS5lc3RhYmxpc2hlc0lubGluZUZvcm1hdHRp
bmdDb250ZXh0KCkpIHsKKyAgICAgICAgICAgIGlmIChpbmxpbmVCb3hIZWlnaHQgPT0gbG9naWNh
bEhlaWdodCgpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIC8vIEZJWE1F
OiBUaGlzIGZhaWxzIHdoZW4gdGhlIGxpbmUgaGVpZ2h0IGRpZmZlcmVuY2UgY29tZXMgZnJvbSBm
b250LXNpemUgZGlmZi4gCisgICAgICAgICAgICBtX2xvZ2ljYWxIZWlnaHQuZGVwdGggPSBzdGQ6
Om1heDxMYXlvdXRVbml0PigwLCBtX2xvZ2ljYWxIZWlnaHQuZGVwdGgpOworICAgICAgICAgICAg
bV9sb2dpY2FsSGVpZ2h0LmhlaWdodCA9IHN0ZDo6bWF4KGlubGluZUJveEhlaWdodCwgbV9sb2dp
Y2FsSGVpZ2h0LmhlaWdodCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgLy8gMCBkZXNjZW50IC0+IGJhc2VsaW5lIGFsaWdtZW50IGZvciBub3cuCisgICAgICAgIG1f
bG9naWNhbEhlaWdodC5kZXB0aCA9IHN0ZDo6bWF4PExheW91dFVuaXQ+KDAsIG1fbG9naWNhbEhl
aWdodC5kZXB0aCk7CisgICAgICAgIG1fbG9naWNhbEhlaWdodC5oZWlnaHQgPSBzdGQ6Om1heChp
bmxpbmVCb3hIZWlnaHQsIG1fbG9naWNhbEhlaWdodC5oZWlnaHQpOworICAgIH07CiAKLSAgICBJ
bmxpbmVMaW5lQnJlYWtlciBsaW5lQnJlYWtlcihsYXlvdXRTdGF0ZSwgbV9mb3JtYXR0aW5nU3Rh
dGUuaW5saW5lQ29udGVudCgpLCBpbmxpbmVSdW5Qcm92aWRlci5ydW5zKCkpOwotICAgIHdoaWxl
IChhdXRvIHJ1biA9IGxpbmVCcmVha2VyLm5leHRSdW4obGluZS5jb250ZW50TG9naWNhbFJpZ2h0
KCksIGxpbmUuYXZhaWxhYmxlV2lkdGgoKSwgIWxpbmUuaGFzQ29udGVudCgpKSkgewotICAgICAg
ICBhdXRvIGlzRmlyc3RSdW4gPSBydW4tPnBvc2l0aW9uID09IElubGluZUxpbmVCcmVha2VyOjpS
dW46OlBvc2l0aW9uOjpMaW5lQmVnaW47Ci0gICAgICAgIGF1dG8gaXNMYXN0UnVuID0gcnVuLT5w
b3NpdGlvbiA9PSBJbmxpbmVMaW5lQnJlYWtlcjo6UnVuOjpQb3NpdGlvbjo6TGluZUVuZDsKLSAg
ICAgICAgYXV0byBnZW5lcmF0ZXNJbmxpbmVSdW4gPSB0cnVlOworICAgIGFsaWduQW5kQWRqdXN0
TGluZUhlaWdodCgpOworICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBtX2xheW91dFN0YXRlLmRpc3Bs
YXlCb3hGb3JMYXlvdXRCb3goaW5saW5lSXRlbS5sYXlvdXRCb3goKSk7CisgICAgYXV0byBsb2dp
Y2FsVG9wID0gLXJ1blNpemUuaGVpZ2h0KCk7CisgICAgYXV0byBob3Jpem9udGFsTWFyZ2luID0g
ZGlzcGxheUJveC5ob3Jpem9udGFsTWFyZ2luKCk7CisgICAgYXV0byBsb2dpY2FsUmVjdCA9IERp
c3BsYXk6OlJlY3QgeyBsb2dpY2FsVG9wLCBjb250ZW50TG9naWNhbFJpZ2h0KCkgKyBob3Jpem9u
dGFsTWFyZ2luLnN0YXJ0LCBydW5TaXplLndpZHRoKCksIHJ1blNpemUuaGVpZ2h0KCkgfTsKIAot
ICAgICAgICAvLyBQb3NpdGlvbiBmbG9hdCBhbmQgYWRqdXN0IHRoZSBydW5zIG9uIGxpbmUuCi0g
ICAgICAgIGlmIChydW4tPmNvbnRlbnQuaXNGbG9hdCgpKSB7Ci0gICAgICAgICAgICBhdXRvJiBm
bG9hdEJveCA9IHJ1bi0+Y29udGVudC5pbmxpbmVJdGVtKCkubGF5b3V0Qm94KCk7Ci0gICAgICAg
ICAgICBjb21wdXRlRmxvYXRQb3NpdGlvbihmbG9hdGluZ0NvbnRleHQsIGxpbmUsIGZsb2F0Qm94
KTsKLSAgICAgICAgICAgIG1fZmxvYXRpbmdTdGF0ZS5hcHBlbmQoZmxvYXRCb3gpOworICAgIG1f
bGluZUl0ZW1zLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPExpbmVJdGVtPihEaXNwbGF5OjpSdW4g
eyBsb2dpY2FsUmVjdCB9LCBpbmxpbmVJdGVtLCBmYWxzZSwgZmFsc2UpKTsKKyAgICBtX2NvbnRl
bnRMb2dpY2FsV2lkdGggKz0gKHJ1blNpemUud2lkdGgoKSArIGhvcml6b250YWxNYXJnaW4uc3Rh
cnQgKyBob3Jpem9udGFsTWFyZ2luLmVuZCk7CisgICAgbV90cmltbWFibGVDb250ZW50LmNsZWFy
KCk7Cit9CiAKLSAgICAgICAgICAgIGF1dG8gZmxvYXRCb3hXaWR0aCA9IGxheW91dFN0YXRlLmRp
c3BsYXlCb3hGb3JMYXlvdXRCb3goZmxvYXRCb3gpLm1hcmdpbkJveCgpLndpZHRoKCk7Ci0gICAg
ICAgICAgICAvLyBTaHJpbmsgYXZhaWxibGUgc3BhY2UgZm9yIGN1cnJlbnQgbGluZSBhbmQgbW92
ZSBleGlzdGluZyBpbmxpbmUgcnVucy4KLSAgICAgICAgICAgIGZsb2F0Qm94LmlzTGVmdEZsb2F0
aW5nUG9zaXRpb25lZCgpID8gbGluZS5hZGp1c3RMb2dpY2FsTGVmdChmbG9hdEJveFdpZHRoKSA6
IGxpbmUuYWRqdXN0TG9naWNhbFJpZ2h0KGZsb2F0Qm94V2lkdGgpOwordm9pZCBMaW5lOjphcHBl
bmRSZXBsYWNlZElubGluZUJveChjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtLCBMYXlvdXRT
aXplIHJ1blNpemUpCit7CisgICAgLy8gRklYTUUgU3VyZWx5IHJlcGxhY2VkIGJveGVzIGJlaGF2
ZSBkaWZmZXJlbnRseS4KKyAgICBhcHBlbmROb25SZXBsYWNlZElubGluZUJveChpbmxpbmVJdGVt
LCBydW5TaXplKTsKK30KIAotICAgICAgICAgICAgZ2VuZXJhdGVzSW5saW5lUnVuID0gZmFsc2U7
Ci0gICAgICAgIH0KK3ZvaWQgTGluZTo6YXBwZW5kSGFyZExpbmVCcmVhayhjb25zdCBJbmxpbmVJ
dGVtJiBpbmxpbmVJdGVtKQoreworICAgIGF1dG8gYXNjZW50ID0gaW5saW5lSXRlbS5sYXlvdXRC
b3goKS5zdHlsZSgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCk7IAorICAgIGF1dG8gbG9naWNhbFJl
Y3QgPSBEaXNwbGF5OjpSZWN0IHsgLWFzY2VudCwgY29udGVudExvZ2ljYWxSaWdodCgpLCB7IH0s
IGxvZ2ljYWxIZWlnaHQoKSB9OworICAgIG1fbGluZUl0ZW1zLmFwcGVuZChzdGQ6Om1ha2VfdW5p
cXVlPExpbmVJdGVtPihEaXNwbGF5OjpSdW4geyBsb2dpY2FsUmVjdCB9LCBpbmxpbmVJdGVtLCBm
YWxzZSwgZmFsc2UpKTsKK30KIAotICAgICAgICAvLyAxLiBJbml0aWFsaXplIG5ldyBsaW5lIGlm
IG5lZWRlZC4KLSAgICAgICAgLy8gMi4gQXBwZW5kIGlubGluZSBydW4gdW5sZXNzIGl0IGlzIHNr
aXBwZWQuCi0gICAgICAgIC8vIDMuIENsb3NlIGN1cnJlbnQgbGluZSBpZiBuZWVkZWQuCi0gICAg
ICAgIGlmIChpc0ZpcnN0UnVuKSB7Ci0gICAgICAgICAgICAvLyBXaGVuIHRoZSBmaXJzdCBydW4g
ZG9lcyBub3QgZ2VuZXJhdGUgYW4gYWN0dWFsIGlubGluZSBydW4sIHRoZSBuZXh0IHJ1biBjb21l
cyBpbiBmaXJzdC1ydW4gYXMgd2VsbC4KLSAgICAgICAgICAgIC8vIE5vIG5lZWQgdG8gc3BlbmQg
dGltZSBvbiBjbG9zaW5nL2luaXRpYWxpemluZy4KLSAgICAgICAgICAgIC8vIFNraXAgbGVhZGlu
ZyB3aGl0ZXNwYWNlLgotICAgICAgICAgICAgaWYgKCFnZW5lcmF0ZXNJbmxpbmVSdW4gfHwgaXNU
cmltbWFibGVDb250ZW50KCpydW4pKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOworc3RydWN0
IFVuY29tbWl0dGVkQ29udGVudCB7CisgICAgdm9pZCBhZGQoSW5saW5lSXRlbSYpOworICAgIHZv
aWQgcmVzZXQoKTsKIAotICAgICAgICAgICAgaWYgKGxpbmUuaGFzQ29udGVudCgpKSB7Ci0gICAg
ICAgICAgICAgICAgLy8gUHJldmlvdXMgcnVuIGVuZGVkIHVwIGJlaW5nIGF0IHRoZSBsaW5lIGVu
ZC4gQWRqdXN0IHRoZSBsaW5lIGFjY29yZGluZ2x5LgotICAgICAgICAgICAgICAgIGlmICghbGlu
ZS5pc0Nsb3NlZCgpKQotICAgICAgICAgICAgICAgICAgICBjbG9zZUxpbmUobGluZSwgSXNMYXN0
TGluZTo6Tm8pOwotICAgICAgICAgICAgICAgIGluaXRpYWxpemVOZXdMaW5lKGxpbmUpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9CisgICAgVmVjdG9yPElubGluZUl0ZW0qPiBpbmxpbmVJdGVt
cygpIHsgcmV0dXJuIG1faW5saW5lSXRlbXM7IH0KKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7
IHJldHVybiBtX2lubGluZUl0ZW1zLmlzRW1wdHkoKTsgfQorICAgIExheW91dFVuaXQgd2lkdGgo
KSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9CiAKLSAgICAgICAgaWYgKGdlbmVyYXRlc0lubGlu
ZVJ1bikgewotICAgICAgICAgICAgYXV0byB3aWR0aCA9IHJ1bi0+d2lkdGg7Ci0gICAgICAgICAg
ICBhdXRvIGhlaWdodCA9IHJ1bi0+Y29udGVudC5pc1RleHQoKSA/IExheW91dFVuaXQobV9mb3Jt
YXR0aW5nUm9vdC5zdHlsZSgpLmNvbXB1dGVkTGluZUhlaWdodCgpKSA6IGxheW91dFN0YXRlLmRp
c3BsYXlCb3hGb3JMYXlvdXRCb3gocnVuLT5jb250ZW50LmlubGluZUl0ZW0oKS5sYXlvdXRCb3go
KSkuaGVpZ2h0KCk7IAotICAgICAgICAgICAgYXBwZW5kQ29udGVudFRvTGluZShsaW5lLCBydW4t
PmNvbnRlbnQsIHsgd2lkdGgsIGhlaWdodCB9KTsKLSAgICAgICAgfQorcHJpdmF0ZToKKyAgICBW
ZWN0b3I8SW5saW5lSXRlbSo+IG1faW5saW5lSXRlbXM7CisgICAgTGF5b3V0VW5pdCBtX3dpZHRo
OworfTsKIAotICAgICAgICBpZiAoaXNMYXN0UnVuKQotICAgICAgICAgICAgY2xvc2VMaW5lKGxp
bmUsIElzTGFzdExpbmU6Ok5vKTsKLSAgICB9Cit2b2lkIFVuY29tbWl0dGVkQ29udGVudDo6YWRk
KElubGluZUl0ZW0mIGlubGluZUl0ZW0pCit7CisgICAgbV9pbmxpbmVJdGVtcy5hcHBlbmQoJmlu
bGluZUl0ZW0pOworICAgIG1fd2lkdGggKz0gaW5saW5lSXRlbS53aWR0aCgpOworfQogCi0gICAg
Y2xvc2VMaW5lKGxpbmUsIElzTGFzdExpbmU6Olllcyk7Cit2b2lkIFVuY29tbWl0dGVkQ29udGVu
dDo6cmVzZXQoKQoreworICAgIG1faW5saW5lSXRlbXMuY2xlYXIoKTsKKyAgICBtX3dpZHRoID0g
MDsKIH0KIAotdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6aW5pdGlh
bGl6ZU5ld0xpbmUoTGluZSYgbGluZSkgY29uc3QKK0lubGluZUZvcm1hdHRpbmdDb250ZXh0OjpM
aW5lTGF5b3V0OjpMaW5lTGF5b3V0KGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBpbmxp
bmVGb3JtYXR0aW5nQ29udGV4dCkKKyAgICA6IG1fZm9ybWF0dGluZ0NvbnRleHQoaW5saW5lRm9y
bWF0dGluZ0NvbnRleHQpCisgICAgLCBtX2Zvcm1hdHRpbmdTdGF0ZShtX2Zvcm1hdHRpbmdDb250
ZXh0LmZvcm1hdHRpbmdTdGF0ZSgpKQorICAgICwgbV9mbG9hdGluZ1N0YXRlKG1fZm9ybWF0dGlu
Z1N0YXRlLmZsb2F0aW5nU3RhdGUoKSkKKyAgICAsIG1fZm9ybWF0dGluZ1Jvb3QoZG93bmNhc3Q8
Q29udGFpbmVyPihtX2Zvcm1hdHRpbmdDb250ZXh0LnJvb3QoKSkpCiB7Ci0gICAgYXV0byYgZm9y
bWF0dGluZ1Jvb3REaXNwbGF5Qm94ID0gbV9mb3JtYXR0aW5nQ29udGV4dC5sYXlvdXRTdGF0ZSgp
LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobV9mb3JtYXR0aW5nUm9vdCk7Cit9CiAKK3ZvaWQgSW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OmluaXRpYWxpemVMaW5lKExpbmUmIGxp
bmUsIExheW91dFVuaXQgbGluZUxvZ2ljYWxUb3ApIGNvbnN0Cit7CisgICAgYXV0byYgZm9ybWF0
dGluZ1Jvb3REaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUoKS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94
KG1fZm9ybWF0dGluZ1Jvb3QpOwogICAgIGF1dG8gbGluZUxvZ2ljYWxMZWZ0ID0gZm9ybWF0dGlu
Z1Jvb3REaXNwbGF5Qm94LmNvbnRlbnRCb3hMZWZ0KCk7Ci0gICAgYXV0byBsaW5lTG9naWNhbFRv
cCA9IGxpbmUuaXNGaXJzdExpbmUoKSA/IGZvcm1hdHRpbmdSb290RGlzcGxheUJveC5jb250ZW50
Qm94VG9wKCkgOiBsaW5lLmxvZ2ljYWxCb3R0b20oKTsKICAgICBhdXRvIGF2YWlsYWJsZVdpZHRo
ID0gZm9ybWF0dGluZ1Jvb3REaXNwbGF5Qm94LmNvbnRlbnRCb3hXaWR0aCgpOwogCiAgICAgLy8g
Q2hlY2sgZm9yIGludHJ1ZGluZyBmbG9hdHMgYW5kIGFkanVzdCBsb2dpY2FsIGxlZnQvYXZhaWxh
YmxlIHdpZHRoIGZvciB0aGlzIGxpbmUgYWNjb3JkaW5nbHkuCkBAIC0yOTEsMzE0ICszOTMsMjM5
IEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OmluaXRpYWxpemVO
ZXdMaW5lKExpbmUmIGxpbmUpIGNvbnN0CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBsaW5lLmlu
aXQoeyBsaW5lTG9naWNhbExlZnQsIGxpbmVMb2dpY2FsVG9wIH0sIGF2YWlsYWJsZVdpZHRoLCBt
X2Zvcm1hdHRpbmdSb290LnN0eWxlKCkuY29tcHV0ZWRMaW5lSGVpZ2h0KCkpOworICAgIGF1dG8m
IGZvcm1hdHRpbmdSb290U3R5bGUgPSBtX2Zvcm1hdHRpbmdSb290LnN0eWxlKCk7CisgICAgYXV0
byBtaW1pbXVtTGluZUhlaWdodCA9IGZvcm1hdHRpbmdSb290U3R5bGUuY29tcHV0ZWRMaW5lSGVp
Z2h0KCk7CisgICAgYXV0byBiYXNlbGluZU9mZnNldCA9IGhhbGZMZWFkaW5nTWV0cmljcyhmb3Jt
YXR0aW5nUm9vdFN0eWxlLmZvbnRNZXRyaWNzKCksIG1pbWltdW1MaW5lSGVpZ2h0KS5oZWlnaHQ7
CisgICAgbGluZS5yZXNldCh7IGxpbmVMb2dpY2FsTGVmdCwgbGluZUxvZ2ljYWxUb3AgfSwgYXZh
aWxhYmxlV2lkdGgsIG1pbWltdW1MaW5lSGVpZ2h0LCBiYXNlbGluZU9mZnNldCk7CiB9CiAKLXZv
aWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OnNwbGl0SW5saW5lUnVuSWZO
ZWVkZWQoY29uc3QgSW5saW5lUnVuJiBpbmxpbmVSdW4sIElubGluZVJ1bnMmIHNwbGl0UnVucykg
Y29uc3QKK3ZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OmxheW91dCgp
IGNvbnN0CiB7Ci0gICAgQVNTRVJUKGlubGluZVJ1bi50ZXh0Q29udGV4dCgpKTsKLSAgICBBU1NF
UlQoaW5saW5lUnVuLm92ZXJsYXBzTXVsdGlwbGVJbmxpbmVJdGVtcygpKTsKLSAgICAvLyBJbiBj
ZXJ0YWluIGNhc2VzLCBhIHJ1biBjYW4gb3ZlcmxhcCBtdWx0aXBsZSBpbmxpbmUgZWxlbWVudHMg
bGlrZSB0aGlzOgotICAgIC8vIDxzcGFuPm5vcm1hbCB0ZXh0IGNvbnRlbnQ8L3NwYW4+PHNwYW4g
c3R5bGU9InBvc2l0aW9uOiByZWxhdGl2ZTsgbGVmdDogMTBweDsiPmJ1dCB0aGlzIG9uZSBuZWVk
cyBhIGRlZGljYXRlZCBydW48L3NwYW4+PHNwYW4+ZW5kIG9mIHRleHQ8L3NwYW4+Ci0gICAgLy8g
VGhlIGNvbnRlbnQgYWJvdmUgZ2VuZXJhdGVzIG9uZSBsb25nIHJ1biA8bm9ybWFsIHRleHQgY29u
dGVudGJ1dCB0aGlzIG9uZSBuZWVkcyBkZWRpY2F0ZWQgcnVuZW5kIG9mIHRleHQ+Ci0gICAgLy8g
SG93ZXZlciwgc2luY2UgdGhlIG1pZGRsZSBydW4gaXMgcG9zaXRpb25lZCwgaXQgbmVlZHMgdG8g
YmUgbW92ZWQgaW5kZXBlbmRlbnRseSBmcm9tIHRoZSByZXN0IG9mIHRoZSBjb250ZW50LCBoZW5j
ZSBpdCBuZWVkcyBhIGRlZGljYXRlZCBpbmxpbmUgcnVuLgotCi0gICAgLy8gMS4gU3RhcnQgd2l0
aCB0aGUgZmlyc3QgaW5saW5lIGl0ZW0gKGVsZW1lbnQpIGFuZCB0cmF2ZXJzIHRoZSBsaXN0IHVu
dGlsCi0gICAgLy8gMi4gZWl0aGVyIGZpbmQgYW4gaW5saW5lIGl0ZW0gdGhhdCBuZWVkcyBhIGRl
ZGljYXRlZCBydW4gb3Igd2UgcmVhY2ggdGhlIGVuZCBvZiB0aGUgcnVuCi0gICAgLy8gMy4gQ3Jl
YXRlIGRlZGljYXRlIGlubGluZSBydW5zLgotICAgIGF1dG8mIGlubGluZUNvbnRlbnQgPSBtX2Zv
cm1hdHRpbmdTdGF0ZS5pbmxpbmVDb250ZW50KCk7Ci0gICAgYXV0byBjb250ZW50U3RhcnQgPSBp
bmxpbmVSdW4ubG9naWNhbExlZnQoKTsKLSAgICBhdXRvIHN0YXJ0UG9zaXRpb24gPSBpbmxpbmVS
dW4udGV4dENvbnRleHQoKS0+c3RhcnQoKTsKLSAgICBhdXRvIHJlbWFuaW5nTGVuZ3RoID0gaW5s
aW5lUnVuLnRleHRDb250ZXh0KCktPmxlbmd0aCgpOwotCi0gICAgc3RydWN0IFVuY29tbWl0dGVk
IHsKLSAgICAgICAgY29uc3QgSW5saW5lSXRlbSogZmlyc3RJbmxpbmVJdGVtIHsgbnVsbHB0ciB9
OwotICAgICAgICBjb25zdCBJbmxpbmVJdGVtKiBsYXN0SW5saW5lSXRlbSB7IG51bGxwdHIgfTsK
LSAgICAgICAgdW5zaWduZWQgbGVuZ3RoIHsgMCB9OwotICAgIH07Ci0gICAgT3B0aW9uYWw8VW5j
b21taXR0ZWQ+IHVuY29tbWl0dGVkOwotCi0gICAgYXV0byBjb21taXQgPSBbJl0gewotICAgICAg
ICBpZiAoIXVuY29tbWl0dGVkKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGNvbnRl
bnRTdGFydCArPSB1bmNvbW1pdHRlZC0+Zmlyc3RJbmxpbmVJdGVtLT5ub25CcmVha2FibGVTdGFy
dCgpOwotCi0gICAgICAgIGF1dG8gcnVuV2lkdGggPSB0aGlzLT5ydW5XaWR0aChpbmxpbmVDb250
ZW50LCAqdW5jb21taXR0ZWQtPmZpcnN0SW5saW5lSXRlbSwgc3RhcnRQb3NpdGlvbiwgdW5jb21t
aXR0ZWQtPmxlbmd0aCwgY29udGVudFN0YXJ0KTsKLSAgICAgICAgYXV0byBydW4gPSBJbmxpbmVS
dW4geyB7IGlubGluZVJ1bi5sb2dpY2FsVG9wKCksIGNvbnRlbnRTdGFydCwgcnVuV2lkdGgsIGlu
bGluZVJ1bi5sb2dpY2FsSGVpZ2h0KCkgfSwgKnVuY29tbWl0dGVkLT5maXJzdElubGluZUl0ZW0g
fTsKLSAgICAgICAgcnVuLnNldFRleHRDb250ZXh0KHsgc3RhcnRQb3NpdGlvbiwgdW5jb21taXR0
ZWQtPmxlbmd0aCB9KTsKLSAgICAgICAgc3BsaXRSdW5zLmFwcGVuZChydW4pOwotCi0gICAgICAg
IGNvbnRlbnRTdGFydCArPSBydW5XaWR0aCArIHVuY29tbWl0dGVkLT5sYXN0SW5saW5lSXRlbS0+
bm9uQnJlYWthYmxlRW5kKCk7Ci0KLSAgICAgICAgc3RhcnRQb3NpdGlvbiA9IDA7Ci0gICAgICAg
IHVuY29tbWl0dGVkID0geyB9OworICAgIGF1dG8gZmxvYXRpbmdDb250ZXh0ID0gRmxvYXRpbmdD
b250ZXh0IHsgbV9mbG9hdGluZ1N0YXRlIH07CisgICAgTGluZSBsaW5lKGxheW91dFN0YXRlKCkp
OworICAgIGluaXRpYWxpemVMaW5lKGxpbmUsIGxheW91dFN0YXRlKCkuZGlzcGxheUJveEZvckxh
eW91dEJveChtX2Zvcm1hdHRpbmdSb290KS5jb250ZW50Qm94VG9wKCkpOworCisgICAgVW5jb21t
aXR0ZWRDb250ZW50IHVuY29tbWl0dGVkQ29udGVudDsKKyAgICBhdXRvIGNvbW1pdFBlbmRpbmdD
b250ZW50ID0gWyZdIHsKKyAgICAgICAgZm9yIChhdXRvKiB1bmNvbW1pdHRlZCA6IHVuY29tbWl0
dGVkQ29udGVudC5pbmxpbmVJdGVtcygpKQorICAgICAgICAgICAgY29tbWl0SW5saW5lSXRlbVRv
TGluZShsaW5lLCAqdW5jb21taXR0ZWQpOworICAgICAgICB1bmNvbW1pdHRlZENvbnRlbnQucmVz
ZXQoKTsKICAgICB9OwogCi0gICAgZm9yIChhdXRvIGl0ZXJhdG9yID0gaW5saW5lQ29udGVudC5m
aW5kKGNvbnN0X2Nhc3Q8SW5saW5lSXRlbSo+KCZpbmxpbmVSdW4uaW5saW5lSXRlbSgpKSk7IGl0
ZXJhdG9yICE9IGlubGluZUNvbnRlbnQuZW5kKCkgJiYgcmVtYW5pbmdMZW5ndGggPiAwOyArK2l0
ZXJhdG9yKSB7Ci0gICAgICAgIGF1dG8mIGlubGluZUl0ZW0gPSAqKml0ZXJhdG9yOworICAgIExp
bmVCcmVha2VyIGxpbmVCcmVha2VyKGxheW91dFN0YXRlKCkpOworICAgIGF1dG8mIGlubGluZUNv
bnRlbnQgPSBtX2Zvcm1hdHRpbmdTdGF0ZS5pbmxpbmVJdGVtcygpOworICAgIGZvciAoYXV0byYg
aW5saW5lSXRlbSA6IGlubGluZUNvbnRlbnQpIHsKKyAgICAgICAgLy8gSXRlcmF0ZSB0aHJvdWdo
IHRoZSBpbmxpbmUgY29udGVudCBhbmQgdHJ5IHRvIHB1dCB0aGUgaW5saW5lIGJveGVzIG9uIHRo
ZSBjdXJyZW50IGxpbmUuCisgICAgICAgIGlmIChpbmxpbmVJdGVtLT5pc0hhcmRMaW5lQnJlYWso
KSkgeworICAgICAgICAgICAgLy8gQ2xvc2UgdGhlIGN1cnJlbnQgbGluZSB0aGVuIGNyZWF0ZSBh
bmQgaW1tZWRpYXRlbHkgY2xvc2UgYW5vdGhlciBvbmUuCisgICAgICAgICAgICBjb21taXRQZW5k
aW5nQ29udGVudCgpOworICAgICAgICAgICAgY29tbWl0SW5saW5lSXRlbVRvTGluZShsaW5lLCAq
aW5saW5lSXRlbSk7CisgICAgICAgICAgICBjbG9zZUxpbmUobGluZSk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBhdXRvIGF2YWlsYWJsZVdpZHRoID0gbGluZS5hdmFpbGFibGVXaWR0
aCgpIC0gdW5jb21taXR0ZWRDb250ZW50LndpZHRoKCk7CisgICAgICAgICAgICBhdXRvIGN1cnJl
bnRMb2dpY2FsUmlnaHQgPSBsaW5lLmNvbnRlbnRMb2dpY2FsUmlnaHQoKSArIHVuY29tbWl0dGVk
Q29udGVudC53aWR0aCgpOworICAgICAgICAgICAgLy8gRklYTUU6IEVuc3VyZSBMaW5lQ29udGV4
dDo6dHJpbW1hYmxlV2lkdGggaW5jbHVkZXMgdW5jb21taXR0ZWQgY29udGVudCBpZiBuZWVkZWQu
CisgICAgICAgICAgICBhdXRvIGJyZWFraW5nQ29udGV4dCA9IGxpbmVCcmVha2VyLmJyZWFraW5n
Q29udGV4dCgqaW5saW5lSXRlbSwgeyBhdmFpbGFibGVXaWR0aCwgY3VycmVudExvZ2ljYWxSaWdo
dCwgbGluZS50cmFpbGluZ1RyaW1tYWJsZVdpZHRoKCksICFsaW5lLmhhc0NvbnRlbnQoKSB9KTsK
KyAgICAgICAgICAgIGlmIChicmVha2luZ0NvbnRleHQuaXNBdEJyZWFraW5nT3Bwb3J0dW5pdHkp
CisgICAgICAgICAgICAgICAgY29tbWl0UGVuZGluZ0NvbnRlbnQoKTsKKworICAgICAgICAgICAg
aWYgKGJyZWFraW5nQ29udGV4dC5icmVha2luZ0JlaGF2aW9yID09IExpbmVCcmVha2VyOjpCcmVh
a2luZ0JlaGF2aW9yOjpCcmVhaykgeworICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfSU1QTEVN
RU5URURfWUVUKCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CiAK
LSAgICAgICAgLy8gU2tpcCBhbGwgbm9uLWluZmxvdyBib3hlcyAoZmxvYXRzLCBvdXQtb2YtZmxv
dyBwb3NpdGlvbmVkIGVsZW1lbnRzKS4gVGhleSBkb24ndCBwYXJ0aWNpcGF0ZSBpbiB0aGUgaW5s
aW5lIHJ1biBjb250ZXh0LgotICAgICAgICBpZiAoIWlubGluZUl0ZW0ubGF5b3V0Qm94KCkuaXNJ
bkZsb3coKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKGJyZWFraW5n
Q29udGV4dC5icmVha2luZ0JlaGF2aW9yID09IExpbmVCcmVha2VyOjpCcmVha2luZ0JlaGF2aW9y
OjpXcmFwKQorICAgICAgICAgICAgICAgIGNsb3NlTGluZShsaW5lKTsKIAotICAgICAgICBhdXRv
IGN1cnJlbnRMZW5ndGggPSBbJl0gewotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWluKHJlbWFu
aW5nTGVuZ3RoLCBpbmxpbmVJdGVtLnRleHRDb250ZW50KCkubGVuZ3RoKCkgLSBzdGFydFBvc2l0
aW9uKTsKLSAgICAgICAgfTsKLQotICAgICAgICAvLyAxLiBCcmVhayBiZWZvcmUvYWZ0ZXIgLT4g
cmVxdWlyZXMgZGVkaWNhdGVkIHJ1biAtPiBjb21taXQgd2hhdCB3ZSd2ZSBnb3Qgc28gZmFyIGFu
ZCBhbHNvIGNvbW1pdCB0aGUgY3VycmVudCBpbmxpbmUgZWxlbWVudCBhcyBhIHNlcGFyYXRlIGlu
bGluZSBydW4uCi0gICAgICAgIC8vIDIuIEJyZWFrIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGlu
bGluZSBlbGVtZW50IC0+IGNvbW1pdCB3aGF0IHdlJ3ZlIGdvdCBzbyBmYXIuIEN1cnJlbnQgZWxl
bWVudCBiZWNvbWVzIHRoZSBmaXJzdCB1bmNvbW1pdHRlZC4KLSAgICAgICAgLy8gMy4gQnJlYWsg
YXQgdGhlIGVuZCBvZiB0aGUgaW5saW5lIGVsZW1lbnQgLT4gY29tbWl0IHdoYXQgd2UndmUgZ290
IHNvIGZhciBpbmNsdWRpbmcgdGhlIGN1cnJlbnQgZWxlbWVudC4KLSAgICAgICAgLy8gNC4gSW5s
aW5lIGVsZW1lbnQgZG9lcyBub3QgcmVxdWlyZSBydW4gYnJlYWtpbmcgLT4gYWRkIGN1cnJlbnQg
aW5saW5lIGVsZW1lbnQgdG8gdW5jb21taXR0ZWQuIEp1bXAgdG8gdGhlIG5leHQgZWxlbWVudC4K
LSAgICAgICAgYXV0byBkZXRhY2hpbmdSdWxlcyA9IGlubGluZUl0ZW0uZGV0YWNoaW5nUnVsZXMo
KTsKLQotICAgICAgICAvLyAjMQotICAgICAgICBpZiAoZGV0YWNoaW5nUnVsZXMuY29udGFpbnNB
bGwoeyBJbmxpbmVJdGVtOjpEZXRhY2hpbmdSdWxlOjpCcmVha0F0U3RhcnQsIElubGluZUl0ZW06
OkRldGFjaGluZ1J1bGU6OkJyZWFrQXRFbmQgfSkpIHsKLSAgICAgICAgICAgIGNvbW1pdCgpOwot
ICAgICAgICAgICAgYXV0byBjb250ZW50TGVuZ3RoID0gY3VycmVudExlbmd0aCgpOwotICAgICAg
ICAgICAgdW5jb21taXR0ZWQgPSBVbmNvbW1pdHRlZCB7ICZpbmxpbmVJdGVtLCAmaW5saW5lSXRl
bSwgY29udGVudExlbmd0aCB9OwotICAgICAgICAgICAgcmVtYW5pbmdMZW5ndGggLT0gY29udGVu
dExlbmd0aDsKLSAgICAgICAgICAgIGNvbW1pdCgpOwotICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICBpZiAoaW5saW5lSXRlbS0+aXNGbG9hdCgpKQorICAgICAgICAgICAgICAgIGhh
bmRsZUZsb2F0KGxpbmUsIGZsb2F0aW5nQ29udGV4dCwgKmlubGluZUl0ZW0pOworICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGJyZWFraW5nQ29udGV4dC5pc0F0QnJlYWtp
bmdPcHBvcnR1bml0eSkKKyAgICAgICAgICAgICAgICAgICAgY29tbWl0SW5saW5lSXRlbVRvTGlu
ZShsaW5lLCAqaW5saW5lSXRlbSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICAgICB1bmNvbW1pdHRlZENvbnRlbnQuYWRkKCppbmxpbmVJdGVtKTsKKyAgICAgICAgICAg
IH0KICAgICAgICAgfQotCi0gICAgICAgIC8vICMyCi0gICAgICAgIGlmIChkZXRhY2hpbmdSdWxl
cy5jb250YWlucyhJbmxpbmVJdGVtOjpEZXRhY2hpbmdSdWxlOjpCcmVha0F0U3RhcnQpKQotICAg
ICAgICAgICAgY29tbWl0KCk7Ci0KLSAgICAgICAgLy8gQWRkIGN1cnJlbnQgaW5saW5lIGl0ZW0g
dG8gdW5jb21taXR0ZWQuCi0gICAgICAgIC8vICMzIGFuZCAjNAotICAgICAgICBhdXRvIGNvbnRl
bnRMZW5ndGggPSBjdXJyZW50TGVuZ3RoKCk7Ci0gICAgICAgIGlmICghdW5jb21taXR0ZWQpCi0g
ICAgICAgICAgICB1bmNvbW1pdHRlZCA9IFVuY29tbWl0dGVkIHsgJmlubGluZUl0ZW0sICZpbmxp
bmVJdGVtLCAwIH07Ci0gICAgICAgIHVuY29tbWl0dGVkLT5sZW5ndGggKz0gY29udGVudExlbmd0
aDsKLSAgICAgICAgdW5jb21taXR0ZWQtPmxhc3RJbmxpbmVJdGVtID0gJmlubGluZUl0ZW07Ci0g
ICAgICAgIHJlbWFuaW5nTGVuZ3RoIC09IGNvbnRlbnRMZW5ndGg7Ci0KLSAgICAgICAgLy8gIzMK
LSAgICAgICAgaWYgKGRldGFjaGluZ1J1bGVzLmNvbnRhaW5zKElubGluZUl0ZW06OkRldGFjaGlu
Z1J1bGU6OkJyZWFrQXRFbmQpKQotICAgICAgICAgICAgY29tbWl0KCk7CiAgICAgfQotICAgIC8v
IEVpdGhlciBhbGwgaW5saW5lIGVsZW1lbnRzIG5lZWRlZCBkZWRpY2F0ZWQgcnVucyBvciBuZWl0
aGVyIG9mIHRoZW0uCi0gICAgaWYgKCFyZW1hbmluZ0xlbmd0aCB8fCByZW1hbmluZ0xlbmd0aCA9
PSBpbmxpbmVSdW4udGV4dENvbnRleHQoKS0+bGVuZ3RoKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGNvbW1pdCgpOwotfQotCi12b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5
b3V0OjpjcmVhdGVGaW5hbFJ1bnMoTGluZSYgbGluZSkgY29uc3QKLXsKLSAgICBmb3IgKGF1dG8m
IGlubGluZVJ1biA6IGxpbmUucnVucygpKSB7Ci0gICAgICAgIGlmIChpbmxpbmVSdW4ub3Zlcmxh
cHNNdWx0aXBsZUlubGluZUl0ZW1zKCkpIHsKLSAgICAgICAgICAgIElubGluZVJ1bnMgc3BsaXRS
dW5zOwotICAgICAgICAgICAgc3BsaXRJbmxpbmVSdW5JZk5lZWRlZChpbmxpbmVSdW4sIHNwbGl0
UnVucyk7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIHNwbGl0UnVuIDogc3BsaXRSdW5zKQotICAg
ICAgICAgICAgICAgIG1fZm9ybWF0dGluZ1N0YXRlLmFwcGVuZElubGluZVJ1bihzcGxpdFJ1bik7
Ci0KLSAgICAgICAgICAgIGlmICghc3BsaXRSdW5zLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGF1dG8gZmluYWxSdW4gPSBbJl0gewot
ICAgICAgICAgICAgYXV0byYgaW5saW5lSXRlbSA9IGlubGluZVJ1bi5pbmxpbmVJdGVtKCk7Ci0g
ICAgICAgICAgICBpZiAoaW5saW5lSXRlbS5kZXRhY2hpbmdSdWxlcygpLmlzRW1wdHkoKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gaW5saW5lUnVuOwotCi0gICAgICAgICAgICBJbmxpbmVSdW4g
YWRqdXN0ZWRSdW4gPSBpbmxpbmVSdW47Ci0gICAgICAgICAgICBhdXRvIHdpZHRoID0gaW5saW5l
UnVuLmxvZ2ljYWxXaWR0aCgpIC0gaW5saW5lSXRlbS5ub25CcmVha2FibGVTdGFydCgpIC0gaW5s
aW5lSXRlbS5ub25CcmVha2FibGVFbmQoKTsKLSAgICAgICAgICAgIGFkanVzdGVkUnVuLnNldExv
Z2ljYWxMZWZ0KGlubGluZVJ1bi5sb2dpY2FsTGVmdCgpICsgaW5saW5lSXRlbS5ub25CcmVha2Fi
bGVTdGFydCgpKTsKLSAgICAgICAgICAgIGFkanVzdGVkUnVuLnNldExvZ2ljYWxXaWR0aCh3aWR0
aCk7Ci0gICAgICAgICAgICByZXR1cm4gYWRqdXN0ZWRSdW47Ci0gICAgICAgIH07Ci0KLSAgICAg
ICAgbV9mb3JtYXR0aW5nU3RhdGUuYXBwZW5kSW5saW5lUnVuKGZpbmFsUnVuKCkpOworICAgIC8v
IFByb2Nlc3MgcmVtYWluaW5nIHVuY29tbWl0dGVkIGNvbnRlbnQuCisgICAgaWYgKCF1bmNvbW1p
dHRlZENvbnRlbnQuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmIChsaW5lLmF2YWlsYWJsZVdpZHRo
KCkgPCB1bmNvbW1pdHRlZENvbnRlbnQud2lkdGgoKSkKKyAgICAgICAgICAgIGNsb3NlTGluZShs
aW5lKTsKKyAgICAgICAgY29tbWl0UGVuZGluZ0NvbnRlbnQoKTsKICAgICB9CisgICAgY2xvc2VM
aW5lKGxpbmUpOwogfQogCi12b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0
Ojpwb3N0UHJvY2Vzc0lubGluZVJ1bnMoTGluZSYgbGluZSwgSXNMYXN0TGluZSBpc0xhc3RMaW5l
KSBjb25zdAordm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6Y2xvc2VM
aW5lKExpbmUmIGxpbmUpIGNvbnN0CiB7Ci0gICAgYWxpZ25SdW5zKG1fZm9ybWF0dGluZ1Jvb3Qu
c3R5bGUoKS50ZXh0QWxpZ24oKSwgbGluZSwgaXNMYXN0TGluZSk7Ci0gICAgYXV0byBmaXJzdFJ1
bkluZGV4ID0gbV9mb3JtYXR0aW5nU3RhdGUuaW5saW5lUnVucygpLnNpemUoKTsKLSAgICBjcmVh
dGVGaW5hbFJ1bnMobGluZSk7CisgICAgYXV0byYgbGluZUl0ZW1zID0gbGluZS5jbG9zZSgpOwor
ICAgIGlmIChsaW5lSXRlbXMuaXNFbXB0eSgpKSB7CisgICAgICAgIC8vIFNwZWMgdGVsbHMgdXMg
dG8gY3JlYXRlIGEgemVybyBoZWlnaHQsIGVtcHR5IGxpbmUgYm94LgorICAgICAgICBhdXRvIGxp
bmVCb3ggPSBEaXNwbGF5OjpSZWN0IHsgbGluZS5sb2dpY2FsVG9wKCksIGxpbmUubG9naWNhbExl
ZnQoKSwgMCAsIDAgfTsKKyAgICAgICAgbV9mb3JtYXR0aW5nU3RhdGUuYWRkTGluZUJveCh7IGxp
bmVCb3ggfSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBwbGFjZUluRmxvd1Bvc2l0
aW9uZWRDaGlsZHJlbihmaXJzdFJ1bkluZGV4KTsKLX0KKyAgICBhdXRvJiBpbmxpbmVEaXNwbGF5
UnVucyA9IG1fZm9ybWF0dGluZ1N0YXRlLmlubGluZVJ1bnMoKTsgCisgICAgT3B0aW9uYWw8dW5z
aWduZWQ+IHByZXZpb3VzTGluZUxhc3RSdW5JbmRleCA9IGlubGluZURpc3BsYXlSdW5zLmlzRW1w
dHkoKSA/IE9wdGlvbmFsPHVuc2lnbmVkPigpIDogaW5saW5lRGlzcGxheVJ1bnMuc2l6ZSgpIC0g
MTsKKyAgICAvLyA5LjQuMiBJbmxpbmUgZm9ybWF0dGluZyBjb250ZXh0cworICAgIC8vIEEgbGlu
ZSBib3ggaXMgYWx3YXlzIHRhbGwgZW5vdWdoIGZvciBhbGwgb2YgdGhlIGJveGVzIGl0IGNvbnRh
aW5zLgorICAgIGF1dG8gbGluZUJveCA9IERpc3BsYXk6OlJlY3QgeyBsaW5lLmxvZ2ljYWxUb3Ao
KSwgbGluZS5sb2dpY2FsTGVmdCgpLCAwICwgbGluZS5sb2dpY2FsSGVpZ2h0KCkgfTsKKyAgICAv
LyBDcmVhdGUgZmluYWwgZGlzcGxheSBydW5zLgorICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAw
OyBpbmRleCA8IGxpbmVJdGVtcy5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAgYXV0byYgbGlu
ZUl0ZW0gPSBsaW5lSXRlbXMuYXQoaW5kZXgpOworCisgICAgICAgIGF1dG8mIGlubGluZUl0ZW0g
PSBsaW5lSXRlbS0+aW5saW5lSXRlbTsKKyAgICAgICAgYXV0byYgaW5saW5lUnVuID0gbGluZUl0
ZW0tPmlubGluZVJ1bjsKKyAgICAgICAgYXV0byYgbGF5b3V0Qm94ID0gaW5saW5lSXRlbS5sYXlv
dXRCb3goKTsKKyAgICAgICAgYXV0byYgZGlzcGxheUJveCA9IGxheW91dFN0YXRlKCkuZGlzcGxh
eUJveEZvckxheW91dEJveChsYXlvdXRCb3gpOworCisgICAgICAgIGlmIChpbmxpbmVJdGVtLmlz
SGFyZExpbmVCcmVhaygpKSB7CisgICAgICAgICAgICBkaXNwbGF5Qm94LnNldFRvcExlZnQoaW5s
aW5lUnVuLmxvZ2ljYWxUb3BMZWZ0KCkpOworICAgICAgICAgICAgZGlzcGxheUJveC5zZXRDb250
ZW50Qm94V2lkdGgoaW5saW5lUnVuLmxvZ2ljYWxXaWR0aCgpKTsKKyAgICAgICAgICAgIGRpc3Bs
YXlCb3guc2V0Q29udGVudEJveEhlaWdodChpbmxpbmVSdW4ubG9naWNhbEhlaWdodCgpKTsKKyAg
ICAgICAgICAgIG1fZm9ybWF0dGluZ1N0YXRlLmFkZElubGluZVJ1bihzdGQ6Om1ha2VfdW5pcXVl
PERpc3BsYXk6OlJ1bj4oaW5saW5lUnVuKSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgfQogCi12b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpjbG9zZUxp
bmUoTGluZSYgbGluZSwgSXNMYXN0TGluZSBpc0xhc3RMaW5lKSBjb25zdAotewotICAgIGxpbmUu
Y2xvc2UoKTsKLSAgICBpZiAoIWxpbmUuaGFzQ29udGVudCgpKQotICAgICAgICByZXR1cm47Cisg
ICAgICAgIC8vIElubGluZSBsZXZlbCBib3ggKHJlcGxhY2VkIG9yIGlubGluZS1ibG9jaykKKyAg
ICAgICAgaWYgKGlubGluZUl0ZW0uaXNCb3goKSkgeworICAgICAgICAgICAgYXV0byB0b3BMZWZ0
ID0gaW5saW5lUnVuLmxvZ2ljYWxUb3BMZWZ0KCk7CisgICAgICAgICAgICBpZiAobGF5b3V0Qm94
LmlzSW5GbG93UG9zaXRpb25lZCgpKQorICAgICAgICAgICAgICAgIHRvcExlZnQgKz0gR2VvbWV0
cnk6OmluRmxvd1Bvc2l0aW9uZWRQb3NpdGlvbk9mZnNldChsYXlvdXRTdGF0ZSgpLCBsYXlvdXRC
b3gpOworICAgICAgICAgICAgZGlzcGxheUJveC5zZXRUb3BMZWZ0KHRvcExlZnQpOworICAgICAg
ICAgICAgbGluZUJveC5leHBhbmRIb3Jpem9udGFsbHkoaW5saW5lUnVuLmxvZ2ljYWxXaWR0aCgp
KTsKKyAgICAgICAgICAgIG1fZm9ybWF0dGluZ1N0YXRlLmFkZElubGluZVJ1bihzdGQ6Om1ha2Vf
dW5pcXVlPERpc3BsYXk6OlJ1bj4oaW5saW5lUnVuKSk7CisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgfQogCi0gICAgcG9zdFByb2Nlc3NJbmxpbmVSdW5zKGxpbmUsIGlzTGFzdExpbmUp
OwotfQorICAgICAgICAvLyBJbmxpbmUgbGV2ZWwgY29udGFpbmVyIHN0YXJ0ICg8c3Bhbj4pCisg
ICAgICAgIGlmIChpbmxpbmVJdGVtLmlzQ29udGFpbmVyU3RhcnQoKSkgeworICAgICAgICAgICAg
ZGlzcGxheUJveC5zZXRUb3BMZWZ0KGlubGluZVJ1bi5sb2dpY2FsVG9wTGVmdCgpKTsKKyAgICAg
ICAgICAgIGxpbmVCb3guZXhwYW5kSG9yaXpvbnRhbGx5KGlubGluZVJ1bi5sb2dpY2FsV2lkdGgo
KSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQogCi12b2lkIElubGluZUZvcm1h
dHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjphcHBlbmRDb250ZW50VG9MaW5lKExpbmUmIGxpbmUs
IGNvbnN0IElubGluZVJ1blByb3ZpZGVyOjpSdW4mIHJ1biwgY29uc3QgTGF5b3V0U2l6ZSYgcnVu
U2l6ZSkgY29uc3QKLXsKLSAgICBhdXRvIGxhc3RSdW5UeXBlID0gbGluZS5sYXN0UnVuVHlwZSgp
OwotICAgIGxpbmUuYXBwZW5kQ29udGVudChydW4sIHJ1blNpemUpOworICAgICAgICAvLyBJbmxp
bmUgbGV2ZWwgY29udGFpbmVyIGVuZCAoPC9zcGFuPikKKyAgICAgICAgaWYgKGlubGluZUl0ZW0u
aXNDb250YWluZXJFbmQoKSkgeworICAgICAgICAgICAgaWYgKGxheW91dEJveC5pc0luRmxvd1Bv
c2l0aW9uZWQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8gaW5mbG93T2Zmc2V0ID0gR2VvbWV0
cnk6OmluRmxvd1Bvc2l0aW9uZWRQb3NpdGlvbk9mZnNldChsYXlvdXRTdGF0ZSgpLCBsYXlvdXRC
b3gpOworICAgICAgICAgICAgICAgIGRpc3BsYXlCb3gubW92ZUhvcml6b250YWxseShpbmZsb3dP
ZmZzZXQud2lkdGgoKSk7CisgICAgICAgICAgICAgICAgZGlzcGxheUJveC5tb3ZlVmVydGljYWxs
eShpbmZsb3dPZmZzZXQuaGVpZ2h0KCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXV0
byBtYXJnaW5Cb3hXaWR0aCA9IGlubGluZVJ1bi5sb2dpY2FsTGVmdCgpIC0gZGlzcGxheUJveC5s
ZWZ0KCk7CisgICAgICAgICAgICBhdXRvIGNvbnRlbnRCb3hXaWR0aCA9IG1hcmdpbkJveFdpZHRo
IC0gKGRpc3BsYXlCb3gubWFyZ2luU3RhcnQoKSArIGRpc3BsYXlCb3guYm9yZGVyTGVmdCgpICsg
ZGlzcGxheUJveC5wYWRkaW5nTGVmdCgpLnZhbHVlT3IoMCkpOworICAgICAgICAgICAgLy8gRklY
TUUgZml4IGl0IGZvciBtdWx0aWxpbmUuCisgICAgICAgICAgICBkaXNwbGF5Qm94LnNldENvbnRl
bnRCb3hXaWR0aChjb250ZW50Qm94V2lkdGgpOworICAgICAgICAgICAgZGlzcGxheUJveC5zZXRD
b250ZW50Qm94SGVpZ2h0KGlubGluZVJ1bi5sb2dpY2FsSGVpZ2h0KCkpOworICAgICAgICAgICAg
bGluZUJveC5leHBhbmRIb3Jpem9udGFsbHkoaW5saW5lUnVuLmxvZ2ljYWxXaWR0aCgpKTsKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CiAKLSAgICBpZiAobV9mb3JtYXR0aW5nUm9v
dC5zdHlsZSgpLnRleHRBbGlnbigpID09IFRleHRBbGlnbk1vZGU6Okp1c3RpZnkpCi0gICAgICAg
IGNvbXB1dGVFeHBhbnNpb25PcHBvcnR1bml0aWVzKGxpbmUsIHJ1biwgbGFzdFJ1blR5cGUudmFs
dWVPcihJbmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpUeXBlOjpOb25XaGl0ZXNwYWNlKSk7CisgICAg
ICAgIC8vIFRleHQgY29udGVudC4gVHJ5IHRvIGpvaW4gbXVsdGlwbGUgdGV4dCBydW5zIHdoZW4g
cG9zc2libGUuCisgICAgICAgIEFTU0VSVChpbmxpbmVSdW4udGV4dENvbnRleHQoKSk7ICAgICAg
ICAKKyAgICAgICAgY29uc3QgTGluZTo6TGluZUl0ZW0qIHByZXZpb3VzTGluZUl0ZW0gPSAhaW5k
ZXggPyBudWxscHRyIDogbGluZUl0ZW1zW2luZGV4IC0gMV0uZ2V0KCk7CisgICAgICAgIGlmICgh
bGluZUl0ZW0tPmlzQ29sbGFwc2VkKSB7CisgICAgICAgICAgICBhdXRvJiBpbmxpbmVUZXh0SXRl
bSA9IGRvd25jYXN0PElubGluZVRleHRJdGVtPihpbmxpbmVJdGVtKTsKKyAgICAgICAgICAgIGF1
dG8gcHJldmlvdXNSdW5DYW5CZUV4dGVuZGVkID0gcHJldmlvdXNMaW5lSXRlbSA/IHByZXZpb3Vz
TGluZUl0ZW0tPmNhbkJlRXh0ZW5kZWQgOiBmYWxzZTsKKyAgICAgICAgICAgIGF1dG8gcmVxdWly
ZXNOZXdSdW4gPSAhaW5kZXggfHwgIXByZXZpb3VzUnVuQ2FuQmVFeHRlbmRlZCB8fCAmbGF5b3V0
Qm94ICE9ICZwcmV2aW91c0xpbmVJdGVtLT5pbmxpbmVJdGVtLmxheW91dEJveCgpOworICAgICAg
ICAgICAgaWYgKHJlcXVpcmVzTmV3UnVuKQorICAgICAgICAgICAgICAgIG1fZm9ybWF0dGluZ1N0
YXRlLmFkZElubGluZVJ1bihzdGQ6Om1ha2VfdW5pcXVlPERpc3BsYXk6OlJ1bj4oaW5saW5lUnVu
KSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBsYXN0RGlzcGxh
eVJ1biA9IG1fZm9ybWF0dGluZ1N0YXRlLmlubGluZVJ1bnMoKS5sYXN0KCk7CisgICAgICAgICAg
ICAgICAgbGFzdERpc3BsYXlSdW4tPmV4cGFuZEhvcml6b250YWxseShpbmxpbmVUZXh0SXRlbS53
aWR0aCgpKTsKKyAgICAgICAgICAgICAgICBsYXN0RGlzcGxheVJ1bi0+dGV4dENvbnRleHQoKS0+
ZXhwYW5kKGlubGluZVJ1bi50ZXh0Q29udGV4dCgpLT5sZW5ndGgoKSk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBsaW5lQm94LmV4cGFuZEhvcml6b250YWxseShpbmxpbmVSdW4ubG9naWNh
bFdpZHRoKCkpOworICAgICAgICB9CisgICAgICAgIC8vIEZJWE1FIHRha2UgY29udGVudCBicmVh
a2luZyBpbnRvIGFjY291bnQgd2hlbiBwYXJ0IG9mIHRoZSBsYXlvdXQgYm94IGlzIG9uIHRoZSBw
cmV2aW91cyBsaW5lLgorICAgICAgICBhdXRvIGZpcnN0SW5saW5lUnVuRm9yTGF5b3V0Qm94ID0g
IXByZXZpb3VzTGluZUl0ZW0gfHwgJnByZXZpb3VzTGluZUl0ZW0tPmlubGluZUl0ZW0ubGF5b3V0
Qm94KCkgIT0gJmxheW91dEJveDsKKyAgICAgICAgaWYgKGZpcnN0SW5saW5lUnVuRm9yTGF5b3V0
Qm94KSB7CisgICAgICAgICAgICAvLyBTZXR1cCBkaXNwbGF5IGJveCBmb3IgdGhlIGFzc29jaWF0
ZWQgbGF5b3V0IGJveC4KKyAgICAgICAgICAgIGRpc3BsYXlCb3guc2V0VG9wTGVmdChpbmxpbmVS
dW4ubG9naWNhbFRvcExlZnQoKSk7CisgICAgICAgICAgICBkaXNwbGF5Qm94LnNldENvbnRlbnRC
b3hXaWR0aChpbmxpbmVSdW4ubG9naWNhbFdpZHRoKCkpOworICAgICAgICAgICAgZGlzcGxheUJv
eC5zZXRDb250ZW50Qm94SGVpZ2h0KGlubGluZVJ1bi5sb2dpY2FsSGVpZ2h0KCkpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgLy8gRklYTUUgZml4IGl0IGZvciBtdWx0aXJ1bi9tdWx0
aWxpbmUuCisgICAgICAgICAgICBkaXNwbGF5Qm94LnNldENvbnRlbnRCb3hXaWR0aChkaXNwbGF5
Qm94LmNvbnRlbnRCb3hXaWR0aCgpICsgaW5saW5lUnVuLmxvZ2ljYWxXaWR0aCgpKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICAvLyBGSVhNRSBsaW5lYm94IG5lZWRzIHRvIGJlIGFqdXN0ZWQgYWZ0
ZXIgY29udGVudCBhbGlnbm1lbnQuCisgICAgbV9mb3JtYXR0aW5nU3RhdGUuYWRkTGluZUJveCh7
IGxpbmVCb3ggfSk7CisgICAgaWYgKGxpbmUuaGFzQ29udGVudCgpKQorICAgICAgICBhbGlnblJ1
bnMobV9mb3JtYXR0aW5nUm9vdC5zdHlsZSgpLnRleHRBbGlnbigpLCBwcmV2aW91c0xpbmVMYXN0
UnVuSW5kZXgudmFsdWVPcigtMSkgKyAxLCBsaW5lLmF2YWlsYWJsZVdpZHRoKCkpOworICAgIGlu
aXRpYWxpemVMaW5lKGxpbmUsIGxpbmUubG9naWNhbEJvdHRvbSgpKTsKIH0KIAotdm9pZCBJbmxp
bmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6Y29tcHV0ZUZsb2F0UG9zaXRpb24oY29u
c3QgRmxvYXRpbmdDb250ZXh0JiBmbG9hdGluZ0NvbnRleHQsIExpbmUmIGxpbmUsIGNvbnN0IEJv
eCYgZmxvYXRCb3gpIGNvbnN0Cit2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5
b3V0OjpoYW5kbGVGbG9hdChMaW5lJiBsaW5lLCBjb25zdCBGbG9hdGluZ0NvbnRleHQmIGZsb2F0
aW5nQ29udGV4dCwgY29uc3QgSW5saW5lSXRlbSYgZmxvYXRJdGVtKSBjb25zdAogewotICAgIGF1
dG8mIGxheW91dFN0YXRlID0gbV9mb3JtYXR0aW5nQ29udGV4dC5sYXlvdXRTdGF0ZSgpOwotICAg
IEFTU0VSVChsYXlvdXRTdGF0ZS5oYXNEaXNwbGF5Qm94KGZsb2F0Qm94KSk7Ci0gICAgYXV0byYg
ZGlzcGxheUJveCA9IGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goZmxvYXRCb3gp
OwotCisgICAgYXV0byYgZmxvYXRCb3ggPSBmbG9hdEl0ZW0ubGF5b3V0Qm94KCk7CisgICAgQVNT
RVJUKGxheW91dFN0YXRlKCkuaGFzRGlzcGxheUJveChmbG9hdEJveCkpOworICAgIGF1dG8mIGRp
c3BsYXlCb3ggPSBsYXlvdXRTdGF0ZSgpLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goZmxvYXRCb3gp
OwogICAgIC8vIFNldCBzdGF0aWMgcG9zaXRpb24gZmlyc3QuCiAgICAgZGlzcGxheUJveC5zZXRU
b3BMZWZ0KHsgbGluZS5jb250ZW50TG9naWNhbFJpZ2h0KCksIGxpbmUubG9naWNhbFRvcCgpIH0p
OwogICAgIC8vIEZsb2F0IGl0LgogICAgIGRpc3BsYXlCb3guc2V0VG9wTGVmdChmbG9hdGluZ0Nv
bnRleHQucG9zaXRpb25Gb3JGbG9hdChmbG9hdEJveCkpOworICAgIG1fZmxvYXRpbmdTdGF0ZS5h
cHBlbmQoZmxvYXRCb3gpOworICAgIC8vIFNocmluayBhdmFpbGJsZSBzcGFjZSBmb3IgY3VycmVu
dCBsaW5lIGFuZCBtb3ZlIGV4aXN0aW5nIGlubGluZSBydW5zLgorICAgIGF1dG8gZmxvYXRCb3hX
aWR0aCA9IGZsb2F0SXRlbS53aWR0aCgpOworICAgIGZsb2F0Qm94LmlzTGVmdEZsb2F0aW5nUG9z
aXRpb25lZCgpID8gbGluZS5tb3ZlTG9naWNhbExlZnQoZmxvYXRCb3hXaWR0aCkgOiBsaW5lLm1v
dmVMb2dpY2FsUmlnaHQoZmxvYXRCb3hXaWR0aCk7CiB9CiAKLXZvaWQgSW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQ6OkxpbmVMYXlvdXQ6OnBsYWNlSW5GbG93UG9zaXRpb25lZENoaWxkcmVuKHVuc2ln
bmVkIGZpc3RSdW5JbmRleCkgY29uc3QKK3ZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6Okxp
bmVMYXlvdXQ6OmNvbW1pdElubGluZUl0ZW1Ub0xpbmUoTGluZSYgbGluZSwgY29uc3QgSW5saW5l
SXRlbSYgaW5saW5lSXRlbSkgY29uc3QKIHsKLSAgICBhdXRvJiBsYXlvdXRTdGF0ZSA9IG1fZm9y
bWF0dGluZ0NvbnRleHQubGF5b3V0U3RhdGUoKTsKLSAgICBhdXRvJiBpbmxpbmVSdW5zID0gbV9m
b3JtYXR0aW5nU3RhdGUuaW5saW5lUnVucygpOwotICAgIGZvciAoYXV0byBydW5JbmRleCA9IGZp
c3RSdW5JbmRleDsgcnVuSW5kZXggPCBpbmxpbmVSdW5zLnNpemUoKTsgKytydW5JbmRleCkgewot
ICAgICAgICBhdXRvJiBpbmxpbmVSdW4gPSBpbmxpbmVSdW5zW3J1bkluZGV4XTsKLQotICAgICAg
ICBhdXRvIHBvc2l0aW9uT2Zmc2V0ID0gWyZdKGF1dG8mIGxheW91dEJveCkgewotICAgICAgICAg
ICAgLy8gRklYTUU6IE5lZWQgdG8gZmlndXJlIG91dCB3aGV0aGVyIGluLWZsb3cgb2Zmc2V0IHNo
b3VsZCBzdGljay4gVGhpcyBtaWdodCB2ZXJ5IHdlbGwgYmUgdGVtcG9yYXJ5LgotICAgICAgICAg
ICAgT3B0aW9uYWw8TGF5b3V0U2l6ZT4gb2Zmc2V0OwotICAgICAgICAgICAgZm9yIChhdXRvKiBi
b3ggPSAmbGF5b3V0Qm94OyBib3ggIT0gJm1fZm9ybWF0dGluZ1Jvb3Q7IGJveCA9IGJveC0+cGFy
ZW50KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWJveC0+aXNJbkZsb3dQb3NpdGlvbmVkKCkp
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIG9mZnNldCA9
IG9mZnNldC52YWx1ZU9yKExheW91dFNpemUoKSkgKyBHZW9tZXRyeTo6aW5GbG93UG9zaXRpb25l
ZFBvc2l0aW9uT2Zmc2V0KGxheW91dFN0YXRlLCAqYm94KTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIHJldHVybiBvZmZzZXQ7Ci0gICAgICAgIH07CisgICAgaWYgKGlubGluZUl0ZW0uaXND
b250YWluZXJTdGFydCgpKQorICAgICAgICByZXR1cm4gbGluZS5hcHBlbmRJbmxpbmVDb250YWlu
ZXJTdGFydChpbmxpbmVJdGVtKTsKIAotICAgICAgICBpZiAoYXV0byBvZmZzZXQgPSBwb3NpdGlv
bk9mZnNldChpbmxpbmVSdW4uaW5saW5lSXRlbSgpLmxheW91dEJveCgpKSkgewotICAgICAgICAg
ICAgaW5saW5lUnVuLm1vdmVWZXJ0aWNhbGx5KG9mZnNldC0+aGVpZ2h0KCkpOwotICAgICAgICAg
ICAgaW5saW5lUnVuLm1vdmVIb3Jpem9udGFsbHkob2Zmc2V0LT53aWR0aCgpKTsKLSAgICAgICAg
fQotICAgIH0KKyAgICBpZiAoaW5saW5lSXRlbS5pc0NvbnRhaW5lckVuZCgpKQorICAgICAgICBy
ZXR1cm4gbGluZS5hcHBlbmRJbmxpbmVDb250YWluZXJFbmQoaW5saW5lSXRlbSk7CisKKyAgICBp
ZiAoaW5saW5lSXRlbS5pc0hhcmRMaW5lQnJlYWsoKSkKKyAgICAgICAgcmV0dXJuIGxpbmUuYXBw
ZW5kSGFyZExpbmVCcmVhayhpbmxpbmVJdGVtKTsKKworICAgIGF1dG8gd2lkdGggPSBpbmxpbmVJ
dGVtLndpZHRoKCk7CisgICAgaWYgKGlzPElubGluZVRleHRJdGVtPihpbmxpbmVJdGVtKSkKKyAg
ICAgICAgcmV0dXJuIGxpbmUuYXBwZW5kVGV4dENvbnRlbnQoZG93bmNhc3Q8SW5saW5lVGV4dEl0
ZW0+KGlubGluZUl0ZW0pLCB7IHdpZHRoLCBpbmxpbmVJdGVtLnN0eWxlKCkuZm9udE1ldHJpY3Mo
KS5oZWlnaHQoKSB9KTsKKworICAgIGF1dG8mIGxheW91dEJveCA9IGlubGluZUl0ZW0ubGF5b3V0
Qm94KCk7CisgICAgYXV0byYgZGlzcGxheUJveCA9IGxheW91dFN0YXRlKCkuZGlzcGxheUJveEZv
ckxheW91dEJveChsYXlvdXRCb3gpOworICAgIGlmIChsYXlvdXRCb3guaXNSZXBsYWNlZCgpKQor
ICAgICAgICByZXR1cm4gbGluZS5hcHBlbmRSZXBsYWNlZElubGluZUJveChpbmxpbmVJdGVtLCB7
IHdpZHRoLCBkaXNwbGF5Qm94LmhlaWdodCgpIH0pOworCisgICAgbGluZS5hcHBlbmROb25SZXBs
YWNlZElubGluZUJveChpbmxpbmVJdGVtLCB7IHdpZHRoLCBkaXNwbGF5Qm94LmhlaWdodCgpIH0p
OwogfQogCi1zdGF0aWMgTGF5b3V0VW5pdCBhZGp1c3RlZExpbmVMb2dpY2FsTGVmdChUZXh0QWxp
Z25Nb2RlIGFsaWduLCBMYXlvdXRVbml0IGxpbmVMb2dpY2FsTGVmdCwgTGF5b3V0VW5pdCByZW1h
aW5pbmdXaWR0aCkKK3N0YXRpYyBPcHRpb25hbDxMYXlvdXRVbml0PiBob3Jpem9udGFsQWRqdXN0
bWVudEZvckFsaWdubWVudChUZXh0QWxpZ25Nb2RlIGFsaWduLCBMYXlvdXRVbml0IHJlbWFpbmlu
Z1dpZHRoKQogewogICAgIHN3aXRjaCAoYWxpZ24pIHsKICAgICBjYXNlIFRleHRBbGlnbk1vZGU6
OkxlZnQ6CiAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRMZWZ0OgogICAgIGNhc2UgVGV4
dEFsaWduTW9kZTo6U3RhcnQ6Ci0gICAgICAgIHJldHVybiBsaW5lTG9naWNhbExlZnQ7CisgICAg
ICAgIHJldHVybiB7IH07CiAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpSaWdodDoKICAgICBjYXNl
IFRleHRBbGlnbk1vZGU6OldlYktpdFJpZ2h0OgogICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6RW5k
OgotICAgICAgICByZXR1cm4gbGluZUxvZ2ljYWxMZWZ0ICsgc3RkOjptYXgocmVtYWluaW5nV2lk
dGgsIDBfbHUpOworICAgICAgICByZXR1cm4gc3RkOjptYXgocmVtYWluaW5nV2lkdGgsIDBfbHUp
OwogICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6Q2VudGVyOgogICAgIGNhc2UgVGV4dEFsaWduTW9k
ZTo6V2ViS2l0Q2VudGVyOgotICAgICAgICByZXR1cm4gbGluZUxvZ2ljYWxMZWZ0ICsgc3RkOjpt
YXgocmVtYWluaW5nV2lkdGggLyAyLCAwX2x1KTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWF4KHJl
bWFpbmluZ1dpZHRoIC8gMiwgMF9sdSk7CiAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5
OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQog
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBsaW5lTG9naWNhbExlZnQ7Ci19
Ci0KLXZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6Omp1c3RpZnlSdW5z
KExpbmUmIGxpbmUpCi17Ci0gICAgYXV0byYgaW5saW5lUnVucyA9IGxpbmUucnVucygpOwotICAg
IGF1dG8mIGxhc3RJbmxpbmVSdW4gPSBpbmxpbmVSdW5zLmxhc3QoKTsKLQotICAgIC8vIEFkanVz
dCAoZm9yYmlkKSB0cmFpbGluZyBleHBhbnNpb24gZm9yIHRoZSBsYXN0IHRleHQgcnVuIG9uIGxp
bmUuCi0gICAgYXV0byBleHBhbnNpb25CZWhhdmlvciA9IGxhc3RJbmxpbmVSdW4uZXhwYW5zaW9u
T3Bwb3J0dW5pdHkoKS5iZWhhdmlvcjsKLSAgICAvLyBSZW1vdmUgYWxsb3cgYW5kIGFkZCBmb3Ji
aWQuCi0gICAgZXhwYW5zaW9uQmVoYXZpb3IgXj0gQWxsb3dUcmFpbGluZ0V4cGFuc2lvbjsKLSAg
ICBleHBhbnNpb25CZWhhdmlvciB8PSBGb3JiaWRUcmFpbGluZ0V4cGFuc2lvbjsKLSAgICBsYXN0
SW5saW5lUnVuLmV4cGFuc2lvbk9wcG9ydHVuaXR5KCkuYmVoYXZpb3IgPSBleHBhbnNpb25CZWhh
dmlvcjsKLQotICAgIC8vIENvbGxlY3QgZXhwYW5zaW9uIG9wcG9ydHVuaXRpZXMgYW5kIGp1c3Rp
ZnkgdGhlIHJ1bnMuCi0gICAgYXV0byB3aWR0aFRvRGlzdHJpYnV0ZSA9IGxpbmUuYXZhaWxhYmxl
V2lkdGgoKTsKLSAgICBpZiAod2lkdGhUb0Rpc3RyaWJ1dGUgPD0gMCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgYXV0byBleHBhbnNpb25PcHBvcnR1bml0aWVzID0gMDsKLSAgICBmb3IgKGF1dG8m
IGlubGluZVJ1biA6IGlubGluZVJ1bnMpCi0gICAgICAgIGV4cGFuc2lvbk9wcG9ydHVuaXRpZXMg
Kz0gaW5saW5lUnVuLmV4cGFuc2lvbk9wcG9ydHVuaXR5KCkuY291bnQ7Ci0KLSAgICBpZiAoIWV4
cGFuc2lvbk9wcG9ydHVuaXRpZXMpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZsb2F0IGV4cGFu
c2lvbiA9IHdpZHRoVG9EaXN0cmlidXRlLnRvRmxvYXQoKSAvIGV4cGFuc2lvbk9wcG9ydHVuaXRp
ZXM7Ci0gICAgTGF5b3V0VW5pdCBhY2N1bXVsYXRlZEV4cGFuc2lvbjsKLSAgICBmb3IgKGF1dG8m
IGlubGluZVJ1biA6IGlubGluZVJ1bnMpIHsKLSAgICAgICAgTGF5b3V0VW5pdCBleHBhbnNpb25G
b3JSdW4geyBpbmxpbmVSdW4uZXhwYW5zaW9uT3Bwb3J0dW5pdHkoKS5jb3VudCAqIGV4cGFuc2lv
biB9OwotCi0gICAgICAgIGlubGluZVJ1bi5leHBhbnNpb25PcHBvcnR1bml0eSgpLmV4cGFuc2lv
biA9IGV4cGFuc2lvbkZvclJ1bjsKLSAgICAgICAgaW5saW5lUnVuLnNldExvZ2ljYWxMZWZ0KGlu
bGluZVJ1bi5sb2dpY2FsTGVmdCgpICsgYWNjdW11bGF0ZWRFeHBhbnNpb24pOwotICAgICAgICBp
bmxpbmVSdW4uc2V0TG9naWNhbFdpZHRoKGlubGluZVJ1bi5sb2dpY2FsV2lkdGgoKSArIGV4cGFu
c2lvbkZvclJ1bik7Ci0gICAgICAgIGFjY3VtdWxhdGVkRXhwYW5zaW9uICs9IGV4cGFuc2lvbkZv
clJ1bjsKLSAgICB9CisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbmxpbmVGb3JtYXR0aW5n
Q29udGV4dDo6TGluZUxheW91dDo6Y29tcHV0ZUV4cGFuc2lvbk9wcG9ydHVuaXRpZXMoTGluZSYg
bGluZSwgY29uc3QgSW5saW5lUnVuUHJvdmlkZXI6OlJ1biYgcnVuLCBJbmxpbmVSdW5Qcm92aWRl
cjo6UnVuOjpUeXBlIGxhc3RSdW5UeXBlKSBjb25zdAordm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dDo6TGluZUxheW91dDo6YWxpZ25SdW5zKFRleHRBbGlnbk1vZGUgdGV4dEFsaWduLCB1bnNp
Z25lZCBmaXJzdFJ1bkluZGV4LCBMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoKSBjb25zdAogewot
ICAgIGF1dG8gaXNFeHBhbnNpb25PcHBvcnR1bml0eSA9IFtdKGF1dG8gY3VycmVudFJ1bklzV2hp
dGVzcGFjZSwgYXV0byBsYXN0UnVuSXNXaGl0ZXNwYWNlKSB7Ci0gICAgICAgIHJldHVybiBjdXJy
ZW50UnVuSXNXaGl0ZXNwYWNlIHx8ICghY3VycmVudFJ1bklzV2hpdGVzcGFjZSAmJiAhbGFzdFJ1
bklzV2hpdGVzcGFjZSk7Ci0gICAgfTsKLQotICAgIGF1dG8gZXhwYW5zaW9uQmVoYXZpb3IgPSBb
XShhdXRvIGlzQXRFeHBhbnNpb25PcHBvcnR1bml0eSkgewotICAgICAgICBFeHBhbnNpb25CZWhh
dmlvciBleHBhbnNpb25CZWhhdmlvciA9IEFsbG93VHJhaWxpbmdFeHBhbnNpb247Ci0gICAgICAg
IGV4cGFuc2lvbkJlaGF2aW9yIHw9IGlzQXRFeHBhbnNpb25PcHBvcnR1bml0eSA/IEZvcmJpZExl
YWRpbmdFeHBhbnNpb24gOiBBbGxvd0xlYWRpbmdFeHBhbnNpb247Ci0gICAgICAgIHJldHVybiBl
eHBhbnNpb25CZWhhdmlvcjsKLSAgICB9OwotCi0gICAgYXV0byBpc0F0RXhwYW5zaW9uT3Bwb3J0
dW5pdHkgPSBpc0V4cGFuc2lvbk9wcG9ydHVuaXR5KHJ1bi5pc1doaXRlc3BhY2UoKSwgbGFzdFJ1
blR5cGUgPT0gSW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6VHlwZTo6V2hpdGVzcGFjZSk7Ci0KLSAg
ICBhdXRvJiBjdXJyZW50SW5saW5lUnVuID0gbGluZS5ydW5zKCkubGFzdCgpOwotICAgIGF1dG8m
IGV4cGFuc2lvbk9wcG9ydHVuaXR5ID0gY3VycmVudElubGluZVJ1bi5leHBhbnNpb25PcHBvcnR1
bml0eSgpOwotICAgIGlmIChpc0F0RXhwYW5zaW9uT3Bwb3J0dW5pdHkpCi0gICAgICAgICsrZXhw
YW5zaW9uT3Bwb3J0dW5pdHkuY291bnQ7Ci0KLSAgICBleHBhbnNpb25PcHBvcnR1bml0eS5iZWhh
dmlvciA9IGV4cGFuc2lvbkJlaGF2aW9yKGlzQXRFeHBhbnNpb25PcHBvcnR1bml0eSk7Ci19Ci0K
LXZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OmFsaWduUnVucyhUZXh0
QWxpZ25Nb2RlIHRleHRBbGlnbiwgTGluZSYgbGluZSwgIElzTGFzdExpbmUgaXNMYXN0TGluZSkg
Y29uc3QKLXsKLSAgICBhdXRvIGFkanV0ZWRUZXh0QWxpZ25tZW50ID0gdGV4dEFsaWduICE9IFRl
eHRBbGlnbk1vZGU6Okp1c3RpZnkgPyB0ZXh0QWxpZ24gOiBpc0xhc3RMaW5lID09IElzTGFzdExp
bmU6Ok5vID8gVGV4dEFsaWduTW9kZTo6SnVzdGlmeSA6IFRleHRBbGlnbk1vZGU6OkxlZnQ7Ci0g
ICAgaWYgKGFkanV0ZWRUZXh0QWxpZ25tZW50ID09IFRleHRBbGlnbk1vZGU6Okp1c3RpZnkpIHsK
LSAgICAgICAganVzdGlmeVJ1bnMobGluZSk7CisgICAgYXV0byBhZGp1c3RtZW50ID0gaG9yaXpv
bnRhbEFkanVzdG1lbnRGb3JBbGlnbm1lbnQodGV4dEFsaWduLCBhdmFpbGFibGVXaWR0aCk7Cisg
ICAgaWYgKCFhZGp1c3RtZW50KQogICAgICAgICByZXR1cm47Ci0gICAgfQogCi0gICAgYXV0byBs
aW5lTG9naWNhbExlZnQgPSBsaW5lLmNvbnRlbnRMb2dpY2FsTGVmdCgpOwotICAgIGF1dG8gYWRq
dXN0ZWRMb2dpY2FsTGVmdCA9IGFkanVzdGVkTGluZUxvZ2ljYWxMZWZ0KGFkanV0ZWRUZXh0QWxp
Z25tZW50LCBsaW5lTG9naWNhbExlZnQsIGxpbmUuYXZhaWxhYmxlV2lkdGgoKSk7Ci0gICAgaWYg
KGFkanVzdGVkTG9naWNhbExlZnQgPT0gbGluZUxvZ2ljYWxMZWZ0KQotICAgICAgICByZXR1cm47
Ci0KLSAgICBhdXRvIGRlbHRhID0gYWRqdXN0ZWRMb2dpY2FsTGVmdCAtIGxpbmVMb2dpY2FsTGVm
dDsKLSAgICBmb3IgKGF1dG8mIGlubGluZVJ1biA6IGxpbmUucnVucygpKQotICAgICAgICBpbmxp
bmVSdW4uc2V0TG9naWNhbExlZnQoaW5saW5lUnVuLmxvZ2ljYWxMZWZ0KCkgKyBkZWx0YSk7Ci19
Ci0KLUxheW91dFVuaXQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OnJ1bldp
ZHRoKGNvbnN0IElubGluZUNvbnRlbnQmIGlubGluZUNvbnRlbnQsIGNvbnN0IElubGluZUl0ZW0m
IGlubGluZUl0ZW0sIEl0ZW1Qb3NpdGlvbiBmcm9tLCB1bnNpZ25lZCBsZW5ndGgsIExheW91dFVu
aXQgY29udGVudExvZ2ljYWxMZWZ0KSBjb25zdCAKLXsKLSAgICBMYXlvdXRVbml0IHdpZHRoOwot
ICAgIGF1dG8gc3RhcnRQb3NpdGlvbiA9IGZyb207Ci0gICAgYXV0byBpdGVyYXRvciA9IGlubGlu
ZUNvbnRlbnQuZmluZChjb25zdF9jYXN0PElubGluZUl0ZW0qPigmaW5saW5lSXRlbSkpOwotI2lm
ICFBU1NFUlRfRElTQUJMRUQKLSAgICBhdXRvIGlubGluZUl0ZW1FbmQgPSBpbmxpbmVDb250ZW50
LmVuZCgpOwotI2VuZGlmCi0gICAgd2hpbGUgKGxlbmd0aCkgewotICAgICAgICBBU1NFUlQoaXRl
cmF0b3IgIT0gaW5saW5lSXRlbUVuZCk7Ci0gICAgICAgIGF1dG8mIGN1cnJlbnRJbmxpbmVJdGVt
ID0gKippdGVyYXRvcjsKLSAgICAgICAgYXV0byBlbmRQb3NpdGlvbiA9IHN0ZDo6bWluPEl0ZW1Q
b3NpdGlvbj4oc3RhcnRQb3NpdGlvbiArIGxlbmd0aCwgY3VycmVudElubGluZUl0ZW0udGV4dENv
bnRlbnQoKS5sZW5ndGgoKSk7Ci0gICAgICAgIGF1dG8gdGV4dFdpZHRoID0gVGV4dFV0aWw6Ondp
ZHRoKGN1cnJlbnRJbmxpbmVJdGVtLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbiwgY29udGVu
dExvZ2ljYWxMZWZ0KTsKLQotICAgICAgICBjb250ZW50TG9naWNhbExlZnQgKz0gdGV4dFdpZHRo
OwotICAgICAgICB3aWR0aCArPSB0ZXh0V2lkdGg7Ci0gICAgICAgIGxlbmd0aCAtPSAoZW5kUG9z
aXRpb24gLSBzdGFydFBvc2l0aW9uKTsKLQotICAgICAgICBzdGFydFBvc2l0aW9uID0gMDsKLSAg
ICAgICAgKytpdGVyYXRvcjsKLSAgICB9Ci0gICAgcmV0dXJuIHdpZHRoOworICAgIGF1dG8mIGlu
bGluZURpc3BsYXlSdW5zID0gbV9mb3JtYXR0aW5nU3RhdGUuaW5saW5lUnVucygpOyAKKyAgICBm
b3IgKHVuc2lnbmVkIGluZGV4ID0gZmlyc3RSdW5JbmRleDsgaW5kZXggPCBpbmxpbmVEaXNwbGF5
UnVucy5zaXplKCk7ICsraW5kZXgpCisgICAgICAgIGlubGluZURpc3BsYXlSdW5zW2luZGV4XS0+
bW92ZUhvcml6b250YWxseSgqYWRqdXN0bWVudCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdTdGF0ZS5o
IGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGlu
Z1N0YXRlLmgKaW5kZXggNjYyYTgzYzNlYmM1MWJhN2IwZTNjNGVhY2NmNTE4NDRlOWVkNjU5Yy4u
ZDc0ZGNlNTM4MmMyN2RjZTk2MWFhNjY0Mzk3OTMyMDcxOTFiNWZhYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ1N0YXRl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9y
bWF0dGluZ1N0YXRlLmgKQEAgLTI3LDE1ICsyNywyMCBAQAogCiAjaWYgRU5BQkxFKExBWU9VVF9G
T1JNQVRUSU5HX0NPTlRFWFQpCiAKKyNpbmNsdWRlICJEaXNwbGF5UnVuLmgiCiAjaW5jbHVkZSAi
Rm9ybWF0dGluZ1N0YXRlLmgiCiAjaW5jbHVkZSAiSW5saW5lSXRlbS5oIgotI2luY2x1ZGUgIklu
bGluZVJ1bi5oIgorI2luY2x1ZGUgIklubGluZUxpbmVCb3guaCIKICNpbmNsdWRlIDx3dGYvSXNv
TWFsbG9jLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiBuYW1lc3BhY2UgTGF5b3V0IHsKIAorLy8gVGVtcAordXNpbmcgSW5saW5lSXRlbXMgPSBM
aXN0SGFzaFNldDxzdGQ6OnVuaXF1ZV9wdHI8SW5saW5lSXRlbT4+OwordXNpbmcgSW5saW5lUnVu
cyA9IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8RGlzcGxheTo6UnVuPj47Cit1c2luZyBMaW5lQm94
ZXMgPSBWZWN0b3I8TGluZUJveD47CiAvLyBJbmxpbmVGb3JtYXR0aW5nU3RhdGUgaG9sZHMgdGhl
IHN0YXRlIGZvciBhIHBhcnRpY3VsYXIgaW5saW5lIGZvcm1hdHRpbmcgY29udGV4dCB0cmVlLgog
Y2xhc3MgSW5saW5lRm9ybWF0dGluZ1N0YXRlIDogcHVibGljIEZvcm1hdHRpbmdTdGF0ZSB7CiAg
ICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChJbmxpbmVGb3JtYXR0aW5nU3RhdGUpOwpAQCAtNDMs
MTYgKzQ4LDIwIEBAIHB1YmxpYzoKICAgICBJbmxpbmVGb3JtYXR0aW5nU3RhdGUoUmVmPEZsb2F0
aW5nU3RhdGU+JiYsIExheW91dFN0YXRlJik7CiAgICAgdmlydHVhbCB+SW5saW5lRm9ybWF0dGlu
Z1N0YXRlKCk7CiAKLSAgICBJbmxpbmVDb250ZW50JiBpbmxpbmVDb250ZW50KCkgeyByZXR1cm4g
bV9pbmxpbmVDb250ZW50OyB9Ci0gICAgSW5saW5lSXRlbSogbGFzdElubGluZUl0ZW0oKSBjb25z
dCB7IHJldHVybiBtX2lubGluZUNvbnRlbnQuaXNFbXB0eSgpID8gbnVsbHB0ciA6IG1faW5saW5l
Q29udGVudC5sYXN0KCkuZ2V0KCk7IH0KKyAgICB2b2lkIGFkZElubGluZVRleHRJdGVtKCk7CiAK
LSAgICAvLyBUZW1wCisgICAgSW5saW5lSXRlbXMmIGlubGluZUl0ZW1zKCkgeyByZXR1cm4gbV9p
bmxpbmVJdGVtczsgfQogICAgIElubGluZVJ1bnMmIGlubGluZVJ1bnMoKSB7IHJldHVybiBtX2lu
bGluZVJ1bnM7IH0KLSAgICB2b2lkIGFwcGVuZElubGluZVJ1bihJbmxpbmVSdW4gaW5saW5lUnVu
KSB7IG1faW5saW5lUnVucy5hcHBlbmQoaW5saW5lUnVuKTsgfQorICAgIExpbmVCb3hlcyYgbGlu
ZUJveGVzKCkgeyByZXR1cm4gbV9saW5lQm94ZXM7IH0KKworICAgIHZvaWQgYWRkSW5saW5lSXRl
bShzdGQ6OnVuaXF1ZV9wdHI8SW5saW5lSXRlbT4mJiBpbmxpbmVJdGVtKSB7IG1faW5saW5lSXRl
bXMuYWRkKFdURk1vdmUoaW5saW5lSXRlbSkpOyB9CisgICAgdm9pZCBhZGRJbmxpbmVSdW4oc3Rk
Ojp1bmlxdWVfcHRyPERpc3BsYXk6OlJ1bj4mJiBpbmxpbmVSdW4pIHsgbV9pbmxpbmVSdW5zLmFw
cGVuZChXVEZNb3ZlKGlubGluZVJ1bikpOyB9CisgICAgdm9pZCBhZGRMaW5lQm94KExpbmVCb3gg
bGluZUJveCkgeyBtX2xpbmVCb3hlcy5hcHBlbmQobGluZUJveCk7IH0KIAogcHJpdmF0ZToKLSAg
ICBJbmxpbmVDb250ZW50IG1faW5saW5lQ29udGVudDsKKyAgICBJbmxpbmVJdGVtcyBtX2lubGlu
ZUl0ZW1zOwogICAgIElubGluZVJ1bnMgbV9pbmxpbmVSdW5zOworICAgIExpbmVCb3hlcyBtX2xp
bmVCb3hlczsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxp
bmVmb3JtYXR0aW5nL0lubGluZUl0ZW0uaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVm
b3JtYXR0aW5nL0lubGluZUl0ZW0uaAppbmRleCA1YTEwZmMxZDFmZmNhNjM0NGUwNDAwZTU5ZDZh
NTAwN2ExNWJiODRlLi44N2VkOWMzNmY2YzkyM2FlOGU0Zjg5OTc0OTZlYmNhYzVhY2ZlOWM0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVJ
dGVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5l
SXRlbS5oCkBAIC0zNiw4MyArMzYsNTcgQEAgbmFtZXNwYWNlIExheW91dCB7CiAKIGNsYXNzIElu
bGluZUl0ZW0gewogcHVibGljOgotICAgIElubGluZUl0ZW0oY29uc3QgQm94JiBsYXlvdXRCb3gp
OworICAgIGVudW0gY2xhc3MgVHlwZSB7IFRleHQsIEhhcmRMaW5lQnJlYWssIEJveCwgRmxvYXQs
IENvbnRhaW5lclN0YXJ0LCBDb250YWluZXJFbmQgfTsKKyAgICBJbmxpbmVJdGVtKGNvbnN0IEJv
eCYgbGF5b3V0Qm94LCBUeXBlKTsKIAotICAgIGVudW0gY2xhc3MgVHlwZSB7IFRleHQsIEhhcmRM
aW5lQnJlYWssIElubGluZUJveCwgRmxvYXQgfTsKLSAgICBUeXBlIHR5cGUoKSBjb25zdDsKKyAg
ICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KICAgICBjb25zdCBCb3gmIGxh
eW91dEJveCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5b3V0Qm94OyB9CiAgICAgY29uc3QgUmVuZGVy
U3R5bGUmIHN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9sYXlvdXRCb3guc3R5bGUoKTsgfQotICAg
IFN0cmluZyB0ZXh0Q29udGVudCgpIGNvbnN0OwotICAgIC8vIERldGFjaGluZ1J1bGUgaW5kaWNh
dGVzIHdoZXRoZXIgdGhlIGlubGluZSBlbGVtZW50IG5lZWRzIHRvIGJlIHdyYXBwZWQgaW4gYSBk
ZWRpY2V0ZWQgcnVuIG9yIGJyZWFrIGZyb20gcHJldmlvdXMvbmV4dCBydW5zLgotICAgIC8vIDxz
cGFuPnN0YXJ0PC9zcGFuPjxzcGFuIHN0eWxlPSJwb3NpdGlvbjogcmVsYXRpdmU7Ij4gbWlkZGxl
IDwvc3Bhbj48c3Bhbj5lbmQ8L3NwYW4+Ci0gICAgLy8gaW5wdXQgdG8gbGluZSBicmVha2luZyAt
PiA8c3RhcnQgbWlkZGxlIGVuZD4KLSAgICAvLyBvdXRwdXQgb2YgbGluZSBicmVha2luZyAoY29u
c2lkZXJpbmcgaW5maW5pdGUgY29uc3RyYWludCkgLT4gPHN0YXJ0IG1pZGRsZSBlbmQ+Ci0gICAg
Ly8gZHVlIHRvIHRoZSBpbi1mbG93IHBvc2l0aW9uaW5nLCB0aGUgZmluYWwgcnVucyBhcmU6IDxz
dGFydD48IG1pZGRsZSA+PGVuZD4KLSAgICAvLyAic3RhcnQiIC0+IG4vYQotICAgIC8vICIgbWlk
ZGxlICIgLT4gQnJlYWtBdFN0YXJ0IGFuZCBCcmVha0F0RW5kCi0gICAgLy8gImVuZCIgLT4gbi9h
Ci0gICAgLy8KLSAgICAvLyA8c3Bhbj5wYXJlbnQgPC9zcGFuPjxzcGFuIHN0eWxlPSJwYWRkaW5n
OiAxMHB4OyI+c3RhcnQ8c3Bhbj4gbWlkZGxlIDwvc3Bhbj5lbmQ8L3NwYW4+PHNwYW4+IHBhcmVu
dDwvc3Bhbj4KLSAgICAvLyBpbnB1dCB0byBsaW5lIGJyZWFraW5nIC0+IDxwYXJlbnQgc3RhcnQg
bWlkZGxlIGVuZCBwYXJlbnQ+Ci0gICAgLy8gb3V0cHV0IG9mIGxpbmUgYnJlYWtpbmcgKGNvbnNp
ZGVyaW5nIGluZmluaXRlIGNvbnN0cmFpbnQpIC0+IDxwYXJlbnQgc3RhcnQgbWlkZGxlIGVuZCBw
YXJlbnQ+Ci0gICAgLy8gZHVlIHRvIHBhZGRpbmcsIGZpbmFsIHJ1bnMgLT4gPHBhcmVudD48c3Rh
cnQgbWlkZGxlIGVuZD48cGFyZW50PgotICAgIC8vICJwYXJlbnQiIC0+IG4vYQotICAgIC8vICJz
dGFydCIgLT4gQnJlYWtBdFN0YXJ0Ci0gICAgLy8gIiBtaWRkbGUgIiAtPiBuL2EKLSAgICAvLyAi
ZW5kIiAtPiBCcmVha0F0RW5kCi0gICAgLy8gInBhcmVudCIgLT4gbi9hCi0gICAgZW51bSBjbGFz
cyBEZXRhY2hpbmdSdWxlIHsKLSAgICAgICAgQnJlYWtBdFN0YXJ0ID0gMSA8PCAwLAotICAgICAg
ICBCcmVha0F0RW5kID0gMSA8PCAxCi0gICAgfTsKLSAgICB2b2lkIGFkZERldGFjaGluZ1J1bGUo
T3B0aW9uU2V0PERldGFjaGluZ1J1bGU+IGRldGFjaGluZ1J1bGUpIHsgbV9kZXRhY2hpbmdSdWxl
cy5hZGQoZGV0YWNoaW5nUnVsZSk7IH0KLSAgICBPcHRpb25TZXQ8RGV0YWNoaW5nUnVsZT4gZGV0
YWNoaW5nUnVsZXMoKSBjb25zdCB7IHJldHVybiBtX2RldGFjaGluZ1J1bGVzOyB9CisgICAgdm9p
ZCBzZXRXaWR0aChMYXlvdXRVbml0KTsKKyAgICBMYXlvdXRVbml0IHdpZHRoKCkgY29uc3Q7CiAK
LSAgICAvLyBOb24tYnJlYWthYmxlIHN0YXJ0L2VuZCBtYXJrcyBtYXJnaW4vcGFkZGluZy9ib3Jk
ZXIgc3BhY2UgKGV2ZW4gd2hlbiBpdCBkb2VzIG5vdCBkaXJlY3RseSBjb21lIGZyb20gdGhlIGFz
c29jaWF0ZWQgbGF5b3V0IGJveCkKLSAgICAvLyA8c3BhbiBzdHlsZT0icGFkZGluZzogNXB4Ij48
c3Bhbj5uZXN0ZWQgY29udGVudCB3aXRoIHBhZGRpbmcgcGFyZW50PC9zcGFuPC9zcGFuPgotICAg
IC8vIDxuZXN0ZWQgY29udGVudCB3aXRoIHBhZGRpbmcgcGFyZW50PiBpbmxpbmUgcnVuIGhhcyA1
cHggbm9uLWJyZWFrYWJsZSBzdGFydC9lbmQuCi0gICAgTGF5b3V0VW5pdCBub25CcmVha2FibGVT
dGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fbm9uQnJlYWthYmxlU3RhcnQ7IH0KLSAgICBMYXlvdXRV
bml0IG5vbkJyZWFrYWJsZUVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fbm9uQnJlYWthYmxlRW5kOyB9
Ci0gICAgdm9pZCBhZGROb25CcmVha2FibGVTdGFydChMYXlvdXRVbml0IHZhbHVlKSB7IG1fbm9u
QnJlYWthYmxlU3RhcnQgKz0gdmFsdWU7IH0KLSAgICB2b2lkIGFkZE5vbkJyZWFrYWJsZUVuZChM
YXlvdXRVbml0IHZhbHVlKSB7IG1fbm9uQnJlYWthYmxlRW5kICs9IHZhbHVlOyB9CisgICAgYm9v
bCBpc1RleHQoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gVHlwZTo6VGV4dDsgfQorICAgIGJv
b2wgaXNCb3goKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gVHlwZTo6Qm94OyB9CisgICAgYm9v
bCBpc0hhcmRMaW5lQnJlYWsoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gVHlwZTo6SGFyZExp
bmVCcmVhazsgfQorICAgIGJvb2wgaXNGbG9hdCgpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBU
eXBlOjpGbG9hdDsgfQorICAgIGJvb2wgaXNMaW5lQnJlYWsoKSBjb25zdCB7IHJldHVybiB0eXBl
KCkgPT0gVHlwZTo6SGFyZExpbmVCcmVhazsgfQorICAgIGJvb2wgaXNDb250YWluZXJTdGFydCgp
IGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBUeXBlOjpDb250YWluZXJTdGFydDsgfQorICAgIGJv
b2wgaXNDb250YWluZXJFbmQoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gVHlwZTo6Q29udGFp
bmVyRW5kOyB9CiAKIHByaXZhdGU6CiAgICAgY29uc3QgQm94JiBtX2xheW91dEJveDsKLSAgICBP
cHRpb25TZXQ8RGV0YWNoaW5nUnVsZT4gbV9kZXRhY2hpbmdSdWxlczsKLSAgICBMYXlvdXRVbml0
IG1fbm9uQnJlYWthYmxlU3RhcnQ7Ci0gICAgTGF5b3V0VW5pdCBtX25vbkJyZWFrYWJsZUVuZDsK
KyAgICBjb25zdCBUeXBlIG1fdHlwZTsKKyAgICBMYXlvdXRVbml0IG1fd2lkdGg7CisjaWYgIUFT
U0VSVF9ESVNBQkxFRAorICAgIGJvb2wgbV9oYXNWYWxpZFdpZHRoIHsgZmFsc2UgfTsKKyNlbmRp
ZgogfTsKIAotdXNpbmcgSW5saW5lQ29udGVudCA9IExpc3RIYXNoU2V0PHN0ZDo6dW5pcXVlX3B0
cjxJbmxpbmVJdGVtPj47Ci0KLWlubGluZSBJbmxpbmVJdGVtOjpJbmxpbmVJdGVtKGNvbnN0IEJv
eCYgbGF5b3V0Qm94KQoraW5saW5lIElubGluZUl0ZW06OklubGluZUl0ZW0oY29uc3QgQm94JiBs
YXlvdXRCb3gsIFR5cGUgdHlwZSkKICAgICA6IG1fbGF5b3V0Qm94KGxheW91dEJveCkKKyAgICAs
IG1fdHlwZSh0eXBlKQogewogfQogCi1pbmxpbmUgSW5saW5lSXRlbTo6VHlwZSBJbmxpbmVJdGVt
Ojp0eXBlKCkgY29uc3QKK2lubGluZSB2b2lkIElubGluZUl0ZW06OnNldFdpZHRoKExheW91dFVu
aXQgd2lkdGgpCiB7Ci0gICAgaWYgKGlzPElubGluZUJveD4obV9sYXlvdXRCb3gpICYmIGRvd25j
YXN0PElubGluZUJveD4obV9sYXlvdXRCb3gpLmhhc1RleHRDb250ZW50KCkpCi0gICAgICAgIHJl
dHVybiBUeXBlOjpUZXh0OwotCi0gICAgaWYgKGlzPExpbmVCcmVha0JveD4obV9sYXlvdXRCb3gp
KQotICAgICAgICByZXR1cm4gVHlwZTo6SGFyZExpbmVCcmVhazsKLQotICAgIGlmIChtX2xheW91
dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpKQotICAgICAgICByZXR1cm4gVHlwZTo6RmxvYXQ7
Ci0KLSAgICBBU1NFUlQobV9sYXlvdXRCb3guaXNJbmxpbmVMZXZlbEJveCgpKTsKLSAgICByZXR1
cm4gVHlwZTo6SW5saW5lQm94OworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBtX2hhc1ZhbGlk
V2lkdGggPSB0cnVlOworI2VuZGlmCisgICAgbV93aWR0aCA9IHdpZHRoOwogfQogCi1pbmxpbmUg
U3RyaW5nIElubGluZUl0ZW06OnRleHRDb250ZW50KCkgY29uc3QKK2lubGluZSBMYXlvdXRVbml0
IElubGluZUl0ZW06OndpZHRoKCkgY29uc3QKIHsKLSAgICBpZiAodHlwZSgpICE9IFR5cGU6OlRl
eHQpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICByZXR1cm4gZG93bmNhc3Q8SW5saW5lQm94
PihtX2xheW91dEJveCkudGV4dENvbnRlbnQoKTsKKyAgICBBU1NFUlQobV9oYXNWYWxpZFdpZHRo
KTsKKyAgICByZXR1cm4gbV93aWR0aDsKIH0KIAorI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0lOTElORV9JVEVNKFRvVmFsdWVUeXBlTmFtZSwgcHJlZGljYXRlKSBcCitTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OkxheW91dDo6VG9WYWx1ZVR5cGVOYW1lKSBcCisg
ICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkxheW91dDo6SW5saW5lSXRlbSYg
aW5saW5lSXRlbSkgeyByZXR1cm4gaW5saW5lSXRlbS5wcmVkaWNhdGU7IH0gXAorU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19FTkQoKQorCiB9CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCb3guaCBiL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCb3guaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li40NjQ0MjI5YmE1ODRmN2FiNmU3ZWJhZmRkY2EyMWUyNmRmYzNjZTU5Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJv
eC5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVO
QUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQorCisjaW5jbHVkZSAiRGlzcGxheUJveC5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgTGF5b3V0IHsKKworY2xhc3MgTGlu
ZUJveCB7CitwdWJsaWM6CisgICAgTGluZUJveChEaXNwbGF5OjpSZWN0KTsKKyAgICAKKyAgICBM
YXlvdXRQb2ludCBsb2dpY2FsVG9wTGVmdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdC50b3BMZWZ0
KCk7IH0KKworICAgIExheW91dFVuaXQgbG9naWNhbExlZnQoKSBjb25zdCB7IHJldHVybiBtX3Jl
Y3QubGVmdCgpOyB9CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHQoKSBjb25zdCB7IHJldHVy
biBtX3JlY3QucmlnaHQoKTsgfQorICAgIExheW91dFVuaXQgbG9naWNhbFRvcCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVjdC50b3AoKTsgfQorICAgIExheW91dFVuaXQgbG9naWNhbEJvdHRvbSgpIGNv
bnN0IHsgcmV0dXJuIG1fcmVjdC5ib3R0b20oKTsgfQorCisgICAgTGF5b3V0VW5pdCBsb2dpY2Fs
V2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3JlY3Qud2lkdGgoKTsgfQorICAgIExheW91dFVuaXQg
bG9naWNhbEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdC5oZWlnaHQoKTsgfQorCitwcml2
YXRlOgorICAgIERpc3BsYXk6OlJlY3QgbV9yZWN0OworfTsKKworaW5saW5lIExpbmVCb3g6Okxp
bmVCb3goRGlzcGxheTo6UmVjdCByZWN0KQorICAgIDogbV9yZWN0KHJlY3QpCisgICAgeworICAg
IH0KKworfQorfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9p
bmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCcmVha2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCcmVha2VyLmNwcAppbmRleCA1NzZhMGJi
Nzk1NDM3ZTAxMzc0MmE3Mjg2OTQzYWYyNDgxMDA0ZmVjLi42MTY0NmI4YTE1NGJhZTk2OWQ4OTVm
MDc2OGE4YjY3MTk3YTQ1OGQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5s
aW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnJlYWtlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJyZWFrZXIuY3BwCkBAIC0yOCwxNzMg
KzI4LDEwMiBAQAogCiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCiAKLSNp
bmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkh5cGhlbmF0aW9uLmgiCi0jaW5jbHVk
ZSAiSW5saW5lUnVuUHJvdmlkZXIuaCIKLSNpbmNsdWRlICJUZXh0VXRpbC5oIgotI2luY2x1ZGUg
PHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisjaW5jbHVkZSAiTGF5b3V0U3RhdGUuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIExheW91dCB7CiAKLVdURl9NQUtFX0lTT19BTExP
Q0FURURfSU1QTChJbmxpbmVMaW5lQnJlYWtlcik7Ci0KLUlubGluZUxpbmVCcmVha2VyOjpJbmxp
bmVMaW5lQnJlYWtlcihjb25zdCBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IElubGlu
ZUNvbnRlbnQmIGlubGluZUNvbnRlbnQsIGNvbnN0IFZlY3RvcjxJbmxpbmVSdW5Qcm92aWRlcjo6
UnVuPiYgaW5saW5lUnVucykKK0xpbmVCcmVha2VyOjpMaW5lQnJlYWtlcihjb25zdCBMYXlvdXRT
dGF0ZSYgbGF5b3V0U3RhdGUpCiAgICAgOiBtX2xheW91dFN0YXRlKGxheW91dFN0YXRlKQotICAg
ICwgbV9pbmxpbmVDb250ZW50KGlubGluZUNvbnRlbnQpCi0gICAgLCBtX2lubGluZVJ1bnMoaW5s
aW5lUnVucykKIHsKIH0KIAotT3B0aW9uYWw8SW5saW5lTGluZUJyZWFrZXI6OlJ1bj4gSW5saW5l
TGluZUJyZWFrZXI6Om5leHRSdW4oTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbExlZnQsIExheW91
dFVuaXQgYXZhaWxhYmxlV2lkdGgsIGJvb2wgbGluZUlzRW1wdHkpCitMaW5lQnJlYWtlcjo6QnJl
YWtpbmdDb250ZXh0IExpbmVCcmVha2VyOjpicmVha2luZ0NvbnRleHQoSW5saW5lSXRlbSYgaW5s
aW5lSXRlbSwgTGluZUNvbnRleHQgbGluZUNvbnRleHQpCiB7Ci0gICAgaWYgKGlzQXRDb250ZW50
RW5kKCkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBJbmxpbmVSdW5Qcm92
aWRlcjo6UnVuIGN1cnJlbnRJbmxpbmVSdW4gPSBtX2lubGluZVJ1bnNbbV9jdXJyZW50UnVuSW5k
ZXhdOwotICAgIC8vIEFkanVzdCB0aGUgY3VycmVudCBydW4gaWYgaXQgaXMgc3BsaXQgbWlkd29y
ZC4KLSAgICBpZiAobV9zcGxpdFBvc2l0aW9uKSB7Ci0gICAgICAgIEFTU0VSVChjdXJyZW50SW5s
aW5lUnVuLmlzVGV4dCgpKTsKLSAgICAgICAgbV9zcGxpdFBvc2l0aW9uID0gV1RGOjpudWxsb3B0
OwotICAgIH0KLQotICAgIGlmIChjdXJyZW50SW5saW5lUnVuLmlzTGluZUJyZWFrKCkpIHsKLSAg
ICAgICAgKyttX2N1cnJlbnRSdW5JbmRleDsKLSAgICAgICAgcmV0dXJuIFJ1biB7IFJ1bjo6UG9z
aXRpb246OkxpbmVFbmQsIDAsIGN1cnJlbnRJbmxpbmVSdW4gfTsKLSAgICB9Ci0KLSAgICBhdXRv
IGNvbnRlbnRXaWR0aCA9IHJ1bldpZHRoKGN1cnJlbnRJbmxpbmVSdW4sIGNvbnRlbnRMb2dpY2Fs
TGVmdCk7Ci0gICAgLy8gMS4gUGxlbnR5IG9mIHNwYWNlIGxlZnQuCi0gICAgaWYgKGNvbnRlbnRX
aWR0aCA8PSBhdmFpbGFibGVXaWR0aCkgewotICAgICAgICArK21fY3VycmVudFJ1bkluZGV4Owot
ICAgICAgICByZXR1cm4gUnVuIHsgbGluZUlzRW1wdHkgPyBSdW46OlBvc2l0aW9uOjpMaW5lQmVn
aW4gOiBSdW46OlBvc2l0aW9uOjpVbmRldGVybWluZWQsIGNvbnRlbnRXaWR0aCwgY3VycmVudElu
bGluZVJ1biB9OwotICAgIH0KLQotICAgIC8vIDIuIE5vIHNwYWNlIGxlZnQgd2hhdHNvZXZlci4K
LSAgICBpZiAoYXZhaWxhYmxlV2lkdGggPD0gMCkgewotICAgICAgICArK21fY3VycmVudFJ1bklu
ZGV4OwotICAgICAgICByZXR1cm4gUnVuIHsgUnVuOjpQb3NpdGlvbjo6TGluZUJlZ2luLCBjb250
ZW50V2lkdGgsIGN1cnJlbnRJbmxpbmVSdW4gfTsKLSAgICB9Ci0KLSAgICAvLyAzLiBTb21lIHNw
YWNlIGxlZnQuIExldCdzIGZpbmQgb3V0IHdoYXQgd2UgbmVlZCB0byBkbyB3aXRoIHRoaXMgcnVu
LgotICAgIGF1dG8gYnJlYWtpbmdCZWhhdmlvciA9IGxpbmVCcmVha2luZ0JlaGF2aW9yKGN1cnJl
bnRJbmxpbmVSdW4sIGxpbmVJc0VtcHR5KTsKLSAgICBpZiAoYnJlYWtpbmdCZWhhdmlvciA9PSBM
aW5lQnJlYWtpbmdCZWhhdmlvcjo6S2VlcCkgewotICAgICAgICArK21fY3VycmVudFJ1bkluZGV4
OwotICAgICAgICByZXR1cm4gUnVuIHsgbGluZUlzRW1wdHkgPyBSdW46OlBvc2l0aW9uOjpMaW5l
QmVnaW4gOiBSdW46OlBvc2l0aW9uOjpVbmRldGVybWluZWQsIGNvbnRlbnRXaWR0aCwgY3VycmVu
dElubGluZVJ1biB9OwotICAgIH0KLQotICAgIGlmIChicmVha2luZ0JlaGF2aW9yID09IExpbmVC
cmVha2luZ0JlaGF2aW9yOjpXcmFwVG9OZXh0TGluZSkgewotICAgICAgICArK21fY3VycmVudFJ1
bkluZGV4OwotICAgICAgICByZXR1cm4gUnVuIHsgUnVuOjpQb3NpdGlvbjo6TGluZUJlZ2luLCBj
b250ZW50V2lkdGgsIGN1cnJlbnRJbmxpbmVSdW4gfTsKLSAgICB9Ci0KLSAgICBBU1NFUlQoYnJl
YWtpbmdCZWhhdmlvciA9PSBMaW5lQnJlYWtpbmdCZWhhdmlvcjo6QnJlYWspOwotICAgIC8vIFNw
bGl0IGNvbnRlbnQuCi0gICAgcmV0dXJuIHNwbGl0UnVuKGN1cnJlbnRJbmxpbmVSdW4sIGNvbnRl
bnRMb2dpY2FsTGVmdCwgYXZhaWxhYmxlV2lkdGgsIGxpbmVJc0VtcHR5KTsKKyAgICBpbmxpbmVJ
dGVtLnNldFdpZHRoKHJ1bldpZHRoKGlubGluZUl0ZW0sIGxpbmVDb250ZXh0LmxvZ2ljYWxMZWZ0
KSk7CisgICAgLy8gRmlyc3QgY29udGVudCBhbHdheXMgc3RheXMgb24gbGluZS4KKyAgICBpZiAo
bGluZUNvbnRleHQuaXNFbXB0eSB8fCBpbmxpbmVJdGVtLndpZHRoKCkgPD0gbGluZUNvbnRleHQu
YXZhaWxhYmxlV2lkdGgpCisgICAgICAgIHJldHVybiB7IEJyZWFraW5nQmVoYXZpb3I6OktlZXAs
IGlzQXRCcmVha2luZ09wcG9ydHVuaXR5KGlubGluZUl0ZW0pIH07CisKKyAgICBpZiAoaXM8SW5s
aW5lVGV4dEl0ZW0+KGlubGluZUl0ZW0pKQorICAgICAgICByZXR1cm4geyB3b3JkQnJlYWtpbmdC
ZWhhdmlvcihkb3duY2FzdDxJbmxpbmVUZXh0SXRlbT4oaW5saW5lSXRlbSksIGxpbmVDb250ZXh0
LmlzRW1wdHkpLCBpc0F0QnJlYWtpbmdPcHBvcnR1bml0eShpbmxpbmVJdGVtKSB9OworCisgICAg
Ly8gV3JhcCBub24tdGV4dCBib3hlcyB0byB0aGUgbmV4dCBsaW5lIHVubGVzcyB3ZSBjYW4gdHJp
bSB0cmFpbGluZyB3aGl0ZXNwYWNlLgorICAgIGF1dG8gYXZhaWxhYmxlV2lkdGggPSBsaW5lQ29u
dGV4dC5hdmFpbGFibGVXaWR0aCArIGxpbmVDb250ZXh0LnRyaW1tYWJsZVdpZHRoOworICAgIGlm
IChpbmxpbmVJdGVtLndpZHRoKCkgPD0gYXZhaWxhYmxlV2lkdGgpCisgICAgICAgIHJldHVybiB7
IEJyZWFraW5nQmVoYXZpb3I6OktlZXAsIGlzQXRCcmVha2luZ09wcG9ydHVuaXR5KGlubGluZUl0
ZW0pIH07CisgICAgcmV0dXJuIHsgQnJlYWtpbmdCZWhhdmlvcjo6V3JhcCwgaXNBdEJyZWFraW5n
T3Bwb3J0dW5pdHkoaW5saW5lSXRlbSkgfTsKIH0KIAotYm9vbCBJbmxpbmVMaW5lQnJlYWtlcjo6
aXNBdENvbnRlbnRFbmQoKSBjb25zdAorTGluZUJyZWFrZXI6OkJyZWFraW5nQmVoYXZpb3IgTGlu
ZUJyZWFrZXI6OndvcmRCcmVha2luZ0JlaGF2aW9yKGNvbnN0IElubGluZVRleHRJdGVtJiBpbmxp
bmVJdGVtLCBib29sIGxpbmVJc0VtcHR5KSBjb25zdAogewotICAgIHJldHVybiBtX2N1cnJlbnRS
dW5JbmRleCA9PSBtX2lubGluZVJ1bnMuc2l6ZSgpOwotfQotCi1JbmxpbmVMaW5lQnJlYWtlcjo6
TGluZUJyZWFraW5nQmVoYXZpb3IgSW5saW5lTGluZUJyZWFrZXI6OmxpbmVCcmVha2luZ0JlaGF2
aW9yKGNvbnN0IElubGluZVJ1blByb3ZpZGVyOjpSdW4mIGlubGluZVJ1biwgYm9vbCBsaW5lSXNF
bXB0eSkKLXsKLSAgICAvLyBMaW5lIGJyZWFraW5nIGJlaGF2aW91cjoKKyAgICAvLyBXb3JkIGJy
ZWFraW5nIGJlaGF2aW91cjoKICAgICAvLyAxLiBXaGl0ZXNhcGNlIGNvbGxhcHNlIG9uIC0+IHB1
c2ggd2hpdGVzcGFjZSB0byBuZXh0IGxpbmUuCiAgICAgLy8gMi4gV2hpdGVzcGFjZSBjb2xsYXBz
ZSBvZmYgLT4gd2hpdGVzcGFjZSBpcyBzcGxpdCB3aGVyZSBwb3NzaWJsZS4KICAgICAvLyAzLiBO
b24td2hpdGVzcGFjZSAtPiBmaXJzdCBydW4gb24gdGhlIGxpbmUgLT4gZWl0aGVyIHNwbGl0IG9y
IGtlcHQgb24gdGhlIGxpbmUuIChkZXBlbmRzIG9uIG92ZXJmbG93LXdyYXApCiAgICAgLy8gNC4g
Tm9uLXdoaXRlc3BhY2UgLT4gYWxyZWFkeSBjb250ZW50IG9uIHRoZSBsaW5lIC0+IGVpdGhlciBn
ZXRzIHNwbGl0ICh3b3JkLWJyZWFrOiBicmVhay1hbGwpIG9yIGdldHMgcHVzaGVkIHRvIHRoZSBu
ZXh0IGxpbmUuCiAgICAgLy8gKEh5cGhlbmF0ZSB3aGVuIHBvc3NpYmxlKQogICAgIC8vIDUuIE5v
bi10ZXh0IHR5cGUgLT4gbmV4dCBsaW5lCi0gICAgYXV0byYgc3R5bGUgPSBpbmxpbmVSdW4uc3R5
bGUoKTsKKyAgICBhdXRvJiBzdHlsZSA9IGlubGluZUl0ZW0uc3R5bGUoKTsKIAotICAgIGlmIChp
bmxpbmVSdW4uaXNXaGl0ZXNwYWNlKCkpCi0gICAgICAgIHJldHVybiBzdHlsZS5jb2xsYXBzZVdo
aXRlU3BhY2UoKSA/IExpbmVCcmVha2luZ0JlaGF2aW9yOjpXcmFwVG9OZXh0TGluZSA6IExpbmVC
cmVha2luZ0JlaGF2aW9yOjpCcmVhazsKKyAgICBpZiAoaW5saW5lSXRlbS5pc1doaXRlc3BhY2Uo
KSkKKyAgICAgICAgcmV0dXJuIHN0eWxlLmNvbGxhcHNlV2hpdGVTcGFjZSgpID8gQnJlYWtpbmdC
ZWhhdmlvcjo6V3JhcCA6IEJyZWFraW5nQmVoYXZpb3I6OkJyZWFrOwogCi0gICAgaWYgKGlubGlu
ZVJ1bi5pc05vbldoaXRlc3BhY2UoKSkgewotICAgICAgICBhdXRvIHNob3VsZEh5cGVuYXRlID0g
IW1faHlwaGVuYXRpb25Jc0Rpc2FibGVkICYmIHN0eWxlLmh5cGhlbnMoKSA9PSBIeXBoZW5zOjpB
dXRvICYmIGNhbkh5cGhlbmF0ZShzdHlsZS5sb2NhbGUoKSk7Ci0gICAgICAgIGlmIChzaG91bGRI
eXBlbmF0ZSkKLSAgICAgICAgICAgIHJldHVybiBMaW5lQnJlYWtpbmdCZWhhdmlvcjo6QnJlYWs7
CisgICAgYXV0byBzaG91bGRIeXBlbmF0ZSA9ICFtX2h5cGhlbmF0aW9uSXNEaXNhYmxlZCAmJiBz
dHlsZS5oeXBoZW5zKCkgPT0gSHlwaGVuczo6QXV0byAmJiBjYW5IeXBoZW5hdGUoc3R5bGUubG9j
YWxlKCkpOworICAgIGlmIChzaG91bGRIeXBlbmF0ZSkKKyAgICAgICAgcmV0dXJuIEJyZWFraW5n
QmVoYXZpb3I6OkJyZWFrOwogCi0gICAgICAgIGlmIChzdHlsZS5hdXRvV3JhcCgpKSB7Ci0gICAg
ICAgICAgICAvLyBCcmVhayBhbnkgd29yZAotICAgICAgICAgICAgaWYgKHN0eWxlLndvcmRCcmVh
aygpID09IFdvcmRCcmVhazo6QnJlYWtBbGwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIExpbmVC
cmVha2luZ0JlaGF2aW9yOjpCcmVhazsKKyAgICBpZiAoc3R5bGUuYXV0b1dyYXAoKSkgeworICAg
ICAgICAvLyBCcmVhayBhbnkgd29yZAorICAgICAgICBpZiAoc3R5bGUud29yZEJyZWFrKCkgPT0g
V29yZEJyZWFrOjpCcmVha0FsbCkKKyAgICAgICAgICAgIHJldHVybiBCcmVha2luZ0JlaGF2aW9y
OjpCcmVhazsKIAotICAgICAgICAgICAgLy8gQnJlYWsgZmlyc3QgcnVuIG9uIGxpbmUuCi0gICAg
ICAgICAgICBpZiAobGluZUlzRW1wdHkgJiYgc3R5bGUuYnJlYWtXb3JkcygpICYmIHN0eWxlLnBy
ZXNlcnZlTmV3bGluZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBMaW5lQnJlYWtpbmdCZWhh
dmlvcjo6QnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBOb24tYnJlYWthYmxlIG5vbi13
aGl0ZXNwYWNlIHJ1bi4KLSAgICAgICAgcmV0dXJuIGxpbmVJc0VtcHR5ID8gTGluZUJyZWFraW5n
QmVoYXZpb3I6OktlZXAgOiBMaW5lQnJlYWtpbmdCZWhhdmlvcjo6V3JhcFRvTmV4dExpbmU7Cisg
ICAgICAgIC8vIEJyZWFrIGZpcnN0IHJ1biBvbiBsaW5lLgorICAgICAgICBpZiAobGluZUlzRW1w
dHkgJiYgc3R5bGUuYnJlYWtXb3JkcygpICYmIHN0eWxlLnByZXNlcnZlTmV3bGluZSgpKQorICAg
ICAgICAgICAgcmV0dXJuIEJyZWFraW5nQmVoYXZpb3I6OkJyZWFrOwogICAgIH0KIAotICAgIEFT
U0VSVChpbmxpbmVSdW4uaXNCb3goKSB8fCBpbmxpbmVSdW4uaXNGbG9hdCgpKTsKLSAgICAvLyBO
b24tdGV4dCBpbmxpbmUgcnVucy4KLSAgICByZXR1cm4gTGluZUJyZWFraW5nQmVoYXZpb3I6Oldy
YXBUb05leHRMaW5lOworICAgIC8vIE5vbi1icmVha2FibGUgbm9uLXdoaXRlc3BhY2UgcnVuLgor
ICAgIHJldHVybiBsaW5lSXNFbXB0eSA/IEJyZWFraW5nQmVoYXZpb3I6OktlZXAgOiBCcmVha2lu
Z0JlaGF2aW9yOjpXcmFwOwogfQogCi1MYXlvdXRVbml0IElubGluZUxpbmVCcmVha2VyOjpydW5X
aWR0aChjb25zdCBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuJiBpbmxpbmVSdW4sIExheW91dFVuaXQg
Y29udGVudExvZ2ljYWxMZWZ0KSBjb25zdAorTGF5b3V0VW5pdCBMaW5lQnJlYWtlcjo6cnVuV2lk
dGgoY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSwgTGF5b3V0VW5pdCBjb250ZW50TG9naWNh
bExlZnQpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKCFpbmxpbmVSdW4uaXNMaW5lQnJlYWsoKSk7Cisg
ICAgaWYgKGlubGluZUl0ZW0uaXNMaW5lQnJlYWsoKSkKKyAgICAgICAgcmV0dXJuIDA7CiAKLSAg
ICBpZiAoaW5saW5lUnVuLmlzVGV4dCgpKQotICAgICAgICByZXR1cm4gdGV4dFdpZHRoKGlubGlu
ZVJ1biwgY29udGVudExvZ2ljYWxMZWZ0KTsKKyAgICBpZiAoaXM8SW5saW5lVGV4dEl0ZW0+KGlu
bGluZUl0ZW0pKQorICAgICAgICByZXR1cm4gdGV4dFdpZHRoKGRvd25jYXN0PElubGluZVRleHRJ
dGVtPihpbmxpbmVJdGVtKSwgY29udGVudExvZ2ljYWxMZWZ0KTsKIAotICAgIEFTU0VSVChpbmxp
bmVSdW4uaXNCb3goKSB8fCBpbmxpbmVSdW4uaXNGbG9hdCgpKTsKLSAgICBhdXRvJiBpbmxpbmVJ
dGVtID0gaW5saW5lUnVuLmlubGluZUl0ZW0oKTsKICAgICBhdXRvJiBsYXlvdXRCb3ggPSBpbmxp
bmVJdGVtLmxheW91dEJveCgpOwogICAgIEFTU0VSVChtX2xheW91dFN0YXRlLmhhc0Rpc3BsYXlC
b3gobGF5b3V0Qm94KSk7CiAgICAgYXV0byYgZGlzcGxheUJveCA9IG1fbGF5b3V0U3RhdGUuZGlz
cGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpOwotICAgIHJldHVybiBpbmxpbmVJdGVtLm5v
bkJyZWFrYWJsZVN0YXJ0KCkgKyBkaXNwbGF5Qm94LndpZHRoKCkgKyBpbmxpbmVJdGVtLm5vbkJy
ZWFrYWJsZUVuZCgpOwotfQogCi1MYXlvdXRVbml0IElubGluZUxpbmVCcmVha2VyOjp0ZXh0V2lk
dGgoY29uc3QgSW5saW5lUnVuUHJvdmlkZXI6OlJ1biYgaW5saW5lUnVuLCBMYXlvdXRVbml0IGNv
bnRlbnRMb2dpY2FsTGVmdCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogRmluZCBhIHdheSB0byBt
ZXJnZSB0aGlzIGFuZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OnJ1bldpZHRo
LgotICAgIGF1dG8mIGlubGluZUl0ZW0gPSBpbmxpbmVSdW4uaW5saW5lSXRlbSgpOwotICAgIGF1
dG8gdGV4dENvbnRleHQgPSBpbmxpbmVSdW4udGV4dENvbnRleHQoKTsKLSAgICBhdXRvIHN0YXJ0
UG9zaXRpb24gPSB0ZXh0Q29udGV4dC0+c3RhcnQoKTsKLSAgICBhdXRvIGxlbmd0aCA9IHRleHRD
b250ZXh0LT5pc0NvbGxhcHNlZCgpID8gMSA6IHRleHRDb250ZXh0LT5sZW5ndGgoKTsKLQotICAg
IC8vIEZJWE1FOiBJdCBkb2VzIG5vdCBkbyBwcm9wZXIga2VybmluZy9saWdhdHVyZSBoYW5kbGlu
Zy4KLSAgICBMYXlvdXRVbml0IHdpZHRoOwotICAgIGF1dG8gaXRlcmF0b3IgPSBtX2lubGluZUNv
bnRlbnQuZmluZChjb25zdF9jYXN0PElubGluZUl0ZW0qPigmaW5saW5lSXRlbSkpOwotI2lmICFB
U1NFUlRfRElTQUJMRUQKLSAgICBhdXRvIGlubGluZUl0ZW1FbmQgPSBtX2lubGluZUNvbnRlbnQu
ZW5kKCk7Ci0jZW5kaWYKLSAgICB3aGlsZSAobGVuZ3RoKSB7Ci0gICAgICAgIEFTU0VSVChpdGVy
YXRvciAhPSBpbmxpbmVJdGVtRW5kKTsKLSAgICAgICAgYXV0byYgY3VycmVudElubGluZUl0ZW0g
PSAqKml0ZXJhdG9yOwotICAgICAgICBhdXRvIGlubGluZUl0ZW1MZW5ndGggPSBjdXJyZW50SW5s
aW5lSXRlbS50ZXh0Q29udGVudCgpLmxlbmd0aCgpOwotICAgICAgICBhdXRvIGVuZFBvc2l0aW9u
ID0gc3RkOjptaW48SXRlbVBvc2l0aW9uPihzdGFydFBvc2l0aW9uICsgbGVuZ3RoLCBpbmxpbmVJ
dGVtTGVuZ3RoKTsKLSAgICAgICAgYXV0byB0ZXh0V2lkdGggPSBUZXh0VXRpbDo6d2lkdGgoY3Vy
cmVudElubGluZUl0ZW0sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uLCBjb250ZW50TG9naWNh
bExlZnQpOwotCi0gICAgICAgIGF1dG8gbm9uQnJlYWthYmxlU3RhcnQgPSAhc3RhcnRQb3NpdGlv
biA/IGN1cnJlbnRJbmxpbmVJdGVtLm5vbkJyZWFrYWJsZVN0YXJ0KCkgOiAwX2x1OwotICAgICAg
ICBhdXRvIG5vbkJyZWFrYWJsZUVuZCA9ICBlbmRQb3NpdGlvbiA9PSBpbmxpbmVJdGVtTGVuZ3Ro
ID8gY3VycmVudElubGluZUl0ZW0ubm9uQnJlYWthYmxlRW5kKCkgOiAwX2x1OwotICAgICAgICBh
dXRvIGNvbnRlbnRXaWR0aCA9IG5vbkJyZWFrYWJsZVN0YXJ0ICsgdGV4dFdpZHRoICsgbm9uQnJl
YWthYmxlRW5kOwotICAgICAgICBjb250ZW50TG9naWNhbExlZnQgKz0gY29udGVudFdpZHRoOwot
ICAgICAgICB3aWR0aCArPSBjb250ZW50V2lkdGg7Ci0gICAgICAgIGxlbmd0aCAtPSAoZW5kUG9z
aXRpb24gLSBzdGFydFBvc2l0aW9uKTsKLQotICAgICAgICBzdGFydFBvc2l0aW9uID0gMDsKLSAg
ICAgICAgKytpdGVyYXRvcjsKLSAgICB9Ci0gICAgcmV0dXJuIHdpZHRoOworICAgIGlmIChpbmxp
bmVJdGVtLmlzQ29udGFpbmVyU3RhcnQoKSkKKyAgICAgICAgcmV0dXJuIGRpc3BsYXlCb3gubWFy
Z2luU3RhcnQoKSArIGRpc3BsYXlCb3guYm9yZGVyTGVmdCgpICsgZGlzcGxheUJveC5wYWRkaW5n
TGVmdCgpLnZhbHVlT3IoMCk7CisKKyAgICBpZiAoaW5saW5lSXRlbS5pc0NvbnRhaW5lckVuZCgp
KQorICAgICAgICByZXR1cm4gZGlzcGxheUJveC5tYXJnaW5FbmQoKSArIGRpc3BsYXlCb3guYm9y
ZGVyUmlnaHQoKSArIGRpc3BsYXlCb3gucGFkZGluZ1JpZ2h0KCkudmFsdWVPcigwKTsKKworICAg
IGlmIChpbmxpbmVJdGVtLmlzRmxvYXQoKSkKKyAgICAgICAgcmV0dXJuIGRpc3BsYXlCb3gubWFy
Z2luQm94V2lkdGgoKTsKKworICAgIHJldHVybiBkaXNwbGF5Qm94LndpZHRoKCk7CiB9CiAKLUlu
bGluZUxpbmVCcmVha2VyOjpSdW4gSW5saW5lTGluZUJyZWFrZXI6OnNwbGl0UnVuKGNvbnN0IElu
bGluZVJ1blByb3ZpZGVyOjpSdW4mIGlubGluZVJ1biwgTGF5b3V0VW5pdCwgTGF5b3V0VW5pdCwg
Ym9vbCkKK2Jvb2wgTGluZUJyZWFrZXI6OmlzQXRCcmVha2luZ09wcG9ydHVuaXR5KGNvbnN0IElu
bGluZUl0ZW0mIGlubGluZUl0ZW0pCiB7Ci0gICAgcmV0dXJuIHsgUnVuOjpQb3NpdGlvbjo6VW5k
ZXRlcm1pbmVkLCB7IH0sIGlubGluZVJ1biB9OworICAgIGlmIChpczxJbmxpbmVUZXh0SXRlbT4o
aW5saW5lSXRlbSkpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxJbmxpbmVUZXh0SXRlbT4oaW5s
aW5lSXRlbSkuaXNXaGl0ZXNwYWNlKCk7CisgICAgcmV0dXJuICFpbmxpbmVJdGVtLmlzRmxvYXQo
KSAmJiAhaW5saW5lSXRlbS5pc0NvbnRhaW5lclN0YXJ0KCkgJiYgIWlubGluZUl0ZW0uaXNDb250
YWluZXJFbmQoKTsKIH0KIAotT3B0aW9uYWw8SXRlbVBvc2l0aW9uPiBJbmxpbmVMaW5lQnJlYWtl
cjo6YWRqdXN0U3BsaXRQb3NpdGlvbldpdGhIeXBoZW5hdGlvbihjb25zdCBJbmxpbmVSdW5Qcm92
aWRlcjo6UnVuJiwgSXRlbVBvc2l0aW9uLCBMYXlvdXRVbml0LCBMYXlvdXRVbml0LCBib29sKSBj
b25zdAorTGF5b3V0VW5pdCBMaW5lQnJlYWtlcjo6dGV4dFdpZHRoKGNvbnN0IElubGluZVRleHRJ
dGVtJiBpbmxpbmVUZXh0SXRlbSwgTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbExlZnQpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIHsgfTsKKyAgICBhdXRvIGVuZCA9IGlubGluZVRleHRJdGVtLmlzQ29s
bGFwc2VkKCkgPyBpbmxpbmVUZXh0SXRlbS5zdGFydCgpICsgMSA6IGlubGluZVRleHRJdGVtLmVu
ZCgpOworICAgIHJldHVybiBUZXh0VXRpbDo6d2lkdGgoZG93bmNhc3Q8SW5saW5lQm94Pihpbmxp
bmVUZXh0SXRlbS5sYXlvdXRCb3goKSksIGlubGluZVRleHRJdGVtLnN0YXJ0KCksIGVuZCwgY29u
dGVudExvZ2ljYWxMZWZ0KTsKIH0KLQogfQogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnJlYWtlci5oIGIvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJyZWFrZXIuaApp
bmRleCAzODdiMGZjZjM1ZjY1NjgxNTBhZjViMDM2Y2EwYWVjOGJjMWI3OTg5Li4wNjUzMzAyNjNk
ZDdhNGM5NmIyZDk0M2Y3OGM0MTMyYmM4NGM2NDM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnJlYWtlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCcmVha2VyLmgKQEAg
LTI3LDQxICsyNywzNyBAQAogCiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQp
CiAKLSNpbmNsdWRlICJJbmxpbmVSdW5Qcm92aWRlci5oIgotI2luY2x1ZGUgPHd0Zi9Jc29NYWxs
b2MuaD4KLQogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIExheW91dCB7CiAKLWNsYXNz
IElubGluZUxpbmVCcmVha2VyIHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKElubGluZUxp
bmVCcmVha2VyKTsKK2NsYXNzIElubGluZVRleHRJdGVtOworCitjbGFzcyBMaW5lQnJlYWtlciB7
CiBwdWJsaWM6Ci0gICAgSW5saW5lTGluZUJyZWFrZXIoY29uc3QgTGF5b3V0U3RhdGUmLCBjb25z
dCBJbmxpbmVDb250ZW50JiwgY29uc3QgVmVjdG9yPElubGluZVJ1blByb3ZpZGVyOjpSdW4+Jik7
CisgICAgTGluZUJyZWFrZXIoY29uc3QgTGF5b3V0U3RhdGUmKTsKIAotICAgIHN0cnVjdCBSdW4g
ewotICAgICAgICBlbnVtIGNsYXNzIFBvc2l0aW9uIHsgVW5kZXRlcm1pbmVkLCBMaW5lQmVnaW4s
IExpbmVFbmQgfTsKLSAgICAgICAgUG9zaXRpb24gcG9zaXRpb247Ci0gICAgICAgIExheW91dFVu
aXQgd2lkdGg7Ci0gICAgICAgIElubGluZVJ1blByb3ZpZGVyOjpSdW4gY29udGVudDsKKyAgICBl
bnVtIGNsYXNzIEJyZWFraW5nQmVoYXZpb3IgeyBLZWVwLCBCcmVhaywgV3JhcCB9OworICAgIHN0
cnVjdCBCcmVha2luZ0NvbnRleHQgeworICAgICAgICBCcmVha2luZ0JlaGF2aW9yIGJyZWFraW5n
QmVoYXZpb3I7CisgICAgICAgIGJvb2wgaXNBdEJyZWFraW5nT3Bwb3J0dW5pdHkgeyBmYWxzZSB9
OworICAgIH07CisgICAgc3RydWN0IExpbmVDb250ZXh0IHsKKyAgICAgICAgTGF5b3V0VW5pdCBh
dmFpbGFibGVXaWR0aDsKKyAgICAgICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdDsKKyAgICAgICAg
TGF5b3V0VW5pdCB0cmltbWFibGVXaWR0aDsKKyAgICAgICAgYm9vbCBpc0VtcHR5IHsgZmFsc2Ug
fTsKICAgICB9OwotICAgIE9wdGlvbmFsPFJ1bj4gbmV4dFJ1bihMYXlvdXRVbml0IGNvbnRlbnRM
b2dpY2FsTGVmdCwgTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCwgYm9vbCBsaW5lSXNFbXB0eSk7
CisgICAgQnJlYWtpbmdDb250ZXh0IGJyZWFraW5nQ29udGV4dChJbmxpbmVJdGVtJiwgY29uc3Qg
TGluZUNvbnRleHQpOwogCiBwcml2YXRlOgotICAgIGVudW0gY2xhc3MgTGluZUJyZWFraW5nQmVo
YXZpb3IgeyBLZWVwLCBCcmVhaywgV3JhcFRvTmV4dExpbmUgfTsKLSAgICBMaW5lQnJlYWtpbmdC
ZWhhdmlvciBsaW5lQnJlYWtpbmdCZWhhdmlvcihjb25zdCBJbmxpbmVSdW5Qcm92aWRlcjo6UnVu
JiwgYm9vbCBsaW5lSXNFbXB0eSk7Ci0gICAgYm9vbCBpc0F0Q29udGVudEVuZCgpIGNvbnN0Owot
ICAgIFJ1biBzcGxpdFJ1bihjb25zdCBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuJiwgTGF5b3V0VW5p
dCBjb250ZW50TG9naWNhbExlZnQsIExheW91dFVuaXQgYXZhaWxhYmxlV2lkdGgsIGJvb2wgbGlu
ZUlzRW1wdHkpOwotICAgIExheW91dFVuaXQgcnVuV2lkdGgoY29uc3QgSW5saW5lUnVuUHJvdmlk
ZXI6OlJ1biYsIExheW91dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0KSBjb25zdDsKLSAgICBMYXlv
dXRVbml0IHRleHRXaWR0aChjb25zdCBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuJiwgTGF5b3V0VW5p
dCBjb250ZW50TG9naWNhbExlZnQpIGNvbnN0OwotICAgIE9wdGlvbmFsPEl0ZW1Qb3NpdGlvbj4g
YWRqdXN0U3BsaXRQb3NpdGlvbldpdGhIeXBoZW5hdGlvbihjb25zdCBJbmxpbmVSdW5Qcm92aWRl
cjo6UnVuJiwgSXRlbVBvc2l0aW9uIHNwbGl0UG9zaXRpb24sIExheW91dFVuaXQgY29udGVudExv
Z2ljYWxMZWZ0LCBMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoLCBib29sIGlzTGluZUVtcHR5KSBj
b25zdDsKIAotICAgIGNvbnN0IExheW91dFN0YXRlJiBtX2xheW91dFN0YXRlOwotICAgIGNvbnN0
IElubGluZUNvbnRlbnQmIG1faW5saW5lQ29udGVudDsKLSAgICBjb25zdCBWZWN0b3I8SW5saW5l
UnVuUHJvdmlkZXI6OlJ1bj4mIG1faW5saW5lUnVuczsKKyAgICBCcmVha2luZ0JlaGF2aW9yIHdv
cmRCcmVha2luZ0JlaGF2aW9yKGNvbnN0IElubGluZVRleHRJdGVtJiwgYm9vbCBsaW5lSXNFbXB0
eSkgY29uc3Q7CisgICAgYm9vbCBpc0F0QnJlYWtpbmdPcHBvcnR1bml0eShjb25zdCBJbmxpbmVJ
dGVtJik7CisgICAgTGF5b3V0VW5pdCBydW5XaWR0aChjb25zdCBJbmxpbmVJdGVtJiwgTGF5b3V0
VW5pdCBjb250ZW50TG9naWNhbExlZnQpIGNvbnN0OworICAgIExheW91dFVuaXQgdGV4dFdpZHRo
KGNvbnN0IElubGluZVRleHRJdGVtJiwgTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbExlZnQpIGNv
bnN0OwogCi0gICAgdW5zaWduZWQgbV9jdXJyZW50UnVuSW5kZXggeyAwIH07Ci0gICAgT3B0aW9u
YWw8SXRlbVBvc2l0aW9uPiBtX3NwbGl0UG9zaXRpb247Ci0gICAgYm9vbCBtX2h5cGhlbmF0aW9u
SXNEaXNhYmxlZCB7IGZhbHNlIH07CisgICAgY29uc3QgTGF5b3V0U3RhdGUmIG1fbGF5b3V0U3Rh
dGU7CisgICAgYm9vbCBtX2h5cGhlbmF0aW9uSXNEaXNhYmxlZCB7IHRydWUgfTsKIH07CiAKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGlu
ZVJ1bi5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lUnVu
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2NTU0NDE2YWE1MTE1MDI5ZjVkNTNm
NmEwNDcxYmVkZDFlZTExNWUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lUnVu
LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEg
b25jZQotCi0jaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCi0KLSNpbmNsdWRl
ICJJbmxpbmVSdW5Qcm92aWRlci5oIgotI2luY2x1ZGUgIkxheW91dFVuaXQuaCIKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotbmFtZXNwYWNlIExheW91dCB7Ci0KLXN0cnVjdCBJbmxpbmVSdW4gewot
ICAgIElubGluZVJ1bihEaXNwbGF5OjpCb3g6OlJlY3QgbG9naWNhbFJlY3QsIGNvbnN0IElubGlu
ZUl0ZW0mKTsKLQotICAgIExheW91dFVuaXQgbG9naWNhbExlZnQoKSBjb25zdCB7IHJldHVybiBt
X2xvZ2ljYWxSZWN0LmxlZnQoKTsgfQotICAgIExheW91dFVuaXQgbG9naWNhbFJpZ2h0KCkgY29u
c3QgeyByZXR1cm4gbV9sb2dpY2FsUmVjdC5yaWdodCgpOyB9Ci0gICAgTGF5b3V0VW5pdCBsb2dp
Y2FsVG9wKCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsUmVjdC50b3AoKTsgfQotICAgIExheW91
dFVuaXQgbG9naWNhbEJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFJlY3QuYm90dG9t
KCk7IH0KLQotICAgIExheW91dFVuaXQgbG9naWNhbFdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9s
b2dpY2FsUmVjdC53aWR0aCgpOyB9Ci0gICAgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0KCkgY29u
c3QgeyByZXR1cm4gbV9sb2dpY2FsUmVjdC5oZWlnaHQoKTsgfQotICAgIGJvb2wgb3ZlcmxhcHNN
dWx0aXBsZUlubGluZUl0ZW1zKCkgY29uc3Q7Ci0KLSAgICB2b2lkIHNldExvZ2ljYWxXaWR0aChM
YXlvdXRVbml0IHdpZHRoKSB7IG1fbG9naWNhbFJlY3Quc2V0V2lkdGgod2lkdGgpOyB9Ci0gICAg
dm9pZCBzZXRMb2dpY2FsTGVmdChMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0KSB7IG1fbG9naWNhbFJl
Y3Quc2V0TGVmdChsb2dpY2FsTGVmdCk7IH0KLSAgICB2b2lkIHNldExvZ2ljYWxSaWdodChMYXlv
dXRVbml0IGxvZ2ljYWxSaWdodCkgeyBtX2xvZ2ljYWxSZWN0LnNoaWZ0UmlnaHRUbyhsb2dpY2Fs
UmlnaHQpOyB9Ci0gICAgdm9pZCBtb3ZlVmVydGljYWxseShMYXlvdXRVbml0IGRlbHRhKSB7IG1f
bG9naWNhbFJlY3QubW92ZVZlcnRpY2FsbHkoZGVsdGEpOyB9Ci0gICAgdm9pZCBtb3ZlSG9yaXpv
bnRhbGx5KExheW91dFVuaXQgZGVsdGEpIHsgbV9sb2dpY2FsUmVjdC5tb3ZlSG9yaXpvbnRhbGx5
KGRlbHRhKTsgfQotCi0gICAgc3RydWN0IEV4cGFuc2lvbk9wcG9ydHVuaXR5IHsKLSAgICAgICAg
dW5zaWduZWQgY291bnQgeyAwIH07Ci0gICAgICAgIEV4cGFuc2lvbkJlaGF2aW9yIGJlaGF2aW9y
IHsgRm9yYmlkTGVhZGluZ0V4cGFuc2lvbiB8IEZvcmJpZFRyYWlsaW5nRXhwYW5zaW9uIH07Ci0g
ICAgICAgIExheW91dFVuaXQgZXhwYW5zaW9uOwotICAgIH07Ci0gICAgRXhwYW5zaW9uT3Bwb3J0
dW5pdHkmIGV4cGFuc2lvbk9wcG9ydHVuaXR5KCkgeyByZXR1cm4gbV9leHBhbnNpb25PcHBvcnR1
bml0eTsgfQotCi0gICAgc3RydWN0IFRleHRDb250ZXh0IHsKLSAgICBwdWJsaWM6Ci0gICAgICAg
IFRleHRDb250ZXh0KEl0ZW1Qb3NpdGlvbiwgdW5zaWduZWQgbGVuZ3RoKTsKLQotICAgICAgICB2
b2lkIHNldFN0YXJ0KEl0ZW1Qb3NpdGlvbiBzdGFydCkgeyBtX3N0YXJ0ID0gc3RhcnQ7IH0KLSAg
ICAgICAgdm9pZCBzZXRMZW5ndGgodW5zaWduZWQgbGVuZ3RoKSB7IG1fbGVuZ3RoID0gbGVuZ3Ro
OyB9Ci0KLSAgICAgICAgSXRlbVBvc2l0aW9uIHN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9zdGFy
dDsgfQotICAgICAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsg
fQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgSXRlbVBvc2l0aW9uIG1fc3RhcnQ7Ci0gICAgICAg
IHVuc2lnbmVkIG1fbGVuZ3RoOwotICAgIH07Ci0gICAgdm9pZCBzZXRUZXh0Q29udGV4dChUZXh0
Q29udGV4dCB0ZXh0Q29udGV4dCkgeyBtX3RleHRDb250ZXh0LmVtcGxhY2UodGV4dENvbnRleHQp
OyB9Ci0gICAgT3B0aW9uYWw8VGV4dENvbnRleHQ+JiB0ZXh0Q29udGV4dCgpIHsgcmV0dXJuIG1f
dGV4dENvbnRleHQ7IH0KLSAgICBPcHRpb25hbDxUZXh0Q29udGV4dD4gdGV4dENvbnRleHQoKSBj
b25zdCB7IHJldHVybiBtX3RleHRDb250ZXh0OyB9Ci0KLSAgICBjb25zdCBJbmxpbmVJdGVtJiBp
bmxpbmVJdGVtKCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVJdGVtOyB9Ci0KLXByaXZhdGU6Ci0g
ICAgRGlzcGxheTo6Qm94OjpSZWN0IG1fbG9naWNhbFJlY3Q7Ci0gICAgRXhwYW5zaW9uT3Bwb3J0
dW5pdHkgbV9leHBhbnNpb25PcHBvcnR1bml0eTsKLQotICAgIGNvbnN0IElubGluZUl0ZW0mIG1f
aW5saW5lSXRlbTsKLSAgICBPcHRpb25hbDxUZXh0Q29udGV4dD4gbV90ZXh0Q29udGV4dDsKLX07
Ci0KLXVzaW5nIElubGluZVJ1bnMgPSBWZWN0b3I8SW5saW5lUnVuPjsKLQotaW5saW5lIElubGlu
ZVJ1bjo6SW5saW5lUnVuKERpc3BsYXk6OkJveDo6UmVjdCBsb2dpY2FsUmVjdCwgY29uc3QgSW5s
aW5lSXRlbSYgaW5saW5lSXRlbSkKLSAgICA6IG1fbG9naWNhbFJlY3QobG9naWNhbFJlY3QpCi0g
ICAgLCBtX2lubGluZUl0ZW0oaW5saW5lSXRlbSkKLXsKLX0KLQotaW5saW5lIElubGluZVJ1bjo6
VGV4dENvbnRleHQ6OlRleHRDb250ZXh0KEl0ZW1Qb3NpdGlvbiBzdGFydCwgdW5zaWduZWQgbGVu
Z3RoKQotICAgIDogbV9zdGFydChzdGFydCkKLSAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKLXsKLX0K
LQotaW5saW5lIGJvb2wgSW5saW5lUnVuOjpvdmVybGFwc011bHRpcGxlSW5saW5lSXRlbXMoKSBj
b25zdAotewotICAgIC8vIE9ubHkgdGV4dCBjb250ZW50IGNhbiBvdmVybGFwIG11bHRpcGxlIGlu
bGluZSBlbGVtZW50cy4KLSAgICBpZiAoIW1fdGV4dENvbnRleHQpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGF1dG8gZW5kUG9zaXRpb24gPSBtX3RleHRDb250ZXh0LT5zdGFydCgpICsg
bV90ZXh0Q29udGV4dC0+bGVuZ3RoKCk7Ci0gICAgcmV0dXJuIGVuZFBvc2l0aW9uID4gbV9pbmxp
bmVJdGVtLnRleHRDb250ZW50KCkubGVuZ3RoKCk7Ci19Ci0KLX0KLX0KLSNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lUnVuUHJv
dmlkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5l
UnVuUHJvdmlkZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWIyMGYwYWZk
NzEyYjUzNjIwMWQwNmY3Y2I0Mzc1ZThiMWU0Y2Q5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0
aW5nL0lubGluZVJ1blByb3ZpZGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE5OCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIklubGluZVJ1blBy
b3ZpZGVyLmgiCi0KLSNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKLQotI2lu
Y2x1ZGUgIkJyZWFrTGluZXMuaCIKLSNpbmNsdWRlICJMYXlvdXRJbmxpbmVCb3guaCIKLSNpbmNs
dWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1uYW1l
c3BhY2UgTGF5b3V0IHsKLQotV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKElubGluZVJ1blBy
b3ZpZGVyKTsKLQotSW5saW5lUnVuUHJvdmlkZXI6OklubGluZVJ1blByb3ZpZGVyKCkKLXsKLX0K
LQotdm9pZCBJbmxpbmVSdW5Qcm92aWRlcjo6YXBwZW5kKGNvbnN0IElubGluZUl0ZW0mIGlubGlu
ZUl0ZW0pCi17Ci0gICAgc3dpdGNoIChpbmxpbmVJdGVtLnR5cGUoKSkgewotICAgIGNhc2UgSW5s
aW5lSXRlbTo6VHlwZTo6VGV4dDoKLSAgICAgICAgLy8gU3BlY2lhbCBjYXNlIHRleHQgY29udGVu
dC4gVGhleSBjYW4gb3ZlcmxhcCBtdWx0aXBsZSBpdGVtcy4gPHNwYW4+Zm9vPC9zcGFuPjxzcGFu
PmJhcjwvc3Bhbj4KLSAgICAgICAgcHJvY2Vzc0lubGluZVRleHRJdGVtKGlubGluZUl0ZW0pOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIElubGluZUl0ZW06OlR5cGU6OkhhcmRMaW5lQnJlYWs6
Ci0gICAgICAgIG1faW5saW5lUnVucy5hcHBlbmQoSW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6Y3Jl
YXRlSGFyZExpbmVCcmVha1J1bihpbmxpbmVJdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSW5saW5lSXRlbTo6VHlwZTo6SW5saW5lQm94OgotICAgICAgICBtX2lubGluZVJ1bnMuYXBw
ZW5kKElubGluZVJ1blByb3ZpZGVyOjpSdW46OmNyZWF0ZUJveFJ1bihpbmxpbmVJdGVtKSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW5saW5lSXRlbTo6VHlwZTo6RmxvYXQ6Ci0gICAgICAg
IG1faW5saW5lUnVucy5hcHBlbmQoSW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6Y3JlYXRlRmxvYXRS
dW4oaW5saW5lSXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBB
U1NFUlRfTk9UX0lNUExFTUVOVEVEX1lFVCgpOwotICAgIH0KLX0KLQotdm9pZCBJbmxpbmVSdW5Q
cm92aWRlcjo6aW5zZXJ0QmVmb3JlKGNvbnN0IEJveCYsIGNvbnN0IEJveCYpCi17Ci19Ci0KLXZv
aWQgSW5saW5lUnVuUHJvdmlkZXI6OnJlbW92ZShjb25zdCBCb3gmKQotewotfQotCi1zdGF0aWMg
aW5saW5lIGJvb2wgaXNXaGl0ZXNwYWNlKGNoYXIgY2hhcmFjdGVyLCBib29sIHByZXNlcnZlTmV3
bGluZSkKLXsKLSAgICByZXR1cm4gY2hhcmFjdGVyID09ICcgJyB8fCBjaGFyYWN0ZXIgPT0gJ1x0
JyB8fCAoY2hhcmFjdGVyID09ICdcbicgJiYgIXByZXNlcnZlTmV3bGluZSk7Ci19Ci0KLXN0YXRp
YyBpbmxpbmUgYm9vbCBpc1NvZnRMaW5lQnJlYWsoY2hhciBjaGFyYWN0ZXIsIGJvb2wgcHJlc2Vy
dmVOZXdsaW5lKQotewotICAgIHJldHVybiBwcmVzZXJ2ZU5ld2xpbmUgJiYgY2hhcmFjdGVyID09
ICdcbic7Ci19Ci0KLWJvb2wgSW5saW5lUnVuUHJvdmlkZXI6OmlzQ29udGlub3VzQ29udGVudChJ
bmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpUeXBlIG5ld1J1blR5cGUsIGNvbnN0IElubGluZUl0ZW0m
IG5ld0lubGluZUl0ZW0pCi17Ci0gICAgaWYgKG1faW5saW5lUnVucy5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8mIGxhc3RSdW4gPSBtX2lubGluZVJ1bnMubGFz
dCgpOwotICAgIC8vIFNhbWUgZWxlbWVudCwgY2hlY2sgdHlwZSBvbmx5LgotICAgIGlmICgmbmV3
SW5saW5lSXRlbSA9PSAmbGFzdFJ1bi5pbmxpbmVJdGVtKCkpCi0gICAgICAgIHJldHVybiBuZXdS
dW5UeXBlID09IGxhc3RSdW4udHlwZSgpOwotCi0gICAgLy8gVGhpcyBuZXcgcnVuIGlzIGZyb20g
YSBkaWZmZXJlbnQgaW5saW5lIGJveC4KLSAgICAvLyBGSVhNRTogY2hlY2sgc3R5bGUuCi0gICAg
aWYgKG5ld1J1blR5cGUgPT0gSW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6VHlwZTo6Tm9uV2hpdGVz
cGFjZSAmJiBsYXN0UnVuLmlzTm9uV2hpdGVzcGFjZSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LQotICAgIGlmIChuZXdSdW5UeXBlID09IElubGluZVJ1blByb3ZpZGVyOjpSdW46OlR5cGU6Oldo
aXRlc3BhY2UgJiYgbGFzdFJ1bi5pc1doaXRlc3BhY2UoKSkKLSAgICAgICAgcmV0dXJuIG5ld0lu
bGluZUl0ZW0uc3R5bGUoKS5jb2xsYXBzZVdoaXRlU3BhY2UoKSA9PSBsYXN0UnVuLnN0eWxlKCku
Y29sbGFwc2VXaGl0ZVNwYWNlKCk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgSW5s
aW5lUnVuUHJvdmlkZXI6OnByb2Nlc3NJbmxpbmVUZXh0SXRlbShjb25zdCBJbmxpbmVJdGVtJiBp
bmxpbmVJdGVtKQotewotICAgIC8vIFdlIG5lZWQgdG8gcmVzZXQgdGhlIHJ1biBpdGVyYXRvciB3
aGVuIHRoZSB0ZXh0IGNvbnRlbnQgaXMgbm90IGNvbnRpbnVvdXMuCi0gICAgLy8gPHNwYW4+Zm9v
PC9zcGFuPjxpbWcgc3JjPSIiPjxzcGFuPmJhcjwvc3Bhbj4gKEZJWE1FOiBmbG9hdHM/KQotICAg
IGlmICghbV9pbmxpbmVSdW5zLmlzRW1wdHkoKSAmJiAhbV9pbmxpbmVSdW5zLmxhc3QoKS5pc1Rl
eHQoKSkgewotICAgICAgICBtX2xpbmVCcmVha0l0ZXJhdG9yLnJlc2V0UHJpb3JDb250ZXh0KCk7
Ci0gICAgICAgIG1fbGluZUJyZWFrSXRlcmF0b3IucmVzZXRTdHJpbmdBbmRSZWxlYXNlSXRlcmF0
b3IoIiIsICIiLCBMaW5lQnJlYWtJdGVyYXRvck1vZGU6OkRlZmF1bHQpOwotICAgIH0KLQotICAg
IGF1dG8mIHN0eWxlID0gaW5saW5lSXRlbS5zdHlsZSgpOwotICAgIGF1dG8gdGV4dCA9IGlubGlu
ZUl0ZW0udGV4dENvbnRlbnQoKTsKLSAgICBJdGVtUG9zaXRpb24gY3VycmVudEl0ZW1Qb3NpdGlv
biA9IDA7Ci0gICAgd2hpbGUgKGN1cnJlbnRJdGVtUG9zaXRpb24gPCB0ZXh0Lmxlbmd0aCgpKSB7
Ci0KLSAgICAgICAgLy8gU29mdCBsaW5lYnJlYWs/Ci0gICAgICAgIGlmIChpc1NvZnRMaW5lQnJl
YWsodGV4dFtjdXJyZW50SXRlbVBvc2l0aW9uXSwgc3R5bGUucHJlc2VydmVOZXdsaW5lKCkpKSB7
Ci0gICAgICAgICAgICBtX2lubGluZVJ1bnMuYXBwZW5kKElubGluZVJ1blByb3ZpZGVyOjpSdW46
OmNyZWF0ZVNvZnRMaW5lQnJlYWtSdW4oaW5saW5lSXRlbSkpOwotICAgICAgICAgICAgKytjdXJy
ZW50SXRlbVBvc2l0aW9uOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAg
ICAgICBhdXRvIGlzV2hpdGVzcGFjZVJ1biA9IGlzV2hpdGVzcGFjZSh0ZXh0W2N1cnJlbnRJdGVt
UG9zaXRpb25dLCBzdHlsZS5wcmVzZXJ2ZU5ld2xpbmUoKSk7Ci0gICAgICAgIGF1dG8gbGVuZ3Ro
ID0gaXNXaGl0ZXNwYWNlUnVuID8gbW92ZVRvTmV4dE5vbldoaXRlc3BhY2VQb3NpdGlvbihpbmxp
bmVJdGVtLCBjdXJyZW50SXRlbVBvc2l0aW9uKSA6IG1vdmVUb05leHRCcmVha2FibGVQb3NpdGlv
bihpbmxpbmVJdGVtLCBjdXJyZW50SXRlbVBvc2l0aW9uKTsKLQotICAgICAgICBpZiAoaXNDb250
aW5vdXNDb250ZW50KGlzV2hpdGVzcGFjZVJ1biA/IElubGluZVJ1blByb3ZpZGVyOjpSdW46OlR5
cGU6OldoaXRlc3BhY2UgOiBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpUeXBlOjpOb25XaGl0ZXNw
YWNlLCBpbmxpbmVJdGVtKSkKLSAgICAgICAgICAgIG1faW5saW5lUnVucy5sYXN0KCkudGV4dENv
bnRleHQoKS0+ZXhwYW5kKGxlbmd0aCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgbV9p
bmxpbmVSdW5zLmFwcGVuZChpc1doaXRlc3BhY2VSdW4gPyBJbmxpbmVSdW5Qcm92aWRlcjo6UnVu
OjpjcmVhdGVXaGl0ZXNwYWNlUnVuKGlubGluZUl0ZW0sIGN1cnJlbnRJdGVtUG9zaXRpb24sIGxl
bmd0aCwgc3R5bGUuY29sbGFwc2VXaGl0ZVNwYWNlKCkpCi0gICAgICAgICAgICAgICAgOiBJbmxp
bmVSdW5Qcm92aWRlcjo6UnVuOjpjcmVhdGVOb25XaGl0ZXNwYWNlUnVuKGlubGluZUl0ZW0sIGN1
cnJlbnRJdGVtUG9zaXRpb24sIGxlbmd0aCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgY3VycmVu
dEl0ZW1Qb3NpdGlvbiArPSBsZW5ndGg7Ci0gICAgfQotfQotCi11bnNpZ25lZCBJbmxpbmVSdW5Q
cm92aWRlcjo6bW92ZVRvTmV4dE5vbldoaXRlc3BhY2VQb3NpdGlvbihjb25zdCBJbmxpbmVJdGVt
JiBpbmxpbmVJdGVtLCBJdGVtUG9zaXRpb24gY3VycmVudEl0ZW1Qb3NpdGlvbikKLXsKLSAgICBh
dXRvIHRleHQgPSBpbmxpbmVJdGVtLnRleHRDb250ZW50KCk7Ci0gICAgYXV0byBwcmVzZXJ2ZU5l
d2xpbmUgPSBpbmxpbmVJdGVtLnN0eWxlKCkucHJlc2VydmVOZXdsaW5lKCk7Ci0gICAgYXV0byBu
ZXh0Tm9uV2hpdGVTcGFjZVBvc2l0aW9uID0gY3VycmVudEl0ZW1Qb3NpdGlvbjsKLQotICAgIHdo
aWxlIChuZXh0Tm9uV2hpdGVTcGFjZVBvc2l0aW9uIDwgdGV4dC5sZW5ndGgoKSAmJiBpc1doaXRl
c3BhY2UodGV4dFtuZXh0Tm9uV2hpdGVTcGFjZVBvc2l0aW9uXSwgcHJlc2VydmVOZXdsaW5lKSkK
LSAgICAgICAgKytuZXh0Tm9uV2hpdGVTcGFjZVBvc2l0aW9uOwotICAgIHJldHVybiBuZXh0Tm9u
V2hpdGVTcGFjZVBvc2l0aW9uIC0gY3VycmVudEl0ZW1Qb3NpdGlvbjsKLX0KLQotdW5zaWduZWQg
SW5saW5lUnVuUHJvdmlkZXI6Om1vdmVUb05leHRCcmVha2FibGVQb3NpdGlvbihjb25zdCBJbmxp
bmVJdGVtJiBpbmxpbmVJdGVtLCBJdGVtUG9zaXRpb24gY3VycmVudEl0ZW1Qb3NpdGlvbikKLXsK
LSAgICBhdXRvIGZpbmROZXh0QnJlYWthYmxlUG9zaXRpb24gPSBbJl0oYXV0byBpbmxpbmVUZXh0
LCBhdXRvJiBzdHlsZSwgSXRlbVBvc2l0aW9uIHN0YXJ0UG9zaXRpb24pIHsKLSAgICAgICAgLy8g
U3dhcCBpdGVyYXRvcidzIGNvbnRlbnQgaWYgd2UgYWR2YW5jZWQgdG8gYSBuZXcgc3RyaW5nLgot
ICAgICAgICBhdXRvIGl0ZXJhdG9yVGV4dCA9IG1fbGluZUJyZWFrSXRlcmF0b3Iuc3RyaW5nVmll
dygpOwotCi0gICAgICAgIGlmIChpdGVyYXRvclRleHQgIT0gaW5saW5lVGV4dCkgewotICAgICAg
ICAgICAgYXV0byB0ZXh0TGVuZ3RoID0gaXRlcmF0b3JUZXh0Lmxlbmd0aCgpOwotICAgICAgICAg
ICAgYXV0byBsYXN0Q2hhcmFjdGVyID0gdGV4dExlbmd0aCA+IDAgPyBpdGVyYXRvclRleHRbdGV4
dExlbmd0aCAtIDFdIDogMDsKLSAgICAgICAgICAgIGF1dG8gc2Vjb25kVG9MYXN0Q2hhcmFjdGVy
ID0gdGV4dExlbmd0aCA+IDEgPyBpdGVyYXRvclRleHRbdGV4dExlbmd0aCAtIDJdIDogMDsKLSAg
ICAgICAgICAgIG1fbGluZUJyZWFrSXRlcmF0b3Iuc2V0UHJpb3JDb250ZXh0KGxhc3RDaGFyYWN0
ZXIsIHNlY29uZFRvTGFzdENoYXJhY3Rlcik7Ci0gICAgICAgICAgICBtX2xpbmVCcmVha0l0ZXJh
dG9yLnJlc2V0U3RyaW5nQW5kUmVsZWFzZUl0ZXJhdG9yKGlubGluZVRleHQsIHN0eWxlLmxvY2Fs
ZSgpLCBMaW5lQnJlYWtJdGVyYXRvck1vZGU6OkRlZmF1bHQpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgYXV0byBrZWVwQWxsV29yZHNGb3JDSksgPSBzdHlsZS53b3JkQnJlYWsoKSA9PSBXb3JkQnJl
YWs6OktlZXBBbGw7Ci0gICAgICAgIGF1dG8gYnJlYWtOQlNQID0gc3R5bGUuYXV0b1dyYXAoKSAm
JiBzdHlsZS5uYnNwTW9kZSgpID09IE5CU1BNb2RlOjpTcGFjZTsKLQotICAgICAgICBpZiAoa2Vl
cEFsbFdvcmRzRm9yQ0pLKSB7Ci0gICAgICAgICAgICBpZiAoYnJlYWtOQlNQKQotICAgICAgICAg
ICAgICAgIHJldHVybiBuZXh0QnJlYWthYmxlUG9zaXRpb25LZWVwaW5nQWxsV29yZHMobV9saW5l
QnJlYWtJdGVyYXRvciwgc3RhcnRQb3NpdGlvbik7Ci0gICAgICAgICAgICByZXR1cm4gbmV4dEJy
ZWFrYWJsZVBvc2l0aW9uS2VlcGluZ0FsbFdvcmRzSWdub3JpbmdOQlNQKG1fbGluZUJyZWFrSXRl
cmF0b3IsIHN0YXJ0UG9zaXRpb24pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1fbGluZUJy
ZWFrSXRlcmF0b3IubW9kZSgpID09IExpbmVCcmVha0l0ZXJhdG9yTW9kZTo6RGVmYXVsdCkgewot
ICAgICAgICAgICAgaWYgKGJyZWFrTkJTUCkKLSAgICAgICAgICAgICAgICByZXR1cm4gV2ViQ29y
ZTo6bmV4dEJyZWFrYWJsZVBvc2l0aW9uKG1fbGluZUJyZWFrSXRlcmF0b3IsIHN0YXJ0UG9zaXRp
b24pOwotICAgICAgICAgICAgcmV0dXJuIG5leHRCcmVha2FibGVQb3NpdGlvbklnbm9yaW5nTkJT
UChtX2xpbmVCcmVha0l0ZXJhdG9yLCBzdGFydFBvc2l0aW9uKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChicmVha05CU1ApCi0gICAgICAgICAgICByZXR1cm4gbmV4dEJyZWFrYWJsZVBvc2l0
aW9uV2l0aG91dFNob3J0Y3V0KG1fbGluZUJyZWFrSXRlcmF0b3IsIHN0YXJ0UG9zaXRpb24pOwot
ICAgICAgICByZXR1cm4gbmV4dEJyZWFrYWJsZVBvc2l0aW9uSWdub3JpbmdOQlNQV2l0aG91dFNo
b3J0Y3V0KG1fbGluZUJyZWFrSXRlcmF0b3IsIHN0YXJ0UG9zaXRpb24pOwotICAgIH07Ci0KLSAg
ICBhdXRvJiBzdHlsZSA9IGlubGluZUl0ZW0uc3R5bGUoKTsKLSAgICBhdXRvIHRleHRMZW5ndGgg
PSBpbmxpbmVJdGVtLnRleHRDb250ZW50KCkubGVuZ3RoKCk7Ci0gICAgQVNTRVJUKHRleHRMZW5n
dGgpOwotICAgIHdoaWxlIChjdXJyZW50SXRlbVBvc2l0aW9uIDwgdGV4dExlbmd0aCAtIDEpIHsK
LSAgICAgICAgYXV0byBuZXh0QnJlYWthYmxlUG9zaXRpb24gPSBmaW5kTmV4dEJyZWFrYWJsZVBv
c2l0aW9uKGlubGluZUl0ZW0udGV4dENvbnRlbnQoKSwgc3R5bGUsIGN1cnJlbnRJdGVtUG9zaXRp
b24pOwotICAgICAgICBpZiAobmV4dEJyZWFrYWJsZVBvc2l0aW9uICE9IGN1cnJlbnRJdGVtUG9z
aXRpb24pCi0gICAgICAgICAgICByZXR1cm4gbmV4dEJyZWFrYWJsZVBvc2l0aW9uIC0gY3VycmVu
dEl0ZW1Qb3NpdGlvbjsKLSAgICAgICAgKytjdXJyZW50SXRlbVBvc2l0aW9uOwotICAgIH0KLSAg
ICByZXR1cm4gdGV4dExlbmd0aDsKLX0KLQotfQotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVSdW5Qcm92aWRlci5oIGIv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lUnVuUHJvdmlkZXIu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDc3YzE0OGVlZWUwY2FkYTI0NTY2MWVm
ZWI4ZmM1NjdkZWVkODYwOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVSdW5Q
cm92aWRlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTY5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
cHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQotCi0j
aW5jbHVkZSAiSW5saW5lSXRlbS5oIgotI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9UZXh0QnJlYWtJdGVyYXRvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci1uYW1lc3BhY2UgTGF5b3V0IHsKLQotdXNpbmcgSXRlbVBvc2l0aW9uID0gdW5zaWduZWQ7Ci0K
LWNsYXNzIElubGluZVJ1blByb3ZpZGVyIHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKElu
bGluZVJ1blByb3ZpZGVyKTsKLXB1YmxpYzoKLSAgICBJbmxpbmVSdW5Qcm92aWRlcigpOwotCi0g
ICAgdm9pZCBhcHBlbmQoY29uc3QgSW5saW5lSXRlbSYpOwotICAgIHZvaWQgaW5zZXJ0QmVmb3Jl
KGNvbnN0IEJveCYsIGNvbnN0IEJveCYgYmVmb3JlKTsKLSAgICB2b2lkIHJlbW92ZShjb25zdCBC
b3gmKTsKLQotICAgIHN0cnVjdCBSdW4gewotCi0gICAgICAgIHN0YXRpYyBSdW4gY3JlYXRlQm94
UnVuKGNvbnN0IElubGluZUl0ZW0mKTsKLSAgICAgICAgc3RhdGljIFJ1biBjcmVhdGVGbG9hdFJ1
bihjb25zdCBJbmxpbmVJdGVtJik7Ci0gICAgICAgIHN0YXRpYyBSdW4gY3JlYXRlSGFyZExpbmVC
cmVha1J1bihjb25zdCBJbmxpbmVJdGVtJik7Ci0gICAgICAgIHN0YXRpYyBSdW4gY3JlYXRlU29m
dExpbmVCcmVha1J1bihjb25zdCBJbmxpbmVJdGVtJik7Ci0gICAgICAgIHN0YXRpYyBSdW4gY3Jl
YXRlV2hpdGVzcGFjZVJ1bihjb25zdCBJbmxpbmVJdGVtJiwgSXRlbVBvc2l0aW9uIHN0YXJ0LCB1
bnNpZ25lZCBsZW5ndGgsIGJvb2wgaXNDb2xsYXBzaWJsZSk7Ci0gICAgICAgIHN0YXRpYyBSdW4g
Y3JlYXRlTm9uV2hpdGVzcGFjZVJ1bihjb25zdCBJbmxpbmVJdGVtJiwgSXRlbVBvc2l0aW9uIHN0
YXJ0LCB1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgICAgIGVudW0gY2xhc3MgVHlwZSB7Ci0gICAg
ICAgICAgICBCb3gsCi0gICAgICAgICAgICBGbG9hdCwKLSAgICAgICAgICAgIFNvZnRMaW5lQnJl
YWssCi0gICAgICAgICAgICBIYXJkTGluZUJyZWFrLAotICAgICAgICAgICAgV2hpdGVzcGFjZSwK
LSAgICAgICAgICAgIE5vbldoaXRlc3BhY2UKLSAgICAgICAgfTsKLSAgICAgICAgVHlwZSB0eXBl
KCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0gICAgICAgIGJvb2wgaXNUZXh0KCkgY29uc3Qg
eyByZXR1cm4gbV90eXBlID09IFJ1bjo6VHlwZTo6V2hpdGVzcGFjZSB8fCBtX3R5cGUgPT0gUnVu
OjpUeXBlOjpOb25XaGl0ZXNwYWNlIHx8IG1fdHlwZSA9PSBSdW46OlR5cGU6OlNvZnRMaW5lQnJl
YWsgfHwgbV90eXBlID09IFJ1bjo6VHlwZTo6SGFyZExpbmVCcmVhazsgfQotICAgICAgICBib29s
IGlzV2hpdGVzcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBUeXBlOjpXaGl0ZXNwYWNl
OyB9Ci0gICAgICAgIGJvb2wgaXNOb25XaGl0ZXNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV90eXBl
ID09IFR5cGU6Ok5vbldoaXRlc3BhY2U7IH0KLSAgICAgICAgYm9vbCBpc0xpbmVCcmVhaygpIGNv
bnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBSdW46OlR5cGU6OlNvZnRMaW5lQnJlYWsgfHwgbV90eXBl
ID09IFJ1bjo6VHlwZTo6SGFyZExpbmVCcmVhazsgfQotICAgICAgICBib29sIGlzQm94KCkgY29u
c3QgeyByZXR1cm4gbV90eXBlID09IFR5cGU6OkJveDsgfQotICAgICAgICBib29sIGlzRmxvYXQo
KSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gVHlwZTo6RmxvYXQ7IH0KLQotICAgICAgICBzdHJ1
Y3QgVGV4dENvbnRleHQgewotCi0gICAgICAgICAgICBlbnVtIGNsYXNzIElzQ29sbGFwc2VkIHsg
Tm8sIFllcyB9OwotICAgICAgICAgICAgVGV4dENvbnRleHQoSXRlbVBvc2l0aW9uLCB1bnNpZ25l
ZCBsZW5ndGgsIElzQ29sbGFwc2VkKTsKLQotICAgICAgICAgICAgSXRlbVBvc2l0aW9uIHN0YXJ0
KCkgY29uc3QgeyByZXR1cm4gbV9zdGFydDsgfQotICAgICAgICAgICAgLy8gTm90ZSB0aGF0ICdl
bmQnIHBvc2l0aW9uIGRvZXMgbm90IGVxdWFsIHRvIHN0YXJ0ICsgbGVuZ3RoIHdoZW4gcnVuIG92
ZXJsYXBzIG11bHRpcGxlIElubGluZUl0ZW1zLgotICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3Ro
KCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KLSAgICAgICAgICAgIGJvb2wgaXNDb2xsYXBz
ZWQoKSBjb25zdCB7IHJldHVybiBtX2lzQ29sbGFwc2VkID09IElzQ29sbGFwc2VkOjpZZXM7IH0K
LQotICAgICAgICBwcml2YXRlOgotICAgICAgICAgICAgZnJpZW5kIGNsYXNzIElubGluZVJ1blBy
b3ZpZGVyOwotCi0gICAgICAgICAgICB2b2lkIGV4cGFuZCh1bnNpZ25lZCBsZW5ndGgpIHsgbV9s
ZW5ndGggKz0gbGVuZ3RoOyB9Ci0KLSAgICAgICAgICAgIEl0ZW1Qb3NpdGlvbiBtX3N0YXJ0IHsg
MCB9OwotICAgICAgICAgICAgdW5zaWduZWQgbV9sZW5ndGggeyAwIH07Ci0gICAgICAgICAgICBJ
c0NvbGxhcHNlZCBtX2lzQ29sbGFwc2VkIHsgSXNDb2xsYXBzZWQ6Ok5vIH07Ci0gICAgICAgIH07
Ci0gICAgICAgIE9wdGlvbmFsPFRleHRDb250ZXh0PiB0ZXh0Q29udGV4dCgpIGNvbnN0IHsgcmV0
dXJuIG1fdGV4dENvbnRleHQ7IH0KLSAgICAgICAgLy8gTm90ZSB0aGF0IHN0eWxlKCkgYW5kIGlu
bGluZUl0ZW0oKSBhbHdheXMgcmV0dXJucyB0aGUgZmlyc3QgSW5saW5lSXRlbSBmb3IgYSBydW4u
Ci0gICAgICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5s
aW5lSXRlbS5zdHlsZSgpOyB9Ci0gICAgICAgIGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0o
KSBjb25zdCB7IHJldHVybiBtX2lubGluZUl0ZW07IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAg
IGZyaWVuZCBjbGFzcyBJbmxpbmVSdW5Qcm92aWRlcjsKLQotICAgICAgICBSdW4oY29uc3QgSW5s
aW5lSXRlbSYsIFR5cGUsIE9wdGlvbmFsPFRleHRDb250ZXh0Pik7Ci0gICAgICAgIE9wdGlvbmFs
PFRleHRDb250ZXh0PiYgdGV4dENvbnRleHQoKSB7IHJldHVybiBtX3RleHRDb250ZXh0OyB9Ci0K
LSAgICAgICAgY29uc3QgVHlwZSBtX3R5cGU7Ci0gICAgICAgIGNvbnN0IElubGluZUl0ZW0mIG1f
aW5saW5lSXRlbTsKLSAgICAgICAgT3B0aW9uYWw8VGV4dENvbnRleHQ+IG1fdGV4dENvbnRleHQ7
Ci0gICAgfTsKLSAgICBjb25zdCBWZWN0b3I8SW5saW5lUnVuUHJvdmlkZXI6OlJ1bj4mIHJ1bnMo
KSBjb25zdCB7IHJldHVybiBtX2lubGluZVJ1bnM7IH0KLQotcHJpdmF0ZToKLSAgICB2b2lkIGNv
bW1pdFRleHRSdW4oKTsKLSAgICB2b2lkIHByb2Nlc3NJbmxpbmVUZXh0SXRlbShjb25zdCBJbmxp
bmVJdGVtJik7Ci0gICAgdW5zaWduZWQgbW92ZVRvTmV4dE5vbldoaXRlc3BhY2VQb3NpdGlvbihj
b25zdCBJbmxpbmVJdGVtJiwgSXRlbVBvc2l0aW9uIGN1cnJlbnRQb3NpdGlvbik7Ci0gICAgdW5z
aWduZWQgbW92ZVRvTmV4dEJyZWFrYWJsZVBvc2l0aW9uKGNvbnN0IElubGluZUl0ZW0mLCBJdGVt
UG9zaXRpb24gY3VycmVudFBvc2l0aW9uKTsKLSAgICBib29sIGlzQ29udGlub3VzQ29udGVudChS
dW46OlR5cGUgbmV3UnVuVHlwZSwgY29uc3QgSW5saW5lSXRlbSYgbmV3SW5saW5lSXRlbSk7Ci0K
LSAgICBMYXp5TGluZUJyZWFrSXRlcmF0b3IgbV9saW5lQnJlYWtJdGVyYXRvcjsKLQotICAgIFZl
Y3RvcjxJbmxpbmVSdW5Qcm92aWRlcjo6UnVuPiBtX2lubGluZVJ1bnM7Ci19OwotCi1pbmxpbmUg
SW5saW5lUnVuUHJvdmlkZXI6OlJ1biBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpjcmVhdGVCb3hS
dW4oY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSkKLXsKLSAgICByZXR1cm4geyBpbmxpbmVJ
dGVtLCBUeXBlOjpCb3gsIFdURjo6bnVsbG9wdCB9OwotfQotCi1pbmxpbmUgSW5saW5lUnVuUHJv
dmlkZXI6OlJ1biBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpjcmVhdGVGbG9hdFJ1bihjb25zdCBJ
bmxpbmVJdGVtJiBpbmxpbmVJdGVtKQotewotICAgIHJldHVybiB7IGlubGluZUl0ZW0sIFR5cGU6
OkZsb2F0LCBXVEY6Om51bGxvcHQgfTsKLX0KLQotaW5saW5lIElubGluZVJ1blByb3ZpZGVyOjpS
dW4gSW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6Y3JlYXRlU29mdExpbmVCcmVha1J1bihjb25zdCBJ
bmxpbmVJdGVtJiBpbmxpbmVJdGVtKQotewotICAgIHJldHVybiB7IGlubGluZUl0ZW0sIFR5cGU6
OlNvZnRMaW5lQnJlYWssIFdURjo6bnVsbG9wdCB9OwotfQotCi1pbmxpbmUgSW5saW5lUnVuUHJv
dmlkZXI6OlJ1biBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpjcmVhdGVIYXJkTGluZUJyZWFrUnVu
KGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0pCi17Ci0gICAgcmV0dXJuIHsgaW5saW5lSXRl
bSwgVHlwZTo6SGFyZExpbmVCcmVhaywgV1RGOjpudWxsb3B0IH07Ci19Ci0KLWlubGluZSBJbmxp
bmVSdW5Qcm92aWRlcjo6UnVuIElubGluZVJ1blByb3ZpZGVyOjpSdW46OmNyZWF0ZVdoaXRlc3Bh
Y2VSdW4oY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSwgSXRlbVBvc2l0aW9uIHN0YXJ0LCB1
bnNpZ25lZCBsZW5ndGgsIGJvb2wgaXNDb2xsYXBzaWJsZSkKLXsKLSAgICBBU1NFUlQobGVuZ3Ro
KTsKLSAgICBhdXRvIGlzQ29sbGFwc2VkID0gaXNDb2xsYXBzaWJsZSAmJiBsZW5ndGggPiAxID8g
VGV4dENvbnRleHQ6OklzQ29sbGFwc2VkOjpZZXMgOiBUZXh0Q29udGV4dDo6SXNDb2xsYXBzZWQ6
Ok5vOwotICAgIHJldHVybiB7IGlubGluZUl0ZW0sIFR5cGU6OldoaXRlc3BhY2UsIFRleHRDb250
ZXh0KHN0YXJ0LCBsZW5ndGgsIGlzQ29sbGFwc2VkKSB9OwotfQotCi1pbmxpbmUgSW5saW5lUnVu
UHJvdmlkZXI6OlJ1biBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpjcmVhdGVOb25XaGl0ZXNwYWNl
UnVuKGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0sIEl0ZW1Qb3NpdGlvbiBzdGFydCwgdW5z
aWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiB7IGlubGluZUl0ZW0sIFR5cGU6Ok5vbldoaXRl
c3BhY2UsIFRleHRDb250ZXh0KHN0YXJ0LCBsZW5ndGgsIFRleHRDb250ZXh0OjpJc0NvbGxhcHNl
ZDo6Tm8pIH07Ci19Ci0KLWlubGluZSBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpSdW4oY29uc3Qg
SW5saW5lSXRlbSYgaW5saW5lSXRlbSwgVHlwZSB0eXBlLCBPcHRpb25hbDxUZXh0Q29udGV4dD4g
dGV4dENvbnRleHQpCi0gICAgOiBtX3R5cGUodHlwZSkKLSAgICAsIG1faW5saW5lSXRlbShpbmxp
bmVJdGVtKQotICAgICwgbV90ZXh0Q29udGV4dCh0ZXh0Q29udGV4dCkKLXsKLX0KLQotaW5saW5l
IElubGluZVJ1blByb3ZpZGVyOjpSdW46OlRleHRDb250ZXh0OjpUZXh0Q29udGV4dChJdGVtUG9z
aXRpb24gc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwgSXNDb2xsYXBzZWQgaXNDb2xsYXBzZWQpCi0g
ICAgOiBtX3N0YXJ0KHN0YXJ0KQotICAgICwgbV9sZW5ndGgobGVuZ3RoKQotICAgICwgbV9pc0Nv
bGxhcHNlZChpc0NvbGxhcHNlZCkKLXsKLX0KLQotfQotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVUZXh0SXRlbS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVUZXh0SXRlbS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uY2Y1NDI0NjRmZGJiZjQ2ZjQxOGIwMTFjYTA0ODNhNWU3YjkyZDE4Ywot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5n
L0lubGluZVRleHRJdGVtLmNwcApAQCAtMCwwICsxLDEzMCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbmxpbmVUZXh0SXRlbS5oIgorCisjaWYgRU5BQkxF
KExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRlICJCcmVha0xpbmVzLmgiCisj
aW5jbHVkZSAiTGF5b3V0SW5saW5lQm94LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVz
cGFjZSBMYXlvdXQgeworCitzdGF0aWMgaW5saW5lIGJvb2wgaXNXaGl0ZXNwYWNlQ2hhcmFjdGVy
KGNoYXIgY2hhcmFjdGVyLCBib29sIHByZXNlcnZlTmV3bGluZSkKK3sKKyAgICByZXR1cm4gY2hh
cmFjdGVyID09ICcgJyB8fCBjaGFyYWN0ZXIgPT0gJ1x0JyB8fCAoY2hhcmFjdGVyID09ICdcbicg
JiYgIXByZXNlcnZlTmV3bGluZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc1NvZnRMaW5l
QnJlYWsoY2hhciBjaGFyYWN0ZXIsIGJvb2wgcHJlc2VydmVOZXdsaW5lKQoreworICAgIHJldHVy
biBwcmVzZXJ2ZU5ld2xpbmUgJiYgY2hhcmFjdGVyID09ICdcbic7Cit9CisKK3N0YXRpYyB1bnNp
Z25lZCBtb3ZlVG9OZXh0Tm9uV2hpdGVzcGFjZVBvc2l0aW9uKFN0cmluZyB0ZXh0Q29udGVudCwg
dW5zaWduZWQgc3RhcnRQb3NpdGlvbiwgYm9vbCBwcmVzZXJ2ZU5ld2xpbmUpCit7CisgICAgYXV0
byBuZXh0Tm9uV2hpdGVTcGFjZVBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbjsKKyAgICB3aGlsZSAo
bmV4dE5vbldoaXRlU3BhY2VQb3NpdGlvbiA8IHRleHRDb250ZW50Lmxlbmd0aCgpICYmIGlzV2hp
dGVzcGFjZUNoYXJhY3Rlcih0ZXh0Q29udGVudFtuZXh0Tm9uV2hpdGVTcGFjZVBvc2l0aW9uXSwg
cHJlc2VydmVOZXdsaW5lKSkKKyAgICAgICAgKytuZXh0Tm9uV2hpdGVTcGFjZVBvc2l0aW9uOwor
ICAgIHJldHVybiBuZXh0Tm9uV2hpdGVTcGFjZVBvc2l0aW9uIC0gc3RhcnRQb3NpdGlvbjsKK30K
Kworc3RhdGljIHVuc2lnbmVkIG1vdmVUb05leHRCcmVha2FibGVQb3NpdGlvbih1bnNpZ25lZCBz
dGFydFBvc2l0aW9uLCBMYXp5TGluZUJyZWFrSXRlcmF0b3IgbGluZUJyZWFrSXRlcmF0b3IsIGNv
bnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKK3sKKyAgICBhdXRvIGZpbmROZXh0QnJlYWthYmxlUG9z
aXRpb24gPSBbJl0oYXV0byBzdGFydFBvc2l0aW9uKSB7CisgICAgICAgIGF1dG8ga2VlcEFsbFdv
cmRzRm9yQ0pLID0gc3R5bGUud29yZEJyZWFrKCkgPT0gV29yZEJyZWFrOjpLZWVwQWxsOworICAg
ICAgICBhdXRvIGJyZWFrTkJTUCA9IHN0eWxlLmF1dG9XcmFwKCkgJiYgc3R5bGUubmJzcE1vZGUo
KSA9PSBOQlNQTW9kZTo6U3BhY2U7CisKKyAgICAgICAgaWYgKGtlZXBBbGxXb3Jkc0ZvckNKSykg
eworICAgICAgICAgICAgaWYgKGJyZWFrTkJTUCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV4
dEJyZWFrYWJsZVBvc2l0aW9uS2VlcGluZ0FsbFdvcmRzKGxpbmVCcmVha0l0ZXJhdG9yLCBzdGFy
dFBvc2l0aW9uKTsKKyAgICAgICAgICAgIHJldHVybiBuZXh0QnJlYWthYmxlUG9zaXRpb25LZWVw
aW5nQWxsV29yZHNJZ25vcmluZ05CU1AobGluZUJyZWFrSXRlcmF0b3IsIHN0YXJ0UG9zaXRpb24p
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGxpbmVCcmVha0l0ZXJhdG9yLm1vZGUoKSA9PSBM
aW5lQnJlYWtJdGVyYXRvck1vZGU6OkRlZmF1bHQpIHsKKyAgICAgICAgICAgIGlmIChicmVha05C
U1ApCisgICAgICAgICAgICAgICAgcmV0dXJuIFdlYkNvcmU6Om5leHRCcmVha2FibGVQb3NpdGlv
bihsaW5lQnJlYWtJdGVyYXRvciwgc3RhcnRQb3NpdGlvbik7CisgICAgICAgICAgICByZXR1cm4g
bmV4dEJyZWFrYWJsZVBvc2l0aW9uSWdub3JpbmdOQlNQKGxpbmVCcmVha0l0ZXJhdG9yLCBzdGFy
dFBvc2l0aW9uKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChicmVha05CU1ApCisgICAgICAg
ICAgICByZXR1cm4gbmV4dEJyZWFrYWJsZVBvc2l0aW9uV2l0aG91dFNob3J0Y3V0KGxpbmVCcmVh
a0l0ZXJhdG9yLCBzdGFydFBvc2l0aW9uKTsKKyAgICAgICAgcmV0dXJuIG5leHRCcmVha2FibGVQ
b3NpdGlvbklnbm9yaW5nTkJTUFdpdGhvdXRTaG9ydGN1dChsaW5lQnJlYWtJdGVyYXRvciwgc3Rh
cnRQb3NpdGlvbik7CisgICAgfTsKKworICAgIGF1dG8gdGV4dExlbmd0aCA9IGxpbmVCcmVha0l0
ZXJhdG9yLnN0cmluZ1ZpZXcoKS5sZW5ndGgoKTsKKyAgICBhdXRvIGN1cnJlbnRQb3NpdGlvbiA9
IHN0YXJ0UG9zaXRpb247CisgICAgd2hpbGUgKGN1cnJlbnRQb3NpdGlvbiA8IHRleHRMZW5ndGgg
LSAxKSB7CisgICAgICAgIGF1dG8gbmV4dEJyZWFrYWJsZVBvc2l0aW9uID0gZmluZE5leHRCcmVh
a2FibGVQb3NpdGlvbihjdXJyZW50UG9zaXRpb24pOworICAgICAgICBpZiAobmV4dEJyZWFrYWJs
ZVBvc2l0aW9uICE9IGN1cnJlbnRQb3NpdGlvbikKKyAgICAgICAgICAgIHJldHVybiBuZXh0QnJl
YWthYmxlUG9zaXRpb24gLSBjdXJyZW50UG9zaXRpb247CisgICAgICAgICsrY3VycmVudFBvc2l0
aW9uOworICAgIH0KKyAgICByZXR1cm4gdGV4dExlbmd0aCAtIHN0YXJ0UG9zaXRpb247Cit9CisK
K3ZvaWQgSW5saW5lVGV4dEl0ZW06OmNyZWF0ZUFuZEFwcGVuZFRleHRJdGVtcyhJbmxpbmVJdGVt
cyYgaW5saW5lQ29udGVudCwgY29uc3QgSW5saW5lQm94JiBpbmxpbmVCb3gpCit7CisgICAgYXV0
byYgc3R5bGUgPSBpbmxpbmVCb3guc3R5bGUoKTsKKyAgICBhdXRvIHByZXNlcnZlTmV3bGluZSA9
IHN0eWxlLnByZXNlcnZlTmV3bGluZSgpOworICAgIGF1dG8gY29sbGFwc2VXaGl0ZVNwYWNlID0g
c3R5bGUuY29sbGFwc2VXaGl0ZVNwYWNlKCk7CisgICAgYXV0byB0ZXh0ID0gaW5saW5lQm94LnRl
eHRDb250ZW50KCk7CisgICAgTGF6eUxpbmVCcmVha0l0ZXJhdG9yIGxpbmVCcmVha0l0ZXJhdG9y
KHRleHQpOworCisgICAgdW5zaWduZWQgY3VycmVudFBvc2l0aW9uID0gMDsKKyAgICB3aGlsZSAo
Y3VycmVudFBvc2l0aW9uIDwgdGV4dC5sZW5ndGgoKSkgeworICAgICAgICAvLyBTb2Z0IGxpbmVi
cmVhaz8KKyAgICAgICAgaWYgKGlzU29mdExpbmVCcmVhayh0ZXh0W2N1cnJlbnRQb3NpdGlvbl0s
IHByZXNlcnZlTmV3bGluZSkpIHsKKyAgICAgICAgICAgIGlubGluZUNvbnRlbnQuYWRkKHN0ZDo6
bWFrZV91bmlxdWU8SW5saW5lVGV4dEl0ZW0+KGlubGluZUJveCwgY3VycmVudFBvc2l0aW9uLCAx
LCB0cnVlLCBmYWxzZSkpOworICAgICAgICAgICAgKytjdXJyZW50UG9zaXRpb247CisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXNXaGl0ZXNwYWNlQ2hhcmFj
dGVyKHRleHRbY3VycmVudFBvc2l0aW9uXSwgcHJlc2VydmVOZXdsaW5lKSkgeworICAgICAgICAg
ICAgYXV0byBsZW5ndGggPSBtb3ZlVG9OZXh0Tm9uV2hpdGVzcGFjZVBvc2l0aW9uKHRleHQsIGN1
cnJlbnRQb3NpdGlvbiwgcHJlc2VydmVOZXdsaW5lKTsKKyAgICAgICAgICAgIGF1dG8gaXNDb2xs
YXBzZWQgPSBjb2xsYXBzZVdoaXRlU3BhY2UgJiYgbGVuZ3RoID4gMTsKKyAgICAgICAgICAgIGlu
bGluZUNvbnRlbnQuYWRkKHN0ZDo6bWFrZV91bmlxdWU8SW5saW5lVGV4dEl0ZW0+KGlubGluZUJv
eCwgY3VycmVudFBvc2l0aW9uLCBsZW5ndGgsIHRydWUsIGlzQ29sbGFwc2VkKSk7CisgICAgICAg
ICAgICBjdXJyZW50UG9zaXRpb24gKz0gbGVuZ3RoOworICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIH0KKworICAgICAgICBhdXRvIGxlbmd0aCA9IG1vdmVUb05leHRCcmVha2FibGVQb3Np
dGlvbihjdXJyZW50UG9zaXRpb24sIGxpbmVCcmVha0l0ZXJhdG9yLCBzdHlsZSk7CisgICAgICAg
IGlubGluZUNvbnRlbnQuYWRkKHN0ZDo6bWFrZV91bmlxdWU8SW5saW5lVGV4dEl0ZW0+KGlubGlu
ZUJveCwgY3VycmVudFBvc2l0aW9uLCBsZW5ndGgsIGZhbHNlLCBmYWxzZSkpOworICAgICAgICBj
dXJyZW50UG9zaXRpb24gKz0gbGVuZ3RoOworICAgIH0KK30KKworSW5saW5lVGV4dEl0ZW06Oklu
bGluZVRleHRJdGVtKGNvbnN0IElubGluZUJveCYgaW5saW5lQm94LCB1bnNpZ25lZCBzdGFydCwg
dW5zaWduZWQgbGVuZ3RoLCBib29sIGlzV2hpdGVzcGFjZSwgYm9vbCBpc0NvbGxhcHNlZCkKKyAg
ICA6IElubGluZUl0ZW0oaW5saW5lQm94LCBUeXBlOjpUZXh0KQorICAgICwgbV9zdGFydChzdGFy
dCkKKyAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKKyAgICAsIG1faXNXaGl0ZXNwYWNlKGlzV2hpdGVz
cGFjZSkKKyAgICAsIG1faXNDb2xsYXBzZWQoaXNDb2xsYXBzZWQpCit7Cit9CisKK30KK30KKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcv
SW5saW5lVGV4dEl0ZW0uaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5n
L0lubGluZVRleHRJdGVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjg3NGYyOGEzMWRjZDAwYWJlZGU4ODk3NTc0
NTEzY2JlMjllMTZkZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9p
bmxpbmVmb3JtYXR0aW5nL0lubGluZVRleHRJdGVtLmgKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRF
WFQpCisKKyNpbmNsdWRlICJJbmxpbmVJdGVtLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25h
bWVzcGFjZSBMYXlvdXQgeworCitjbGFzcyBJbmxpbmVUZXh0SXRlbSA6IHB1YmxpYyBJbmxpbmVJ
dGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCBjcmVhdGVBbmRBcHBlbmRUZXh0SXRlbXMo
SW5saW5lSXRlbXMmLCBjb25zdCBJbmxpbmVCb3gmKTsKKworICAgIElubGluZVRleHRJdGVtKGNv
bnN0IElubGluZUJveCYsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIGJvb2wgaXNX
aGl0ZXNwYWNlLCBib29sIGlzQ29sbGFwc2VkKTsKKworICAgIHVuc2lnbmVkIHN0YXJ0KCkgY29u
c3QgeyByZXR1cm4gbV9zdGFydDsgfQorICAgIHVuc2lnbmVkIGVuZCgpIGNvbnN0IHsgcmV0dXJu
IHN0YXJ0KCkgKyBsZW5ndGgoKTsgfQorICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fbGVuZ3RoOyB9CisKKyAgICBib29sIGlzV2hpdGVzcGFjZSgpIGNvbnN0IHsgcmV0dXJu
IG1faXNXaGl0ZXNwYWNlOyB9CisgICAgYm9vbCBpc0NvbGxhcHNlZCgpIGNvbnN0IHsgcmV0dXJu
IG1faXNDb2xsYXBzZWQ7IH0KKworcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBtX3N0YXJ0IHsgMCB9
OworICAgIHVuc2lnbmVkIG1fbGVuZ3RoIHsgMCB9OworICAgIGJvb2wgbV9pc1doaXRlc3BhY2Ug
eyBmYWxzZSB9OworICAgIGJvb2wgbV9pc0NvbGxhcHNlZCB7IGZhbHNlIH07Cit9OworCit9Cit9
CisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfSU5MSU5FX0lURU0oSW5saW5lVGV4dEl0ZW0sIGlz
VGV4dCgpKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxp
bmVmb3JtYXR0aW5nL3RleHQvVGV4dFV0aWwuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lu
bGluZWZvcm1hdHRpbmcvdGV4dC9UZXh0VXRpbC5jcHAKaW5kZXggMzc1ZWQ3MjNjZDJiMjk4NGRm
NzNlMGU3MzIxMWJhMDI4NDE4ZmUwOC4uYzEzOWVhYmE3NTc2OTZkM2M4NzZmNDQ0ZGNjOTdmZWM3
YzNhNjNlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRp
bmcvdGV4dC9UZXh0VXRpbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZv
cm1hdHRpbmcvdGV4dC9UZXh0VXRpbC5jcHAKQEAgLTM0LDE5ICszNCwxOSBAQAogbmFtZXNwYWNl
IFdlYkNvcmUgewogbmFtZXNwYWNlIExheW91dCB7CiAKLU9wdGlvbmFsPEl0ZW1Qb3NpdGlvbj4g
VGV4dFV0aWw6Omh5cGhlblBvc2l0aW9uQmVmb3JlKGNvbnN0IElubGluZUl0ZW0mLCBJdGVtUG9z
aXRpb24sIHVuc2lnbmVkKQorT3B0aW9uYWw8dW5zaWduZWQ+IFRleHRVdGlsOjpoeXBoZW5Qb3Np
dGlvbkJlZm9yZShjb25zdCBJbmxpbmVJdGVtJiwgdW5zaWduZWQsIHVuc2lnbmVkKQogewogICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKLUxheW91dFVuaXQgVGV4dFV0aWw6OndpZHRoKGNv
bnN0IElubGluZUl0ZW0mIGlubGluZVRleHRJdGVtLCBJdGVtUG9zaXRpb24gZnJvbSwgSXRlbVBv
c2l0aW9uIHRvLCBMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsTGVmdCkKK0xheW91dFVuaXQgVGV4
dFV0aWw6OndpZHRoKGNvbnN0IElubGluZUJveCYgaW5saW5lQm94LCB1bnNpZ25lZCBmcm9tLCB1
bnNpZ25lZCB0bywgTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbExlZnQpCiB7Ci0gICAgYXV0byYg
c3R5bGUgPSBpbmxpbmVUZXh0SXRlbS5zdHlsZSgpOworICAgIGF1dG8mIHN0eWxlID0gaW5saW5l
Qm94LnN0eWxlKCk7CiAgICAgYXV0byYgZm9udCA9IHN0eWxlLmZvbnRDYXNjYWRlKCk7CiAgICAg
aWYgKCFmb250LnNpemUoKSB8fCBmcm9tID09IHRvKQogICAgICAgICByZXR1cm4gMDsKIAotICAg
IGF1dG8gdGV4dCA9IGlubGluZVRleHRJdGVtLnRleHRDb250ZW50KCk7CisgICAgYXV0byB0ZXh0
ID0gaW5saW5lQm94LnRleHRDb250ZW50KCk7CiAgICAgQVNTRVJUKHRvIDw9IHRleHQubGVuZ3Ro
KCkpOwogCiAgICAgaWYgKGZvbnQuaXNGaXhlZFBpdGNoKCkpCkBAIC03MCw3ICs3MCw3IEBAIExh
eW91dFVuaXQgVGV4dFV0aWw6OndpZHRoKGNvbnN0IElubGluZUl0ZW0mIGlubGluZVRleHRJdGVt
LCBJdGVtUG9zaXRpb24gZnJvbSwKICAgICByZXR1cm4gc3RkOjptYXg8TGF5b3V0VW5pdD4oMCwg
d2lkdGgpOwogfQogCi1MYXlvdXRVbml0IFRleHRVdGlsOjpmaXhlZFBpdGNoV2lkdGgoU3RyaW5n
IHRleHQsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgSXRlbVBvc2l0aW9uIGZyb20sIEl0ZW1Q
b3NpdGlvbiB0bywgTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbExlZnQpCitMYXlvdXRVbml0IFRl
eHRVdGlsOjpmaXhlZFBpdGNoV2lkdGgoU3RyaW5nIHRleHQsIGNvbnN0IFJlbmRlclN0eWxlJiBz
dHlsZSwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8sIExheW91dFVuaXQgY29udGVudExvZ2lj
YWxMZWZ0KQogewogICAgIGF1dG8mIGZvbnQgPSBzdHlsZS5mb250Q2FzY2FkZSgpOwogICAgIGF1
dG8gbW9ub3NwYWNlQ2hhcmFjdGVyV2lkdGggPSBmb250LnNwYWNlV2lkdGgoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL3RleHQvVGV4dFV0aWwu
aCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL3RleHQvVGV4dFV0aWwu
aAppbmRleCA4MzZhOWVjNDBkM2E3MmViOTI2NzRhNTNiMzcyZTUwZDJmM2RhY2I3Li5kMGZlYTZh
ZDFkZGQ3MjlkNzRmOWJkZmIxYmM5ZDIxYzk4N2QyZTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy90ZXh0L1RleHRVdGlsLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvdGV4dC9UZXh0VXRpbC5oCkBAIC0yOCwx
OCArMjgsMTcgQEAKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKIAogI2lu
Y2x1ZGUgIklubGluZUl0ZW0uaCIKLSNpbmNsdWRlICJJbmxpbmVSdW5Qcm92aWRlci5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgTGF5b3V0IHsKIAogY2xhc3MgVGV4dFV0aWwg
ewogcHVibGljOgotICAgIHN0YXRpYyBMYXlvdXRVbml0IHdpZHRoKGNvbnN0IElubGluZUl0ZW0m
LCBJdGVtUG9zaXRpb24gZnJvbSwgSXRlbVBvc2l0aW9uIHRvLCBMYXlvdXRVbml0IGNvbnRlbnRM
b2dpY2FsTGVmdCk7Ci0gICAgc3RhdGljIE9wdGlvbmFsPEl0ZW1Qb3NpdGlvbj4gaHlwaGVuUG9z
aXRpb25CZWZvcmUoY29uc3QgSW5saW5lSXRlbSYsIEl0ZW1Qb3NpdGlvbiBmcm9tLCB1bnNpZ25l
ZCBsZW5ndGgpOworICAgIHN0YXRpYyBMYXlvdXRVbml0IHdpZHRoKGNvbnN0IElubGluZUJveCYs
IHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvLCBMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsTGVm
dCk7CisgICAgc3RhdGljIE9wdGlvbmFsPHVuc2lnbmVkPiBoeXBoZW5Qb3NpdGlvbkJlZm9yZShj
b25zdCBJbmxpbmVJdGVtJiwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuZ3RoKTsKIAogcHJp
dmF0ZToKLSAgICBzdGF0aWMgTGF5b3V0VW5pdCBmaXhlZFBpdGNoV2lkdGgoU3RyaW5nLCBjb25z
dCBSZW5kZXJTdHlsZSYsIEl0ZW1Qb3NpdGlvbiBmcm9tLCBJdGVtUG9zaXRpb24gdG8sIExheW91
dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0KTsKKyAgICBzdGF0aWMgTGF5b3V0VW5pdCBmaXhlZFBp
dGNoV2lkdGgoU3RyaW5nLCBjb25zdCBSZW5kZXJTdHlsZSYsIHVuc2lnbmVkIGZyb20sIHVuc2ln
bmVkIHRvLCBMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsTGVmdCk7CiB9OwogCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRCb3guaCBiL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9sYXlvdXR0cmVlL0xheW91dEJveC5oCmluZGV4IDYyZmIwZDE0ODA4
MWMxYjRjM2YyOGQwN2UwOThiN2E2NWJiYTgxMjEuLmFkMmQzZjg3YjhiYmFmZGM0NDNiYjgzNzY4
ODdhNWQwZmM2ZGZiZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9sYXlvdXR0
cmVlL0xheW91dEJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9sYXlvdXR0cmVlL0xh
eW91dEJveC5oCkBAIC0xNTUsNyArMTU1LDcgQEAgcHJpdmF0ZToKIAogICAgIHN0ZDo6dW5pcXVl
X3B0cjxSZXBsYWNlZD4gbV9yZXBsYWNlZDsKIAotICAgIHVuc2lnbmVkIG1fYmFzZVR5cGVGbGFn
cyA6IDU7CisgICAgdW5zaWduZWQgbV9iYXNlVHlwZUZsYWdzIDogNjsKIH07CiAKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9sYXlvdXR0cmVlL0xheW91dFJlcGxhY2VkLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9sYXlvdXR0cmVlL0xheW91dFJlcGxhY2VkLmNwcApp
bmRleCBlOTA3NDIzMTY2NjU3NTE0Mjc5OWQ2OTg3YmY2YmEyM2VjYjY5MGM3Li40ZjNkZGRiZjE2
NGNiOGQ5ZGI5YWUwZjY2ZGViYWVmMmIxMzZjMDM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRSZXBsYWNlZC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0UmVwbGFjZWQuY3BwCkBAIC04MCw3ICs4MCw3IEBA
IExheW91dFVuaXQgUmVwbGFjZWQ6OmludHJpbnNpY1JhdGlvKCkgY29uc3QKICAgICBBU1NFUlQo
aGFzSW50cmluc2ljUmF0aW8oKSB8fCAoaGFzSW50cmluc2ljV2lkdGgoKSAmJiBoYXNJbnRyaW5z
aWNIZWlnaHQoKSkpOwogICAgIGlmIChtX2ludHJpbnNpY1JhdGlvKQogICAgICAgICByZXR1cm4g
Km1faW50cmluc2ljUmF0aW87Ci0gICAgaWYgKG1faW50cmluc2ljU2l6ZSkKKyAgICBpZiAobV9p
bnRyaW5zaWNTaXplICYmIG1faW50cmluc2ljU2l6ZS0+aGVpZ2h0KCkpCiAgICAgICAgIHJldHVy
biBtX2ludHJpbnNpY1NpemUtPndpZHRoKCkgLyBtX2ludHJpbnNpY1NpemUtPmhlaWdodCgpOwog
ICAgIHJldHVybiAxOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2xheW91
dHRyZWUvTGF5b3V0VHJlZUJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2xheW91
dHRyZWUvTGF5b3V0VHJlZUJ1aWxkZXIuY3BwCmluZGV4IGU2MTAyZGNhZWQ0YWY4MzRmYTAwZWE0
ZTRiNzJlNmNmZmFiODY5N2YuLmQ2ZjJhM2VhYmExM2QxNTA1MjY3OTczZDU2Y2Y3M2E2OTVmNjIx
M2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9sYXlvdXR0cmVlL0xheW91dFRy
ZWVCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvbGF5b3V0dHJlZS9MYXlv
dXRUcmVlQnVpbGRlci5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoTEFZT1VUX0ZP
Uk1BVFRJTkdfQ09OVEVYVCkKIAogI2luY2x1ZGUgIkRpc3BsYXlCb3guaCIKKyNpbmNsdWRlICJE
aXNwbGF5UnVuLmgiCiAjaW5jbHVkZSAiSW5saW5lRm9ybWF0dGluZ1N0YXRlLmgiCiAjaW5jbHVk
ZSAiTGF5b3V0QmxvY2tDb250YWluZXIuaCIKICNpbmNsdWRlICJMYXlvdXRCb3guaCIKQEAgLTQy
LDYgKzQzLDcgQEAKICNpbmNsdWRlICJSZW5kZXJFbGVtZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVy
SW1hZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKKyNpbmNsdWRlICJSZW5kZXJMaW5l
QnJlYWsuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcu
aCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CkBAIC02MCw2ICs2MiwxNSBAQCBz
dGQ6OnVuaXF1ZV9wdHI8Q29udGFpbmVyPiBUcmVlQnVpbGRlcjo6Y3JlYXRlTGF5b3V0VHJlZShj
b25zdCBSZW5kZXJWaWV3JiByZW5kZQogICAgIHJldHVybiBpbml0aWFsQ29udGFpbmluZ0Jsb2Nr
OwogfQogCitzdGF0aWMgT3B0aW9uYWw8TGF5b3V0U2l6ZT4gYWNjdW11bGF0ZWRPZmZzZXRGb3JJ
bkZsb3dQb3NpdGlvbmVkQ29udGludWF0aW9uKGNvbnN0IFJlbmRlckJveCYgYmxvY2spCit7Cisg
ICAgLy8gRklYRTogVGhpcyBpcyBhIHdvcmthcm91bmQgb2YgdGhlIGNvbnRpbnVhdGlvbiBsb2dp
YyB3aGVuIHRoZSByZWxhdGl2ZWx5IHBvc2l0aW9uZWQgcGFyZW50IGlubGluZSBib3gKKyAgICAv
LyBiZWNvbWVzIGEgc2libGluZyBib3ggb2YgdGhpcyBibG9jayBhbmQgb25seSByZWFjaGFibGUg
dGhyb3VnaCB0aGUgY29udGludWF0aW9uIGxpbmsgd2hpY2ggd2UgZG9uJ3QgaGF2ZSBoZXJlLgor
ICAgIGlmICghYmxvY2suaXNBbm9ueW1vdXMoKSB8fCAhYmxvY2suaXNJbkZsb3dQb3NpdGlvbmVk
KCkgfHwgIWJsb2NrLmlzQ29udGludWF0aW9uKCkpCisgICAgICAgIHJldHVybiB7IH07CisgICAg
cmV0dXJuIGJsb2NrLnJlbGF0aXZlUG9zaXRpb25PZmZzZXQoKTsKK30KKwogdm9pZCBUcmVlQnVp
bGRlcjo6Y3JlYXRlU3ViVHJlZShjb25zdCBSZW5kZXJFbGVtZW50JiByb290UmVuZGVyZXIsIENv
bnRhaW5lciYgcm9vdENvbnRhaW5lcikKIHsKICAgICBhdXRvIGVsZW1lbnRBdHRyaWJ1dGVzID0g
W10gKGNvbnN0IFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyKSAtPiBPcHRpb25hbDxCb3g6OkVsZW1l
bnRBdHRyaWJ1dGVzPiB7CkBAIC05Nyw2ICsxMDgsOSBAQCB2b2lkIFRyZWVCdWlsZGVyOjpjcmVh
dGVTdWJUcmVlKGNvbnN0IFJlbmRlckVsZW1lbnQmIHJvb3RSZW5kZXJlciwgQ29udGFpbmVyJiBy
bwogICAgICAgICBpZiAoaXM8UmVuZGVyVGV4dD4oY2hpbGQpKSB7CiAgICAgICAgICAgICBib3gg
PSBzdGQ6Om1ha2VfdW5pcXVlPElubGluZUJveD4oT3B0aW9uYWw8Qm94OjpFbGVtZW50QXR0cmli
dXRlcz4oKSwgUmVuZGVyU3R5bGU6OmNyZWF0ZUFub255bW91c1N0eWxlV2l0aERpc3BsYXkocm9v
dFJlbmRlcmVyLnN0eWxlKCksIERpc3BsYXlUeXBlOjpJbmxpbmUpKTsKICAgICAgICAgICAgIGRv
d25jYXN0PElubGluZUJveD4oKmJveCkuc2V0VGV4dENvbnRlbnQoZG93bmNhc3Q8UmVuZGVyVGV4
dD4oY2hpbGQpLm9yaWdpbmFsVGV4dCgpKTsKKyAgICAgICAgfSBlbHNlIGlmIChpczxSZW5kZXJM
aW5lQnJlYWs+KGNoaWxkKSkgeworICAgICAgICAgICAgYXV0byYgcmVuZGVyZXIgPSBkb3duY2Fz
dDxSZW5kZXJMaW5lQnJlYWs+KGNoaWxkKTsKKyAgICAgICAgICAgIGJveCA9IHN0ZDo6bWFrZV91
bmlxdWU8TGluZUJyZWFrQm94PihlbGVtZW50QXR0cmlidXRlcyhyZW5kZXJlciksIFJlbmRlclN0
eWxlOjpjbG9uZShyZW5kZXJlci5zdHlsZSgpKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXM8UmVu
ZGVyUmVwbGFjZWQ+KGNoaWxkKSkgewogICAgICAgICAgICAgYXV0byYgcmVuZGVyZXIgPSBkb3du
Y2FzdDxSZW5kZXJSZXBsYWNlZD4oY2hpbGQpOwogICAgICAgICAgICAgYXV0byBkaXNwbGF5ID0g
cmVuZGVyZXIuc3R5bGUoKS5kaXNwbGF5KCk7CkBAIC0xMTUsOSArMTI5LDE1IEBAIHZvaWQgVHJl
ZUJ1aWxkZXI6OmNyZWF0ZVN1YlRyZWUoY29uc3QgUmVuZGVyRWxlbWVudCYgcm9vdFJlbmRlcmVy
LCBDb250YWluZXImIHJvCiAgICAgICAgIH0gZWxzZSBpZiAoaXM8UmVuZGVyRWxlbWVudD4oY2hp
bGQpKSB7CiAgICAgICAgICAgICBhdXRvJiByZW5kZXJlciA9IGRvd25jYXN0PFJlbmRlckVsZW1l
bnQ+KGNoaWxkKTsKICAgICAgICAgICAgIGF1dG8gZGlzcGxheSA9IHJlbmRlcmVyLnN0eWxlKCku
ZGlzcGxheSgpOwotICAgICAgICAgICAgaWYgKGRpc3BsYXkgPT0gRGlzcGxheVR5cGU6OkJsb2Nr
KQotICAgICAgICAgICAgICAgIGJveCA9IHN0ZDo6bWFrZV91bmlxdWU8QmxvY2tDb250YWluZXI+
KGVsZW1lbnRBdHRyaWJ1dGVzKHJlbmRlcmVyKSwgUmVuZGVyU3R5bGU6OmNsb25lKHJlbmRlcmVy
LnN0eWxlKCkpKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGRpc3BsYXkgPT0gRGlzcGxheVR5cGU6
OklubGluZSkKKyAgICAgICAgICAgIGlmIChkaXNwbGF5ID09IERpc3BsYXlUeXBlOjpCbG9jaykg
eworICAgICAgICAgICAgICAgIGlmIChhdXRvIG9mZnNldCA9IGFjY3VtdWxhdGVkT2Zmc2V0Rm9y
SW5GbG93UG9zaXRpb25lZENvbnRpbnVhdGlvbihkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVy
KSkpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBzdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9u
ZVB0cihyZW5kZXJlci5zdHlsZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgc3R5bGUtPnNldFRv
cCh7IG9mZnNldC0+aGVpZ2h0KCksIEZpeGVkIH0pOworICAgICAgICAgICAgICAgICAgICBzdHls
ZS0+c2V0TGVmdCh7IG9mZnNldC0+d2lkdGgoKSwgRml4ZWQgfSk7CisgICAgICAgICAgICAgICAg
ICAgIGJveCA9IHN0ZDo6bWFrZV91bmlxdWU8QmxvY2tDb250YWluZXI+KGVsZW1lbnRBdHRyaWJ1
dGVzKHJlbmRlcmVyKSwgV1RGTW92ZSgqc3R5bGUpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgYm94ID0gc3RkOjptYWtlX3VuaXF1ZTxCbG9ja0NvbnRhaW5l
cj4oZWxlbWVudEF0dHJpYnV0ZXMocmVuZGVyZXIpLCBSZW5kZXJTdHlsZTo6Y2xvbmUocmVuZGVy
ZXIuc3R5bGUoKSkpOworICAgICAgICAgICAgfSBlbHNlIGlmIChkaXNwbGF5ID09IERpc3BsYXlU
eXBlOjpJbmxpbmUpCiAgICAgICAgICAgICAgICAgYm94ID0gc3RkOjptYWtlX3VuaXF1ZTxJbmxp
bmVDb250YWluZXI+KGVsZW1lbnRBdHRyaWJ1dGVzKHJlbmRlcmVyKSwgUmVuZGVyU3R5bGU6OmNs
b25lKHJlbmRlcmVyLnN0eWxlKCkpKTsKICAgICAgICAgICAgIGVsc2UgaWYgKGRpc3BsYXkgPT0g
RGlzcGxheVR5cGU6OklubGluZUJsb2NrKQogICAgICAgICAgICAgICAgIGJveCA9IHN0ZDo6bWFr
ZV91bmlxdWU8SW5saW5lQ29udGFpbmVyPihlbGVtZW50QXR0cmlidXRlcyhyZW5kZXJlciksIFJl
bmRlclN0eWxlOjpjbG9uZShyZW5kZXJlci5zdHlsZSgpKSk7CkBAIC0xNTcsMjAgKzE3NywzMCBA
QCB2b2lkIFRyZWVCdWlsZGVyOjpjcmVhdGVTdWJUcmVlKGNvbnN0IFJlbmRlckVsZW1lbnQmIHJv
b3RSZW5kZXJlciwgQ29udGFpbmVyJiBybwogI2lmIEVOQUJMRShUUkVFX0RFQlVHR0lORykKIHN0
YXRpYyB2b2lkIG91dHB1dElubGluZVJ1bnMoVGV4dFN0cmVhbSYgc3RyZWFtLCBjb25zdCBMYXlv
dXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IENvbnRhaW5lciYgaW5saW5lRm9ybWF0dGluZ1Jv
b3QsIHVuc2lnbmVkIGRlcHRoKQogewotICAgIGF1dG8mIGlubGluZUZvcm1hdHRpbmdTdGF0ZSA9
IGxheW91dFN0YXRlLmVzdGFibGlzaGVkRm9ybWF0dGluZ1N0YXRlKGlubGluZUZvcm1hdHRpbmdS
b290KTsKLSAgICBBU1NFUlQoaXM8SW5saW5lRm9ybWF0dGluZ1N0YXRlPihpbmxpbmVGb3JtYXR0
aW5nU3RhdGUpKTsKLSAgICBhdXRvJiBpbmxpbmVSdW5zID0gZG93bmNhc3Q8SW5saW5lRm9ybWF0
dGluZ1N0YXRlPihpbmxpbmVGb3JtYXR0aW5nU3RhdGUpLmlubGluZVJ1bnMoKTsKKyAgICBhdXRv
JiBpbmxpbmVGb3JtYXR0aW5nU3RhdGUgPSBkb3duY2FzdDxJbmxpbmVGb3JtYXR0aW5nU3RhdGU+
KGxheW91dFN0YXRlLmVzdGFibGlzaGVkRm9ybWF0dGluZ1N0YXRlKGlubGluZUZvcm1hdHRpbmdS
b290KSk7CisgICAgYXV0byYgaW5saW5lUnVucyA9IGlubGluZUZvcm1hdHRpbmdTdGF0ZS5pbmxp
bmVSdW5zKCk7CisgICAgYXV0byYgbGluZUJveGVzID0gaW5saW5lRm9ybWF0dGluZ1N0YXRlLmxp
bmVCb3hlcygpOworCisgICAgdW5zaWduZWQgcHJpbnRlZENoYXJhY3RlcnMgPSAwOworICAgIHdo
aWxlICgrK3ByaW50ZWRDaGFyYWN0ZXJzIDw9IGRlcHRoICogMykKKyAgICAgICAgc3RyZWFtIDw8
ICIgIjsKKworICAgIHN0cmVhbSA8PCAibGluZXMgYXJlIC0+ICI7CisgICAgZm9yIChhdXRvJiBs
aW5lQm94IDogbGluZUJveGVzKQorICAgICAgICBzdHJlYW0gPDwgIlsiIDw8IGxpbmVCb3gubG9n
aWNhbExlZnQoKSA8PCAiLCIgPDwgbGluZUJveC5sb2dpY2FsVG9wKCkgPDwgIiAiIDw8IGxpbmVC
b3gubG9naWNhbFdpZHRoKCkgPDwgIngiIDw8IGxpbmVCb3gubG9naWNhbEhlaWdodCgpIDw8ICJd
ICI7CisgICAgc3RyZWFtLm5leHRMaW5lKCk7CiAKICAgICBmb3IgKGF1dG8mIGlubGluZVJ1biA6
IGlubGluZVJ1bnMpIHsKICAgICAgICAgdW5zaWduZWQgcHJpbnRlZENoYXJhY3RlcnMgPSAwOwot
ICAgICAgICB3aGlsZSAoKytwcmludGVkQ2hhcmFjdGVycyA8PSBkZXB0aCAqIDIpCisgICAgICAg
IHdoaWxlICgrK3ByaW50ZWRDaGFyYWN0ZXJzIDw9IGRlcHRoICogMykKICAgICAgICAgICAgIHN0
cmVhbSA8PCAiICI7Ci0gICAgICAgIHN0cmVhbSA8PCAicnVuIjsKLSAgICAgICAgaWYgKGlubGlu
ZVJ1bi50ZXh0Q29udGV4dCgpKQotICAgICAgICAgICAgc3RyZWFtIDw8ICIoIiA8PCBpbmxpbmVS
dW4udGV4dENvbnRleHQoKS0+c3RhcnQoKSA8PCAiLCAiIDw8IGlubGluZVJ1bi50ZXh0Q29udGV4
dCgpLT5zdGFydCgpICsgaW5saW5lUnVuLnRleHRDb250ZXh0KCktPmxlbmd0aCgpIDw8ICIpICI7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0cmVhbSA8PCAiKHgsIHgpICI7Ci0gICAgICAg
IHN0cmVhbSA8PCAiYXQgWyIgPDwgaW5saW5lUnVuLmxvZ2ljYWxMZWZ0KCkgPDwgIiwgIiA8PCBp
bmxpbmVSdW4ubG9naWNhbFRvcCgpIDw8ICJdIHNpemUgWyIgPDwgaW5saW5lUnVuLmxvZ2ljYWxX
aWR0aCgpIDw8ICIgIiA8PCBpbmxpbmVSdW4ubG9naWNhbEhlaWdodCgpIDw8ICJdIjsKKyAgICAg
ICAgaWYgKGlubGluZVJ1bi0+dGV4dENvbnRleHQoKSkKKyAgICAgICAgICAgIHN0cmVhbSA8PCAi
aW5saW5lIHRleHQgYm94IjsKKyAgICAgICAgZWxzZSAgCisgICAgICAgICAgICBzdHJlYW0gPDwg
ImlubGluZSBib3giOworICAgICAgICBzdHJlYW0gPDwgIiBhdCAoIiA8PCBpbmxpbmVSdW4tPmxv
Z2ljYWxMZWZ0KCkgPDwgIiwiIDw8IGlubGluZVJ1bi0+bG9naWNhbFRvcCgpIDw8ICIpIHNpemUg
IiA8PCBpbmxpbmVSdW4tPmxvZ2ljYWxXaWR0aCgpIDw8ICJ4IiA8PCBpbmxpbmVSdW4tPmxvZ2lj
YWxIZWlnaHQoKTsKKyAgICAgICAgaWYgKGlubGluZVJ1bi0+dGV4dENvbnRleHQoKSkKKyAgICAg
ICAgICAgIHN0cmVhbSA8PCAiIHJ1bigiIDw8IGlubGluZVJ1bi0+dGV4dENvbnRleHQoKS0+c3Rh
cnQoKSA8PCAiLCAiIDw8IGlubGluZVJ1bi0+dGV4dENvbnRleHQoKS0+ZW5kKCkgPDwgIikiOwog
ICAgICAgICBzdHJlYW0ubmV4dExpbmUoKTsKICAgICB9CiB9CkBAIC0xODEsMzMgKzIxMSw0NiBA
QCBzdGF0aWMgdm9pZCBvdXRwdXRMYXlvdXRCb3goVGV4dFN0cmVhbSYgc3RyZWFtLCBjb25zdCBC
b3gmIGxheW91dEJveCwgY29uc3QgRGlzcAogICAgIHdoaWxlICgrK3ByaW50ZWRDaGFyYWN0ZXJz
IDw9IGRlcHRoICogMikKICAgICAgICAgc3RyZWFtIDw8ICIgIjsKIAotICAgIGlmIChpczxJbmxp
bmVDb250YWluZXI+KGxheW91dEJveCkpCi0gICAgICAgIHN0cmVhbSA8PCAiaW5saW5lIGNvbnRh
aW5lciI7Ci0gICAgZWxzZSBpZiAoaXM8SW5saW5lQm94PihsYXlvdXRCb3gpKSB7CisgICAgaWYg
KGxheW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpKQorICAgICAgICBzdHJlYW0gPDwgIltm
bG9hdF0gIjsKKworICAgIGlmIChpczxJbmxpbmVDb250YWluZXI+KGxheW91dEJveCkpIHsKKyAg
ICAgICAgLy8gRklYTUU6IGZpeCBuYW1lcworICAgICAgICBpZiAobGF5b3V0Qm94LmlzSW5saW5l
QmxvY2tCb3goKSkKKyAgICAgICAgICAgIHN0cmVhbSA8PCAiRElWIGlubGluZS1ibG9jayBjb250
YWluZXIiOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzdHJlYW0gPDwgIlNQQU4gaW5saW5l
IGNvbnRhaW5lciI7CisgICAgfSBlbHNlIGlmIChpczxJbmxpbmVCb3g+KGxheW91dEJveCkpIHsK
ICAgICAgICAgaWYgKGxheW91dEJveC5yZXBsYWNlZCgpKQotICAgICAgICAgICAgc3RyZWFtIDw8
ICJpbmxpbmUgcmVwbGFjZWQgYm94IjsKLSAgICAgICAgZWxzZSBpZiAoZG93bmNhc3Q8SW5saW5l
Qm94PihsYXlvdXRCb3gpLmhhc1RleHRDb250ZW50KCkpIHsKLSAgICAgICAgICAgIGF1dG8gdGV4
dENvbnRlbnQgPSBkb3duY2FzdDxJbmxpbmVCb3g+KGxheW91dEJveCkudGV4dENvbnRlbnQoKTsK
LSAgICAgICAgICAgIHN0cmVhbSA8PCAiaW5saW5lIHRleHQgW1wiIiA8PCB0ZXh0Q29udGVudC51
dGY4KCkuZGF0YSgpIDw8ICJcIl0iOwotICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHN0cmVh
bSA8PCAiSU1HIHJlcGxhY2VkIGlubGluZSBib3giOworICAgICAgICBlbHNlIGlmIChsYXlvdXRC
b3guaXNBbm9ueW1vdXMoKSkKKyAgICAgICAgICAgIHN0cmVhbSA8PCAiYW5vbnltb3VzIGlubGlu
ZSBib3giOworICAgICAgICBlbHNlIGlmIChpczxMaW5lQnJlYWtCb3g+KGxheW91dEJveCkpCisg
ICAgICAgICAgICBzdHJlYW0gPDwgIkJSIGxpbmUgYnJlYWsiOworICAgICAgICBlbHNlCiAgICAg
ICAgICAgICBzdHJlYW0gPDwgImlubGluZSBib3giOwogICAgIH0gZWxzZSBpZiAoaXM8QmxvY2tD
b250YWluZXI+KGxheW91dEJveCkpIHsKICAgICAgICAgaWYgKCFsYXlvdXRCb3gucGFyZW50KCkp
Ci0gICAgICAgICAgICBzdHJlYW0gPDwgImluaXRpYWwgIjsKLSAgICAgICAgc3RyZWFtIDw8ICJi
bG9jayBjb250YWluZXIiOworICAgICAgICAgICAgc3RyZWFtIDw8ICJJbml0aWFsIjsKKyAgICAg
ICAgZWxzZSBpZiAobGF5b3V0Qm94LmlzRG9jdW1lbnRCb3goKSkKKyAgICAgICAgICAgIHN0cmVh
bSA8PCAiSFRNTCI7CisgICAgICAgIGVsc2UgaWYgKGxheW91dEJveC5pc0JvZHlCb3goKSkKKyAg
ICAgICAgICAgIHN0cmVhbSA8PCAiQk9EWSI7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
Ly8gRklYTUUKKyAgICAgICAgICAgIHN0cmVhbSA8PCAiRElWIjsKKyAgICAgICAgfQorICAgICAg
ICBzdHJlYW0gPDwgIiBibG9jayBjb250YWluZXIiOwogICAgIH0gZWxzZSBpZiAobGF5b3V0Qm94
LmlzQmxvY2tMZXZlbEJveCgpKQogICAgICAgICBzdHJlYW0gPDwgImJsb2NrIGJveCI7CiAgICAg
ZWxzZQogICAgICAgICBzdHJlYW0gPDwgImJveCI7CiAgICAgLy8gRklYTUU6IElubGluZSB0ZXh0
IHJ1bnMgZG9uJ3QgY3JlYXRlIGRpc3BsYXkgYm94ZXMgeWV0LgotICAgIGlmIChkaXNwbGF5Qm94
KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBkaXNwbGF5IGJveCBpcyBub3QgY29tcGxldGVseSBzZXQg
eWV0LgotICAgICAgICBpZiAoKGlzPElubGluZUJveD4obGF5b3V0Qm94KSB8fCBpczxJbmxpbmVD
b250YWluZXI+KGxheW91dEJveCkpICYmICFsYXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQo
KSkKLSAgICAgICAgICAgIHN0cmVhbSA8PCAiIGF0IFsiIDw8ICIuIiA8PCAiICIgPDwgIi4iIDw8
ICJdIHNpemUgWyIgPDwgZGlzcGxheUJveC0+d2lkdGgoKSA8PCAiICIgPDwgZGlzcGxheUJveC0+
aGVpZ2h0KCkgPDwgIl0iOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzdHJlYW0gPDwgIiBh
dCBbIiA8PCBkaXNwbGF5Qm94LT5sZWZ0KCkgPDwgIiAiIDw8IGRpc3BsYXlCb3gtPnRvcCgpIDw8
ICJdIHNpemUgWyIgPDwgZGlzcGxheUJveC0+d2lkdGgoKSA8PCAiICIgPDwgZGlzcGxheUJveC0+
aGVpZ2h0KCkgPDwgIl0iOwotICAgIH0KLSAgICBzdHJlYW0gPDwgIiBbIiA8PCAmbGF5b3V0Qm94
IDw8ICJdIjsKKyAgICBpZiAoZGlzcGxheUJveCkKKyAgICAgICAgc3RyZWFtIDw8ICIgYXQgKCIg
PDwgZGlzcGxheUJveC0+bGVmdCgpIDw8ICIsIiA8PCBkaXNwbGF5Qm94LT50b3AoKSA8PCAiKSBz
aXplICIgPDwgZGlzcGxheUJveC0+d2lkdGgoKSA8PCAieCIgPDwgZGlzcGxheUJveC0+aGVpZ2h0
KCk7CisgICAgc3RyZWFtIDw8ICIgbGF5b3V0IGJveC0+KCIgPDwgJmxheW91dEJveCA8PCAiKSI7
CisgICAgaWYgKGlzPElubGluZUJveD4obGF5b3V0Qm94KSAmJiBkb3duY2FzdDxJbmxpbmVCb3g+
KGxheW91dEJveCkuaGFzVGV4dENvbnRlbnQoKSkKKyAgICAgICAgc3RyZWFtIDw8ICIgdGV4dCBj
b250ZW50IFtcIiIgPDwgZG93bmNhc3Q8SW5saW5lQm94PihsYXlvdXRCb3gpLnRleHRDb250ZW50
KCkudXRmOCgpLmRhdGEoKSA8PCAiXCJdIjsKIAogICAgIHN0cmVhbS5uZXh0TGluZSgpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>370639</attachid>
            <date>2019-05-25 11:52:48 -0700</date>
            <delta_ts>2019-05-25 13:14:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-197198-20190525115247.patch</filename>
            <type>text/plain</type>
            <size>203400</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ1NzczCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmVjZmJiYzMxYmYzYzE4
Mjg4M2E1MDMzYTJjNmE4ZWRlYjAxMDMxNi4uOTgxMWVhYzE5YzE0NWI2NWJkMTdiMWFiNWY5MWMy
YzBmNDFjYjRlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwMyBAQAorMjAxOS0wNS0yNSAgWmFs
YW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgorCisgICAgICAgIFtMRkNdW0lGQ10gSW50cm9k
dWNlIERpc3BsYXlSdW4gdG8gZGlzcGxheSB0cmVlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTcxOTgKKworICAgICAgICBSZXZpZXdlZCBieSBBbnR0
aSBLb2l2aXN0by4KKworICAgICAgICBBZGQgYSBzaW1wbGUgaW5saW5lIGxheW91dCBpbXBsZW1l
bnRhdGlvbi4gTm93IHdlJ3ZlIGdvdCBEaXNwbGF5Qm94ZXMgZm9yIGxheW91dCBib3hlcyBhbmQK
KyAgICAgICAgRGlzcGxheVJ1bnMgZm9yIGlubGluZSBydW5zLgorCisgICAgICAgICogU291cmNl
cy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIGxheW91dC9Gb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6Y29udGVudEhlaWdodEZvckZvcm1hdHRpbmdDb250ZXh0Um9vdCk6Cisg
ICAgICAgICogbGF5b3V0L1ZlcmlmaWNhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OmFyZUVzc2VudGlhbGx5RXF1YWwpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpvdXRw
dXRNaXNtYXRjaGluZ1NpbXBsZUxpbmVJbmZvcm1hdGlvbklmTmVlZGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6Y2hlY2tGb3JNYXRjaGluZ05vblRleHRSdW5zKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6Y2hlY2tGb3JNYXRjaGluZ1RleHRSdW5zKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6b3V0cHV0TWlzbWF0Y2hpbmdDb21wbGV4TGluZUluZm9ybWF0aW9uSWZOZWVk
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpvdXRwdXRNaXNtYXRjaGluZ0Jsb2NrQm94
SW5mb3JtYXRpb25JZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OnJlc29sdmVG
b3JSZWxhdGl2ZVBvc2l0aW9uSWZOZWVkZWQpOiBEZWxldGVkLgorICAgICAgICAqIGxheW91dC9i
bG9ja2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6Omlu
Rmxvd05vblJlcGxhY2VkSGVpZ2h0QW5kTWFyZ2luKToKKyAgICAgICAgKiBsYXlvdXQvZGlzcGxh
eXRyZWUvRGlzcGxheUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3g6Om1h
cmdpbkJveCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3g6Om5vbkNvbGxh
cHNlZE1hcmdpbkJveCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3g6OmJv
cmRlckJveCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3g6OnBhZGRpbmdC
b3ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Qm94Ojpjb250ZW50Qm94IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveDo6UmVjdDo6UmVjdCk6IERlbGV0
ZWQuCisgICAgICAgICogbGF5b3V0L2Rpc3BsYXl0cmVlL0Rpc3BsYXlCb3guaDoKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXk6OkJveDo6cmVjdFdpdGhNYXJnaW4gY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheTo6Qm94Ojpob3Jpem9udGFsTWFyZ2luIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXk6OkJveDo6UmVjdDo6aW50ZXJzZWN0cyBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3g6OlJlY3Q6OmludmFsaWRhdGVUb3ApOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Qm94OjpSZWN0OjppbnZhbGlkYXRl
TGVmdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3g6OlJlY3Q6Omlu
dmFsaWRhdGVXaWR0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3g6
OlJlY3Q6OmludmFsaWRhdGVIZWlnaHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheTo6Qm94OjpSZWN0OjpoYXNWYWxpZFBvc2l0aW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveDo6UmVjdDo6aGFzVmFsaWRTaXplIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveDo6UmVjdDo6aGFzVmFsaWRHZW9t
ZXRyeSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3g6OlJl
Y3Q6OmludmFsaWRhdGVQb3NpdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5OjpCb3g6OlJlY3Q6OnNldEhhc1ZhbGlkUG9zaXRpb24pOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheTo6Qm94OjpSZWN0OjpzZXRIYXNWYWxpZFNpemUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Qm94OjpSZWN0Ojp0b3AgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Qm94OjpSZWN0OjpsZWZ0IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveDo6UmVjdDo6Ym90dG9tIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveDo6UmVjdDo6cmlnaHQg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Qm94OjpSZWN0Ojp0
b3BMZWZ0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveDo6
UmVjdDo6Ym90dG9tUmlnaHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheTo6Qm94OjpSZWN0OjpzaXplIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXk6OkJveDo6UmVjdDo6d2lkdGggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheTo6Qm94OjpSZWN0OjpoZWlnaHQgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheTo6Qm94OjpSZWN0OjpzZXRUb3BMZWZ0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveDo6UmVjdDo6c2V0VG9wKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveDo6UmVjdDo6c2V0TGVmdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3g6OlJlY3Q6OnNldFdpZHRoKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveDo6UmVjdDo6c2V0SGVpZ2h0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveDo6UmVjdDo6c2V0U2l6ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3g6OlJlY3Q6OnNoaWZ0TGVmdFRvKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveDo6UmVjdDo6c2hpZnRSaWdo
dFRvKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveDo6UmVjdDo6c2hp
ZnRUb3BUbyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3g6OlJlY3Q6
OnNoaWZ0Qm90dG9tVG8pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Qm94
OjpSZWN0Ojptb3ZlSG9yaXpvbnRhbGx5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXk6OkJveDo6UmVjdDo6bW92ZVZlcnRpY2FsbHkpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheTo6Qm94OjpSZWN0OjpleHBhbmQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheTo6Qm94OjpSZWN0OjpjbG9uZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5OjpCb3g6OlJlY3Q6Om9wZXJhdG9yIExheW91dFJlY3QgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAqIGxheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5UmVjdC5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJlY3Q6OmV4cGFuZEhvcml6b250YWxs
eSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSZWN0OjpleHBhbmRWZXJ0aWNhbGx5KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJlY3Q6OmludGVyc2VjdHMgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UmVjdDo6aW52YWxpZGF0ZVRvcCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5OjpSZWN0OjppbnZhbGlkYXRlTGVmdCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5OjpSZWN0OjppbnZhbGlkYXRlV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheTo6UmVjdDo6aW52YWxpZGF0ZUhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
OjpSZWN0OjpoYXNWYWxpZFBvc2l0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXk6OlJlY3Q6Omhhc1ZhbGlkU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
OjpSZWN0OjpoYXNWYWxpZEdlb21ldHJ5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXk6OlJlY3Q6OlJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UmVjdDo6aW52YWxp
ZGF0ZVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJlY3Q6OnNldEhhc1Zh
bGlkUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UmVjdDo6c2V0SGFzVmFs
aWRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJlY3Q6OnRvcCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSZWN0OjpsZWZ0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXk6OlJlY3Q6OmJvdHRvbSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5OjpSZWN0OjpyaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpS
ZWN0Ojp0b3BMZWZ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJlY3Q6OmJv
dHRvbVJpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJlY3Q6OnNpemUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UmVjdDo6d2lkdGggY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UmVjdDo6aGVpZ2h0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXk6OlJlY3Q6OnNldFRvcExlZnQpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheTo6UmVjdDo6c2V0VG9wKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJlY3Q6
OnNldExlZnQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UmVjdDo6c2V0V2lkdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UmVjdDo6c2V0SGVpZ2h0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXk6OlJlY3Q6OnNldFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eTo6UmVjdDo6c2hpZnRMZWZ0VG8pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UmVjdDo6
c2hpZnRSaWdodFRvKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJlY3Q6OnNoaWZ0VG9w
VG8pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UmVjdDo6c2hpZnRCb3R0b21Ubyk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSZWN0Ojptb3ZlSG9yaXpvbnRhbGx5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJlY3Q6Om1vdmVWZXJ0aWNhbGx5KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXk6OlJlY3Q6OmV4cGFuZCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
OjpSZWN0OjpjbG9uZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSZWN0Ojpv
cGVyYXRvciBMYXlvdXRSZWN0IGNvbnN0KToKKyAgICAgICAgKiBsYXlvdXQvZGlzcGxheXRyZWUv
RGlzcGxheVJ1bi5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZv
cm1hdHRpbmcvSW5saW5lUnVuLmguCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSdW46OlRl
eHRDb250ZXh0OjpzdGFydCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSdW46
OlRleHRDb250ZXh0OjplbmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UnVu
OjpUZXh0Q29udGV4dDo6bGVuZ3RoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6
OlJ1bjo6VGV4dENvbnRleHQ6OmV4cGFuZCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpS
dW46OmxvZ2ljYWxUb3BMZWZ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJ1
bjo6bG9naWNhbExlZnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UnVuOjps
b2dpY2FsUmlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UnVuOjpsb2dp
Y2FsVG9wIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJ1bjo6bG9naWNhbEJv
dHRvbSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSdW46OmxvZ2ljYWxXaWR0
aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSdW46OmxvZ2ljYWxIZWlnaHQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UnVuOjpzZXRMb2dpY2FsV2lkdGgp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UnVuOjpzZXRMb2dpY2FsVG9wKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJ1bjo6c2V0TG9naWNhbExlZnQpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheTo6UnVuOjpzZXRMb2dpY2FsUmlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheTo6UnVuOjptb3ZlVmVydGljYWxseSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
OjpSdW46Om1vdmVIb3Jpem9udGFsbHkpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UnVu
OjpleHBhbmRWZXJ0aWNhbGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJ1bjo6ZXhw
YW5kSG9yaXpvbnRhbGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJ1bjo6c2V0VGV4
dENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UnVuOjp0ZXh0Q29udGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSdW46OnRleHRDb250ZXh0IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJ1bjo6UnVuKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXk6OlJ1bjo6VGV4dENvbnRleHQ6OlRleHRDb250ZXh0KToKKyAgICAgICAgKiBsYXlvdXQv
ZmxvYXRzL0Zsb2F0QXZvaWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZsb2F0
QXZvaWRlcjo6cmVjdEluQ29udGFpbmluZ0Jsb2NrIGNvbnN0KToKKyAgICAgICAgKiBsYXlvdXQv
ZmxvYXRzL0Zsb2F0QXZvaWRlci5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGbG9hdEF2
b2lkZXI6OnJlY3QgY29uc3QpOgorICAgICAgICAqIGxheW91dC9mbG9hdHMvRmxvYXRCb3guY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGbG9hdEJveDo6cmVjdCBjb25zdCk6CisgICAg
ICAgICogbGF5b3V0L2Zsb2F0cy9GbG9hdEJveC5oOgorICAgICAgICAqIGxheW91dC9mbG9hdHMv
RmxvYXRpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6RmxvYXRQYWly
OjppbnRlcnNlY3RzIGNvbnN0KToKKyAgICAgICAgKiBsYXlvdXQvZmxvYXRzL0Zsb2F0aW5nU3Rh
dGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6RmxvYXRpbmdTdGF0ZTo6RmxvYXRJdGVt
OjpyZWN0V2l0aE1hcmdpbiBjb25zdCk6CisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRp
bmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVJbnRyaW5zaWNXaWR0
aENvbnN0cmFpbnRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9y
bWF0dGluZ0NvbnRleHQ6OmluaXRpYWxpemVNYXJnaW5Cb3JkZXJBbmRQYWRkaW5nRm9yR2VuZXJp
Y0lubGluZUJveCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1h
dHRpbmdDb250ZXh0Ojpjb21wdXRlTWFyZ2luQm9yZGVyQW5kUGFkZGluZ0ZvcklubGluZUNvbnRh
aW5lciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdD
b250ZXh0Ojpjb21wdXRlSW50cmluc2ljV2lkdGhGb3JGbG9hdEJveCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSW50cmlu
c2ljV2lkdGhGb3JJbmxpbmVCbG9jayBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OklubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSG9yaXpvbnRhbE1hcmdpbiBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpsYXlv
dXRGb3JtYXR0aW5nQ29udGV4dFJvb3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29sbGVjdElubGluZUNvbnRlbnQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0
ZU1hcmdpbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OmFkZERl
dGFjaGluZ1J1bGVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Y3JlYXRl
QW5kQXBwZW5kSW5saW5lSXRlbSk6IERlbGV0ZWQuCisgICAgICAgICogbGF5b3V0L2lubGluZWZv
cm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OmxheW91dFN0YXRlIGNv
bnN0KToKKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5n
Q29udGV4dExpbmVMYXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpoYWxmTGVh
ZGluZ01ldHJpY3MpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjphdmFpbGFibGVX
aWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6OmNvbnRlbnRMb2dp
Y2FsUmlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjpjb250ZW50
TG9naWNhbFdpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZTo6bG9n
aWNhbFRvcCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6OmxvZ2ljYWxM
ZWZ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZTo6bG9naWNhbFJpZ2h0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZTo6bG9naWNhbEJvdHRvbSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6OmxvZ2ljYWxXaWR0aCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6OmxvZ2ljYWxIZWlnaHQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjpMaW5lSXRlbTo6TGluZUl0ZW0pOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjpMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6TGluZTo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjpj
bG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6OnJlbW92ZVRyYWlsaW5nVHJp
bW1hYmxlQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6Om1vdmVMb2dp
Y2FsTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6Om1vdmVMb2dpY2FsUmln
aHQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0Ojppc1RyaW1tYWJsZUNvbnRlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjp0cmFpbGluZ1RyaW1tYWJsZVdpZHRoIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZTo6aGFzQ29udGVudCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6OmFwcGVuZE5vbkJyZWFrYWJsZVNwYWNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZTo6YXBwZW5kSW5saW5lQ29udGFpbmVyU3Rh
cnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjphcHBlbmRJbmxpbmVDb250YWlu
ZXJFbmQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjphcHBlbmRUZXh0Q29udGVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6OmFwcGVuZE5vblRleHRDb250ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZTo6YXBwZW5kSGFyZExpbmVCcmVhayk6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlVuY29tbWl0dGVkQ29udGVudDo6aXNFbXB0eSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlVuY29tbWl0dGVkQ29udGVudDo6d2lk
dGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpVbmNvbW1pdHRlZENvbnRlbnQ6
OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlVuY29tbWl0dGVkQ29udGVudDo6cmVz
ZXQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6
TGluZUxheW91dDo6TGluZUxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGlu
ZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0Ojppbml0aWFsaXplTGluZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5
b3V0OjpsYXlvdXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6Y2xvc2VMaW5lIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OmhhbmRs
ZUZsb2F0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQ6OkxpbmVMYXlvdXQ6OmNvbW1pdElubGluZUl0ZW1Ub0xpbmUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0Ojpob3Jpem9udGFsQWRqdXN0bWVudEZvckFsaWdubWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5l
TGF5b3V0OjphbGlnblJ1bnMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5l
Ojppc0Nsb3NlZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Okxp
bmU6OmlzRmlyc3RMaW5lIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6TGluZTo6cnVucyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6
OmNvbnRlbnRMb2dpY2FsTGVmdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OkxpbmU6Omxhc3RSdW5UeXBlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6TGluZTo6aW5pdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkxpbmU6OmFkanVzdExvZ2ljYWxMZWZ0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6TGluZTo6YWRqdXN0TG9naWNhbFJpZ2h0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6TGluZTo6YXBwZW5kQ29udGVudCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0Ojppbml0
aWFsaXplTmV3TGluZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpzcGxpdElubGluZVJ1bklmTmVl
ZGVkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9y
bWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OmNyZWF0ZUZpbmFsUnVucyBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpM
aW5lTGF5b3V0Ojpwb3N0UHJvY2Vzc0lubGluZVJ1bnMgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6
YXBwZW5kQ29udGVudFRvTGluZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0Ojpjb21wdXRlRmxvYXRQ
b3NpdGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGlu
ZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpwbGFjZUluRmxvd1Bvc2l0aW9uZWRDaGls
ZHJlbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OmFkanVzdGVk
TGluZUxvZ2ljYWxMZWZ0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6Omp1c3RpZnlSdW5zKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVM
YXlvdXQ6OmNvbXB1dGVFeHBhbnNpb25PcHBvcnR1bml0aWVzIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlv
dXQ6OnJ1bldpZHRoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9y
bWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nU3RhdGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6SW5saW5lRm9ybWF0dGluZ1N0YXRlOjppbmxpbmVJdGVtcyk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdTdGF0ZTo6bGluZUJveGVzKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ1N0YXRlOjphZGRJbmxpbmVJdGVtKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ1N0YXRlOjphZGRJbmxpbmVS
dW4pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nU3RhdGU6OmFk
ZExpbmVCb3gpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nU3Rh
dGU6OmlubGluZUNvbnRlbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJ
bmxpbmVGb3JtYXR0aW5nU3RhdGU6Omxhc3RJbmxpbmVJdGVtIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ1N0YXRlOjphcHBlbmRJbmxp
bmVSdW4pOiBEZWxldGVkLgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGlu
ZUl0ZW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lSXRlbTo6dHlwZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUl0ZW06OmlzVGV4dCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUl0ZW06OmlzQm94IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lSXRlbTo6aXNIYXJkTGluZUJyZWFrIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lSXRlbTo6aXNGbG9hdCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUl0ZW06OmlzTGluZUJyZWFrIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lSXRlbTo6aXNDb250YWluZXJTdGFy
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUl0ZW06OmlzQ29udGFp
bmVyRW5kIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lSXRlbTo6SW5s
aW5lSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUl0ZW06OnNldFdpZHRo
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lSXRlbTo6d2lkdGggY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVJdGVtOjphZGREZXRhY2hpbmdSdWxlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lSXRlbTo6ZGV0YWNoaW5n
UnVsZXMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVJ
dGVtOjpub25CcmVha2FibGVTdGFydCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OklubGluZUl0ZW06Om5vbkJyZWFrYWJsZUVuZCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUl0ZW06OmFkZE5vbkJyZWFrYWJsZVN0YXJ0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lSXRlbTo6YWRkTm9u
QnJlYWthYmxlRW5kKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5l
SXRlbTo6dGV4dENvbnRlbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGxheW91dC9pbmxp
bmVmb3JtYXR0aW5nL0lubGluZUxpbmVCb3guaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
bGF5b3V0L2Zsb2F0cy9GbG9hdEJveC5oLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5l
Qm94Ojpsb2dpY2FsVG9wTGVmdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Okxp
bmVCb3g6OmxvZ2ljYWxMZWZ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGlu
ZUJveDo6bG9naWNhbFJpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGlu
ZUJveDo6bG9naWNhbFRvcCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVC
b3g6OmxvZ2ljYWxCb3R0b20gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5l
Qm94Ojpsb2dpY2FsV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5l
Qm94Ojpsb2dpY2FsSGVpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGlu
ZUJveDo6TGluZUJveCk6CisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5l
TGluZUJyZWFrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnJlYWtlcjo6
TGluZUJyZWFrZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnJlYWtlcjo6YnJl
YWtpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJyZWFrZXI6Ondv
cmRCcmVha2luZ0JlaGF2aW9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGlu
ZUJyZWFrZXI6OnJ1bldpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGlu
ZUJyZWFrZXI6OmlzQXRCcmVha2luZ09wcG9ydHVuaXR5KToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6TGluZUJyZWFrZXI6OnRleHRXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OklubGluZUxpbmVCcmVha2VyOjpJbmxpbmVMaW5lQnJlYWtlcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUxpbmVCcmVha2VyOjpuZXh0UnVuKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lTGluZUJyZWFrZXI6OmlzQXRD
b250ZW50RW5kIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5s
aW5lTGluZUJyZWFrZXI6OmxpbmVCcmVha2luZ0JlaGF2aW9yKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6SW5saW5lTGluZUJyZWFrZXI6OnJ1bldpZHRoIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lTGluZUJyZWFrZXI6OnRleHRX
aWR0aCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUxp
bmVCcmVha2VyOjpzcGxpdFJ1bik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OklubGluZUxpbmVCcmVha2VyOjphZGp1c3RTcGxpdFBvc2l0aW9uV2l0aEh5cGhlbmF0aW9uIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVM
aW5lQnJlYWtlci5oOgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZVJ1
blByb3ZpZGVyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGlu
Zy9JbmxpbmVSdW5Qcm92aWRlci5oOiBSZW1vdmVkLgorICAgICAgICAqIGxheW91dC9pbmxpbmVm
b3JtYXR0aW5nL0lubGluZVRleHRJdGVtLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OmlzV2hpdGVzcGFjZUNoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OmlzU29mdExpbmVCcmVhayk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Om1vdmVUb05leHRO
b25XaGl0ZXNwYWNlUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0Ojptb3ZlVG9O
ZXh0QnJlYWthYmxlUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVU
ZXh0SXRlbTo6Y3JlYXRlQW5kQXBwZW5kVGV4dEl0ZW1zKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6SW5saW5lVGV4dEl0ZW06OklubGluZVRleHRJdGVtKToKKyAgICAgICAgKiBsYXlvdXQv
aW5saW5lZm9ybWF0dGluZy9JbmxpbmVUZXh0SXRlbS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy90ZXh0L1RleHRVdGlsLmguCisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OklubGluZVRleHRJdGVtOjpzdGFydCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OklubGluZVRleHRJdGVtOjplbmQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpJbmxpbmVUZXh0SXRlbTo6bGVuZ3RoIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6SW5saW5lVGV4dEl0ZW06OmlzV2hpdGVzcGFjZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZVRleHRJdGVtOjppc0NvbGxhcHNlZCBjb25zdCk6
CisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvdGV4dC9UZXh0VXRpbC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRleHRVdGlsOjpoeXBoZW5Qb3NpdGlvbkJlZm9yZSk6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRleHRVdGlsOjp3aWR0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OlRleHRVdGlsOjpmaXhlZFBpdGNoV2lkdGgpOgorICAgICAgICAqIGxh
eW91dC9pbmxpbmVmb3JtYXR0aW5nL3RleHQvVGV4dFV0aWwuaDoKKyAgICAgICAgKiBsYXlvdXQv
bGF5b3V0dHJlZS9MYXlvdXRCb3guaDoKKyAgICAgICAgKiBsYXlvdXQvbGF5b3V0dHJlZS9MYXlv
dXRSZXBsYWNlZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlJlcGxhY2VkOjppbnRy
aW5zaWNSYXRpbyBjb25zdCk6CisgICAgICAgICogbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0VHJl
ZUJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjphY2N1bXVsYXRlZE9mZnNl
dEZvckluRmxvd1Bvc2l0aW9uZWRDb250aW51YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpUcmVlQnVpbGRlcjo6Y3JlYXRlU3ViVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6Om91dHB1dElubGluZVJ1bnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpvdXRwdXRM
YXlvdXRCb3gpOgorCiAyMDE5LTA1LTI1ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNv
bT4KIAogICAgICAgICBtZWRpYS92aWRlby1yZW1vdGUtY29udHJvbC1wbGF5cGF1c2UuaHRtbCBp
cyB0aW1pbmcgb3V0IGFmdGVyIHIyNDU3MTIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggMTQxMDIyYTZlNjBh
MDlmMzFiZTVkYmZiZDAyOWVkNzdmYWMwZjRhYy4uY2EyNDhmM2ViYTYxNDRlZDQ2ODE1NzQ0M2I3
MDdiZTcyYTQyM2Q1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysr
IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTEzNDksNyArMTM0OSw3IEBAIGxheW91
dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0TGluZUxheW91dC5jcHAK
IGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdTdGF0ZS5jcHAKIGxheW91
dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUludmFsaWRhdGlvbi5jcHAKIGxheW91dC9pbmxpbmVm
b3JtYXR0aW5nL0lubGluZUxpbmVCcmVha2VyLmNwcAotbGF5b3V0L2lubGluZWZvcm1hdHRpbmcv
SW5saW5lUnVuUHJvdmlkZXIuY3BwCitsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVUZXh0
SXRlbS5jcHAKIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL3RleHQvVGV4dFV0aWwuY3BwCiBsYXlv
dXQvbGF5b3V0dHJlZS9MYXlvdXRCbG9ja0NvbnRhaW5lci5jcHAKIGxheW91dC9sYXlvdXR0cmVl
L0xheW91dEJveC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCBlNmExZjVmMWQ3MTliNGFmNjNmZDlkZGE3ZTFhZmQ3NDVhNmRl
OTA3Li5jZWUwZDRjMGE1YjgwOTFjMGEzMjFiMmNmYzBkNmQ3NDI5NDNjZmU1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMDEy
LDEwICsyMDEyLDkgQEAKIAkJNkVEODc4QzUxNDc0OTNGNDAwNEMzNTk3IC8qIFJlbmRlclRhYmxl
Q2FwdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NkVEODc4QzMxNDc0OTNGNDAwNEMzNTk3IC8qIFJlbmRlclRhYmxlQ2FwdGlvbi5oICovOyB9Owog
CQk2RUQ4QzM3QTE4M0JGRjhDMDA5RTUzQkQgLyogQm94U2hhcGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFRDhDMzc4MTgzQkZGOEMwMDlFNTNCRCAv
KiBCb3hTaGFwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTZFRThBNzczMTBGODAzRjMwMDVBNEEyNCAvKiBKU1dlYkdMQ29udGV4dEF0dHJpYnV0
ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFRThB
NzcxMTBGODAzRjMwMDVBNEEyNCAvKiBKU1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaCAqLzsgfTsK
LQkJNkYyMTlENzcyMTc4RDM3MjAwQkIwMzNDIC8qIElubGluZVJ1bi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkYyMTlENzQyMTc4RDM3MTAwQkIwMzND
IC8qIElubGluZVJ1bi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTZGMUNDMURFMjI1RjhCNDkwMDcyMEFEMiAvKiBJbmxpbmVUZXh0SXRlbS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkYxQ0MxREQyMjVG
OEI0MjAwNzIwQUQyIC8qIElubGluZVRleHRJdGVtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNkYyMjJCNzYxQUI1MkQ4QTAwOTQ2NTFBIC8qIFdl
YkdMVmVydGV4QXJyYXlPYmplY3RCYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDZGMjIyQjc1MUFCNTJEOEEwMDk0NjUxQSAvKiBXZWJHTFZlcnRl
eEFycmF5T2JqZWN0QmFzZS5jcHAgKi87IH07CiAJCTZGM0UxRjYyMjEzNjE0MjAwMEE2NUEwOCAv
KiBGbG9hdEJveC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNkYzRTFGNjEyMTM2MTQxNzAwQTY1QTA4IC8qIEZsb2F0Qm94LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNkY1MjE3QzcyMTc3RjVBNzAwNjU4
M0JCIC8qIElubGluZVJ1blByb3ZpZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2RjUyMTdDNDIxNzdGNUE2MDA2NTgzQkIgLyogSW5saW5lUnVuUHJv
dmlkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk2RjdDQTNDNjIwOEMyOTU3MDAyRjI5QUIgLyogTGF5b3V0U3RhdGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZGN0NBM0M0MjA4QzI5NTYwMDJGMjlB
QiAvKiBMYXlvdXRTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTZGN0NBM0NBMjA4QzJCMkUwMDJGMjlBQiAvKiBJbmxpbmVGb3JtYXR0aW5n
Q29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NkY3Q0EzQzgyMDhDMkIyRTAwMkYyOUFCIC8qIElubGluZUZvcm1hdHRpbmdDb250ZXh0LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNkY5OTVBMTUx
QTcwNzU2MjAwQTczNUY0IC8qIFdlYkdMU3luYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2Rjk5NUExMzFBNzA3NTYyMDBBNzM1RjQgLyogV2ViR0xT
eW5jLmNwcCAqLzsgfTsKQEAgLTIwMzUsNyArMjAzNCwxMCBAQAogCQk2Rjk5NUEzQTFBNzA4MzM3
MDBBNzM1RjQgLyogSlNXZWJHTFZlcnRleEFycmF5T2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2Rjk5NUEzMDFBNzA4MzM3MDBBNzM1RjQgLyog
SlNXZWJHTFZlcnRleEFycmF5T2JqZWN0LmggKi87IH07CiAJCTZGQTQ0NTRFODk4RjJGQzE2OEJD
MzhDMSAvKiBKU0JlZm9yZVVubG9hZEV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyOUUwNEEyN0JFRDJGODFGOThFOTAyMkIgLyogSlNCZWZvcmVV
bmxvYWRFdmVudC5oICovOyB9OwogCQk2RkIxMUI1QzIxNzgzRkQwMDBFMkE1NzQgLyogVGV4dFV0
aWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZGQjEx
QjU5MjE3ODNGQ0YwMEUyQTU3NCAvKiBUZXh0VXRpbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTZGQjQ3RTYzMjI3NzQyNUEwMEM3QkNCMCAvKiBJ
bmxpbmVMaW5lQm94LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA2RkI0N0U2MTIyNzc0MjVBMDBDN0JDQjAgLyogSW5saW5lTGluZUJveC5oICovOyB9Owog
CQk2RkI1RTIxNDIyMUYyNDUzMDAzOTg5Q0YgLyogQ29udGVudENoYW5nZU9ic2VydmVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RkI1RTIxMjIyMUYy
NDQ3MDAzOTg5Q0YgLyogQ29udGVudENoYW5nZU9ic2VydmVyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNkZDRTFBMUEyMjYxOEFCRDAwNEYwMzQz
IC8qIERpc3BsYXlSdW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDZGQ0UxQTE4MjI2MThBQjMwMDRGMDM0MyAvKiBEaXNwbGF5UnVuLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNkZEOUNENTQyMjdFMjFD
ODAwRTUzOTU3IC8qIERpc3BsYXlSZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2RkQ5Q0Q1MjIyN0UyMUM4MDBFNTM5NTcgLyogRGlzcGxheVJlY3Qu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2RkUx
OTgxNzIxNzgzOTdDMDA0NDZGMDggLyogSW5saW5lTGluZUJyZWFrZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZGRTE5ODE1MjE3ODM5N0MwMDQ0NkYw
OCAvKiBJbmxpbmVMaW5lQnJlYWtlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTZGRTdDRkEyMjE3N0VFRjIwMDVCMTU3MyAvKiBJbmxpbmVJdGVt
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RkU3Q0ZB
MDIxNzdFRUYxMDA1QjE1NzMgLyogSW5saW5lSXRlbS5oICovOyB9OwogCQk2RkU3Q0ZBNDIxNzdF
RjEwMDA1QjE1NzMgLyogTGF5b3V0TGluZUJyZWFrQm94LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RkU3Q0ZBMzIxNzdFRjEwMDA1QjE1NzMgLyogTGF5
b3V0TGluZUJyZWFrQm94LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKQEAgLTkxMTQsMTUgKzkxMTYsMTQgQEAKIAkJNkVFOEE3NzAxMEY4MDNGMzAwNUE0
QTI0IC8qIEpTV2ViR0xDb250ZXh0QXR0cmlidXRlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBKU1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk2RUU4QTc3MTEwRjgwM0YzMDA1QTRBMjQgLyogSlNXZWJHTENv
bnRleHRBdHRyaWJ1dGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV2Vi
R0xDb250ZXh0QXR0cmlidXRlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RjA4
MzBERjIwQjQ2OTUxMDA4QTk0NUIgLyogQmxvY2tGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJsb2NrRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZGMjE5RDc0MjE3OEQzNzEwMEJCMDMzQyAv
KiBJbmxpbmVSdW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5saW5lUnVu
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZGMUNDMURDMjI1RjhCNDEwMDcyMEFE
MiAvKiBJbmxpbmVUZXh0SXRlbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmxpbmVUZXh0SXRl
bS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZGMUNDMUREMjI1RjhCNDIwMDcy
MEFEMiAvKiBJbmxpbmVUZXh0SXRlbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmxpbmVUZXh0SXRlbS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RjIyMkI3NDFBQjUyRDY0MDA5NDY1MUEg
LyogV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViR0xWZXJ0
ZXhBcnJheU9iamVjdEJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkYyMjJC
NzUxQUI1MkQ4QTAwOTQ2NTFBIC8qIFdlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkdMVmVydGV4QXJyYXlPYmplY3RC
YXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkYyNUIyMDAyMjBBODVBQjAw
MDAwMTFCIC8qIElubGluZUZvcm1hdHRpbmdDb250ZXh0TGluZUxheW91dC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk2RjM1RUZBRjIxODdDQkQ1MDA0NEUwRjQgLyogSW5saW5l
Rm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkYzRTFGNUYyMTM2MTQxNzAwQTY1QTA4IC8qIEZsb2F0Qm94
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZsb2F0Qm94LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNkYzRTFGNjEyMTM2MTQxNzAwQTY1QTA4IC8qIEZsb2F0Qm94LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEZsb2F0Qm94Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZGNTIx
N0M0MjE3N0Y1QTYwMDY1ODNCQiAvKiBJbmxpbmVSdW5Qcm92aWRlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBJbmxpbmVSdW5Qcm92aWRlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQk2RjUyMTdDNjIxNzdGNUE2MDA2NTgzQkIgLyogSW5saW5lUnVuUHJvdmlk
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5saW5lUnVuUHJv
dmlkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RjczOTE4QzIxMDZDRURE
MDA2QUYyNjIgLyogTGF5b3V0VW5pdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGF5b3V0VW5pdHMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkY3Q0EzQzQyMDhDMjk1NjAwMkYyOUFCIC8q
IExheW91dFN0YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheW91dFN0YXRlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTZGN0NBM0M1MjA4QzI5NTYwMDJGMjlBQiAvKiBMYXlvdXRTdGF0
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMYXlvdXRTdGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC05MTU3LDggKzkxNTgsMTEgQEAKIAkJNkY5OTVBMzAxQTcwODMzNzAw
QTczNUY0IC8qIEpTV2ViR0xWZXJ0ZXhBcnJheU9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU1dlYkdMVmVydGV4QXJyYXlPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNkZCMTFCNTkyMTc4M0ZDRjAwRTJBNTc0IC8qIFRleHRVdGlsLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRVdGlsLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTZGQjExQjVCMjE3ODNGQ0YwMEUyQTU3NCAvKiBUZXh0VXRpbC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZXh0VXRpbC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZGQjQ3RTYxMjI3NzQyNUEwMEM3QkNCMCAvKiBJbmxp
bmVMaW5lQm94LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElubGluZUxpbmVC
b3guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkZCNUUyMTIyMjFGMjQ0NzAwMzk4
OUNGIC8qIENvbnRlbnRDaGFuZ2VPYnNlcnZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb250ZW50Q2hh
bmdlT2JzZXJ2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkZCQjg2MDUyMEI0
NjRCNjAwREFEOTM4IC8qIEZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTZGQ0UxQTE4MjI2MThBQjMwMDRGMDM0MyAvKiBEaXNwbGF5UnVuLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERpc3BsYXlSdW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NkZEOUNENTIyMjdFMjFDODAwRTUzOTU3IC8qIERpc3BsYXlSZWN0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IERpc3BsYXlSZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTZGRTE5ODEzMjE3ODM5N0IwMDQ0NkYwOCAvKiBJbmxpbmVMaW5lQnJlYWtlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmxpbmVMaW5lQnJlYWtlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGRTE5ODE1MjE3ODM5N0MwMDQ0NkYw
OCAvKiBJbmxpbmVMaW5lQnJlYWtlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJbmxpbmVMaW5lQnJlYWtlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RkU3
QUEyNjIxQzM3QjYzMDAyOTZEQ0QgLyogTWFyZ2luVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFy
Z2luVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2Mzc1LDExICsxNjM3
OSwxMSBAQAogCQkJCTExMjNBRkREMjA5QUJCQkEwMDczNkFDQyAvKiBJbmxpbmVJbnZhbGlkYXRp
b24uY3BwICovLAogCQkJCTExMjNBRkRDMjA5QUJCQkEwMDczNkFDQyAvKiBJbmxpbmVJbnZhbGlk
YXRpb24uaCAqLywKIAkJCQk2RkU3Q0ZBMDIxNzdFRUYxMDA1QjE1NzMgLyogSW5saW5lSXRlbS5o
ICovLAorCQkJCTZGQjQ3RTYxMjI3NzQyNUEwMEM3QkNCMCAvKiBJbmxpbmVMaW5lQm94LmggKi8s
CiAJCQkJNkZFMTk4MTMyMTc4Mzk3QjAwNDQ2RjA4IC8qIElubGluZUxpbmVCcmVha2VyLmNwcCAq
LywKIAkJCQk2RkUxOTgxNTIxNzgzOTdDMDA0NDZGMDggLyogSW5saW5lTGluZUJyZWFrZXIuaCAq
LywKLQkJCQk2RjIxOUQ3NDIxNzhEMzcxMDBCQjAzM0MgLyogSW5saW5lUnVuLmggKi8sCi0JCQkJ
NkY1MjE3QzYyMTc3RjVBNjAwNjU4M0JCIC8qIElubGluZVJ1blByb3ZpZGVyLmNwcCAqLywKLQkJ
CQk2RjUyMTdDNDIxNzdGNUE2MDA2NTgzQkIgLyogSW5saW5lUnVuUHJvdmlkZXIuaCAqLywKKwkJ
CQk2RjFDQzFEQzIyNUY4QjQxMDA3MjBBRDIgLyogSW5saW5lVGV4dEl0ZW0uY3BwICovLAorCQkJ
CTZGMUNDMUREMjI1RjhCNDIwMDcyMEFEMiAvKiBJbmxpbmVUZXh0SXRlbS5oICovLAogCQkJKTsK
IAkJCXBhdGggPSBpbmxpbmVmb3JtYXR0aW5nOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
QEAgLTE2Mzg5LDYgKzE2MzkzLDggQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCTExOTlGQTVBMjA4
RTNDN0YwMDIzNThDQyAvKiBEaXNwbGF5Qm94LmNwcCAqLywKIAkJCQkxMTk5RkE1OTIwOEUzQzdG
MDAyMzU4Q0MgLyogRGlzcGxheUJveC5oICovLAorCQkJCTZGRDlDRDUyMjI3RTIxQzgwMEU1Mzk1
NyAvKiBEaXNwbGF5UmVjdC5oICovLAorCQkJCTZGQ0UxQTE4MjI2MThBQjMwMDRGMDM0MyAvKiBE
aXNwbGF5UnVuLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IGRpc3BsYXl0cmVlOwogCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTI4ODIyLDExICsyODgyOCwxMyBAQAogCQkJCTBGRTVGQkQ1
MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkU1RkJENzFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RSZWNvcmRlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZFNUZCRDkxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVw
bGF5ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTZGRDlDRDU0MjI3RTIxQzgwMEU1Mzk1NyAvKiBE
aXNwbGF5UmVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlBRjJENjkxNDQzNUQwNTAwMTZBNzg0
IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQyOUVDQzYx
OTJFQ0M4MzAwOTg0Qjc4IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvckNsaWVudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMkQyOUVDQ0ExOTJGMUYxRDAwOTg0Qjc4IC8qIERpc3BsYXlSZWZyZXNoTW9u
aXRvcklPUy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkRFNzAwMjMxOTJGRTgyQTAwQjA5NzVDIC8q
IERpc3BsYXlSZWZyZXNoTW9uaXRvck1hYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQyOUVDQzgx
OTJFQ0M4MzAwOTg0Qjc4IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvck1hbmFnZXIuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTZGQ0UxQTFBMjI2MThBQkQwMDRGMDM0MyAvKiBEaXNwbGF5UnVuLmggaW4g
SGVhZGVycyAqLywKIAkJCQlGRDMxNjA5MTEyQjAyNkY3MDBDMUEzNTkgLyogRGlzdGFuY2UuaCBp
biBIZWFkZXJzICovLAogCQkJCTg0NzMwRDc3MTI0OEYwQjMwMEQzQTlDOSAvKiBEaXN0YW50TGln
aHRTb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyRjM0RkU2MEU4MkY4MTQwMEY2MjdDRCAv
KiBETlMuaCBpbiBIZWFkZXJzICovLApAQCAtMjk0NTcsMTIgKzI5NDY1LDEyIEBACiAJCQkJMTEz
MTBDRjgyMEJBNEE2QTAwNjVBOEQwIC8qIElubGluZUludmFsaWRhdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNkZFN0NGQTIyMTc3RUVGMjAwNUIxNTczIC8qIElubGluZUl0ZW0uaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDRTc4OTE2MTEyMEQ2MDgwMDYwRUNFNSAvKiBJbmxpbmVJdGVyYXRvci5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNkZCNDdFNjMyMjc3NDI1QTAwQzdCQ0IwIC8qIElubGluZUxp
bmVCb3guaCBpbiBIZWFkZXJzICovLAogCQkJCTZGRTE5ODE3MjE3ODM5N0MwMDQ0NkYwOCAvKiBJ
bmxpbmVMaW5lQnJlYWtlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNkYyMTlENzcyMTc4RDM3MjAw
QkIwMzNDIC8qIElubGluZVJ1bi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNkY1MjE3QzcyMTc3RjVB
NzAwNjU4M0JCIC8qIElubGluZVJ1blByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBQTRD
M0E3NzBCMkIxNjc5MDAyMzM0QTIgLyogSW5saW5lU3R5bGVTaGVldE93bmVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQ0VBNDg1QTA5N0Q5MzAyMDA5NEM5RTQgLyogSW5saW5lVGV4dEJveC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMUMwMTA3MDExOTI1OTRERjAwOEE0MjAxIC8qIElubGluZVRleHRC
b3hTdHlsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNkYxQ0MxREUyMjVGOEI0OTAwNzIwQUQyIC8q
IElubGluZVRleHRJdGVtLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTBBNThFNTFCQUE0MEIxMDBD
MTkyODIgLyogSW5Qcm9jZXNzSURCU2VydmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRUI3Njc1
NzFEQTE5QkRGMDAzRTIzQjUgLyogSW5wdXRFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTUy
RUZERjQyMTEyODc1QTAwQUQyODJBIC8qIElucHV0TW9kZS5oIGluIEhlYWRlcnMgKi8sCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAK
aW5kZXggNDEzNmFkMmJmN2UzOTdhNjk5NGIxZjY2MWY4NDdkM2M1YzY1ZGFiMi4uYjgxNzk2YTQ4
ZWRlMWQ1MjNjMWIwM2E2MmE4ODE1YmQ1YmFlYTE5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L0Zvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9Gb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcApAQCAtMTA5LDEyICsxMDks
MTEgQEAgc3RhdGljIExheW91dFVuaXQgY29udGVudEhlaWdodEZvckZvcm1hdHRpbmdDb250ZXh0
Um9vdChjb25zdCBMYXlvdXRTdGF0ZSYgbGF5b3UKICAgICBhdXRvIGJvdHRvbSA9IGJvcmRlckFu
ZFBhZGRpbmdUb3A7CiAgICAgYXV0byYgZm9ybWF0dGluZ1Jvb3RDb250YWluZXIgPSBkb3duY2Fz
dDxDb250YWluZXI+KGxheW91dEJveCk7CiAgICAgaWYgKGZvcm1hdHRpbmdSb290Q29udGFpbmVy
LmVzdGFibGlzaGVzSW5saW5lRm9ybWF0dGluZ0NvbnRleHQoKSkgewotICAgICAgICAvLyBUaGlz
IGlzIHRlbXAgYW5kIHdpbGwgYmUgcmVwbGFjZWQgYnkgdGhlIGNvcnJlY3QgZGlzcGxheSBib3gg
b25jZSBpbmxpbmUgcnVucyBtb3ZlIG92ZXIgdG8gdGhlIGRpc3BsYXkgdHJlZS4KLSAgICAgICAg
YXV0byYgaW5saW5lUnVucyA9IGRvd25jYXN0PElubGluZUZvcm1hdHRpbmdTdGF0ZT4obGF5b3V0
U3RhdGUuZXN0YWJsaXNoZWRGb3JtYXR0aW5nU3RhdGUobGF5b3V0Qm94KSkuaW5saW5lUnVucygp
OwotICAgICAgICBpZiAoIWlubGluZVJ1bnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICB0b3Ag
PSBpbmxpbmVSdW5zWzBdLmxvZ2ljYWxUb3AoKTsKLSAgICAgICAgICAgIGJvdHRvbSA9ICBpbmxp
bmVSdW5zLmxhc3QoKS5sb2dpY2FsQm90dG9tKCk7Ci0gICAgICAgIH0KKyAgICAgICAgYXV0byYg
bGluZUJveGVzID0gZG93bmNhc3Q8SW5saW5lRm9ybWF0dGluZ1N0YXRlPihsYXlvdXRTdGF0ZS5l
c3RhYmxpc2hlZEZvcm1hdHRpbmdTdGF0ZShsYXlvdXRCb3gpKS5saW5lQm94ZXMoKTsKKyAgICAg
ICAgLy8gRXZlbiBlbXB0eSBjb250YWluZXJzIGdlbmVyYXRlIG9uZSBsaW5lLiAKKyAgICAgICAg
QVNTRVJUKCFsaW5lQm94ZXMuaXNFbXB0eSgpKTsKKyAgICAgICAgdG9wID0gbGluZUJveGVzLmZp
cnN0KCkubG9naWNhbFRvcCgpOworICAgICAgICBib3R0b20gPSBsaW5lQm94ZXMubGFzdCgpLmxv
Z2ljYWxCb3R0b20oKTsKICAgICB9IGVsc2UgaWYgKGZvcm1hdHRpbmdSb290Q29udGFpbmVyLmVz
dGFibGlzaGVzQmxvY2tGb3JtYXR0aW5nQ29udGV4dCgpIHx8IGxheW91dEJveC5pc0RvY3VtZW50
Qm94KCkpIHsKICAgICAgICAgaWYgKGZvcm1hdHRpbmdSb290Q29udGFpbmVyLmhhc0luRmxvd0No
aWxkKCkpIHsKICAgICAgICAgICAgIGF1dG8mIGZpcnN0RGlzcGxheUJveCA9IGxheW91dFN0YXRl
LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmZvcm1hdHRpbmdSb290Q29udGFpbmVyLmZpcnN0SW5G
bG93Q2hpbGQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvVmVyaWZpY2F0
aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9WZXJpZmljYXRpb24uY3BwCmluZGV4IDJl
NzdjMzllOTIxNDQ5NDJlZjI5ZTQwZTRjNzQzNmU1MTEyMDBiYzIuLmQ3ZmU2YTlmMTkxNzQ5NWFl
NTZlZWJkZDc4YjVhZmU0OGY1Y2RjMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9WZXJpZmljYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9WZXJpZmljYXRp
b24uY3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiTGF5b3V0VHJlZUJ1aWxkZXIuaCIK
ICNpbmNsdWRlICJSZW5kZXJCb3guaCIKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKKyNpbmNs
dWRlICJSZW5kZXJMaW5lQnJlYWsuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVk
ZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCkBAIC00Niw3ICs0Nyw3IEBAIHN0YXRpYyBib29s
IGFyZUVzc2VudGlhbGx5RXF1YWwoZmxvYXQgYSwgTGF5b3V0VW5pdCBiKQogICAgIGlmIChhID09
IGIudG9GbG9hdCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIHJldHVybiBmYWJzKGEg
LSBiLnRvRmxvYXQoKSkgPD0gOCAqIExheW91dFVuaXQ6OmVwc2lsb24oKTsKKyAgICByZXR1cm4g
ZmFicyhhIC0gYi50b0Zsb2F0KCkpIDw9IDEwICogTGF5b3V0VW5pdDo6ZXBzaWxvbigpOwogfQog
CiBzdGF0aWMgYm9vbCBvdXRwdXRNaXNtYXRjaGluZ1NpbXBsZUxpbmVJbmZvcm1hdGlvbklmTmVl
ZGVkKFRleHRTdHJlYW0mIHN0cmVhbSwgY29uc3QgTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBj
b25zdCBSZW5kZXJCbG9ja0Zsb3cmIGJsb2NrRmxvdywgY29uc3QgQ29udGFpbmVyJiBpbmxpbmVG
b3JtYXR0aW5nUm9vdCkKQEAgLTcyLDMzICs3MywzNyBAQCBzdGF0aWMgYm9vbCBvdXRwdXRNaXNt
YXRjaGluZ1NpbXBsZUxpbmVJbmZvcm1hdGlvbklmTmVlZGVkKFRleHRTdHJlYW0mIHN0cmVhbSwg
YwogICAgICAgICBhdXRvJiBzaW1wbGVSdW4gPSBsaW5lTGF5b3V0RGF0YS0+cnVuQXQoaSk7CiAg
ICAgICAgIGF1dG8mIGlubGluZVJ1biA9IGlubGluZVJ1bkxpc3RbaV07CiAKLSAgICAgICAgYXV0
byBtYXRjaGluZ1J1bnMgPSBhcmVFc3NlbnRpYWxseUVxdWFsKHNpbXBsZVJ1bi5sb2dpY2FsTGVm
dCwgaW5saW5lUnVuLmxvZ2ljYWxMZWZ0KCkpICYmIGFyZUVzc2VudGlhbGx5RXF1YWwoc2ltcGxl
UnVuLmxvZ2ljYWxSaWdodCwgaW5saW5lUnVuLmxvZ2ljYWxSaWdodCgpKTsKLSAgICAgICAgaWYg
KG1hdGNoaW5nUnVucykKLSAgICAgICAgICAgIG1hdGNoaW5nUnVucyA9IChzaW1wbGVSdW4uc3Rh
cnQgPT0gaW5saW5lUnVuLnRleHRDb250ZXh0KCktPnN0YXJ0KCkgJiYgc2ltcGxlUnVuLmVuZCA9
PSAoaW5saW5lUnVuLnRleHRDb250ZXh0KCktPnN0YXJ0KCkgKyBpbmxpbmVSdW4udGV4dENvbnRl
eHQoKS0+bGVuZ3RoKCkpKTsKKyAgICAgICAgYXV0byBtYXRjaGluZ1J1bnMgPSBhcmVFc3NlbnRp
YWxseUVxdWFsKHNpbXBsZVJ1bi5sb2dpY2FsTGVmdCwgaW5saW5lUnVuLT5sb2dpY2FsTGVmdCgp
KSAmJiBhcmVFc3NlbnRpYWxseUVxdWFsKHNpbXBsZVJ1bi5sb2dpY2FsUmlnaHQsIGlubGluZVJ1
bi0+bG9naWNhbFJpZ2h0KCkpOworICAgICAgICBpZiAobWF0Y2hpbmdSdW5zICYmIGlubGluZVJ1
bi0+dGV4dENvbnRleHQoKSkgeworICAgICAgICAgICAgbWF0Y2hpbmdSdW5zID0gc2ltcGxlUnVu
LnN0YXJ0ID09IGlubGluZVJ1bi0+dGV4dENvbnRleHQoKS0+c3RhcnQoKSAmJiBzaW1wbGVSdW4u
ZW5kID09IGlubGluZVJ1bi0+dGV4dENvbnRleHQoKS0+ZW5kKCk7CisgICAgICAgICAgICAvLyBT
TEwgaGFuZGxlcyBzdHJpbmdzIGluIGEgbW9yZSBjb25jYXRlbmF0ZWQgZm9ybWF0IDxkaXY+Zm9v
PGJyPmJhcjwvZGl2PiAtPiBmb28gLT4gMCwzIGJhciAtPiAzLDYgdnMuIDAsMyBhbmQgMCwzCisg
ICAgICAgICAgICBpZiAoIW1hdGNoaW5nUnVucykKKyAgICAgICAgICAgICAgICBtYXRjaGluZ1J1
bnMgPSAoc2ltcGxlUnVuLmVuZCAtIHNpbXBsZVJ1bi5zdGFydCkgPT0gKGlubGluZVJ1bi0+dGV4
dENvbnRleHQoKS0+ZW5kKCkgLSBpbmxpbmVSdW4tPnRleHRDb250ZXh0KCktPnN0YXJ0KCkpOyAK
KyAgICAgICAgfQogICAgICAgICBpZiAobWF0Y2hpbmdSdW5zKQogICAgICAgICAgICAgY29udGlu
dWU7CiAKLSAgICAgICAgc3RyZWFtIDw8ICJNaXNtYXRjaGluZzogc2ltcGxlIHJ1bigiIDw8IHNp
bXBsZVJ1bi5zdGFydCA8PCAiLCAiIDw8IHNpbXBsZVJ1bi5lbmQgPDwgIikgKCIgPDwgc2ltcGxl
UnVuLmxvZ2ljYWxMZWZ0IDw8ICIsICIgPDwgc2ltcGxlUnVuLmxvZ2ljYWxSaWdodCA8PCAiKSBs
YXlvdXQgcnVuKCIgPDwgaW5saW5lUnVuLnRleHRDb250ZXh0KCktPnN0YXJ0KCkgPDwgIiwgIiA8
PCBpbmxpbmVSdW4udGV4dENvbnRleHQoKS0+c3RhcnQoKSArIGlubGluZVJ1bi50ZXh0Q29udGV4
dCgpLT5sZW5ndGgoKSA8PCAiKSAoIiA8PCBpbmxpbmVSdW4ubG9naWNhbExlZnQoKSA8PCAiLCAi
IDw8IGlubGluZVJ1bi5sb2dpY2FsUmlnaHQoKSA8PCAiKSI7CisgICAgICAgIHN0cmVhbSA8PCAi
TWlzbWF0Y2hpbmc6IHNpbXBsZSBydW4oIiA8PCBzaW1wbGVSdW4uc3RhcnQgPDwgIiwgIiA8PCBz
aW1wbGVSdW4uZW5kIDw8ICIpICgiIDw8IHNpbXBsZVJ1bi5sb2dpY2FsTGVmdCA8PCAiLCAiIDw8
IHNpbXBsZVJ1bi5sb2dpY2FsUmlnaHQgPDwgIikgbGF5b3V0IHJ1bigiIDw8IGlubGluZVJ1bi0+
dGV4dENvbnRleHQoKS0+c3RhcnQoKSA8PCAiLCAiIDw8IGlubGluZVJ1bi0+dGV4dENvbnRleHQo
KS0+ZW5kKCkgPDwgIikgKCIgPDwgaW5saW5lUnVuLT5sb2dpY2FsTGVmdCgpIDw8ICIsICIgPDwg
aW5saW5lUnVuLT5sb2dpY2FsUmlnaHQoKSA8PCAiKSI7CiAgICAgICAgIHN0cmVhbS5uZXh0TGlu
ZSgpOwogICAgICAgICBtaXNtYXRjaGVkID0gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIG1pc21h
dGNoZWQ7CiB9CiAKLXN0YXRpYyBib29sIGNoZWNrRm9yTWF0Y2hpbmdOb25UZXh0UnVucyhjb25z
dCBJbmxpbmVSdW4mIGlubGluZVJ1biwgY29uc3QgV2ViQ29yZTo6SW5saW5lQm94JiBpbmxpbmVC
b3gpCitzdGF0aWMgYm9vbCBjaGVja0Zvck1hdGNoaW5nTm9uVGV4dFJ1bnMoY29uc3QgRGlzcGxh
eTo6UnVuJiBpbmxpbmVSdW4sIGNvbnN0IFdlYkNvcmU6OklubGluZUJveCYgaW5saW5lQm94KQog
ewogICAgIHJldHVybiBhcmVFc3NlbnRpYWxseUVxdWFsKGlubGluZUJveC5sb2dpY2FsTGVmdCgp
LCBpbmxpbmVSdW4ubG9naWNhbExlZnQoKSkKICAgICAgICAgJiYgYXJlRXNzZW50aWFsbHlFcXVh
bChpbmxpbmVCb3gubG9naWNhbFJpZ2h0KCksIGlubGluZVJ1bi5sb2dpY2FsUmlnaHQoKSkKICAg
ICAgICAgJiYgYXJlRXNzZW50aWFsbHlFcXVhbChpbmxpbmVCb3gubG9naWNhbEhlaWdodCgpLCBp
bmxpbmVSdW4ubG9naWNhbEhlaWdodCgpKTsKIH0KIAotc3RhdGljIGJvb2wgY2hlY2tGb3JNYXRj
aGluZ1RleHRSdW5zKGNvbnN0IElubGluZVJ1biYgaW5saW5lUnVuLCBmbG9hdCBsb2dpY2FsTGVm
dCwgZmxvYXQgbG9naWNhbFJpZ2h0LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kLCBmbG9h
dCBsb2dpY2FsSGVpZ2h0KQorc3RhdGljIGJvb2wgY2hlY2tGb3JNYXRjaGluZ1RleHRSdW5zKGNv
bnN0IERpc3BsYXk6OlJ1biYgaW5saW5lUnVuLCBjb25zdCBJbmxpbmVUZXh0Qm94JiBpbmxpbmVU
ZXh0Qm94KQogewotICAgIHJldHVybiBhcmVFc3NlbnRpYWxseUVxdWFsKGxvZ2ljYWxMZWZ0LCBp
bmxpbmVSdW4ubG9naWNhbExlZnQoKSkKLSAgICAgICAgJiYgYXJlRXNzZW50aWFsbHlFcXVhbChs
b2dpY2FsUmlnaHQsIGlubGluZVJ1bi5sb2dpY2FsUmlnaHQoKSkKLSAgICAgICAgJiYgc3RhcnQg
PT0gaW5saW5lUnVuLnRleHRDb250ZXh0KCktPnN0YXJ0KCkKLSAgICAgICAgJiYgKGVuZCA9PSAo
aW5saW5lUnVuLnRleHRDb250ZXh0KCktPnN0YXJ0KCkgKyBpbmxpbmVSdW4udGV4dENvbnRleHQo
KS0+bGVuZ3RoKCkpKQotICAgICAgICAmJiBhcmVFc3NlbnRpYWxseUVxdWFsKGxvZ2ljYWxIZWln
aHQsIGlubGluZVJ1bi5sb2dpY2FsSGVpZ2h0KCkpOworICAgIHJldHVybiBhcmVFc3NlbnRpYWxs
eUVxdWFsKGlubGluZVRleHRCb3gubG9naWNhbExlZnQoKSwgaW5saW5lUnVuLmxvZ2ljYWxMZWZ0
KCkpCisgICAgICAgICYmIGFyZUVzc2VudGlhbGx5RXF1YWwoaW5saW5lVGV4dEJveC5sb2dpY2Fs
UmlnaHQoKSwgaW5saW5lUnVuLmxvZ2ljYWxSaWdodCgpKQorICAgICAgICAmJiBpbmxpbmVUZXh0
Qm94LnN0YXJ0KCkgPT0gaW5saW5lUnVuLnRleHRDb250ZXh0KCktPnN0YXJ0KCkKKyAgICAgICAg
JiYgKGlubGluZVRleHRCb3guZW5kKCkgKyAxKSA9PSBpbmxpbmVSdW4udGV4dENvbnRleHQoKS0+
ZW5kKCkKKyAgICAgICAgJiYgYXJlRXNzZW50aWFsbHlFcXVhbChpbmxpbmVUZXh0Qm94LmxvZ2lj
YWxIZWlnaHQoKSwgaW5saW5lUnVuLmxvZ2ljYWxIZWlnaHQoKSk7CiB9CiAKIHN0YXRpYyB2b2lk
IGNvbGxlY3RGbG93Qm94U3VidHJlZShjb25zdCBJbmxpbmVGbG93Qm94JiBmbG93Ym94LCBWZWN0
b3I8V2ViQ29yZTo6SW5saW5lQm94Kj4mIGlubGluZUJveGVzKQpAQCAtMTI2LDE5ICsxMzEsNiBA
QCBzdGF0aWMgdm9pZCBjb2xsZWN0SW5saW5lQm94ZXMoY29uc3QgUmVuZGVyQmxvY2tGbG93JiBy
b290LCBWZWN0b3I8V2ViQ29yZTo6SW5saQogICAgIH0KIH0KIAotc3RhdGljIExheW91dFVuaXQg
cmVzb2x2ZUZvclJlbGF0aXZlUG9zaXRpb25JZk5lZWRlZChjb25zdCBJbmxpbmVUZXh0Qm94JiBp
bmxpbmVUZXh0Qm94KQotewotICAgIExheW91dFVuaXQgeE9mZnNldDsKLSAgICBhdXRvKiBwYXJl
bnQgPSBpbmxpbmVUZXh0Qm94LnBhcmVudCgpOwotICAgIHdoaWxlIChpczxJbmxpbmVGbG93Qm94
PihwYXJlbnQpKSB7Ci0gICAgICAgIGF1dG8mIHJlbmRlcmVyID0gcGFyZW50LT5yZW5kZXJlcigp
OwotICAgICAgICBpZiAocmVuZGVyZXIuaXNJbkZsb3dQb3NpdGlvbmVkKCkpCi0gICAgICAgICAg
ICB4T2Zmc2V0ID0gcmVuZGVyZXIub2Zmc2V0Rm9ySW5GbG93UG9zaXRpb24oKS53aWR0aCgpOwot
ICAgICAgICBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudCgpOwotICAgIH0KLSAgICByZXR1cm4geE9m
ZnNldDsKLX0KLQogc3RhdGljIGJvb2wgb3V0cHV0TWlzbWF0Y2hpbmdDb21wbGV4TGluZUluZm9y
bWF0aW9uSWZOZWVkZWQoVGV4dFN0cmVhbSYgc3RyZWFtLCBjb25zdCBMYXlvdXRTdGF0ZSYgbGF5
b3V0U3RhdGUsIGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgYmxvY2tGbG93LCBjb25zdCBDb250YWlu
ZXImIGlubGluZUZvcm1hdHRpbmdSb290KQogewogICAgIGF1dG8mIGlubGluZUZvcm1hdHRpbmdT
dGF0ZSA9IGxheW91dFN0YXRlLmVzdGFibGlzaGVkRm9ybWF0dGluZ1N0YXRlKGlubGluZUZvcm1h
dHRpbmdSb290KTsKQEAgLTE1OCw2NiArMTUwLDMwIEBAIHN0YXRpYyBib29sIG91dHB1dE1pc21h
dGNoaW5nQ29tcGxleExpbmVJbmZvcm1hdGlvbklmTmVlZGVkKFRleHRTdHJlYW0mIHN0cmVhbSwK
ICAgICB9CiAKICAgICBmb3IgKHVuc2lnbmVkIGlubGluZUJveEluZGV4ID0gMDsgaW5saW5lQm94
SW5kZXggPCBpbmxpbmVCb3hlcy5zaXplKCkgJiYgcnVuSW5kZXggPCBpbmxpbmVSdW5MaXN0LnNp
emUoKTsgKytpbmxpbmVCb3hJbmRleCkgeworICAgICAgICBhdXRvJiBpbmxpbmVSdW4gPSBpbmxp
bmVSdW5MaXN0W3J1bkluZGV4XTsKICAgICAgICAgYXV0byogaW5saW5lQm94ID0gaW5saW5lQm94
ZXNbaW5saW5lQm94SW5kZXhdOwogICAgICAgICBhdXRvKiBpbmxpbmVUZXh0Qm94ID0gaXM8SW5s
aW5lVGV4dEJveD4oaW5saW5lQm94KSA/IGRvd25jYXN0PElubGluZVRleHRCb3g+KGlubGluZUJv
eCkgOiBudWxscHRyOworICAgICAgICBib29sIG1hdGNoaW5nUnVucyA9IGlubGluZVRleHRCb3gg
PyBjaGVja0Zvck1hdGNoaW5nVGV4dFJ1bnMoKmlubGluZVJ1biwgKmlubGluZVRleHRCb3gpIDog
bWF0Y2hpbmdSdW5zID0gY2hlY2tGb3JNYXRjaGluZ05vblRleHRSdW5zKCppbmxpbmVSdW4sICpp
bmxpbmVCb3gpOwogCi0gICAgICAgIGF1dG8mIGlubGluZVJ1biA9IGlubGluZVJ1bkxpc3RbcnVu
SW5kZXhdOwotICAgICAgICBhdXRvIG1hdGNoaW5nUnVucyA9IGZhbHNlOwotICAgICAgICBpZiAo
aW5saW5lVGV4dEJveCkgewotICAgICAgICAgICAgYXV0byB4T2Zmc2V0ID0gcmVzb2x2ZUZvclJl
bGF0aXZlUG9zaXRpb25JZk5lZWRlZCgqaW5saW5lVGV4dEJveCk7Ci0gICAgICAgICAgICBtYXRj
aGluZ1J1bnMgPSBjaGVja0Zvck1hdGNoaW5nVGV4dFJ1bnMoaW5saW5lUnVuLCBpbmxpbmVUZXh0
Qm94LT5sb2dpY2FsTGVmdCgpICsgeE9mZnNldCwKLSAgICAgICAgICAgICAgICBpbmxpbmVUZXh0
Qm94LT5sb2dpY2FsUmlnaHQoKSArIHhPZmZzZXQsCi0gICAgICAgICAgICAgICAgaW5saW5lVGV4
dEJveC0+c3RhcnQoKSwKLSAgICAgICAgICAgICAgICBpbmxpbmVUZXh0Qm94LT5lbmQoKSArIDEs
Ci0gICAgICAgICAgICAgICAgaW5saW5lVGV4dEJveC0+bG9naWNhbEhlaWdodCgpKTsKLQotICAg
ICAgICAgICAgLy8gPHNwYW4+Zm9vYmFyPC9zcGFuPmZvb2JhciBnZW5lcmF0ZXMgMiBpbmxpbmUg
dGV4dCBib3hlcyB3aGlsZSB3ZSBvbmx5IGdlbmVyYXRlIG9uZSBpbmxpbmUgcnVuLgotICAgICAg
ICAgICAgLy8gYWxzbyA8ZGl2PmZvbzxpbWcgc3R5bGU9ImZsb2F0OiBsZWZ0OyI+YmFyPC9kaXY+
IHRvby4KLSAgICAgICAgICAgIGF1dG8gaW5saW5lUnVuRW5kID0gaW5saW5lUnVuLnRleHRDb250
ZXh0KCktPnN0YXJ0KCkgKyBpbmxpbmVSdW4udGV4dENvbnRleHQoKS0+bGVuZ3RoKCk7Ci0gICAg
ICAgICAgICBhdXRvIHRleHRSdW5NaWdodEJlRXh0ZW5kZWQgPSAhbWF0Y2hpbmdSdW5zICYmIGlu
bGluZVRleHRCb3gtPmVuZCgpIDwgaW5saW5lUnVuRW5kICYmIGlubGluZUJveEluZGV4IDwgaW5s
aW5lQm94ZXMuc2l6ZSgpIC0gMTsKLQotICAgICAgICAgICAgaWYgKHRleHRSdW5NaWdodEJlRXh0
ZW5kZWQpIHsKLSAgICAgICAgICAgICAgICBhdXRvIGxvZ2ljYWxMZWZ0ID0gaW5saW5lVGV4dEJv
eC0+bG9naWNhbExlZnQoKSArIHhPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgYXV0byBsb2dpY2Fs
UmlnaHQgPSBpbmxpbmVUZXh0Qm94LT5sb2dpY2FsUmlnaHQoKSArIHhPZmZzZXQ7Ci0gICAgICAg
ICAgICAgICAgYXV0byBzdGFydCA9IGlubGluZVRleHRCb3gtPnN0YXJ0KCk7Ci0gICAgICAgICAg
ICAgICAgYXV0byBlbmQgPSBpbmxpbmVUZXh0Qm94LT5lbmQoKSArIDE7Ci0gICAgICAgICAgICAg
ICAgYXV0byBpbmRleCA9ICsraW5saW5lQm94SW5kZXg7Ci0gICAgICAgICAgICAgICAgZm9yICg7
IGluZGV4IDwgaW5saW5lQm94ZXMuc2l6ZSgpOyArK2luZGV4KSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGF1dG8qIGlubGluZUJveCA9IGlubGluZUJveGVzW2luZGV4XTsKLSAgICAgICAgICAgICAg
ICAgICAgYXV0byogaW5saW5lVGV4dEJveCA9IGlzPElubGluZVRleHRCb3g+KGlubGluZUJveCkg
PyBkb3duY2FzdDxJbmxpbmVUZXh0Qm94PihpbmxpbmVCb3gpIDogbnVsbHB0cjsKLSAgICAgICAg
ICAgICAgICAgICAgLy8gQ2FuJ3QgbWl4IGRpZmZlcmVudCBpbmxpbmUgYm94ZXMuCi0gICAgICAg
ICAgICAgICAgICAgIGlmICghaW5saW5lVGV4dEJveCkKLSAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotCi0gICAgICAgICAgICAgICAgICAgIGF1dG8geE9mZnNldCA9IHJlc29sdmVGb3JS
ZWxhdGl2ZVBvc2l0aW9uSWZOZWVkZWQoKmlubGluZVRleHRCb3gpOwotICAgICAgICAgICAgICAg
ICAgICBsb2dpY2FsUmlnaHQgPSBpbmxpbmVUZXh0Qm94LT5sb2dpY2FsUmlnaHQoKSArIHhPZmZz
ZXQ7Ci0gICAgICAgICAgICAgICAgICAgIGVuZCArPSAoaW5saW5lVGV4dEJveC0+ZW5kKCkgKyAx
KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNoZWNrRm9yTWF0Y2hpbmdUZXh0UnVucyhpbmxp
bmVSdW4sIGxvZ2ljYWxMZWZ0LCBsb2dpY2FsUmlnaHQsIHN0YXJ0LCBlbmQsIGlubGluZVRleHRC
b3gtPmxvZ2ljYWxIZWlnaHQoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoaW5n
UnVucyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbmxpbmVCb3hJbmRleCA9IGlu
ZGV4OwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgICAgICAvLyBXZW50IHRvbyBmYXI/Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChlbmQgPj0gaW5saW5lUnVuRW5kKQotICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICBpZiAoIW1hdGNoaW5nUnVucykgewor
ICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoaXM8UmVuZGVyTGluZUJyZWFrPihpbmxpbmVC
b3gtPnJlbmRlcmVyKCkpKSB7CisgICAgICAgICAgICAgICAgLy8gPGJyPiBwb3NpdGlvbmluZyBp
cyB3ZWlyZCBhdCB0aGlzIHBvaW50LiBJdCBuZWVkcyBwcm9wZXIgYmFzZWxpbmUuCisgICAgICAg
ICAgICAgICAgbWF0Y2hpbmdSdW5zID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICArK3J1bkluZGV4
OworICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQotICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgIG1hdGNoaW5nUnVucyA9IGNoZWNrRm9yTWF0Y2hpbmdOb25UZXh0UnVu
cyhpbmxpbmVSdW4sICppbmxpbmVCb3gpOwotCiAKLSAgICAgICAgaWYgKCFtYXRjaGluZ1J1bnMp
IHsKLSAgICAgICAgICAgIHN0cmVhbSA8PCAiTWlzbWF0Y2hpbmc6IHJ1biAiOworICAgICAgICAg
ICAgc3RyZWFtIDw8ICJNaXNtYXRjaGluZzogcnVuIjsKIAogICAgICAgICAgICAgaWYgKGlubGlu
ZVRleHRCb3gpCi0gICAgICAgICAgICAgICAgc3RyZWFtIDw8ICIoIiA8PCBpbmxpbmVUZXh0Qm94
LT5zdGFydCgpIDw8ICIsICIgPDwgaW5saW5lVGV4dEJveC0+ZW5kKCkgKyAxIDw8ICIpIjsKLSAg
ICAgICAgICAgIHN0cmVhbSA8PCAiICgiIDw8IGlubGluZUJveC0+bG9naWNhbExlZnQoKSA8PCAi
LCAiIDw8IGlubGluZUJveC0+bG9naWNhbFJpZ2h0KCkgPDwgIikgKCIgPDwgaW5saW5lQm94LT5s
b2dpY2FsV2lkdGgoKSA8PCAieCIgPDwgaW5saW5lQm94LT5sb2dpY2FsSGVpZ2h0KCkgPDwgIiki
OworICAgICAgICAgICAgICAgIHN0cmVhbSA8PCAiICgiIDw8IGlubGluZVRleHRCb3gtPnN0YXJ0
KCkgPDwgIiwgIiA8PCBpbmxpbmVUZXh0Qm94LT5lbmQoKSArIDEgPDwgIikiOworICAgICAgICAg
ICAgc3RyZWFtIDw8ICIgKCIgPDwgaW5saW5lQm94LT5sb2dpY2FsTGVmdCgpIDw8ICIsICIgPDwg
aW5saW5lQm94LT5sb2dpY2FsVG9wKCkgPDwgIikgKCIgPDwgaW5saW5lQm94LT5sb2dpY2FsV2lk
dGgoKSA8PCAieCIgPDwgaW5saW5lQm94LT5sb2dpY2FsSGVpZ2h0KCkgPDwgIikiOwogCi0gICAg
ICAgICAgICBzdHJlYW0gPDwgImlubGluZSBydW4gIjsKLSAgICAgICAgICAgIGlmIChpbmxpbmVS
dW4udGV4dENvbnRleHQoKSkKLSAgICAgICAgICAgICAgICBzdHJlYW0gPDwgIigiIDw8IGlubGlu
ZVJ1bi50ZXh0Q29udGV4dCgpLT5zdGFydCgpIDw8ICIsICIgPDwgaW5saW5lUnVuLnRleHRDb250
ZXh0KCktPnN0YXJ0KCkgKyBpbmxpbmVSdW4udGV4dENvbnRleHQoKS0+bGVuZ3RoKCkgPDwgIikg
IjsKLSAgICAgICAgICAgIHN0cmVhbSA8PCAiKCIgPDwgaW5saW5lUnVuLmxvZ2ljYWxMZWZ0KCkg
PDwgIiwgIiA8PCBpbmxpbmVSdW4ubG9naWNhbFJpZ2h0KCkgPDwgIikgKCIgPDwgaW5saW5lUnVu
LmxvZ2ljYWxXaWR0aCgpIDw8ICJ4IiA8PCBpbmxpbmVSdW4ubG9naWNhbEhlaWdodCgpIDw8ICIp
IjsKKyAgICAgICAgICAgIHN0cmVhbSA8PCAiIGlubGluZSBydW4iOworICAgICAgICAgICAgaWYg
KGlubGluZVJ1bi0+dGV4dENvbnRleHQoKSkKKyAgICAgICAgICAgICAgICBzdHJlYW0gPDwgIiAo
IiA8PCBpbmxpbmVSdW4tPnRleHRDb250ZXh0KCktPnN0YXJ0KCkgPDwgIiwgIiA8PCBpbmxpbmVS
dW4tPnRleHRDb250ZXh0KCktPmVuZCgpIDw8ICIpIjsKKyAgICAgICAgICAgIHN0cmVhbSA8PCAi
ICgiIDw8IGlubGluZVJ1bi0+bG9naWNhbExlZnQoKSA8PCAiLCAiIDw8IGlubGluZVJ1bi0+bG9n
aWNhbFRvcCgpIDw8ICIpICgiIDw8IGlubGluZVJ1bi0+bG9naWNhbFdpZHRoKCkgPDwgIngiIDw8
IGlubGluZVJ1bi0+bG9naWNhbEhlaWdodCgpIDw8ICIpIjsKICAgICAgICAgICAgIHN0cmVhbS5u
ZXh0TGluZSgpOwogICAgICAgICAgICAgbWlzbWF0Y2hlZCA9IHRydWU7CiAgICAgICAgIH0KQEAg
LTI0NSw3ICsyMDEsNyBAQCBzdGF0aWMgYm9vbCBvdXRwdXRNaXNtYXRjaGluZ0Jsb2NrQm94SW5m
b3JtYXRpb25JZk5lZWRlZChUZXh0U3RyZWFtJiBzdHJlYW0sIGNvbgogICAgICAgICAvLyBQcm9k
dWNlIGEgUmVuZGVyQm94IG1hdGNoaW5nIG1hcmdpbiBib3guCiAgICAgICAgIGF1dG8gYm9yZGVy
Qm94ID0gZGlzcGxheUJveC5ib3JkZXJCb3goKTsKIAotICAgICAgICByZXR1cm4gRGlzcGxheTo6
Qm94OjpSZWN0IHsKKyAgICAgICAgcmV0dXJuIERpc3BsYXk6OlJlY3QgewogICAgICAgICAgICAg
Ym9yZGVyQm94LnRvcCgpIC0gZGlzcGxheUJveC5ub25Db2xsYXBzZWRNYXJnaW5CZWZvcmUoKSwK
ICAgICAgICAgICAgIGJvcmRlckJveC5sZWZ0KCkgLSBkaXNwbGF5Qm94LmNvbXB1dGVkTWFyZ2lu
U3RhcnQoKS52YWx1ZU9yKDApLAogICAgICAgICAgICAgZGlzcGxheUJveC5jb21wdXRlZE1hcmdp
blN0YXJ0KCkudmFsdWVPcigwKSArIGJvcmRlckJveC53aWR0aCgpICsgZGlzcGxheUJveC5jb21w
dXRlZE1hcmdpbkVuZCgpLnZhbHVlT3IoMCksCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrRm9ybWF0dGluZ0Nv
bnRleHRHZW9tZXRyeS5jcHAKaW5kZXggZjk2MzNiNDM4YTFiMWIyMjdkYTViODcxNDZmZjMxZWJj
NTY4NjI1Yy4uYWUxYTIxZWRiOGM1MmQzYjYxYzE1MDgzMzFjYzMwZDg2NjRiZTFhZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRp
bmdDb250ZXh0R2VvbWV0cnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9ibG9ja2Zv
cm1hdHRpbmcvQmxvY2tGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcApAQCAtNzUsMTAgKzc1
LDEwIEBAIEhlaWdodEFuZE1hcmdpbiBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6
aW5GbG93Tm9uUmVwbGFjZWRIZWlnaHRBbmRNYXJnCiAKICAgICAgICAgLy8gMS4gdGhlIGJvdHRv
bSBlZGdlIG9mIHRoZSBsYXN0IGxpbmUgYm94LCBpZiB0aGUgYm94IGVzdGFibGlzaGVzIGEgaW5s
aW5lIGZvcm1hdHRpbmcgY29udGV4dCB3aXRoIG9uZSBvciBtb3JlIGxpbmVzCiAgICAgICAgIGlm
IChsYXlvdXRCb3guZXN0YWJsaXNoZXNJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCgpKSB7Ci0gICAg
ICAgICAgICAvLyBUaGlzIGlzIHRlbXAgYW5kIHdpbGwgYmUgcmVwbGFjZWQgYnkgdGhlIGNvcnJl
Y3QgZGlzcGxheSBib3ggb25jZSBpbmxpbmUgcnVucyBtb3ZlIG92ZXIgdG8gdGhlIGRpc3BsYXkg
dHJlZS4KLSAgICAgICAgICAgIGF1dG8mIGlubGluZVJ1bnMgPSBkb3duY2FzdDxJbmxpbmVGb3Jt
YXR0aW5nU3RhdGU+KGxheW91dFN0YXRlLmVzdGFibGlzaGVkRm9ybWF0dGluZ1N0YXRlKGxheW91
dEJveCkpLmlubGluZVJ1bnMoKTsKLSAgICAgICAgICAgIGF1dG8gYm90dG9tRWRnZSA9IGlubGlu
ZVJ1bnMuaXNFbXB0eSgpID8gTGF5b3V0VW5pdCgpIDogaW5saW5lUnVucy5sYXN0KCkubG9naWNh
bEJvdHRvbSgpOwotICAgICAgICAgICAgcmV0dXJuIHsgYm90dG9tRWRnZSAtIGJvcmRlckFuZFBh
ZGRpbmdUb3AsIG5vbkNvbGxhcHNlZE1hcmdpbiB9OworICAgICAgICAgICAgYXV0byYgbGluZUJv
eGVzID0gZG93bmNhc3Q8SW5saW5lRm9ybWF0dGluZ1N0YXRlPihsYXlvdXRTdGF0ZS5lc3RhYmxp
c2hlZEZvcm1hdHRpbmdTdGF0ZShsYXlvdXRCb3gpKS5saW5lQm94ZXMoKTsKKyAgICAgICAgICAg
IC8vIEV2ZW4gZW1wdHkgY29udGFpbmVycyBnZW5lcmF0ZSBvbmUgbGluZS4gCisgICAgICAgICAg
ICBBU1NFUlQoIWxpbmVCb3hlcy5pc0VtcHR5KCkpOworICAgICAgICAgICAgcmV0dXJuIHsgbGlu
ZUJveGVzLmxhc3QoKS5sb2dpY2FsQm90dG9tKCkgLSBib3JkZXJBbmRQYWRkaW5nVG9wLCBub25D
b2xsYXBzZWRNYXJnaW4gfTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIDIuIHRoZSBib3R0b20g
ZWRnZSBvZiB0aGUgYm90dG9tIChwb3NzaWJseSBjb2xsYXBzZWQpIG1hcmdpbiBvZiBpdHMgbGFz
dCBpbi1mbG93IGNoaWxkLCBpZiB0aGUgY2hpbGQncyBib3R0b20gbWFyZ2luLi4uCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheUJveC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheUJveC5jcHAKaW5kZXggMGVl
ZWFlY2QzNzRhYWJkYjNhZWVmMDBjOGYzMTI0YTZjYWUwYWYzOS4uNmFkZTQwNmQ1YzQyNzVlYWQ1
YmYzNWUwMmQ0NzY2OGUwNmE1MzUwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2Rpc3BsYXl0cmVlL0Rpc3BsYXlCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9k
aXNwbGF5dHJlZS9EaXNwbGF5Qm94LmNwcApAQCAtMzYsMTcgKzM2LDYgQEAgbmFtZXNwYWNlIERp
c3BsYXkgewogCiBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoQm94KTsKIAotQm94OjpSZWN0
OjpSZWN0KExheW91dFVuaXQgdG9wLCBMYXlvdXRVbml0IGxlZnQsIExheW91dFVuaXQgd2lkdGgs
IExheW91dFVuaXQgaGVpZ2h0KQotICAgIDogbV9yZWN0KGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdo
dCkKLXsKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgbV9oYXNWYWxpZFRvcCA9IHRydWU7Ci0g
ICAgbV9oYXNWYWxpZExlZnQgPSB0cnVlOwotICAgIG1faGFzVmFsaWRXaWR0aCA9IHRydWU7Ci0g
ICAgbV9oYXNWYWxpZEhlaWdodCA9IHRydWU7Ci0jZW5kaWYKLX0KLQogQm94OjpCb3goY29uc3Qg
UmVuZGVyU3R5bGUmIHN0eWxlKQogICAgIDogbV9zdHlsZShzdHlsZSkKIHsKQEAgLTg4LDcgKzc3
LDcgQEAgQm94OjpTdHlsZTo6U3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQogewogfQog
Ci1Cb3g6OlJlY3QgQm94OjptYXJnaW5Cb3goKSBjb25zdAorUmVjdCBCb3g6Om1hcmdpbkJveCgp
IGNvbnN0CiB7CiAgICAgYXV0byBib3JkZXJCb3ggPSB0aGlzLT5ib3JkZXJCb3goKTsKIApAQCAt
MTAwLDcgKzg5LDcgQEAgQm94OjpSZWN0IEJveDo6bWFyZ2luQm94KCkgY29uc3QKICAgICByZXR1
cm4gbWFyZ2luQm94OwogfQogCi1Cb3g6OlJlY3QgQm94Ojpub25Db2xsYXBzZWRNYXJnaW5Cb3go
KSBjb25zdAorUmVjdCBCb3g6Om5vbkNvbGxhcHNlZE1hcmdpbkJveCgpIGNvbnN0CiB7CiAgICAg
YXV0byBib3JkZXJCb3ggPSB0aGlzLT5ib3JkZXJCb3goKTsKIApAQCAtMTEyLDcgKzEwMSw3IEBA
IEJveDo6UmVjdCBCb3g6Om5vbkNvbGxhcHNlZE1hcmdpbkJveCgpIGNvbnN0CiAgICAgcmV0dXJu
IG1hcmdpbkJveDsKIH0KIAotQm94OjpSZWN0IEJveDo6Ym9yZGVyQm94KCkgY29uc3QKK1JlY3Qg
Qm94Ojpib3JkZXJCb3goKSBjb25zdAogewogICAgIFJlY3QgYm9yZGVyQm94OwogICAgIGJvcmRl
ckJveC5zZXRUb3BMZWZ0KHsgfSk7CkBAIC0xMjAsNyArMTA5LDcgQEAgQm94OjpSZWN0IEJveDo6
Ym9yZGVyQm94KCkgY29uc3QKICAgICByZXR1cm4gYm9yZGVyQm94OwogfQogCi1Cb3g6OlJlY3Qg
Qm94OjpwYWRkaW5nQm94KCkgY29uc3QKK1JlY3QgQm94OjpwYWRkaW5nQm94KCkgY29uc3QKIHsK
ICAgICBhdXRvIGJvcmRlckJveCA9IHRoaXMtPmJvcmRlckJveCgpOwogCkBAIC0xMzIsNyArMTIx
LDcgQEAgQm94OjpSZWN0IEJveDo6cGFkZGluZ0JveCgpIGNvbnN0CiAgICAgcmV0dXJuIHBhZGRp
bmdCb3g7CiB9CiAKLUJveDo6UmVjdCBCb3g6OmNvbnRlbnRCb3goKSBjb25zdAorUmVjdCBCb3g6
OmNvbnRlbnRCb3goKSBjb25zdAogewogICAgIFJlY3QgY29udGVudEJveDsKICAgICBjb250ZW50
Qm94LnNldFRvcChjb250ZW50Qm94VG9wKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2Rpc3BsYXl0cmVlL0Rpc3BsYXlCb3guaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9k
aXNwbGF5dHJlZS9EaXNwbGF5Qm94LmgKaW5kZXggODY4NWMzNzhjNDhhODg2YzI1YzFiOTM2ZDA2
YjM2YTIxMzZlMmU3MS4uNWNkZjYzYmY3Nzk1OTFhODhlNzQ4MjMyNjJhMGE5MGMyMTk3YTRjMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Rpc3BsYXl0cmVlL0Rpc3BsYXlCb3gu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheUJveC5oCkBA
IC0yNyw2ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkK
IAorI2luY2x1ZGUgIkRpc3BsYXlSZWN0LmgiCiAjaW5jbHVkZSAiTGF5b3V0VW5pdHMuaCIKICNp
bmNsdWRlICJSZW5kZXJTdHlsZUNvbnN0YW50cy5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2Mu
aD4KQEAgLTYwLDY4ICs2MSw2IEBAIHB1YmxpYzoKIAogICAgIEJveChjb25zdCBSZW5kZXJTdHls
ZSYpOwogICAgIEJveChjb25zdCBCb3gmKTsKLQotICAgIGNsYXNzIFJlY3QgewotICAgIHB1Ymxp
YzoKLSAgICAgICAgUmVjdCgpID0gZGVmYXVsdDsKLSAgICAgICAgUmVjdChMYXlvdXRVbml0IHRv
cCwgTGF5b3V0VW5pdCBsZWZ0LCBMYXlvdXRVbml0IHdpZHRoLCBMYXlvdXRVbml0IGhlaWdodCk7
Ci0gICAgICAgIAotICAgICAgICBMYXlvdXRVbml0IHRvcCgpIGNvbnN0OwotICAgICAgICBMYXlv
dXRVbml0IGxlZnQoKSBjb25zdDsKLSAgICAgICAgTGF5b3V0UG9pbnQgdG9wTGVmdCgpIGNvbnN0
OwotCi0gICAgICAgIExheW91dFVuaXQgYm90dG9tKCkgY29uc3Q7Ci0gICAgICAgIExheW91dFVu
aXQgcmlnaHQoKSBjb25zdDsgICAgICAgIAotICAgICAgICBMYXlvdXRQb2ludCBib3R0b21SaWdo
dCgpIGNvbnN0OwotCi0gICAgICAgIExheW91dFVuaXQgd2lkdGgoKSBjb25zdDsKLSAgICAgICAg
TGF5b3V0VW5pdCBoZWlnaHQoKSBjb25zdDsKLSAgICAgICAgTGF5b3V0U2l6ZSBzaXplKCkgY29u
c3Q7Ci0KLSAgICAgICAgdm9pZCBzZXRUb3AoTGF5b3V0VW5pdCk7Ci0gICAgICAgIHZvaWQgc2V0
TGVmdChMYXlvdXRVbml0KTsKLSAgICAgICAgdm9pZCBzZXRUb3BMZWZ0KGNvbnN0IExheW91dFBv
aW50Jik7Ci0gICAgICAgIHZvaWQgc2V0V2lkdGgoTGF5b3V0VW5pdCk7Ci0gICAgICAgIHZvaWQg
c2V0SGVpZ2h0KExheW91dFVuaXQpOwotICAgICAgICB2b2lkIHNldFNpemUoY29uc3QgTGF5b3V0
U2l6ZSYpOwotCi0gICAgICAgIHZvaWQgc2hpZnRMZWZ0VG8oTGF5b3V0VW5pdCk7Ci0gICAgICAg
IHZvaWQgc2hpZnRSaWdodFRvKExheW91dFVuaXQpOwotICAgICAgICB2b2lkIHNoaWZ0VG9wVG8o
TGF5b3V0VW5pdCk7Ci0gICAgICAgIHZvaWQgc2hpZnRCb3R0b21UbyhMYXlvdXRVbml0KTsKLQot
ICAgICAgICB2b2lkIG1vdmVIb3Jpem9udGFsbHkoTGF5b3V0VW5pdCk7Ci0gICAgICAgIHZvaWQg
bW92ZVZlcnRpY2FsbHkoTGF5b3V0VW5pdCk7Ci0KLSAgICAgICAgdm9pZCBleHBhbmQoTGF5b3V0
VW5pdCwgTGF5b3V0VW5pdCk7Ci0gICAgICAgIGJvb2wgaW50ZXJzZWN0cyhjb25zdCBSZWN0JiBy
ZWN0KSBjb25zdCB7IHJldHVybiBtX3JlY3QuaW50ZXJzZWN0cyhyZWN0KTsgfQotCi0gICAgICAg
IFJlY3QgY2xvbmUoKSBjb25zdDsKLSAgICAgICAgb3BlcmF0b3IgTGF5b3V0UmVjdCgpIGNvbnN0
OwotCi0gICAgcHJpdmF0ZToKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgIHZvaWQgaW52
YWxpZGF0ZVRvcCgpIHsgbV9oYXNWYWxpZFRvcCA9IGZhbHNlOyB9Ci0gICAgICAgIHZvaWQgaW52
YWxpZGF0ZUxlZnQoKSB7IG1faGFzVmFsaWRMZWZ0ID0gZmFsc2U7IH0KLSAgICAgICAgdm9pZCBp
bnZhbGlkYXRlV2lkdGgoKSB7IG1faGFzVmFsaWRXaWR0aCA9IGZhbHNlOyB9Ci0gICAgICAgIHZv
aWQgaW52YWxpZGF0ZUhlaWdodCgpIHsgbV9oYXNWYWxpZEhlaWdodCA9IGZhbHNlOyB9Ci0gICAg
ICAgIHZvaWQgaW52YWxpZGF0ZVBvc2l0aW9uKCk7Ci0KLSAgICAgICAgYm9vbCBoYXNWYWxpZFBv
c2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9oYXNWYWxpZFRvcCAmJiBtX2hhc1ZhbGlkTGVmdDsg
fQotICAgICAgICBib29sIGhhc1ZhbGlkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzVmFsaWRX
aWR0aCAmJiBtX2hhc1ZhbGlkSGVpZ2h0OyB9Ci0gICAgICAgIGJvb2wgaGFzVmFsaWRHZW9tZXRy
eSgpIGNvbnN0IHsgcmV0dXJuIGhhc1ZhbGlkUG9zaXRpb24oKSAmJiBoYXNWYWxpZFNpemUoKTsg
fQotICAgIAotICAgICAgICB2b2lkIHNldEhhc1ZhbGlkUG9zaXRpb24oKTsKLSAgICAgICAgdm9p
ZCBzZXRIYXNWYWxpZFNpemUoKTsKLQotICAgICAgICBib29sIG1faGFzVmFsaWRUb3AgeyBmYWxz
ZSB9OwotICAgICAgICBib29sIG1faGFzVmFsaWRMZWZ0IHsgZmFsc2UgfTsKLSAgICAgICAgYm9v
bCBtX2hhc1ZhbGlkV2lkdGggeyBmYWxzZSB9OwotICAgICAgICBib29sIG1faGFzVmFsaWRIZWln
aHQgeyBmYWxzZSB9OwotI2VuZGlmCi0gICAgICAgIExheW91dFJlY3QgbV9yZWN0OwotICAgIH07
Ci0KICAgICB+Qm94KCk7CiAKICAgICBMYXlvdXRVbml0IHRvcCgpIGNvbnN0OwpAQCAtMTM5LDYg
Kzc4LDcgQEAgcHVibGljOgogICAgIFJlY3QgcmVjdFdpdGhNYXJnaW4oKSBjb25zdDsKIAogICAg
IExheW91dDo6VXNlZFZlcnRpY2FsTWFyZ2luIHZlcnRpY2FsTWFyZ2luKCkgY29uc3Q7CisgICAg
TGF5b3V0OjpVc2VkSG9yaXpvbnRhbE1hcmdpbiBob3Jpem9udGFsTWFyZ2luKCkgY29uc3Q7CiAg
ICAgTGF5b3V0VW5pdCBtYXJnaW5CZWZvcmUoKSBjb25zdDsKICAgICBMYXlvdXRVbml0IG1hcmdp
blN0YXJ0KCkgY29uc3Q7CiAgICAgTGF5b3V0VW5pdCBtYXJnaW5BZnRlcigpIGNvbnN0OwpAQCAt
MTc5LDYgKzExOSw5IEBAIHB1YmxpYzoKICAgICBMYXlvdXRVbml0IHBhZGRpbmdCb3hIZWlnaHQo
KSBjb25zdCB7IHJldHVybiBwYWRkaW5nVG9wKCkudmFsdWVPcigwKSArIGNvbnRlbnRCb3hIZWln
aHQoKSArIHBhZGRpbmdCb3R0b20oKS52YWx1ZU9yKDApOyB9CiAgICAgTGF5b3V0VW5pdCBwYWRk
aW5nQm94V2lkdGgoKSBjb25zdCB7IHJldHVybiBwYWRkaW5nTGVmdCgpLnZhbHVlT3IoMCkgKyBj
b250ZW50Qm94V2lkdGgoKSArIHBhZGRpbmdSaWdodCgpLnZhbHVlT3IoMCk7IH0KIAorICAgIExh
eW91dFVuaXQgYm9yZGVyQm94V2lkdGgoKSBjb25zdCB7IHJldHVybiBib3JkZXJMZWZ0KCkgKyBw
YWRkaW5nQm94V2lkdGgoKSArIGJvcmRlclJpZ2h0KCk7IH0KKyAgICBMYXlvdXRVbml0IG1hcmdp
bkJveFdpZHRoKCkgY29uc3QgeyByZXR1cm4gbWFyZ2luU3RhcnQoKSArIGJvcmRlckJveFdpZHRo
KCkgKyBtYXJnaW5FbmQoKTsgfQorCiAgICAgUmVjdCBtYXJnaW5Cb3goKSBjb25zdDsKICAgICBS
ZWN0IG5vbkNvbGxhcHNlZE1hcmdpbkJveCgpIGNvbnN0OwogCkBAIC0yNjQsMjQgKzIwNyw2IEBA
IHByaXZhdGU6CiB9OwogCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAotaW5saW5lIHZvaWQgQm94OjpS
ZWN0OjppbnZhbGlkYXRlUG9zaXRpb24oKQotewotICAgIGludmFsaWRhdGVUb3AoKTsKLSAgICBp
bnZhbGlkYXRlTGVmdCgpOwotfQotCi1pbmxpbmUgdm9pZCBCb3g6OlJlY3Q6OnNldEhhc1ZhbGlk
UG9zaXRpb24oKQotewotICAgIG1faGFzVmFsaWRUb3AgPSB0cnVlOwotICAgIG1faGFzVmFsaWRM
ZWZ0ID0gdHJ1ZTsKLX0KLQotaW5saW5lIHZvaWQgQm94OjpSZWN0OjpzZXRIYXNWYWxpZFNpemUo
KQotewotICAgIG1faGFzVmFsaWRXaWR0aCA9IHRydWU7Ci0gICAgbV9oYXNWYWxpZEhlaWdodCA9
IHRydWU7Ci19Ci0KIGlubGluZSB2b2lkIEJveDo6aW52YWxpZGF0ZU1hcmdpbigpCiB7CiAgICAg
bV9oYXNWYWxpZEhvcml6b250YWxNYXJnaW4gPSBmYWxzZTsKQEAgLTI4OSwxNjkgKzIxNCw2IEBA
IGlubGluZSB2b2lkIEJveDo6aW52YWxpZGF0ZU1hcmdpbigpCiB9CiAjZW5kaWYKIAotaW5saW5l
IExheW91dFVuaXQgQm94OjpSZWN0Ojp0b3AoKSBjb25zdAotewotICAgIEFTU0VSVChtX2hhc1Zh
bGlkVG9wKTsKLSAgICByZXR1cm4gbV9yZWN0LnkoKTsKLX0KLQotaW5saW5lIExheW91dFVuaXQg
Qm94OjpSZWN0OjpsZWZ0KCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9oYXNWYWxpZExlZnQpOwot
ICAgIHJldHVybiBtX3JlY3QueCgpOwotfQotCi1pbmxpbmUgTGF5b3V0VW5pdCBCb3g6OlJlY3Q6
OmJvdHRvbSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1faGFzVmFsaWRUb3AgJiYgbV9oYXNWYWxp
ZEhlaWdodCk7Ci0gICAgcmV0dXJuIG1fcmVjdC5tYXhZKCk7Ci19Ci0KLWlubGluZSBMYXlvdXRV
bml0IEJveDo6UmVjdDo6cmlnaHQoKSBjb25zdAotewotICAgIEFTU0VSVChtX2hhc1ZhbGlkTGVm
dCAmJiBtX2hhc1ZhbGlkV2lkdGgpOwotICAgIHJldHVybiBtX3JlY3QubWF4WCgpOwotfQotCi1p
bmxpbmUgTGF5b3V0UG9pbnQgQm94OjpSZWN0Ojp0b3BMZWZ0KCkgY29uc3QKLXsKLSAgICBBU1NF
UlQoaGFzVmFsaWRQb3NpdGlvbigpKTsKLSAgICByZXR1cm4gbV9yZWN0Lm1pblhNaW5ZQ29ybmVy
KCk7Ci19Ci0KLWlubGluZSBMYXlvdXRQb2ludCBCb3g6OlJlY3Q6OmJvdHRvbVJpZ2h0KCkgY29u
c3QKLXsKLSAgICBBU1NFUlQoaGFzVmFsaWRHZW9tZXRyeSgpKTsKLSAgICByZXR1cm4gbV9yZWN0
Lm1heFhNYXhZQ29ybmVyKCk7Ci19Ci0KLWlubGluZSBMYXlvdXRTaXplIEJveDo6UmVjdDo6c2l6
ZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGhhc1ZhbGlkU2l6ZSgpKTsKLSAgICByZXR1cm4gbV9y
ZWN0LnNpemUoKTsKLX0KLQotaW5saW5lIExheW91dFVuaXQgQm94OjpSZWN0Ojp3aWR0aCgpIGNv
bnN0Ci17Ci0gICAgQVNTRVJUKG1faGFzVmFsaWRXaWR0aCk7Ci0gICAgcmV0dXJuIG1fcmVjdC53
aWR0aCgpOwotfQotCi1pbmxpbmUgTGF5b3V0VW5pdCBCb3g6OlJlY3Q6OmhlaWdodCgpIGNvbnN0
Ci17Ci0gICAgQVNTRVJUKG1faGFzVmFsaWRIZWlnaHQpOwotICAgIHJldHVybiBtX3JlY3QuaGVp
Z2h0KCk7Ci19Ci0KLWlubGluZSB2b2lkIEJveDo6UmVjdDo6c2V0VG9wTGVmdChjb25zdCBMYXlv
dXRQb2ludCYgdG9wTGVmdCkKLXsKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgc2V0SGFzVmFs
aWRQb3NpdGlvbigpOwotI2VuZGlmCi0gICAgbV9yZWN0LnNldExvY2F0aW9uKHRvcExlZnQpOwot
fQotCi1pbmxpbmUgdm9pZCBCb3g6OlJlY3Q6OnNldFRvcChMYXlvdXRVbml0IHRvcCkKLXsKLSNp
ZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgbV9oYXNWYWxpZFRvcCA9IHRydWU7Ci0jZW5kaWYKLSAg
ICBtX3JlY3Quc2V0WSh0b3ApOwotfQotCi1pbmxpbmUgdm9pZCBCb3g6OlJlY3Q6OnNldExlZnQo
TGF5b3V0VW5pdCBsZWZ0KQotewotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICBtX2hhc1ZhbGlk
TGVmdCA9IHRydWU7Ci0jZW5kaWYKLSAgICBtX3JlY3Quc2V0WChsZWZ0KTsKLX0KLQotaW5saW5l
IHZvaWQgQm94OjpSZWN0OjpzZXRXaWR0aChMYXlvdXRVbml0IHdpZHRoKQotewotI2lmICFBU1NF
UlRfRElTQUJMRUQKLSAgICBtX2hhc1ZhbGlkV2lkdGggPSB0cnVlOwotI2VuZGlmCi0gICAgbV9y
ZWN0LnNldFdpZHRoKHdpZHRoKTsKLX0KLQotaW5saW5lIHZvaWQgQm94OjpSZWN0OjpzZXRIZWln
aHQoTGF5b3V0VW5pdCBoZWlnaHQpCi17Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIG1faGFz
VmFsaWRIZWlnaHQgPSB0cnVlOwotI2VuZGlmCi0gICAgbV9yZWN0LnNldEhlaWdodChoZWlnaHQp
OwotfQotCi1pbmxpbmUgdm9pZCBCb3g6OlJlY3Q6OnNldFNpemUoY29uc3QgTGF5b3V0U2l6ZSYg
c2l6ZSkKLXsKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgc2V0SGFzVmFsaWRTaXplKCk7Ci0j
ZW5kaWYKLSAgICBtX3JlY3Quc2V0U2l6ZShzaXplKTsKLX0KLQotaW5saW5lIHZvaWQgQm94OjpS
ZWN0OjpzaGlmdExlZnRUbyhMYXlvdXRVbml0IGxlZnQpCi17Ci0gICAgQVNTRVJUKG1faGFzVmFs
aWRMZWZ0KTsKLSAgICBtX3JlY3Quc2hpZnRYRWRnZVRvKGxlZnQpOwotfQotCi1pbmxpbmUgdm9p
ZCBCb3g6OlJlY3Q6OnNoaWZ0UmlnaHRUbyhMYXlvdXRVbml0IHJpZ2h0KQotewotICAgIEFTU0VS
VChtX2hhc1ZhbGlkTGVmdCAmJiBtX2hhc1ZhbGlkV2lkdGgpOwotICAgIG1fcmVjdC5zaGlmdE1h
eFhFZGdlVG8ocmlnaHQpOwotfQotCi1pbmxpbmUgdm9pZCBCb3g6OlJlY3Q6OnNoaWZ0VG9wVG8o
TGF5b3V0VW5pdCB0b3ApCi17Ci0gICAgQVNTRVJUKG1faGFzVmFsaWRUb3ApOwotICAgIG1fcmVj
dC5zaGlmdFlFZGdlVG8odG9wKTsKLX0KLQotaW5saW5lIHZvaWQgQm94OjpSZWN0OjpzaGlmdEJv
dHRvbVRvKExheW91dFVuaXQgYm90dG9tKQotewotICAgIEFTU0VSVChtX2hhc1ZhbGlkVG9wICYm
IG1faGFzVmFsaWRIZWlnaHQpOwotICAgIG1fcmVjdC5zaGlmdE1heFlFZGdlVG8oYm90dG9tKTsK
LX0KLQotaW5saW5lIHZvaWQgQm94OjpSZWN0Ojptb3ZlSG9yaXpvbnRhbGx5KExheW91dFVuaXQg
b2Zmc2V0KQotewotICAgIEFTU0VSVChtX2hhc1ZhbGlkTGVmdCk7Ci0gICAgbV9yZWN0Lm1vdmUo
b2Zmc2V0LCAwX2x1KTsKLX0KLQotaW5saW5lIHZvaWQgQm94OjpSZWN0Ojptb3ZlVmVydGljYWxs
eShMYXlvdXRVbml0IG9mZnNldCkKLXsKLSAgICBBU1NFUlQobV9oYXNWYWxpZFRvcCk7Ci0gICAg
bV9yZWN0Lm1vdmUoMF9sdSwgb2Zmc2V0KTsKLX0KLQotaW5saW5lIHZvaWQgQm94OjpSZWN0Ojpl
eHBhbmQoTGF5b3V0VW5pdCB3aWR0aCwgTGF5b3V0VW5pdCBoZWlnaHQpCi17Ci0gICAgQVNTRVJU
KGhhc1ZhbGlkR2VvbWV0cnkoKSk7Ci0gICAgbV9yZWN0LmV4cGFuZCh3aWR0aCwgaGVpZ2h0KTsK
LX0KLQotaW5saW5lIEJveDo6UmVjdCBCb3g6OlJlY3Q6OmNsb25lKCkgY29uc3QKLXsKLSAgICBS
ZWN0IHJlY3Q7Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIHJlY3QubV9oYXNWYWxpZFRvcCA9
IG1faGFzVmFsaWRUb3A7Ci0gICAgcmVjdC5tX2hhc1ZhbGlkTGVmdCA9IG1faGFzVmFsaWRMZWZ0
OwotICAgIHJlY3QubV9oYXNWYWxpZFdpZHRoID0gbV9oYXNWYWxpZFdpZHRoOwotICAgIHJlY3Qu
bV9oYXNWYWxpZEhlaWdodCAgPSBtX2hhc1ZhbGlkSGVpZ2h0OwotI2VuZGlmIAotICAgIHJlY3Qu
bV9yZWN0ID0gbV9yZWN0OwotICAgIHJldHVybiByZWN0OwotfQotCi1pbmxpbmUgQm94OjpSZWN0
OjpvcGVyYXRvciBMYXlvdXRSZWN0KCkgY29uc3QKLXsKLSAgICBBU1NFUlQoaGFzVmFsaWRHZW9t
ZXRyeSgpKTsgCi0gICAgcmV0dXJuIG1fcmVjdDsKLX0KLQogaW5saW5lIExheW91dFVuaXQgQm94
Ojp0b3AoKSBjb25zdAogewogICAgIEFTU0VSVChtX2hhc1ZhbGlkVG9wICYmIChtX2hhc0VzdGlt
YXRlZE1hcmdpbkJlZm9yZSB8fCBtX2hhc1ZhbGlkVmVydGljYWxNYXJnaW4pKTsKQEAgLTU2Niw3
ICszMjgsNyBAQCBpbmxpbmUgdm9pZCBCb3g6OnNldFBhZGRpbmcoT3B0aW9uYWw8TGF5b3V0OjpF
ZGdlcz4gcGFkZGluZykKICAgICBtX3BhZGRpbmcgPSBwYWRkaW5nOwogfQogCi1pbmxpbmUgQm94
OjpSZWN0IEJveDo6cmVjdFdpdGhNYXJnaW4oKSBjb25zdAoraW5saW5lIFJlY3QgQm94OjpyZWN0
V2l0aE1hcmdpbigpIGNvbnN0CiB7CiAgICAgYXV0byBtYXJnaW5BZnRlciA9IHRoaXMtPm1hcmdp
bkFmdGVyKCk7CiAgICAgaWYgKG1fdmVydGljYWxNYXJnaW4uY29sbGFwc2VkVmFsdWVzKCkuaXND
b2xsYXBzZWRUaHJvdWdoKQpAQCAtNTgwLDYgKzM0MiwxMiBAQCBpbmxpbmUgTGF5b3V0OjpVc2Vk
VmVydGljYWxNYXJnaW4gQm94Ojp2ZXJ0aWNhbE1hcmdpbigpIGNvbnN0CiAgICAgcmV0dXJuIG1f
dmVydGljYWxNYXJnaW47CiB9CiAKK2lubGluZSBMYXlvdXQ6OlVzZWRIb3Jpem9udGFsTWFyZ2lu
IEJveDo6aG9yaXpvbnRhbE1hcmdpbigpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1faGFzVmFsaWRI
b3Jpem9udGFsTWFyZ2luKTsKKyAgICByZXR1cm4gbV9ob3Jpem9udGFsTWFyZ2luOworfQorCiBp
bmxpbmUgTGF5b3V0VW5pdCBCb3g6Om1hcmdpbkJlZm9yZSgpIGNvbnN0CiB7CiAgICAgQVNTRVJU
KG1faGFzVmFsaWRWZXJ0aWNhbE1hcmdpbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheVJlY3QuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9k
aXNwbGF5dHJlZS9EaXNwbGF5UmVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcyYzg5N2VhYzQ5ODFmMjFkMDYw
ZGI0NWJjY2FmZjJiMmEyMzU2NGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheVJlY3QuaApAQCAtMCwwICsxLDI5NyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRF
WFQpCisKKyNpbmNsdWRlICJMYXlvdXRVbml0cy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIFJlbmRlclN0eWxlOworCituYW1lc3BhY2UgRGlzcGxheSB7CisKK2NsYXNzIFJlY3Qg
eworcHVibGljOgorICAgIFJlY3QoKSA9IGRlZmF1bHQ7CisgICAgUmVjdChMYXlvdXRVbml0IHRv
cCwgTGF5b3V0VW5pdCBsZWZ0LCBMYXlvdXRVbml0IHdpZHRoLCBMYXlvdXRVbml0IGhlaWdodCk7
CisgICAgCisgICAgTGF5b3V0VW5pdCB0b3AoKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IGxlZnQo
KSBjb25zdDsKKyAgICBMYXlvdXRQb2ludCB0b3BMZWZ0KCkgY29uc3Q7CisKKyAgICBMYXlvdXRV
bml0IGJvdHRvbSgpIGNvbnN0OworICAgIExheW91dFVuaXQgcmlnaHQoKSBjb25zdDsgICAgICAg
IAorICAgIExheW91dFBvaW50IGJvdHRvbVJpZ2h0KCkgY29uc3Q7CisKKyAgICBMYXlvdXRVbml0
IHdpZHRoKCkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBoZWlnaHQoKSBjb25zdDsKKyAgICBMYXlv
dXRTaXplIHNpemUoKSBjb25zdDsKKworICAgIHZvaWQgc2V0VG9wKExheW91dFVuaXQpOworICAg
IHZvaWQgc2V0TGVmdChMYXlvdXRVbml0KTsKKyAgICB2b2lkIHNldFRvcExlZnQoY29uc3QgTGF5
b3V0UG9pbnQmKTsKKyAgICB2b2lkIHNldFdpZHRoKExheW91dFVuaXQpOworICAgIHZvaWQgc2V0
SGVpZ2h0KExheW91dFVuaXQpOworICAgIHZvaWQgc2V0U2l6ZShjb25zdCBMYXlvdXRTaXplJik7
CisKKyAgICB2b2lkIHNoaWZ0TGVmdFRvKExheW91dFVuaXQpOworICAgIHZvaWQgc2hpZnRSaWdo
dFRvKExheW91dFVuaXQpOworICAgIHZvaWQgc2hpZnRUb3BUbyhMYXlvdXRVbml0KTsKKyAgICB2
b2lkIHNoaWZ0Qm90dG9tVG8oTGF5b3V0VW5pdCk7CisKKyAgICB2b2lkIG1vdmVIb3Jpem9udGFs
bHkoTGF5b3V0VW5pdCk7CisgICAgdm9pZCBtb3ZlVmVydGljYWxseShMYXlvdXRVbml0KTsKKwor
ICAgIHZvaWQgZXhwYW5kKExheW91dFVuaXQsIExheW91dFVuaXQpOworICAgIHZvaWQgZXhwYW5k
SG9yaXpvbnRhbGx5KExheW91dFVuaXQgZGVsdGEpIHsgZXhwYW5kKGRlbHRhLCAwKTsgfQorICAg
IHZvaWQgZXhwYW5kVmVydGljYWxseShMYXlvdXRVbml0IGRlbHRhKSB7IGV4cGFuZCgwLCBkZWx0
YSk7IH0KKyAgICBib29sIGludGVyc2VjdHMoY29uc3QgUmVjdCYgcmVjdCkgY29uc3QgeyByZXR1
cm4gbV9yZWN0LmludGVyc2VjdHMocmVjdCk7IH0KKworICAgIFJlY3QgY2xvbmUoKSBjb25zdDsK
KyAgICBvcGVyYXRvciBMYXlvdXRSZWN0KCkgY29uc3Q7CisKK3ByaXZhdGU6CisjaWYgIUFTU0VS
VF9ESVNBQkxFRAorICAgIHZvaWQgaW52YWxpZGF0ZVRvcCgpIHsgbV9oYXNWYWxpZFRvcCA9IGZh
bHNlOyB9CisgICAgdm9pZCBpbnZhbGlkYXRlTGVmdCgpIHsgbV9oYXNWYWxpZExlZnQgPSBmYWxz
ZTsgfQorICAgIHZvaWQgaW52YWxpZGF0ZVdpZHRoKCkgeyBtX2hhc1ZhbGlkV2lkdGggPSBmYWxz
ZTsgfQorICAgIHZvaWQgaW52YWxpZGF0ZUhlaWdodCgpIHsgbV9oYXNWYWxpZEhlaWdodCA9IGZh
bHNlOyB9CisgICAgdm9pZCBpbnZhbGlkYXRlUG9zaXRpb24oKTsKKworICAgIGJvb2wgaGFzVmFs
aWRQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faGFzVmFsaWRUb3AgJiYgbV9oYXNWYWxpZExl
ZnQ7IH0KKyAgICBib29sIGhhc1ZhbGlkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzVmFsaWRX
aWR0aCAmJiBtX2hhc1ZhbGlkSGVpZ2h0OyB9CisgICAgYm9vbCBoYXNWYWxpZEdlb21ldHJ5KCkg
Y29uc3QgeyByZXR1cm4gaGFzVmFsaWRQb3NpdGlvbigpICYmIGhhc1ZhbGlkU2l6ZSgpOyB9CisK
KyAgICB2b2lkIHNldEhhc1ZhbGlkUG9zaXRpb24oKTsKKyAgICB2b2lkIHNldEhhc1ZhbGlkU2l6
ZSgpOworCisgICAgYm9vbCBtX2hhc1ZhbGlkVG9wIHsgZmFsc2UgfTsKKyAgICBib29sIG1faGFz
VmFsaWRMZWZ0IHsgZmFsc2UgfTsKKyAgICBib29sIG1faGFzVmFsaWRXaWR0aCB7IGZhbHNlIH07
CisgICAgYm9vbCBtX2hhc1ZhbGlkSGVpZ2h0IHsgZmFsc2UgfTsKKyNlbmRpZgorICAgIExheW91
dFJlY3QgbV9yZWN0OworfTsKKworaW5saW5lIFJlY3Q6OlJlY3QoTGF5b3V0VW5pdCB0b3AsIExh
eW91dFVuaXQgbGVmdCwgTGF5b3V0VW5pdCB3aWR0aCwgTGF5b3V0VW5pdCBoZWlnaHQpCisgICAg
OiBtX3JlY3QobGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0KQoreworI2lmICFBU1NFUlRfRElTQUJM
RUQKKyAgICBtX2hhc1ZhbGlkVG9wID0gdHJ1ZTsKKyAgICBtX2hhc1ZhbGlkTGVmdCA9IHRydWU7
CisgICAgbV9oYXNWYWxpZFdpZHRoID0gdHJ1ZTsKKyAgICBtX2hhc1ZhbGlkSGVpZ2h0ID0gdHJ1
ZTsKKyNlbmRpZgorfQorCisjaWYgIUFTU0VSVF9ESVNBQkxFRAoraW5saW5lIHZvaWQgUmVjdDo6
aW52YWxpZGF0ZVBvc2l0aW9uKCkKK3sKKyAgICBpbnZhbGlkYXRlVG9wKCk7CisgICAgaW52YWxp
ZGF0ZUxlZnQoKTsKK30KKworaW5saW5lIHZvaWQgUmVjdDo6c2V0SGFzVmFsaWRQb3NpdGlvbigp
Cit7CisgICAgbV9oYXNWYWxpZFRvcCA9IHRydWU7CisgICAgbV9oYXNWYWxpZExlZnQgPSB0cnVl
OworfQorCitpbmxpbmUgdm9pZCBSZWN0OjpzZXRIYXNWYWxpZFNpemUoKQoreworICAgIG1faGFz
VmFsaWRXaWR0aCA9IHRydWU7CisgICAgbV9oYXNWYWxpZEhlaWdodCA9IHRydWU7Cit9CisjZW5k
aWYKKworaW5saW5lIExheW91dFVuaXQgUmVjdDo6dG9wKCkgY29uc3QKK3sKKyAgICBBU1NFUlQo
bV9oYXNWYWxpZFRvcCk7CisgICAgcmV0dXJuIG1fcmVjdC55KCk7Cit9CisKK2lubGluZSBMYXlv
dXRVbml0IFJlY3Q6OmxlZnQoKSBjb25zdAoreworICAgIEFTU0VSVChtX2hhc1ZhbGlkTGVmdCk7
CisgICAgcmV0dXJuIG1fcmVjdC54KCk7Cit9CisKK2lubGluZSBMYXlvdXRVbml0IFJlY3Q6OmJv
dHRvbSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1faGFzVmFsaWRUb3AgJiYgbV9oYXNWYWxpZEhl
aWdodCk7CisgICAgcmV0dXJuIG1fcmVjdC5tYXhZKCk7Cit9CisKK2lubGluZSBMYXlvdXRVbml0
IFJlY3Q6OnJpZ2h0KCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9oYXNWYWxpZExlZnQgJiYgbV9o
YXNWYWxpZFdpZHRoKTsKKyAgICByZXR1cm4gbV9yZWN0Lm1heFgoKTsKK30KKworaW5saW5lIExh
eW91dFBvaW50IFJlY3Q6OnRvcExlZnQoKSBjb25zdAoreworICAgIEFTU0VSVChoYXNWYWxpZFBv
c2l0aW9uKCkpOworICAgIHJldHVybiBtX3JlY3QubWluWE1pbllDb3JuZXIoKTsKK30KKworaW5s
aW5lIExheW91dFBvaW50IFJlY3Q6OmJvdHRvbVJpZ2h0KCkgY29uc3QKK3sKKyAgICBBU1NFUlQo
aGFzVmFsaWRHZW9tZXRyeSgpKTsKKyAgICByZXR1cm4gbV9yZWN0Lm1heFhNYXhZQ29ybmVyKCk7
Cit9CisKK2lubGluZSBMYXlvdXRTaXplIFJlY3Q6OnNpemUoKSBjb25zdAoreworICAgIEFTU0VS
VChoYXNWYWxpZFNpemUoKSk7CisgICAgcmV0dXJuIG1fcmVjdC5zaXplKCk7Cit9CisKK2lubGlu
ZSBMYXlvdXRVbml0IFJlY3Q6OndpZHRoKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9oYXNWYWxp
ZFdpZHRoKTsKKyAgICByZXR1cm4gbV9yZWN0LndpZHRoKCk7Cit9CisKK2lubGluZSBMYXlvdXRV
bml0IFJlY3Q6OmhlaWdodCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1faGFzVmFsaWRIZWlnaHQp
OworICAgIHJldHVybiBtX3JlY3QuaGVpZ2h0KCk7Cit9CisKK2lubGluZSB2b2lkIFJlY3Q6OnNl
dFRvcExlZnQoY29uc3QgTGF5b3V0UG9pbnQmIHRvcExlZnQpCit7CisjaWYgIUFTU0VSVF9ESVNB
QkxFRAorICAgIHNldEhhc1ZhbGlkUG9zaXRpb24oKTsKKyNlbmRpZgorICAgIG1fcmVjdC5zZXRM
b2NhdGlvbih0b3BMZWZ0KTsKK30KKworaW5saW5lIHZvaWQgUmVjdDo6c2V0VG9wKExheW91dFVu
aXQgdG9wKQoreworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBtX2hhc1ZhbGlkVG9wID0gdHJ1
ZTsKKyNlbmRpZgorICAgIG1fcmVjdC5zZXRZKHRvcCk7Cit9CisKK2lubGluZSB2b2lkIFJlY3Q6
OnNldExlZnQoTGF5b3V0VW5pdCBsZWZ0KQoreworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBt
X2hhc1ZhbGlkTGVmdCA9IHRydWU7CisjZW5kaWYKKyAgICBtX3JlY3Quc2V0WChsZWZ0KTsKK30K
KworaW5saW5lIHZvaWQgUmVjdDo6c2V0V2lkdGgoTGF5b3V0VW5pdCB3aWR0aCkKK3sKKyNpZiAh
QVNTRVJUX0RJU0FCTEVECisgICAgbV9oYXNWYWxpZFdpZHRoID0gdHJ1ZTsKKyNlbmRpZgorICAg
IG1fcmVjdC5zZXRXaWR0aCh3aWR0aCk7Cit9CisKK2lubGluZSB2b2lkIFJlY3Q6OnNldEhlaWdo
dChMYXlvdXRVbml0IGhlaWdodCkKK3sKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgbV9oYXNW
YWxpZEhlaWdodCA9IHRydWU7CisjZW5kaWYKKyAgICBtX3JlY3Quc2V0SGVpZ2h0KGhlaWdodCk7
Cit9CisKK2lubGluZSB2b2lkIFJlY3Q6OnNldFNpemUoY29uc3QgTGF5b3V0U2l6ZSYgc2l6ZSkK
K3sKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgc2V0SGFzVmFsaWRTaXplKCk7CisjZW5kaWYK
KyAgICBtX3JlY3Quc2V0U2l6ZShzaXplKTsKK30KKworaW5saW5lIHZvaWQgUmVjdDo6c2hpZnRM
ZWZ0VG8oTGF5b3V0VW5pdCBsZWZ0KQoreworICAgIEFTU0VSVChtX2hhc1ZhbGlkTGVmdCk7Cisg
ICAgbV9yZWN0LnNoaWZ0WEVkZ2VUbyhsZWZ0KTsKK30KKworaW5saW5lIHZvaWQgUmVjdDo6c2hp
ZnRSaWdodFRvKExheW91dFVuaXQgcmlnaHQpCit7CisgICAgQVNTRVJUKG1faGFzVmFsaWRMZWZ0
ICYmIG1faGFzVmFsaWRXaWR0aCk7CisgICAgbV9yZWN0LnNoaWZ0TWF4WEVkZ2VUbyhyaWdodCk7
Cit9CisKK2lubGluZSB2b2lkIFJlY3Q6OnNoaWZ0VG9wVG8oTGF5b3V0VW5pdCB0b3ApCit7Cisg
ICAgQVNTRVJUKG1faGFzVmFsaWRUb3ApOworICAgIG1fcmVjdC5zaGlmdFlFZGdlVG8odG9wKTsK
K30KKworaW5saW5lIHZvaWQgUmVjdDo6c2hpZnRCb3R0b21UbyhMYXlvdXRVbml0IGJvdHRvbSkK
K3sKKyAgICBBU1NFUlQobV9oYXNWYWxpZFRvcCAmJiBtX2hhc1ZhbGlkSGVpZ2h0KTsKKyAgICBt
X3JlY3Quc2hpZnRNYXhZRWRnZVRvKGJvdHRvbSk7Cit9CisKK2lubGluZSB2b2lkIFJlY3Q6Om1v
dmVIb3Jpem9udGFsbHkoTGF5b3V0VW5pdCBvZmZzZXQpCit7CisgICAgQVNTRVJUKG1faGFzVmFs
aWRMZWZ0KTsKKyAgICBtX3JlY3QubW92ZShMYXlvdXRTaXplIHsgb2Zmc2V0LCAwIH0pOworfQor
CitpbmxpbmUgdm9pZCBSZWN0Ojptb3ZlVmVydGljYWxseShMYXlvdXRVbml0IG9mZnNldCkKK3sK
KyAgICBBU1NFUlQobV9oYXNWYWxpZFRvcCk7CisgICAgbV9yZWN0Lm1vdmUoTGF5b3V0U2l6ZSB7
IDAsIG9mZnNldCB9KTsKK30KKworaW5saW5lIHZvaWQgUmVjdDo6ZXhwYW5kKExheW91dFVuaXQg
d2lkdGgsIExheW91dFVuaXQgaGVpZ2h0KQoreworICAgIEFTU0VSVChoYXNWYWxpZEdlb21ldHJ5
KCkpOworICAgIG1fcmVjdC5leHBhbmQod2lkdGgsIGhlaWdodCk7Cit9CisKK2lubGluZSBSZWN0
IFJlY3Q6OmNsb25lKCkgY29uc3QKK3sKKyAgICBSZWN0IHJlY3Q7CisjaWYgIUFTU0VSVF9ESVNB
QkxFRAorICAgIHJlY3QubV9oYXNWYWxpZFRvcCA9IG1faGFzVmFsaWRUb3A7CisgICAgcmVjdC5t
X2hhc1ZhbGlkTGVmdCA9IG1faGFzVmFsaWRMZWZ0OworICAgIHJlY3QubV9oYXNWYWxpZFdpZHRo
ID0gbV9oYXNWYWxpZFdpZHRoOworICAgIHJlY3QubV9oYXNWYWxpZEhlaWdodCAgPSBtX2hhc1Zh
bGlkSGVpZ2h0OworI2VuZGlmIAorICAgIHJlY3QubV9yZWN0ID0gbV9yZWN0OworICAgIHJldHVy
biByZWN0OworfQorCitpbmxpbmUgUmVjdDo6b3BlcmF0b3IgTGF5b3V0UmVjdCgpIGNvbnN0Cit7
CisgICAgQVNTRVJUKGhhc1ZhbGlkR2VvbWV0cnkoKSk7IAorICAgIHJldHVybiBtX3JlY3Q7Cit9
CisKK30KK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Rpc3Bs
YXl0cmVlL0Rpc3BsYXlSdW4uaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5dHJlZS9E
aXNwbGF5UnVuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjM5MjkwMzYwODNjNDBiMDM5ZjlkZWM0OTMzZjYxNDJh
NzRkYTFiMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5
dHJlZS9EaXNwbGF5UnVuLmgKQEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQorCisjaW5jbHVk
ZSAiSW5saW5lSXRlbS5oIgorI2luY2x1ZGUgIkxheW91dFVuaXQuaCIKKyNpbmNsdWRlICJUZXh0
RmxhZ3MuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIERpc3BsYXkgeworCitz
dHJ1Y3QgUnVuIHsKKyAgICBzdHJ1Y3QgVGV4dENvbnRleHQgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgVGV4dENvbnRleHQodW5zaWduZWQgcG9zaXRpb24sIHVuc2lnbmVkIGxlbmd0aCk7CisKKyAg
ICAgICAgdW5zaWduZWQgc3RhcnQoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0OyB9CisgICAgICAg
IHVuc2lnbmVkIGVuZCgpIGNvbnN0IHsgcmV0dXJuIHN0YXJ0KCkgKyBsZW5ndGgoKTsgfQorICAg
ICAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQorCisgICAg
ICAgIHZvaWQgZXhwYW5kKHVuc2lnbmVkIGxlbmd0aCkgeyBtX2xlbmd0aCArPSBsZW5ndGg7IH0K
KworICAgIHByaXZhdGU6CisgICAgICAgIHVuc2lnbmVkIG1fc3RhcnQ7CisgICAgICAgIHVuc2ln
bmVkIG1fbGVuZ3RoOworICAgIH07CisKKyAgICBSdW4oUmVjdCBsb2dpY2FsUmVjdCk7CisgICAg
UnVuKFJlY3QgbG9naWNhbFJlY3QsIFRleHRDb250ZXh0KTsKKyAgICBSdW4oY29uc3QgUnVuJik7
CisKKyAgICBMYXlvdXRQb2ludCBsb2dpY2FsVG9wTGVmdCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9n
aWNhbFJlY3QudG9wTGVmdCgpOyB9CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdCgpIGNvbnN0
IHsgcmV0dXJuIG1fbG9naWNhbFJlY3QubGVmdCgpOyB9CisgICAgTGF5b3V0VW5pdCBsb2dpY2Fs
UmlnaHQoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxSZWN0LnJpZ2h0KCk7IH0KKyAgICBMYXlv
dXRVbml0IGxvZ2ljYWxUb3AoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxSZWN0LnRvcCgpOyB9
CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsQm90dG9tKCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2Fs
UmVjdC5ib3R0b20oKTsgfQorCisgICAgTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgoKSBjb25zdCB7
IHJldHVybiBtX2xvZ2ljYWxSZWN0LndpZHRoKCk7IH0KKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxI
ZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxSZWN0LmhlaWdodCgpOyB9CisKKyAgICB2
b2lkIHNldExvZ2ljYWxXaWR0aChMYXlvdXRVbml0IHdpZHRoKSB7IG1fbG9naWNhbFJlY3Quc2V0
V2lkdGgod2lkdGgpOyB9CisgICAgdm9pZCBzZXRMb2dpY2FsVG9wKExheW91dFVuaXQgbG9naWNh
bFRvcCkgeyBtX2xvZ2ljYWxSZWN0LnNldFRvcChsb2dpY2FsVG9wKTsgfQorICAgIHZvaWQgc2V0
TG9naWNhbExlZnQoTGF5b3V0VW5pdCBsb2dpY2FsTGVmdCkgeyBtX2xvZ2ljYWxSZWN0LnNldExl
ZnQobG9naWNhbExlZnQpOyB9CisgICAgdm9pZCBzZXRMb2dpY2FsUmlnaHQoTGF5b3V0VW5pdCBs
b2dpY2FsUmlnaHQpIHsgbV9sb2dpY2FsUmVjdC5zaGlmdFJpZ2h0VG8obG9naWNhbFJpZ2h0KTsg
fQorICAgIHZvaWQgbW92ZVZlcnRpY2FsbHkoTGF5b3V0VW5pdCBkZWx0YSkgeyBtX2xvZ2ljYWxS
ZWN0Lm1vdmVWZXJ0aWNhbGx5KGRlbHRhKTsgfQorICAgIHZvaWQgbW92ZUhvcml6b250YWxseShM
YXlvdXRVbml0IGRlbHRhKSB7IG1fbG9naWNhbFJlY3QubW92ZUhvcml6b250YWxseShkZWx0YSk7
IH0KKyAgICB2b2lkIGV4cGFuZFZlcnRpY2FsbHkoTGF5b3V0VW5pdCBkZWx0YSkgeyBtX2xvZ2lj
YWxSZWN0LmV4cGFuZCgwLCBkZWx0YSk7IH0KKyAgICB2b2lkIGV4cGFuZEhvcml6b250YWxseShM
YXlvdXRVbml0IGRlbHRhKSB7IG1fbG9naWNhbFJlY3QuZXhwYW5kKGRlbHRhLCAwKTsgfQorCisg
ICAgdm9pZCBzZXRUZXh0Q29udGV4dChUZXh0Q29udGV4dCB0ZXh0Q29udGV4dCkgeyBtX3RleHRD
b250ZXh0LmVtcGxhY2UodGV4dENvbnRleHQpOyB9CisgICAgT3B0aW9uYWw8VGV4dENvbnRleHQ+
JiB0ZXh0Q29udGV4dCgpIHsgcmV0dXJuIG1fdGV4dENvbnRleHQ7IH0KKyAgICBPcHRpb25hbDxU
ZXh0Q29udGV4dD4gdGV4dENvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX3RleHRDb250ZXh0OyB9
CisKK3ByaXZhdGU6CisgICAgUmVjdCBtX2xvZ2ljYWxSZWN0OworICAgIE9wdGlvbmFsPFRleHRD
b250ZXh0PiBtX3RleHRDb250ZXh0OworfTsKKworaW5saW5lIFJ1bjo6UnVuKFJlY3QgbG9naWNh
bFJlY3QpCisgICAgOiBtX2xvZ2ljYWxSZWN0KGxvZ2ljYWxSZWN0KQoreworfQorCitpbmxpbmUg
UnVuOjpSdW4oUmVjdCBsb2dpY2FsUmVjdCwgVGV4dENvbnRleHQgdGV4dENvbnRleHQpCisgICAg
OiBtX2xvZ2ljYWxSZWN0KGxvZ2ljYWxSZWN0KQorICAgICwgbV90ZXh0Q29udGV4dCh0ZXh0Q29u
dGV4dCkKK3sKK30KKworaW5saW5lIFJ1bjo6VGV4dENvbnRleHQ6OlRleHRDb250ZXh0KHVuc2ln
bmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgpCisgICAgOiBtX3N0YXJ0KHN0YXJ0KQorICAgICwg
bV9sZW5ndGgobGVuZ3RoKQoreworfQorCitpbmxpbmUgUnVuOjpSdW4oY29uc3QgUnVuJiBvdGhl
cikKK3sKKyAgICBtX2xvZ2ljYWxSZWN0ID0gb3RoZXIubV9sb2dpY2FsUmVjdDsKKyAgICBtX3Rl
eHRDb250ZXh0ID0gb3RoZXIubV90ZXh0Q29udGV4dDsKK30KKworfQorfQorI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZmxvYXRzL0Zsb2F0QXZvaWRlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvZmxvYXRzL0Zsb2F0QXZvaWRlci5jcHAKaW5kZXggMTUxZDg4
ZTI2N2I2YjA1MDYwZGI2NDMzNTMyOWNkMGExMDM4MWEwNy4uODcwY2ZmNWZjZjNkMjJkYTM1NmY1
N2FiZTIzMDdlYTUyZDQ4ZGJmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zs
b2F0cy9GbG9hdEF2b2lkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mbG9hdHMv
RmxvYXRBdm9pZGVyLmNwcApAQCAtMTEzLDcgKzExMyw3IEBAIGJvb2wgRmxvYXRBdm9pZGVyOjpv
dmVyZmxvd3NDb250YWluaW5nQmxvY2soKSBjb25zdAogICAgIHJldHVybiBjb250YWluaW5nQmxv
Y2tDb250ZW50Qm94UmlnaHQgPCByaWdodDsKIH0KIAotRGlzcGxheTo6Qm94OjpSZWN0IEZsb2F0
QXZvaWRlcjo6cmVjdEluQ29udGFpbmluZ0Jsb2NrKCkgY29uc3QKK0Rpc3BsYXk6OlJlY3QgRmxv
YXRBdm9pZGVyOjpyZWN0SW5Db250YWluaW5nQmxvY2soKSBjb25zdAogewogICAgIC8vIEZyb20g
Zm9ybWF0dGluZyByb290IGNvb3JkaW5hdGUgc3lzdGVtIGJhY2sgdG8gY29udGFpbmluZyBibG9j
aydzLgogICAgIGlmIChsYXlvdXRCb3goKS5jb250YWluaW5nQmxvY2soKSA9PSAmZmxvYXRpbmdT
dGF0ZSgpLnJvb3QoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mbG9hdHMv
RmxvYXRBdm9pZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZmxvYXRzL0Zsb2F0QXZvaWRl
ci5oCmluZGV4IDJjMzIzZGQ4MGY2NjZmODczZDU2ZTNmNDVjYWEzMWRhODliMGY0ZWQuLjZlZDlk
NDNkM2JmZmFiOTNhMGQ4OGQ4NjcxZjRlODA3YjAyMzUxYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9mbG9hdHMvRmxvYXRBdm9pZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2Zsb2F0cy9GbG9hdEF2b2lkZXIuaApAQCAtNDYsOCArNDYsOCBAQCBwdWJsaWM6CiAg
ICAgRmxvYXRBdm9pZGVyKGNvbnN0IEJveCYsIGNvbnN0IEZsb2F0aW5nU3RhdGUmLCBjb25zdCBM
YXlvdXRTdGF0ZSYpOwogICAgIHZpcnR1YWwgfkZsb2F0QXZvaWRlcigpID0gZGVmYXVsdDsKIAot
ICAgIHZpcnR1YWwgRGlzcGxheTo6Qm94OjpSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX2Fi
c29sdXRlRGlzcGxheUJveC5yZWN0KCk7IH0KLSAgICBEaXNwbGF5OjpCb3g6OlJlY3QgcmVjdElu
Q29udGFpbmluZ0Jsb2NrKCkgY29uc3Q7CisgICAgdmlydHVhbCBEaXNwbGF5OjpSZWN0IHJlY3Qo
KSBjb25zdCB7IHJldHVybiBtX2Fic29sdXRlRGlzcGxheUJveC5yZWN0KCk7IH0KKyAgICBEaXNw
bGF5OjpSZWN0IHJlY3RJbkNvbnRhaW5pbmdCbG9jaygpIGNvbnN0OwogCiAgICAgc3RydWN0IEhv
cml6b250YWxDb25zdHJhaW50cyB7CiAgICAgICAgIE9wdGlvbmFsPFBvc2l0aW9uSW5Db250ZXh0
Um9vdD4gbGVmdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mbG9hdHMvRmxv
YXRCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zsb2F0cy9GbG9hdEJveC5jcHAKaW5k
ZXggYmViNzU3ZTMyNzE0Y2I0ZTllN2ZjNTI4MGM2N2VmOTQwOWViNWFjZC4uYjJlODZjMTUyMTY3
YzNlYTIzZGE3NDk4YzY3N2ZmNDQ5M2ZmZDhlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2Zsb2F0cy9GbG9hdEJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zs
b2F0cy9GbG9hdEJveC5jcHAKQEAgLTQxLDcgKzQxLDcgQEAgRmxvYXRCb3g6OkZsb2F0Qm94KGNv
bnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBGbG9hdGluZ1N0YXRlJiBmbG9hdGluZ1N0YXRlLCBj
b24KICAgICBkaXNwbGF5Qm94KCkuc2V0VG9wTGVmdCh7IGluaXRpYWxIb3Jpem9udGFsUG9zaXRp
b24oKSwgaW5pdGlhbFZlcnRpY2FsUG9zaXRpb24oKSB9KTsKIH0KIAotRGlzcGxheTo6Qm94OjpS
ZWN0IEZsb2F0Qm94OjpyZWN0KCkgY29uc3QKK0Rpc3BsYXk6OlJlY3QgRmxvYXRCb3g6OnJlY3Qo
KSBjb25zdAogewogICAgIGF1dG8gcmVjdCA9IGRpc3BsYXlCb3goKS5yZWN0KCk7CiAgICAgcmV0
dXJuIHsgcmVjdC50b3AoKSAtIG1hcmdpbkJlZm9yZSgpLCByZWN0LmxlZnQoKSAtIG1hcmdpblN0
YXJ0KCksIG1hcmdpblN0YXJ0KCkgKyByZWN0LndpZHRoKCkgKyBtYXJnaW5FbmQoKSwgbWFyZ2lu
QmVmb3JlKCkgKyByZWN0LmhlaWdodCgpICsgbWFyZ2luQWZ0ZXIoKSB9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2Zsb2F0cy9GbG9hdEJveC5oIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2Zsb2F0cy9GbG9hdEJveC5oCmluZGV4IDJlZGNhZTg4ZDcyYzNmYzExOGQ0NDhhMTg5
ZWNlMDAxZjNlZTAwNjIuLjk3ZDIxNTA3NWJlZDE4NGUzOGFhZmQ0ZDE3MzA0NTI3YjVhMDBlMDAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mbG9hdHMvRmxvYXRCb3guaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZmxvYXRzL0Zsb2F0Qm94LmgKQEAgLTQzLDcgKzQzLDcg
QEAgY2xhc3MgRmxvYXRCb3ggOiBwdWJsaWMgRmxvYXRBdm9pZGVyIHsKIHB1YmxpYzoKICAgICBG
bG9hdEJveChjb25zdCBCb3gmLCBjb25zdCBGbG9hdGluZ1N0YXRlJiwgY29uc3QgTGF5b3V0U3Rh
dGUmKTsKIAotICAgIERpc3BsYXk6OkJveDo6UmVjdCByZWN0KCkgY29uc3QgZmluYWw7CisgICAg
RGlzcGxheTo6UmVjdCByZWN0KCkgY29uc3QgZmluYWw7CiAKIHByaXZhdGU6CiAgICAgYm9vbCBp
c0xlZnRBbGlnbmVkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbGF5b3V0Qm94KCkuaXNMZWZ0Rmxv
YXRpbmdQb3NpdGlvbmVkKCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9m
bG9hdHMvRmxvYXRpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mbG9hdHMv
RmxvYXRpbmdDb250ZXh0LmNwcAppbmRleCAwOTVhZjlmMDhkYzgxODhmNjc3ZGU2MGYyMTU5Nzlj
MGUyNTA0YjM0Li45NDk1ZDMzMDg0MTYyZjYxMmNiYTg1Y2Y5MzhkNTc3MzlkNmNhNzI3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZmxvYXRzL0Zsb2F0aW5nQ29udGV4dC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zsb2F0cy9GbG9hdGluZ0NvbnRleHQuY3BwCkBA
IC03NCw3ICs3NCw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVy
biBtX2Zsb2F0UGFpci5pc0VtcHR5KCk7IH0KICAgICBjb25zdCBGbG9hdGluZ1N0YXRlOjpGbG9h
dEl0ZW0qIGxlZnQoKSBjb25zdDsKICAgICBjb25zdCBGbG9hdGluZ1N0YXRlOjpGbG9hdEl0ZW0q
IHJpZ2h0KCkgY29uc3Q7Ci0gICAgYm9vbCBpbnRlcnNlY3RzKGNvbnN0IERpc3BsYXk6OkJveDo6
UmVjdCYpIGNvbnN0OworICAgIGJvb2wgaW50ZXJzZWN0cyhjb25zdCBEaXNwbGF5OjpSZWN0Jikg
Y29uc3Q7CiAgICAgUG9zaXRpb25JbkNvbnRleHRSb290IHZlcnRpY2FsQ29uc3RyYWludCgpIGNv
bnN0IHsgcmV0dXJuIG1fdmVydGljYWxQb3NpdGlvbjsgfQogICAgIEZsb2F0QXZvaWRlcjo6SG9y
aXpvbnRhbENvbnN0cmFpbnRzIGhvcml6b250YWxDb25zdHJhaW50cygpIGNvbnN0OwogICAgIFBv
c2l0aW9uSW5Db250ZXh0Um9vdCBib3R0b20oKSBjb25zdDsKQEAgLTM3MCw3ICszNzAsNyBAQCBj
b25zdCBGbG9hdGluZ1N0YXRlOjpGbG9hdEl0ZW0qIEZsb2F0UGFpcjo6cmlnaHQoKSBjb25zdAog
ICAgIHJldHVybiAmbV9mbG9hdHNbKm1fZmxvYXRQYWlyLnJpZ2h0XTsKIH0KIAotYm9vbCBGbG9h
dFBhaXI6OmludGVyc2VjdHMoY29uc3QgRGlzcGxheTo6Qm94OjpSZWN0JiBmbG9hdEF2b2lkZXJS
ZWN0KSBjb25zdAorYm9vbCBGbG9hdFBhaXI6OmludGVyc2VjdHMoY29uc3QgRGlzcGxheTo6UmVj
dCYgZmxvYXRBdm9pZGVyUmVjdCkgY29uc3QKIHsKICAgICBhdXRvIGludGVyc2VjdHMgPSBbJl0o
YXV0byogZmxvYXRpbmcpIHsKICAgICAgICAgcmV0dXJuIGZsb2F0aW5nICYmIGZsb2F0aW5nLT5y
ZWN0V2l0aE1hcmdpbigpLmludGVyc2VjdHMoZmxvYXRBdm9pZGVyUmVjdCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZmxvYXRzL0Zsb2F0aW5nU3RhdGUuaCBiL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9mbG9hdHMvRmxvYXRpbmdTdGF0ZS5oCmluZGV4IDBlZmFlODRkNzNiNWFj
MjkzM2ZlNTE1ODk2YmRhYTQyZjI1YTg4ZGEuLmUxY2I4ZDIwZjg1NzllNzU5NzA2ZTFlOTEyYWMz
Yjc1ZTRiMjlkNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mbG9hdHMvRmxv
YXRpbmdTdGF0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mbG9hdHMvRmxvYXRpbmdT
dGF0ZS5oCkBAIC03NCw3ICs3NCw3IEBAIHB1YmxpYzoKICAgICAgICAgYm9vbCBpc0xlZnRQb3Np
dGlvbmVkKCkgY29uc3QgeyByZXR1cm4gbV9sYXlvdXRCb3gtPmlzTGVmdEZsb2F0aW5nUG9zaXRp
b25lZCgpOyB9CiAgICAgICAgIGJvb2wgaXNEZXNjZW5kYW50T2ZGb3JtYXR0aW5nUm9vdChjb25z
dCBCb3gmKSBjb25zdDsKIAotICAgICAgICBEaXNwbGF5OjpCb3g6OlJlY3QgcmVjdFdpdGhNYXJn
aW4oKSBjb25zdCB7IHJldHVybiBtX2Fic29sdXRlRGlzcGxheUJveC5yZWN0V2l0aE1hcmdpbigp
OyB9CisgICAgICAgIERpc3BsYXk6OlJlY3QgcmVjdFdpdGhNYXJnaW4oKSBjb25zdCB7IHJldHVy
biBtX2Fic29sdXRlRGlzcGxheUJveC5yZWN0V2l0aE1hcmdpbigpOyB9CiAgICAgICAgIFBvc2l0
aW9uSW5Db250ZXh0Um9vdCBib3R0b20oKSBjb25zdCB7IHJldHVybiB7IG1fYWJzb2x1dGVEaXNw
bGF5Qm94LmJvdHRvbSgpIH07IH0KIAogICAgIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0
aW5nQ29udGV4dC5jcHAKaW5kZXggZTNjMTUzNmRjZDMyYTFlZmVkODEyOGQzMzJiMTE4ZTI4YmRk
OWU3Mi4uNDgzYjM3ZGZjZTY5NWJlZTNjYmUzMjBkYzc2ODVlOTQ3MGQwZmI0ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5n
L0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcApAQCAtMzAsNyArMzAsNyBAQAogCiAjaW5jbHVk
ZSAiSW5saW5lRm9ybWF0dGluZ1N0YXRlLmgiCiAjaW5jbHVkZSAiSW5saW5lTGluZUJyZWFrZXIu
aCIKLSNpbmNsdWRlICJJbmxpbmVSdW5Qcm92aWRlci5oIgorI2luY2x1ZGUgIklubGluZVRleHRJ
dGVtLmgiCiAjaW5jbHVkZSAiTGF5b3V0Qm94LmgiCiAjaW5jbHVkZSAiTGF5b3V0Q29udGFpbmVy
LmgiCiAjaW5jbHVkZSAiTGF5b3V0SW5saW5lQm94LmgiCkBAIC03NywxOCArNzcsMjMgQEAgdm9p
ZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0KCkgY29uc3QKICAgICB3aGlsZSAobGF5
b3V0Qm94KSB7CiAgICAgICAgIGlmIChsYXlvdXRCb3gtPmVzdGFibGlzaGVzRm9ybWF0dGluZ0Nv
bnRleHQoKSkKICAgICAgICAgICAgIGxheW91dEZvcm1hdHRpbmdDb250ZXh0Um9vdCgqbGF5b3V0
Qm94LCB1c2VkVmFsdWVzKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8Q29udGFpbmVyPigqbGF5b3V0
Qm94KSkgewotICAgICAgICAgICAgYXV0byYgaW5saW5lQ29udGFpbmVyID0gZG93bmNhc3Q8SW5s
aW5lQ29udGFpbmVyPigqbGF5b3V0Qm94KTsKLSAgICAgICAgICAgIGNvbXB1dGVNYXJnaW4oaW5s
aW5lQ29udGFpbmVyLCB1c2VkVmFsdWVzKTsKLSAgICAgICAgICAgIGNvbXB1dGVCb3JkZXJBbmRQ
YWRkaW5nKGlubGluZUNvbnRhaW5lciwgdXNlZFZhbHVlcyk7Ci0gICAgICAgIH0gZWxzZSBpZiAo
bGF5b3V0Qm94LT5pc1JlcGxhY2VkKCkpCisgICAgICAgIGVsc2UgaWYgKGlzPENvbnRhaW5lcj4o
KmxheW91dEJveCkpCisgICAgICAgICAgICBjb21wdXRlTWFyZ2luQm9yZGVyQW5kUGFkZGluZ0Zv
cklubGluZUNvbnRhaW5lcihkb3duY2FzdDxJbmxpbmVDb250YWluZXI+KCpsYXlvdXRCb3gpLCB1
c2VkVmFsdWVzKTsKKyAgICAgICAgZWxzZSBpZiAobGF5b3V0Qm94LT5pc1JlcGxhY2VkKCkpCiAg
ICAgICAgICAgICBjb21wdXRlV2lkdGhBbmRIZWlnaHRGb3JSZXBsYWNlZElubGluZUJveCgqbGF5
b3V0Qm94LCB1c2VkVmFsdWVzKTsKKyAgICAgICAgZWxzZSBpZiAoaXM8SW5saW5lQm94PigqbGF5
b3V0Qm94KSkKKyAgICAgICAgICAgIGluaXRpYWxpemVNYXJnaW5Cb3JkZXJBbmRQYWRkaW5nRm9y
R2VuZXJpY0lubGluZUJveChkb3duY2FzdDxJbmxpbmVCb3g+KCpsYXlvdXRCb3gpKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGxheW91
dEJveCA9IG5leHRJblByZU9yZGVyKCpsYXlvdXRCb3gsIHJvb3QpOwogICAgIH0KIAotICAgIElu
bGluZVJ1blByb3ZpZGVyIGlubGluZVJ1blByb3ZpZGVyOwotICAgIGNvbGxlY3RJbmxpbmVDb250
ZW50KGlubGluZVJ1blByb3ZpZGVyKTsKLSAgICBMaW5lTGF5b3V0KCp0aGlzKS5sYXlvdXQoaW5s
aW5lUnVuUHJvdmlkZXIpOworICAgIC8vIEZJWE1FOiBUaGlzIGlzIHN1Y2ggYSB3YXN0ZSB3aGVu
IGludHJpbnNpYyB3aWR0aCBjb21wdXRhdGlvbiBhbHJlYWR5IGNvbGxlY3RlZCB0aGUgaW5saW5l
IGl0ZW1zLgorICAgIGZvcm1hdHRpbmdTdGF0ZSgpLmlubGluZUl0ZW1zKCkuY2xlYXIoKTsKKyAg
ICBmb3JtYXR0aW5nU3RhdGUoKS5pbmxpbmVSdW5zKCkuY2xlYXIoKTsKKworICAgIGNvbGxlY3RJ
bmxpbmVDb250ZW50KCk7CisgICAgTGluZUxheW91dCgqdGhpcykubGF5b3V0KCk7CiAgICAgTE9H
X1dJVEhfU1RSRUFNKEZvcm1hdHRpbmdDb250ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIltFbmRdIC0+
IGlubGluZSBmb3JtYXR0aW5nIGNvbnRleHQgLT4gZm9ybWF0dGluZyByb290KCIgPDwgJnJvb3Qg
PDwgIikiKTsKIH0KIApAQCAtMTIwLDMwICsxMjUsMzAgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5n
Q29udGV4dDo6Y29tcHV0ZUludHJpbnNpY1dpZHRoQ29uc3RyYWludHMoKSBjb25zdAogICAgICAg
ICAgICAgICAgIGNvbXB1dGVXaWR0aEFuZE1hcmdpbigqbGF5b3V0Qm94LCB1c2VkVmFsdWVzKTsK
ICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIC8vIFNpbXBsZSBpbmxpbmUgY29u
dGFpbmVyIHdpdGggbm8gaW50cmluc2ljIHdpZHRoIDxzcGFuPi4KLSAgICAgICAgICAgICAgICBj
b21wdXRlTWFyZ2luKCpsYXlvdXRCb3gsIHVzZWRWYWx1ZXMpOworICAgICAgICAgICAgICAgIGNv
bXB1dGVIb3Jpem9udGFsTWFyZ2luKCpsYXlvdXRCb3gsIHVzZWRWYWx1ZXMpOwogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgICAgIGxheW91dEJveCA9IG5leHRJblByZU9yZGVyKCpsYXlv
dXRCb3gsIHJvb3QpOwogICAgIH0KIAotICAgIElubGluZVJ1blByb3ZpZGVyIGlubGluZVJ1blBy
b3ZpZGVyOwotICAgIGNvbGxlY3RJbmxpbmVDb250ZW50KGlubGluZVJ1blByb3ZpZGVyKTsKKyAg
ICBjb2xsZWN0SW5saW5lQ29udGVudCgpOwogCiAgICAgYXV0byBtYXhpbXVtTGluZVdpZHRoID0g
WyZdKGF1dG8gYXZhaWxhYmxlV2lkdGgpIHsKLSAgICAgICAgTGF5b3V0VW5pdCBtYXhDb250ZW50
TG9naWNhbFJpZ2h0OwotICAgICAgICBhdXRvIGxpbmVCcmVha2VyID0gSW5saW5lTGluZUJyZWFr
ZXIgeyBsYXlvdXRTdGF0ZSwgZm9ybWF0dGluZ1N0YXRlKCkuaW5saW5lQ29udGVudCgpLCBpbmxp
bmVSdW5Qcm92aWRlci5ydW5zKCkgfTsKLSAgICAgICAgTGF5b3V0VW5pdCBsaW5lTG9naWNhbFJp
Z2h0OwotCiAgICAgICAgIC8vIFN3aXRjaCB0byB0aGUgbWluL21heCBmb3JtYXR0aW5nIHJvb3Qg
d2lkdGggdmFsdWVzIGJlZm9yZSBmb3JtYXR0aW5nIHRoZSBsaW5lcy4KICAgICAgICAgZm9yIChh
dXRvKiBmb3JtYXR0aW5nUm9vdCA6IGZvcm1hdHRpbmdDb250ZXh0Um9vdExpc3QpIHsKICAgICAg
ICAgICAgIGF1dG8gaW50cmluc2ljV2lkdGhzID0gbGF5b3V0U3RhdGUuZm9ybWF0dGluZ1N0YXRl
Rm9yQm94KCpmb3JtYXR0aW5nUm9vdCkuaW50cmluc2ljV2lkdGhDb25zdHJhaW50cygqZm9ybWF0
dGluZ1Jvb3QpOwogICAgICAgICAgICAgbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJv
eCgqZm9ybWF0dGluZ1Jvb3QpLnNldENvbnRlbnRCb3hXaWR0aChhdmFpbGFibGVXaWR0aCA/IGlu
dHJpbnNpY1dpZHRocy0+bWF4aW11bSA6IGludHJpbnNpY1dpZHRocy0+bWluaW11bSk7CiAgICAg
ICAgIH0KKyAgICAgICAgTGF5b3V0VW5pdCBtYXhDb250ZW50TG9naWNhbFJpZ2h0OworICAgICAg
ICBMYXlvdXRVbml0IGxpbmVMb2dpY2FsUmlnaHQ7CiAKLSAgICAgICAgd2hpbGUgKGF1dG8gcnVu
ID0gbGluZUJyZWFrZXIubmV4dFJ1bihsaW5lTG9naWNhbFJpZ2h0LCBhdmFpbGFibGVXaWR0aCwg
IWxpbmVMb2dpY2FsUmlnaHQpKSB7Ci0gICAgICAgICAgICBpZiAocnVuLT5wb3NpdGlvbiA9PSBJ
bmxpbmVMaW5lQnJlYWtlcjo6UnVuOjpQb3NpdGlvbjo6TGluZUJlZ2luKQorICAgICAgICBMaW5l
QnJlYWtlciBsaW5lQnJlYWtlcihsYXlvdXRTdGF0ZSk7CisgICAgICAgIGF1dG8mIGlubGluZUNv
bnRlbnQgPSBmb3JtYXR0aW5nU3RhdGUoKS5pbmxpbmVJdGVtcygpOworICAgICAgICBmb3IgKGF1
dG8mIGlubGluZUl0ZW0gOiBpbmxpbmVDb250ZW50KSB7CisgICAgICAgICAgICBhdXRvIGJyZWFr
aW5nQ29udGV4dCA9IGxpbmVCcmVha2VyLmJyZWFraW5nQ29udGV4dCgqaW5saW5lSXRlbSwgeyBh
dmFpbGFibGVXaWR0aCwgbGluZUxvZ2ljYWxSaWdodCwgIWxpbmVMb2dpY2FsUmlnaHQgfSk7Cisg
ICAgICAgICAgICBpZiAoYnJlYWtpbmdDb250ZXh0LmJyZWFraW5nQmVoYXZpb3IgPT0gTGluZUJy
ZWFrZXI6OkJyZWFraW5nQmVoYXZpb3I6OldyYXApCiAgICAgICAgICAgICAgICAgbGluZUxvZ2lj
YWxSaWdodCA9IDA7Ci0gICAgICAgICAgICBsaW5lTG9naWNhbFJpZ2h0ICs9IHJ1bi0+d2lkdGg7
CisgICAgICAgICAgICBsaW5lTG9naWNhbFJpZ2h0ICs9IGlubGluZUl0ZW0tPndpZHRoKCk7CiAK
ICAgICAgICAgICAgIG1heENvbnRlbnRMb2dpY2FsUmlnaHQgPSBzdGQ6Om1heChtYXhDb250ZW50
TG9naWNhbFJpZ2h0LCBsaW5lTG9naWNhbFJpZ2h0KTsKICAgICAgICAgfQpAQCAtMTU0LDIyICsx
NTksMzQgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUludHJpbnNpY1dp
ZHRoQ29uc3RyYWludHMoKSBjb25zdAogICAgIGxheW91dFN0YXRlLmZvcm1hdHRpbmdTdGF0ZUZv
ckJveChyb290KS5zZXRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKHJvb3QsIGludHJpbnNpY1dp
ZHRoQ29uc3RyYWludHMpOwogfQogCi12b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21w
dXRlSW50cmluc2ljV2lkdGhGb3JGbG9hdEJveChjb25zdCBCb3gmIGxheW91dEJveCkgY29uc3QK
K3ZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmluaXRpYWxpemVNYXJnaW5Cb3JkZXJBbmRQ
YWRkaW5nRm9yR2VuZXJpY0lubGluZUJveChjb25zdCBJbmxpbmVCb3gmIGxheW91dEJveCkgY29u
c3QKIHsKLSAgICBBU1NFUlQobGF5b3V0Qm94LmlzRmxvYXRpbmdQb3NpdGlvbmVkKCkpOworICAg
IEFTU0VSVChsYXlvdXRCb3guaXNBbm9ueW1vdXMoKSB8fCBpczxMaW5lQnJlYWtCb3g+KGxheW91
dEJveCkpOwogICAgIGF1dG8mIGxheW91dFN0YXRlID0gdGhpcy0+bGF5b3V0U3RhdGUoKTsKKyAg
ICBhdXRvJiBkaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveChs
YXlvdXRCb3gpOworCisgICAgZGlzcGxheUJveC5zZXRWZXJ0aWNhbE1hcmdpbih7IHsgfSwgeyB9
IH0pOworICAgIGRpc3BsYXlCb3guc2V0SG9yaXpvbnRhbE1hcmdpbih7IH0pOworICAgIGRpc3Bs
YXlCb3guc2V0Qm9yZGVyKHsgeyB9LCB7IH0gfSk7CisgICAgZGlzcGxheUJveC5zZXRQYWRkaW5n
KHsgfSk7Cit9CiAKLSAgICBhdXRvIHVzZWRIb3Jpem9udGFsVmFsdWVzID0gVXNlZEhvcml6b250
YWxWYWx1ZXMgeyB9OwotICAgIGNvbXB1dGVCb3JkZXJBbmRQYWRkaW5nKGxheW91dEJveCwgdXNl
ZEhvcml6b250YWxWYWx1ZXMpOwotICAgIGNvbXB1dGVNYXJnaW4obGF5b3V0Qm94LCB1c2VkSG9y
aXpvbnRhbFZhbHVlcyk7Ci0gICAgbGF5b3V0U3RhdGUuY3JlYXRlRm9ybWF0dGluZ0NvbnRleHQo
bGF5b3V0Qm94KS0+Y29tcHV0ZUludHJpbnNpY1dpZHRoQ29uc3RyYWludHMoKTsKK3ZvaWQgSW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVNYXJnaW5Cb3JkZXJBbmRQYWRkaW5nRm9ySW5s
aW5lQ29udGFpbmVyKGNvbnN0IElubGluZUNvbnRhaW5lciYgY29udGFpbmVyLCBVc2VkSG9yaXpv
bnRhbFZhbHVlcyB1c2VkVmFsdWVzKSBjb25zdAoreworICAgIGNvbXB1dGVIb3Jpem9udGFsTWFy
Z2luKGNvbnRhaW5lciwgdXNlZFZhbHVlcyk7CisgICAgY29tcHV0ZUJvcmRlckFuZFBhZGRpbmco
Y29udGFpbmVyLCB1c2VkVmFsdWVzKTsKKyAgICAvLyBJbmxpbmUgY29udGFpbmVycyAoPHNwYW4+
KSBoYXZlIDAgdmVydGljYWwgbWFyZ2lucy4KKyAgICBsYXlvdXRTdGF0ZSgpLmRpc3BsYXlCb3hG
b3JMYXlvdXRCb3goY29udGFpbmVyKS5zZXRWZXJ0aWNhbE1hcmdpbih7IHsgfSwgeyB9IH0pOwor
fQogCi0gICAgYXV0byB1c2VkVmVydGljYWxWYWx1ZXMgPSBVc2VkVmVydGljYWxWYWx1ZXMgeyB9
OwotICAgIGF1dG8gaGVpZ2h0QW5kTWFyZ2luID0gR2VvbWV0cnk6OmZsb2F0aW5nSGVpZ2h0QW5k
TWFyZ2luKGxheW91dFN0YXRlLCBsYXlvdXRCb3gsIHVzZWRWZXJ0aWNhbFZhbHVlcywgdXNlZEhv
cml6b250YWxWYWx1ZXMpOwordm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUlu
dHJpbnNpY1dpZHRoRm9yRmxvYXRCb3goY29uc3QgQm94JiBsYXlvdXRCb3gpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKGxheW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpKTsKIAotICAgIGF1dG8m
IGRpc3BsYXlCb3ggPSBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJv
eCk7Ci0gICAgZGlzcGxheUJveC5zZXRDb250ZW50Qm94SGVpZ2h0KGhlaWdodEFuZE1hcmdpbi5o
ZWlnaHQpOwotICAgIGRpc3BsYXlCb3guc2V0VmVydGljYWxNYXJnaW4oeyBoZWlnaHRBbmRNYXJn
aW4ubm9uQ29sbGFwc2VkTWFyZ2luLCB7IH0gfSk7CisgICAgYXV0byB1c2VkVmFsdWVzID0gVXNl
ZEhvcml6b250YWxWYWx1ZXMgeyB9OworICAgIGNvbXB1dGVCb3JkZXJBbmRQYWRkaW5nKGxheW91
dEJveCwgdXNlZFZhbHVlcyk7CisgICAgY29tcHV0ZUhvcml6b250YWxNYXJnaW4obGF5b3V0Qm94
LCB1c2VkVmFsdWVzKTsKKyAgICBsYXlvdXRTdGF0ZSgpLmNyZWF0ZUZvcm1hdHRpbmdDb250ZXh0
KGxheW91dEJveCktPmNvbXB1dGVJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKCk7CiB9CiAKIHZv
aWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVJbnRyaW5zaWNXaWR0aEZvcklubGlu
ZUJsb2NrKGNvbnN0IEJveCYgbGF5b3V0Qm94KSBjb25zdApAQCAtMTc4LDExICsxOTUsMTEgQEAg
dm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUludHJpbnNpY1dpZHRoRm9ySW5s
aW5lQmxvY2soY29uc3QgQm94JiBsYXkKIAogICAgIGF1dG8gdXNlZFZhbHVlcyA9IFVzZWRIb3Jp
em9udGFsVmFsdWVzIHsgfTsKICAgICBjb21wdXRlQm9yZGVyQW5kUGFkZGluZyhsYXlvdXRCb3gs
IHVzZWRWYWx1ZXMpOwotICAgIGNvbXB1dGVNYXJnaW4obGF5b3V0Qm94LCB1c2VkVmFsdWVzKTsK
KyAgICBjb21wdXRlSG9yaXpvbnRhbE1hcmdpbihsYXlvdXRCb3gsIHVzZWRWYWx1ZXMpOwogICAg
IGxheW91dFN0YXRlKCkuY3JlYXRlRm9ybWF0dGluZ0NvbnRleHQobGF5b3V0Qm94KS0+Y29tcHV0
ZUludHJpbnNpY1dpZHRoQ29uc3RyYWludHMoKTsKIH0KIAotdm9pZCBJbmxpbmVGb3JtYXR0aW5n
Q29udGV4dDo6Y29tcHV0ZU1hcmdpbihjb25zdCBCb3gmIGxheW91dEJveCwgVXNlZEhvcml6b250
YWxWYWx1ZXMgdXNlZFZhbHVlcykgY29uc3QKK3ZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6
OmNvbXB1dGVIb3Jpem9udGFsTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBVc2VkSG9yaXpv
bnRhbFZhbHVlcyB1c2VkVmFsdWVzKSBjb25zdAogewogICAgIGF1dG8gY29tcHV0ZWRIb3Jpem9u
dGFsTWFyZ2luID0gR2VvbWV0cnk6OmNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbihsYXlvdXRCb3gs
IHVzZWRWYWx1ZXMpOwogICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBsYXlvdXRTdGF0ZSgpLmRpc3Bs
YXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KTsKQEAgLTIzNSw2ICsyNTIsOCBAQCB2b2lkIElu
bGluZUZvcm1hdHRpbmdDb250ZXh0OjpsYXlvdXRGb3JtYXR0aW5nQ29udGV4dFJvb3QoY29uc3Qg
Qm94JiByb290LCBVc2VkSAogCiAgICAgY29tcHV0ZUJvcmRlckFuZFBhZGRpbmcocm9vdCwgdXNl
ZFZhbHVlcyk7CiAgICAgY29tcHV0ZVdpZHRoQW5kTWFyZ2luKHJvb3QsIHVzZWRWYWx1ZXMpOwor
ICAgIC8vIFRoaXMgaXMgc2ltaWxhciB0byBzdGF0aWMgcG9zaXRpb25pbmcgaW4gYmxvY2sgZm9y
bWF0dGluZyBjb250ZXh0LiBXZSBqdXN0IG5lZWQgdG8gaW5pdGlhbGl6ZSB0aGUgdG9wIGxlZnQg
cG9zaXRpb24uCisgICAgbGF5b3V0U3RhdGUoKS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KHJvb3Qp
LnNldFRvcExlZnQoeyAwLCAwIH0pOwogICAgIC8vIFN3aWNoIG92ZXIgdG8gdGhlIG5ldyBmb3Jt
YXR0aW5nIGNvbnRleHQgKHRoZSBvbmUgdGhhdCB0aGUgcm9vdCBjcmVhdGVzKS4KICAgICBhdXRv
IGZvcm1hdHRpbmdDb250ZXh0ID0gbGF5b3V0U3RhdGUoKS5jcmVhdGVGb3JtYXR0aW5nQ29udGV4
dChyb290KTsKICAgICBmb3JtYXR0aW5nQ29udGV4dC0+bGF5b3V0KCk7CkBAIC0yNTYsODggKzI3
NSwyOSBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlV2lkdGhBbmRIZWln
aHRGb3JSZXBsYWNlZElubGluZUJveChjb25zdCBCbwogICAgIGNvbXB1dGVIZWlnaHRBbmRNYXJn
aW4obGF5b3V0Qm94KTsKIH0KIAotc3RhdGljIHZvaWQgYWRkRGV0YWNoaW5nUnVsZXMoSW5saW5l
SXRlbSYgaW5saW5lSXRlbSwgT3B0aW9uYWw8TGF5b3V0VW5pdD4gbm9uQnJlYWthYmxlU3RhcnRX
aWR0aCwgT3B0aW9uYWw8TGF5b3V0VW5pdD4gbm9uQnJlYWthYmxlRW5kV2lkdGgpCi17Ci0gICAg
T3B0aW9uU2V0PElubGluZUl0ZW06OkRldGFjaGluZ1J1bGU+IGRldGFjaGluZ1J1bGVzOwotICAg
IGlmIChub25CcmVha2FibGVTdGFydFdpZHRoKSB7Ci0gICAgICAgIGRldGFjaGluZ1J1bGVzLmFk
ZChJbmxpbmVJdGVtOjpEZXRhY2hpbmdSdWxlOjpCcmVha0F0U3RhcnQpOwotICAgICAgICBpbmxp
bmVJdGVtLmFkZE5vbkJyZWFrYWJsZVN0YXJ0KCpub25CcmVha2FibGVTdGFydFdpZHRoKTsKLSAg
ICB9Ci0gICAgaWYgKG5vbkJyZWFrYWJsZUVuZFdpZHRoKSB7Ci0gICAgICAgIGRldGFjaGluZ1J1
bGVzLmFkZChJbmxpbmVJdGVtOjpEZXRhY2hpbmdSdWxlOjpCcmVha0F0RW5kKTsKLSAgICAgICAg
aW5saW5lSXRlbS5hZGROb25CcmVha2FibGVFbmQoKm5vbkJyZWFrYWJsZUVuZFdpZHRoKTsKLSAg
ICB9Ci0gICAgaW5saW5lSXRlbS5hZGREZXRhY2hpbmdSdWxlKGRldGFjaGluZ1J1bGVzKTsKLX0K
LQotc3RhdGljIElubGluZUl0ZW0mIGNyZWF0ZUFuZEFwcGVuZElubGluZUl0ZW0oSW5saW5lUnVu
UHJvdmlkZXImIGlubGluZVJ1blByb3ZpZGVyLCBJbmxpbmVDb250ZW50JiBpbmxpbmVDb250ZW50
LCBjb25zdCBCb3gmIGxheW91dEJveCkKLXsKLSAgICBBU1NFUlQobGF5b3V0Qm94LmlzSW5saW5l
TGV2ZWxCb3goKSB8fCBsYXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSk7Ci0gICAgYXV0
byBpbmxpbmVJdGVtID0gc3RkOjptYWtlX3VuaXF1ZTxJbmxpbmVJdGVtPihsYXlvdXRCb3gpOwot
ICAgIGF1dG8qIGlubGluZUl0ZW1QdHIgPSBpbmxpbmVJdGVtLmdldCgpOwotICAgIGlubGluZUNv
bnRlbnQuYWRkKFdURk1vdmUoaW5saW5lSXRlbSkpOwotICAgIGlubGluZVJ1blByb3ZpZGVyLmFw
cGVuZCgqaW5saW5lSXRlbVB0cik7Ci0gICAgcmV0dXJuICppbmxpbmVJdGVtUHRyOwotfQotCi12
b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb2xsZWN0SW5saW5lQ29udGVudChJbmxpbmVS
dW5Qcm92aWRlciYgaW5saW5lUnVuUHJvdmlkZXIpIGNvbnN0Cit2b2lkIElubGluZUZvcm1hdHRp
bmdDb250ZXh0Ojpjb2xsZWN0SW5saW5lQ29udGVudCgpIGNvbnN0CiB7CiAgICAgaWYgKCFpczxD
b250YWluZXI+KHJvb3QoKSkpCiAgICAgICAgIHJldHVybjsKICAgICBhdXRvJiByb290ID0gZG93
bmNhc3Q8Q29udGFpbmVyPih0aGlzLT5yb290KCkpOwogICAgIGlmICghcm9vdC5oYXNJbkZsb3dP
ckZsb2F0aW5nQ2hpbGQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIC8vIFRoZSBsb2dpYyBoZXJl
IGlzIHZlcnkgc2ltaWxhciB0byBCRkMgbGF5b3V0LgotICAgIC8vIDEuIFRyYXZlcnMgZG93biB0
aGUgbGF5b3V0IHRyZWUgYW5kIGNvbGxlY3QgInN0YXJ0IiB1bmJyZWFrYWJsZSB3aWR0aHMgKG1h
cmdpbi1sZWZ0LCBib3JkZXItbGVmdCwgcGFkZGluZy1sZWZ0KQotICAgIC8vIDIuIENyZWF0ZSBJ
bmxpbmVJdGVtIHBlciBsZWFmIGlubGluZSBib3ggKHRleHQgbm9kZXMsIGlubGluZS1ibG9ja3Ms
IGZsb2F0cykgYW5kIHNldCAic3RhcnQiIHVuYnJlYWthYmxlIHdpZHRoIG9uIHRoZW0uIAotICAg
IC8vIDMuIENsaW1iIGJhY2sgYW5kIGNvbGxlY3QgImVuZCIgdW5icmVha2FibGUgd2lkdGggYW5k
IHNldCBpdCBvbiB0aGUgbGFzdCBJbmxpbmVJdGVtLgotICAgIGF1dG8mIGxheW91dFN0YXRlID0g
dGhpcy0+bGF5b3V0U3RhdGUoKTsKLSAgICBhdXRvJiBpbmxpbmVDb250ZW50ID0gZm9ybWF0dGlu
Z1N0YXRlKCkuaW5saW5lQ29udGVudCgpOwotCi0gICAgZW51bSBjbGFzcyBOb25CcmVha2FibGVX
aWR0aFR5cGUgeyBTdGFydCwgRW5kIH07Ci0gICAgYXV0byBub25CcmVha2FibGVXaWR0aCA9IFsm
XShhdXRvJiBjb250YWluZXIsIGF1dG8gdHlwZSkgewotICAgICAgICBhdXRvJiBkaXNwbGF5Qm94
ID0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveChjb250YWluZXIpOwotICAgICAg
ICBpZiAodHlwZSA9PSBOb25CcmVha2FibGVXaWR0aFR5cGU6OlN0YXJ0KQotICAgICAgICAgICAg
cmV0dXJuIGRpc3BsYXlCb3gubWFyZ2luU3RhcnQoKSArIGRpc3BsYXlCb3guYm9yZGVyTGVmdCgp
ICsgZGlzcGxheUJveC5wYWRkaW5nTGVmdCgpLnZhbHVlT3IoMCk7Ci0gICAgICAgIHJldHVybiBk
aXNwbGF5Qm94Lm1hcmdpbkVuZCgpICsgZGlzcGxheUJveC5ib3JkZXJSaWdodCgpICsgZGlzcGxh
eUJveC5wYWRkaW5nUmlnaHQoKS52YWx1ZU9yKDApOwotICAgIH07Ci0KKyAgICAvLyBUcmF2ZXJz
ZSB0aGUgdHJlZSBhbmQgY3JlYXRlIGlubGluZSBpdGVtcyBvdXQgb2YgY29udGFpbmVycyBhbmQg
bGVhZiBub2Rlcy4gVGhpcyBlc3NlbnRpYWxseSB0dXJucyB0aGUgdHJlZSBpbmxpbmUgc3RydWN0
dXJlIGludG8gYSBmbGF0IG9uZS4KKyAgICAvLyA8c3Bhbj50ZXh0PHNwYW4+PC9zcGFuPjxpbWc+
PC9zcGFuPiAtPiBbQ29udGFpbmVyU3RhcnRdW0lubGluZUJveF1bQ29udGFpbmVyU3RhcnRdW0Nv
bnRhaW5lckVuZF1bSW5saW5lQm94XVtDb250YWluZXJFbmRdCisgICAgYXV0byYgZm9ybWF0dGlu
Z1N0YXRlID0gdGhpcy0+Zm9ybWF0dGluZ1N0YXRlKCk7CiAgICAgTGF5b3V0UXVldWUgbGF5b3V0
UXVldWU7CiAgICAgbGF5b3V0UXVldWUuYXBwZW5kKHJvb3QuZmlyc3RJbkZsb3dPckZsb2F0aW5n
Q2hpbGQoKSk7Ci0KLSAgICBPcHRpb25hbDxMYXlvdXRVbml0PiBub25CcmVha2FibGVTdGFydFdp
ZHRoOwotICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IG5vbkJyZWFrYWJsZUVuZFdpZHRoOwotICAg
IElubGluZUl0ZW0qIGxhc3RJbmxpbmVJdGVtID0gbnVsbHB0cjsKICAgICB3aGlsZSAoIWxheW91
dFF1ZXVlLmlzRW1wdHkoKSkgeworICAgICAgICBhdXRvIHRyZWF0QXNJbmxpbmVDb250YWluZXIg
PSBbXShhdXRvJiBsYXlvdXRCb3gpIHsKKyAgICAgICAgICAgIHJldHVybiBpczxDb250YWluZXI+
KGxheW91dEJveCkgJiYgIWxheW91dEJveC5lc3RhYmxpc2hlc0Zvcm1hdHRpbmdDb250ZXh0KCk7
CisgICAgICAgIH07CiAgICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICAgICBhdXRvJiBs
YXlvdXRCb3ggPSAqbGF5b3V0UXVldWUubGFzdCgpOwotICAgICAgICAgICAgaWYgKCFpczxDb250
YWluZXI+KGxheW91dEJveCkpCisgICAgICAgICAgICBpZiAoIXRyZWF0QXNJbmxpbmVDb250YWlu
ZXIobGF5b3V0Qm94KSkKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIC8vIFRo
aXMgaXMgdGhlIHN0YXJ0IG9mIGFuIGlubGluZSBjb250YWluZXIgKGUuZy4gPHNwYW4+KS4KKyAg
ICAgICAgICAgIGZvcm1hdHRpbmdTdGF0ZS5hZGRJbmxpbmVJdGVtKHN0ZDo6bWFrZV91bmlxdWU8
SW5saW5lSXRlbT4obGF5b3V0Qm94LCBJbmxpbmVJdGVtOjpUeXBlOjpDb250YWluZXJTdGFydCkp
OwogICAgICAgICAgICAgYXV0byYgY29udGFpbmVyID0gZG93bmNhc3Q8Q29udGFpbmVyPihsYXlv
dXRCb3gpOwotCi0gICAgICAgICAgICBpZiAoY29udGFpbmVyLmVzdGFibGlzaGVzRm9ybWF0dGlu
Z0NvbnRleHQoKSkgewotICAgICAgICAgICAgICAgIC8vIEZvcm1hdHRpbmcgY29udGV4dHMgYXJl
IHRyZWF0ZWQgYXMgbGVhZiBub2Rlcy4KLSAgICAgICAgICAgICAgICBhdXRvJiBpbmxpbmVJdGVt
ID0gY3JlYXRlQW5kQXBwZW5kSW5saW5lSXRlbShpbmxpbmVSdW5Qcm92aWRlciwgaW5saW5lQ29u
dGVudCwgY29udGFpbmVyKTsKLSAgICAgICAgICAgICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gbGF5
b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveChjb250YWluZXIpOwotICAgICAgICAgICAg
ICAgIGF1dG8gY3VycmVudE5vbkJyZWFrYWJsZVN0YXJ0V2lkdGggPSBub25CcmVha2FibGVTdGFy
dFdpZHRoLnZhbHVlT3IoMCkgKyBkaXNwbGF5Qm94Lm1hcmdpblN0YXJ0KCkgKyBub25CcmVha2Fi
bGVFbmRXaWR0aC52YWx1ZU9yKDApOwotICAgICAgICAgICAgICAgIGFkZERldGFjaGluZ1J1bGVz
KGlubGluZUl0ZW0sIGN1cnJlbnROb25CcmVha2FibGVTdGFydFdpZHRoLCBkaXNwbGF5Qm94Lm1h
cmdpbkVuZCgpKTsKLSAgICAgICAgICAgICAgICBub25CcmVha2FibGVTdGFydFdpZHRoID0geyB9
OwotICAgICAgICAgICAgICAgIG5vbkJyZWFrYWJsZUVuZFdpZHRoID0geyB9OwotCi0gICAgICAg
ICAgICAgICAgLy8gRm9ybWF0dGluZyBjb250ZXh0IHJvb3RzIHRha2UgY2FyZSBvZiB0aGVpciBz
dWJ0cmVlcy4gQ29udGludWUgd2l0aCBuZXh0IHNpYmxpbmcgaWYgZXhpc3RzLgotICAgICAgICAg
ICAgICAgIGxheW91dFF1ZXVlLnJlbW92ZUxhc3QoKTsKLSAgICAgICAgICAgICAgICBpZiAoIWNv
bnRhaW5lci5uZXh0SW5GbG93T3JGbG9hdGluZ1NpYmxpbmcoKSkKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgbGF5b3V0UXVldWUuYXBwZW5kKGNvbnRhaW5lci5u
ZXh0SW5GbG93T3JGbG9hdGluZ1NpYmxpbmcoKSk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoaXMgbm9uLWZvcm1h
dHRpbmcgY29udGV4dCBjb250YWluZXIgaGFzIGFueSBub24tYnJlYWthYmxlIHN0YXJ0IHByb3Bl
cnRpZXMgKG1hcmdpbi1sZWZ0LCBib3JkZXItbGVmdCwgcGFkZGluZy1sZWZ0KQotICAgICAgICAg
ICAgLy8gPHNwYW4gc3R5bGU9InBhZGRpbmctbGVmdDogNXB4Ij48c3BhbiBzdHlsZT0icGFkZGlu
Zy1sZWZ0OiA1cHgiPmZvb2Jhcjwvc3Bhbj48L3NwYW4+IC0+IDVweCArIDVweAotICAgICAgICAg
ICAgYXV0byBjdXJyZW50Tm9uQnJlYWthYmxlU3RhcnRXaWR0aCA9IG5vbkJyZWFrYWJsZVdpZHRo
KGxheW91dEJveCwgTm9uQnJlYWthYmxlV2lkdGhUeXBlOjpTdGFydCk7Ci0gICAgICAgICAgICBp
ZiAoY3VycmVudE5vbkJyZWFrYWJsZVN0YXJ0V2lkdGggfHwgbGF5b3V0Qm94LmlzUG9zaXRpb25l
ZCgpKQotICAgICAgICAgICAgICAgIG5vbkJyZWFrYWJsZVN0YXJ0V2lkdGggPSBub25CcmVha2Fi
bGVTdGFydFdpZHRoLnZhbHVlT3IoMCkgKyBjdXJyZW50Tm9uQnJlYWthYmxlU3RhcnRXaWR0aDsK
LQogICAgICAgICAgICAgaWYgKCFjb250YWluZXIuaGFzSW5GbG93T3JGbG9hdGluZ0NoaWxkKCkp
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBsYXlvdXRRdWV1ZS5hcHBlbmQo
Y29udGFpbmVyLmZpcnN0SW5GbG93T3JGbG9hdGluZ0NoaWxkKCkpOwpAQCAtMzQ1LDI5ICszMDUs
MTkgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29sbGVjdElubGluZUNvbnRlbnQo
SW5saW5lUnVuUHJvdmlkZXImIGlubGluZVJ1blAKIAogICAgICAgICB3aGlsZSAoIWxheW91dFF1
ZXVlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgYXV0byYgbGF5b3V0Qm94ID0gKmxheW91dFF1
ZXVlLnRha2VMYXN0KCk7Ci0gICAgICAgICAgICBpZiAoaXM8Q29udGFpbmVyPihsYXlvdXRCb3gp
KSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgZW5kIG9mIGFuIGlubGluZSBjb250
YWluZXIuIENvbXB1dGUgdGhlIG5vbi1icmVha2FibGUgZW5kIHdpZHRoIGFuZCBhZGQgaXQgdG8g
dGhlIGxhc3QgaW5saW5lIGJveC4KLSAgICAgICAgICAgICAgICAvLyA8c3BhbiBzdHlsZT0icGFk
ZGluZy1yaWdodDogNXB4Ij5mb29iYXI8L3NwYW4+IC0+IDVweDsgbGFzdCBpbmxpbmUgaXRlbSAt
PiAiZm9vYmFyIgotICAgICAgICAgICAgICAgIGF1dG8gY3VycmVudE5vbkJyZWFrYWJsZUVuZFdp
ZHRoID0gbm9uQnJlYWthYmxlV2lkdGgobGF5b3V0Qm94LCBOb25CcmVha2FibGVXaWR0aFR5cGU6
OkVuZCk7Ci0gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnROb25CcmVha2FibGVFbmRXaWR0aCB8
fCBsYXlvdXRCb3guaXNQb3NpdGlvbmVkKCkpCi0gICAgICAgICAgICAgICAgICAgIG5vbkJyZWFr
YWJsZUVuZFdpZHRoID0gbm9uQnJlYWthYmxlRW5kV2lkdGgudmFsdWVPcigwKSArIGN1cnJlbnRO
b25CcmVha2FibGVFbmRXaWR0aDsKLSAgICAgICAgICAgICAgICAvLyBBZGQgaXQgdG8gdGhlIGxh
c3QgaW5saW5lIGJveAotICAgICAgICAgICAgICAgIGlmIChsYXN0SW5saW5lSXRlbSkgewotICAg
ICAgICAgICAgICAgICAgICBhZGREZXRhY2hpbmdSdWxlcygqbGFzdElubGluZUl0ZW0sIHsgfSwg
bm9uQnJlYWthYmxlRW5kV2lkdGgpOwotICAgICAgICAgICAgICAgICAgICBub25CcmVha2FibGVF
bmRXaWR0aCA9IHsgfTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIC8vIExlYWYgaW5saW5lIGJveAotICAgICAgICAgICAgICAgIGF1dG8m
IGlubGluZUl0ZW0gPSBjcmVhdGVBbmRBcHBlbmRJbmxpbmVJdGVtKGlubGluZVJ1blByb3ZpZGVy
LCBpbmxpbmVDb250ZW50LCBsYXlvdXRCb3gpOwotICAgICAgICAgICAgICAgIC8vIEFkZCBzdGFy
dCBhbmQgdGhlICh0aHJvdWdoIGVtcHR5IGNvbnRhaW5lcnMpIGFjY3VtdWxhdGVkIGVuZCB3aWR0
aC4KLSAgICAgICAgICAgICAgICAvLyA8c3BhbiBzdHlsZT0icGFkZGluZy1sZWZ0OiAxcHgiPmZv
b2Jhcjwvc3Bhbj4gLT4gbm9uQnJlYWthYmxlU3RhcnRXaWR0aDogMXB4OwotICAgICAgICAgICAg
ICAgIC8vIDxzcGFuIHN0eWxlPSJwYWRkaW5nOiA1cHgiPjwvc3Bhbj5mb29iYXIgLT4gbm9uQnJl
YWthYmxlU3RhcnRXaWR0aDogNXB4OyBub25CcmVha2FibGVFbmRXaWR0aDogNXB4Ci0gICAgICAg
ICAgICAgICAgaWYgKG5vbkJyZWFrYWJsZVN0YXJ0V2lkdGggfHwgbm9uQnJlYWthYmxlRW5kV2lk
dGgpIHsKLSAgICAgICAgICAgICAgICAgICAgYWRkRGV0YWNoaW5nUnVsZXMoaW5saW5lSXRlbSwg
bm9uQnJlYWthYmxlU3RhcnRXaWR0aC52YWx1ZU9yKDApICsgbm9uQnJlYWthYmxlRW5kV2lkdGgu
dmFsdWVPcigwKSwgeyB9KTsKLSAgICAgICAgICAgICAgICAgICAgbm9uQnJlYWthYmxlU3RhcnRX
aWR0aCA9IHsgfTsKLSAgICAgICAgICAgICAgICAgICAgbm9uQnJlYWthYmxlRW5kV2lkdGggPSB7
IH07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGxhc3RJbmxpbmVJdGVtID0g
JmlubGluZUl0ZW07CisgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBlbmQgb2YgYW4gaW5saW5l
IGNvbnRhaW5lciAoZS5nLiA8L3NwYW4+KS4KKyAgICAgICAgICAgIGlmICh0cmVhdEFzSW5saW5l
Q29udGFpbmVyKGxheW91dEJveCkpCisgICAgICAgICAgICAgICAgZm9ybWF0dGluZ1N0YXRlLmFk
ZElubGluZUl0ZW0oc3RkOjptYWtlX3VuaXF1ZTxJbmxpbmVJdGVtPihsYXlvdXRCb3gsIElubGlu
ZUl0ZW06OlR5cGU6OkNvbnRhaW5lckVuZCkpOworICAgICAgICAgICAgZWxzZSBpZiAoaXM8TGlu
ZUJyZWFrQm94PihsYXlvdXRCb3gpKQorICAgICAgICAgICAgICAgIGZvcm1hdHRpbmdTdGF0ZS5h
ZGRJbmxpbmVJdGVtKHN0ZDo6bWFrZV91bmlxdWU8SW5saW5lSXRlbT4obGF5b3V0Qm94LCBJbmxp
bmVJdGVtOjpUeXBlOjpIYXJkTGluZUJyZWFrKSk7CisgICAgICAgICAgICBlbHNlIGlmIChsYXlv
dXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSkKKyAgICAgICAgICAgICAgICBmb3JtYXR0aW5n
U3RhdGUuYWRkSW5saW5lSXRlbShzdGQ6Om1ha2VfdW5pcXVlPElubGluZUl0ZW0+KGxheW91dEJv
eCwgSW5saW5lSXRlbTo6VHlwZTo6RmxvYXQpKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgIEFTU0VSVChpczxJbmxpbmVCb3g+KGxheW91dEJveCkgfHwgbGF5b3V0Qm94Lmlz
SW5saW5lQmxvY2tCb3goKSk7CisgICAgICAgICAgICAgICAgaWYgKGlzPElubGluZUJveD4obGF5
b3V0Qm94KSAmJiBkb3duY2FzdDxJbmxpbmVCb3g+KGxheW91dEJveCkuaGFzVGV4dENvbnRlbnQo
KSkKKyAgICAgICAgICAgICAgICAgICAgSW5saW5lVGV4dEl0ZW06OmNyZWF0ZUFuZEFwcGVuZFRl
eHRJdGVtcyhmb3JtYXR0aW5nU3RhdGUuaW5saW5lSXRlbXMoKSwgZG93bmNhc3Q8SW5saW5lQm94
PihsYXlvdXRCb3gpKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg
IGZvcm1hdHRpbmdTdGF0ZS5hZGRJbmxpbmVJdGVtKHN0ZDo6bWFrZV91bmlxdWU8SW5saW5lSXRl
bT4obGF5b3V0Qm94LCBJbmxpbmVJdGVtOjpUeXBlOjpCb3gpKTsKICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgaWYgKGF1dG8qIG5leHRTaWJsaW5nID0gbGF5b3V0Qm94Lm5leHRJbkZsb3dP
ckZsb2F0aW5nU2libGluZygpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
aW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oIGIvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaAppbmRl
eCBhNGZiMzE1ODRhZGY4YjgxZDhkNWM2MWMzMzcyNjEyYjBkYTkzMjgxLi45YjBkNjIyNmI1M2Fj
YzRlMWJmYWUyNTVmZGRmOTU4MTA2NTVlMGRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250
ZXh0LmgKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlICJEaXNwbGF5Qm94LmgiCiAjaW5jbHVk
ZSAiRm9ybWF0dGluZ0NvbnRleHQuaCIKICNpbmNsdWRlICJJbmxpbmVGb3JtYXR0aW5nU3RhdGUu
aCIKLSNpbmNsdWRlICJJbmxpbmVSdW4uaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM4LDcgKzM3LDYgQEAgbmFtZXNwYWNlIExheW91dCB7
CiAKIGNsYXNzIEZsb2F0aW5nU3RhdGU7CiBjbGFzcyBJbmxpbmVDb250YWluZXI7Ci1jbGFzcyBJ
bmxpbmVSdW5Qcm92aWRlcjsKIGNsYXNzIExpbmU7CiAKIC8vIFRoaXMgY2xhc3MgaW1wbGVtZW50
cyB0aGUgbGF5b3V0IGxvZ2ljIGZvciBpbmxpbmUgZm9ybWF0dGluZyBjb250ZXh0cy4KQEAgLTU1
LDIxICs1MywxNSBAQCBwcml2YXRlOgogICAgIGNsYXNzIExpbmVMYXlvdXQgewogICAgIHB1Ymxp
YzoKICAgICAgICAgTGluZUxheW91dChjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYpOwot
ICAgICAgICB2b2lkIGxheW91dChjb25zdCBJbmxpbmVSdW5Qcm92aWRlciYpIGNvbnN0OworICAg
ICAgICB2b2lkIGxheW91dCgpIGNvbnN0OwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgZW51bSBj
bGFzcyBJc0xhc3RMaW5lIHsgTm8sIFllcyB9OwotICAgICAgICB2b2lkIGluaXRpYWxpemVOZXdM
aW5lKExpbmUmKSBjb25zdDsKLSAgICAgICAgdm9pZCBjbG9zZUxpbmUoTGluZSYsIElzTGFzdExp
bmUpIGNvbnN0OwotICAgICAgICB2b2lkIGFwcGVuZENvbnRlbnRUb0xpbmUoTGluZSYsIGNvbnN0
IElubGluZVJ1blByb3ZpZGVyOjpSdW4mLCBjb25zdCBMYXlvdXRTaXplJikgY29uc3Q7Ci0gICAg
ICAgIHZvaWQgcG9zdFByb2Nlc3NJbmxpbmVSdW5zKExpbmUmLCBJc0xhc3RMaW5lKSBjb25zdDsK
LSAgICAgICAgdm9pZCBjcmVhdGVGaW5hbFJ1bnMoTGluZSYpIGNvbnN0OwotICAgICAgICB2b2lk
IHNwbGl0SW5saW5lUnVuSWZOZWVkZWQoY29uc3QgSW5saW5lUnVuJiwgSW5saW5lUnVucyYgc3Bs
aXRSdW5zKSBjb25zdDsKLSAgICAgICAgdm9pZCBjb21wdXRlRmxvYXRQb3NpdGlvbihjb25zdCBG
bG9hdGluZ0NvbnRleHQmLCBMaW5lJiwgY29uc3QgQm94JikgY29uc3Q7Ci0gICAgICAgIHZvaWQg
cGxhY2VJbkZsb3dQb3NpdGlvbmVkQ2hpbGRyZW4odW5zaWduZWQgZmlyc3RSdW5JbmRleCkgY29u
c3Q7Ci0gICAgICAgIHZvaWQgYWxpZ25SdW5zKFRleHRBbGlnbk1vZGUsIExpbmUmLCBJc0xhc3RM
aW5lKSBjb25zdDsKLSAgICAgICAgdm9pZCBjb21wdXRlRXhwYW5zaW9uT3Bwb3J0dW5pdGllcyhM
aW5lJiwgY29uc3QgSW5saW5lUnVuUHJvdmlkZXI6OlJ1biYsIElubGluZVJ1blByb3ZpZGVyOjpS
dW46OlR5cGUgbGFzdFJ1blR5cGUpIGNvbnN0OwotICAgICAgICBMYXlvdXRVbml0IHJ1bldpZHRo
KGNvbnN0IElubGluZUNvbnRlbnQmLCBjb25zdCBJbmxpbmVJdGVtJiwgSXRlbVBvc2l0aW9uIGZy
b20sIHVuc2lnbmVkIGxlbmd0aCwgTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbExlZnQpIGNvbnN0
OworICAgICAgICBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUoKSBjb25zdCB7IHJldHVybiBtX2Zv
cm1hdHRpbmdDb250ZXh0LmxheW91dFN0YXRlKCk7IH0KKyAgICAgICAgdm9pZCBpbml0aWFsaXpl
TGluZShMaW5lJiwgTGF5b3V0VW5pdCBsaW5lTG9naWNhbFRvcCkgY29uc3Q7CisgICAgICAgIHZv
aWQgY2xvc2VMaW5lKExpbmUmKSBjb25zdDsKKyAgICAgICAgdm9pZCBjb21taXRJbmxpbmVJdGVt
VG9MaW5lKExpbmUmLCBjb25zdCBJbmxpbmVJdGVtJikgY29uc3Q7CisgICAgICAgIHZvaWQgaGFu
ZGxlRmxvYXQoTGluZSYsIGNvbnN0IEZsb2F0aW5nQ29udGV4dCYsIGNvbnN0IElubGluZUl0ZW0m
IGZsb2F0Qm94KSBjb25zdDsKKyAgICAgICAgdm9pZCBhbGlnblJ1bnMoVGV4dEFsaWduTW9kZSwg
dW5zaWduZWQgZmlyc3RSdW5JbmRleCwgTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCkgY29uc3Q7
CiAKICAgICBwcml2YXRlOgogICAgICAgICBzdGF0aWMgdm9pZCBqdXN0aWZ5UnVucyhMaW5lJik7
CkBAIC04OSwxMyArODEsMTUgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgbGF5b3V0Rm9ybWF0dGlu
Z0NvbnRleHRSb290KGNvbnN0IEJveCYsIFVzZWRIb3Jpem9udGFsVmFsdWVzKSBjb25zdDsKICAg
ICB2b2lkIGNvbXB1dGVJbnRyaW5zaWNXaWR0aEZvckZsb2F0Qm94KGNvbnN0IEJveCYpIGNvbnN0
OworICAgIHZvaWQgY29tcHV0ZU1hcmdpbkJvcmRlckFuZFBhZGRpbmdGb3JJbmxpbmVDb250YWlu
ZXIoY29uc3QgSW5saW5lQ29udGFpbmVyJiwgVXNlZEhvcml6b250YWxWYWx1ZXMpIGNvbnN0Owor
ICAgIHZvaWQgaW5pdGlhbGl6ZU1hcmdpbkJvcmRlckFuZFBhZGRpbmdGb3JHZW5lcmljSW5saW5l
Qm94KGNvbnN0IElubGluZUJveCYpIGNvbnN0OwogICAgIHZvaWQgY29tcHV0ZUludHJpbnNpY1dp
ZHRoRm9ySW5saW5lQmxvY2soY29uc3QgQm94JikgY29uc3Q7CiAgICAgdm9pZCBjb21wdXRlV2lk
dGhBbmRIZWlnaHRGb3JSZXBsYWNlZElubGluZUJveChjb25zdCBCb3gmLCBVc2VkSG9yaXpvbnRh
bFZhbHVlcykgY29uc3Q7Ci0gICAgdm9pZCBjb21wdXRlTWFyZ2luKGNvbnN0IEJveCYsIFVzZWRI
b3Jpem9udGFsVmFsdWVzKSBjb25zdDsKKyAgICB2b2lkIGNvbXB1dGVIb3Jpem9udGFsTWFyZ2lu
KGNvbnN0IEJveCYsIFVzZWRIb3Jpem9udGFsVmFsdWVzKSBjb25zdDsKICAgICB2b2lkIGNvbXB1
dGVIZWlnaHRBbmRNYXJnaW4oY29uc3QgQm94JikgY29uc3Q7CiAgICAgdm9pZCBjb21wdXRlV2lk
dGhBbmRNYXJnaW4oY29uc3QgQm94JiwgVXNlZEhvcml6b250YWxWYWx1ZXMpIGNvbnN0OwogCi0g
ICAgdm9pZCBjb2xsZWN0SW5saW5lQ29udGVudChJbmxpbmVSdW5Qcm92aWRlciYpIGNvbnN0Owor
ICAgIHZvaWQgY29sbGVjdElubGluZUNvbnRlbnQoKSBjb25zdDsKIAogICAgIElubGluZUZvcm1h
dHRpbmdTdGF0ZSYgZm9ybWF0dGluZ1N0YXRlKCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8SW5s
aW5lRm9ybWF0dGluZ1N0YXRlPihGb3JtYXR0aW5nQ29udGV4dDo6Zm9ybWF0dGluZ1N0YXRlKCkp
OyB9CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRp
bmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0TGluZUxheW91
dC5jcHAKaW5kZXggMzY3NWZhZGY5MThmMTcwOTk4ODkzZGVkMzQ4YWJlNzU1ZDA0MGFmZi4uZWE3
YmQ2NmNkMjQwNWQxNTRhNjdmNTZlMjE0ZmQ2NGJhMTQxMWMwYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRM
aW5lTGF5b3V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGlu
Zy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQuY3BwCkBAIC0zMiw3ICszMiw2IEBA
CiAjaW5jbHVkZSAiRmxvYXRpbmdTdGF0ZS5oIgogI2luY2x1ZGUgIklubGluZUZvcm1hdHRpbmdT
dGF0ZS5oIgogI2luY2x1ZGUgIklubGluZUxpbmVCcmVha2VyLmgiCi0jaW5jbHVkZSAiSW5saW5l
UnVuUHJvdmlkZXIuaCIKICNpbmNsdWRlICJMYXlvdXRCb3guaCIKICNpbmNsdWRlICJMYXlvdXRD
b250YWluZXIuaCIKICNpbmNsdWRlICJMYXlvdXRTdGF0ZS5oIgpAQCAtNDEsMjMwICs0MCwzMzMg
QEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBMYXlvdXQgewogCitzdHJ1Y3QgVXNl
ZEhlaWdodEFuZERlcHRoIHsKKyAgICBMYXlvdXRVbml0IGhlaWdodDsKKyAgICBMYXlvdXRVbml0
IGRlcHRoOworfTsKKworc3RhdGljIFVzZWRIZWlnaHRBbmREZXB0aCBoYWxmTGVhZGluZ01ldHJp
Y3MoY29uc3QgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzLCBMYXlvdXRVbml0IGxpbmVMb2dpY2Fs
SGVpZ2h0KQoreworICAgIGF1dG8gYXNjZW50ID0gZm9udE1ldHJpY3MuYXNjZW50KCk7CisgICAg
YXV0byBkZXNjZW50ID0gZm9udE1ldHJpY3MuZGVzY2VudCgpOworICAgIC8vIDEwLjguMSBMZWFk
aW5nIGFuZCBoYWxmLWxlYWRpbmcKKyAgICBhdXRvIGxlYWRpbmcgPSBsaW5lTG9naWNhbEhlaWdo
dCAtIChhc2NlbnQgKyBkZXNjZW50KTsKKyAgICAvLyBJbmxpbmUgdHJlZSBpcyBhbGwgaW50ZWdl
ciBiYXNlZC4KKyAgICBhdXRvIGFkanVzdGVkQXNjZW50ID0gc3RkOjptYXgoKGFzY2VudCArIGxl
YWRpbmcgLyAyKS5mbG9vcigpLCAwKTsKKyAgICBhdXRvIGFkanVzdGVkRGVzY2VudCA9IHN0ZDo6
bWF4KChkZXNjZW50ICsgbGVhZGluZyAvIDIpLmNlaWwoKSwgMCk7CisgICAgcmV0dXJuIHsgYWRq
dXN0ZWRBc2NlbnQsIGFkanVzdGVkRGVzY2VudCB9OyAKK30KKwogY2xhc3MgTGluZSB7CiBwdWJs
aWM6Ci0gICAgdm9pZCBpbml0KGNvbnN0IExheW91dFBvaW50JiB0b3BMZWZ0LCBMYXlvdXRVbml0
IGF2YWlsYWJsZVdpZHRoLCBMYXlvdXRVbml0IG1pbmltYWxIZWlnaHQpOwotICAgIHZvaWQgY2xv
c2UoKTsKKyAgICBMaW5lKGNvbnN0IExheW91dFN0YXRlJik7CisKKyAgICB2b2lkIHJlc2V0KGNv
bnN0IExheW91dFBvaW50JiB0b3BMZWZ0LCBMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoLCBMYXlv
dXRVbml0IG1pbmltdW1MaW5lSGVpZ2h0LCBMYXlvdXRVbml0IGJhc2VsaW5lT2Zmc2V0KTsKKwor
ICAgIHN0cnVjdCBMaW5lSXRlbSB7CisgICAgICAgIExpbmVJdGVtKERpc3BsYXk6OlJ1biwgY29u
c3QgSW5saW5lSXRlbSYsIGJvb2wgaXNDb2xsYXBzZWQsIGJvb2wgY2FuQmVFeHRlbmRlZCk7CisK
KyAgICAgICAgLy8gUmVsYXRpdmUgdG8gdGhlIGJhc2VsaW5lLgorICAgICAgICBEaXNwbGF5OjpS
dW4gaW5saW5lUnVuOworICAgICAgICBjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtOworICAg
ICAgICBib29sIGlzQ29sbGFwc2VkIHsgZmFsc2UgfTsKKyAgICAgICAgYm9vbCBjYW5CZUV4dGVu
ZGVkIHsgZmFsc2UgfTsKKyAgICB9OworCisgICAgdXNpbmcgTGluZUl0ZW1zID0gVmVjdG9yPHN0
ZDo6dW5pcXVlX3B0cjxMaW5lSXRlbT4+OworICAgIGNvbnN0IExpbmVJdGVtcyYgY2xvc2UoKTsK
IAotICAgIHZvaWQgYXBwZW5kQ29udGVudChjb25zdCBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuJiwg
Y29uc3QgTGF5b3V0U2l6ZSYpOworICAgIHZvaWQgYXBwZW5kVGV4dENvbnRlbnQoY29uc3QgSW5s
aW5lVGV4dEl0ZW0mLCBMYXlvdXRTaXplKTsKKyAgICB2b2lkIGFwcGVuZE5vblJlcGxhY2VkSW5s
aW5lQm94KGNvbnN0IElubGluZUl0ZW0mLCBMYXlvdXRTaXplKTsKKyAgICB2b2lkIGFwcGVuZFJl
cGxhY2VkSW5saW5lQm94KGNvbnN0IElubGluZUl0ZW0mLCBMYXlvdXRTaXplKTsKKyAgICB2b2lk
IGFwcGVuZElubGluZUNvbnRhaW5lclN0YXJ0KGNvbnN0IElubGluZUl0ZW0mKTsKKyAgICB2b2lk
IGFwcGVuZElubGluZUNvbnRhaW5lckVuZChjb25zdCBJbmxpbmVJdGVtJik7CisgICAgdm9pZCBh
cHBlbmRIYXJkTGluZUJyZWFrKGNvbnN0IElubGluZUl0ZW0mKTsKIAotICAgIHZvaWQgYWRqdXN0
TG9naWNhbExlZnQoTGF5b3V0VW5pdCBkZWx0YSk7Ci0gICAgdm9pZCBhZGp1c3RMb2dpY2FsUmln
aHQoTGF5b3V0VW5pdCBkZWx0YSk7CisgICAgYm9vbCBoYXNDb250ZW50KCkgY29uc3Q7CiAKLSAg
ICBib29sIGhhc0NvbnRlbnQoKSBjb25zdCB7IHJldHVybiAhbV9pbmxpbmVSdW5zLmlzRW1wdHko
KTsgfQotICAgIGJvb2wgaXNDbG9zZWQoKSBjb25zdCB7IHJldHVybiBtX2Nsb3NlZDsgfQotICAg
IGJvb2wgaXNGaXJzdExpbmUoKSBjb25zdCB7IHJldHVybiBtX2lzRmlyc3RMaW5lOyB9Ci0gICAg
VmVjdG9yPElubGluZVJ1bj4mIHJ1bnMoKSB7IHJldHVybiBtX2lubGluZVJ1bnM7IH0KKyAgICBM
YXlvdXRVbml0IHRyYWlsaW5nVHJpbW1hYmxlV2lkdGgoKSBjb25zdDsKIAotICAgIExheW91dFVu
aXQgY29udGVudExvZ2ljYWxSaWdodCgpIGNvbnN0OwotICAgIExheW91dFVuaXQgY29udGVudExv
Z2ljYWxMZWZ0KCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsUmVjdC5sZWZ0KCk7IH0KLSAgICBM
YXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9hdmFpbGFibGVXaWR0
aDsgfQotICAgIE9wdGlvbmFsPElubGluZVJ1blByb3ZpZGVyOjpSdW46OlR5cGU+IGxhc3RSdW5U
eXBlKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0UnVuVHlwZTsgfQorICAgIHZvaWQgbW92ZUxvZ2lj
YWxMZWZ0KExheW91dFVuaXQpOworICAgIHZvaWQgbW92ZUxvZ2ljYWxSaWdodChMYXlvdXRVbml0
KTsKIAotICAgIExheW91dFVuaXQgbG9naWNhbFRvcCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNh
bFJlY3QudG9wKCk7IH0KLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxCb3R0b20oKSBjb25zdCB7IHJl
dHVybiBtX2xvZ2ljYWxSZWN0LmJvdHRvbSgpOyB9Ci0gICAgTGF5b3V0VW5pdCBsb2dpY2FsSGVp
Z2h0KCkgY29uc3QgeyByZXR1cm4gbG9naWNhbEJvdHRvbSgpIC0gbG9naWNhbFRvcCgpOyB9Cisg
ICAgTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIGxvZ2ljYWxXaWR0
aCgpIC0gY29udGVudExvZ2ljYWxXaWR0aCgpOyB9CisgICAgCisgICAgTGF5b3V0VW5pdCBjb250
ZW50TG9naWNhbFJpZ2h0KCkgY29uc3QgeyByZXR1cm4gbG9naWNhbExlZnQoKSArIGNvbnRlbnRM
b2dpY2FsV2lkdGgoKTsgfQorICAgIExheW91dFVuaXQgY29udGVudExvZ2ljYWxXaWR0aCgpIGNv
bnN0IHsgcmV0dXJuIG1fY29udGVudExvZ2ljYWxXaWR0aDsgfQorCisgICAgTGF5b3V0VW5pdCBs
b2dpY2FsVG9wKCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsVG9wTGVmdC55KCk7IH0KKyAgICBM
YXlvdXRVbml0IGxvZ2ljYWxMZWZ0KCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsVG9wTGVmdC54
KCk7IH0KKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodCgpIGNvbnN0IHsgcmV0dXJuIGxvZ2lj
YWxMZWZ0KCkgKyBsb2dpY2FsV2lkdGgoKTsgfQorICAgIExheW91dFVuaXQgbG9naWNhbEJvdHRv
bSgpIGNvbnN0IHsgcmV0dXJuIGxvZ2ljYWxUb3AoKSArIGxvZ2ljYWxIZWlnaHQoKTsgfQorICAg
IExheW91dFVuaXQgbG9naWNhbFdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9saW5lTG9naWNhbFdp
ZHRoOyB9CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9s
b2dpY2FsSGVpZ2h0LmhlaWdodCArIG1fbG9naWNhbEhlaWdodC5kZXB0aDsgfQogCiBwcml2YXRl
OgotICAgIHN0cnVjdCBUcmFpbGluZ1RyaW1tYWJsZUNvbnRlbnQgewotICAgICAgICBMYXlvdXRV
bml0IHdpZHRoOwotICAgICAgICB1bnNpZ25lZCBsZW5ndGg7Ci0gICAgfTsKLSAgICBPcHRpb25h
bDxUcmFpbGluZ1RyaW1tYWJsZUNvbnRlbnQ+IG1fdHJhaWxpbmdUcmltbWFibGVDb250ZW50Owot
ICAgIE9wdGlvbmFsPElubGluZVJ1blByb3ZpZGVyOjpSdW46OlR5cGU+IG1fbGFzdFJ1blR5cGU7
Ci0gICAgYm9vbCBtX2xhc3RSdW5DYW5FeHBhbmQgeyBmYWxzZSB9OworICAgIHZvaWQgYXBwZW5k
Tm9uQnJlYWthYmxlU3BhY2UoY29uc3QgSW5saW5lSXRlbSYsIGNvbnN0IERpc3BsYXk6OlJlY3Qm
IGxvZ2ljYWxSZWN0KTsKKyAgICB2b2lkIHJlbW92ZVRyYWlsaW5nVHJpbW1hYmxlQ29udGVudCgp
OworCisgICAgY29uc3QgTGF5b3V0U3RhdGUmIG1fbGF5b3V0U3RhdGU7CisgICAgTGluZUl0ZW1z
IG1fbGluZUl0ZW1zOworICAgIExpc3RIYXNoU2V0PExpbmVJdGVtKj4gbV90cmltbWFibGVDb250
ZW50OwogCi0gICAgRGlzcGxheTo6Qm94OjpSZWN0IG1fbG9naWNhbFJlY3Q7Ci0gICAgTGF5b3V0
VW5pdCBtX2F2YWlsYWJsZVdpZHRoOworICAgIExheW91dFBvaW50IG1fbG9naWNhbFRvcExlZnQ7
CisgICAgTGF5b3V0VW5pdCBtX2NvbnRlbnRMb2dpY2FsV2lkdGg7CiAKLSAgICBWZWN0b3I8SW5s
aW5lUnVuPiBtX2lubGluZVJ1bnM7Ci0gICAgYm9vbCBtX2lzRmlyc3RMaW5lIHsgdHJ1ZSB9Owot
ICAgIGJvb2wgbV9jbG9zZWQgeyB0cnVlIH07CisgICAgVXNlZEhlaWdodEFuZERlcHRoIG1fbG9n
aWNhbEhlaWdodDsKKyAgICBMYXlvdXRVbml0IG1fbGluZUxvZ2ljYWxXaWR0aDsKIH07CiAKLXZv
aWQgTGluZTo6aW5pdChjb25zdCBMYXlvdXRQb2ludCYgdG9wTGVmdCwgTGF5b3V0VW5pdCBhdmFp
bGFibGVXaWR0aCwgTGF5b3V0VW5pdCBtaW5pbWFsSGVpZ2h0KQorTGluZTo6TGluZUl0ZW06Okxp
bmVJdGVtKERpc3BsYXk6OlJ1biBpbmxpbmVSdW4sIGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0
ZW0sIGJvb2wgaXNDb2xsYXBzZWQsIGJvb2wgY2FuQmVFeHRlbmRlZCkKKyAgICA6IGlubGluZVJ1
bihpbmxpbmVSdW4pCisgICAgLCBpbmxpbmVJdGVtKGlubGluZUl0ZW0pCisgICAgLCBpc0NvbGxh
cHNlZChpc0NvbGxhcHNlZCkKKyAgICAsIGNhbkJlRXh0ZW5kZWQoY2FuQmVFeHRlbmRlZCkKIHsK
LSAgICBtX2xvZ2ljYWxSZWN0LnNldFRvcExlZnQodG9wTGVmdCk7Ci0gICAgbV9sb2dpY2FsUmVj
dC5zZXRXaWR0aChhdmFpbGFibGVXaWR0aCk7Ci0gICAgbV9sb2dpY2FsUmVjdC5zZXRIZWlnaHQo
bWluaW1hbEhlaWdodCk7Ci0gICAgbV9hdmFpbGFibGVXaWR0aCA9IGF2YWlsYWJsZVdpZHRoOwot
Ci0gICAgbV9pbmxpbmVSdW5zLmNsZWFyKCk7Ci0gICAgbV9sYXN0UnVuVHlwZSA9IHsgfTsKLSAg
ICBtX2xhc3RSdW5DYW5FeHBhbmQgPSBmYWxzZTsKLSAgICBtX3RyYWlsaW5nVHJpbW1hYmxlQ29u
dGVudCA9IHsgfTsKLSAgICBtX2Nsb3NlZCA9IGZhbHNlOwogfQogCi12b2lkIExpbmU6OmFkanVz
dExvZ2ljYWxMZWZ0KExheW91dFVuaXQgZGVsdGEpCitMaW5lOjpMaW5lKGNvbnN0IExheW91dFN0
YXRlJiBsYXlvdXRTdGF0ZSkKKyAgICA6IG1fbGF5b3V0U3RhdGUobGF5b3V0U3RhdGUpCiB7Ci0g
ICAgQVNTRVJUKGRlbHRhID4gMCk7Ci0KLSAgICBtX2F2YWlsYWJsZVdpZHRoIC09IGRlbHRhOwot
ICAgIG1fbG9naWNhbFJlY3Quc2hpZnRMZWZ0VG8obV9sb2dpY2FsUmVjdC5sZWZ0KCkgKyBkZWx0
YSk7Cit9CiAKLSAgICBmb3IgKGF1dG8mIGlubGluZVJ1biA6IG1faW5saW5lUnVucykKLSAgICAg
ICAgaW5saW5lUnVuLm1vdmVIb3Jpem9udGFsbHkoZGVsdGEpOwordm9pZCBMaW5lOjpyZXNldChj
b25zdCBMYXlvdXRQb2ludCYgdG9wTGVmdCwgTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCwgTGF5
b3V0VW5pdCBtaW5pbXVtSGVpZ2h0LCBMYXlvdXRVbml0IGJhc2VsaW5lT2Zmc2V0KQoreworICAg
IG1fbG9naWNhbFRvcExlZnQgPSB0b3BMZWZ0OworICAgIG1fbGluZUxvZ2ljYWxXaWR0aCA9IGF2
YWlsYWJsZVdpZHRoOworICAgIG1fbG9naWNhbEhlaWdodCA9IHsgYmFzZWxpbmVPZmZzZXQsIG1p
bmltdW1IZWlnaHQgLSBiYXNlbGluZU9mZnNldCB9OworICAgIAorICAgIG1fY29udGVudExvZ2lj
YWxXaWR0aCA9IHsgfTsKKworICAgIG1fbGluZUl0ZW1zLmNsZWFyKCk7CisgICAgbV90cmltbWFi
bGVDb250ZW50LmNsZWFyKCk7CiB9CiAKLXZvaWQgTGluZTo6YWRqdXN0TG9naWNhbFJpZ2h0KExh
eW91dFVuaXQgZGVsdGEpCitjb25zdCBMaW5lOjpMaW5lSXRlbXMmIExpbmU6OmNsb3NlKCkKIHsK
LSAgICBBU1NFUlQoZGVsdGEgPiAwKTsKKyAgICByZW1vdmVUcmFpbGluZ1RyaW1tYWJsZUNvbnRl
bnQoKTsKKyAgICAvLyBDb252ZXJ0IGlubGluZSBydW4gZ2VvbWV0cnkgZnJvbSByZWxhdGl2ZSB0
byB0aGUgYmFzZWxpbmUgdG8gcmVsYXRpdmUgdG8gbG9naWNhbCB0b3AuCisgICAgZm9yIChhdXRv
JiBsaW5lSXRlbSA6IG1fbGluZUl0ZW1zKSB7CisgICAgICAgIGF1dG8gYWRqdXN0ZWRMb2dpY2Fs
VG9wID0gbGluZUl0ZW0tPmlubGluZVJ1bi5sb2dpY2FsVG9wKCkgKyBtX2xvZ2ljYWxIZWlnaHQu
aGVpZ2h0ICsgbV9sb2dpY2FsVG9wTGVmdC55KCk7CisgICAgICAgIGxpbmVJdGVtLT5pbmxpbmVS
dW4uc2V0TG9naWNhbFRvcChhZGp1c3RlZExvZ2ljYWxUb3ApOworICAgIH0KKyAgICByZXR1cm4g
bV9saW5lSXRlbXM7Cit9CiAKLSAgICBtX2F2YWlsYWJsZVdpZHRoIC09IGRlbHRhOwotICAgIG1f
bG9naWNhbFJlY3Quc2hpZnRSaWdodFRvKG1fbG9naWNhbFJlY3QucmlnaHQoKSAtIGRlbHRhKTsK
K3ZvaWQgTGluZTo6cmVtb3ZlVHJhaWxpbmdUcmltbWFibGVDb250ZW50KCkKK3sKKyAgICAvLyBD
b2xsYXBzZSB0cmltbWFibGUgdHJhaWxpbmcgY29udGVudAorICAgIExheW91dFVuaXQgdHJpbW1h
YmxlV2lkdGg7CisgICAgZm9yIChhdXRvKiB0cmltbWFibGVSdW4gOiBtX3RyaW1tYWJsZUNvbnRl
bnQpIHsKKyAgICAgICAgdHJpbW1hYmxlUnVuLT5pc0NvbGxhcHNlZCA9IHRydWU7CisgICAgICAg
IHRyaW1tYWJsZVdpZHRoICs9IHRyaW1tYWJsZVJ1bi0+aW5saW5lUnVuLmxvZ2ljYWxXaWR0aCgp
OworICAgIH0KKyAgICBtX2NvbnRlbnRMb2dpY2FsV2lkdGggLT0gdHJpbW1hYmxlV2lkdGg7CiB9
CiAKLXN0YXRpYyBib29sIGlzVHJpbW1hYmxlQ29udGVudChjb25zdCBJbmxpbmVSdW5Qcm92aWRl
cjo6UnVuJiBpbmxpbmVSdW4pCit2b2lkIExpbmU6Om1vdmVMb2dpY2FsTGVmdChMYXlvdXRVbml0
IGRlbHRhKQogewotICAgIHJldHVybiBpbmxpbmVSdW4uaXNXaGl0ZXNwYWNlKCkgJiYgaW5saW5l
UnVuLnN0eWxlKCkuY29sbGFwc2VXaGl0ZVNwYWNlKCk7CisgICAgaWYgKCFkZWx0YSkKKyAgICAg
ICAgcmV0dXJuOworICAgIEFTU0VSVChkZWx0YSA+IDApOworICAgIC8vIFNocmluayB0aGUgbGlu
ZSBhbmQgbW92ZSB0aGUgaXRlbXMuCisgICAgbV9sb2dpY2FsVG9wTGVmdC5tb3ZlKGRlbHRhLCAw
KTsKKyAgICBtX2xpbmVMb2dpY2FsV2lkdGggLT0gZGVsdGE7CisgICAgZm9yIChhdXRvJiBsaW5l
SXRlbSA6IG1fbGluZUl0ZW1zKQorICAgICAgICBsaW5lSXRlbS0+aW5saW5lUnVuLm1vdmVIb3Jp
em9udGFsbHkoZGVsdGEpOwogfQogCi1MYXlvdXRVbml0IExpbmU6OmNvbnRlbnRMb2dpY2FsUmln
aHQoKSBjb25zdAordm9pZCBMaW5lOjptb3ZlTG9naWNhbFJpZ2h0KExheW91dFVuaXQgZGVsdGEp
CiB7Ci0gICAgaWYgKG1faW5saW5lUnVucy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBtX2xv
Z2ljYWxSZWN0LmxlZnQoKTsKKyAgICBBU1NFUlQoZGVsdGEgPiAwKTsKKyAgICBtX2xpbmVMb2dp
Y2FsV2lkdGggLT0gZGVsdGE7Cit9CiAKLSAgICByZXR1cm4gbV9pbmxpbmVSdW5zLmxhc3QoKS5s
b2dpY2FsUmlnaHQoKTsKK3N0YXRpYyBib29sIGlzVHJpbW1hYmxlQ29udGVudChjb25zdCBJbmxp
bmVJdGVtJiBpbmxpbmVJdGVtKQoreworICAgIGlmICghaXM8SW5saW5lVGV4dEl0ZW0+KGlubGlu
ZUl0ZW0pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0byYgaW5saW5lVGV4dEl0ZW0g
PSBkb3duY2FzdDxJbmxpbmVUZXh0SXRlbT4oaW5saW5lSXRlbSk7CisgICAgcmV0dXJuIGlubGlu
ZVRleHRJdGVtLmlzV2hpdGVzcGFjZSgpICYmIGlubGluZVRleHRJdGVtLnN0eWxlKCkuY29sbGFw
c2VXaGl0ZVNwYWNlKCk7CiB9CiAKLXZvaWQgTGluZTo6YXBwZW5kQ29udGVudChjb25zdCBJbmxp
bmVSdW5Qcm92aWRlcjo6UnVuJiBydW4sIGNvbnN0IExheW91dFNpemUmIHJ1blNpemUpCitMYXlv
dXRVbml0IExpbmU6OnRyYWlsaW5nVHJpbW1hYmxlV2lkdGgoKSBjb25zdAogewotICAgIEFTU0VS
VCghaXNDbG9zZWQoKSk7Ci0KLSAgICAvLyBBcHBlbmQgdGhpcyB0ZXh0IHJ1biB0byB0aGUgZW5k
IG9mIHRoZSBsYXN0IHRleHQgcnVuLCBpZiB0aGUgbGFzdCBydW4gaXMgY29udGludW91cy4KLSAg
ICBPcHRpb25hbDxJbmxpbmVSdW46OlRleHRDb250ZXh0PiB0ZXh0UnVuOwotICAgIGlmIChydW4u
aXNUZXh0KCkpIHsKLSAgICAgICAgYXV0byB0ZXh0Q29udGV4dCA9IHJ1bi50ZXh0Q29udGV4dCgp
OwotICAgICAgICBhdXRvIHJ1bkxlbmd0aCA9IHRleHRDb250ZXh0LT5pc0NvbGxhcHNlZCgpID8g
MSA6IHRleHRDb250ZXh0LT5sZW5ndGgoKTsKLSAgICAgICAgdGV4dFJ1biA9IElubGluZVJ1bjo6
VGV4dENvbnRleHQgeyB0ZXh0Q29udGV4dC0+c3RhcnQoKSwgcnVuTGVuZ3RoIH07Ci0gICAgfQor
ICAgIExheW91dFVuaXQgdHJpbW1hYmxlV2lkdGg7CisgICAgZm9yIChhdXRvKiB0cmltbWFibGVS
dW4gOiBtX3RyaW1tYWJsZUNvbnRlbnQpCisgICAgICAgIHRyaW1tYWJsZVdpZHRoICs9IHRyaW1t
YWJsZVJ1bi0+aW5saW5lUnVuLmxvZ2ljYWxXaWR0aCgpOworICAgIHJldHVybiB0cmltbWFibGVX
aWR0aDsKK30KIAotICAgIGF1dG8gcmVxdWlyZXNOZXdJbmxpbmVSdW4gPSAhaGFzQ29udGVudCgp
IHx8ICFydW4uaXNUZXh0KCkgfHwgIW1fbGFzdFJ1bkNhbkV4cGFuZDsKLSAgICBpZiAocmVxdWly
ZXNOZXdJbmxpbmVSdW4pIHsKLSAgICAgICAgLy8gRklYTUU6IFRoaXMgbmVlZHMgcHJvcGVyIGJh
c2VsaW5lIGhhbmRsaW5nCi0gICAgICAgIGF1dG8gaW5saW5lUnVuID0gSW5saW5lUnVuIHsgeyBs
b2dpY2FsVG9wKCksIGNvbnRlbnRMb2dpY2FsUmlnaHQoKSwgcnVuU2l6ZS53aWR0aCgpLCBydW5T
aXplLmhlaWdodCgpIH0sIHJ1bi5pbmxpbmVJdGVtKCkgfTsKLSAgICAgICAgaWYgKHRleHRSdW4p
Ci0gICAgICAgICAgICBpbmxpbmVSdW4uc2V0VGV4dENvbnRleHQoeyB0ZXh0UnVuLT5zdGFydCgp
LCB0ZXh0UnVuLT5sZW5ndGgoKSB9KTsKLSAgICAgICAgbV9pbmxpbmVSdW5zLmFwcGVuZChpbmxp
bmVSdW4pOwotICAgICAgICBtX2xvZ2ljYWxSZWN0LnNldEhlaWdodChzdGQ6Om1heChydW5TaXpl
LmhlaWdodCgpLCBtX2xvZ2ljYWxSZWN0LmhlaWdodCgpKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgLy8gTm9uLXRleHQgcnVucyBhbHdheXMgcmVxdWlyZSBuZXcgaW5saW5lIHJ1bi4KLSAgICAg
ICAgQVNTRVJUKHRleHRSdW4pOwotICAgICAgICBhdXRvJiBpbmxpbmVSdW4gPSBtX2lubGluZVJ1
bnMubGFzdCgpOwotICAgICAgICBBU1NFUlQocnVuU2l6ZS5oZWlnaHQoKSA9PSBpbmxpbmVSdW4u
bG9naWNhbEhlaWdodCgpKTsKLSAgICAgICAgaW5saW5lUnVuLnNldExvZ2ljYWxXaWR0aChpbmxp
bmVSdW4ubG9naWNhbFdpZHRoKCkgKyBydW5TaXplLndpZHRoKCkpOwotICAgICAgICBpbmxpbmVS
dW4udGV4dENvbnRleHQoKS0+c2V0TGVuZ3RoKGlubGluZVJ1bi50ZXh0Q29udGV4dCgpLT5sZW5n
dGgoKSArIHRleHRSdW4tPmxlbmd0aCgpKTsKK2Jvb2wgTGluZTo6aGFzQ29udGVudCgpIGNvbnN0
Cit7CisgICAgLy8gUmV0dXJuIGZhbHNlIGZvciBlbXB0eSBjb250YWluZXJzIGxpa2UgPHNwYW4+
PC9zcGFuPi4KKyAgICBpZiAobV9saW5lSXRlbXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgZm9yIChhdXRvJiBsaW5lSXRlbSA6IG1fbGluZUl0ZW1zKSB7CisgICAgICAg
IGlmIChsaW5lSXRlbS0+aW5saW5lSXRlbS5pc0NvbnRhaW5lclN0YXJ0KCkgfHwgbGluZUl0ZW0t
PmlubGluZUl0ZW0uaXNDb250YWluZXJFbmQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICBpZiAoIWxpbmVJdGVtLT5pc0NvbGxhcHNlZCkKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CiAKLSAgICBtX2F2YWlsYWJsZVdpZHRoIC09
IHJ1blNpemUud2lkdGgoKTsKLSAgICBtX2xhc3RSdW5UeXBlID0gcnVuLnR5cGUoKTsKLSAgICBt
X2xhc3RSdW5DYW5FeHBhbmQgPSBydW4uaXNUZXh0KCkgJiYgIXJ1bi50ZXh0Q29udGV4dCgpLT5p
c0NvbGxhcHNlZCgpOwotICAgIG1fdHJhaWxpbmdUcmltbWFibGVDb250ZW50ID0geyB9OwotICAg
IGlmIChpc1RyaW1tYWJsZUNvbnRlbnQocnVuKSkKLSAgICAgICAgbV90cmFpbGluZ1RyaW1tYWJs
ZUNvbnRlbnQgPSBUcmFpbGluZ1RyaW1tYWJsZUNvbnRlbnQgeyBydW5TaXplLndpZHRoKCksIHRl
eHRSdW4tPmxlbmd0aCgpIH07Cit2b2lkIExpbmU6OmFwcGVuZE5vbkJyZWFrYWJsZVNwYWNlKGNv
bnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0sIGNvbnN0IERpc3BsYXk6OlJlY3QmIGxvZ2ljYWxS
ZWN0KQoreworICAgIG1fbGluZUl0ZW1zLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPExpbmVJdGVt
PihEaXNwbGF5OjpSdW4geyBsb2dpY2FsUmVjdCB9LCBpbmxpbmVJdGVtLCBmYWxzZSwgZmFsc2Up
KTsKKyAgICBtX2NvbnRlbnRMb2dpY2FsV2lkdGggKz0gaW5saW5lSXRlbS53aWR0aCgpOwogfQog
Ci12b2lkIExpbmU6OmNsb3NlKCkKK3ZvaWQgTGluZTo6YXBwZW5kSW5saW5lQ29udGFpbmVyU3Rh
cnQoY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSkKIHsKLSAgICBhdXRvIHRyaW1UcmFpbGlu
Z0NvbnRlbnQgPSBbJl0gewotICAgICAgICBpZiAoIW1fdHJhaWxpbmdUcmltbWFibGVDb250ZW50
KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBhdXRvJiBsYXN0SW5saW5lUnVuID0gbV9p
bmxpbmVSdW5zLmxhc3QoKTsKLSAgICAgICAgbGFzdElubGluZVJ1bi5zZXRMb2dpY2FsV2lkdGgo
bGFzdElubGluZVJ1bi5sb2dpY2FsV2lkdGgoKSAtIG1fdHJhaWxpbmdUcmltbWFibGVDb250ZW50
LT53aWR0aCk7Ci0gICAgICAgIGxhc3RJbmxpbmVSdW4udGV4dENvbnRleHQoKS0+c2V0TGVuZ3Ro
KGxhc3RJbmxpbmVSdW4udGV4dENvbnRleHQoKS0+bGVuZ3RoKCkgLSBtX3RyYWlsaW5nVHJpbW1h
YmxlQ29udGVudC0+bGVuZ3RoKTsKLQotICAgICAgICBpZiAoIWxhc3RJbmxpbmVSdW4udGV4dENv
bnRleHQoKS0+bGVuZ3RoKCkpCi0gICAgICAgICAgICBtX2lubGluZVJ1bnMucmVtb3ZlTGFzdCgp
OwotICAgICAgICBtX2F2YWlsYWJsZVdpZHRoICs9IG1fdHJhaWxpbmdUcmltbWFibGVDb250ZW50
LT53aWR0aDsKLSAgICAgICAgbV90cmFpbGluZ1RyaW1tYWJsZUNvbnRlbnQgPSB7IH07CisgICAg
YXV0byYgbGF5b3V0Qm94ID0gaW5saW5lSXRlbS5sYXlvdXRCb3goKTsKKyAgICBhdXRvJiBzdHls
ZSA9IGxheW91dEJveC5zdHlsZSgpOworICAgIGF1dG8mIGZvbnRNZXRyaWNzID0gc3R5bGUuZm9u
dE1ldHJpY3MoKTsKKyAgICAKKyAgICBhdXRvIGFsaWduQW5kQWRqdXN0TGluZUhlaWdodCA9IFsm
XSB7CisgICAgICAgIExheW91dFVuaXQgaW5saW5lQm94SGVpZ2h0ID0gc3R5bGUuY29tcHV0ZWRM
aW5lSGVpZ2h0KCk7CisKKyAgICAgICAgYXV0byBoYWxmTGVhZGluZyA9IGhhbGZMZWFkaW5nTWV0
cmljcyhmb250TWV0cmljcywgaW5saW5lQm94SGVpZ2h0KTsKKyAgICAgICAgaWYgKGhhbGZMZWFk
aW5nLmRlcHRoID4gMCkKKyAgICAgICAgICAgIG1fbG9naWNhbEhlaWdodC5kZXB0aCA9IHN0ZDo6
bWF4KG1fbG9naWNhbEhlaWdodC5kZXB0aCwgaGFsZkxlYWRpbmcuZGVwdGgpOworICAgICAgICBp
ZiAoaGFsZkxlYWRpbmcuaGVpZ2h0ID4gMCkKKyAgICAgICAgICAgIG1fbG9naWNhbEhlaWdodC5o
ZWlnaHQgPSBzdGQ6Om1heChtX2xvZ2ljYWxIZWlnaHQuaGVpZ2h0LCBoYWxmTGVhZGluZy5oZWln
aHQpOwogICAgIH07CiAKLSAgICBpZiAoIWhhc0NvbnRlbnQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgdHJpbVRyYWlsaW5nQ29udGVudCgpOwotICAgIG1faXNGaXJzdExpbmUgPSBmYWxzZTsK
LSAgICBtX2Nsb3NlZCA9IHRydWU7CisgICAgYWxpZ25BbmRBZGp1c3RMaW5lSGVpZ2h0KCk7Cisg
ICAgYXV0byYgZGlzcGxheUJveCA9IG1fbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJv
eChsYXlvdXRCb3gpOworICAgIGF1dG8gY29udGFpbmVySGVpZ2h0ID0gZm9udE1ldHJpY3MuaGVp
Z2h0KCkgKyBkaXNwbGF5Qm94LnZlcnRpY2FsQm9yZGVyKCkgKyBkaXNwbGF5Qm94LnZlcnRpY2Fs
UGFkZGluZygpLnZhbHVlT3IoMCk7CisgICAgYXV0byBsb2dpY2FsVG9wID0gLWZvbnRNZXRyaWNz
LmFzY2VudCgpIC0gZGlzcGxheUJveC5ib3JkZXJUb3AoKSAtIGRpc3BsYXlCb3gucGFkZGluZ1Rv
cCgpLnZhbHVlT3IoMCk7CisgICAgYXV0byBsb2dpY2FsUmVjdCA9IERpc3BsYXk6OlJlY3QgeyBs
b2dpY2FsVG9wLCBjb250ZW50TG9naWNhbFJpZ2h0KCksIGlubGluZUl0ZW0ud2lkdGgoKSwgY29u
dGFpbmVySGVpZ2h0IH07CisgICAgYXBwZW5kTm9uQnJlYWthYmxlU3BhY2UoaW5saW5lSXRlbSwg
bG9naWNhbFJlY3QpOwogfQogCi1JbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6
TGluZUxheW91dChjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgaW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQpCi0gICAgOiBtX2Zvcm1hdHRpbmdDb250ZXh0KGlubGluZUZvcm1hdHRpbmdDb250
ZXh0KQotICAgICwgbV9mb3JtYXR0aW5nU3RhdGUobV9mb3JtYXR0aW5nQ29udGV4dC5mb3JtYXR0
aW5nU3RhdGUoKSkKLSAgICAsIG1fZmxvYXRpbmdTdGF0ZShtX2Zvcm1hdHRpbmdTdGF0ZS5mbG9h
dGluZ1N0YXRlKCkpCi0gICAgLCBtX2Zvcm1hdHRpbmdSb290KGRvd25jYXN0PENvbnRhaW5lcj4o
bV9mb3JtYXR0aW5nQ29udGV4dC5yb290KCkpKQordm9pZCBMaW5lOjphcHBlbmRJbmxpbmVDb250
YWluZXJFbmQoY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSkKIHsKKyAgICAvLyBUaGlzIGlz
IHJlYWxseSBqdXN0IGEgcGxhY2Vob2xkZXIgdG8gbWFyayB0aGUgZW5kIG9mIHRoZSBpbmxpbmUg
bGV2ZWwgY29udGFpbmVyLgorICAgIGF1dG8gbG9naWNhbFJlY3QgPSBEaXNwbGF5OjpSZWN0IHsg
MCwgY29udGVudExvZ2ljYWxSaWdodCgpLCBpbmxpbmVJdGVtLndpZHRoKCksIDAgfTsKKyAgICBh
cHBlbmROb25CcmVha2FibGVTcGFjZShpbmxpbmVJdGVtLCBsb2dpY2FsUmVjdCk7CiB9CiAKLXN0
YXRpYyBib29sIGlzVHJpbW1hYmxlQ29udGVudChjb25zdCBJbmxpbmVMaW5lQnJlYWtlcjo6UnVu
JiBydW4pCit2b2lkIExpbmU6OmFwcGVuZFRleHRDb250ZW50KGNvbnN0IElubGluZVRleHRJdGVt
JiBpbmxpbmVJdGVtLCBMYXlvdXRTaXplIHJ1blNpemUpCiB7Ci0gICAgcmV0dXJuIHJ1bi5jb250
ZW50LmlzV2hpdGVzcGFjZSgpICYmIHJ1bi5jb250ZW50LnN0eWxlKCkuY29sbGFwc2VXaGl0ZVNw
YWNlKCk7CisgICAgYXV0byBpc1RyaW1tYWJsZSA9IGlzVHJpbW1hYmxlQ29udGVudChpbmxpbmVJ
dGVtKTsKKyAgICBpZiAoIWlzVHJpbW1hYmxlKQorICAgICAgICBtX3RyaW1tYWJsZUNvbnRlbnQu
Y2xlYXIoKTsKKworICAgIGF1dG8gc2hvdWxkQ29sbGFwc2VDb21wbGV0ZWx5ID0gWyZdIHsKKyAg
ICAgICAgaWYgKCFpc1RyaW1tYWJsZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgLy8gTGVhZGluZyB3aGl0ZXNwYWNlLgorICAgICAgICBpZiAobV9saW5lSXRlbXMuaXNFbXB0
eSgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIC8vIENoZWNrIGlmIHRoZSBs
YXN0IGl0ZW0gaXMgdHJpbW1hYmxlIGFzIHdlbGwuCisgICAgICAgIGZvciAoaW50IGluZGV4ID0g
bV9saW5lSXRlbXMuc2l6ZSgpIC0gMTsgaW5kZXggPj0gMDsgLS1pbmRleCkgeworICAgICAgICAg
ICAgYXV0byYgaW5saW5lSXRlbSA9IG1fbGluZUl0ZW1zW2luZGV4XS0+aW5saW5lSXRlbTsKKyAg
ICAgICAgICAgIGlmIChpbmxpbmVJdGVtLmlzQm94KCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgaWYgKGlubGluZUl0ZW0uaXNUZXh0KCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGlubGluZUl0ZW0uaXNUZXh0KCkgJiYgaXNUcmltbWFibGVDb250ZW50KGRv
d25jYXN0PElubGluZVRleHRJdGVtPihpbmxpbmVJdGVtKSk7CisgICAgICAgICAgICBBU1NFUlQo
aW5saW5lSXRlbS5pc0NvbnRhaW5lclN0YXJ0KCkgfHwgaW5saW5lSXRlbS5pc0NvbnRhaW5lckVu
ZCgpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworCisgICAgLy8g
Q29sbGFwc2VkIGxpbmUgaXRlbXMgZG9uJ3QgY29udHJpYnV0ZSB0byB0aGUgbGluZSB3aWR0aC4K
KyAgICBhdXRvIGlzQ29tcGxldGVseUNvbGxhcHNlZCA9IHNob3VsZENvbGxhcHNlQ29tcGxldGVs
eSgpOworICAgIGF1dG8gY2FuQmVFeHRlbmRlZCA9ICFpc0NvbXBsZXRlbHlDb2xsYXBzZWQgJiYg
IWlubGluZUl0ZW0uaXNDb2xsYXBzZWQoKTsKKyAgICBhdXRvIGxvZ2ljYWxSZWN0ID0gRGlzcGxh
eTo6UmVjdCB7IC1pbmxpbmVJdGVtLnN0eWxlKCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSwgY29u
dGVudExvZ2ljYWxSaWdodCgpLCBydW5TaXplLndpZHRoKCksIHJ1blNpemUuaGVpZ2h0KCkgfTsK
KyAgICBhdXRvIHRleHRDb250ZXh0ID0gRGlzcGxheTo6UnVuOjpUZXh0Q29udGV4dCB7IGlubGlu
ZUl0ZW0uc3RhcnQoKSwgaW5saW5lSXRlbS5pc0NvbGxhcHNlZCgpID8gMSA6IGlubGluZUl0ZW0u
bGVuZ3RoKCkgfTsKKyAgICBhdXRvIGRpc3BsYXlSdW4gPSBEaXNwbGF5OjpSdW4obG9naWNhbFJl
Y3QsIHRleHRDb250ZXh0KTsKKworICAgIGF1dG8gbGluZUl0ZW0gPSBzdGQ6Om1ha2VfdW5pcXVl
PExpbmVJdGVtPihkaXNwbGF5UnVuLCBpbmxpbmVJdGVtLCBpc0NvbXBsZXRlbHlDb2xsYXBzZWQs
IGNhbkJlRXh0ZW5kZWQpOworICAgIGlmIChpc1RyaW1tYWJsZSkgCisgICAgICAgIG1fdHJpbW1h
YmxlQ29udGVudC5hZGQobGluZUl0ZW0uZ2V0KCkpOworCisgICAgbV9saW5lSXRlbXMuYXBwZW5k
KFdURk1vdmUobGluZUl0ZW0pKTsKKyAgICBtX2NvbnRlbnRMb2dpY2FsV2lkdGggKz0gaXNDb21w
bGV0ZWx5Q29sbGFwc2VkID8gTGF5b3V0VW5pdCgpIDogcnVuU2l6ZS53aWR0aCgpOwogfQogCi12
b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpsYXlvdXQoY29uc3QgSW5s
aW5lUnVuUHJvdmlkZXImIGlubGluZVJ1blByb3ZpZGVyKSBjb25zdAordm9pZCBMaW5lOjphcHBl
bmROb25SZXBsYWNlZElubGluZUJveChjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtLCBMYXlv
dXRTaXplIHJ1blNpemUpCiB7Ci0gICAgYXV0byYgbGF5b3V0U3RhdGUgPSBtX2Zvcm1hdHRpbmdD
b250ZXh0LmxheW91dFN0YXRlKCk7Ci0gICAgYXV0byBmbG9hdGluZ0NvbnRleHQgPSBGbG9hdGlu
Z0NvbnRleHQgeyBtX2Zsb2F0aW5nU3RhdGUgfTsKLQotICAgIExpbmUgbGluZTsKLSAgICBpbml0
aWFsaXplTmV3TGluZShsaW5lKTsKKyAgICBhdXRvIGFsaWduQW5kQWRqdXN0TGluZUhlaWdodCA9
IFsmXSB7CisgICAgICAgIGF1dG8gaW5saW5lQm94SGVpZ2h0ID0gcnVuU2l6ZS5oZWlnaHQoKTsK
KyAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gbG9vayBpbnNpZGUgdGhlIGlubGluZS1ibG9j
aydzIGZvcm1hdHRpbmcgY29udGV4dCBhbmQgY2hlY2sgdGhlIGxpbmVib3hlcyAoaWYgYW55KSB0
byBiZSBhYmxlIHRvIGJhc2VsaW5lIGFsaWduLgorICAgICAgICBpZiAoaW5saW5lSXRlbS5sYXlv
dXRCb3goKS5lc3RhYmxpc2hlc0lubGluZUZvcm1hdHRpbmdDb250ZXh0KCkpIHsKKyAgICAgICAg
ICAgIGlmIChpbmxpbmVCb3hIZWlnaHQgPT0gbG9naWNhbEhlaWdodCgpKQorICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGZhaWxzIHdoZW4gdGhlIGxp
bmUgaGVpZ2h0IGRpZmZlcmVuY2UgY29tZXMgZnJvbSBmb250LXNpemUgZGlmZi4gCisgICAgICAg
ICAgICBtX2xvZ2ljYWxIZWlnaHQuZGVwdGggPSBzdGQ6Om1heDxMYXlvdXRVbml0PigwLCBtX2xv
Z2ljYWxIZWlnaHQuZGVwdGgpOworICAgICAgICAgICAgbV9sb2dpY2FsSGVpZ2h0LmhlaWdodCA9
IHN0ZDo6bWF4KGlubGluZUJveEhlaWdodCwgbV9sb2dpY2FsSGVpZ2h0LmhlaWdodCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8gMCBkZXNjZW50IC0+IGJhc2Vs
aW5lIGFsaWdtZW50IGZvciBub3cuCisgICAgICAgIG1fbG9naWNhbEhlaWdodC5kZXB0aCA9IHN0
ZDo6bWF4PExheW91dFVuaXQ+KDAsIG1fbG9naWNhbEhlaWdodC5kZXB0aCk7CisgICAgICAgIG1f
bG9naWNhbEhlaWdodC5oZWlnaHQgPSBzdGQ6Om1heChpbmxpbmVCb3hIZWlnaHQsIG1fbG9naWNh
bEhlaWdodC5oZWlnaHQpOworICAgIH07CiAKLSAgICBJbmxpbmVMaW5lQnJlYWtlciBsaW5lQnJl
YWtlcihsYXlvdXRTdGF0ZSwgbV9mb3JtYXR0aW5nU3RhdGUuaW5saW5lQ29udGVudCgpLCBpbmxp
bmVSdW5Qcm92aWRlci5ydW5zKCkpOwotICAgIHdoaWxlIChhdXRvIHJ1biA9IGxpbmVCcmVha2Vy
Lm5leHRSdW4obGluZS5jb250ZW50TG9naWNhbFJpZ2h0KCksIGxpbmUuYXZhaWxhYmxlV2lkdGgo
KSwgIWxpbmUuaGFzQ29udGVudCgpKSkgewotICAgICAgICBhdXRvIGlzRmlyc3RSdW4gPSBydW4t
PnBvc2l0aW9uID09IElubGluZUxpbmVCcmVha2VyOjpSdW46OlBvc2l0aW9uOjpMaW5lQmVnaW47
Ci0gICAgICAgIGF1dG8gaXNMYXN0UnVuID0gcnVuLT5wb3NpdGlvbiA9PSBJbmxpbmVMaW5lQnJl
YWtlcjo6UnVuOjpQb3NpdGlvbjo6TGluZUVuZDsKLSAgICAgICAgYXV0byBnZW5lcmF0ZXNJbmxp
bmVSdW4gPSB0cnVlOworICAgIGFsaWduQW5kQWRqdXN0TGluZUhlaWdodCgpOworICAgIGF1dG8m
IGRpc3BsYXlCb3ggPSBtX2xheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goaW5saW5l
SXRlbS5sYXlvdXRCb3goKSk7CisgICAgYXV0byBsb2dpY2FsVG9wID0gLXJ1blNpemUuaGVpZ2h0
KCk7CisgICAgYXV0byBob3Jpem9udGFsTWFyZ2luID0gZGlzcGxheUJveC5ob3Jpem9udGFsTWFy
Z2luKCk7CisgICAgYXV0byBsb2dpY2FsUmVjdCA9IERpc3BsYXk6OlJlY3QgeyBsb2dpY2FsVG9w
LCBjb250ZW50TG9naWNhbFJpZ2h0KCkgKyBob3Jpem9udGFsTWFyZ2luLnN0YXJ0LCBydW5TaXpl
LndpZHRoKCksIHJ1blNpemUuaGVpZ2h0KCkgfTsKIAotICAgICAgICAvLyBQb3NpdGlvbiBmbG9h
dCBhbmQgYWRqdXN0IHRoZSBydW5zIG9uIGxpbmUuCi0gICAgICAgIGlmIChydW4tPmNvbnRlbnQu
aXNGbG9hdCgpKSB7Ci0gICAgICAgICAgICBhdXRvJiBmbG9hdEJveCA9IHJ1bi0+Y29udGVudC5p
bmxpbmVJdGVtKCkubGF5b3V0Qm94KCk7Ci0gICAgICAgICAgICBjb21wdXRlRmxvYXRQb3NpdGlv
bihmbG9hdGluZ0NvbnRleHQsIGxpbmUsIGZsb2F0Qm94KTsKLSAgICAgICAgICAgIG1fZmxvYXRp
bmdTdGF0ZS5hcHBlbmQoZmxvYXRCb3gpOworICAgIG1fbGluZUl0ZW1zLmFwcGVuZChzdGQ6Om1h
a2VfdW5pcXVlPExpbmVJdGVtPihEaXNwbGF5OjpSdW4geyBsb2dpY2FsUmVjdCB9LCBpbmxpbmVJ
dGVtLCBmYWxzZSwgZmFsc2UpKTsKKyAgICBtX2NvbnRlbnRMb2dpY2FsV2lkdGggKz0gKHJ1blNp
emUud2lkdGgoKSArIGhvcml6b250YWxNYXJnaW4uc3RhcnQgKyBob3Jpem9udGFsTWFyZ2luLmVu
ZCk7CisgICAgbV90cmltbWFibGVDb250ZW50LmNsZWFyKCk7Cit9CiAKLSAgICAgICAgICAgIGF1
dG8gZmxvYXRCb3hXaWR0aCA9IGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goZmxv
YXRCb3gpLm1hcmdpbkJveCgpLndpZHRoKCk7Ci0gICAgICAgICAgICAvLyBTaHJpbmsgYXZhaWxi
bGUgc3BhY2UgZm9yIGN1cnJlbnQgbGluZSBhbmQgbW92ZSBleGlzdGluZyBpbmxpbmUgcnVucy4K
LSAgICAgICAgICAgIGZsb2F0Qm94LmlzTGVmdEZsb2F0aW5nUG9zaXRpb25lZCgpID8gbGluZS5h
ZGp1c3RMb2dpY2FsTGVmdChmbG9hdEJveFdpZHRoKSA6IGxpbmUuYWRqdXN0TG9naWNhbFJpZ2h0
KGZsb2F0Qm94V2lkdGgpOwordm9pZCBMaW5lOjphcHBlbmRSZXBsYWNlZElubGluZUJveChjb25z
dCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtLCBMYXlvdXRTaXplIHJ1blNpemUpCit7CisgICAgLy8g
RklYTUUgU3VyZWx5IHJlcGxhY2VkIGJveGVzIGJlaGF2ZSBkaWZmZXJlbnRseS4KKyAgICBhcHBl
bmROb25SZXBsYWNlZElubGluZUJveChpbmxpbmVJdGVtLCBydW5TaXplKTsKK30KIAotICAgICAg
ICAgICAgZ2VuZXJhdGVzSW5saW5lUnVuID0gZmFsc2U7Ci0gICAgICAgIH0KK3ZvaWQgTGluZTo6
YXBwZW5kSGFyZExpbmVCcmVhayhjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtKQoreworICAg
IGF1dG8gYXNjZW50ID0gaW5saW5lSXRlbS5sYXlvdXRCb3goKS5zdHlsZSgpLmZvbnRNZXRyaWNz
KCkuYXNjZW50KCk7IAorICAgIGF1dG8gbG9naWNhbFJlY3QgPSBEaXNwbGF5OjpSZWN0IHsgLWFz
Y2VudCwgY29udGVudExvZ2ljYWxSaWdodCgpLCB7IH0sIGxvZ2ljYWxIZWlnaHQoKSB9OworICAg
IG1fbGluZUl0ZW1zLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPExpbmVJdGVtPihEaXNwbGF5OjpS
dW4geyBsb2dpY2FsUmVjdCB9LCBpbmxpbmVJdGVtLCBmYWxzZSwgZmFsc2UpKTsKK30KIAotICAg
ICAgICAvLyAxLiBJbml0aWFsaXplIG5ldyBsaW5lIGlmIG5lZWRlZC4KLSAgICAgICAgLy8gMi4g
QXBwZW5kIGlubGluZSBydW4gdW5sZXNzIGl0IGlzIHNraXBwZWQuCi0gICAgICAgIC8vIDMuIENs
b3NlIGN1cnJlbnQgbGluZSBpZiBuZWVkZWQuCi0gICAgICAgIGlmIChpc0ZpcnN0UnVuKSB7Ci0g
ICAgICAgICAgICAvLyBXaGVuIHRoZSBmaXJzdCBydW4gZG9lcyBub3QgZ2VuZXJhdGUgYW4gYWN0
dWFsIGlubGluZSBydW4sIHRoZSBuZXh0IHJ1biBjb21lcyBpbiBmaXJzdC1ydW4gYXMgd2VsbC4K
LSAgICAgICAgICAgIC8vIE5vIG5lZWQgdG8gc3BlbmQgdGltZSBvbiBjbG9zaW5nL2luaXRpYWxp
emluZy4KLSAgICAgICAgICAgIC8vIFNraXAgbGVhZGluZyB3aGl0ZXNwYWNlLgotICAgICAgICAg
ICAgaWYgKCFnZW5lcmF0ZXNJbmxpbmVSdW4gfHwgaXNUcmltbWFibGVDb250ZW50KCpydW4pKQot
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworc3RydWN0IFVuY29tbWl0dGVkQ29udGVudCB7Cisg
ICAgdm9pZCBhZGQoSW5saW5lSXRlbSYpOworICAgIHZvaWQgcmVzZXQoKTsKIAotICAgICAgICAg
ICAgaWYgKGxpbmUuaGFzQ29udGVudCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gUHJldmlvdXMg
cnVuIGVuZGVkIHVwIGJlaW5nIGF0IHRoZSBsaW5lIGVuZC4gQWRqdXN0IHRoZSBsaW5lIGFjY29y
ZGluZ2x5LgotICAgICAgICAgICAgICAgIGlmICghbGluZS5pc0Nsb3NlZCgpKQotICAgICAgICAg
ICAgICAgICAgICBjbG9zZUxpbmUobGluZSwgSXNMYXN0TGluZTo6Tm8pOwotICAgICAgICAgICAg
ICAgIGluaXRpYWxpemVOZXdMaW5lKGxpbmUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Cisg
ICAgVmVjdG9yPElubGluZUl0ZW0qPiBpbmxpbmVJdGVtcygpIHsgcmV0dXJuIG1faW5saW5lSXRl
bXM7IH0KKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2lubGluZUl0ZW1zLmlz
RW1wdHkoKTsgfQorICAgIExheW91dFVuaXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3dpZHRo
OyB9CiAKLSAgICAgICAgaWYgKGdlbmVyYXRlc0lubGluZVJ1bikgewotICAgICAgICAgICAgYXV0
byB3aWR0aCA9IHJ1bi0+d2lkdGg7Ci0gICAgICAgICAgICBhdXRvIGhlaWdodCA9IHJ1bi0+Y29u
dGVudC5pc1RleHQoKSA/IExheW91dFVuaXQobV9mb3JtYXR0aW5nUm9vdC5zdHlsZSgpLmNvbXB1
dGVkTGluZUhlaWdodCgpKSA6IGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gocnVu
LT5jb250ZW50LmlubGluZUl0ZW0oKS5sYXlvdXRCb3goKSkuaGVpZ2h0KCk7IAotICAgICAgICAg
ICAgYXBwZW5kQ29udGVudFRvTGluZShsaW5lLCBydW4tPmNvbnRlbnQsIHsgd2lkdGgsIGhlaWdo
dCB9KTsKLSAgICAgICAgfQorcHJpdmF0ZToKKyAgICBWZWN0b3I8SW5saW5lSXRlbSo+IG1faW5s
aW5lSXRlbXM7CisgICAgTGF5b3V0VW5pdCBtX3dpZHRoOworfTsKIAotICAgICAgICBpZiAoaXNM
YXN0UnVuKQotICAgICAgICAgICAgY2xvc2VMaW5lKGxpbmUsIElzTGFzdExpbmU6Ok5vKTsKLSAg
ICB9Cit2b2lkIFVuY29tbWl0dGVkQ29udGVudDo6YWRkKElubGluZUl0ZW0mIGlubGluZUl0ZW0p
Cit7CisgICAgbV9pbmxpbmVJdGVtcy5hcHBlbmQoJmlubGluZUl0ZW0pOworICAgIG1fd2lkdGgg
Kz0gaW5saW5lSXRlbS53aWR0aCgpOworfQogCi0gICAgY2xvc2VMaW5lKGxpbmUsIElzTGFzdExp
bmU6Olllcyk7Cit2b2lkIFVuY29tbWl0dGVkQ29udGVudDo6cmVzZXQoKQoreworICAgIG1faW5s
aW5lSXRlbXMuY2xlYXIoKTsKKyAgICBtX3dpZHRoID0gMDsKIH0KIAotdm9pZCBJbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6aW5pdGlhbGl6ZU5ld0xpbmUoTGluZSYgbGluZSkg
Y29uc3QKK0lubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpMaW5lTGF5b3V0KGNv
bnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBpbmxpbmVGb3JtYXR0aW5nQ29udGV4dCkKKyAg
ICA6IG1fZm9ybWF0dGluZ0NvbnRleHQoaW5saW5lRm9ybWF0dGluZ0NvbnRleHQpCisgICAgLCBt
X2Zvcm1hdHRpbmdTdGF0ZShtX2Zvcm1hdHRpbmdDb250ZXh0LmZvcm1hdHRpbmdTdGF0ZSgpKQor
ICAgICwgbV9mbG9hdGluZ1N0YXRlKG1fZm9ybWF0dGluZ1N0YXRlLmZsb2F0aW5nU3RhdGUoKSkK
KyAgICAsIG1fZm9ybWF0dGluZ1Jvb3QoZG93bmNhc3Q8Q29udGFpbmVyPihtX2Zvcm1hdHRpbmdD
b250ZXh0LnJvb3QoKSkpCiB7Ci0gICAgYXV0byYgZm9ybWF0dGluZ1Jvb3REaXNwbGF5Qm94ID0g
bV9mb3JtYXR0aW5nQ29udGV4dC5sYXlvdXRTdGF0ZSgpLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3go
bV9mb3JtYXR0aW5nUm9vdCk7Cit9CiAKK3ZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6Okxp
bmVMYXlvdXQ6OmluaXRpYWxpemVMaW5lKExpbmUmIGxpbmUsIExheW91dFVuaXQgbGluZUxvZ2lj
YWxUb3ApIGNvbnN0Cit7CisgICAgYXV0byYgZm9ybWF0dGluZ1Jvb3REaXNwbGF5Qm94ID0gbGF5
b3V0U3RhdGUoKS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KG1fZm9ybWF0dGluZ1Jvb3QpOwogICAg
IGF1dG8gbGluZUxvZ2ljYWxMZWZ0ID0gZm9ybWF0dGluZ1Jvb3REaXNwbGF5Qm94LmNvbnRlbnRC
b3hMZWZ0KCk7Ci0gICAgYXV0byBsaW5lTG9naWNhbFRvcCA9IGxpbmUuaXNGaXJzdExpbmUoKSA/
IGZvcm1hdHRpbmdSb290RGlzcGxheUJveC5jb250ZW50Qm94VG9wKCkgOiBsaW5lLmxvZ2ljYWxC
b3R0b20oKTsKICAgICBhdXRvIGF2YWlsYWJsZVdpZHRoID0gZm9ybWF0dGluZ1Jvb3REaXNwbGF5
Qm94LmNvbnRlbnRCb3hXaWR0aCgpOwogCiAgICAgLy8gQ2hlY2sgZm9yIGludHJ1ZGluZyBmbG9h
dHMgYW5kIGFkanVzdCBsb2dpY2FsIGxlZnQvYXZhaWxhYmxlIHdpZHRoIGZvciB0aGlzIGxpbmUg
YWNjb3JkaW5nbHkuCkBAIC0yOTEsMzE0ICszOTMsMjM5IEBAIHZvaWQgSW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQ6OkxpbmVMYXlvdXQ6OmluaXRpYWxpemVOZXdMaW5lKExpbmUmIGxpbmUpIGNvbnN0
CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBsaW5lLmluaXQoeyBsaW5lTG9naWNhbExlZnQsIGxp
bmVMb2dpY2FsVG9wIH0sIGF2YWlsYWJsZVdpZHRoLCBtX2Zvcm1hdHRpbmdSb290LnN0eWxlKCku
Y29tcHV0ZWRMaW5lSGVpZ2h0KCkpOworICAgIGF1dG8mIGZvcm1hdHRpbmdSb290U3R5bGUgPSBt
X2Zvcm1hdHRpbmdSb290LnN0eWxlKCk7CisgICAgYXV0byBtaW1pbXVtTGluZUhlaWdodCA9IGZv
cm1hdHRpbmdSb290U3R5bGUuY29tcHV0ZWRMaW5lSGVpZ2h0KCk7CisgICAgYXV0byBiYXNlbGlu
ZU9mZnNldCA9IGhhbGZMZWFkaW5nTWV0cmljcyhmb3JtYXR0aW5nUm9vdFN0eWxlLmZvbnRNZXRy
aWNzKCksIG1pbWltdW1MaW5lSGVpZ2h0KS5oZWlnaHQ7CisgICAgbGluZS5yZXNldCh7IGxpbmVM
b2dpY2FsTGVmdCwgbGluZUxvZ2ljYWxUb3AgfSwgYXZhaWxhYmxlV2lkdGgsIG1pbWltdW1MaW5l
SGVpZ2h0LCBiYXNlbGluZU9mZnNldCk7CiB9CiAKLXZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQ6OkxpbmVMYXlvdXQ6OnNwbGl0SW5saW5lUnVuSWZOZWVkZWQoY29uc3QgSW5saW5lUnVuJiBp
bmxpbmVSdW4sIElubGluZVJ1bnMmIHNwbGl0UnVucykgY29uc3QKK3ZvaWQgSW5saW5lRm9ybWF0
dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OmxheW91dCgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGlu
bGluZVJ1bi50ZXh0Q29udGV4dCgpKTsKLSAgICBBU1NFUlQoaW5saW5lUnVuLm92ZXJsYXBzTXVs
dGlwbGVJbmxpbmVJdGVtcygpKTsKLSAgICAvLyBJbiBjZXJ0YWluIGNhc2VzLCBhIHJ1biBjYW4g
b3ZlcmxhcCBtdWx0aXBsZSBpbmxpbmUgZWxlbWVudHMgbGlrZSB0aGlzOgotICAgIC8vIDxzcGFu
Pm5vcm1hbCB0ZXh0IGNvbnRlbnQ8L3NwYW4+PHNwYW4gc3R5bGU9InBvc2l0aW9uOiByZWxhdGl2
ZTsgbGVmdDogMTBweDsiPmJ1dCB0aGlzIG9uZSBuZWVkcyBhIGRlZGljYXRlZCBydW48L3NwYW4+
PHNwYW4+ZW5kIG9mIHRleHQ8L3NwYW4+Ci0gICAgLy8gVGhlIGNvbnRlbnQgYWJvdmUgZ2VuZXJh
dGVzIG9uZSBsb25nIHJ1biA8bm9ybWFsIHRleHQgY29udGVudGJ1dCB0aGlzIG9uZSBuZWVkcyBk
ZWRpY2F0ZWQgcnVuZW5kIG9mIHRleHQ+Ci0gICAgLy8gSG93ZXZlciwgc2luY2UgdGhlIG1pZGRs
ZSBydW4gaXMgcG9zaXRpb25lZCwgaXQgbmVlZHMgdG8gYmUgbW92ZWQgaW5kZXBlbmRlbnRseSBm
cm9tIHRoZSByZXN0IG9mIHRoZSBjb250ZW50LCBoZW5jZSBpdCBuZWVkcyBhIGRlZGljYXRlZCBp
bmxpbmUgcnVuLgotCi0gICAgLy8gMS4gU3RhcnQgd2l0aCB0aGUgZmlyc3QgaW5saW5lIGl0ZW0g
KGVsZW1lbnQpIGFuZCB0cmF2ZXJzIHRoZSBsaXN0IHVudGlsCi0gICAgLy8gMi4gZWl0aGVyIGZp
bmQgYW4gaW5saW5lIGl0ZW0gdGhhdCBuZWVkcyBhIGRlZGljYXRlZCBydW4gb3Igd2UgcmVhY2gg
dGhlIGVuZCBvZiB0aGUgcnVuCi0gICAgLy8gMy4gQ3JlYXRlIGRlZGljYXRlIGlubGluZSBydW5z
LgotICAgIGF1dG8mIGlubGluZUNvbnRlbnQgPSBtX2Zvcm1hdHRpbmdTdGF0ZS5pbmxpbmVDb250
ZW50KCk7Ci0gICAgYXV0byBjb250ZW50U3RhcnQgPSBpbmxpbmVSdW4ubG9naWNhbExlZnQoKTsK
LSAgICBhdXRvIHN0YXJ0UG9zaXRpb24gPSBpbmxpbmVSdW4udGV4dENvbnRleHQoKS0+c3RhcnQo
KTsKLSAgICBhdXRvIHJlbWFuaW5nTGVuZ3RoID0gaW5saW5lUnVuLnRleHRDb250ZXh0KCktPmxl
bmd0aCgpOwotCi0gICAgc3RydWN0IFVuY29tbWl0dGVkIHsKLSAgICAgICAgY29uc3QgSW5saW5l
SXRlbSogZmlyc3RJbmxpbmVJdGVtIHsgbnVsbHB0ciB9OwotICAgICAgICBjb25zdCBJbmxpbmVJ
dGVtKiBsYXN0SW5saW5lSXRlbSB7IG51bGxwdHIgfTsKLSAgICAgICAgdW5zaWduZWQgbGVuZ3Ro
IHsgMCB9OwotICAgIH07Ci0gICAgT3B0aW9uYWw8VW5jb21taXR0ZWQ+IHVuY29tbWl0dGVkOwot
Ci0gICAgYXV0byBjb21taXQgPSBbJl0gewotICAgICAgICBpZiAoIXVuY29tbWl0dGVkKQotICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGNvbnRlbnRTdGFydCArPSB1bmNvbW1pdHRlZC0+
Zmlyc3RJbmxpbmVJdGVtLT5ub25CcmVha2FibGVTdGFydCgpOwotCi0gICAgICAgIGF1dG8gcnVu
V2lkdGggPSB0aGlzLT5ydW5XaWR0aChpbmxpbmVDb250ZW50LCAqdW5jb21taXR0ZWQtPmZpcnN0
SW5saW5lSXRlbSwgc3RhcnRQb3NpdGlvbiwgdW5jb21taXR0ZWQtPmxlbmd0aCwgY29udGVudFN0
YXJ0KTsKLSAgICAgICAgYXV0byBydW4gPSBJbmxpbmVSdW4geyB7IGlubGluZVJ1bi5sb2dpY2Fs
VG9wKCksIGNvbnRlbnRTdGFydCwgcnVuV2lkdGgsIGlubGluZVJ1bi5sb2dpY2FsSGVpZ2h0KCkg
fSwgKnVuY29tbWl0dGVkLT5maXJzdElubGluZUl0ZW0gfTsKLSAgICAgICAgcnVuLnNldFRleHRD
b250ZXh0KHsgc3RhcnRQb3NpdGlvbiwgdW5jb21taXR0ZWQtPmxlbmd0aCB9KTsKLSAgICAgICAg
c3BsaXRSdW5zLmFwcGVuZChydW4pOwotCi0gICAgICAgIGNvbnRlbnRTdGFydCArPSBydW5XaWR0
aCArIHVuY29tbWl0dGVkLT5sYXN0SW5saW5lSXRlbS0+bm9uQnJlYWthYmxlRW5kKCk7Ci0KLSAg
ICAgICAgc3RhcnRQb3NpdGlvbiA9IDA7Ci0gICAgICAgIHVuY29tbWl0dGVkID0geyB9OworICAg
IGF1dG8gZmxvYXRpbmdDb250ZXh0ID0gRmxvYXRpbmdDb250ZXh0IHsgbV9mbG9hdGluZ1N0YXRl
IH07CisgICAgTGluZSBsaW5lKGxheW91dFN0YXRlKCkpOworICAgIGluaXRpYWxpemVMaW5lKGxp
bmUsIGxheW91dFN0YXRlKCkuZGlzcGxheUJveEZvckxheW91dEJveChtX2Zvcm1hdHRpbmdSb290
KS5jb250ZW50Qm94VG9wKCkpOworCisgICAgVW5jb21taXR0ZWRDb250ZW50IHVuY29tbWl0dGVk
Q29udGVudDsKKyAgICBhdXRvIGNvbW1pdFBlbmRpbmdDb250ZW50ID0gWyZdIHsKKyAgICAgICAg
Zm9yIChhdXRvKiB1bmNvbW1pdHRlZCA6IHVuY29tbWl0dGVkQ29udGVudC5pbmxpbmVJdGVtcygp
KQorICAgICAgICAgICAgY29tbWl0SW5saW5lSXRlbVRvTGluZShsaW5lLCAqdW5jb21taXR0ZWQp
OworICAgICAgICB1bmNvbW1pdHRlZENvbnRlbnQucmVzZXQoKTsKICAgICB9OwogCi0gICAgZm9y
IChhdXRvIGl0ZXJhdG9yID0gaW5saW5lQ29udGVudC5maW5kKGNvbnN0X2Nhc3Q8SW5saW5lSXRl
bSo+KCZpbmxpbmVSdW4uaW5saW5lSXRlbSgpKSk7IGl0ZXJhdG9yICE9IGlubGluZUNvbnRlbnQu
ZW5kKCkgJiYgcmVtYW5pbmdMZW5ndGggPiAwOyArK2l0ZXJhdG9yKSB7Ci0gICAgICAgIGF1dG8m
IGlubGluZUl0ZW0gPSAqKml0ZXJhdG9yOworICAgIExpbmVCcmVha2VyIGxpbmVCcmVha2VyKGxh
eW91dFN0YXRlKCkpOworICAgIGF1dG8mIGlubGluZUNvbnRlbnQgPSBtX2Zvcm1hdHRpbmdTdGF0
ZS5pbmxpbmVJdGVtcygpOworICAgIGZvciAoYXV0byYgaW5saW5lSXRlbSA6IGlubGluZUNvbnRl
bnQpIHsKKyAgICAgICAgLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSBpbmxpbmUgY29udGVudCBhbmQg
dHJ5IHRvIHB1dCB0aGUgaW5saW5lIGJveGVzIG9uIHRoZSBjdXJyZW50IGxpbmUuCisgICAgICAg
IGlmIChpbmxpbmVJdGVtLT5pc0hhcmRMaW5lQnJlYWsoKSkgeworICAgICAgICAgICAgLy8gQ2xv
c2UgdGhlIGN1cnJlbnQgbGluZSB0aGVuIGNyZWF0ZSBhbmQgaW1tZWRpYXRlbHkgY2xvc2UgYW5v
dGhlciBvbmUuCisgICAgICAgICAgICBjb21taXRQZW5kaW5nQ29udGVudCgpOworICAgICAgICAg
ICAgY29tbWl0SW5saW5lSXRlbVRvTGluZShsaW5lLCAqaW5saW5lSXRlbSk7CisgICAgICAgICAg
ICBjbG9zZUxpbmUobGluZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhdXRvIGF2
YWlsYWJsZVdpZHRoID0gbGluZS5hdmFpbGFibGVXaWR0aCgpIC0gdW5jb21taXR0ZWRDb250ZW50
LndpZHRoKCk7CisgICAgICAgICAgICBhdXRvIGN1cnJlbnRMb2dpY2FsUmlnaHQgPSBsaW5lLmNv
bnRlbnRMb2dpY2FsUmlnaHQoKSArIHVuY29tbWl0dGVkQ29udGVudC53aWR0aCgpOworICAgICAg
ICAgICAgLy8gRklYTUU6IEVuc3VyZSBMaW5lQ29udGV4dDo6dHJpbW1hYmxlV2lkdGggaW5jbHVk
ZXMgdW5jb21taXR0ZWQgY29udGVudCBpZiBuZWVkZWQuCisgICAgICAgICAgICBhdXRvIGJyZWFr
aW5nQ29udGV4dCA9IGxpbmVCcmVha2VyLmJyZWFraW5nQ29udGV4dCgqaW5saW5lSXRlbSwgeyBh
dmFpbGFibGVXaWR0aCwgY3VycmVudExvZ2ljYWxSaWdodCwgbGluZS50cmFpbGluZ1RyaW1tYWJs
ZVdpZHRoKCksICFsaW5lLmhhc0NvbnRlbnQoKSB9KTsKKyAgICAgICAgICAgIGlmIChicmVha2lu
Z0NvbnRleHQuaXNBdEJyZWFraW5nT3Bwb3J0dW5pdHkpCisgICAgICAgICAgICAgICAgY29tbWl0
UGVuZGluZ0NvbnRlbnQoKTsKKworICAgICAgICAgICAgaWYgKGJyZWFraW5nQ29udGV4dC5icmVh
a2luZ0JlaGF2aW9yID09IExpbmVCcmVha2VyOjpCcmVha2luZ0JlaGF2aW9yOjpCcmVhaykgewor
ICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7CisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgLy8gU2tpcCBhbGwgbm9u
LWluZmxvdyBib3hlcyAoZmxvYXRzLCBvdXQtb2YtZmxvdyBwb3NpdGlvbmVkIGVsZW1lbnRzKS4g
VGhleSBkb24ndCBwYXJ0aWNpcGF0ZSBpbiB0aGUgaW5saW5lIHJ1biBjb250ZXh0LgotICAgICAg
ICBpZiAoIWlubGluZUl0ZW0ubGF5b3V0Qm94KCkuaXNJbkZsb3coKSkKLSAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgaWYgKGJyZWFraW5nQ29udGV4dC5icmVha2luZ0JlaGF2aW9y
ID09IExpbmVCcmVha2VyOjpCcmVha2luZ0JlaGF2aW9yOjpXcmFwKQorICAgICAgICAgICAgICAg
IGNsb3NlTGluZShsaW5lKTsKIAotICAgICAgICBhdXRvIGN1cnJlbnRMZW5ndGggPSBbJl0gewot
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWluKHJlbWFuaW5nTGVuZ3RoLCBpbmxpbmVJdGVtLnRl
eHRDb250ZW50KCkubGVuZ3RoKCkgLSBzdGFydFBvc2l0aW9uKTsKLSAgICAgICAgfTsKLQotICAg
ICAgICAvLyAxLiBCcmVhayBiZWZvcmUvYWZ0ZXIgLT4gcmVxdWlyZXMgZGVkaWNhdGVkIHJ1biAt
PiBjb21taXQgd2hhdCB3ZSd2ZSBnb3Qgc28gZmFyIGFuZCBhbHNvIGNvbW1pdCB0aGUgY3VycmVu
dCBpbmxpbmUgZWxlbWVudCBhcyBhIHNlcGFyYXRlIGlubGluZSBydW4uCi0gICAgICAgIC8vIDIu
IEJyZWFrIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGlubGluZSBlbGVtZW50IC0+IGNvbW1pdCB3
aGF0IHdlJ3ZlIGdvdCBzbyBmYXIuIEN1cnJlbnQgZWxlbWVudCBiZWNvbWVzIHRoZSBmaXJzdCB1
bmNvbW1pdHRlZC4KLSAgICAgICAgLy8gMy4gQnJlYWsgYXQgdGhlIGVuZCBvZiB0aGUgaW5saW5l
IGVsZW1lbnQgLT4gY29tbWl0IHdoYXQgd2UndmUgZ290IHNvIGZhciBpbmNsdWRpbmcgdGhlIGN1
cnJlbnQgZWxlbWVudC4KLSAgICAgICAgLy8gNC4gSW5saW5lIGVsZW1lbnQgZG9lcyBub3QgcmVx
dWlyZSBydW4gYnJlYWtpbmcgLT4gYWRkIGN1cnJlbnQgaW5saW5lIGVsZW1lbnQgdG8gdW5jb21t
aXR0ZWQuIEp1bXAgdG8gdGhlIG5leHQgZWxlbWVudC4KLSAgICAgICAgYXV0byBkZXRhY2hpbmdS
dWxlcyA9IGlubGluZUl0ZW0uZGV0YWNoaW5nUnVsZXMoKTsKLQotICAgICAgICAvLyAjMQotICAg
ICAgICBpZiAoZGV0YWNoaW5nUnVsZXMuY29udGFpbnNBbGwoeyBJbmxpbmVJdGVtOjpEZXRhY2hp
bmdSdWxlOjpCcmVha0F0U3RhcnQsIElubGluZUl0ZW06OkRldGFjaGluZ1J1bGU6OkJyZWFrQXRF
bmQgfSkpIHsKLSAgICAgICAgICAgIGNvbW1pdCgpOwotICAgICAgICAgICAgYXV0byBjb250ZW50
TGVuZ3RoID0gY3VycmVudExlbmd0aCgpOwotICAgICAgICAgICAgdW5jb21taXR0ZWQgPSBVbmNv
bW1pdHRlZCB7ICZpbmxpbmVJdGVtLCAmaW5saW5lSXRlbSwgY29udGVudExlbmd0aCB9OwotICAg
ICAgICAgICAgcmVtYW5pbmdMZW5ndGggLT0gY29udGVudExlbmd0aDsKLSAgICAgICAgICAgIGNv
bW1pdCgpOwotICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAoaW5saW5lSXRl
bS0+aXNGbG9hdCgpKQorICAgICAgICAgICAgICAgIGhhbmRsZUZsb2F0KGxpbmUsIGZsb2F0aW5n
Q29udGV4dCwgKmlubGluZUl0ZW0pOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgaWYgKGJyZWFraW5nQ29udGV4dC5pc0F0QnJlYWtpbmdPcHBvcnR1bml0eSkKKyAgICAgICAg
ICAgICAgICAgICAgY29tbWl0SW5saW5lSXRlbVRvTGluZShsaW5lLCAqaW5saW5lSXRlbSk7Cisg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB1bmNvbW1pdHRlZENvbnRl
bnQuYWRkKCppbmxpbmVJdGVtKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQotCi0gICAgICAg
IC8vICMyCi0gICAgICAgIGlmIChkZXRhY2hpbmdSdWxlcy5jb250YWlucyhJbmxpbmVJdGVtOjpE
ZXRhY2hpbmdSdWxlOjpCcmVha0F0U3RhcnQpKQotICAgICAgICAgICAgY29tbWl0KCk7Ci0KLSAg
ICAgICAgLy8gQWRkIGN1cnJlbnQgaW5saW5lIGl0ZW0gdG8gdW5jb21taXR0ZWQuCi0gICAgICAg
IC8vICMzIGFuZCAjNAotICAgICAgICBhdXRvIGNvbnRlbnRMZW5ndGggPSBjdXJyZW50TGVuZ3Ro
KCk7Ci0gICAgICAgIGlmICghdW5jb21taXR0ZWQpCi0gICAgICAgICAgICB1bmNvbW1pdHRlZCA9
IFVuY29tbWl0dGVkIHsgJmlubGluZUl0ZW0sICZpbmxpbmVJdGVtLCAwIH07Ci0gICAgICAgIHVu
Y29tbWl0dGVkLT5sZW5ndGggKz0gY29udGVudExlbmd0aDsKLSAgICAgICAgdW5jb21taXR0ZWQt
Pmxhc3RJbmxpbmVJdGVtID0gJmlubGluZUl0ZW07Ci0gICAgICAgIHJlbWFuaW5nTGVuZ3RoIC09
IGNvbnRlbnRMZW5ndGg7Ci0KLSAgICAgICAgLy8gIzMKLSAgICAgICAgaWYgKGRldGFjaGluZ1J1
bGVzLmNvbnRhaW5zKElubGluZUl0ZW06OkRldGFjaGluZ1J1bGU6OkJyZWFrQXRFbmQpKQotICAg
ICAgICAgICAgY29tbWl0KCk7CiAgICAgfQotICAgIC8vIEVpdGhlciBhbGwgaW5saW5lIGVsZW1l
bnRzIG5lZWRlZCBkZWRpY2F0ZWQgcnVucyBvciBuZWl0aGVyIG9mIHRoZW0uCi0gICAgaWYgKCFy
ZW1hbmluZ0xlbmd0aCB8fCByZW1hbmluZ0xlbmd0aCA9PSBpbmxpbmVSdW4udGV4dENvbnRleHQo
KS0+bGVuZ3RoKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNvbW1pdCgpOwotfQotCi12b2lk
IElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpjcmVhdGVGaW5hbFJ1bnMoTGlu
ZSYgbGluZSkgY29uc3QKLXsKLSAgICBmb3IgKGF1dG8mIGlubGluZVJ1biA6IGxpbmUucnVucygp
KSB7Ci0gICAgICAgIGlmIChpbmxpbmVSdW4ub3ZlcmxhcHNNdWx0aXBsZUlubGluZUl0ZW1zKCkp
IHsKLSAgICAgICAgICAgIElubGluZVJ1bnMgc3BsaXRSdW5zOwotICAgICAgICAgICAgc3BsaXRJ
bmxpbmVSdW5JZk5lZWRlZChpbmxpbmVSdW4sIHNwbGl0UnVucyk7Ci0gICAgICAgICAgICBmb3Ig
KGF1dG8mIHNwbGl0UnVuIDogc3BsaXRSdW5zKQotICAgICAgICAgICAgICAgIG1fZm9ybWF0dGlu
Z1N0YXRlLmFwcGVuZElubGluZVJ1bihzcGxpdFJ1bik7Ci0KLSAgICAgICAgICAgIGlmICghc3Bs
aXRSdW5zLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGF1dG8gZmluYWxSdW4gPSBbJl0gewotICAgICAgICAgICAgYXV0byYgaW5saW5l
SXRlbSA9IGlubGluZVJ1bi5pbmxpbmVJdGVtKCk7Ci0gICAgICAgICAgICBpZiAoaW5saW5lSXRl
bS5kZXRhY2hpbmdSdWxlcygpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gaW5s
aW5lUnVuOwotCi0gICAgICAgICAgICBJbmxpbmVSdW4gYWRqdXN0ZWRSdW4gPSBpbmxpbmVSdW47
Ci0gICAgICAgICAgICBhdXRvIHdpZHRoID0gaW5saW5lUnVuLmxvZ2ljYWxXaWR0aCgpIC0gaW5s
aW5lSXRlbS5ub25CcmVha2FibGVTdGFydCgpIC0gaW5saW5lSXRlbS5ub25CcmVha2FibGVFbmQo
KTsKLSAgICAgICAgICAgIGFkanVzdGVkUnVuLnNldExvZ2ljYWxMZWZ0KGlubGluZVJ1bi5sb2dp
Y2FsTGVmdCgpICsgaW5saW5lSXRlbS5ub25CcmVha2FibGVTdGFydCgpKTsKLSAgICAgICAgICAg
IGFkanVzdGVkUnVuLnNldExvZ2ljYWxXaWR0aCh3aWR0aCk7Ci0gICAgICAgICAgICByZXR1cm4g
YWRqdXN0ZWRSdW47Ci0gICAgICAgIH07Ci0KLSAgICAgICAgbV9mb3JtYXR0aW5nU3RhdGUuYXBw
ZW5kSW5saW5lUnVuKGZpbmFsUnVuKCkpOworICAgIC8vIFByb2Nlc3MgcmVtYWluaW5nIHVuY29t
bWl0dGVkIGNvbnRlbnQuCisgICAgaWYgKCF1bmNvbW1pdHRlZENvbnRlbnQuaXNFbXB0eSgpKSB7
CisgICAgICAgIGlmIChsaW5lLmF2YWlsYWJsZVdpZHRoKCkgPCB1bmNvbW1pdHRlZENvbnRlbnQu
d2lkdGgoKSkKKyAgICAgICAgICAgIGNsb3NlTGluZShsaW5lKTsKKyAgICAgICAgY29tbWl0UGVu
ZGluZ0NvbnRlbnQoKTsKICAgICB9CisgICAgY2xvc2VMaW5lKGxpbmUpOwogfQogCi12b2lkIElu
bGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0Ojpwb3N0UHJvY2Vzc0lubGluZVJ1bnMo
TGluZSYgbGluZSwgSXNMYXN0TGluZSBpc0xhc3RMaW5lKSBjb25zdAordm9pZCBJbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6Y2xvc2VMaW5lKExpbmUmIGxpbmUpIGNvbnN0CiB7
Ci0gICAgYWxpZ25SdW5zKG1fZm9ybWF0dGluZ1Jvb3Quc3R5bGUoKS50ZXh0QWxpZ24oKSwgbGlu
ZSwgaXNMYXN0TGluZSk7Ci0gICAgYXV0byBmaXJzdFJ1bkluZGV4ID0gbV9mb3JtYXR0aW5nU3Rh
dGUuaW5saW5lUnVucygpLnNpemUoKTsKLSAgICBjcmVhdGVGaW5hbFJ1bnMobGluZSk7CisgICAg
YXV0byYgbGluZUl0ZW1zID0gbGluZS5jbG9zZSgpOworICAgIGlmIChsaW5lSXRlbXMuaXNFbXB0
eSgpKSB7CisgICAgICAgIC8vIFNwZWMgdGVsbHMgdXMgdG8gY3JlYXRlIGEgemVybyBoZWlnaHQs
IGVtcHR5IGxpbmUgYm94LgorICAgICAgICBhdXRvIGxpbmVCb3ggPSBEaXNwbGF5OjpSZWN0IHsg
bGluZS5sb2dpY2FsVG9wKCksIGxpbmUubG9naWNhbExlZnQoKSwgMCAsIDAgfTsKKyAgICAgICAg
bV9mb3JtYXR0aW5nU3RhdGUuYWRkTGluZUJveCh7IGxpbmVCb3ggfSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CiAKLSAgICBwbGFjZUluRmxvd1Bvc2l0aW9uZWRDaGlsZHJlbihmaXJzdFJ1bklu
ZGV4KTsKLX0KKyAgICBhdXRvJiBpbmxpbmVEaXNwbGF5UnVucyA9IG1fZm9ybWF0dGluZ1N0YXRl
LmlubGluZVJ1bnMoKTsgCisgICAgT3B0aW9uYWw8dW5zaWduZWQ+IHByZXZpb3VzTGluZUxhc3RS
dW5JbmRleCA9IGlubGluZURpc3BsYXlSdW5zLmlzRW1wdHkoKSA/IE9wdGlvbmFsPHVuc2lnbmVk
PigpIDogaW5saW5lRGlzcGxheVJ1bnMuc2l6ZSgpIC0gMTsKKyAgICAvLyA5LjQuMiBJbmxpbmUg
Zm9ybWF0dGluZyBjb250ZXh0cworICAgIC8vIEEgbGluZSBib3ggaXMgYWx3YXlzIHRhbGwgZW5v
dWdoIGZvciBhbGwgb2YgdGhlIGJveGVzIGl0IGNvbnRhaW5zLgorICAgIGF1dG8gbGluZUJveCA9
IERpc3BsYXk6OlJlY3QgeyBsaW5lLmxvZ2ljYWxUb3AoKSwgbGluZS5sb2dpY2FsTGVmdCgpLCAw
ICwgbGluZS5sb2dpY2FsSGVpZ2h0KCkgfTsKKyAgICAvLyBDcmVhdGUgZmluYWwgZGlzcGxheSBy
dW5zLgorICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IGxpbmVJdGVtcy5zaXpl
KCk7ICsraW5kZXgpIHsKKyAgICAgICAgYXV0byYgbGluZUl0ZW0gPSBsaW5lSXRlbXMuYXQoaW5k
ZXgpOworCisgICAgICAgIGF1dG8mIGlubGluZUl0ZW0gPSBsaW5lSXRlbS0+aW5saW5lSXRlbTsK
KyAgICAgICAgYXV0byYgaW5saW5lUnVuID0gbGluZUl0ZW0tPmlubGluZVJ1bjsKKyAgICAgICAg
YXV0byYgbGF5b3V0Qm94ID0gaW5saW5lSXRlbS5sYXlvdXRCb3goKTsKKyAgICAgICAgYXV0byYg
ZGlzcGxheUJveCA9IGxheW91dFN0YXRlKCkuZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRC
b3gpOworCisgICAgICAgIGlmIChpbmxpbmVJdGVtLmlzSGFyZExpbmVCcmVhaygpKSB7CisgICAg
ICAgICAgICBkaXNwbGF5Qm94LnNldFRvcExlZnQoaW5saW5lUnVuLmxvZ2ljYWxUb3BMZWZ0KCkp
OworICAgICAgICAgICAgZGlzcGxheUJveC5zZXRDb250ZW50Qm94V2lkdGgoaW5saW5lUnVuLmxv
Z2ljYWxXaWR0aCgpKTsKKyAgICAgICAgICAgIGRpc3BsYXlCb3guc2V0Q29udGVudEJveEhlaWdo
dChpbmxpbmVSdW4ubG9naWNhbEhlaWdodCgpKTsKKyAgICAgICAgICAgIG1fZm9ybWF0dGluZ1N0
YXRlLmFkZElubGluZVJ1bihzdGQ6Om1ha2VfdW5pcXVlPERpc3BsYXk6OlJ1bj4oaW5saW5lUnVu
KSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQogCi12b2lkIElubGluZUZvcm1h
dHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpjbG9zZUxpbmUoTGluZSYgbGluZSwgSXNMYXN0TGlu
ZSBpc0xhc3RMaW5lKSBjb25zdAotewotICAgIGxpbmUuY2xvc2UoKTsKLSAgICBpZiAoIWxpbmUu
aGFzQ29udGVudCgpKQotICAgICAgICByZXR1cm47CisgICAgICAgIC8vIElubGluZSBsZXZlbCBi
b3ggKHJlcGxhY2VkIG9yIGlubGluZS1ibG9jaykKKyAgICAgICAgaWYgKGlubGluZUl0ZW0uaXNC
b3goKSkgeworICAgICAgICAgICAgYXV0byB0b3BMZWZ0ID0gaW5saW5lUnVuLmxvZ2ljYWxUb3BM
ZWZ0KCk7CisgICAgICAgICAgICBpZiAobGF5b3V0Qm94LmlzSW5GbG93UG9zaXRpb25lZCgpKQor
ICAgICAgICAgICAgICAgIHRvcExlZnQgKz0gR2VvbWV0cnk6OmluRmxvd1Bvc2l0aW9uZWRQb3Np
dGlvbk9mZnNldChsYXlvdXRTdGF0ZSgpLCBsYXlvdXRCb3gpOworICAgICAgICAgICAgZGlzcGxh
eUJveC5zZXRUb3BMZWZ0KHRvcExlZnQpOworICAgICAgICAgICAgbGluZUJveC5leHBhbmRIb3Jp
em9udGFsbHkoaW5saW5lUnVuLmxvZ2ljYWxXaWR0aCgpKTsKKyAgICAgICAgICAgIG1fZm9ybWF0
dGluZ1N0YXRlLmFkZElubGluZVJ1bihzdGQ6Om1ha2VfdW5pcXVlPERpc3BsYXk6OlJ1bj4oaW5s
aW5lUnVuKSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQogCi0gICAgcG9zdFBy
b2Nlc3NJbmxpbmVSdW5zKGxpbmUsIGlzTGFzdExpbmUpOwotfQorICAgICAgICAvLyBJbmxpbmUg
bGV2ZWwgY29udGFpbmVyIHN0YXJ0ICg8c3Bhbj4pCisgICAgICAgIGlmIChpbmxpbmVJdGVtLmlz
Q29udGFpbmVyU3RhcnQoKSkgeworICAgICAgICAgICAgZGlzcGxheUJveC5zZXRUb3BMZWZ0KGlu
bGluZVJ1bi5sb2dpY2FsVG9wTGVmdCgpKTsKKyAgICAgICAgICAgIGxpbmVCb3guZXhwYW5kSG9y
aXpvbnRhbGx5KGlubGluZVJ1bi5sb2dpY2FsV2lkdGgoKSk7CisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgfQogCi12b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0
OjphcHBlbmRDb250ZW50VG9MaW5lKExpbmUmIGxpbmUsIGNvbnN0IElubGluZVJ1blByb3ZpZGVy
OjpSdW4mIHJ1biwgY29uc3QgTGF5b3V0U2l6ZSYgcnVuU2l6ZSkgY29uc3QKLXsKLSAgICBhdXRv
IGxhc3RSdW5UeXBlID0gbGluZS5sYXN0UnVuVHlwZSgpOwotICAgIGxpbmUuYXBwZW5kQ29udGVu
dChydW4sIHJ1blNpemUpOworICAgICAgICAvLyBJbmxpbmUgbGV2ZWwgY29udGFpbmVyIGVuZCAo
PC9zcGFuPikKKyAgICAgICAgaWYgKGlubGluZUl0ZW0uaXNDb250YWluZXJFbmQoKSkgeworICAg
ICAgICAgICAgaWYgKGxheW91dEJveC5pc0luRmxvd1Bvc2l0aW9uZWQoKSkgeworICAgICAgICAg
ICAgICAgIGF1dG8gaW5mbG93T2Zmc2V0ID0gR2VvbWV0cnk6OmluRmxvd1Bvc2l0aW9uZWRQb3Np
dGlvbk9mZnNldChsYXlvdXRTdGF0ZSgpLCBsYXlvdXRCb3gpOworICAgICAgICAgICAgICAgIGRp
c3BsYXlCb3gubW92ZUhvcml6b250YWxseShpbmZsb3dPZmZzZXQud2lkdGgoKSk7CisgICAgICAg
ICAgICAgICAgZGlzcGxheUJveC5tb3ZlVmVydGljYWxseShpbmZsb3dPZmZzZXQuaGVpZ2h0KCkp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXV0byBtYXJnaW5Cb3hXaWR0aCA9IGlubGlu
ZVJ1bi5sb2dpY2FsTGVmdCgpIC0gZGlzcGxheUJveC5sZWZ0KCk7CisgICAgICAgICAgICBhdXRv
IGNvbnRlbnRCb3hXaWR0aCA9IG1hcmdpbkJveFdpZHRoIC0gKGRpc3BsYXlCb3gubWFyZ2luU3Rh
cnQoKSArIGRpc3BsYXlCb3guYm9yZGVyTGVmdCgpICsgZGlzcGxheUJveC5wYWRkaW5nTGVmdCgp
LnZhbHVlT3IoMCkpOworICAgICAgICAgICAgLy8gRklYTUUgZml4IGl0IGZvciBtdWx0aWxpbmUu
CisgICAgICAgICAgICBkaXNwbGF5Qm94LnNldENvbnRlbnRCb3hXaWR0aChjb250ZW50Qm94V2lk
dGgpOworICAgICAgICAgICAgZGlzcGxheUJveC5zZXRDb250ZW50Qm94SGVpZ2h0KGlubGluZVJ1
bi5sb2dpY2FsSGVpZ2h0KCkpOworICAgICAgICAgICAgbGluZUJveC5leHBhbmRIb3Jpem9udGFs
bHkoaW5saW5lUnVuLmxvZ2ljYWxXaWR0aCgpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICB9CiAKLSAgICBpZiAobV9mb3JtYXR0aW5nUm9vdC5zdHlsZSgpLnRleHRBbGlnbigpID09
IFRleHRBbGlnbk1vZGU6Okp1c3RpZnkpCi0gICAgICAgIGNvbXB1dGVFeHBhbnNpb25PcHBvcnR1
bml0aWVzKGxpbmUsIHJ1biwgbGFzdFJ1blR5cGUudmFsdWVPcihJbmxpbmVSdW5Qcm92aWRlcjo6
UnVuOjpUeXBlOjpOb25XaGl0ZXNwYWNlKSk7CisgICAgICAgIC8vIFRleHQgY29udGVudC4gVHJ5
IHRvIGpvaW4gbXVsdGlwbGUgdGV4dCBydW5zIHdoZW4gcG9zc2libGUuCisgICAgICAgIEFTU0VS
VChpbmxpbmVSdW4udGV4dENvbnRleHQoKSk7ICAgICAgICAKKyAgICAgICAgY29uc3QgTGluZTo6
TGluZUl0ZW0qIHByZXZpb3VzTGluZUl0ZW0gPSAhaW5kZXggPyBudWxscHRyIDogbGluZUl0ZW1z
W2luZGV4IC0gMV0uZ2V0KCk7CisgICAgICAgIGlmICghbGluZUl0ZW0tPmlzQ29sbGFwc2VkKSB7
CisgICAgICAgICAgICBhdXRvJiBpbmxpbmVUZXh0SXRlbSA9IGRvd25jYXN0PElubGluZVRleHRJ
dGVtPihpbmxpbmVJdGVtKTsKKyAgICAgICAgICAgIGF1dG8gcHJldmlvdXNSdW5DYW5CZUV4dGVu
ZGVkID0gcHJldmlvdXNMaW5lSXRlbSA/IHByZXZpb3VzTGluZUl0ZW0tPmNhbkJlRXh0ZW5kZWQg
OiBmYWxzZTsKKyAgICAgICAgICAgIGF1dG8gcmVxdWlyZXNOZXdSdW4gPSAhaW5kZXggfHwgIXBy
ZXZpb3VzUnVuQ2FuQmVFeHRlbmRlZCB8fCAmbGF5b3V0Qm94ICE9ICZwcmV2aW91c0xpbmVJdGVt
LT5pbmxpbmVJdGVtLmxheW91dEJveCgpOworICAgICAgICAgICAgaWYgKHJlcXVpcmVzTmV3UnVu
KQorICAgICAgICAgICAgICAgIG1fZm9ybWF0dGluZ1N0YXRlLmFkZElubGluZVJ1bihzdGQ6Om1h
a2VfdW5pcXVlPERpc3BsYXk6OlJ1bj4oaW5saW5lUnVuKSk7CisgICAgICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgICAgICBhdXRvJiBsYXN0RGlzcGxheVJ1biA9IG1fZm9ybWF0dGluZ1N0YXRl
LmlubGluZVJ1bnMoKS5sYXN0KCk7CisgICAgICAgICAgICAgICAgbGFzdERpc3BsYXlSdW4tPmV4
cGFuZEhvcml6b250YWxseShpbmxpbmVUZXh0SXRlbS53aWR0aCgpKTsKKyAgICAgICAgICAgICAg
ICBsYXN0RGlzcGxheVJ1bi0+dGV4dENvbnRleHQoKS0+ZXhwYW5kKGlubGluZVJ1bi50ZXh0Q29u
dGV4dCgpLT5sZW5ndGgoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsaW5lQm94LmV4
cGFuZEhvcml6b250YWxseShpbmxpbmVSdW4ubG9naWNhbFdpZHRoKCkpOworICAgICAgICB9Cisg
ICAgICAgIC8vIEZJWE1FIHRha2UgY29udGVudCBicmVha2luZyBpbnRvIGFjY291bnQgd2hlbiBw
YXJ0IG9mIHRoZSBsYXlvdXQgYm94IGlzIG9uIHRoZSBwcmV2aW91cyBsaW5lLgorICAgICAgICBh
dXRvIGZpcnN0SW5saW5lUnVuRm9yTGF5b3V0Qm94ID0gIXByZXZpb3VzTGluZUl0ZW0gfHwgJnBy
ZXZpb3VzTGluZUl0ZW0tPmlubGluZUl0ZW0ubGF5b3V0Qm94KCkgIT0gJmxheW91dEJveDsKKyAg
ICAgICAgaWYgKGZpcnN0SW5saW5lUnVuRm9yTGF5b3V0Qm94KSB7CisgICAgICAgICAgICAvLyBT
ZXR1cCBkaXNwbGF5IGJveCBmb3IgdGhlIGFzc29jaWF0ZWQgbGF5b3V0IGJveC4KKyAgICAgICAg
ICAgIGRpc3BsYXlCb3guc2V0VG9wTGVmdChpbmxpbmVSdW4ubG9naWNhbFRvcExlZnQoKSk7Cisg
ICAgICAgICAgICBkaXNwbGF5Qm94LnNldENvbnRlbnRCb3hXaWR0aChpbmxpbmVSdW4ubG9naWNh
bFdpZHRoKCkpOworICAgICAgICAgICAgZGlzcGxheUJveC5zZXRDb250ZW50Qm94SGVpZ2h0KGlu
bGluZVJ1bi5sb2dpY2FsSGVpZ2h0KCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
Ly8gRklYTUUgZml4IGl0IGZvciBtdWx0aXJ1bi9tdWx0aWxpbmUuCisgICAgICAgICAgICBkaXNw
bGF5Qm94LnNldENvbnRlbnRCb3hXaWR0aChkaXNwbGF5Qm94LmNvbnRlbnRCb3hXaWR0aCgpICsg
aW5saW5lUnVuLmxvZ2ljYWxXaWR0aCgpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAvLyBGSVhN
RSBsaW5lYm94IG5lZWRzIHRvIGJlIGFqdXN0ZWQgYWZ0ZXIgY29udGVudCBhbGlnbm1lbnQuCisg
ICAgbV9mb3JtYXR0aW5nU3RhdGUuYWRkTGluZUJveCh7IGxpbmVCb3ggfSk7CisgICAgaWYgKGxp
bmUuaGFzQ29udGVudCgpKQorICAgICAgICBhbGlnblJ1bnMobV9mb3JtYXR0aW5nUm9vdC5zdHls
ZSgpLnRleHRBbGlnbigpLCBwcmV2aW91c0xpbmVMYXN0UnVuSW5kZXgudmFsdWVPcigtMSkgKyAx
LCBsaW5lLmF2YWlsYWJsZVdpZHRoKCkpOworICAgIGluaXRpYWxpemVMaW5lKGxpbmUsIGxpbmUu
bG9naWNhbEJvdHRvbSgpKTsKIH0KIAotdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGlu
ZUxheW91dDo6Y29tcHV0ZUZsb2F0UG9zaXRpb24oY29uc3QgRmxvYXRpbmdDb250ZXh0JiBmbG9h
dGluZ0NvbnRleHQsIExpbmUmIGxpbmUsIGNvbnN0IEJveCYgZmxvYXRCb3gpIGNvbnN0Cit2b2lk
IElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpoYW5kbGVGbG9hdChMaW5lJiBs
aW5lLCBjb25zdCBGbG9hdGluZ0NvbnRleHQmIGZsb2F0aW5nQ29udGV4dCwgY29uc3QgSW5saW5l
SXRlbSYgZmxvYXRJdGVtKSBjb25zdAogewotICAgIGF1dG8mIGxheW91dFN0YXRlID0gbV9mb3Jt
YXR0aW5nQ29udGV4dC5sYXlvdXRTdGF0ZSgpOwotICAgIEFTU0VSVChsYXlvdXRTdGF0ZS5oYXNE
aXNwbGF5Qm94KGZsb2F0Qm94KSk7Ci0gICAgYXV0byYgZGlzcGxheUJveCA9IGxheW91dFN0YXRl
LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goZmxvYXRCb3gpOwotCisgICAgYXV0byYgZmxvYXRCb3gg
PSBmbG9hdEl0ZW0ubGF5b3V0Qm94KCk7CisgICAgQVNTRVJUKGxheW91dFN0YXRlKCkuaGFzRGlz
cGxheUJveChmbG9hdEJveCkpOworICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBsYXlvdXRTdGF0ZSgp
LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goZmxvYXRCb3gpOwogICAgIC8vIFNldCBzdGF0aWMgcG9z
aXRpb24gZmlyc3QuCiAgICAgZGlzcGxheUJveC5zZXRUb3BMZWZ0KHsgbGluZS5jb250ZW50TG9n
aWNhbFJpZ2h0KCksIGxpbmUubG9naWNhbFRvcCgpIH0pOwogICAgIC8vIEZsb2F0IGl0LgogICAg
IGRpc3BsYXlCb3guc2V0VG9wTGVmdChmbG9hdGluZ0NvbnRleHQucG9zaXRpb25Gb3JGbG9hdChm
bG9hdEJveCkpOworICAgIG1fZmxvYXRpbmdTdGF0ZS5hcHBlbmQoZmxvYXRCb3gpOworICAgIC8v
IFNocmluayBhdmFpbGJsZSBzcGFjZSBmb3IgY3VycmVudCBsaW5lIGFuZCBtb3ZlIGV4aXN0aW5n
IGlubGluZSBydW5zLgorICAgIGF1dG8gZmxvYXRCb3hXaWR0aCA9IGZsb2F0SXRlbS53aWR0aCgp
OworICAgIGZsb2F0Qm94LmlzTGVmdEZsb2F0aW5nUG9zaXRpb25lZCgpID8gbGluZS5tb3ZlTG9n
aWNhbExlZnQoZmxvYXRCb3hXaWR0aCkgOiBsaW5lLm1vdmVMb2dpY2FsUmlnaHQoZmxvYXRCb3hX
aWR0aCk7CiB9CiAKLXZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OnBs
YWNlSW5GbG93UG9zaXRpb25lZENoaWxkcmVuKHVuc2lnbmVkIGZpc3RSdW5JbmRleCkgY29uc3QK
K3ZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OmNvbW1pdElubGluZUl0
ZW1Ub0xpbmUoTGluZSYgbGluZSwgY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSkgY29uc3QK
IHsKLSAgICBhdXRvJiBsYXlvdXRTdGF0ZSA9IG1fZm9ybWF0dGluZ0NvbnRleHQubGF5b3V0U3Rh
dGUoKTsKLSAgICBhdXRvJiBpbmxpbmVSdW5zID0gbV9mb3JtYXR0aW5nU3RhdGUuaW5saW5lUnVu
cygpOwotICAgIGZvciAoYXV0byBydW5JbmRleCA9IGZpc3RSdW5JbmRleDsgcnVuSW5kZXggPCBp
bmxpbmVSdW5zLnNpemUoKTsgKytydW5JbmRleCkgewotICAgICAgICBhdXRvJiBpbmxpbmVSdW4g
PSBpbmxpbmVSdW5zW3J1bkluZGV4XTsKLQotICAgICAgICBhdXRvIHBvc2l0aW9uT2Zmc2V0ID0g
WyZdKGF1dG8mIGxheW91dEJveCkgewotICAgICAgICAgICAgLy8gRklYTUU6IE5lZWQgdG8gZmln
dXJlIG91dCB3aGV0aGVyIGluLWZsb3cgb2Zmc2V0IHNob3VsZCBzdGljay4gVGhpcyBtaWdodCB2
ZXJ5IHdlbGwgYmUgdGVtcG9yYXJ5LgotICAgICAgICAgICAgT3B0aW9uYWw8TGF5b3V0U2l6ZT4g
b2Zmc2V0OwotICAgICAgICAgICAgZm9yIChhdXRvKiBib3ggPSAmbGF5b3V0Qm94OyBib3ggIT0g
Jm1fZm9ybWF0dGluZ1Jvb3Q7IGJveCA9IGJveC0+cGFyZW50KCkpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoIWJveC0+aXNJbkZsb3dQb3NpdGlvbmVkKCkpCi0gICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgICAgIG9mZnNldCA9IG9mZnNldC52YWx1ZU9yKExheW91dFNp
emUoKSkgKyBHZW9tZXRyeTo6aW5GbG93UG9zaXRpb25lZFBvc2l0aW9uT2Zmc2V0KGxheW91dFN0
YXRlLCAqYm94KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBvZmZzZXQ7Ci0g
ICAgICAgIH07CisgICAgaWYgKGlubGluZUl0ZW0uaXNDb250YWluZXJTdGFydCgpKQorICAgICAg
ICByZXR1cm4gbGluZS5hcHBlbmRJbmxpbmVDb250YWluZXJTdGFydChpbmxpbmVJdGVtKTsKIAot
ICAgICAgICBpZiAoYXV0byBvZmZzZXQgPSBwb3NpdGlvbk9mZnNldChpbmxpbmVSdW4uaW5saW5l
SXRlbSgpLmxheW91dEJveCgpKSkgewotICAgICAgICAgICAgaW5saW5lUnVuLm1vdmVWZXJ0aWNh
bGx5KG9mZnNldC0+aGVpZ2h0KCkpOwotICAgICAgICAgICAgaW5saW5lUnVuLm1vdmVIb3Jpem9u
dGFsbHkob2Zmc2V0LT53aWR0aCgpKTsKLSAgICAgICAgfQotICAgIH0KKyAgICBpZiAoaW5saW5l
SXRlbS5pc0NvbnRhaW5lckVuZCgpKQorICAgICAgICByZXR1cm4gbGluZS5hcHBlbmRJbmxpbmVD
b250YWluZXJFbmQoaW5saW5lSXRlbSk7CisKKyAgICBpZiAoaW5saW5lSXRlbS5pc0hhcmRMaW5l
QnJlYWsoKSkKKyAgICAgICAgcmV0dXJuIGxpbmUuYXBwZW5kSGFyZExpbmVCcmVhayhpbmxpbmVJ
dGVtKTsKKworICAgIGF1dG8gd2lkdGggPSBpbmxpbmVJdGVtLndpZHRoKCk7CisgICAgaWYgKGlz
PElubGluZVRleHRJdGVtPihpbmxpbmVJdGVtKSkKKyAgICAgICAgcmV0dXJuIGxpbmUuYXBwZW5k
VGV4dENvbnRlbnQoZG93bmNhc3Q8SW5saW5lVGV4dEl0ZW0+KGlubGluZUl0ZW0pLCB7IHdpZHRo
LCBpbmxpbmVJdGVtLnN0eWxlKCkuZm9udE1ldHJpY3MoKS5oZWlnaHQoKSB9KTsKKworICAgIGF1
dG8mIGxheW91dEJveCA9IGlubGluZUl0ZW0ubGF5b3V0Qm94KCk7CisgICAgYXV0byYgZGlzcGxh
eUJveCA9IGxheW91dFN0YXRlKCkuZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpOwor
ICAgIGlmIChsYXlvdXRCb3guaXNSZXBsYWNlZCgpKQorICAgICAgICByZXR1cm4gbGluZS5hcHBl
bmRSZXBsYWNlZElubGluZUJveChpbmxpbmVJdGVtLCB7IHdpZHRoLCBkaXNwbGF5Qm94LmhlaWdo
dCgpIH0pOworCisgICAgbGluZS5hcHBlbmROb25SZXBsYWNlZElubGluZUJveChpbmxpbmVJdGVt
LCB7IHdpZHRoLCBkaXNwbGF5Qm94LmhlaWdodCgpIH0pOwogfQogCi1zdGF0aWMgTGF5b3V0VW5p
dCBhZGp1c3RlZExpbmVMb2dpY2FsTGVmdChUZXh0QWxpZ25Nb2RlIGFsaWduLCBMYXlvdXRVbml0
IGxpbmVMb2dpY2FsTGVmdCwgTGF5b3V0VW5pdCByZW1haW5pbmdXaWR0aCkKK3N0YXRpYyBPcHRp
b25hbDxMYXlvdXRVbml0PiBob3Jpem9udGFsQWRqdXN0bWVudEZvckFsaWdubWVudChUZXh0QWxp
Z25Nb2RlIGFsaWduLCBMYXlvdXRVbml0IHJlbWFpbmluZ1dpZHRoKQogewogICAgIHN3aXRjaCAo
YWxpZ24pIHsKICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OkxlZnQ6CiAgICAgY2FzZSBUZXh0QWxp
Z25Nb2RlOjpXZWJLaXRMZWZ0OgogICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6U3RhcnQ6Ci0gICAg
ICAgIHJldHVybiBsaW5lTG9naWNhbExlZnQ7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgY2Fz
ZSBUZXh0QWxpZ25Nb2RlOjpSaWdodDoKICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OldlYktpdFJp
Z2h0OgogICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6RW5kOgotICAgICAgICByZXR1cm4gbGluZUxv
Z2ljYWxMZWZ0ICsgc3RkOjptYXgocmVtYWluaW5nV2lkdGgsIDBfbHUpOworICAgICAgICByZXR1
cm4gc3RkOjptYXgocmVtYWluaW5nV2lkdGgsIDBfbHUpOwogICAgIGNhc2UgVGV4dEFsaWduTW9k
ZTo6Q2VudGVyOgogICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0Q2VudGVyOgotICAgICAg
ICByZXR1cm4gbGluZUxvZ2ljYWxMZWZ0ICsgc3RkOjptYXgocmVtYWluaW5nV2lkdGggLyAyLCAw
X2x1KTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWF4KHJlbWFpbmluZ1dpZHRoIC8gMiwgMF9sdSk7
CiAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5OgogICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgIHJldHVybiBsaW5lTG9naWNhbExlZnQ7Ci19Ci0KLXZvaWQgSW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQ6OkxpbmVMYXlvdXQ6Omp1c3RpZnlSdW5zKExpbmUmIGxpbmUpCi17Ci0gICAgYXV0
byYgaW5saW5lUnVucyA9IGxpbmUucnVucygpOwotICAgIGF1dG8mIGxhc3RJbmxpbmVSdW4gPSBp
bmxpbmVSdW5zLmxhc3QoKTsKLQotICAgIC8vIEFkanVzdCAoZm9yYmlkKSB0cmFpbGluZyBleHBh
bnNpb24gZm9yIHRoZSBsYXN0IHRleHQgcnVuIG9uIGxpbmUuCi0gICAgYXV0byBleHBhbnNpb25C
ZWhhdmlvciA9IGxhc3RJbmxpbmVSdW4uZXhwYW5zaW9uT3Bwb3J0dW5pdHkoKS5iZWhhdmlvcjsK
LSAgICAvLyBSZW1vdmUgYWxsb3cgYW5kIGFkZCBmb3JiaWQuCi0gICAgZXhwYW5zaW9uQmVoYXZp
b3IgXj0gQWxsb3dUcmFpbGluZ0V4cGFuc2lvbjsKLSAgICBleHBhbnNpb25CZWhhdmlvciB8PSBG
b3JiaWRUcmFpbGluZ0V4cGFuc2lvbjsKLSAgICBsYXN0SW5saW5lUnVuLmV4cGFuc2lvbk9wcG9y
dHVuaXR5KCkuYmVoYXZpb3IgPSBleHBhbnNpb25CZWhhdmlvcjsKLQotICAgIC8vIENvbGxlY3Qg
ZXhwYW5zaW9uIG9wcG9ydHVuaXRpZXMgYW5kIGp1c3RpZnkgdGhlIHJ1bnMuCi0gICAgYXV0byB3
aWR0aFRvRGlzdHJpYnV0ZSA9IGxpbmUuYXZhaWxhYmxlV2lkdGgoKTsKLSAgICBpZiAod2lkdGhU
b0Rpc3RyaWJ1dGUgPD0gMCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBleHBhbnNpb25P
cHBvcnR1bml0aWVzID0gMDsKLSAgICBmb3IgKGF1dG8mIGlubGluZVJ1biA6IGlubGluZVJ1bnMp
Ci0gICAgICAgIGV4cGFuc2lvbk9wcG9ydHVuaXRpZXMgKz0gaW5saW5lUnVuLmV4cGFuc2lvbk9w
cG9ydHVuaXR5KCkuY291bnQ7Ci0KLSAgICBpZiAoIWV4cGFuc2lvbk9wcG9ydHVuaXRpZXMpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGZsb2F0IGV4cGFuc2lvbiA9IHdpZHRoVG9EaXN0cmlidXRl
LnRvRmxvYXQoKSAvIGV4cGFuc2lvbk9wcG9ydHVuaXRpZXM7Ci0gICAgTGF5b3V0VW5pdCBhY2N1
bXVsYXRlZEV4cGFuc2lvbjsKLSAgICBmb3IgKGF1dG8mIGlubGluZVJ1biA6IGlubGluZVJ1bnMp
IHsKLSAgICAgICAgTGF5b3V0VW5pdCBleHBhbnNpb25Gb3JSdW4geyBpbmxpbmVSdW4uZXhwYW5z
aW9uT3Bwb3J0dW5pdHkoKS5jb3VudCAqIGV4cGFuc2lvbiB9OwotCi0gICAgICAgIGlubGluZVJ1
bi5leHBhbnNpb25PcHBvcnR1bml0eSgpLmV4cGFuc2lvbiA9IGV4cGFuc2lvbkZvclJ1bjsKLSAg
ICAgICAgaW5saW5lUnVuLnNldExvZ2ljYWxMZWZ0KGlubGluZVJ1bi5sb2dpY2FsTGVmdCgpICsg
YWNjdW11bGF0ZWRFeHBhbnNpb24pOwotICAgICAgICBpbmxpbmVSdW4uc2V0TG9naWNhbFdpZHRo
KGlubGluZVJ1bi5sb2dpY2FsV2lkdGgoKSArIGV4cGFuc2lvbkZvclJ1bik7Ci0gICAgICAgIGFj
Y3VtdWxhdGVkRXhwYW5zaW9uICs9IGV4cGFuc2lvbkZvclJ1bjsKLSAgICB9CisgICAgcmV0dXJu
IHsgfTsKIH0KIAotdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6Y29t
cHV0ZUV4cGFuc2lvbk9wcG9ydHVuaXRpZXMoTGluZSYgbGluZSwgY29uc3QgSW5saW5lUnVuUHJv
dmlkZXI6OlJ1biYgcnVuLCBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpUeXBlIGxhc3RSdW5UeXBl
KSBjb25zdAordm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6YWxpZ25S
dW5zKFRleHRBbGlnbk1vZGUgdGV4dEFsaWduLCB1bnNpZ25lZCBmaXJzdFJ1bkluZGV4LCBMYXlv
dXRVbml0IGF2YWlsYWJsZVdpZHRoKSBjb25zdAogewotICAgIGF1dG8gaXNFeHBhbnNpb25PcHBv
cnR1bml0eSA9IFtdKGF1dG8gY3VycmVudFJ1bklzV2hpdGVzcGFjZSwgYXV0byBsYXN0UnVuSXNX
aGl0ZXNwYWNlKSB7Ci0gICAgICAgIHJldHVybiBjdXJyZW50UnVuSXNXaGl0ZXNwYWNlIHx8ICgh
Y3VycmVudFJ1bklzV2hpdGVzcGFjZSAmJiAhbGFzdFJ1bklzV2hpdGVzcGFjZSk7Ci0gICAgfTsK
LQotICAgIGF1dG8gZXhwYW5zaW9uQmVoYXZpb3IgPSBbXShhdXRvIGlzQXRFeHBhbnNpb25PcHBv
cnR1bml0eSkgewotICAgICAgICBFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb25CZWhhdmlvciA9
IEFsbG93VHJhaWxpbmdFeHBhbnNpb247Ci0gICAgICAgIGV4cGFuc2lvbkJlaGF2aW9yIHw9IGlz
QXRFeHBhbnNpb25PcHBvcnR1bml0eSA/IEZvcmJpZExlYWRpbmdFeHBhbnNpb24gOiBBbGxvd0xl
YWRpbmdFeHBhbnNpb247Ci0gICAgICAgIHJldHVybiBleHBhbnNpb25CZWhhdmlvcjsKLSAgICB9
OwotCi0gICAgYXV0byBpc0F0RXhwYW5zaW9uT3Bwb3J0dW5pdHkgPSBpc0V4cGFuc2lvbk9wcG9y
dHVuaXR5KHJ1bi5pc1doaXRlc3BhY2UoKSwgbGFzdFJ1blR5cGUgPT0gSW5saW5lUnVuUHJvdmlk
ZXI6OlJ1bjo6VHlwZTo6V2hpdGVzcGFjZSk7Ci0KLSAgICBhdXRvJiBjdXJyZW50SW5saW5lUnVu
ID0gbGluZS5ydW5zKCkubGFzdCgpOwotICAgIGF1dG8mIGV4cGFuc2lvbk9wcG9ydHVuaXR5ID0g
Y3VycmVudElubGluZVJ1bi5leHBhbnNpb25PcHBvcnR1bml0eSgpOwotICAgIGlmIChpc0F0RXhw
YW5zaW9uT3Bwb3J0dW5pdHkpCi0gICAgICAgICsrZXhwYW5zaW9uT3Bwb3J0dW5pdHkuY291bnQ7
Ci0KLSAgICBleHBhbnNpb25PcHBvcnR1bml0eS5iZWhhdmlvciA9IGV4cGFuc2lvbkJlaGF2aW9y
KGlzQXRFeHBhbnNpb25PcHBvcnR1bml0eSk7Ci19Ci0KLXZvaWQgSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQ6OkxpbmVMYXlvdXQ6OmFsaWduUnVucyhUZXh0QWxpZ25Nb2RlIHRleHRBbGlnbiwgTGlu
ZSYgbGluZSwgIElzTGFzdExpbmUgaXNMYXN0TGluZSkgY29uc3QKLXsKLSAgICBhdXRvIGFkanV0
ZWRUZXh0QWxpZ25tZW50ID0gdGV4dEFsaWduICE9IFRleHRBbGlnbk1vZGU6Okp1c3RpZnkgPyB0
ZXh0QWxpZ24gOiBpc0xhc3RMaW5lID09IElzTGFzdExpbmU6Ok5vID8gVGV4dEFsaWduTW9kZTo6
SnVzdGlmeSA6IFRleHRBbGlnbk1vZGU6OkxlZnQ7Ci0gICAgaWYgKGFkanV0ZWRUZXh0QWxpZ25t
ZW50ID09IFRleHRBbGlnbk1vZGU6Okp1c3RpZnkpIHsKLSAgICAgICAganVzdGlmeVJ1bnMobGlu
ZSk7CisgICAgYXV0byBhZGp1c3RtZW50ID0gaG9yaXpvbnRhbEFkanVzdG1lbnRGb3JBbGlnbm1l
bnQodGV4dEFsaWduLCBhdmFpbGFibGVXaWR0aCk7CisgICAgaWYgKCFhZGp1c3RtZW50KQogICAg
ICAgICByZXR1cm47Ci0gICAgfQogCi0gICAgYXV0byBsaW5lTG9naWNhbExlZnQgPSBsaW5lLmNv
bnRlbnRMb2dpY2FsTGVmdCgpOwotICAgIGF1dG8gYWRqdXN0ZWRMb2dpY2FsTGVmdCA9IGFkanVz
dGVkTGluZUxvZ2ljYWxMZWZ0KGFkanV0ZWRUZXh0QWxpZ25tZW50LCBsaW5lTG9naWNhbExlZnQs
IGxpbmUuYXZhaWxhYmxlV2lkdGgoKSk7Ci0gICAgaWYgKGFkanVzdGVkTG9naWNhbExlZnQgPT0g
bGluZUxvZ2ljYWxMZWZ0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIGRlbHRhID0gYWRq
dXN0ZWRMb2dpY2FsTGVmdCAtIGxpbmVMb2dpY2FsTGVmdDsKLSAgICBmb3IgKGF1dG8mIGlubGlu
ZVJ1biA6IGxpbmUucnVucygpKQotICAgICAgICBpbmxpbmVSdW4uc2V0TG9naWNhbExlZnQoaW5s
aW5lUnVuLmxvZ2ljYWxMZWZ0KCkgKyBkZWx0YSk7Ci19Ci0KLUxheW91dFVuaXQgSW5saW5lRm9y
bWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OnJ1bldpZHRoKGNvbnN0IElubGluZUNvbnRlbnQm
IGlubGluZUNvbnRlbnQsIGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0sIEl0ZW1Qb3NpdGlv
biBmcm9tLCB1bnNpZ25lZCBsZW5ndGgsIExheW91dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0KSBj
b25zdCAKLXsKLSAgICBMYXlvdXRVbml0IHdpZHRoOwotICAgIGF1dG8gc3RhcnRQb3NpdGlvbiA9
IGZyb207Ci0gICAgYXV0byBpdGVyYXRvciA9IGlubGluZUNvbnRlbnQuZmluZChjb25zdF9jYXN0
PElubGluZUl0ZW0qPigmaW5saW5lSXRlbSkpOwotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICBh
dXRvIGlubGluZUl0ZW1FbmQgPSBpbmxpbmVDb250ZW50LmVuZCgpOwotI2VuZGlmCi0gICAgd2hp
bGUgKGxlbmd0aCkgewotICAgICAgICBBU1NFUlQoaXRlcmF0b3IgIT0gaW5saW5lSXRlbUVuZCk7
Ci0gICAgICAgIGF1dG8mIGN1cnJlbnRJbmxpbmVJdGVtID0gKippdGVyYXRvcjsKLSAgICAgICAg
YXV0byBlbmRQb3NpdGlvbiA9IHN0ZDo6bWluPEl0ZW1Qb3NpdGlvbj4oc3RhcnRQb3NpdGlvbiAr
IGxlbmd0aCwgY3VycmVudElubGluZUl0ZW0udGV4dENvbnRlbnQoKS5sZW5ndGgoKSk7Ci0gICAg
ICAgIGF1dG8gdGV4dFdpZHRoID0gVGV4dFV0aWw6OndpZHRoKGN1cnJlbnRJbmxpbmVJdGVtLCBz
dGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbiwgY29udGVudExvZ2ljYWxMZWZ0KTsKLQotICAgICAg
ICBjb250ZW50TG9naWNhbExlZnQgKz0gdGV4dFdpZHRoOwotICAgICAgICB3aWR0aCArPSB0ZXh0
V2lkdGg7Ci0gICAgICAgIGxlbmd0aCAtPSAoZW5kUG9zaXRpb24gLSBzdGFydFBvc2l0aW9uKTsK
LQotICAgICAgICBzdGFydFBvc2l0aW9uID0gMDsKLSAgICAgICAgKytpdGVyYXRvcjsKLSAgICB9
Ci0gICAgcmV0dXJuIHdpZHRoOworICAgIGF1dG8mIGlubGluZURpc3BsYXlSdW5zID0gbV9mb3Jt
YXR0aW5nU3RhdGUuaW5saW5lUnVucygpOyAKKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gZmly
c3RSdW5JbmRleDsgaW5kZXggPCBpbmxpbmVEaXNwbGF5UnVucy5zaXplKCk7ICsraW5kZXgpCisg
ICAgICAgIGlubGluZURpc3BsYXlSdW5zW2luZGV4XS0+bW92ZUhvcml6b250YWxseSgqYWRqdXN0
bWVudCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVm
b3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdTdGF0ZS5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ1N0YXRlLmgKaW5kZXggNjYyYTgzYzNl
YmM1MWJhN2IwZTNjNGVhY2NmNTE4NDRlOWVkNjU5Yy4uZDc0ZGNlNTM4MmMyN2RjZTk2MWFhNjY0
Mzk3OTMyMDcxOTFiNWZhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ1N0YXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ1N0YXRlLmgKQEAgLTI3LDE1
ICsyNywyMCBAQAogCiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCiAKKyNp
bmNsdWRlICJEaXNwbGF5UnVuLmgiCiAjaW5jbHVkZSAiRm9ybWF0dGluZ1N0YXRlLmgiCiAjaW5j
bHVkZSAiSW5saW5lSXRlbS5oIgotI2luY2x1ZGUgIklubGluZVJ1bi5oIgorI2luY2x1ZGUgIklu
bGluZUxpbmVCb3guaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+CiAjaW5jbHVkZSA8d3Rm
L09wdGlvblNldC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgTGF5b3V0IHsK
IAorLy8gVGVtcAordXNpbmcgSW5saW5lSXRlbXMgPSBMaXN0SGFzaFNldDxzdGQ6OnVuaXF1ZV9w
dHI8SW5saW5lSXRlbT4+OwordXNpbmcgSW5saW5lUnVucyA9IFZlY3RvcjxzdGQ6OnVuaXF1ZV9w
dHI8RGlzcGxheTo6UnVuPj47Cit1c2luZyBMaW5lQm94ZXMgPSBWZWN0b3I8TGluZUJveD47CiAv
LyBJbmxpbmVGb3JtYXR0aW5nU3RhdGUgaG9sZHMgdGhlIHN0YXRlIGZvciBhIHBhcnRpY3VsYXIg
aW5saW5lIGZvcm1hdHRpbmcgY29udGV4dCB0cmVlLgogY2xhc3MgSW5saW5lRm9ybWF0dGluZ1N0
YXRlIDogcHVibGljIEZvcm1hdHRpbmdTdGF0ZSB7CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRF
RChJbmxpbmVGb3JtYXR0aW5nU3RhdGUpOwpAQCAtNDMsMTYgKzQ4LDIwIEBAIHB1YmxpYzoKICAg
ICBJbmxpbmVGb3JtYXR0aW5nU3RhdGUoUmVmPEZsb2F0aW5nU3RhdGU+JiYsIExheW91dFN0YXRl
Jik7CiAgICAgdmlydHVhbCB+SW5saW5lRm9ybWF0dGluZ1N0YXRlKCk7CiAKLSAgICBJbmxpbmVD
b250ZW50JiBpbmxpbmVDb250ZW50KCkgeyByZXR1cm4gbV9pbmxpbmVDb250ZW50OyB9Ci0gICAg
SW5saW5lSXRlbSogbGFzdElubGluZUl0ZW0oKSBjb25zdCB7IHJldHVybiBtX2lubGluZUNvbnRl
bnQuaXNFbXB0eSgpID8gbnVsbHB0ciA6IG1faW5saW5lQ29udGVudC5sYXN0KCkuZ2V0KCk7IH0K
KyAgICB2b2lkIGFkZElubGluZVRleHRJdGVtKCk7CiAKLSAgICAvLyBUZW1wCisgICAgSW5saW5l
SXRlbXMmIGlubGluZUl0ZW1zKCkgeyByZXR1cm4gbV9pbmxpbmVJdGVtczsgfQogICAgIElubGlu
ZVJ1bnMmIGlubGluZVJ1bnMoKSB7IHJldHVybiBtX2lubGluZVJ1bnM7IH0KLSAgICB2b2lkIGFw
cGVuZElubGluZVJ1bihJbmxpbmVSdW4gaW5saW5lUnVuKSB7IG1faW5saW5lUnVucy5hcHBlbmQo
aW5saW5lUnVuKTsgfQorICAgIExpbmVCb3hlcyYgbGluZUJveGVzKCkgeyByZXR1cm4gbV9saW5l
Qm94ZXM7IH0KKworICAgIHZvaWQgYWRkSW5saW5lSXRlbShzdGQ6OnVuaXF1ZV9wdHI8SW5saW5l
SXRlbT4mJiBpbmxpbmVJdGVtKSB7IG1faW5saW5lSXRlbXMuYWRkKFdURk1vdmUoaW5saW5lSXRl
bSkpOyB9CisgICAgdm9pZCBhZGRJbmxpbmVSdW4oc3RkOjp1bmlxdWVfcHRyPERpc3BsYXk6OlJ1
bj4mJiBpbmxpbmVSdW4pIHsgbV9pbmxpbmVSdW5zLmFwcGVuZChXVEZNb3ZlKGlubGluZVJ1bikp
OyB9CisgICAgdm9pZCBhZGRMaW5lQm94KExpbmVCb3ggbGluZUJveCkgeyBtX2xpbmVCb3hlcy5h
cHBlbmQobGluZUJveCk7IH0KIAogcHJpdmF0ZToKLSAgICBJbmxpbmVDb250ZW50IG1faW5saW5l
Q29udGVudDsKKyAgICBJbmxpbmVJdGVtcyBtX2lubGluZUl0ZW1zOwogICAgIElubGluZVJ1bnMg
bV9pbmxpbmVSdW5zOworICAgIExpbmVCb3hlcyBtX2xpbmVCb3hlczsKIH07CiAKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUl0ZW0u
aCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUl0ZW0uaApp
bmRleCA1YTEwZmMxZDFmZmNhNjM0NGUwNDAwZTU5ZDZhNTAwN2ExNWJiODRlLi44N2VkOWMzNmY2
YzkyM2FlOGU0Zjg5OTc0OTZlYmNhYzVhY2ZlOWM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVJdGVtLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lSXRlbS5oCkBAIC0zNiw4MyArMzYsNTcg
QEAgbmFtZXNwYWNlIExheW91dCB7CiAKIGNsYXNzIElubGluZUl0ZW0gewogcHVibGljOgotICAg
IElubGluZUl0ZW0oY29uc3QgQm94JiBsYXlvdXRCb3gpOworICAgIGVudW0gY2xhc3MgVHlwZSB7
IFRleHQsIEhhcmRMaW5lQnJlYWssIEJveCwgRmxvYXQsIENvbnRhaW5lclN0YXJ0LCBDb250YWlu
ZXJFbmQgfTsKKyAgICBJbmxpbmVJdGVtKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBUeXBlKTsKIAot
ICAgIGVudW0gY2xhc3MgVHlwZSB7IFRleHQsIEhhcmRMaW5lQnJlYWssIElubGluZUJveCwgRmxv
YXQgfTsKLSAgICBUeXBlIHR5cGUoKSBjb25zdDsKKyAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJl
dHVybiBtX3R5cGU7IH0KICAgICBjb25zdCBCb3gmIGxheW91dEJveCgpIGNvbnN0IHsgcmV0dXJu
IG1fbGF5b3V0Qm94OyB9CiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKCkgY29uc3QgeyBy
ZXR1cm4gbV9sYXlvdXRCb3guc3R5bGUoKTsgfQotICAgIFN0cmluZyB0ZXh0Q29udGVudCgpIGNv
bnN0OwotICAgIC8vIERldGFjaGluZ1J1bGUgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGlubGluZSBl
bGVtZW50IG5lZWRzIHRvIGJlIHdyYXBwZWQgaW4gYSBkZWRpY2V0ZWQgcnVuIG9yIGJyZWFrIGZy
b20gcHJldmlvdXMvbmV4dCBydW5zLgotICAgIC8vIDxzcGFuPnN0YXJ0PC9zcGFuPjxzcGFuIHN0
eWxlPSJwb3NpdGlvbjogcmVsYXRpdmU7Ij4gbWlkZGxlIDwvc3Bhbj48c3Bhbj5lbmQ8L3NwYW4+
Ci0gICAgLy8gaW5wdXQgdG8gbGluZSBicmVha2luZyAtPiA8c3RhcnQgbWlkZGxlIGVuZD4KLSAg
ICAvLyBvdXRwdXQgb2YgbGluZSBicmVha2luZyAoY29uc2lkZXJpbmcgaW5maW5pdGUgY29uc3Ry
YWludCkgLT4gPHN0YXJ0IG1pZGRsZSBlbmQ+Ci0gICAgLy8gZHVlIHRvIHRoZSBpbi1mbG93IHBv
c2l0aW9uaW5nLCB0aGUgZmluYWwgcnVucyBhcmU6IDxzdGFydD48IG1pZGRsZSA+PGVuZD4KLSAg
ICAvLyAic3RhcnQiIC0+IG4vYQotICAgIC8vICIgbWlkZGxlICIgLT4gQnJlYWtBdFN0YXJ0IGFu
ZCBCcmVha0F0RW5kCi0gICAgLy8gImVuZCIgLT4gbi9hCi0gICAgLy8KLSAgICAvLyA8c3Bhbj5w
YXJlbnQgPC9zcGFuPjxzcGFuIHN0eWxlPSJwYWRkaW5nOiAxMHB4OyI+c3RhcnQ8c3Bhbj4gbWlk
ZGxlIDwvc3Bhbj5lbmQ8L3NwYW4+PHNwYW4+IHBhcmVudDwvc3Bhbj4KLSAgICAvLyBpbnB1dCB0
byBsaW5lIGJyZWFraW5nIC0+IDxwYXJlbnQgc3RhcnQgbWlkZGxlIGVuZCBwYXJlbnQ+Ci0gICAg
Ly8gb3V0cHV0IG9mIGxpbmUgYnJlYWtpbmcgKGNvbnNpZGVyaW5nIGluZmluaXRlIGNvbnN0cmFp
bnQpIC0+IDxwYXJlbnQgc3RhcnQgbWlkZGxlIGVuZCBwYXJlbnQ+Ci0gICAgLy8gZHVlIHRvIHBh
ZGRpbmcsIGZpbmFsIHJ1bnMgLT4gPHBhcmVudD48c3RhcnQgbWlkZGxlIGVuZD48cGFyZW50Pgot
ICAgIC8vICJwYXJlbnQiIC0+IG4vYQotICAgIC8vICJzdGFydCIgLT4gQnJlYWtBdFN0YXJ0Ci0g
ICAgLy8gIiBtaWRkbGUgIiAtPiBuL2EKLSAgICAvLyAiZW5kIiAtPiBCcmVha0F0RW5kCi0gICAg
Ly8gInBhcmVudCIgLT4gbi9hCi0gICAgZW51bSBjbGFzcyBEZXRhY2hpbmdSdWxlIHsKLSAgICAg
ICAgQnJlYWtBdFN0YXJ0ID0gMSA8PCAwLAotICAgICAgICBCcmVha0F0RW5kID0gMSA8PCAxCi0g
ICAgfTsKLSAgICB2b2lkIGFkZERldGFjaGluZ1J1bGUoT3B0aW9uU2V0PERldGFjaGluZ1J1bGU+
IGRldGFjaGluZ1J1bGUpIHsgbV9kZXRhY2hpbmdSdWxlcy5hZGQoZGV0YWNoaW5nUnVsZSk7IH0K
LSAgICBPcHRpb25TZXQ8RGV0YWNoaW5nUnVsZT4gZGV0YWNoaW5nUnVsZXMoKSBjb25zdCB7IHJl
dHVybiBtX2RldGFjaGluZ1J1bGVzOyB9CisgICAgdm9pZCBzZXRXaWR0aChMYXlvdXRVbml0KTsK
KyAgICBMYXlvdXRVbml0IHdpZHRoKCkgY29uc3Q7CiAKLSAgICAvLyBOb24tYnJlYWthYmxlIHN0
YXJ0L2VuZCBtYXJrcyBtYXJnaW4vcGFkZGluZy9ib3JkZXIgc3BhY2UgKGV2ZW4gd2hlbiBpdCBk
b2VzIG5vdCBkaXJlY3RseSBjb21lIGZyb20gdGhlIGFzc29jaWF0ZWQgbGF5b3V0IGJveCkKLSAg
ICAvLyA8c3BhbiBzdHlsZT0icGFkZGluZzogNXB4Ij48c3Bhbj5uZXN0ZWQgY29udGVudCB3aXRo
IHBhZGRpbmcgcGFyZW50PC9zcGFuPC9zcGFuPgotICAgIC8vIDxuZXN0ZWQgY29udGVudCB3aXRo
IHBhZGRpbmcgcGFyZW50PiBpbmxpbmUgcnVuIGhhcyA1cHggbm9uLWJyZWFrYWJsZSBzdGFydC9l
bmQuCi0gICAgTGF5b3V0VW5pdCBub25CcmVha2FibGVTdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1f
bm9uQnJlYWthYmxlU3RhcnQ7IH0KLSAgICBMYXlvdXRVbml0IG5vbkJyZWFrYWJsZUVuZCgpIGNv
bnN0IHsgcmV0dXJuIG1fbm9uQnJlYWthYmxlRW5kOyB9Ci0gICAgdm9pZCBhZGROb25CcmVha2Fi
bGVTdGFydChMYXlvdXRVbml0IHZhbHVlKSB7IG1fbm9uQnJlYWthYmxlU3RhcnQgKz0gdmFsdWU7
IH0KLSAgICB2b2lkIGFkZE5vbkJyZWFrYWJsZUVuZChMYXlvdXRVbml0IHZhbHVlKSB7IG1fbm9u
QnJlYWthYmxlRW5kICs9IHZhbHVlOyB9CisgICAgYm9vbCBpc1RleHQoKSBjb25zdCB7IHJldHVy
biB0eXBlKCkgPT0gVHlwZTo6VGV4dDsgfQorICAgIGJvb2wgaXNCb3goKSBjb25zdCB7IHJldHVy
biB0eXBlKCkgPT0gVHlwZTo6Qm94OyB9CisgICAgYm9vbCBpc0hhcmRMaW5lQnJlYWsoKSBjb25z
dCB7IHJldHVybiB0eXBlKCkgPT0gVHlwZTo6SGFyZExpbmVCcmVhazsgfQorICAgIGJvb2wgaXNG
bG9hdCgpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBUeXBlOjpGbG9hdDsgfQorICAgIGJvb2wg
aXNMaW5lQnJlYWsoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gVHlwZTo6SGFyZExpbmVCcmVh
azsgfQorICAgIGJvb2wgaXNDb250YWluZXJTdGFydCgpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9
PSBUeXBlOjpDb250YWluZXJTdGFydDsgfQorICAgIGJvb2wgaXNDb250YWluZXJFbmQoKSBjb25z
dCB7IHJldHVybiB0eXBlKCkgPT0gVHlwZTo6Q29udGFpbmVyRW5kOyB9CiAKIHByaXZhdGU6CiAg
ICAgY29uc3QgQm94JiBtX2xheW91dEJveDsKLSAgICBPcHRpb25TZXQ8RGV0YWNoaW5nUnVsZT4g
bV9kZXRhY2hpbmdSdWxlczsKLSAgICBMYXlvdXRVbml0IG1fbm9uQnJlYWthYmxlU3RhcnQ7Ci0g
ICAgTGF5b3V0VW5pdCBtX25vbkJyZWFrYWJsZUVuZDsKKyAgICBjb25zdCBUeXBlIG1fdHlwZTsK
KyAgICBMYXlvdXRVbml0IG1fd2lkdGg7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIGJvb2wg
bV9oYXNWYWxpZFdpZHRoIHsgZmFsc2UgfTsKKyNlbmRpZgogfTsKIAotdXNpbmcgSW5saW5lQ29u
dGVudCA9IExpc3RIYXNoU2V0PHN0ZDo6dW5pcXVlX3B0cjxJbmxpbmVJdGVtPj47Ci0KLWlubGlu
ZSBJbmxpbmVJdGVtOjpJbmxpbmVJdGVtKGNvbnN0IEJveCYgbGF5b3V0Qm94KQoraW5saW5lIElu
bGluZUl0ZW06OklubGluZUl0ZW0oY29uc3QgQm94JiBsYXlvdXRCb3gsIFR5cGUgdHlwZSkKICAg
ICA6IG1fbGF5b3V0Qm94KGxheW91dEJveCkKKyAgICAsIG1fdHlwZSh0eXBlKQogewogfQogCi1p
bmxpbmUgSW5saW5lSXRlbTo6VHlwZSBJbmxpbmVJdGVtOjp0eXBlKCkgY29uc3QKK2lubGluZSB2
b2lkIElubGluZUl0ZW06OnNldFdpZHRoKExheW91dFVuaXQgd2lkdGgpCiB7Ci0gICAgaWYgKGlz
PElubGluZUJveD4obV9sYXlvdXRCb3gpICYmIGRvd25jYXN0PElubGluZUJveD4obV9sYXlvdXRC
b3gpLmhhc1RleHRDb250ZW50KCkpCi0gICAgICAgIHJldHVybiBUeXBlOjpUZXh0OwotCi0gICAg
aWYgKGlzPExpbmVCcmVha0JveD4obV9sYXlvdXRCb3gpKQotICAgICAgICByZXR1cm4gVHlwZTo6
SGFyZExpbmVCcmVhazsKLQotICAgIGlmIChtX2xheW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25l
ZCgpKQotICAgICAgICByZXR1cm4gVHlwZTo6RmxvYXQ7Ci0KLSAgICBBU1NFUlQobV9sYXlvdXRC
b3guaXNJbmxpbmVMZXZlbEJveCgpKTsKLSAgICByZXR1cm4gVHlwZTo6SW5saW5lQm94OworI2lm
ICFBU1NFUlRfRElTQUJMRUQKKyAgICBtX2hhc1ZhbGlkV2lkdGggPSB0cnVlOworI2VuZGlmCisg
ICAgbV93aWR0aCA9IHdpZHRoOwogfQogCi1pbmxpbmUgU3RyaW5nIElubGluZUl0ZW06OnRleHRD
b250ZW50KCkgY29uc3QKK2lubGluZSBMYXlvdXRVbml0IElubGluZUl0ZW06OndpZHRoKCkgY29u
c3QKIHsKLSAgICBpZiAodHlwZSgpICE9IFR5cGU6OlRleHQpCi0gICAgICAgIHJldHVybiB7IH07
Ci0KLSAgICByZXR1cm4gZG93bmNhc3Q8SW5saW5lQm94PihtX2xheW91dEJveCkudGV4dENvbnRl
bnQoKTsKKyAgICBBU1NFUlQobV9oYXNWYWxpZFdpZHRoKTsKKyAgICByZXR1cm4gbV93aWR0aDsK
IH0KIAorI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0lOTElORV9JVEVNKFRvVmFsdWVU
eXBlTmFtZSwgcHJlZGljYXRlKSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNv
cmU6OkxheW91dDo6VG9WYWx1ZVR5cGVOYW1lKSBcCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNv
bnN0IFdlYkNvcmU6OkxheW91dDo6SW5saW5lSXRlbSYgaW5saW5lSXRlbSkgeyByZXR1cm4gaW5s
aW5lSXRlbS5wcmVkaWNhdGU7IH0gXAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorCiB9
CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3Jt
YXR0aW5nL0lubGluZUxpbmVCb3guaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3Jt
YXR0aW5nL0lubGluZUxpbmVCb3guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZTJmMjQ2Y2RkMjYwOTcyOWE4MjE1
MWRiZjk4ZjY5Y2Y5YTIyMzdhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJveC5oCkBAIC0wLDAgKzEsNjEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19D
T05URVhUKQorCisjaW5jbHVkZSAiRGlzcGxheUJveC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CituYW1lc3BhY2UgTGF5b3V0IHsKKworY2xhc3MgTGluZUJveCB7CitwdWJsaWM6CisgICAgTGlu
ZUJveChEaXNwbGF5OjpSZWN0KTsKKyAgICAKKyAgICBMYXlvdXRQb2ludCBsb2dpY2FsVG9wTGVm
dCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdC50b3BMZWZ0KCk7IH0KKworICAgIExheW91dFVuaXQg
bG9naWNhbExlZnQoKSBjb25zdCB7IHJldHVybiBtX3JlY3QubGVmdCgpOyB9CisgICAgTGF5b3V0
VW5pdCBsb2dpY2FsUmlnaHQoKSBjb25zdCB7IHJldHVybiBtX3JlY3QucmlnaHQoKTsgfQorICAg
IExheW91dFVuaXQgbG9naWNhbFRvcCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdC50b3AoKTsgfQor
ICAgIExheW91dFVuaXQgbG9naWNhbEJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdC5ib3R0
b20oKTsgfQorCisgICAgTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgoKSBjb25zdCB7IHJldHVybiBt
X3JlY3Qud2lkdGgoKTsgfQorICAgIExheW91dFVuaXQgbG9naWNhbEhlaWdodCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVjdC5oZWlnaHQoKTsgfQorCitwcml2YXRlOgorICAgIERpc3BsYXk6OlJlY3Qg
bV9yZWN0OworfTsKKworaW5saW5lIExpbmVCb3g6OkxpbmVCb3goRGlzcGxheTo6UmVjdCByZWN0
KQorICAgIDogbV9yZWN0KHJlY3QpCit7Cit9CisKK30KK30KKworI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnJlYWtl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5l
QnJlYWtlci5jcHAKaW5kZXggNTc2YTBiYjc5NTQzN2UwMTM3NDJhNzI4Njk0M2FmMjQ4MTAwNGZl
Yy4uNjE2NDZiOGExNTRiYWU5NjlkODk1ZjA3NjhhOGI2NzE5N2E0NThkMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJyZWFrZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxp
bmVCcmVha2VyLmNwcApAQCAtMjgsMTczICsyOCwxMDIgQEAKIAogI2lmIEVOQUJMRShMQVlPVVRf
Rk9STUFUVElOR19DT05URVhUKQogCi0jaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRl
ICJIeXBoZW5hdGlvbi5oIgotI2luY2x1ZGUgIklubGluZVJ1blByb3ZpZGVyLmgiCi0jaW5jbHVk
ZSAiVGV4dFV0aWwuaCIKLSNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgorI2luY2x1
ZGUgIkxheW91dFN0YXRlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBMYXlv
dXQgewogCi1XVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSW5saW5lTGluZUJyZWFrZXIpOwot
Ci1JbmxpbmVMaW5lQnJlYWtlcjo6SW5saW5lTGluZUJyZWFrZXIoY29uc3QgTGF5b3V0U3RhdGUm
IGxheW91dFN0YXRlLCBjb25zdCBJbmxpbmVDb250ZW50JiBpbmxpbmVDb250ZW50LCBjb25zdCBW
ZWN0b3I8SW5saW5lUnVuUHJvdmlkZXI6OlJ1bj4mIGlubGluZVJ1bnMpCitMaW5lQnJlYWtlcjo6
TGluZUJyZWFrZXIoY29uc3QgTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlKQogICAgIDogbV9sYXlv
dXRTdGF0ZShsYXlvdXRTdGF0ZSkKLSAgICAsIG1faW5saW5lQ29udGVudChpbmxpbmVDb250ZW50
KQotICAgICwgbV9pbmxpbmVSdW5zKGlubGluZVJ1bnMpCiB7CiB9CiAKLU9wdGlvbmFsPElubGlu
ZUxpbmVCcmVha2VyOjpSdW4+IElubGluZUxpbmVCcmVha2VyOjpuZXh0UnVuKExheW91dFVuaXQg
Y29udGVudExvZ2ljYWxMZWZ0LCBMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoLCBib29sIGxpbmVJ
c0VtcHR5KQorTGluZUJyZWFrZXI6OkJyZWFraW5nQ29udGV4dCBMaW5lQnJlYWtlcjo6YnJlYWtp
bmdDb250ZXh0KElubGluZUl0ZW0mIGlubGluZUl0ZW0sIExpbmVDb250ZXh0IGxpbmVDb250ZXh0
KQogewotICAgIGlmIChpc0F0Q29udGVudEVuZCgpKQotICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwotCi0gICAgSW5saW5lUnVuUHJvdmlkZXI6OlJ1biBjdXJyZW50SW5saW5lUnVuID0gbV9p
bmxpbmVSdW5zW21fY3VycmVudFJ1bkluZGV4XTsKLSAgICAvLyBBZGp1c3QgdGhlIGN1cnJlbnQg
cnVuIGlmIGl0IGlzIHNwbGl0IG1pZHdvcmQuCi0gICAgaWYgKG1fc3BsaXRQb3NpdGlvbikgewot
ICAgICAgICBBU1NFUlQoY3VycmVudElubGluZVJ1bi5pc1RleHQoKSk7Ci0gICAgICAgIG1fc3Bs
aXRQb3NpdGlvbiA9IFdURjo6bnVsbG9wdDsKLSAgICB9Ci0KLSAgICBpZiAoY3VycmVudElubGlu
ZVJ1bi5pc0xpbmVCcmVhaygpKSB7Ci0gICAgICAgICsrbV9jdXJyZW50UnVuSW5kZXg7Ci0gICAg
ICAgIHJldHVybiBSdW4geyBSdW46OlBvc2l0aW9uOjpMaW5lRW5kLCAwLCBjdXJyZW50SW5saW5l
UnVuIH07Ci0gICAgfQotCi0gICAgYXV0byBjb250ZW50V2lkdGggPSBydW5XaWR0aChjdXJyZW50
SW5saW5lUnVuLCBjb250ZW50TG9naWNhbExlZnQpOwotICAgIC8vIDEuIFBsZW50eSBvZiBzcGFj
ZSBsZWZ0LgotICAgIGlmIChjb250ZW50V2lkdGggPD0gYXZhaWxhYmxlV2lkdGgpIHsKLSAgICAg
ICAgKyttX2N1cnJlbnRSdW5JbmRleDsKLSAgICAgICAgcmV0dXJuIFJ1biB7IGxpbmVJc0VtcHR5
ID8gUnVuOjpQb3NpdGlvbjo6TGluZUJlZ2luIDogUnVuOjpQb3NpdGlvbjo6VW5kZXRlcm1pbmVk
LCBjb250ZW50V2lkdGgsIGN1cnJlbnRJbmxpbmVSdW4gfTsKLSAgICB9Ci0KLSAgICAvLyAyLiBO
byBzcGFjZSBsZWZ0IHdoYXRzb2V2ZXIuCi0gICAgaWYgKGF2YWlsYWJsZVdpZHRoIDw9IDApIHsK
LSAgICAgICAgKyttX2N1cnJlbnRSdW5JbmRleDsKLSAgICAgICAgcmV0dXJuIFJ1biB7IFJ1bjo6
UG9zaXRpb246OkxpbmVCZWdpbiwgY29udGVudFdpZHRoLCBjdXJyZW50SW5saW5lUnVuIH07Ci0g
ICAgfQotCi0gICAgLy8gMy4gU29tZSBzcGFjZSBsZWZ0LiBMZXQncyBmaW5kIG91dCB3aGF0IHdl
IG5lZWQgdG8gZG8gd2l0aCB0aGlzIHJ1bi4KLSAgICBhdXRvIGJyZWFraW5nQmVoYXZpb3IgPSBs
aW5lQnJlYWtpbmdCZWhhdmlvcihjdXJyZW50SW5saW5lUnVuLCBsaW5lSXNFbXB0eSk7Ci0gICAg
aWYgKGJyZWFraW5nQmVoYXZpb3IgPT0gTGluZUJyZWFraW5nQmVoYXZpb3I6OktlZXApIHsKLSAg
ICAgICAgKyttX2N1cnJlbnRSdW5JbmRleDsKLSAgICAgICAgcmV0dXJuIFJ1biB7IGxpbmVJc0Vt
cHR5ID8gUnVuOjpQb3NpdGlvbjo6TGluZUJlZ2luIDogUnVuOjpQb3NpdGlvbjo6VW5kZXRlcm1p
bmVkLCBjb250ZW50V2lkdGgsIGN1cnJlbnRJbmxpbmVSdW4gfTsKLSAgICB9Ci0KLSAgICBpZiAo
YnJlYWtpbmdCZWhhdmlvciA9PSBMaW5lQnJlYWtpbmdCZWhhdmlvcjo6V3JhcFRvTmV4dExpbmUp
IHsKLSAgICAgICAgKyttX2N1cnJlbnRSdW5JbmRleDsKLSAgICAgICAgcmV0dXJuIFJ1biB7IFJ1
bjo6UG9zaXRpb246OkxpbmVCZWdpbiwgY29udGVudFdpZHRoLCBjdXJyZW50SW5saW5lUnVuIH07
Ci0gICAgfQotCi0gICAgQVNTRVJUKGJyZWFraW5nQmVoYXZpb3IgPT0gTGluZUJyZWFraW5nQmVo
YXZpb3I6OkJyZWFrKTsKLSAgICAvLyBTcGxpdCBjb250ZW50LgotICAgIHJldHVybiBzcGxpdFJ1
bihjdXJyZW50SW5saW5lUnVuLCBjb250ZW50TG9naWNhbExlZnQsIGF2YWlsYWJsZVdpZHRoLCBs
aW5lSXNFbXB0eSk7CisgICAgaW5saW5lSXRlbS5zZXRXaWR0aChydW5XaWR0aChpbmxpbmVJdGVt
LCBsaW5lQ29udGV4dC5sb2dpY2FsTGVmdCkpOworICAgIC8vIEZpcnN0IGNvbnRlbnQgYWx3YXlz
IHN0YXlzIG9uIGxpbmUuCisgICAgaWYgKGxpbmVDb250ZXh0LmlzRW1wdHkgfHwgaW5saW5lSXRl
bS53aWR0aCgpIDw9IGxpbmVDb250ZXh0LmF2YWlsYWJsZVdpZHRoKQorICAgICAgICByZXR1cm4g
eyBCcmVha2luZ0JlaGF2aW9yOjpLZWVwLCBpc0F0QnJlYWtpbmdPcHBvcnR1bml0eShpbmxpbmVJ
dGVtKSB9OworCisgICAgaWYgKGlzPElubGluZVRleHRJdGVtPihpbmxpbmVJdGVtKSkKKyAgICAg
ICAgcmV0dXJuIHsgd29yZEJyZWFraW5nQmVoYXZpb3IoZG93bmNhc3Q8SW5saW5lVGV4dEl0ZW0+
KGlubGluZUl0ZW0pLCBsaW5lQ29udGV4dC5pc0VtcHR5KSwgaXNBdEJyZWFraW5nT3Bwb3J0dW5p
dHkoaW5saW5lSXRlbSkgfTsKKworICAgIC8vIFdyYXAgbm9uLXRleHQgYm94ZXMgdG8gdGhlIG5l
eHQgbGluZSB1bmxlc3Mgd2UgY2FuIHRyaW0gdHJhaWxpbmcgd2hpdGVzcGFjZS4KKyAgICBhdXRv
IGF2YWlsYWJsZVdpZHRoID0gbGluZUNvbnRleHQuYXZhaWxhYmxlV2lkdGggKyBsaW5lQ29udGV4
dC50cmltbWFibGVXaWR0aDsKKyAgICBpZiAoaW5saW5lSXRlbS53aWR0aCgpIDw9IGF2YWlsYWJs
ZVdpZHRoKQorICAgICAgICByZXR1cm4geyBCcmVha2luZ0JlaGF2aW9yOjpLZWVwLCBpc0F0QnJl
YWtpbmdPcHBvcnR1bml0eShpbmxpbmVJdGVtKSB9OworICAgIHJldHVybiB7IEJyZWFraW5nQmVo
YXZpb3I6OldyYXAsIGlzQXRCcmVha2luZ09wcG9ydHVuaXR5KGlubGluZUl0ZW0pIH07CiB9CiAK
LWJvb2wgSW5saW5lTGluZUJyZWFrZXI6OmlzQXRDb250ZW50RW5kKCkgY29uc3QKK0xpbmVCcmVh
a2VyOjpCcmVha2luZ0JlaGF2aW9yIExpbmVCcmVha2VyOjp3b3JkQnJlYWtpbmdCZWhhdmlvcihj
b25zdCBJbmxpbmVUZXh0SXRlbSYgaW5saW5lSXRlbSwgYm9vbCBsaW5lSXNFbXB0eSkgY29uc3QK
IHsKLSAgICByZXR1cm4gbV9jdXJyZW50UnVuSW5kZXggPT0gbV9pbmxpbmVSdW5zLnNpemUoKTsK
LX0KLQotSW5saW5lTGluZUJyZWFrZXI6OkxpbmVCcmVha2luZ0JlaGF2aW9yIElubGluZUxpbmVC
cmVha2VyOjpsaW5lQnJlYWtpbmdCZWhhdmlvcihjb25zdCBJbmxpbmVSdW5Qcm92aWRlcjo6UnVu
JiBpbmxpbmVSdW4sIGJvb2wgbGluZUlzRW1wdHkpCi17Ci0gICAgLy8gTGluZSBicmVha2luZyBi
ZWhhdmlvdXI6CisgICAgLy8gV29yZCBicmVha2luZyBiZWhhdmlvdXI6CiAgICAgLy8gMS4gV2hp
dGVzYXBjZSBjb2xsYXBzZSBvbiAtPiBwdXNoIHdoaXRlc3BhY2UgdG8gbmV4dCBsaW5lLgogICAg
IC8vIDIuIFdoaXRlc3BhY2UgY29sbGFwc2Ugb2ZmIC0+IHdoaXRlc3BhY2UgaXMgc3BsaXQgd2hl
cmUgcG9zc2libGUuCiAgICAgLy8gMy4gTm9uLXdoaXRlc3BhY2UgLT4gZmlyc3QgcnVuIG9uIHRo
ZSBsaW5lIC0+IGVpdGhlciBzcGxpdCBvciBrZXB0IG9uIHRoZSBsaW5lLiAoZGVwZW5kcyBvbiBv
dmVyZmxvdy13cmFwKQogICAgIC8vIDQuIE5vbi13aGl0ZXNwYWNlIC0+IGFscmVhZHkgY29udGVu
dCBvbiB0aGUgbGluZSAtPiBlaXRoZXIgZ2V0cyBzcGxpdCAod29yZC1icmVhazogYnJlYWstYWxs
KSBvciBnZXRzIHB1c2hlZCB0byB0aGUgbmV4dCBsaW5lLgogICAgIC8vIChIeXBoZW5hdGUgd2hl
biBwb3NzaWJsZSkKICAgICAvLyA1LiBOb24tdGV4dCB0eXBlIC0+IG5leHQgbGluZQotICAgIGF1
dG8mIHN0eWxlID0gaW5saW5lUnVuLnN0eWxlKCk7CisgICAgYXV0byYgc3R5bGUgPSBpbmxpbmVJ
dGVtLnN0eWxlKCk7CiAKLSAgICBpZiAoaW5saW5lUnVuLmlzV2hpdGVzcGFjZSgpKQotICAgICAg
ICByZXR1cm4gc3R5bGUuY29sbGFwc2VXaGl0ZVNwYWNlKCkgPyBMaW5lQnJlYWtpbmdCZWhhdmlv
cjo6V3JhcFRvTmV4dExpbmUgOiBMaW5lQnJlYWtpbmdCZWhhdmlvcjo6QnJlYWs7CisgICAgaWYg
KGlubGluZUl0ZW0uaXNXaGl0ZXNwYWNlKCkpCisgICAgICAgIHJldHVybiBzdHlsZS5jb2xsYXBz
ZVdoaXRlU3BhY2UoKSA/IEJyZWFraW5nQmVoYXZpb3I6OldyYXAgOiBCcmVha2luZ0JlaGF2aW9y
OjpCcmVhazsKIAotICAgIGlmIChpbmxpbmVSdW4uaXNOb25XaGl0ZXNwYWNlKCkpIHsKLSAgICAg
ICAgYXV0byBzaG91bGRIeXBlbmF0ZSA9ICFtX2h5cGhlbmF0aW9uSXNEaXNhYmxlZCAmJiBzdHls
ZS5oeXBoZW5zKCkgPT0gSHlwaGVuczo6QXV0byAmJiBjYW5IeXBoZW5hdGUoc3R5bGUubG9jYWxl
KCkpOwotICAgICAgICBpZiAoc2hvdWxkSHlwZW5hdGUpCi0gICAgICAgICAgICByZXR1cm4gTGlu
ZUJyZWFraW5nQmVoYXZpb3I6OkJyZWFrOworICAgIGF1dG8gc2hvdWxkSHlwZW5hdGUgPSAhbV9o
eXBoZW5hdGlvbklzRGlzYWJsZWQgJiYgc3R5bGUuaHlwaGVucygpID09IEh5cGhlbnM6OkF1dG8g
JiYgY2FuSHlwaGVuYXRlKHN0eWxlLmxvY2FsZSgpKTsKKyAgICBpZiAoc2hvdWxkSHlwZW5hdGUp
CisgICAgICAgIHJldHVybiBCcmVha2luZ0JlaGF2aW9yOjpCcmVhazsKIAotICAgICAgICBpZiAo
c3R5bGUuYXV0b1dyYXAoKSkgewotICAgICAgICAgICAgLy8gQnJlYWsgYW55IHdvcmQKLSAgICAg
ICAgICAgIGlmIChzdHlsZS53b3JkQnJlYWsoKSA9PSBXb3JkQnJlYWs6OkJyZWFrQWxsKQotICAg
ICAgICAgICAgICAgIHJldHVybiBMaW5lQnJlYWtpbmdCZWhhdmlvcjo6QnJlYWs7CisgICAgaWYg
KHN0eWxlLmF1dG9XcmFwKCkpIHsKKyAgICAgICAgLy8gQnJlYWsgYW55IHdvcmQKKyAgICAgICAg
aWYgKHN0eWxlLndvcmRCcmVhaygpID09IFdvcmRCcmVhazo6QnJlYWtBbGwpCisgICAgICAgICAg
ICByZXR1cm4gQnJlYWtpbmdCZWhhdmlvcjo6QnJlYWs7CiAKLSAgICAgICAgICAgIC8vIEJyZWFr
IGZpcnN0IHJ1biBvbiBsaW5lLgotICAgICAgICAgICAgaWYgKGxpbmVJc0VtcHR5ICYmIHN0eWxl
LmJyZWFrV29yZHMoKSAmJiBzdHlsZS5wcmVzZXJ2ZU5ld2xpbmUoKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gTGluZUJyZWFraW5nQmVoYXZpb3I6OkJyZWFrOwotICAgICAgICB9Ci0KLSAgICAg
ICAgLy8gTm9uLWJyZWFrYWJsZSBub24td2hpdGVzcGFjZSBydW4uCi0gICAgICAgIHJldHVybiBs
aW5lSXNFbXB0eSA/IExpbmVCcmVha2luZ0JlaGF2aW9yOjpLZWVwIDogTGluZUJyZWFraW5nQmVo
YXZpb3I6OldyYXBUb05leHRMaW5lOworICAgICAgICAvLyBCcmVhayBmaXJzdCBydW4gb24gbGlu
ZS4KKyAgICAgICAgaWYgKGxpbmVJc0VtcHR5ICYmIHN0eWxlLmJyZWFrV29yZHMoKSAmJiBzdHls
ZS5wcmVzZXJ2ZU5ld2xpbmUoKSkKKyAgICAgICAgICAgIHJldHVybiBCcmVha2luZ0JlaGF2aW9y
OjpCcmVhazsKICAgICB9CiAKLSAgICBBU1NFUlQoaW5saW5lUnVuLmlzQm94KCkgfHwgaW5saW5l
UnVuLmlzRmxvYXQoKSk7Ci0gICAgLy8gTm9uLXRleHQgaW5saW5lIHJ1bnMuCi0gICAgcmV0dXJu
IExpbmVCcmVha2luZ0JlaGF2aW9yOjpXcmFwVG9OZXh0TGluZTsKKyAgICAvLyBOb24tYnJlYWth
YmxlIG5vbi13aGl0ZXNwYWNlIHJ1bi4KKyAgICByZXR1cm4gbGluZUlzRW1wdHkgPyBCcmVha2lu
Z0JlaGF2aW9yOjpLZWVwIDogQnJlYWtpbmdCZWhhdmlvcjo6V3JhcDsKIH0KIAotTGF5b3V0VW5p
dCBJbmxpbmVMaW5lQnJlYWtlcjo6cnVuV2lkdGgoY29uc3QgSW5saW5lUnVuUHJvdmlkZXI6OlJ1
biYgaW5saW5lUnVuLCBMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsTGVmdCkgY29uc3QKK0xheW91
dFVuaXQgTGluZUJyZWFrZXI6OnJ1bldpZHRoKGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0s
IExheW91dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0KSBjb25zdAogewotICAgIEFTU0VSVCghaW5s
aW5lUnVuLmlzTGluZUJyZWFrKCkpOworICAgIGlmIChpbmxpbmVJdGVtLmlzTGluZUJyZWFrKCkp
CisgICAgICAgIHJldHVybiAwOwogCi0gICAgaWYgKGlubGluZVJ1bi5pc1RleHQoKSkKLSAgICAg
ICAgcmV0dXJuIHRleHRXaWR0aChpbmxpbmVSdW4sIGNvbnRlbnRMb2dpY2FsTGVmdCk7CisgICAg
aWYgKGlzPElubGluZVRleHRJdGVtPihpbmxpbmVJdGVtKSkKKyAgICAgICAgcmV0dXJuIHRleHRX
aWR0aChkb3duY2FzdDxJbmxpbmVUZXh0SXRlbT4oaW5saW5lSXRlbSksIGNvbnRlbnRMb2dpY2Fs
TGVmdCk7CiAKLSAgICBBU1NFUlQoaW5saW5lUnVuLmlzQm94KCkgfHwgaW5saW5lUnVuLmlzRmxv
YXQoKSk7Ci0gICAgYXV0byYgaW5saW5lSXRlbSA9IGlubGluZVJ1bi5pbmxpbmVJdGVtKCk7CiAg
ICAgYXV0byYgbGF5b3V0Qm94ID0gaW5saW5lSXRlbS5sYXlvdXRCb3goKTsKICAgICBBU1NFUlQo
bV9sYXlvdXRTdGF0ZS5oYXNEaXNwbGF5Qm94KGxheW91dEJveCkpOwogICAgIGF1dG8mIGRpc3Bs
YXlCb3ggPSBtX2xheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KTsK
LSAgICByZXR1cm4gaW5saW5lSXRlbS5ub25CcmVha2FibGVTdGFydCgpICsgZGlzcGxheUJveC53
aWR0aCgpICsgaW5saW5lSXRlbS5ub25CcmVha2FibGVFbmQoKTsKLX0KIAotTGF5b3V0VW5pdCBJ
bmxpbmVMaW5lQnJlYWtlcjo6dGV4dFdpZHRoKGNvbnN0IElubGluZVJ1blByb3ZpZGVyOjpSdW4m
IGlubGluZVJ1biwgTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbExlZnQpIGNvbnN0Ci17Ci0gICAg
Ly8gRklYTUU6IEZpbmQgYSB3YXkgdG8gbWVyZ2UgdGhpcyBhbmQgSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQ6Okdlb21ldHJ5OjpydW5XaWR0aC4KLSAgICBhdXRvJiBpbmxpbmVJdGVtID0gaW5saW5l
UnVuLmlubGluZUl0ZW0oKTsKLSAgICBhdXRvIHRleHRDb250ZXh0ID0gaW5saW5lUnVuLnRleHRD
b250ZXh0KCk7Ci0gICAgYXV0byBzdGFydFBvc2l0aW9uID0gdGV4dENvbnRleHQtPnN0YXJ0KCk7
Ci0gICAgYXV0byBsZW5ndGggPSB0ZXh0Q29udGV4dC0+aXNDb2xsYXBzZWQoKSA/IDEgOiB0ZXh0
Q29udGV4dC0+bGVuZ3RoKCk7Ci0KLSAgICAvLyBGSVhNRTogSXQgZG9lcyBub3QgZG8gcHJvcGVy
IGtlcm5pbmcvbGlnYXR1cmUgaGFuZGxpbmcuCi0gICAgTGF5b3V0VW5pdCB3aWR0aDsKLSAgICBh
dXRvIGl0ZXJhdG9yID0gbV9pbmxpbmVDb250ZW50LmZpbmQoY29uc3RfY2FzdDxJbmxpbmVJdGVt
Kj4oJmlubGluZUl0ZW0pKTsKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgYXV0byBpbmxpbmVJ
dGVtRW5kID0gbV9pbmxpbmVDb250ZW50LmVuZCgpOwotI2VuZGlmCi0gICAgd2hpbGUgKGxlbmd0
aCkgewotICAgICAgICBBU1NFUlQoaXRlcmF0b3IgIT0gaW5saW5lSXRlbUVuZCk7Ci0gICAgICAg
IGF1dG8mIGN1cnJlbnRJbmxpbmVJdGVtID0gKippdGVyYXRvcjsKLSAgICAgICAgYXV0byBpbmxp
bmVJdGVtTGVuZ3RoID0gY3VycmVudElubGluZUl0ZW0udGV4dENvbnRlbnQoKS5sZW5ndGgoKTsK
LSAgICAgICAgYXV0byBlbmRQb3NpdGlvbiA9IHN0ZDo6bWluPEl0ZW1Qb3NpdGlvbj4oc3RhcnRQ
b3NpdGlvbiArIGxlbmd0aCwgaW5saW5lSXRlbUxlbmd0aCk7Ci0gICAgICAgIGF1dG8gdGV4dFdp
ZHRoID0gVGV4dFV0aWw6OndpZHRoKGN1cnJlbnRJbmxpbmVJdGVtLCBzdGFydFBvc2l0aW9uLCBl
bmRQb3NpdGlvbiwgY29udGVudExvZ2ljYWxMZWZ0KTsKLQotICAgICAgICBhdXRvIG5vbkJyZWFr
YWJsZVN0YXJ0ID0gIXN0YXJ0UG9zaXRpb24gPyBjdXJyZW50SW5saW5lSXRlbS5ub25CcmVha2Fi
bGVTdGFydCgpIDogMF9sdTsKLSAgICAgICAgYXV0byBub25CcmVha2FibGVFbmQgPSAgZW5kUG9z
aXRpb24gPT0gaW5saW5lSXRlbUxlbmd0aCA/IGN1cnJlbnRJbmxpbmVJdGVtLm5vbkJyZWFrYWJs
ZUVuZCgpIDogMF9sdTsKLSAgICAgICAgYXV0byBjb250ZW50V2lkdGggPSBub25CcmVha2FibGVT
dGFydCArIHRleHRXaWR0aCArIG5vbkJyZWFrYWJsZUVuZDsKLSAgICAgICAgY29udGVudExvZ2lj
YWxMZWZ0ICs9IGNvbnRlbnRXaWR0aDsKLSAgICAgICAgd2lkdGggKz0gY29udGVudFdpZHRoOwot
ICAgICAgICBsZW5ndGggLT0gKGVuZFBvc2l0aW9uIC0gc3RhcnRQb3NpdGlvbik7Ci0KLSAgICAg
ICAgc3RhcnRQb3NpdGlvbiA9IDA7Ci0gICAgICAgICsraXRlcmF0b3I7Ci0gICAgfQotICAgIHJl
dHVybiB3aWR0aDsKKyAgICBpZiAoaW5saW5lSXRlbS5pc0NvbnRhaW5lclN0YXJ0KCkpCisgICAg
ICAgIHJldHVybiBkaXNwbGF5Qm94Lm1hcmdpblN0YXJ0KCkgKyBkaXNwbGF5Qm94LmJvcmRlckxl
ZnQoKSArIGRpc3BsYXlCb3gucGFkZGluZ0xlZnQoKS52YWx1ZU9yKDApOworCisgICAgaWYgKGlu
bGluZUl0ZW0uaXNDb250YWluZXJFbmQoKSkKKyAgICAgICAgcmV0dXJuIGRpc3BsYXlCb3gubWFy
Z2luRW5kKCkgKyBkaXNwbGF5Qm94LmJvcmRlclJpZ2h0KCkgKyBkaXNwbGF5Qm94LnBhZGRpbmdS
aWdodCgpLnZhbHVlT3IoMCk7CisKKyAgICBpZiAoaW5saW5lSXRlbS5pc0Zsb2F0KCkpCisgICAg
ICAgIHJldHVybiBkaXNwbGF5Qm94Lm1hcmdpbkJveFdpZHRoKCk7CisKKyAgICByZXR1cm4gZGlz
cGxheUJveC53aWR0aCgpOwogfQogCi1JbmxpbmVMaW5lQnJlYWtlcjo6UnVuIElubGluZUxpbmVC
cmVha2VyOjpzcGxpdFJ1bihjb25zdCBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuJiBpbmxpbmVSdW4s
IExheW91dFVuaXQsIExheW91dFVuaXQsIGJvb2wpCitib29sIExpbmVCcmVha2VyOjppc0F0QnJl
YWtpbmdPcHBvcnR1bml0eShjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtKQogewotICAgIHJl
dHVybiB7IFJ1bjo6UG9zaXRpb246OlVuZGV0ZXJtaW5lZCwgeyB9LCBpbmxpbmVSdW4gfTsKKyAg
ICBpZiAoaXM8SW5saW5lVGV4dEl0ZW0+KGlubGluZUl0ZW0pKQorICAgICAgICByZXR1cm4gZG93
bmNhc3Q8SW5saW5lVGV4dEl0ZW0+KGlubGluZUl0ZW0pLmlzV2hpdGVzcGFjZSgpOworICAgIHJl
dHVybiAhaW5saW5lSXRlbS5pc0Zsb2F0KCkgJiYgIWlubGluZUl0ZW0uaXNDb250YWluZXJTdGFy
dCgpICYmICFpbmxpbmVJdGVtLmlzQ29udGFpbmVyRW5kKCk7CiB9CiAKLU9wdGlvbmFsPEl0ZW1Q
b3NpdGlvbj4gSW5saW5lTGluZUJyZWFrZXI6OmFkanVzdFNwbGl0UG9zaXRpb25XaXRoSHlwaGVu
YXRpb24oY29uc3QgSW5saW5lUnVuUHJvdmlkZXI6OlJ1biYsIEl0ZW1Qb3NpdGlvbiwgTGF5b3V0
VW5pdCwgTGF5b3V0VW5pdCwgYm9vbCkgY29uc3QKK0xheW91dFVuaXQgTGluZUJyZWFrZXI6OnRl
eHRXaWR0aChjb25zdCBJbmxpbmVUZXh0SXRlbSYgaW5saW5lVGV4dEl0ZW0sIExheW91dFVuaXQg
Y29udGVudExvZ2ljYWxMZWZ0KSBjb25zdAogewotICAgIHJldHVybiB7IH07CisgICAgYXV0byBl
bmQgPSBpbmxpbmVUZXh0SXRlbS5pc0NvbGxhcHNlZCgpID8gaW5saW5lVGV4dEl0ZW0uc3RhcnQo
KSArIDEgOiBpbmxpbmVUZXh0SXRlbS5lbmQoKTsKKyAgICByZXR1cm4gVGV4dFV0aWw6OndpZHRo
KGRvd25jYXN0PElubGluZUJveD4oaW5saW5lVGV4dEl0ZW0ubGF5b3V0Qm94KCkpLCBpbmxpbmVU
ZXh0SXRlbS5zdGFydCgpLCBlbmQsIGNvbnRlbnRMb2dpY2FsTGVmdCk7CiB9Ci0KIH0KIH0KICNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcv
SW5saW5lTGluZUJyZWFrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0
aW5nL0lubGluZUxpbmVCcmVha2VyLmgKaW5kZXggMzg3YjBmY2YzNWY2NTY4MTUwYWY1YjAzNmNh
MGFlYzhiYzFiNzk4OS4uMDY1MzMwMjYzZGQ3YTRjOTZiMmQ5NDNmNzhjNDEzMmJjODRjNjQzOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5l
TGluZUJyZWFrZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGlu
Zy9JbmxpbmVMaW5lQnJlYWtlci5oCkBAIC0yNyw0MSArMjcsMzcgQEAKIAogI2lmIEVOQUJMRShM
QVlPVVRfRk9STUFUVElOR19DT05URVhUKQogCi0jaW5jbHVkZSAiSW5saW5lUnVuUHJvdmlkZXIu
aCIKLSNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5h
bWVzcGFjZSBMYXlvdXQgewogCi1jbGFzcyBJbmxpbmVMaW5lQnJlYWtlciB7Ci0gICAgV1RGX01B
S0VfSVNPX0FMTE9DQVRFRChJbmxpbmVMaW5lQnJlYWtlcik7CitjbGFzcyBJbmxpbmVUZXh0SXRl
bTsKKworY2xhc3MgTGluZUJyZWFrZXIgewogcHVibGljOgotICAgIElubGluZUxpbmVCcmVha2Vy
KGNvbnN0IExheW91dFN0YXRlJiwgY29uc3QgSW5saW5lQ29udGVudCYsIGNvbnN0IFZlY3RvcjxJ
bmxpbmVSdW5Qcm92aWRlcjo6UnVuPiYpOworICAgIExpbmVCcmVha2VyKGNvbnN0IExheW91dFN0
YXRlJik7CiAKLSAgICBzdHJ1Y3QgUnVuIHsKLSAgICAgICAgZW51bSBjbGFzcyBQb3NpdGlvbiB7
IFVuZGV0ZXJtaW5lZCwgTGluZUJlZ2luLCBMaW5lRW5kIH07Ci0gICAgICAgIFBvc2l0aW9uIHBv
c2l0aW9uOwotICAgICAgICBMYXlvdXRVbml0IHdpZHRoOwotICAgICAgICBJbmxpbmVSdW5Qcm92
aWRlcjo6UnVuIGNvbnRlbnQ7CisgICAgZW51bSBjbGFzcyBCcmVha2luZ0JlaGF2aW9yIHsgS2Vl
cCwgQnJlYWssIFdyYXAgfTsKKyAgICBzdHJ1Y3QgQnJlYWtpbmdDb250ZXh0IHsKKyAgICAgICAg
QnJlYWtpbmdCZWhhdmlvciBicmVha2luZ0JlaGF2aW9yOworICAgICAgICBib29sIGlzQXRCcmVh
a2luZ09wcG9ydHVuaXR5IHsgZmFsc2UgfTsKKyAgICB9OworICAgIHN0cnVjdCBMaW5lQ29udGV4
dCB7CisgICAgICAgIExheW91dFVuaXQgYXZhaWxhYmxlV2lkdGg7CisgICAgICAgIExheW91dFVu
aXQgbG9naWNhbExlZnQ7CisgICAgICAgIExheW91dFVuaXQgdHJpbW1hYmxlV2lkdGg7CisgICAg
ICAgIGJvb2wgaXNFbXB0eSB7IGZhbHNlIH07CiAgICAgfTsKLSAgICBPcHRpb25hbDxSdW4+IG5l
eHRSdW4oTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbExlZnQsIExheW91dFVuaXQgYXZhaWxhYmxl
V2lkdGgsIGJvb2wgbGluZUlzRW1wdHkpOworICAgIEJyZWFraW5nQ29udGV4dCBicmVha2luZ0Nv
bnRleHQoSW5saW5lSXRlbSYsIGNvbnN0IExpbmVDb250ZXh0KTsKIAogcHJpdmF0ZToKLSAgICBl
bnVtIGNsYXNzIExpbmVCcmVha2luZ0JlaGF2aW9yIHsgS2VlcCwgQnJlYWssIFdyYXBUb05leHRM
aW5lIH07Ci0gICAgTGluZUJyZWFraW5nQmVoYXZpb3IgbGluZUJyZWFraW5nQmVoYXZpb3IoY29u
c3QgSW5saW5lUnVuUHJvdmlkZXI6OlJ1biYsIGJvb2wgbGluZUlzRW1wdHkpOwotICAgIGJvb2wg
aXNBdENvbnRlbnRFbmQoKSBjb25zdDsKLSAgICBSdW4gc3BsaXRSdW4oY29uc3QgSW5saW5lUnVu
UHJvdmlkZXI6OlJ1biYsIExheW91dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0LCBMYXlvdXRVbml0
IGF2YWlsYWJsZVdpZHRoLCBib29sIGxpbmVJc0VtcHR5KTsKLSAgICBMYXlvdXRVbml0IHJ1bldp
ZHRoKGNvbnN0IElubGluZVJ1blByb3ZpZGVyOjpSdW4mLCBMYXlvdXRVbml0IGNvbnRlbnRMb2dp
Y2FsTGVmdCkgY29uc3Q7Ci0gICAgTGF5b3V0VW5pdCB0ZXh0V2lkdGgoY29uc3QgSW5saW5lUnVu
UHJvdmlkZXI6OlJ1biYsIExheW91dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0KSBjb25zdDsKLSAg
ICBPcHRpb25hbDxJdGVtUG9zaXRpb24+IGFkanVzdFNwbGl0UG9zaXRpb25XaXRoSHlwaGVuYXRp
b24oY29uc3QgSW5saW5lUnVuUHJvdmlkZXI6OlJ1biYsIEl0ZW1Qb3NpdGlvbiBzcGxpdFBvc2l0
aW9uLCBMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsTGVmdCwgTGF5b3V0VW5pdCBhdmFpbGFibGVX
aWR0aCwgYm9vbCBpc0xpbmVFbXB0eSkgY29uc3Q7CiAKLSAgICBjb25zdCBMYXlvdXRTdGF0ZSYg
bV9sYXlvdXRTdGF0ZTsKLSAgICBjb25zdCBJbmxpbmVDb250ZW50JiBtX2lubGluZUNvbnRlbnQ7
Ci0gICAgY29uc3QgVmVjdG9yPElubGluZVJ1blByb3ZpZGVyOjpSdW4+JiBtX2lubGluZVJ1bnM7
CisgICAgQnJlYWtpbmdCZWhhdmlvciB3b3JkQnJlYWtpbmdCZWhhdmlvcihjb25zdCBJbmxpbmVU
ZXh0SXRlbSYsIGJvb2wgbGluZUlzRW1wdHkpIGNvbnN0OworICAgIGJvb2wgaXNBdEJyZWFraW5n
T3Bwb3J0dW5pdHkoY29uc3QgSW5saW5lSXRlbSYpOworICAgIExheW91dFVuaXQgcnVuV2lkdGgo
Y29uc3QgSW5saW5lSXRlbSYsIExheW91dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0KSBjb25zdDsK
KyAgICBMYXlvdXRVbml0IHRleHRXaWR0aChjb25zdCBJbmxpbmVUZXh0SXRlbSYsIExheW91dFVu
aXQgY29udGVudExvZ2ljYWxMZWZ0KSBjb25zdDsKIAotICAgIHVuc2lnbmVkIG1fY3VycmVudFJ1
bkluZGV4IHsgMCB9OwotICAgIE9wdGlvbmFsPEl0ZW1Qb3NpdGlvbj4gbV9zcGxpdFBvc2l0aW9u
OwotICAgIGJvb2wgbV9oeXBoZW5hdGlvbklzRGlzYWJsZWQgeyBmYWxzZSB9OworICAgIGNvbnN0
IExheW91dFN0YXRlJiBtX2xheW91dFN0YXRlOworICAgIGJvb2wgbV9oeXBoZW5hdGlvbklzRGlz
YWJsZWQgeyB0cnVlIH07CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVSdW4uaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9p
bmxpbmVmb3JtYXR0aW5nL0lubGluZVJ1bi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBkNjU1NDQxNmFhNTExNTAyOWY1ZDUzZjZhMDQ3MWJlZGQxZWUxMTVlLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9p
bmxpbmVmb3JtYXR0aW5nL0lubGluZVJ1bi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShMQVlPVVRfRk9STUFU
VElOR19DT05URVhUKQotCi0jaW5jbHVkZSAiSW5saW5lUnVuUHJvdmlkZXIuaCIKLSNpbmNsdWRl
ICJMYXlvdXRVbml0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLW5hbWVzcGFjZSBMYXlvdXQg
ewotCi1zdHJ1Y3QgSW5saW5lUnVuIHsKLSAgICBJbmxpbmVSdW4oRGlzcGxheTo6Qm94OjpSZWN0
IGxvZ2ljYWxSZWN0LCBjb25zdCBJbmxpbmVJdGVtJik7Ci0KLSAgICBMYXlvdXRVbml0IGxvZ2lj
YWxMZWZ0KCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsUmVjdC5sZWZ0KCk7IH0KLSAgICBMYXlv
dXRVbml0IGxvZ2ljYWxSaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFJlY3QucmlnaHQo
KTsgfQotICAgIExheW91dFVuaXQgbG9naWNhbFRvcCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNh
bFJlY3QudG9wKCk7IH0KLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxCb3R0b20oKSBjb25zdCB7IHJl
dHVybiBtX2xvZ2ljYWxSZWN0LmJvdHRvbSgpOyB9Ci0KLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxX
aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFJlY3Qud2lkdGgoKTsgfQotICAgIExheW91
dFVuaXQgbG9naWNhbEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFJlY3QuaGVpZ2h0
KCk7IH0KLSAgICBib29sIG92ZXJsYXBzTXVsdGlwbGVJbmxpbmVJdGVtcygpIGNvbnN0OwotCi0g
ICAgdm9pZCBzZXRMb2dpY2FsV2lkdGgoTGF5b3V0VW5pdCB3aWR0aCkgeyBtX2xvZ2ljYWxSZWN0
LnNldFdpZHRoKHdpZHRoKTsgfQotICAgIHZvaWQgc2V0TG9naWNhbExlZnQoTGF5b3V0VW5pdCBs
b2dpY2FsTGVmdCkgeyBtX2xvZ2ljYWxSZWN0LnNldExlZnQobG9naWNhbExlZnQpOyB9Ci0gICAg
dm9pZCBzZXRMb2dpY2FsUmlnaHQoTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHQpIHsgbV9sb2dpY2Fs
UmVjdC5zaGlmdFJpZ2h0VG8obG9naWNhbFJpZ2h0KTsgfQotICAgIHZvaWQgbW92ZVZlcnRpY2Fs
bHkoTGF5b3V0VW5pdCBkZWx0YSkgeyBtX2xvZ2ljYWxSZWN0Lm1vdmVWZXJ0aWNhbGx5KGRlbHRh
KTsgfQotICAgIHZvaWQgbW92ZUhvcml6b250YWxseShMYXlvdXRVbml0IGRlbHRhKSB7IG1fbG9n
aWNhbFJlY3QubW92ZUhvcml6b250YWxseShkZWx0YSk7IH0KLQotICAgIHN0cnVjdCBFeHBhbnNp
b25PcHBvcnR1bml0eSB7Ci0gICAgICAgIHVuc2lnbmVkIGNvdW50IHsgMCB9OwotICAgICAgICBF
eHBhbnNpb25CZWhhdmlvciBiZWhhdmlvciB7IEZvcmJpZExlYWRpbmdFeHBhbnNpb24gfCBGb3Ji
aWRUcmFpbGluZ0V4cGFuc2lvbiB9OwotICAgICAgICBMYXlvdXRVbml0IGV4cGFuc2lvbjsKLSAg
ICB9OwotICAgIEV4cGFuc2lvbk9wcG9ydHVuaXR5JiBleHBhbnNpb25PcHBvcnR1bml0eSgpIHsg
cmV0dXJuIG1fZXhwYW5zaW9uT3Bwb3J0dW5pdHk7IH0KLQotICAgIHN0cnVjdCBUZXh0Q29udGV4
dCB7Ci0gICAgcHVibGljOgotICAgICAgICBUZXh0Q29udGV4dChJdGVtUG9zaXRpb24sIHVuc2ln
bmVkIGxlbmd0aCk7Ci0KLSAgICAgICAgdm9pZCBzZXRTdGFydChJdGVtUG9zaXRpb24gc3RhcnQp
IHsgbV9zdGFydCA9IHN0YXJ0OyB9Ci0gICAgICAgIHZvaWQgc2V0TGVuZ3RoKHVuc2lnbmVkIGxl
bmd0aCkgeyBtX2xlbmd0aCA9IGxlbmd0aDsgfQotCi0gICAgICAgIEl0ZW1Qb3NpdGlvbiBzdGFy
dCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnQ7IH0KLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoKCkg
Y29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIEl0ZW1Q
b3NpdGlvbiBtX3N0YXJ0OwotICAgICAgICB1bnNpZ25lZCBtX2xlbmd0aDsKLSAgICB9OwotICAg
IHZvaWQgc2V0VGV4dENvbnRleHQoVGV4dENvbnRleHQgdGV4dENvbnRleHQpIHsgbV90ZXh0Q29u
dGV4dC5lbXBsYWNlKHRleHRDb250ZXh0KTsgfQotICAgIE9wdGlvbmFsPFRleHRDb250ZXh0PiYg
dGV4dENvbnRleHQoKSB7IHJldHVybiBtX3RleHRDb250ZXh0OyB9Ci0gICAgT3B0aW9uYWw8VGV4
dENvbnRleHQ+IHRleHRDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV90ZXh0Q29udGV4dDsgfQot
Ci0gICAgY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSgpIGNvbnN0IHsgcmV0dXJuIG1faW5s
aW5lSXRlbTsgfQotCi1wcml2YXRlOgotICAgIERpc3BsYXk6OkJveDo6UmVjdCBtX2xvZ2ljYWxS
ZWN0OwotICAgIEV4cGFuc2lvbk9wcG9ydHVuaXR5IG1fZXhwYW5zaW9uT3Bwb3J0dW5pdHk7Ci0K
LSAgICBjb25zdCBJbmxpbmVJdGVtJiBtX2lubGluZUl0ZW07Ci0gICAgT3B0aW9uYWw8VGV4dENv
bnRleHQ+IG1fdGV4dENvbnRleHQ7Ci19OwotCi11c2luZyBJbmxpbmVSdW5zID0gVmVjdG9yPElu
bGluZVJ1bj47Ci0KLWlubGluZSBJbmxpbmVSdW46OklubGluZVJ1bihEaXNwbGF5OjpCb3g6OlJl
Y3QgbG9naWNhbFJlY3QsIGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0pCi0gICAgOiBtX2xv
Z2ljYWxSZWN0KGxvZ2ljYWxSZWN0KQotICAgICwgbV9pbmxpbmVJdGVtKGlubGluZUl0ZW0pCi17
Ci19Ci0KLWlubGluZSBJbmxpbmVSdW46OlRleHRDb250ZXh0OjpUZXh0Q29udGV4dChJdGVtUG9z
aXRpb24gc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCkKLSAgICA6IG1fc3RhcnQoc3RhcnQpCi0gICAg
LCBtX2xlbmd0aChsZW5ndGgpCi17Ci19Ci0KLWlubGluZSBib29sIElubGluZVJ1bjo6b3Zlcmxh
cHNNdWx0aXBsZUlubGluZUl0ZW1zKCkgY29uc3QKLXsKLSAgICAvLyBPbmx5IHRleHQgY29udGVu
dCBjYW4gb3ZlcmxhcCBtdWx0aXBsZSBpbmxpbmUgZWxlbWVudHMuCi0gICAgaWYgKCFtX3RleHRD
b250ZXh0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIGVuZFBvc2l0aW9uID0g
bV90ZXh0Q29udGV4dC0+c3RhcnQoKSArIG1fdGV4dENvbnRleHQtPmxlbmd0aCgpOwotICAgIHJl
dHVybiBlbmRQb3NpdGlvbiA+IG1faW5saW5lSXRlbS50ZXh0Q29udGVudCgpLmxlbmd0aCgpOwot
fQotCi19Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxp
bmVmb3JtYXR0aW5nL0lubGluZVJ1blByb3ZpZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZVJ1blByb3ZpZGVyLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggOWViMjBmMGFmZDcxMmI1MzYyMDFkMDZmN2NiNDM3NWU4YjFlNGNkOS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVSdW5Qcm92aWRlci5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSwxOTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJJbmxpbmVSdW5Qcm92aWRlci5oIgotCi0jaWYgRU5BQkxFKExBWU9VVF9G
T1JNQVRUSU5HX0NPTlRFWFQpCi0KLSNpbmNsdWRlICJCcmVha0xpbmVzLmgiCi0jaW5jbHVkZSAi
TGF5b3V0SW5saW5lQm94LmgiCi0jaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotbmFtZXNwYWNlIExheW91dCB7Ci0KLVdURl9NQUtFX0lTT19B
TExPQ0FURURfSU1QTChJbmxpbmVSdW5Qcm92aWRlcik7Ci0KLUlubGluZVJ1blByb3ZpZGVyOjpJ
bmxpbmVSdW5Qcm92aWRlcigpCi17Ci19Ci0KLXZvaWQgSW5saW5lUnVuUHJvdmlkZXI6OmFwcGVu
ZChjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtKQotewotICAgIHN3aXRjaCAoaW5saW5lSXRl
bS50eXBlKCkpIHsKLSAgICBjYXNlIElubGluZUl0ZW06OlR5cGU6OlRleHQ6Ci0gICAgICAgIC8v
IFNwZWNpYWwgY2FzZSB0ZXh0IGNvbnRlbnQuIFRoZXkgY2FuIG92ZXJsYXAgbXVsdGlwbGUgaXRl
bXMuIDxzcGFuPmZvbzwvc3Bhbj48c3Bhbj5iYXI8L3NwYW4+Ci0gICAgICAgIHByb2Nlc3NJbmxp
bmVUZXh0SXRlbShpbmxpbmVJdGVtKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbmxpbmVJ
dGVtOjpUeXBlOjpIYXJkTGluZUJyZWFrOgotICAgICAgICBtX2lubGluZVJ1bnMuYXBwZW5kKElu
bGluZVJ1blByb3ZpZGVyOjpSdW46OmNyZWF0ZUhhcmRMaW5lQnJlYWtSdW4oaW5saW5lSXRlbSkp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIElubGluZUl0ZW06OlR5cGU6OklubGluZUJveDoK
LSAgICAgICAgbV9pbmxpbmVSdW5zLmFwcGVuZChJbmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpjcmVh
dGVCb3hSdW4oaW5saW5lSXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIElubGluZUl0
ZW06OlR5cGU6OkZsb2F0OgotICAgICAgICBtX2lubGluZVJ1bnMuYXBwZW5kKElubGluZVJ1blBy
b3ZpZGVyOjpSdW46OmNyZWF0ZUZsb2F0UnVuKGlubGluZUl0ZW0pKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9JTVBMRU1FTlRFRF9ZRVQoKTsKLSAg
ICB9Ci19Ci0KLXZvaWQgSW5saW5lUnVuUHJvdmlkZXI6Omluc2VydEJlZm9yZShjb25zdCBCb3gm
LCBjb25zdCBCb3gmKQotewotfQotCi12b2lkIElubGluZVJ1blByb3ZpZGVyOjpyZW1vdmUoY29u
c3QgQm94JikKLXsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGlzV2hpdGVzcGFjZShjaGFyIGNo
YXJhY3RlciwgYm9vbCBwcmVzZXJ2ZU5ld2xpbmUpCi17Ci0gICAgcmV0dXJuIGNoYXJhY3RlciA9
PSAnICcgfHwgY2hhcmFjdGVyID09ICdcdCcgfHwgKGNoYXJhY3RlciA9PSAnXG4nICYmICFwcmVz
ZXJ2ZU5ld2xpbmUpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNTb2Z0TGluZUJyZWFrKGNo
YXIgY2hhcmFjdGVyLCBib29sIHByZXNlcnZlTmV3bGluZSkKLXsKLSAgICByZXR1cm4gcHJlc2Vy
dmVOZXdsaW5lICYmIGNoYXJhY3RlciA9PSAnXG4nOwotfQotCi1ib29sIElubGluZVJ1blByb3Zp
ZGVyOjppc0NvbnRpbm91c0NvbnRlbnQoSW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6VHlwZSBuZXdS
dW5UeXBlLCBjb25zdCBJbmxpbmVJdGVtJiBuZXdJbmxpbmVJdGVtKQotewotICAgIGlmIChtX2lu
bGluZVJ1bnMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvJiBs
YXN0UnVuID0gbV9pbmxpbmVSdW5zLmxhc3QoKTsKLSAgICAvLyBTYW1lIGVsZW1lbnQsIGNoZWNr
IHR5cGUgb25seS4KLSAgICBpZiAoJm5ld0lubGluZUl0ZW0gPT0gJmxhc3RSdW4uaW5saW5lSXRl
bSgpKQotICAgICAgICByZXR1cm4gbmV3UnVuVHlwZSA9PSBsYXN0UnVuLnR5cGUoKTsKLQotICAg
IC8vIFRoaXMgbmV3IHJ1biBpcyBmcm9tIGEgZGlmZmVyZW50IGlubGluZSBib3guCi0gICAgLy8g
RklYTUU6IGNoZWNrIHN0eWxlLgotICAgIGlmIChuZXdSdW5UeXBlID09IElubGluZVJ1blByb3Zp
ZGVyOjpSdW46OlR5cGU6Ok5vbldoaXRlc3BhY2UgJiYgbGFzdFJ1bi5pc05vbldoaXRlc3BhY2Uo
KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAobmV3UnVuVHlwZSA9PSBJbmxpbmVS
dW5Qcm92aWRlcjo6UnVuOjpUeXBlOjpXaGl0ZXNwYWNlICYmIGxhc3RSdW4uaXNXaGl0ZXNwYWNl
KCkpCi0gICAgICAgIHJldHVybiBuZXdJbmxpbmVJdGVtLnN0eWxlKCkuY29sbGFwc2VXaGl0ZVNw
YWNlKCkgPT0gbGFzdFJ1bi5zdHlsZSgpLmNvbGxhcHNlV2hpdGVTcGFjZSgpOwotCi0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi12b2lkIElubGluZVJ1blByb3ZpZGVyOjpwcm9jZXNzSW5saW5lVGV4
dEl0ZW0oY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSkKLXsKLSAgICAvLyBXZSBuZWVkIHRv
IHJlc2V0IHRoZSBydW4gaXRlcmF0b3Igd2hlbiB0aGUgdGV4dCBjb250ZW50IGlzIG5vdCBjb250
aW51b3VzLgotICAgIC8vIDxzcGFuPmZvbzwvc3Bhbj48aW1nIHNyYz0iIj48c3Bhbj5iYXI8L3Nw
YW4+IChGSVhNRTogZmxvYXRzPykKLSAgICBpZiAoIW1faW5saW5lUnVucy5pc0VtcHR5KCkgJiYg
IW1faW5saW5lUnVucy5sYXN0KCkuaXNUZXh0KCkpIHsKLSAgICAgICAgbV9saW5lQnJlYWtJdGVy
YXRvci5yZXNldFByaW9yQ29udGV4dCgpOwotICAgICAgICBtX2xpbmVCcmVha0l0ZXJhdG9yLnJl
c2V0U3RyaW5nQW5kUmVsZWFzZUl0ZXJhdG9yKCIiLCAiIiwgTGluZUJyZWFrSXRlcmF0b3JNb2Rl
OjpEZWZhdWx0KTsKLSAgICB9Ci0KLSAgICBhdXRvJiBzdHlsZSA9IGlubGluZUl0ZW0uc3R5bGUo
KTsKLSAgICBhdXRvIHRleHQgPSBpbmxpbmVJdGVtLnRleHRDb250ZW50KCk7Ci0gICAgSXRlbVBv
c2l0aW9uIGN1cnJlbnRJdGVtUG9zaXRpb24gPSAwOwotICAgIHdoaWxlIChjdXJyZW50SXRlbVBv
c2l0aW9uIDwgdGV4dC5sZW5ndGgoKSkgewotCi0gICAgICAgIC8vIFNvZnQgbGluZWJyZWFrPwot
ICAgICAgICBpZiAoaXNTb2Z0TGluZUJyZWFrKHRleHRbY3VycmVudEl0ZW1Qb3NpdGlvbl0sIHN0
eWxlLnByZXNlcnZlTmV3bGluZSgpKSkgewotICAgICAgICAgICAgbV9pbmxpbmVSdW5zLmFwcGVu
ZChJbmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpjcmVhdGVTb2Z0TGluZUJyZWFrUnVuKGlubGluZUl0
ZW0pKTsKLSAgICAgICAgICAgICsrY3VycmVudEl0ZW1Qb3NpdGlvbjsKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgYXV0byBpc1doaXRlc3BhY2VSdW4gPSBpc1do
aXRlc3BhY2UodGV4dFtjdXJyZW50SXRlbVBvc2l0aW9uXSwgc3R5bGUucHJlc2VydmVOZXdsaW5l
KCkpOwotICAgICAgICBhdXRvIGxlbmd0aCA9IGlzV2hpdGVzcGFjZVJ1biA/IG1vdmVUb05leHRO
b25XaGl0ZXNwYWNlUG9zaXRpb24oaW5saW5lSXRlbSwgY3VycmVudEl0ZW1Qb3NpdGlvbikgOiBt
b3ZlVG9OZXh0QnJlYWthYmxlUG9zaXRpb24oaW5saW5lSXRlbSwgY3VycmVudEl0ZW1Qb3NpdGlv
bik7Ci0KLSAgICAgICAgaWYgKGlzQ29udGlub3VzQ29udGVudChpc1doaXRlc3BhY2VSdW4gPyBJ
bmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpUeXBlOjpXaGl0ZXNwYWNlIDogSW5saW5lUnVuUHJvdmlk
ZXI6OlJ1bjo6VHlwZTo6Tm9uV2hpdGVzcGFjZSwgaW5saW5lSXRlbSkpCi0gICAgICAgICAgICBt
X2lubGluZVJ1bnMubGFzdCgpLnRleHRDb250ZXh0KCktPmV4cGFuZChsZW5ndGgpOwotICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgIG1faW5saW5lUnVucy5hcHBlbmQoaXNXaGl0ZXNwYWNlUnVu
ID8gSW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6Y3JlYXRlV2hpdGVzcGFjZVJ1bihpbmxpbmVJdGVt
LCBjdXJyZW50SXRlbVBvc2l0aW9uLCBsZW5ndGgsIHN0eWxlLmNvbGxhcHNlV2hpdGVTcGFjZSgp
KQotICAgICAgICAgICAgICAgIDogSW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6Y3JlYXRlTm9uV2hp
dGVzcGFjZVJ1bihpbmxpbmVJdGVtLCBjdXJyZW50SXRlbVBvc2l0aW9uLCBsZW5ndGgpKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGN1cnJlbnRJdGVtUG9zaXRpb24gKz0gbGVuZ3RoOwotICAgIH0K
LX0KLQotdW5zaWduZWQgSW5saW5lUnVuUHJvdmlkZXI6Om1vdmVUb05leHROb25XaGl0ZXNwYWNl
UG9zaXRpb24oY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSwgSXRlbVBvc2l0aW9uIGN1cnJl
bnRJdGVtUG9zaXRpb24pCi17Ci0gICAgYXV0byB0ZXh0ID0gaW5saW5lSXRlbS50ZXh0Q29udGVu
dCgpOwotICAgIGF1dG8gcHJlc2VydmVOZXdsaW5lID0gaW5saW5lSXRlbS5zdHlsZSgpLnByZXNl
cnZlTmV3bGluZSgpOwotICAgIGF1dG8gbmV4dE5vbldoaXRlU3BhY2VQb3NpdGlvbiA9IGN1cnJl
bnRJdGVtUG9zaXRpb247Ci0KLSAgICB3aGlsZSAobmV4dE5vbldoaXRlU3BhY2VQb3NpdGlvbiA8
IHRleHQubGVuZ3RoKCkgJiYgaXNXaGl0ZXNwYWNlKHRleHRbbmV4dE5vbldoaXRlU3BhY2VQb3Np
dGlvbl0sIHByZXNlcnZlTmV3bGluZSkpCi0gICAgICAgICsrbmV4dE5vbldoaXRlU3BhY2VQb3Np
dGlvbjsKLSAgICByZXR1cm4gbmV4dE5vbldoaXRlU3BhY2VQb3NpdGlvbiAtIGN1cnJlbnRJdGVt
UG9zaXRpb247Ci19Ci0KLXVuc2lnbmVkIElubGluZVJ1blByb3ZpZGVyOjptb3ZlVG9OZXh0QnJl
YWthYmxlUG9zaXRpb24oY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSwgSXRlbVBvc2l0aW9u
IGN1cnJlbnRJdGVtUG9zaXRpb24pCi17Ci0gICAgYXV0byBmaW5kTmV4dEJyZWFrYWJsZVBvc2l0
aW9uID0gWyZdKGF1dG8gaW5saW5lVGV4dCwgYXV0byYgc3R5bGUsIEl0ZW1Qb3NpdGlvbiBzdGFy
dFBvc2l0aW9uKSB7Ci0gICAgICAgIC8vIFN3YXAgaXRlcmF0b3IncyBjb250ZW50IGlmIHdlIGFk
dmFuY2VkIHRvIGEgbmV3IHN0cmluZy4KLSAgICAgICAgYXV0byBpdGVyYXRvclRleHQgPSBtX2xp
bmVCcmVha0l0ZXJhdG9yLnN0cmluZ1ZpZXcoKTsKLQotICAgICAgICBpZiAoaXRlcmF0b3JUZXh0
ICE9IGlubGluZVRleHQpIHsKLSAgICAgICAgICAgIGF1dG8gdGV4dExlbmd0aCA9IGl0ZXJhdG9y
VGV4dC5sZW5ndGgoKTsKLSAgICAgICAgICAgIGF1dG8gbGFzdENoYXJhY3RlciA9IHRleHRMZW5n
dGggPiAwID8gaXRlcmF0b3JUZXh0W3RleHRMZW5ndGggLSAxXSA6IDA7Ci0gICAgICAgICAgICBh
dXRvIHNlY29uZFRvTGFzdENoYXJhY3RlciA9IHRleHRMZW5ndGggPiAxID8gaXRlcmF0b3JUZXh0
W3RleHRMZW5ndGggLSAyXSA6IDA7Ci0gICAgICAgICAgICBtX2xpbmVCcmVha0l0ZXJhdG9yLnNl
dFByaW9yQ29udGV4dChsYXN0Q2hhcmFjdGVyLCBzZWNvbmRUb0xhc3RDaGFyYWN0ZXIpOwotICAg
ICAgICAgICAgbV9saW5lQnJlYWtJdGVyYXRvci5yZXNldFN0cmluZ0FuZFJlbGVhc2VJdGVyYXRv
cihpbmxpbmVUZXh0LCBzdHlsZS5sb2NhbGUoKSwgTGluZUJyZWFrSXRlcmF0b3JNb2RlOjpEZWZh
dWx0KTsKLSAgICAgICAgfQotCi0gICAgICAgIGF1dG8ga2VlcEFsbFdvcmRzRm9yQ0pLID0gc3R5
bGUud29yZEJyZWFrKCkgPT0gV29yZEJyZWFrOjpLZWVwQWxsOwotICAgICAgICBhdXRvIGJyZWFr
TkJTUCA9IHN0eWxlLmF1dG9XcmFwKCkgJiYgc3R5bGUubmJzcE1vZGUoKSA9PSBOQlNQTW9kZTo6
U3BhY2U7Ci0KLSAgICAgICAgaWYgKGtlZXBBbGxXb3Jkc0ZvckNKSykgewotICAgICAgICAgICAg
aWYgKGJyZWFrTkJTUCkKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV4dEJyZWFrYWJsZVBvc2l0
aW9uS2VlcGluZ0FsbFdvcmRzKG1fbGluZUJyZWFrSXRlcmF0b3IsIHN0YXJ0UG9zaXRpb24pOwot
ICAgICAgICAgICAgcmV0dXJuIG5leHRCcmVha2FibGVQb3NpdGlvbktlZXBpbmdBbGxXb3Jkc0ln
bm9yaW5nTkJTUChtX2xpbmVCcmVha0l0ZXJhdG9yLCBzdGFydFBvc2l0aW9uKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChtX2xpbmVCcmVha0l0ZXJhdG9yLm1vZGUoKSA9PSBMaW5lQnJlYWtJ
dGVyYXRvck1vZGU6OkRlZmF1bHQpIHsKLSAgICAgICAgICAgIGlmIChicmVha05CU1ApCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIFdlYkNvcmU6Om5leHRCcmVha2FibGVQb3NpdGlvbihtX2xpbmVC
cmVha0l0ZXJhdG9yLCBzdGFydFBvc2l0aW9uKTsKLSAgICAgICAgICAgIHJldHVybiBuZXh0QnJl
YWthYmxlUG9zaXRpb25JZ25vcmluZ05CU1AobV9saW5lQnJlYWtJdGVyYXRvciwgc3RhcnRQb3Np
dGlvbik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYnJlYWtOQlNQKQotICAgICAgICAgICAg
cmV0dXJuIG5leHRCcmVha2FibGVQb3NpdGlvbldpdGhvdXRTaG9ydGN1dChtX2xpbmVCcmVha0l0
ZXJhdG9yLCBzdGFydFBvc2l0aW9uKTsKLSAgICAgICAgcmV0dXJuIG5leHRCcmVha2FibGVQb3Np
dGlvbklnbm9yaW5nTkJTUFdpdGhvdXRTaG9ydGN1dChtX2xpbmVCcmVha0l0ZXJhdG9yLCBzdGFy
dFBvc2l0aW9uKTsKLSAgICB9OwotCi0gICAgYXV0byYgc3R5bGUgPSBpbmxpbmVJdGVtLnN0eWxl
KCk7Ci0gICAgYXV0byB0ZXh0TGVuZ3RoID0gaW5saW5lSXRlbS50ZXh0Q29udGVudCgpLmxlbmd0
aCgpOwotICAgIEFTU0VSVCh0ZXh0TGVuZ3RoKTsKLSAgICB3aGlsZSAoY3VycmVudEl0ZW1Qb3Np
dGlvbiA8IHRleHRMZW5ndGggLSAxKSB7Ci0gICAgICAgIGF1dG8gbmV4dEJyZWFrYWJsZVBvc2l0
aW9uID0gZmluZE5leHRCcmVha2FibGVQb3NpdGlvbihpbmxpbmVJdGVtLnRleHRDb250ZW50KCks
IHN0eWxlLCBjdXJyZW50SXRlbVBvc2l0aW9uKTsKLSAgICAgICAgaWYgKG5leHRCcmVha2FibGVQ
b3NpdGlvbiAhPSBjdXJyZW50SXRlbVBvc2l0aW9uKQotICAgICAgICAgICAgcmV0dXJuIG5leHRC
cmVha2FibGVQb3NpdGlvbiAtIGN1cnJlbnRJdGVtUG9zaXRpb247Ci0gICAgICAgICsrY3VycmVu
dEl0ZW1Qb3NpdGlvbjsKLSAgICB9Ci0gICAgcmV0dXJuIHRleHRMZW5ndGg7Ci19Ci0KLX0KLX0K
LSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRp
bmcvSW5saW5lUnVuUHJvdmlkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3Jt
YXR0aW5nL0lubGluZVJ1blByb3ZpZGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGQ3N2MxNDhlZWVlMGNhZGEyNDU2NjFlZmViOGZjNTY3ZGVlZDg2MDguLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lu
bGluZWZvcm1hdHRpbmcvSW5saW5lUnVuUHJvdmlkZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDE2
OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoTEFZT1VU
X0ZPUk1BVFRJTkdfQ09OVEVYVCkKLQotI2luY2x1ZGUgIklubGluZUl0ZW0uaCIKLSNpbmNsdWRl
IDx3dGYvSXNvTWFsbG9jLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvVGV4dEJyZWFrSXRlcmF0b3Iu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotbmFtZXNwYWNlIExheW91dCB7Ci0KLXVzaW5nIEl0
ZW1Qb3NpdGlvbiA9IHVuc2lnbmVkOwotCi1jbGFzcyBJbmxpbmVSdW5Qcm92aWRlciB7Ci0gICAg
V1RGX01BS0VfSVNPX0FMTE9DQVRFRChJbmxpbmVSdW5Qcm92aWRlcik7Ci1wdWJsaWM6Ci0gICAg
SW5saW5lUnVuUHJvdmlkZXIoKTsKLQotICAgIHZvaWQgYXBwZW5kKGNvbnN0IElubGluZUl0ZW0m
KTsKLSAgICB2b2lkIGluc2VydEJlZm9yZShjb25zdCBCb3gmLCBjb25zdCBCb3gmIGJlZm9yZSk7
Ci0gICAgdm9pZCByZW1vdmUoY29uc3QgQm94Jik7Ci0KLSAgICBzdHJ1Y3QgUnVuIHsKLQotICAg
ICAgICBzdGF0aWMgUnVuIGNyZWF0ZUJveFJ1bihjb25zdCBJbmxpbmVJdGVtJik7Ci0gICAgICAg
IHN0YXRpYyBSdW4gY3JlYXRlRmxvYXRSdW4oY29uc3QgSW5saW5lSXRlbSYpOwotICAgICAgICBz
dGF0aWMgUnVuIGNyZWF0ZUhhcmRMaW5lQnJlYWtSdW4oY29uc3QgSW5saW5lSXRlbSYpOwotICAg
ICAgICBzdGF0aWMgUnVuIGNyZWF0ZVNvZnRMaW5lQnJlYWtSdW4oY29uc3QgSW5saW5lSXRlbSYp
OwotICAgICAgICBzdGF0aWMgUnVuIGNyZWF0ZVdoaXRlc3BhY2VSdW4oY29uc3QgSW5saW5lSXRl
bSYsIEl0ZW1Qb3NpdGlvbiBzdGFydCwgdW5zaWduZWQgbGVuZ3RoLCBib29sIGlzQ29sbGFwc2li
bGUpOwotICAgICAgICBzdGF0aWMgUnVuIGNyZWF0ZU5vbldoaXRlc3BhY2VSdW4oY29uc3QgSW5s
aW5lSXRlbSYsIEl0ZW1Qb3NpdGlvbiBzdGFydCwgdW5zaWduZWQgbGVuZ3RoKTsKLQotICAgICAg
ICBlbnVtIGNsYXNzIFR5cGUgewotICAgICAgICAgICAgQm94LAotICAgICAgICAgICAgRmxvYXQs
Ci0gICAgICAgICAgICBTb2Z0TGluZUJyZWFrLAotICAgICAgICAgICAgSGFyZExpbmVCcmVhaywK
LSAgICAgICAgICAgIFdoaXRlc3BhY2UsCi0gICAgICAgICAgICBOb25XaGl0ZXNwYWNlCi0gICAg
ICAgIH07Ci0gICAgICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQotICAg
ICAgICBib29sIGlzVGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBSdW46OlR5cGU6Oldo
aXRlc3BhY2UgfHwgbV90eXBlID09IFJ1bjo6VHlwZTo6Tm9uV2hpdGVzcGFjZSB8fCBtX3R5cGUg
PT0gUnVuOjpUeXBlOjpTb2Z0TGluZUJyZWFrIHx8IG1fdHlwZSA9PSBSdW46OlR5cGU6OkhhcmRM
aW5lQnJlYWs7IH0KLSAgICAgICAgYm9vbCBpc1doaXRlc3BhY2UoKSBjb25zdCB7IHJldHVybiBt
X3R5cGUgPT0gVHlwZTo6V2hpdGVzcGFjZTsgfQotICAgICAgICBib29sIGlzTm9uV2hpdGVzcGFj
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBUeXBlOjpOb25XaGl0ZXNwYWNlOyB9Ci0gICAg
ICAgIGJvb2wgaXNMaW5lQnJlYWsoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gUnVuOjpUeXBl
OjpTb2Z0TGluZUJyZWFrIHx8IG1fdHlwZSA9PSBSdW46OlR5cGU6OkhhcmRMaW5lQnJlYWs7IH0K
LSAgICAgICAgYm9vbCBpc0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBUeXBlOjpCb3g7
IH0KLSAgICAgICAgYm9vbCBpc0Zsb2F0KCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IFR5cGU6
OkZsb2F0OyB9Ci0KLSAgICAgICAgc3RydWN0IFRleHRDb250ZXh0IHsKLQotICAgICAgICAgICAg
ZW51bSBjbGFzcyBJc0NvbGxhcHNlZCB7IE5vLCBZZXMgfTsKLSAgICAgICAgICAgIFRleHRDb250
ZXh0KEl0ZW1Qb3NpdGlvbiwgdW5zaWduZWQgbGVuZ3RoLCBJc0NvbGxhcHNlZCk7Ci0KLSAgICAg
ICAgICAgIEl0ZW1Qb3NpdGlvbiBzdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnQ7IH0KLSAg
ICAgICAgICAgIC8vIE5vdGUgdGhhdCAnZW5kJyBwb3NpdGlvbiBkb2VzIG5vdCBlcXVhbCB0byBz
dGFydCArIGxlbmd0aCB3aGVuIHJ1biBvdmVybGFwcyBtdWx0aXBsZSBJbmxpbmVJdGVtcy4KLSAg
ICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9Ci0g
ICAgICAgICAgICBib29sIGlzQ29sbGFwc2VkKCkgY29uc3QgeyByZXR1cm4gbV9pc0NvbGxhcHNl
ZCA9PSBJc0NvbGxhcHNlZDo6WWVzOyB9Ci0KLSAgICAgICAgcHJpdmF0ZToKLSAgICAgICAgICAg
IGZyaWVuZCBjbGFzcyBJbmxpbmVSdW5Qcm92aWRlcjsKLQotICAgICAgICAgICAgdm9pZCBleHBh
bmQodW5zaWduZWQgbGVuZ3RoKSB7IG1fbGVuZ3RoICs9IGxlbmd0aDsgfQotCi0gICAgICAgICAg
ICBJdGVtUG9zaXRpb24gbV9zdGFydCB7IDAgfTsKLSAgICAgICAgICAgIHVuc2lnbmVkIG1fbGVu
Z3RoIHsgMCB9OwotICAgICAgICAgICAgSXNDb2xsYXBzZWQgbV9pc0NvbGxhcHNlZCB7IElzQ29s
bGFwc2VkOjpObyB9OwotICAgICAgICB9OwotICAgICAgICBPcHRpb25hbDxUZXh0Q29udGV4dD4g
dGV4dENvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX3RleHRDb250ZXh0OyB9Ci0gICAgICAgIC8v
IE5vdGUgdGhhdCBzdHlsZSgpIGFuZCBpbmxpbmVJdGVtKCkgYWx3YXlzIHJldHVybnMgdGhlIGZp
cnN0IElubGluZUl0ZW0gZm9yIGEgcnVuLgotICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5
bGUoKSBjb25zdCB7IHJldHVybiBtX2lubGluZUl0ZW0uc3R5bGUoKTsgfQotICAgICAgICBjb25z
dCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtKCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVJdGVtOyB9
Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBmcmllbmQgY2xhc3MgSW5saW5lUnVuUHJvdmlkZXI7
Ci0KLSAgICAgICAgUnVuKGNvbnN0IElubGluZUl0ZW0mLCBUeXBlLCBPcHRpb25hbDxUZXh0Q29u
dGV4dD4pOwotICAgICAgICBPcHRpb25hbDxUZXh0Q29udGV4dD4mIHRleHRDb250ZXh0KCkgeyBy
ZXR1cm4gbV90ZXh0Q29udGV4dDsgfQotCi0gICAgICAgIGNvbnN0IFR5cGUgbV90eXBlOwotICAg
ICAgICBjb25zdCBJbmxpbmVJdGVtJiBtX2lubGluZUl0ZW07Ci0gICAgICAgIE9wdGlvbmFsPFRl
eHRDb250ZXh0PiBtX3RleHRDb250ZXh0OwotICAgIH07Ci0gICAgY29uc3QgVmVjdG9yPElubGlu
ZVJ1blByb3ZpZGVyOjpSdW4+JiBydW5zKCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVSdW5zOyB9
Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBjb21taXRUZXh0UnVuKCk7Ci0gICAgdm9pZCBwcm9jZXNz
SW5saW5lVGV4dEl0ZW0oY29uc3QgSW5saW5lSXRlbSYpOwotICAgIHVuc2lnbmVkIG1vdmVUb05l
eHROb25XaGl0ZXNwYWNlUG9zaXRpb24oY29uc3QgSW5saW5lSXRlbSYsIEl0ZW1Qb3NpdGlvbiBj
dXJyZW50UG9zaXRpb24pOwotICAgIHVuc2lnbmVkIG1vdmVUb05leHRCcmVha2FibGVQb3NpdGlv
bihjb25zdCBJbmxpbmVJdGVtJiwgSXRlbVBvc2l0aW9uIGN1cnJlbnRQb3NpdGlvbik7Ci0gICAg
Ym9vbCBpc0NvbnRpbm91c0NvbnRlbnQoUnVuOjpUeXBlIG5ld1J1blR5cGUsIGNvbnN0IElubGlu
ZUl0ZW0mIG5ld0lubGluZUl0ZW0pOwotCi0gICAgTGF6eUxpbmVCcmVha0l0ZXJhdG9yIG1fbGlu
ZUJyZWFrSXRlcmF0b3I7Ci0KLSAgICBWZWN0b3I8SW5saW5lUnVuUHJvdmlkZXI6OlJ1bj4gbV9p
bmxpbmVSdW5zOwotfTsKLQotaW5saW5lIElubGluZVJ1blByb3ZpZGVyOjpSdW4gSW5saW5lUnVu
UHJvdmlkZXI6OlJ1bjo6Y3JlYXRlQm94UnVuKGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0p
Ci17Ci0gICAgcmV0dXJuIHsgaW5saW5lSXRlbSwgVHlwZTo6Qm94LCBXVEY6Om51bGxvcHQgfTsK
LX0KLQotaW5saW5lIElubGluZVJ1blByb3ZpZGVyOjpSdW4gSW5saW5lUnVuUHJvdmlkZXI6OlJ1
bjo6Y3JlYXRlRmxvYXRSdW4oY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSkKLXsKLSAgICBy
ZXR1cm4geyBpbmxpbmVJdGVtLCBUeXBlOjpGbG9hdCwgV1RGOjpudWxsb3B0IH07Ci19Ci0KLWlu
bGluZSBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuIElubGluZVJ1blByb3ZpZGVyOjpSdW46OmNyZWF0
ZVNvZnRMaW5lQnJlYWtSdW4oY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSkKLXsKLSAgICBy
ZXR1cm4geyBpbmxpbmVJdGVtLCBUeXBlOjpTb2Z0TGluZUJyZWFrLCBXVEY6Om51bGxvcHQgfTsK
LX0KLQotaW5saW5lIElubGluZVJ1blByb3ZpZGVyOjpSdW4gSW5saW5lUnVuUHJvdmlkZXI6OlJ1
bjo6Y3JlYXRlSGFyZExpbmVCcmVha1J1bihjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtKQot
ewotICAgIHJldHVybiB7IGlubGluZUl0ZW0sIFR5cGU6OkhhcmRMaW5lQnJlYWssIFdURjo6bnVs
bG9wdCB9OwotfQotCi1pbmxpbmUgSW5saW5lUnVuUHJvdmlkZXI6OlJ1biBJbmxpbmVSdW5Qcm92
aWRlcjo6UnVuOjpjcmVhdGVXaGl0ZXNwYWNlUnVuKGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0
ZW0sIEl0ZW1Qb3NpdGlvbiBzdGFydCwgdW5zaWduZWQgbGVuZ3RoLCBib29sIGlzQ29sbGFwc2li
bGUpCi17Ci0gICAgQVNTRVJUKGxlbmd0aCk7Ci0gICAgYXV0byBpc0NvbGxhcHNlZCA9IGlzQ29s
bGFwc2libGUgJiYgbGVuZ3RoID4gMSA/IFRleHRDb250ZXh0OjpJc0NvbGxhcHNlZDo6WWVzIDog
VGV4dENvbnRleHQ6OklzQ29sbGFwc2VkOjpObzsKLSAgICByZXR1cm4geyBpbmxpbmVJdGVtLCBU
eXBlOjpXaGl0ZXNwYWNlLCBUZXh0Q29udGV4dChzdGFydCwgbGVuZ3RoLCBpc0NvbGxhcHNlZCkg
fTsKLX0KLQotaW5saW5lIElubGluZVJ1blByb3ZpZGVyOjpSdW4gSW5saW5lUnVuUHJvdmlkZXI6
OlJ1bjo6Y3JlYXRlTm9uV2hpdGVzcGFjZVJ1bihjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVt
LCBJdGVtUG9zaXRpb24gc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4geyBp
bmxpbmVJdGVtLCBUeXBlOjpOb25XaGl0ZXNwYWNlLCBUZXh0Q29udGV4dChzdGFydCwgbGVuZ3Ro
LCBUZXh0Q29udGV4dDo6SXNDb2xsYXBzZWQ6Ok5vKSB9OwotfQotCi1pbmxpbmUgSW5saW5lUnVu
UHJvdmlkZXI6OlJ1bjo6UnVuKGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0sIFR5cGUgdHlw
ZSwgT3B0aW9uYWw8VGV4dENvbnRleHQ+IHRleHRDb250ZXh0KQotICAgIDogbV90eXBlKHR5cGUp
Ci0gICAgLCBtX2lubGluZUl0ZW0oaW5saW5lSXRlbSkKLSAgICAsIG1fdGV4dENvbnRleHQodGV4
dENvbnRleHQpCi17Ci19Ci0KLWlubGluZSBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpUZXh0Q29u
dGV4dDo6VGV4dENvbnRleHQoSXRlbVBvc2l0aW9uIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIElz
Q29sbGFwc2VkIGlzQ29sbGFwc2VkKQotICAgIDogbV9zdGFydChzdGFydCkKLSAgICAsIG1fbGVu
Z3RoKGxlbmd0aCkKLSAgICAsIG1faXNDb2xsYXBzZWQoaXNDb2xsYXBzZWQpCi17Ci19Ci0KLX0K
LX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1h
dHRpbmcvSW5saW5lVGV4dEl0ZW0uY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZv
cm1hdHRpbmcvSW5saW5lVGV4dEl0ZW0uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNmNTQyNDY0ZmRiYmY0NmY0
MThiMDExY2EwNDgzYTVlN2I5MmQxOGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVUZXh0SXRlbS5jcHAKQEAgLTAsMCArMSwx
MzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5saW5l
VGV4dEl0ZW0uaCIKKworI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQorCisj
aW5jbHVkZSAiQnJlYWtMaW5lcy5oIgorI2luY2x1ZGUgIkxheW91dElubGluZUJveC5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgTGF5b3V0IHsKKworc3RhdGljIGlubGluZSBi
b29sIGlzV2hpdGVzcGFjZUNoYXJhY3RlcihjaGFyIGNoYXJhY3RlciwgYm9vbCBwcmVzZXJ2ZU5l
d2xpbmUpCit7CisgICAgcmV0dXJuIGNoYXJhY3RlciA9PSAnICcgfHwgY2hhcmFjdGVyID09ICdc
dCcgfHwgKGNoYXJhY3RlciA9PSAnXG4nICYmICFwcmVzZXJ2ZU5ld2xpbmUpOworfQorCitzdGF0
aWMgaW5saW5lIGJvb2wgaXNTb2Z0TGluZUJyZWFrKGNoYXIgY2hhcmFjdGVyLCBib29sIHByZXNl
cnZlTmV3bGluZSkKK3sKKyAgICByZXR1cm4gcHJlc2VydmVOZXdsaW5lICYmIGNoYXJhY3RlciA9
PSAnXG4nOworfQorCitzdGF0aWMgdW5zaWduZWQgbW92ZVRvTmV4dE5vbldoaXRlc3BhY2VQb3Np
dGlvbihTdHJpbmcgdGV4dENvbnRlbnQsIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24sIGJvb2wgcHJl
c2VydmVOZXdsaW5lKQoreworICAgIGF1dG8gbmV4dE5vbldoaXRlU3BhY2VQb3NpdGlvbiA9IHN0
YXJ0UG9zaXRpb247CisgICAgd2hpbGUgKG5leHROb25XaGl0ZVNwYWNlUG9zaXRpb24gPCB0ZXh0
Q29udGVudC5sZW5ndGgoKSAmJiBpc1doaXRlc3BhY2VDaGFyYWN0ZXIodGV4dENvbnRlbnRbbmV4
dE5vbldoaXRlU3BhY2VQb3NpdGlvbl0sIHByZXNlcnZlTmV3bGluZSkpCisgICAgICAgICsrbmV4
dE5vbldoaXRlU3BhY2VQb3NpdGlvbjsKKyAgICByZXR1cm4gbmV4dE5vbldoaXRlU3BhY2VQb3Np
dGlvbiAtIHN0YXJ0UG9zaXRpb247Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBtb3ZlVG9OZXh0QnJl
YWthYmxlUG9zaXRpb24odW5zaWduZWQgc3RhcnRQb3NpdGlvbiwgTGF6eUxpbmVCcmVha0l0ZXJh
dG9yIGxpbmVCcmVha0l0ZXJhdG9yLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCit7CisgICAg
YXV0byBmaW5kTmV4dEJyZWFrYWJsZVBvc2l0aW9uID0gWyZdKGF1dG8gc3RhcnRQb3NpdGlvbikg
eworICAgICAgICBhdXRvIGtlZXBBbGxXb3Jkc0ZvckNKSyA9IHN0eWxlLndvcmRCcmVhaygpID09
IFdvcmRCcmVhazo6S2VlcEFsbDsKKyAgICAgICAgYXV0byBicmVha05CU1AgPSBzdHlsZS5hdXRv
V3JhcCgpICYmIHN0eWxlLm5ic3BNb2RlKCkgPT0gTkJTUE1vZGU6OlNwYWNlOworCisgICAgICAg
IGlmIChrZWVwQWxsV29yZHNGb3JDSkspIHsKKyAgICAgICAgICAgIGlmIChicmVha05CU1ApCisg
ICAgICAgICAgICAgICAgcmV0dXJuIG5leHRCcmVha2FibGVQb3NpdGlvbktlZXBpbmdBbGxXb3Jk
cyhsaW5lQnJlYWtJdGVyYXRvciwgc3RhcnRQb3NpdGlvbik7CisgICAgICAgICAgICByZXR1cm4g
bmV4dEJyZWFrYWJsZVBvc2l0aW9uS2VlcGluZ0FsbFdvcmRzSWdub3JpbmdOQlNQKGxpbmVCcmVh
a0l0ZXJhdG9yLCBzdGFydFBvc2l0aW9uKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsaW5l
QnJlYWtJdGVyYXRvci5tb2RlKCkgPT0gTGluZUJyZWFrSXRlcmF0b3JNb2RlOjpEZWZhdWx0KSB7
CisgICAgICAgICAgICBpZiAoYnJlYWtOQlNQKQorICAgICAgICAgICAgICAgIHJldHVybiBXZWJD
b3JlOjpuZXh0QnJlYWthYmxlUG9zaXRpb24obGluZUJyZWFrSXRlcmF0b3IsIHN0YXJ0UG9zaXRp
b24pOworICAgICAgICAgICAgcmV0dXJuIG5leHRCcmVha2FibGVQb3NpdGlvbklnbm9yaW5nTkJT
UChsaW5lQnJlYWtJdGVyYXRvciwgc3RhcnRQb3NpdGlvbik7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoYnJlYWtOQlNQKQorICAgICAgICAgICAgcmV0dXJuIG5leHRCcmVha2FibGVQb3NpdGlv
bldpdGhvdXRTaG9ydGN1dChsaW5lQnJlYWtJdGVyYXRvciwgc3RhcnRQb3NpdGlvbik7CisgICAg
ICAgIHJldHVybiBuZXh0QnJlYWthYmxlUG9zaXRpb25JZ25vcmluZ05CU1BXaXRob3V0U2hvcnRj
dXQobGluZUJyZWFrSXRlcmF0b3IsIHN0YXJ0UG9zaXRpb24pOworICAgIH07CisKKyAgICBhdXRv
IHRleHRMZW5ndGggPSBsaW5lQnJlYWtJdGVyYXRvci5zdHJpbmdWaWV3KCkubGVuZ3RoKCk7Cisg
ICAgYXV0byBjdXJyZW50UG9zaXRpb24gPSBzdGFydFBvc2l0aW9uOworICAgIHdoaWxlIChjdXJy
ZW50UG9zaXRpb24gPCB0ZXh0TGVuZ3RoIC0gMSkgeworICAgICAgICBhdXRvIG5leHRCcmVha2Fi
bGVQb3NpdGlvbiA9IGZpbmROZXh0QnJlYWthYmxlUG9zaXRpb24oY3VycmVudFBvc2l0aW9uKTsK
KyAgICAgICAgaWYgKG5leHRCcmVha2FibGVQb3NpdGlvbiAhPSBjdXJyZW50UG9zaXRpb24pCisg
ICAgICAgICAgICByZXR1cm4gbmV4dEJyZWFrYWJsZVBvc2l0aW9uIC0gY3VycmVudFBvc2l0aW9u
OworICAgICAgICArK2N1cnJlbnRQb3NpdGlvbjsKKyAgICB9CisgICAgcmV0dXJuIHRleHRMZW5n
dGggLSBzdGFydFBvc2l0aW9uOworfQorCit2b2lkIElubGluZVRleHRJdGVtOjpjcmVhdGVBbmRB
cHBlbmRUZXh0SXRlbXMoSW5saW5lSXRlbXMmIGlubGluZUNvbnRlbnQsIGNvbnN0IElubGluZUJv
eCYgaW5saW5lQm94KQoreworICAgIGF1dG8mIHN0eWxlID0gaW5saW5lQm94LnN0eWxlKCk7Cisg
ICAgYXV0byBwcmVzZXJ2ZU5ld2xpbmUgPSBzdHlsZS5wcmVzZXJ2ZU5ld2xpbmUoKTsKKyAgICBh
dXRvIGNvbGxhcHNlV2hpdGVTcGFjZSA9IHN0eWxlLmNvbGxhcHNlV2hpdGVTcGFjZSgpOworICAg
IGF1dG8gdGV4dCA9IGlubGluZUJveC50ZXh0Q29udGVudCgpOworICAgIExhenlMaW5lQnJlYWtJ
dGVyYXRvciBsaW5lQnJlYWtJdGVyYXRvcih0ZXh0KTsKKworICAgIHVuc2lnbmVkIGN1cnJlbnRQ
b3NpdGlvbiA9IDA7CisgICAgd2hpbGUgKGN1cnJlbnRQb3NpdGlvbiA8IHRleHQubGVuZ3RoKCkp
IHsKKyAgICAgICAgLy8gU29mdCBsaW5lYnJlYWs/CisgICAgICAgIGlmIChpc1NvZnRMaW5lQnJl
YWsodGV4dFtjdXJyZW50UG9zaXRpb25dLCBwcmVzZXJ2ZU5ld2xpbmUpKSB7CisgICAgICAgICAg
ICBpbmxpbmVDb250ZW50LmFkZChzdGQ6Om1ha2VfdW5pcXVlPElubGluZVRleHRJdGVtPihpbmxp
bmVCb3gsIGN1cnJlbnRQb3NpdGlvbiwgMSwgdHJ1ZSwgZmFsc2UpKTsKKyAgICAgICAgICAgICsr
Y3VycmVudFBvc2l0aW9uOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKGlzV2hpdGVzcGFjZUNoYXJhY3Rlcih0ZXh0W2N1cnJlbnRQb3NpdGlvbl0sIHByZXNl
cnZlTmV3bGluZSkpIHsKKyAgICAgICAgICAgIGF1dG8gbGVuZ3RoID0gbW92ZVRvTmV4dE5vbldo
aXRlc3BhY2VQb3NpdGlvbih0ZXh0LCBjdXJyZW50UG9zaXRpb24sIHByZXNlcnZlTmV3bGluZSk7
CisgICAgICAgICAgICBhdXRvIGlzQ29sbGFwc2VkID0gY29sbGFwc2VXaGl0ZVNwYWNlICYmIGxl
bmd0aCA+IDE7CisgICAgICAgICAgICBpbmxpbmVDb250ZW50LmFkZChzdGQ6Om1ha2VfdW5pcXVl
PElubGluZVRleHRJdGVtPihpbmxpbmVCb3gsIGN1cnJlbnRQb3NpdGlvbiwgbGVuZ3RoLCB0cnVl
LCBpc0NvbGxhcHNlZCkpOworICAgICAgICAgICAgY3VycmVudFBvc2l0aW9uICs9IGxlbmd0aDsK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgYXV0byBsZW5ndGgg
PSBtb3ZlVG9OZXh0QnJlYWthYmxlUG9zaXRpb24oY3VycmVudFBvc2l0aW9uLCBsaW5lQnJlYWtJ
dGVyYXRvciwgc3R5bGUpOworICAgICAgICBpbmxpbmVDb250ZW50LmFkZChzdGQ6Om1ha2VfdW5p
cXVlPElubGluZVRleHRJdGVtPihpbmxpbmVCb3gsIGN1cnJlbnRQb3NpdGlvbiwgbGVuZ3RoLCBm
YWxzZSwgZmFsc2UpKTsKKyAgICAgICAgY3VycmVudFBvc2l0aW9uICs9IGxlbmd0aDsKKyAgICB9
Cit9CisKK0lubGluZVRleHRJdGVtOjpJbmxpbmVUZXh0SXRlbShjb25zdCBJbmxpbmVCb3gmIGlu
bGluZUJveCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwgYm9vbCBpc1doaXRlc3Bh
Y2UsIGJvb2wgaXNDb2xsYXBzZWQpCisgICAgOiBJbmxpbmVJdGVtKGlubGluZUJveCwgVHlwZTo6
VGV4dCkKKyAgICAsIG1fc3RhcnQoc3RhcnQpCisgICAgLCBtX2xlbmd0aChsZW5ndGgpCisgICAg
LCBtX2lzV2hpdGVzcGFjZShpc1doaXRlc3BhY2UpCisgICAgLCBtX2lzQ29sbGFwc2VkKGlzQ29s
bGFwc2VkKQoreworfQorCit9Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZVRleHRJdGVtLmggYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVUZXh0SXRlbS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI4
NzRmMjhhMzFkY2QwMGFiZWRlODg5NzU3NDUxM2NiZTI5ZTE2ZGUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVUZXh0SXRlbS5o
CkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJM
RShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQorCisjaW5jbHVkZSAiSW5saW5lSXRlbS5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgTGF5b3V0IHsKKworY2xhc3MgSW5saW5l
VGV4dEl0ZW0gOiBwdWJsaWMgSW5saW5lSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQg
Y3JlYXRlQW5kQXBwZW5kVGV4dEl0ZW1zKElubGluZUl0ZW1zJiwgY29uc3QgSW5saW5lQm94Jik7
CisKKyAgICBJbmxpbmVUZXh0SXRlbShjb25zdCBJbmxpbmVCb3gmLCB1bnNpZ25lZCBzdGFydCwg
dW5zaWduZWQgbGVuZ3RoLCBib29sIGlzV2hpdGVzcGFjZSwgYm9vbCBpc0NvbGxhcHNlZCk7CisK
KyAgICB1bnNpZ25lZCBzdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnQ7IH0KKyAgICB1bnNp
Z25lZCBlbmQoKSBjb25zdCB7IHJldHVybiBzdGFydCgpICsgbGVuZ3RoKCk7IH0KKyAgICB1bnNp
Z25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQorCisgICAgYm9vbCBpc1do
aXRlc3BhY2UoKSBjb25zdCB7IHJldHVybiBtX2lzV2hpdGVzcGFjZTsgfQorICAgIGJvb2wgaXND
b2xsYXBzZWQoKSBjb25zdCB7IHJldHVybiBtX2lzQ29sbGFwc2VkOyB9CisKK3ByaXZhdGU6Cisg
ICAgdW5zaWduZWQgbV9zdGFydCB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX2xlbmd0aCB7IDAgfTsK
KyAgICBib29sIG1faXNXaGl0ZXNwYWNlIHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNDb2xsYXBz
ZWQgeyBmYWxzZSB9OworfTsKKworfQorfQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0lOTElO
RV9JVEVNKElubGluZVRleHRJdGVtLCBpc1RleHQoKSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy90ZXh0L1RleHRVdGlsLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL3RleHQvVGV4dFV0aWwuY3Bw
CmluZGV4IDM3NWVkNzIzY2QyYjI5ODRkZjczZTBlNzMyMTFiYTAyODQxOGZlMDguLmMxMzllYWJh
NzU3Njk2ZDNjODc2ZjQ0NGRjYzk3ZmVjN2MzYTYzZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL3RleHQvVGV4dFV0aWwuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL3RleHQvVGV4dFV0aWwuY3BwCkBAIC0z
NCwxOSArMzQsMTkgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBMYXlvdXQgewog
Ci1PcHRpb25hbDxJdGVtUG9zaXRpb24+IFRleHRVdGlsOjpoeXBoZW5Qb3NpdGlvbkJlZm9yZShj
b25zdCBJbmxpbmVJdGVtJiwgSXRlbVBvc2l0aW9uLCB1bnNpZ25lZCkKK09wdGlvbmFsPHVuc2ln
bmVkPiBUZXh0VXRpbDo6aHlwaGVuUG9zaXRpb25CZWZvcmUoY29uc3QgSW5saW5lSXRlbSYsIHVu
c2lnbmVkLCB1bnNpZ25lZCkKIHsKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCi1MYXlv
dXRVbml0IFRleHRVdGlsOjp3aWR0aChjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVUZXh0SXRlbSwg
SXRlbVBvc2l0aW9uIGZyb20sIEl0ZW1Qb3NpdGlvbiB0bywgTGF5b3V0VW5pdCBjb250ZW50TG9n
aWNhbExlZnQpCitMYXlvdXRVbml0IFRleHRVdGlsOjp3aWR0aChjb25zdCBJbmxpbmVCb3gmIGlu
bGluZUJveCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8sIExheW91dFVuaXQgY29udGVudExv
Z2ljYWxMZWZ0KQogewotICAgIGF1dG8mIHN0eWxlID0gaW5saW5lVGV4dEl0ZW0uc3R5bGUoKTsK
KyAgICBhdXRvJiBzdHlsZSA9IGlubGluZUJveC5zdHlsZSgpOwogICAgIGF1dG8mIGZvbnQgPSBz
dHlsZS5mb250Q2FzY2FkZSgpOwogICAgIGlmICghZm9udC5zaXplKCkgfHwgZnJvbSA9PSB0bykK
ICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBhdXRvIHRleHQgPSBpbmxpbmVUZXh0SXRlbS50ZXh0
Q29udGVudCgpOworICAgIGF1dG8gdGV4dCA9IGlubGluZUJveC50ZXh0Q29udGVudCgpOwogICAg
IEFTU0VSVCh0byA8PSB0ZXh0Lmxlbmd0aCgpKTsKIAogICAgIGlmIChmb250LmlzRml4ZWRQaXRj
aCgpKQpAQCAtNzAsNyArNzAsNyBAQCBMYXlvdXRVbml0IFRleHRVdGlsOjp3aWR0aChjb25zdCBJ
bmxpbmVJdGVtJiBpbmxpbmVUZXh0SXRlbSwgSXRlbVBvc2l0aW9uIGZyb20sCiAgICAgcmV0dXJu
IHN0ZDo6bWF4PExheW91dFVuaXQ+KDAsIHdpZHRoKTsKIH0KIAotTGF5b3V0VW5pdCBUZXh0VXRp
bDo6Zml4ZWRQaXRjaFdpZHRoKFN0cmluZyB0ZXh0LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUs
IEl0ZW1Qb3NpdGlvbiBmcm9tLCBJdGVtUG9zaXRpb24gdG8sIExheW91dFVuaXQgY29udGVudExv
Z2ljYWxMZWZ0KQorTGF5b3V0VW5pdCBUZXh0VXRpbDo6Zml4ZWRQaXRjaFdpZHRoKFN0cmluZyB0
ZXh0LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRv
LCBMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsTGVmdCkKIHsKICAgICBhdXRvJiBmb250ID0gc3R5
bGUuZm9udENhc2NhZGUoKTsKICAgICBhdXRvIG1vbm9zcGFjZUNoYXJhY3RlcldpZHRoID0gZm9u
dC5zcGFjZVdpZHRoKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5l
Zm9ybWF0dGluZy90ZXh0L1RleHRVdGlsLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5l
Zm9ybWF0dGluZy90ZXh0L1RleHRVdGlsLmgKaW5kZXggODM2YTllYzQwZDNhNzJlYjkyNjc0YTUz
YjM3MmU1MGQyZjNkYWNiNy4uZDBmZWE2YWQxZGRkNzI5ZDc0ZjliZGZiMWJjOWQyMWM5ODdkMmUw
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvdGV4
dC9UZXh0VXRpbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5n
L3RleHQvVGV4dFV0aWwuaApAQCAtMjgsMTggKzI4LDE3IEBACiAjaWYgRU5BQkxFKExBWU9VVF9G
T1JNQVRUSU5HX0NPTlRFWFQpCiAKICNpbmNsdWRlICJJbmxpbmVJdGVtLmgiCi0jaW5jbHVkZSAi
SW5saW5lUnVuUHJvdmlkZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIExh
eW91dCB7CiAKIGNsYXNzIFRleHRVdGlsIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgTGF5b3V0VW5p
dCB3aWR0aChjb25zdCBJbmxpbmVJdGVtJiwgSXRlbVBvc2l0aW9uIGZyb20sIEl0ZW1Qb3NpdGlv
biB0bywgTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbExlZnQpOwotICAgIHN0YXRpYyBPcHRpb25h
bDxJdGVtUG9zaXRpb24+IGh5cGhlblBvc2l0aW9uQmVmb3JlKGNvbnN0IElubGluZUl0ZW0mLCBJ
dGVtUG9zaXRpb24gZnJvbSwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBzdGF0aWMgTGF5b3V0VW5p
dCB3aWR0aChjb25zdCBJbmxpbmVCb3gmLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bywgTGF5
b3V0VW5pdCBjb250ZW50TG9naWNhbExlZnQpOworICAgIHN0YXRpYyBPcHRpb25hbDx1bnNpZ25l
ZD4gaHlwaGVuUG9zaXRpb25CZWZvcmUoY29uc3QgSW5saW5lSXRlbSYsIHVuc2lnbmVkIGZyb20s
IHVuc2lnbmVkIGxlbmd0aCk7CiAKIHByaXZhdGU6Ci0gICAgc3RhdGljIExheW91dFVuaXQgZml4
ZWRQaXRjaFdpZHRoKFN0cmluZywgY29uc3QgUmVuZGVyU3R5bGUmLCBJdGVtUG9zaXRpb24gZnJv
bSwgSXRlbVBvc2l0aW9uIHRvLCBMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsTGVmdCk7CisgICAg
c3RhdGljIExheW91dFVuaXQgZml4ZWRQaXRjaFdpZHRoKFN0cmluZywgY29uc3QgUmVuZGVyU3R5
bGUmLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bywgTGF5b3V0VW5pdCBjb250ZW50TG9naWNh
bExlZnQpOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2xheW91
dHRyZWUvTGF5b3V0Qm94LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvbGF5b3V0dHJlZS9MYXlv
dXRCb3guaAppbmRleCA2MmZiMGQxNDgwODFjMWI0YzNmMjhkMDdlMDk4YjdhNjViYmE4MTIxLi5h
ZDJkM2Y4N2I4YmJhZmRjNDQzYmI4Mzc2ODg3YTVkMGZjNmRmYmQ3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRCb3guaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRCb3guaApAQCAtMTU1LDcgKzE1NSw3IEBAIHBy
aXZhdGU6CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVwbGFjZWQ+IG1fcmVwbGFjZWQ7CiAKLSAg
ICB1bnNpZ25lZCBtX2Jhc2VUeXBlRmxhZ3MgOiA1OworICAgIHVuc2lnbmVkIG1fYmFzZVR5cGVG
bGFncyA6IDY7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvbGF5
b3V0dHJlZS9MYXlvdXRSZXBsYWNlZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvbGF5b3V0
dHJlZS9MYXlvdXRSZXBsYWNlZC5jcHAKaW5kZXggZTkwNzQyMzE2NjY1NzUxNDI3OTlkNjk4N2Jm
NmJhMjNlY2I2OTBjNy4uNGYzZGRkYmYxNjRjYjhkOWRiOWFlMGY2NmRlYmFlZjJiMTM2YzAzOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0UmVwbGFj
ZWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9sYXlvdXR0cmVlL0xheW91dFJlcGxh
Y2VkLmNwcApAQCAtODAsNyArODAsNyBAQCBMYXlvdXRVbml0IFJlcGxhY2VkOjppbnRyaW5zaWNS
YXRpbygpIGNvbnN0CiAgICAgQVNTRVJUKGhhc0ludHJpbnNpY1JhdGlvKCkgfHwgKGhhc0ludHJp
bnNpY1dpZHRoKCkgJiYgaGFzSW50cmluc2ljSGVpZ2h0KCkpKTsKICAgICBpZiAobV9pbnRyaW5z
aWNSYXRpbykKICAgICAgICAgcmV0dXJuICptX2ludHJpbnNpY1JhdGlvOwotICAgIGlmIChtX2lu
dHJpbnNpY1NpemUpCisgICAgaWYgKG1faW50cmluc2ljU2l6ZSAmJiBtX2ludHJpbnNpY1NpemUt
PmhlaWdodCgpKQogICAgICAgICByZXR1cm4gbV9pbnRyaW5zaWNTaXplLT53aWR0aCgpIC8gbV9p
bnRyaW5zaWNTaXplLT5oZWlnaHQoKTsKICAgICByZXR1cm4gMTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9sYXlvdXR0cmVlL0xheW91dFRyZWVCdWlsZGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9sYXlvdXR0cmVlL0xheW91dFRyZWVCdWlsZGVyLmNwcAppbmRl
eCBlNjEwMmRjYWVkNGFmODM0ZmEwMGVhNGU0YjcyZTZjZmZhYjg2OTdmLi5kNmYyYTNlYWJhMTNk
MTUwNTI2Nzk3M2Q1NmNmNzNhNjk1ZjYyMTNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRUcmVlQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0VHJlZUJ1aWxkZXIuY3BwCkBAIC0yOSw2ICsyOSw3
IEBACiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCiAKICNpbmNsdWRlICJE
aXNwbGF5Qm94LmgiCisjaW5jbHVkZSAiRGlzcGxheVJ1bi5oIgogI2luY2x1ZGUgIklubGluZUZv
cm1hdHRpbmdTdGF0ZS5oIgogI2luY2x1ZGUgIkxheW91dEJsb2NrQ29udGFpbmVyLmgiCiAjaW5j
bHVkZSAiTGF5b3V0Qm94LmgiCkBAIC00Miw2ICs0Myw3IEBACiAjaW5jbHVkZSAiUmVuZGVyRWxl
bWVudC5oIgogI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVySW5saW5l
LmgiCisjaW5jbHVkZSAiUmVuZGVyTGluZUJyZWFrLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUu
aCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVh
bS5oPgpAQCAtNjAsNiArNjIsMTUgQEAgc3RkOjp1bmlxdWVfcHRyPENvbnRhaW5lcj4gVHJlZUJ1
aWxkZXI6OmNyZWF0ZUxheW91dFRyZWUoY29uc3QgUmVuZGVyVmlldyYgcmVuZGUKICAgICByZXR1
cm4gaW5pdGlhbENvbnRhaW5pbmdCbG9jazsKIH0KIAorc3RhdGljIE9wdGlvbmFsPExheW91dFNp
emU+IGFjY3VtdWxhdGVkT2Zmc2V0Rm9ySW5GbG93UG9zaXRpb25lZENvbnRpbnVhdGlvbihjb25z
dCBSZW5kZXJCb3gmIGJsb2NrKQoreworICAgIC8vIEZJWEU6IFRoaXMgaXMgYSB3b3JrYXJvdW5k
IG9mIHRoZSBjb250aW51YXRpb24gbG9naWMgd2hlbiB0aGUgcmVsYXRpdmVseSBwb3NpdGlvbmVk
IHBhcmVudCBpbmxpbmUgYm94CisgICAgLy8gYmVjb21lcyBhIHNpYmxpbmcgYm94IG9mIHRoaXMg
YmxvY2sgYW5kIG9ubHkgcmVhY2hhYmxlIHRocm91Z2ggdGhlIGNvbnRpbnVhdGlvbiBsaW5rIHdo
aWNoIHdlIGRvbid0IGhhdmUgaGVyZS4KKyAgICBpZiAoIWJsb2NrLmlzQW5vbnltb3VzKCkgfHwg
IWJsb2NrLmlzSW5GbG93UG9zaXRpb25lZCgpIHx8ICFibG9jay5pc0NvbnRpbnVhdGlvbigpKQor
ICAgICAgICByZXR1cm4geyB9OworICAgIHJldHVybiBibG9jay5yZWxhdGl2ZVBvc2l0aW9uT2Zm
c2V0KCk7Cit9CisKIHZvaWQgVHJlZUJ1aWxkZXI6OmNyZWF0ZVN1YlRyZWUoY29uc3QgUmVuZGVy
RWxlbWVudCYgcm9vdFJlbmRlcmVyLCBDb250YWluZXImIHJvb3RDb250YWluZXIpCiB7CiAgICAg
YXV0byBlbGVtZW50QXR0cmlidXRlcyA9IFtdIChjb25zdCBSZW5kZXJFbGVtZW50JiByZW5kZXJl
cikgLT4gT3B0aW9uYWw8Qm94OjpFbGVtZW50QXR0cmlidXRlcz4gewpAQCAtOTcsNiArMTA4LDkg
QEAgdm9pZCBUcmVlQnVpbGRlcjo6Y3JlYXRlU3ViVHJlZShjb25zdCBSZW5kZXJFbGVtZW50JiBy
b290UmVuZGVyZXIsIENvbnRhaW5lciYgcm8KICAgICAgICAgaWYgKGlzPFJlbmRlclRleHQ+KGNo
aWxkKSkgewogICAgICAgICAgICAgYm94ID0gc3RkOjptYWtlX3VuaXF1ZTxJbmxpbmVCb3g+KE9w
dGlvbmFsPEJveDo6RWxlbWVudEF0dHJpYnV0ZXM+KCksIFJlbmRlclN0eWxlOjpjcmVhdGVBbm9u
eW1vdXNTdHlsZVdpdGhEaXNwbGF5KHJvb3RSZW5kZXJlci5zdHlsZSgpLCBEaXNwbGF5VHlwZTo6
SW5saW5lKSk7CiAgICAgICAgICAgICBkb3duY2FzdDxJbmxpbmVCb3g+KCpib3gpLnNldFRleHRD
b250ZW50KGRvd25jYXN0PFJlbmRlclRleHQ+KGNoaWxkKS5vcmlnaW5hbFRleHQoKSk7CisgICAg
ICAgIH0gZWxzZSBpZiAoaXM8UmVuZGVyTGluZUJyZWFrPihjaGlsZCkpIHsKKyAgICAgICAgICAg
IGF1dG8mIHJlbmRlcmVyID0gZG93bmNhc3Q8UmVuZGVyTGluZUJyZWFrPihjaGlsZCk7CisgICAg
ICAgICAgICBib3ggPSBzdGQ6Om1ha2VfdW5pcXVlPExpbmVCcmVha0JveD4oZWxlbWVudEF0dHJp
YnV0ZXMocmVuZGVyZXIpLCBSZW5kZXJTdHlsZTo6Y2xvbmUocmVuZGVyZXIuc3R5bGUoKSkpOwog
ICAgICAgICB9IGVsc2UgaWYgKGlzPFJlbmRlclJlcGxhY2VkPihjaGlsZCkpIHsKICAgICAgICAg
ICAgIGF1dG8mIHJlbmRlcmVyID0gZG93bmNhc3Q8UmVuZGVyUmVwbGFjZWQ+KGNoaWxkKTsKICAg
ICAgICAgICAgIGF1dG8gZGlzcGxheSA9IHJlbmRlcmVyLnN0eWxlKCkuZGlzcGxheSgpOwpAQCAt
MTE1LDkgKzEyOSwxNSBAQCB2b2lkIFRyZWVCdWlsZGVyOjpjcmVhdGVTdWJUcmVlKGNvbnN0IFJl
bmRlckVsZW1lbnQmIHJvb3RSZW5kZXJlciwgQ29udGFpbmVyJiBybwogICAgICAgICB9IGVsc2Ug
aWYgKGlzPFJlbmRlckVsZW1lbnQ+KGNoaWxkKSkgewogICAgICAgICAgICAgYXV0byYgcmVuZGVy
ZXIgPSBkb3duY2FzdDxSZW5kZXJFbGVtZW50PihjaGlsZCk7CiAgICAgICAgICAgICBhdXRvIGRp
c3BsYXkgPSByZW5kZXJlci5zdHlsZSgpLmRpc3BsYXkoKTsKLSAgICAgICAgICAgIGlmIChkaXNw
bGF5ID09IERpc3BsYXlUeXBlOjpCbG9jaykKLSAgICAgICAgICAgICAgICBib3ggPSBzdGQ6Om1h
a2VfdW5pcXVlPEJsb2NrQ29udGFpbmVyPihlbGVtZW50QXR0cmlidXRlcyhyZW5kZXJlciksIFJl
bmRlclN0eWxlOjpjbG9uZShyZW5kZXJlci5zdHlsZSgpKSk7Ci0gICAgICAgICAgICBlbHNlIGlm
IChkaXNwbGF5ID09IERpc3BsYXlUeXBlOjpJbmxpbmUpCisgICAgICAgICAgICBpZiAoZGlzcGxh
eSA9PSBEaXNwbGF5VHlwZTo6QmxvY2spIHsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byBvZmZz
ZXQgPSBhY2N1bXVsYXRlZE9mZnNldEZvckluRmxvd1Bvc2l0aW9uZWRDb250aW51YXRpb24oZG93
bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcikpKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8g
c3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xvbmVQdHIocmVuZGVyZXIuc3R5bGUoKSk7CisgICAgICAg
ICAgICAgICAgICAgIHN0eWxlLT5zZXRUb3AoeyBvZmZzZXQtPmhlaWdodCgpLCBGaXhlZCB9KTsK
KyAgICAgICAgICAgICAgICAgICAgc3R5bGUtPnNldExlZnQoeyBvZmZzZXQtPndpZHRoKCksIEZp
eGVkIH0pOworICAgICAgICAgICAgICAgICAgICBib3ggPSBzdGQ6Om1ha2VfdW5pcXVlPEJsb2Nr
Q29udGFpbmVyPihlbGVtZW50QXR0cmlidXRlcyhyZW5kZXJlciksIFdURk1vdmUoKnN0eWxlKSk7
CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIGJveCA9IHN0ZDo6
bWFrZV91bmlxdWU8QmxvY2tDb250YWluZXI+KGVsZW1lbnRBdHRyaWJ1dGVzKHJlbmRlcmVyKSwg
UmVuZGVyU3R5bGU6OmNsb25lKHJlbmRlcmVyLnN0eWxlKCkpKTsKKyAgICAgICAgICAgIH0gZWxz
ZSBpZiAoZGlzcGxheSA9PSBEaXNwbGF5VHlwZTo6SW5saW5lKQogICAgICAgICAgICAgICAgIGJv
eCA9IHN0ZDo6bWFrZV91bmlxdWU8SW5saW5lQ29udGFpbmVyPihlbGVtZW50QXR0cmlidXRlcyhy
ZW5kZXJlciksIFJlbmRlclN0eWxlOjpjbG9uZShyZW5kZXJlci5zdHlsZSgpKSk7CiAgICAgICAg
ICAgICBlbHNlIGlmIChkaXNwbGF5ID09IERpc3BsYXlUeXBlOjpJbmxpbmVCbG9jaykKICAgICAg
ICAgICAgICAgICBib3ggPSBzdGQ6Om1ha2VfdW5pcXVlPElubGluZUNvbnRhaW5lcj4oZWxlbWVu
dEF0dHJpYnV0ZXMocmVuZGVyZXIpLCBSZW5kZXJTdHlsZTo6Y2xvbmUocmVuZGVyZXIuc3R5bGUo
KSkpOwpAQCAtMTU3LDIwICsxNzcsMzAgQEAgdm9pZCBUcmVlQnVpbGRlcjo6Y3JlYXRlU3ViVHJl
ZShjb25zdCBSZW5kZXJFbGVtZW50JiByb290UmVuZGVyZXIsIENvbnRhaW5lciYgcm8KICNpZiBF
TkFCTEUoVFJFRV9ERUJVR0dJTkcpCiBzdGF0aWMgdm9pZCBvdXRwdXRJbmxpbmVSdW5zKFRleHRT
dHJlYW0mIHN0cmVhbSwgY29uc3QgTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBjb25zdCBDb250
YWluZXImIGlubGluZUZvcm1hdHRpbmdSb290LCB1bnNpZ25lZCBkZXB0aCkKIHsKLSAgICBhdXRv
JiBpbmxpbmVGb3JtYXR0aW5nU3RhdGUgPSBsYXlvdXRTdGF0ZS5lc3RhYmxpc2hlZEZvcm1hdHRp
bmdTdGF0ZShpbmxpbmVGb3JtYXR0aW5nUm9vdCk7Ci0gICAgQVNTRVJUKGlzPElubGluZUZvcm1h
dHRpbmdTdGF0ZT4oaW5saW5lRm9ybWF0dGluZ1N0YXRlKSk7Ci0gICAgYXV0byYgaW5saW5lUnVu
cyA9IGRvd25jYXN0PElubGluZUZvcm1hdHRpbmdTdGF0ZT4oaW5saW5lRm9ybWF0dGluZ1N0YXRl
KS5pbmxpbmVSdW5zKCk7CisgICAgYXV0byYgaW5saW5lRm9ybWF0dGluZ1N0YXRlID0gZG93bmNh
c3Q8SW5saW5lRm9ybWF0dGluZ1N0YXRlPihsYXlvdXRTdGF0ZS5lc3RhYmxpc2hlZEZvcm1hdHRp
bmdTdGF0ZShpbmxpbmVGb3JtYXR0aW5nUm9vdCkpOworICAgIGF1dG8mIGlubGluZVJ1bnMgPSBp
bmxpbmVGb3JtYXR0aW5nU3RhdGUuaW5saW5lUnVucygpOworICAgIGF1dG8mIGxpbmVCb3hlcyA9
IGlubGluZUZvcm1hdHRpbmdTdGF0ZS5saW5lQm94ZXMoKTsKKworICAgIHVuc2lnbmVkIHByaW50
ZWRDaGFyYWN0ZXJzID0gMDsKKyAgICB3aGlsZSAoKytwcmludGVkQ2hhcmFjdGVycyA8PSBkZXB0
aCAqIDMpCisgICAgICAgIHN0cmVhbSA8PCAiICI7CisKKyAgICBzdHJlYW0gPDwgImxpbmVzIGFy
ZSAtPiAiOworICAgIGZvciAoYXV0byYgbGluZUJveCA6IGxpbmVCb3hlcykKKyAgICAgICAgc3Ry
ZWFtIDw8ICJbIiA8PCBsaW5lQm94LmxvZ2ljYWxMZWZ0KCkgPDwgIiwiIDw8IGxpbmVCb3gubG9n
aWNhbFRvcCgpIDw8ICIgIiA8PCBsaW5lQm94LmxvZ2ljYWxXaWR0aCgpIDw8ICJ4IiA8PCBsaW5l
Qm94LmxvZ2ljYWxIZWlnaHQoKSA8PCAiXSAiOworICAgIHN0cmVhbS5uZXh0TGluZSgpOwogCiAg
ICAgZm9yIChhdXRvJiBpbmxpbmVSdW4gOiBpbmxpbmVSdW5zKSB7CiAgICAgICAgIHVuc2lnbmVk
IHByaW50ZWRDaGFyYWN0ZXJzID0gMDsKLSAgICAgICAgd2hpbGUgKCsrcHJpbnRlZENoYXJhY3Rl
cnMgPD0gZGVwdGggKiAyKQorICAgICAgICB3aGlsZSAoKytwcmludGVkQ2hhcmFjdGVycyA8PSBk
ZXB0aCAqIDMpCiAgICAgICAgICAgICBzdHJlYW0gPDwgIiAiOwotICAgICAgICBzdHJlYW0gPDwg
InJ1biI7Ci0gICAgICAgIGlmIChpbmxpbmVSdW4udGV4dENvbnRleHQoKSkKLSAgICAgICAgICAg
IHN0cmVhbSA8PCAiKCIgPDwgaW5saW5lUnVuLnRleHRDb250ZXh0KCktPnN0YXJ0KCkgPDwgIiwg
IiA8PCBpbmxpbmVSdW4udGV4dENvbnRleHQoKS0+c3RhcnQoKSArIGlubGluZVJ1bi50ZXh0Q29u
dGV4dCgpLT5sZW5ndGgoKSA8PCAiKSAiOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzdHJl
YW0gPDwgIih4LCB4KSAiOwotICAgICAgICBzdHJlYW0gPDwgImF0IFsiIDw8IGlubGluZVJ1bi5s
b2dpY2FsTGVmdCgpIDw8ICIsICIgPDwgaW5saW5lUnVuLmxvZ2ljYWxUb3AoKSA8PCAiXSBzaXpl
IFsiIDw8IGlubGluZVJ1bi5sb2dpY2FsV2lkdGgoKSA8PCAiICIgPDwgaW5saW5lUnVuLmxvZ2lj
YWxIZWlnaHQoKSA8PCAiXSI7CisgICAgICAgIGlmIChpbmxpbmVSdW4tPnRleHRDb250ZXh0KCkp
CisgICAgICAgICAgICBzdHJlYW0gPDwgImlubGluZSB0ZXh0IGJveCI7CisgICAgICAgIGVsc2Ug
IAorICAgICAgICAgICAgc3RyZWFtIDw8ICJpbmxpbmUgYm94IjsKKyAgICAgICAgc3RyZWFtIDw8
ICIgYXQgKCIgPDwgaW5saW5lUnVuLT5sb2dpY2FsTGVmdCgpIDw8ICIsIiA8PCBpbmxpbmVSdW4t
PmxvZ2ljYWxUb3AoKSA8PCAiKSBzaXplICIgPDwgaW5saW5lUnVuLT5sb2dpY2FsV2lkdGgoKSA8
PCAieCIgPDwgaW5saW5lUnVuLT5sb2dpY2FsSGVpZ2h0KCk7CisgICAgICAgIGlmIChpbmxpbmVS
dW4tPnRleHRDb250ZXh0KCkpCisgICAgICAgICAgICBzdHJlYW0gPDwgIiBydW4oIiA8PCBpbmxp
bmVSdW4tPnRleHRDb250ZXh0KCktPnN0YXJ0KCkgPDwgIiwgIiA8PCBpbmxpbmVSdW4tPnRleHRD
b250ZXh0KCktPmVuZCgpIDw8ICIpIjsKICAgICAgICAgc3RyZWFtLm5leHRMaW5lKCk7CiAgICAg
fQogfQpAQCAtMTgxLDMzICsyMTEsNDYgQEAgc3RhdGljIHZvaWQgb3V0cHV0TGF5b3V0Qm94KFRl
eHRTdHJlYW0mIHN0cmVhbSwgY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IERpc3AKICAgICB3
aGlsZSAoKytwcmludGVkQ2hhcmFjdGVycyA8PSBkZXB0aCAqIDIpCiAgICAgICAgIHN0cmVhbSA8
PCAiICI7CiAKLSAgICBpZiAoaXM8SW5saW5lQ29udGFpbmVyPihsYXlvdXRCb3gpKQotICAgICAg
ICBzdHJlYW0gPDwgImlubGluZSBjb250YWluZXIiOwotICAgIGVsc2UgaWYgKGlzPElubGluZUJv
eD4obGF5b3V0Qm94KSkgeworICAgIGlmIChsYXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQo
KSkKKyAgICAgICAgc3RyZWFtIDw8ICJbZmxvYXRdICI7CisKKyAgICBpZiAoaXM8SW5saW5lQ29u
dGFpbmVyPihsYXlvdXRCb3gpKSB7CisgICAgICAgIC8vIEZJWE1FOiBmaXggbmFtZXMKKyAgICAg
ICAgaWYgKGxheW91dEJveC5pc0lubGluZUJsb2NrQm94KCkpCisgICAgICAgICAgICBzdHJlYW0g
PDwgIkRJViBpbmxpbmUtYmxvY2sgY29udGFpbmVyIjsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgc3RyZWFtIDw8ICJTUEFOIGlubGluZSBjb250YWluZXIiOworICAgIH0gZWxzZSBpZiAoaXM8
SW5saW5lQm94PihsYXlvdXRCb3gpKSB7CiAgICAgICAgIGlmIChsYXlvdXRCb3gucmVwbGFjZWQo
KSkKLSAgICAgICAgICAgIHN0cmVhbSA8PCAiaW5saW5lIHJlcGxhY2VkIGJveCI7Ci0gICAgICAg
IGVsc2UgaWYgKGRvd25jYXN0PElubGluZUJveD4obGF5b3V0Qm94KS5oYXNUZXh0Q29udGVudCgp
KSB7Ci0gICAgICAgICAgICBhdXRvIHRleHRDb250ZW50ID0gZG93bmNhc3Q8SW5saW5lQm94Pihs
YXlvdXRCb3gpLnRleHRDb250ZW50KCk7Ci0gICAgICAgICAgICBzdHJlYW0gPDwgImlubGluZSB0
ZXh0IFtcIiIgPDwgdGV4dENvbnRlbnQudXRmOCgpLmRhdGEoKSA8PCAiXCJdIjsKLSAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICBzdHJlYW0gPDwgIklNRyByZXBsYWNlZCBpbmxpbmUgYm94IjsK
KyAgICAgICAgZWxzZSBpZiAobGF5b3V0Qm94LmlzQW5vbnltb3VzKCkpCisgICAgICAgICAgICBz
dHJlYW0gPDwgImFub255bW91cyBpbmxpbmUgYm94IjsKKyAgICAgICAgZWxzZSBpZiAoaXM8TGlu
ZUJyZWFrQm94PihsYXlvdXRCb3gpKQorICAgICAgICAgICAgc3RyZWFtIDw8ICJCUiBsaW5lIGJy
ZWFrIjsKKyAgICAgICAgZWxzZQogICAgICAgICAgICAgc3RyZWFtIDw8ICJpbmxpbmUgYm94IjsK
ICAgICB9IGVsc2UgaWYgKGlzPEJsb2NrQ29udGFpbmVyPihsYXlvdXRCb3gpKSB7CiAgICAgICAg
IGlmICghbGF5b3V0Qm94LnBhcmVudCgpKQotICAgICAgICAgICAgc3RyZWFtIDw8ICJpbml0aWFs
ICI7Ci0gICAgICAgIHN0cmVhbSA8PCAiYmxvY2sgY29udGFpbmVyIjsKKyAgICAgICAgICAgIHN0
cmVhbSA8PCAiSW5pdGlhbCI7CisgICAgICAgIGVsc2UgaWYgKGxheW91dEJveC5pc0RvY3VtZW50
Qm94KCkpCisgICAgICAgICAgICBzdHJlYW0gPDwgIkhUTUwiOworICAgICAgICBlbHNlIGlmIChs
YXlvdXRCb3guaXNCb2R5Qm94KCkpCisgICAgICAgICAgICBzdHJlYW0gPDwgIkJPRFkiOworICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8vIEZJWE1FCisgICAgICAgICAgICBzdHJlYW0gPDwg
IkRJViI7CisgICAgICAgIH0KKyAgICAgICAgc3RyZWFtIDw8ICIgYmxvY2sgY29udGFpbmVyIjsK
ICAgICB9IGVsc2UgaWYgKGxheW91dEJveC5pc0Jsb2NrTGV2ZWxCb3goKSkKICAgICAgICAgc3Ry
ZWFtIDw8ICJibG9jayBib3giOwogICAgIGVsc2UKICAgICAgICAgc3RyZWFtIDw8ICJib3giOwog
ICAgIC8vIEZJWE1FOiBJbmxpbmUgdGV4dCBydW5zIGRvbid0IGNyZWF0ZSBkaXNwbGF5IGJveGVz
IHlldC4KLSAgICBpZiAoZGlzcGxheUJveCkgewotICAgICAgICAvLyBGSVhNRTogZGlzcGxheSBi
b3ggaXMgbm90IGNvbXBsZXRlbHkgc2V0IHlldC4KLSAgICAgICAgaWYgKChpczxJbmxpbmVCb3g+
KGxheW91dEJveCkgfHwgaXM8SW5saW5lQ29udGFpbmVyPihsYXlvdXRCb3gpKSAmJiAhbGF5b3V0
Qm94LmlzRmxvYXRpbmdQb3NpdGlvbmVkKCkpCi0gICAgICAgICAgICBzdHJlYW0gPDwgIiBhdCBb
IiA8PCAiLiIgPDwgIiAiIDw8ICIuIiA8PCAiXSBzaXplIFsiIDw8IGRpc3BsYXlCb3gtPndpZHRo
KCkgPDwgIiAiIDw8IGRpc3BsYXlCb3gtPmhlaWdodCgpIDw8ICJdIjsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgc3RyZWFtIDw8ICIgYXQgWyIgPDwgZGlzcGxheUJveC0+bGVmdCgpIDw8ICIg
IiA8PCBkaXNwbGF5Qm94LT50b3AoKSA8PCAiXSBzaXplIFsiIDw8IGRpc3BsYXlCb3gtPndpZHRo
KCkgPDwgIiAiIDw8IGRpc3BsYXlCb3gtPmhlaWdodCgpIDw8ICJdIjsKLSAgICB9Ci0gICAgc3Ry
ZWFtIDw8ICIgWyIgPDwgJmxheW91dEJveCA8PCAiXSI7CisgICAgaWYgKGRpc3BsYXlCb3gpCisg
ICAgICAgIHN0cmVhbSA8PCAiIGF0ICgiIDw8IGRpc3BsYXlCb3gtPmxlZnQoKSA8PCAiLCIgPDwg
ZGlzcGxheUJveC0+dG9wKCkgPDwgIikgc2l6ZSAiIDw8IGRpc3BsYXlCb3gtPndpZHRoKCkgPDwg
IngiIDw8IGRpc3BsYXlCb3gtPmhlaWdodCgpOworICAgIHN0cmVhbSA8PCAiIGxheW91dCBib3gt
PigiIDw8ICZsYXlvdXRCb3ggPDwgIikiOworICAgIGlmIChpczxJbmxpbmVCb3g+KGxheW91dEJv
eCkgJiYgZG93bmNhc3Q8SW5saW5lQm94PihsYXlvdXRCb3gpLmhhc1RleHRDb250ZW50KCkpCisg
ICAgICAgIHN0cmVhbSA8PCAiIHRleHQgY29udGVudCBbXCIiIDw8IGRvd25jYXN0PElubGluZUJv
eD4obGF5b3V0Qm94KS50ZXh0Q29udGVudCgpLnV0ZjgoKS5kYXRhKCkgPDwgIlwiXSI7CiAKICAg
ICBzdHJlYW0ubmV4dExpbmUoKTsKIH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>