<?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>203717</bug_id>
          
          <creation_ts>2019-10-31 20:05:22 -0700</creation_ts>
          <short_desc>Make AXIsolatedTreeNode a subclass of AXCoreObject.</short_desc>
          <delta_ts>2019-11-03 10:29:14 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</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="Andres Gonzalez">andresg_22</reporter>
          <assigned_to name="Andres Gonzalez">andresg_22</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>apinheiro</cc>
    
    <cc>cfleizach</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>ews-feeder</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>samuel_white</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1586223</commentid>
    <comment_count>0</comment_count>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2019-10-31 20:05:22 -0700</bug_when>
    <thetext>Make AXIsolatedTreeNode a subclass of AXCoreObject.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1586237</commentid>
    <comment_count>1</comment_count>
      <attachid>382543</attachid>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2019-10-31 20:25:48 -0700</bug_when>
    <thetext>Created attachment 382543
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1586405</commentid>
    <comment_count>2</comment_count>
      <attachid>382588</attachid>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2019-11-01 09:41:51 -0700</bug_when>
    <thetext>Created attachment 382588
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1586406</commentid>
    <comment_count>3</comment_count>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2019-11-01 09:43:13 -0700</bug_when>
    <thetext>GTK and Win changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1586420</commentid>
    <comment_count>4</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2019-11-01 10:14:24 -0700</bug_when>
    <thetext>../../Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceAction.cpp: In function ‘WebCore::AccessibilityObject* core(AtkAction*)’:
../../Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceAction.cpp:49:12: error: invalid conversion from ‘WebCore::AXCoreObject*’ to ‘WebCore::AccessibilityObject*’ [-fpermissive]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1586488</commentid>
    <comment_count>5</comment_count>
      <attachid>382609</attachid>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2019-11-01 12:07:33 -0700</bug_when>
    <thetext>Created attachment 382609
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1586495</commentid>
    <comment_count>6</comment_count>
      <attachid>382609</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2019-11-01 12:22:29 -0700</bug_when>
    <thetext>Comment on attachment 382609
Patch

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

&gt; Source/WebCore/accessibility/isolatedtree/AXIsolatedTreeNode.h:60
&gt; +    bool isAccessibilityObject() const override { return false; }

can all these methods below here be private?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1586551</commentid>
    <comment_count>7</comment_count>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2019-11-01 14:12:27 -0700</bug_when>
    <thetext>(In reply to chris fleizach from comment #6)
&gt; Comment on attachment 382609 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=382609&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/accessibility/isolatedtree/AXIsolatedTreeNode.h:60
&gt; &gt; +    bool isAccessibilityObject() const override { return false; }
&gt; 
&gt; can all these methods below here be private?

They are public in the AXCoreObject base class, so what would making them private get us?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1586649</commentid>
    <comment_count>8</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2019-11-01 16:40:18 -0700</bug_when>
    <thetext>(In reply to Andres Gonzalez from comment #7)
&gt; (In reply to chris fleizach from comment #6)
&gt; &gt; Comment on attachment 382609 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=382609&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/accessibility/isolatedtree/AXIsolatedTreeNode.h:60
&gt; &gt; &gt; +    bool isAccessibilityObject() const override { return false; }
&gt; &gt; 
&gt; &gt; can all these methods below here be private?
&gt; 
&gt; They are public in the AXCoreObject base class, so what would making them
&gt; private get us?

Most people using this are not supposed to have a handle on the AXIsolateTreeNode object. they&apos;re supposed to assume it&apos;s a AXCoreObject. if we make those private then they will be forced into using the AXCoreObject rather than one instance over the other</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1586662</commentid>
    <comment_count>9</comment_count>
      <attachid>382654</attachid>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2019-11-01 16:55:30 -0700</bug_when>
    <thetext>Created attachment 382654
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1586664</commentid>
    <comment_count>10</comment_count>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2019-11-01 16:58:21 -0700</bug_when>
    <thetext>(In reply to chris fleizach from comment #8)
&gt; (In reply to Andres Gonzalez from comment #7)
&gt; &gt; (In reply to chris fleizach from comment #6)
&gt; &gt; &gt; Comment on attachment 382609 [details]
&gt; &gt; &gt; Patch
&gt; &gt; &gt; 
&gt; &gt; &gt; View in context:
&gt; &gt; &gt; https://bugs.webkit.org/attachment.cgi?id=382609&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebCore/accessibility/isolatedtree/AXIsolatedTreeNode.h:60
&gt; &gt; &gt; &gt; +    bool isAccessibilityObject() const override { return false; }
&gt; &gt; &gt; 
&gt; &gt; &gt; can all these methods below here be private?
&gt; &gt; 
&gt; &gt; They are public in the AXCoreObject base class, so what would making them
&gt; &gt; private get us?
&gt; 
&gt; Most people using this are not supposed to have a handle on the
&gt; AXIsolateTreeNode object. they&apos;re supposed to assume it&apos;s a AXCoreObject. if
&gt; we make those private then they will be forced into using the AXCoreObject
&gt; rather than one instance over the other

Done. Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1586670</commentid>
    <comment_count>11</comment_count>
      <attachid>382654</attachid>
    <who name="EWS">ews-feeder</who>
    <bug_when>2019-11-01 17:03:38 -0700</bug_when>
    <thetext>Comment on attachment 382654
Patch

Rejecting attachment 382654 from commit-queue.

andresg_22@apple.com does not have committer permissions according to https://trac.webkit.org/browser/trunk/Tools/Scripts/webkitpy/common/config/contributors.json.

- If you do not have committer rights please read http://webkit.org/coding/contributing.html for instructions on how to use bugzilla flags.

- If you have committer rights please correct the error in Tools/Scripts/webkitpy/common/config/contributors.json by adding yourself to the file (no review needed).  The commit-queue restarts itself every 2 hours.  After restart the commit-queue will correctly respect your committer rights.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1586834</commentid>
    <comment_count>12</comment_count>
      <attachid>382654</attachid>
    <who name="EWS">ews-feeder</who>
    <bug_when>2019-11-03 09:40:52 -0800</bug_when>
    <thetext>Comment on attachment 382654
Patch

Rejecting attachment 382654 from commit-queue.

andresg_22@apple.com does not have committer permissions according to https://trac.webkit.org/browser/trunk/Tools/Scripts/webkitpy/common/config/contributors.json.

- If you do not have committer rights please read http://webkit.org/coding/contributing.html for instructions on how to use bugzilla flags.

- If you have committer rights please correct the error in Tools/Scripts/webkitpy/common/config/contributors.json by adding yourself to the file (no review needed).  The commit-queue restarts itself every 2 hours.  After restart the commit-queue will correctly respect your committer rights.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1586844</commentid>
    <comment_count>13</comment_count>
      <attachid>382654</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-11-03 10:28:52 -0800</bug_when>
    <thetext>Comment on attachment 382654
Patch

Clearing flags on attachment: 382654

Committed r251974: &lt;https://trac.webkit.org/changeset/251974&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1586845</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-11-03 10:28:54 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1586846</commentid>
    <comment_count>15</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-11-03 10:29:14 -0800</bug_when>
    <thetext>&lt;rdar://problem/56849760&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>382543</attachid>
            <date>2019-10-31 20:25:48 -0700</date>
            <delta_ts>2019-11-01 09:41:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203717-20191031232546.patch</filename>
            <type>text/plain</type>
            <size>85494</size>
            <attacher name="Andres Gonzalez">andresg_22</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUxOTAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWYxOGQyODQyMzQ0NmM5
OWU4OWU2MjVjNGU4Y2NhMDNlODhjZWQ0ZC4uZTEyNmJmZGI1MzVlMmVmMWFiNTM0Y2U0N2JmMDU4
N2Q3OTAxMTc0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg2IEBACisyMDE5LTEwLTMxICBBbmRy
ZXMgR29uemFsZXogIDxhbmRyZXNnXzIyQGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIEFYSXNv
bGF0ZWRUcmVlTm9kZSBhIHN1YmNsYXNzIG9mIEFYQ29yZU9iamVjdC4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMzcxNworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBuZWVkZWQsIG5v
IG5ldyBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgIC0gQVhJc29sYXRlZFRyZWVOT2RlIGRlcml2
ZXMgZnJvbSBBWENvcmVPYmplY3QuCisgICAgICAgIC0gQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXIgY2FuIG5vdyBoYXZlIGEgc2luZ2xlIHBvaW50ZXIgdG8gYSBBWENvcmVPYmplY3QgaW5zdGVh
ZCBvZiBvbmUgZm9yIHRoZSBsaXZlIG9iamVjdCBhbmQgb25lIGZvciB0aGUgaXNvbGF0ZWQgb2Jq
ZWN0LgorICAgICAgICAtIFNpbXBsaWZpZWQgd3JhcHBlciBjb2RlIGJ5IG1ha2luZyBpdCBhZ25v
c3RpYyBvZiB0aGUgbmF0dXJlIG9mIHRoZSB1bmRlcmx5aW5nIEFYQ29yZU9iamVjdC4KKworICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpBWE9iamVjdENhY2hlOjpjaGFyYWN0ZXJPZmZzZXRGb3JQb2ludCk6CisgICAgICAgIChXZWJD
b3JlOjpBWE9iamVjdENhY2hlOjpjaGFyYWN0ZXJPZmZzZXRGb3JJbmRleCk6CisgICAgICAgIChX
ZWJDb3JlOjpBWE9iamVjdENhY2hlOjpjcmVhdGVJc29sYXRlZEFjY2Vzc2liaWxpdHlUcmVlSGll
cmFyY2h5KToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmdlbmVyYXRlSXNvbGF0
ZWRBY2Nlc3NpYmlsaXR5VHJlZSk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9iamVjdENh
Y2hlLmg6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9pb3MvQVhPYmplY3RDYWNoZUlPUy5tbToK
KyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmF0dGFjaFdyYXBwZXIpOgorICAgICAg
ICAqIGFjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1t
OgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVuaWdub3JlZEFuY2VzdG9yKToKKyAgICAgICAgKC1b
V2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgaW5pdFdpdGhEYXRhOmFjY2Vzc2liaWxpdHlPYmpl
Y3Q6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGluaXRXaXRo
QWNjZXNzaWJpbGl0eU9iamVjdDpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXIgX2FjY2Vzc2liaWxpdHlUcmVlQW5jZXN0b3JdKToKKyAgICAgICAgKC1bV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgX2FjY2Vzc2liaWxpdHlMaXN0QW5jZXN0b3JdKToKKyAg
ICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgX2FjY2Vzc2liaWxpdHlBcnRp
Y2xlQW5jZXN0b3JdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIg
X2FjY2Vzc2liaWxpdHlMYW5kbWFya0FuY2VzdG9yXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyIF9hY2Nlc3NpYmlsaXR5VGFibGVBbmNlc3Rvcl0pOgorICAgICAg
ICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBfYWNjZXNzaWJpbGl0eUlzSW5UYWJs
ZUNlbGxdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgX2FjY2Vz
c2liaWxpdHlGaWVsZHNldEFuY2VzdG9yXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyIF9hY2Nlc3NpYmlsaXR5RnJhbWVBbmNlc3Rvcl0pOgorICAgICAgICAoLVtX
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBfYWNjZXNzaWJpbGl0eVRyYWl0c0Zyb21BbmNl
c3RvcnNdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgdGFibGVD
ZWxsUGFyZW50XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHRh
YmxlUGFyZW50XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFj
Y2Vzc2liaWxpdHlUaXRsZUVsZW1lbnRdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eURhdGV0aW1lVmFsdWVdKToKKyAgICAgICAgKC1bV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgZGV0YWlsUGFyZW50Rm9yU3VtbWFyeU9iamVjdDpd
KToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgZGV0YWlsUGFyZW50
Rm9yT2JqZWN0Ol0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciB0
cmVlSXRlbVBhcmVudEZvck9iamVjdDpdKToKKyAgICAgICAgKEFYQXR0cmlidXRlU3RyaW5nU2V0
U3R5bGUpOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhcnJheU9m
VGV4dEZvclRleHRNYXJrZXJzOmF0dHJpYnV0ZWQ6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlTdXBwb3J0c0FSSUFFeHBhbmRlZF0pOgor
ICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5SXNF
eHBhbmRlZF0pOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0
ZWRUcmVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYSXNvbGF0ZWRUcmVlOjpzZXRSb290KToK
KyAgICAgICAgKFdlYkNvcmU6OkFYSXNvbGF0ZWRUcmVlOjphcHBseVBlbmRpbmdDaGFuZ2VzKToK
KyAgICAgICAgKFdlYkNvcmU6OkFYSXNvbGF0ZWRUcmVlOjpzZXRSb290Tm9kZUlEKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZS5o
OgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRUcmVlTm9k
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBWElzb2xhdGVkVHJlZU5vZGU6OkFYSXNvbGF0ZWRU
cmVlTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpBWElzb2xhdGVkVHJlZU5vZGU6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpBWElzb2xhdGVkVHJlZU5vZGU6OmluaXRpYWxpemVBdHRyaWJ1
dGVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkFYSXNvbGF0ZWRUcmVlTm9kZTo6YXBwZW5kQ2hp
bGQpOgorICAgICAgICAoV2ViQ29yZTo6QVhJc29sYXRlZFRyZWVOb2RlOjpjaGlsZHJlbik6Cisg
ICAgICAgIChXZWJDb3JlOjpBWElzb2xhdGVkVHJlZU5vZGU6OnBhcmVudE9iamVjdFVuaWdub3Jl
ZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBWElzb2xhdGVkVHJlZU5vZGU6OmFjY2Vzc2li
aWxpdHlIaXRUZXN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFYSXNvbGF0ZWRUcmVlTm9k
ZTo6dXBkYXRlQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkFYSXNvbGF0ZWRUcmVl
Tm9kZTo6cGFyZW50T2JqZWN0SW50ZXJmYWNlVW5pZ25vcmVkIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiBhY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZU5vZGUuaDoK
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9BWE9iamVjdENhY2hlTWFjLm1tOgorICAgICAg
ICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6YXR0YWNoV3JhcHBlcik6CisgICAgICAgIChXZWJD
b3JlOjpBWE9iamVjdENhY2hlOjphc3NvY2lhdGVJc29sYXRlZFRyZWVOb2RlKTogRGVsZXRlZC4K
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ckJhc2UuaDoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlckJhc2UubW06CisgICAgICAgIChjb252ZXJ0VG9OU0FycmF5KToKKyAgICAgICAg
KC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlIGluaXRXaXRoQWNjZXNzaWJpbGl0
eU9iamVjdDpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNl
IGRldGFjaF0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2Ug
dXBkYXRlT2JqZWN0QmFja2luZ1N0b3JlXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyQmFzZSBhY2Nlc3NpYmlsaXR5T2JqZWN0XSk6CisgICAgICAgICgtW1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZSBheEJhY2tpbmdPYmplY3RdKToKKyAgICAgICAg
KGFjY2Vzc2liaWxpdHlTZWFyY2hDcml0ZXJpYUZvclNlYXJjaFByZWRpY2F0ZVBhcmFtZXRlcml6
ZWRBdHRyaWJ1dGUpOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJh
c2UgaXNvbGF0ZWRUcmVlTm9kZV0pOiBEZWxldGVkLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkv
bWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tOgorICAgICAgICAoLVtXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBkb0FYQXR0cmlidXRlZFN0cmluZ0ZvclRleHRNYXJr
ZXJSYW5nZTpzcGVsbENoZWNrOl0pOgorICAgICAgICAoY29udmVydFRvVmVjdG9yKToKKyAgICAg
ICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgY2hpbGRyZW5WZWN0b3JTaXplXSk6
CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGNoaWxkcmVuVmVjdG9y
QXJyYXldKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNz
aWJpbGl0eUF0dHJpYnV0ZVZhbHVlOl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5U2hvd0NvbnRleHRNZW51XSk6CisgICAgICAgICgtW1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpm
b3JQYXJhbWV0ZXI6XSk6CisKIDIwMTktMTAtMzEgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBh
cHBsZS5jb20+CiAKICAgICAgICAgW0ZUV10gQWRvcHQgRGlyZWN0V3JpdGUgaW4gcGxhY2Ugb2Yg
VW5pc2NyaWJlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2Jq
ZWN0Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hl
LmNwcAppbmRleCA5N2FlZjZhNGI4MzZmNjM4MTNlMDA1YmVjNjc0MmYxYjBiOTExZWI1Li5jYWE3
MDM0ZjU0NTY3MDYzZGYzZGM1YTBiNTVlM2IwMzY4OTc0N2U5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKQEAgLTI3MDcsNyArMjcwNyw3IEBA
IEludFJlY3QgQVhPYmplY3RDYWNoZTo6YWJzb2x1dGVDYXJldEJvdW5kc0ZvckNoYXJhY3Rlck9m
ZnNldChjb25zdCBDaGFyYWN0ZXJPZmZzCiAgICAgcmV0dXJuIGFic29sdXRlQm91bmRzRm9yTG9j
YWxDYXJldFJlY3QoY2FyZXRQYWludGVyLCBsb2NhbFJlY3QpOwogfQogCi1DaGFyYWN0ZXJPZmZz
ZXQgQVhPYmplY3RDYWNoZTo6Y2hhcmFjdGVyT2Zmc2V0Rm9yUG9pbnQoY29uc3QgSW50UG9pbnQg
JnBvaW50LCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmopCitDaGFyYWN0ZXJPZmZzZXQgQVhPYmpl
Y3RDYWNoZTo6Y2hhcmFjdGVyT2Zmc2V0Rm9yUG9pbnQoY29uc3QgSW50UG9pbnQgJnBvaW50LCBB
WENvcmVPYmplY3QqIG9iaikKIHsKICAgICBpZiAoIW9iaikKICAgICAgICAgcmV0dXJuIENoYXJh
Y3Rlck9mZnNldCgpOwpAQCAtMjc3Myw3ICsyNzczLDcgQEAgQ2hhcmFjdGVyT2Zmc2V0IEFYT2Jq
ZWN0Q2FjaGU6OnN0YXJ0Q2hhcmFjdGVyT2Zmc2V0T2ZMaW5lKGNvbnN0IENoYXJhY3Rlck9mZnNl
dCYKICAgICByZXR1cm4gY2hhcmFjdGVyT2Zmc2V0RnJvbVZpc2libGVQb3NpdGlvbihzdGFydExp
bmUpOwogfQogCi1DaGFyYWN0ZXJPZmZzZXQgQVhPYmplY3RDYWNoZTo6Y2hhcmFjdGVyT2Zmc2V0
Rm9ySW5kZXgoaW50IGluZGV4LCBjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmopCitDaGFy
YWN0ZXJPZmZzZXQgQVhPYmplY3RDYWNoZTo6Y2hhcmFjdGVyT2Zmc2V0Rm9ySW5kZXgoaW50IGlu
ZGV4LCBjb25zdCBBWENvcmVPYmplY3QqIG9iaikKIHsKICAgICBpZiAoIW9iaikKICAgICAgICAg
cmV0dXJuIENoYXJhY3Rlck9mZnNldCgpOwpAQCAtMjk0MywxOCArMjk0MywxOCBAQCB2b2lkIEFY
T2JqZWN0Q2FjaGU6OnBlcmZvcm1EZWZlcnJlZENhY2hlVXBkYXRlKCkKIH0KICAgICAKICNpZiBF
TkFCTEUoQUNDRVNTSUJJTElUWV9JU09MQVRFRF9UUkVFKQotUmVmPEFYSXNvbGF0ZWRUcmVlTm9k
ZT4gQVhPYmplY3RDYWNoZTo6Y3JlYXRlSXNvbGF0ZWRBY2Nlc3NpYmlsaXR5VHJlZUhpZXJhcmNo
eShBY2Nlc3NpYmlsaXR5T2JqZWN0JiBvYmplY3QsIEFYSUQgcGFyZW50SUQsIEFYSXNvbGF0ZWRU
cmVlJiB0cmVlLCBWZWN0b3I8UmVmPEFYSXNvbGF0ZWRUcmVlTm9kZT4+JiBub2RlQ2hhbmdlcykK
K1JlZjxBWElzb2xhdGVkVHJlZU5vZGU+IEFYT2JqZWN0Q2FjaGU6OmNyZWF0ZUlzb2xhdGVkQWNj
ZXNzaWJpbGl0eVRyZWVIaWVyYXJjaHkoQVhDb3JlT2JqZWN0JiBvYmplY3QsIEFYSUQgcGFyZW50
SUQsIEFYSXNvbGF0ZWRUcmVlJiB0cmVlLCBWZWN0b3I8UmVmPEFYSXNvbGF0ZWRUcmVlTm9kZT4+
JiBub2RlQ2hhbmdlcykKIHsKICAgICBhdXRvIGlzb2xhdGVkVHJlZU5vZGUgPSBBWElzb2xhdGVk
VHJlZU5vZGU6OmNyZWF0ZShvYmplY3QpOwogICAgIG5vZGVDaGFuZ2VzLmFwcGVuZChpc29sYXRl
ZFRyZWVOb2RlLmNvcHlSZWYoKSk7CiAKICAgICBpc29sYXRlZFRyZWVOb2RlLT5zZXRUcmVlSWRl
bnRpZmllcih0cmVlLnRyZWVJZGVudGlmaWVyKCkpOwogICAgIGlzb2xhdGVkVHJlZU5vZGUtPnNl
dFBhcmVudChwYXJlbnRJRCk7Ci0gICAgYXNzb2NpYXRlSXNvbGF0ZWRUcmVlTm9kZShvYmplY3Qs
IGlzb2xhdGVkVHJlZU5vZGUsIHRyZWUudHJlZUlkZW50aWZpZXIoKSk7CisgICAgYXR0YWNoV3Jh
cHBlcigmaXNvbGF0ZWRUcmVlTm9kZS5nZXQoKSk7CiAKLSAgICBmb3IgKGF1dG8gY2hpbGQgOiBv
YmplY3QuY2hpbGRyZW4oKSkgewotICAgICAgICBhdXRvIHN0YXRpY0NoaWxkID0gY3JlYXRlSXNv
bGF0ZWRBY2Nlc3NpYmlsaXR5VHJlZUhpZXJhcmNoeSgqY2hpbGQsIGlzb2xhdGVkVHJlZU5vZGUt
PmlkZW50aWZpZXIoKSwgdHJlZSwgbm9kZUNoYW5nZXMpOwotICAgICAgICBpc29sYXRlZFRyZWVO
b2RlLT5hcHBlbmRDaGlsZChzdGF0aWNDaGlsZC0+aWRlbnRpZmllcigpKTsKKyAgICBmb3IgKGNv
bnN0IGF1dG8mIGNoaWxkIDogb2JqZWN0LmNoaWxkcmVuKCkpIHsKKyAgICAgICAgYXV0byBzdGF0
aWNDaGlsZCA9IGNyZWF0ZUlzb2xhdGVkQWNjZXNzaWJpbGl0eVRyZWVIaWVyYXJjaHkoKmNoaWxk
LCBpc29sYXRlZFRyZWVOb2RlLT5vYmplY3RJRCgpLCB0cmVlLCBub2RlQ2hhbmdlcyk7CisgICAg
ICAgIGlzb2xhdGVkVHJlZU5vZGUtPmFwcGVuZENoaWxkKHN0YXRpY0NoaWxkLT5vYmplY3RJRCgp
KTsKICAgICB9CiAKICAgICByZXR1cm4gaXNvbGF0ZWRUcmVlTm9kZTsKQEAgLTI5NzAsNyArMjk3
MCw3IEBAIFJlZjxBWElzb2xhdGVkVHJlZT4gQVhPYmplY3RDYWNoZTo6Z2VuZXJhdGVJc29sYXRl
ZEFjY2Vzc2liaWxpdHlUcmVlKCkKICAgICAKICAgICBWZWN0b3I8UmVmPEFYSXNvbGF0ZWRUcmVl
Tm9kZT4+IG5vZGVDaGFuZ2VzOwogICAgIGF1dG8gcm9vdCA9IGNyZWF0ZUlzb2xhdGVkQWNjZXNz
aWJpbGl0eVRyZWVIaWVyYXJjaHkoKnJvb3RPYmplY3QoKSwgSW52YWxpZEFYSUQsICp0cmVlLCBu
b2RlQ2hhbmdlcyk7Ci0gICAgdHJlZS0+c2V0Um9vdE5vZGVJRChyb290LT5pZGVudGlmaWVyKCkp
OworICAgIHRyZWUtPnNldFJvb3Qocm9vdCk7CiAgICAgdHJlZS0+YXBwZW5kTm9kZUNoYW5nZXMo
bm9kZUNoYW5nZXMpOwogCiAgICAgcmV0dXJuIG1ha2VSZWYoKnRyZWUpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaAppbmRleCA4ODQ5OWZkMThjMjA3Mzlk
MmRhMzcwYTA0YmE3YmY0MWJmZTNjODRhLi5hYzBjMmJjODc3OTIwOTRhM2RhOTBhMzY4M2M2YjNl
M2I4ODljZDY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2Jq
ZWN0Q2FjaGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2Fj
aGUuaApAQCAtMTc0LDcgKzE3NCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbW92ZShBWElEKTsK
IAogICAgIHZvaWQgZGV0YWNoV3JhcHBlcihBY2Nlc3NpYmlsaXR5T2JqZWN0KiwgQWNjZXNzaWJp
bGl0eURldGFjaG1lbnRUeXBlKTsKLSAgICB2b2lkIGF0dGFjaFdyYXBwZXIoQWNjZXNzaWJpbGl0
eU9iamVjdCopOworICAgIHZvaWQgYXR0YWNoV3JhcHBlcihBWENvcmVPYmplY3QqKTsKICAgICB2
b2lkIGNoaWxkcmVuQ2hhbmdlZChOb2RlKiwgTm9kZSogbmV3Q2hpbGQgPSBudWxscHRyKTsKICAg
ICB2b2lkIGNoaWxkcmVuQ2hhbmdlZChSZW5kZXJPYmplY3QqLCBSZW5kZXJPYmplY3QqIG5ld0No
aWxkID0gbnVsbHB0cik7CiAgICAgdm9pZCBjaGlsZHJlbkNoYW5nZWQoQVhDb3JlT2JqZWN0Kik7
CkBAIC0xOTQsOCArMTk0LDcgQEAgcHVibGljOgogI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZX0lT
T0xBVEVEX1RSRUUpCiAgICAgV0VCQ09SRV9FWFBPUlQgUmVmPEFYSXNvbGF0ZWRUcmVlPiBnZW5l
cmF0ZUlzb2xhdGVkQWNjZXNzaWJpbGl0eVRyZWUoKTsKIAotICAgIHZvaWQgYXNzb2NpYXRlSXNv
bGF0ZWRUcmVlTm9kZShBY2Nlc3NpYmlsaXR5T2JqZWN0JiwgQVhJc29sYXRlZFRyZWVOb2RlJiwg
QVhJc29sYXRlZFRyZWVJRCk7Ci0gICAgUmVmPEFYSXNvbGF0ZWRUcmVlTm9kZT4gY3JlYXRlSXNv
bGF0ZWRBY2Nlc3NpYmlsaXR5VHJlZUhpZXJhcmNoeShBY2Nlc3NpYmlsaXR5T2JqZWN0JiwgQVhJ
RCwgQVhJc29sYXRlZFRyZWUmLCBWZWN0b3I8UmVmPEFYSXNvbGF0ZWRUcmVlTm9kZT4+Jik7Cisg
ICAgUmVmPEFYSXNvbGF0ZWRUcmVlTm9kZT4gY3JlYXRlSXNvbGF0ZWRBY2Nlc3NpYmlsaXR5VHJl
ZUhpZXJhcmNoeShBWENvcmVPYmplY3QmLCBBWElELCBBWElzb2xhdGVkVHJlZSYsIFZlY3RvcjxS
ZWY8QVhJc29sYXRlZFRyZWVOb2RlPj4mKTsKICNlbmRpZgogICAgIAogI2lmIEVOQUJMRShBQ0NF
U1NJQklMSVRZKQpAQCAtMjU3LDcgKzI1Niw3IEBAIHB1YmxpYzoKICAgICBDaGFyYWN0ZXJPZmZz
ZXQgcHJldmlvdXNTZW50ZW5jZVN0YXJ0Q2hhcmFjdGVyT2Zmc2V0KGNvbnN0IENoYXJhY3Rlck9m
ZnNldCYpOwogICAgIAogICAgIC8vIEJvdW5kcwotICAgIENoYXJhY3Rlck9mZnNldCBjaGFyYWN0
ZXJPZmZzZXRGb3JQb2ludChjb25zdCBJbnRQb2ludCYsIEFjY2Vzc2liaWxpdHlPYmplY3QqKTsK
KyAgICBDaGFyYWN0ZXJPZmZzZXQgY2hhcmFjdGVyT2Zmc2V0Rm9yUG9pbnQoY29uc3QgSW50UG9p
bnQmLCBBWENvcmVPYmplY3QqKTsKICAgICBJbnRSZWN0IGFic29sdXRlQ2FyZXRCb3VuZHNGb3JD
aGFyYWN0ZXJPZmZzZXQoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0Jik7CiAgICAgQ2hhcmFjdGVyT2Zm
c2V0IGNoYXJhY3Rlck9mZnNldEZvckJvdW5kcyhjb25zdCBJbnRSZWN0JiwgYm9vbCk7CiAgICAg
CkBAIC0yNjYsNyArMjY1LDcgQEAgcHVibGljOgogICAgIENoYXJhY3Rlck9mZnNldCBzdGFydENo
YXJhY3Rlck9mZnNldE9mTGluZShjb25zdCBDaGFyYWN0ZXJPZmZzZXQmKTsKICAgICAKICAgICAv
LyBJbmRleAotICAgIENoYXJhY3Rlck9mZnNldCBjaGFyYWN0ZXJPZmZzZXRGb3JJbmRleChpbnQs
IGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3QqKTsKKyAgICBDaGFyYWN0ZXJPZmZzZXQgY2hhcmFj
dGVyT2Zmc2V0Rm9ySW5kZXgoaW50LCBjb25zdCBBWENvcmVPYmplY3QqKTsKICAgICBpbnQgaW5k
ZXhGb3JDaGFyYWN0ZXJPZmZzZXQoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiwgQWNjZXNzaWJpbGl0
eU9iamVjdCopOwogCiAgICAgZW51bSBBWE5vdGlmaWNhdGlvbiB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9BWE9iamVjdENhY2hlSU9TLm1tIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvQVhPYmplY3RDYWNoZUlPUy5tbQppbmRleCBkZjU4
ZWZhNzY1M2Y2ODA1MzFjOGNlOTM5MzllN2IwNjYzMTczODNhLi44ZDVhMWNmYTBmYTg3YTcwNmIy
YjhkZmQ2MTNkYWVkYmFiN2NhN2U3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2lvcy9BWE9iamVjdENhY2hlSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvaW9zL0FYT2JqZWN0Q2FjaGVJT1MubW0KQEAgLTQyLDcgKzQyLDcgQEAgdm9pZCBB
WE9iamVjdENhY2hlOjpkZXRhY2hXcmFwcGVyKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iaiwgQWNj
ZXNzaWJpbGl0eURldGFjaG0KICAgICBvYmotPnNldFdyYXBwZXIobnVsbHB0cik7CiB9CiAKLXZv
aWQgQVhPYmplY3RDYWNoZTo6YXR0YWNoV3JhcHBlcihBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmop
Cit2b2lkIEFYT2JqZWN0Q2FjaGU6OmF0dGFjaFdyYXBwZXIoQVhDb3JlT2JqZWN0KiBvYmopCiB7
CiAgICAgUmV0YWluUHRyPEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyPiB3cmFwcGVyID0gYWRv
cHROUyhbW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFsbG9jXSBpbml0V2l0aEFjY2Vz
c2liaWxpdHlPYmplY3Q6b2JqXSk7CiAgICAgb2JqLT5zZXRXcmFwcGVyKHdyYXBwZXIuZ2V0KCkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQppbmRleCA5OGY5NDAyYjg4
Y2Y0OGVjMGQzMGNkNWZlM2JkZTUxZTc1ZDNlZjExLi4yNmRjYjBlYWI2MzU5MDQwOTExZGRhY2U1
ZGI5ZjY4YzBkNDEzNWYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5t
bQpAQCAtMTIzLDcgKzEyMyw3IEBAIHN0YXRpYyBOU1N0cmluZyAqIGNvbnN0IFVJQWNjZXNzaWJp
bGl0eVRleHR1YWxDb250ZXh0U291cmNlQ29kZSA9IEAiVUlBY2Nlc3NpYmlsCiBzdGF0aWMgQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqIEFjY2Vzc2liaWxpdHlVbmlnbm9yZWRBbmNlc3RvcihB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciAqd3JhcHBlcikKIHsKICAgICB3aGlsZSAod3JhcHBl
ciAmJiAhW3dyYXBwZXIgaXNBY2Nlc3NpYmlsaXR5RWxlbWVudF0pIHsKLSAgICAgICAgQWNjZXNz
aWJpbGl0eU9iamVjdCogb2JqZWN0ID0gW3dyYXBwZXIgYWNjZXNzaWJpbGl0eU9iamVjdF07Cisg
ICAgICAgIEFYQ29yZU9iamVjdCogb2JqZWN0ID0gW3dyYXBwZXIgYWNjZXNzaWJpbGl0eU9iamVj
dF07CiAgICAgICAgIGlmICghb2JqZWN0KQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIApA
QCAtMTc5LDcgKzE3OSw3IEBAIHN0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciogQWNj
ZXNzaWJpbGl0eVVuaWdub3JlZEFuY2VzdG9yKEFjY2Vzc2liaWxpdHlPCiAvLyBUaGlzIGlzIG5l
ZWRlZCBmb3IgZXh0ZXJuYWwgY2xpZW50cyB0byBiZSBhYmxlIHRvIGNyZWF0ZSBhIHRleHQgbWFy
a2VyIHdpdGhvdXQgaGF2aW5nIGEgcG9pbnRlciB0byB0aGUgY2FjaGUuCiAtIChpZClpbml0V2l0
aERhdGE6KE5TRGF0YSAqKWRhdGEgYWNjZXNzaWJpbGl0eU9iamVjdDooQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIgKil3cmFwcGVyCiB7Ci0gICAgV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVj
dCogYXhPYmplY3QgPSBbd3JhcHBlciBhY2Nlc3NpYmlsaXR5T2JqZWN0XTsgCisgICAgV2ViQ29y
ZTo6QVhDb3JlT2JqZWN0KiBheE9iamVjdCA9IFt3cmFwcGVyIGFjY2Vzc2liaWxpdHlPYmplY3Rd
OwogICAgIGlmICghYXhPYmplY3QpCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgCkBAIC0yNTcs
NyArMjU3LDcgQEAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKiBBY2Nlc3NpYmls
aXR5VW5pZ25vcmVkQW5jZXN0b3IoQWNjZXNzaWJpbGl0eU8KIAogQGltcGxlbWVudGF0aW9uIFdl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyCiAKLS0gKGlkKWluaXRXaXRoQWNjZXNzaWJpbGl0
eU9iamVjdDooQWNjZXNzaWJpbGl0eU9iamVjdCopYXhPYmplY3QKKy0gKGlkKWluaXRXaXRoQWNj
ZXNzaWJpbGl0eU9iamVjdDooQVhDb3JlT2JqZWN0KilheE9iamVjdAogewogICAgIHNlbGYgPSBb
c3VwZXIgaW5pdFdpdGhBY2Nlc3NpYmlsaXR5T2JqZWN0OmF4T2JqZWN0XTsKICAgICBpZiAoIXNl
bGYpCkBAIC01NTAsMzEgKzU1MCwzMSBAQCBzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXIqIEFjY2Vzc2liaWxpdHlVbmlnbm9yZWRBbmNlc3RvcihBY2Nlc3NpYmlsaXR5TwogCiAtIChB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciopX2FjY2Vzc2liaWxpdHlUcmVlQW5jZXN0b3IKIHsK
LSAgICBhdXRvIG1hdGNoRnVuYyA9IFtdIChjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0JiBvYmpl
Y3QpIHsKKyAgICBhdXRvIG1hdGNoRnVuYyA9IFtdIChjb25zdCBBWENvcmVPYmplY3QmIG9iamVj
dCkgewogICAgICAgICBBY2Nlc3NpYmlsaXR5Um9sZSByb2xlID0gb2JqZWN0LnJvbGVWYWx1ZSgp
OwogICAgICAgICByZXR1cm4gcm9sZSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6VHJlZTsKICAgICB9
OwotICAgIAotICAgIGlmIChjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBBY2Nl
c3NpYmlsaXR5OjpmaW5kQW5jZXN0b3I8QWNjZXNzaWJpbGl0eU9iamVjdD4oKm1fb2JqZWN0LCBm
YWxzZSwgV1RGTW92ZShtYXRjaEZ1bmMpKSkKKworICAgIGlmIChjb25zdCBBWENvcmVPYmplY3Qq
IHBhcmVudCA9IEFjY2Vzc2liaWxpdHk6OmZpbmRBbmNlc3RvcjxBWENvcmVPYmplY3Q+KCptX29i
amVjdCwgZmFsc2UsIFdURk1vdmUobWF0Y2hGdW5jKSkpCiAgICAgICAgIHJldHVybiBwYXJlbnQt
PndyYXBwZXIoKTsKICAgICByZXR1cm4gbmlsOwogfQogCiAtIChBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlciopX2FjY2Vzc2liaWxpdHlMaXN0QW5jZXN0b3IKIHsKLSAgICBhdXRvIG1hdGNoRnVu
YyA9IFtdIChjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0JiBvYmplY3QpIHsKKyAgICBhdXRvIG1h
dGNoRnVuYyA9IFtdIChjb25zdCBBWENvcmVPYmplY3QmIG9iamVjdCkgewogICAgICAgICBBY2Nl
c3NpYmlsaXR5Um9sZSByb2xlID0gb2JqZWN0LnJvbGVWYWx1ZSgpOwogICAgICAgICByZXR1cm4g
cm9sZSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6TGlzdCB8fCByb2xlID09IEFjY2Vzc2liaWxpdHlS
b2xlOjpMaXN0Qm94OwogICAgIH07CiAgICAgCi0gICAgaWYgKGNvbnN0IEFjY2Vzc2liaWxpdHlP
YmplY3QqIHBhcmVudCA9IEFjY2Vzc2liaWxpdHk6OmZpbmRBbmNlc3RvcjxBY2Nlc3NpYmlsaXR5
T2JqZWN0PigqbV9vYmplY3QsIGZhbHNlLCBXVEZNb3ZlKG1hdGNoRnVuYykpKQorICAgIGlmIChj
b25zdCBBWENvcmVPYmplY3QqIHBhcmVudCA9IEFjY2Vzc2liaWxpdHk6OmZpbmRBbmNlc3RvcjxB
WENvcmVPYmplY3Q+KCptX29iamVjdCwgZmFsc2UsIFdURk1vdmUobWF0Y2hGdW5jKSkpCiAgICAg
ICAgIHJldHVybiBwYXJlbnQtPndyYXBwZXIoKTsKICAgICByZXR1cm4gbmlsOwogfQogCiAtIChB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciopX2FjY2Vzc2liaWxpdHlBcnRpY2xlQW5jZXN0b3IK
IHsKLSAgICBpZiAoY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gQWNjZXNzaWJp
bGl0eTo6ZmluZEFuY2VzdG9yPEFjY2Vzc2liaWxpdHlPYmplY3Q+KCptX29iamVjdCwgZmFsc2Us
IFtdIChjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0JiBvYmplY3QpIHsKKyAgICBpZiAoY29uc3Qg
QVhDb3JlT2JqZWN0KiBwYXJlbnQgPSBBY2Nlc3NpYmlsaXR5OjpmaW5kQW5jZXN0b3I8QVhDb3Jl
T2JqZWN0PigqbV9vYmplY3QsIGZhbHNlLCBbXSAoY29uc3QgQVhDb3JlT2JqZWN0JiBvYmplY3Qp
IHsKICAgICAgICAgcmV0dXJuIG9iamVjdC5yb2xlVmFsdWUoKSA9PSBBY2Nlc3NpYmlsaXR5Um9s
ZTo6RG9jdW1lbnRBcnRpY2xlOwogICAgIH0pKQogICAgICAgICByZXR1cm4gcGFyZW50LT53cmFw
cGVyKCk7CkBAIC01ODMsNyArNTgzLDcgQEAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyKiBBY2Nlc3NpYmlsaXR5VW5pZ25vcmVkQW5jZXN0b3IoQWNjZXNzaWJpbGl0eU8KIAogLSAo
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqKV9hY2Nlc3NpYmlsaXR5TGFuZG1hcmtBbmNlc3Rv
cgogewotICAgIGlmIChjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBBY2Nlc3Np
YmlsaXR5OjpmaW5kQW5jZXN0b3I8QWNjZXNzaWJpbGl0eU9iamVjdD4oKm1fb2JqZWN0LCBmYWxz
ZSwgW3NlbGZdIChjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0JiBvYmplY3QpIHsKKyAgICBpZiAo
Y29uc3QgQVhDb3JlT2JqZWN0KiBwYXJlbnQgPSBBY2Nlc3NpYmlsaXR5OjpmaW5kQW5jZXN0b3I8
QVhDb3JlT2JqZWN0PigqbV9vYmplY3QsIGZhbHNlLCBbc2VsZl0gKGNvbnN0IEFYQ29yZU9iamVj
dCYgb2JqZWN0KSB7CiAgICAgICAgIHJldHVybiBbc2VsZiBfYWNjZXNzaWJpbGl0eUlzTGFuZG1h
cmtSb2xlOm9iamVjdC5yb2xlVmFsdWUoKV07CiAgICAgfSkpCiAgICAgICAgIHJldHVybiBwYXJl
bnQtPndyYXBwZXIoKTsKQEAgLTU5Miw3ICs1OTIsNyBAQCBzdGF0aWMgQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIqIEFjY2Vzc2liaWxpdHlVbmlnbm9yZWRBbmNlc3RvcihBY2Nlc3NpYmlsaXR5
TwogCiAtIChBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciopX2FjY2Vzc2liaWxpdHlUYWJsZUFu
Y2VzdG9yCiB7Ci0gICAgaWYgKGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudCA9IEFj
Y2Vzc2liaWxpdHk6OmZpbmRBbmNlc3RvcjxBY2Nlc3NpYmlsaXR5T2JqZWN0PigqbV9vYmplY3Qs
IGZhbHNlLCBbXSAoY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCYgb2JqZWN0KSB7CisgICAgaWYg
KGNvbnN0IEFYQ29yZU9iamVjdCogcGFyZW50ID0gQWNjZXNzaWJpbGl0eTo6ZmluZEFuY2VzdG9y
PEFYQ29yZU9iamVjdD4oKm1fb2JqZWN0LCBmYWxzZSwgW10gKGNvbnN0IEFYQ29yZU9iamVjdCYg
b2JqZWN0KSB7CiAgICAgICAgIHJldHVybiBvYmplY3Qucm9sZVZhbHVlKCkgPT0gQWNjZXNzaWJp
bGl0eVJvbGU6OlRhYmxlOwogICAgIH0pKQogICAgICAgICByZXR1cm4gcGFyZW50LT53cmFwcGVy
KCk7CkBAIC02MDEsMTQgKzYwMSwxNCBAQCBzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXIqIEFjY2Vzc2liaWxpdHlVbmlnbm9yZWRBbmNlc3RvcihBY2Nlc3NpYmlsaXR5TwogCiAtIChC
T09MKV9hY2Nlc3NpYmlsaXR5SXNJblRhYmxlQ2VsbAogewotICAgIHJldHVybiBBY2Nlc3NpYmls
aXR5OjpmaW5kQW5jZXN0b3I8QWNjZXNzaWJpbGl0eU9iamVjdD4oKm1fb2JqZWN0LCBmYWxzZSwg
W10gKGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3QmIG9iamVjdCkgeworICAgIHJldHVybiBBY2Nl
c3NpYmlsaXR5OjpmaW5kQW5jZXN0b3I8QVhDb3JlT2JqZWN0PigqbV9vYmplY3QsIGZhbHNlLCBb
XSAoY29uc3QgQVhDb3JlT2JqZWN0JiBvYmplY3QpIHsKICAgICAgICAgcmV0dXJuIG9iamVjdC5y
b2xlVmFsdWUoKSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6Q2VsbDsKICAgICB9KSAhPSBudWxscHRy
OwogfQogCiAtIChBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciopX2FjY2Vzc2liaWxpdHlGaWVs
ZHNldEFuY2VzdG9yCiB7Ci0gICAgaWYgKGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVu
dCA9IEFjY2Vzc2liaWxpdHk6OmZpbmRBbmNlc3RvcjxBY2Nlc3NpYmlsaXR5T2JqZWN0PigqbV9v
YmplY3QsIGZhbHNlLCBbXSAoY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCYgb2JqZWN0KSB7Cisg
ICAgaWYgKGNvbnN0IEFYQ29yZU9iamVjdCogcGFyZW50ID0gQWNjZXNzaWJpbGl0eTo6ZmluZEFu
Y2VzdG9yPEFYQ29yZU9iamVjdD4oKm1fb2JqZWN0LCBmYWxzZSwgW10gKGNvbnN0IEFYQ29yZU9i
amVjdCYgb2JqZWN0KSB7CiAgICAgICAgIHJldHVybiBvYmplY3QuaXNGaWVsZHNldCgpOwogICAg
IH0pKQogICAgICAgICByZXR1cm4gcGFyZW50LT53cmFwcGVyKCk7CkBAIC02MTcsNyArNjE3LDcg
QEAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKiBBY2Nlc3NpYmlsaXR5VW5pZ25v
cmVkQW5jZXN0b3IoQWNjZXNzaWJpbGl0eU8KIAogLSAoQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXIqKV9hY2Nlc3NpYmlsaXR5RnJhbWVBbmNlc3RvcgogewotICAgIGF1dG8qIHBhcmVudCA9IEFj
Y2Vzc2liaWxpdHk6OmZpbmRBbmNlc3RvcjxBY2Nlc3NpYmlsaXR5T2JqZWN0PigqbV9vYmplY3Qs
IGZhbHNlLCBbXSAoY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCYgb2JqZWN0KSB7CisgICAgYXV0
byogcGFyZW50ID0gQWNjZXNzaWJpbGl0eTo6ZmluZEFuY2VzdG9yPEFYQ29yZU9iamVjdD4oKm1f
b2JqZWN0LCBmYWxzZSwgW10gKGNvbnN0IEFYQ29yZU9iamVjdCYgb2JqZWN0KSB7CiAgICAgICAg
IHJldHVybiBvYmplY3QuaXNXZWJBcmVhKCk7CiAgICAgfSk7CiAgICAgaWYgKCFwYXJlbnQpCkBA
IC02MzIsNyArNjMyLDcgQEAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKiBBY2Nl
c3NpYmlsaXR5VW5pZ25vcmVkQW5jZXN0b3IoQWNjZXNzaWJpbGl0eU8KICAgICAKICAgICAvLyBU
cmFpdCBpbmZvcm1hdGlvbiBhbHNvIG5lZWRzIHRvIGJlIGdhdGhlcmVkIGZyb20gdGhlIHBhcmVu
dHMgYWJvdmUgdGhlIG9iamVjdC4KICAgICAvLyBUaGUgcGFyZW50T2JqZWN0IGlzIG5lZWRlZCBp
bnN0ZWFkIG9mIHRoZSB1bmlnbm9yZWRQYXJlbnRPYmplY3QsIGJlY2F1c2UgYSB0YWJsZSBtaWdo
dCBiZSBpZ25vcmVkLCBidXQgaW5mb3JtYXRpb24gc3RpbGwgbmVlZHMgdG8gYmUgZ2F0aGVyZWQg
ZnJvbSBpdC4gICAgCi0gICAgZm9yIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBtX29i
amVjdC0+cGFyZW50T2JqZWN0KCk7IHBhcmVudCAhPSBuaWw7IHBhcmVudCA9IHBhcmVudC0+cGFy
ZW50T2JqZWN0KCkpIHsKKyAgICBmb3IgKGF1dG8qIHBhcmVudCA9IG1fb2JqZWN0LT5wYXJlbnRP
YmplY3QoKTsgcGFyZW50ICE9IG5pbDsgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRPYmplY3QoKSkg
ewogICAgICAgICBBY2Nlc3NpYmlsaXR5Um9sZSBwYXJlbnRSb2xlID0gcGFyZW50LT5yb2xlVmFs
dWUoKTsKICAgICAgICAgaWYgKHBhcmVudFJvbGUgPT0gQWNjZXNzaWJpbGl0eVJvbGU6OldlYkFy
ZWEpCiAgICAgICAgICAgICBicmVhazsKQEAgLTExODIsNyArMTE4Miw3IEBAIHN0YXRpYyB2b2lk
IGFwcGVuZFN0cmluZ1RvUmVzdWx0KE5TTXV0YWJsZVN0cmluZyAqcmVzdWx0LCBOU1N0cmluZyAq
c3RyaW5nKQogLSAoQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbCopdGFibGVDZWxsUGFyZW50CiB7CiAg
ICAgLy8gRmluZCBpZiB0aGlzIGVsZW1lbnQgaXMgaW4gYSB0YWJsZSBjZWxsLgotICAgIGlmIChB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBBY2Nlc3NpYmlsaXR5OjpmaW5kQW5jZXN0b3I8
QWNjZXNzaWJpbGl0eU9iamVjdD4oKm1fb2JqZWN0LCB0cnVlLCBbXSAoY29uc3QgQWNjZXNzaWJp
bGl0eU9iamVjdCYgb2JqZWN0KSB7CisgICAgaWYgKEFYQ29yZU9iamVjdCogcGFyZW50ID0gQWNj
ZXNzaWJpbGl0eTo6ZmluZEFuY2VzdG9yPEFYQ29yZU9iamVjdD4oKm1fb2JqZWN0LCB0cnVlLCBb
XSAoY29uc3QgQVhDb3JlT2JqZWN0JiBvYmplY3QpIHsKICAgICAgICAgcmV0dXJuIG9iamVjdC5p
c1RhYmxlQ2VsbCgpOwogICAgIH0pKQogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QWNjZXNz
aWJpbGl0eVRhYmxlQ2VsbCo+KHBhcmVudCk7CkBAIC0xMTkyLDcgKzExOTIsNyBAQCBzdGF0aWMg
dm9pZCBhcHBlbmRTdHJpbmdUb1Jlc3VsdChOU011dGFibGVTdHJpbmcgKnJlc3VsdCwgTlNTdHJp
bmcgKnN0cmluZykKIC0gKEFjY2Vzc2liaWxpdHlUYWJsZSopdGFibGVQYXJlbnQKIHsKICAgICAv
LyBGaW5kIGlmIHRoZSBwYXJlbnQgdGFibGUgZm9yIHRoZSB0YWJsZSBjZWxsLgotICAgIGlmIChB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBBY2Nlc3NpYmlsaXR5OjpmaW5kQW5jZXN0b3I8
QWNjZXNzaWJpbGl0eU9iamVjdD4oKm1fb2JqZWN0LCB0cnVlLCBbXSAoY29uc3QgQWNjZXNzaWJp
bGl0eU9iamVjdCYgb2JqZWN0KSB7CisgICAgaWYgKEFYQ29yZU9iamVjdCogcGFyZW50ID0gQWNj
ZXNzaWJpbGl0eTo6ZmluZEFuY2VzdG9yPEFYQ29yZU9iamVjdD4oKm1fb2JqZWN0LCB0cnVlLCBb
XSAoY29uc3QgQVhDb3JlT2JqZWN0JiBvYmplY3QpIHsKICAgICAgICAgcmV0dXJuIGlzPEFjY2Vz
c2liaWxpdHlUYWJsZT4ob2JqZWN0KSAmJiBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KG9i
amVjdCkuaXNFeHBvc2FibGVUaHJvdWdoQWNjZXNzaWJpbGl0eSgpOwogICAgIH0pKQogICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlKj4ocGFyZW50KTsKQEAgLTEy
MDQsNyArMTIwNCw3IEBAIHN0YXRpYyB2b2lkIGFwcGVuZFN0cmluZ1RvUmVzdWx0KE5TTXV0YWJs
ZVN0cmluZyAqcmVzdWx0LCBOU1N0cmluZyAqc3RyaW5nKQogICAgIGlmICghW3NlbGYgX3ByZXBh
cmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBBY2Nlc3Np
YmlsaXR5T2JqZWN0KiB0aXRsZUVsZW1lbnQgPSBtX29iamVjdC0+dGl0bGVVSUVsZW1lbnQoKTsK
KyAgICBBWENvcmVPYmplY3QqIHRpdGxlRWxlbWVudCA9IG1fb2JqZWN0LT50aXRsZVVJRWxlbWVu
dCgpOwogICAgIGlmICh0aXRsZUVsZW1lbnQpCiAgICAgICAgIHJldHVybiB0aXRsZUVsZW1lbnQt
PndyYXBwZXIoKTsKIApAQCAtMTM5OCw3ICsxMzk4LDcgQEAgc3RhdGljIHZvaWQgYXBwZW5kU3Ry
aW5nVG9SZXN1bHQoTlNNdXRhYmxlU3RyaW5nICpyZXN1bHQsIE5TU3RyaW5nICpzdHJpbmcpCiAg
ICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKICAgICAgICAgcmV0dXJu
IG5pbDsKIAotICAgIGlmIChhdXRvKiBwYXJlbnQgPSBBY2Nlc3NpYmlsaXR5OjpmaW5kQW5jZXN0
b3I8QWNjZXNzaWJpbGl0eU9iamVjdD4oKm1fb2JqZWN0LCB0cnVlLCBbXSAoY29uc3QgQWNjZXNz
aWJpbGl0eU9iamVjdCYgb2JqZWN0KSB7CisgICAgaWYgKGF1dG8qIHBhcmVudCA9IEFjY2Vzc2li
aWxpdHk6OmZpbmRBbmNlc3RvcjxBWENvcmVPYmplY3Q+KCptX29iamVjdCwgdHJ1ZSwgW10gKGNv
bnN0IEFYQ29yZU9iamVjdCYgb2JqZWN0KSB7CiAgICAgICAgIHJldHVybiBvYmplY3Quc3VwcG9y
dHNEYXRldGltZUF0dHJpYnV0ZSgpOwogICAgIH0pKQogICAgICAgICByZXR1cm4gcGFyZW50LT5k
YXRldGltZUF0dHJpYnV0ZVZhbHVlKCk7CkBAIC0xOTY5LDMxICsxOTY5LDMxIEBAIHN0YXRpYyBS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyRm9yVmlldyhXQUtWaWV3KiB2aWV3KQogICAgIHJldHVybiBt
X29iamVjdC0+c2Nyb2xsVmlzaWJsZUNvbnRlbnRSZWN0KCk7CiB9CiAKLS0gKEFjY2Vzc2liaWxp
dHlPYmplY3QqKWRldGFpbFBhcmVudEZvclN1bW1hcnlPYmplY3Q6KEFjY2Vzc2liaWxpdHlPYmpl
Y3QqKW9iamVjdAorLSAoQVhDb3JlT2JqZWN0KilkZXRhaWxQYXJlbnRGb3JTdW1tYXJ5T2JqZWN0
OihBWENvcmVPYmplY3QqKW9iamVjdAogewogICAgIC8vIFVzZSB0aGlzIHRvIGNoZWNrIGlmIGFu
IG9iamVjdCBpcyB0aGUgY2hpbGQgb2YgYSBzdW1tYXJ5IG9iamVjdC4KICAgICAvLyBBbmQgcmV0
dXJuIHRoZSBzdW1tYXJ5J3MgcGFyZW50LCB3aGljaCBpcyB0aGUgZXhwYW5kYWJsZSBkZXRhaWxz
IG9iamVjdC4KLSAgICBpZiAoY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCogc3VtbWFyeSA9IEFj
Y2Vzc2liaWxpdHk6OmZpbmRBbmNlc3RvcjxBY2Nlc3NpYmlsaXR5T2JqZWN0Pigqb2JqZWN0LCB0
cnVlLCBbXSAoY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCYgb2JqZWN0KSB7CisgICAgaWYgKGNv
bnN0IEFYQ29yZU9iamVjdCogc3VtbWFyeSA9IEFjY2Vzc2liaWxpdHk6OmZpbmRBbmNlc3RvcjxB
WENvcmVPYmplY3Q+KCpvYmplY3QsIHRydWUsIFtdIChjb25zdCBBWENvcmVPYmplY3QmIG9iamVj
dCkgewogICAgICAgICByZXR1cm4gb2JqZWN0Lmhhc1RhZ05hbWUoc3VtbWFyeVRhZyk7CiAgICAg
fSkpCiAgICAgICAgIHJldHVybiBzdW1tYXJ5LT5wYXJlbnRPYmplY3QoKTsKICAgICByZXR1cm4g
bmlsOwogfQogCi0tIChBY2Nlc3NpYmlsaXR5T2JqZWN0KilkZXRhaWxQYXJlbnRGb3JPYmplY3Q6
KEFjY2Vzc2liaWxpdHlPYmplY3QqKW9iamVjdAorLSAoQVhDb3JlT2JqZWN0KilkZXRhaWxQYXJl
bnRGb3JPYmplY3Q6KEFjY2Vzc2liaWxpdHlPYmplY3QqKW9iamVjdAogewogICAgIC8vIFVzZSB0
aGlzIHRvIGNoZWNrIGlmIGFuIG9iamVjdCBpcyBpbnNpZGUgYSBkZXRhaWxzIG9iamVjdC4KLSAg
ICBpZiAoY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCogZGV0YWlscyA9IEFjY2Vzc2liaWxpdHk6
OmZpbmRBbmNlc3RvcjxBY2Nlc3NpYmlsaXR5T2JqZWN0Pigqb2JqZWN0LCB0cnVlLCBbXSAoY29u
c3QgQWNjZXNzaWJpbGl0eU9iamVjdCYgb2JqZWN0KSB7CisgICAgaWYgKEFYQ29yZU9iamVjdCog
ZGV0YWlscyA9IEFjY2Vzc2liaWxpdHk6OmZpbmRBbmNlc3RvcjxBWENvcmVPYmplY3Q+KCpvYmpl
Y3QsIHRydWUsIFtdIChjb25zdCBBWENvcmVPYmplY3QmIG9iamVjdCkgewogICAgICAgICByZXR1
cm4gb2JqZWN0Lmhhc1RhZ05hbWUoZGV0YWlsc1RhZyk7CiAgICAgfSkpCi0gICAgICAgIHJldHVy
biBjb25zdF9jYXN0PEFjY2Vzc2liaWxpdHlPYmplY3QqPihkZXRhaWxzKTsKKyAgICAgICAgcmV0
dXJuIGRldGFpbHM7CiAgICAgcmV0dXJuIG5pbDsKIH0KIAotLSAoQWNjZXNzaWJpbGl0eU9iamVj
dCopdHJlZUl0ZW1QYXJlbnRGb3JPYmplY3Q6KEFjY2Vzc2liaWxpdHlPYmplY3QqKW9iamVjdAor
LSAoQVhDb3JlT2JqZWN0Kil0cmVlSXRlbVBhcmVudEZvck9iamVjdDooQVhDb3JlT2JqZWN0Kilv
YmplY3QKIHsKICAgICAvLyBVc2UgdGhpcyB0byBjaGVjayBpZiBhbiBvYmplY3QgaXMgaW5zaWRl
IGEgdHJlZWl0ZW0gb2JqZWN0LgotICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQg
PSBBY2Nlc3NpYmlsaXR5OjpmaW5kQW5jZXN0b3I8QWNjZXNzaWJpbGl0eU9iamVjdD4oKm9iamVj
dCwgdHJ1ZSwgW10gKGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3QmIG9iamVjdCkgeworICAgIGlm
IChBWENvcmVPYmplY3QqIHBhcmVudCA9IEFjY2Vzc2liaWxpdHk6OmZpbmRBbmNlc3RvcjxBWENv
cmVPYmplY3Q+KCpvYmplY3QsIHRydWUsIFtdIChjb25zdCBBWENvcmVPYmplY3QmIG9iamVjdCkg
ewogICAgICAgICByZXR1cm4gb2JqZWN0LnJvbGVWYWx1ZSgpID09IEFjY2Vzc2liaWxpdHlSb2xl
OjpUcmVlSXRlbTsKICAgICB9KSkKICAgICAgICAgcmV0dXJuIHBhcmVudDsKQEAgLTIyMDcsMTEg
KzIyMDcsMTEgQEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVTdHJpbmdTZXRTdHlsZShOU011dGFi
bGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLCBSZW4KIAogICAgIC8vIEFkZCBjb2RlIGNv
bnRleHQgaWYgdGhpcyBub2RlIGlzIHdpdGhpbiBhIDxjb2RlPiBibG9jay4KICAgICBBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBheE9iamVjdCA9IHJlbmRlcmVyLT5kb2N1bWVudCgpLmF4T2JqZWN0Q2Fj
aGUoKS0+Z2V0T3JDcmVhdGUocmVuZGVyZXIpOwotICAgIGF1dG8gbWF0Y2hGdW5jID0gW10gKGNv
bnN0IEFjY2Vzc2liaWxpdHlPYmplY3QmIG9iamVjdCkgeworICAgIGF1dG8gbWF0Y2hGdW5jID0g
W10gKGNvbnN0IEFYQ29yZU9iamVjdCYgb2JqZWN0KSB7CiAgICAgICAgIHJldHVybiBvYmplY3Qu
bm9kZSgpICYmIG9iamVjdC5ub2RlKCktPmhhc1RhZ05hbWUoY29kZVRhZyk7CiAgICAgfTsKIAot
ICAgIGlmIChjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBBY2Nlc3NpYmlsaXR5
OjpmaW5kQW5jZXN0b3I8QWNjZXNzaWJpbGl0eU9iamVjdD4oKmF4T2JqZWN0LCB0cnVlLCBXVEZN
b3ZlKG1hdGNoRnVuYykpKQorICAgIGlmIChjb25zdCBBWENvcmVPYmplY3QqIHBhcmVudCA9IEFj
Y2Vzc2liaWxpdHk6OmZpbmRBbmNlc3RvcjxBWENvcmVPYmplY3Q+KCpheE9iamVjdCwgdHJ1ZSwg
V1RGTW92ZShtYXRjaEZ1bmMpKSkKICAgICAgICAgW2F0dHJTdHJpbmcgYWRkQXR0cmlidXRlOlVJ
QWNjZXNzaWJpbGl0eVRleHRBdHRyaWJ1dGVDb250ZXh0IHZhbHVlOlVJQWNjZXNzaWJpbGl0eVRl
eHR1YWxDb250ZXh0U291cmNlQ29kZSByYW5nZTpyYW5nZV07CiB9CiAKQEAgLTIyODIsNyArMjI4
Miw3IEBAIHN0YXRpYyB2b2lkIEFYQXR0cmlidXRlZFN0cmluZ0FwcGVuZFRleHQoTlNNdXRhYmxl
QXR0cmlidXRlZFN0cmluZyogYXR0clN0cmluZywKICAgICAgICAgICAgICAgICBpZiAoW3NlbGYg
X2FkZEFjY2Vzc2liaWxpdHlPYmplY3Q6aGVhZGluZ09iamVjdCB0b1RleHRNYXJrZXJBcnJheTph
cnJheV0pCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIFN0cmluZyBsaXN0TWFya2VyVGV4dCA9IG1fb2JqZWN0LT5saXN0TWFy
a2VyVGV4dEZvck5vZGVBbmRQb3NpdGlvbigmbm9kZSwgVmlzaWJsZVBvc2l0aW9uKGl0LnJhbmdl
KCktPnN0YXJ0UG9zaXRpb24oKSkpOworICAgICAgICAgICAgICAgIFN0cmluZyBsaXN0TWFya2Vy
VGV4dCA9IEFjY2Vzc2liaWxpdHlPYmplY3Q6Omxpc3RNYXJrZXJUZXh0Rm9yTm9kZUFuZFBvc2l0
aW9uKCZub2RlLCBWaXNpYmxlUG9zaXRpb24oaXQucmFuZ2UoKS0+c3RhcnRQb3NpdGlvbigpKSk7
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKCFsaXN0TWFya2VyVGV4dC5p
c0VtcHR5KCkpIAogICAgICAgICAgICAgICAgICAgICBbYXJyYXkgYWRkT2JqZWN0Omxpc3RNYXJr
ZXJUZXh0XTsKQEAgLTIyOTEsNyArMjI5MSw3IEBAIHN0YXRpYyB2b2lkIEFYQXR0cmlidXRlZFN0
cmluZ0FwcGVuZFRleHQoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0clN0cmluZywKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBTdHJpbmcgbGlzdE1hcmtlclRleHQgPSBtX29iamVjdC0+bGlzdE1hcmtlclRleHRGb3JO
b2RlQW5kUG9zaXRpb24oJm5vZGUsIFZpc2libGVQb3NpdGlvbihpdC5yYW5nZSgpLT5zdGFydFBv
c2l0aW9uKCkpKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgbGlzdE1hcmtlclRleHQgPSBBY2Nl
c3NpYmlsaXR5T2JqZWN0OjpsaXN0TWFya2VyVGV4dEZvck5vZGVBbmRQb3NpdGlvbigmbm9kZSwg
VmlzaWJsZVBvc2l0aW9uKGl0LnJhbmdlKCktPnN0YXJ0UG9zaXRpb24oKSkpOwogCiAgICAgICAg
ICAgICAgICAgaWYgKCFsaXN0TWFya2VyVGV4dC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0clN0cmluZyA9IFtbTlNNdXRhYmxl
QXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdF07CkBAIC0yOTQxLDEwICsyOTQxLDEwIEBAIHN0
YXRpYyB2b2lkIEFYQXR0cmlidXRlZFN0cmluZ0FwcGVuZFRleHQoTlNNdXRhYmxlQXR0cmlidXRl
ZFN0cmluZyogYXR0clN0cmluZywKICAgICAKICAgICAvLyBTaW5jZSBkZXRhaWxzIGVsZW1lbnQg
aXMgaWdub3JlZCBvbiBpT1MsIHdlIHNob3VsZCBleHBvc2UgdGhlIGV4cGFuZGVkIHN0YXR1cyBv
biBpdHMKICAgICAvLyBzdW1tYXJ5J3MgYWNjZXNzaWJsZSBjaGlsZHJlbi4KLSAgICBpZiAoQWNj
ZXNzaWJpbGl0eU9iamVjdCogZGV0YWlsUGFyZW50ID0gW3NlbGYgZGV0YWlsUGFyZW50Rm9yU3Vt
bWFyeU9iamVjdDptX29iamVjdF0pCisgICAgaWYgKEFYQ29yZU9iamVjdCogZGV0YWlsUGFyZW50
ID0gW3NlbGYgZGV0YWlsUGFyZW50Rm9yU3VtbWFyeU9iamVjdDptX29iamVjdF0pCiAgICAgICAg
IHJldHVybiBkZXRhaWxQYXJlbnQtPnN1cHBvcnRzRXhwYW5kZWQoKTsKICAgICAKLSAgICBpZiAo
QWNjZXNzaWJpbGl0eU9iamVjdCogdHJlZUl0ZW1QYXJlbnQgPSBbc2VsZiB0cmVlSXRlbVBhcmVu
dEZvck9iamVjdDptX29iamVjdF0pCisgICAgaWYgKEFYQ29yZU9iamVjdCogdHJlZUl0ZW1QYXJl
bnQgPSBbc2VsZiB0cmVlSXRlbVBhcmVudEZvck9iamVjdDptX29iamVjdF0pCiAgICAgICAgIHJl
dHVybiB0cmVlSXRlbVBhcmVudC0+c3VwcG9ydHNFeHBhbmRlZCgpOwogICAgIAogICAgIHJldHVy
biBtX29iamVjdC0+c3VwcG9ydHNFeHBhbmRlZCgpOwpAQCAtMjk1NywxMCArMjk1NywxMCBAQCBz
dGF0aWMgdm9pZCBBWEF0dHJpYnV0ZWRTdHJpbmdBcHBlbmRUZXh0KE5TTXV0YWJsZUF0dHJpYnV0
ZWRTdHJpbmcqIGF0dHJTdHJpbmcsCiAKICAgICAvLyBTaW5jZSBkZXRhaWxzIGVsZW1lbnQgaXMg
aWdub3JlZCBvbiBpT1MsIHdlIHNob3VsZCBleHBvc2UgdGhlIGV4cGFuZGVkIHN0YXR1cyBvbiBp
dHMKICAgICAvLyBzdW1tYXJ5J3MgYWNjZXNzaWJsZSBjaGlsZHJlbi4KLSAgICBpZiAoQWNjZXNz
aWJpbGl0eU9iamVjdCogZGV0YWlsUGFyZW50ID0gW3NlbGYgZGV0YWlsUGFyZW50Rm9yU3VtbWFy
eU9iamVjdDptX29iamVjdF0pCisgICAgaWYgKEFYQ29yZU9iamVjdCogZGV0YWlsUGFyZW50ID0g
W3NlbGYgZGV0YWlsUGFyZW50Rm9yU3VtbWFyeU9iamVjdDptX29iamVjdF0pCiAgICAgICAgIHJl
dHVybiBkZXRhaWxQYXJlbnQtPmlzRXhwYW5kZWQoKTsKICAgICAKLSAgICBpZiAoQWNjZXNzaWJp
bGl0eU9iamVjdCogdHJlZUl0ZW1QYXJlbnQgPSBbc2VsZiB0cmVlSXRlbVBhcmVudEZvck9iamVj
dDptX29iamVjdF0pCisgICAgaWYgKEFYQ29yZU9iamVjdCogdHJlZUl0ZW1QYXJlbnQgPSBbc2Vs
ZiB0cmVlSXRlbVBhcmVudEZvck9iamVjdDptX29iamVjdF0pCiAgICAgICAgIHJldHVybiB0cmVl
SXRlbVBhcmVudC0+aXNFeHBhbmRlZCgpOwogICAgIAogICAgIHJldHVybiBtX29iamVjdC0+aXNF
eHBhbmRlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29s
YXRlZHRyZWUvQVhJc29sYXRlZFRyZWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWUuY3BwCmluZGV4IDU4NmFkZjA2NzJmNzZlYTM1
OGU5ZGIxZDdiODA1NmYyMjM3YTA2OTguLmNmZjk3MDdlMDU4NWE4ZjU2N2M1OWMxNjlmOTdmOGYz
NGU2NWVkYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0
ZWR0cmVlL0FYSXNvbGF0ZWRUcmVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZS5jcHAKQEAgLTExNCwxMCArMTE0LDExIEBA
IFJlZlB0cjxBWElzb2xhdGVkVHJlZU5vZGU+IEFYSXNvbGF0ZWRUcmVlOjpyb290Tm9kZSgpCiAg
ICAgcmV0dXJuIG5vZGVGb3JJRChtX3Jvb3ROb2RlSUQpOwogfQogCi12b2lkIEFYSXNvbGF0ZWRU
cmVlOjpzZXRSb290Tm9kZUlEKEFYSUQgYXhJRCkKK3ZvaWQgQVhJc29sYXRlZFRyZWU6OnNldFJv
b3QoUmVmPEFYSXNvbGF0ZWRUcmVlTm9kZT4mIHJvb3QpCiB7CiAgICAgTG9ja0hvbGRlciBsb2Nr
ZXIgeyBtX2NoYW5nZUxvZ0xvY2sgfTsKLSAgICBtX3BlbmRpbmdSb290Tm9kZUlEID0gYXhJRDsK
KyAgICBtX3Jvb3ROb2RlSUQgPSByb290LT5vYmplY3RJRCgpOworICAgIG1fcmVhZGVyVGhyZWFk
Tm9kZU1hcC5hZGQocm9vdC0+b2JqZWN0SUQoKSwgV1RGTW92ZShyb290KSk7CiB9CiAgICAgCiB2
b2lkIEFYSXNvbGF0ZWRUcmVlOjpzZXRGb2N1c2VkTm9kZUlEKEFYSUQgYXhJRCkKQEAgLTE1MCwx
MSArMTUxLDEwIEBAIHZvaWQgQVhJc29sYXRlZFRyZWU6OmFwcGx5UGVuZGluZ0NoYW5nZXMoKQog
CiAgICAgLy8gV2UgZG9uJ3QgY2xlYXIgdGhlIHBlbmRpbmcgSURzIGJlYWNhdXNlIGlmIHRoZSBu
ZXh0IHJvdW5kIG9mIHVwZGF0ZXMgZG9lcyBub3QgbW9kaWZ5IHRoZW0sIHRoZW4gdGhleSBzdGF5
IHRoZSBzYW1lCiAgICAgLy8gdmFsdWUgd2l0aG91dCBleHRyYSBib29ra2VlcGluZy4KLSAgICBt
X3Jvb3ROb2RlSUQgPSBtX3BlbmRpbmdSb290Tm9kZUlEOwogICAgIG1fZm9jdXNlZE5vZGVJRCA9
IG1fcGVuZGluZ0ZvY3VzZWROb2RlSUQ7Ci0gICAgCisKICAgICBmb3IgKGF1dG8mIGl0ZW0gOiBh
cHBlbmRDb3B5KQotICAgICAgICBtX3JlYWRlclRocmVhZE5vZGVNYXAuYWRkKGl0ZW0tPmlkZW50
aWZpZXIoKSwgV1RGTW92ZShpdGVtKSk7CisgICAgICAgIG1fcmVhZGVyVGhyZWFkTm9kZU1hcC5h
ZGQoaXRlbS0+b2JqZWN0SUQoKSwgV1RGTW92ZShpdGVtKSk7CiAKICAgICBmb3IgKGF1dG8gaXRl
bSA6IHJlbW92ZUNvcHkpCiAgICAgICAgIG1fcmVhZGVyVGhyZWFkTm9kZU1hcC5yZW1vdmUoaXRl
bSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJl
ZS9BWElzb2xhdGVkVHJlZS5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRl
ZHRyZWUvQVhJc29sYXRlZFRyZWUuaAppbmRleCA2YWJkNzgzYzExMmUxZmI2OWQ0NWM1NzlmYWNm
ZWRhZDkyMjM1NjI5Li5kYWYzM2ZjMGQ3YjY4ZGFhMTY2NDFhODM0NzYyMWZiYmRjY2U5YmExIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElz
b2xhdGVkVHJlZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0
cmVlL0FYSXNvbGF0ZWRUcmVlLmgKQEAgLTU3LDcgKzU3LDcgQEAgcHVibGljOgogICAgIHZvaWQg
YXBwZW5kTm9kZUNoYW5nZXMoVmVjdG9yPFJlZjxBWElzb2xhdGVkVHJlZU5vZGU+PiYpOwogICAg
IHZvaWQgcmVtb3ZlTm9kZShBWElEKTsKIAotICAgIHZvaWQgc2V0Um9vdE5vZGVJRChBWElEKTsK
KyAgICB2b2lkIHNldFJvb3QoUmVmPEFYSXNvbGF0ZWRUcmVlTm9kZT4mKTsKICAgICB2b2lkIHNl
dEZvY3VzZWROb2RlSUQoQVhJRCk7CiAgICAgCiAgICAgLy8gQ2FsbCBvbiBBWCB0aHJlYWQKQEAg
LTc4LDcgKzc4LDYgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8UmVmPEFYSXNvbGF0ZWRUcmVlTm9k
ZT4+IG1fcGVuZGluZ0FwcGVuZHM7CiAgICAgVmVjdG9yPEFYSUQ+IG1fcGVuZGluZ1JlbW92YWxz
OwogICAgIEFYSUQgbV9wZW5kaW5nRm9jdXNlZE5vZGVJRDsKLSAgICBBWElEIG1fcGVuZGluZ1Jv
b3ROb2RlSUQ7CiAgICAgTG9jayBtX2NoYW5nZUxvZ0xvY2s7CiAKICAgICBBWElzb2xhdGVkVHJl
ZUlEIG1fdHJlZUlEOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9p
c29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWVOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRUcmVlTm9kZS5jcHAKaW5kZXggNzkzOTI5
OTUxZGQyZGM2YTQwMWM0NTgyNjY4NmFlZTIzOWE3M2IyMS4uY2FlODc4MzhmYmQ1ZDgyNmE5Y2Ni
NDk1ZjQ2NjA2NTI4OTI5OGU2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWVOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZU5vZGUuY3BwCkBA
IC0zMCwxMCArMzAsMTIgQEAKIAogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlPYmplY3QuaCIKIAor
ZXh0ZXJuICJDIiBib29sIF9BWFVJRWxlbWVudFJlcXVlc3RTZXJ2aWNlZEJ5U2Vjb25kYXJ5QVhU
aHJlYWQodm9pZCk7CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQVhJc29sYXRlZFRyZWVOb2Rl
OjpBWElzb2xhdGVkVHJlZU5vZGUoY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCYgb2JqZWN0KQot
ICAgIDogbV9pZGVudGlmaWVyKG9iamVjdC5heE9iamVjdElEKCkpCitBWElzb2xhdGVkVHJlZU5v
ZGU6OkFYSXNvbGF0ZWRUcmVlTm9kZShjb25zdCBBWENvcmVPYmplY3QmIG9iamVjdCkKKyAgICA6
IG1faWQob2JqZWN0Lm9iamVjdElEKCkpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
ICAgICBpbml0aWFsaXplQXR0cmlidXRlRGF0YShvYmplY3QpOwpAQCAtNDIsMTQgKzQ0LDE0IEBA
IEFYSXNvbGF0ZWRUcmVlTm9kZTo6QVhJc29sYXRlZFRyZWVOb2RlKGNvbnN0IEFjY2Vzc2liaWxp
dHlPYmplY3QmIG9iamVjdCkKICNlbmRpZgogfQogCi1SZWY8QVhJc29sYXRlZFRyZWVOb2RlPiBB
WElzb2xhdGVkVHJlZU5vZGU6OmNyZWF0ZShjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0JiBvYmpl
Y3QpCitSZWY8QVhJc29sYXRlZFRyZWVOb2RlPiBBWElzb2xhdGVkVHJlZU5vZGU6OmNyZWF0ZShj
b25zdCBBWENvcmVPYmplY3QmIG9iamVjdCkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBB
WElzb2xhdGVkVHJlZU5vZGUob2JqZWN0KSk7CiB9CiAKIEFYSXNvbGF0ZWRUcmVlTm9kZTo6fkFY
SXNvbGF0ZWRUcmVlTm9kZSgpID0gZGVmYXVsdDsKIAotdm9pZCBBWElzb2xhdGVkVHJlZU5vZGU6
OmluaXRpYWxpemVBdHRyaWJ1dGVEYXRhKGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3QmIG9iamVj
dCkKK3ZvaWQgQVhJc29sYXRlZFRyZWVOb2RlOjppbml0aWFsaXplQXR0cmlidXRlRGF0YShjb25z
dCBBWENvcmVPYmplY3QmIG9iamVjdCkKIHsKICAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFt
ZTo6Um9sZVZhbHVlLCBzdGF0aWNfY2FzdDxpbnQ+KG9iamVjdC5yb2xlVmFsdWUoKSkpOwogICAg
IHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc0F0dGFjaG1lbnQsIG9iamVjdC5pc0F0dGFj
aG1lbnQoKSk7CkBAIC04Miw3ICs4NCw3IEBAIHZvaWQgQVhJc29sYXRlZFRyZWVOb2RlOjpzZXRQ
cm9wZXJ0eShBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEF0dHJpYnV0ZVZhbHVlCiB2b2lk
IEFYSXNvbGF0ZWRUcmVlTm9kZTo6YXBwZW5kQ2hpbGQoQVhJRCBheElEKQogewogICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7Ci0gICAgbV9jaGlsZHJlbi5hcHBlbmQoYXhJRCk7CisgICAgbV9j
aGlsZHJlbklEcy5hcHBlbmQoYXhJRCk7CiB9CiAKIHZvaWQgQVhJc29sYXRlZFRyZWVOb2RlOjpz
ZXRQYXJlbnQoQVhJRCBwYXJlbnQpCkBAIC05OCw2ICsxMDAsMTggQEAgdm9pZCBBWElzb2xhdGVk
VHJlZU5vZGU6OnNldFRyZWVJZGVudGlmaWVyKEFYSXNvbGF0ZWRUcmVlSUQgdHJlZUlkZW50aWZp
ZXIpCiAgICAgICAgIG1fY2FjaGVkVHJlZSA9IHRyZWU7CiB9CiAKK2NvbnN0IEFYQ29yZU9iamVj
dDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBBWElzb2xhdGVkVHJlZU5vZGU6OmNoaWxk
cmVuKGJvb2wpCit7CisgICAgaWYgKF9BWFVJRWxlbWVudFJlcXVlc3RTZXJ2aWNlZEJ5U2Vjb25k
YXJ5QVhUaHJlYWQoKSkgeworICAgICAgICBtX2NoaWxkcmVuLmNsZWFyKCk7CisgICAgICAgIG1f
Y2hpbGRyZW4ucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2NoaWxkcmVuSURzLnNpemUoKSk7Cisg
ICAgICAgIGF1dG8gdHJlZSA9IHRoaXMtPnRyZWUoKTsKKyAgICAgICAgZm9yIChhdXRvIGNoaWxk
SUQgOiBtX2NoaWxkcmVuSURzKQorICAgICAgICAgICAgbV9jaGlsZHJlbi51bmNoZWNrZWRBcHBl
bmQodHJlZS0+bm9kZUZvcklEKGNoaWxkSUQpKTsKKyAgICB9CisgICAgcmV0dXJuIG1fY2hpbGRy
ZW47Cit9CisKIEFYQ29yZU9iamVjdCogQVhJc29sYXRlZFRyZWVOb2RlOjpmb2N1c2VkVUlFbGVt
ZW50KCkgY29uc3QKIHsKICAgICBpZiAoYXV0byBmb2N1c2VkRWxlbWVudCA9IHRyZWUoKS0+Zm9j
dXNlZFVJRWxlbWVudCgpKQpAQCAtMTA1LDcgKzExOSw3IEBAIEFYQ29yZU9iamVjdCogQVhJc29s
YXRlZFRyZWVOb2RlOjpmb2N1c2VkVUlFbGVtZW50KCkgY29uc3QKICAgICByZXR1cm4gbnVsbHB0
cjsKIH0KICAgICAKLUFYQ29yZU9iamVjdCogQVhJc29sYXRlZFRyZWVOb2RlOjpwYXJlbnRPYmpl
Y3RJbnRlcmZhY2VVbmlnbm9yZWQoKSBjb25zdAorQVhDb3JlT2JqZWN0KiBBWElzb2xhdGVkVHJl
ZU5vZGU6OnBhcmVudE9iamVjdFVuaWdub3JlZCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHRyZWUo
KS0+bm9kZUZvcklEKHBhcmVudCgpKS5nZXQoKTsKIH0KQEAgLTExNCw3ICsxMjgsNyBAQCBBWENv
cmVPYmplY3QqIEFYSXNvbGF0ZWRUcmVlTm9kZTo6YWNjZXNzaWJpbGl0eUhpdFRlc3QoY29uc3Qg
SW50UG9pbnQmIHBvaW50KSBjbwogewogICAgIGlmICghcmVsYXRpdmVGcmFtZSgpLmNvbnRhaW5z
KHBvaW50KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgZm9yIChhdXRvIGNoaWxkSUQg
OiBjaGlsZHJlbigpKSB7CisgICAgZm9yIChjb25zdCBhdXRvJiBjaGlsZElEIDogbV9jaGlsZHJl
bklEcykgewogICAgICAgICBhdXRvIGNoaWxkID0gdHJlZSgpLT5ub2RlRm9ySUQoY2hpbGRJRCk7
CiAgICAgICAgIEFTU0VSVChjaGlsZCk7CiAgICAgICAgIGlmIChjaGlsZCAmJiBjaGlsZC0+cmVs
YXRpdmVGcmFtZSgpLmNvbnRhaW5zKHBvaW50KSkKQEAgLTE4Niw2ICsyMDAsMTUgQEAgaW50IEFY
SXNvbGF0ZWRUcmVlTm9kZTo6aW50QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lKSBjb25zdAogICAgICk7CiB9CiAKK3ZvaWQgQVhJc29sYXRlZFRyZWVOb2RlOjp1cGRh
dGVCYWNraW5nU3RvcmUoKQoreworICAgIGlmIChfQVhVSUVsZW1lbnRSZXF1ZXN0U2VydmljZWRC
eVNlY29uZGFyeUFYVGhyZWFkKCkpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWlzTWFpblRo
cmVhZCgpKTsKKyAgICAgICAgaWYgKGF1dG8gdHJlZSA9IHRoaXMtPnRyZWUoKSkKKyAgICAgICAg
ICAgIHRyZWUtPmFwcGx5UGVuZGluZ0NoYW5nZXMoKTsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRSgoQUNDRVNTSUJJTElUWV9JU09MQVRFRF9U
UkVFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRy
ZWUvQVhJc29sYXRlZFRyZWVOb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lz
b2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZU5vZGUuaAppbmRleCBjMzU0NmZiZTgyNzUyZTk5ZWZh
YTdlZGRmYTYyNzY3NmQ1NDJhNjBmLi5lYTQxZjJhNTA5Yzc5YWIyYjNlYjRkYTkyNjY4MjEyMDdh
MTY0NTI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVk
dHJlZS9BWElzb2xhdGVkVHJlZU5vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZU5vZGUuaApAQCAtMzEsNiArMzEsNyBAQAog
I2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlPYmplY3RJbnRlcmZhY2UuaCIKICNpbmNsdWRlICJGbG9h
dFJlY3QuaCIKICNpbmNsdWRlICJJbnRQb2ludC5oIgorI2luY2x1ZGUgIlBhdGguaCIKICNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgpAQCAtNDMsMTEgKzQ0LDU5NyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBBWElzb2xhdGVkVHJlZTsKLWNsYXNzIEFjY2Vzc2liaWxpdHlPYmplY3Q7Ci0KLWNs
YXNzIEFYSXNvbGF0ZWRUcmVlTm9kZSBmaW5hbCA6IHB1YmxpYyBBWENvcmVPYmplY3QsIHB1Ymxp
YyBUaHJlYWRTYWZlUmVmQ291bnRlZDxBWElzb2xhdGVkVHJlZU5vZGU+IHsKIAorY2xhc3MgQVhJ
c29sYXRlZFRyZWVOb2RlIGZpbmFsIDogcHVibGljIEFYQ29yZU9iamVjdCB7CiBwdWJsaWM6Cisg
ICAgc3RhdGljIFJlZjxBWElzb2xhdGVkVHJlZU5vZGU+IGNyZWF0ZShjb25zdCBBWENvcmVPYmpl
Y3QmKTsKKyAgICB+QVhJc29sYXRlZFRyZWVOb2RlKCk7CisKKyAgICB2b2lkIHNldE9iamVjdElE
KEFYSUQgaWQpIG92ZXJyaWRlIHsgbV9pZCA9IGlkOyB9CisgICAgQVhJRCBvYmplY3RJRCgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1faWQ7IH0KKyAgICB2b2lkIGluaXQoKSBvdmVycmlkZSB7
IH0KKworICAgIHZvaWQgZGV0YWNoKEFjY2Vzc2liaWxpdHlEZXRhY2htZW50VHlwZSwgQVhPYmpl
Y3RDYWNoZSogPSBudWxscHRyKSBvdmVycmlkZSB7IH0KKyAgICBib29sIGlzRGV0YWNoZWQoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorCisgICAgYm9vbCBpc0FjY2Vzc2liaWxp
dHlPYmplY3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNB
Y2Nlc3NpYmlsaXR5Tm9kZU9iamVjdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9
CisgICAgYm9vbCBpc0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzQWNjZXNzaWJpbGl0eVNj
cm9sbFZpZXcoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNB
Y2Nlc3NpYmlsaXR5U1ZHUm9vdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Cisg
ICAgYm9vbCBpc0FjY2Vzc2liaWxpdHlTVkdFbGVtZW50KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gZmFsc2U7IH0KKworICAgIGJvb2wgY29udGFpbnNUZXh0KFN0cmluZyAqKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNBdHRhY2htZW50RWxlbWVudCgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc0hlYWRpbmcoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNMaW5rKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc0xpbmsp
OyB9CisgICAgYm9vbCBpc0ltYWdlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJp
YnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc0ltYWdlKTsgfQorICAgIGJvb2wgaXNJbWFnZU1h
cCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc05hdGl2ZUlt
YWdlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzSW1hZ2VC
dXR0b24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNQYXNz
d29yZEZpZWxkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlz
Q29udGFpbmVkQnlQYXNzd29yZEZpZWxkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7
IH0KKyAgICBBWENvcmVPYmplY3QqIHBhc3N3b3JkRmllbGRPckNvbnRhaW5pbmdQYXNzd29yZEZp
ZWxkKCkgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIGJvb2wgaXNOYXRpdmVUZXh0
Q29udHJvbCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc1Nl
YXJjaEZpZWxkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlz
V2ViQXJlYSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc0No
ZWNrYm94KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzUmFk
aW9CdXR0b24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNO
YXRpdmVMaXN0Qm94KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29s
IGlzTGlzdEJveCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBp
c0xpc3RCb3hPcHRpb24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJv
b2wgaXNBdHRhY2htZW50KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZh
bHVlKEFYUHJvcGVydHlOYW1lOjpJc0F0dGFjaG1lbnQpOyB9CisgICAgYm9vbCBpc01lZGlhVGlt
ZWxpbmUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNNZW51
UmVsYXRlZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc01l
bnUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNNZW51QmFy
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzTWVudUJ1dHRv
bigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc01lbnVJdGVt
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzRmlsZVVwbG9h
ZEJ1dHRvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFBy
b3BlcnR5TmFtZTo6SXNGaWxlVXBsb2FkQnV0dG9uKTsgfQorICAgIGJvb2wgaXNJbnB1dEltYWdl
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzUHJvZ3Jlc3NJ
bmRpY2F0b3IoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNT
bGlkZXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNTbGlk
ZXJUaHVtYigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc0lu
cHV0U2xpZGVyKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlz
Q29udHJvbCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc0xh
YmVsKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzTGlzdCgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc1RhYmxlKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzRGF0YVRhYmxlKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzVGFibGVSb3coKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNUYWJsZUNvbHVtbigpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc1RhYmxlQ2VsbCgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc0ZpZWxkc2V0KCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzR3JvdXAoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNBUklBVHJlZUdyaWRSb3coKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNJbWFnZU1hcExpbmso
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5h
bWU6OklzSW1hZ2VNYXBMaW5rKTsgfQorICAgIGJvb2wgaXNNZW51TGlzdCgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc01lbnVMaXN0UG9wdXAoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNNZW51TGlzdE9wdGlvbigpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc1NwaW5CdXR0b24oKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNOYXRpdmVTcGluQnV0
dG9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzU3BpbkJ1
dHRvblBhcnQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNN
b2NrT2JqZWN0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlz
TWVkaWFDb250cm9sTGFiZWwoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRl
VmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzTWVkaWFDb250cm9sTGFiZWwpOyB9CisgICAgYm9vbCBp
c01lZGlhT2JqZWN0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29s
IGlzU3dpdGNoKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlz
VG9nZ2xlQnV0dG9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29s
IGlzVGV4dENvbnRyb2woKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJv
b2wgaXNBUklBVGV4dENvbnRyb2woKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQor
ICAgIGJvb2wgaXNOb25OYXRpdmVUZXh0Q29udHJvbCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgYm9vbCBpc1RhYkxpc3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBm
YWxzZTsgfQorICAgIGJvb2wgaXNUYWJJdGVtKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICBib29sIGlzUmFkaW9Hcm91cCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgYm9vbCBpc0NvbWJvQm94KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICBib29sIGlzVHJlZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRy
aWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNUcmVlKTsgfQorICAgIGJvb2wgaXNUcmVlR3Jp
ZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc1RyZWVJdGVt
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlO
YW1lOjpJc1RyZWVJdGVtKTsgfQorICAgIGJvb2wgaXNTY3JvbGxiYXIoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzU2Nyb2xsYmFy
KTsgfQorICAgIGJvb2wgaXNCdXR0b24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsg
fQorICAgIGJvb2wgaXNMaXN0SXRlbSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9
CisgICAgYm9vbCBpc0NoZWNrYm94T3JSYWRpbygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgYm9vbCBpc1Njcm9sbFZpZXcoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBm
YWxzZTsgfQorICAgIGJvb2wgaXNDYW52YXMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxz
ZTsgfQorICAgIGJvb2wgaXNQb3BVcEJ1dHRvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgYm9vbCBpc0Jsb2NrcXVvdGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBm
YWxzZTsgfQorICAgIGJvb2wgaXNMYW5kbWFyaygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgYm9vbCBpc0NvbG9yV2VsbCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgYm9vbCBpc1JhbmdlQ29udHJvbCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgYm9vbCBpc01ldGVyKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICBib29sIGlzU3BsaXR0ZXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxz
ZTsgfQorICAgIGJvb2wgaXNUb29sYmFyKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7
IH0KKyAgICBib29sIGlzU3R5bGVGb3JtYXRHcm91cCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgYm9vbCBpc0ZpZ3VyZUVsZW1lbnQoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNLZXlib2FyZEZvY3VzYWJsZSgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc1N1bW1hcnkoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNPdXRwdXQoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBmYWxzZTsgfQorCisgICAgYm9vbCBpc0NoZWNrZWQoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNFbmFibGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzU2VsZWN0ZWQoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNGb2N1c2VkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICBib29sIGlzSG92ZXJlZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgYm9vbCBpc0luZGV0ZXJtaW5hdGUoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNMb2FkZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBmYWxzZTsgfQorICAgIGJvb2wgaXNNdWx0aVNlbGVjdGFibGUoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNPblNjcmVlbigpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc09mZlNjcmVlbigpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuICFpc09uU2NyZWVuKCk7IH0KKyAgICBib29sIGlzUHJlc3NlZCgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc1VudmlzaXRlZCgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc1Zpc2l0ZWQoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNSZXF1aXJlZCgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBzdXBwb3J0c1JlcXVpcmVkQXR0cmlidXRlKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzTGlua2VkKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzRXhwYW5kZWQoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNWaXNpYmxlKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzQ29sbGFwc2VkKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2b2lkIHNldElzRXhwYW5kZWQoYm9vbCkg
b3ZlcnJpZGUgeyB9CisgICAgRmxvYXRSZWN0IHJlbGF0aXZlRnJhbWUoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiByZWN0QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OlJlbGF0aXZlRnJh
bWUpOyB9CisgICAgRmxvYXRSZWN0IGNvbnZlcnRGcmFtZVRvU3BhY2UoY29uc3QgRmxvYXRSZWN0
JiwgQWNjZXNzaWJpbGl0eUNvbnZlcnNpb25TcGFjZSkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
RmxvYXRSZWN0KCk7IH0KKworICAgIGJvb2wgaXNTZWxlY3RlZE9wdGlvbkFjdGl2ZSgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICBib29sIGhhc0JvbGRGb250KCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGhhc0l0YWxpY0ZvbnQoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaGFzTWlzc3BlbGxpbmco
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIFJlZlB0cjxSYW5nZT4gZ2V0
TWlzc3BlbGxpbmdSYW5nZShSZWZQdHI8UmFuZ2U+IGNvbnN0JiwgQWNjZXNzaWJpbGl0eVNlYXJj
aERpcmVjdGlvbikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIGJvb2wg
aGFzUGxhaW5UZXh0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29s
IGhhc1NhbWVGb250KFJlbmRlck9iamVjdCopIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNl
OyB9CisgICAgYm9vbCBoYXNTYW1lRm9udENvbG9yKFJlbmRlck9iamVjdCopIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBoYXNTYW1lU3R5bGUoUmVuZGVyT2JqZWN0
KikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzU3RhdGljVGV4
dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBoYXNVbmRlcmxp
bmUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaGFzSGlnaGxp
Z2h0aW5nKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIGJvb2wgc3Vw
cG9ydHNEYXRldGltZUF0dHJpYnV0ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9
CisgICAgY29uc3QgQXRvbVN0cmluZyYgZGF0ZXRpbWVBdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIG51bGxBdG9tKCk7IH0KKworICAgIGJvb2wgY2FuU2V0Rm9jdXNBdHRy
aWJ1dGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgY2FuU2V0
VGV4dFJhbmdlQXR0cmlidXRlcygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Cisg
ICAgYm9vbCBjYW5TZXRWYWx1ZUF0dHJpYnV0ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgYm9vbCBjYW5TZXROdW1lcmljVmFsdWUoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBmYWxzZTsgfQorICAgIGJvb2wgY2FuU2V0U2VsZWN0ZWRBdHRyaWJ1dGUoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgY2FuU2V0U2VsZWN0ZWRDaGlsZHJl
bkF0dHJpYnV0ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBj
YW5TZXRFeHBhbmRlZEF0dHJpYnV0ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9
CisKKyAgICBFbGVtZW50KiBlbGVtZW50KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0
cjsgfQorICAgIE5vZGUqIG5vZGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9
CisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG51
bGxwdHI7IH0KKworICAgIGJvb2wgYWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNBY2Nlc3Np
YmlsaXR5SWdub3JlZCk7IH0KKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0SW5jbHVzaW9uIGRlZmF1
bHRPYmplY3RJbmNsdXNpb24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBBY2Nlc3NpYmlsaXR5
T2JqZWN0SW5jbHVzaW9uOjpEZWZhdWx0QmVoYXZpb3I7IH0KKyAgICBib29sIGFjY2Vzc2liaWxp
dHlJc0lnbm9yZWRCeURlZmF1bHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQor
CisgICAgYm9vbCBpc1Nob3dpbmdWYWxpZGF0aW9uTWVzc2FnZSgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gU3RyaW5nKCk7IH0KKworICAgIHVuc2lnbmVkIGJsb2NrcXVvdGVMZXZl
bCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0KKyAgICBpbnQgaGVhZGluZ0xldmVsKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gMDsgfQorICAgIGludCB0YWJsZUxldmVsKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gMDsgfQorICAgIEFjY2Vzc2liaWxpdHlCdXR0b25TdGF0ZSBjaGVj
a2JveE9yUmFkaW9WYWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEFjY2Vzc2liaWxpdHlC
dXR0b25TdGF0ZTo6T2ZmOyB9CisgICAgU3RyaW5nIHZhbHVlRGVzY3JpcHRpb24oKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBTdHJpbmcoKTsgfQorICAgIGZsb2F0IHZhbHVlRm9yUmFuZ2UoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiAwOyB9CisgICAgZmxvYXQgbWF4VmFsdWVGb3JSYW5nZSgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0KKyAgICBmbG9hdCBtaW5WYWx1ZUZvclJhbmdl
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gMDsgfQorICAgIGZsb2F0IHN0ZXBWYWx1ZUZvclJh
bmdlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gMDsgfQorICAgIEFYQ29yZU9iamVjdCogc2Vs
ZWN0ZWRSYWRpb0J1dHRvbigpIG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICBBWENv
cmVPYmplY3QqIHNlbGVjdGVkVGFiSXRlbSgpIG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0K
KyAgICBBWENvcmVPYmplY3QqIHNlbGVjdGVkTGlzdEl0ZW0oKSBvdmVycmlkZSB7IHJldHVybiBu
dWxscHRyOyB9CisgICAgaW50IGxheW91dENvdW50KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
MDsgfQorICAgIGRvdWJsZSBlc3RpbWF0ZWRMb2FkaW5nUHJvZ3Jlc3MoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiAwOyB9CisKKyAgICBib29sIHN1cHBvcnRzQVJJQU93bnMoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNBY3RpdmVEZXNjZW5kYW50T2ZGb2N1
c2VkQ29udGFpbmVyKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2b2lk
IGFyaWFBY3RpdmVEZXNjZW5kYW50UmVmZXJlbmNpbmdFbGVtZW50cyhBY2Nlc3NpYmlsaXR5Q2hp
bGRyZW5WZWN0b3ImKSBjb25zdCBvdmVycmlkZSB7IH0KKyAgICB2b2lkIGFyaWFDb250cm9sc0Vs
ZW1lbnRzKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYpIGNvbnN0IG92ZXJyaWRlIHsgfQor
ICAgIHZvaWQgYXJpYUNvbnRyb2xzUmVmZXJlbmNpbmdFbGVtZW50cyhBY2Nlc3NpYmlsaXR5Q2hp
bGRyZW5WZWN0b3ImKSBjb25zdCBvdmVycmlkZSB7IH0KKyAgICB2b2lkIGFyaWFEZXNjcmliZWRC
eUVsZW1lbnRzKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYpIGNvbnN0IG92ZXJyaWRlIHsg
fQorICAgIHZvaWQgYXJpYURlc2NyaWJlZEJ5UmVmZXJlbmNpbmdFbGVtZW50cyhBY2Nlc3NpYmls
aXR5Q2hpbGRyZW5WZWN0b3ImKSBjb25zdCBvdmVycmlkZSB7IH0KKyAgICB2b2lkIGFyaWFEZXRh
aWxzRWxlbWVudHMoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJikgY29uc3Qgb3ZlcnJpZGUg
eyB9CisgICAgdm9pZCBhcmlhRGV0YWlsc1JlZmVyZW5jaW5nRWxlbWVudHMoQWNjZXNzaWJpbGl0
eUNoaWxkcmVuVmVjdG9yJikgY29uc3Qgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCBhcmlhRXJyb3JN
ZXNzYWdlRWxlbWVudHMoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJikgY29uc3Qgb3ZlcnJp
ZGUgeyB9CisgICAgdm9pZCBhcmlhRXJyb3JNZXNzYWdlUmVmZXJlbmNpbmdFbGVtZW50cyhBY2Nl
c3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImKSBjb25zdCBvdmVycmlkZSB7IH0KKyAgICB2b2lkIGFy
aWFGbG93VG9FbGVtZW50cyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImKSBjb25zdCBvdmVy
cmlkZSB7IH0KKyAgICB2b2lkIGFyaWFGbG93VG9SZWZlcmVuY2luZ0VsZW1lbnRzKEFjY2Vzc2li
aWxpdHlDaGlsZHJlblZlY3RvciYpIGNvbnN0IG92ZXJyaWRlIHsgfQorICAgIHZvaWQgYXJpYUxh
YmVsbGVkQnlFbGVtZW50cyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImKSBjb25zdCBvdmVy
cmlkZSB7IH0KKyAgICB2b2lkIGFyaWFMYWJlbGxlZEJ5UmVmZXJlbmNpbmdFbGVtZW50cyhBY2Nl
c3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImKSBjb25zdCBvdmVycmlkZSB7IH0KKyAgICB2b2lkIGFy
aWFPd25zRWxlbWVudHMoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJikgY29uc3Qgb3ZlcnJp
ZGUgeyB9CisgICAgdm9pZCBhcmlhT3duc1JlZmVyZW5jaW5nRWxlbWVudHMoQWNjZXNzaWJpbGl0
eUNoaWxkcmVuVmVjdG9yJikgY29uc3Qgb3ZlcnJpZGUgeyB9CisKKyAgICBib29sIGhhc1BvcHVw
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBTdHJpbmcgcG9wdXBWYWx1
ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFN0cmluZygpOyB9CisgICAgYm9vbCBoYXNEYXRh
bGlzdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBzdXBwb3J0
c0hhc1BvcHVwKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIHBy
ZXNzZWRJc1ByZXNlbnQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJv
b2wgYXJpYUlzTXVsdGlsaW5lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICBTdHJpbmcgaW52YWxpZFN0YXR1cygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFN0cmluZygp
OyB9CisgICAgYm9vbCBzdXBwb3J0c1ByZXNzZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBm
YWxzZTsgfQorICAgIGJvb2wgc3VwcG9ydHNFeHBhbmRlZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIGZhbHNlOyB9CisgICAgYm9vbCBzdXBwb3J0c0NoZWNrZWQoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBmYWxzZTsgfQorICAgIEFjY2Vzc2liaWxpdHlTb3J0RGlyZWN0aW9uIHNvcnREaXJl
Y3Rpb24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBBY2Nlc3NpYmlsaXR5U29ydERpcmVjdGlv
bjo6Tm9uZTsgfQorICAgIGJvb2wgY2FudmFzSGFzRmFsbGJhY2tDb250ZW50KCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIHN1cHBvcnRzUmFuZ2VWYWx1ZSgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgY29uc3QgQXRvbVN0cmluZyYgaWRl
bnRpZmllckF0dHJpYnV0ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG51bGxBdG9tKCk7IH0K
KyAgICBjb25zdCBBdG9tU3RyaW5nJiBsaW5rUmVsVmFsdWUoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBudWxsQXRvbSgpOyB9CisgICAgdm9pZCBjbGFzc0xpc3QoVmVjdG9yPFN0cmluZz4mKSBj
b25zdCBvdmVycmlkZSB7IH0KKyAgICBTdHJpbmcgcm9sZURlc2NyaXB0aW9uKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gU3RyaW5nKCk7IH0KKyAgICBBY2Nlc3NpYmlsaXR5Q3VycmVudFN0YXRl
IGN1cnJlbnRTdGF0ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEFjY2Vzc2liaWxpdHlDdXJy
ZW50U3RhdGU6OkZhbHNlOyB9CisgICAgU3RyaW5nIGN1cnJlbnRWYWx1ZSgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIFN0cmluZygpOyB9CisgICAgYm9vbCBzdXBwb3J0c0N1cnJlbnQoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGNvbnN0IFN0cmluZyBrZXlTaG9ydGN1
dHNWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFN0cmluZygpOyB9CisKKyAgICAvLyBU
aGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiB0aGUgb2JqZWN0IHNob3VsZCBiZSBpZ25vcmVkIHdoZW4g
dGhlcmUncyBhIG1vZGFsIGRpYWxvZyBkaXNwbGF5ZWQuCisgICAgYm9vbCBpZ25vcmVkRnJvbU1v
ZGFsUHJlc2VuY2UoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wg
aXNNb2RhbERlc2NlbmRhbnQoTm9kZSopIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9
CisgICAgYm9vbCBpc01vZGFsTm9kZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9
CisKKyAgICBib29sIHN1cHBvcnRzU2V0U2l6ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgYm9vbCBzdXBwb3J0c1Bvc0luU2V0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICBpbnQgc2V0U2l6ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIDA7
IH0KKyAgICBpbnQgcG9zSW5TZXQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAwOyB9CisKKyAg
ICBib29sIHN1cHBvcnRzQVJJQURyb3BwaW5nKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICBib29sIHN1cHBvcnRzQVJJQURyYWdnaW5nKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzQVJJQUdyYWJiZWQoKSBvdmVycmlkZSB7IHJldHVy
biBmYWxzZTsgfQorICAgIHZvaWQgc2V0QVJJQUdyYWJiZWQoYm9vbCkgb3ZlcnJpZGUgeyB9Cisg
ICAgVmVjdG9yPFN0cmluZz4gZGV0ZXJtaW5lQVJJQURyb3BFZmZlY3RzKCkgb3ZlcnJpZGUgeyBy
ZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsgfQorCisgICAgQVhDb3JlT2JqZWN0KiBhY2Nlc3NpYmls
aXR5SGl0VGVzdChjb25zdCBJbnRQb2ludCYpIGNvbnN0IG92ZXJyaWRlOworICAgIEFYQ29yZU9i
amVjdCogZWxlbWVudEFjY2Vzc2liaWxpdHlIaXRUZXN0KGNvbnN0IEludFBvaW50JikgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQorCisgICAgQVhDb3JlT2JqZWN0KiBmb2N1c2Vk
VUlFbGVtZW50KCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBBWENvcmVPYmplY3QqIGZpcnN0Q2hp
bGQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9CisgICAgQVhDb3JlT2JqZWN0
KiBsYXN0Q2hpbGQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9CisgICAgQVhD
b3JlT2JqZWN0KiBwcmV2aW91c1NpYmxpbmcoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBudWxs
cHRyOyB9CisgICAgQVhDb3JlT2JqZWN0KiBuZXh0U2libGluZygpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIG51bGxwdHI7IH0KKyAgICBBWENvcmVPYmplY3QqIG5leHRTaWJsaW5nVW5pZ25vcmVk
KGludCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIEFYQ29yZU9iamVj
dCogcHJldmlvdXNTaWJsaW5nVW5pZ25vcmVkKGludCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
bnVsbHB0cjsgfQorICAgIEFYQ29yZU9iamVjdCogcGFyZW50T2JqZWN0KCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIEFYQ29yZU9iamVjdCogcGFyZW50T2JqZWN0VW5p
Z25vcmVkKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgQVhDb3JlT2JqZWN0KiBwYXJlbnRPYmplY3RJ
ZkV4aXN0cygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICB2b2lkIGZp
bmRNYXRjaGluZ09iamVjdHMoQWNjZXNzaWJpbGl0eVNlYXJjaENyaXRlcmlhKiwgQWNjZXNzaWJp
bGl0eUNoaWxkcmVuVmVjdG9yJikgb3ZlcnJpZGUgeyB9CisgICAgYm9vbCBpc0Rlc2NlbmRhbnRP
ZkJhcnJlblBhcmVudCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9v
bCBpc0Rlc2NlbmRhbnRPZlJvbGUoQWNjZXNzaWJpbGl0eVJvbGUpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIGZhbHNlOyB9CisKKyAgICBWZWN0b3I8UmVmUHRyPFJhbmdlPj4gZmluZFRleHRSYW5n
ZXMoQWNjZXNzaWJpbGl0eVNlYXJjaFRleHRDcml0ZXJpYSBjb25zdCYpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIFZlY3RvcjxSZWZQdHI8UmFuZ2U+PigpOyB9CisgICAgVmVjdG9yPFN0cmluZz4g
cGVyZm9ybVRleHRPcGVyYXRpb24oQWNjZXNzaWJpbGl0eVRleHRPcGVyYXRpb24gY29uc3QmKSBv
dmVycmlkZSB7IHJldHVybiBWZWN0b3I8U3RyaW5nPigpOyB9CisKKyAgICBBWENvcmVPYmplY3Qq
IG9ic2VydmFibGVPYmplY3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9Cisg
ICAgdm9pZCBsaW5rZWRVSUVsZW1lbnRzKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYpIGNv
bnN0IG92ZXJyaWRlIHsgfQorICAgIEFYQ29yZU9iamVjdCogdGl0bGVVSUVsZW1lbnQoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9CisgICAgYm9vbCBleHBvc2VzVGl0bGVVSUVs
ZW1lbnQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIEFYQ29yZU9iamVj
dCogY29ycmVzcG9uZGluZ0xhYmVsRm9yQ29udHJvbEVsZW1lbnQoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBudWxscHRyOyB9CisgICAgQVhDb3JlT2JqZWN0KiBjb3JyZXNwb25kaW5nQ29udHJv
bEZvckxhYmVsRWxlbWVudCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAg
ICBBWENvcmVPYmplY3QqIHNjcm9sbEJhcihBY2Nlc3NpYmlsaXR5T3JpZW50YXRpb24pIG92ZXJy
aWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KKworICAgIEFjY2Vzc2liaWxpdHlSb2xlIGFyaWFSb2xl
QXR0cmlidXRlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gQWNjZXNzaWJpbGl0eVJvbGU6OlVu
a25vd247IH0KKyAgICBib29sIGlzUHJlc2VudGF0aW9uYWxDaGlsZE9mQXJpYVJvbGUoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgYXJpYVJvbGVIYXNQcmVzZW50
YXRpb25hbENoaWxkcmVuKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBi
b29sIGluaGVyaXRzUHJlc2VudGF0aW9uYWxSb2xlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
ZmFsc2U7IH0KKworICAgIHZvaWQgYWNjZXNzaWJpbGl0eVRleHQoVmVjdG9yPEFjY2Vzc2liaWxp
dHlUZXh0PiYpIGNvbnN0IG92ZXJyaWRlIHsgfQorICAgIFN0cmluZyBjb21wdXRlZExhYmVsKCkg
b3ZlcnJpZGUgeyByZXR1cm4gU3RyaW5nKCk7IH0KKworICAgIHZvaWQgc2V0QWNjZXNzaWJsZU5h
bWUoY29uc3QgQXRvbVN0cmluZyYpIG92ZXJyaWRlIHsgfQorICAgIGJvb2wgaGFzQXR0cmlidXRl
c1JlcXVpcmVkRm9ySW5jbHVzaW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0K
KworICAgIFN0cmluZyBhY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb24oKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBTdHJpbmcoKTsgfQorICAgIFN0cmluZyB0aXRsZSgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIFN0cmluZygpOyB9CisgICAgU3RyaW5nIGhlbHBUZXh0KCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gU3RyaW5nKCk7IH0KKworICAgIGJvb2wgaXNBUklBU3RhdGljVGV4dCgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgU3RyaW5nIHN0cmluZ1ZhbHVlKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gU3RyaW5nKCk7IH0KKyAgICBTdHJpbmcgdGV4dFVuZGVyRWxl
bWVudChBY2Nlc3NpYmlsaXR5VGV4dFVuZGVyRWxlbWVudE1vZGUgPSBBY2Nlc3NpYmlsaXR5VGV4
dFVuZGVyRWxlbWVudE1vZGUoKSkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gU3RyaW5nKCk7IH0K
KyAgICBTdHJpbmcgdGV4dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFN0cmluZygpOyB9Cisg
ICAgaW50IHRleHRMZW5ndGgoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAwOyB9CisgICAgU3Ry
aW5nIGFyaWFMYWJlbGVkQnlBdHRyaWJ1dGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBTdHJp
bmcoKTsgfQorICAgIFN0cmluZyBhcmlhRGVzY3JpYmVkQnlBdHRyaWJ1dGUoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBTdHJpbmcoKTsgfQorICAgIGNvbnN0IFN0cmluZyBwbGFjZWhvbGRlclZh
bHVlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gU3RyaW5nKCk7IH0KKyAgICBib29sIGFjY2Vz
c2libGVOYW1lRGVyaXZlc0Zyb21Db250ZW50KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFs
c2U7IH0KKworICAgIFN0cmluZyBleHBhbmRlZFRleHRWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIFN0cmluZygpOyB9CisgICAgYm9vbCBzdXBwb3J0c0V4cGFuZGVkVGV4dFZhbHVlKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIHZvaWQgZWxlbWVudHNGcm9t
QXR0cmlidXRlKFZlY3RvcjxFbGVtZW50Kj4mLCBjb25zdCBRdWFsaWZpZWROYW1lJikgY29uc3Qg
b3ZlcnJpZGUgeyB9CisKKyAgICB2b2lkIGNvbG9yVmFsdWUoaW50JiwgaW50JiwgaW50JikgY29u
c3Qgb3ZlcnJpZGUgeyB9CisKKyAgICBBY2Nlc3NpYmlsaXR5Um9sZSByb2xlVmFsdWUoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5Um9sZT4oaW50QXR0
cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OlJvbGVWYWx1ZSkpOyB9CisKKyAgICBBWE9iamVj
dENhY2hlKiBheE9iamVjdENhY2hlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsg
fQorCisgICAgRWxlbWVudCogYW5jaG9yRWxlbWVudCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IG51bGxwdHI7IH0KKyAgICBib29sIHN1cHBvcnRzUHJlc3NBY3Rpb24oKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBmYWxzZTsgfQorICAgIEVsZW1lbnQqIGFjdGlvbkVsZW1lbnQoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9CisgICAgTGF5b3V0UmVjdCBib3VuZGluZ0JveFJl
Y3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBMYXlvdXRSZWN0KCk7IH0KKyAgICBJbnRSZWN0
IHBpeGVsU25hcHBlZEJvdW5kaW5nQm94UmVjdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIElu
dFJlY3QoKTsgfQorICAgIExheW91dFJlY3QgZWxlbWVudFJlY3QoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBMYXlvdXRSZWN0KCk7IH0KKyAgICBMYXlvdXRTaXplIHNpemUoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBMYXlvdXRTaXplKCk7IH0KKyAgICBJbnRQb2ludCBjbGlja1BvaW50KCkg
b3ZlcnJpZGUgeyByZXR1cm4gSW50UG9pbnQoKTsgfQorICAgIFBhdGggZWxlbWVudFBhdGgoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBQYXRoKCk7IH0KKyAgICBib29sIHN1cHBvcnRzUGF0aCgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICBUZXh0SXRlcmF0b3JCZWhh
dmlvciB0ZXh0SXRlcmF0b3JCZWhhdmlvckZvclRleHRSYW5nZSgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIFRleHRJdGVyYXRvckRlZmF1bHRCZWhhdmlvcjsgfQorICAgIFBsYWluVGV4dFJhbmdl
IHNlbGVjdGVkVGV4dFJhbmdlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gUGxhaW5UZXh0UmFu
Z2UoKTsgfQorICAgIHVuc2lnbmVkIHNlbGVjdGlvblN0YXJ0KCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gMDsgfQorICAgIHVuc2lnbmVkIHNlbGVjdGlvbkVuZCgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIDA7IH0KKworICAgIFVSTCB1cmwoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBVUkwo
KTsgfQorICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gVmlzaWJsZVNlbGVjdGlvbigpOyB9CisgICAgU3RyaW5nIHNlbGVjdGVkVGV4dCgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIFN0cmluZygpOyB9CisgICAgY29uc3QgQXRvbVN0cmluZyYg
YWNjZXNzS2V5KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbEF0b20oKTsgfQorICAgIGNv
bnN0IFN0cmluZyYgYWN0aW9uVmVyYigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG51bGxBdG9t
KCk7IH0KKyAgICBXaWRnZXQqIHdpZGdldCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG51bGxw
dHI7IH0KKyAgICBXaWRnZXQqIHdpZGdldEZvckF0dGFjaG1lbnRWaWV3KCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIFBhZ2UqIHBhZ2UoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBudWxscHRyOyB9CisgICAgRG9jdW1lbnQqIGRvY3VtZW50KCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIEZyYW1lVmlldyogZG9jdW1lbnRGcmFtZVZpZXco
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9CisgICAgRnJhbWUqIGZyYW1lKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIEZyYW1lKiBtYWluRnJhbWUo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9CisgICAgRG9jdW1lbnQqIHRvcERv
Y3VtZW50KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIFNjcm9sbFZp
ZXcqIHNjcm9sbFZpZXdBbmNlc3RvcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7
IH0KKyAgICBTdHJpbmcgbGFuZ3VhZ2UoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBTdHJpbmco
KTsgfQorICAgIHVuc2lnbmVkIGhpZXJhcmNoaWNhbExldmVsKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gMDsgfQorCisgICAgdm9pZCBzZXRGb2N1c2VkKGJvb2wpIG92ZXJyaWRlIHsgfQorICAg
IHZvaWQgc2V0U2VsZWN0ZWRUZXh0KGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlIHsgfQorICAgIHZv
aWQgc2V0U2VsZWN0ZWRUZXh0UmFuZ2UoY29uc3QgUGxhaW5UZXh0UmFuZ2UmKSBvdmVycmlkZSB7
IH0KKyAgICB2b2lkIHNldFZhbHVlKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlIHsgfQorICAgIGJv
b2wgcmVwbGFjZVRleHRJblJhbmdlKGNvbnN0IFN0cmluZyYsIGNvbnN0IFBsYWluVGV4dFJhbmdl
Jikgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGluc2VydFRleHQoY29uc3Qg
U3RyaW5nJikgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIHZvaWQgc2V0VmFsdWUo
ZmxvYXQpIG92ZXJyaWRlIHsgfQorICAgIHZvaWQgc2V0U2VsZWN0ZWQoYm9vbCkgb3ZlcnJpZGUg
eyB9CisgICAgdm9pZCBzZXRTZWxlY3RlZFJvd3MoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9y
Jikgb3ZlcnJpZGUgeyB9CisKKyAgICB2b2lkIG1ha2VSYW5nZVZpc2libGUoY29uc3QgUGxhaW5U
ZXh0UmFuZ2UmKSBvdmVycmlkZSB7IH0KKyAgICBib29sIHByZXNzKCkgb3ZlcnJpZGUgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICBib29sIHBlcmZvcm1EZWZhdWx0QWN0aW9uKCkgb3ZlcnJpZGUgeyBy
ZXR1cm4gZmFsc2U7IH0KKworICAgIEFjY2Vzc2liaWxpdHlPcmllbnRhdGlvbiBvcmllbnRhdGlv
bigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEFjY2Vzc2liaWxpdHlPcmllbnRhdGlvbjo6VW5k
ZWZpbmVkOyB9CisgICAgdm9pZCBpbmNyZW1lbnQoKSBvdmVycmlkZSB7IH0KKyAgICB2b2lkIGRl
Y3JlbWVudCgpIG92ZXJyaWRlIHsgfQorCisgICAgdm9pZCBjaGlsZHJlbkNoYW5nZWQoKSBvdmVy
cmlkZSB7IH0KKyAgICB2b2lkIHRleHRDaGFuZ2VkKCkgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCB1
cGRhdGVBY2Nlc3NpYmlsaXR5Um9sZSgpIG92ZXJyaWRlIHsgfQorICAgIGNvbnN0IEFjY2Vzc2li
aWxpdHlDaGlsZHJlblZlY3RvciYgY2hpbGRyZW4oYm9vbCB1cGRhdGVDaGlsZHJlbklmTmVlZGVk
ID0gdHJ1ZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBhZGRDaGlsZHJlbigpIG92ZXJyaWRlIHsgfQor
ICAgIHZvaWQgYWRkQ2hpbGQoQVhDb3JlT2JqZWN0Kikgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCBp
bnNlcnRDaGlsZChBWENvcmVPYmplY3QqLCB1bnNpZ25lZCkgb3ZlcnJpZGUgeyB9CisKKyAgICBi
b29sIHNob3VsZElnbm9yZUF0dHJpYnV0ZVJvbGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBm
YWxzZTsgfQorCisgICAgYm9vbCBjYW5IYXZlQ2hpbGRyZW4oKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBmYWxzZTsgfQorICAgIGJvb2wgaGFzQ2hpbGRyZW4oKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBmYWxzZTsgfQorICAgIHZvaWQgdXBkYXRlQ2hpbGRyZW5JZk5lY2Vzc2FyeSgpIG92ZXJy
aWRlIHsgfQorICAgIHZvaWQgc2V0TmVlZHNUb1VwZGF0ZUNoaWxkcmVuKCkgb3ZlcnJpZGUgeyB9
CisgICAgdm9pZCBzZXROZWVkc1RvVXBkYXRlU3VidHJlZSgpIG92ZXJyaWRlIHsgfTsKKyAgICB2
b2lkIGNsZWFyQ2hpbGRyZW4oKSBvdmVycmlkZSB7IH0KKyAgICBib29sIG5lZWRzVG9VcGRhdGVD
aGlsZHJlbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdm9pZCBkZXRh
Y2hGcm9tUGFyZW50KCkgb3ZlcnJpZGUgeyB9CisgICAgYm9vbCBpc0RldGFjaGVkRnJvbVBhcmVu
dCgpIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICBib29sIGNhbkhhdmVTZWxlY3Rl
ZENoaWxkcmVuKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2b2lkIHNl
bGVjdGVkQ2hpbGRyZW4oQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJikgb3ZlcnJpZGUgeyB9
CisgICAgdm9pZCB2aXNpYmxlQ2hpbGRyZW4oQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJikg
b3ZlcnJpZGUgeyB9CisgICAgdm9pZCB0YWJDaGlsZHJlbihBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5W
ZWN0b3ImKSBvdmVycmlkZSB7IH0KKyAgICBib29sIHNob3VsZEZvY3VzQWN0aXZlRGVzY2VuZGFu
dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgQVhDb3JlT2JqZWN0KiBh
Y3RpdmVEZXNjZW5kYW50KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQorICAg
IHZvaWQgaGFuZGxlQWN0aXZlRGVzY2VuZGFudENoYW5nZWQoKSBvdmVycmlkZSB7IH0KKyAgICB2
b2lkIGhhbmRsZUFyaWFFeHBhbmRlZENoYW5nZWQoKSBvdmVycmlkZSB7IH0KKyAgICBib29sIGlz
RGVzY2VuZGFudE9mT2JqZWN0KGNvbnN0IEFYQ29yZU9iamVjdCopIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc0FuY2VzdG9yT2ZPYmplY3QoY29uc3QgQVhDb3Jl
T2JqZWN0KikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBBWENvcmVPYmpl
Y3QqIGZpcnN0QW5vbnltb3VzQmxvY2tDaGlsZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG51
bGxwdHI7IH0KKworICAgIGJvb2wgaGFzQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGNvbnN0IEF0b21TdHJpbmcmIGdl
dEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
bnVsbEF0b20oKTsgfQorICAgIGJvb2wgaGFzVGFnTmFtZShjb25zdCBRdWFsaWZpZWROYW1lJikg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIFZpc2libGVQb3NpdGlvblJh
bmdlIHZpc2libGVQb3NpdGlvblJhbmdlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gVmlzaWJs
ZVBvc2l0aW9uUmFuZ2UoKTsgfQorICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHZpc2libGVQb3Np
dGlvblJhbmdlRm9yTGluZSh1bnNpZ25lZCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gVmlzaWJs
ZVBvc2l0aW9uUmFuZ2UoKTsgfQorICAgIFJlZlB0cjxSYW5nZT4gZWxlbWVudFJhbmdlKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIFZpc2libGVQb3NpdGlvblJhbmdl
IHZpc2libGVQb3NpdGlvblJhbmdlRm9yVW5vcmRlcmVkUG9zaXRpb25zKGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IFZpc2libGVQb3NpdGlvblJhbmdlKCk7IH0KKyAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSBwb3Np
dGlvbk9mTGVmdFdvcmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJikgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2UoKTsgfQorICAgIFZpc2libGVQb3NpdGlvblJhbmdl
IHBvc2l0aW9uT2ZSaWdodFdvcmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJikgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2UoKTsgfQorICAgIFZpc2libGVQb3NpdGlv
blJhbmdlIGxlZnRMaW5lVmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9u
JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2UoKTsgfQorICAg
IFZpc2libGVQb3NpdGlvblJhbmdlIHJpZ2h0TGluZVZpc2libGVQb3NpdGlvblJhbmdlKGNvbnN0
IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFZpc2libGVQb3NpdGlv
blJhbmdlKCk7IH0KKyAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSBzZW50ZW5jZUZvclBvc2l0aW9u
KGNvbnN0IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFZpc2libGVQ
b3NpdGlvblJhbmdlKCk7IH0KKyAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSBwYXJhZ3JhcGhGb3JQ
b3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBW
aXNpYmxlUG9zaXRpb25SYW5nZSgpOyB9CisgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2Ugc3R5bGVS
YW5nZUZvclBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKCk7IH0KKyAgICBWaXNpYmxlUG9zaXRpb25SYW5n
ZSB2aXNpYmxlUG9zaXRpb25SYW5nZUZvclJhbmdlKGNvbnN0IFBsYWluVGV4dFJhbmdlJikgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2UoKTsgfQorICAgIFZpc2li
bGVQb3NpdGlvblJhbmdlIGxpbmVSYW5nZUZvclBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlv
biYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKCk7IH0KKwor
ICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2VGb3JQbGFpblRleHRSYW5nZShjb25zdCBQbGFpblRleHRS
YW5nZSYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KKworICAgIFN0cmluZyBz
dHJpbmdGb3JSYW5nZShSZWZQdHI8UmFuZ2U+KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBTdHJp
bmcoKTsgfQorICAgIEludFJlY3QgYm91bmRzRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29uc3Qg
VmlzaWJsZVBvc2l0aW9uUmFuZ2UmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBJbnRSZWN0KCk7
IH0KKyAgICBJbnRSZWN0IGJvdW5kc0ZvclJhbmdlKGNvbnN0IFJlZlB0cjxSYW5nZT4pIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIEludFJlY3QoKTsgfQorICAgIGludCBsZW5ndGhGb3JWaXNpYmxl
UG9zaXRpb25SYW5nZShjb25zdCBWaXNpYmxlUG9zaXRpb25SYW5nZSYpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIDA7IH0KKyAgICB2b2lkIHNldFNlbGVjdGVkVmlzaWJsZVBvc2l0aW9uUmFuZ2Uo
Y29uc3QgVmlzaWJsZVBvc2l0aW9uUmFuZ2UmKSBjb25zdCBvdmVycmlkZSB7IH0KKworICAgIFZp
c2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb25Gb3JCb3VuZHMoY29uc3QgSW50UmVjdCYsIEFj
Y2Vzc2liaWxpdHlWaXNpYmxlUG9zaXRpb25Gb3JCb3VuZHMpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIFZpc2libGVQb3NpdGlvbigpOyB9CisgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3Np
dGlvbkZvclBvaW50KGNvbnN0IEludFBvaW50JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gVmlz
aWJsZVBvc2l0aW9uKCk7IH0KKyAgICBWaXNpYmxlUG9zaXRpb24gbmV4dFZpc2libGVQb3NpdGlv
bihjb25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBWaXNpYmxl
UG9zaXRpb24oKTsgfQorICAgIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c1Zpc2libGVQb3NpdGlv
bihjb25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBWaXNpYmxl
UG9zaXRpb24oKTsgfQorICAgIFZpc2libGVQb3NpdGlvbiBuZXh0V29yZEVuZChjb25zdCBWaXNp
YmxlUG9zaXRpb24mKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsg
fQorICAgIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c1dvcmRTdGFydChjb25zdCBWaXNpYmxlUG9z
aXRpb24mKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsgfQorICAg
IFZpc2libGVQb3NpdGlvbiBuZXh0TGluZUVuZFBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlv
biYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOyB9CisgICAgVmlz
aWJsZVBvc2l0aW9uIHByZXZpb3VzTGluZVN0YXJ0UG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0
aW9uJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7IH0KKyAgICBW
aXNpYmxlUG9zaXRpb24gbmV4dFNlbnRlbmNlRW5kUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0
aW9uJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7IH0KKyAgICBW
aXNpYmxlUG9zaXRpb24gcHJldmlvdXNTZW50ZW5jZVN0YXJ0UG9zaXRpb24oY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7IH0K
KyAgICBWaXNpYmxlUG9zaXRpb24gbmV4dFBhcmFncmFwaEVuZFBvc2l0aW9uKGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOyB9
CisgICAgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzUGFyYWdyYXBoU3RhcnRQb3NpdGlvbihjb25z
dCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBWaXNpYmxlUG9zaXRp
b24oKTsgfQorICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb25Gb3JJbmRleCh1bnNp
Z25lZCwgYm9vbCAvKmxhc3RJbmRleE9LICovKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBWaXNp
YmxlUG9zaXRpb24oKTsgfQorCisgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkZv
ckluZGV4KGludCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7IH0K
KyAgICBpbnQgaW5kZXhGb3JWaXNpYmxlUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJikg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gMDsgfQorCisgICAgQVhDb3JlT2JqZWN0KiBhY2Nlc3Np
YmlsaXR5T2JqZWN0Rm9yUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJikgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIGludCBsaW5lRm9yUG9zaXRpb24oY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gMDsgfQorICAgIFBsYWlu
VGV4dFJhbmdlIHBsYWluVGV4dFJhbmdlRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29uc3QgVmlz
aWJsZVBvc2l0aW9uUmFuZ2UmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBQbGFpblRleHRSYW5n
ZSgpOyB9CisgICAgaW50IGluZGV4KGNvbnN0IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIDA7IH0KKworICAgIHZvaWQgbGluZUJyZWFrcyhWZWN0b3I8aW50PiYpIGNv
bnN0IG92ZXJyaWRlIHsgfQorICAgIFBsYWluVGV4dFJhbmdlIGRvQVhSYW5nZUZvckxpbmUodW5z
aWduZWQpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFBsYWluVGV4dFJhbmdlKCk7IH0KKyAgICBQ
bGFpblRleHRSYW5nZSBkb0FYUmFuZ2VGb3JQb3NpdGlvbihjb25zdCBJbnRQb2ludCYpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIFBsYWluVGV4dFJhbmdlKCk7IH0KKyAgICBQbGFpblRleHRSYW5n
ZSBkb0FYUmFuZ2VGb3JJbmRleCh1bnNpZ25lZCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gUGxh
aW5UZXh0UmFuZ2UoKTsgfQorICAgIFBsYWluVGV4dFJhbmdlIGRvQVhTdHlsZVJhbmdlRm9ySW5k
ZXgodW5zaWduZWQpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFBsYWluVGV4dFJhbmdlKCk7IH0K
KworICAgIFN0cmluZyBkb0FYU3RyaW5nRm9yUmFuZ2UoY29uc3QgUGxhaW5UZXh0UmFuZ2UmKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBTdHJpbmcoKTsgfQorICAgIEludFJlY3QgZG9BWEJvdW5k
c0ZvclJhbmdlKGNvbnN0IFBsYWluVGV4dFJhbmdlJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
SW50UmVjdCgpOyB9CisgICAgSW50UmVjdCBkb0FYQm91bmRzRm9yUmFuZ2VVc2luZ0NoYXJhY3Rl
ck9mZnNldChjb25zdCBQbGFpblRleHRSYW5nZSYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIElu
dFJlY3QoKTsgfQorCisgICAgdW5zaWduZWQgZG9BWExpbmVGb3JJbmRleCh1bnNpZ25lZCkgb3Zl
cnJpZGUgeyByZXR1cm4gMDsgfQorCisgICAgU3RyaW5nIGNvbXB1dGVkUm9sZVN0cmluZygpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIFN0cmluZygpOyB9CisKKyAgICAvLyBNU0FBCisgICAgU3Ry
aW5nIHN0cmluZ1ZhbHVlRm9yTVNBQSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFN0cmluZygp
OyB9CisgICAgU3RyaW5nIHN0cmluZ1JvbGVGb3JNU0FBKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gU3RyaW5nKCk7IH0KKyAgICBTdHJpbmcgbmFtZUZvck1TQUEoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBTdHJpbmcoKTsgfQorICAgIFN0cmluZyBkZXNjcmlwdGlvbkZvck1TQUEoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBTdHJpbmcoKTsgfQorICAgIEFjY2Vzc2liaWxpdHlSb2xlIHJv
bGVWYWx1ZUZvck1TQUEoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBBY2Nlc3NpYmlsaXR5Um9s
ZTo6VW5rbm93bjsgfQorCisgICAgU3RyaW5nIHBhc3N3b3JkRmllbGRWYWx1ZSgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIFN0cmluZygpOyB9CisgICAgYm9vbCBpc1ZhbHVlQXV0b2ZpbGxlZCgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc1ZhbHVlQXV0b2Zp
bGxBdmFpbGFibGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIEF1dG9G
aWxsQnV0dG9uVHlwZSB2YWx1ZUF1dG9maWxsQnV0dG9uVHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIEF1dG9GaWxsQnV0dG9uVHlwZTo6Tm9uZTsgfQorCisgICAgdm9pZCBhcmlhVHJlZVJv
d3MoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJikgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCBh
cmlhVHJlZUl0ZW1EaXNjbG9zZWRSb3dzKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYpIG92
ZXJyaWRlIHsgfQorICAgIHZvaWQgYXJpYVRyZWVJdGVtQ29udGVudChBY2Nlc3NpYmlsaXR5Q2hp
bGRyZW5WZWN0b3ImKSBvdmVycmlkZSB7IH0KKworICAgIGJvb2wgc3VwcG9ydHNMaXZlUmVnaW9u
KGJvb2wgPSB0cnVlKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wg
aXNJbnNpZGVMaXZlUmVnaW9uKGJvb2wgPSB0cnVlKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBm
YWxzZTsgfQorICAgIEFYQ29yZU9iamVjdCogbGl2ZVJlZ2lvbkFuY2VzdG9yKGJvb2wgPSB0cnVl
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9CisgICAgY29uc3QgU3RyaW5nIGxp
dmVSZWdpb25TdGF0dXMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBTdHJpbmcoKTsgfQorICAg
IGNvbnN0IFN0cmluZyBsaXZlUmVnaW9uUmVsZXZhbnQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBTdHJpbmcoKTsgfQorICAgIGJvb2wgbGl2ZVJlZ2lvbkF0b21pYygpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc0J1c3koKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBmYWxzZTsgfQorCisgICAgYm9vbCBoYXNDb250ZW50RWRpdGFibGVBdHRyaWJ1dGVTZXQo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorCisgICAgYm9vbCBzdXBwb3J0c1Jl
YWRPbmx5KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBTdHJpbmcgcmVh
ZE9ubHlWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFN0cmluZygpOyB9CisKKyAgICBi
b29sIHN1cHBvcnRzQXV0b0NvbXBsZXRlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7
IH0KKyAgICBTdHJpbmcgYXV0b0NvbXBsZXRlVmFsdWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBTdHJpbmcoKTsgfQorCisgICAgYm9vbCBzdXBwb3J0c0FSSUFBdHRyaWJ1dGVzKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIE9wdGlvblNldDxTcGVha0FzPiBzcGVh
a0FzUHJvcGVydHkoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBPcHRpb25TZXQ8U3BlYWtBcz4o
KTsgfQorCisgICAgdm9pZCBzY3JvbGxUb01ha2VWaXNpYmxlKCkgY29uc3Qgb3ZlcnJpZGUgeyB9
CisgICAgdm9pZCBzY3JvbGxUb01ha2VWaXNpYmxlV2l0aFN1YkZvY3VzKGNvbnN0IEludFJlY3Qm
KSBjb25zdCBvdmVycmlkZSB7IH0KKyAgICB2b2lkIHNjcm9sbFRvR2xvYmFsUG9pbnQoY29uc3Qg
SW50UG9pbnQmKSBjb25zdCBvdmVycmlkZSB7IH0KKworICAgIGJvb2wgc2Nyb2xsQnlQYWdlKFNj
cm9sbEJ5UGFnZURpcmVjdGlvbikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICBJbnRQb2ludCBzY3JvbGxQb3NpdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEludFBv
aW50KCk7IH0KKyAgICBJbnRTaXplIHNjcm9sbENvbnRlbnRzU2l6ZSgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIEludFNpemUoKTsgfQorICAgIEludFJlY3Qgc2Nyb2xsVmlzaWJsZUNvbnRlbnRS
ZWN0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gSW50UmVjdCgpOyB9CisgICAgdm9pZCBzY3Jv
bGxUb01ha2VWaXNpYmxlKGNvbnN0IFNjcm9sbFJlY3RUb1Zpc2libGVPcHRpb25zJikgY29uc3Qg
b3ZlcnJpZGUgeyB9CisKKyAgICBib29sIGxhc3RLbm93bklzSWdub3JlZFZhbHVlKCkgb3ZlcnJp
ZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2b2lkIHNldExhc3RLbm93bklzSWdub3JlZFZhbHVl
KGJvb2wpIG92ZXJyaWRlIHsgfQorCisgICAgdm9pZCBub3RpZnlJZklnbm9yZWRWYWx1ZUNoYW5n
ZWQoKSBvdmVycmlkZSB7IH0KKworICAgIGJvb2wgaXNNYXRoRWxlbWVudCgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc01hdGhGcmFjdGlvbigpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc01hdGhGZW5jZWQoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNNYXRoU3Vic2NyaXB0U3VwZXJz
Y3JpcHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNNYXRo
Um93KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzTWF0aFVu
ZGVyT3ZlcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc01h
dGhSb290KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzTWF0
aFNxdWFyZVJvb3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wg
aXNNYXRoVGV4dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBp
c01hdGhOdW1iZXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wg
aXNNYXRoT3BlcmF0b3IoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJv
b2wgaXNNYXRoRmVuY2VPcGVyYXRvcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9
CisgICAgYm9vbCBpc01hdGhTZXBhcmF0b3JPcGVyYXRvcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc01hdGhJZGVudGlmaWVyKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzTWF0aFRhYmxlKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzTWF0aFRhYmxlUm93KCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzTWF0aFRhYmxlQ2VsbCgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc01hdGhNdWx0aXNjcmlwdCgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc01hdGhUb2tlbigpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc01hdGhTY3JpcHRPYmpl
Y3QoQWNjZXNzaWJpbGl0eU1hdGhTY3JpcHRPYmplY3RUeXBlKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNNYXRoTXVsdGlzY3JpcHRPYmplY3QoQWNjZXNzaWJp
bGl0eU1hdGhNdWx0aXNjcmlwdE9iamVjdFR5cGUpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZh
bHNlOyB9CisKKyAgICBBWENvcmVPYmplY3QqIG1hdGhSYWRpY2FuZE9iamVjdCgpIG92ZXJyaWRl
IHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICBBWENvcmVPYmplY3QqIG1hdGhSb290SW5kZXhPYmpl
Y3QoKSBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9CisKKyAgICBBWENvcmVPYmplY3QqIG1h
dGhVbmRlck9iamVjdCgpIG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICBBWENvcmVP
YmplY3QqIG1hdGhPdmVyT2JqZWN0KCkgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQorCisg
ICAgQVhDb3JlT2JqZWN0KiBtYXRoTnVtZXJhdG9yT2JqZWN0KCkgb3ZlcnJpZGUgeyByZXR1cm4g
bnVsbHB0cjsgfQorICAgIEFYQ29yZU9iamVjdCogbWF0aERlbm9taW5hdG9yT2JqZWN0KCkgb3Zl
cnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQorCisgICAgQVhDb3JlT2JqZWN0KiBtYXRoQmFzZU9i
amVjdCgpIG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICBBWENvcmVPYmplY3QqIG1h
dGhTdWJzY3JpcHRPYmplY3QoKSBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9CisgICAgQVhD
b3JlT2JqZWN0KiBtYXRoU3VwZXJzY3JpcHRPYmplY3QoKSBvdmVycmlkZSB7IHJldHVybiBudWxs
cHRyOyB9CisKKyAgICBTdHJpbmcgbWF0aEZlbmNlZE9wZW5TdHJpbmcoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBTdHJpbmcoKTsgfQorICAgIFN0cmluZyBtYXRoRmVuY2VkQ2xvc2VTdHJpbmco
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBTdHJpbmcoKTsgfQorICAgIGludCBtYXRoTGluZVRo
aWNrbmVzcygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0KKyAgICBib29sIGlzQW5vbnlt
b3VzTWF0aE9wZXJhdG9yKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKworICAg
IHZvaWQgbWF0aFByZXNjcmlwdHMoQWNjZXNzaWJpbGl0eU1hdGhNdWx0aXNjcmlwdFBhaXJzJikg
b3ZlcnJpZGUgeyB9CisgICAgdm9pZCBtYXRoUG9zdHNjcmlwdHMoQWNjZXNzaWJpbGl0eU1hdGhN
dWx0aXNjcmlwdFBhaXJzJikgb3ZlcnJpZGUgeyB9CisKKyAgICBib29sIGlzQVhIaWRkZW4oKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNET01IaWRkZW4oKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNIaWRkZW4oKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorCisgICAgQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXIqIHdyYXBwZXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3dyYXBwZXIuZ2V0KCk7
IH0KKyAgICB2b2lkIHNldFdyYXBwZXIoQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqIHdyYXBw
ZXIpIG92ZXJyaWRlIHsgbV93cmFwcGVyID0gd3JhcHBlcjsgfQorCisgICAgdm9pZCBvdmVycmlk
ZUF0dGFjaG1lbnRQYXJlbnQoQVhDb3JlT2JqZWN0Kikgb3ZlcnJpZGUgeyB9CisKKyAgICBib29s
IGFjY2Vzc2liaWxpdHlJZ25vcmVBdHRhY2htZW50KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
ZmFsc2U7IH0KKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0SW5jbHVzaW9uIGFjY2Vzc2liaWxpdHlQ
bGF0Zm9ybUluY2x1ZGVzT2JqZWN0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gQWNjZXNzaWJp
bGl0eU9iamVjdEluY2x1c2lvbjo6RGVmYXVsdEJlaGF2aW9yOyB9CisKKyNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKQorICAgIGludCBhY2Nlc3NpYmlsaXR5UGFzc3dvcmRGaWVsZExlbmd0aCgpIG92
ZXJyaWRlIHsgcmV0dXJuIDA7IH0KKyAgICBib29sIGhhc1RvdWNoRXZlbnRMaXN0ZW5lcigpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc0lucHV0VHlwZVBvcHVw
QnV0dG9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyNlbmRpZgorCisgICAg
dm9pZCB1cGRhdGVCYWNraW5nU3RvcmUoKSBvdmVycmlkZTsKKworI2lmIFBMQVRGT1JNKENPQ09B
KQorICAgIGJvb2wgcHJldmVudEtleWJvYXJkRE9NRXZlbnREaXNwYXRjaCgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdm9pZCBzZXRQcmV2ZW50S2V5Ym9hcmRET01FdmVu
dERpc3BhdGNoKGJvb2wpIG92ZXJyaWRlIHsgfQorICAgIGJvb2wgZmlsZVVwbG9hZEJ1dHRvblJl
dHVybnNWYWx1ZUluVGl0bGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAg
IFN0cmluZyBzcGVlY2hIaW50QXR0cmlidXRlVmFsdWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBzdHJpbmdBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6U3BlZWNoSGludCk7IH0KKyAg
ICBTdHJpbmcgZGVzY3JpcHRpb25BdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIHN0cmluZ0F0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpEZXNjcmlwdGlvbik7IH0K
KyAgICBTdHJpbmcgaGVscFRleHRBdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIHN0cmluZ0F0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpIZWxwVGV4dCk7IH0KKyAg
ICBTdHJpbmcgdGl0bGVBdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0
cmluZ0F0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpUaXRsZSk7IH0KKyNlbmRpZgorCisj
aWYgUExBVEZPUk0oQ09DT0EpICYmICFQTEFURk9STShJT1NfRkFNSUxZKQorICAgIGJvb2wgY2Fy
ZXRCcm93c2luZ0VuYWJsZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAg
IHZvaWQgc2V0Q2FyZXRCcm93c2luZ0VuYWJsZWQoYm9vbCkgb3ZlcnJpZGUgeyB9CisjZW5kaWYK
KworICAgIEFYQ29yZU9iamVjdCogZm9jdXNhYmxlQW5jZXN0b3IoKSBvdmVycmlkZSB7IHJldHVy
biBudWxscHRyOyB9CisgICAgQVhDb3JlT2JqZWN0KiBlZGl0YWJsZUFuY2VzdG9yKCkgb3ZlcnJp
ZGUgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIEFYQ29yZU9iamVjdCogaGlnaGVzdEVkaXRhYmxl
QW5jZXN0b3IoKSBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9CisKKyAgICBjb25zdCBBY2Nl
c3NpYmlsaXR5U2Nyb2xsVmlldyogYW5jZXN0b3JBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldyhib29s
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9CisKKyAgICB2b2lkIHNldElzSWdu
b3JlZEZyb21QYXJlbnREYXRhKEFjY2Vzc2liaWxpdHlJc0lnbm9yZWRGcm9tUGFyZW50RGF0YSYp
IG92ZXJyaWRlIHsgfTsKKyAgICB2b2lkIGNsZWFySXNJZ25vcmVkRnJvbVBhcmVudERhdGEoKSBv
dmVycmlkZSB7IH0KKyAgICB2b2lkIHNldElzSWdub3JlZEZyb21QYXJlbnREYXRhRm9yQ2hpbGQo
QVhDb3JlT2JqZWN0Kikgb3ZlcnJpZGUgeyB9CisKKyAgICB2b2lkIHNldFRyZWVJZGVudGlmaWVy
KEFYSXNvbGF0ZWRUcmVlSUQpOworICAgIEFYSXNvbGF0ZWRUcmVlKiB0cmVlKCkgY29uc3Q7Cisg
ICAgdm9pZCBzZXRQYXJlbnQoQVhJRCk7CisgICAgdm9pZCBhcHBlbmRDaGlsZChBWElEKTsKK3By
aXZhdGU6CiAgICAgZW51bSBjbGFzcyBBWFByb3BlcnR5TmFtZSA6IHVpbnQ4X3QgewogICAgICAg
ICBOb25lID0gMCwKICAgICAgICAgSGVscFRleHQsCkBAIC02OCw1NCArNjU1LDEzIEBAIHB1Ymxp
YzoKICAgICAgICAgVGl0bGUsCiAgICAgfTsKIAotICAgIHN0YXRpYyBSZWY8QVhJc29sYXRlZFRy
ZWVOb2RlPiBjcmVhdGUoY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCYpOwotICAgIHZpcnR1YWwg
fkFYSXNvbGF0ZWRUcmVlTm9kZSgpOwotCi0gICAgQVhJRCBpZGVudGlmaWVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9pZGVudGlmaWVyOyB9Ci0gICAgCi0gICAgdm9pZCBzZXRQYXJlbnQoQVhJRCk7CiAg
ICAgQVhJRCBwYXJlbnQoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudDsgfQogCi0gICAgdm9pZCBh
cHBlbmRDaGlsZChBWElEKTsKLSAgICBjb25zdCBWZWN0b3I8QVhJRD4mIGNoaWxkcmVuKCkgY29u
c3QgeyByZXR1cm4gbV9jaGlsZHJlbjsgfTsKLQotICAgIEFYSXNvbGF0ZWRUcmVlKiB0cmVlKCkg
Y29uc3Q7CiAgICAgQVhJc29sYXRlZFRyZWVJRCB0cmVlSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0
dXJuIG1fdHJlZUlkZW50aWZpZXI7IH0KLSAgICB2b2lkIHNldFRyZWVJZGVudGlmaWVyKEFYSXNv
bGF0ZWRUcmVlSUQpOwogCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIqIHdyYXBwZXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3dyYXBwZXIu
Z2V0KCk7IH0KLSAgICB2b2lkIHNldFdyYXBwZXIoQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIq
IHdyYXBwZXIpIHsgbV93cmFwcGVyID0gd3JhcHBlcjsgfQotI2VuZGlmCi0KLXByb3RlY3RlZDoK
ICAgICBBWElzb2xhdGVkVHJlZU5vZGUoKSA9IGRlZmF1bHQ7Ci0KLXByaXZhdGU6Ci0gICAgQVhJ
c29sYXRlZFRyZWVOb2RlKGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3QmKTsKLSAgICB2b2lkIGlu
aXRpYWxpemVBdHRyaWJ1dGVEYXRhKGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3QmKTsKLQotICAg
IEFYQ29yZU9iamVjdCogYWNjZXNzaWJpbGl0eUhpdFRlc3QoY29uc3QgSW50UG9pbnQmKSBjb25z
dCBvdmVycmlkZTsKLSAgICB2b2lkIHVwZGF0ZUNoaWxkcmVuSWZOZWNlc3NhcnkoKSBvdmVycmlk
ZSB7IH0KLQotICAgIGJvb2wgaXNNZWRpYUNvbnRyb2xMYWJlbCgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNNZWRpYUNvbnRyb2xM
YWJlbCk7IH0KLSAgICBib29sIGlzQXR0YWNobWVudCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNBdHRhY2htZW50KTsgfQotICAg
IEFjY2Vzc2liaWxpdHlSb2xlIHJvbGVWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0
YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlSb2xlPihpbnRBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5
TmFtZTo6Um9sZVZhbHVlKSk7IH0KLSAgICBib29sIGlzTGluaygpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNMaW5rKTsgfQotICAg
IGJvb2wgaXNJbWFnZU1hcExpbmsoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmli
dXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzSW1hZ2VNYXBMaW5rKTsgfQotICAgIGJvb2wgaXNJ
bWFnZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3Bl
cnR5TmFtZTo6SXNJbWFnZSk7IH0KLSAgICBib29sIGlzRmlsZVVwbG9hZEJ1dHRvbigpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNG
aWxlVXBsb2FkQnV0dG9uKTsgfQotICAgIGJvb2wgYWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6
SXNBY2Nlc3NpYmlsaXR5SWdub3JlZCk7IH0KLSAgICBBWENvcmVPYmplY3QqIHBhcmVudE9iamVj
dEludGVyZmFjZVVuaWdub3JlZCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgaXNUcmVlKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1l
OjpJc1RyZWUpOyB9Ci0gICAgYm9vbCBpc1RyZWVJdGVtKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc1RyZWVJdGVtKTsgfQotICAg
IGJvb2wgaXNTY3JvbGxiYXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRl
VmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzU2Nyb2xsYmFyKTsgfQotICAgIEZsb2F0UmVjdCByZWxh
dGl2ZUZyYW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gcmVjdEF0dHJpYnV0ZVZhbHVlKEFY
UHJvcGVydHlOYW1lOjpSZWxhdGl2ZUZyYW1lKTsgfQotICAgIFN0cmluZyBzcGVlY2hIaW50QXR0
cmlidXRlVmFsdWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBzdHJpbmdBdHRyaWJ1dGVWYWx1
ZShBWFByb3BlcnR5TmFtZTo6U3BlZWNoSGludCk7IH0KLSAgICBTdHJpbmcgZGVzY3JpcHRpb25B
dHRyaWJ1dGVWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0cmluZ0F0dHJpYnV0ZVZh
bHVlKEFYUHJvcGVydHlOYW1lOjpEZXNjcmlwdGlvbik7IH0KLSAgICBTdHJpbmcgaGVscFRleHRB
dHRyaWJ1dGVWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0cmluZ0F0dHJpYnV0ZVZh
bHVlKEFYUHJvcGVydHlOYW1lOjpIZWxwVGV4dCk7IH0KLSAgICBTdHJpbmcgdGl0bGVBdHRyaWJ1
dGVWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0cmluZ0F0dHJpYnV0ZVZhbHVlKEFY
UHJvcGVydHlOYW1lOjpUaXRsZSk7IH0KLSAgICBBWENvcmVPYmplY3QqIGZvY3VzZWRVSUVsZW1l
bnQoKSBjb25zdCBvdmVycmlkZTsKKyAgICBBWElzb2xhdGVkVHJlZU5vZGUoY29uc3QgQVhDb3Jl
T2JqZWN0Jik7CisgICAgdm9pZCBpbml0aWFsaXplQXR0cmlidXRlRGF0YShjb25zdCBBWENvcmVP
YmplY3QmKTsKIAogICAgIHVzaW5nIEF0dHJpYnV0ZVZhbHVlVmFyaWFudCA9IFZhcmlhbnQ8c3Rk
OjpudWxscHRyX3QsIFN0cmluZywgYm9vbCwgaW50LCB1bnNpZ25lZCwgZG91YmxlLCBPcHRpb25h
bDxGbG9hdFJlY3Q+PjsKICAgICB2b2lkIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lLCBBdHRy
aWJ1dGVWYWx1ZVZhcmlhbnQmJiwgYm9vbCBzaG91bGRSZW1vdmUgPSBmYWxzZSk7CkBAIC0xMjgs
MTEgKzY3NCwxMiBAQCBwcml2YXRlOgogICAgIEZsb2F0UmVjdCByZWN0QXR0cmlidXRlVmFsdWUo
QVhQcm9wZXJ0eU5hbWUpIGNvbnN0OwogCiAgICAgQVhJRCBtX3BhcmVudDsKLSAgICBBWElEIG1f
aWRlbnRpZmllcjsKKyAgICBBWElEIG1faWQ7CiAgICAgYm9vbCBtX2luaXRpYWxpemVkIHsgZmFs
c2UgfTsKICAgICBBWElzb2xhdGVkVHJlZUlEIG1fdHJlZUlkZW50aWZpZXI7CiAgICAgUmVmUHRy
PEFYSXNvbGF0ZWRUcmVlPiBtX2NhY2hlZFRyZWU7Ci0gICAgVmVjdG9yPEFYSUQ+IG1fY2hpbGRy
ZW47CisgICAgVmVjdG9yPEFYSUQ+IG1fY2hpbGRyZW5JRHM7CisgICAgVmVjdG9yPFJlZlB0cjxB
WENvcmVPYmplY3Q+PiBtX2NoaWxkcmVuOwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgUmV0
YWluUHRyPFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyPiBtX3dyYXBwZXI7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BWE9iamVjdENhY2hlTWFjLm1t
IGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvQVhPYmplY3RDYWNoZU1hYy5tbQpp
bmRleCBjOWE4OTNiYzMwOTk2ZDk5ZmU0NWNiMWI3MjE5ZTM2YWM3M2EwZmRiLi5lYTRiZDVjZDk1
ZTkyMzViY2MyNzFjYmUzYWM2ZmE4ZjEzMzk2OTgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L21hYy9BWE9iamVjdENhY2hlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FYT2JqZWN0Q2FjaGVNYWMubW0KQEAgLTIzOCwxNyArMjM4
LDcgQEAgdm9pZCBBWE9iamVjdENhY2hlOjpkZXRhY2hXcmFwcGVyKEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIG9iaiwgQWNjZXNzaWJpbGl0eURldGFjaG0KICAgICBvYmotPnNldFdyYXBwZXIobnVsbHB0
cik7CiB9CiAKLSNpZiBFTkFCTEUoQUNDRVNTSUJJTElUWV9JU09MQVRFRF9UUkVFKQotdm9pZCBB
WE9iamVjdENhY2hlOjphc3NvY2lhdGVJc29sYXRlZFRyZWVOb2RlKEFjY2Vzc2liaWxpdHlPYmpl
Y3QmIG9iamVjdCwgQVhJc29sYXRlZFRyZWVOb2RlJiBub2RlLCBBWElzb2xhdGVkVHJlZUlEIHRy
ZWVJRCkKLXsKLSAgICBhdXRvIHdyYXBwZXIgPSBvYmplY3Qud3JhcHBlcigpOwotICAgIEFTU0VS
VCh3cmFwcGVyKTsKLSAgICB3cmFwcGVyLmlzb2xhdGVkVHJlZUlkZW50aWZpZXIgPSB0cmVlSUQ7
Ci0gICAgbm9kZS5zZXRXcmFwcGVyKHdyYXBwZXIpOwotfQotI2VuZGlmCi0KLXZvaWQgQVhPYmpl
Y3RDYWNoZTo6YXR0YWNoV3JhcHBlcihBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmopCit2b2lkIEFY
T2JqZWN0Q2FjaGU6OmF0dGFjaFdyYXBwZXIoQVhDb3JlT2JqZWN0KiBvYmopCiB7CiAgICAgUmV0
YWluUHRyPFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyPiB3cmFwcGVyID0gYWRvcHROUyhb
W1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFsbG9jXSBpbml0V2l0aEFjY2Vzc2liaWxp
dHlPYmplY3Q6b2JqXSk7CiAgICAgb2JqLT5zZXRXcmFwcGVyKHdyYXBwZXIuZ2V0KCkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXJCYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9X
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UuaAppbmRleCA4ODU4YmVhM2QwODdiMWJi
NjI2NWQ3ODdmZDg4MDU4ZDcxMjYyZmZjLi4wNWE0NGZlMjAyZWVmYTJkZmJkOTkzNWI1ZTJmYWY5
NDA4ZTgzZjVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9X
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UuaApAQCAt
NTEsMTQgKzUxLDExIEBAIGNsYXNzIFZpc2libGVQb3NpdGlvbjsKIH0KIAogQGludGVyZmFjZSBX
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UgOiBOU09iamVjdCB7Ci0gICAgV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU9iamVjdCogbV9vYmplY3Q7CisgICAgV2ViQ29yZTo6QVhDb3JlT2Jq
ZWN0KiBtX29iamVjdDsKICAgICBXZWJDb3JlOjpBWElEIF9pZGVudGlmaWVyOwotI2lmIEVOQUJM
RShBQ0NFU1NJQklMSVRZX0lTT0xBVEVEX1RSRUUpCi0gICAgUmVmUHRyPFdlYkNvcmU6OkFYSXNv
bGF0ZWRUcmVlTm9kZT4gbV9pc29sYXRlZFRyZWVOb2RlOwotI2VuZGlmCiB9Ci0gCi0tIChpZClp
bml0V2l0aEFjY2Vzc2liaWxpdHlPYmplY3Q6KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Qq
KWF4T2JqZWN0OworCistIChpZClpbml0V2l0aEFjY2Vzc2liaWxpdHlPYmplY3Q6KFdlYkNvcmU6
OkFYQ29yZU9iamVjdCopYXhPYmplY3Q7CiAKICNpZiBFTkFCTEUoQUNDRVNTSUJJTElUWV9JU09M
QVRFRF9UUkVFKQogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBSZWZQdHI8V2ViQ29y
ZTo6QVhJc29sYXRlZFRyZWVOb2RlPiBpc29sYXRlZFRyZWVOb2RlOwpAQCAtNjksNyArNjYsNyBA
QCBjbGFzcyBWaXNpYmxlUG9zaXRpb247CiAKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24p
IFdlYkNvcmU6OkFYSUQgaWRlbnRpZmllcjsKIAotLSAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9i
amVjdCopYWNjZXNzaWJpbGl0eU9iamVjdDsKKy0gKFdlYkNvcmU6OkFYQ29yZU9iamVjdCopYWNj
ZXNzaWJpbGl0eU9iamVjdDsKIC0gKEJPT0wpdXBkYXRlT2JqZWN0QmFja2luZ1N0b3JlOwogCiAv
LyBUaGlzIGNhbiBiZSBlaXRoZXIgYW4gQWNjZXNzaWJpbGl0eU9iamVjdCBvciBhbiBBWElzb2xh
dGVkVHJlZU5vZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFj
L1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZS5tbSBiL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZS5tbQppbmRl
eCBmYTg5YjZhZDk4MDkzYmRmN2ExODU3Zjk2N2IwNzAxMjlkYTYyNTM3Li5mMGZlYTIzOGYwMTAx
YTUzNmI0YTY3OTBhZjcyOWQzOTJiNGZhYTU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXJCYXNlLm1tCkBAIC0zMSw4ICszMSw2IEBACiAKICNpZiBFTkFCTEUoQUNDRVNTSUJJ
TElUWSkKIAotI2ltcG9ydCAiQVhJc29sYXRlZFRyZWUuaCIKLSNpbXBvcnQgIkFYSXNvbGF0ZWRU
cmVlTm9kZS5oIgogI2ltcG9ydCAiQVhPYmplY3RDYWNoZS5oIgogI2ltcG9ydCAiQWNjZXNzaWJp
bGl0eUFSSUFHcmlkUm93LmgiCiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5TGlzdC5oIgpAQCAtMjc1
LDIwICsyNzMsMTAgQEAgc3RhdGljIHZvaWQgYWRkQ2hpbGRUb0FycmF5KEFYQ29yZU9iamVjdCYg
Y2hpbGQsIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gYXJyYXkKICAgICAgICAgW2FycmF5Lmdl
dCgpIGFkZE9iamVjdDp3cmFwcGVyXTsKIH0KIAotI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZX0lT
T0xBVEVEX1RSRUUpCi1OU0FycmF5ICpjb252ZXJ0VG9OU0FycmF5KGNvbnN0IFZlY3RvcjxSZWZQ
dHI8V2ViQ29yZTo6QVhJc29sYXRlZFRyZWVOb2RlPj4mIGNoaWxkcmVuKQotewotICAgIE5TTXV0
YWJsZUFycmF5ICpyZXN1bHQgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFj
aXR5OmNoaWxkcmVuLnNpemUoKV07Ci0gICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuKQot
ICAgICAgICBhZGRDaGlsZFRvQXJyYXkoKmNoaWxkLCByZXN1bHQpOwotICAgIHJldHVybiBbcmVz
dWx0IGF1dG9yZWxlYXNlXTsKLX0KLSNlbmRpZgotCi1OU0FycmF5ICpjb252ZXJ0VG9OU0FycmF5
KGNvbnN0IFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJl
blZlY3RvciYgY2hpbGRyZW4pCitOU0FycmF5ICpjb252ZXJ0VG9OU0FycmF5KGNvbnN0IFdlYkNv
cmU6OkFYQ29yZU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBjaGlsZHJlbikK
IHsKICAgICBOU011dGFibGVBcnJheSAqcmVzdWx0ID0gW1tOU011dGFibGVBcnJheSBhbGxvY10g
aW5pdFdpdGhDYXBhY2l0eTpjaGlsZHJlbi5zaXplKCldOwotICAgIGZvciAoYXV0byYgY2hpbGQg
OiBjaGlsZHJlbikKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGNoaWxkIDogY2hpbGRyZW4pCiAgICAg
ICAgIGFkZENoaWxkVG9BcnJheSgqY2hpbGQsIHJlc3VsdCk7CiAgICAgcmV0dXJuIFtyZXN1bHQg
YXV0b3JlbGVhc2VdOwogfQpAQCAtMjk2LDExICsyODQsOCBAQCBOU0FycmF5ICpjb252ZXJ0VG9O
U0FycmF5KGNvbnN0IFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlD
aGlsZAogQGltcGxlbWVudGF0aW9uIFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZQog
CiBAc3ludGhlc2l6ZSBpZGVudGlmaWVyPV9pZGVudGlmaWVyOwotI2lmIEVOQUJMRShBQ0NFU1NJ
QklMSVRZX0lTT0xBVEVEX1RSRUUpCi1Ac3ludGhlc2l6ZSBpc29sYXRlZFRyZWVJZGVudGlmaWVy
PV9pc29sYXRlZFRyZWVJZGVudGlmaWVyOwotI2VuZGlmCiAKLS0gKGlkKWluaXRXaXRoQWNjZXNz
aWJpbGl0eU9iamVjdDooQWNjZXNzaWJpbGl0eU9iamVjdCopYXhPYmplY3QKKy0gKGlkKWluaXRX
aXRoQWNjZXNzaWJpbGl0eU9iamVjdDooQVhDb3JlT2JqZWN0KilheE9iamVjdAogewogICAgIGlm
ICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQogICAgICAgICByZXR1cm4gbmlsOwpAQCAtMzExLDQ2
ICsyOTYsMTQgQEAgTlNBcnJheSAqY29udmVydFRvTlNBcnJheShjb25zdCBXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGQKICAgICByZXR1cm4gc2VsZjsKIH0K
IAotI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZX0lTT0xBVEVEX1RSRUUpCi0tIChSZWZQdHI8V2Vi
Q29yZTo6QVhJc29sYXRlZFRyZWVOb2RlPilpc29sYXRlZFRyZWVOb2RlCi17Ci0gICAgUkVMRUFT
RV9BU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKLQotICAgIGlmICghX2lkZW50aWZpZXIpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKG1faXNvbGF0ZWRUcmVlTm9kZSkKLSAgICAg
ICAgcmV0dXJuIG1faXNvbGF0ZWRUcmVlTm9kZTsKLQotICAgIG1faXNvbGF0ZWRUcmVlTm9kZSA9
IEFYSXNvbGF0ZWRUcmVlOjpub2RlSW5UcmVlRm9ySUQoX2lzb2xhdGVkVHJlZUlkZW50aWZpZXIs
IF9pZGVudGlmaWVyKTsKLSAgICByZXR1cm4gbV9pc29sYXRlZFRyZWVOb2RlOwotfQotI2VuZGlm
Ci0KIC0gKHZvaWQpZGV0YWNoCiB7CiAgICAgbV9vYmplY3QgPSBudWxscHRyOwogICAgIF9pZGVu
dGlmaWVyID0gMDsKLQotI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZX0lTT0xBVEVEX1RSRUUpCi0g
ICAgbV9pc29sYXRlZFRyZWVOb2RlID0gbnVsbHB0cjsKLSAgICBfaXNvbGF0ZWRUcmVlSWRlbnRp
ZmllciA9IDA7Ci0jZW5kaWYKIH0KIAogLSAoQk9PTCl1cGRhdGVPYmplY3RCYWNraW5nU3RvcmUK
IHsKLSNpZiBFTkFCTEUoQUNDRVNTSUJJTElUWV9JU09MQVRFRF9UUkVFKQotICAgIGlmIChfQVhV
SUVsZW1lbnRSZXF1ZXN0U2VydmljZWRCeVNlY29uZGFyeUFYVGhyZWFkKCkpIHsKLSAgICAgICAg
UkVMRUFTRV9BU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKLSAgICAgICAgaWYgKGF1dG8gdHJlZU5v
ZGUgPSBzZWxmLmlzb2xhdGVkVHJlZU5vZGUpIHsKLSAgICAgICAgICAgIGlmIChhdXRvIHRyZWUg
PSB0cmVlTm9kZS0+dHJlZSgpKQotICAgICAgICAgICAgICAgIHRyZWUtPmFwcGx5UGVuZGluZ0No
YW5nZXMoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gX2lkZW50aWZpZXI7Ci0gICAgfQot
I2VuZGlmCi0gICAgCiAgICAgLy8gQ2FsbGluZyB1cGRhdGVCYWNraW5nU3RvcmUoKSBjYW4gaW52
YWxpZGF0ZSB0aGlzIGVsZW1lbnQgc28gc2VsZiBtdXN0IGJlIHJldGFpbmVkLgogICAgIC8vIElm
IGl0IGRvZXMgYmVjb21lIGludmFsaWRhdGVkLCBtX29iamVjdCB3aWxsIGJlIG5pbC4KICAgICBD
RlJldGFpbigoX19icmlkZ2UgQ0ZUeXBlUmVmKXNlbGYpOwpAQCAtMzcxLDcgKzMyNCw3IEBAIE5T
QXJyYXkgKmNvbnZlcnRUb05TQXJyYXkoY29uc3QgV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVj
dDo6QWNjZXNzaWJpbGl0eUNoaWxkCiAgICAgcmV0dXJuIG5pbDsKIH0KIAotLSAoQWNjZXNzaWJp
bGl0eU9iamVjdCopYWNjZXNzaWJpbGl0eU9iamVjdAorLSAoQVhDb3JlT2JqZWN0KilhY2Nlc3Np
YmlsaXR5T2JqZWN0CiB7CiAjaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFlfSVNPTEFURURfVFJFRSkK
ICAgICBBU1NFUlQoIV9BWFVJRWxlbWVudFJlcXVlc3RTZXJ2aWNlZEJ5U2Vjb25kYXJ5QVhUaHJl
YWQoKSk7CkBAIC0zODgsMTAgKzM0MSw2IEBAIE5TQXJyYXkgKmNvbnZlcnRUb05TQXJyYXkoY29u
c3QgV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkCiAKIC0g
KFdlYkNvcmU6OkFYQ29yZU9iamVjdCopYXhCYWNraW5nT2JqZWN0CiB7Ci0jaWYgRU5BQkxFKEFD
Q0VTU0lCSUxJVFlfSVNPTEFURURfVFJFRSkKLSAgICBpZiAoX0FYVUlFbGVtZW50UmVxdWVzdFNl
cnZpY2VkQnlTZWNvbmRhcnlBWFRocmVhZCgpKQotICAgICAgICByZXR1cm4gc2VsZi5pc29sYXRl
ZFRyZWVOb2RlLmdldCgpOwotI2VuZGlmCiAgICAgcmV0dXJuIG1fb2JqZWN0OwogfQogCkBAIC03
ODUsNyArNzM0LDcgQEAgQWNjZXNzaWJpbGl0eVNlYXJjaENyaXRlcmlhIGFjY2Vzc2liaWxpdHlT
ZWFyY2hDcml0ZXJpYUZvclNlYXJjaFByZWRpY2F0ZVBhcmFtZXQKICAgICBpZiAoW3NlYXJjaFRl
eHRQYXJhbWV0ZXIgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSkKICAgICAgICAgc2Vh
cmNoVGV4dCA9IHNlYXJjaFRleHRQYXJhbWV0ZXI7CiAgICAgCi0gICAgQWNjZXNzaWJpbGl0eU9i
amVjdCogc3RhcnRFbGVtZW50ID0gbnVsbHB0cjsKKyAgICBBWENvcmVPYmplY3QqIHN0YXJ0RWxl
bWVudCA9IG51bGxwdHI7CiAgICAgaWYgKFtzdGFydEVsZW1lbnRQYXJhbWV0ZXIgaXNLaW5kT2ZD
bGFzczpbV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlIGNsYXNzXV0pCiAgICAgICAg
IHN0YXJ0RWxlbWVudCA9IFtzdGFydEVsZW1lbnRQYXJhbWV0ZXIgYWNjZXNzaWJpbGl0eU9iamVj
dF07CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9X
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCmluZGV4IGM1
NzA5NDljNTYwYjVmYTExYmM0NDMwMDkwZTIyNTNjNjk1YzhlM2QuLjY4MGQ4MDA4YWIxM2NjODUw
MTczOWJiZmNhZjhkMDQxMjc2MDM4OGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyTWFjLm1tCkBAIC0xMjg3LDcgKzEyODcsNyBAQCBzdGF0aWMgTlNTdHJpbmcqIG5zU3RyaW5n
Rm9yUmVwbGFjZWROb2RlKE5vZGUqIHJlcGxhY2VkTm9kZSkKICAgICAgICAgLy8gbm9uLXplcm8g
bGVuZ3RoIG1lYW5zIHRleHR1YWwgbm9kZSwgemVybyBsZW5ndGggbWVhbnMgcmVwbGFjZWQgbm9k
ZSAoQUtBICJhdHRhY2htZW50cyIgaW4gQVgpCiAgICAgICAgIGlmIChpdC50ZXh0KCkubGVuZ3Ro
KCkpIHsKICAgICAgICAgICAgIC8vIEFkZCB0aGUgdGV4dCBvZiB0aGUgbGlzdCBtYXJrZXIgaXRl
bSBpZiBuZWNlc3NhcnkuCi0gICAgICAgICAgICBTdHJpbmcgbGlzdE1hcmtlclRleHQgPSBtX29i
amVjdC0+bGlzdE1hcmtlclRleHRGb3JOb2RlQW5kUG9zaXRpb24oJm5vZGUsIFZpc2libGVQb3Np
dGlvbihpdC5yYW5nZSgpLT5zdGFydFBvc2l0aW9uKCkpKTsKKyAgICAgICAgICAgIFN0cmluZyBs
aXN0TWFya2VyVGV4dCA9IEFjY2Vzc2liaWxpdHlPYmplY3Q6Omxpc3RNYXJrZXJUZXh0Rm9yTm9k
ZUFuZFBvc2l0aW9uKCZub2RlLCBWaXNpYmxlUG9zaXRpb24oaXQucmFuZ2UoKS0+c3RhcnRQb3Np
dGlvbigpKSk7CiAgICAgICAgICAgICBpZiAoIWxpc3RNYXJrZXJUZXh0LmlzRW1wdHkoKSkKICAg
ICAgICAgICAgICAgICBBWEF0dHJpYnV0ZWRTdHJpbmdBcHBlbmRUZXh0KGF0dHJTdHJpbmcsICZu
b2RlLCBsaXN0TWFya2VyVGV4dCwgc3BlbGxDaGVjayk7CiAgICAgICAgICAgICBBWEF0dHJpYnV0
ZWRTdHJpbmdBcHBlbmRUZXh0KGF0dHJTdHJpbmcsICZub2RlLCBpdC50ZXh0KCksIHNwZWxsQ2hl
Y2spOwpAQCAtMTkyMiw3ICsxOTIyLDcgQEAgc3RhdGljIHZvaWQgY29udmVydFRvVmVjdG9yKE5T
QXJyYXkqIGFycmF5LCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2gKICAgICB1
bnNpZ25lZCBsZW5ndGggPSBbYXJyYXkgY291bnRdOwogICAgIHZlY3Rvci5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KGxlbmd0aCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsg
KytpKSB7Ci0gICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iaiA9IFtbYXJyYXkgb2JqZWN0
QXRJbmRleDppXSBhY2Nlc3NpYmlsaXR5T2JqZWN0XTsKKyAgICAgICAgQVhDb3JlT2JqZWN0KiBv
YmogPSBbW2FycmF5IG9iamVjdEF0SW5kZXg6aV0gYWNjZXNzaWJpbGl0eU9iamVjdF07CiAgICAg
ICAgIGlmIChvYmopCiAgICAgICAgICAgICB2ZWN0b3IuYXBwZW5kKG9iaik7CiAgICAgfQpAQCAt
MjAwNSwyOCArMjAwNSwxMSBAQCBzdGF0aWMgdm9pZCBXZWJUcmFuc2Zvcm1DR1BhdGhUb05TQmV6
aWVyUGF0aCh2b2lkKiBpbmZvLCBjb25zdCBDR1BhdGhFbGVtZW50ICplbAogCiAtIChzaXplX3Qp
Y2hpbGRyZW5WZWN0b3JTaXplCiB7Ci0jaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFlfSVNPTEFURURf
VFJFRSkKLSAgICBpZiAoX0FYVUlFbGVtZW50UmVxdWVzdFNlcnZpY2VkQnlTZWNvbmRhcnlBWFRo
cmVhZCgpKQotICAgICAgICByZXR1cm4gc2VsZi5pc29sYXRlZFRyZWVOb2RlLT5jaGlsZHJlbigp
LnNpemUoKTsKLSNlbmRpZgotICAgIAogICAgIHJldHVybiBtX29iamVjdC0+Y2hpbGRyZW4oKS5z
aXplKCk7CiB9CiAKIC0gKE5TQXJyYXk8V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgKj4g
KiljaGlsZHJlblZlY3RvckFycmF5CiB7Ci0jaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFlfSVNPTEFU
RURfVFJFRSkKLSAgICBpZiAoX0FYVUlFbGVtZW50UmVxdWVzdFNlcnZpY2VkQnlTZWNvbmRhcnlB
WFRocmVhZCgpKSB7Ci0gICAgICAgIGF1dG8gdHJlZU5vZGUgPSBzZWxmLmlzb2xhdGVkVHJlZU5v
ZGU7Ci0gICAgICAgIGF1dG8gbm9kZUNoaWxkcmVuID0gdHJlZU5vZGUtPmNoaWxkcmVuKCk7Ci0g
ICAgICAgIFZlY3RvcjxSZWZQdHI8QVhJc29sYXRlZFRyZWVOb2RlPj4gY2hpbGRyZW47Ci0gICAg
ICAgIGNoaWxkcmVuLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobm9kZUNoaWxkcmVuLnNpemUoKSk7
Ci0gICAgICAgIGF1dG8gdHJlZSA9IHRyZWVOb2RlLT50cmVlKCk7Ci0gICAgICAgIGZvciAoYXV0
byBjaGlsZElEIDogbm9kZUNoaWxkcmVuKQotICAgICAgICAgICAgY2hpbGRyZW4udW5jaGVja2Vk
QXBwZW5kKHRyZWUtPm5vZGVGb3JJRChjaGlsZElEKSk7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0
VG9OU0FycmF5KGNoaWxkcmVuKTsKLSAgICB9Ci0jZW5kaWYKICAgICByZXR1cm4gY29udmVydFRv
TlNBcnJheShtX29iamVjdC0+Y2hpbGRyZW4oKSk7CiB9CiAKQEAgLTMxMTgsNyArMzEwMSw3IEBA
IEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgIAogICAgIGlmIChbYXR0
cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5SW5kZXhBdHRyaWJ1dGVd
KSB7CiAgICAgICAgIGlmIChtX29iamVjdC0+aXNUcmVlSXRlbSgpKSB7Ci0gICAgICAgICAgICBB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBtX29iamVjdC0+cGFyZW50T2JqZWN0KCk7Cisg
ICAgICAgICAgICBBWENvcmVPYmplY3QqIHBhcmVudCA9IG1fb2JqZWN0LT5wYXJlbnRPYmplY3Qo
KTsKICAgICAgICAgICAgIGZvciAoOyBwYXJlbnQgJiYgIXBhcmVudC0+aXNUcmVlKCk7IHBhcmVu
dCA9IHBhcmVudC0+cGFyZW50T2JqZWN0KCkpCiAgICAgICAgICAgICB7IH0KICAgICAgICAgICAg
IApAQCAtMzE1Nyw3ICszMTQwLDcgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNf
RU5ECiAgICAgLy8gVGhlIHJvdyB0aGF0IGNvbnRhaW5zIHRoaXMgcm93LiBJdCBzaG91bGQgYmUg
dGhlIHNhbWUgYXMgdGhlIGZpcnN0IHBhcmVudCB0aGF0IGlzIGEgdHJlZWl0ZW0uCiAgICAgaWYg
KFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlEaXNjbG9zZWRC
eVJvd0F0dHJpYnV0ZV0pIHsKICAgICAgICAgaWYgKG1fb2JqZWN0LT5pc1RyZWVJdGVtKCkpIHsK
LSAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudCA9IG1fb2JqZWN0LT5wYXJl
bnRPYmplY3QoKTsKKyAgICAgICAgICAgIEFYQ29yZU9iamVjdCogcGFyZW50ID0gbV9vYmplY3Qt
PnBhcmVudE9iamVjdCgpOwogICAgICAgICAgICAgd2hpbGUgKHBhcmVudCkgewogICAgICAgICAg
ICAgICAgIGlmIChwYXJlbnQtPmlzVHJlZUl0ZW0oKSkKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHBhcmVudC0+d3JhcHBlcigpOwpAQCAtMzIyNCw4ICszMjA3LDggQEAgQUxMT1dfREVQUkVD
QVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxU
b1N0cmluZzpOU0FjY2Vzc2liaWxpdHlUaXRsZVVJRWxlbWVudEF0dHJpYnV0ZV0pIHsKICAgICAg
ICAgaWYgKCFtX29iamVjdC0+ZXhwb3Nlc1RpdGxlVUlFbGVtZW50KCkpCiAgICAgICAgICAgICBy
ZXR1cm4gbmlsOwotICAgICAgICAKLSAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqID0g
bV9vYmplY3QtPnRpdGxlVUlFbGVtZW50KCk7CisKKyAgICAgICAgQVhDb3JlT2JqZWN0KiBvYmog
PSBtX29iamVjdC0+dGl0bGVVSUVsZW1lbnQoKTsKICAgICAgICAgaWYgKG9iaikKICAgICAgICAg
ICAgIHJldHVybiBvYmotPndyYXBwZXIoKTsKICAgICAgICAgcmV0dXJuIG5pbDsKQEAgLTMyNDks
MTMgKzMyMzIsMTMgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAg
fQogICAgIAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3Np
YmlsaXR5SG9yaXpvbnRhbFNjcm9sbEJhckF0dHJpYnV0ZV0pIHsKLSAgICAgICAgQWNjZXNzaWJp
bGl0eU9iamVjdCogc2Nyb2xsQmFyID0gbV9vYmplY3QtPnNjcm9sbEJhcihBY2Nlc3NpYmlsaXR5
T3JpZW50YXRpb246Okhvcml6b250YWwpOworICAgICAgICBBWENvcmVPYmplY3QqIHNjcm9sbEJh
ciA9IG1fb2JqZWN0LT5zY3JvbGxCYXIoQWNjZXNzaWJpbGl0eU9yaWVudGF0aW9uOjpIb3Jpem9u
dGFsKTsKICAgICAgICAgaWYgKHNjcm9sbEJhcikKICAgICAgICAgICAgIHJldHVybiBzY3JvbGxC
YXItPndyYXBwZXIoKTsKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICB9CiAgICAgaWYgKFthdHRy
aWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlWZXJ0aWNhbFNjcm9sbEJh
ckF0dHJpYnV0ZV0pIHsKLSAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogc2Nyb2xsQmFyID0g
bV9vYmplY3QtPnNjcm9sbEJhcihBY2Nlc3NpYmlsaXR5T3JpZW50YXRpb246OlZlcnRpY2FsKTsK
KyAgICAgICAgQVhDb3JlT2JqZWN0KiBzY3JvbGxCYXIgPSBtX29iamVjdC0+c2Nyb2xsQmFyKEFj
Y2Vzc2liaWxpdHlPcmllbnRhdGlvbjo6VmVydGljYWwpOwogICAgICAgICBpZiAoc2Nyb2xsQmFy
KQogICAgICAgICAgICAgcmV0dXJuIHNjcm9sbEJhci0+d3JhcHBlcigpOwogICAgICAgICByZXR1
cm4gbmlsOwpAQCAtMzQ2NiwxNyArMzQ0OSwxNyBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVO
VEFUSU9OU19FTkQKICAgICB9CiAKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3Ry
aW5nOk5TQWNjZXNzaWJpbGl0eUZvY3VzYWJsZUFuY2VzdG9yQXR0cmlidXRlXSkgewotICAgICAg
ICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QgPSBtX29iamVjdC0+Zm9jdXNhYmxlQW5jZXN0
b3IoKTsKKyAgICAgICAgQVhDb3JlT2JqZWN0KiBvYmplY3QgPSBtX29iamVjdC0+Zm9jdXNhYmxl
QW5jZXN0b3IoKTsKICAgICAgICAgcmV0dXJuIG9iamVjdCA/IG9iamVjdC0+d3JhcHBlcigpIDog
bmlsOwogICAgIH0KIAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNB
Y2Nlc3NpYmlsaXR5RWRpdGFibGVBbmNlc3RvckF0dHJpYnV0ZV0pIHsKLSAgICAgICAgQWNjZXNz
aWJpbGl0eU9iamVjdCogb2JqZWN0ID0gbV9vYmplY3QtPmVkaXRhYmxlQW5jZXN0b3IoKTsKKyAg
ICAgICAgQVhDb3JlT2JqZWN0KiBvYmplY3QgPSBtX29iamVjdC0+ZWRpdGFibGVBbmNlc3Rvcigp
OwogICAgICAgICByZXR1cm4gb2JqZWN0ID8gb2JqZWN0LT53cmFwcGVyKCkgOiBuaWw7CiAgICAg
fQogCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxp
dHlIaWdoZXN0RWRpdGFibGVBbmNlc3RvckF0dHJpYnV0ZV0pIHsKLSAgICAgICAgQWNjZXNzaWJp
bGl0eU9iamVjdCogb2JqZWN0ID0gbV9vYmplY3QtPmhpZ2hlc3RFZGl0YWJsZUFuY2VzdG9yKCk7
CisgICAgICAgIEFYQ29yZU9iamVjdCogb2JqZWN0ID0gbV9vYmplY3QtPmhpZ2hlc3RFZGl0YWJs
ZUFuY2VzdG9yKCk7CiAgICAgICAgIHJldHVybiBvYmplY3QgPyBvYmplY3QtPndyYXBwZXIoKSA6
IG5pbDsKICAgICB9CiAKQEAgLTM3ODEsNyArMzc2NCw3IEBAIEFMTE9XX0RFUFJFQ0FURURfREVD
TEFSQVRJT05TX0VORAogICAgIC8vIE9uIFdLMSwgd2UgbmVlZCB0byBjb252ZXJ0IHJlY3QgdG8g
d2luZG93IHNwYWNlIHRvIG1hdGNoIG1vdXNlIGNsaWNraW5nLgogICAgIGlmIChmcmFtZVZpZXcp
IHsKICAgICAgICAgLy8gRmluZCB0aGUgYXBwcm9wcmlhdGUgc2Nyb2xsIHZpZXcgdG8gdXNlIHRv
IGNvbnZlcnQgdGhlIGNvbnRlbnRzIHRvIHRoZSB3aW5kb3cuCi0gICAgICAgIGZvciAoQWNjZXNz
aWJpbGl0eU9iamVjdCogcGFyZW50ID0gbV9vYmplY3QtPnBhcmVudE9iamVjdCgpOyBwYXJlbnQ7
IHBhcmVudCA9IHBhcmVudC0+cGFyZW50T2JqZWN0KCkpIHsKKyAgICAgICAgZm9yIChhdXRvKiBw
YXJlbnQgPSBtX29iamVjdC0+cGFyZW50T2JqZWN0KCk7IHBhcmVudDsgcGFyZW50ID0gcGFyZW50
LT5wYXJlbnRPYmplY3QoKSkgewogICAgICAgICAgICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlTY3Jv
bGxWaWV3PigqcGFyZW50KSkgewogICAgICAgICAgICAgICAgIGlmIChhdXRvIHNjcm9sbFZpZXcg
PSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldz4oKnBhcmVudCkuc2Nyb2xsVmlldygp
KSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICghZnJhbWVWaWV3LT5wbGF0Zm9ybVdpZGdldCgp
KQpAQCAtNDEyNiw3ICs0MTA5LDcgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNf
RU5ECiAgICAgTlNOdW1iZXIqIG51bWJlciA9IG5pbDsKICAgICBOU0FycmF5KiBhcnJheSA9IG5p
bDsKICAgICBOU0RpY3Rpb25hcnkqIGRpY3Rpb25hcnkgPSBuaWw7Ci0gICAgUmVmUHRyPEFjY2Vz
c2liaWxpdHlPYmplY3Q+IHVpRWxlbWVudCA9IG51bGxwdHI7CisgICAgUmVmUHRyPEFYQ29yZU9i
amVjdD4gdWlFbGVtZW50OwogICAgIE5TUG9pbnQgcG9pbnQgPSBOU1plcm9Qb2ludDsKICAgICBi
b29sIHBvaW50U2V0ID0gZmFsc2U7CiAgICAgTlNSYW5nZSByYW5nZSA9IHswLCAwfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>382588</attachid>
            <date>2019-11-01 09:41:51 -0700</date>
            <delta_ts>2019-11-01 12:07:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203717-20191101124149.patch</filename>
            <type>text/plain</type>
            <size>89308</size>
            <attacher name="Andres Gonzalez">andresg_22</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUxOTAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWYxOGQyODQyMzQ0NmM5
OWU4OWU2MjVjNGU4Y2NhMDNlODhjZWQ0ZC4uNDA2OThiZGM1YmE5NTc3OGNlNzZkMmE0MzBiYTFj
MTE3NGY0OThmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk0IEBACisyMDE5LTExLTAxICBBbmRy
ZXMgR29uemFsZXogIDxhbmRyZXNnXzIyQGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIEFYSXNv
bGF0ZWRUcmVlTm9kZSBhIHN1YmNsYXNzIG9mIEFYQ29yZU9iamVjdC4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMzcxNworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBuZWVkZWQsIG5v
IG5ldyBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgIC0gQVhJc29sYXRlZFRyZWVOT2RlIGRlcml2
ZXMgZnJvbSBBWENvcmVPYmplY3QuCisgICAgICAgIC0gQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXIgY2FuIG5vdyBoYXZlIGEgc2luZ2xlIHBvaW50ZXIgdG8gYSBBWENvcmVPYmplY3QgaW5zdGVh
ZCBvZiBvbmUgZm9yIHRoZSBsaXZlIG9iamVjdCBhbmQgb25lIGZvciB0aGUgaXNvbGF0ZWQgb2Jq
ZWN0LgorICAgICAgICAtIFNpbXBsaWZpZWQgd3JhcHBlciBjb2RlIGJ5IG1ha2luZyBpdCBhZ25v
c3RpYyBvZiB0aGUgbmF0dXJlIG9mIHRoZSB1bmRlcmx5aW5nIEFYQ29yZU9iamVjdC4KKworICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpBWE9iamVjdENhY2hlOjpjaGFyYWN0ZXJPZmZzZXRGb3JQb2ludCk6CisgICAgICAgIChXZWJD
b3JlOjpBWE9iamVjdENhY2hlOjpjaGFyYWN0ZXJPZmZzZXRGb3JJbmRleCk6CisgICAgICAgIChX
ZWJDb3JlOjpBWE9iamVjdENhY2hlOjpjcmVhdGVJc29sYXRlZEFjY2Vzc2liaWxpdHlUcmVlSGll
cmFyY2h5KToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmdlbmVyYXRlSXNvbGF0
ZWRBY2Nlc3NpYmlsaXR5VHJlZSk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9iamVjdENh
Y2hlLmg6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdGsvQVhPYmplY3RDYWNoZUF0ay5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjphdHRhY2hXcmFwcGVyKToKKyAgICAg
ICAgKiBhY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlLmNwcDoKKyAgICAgICAgKGFj
Y2Vzc2liaWxpdHlUeXBlRnJvbU9iamVjdCk6CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlTmV3
KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlLmg6CisgICAg
ICAgICogYWNjZXNzaWJpbGl0eS9pb3MvQVhPYmplY3RDYWNoZUlPUy5tbToKKyAgICAgICAgKFdl
YkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmF0dGFjaFdyYXBwZXIpOgorICAgICAgICAqIGFjY2Vzc2li
aWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tOgorICAgICAgICAo
QWNjZXNzaWJpbGl0eVVuaWdub3JlZEFuY2VzdG9yKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJp
bGl0eVRleHRNYXJrZXIgaW5pdFdpdGhEYXRhOmFjY2Vzc2liaWxpdHlPYmplY3Q6XSk6CisgICAg
ICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGluaXRXaXRoQWNjZXNzaWJpbGl0
eU9iamVjdDpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgX2Fj
Y2Vzc2liaWxpdHlUcmVlQW5jZXN0b3JdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIgX2FjY2Vzc2liaWxpdHlMaXN0QW5jZXN0b3JdKToKKyAgICAgICAgKC1bV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgX2FjY2Vzc2liaWxpdHlBcnRpY2xlQW5jZXN0b3Jd
KToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgX2FjY2Vzc2liaWxp
dHlMYW5kbWFya0FuY2VzdG9yXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyIF9hY2Nlc3NpYmlsaXR5VGFibGVBbmNlc3Rvcl0pOgorICAgICAgICAoLVtXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlciBfYWNjZXNzaWJpbGl0eUlzSW5UYWJsZUNlbGxdKToKKyAg
ICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgX2FjY2Vzc2liaWxpdHlGaWVs
ZHNldEFuY2VzdG9yXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
IF9hY2Nlc3NpYmlsaXR5RnJhbWVBbmNlc3Rvcl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlciBfYWNjZXNzaWJpbGl0eVRyYWl0c0Zyb21BbmNlc3RvcnNdKToKKyAg
ICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgdGFibGVDZWxsUGFyZW50XSk6
CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHRhYmxlUGFyZW50XSk6
CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlU
aXRsZUVsZW1lbnRdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIg
YWNjZXNzaWJpbGl0eURhdGV0aW1lVmFsdWVdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXIgZGV0YWlsUGFyZW50Rm9yU3VtbWFyeU9iamVjdDpdKToKKyAgICAgICAg
KC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgZGV0YWlsUGFyZW50Rm9yT2JqZWN0Ol0p
OgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciB0cmVlSXRlbVBhcmVu
dEZvck9iamVjdDpdKToKKyAgICAgICAgKEFYQXR0cmlidXRlU3RyaW5nU2V0U3R5bGUpOgorICAg
ICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhcnJheU9mVGV4dEZvclRleHRN
YXJrZXJzOmF0dHJpYnV0ZWQ6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyIGFjY2Vzc2liaWxpdHlTdXBwb3J0c0FSSUFFeHBhbmRlZF0pOgorICAgICAgICAoLVtX
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5SXNFeHBhbmRlZF0pOgor
ICAgICAgICAqIGFjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRUcmVlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkFYSXNvbGF0ZWRUcmVlOjpzZXRSb290KToKKyAgICAgICAgKFdl
YkNvcmU6OkFYSXNvbGF0ZWRUcmVlOjphcHBseVBlbmRpbmdDaGFuZ2VzKToKKyAgICAgICAgKFdl
YkNvcmU6OkFYSXNvbGF0ZWRUcmVlOjpzZXRSb290Tm9kZUlEKTogRGVsZXRlZC4KKyAgICAgICAg
KiBhY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZS5oOgorICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRUcmVlTm9kZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpBWElzb2xhdGVkVHJlZU5vZGU6OkFYSXNvbGF0ZWRUcmVlTm9kZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBWElzb2xhdGVkVHJlZU5vZGU6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBWElzb2xhdGVkVHJlZU5vZGU6OmluaXRpYWxpemVBdHRyaWJ1dGVEYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFYSXNvbGF0ZWRUcmVlTm9kZTo6YXBwZW5kQ2hpbGQpOgorICAgICAg
ICAoV2ViQ29yZTo6QVhJc29sYXRlZFRyZWVOb2RlOjpjaGlsZHJlbik6CisgICAgICAgIChXZWJD
b3JlOjpBWElzb2xhdGVkVHJlZU5vZGU6OnBhcmVudE9iamVjdFVuaWdub3JlZCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpBWElzb2xhdGVkVHJlZU5vZGU6OmFjY2Vzc2liaWxpdHlIaXRUZXN0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFYSXNvbGF0ZWRUcmVlTm9kZTo6dXBkYXRlQmFj
a2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkFYSXNvbGF0ZWRUcmVlTm9kZTo6cGFyZW50
T2JqZWN0SW50ZXJmYWNlVW5pZ25vcmVkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBhY2Nl
c3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZU5vZGUuaDoKKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L21hYy9BWE9iamVjdENhY2hlTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6
QVhPYmplY3RDYWNoZTo6YXR0YWNoV3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVj
dENhY2hlOjphc3NvY2lhdGVJc29sYXRlZFRyZWVOb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UuaDoKKyAg
ICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJh
c2UubW06CisgICAgICAgIChjb252ZXJ0VG9OU0FycmF5KToKKyAgICAgICAgKC1bV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlIGluaXRXaXRoQWNjZXNzaWJpbGl0eU9iamVjdDpdKToK
KyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlIGRldGFjaF0pOgor
ICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UgdXBkYXRlT2JqZWN0
QmFja2luZ1N0b3JlXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
QmFzZSBhY2Nlc3NpYmlsaXR5T2JqZWN0XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyQmFzZSBheEJhY2tpbmdPYmplY3RdKToKKyAgICAgICAgKGFjY2Vzc2liaWxp
dHlTZWFyY2hDcml0ZXJpYUZvclNlYXJjaFByZWRpY2F0ZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGUp
OgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UgaXNvbGF0ZWRU
cmVlTm9kZV0pOiBEZWxldGVkLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlciBkb0FYQXR0cmlidXRlZFN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZTpzcGVs
bENoZWNrOl0pOgorICAgICAgICAoY29udmVydFRvVmVjdG9yKToKKyAgICAgICAgKC1bV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgY2hpbGRyZW5WZWN0b3JTaXplXSk6CisgICAgICAgICgt
W1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGNoaWxkcmVuVmVjdG9yQXJyYXldKToKKyAg
ICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUF0dHJp
YnV0ZVZhbHVlOl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBh
Y2Nlc3NpYmlsaXR5U2hvd0NvbnRleHRNZW51XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpmb3JQYXJhbWV0ZXI6
XSk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS93aW4vQVhPYmplY3RDYWNoZVdpbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjphdHRhY2hXcmFwcGVyKToKKwogMjAxOS0x
MC0zMSAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBbRlRX
XSBBZG9wdCBEaXJlY3RXcml0ZSBpbiBwbGFjZSBvZiBVbmlzY3JpYmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCmluZGV4IDk3YWVmNmE0YjgzNmY2
MzgxM2UwMDViZWM2NzQyZjFiMGI5MTFlYjUuLmNhYTcwMzRmNTQ1NjcwNjNkZjNkYzVhMGI1NWUz
YjAzNjg5NzQ3ZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhP
YmplY3RDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVj
dENhY2hlLmNwcApAQCAtMjcwNyw3ICsyNzA3LDcgQEAgSW50UmVjdCBBWE9iamVjdENhY2hlOjph
YnNvbHV0ZUNhcmV0Qm91bmRzRm9yQ2hhcmFjdGVyT2Zmc2V0KGNvbnN0IENoYXJhY3Rlck9mZnMK
ICAgICByZXR1cm4gYWJzb2x1dGVCb3VuZHNGb3JMb2NhbENhcmV0UmVjdChjYXJldFBhaW50ZXIs
IGxvY2FsUmVjdCk7CiB9CiAKLUNoYXJhY3Rlck9mZnNldCBBWE9iamVjdENhY2hlOjpjaGFyYWN0
ZXJPZmZzZXRGb3JQb2ludChjb25zdCBJbnRQb2ludCAmcG9pbnQsIEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIG9iaikKK0NoYXJhY3Rlck9mZnNldCBBWE9iamVjdENhY2hlOjpjaGFyYWN0ZXJPZmZzZXRG
b3JQb2ludChjb25zdCBJbnRQb2ludCAmcG9pbnQsIEFYQ29yZU9iamVjdCogb2JqKQogewogICAg
IGlmICghb2JqKQogICAgICAgICByZXR1cm4gQ2hhcmFjdGVyT2Zmc2V0KCk7CkBAIC0yNzczLDcg
KzI3NzMsNyBAQCBDaGFyYWN0ZXJPZmZzZXQgQVhPYmplY3RDYWNoZTo6c3RhcnRDaGFyYWN0ZXJP
ZmZzZXRPZkxpbmUoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JgogICAgIHJldHVybiBjaGFyYWN0ZXJP
ZmZzZXRGcm9tVmlzaWJsZVBvc2l0aW9uKHN0YXJ0TGluZSk7CiB9CiAKLUNoYXJhY3Rlck9mZnNl
dCBBWE9iamVjdENhY2hlOjpjaGFyYWN0ZXJPZmZzZXRGb3JJbmRleChpbnQgaW5kZXgsIGNvbnN0
IEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iaikKK0NoYXJhY3Rlck9mZnNldCBBWE9iamVjdENhY2hl
OjpjaGFyYWN0ZXJPZmZzZXRGb3JJbmRleChpbnQgaW5kZXgsIGNvbnN0IEFYQ29yZU9iamVjdCog
b2JqKQogewogICAgIGlmICghb2JqKQogICAgICAgICByZXR1cm4gQ2hhcmFjdGVyT2Zmc2V0KCk7
CkBAIC0yOTQzLDE4ICsyOTQzLDE4IEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6cGVyZm9ybURlZmVy
cmVkQ2FjaGVVcGRhdGUoKQogfQogICAgIAogI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZX0lTT0xB
VEVEX1RSRUUpCi1SZWY8QVhJc29sYXRlZFRyZWVOb2RlPiBBWE9iamVjdENhY2hlOjpjcmVhdGVJ
c29sYXRlZEFjY2Vzc2liaWxpdHlUcmVlSGllcmFyY2h5KEFjY2Vzc2liaWxpdHlPYmplY3QmIG9i
amVjdCwgQVhJRCBwYXJlbnRJRCwgQVhJc29sYXRlZFRyZWUmIHRyZWUsIFZlY3RvcjxSZWY8QVhJ
c29sYXRlZFRyZWVOb2RlPj4mIG5vZGVDaGFuZ2VzKQorUmVmPEFYSXNvbGF0ZWRUcmVlTm9kZT4g
QVhPYmplY3RDYWNoZTo6Y3JlYXRlSXNvbGF0ZWRBY2Nlc3NpYmlsaXR5VHJlZUhpZXJhcmNoeShB
WENvcmVPYmplY3QmIG9iamVjdCwgQVhJRCBwYXJlbnRJRCwgQVhJc29sYXRlZFRyZWUmIHRyZWUs
IFZlY3RvcjxSZWY8QVhJc29sYXRlZFRyZWVOb2RlPj4mIG5vZGVDaGFuZ2VzKQogewogICAgIGF1
dG8gaXNvbGF0ZWRUcmVlTm9kZSA9IEFYSXNvbGF0ZWRUcmVlTm9kZTo6Y3JlYXRlKG9iamVjdCk7
CiAgICAgbm9kZUNoYW5nZXMuYXBwZW5kKGlzb2xhdGVkVHJlZU5vZGUuY29weVJlZigpKTsKIAog
ICAgIGlzb2xhdGVkVHJlZU5vZGUtPnNldFRyZWVJZGVudGlmaWVyKHRyZWUudHJlZUlkZW50aWZp
ZXIoKSk7CiAgICAgaXNvbGF0ZWRUcmVlTm9kZS0+c2V0UGFyZW50KHBhcmVudElEKTsKLSAgICBh
c3NvY2lhdGVJc29sYXRlZFRyZWVOb2RlKG9iamVjdCwgaXNvbGF0ZWRUcmVlTm9kZSwgdHJlZS50
cmVlSWRlbnRpZmllcigpKTsKKyAgICBhdHRhY2hXcmFwcGVyKCZpc29sYXRlZFRyZWVOb2RlLmdl
dCgpKTsKIAotICAgIGZvciAoYXV0byBjaGlsZCA6IG9iamVjdC5jaGlsZHJlbigpKSB7Ci0gICAg
ICAgIGF1dG8gc3RhdGljQ2hpbGQgPSBjcmVhdGVJc29sYXRlZEFjY2Vzc2liaWxpdHlUcmVlSGll
cmFyY2h5KCpjaGlsZCwgaXNvbGF0ZWRUcmVlTm9kZS0+aWRlbnRpZmllcigpLCB0cmVlLCBub2Rl
Q2hhbmdlcyk7Ci0gICAgICAgIGlzb2xhdGVkVHJlZU5vZGUtPmFwcGVuZENoaWxkKHN0YXRpY0No
aWxkLT5pZGVudGlmaWVyKCkpOworICAgIGZvciAoY29uc3QgYXV0byYgY2hpbGQgOiBvYmplY3Qu
Y2hpbGRyZW4oKSkgeworICAgICAgICBhdXRvIHN0YXRpY0NoaWxkID0gY3JlYXRlSXNvbGF0ZWRB
Y2Nlc3NpYmlsaXR5VHJlZUhpZXJhcmNoeSgqY2hpbGQsIGlzb2xhdGVkVHJlZU5vZGUtPm9iamVj
dElEKCksIHRyZWUsIG5vZGVDaGFuZ2VzKTsKKyAgICAgICAgaXNvbGF0ZWRUcmVlTm9kZS0+YXBw
ZW5kQ2hpbGQoc3RhdGljQ2hpbGQtPm9iamVjdElEKCkpOwogICAgIH0KIAogICAgIHJldHVybiBp
c29sYXRlZFRyZWVOb2RlOwpAQCAtMjk3MCw3ICsyOTcwLDcgQEAgUmVmPEFYSXNvbGF0ZWRUcmVl
PiBBWE9iamVjdENhY2hlOjpnZW5lcmF0ZUlzb2xhdGVkQWNjZXNzaWJpbGl0eVRyZWUoKQogICAg
IAogICAgIFZlY3RvcjxSZWY8QVhJc29sYXRlZFRyZWVOb2RlPj4gbm9kZUNoYW5nZXM7CiAgICAg
YXV0byByb290ID0gY3JlYXRlSXNvbGF0ZWRBY2Nlc3NpYmlsaXR5VHJlZUhpZXJhcmNoeSgqcm9v
dE9iamVjdCgpLCBJbnZhbGlkQVhJRCwgKnRyZWUsIG5vZGVDaGFuZ2VzKTsKLSAgICB0cmVlLT5z
ZXRSb290Tm9kZUlEKHJvb3QtPmlkZW50aWZpZXIoKSk7CisgICAgdHJlZS0+c2V0Um9vdChyb290
KTsKICAgICB0cmVlLT5hcHBlbmROb2RlQ2hhbmdlcyhub2RlQ2hhbmdlcyk7CiAKICAgICByZXR1
cm4gbWFrZVJlZigqdHJlZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FYT2JqZWN0Q2FjaGUuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmpl
Y3RDYWNoZS5oCmluZGV4IDg4NDk5ZmQxOGMyMDczOWQyZGEzNzBhMDRiYTdiZjQxYmZlM2M4NGEu
LmFjMGMyYmM4Nzc5MjA5NGEzZGE5MGEzNjgzYzZiM2UzYjg4OWNkNjQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oCkBAIC0xNzQsNyArMTc0LDcgQEAg
cHVibGljOgogICAgIHZvaWQgcmVtb3ZlKEFYSUQpOwogCiAgICAgdm9pZCBkZXRhY2hXcmFwcGVy
KEFjY2Vzc2liaWxpdHlPYmplY3QqLCBBY2Nlc3NpYmlsaXR5RGV0YWNobWVudFR5cGUpOwotICAg
IHZvaWQgYXR0YWNoV3JhcHBlcihBY2Nlc3NpYmlsaXR5T2JqZWN0Kik7CisgICAgdm9pZCBhdHRh
Y2hXcmFwcGVyKEFYQ29yZU9iamVjdCopOwogICAgIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKE5vZGUq
LCBOb2RlKiBuZXdDaGlsZCA9IG51bGxwdHIpOwogICAgIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKFJl
bmRlck9iamVjdCosIFJlbmRlck9iamVjdCogbmV3Q2hpbGQgPSBudWxscHRyKTsKICAgICB2b2lk
IGNoaWxkcmVuQ2hhbmdlZChBWENvcmVPYmplY3QqKTsKQEAgLTE5NCw4ICsxOTQsNyBAQCBwdWJs
aWM6CiAjaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFlfSVNPTEFURURfVFJFRSkKICAgICBXRUJDT1JF
X0VYUE9SVCBSZWY8QVhJc29sYXRlZFRyZWU+IGdlbmVyYXRlSXNvbGF0ZWRBY2Nlc3NpYmlsaXR5
VHJlZSgpOwogCi0gICAgdm9pZCBhc3NvY2lhdGVJc29sYXRlZFRyZWVOb2RlKEFjY2Vzc2liaWxp
dHlPYmplY3QmLCBBWElzb2xhdGVkVHJlZU5vZGUmLCBBWElzb2xhdGVkVHJlZUlEKTsKLSAgICBS
ZWY8QVhJc29sYXRlZFRyZWVOb2RlPiBjcmVhdGVJc29sYXRlZEFjY2Vzc2liaWxpdHlUcmVlSGll
cmFyY2h5KEFjY2Vzc2liaWxpdHlPYmplY3QmLCBBWElELCBBWElzb2xhdGVkVHJlZSYsIFZlY3Rv
cjxSZWY8QVhJc29sYXRlZFRyZWVOb2RlPj4mKTsKKyAgICBSZWY8QVhJc29sYXRlZFRyZWVOb2Rl
PiBjcmVhdGVJc29sYXRlZEFjY2Vzc2liaWxpdHlUcmVlSGllcmFyY2h5KEFYQ29yZU9iamVjdCYs
IEFYSUQsIEFYSXNvbGF0ZWRUcmVlJiwgVmVjdG9yPFJlZjxBWElzb2xhdGVkVHJlZU5vZGU+PiYp
OwogI2VuZGlmCiAgICAgCiAjaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFkpCkBAIC0yNTcsNyArMjU2
LDcgQEAgcHVibGljOgogICAgIENoYXJhY3Rlck9mZnNldCBwcmV2aW91c1NlbnRlbmNlU3RhcnRD
aGFyYWN0ZXJPZmZzZXQoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0Jik7CiAgICAgCiAgICAgLy8gQm91
bmRzCi0gICAgQ2hhcmFjdGVyT2Zmc2V0IGNoYXJhY3Rlck9mZnNldEZvclBvaW50KGNvbnN0IElu
dFBvaW50JiwgQWNjZXNzaWJpbGl0eU9iamVjdCopOworICAgIENoYXJhY3Rlck9mZnNldCBjaGFy
YWN0ZXJPZmZzZXRGb3JQb2ludChjb25zdCBJbnRQb2ludCYsIEFYQ29yZU9iamVjdCopOwogICAg
IEludFJlY3QgYWJzb2x1dGVDYXJldEJvdW5kc0ZvckNoYXJhY3Rlck9mZnNldChjb25zdCBDaGFy
YWN0ZXJPZmZzZXQmKTsKICAgICBDaGFyYWN0ZXJPZmZzZXQgY2hhcmFjdGVyT2Zmc2V0Rm9yQm91
bmRzKGNvbnN0IEludFJlY3QmLCBib29sKTsKICAgICAKQEAgLTI2Niw3ICsyNjUsNyBAQCBwdWJs
aWM6CiAgICAgQ2hhcmFjdGVyT2Zmc2V0IHN0YXJ0Q2hhcmFjdGVyT2Zmc2V0T2ZMaW5lKGNvbnN0
IENoYXJhY3Rlck9mZnNldCYpOwogICAgIAogICAgIC8vIEluZGV4Ci0gICAgQ2hhcmFjdGVyT2Zm
c2V0IGNoYXJhY3Rlck9mZnNldEZvckluZGV4KGludCwgY29uc3QgQWNjZXNzaWJpbGl0eU9iamVj
dCopOworICAgIENoYXJhY3Rlck9mZnNldCBjaGFyYWN0ZXJPZmZzZXRGb3JJbmRleChpbnQsIGNv
bnN0IEFYQ29yZU9iamVjdCopOwogICAgIGludCBpbmRleEZvckNoYXJhY3Rlck9mZnNldChjb25z
dCBDaGFyYWN0ZXJPZmZzZXQmLCBBY2Nlc3NpYmlsaXR5T2JqZWN0Kik7CiAKICAgICBlbnVtIEFY
Tm90aWZpY2F0aW9uIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
YXRrL0FYT2JqZWN0Q2FjaGVBdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9h
dGsvQVhPYmplY3RDYWNoZUF0ay5jcHAKaW5kZXggZDgzYzA3NDZlMGJmNWJmNzk5ODhkMzQxMjc1
YTk2MDEzOWI3N2MyYS4uOTFmNzE1MThmZjJlMTJiODM3MGVlZTMxZmNmZmM3YjZjM2E0ZjU3ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvQVhPYmplY3RDYWNo
ZUF0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvQVhPYmplY3RD
YWNoZUF0ay5jcHAKQEAgLTYxLDcgKzYxLDcgQEAgdm9pZCBBWE9iamVjdENhY2hlOjpkZXRhY2hX
cmFwcGVyKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iaiwgQWNjZXNzaWJpbGl0eURldGFjaG0KICAg
ICB3ZWJraXRBY2Nlc3NpYmxlRGV0YWNoKFdFQktJVF9BQ0NFU1NJQkxFKHdyYXBwZXIpKTsKIH0K
IAotdm9pZCBBWE9iamVjdENhY2hlOjphdHRhY2hXcmFwcGVyKEFjY2Vzc2liaWxpdHlPYmplY3Qq
IG9iaikKK3ZvaWQgQVhPYmplY3RDYWNoZTo6YXR0YWNoV3JhcHBlcihBWENvcmVPYmplY3QqIG9i
aikKIHsKICAgICBHUmVmUHRyPFdlYktpdEFjY2Vzc2libGU+IHdyYXBwZXIgPSBhZG9wdEdSZWYo
d2Via2l0QWNjZXNzaWJsZU5ldyhvYmopKTsKICAgICBvYmotPnNldFdyYXBwZXIod3JhcHBlci5n
ZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJL
aXRBY2Nlc3NpYmxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktp
dEFjY2Vzc2libGUuY3BwCmluZGV4IGQzMmM4MjJhZTFjNDUyMTk2OTA2ZmJmZGFhZTE5OTg0MTY3
NTBkMDEuLjIzODgyOTI2NTRiMGNjY2FkNzZkZjA1MzU0ZGUzYTgxYTUyZWViY2EgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGUu
Y3BwCkBAIC0xMjU3LDcgKzEyNTcsNyBAQCBzdGF0aWMgY29uc3QgY2hhciogdW5pcXVlQWNjZXNz
aWJpbGl0eVR5cGVOYW1lKGd1aW50MTYgaW50ZXJmYWNlTWFzaykKICAgICByZXR1cm4gbmFtZTsK
IH0KIAotc3RhdGljIEdUeXBlIGFjY2Vzc2liaWxpdHlUeXBlRnJvbU9iamVjdChBY2Nlc3NpYmls
aXR5T2JqZWN0KiBjb3JlT2JqZWN0KQorc3RhdGljIEdUeXBlIGFjY2Vzc2liaWxpdHlUeXBlRnJv
bU9iamVjdChBWENvcmVPYmplY3QqIGNvcmVPYmplY3QpCiB7CiAgICAgc3RhdGljIGNvbnN0IEdU
eXBlSW5mbyB0eXBlSW5mbyA9IHsKICAgICAgICAgc2l6ZW9mKFdlYktpdEFjY2Vzc2libGVDbGFz
cyksCkBAIC0xMjg5LDcgKzEyODksNyBAQCBzdGF0aWMgR1R5cGUgYWNjZXNzaWJpbGl0eVR5cGVG
cm9tT2JqZWN0KEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QpCiAgICAgcmV0dXJuIHR5
cGU7CiB9CiAKLVdlYktpdEFjY2Vzc2libGUqIHdlYmtpdEFjY2Vzc2libGVOZXcoQWNjZXNzaWJp
bGl0eU9iamVjdCogY29yZU9iamVjdCkKK1dlYktpdEFjY2Vzc2libGUqIHdlYmtpdEFjY2Vzc2li
bGVOZXcoQVhDb3JlT2JqZWN0KiBjb3JlT2JqZWN0KQogewogICAgIGF1dG8qIG9iamVjdCA9IEFU
S19PQkpFQ1QoZ19vYmplY3RfbmV3KGFjY2Vzc2liaWxpdHlUeXBlRnJvbU9iamVjdChjb3JlT2Jq
ZWN0KSwgbnVsbHB0cikpOwogICAgIGF0a19vYmplY3RfaW5pdGlhbGl6ZShvYmplY3QsIGNvcmVP
YmplY3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2Vi
S2l0QWNjZXNzaWJsZS5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0
QWNjZXNzaWJsZS5oCmluZGV4IDcyZTExNjUxYjdlOTljNTY0MmJjMjYxYjEyNDAxNDJhMzVkNTBj
YTguLjhiMTk0NjU2M2E3NGZhODVkNWQyZWViNDI5MmZlNjY4Y2E2ZTA2MWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGUuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlLmgKQEAg
LTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewotY2xhc3MgQWNjZXNzaWJpbGl0eU9iamVjdDsKK2NsYXNzIEFYQ29yZU9i
amVjdDsKIH0KIAogR19CRUdJTl9ERUNMUwpAQCAtNzUsOSArNzUsOSBAQCBlbnVtIEF0a0NhY2hl
ZFByb3BlcnR5IHsKICAgICBBdGtDYWNoZWRJbWFnZURlc2NyaXB0aW9uCiB9OwogCi1XZWJLaXRB
Y2Nlc3NpYmxlKiB3ZWJraXRBY2Nlc3NpYmxlTmV3KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmpl
Y3QqKTsKK1dlYktpdEFjY2Vzc2libGUqIHdlYmtpdEFjY2Vzc2libGVOZXcoV2ViQ29yZTo6QVhD
b3JlT2JqZWN0Kik7CiAKLVdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3QmIHdlYmtpdEFjY2Vz
c2libGVHZXRBY2Nlc3NpYmlsaXR5T2JqZWN0KFdlYktpdEFjY2Vzc2libGUqKTsKK1dlYkNvcmU6
OkFYQ29yZU9iamVjdCYgd2Via2l0QWNjZXNzaWJsZUdldEFjY2Vzc2liaWxpdHlPYmplY3QoV2Vi
S2l0QWNjZXNzaWJsZSopOwogCiB2b2lkIHdlYmtpdEFjY2Vzc2libGVEZXRhY2goV2ViS2l0QWNj
ZXNzaWJsZSopOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lv
cy9BWE9iamVjdENhY2hlSU9TLm1tIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3Mv
QVhPYmplY3RDYWNoZUlPUy5tbQppbmRleCBkZjU4ZWZhNzY1M2Y2ODA1MzFjOGNlOTM5MzllN2Iw
NjYzMTczODNhLi44ZDVhMWNmYTBmYTg3YTcwNmIyYjhkZmQ2MTNkYWVkYmFiN2NhN2U3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9BWE9iamVjdENhY2hlSU9T
Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL0FYT2JqZWN0Q2FjaGVJ
T1MubW0KQEAgLTQyLDcgKzQyLDcgQEAgdm9pZCBBWE9iamVjdENhY2hlOjpkZXRhY2hXcmFwcGVy
KEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iaiwgQWNjZXNzaWJpbGl0eURldGFjaG0KICAgICBvYmot
PnNldFdyYXBwZXIobnVsbHB0cik7CiB9CiAKLXZvaWQgQVhPYmplY3RDYWNoZTo6YXR0YWNoV3Jh
cHBlcihBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmopCit2b2lkIEFYT2JqZWN0Q2FjaGU6OmF0dGFj
aFdyYXBwZXIoQVhDb3JlT2JqZWN0KiBvYmopCiB7CiAgICAgUmV0YWluUHRyPEFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyPiB3cmFwcGVyID0gYWRvcHROUyhbW1dlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyIGFsbG9jXSBpbml0V2l0aEFjY2Vzc2liaWxpdHlPYmplY3Q6b2JqXSk7CiAgICAg
b2JqLT5zZXRXcmFwcGVyKHdyYXBwZXIuZ2V0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlcklPUy5tbQppbmRleCA5OGY5NDAyYjg4Y2Y0OGVjMGQzMGNkNWZlM2JkZTUxZTc1ZDNl
ZjExLi4yNmRjYjBlYWI2MzU5MDQwOTExZGRhY2U1ZGI5ZjY4YzBkNDEzNWYxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlcklPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQpAQCAtMTIzLDcgKzEyMyw3IEBAIHN0YXRp
YyBOU1N0cmluZyAqIGNvbnN0IFVJQWNjZXNzaWJpbGl0eVRleHR1YWxDb250ZXh0U291cmNlQ29k
ZSA9IEAiVUlBY2Nlc3NpYmlsCiBzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqIEFj
Y2Vzc2liaWxpdHlVbmlnbm9yZWRBbmNlc3RvcihBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciAq
d3JhcHBlcikKIHsKICAgICB3aGlsZSAod3JhcHBlciAmJiAhW3dyYXBwZXIgaXNBY2Nlc3NpYmls
aXR5RWxlbWVudF0pIHsKLSAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0ID0gW3dy
YXBwZXIgYWNjZXNzaWJpbGl0eU9iamVjdF07CisgICAgICAgIEFYQ29yZU9iamVjdCogb2JqZWN0
ID0gW3dyYXBwZXIgYWNjZXNzaWJpbGl0eU9iamVjdF07CiAgICAgICAgIGlmICghb2JqZWN0KQog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIApAQCAtMTc5LDcgKzE3OSw3IEBAIHN0YXRpYyBB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciogQWNjZXNzaWJpbGl0eVVuaWdub3JlZEFuY2VzdG9y
KEFjY2Vzc2liaWxpdHlPCiAvLyBUaGlzIGlzIG5lZWRlZCBmb3IgZXh0ZXJuYWwgY2xpZW50cyB0
byBiZSBhYmxlIHRvIGNyZWF0ZSBhIHRleHQgbWFya2VyIHdpdGhvdXQgaGF2aW5nIGEgcG9pbnRl
ciB0byB0aGUgY2FjaGUuCiAtIChpZClpbml0V2l0aERhdGE6KE5TRGF0YSAqKWRhdGEgYWNjZXNz
aWJpbGl0eU9iamVjdDooQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgKil3cmFwcGVyCiB7Ci0g
ICAgV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdCogYXhPYmplY3QgPSBbd3JhcHBlciBhY2Nl
c3NpYmlsaXR5T2JqZWN0XTsgCisgICAgV2ViQ29yZTo6QVhDb3JlT2JqZWN0KiBheE9iamVjdCA9
IFt3cmFwcGVyIGFjY2Vzc2liaWxpdHlPYmplY3RdOwogICAgIGlmICghYXhPYmplY3QpCiAgICAg
ICAgIHJldHVybiBuaWw7CiAgICAgCkBAIC0yNTcsNyArMjU3LDcgQEAgc3RhdGljIEFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyKiBBY2Nlc3NpYmlsaXR5VW5pZ25vcmVkQW5jZXN0b3IoQWNjZXNz
aWJpbGl0eU8KIAogQGltcGxlbWVudGF0aW9uIFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
CiAKLS0gKGlkKWluaXRXaXRoQWNjZXNzaWJpbGl0eU9iamVjdDooQWNjZXNzaWJpbGl0eU9iamVj
dCopYXhPYmplY3QKKy0gKGlkKWluaXRXaXRoQWNjZXNzaWJpbGl0eU9iamVjdDooQVhDb3JlT2Jq
ZWN0KilheE9iamVjdAogewogICAgIHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhBY2Nlc3NpYmlsaXR5
T2JqZWN0OmF4T2JqZWN0XTsKICAgICBpZiAoIXNlbGYpCkBAIC01NTAsMzEgKzU1MCwzMSBAQCBz
dGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqIEFjY2Vzc2liaWxpdHlVbmlnbm9yZWRB
bmNlc3RvcihBY2Nlc3NpYmlsaXR5TwogCiAtIChBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciop
X2FjY2Vzc2liaWxpdHlUcmVlQW5jZXN0b3IKIHsKLSAgICBhdXRvIG1hdGNoRnVuYyA9IFtdIChj
b25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0JiBvYmplY3QpIHsKKyAgICBhdXRvIG1hdGNoRnVuYyA9
IFtdIChjb25zdCBBWENvcmVPYmplY3QmIG9iamVjdCkgewogICAgICAgICBBY2Nlc3NpYmlsaXR5
Um9sZSByb2xlID0gb2JqZWN0LnJvbGVWYWx1ZSgpOwogICAgICAgICByZXR1cm4gcm9sZSA9PSBB
Y2Nlc3NpYmlsaXR5Um9sZTo6VHJlZTsKICAgICB9OwotICAgIAotICAgIGlmIChjb25zdCBBY2Nl
c3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBBY2Nlc3NpYmlsaXR5OjpmaW5kQW5jZXN0b3I8QWNj
ZXNzaWJpbGl0eU9iamVjdD4oKm1fb2JqZWN0LCBmYWxzZSwgV1RGTW92ZShtYXRjaEZ1bmMpKSkK
KworICAgIGlmIChjb25zdCBBWENvcmVPYmplY3QqIHBhcmVudCA9IEFjY2Vzc2liaWxpdHk6OmZp
bmRBbmNlc3RvcjxBWENvcmVPYmplY3Q+KCptX29iamVjdCwgZmFsc2UsIFdURk1vdmUobWF0Y2hG
dW5jKSkpCiAgICAgICAgIHJldHVybiBwYXJlbnQtPndyYXBwZXIoKTsKICAgICByZXR1cm4gbmls
OwogfQogCiAtIChBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciopX2FjY2Vzc2liaWxpdHlMaXN0
QW5jZXN0b3IKIHsKLSAgICBhdXRvIG1hdGNoRnVuYyA9IFtdIChjb25zdCBBY2Nlc3NpYmlsaXR5
T2JqZWN0JiBvYmplY3QpIHsKKyAgICBhdXRvIG1hdGNoRnVuYyA9IFtdIChjb25zdCBBWENvcmVP
YmplY3QmIG9iamVjdCkgewogICAgICAgICBBY2Nlc3NpYmlsaXR5Um9sZSByb2xlID0gb2JqZWN0
LnJvbGVWYWx1ZSgpOwogICAgICAgICByZXR1cm4gcm9sZSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6
TGlzdCB8fCByb2xlID09IEFjY2Vzc2liaWxpdHlSb2xlOjpMaXN0Qm94OwogICAgIH07CiAgICAg
Ci0gICAgaWYgKGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudCA9IEFjY2Vzc2liaWxp
dHk6OmZpbmRBbmNlc3RvcjxBY2Nlc3NpYmlsaXR5T2JqZWN0PigqbV9vYmplY3QsIGZhbHNlLCBX
VEZNb3ZlKG1hdGNoRnVuYykpKQorICAgIGlmIChjb25zdCBBWENvcmVPYmplY3QqIHBhcmVudCA9
IEFjY2Vzc2liaWxpdHk6OmZpbmRBbmNlc3RvcjxBWENvcmVPYmplY3Q+KCptX29iamVjdCwgZmFs
c2UsIFdURk1vdmUobWF0Y2hGdW5jKSkpCiAgICAgICAgIHJldHVybiBwYXJlbnQtPndyYXBwZXIo
KTsKICAgICByZXR1cm4gbmlsOwogfQogCiAtIChBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciop
X2FjY2Vzc2liaWxpdHlBcnRpY2xlQW5jZXN0b3IKIHsKLSAgICBpZiAoY29uc3QgQWNjZXNzaWJp
bGl0eU9iamVjdCogcGFyZW50ID0gQWNjZXNzaWJpbGl0eTo6ZmluZEFuY2VzdG9yPEFjY2Vzc2li
aWxpdHlPYmplY3Q+KCptX29iamVjdCwgZmFsc2UsIFtdIChjb25zdCBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0JiBvYmplY3QpIHsKKyAgICBpZiAoY29uc3QgQVhDb3JlT2JqZWN0KiBwYXJlbnQgPSBBY2Nl
c3NpYmlsaXR5OjpmaW5kQW5jZXN0b3I8QVhDb3JlT2JqZWN0PigqbV9vYmplY3QsIGZhbHNlLCBb
XSAoY29uc3QgQVhDb3JlT2JqZWN0JiBvYmplY3QpIHsKICAgICAgICAgcmV0dXJuIG9iamVjdC5y
b2xlVmFsdWUoKSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6RG9jdW1lbnRBcnRpY2xlOwogICAgIH0p
KQogICAgICAgICByZXR1cm4gcGFyZW50LT53cmFwcGVyKCk7CkBAIC01ODMsNyArNTgzLDcgQEAg
c3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKiBBY2Nlc3NpYmlsaXR5VW5pZ25vcmVk
QW5jZXN0b3IoQWNjZXNzaWJpbGl0eU8KIAogLSAoQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIq
KV9hY2Nlc3NpYmlsaXR5TGFuZG1hcmtBbmNlc3RvcgogewotICAgIGlmIChjb25zdCBBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBBY2Nlc3NpYmlsaXR5OjpmaW5kQW5jZXN0b3I8QWNjZXNz
aWJpbGl0eU9iamVjdD4oKm1fb2JqZWN0LCBmYWxzZSwgW3NlbGZdIChjb25zdCBBY2Nlc3NpYmls
aXR5T2JqZWN0JiBvYmplY3QpIHsKKyAgICBpZiAoY29uc3QgQVhDb3JlT2JqZWN0KiBwYXJlbnQg
PSBBY2Nlc3NpYmlsaXR5OjpmaW5kQW5jZXN0b3I8QVhDb3JlT2JqZWN0PigqbV9vYmplY3QsIGZh
bHNlLCBbc2VsZl0gKGNvbnN0IEFYQ29yZU9iamVjdCYgb2JqZWN0KSB7CiAgICAgICAgIHJldHVy
biBbc2VsZiBfYWNjZXNzaWJpbGl0eUlzTGFuZG1hcmtSb2xlOm9iamVjdC5yb2xlVmFsdWUoKV07
CiAgICAgfSkpCiAgICAgICAgIHJldHVybiBwYXJlbnQtPndyYXBwZXIoKTsKQEAgLTU5Miw3ICs1
OTIsNyBAQCBzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqIEFjY2Vzc2liaWxpdHlV
bmlnbm9yZWRBbmNlc3RvcihBY2Nlc3NpYmlsaXR5TwogCiAtIChBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlciopX2FjY2Vzc2liaWxpdHlUYWJsZUFuY2VzdG9yCiB7Ci0gICAgaWYgKGNvbnN0IEFj
Y2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudCA9IEFjY2Vzc2liaWxpdHk6OmZpbmRBbmNlc3RvcjxB
Y2Nlc3NpYmlsaXR5T2JqZWN0PigqbV9vYmplY3QsIGZhbHNlLCBbXSAoY29uc3QgQWNjZXNzaWJp
bGl0eU9iamVjdCYgb2JqZWN0KSB7CisgICAgaWYgKGNvbnN0IEFYQ29yZU9iamVjdCogcGFyZW50
ID0gQWNjZXNzaWJpbGl0eTo6ZmluZEFuY2VzdG9yPEFYQ29yZU9iamVjdD4oKm1fb2JqZWN0LCBm
YWxzZSwgW10gKGNvbnN0IEFYQ29yZU9iamVjdCYgb2JqZWN0KSB7CiAgICAgICAgIHJldHVybiBv
YmplY3Qucm9sZVZhbHVlKCkgPT0gQWNjZXNzaWJpbGl0eVJvbGU6OlRhYmxlOwogICAgIH0pKQog
ICAgICAgICByZXR1cm4gcGFyZW50LT53cmFwcGVyKCk7CkBAIC02MDEsMTQgKzYwMSwxNCBAQCBz
dGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqIEFjY2Vzc2liaWxpdHlVbmlnbm9yZWRB
bmNlc3RvcihBY2Nlc3NpYmlsaXR5TwogCiAtIChCT09MKV9hY2Nlc3NpYmlsaXR5SXNJblRhYmxl
Q2VsbAogewotICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpmaW5kQW5jZXN0b3I8QWNjZXNzaWJp
bGl0eU9iamVjdD4oKm1fb2JqZWN0LCBmYWxzZSwgW10gKGNvbnN0IEFjY2Vzc2liaWxpdHlPYmpl
Y3QmIG9iamVjdCkgeworICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpmaW5kQW5jZXN0b3I8QVhD
b3JlT2JqZWN0PigqbV9vYmplY3QsIGZhbHNlLCBbXSAoY29uc3QgQVhDb3JlT2JqZWN0JiBvYmpl
Y3QpIHsKICAgICAgICAgcmV0dXJuIG9iamVjdC5yb2xlVmFsdWUoKSA9PSBBY2Nlc3NpYmlsaXR5
Um9sZTo6Q2VsbDsKICAgICB9KSAhPSBudWxscHRyOwogfQogCiAtIChBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlciopX2FjY2Vzc2liaWxpdHlGaWVsZHNldEFuY2VzdG9yCiB7Ci0gICAgaWYgKGNv
bnN0IEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudCA9IEFjY2Vzc2liaWxpdHk6OmZpbmRBbmNl
c3RvcjxBY2Nlc3NpYmlsaXR5T2JqZWN0PigqbV9vYmplY3QsIGZhbHNlLCBbXSAoY29uc3QgQWNj
ZXNzaWJpbGl0eU9iamVjdCYgb2JqZWN0KSB7CisgICAgaWYgKGNvbnN0IEFYQ29yZU9iamVjdCog
cGFyZW50ID0gQWNjZXNzaWJpbGl0eTo6ZmluZEFuY2VzdG9yPEFYQ29yZU9iamVjdD4oKm1fb2Jq
ZWN0LCBmYWxzZSwgW10gKGNvbnN0IEFYQ29yZU9iamVjdCYgb2JqZWN0KSB7CiAgICAgICAgIHJl
dHVybiBvYmplY3QuaXNGaWVsZHNldCgpOwogICAgIH0pKQogICAgICAgICByZXR1cm4gcGFyZW50
LT53cmFwcGVyKCk7CkBAIC02MTcsNyArNjE3LDcgQEAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyKiBBY2Nlc3NpYmlsaXR5VW5pZ25vcmVkQW5jZXN0b3IoQWNjZXNzaWJpbGl0eU8K
IAogLSAoQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqKV9hY2Nlc3NpYmlsaXR5RnJhbWVBbmNl
c3RvcgogewotICAgIGF1dG8qIHBhcmVudCA9IEFjY2Vzc2liaWxpdHk6OmZpbmRBbmNlc3RvcjxB
Y2Nlc3NpYmlsaXR5T2JqZWN0PigqbV9vYmplY3QsIGZhbHNlLCBbXSAoY29uc3QgQWNjZXNzaWJp
bGl0eU9iamVjdCYgb2JqZWN0KSB7CisgICAgYXV0byogcGFyZW50ID0gQWNjZXNzaWJpbGl0eTo6
ZmluZEFuY2VzdG9yPEFYQ29yZU9iamVjdD4oKm1fb2JqZWN0LCBmYWxzZSwgW10gKGNvbnN0IEFY
Q29yZU9iamVjdCYgb2JqZWN0KSB7CiAgICAgICAgIHJldHVybiBvYmplY3QuaXNXZWJBcmVhKCk7
CiAgICAgfSk7CiAgICAgaWYgKCFwYXJlbnQpCkBAIC02MzIsNyArNjMyLDcgQEAgc3RhdGljIEFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKiBBY2Nlc3NpYmlsaXR5VW5pZ25vcmVkQW5jZXN0b3Io
QWNjZXNzaWJpbGl0eU8KICAgICAKICAgICAvLyBUcmFpdCBpbmZvcm1hdGlvbiBhbHNvIG5lZWRz
IHRvIGJlIGdhdGhlcmVkIGZyb20gdGhlIHBhcmVudHMgYWJvdmUgdGhlIG9iamVjdC4KICAgICAv
LyBUaGUgcGFyZW50T2JqZWN0IGlzIG5lZWRlZCBpbnN0ZWFkIG9mIHRoZSB1bmlnbm9yZWRQYXJl
bnRPYmplY3QsIGJlY2F1c2UgYSB0YWJsZSBtaWdodCBiZSBpZ25vcmVkLCBidXQgaW5mb3JtYXRp
b24gc3RpbGwgbmVlZHMgdG8gYmUgZ2F0aGVyZWQgZnJvbSBpdC4gICAgCi0gICAgZm9yIChBY2Nl
c3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBtX29iamVjdC0+cGFyZW50T2JqZWN0KCk7IHBhcmVu
dCAhPSBuaWw7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50T2JqZWN0KCkpIHsKKyAgICBmb3IgKGF1
dG8qIHBhcmVudCA9IG1fb2JqZWN0LT5wYXJlbnRPYmplY3QoKTsgcGFyZW50ICE9IG5pbDsgcGFy
ZW50ID0gcGFyZW50LT5wYXJlbnRPYmplY3QoKSkgewogICAgICAgICBBY2Nlc3NpYmlsaXR5Um9s
ZSBwYXJlbnRSb2xlID0gcGFyZW50LT5yb2xlVmFsdWUoKTsKICAgICAgICAgaWYgKHBhcmVudFJv
bGUgPT0gQWNjZXNzaWJpbGl0eVJvbGU6OldlYkFyZWEpCiAgICAgICAgICAgICBicmVhazsKQEAg
LTExODIsNyArMTE4Miw3IEBAIHN0YXRpYyB2b2lkIGFwcGVuZFN0cmluZ1RvUmVzdWx0KE5TTXV0
YWJsZVN0cmluZyAqcmVzdWx0LCBOU1N0cmluZyAqc3RyaW5nKQogLSAoQWNjZXNzaWJpbGl0eVRh
YmxlQ2VsbCopdGFibGVDZWxsUGFyZW50CiB7CiAgICAgLy8gRmluZCBpZiB0aGlzIGVsZW1lbnQg
aXMgaW4gYSB0YWJsZSBjZWxsLgotICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQg
PSBBY2Nlc3NpYmlsaXR5OjpmaW5kQW5jZXN0b3I8QWNjZXNzaWJpbGl0eU9iamVjdD4oKm1fb2Jq
ZWN0LCB0cnVlLCBbXSAoY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCYgb2JqZWN0KSB7CisgICAg
aWYgKEFYQ29yZU9iamVjdCogcGFyZW50ID0gQWNjZXNzaWJpbGl0eTo6ZmluZEFuY2VzdG9yPEFY
Q29yZU9iamVjdD4oKm1fb2JqZWN0LCB0cnVlLCBbXSAoY29uc3QgQVhDb3JlT2JqZWN0JiBvYmpl
Y3QpIHsKICAgICAgICAgcmV0dXJuIG9iamVjdC5pc1RhYmxlQ2VsbCgpOwogICAgIH0pKQogICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbCo+KHBhcmVudCk7
CkBAIC0xMTkyLDcgKzExOTIsNyBAQCBzdGF0aWMgdm9pZCBhcHBlbmRTdHJpbmdUb1Jlc3VsdChO
U011dGFibGVTdHJpbmcgKnJlc3VsdCwgTlNTdHJpbmcgKnN0cmluZykKIC0gKEFjY2Vzc2liaWxp
dHlUYWJsZSopdGFibGVQYXJlbnQKIHsKICAgICAvLyBGaW5kIGlmIHRoZSBwYXJlbnQgdGFibGUg
Zm9yIHRoZSB0YWJsZSBjZWxsLgotICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQg
PSBBY2Nlc3NpYmlsaXR5OjpmaW5kQW5jZXN0b3I8QWNjZXNzaWJpbGl0eU9iamVjdD4oKm1fb2Jq
ZWN0LCB0cnVlLCBbXSAoY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCYgb2JqZWN0KSB7CisgICAg
aWYgKEFYQ29yZU9iamVjdCogcGFyZW50ID0gQWNjZXNzaWJpbGl0eTo6ZmluZEFuY2VzdG9yPEFY
Q29yZU9iamVjdD4oKm1fb2JqZWN0LCB0cnVlLCBbXSAoY29uc3QgQVhDb3JlT2JqZWN0JiBvYmpl
Y3QpIHsKICAgICAgICAgcmV0dXJuIGlzPEFjY2Vzc2liaWxpdHlUYWJsZT4ob2JqZWN0KSAmJiBk
b3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KG9iamVjdCkuaXNFeHBvc2FibGVUaHJvdWdoQWNj
ZXNzaWJpbGl0eSgpOwogICAgIH0pKQogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QWNjZXNz
aWJpbGl0eVRhYmxlKj4ocGFyZW50KTsKQEAgLTEyMDQsNyArMTIwNCw3IEBAIHN0YXRpYyB2b2lk
IGFwcGVuZFN0cmluZ1RvUmVzdWx0KE5TTXV0YWJsZVN0cmluZyAqcmVzdWx0LCBOU1N0cmluZyAq
c3RyaW5nKQogICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAg
ICAgIHJldHVybiBuaWw7CiAKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiB0aXRsZUVsZW1lbnQg
PSBtX29iamVjdC0+dGl0bGVVSUVsZW1lbnQoKTsKKyAgICBBWENvcmVPYmplY3QqIHRpdGxlRWxl
bWVudCA9IG1fb2JqZWN0LT50aXRsZVVJRWxlbWVudCgpOwogICAgIGlmICh0aXRsZUVsZW1lbnQp
CiAgICAgICAgIHJldHVybiB0aXRsZUVsZW1lbnQtPndyYXBwZXIoKTsKIApAQCAtMTM5OCw3ICsx
Mzk4LDcgQEAgc3RhdGljIHZvaWQgYXBwZW5kU3RyaW5nVG9SZXN1bHQoTlNNdXRhYmxlU3RyaW5n
ICpyZXN1bHQsIE5TU3RyaW5nICpzdHJpbmcpCiAgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vz
c2liaWxpdHlDYWxsXSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIGlmIChhdXRvKiBwYXJl
bnQgPSBBY2Nlc3NpYmlsaXR5OjpmaW5kQW5jZXN0b3I8QWNjZXNzaWJpbGl0eU9iamVjdD4oKm1f
b2JqZWN0LCB0cnVlLCBbXSAoY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCYgb2JqZWN0KSB7Cisg
ICAgaWYgKGF1dG8qIHBhcmVudCA9IEFjY2Vzc2liaWxpdHk6OmZpbmRBbmNlc3RvcjxBWENvcmVP
YmplY3Q+KCptX29iamVjdCwgdHJ1ZSwgW10gKGNvbnN0IEFYQ29yZU9iamVjdCYgb2JqZWN0KSB7
CiAgICAgICAgIHJldHVybiBvYmplY3Quc3VwcG9ydHNEYXRldGltZUF0dHJpYnV0ZSgpOwogICAg
IH0pKQogICAgICAgICByZXR1cm4gcGFyZW50LT5kYXRldGltZUF0dHJpYnV0ZVZhbHVlKCk7CkBA
IC0xOTY5LDMxICsxOTY5LDMxIEBAIHN0YXRpYyBSZW5kZXJPYmplY3QqIHJlbmRlcmVyRm9yVmll
dyhXQUtWaWV3KiB2aWV3KQogICAgIHJldHVybiBtX29iamVjdC0+c2Nyb2xsVmlzaWJsZUNvbnRl
bnRSZWN0KCk7CiB9CiAKLS0gKEFjY2Vzc2liaWxpdHlPYmplY3QqKWRldGFpbFBhcmVudEZvclN1
bW1hcnlPYmplY3Q6KEFjY2Vzc2liaWxpdHlPYmplY3QqKW9iamVjdAorLSAoQVhDb3JlT2JqZWN0
KilkZXRhaWxQYXJlbnRGb3JTdW1tYXJ5T2JqZWN0OihBWENvcmVPYmplY3QqKW9iamVjdAogewog
ICAgIC8vIFVzZSB0aGlzIHRvIGNoZWNrIGlmIGFuIG9iamVjdCBpcyB0aGUgY2hpbGQgb2YgYSBz
dW1tYXJ5IG9iamVjdC4KICAgICAvLyBBbmQgcmV0dXJuIHRoZSBzdW1tYXJ5J3MgcGFyZW50LCB3
aGljaCBpcyB0aGUgZXhwYW5kYWJsZSBkZXRhaWxzIG9iamVjdC4KLSAgICBpZiAoY29uc3QgQWNj
ZXNzaWJpbGl0eU9iamVjdCogc3VtbWFyeSA9IEFjY2Vzc2liaWxpdHk6OmZpbmRBbmNlc3RvcjxB
Y2Nlc3NpYmlsaXR5T2JqZWN0Pigqb2JqZWN0LCB0cnVlLCBbXSAoY29uc3QgQWNjZXNzaWJpbGl0
eU9iamVjdCYgb2JqZWN0KSB7CisgICAgaWYgKGNvbnN0IEFYQ29yZU9iamVjdCogc3VtbWFyeSA9
IEFjY2Vzc2liaWxpdHk6OmZpbmRBbmNlc3RvcjxBWENvcmVPYmplY3Q+KCpvYmplY3QsIHRydWUs
IFtdIChjb25zdCBBWENvcmVPYmplY3QmIG9iamVjdCkgewogICAgICAgICByZXR1cm4gb2JqZWN0
Lmhhc1RhZ05hbWUoc3VtbWFyeVRhZyk7CiAgICAgfSkpCiAgICAgICAgIHJldHVybiBzdW1tYXJ5
LT5wYXJlbnRPYmplY3QoKTsKICAgICByZXR1cm4gbmlsOwogfQogCi0tIChBY2Nlc3NpYmlsaXR5
T2JqZWN0KilkZXRhaWxQYXJlbnRGb3JPYmplY3Q6KEFjY2Vzc2liaWxpdHlPYmplY3QqKW9iamVj
dAorLSAoQVhDb3JlT2JqZWN0KilkZXRhaWxQYXJlbnRGb3JPYmplY3Q6KEFjY2Vzc2liaWxpdHlP
YmplY3QqKW9iamVjdAogewogICAgIC8vIFVzZSB0aGlzIHRvIGNoZWNrIGlmIGFuIG9iamVjdCBp
cyBpbnNpZGUgYSBkZXRhaWxzIG9iamVjdC4KLSAgICBpZiAoY29uc3QgQWNjZXNzaWJpbGl0eU9i
amVjdCogZGV0YWlscyA9IEFjY2Vzc2liaWxpdHk6OmZpbmRBbmNlc3RvcjxBY2Nlc3NpYmlsaXR5
T2JqZWN0Pigqb2JqZWN0LCB0cnVlLCBbXSAoY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCYgb2Jq
ZWN0KSB7CisgICAgaWYgKEFYQ29yZU9iamVjdCogZGV0YWlscyA9IEFjY2Vzc2liaWxpdHk6OmZp
bmRBbmNlc3RvcjxBWENvcmVPYmplY3Q+KCpvYmplY3QsIHRydWUsIFtdIChjb25zdCBBWENvcmVP
YmplY3QmIG9iamVjdCkgewogICAgICAgICByZXR1cm4gb2JqZWN0Lmhhc1RhZ05hbWUoZGV0YWls
c1RhZyk7CiAgICAgfSkpCi0gICAgICAgIHJldHVybiBjb25zdF9jYXN0PEFjY2Vzc2liaWxpdHlP
YmplY3QqPihkZXRhaWxzKTsKKyAgICAgICAgcmV0dXJuIGRldGFpbHM7CiAgICAgcmV0dXJuIG5p
bDsKIH0KIAotLSAoQWNjZXNzaWJpbGl0eU9iamVjdCopdHJlZUl0ZW1QYXJlbnRGb3JPYmplY3Q6
KEFjY2Vzc2liaWxpdHlPYmplY3QqKW9iamVjdAorLSAoQVhDb3JlT2JqZWN0Kil0cmVlSXRlbVBh
cmVudEZvck9iamVjdDooQVhDb3JlT2JqZWN0KilvYmplY3QKIHsKICAgICAvLyBVc2UgdGhpcyB0
byBjaGVjayBpZiBhbiBvYmplY3QgaXMgaW5zaWRlIGEgdHJlZWl0ZW0gb2JqZWN0LgotICAgIGlm
IChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBBY2Nlc3NpYmlsaXR5OjpmaW5kQW5jZXN0
b3I8QWNjZXNzaWJpbGl0eU9iamVjdD4oKm9iamVjdCwgdHJ1ZSwgW10gKGNvbnN0IEFjY2Vzc2li
aWxpdHlPYmplY3QmIG9iamVjdCkgeworICAgIGlmIChBWENvcmVPYmplY3QqIHBhcmVudCA9IEFj
Y2Vzc2liaWxpdHk6OmZpbmRBbmNlc3RvcjxBWENvcmVPYmplY3Q+KCpvYmplY3QsIHRydWUsIFtd
IChjb25zdCBBWENvcmVPYmplY3QmIG9iamVjdCkgewogICAgICAgICByZXR1cm4gb2JqZWN0LnJv
bGVWYWx1ZSgpID09IEFjY2Vzc2liaWxpdHlSb2xlOjpUcmVlSXRlbTsKICAgICB9KSkKICAgICAg
ICAgcmV0dXJuIHBhcmVudDsKQEAgLTIyMDcsMTEgKzIyMDcsMTEgQEAgc3RhdGljIHZvaWQgQVhB
dHRyaWJ1dGVTdHJpbmdTZXRTdHlsZShOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3Ry
aW5nLCBSZW4KIAogICAgIC8vIEFkZCBjb2RlIGNvbnRleHQgaWYgdGhpcyBub2RlIGlzIHdpdGhp
biBhIDxjb2RlPiBibG9jay4KICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBheE9iamVjdCA9IHJl
bmRlcmVyLT5kb2N1bWVudCgpLmF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUocmVuZGVyZXIp
OwotICAgIGF1dG8gbWF0Y2hGdW5jID0gW10gKGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3QmIG9i
amVjdCkgeworICAgIGF1dG8gbWF0Y2hGdW5jID0gW10gKGNvbnN0IEFYQ29yZU9iamVjdCYgb2Jq
ZWN0KSB7CiAgICAgICAgIHJldHVybiBvYmplY3Qubm9kZSgpICYmIG9iamVjdC5ub2RlKCktPmhh
c1RhZ05hbWUoY29kZVRhZyk7CiAgICAgfTsKIAotICAgIGlmIChjb25zdCBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBwYXJlbnQgPSBBY2Nlc3NpYmlsaXR5OjpmaW5kQW5jZXN0b3I8QWNjZXNzaWJpbGl0
eU9iamVjdD4oKmF4T2JqZWN0LCB0cnVlLCBXVEZNb3ZlKG1hdGNoRnVuYykpKQorICAgIGlmIChj
b25zdCBBWENvcmVPYmplY3QqIHBhcmVudCA9IEFjY2Vzc2liaWxpdHk6OmZpbmRBbmNlc3RvcjxB
WENvcmVPYmplY3Q+KCpheE9iamVjdCwgdHJ1ZSwgV1RGTW92ZShtYXRjaEZ1bmMpKSkKICAgICAg
ICAgW2F0dHJTdHJpbmcgYWRkQXR0cmlidXRlOlVJQWNjZXNzaWJpbGl0eVRleHRBdHRyaWJ1dGVD
b250ZXh0IHZhbHVlOlVJQWNjZXNzaWJpbGl0eVRleHR1YWxDb250ZXh0U291cmNlQ29kZSByYW5n
ZTpyYW5nZV07CiB9CiAKQEAgLTIyODIsNyArMjI4Miw3IEBAIHN0YXRpYyB2b2lkIEFYQXR0cmli
dXRlZFN0cmluZ0FwcGVuZFRleHQoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0clN0cmlu
ZywKICAgICAgICAgICAgICAgICBpZiAoW3NlbGYgX2FkZEFjY2Vzc2liaWxpdHlPYmplY3Q6aGVh
ZGluZ09iamVjdCB0b1RleHRNYXJrZXJBcnJheTphcnJheV0pCiAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIFN0cmluZyBsaXN0
TWFya2VyVGV4dCA9IG1fb2JqZWN0LT5saXN0TWFya2VyVGV4dEZvck5vZGVBbmRQb3NpdGlvbigm
bm9kZSwgVmlzaWJsZVBvc2l0aW9uKGl0LnJhbmdlKCktPnN0YXJ0UG9zaXRpb24oKSkpOworICAg
ICAgICAgICAgICAgIFN0cmluZyBsaXN0TWFya2VyVGV4dCA9IEFjY2Vzc2liaWxpdHlPYmplY3Q6
Omxpc3RNYXJrZXJUZXh0Rm9yTm9kZUFuZFBvc2l0aW9uKCZub2RlLCBWaXNpYmxlUG9zaXRpb24o
aXQucmFuZ2UoKS0+c3RhcnRQb3NpdGlvbigpKSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgaWYgKCFsaXN0TWFya2VyVGV4dC5pc0VtcHR5KCkpIAogICAgICAgICAgICAgICAg
ICAgICBbYXJyYXkgYWRkT2JqZWN0Omxpc3RNYXJrZXJUZXh0XTsKQEAgLTIyOTEsNyArMjI5MSw3
IEBAIHN0YXRpYyB2b2lkIEFYQXR0cmlidXRlZFN0cmluZ0FwcGVuZFRleHQoTlNNdXRhYmxlQXR0
cmlidXRlZFN0cmluZyogYXR0clN0cmluZywKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgbGlzdE1hcmtlclRleHQg
PSBtX29iamVjdC0+bGlzdE1hcmtlclRleHRGb3JOb2RlQW5kUG9zaXRpb24oJm5vZGUsIFZpc2li
bGVQb3NpdGlvbihpdC5yYW5nZSgpLT5zdGFydFBvc2l0aW9uKCkpKTsKKyAgICAgICAgICAgICAg
ICBTdHJpbmcgbGlzdE1hcmtlclRleHQgPSBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpsaXN0TWFya2Vy
VGV4dEZvck5vZGVBbmRQb3NpdGlvbigmbm9kZSwgVmlzaWJsZVBvc2l0aW9uKGl0LnJhbmdlKCkt
PnN0YXJ0UG9zaXRpb24oKSkpOwogCiAgICAgICAgICAgICAgICAgaWYgKCFsaXN0TWFya2VyVGV4
dC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICAgTlNNdXRhYmxlQXR0cmlidXRlZFN0
cmluZyogYXR0clN0cmluZyA9IFtbTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5p
dF07CkBAIC0yOTQxLDEwICsyOTQxLDEwIEBAIHN0YXRpYyB2b2lkIEFYQXR0cmlidXRlZFN0cmlu
Z0FwcGVuZFRleHQoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0clN0cmluZywKICAgICAK
ICAgICAvLyBTaW5jZSBkZXRhaWxzIGVsZW1lbnQgaXMgaWdub3JlZCBvbiBpT1MsIHdlIHNob3Vs
ZCBleHBvc2UgdGhlIGV4cGFuZGVkIHN0YXR1cyBvbiBpdHMKICAgICAvLyBzdW1tYXJ5J3MgYWNj
ZXNzaWJsZSBjaGlsZHJlbi4KLSAgICBpZiAoQWNjZXNzaWJpbGl0eU9iamVjdCogZGV0YWlsUGFy
ZW50ID0gW3NlbGYgZGV0YWlsUGFyZW50Rm9yU3VtbWFyeU9iamVjdDptX29iamVjdF0pCisgICAg
aWYgKEFYQ29yZU9iamVjdCogZGV0YWlsUGFyZW50ID0gW3NlbGYgZGV0YWlsUGFyZW50Rm9yU3Vt
bWFyeU9iamVjdDptX29iamVjdF0pCiAgICAgICAgIHJldHVybiBkZXRhaWxQYXJlbnQtPnN1cHBv
cnRzRXhwYW5kZWQoKTsKICAgICAKLSAgICBpZiAoQWNjZXNzaWJpbGl0eU9iamVjdCogdHJlZUl0
ZW1QYXJlbnQgPSBbc2VsZiB0cmVlSXRlbVBhcmVudEZvck9iamVjdDptX29iamVjdF0pCisgICAg
aWYgKEFYQ29yZU9iamVjdCogdHJlZUl0ZW1QYXJlbnQgPSBbc2VsZiB0cmVlSXRlbVBhcmVudEZv
ck9iamVjdDptX29iamVjdF0pCiAgICAgICAgIHJldHVybiB0cmVlSXRlbVBhcmVudC0+c3VwcG9y
dHNFeHBhbmRlZCgpOwogICAgIAogICAgIHJldHVybiBtX29iamVjdC0+c3VwcG9ydHNFeHBhbmRl
ZCgpOwpAQCAtMjk1NywxMCArMjk1NywxMCBAQCBzdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZWRTdHJp
bmdBcHBlbmRUZXh0KE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcsCiAKICAg
ICAvLyBTaW5jZSBkZXRhaWxzIGVsZW1lbnQgaXMgaWdub3JlZCBvbiBpT1MsIHdlIHNob3VsZCBl
eHBvc2UgdGhlIGV4cGFuZGVkIHN0YXR1cyBvbiBpdHMKICAgICAvLyBzdW1tYXJ5J3MgYWNjZXNz
aWJsZSBjaGlsZHJlbi4KLSAgICBpZiAoQWNjZXNzaWJpbGl0eU9iamVjdCogZGV0YWlsUGFyZW50
ID0gW3NlbGYgZGV0YWlsUGFyZW50Rm9yU3VtbWFyeU9iamVjdDptX29iamVjdF0pCisgICAgaWYg
KEFYQ29yZU9iamVjdCogZGV0YWlsUGFyZW50ID0gW3NlbGYgZGV0YWlsUGFyZW50Rm9yU3VtbWFy
eU9iamVjdDptX29iamVjdF0pCiAgICAgICAgIHJldHVybiBkZXRhaWxQYXJlbnQtPmlzRXhwYW5k
ZWQoKTsKICAgICAKLSAgICBpZiAoQWNjZXNzaWJpbGl0eU9iamVjdCogdHJlZUl0ZW1QYXJlbnQg
PSBbc2VsZiB0cmVlSXRlbVBhcmVudEZvck9iamVjdDptX29iamVjdF0pCisgICAgaWYgKEFYQ29y
ZU9iamVjdCogdHJlZUl0ZW1QYXJlbnQgPSBbc2VsZiB0cmVlSXRlbVBhcmVudEZvck9iamVjdDpt
X29iamVjdF0pCiAgICAgICAgIHJldHVybiB0cmVlSXRlbVBhcmVudC0+aXNFeHBhbmRlZCgpOwog
ICAgIAogICAgIHJldHVybiBtX29iamVjdC0+aXNFeHBhbmRlZCgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRy
ZWUuY3BwCmluZGV4IDU4NmFkZjA2NzJmNzZlYTM1OGU5ZGIxZDdiODA1NmYyMjM3YTA2OTguLmNm
Zjk3MDdlMDU4NWE4ZjU2N2M1OWMxNjlmOTdmOGYzNGU2NWVkYjcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRUcmVlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVk
VHJlZS5jcHAKQEAgLTExNCwxMCArMTE0LDExIEBAIFJlZlB0cjxBWElzb2xhdGVkVHJlZU5vZGU+
IEFYSXNvbGF0ZWRUcmVlOjpyb290Tm9kZSgpCiAgICAgcmV0dXJuIG5vZGVGb3JJRChtX3Jvb3RO
b2RlSUQpOwogfQogCi12b2lkIEFYSXNvbGF0ZWRUcmVlOjpzZXRSb290Tm9kZUlEKEFYSUQgYXhJ
RCkKK3ZvaWQgQVhJc29sYXRlZFRyZWU6OnNldFJvb3QoUmVmPEFYSXNvbGF0ZWRUcmVlTm9kZT4m
IHJvb3QpCiB7CiAgICAgTG9ja0hvbGRlciBsb2NrZXIgeyBtX2NoYW5nZUxvZ0xvY2sgfTsKLSAg
ICBtX3BlbmRpbmdSb290Tm9kZUlEID0gYXhJRDsKKyAgICBtX3Jvb3ROb2RlSUQgPSByb290LT5v
YmplY3RJRCgpOworICAgIG1fcmVhZGVyVGhyZWFkTm9kZU1hcC5hZGQocm9vdC0+b2JqZWN0SUQo
KSwgV1RGTW92ZShyb290KSk7CiB9CiAgICAgCiB2b2lkIEFYSXNvbGF0ZWRUcmVlOjpzZXRGb2N1
c2VkTm9kZUlEKEFYSUQgYXhJRCkKQEAgLTE1MCwxMSArMTUxLDEwIEBAIHZvaWQgQVhJc29sYXRl
ZFRyZWU6OmFwcGx5UGVuZGluZ0NoYW5nZXMoKQogCiAgICAgLy8gV2UgZG9uJ3QgY2xlYXIgdGhl
IHBlbmRpbmcgSURzIGJlYWNhdXNlIGlmIHRoZSBuZXh0IHJvdW5kIG9mIHVwZGF0ZXMgZG9lcyBu
b3QgbW9kaWZ5IHRoZW0sIHRoZW4gdGhleSBzdGF5IHRoZSBzYW1lCiAgICAgLy8gdmFsdWUgd2l0
aG91dCBleHRyYSBib29ra2VlcGluZy4KLSAgICBtX3Jvb3ROb2RlSUQgPSBtX3BlbmRpbmdSb290
Tm9kZUlEOwogICAgIG1fZm9jdXNlZE5vZGVJRCA9IG1fcGVuZGluZ0ZvY3VzZWROb2RlSUQ7Ci0g
ICAgCisKICAgICBmb3IgKGF1dG8mIGl0ZW0gOiBhcHBlbmRDb3B5KQotICAgICAgICBtX3JlYWRl
clRocmVhZE5vZGVNYXAuYWRkKGl0ZW0tPmlkZW50aWZpZXIoKSwgV1RGTW92ZShpdGVtKSk7Cisg
ICAgICAgIG1fcmVhZGVyVGhyZWFkTm9kZU1hcC5hZGQoaXRlbS0+b2JqZWN0SUQoKSwgV1RGTW92
ZShpdGVtKSk7CiAKICAgICBmb3IgKGF1dG8gaXRlbSA6IHJlbW92ZUNvcHkpCiAgICAgICAgIG1f
cmVhZGVyVGhyZWFkTm9kZU1hcC5yZW1vdmUoaXRlbSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZS5oIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWUuaAppbmRl
eCA2YWJkNzgzYzExMmUxZmI2OWQ0NWM1NzlmYWNmZWRhZDkyMjM1NjI5Li5kYWYzM2ZjMGQ3YjY4
ZGFhMTY2NDFhODM0NzYyMWZiYmRjY2U5YmExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRUcmVlLmgKQEAgLTU3
LDcgKzU3LDcgQEAgcHVibGljOgogICAgIHZvaWQgYXBwZW5kTm9kZUNoYW5nZXMoVmVjdG9yPFJl
ZjxBWElzb2xhdGVkVHJlZU5vZGU+PiYpOwogICAgIHZvaWQgcmVtb3ZlTm9kZShBWElEKTsKIAot
ICAgIHZvaWQgc2V0Um9vdE5vZGVJRChBWElEKTsKKyAgICB2b2lkIHNldFJvb3QoUmVmPEFYSXNv
bGF0ZWRUcmVlTm9kZT4mKTsKICAgICB2b2lkIHNldEZvY3VzZWROb2RlSUQoQVhJRCk7CiAgICAg
CiAgICAgLy8gQ2FsbCBvbiBBWCB0aHJlYWQKQEAgLTc4LDcgKzc4LDYgQEAgcHJpdmF0ZToKICAg
ICBWZWN0b3I8UmVmPEFYSXNvbGF0ZWRUcmVlTm9kZT4+IG1fcGVuZGluZ0FwcGVuZHM7CiAgICAg
VmVjdG9yPEFYSUQ+IG1fcGVuZGluZ1JlbW92YWxzOwogICAgIEFYSUQgbV9wZW5kaW5nRm9jdXNl
ZE5vZGVJRDsKLSAgICBBWElEIG1fcGVuZGluZ1Jvb3ROb2RlSUQ7CiAgICAgTG9jayBtX2NoYW5n
ZUxvZ0xvY2s7CiAKICAgICBBWElzb2xhdGVkVHJlZUlEIG1fdHJlZUlEOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWVO
b2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNv
bGF0ZWRUcmVlTm9kZS5jcHAKaW5kZXggNzkzOTI5OTUxZGQyZGM2YTQwMWM0NTgyNjY4NmFlZTIz
OWE3M2IyMS4uY2FlODc4MzhmYmQ1ZDgyNmE5Y2NiNDk1ZjQ2NjA2NTI4OTI5OGU2NCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRl
ZFRyZWVOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVk
dHJlZS9BWElzb2xhdGVkVHJlZU5vZGUuY3BwCkBAIC0zMCwxMCArMzAsMTIgQEAKIAogI2luY2x1
ZGUgIkFjY2Vzc2liaWxpdHlPYmplY3QuaCIKIAorZXh0ZXJuICJDIiBib29sIF9BWFVJRWxlbWVu
dFJlcXVlc3RTZXJ2aWNlZEJ5U2Vjb25kYXJ5QVhUaHJlYWQodm9pZCk7CisKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotQVhJc29sYXRlZFRyZWVOb2RlOjpBWElzb2xhdGVkVHJlZU5vZGUoY29uc3Qg
QWNjZXNzaWJpbGl0eU9iamVjdCYgb2JqZWN0KQotICAgIDogbV9pZGVudGlmaWVyKG9iamVjdC5h
eE9iamVjdElEKCkpCitBWElzb2xhdGVkVHJlZU5vZGU6OkFYSXNvbGF0ZWRUcmVlTm9kZShjb25z
dCBBWENvcmVPYmplY3QmIG9iamVjdCkKKyAgICA6IG1faWQob2JqZWN0Lm9iamVjdElEKCkpCiB7
CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBpbml0aWFsaXplQXR0cmlidXRlRGF0
YShvYmplY3QpOwpAQCAtNDIsMTQgKzQ0LDE0IEBAIEFYSXNvbGF0ZWRUcmVlTm9kZTo6QVhJc29s
YXRlZFRyZWVOb2RlKGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3QmIG9iamVjdCkKICNlbmRpZgog
fQogCi1SZWY8QVhJc29sYXRlZFRyZWVOb2RlPiBBWElzb2xhdGVkVHJlZU5vZGU6OmNyZWF0ZShj
b25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0JiBvYmplY3QpCitSZWY8QVhJc29sYXRlZFRyZWVOb2Rl
PiBBWElzb2xhdGVkVHJlZU5vZGU6OmNyZWF0ZShjb25zdCBBWENvcmVPYmplY3QmIG9iamVjdCkK
IHsKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBBWElzb2xhdGVkVHJlZU5vZGUob2JqZWN0KSk7
CiB9CiAKIEFYSXNvbGF0ZWRUcmVlTm9kZTo6fkFYSXNvbGF0ZWRUcmVlTm9kZSgpID0gZGVmYXVs
dDsKIAotdm9pZCBBWElzb2xhdGVkVHJlZU5vZGU6OmluaXRpYWxpemVBdHRyaWJ1dGVEYXRhKGNv
bnN0IEFjY2Vzc2liaWxpdHlPYmplY3QmIG9iamVjdCkKK3ZvaWQgQVhJc29sYXRlZFRyZWVOb2Rl
Ojppbml0aWFsaXplQXR0cmlidXRlRGF0YShjb25zdCBBWENvcmVPYmplY3QmIG9iamVjdCkKIHsK
ICAgICBzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6Um9sZVZhbHVlLCBzdGF0aWNfY2FzdDxp
bnQ+KG9iamVjdC5yb2xlVmFsdWUoKSkpOwogICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1l
OjpJc0F0dGFjaG1lbnQsIG9iamVjdC5pc0F0dGFjaG1lbnQoKSk7CkBAIC04Miw3ICs4NCw3IEBA
IHZvaWQgQVhJc29sYXRlZFRyZWVOb2RlOjpzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIEF0dHJpYnV0ZVZhbHVlCiB2b2lkIEFYSXNvbGF0ZWRUcmVlTm9kZTo6YXBwZW5k
Q2hpbGQoQVhJRCBheElEKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgbV9j
aGlsZHJlbi5hcHBlbmQoYXhJRCk7CisgICAgbV9jaGlsZHJlbklEcy5hcHBlbmQoYXhJRCk7CiB9
CiAKIHZvaWQgQVhJc29sYXRlZFRyZWVOb2RlOjpzZXRQYXJlbnQoQVhJRCBwYXJlbnQpCkBAIC05
OCw2ICsxMDAsMTggQEAgdm9pZCBBWElzb2xhdGVkVHJlZU5vZGU6OnNldFRyZWVJZGVudGlmaWVy
KEFYSXNvbGF0ZWRUcmVlSUQgdHJlZUlkZW50aWZpZXIpCiAgICAgICAgIG1fY2FjaGVkVHJlZSA9
IHRyZWU7CiB9CiAKK2NvbnN0IEFYQ29yZU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVj
dG9yJiBBWElzb2xhdGVkVHJlZU5vZGU6OmNoaWxkcmVuKGJvb2wpCit7CisgICAgaWYgKF9BWFVJ
RWxlbWVudFJlcXVlc3RTZXJ2aWNlZEJ5U2Vjb25kYXJ5QVhUaHJlYWQoKSkgeworICAgICAgICBt
X2NoaWxkcmVuLmNsZWFyKCk7CisgICAgICAgIG1fY2hpbGRyZW4ucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eShtX2NoaWxkcmVuSURzLnNpemUoKSk7CisgICAgICAgIGF1dG8gdHJlZSA9IHRoaXMtPnRy
ZWUoKTsKKyAgICAgICAgZm9yIChhdXRvIGNoaWxkSUQgOiBtX2NoaWxkcmVuSURzKQorICAgICAg
ICAgICAgbV9jaGlsZHJlbi51bmNoZWNrZWRBcHBlbmQodHJlZS0+bm9kZUZvcklEKGNoaWxkSUQp
KTsKKyAgICB9CisgICAgcmV0dXJuIG1fY2hpbGRyZW47Cit9CisKIEFYQ29yZU9iamVjdCogQVhJ
c29sYXRlZFRyZWVOb2RlOjpmb2N1c2VkVUlFbGVtZW50KCkgY29uc3QKIHsKICAgICBpZiAoYXV0
byBmb2N1c2VkRWxlbWVudCA9IHRyZWUoKS0+Zm9jdXNlZFVJRWxlbWVudCgpKQpAQCAtMTA1LDcg
KzExOSw3IEBAIEFYQ29yZU9iamVjdCogQVhJc29sYXRlZFRyZWVOb2RlOjpmb2N1c2VkVUlFbGVt
ZW50KCkgY29uc3QKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KICAgICAKLUFYQ29yZU9iamVjdCog
QVhJc29sYXRlZFRyZWVOb2RlOjpwYXJlbnRPYmplY3RJbnRlcmZhY2VVbmlnbm9yZWQoKSBjb25z
dAorQVhDb3JlT2JqZWN0KiBBWElzb2xhdGVkVHJlZU5vZGU6OnBhcmVudE9iamVjdFVuaWdub3Jl
ZCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHRyZWUoKS0+bm9kZUZvcklEKHBhcmVudCgpKS5nZXQo
KTsKIH0KQEAgLTExNCw3ICsxMjgsNyBAQCBBWENvcmVPYmplY3QqIEFYSXNvbGF0ZWRUcmVlTm9k
ZTo6YWNjZXNzaWJpbGl0eUhpdFRlc3QoY29uc3QgSW50UG9pbnQmIHBvaW50KSBjbwogewogICAg
IGlmICghcmVsYXRpdmVGcmFtZSgpLmNvbnRhaW5zKHBvaW50KSkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgZm9yIChhdXRvIGNoaWxkSUQgOiBjaGlsZHJlbigpKSB7CisgICAgZm9yIChj
b25zdCBhdXRvJiBjaGlsZElEIDogbV9jaGlsZHJlbklEcykgewogICAgICAgICBhdXRvIGNoaWxk
ID0gdHJlZSgpLT5ub2RlRm9ySUQoY2hpbGRJRCk7CiAgICAgICAgIEFTU0VSVChjaGlsZCk7CiAg
ICAgICAgIGlmIChjaGlsZCAmJiBjaGlsZC0+cmVsYXRpdmVGcmFtZSgpLmNvbnRhaW5zKHBvaW50
KSkKQEAgLTE4Niw2ICsyMDAsMTUgQEAgaW50IEFYSXNvbGF0ZWRUcmVlTm9kZTo6aW50QXR0cmli
dXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKSBjb25zdAogICAgICk7CiB9CiAK
K3ZvaWQgQVhJc29sYXRlZFRyZWVOb2RlOjp1cGRhdGVCYWNraW5nU3RvcmUoKQoreworICAgIGlm
IChfQVhVSUVsZW1lbnRSZXF1ZXN0U2VydmljZWRCeVNlY29uZGFyeUFYVGhyZWFkKCkpIHsKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKyAgICAgICAgaWYgKGF1dG8g
dHJlZSA9IHRoaXMtPnRyZWUoKSkKKyAgICAgICAgICAgIHRyZWUtPmFwcGx5UGVuZGluZ0NoYW5n
ZXMoKTsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVO
QUJMRSgoQUNDRVNTSUJJTElUWV9JU09MQVRFRF9UUkVFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWVOb2RlLmggYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZU5v
ZGUuaAppbmRleCBjMzU0NmZiZTgyNzUyZTk5ZWZhYTdlZGRmYTYyNzY3NmQ1NDJhNjBmLi5lYTQx
ZjJhNTA5Yzc5YWIyYjNlYjRkYTkyNjY4MjEyMDdhMTY0NTI2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZU5vZGUuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVk
VHJlZU5vZGUuaApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlPYmpl
Y3RJbnRlcmZhY2UuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJJbnRQb2lu
dC5oIgorI2luY2x1ZGUgIlBhdGguaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtNDMsMTEgKzQ0
LDU5NyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBBWElzb2xhdGVkVHJlZTsKLWNs
YXNzIEFjY2Vzc2liaWxpdHlPYmplY3Q7Ci0KLWNsYXNzIEFYSXNvbGF0ZWRUcmVlTm9kZSBmaW5h
bCA6IHB1YmxpYyBBWENvcmVPYmplY3QsIHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxBWElz
b2xhdGVkVHJlZU5vZGU+IHsKIAorY2xhc3MgQVhJc29sYXRlZFRyZWVOb2RlIGZpbmFsIDogcHVi
bGljIEFYQ29yZU9iamVjdCB7CiBwdWJsaWM6CisgICAgc3RhdGljIFJlZjxBWElzb2xhdGVkVHJl
ZU5vZGU+IGNyZWF0ZShjb25zdCBBWENvcmVPYmplY3QmKTsKKyAgICB+QVhJc29sYXRlZFRyZWVO
b2RlKCk7CisKKyAgICB2b2lkIHNldE9iamVjdElEKEFYSUQgaWQpIG92ZXJyaWRlIHsgbV9pZCA9
IGlkOyB9CisgICAgQVhJRCBvYmplY3RJRCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1faWQ7
IH0KKyAgICB2b2lkIGluaXQoKSBvdmVycmlkZSB7IH0KKworICAgIHZvaWQgZGV0YWNoKEFjY2Vz
c2liaWxpdHlEZXRhY2htZW50VHlwZSwgQVhPYmplY3RDYWNoZSogPSBudWxscHRyKSBvdmVycmlk
ZSB7IH0KKyAgICBib29sIGlzRGV0YWNoZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxz
ZTsgfQorCisgICAgYm9vbCBpc0FjY2Vzc2liaWxpdHlPYmplY3QoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdCgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc0FjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wg
aXNBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7
IH0KKyAgICBib29sIGlzQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNBY2Nlc3NpYmlsaXR5U1ZHUm9vdCgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc0FjY2Vzc2liaWxpdHlTVkdF
bGVtZW50KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIGJvb2wgY29u
dGFpbnNUZXh0KFN0cmluZyAqKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAg
IGJvb2wgaXNBdHRhY2htZW50RWxlbWVudCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNl
OyB9CisgICAgYm9vbCBpc0hlYWRpbmcoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsg
fQorICAgIGJvb2wgaXNMaW5rKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0
ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc0xpbmspOyB9CisgICAgYm9vbCBpc0ltYWdlKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJ
c0ltYWdlKTsgfQorICAgIGJvb2wgaXNJbWFnZU1hcCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgYm9vbCBpc05hdGl2ZUltYWdlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICBib29sIGlzSW1hZ2VCdXR0b24oKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNQYXNzd29yZEZpZWxkKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzQ29udGFpbmVkQnlQYXNzd29yZEZpZWxkKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBBWENvcmVPYmplY3QqIHBhc3N3
b3JkRmllbGRPckNvbnRhaW5pbmdQYXNzd29yZEZpZWxkKCkgb3ZlcnJpZGUgeyByZXR1cm4gbnVs
bHB0cjsgfQorICAgIGJvb2wgaXNOYXRpdmVUZXh0Q29udHJvbCgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc1NlYXJjaEZpZWxkKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzV2ViQXJlYSgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc0NoZWNrYm94KCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzUmFkaW9CdXR0b24oKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNOYXRpdmVMaXN0Qm94KCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzTGlzdEJveCgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc0xpc3RCb3hPcHRpb24oKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNBdHRhY2htZW50KCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc0F0dGFj
aG1lbnQpOyB9CisgICAgYm9vbCBpc01lZGlhVGltZWxpbmUoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNNZW51UmVsYXRlZCgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc01lbnUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBmYWxzZTsgfQorICAgIGJvb2wgaXNNZW51QmFyKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
ZmFsc2U7IH0KKyAgICBib29sIGlzTWVudUJ1dHRvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgYm9vbCBpc01lbnVJdGVtKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
ZmFsc2U7IH0KKyAgICBib29sIGlzRmlsZVVwbG9hZEJ1dHRvbigpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNGaWxlVXBsb2FkQnV0
dG9uKTsgfQorICAgIGJvb2wgaXNJbnB1dEltYWdlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
ZmFsc2U7IH0KKyAgICBib29sIGlzUHJvZ3Jlc3NJbmRpY2F0b3IoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNTbGlkZXIoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNTbGlkZXJUaHVtYigpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc0lucHV0U2xpZGVyKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzQ29udHJvbCgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc0xhYmVsKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICBib29sIGlzTGlzdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgYm9vbCBpc1RhYmxlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7
IH0KKyAgICBib29sIGlzRGF0YVRhYmxlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7
IH0KKyAgICBib29sIGlzVGFibGVSb3coKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsg
fQorICAgIGJvb2wgaXNUYWJsZUNvbHVtbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNl
OyB9CisgICAgYm9vbCBpc1RhYmxlQ2VsbCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNl
OyB9CisgICAgYm9vbCBpc0ZpZWxkc2V0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7
IH0KKyAgICBib29sIGlzR3JvdXAoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQor
ICAgIGJvb2wgaXNBUklBVHJlZUdyaWRSb3coKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxz
ZTsgfQorICAgIGJvb2wgaXNJbWFnZU1hcExpbmsoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBi
b29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzSW1hZ2VNYXBMaW5rKTsgfQorICAg
IGJvb2wgaXNNZW51TGlzdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAg
Ym9vbCBpc01lbnVMaXN0UG9wdXAoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQor
ICAgIGJvb2wgaXNNZW51TGlzdE9wdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNl
OyB9CisgICAgYm9vbCBpc1NwaW5CdXR0b24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxz
ZTsgfQorICAgIGJvb2wgaXNOYXRpdmVTcGluQnV0dG9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICBib29sIGlzU3BpbkJ1dHRvblBhcnQoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNNb2NrT2JqZWN0KCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzTWVkaWFDb250cm9sTGFiZWwoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzTWVk
aWFDb250cm9sTGFiZWwpOyB9CisgICAgYm9vbCBpc01lZGlhT2JqZWN0KCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzU3dpdGNoKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzVG9nZ2xlQnV0dG9uKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzVGV4dENvbnRyb2woKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNBUklBVGV4dENvbnRyb2woKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNOb25OYXRpdmVUZXh0Q29u
dHJvbCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc1RhYkxp
c3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNUYWJJdGVt
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzUmFkaW9Hcm91
cCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc0NvbWJvQm94
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzVHJlZSgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6
SXNUcmVlKTsgfQorICAgIGJvb2wgaXNUcmVlR3JpZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgYm9vbCBpc1RyZWVJdGVtKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
Ym9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc1RyZWVJdGVtKTsgfQorICAgIGJv
b2wgaXNTY3JvbGxiYXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFs
dWUoQVhQcm9wZXJ0eU5hbWU6OklzU2Nyb2xsYmFyKTsgfQorICAgIGJvb2wgaXNCdXR0b24oKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNMaXN0SXRlbSgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc0NoZWNrYm94T3JSYWRp
bygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc1Njcm9sbFZp
ZXcoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNDYW52YXMo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNQb3BVcEJ1dHRv
bigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc0Jsb2NrcXVv
dGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNMYW5kbWFy
aygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc0NvbG9yV2Vs
bCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc1JhbmdlQ29u
dHJvbCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc01ldGVy
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzU3BsaXR0ZXIo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNUb29sYmFyKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzU3R5bGVGb3JtYXRH
cm91cCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc0ZpZ3Vy
ZUVsZW1lbnQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNL
ZXlib2FyZEZvY3VzYWJsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAg
Ym9vbCBpc1N1bW1hcnkoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJv
b2wgaXNPdXRwdXQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorCisgICAgYm9v
bCBpc0NoZWNrZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wg
aXNFbmFibGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlz
U2VsZWN0ZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNG
b2N1c2VkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzSG92
ZXJlZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc0luZGV0
ZXJtaW5hdGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNM
b2FkZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNNdWx0
aVNlbGVjdGFibGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wg
aXNPblNjcmVlbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBp
c09mZlNjcmVlbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICFpc09uU2NyZWVuKCk7IH0KKyAg
ICBib29sIGlzUHJlc3NlZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAg
Ym9vbCBpc1VudmlzaXRlZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAg
Ym9vbCBpc1Zpc2l0ZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJv
b2wgaXNSZXF1aXJlZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9v
bCBzdXBwb3J0c1JlcXVpcmVkQXR0cmlidXRlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICBib29sIGlzTGlua2VkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7
IH0KKyAgICBib29sIGlzRXhwYW5kZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsg
fQorICAgIGJvb2wgaXNWaXNpYmxlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0K
KyAgICBib29sIGlzQ29sbGFwc2VkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0K
KyAgICB2b2lkIHNldElzRXhwYW5kZWQoYm9vbCkgb3ZlcnJpZGUgeyB9CisgICAgRmxvYXRSZWN0
IHJlbGF0aXZlRnJhbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiByZWN0QXR0cmlidXRlVmFs
dWUoQVhQcm9wZXJ0eU5hbWU6OlJlbGF0aXZlRnJhbWUpOyB9CisgICAgRmxvYXRSZWN0IGNvbnZl
cnRGcmFtZVRvU3BhY2UoY29uc3QgRmxvYXRSZWN0JiwgQWNjZXNzaWJpbGl0eUNvbnZlcnNpb25T
cGFjZSkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gRmxvYXRSZWN0KCk7IH0KKworICAgIGJvb2wg
aXNTZWxlY3RlZE9wdGlvbkFjdGl2ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9
CisKKyAgICBib29sIGhhc0JvbGRGb250KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7
IH0KKyAgICBib29sIGhhc0l0YWxpY0ZvbnQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxz
ZTsgfQorICAgIGJvb2wgaGFzTWlzc3BlbGxpbmcoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBm
YWxzZTsgfQorICAgIFJlZlB0cjxSYW5nZT4gZ2V0TWlzc3BlbGxpbmdSYW5nZShSZWZQdHI8UmFu
Z2U+IGNvbnN0JiwgQWNjZXNzaWJpbGl0eVNlYXJjaERpcmVjdGlvbikgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gbnVsbHB0cjsgfQorICAgIGJvb2wgaGFzUGxhaW5UZXh0KCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGhhc1NhbWVGb250KFJlbmRlck9iamVjdCop
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBoYXNTYW1lRm9udENv
bG9yKFJlbmRlck9iamVjdCopIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAg
Ym9vbCBoYXNTYW1lU3R5bGUoUmVuZGVyT2JqZWN0KikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
ZmFsc2U7IH0KKyAgICBib29sIGlzU3RhdGljVGV4dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgYm9vbCBoYXNVbmRlcmxpbmUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBmYWxzZTsgfQorICAgIGJvb2wgaGFzSGlnaGxpZ2h0aW5nKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gZmFsc2U7IH0KKworICAgIGJvb2wgc3VwcG9ydHNEYXRldGltZUF0dHJpYnV0ZSgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgY29uc3QgQXRvbVN0cmluZyYgZGF0
ZXRpbWVBdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG51bGxBdG9tKCk7
IH0KKworICAgIGJvb2wgY2FuU2V0Rm9jdXNBdHRyaWJ1dGUoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBmYWxzZTsgfQorICAgIGJvb2wgY2FuU2V0VGV4dFJhbmdlQXR0cmlidXRlcygpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBjYW5TZXRWYWx1ZUF0dHJpYnV0
ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBjYW5TZXROdW1l
cmljVmFsdWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgY2Fu
U2V0U2VsZWN0ZWRBdHRyaWJ1dGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQor
ICAgIGJvb2wgY2FuU2V0U2VsZWN0ZWRDaGlsZHJlbkF0dHJpYnV0ZSgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBjYW5TZXRFeHBhbmRlZEF0dHJpYnV0ZSgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICBFbGVtZW50KiBlbGVtZW50KCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIE5vZGUqIG5vZGUoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9CisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJl
cigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KKworICAgIGJvb2wgYWNjZXNz
aWJpbGl0eUlzSWdub3JlZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVW
YWx1ZShBWFByb3BlcnR5TmFtZTo6SXNBY2Nlc3NpYmlsaXR5SWdub3JlZCk7IH0KKyAgICBBY2Nl
c3NpYmlsaXR5T2JqZWN0SW5jbHVzaW9uIGRlZmF1bHRPYmplY3RJbmNsdXNpb24oKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBBY2Nlc3NpYmlsaXR5T2JqZWN0SW5jbHVzaW9uOjpEZWZhdWx0QmVo
YXZpb3I7IH0KKyAgICBib29sIGFjY2Vzc2liaWxpdHlJc0lnbm9yZWRCeURlZmF1bHQoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorCisgICAgYm9vbCBpc1Nob3dpbmdWYWxpZGF0
aW9uTWVzc2FnZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgU3RyaW5n
IHZhbGlkYXRpb25NZXNzYWdlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gU3RyaW5nKCk7IH0K
KworICAgIHVuc2lnbmVkIGJsb2NrcXVvdGVMZXZlbCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IDA7IH0KKyAgICBpbnQgaGVhZGluZ0xldmVsKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gMDsg
fQorICAgIGludCB0YWJsZUxldmVsKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gMDsgfQorICAg
IEFjY2Vzc2liaWxpdHlCdXR0b25TdGF0ZSBjaGVja2JveE9yUmFkaW9WYWx1ZSgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIEFjY2Vzc2liaWxpdHlCdXR0b25TdGF0ZTo6T2ZmOyB9CisgICAgU3Ry
aW5nIHZhbHVlRGVzY3JpcHRpb24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBTdHJpbmcoKTsg
fQorICAgIGZsb2F0IHZhbHVlRm9yUmFuZ2UoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAwOyB9
CisgICAgZmxvYXQgbWF4VmFsdWVGb3JSYW5nZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIDA7
IH0KKyAgICBmbG9hdCBtaW5WYWx1ZUZvclJhbmdlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
MDsgfQorICAgIGZsb2F0IHN0ZXBWYWx1ZUZvclJhbmdlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gMDsgfQorICAgIEFYQ29yZU9iamVjdCogc2VsZWN0ZWRSYWRpb0J1dHRvbigpIG92ZXJyaWRl
IHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICBBWENvcmVPYmplY3QqIHNlbGVjdGVkVGFiSXRlbSgp
IG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICBBWENvcmVPYmplY3QqIHNlbGVjdGVk
TGlzdEl0ZW0oKSBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9CisgICAgaW50IGxheW91dENv
dW50KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gMDsgfQorICAgIGRvdWJsZSBlc3RpbWF0ZWRM
b2FkaW5nUHJvZ3Jlc3MoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAwOyB9CisKKyAgICBib29s
IHN1cHBvcnRzQVJJQU93bnMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAg
IGJvb2wgaXNBY3RpdmVEZXNjZW5kYW50T2ZGb2N1c2VkQ29udGFpbmVyKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2b2lkIGFyaWFBY3RpdmVEZXNjZW5kYW50UmVmZXJl
bmNpbmdFbGVtZW50cyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImKSBjb25zdCBvdmVycmlk
ZSB7IH0KKyAgICB2b2lkIGFyaWFDb250cm9sc0VsZW1lbnRzKEFjY2Vzc2liaWxpdHlDaGlsZHJl
blZlY3RvciYpIGNvbnN0IG92ZXJyaWRlIHsgfQorICAgIHZvaWQgYXJpYUNvbnRyb2xzUmVmZXJl
bmNpbmdFbGVtZW50cyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImKSBjb25zdCBvdmVycmlk
ZSB7IH0KKyAgICB2b2lkIGFyaWFEZXNjcmliZWRCeUVsZW1lbnRzKEFjY2Vzc2liaWxpdHlDaGls
ZHJlblZlY3RvciYpIGNvbnN0IG92ZXJyaWRlIHsgfQorICAgIHZvaWQgYXJpYURlc2NyaWJlZEJ5
UmVmZXJlbmNpbmdFbGVtZW50cyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImKSBjb25zdCBv
dmVycmlkZSB7IH0KKyAgICB2b2lkIGFyaWFEZXRhaWxzRWxlbWVudHMoQWNjZXNzaWJpbGl0eUNo
aWxkcmVuVmVjdG9yJikgY29uc3Qgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCBhcmlhRGV0YWlsc1Jl
ZmVyZW5jaW5nRWxlbWVudHMoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJikgY29uc3Qgb3Zl
cnJpZGUgeyB9CisgICAgdm9pZCBhcmlhRXJyb3JNZXNzYWdlRWxlbWVudHMoQWNjZXNzaWJpbGl0
eUNoaWxkcmVuVmVjdG9yJikgY29uc3Qgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCBhcmlhRXJyb3JN
ZXNzYWdlUmVmZXJlbmNpbmdFbGVtZW50cyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImKSBj
b25zdCBvdmVycmlkZSB7IH0KKyAgICB2b2lkIGFyaWFGbG93VG9FbGVtZW50cyhBY2Nlc3NpYmls
aXR5Q2hpbGRyZW5WZWN0b3ImKSBjb25zdCBvdmVycmlkZSB7IH0KKyAgICB2b2lkIGFyaWFGbG93
VG9SZWZlcmVuY2luZ0VsZW1lbnRzKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYpIGNvbnN0
IG92ZXJyaWRlIHsgfQorICAgIHZvaWQgYXJpYUxhYmVsbGVkQnlFbGVtZW50cyhBY2Nlc3NpYmls
aXR5Q2hpbGRyZW5WZWN0b3ImKSBjb25zdCBvdmVycmlkZSB7IH0KKyAgICB2b2lkIGFyaWFMYWJl
bGxlZEJ5UmVmZXJlbmNpbmdFbGVtZW50cyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImKSBj
b25zdCBvdmVycmlkZSB7IH0KKyAgICB2b2lkIGFyaWFPd25zRWxlbWVudHMoQWNjZXNzaWJpbGl0
eUNoaWxkcmVuVmVjdG9yJikgY29uc3Qgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCBhcmlhT3duc1Jl
ZmVyZW5jaW5nRWxlbWVudHMoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJikgY29uc3Qgb3Zl
cnJpZGUgeyB9CisKKyAgICBib29sIGhhc1BvcHVwKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
ZmFsc2U7IH0KKyAgICBTdHJpbmcgcG9wdXBWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IFN0cmluZygpOyB9CisgICAgYm9vbCBoYXNEYXRhbGlzdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIGZhbHNlOyB9CisgICAgYm9vbCBzdXBwb3J0c0hhc1BvcHVwKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIHByZXNzZWRJc1ByZXNlbnQoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgYXJpYUlzTXVsdGlsaW5lKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBTdHJpbmcgaW52YWxpZFN0YXR1cygpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIFN0cmluZygpOyB9CisgICAgYm9vbCBzdXBwb3J0c1ByZXNz
ZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgc3VwcG9ydHNF
eHBhbmRlZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBzdXBw
b3J0c0NoZWNrZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIEFjY2Vz
c2liaWxpdHlTb3J0RGlyZWN0aW9uIHNvcnREaXJlY3Rpb24oKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBBY2Nlc3NpYmlsaXR5U29ydERpcmVjdGlvbjo6Tm9uZTsgfQorICAgIGJvb2wgY2FudmFz
SGFzRmFsbGJhY2tDb250ZW50KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICBib29sIHN1cHBvcnRzUmFuZ2VWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNl
OyB9CisgICAgY29uc3QgQXRvbVN0cmluZyYgaWRlbnRpZmllckF0dHJpYnV0ZSgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIG51bGxBdG9tKCk7IH0KKyAgICBjb25zdCBBdG9tU3RyaW5nJiBsaW5r
UmVsVmFsdWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBudWxsQXRvbSgpOyB9CisgICAgdm9p
ZCBjbGFzc0xpc3QoVmVjdG9yPFN0cmluZz4mKSBjb25zdCBvdmVycmlkZSB7IH0KKyAgICBTdHJp
bmcgcm9sZURlc2NyaXB0aW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gU3RyaW5nKCk7IH0K
KyAgICBBY2Nlc3NpYmlsaXR5Q3VycmVudFN0YXRlIGN1cnJlbnRTdGF0ZSgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIEFjY2Vzc2liaWxpdHlDdXJyZW50U3RhdGU6OkZhbHNlOyB9CisgICAgU3Ry
aW5nIGN1cnJlbnRWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFN0cmluZygpOyB9Cisg
ICAgYm9vbCBzdXBwb3J0c0N1cnJlbnQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsg
fQorICAgIGNvbnN0IFN0cmluZyBrZXlTaG9ydGN1dHNWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIFN0cmluZygpOyB9CisKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiB0aGUg
b2JqZWN0IHNob3VsZCBiZSBpZ25vcmVkIHdoZW4gdGhlcmUncyBhIG1vZGFsIGRpYWxvZyBkaXNw
bGF5ZWQuCisgICAgYm9vbCBpZ25vcmVkRnJvbU1vZGFsUHJlc2VuY2UoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNNb2RhbERlc2NlbmRhbnQoTm9kZSopIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc01vZGFsTm9kZSgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICBib29sIHN1cHBvcnRzU2V0U2l6
ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBzdXBwb3J0c1Bv
c0luU2V0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBpbnQgc2V0U2l6
ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0KKyAgICBpbnQgcG9zSW5TZXQoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiAwOyB9CisKKyAgICBib29sIHN1cHBvcnRzQVJJQURyb3BwaW5n
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIHN1cHBvcnRzQVJJ
QURyYWdnaW5nKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlz
QVJJQUdyYWJiZWQoKSBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZvaWQgc2V0QVJJ
QUdyYWJiZWQoYm9vbCkgb3ZlcnJpZGUgeyB9CisgICAgVmVjdG9yPFN0cmluZz4gZGV0ZXJtaW5l
QVJJQURyb3BFZmZlY3RzKCkgb3ZlcnJpZGUgeyByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsgfQor
CisgICAgQVhDb3JlT2JqZWN0KiBhY2Nlc3NpYmlsaXR5SGl0VGVzdChjb25zdCBJbnRQb2ludCYp
IGNvbnN0IG92ZXJyaWRlOworICAgIEFYQ29yZU9iamVjdCogZWxlbWVudEFjY2Vzc2liaWxpdHlI
aXRUZXN0KGNvbnN0IEludFBvaW50JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsg
fQorCisgICAgQVhDb3JlT2JqZWN0KiBmb2N1c2VkVUlFbGVtZW50KCkgY29uc3Qgb3ZlcnJpZGU7
CisKKyAgICBBWENvcmVPYmplY3QqIGZpcnN0Q2hpbGQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBudWxscHRyOyB9CisgICAgQVhDb3JlT2JqZWN0KiBsYXN0Q2hpbGQoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBudWxscHRyOyB9CisgICAgQVhDb3JlT2JqZWN0KiBwcmV2aW91c1NpYmxpbmco
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9CisgICAgQVhDb3JlT2JqZWN0KiBu
ZXh0U2libGluZygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICBBWENv
cmVPYmplY3QqIG5leHRTaWJsaW5nVW5pZ25vcmVkKGludCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gbnVsbHB0cjsgfQorICAgIEFYQ29yZU9iamVjdCogcHJldmlvdXNTaWJsaW5nVW5pZ25vcmVk
KGludCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIEFYQ29yZU9iamVj
dCogcGFyZW50T2JqZWN0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQorICAg
IEFYQ29yZU9iamVjdCogcGFyZW50T2JqZWN0VW5pZ25vcmVkKCkgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgQVhDb3JlT2JqZWN0KiBwYXJlbnRPYmplY3RJZkV4aXN0cygpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIG51bGxwdHI7IH0KKyAgICB2b2lkIGZpbmRNYXRjaGluZ09iamVjdHMoQWNjZXNzaWJp
bGl0eVNlYXJjaENyaXRlcmlhKiwgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJikgb3ZlcnJp
ZGUgeyB9CisgICAgYm9vbCBpc0Rlc2NlbmRhbnRPZkJhcnJlblBhcmVudCgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc0Rlc2NlbmRhbnRPZlJvbGUoQWNjZXNz
aWJpbGl0eVJvbGUpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICBWZWN0
b3I8UmVmUHRyPFJhbmdlPj4gZmluZFRleHRSYW5nZXMoQWNjZXNzaWJpbGl0eVNlYXJjaFRleHRD
cml0ZXJpYSBjb25zdCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFZlY3RvcjxSZWZQdHI8UmFu
Z2U+PigpOyB9CisgICAgVmVjdG9yPFN0cmluZz4gcGVyZm9ybVRleHRPcGVyYXRpb24oQWNjZXNz
aWJpbGl0eVRleHRPcGVyYXRpb24gY29uc3QmKSBvdmVycmlkZSB7IHJldHVybiBWZWN0b3I8U3Ry
aW5nPigpOyB9CisKKyAgICBBWENvcmVPYmplY3QqIG9ic2VydmFibGVPYmplY3QoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9CisgICAgdm9pZCBsaW5rZWRVSUVsZW1lbnRzKEFj
Y2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYpIGNvbnN0IG92ZXJyaWRlIHsgfQorICAgIEFYQ29y
ZU9iamVjdCogdGl0bGVVSUVsZW1lbnQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBudWxscHRy
OyB9CisgICAgYm9vbCBleHBvc2VzVGl0bGVVSUVsZW1lbnQoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBmYWxzZTsgfQorICAgIEFYQ29yZU9iamVjdCogY29ycmVzcG9uZGluZ0xhYmVsRm9yQ29u
dHJvbEVsZW1lbnQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9CisgICAgQVhD
b3JlT2JqZWN0KiBjb3JyZXNwb25kaW5nQ29udHJvbEZvckxhYmVsRWxlbWVudCgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICBBWENvcmVPYmplY3QqIHNjcm9sbEJhcihB
Y2Nlc3NpYmlsaXR5T3JpZW50YXRpb24pIG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KKwor
ICAgIEFjY2Vzc2liaWxpdHlSb2xlIGFyaWFSb2xlQXR0cmlidXRlKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gQWNjZXNzaWJpbGl0eVJvbGU6OlVua25vd247IH0KKyAgICBib29sIGlzUHJlc2Vu
dGF0aW9uYWxDaGlsZE9mQXJpYVJvbGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsg
fQorICAgIGJvb2wgYXJpYVJvbGVIYXNQcmVzZW50YXRpb25hbENoaWxkcmVuKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGluaGVyaXRzUHJlc2VudGF0aW9uYWxS
b2xlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIHZvaWQgYWNjZXNz
aWJpbGl0eVRleHQoVmVjdG9yPEFjY2Vzc2liaWxpdHlUZXh0PiYpIGNvbnN0IG92ZXJyaWRlIHsg
fQorICAgIFN0cmluZyBjb21wdXRlZExhYmVsKCkgb3ZlcnJpZGUgeyByZXR1cm4gU3RyaW5nKCk7
IH0KKworICAgIHZvaWQgc2V0QWNjZXNzaWJsZU5hbWUoY29uc3QgQXRvbVN0cmluZyYpIG92ZXJy
aWRlIHsgfQorICAgIGJvb2wgaGFzQXR0cmlidXRlc1JlcXVpcmVkRm9ySW5jbHVzaW9uKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIFN0cmluZyBhY2Nlc3NpYmlsaXR5
RGVzY3JpcHRpb24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBTdHJpbmcoKTsgfQorICAgIFN0
cmluZyB0aXRsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFN0cmluZygpOyB9CisgICAgU3Ry
aW5nIGhlbHBUZXh0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gU3RyaW5nKCk7IH0KKworICAg
IGJvb2wgaXNBUklBU3RhdGljVGV4dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9
CisgICAgU3RyaW5nIHN0cmluZ1ZhbHVlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gU3RyaW5n
KCk7IH0KKyAgICBTdHJpbmcgdGV4dFVuZGVyRWxlbWVudChBY2Nlc3NpYmlsaXR5VGV4dFVuZGVy
RWxlbWVudE1vZGUgPSBBY2Nlc3NpYmlsaXR5VGV4dFVuZGVyRWxlbWVudE1vZGUoKSkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gU3RyaW5nKCk7IH0KKyAgICBTdHJpbmcgdGV4dCgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIFN0cmluZygpOyB9CisgICAgaW50IHRleHRMZW5ndGgoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiAwOyB9CisgICAgU3RyaW5nIGFyaWFMYWJlbGVkQnlBdHRyaWJ1dGUo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBTdHJpbmcoKTsgfQorICAgIFN0cmluZyBhcmlhRGVz
Y3JpYmVkQnlBdHRyaWJ1dGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBTdHJpbmcoKTsgfQor
ICAgIGNvbnN0IFN0cmluZyBwbGFjZWhvbGRlclZhbHVlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gU3RyaW5nKCk7IH0KKyAgICBib29sIGFjY2Vzc2libGVOYW1lRGVyaXZlc0Zyb21Db250ZW50
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIFN0cmluZyBleHBhbmRl
ZFRleHRWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFN0cmluZygpOyB9CisgICAgYm9v
bCBzdXBwb3J0c0V4cGFuZGVkVGV4dFZhbHVlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFs
c2U7IH0KKworICAgIHZvaWQgZWxlbWVudHNGcm9tQXR0cmlidXRlKFZlY3RvcjxFbGVtZW50Kj4m
LCBjb25zdCBRdWFsaWZpZWROYW1lJikgY29uc3Qgb3ZlcnJpZGUgeyB9CisKKyAgICB2b2lkIGNv
bG9yVmFsdWUoaW50JiwgaW50JiwgaW50JikgY29uc3Qgb3ZlcnJpZGUgeyB9CisKKyAgICBBY2Nl
c3NpYmlsaXR5Um9sZSByb2xlVmFsdWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBzdGF0aWNf
Y2FzdDxBY2Nlc3NpYmlsaXR5Um9sZT4oaW50QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6
OlJvbGVWYWx1ZSkpOyB9CisKKyAgICBBWE9iamVjdENhY2hlKiBheE9iamVjdENhY2hlKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQorCisgICAgRWxlbWVudCogYW5jaG9yRWxl
bWVudCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICBib29sIHN1cHBv
cnRzUHJlc3NBY3Rpb24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIEVs
ZW1lbnQqIGFjdGlvbkVsZW1lbnQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9
CisgICAgTGF5b3V0UmVjdCBib3VuZGluZ0JveFJlY3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBMYXlvdXRSZWN0KCk7IH0KKyAgICBJbnRSZWN0IHBpeGVsU25hcHBlZEJvdW5kaW5nQm94UmVj
dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEludFJlY3QoKTsgfQorICAgIExheW91dFJlY3Qg
ZWxlbWVudFJlY3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBMYXlvdXRSZWN0KCk7IH0KKyAg
ICBMYXlvdXRTaXplIHNpemUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBMYXlvdXRTaXplKCk7
IH0KKyAgICBJbnRQb2ludCBjbGlja1BvaW50KCkgb3ZlcnJpZGUgeyByZXR1cm4gSW50UG9pbnQo
KTsgfQorICAgIFBhdGggZWxlbWVudFBhdGgoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBQYXRo
KCk7IH0KKyAgICBib29sIHN1cHBvcnRzUGF0aCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZh
bHNlOyB9CisKKyAgICBUZXh0SXRlcmF0b3JCZWhhdmlvciB0ZXh0SXRlcmF0b3JCZWhhdmlvckZv
clRleHRSYW5nZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFRleHRJdGVyYXRvckRlZmF1bHRC
ZWhhdmlvcjsgfQorICAgIFBsYWluVGV4dFJhbmdlIHNlbGVjdGVkVGV4dFJhbmdlKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gUGxhaW5UZXh0UmFuZ2UoKTsgfQorICAgIHVuc2lnbmVkIHNlbGVj
dGlvblN0YXJ0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gMDsgfQorICAgIHVuc2lnbmVkIHNl
bGVjdGlvbkVuZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0KKworICAgIFVSTCB1cmwo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBVUkwoKTsgfQorICAgIFZpc2libGVTZWxlY3Rpb24g
c2VsZWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gVmlzaWJsZVNlbGVjdGlvbigpOyB9
CisgICAgU3RyaW5nIHNlbGVjdGVkVGV4dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFN0cmlu
ZygpOyB9CisgICAgY29uc3QgQXRvbVN0cmluZyYgYWNjZXNzS2V5KCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gbnVsbEF0b20oKTsgfQorICAgIGNvbnN0IFN0cmluZyYgYWN0aW9uVmVyYigpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIG51bGxBdG9tKCk7IH0KKyAgICBXaWRnZXQqIHdpZGdldCgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICBXaWRnZXQqIHdpZGdldEZv
ckF0dGFjaG1lbnRWaWV3KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQorICAg
IFBhZ2UqIHBhZ2UoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9CisgICAgRG9j
dW1lbnQqIGRvY3VtZW50KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQorICAg
IEZyYW1lVmlldyogZG9jdW1lbnRGcmFtZVZpZXcoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBu
dWxscHRyOyB9CisgICAgRnJhbWUqIGZyYW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbnVs
bHB0cjsgfQorICAgIEZyYW1lKiBtYWluRnJhbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBu
dWxscHRyOyB9CisgICAgRG9jdW1lbnQqIHRvcERvY3VtZW50KCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gbnVsbHB0cjsgfQorICAgIFNjcm9sbFZpZXcqIHNjcm9sbFZpZXdBbmNlc3RvcigpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICBTdHJpbmcgbGFuZ3VhZ2UoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBTdHJpbmcoKTsgfQorICAgIHVuc2lnbmVkIGhpZXJhcmNo
aWNhbExldmVsKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gMDsgfQorCisgICAgdm9pZCBzZXRG
b2N1c2VkKGJvb2wpIG92ZXJyaWRlIHsgfQorICAgIHZvaWQgc2V0U2VsZWN0ZWRUZXh0KGNvbnN0
IFN0cmluZyYpIG92ZXJyaWRlIHsgfQorICAgIHZvaWQgc2V0U2VsZWN0ZWRUZXh0UmFuZ2UoY29u
c3QgUGxhaW5UZXh0UmFuZ2UmKSBvdmVycmlkZSB7IH0KKyAgICB2b2lkIHNldFZhbHVlKGNvbnN0
IFN0cmluZyYpIG92ZXJyaWRlIHsgfQorICAgIGJvb2wgcmVwbGFjZVRleHRJblJhbmdlKGNvbnN0
IFN0cmluZyYsIGNvbnN0IFBsYWluVGV4dFJhbmdlJikgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7
IH0KKyAgICBib29sIGluc2VydFRleHQoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGUgeyByZXR1cm4g
ZmFsc2U7IH0KKworICAgIHZvaWQgc2V0VmFsdWUoZmxvYXQpIG92ZXJyaWRlIHsgfQorICAgIHZv
aWQgc2V0U2VsZWN0ZWQoYm9vbCkgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCBzZXRTZWxlY3RlZFJv
d3MoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJikgb3ZlcnJpZGUgeyB9CisKKyAgICB2b2lk
IG1ha2VSYW5nZVZpc2libGUoY29uc3QgUGxhaW5UZXh0UmFuZ2UmKSBvdmVycmlkZSB7IH0KKyAg
ICBib29sIHByZXNzKCkgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIHBlcmZv
cm1EZWZhdWx0QWN0aW9uKCkgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIEFjY2Vz
c2liaWxpdHlPcmllbnRhdGlvbiBvcmllbnRhdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IEFjY2Vzc2liaWxpdHlPcmllbnRhdGlvbjo6VW5kZWZpbmVkOyB9CisgICAgdm9pZCBpbmNyZW1l
bnQoKSBvdmVycmlkZSB7IH0KKyAgICB2b2lkIGRlY3JlbWVudCgpIG92ZXJyaWRlIHsgfQorCisg
ICAgdm9pZCBjaGlsZHJlbkNoYW5nZWQoKSBvdmVycmlkZSB7IH0KKyAgICB2b2lkIHRleHRDaGFu
Z2VkKCkgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCB1cGRhdGVBY2Nlc3NpYmlsaXR5Um9sZSgpIG92
ZXJyaWRlIHsgfQorICAgIGNvbnN0IEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgY2hpbGRy
ZW4oYm9vbCB1cGRhdGVDaGlsZHJlbklmTmVlZGVkID0gdHJ1ZSkgb3ZlcnJpZGU7CisgICAgdm9p
ZCBhZGRDaGlsZHJlbigpIG92ZXJyaWRlIHsgfQorICAgIHZvaWQgYWRkQ2hpbGQoQVhDb3JlT2Jq
ZWN0Kikgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCBpbnNlcnRDaGlsZChBWENvcmVPYmplY3QqLCB1
bnNpZ25lZCkgb3ZlcnJpZGUgeyB9CisKKyAgICBib29sIHNob3VsZElnbm9yZUF0dHJpYnV0ZVJv
bGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorCisgICAgYm9vbCBjYW5IYXZl
Q2hpbGRyZW4oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaGFz
Q2hpbGRyZW4oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZvaWQgdXBk
YXRlQ2hpbGRyZW5JZk5lY2Vzc2FyeSgpIG92ZXJyaWRlIHsgfQorICAgIHZvaWQgc2V0TmVlZHNU
b1VwZGF0ZUNoaWxkcmVuKCkgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCBzZXROZWVkc1RvVXBkYXRl
U3VidHJlZSgpIG92ZXJyaWRlIHsgfTsKKyAgICB2b2lkIGNsZWFyQ2hpbGRyZW4oKSBvdmVycmlk
ZSB7IH0KKyAgICBib29sIG5lZWRzVG9VcGRhdGVDaGlsZHJlbigpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgdm9pZCBkZXRhY2hGcm9tUGFyZW50KCkgb3ZlcnJpZGUgeyB9
CisgICAgYm9vbCBpc0RldGFjaGVkRnJvbVBhcmVudCgpIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNl
OyB9CisKKyAgICBib29sIGNhbkhhdmVTZWxlY3RlZENoaWxkcmVuKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gZmFsc2U7IH0KKyAgICB2b2lkIHNlbGVjdGVkQ2hpbGRyZW4oQWNjZXNzaWJpbGl0
eUNoaWxkcmVuVmVjdG9yJikgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCB2aXNpYmxlQ2hpbGRyZW4o
QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJikgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCB0YWJD
aGlsZHJlbihBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImKSBvdmVycmlkZSB7IH0KKyAgICBi
b29sIHNob3VsZEZvY3VzQWN0aXZlRGVzY2VuZGFudCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgQVhDb3JlT2JqZWN0KiBhY3RpdmVEZXNjZW5kYW50KCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIHZvaWQgaGFuZGxlQWN0aXZlRGVzY2VuZGFu
dENoYW5nZWQoKSBvdmVycmlkZSB7IH0KKyAgICB2b2lkIGhhbmRsZUFyaWFFeHBhbmRlZENoYW5n
ZWQoKSBvdmVycmlkZSB7IH0KKyAgICBib29sIGlzRGVzY2VuZGFudE9mT2JqZWN0KGNvbnN0IEFY
Q29yZU9iamVjdCopIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBp
c0FuY2VzdG9yT2ZPYmplY3QoY29uc3QgQVhDb3JlT2JqZWN0KikgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICBBWENvcmVPYmplY3QqIGZpcnN0QW5vbnltb3VzQmxvY2tDaGls
ZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KKworICAgIGJvb2wgaGFzQXR0
cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxz
ZTsgfQorICAgIGNvbnN0IEF0b21TdHJpbmcmIGdldEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWRO
YW1lJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbEF0b20oKTsgfQorICAgIGJvb2wgaGFz
VGFnTmFtZShjb25zdCBRdWFsaWZpZWROYW1lJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFs
c2U7IH0KKworICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHZpc2libGVQb3NpdGlvblJhbmdlKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2UoKTsgfQorICAgIFZp
c2libGVQb3NpdGlvblJhbmdlIHZpc2libGVQb3NpdGlvblJhbmdlRm9yTGluZSh1bnNpZ25lZCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2UoKTsgfQorICAgIFJl
ZlB0cjxSYW5nZT4gZWxlbWVudFJhbmdlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0
cjsgfQorICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHZpc2libGVQb3NpdGlvblJhbmdlRm9yVW5v
cmRlcmVkUG9zaXRpb25zKGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGNvbnN0IFZpc2libGVQb3Np
dGlvbiYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKCk7IH0K
KyAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSBwb3NpdGlvbk9mTGVmdFdvcmQoY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2Uo
KTsgfQorICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHBvc2l0aW9uT2ZSaWdodFdvcmQoY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gVmlzaWJsZVBvc2l0aW9u
UmFuZ2UoKTsgfQorICAgIFZpc2libGVQb3NpdGlvblJhbmdlIGxlZnRMaW5lVmlzaWJsZVBvc2l0
aW9uUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
VmlzaWJsZVBvc2l0aW9uUmFuZ2UoKTsgfQorICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHJpZ2h0
TGluZVZpc2libGVQb3NpdGlvblJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKCk7IH0KKyAgICBWaXNpYmxlUG9z
aXRpb25SYW5nZSBzZW50ZW5jZUZvclBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKCk7IH0KKyAgICBWaXNp
YmxlUG9zaXRpb25SYW5nZSBwYXJhZ3JhcGhGb3JQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRp
b24mKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBWaXNpYmxlUG9zaXRpb25SYW5nZSgpOyB9Cisg
ICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2Ugc3R5bGVSYW5nZUZvclBvc2l0aW9uKGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdl
KCk7IH0KKyAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2aXNpYmxlUG9zaXRpb25SYW5nZUZvclJh
bmdlKGNvbnN0IFBsYWluVGV4dFJhbmdlJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gVmlzaWJs
ZVBvc2l0aW9uUmFuZ2UoKTsgfQorICAgIFZpc2libGVQb3NpdGlvblJhbmdlIGxpbmVSYW5nZUZv
clBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IFZpc2libGVQb3NpdGlvblJhbmdlKCk7IH0KKworICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2VGb3JQ
bGFpblRleHRSYW5nZShjb25zdCBQbGFpblRleHRSYW5nZSYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIG51bGxwdHI7IH0KKworICAgIFN0cmluZyBzdHJpbmdGb3JSYW5nZShSZWZQdHI8UmFuZ2U+
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBTdHJpbmcoKTsgfQorICAgIEludFJlY3QgYm91bmRz
Rm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uUmFuZ2UmKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBJbnRSZWN0KCk7IH0KKyAgICBJbnRSZWN0IGJvdW5kc0ZvclJh
bmdlKGNvbnN0IFJlZlB0cjxSYW5nZT4pIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEludFJlY3Qo
KTsgfQorICAgIGludCBsZW5ndGhGb3JWaXNpYmxlUG9zaXRpb25SYW5nZShjb25zdCBWaXNpYmxl
UG9zaXRpb25SYW5nZSYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0KKyAgICB2b2lkIHNl
dFNlbGVjdGVkVmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uUmFuZ2Um
KSBjb25zdCBvdmVycmlkZSB7IH0KKworICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRp
b25Gb3JCb3VuZHMoY29uc3QgSW50UmVjdCYsIEFjY2Vzc2liaWxpdHlWaXNpYmxlUG9zaXRpb25G
b3JCb3VuZHMpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOyB9Cisg
ICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkZvclBvaW50KGNvbnN0IEludFBvaW50
JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7IH0KKyAgICBWaXNp
YmxlUG9zaXRpb24gbmV4dFZpc2libGVQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsgfQorICAgIFZpc2libGVQ
b3NpdGlvbiBwcmV2aW91c1Zpc2libGVQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsgfQorICAgIFZpc2libGVQ
b3NpdGlvbiBuZXh0V29yZEVuZChjb25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsgfQorICAgIFZpc2libGVQb3NpdGlvbiBwcmV2
aW91c1dvcmRTdGFydChjb25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBWaXNpYmxlUG9zaXRpb24oKTsgfQorICAgIFZpc2libGVQb3NpdGlvbiBuZXh0TGluZUVu
ZFBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IFZpc2libGVQb3NpdGlvbigpOyB9CisgICAgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzTGluZVN0
YXJ0UG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gVmlzaWJsZVBvc2l0aW9uKCk7IH0KKyAgICBWaXNpYmxlUG9zaXRpb24gbmV4dFNlbnRlbmNl
RW5kUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gVmlzaWJsZVBvc2l0aW9uKCk7IH0KKyAgICBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXNTZW50
ZW5jZVN0YXJ0UG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJikgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7IH0KKyAgICBWaXNpYmxlUG9zaXRpb24gbmV4dFBh
cmFncmFwaEVuZFBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOyB9CisgICAgVmlzaWJsZVBvc2l0aW9uIHByZXZp
b3VzUGFyYWdyYXBoU3RhcnRQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsgfQorICAgIFZpc2libGVQb3NpdGlv
biB2aXNpYmxlUG9zaXRpb25Gb3JJbmRleCh1bnNpZ25lZCwgYm9vbCAvKmxhc3RJbmRleE9LICov
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsgfQorCisgICAgVmlz
aWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkZvckluZGV4KGludCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7IH0KKyAgICBpbnQgaW5kZXhGb3JWaXNpYmxlUG9z
aXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gMDsg
fQorCisgICAgQVhDb3JlT2JqZWN0KiBhY2Nlc3NpYmlsaXR5T2JqZWN0Rm9yUG9zaXRpb24oY29u
c3QgVmlzaWJsZVBvc2l0aW9uJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQor
ICAgIGludCBsaW5lRm9yUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJikgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gMDsgfQorICAgIFBsYWluVGV4dFJhbmdlIHBsYWluVGV4dFJhbmdlRm9y
VmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uUmFuZ2UmKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBQbGFpblRleHRSYW5nZSgpOyB9CisgICAgaW50IGluZGV4KGNvbnN0
IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0KKworICAgIHZv
aWQgbGluZUJyZWFrcyhWZWN0b3I8aW50PiYpIGNvbnN0IG92ZXJyaWRlIHsgfQorICAgIFBsYWlu
VGV4dFJhbmdlIGRvQVhSYW5nZUZvckxpbmUodW5zaWduZWQpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIFBsYWluVGV4dFJhbmdlKCk7IH0KKyAgICBQbGFpblRleHRSYW5nZSBkb0FYUmFuZ2VGb3JQ
b3NpdGlvbihjb25zdCBJbnRQb2ludCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFBsYWluVGV4
dFJhbmdlKCk7IH0KKyAgICBQbGFpblRleHRSYW5nZSBkb0FYUmFuZ2VGb3JJbmRleCh1bnNpZ25l
ZCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gUGxhaW5UZXh0UmFuZ2UoKTsgfQorICAgIFBsYWlu
VGV4dFJhbmdlIGRvQVhTdHlsZVJhbmdlRm9ySW5kZXgodW5zaWduZWQpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIFBsYWluVGV4dFJhbmdlKCk7IH0KKworICAgIFN0cmluZyBkb0FYU3RyaW5nRm9y
UmFuZ2UoY29uc3QgUGxhaW5UZXh0UmFuZ2UmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBTdHJp
bmcoKTsgfQorICAgIEludFJlY3QgZG9BWEJvdW5kc0ZvclJhbmdlKGNvbnN0IFBsYWluVGV4dFJh
bmdlJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gSW50UmVjdCgpOyB9CisgICAgSW50UmVjdCBk
b0FYQm91bmRzRm9yUmFuZ2VVc2luZ0NoYXJhY3Rlck9mZnNldChjb25zdCBQbGFpblRleHRSYW5n
ZSYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEludFJlY3QoKTsgfQorCisgICAgdW5zaWduZWQg
ZG9BWExpbmVGb3JJbmRleCh1bnNpZ25lZCkgb3ZlcnJpZGUgeyByZXR1cm4gMDsgfQorCisgICAg
U3RyaW5nIGNvbXB1dGVkUm9sZVN0cmluZygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFN0cmlu
ZygpOyB9CisKKyAgICAvLyBNU0FBCisgICAgU3RyaW5nIHN0cmluZ1ZhbHVlRm9yTVNBQSgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIFN0cmluZygpOyB9CisgICAgU3RyaW5nIHN0cmluZ1JvbGVG
b3JNU0FBKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gU3RyaW5nKCk7IH0KKyAgICBTdHJpbmcg
bmFtZUZvck1TQUEoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBTdHJpbmcoKTsgfQorICAgIFN0
cmluZyBkZXNjcmlwdGlvbkZvck1TQUEoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBTdHJpbmco
KTsgfQorICAgIEFjY2Vzc2liaWxpdHlSb2xlIHJvbGVWYWx1ZUZvck1TQUEoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBBY2Nlc3NpYmlsaXR5Um9sZTo6VW5rbm93bjsgfQorCisgICAgU3RyaW5n
IHBhc3N3b3JkRmllbGRWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFN0cmluZygpOyB9
CisgICAgYm9vbCBpc1ZhbHVlQXV0b2ZpbGxlZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgYm9vbCBpc1ZhbHVlQXV0b2ZpbGxBdmFpbGFibGUoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBmYWxzZTsgfQorICAgIEF1dG9GaWxsQnV0dG9uVHlwZSB2YWx1ZUF1dG9maWxs
QnV0dG9uVHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEF1dG9GaWxsQnV0dG9uVHlwZTo6
Tm9uZTsgfQorCisgICAgdm9pZCBhcmlhVHJlZVJvd3MoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVj
dG9yJikgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCBhcmlhVHJlZUl0ZW1EaXNjbG9zZWRSb3dzKEFj
Y2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYpIG92ZXJyaWRlIHsgfQorICAgIHZvaWQgYXJpYVRy
ZWVJdGVtQ29udGVudChBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImKSBvdmVycmlkZSB7IH0K
KworICAgIGJvb2wgc3VwcG9ydHNMaXZlUmVnaW9uKGJvb2wgPSB0cnVlKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNJbnNpZGVMaXZlUmVnaW9uKGJvb2wgPSB0
cnVlKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIEFYQ29yZU9iamVjdCog
bGl2ZVJlZ2lvbkFuY2VzdG9yKGJvb2wgPSB0cnVlKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBu
dWxscHRyOyB9CisgICAgY29uc3QgU3RyaW5nIGxpdmVSZWdpb25TdGF0dXMoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBTdHJpbmcoKTsgfQorICAgIGNvbnN0IFN0cmluZyBsaXZlUmVnaW9uUmVs
ZXZhbnQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBTdHJpbmcoKTsgfQorICAgIGJvb2wgbGl2
ZVJlZ2lvbkF0b21pYygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9v
bCBpc0J1c3koKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorCisgICAgYm9vbCBo
YXNDb250ZW50RWRpdGFibGVBdHRyaWJ1dGVTZXQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBm
YWxzZTsgfQorCisgICAgYm9vbCBzdXBwb3J0c1JlYWRPbmx5KCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICBTdHJpbmcgcmVhZE9ubHlWYWx1ZSgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIFN0cmluZygpOyB9CisKKyAgICBib29sIHN1cHBvcnRzQXV0b0NvbXBsZXRlKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBTdHJpbmcgYXV0b0NvbXBsZXRl
VmFsdWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBTdHJpbmcoKTsgfQorCisgICAgYm9vbCBz
dXBwb3J0c0FSSUFBdHRyaWJ1dGVzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0K
KworICAgIE9wdGlvblNldDxTcGVha0FzPiBzcGVha0FzUHJvcGVydHkoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBPcHRpb25TZXQ8U3BlYWtBcz4oKTsgfQorCisgICAgdm9pZCBzY3JvbGxUb01h
a2VWaXNpYmxlKCkgY29uc3Qgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCBzY3JvbGxUb01ha2VWaXNp
YmxlV2l0aFN1YkZvY3VzKGNvbnN0IEludFJlY3QmKSBjb25zdCBvdmVycmlkZSB7IH0KKyAgICB2
b2lkIHNjcm9sbFRvR2xvYmFsUG9pbnQoY29uc3QgSW50UG9pbnQmKSBjb25zdCBvdmVycmlkZSB7
IH0KKworICAgIGJvb2wgc2Nyb2xsQnlQYWdlKFNjcm9sbEJ5UGFnZURpcmVjdGlvbikgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBJbnRQb2ludCBzY3JvbGxQb3NpdGlvbigp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEludFBvaW50KCk7IH0KKyAgICBJbnRTaXplIHNjcm9s
bENvbnRlbnRzU2l6ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEludFNpemUoKTsgfQorICAg
IEludFJlY3Qgc2Nyb2xsVmlzaWJsZUNvbnRlbnRSZWN0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gSW50UmVjdCgpOyB9CisgICAgdm9pZCBzY3JvbGxUb01ha2VWaXNpYmxlKGNvbnN0IFNjcm9s
bFJlY3RUb1Zpc2libGVPcHRpb25zJikgY29uc3Qgb3ZlcnJpZGUgeyB9CisKKyAgICBib29sIGxh
c3RLbm93bklzSWdub3JlZFZhbHVlKCkgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2
b2lkIHNldExhc3RLbm93bklzSWdub3JlZFZhbHVlKGJvb2wpIG92ZXJyaWRlIHsgfQorCisgICAg
dm9pZCBub3RpZnlJZklnbm9yZWRWYWx1ZUNoYW5nZWQoKSBvdmVycmlkZSB7IH0KKworICAgIGJv
b2wgaXNNYXRoRWxlbWVudCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAg
Ym9vbCBpc01hdGhGcmFjdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Cisg
ICAgYm9vbCBpc01hdGhGZW5jZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQor
ICAgIGJvb2wgaXNNYXRoU3Vic2NyaXB0U3VwZXJzY3JpcHQoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNNYXRoUm93KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICBib29sIGlzTWF0aFVuZGVyT3ZlcigpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc01hdGhSb290KCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzTWF0aFNxdWFyZVJvb3QoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNNYXRoVGV4dCgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc01hdGhOdW1iZXIoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNNYXRoT3BlcmF0b3IoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNNYXRoRmVuY2VPcGVyYXRvcigpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc01hdGhTZXBhcmF0b3JP
cGVyYXRvcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc01h
dGhJZGVudGlmaWVyKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29s
IGlzTWF0aFRhYmxlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29s
IGlzTWF0aFRhYmxlUm93KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBi
b29sIGlzTWF0aFRhYmxlQ2VsbCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Cisg
ICAgYm9vbCBpc01hdGhNdWx0aXNjcmlwdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNl
OyB9CisgICAgYm9vbCBpc01hdGhUb2tlbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNl
OyB9CisgICAgYm9vbCBpc01hdGhTY3JpcHRPYmplY3QoQWNjZXNzaWJpbGl0eU1hdGhTY3JpcHRP
YmplY3RUeXBlKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNN
YXRoTXVsdGlzY3JpcHRPYmplY3QoQWNjZXNzaWJpbGl0eU1hdGhNdWx0aXNjcmlwdE9iamVjdFR5
cGUpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICBBWENvcmVPYmplY3Qq
IG1hdGhSYWRpY2FuZE9iamVjdCgpIG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICBB
WENvcmVPYmplY3QqIG1hdGhSb290SW5kZXhPYmplY3QoKSBvdmVycmlkZSB7IHJldHVybiBudWxs
cHRyOyB9CisKKyAgICBBWENvcmVPYmplY3QqIG1hdGhVbmRlck9iamVjdCgpIG92ZXJyaWRlIHsg
cmV0dXJuIG51bGxwdHI7IH0KKyAgICBBWENvcmVPYmplY3QqIG1hdGhPdmVyT2JqZWN0KCkgb3Zl
cnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQorCisgICAgQVhDb3JlT2JqZWN0KiBtYXRoTnVtZXJh
dG9yT2JqZWN0KCkgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIEFYQ29yZU9iamVj
dCogbWF0aERlbm9taW5hdG9yT2JqZWN0KCkgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQor
CisgICAgQVhDb3JlT2JqZWN0KiBtYXRoQmFzZU9iamVjdCgpIG92ZXJyaWRlIHsgcmV0dXJuIG51
bGxwdHI7IH0KKyAgICBBWENvcmVPYmplY3QqIG1hdGhTdWJzY3JpcHRPYmplY3QoKSBvdmVycmlk
ZSB7IHJldHVybiBudWxscHRyOyB9CisgICAgQVhDb3JlT2JqZWN0KiBtYXRoU3VwZXJzY3JpcHRP
YmplY3QoKSBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9CisKKyAgICBTdHJpbmcgbWF0aEZl
bmNlZE9wZW5TdHJpbmcoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBTdHJpbmcoKTsgfQorICAg
IFN0cmluZyBtYXRoRmVuY2VkQ2xvc2VTdHJpbmcoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBT
dHJpbmcoKTsgfQorICAgIGludCBtYXRoTGluZVRoaWNrbmVzcygpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIDA7IH0KKyAgICBib29sIGlzQW5vbnltb3VzTWF0aE9wZXJhdG9yKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIHZvaWQgbWF0aFByZXNjcmlwdHMoQWNjZXNz
aWJpbGl0eU1hdGhNdWx0aXNjcmlwdFBhaXJzJikgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCBtYXRo
UG9zdHNjcmlwdHMoQWNjZXNzaWJpbGl0eU1hdGhNdWx0aXNjcmlwdFBhaXJzJikgb3ZlcnJpZGUg
eyB9CisKKyAgICBib29sIGlzQVhIaWRkZW4oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxz
ZTsgfQorICAgIGJvb2wgaXNET01IaWRkZW4oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxz
ZTsgfQorICAgIGJvb2wgaXNIaWRkZW4oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsg
fQorCisgICAgQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqIHdyYXBwZXIoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBtX3dyYXBwZXIuZ2V0KCk7IH0KKyAgICB2b2lkIHNldFdyYXBwZXIoQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqIHdyYXBwZXIpIG92ZXJyaWRlIHsgbV93cmFwcGVyID0g
d3JhcHBlcjsgfQorCisgICAgdm9pZCBvdmVycmlkZUF0dGFjaG1lbnRQYXJlbnQoQVhDb3JlT2Jq
ZWN0Kikgb3ZlcnJpZGUgeyB9CisKKyAgICBib29sIGFjY2Vzc2liaWxpdHlJZ25vcmVBdHRhY2ht
ZW50KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBBY2Nlc3NpYmlsaXR5
T2JqZWN0SW5jbHVzaW9uIGFjY2Vzc2liaWxpdHlQbGF0Zm9ybUluY2x1ZGVzT2JqZWN0KCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gQWNjZXNzaWJpbGl0eU9iamVjdEluY2x1c2lvbjo6RGVmYXVs
dEJlaGF2aW9yOyB9CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIGludCBhY2Nlc3Np
YmlsaXR5UGFzc3dvcmRGaWVsZExlbmd0aCgpIG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0KKyAgICBi
b29sIGhhc1RvdWNoRXZlbnRMaXN0ZW5lcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNl
OyB9CisgICAgYm9vbCBpc0lucHV0VHlwZVBvcHVwQnV0dG9uKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gZmFsc2U7IH0KKyNlbmRpZgorCisgICAgdm9pZCB1cGRhdGVCYWNraW5nU3RvcmUoKSBv
dmVycmlkZTsKKworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIGJvb2wgcHJldmVudEtleWJvYXJk
RE9NRXZlbnREaXNwYXRjaCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAg
dm9pZCBzZXRQcmV2ZW50S2V5Ym9hcmRET01FdmVudERpc3BhdGNoKGJvb2wpIG92ZXJyaWRlIHsg
fQorICAgIGJvb2wgZmlsZVVwbG9hZEJ1dHRvblJldHVybnNWYWx1ZUluVGl0bGUoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIFN0cmluZyBzcGVlY2hIaW50QXR0cmlidXRl
VmFsdWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBzdHJpbmdBdHRyaWJ1dGVWYWx1ZShBWFBy
b3BlcnR5TmFtZTo6U3BlZWNoSGludCk7IH0KKyAgICBTdHJpbmcgZGVzY3JpcHRpb25BdHRyaWJ1
dGVWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0cmluZ0F0dHJpYnV0ZVZhbHVlKEFY
UHJvcGVydHlOYW1lOjpEZXNjcmlwdGlvbik7IH0KKyAgICBTdHJpbmcgaGVscFRleHRBdHRyaWJ1
dGVWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0cmluZ0F0dHJpYnV0ZVZhbHVlKEFY
UHJvcGVydHlOYW1lOjpIZWxwVGV4dCk7IH0KKyAgICBTdHJpbmcgdGl0bGVBdHRyaWJ1dGVWYWx1
ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0cmluZ0F0dHJpYnV0ZVZhbHVlKEFYUHJvcGVy
dHlOYW1lOjpUaXRsZSk7IH0KKyNlbmRpZgorCisjaWYgUExBVEZPUk0oQ09DT0EpICYmICFQTEFU
Rk9STShJT1NfRkFNSUxZKQorICAgIGJvb2wgY2FyZXRCcm93c2luZ0VuYWJsZWQoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZvaWQgc2V0Q2FyZXRCcm93c2luZ0VuYWJs
ZWQoYm9vbCkgb3ZlcnJpZGUgeyB9CisjZW5kaWYKKworICAgIEFYQ29yZU9iamVjdCogZm9jdXNh
YmxlQW5jZXN0b3IoKSBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9CisgICAgQVhDb3JlT2Jq
ZWN0KiBlZGl0YWJsZUFuY2VzdG9yKCkgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQorICAg
IEFYQ29yZU9iamVjdCogaGlnaGVzdEVkaXRhYmxlQW5jZXN0b3IoKSBvdmVycmlkZSB7IHJldHVy
biBudWxscHRyOyB9CisKKyAgICBjb25zdCBBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldyogYW5jZXN0
b3JBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldyhib29sKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBu
dWxscHRyOyB9CisKKyAgICB2b2lkIHNldElzSWdub3JlZEZyb21QYXJlbnREYXRhKEFjY2Vzc2li
aWxpdHlJc0lnbm9yZWRGcm9tUGFyZW50RGF0YSYpIG92ZXJyaWRlIHsgfTsKKyAgICB2b2lkIGNs
ZWFySXNJZ25vcmVkRnJvbVBhcmVudERhdGEoKSBvdmVycmlkZSB7IH0KKyAgICB2b2lkIHNldElz
SWdub3JlZEZyb21QYXJlbnREYXRhRm9yQ2hpbGQoQVhDb3JlT2JqZWN0Kikgb3ZlcnJpZGUgeyB9
CisKKyAgICB2b2lkIHNldFRyZWVJZGVudGlmaWVyKEFYSXNvbGF0ZWRUcmVlSUQpOworICAgIEFY
SXNvbGF0ZWRUcmVlKiB0cmVlKCkgY29uc3Q7CisgICAgdm9pZCBzZXRQYXJlbnQoQVhJRCk7Cisg
ICAgdm9pZCBhcHBlbmRDaGlsZChBWElEKTsKK3ByaXZhdGU6CiAgICAgZW51bSBjbGFzcyBBWFBy
b3BlcnR5TmFtZSA6IHVpbnQ4X3QgewogICAgICAgICBOb25lID0gMCwKICAgICAgICAgSGVscFRl
eHQsCkBAIC02OCw1NCArNjU1LDEzIEBAIHB1YmxpYzoKICAgICAgICAgVGl0bGUsCiAgICAgfTsK
IAotICAgIHN0YXRpYyBSZWY8QVhJc29sYXRlZFRyZWVOb2RlPiBjcmVhdGUoY29uc3QgQWNjZXNz
aWJpbGl0eU9iamVjdCYpOwotICAgIHZpcnR1YWwgfkFYSXNvbGF0ZWRUcmVlTm9kZSgpOwotCi0g
ICAgQVhJRCBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9Ci0gICAg
Ci0gICAgdm9pZCBzZXRQYXJlbnQoQVhJRCk7CiAgICAgQVhJRCBwYXJlbnQoKSBjb25zdCB7IHJl
dHVybiBtX3BhcmVudDsgfQogCi0gICAgdm9pZCBhcHBlbmRDaGlsZChBWElEKTsKLSAgICBjb25z
dCBWZWN0b3I8QVhJRD4mIGNoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZHJlbjsgfTsK
LQotICAgIEFYSXNvbGF0ZWRUcmVlKiB0cmVlKCkgY29uc3Q7CiAgICAgQVhJc29sYXRlZFRyZWVJ
RCB0cmVlSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fdHJlZUlkZW50aWZpZXI7IH0KLSAg
ICB2b2lkIHNldFRyZWVJZGVudGlmaWVyKEFYSXNvbGF0ZWRUcmVlSUQpOwogCi0jaWYgUExBVEZP
Uk0oQ09DT0EpCi0gICAgQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqIHdyYXBwZXIoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBtX3dyYXBwZXIuZ2V0KCk7IH0KLSAgICB2b2lkIHNldFdyYXBw
ZXIoQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqIHdyYXBwZXIpIHsgbV93cmFwcGVyID0gd3Jh
cHBlcjsgfQotI2VuZGlmCi0KLXByb3RlY3RlZDoKICAgICBBWElzb2xhdGVkVHJlZU5vZGUoKSA9
IGRlZmF1bHQ7Ci0KLXByaXZhdGU6Ci0gICAgQVhJc29sYXRlZFRyZWVOb2RlKGNvbnN0IEFjY2Vz
c2liaWxpdHlPYmplY3QmKTsKLSAgICB2b2lkIGluaXRpYWxpemVBdHRyaWJ1dGVEYXRhKGNvbnN0
IEFjY2Vzc2liaWxpdHlPYmplY3QmKTsKLQotICAgIEFYQ29yZU9iamVjdCogYWNjZXNzaWJpbGl0
eUhpdFRlc3QoY29uc3QgSW50UG9pbnQmKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIHVwZGF0
ZUNoaWxkcmVuSWZOZWNlc3NhcnkoKSBvdmVycmlkZSB7IH0KLQotICAgIGJvb2wgaXNNZWRpYUNv
bnRyb2xMYWJlbCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShB
WFByb3BlcnR5TmFtZTo6SXNNZWRpYUNvbnRyb2xMYWJlbCk7IH0KLSAgICBib29sIGlzQXR0YWNo
bWVudCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3Bl
cnR5TmFtZTo6SXNBdHRhY2htZW50KTsgfQotICAgIEFjY2Vzc2liaWxpdHlSb2xlIHJvbGVWYWx1
ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlSb2xl
PihpbnRBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6Um9sZVZhbHVlKSk7IH0KLSAgICBi
b29sIGlzTGluaygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShB
WFByb3BlcnR5TmFtZTo6SXNMaW5rKTsgfQotICAgIGJvb2wgaXNJbWFnZU1hcExpbmsoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6Oklz
SW1hZ2VNYXBMaW5rKTsgfQotICAgIGJvb2wgaXNJbWFnZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNJbWFnZSk7IH0KLSAgICBi
b29sIGlzRmlsZVVwbG9hZEJ1dHRvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRy
aWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNGaWxlVXBsb2FkQnV0dG9uKTsgfQotICAgIGJv
b2wgYWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xB
dHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNBY2Nlc3NpYmlsaXR5SWdub3JlZCk7IH0K
LSAgICBBWENvcmVPYmplY3QqIHBhcmVudE9iamVjdEludGVyZmFjZVVuaWdub3JlZCgpIGNvbnN0
IG92ZXJyaWRlOwotICAgIGJvb2wgaXNUcmVlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9v
bEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc1RyZWUpOyB9Ci0gICAgYm9vbCBpc1Ry
ZWVJdGVtKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJv
cGVydHlOYW1lOjpJc1RyZWVJdGVtKTsgfQotICAgIGJvb2wgaXNTY3JvbGxiYXIoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzU2Ny
b2xsYmFyKTsgfQotICAgIEZsb2F0UmVjdCByZWxhdGl2ZUZyYW1lKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gcmVjdEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpSZWxhdGl2ZUZyYW1l
KTsgfQotICAgIFN0cmluZyBzcGVlY2hIaW50QXR0cmlidXRlVmFsdWUoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBzdHJpbmdBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6U3BlZWNoSGlu
dCk7IH0KLSAgICBTdHJpbmcgZGVzY3JpcHRpb25BdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIHN0cmluZ0F0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpEZXNjcmlw
dGlvbik7IH0KLSAgICBTdHJpbmcgaGVscFRleHRBdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIHN0cmluZ0F0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpIZWxwVGV4
dCk7IH0KLSAgICBTdHJpbmcgdGl0bGVBdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIHN0cmluZ0F0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpUaXRsZSk7IH0KLSAg
ICBBWENvcmVPYmplY3QqIGZvY3VzZWRVSUVsZW1lbnQoKSBjb25zdCBvdmVycmlkZTsKKyAgICBB
WElzb2xhdGVkVHJlZU5vZGUoY29uc3QgQVhDb3JlT2JqZWN0Jik7CisgICAgdm9pZCBpbml0aWFs
aXplQXR0cmlidXRlRGF0YShjb25zdCBBWENvcmVPYmplY3QmKTsKIAogICAgIHVzaW5nIEF0dHJp
YnV0ZVZhbHVlVmFyaWFudCA9IFZhcmlhbnQ8c3RkOjpudWxscHRyX3QsIFN0cmluZywgYm9vbCwg
aW50LCB1bnNpZ25lZCwgZG91YmxlLCBPcHRpb25hbDxGbG9hdFJlY3Q+PjsKICAgICB2b2lkIHNl
dFByb3BlcnR5KEFYUHJvcGVydHlOYW1lLCBBdHRyaWJ1dGVWYWx1ZVZhcmlhbnQmJiwgYm9vbCBz
aG91bGRSZW1vdmUgPSBmYWxzZSk7CkBAIC0xMjgsMTEgKzY3NCwxMiBAQCBwcml2YXRlOgogICAg
IEZsb2F0UmVjdCByZWN0QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWUpIGNvbnN0OwogCiAg
ICAgQVhJRCBtX3BhcmVudDsKLSAgICBBWElEIG1faWRlbnRpZmllcjsKKyAgICBBWElEIG1faWQ7
CiAgICAgYm9vbCBtX2luaXRpYWxpemVkIHsgZmFsc2UgfTsKICAgICBBWElzb2xhdGVkVHJlZUlE
IG1fdHJlZUlkZW50aWZpZXI7CiAgICAgUmVmUHRyPEFYSXNvbGF0ZWRUcmVlPiBtX2NhY2hlZFRy
ZWU7Ci0gICAgVmVjdG9yPEFYSUQ+IG1fY2hpbGRyZW47CisgICAgVmVjdG9yPEFYSUQ+IG1fY2hp
bGRyZW5JRHM7CisgICAgVmVjdG9yPFJlZlB0cjxBWENvcmVPYmplY3Q+PiBtX2NoaWxkcmVuOwog
CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgUmV0YWluUHRyPFdlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyPiBtX3dyYXBwZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L21hYy9BWE9iamVjdENhY2hlTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9tYWMvQVhPYmplY3RDYWNoZU1hYy5tbQppbmRleCBjOWE4OTNiYzMwOTk2ZDk5ZmU0NWNi
MWI3MjE5ZTM2YWM3M2EwZmRiLi5lYTRiZDVjZDk1ZTkyMzViY2MyNzFjYmUzYWM2ZmE4ZjEzMzk2
OTgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BWE9iamVj
dENhY2hlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FYT2Jq
ZWN0Q2FjaGVNYWMubW0KQEAgLTIzOCwxNyArMjM4LDcgQEAgdm9pZCBBWE9iamVjdENhY2hlOjpk
ZXRhY2hXcmFwcGVyKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iaiwgQWNjZXNzaWJpbGl0eURldGFj
aG0KICAgICBvYmotPnNldFdyYXBwZXIobnVsbHB0cik7CiB9CiAKLSNpZiBFTkFCTEUoQUNDRVNT
SUJJTElUWV9JU09MQVRFRF9UUkVFKQotdm9pZCBBWE9iamVjdENhY2hlOjphc3NvY2lhdGVJc29s
YXRlZFRyZWVOb2RlKEFjY2Vzc2liaWxpdHlPYmplY3QmIG9iamVjdCwgQVhJc29sYXRlZFRyZWVO
b2RlJiBub2RlLCBBWElzb2xhdGVkVHJlZUlEIHRyZWVJRCkKLXsKLSAgICBhdXRvIHdyYXBwZXIg
PSBvYmplY3Qud3JhcHBlcigpOwotICAgIEFTU0VSVCh3cmFwcGVyKTsKLSAgICB3cmFwcGVyLmlz
b2xhdGVkVHJlZUlkZW50aWZpZXIgPSB0cmVlSUQ7Ci0gICAgbm9kZS5zZXRXcmFwcGVyKHdyYXBw
ZXIpOwotfQotI2VuZGlmCi0KLXZvaWQgQVhPYmplY3RDYWNoZTo6YXR0YWNoV3JhcHBlcihBY2Nl
c3NpYmlsaXR5T2JqZWN0KiBvYmopCit2b2lkIEFYT2JqZWN0Q2FjaGU6OmF0dGFjaFdyYXBwZXIo
QVhDb3JlT2JqZWN0KiBvYmopCiB7CiAgICAgUmV0YWluUHRyPFdlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyPiB3cmFwcGVyID0gYWRvcHROUyhbW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyIGFsbG9jXSBpbml0V2l0aEFjY2Vzc2liaWxpdHlPYmplY3Q6b2JqXSk7CiAgICAgb2JqLT5z
ZXRXcmFwcGVyKHdyYXBwZXIuZ2V0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ckJhc2UuaAppbmRleCA4ODU4YmVhM2QwODdiMWJiNjI2NWQ3ODdmZDg4MDU4ZDcxMjYyZmZjLi4w
NWE0NGZlMjAyZWVmYTJkZmJkOTkzNWI1ZTJmYWY5NDA4ZTgzZjVjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ckJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlckJhc2UuaApAQCAtNTEsMTQgKzUxLDExIEBAIGNsYXNzIFZpc2li
bGVQb3NpdGlvbjsKIH0KIAogQGludGVyZmFjZSBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ckJhc2UgOiBOU09iamVjdCB7Ci0gICAgV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdCogbV9v
YmplY3Q7CisgICAgV2ViQ29yZTo6QVhDb3JlT2JqZWN0KiBtX29iamVjdDsKICAgICBXZWJDb3Jl
OjpBWElEIF9pZGVudGlmaWVyOwotI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZX0lTT0xBVEVEX1RS
RUUpCi0gICAgUmVmUHRyPFdlYkNvcmU6OkFYSXNvbGF0ZWRUcmVlTm9kZT4gbV9pc29sYXRlZFRy
ZWVOb2RlOwotI2VuZGlmCiB9Ci0gCi0tIChpZClpbml0V2l0aEFjY2Vzc2liaWxpdHlPYmplY3Q6
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3QqKWF4T2JqZWN0OworCistIChpZClpbml0V2l0
aEFjY2Vzc2liaWxpdHlPYmplY3Q6KFdlYkNvcmU6OkFYQ29yZU9iamVjdCopYXhPYmplY3Q7CiAK
ICNpZiBFTkFCTEUoQUNDRVNTSUJJTElUWV9JU09MQVRFRF9UUkVFKQogQHByb3BlcnR5IChub25h
dG9taWMsIHJlYWRvbmx5KSBSZWZQdHI8V2ViQ29yZTo6QVhJc29sYXRlZFRyZWVOb2RlPiBpc29s
YXRlZFRyZWVOb2RlOwpAQCAtNjksNyArNjYsNyBAQCBjbGFzcyBWaXNpYmxlUG9zaXRpb247CiAK
IEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIFdlYkNvcmU6OkFYSUQgaWRlbnRpZmllcjsK
IAotLSAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdCopYWNjZXNzaWJpbGl0eU9iamVjdDsK
Ky0gKFdlYkNvcmU6OkFYQ29yZU9iamVjdCopYWNjZXNzaWJpbGl0eU9iamVjdDsKIC0gKEJPT0wp
dXBkYXRlT2JqZWN0QmFja2luZ1N0b3JlOwogCiAvLyBUaGlzIGNhbiBiZSBlaXRoZXIgYW4gQWNj
ZXNzaWJpbGl0eU9iamVjdCBvciBhbiBBWElzb2xhdGVkVHJlZU5vZGUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyQmFzZS5tbSBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyQmFzZS5tbQppbmRleCBmYTg5YjZhZDk4MDkzYmRmN2ExODU3Zjk2
N2IwNzAxMjlkYTYyNTM3Li5mMGZlYTIzOGYwMTAxYTUzNmI0YTY3OTBhZjcyOWQzOTJiNGZhYTU2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlckJhc2UubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlLm1tCkBAIC0zMSw4ICsz
MSw2IEBACiAKICNpZiBFTkFCTEUoQUNDRVNTSUJJTElUWSkKIAotI2ltcG9ydCAiQVhJc29sYXRl
ZFRyZWUuaCIKLSNpbXBvcnQgIkFYSXNvbGF0ZWRUcmVlTm9kZS5oIgogI2ltcG9ydCAiQVhPYmpl
Y3RDYWNoZS5oIgogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93LmgiCiAjaW1wb3J0
ICJBY2Nlc3NpYmlsaXR5TGlzdC5oIgpAQCAtMjc1LDIwICsyNzMsMTAgQEAgc3RhdGljIHZvaWQg
YWRkQ2hpbGRUb0FycmF5KEFYQ29yZU9iamVjdCYgY2hpbGQsIFJldGFpblB0cjxOU011dGFibGVB
cnJheT4gYXJyYXkKICAgICAgICAgW2FycmF5LmdldCgpIGFkZE9iamVjdDp3cmFwcGVyXTsKIH0K
IAotI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZX0lTT0xBVEVEX1RSRUUpCi1OU0FycmF5ICpjb252
ZXJ0VG9OU0FycmF5KGNvbnN0IFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6QVhJc29sYXRlZFRyZWVO
b2RlPj4mIGNoaWxkcmVuKQotewotICAgIE5TTXV0YWJsZUFycmF5ICpyZXN1bHQgPSBbW05TTXV0
YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OmNoaWxkcmVuLnNpemUoKV07Ci0gICAg
Zm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuKQotICAgICAgICBhZGRDaGlsZFRvQXJyYXkoKmNo
aWxkLCByZXN1bHQpOwotICAgIHJldHVybiBbcmVzdWx0IGF1dG9yZWxlYXNlXTsKLX0KLSNlbmRp
ZgotCi1OU0FycmF5ICpjb252ZXJ0VG9OU0FycmF5KGNvbnN0IFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgY2hpbGRyZW4pCitOU0FycmF5
ICpjb252ZXJ0VG9OU0FycmF5KGNvbnN0IFdlYkNvcmU6OkFYQ29yZU9iamVjdDo6QWNjZXNzaWJp
bGl0eUNoaWxkcmVuVmVjdG9yJiBjaGlsZHJlbikKIHsKICAgICBOU011dGFibGVBcnJheSAqcmVz
dWx0ID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpjaGlsZHJlbi5z
aXplKCldOwotICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbikKKyAgICBmb3IgKGNvbnN0
IGF1dG8mIGNoaWxkIDogY2hpbGRyZW4pCiAgICAgICAgIGFkZENoaWxkVG9BcnJheSgqY2hpbGQs
IHJlc3VsdCk7CiAgICAgcmV0dXJuIFtyZXN1bHQgYXV0b3JlbGVhc2VdOwogfQpAQCAtMjk2LDEx
ICsyODQsOCBAQCBOU0FycmF5ICpjb252ZXJ0VG9OU0FycmF5KGNvbnN0IFdlYkNvcmU6OkFjY2Vz
c2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZAogQGltcGxlbWVudGF0aW9uIFdlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZQogCiBAc3ludGhlc2l6ZSBpZGVudGlmaWVyPV9p
ZGVudGlmaWVyOwotI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZX0lTT0xBVEVEX1RSRUUpCi1Ac3lu
dGhlc2l6ZSBpc29sYXRlZFRyZWVJZGVudGlmaWVyPV9pc29sYXRlZFRyZWVJZGVudGlmaWVyOwot
I2VuZGlmCiAKLS0gKGlkKWluaXRXaXRoQWNjZXNzaWJpbGl0eU9iamVjdDooQWNjZXNzaWJpbGl0
eU9iamVjdCopYXhPYmplY3QKKy0gKGlkKWluaXRXaXRoQWNjZXNzaWJpbGl0eU9iamVjdDooQVhD
b3JlT2JqZWN0KilheE9iamVjdAogewogICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQog
ICAgICAgICByZXR1cm4gbmlsOwpAQCAtMzExLDQ2ICsyOTYsMTQgQEAgTlNBcnJheSAqY29udmVy
dFRvTlNBcnJheShjb25zdCBXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmls
aXR5Q2hpbGQKICAgICByZXR1cm4gc2VsZjsKIH0KIAotI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZ
X0lTT0xBVEVEX1RSRUUpCi0tIChSZWZQdHI8V2ViQ29yZTo6QVhJc29sYXRlZFRyZWVOb2RlPilp
c29sYXRlZFRyZWVOb2RlCi17Ci0gICAgUkVMRUFTRV9BU1NFUlQoIWlzTWFpblRocmVhZCgpKTsK
LQotICAgIGlmICghX2lkZW50aWZpZXIpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
aWYgKG1faXNvbGF0ZWRUcmVlTm9kZSkKLSAgICAgICAgcmV0dXJuIG1faXNvbGF0ZWRUcmVlTm9k
ZTsKLQotICAgIG1faXNvbGF0ZWRUcmVlTm9kZSA9IEFYSXNvbGF0ZWRUcmVlOjpub2RlSW5UcmVl
Rm9ySUQoX2lzb2xhdGVkVHJlZUlkZW50aWZpZXIsIF9pZGVudGlmaWVyKTsKLSAgICByZXR1cm4g
bV9pc29sYXRlZFRyZWVOb2RlOwotfQotI2VuZGlmCi0KIC0gKHZvaWQpZGV0YWNoCiB7CiAgICAg
bV9vYmplY3QgPSBudWxscHRyOwogICAgIF9pZGVudGlmaWVyID0gMDsKLQotI2lmIEVOQUJMRShB
Q0NFU1NJQklMSVRZX0lTT0xBVEVEX1RSRUUpCi0gICAgbV9pc29sYXRlZFRyZWVOb2RlID0gbnVs
bHB0cjsKLSAgICBfaXNvbGF0ZWRUcmVlSWRlbnRpZmllciA9IDA7Ci0jZW5kaWYKIH0KIAogLSAo
Qk9PTCl1cGRhdGVPYmplY3RCYWNraW5nU3RvcmUKIHsKLSNpZiBFTkFCTEUoQUNDRVNTSUJJTElU
WV9JU09MQVRFRF9UUkVFKQotICAgIGlmIChfQVhVSUVsZW1lbnRSZXF1ZXN0U2VydmljZWRCeVNl
Y29uZGFyeUFYVGhyZWFkKCkpIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWlzTWFpblRocmVh
ZCgpKTsKLSAgICAgICAgaWYgKGF1dG8gdHJlZU5vZGUgPSBzZWxmLmlzb2xhdGVkVHJlZU5vZGUp
IHsKLSAgICAgICAgICAgIGlmIChhdXRvIHRyZWUgPSB0cmVlTm9kZS0+dHJlZSgpKQotICAgICAg
ICAgICAgICAgIHRyZWUtPmFwcGx5UGVuZGluZ0NoYW5nZXMoKTsKLSAgICAgICAgfQotICAgICAg
ICByZXR1cm4gX2lkZW50aWZpZXI7Ci0gICAgfQotI2VuZGlmCi0gICAgCiAgICAgLy8gQ2FsbGlu
ZyB1cGRhdGVCYWNraW5nU3RvcmUoKSBjYW4gaW52YWxpZGF0ZSB0aGlzIGVsZW1lbnQgc28gc2Vs
ZiBtdXN0IGJlIHJldGFpbmVkLgogICAgIC8vIElmIGl0IGRvZXMgYmVjb21lIGludmFsaWRhdGVk
LCBtX29iamVjdCB3aWxsIGJlIG5pbC4KICAgICBDRlJldGFpbigoX19icmlkZ2UgQ0ZUeXBlUmVm
KXNlbGYpOwpAQCAtMzcxLDcgKzMyNCw3IEBAIE5TQXJyYXkgKmNvbnZlcnRUb05TQXJyYXkoY29u
c3QgV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkCiAgICAg
cmV0dXJuIG5pbDsKIH0KIAotLSAoQWNjZXNzaWJpbGl0eU9iamVjdCopYWNjZXNzaWJpbGl0eU9i
amVjdAorLSAoQVhDb3JlT2JqZWN0KilhY2Nlc3NpYmlsaXR5T2JqZWN0CiB7CiAjaWYgRU5BQkxF
KEFDQ0VTU0lCSUxJVFlfSVNPTEFURURfVFJFRSkKICAgICBBU1NFUlQoIV9BWFVJRWxlbWVudFJl
cXVlc3RTZXJ2aWNlZEJ5U2Vjb25kYXJ5QVhUaHJlYWQoKSk7CkBAIC0zODgsMTAgKzM0MSw2IEBA
IE5TQXJyYXkgKmNvbnZlcnRUb05TQXJyYXkoY29uc3QgV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9i
amVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkCiAKIC0gKFdlYkNvcmU6OkFYQ29yZU9iamVjdCopYXhC
YWNraW5nT2JqZWN0CiB7Ci0jaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFlfSVNPTEFURURfVFJFRSkK
LSAgICBpZiAoX0FYVUlFbGVtZW50UmVxdWVzdFNlcnZpY2VkQnlTZWNvbmRhcnlBWFRocmVhZCgp
KQotICAgICAgICByZXR1cm4gc2VsZi5pc29sYXRlZFRyZWVOb2RlLmdldCgpOwotI2VuZGlmCiAg
ICAgcmV0dXJuIG1fb2JqZWN0OwogfQogCkBAIC03ODUsNyArNzM0LDcgQEAgQWNjZXNzaWJpbGl0
eVNlYXJjaENyaXRlcmlhIGFjY2Vzc2liaWxpdHlTZWFyY2hDcml0ZXJpYUZvclNlYXJjaFByZWRp
Y2F0ZVBhcmFtZXQKICAgICBpZiAoW3NlYXJjaFRleHRQYXJhbWV0ZXIgaXNLaW5kT2ZDbGFzczpb
TlNTdHJpbmcgY2xhc3NdXSkKICAgICAgICAgc2VhcmNoVGV4dCA9IHNlYXJjaFRleHRQYXJhbWV0
ZXI7CiAgICAgCi0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogc3RhcnRFbGVtZW50ID0gbnVsbHB0
cjsKKyAgICBBWENvcmVPYmplY3QqIHN0YXJ0RWxlbWVudCA9IG51bGxwdHI7CiAgICAgaWYgKFtz
dGFydEVsZW1lbnRQYXJhbWV0ZXIgaXNLaW5kT2ZDbGFzczpbV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXJCYXNlIGNsYXNzXV0pCiAgICAgICAgIHN0YXJ0RWxlbWVudCA9IFtzdGFydEVsZW1l
bnRQYXJhbWV0ZXIgYWNjZXNzaWJpbGl0eU9iamVjdF07CiAgICAgCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyTWFjLm1tCmluZGV4IGM1NzA5NDljNTYwYjVmYTExYmM0NDMwMDkwZTIy
NTNjNjk1YzhlM2QuLjY4MGQ4MDA4YWIxM2NjODUwMTczOWJiZmNhZjhkMDQxMjc2MDM4OGQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
bWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCkBAIC0xMjg3LDcgKzEyODcs
NyBAQCBzdGF0aWMgTlNTdHJpbmcqIG5zU3RyaW5nRm9yUmVwbGFjZWROb2RlKE5vZGUqIHJlcGxh
Y2VkTm9kZSkKICAgICAgICAgLy8gbm9uLXplcm8gbGVuZ3RoIG1lYW5zIHRleHR1YWwgbm9kZSwg
emVybyBsZW5ndGggbWVhbnMgcmVwbGFjZWQgbm9kZSAoQUtBICJhdHRhY2htZW50cyIgaW4gQVgp
CiAgICAgICAgIGlmIChpdC50ZXh0KCkubGVuZ3RoKCkpIHsKICAgICAgICAgICAgIC8vIEFkZCB0
aGUgdGV4dCBvZiB0aGUgbGlzdCBtYXJrZXIgaXRlbSBpZiBuZWNlc3NhcnkuCi0gICAgICAgICAg
ICBTdHJpbmcgbGlzdE1hcmtlclRleHQgPSBtX29iamVjdC0+bGlzdE1hcmtlclRleHRGb3JOb2Rl
QW5kUG9zaXRpb24oJm5vZGUsIFZpc2libGVQb3NpdGlvbihpdC5yYW5nZSgpLT5zdGFydFBvc2l0
aW9uKCkpKTsKKyAgICAgICAgICAgIFN0cmluZyBsaXN0TWFya2VyVGV4dCA9IEFjY2Vzc2liaWxp
dHlPYmplY3Q6Omxpc3RNYXJrZXJUZXh0Rm9yTm9kZUFuZFBvc2l0aW9uKCZub2RlLCBWaXNpYmxl
UG9zaXRpb24oaXQucmFuZ2UoKS0+c3RhcnRQb3NpdGlvbigpKSk7CiAgICAgICAgICAgICBpZiAo
IWxpc3RNYXJrZXJUZXh0LmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICBBWEF0dHJpYnV0ZWRT
dHJpbmdBcHBlbmRUZXh0KGF0dHJTdHJpbmcsICZub2RlLCBsaXN0TWFya2VyVGV4dCwgc3BlbGxD
aGVjayk7CiAgICAgICAgICAgICBBWEF0dHJpYnV0ZWRTdHJpbmdBcHBlbmRUZXh0KGF0dHJTdHJp
bmcsICZub2RlLCBpdC50ZXh0KCksIHNwZWxsQ2hlY2spOwpAQCAtMTkyMiw3ICsxOTIyLDcgQEAg
c3RhdGljIHZvaWQgY29udmVydFRvVmVjdG9yKE5TQXJyYXkqIGFycmF5LCBBY2Nlc3NpYmlsaXR5
T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2gKICAgICB1bnNpZ25lZCBsZW5ndGggPSBbYXJyYXkgY291
bnRdOwogICAgIHZlY3Rvci5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxlbmd0aCk7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIEFjY2Vzc2liaWxp
dHlPYmplY3QqIG9iaiA9IFtbYXJyYXkgb2JqZWN0QXRJbmRleDppXSBhY2Nlc3NpYmlsaXR5T2Jq
ZWN0XTsKKyAgICAgICAgQVhDb3JlT2JqZWN0KiBvYmogPSBbW2FycmF5IG9iamVjdEF0SW5kZXg6
aV0gYWNjZXNzaWJpbGl0eU9iamVjdF07CiAgICAgICAgIGlmIChvYmopCiAgICAgICAgICAgICB2
ZWN0b3IuYXBwZW5kKG9iaik7CiAgICAgfQpAQCAtMjAwNSwyOCArMjAwNSwxMSBAQCBzdGF0aWMg
dm9pZCBXZWJUcmFuc2Zvcm1DR1BhdGhUb05TQmV6aWVyUGF0aCh2b2lkKiBpbmZvLCBjb25zdCBD
R1BhdGhFbGVtZW50ICplbAogCiAtIChzaXplX3QpY2hpbGRyZW5WZWN0b3JTaXplCiB7Ci0jaWYg
RU5BQkxFKEFDQ0VTU0lCSUxJVFlfSVNPTEFURURfVFJFRSkKLSAgICBpZiAoX0FYVUlFbGVtZW50
UmVxdWVzdFNlcnZpY2VkQnlTZWNvbmRhcnlBWFRocmVhZCgpKQotICAgICAgICByZXR1cm4gc2Vs
Zi5pc29sYXRlZFRyZWVOb2RlLT5jaGlsZHJlbigpLnNpemUoKTsKLSNlbmRpZgotICAgIAogICAg
IHJldHVybiBtX29iamVjdC0+Y2hpbGRyZW4oKS5zaXplKCk7CiB9CiAKIC0gKE5TQXJyYXk8V2Vi
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgKj4gKiljaGlsZHJlblZlY3RvckFycmF5CiB7Ci0j
aWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFlfSVNPTEFURURfVFJFRSkKLSAgICBpZiAoX0FYVUlFbGVt
ZW50UmVxdWVzdFNlcnZpY2VkQnlTZWNvbmRhcnlBWFRocmVhZCgpKSB7Ci0gICAgICAgIGF1dG8g
dHJlZU5vZGUgPSBzZWxmLmlzb2xhdGVkVHJlZU5vZGU7Ci0gICAgICAgIGF1dG8gbm9kZUNoaWxk
cmVuID0gdHJlZU5vZGUtPmNoaWxkcmVuKCk7Ci0gICAgICAgIFZlY3RvcjxSZWZQdHI8QVhJc29s
YXRlZFRyZWVOb2RlPj4gY2hpbGRyZW47Ci0gICAgICAgIGNoaWxkcmVuLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkobm9kZUNoaWxkcmVuLnNpemUoKSk7Ci0gICAgICAgIGF1dG8gdHJlZSA9IHRyZWVO
b2RlLT50cmVlKCk7Ci0gICAgICAgIGZvciAoYXV0byBjaGlsZElEIDogbm9kZUNoaWxkcmVuKQot
ICAgICAgICAgICAgY2hpbGRyZW4udW5jaGVja2VkQXBwZW5kKHRyZWUtPm5vZGVGb3JJRChjaGls
ZElEKSk7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0FycmF5KGNoaWxkcmVuKTsKLSAgICB9
Ci0jZW5kaWYKICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheShtX29iamVjdC0+Y2hpbGRyZW4o
KSk7CiB9CiAKQEAgLTMxMTgsNyArMzEwMSw3IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5U
QVRJT05TX0VORAogICAgIAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6
TlNBY2Nlc3NpYmlsaXR5SW5kZXhBdHRyaWJ1dGVdKSB7CiAgICAgICAgIGlmIChtX29iamVjdC0+
aXNUcmVlSXRlbSgpKSB7Ci0gICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQg
PSBtX29iamVjdC0+cGFyZW50T2JqZWN0KCk7CisgICAgICAgICAgICBBWENvcmVPYmplY3QqIHBh
cmVudCA9IG1fb2JqZWN0LT5wYXJlbnRPYmplY3QoKTsKICAgICAgICAgICAgIGZvciAoOyBwYXJl
bnQgJiYgIXBhcmVudC0+aXNUcmVlKCk7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50T2JqZWN0KCkp
CiAgICAgICAgICAgICB7IH0KICAgICAgICAgICAgIApAQCAtMzE1Nyw3ICszMTQwLDcgQEAgQUxM
T1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgLy8gVGhlIHJvdyB0aGF0IGNv
bnRhaW5zIHRoaXMgcm93LiBJdCBzaG91bGQgYmUgdGhlIHNhbWUgYXMgdGhlIGZpcnN0IHBhcmVu
dCB0aGF0IGlzIGEgdHJlZWl0ZW0uCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0
cmluZzpOU0FjY2Vzc2liaWxpdHlEaXNjbG9zZWRCeVJvd0F0dHJpYnV0ZV0pIHsKICAgICAgICAg
aWYgKG1fb2JqZWN0LT5pc1RyZWVJdGVtKCkpIHsKLSAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlP
YmplY3QqIHBhcmVudCA9IG1fb2JqZWN0LT5wYXJlbnRPYmplY3QoKTsKKyAgICAgICAgICAgIEFY
Q29yZU9iamVjdCogcGFyZW50ID0gbV9vYmplY3QtPnBhcmVudE9iamVjdCgpOwogICAgICAgICAg
ICAgd2hpbGUgKHBhcmVudCkgewogICAgICAgICAgICAgICAgIGlmIChwYXJlbnQtPmlzVHJlZUl0
ZW0oKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcmVudC0+d3JhcHBlcigpOwpAQCAt
MzIyNCw4ICszMjA3LDggQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAg
ICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlUaXRs
ZVVJRWxlbWVudEF0dHJpYnV0ZV0pIHsKICAgICAgICAgaWYgKCFtX29iamVjdC0+ZXhwb3Nlc1Rp
dGxlVUlFbGVtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gbmlsOwotICAgICAgICAKLSAgICAg
ICAgQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqID0gbV9vYmplY3QtPnRpdGxlVUlFbGVtZW50KCk7
CisKKyAgICAgICAgQVhDb3JlT2JqZWN0KiBvYmogPSBtX29iamVjdC0+dGl0bGVVSUVsZW1lbnQo
KTsKICAgICAgICAgaWYgKG9iaikKICAgICAgICAgICAgIHJldHVybiBvYmotPndyYXBwZXIoKTsK
ICAgICAgICAgcmV0dXJuIG5pbDsKQEAgLTMyNDksMTMgKzMyMzIsMTMgQEAgQUxMT1dfREVQUkVD
QVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgfQogICAgIAogICAgIGlmIChbYXR0cmlidXRl
TmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5SG9yaXpvbnRhbFNjcm9sbEJhckF0
dHJpYnV0ZV0pIHsKLSAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogc2Nyb2xsQmFyID0gbV9v
YmplY3QtPnNjcm9sbEJhcihBY2Nlc3NpYmlsaXR5T3JpZW50YXRpb246Okhvcml6b250YWwpOwor
ICAgICAgICBBWENvcmVPYmplY3QqIHNjcm9sbEJhciA9IG1fb2JqZWN0LT5zY3JvbGxCYXIoQWNj
ZXNzaWJpbGl0eU9yaWVudGF0aW9uOjpIb3Jpem9udGFsKTsKICAgICAgICAgaWYgKHNjcm9sbEJh
cikKICAgICAgICAgICAgIHJldHVybiBzY3JvbGxCYXItPndyYXBwZXIoKTsKICAgICAgICAgcmV0
dXJuIG5pbDsKICAgICB9CiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpO
U0FjY2Vzc2liaWxpdHlWZXJ0aWNhbFNjcm9sbEJhckF0dHJpYnV0ZV0pIHsKLSAgICAgICAgQWNj
ZXNzaWJpbGl0eU9iamVjdCogc2Nyb2xsQmFyID0gbV9vYmplY3QtPnNjcm9sbEJhcihBY2Nlc3Np
YmlsaXR5T3JpZW50YXRpb246OlZlcnRpY2FsKTsKKyAgICAgICAgQVhDb3JlT2JqZWN0KiBzY3Jv
bGxCYXIgPSBtX29iamVjdC0+c2Nyb2xsQmFyKEFjY2Vzc2liaWxpdHlPcmllbnRhdGlvbjo6VmVy
dGljYWwpOwogICAgICAgICBpZiAoc2Nyb2xsQmFyKQogICAgICAgICAgICAgcmV0dXJuIHNjcm9s
bEJhci0+d3JhcHBlcigpOwogICAgICAgICByZXR1cm4gbmlsOwpAQCAtMzQ2NiwxNyArMzQ0OSwx
NyBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICB9CiAKICAgICBp
ZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUZvY3VzYWJs
ZUFuY2VzdG9yQXR0cmlidXRlXSkgewotICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmpl
Y3QgPSBtX29iamVjdC0+Zm9jdXNhYmxlQW5jZXN0b3IoKTsKKyAgICAgICAgQVhDb3JlT2JqZWN0
KiBvYmplY3QgPSBtX29iamVjdC0+Zm9jdXNhYmxlQW5jZXN0b3IoKTsKICAgICAgICAgcmV0dXJu
IG9iamVjdCA/IG9iamVjdC0+d3JhcHBlcigpIDogbmlsOwogICAgIH0KIAogICAgIGlmIChbYXR0
cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5RWRpdGFibGVBbmNlc3Rv
ckF0dHJpYnV0ZV0pIHsKLSAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0ID0gbV9v
YmplY3QtPmVkaXRhYmxlQW5jZXN0b3IoKTsKKyAgICAgICAgQVhDb3JlT2JqZWN0KiBvYmplY3Qg
PSBtX29iamVjdC0+ZWRpdGFibGVBbmNlc3RvcigpOwogICAgICAgICByZXR1cm4gb2JqZWN0ID8g
b2JqZWN0LT53cmFwcGVyKCkgOiBuaWw7CiAgICAgfQogCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1l
IGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlIaWdoZXN0RWRpdGFibGVBbmNlc3RvckF0
dHJpYnV0ZV0pIHsKLSAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0ID0gbV9vYmpl
Y3QtPmhpZ2hlc3RFZGl0YWJsZUFuY2VzdG9yKCk7CisgICAgICAgIEFYQ29yZU9iamVjdCogb2Jq
ZWN0ID0gbV9vYmplY3QtPmhpZ2hlc3RFZGl0YWJsZUFuY2VzdG9yKCk7CiAgICAgICAgIHJldHVy
biBvYmplY3QgPyBvYmplY3QtPndyYXBwZXIoKSA6IG5pbDsKICAgICB9CiAKQEAgLTM3ODEsNyAr
Mzc2NCw3IEBAIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAogICAgIC8vIE9uIFdL
MSwgd2UgbmVlZCB0byBjb252ZXJ0IHJlY3QgdG8gd2luZG93IHNwYWNlIHRvIG1hdGNoIG1vdXNl
IGNsaWNraW5nLgogICAgIGlmIChmcmFtZVZpZXcpIHsKICAgICAgICAgLy8gRmluZCB0aGUgYXBw
cm9wcmlhdGUgc2Nyb2xsIHZpZXcgdG8gdXNlIHRvIGNvbnZlcnQgdGhlIGNvbnRlbnRzIHRvIHRo
ZSB3aW5kb3cuCi0gICAgICAgIGZvciAoQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gbV9v
YmplY3QtPnBhcmVudE9iamVjdCgpOyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50T2Jq
ZWN0KCkpIHsKKyAgICAgICAgZm9yIChhdXRvKiBwYXJlbnQgPSBtX29iamVjdC0+cGFyZW50T2Jq
ZWN0KCk7IHBhcmVudDsgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRPYmplY3QoKSkgewogICAgICAg
ICAgICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3PigqcGFyZW50KSkgewogICAgICAg
ICAgICAgICAgIGlmIChhdXRvIHNjcm9sbFZpZXcgPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5U2Ny
b2xsVmlldz4oKnBhcmVudCkuc2Nyb2xsVmlldygpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlm
ICghZnJhbWVWaWV3LT5wbGF0Zm9ybVdpZGdldCgpKQpAQCAtNDEyNiw3ICs0MTA5LDcgQEAgQUxM
T1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgTlNOdW1iZXIqIG51bWJlciA9
IG5pbDsKICAgICBOU0FycmF5KiBhcnJheSA9IG5pbDsKICAgICBOU0RpY3Rpb25hcnkqIGRpY3Rp
b25hcnkgPSBuaWw7Ci0gICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+IHVpRWxlbWVudCA9
IG51bGxwdHI7CisgICAgUmVmUHRyPEFYQ29yZU9iamVjdD4gdWlFbGVtZW50OwogICAgIE5TUG9p
bnQgcG9pbnQgPSBOU1plcm9Qb2ludDsKICAgICBib29sIHBvaW50U2V0ID0gZmFsc2U7CiAgICAg
TlNSYW5nZSByYW5nZSA9IHswLCAwfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvd2luL0FYT2JqZWN0Q2FjaGVXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS93aW4vQVhPYmplY3RDYWNoZVdpbi5jcHAKaW5kZXggMzEyYjAyMDg0NTczZmM2MDQ4
Nzk1YTUxZTg0MDIzNmJiMjg1N2ZmMS4uNzliYWM0NzkyOTk2ZTU3NmM4NDg3NTQyMDkwYzRmNDJj
YmJjYWIzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS93aW4vQVhP
YmplY3RDYWNoZVdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS93aW4v
QVhPYmplY3RDYWNoZVdpbi5jcHAKQEAgLTUwLDcgKzUwLDcgQEAgdm9pZCBBWE9iamVjdENhY2hl
OjpkZXRhY2hXcmFwcGVyKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iaiwgQWNjZXNzaWJpbGl0eURl
dGFjaG0KICAgICAgICAgd3JhcHBlci0+ZGV0YWNoKCk7CiB9CiAKLXZvaWQgQVhPYmplY3RDYWNo
ZTo6YXR0YWNoV3JhcHBlcihBY2Nlc3NpYmlsaXR5T2JqZWN0KikKK3ZvaWQgQVhPYmplY3RDYWNo
ZTo6YXR0YWNoV3JhcHBlcihBWENvcmVPYmplY3QqKQogewogICAgIC8vIE9uIFdpbmRvd3MsIEFj
Y2Vzc2liaWxpdHlPYmplY3RzIGFyZSB3cmFwcGVkIHdoZW4gdGhlIGFjY2Vzc2liaWxpdHkKICAg
ICAvLyBzb2Z0d2FyZSByZXF1ZXN0cyB0aGVtIHZpYSBnZXRfYWNjQ2hpbGQuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>382609</attachid>
            <date>2019-11-01 12:07:33 -0700</date>
            <delta_ts>2019-11-01 16:55:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203717-20191101150732.patch</filename>
            <type>text/plain</type>
            <size>88774</size>
            <attacher name="Andres Gonzalez">andresg_22</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUxOTAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWYxOGQyODQyMzQ0NmM5
OWU4OWU2MjVjNGU4Y2NhMDNlODhjZWQ0ZC4uZTQ2YmE1MzBjZDQ0MGU1YzBjMjMyNDFhYjM2YTQ5
ZWRkOWM1NjQ3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkwIEBACisyMDE5LTExLTAxICBBbmRy
ZXMgR29uemFsZXogIDxhbmRyZXNnXzIyQGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIEFYSXNv
bGF0ZWRUcmVlTm9kZSBhIHN1YmNsYXNzIG9mIEFYQ29yZU9iamVjdC4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMzcxNworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBuZWVkZWQsIG5v
IG5ldyBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgIC0gQVhJc29sYXRlZFRyZWVOT2RlIGRlcml2
ZXMgZnJvbSBBWENvcmVPYmplY3QuCisgICAgICAgIC0gQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXIgY2FuIG5vdyBoYXZlIGEgc2luZ2xlIHBvaW50ZXIgdG8gYSBBWENvcmVPYmplY3QgaW5zdGVh
ZCBvZiBvbmUgZm9yIHRoZSBsaXZlIG9iamVjdCBhbmQgb25lIGZvciB0aGUgaXNvbGF0ZWQgb2Jq
ZWN0LgorICAgICAgICAtIFNpbXBsaWZpZWQgd3JhcHBlciBjb2RlIGJ5IG1ha2luZyBpdCBhZ25v
c3RpYyBvZiB0aGUgbmF0dXJlIG9mIHRoZSB1bmRlcmx5aW5nIEFYQ29yZU9iamVjdC4KKworICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpBWE9iamVjdENhY2hlOjpjaGFyYWN0ZXJPZmZzZXRGb3JQb2ludCk6CisgICAgICAgIChXZWJD
b3JlOjpBWE9iamVjdENhY2hlOjpjaGFyYWN0ZXJPZmZzZXRGb3JJbmRleCk6CisgICAgICAgIChX
ZWJDb3JlOjpBWE9iamVjdENhY2hlOjpjcmVhdGVJc29sYXRlZEFjY2Vzc2liaWxpdHlUcmVlSGll
cmFyY2h5KToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmdlbmVyYXRlSXNvbGF0
ZWRBY2Nlc3NpYmlsaXR5VHJlZSk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9iamVjdENh
Y2hlLmg6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdGsvQVhPYmplY3RDYWNoZUF0ay5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjphdHRhY2hXcmFwcGVyKToKKyAgICAg
ICAgKiBhY2Nlc3NpYmlsaXR5L2lvcy9BWE9iamVjdENhY2hlSU9TLm1tOgorICAgICAgICAoV2Vi
Q29yZTo6QVhPYmplY3RDYWNoZTo6YXR0YWNoV3JhcHBlcik6CisgICAgICAgICogYWNjZXNzaWJp
bGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW06CisgICAgICAgIChB
Y2Nlc3NpYmlsaXR5VW5pZ25vcmVkQW5jZXN0b3IpOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmls
aXR5VGV4dE1hcmtlciBpbml0V2l0aERhdGE6YWNjZXNzaWJpbGl0eU9iamVjdDpdKToKKyAgICAg
ICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgaW5pdFdpdGhBY2Nlc3NpYmlsaXR5
T2JqZWN0Ol0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBfYWNj
ZXNzaWJpbGl0eVRyZWVBbmNlc3Rvcl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlciBfYWNjZXNzaWJpbGl0eUxpc3RBbmNlc3Rvcl0pOgorICAgICAgICAoLVtXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBfYWNjZXNzaWJpbGl0eUFydGljbGVBbmNlc3Rvcl0p
OgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBfYWNjZXNzaWJpbGl0
eUxhbmRtYXJrQW5jZXN0b3JdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXIgX2FjY2Vzc2liaWxpdHlUYWJsZUFuY2VzdG9yXSk6CisgICAgICAgICgtW1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyIF9hY2Nlc3NpYmlsaXR5SXNJblRhYmxlQ2VsbF0pOgorICAg
ICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBfYWNjZXNzaWJpbGl0eUZpZWxk
c2V0QW5jZXN0b3JdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIg
X2FjY2Vzc2liaWxpdHlGcmFtZUFuY2VzdG9yXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyIF9hY2Nlc3NpYmlsaXR5VHJhaXRzRnJvbUFuY2VzdG9yc10pOgorICAg
ICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciB0YWJsZUNlbGxQYXJlbnRdKToK
KyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgdGFibGVQYXJlbnRdKToK
KyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eVRp
dGxlRWxlbWVudF0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBh
Y2Nlc3NpYmlsaXR5RGF0ZXRpbWVWYWx1ZV0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlciBkZXRhaWxQYXJlbnRGb3JTdW1tYXJ5T2JqZWN0Ol0pOgorICAgICAgICAo
LVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBkZXRhaWxQYXJlbnRGb3JPYmplY3Q6XSk6
CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHRyZWVJdGVtUGFyZW50
Rm9yT2JqZWN0Ol0pOgorICAgICAgICAoQVhBdHRyaWJ1dGVTdHJpbmdTZXRTdHlsZSk6CisgICAg
ICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFycmF5T2ZUZXh0Rm9yVGV4dE1h
cmtlcnM6YXR0cmlidXRlZDpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXIgYWNjZXNzaWJpbGl0eVN1cHBvcnRzQVJJQUV4cGFuZGVkXSk6CisgICAgICAgICgtW1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlJc0V4cGFuZGVkXSk6Cisg
ICAgICAgICogYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6QVhJc29sYXRlZFRyZWU6OnNldFJvb3QpOgorICAgICAgICAoV2Vi
Q29yZTo6QVhJc29sYXRlZFRyZWU6OmFwcGx5UGVuZGluZ0NoYW5nZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6QVhJc29sYXRlZFRyZWU6OnNldFJvb3ROb2RlSUQpOiBEZWxldGVkLgorICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRUcmVlLmg6CisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWVOb2RlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkFYSXNvbGF0ZWRUcmVlTm9kZTo6QVhJc29sYXRlZFRyZWVOb2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFYSXNvbGF0ZWRUcmVlTm9kZTo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkFYSXNvbGF0ZWRUcmVlTm9kZTo6aW5pdGlhbGl6ZUF0dHJpYnV0ZURhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6QVhJc29sYXRlZFRyZWVOb2RlOjphcHBlbmRDaGlsZCk6CisgICAgICAg
IChXZWJDb3JlOjpBWElzb2xhdGVkVHJlZU5vZGU6OmNoaWxkcmVuKToKKyAgICAgICAgKFdlYkNv
cmU6OkFYSXNvbGF0ZWRUcmVlTm9kZTo6cGFyZW50T2JqZWN0VW5pZ25vcmVkIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkFYSXNvbGF0ZWRUcmVlTm9kZTo6YWNjZXNzaWJpbGl0eUhpdFRlc3Qg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QVhJc29sYXRlZFRyZWVOb2RlOjp1cGRhdGVCYWNr
aW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6QVhJc29sYXRlZFRyZWVOb2RlOjpwYXJlbnRP
YmplY3RJbnRlcmZhY2VVbmlnbm9yZWQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGFjY2Vz
c2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRUcmVlTm9kZS5oOgorICAgICAgICAqIGFj
Y2Vzc2liaWxpdHkvbWFjL0FYT2JqZWN0Q2FjaGVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpB
WE9iamVjdENhY2hlOjphdHRhY2hXcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0
Q2FjaGU6OmFzc29jaWF0ZUlzb2xhdGVkVHJlZU5vZGUpOiBEZWxldGVkLgorICAgICAgICAqIGFj
Y2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZS5oOgorICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFz
ZS5tbToKKyAgICAgICAgKGNvbnZlcnRUb05TQXJyYXkpOgorICAgICAgICAoLVtXZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlckJhc2UgaW5pdFdpdGhBY2Nlc3NpYmlsaXR5T2JqZWN0Ol0pOgor
ICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UgZGV0YWNoXSk6Cisg
ICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZSB1cGRhdGVPYmplY3RC
YWNraW5nU3RvcmVdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJC
YXNlIGFjY2Vzc2liaWxpdHlPYmplY3RdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJCYXNlIGF4QmFja2luZ09iamVjdF0pOgorICAgICAgICAoYWNjZXNzaWJpbGl0
eVNlYXJjaENyaXRlcmlhRm9yU2VhcmNoUHJlZGljYXRlUGFyYW1ldGVyaXplZEF0dHJpYnV0ZSk6
CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZSBpc29sYXRlZFRy
ZWVOb2RlXSk6IERlbGV0ZWQuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW06CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyIGRvQVhBdHRyaWJ1dGVkU3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlOnNwZWxs
Q2hlY2s6XSk6CisgICAgICAgIChjb252ZXJ0VG9WZWN0b3IpOgorICAgICAgICAoLVtXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlciBjaGlsZHJlblZlY3RvclNpemVdKToKKyAgICAgICAgKC1b
V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgY2hpbGRyZW5WZWN0b3JBcnJheV0pOgorICAg
ICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5QXR0cmli
dXRlVmFsdWU6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFj
Y2Vzc2liaWxpdHlTaG93Q29udGV4dE1lbnVdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOmZvclBhcmFtZXRlcjpd
KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L3dpbi9BWE9iamVjdENhY2hlV2luLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmF0dGFjaFdyYXBwZXIpOgorCiAyMDE5LTEw
LTMxICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFtGVFdd
IEFkb3B0IERpcmVjdFdyaXRlIGluIHBsYWNlIG9mIFVuaXNjcmliZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKaW5kZXggOTdhZWY2YTRiODM2ZjYz
ODEzZTAwNWJlYzY3NDJmMWIwYjkxMWViNS4uY2FhNzAzNGY1NDU2NzA2M2RmM2RjNWEwYjU1ZTNi
MDM2ODk3NDdlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9i
amVjdENhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0
Q2FjaGUuY3BwCkBAIC0yNzA3LDcgKzI3MDcsNyBAQCBJbnRSZWN0IEFYT2JqZWN0Q2FjaGU6OmFi
c29sdXRlQ2FyZXRCb3VuZHNGb3JDaGFyYWN0ZXJPZmZzZXQoY29uc3QgQ2hhcmFjdGVyT2Zmcwog
ICAgIHJldHVybiBhYnNvbHV0ZUJvdW5kc0ZvckxvY2FsQ2FyZXRSZWN0KGNhcmV0UGFpbnRlciwg
bG9jYWxSZWN0KTsKIH0KIAotQ2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2FjaGU6OmNoYXJhY3Rl
ck9mZnNldEZvclBvaW50KGNvbnN0IEludFBvaW50ICZwb2ludCwgQWNjZXNzaWJpbGl0eU9iamVj
dCogb2JqKQorQ2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2FjaGU6OmNoYXJhY3Rlck9mZnNldEZv
clBvaW50KGNvbnN0IEludFBvaW50ICZwb2ludCwgQVhDb3JlT2JqZWN0KiBvYmopCiB7CiAgICAg
aWYgKCFvYmopCiAgICAgICAgIHJldHVybiBDaGFyYWN0ZXJPZmZzZXQoKTsKQEAgLTI3NzMsNyAr
Mjc3Myw3IEBAIENoYXJhY3Rlck9mZnNldCBBWE9iamVjdENhY2hlOjpzdGFydENoYXJhY3Rlck9m
ZnNldE9mTGluZShjb25zdCBDaGFyYWN0ZXJPZmZzZXQmCiAgICAgcmV0dXJuIGNoYXJhY3Rlck9m
ZnNldEZyb21WaXNpYmxlUG9zaXRpb24oc3RhcnRMaW5lKTsKIH0KIAotQ2hhcmFjdGVyT2Zmc2V0
IEFYT2JqZWN0Q2FjaGU6OmNoYXJhY3Rlck9mZnNldEZvckluZGV4KGludCBpbmRleCwgY29uc3Qg
QWNjZXNzaWJpbGl0eU9iamVjdCogb2JqKQorQ2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2FjaGU6
OmNoYXJhY3Rlck9mZnNldEZvckluZGV4KGludCBpbmRleCwgY29uc3QgQVhDb3JlT2JqZWN0KiBv
YmopCiB7CiAgICAgaWYgKCFvYmopCiAgICAgICAgIHJldHVybiBDaGFyYWN0ZXJPZmZzZXQoKTsK
QEAgLTI5NDMsMTggKzI5NDMsMTggQEAgdm9pZCBBWE9iamVjdENhY2hlOjpwZXJmb3JtRGVmZXJy
ZWRDYWNoZVVwZGF0ZSgpCiB9CiAgICAgCiAjaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFlfSVNPTEFU
RURfVFJFRSkKLVJlZjxBWElzb2xhdGVkVHJlZU5vZGU+IEFYT2JqZWN0Q2FjaGU6OmNyZWF0ZUlz
b2xhdGVkQWNjZXNzaWJpbGl0eVRyZWVIaWVyYXJjaHkoQWNjZXNzaWJpbGl0eU9iamVjdCYgb2Jq
ZWN0LCBBWElEIHBhcmVudElELCBBWElzb2xhdGVkVHJlZSYgdHJlZSwgVmVjdG9yPFJlZjxBWElz
b2xhdGVkVHJlZU5vZGU+PiYgbm9kZUNoYW5nZXMpCitSZWY8QVhJc29sYXRlZFRyZWVOb2RlPiBB
WE9iamVjdENhY2hlOjpjcmVhdGVJc29sYXRlZEFjY2Vzc2liaWxpdHlUcmVlSGllcmFyY2h5KEFY
Q29yZU9iamVjdCYgb2JqZWN0LCBBWElEIHBhcmVudElELCBBWElzb2xhdGVkVHJlZSYgdHJlZSwg
VmVjdG9yPFJlZjxBWElzb2xhdGVkVHJlZU5vZGU+PiYgbm9kZUNoYW5nZXMpCiB7CiAgICAgYXV0
byBpc29sYXRlZFRyZWVOb2RlID0gQVhJc29sYXRlZFRyZWVOb2RlOjpjcmVhdGUob2JqZWN0KTsK
ICAgICBub2RlQ2hhbmdlcy5hcHBlbmQoaXNvbGF0ZWRUcmVlTm9kZS5jb3B5UmVmKCkpOwogCiAg
ICAgaXNvbGF0ZWRUcmVlTm9kZS0+c2V0VHJlZUlkZW50aWZpZXIodHJlZS50cmVlSWRlbnRpZmll
cigpKTsKICAgICBpc29sYXRlZFRyZWVOb2RlLT5zZXRQYXJlbnQocGFyZW50SUQpOwotICAgIGFz
c29jaWF0ZUlzb2xhdGVkVHJlZU5vZGUob2JqZWN0LCBpc29sYXRlZFRyZWVOb2RlLCB0cmVlLnRy
ZWVJZGVudGlmaWVyKCkpOworICAgIGF0dGFjaFdyYXBwZXIoJmlzb2xhdGVkVHJlZU5vZGUuZ2V0
KCkpOwogCi0gICAgZm9yIChhdXRvIGNoaWxkIDogb2JqZWN0LmNoaWxkcmVuKCkpIHsKLSAgICAg
ICAgYXV0byBzdGF0aWNDaGlsZCA9IGNyZWF0ZUlzb2xhdGVkQWNjZXNzaWJpbGl0eVRyZWVIaWVy
YXJjaHkoKmNoaWxkLCBpc29sYXRlZFRyZWVOb2RlLT5pZGVudGlmaWVyKCksIHRyZWUsIG5vZGVD
aGFuZ2VzKTsKLSAgICAgICAgaXNvbGF0ZWRUcmVlTm9kZS0+YXBwZW5kQ2hpbGQoc3RhdGljQ2hp
bGQtPmlkZW50aWZpZXIoKSk7CisgICAgZm9yIChjb25zdCBhdXRvJiBjaGlsZCA6IG9iamVjdC5j
aGlsZHJlbigpKSB7CisgICAgICAgIGF1dG8gc3RhdGljQ2hpbGQgPSBjcmVhdGVJc29sYXRlZEFj
Y2Vzc2liaWxpdHlUcmVlSGllcmFyY2h5KCpjaGlsZCwgaXNvbGF0ZWRUcmVlTm9kZS0+b2JqZWN0
SUQoKSwgdHJlZSwgbm9kZUNoYW5nZXMpOworICAgICAgICBpc29sYXRlZFRyZWVOb2RlLT5hcHBl
bmRDaGlsZChzdGF0aWNDaGlsZC0+b2JqZWN0SUQoKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIGlz
b2xhdGVkVHJlZU5vZGU7CkBAIC0yOTcwLDcgKzI5NzAsNyBAQCBSZWY8QVhJc29sYXRlZFRyZWU+
IEFYT2JqZWN0Q2FjaGU6OmdlbmVyYXRlSXNvbGF0ZWRBY2Nlc3NpYmlsaXR5VHJlZSgpCiAgICAg
CiAgICAgVmVjdG9yPFJlZjxBWElzb2xhdGVkVHJlZU5vZGU+PiBub2RlQ2hhbmdlczsKICAgICBh
dXRvIHJvb3QgPSBjcmVhdGVJc29sYXRlZEFjY2Vzc2liaWxpdHlUcmVlSGllcmFyY2h5KCpyb290
T2JqZWN0KCksIEludmFsaWRBWElELCAqdHJlZSwgbm9kZUNoYW5nZXMpOwotICAgIHRyZWUtPnNl
dFJvb3ROb2RlSUQocm9vdC0+aWRlbnRpZmllcigpKTsKKyAgICB0cmVlLT5zZXRSb290KHJvb3Qp
OwogICAgIHRyZWUtPmFwcGVuZE5vZGVDaGFuZ2VzKG5vZGVDaGFuZ2VzKTsKIAogICAgIHJldHVy
biBtYWtlUmVmKCp0cmVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQVhPYmplY3RDYWNoZS5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVj
dENhY2hlLmgKaW5kZXggODg0OTlmZDE4YzIwNzM5ZDJkYTM3MGEwNGJhN2JmNDFiZmUzYzg0YS4u
YWMwYzJiYzg3NzkyMDk0YTNkYTkwYTM2ODNjNmIzZTNiODg5Y2Q2NCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmgKQEAgLTE3NCw3ICsxNzQsNyBAQCBw
dWJsaWM6CiAgICAgdm9pZCByZW1vdmUoQVhJRCk7CiAKICAgICB2b2lkIGRldGFjaFdyYXBwZXIo
QWNjZXNzaWJpbGl0eU9iamVjdCosIEFjY2Vzc2liaWxpdHlEZXRhY2htZW50VHlwZSk7Ci0gICAg
dm9pZCBhdHRhY2hXcmFwcGVyKEFjY2Vzc2liaWxpdHlPYmplY3QqKTsKKyAgICB2b2lkIGF0dGFj
aFdyYXBwZXIoQVhDb3JlT2JqZWN0Kik7CiAgICAgdm9pZCBjaGlsZHJlbkNoYW5nZWQoTm9kZSos
IE5vZGUqIG5ld0NoaWxkID0gbnVsbHB0cik7CiAgICAgdm9pZCBjaGlsZHJlbkNoYW5nZWQoUmVu
ZGVyT2JqZWN0KiwgUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCA9IG51bGxwdHIpOwogICAgIHZvaWQg
Y2hpbGRyZW5DaGFuZ2VkKEFYQ29yZU9iamVjdCopOwpAQCAtMTk0LDggKzE5NCw3IEBAIHB1Ymxp
YzoKICNpZiBFTkFCTEUoQUNDRVNTSUJJTElUWV9JU09MQVRFRF9UUkVFKQogICAgIFdFQkNPUkVf
RVhQT1JUIFJlZjxBWElzb2xhdGVkVHJlZT4gZ2VuZXJhdGVJc29sYXRlZEFjY2Vzc2liaWxpdHlU
cmVlKCk7CiAKLSAgICB2b2lkIGFzc29jaWF0ZUlzb2xhdGVkVHJlZU5vZGUoQWNjZXNzaWJpbGl0
eU9iamVjdCYsIEFYSXNvbGF0ZWRUcmVlTm9kZSYsIEFYSXNvbGF0ZWRUcmVlSUQpOwotICAgIFJl
ZjxBWElzb2xhdGVkVHJlZU5vZGU+IGNyZWF0ZUlzb2xhdGVkQWNjZXNzaWJpbGl0eVRyZWVIaWVy
YXJjaHkoQWNjZXNzaWJpbGl0eU9iamVjdCYsIEFYSUQsIEFYSXNvbGF0ZWRUcmVlJiwgVmVjdG9y
PFJlZjxBWElzb2xhdGVkVHJlZU5vZGU+PiYpOworICAgIFJlZjxBWElzb2xhdGVkVHJlZU5vZGU+
IGNyZWF0ZUlzb2xhdGVkQWNjZXNzaWJpbGl0eVRyZWVIaWVyYXJjaHkoQVhDb3JlT2JqZWN0Jiwg
QVhJRCwgQVhJc29sYXRlZFRyZWUmLCBWZWN0b3I8UmVmPEFYSXNvbGF0ZWRUcmVlTm9kZT4+Jik7
CiAjZW5kaWYKICAgICAKICNpZiBFTkFCTEUoQUNDRVNTSUJJTElUWSkKQEAgLTI1Nyw3ICsyNTYs
NyBAQCBwdWJsaWM6CiAgICAgQ2hhcmFjdGVyT2Zmc2V0IHByZXZpb3VzU2VudGVuY2VTdGFydENo
YXJhY3Rlck9mZnNldChjb25zdCBDaGFyYWN0ZXJPZmZzZXQmKTsKICAgICAKICAgICAvLyBCb3Vu
ZHMKLSAgICBDaGFyYWN0ZXJPZmZzZXQgY2hhcmFjdGVyT2Zmc2V0Rm9yUG9pbnQoY29uc3QgSW50
UG9pbnQmLCBBY2Nlc3NpYmlsaXR5T2JqZWN0Kik7CisgICAgQ2hhcmFjdGVyT2Zmc2V0IGNoYXJh
Y3Rlck9mZnNldEZvclBvaW50KGNvbnN0IEludFBvaW50JiwgQVhDb3JlT2JqZWN0Kik7CiAgICAg
SW50UmVjdCBhYnNvbHV0ZUNhcmV0Qm91bmRzRm9yQ2hhcmFjdGVyT2Zmc2V0KGNvbnN0IENoYXJh
Y3Rlck9mZnNldCYpOwogICAgIENoYXJhY3Rlck9mZnNldCBjaGFyYWN0ZXJPZmZzZXRGb3JCb3Vu
ZHMoY29uc3QgSW50UmVjdCYsIGJvb2wpOwogICAgIApAQCAtMjY2LDcgKzI2NSw3IEBAIHB1Ymxp
YzoKICAgICBDaGFyYWN0ZXJPZmZzZXQgc3RhcnRDaGFyYWN0ZXJPZmZzZXRPZkxpbmUoY29uc3Qg
Q2hhcmFjdGVyT2Zmc2V0Jik7CiAgICAgCiAgICAgLy8gSW5kZXgKLSAgICBDaGFyYWN0ZXJPZmZz
ZXQgY2hhcmFjdGVyT2Zmc2V0Rm9ySW5kZXgoaW50LCBjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0
Kik7CisgICAgQ2hhcmFjdGVyT2Zmc2V0IGNoYXJhY3Rlck9mZnNldEZvckluZGV4KGludCwgY29u
c3QgQVhDb3JlT2JqZWN0Kik7CiAgICAgaW50IGluZGV4Rm9yQ2hhcmFjdGVyT2Zmc2V0KGNvbnN0
IENoYXJhY3Rlck9mZnNldCYsIEFjY2Vzc2liaWxpdHlPYmplY3QqKTsKIAogICAgIGVudW0gQVhO
b3RpZmljYXRpb24gewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9h
dGsvQVhPYmplY3RDYWNoZUF0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0
ay9BWE9iamVjdENhY2hlQXRrLmNwcAppbmRleCBkODNjMDc0NmUwYmY1YmY3OTk4OGQzNDEyNzVh
OTYwMTM5Yjc3YzJhLi5kNjAzOTVhN2VlZjkyNzAyMWM2ZTQ1ZWE0YTg5NTE4ZDQ3NjkwYmFmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9BWE9iamVjdENhY2hl
QXRrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9BWE9iamVjdENh
Y2hlQXRrLmNwcApAQCAtNjEsMTkgKzYxLDI0IEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6ZGV0YWNo
V3JhcHBlcihBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmosIEFjY2Vzc2liaWxpdHlEZXRhY2htCiAg
ICAgd2Via2l0QWNjZXNzaWJsZURldGFjaChXRUJLSVRfQUNDRVNTSUJMRSh3cmFwcGVyKSk7CiB9
CiAKLXZvaWQgQVhPYmplY3RDYWNoZTo6YXR0YWNoV3JhcHBlcihBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBvYmopCit2b2lkIEFYT2JqZWN0Q2FjaGU6OmF0dGFjaFdyYXBwZXIoQVhDb3JlT2JqZWN0KiBv
YmopCiB7Ci0gICAgR1JlZlB0cjxXZWJLaXRBY2Nlc3NpYmxlPiB3cmFwcGVyID0gYWRvcHRHUmVm
KHdlYmtpdEFjY2Vzc2libGVOZXcob2JqKSk7Ci0gICAgb2JqLT5zZXRXcmFwcGVyKHdyYXBwZXIu
Z2V0KCkpOworICAgIC8vIEZJWE1FOiBhdCB0aGUgbW9tZW50LCBvbmx5IGFsbG93IHRvIGF0dGFj
aCBBY2Nlc3NpYmlsaXR5T2JqZWN0cy4KKyAgICBpZiAoIWlzPEFjY2Vzc2liaWxpdHlPYmplY3Q+
KG9iaikpCisgICAgICAgIHJldHVybjsKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBhY2Nlc3Np
YmlsaXR5T2JqZWN0ID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eU9iamVjdD4ob2JqKTsKKworICAg
IEdSZWZQdHI8V2ViS2l0QWNjZXNzaWJsZT4gd3JhcHBlciA9IGFkb3B0R1JlZih3ZWJraXRBY2Nl
c3NpYmxlTmV3KGFjY2Vzc2liaWxpdHlPYmplY3QpKTsKKyAgICBhY2Nlc3NpYmlsaXR5T2JqZWN0
LT5zZXRXcmFwcGVyKHdyYXBwZXIuZ2V0KCkpOwogCiAgICAgLy8gSWYgYW4gb2JqZWN0IGlzIGJl
aW5nIGF0dGFjaGVkIGFuZCB3ZSBhcmUgbm90IGluIHRoZSBtaWRkbGUgb2YgYSBsYXlvdXQgdXBk
YXRlLCB0aGVuCiAgICAgLy8gd2Ugc2hvdWxkIHJlcG9ydCBBVHMgYnkgZW1pdHRpbmcgdGhlIGNo
aWxkcmVuLWNoYW5nZWQ6OmFkZCBzaWduYWwgZnJvbSB0aGUgcGFyZW50LgotICAgIERvY3VtZW50
KiBkb2N1bWVudCA9IG9iai0+ZG9jdW1lbnQoKTsKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBh
Y2Nlc3NpYmlsaXR5T2JqZWN0LT5kb2N1bWVudCgpOwogICAgIGlmICghZG9jdW1lbnQgfHwgZG9j
dW1lbnQtPmNoaWxkTmVlZHNTdHlsZVJlY2FsYygpKQogICAgICAgICByZXR1cm47CiAKICAgICAv
LyBEb24ndCBlbWl0IHRoZSBzaWduYWwgd2hlbiB0aGUgYWN0dWFsIG9iamVjdCBiZWluZyBhZGRl
ZCBpcyBub3QgZ29pbmcgdG8gYmUgZXhwb3NlZC4KLSAgICBpZiAob2JqLT5hY2Nlc3NpYmlsaXR5
SXNJZ25vcmVkQnlEZWZhdWx0KCkpCisgICAgaWYgKGFjY2Vzc2liaWxpdHlPYmplY3QtPmFjY2Vz
c2liaWxpdHlJc0lnbm9yZWRCeURlZmF1bHQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8g
RG9uJ3QgZW1pdCB0aGUgc2lnbmFsIGlmIHRoZSBvYmplY3QgYmVpbmcgYWRkZWQgaXMgbm90IC0t
IG9yIG5vdCB5ZXQgLS0gcmVuZGVyZWQsCkBAIC04MSwxMCArODYsMTAgQEAgdm9pZCBBWE9iamVj
dENhY2hlOjphdHRhY2hXcmFwcGVyKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iaikKICAgICAvLyBj
aGlsZC4gQnV0IGlmIGFuIGFzc2lzdGl2ZSB0ZWNobm9sb2d5IGlzIGxpc3RlbmluZywgQVQtU1BJ
MiB3aWxsIGF0dGVtcHQgdG8gY3JlYXRlCiAgICAgLy8gYW5kIGNhY2hlIHRoZSBzdGF0ZSBzZXQg
Zm9yIHRoZSBjaGlsZCB1cG9uIGVtaXNzaW9uIG9mIHRoZSBzaWduYWwuIElmIHRoZSBvYmplY3QK
ICAgICAvLyBoYXMgbm90IHlldCBiZWVuIHJlbmRlcmVkLCB0aGlzIHdpbGwgcmVzdWx0IGluIGEg
Y3Jhc2guCi0gICAgaWYgKCFvYmotPnJlbmRlcmVyKCkpCisgICAgaWYgKCFhY2Nlc3NpYmlsaXR5
T2JqZWN0LT5yZW5kZXJlcigpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2RlZmVycmVkQXR0
YWNoZWRXcmFwcGVyT2JqZWN0TGlzdC5hZGQob2JqKTsKKyAgICBtX2RlZmVycmVkQXR0YWNoZWRX
cmFwcGVyT2JqZWN0TGlzdC5hZGQoYWNjZXNzaWJpbGl0eU9iamVjdCk7CiB9CiAKIHZvaWQgQVhP
YmplY3RDYWNoZTo6cGxhdGZvcm1QZXJmb3JtRGVmZXJyZWRDYWNoZVVwZGF0ZSgpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9BWE9iamVjdENhY2hlSU9TLm1t
IGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvQVhPYmplY3RDYWNoZUlPUy5tbQpp
bmRleCBkZjU4ZWZhNzY1M2Y2ODA1MzFjOGNlOTM5MzllN2IwNjYzMTczODNhLi44ZDVhMWNmYTBm
YTg3YTcwNmIyYjhkZmQ2MTNkYWVkYmFiN2NhN2U3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L2lvcy9BWE9iamVjdENhY2hlSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvaW9zL0FYT2JqZWN0Q2FjaGVJT1MubW0KQEAgLTQyLDcgKzQyLDcg
QEAgdm9pZCBBWE9iamVjdENhY2hlOjpkZXRhY2hXcmFwcGVyKEFjY2Vzc2liaWxpdHlPYmplY3Qq
IG9iaiwgQWNjZXNzaWJpbGl0eURldGFjaG0KICAgICBvYmotPnNldFdyYXBwZXIobnVsbHB0cik7
CiB9CiAKLXZvaWQgQVhPYmplY3RDYWNoZTo6YXR0YWNoV3JhcHBlcihBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBvYmopCit2b2lkIEFYT2JqZWN0Q2FjaGU6OmF0dGFjaFdyYXBwZXIoQVhDb3JlT2JqZWN0
KiBvYmopCiB7CiAgICAgUmV0YWluUHRyPEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyPiB3cmFw
cGVyID0gYWRvcHROUyhbW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFsbG9jXSBpbml0
V2l0aEFjY2Vzc2liaWxpdHlPYmplY3Q6b2JqXSk7CiAgICAgb2JqLT5zZXRXcmFwcGVyKHdyYXBw
ZXIuZ2V0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3Mv
V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQppbmRleCA5
OGY5NDAyYjg4Y2Y0OGVjMGQzMGNkNWZlM2JkZTUxZTc1ZDNlZjExLi4yNmRjYjBlYWI2MzU5MDQw
OTExZGRhY2U1ZGI5ZjY4YzBkNDEzNWYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlcklPUy5tbQpAQCAtMTIzLDcgKzEyMyw3IEBAIHN0YXRpYyBOU1N0cmluZyAqIGNvbnN0IFVJ
QWNjZXNzaWJpbGl0eVRleHR1YWxDb250ZXh0U291cmNlQ29kZSA9IEAiVUlBY2Nlc3NpYmlsCiBz
dGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqIEFjY2Vzc2liaWxpdHlVbmlnbm9yZWRB
bmNlc3RvcihBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciAqd3JhcHBlcikKIHsKICAgICB3aGls
ZSAod3JhcHBlciAmJiAhW3dyYXBwZXIgaXNBY2Nlc3NpYmlsaXR5RWxlbWVudF0pIHsKLSAgICAg
ICAgQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0ID0gW3dyYXBwZXIgYWNjZXNzaWJpbGl0eU9i
amVjdF07CisgICAgICAgIEFYQ29yZU9iamVjdCogb2JqZWN0ID0gW3dyYXBwZXIgYWNjZXNzaWJp
bGl0eU9iamVjdF07CiAgICAgICAgIGlmICghb2JqZWN0KQogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIApAQCAtMTc5LDcgKzE3OSw3IEBAIHN0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlciogQWNjZXNzaWJpbGl0eVVuaWdub3JlZEFuY2VzdG9yKEFjY2Vzc2liaWxpdHlPCiAvLyBU
aGlzIGlzIG5lZWRlZCBmb3IgZXh0ZXJuYWwgY2xpZW50cyB0byBiZSBhYmxlIHRvIGNyZWF0ZSBh
IHRleHQgbWFya2VyIHdpdGhvdXQgaGF2aW5nIGEgcG9pbnRlciB0byB0aGUgY2FjaGUuCiAtIChp
ZClpbml0V2l0aERhdGE6KE5TRGF0YSAqKWRhdGEgYWNjZXNzaWJpbGl0eU9iamVjdDooQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXIgKil3cmFwcGVyCiB7Ci0gICAgV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eU9iamVjdCogYXhPYmplY3QgPSBbd3JhcHBlciBhY2Nlc3NpYmlsaXR5T2JqZWN0XTsgCisg
ICAgV2ViQ29yZTo6QVhDb3JlT2JqZWN0KiBheE9iamVjdCA9IFt3cmFwcGVyIGFjY2Vzc2liaWxp
dHlPYmplY3RdOwogICAgIGlmICghYXhPYmplY3QpCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAg
CkBAIC0yNTcsNyArMjU3LDcgQEAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKiBB
Y2Nlc3NpYmlsaXR5VW5pZ25vcmVkQW5jZXN0b3IoQWNjZXNzaWJpbGl0eU8KIAogQGltcGxlbWVu
dGF0aW9uIFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyCiAKLS0gKGlkKWluaXRXaXRoQWNj
ZXNzaWJpbGl0eU9iamVjdDooQWNjZXNzaWJpbGl0eU9iamVjdCopYXhPYmplY3QKKy0gKGlkKWlu
aXRXaXRoQWNjZXNzaWJpbGl0eU9iamVjdDooQVhDb3JlT2JqZWN0KilheE9iamVjdAogewogICAg
IHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhBY2Nlc3NpYmlsaXR5T2JqZWN0OmF4T2JqZWN0XTsKICAg
ICBpZiAoIXNlbGYpCkBAIC01NTAsMzEgKzU1MCwzMSBAQCBzdGF0aWMgQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIqIEFjY2Vzc2liaWxpdHlVbmlnbm9yZWRBbmNlc3RvcihBY2Nlc3NpYmlsaXR5
TwogCiAtIChBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciopX2FjY2Vzc2liaWxpdHlUcmVlQW5j
ZXN0b3IKIHsKLSAgICBhdXRvIG1hdGNoRnVuYyA9IFtdIChjb25zdCBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0JiBvYmplY3QpIHsKKyAgICBhdXRvIG1hdGNoRnVuYyA9IFtdIChjb25zdCBBWENvcmVPYmpl
Y3QmIG9iamVjdCkgewogICAgICAgICBBY2Nlc3NpYmlsaXR5Um9sZSByb2xlID0gb2JqZWN0LnJv
bGVWYWx1ZSgpOwogICAgICAgICByZXR1cm4gcm9sZSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6VHJl
ZTsKICAgICB9OwotICAgIAotICAgIGlmIChjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJl
bnQgPSBBY2Nlc3NpYmlsaXR5OjpmaW5kQW5jZXN0b3I8QWNjZXNzaWJpbGl0eU9iamVjdD4oKm1f
b2JqZWN0LCBmYWxzZSwgV1RGTW92ZShtYXRjaEZ1bmMpKSkKKworICAgIGlmIChjb25zdCBBWENv
cmVPYmplY3QqIHBhcmVudCA9IEFjY2Vzc2liaWxpdHk6OmZpbmRBbmNlc3RvcjxBWENvcmVPYmpl
Y3Q+KCptX29iamVjdCwgZmFsc2UsIFdURk1vdmUobWF0Y2hGdW5jKSkpCiAgICAgICAgIHJldHVy
biBwYXJlbnQtPndyYXBwZXIoKTsKICAgICByZXR1cm4gbmlsOwogfQogCiAtIChBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlciopX2FjY2Vzc2liaWxpdHlMaXN0QW5jZXN0b3IKIHsKLSAgICBhdXRv
IG1hdGNoRnVuYyA9IFtdIChjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0JiBvYmplY3QpIHsKKyAg
ICBhdXRvIG1hdGNoRnVuYyA9IFtdIChjb25zdCBBWENvcmVPYmplY3QmIG9iamVjdCkgewogICAg
ICAgICBBY2Nlc3NpYmlsaXR5Um9sZSByb2xlID0gb2JqZWN0LnJvbGVWYWx1ZSgpOwogICAgICAg
ICByZXR1cm4gcm9sZSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6TGlzdCB8fCByb2xlID09IEFjY2Vz
c2liaWxpdHlSb2xlOjpMaXN0Qm94OwogICAgIH07CiAgICAgCi0gICAgaWYgKGNvbnN0IEFjY2Vz
c2liaWxpdHlPYmplY3QqIHBhcmVudCA9IEFjY2Vzc2liaWxpdHk6OmZpbmRBbmNlc3RvcjxBY2Nl
c3NpYmlsaXR5T2JqZWN0PigqbV9vYmplY3QsIGZhbHNlLCBXVEZNb3ZlKG1hdGNoRnVuYykpKQor
ICAgIGlmIChjb25zdCBBWENvcmVPYmplY3QqIHBhcmVudCA9IEFjY2Vzc2liaWxpdHk6OmZpbmRB
bmNlc3RvcjxBWENvcmVPYmplY3Q+KCptX29iamVjdCwgZmFsc2UsIFdURk1vdmUobWF0Y2hGdW5j
KSkpCiAgICAgICAgIHJldHVybiBwYXJlbnQtPndyYXBwZXIoKTsKICAgICByZXR1cm4gbmlsOwog
fQogCiAtIChBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciopX2FjY2Vzc2liaWxpdHlBcnRpY2xl
QW5jZXN0b3IKIHsKLSAgICBpZiAoY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0g
QWNjZXNzaWJpbGl0eTo6ZmluZEFuY2VzdG9yPEFjY2Vzc2liaWxpdHlPYmplY3Q+KCptX29iamVj
dCwgZmFsc2UsIFtdIChjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0JiBvYmplY3QpIHsKKyAgICBp
ZiAoY29uc3QgQVhDb3JlT2JqZWN0KiBwYXJlbnQgPSBBY2Nlc3NpYmlsaXR5OjpmaW5kQW5jZXN0
b3I8QVhDb3JlT2JqZWN0PigqbV9vYmplY3QsIGZhbHNlLCBbXSAoY29uc3QgQVhDb3JlT2JqZWN0
JiBvYmplY3QpIHsKICAgICAgICAgcmV0dXJuIG9iamVjdC5yb2xlVmFsdWUoKSA9PSBBY2Nlc3Np
YmlsaXR5Um9sZTo6RG9jdW1lbnRBcnRpY2xlOwogICAgIH0pKQogICAgICAgICByZXR1cm4gcGFy
ZW50LT53cmFwcGVyKCk7CkBAIC01ODMsNyArNTgzLDcgQEAgc3RhdGljIEFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyKiBBY2Nlc3NpYmlsaXR5VW5pZ25vcmVkQW5jZXN0b3IoQWNjZXNzaWJpbGl0
eU8KIAogLSAoQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqKV9hY2Nlc3NpYmlsaXR5TGFuZG1h
cmtBbmNlc3RvcgogewotICAgIGlmIChjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQg
PSBBY2Nlc3NpYmlsaXR5OjpmaW5kQW5jZXN0b3I8QWNjZXNzaWJpbGl0eU9iamVjdD4oKm1fb2Jq
ZWN0LCBmYWxzZSwgW3NlbGZdIChjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0JiBvYmplY3QpIHsK
KyAgICBpZiAoY29uc3QgQVhDb3JlT2JqZWN0KiBwYXJlbnQgPSBBY2Nlc3NpYmlsaXR5OjpmaW5k
QW5jZXN0b3I8QVhDb3JlT2JqZWN0PigqbV9vYmplY3QsIGZhbHNlLCBbc2VsZl0gKGNvbnN0IEFY
Q29yZU9iamVjdCYgb2JqZWN0KSB7CiAgICAgICAgIHJldHVybiBbc2VsZiBfYWNjZXNzaWJpbGl0
eUlzTGFuZG1hcmtSb2xlOm9iamVjdC5yb2xlVmFsdWUoKV07CiAgICAgfSkpCiAgICAgICAgIHJl
dHVybiBwYXJlbnQtPndyYXBwZXIoKTsKQEAgLTU5Miw3ICs1OTIsNyBAQCBzdGF0aWMgQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXIqIEFjY2Vzc2liaWxpdHlVbmlnbm9yZWRBbmNlc3RvcihBY2Nl
c3NpYmlsaXR5TwogCiAtIChBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciopX2FjY2Vzc2liaWxp
dHlUYWJsZUFuY2VzdG9yCiB7Ci0gICAgaWYgKGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3QqIHBh
cmVudCA9IEFjY2Vzc2liaWxpdHk6OmZpbmRBbmNlc3RvcjxBY2Nlc3NpYmlsaXR5T2JqZWN0Pigq
bV9vYmplY3QsIGZhbHNlLCBbXSAoY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCYgb2JqZWN0KSB7
CisgICAgaWYgKGNvbnN0IEFYQ29yZU9iamVjdCogcGFyZW50ID0gQWNjZXNzaWJpbGl0eTo6Zmlu
ZEFuY2VzdG9yPEFYQ29yZU9iamVjdD4oKm1fb2JqZWN0LCBmYWxzZSwgW10gKGNvbnN0IEFYQ29y
ZU9iamVjdCYgb2JqZWN0KSB7CiAgICAgICAgIHJldHVybiBvYmplY3Qucm9sZVZhbHVlKCkgPT0g
QWNjZXNzaWJpbGl0eVJvbGU6OlRhYmxlOwogICAgIH0pKQogICAgICAgICByZXR1cm4gcGFyZW50
LT53cmFwcGVyKCk7CkBAIC02MDEsMTQgKzYwMSwxNCBAQCBzdGF0aWMgQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIqIEFjY2Vzc2liaWxpdHlVbmlnbm9yZWRBbmNlc3RvcihBY2Nlc3NpYmlsaXR5
TwogCiAtIChCT09MKV9hY2Nlc3NpYmlsaXR5SXNJblRhYmxlQ2VsbAogewotICAgIHJldHVybiBB
Y2Nlc3NpYmlsaXR5OjpmaW5kQW5jZXN0b3I8QWNjZXNzaWJpbGl0eU9iamVjdD4oKm1fb2JqZWN0
LCBmYWxzZSwgW10gKGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3QmIG9iamVjdCkgeworICAgIHJl
dHVybiBBY2Nlc3NpYmlsaXR5OjpmaW5kQW5jZXN0b3I8QVhDb3JlT2JqZWN0PigqbV9vYmplY3Qs
IGZhbHNlLCBbXSAoY29uc3QgQVhDb3JlT2JqZWN0JiBvYmplY3QpIHsKICAgICAgICAgcmV0dXJu
IG9iamVjdC5yb2xlVmFsdWUoKSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6Q2VsbDsKICAgICB9KSAh
PSBudWxscHRyOwogfQogCiAtIChBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciopX2FjY2Vzc2li
aWxpdHlGaWVsZHNldEFuY2VzdG9yCiB7Ci0gICAgaWYgKGNvbnN0IEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIHBhcmVudCA9IEFjY2Vzc2liaWxpdHk6OmZpbmRBbmNlc3RvcjxBY2Nlc3NpYmlsaXR5T2Jq
ZWN0PigqbV9vYmplY3QsIGZhbHNlLCBbXSAoY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCYgb2Jq
ZWN0KSB7CisgICAgaWYgKGNvbnN0IEFYQ29yZU9iamVjdCogcGFyZW50ID0gQWNjZXNzaWJpbGl0
eTo6ZmluZEFuY2VzdG9yPEFYQ29yZU9iamVjdD4oKm1fb2JqZWN0LCBmYWxzZSwgW10gKGNvbnN0
IEFYQ29yZU9iamVjdCYgb2JqZWN0KSB7CiAgICAgICAgIHJldHVybiBvYmplY3QuaXNGaWVsZHNl
dCgpOwogICAgIH0pKQogICAgICAgICByZXR1cm4gcGFyZW50LT53cmFwcGVyKCk7CkBAIC02MTcs
NyArNjE3LDcgQEAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKiBBY2Nlc3NpYmls
aXR5VW5pZ25vcmVkQW5jZXN0b3IoQWNjZXNzaWJpbGl0eU8KIAogLSAoQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIqKV9hY2Nlc3NpYmlsaXR5RnJhbWVBbmNlc3RvcgogewotICAgIGF1dG8qIHBh
cmVudCA9IEFjY2Vzc2liaWxpdHk6OmZpbmRBbmNlc3RvcjxBY2Nlc3NpYmlsaXR5T2JqZWN0Pigq
bV9vYmplY3QsIGZhbHNlLCBbXSAoY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCYgb2JqZWN0KSB7
CisgICAgYXV0byogcGFyZW50ID0gQWNjZXNzaWJpbGl0eTo6ZmluZEFuY2VzdG9yPEFYQ29yZU9i
amVjdD4oKm1fb2JqZWN0LCBmYWxzZSwgW10gKGNvbnN0IEFYQ29yZU9iamVjdCYgb2JqZWN0KSB7
CiAgICAgICAgIHJldHVybiBvYmplY3QuaXNXZWJBcmVhKCk7CiAgICAgfSk7CiAgICAgaWYgKCFw
YXJlbnQpCkBAIC02MzIsNyArNjMyLDcgQEAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyKiBBY2Nlc3NpYmlsaXR5VW5pZ25vcmVkQW5jZXN0b3IoQWNjZXNzaWJpbGl0eU8KICAgICAK
ICAgICAvLyBUcmFpdCBpbmZvcm1hdGlvbiBhbHNvIG5lZWRzIHRvIGJlIGdhdGhlcmVkIGZyb20g
dGhlIHBhcmVudHMgYWJvdmUgdGhlIG9iamVjdC4KICAgICAvLyBUaGUgcGFyZW50T2JqZWN0IGlz
IG5lZWRlZCBpbnN0ZWFkIG9mIHRoZSB1bmlnbm9yZWRQYXJlbnRPYmplY3QsIGJlY2F1c2UgYSB0
YWJsZSBtaWdodCBiZSBpZ25vcmVkLCBidXQgaW5mb3JtYXRpb24gc3RpbGwgbmVlZHMgdG8gYmUg
Z2F0aGVyZWQgZnJvbSBpdC4gICAgCi0gICAgZm9yIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJl
bnQgPSBtX29iamVjdC0+cGFyZW50T2JqZWN0KCk7IHBhcmVudCAhPSBuaWw7IHBhcmVudCA9IHBh
cmVudC0+cGFyZW50T2JqZWN0KCkpIHsKKyAgICBmb3IgKGF1dG8qIHBhcmVudCA9IG1fb2JqZWN0
LT5wYXJlbnRPYmplY3QoKTsgcGFyZW50ICE9IG5pbDsgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRP
YmplY3QoKSkgewogICAgICAgICBBY2Nlc3NpYmlsaXR5Um9sZSBwYXJlbnRSb2xlID0gcGFyZW50
LT5yb2xlVmFsdWUoKTsKICAgICAgICAgaWYgKHBhcmVudFJvbGUgPT0gQWNjZXNzaWJpbGl0eVJv
bGU6OldlYkFyZWEpCiAgICAgICAgICAgICBicmVhazsKQEAgLTExODIsNyArMTE4Miw3IEBAIHN0
YXRpYyB2b2lkIGFwcGVuZFN0cmluZ1RvUmVzdWx0KE5TTXV0YWJsZVN0cmluZyAqcmVzdWx0LCBO
U1N0cmluZyAqc3RyaW5nKQogLSAoQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbCopdGFibGVDZWxsUGFy
ZW50CiB7CiAgICAgLy8gRmluZCBpZiB0aGlzIGVsZW1lbnQgaXMgaW4gYSB0YWJsZSBjZWxsLgot
ICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBBY2Nlc3NpYmlsaXR5OjpmaW5k
QW5jZXN0b3I8QWNjZXNzaWJpbGl0eU9iamVjdD4oKm1fb2JqZWN0LCB0cnVlLCBbXSAoY29uc3Qg
QWNjZXNzaWJpbGl0eU9iamVjdCYgb2JqZWN0KSB7CisgICAgaWYgKEFYQ29yZU9iamVjdCogcGFy
ZW50ID0gQWNjZXNzaWJpbGl0eTo6ZmluZEFuY2VzdG9yPEFYQ29yZU9iamVjdD4oKm1fb2JqZWN0
LCB0cnVlLCBbXSAoY29uc3QgQVhDb3JlT2JqZWN0JiBvYmplY3QpIHsKICAgICAgICAgcmV0dXJu
IG9iamVjdC5pc1RhYmxlQ2VsbCgpOwogICAgIH0pKQogICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbCo+KHBhcmVudCk7CkBAIC0xMTkyLDcgKzExOTIsNyBA
QCBzdGF0aWMgdm9pZCBhcHBlbmRTdHJpbmdUb1Jlc3VsdChOU011dGFibGVTdHJpbmcgKnJlc3Vs
dCwgTlNTdHJpbmcgKnN0cmluZykKIC0gKEFjY2Vzc2liaWxpdHlUYWJsZSopdGFibGVQYXJlbnQK
IHsKICAgICAvLyBGaW5kIGlmIHRoZSBwYXJlbnQgdGFibGUgZm9yIHRoZSB0YWJsZSBjZWxsLgot
ICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBBY2Nlc3NpYmlsaXR5OjpmaW5k
QW5jZXN0b3I8QWNjZXNzaWJpbGl0eU9iamVjdD4oKm1fb2JqZWN0LCB0cnVlLCBbXSAoY29uc3Qg
QWNjZXNzaWJpbGl0eU9iamVjdCYgb2JqZWN0KSB7CisgICAgaWYgKEFYQ29yZU9iamVjdCogcGFy
ZW50ID0gQWNjZXNzaWJpbGl0eTo6ZmluZEFuY2VzdG9yPEFYQ29yZU9iamVjdD4oKm1fb2JqZWN0
LCB0cnVlLCBbXSAoY29uc3QgQVhDb3JlT2JqZWN0JiBvYmplY3QpIHsKICAgICAgICAgcmV0dXJu
IGlzPEFjY2Vzc2liaWxpdHlUYWJsZT4ob2JqZWN0KSAmJiBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5
VGFibGU+KG9iamVjdCkuaXNFeHBvc2FibGVUaHJvdWdoQWNjZXNzaWJpbGl0eSgpOwogICAgIH0p
KQogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlKj4ocGFyZW50
KTsKQEAgLTEyMDQsNyArMTIwNCw3IEBAIHN0YXRpYyB2b2lkIGFwcGVuZFN0cmluZ1RvUmVzdWx0
KE5TTXV0YWJsZVN0cmluZyAqcmVzdWx0LCBOU1N0cmluZyAqc3RyaW5nKQogICAgIGlmICghW3Nl
bGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAg
ICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiB0aXRsZUVsZW1lbnQgPSBtX29iamVjdC0+dGl0bGVVSUVs
ZW1lbnQoKTsKKyAgICBBWENvcmVPYmplY3QqIHRpdGxlRWxlbWVudCA9IG1fb2JqZWN0LT50aXRs
ZVVJRWxlbWVudCgpOwogICAgIGlmICh0aXRsZUVsZW1lbnQpCiAgICAgICAgIHJldHVybiB0aXRs
ZUVsZW1lbnQtPndyYXBwZXIoKTsKIApAQCAtMTM5OCw3ICsxMzk4LDcgQEAgc3RhdGljIHZvaWQg
YXBwZW5kU3RyaW5nVG9SZXN1bHQoTlNNdXRhYmxlU3RyaW5nICpyZXN1bHQsIE5TU3RyaW5nICpz
dHJpbmcpCiAgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKICAgICAg
ICAgcmV0dXJuIG5pbDsKIAotICAgIGlmIChhdXRvKiBwYXJlbnQgPSBBY2Nlc3NpYmlsaXR5Ojpm
aW5kQW5jZXN0b3I8QWNjZXNzaWJpbGl0eU9iamVjdD4oKm1fb2JqZWN0LCB0cnVlLCBbXSAoY29u
c3QgQWNjZXNzaWJpbGl0eU9iamVjdCYgb2JqZWN0KSB7CisgICAgaWYgKGF1dG8qIHBhcmVudCA9
IEFjY2Vzc2liaWxpdHk6OmZpbmRBbmNlc3RvcjxBWENvcmVPYmplY3Q+KCptX29iamVjdCwgdHJ1
ZSwgW10gKGNvbnN0IEFYQ29yZU9iamVjdCYgb2JqZWN0KSB7CiAgICAgICAgIHJldHVybiBvYmpl
Y3Quc3VwcG9ydHNEYXRldGltZUF0dHJpYnV0ZSgpOwogICAgIH0pKQogICAgICAgICByZXR1cm4g
cGFyZW50LT5kYXRldGltZUF0dHJpYnV0ZVZhbHVlKCk7CkBAIC0xOTY5LDMxICsxOTY5LDMxIEBA
IHN0YXRpYyBSZW5kZXJPYmplY3QqIHJlbmRlcmVyRm9yVmlldyhXQUtWaWV3KiB2aWV3KQogICAg
IHJldHVybiBtX29iamVjdC0+c2Nyb2xsVmlzaWJsZUNvbnRlbnRSZWN0KCk7CiB9CiAKLS0gKEFj
Y2Vzc2liaWxpdHlPYmplY3QqKWRldGFpbFBhcmVudEZvclN1bW1hcnlPYmplY3Q6KEFjY2Vzc2li
aWxpdHlPYmplY3QqKW9iamVjdAorLSAoQVhDb3JlT2JqZWN0KilkZXRhaWxQYXJlbnRGb3JTdW1t
YXJ5T2JqZWN0OihBWENvcmVPYmplY3QqKW9iamVjdAogewogICAgIC8vIFVzZSB0aGlzIHRvIGNo
ZWNrIGlmIGFuIG9iamVjdCBpcyB0aGUgY2hpbGQgb2YgYSBzdW1tYXJ5IG9iamVjdC4KICAgICAv
LyBBbmQgcmV0dXJuIHRoZSBzdW1tYXJ5J3MgcGFyZW50LCB3aGljaCBpcyB0aGUgZXhwYW5kYWJs
ZSBkZXRhaWxzIG9iamVjdC4KLSAgICBpZiAoY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCogc3Vt
bWFyeSA9IEFjY2Vzc2liaWxpdHk6OmZpbmRBbmNlc3RvcjxBY2Nlc3NpYmlsaXR5T2JqZWN0Pigq
b2JqZWN0LCB0cnVlLCBbXSAoY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCYgb2JqZWN0KSB7Cisg
ICAgaWYgKGNvbnN0IEFYQ29yZU9iamVjdCogc3VtbWFyeSA9IEFjY2Vzc2liaWxpdHk6OmZpbmRB
bmNlc3RvcjxBWENvcmVPYmplY3Q+KCpvYmplY3QsIHRydWUsIFtdIChjb25zdCBBWENvcmVPYmpl
Y3QmIG9iamVjdCkgewogICAgICAgICByZXR1cm4gb2JqZWN0Lmhhc1RhZ05hbWUoc3VtbWFyeVRh
Zyk7CiAgICAgfSkpCiAgICAgICAgIHJldHVybiBzdW1tYXJ5LT5wYXJlbnRPYmplY3QoKTsKICAg
ICByZXR1cm4gbmlsOwogfQogCi0tIChBY2Nlc3NpYmlsaXR5T2JqZWN0KilkZXRhaWxQYXJlbnRG
b3JPYmplY3Q6KEFjY2Vzc2liaWxpdHlPYmplY3QqKW9iamVjdAorLSAoQVhDb3JlT2JqZWN0Kilk
ZXRhaWxQYXJlbnRGb3JPYmplY3Q6KEFjY2Vzc2liaWxpdHlPYmplY3QqKW9iamVjdAogewogICAg
IC8vIFVzZSB0aGlzIHRvIGNoZWNrIGlmIGFuIG9iamVjdCBpcyBpbnNpZGUgYSBkZXRhaWxzIG9i
amVjdC4KLSAgICBpZiAoY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCogZGV0YWlscyA9IEFjY2Vz
c2liaWxpdHk6OmZpbmRBbmNlc3RvcjxBY2Nlc3NpYmlsaXR5T2JqZWN0Pigqb2JqZWN0LCB0cnVl
LCBbXSAoY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCYgb2JqZWN0KSB7CisgICAgaWYgKEFYQ29y
ZU9iamVjdCogZGV0YWlscyA9IEFjY2Vzc2liaWxpdHk6OmZpbmRBbmNlc3RvcjxBWENvcmVPYmpl
Y3Q+KCpvYmplY3QsIHRydWUsIFtdIChjb25zdCBBWENvcmVPYmplY3QmIG9iamVjdCkgewogICAg
ICAgICByZXR1cm4gb2JqZWN0Lmhhc1RhZ05hbWUoZGV0YWlsc1RhZyk7CiAgICAgfSkpCi0gICAg
ICAgIHJldHVybiBjb25zdF9jYXN0PEFjY2Vzc2liaWxpdHlPYmplY3QqPihkZXRhaWxzKTsKKyAg
ICAgICAgcmV0dXJuIGRldGFpbHM7CiAgICAgcmV0dXJuIG5pbDsKIH0KIAotLSAoQWNjZXNzaWJp
bGl0eU9iamVjdCopdHJlZUl0ZW1QYXJlbnRGb3JPYmplY3Q6KEFjY2Vzc2liaWxpdHlPYmplY3Qq
KW9iamVjdAorLSAoQVhDb3JlT2JqZWN0Kil0cmVlSXRlbVBhcmVudEZvck9iamVjdDooQVhDb3Jl
T2JqZWN0KilvYmplY3QKIHsKICAgICAvLyBVc2UgdGhpcyB0byBjaGVjayBpZiBhbiBvYmplY3Qg
aXMgaW5zaWRlIGEgdHJlZWl0ZW0gb2JqZWN0LgotICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBwYXJlbnQgPSBBY2Nlc3NpYmlsaXR5OjpmaW5kQW5jZXN0b3I8QWNjZXNzaWJpbGl0eU9iamVj
dD4oKm9iamVjdCwgdHJ1ZSwgW10gKGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3QmIG9iamVjdCkg
eworICAgIGlmIChBWENvcmVPYmplY3QqIHBhcmVudCA9IEFjY2Vzc2liaWxpdHk6OmZpbmRBbmNl
c3RvcjxBWENvcmVPYmplY3Q+KCpvYmplY3QsIHRydWUsIFtdIChjb25zdCBBWENvcmVPYmplY3Qm
IG9iamVjdCkgewogICAgICAgICByZXR1cm4gb2JqZWN0LnJvbGVWYWx1ZSgpID09IEFjY2Vzc2li
aWxpdHlSb2xlOjpUcmVlSXRlbTsKICAgICB9KSkKICAgICAgICAgcmV0dXJuIHBhcmVudDsKQEAg
LTIyMDcsMTEgKzIyMDcsMTEgQEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVTdHJpbmdTZXRTdHls
ZShOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLCBSZW4KIAogICAgIC8vIEFk
ZCBjb2RlIGNvbnRleHQgaWYgdGhpcyBub2RlIGlzIHdpdGhpbiBhIDxjb2RlPiBibG9jay4KICAg
ICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBheE9iamVjdCA9IHJlbmRlcmVyLT5kb2N1bWVudCgpLmF4
T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUocmVuZGVyZXIpOwotICAgIGF1dG8gbWF0Y2hGdW5j
ID0gW10gKGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3QmIG9iamVjdCkgeworICAgIGF1dG8gbWF0
Y2hGdW5jID0gW10gKGNvbnN0IEFYQ29yZU9iamVjdCYgb2JqZWN0KSB7CiAgICAgICAgIHJldHVy
biBvYmplY3Qubm9kZSgpICYmIG9iamVjdC5ub2RlKCktPmhhc1RhZ05hbWUoY29kZVRhZyk7CiAg
ICAgfTsKIAotICAgIGlmIChjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBBY2Nl
c3NpYmlsaXR5OjpmaW5kQW5jZXN0b3I8QWNjZXNzaWJpbGl0eU9iamVjdD4oKmF4T2JqZWN0LCB0
cnVlLCBXVEZNb3ZlKG1hdGNoRnVuYykpKQorICAgIGlmIChjb25zdCBBWENvcmVPYmplY3QqIHBh
cmVudCA9IEFjY2Vzc2liaWxpdHk6OmZpbmRBbmNlc3RvcjxBWENvcmVPYmplY3Q+KCpheE9iamVj
dCwgdHJ1ZSwgV1RGTW92ZShtYXRjaEZ1bmMpKSkKICAgICAgICAgW2F0dHJTdHJpbmcgYWRkQXR0
cmlidXRlOlVJQWNjZXNzaWJpbGl0eVRleHRBdHRyaWJ1dGVDb250ZXh0IHZhbHVlOlVJQWNjZXNz
aWJpbGl0eVRleHR1YWxDb250ZXh0U291cmNlQ29kZSByYW5nZTpyYW5nZV07CiB9CiAKQEAgLTIy
ODIsNyArMjI4Miw3IEBAIHN0YXRpYyB2b2lkIEFYQXR0cmlidXRlZFN0cmluZ0FwcGVuZFRleHQo
TlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0clN0cmluZywKICAgICAgICAgICAgICAgICBp
ZiAoW3NlbGYgX2FkZEFjY2Vzc2liaWxpdHlPYmplY3Q6aGVhZGluZ09iamVjdCB0b1RleHRNYXJr
ZXJBcnJheTphcnJheV0pCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIFN0cmluZyBsaXN0TWFya2VyVGV4dCA9IG1fb2JqZWN0
LT5saXN0TWFya2VyVGV4dEZvck5vZGVBbmRQb3NpdGlvbigmbm9kZSwgVmlzaWJsZVBvc2l0aW9u
KGl0LnJhbmdlKCktPnN0YXJ0UG9zaXRpb24oKSkpOworICAgICAgICAgICAgICAgIFN0cmluZyBs
aXN0TWFya2VyVGV4dCA9IEFjY2Vzc2liaWxpdHlPYmplY3Q6Omxpc3RNYXJrZXJUZXh0Rm9yTm9k
ZUFuZFBvc2l0aW9uKCZub2RlLCBWaXNpYmxlUG9zaXRpb24oaXQucmFuZ2UoKS0+c3RhcnRQb3Np
dGlvbigpKSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKCFsaXN0TWFy
a2VyVGV4dC5pc0VtcHR5KCkpIAogICAgICAgICAgICAgICAgICAgICBbYXJyYXkgYWRkT2JqZWN0
Omxpc3RNYXJrZXJUZXh0XTsKQEAgLTIyOTEsNyArMjI5MSw3IEBAIHN0YXRpYyB2b2lkIEFYQXR0
cmlidXRlZFN0cmluZ0FwcGVuZFRleHQoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0clN0
cmluZywKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBTdHJpbmcgbGlzdE1hcmtlclRleHQgPSBtX29iamVjdC0+bGlzdE1hcmtl
clRleHRGb3JOb2RlQW5kUG9zaXRpb24oJm5vZGUsIFZpc2libGVQb3NpdGlvbihpdC5yYW5nZSgp
LT5zdGFydFBvc2l0aW9uKCkpKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgbGlzdE1hcmtlclRl
eHQgPSBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpsaXN0TWFya2VyVGV4dEZvck5vZGVBbmRQb3NpdGlv
bigmbm9kZSwgVmlzaWJsZVBvc2l0aW9uKGl0LnJhbmdlKCktPnN0YXJ0UG9zaXRpb24oKSkpOwog
CiAgICAgICAgICAgICAgICAgaWYgKCFsaXN0TWFya2VyVGV4dC5pc0VtcHR5KCkpIHsKICAgICAg
ICAgICAgICAgICAgICAgTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0clN0cmluZyA9IFtb
TlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdF07CkBAIC0yOTQxLDEwICsyOTQx
LDEwIEBAIHN0YXRpYyB2b2lkIEFYQXR0cmlidXRlZFN0cmluZ0FwcGVuZFRleHQoTlNNdXRhYmxl
QXR0cmlidXRlZFN0cmluZyogYXR0clN0cmluZywKICAgICAKICAgICAvLyBTaW5jZSBkZXRhaWxz
IGVsZW1lbnQgaXMgaWdub3JlZCBvbiBpT1MsIHdlIHNob3VsZCBleHBvc2UgdGhlIGV4cGFuZGVk
IHN0YXR1cyBvbiBpdHMKICAgICAvLyBzdW1tYXJ5J3MgYWNjZXNzaWJsZSBjaGlsZHJlbi4KLSAg
ICBpZiAoQWNjZXNzaWJpbGl0eU9iamVjdCogZGV0YWlsUGFyZW50ID0gW3NlbGYgZGV0YWlsUGFy
ZW50Rm9yU3VtbWFyeU9iamVjdDptX29iamVjdF0pCisgICAgaWYgKEFYQ29yZU9iamVjdCogZGV0
YWlsUGFyZW50ID0gW3NlbGYgZGV0YWlsUGFyZW50Rm9yU3VtbWFyeU9iamVjdDptX29iamVjdF0p
CiAgICAgICAgIHJldHVybiBkZXRhaWxQYXJlbnQtPnN1cHBvcnRzRXhwYW5kZWQoKTsKICAgICAK
LSAgICBpZiAoQWNjZXNzaWJpbGl0eU9iamVjdCogdHJlZUl0ZW1QYXJlbnQgPSBbc2VsZiB0cmVl
SXRlbVBhcmVudEZvck9iamVjdDptX29iamVjdF0pCisgICAgaWYgKEFYQ29yZU9iamVjdCogdHJl
ZUl0ZW1QYXJlbnQgPSBbc2VsZiB0cmVlSXRlbVBhcmVudEZvck9iamVjdDptX29iamVjdF0pCiAg
ICAgICAgIHJldHVybiB0cmVlSXRlbVBhcmVudC0+c3VwcG9ydHNFeHBhbmRlZCgpOwogICAgIAog
ICAgIHJldHVybiBtX29iamVjdC0+c3VwcG9ydHNFeHBhbmRlZCgpOwpAQCAtMjk1NywxMCArMjk1
NywxMCBAQCBzdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZWRTdHJpbmdBcHBlbmRUZXh0KE5TTXV0YWJs
ZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcsCiAKICAgICAvLyBTaW5jZSBkZXRhaWxzIGVs
ZW1lbnQgaXMgaWdub3JlZCBvbiBpT1MsIHdlIHNob3VsZCBleHBvc2UgdGhlIGV4cGFuZGVkIHN0
YXR1cyBvbiBpdHMKICAgICAvLyBzdW1tYXJ5J3MgYWNjZXNzaWJsZSBjaGlsZHJlbi4KLSAgICBp
ZiAoQWNjZXNzaWJpbGl0eU9iamVjdCogZGV0YWlsUGFyZW50ID0gW3NlbGYgZGV0YWlsUGFyZW50
Rm9yU3VtbWFyeU9iamVjdDptX29iamVjdF0pCisgICAgaWYgKEFYQ29yZU9iamVjdCogZGV0YWls
UGFyZW50ID0gW3NlbGYgZGV0YWlsUGFyZW50Rm9yU3VtbWFyeU9iamVjdDptX29iamVjdF0pCiAg
ICAgICAgIHJldHVybiBkZXRhaWxQYXJlbnQtPmlzRXhwYW5kZWQoKTsKICAgICAKLSAgICBpZiAo
QWNjZXNzaWJpbGl0eU9iamVjdCogdHJlZUl0ZW1QYXJlbnQgPSBbc2VsZiB0cmVlSXRlbVBhcmVu
dEZvck9iamVjdDptX29iamVjdF0pCisgICAgaWYgKEFYQ29yZU9iamVjdCogdHJlZUl0ZW1QYXJl
bnQgPSBbc2VsZiB0cmVlSXRlbVBhcmVudEZvck9iamVjdDptX29iamVjdF0pCiAgICAgICAgIHJl
dHVybiB0cmVlSXRlbVBhcmVudC0+aXNFeHBhbmRlZCgpOwogICAgIAogICAgIHJldHVybiBtX29i
amVjdC0+aXNFeHBhbmRlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWUuY3BwCmluZGV4IDU4NmFkZjA2
NzJmNzZlYTM1OGU5ZGIxZDdiODA1NmYyMjM3YTA2OTguLmNmZjk3MDdlMDU4NWE4ZjU2N2M1OWMx
NjlmOTdmOGYzNGU2NWVkYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRUcmVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZS5jcHAKQEAgLTExNCwxMCAr
MTE0LDExIEBAIFJlZlB0cjxBWElzb2xhdGVkVHJlZU5vZGU+IEFYSXNvbGF0ZWRUcmVlOjpyb290
Tm9kZSgpCiAgICAgcmV0dXJuIG5vZGVGb3JJRChtX3Jvb3ROb2RlSUQpOwogfQogCi12b2lkIEFY
SXNvbGF0ZWRUcmVlOjpzZXRSb290Tm9kZUlEKEFYSUQgYXhJRCkKK3ZvaWQgQVhJc29sYXRlZFRy
ZWU6OnNldFJvb3QoUmVmPEFYSXNvbGF0ZWRUcmVlTm9kZT4mIHJvb3QpCiB7CiAgICAgTG9ja0hv
bGRlciBsb2NrZXIgeyBtX2NoYW5nZUxvZ0xvY2sgfTsKLSAgICBtX3BlbmRpbmdSb290Tm9kZUlE
ID0gYXhJRDsKKyAgICBtX3Jvb3ROb2RlSUQgPSByb290LT5vYmplY3RJRCgpOworICAgIG1fcmVh
ZGVyVGhyZWFkTm9kZU1hcC5hZGQocm9vdC0+b2JqZWN0SUQoKSwgV1RGTW92ZShyb290KSk7CiB9
CiAgICAgCiB2b2lkIEFYSXNvbGF0ZWRUcmVlOjpzZXRGb2N1c2VkTm9kZUlEKEFYSUQgYXhJRCkK
QEAgLTE1MCwxMSArMTUxLDEwIEBAIHZvaWQgQVhJc29sYXRlZFRyZWU6OmFwcGx5UGVuZGluZ0No
YW5nZXMoKQogCiAgICAgLy8gV2UgZG9uJ3QgY2xlYXIgdGhlIHBlbmRpbmcgSURzIGJlYWNhdXNl
IGlmIHRoZSBuZXh0IHJvdW5kIG9mIHVwZGF0ZXMgZG9lcyBub3QgbW9kaWZ5IHRoZW0sIHRoZW4g
dGhleSBzdGF5IHRoZSBzYW1lCiAgICAgLy8gdmFsdWUgd2l0aG91dCBleHRyYSBib29ra2VlcGlu
Zy4KLSAgICBtX3Jvb3ROb2RlSUQgPSBtX3BlbmRpbmdSb290Tm9kZUlEOwogICAgIG1fZm9jdXNl
ZE5vZGVJRCA9IG1fcGVuZGluZ0ZvY3VzZWROb2RlSUQ7Ci0gICAgCisKICAgICBmb3IgKGF1dG8m
IGl0ZW0gOiBhcHBlbmRDb3B5KQotICAgICAgICBtX3JlYWRlclRocmVhZE5vZGVNYXAuYWRkKGl0
ZW0tPmlkZW50aWZpZXIoKSwgV1RGTW92ZShpdGVtKSk7CisgICAgICAgIG1fcmVhZGVyVGhyZWFk
Tm9kZU1hcC5hZGQoaXRlbS0+b2JqZWN0SUQoKSwgV1RGTW92ZShpdGVtKSk7CiAKICAgICBmb3Ig
KGF1dG8gaXRlbSA6IHJlbW92ZUNvcHkpCiAgICAgICAgIG1fcmVhZGVyVGhyZWFkTm9kZU1hcC5y
ZW1vdmUoaXRlbSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lz
b2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZS5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWUuaAppbmRleCA2YWJkNzgzYzExMmUxZmI2OWQ0
NWM1NzlmYWNmZWRhZDkyMjM1NjI5Li5kYWYzM2ZjMGQ3YjY4ZGFhMTY2NDFhODM0NzYyMWZiYmRj
Y2U5YmExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVk
dHJlZS9BWElzb2xhdGVkVHJlZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
aXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRUcmVlLmgKQEAgLTU3LDcgKzU3LDcgQEAgcHVibGljOgog
ICAgIHZvaWQgYXBwZW5kTm9kZUNoYW5nZXMoVmVjdG9yPFJlZjxBWElzb2xhdGVkVHJlZU5vZGU+
PiYpOwogICAgIHZvaWQgcmVtb3ZlTm9kZShBWElEKTsKIAotICAgIHZvaWQgc2V0Um9vdE5vZGVJ
RChBWElEKTsKKyAgICB2b2lkIHNldFJvb3QoUmVmPEFYSXNvbGF0ZWRUcmVlTm9kZT4mKTsKICAg
ICB2b2lkIHNldEZvY3VzZWROb2RlSUQoQVhJRCk7CiAgICAgCiAgICAgLy8gQ2FsbCBvbiBBWCB0
aHJlYWQKQEAgLTc4LDcgKzc4LDYgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8UmVmPEFYSXNvbGF0
ZWRUcmVlTm9kZT4+IG1fcGVuZGluZ0FwcGVuZHM7CiAgICAgVmVjdG9yPEFYSUQ+IG1fcGVuZGlu
Z1JlbW92YWxzOwogICAgIEFYSUQgbV9wZW5kaW5nRm9jdXNlZE5vZGVJRDsKLSAgICBBWElEIG1f
cGVuZGluZ1Jvb3ROb2RlSUQ7CiAgICAgTG9jayBtX2NoYW5nZUxvZ0xvY2s7CiAKICAgICBBWElz
b2xhdGVkVHJlZUlEIG1fdHJlZUlEOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWVOb2RlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRUcmVlTm9kZS5jcHAKaW5k
ZXggNzkzOTI5OTUxZGQyZGM2YTQwMWM0NTgyNjY4NmFlZTIzOWE3M2IyMS4uY2FlODc4MzhmYmQ1
ZDgyNmE5Y2NiNDk1ZjQ2NjA2NTI4OTI5OGU2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWVOb2RlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZU5v
ZGUuY3BwCkBAIC0zMCwxMCArMzAsMTIgQEAKIAogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlPYmpl
Y3QuaCIKIAorZXh0ZXJuICJDIiBib29sIF9BWFVJRWxlbWVudFJlcXVlc3RTZXJ2aWNlZEJ5U2Vj
b25kYXJ5QVhUaHJlYWQodm9pZCk7CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQVhJc29sYXRl
ZFRyZWVOb2RlOjpBWElzb2xhdGVkVHJlZU5vZGUoY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCYg
b2JqZWN0KQotICAgIDogbV9pZGVudGlmaWVyKG9iamVjdC5heE9iamVjdElEKCkpCitBWElzb2xh
dGVkVHJlZU5vZGU6OkFYSXNvbGF0ZWRUcmVlTm9kZShjb25zdCBBWENvcmVPYmplY3QmIG9iamVj
dCkKKyAgICA6IG1faWQob2JqZWN0Lm9iamVjdElEKCkpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKICAgICBpbml0aWFsaXplQXR0cmlidXRlRGF0YShvYmplY3QpOwpAQCAtNDIsMTQg
KzQ0LDE0IEBAIEFYSXNvbGF0ZWRUcmVlTm9kZTo6QVhJc29sYXRlZFRyZWVOb2RlKGNvbnN0IEFj
Y2Vzc2liaWxpdHlPYmplY3QmIG9iamVjdCkKICNlbmRpZgogfQogCi1SZWY8QVhJc29sYXRlZFRy
ZWVOb2RlPiBBWElzb2xhdGVkVHJlZU5vZGU6OmNyZWF0ZShjb25zdCBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0JiBvYmplY3QpCitSZWY8QVhJc29sYXRlZFRyZWVOb2RlPiBBWElzb2xhdGVkVHJlZU5vZGU6
OmNyZWF0ZShjb25zdCBBWENvcmVPYmplY3QmIG9iamVjdCkKIHsKICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBBWElzb2xhdGVkVHJlZU5vZGUob2JqZWN0KSk7CiB9CiAKIEFYSXNvbGF0ZWRUcmVl
Tm9kZTo6fkFYSXNvbGF0ZWRUcmVlTm9kZSgpID0gZGVmYXVsdDsKIAotdm9pZCBBWElzb2xhdGVk
VHJlZU5vZGU6OmluaXRpYWxpemVBdHRyaWJ1dGVEYXRhKGNvbnN0IEFjY2Vzc2liaWxpdHlPYmpl
Y3QmIG9iamVjdCkKK3ZvaWQgQVhJc29sYXRlZFRyZWVOb2RlOjppbml0aWFsaXplQXR0cmlidXRl
RGF0YShjb25zdCBBWENvcmVPYmplY3QmIG9iamVjdCkKIHsKICAgICBzZXRQcm9wZXJ0eShBWFBy
b3BlcnR5TmFtZTo6Um9sZVZhbHVlLCBzdGF0aWNfY2FzdDxpbnQ+KG9iamVjdC5yb2xlVmFsdWUo
KSkpOwogICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc0F0dGFjaG1lbnQsIG9iamVj
dC5pc0F0dGFjaG1lbnQoKSk7CkBAIC04Miw3ICs4NCw3IEBAIHZvaWQgQVhJc29sYXRlZFRyZWVO
b2RlOjpzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEF0dHJpYnV0ZVZh
bHVlCiB2b2lkIEFYSXNvbGF0ZWRUcmVlTm9kZTo6YXBwZW5kQ2hpbGQoQVhJRCBheElEKQogewog
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgbV9jaGlsZHJlbi5hcHBlbmQoYXhJRCk7
CisgICAgbV9jaGlsZHJlbklEcy5hcHBlbmQoYXhJRCk7CiB9CiAKIHZvaWQgQVhJc29sYXRlZFRy
ZWVOb2RlOjpzZXRQYXJlbnQoQVhJRCBwYXJlbnQpCkBAIC05OCw2ICsxMDAsMTggQEAgdm9pZCBB
WElzb2xhdGVkVHJlZU5vZGU6OnNldFRyZWVJZGVudGlmaWVyKEFYSXNvbGF0ZWRUcmVlSUQgdHJl
ZUlkZW50aWZpZXIpCiAgICAgICAgIG1fY2FjaGVkVHJlZSA9IHRyZWU7CiB9CiAKK2NvbnN0IEFY
Q29yZU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBBWElzb2xhdGVkVHJlZU5v
ZGU6OmNoaWxkcmVuKGJvb2wpCit7CisgICAgaWYgKF9BWFVJRWxlbWVudFJlcXVlc3RTZXJ2aWNl
ZEJ5U2Vjb25kYXJ5QVhUaHJlYWQoKSkgeworICAgICAgICBtX2NoaWxkcmVuLmNsZWFyKCk7Cisg
ICAgICAgIG1fY2hpbGRyZW4ucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2NoaWxkcmVuSURzLnNp
emUoKSk7CisgICAgICAgIGF1dG8gdHJlZSA9IHRoaXMtPnRyZWUoKTsKKyAgICAgICAgZm9yIChh
dXRvIGNoaWxkSUQgOiBtX2NoaWxkcmVuSURzKQorICAgICAgICAgICAgbV9jaGlsZHJlbi51bmNo
ZWNrZWRBcHBlbmQodHJlZS0+bm9kZUZvcklEKGNoaWxkSUQpKTsKKyAgICB9CisgICAgcmV0dXJu
IG1fY2hpbGRyZW47Cit9CisKIEFYQ29yZU9iamVjdCogQVhJc29sYXRlZFRyZWVOb2RlOjpmb2N1
c2VkVUlFbGVtZW50KCkgY29uc3QKIHsKICAgICBpZiAoYXV0byBmb2N1c2VkRWxlbWVudCA9IHRy
ZWUoKS0+Zm9jdXNlZFVJRWxlbWVudCgpKQpAQCAtMTA1LDcgKzExOSw3IEBAIEFYQ29yZU9iamVj
dCogQVhJc29sYXRlZFRyZWVOb2RlOjpmb2N1c2VkVUlFbGVtZW50KCkgY29uc3QKICAgICByZXR1
cm4gbnVsbHB0cjsKIH0KICAgICAKLUFYQ29yZU9iamVjdCogQVhJc29sYXRlZFRyZWVOb2RlOjpw
YXJlbnRPYmplY3RJbnRlcmZhY2VVbmlnbm9yZWQoKSBjb25zdAorQVhDb3JlT2JqZWN0KiBBWElz
b2xhdGVkVHJlZU5vZGU6OnBhcmVudE9iamVjdFVuaWdub3JlZCgpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIHRyZWUoKS0+bm9kZUZvcklEKHBhcmVudCgpKS5nZXQoKTsKIH0KQEAgLTExNCw3ICsxMjgs
NyBAQCBBWENvcmVPYmplY3QqIEFYSXNvbGF0ZWRUcmVlTm9kZTo6YWNjZXNzaWJpbGl0eUhpdFRl
c3QoY29uc3QgSW50UG9pbnQmIHBvaW50KSBjbwogewogICAgIGlmICghcmVsYXRpdmVGcmFtZSgp
LmNvbnRhaW5zKHBvaW50KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgZm9yIChhdXRv
IGNoaWxkSUQgOiBjaGlsZHJlbigpKSB7CisgICAgZm9yIChjb25zdCBhdXRvJiBjaGlsZElEIDog
bV9jaGlsZHJlbklEcykgewogICAgICAgICBhdXRvIGNoaWxkID0gdHJlZSgpLT5ub2RlRm9ySUQo
Y2hpbGRJRCk7CiAgICAgICAgIEFTU0VSVChjaGlsZCk7CiAgICAgICAgIGlmIChjaGlsZCAmJiBj
aGlsZC0+cmVsYXRpdmVGcmFtZSgpLmNvbnRhaW5zKHBvaW50KSkKQEAgLTE4Niw2ICsyMDAsMTUg
QEAgaW50IEFYSXNvbGF0ZWRUcmVlTm9kZTo6aW50QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lKSBjb25zdAogICAgICk7CiB9CiAKK3ZvaWQgQVhJc29sYXRlZFRyZWVO
b2RlOjp1cGRhdGVCYWNraW5nU3RvcmUoKQoreworICAgIGlmIChfQVhVSUVsZW1lbnRSZXF1ZXN0
U2VydmljZWRCeVNlY29uZGFyeUFYVGhyZWFkKCkpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
IWlzTWFpblRocmVhZCgpKTsKKyAgICAgICAgaWYgKGF1dG8gdHJlZSA9IHRoaXMtPnRyZWUoKSkK
KyAgICAgICAgICAgIHRyZWUtPmFwcGx5UGVuZGluZ0NoYW5nZXMoKTsKKyAgICB9Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRSgoQUNDRVNTSUJJTElUWV9J
U09MQVRFRF9UUkVFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9p
c29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWVOb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZU5vZGUuaAppbmRleCBjMzU0NmZiZTgy
NzUyZTk5ZWZhYTdlZGRmYTYyNzY3NmQ1NDJhNjBmLi5lYTQxZjJhNTA5Yzc5YWIyYjNlYjRkYTky
NjY4MjEyMDdhMTY0NTI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZU5vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZU5vZGUuaApAQCAtMzEsNiAr
MzEsNyBAQAogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlPYmplY3RJbnRlcmZhY2UuaCIKICNpbmNs
dWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJJbnRQb2ludC5oIgorI2luY2x1ZGUgIlBhdGgu
aCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtNDMsMTEgKzQ0LDU5NyBAQAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBBWElzb2xhdGVkVHJlZTsKLWNsYXNzIEFjY2Vzc2liaWxpdHlPYmpl
Y3Q7Ci0KLWNsYXNzIEFYSXNvbGF0ZWRUcmVlTm9kZSBmaW5hbCA6IHB1YmxpYyBBWENvcmVPYmpl
Y3QsIHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxBWElzb2xhdGVkVHJlZU5vZGU+IHsKIAor
Y2xhc3MgQVhJc29sYXRlZFRyZWVOb2RlIGZpbmFsIDogcHVibGljIEFYQ29yZU9iamVjdCB7CiBw
dWJsaWM6CisgICAgc3RhdGljIFJlZjxBWElzb2xhdGVkVHJlZU5vZGU+IGNyZWF0ZShjb25zdCBB
WENvcmVPYmplY3QmKTsKKyAgICB+QVhJc29sYXRlZFRyZWVOb2RlKCk7CisKKyAgICB2b2lkIHNl
dE9iamVjdElEKEFYSUQgaWQpIG92ZXJyaWRlIHsgbV9pZCA9IGlkOyB9CisgICAgQVhJRCBvYmpl
Y3RJRCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1faWQ7IH0KKyAgICB2b2lkIGluaXQoKSBv
dmVycmlkZSB7IH0KKworICAgIHZvaWQgZGV0YWNoKEFjY2Vzc2liaWxpdHlEZXRhY2htZW50VHlw
ZSwgQVhPYmplY3RDYWNoZSogPSBudWxscHRyKSBvdmVycmlkZSB7IH0KKyAgICBib29sIGlzRGV0
YWNoZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorCisgICAgYm9vbCBpc0Fj
Y2Vzc2liaWxpdHlPYmplY3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAg
IGJvb2wgaXNBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgYm9vbCBpc0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNBY2Nlc3NpYmlsaXR5U2Nyb2xs
YmFyKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzQWNjZXNz
aWJpbGl0eVNjcm9sbFZpZXcoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAg
IGJvb2wgaXNBY2Nlc3NpYmlsaXR5U1ZHUm9vdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgYm9vbCBpc0FjY2Vzc2liaWxpdHlTVkdFbGVtZW50KCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIGJvb2wgY29udGFpbnNUZXh0KFN0cmluZyAqKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNBdHRhY2htZW50RWxl
bWVudCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc0hlYWRp
bmcoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNMaW5rKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1l
OjpJc0xpbmspOyB9CisgICAgYm9vbCBpc0ltYWdlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
Ym9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc0ltYWdlKTsgfQorICAgIGJvb2wg
aXNJbWFnZU1hcCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBp
c05hdGl2ZUltYWdlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29s
IGlzSW1hZ2VCdXR0b24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJv
b2wgaXNQYXNzd29yZEZpZWxkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICBib29sIGlzQ29udGFpbmVkQnlQYXNzd29yZEZpZWxkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICBBWENvcmVPYmplY3QqIHBhc3N3b3JkRmllbGRPckNvbnRhaW5pbmdQ
YXNzd29yZEZpZWxkKCkgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIGJvb2wgaXNO
YXRpdmVUZXh0Q29udHJvbCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAg
Ym9vbCBpc1NlYXJjaEZpZWxkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICBib29sIGlzV2ViQXJlYSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAg
Ym9vbCBpc0NoZWNrYm94KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBi
b29sIGlzUmFkaW9CdXR0b24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAg
IGJvb2wgaXNOYXRpdmVMaXN0Qm94KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0K
KyAgICBib29sIGlzTGlzdEJveCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Cisg
ICAgYm9vbCBpc0xpc3RCb3hPcHRpb24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsg
fQorICAgIGJvb2wgaXNBdHRhY2htZW50KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0
dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc0F0dGFjaG1lbnQpOyB9CisgICAgYm9vbCBp
c01lZGlhVGltZWxpbmUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJv
b2wgaXNNZW51UmVsYXRlZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAg
Ym9vbCBpc01lbnUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wg
aXNNZW51QmFyKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlz
TWVudUJ1dHRvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBp
c01lbnVJdGVtKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlz
RmlsZVVwbG9hZEJ1dHRvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVW
YWx1ZShBWFByb3BlcnR5TmFtZTo6SXNGaWxlVXBsb2FkQnV0dG9uKTsgfQorICAgIGJvb2wgaXNJ
bnB1dEltYWdlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlz
UHJvZ3Jlc3NJbmRpY2F0b3IoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAg
IGJvb2wgaXNTbGlkZXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJv
b2wgaXNTbGlkZXJUaHVtYigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAg
Ym9vbCBpc0lucHV0U2xpZGVyKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICBib29sIGlzQ29udHJvbCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAg
Ym9vbCBpc0xhYmVsKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29s
IGlzTGlzdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc1Rh
YmxlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzRGF0YVRh
YmxlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzVGFibGVS
b3coKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNUYWJsZUNv
bHVtbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc1RhYmxl
Q2VsbCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc0ZpZWxk
c2V0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzR3JvdXAo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNBUklBVHJlZUdy
aWRSb3coKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNJbWFn
ZU1hcExpbmsoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQ
cm9wZXJ0eU5hbWU6OklzSW1hZ2VNYXBMaW5rKTsgfQorICAgIGJvb2wgaXNNZW51TGlzdCgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc01lbnVMaXN0UG9wdXAo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNNZW51TGlzdE9w
dGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc1NwaW5C
dXR0b24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNOYXRp
dmVTcGluQnV0dG9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29s
IGlzU3BpbkJ1dHRvblBhcnQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAg
IGJvb2wgaXNNb2NrT2JqZWN0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICBib29sIGlzTWVkaWFDb250cm9sTGFiZWwoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29s
QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzTWVkaWFDb250cm9sTGFiZWwpOyB9Cisg
ICAgYm9vbCBpc01lZGlhT2JqZWN0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0K
KyAgICBib29sIGlzU3dpdGNoKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICBib29sIGlzVG9nZ2xlQnV0dG9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0K
KyAgICBib29sIGlzVGV4dENvbnRyb2woKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsg
fQorICAgIGJvb2wgaXNBUklBVGV4dENvbnRyb2woKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBm
YWxzZTsgfQorICAgIGJvb2wgaXNOb25OYXRpdmVUZXh0Q29udHJvbCgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc1RhYkxpc3QoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNUYWJJdGVtKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzUmFkaW9Hcm91cCgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc0NvbWJvQm94KCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzVHJlZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNUcmVlKTsgfQorICAgIGJvb2wg
aXNUcmVlR3JpZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBp
c1RyZWVJdGVtKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFY
UHJvcGVydHlOYW1lOjpJc1RyZWVJdGVtKTsgfQorICAgIGJvb2wgaXNTY3JvbGxiYXIoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6Oklz
U2Nyb2xsYmFyKTsgfQorICAgIGJvb2wgaXNCdXR0b24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBmYWxzZTsgfQorICAgIGJvb2wgaXNMaXN0SXRlbSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgYm9vbCBpc0NoZWNrYm94T3JSYWRpbygpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc1Njcm9sbFZpZXcoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNDYW52YXMoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNQb3BVcEJ1dHRvbigpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc0Jsb2NrcXVvdGUoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNMYW5kbWFyaygpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc0NvbG9yV2VsbCgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc1JhbmdlQ29udHJvbCgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc01ldGVyKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzU3BsaXR0ZXIoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNUb29sYmFyKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICBib29sIGlzU3R5bGVGb3JtYXRHcm91cCgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc0ZpZ3VyZUVsZW1lbnQoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNLZXlib2FyZEZvY3VzYWJsZSgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc1N1bW1hcnkoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNPdXRwdXQoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorCisgICAgYm9vbCBpc0NoZWNrZWQoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNFbmFibGVkKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzU2VsZWN0ZWQoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNGb2N1c2VkKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzSG92ZXJlZCgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc0luZGV0ZXJtaW5hdGUoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNMb2FkZWQoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNNdWx0aVNlbGVjdGFibGUoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNPblNjcmVlbigpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc09mZlNjcmVlbigpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuICFpc09uU2NyZWVuKCk7IH0KKyAgICBib29sIGlzUHJlc3NlZCgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc1VudmlzaXRlZCgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc1Zpc2l0ZWQoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNSZXF1aXJlZCgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBzdXBwb3J0c1JlcXVpcmVkQXR0
cmlidXRlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzTGlu
a2VkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzRXhwYW5k
ZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNWaXNpYmxl
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzQ29sbGFwc2Vk
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2b2lkIHNldElzRXhwYW5k
ZWQoYm9vbCkgb3ZlcnJpZGUgeyB9CisgICAgRmxvYXRSZWN0IHJlbGF0aXZlRnJhbWUoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiByZWN0QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OlJl
bGF0aXZlRnJhbWUpOyB9CisgICAgRmxvYXRSZWN0IGNvbnZlcnRGcmFtZVRvU3BhY2UoY29uc3Qg
RmxvYXRSZWN0JiwgQWNjZXNzaWJpbGl0eUNvbnZlcnNpb25TcGFjZSkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gRmxvYXRSZWN0KCk7IH0KKworICAgIGJvb2wgaXNTZWxlY3RlZE9wdGlvbkFjdGl2
ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICBib29sIGhhc0JvbGRG
b250KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGhhc0l0YWxp
Y0ZvbnQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaGFzTWlz
c3BlbGxpbmcoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIFJlZlB0cjxS
YW5nZT4gZ2V0TWlzc3BlbGxpbmdSYW5nZShSZWZQdHI8UmFuZ2U+IGNvbnN0JiwgQWNjZXNzaWJp
bGl0eVNlYXJjaERpcmVjdGlvbikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQor
ICAgIGJvb2wgaGFzUGxhaW5UZXh0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0K
KyAgICBib29sIGhhc1NhbWVGb250KFJlbmRlck9iamVjdCopIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIGZhbHNlOyB9CisgICAgYm9vbCBoYXNTYW1lRm9udENvbG9yKFJlbmRlck9iamVjdCopIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBoYXNTYW1lU3R5bGUoUmVu
ZGVyT2JqZWN0KikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlz
U3RhdGljVGV4dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBo
YXNVbmRlcmxpbmUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wg
aGFzSGlnaGxpZ2h0aW5nKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKworICAg
IGJvb2wgc3VwcG9ydHNEYXRldGltZUF0dHJpYnV0ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgY29uc3QgQXRvbVN0cmluZyYgZGF0ZXRpbWVBdHRyaWJ1dGVWYWx1ZSgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG51bGxBdG9tKCk7IH0KKworICAgIGJvb2wgY2FuU2V0
Rm9jdXNBdHRyaWJ1dGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJv
b2wgY2FuU2V0VGV4dFJhbmdlQXR0cmlidXRlcygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgYm9vbCBjYW5TZXRWYWx1ZUF0dHJpYnV0ZSgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBjYW5TZXROdW1lcmljVmFsdWUoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgY2FuU2V0U2VsZWN0ZWRBdHRyaWJ1dGUo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgY2FuU2V0U2VsZWN0
ZWRDaGlsZHJlbkF0dHJpYnV0ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Cisg
ICAgYm9vbCBjYW5TZXRFeHBhbmRlZEF0dHJpYnV0ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IGZhbHNlOyB9CisKKyAgICBFbGVtZW50KiBlbGVtZW50KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gbnVsbHB0cjsgfQorICAgIE5vZGUqIG5vZGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBu
dWxscHRyOyB9CisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlcigpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIG51bGxwdHI7IH0KKworICAgIGJvb2wgYWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6
SXNBY2Nlc3NpYmlsaXR5SWdub3JlZCk7IH0KKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0SW5jbHVz
aW9uIGRlZmF1bHRPYmplY3RJbmNsdXNpb24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBBY2Nl
c3NpYmlsaXR5T2JqZWN0SW5jbHVzaW9uOjpEZWZhdWx0QmVoYXZpb3I7IH0KKyAgICBib29sIGFj
Y2Vzc2liaWxpdHlJc0lnbm9yZWRCeURlZmF1bHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBm
YWxzZTsgfQorCisgICAgYm9vbCBpc1Nob3dpbmdWYWxpZGF0aW9uTWVzc2FnZSgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gU3RyaW5nKCk7IH0KKworICAgIHVuc2lnbmVkIGJsb2Nr
cXVvdGVMZXZlbCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0KKyAgICBpbnQgaGVhZGlu
Z0xldmVsKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gMDsgfQorICAgIGludCB0YWJsZUxldmVs
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gMDsgfQorICAgIEFjY2Vzc2liaWxpdHlCdXR0b25T
dGF0ZSBjaGVja2JveE9yUmFkaW9WYWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEFjY2Vz
c2liaWxpdHlCdXR0b25TdGF0ZTo6T2ZmOyB9CisgICAgU3RyaW5nIHZhbHVlRGVzY3JpcHRpb24o
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBTdHJpbmcoKTsgfQorICAgIGZsb2F0IHZhbHVlRm9y
UmFuZ2UoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAwOyB9CisgICAgZmxvYXQgbWF4VmFsdWVG
b3JSYW5nZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0KKyAgICBmbG9hdCBtaW5WYWx1
ZUZvclJhbmdlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gMDsgfQorICAgIGZsb2F0IHN0ZXBW
YWx1ZUZvclJhbmdlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gMDsgfQorICAgIEFYQ29yZU9i
amVjdCogc2VsZWN0ZWRSYWRpb0J1dHRvbigpIG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0K
KyAgICBBWENvcmVPYmplY3QqIHNlbGVjdGVkVGFiSXRlbSgpIG92ZXJyaWRlIHsgcmV0dXJuIG51
bGxwdHI7IH0KKyAgICBBWENvcmVPYmplY3QqIHNlbGVjdGVkTGlzdEl0ZW0oKSBvdmVycmlkZSB7
IHJldHVybiBudWxscHRyOyB9CisgICAgaW50IGxheW91dENvdW50KCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gMDsgfQorICAgIGRvdWJsZSBlc3RpbWF0ZWRMb2FkaW5nUHJvZ3Jlc3MoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiAwOyB9CisKKyAgICBib29sIHN1cHBvcnRzQVJJQU93bnMoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNBY3RpdmVEZXNjZW5k
YW50T2ZGb2N1c2VkQ29udGFpbmVyKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0K
KyAgICB2b2lkIGFyaWFBY3RpdmVEZXNjZW5kYW50UmVmZXJlbmNpbmdFbGVtZW50cyhBY2Nlc3Np
YmlsaXR5Q2hpbGRyZW5WZWN0b3ImKSBjb25zdCBvdmVycmlkZSB7IH0KKyAgICB2b2lkIGFyaWFD
b250cm9sc0VsZW1lbnRzKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYpIGNvbnN0IG92ZXJy
aWRlIHsgfQorICAgIHZvaWQgYXJpYUNvbnRyb2xzUmVmZXJlbmNpbmdFbGVtZW50cyhBY2Nlc3Np
YmlsaXR5Q2hpbGRyZW5WZWN0b3ImKSBjb25zdCBvdmVycmlkZSB7IH0KKyAgICB2b2lkIGFyaWFE
ZXNjcmliZWRCeUVsZW1lbnRzKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYpIGNvbnN0IG92
ZXJyaWRlIHsgfQorICAgIHZvaWQgYXJpYURlc2NyaWJlZEJ5UmVmZXJlbmNpbmdFbGVtZW50cyhB
Y2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImKSBjb25zdCBvdmVycmlkZSB7IH0KKyAgICB2b2lk
IGFyaWFEZXRhaWxzRWxlbWVudHMoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJikgY29uc3Qg
b3ZlcnJpZGUgeyB9CisgICAgdm9pZCBhcmlhRGV0YWlsc1JlZmVyZW5jaW5nRWxlbWVudHMoQWNj
ZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJikgY29uc3Qgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCBh
cmlhRXJyb3JNZXNzYWdlRWxlbWVudHMoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJikgY29u
c3Qgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCBhcmlhRXJyb3JNZXNzYWdlUmVmZXJlbmNpbmdFbGVt
ZW50cyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImKSBjb25zdCBvdmVycmlkZSB7IH0KKyAg
ICB2b2lkIGFyaWFGbG93VG9FbGVtZW50cyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImKSBj
b25zdCBvdmVycmlkZSB7IH0KKyAgICB2b2lkIGFyaWFGbG93VG9SZWZlcmVuY2luZ0VsZW1lbnRz
KEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYpIGNvbnN0IG92ZXJyaWRlIHsgfQorICAgIHZv
aWQgYXJpYUxhYmVsbGVkQnlFbGVtZW50cyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImKSBj
b25zdCBvdmVycmlkZSB7IH0KKyAgICB2b2lkIGFyaWFMYWJlbGxlZEJ5UmVmZXJlbmNpbmdFbGVt
ZW50cyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImKSBjb25zdCBvdmVycmlkZSB7IH0KKyAg
ICB2b2lkIGFyaWFPd25zRWxlbWVudHMoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJikgY29u
c3Qgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCBhcmlhT3duc1JlZmVyZW5jaW5nRWxlbWVudHMoQWNj
ZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJikgY29uc3Qgb3ZlcnJpZGUgeyB9CisKKyAgICBib29s
IGhhc1BvcHVwKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBTdHJpbmcg
cG9wdXBWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFN0cmluZygpOyB9CisgICAgYm9v
bCBoYXNEYXRhbGlzdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9v
bCBzdXBwb3J0c0hhc1BvcHVwKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICBib29sIHByZXNzZWRJc1ByZXNlbnQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsg
fQorICAgIGJvb2wgYXJpYUlzTXVsdGlsaW5lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICBTdHJpbmcgaW52YWxpZFN0YXR1cygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IFN0cmluZygpOyB9CisgICAgYm9vbCBzdXBwb3J0c1ByZXNzZWQoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgc3VwcG9ydHNFeHBhbmRlZCgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBzdXBwb3J0c0NoZWNrZWQoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIEFjY2Vzc2liaWxpdHlTb3J0RGlyZWN0aW9u
IHNvcnREaXJlY3Rpb24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBBY2Nlc3NpYmlsaXR5U29y
dERpcmVjdGlvbjo6Tm9uZTsgfQorICAgIGJvb2wgY2FudmFzSGFzRmFsbGJhY2tDb250ZW50KCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIHN1cHBvcnRzUmFuZ2VW
YWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgY29uc3QgQXRvbVN0
cmluZyYgaWRlbnRpZmllckF0dHJpYnV0ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG51bGxB
dG9tKCk7IH0KKyAgICBjb25zdCBBdG9tU3RyaW5nJiBsaW5rUmVsVmFsdWUoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBudWxsQXRvbSgpOyB9CisgICAgdm9pZCBjbGFzc0xpc3QoVmVjdG9yPFN0
cmluZz4mKSBjb25zdCBvdmVycmlkZSB7IH0KKyAgICBTdHJpbmcgcm9sZURlc2NyaXB0aW9uKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gU3RyaW5nKCk7IH0KKyAgICBBY2Nlc3NpYmlsaXR5Q3Vy
cmVudFN0YXRlIGN1cnJlbnRTdGF0ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEFjY2Vzc2li
aWxpdHlDdXJyZW50U3RhdGU6OkZhbHNlOyB9CisgICAgU3RyaW5nIGN1cnJlbnRWYWx1ZSgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIFN0cmluZygpOyB9CisgICAgYm9vbCBzdXBwb3J0c0N1cnJl
bnQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGNvbnN0IFN0cmluZyBr
ZXlTaG9ydGN1dHNWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFN0cmluZygpOyB9CisK
KyAgICAvLyBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiB0aGUgb2JqZWN0IHNob3VsZCBiZSBpZ25v
cmVkIHdoZW4gdGhlcmUncyBhIG1vZGFsIGRpYWxvZyBkaXNwbGF5ZWQuCisgICAgYm9vbCBpZ25v
cmVkRnJvbU1vZGFsUHJlc2VuY2UoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQor
ICAgIGJvb2wgaXNNb2RhbERlc2NlbmRhbnQoTm9kZSopIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgYm9vbCBpc01vZGFsTm9kZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IGZhbHNlOyB9CisKKyAgICBib29sIHN1cHBvcnRzU2V0U2l6ZSgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBzdXBwb3J0c1Bvc0luU2V0KCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBpbnQgc2V0U2l6ZSgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIDA7IH0KKyAgICBpbnQgcG9zSW5TZXQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAw
OyB9CisKKyAgICBib29sIHN1cHBvcnRzQVJJQURyb3BwaW5nKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIHN1cHBvcnRzQVJJQURyYWdnaW5nKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzQVJJQUdyYWJiZWQoKSBvdmVycmlk
ZSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZvaWQgc2V0QVJJQUdyYWJiZWQoYm9vbCkgb3ZlcnJp
ZGUgeyB9CisgICAgVmVjdG9yPFN0cmluZz4gZGV0ZXJtaW5lQVJJQURyb3BFZmZlY3RzKCkgb3Zl
cnJpZGUgeyByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsgfQorCisgICAgQVhDb3JlT2JqZWN0KiBh
Y2Nlc3NpYmlsaXR5SGl0VGVzdChjb25zdCBJbnRQb2ludCYpIGNvbnN0IG92ZXJyaWRlOworICAg
IEFYQ29yZU9iamVjdCogZWxlbWVudEFjY2Vzc2liaWxpdHlIaXRUZXN0KGNvbnN0IEludFBvaW50
JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQorCisgICAgQVhDb3JlT2JqZWN0
KiBmb2N1c2VkVUlFbGVtZW50KCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBBWENvcmVPYmplY3Qq
IGZpcnN0Q2hpbGQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9CisgICAgQVhD
b3JlT2JqZWN0KiBsYXN0Q2hpbGQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9
CisgICAgQVhDb3JlT2JqZWN0KiBwcmV2aW91c1NpYmxpbmcoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBudWxscHRyOyB9CisgICAgQVhDb3JlT2JqZWN0KiBuZXh0U2libGluZygpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICBBWENvcmVPYmplY3QqIG5leHRTaWJsaW5n
VW5pZ25vcmVkKGludCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIEFY
Q29yZU9iamVjdCogcHJldmlvdXNTaWJsaW5nVW5pZ25vcmVkKGludCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gbnVsbHB0cjsgfQorICAgIEFYQ29yZU9iamVjdCogcGFyZW50T2JqZWN0KCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIEFYQ29yZU9iamVjdCogcGFyZW50
T2JqZWN0VW5pZ25vcmVkKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgQVhDb3JlT2JqZWN0KiBwYXJl
bnRPYmplY3RJZkV4aXN0cygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAg
ICB2b2lkIGZpbmRNYXRjaGluZ09iamVjdHMoQWNjZXNzaWJpbGl0eVNlYXJjaENyaXRlcmlhKiwg
QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJikgb3ZlcnJpZGUgeyB9CisgICAgYm9vbCBpc0Rl
c2NlbmRhbnRPZkJhcnJlblBhcmVudCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9
CisgICAgYm9vbCBpc0Rlc2NlbmRhbnRPZlJvbGUoQWNjZXNzaWJpbGl0eVJvbGUpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICBWZWN0b3I8UmVmUHRyPFJhbmdlPj4gZmlu
ZFRleHRSYW5nZXMoQWNjZXNzaWJpbGl0eVNlYXJjaFRleHRDcml0ZXJpYSBjb25zdCYpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIFZlY3RvcjxSZWZQdHI8UmFuZ2U+PigpOyB9CisgICAgVmVjdG9y
PFN0cmluZz4gcGVyZm9ybVRleHRPcGVyYXRpb24oQWNjZXNzaWJpbGl0eVRleHRPcGVyYXRpb24g
Y29uc3QmKSBvdmVycmlkZSB7IHJldHVybiBWZWN0b3I8U3RyaW5nPigpOyB9CisKKyAgICBBWENv
cmVPYmplY3QqIG9ic2VydmFibGVPYmplY3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBudWxs
cHRyOyB9CisgICAgdm9pZCBsaW5rZWRVSUVsZW1lbnRzKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZl
Y3RvciYpIGNvbnN0IG92ZXJyaWRlIHsgfQorICAgIEFYQ29yZU9iamVjdCogdGl0bGVVSUVsZW1l
bnQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9CisgICAgYm9vbCBleHBvc2Vz
VGl0bGVVSUVsZW1lbnQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIEFY
Q29yZU9iamVjdCogY29ycmVzcG9uZGluZ0xhYmVsRm9yQ29udHJvbEVsZW1lbnQoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9CisgICAgQVhDb3JlT2JqZWN0KiBjb3JyZXNwb25k
aW5nQ29udHJvbEZvckxhYmVsRWxlbWVudCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG51bGxw
dHI7IH0KKyAgICBBWENvcmVPYmplY3QqIHNjcm9sbEJhcihBY2Nlc3NpYmlsaXR5T3JpZW50YXRp
b24pIG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KKworICAgIEFjY2Vzc2liaWxpdHlSb2xl
IGFyaWFSb2xlQXR0cmlidXRlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gQWNjZXNzaWJpbGl0
eVJvbGU6OlVua25vd247IH0KKyAgICBib29sIGlzUHJlc2VudGF0aW9uYWxDaGlsZE9mQXJpYVJv
bGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgYXJpYVJvbGVI
YXNQcmVzZW50YXRpb25hbENoaWxkcmVuKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7
IH0KKyAgICBib29sIGluaGVyaXRzUHJlc2VudGF0aW9uYWxSb2xlKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gZmFsc2U7IH0KKworICAgIHZvaWQgYWNjZXNzaWJpbGl0eVRleHQoVmVjdG9yPEFj
Y2Vzc2liaWxpdHlUZXh0PiYpIGNvbnN0IG92ZXJyaWRlIHsgfQorICAgIFN0cmluZyBjb21wdXRl
ZExhYmVsKCkgb3ZlcnJpZGUgeyByZXR1cm4gU3RyaW5nKCk7IH0KKworICAgIHZvaWQgc2V0QWNj
ZXNzaWJsZU5hbWUoY29uc3QgQXRvbVN0cmluZyYpIG92ZXJyaWRlIHsgfQorICAgIGJvb2wgaGFz
QXR0cmlidXRlc1JlcXVpcmVkRm9ySW5jbHVzaW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
ZmFsc2U7IH0KKworICAgIFN0cmluZyBhY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb24oKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBTdHJpbmcoKTsgfQorICAgIFN0cmluZyB0aXRsZSgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIFN0cmluZygpOyB9CisgICAgU3RyaW5nIGhlbHBUZXh0KCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gU3RyaW5nKCk7IH0KKworICAgIGJvb2wgaXNBUklBU3RhdGljVGV4
dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgU3RyaW5nIHN0cmluZ1Zh
bHVlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gU3RyaW5nKCk7IH0KKyAgICBTdHJpbmcgdGV4
dFVuZGVyRWxlbWVudChBY2Nlc3NpYmlsaXR5VGV4dFVuZGVyRWxlbWVudE1vZGUgPSBBY2Nlc3Np
YmlsaXR5VGV4dFVuZGVyRWxlbWVudE1vZGUoKSkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gU3Ry
aW5nKCk7IH0KKyAgICBTdHJpbmcgdGV4dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFN0cmlu
ZygpOyB9CisgICAgaW50IHRleHRMZW5ndGgoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAwOyB9
CisgICAgU3RyaW5nIGFyaWFMYWJlbGVkQnlBdHRyaWJ1dGUoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBTdHJpbmcoKTsgfQorICAgIFN0cmluZyBhcmlhRGVzY3JpYmVkQnlBdHRyaWJ1dGUoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBTdHJpbmcoKTsgfQorICAgIGNvbnN0IFN0cmluZyBwbGFj
ZWhvbGRlclZhbHVlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gU3RyaW5nKCk7IH0KKyAgICBi
b29sIGFjY2Vzc2libGVOYW1lRGVyaXZlc0Zyb21Db250ZW50KCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gZmFsc2U7IH0KKworICAgIFN0cmluZyBleHBhbmRlZFRleHRWYWx1ZSgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIFN0cmluZygpOyB9CisgICAgYm9vbCBzdXBwb3J0c0V4cGFuZGVkVGV4
dFZhbHVlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIHZvaWQgZWxl
bWVudHNGcm9tQXR0cmlidXRlKFZlY3RvcjxFbGVtZW50Kj4mLCBjb25zdCBRdWFsaWZpZWROYW1l
JikgY29uc3Qgb3ZlcnJpZGUgeyB9CisKKyAgICB2b2lkIGNvbG9yVmFsdWUoaW50JiwgaW50Jiwg
aW50JikgY29uc3Qgb3ZlcnJpZGUgeyB9CisKKyAgICBBY2Nlc3NpYmlsaXR5Um9sZSByb2xlVmFs
dWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5Um9s
ZT4oaW50QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OlJvbGVWYWx1ZSkpOyB9CisKKyAg
ICBBWE9iamVjdENhY2hlKiBheE9iamVjdENhY2hlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
bnVsbHB0cjsgfQorCisgICAgRWxlbWVudCogYW5jaG9yRWxlbWVudCgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICBib29sIHN1cHBvcnRzUHJlc3NBY3Rpb24oKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIEVsZW1lbnQqIGFjdGlvbkVsZW1lbnQo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9CisgICAgTGF5b3V0UmVjdCBib3Vu
ZGluZ0JveFJlY3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBMYXlvdXRSZWN0KCk7IH0KKyAg
ICBJbnRSZWN0IHBpeGVsU25hcHBlZEJvdW5kaW5nQm94UmVjdCgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIEludFJlY3QoKTsgfQorICAgIExheW91dFJlY3QgZWxlbWVudFJlY3QoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBMYXlvdXRSZWN0KCk7IH0KKyAgICBMYXlvdXRTaXplIHNpemUoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBMYXlvdXRTaXplKCk7IH0KKyAgICBJbnRQb2ludCBjbGlj
a1BvaW50KCkgb3ZlcnJpZGUgeyByZXR1cm4gSW50UG9pbnQoKTsgfQorICAgIFBhdGggZWxlbWVu
dFBhdGgoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBQYXRoKCk7IH0KKyAgICBib29sIHN1cHBv
cnRzUGF0aCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICBUZXh0SXRl
cmF0b3JCZWhhdmlvciB0ZXh0SXRlcmF0b3JCZWhhdmlvckZvclRleHRSYW5nZSgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIFRleHRJdGVyYXRvckRlZmF1bHRCZWhhdmlvcjsgfQorICAgIFBsYWlu
VGV4dFJhbmdlIHNlbGVjdGVkVGV4dFJhbmdlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gUGxh
aW5UZXh0UmFuZ2UoKTsgfQorICAgIHVuc2lnbmVkIHNlbGVjdGlvblN0YXJ0KCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gMDsgfQorICAgIHVuc2lnbmVkIHNlbGVjdGlvbkVuZCgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIDA7IH0KKworICAgIFVSTCB1cmwoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBVUkwoKTsgfQorICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gVmlzaWJsZVNlbGVjdGlvbigpOyB9CisgICAgU3RyaW5nIHNlbGVjdGVk
VGV4dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFN0cmluZygpOyB9CisgICAgY29uc3QgQXRv
bVN0cmluZyYgYWNjZXNzS2V5KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbEF0b20oKTsg
fQorICAgIGNvbnN0IFN0cmluZyYgYWN0aW9uVmVyYigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IG51bGxBdG9tKCk7IH0KKyAgICBXaWRnZXQqIHdpZGdldCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIG51bGxwdHI7IH0KKyAgICBXaWRnZXQqIHdpZGdldEZvckF0dGFjaG1lbnRWaWV3KCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIFBhZ2UqIHBhZ2UoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9CisgICAgRG9jdW1lbnQqIGRvY3VtZW50KCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIEZyYW1lVmlldyogZG9jdW1lbnRG
cmFtZVZpZXcoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9CisgICAgRnJhbWUq
IGZyYW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIEZyYW1lKiBt
YWluRnJhbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9CisgICAgRG9jdW1l
bnQqIHRvcERvY3VtZW50KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQorICAg
IFNjcm9sbFZpZXcqIHNjcm9sbFZpZXdBbmNlc3RvcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IG51bGxwdHI7IH0KKyAgICBTdHJpbmcgbGFuZ3VhZ2UoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBTdHJpbmcoKTsgfQorICAgIHVuc2lnbmVkIGhpZXJhcmNoaWNhbExldmVsKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gMDsgfQorCisgICAgdm9pZCBzZXRGb2N1c2VkKGJvb2wpIG92ZXJyaWRl
IHsgfQorICAgIHZvaWQgc2V0U2VsZWN0ZWRUZXh0KGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlIHsg
fQorICAgIHZvaWQgc2V0U2VsZWN0ZWRUZXh0UmFuZ2UoY29uc3QgUGxhaW5UZXh0UmFuZ2UmKSBv
dmVycmlkZSB7IH0KKyAgICB2b2lkIHNldFZhbHVlKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlIHsg
fQorICAgIGJvb2wgcmVwbGFjZVRleHRJblJhbmdlKGNvbnN0IFN0cmluZyYsIGNvbnN0IFBsYWlu
VGV4dFJhbmdlJikgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGluc2VydFRl
eHQoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIHZvaWQg
c2V0VmFsdWUoZmxvYXQpIG92ZXJyaWRlIHsgfQorICAgIHZvaWQgc2V0U2VsZWN0ZWQoYm9vbCkg
b3ZlcnJpZGUgeyB9CisgICAgdm9pZCBzZXRTZWxlY3RlZFJvd3MoQWNjZXNzaWJpbGl0eUNoaWxk
cmVuVmVjdG9yJikgb3ZlcnJpZGUgeyB9CisKKyAgICB2b2lkIG1ha2VSYW5nZVZpc2libGUoY29u
c3QgUGxhaW5UZXh0UmFuZ2UmKSBvdmVycmlkZSB7IH0KKyAgICBib29sIHByZXNzKCkgb3ZlcnJp
ZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIHBlcmZvcm1EZWZhdWx0QWN0aW9uKCkgb3Zl
cnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIEFjY2Vzc2liaWxpdHlPcmllbnRhdGlvbiBv
cmllbnRhdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEFjY2Vzc2liaWxpdHlPcmllbnRh
dGlvbjo6VW5kZWZpbmVkOyB9CisgICAgdm9pZCBpbmNyZW1lbnQoKSBvdmVycmlkZSB7IH0KKyAg
ICB2b2lkIGRlY3JlbWVudCgpIG92ZXJyaWRlIHsgfQorCisgICAgdm9pZCBjaGlsZHJlbkNoYW5n
ZWQoKSBvdmVycmlkZSB7IH0KKyAgICB2b2lkIHRleHRDaGFuZ2VkKCkgb3ZlcnJpZGUgeyB9Cisg
ICAgdm9pZCB1cGRhdGVBY2Nlc3NpYmlsaXR5Um9sZSgpIG92ZXJyaWRlIHsgfQorICAgIGNvbnN0
IEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgY2hpbGRyZW4oYm9vbCB1cGRhdGVDaGlsZHJl
bklmTmVlZGVkID0gdHJ1ZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBhZGRDaGlsZHJlbigpIG92ZXJy
aWRlIHsgfQorICAgIHZvaWQgYWRkQ2hpbGQoQVhDb3JlT2JqZWN0Kikgb3ZlcnJpZGUgeyB9Cisg
ICAgdm9pZCBpbnNlcnRDaGlsZChBWENvcmVPYmplY3QqLCB1bnNpZ25lZCkgb3ZlcnJpZGUgeyB9
CisKKyAgICBib29sIHNob3VsZElnbm9yZUF0dHJpYnV0ZVJvbGUoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBmYWxzZTsgfQorCisgICAgYm9vbCBjYW5IYXZlQ2hpbGRyZW4oKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaGFzQ2hpbGRyZW4oKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZvaWQgdXBkYXRlQ2hpbGRyZW5JZk5lY2Vzc2Fy
eSgpIG92ZXJyaWRlIHsgfQorICAgIHZvaWQgc2V0TmVlZHNUb1VwZGF0ZUNoaWxkcmVuKCkgb3Zl
cnJpZGUgeyB9CisgICAgdm9pZCBzZXROZWVkc1RvVXBkYXRlU3VidHJlZSgpIG92ZXJyaWRlIHsg
fTsKKyAgICB2b2lkIGNsZWFyQ2hpbGRyZW4oKSBvdmVycmlkZSB7IH0KKyAgICBib29sIG5lZWRz
VG9VcGRhdGVDaGlsZHJlbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAg
dm9pZCBkZXRhY2hGcm9tUGFyZW50KCkgb3ZlcnJpZGUgeyB9CisgICAgYm9vbCBpc0RldGFjaGVk
RnJvbVBhcmVudCgpIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICBib29sIGNhbkhh
dmVTZWxlY3RlZENoaWxkcmVuKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICB2b2lkIHNlbGVjdGVkQ2hpbGRyZW4oQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJikgb3Zl
cnJpZGUgeyB9CisgICAgdm9pZCB2aXNpYmxlQ2hpbGRyZW4oQWNjZXNzaWJpbGl0eUNoaWxkcmVu
VmVjdG9yJikgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCB0YWJDaGlsZHJlbihBY2Nlc3NpYmlsaXR5
Q2hpbGRyZW5WZWN0b3ImKSBvdmVycmlkZSB7IH0KKyAgICBib29sIHNob3VsZEZvY3VzQWN0aXZl
RGVzY2VuZGFudCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgQVhDb3Jl
T2JqZWN0KiBhY3RpdmVEZXNjZW5kYW50KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0
cjsgfQorICAgIHZvaWQgaGFuZGxlQWN0aXZlRGVzY2VuZGFudENoYW5nZWQoKSBvdmVycmlkZSB7
IH0KKyAgICB2b2lkIGhhbmRsZUFyaWFFeHBhbmRlZENoYW5nZWQoKSBvdmVycmlkZSB7IH0KKyAg
ICBib29sIGlzRGVzY2VuZGFudE9mT2JqZWN0KGNvbnN0IEFYQ29yZU9iamVjdCopIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc0FuY2VzdG9yT2ZPYmplY3QoY29u
c3QgQVhDb3JlT2JqZWN0KikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBB
WENvcmVPYmplY3QqIGZpcnN0QW5vbnltb3VzQmxvY2tDaGlsZCgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIG51bGxwdHI7IH0KKworICAgIGJvb2wgaGFzQXR0cmlidXRlKGNvbnN0IFF1YWxpZmll
ZE5hbWUmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGNvbnN0IEF0b21T
dHJpbmcmIGdldEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJikgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gbnVsbEF0b20oKTsgfQorICAgIGJvb2wgaGFzVGFnTmFtZShjb25zdCBRdWFsaWZp
ZWROYW1lJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIFZpc2libGVQ
b3NpdGlvblJhbmdlIHZpc2libGVQb3NpdGlvblJhbmdlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2UoKTsgfQorICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHZp
c2libGVQb3NpdGlvblJhbmdlRm9yTGluZSh1bnNpZ25lZCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2UoKTsgfQorICAgIFJlZlB0cjxSYW5nZT4gZWxlbWVudFJh
bmdlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIFZpc2libGVQb3Np
dGlvblJhbmdlIHZpc2libGVQb3NpdGlvblJhbmdlRm9yVW5vcmRlcmVkUG9zaXRpb25zKGNvbnN0
IFZpc2libGVQb3NpdGlvbiYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKCk7IH0KKyAgICBWaXNpYmxlUG9zaXRpb25S
YW5nZSBwb3NpdGlvbk9mTGVmdFdvcmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJikgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2UoKTsgfQorICAgIFZpc2libGVQb3Np
dGlvblJhbmdlIHBvc2l0aW9uT2ZSaWdodFdvcmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJikgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2UoKTsgfQorICAgIFZpc2li
bGVQb3NpdGlvblJhbmdlIGxlZnRMaW5lVmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2Uo
KTsgfQorICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHJpZ2h0TGluZVZpc2libGVQb3NpdGlvblJh
bmdlKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFZpc2li
bGVQb3NpdGlvblJhbmdlKCk7IH0KKyAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSBzZW50ZW5jZUZv
clBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IFZpc2libGVQb3NpdGlvblJhbmdlKCk7IH0KKyAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSBwYXJh
Z3JhcGhGb3JQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBWaXNpYmxlUG9zaXRpb25SYW5nZSgpOyB9CisgICAgVmlzaWJsZVBvc2l0aW9uUmFu
Z2Ugc3R5bGVSYW5nZUZvclBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKCk7IH0KKyAgICBWaXNpYmxlUG9z
aXRpb25SYW5nZSB2aXNpYmxlUG9zaXRpb25SYW5nZUZvclJhbmdlKGNvbnN0IFBsYWluVGV4dFJh
bmdlJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2UoKTsgfQor
ICAgIFZpc2libGVQb3NpdGlvblJhbmdlIGxpbmVSYW5nZUZvclBvc2l0aW9uKGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdl
KCk7IH0KKworICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2VGb3JQbGFpblRleHRSYW5nZShjb25zdCBQ
bGFpblRleHRSYW5nZSYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KKworICAg
IFN0cmluZyBzdHJpbmdGb3JSYW5nZShSZWZQdHI8UmFuZ2U+KSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBTdHJpbmcoKTsgfQorICAgIEludFJlY3QgYm91bmRzRm9yVmlzaWJsZVBvc2l0aW9uUmFu
Z2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uUmFuZ2UmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBJ
bnRSZWN0KCk7IH0KKyAgICBJbnRSZWN0IGJvdW5kc0ZvclJhbmdlKGNvbnN0IFJlZlB0cjxSYW5n
ZT4pIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEludFJlY3QoKTsgfQorICAgIGludCBsZW5ndGhG
b3JWaXNpYmxlUG9zaXRpb25SYW5nZShjb25zdCBWaXNpYmxlUG9zaXRpb25SYW5nZSYpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0KKyAgICB2b2lkIHNldFNlbGVjdGVkVmlzaWJsZVBvc2l0
aW9uUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uUmFuZ2UmKSBjb25zdCBvdmVycmlkZSB7IH0K
KworICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb25Gb3JCb3VuZHMoY29uc3QgSW50
UmVjdCYsIEFjY2Vzc2liaWxpdHlWaXNpYmxlUG9zaXRpb25Gb3JCb3VuZHMpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOyB9CisgICAgVmlzaWJsZVBvc2l0aW9uIHZp
c2libGVQb3NpdGlvbkZvclBvaW50KGNvbnN0IEludFBvaW50JikgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7IH0KKyAgICBWaXNpYmxlUG9zaXRpb24gbmV4dFZpc2li
bGVQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBWaXNpYmxlUG9zaXRpb24oKTsgfQorICAgIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c1Zpc2li
bGVQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBWaXNpYmxlUG9zaXRpb24oKTsgfQorICAgIFZpc2libGVQb3NpdGlvbiBuZXh0V29yZEVuZChj
b25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBWaXNpYmxlUG9z
aXRpb24oKTsgfQorICAgIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c1dvcmRTdGFydChjb25zdCBW
aXNpYmxlUG9zaXRpb24mKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBWaXNpYmxlUG9zaXRpb24o
KTsgfQorICAgIFZpc2libGVQb3NpdGlvbiBuZXh0TGluZUVuZFBvc2l0aW9uKGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOyB9
CisgICAgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzTGluZVN0YXJ0UG9zaXRpb24oY29uc3QgVmlz
aWJsZVBvc2l0aW9uJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7
IH0KKyAgICBWaXNpYmxlUG9zaXRpb24gbmV4dFNlbnRlbmNlRW5kUG9zaXRpb24oY29uc3QgVmlz
aWJsZVBvc2l0aW9uJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7
IH0KKyAgICBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXNTZW50ZW5jZVN0YXJ0UG9zaXRpb24oY29u
c3QgVmlzaWJsZVBvc2l0aW9uJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gVmlzaWJsZVBvc2l0
aW9uKCk7IH0KKyAgICBWaXNpYmxlUG9zaXRpb24gbmV4dFBhcmFncmFwaEVuZFBvc2l0aW9uKGNv
bnN0IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFZpc2libGVQb3Np
dGlvbigpOyB9CisgICAgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzUGFyYWdyYXBoU3RhcnRQb3Np
dGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBWaXNp
YmxlUG9zaXRpb24oKTsgfQorICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb25Gb3JJ
bmRleCh1bnNpZ25lZCwgYm9vbCAvKmxhc3RJbmRleE9LICovKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBWaXNpYmxlUG9zaXRpb24oKTsgfQorCisgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQ
b3NpdGlvbkZvckluZGV4KGludCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gVmlzaWJsZVBvc2l0
aW9uKCk7IH0KKyAgICBpbnQgaW5kZXhGb3JWaXNpYmxlUG9zaXRpb24oY29uc3QgVmlzaWJsZVBv
c2l0aW9uJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gMDsgfQorCisgICAgQVhDb3JlT2JqZWN0
KiBhY2Nlc3NpYmlsaXR5T2JqZWN0Rm9yUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJikg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIGludCBsaW5lRm9yUG9zaXRp
b24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gMDsgfQor
ICAgIFBsYWluVGV4dFJhbmdlIHBsYWluVGV4dFJhbmdlRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2Uo
Y29uc3QgVmlzaWJsZVBvc2l0aW9uUmFuZ2UmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBQbGFp
blRleHRSYW5nZSgpOyB9CisgICAgaW50IGluZGV4KGNvbnN0IFZpc2libGVQb3NpdGlvbiYpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0KKworICAgIHZvaWQgbGluZUJyZWFrcyhWZWN0b3I8
aW50PiYpIGNvbnN0IG92ZXJyaWRlIHsgfQorICAgIFBsYWluVGV4dFJhbmdlIGRvQVhSYW5nZUZv
ckxpbmUodW5zaWduZWQpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFBsYWluVGV4dFJhbmdlKCk7
IH0KKyAgICBQbGFpblRleHRSYW5nZSBkb0FYUmFuZ2VGb3JQb3NpdGlvbihjb25zdCBJbnRQb2lu
dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFBsYWluVGV4dFJhbmdlKCk7IH0KKyAgICBQbGFp
blRleHRSYW5nZSBkb0FYUmFuZ2VGb3JJbmRleCh1bnNpZ25lZCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gUGxhaW5UZXh0UmFuZ2UoKTsgfQorICAgIFBsYWluVGV4dFJhbmdlIGRvQVhTdHlsZVJh
bmdlRm9ySW5kZXgodW5zaWduZWQpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFBsYWluVGV4dFJh
bmdlKCk7IH0KKworICAgIFN0cmluZyBkb0FYU3RyaW5nRm9yUmFuZ2UoY29uc3QgUGxhaW5UZXh0
UmFuZ2UmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBTdHJpbmcoKTsgfQorICAgIEludFJlY3Qg
ZG9BWEJvdW5kc0ZvclJhbmdlKGNvbnN0IFBsYWluVGV4dFJhbmdlJikgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gSW50UmVjdCgpOyB9CisgICAgSW50UmVjdCBkb0FYQm91bmRzRm9yUmFuZ2VVc2lu
Z0NoYXJhY3Rlck9mZnNldChjb25zdCBQbGFpblRleHRSYW5nZSYpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIEludFJlY3QoKTsgfQorCisgICAgdW5zaWduZWQgZG9BWExpbmVGb3JJbmRleCh1bnNp
Z25lZCkgb3ZlcnJpZGUgeyByZXR1cm4gMDsgfQorCisgICAgU3RyaW5nIGNvbXB1dGVkUm9sZVN0
cmluZygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFN0cmluZygpOyB9CisKKyAgICAvLyBNU0FB
CisgICAgU3RyaW5nIHN0cmluZ1ZhbHVlRm9yTVNBQSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IFN0cmluZygpOyB9CisgICAgU3RyaW5nIHN0cmluZ1JvbGVGb3JNU0FBKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gU3RyaW5nKCk7IH0KKyAgICBTdHJpbmcgbmFtZUZvck1TQUEoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBTdHJpbmcoKTsgfQorICAgIFN0cmluZyBkZXNjcmlwdGlvbkZvck1T
QUEoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBTdHJpbmcoKTsgfQorICAgIEFjY2Vzc2liaWxp
dHlSb2xlIHJvbGVWYWx1ZUZvck1TQUEoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBBY2Nlc3Np
YmlsaXR5Um9sZTo6VW5rbm93bjsgfQorCisgICAgU3RyaW5nIHBhc3N3b3JkRmllbGRWYWx1ZSgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFN0cmluZygpOyB9CisgICAgYm9vbCBpc1ZhbHVlQXV0
b2ZpbGxlZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc1Zh
bHVlQXV0b2ZpbGxBdmFpbGFibGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQor
ICAgIEF1dG9GaWxsQnV0dG9uVHlwZSB2YWx1ZUF1dG9maWxsQnV0dG9uVHlwZSgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIEF1dG9GaWxsQnV0dG9uVHlwZTo6Tm9uZTsgfQorCisgICAgdm9pZCBh
cmlhVHJlZVJvd3MoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJikgb3ZlcnJpZGUgeyB9Cisg
ICAgdm9pZCBhcmlhVHJlZUl0ZW1EaXNjbG9zZWRSb3dzKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZl
Y3RvciYpIG92ZXJyaWRlIHsgfQorICAgIHZvaWQgYXJpYVRyZWVJdGVtQ29udGVudChBY2Nlc3Np
YmlsaXR5Q2hpbGRyZW5WZWN0b3ImKSBvdmVycmlkZSB7IH0KKworICAgIGJvb2wgc3VwcG9ydHNM
aXZlUmVnaW9uKGJvb2wgPSB0cnVlKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQor
ICAgIGJvb2wgaXNJbnNpZGVMaXZlUmVnaW9uKGJvb2wgPSB0cnVlKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBmYWxzZTsgfQorICAgIEFYQ29yZU9iamVjdCogbGl2ZVJlZ2lvbkFuY2VzdG9yKGJv
b2wgPSB0cnVlKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9CisgICAgY29uc3Qg
U3RyaW5nIGxpdmVSZWdpb25TdGF0dXMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBTdHJpbmco
KTsgfQorICAgIGNvbnN0IFN0cmluZyBsaXZlUmVnaW9uUmVsZXZhbnQoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBTdHJpbmcoKTsgfQorICAgIGJvb2wgbGl2ZVJlZ2lvbkF0b21pYygpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc0J1c3koKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBmYWxzZTsgfQorCisgICAgYm9vbCBoYXNDb250ZW50RWRpdGFibGVBdHRy
aWJ1dGVTZXQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorCisgICAgYm9vbCBz
dXBwb3J0c1JlYWRPbmx5KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBT
dHJpbmcgcmVhZE9ubHlWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFN0cmluZygpOyB9
CisKKyAgICBib29sIHN1cHBvcnRzQXV0b0NvbXBsZXRlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICBTdHJpbmcgYXV0b0NvbXBsZXRlVmFsdWUoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBTdHJpbmcoKTsgfQorCisgICAgYm9vbCBzdXBwb3J0c0FSSUFBdHRyaWJ1dGVz
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIE9wdGlvblNldDxTcGVh
a0FzPiBzcGVha0FzUHJvcGVydHkoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBPcHRpb25TZXQ8
U3BlYWtBcz4oKTsgfQorCisgICAgdm9pZCBzY3JvbGxUb01ha2VWaXNpYmxlKCkgY29uc3Qgb3Zl
cnJpZGUgeyB9CisgICAgdm9pZCBzY3JvbGxUb01ha2VWaXNpYmxlV2l0aFN1YkZvY3VzKGNvbnN0
IEludFJlY3QmKSBjb25zdCBvdmVycmlkZSB7IH0KKyAgICB2b2lkIHNjcm9sbFRvR2xvYmFsUG9p
bnQoY29uc3QgSW50UG9pbnQmKSBjb25zdCBvdmVycmlkZSB7IH0KKworICAgIGJvb2wgc2Nyb2xs
QnlQYWdlKFNjcm9sbEJ5UGFnZURpcmVjdGlvbikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICBJbnRQb2ludCBzY3JvbGxQb3NpdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIEludFBvaW50KCk7IH0KKyAgICBJbnRTaXplIHNjcm9sbENvbnRlbnRzU2l6ZSgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIEludFNpemUoKTsgfQorICAgIEludFJlY3Qgc2Nyb2xsVmlzaWJs
ZUNvbnRlbnRSZWN0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gSW50UmVjdCgpOyB9CisgICAg
dm9pZCBzY3JvbGxUb01ha2VWaXNpYmxlKGNvbnN0IFNjcm9sbFJlY3RUb1Zpc2libGVPcHRpb25z
JikgY29uc3Qgb3ZlcnJpZGUgeyB9CisKKyAgICBib29sIGxhc3RLbm93bklzSWdub3JlZFZhbHVl
KCkgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2b2lkIHNldExhc3RLbm93bklzSWdu
b3JlZFZhbHVlKGJvb2wpIG92ZXJyaWRlIHsgfQorCisgICAgdm9pZCBub3RpZnlJZklnbm9yZWRW
YWx1ZUNoYW5nZWQoKSBvdmVycmlkZSB7IH0KKworICAgIGJvb2wgaXNNYXRoRWxlbWVudCgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc01hdGhGcmFjdGlvbigp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc01hdGhGZW5jZWQo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNNYXRoU3Vic2Ny
aXB0U3VwZXJzY3JpcHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJv
b2wgaXNNYXRoUm93KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29s
IGlzTWF0aFVuZGVyT3ZlcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAg
Ym9vbCBpc01hdGhSb290KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBi
b29sIGlzTWF0aFNxdWFyZVJvb3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQor
ICAgIGJvb2wgaXNNYXRoVGV4dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Cisg
ICAgYm9vbCBpc01hdGhOdW1iZXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQor
ICAgIGJvb2wgaXNNYXRoT3BlcmF0b3IoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsg
fQorICAgIGJvb2wgaXNNYXRoRmVuY2VPcGVyYXRvcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgYm9vbCBpc01hdGhTZXBhcmF0b3JPcGVyYXRvcigpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc01hdGhJZGVudGlmaWVyKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzTWF0aFRhYmxlKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzTWF0aFRhYmxlUm93KCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzTWF0aFRhYmxlQ2VsbCgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc01hdGhNdWx0aXNj
cmlwdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc01hdGhU
b2tlbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc01hdGhT
Y3JpcHRPYmplY3QoQWNjZXNzaWJpbGl0eU1hdGhTY3JpcHRPYmplY3RUeXBlKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNNYXRoTXVsdGlzY3JpcHRPYmplY3Qo
QWNjZXNzaWJpbGl0eU1hdGhNdWx0aXNjcmlwdE9iamVjdFR5cGUpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIGZhbHNlOyB9CisKKyAgICBBWENvcmVPYmplY3QqIG1hdGhSYWRpY2FuZE9iamVjdCgp
IG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICBBWENvcmVPYmplY3QqIG1hdGhSb290
SW5kZXhPYmplY3QoKSBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9CisKKyAgICBBWENvcmVP
YmplY3QqIG1hdGhVbmRlck9iamVjdCgpIG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAg
ICBBWENvcmVPYmplY3QqIG1hdGhPdmVyT2JqZWN0KCkgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0
cjsgfQorCisgICAgQVhDb3JlT2JqZWN0KiBtYXRoTnVtZXJhdG9yT2JqZWN0KCkgb3ZlcnJpZGUg
eyByZXR1cm4gbnVsbHB0cjsgfQorICAgIEFYQ29yZU9iamVjdCogbWF0aERlbm9taW5hdG9yT2Jq
ZWN0KCkgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQorCisgICAgQVhDb3JlT2JqZWN0KiBt
YXRoQmFzZU9iamVjdCgpIG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICBBWENvcmVP
YmplY3QqIG1hdGhTdWJzY3JpcHRPYmplY3QoKSBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9
CisgICAgQVhDb3JlT2JqZWN0KiBtYXRoU3VwZXJzY3JpcHRPYmplY3QoKSBvdmVycmlkZSB7IHJl
dHVybiBudWxscHRyOyB9CisKKyAgICBTdHJpbmcgbWF0aEZlbmNlZE9wZW5TdHJpbmcoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBTdHJpbmcoKTsgfQorICAgIFN0cmluZyBtYXRoRmVuY2VkQ2xv
c2VTdHJpbmcoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBTdHJpbmcoKTsgfQorICAgIGludCBt
YXRoTGluZVRoaWNrbmVzcygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0KKyAgICBib29s
IGlzQW5vbnltb3VzTWF0aE9wZXJhdG9yKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7
IH0KKworICAgIHZvaWQgbWF0aFByZXNjcmlwdHMoQWNjZXNzaWJpbGl0eU1hdGhNdWx0aXNjcmlw
dFBhaXJzJikgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCBtYXRoUG9zdHNjcmlwdHMoQWNjZXNzaWJp
bGl0eU1hdGhNdWx0aXNjcmlwdFBhaXJzJikgb3ZlcnJpZGUgeyB9CisKKyAgICBib29sIGlzQVhI
aWRkZW4oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNET01I
aWRkZW4oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNIaWRk
ZW4oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorCisgICAgQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXIqIHdyYXBwZXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3dyYXBw
ZXIuZ2V0KCk7IH0KKyAgICB2b2lkIHNldFdyYXBwZXIoQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXIqIHdyYXBwZXIpIG92ZXJyaWRlIHsgbV93cmFwcGVyID0gd3JhcHBlcjsgfQorCisgICAgdm9p
ZCBvdmVycmlkZUF0dGFjaG1lbnRQYXJlbnQoQVhDb3JlT2JqZWN0Kikgb3ZlcnJpZGUgeyB9CisK
KyAgICBib29sIGFjY2Vzc2liaWxpdHlJZ25vcmVBdHRhY2htZW50KCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gZmFsc2U7IH0KKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0SW5jbHVzaW9uIGFjY2Vz
c2liaWxpdHlQbGF0Zm9ybUluY2x1ZGVzT2JqZWN0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
QWNjZXNzaWJpbGl0eU9iamVjdEluY2x1c2lvbjo6RGVmYXVsdEJlaGF2aW9yOyB9CisKKyNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQorICAgIGludCBhY2Nlc3NpYmlsaXR5UGFzc3dvcmRGaWVsZExl
bmd0aCgpIG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0KKyAgICBib29sIGhhc1RvdWNoRXZlbnRMaXN0
ZW5lcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc0lucHV0
VHlwZVBvcHVwQnV0dG9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyNlbmRp
ZgorCisgICAgdm9pZCB1cGRhdGVCYWNraW5nU3RvcmUoKSBvdmVycmlkZTsKKworI2lmIFBMQVRG
T1JNKENPQ09BKQorICAgIGJvb2wgcHJldmVudEtleWJvYXJkRE9NRXZlbnREaXNwYXRjaCgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdm9pZCBzZXRQcmV2ZW50S2V5Ym9h
cmRET01FdmVudERpc3BhdGNoKGJvb2wpIG92ZXJyaWRlIHsgfQorICAgIGJvb2wgZmlsZVVwbG9h
ZEJ1dHRvblJldHVybnNWYWx1ZUluVGl0bGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxz
ZTsgfQorICAgIFN0cmluZyBzcGVlY2hIaW50QXR0cmlidXRlVmFsdWUoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBzdHJpbmdBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6U3BlZWNoSGlu
dCk7IH0KKyAgICBTdHJpbmcgZGVzY3JpcHRpb25BdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIHN0cmluZ0F0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpEZXNjcmlw
dGlvbik7IH0KKyAgICBTdHJpbmcgaGVscFRleHRBdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIHN0cmluZ0F0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpIZWxwVGV4
dCk7IH0KKyAgICBTdHJpbmcgdGl0bGVBdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIHN0cmluZ0F0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpUaXRsZSk7IH0KKyNl
bmRpZgorCisjaWYgUExBVEZPUk0oQ09DT0EpICYmICFQTEFURk9STShJT1NfRkFNSUxZKQorICAg
IGJvb2wgY2FyZXRCcm93c2luZ0VuYWJsZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxz
ZTsgfQorICAgIHZvaWQgc2V0Q2FyZXRCcm93c2luZ0VuYWJsZWQoYm9vbCkgb3ZlcnJpZGUgeyB9
CisjZW5kaWYKKworICAgIEFYQ29yZU9iamVjdCogZm9jdXNhYmxlQW5jZXN0b3IoKSBvdmVycmlk
ZSB7IHJldHVybiBudWxscHRyOyB9CisgICAgQVhDb3JlT2JqZWN0KiBlZGl0YWJsZUFuY2VzdG9y
KCkgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIEFYQ29yZU9iamVjdCogaGlnaGVz
dEVkaXRhYmxlQW5jZXN0b3IoKSBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9CisKKyAgICBj
b25zdCBBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldyogYW5jZXN0b3JBY2Nlc3NpYmlsaXR5U2Nyb2xs
Vmlldyhib29sKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9CisKKyAgICB2b2lk
IHNldElzSWdub3JlZEZyb21QYXJlbnREYXRhKEFjY2Vzc2liaWxpdHlJc0lnbm9yZWRGcm9tUGFy
ZW50RGF0YSYpIG92ZXJyaWRlIHsgfTsKKyAgICB2b2lkIGNsZWFySXNJZ25vcmVkRnJvbVBhcmVu
dERhdGEoKSBvdmVycmlkZSB7IH0KKyAgICB2b2lkIHNldElzSWdub3JlZEZyb21QYXJlbnREYXRh
Rm9yQ2hpbGQoQVhDb3JlT2JqZWN0Kikgb3ZlcnJpZGUgeyB9CisKKyAgICB2b2lkIHNldFRyZWVJ
ZGVudGlmaWVyKEFYSXNvbGF0ZWRUcmVlSUQpOworICAgIEFYSXNvbGF0ZWRUcmVlKiB0cmVlKCkg
Y29uc3Q7CisgICAgdm9pZCBzZXRQYXJlbnQoQVhJRCk7CisgICAgdm9pZCBhcHBlbmRDaGlsZChB
WElEKTsKK3ByaXZhdGU6CiAgICAgZW51bSBjbGFzcyBBWFByb3BlcnR5TmFtZSA6IHVpbnQ4X3Qg
ewogICAgICAgICBOb25lID0gMCwKICAgICAgICAgSGVscFRleHQsCkBAIC02OCw1NCArNjU1LDEz
IEBAIHB1YmxpYzoKICAgICAgICAgVGl0bGUsCiAgICAgfTsKIAotICAgIHN0YXRpYyBSZWY8QVhJ
c29sYXRlZFRyZWVOb2RlPiBjcmVhdGUoY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCYpOwotICAg
IHZpcnR1YWwgfkFYSXNvbGF0ZWRUcmVlTm9kZSgpOwotCi0gICAgQVhJRCBpZGVudGlmaWVyKCkg
Y29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9Ci0gICAgCi0gICAgdm9pZCBzZXRQYXJlbnQo
QVhJRCk7CiAgICAgQVhJRCBwYXJlbnQoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudDsgfQogCi0g
ICAgdm9pZCBhcHBlbmRDaGlsZChBWElEKTsKLSAgICBjb25zdCBWZWN0b3I8QVhJRD4mIGNoaWxk
cmVuKCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZHJlbjsgfTsKLQotICAgIEFYSXNvbGF0ZWRUcmVl
KiB0cmVlKCkgY29uc3Q7CiAgICAgQVhJc29sYXRlZFRyZWVJRCB0cmVlSWRlbnRpZmllcigpIGNv
bnN0IHsgcmV0dXJuIG1fdHJlZUlkZW50aWZpZXI7IH0KLSAgICB2b2lkIHNldFRyZWVJZGVudGlm
aWVyKEFYSXNvbGF0ZWRUcmVlSUQpOwogCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXIqIHdyYXBwZXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBt
X3dyYXBwZXIuZ2V0KCk7IH0KLSAgICB2b2lkIHNldFdyYXBwZXIoQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXIqIHdyYXBwZXIpIHsgbV93cmFwcGVyID0gd3JhcHBlcjsgfQotI2VuZGlmCi0KLXBy
b3RlY3RlZDoKICAgICBBWElzb2xhdGVkVHJlZU5vZGUoKSA9IGRlZmF1bHQ7Ci0KLXByaXZhdGU6
Ci0gICAgQVhJc29sYXRlZFRyZWVOb2RlKGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3QmKTsKLSAg
ICB2b2lkIGluaXRpYWxpemVBdHRyaWJ1dGVEYXRhKGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3Qm
KTsKLQotICAgIEFYQ29yZU9iamVjdCogYWNjZXNzaWJpbGl0eUhpdFRlc3QoY29uc3QgSW50UG9p
bnQmKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIHVwZGF0ZUNoaWxkcmVuSWZOZWNlc3Nhcnko
KSBvdmVycmlkZSB7IH0KLQotICAgIGJvb2wgaXNNZWRpYUNvbnRyb2xMYWJlbCgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNNZWRp
YUNvbnRyb2xMYWJlbCk7IH0KLSAgICBib29sIGlzQXR0YWNobWVudCgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNBdHRhY2htZW50
KTsgfQotICAgIEFjY2Vzc2liaWxpdHlSb2xlIHJvbGVWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlSb2xlPihpbnRBdHRyaWJ1dGVWYWx1ZShB
WFByb3BlcnR5TmFtZTo6Um9sZVZhbHVlKSk7IH0KLSAgICBib29sIGlzTGluaygpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNMaW5r
KTsgfQotICAgIGJvb2wgaXNJbWFnZU1hcExpbmsoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBi
b29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzSW1hZ2VNYXBMaW5rKTsgfQotICAg
IGJvb2wgaXNJbWFnZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1
ZShBWFByb3BlcnR5TmFtZTo6SXNJbWFnZSk7IH0KLSAgICBib29sIGlzRmlsZVVwbG9hZEJ1dHRv
bigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5
TmFtZTo6SXNGaWxlVXBsb2FkQnV0dG9uKTsgfQotICAgIGJvb2wgYWNjZXNzaWJpbGl0eUlzSWdu
b3JlZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3Bl
cnR5TmFtZTo6SXNBY2Nlc3NpYmlsaXR5SWdub3JlZCk7IH0KLSAgICBBWENvcmVPYmplY3QqIHBh
cmVudE9iamVjdEludGVyZmFjZVVuaWdub3JlZCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wg
aXNUcmVlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJv
cGVydHlOYW1lOjpJc1RyZWUpOyB9Ci0gICAgYm9vbCBpc1RyZWVJdGVtKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc1RyZWVJdGVt
KTsgfQotICAgIGJvb2wgaXNTY3JvbGxiYXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29s
QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzU2Nyb2xsYmFyKTsgfQotICAgIEZsb2F0
UmVjdCByZWxhdGl2ZUZyYW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gcmVjdEF0dHJpYnV0
ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpSZWxhdGl2ZUZyYW1lKTsgfQotICAgIFN0cmluZyBzcGVl
Y2hIaW50QXR0cmlidXRlVmFsdWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBzdHJpbmdBdHRy
aWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6U3BlZWNoSGludCk7IH0KLSAgICBTdHJpbmcgZGVz
Y3JpcHRpb25BdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0cmluZ0F0
dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpEZXNjcmlwdGlvbik7IH0KLSAgICBTdHJpbmcg
aGVscFRleHRBdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0cmluZ0F0
dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpIZWxwVGV4dCk7IH0KLSAgICBTdHJpbmcgdGl0
bGVBdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0cmluZ0F0dHJpYnV0
ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpUaXRsZSk7IH0KLSAgICBBWENvcmVPYmplY3QqIGZvY3Vz
ZWRVSUVsZW1lbnQoKSBjb25zdCBvdmVycmlkZTsKKyAgICBBWElzb2xhdGVkVHJlZU5vZGUoY29u
c3QgQVhDb3JlT2JqZWN0Jik7CisgICAgdm9pZCBpbml0aWFsaXplQXR0cmlidXRlRGF0YShjb25z
dCBBWENvcmVPYmplY3QmKTsKIAogICAgIHVzaW5nIEF0dHJpYnV0ZVZhbHVlVmFyaWFudCA9IFZh
cmlhbnQ8c3RkOjpudWxscHRyX3QsIFN0cmluZywgYm9vbCwgaW50LCB1bnNpZ25lZCwgZG91Ymxl
LCBPcHRpb25hbDxGbG9hdFJlY3Q+PjsKICAgICB2b2lkIHNldFByb3BlcnR5KEFYUHJvcGVydHlO
YW1lLCBBdHRyaWJ1dGVWYWx1ZVZhcmlhbnQmJiwgYm9vbCBzaG91bGRSZW1vdmUgPSBmYWxzZSk7
CkBAIC0xMjgsMTEgKzY3NCwxMiBAQCBwcml2YXRlOgogICAgIEZsb2F0UmVjdCByZWN0QXR0cmli
dXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWUpIGNvbnN0OwogCiAgICAgQVhJRCBtX3BhcmVudDsKLSAg
ICBBWElEIG1faWRlbnRpZmllcjsKKyAgICBBWElEIG1faWQ7CiAgICAgYm9vbCBtX2luaXRpYWxp
emVkIHsgZmFsc2UgfTsKICAgICBBWElzb2xhdGVkVHJlZUlEIG1fdHJlZUlkZW50aWZpZXI7CiAg
ICAgUmVmUHRyPEFYSXNvbGF0ZWRUcmVlPiBtX2NhY2hlZFRyZWU7Ci0gICAgVmVjdG9yPEFYSUQ+
IG1fY2hpbGRyZW47CisgICAgVmVjdG9yPEFYSUQ+IG1fY2hpbGRyZW5JRHM7CisgICAgVmVjdG9y
PFJlZlB0cjxBWENvcmVPYmplY3Q+PiBtX2NoaWxkcmVuOwogCiAjaWYgUExBVEZPUk0oQ09DT0Ep
CiAgICAgUmV0YWluUHRyPFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyPiBtX3dyYXBwZXI7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BWE9iamVjdENh
Y2hlTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvQVhPYmplY3RDYWNo
ZU1hYy5tbQppbmRleCBjOWE4OTNiYzMwOTk2ZDk5ZmU0NWNiMWI3MjE5ZTM2YWM3M2EwZmRiLi5l
YTRiZDVjZDk1ZTkyMzViY2MyNzFjYmUzYWM2ZmE4ZjEzMzk2OTgxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BWE9iamVjdENhY2hlTWFjLm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FYT2JqZWN0Q2FjaGVNYWMubW0KQEAgLTIz
OCwxNyArMjM4LDcgQEAgdm9pZCBBWE9iamVjdENhY2hlOjpkZXRhY2hXcmFwcGVyKEFjY2Vzc2li
aWxpdHlPYmplY3QqIG9iaiwgQWNjZXNzaWJpbGl0eURldGFjaG0KICAgICBvYmotPnNldFdyYXBw
ZXIobnVsbHB0cik7CiB9CiAKLSNpZiBFTkFCTEUoQUNDRVNTSUJJTElUWV9JU09MQVRFRF9UUkVF
KQotdm9pZCBBWE9iamVjdENhY2hlOjphc3NvY2lhdGVJc29sYXRlZFRyZWVOb2RlKEFjY2Vzc2li
aWxpdHlPYmplY3QmIG9iamVjdCwgQVhJc29sYXRlZFRyZWVOb2RlJiBub2RlLCBBWElzb2xhdGVk
VHJlZUlEIHRyZWVJRCkKLXsKLSAgICBhdXRvIHdyYXBwZXIgPSBvYmplY3Qud3JhcHBlcigpOwot
ICAgIEFTU0VSVCh3cmFwcGVyKTsKLSAgICB3cmFwcGVyLmlzb2xhdGVkVHJlZUlkZW50aWZpZXIg
PSB0cmVlSUQ7Ci0gICAgbm9kZS5zZXRXcmFwcGVyKHdyYXBwZXIpOwotfQotI2VuZGlmCi0KLXZv
aWQgQVhPYmplY3RDYWNoZTo6YXR0YWNoV3JhcHBlcihBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmop
Cit2b2lkIEFYT2JqZWN0Q2FjaGU6OmF0dGFjaFdyYXBwZXIoQVhDb3JlT2JqZWN0KiBvYmopCiB7
CiAgICAgUmV0YWluUHRyPFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyPiB3cmFwcGVyID0g
YWRvcHROUyhbW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFsbG9jXSBpbml0V2l0aEFj
Y2Vzc2liaWxpdHlPYmplY3Q6b2JqXSk7CiAgICAgb2JqLT5zZXRXcmFwcGVyKHdyYXBwZXIuZ2V0
KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UuaAppbmRleCA4ODU4YmVh
M2QwODdiMWJiNjI2NWQ3ODdmZDg4MDU4ZDcxMjYyZmZjLi4wNWE0NGZlMjAyZWVmYTJkZmJkOTkz
NWI1ZTJmYWY5NDA4ZTgzZjVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJh
c2UuaApAQCAtNTEsMTQgKzUxLDExIEBAIGNsYXNzIFZpc2libGVQb3NpdGlvbjsKIH0KIAogQGlu
dGVyZmFjZSBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UgOiBOU09iamVjdCB7Ci0g
ICAgV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdCogbV9vYmplY3Q7CisgICAgV2ViQ29yZTo6
QVhDb3JlT2JqZWN0KiBtX29iamVjdDsKICAgICBXZWJDb3JlOjpBWElEIF9pZGVudGlmaWVyOwot
I2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZX0lTT0xBVEVEX1RSRUUpCi0gICAgUmVmUHRyPFdlYkNv
cmU6OkFYSXNvbGF0ZWRUcmVlTm9kZT4gbV9pc29sYXRlZFRyZWVOb2RlOwotI2VuZGlmCiB9Ci0g
Ci0tIChpZClpbml0V2l0aEFjY2Vzc2liaWxpdHlPYmplY3Q6KFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlPYmplY3QqKWF4T2JqZWN0OworCistIChpZClpbml0V2l0aEFjY2Vzc2liaWxpdHlPYmplY3Q6
KFdlYkNvcmU6OkFYQ29yZU9iamVjdCopYXhPYmplY3Q7CiAKICNpZiBFTkFCTEUoQUNDRVNTSUJJ
TElUWV9JU09MQVRFRF9UUkVFKQogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBSZWZQ
dHI8V2ViQ29yZTo6QVhJc29sYXRlZFRyZWVOb2RlPiBpc29sYXRlZFRyZWVOb2RlOwpAQCAtNjks
NyArNjYsNyBAQCBjbGFzcyBWaXNpYmxlUG9zaXRpb247CiAKIEBwcm9wZXJ0eSAobm9uYXRvbWlj
LCBhc3NpZ24pIFdlYkNvcmU6OkFYSUQgaWRlbnRpZmllcjsKIAotLSAoV2ViQ29yZTo6QWNjZXNz
aWJpbGl0eU9iamVjdCopYWNjZXNzaWJpbGl0eU9iamVjdDsKKy0gKFdlYkNvcmU6OkFYQ29yZU9i
amVjdCopYWNjZXNzaWJpbGl0eU9iamVjdDsKIC0gKEJPT0wpdXBkYXRlT2JqZWN0QmFja2luZ1N0
b3JlOwogCiAvLyBUaGlzIGNhbiBiZSBlaXRoZXIgYW4gQWNjZXNzaWJpbGl0eU9iamVjdCBvciBh
biBBWElzb2xhdGVkVHJlZU5vZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZS5tbSBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFz
ZS5tbQppbmRleCBmYTg5YjZhZDk4MDkzYmRmN2ExODU3Zjk2N2IwNzAxMjlkYTYyNTM3Li5mMGZl
YTIzOGYwMTAxYTUzNmI0YTY3OTBhZjcyOWQzOTJiNGZhYTU2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJh
c2UubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXJCYXNlLm1tCkBAIC0zMSw4ICszMSw2IEBACiAKICNpZiBFTkFCTEUo
QUNDRVNTSUJJTElUWSkKIAotI2ltcG9ydCAiQVhJc29sYXRlZFRyZWUuaCIKLSNpbXBvcnQgIkFY
SXNvbGF0ZWRUcmVlTm9kZS5oIgogI2ltcG9ydCAiQVhPYmplY3RDYWNoZS5oIgogI2ltcG9ydCAi
QWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93LmgiCiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5TGlzdC5o
IgpAQCAtMjc1LDIwICsyNzMsMTAgQEAgc3RhdGljIHZvaWQgYWRkQ2hpbGRUb0FycmF5KEFYQ29y
ZU9iamVjdCYgY2hpbGQsIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gYXJyYXkKICAgICAgICAg
W2FycmF5LmdldCgpIGFkZE9iamVjdDp3cmFwcGVyXTsKIH0KIAotI2lmIEVOQUJMRShBQ0NFU1NJ
QklMSVRZX0lTT0xBVEVEX1RSRUUpCi1OU0FycmF5ICpjb252ZXJ0VG9OU0FycmF5KGNvbnN0IFZl
Y3RvcjxSZWZQdHI8V2ViQ29yZTo6QVhJc29sYXRlZFRyZWVOb2RlPj4mIGNoaWxkcmVuKQotewot
ICAgIE5TTXV0YWJsZUFycmF5ICpyZXN1bHQgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0
V2l0aENhcGFjaXR5OmNoaWxkcmVuLnNpemUoKV07Ci0gICAgZm9yIChhdXRvJiBjaGlsZCA6IGNo
aWxkcmVuKQotICAgICAgICBhZGRDaGlsZFRvQXJyYXkoKmNoaWxkLCByZXN1bHQpOwotICAgIHJl
dHVybiBbcmVzdWx0IGF1dG9yZWxlYXNlXTsKLX0KLSNlbmRpZgotCi1OU0FycmF5ICpjb252ZXJ0
VG9OU0FycmF5KGNvbnN0IFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxp
dHlDaGlsZHJlblZlY3RvciYgY2hpbGRyZW4pCitOU0FycmF5ICpjb252ZXJ0VG9OU0FycmF5KGNv
bnN0IFdlYkNvcmU6OkFYQ29yZU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBj
aGlsZHJlbikKIHsKICAgICBOU011dGFibGVBcnJheSAqcmVzdWx0ID0gW1tOU011dGFibGVBcnJh
eSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpjaGlsZHJlbi5zaXplKCldOwotICAgIGZvciAoYXV0
byYgY2hpbGQgOiBjaGlsZHJlbikKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGNoaWxkIDogY2hpbGRy
ZW4pCiAgICAgICAgIGFkZENoaWxkVG9BcnJheSgqY2hpbGQsIHJlc3VsdCk7CiAgICAgcmV0dXJu
IFtyZXN1bHQgYXV0b3JlbGVhc2VdOwogfQpAQCAtMjk2LDExICsyODQsOCBAQCBOU0FycmF5ICpj
b252ZXJ0VG9OU0FycmF5KGNvbnN0IFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vz
c2liaWxpdHlDaGlsZAogQGltcGxlbWVudGF0aW9uIFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyQmFzZQogCiBAc3ludGhlc2l6ZSBpZGVudGlmaWVyPV9pZGVudGlmaWVyOwotI2lmIEVOQUJM
RShBQ0NFU1NJQklMSVRZX0lTT0xBVEVEX1RSRUUpCi1Ac3ludGhlc2l6ZSBpc29sYXRlZFRyZWVJ
ZGVudGlmaWVyPV9pc29sYXRlZFRyZWVJZGVudGlmaWVyOwotI2VuZGlmCiAKLS0gKGlkKWluaXRX
aXRoQWNjZXNzaWJpbGl0eU9iamVjdDooQWNjZXNzaWJpbGl0eU9iamVjdCopYXhPYmplY3QKKy0g
KGlkKWluaXRXaXRoQWNjZXNzaWJpbGl0eU9iamVjdDooQVhDb3JlT2JqZWN0KilheE9iamVjdAog
ewogICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQogICAgICAgICByZXR1cm4gbmlsOwpA
QCAtMzExLDQ2ICsyOTYsMTQgQEAgTlNBcnJheSAqY29udmVydFRvTlNBcnJheShjb25zdCBXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGQKICAgICByZXR1cm4g
c2VsZjsKIH0KIAotI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZX0lTT0xBVEVEX1RSRUUpCi0tIChS
ZWZQdHI8V2ViQ29yZTo6QVhJc29sYXRlZFRyZWVOb2RlPilpc29sYXRlZFRyZWVOb2RlCi17Ci0g
ICAgUkVMRUFTRV9BU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKLQotICAgIGlmICghX2lkZW50aWZp
ZXIpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKG1faXNvbGF0ZWRUcmVlTm9k
ZSkKLSAgICAgICAgcmV0dXJuIG1faXNvbGF0ZWRUcmVlTm9kZTsKLQotICAgIG1faXNvbGF0ZWRU
cmVlTm9kZSA9IEFYSXNvbGF0ZWRUcmVlOjpub2RlSW5UcmVlRm9ySUQoX2lzb2xhdGVkVHJlZUlk
ZW50aWZpZXIsIF9pZGVudGlmaWVyKTsKLSAgICByZXR1cm4gbV9pc29sYXRlZFRyZWVOb2RlOwot
fQotI2VuZGlmCi0KIC0gKHZvaWQpZGV0YWNoCiB7CiAgICAgbV9vYmplY3QgPSBudWxscHRyOwog
ICAgIF9pZGVudGlmaWVyID0gMDsKLQotI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZX0lTT0xBVEVE
X1RSRUUpCi0gICAgbV9pc29sYXRlZFRyZWVOb2RlID0gbnVsbHB0cjsKLSAgICBfaXNvbGF0ZWRU
cmVlSWRlbnRpZmllciA9IDA7Ci0jZW5kaWYKIH0KIAogLSAoQk9PTCl1cGRhdGVPYmplY3RCYWNr
aW5nU3RvcmUKIHsKLSNpZiBFTkFCTEUoQUNDRVNTSUJJTElUWV9JU09MQVRFRF9UUkVFKQotICAg
IGlmIChfQVhVSUVsZW1lbnRSZXF1ZXN0U2VydmljZWRCeVNlY29uZGFyeUFYVGhyZWFkKCkpIHsK
LSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKLSAgICAgICAgaWYgKGF1
dG8gdHJlZU5vZGUgPSBzZWxmLmlzb2xhdGVkVHJlZU5vZGUpIHsKLSAgICAgICAgICAgIGlmIChh
dXRvIHRyZWUgPSB0cmVlTm9kZS0+dHJlZSgpKQotICAgICAgICAgICAgICAgIHRyZWUtPmFwcGx5
UGVuZGluZ0NoYW5nZXMoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gX2lkZW50aWZpZXI7
Ci0gICAgfQotI2VuZGlmCi0gICAgCiAgICAgLy8gQ2FsbGluZyB1cGRhdGVCYWNraW5nU3RvcmUo
KSBjYW4gaW52YWxpZGF0ZSB0aGlzIGVsZW1lbnQgc28gc2VsZiBtdXN0IGJlIHJldGFpbmVkLgog
ICAgIC8vIElmIGl0IGRvZXMgYmVjb21lIGludmFsaWRhdGVkLCBtX29iamVjdCB3aWxsIGJlIG5p
bC4KICAgICBDRlJldGFpbigoX19icmlkZ2UgQ0ZUeXBlUmVmKXNlbGYpOwpAQCAtMzcxLDcgKzMy
NCw3IEBAIE5TQXJyYXkgKmNvbnZlcnRUb05TQXJyYXkoY29uc3QgV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkCiAgICAgcmV0dXJuIG5pbDsKIH0KIAotLSAo
QWNjZXNzaWJpbGl0eU9iamVjdCopYWNjZXNzaWJpbGl0eU9iamVjdAorLSAoQVhDb3JlT2JqZWN0
KilhY2Nlc3NpYmlsaXR5T2JqZWN0CiB7CiAjaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFlfSVNPTEFU
RURfVFJFRSkKICAgICBBU1NFUlQoIV9BWFVJRWxlbWVudFJlcXVlc3RTZXJ2aWNlZEJ5U2Vjb25k
YXJ5QVhUaHJlYWQoKSk7CkBAIC0zODgsMTAgKzM0MSw2IEBAIE5TQXJyYXkgKmNvbnZlcnRUb05T
QXJyYXkoY29uc3QgV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNo
aWxkCiAKIC0gKFdlYkNvcmU6OkFYQ29yZU9iamVjdCopYXhCYWNraW5nT2JqZWN0CiB7Ci0jaWYg
RU5BQkxFKEFDQ0VTU0lCSUxJVFlfSVNPTEFURURfVFJFRSkKLSAgICBpZiAoX0FYVUlFbGVtZW50
UmVxdWVzdFNlcnZpY2VkQnlTZWNvbmRhcnlBWFRocmVhZCgpKQotICAgICAgICByZXR1cm4gc2Vs
Zi5pc29sYXRlZFRyZWVOb2RlLmdldCgpOwotI2VuZGlmCiAgICAgcmV0dXJuIG1fb2JqZWN0Owog
fQogCkBAIC03ODUsNyArNzM0LDcgQEAgQWNjZXNzaWJpbGl0eVNlYXJjaENyaXRlcmlhIGFjY2Vz
c2liaWxpdHlTZWFyY2hDcml0ZXJpYUZvclNlYXJjaFByZWRpY2F0ZVBhcmFtZXQKICAgICBpZiAo
W3NlYXJjaFRleHRQYXJhbWV0ZXIgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSkKICAg
ICAgICAgc2VhcmNoVGV4dCA9IHNlYXJjaFRleHRQYXJhbWV0ZXI7CiAgICAgCi0gICAgQWNjZXNz
aWJpbGl0eU9iamVjdCogc3RhcnRFbGVtZW50ID0gbnVsbHB0cjsKKyAgICBBWENvcmVPYmplY3Qq
IHN0YXJ0RWxlbWVudCA9IG51bGxwdHI7CiAgICAgaWYgKFtzdGFydEVsZW1lbnRQYXJhbWV0ZXIg
aXNLaW5kT2ZDbGFzczpbV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlIGNsYXNzXV0p
CiAgICAgICAgIHN0YXJ0RWxlbWVudCA9IFtzdGFydEVsZW1lbnRQYXJhbWV0ZXIgYWNjZXNzaWJp
bGl0eU9iamVjdF07CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbSBiL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1t
CmluZGV4IGM1NzA5NDljNTYwYjVmYTExYmM0NDMwMDkwZTIyNTNjNjk1YzhlM2QuLjY4MGQ4MDA4
YWIxM2NjODUwMTczOWJiZmNhZjhkMDQxMjc2MDM4OGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyTWFjLm1tCkBAIC0xMjg3LDcgKzEyODcsNyBAQCBzdGF0aWMgTlNTdHJpbmcq
IG5zU3RyaW5nRm9yUmVwbGFjZWROb2RlKE5vZGUqIHJlcGxhY2VkTm9kZSkKICAgICAgICAgLy8g
bm9uLXplcm8gbGVuZ3RoIG1lYW5zIHRleHR1YWwgbm9kZSwgemVybyBsZW5ndGggbWVhbnMgcmVw
bGFjZWQgbm9kZSAoQUtBICJhdHRhY2htZW50cyIgaW4gQVgpCiAgICAgICAgIGlmIChpdC50ZXh0
KCkubGVuZ3RoKCkpIHsKICAgICAgICAgICAgIC8vIEFkZCB0aGUgdGV4dCBvZiB0aGUgbGlzdCBt
YXJrZXIgaXRlbSBpZiBuZWNlc3NhcnkuCi0gICAgICAgICAgICBTdHJpbmcgbGlzdE1hcmtlclRl
eHQgPSBtX29iamVjdC0+bGlzdE1hcmtlclRleHRGb3JOb2RlQW5kUG9zaXRpb24oJm5vZGUsIFZp
c2libGVQb3NpdGlvbihpdC5yYW5nZSgpLT5zdGFydFBvc2l0aW9uKCkpKTsKKyAgICAgICAgICAg
IFN0cmluZyBsaXN0TWFya2VyVGV4dCA9IEFjY2Vzc2liaWxpdHlPYmplY3Q6Omxpc3RNYXJrZXJU
ZXh0Rm9yTm9kZUFuZFBvc2l0aW9uKCZub2RlLCBWaXNpYmxlUG9zaXRpb24oaXQucmFuZ2UoKS0+
c3RhcnRQb3NpdGlvbigpKSk7CiAgICAgICAgICAgICBpZiAoIWxpc3RNYXJrZXJUZXh0LmlzRW1w
dHkoKSkKICAgICAgICAgICAgICAgICBBWEF0dHJpYnV0ZWRTdHJpbmdBcHBlbmRUZXh0KGF0dHJT
dHJpbmcsICZub2RlLCBsaXN0TWFya2VyVGV4dCwgc3BlbGxDaGVjayk7CiAgICAgICAgICAgICBB
WEF0dHJpYnV0ZWRTdHJpbmdBcHBlbmRUZXh0KGF0dHJTdHJpbmcsICZub2RlLCBpdC50ZXh0KCks
IHNwZWxsQ2hlY2spOwpAQCAtMTkyMiw3ICsxOTIyLDcgQEAgc3RhdGljIHZvaWQgY29udmVydFRv
VmVjdG9yKE5TQXJyYXkqIGFycmF5LCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5
Q2gKICAgICB1bnNpZ25lZCBsZW5ndGggPSBbYXJyYXkgY291bnRdOwogICAgIHZlY3Rvci5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KGxlbmd0aCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iaiA9IFtbYXJy
YXkgb2JqZWN0QXRJbmRleDppXSBhY2Nlc3NpYmlsaXR5T2JqZWN0XTsKKyAgICAgICAgQVhDb3Jl
T2JqZWN0KiBvYmogPSBbW2FycmF5IG9iamVjdEF0SW5kZXg6aV0gYWNjZXNzaWJpbGl0eU9iamVj
dF07CiAgICAgICAgIGlmIChvYmopCiAgICAgICAgICAgICB2ZWN0b3IuYXBwZW5kKG9iaik7CiAg
ICAgfQpAQCAtMjAwNSwyOCArMjAwNSwxMSBAQCBzdGF0aWMgdm9pZCBXZWJUcmFuc2Zvcm1DR1Bh
dGhUb05TQmV6aWVyUGF0aCh2b2lkKiBpbmZvLCBjb25zdCBDR1BhdGhFbGVtZW50ICplbAogCiAt
IChzaXplX3QpY2hpbGRyZW5WZWN0b3JTaXplCiB7Ci0jaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFlf
SVNPTEFURURfVFJFRSkKLSAgICBpZiAoX0FYVUlFbGVtZW50UmVxdWVzdFNlcnZpY2VkQnlTZWNv
bmRhcnlBWFRocmVhZCgpKQotICAgICAgICByZXR1cm4gc2VsZi5pc29sYXRlZFRyZWVOb2RlLT5j
aGlsZHJlbigpLnNpemUoKTsKLSNlbmRpZgotICAgIAogICAgIHJldHVybiBtX29iamVjdC0+Y2hp
bGRyZW4oKS5zaXplKCk7CiB9CiAKIC0gKE5TQXJyYXk8V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXIgKj4gKiljaGlsZHJlblZlY3RvckFycmF5CiB7Ci0jaWYgRU5BQkxFKEFDQ0VTU0lCSUxJ
VFlfSVNPTEFURURfVFJFRSkKLSAgICBpZiAoX0FYVUlFbGVtZW50UmVxdWVzdFNlcnZpY2VkQnlT
ZWNvbmRhcnlBWFRocmVhZCgpKSB7Ci0gICAgICAgIGF1dG8gdHJlZU5vZGUgPSBzZWxmLmlzb2xh
dGVkVHJlZU5vZGU7Ci0gICAgICAgIGF1dG8gbm9kZUNoaWxkcmVuID0gdHJlZU5vZGUtPmNoaWxk
cmVuKCk7Ci0gICAgICAgIFZlY3RvcjxSZWZQdHI8QVhJc29sYXRlZFRyZWVOb2RlPj4gY2hpbGRy
ZW47Ci0gICAgICAgIGNoaWxkcmVuLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobm9kZUNoaWxkcmVu
LnNpemUoKSk7Ci0gICAgICAgIGF1dG8gdHJlZSA9IHRyZWVOb2RlLT50cmVlKCk7Ci0gICAgICAg
IGZvciAoYXV0byBjaGlsZElEIDogbm9kZUNoaWxkcmVuKQotICAgICAgICAgICAgY2hpbGRyZW4u
dW5jaGVja2VkQXBwZW5kKHRyZWUtPm5vZGVGb3JJRChjaGlsZElEKSk7Ci0gICAgICAgIHJldHVy
biBjb252ZXJ0VG9OU0FycmF5KGNoaWxkcmVuKTsKLSAgICB9Ci0jZW5kaWYKICAgICByZXR1cm4g
Y29udmVydFRvTlNBcnJheShtX29iamVjdC0+Y2hpbGRyZW4oKSk7CiB9CiAKQEAgLTMxMTgsNyAr
MzEwMSw3IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgIAogICAg
IGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5SW5kZXhB
dHRyaWJ1dGVdKSB7CiAgICAgICAgIGlmIChtX29iamVjdC0+aXNUcmVlSXRlbSgpKSB7Ci0gICAg
ICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBtX29iamVjdC0+cGFyZW50T2Jq
ZWN0KCk7CisgICAgICAgICAgICBBWENvcmVPYmplY3QqIHBhcmVudCA9IG1fb2JqZWN0LT5wYXJl
bnRPYmplY3QoKTsKICAgICAgICAgICAgIGZvciAoOyBwYXJlbnQgJiYgIXBhcmVudC0+aXNUcmVl
KCk7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50T2JqZWN0KCkpCiAgICAgICAgICAgICB7IH0KICAg
ICAgICAgICAgIApAQCAtMzE1Nyw3ICszMTQwLDcgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1F
TlRBVElPTlNfRU5ECiAgICAgLy8gVGhlIHJvdyB0aGF0IGNvbnRhaW5zIHRoaXMgcm93LiBJdCBz
aG91bGQgYmUgdGhlIHNhbWUgYXMgdGhlIGZpcnN0IHBhcmVudCB0aGF0IGlzIGEgdHJlZWl0ZW0u
CiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlE
aXNjbG9zZWRCeVJvd0F0dHJpYnV0ZV0pIHsKICAgICAgICAgaWYgKG1fb2JqZWN0LT5pc1RyZWVJ
dGVtKCkpIHsKLSAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudCA9IG1fb2Jq
ZWN0LT5wYXJlbnRPYmplY3QoKTsKKyAgICAgICAgICAgIEFYQ29yZU9iamVjdCogcGFyZW50ID0g
bV9vYmplY3QtPnBhcmVudE9iamVjdCgpOwogICAgICAgICAgICAgd2hpbGUgKHBhcmVudCkgewog
ICAgICAgICAgICAgICAgIGlmIChwYXJlbnQtPmlzVHJlZUl0ZW0oKSkKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHBhcmVudC0+d3JhcHBlcigpOwpAQCAtMzIyNCw4ICszMjA3LDggQEAgQUxM
T1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgaWYgKFthdHRyaWJ1dGVOYW1l
IGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlUaXRsZVVJRWxlbWVudEF0dHJpYnV0ZV0p
IHsKICAgICAgICAgaWYgKCFtX29iamVjdC0+ZXhwb3Nlc1RpdGxlVUlFbGVtZW50KCkpCiAgICAg
ICAgICAgICByZXR1cm4gbmlsOwotICAgICAgICAKLSAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVj
dCogb2JqID0gbV9vYmplY3QtPnRpdGxlVUlFbGVtZW50KCk7CisKKyAgICAgICAgQVhDb3JlT2Jq
ZWN0KiBvYmogPSBtX29iamVjdC0+dGl0bGVVSUVsZW1lbnQoKTsKICAgICAgICAgaWYgKG9iaikK
ICAgICAgICAgICAgIHJldHVybiBvYmotPndyYXBwZXIoKTsKICAgICAgICAgcmV0dXJuIG5pbDsK
QEAgLTMyNDksMTMgKzMyMzIsMTMgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNf
RU5ECiAgICAgfQogICAgIAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6
TlNBY2Nlc3NpYmlsaXR5SG9yaXpvbnRhbFNjcm9sbEJhckF0dHJpYnV0ZV0pIHsKLSAgICAgICAg
QWNjZXNzaWJpbGl0eU9iamVjdCogc2Nyb2xsQmFyID0gbV9vYmplY3QtPnNjcm9sbEJhcihBY2Nl
c3NpYmlsaXR5T3JpZW50YXRpb246Okhvcml6b250YWwpOworICAgICAgICBBWENvcmVPYmplY3Qq
IHNjcm9sbEJhciA9IG1fb2JqZWN0LT5zY3JvbGxCYXIoQWNjZXNzaWJpbGl0eU9yaWVudGF0aW9u
OjpIb3Jpem9udGFsKTsKICAgICAgICAgaWYgKHNjcm9sbEJhcikKICAgICAgICAgICAgIHJldHVy
biBzY3JvbGxCYXItPndyYXBwZXIoKTsKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICB9CiAgICAg
aWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlWZXJ0aWNh
bFNjcm9sbEJhckF0dHJpYnV0ZV0pIHsKLSAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogc2Ny
b2xsQmFyID0gbV9vYmplY3QtPnNjcm9sbEJhcihBY2Nlc3NpYmlsaXR5T3JpZW50YXRpb246OlZl
cnRpY2FsKTsKKyAgICAgICAgQVhDb3JlT2JqZWN0KiBzY3JvbGxCYXIgPSBtX29iamVjdC0+c2Ny
b2xsQmFyKEFjY2Vzc2liaWxpdHlPcmllbnRhdGlvbjo6VmVydGljYWwpOwogICAgICAgICBpZiAo
c2Nyb2xsQmFyKQogICAgICAgICAgICAgcmV0dXJuIHNjcm9sbEJhci0+d3JhcHBlcigpOwogICAg
ICAgICByZXR1cm4gbmlsOwpAQCAtMzQ2NiwxNyArMzQ0OSwxNyBAQCBBTExPV19ERVBSRUNBVEVE
X0lNUExFTUVOVEFUSU9OU19FTkQKICAgICB9CiAKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNF
cXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUZvY3VzYWJsZUFuY2VzdG9yQXR0cmlidXRlXSkg
ewotICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QgPSBtX29iamVjdC0+Zm9jdXNh
YmxlQW5jZXN0b3IoKTsKKyAgICAgICAgQVhDb3JlT2JqZWN0KiBvYmplY3QgPSBtX29iamVjdC0+
Zm9jdXNhYmxlQW5jZXN0b3IoKTsKICAgICAgICAgcmV0dXJuIG9iamVjdCA/IG9iamVjdC0+d3Jh
cHBlcigpIDogbmlsOwogICAgIH0KIAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9T
dHJpbmc6TlNBY2Nlc3NpYmlsaXR5RWRpdGFibGVBbmNlc3RvckF0dHJpYnV0ZV0pIHsKLSAgICAg
ICAgQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0ID0gbV9vYmplY3QtPmVkaXRhYmxlQW5jZXN0
b3IoKTsKKyAgICAgICAgQVhDb3JlT2JqZWN0KiBvYmplY3QgPSBtX29iamVjdC0+ZWRpdGFibGVB
bmNlc3RvcigpOwogICAgICAgICByZXR1cm4gb2JqZWN0ID8gb2JqZWN0LT53cmFwcGVyKCkgOiBu
aWw7CiAgICAgfQogCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0Fj
Y2Vzc2liaWxpdHlIaWdoZXN0RWRpdGFibGVBbmNlc3RvckF0dHJpYnV0ZV0pIHsKLSAgICAgICAg
QWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0ID0gbV9vYmplY3QtPmhpZ2hlc3RFZGl0YWJsZUFu
Y2VzdG9yKCk7CisgICAgICAgIEFYQ29yZU9iamVjdCogb2JqZWN0ID0gbV9vYmplY3QtPmhpZ2hl
c3RFZGl0YWJsZUFuY2VzdG9yKCk7CiAgICAgICAgIHJldHVybiBvYmplY3QgPyBvYmplY3QtPndy
YXBwZXIoKSA6IG5pbDsKICAgICB9CiAKQEAgLTM3ODEsNyArMzc2NCw3IEBAIEFMTE9XX0RFUFJF
Q0FURURfREVDTEFSQVRJT05TX0VORAogICAgIC8vIE9uIFdLMSwgd2UgbmVlZCB0byBjb252ZXJ0
IHJlY3QgdG8gd2luZG93IHNwYWNlIHRvIG1hdGNoIG1vdXNlIGNsaWNraW5nLgogICAgIGlmIChm
cmFtZVZpZXcpIHsKICAgICAgICAgLy8gRmluZCB0aGUgYXBwcm9wcmlhdGUgc2Nyb2xsIHZpZXcg
dG8gdXNlIHRvIGNvbnZlcnQgdGhlIGNvbnRlbnRzIHRvIHRoZSB3aW5kb3cuCi0gICAgICAgIGZv
ciAoQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gbV9vYmplY3QtPnBhcmVudE9iamVjdCgp
OyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50T2JqZWN0KCkpIHsKKyAgICAgICAgZm9y
IChhdXRvKiBwYXJlbnQgPSBtX29iamVjdC0+cGFyZW50T2JqZWN0KCk7IHBhcmVudDsgcGFyZW50
ID0gcGFyZW50LT5wYXJlbnRPYmplY3QoKSkgewogICAgICAgICAgICAgaWYgKGlzPEFjY2Vzc2li
aWxpdHlTY3JvbGxWaWV3PigqcGFyZW50KSkgewogICAgICAgICAgICAgICAgIGlmIChhdXRvIHNj
cm9sbFZpZXcgPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldz4oKnBhcmVudCkuc2Ny
b2xsVmlldygpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICghZnJhbWVWaWV3LT5wbGF0Zm9y
bVdpZGdldCgpKQpAQCAtNDEyNiw3ICs0MTA5LDcgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1F
TlRBVElPTlNfRU5ECiAgICAgTlNOdW1iZXIqIG51bWJlciA9IG5pbDsKICAgICBOU0FycmF5KiBh
cnJheSA9IG5pbDsKICAgICBOU0RpY3Rpb25hcnkqIGRpY3Rpb25hcnkgPSBuaWw7Ci0gICAgUmVm
UHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+IHVpRWxlbWVudCA9IG51bGxwdHI7CisgICAgUmVmUHRy
PEFYQ29yZU9iamVjdD4gdWlFbGVtZW50OwogICAgIE5TUG9pbnQgcG9pbnQgPSBOU1plcm9Qb2lu
dDsKICAgICBib29sIHBvaW50U2V0ID0gZmFsc2U7CiAgICAgTlNSYW5nZSByYW5nZSA9IHswLCAw
fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvd2luL0FYT2JqZWN0
Q2FjaGVXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS93aW4vQVhPYmplY3RD
YWNoZVdpbi5jcHAKaW5kZXggMzEyYjAyMDg0NTczZmM2MDQ4Nzk1YTUxZTg0MDIzNmJiMjg1N2Zm
MS4uNzliYWM0NzkyOTk2ZTU3NmM4NDg3NTQyMDkwYzRmNDJjYmJjYWIzMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS93aW4vQVhPYmplY3RDYWNoZVdpbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS93aW4vQVhPYmplY3RDYWNoZVdpbi5jcHAK
QEAgLTUwLDcgKzUwLDcgQEAgdm9pZCBBWE9iamVjdENhY2hlOjpkZXRhY2hXcmFwcGVyKEFjY2Vz
c2liaWxpdHlPYmplY3QqIG9iaiwgQWNjZXNzaWJpbGl0eURldGFjaG0KICAgICAgICAgd3JhcHBl
ci0+ZGV0YWNoKCk7CiB9CiAKLXZvaWQgQVhPYmplY3RDYWNoZTo6YXR0YWNoV3JhcHBlcihBY2Nl
c3NpYmlsaXR5T2JqZWN0KikKK3ZvaWQgQVhPYmplY3RDYWNoZTo6YXR0YWNoV3JhcHBlcihBWENv
cmVPYmplY3QqKQogewogICAgIC8vIE9uIFdpbmRvd3MsIEFjY2Vzc2liaWxpdHlPYmplY3RzIGFy
ZSB3cmFwcGVkIHdoZW4gdGhlIGFjY2Vzc2liaWxpdHkKICAgICAvLyBzb2Z0d2FyZSByZXF1ZXN0
cyB0aGVtIHZpYSBnZXRfYWNjQ2hpbGQuCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>382654</attachid>
            <date>2019-11-01 16:55:30 -0700</date>
            <delta_ts>2019-11-03 10:28:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203717-20191101195529.patch</filename>
            <type>text/plain</type>
            <size>88776</size>
            <attacher name="Andres Gonzalez">andresg_22</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUxOTAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWYxOGQyODQyMzQ0NmM5
OWU4OWU2MjVjNGU4Y2NhMDNlODhjZWQ0ZC4uZTQ2YmE1MzBjZDQ0MGU1YzBjMjMyNDFhYjM2YTQ5
ZWRkOWM1NjQ3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkwIEBACisyMDE5LTExLTAxICBBbmRy
ZXMgR29uemFsZXogIDxhbmRyZXNnXzIyQGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIEFYSXNv
bGF0ZWRUcmVlTm9kZSBhIHN1YmNsYXNzIG9mIEFYQ29yZU9iamVjdC4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMzcxNworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBuZWVkZWQsIG5v
IG5ldyBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgIC0gQVhJc29sYXRlZFRyZWVOT2RlIGRlcml2
ZXMgZnJvbSBBWENvcmVPYmplY3QuCisgICAgICAgIC0gQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXIgY2FuIG5vdyBoYXZlIGEgc2luZ2xlIHBvaW50ZXIgdG8gYSBBWENvcmVPYmplY3QgaW5zdGVh
ZCBvZiBvbmUgZm9yIHRoZSBsaXZlIG9iamVjdCBhbmQgb25lIGZvciB0aGUgaXNvbGF0ZWQgb2Jq
ZWN0LgorICAgICAgICAtIFNpbXBsaWZpZWQgd3JhcHBlciBjb2RlIGJ5IG1ha2luZyBpdCBhZ25v
c3RpYyBvZiB0aGUgbmF0dXJlIG9mIHRoZSB1bmRlcmx5aW5nIEFYQ29yZU9iamVjdC4KKworICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpBWE9iamVjdENhY2hlOjpjaGFyYWN0ZXJPZmZzZXRGb3JQb2ludCk6CisgICAgICAgIChXZWJD
b3JlOjpBWE9iamVjdENhY2hlOjpjaGFyYWN0ZXJPZmZzZXRGb3JJbmRleCk6CisgICAgICAgIChX
ZWJDb3JlOjpBWE9iamVjdENhY2hlOjpjcmVhdGVJc29sYXRlZEFjY2Vzc2liaWxpdHlUcmVlSGll
cmFyY2h5KToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmdlbmVyYXRlSXNvbGF0
ZWRBY2Nlc3NpYmlsaXR5VHJlZSk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9iamVjdENh
Y2hlLmg6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdGsvQVhPYmplY3RDYWNoZUF0ay5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjphdHRhY2hXcmFwcGVyKToKKyAgICAg
ICAgKiBhY2Nlc3NpYmlsaXR5L2lvcy9BWE9iamVjdENhY2hlSU9TLm1tOgorICAgICAgICAoV2Vi
Q29yZTo6QVhPYmplY3RDYWNoZTo6YXR0YWNoV3JhcHBlcik6CisgICAgICAgICogYWNjZXNzaWJp
bGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW06CisgICAgICAgIChB
Y2Nlc3NpYmlsaXR5VW5pZ25vcmVkQW5jZXN0b3IpOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmls
aXR5VGV4dE1hcmtlciBpbml0V2l0aERhdGE6YWNjZXNzaWJpbGl0eU9iamVjdDpdKToKKyAgICAg
ICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgaW5pdFdpdGhBY2Nlc3NpYmlsaXR5
T2JqZWN0Ol0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBfYWNj
ZXNzaWJpbGl0eVRyZWVBbmNlc3Rvcl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlciBfYWNjZXNzaWJpbGl0eUxpc3RBbmNlc3Rvcl0pOgorICAgICAgICAoLVtXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBfYWNjZXNzaWJpbGl0eUFydGljbGVBbmNlc3Rvcl0p
OgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBfYWNjZXNzaWJpbGl0
eUxhbmRtYXJrQW5jZXN0b3JdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXIgX2FjY2Vzc2liaWxpdHlUYWJsZUFuY2VzdG9yXSk6CisgICAgICAgICgtW1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyIF9hY2Nlc3NpYmlsaXR5SXNJblRhYmxlQ2VsbF0pOgorICAg
ICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBfYWNjZXNzaWJpbGl0eUZpZWxk
c2V0QW5jZXN0b3JdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIg
X2FjY2Vzc2liaWxpdHlGcmFtZUFuY2VzdG9yXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyIF9hY2Nlc3NpYmlsaXR5VHJhaXRzRnJvbUFuY2VzdG9yc10pOgorICAg
ICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciB0YWJsZUNlbGxQYXJlbnRdKToK
KyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgdGFibGVQYXJlbnRdKToK
KyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eVRp
dGxlRWxlbWVudF0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBh
Y2Nlc3NpYmlsaXR5RGF0ZXRpbWVWYWx1ZV0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlciBkZXRhaWxQYXJlbnRGb3JTdW1tYXJ5T2JqZWN0Ol0pOgorICAgICAgICAo
LVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBkZXRhaWxQYXJlbnRGb3JPYmplY3Q6XSk6
CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHRyZWVJdGVtUGFyZW50
Rm9yT2JqZWN0Ol0pOgorICAgICAgICAoQVhBdHRyaWJ1dGVTdHJpbmdTZXRTdHlsZSk6CisgICAg
ICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFycmF5T2ZUZXh0Rm9yVGV4dE1h
cmtlcnM6YXR0cmlidXRlZDpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXIgYWNjZXNzaWJpbGl0eVN1cHBvcnRzQVJJQUV4cGFuZGVkXSk6CisgICAgICAgICgtW1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlJc0V4cGFuZGVkXSk6Cisg
ICAgICAgICogYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6QVhJc29sYXRlZFRyZWU6OnNldFJvb3QpOgorICAgICAgICAoV2Vi
Q29yZTo6QVhJc29sYXRlZFRyZWU6OmFwcGx5UGVuZGluZ0NoYW5nZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6QVhJc29sYXRlZFRyZWU6OnNldFJvb3ROb2RlSUQpOiBEZWxldGVkLgorICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRUcmVlLmg6CisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWVOb2RlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkFYSXNvbGF0ZWRUcmVlTm9kZTo6QVhJc29sYXRlZFRyZWVOb2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFYSXNvbGF0ZWRUcmVlTm9kZTo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkFYSXNvbGF0ZWRUcmVlTm9kZTo6aW5pdGlhbGl6ZUF0dHJpYnV0ZURhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6QVhJc29sYXRlZFRyZWVOb2RlOjphcHBlbmRDaGlsZCk6CisgICAgICAg
IChXZWJDb3JlOjpBWElzb2xhdGVkVHJlZU5vZGU6OmNoaWxkcmVuKToKKyAgICAgICAgKFdlYkNv
cmU6OkFYSXNvbGF0ZWRUcmVlTm9kZTo6cGFyZW50T2JqZWN0VW5pZ25vcmVkIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkFYSXNvbGF0ZWRUcmVlTm9kZTo6YWNjZXNzaWJpbGl0eUhpdFRlc3Qg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QVhJc29sYXRlZFRyZWVOb2RlOjp1cGRhdGVCYWNr
aW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6QVhJc29sYXRlZFRyZWVOb2RlOjpwYXJlbnRP
YmplY3RJbnRlcmZhY2VVbmlnbm9yZWQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGFjY2Vz
c2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRUcmVlTm9kZS5oOgorICAgICAgICAqIGFj
Y2Vzc2liaWxpdHkvbWFjL0FYT2JqZWN0Q2FjaGVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpB
WE9iamVjdENhY2hlOjphdHRhY2hXcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0
Q2FjaGU6OmFzc29jaWF0ZUlzb2xhdGVkVHJlZU5vZGUpOiBEZWxldGVkLgorICAgICAgICAqIGFj
Y2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZS5oOgorICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFz
ZS5tbToKKyAgICAgICAgKGNvbnZlcnRUb05TQXJyYXkpOgorICAgICAgICAoLVtXZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlckJhc2UgaW5pdFdpdGhBY2Nlc3NpYmlsaXR5T2JqZWN0Ol0pOgor
ICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UgZGV0YWNoXSk6Cisg
ICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZSB1cGRhdGVPYmplY3RC
YWNraW5nU3RvcmVdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJC
YXNlIGFjY2Vzc2liaWxpdHlPYmplY3RdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJCYXNlIGF4QmFja2luZ09iamVjdF0pOgorICAgICAgICAoYWNjZXNzaWJpbGl0
eVNlYXJjaENyaXRlcmlhRm9yU2VhcmNoUHJlZGljYXRlUGFyYW1ldGVyaXplZEF0dHJpYnV0ZSk6
CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZSBpc29sYXRlZFRy
ZWVOb2RlXSk6IERlbGV0ZWQuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW06CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyIGRvQVhBdHRyaWJ1dGVkU3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlOnNwZWxs
Q2hlY2s6XSk6CisgICAgICAgIChjb252ZXJ0VG9WZWN0b3IpOgorICAgICAgICAoLVtXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlciBjaGlsZHJlblZlY3RvclNpemVdKToKKyAgICAgICAgKC1b
V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgY2hpbGRyZW5WZWN0b3JBcnJheV0pOgorICAg
ICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5QXR0cmli
dXRlVmFsdWU6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFj
Y2Vzc2liaWxpdHlTaG93Q29udGV4dE1lbnVdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOmZvclBhcmFtZXRlcjpd
KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L3dpbi9BWE9iamVjdENhY2hlV2luLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmF0dGFjaFdyYXBwZXIpOgorCiAyMDE5LTEw
LTMxICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFtGVFdd
IEFkb3B0IERpcmVjdFdyaXRlIGluIHBsYWNlIG9mIFVuaXNjcmliZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKaW5kZXggOTdhZWY2YTRiODM2ZjYz
ODEzZTAwNWJlYzY3NDJmMWIwYjkxMWViNS4uY2FhNzAzNGY1NDU2NzA2M2RmM2RjNWEwYjU1ZTNi
MDM2ODk3NDdlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9i
amVjdENhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0
Q2FjaGUuY3BwCkBAIC0yNzA3LDcgKzI3MDcsNyBAQCBJbnRSZWN0IEFYT2JqZWN0Q2FjaGU6OmFi
c29sdXRlQ2FyZXRCb3VuZHNGb3JDaGFyYWN0ZXJPZmZzZXQoY29uc3QgQ2hhcmFjdGVyT2Zmcwog
ICAgIHJldHVybiBhYnNvbHV0ZUJvdW5kc0ZvckxvY2FsQ2FyZXRSZWN0KGNhcmV0UGFpbnRlciwg
bG9jYWxSZWN0KTsKIH0KIAotQ2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2FjaGU6OmNoYXJhY3Rl
ck9mZnNldEZvclBvaW50KGNvbnN0IEludFBvaW50ICZwb2ludCwgQWNjZXNzaWJpbGl0eU9iamVj
dCogb2JqKQorQ2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2FjaGU6OmNoYXJhY3Rlck9mZnNldEZv
clBvaW50KGNvbnN0IEludFBvaW50ICZwb2ludCwgQVhDb3JlT2JqZWN0KiBvYmopCiB7CiAgICAg
aWYgKCFvYmopCiAgICAgICAgIHJldHVybiBDaGFyYWN0ZXJPZmZzZXQoKTsKQEAgLTI3NzMsNyAr
Mjc3Myw3IEBAIENoYXJhY3Rlck9mZnNldCBBWE9iamVjdENhY2hlOjpzdGFydENoYXJhY3Rlck9m
ZnNldE9mTGluZShjb25zdCBDaGFyYWN0ZXJPZmZzZXQmCiAgICAgcmV0dXJuIGNoYXJhY3Rlck9m
ZnNldEZyb21WaXNpYmxlUG9zaXRpb24oc3RhcnRMaW5lKTsKIH0KIAotQ2hhcmFjdGVyT2Zmc2V0
IEFYT2JqZWN0Q2FjaGU6OmNoYXJhY3Rlck9mZnNldEZvckluZGV4KGludCBpbmRleCwgY29uc3Qg
QWNjZXNzaWJpbGl0eU9iamVjdCogb2JqKQorQ2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2FjaGU6
OmNoYXJhY3Rlck9mZnNldEZvckluZGV4KGludCBpbmRleCwgY29uc3QgQVhDb3JlT2JqZWN0KiBv
YmopCiB7CiAgICAgaWYgKCFvYmopCiAgICAgICAgIHJldHVybiBDaGFyYWN0ZXJPZmZzZXQoKTsK
QEAgLTI5NDMsMTggKzI5NDMsMTggQEAgdm9pZCBBWE9iamVjdENhY2hlOjpwZXJmb3JtRGVmZXJy
ZWRDYWNoZVVwZGF0ZSgpCiB9CiAgICAgCiAjaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFlfSVNPTEFU
RURfVFJFRSkKLVJlZjxBWElzb2xhdGVkVHJlZU5vZGU+IEFYT2JqZWN0Q2FjaGU6OmNyZWF0ZUlz
b2xhdGVkQWNjZXNzaWJpbGl0eVRyZWVIaWVyYXJjaHkoQWNjZXNzaWJpbGl0eU9iamVjdCYgb2Jq
ZWN0LCBBWElEIHBhcmVudElELCBBWElzb2xhdGVkVHJlZSYgdHJlZSwgVmVjdG9yPFJlZjxBWElz
b2xhdGVkVHJlZU5vZGU+PiYgbm9kZUNoYW5nZXMpCitSZWY8QVhJc29sYXRlZFRyZWVOb2RlPiBB
WE9iamVjdENhY2hlOjpjcmVhdGVJc29sYXRlZEFjY2Vzc2liaWxpdHlUcmVlSGllcmFyY2h5KEFY
Q29yZU9iamVjdCYgb2JqZWN0LCBBWElEIHBhcmVudElELCBBWElzb2xhdGVkVHJlZSYgdHJlZSwg
VmVjdG9yPFJlZjxBWElzb2xhdGVkVHJlZU5vZGU+PiYgbm9kZUNoYW5nZXMpCiB7CiAgICAgYXV0
byBpc29sYXRlZFRyZWVOb2RlID0gQVhJc29sYXRlZFRyZWVOb2RlOjpjcmVhdGUob2JqZWN0KTsK
ICAgICBub2RlQ2hhbmdlcy5hcHBlbmQoaXNvbGF0ZWRUcmVlTm9kZS5jb3B5UmVmKCkpOwogCiAg
ICAgaXNvbGF0ZWRUcmVlTm9kZS0+c2V0VHJlZUlkZW50aWZpZXIodHJlZS50cmVlSWRlbnRpZmll
cigpKTsKICAgICBpc29sYXRlZFRyZWVOb2RlLT5zZXRQYXJlbnQocGFyZW50SUQpOwotICAgIGFz
c29jaWF0ZUlzb2xhdGVkVHJlZU5vZGUob2JqZWN0LCBpc29sYXRlZFRyZWVOb2RlLCB0cmVlLnRy
ZWVJZGVudGlmaWVyKCkpOworICAgIGF0dGFjaFdyYXBwZXIoJmlzb2xhdGVkVHJlZU5vZGUuZ2V0
KCkpOwogCi0gICAgZm9yIChhdXRvIGNoaWxkIDogb2JqZWN0LmNoaWxkcmVuKCkpIHsKLSAgICAg
ICAgYXV0byBzdGF0aWNDaGlsZCA9IGNyZWF0ZUlzb2xhdGVkQWNjZXNzaWJpbGl0eVRyZWVIaWVy
YXJjaHkoKmNoaWxkLCBpc29sYXRlZFRyZWVOb2RlLT5pZGVudGlmaWVyKCksIHRyZWUsIG5vZGVD
aGFuZ2VzKTsKLSAgICAgICAgaXNvbGF0ZWRUcmVlTm9kZS0+YXBwZW5kQ2hpbGQoc3RhdGljQ2hp
bGQtPmlkZW50aWZpZXIoKSk7CisgICAgZm9yIChjb25zdCBhdXRvJiBjaGlsZCA6IG9iamVjdC5j
aGlsZHJlbigpKSB7CisgICAgICAgIGF1dG8gc3RhdGljQ2hpbGQgPSBjcmVhdGVJc29sYXRlZEFj
Y2Vzc2liaWxpdHlUcmVlSGllcmFyY2h5KCpjaGlsZCwgaXNvbGF0ZWRUcmVlTm9kZS0+b2JqZWN0
SUQoKSwgdHJlZSwgbm9kZUNoYW5nZXMpOworICAgICAgICBpc29sYXRlZFRyZWVOb2RlLT5hcHBl
bmRDaGlsZChzdGF0aWNDaGlsZC0+b2JqZWN0SUQoKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIGlz
b2xhdGVkVHJlZU5vZGU7CkBAIC0yOTcwLDcgKzI5NzAsNyBAQCBSZWY8QVhJc29sYXRlZFRyZWU+
IEFYT2JqZWN0Q2FjaGU6OmdlbmVyYXRlSXNvbGF0ZWRBY2Nlc3NpYmlsaXR5VHJlZSgpCiAgICAg
CiAgICAgVmVjdG9yPFJlZjxBWElzb2xhdGVkVHJlZU5vZGU+PiBub2RlQ2hhbmdlczsKICAgICBh
dXRvIHJvb3QgPSBjcmVhdGVJc29sYXRlZEFjY2Vzc2liaWxpdHlUcmVlSGllcmFyY2h5KCpyb290
T2JqZWN0KCksIEludmFsaWRBWElELCAqdHJlZSwgbm9kZUNoYW5nZXMpOwotICAgIHRyZWUtPnNl
dFJvb3ROb2RlSUQocm9vdC0+aWRlbnRpZmllcigpKTsKKyAgICB0cmVlLT5zZXRSb290KHJvb3Qp
OwogICAgIHRyZWUtPmFwcGVuZE5vZGVDaGFuZ2VzKG5vZGVDaGFuZ2VzKTsKIAogICAgIHJldHVy
biBtYWtlUmVmKCp0cmVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQVhPYmplY3RDYWNoZS5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVj
dENhY2hlLmgKaW5kZXggODg0OTlmZDE4YzIwNzM5ZDJkYTM3MGEwNGJhN2JmNDFiZmUzYzg0YS4u
YWMwYzJiYzg3NzkyMDk0YTNkYTkwYTM2ODNjNmIzZTNiODg5Y2Q2NCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmgKQEAgLTE3NCw3ICsxNzQsNyBAQCBw
dWJsaWM6CiAgICAgdm9pZCByZW1vdmUoQVhJRCk7CiAKICAgICB2b2lkIGRldGFjaFdyYXBwZXIo
QWNjZXNzaWJpbGl0eU9iamVjdCosIEFjY2Vzc2liaWxpdHlEZXRhY2htZW50VHlwZSk7Ci0gICAg
dm9pZCBhdHRhY2hXcmFwcGVyKEFjY2Vzc2liaWxpdHlPYmplY3QqKTsKKyAgICB2b2lkIGF0dGFj
aFdyYXBwZXIoQVhDb3JlT2JqZWN0Kik7CiAgICAgdm9pZCBjaGlsZHJlbkNoYW5nZWQoTm9kZSos
IE5vZGUqIG5ld0NoaWxkID0gbnVsbHB0cik7CiAgICAgdm9pZCBjaGlsZHJlbkNoYW5nZWQoUmVu
ZGVyT2JqZWN0KiwgUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCA9IG51bGxwdHIpOwogICAgIHZvaWQg
Y2hpbGRyZW5DaGFuZ2VkKEFYQ29yZU9iamVjdCopOwpAQCAtMTk0LDggKzE5NCw3IEBAIHB1Ymxp
YzoKICNpZiBFTkFCTEUoQUNDRVNTSUJJTElUWV9JU09MQVRFRF9UUkVFKQogICAgIFdFQkNPUkVf
RVhQT1JUIFJlZjxBWElzb2xhdGVkVHJlZT4gZ2VuZXJhdGVJc29sYXRlZEFjY2Vzc2liaWxpdHlU
cmVlKCk7CiAKLSAgICB2b2lkIGFzc29jaWF0ZUlzb2xhdGVkVHJlZU5vZGUoQWNjZXNzaWJpbGl0
eU9iamVjdCYsIEFYSXNvbGF0ZWRUcmVlTm9kZSYsIEFYSXNvbGF0ZWRUcmVlSUQpOwotICAgIFJl
ZjxBWElzb2xhdGVkVHJlZU5vZGU+IGNyZWF0ZUlzb2xhdGVkQWNjZXNzaWJpbGl0eVRyZWVIaWVy
YXJjaHkoQWNjZXNzaWJpbGl0eU9iamVjdCYsIEFYSUQsIEFYSXNvbGF0ZWRUcmVlJiwgVmVjdG9y
PFJlZjxBWElzb2xhdGVkVHJlZU5vZGU+PiYpOworICAgIFJlZjxBWElzb2xhdGVkVHJlZU5vZGU+
IGNyZWF0ZUlzb2xhdGVkQWNjZXNzaWJpbGl0eVRyZWVIaWVyYXJjaHkoQVhDb3JlT2JqZWN0Jiwg
QVhJRCwgQVhJc29sYXRlZFRyZWUmLCBWZWN0b3I8UmVmPEFYSXNvbGF0ZWRUcmVlTm9kZT4+Jik7
CiAjZW5kaWYKICAgICAKICNpZiBFTkFCTEUoQUNDRVNTSUJJTElUWSkKQEAgLTI1Nyw3ICsyNTYs
NyBAQCBwdWJsaWM6CiAgICAgQ2hhcmFjdGVyT2Zmc2V0IHByZXZpb3VzU2VudGVuY2VTdGFydENo
YXJhY3Rlck9mZnNldChjb25zdCBDaGFyYWN0ZXJPZmZzZXQmKTsKICAgICAKICAgICAvLyBCb3Vu
ZHMKLSAgICBDaGFyYWN0ZXJPZmZzZXQgY2hhcmFjdGVyT2Zmc2V0Rm9yUG9pbnQoY29uc3QgSW50
UG9pbnQmLCBBY2Nlc3NpYmlsaXR5T2JqZWN0Kik7CisgICAgQ2hhcmFjdGVyT2Zmc2V0IGNoYXJh
Y3Rlck9mZnNldEZvclBvaW50KGNvbnN0IEludFBvaW50JiwgQVhDb3JlT2JqZWN0Kik7CiAgICAg
SW50UmVjdCBhYnNvbHV0ZUNhcmV0Qm91bmRzRm9yQ2hhcmFjdGVyT2Zmc2V0KGNvbnN0IENoYXJh
Y3Rlck9mZnNldCYpOwogICAgIENoYXJhY3Rlck9mZnNldCBjaGFyYWN0ZXJPZmZzZXRGb3JCb3Vu
ZHMoY29uc3QgSW50UmVjdCYsIGJvb2wpOwogICAgIApAQCAtMjY2LDcgKzI2NSw3IEBAIHB1Ymxp
YzoKICAgICBDaGFyYWN0ZXJPZmZzZXQgc3RhcnRDaGFyYWN0ZXJPZmZzZXRPZkxpbmUoY29uc3Qg
Q2hhcmFjdGVyT2Zmc2V0Jik7CiAgICAgCiAgICAgLy8gSW5kZXgKLSAgICBDaGFyYWN0ZXJPZmZz
ZXQgY2hhcmFjdGVyT2Zmc2V0Rm9ySW5kZXgoaW50LCBjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0
Kik7CisgICAgQ2hhcmFjdGVyT2Zmc2V0IGNoYXJhY3Rlck9mZnNldEZvckluZGV4KGludCwgY29u
c3QgQVhDb3JlT2JqZWN0Kik7CiAgICAgaW50IGluZGV4Rm9yQ2hhcmFjdGVyT2Zmc2V0KGNvbnN0
IENoYXJhY3Rlck9mZnNldCYsIEFjY2Vzc2liaWxpdHlPYmplY3QqKTsKIAogICAgIGVudW0gQVhO
b3RpZmljYXRpb24gewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9h
dGsvQVhPYmplY3RDYWNoZUF0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0
ay9BWE9iamVjdENhY2hlQXRrLmNwcAppbmRleCBkODNjMDc0NmUwYmY1YmY3OTk4OGQzNDEyNzVh
OTYwMTM5Yjc3YzJhLi5kNjAzOTVhN2VlZjkyNzAyMWM2ZTQ1ZWE0YTg5NTE4ZDQ3NjkwYmFmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9BWE9iamVjdENhY2hl
QXRrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9BWE9iamVjdENh
Y2hlQXRrLmNwcApAQCAtNjEsMTkgKzYxLDI0IEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6ZGV0YWNo
V3JhcHBlcihBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmosIEFjY2Vzc2liaWxpdHlEZXRhY2htCiAg
ICAgd2Via2l0QWNjZXNzaWJsZURldGFjaChXRUJLSVRfQUNDRVNTSUJMRSh3cmFwcGVyKSk7CiB9
CiAKLXZvaWQgQVhPYmplY3RDYWNoZTo6YXR0YWNoV3JhcHBlcihBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBvYmopCit2b2lkIEFYT2JqZWN0Q2FjaGU6OmF0dGFjaFdyYXBwZXIoQVhDb3JlT2JqZWN0KiBv
YmopCiB7Ci0gICAgR1JlZlB0cjxXZWJLaXRBY2Nlc3NpYmxlPiB3cmFwcGVyID0gYWRvcHRHUmVm
KHdlYmtpdEFjY2Vzc2libGVOZXcob2JqKSk7Ci0gICAgb2JqLT5zZXRXcmFwcGVyKHdyYXBwZXIu
Z2V0KCkpOworICAgIC8vIEZJWE1FOiBhdCB0aGUgbW9tZW50LCBvbmx5IGFsbG93IHRvIGF0dGFj
aCBBY2Nlc3NpYmlsaXR5T2JqZWN0cy4KKyAgICBpZiAoIWlzPEFjY2Vzc2liaWxpdHlPYmplY3Q+
KG9iaikpCisgICAgICAgIHJldHVybjsKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBhY2Nlc3Np
YmlsaXR5T2JqZWN0ID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eU9iamVjdD4ob2JqKTsKKworICAg
IEdSZWZQdHI8V2ViS2l0QWNjZXNzaWJsZT4gd3JhcHBlciA9IGFkb3B0R1JlZih3ZWJraXRBY2Nl
c3NpYmxlTmV3KGFjY2Vzc2liaWxpdHlPYmplY3QpKTsKKyAgICBhY2Nlc3NpYmlsaXR5T2JqZWN0
LT5zZXRXcmFwcGVyKHdyYXBwZXIuZ2V0KCkpOwogCiAgICAgLy8gSWYgYW4gb2JqZWN0IGlzIGJl
aW5nIGF0dGFjaGVkIGFuZCB3ZSBhcmUgbm90IGluIHRoZSBtaWRkbGUgb2YgYSBsYXlvdXQgdXBk
YXRlLCB0aGVuCiAgICAgLy8gd2Ugc2hvdWxkIHJlcG9ydCBBVHMgYnkgZW1pdHRpbmcgdGhlIGNo
aWxkcmVuLWNoYW5nZWQ6OmFkZCBzaWduYWwgZnJvbSB0aGUgcGFyZW50LgotICAgIERvY3VtZW50
KiBkb2N1bWVudCA9IG9iai0+ZG9jdW1lbnQoKTsKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBh
Y2Nlc3NpYmlsaXR5T2JqZWN0LT5kb2N1bWVudCgpOwogICAgIGlmICghZG9jdW1lbnQgfHwgZG9j
dW1lbnQtPmNoaWxkTmVlZHNTdHlsZVJlY2FsYygpKQogICAgICAgICByZXR1cm47CiAKICAgICAv
LyBEb24ndCBlbWl0IHRoZSBzaWduYWwgd2hlbiB0aGUgYWN0dWFsIG9iamVjdCBiZWluZyBhZGRl
ZCBpcyBub3QgZ29pbmcgdG8gYmUgZXhwb3NlZC4KLSAgICBpZiAob2JqLT5hY2Nlc3NpYmlsaXR5
SXNJZ25vcmVkQnlEZWZhdWx0KCkpCisgICAgaWYgKGFjY2Vzc2liaWxpdHlPYmplY3QtPmFjY2Vz
c2liaWxpdHlJc0lnbm9yZWRCeURlZmF1bHQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8g
RG9uJ3QgZW1pdCB0aGUgc2lnbmFsIGlmIHRoZSBvYmplY3QgYmVpbmcgYWRkZWQgaXMgbm90IC0t
IG9yIG5vdCB5ZXQgLS0gcmVuZGVyZWQsCkBAIC04MSwxMCArODYsMTAgQEAgdm9pZCBBWE9iamVj
dENhY2hlOjphdHRhY2hXcmFwcGVyKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iaikKICAgICAvLyBj
aGlsZC4gQnV0IGlmIGFuIGFzc2lzdGl2ZSB0ZWNobm9sb2d5IGlzIGxpc3RlbmluZywgQVQtU1BJ
MiB3aWxsIGF0dGVtcHQgdG8gY3JlYXRlCiAgICAgLy8gYW5kIGNhY2hlIHRoZSBzdGF0ZSBzZXQg
Zm9yIHRoZSBjaGlsZCB1cG9uIGVtaXNzaW9uIG9mIHRoZSBzaWduYWwuIElmIHRoZSBvYmplY3QK
ICAgICAvLyBoYXMgbm90IHlldCBiZWVuIHJlbmRlcmVkLCB0aGlzIHdpbGwgcmVzdWx0IGluIGEg
Y3Jhc2guCi0gICAgaWYgKCFvYmotPnJlbmRlcmVyKCkpCisgICAgaWYgKCFhY2Nlc3NpYmlsaXR5
T2JqZWN0LT5yZW5kZXJlcigpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2RlZmVycmVkQXR0
YWNoZWRXcmFwcGVyT2JqZWN0TGlzdC5hZGQob2JqKTsKKyAgICBtX2RlZmVycmVkQXR0YWNoZWRX
cmFwcGVyT2JqZWN0TGlzdC5hZGQoYWNjZXNzaWJpbGl0eU9iamVjdCk7CiB9CiAKIHZvaWQgQVhP
YmplY3RDYWNoZTo6cGxhdGZvcm1QZXJmb3JtRGVmZXJyZWRDYWNoZVVwZGF0ZSgpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9BWE9iamVjdENhY2hlSU9TLm1t
IGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvQVhPYmplY3RDYWNoZUlPUy5tbQpp
bmRleCBkZjU4ZWZhNzY1M2Y2ODA1MzFjOGNlOTM5MzllN2IwNjYzMTczODNhLi44ZDVhMWNmYTBm
YTg3YTcwNmIyYjhkZmQ2MTNkYWVkYmFiN2NhN2U3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L2lvcy9BWE9iamVjdENhY2hlSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvaW9zL0FYT2JqZWN0Q2FjaGVJT1MubW0KQEAgLTQyLDcgKzQyLDcg
QEAgdm9pZCBBWE9iamVjdENhY2hlOjpkZXRhY2hXcmFwcGVyKEFjY2Vzc2liaWxpdHlPYmplY3Qq
IG9iaiwgQWNjZXNzaWJpbGl0eURldGFjaG0KICAgICBvYmotPnNldFdyYXBwZXIobnVsbHB0cik7
CiB9CiAKLXZvaWQgQVhPYmplY3RDYWNoZTo6YXR0YWNoV3JhcHBlcihBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBvYmopCit2b2lkIEFYT2JqZWN0Q2FjaGU6OmF0dGFjaFdyYXBwZXIoQVhDb3JlT2JqZWN0
KiBvYmopCiB7CiAgICAgUmV0YWluUHRyPEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyPiB3cmFw
cGVyID0gYWRvcHROUyhbW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFsbG9jXSBpbml0
V2l0aEFjY2Vzc2liaWxpdHlPYmplY3Q6b2JqXSk7CiAgICAgb2JqLT5zZXRXcmFwcGVyKHdyYXBw
ZXIuZ2V0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3Mv
V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQppbmRleCA5
OGY5NDAyYjg4Y2Y0OGVjMGQzMGNkNWZlM2JkZTUxZTc1ZDNlZjExLi4yNmRjYjBlYWI2MzU5MDQw
OTExZGRhY2U1ZGI5ZjY4YzBkNDEzNWYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlcklPUy5tbQpAQCAtMTIzLDcgKzEyMyw3IEBAIHN0YXRpYyBOU1N0cmluZyAqIGNvbnN0IFVJ
QWNjZXNzaWJpbGl0eVRleHR1YWxDb250ZXh0U291cmNlQ29kZSA9IEAiVUlBY2Nlc3NpYmlsCiBz
dGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqIEFjY2Vzc2liaWxpdHlVbmlnbm9yZWRB
bmNlc3RvcihBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciAqd3JhcHBlcikKIHsKICAgICB3aGls
ZSAod3JhcHBlciAmJiAhW3dyYXBwZXIgaXNBY2Nlc3NpYmlsaXR5RWxlbWVudF0pIHsKLSAgICAg
ICAgQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0ID0gW3dyYXBwZXIgYWNjZXNzaWJpbGl0eU9i
amVjdF07CisgICAgICAgIEFYQ29yZU9iamVjdCogb2JqZWN0ID0gW3dyYXBwZXIgYWNjZXNzaWJp
bGl0eU9iamVjdF07CiAgICAgICAgIGlmICghb2JqZWN0KQogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIApAQCAtMTc5LDcgKzE3OSw3IEBAIHN0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlciogQWNjZXNzaWJpbGl0eVVuaWdub3JlZEFuY2VzdG9yKEFjY2Vzc2liaWxpdHlPCiAvLyBU
aGlzIGlzIG5lZWRlZCBmb3IgZXh0ZXJuYWwgY2xpZW50cyB0byBiZSBhYmxlIHRvIGNyZWF0ZSBh
IHRleHQgbWFya2VyIHdpdGhvdXQgaGF2aW5nIGEgcG9pbnRlciB0byB0aGUgY2FjaGUuCiAtIChp
ZClpbml0V2l0aERhdGE6KE5TRGF0YSAqKWRhdGEgYWNjZXNzaWJpbGl0eU9iamVjdDooQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXIgKil3cmFwcGVyCiB7Ci0gICAgV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eU9iamVjdCogYXhPYmplY3QgPSBbd3JhcHBlciBhY2Nlc3NpYmlsaXR5T2JqZWN0XTsgCisg
ICAgV2ViQ29yZTo6QVhDb3JlT2JqZWN0KiBheE9iamVjdCA9IFt3cmFwcGVyIGFjY2Vzc2liaWxp
dHlPYmplY3RdOwogICAgIGlmICghYXhPYmplY3QpCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAg
CkBAIC0yNTcsNyArMjU3LDcgQEAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKiBB
Y2Nlc3NpYmlsaXR5VW5pZ25vcmVkQW5jZXN0b3IoQWNjZXNzaWJpbGl0eU8KIAogQGltcGxlbWVu
dGF0aW9uIFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyCiAKLS0gKGlkKWluaXRXaXRoQWNj
ZXNzaWJpbGl0eU9iamVjdDooQWNjZXNzaWJpbGl0eU9iamVjdCopYXhPYmplY3QKKy0gKGlkKWlu
aXRXaXRoQWNjZXNzaWJpbGl0eU9iamVjdDooQVhDb3JlT2JqZWN0KilheE9iamVjdAogewogICAg
IHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhBY2Nlc3NpYmlsaXR5T2JqZWN0OmF4T2JqZWN0XTsKICAg
ICBpZiAoIXNlbGYpCkBAIC01NTAsMzEgKzU1MCwzMSBAQCBzdGF0aWMgQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIqIEFjY2Vzc2liaWxpdHlVbmlnbm9yZWRBbmNlc3RvcihBY2Nlc3NpYmlsaXR5
TwogCiAtIChBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciopX2FjY2Vzc2liaWxpdHlUcmVlQW5j
ZXN0b3IKIHsKLSAgICBhdXRvIG1hdGNoRnVuYyA9IFtdIChjb25zdCBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0JiBvYmplY3QpIHsKKyAgICBhdXRvIG1hdGNoRnVuYyA9IFtdIChjb25zdCBBWENvcmVPYmpl
Y3QmIG9iamVjdCkgewogICAgICAgICBBY2Nlc3NpYmlsaXR5Um9sZSByb2xlID0gb2JqZWN0LnJv
bGVWYWx1ZSgpOwogICAgICAgICByZXR1cm4gcm9sZSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6VHJl
ZTsKICAgICB9OwotICAgIAotICAgIGlmIChjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJl
bnQgPSBBY2Nlc3NpYmlsaXR5OjpmaW5kQW5jZXN0b3I8QWNjZXNzaWJpbGl0eU9iamVjdD4oKm1f
b2JqZWN0LCBmYWxzZSwgV1RGTW92ZShtYXRjaEZ1bmMpKSkKKworICAgIGlmIChjb25zdCBBWENv
cmVPYmplY3QqIHBhcmVudCA9IEFjY2Vzc2liaWxpdHk6OmZpbmRBbmNlc3RvcjxBWENvcmVPYmpl
Y3Q+KCptX29iamVjdCwgZmFsc2UsIFdURk1vdmUobWF0Y2hGdW5jKSkpCiAgICAgICAgIHJldHVy
biBwYXJlbnQtPndyYXBwZXIoKTsKICAgICByZXR1cm4gbmlsOwogfQogCiAtIChBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlciopX2FjY2Vzc2liaWxpdHlMaXN0QW5jZXN0b3IKIHsKLSAgICBhdXRv
IG1hdGNoRnVuYyA9IFtdIChjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0JiBvYmplY3QpIHsKKyAg
ICBhdXRvIG1hdGNoRnVuYyA9IFtdIChjb25zdCBBWENvcmVPYmplY3QmIG9iamVjdCkgewogICAg
ICAgICBBY2Nlc3NpYmlsaXR5Um9sZSByb2xlID0gb2JqZWN0LnJvbGVWYWx1ZSgpOwogICAgICAg
ICByZXR1cm4gcm9sZSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6TGlzdCB8fCByb2xlID09IEFjY2Vz
c2liaWxpdHlSb2xlOjpMaXN0Qm94OwogICAgIH07CiAgICAgCi0gICAgaWYgKGNvbnN0IEFjY2Vz
c2liaWxpdHlPYmplY3QqIHBhcmVudCA9IEFjY2Vzc2liaWxpdHk6OmZpbmRBbmNlc3RvcjxBY2Nl
c3NpYmlsaXR5T2JqZWN0PigqbV9vYmplY3QsIGZhbHNlLCBXVEZNb3ZlKG1hdGNoRnVuYykpKQor
ICAgIGlmIChjb25zdCBBWENvcmVPYmplY3QqIHBhcmVudCA9IEFjY2Vzc2liaWxpdHk6OmZpbmRB
bmNlc3RvcjxBWENvcmVPYmplY3Q+KCptX29iamVjdCwgZmFsc2UsIFdURk1vdmUobWF0Y2hGdW5j
KSkpCiAgICAgICAgIHJldHVybiBwYXJlbnQtPndyYXBwZXIoKTsKICAgICByZXR1cm4gbmlsOwog
fQogCiAtIChBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciopX2FjY2Vzc2liaWxpdHlBcnRpY2xl
QW5jZXN0b3IKIHsKLSAgICBpZiAoY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0g
QWNjZXNzaWJpbGl0eTo6ZmluZEFuY2VzdG9yPEFjY2Vzc2liaWxpdHlPYmplY3Q+KCptX29iamVj
dCwgZmFsc2UsIFtdIChjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0JiBvYmplY3QpIHsKKyAgICBp
ZiAoY29uc3QgQVhDb3JlT2JqZWN0KiBwYXJlbnQgPSBBY2Nlc3NpYmlsaXR5OjpmaW5kQW5jZXN0
b3I8QVhDb3JlT2JqZWN0PigqbV9vYmplY3QsIGZhbHNlLCBbXSAoY29uc3QgQVhDb3JlT2JqZWN0
JiBvYmplY3QpIHsKICAgICAgICAgcmV0dXJuIG9iamVjdC5yb2xlVmFsdWUoKSA9PSBBY2Nlc3Np
YmlsaXR5Um9sZTo6RG9jdW1lbnRBcnRpY2xlOwogICAgIH0pKQogICAgICAgICByZXR1cm4gcGFy
ZW50LT53cmFwcGVyKCk7CkBAIC01ODMsNyArNTgzLDcgQEAgc3RhdGljIEFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyKiBBY2Nlc3NpYmlsaXR5VW5pZ25vcmVkQW5jZXN0b3IoQWNjZXNzaWJpbGl0
eU8KIAogLSAoQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqKV9hY2Nlc3NpYmlsaXR5TGFuZG1h
cmtBbmNlc3RvcgogewotICAgIGlmIChjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQg
PSBBY2Nlc3NpYmlsaXR5OjpmaW5kQW5jZXN0b3I8QWNjZXNzaWJpbGl0eU9iamVjdD4oKm1fb2Jq
ZWN0LCBmYWxzZSwgW3NlbGZdIChjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0JiBvYmplY3QpIHsK
KyAgICBpZiAoY29uc3QgQVhDb3JlT2JqZWN0KiBwYXJlbnQgPSBBY2Nlc3NpYmlsaXR5OjpmaW5k
QW5jZXN0b3I8QVhDb3JlT2JqZWN0PigqbV9vYmplY3QsIGZhbHNlLCBbc2VsZl0gKGNvbnN0IEFY
Q29yZU9iamVjdCYgb2JqZWN0KSB7CiAgICAgICAgIHJldHVybiBbc2VsZiBfYWNjZXNzaWJpbGl0
eUlzTGFuZG1hcmtSb2xlOm9iamVjdC5yb2xlVmFsdWUoKV07CiAgICAgfSkpCiAgICAgICAgIHJl
dHVybiBwYXJlbnQtPndyYXBwZXIoKTsKQEAgLTU5Miw3ICs1OTIsNyBAQCBzdGF0aWMgQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXIqIEFjY2Vzc2liaWxpdHlVbmlnbm9yZWRBbmNlc3RvcihBY2Nl
c3NpYmlsaXR5TwogCiAtIChBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciopX2FjY2Vzc2liaWxp
dHlUYWJsZUFuY2VzdG9yCiB7Ci0gICAgaWYgKGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3QqIHBh
cmVudCA9IEFjY2Vzc2liaWxpdHk6OmZpbmRBbmNlc3RvcjxBY2Nlc3NpYmlsaXR5T2JqZWN0Pigq
bV9vYmplY3QsIGZhbHNlLCBbXSAoY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCYgb2JqZWN0KSB7
CisgICAgaWYgKGNvbnN0IEFYQ29yZU9iamVjdCogcGFyZW50ID0gQWNjZXNzaWJpbGl0eTo6Zmlu
ZEFuY2VzdG9yPEFYQ29yZU9iamVjdD4oKm1fb2JqZWN0LCBmYWxzZSwgW10gKGNvbnN0IEFYQ29y
ZU9iamVjdCYgb2JqZWN0KSB7CiAgICAgICAgIHJldHVybiBvYmplY3Qucm9sZVZhbHVlKCkgPT0g
QWNjZXNzaWJpbGl0eVJvbGU6OlRhYmxlOwogICAgIH0pKQogICAgICAgICByZXR1cm4gcGFyZW50
LT53cmFwcGVyKCk7CkBAIC02MDEsMTQgKzYwMSwxNCBAQCBzdGF0aWMgQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIqIEFjY2Vzc2liaWxpdHlVbmlnbm9yZWRBbmNlc3RvcihBY2Nlc3NpYmlsaXR5
TwogCiAtIChCT09MKV9hY2Nlc3NpYmlsaXR5SXNJblRhYmxlQ2VsbAogewotICAgIHJldHVybiBB
Y2Nlc3NpYmlsaXR5OjpmaW5kQW5jZXN0b3I8QWNjZXNzaWJpbGl0eU9iamVjdD4oKm1fb2JqZWN0
LCBmYWxzZSwgW10gKGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3QmIG9iamVjdCkgeworICAgIHJl
dHVybiBBY2Nlc3NpYmlsaXR5OjpmaW5kQW5jZXN0b3I8QVhDb3JlT2JqZWN0PigqbV9vYmplY3Qs
IGZhbHNlLCBbXSAoY29uc3QgQVhDb3JlT2JqZWN0JiBvYmplY3QpIHsKICAgICAgICAgcmV0dXJu
IG9iamVjdC5yb2xlVmFsdWUoKSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6Q2VsbDsKICAgICB9KSAh
PSBudWxscHRyOwogfQogCiAtIChBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciopX2FjY2Vzc2li
aWxpdHlGaWVsZHNldEFuY2VzdG9yCiB7Ci0gICAgaWYgKGNvbnN0IEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIHBhcmVudCA9IEFjY2Vzc2liaWxpdHk6OmZpbmRBbmNlc3RvcjxBY2Nlc3NpYmlsaXR5T2Jq
ZWN0PigqbV9vYmplY3QsIGZhbHNlLCBbXSAoY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCYgb2Jq
ZWN0KSB7CisgICAgaWYgKGNvbnN0IEFYQ29yZU9iamVjdCogcGFyZW50ID0gQWNjZXNzaWJpbGl0
eTo6ZmluZEFuY2VzdG9yPEFYQ29yZU9iamVjdD4oKm1fb2JqZWN0LCBmYWxzZSwgW10gKGNvbnN0
IEFYQ29yZU9iamVjdCYgb2JqZWN0KSB7CiAgICAgICAgIHJldHVybiBvYmplY3QuaXNGaWVsZHNl
dCgpOwogICAgIH0pKQogICAgICAgICByZXR1cm4gcGFyZW50LT53cmFwcGVyKCk7CkBAIC02MTcs
NyArNjE3LDcgQEAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKiBBY2Nlc3NpYmls
aXR5VW5pZ25vcmVkQW5jZXN0b3IoQWNjZXNzaWJpbGl0eU8KIAogLSAoQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIqKV9hY2Nlc3NpYmlsaXR5RnJhbWVBbmNlc3RvcgogewotICAgIGF1dG8qIHBh
cmVudCA9IEFjY2Vzc2liaWxpdHk6OmZpbmRBbmNlc3RvcjxBY2Nlc3NpYmlsaXR5T2JqZWN0Pigq
bV9vYmplY3QsIGZhbHNlLCBbXSAoY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCYgb2JqZWN0KSB7
CisgICAgYXV0byogcGFyZW50ID0gQWNjZXNzaWJpbGl0eTo6ZmluZEFuY2VzdG9yPEFYQ29yZU9i
amVjdD4oKm1fb2JqZWN0LCBmYWxzZSwgW10gKGNvbnN0IEFYQ29yZU9iamVjdCYgb2JqZWN0KSB7
CiAgICAgICAgIHJldHVybiBvYmplY3QuaXNXZWJBcmVhKCk7CiAgICAgfSk7CiAgICAgaWYgKCFw
YXJlbnQpCkBAIC02MzIsNyArNjMyLDcgQEAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyKiBBY2Nlc3NpYmlsaXR5VW5pZ25vcmVkQW5jZXN0b3IoQWNjZXNzaWJpbGl0eU8KICAgICAK
ICAgICAvLyBUcmFpdCBpbmZvcm1hdGlvbiBhbHNvIG5lZWRzIHRvIGJlIGdhdGhlcmVkIGZyb20g
dGhlIHBhcmVudHMgYWJvdmUgdGhlIG9iamVjdC4KICAgICAvLyBUaGUgcGFyZW50T2JqZWN0IGlz
IG5lZWRlZCBpbnN0ZWFkIG9mIHRoZSB1bmlnbm9yZWRQYXJlbnRPYmplY3QsIGJlY2F1c2UgYSB0
YWJsZSBtaWdodCBiZSBpZ25vcmVkLCBidXQgaW5mb3JtYXRpb24gc3RpbGwgbmVlZHMgdG8gYmUg
Z2F0aGVyZWQgZnJvbSBpdC4gICAgCi0gICAgZm9yIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJl
bnQgPSBtX29iamVjdC0+cGFyZW50T2JqZWN0KCk7IHBhcmVudCAhPSBuaWw7IHBhcmVudCA9IHBh
cmVudC0+cGFyZW50T2JqZWN0KCkpIHsKKyAgICBmb3IgKGF1dG8qIHBhcmVudCA9IG1fb2JqZWN0
LT5wYXJlbnRPYmplY3QoKTsgcGFyZW50ICE9IG5pbDsgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRP
YmplY3QoKSkgewogICAgICAgICBBY2Nlc3NpYmlsaXR5Um9sZSBwYXJlbnRSb2xlID0gcGFyZW50
LT5yb2xlVmFsdWUoKTsKICAgICAgICAgaWYgKHBhcmVudFJvbGUgPT0gQWNjZXNzaWJpbGl0eVJv
bGU6OldlYkFyZWEpCiAgICAgICAgICAgICBicmVhazsKQEAgLTExODIsNyArMTE4Miw3IEBAIHN0
YXRpYyB2b2lkIGFwcGVuZFN0cmluZ1RvUmVzdWx0KE5TTXV0YWJsZVN0cmluZyAqcmVzdWx0LCBO
U1N0cmluZyAqc3RyaW5nKQogLSAoQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbCopdGFibGVDZWxsUGFy
ZW50CiB7CiAgICAgLy8gRmluZCBpZiB0aGlzIGVsZW1lbnQgaXMgaW4gYSB0YWJsZSBjZWxsLgot
ICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBBY2Nlc3NpYmlsaXR5OjpmaW5k
QW5jZXN0b3I8QWNjZXNzaWJpbGl0eU9iamVjdD4oKm1fb2JqZWN0LCB0cnVlLCBbXSAoY29uc3Qg
QWNjZXNzaWJpbGl0eU9iamVjdCYgb2JqZWN0KSB7CisgICAgaWYgKEFYQ29yZU9iamVjdCogcGFy
ZW50ID0gQWNjZXNzaWJpbGl0eTo6ZmluZEFuY2VzdG9yPEFYQ29yZU9iamVjdD4oKm1fb2JqZWN0
LCB0cnVlLCBbXSAoY29uc3QgQVhDb3JlT2JqZWN0JiBvYmplY3QpIHsKICAgICAgICAgcmV0dXJu
IG9iamVjdC5pc1RhYmxlQ2VsbCgpOwogICAgIH0pKQogICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbCo+KHBhcmVudCk7CkBAIC0xMTkyLDcgKzExOTIsNyBA
QCBzdGF0aWMgdm9pZCBhcHBlbmRTdHJpbmdUb1Jlc3VsdChOU011dGFibGVTdHJpbmcgKnJlc3Vs
dCwgTlNTdHJpbmcgKnN0cmluZykKIC0gKEFjY2Vzc2liaWxpdHlUYWJsZSopdGFibGVQYXJlbnQK
IHsKICAgICAvLyBGaW5kIGlmIHRoZSBwYXJlbnQgdGFibGUgZm9yIHRoZSB0YWJsZSBjZWxsLgot
ICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBBY2Nlc3NpYmlsaXR5OjpmaW5k
QW5jZXN0b3I8QWNjZXNzaWJpbGl0eU9iamVjdD4oKm1fb2JqZWN0LCB0cnVlLCBbXSAoY29uc3Qg
QWNjZXNzaWJpbGl0eU9iamVjdCYgb2JqZWN0KSB7CisgICAgaWYgKEFYQ29yZU9iamVjdCogcGFy
ZW50ID0gQWNjZXNzaWJpbGl0eTo6ZmluZEFuY2VzdG9yPEFYQ29yZU9iamVjdD4oKm1fb2JqZWN0
LCB0cnVlLCBbXSAoY29uc3QgQVhDb3JlT2JqZWN0JiBvYmplY3QpIHsKICAgICAgICAgcmV0dXJu
IGlzPEFjY2Vzc2liaWxpdHlUYWJsZT4ob2JqZWN0KSAmJiBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5
VGFibGU+KG9iamVjdCkuaXNFeHBvc2FibGVUaHJvdWdoQWNjZXNzaWJpbGl0eSgpOwogICAgIH0p
KQogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlKj4ocGFyZW50
KTsKQEAgLTEyMDQsNyArMTIwNCw3IEBAIHN0YXRpYyB2b2lkIGFwcGVuZFN0cmluZ1RvUmVzdWx0
KE5TTXV0YWJsZVN0cmluZyAqcmVzdWx0LCBOU1N0cmluZyAqc3RyaW5nKQogICAgIGlmICghW3Nl
bGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAg
ICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiB0aXRsZUVsZW1lbnQgPSBtX29iamVjdC0+dGl0bGVVSUVs
ZW1lbnQoKTsKKyAgICBBWENvcmVPYmplY3QqIHRpdGxlRWxlbWVudCA9IG1fb2JqZWN0LT50aXRs
ZVVJRWxlbWVudCgpOwogICAgIGlmICh0aXRsZUVsZW1lbnQpCiAgICAgICAgIHJldHVybiB0aXRs
ZUVsZW1lbnQtPndyYXBwZXIoKTsKIApAQCAtMTM5OCw3ICsxMzk4LDcgQEAgc3RhdGljIHZvaWQg
YXBwZW5kU3RyaW5nVG9SZXN1bHQoTlNNdXRhYmxlU3RyaW5nICpyZXN1bHQsIE5TU3RyaW5nICpz
dHJpbmcpCiAgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKICAgICAg
ICAgcmV0dXJuIG5pbDsKIAotICAgIGlmIChhdXRvKiBwYXJlbnQgPSBBY2Nlc3NpYmlsaXR5Ojpm
aW5kQW5jZXN0b3I8QWNjZXNzaWJpbGl0eU9iamVjdD4oKm1fb2JqZWN0LCB0cnVlLCBbXSAoY29u
c3QgQWNjZXNzaWJpbGl0eU9iamVjdCYgb2JqZWN0KSB7CisgICAgaWYgKGF1dG8qIHBhcmVudCA9
IEFjY2Vzc2liaWxpdHk6OmZpbmRBbmNlc3RvcjxBWENvcmVPYmplY3Q+KCptX29iamVjdCwgdHJ1
ZSwgW10gKGNvbnN0IEFYQ29yZU9iamVjdCYgb2JqZWN0KSB7CiAgICAgICAgIHJldHVybiBvYmpl
Y3Quc3VwcG9ydHNEYXRldGltZUF0dHJpYnV0ZSgpOwogICAgIH0pKQogICAgICAgICByZXR1cm4g
cGFyZW50LT5kYXRldGltZUF0dHJpYnV0ZVZhbHVlKCk7CkBAIC0xOTY5LDMxICsxOTY5LDMxIEBA
IHN0YXRpYyBSZW5kZXJPYmplY3QqIHJlbmRlcmVyRm9yVmlldyhXQUtWaWV3KiB2aWV3KQogICAg
IHJldHVybiBtX29iamVjdC0+c2Nyb2xsVmlzaWJsZUNvbnRlbnRSZWN0KCk7CiB9CiAKLS0gKEFj
Y2Vzc2liaWxpdHlPYmplY3QqKWRldGFpbFBhcmVudEZvclN1bW1hcnlPYmplY3Q6KEFjY2Vzc2li
aWxpdHlPYmplY3QqKW9iamVjdAorLSAoQVhDb3JlT2JqZWN0KilkZXRhaWxQYXJlbnRGb3JTdW1t
YXJ5T2JqZWN0OihBWENvcmVPYmplY3QqKW9iamVjdAogewogICAgIC8vIFVzZSB0aGlzIHRvIGNo
ZWNrIGlmIGFuIG9iamVjdCBpcyB0aGUgY2hpbGQgb2YgYSBzdW1tYXJ5IG9iamVjdC4KICAgICAv
LyBBbmQgcmV0dXJuIHRoZSBzdW1tYXJ5J3MgcGFyZW50LCB3aGljaCBpcyB0aGUgZXhwYW5kYWJs
ZSBkZXRhaWxzIG9iamVjdC4KLSAgICBpZiAoY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCogc3Vt
bWFyeSA9IEFjY2Vzc2liaWxpdHk6OmZpbmRBbmNlc3RvcjxBY2Nlc3NpYmlsaXR5T2JqZWN0Pigq
b2JqZWN0LCB0cnVlLCBbXSAoY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCYgb2JqZWN0KSB7Cisg
ICAgaWYgKGNvbnN0IEFYQ29yZU9iamVjdCogc3VtbWFyeSA9IEFjY2Vzc2liaWxpdHk6OmZpbmRB
bmNlc3RvcjxBWENvcmVPYmplY3Q+KCpvYmplY3QsIHRydWUsIFtdIChjb25zdCBBWENvcmVPYmpl
Y3QmIG9iamVjdCkgewogICAgICAgICByZXR1cm4gb2JqZWN0Lmhhc1RhZ05hbWUoc3VtbWFyeVRh
Zyk7CiAgICAgfSkpCiAgICAgICAgIHJldHVybiBzdW1tYXJ5LT5wYXJlbnRPYmplY3QoKTsKICAg
ICByZXR1cm4gbmlsOwogfQogCi0tIChBY2Nlc3NpYmlsaXR5T2JqZWN0KilkZXRhaWxQYXJlbnRG
b3JPYmplY3Q6KEFjY2Vzc2liaWxpdHlPYmplY3QqKW9iamVjdAorLSAoQVhDb3JlT2JqZWN0Kilk
ZXRhaWxQYXJlbnRGb3JPYmplY3Q6KEFjY2Vzc2liaWxpdHlPYmplY3QqKW9iamVjdAogewogICAg
IC8vIFVzZSB0aGlzIHRvIGNoZWNrIGlmIGFuIG9iamVjdCBpcyBpbnNpZGUgYSBkZXRhaWxzIG9i
amVjdC4KLSAgICBpZiAoY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCogZGV0YWlscyA9IEFjY2Vz
c2liaWxpdHk6OmZpbmRBbmNlc3RvcjxBY2Nlc3NpYmlsaXR5T2JqZWN0Pigqb2JqZWN0LCB0cnVl
LCBbXSAoY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCYgb2JqZWN0KSB7CisgICAgaWYgKEFYQ29y
ZU9iamVjdCogZGV0YWlscyA9IEFjY2Vzc2liaWxpdHk6OmZpbmRBbmNlc3RvcjxBWENvcmVPYmpl
Y3Q+KCpvYmplY3QsIHRydWUsIFtdIChjb25zdCBBWENvcmVPYmplY3QmIG9iamVjdCkgewogICAg
ICAgICByZXR1cm4gb2JqZWN0Lmhhc1RhZ05hbWUoZGV0YWlsc1RhZyk7CiAgICAgfSkpCi0gICAg
ICAgIHJldHVybiBjb25zdF9jYXN0PEFjY2Vzc2liaWxpdHlPYmplY3QqPihkZXRhaWxzKTsKKyAg
ICAgICAgcmV0dXJuIGRldGFpbHM7CiAgICAgcmV0dXJuIG5pbDsKIH0KIAotLSAoQWNjZXNzaWJp
bGl0eU9iamVjdCopdHJlZUl0ZW1QYXJlbnRGb3JPYmplY3Q6KEFjY2Vzc2liaWxpdHlPYmplY3Qq
KW9iamVjdAorLSAoQVhDb3JlT2JqZWN0Kil0cmVlSXRlbVBhcmVudEZvck9iamVjdDooQVhDb3Jl
T2JqZWN0KilvYmplY3QKIHsKICAgICAvLyBVc2UgdGhpcyB0byBjaGVjayBpZiBhbiBvYmplY3Qg
aXMgaW5zaWRlIGEgdHJlZWl0ZW0gb2JqZWN0LgotICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBwYXJlbnQgPSBBY2Nlc3NpYmlsaXR5OjpmaW5kQW5jZXN0b3I8QWNjZXNzaWJpbGl0eU9iamVj
dD4oKm9iamVjdCwgdHJ1ZSwgW10gKGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3QmIG9iamVjdCkg
eworICAgIGlmIChBWENvcmVPYmplY3QqIHBhcmVudCA9IEFjY2Vzc2liaWxpdHk6OmZpbmRBbmNl
c3RvcjxBWENvcmVPYmplY3Q+KCpvYmplY3QsIHRydWUsIFtdIChjb25zdCBBWENvcmVPYmplY3Qm
IG9iamVjdCkgewogICAgICAgICByZXR1cm4gb2JqZWN0LnJvbGVWYWx1ZSgpID09IEFjY2Vzc2li
aWxpdHlSb2xlOjpUcmVlSXRlbTsKICAgICB9KSkKICAgICAgICAgcmV0dXJuIHBhcmVudDsKQEAg
LTIyMDcsMTEgKzIyMDcsMTEgQEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVTdHJpbmdTZXRTdHls
ZShOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLCBSZW4KIAogICAgIC8vIEFk
ZCBjb2RlIGNvbnRleHQgaWYgdGhpcyBub2RlIGlzIHdpdGhpbiBhIDxjb2RlPiBibG9jay4KICAg
ICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBheE9iamVjdCA9IHJlbmRlcmVyLT5kb2N1bWVudCgpLmF4
T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUocmVuZGVyZXIpOwotICAgIGF1dG8gbWF0Y2hGdW5j
ID0gW10gKGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3QmIG9iamVjdCkgeworICAgIGF1dG8gbWF0
Y2hGdW5jID0gW10gKGNvbnN0IEFYQ29yZU9iamVjdCYgb2JqZWN0KSB7CiAgICAgICAgIHJldHVy
biBvYmplY3Qubm9kZSgpICYmIG9iamVjdC5ub2RlKCktPmhhc1RhZ05hbWUoY29kZVRhZyk7CiAg
ICAgfTsKIAotICAgIGlmIChjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBBY2Nl
c3NpYmlsaXR5OjpmaW5kQW5jZXN0b3I8QWNjZXNzaWJpbGl0eU9iamVjdD4oKmF4T2JqZWN0LCB0
cnVlLCBXVEZNb3ZlKG1hdGNoRnVuYykpKQorICAgIGlmIChjb25zdCBBWENvcmVPYmplY3QqIHBh
cmVudCA9IEFjY2Vzc2liaWxpdHk6OmZpbmRBbmNlc3RvcjxBWENvcmVPYmplY3Q+KCpheE9iamVj
dCwgdHJ1ZSwgV1RGTW92ZShtYXRjaEZ1bmMpKSkKICAgICAgICAgW2F0dHJTdHJpbmcgYWRkQXR0
cmlidXRlOlVJQWNjZXNzaWJpbGl0eVRleHRBdHRyaWJ1dGVDb250ZXh0IHZhbHVlOlVJQWNjZXNz
aWJpbGl0eVRleHR1YWxDb250ZXh0U291cmNlQ29kZSByYW5nZTpyYW5nZV07CiB9CiAKQEAgLTIy
ODIsNyArMjI4Miw3IEBAIHN0YXRpYyB2b2lkIEFYQXR0cmlidXRlZFN0cmluZ0FwcGVuZFRleHQo
TlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0clN0cmluZywKICAgICAgICAgICAgICAgICBp
ZiAoW3NlbGYgX2FkZEFjY2Vzc2liaWxpdHlPYmplY3Q6aGVhZGluZ09iamVjdCB0b1RleHRNYXJr
ZXJBcnJheTphcnJheV0pCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIFN0cmluZyBsaXN0TWFya2VyVGV4dCA9IG1fb2JqZWN0
LT5saXN0TWFya2VyVGV4dEZvck5vZGVBbmRQb3NpdGlvbigmbm9kZSwgVmlzaWJsZVBvc2l0aW9u
KGl0LnJhbmdlKCktPnN0YXJ0UG9zaXRpb24oKSkpOworICAgICAgICAgICAgICAgIFN0cmluZyBs
aXN0TWFya2VyVGV4dCA9IEFjY2Vzc2liaWxpdHlPYmplY3Q6Omxpc3RNYXJrZXJUZXh0Rm9yTm9k
ZUFuZFBvc2l0aW9uKCZub2RlLCBWaXNpYmxlUG9zaXRpb24oaXQucmFuZ2UoKS0+c3RhcnRQb3Np
dGlvbigpKSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKCFsaXN0TWFy
a2VyVGV4dC5pc0VtcHR5KCkpIAogICAgICAgICAgICAgICAgICAgICBbYXJyYXkgYWRkT2JqZWN0
Omxpc3RNYXJrZXJUZXh0XTsKQEAgLTIyOTEsNyArMjI5MSw3IEBAIHN0YXRpYyB2b2lkIEFYQXR0
cmlidXRlZFN0cmluZ0FwcGVuZFRleHQoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0clN0
cmluZywKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBTdHJpbmcgbGlzdE1hcmtlclRleHQgPSBtX29iamVjdC0+bGlzdE1hcmtl
clRleHRGb3JOb2RlQW5kUG9zaXRpb24oJm5vZGUsIFZpc2libGVQb3NpdGlvbihpdC5yYW5nZSgp
LT5zdGFydFBvc2l0aW9uKCkpKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgbGlzdE1hcmtlclRl
eHQgPSBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpsaXN0TWFya2VyVGV4dEZvck5vZGVBbmRQb3NpdGlv
bigmbm9kZSwgVmlzaWJsZVBvc2l0aW9uKGl0LnJhbmdlKCktPnN0YXJ0UG9zaXRpb24oKSkpOwog
CiAgICAgICAgICAgICAgICAgaWYgKCFsaXN0TWFya2VyVGV4dC5pc0VtcHR5KCkpIHsKICAgICAg
ICAgICAgICAgICAgICAgTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0clN0cmluZyA9IFtb
TlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdF07CkBAIC0yOTQxLDEwICsyOTQx
LDEwIEBAIHN0YXRpYyB2b2lkIEFYQXR0cmlidXRlZFN0cmluZ0FwcGVuZFRleHQoTlNNdXRhYmxl
QXR0cmlidXRlZFN0cmluZyogYXR0clN0cmluZywKICAgICAKICAgICAvLyBTaW5jZSBkZXRhaWxz
IGVsZW1lbnQgaXMgaWdub3JlZCBvbiBpT1MsIHdlIHNob3VsZCBleHBvc2UgdGhlIGV4cGFuZGVk
IHN0YXR1cyBvbiBpdHMKICAgICAvLyBzdW1tYXJ5J3MgYWNjZXNzaWJsZSBjaGlsZHJlbi4KLSAg
ICBpZiAoQWNjZXNzaWJpbGl0eU9iamVjdCogZGV0YWlsUGFyZW50ID0gW3NlbGYgZGV0YWlsUGFy
ZW50Rm9yU3VtbWFyeU9iamVjdDptX29iamVjdF0pCisgICAgaWYgKEFYQ29yZU9iamVjdCogZGV0
YWlsUGFyZW50ID0gW3NlbGYgZGV0YWlsUGFyZW50Rm9yU3VtbWFyeU9iamVjdDptX29iamVjdF0p
CiAgICAgICAgIHJldHVybiBkZXRhaWxQYXJlbnQtPnN1cHBvcnRzRXhwYW5kZWQoKTsKICAgICAK
LSAgICBpZiAoQWNjZXNzaWJpbGl0eU9iamVjdCogdHJlZUl0ZW1QYXJlbnQgPSBbc2VsZiB0cmVl
SXRlbVBhcmVudEZvck9iamVjdDptX29iamVjdF0pCisgICAgaWYgKEFYQ29yZU9iamVjdCogdHJl
ZUl0ZW1QYXJlbnQgPSBbc2VsZiB0cmVlSXRlbVBhcmVudEZvck9iamVjdDptX29iamVjdF0pCiAg
ICAgICAgIHJldHVybiB0cmVlSXRlbVBhcmVudC0+c3VwcG9ydHNFeHBhbmRlZCgpOwogICAgIAog
ICAgIHJldHVybiBtX29iamVjdC0+c3VwcG9ydHNFeHBhbmRlZCgpOwpAQCAtMjk1NywxMCArMjk1
NywxMCBAQCBzdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZWRTdHJpbmdBcHBlbmRUZXh0KE5TTXV0YWJs
ZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcsCiAKICAgICAvLyBTaW5jZSBkZXRhaWxzIGVs
ZW1lbnQgaXMgaWdub3JlZCBvbiBpT1MsIHdlIHNob3VsZCBleHBvc2UgdGhlIGV4cGFuZGVkIHN0
YXR1cyBvbiBpdHMKICAgICAvLyBzdW1tYXJ5J3MgYWNjZXNzaWJsZSBjaGlsZHJlbi4KLSAgICBp
ZiAoQWNjZXNzaWJpbGl0eU9iamVjdCogZGV0YWlsUGFyZW50ID0gW3NlbGYgZGV0YWlsUGFyZW50
Rm9yU3VtbWFyeU9iamVjdDptX29iamVjdF0pCisgICAgaWYgKEFYQ29yZU9iamVjdCogZGV0YWls
UGFyZW50ID0gW3NlbGYgZGV0YWlsUGFyZW50Rm9yU3VtbWFyeU9iamVjdDptX29iamVjdF0pCiAg
ICAgICAgIHJldHVybiBkZXRhaWxQYXJlbnQtPmlzRXhwYW5kZWQoKTsKICAgICAKLSAgICBpZiAo
QWNjZXNzaWJpbGl0eU9iamVjdCogdHJlZUl0ZW1QYXJlbnQgPSBbc2VsZiB0cmVlSXRlbVBhcmVu
dEZvck9iamVjdDptX29iamVjdF0pCisgICAgaWYgKEFYQ29yZU9iamVjdCogdHJlZUl0ZW1QYXJl
bnQgPSBbc2VsZiB0cmVlSXRlbVBhcmVudEZvck9iamVjdDptX29iamVjdF0pCiAgICAgICAgIHJl
dHVybiB0cmVlSXRlbVBhcmVudC0+aXNFeHBhbmRlZCgpOwogICAgIAogICAgIHJldHVybiBtX29i
amVjdC0+aXNFeHBhbmRlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWUuY3BwCmluZGV4IDU4NmFkZjA2
NzJmNzZlYTM1OGU5ZGIxZDdiODA1NmYyMjM3YTA2OTguLmNmZjk3MDdlMDU4NWE4ZjU2N2M1OWMx
NjlmOTdmOGYzNGU2NWVkYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRUcmVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZS5jcHAKQEAgLTExNCwxMCAr
MTE0LDExIEBAIFJlZlB0cjxBWElzb2xhdGVkVHJlZU5vZGU+IEFYSXNvbGF0ZWRUcmVlOjpyb290
Tm9kZSgpCiAgICAgcmV0dXJuIG5vZGVGb3JJRChtX3Jvb3ROb2RlSUQpOwogfQogCi12b2lkIEFY
SXNvbGF0ZWRUcmVlOjpzZXRSb290Tm9kZUlEKEFYSUQgYXhJRCkKK3ZvaWQgQVhJc29sYXRlZFRy
ZWU6OnNldFJvb3QoUmVmPEFYSXNvbGF0ZWRUcmVlTm9kZT4mIHJvb3QpCiB7CiAgICAgTG9ja0hv
bGRlciBsb2NrZXIgeyBtX2NoYW5nZUxvZ0xvY2sgfTsKLSAgICBtX3BlbmRpbmdSb290Tm9kZUlE
ID0gYXhJRDsKKyAgICBtX3Jvb3ROb2RlSUQgPSByb290LT5vYmplY3RJRCgpOworICAgIG1fcmVh
ZGVyVGhyZWFkTm9kZU1hcC5hZGQocm9vdC0+b2JqZWN0SUQoKSwgV1RGTW92ZShyb290KSk7CiB9
CiAgICAgCiB2b2lkIEFYSXNvbGF0ZWRUcmVlOjpzZXRGb2N1c2VkTm9kZUlEKEFYSUQgYXhJRCkK
QEAgLTE1MCwxMSArMTUxLDEwIEBAIHZvaWQgQVhJc29sYXRlZFRyZWU6OmFwcGx5UGVuZGluZ0No
YW5nZXMoKQogCiAgICAgLy8gV2UgZG9uJ3QgY2xlYXIgdGhlIHBlbmRpbmcgSURzIGJlYWNhdXNl
IGlmIHRoZSBuZXh0IHJvdW5kIG9mIHVwZGF0ZXMgZG9lcyBub3QgbW9kaWZ5IHRoZW0sIHRoZW4g
dGhleSBzdGF5IHRoZSBzYW1lCiAgICAgLy8gdmFsdWUgd2l0aG91dCBleHRyYSBib29ra2VlcGlu
Zy4KLSAgICBtX3Jvb3ROb2RlSUQgPSBtX3BlbmRpbmdSb290Tm9kZUlEOwogICAgIG1fZm9jdXNl
ZE5vZGVJRCA9IG1fcGVuZGluZ0ZvY3VzZWROb2RlSUQ7Ci0gICAgCisKICAgICBmb3IgKGF1dG8m
IGl0ZW0gOiBhcHBlbmRDb3B5KQotICAgICAgICBtX3JlYWRlclRocmVhZE5vZGVNYXAuYWRkKGl0
ZW0tPmlkZW50aWZpZXIoKSwgV1RGTW92ZShpdGVtKSk7CisgICAgICAgIG1fcmVhZGVyVGhyZWFk
Tm9kZU1hcC5hZGQoaXRlbS0+b2JqZWN0SUQoKSwgV1RGTW92ZShpdGVtKSk7CiAKICAgICBmb3Ig
KGF1dG8gaXRlbSA6IHJlbW92ZUNvcHkpCiAgICAgICAgIG1fcmVhZGVyVGhyZWFkTm9kZU1hcC5y
ZW1vdmUoaXRlbSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lz
b2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZS5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWUuaAppbmRleCA2YWJkNzgzYzExMmUxZmI2OWQ0
NWM1NzlmYWNmZWRhZDkyMjM1NjI5Li5kYWYzM2ZjMGQ3YjY4ZGFhMTY2NDFhODM0NzYyMWZiYmRj
Y2U5YmExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVk
dHJlZS9BWElzb2xhdGVkVHJlZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
aXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRUcmVlLmgKQEAgLTU3LDcgKzU3LDcgQEAgcHVibGljOgog
ICAgIHZvaWQgYXBwZW5kTm9kZUNoYW5nZXMoVmVjdG9yPFJlZjxBWElzb2xhdGVkVHJlZU5vZGU+
PiYpOwogICAgIHZvaWQgcmVtb3ZlTm9kZShBWElEKTsKIAotICAgIHZvaWQgc2V0Um9vdE5vZGVJ
RChBWElEKTsKKyAgICB2b2lkIHNldFJvb3QoUmVmPEFYSXNvbGF0ZWRUcmVlTm9kZT4mKTsKICAg
ICB2b2lkIHNldEZvY3VzZWROb2RlSUQoQVhJRCk7CiAgICAgCiAgICAgLy8gQ2FsbCBvbiBBWCB0
aHJlYWQKQEAgLTc4LDcgKzc4LDYgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8UmVmPEFYSXNvbGF0
ZWRUcmVlTm9kZT4+IG1fcGVuZGluZ0FwcGVuZHM7CiAgICAgVmVjdG9yPEFYSUQ+IG1fcGVuZGlu
Z1JlbW92YWxzOwogICAgIEFYSUQgbV9wZW5kaW5nRm9jdXNlZE5vZGVJRDsKLSAgICBBWElEIG1f
cGVuZGluZ1Jvb3ROb2RlSUQ7CiAgICAgTG9jayBtX2NoYW5nZUxvZ0xvY2s7CiAKICAgICBBWElz
b2xhdGVkVHJlZUlEIG1fdHJlZUlEOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWVOb2RlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRUcmVlTm9kZS5jcHAKaW5k
ZXggNzkzOTI5OTUxZGQyZGM2YTQwMWM0NTgyNjY4NmFlZTIzOWE3M2IyMS4uY2FlODc4MzhmYmQ1
ZDgyNmE5Y2NiNDk1ZjQ2NjA2NTI4OTI5OGU2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWVOb2RlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZU5v
ZGUuY3BwCkBAIC0zMCwxMCArMzAsMTIgQEAKIAogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlPYmpl
Y3QuaCIKIAorZXh0ZXJuICJDIiBib29sIF9BWFVJRWxlbWVudFJlcXVlc3RTZXJ2aWNlZEJ5U2Vj
b25kYXJ5QVhUaHJlYWQodm9pZCk7CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQVhJc29sYXRl
ZFRyZWVOb2RlOjpBWElzb2xhdGVkVHJlZU5vZGUoY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCYg
b2JqZWN0KQotICAgIDogbV9pZGVudGlmaWVyKG9iamVjdC5heE9iamVjdElEKCkpCitBWElzb2xh
dGVkVHJlZU5vZGU6OkFYSXNvbGF0ZWRUcmVlTm9kZShjb25zdCBBWENvcmVPYmplY3QmIG9iamVj
dCkKKyAgICA6IG1faWQob2JqZWN0Lm9iamVjdElEKCkpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKICAgICBpbml0aWFsaXplQXR0cmlidXRlRGF0YShvYmplY3QpOwpAQCAtNDIsMTQg
KzQ0LDE0IEBAIEFYSXNvbGF0ZWRUcmVlTm9kZTo6QVhJc29sYXRlZFRyZWVOb2RlKGNvbnN0IEFj
Y2Vzc2liaWxpdHlPYmplY3QmIG9iamVjdCkKICNlbmRpZgogfQogCi1SZWY8QVhJc29sYXRlZFRy
ZWVOb2RlPiBBWElzb2xhdGVkVHJlZU5vZGU6OmNyZWF0ZShjb25zdCBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0JiBvYmplY3QpCitSZWY8QVhJc29sYXRlZFRyZWVOb2RlPiBBWElzb2xhdGVkVHJlZU5vZGU6
OmNyZWF0ZShjb25zdCBBWENvcmVPYmplY3QmIG9iamVjdCkKIHsKICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBBWElzb2xhdGVkVHJlZU5vZGUob2JqZWN0KSk7CiB9CiAKIEFYSXNvbGF0ZWRUcmVl
Tm9kZTo6fkFYSXNvbGF0ZWRUcmVlTm9kZSgpID0gZGVmYXVsdDsKIAotdm9pZCBBWElzb2xhdGVk
VHJlZU5vZGU6OmluaXRpYWxpemVBdHRyaWJ1dGVEYXRhKGNvbnN0IEFjY2Vzc2liaWxpdHlPYmpl
Y3QmIG9iamVjdCkKK3ZvaWQgQVhJc29sYXRlZFRyZWVOb2RlOjppbml0aWFsaXplQXR0cmlidXRl
RGF0YShjb25zdCBBWENvcmVPYmplY3QmIG9iamVjdCkKIHsKICAgICBzZXRQcm9wZXJ0eShBWFBy
b3BlcnR5TmFtZTo6Um9sZVZhbHVlLCBzdGF0aWNfY2FzdDxpbnQ+KG9iamVjdC5yb2xlVmFsdWUo
KSkpOwogICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc0F0dGFjaG1lbnQsIG9iamVj
dC5pc0F0dGFjaG1lbnQoKSk7CkBAIC04Miw3ICs4NCw3IEBAIHZvaWQgQVhJc29sYXRlZFRyZWVO
b2RlOjpzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEF0dHJpYnV0ZVZh
bHVlCiB2b2lkIEFYSXNvbGF0ZWRUcmVlTm9kZTo6YXBwZW5kQ2hpbGQoQVhJRCBheElEKQogewog
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgbV9jaGlsZHJlbi5hcHBlbmQoYXhJRCk7
CisgICAgbV9jaGlsZHJlbklEcy5hcHBlbmQoYXhJRCk7CiB9CiAKIHZvaWQgQVhJc29sYXRlZFRy
ZWVOb2RlOjpzZXRQYXJlbnQoQVhJRCBwYXJlbnQpCkBAIC05OCw2ICsxMDAsMTggQEAgdm9pZCBB
WElzb2xhdGVkVHJlZU5vZGU6OnNldFRyZWVJZGVudGlmaWVyKEFYSXNvbGF0ZWRUcmVlSUQgdHJl
ZUlkZW50aWZpZXIpCiAgICAgICAgIG1fY2FjaGVkVHJlZSA9IHRyZWU7CiB9CiAKK2NvbnN0IEFY
Q29yZU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBBWElzb2xhdGVkVHJlZU5v
ZGU6OmNoaWxkcmVuKGJvb2wpCit7CisgICAgaWYgKF9BWFVJRWxlbWVudFJlcXVlc3RTZXJ2aWNl
ZEJ5U2Vjb25kYXJ5QVhUaHJlYWQoKSkgeworICAgICAgICBtX2NoaWxkcmVuLmNsZWFyKCk7Cisg
ICAgICAgIG1fY2hpbGRyZW4ucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2NoaWxkcmVuSURzLnNp
emUoKSk7CisgICAgICAgIGF1dG8gdHJlZSA9IHRoaXMtPnRyZWUoKTsKKyAgICAgICAgZm9yIChh
dXRvIGNoaWxkSUQgOiBtX2NoaWxkcmVuSURzKQorICAgICAgICAgICAgbV9jaGlsZHJlbi51bmNo
ZWNrZWRBcHBlbmQodHJlZS0+bm9kZUZvcklEKGNoaWxkSUQpKTsKKyAgICB9CisgICAgcmV0dXJu
IG1fY2hpbGRyZW47Cit9CisKIEFYQ29yZU9iamVjdCogQVhJc29sYXRlZFRyZWVOb2RlOjpmb2N1
c2VkVUlFbGVtZW50KCkgY29uc3QKIHsKICAgICBpZiAoYXV0byBmb2N1c2VkRWxlbWVudCA9IHRy
ZWUoKS0+Zm9jdXNlZFVJRWxlbWVudCgpKQpAQCAtMTA1LDcgKzExOSw3IEBAIEFYQ29yZU9iamVj
dCogQVhJc29sYXRlZFRyZWVOb2RlOjpmb2N1c2VkVUlFbGVtZW50KCkgY29uc3QKICAgICByZXR1
cm4gbnVsbHB0cjsKIH0KICAgICAKLUFYQ29yZU9iamVjdCogQVhJc29sYXRlZFRyZWVOb2RlOjpw
YXJlbnRPYmplY3RJbnRlcmZhY2VVbmlnbm9yZWQoKSBjb25zdAorQVhDb3JlT2JqZWN0KiBBWElz
b2xhdGVkVHJlZU5vZGU6OnBhcmVudE9iamVjdFVuaWdub3JlZCgpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIHRyZWUoKS0+bm9kZUZvcklEKHBhcmVudCgpKS5nZXQoKTsKIH0KQEAgLTExNCw3ICsxMjgs
NyBAQCBBWENvcmVPYmplY3QqIEFYSXNvbGF0ZWRUcmVlTm9kZTo6YWNjZXNzaWJpbGl0eUhpdFRl
c3QoY29uc3QgSW50UG9pbnQmIHBvaW50KSBjbwogewogICAgIGlmICghcmVsYXRpdmVGcmFtZSgp
LmNvbnRhaW5zKHBvaW50KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgZm9yIChhdXRv
IGNoaWxkSUQgOiBjaGlsZHJlbigpKSB7CisgICAgZm9yIChjb25zdCBhdXRvJiBjaGlsZElEIDog
bV9jaGlsZHJlbklEcykgewogICAgICAgICBhdXRvIGNoaWxkID0gdHJlZSgpLT5ub2RlRm9ySUQo
Y2hpbGRJRCk7CiAgICAgICAgIEFTU0VSVChjaGlsZCk7CiAgICAgICAgIGlmIChjaGlsZCAmJiBj
aGlsZC0+cmVsYXRpdmVGcmFtZSgpLmNvbnRhaW5zKHBvaW50KSkKQEAgLTE4Niw2ICsyMDAsMTUg
QEAgaW50IEFYSXNvbGF0ZWRUcmVlTm9kZTo6aW50QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lKSBjb25zdAogICAgICk7CiB9CiAKK3ZvaWQgQVhJc29sYXRlZFRyZWVO
b2RlOjp1cGRhdGVCYWNraW5nU3RvcmUoKQoreworICAgIGlmIChfQVhVSUVsZW1lbnRSZXF1ZXN0
U2VydmljZWRCeVNlY29uZGFyeUFYVGhyZWFkKCkpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
IWlzTWFpblRocmVhZCgpKTsKKyAgICAgICAgaWYgKGF1dG8gdHJlZSA9IHRoaXMtPnRyZWUoKSkK
KyAgICAgICAgICAgIHRyZWUtPmFwcGx5UGVuZGluZ0NoYW5nZXMoKTsKKyAgICB9Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRSgoQUNDRVNTSUJJTElUWV9J
U09MQVRFRF9UUkVFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9p
c29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWVOb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZU5vZGUuaAppbmRleCBjMzU0NmZiZTgy
NzUyZTk5ZWZhYTdlZGRmYTYyNzY3NmQ1NDJhNjBmLi4yY2UwMDhmYzAwYjM4YTIxYTlkNGUzOTI0
OTIyYTdmM2Y4YWE5N2I3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZU5vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZU5vZGUuaApAQCAtMzEsNiAr
MzEsNyBAQAogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlPYmplY3RJbnRlcmZhY2UuaCIKICNpbmNs
dWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJJbnRQb2ludC5oIgorI2luY2x1ZGUgIlBhdGgu
aCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtNDMsMTEgKzQ0LDU5OCBAQAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBBWElzb2xhdGVkVHJlZTsKLWNsYXNzIEFjY2Vzc2liaWxpdHlPYmpl
Y3Q7Ci0KLWNsYXNzIEFYSXNvbGF0ZWRUcmVlTm9kZSBmaW5hbCA6IHB1YmxpYyBBWENvcmVPYmpl
Y3QsIHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxBWElzb2xhdGVkVHJlZU5vZGU+IHsKIAor
Y2xhc3MgQVhJc29sYXRlZFRyZWVOb2RlIGZpbmFsIDogcHVibGljIEFYQ29yZU9iamVjdCB7CiBw
dWJsaWM6CisgICAgc3RhdGljIFJlZjxBWElzb2xhdGVkVHJlZU5vZGU+IGNyZWF0ZShjb25zdCBB
WENvcmVPYmplY3QmKTsKKyAgICB+QVhJc29sYXRlZFRyZWVOb2RlKCk7CisKKyAgICB2b2lkIHNl
dE9iamVjdElEKEFYSUQgaWQpIG92ZXJyaWRlIHsgbV9pZCA9IGlkOyB9CisgICAgQVhJRCBvYmpl
Y3RJRCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1faWQ7IH0KKyAgICB2b2lkIGluaXQoKSBv
dmVycmlkZSB7IH0KKworICAgIHZvaWQgZGV0YWNoKEFjY2Vzc2liaWxpdHlEZXRhY2htZW50VHlw
ZSwgQVhPYmplY3RDYWNoZSogPSBudWxscHRyKSBvdmVycmlkZSB7IH0KKyAgICBib29sIGlzRGV0
YWNoZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorCitwcml2YXRlOgorICAg
IGJvb2wgaXNBY2Nlc3NpYmlsaXR5T2JqZWN0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICBib29sIGlzQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzQWNjZXNzaWJp
bGl0eVNjcm9sbGJhcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9v
bCBpc0FjY2Vzc2liaWxpdHlTY3JvbGxWaWV3KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICBib29sIGlzQWNjZXNzaWJpbGl0eVNWR1Jvb3QoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNBY2Nlc3NpYmlsaXR5U1ZHRWxlbWVudCgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICBib29sIGNvbnRhaW5zVGV4dChT
dHJpbmcgKikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzQXR0
YWNobWVudEVsZW1lbnQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJv
b2wgaXNIZWFkaW5nKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29s
IGlzTGluaygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFBy
b3BlcnR5TmFtZTo6SXNMaW5rKTsgfQorICAgIGJvb2wgaXNJbWFnZSgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNJbWFnZSk7IH0K
KyAgICBib29sIGlzSW1hZ2VNYXAoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQor
ICAgIGJvb2wgaXNOYXRpdmVJbWFnZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9
CisgICAgYm9vbCBpc0ltYWdlQnV0dG9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7
IH0KKyAgICBib29sIGlzUGFzc3dvcmRGaWVsZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgYm9vbCBpc0NvbnRhaW5lZEJ5UGFzc3dvcmRGaWVsZCgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgQVhDb3JlT2JqZWN0KiBwYXNzd29yZEZpZWxkT3JD
b250YWluaW5nUGFzc3dvcmRGaWVsZCgpIG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAg
ICBib29sIGlzTmF0aXZlVGV4dENvbnRyb2woKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxz
ZTsgfQorICAgIGJvb2wgaXNTZWFyY2hGaWVsZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgYm9vbCBpc1dlYkFyZWEoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxz
ZTsgfQorICAgIGJvb2wgaXNDaGVja2JveCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNl
OyB9CisgICAgYm9vbCBpc1JhZGlvQnV0dG9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICBib29sIGlzTmF0aXZlTGlzdEJveCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgYm9vbCBpc0xpc3RCb3goKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBm
YWxzZTsgfQorICAgIGJvb2wgaXNMaXN0Qm94T3B0aW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICBib29sIGlzQXR0YWNobWVudCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNBdHRhY2htZW50KTsgfQor
ICAgIGJvb2wgaXNNZWRpYVRpbWVsaW5lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7
IH0KKyAgICBib29sIGlzTWVudVJlbGF0ZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxz
ZTsgfQorICAgIGJvb2wgaXNNZW51KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0K
KyAgICBib29sIGlzTWVudUJhcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Cisg
ICAgYm9vbCBpc01lbnVCdXR0b24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQor
ICAgIGJvb2wgaXNNZW51SXRlbSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Cisg
ICAgYm9vbCBpc0ZpbGVVcGxvYWRCdXR0b24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29s
QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzRmlsZVVwbG9hZEJ1dHRvbik7IH0KKyAg
ICBib29sIGlzSW5wdXRJbWFnZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Cisg
ICAgYm9vbCBpc1Byb2dyZXNzSW5kaWNhdG9yKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICBib29sIGlzU2xpZGVyKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7
IH0KKyAgICBib29sIGlzU2xpZGVyVGh1bWIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxz
ZTsgfQorICAgIGJvb2wgaXNJbnB1dFNsaWRlcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgYm9vbCBpc0NvbnRyb2woKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxz
ZTsgfQorICAgIGJvb2wgaXNMYWJlbCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9
CisgICAgYm9vbCBpc0xpc3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAg
IGJvb2wgaXNUYWJsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9v
bCBpc0RhdGFUYWJsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9v
bCBpc1RhYmxlUm93KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29s
IGlzVGFibGVDb2x1bW4oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJv
b2wgaXNUYWJsZUNlbGwoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJv
b2wgaXNGaWVsZHNldCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9v
bCBpc0dyb3VwKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlz
QVJJQVRyZWVHcmlkUm93KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBi
b29sIGlzSW1hZ2VNYXBMaW5rKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0
ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc0ltYWdlTWFwTGluayk7IH0KKyAgICBib29sIGlzTWVu
dUxpc3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNNZW51
TGlzdFBvcHVwKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlz
TWVudUxpc3RPcHRpb24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJv
b2wgaXNTcGluQnV0dG9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBi
b29sIGlzTmF0aXZlU3BpbkJ1dHRvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9
CisgICAgYm9vbCBpc1NwaW5CdXR0b25QYXJ0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICBib29sIGlzTW9ja09iamVjdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgYm9vbCBpc01lZGlhQ29udHJvbExhYmVsKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc01lZGlhQ29udHJvbExh
YmVsKTsgfQorICAgIGJvb2wgaXNNZWRpYU9iamVjdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgYm9vbCBpc1N3aXRjaCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgYm9vbCBpc1RvZ2dsZUJ1dHRvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgYm9vbCBpc1RleHRDb250cm9sKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICBib29sIGlzQVJJQVRleHRDb250cm9sKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzTm9uTmF0aXZlVGV4dENvbnRyb2woKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNUYWJMaXN0KCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzVGFiSXRlbSgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc1JhZGlvR3JvdXAoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNDb21ib0JveCgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc1RyZWUoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzVHJlZSk7IH0K
KyAgICBib29sIGlzVHJlZUdyaWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQor
ICAgIGJvb2wgaXNUcmVlSXRlbSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJvb2xBdHRyaWJ1
dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNUcmVlSXRlbSk7IH0KKyAgICBib29sIGlzU2Nyb2xs
YmFyKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVy
dHlOYW1lOjpJc1Njcm9sbGJhcik7IH0KKyAgICBib29sIGlzQnV0dG9uKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzTGlzdEl0ZW0oKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNDaGVja2JveE9yUmFkaW8oKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNTY3JvbGxWaWV3KCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzQ2FudmFzKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzUG9wVXBCdXR0b24oKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNCbG9ja3F1b3RlKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzTGFuZG1hcmsoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNDb2xvcldlbGwoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNSYW5nZUNvbnRyb2woKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNNZXRlcigpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc1NwbGl0dGVyKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzVG9vbGJhcigpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc1N0eWxlRm9ybWF0R3JvdXAoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNGaWd1cmVFbGVtZW50KCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzS2V5Ym9hcmRGb2N1
c2FibGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNTdW1t
YXJ5KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzT3V0cHV0
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIGJvb2wgaXNDaGVja2Vk
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzRW5hYmxlZCgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc1NlbGVjdGVkKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzRm9jdXNlZCgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc0hvdmVyZWQoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNJbmRldGVybWluYXRlKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzTG9hZGVkKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzTXVsdGlTZWxlY3RhYmxl
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzT25TY3JlZW4o
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNPZmZTY3JlZW4o
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAhaXNPblNjcmVlbigpOyB9CisgICAgYm9vbCBpc1By
ZXNzZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNVbnZp
c2l0ZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNWaXNp
dGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzUmVxdWly
ZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgc3VwcG9ydHNS
ZXF1aXJlZEF0dHJpYnV0ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAg
Ym9vbCBpc0xpbmtlZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9v
bCBpc0V4cGFuZGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29s
IGlzVmlzaWJsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBp
c0NvbGxhcHNlZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdm9pZCBz
ZXRJc0V4cGFuZGVkKGJvb2wpIG92ZXJyaWRlIHsgfQorICAgIEZsb2F0UmVjdCByZWxhdGl2ZUZy
YW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gcmVjdEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVy
dHlOYW1lOjpSZWxhdGl2ZUZyYW1lKTsgfQorICAgIEZsb2F0UmVjdCBjb252ZXJ0RnJhbWVUb1Nw
YWNlKGNvbnN0IEZsb2F0UmVjdCYsIEFjY2Vzc2liaWxpdHlDb252ZXJzaW9uU3BhY2UpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIEZsb2F0UmVjdCgpOyB9CisKKyAgICBib29sIGlzU2VsZWN0ZWRP
cHRpb25BY3RpdmUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorCisgICAgYm9v
bCBoYXNCb2xkRm9udCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9v
bCBoYXNJdGFsaWNGb250KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBi
b29sIGhhc01pc3NwZWxsaW5nKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICBSZWZQdHI8UmFuZ2U+IGdldE1pc3NwZWxsaW5nUmFuZ2UoUmVmUHRyPFJhbmdlPiBjb25zdCYs
IEFjY2Vzc2liaWxpdHlTZWFyY2hEaXJlY3Rpb24pIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG51
bGxwdHI7IH0KKyAgICBib29sIGhhc1BsYWluVGV4dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgYm9vbCBoYXNTYW1lRm9udChSZW5kZXJPYmplY3QqKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaGFzU2FtZUZvbnRDb2xvcihSZW5kZXJP
YmplY3QqKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaGFzU2Ft
ZVN0eWxlKFJlbmRlck9iamVjdCopIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Cisg
ICAgYm9vbCBpc1N0YXRpY1RleHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQor
ICAgIGJvb2wgaGFzVW5kZXJsaW5lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0K
KyAgICBib29sIGhhc0hpZ2hsaWdodGluZygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNl
OyB9CisKKyAgICBib29sIHN1cHBvcnRzRGF0ZXRpbWVBdHRyaWJ1dGUoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGNvbnN0IEF0b21TdHJpbmcmIGRhdGV0aW1lQXR0cmli
dXRlVmFsdWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBudWxsQXRvbSgpOyB9CisKKyAgICBi
b29sIGNhblNldEZvY3VzQXR0cmlidXRlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7
IH0KKyAgICBib29sIGNhblNldFRleHRSYW5nZUF0dHJpYnV0ZXMoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgY2FuU2V0VmFsdWVBdHRyaWJ1dGUoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgY2FuU2V0TnVtZXJpY1ZhbHVlKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGNhblNldFNlbGVjdGVk
QXR0cmlidXRlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGNh
blNldFNlbGVjdGVkQ2hpbGRyZW5BdHRyaWJ1dGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBm
YWxzZTsgfQorICAgIGJvb2wgY2FuU2V0RXhwYW5kZWRBdHRyaWJ1dGUoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBmYWxzZTsgfQorCisgICAgRWxlbWVudCogZWxlbWVudCgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICBOb2RlKiBub2RlKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gbnVsbHB0cjsgfQorICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9CisKKyAgICBib29sIGFjY2Vzc2liaWxpdHlJc0ln
bm9yZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9w
ZXJ0eU5hbWU6OklzQWNjZXNzaWJpbGl0eUlnbm9yZWQpOyB9CisgICAgQWNjZXNzaWJpbGl0eU9i
amVjdEluY2x1c2lvbiBkZWZhdWx0T2JqZWN0SW5jbHVzaW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gQWNjZXNzaWJpbGl0eU9iamVjdEluY2x1c2lvbjo6RGVmYXVsdEJlaGF2aW9yOyB9Cisg
ICAgYm9vbCBhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkQnlEZWZhdWx0KCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gZmFsc2U7IH0KKworICAgIGJvb2wgaXNTaG93aW5nVmFsaWRhdGlvbk1lc3NhZ2Uo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIFN0cmluZyB2YWxpZGF0aW9u
TWVzc2FnZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFN0cmluZygpOyB9CisKKyAgICB1bnNp
Z25lZCBibG9ja3F1b3RlTGV2ZWwoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAwOyB9CisgICAg
aW50IGhlYWRpbmdMZXZlbCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0KKyAgICBpbnQg
dGFibGVMZXZlbCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0KKyAgICBBY2Nlc3NpYmls
aXR5QnV0dG9uU3RhdGUgY2hlY2tib3hPclJhZGlvVmFsdWUoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBBY2Nlc3NpYmlsaXR5QnV0dG9uU3RhdGU6Ok9mZjsgfQorICAgIFN0cmluZyB2YWx1ZURl
c2NyaXB0aW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gU3RyaW5nKCk7IH0KKyAgICBmbG9h
dCB2YWx1ZUZvclJhbmdlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gMDsgfQorICAgIGZsb2F0
IG1heFZhbHVlRm9yUmFuZ2UoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAwOyB9CisgICAgZmxv
YXQgbWluVmFsdWVGb3JSYW5nZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0KKyAgICBm
bG9hdCBzdGVwVmFsdWVGb3JSYW5nZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0KKyAg
ICBBWENvcmVPYmplY3QqIHNlbGVjdGVkUmFkaW9CdXR0b24oKSBvdmVycmlkZSB7IHJldHVybiBu
dWxscHRyOyB9CisgICAgQVhDb3JlT2JqZWN0KiBzZWxlY3RlZFRhYkl0ZW0oKSBvdmVycmlkZSB7
IHJldHVybiBudWxscHRyOyB9CisgICAgQVhDb3JlT2JqZWN0KiBzZWxlY3RlZExpc3RJdGVtKCkg
b3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIGludCBsYXlvdXRDb3VudCgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0KKyAgICBkb3VibGUgZXN0aW1hdGVkTG9hZGluZ1Byb2dy
ZXNzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gMDsgfQorCisgICAgYm9vbCBzdXBwb3J0c0FS
SUFPd25zKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzQWN0
aXZlRGVzY2VuZGFudE9mRm9jdXNlZENvbnRhaW5lcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgdm9pZCBhcmlhQWN0aXZlRGVzY2VuZGFudFJlZmVyZW5jaW5nRWxlbWVu
dHMoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJikgY29uc3Qgb3ZlcnJpZGUgeyB9CisgICAg
dm9pZCBhcmlhQ29udHJvbHNFbGVtZW50cyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImKSBj
b25zdCBvdmVycmlkZSB7IH0KKyAgICB2b2lkIGFyaWFDb250cm9sc1JlZmVyZW5jaW5nRWxlbWVu
dHMoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJikgY29uc3Qgb3ZlcnJpZGUgeyB9CisgICAg
dm9pZCBhcmlhRGVzY3JpYmVkQnlFbGVtZW50cyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Im
KSBjb25zdCBvdmVycmlkZSB7IH0KKyAgICB2b2lkIGFyaWFEZXNjcmliZWRCeVJlZmVyZW5jaW5n
RWxlbWVudHMoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJikgY29uc3Qgb3ZlcnJpZGUgeyB9
CisgICAgdm9pZCBhcmlhRGV0YWlsc0VsZW1lbnRzKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3Rv
ciYpIGNvbnN0IG92ZXJyaWRlIHsgfQorICAgIHZvaWQgYXJpYURldGFpbHNSZWZlcmVuY2luZ0Vs
ZW1lbnRzKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYpIGNvbnN0IG92ZXJyaWRlIHsgfQor
ICAgIHZvaWQgYXJpYUVycm9yTWVzc2FnZUVsZW1lbnRzKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZl
Y3RvciYpIGNvbnN0IG92ZXJyaWRlIHsgfQorICAgIHZvaWQgYXJpYUVycm9yTWVzc2FnZVJlZmVy
ZW5jaW5nRWxlbWVudHMoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJikgY29uc3Qgb3ZlcnJp
ZGUgeyB9CisgICAgdm9pZCBhcmlhRmxvd1RvRWxlbWVudHMoQWNjZXNzaWJpbGl0eUNoaWxkcmVu
VmVjdG9yJikgY29uc3Qgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCBhcmlhRmxvd1RvUmVmZXJlbmNp
bmdFbGVtZW50cyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImKSBjb25zdCBvdmVycmlkZSB7
IH0KKyAgICB2b2lkIGFyaWFMYWJlbGxlZEJ5RWxlbWVudHMoQWNjZXNzaWJpbGl0eUNoaWxkcmVu
VmVjdG9yJikgY29uc3Qgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCBhcmlhTGFiZWxsZWRCeVJlZmVy
ZW5jaW5nRWxlbWVudHMoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJikgY29uc3Qgb3ZlcnJp
ZGUgeyB9CisgICAgdm9pZCBhcmlhT3duc0VsZW1lbnRzKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZl
Y3RvciYpIGNvbnN0IG92ZXJyaWRlIHsgfQorICAgIHZvaWQgYXJpYU93bnNSZWZlcmVuY2luZ0Vs
ZW1lbnRzKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYpIGNvbnN0IG92ZXJyaWRlIHsgfQor
CisgICAgYm9vbCBoYXNQb3B1cCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Cisg
ICAgU3RyaW5nIHBvcHVwVmFsdWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBTdHJpbmcoKTsg
fQorICAgIGJvb2wgaGFzRGF0YWxpc3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsg
fQorICAgIGJvb2wgc3VwcG9ydHNIYXNQb3B1cCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgYm9vbCBwcmVzc2VkSXNQcmVzZW50KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICBib29sIGFyaWFJc011bHRpbGluZSgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgU3RyaW5nIGludmFsaWRTdGF0dXMoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBTdHJpbmcoKTsgfQorICAgIGJvb2wgc3VwcG9ydHNQcmVzc2VkKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIHN1cHBvcnRzRXhwYW5kZWQoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgc3VwcG9ydHNDaGVja2Vk
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBBY2Nlc3NpYmlsaXR5U29y
dERpcmVjdGlvbiBzb3J0RGlyZWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gQWNjZXNz
aWJpbGl0eVNvcnREaXJlY3Rpb246Ok5vbmU7IH0KKyAgICBib29sIGNhbnZhc0hhc0ZhbGxiYWNr
Q29udGVudCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBzdXBw
b3J0c1JhbmdlVmFsdWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGNv
bnN0IEF0b21TdHJpbmcmIGlkZW50aWZpZXJBdHRyaWJ1dGUoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBudWxsQXRvbSgpOyB9CisgICAgY29uc3QgQXRvbVN0cmluZyYgbGlua1JlbFZhbHVlKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbEF0b20oKTsgfQorICAgIHZvaWQgY2xhc3NMaXN0
KFZlY3RvcjxTdHJpbmc+JikgY29uc3Qgb3ZlcnJpZGUgeyB9CisgICAgU3RyaW5nIHJvbGVEZXNj
cmlwdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFN0cmluZygpOyB9CisgICAgQWNjZXNz
aWJpbGl0eUN1cnJlbnRTdGF0ZSBjdXJyZW50U3RhdGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBBY2Nlc3NpYmlsaXR5Q3VycmVudFN0YXRlOjpGYWxzZTsgfQorICAgIFN0cmluZyBjdXJyZW50
VmFsdWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBTdHJpbmcoKTsgfQorICAgIGJvb2wgc3Vw
cG9ydHNDdXJyZW50KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBjb25z
dCBTdHJpbmcga2V5U2hvcnRjdXRzVmFsdWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBTdHJp
bmcoKTsgfQorCisgICAgLy8gVGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgdGhlIG9iamVjdCBzaG91
bGQgYmUgaWdub3JlZCB3aGVuIHRoZXJlJ3MgYSBtb2RhbCBkaWFsb2cgZGlzcGxheWVkLgorICAg
IGJvb2wgaWdub3JlZEZyb21Nb2RhbFByZXNlbmNlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
ZmFsc2U7IH0KKyAgICBib29sIGlzTW9kYWxEZXNjZW5kYW50KE5vZGUqKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNNb2RhbE5vZGUoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBmYWxzZTsgfQorCisgICAgYm9vbCBzdXBwb3J0c1NldFNpemUoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgc3VwcG9ydHNQb3NJblNldCgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgaW50IHNldFNpemUoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiAwOyB9CisgICAgaW50IHBvc0luU2V0KCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gMDsgfQorCisgICAgYm9vbCBzdXBwb3J0c0FSSUFEcm9wcGluZygpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBzdXBwb3J0c0FSSUFEcmFnZ2luZygp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc0FSSUFHcmFiYmVk
KCkgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2b2lkIHNldEFSSUFHcmFiYmVkKGJv
b2wpIG92ZXJyaWRlIHsgfQorICAgIFZlY3RvcjxTdHJpbmc+IGRldGVybWluZUFSSUFEcm9wRWZm
ZWN0cygpIG92ZXJyaWRlIHsgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7IH0KKworICAgIEFYQ29y
ZU9iamVjdCogYWNjZXNzaWJpbGl0eUhpdFRlc3QoY29uc3QgSW50UG9pbnQmKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBBWENvcmVPYmplY3QqIGVsZW1lbnRBY2Nlc3NpYmlsaXR5SGl0VGVzdChjb25z
dCBJbnRQb2ludCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KKworICAgIEFY
Q29yZU9iamVjdCogZm9jdXNlZFVJRWxlbWVudCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgQVhD
b3JlT2JqZWN0KiBmaXJzdENoaWxkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsg
fQorICAgIEFYQ29yZU9iamVjdCogbGFzdENoaWxkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
bnVsbHB0cjsgfQorICAgIEFYQ29yZU9iamVjdCogcHJldmlvdXNTaWJsaW5nKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIEFYQ29yZU9iamVjdCogbmV4dFNpYmxpbmco
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9CisgICAgQVhDb3JlT2JqZWN0KiBu
ZXh0U2libGluZ1VuaWdub3JlZChpbnQpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7
IH0KKyAgICBBWENvcmVPYmplY3QqIHByZXZpb3VzU2libGluZ1VuaWdub3JlZChpbnQpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICBBWENvcmVPYmplY3QqIHBhcmVudE9i
amVjdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICBBWENvcmVPYmpl
Y3QqIHBhcmVudE9iamVjdFVuaWdub3JlZCgpIGNvbnN0IG92ZXJyaWRlOworICAgIEFYQ29yZU9i
amVjdCogcGFyZW50T2JqZWN0SWZFeGlzdHMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBudWxs
cHRyOyB9CisgICAgdm9pZCBmaW5kTWF0Y2hpbmdPYmplY3RzKEFjY2Vzc2liaWxpdHlTZWFyY2hD
cml0ZXJpYSosIEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYpIG92ZXJyaWRlIHsgfQorICAg
IGJvb2wgaXNEZXNjZW5kYW50T2ZCYXJyZW5QYXJlbnQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBmYWxzZTsgfQorICAgIGJvb2wgaXNEZXNjZW5kYW50T2ZSb2xlKEFjY2Vzc2liaWxpdHlSb2xl
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorCisgICAgVmVjdG9yPFJlZlB0cjxS
YW5nZT4+IGZpbmRUZXh0UmFuZ2VzKEFjY2Vzc2liaWxpdHlTZWFyY2hUZXh0Q3JpdGVyaWEgY29u
c3QmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBWZWN0b3I8UmVmUHRyPFJhbmdlPj4oKTsgfQor
ICAgIFZlY3RvcjxTdHJpbmc+IHBlcmZvcm1UZXh0T3BlcmF0aW9uKEFjY2Vzc2liaWxpdHlUZXh0
T3BlcmF0aW9uIGNvbnN0Jikgb3ZlcnJpZGUgeyByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsgfQor
CisgICAgQVhDb3JlT2JqZWN0KiBvYnNlcnZhYmxlT2JqZWN0KCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gbnVsbHB0cjsgfQorICAgIHZvaWQgbGlua2VkVUlFbGVtZW50cyhBY2Nlc3NpYmlsaXR5
Q2hpbGRyZW5WZWN0b3ImKSBjb25zdCBvdmVycmlkZSB7IH0KKyAgICBBWENvcmVPYmplY3QqIHRp
dGxlVUlFbGVtZW50KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIGJv
b2wgZXhwb3Nlc1RpdGxlVUlFbGVtZW50KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7
IH0KKyAgICBBWENvcmVPYmplY3QqIGNvcnJlc3BvbmRpbmdMYWJlbEZvckNvbnRyb2xFbGVtZW50
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIEFYQ29yZU9iamVjdCog
Y29ycmVzcG9uZGluZ0NvbnRyb2xGb3JMYWJlbEVsZW1lbnQoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBudWxscHRyOyB9CisgICAgQVhDb3JlT2JqZWN0KiBzY3JvbGxCYXIoQWNjZXNzaWJpbGl0
eU9yaWVudGF0aW9uKSBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9CisKKyAgICBBY2Nlc3Np
YmlsaXR5Um9sZSBhcmlhUm9sZUF0dHJpYnV0ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEFj
Y2Vzc2liaWxpdHlSb2xlOjpVbmtub3duOyB9CisgICAgYm9vbCBpc1ByZXNlbnRhdGlvbmFsQ2hp
bGRPZkFyaWFSb2xlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29s
IGFyaWFSb2xlSGFzUHJlc2VudGF0aW9uYWxDaGlsZHJlbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpbmhlcml0c1ByZXNlbnRhdGlvbmFsUm9sZSgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICB2b2lkIGFjY2Vzc2liaWxpdHlUZXh0
KFZlY3RvcjxBY2Nlc3NpYmlsaXR5VGV4dD4mKSBjb25zdCBvdmVycmlkZSB7IH0KKyAgICBTdHJp
bmcgY29tcHV0ZWRMYWJlbCgpIG92ZXJyaWRlIHsgcmV0dXJuIFN0cmluZygpOyB9CisKKyAgICB2
b2lkIHNldEFjY2Vzc2libGVOYW1lKGNvbnN0IEF0b21TdHJpbmcmKSBvdmVycmlkZSB7IH0KKyAg
ICBib29sIGhhc0F0dHJpYnV0ZXNSZXF1aXJlZEZvckluY2x1c2lvbigpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICBTdHJpbmcgYWNjZXNzaWJpbGl0eURlc2NyaXB0aW9u
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gU3RyaW5nKCk7IH0KKyAgICBTdHJpbmcgdGl0bGUo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBTdHJpbmcoKTsgfQorICAgIFN0cmluZyBoZWxwVGV4
dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFN0cmluZygpOyB9CisKKyAgICBib29sIGlzQVJJ
QVN0YXRpY1RleHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIFN0cmlu
ZyBzdHJpbmdWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFN0cmluZygpOyB9CisgICAg
U3RyaW5nIHRleHRVbmRlckVsZW1lbnQoQWNjZXNzaWJpbGl0eVRleHRVbmRlckVsZW1lbnRNb2Rl
ID0gQWNjZXNzaWJpbGl0eVRleHRVbmRlckVsZW1lbnRNb2RlKCkpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIFN0cmluZygpOyB9CisgICAgU3RyaW5nIHRleHQoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBTdHJpbmcoKTsgfQorICAgIGludCB0ZXh0TGVuZ3RoKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gMDsgfQorICAgIFN0cmluZyBhcmlhTGFiZWxlZEJ5QXR0cmlidXRlKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gU3RyaW5nKCk7IH0KKyAgICBTdHJpbmcgYXJpYURlc2NyaWJlZEJ5QXR0
cmlidXRlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gU3RyaW5nKCk7IH0KKyAgICBjb25zdCBT
dHJpbmcgcGxhY2Vob2xkZXJWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFN0cmluZygp
OyB9CisgICAgYm9vbCBhY2Nlc3NpYmxlTmFtZURlcml2ZXNGcm9tQ29udGVudCgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICBTdHJpbmcgZXhwYW5kZWRUZXh0VmFsdWUo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBTdHJpbmcoKTsgfQorICAgIGJvb2wgc3VwcG9ydHNF
eHBhbmRlZFRleHRWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAg
ICB2b2lkIGVsZW1lbnRzRnJvbUF0dHJpYnV0ZShWZWN0b3I8RWxlbWVudCo+JiwgY29uc3QgUXVh
bGlmaWVkTmFtZSYpIGNvbnN0IG92ZXJyaWRlIHsgfQorCisgICAgdm9pZCBjb2xvclZhbHVlKGlu
dCYsIGludCYsIGludCYpIGNvbnN0IG92ZXJyaWRlIHsgfQorCisgICAgQWNjZXNzaWJpbGl0eVJv
bGUgcm9sZVZhbHVlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3RhdGljX2Nhc3Q8QWNjZXNz
aWJpbGl0eVJvbGU+KGludEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpSb2xlVmFsdWUp
KTsgfQorCisgICAgQVhPYmplY3RDYWNoZSogYXhPYmplY3RDYWNoZSgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIG51bGxwdHI7IH0KKworICAgIEVsZW1lbnQqIGFuY2hvckVsZW1lbnQoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9CisgICAgYm9vbCBzdXBwb3J0c1ByZXNzQWN0
aW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBFbGVtZW50KiBhY3Rp
b25FbGVtZW50KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIExheW91
dFJlY3QgYm91bmRpbmdCb3hSZWN0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gTGF5b3V0UmVj
dCgpOyB9CisgICAgSW50UmVjdCBwaXhlbFNuYXBwZWRCb3VuZGluZ0JveFJlY3QoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBJbnRSZWN0KCk7IH0KKyAgICBMYXlvdXRSZWN0IGVsZW1lbnRSZWN0
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gTGF5b3V0UmVjdCgpOyB9CisgICAgTGF5b3V0U2l6
ZSBzaXplKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gTGF5b3V0U2l6ZSgpOyB9CisgICAgSW50
UG9pbnQgY2xpY2tQb2ludCgpIG92ZXJyaWRlIHsgcmV0dXJuIEludFBvaW50KCk7IH0KKyAgICBQ
YXRoIGVsZW1lbnRQYXRoKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gUGF0aCgpOyB9CisgICAg
Ym9vbCBzdXBwb3J0c1BhdGgoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorCisg
ICAgVGV4dEl0ZXJhdG9yQmVoYXZpb3IgdGV4dEl0ZXJhdG9yQmVoYXZpb3JGb3JUZXh0UmFuZ2Uo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZpb3I7IH0K
KyAgICBQbGFpblRleHRSYW5nZSBzZWxlY3RlZFRleHRSYW5nZSgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIFBsYWluVGV4dFJhbmdlKCk7IH0KKyAgICB1bnNpZ25lZCBzZWxlY3Rpb25TdGFydCgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0KKyAgICB1bnNpZ25lZCBzZWxlY3Rpb25FbmQo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAwOyB9CisKKyAgICBVUkwgdXJsKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gVVJMKCk7IH0KKyAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbigp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFZpc2libGVTZWxlY3Rpb24oKTsgfQorICAgIFN0cmlu
ZyBzZWxlY3RlZFRleHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBTdHJpbmcoKTsgfQorICAg
IGNvbnN0IEF0b21TdHJpbmcmIGFjY2Vzc0tleSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG51
bGxBdG9tKCk7IH0KKyAgICBjb25zdCBTdHJpbmcmIGFjdGlvblZlcmIoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBudWxsQXRvbSgpOyB9CisgICAgV2lkZ2V0KiB3aWRnZXQoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBudWxscHRyOyB9CisgICAgV2lkZ2V0KiB3aWRnZXRGb3JBdHRhY2htZW50
VmlldygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICBQYWdlKiBwYWdl
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIERvY3VtZW50KiBkb2N1
bWVudCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICBGcmFtZVZpZXcq
IGRvY3VtZW50RnJhbWVWaWV3KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQor
ICAgIEZyYW1lKiBmcmFtZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAg
ICBGcmFtZSogbWFpbkZyYW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQor
ICAgIERvY3VtZW50KiB0b3BEb2N1bWVudCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG51bGxw
dHI7IH0KKyAgICBTY3JvbGxWaWV3KiBzY3JvbGxWaWV3QW5jZXN0b3IoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBudWxscHRyOyB9CisgICAgU3RyaW5nIGxhbmd1YWdlKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gU3RyaW5nKCk7IH0KKyAgICB1bnNpZ25lZCBoaWVyYXJjaGljYWxMZXZlbCgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0KKworICAgIHZvaWQgc2V0Rm9jdXNlZChib29s
KSBvdmVycmlkZSB7IH0KKyAgICB2b2lkIHNldFNlbGVjdGVkVGV4dChjb25zdCBTdHJpbmcmKSBv
dmVycmlkZSB7IH0KKyAgICB2b2lkIHNldFNlbGVjdGVkVGV4dFJhbmdlKGNvbnN0IFBsYWluVGV4
dFJhbmdlJikgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCBzZXRWYWx1ZShjb25zdCBTdHJpbmcmKSBv
dmVycmlkZSB7IH0KKyAgICBib29sIHJlcGxhY2VUZXh0SW5SYW5nZShjb25zdCBTdHJpbmcmLCBj
b25zdCBQbGFpblRleHRSYW5nZSYpIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9v
bCBpbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisK
KyAgICB2b2lkIHNldFZhbHVlKGZsb2F0KSBvdmVycmlkZSB7IH0KKyAgICB2b2lkIHNldFNlbGVj
dGVkKGJvb2wpIG92ZXJyaWRlIHsgfQorICAgIHZvaWQgc2V0U2VsZWN0ZWRSb3dzKEFjY2Vzc2li
aWxpdHlDaGlsZHJlblZlY3RvciYpIG92ZXJyaWRlIHsgfQorCisgICAgdm9pZCBtYWtlUmFuZ2VW
aXNpYmxlKGNvbnN0IFBsYWluVGV4dFJhbmdlJikgb3ZlcnJpZGUgeyB9CisgICAgYm9vbCBwcmVz
cygpIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBwZXJmb3JtRGVmYXVsdEFj
dGlvbigpIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICBBY2Nlc3NpYmlsaXR5T3Jp
ZW50YXRpb24gb3JpZW50YXRpb24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBBY2Nlc3NpYmls
aXR5T3JpZW50YXRpb246OlVuZGVmaW5lZDsgfQorICAgIHZvaWQgaW5jcmVtZW50KCkgb3ZlcnJp
ZGUgeyB9CisgICAgdm9pZCBkZWNyZW1lbnQoKSBvdmVycmlkZSB7IH0KKworICAgIHZvaWQgY2hp
bGRyZW5DaGFuZ2VkKCkgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCB0ZXh0Q2hhbmdlZCgpIG92ZXJy
aWRlIHsgfQorICAgIHZvaWQgdXBkYXRlQWNjZXNzaWJpbGl0eVJvbGUoKSBvdmVycmlkZSB7IH0K
KyAgICBjb25zdCBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNoaWxkcmVuKGJvb2wgdXBk
YXRlQ2hpbGRyZW5JZk5lZWRlZCA9IHRydWUpIG92ZXJyaWRlOworICAgIHZvaWQgYWRkQ2hpbGRy
ZW4oKSBvdmVycmlkZSB7IH0KKyAgICB2b2lkIGFkZENoaWxkKEFYQ29yZU9iamVjdCopIG92ZXJy
aWRlIHsgfQorICAgIHZvaWQgaW5zZXJ0Q2hpbGQoQVhDb3JlT2JqZWN0KiwgdW5zaWduZWQpIG92
ZXJyaWRlIHsgfQorCisgICAgYm9vbCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVSb2xlKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIGJvb2wgY2FuSGF2ZUNoaWxkcmVuKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGhhc0NoaWxkcmVuKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2b2lkIHVwZGF0ZUNoaWxkcmVu
SWZOZWNlc3NhcnkoKSBvdmVycmlkZSB7IH0KKyAgICB2b2lkIHNldE5lZWRzVG9VcGRhdGVDaGls
ZHJlbigpIG92ZXJyaWRlIHsgfQorICAgIHZvaWQgc2V0TmVlZHNUb1VwZGF0ZVN1YnRyZWUoKSBv
dmVycmlkZSB7IH07CisgICAgdm9pZCBjbGVhckNoaWxkcmVuKCkgb3ZlcnJpZGUgeyB9CisgICAg
Ym9vbCBuZWVkc1RvVXBkYXRlQ2hpbGRyZW4oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxz
ZTsgfQorICAgIHZvaWQgZGV0YWNoRnJvbVBhcmVudCgpIG92ZXJyaWRlIHsgfQorICAgIGJvb2wg
aXNEZXRhY2hlZEZyb21QYXJlbnQoKSBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorCisgICAg
Ym9vbCBjYW5IYXZlU2VsZWN0ZWRDaGlsZHJlbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgdm9pZCBzZWxlY3RlZENoaWxkcmVuKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZl
Y3RvciYpIG92ZXJyaWRlIHsgfQorICAgIHZvaWQgdmlzaWJsZUNoaWxkcmVuKEFjY2Vzc2liaWxp
dHlDaGlsZHJlblZlY3RvciYpIG92ZXJyaWRlIHsgfQorICAgIHZvaWQgdGFiQ2hpbGRyZW4oQWNj
ZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJikgb3ZlcnJpZGUgeyB9CisgICAgYm9vbCBzaG91bGRG
b2N1c0FjdGl2ZURlc2NlbmRhbnQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQor
ICAgIEFYQ29yZU9iamVjdCogYWN0aXZlRGVzY2VuZGFudCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIG51bGxwdHI7IH0KKyAgICB2b2lkIGhhbmRsZUFjdGl2ZURlc2NlbmRhbnRDaGFuZ2VkKCkg
b3ZlcnJpZGUgeyB9CisgICAgdm9pZCBoYW5kbGVBcmlhRXhwYW5kZWRDaGFuZ2VkKCkgb3ZlcnJp
ZGUgeyB9CisgICAgYm9vbCBpc0Rlc2NlbmRhbnRPZk9iamVjdChjb25zdCBBWENvcmVPYmplY3Qq
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNBbmNlc3Rvck9m
T2JqZWN0KGNvbnN0IEFYQ29yZU9iamVjdCopIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNl
OyB9CisgICAgQVhDb3JlT2JqZWN0KiBmaXJzdEFub255bW91c0Jsb2NrQ2hpbGQoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9CisKKyAgICBib29sIGhhc0F0dHJpYnV0ZShjb25z
dCBRdWFsaWZpZWROYW1lJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBj
b25zdCBBdG9tU3RyaW5nJiBnZXRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIG51bGxBdG9tKCk7IH0KKyAgICBib29sIGhhc1RhZ05hbWUoY29u
c3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAg
ICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2aXNpYmxlUG9zaXRpb25SYW5nZSgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKCk7IH0KKyAgICBWaXNpYmxlUG9zaXRp
b25SYW5nZSB2aXNpYmxlUG9zaXRpb25SYW5nZUZvckxpbmUodW5zaWduZWQpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKCk7IH0KKyAgICBSZWZQdHI8UmFuZ2U+
IGVsZW1lbnRSYW5nZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICBW
aXNpYmxlUG9zaXRpb25SYW5nZSB2aXNpYmxlUG9zaXRpb25SYW5nZUZvclVub3JkZXJlZFBvc2l0
aW9ucyhjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBWaXNpYmxlUG9zaXRpb25SYW5nZSgpOyB9CisgICAgVmlzaWJs
ZVBvc2l0aW9uUmFuZ2UgcG9zaXRpb25PZkxlZnRXb3JkKGNvbnN0IFZpc2libGVQb3NpdGlvbiYp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKCk7IH0KKyAgICBW
aXNpYmxlUG9zaXRpb25SYW5nZSBwb3NpdGlvbk9mUmlnaHRXb3JkKGNvbnN0IFZpc2libGVQb3Np
dGlvbiYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKCk7IH0K
KyAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSBsZWZ0TGluZVZpc2libGVQb3NpdGlvblJhbmdlKGNv
bnN0IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFZpc2libGVQb3Np
dGlvblJhbmdlKCk7IH0KKyAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSByaWdodExpbmVWaXNpYmxl
UG9zaXRpb25SYW5nZShjb25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBWaXNpYmxlUG9zaXRpb25SYW5nZSgpOyB9CisgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2Ug
c2VudGVuY2VGb3JQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBWaXNpYmxlUG9zaXRpb25SYW5nZSgpOyB9CisgICAgVmlzaWJsZVBvc2l0aW9u
UmFuZ2UgcGFyYWdyYXBoRm9yUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJikgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2UoKTsgfQorICAgIFZpc2libGVQ
b3NpdGlvblJhbmdlIHN0eWxlUmFuZ2VGb3JQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24m
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBWaXNpYmxlUG9zaXRpb25SYW5nZSgpOyB9CisgICAg
VmlzaWJsZVBvc2l0aW9uUmFuZ2UgdmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JSYW5nZShjb25zdCBQ
bGFpblRleHRSYW5nZSYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFZpc2libGVQb3NpdGlvblJh
bmdlKCk7IH0KKyAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSBsaW5lUmFuZ2VGb3JQb3NpdGlvbihj
b25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBWaXNpYmxlUG9z
aXRpb25SYW5nZSgpOyB9CisKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlRm9yUGxhaW5UZXh0UmFu
Z2UoY29uc3QgUGxhaW5UZXh0UmFuZ2UmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBudWxscHRy
OyB9CisKKyAgICBTdHJpbmcgc3RyaW5nRm9yUmFuZ2UoUmVmUHRyPFJhbmdlPikgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gU3RyaW5nKCk7IH0KKyAgICBJbnRSZWN0IGJvdW5kc0ZvclZpc2libGVQ
b3NpdGlvblJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlvblJhbmdlJikgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gSW50UmVjdCgpOyB9CisgICAgSW50UmVjdCBib3VuZHNGb3JSYW5nZShjb25zdCBS
ZWZQdHI8UmFuZ2U+KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBJbnRSZWN0KCk7IH0KKyAgICBp
bnQgbGVuZ3RoRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uUmFu
Z2UmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAwOyB9CisgICAgdm9pZCBzZXRTZWxlY3RlZFZp
c2libGVQb3NpdGlvblJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlvblJhbmdlJikgY29uc3Qgb3Zl
cnJpZGUgeyB9CisKKyAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uRm9yQm91bmRz
KGNvbnN0IEludFJlY3QmLCBBY2Nlc3NpYmlsaXR5VmlzaWJsZVBvc2l0aW9uRm9yQm91bmRzKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsgfQorICAgIFZpc2libGVQ
b3NpdGlvbiB2aXNpYmxlUG9zaXRpb25Gb3JQb2ludChjb25zdCBJbnRQb2ludCYpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOyB9CisgICAgVmlzaWJsZVBvc2l0aW9u
IG5leHRWaXNpYmxlUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJikgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7IH0KKyAgICBWaXNpYmxlUG9zaXRpb24gcHJl
dmlvdXNWaXNpYmxlUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJikgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7IH0KKyAgICBWaXNpYmxlUG9zaXRpb24gbmV4
dFdvcmRFbmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
VmlzaWJsZVBvc2l0aW9uKCk7IH0KKyAgICBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXNXb3JkU3Rh
cnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gVmlzaWJs
ZVBvc2l0aW9uKCk7IH0KKyAgICBWaXNpYmxlUG9zaXRpb24gbmV4dExpbmVFbmRQb3NpdGlvbihj
b25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBWaXNpYmxlUG9z
aXRpb24oKTsgfQorICAgIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c0xpbmVTdGFydFBvc2l0aW9u
KGNvbnN0IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFZpc2libGVQ
b3NpdGlvbigpOyB9CisgICAgVmlzaWJsZVBvc2l0aW9uIG5leHRTZW50ZW5jZUVuZFBvc2l0aW9u
KGNvbnN0IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFZpc2libGVQ
b3NpdGlvbigpOyB9CisgICAgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzU2VudGVuY2VTdGFydFBv
c2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFZp
c2libGVQb3NpdGlvbigpOyB9CisgICAgVmlzaWJsZVBvc2l0aW9uIG5leHRQYXJhZ3JhcGhFbmRQ
b3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBW
aXNpYmxlUG9zaXRpb24oKTsgfQorICAgIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c1BhcmFncmFw
aFN0YXJ0UG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJikgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7IH0KKyAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBv
c2l0aW9uRm9ySW5kZXgodW5zaWduZWQsIGJvb2wgLypsYXN0SW5kZXhPSyAqLykgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7IH0KKworICAgIFZpc2libGVQb3NpdGlv
biB2aXNpYmxlUG9zaXRpb25Gb3JJbmRleChpbnQpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFZp
c2libGVQb3NpdGlvbigpOyB9CisgICAgaW50IGluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKGNvbnN0
IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0KKworICAgIEFY
Q29yZU9iamVjdCogYWNjZXNzaWJpbGl0eU9iamVjdEZvclBvc2l0aW9uKGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICBpbnQgbGlu
ZUZvclBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIDA7IH0KKyAgICBQbGFpblRleHRSYW5nZSBwbGFpblRleHRSYW5nZUZvclZpc2libGVQb3Np
dGlvblJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlvblJhbmdlJikgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gUGxhaW5UZXh0UmFuZ2UoKTsgfQorICAgIGludCBpbmRleChjb25zdCBWaXNpYmxlUG9z
aXRpb24mKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAwOyB9CisKKyAgICB2b2lkIGxpbmVCcmVh
a3MoVmVjdG9yPGludD4mKSBjb25zdCBvdmVycmlkZSB7IH0KKyAgICBQbGFpblRleHRSYW5nZSBk
b0FYUmFuZ2VGb3JMaW5lKHVuc2lnbmVkKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBQbGFpblRl
eHRSYW5nZSgpOyB9CisgICAgUGxhaW5UZXh0UmFuZ2UgZG9BWFJhbmdlRm9yUG9zaXRpb24oY29u
c3QgSW50UG9pbnQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBQbGFpblRleHRSYW5nZSgpOyB9
CisgICAgUGxhaW5UZXh0UmFuZ2UgZG9BWFJhbmdlRm9ySW5kZXgodW5zaWduZWQpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIFBsYWluVGV4dFJhbmdlKCk7IH0KKyAgICBQbGFpblRleHRSYW5nZSBk
b0FYU3R5bGVSYW5nZUZvckluZGV4KHVuc2lnbmVkKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBQ
bGFpblRleHRSYW5nZSgpOyB9CisKKyAgICBTdHJpbmcgZG9BWFN0cmluZ0ZvclJhbmdlKGNvbnN0
IFBsYWluVGV4dFJhbmdlJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gU3RyaW5nKCk7IH0KKyAg
ICBJbnRSZWN0IGRvQVhCb3VuZHNGb3JSYW5nZShjb25zdCBQbGFpblRleHRSYW5nZSYpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIEludFJlY3QoKTsgfQorICAgIEludFJlY3QgZG9BWEJvdW5kc0Zv
clJhbmdlVXNpbmdDaGFyYWN0ZXJPZmZzZXQoY29uc3QgUGxhaW5UZXh0UmFuZ2UmKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBJbnRSZWN0KCk7IH0KKworICAgIHVuc2lnbmVkIGRvQVhMaW5lRm9y
SW5kZXgodW5zaWduZWQpIG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0KKworICAgIFN0cmluZyBjb21w
dXRlZFJvbGVTdHJpbmcoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBTdHJpbmcoKTsgfQorCisg
ICAgLy8gTVNBQQorICAgIFN0cmluZyBzdHJpbmdWYWx1ZUZvck1TQUEoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBTdHJpbmcoKTsgfQorICAgIFN0cmluZyBzdHJpbmdSb2xlRm9yTVNBQSgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIFN0cmluZygpOyB9CisgICAgU3RyaW5nIG5hbWVGb3JNU0FB
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gU3RyaW5nKCk7IH0KKyAgICBTdHJpbmcgZGVzY3Jp
cHRpb25Gb3JNU0FBKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gU3RyaW5nKCk7IH0KKyAgICBB
Y2Nlc3NpYmlsaXR5Um9sZSByb2xlVmFsdWVGb3JNU0FBKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gQWNjZXNzaWJpbGl0eVJvbGU6OlVua25vd247IH0KKworICAgIFN0cmluZyBwYXNzd29yZEZp
ZWxkVmFsdWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBTdHJpbmcoKTsgfQorICAgIGJvb2wg
aXNWYWx1ZUF1dG9maWxsZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAg
IGJvb2wgaXNWYWx1ZUF1dG9maWxsQXZhaWxhYmxlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
ZmFsc2U7IH0KKyAgICBBdXRvRmlsbEJ1dHRvblR5cGUgdmFsdWVBdXRvZmlsbEJ1dHRvblR5cGUo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBBdXRvRmlsbEJ1dHRvblR5cGU6Ok5vbmU7IH0KKwor
ICAgIHZvaWQgYXJpYVRyZWVSb3dzKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYpIG92ZXJy
aWRlIHsgfQorICAgIHZvaWQgYXJpYVRyZWVJdGVtRGlzY2xvc2VkUm93cyhBY2Nlc3NpYmlsaXR5
Q2hpbGRyZW5WZWN0b3ImKSBvdmVycmlkZSB7IH0KKyAgICB2b2lkIGFyaWFUcmVlSXRlbUNvbnRl
bnQoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJikgb3ZlcnJpZGUgeyB9CisKKyAgICBib29s
IHN1cHBvcnRzTGl2ZVJlZ2lvbihib29sID0gdHJ1ZSkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
ZmFsc2U7IH0KKyAgICBib29sIGlzSW5zaWRlTGl2ZVJlZ2lvbihib29sID0gdHJ1ZSkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBBWENvcmVPYmplY3QqIGxpdmVSZWdpb25B
bmNlc3Rvcihib29sID0gdHJ1ZSkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQor
ICAgIGNvbnN0IFN0cmluZyBsaXZlUmVnaW9uU3RhdHVzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gU3RyaW5nKCk7IH0KKyAgICBjb25zdCBTdHJpbmcgbGl2ZVJlZ2lvblJlbGV2YW50KCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gU3RyaW5nKCk7IH0KKyAgICBib29sIGxpdmVSZWdpb25BdG9t
aWMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNCdXN5KCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIGJvb2wgaGFzQ29udGVudEVk
aXRhYmxlQXR0cmlidXRlU2V0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKwor
ICAgIGJvb2wgc3VwcG9ydHNSZWFkT25seSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNl
OyB9CisgICAgU3RyaW5nIHJlYWRPbmx5VmFsdWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBT
dHJpbmcoKTsgfQorCisgICAgYm9vbCBzdXBwb3J0c0F1dG9Db21wbGV0ZSgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgU3RyaW5nIGF1dG9Db21wbGV0ZVZhbHVlKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gU3RyaW5nKCk7IH0KKworICAgIGJvb2wgc3VwcG9ydHNBUklB
QXR0cmlidXRlcygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICBPcHRp
b25TZXQ8U3BlYWtBcz4gc3BlYWtBc1Byb3BlcnR5KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
T3B0aW9uU2V0PFNwZWFrQXM+KCk7IH0KKworICAgIHZvaWQgc2Nyb2xsVG9NYWtlVmlzaWJsZSgp
IGNvbnN0IG92ZXJyaWRlIHsgfQorICAgIHZvaWQgc2Nyb2xsVG9NYWtlVmlzaWJsZVdpdGhTdWJG
b2N1cyhjb25zdCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCBzY3JvbGxU
b0dsb2JhbFBvaW50KGNvbnN0IEludFBvaW50JikgY29uc3Qgb3ZlcnJpZGUgeyB9CisKKyAgICBi
b29sIHNjcm9sbEJ5UGFnZShTY3JvbGxCeVBhZ2VEaXJlY3Rpb24pIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgSW50UG9pbnQgc2Nyb2xsUG9zaXRpb24oKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBJbnRQb2ludCgpOyB9CisgICAgSW50U2l6ZSBzY3JvbGxDb250ZW50c1Np
emUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBJbnRTaXplKCk7IH0KKyAgICBJbnRSZWN0IHNj
cm9sbFZpc2libGVDb250ZW50UmVjdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEludFJlY3Qo
KTsgfQorICAgIHZvaWQgc2Nyb2xsVG9NYWtlVmlzaWJsZShjb25zdCBTY3JvbGxSZWN0VG9WaXNp
YmxlT3B0aW9ucyYpIGNvbnN0IG92ZXJyaWRlIHsgfQorCisgICAgYm9vbCBsYXN0S25vd25Jc0ln
bm9yZWRWYWx1ZSgpIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdm9pZCBzZXRMYXN0
S25vd25Jc0lnbm9yZWRWYWx1ZShib29sKSBvdmVycmlkZSB7IH0KKworICAgIHZvaWQgbm90aWZ5
SWZJZ25vcmVkVmFsdWVDaGFuZ2VkKCkgb3ZlcnJpZGUgeyB9CisKKyAgICBib29sIGlzTWF0aEVs
ZW1lbnQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNNYXRo
RnJhY3Rpb24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNN
YXRoRmVuY2VkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlz
TWF0aFN1YnNjcmlwdFN1cGVyc2NyaXB0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7
IH0KKyAgICBib29sIGlzTWF0aFJvdygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9
CisgICAgYm9vbCBpc01hdGhVbmRlck92ZXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxz
ZTsgfQorICAgIGJvb2wgaXNNYXRoUm9vdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNl
OyB9CisgICAgYm9vbCBpc01hdGhTcXVhcmVSb290KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
ZmFsc2U7IH0KKyAgICBib29sIGlzTWF0aFRleHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBm
YWxzZTsgfQorICAgIGJvb2wgaXNNYXRoTnVtYmVyKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
ZmFsc2U7IH0KKyAgICBib29sIGlzTWF0aE9wZXJhdG9yKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICBib29sIGlzTWF0aEZlbmNlT3BlcmF0b3IoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNNYXRoU2VwYXJhdG9yT3BlcmF0b3IoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNNYXRoSWRlbnRpZmll
cigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc01hdGhUYWJs
ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc01hdGhUYWJs
ZVJvdygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc01hdGhU
YWJsZUNlbGwoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNN
YXRoTXVsdGlzY3JpcHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJv
b2wgaXNNYXRoVG9rZW4oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJv
b2wgaXNNYXRoU2NyaXB0T2JqZWN0KEFjY2Vzc2liaWxpdHlNYXRoU2NyaXB0T2JqZWN0VHlwZSkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzTWF0aE11bHRpc2Ny
aXB0T2JqZWN0KEFjY2Vzc2liaWxpdHlNYXRoTXVsdGlzY3JpcHRPYmplY3RUeXBlKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorCisgICAgQVhDb3JlT2JqZWN0KiBtYXRoUmFkaWNh
bmRPYmplY3QoKSBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9CisgICAgQVhDb3JlT2JqZWN0
KiBtYXRoUm9vdEluZGV4T2JqZWN0KCkgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQorCisg
ICAgQVhDb3JlT2JqZWN0KiBtYXRoVW5kZXJPYmplY3QoKSBvdmVycmlkZSB7IHJldHVybiBudWxs
cHRyOyB9CisgICAgQVhDb3JlT2JqZWN0KiBtYXRoT3Zlck9iamVjdCgpIG92ZXJyaWRlIHsgcmV0
dXJuIG51bGxwdHI7IH0KKworICAgIEFYQ29yZU9iamVjdCogbWF0aE51bWVyYXRvck9iamVjdCgp
IG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICBBWENvcmVPYmplY3QqIG1hdGhEZW5v
bWluYXRvck9iamVjdCgpIG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KKworICAgIEFYQ29y
ZU9iamVjdCogbWF0aEJhc2VPYmplY3QoKSBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9Cisg
ICAgQVhDb3JlT2JqZWN0KiBtYXRoU3Vic2NyaXB0T2JqZWN0KCkgb3ZlcnJpZGUgeyByZXR1cm4g
bnVsbHB0cjsgfQorICAgIEFYQ29yZU9iamVjdCogbWF0aFN1cGVyc2NyaXB0T2JqZWN0KCkgb3Zl
cnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQorCisgICAgU3RyaW5nIG1hdGhGZW5jZWRPcGVuU3Ry
aW5nKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gU3RyaW5nKCk7IH0KKyAgICBTdHJpbmcgbWF0
aEZlbmNlZENsb3NlU3RyaW5nKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gU3RyaW5nKCk7IH0K
KyAgICBpbnQgbWF0aExpbmVUaGlja25lc3MoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAwOyB9
CisgICAgYm9vbCBpc0Fub255bW91c01hdGhPcGVyYXRvcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIGZhbHNlOyB9CisKKyAgICB2b2lkIG1hdGhQcmVzY3JpcHRzKEFjY2Vzc2liaWxpdHlNYXRo
TXVsdGlzY3JpcHRQYWlycyYpIG92ZXJyaWRlIHsgfQorICAgIHZvaWQgbWF0aFBvc3RzY3JpcHRz
KEFjY2Vzc2liaWxpdHlNYXRoTXVsdGlzY3JpcHRQYWlycyYpIG92ZXJyaWRlIHsgfQorCisgICAg
Ym9vbCBpc0FYSGlkZGVuKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBi
b29sIGlzRE9NSGlkZGVuKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBi
b29sIGlzSGlkZGVuKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIEFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKiB3cmFwcGVyKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gbV93cmFwcGVyLmdldCgpOyB9CisgICAgdm9pZCBzZXRXcmFwcGVyKEFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyKiB3cmFwcGVyKSBvdmVycmlkZSB7IG1fd3JhcHBlciA9IHdyYXBwZXI7IH0K
KworICAgIHZvaWQgb3ZlcnJpZGVBdHRhY2htZW50UGFyZW50KEFYQ29yZU9iamVjdCopIG92ZXJy
aWRlIHsgfQorCisgICAgYm9vbCBhY2Nlc3NpYmlsaXR5SWdub3JlQXR0YWNobWVudCgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdEluY2x1
c2lvbiBhY2Nlc3NpYmlsaXR5UGxhdGZvcm1JbmNsdWRlc09iamVjdCgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIEFjY2Vzc2liaWxpdHlPYmplY3RJbmNsdXNpb246OkRlZmF1bHRCZWhhdmlvcjsg
fQorCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBpbnQgYWNjZXNzaWJpbGl0eVBhc3N3
b3JkRmllbGRMZW5ndGgoKSBvdmVycmlkZSB7IHJldHVybiAwOyB9CisgICAgYm9vbCBoYXNUb3Vj
aEV2ZW50TGlzdGVuZXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJv
b2wgaXNJbnB1dFR5cGVQb3B1cEJ1dHRvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNl
OyB9CisjZW5kaWYKKworICAgIHZvaWQgdXBkYXRlQmFja2luZ1N0b3JlKCkgb3ZlcnJpZGU7CisK
KyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBib29sIHByZXZlbnRLZXlib2FyZERPTUV2ZW50RGlz
cGF0Y2goKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZvaWQgc2V0UHJl
dmVudEtleWJvYXJkRE9NRXZlbnREaXNwYXRjaChib29sKSBvdmVycmlkZSB7IH0KKyAgICBib29s
IGZpbGVVcGxvYWRCdXR0b25SZXR1cm5zVmFsdWVJblRpdGxlKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICBTdHJpbmcgc3BlZWNoSGludEF0dHJpYnV0ZVZhbHVlKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3RyaW5nQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6
OlNwZWVjaEhpbnQpOyB9CisgICAgU3RyaW5nIGRlc2NyaXB0aW9uQXR0cmlidXRlVmFsdWUoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBzdHJpbmdBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFt
ZTo6RGVzY3JpcHRpb24pOyB9CisgICAgU3RyaW5nIGhlbHBUZXh0QXR0cmlidXRlVmFsdWUoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBzdHJpbmdBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFt
ZTo6SGVscFRleHQpOyB9CisgICAgU3RyaW5nIHRpdGxlQXR0cmlidXRlVmFsdWUoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBzdHJpbmdBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6VGl0
bGUpOyB9CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKENPQ09BKSAmJiAhUExBVEZPUk0oSU9TX0ZB
TUlMWSkKKyAgICBib29sIGNhcmV0QnJvd3NpbmdFbmFibGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICB2b2lkIHNldENhcmV0QnJvd3NpbmdFbmFibGVkKGJvb2wpIG92
ZXJyaWRlIHsgfQorI2VuZGlmCisKKyAgICBBWENvcmVPYmplY3QqIGZvY3VzYWJsZUFuY2VzdG9y
KCkgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIEFYQ29yZU9iamVjdCogZWRpdGFi
bGVBbmNlc3RvcigpIG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICBBWENvcmVPYmpl
Y3QqIGhpZ2hlc3RFZGl0YWJsZUFuY2VzdG9yKCkgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsg
fQorCisgICAgY29uc3QgQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcqIGFuY2VzdG9yQWNjZXNzaWJp
bGl0eVNjcm9sbFZpZXcoYm9vbCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQor
CisgICAgdm9pZCBzZXRJc0lnbm9yZWRGcm9tUGFyZW50RGF0YShBY2Nlc3NpYmlsaXR5SXNJZ25v
cmVkRnJvbVBhcmVudERhdGEmKSBvdmVycmlkZSB7IH07CisgICAgdm9pZCBjbGVhcklzSWdub3Jl
ZEZyb21QYXJlbnREYXRhKCkgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCBzZXRJc0lnbm9yZWRGcm9t
UGFyZW50RGF0YUZvckNoaWxkKEFYQ29yZU9iamVjdCopIG92ZXJyaWRlIHsgfQorCisgICAgdm9p
ZCBzZXRUcmVlSWRlbnRpZmllcihBWElzb2xhdGVkVHJlZUlEKTsKKyAgICBBWElzb2xhdGVkVHJl
ZSogdHJlZSgpIGNvbnN0OworICAgIHZvaWQgc2V0UGFyZW50KEFYSUQpOworICAgIHZvaWQgYXBw
ZW5kQ2hpbGQoQVhJRCk7CisKICAgICBlbnVtIGNsYXNzIEFYUHJvcGVydHlOYW1lIDogdWludDhf
dCB7CiAgICAgICAgIE5vbmUgPSAwLAogICAgICAgICBIZWxwVGV4dCwKQEAgLTY4LDU0ICs2NTYs
MTMgQEAgcHVibGljOgogICAgICAgICBUaXRsZSwKICAgICB9OwogCi0gICAgc3RhdGljIFJlZjxB
WElzb2xhdGVkVHJlZU5vZGU+IGNyZWF0ZShjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0Jik7Ci0g
ICAgdmlydHVhbCB+QVhJc29sYXRlZFRyZWVOb2RlKCk7Ci0KLSAgICBBWElEIGlkZW50aWZpZXIo
KSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KLSAgICAKLSAgICB2b2lkIHNldFBhcmVu
dChBWElEKTsKICAgICBBWElEIHBhcmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50OyB9CiAK
LSAgICB2b2lkIGFwcGVuZENoaWxkKEFYSUQpOwotICAgIGNvbnN0IFZlY3RvcjxBWElEPiYgY2hp
bGRyZW4oKSBjb25zdCB7IHJldHVybiBtX2NoaWxkcmVuOyB9OwotCi0gICAgQVhJc29sYXRlZFRy
ZWUqIHRyZWUoKSBjb25zdDsKICAgICBBWElzb2xhdGVkVHJlZUlEIHRyZWVJZGVudGlmaWVyKCkg
Y29uc3QgeyByZXR1cm4gbV90cmVlSWRlbnRpZmllcjsgfQotICAgIHZvaWQgc2V0VHJlZUlkZW50
aWZpZXIoQVhJc29sYXRlZFRyZWVJRCk7CiAKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlciogd3JhcHBlcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IG1fd3JhcHBlci5nZXQoKTsgfQotICAgIHZvaWQgc2V0V3JhcHBlcihBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlciogd3JhcHBlcikgeyBtX3dyYXBwZXIgPSB3cmFwcGVyOyB9Ci0jZW5kaWYKLQot
cHJvdGVjdGVkOgogICAgIEFYSXNvbGF0ZWRUcmVlTm9kZSgpID0gZGVmYXVsdDsKLQotcHJpdmF0
ZToKLSAgICBBWElzb2xhdGVkVHJlZU5vZGUoY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCYpOwot
ICAgIHZvaWQgaW5pdGlhbGl6ZUF0dHJpYnV0ZURhdGEoY29uc3QgQWNjZXNzaWJpbGl0eU9iamVj
dCYpOwotCi0gICAgQVhDb3JlT2JqZWN0KiBhY2Nlc3NpYmlsaXR5SGl0VGVzdChjb25zdCBJbnRQ
b2ludCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgdXBkYXRlQ2hpbGRyZW5JZk5lY2Vzc2Fy
eSgpIG92ZXJyaWRlIHsgfQotCi0gICAgYm9vbCBpc01lZGlhQ29udHJvbExhYmVsKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc01l
ZGlhQ29udHJvbExhYmVsKTsgfQotICAgIGJvb2wgaXNBdHRhY2htZW50KCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc0F0dGFjaG1l
bnQpOyB9Ci0gICAgQWNjZXNzaWJpbGl0eVJvbGUgcm9sZVZhbHVlKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVJvbGU+KGludEF0dHJpYnV0ZVZhbHVl
KEFYUHJvcGVydHlOYW1lOjpSb2xlVmFsdWUpKTsgfQotICAgIGJvb2wgaXNMaW5rKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpJc0xp
bmspOyB9Ci0gICAgYm9vbCBpc0ltYWdlTWFwTGluaygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IGJvb2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNJbWFnZU1hcExpbmspOyB9Ci0g
ICAgYm9vbCBpc0ltYWdlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZh
bHVlKEFYUHJvcGVydHlOYW1lOjpJc0ltYWdlKTsgfQotICAgIGJvb2wgaXNGaWxlVXBsb2FkQnV0
dG9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVy
dHlOYW1lOjpJc0ZpbGVVcGxvYWRCdXR0b24pOyB9Ci0gICAgYm9vbCBhY2Nlc3NpYmlsaXR5SXNJ
Z25vcmVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYm9vbEF0dHJpYnV0ZVZhbHVlKEFYUHJv
cGVydHlOYW1lOjpJc0FjY2Vzc2liaWxpdHlJZ25vcmVkKTsgfQotICAgIEFYQ29yZU9iamVjdCog
cGFyZW50T2JqZWN0SW50ZXJmYWNlVW5pZ25vcmVkKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9v
bCBpc1RyZWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQ
cm9wZXJ0eU5hbWU6OklzVHJlZSk7IH0KLSAgICBib29sIGlzVHJlZUl0ZW0oKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBib29sQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OklzVHJlZUl0
ZW0pOyB9Ci0gICAgYm9vbCBpc1Njcm9sbGJhcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJv
b2xBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6SXNTY3JvbGxiYXIpOyB9Ci0gICAgRmxv
YXRSZWN0IHJlbGF0aXZlRnJhbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiByZWN0QXR0cmli
dXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OlJlbGF0aXZlRnJhbWUpOyB9Ci0gICAgU3RyaW5nIHNw
ZWVjaEhpbnRBdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0cmluZ0F0
dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpTcGVlY2hIaW50KTsgfQotICAgIFN0cmluZyBk
ZXNjcmlwdGlvbkF0dHJpYnV0ZVZhbHVlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3RyaW5n
QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkRlc2NyaXB0aW9uKTsgfQotICAgIFN0cmlu
ZyBoZWxwVGV4dEF0dHJpYnV0ZVZhbHVlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3RyaW5n
QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkhlbHBUZXh0KTsgfQotICAgIFN0cmluZyB0
aXRsZUF0dHJpYnV0ZVZhbHVlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3RyaW5nQXR0cmli
dXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OlRpdGxlKTsgfQotICAgIEFYQ29yZU9iamVjdCogZm9j
dXNlZFVJRWxlbWVudCgpIGNvbnN0IG92ZXJyaWRlOworICAgIEFYSXNvbGF0ZWRUcmVlTm9kZShj
b25zdCBBWENvcmVPYmplY3QmKTsKKyAgICB2b2lkIGluaXRpYWxpemVBdHRyaWJ1dGVEYXRhKGNv
bnN0IEFYQ29yZU9iamVjdCYpOwogCiAgICAgdXNpbmcgQXR0cmlidXRlVmFsdWVWYXJpYW50ID0g
VmFyaWFudDxzdGQ6Om51bGxwdHJfdCwgU3RyaW5nLCBib29sLCBpbnQsIHVuc2lnbmVkLCBkb3Vi
bGUsIE9wdGlvbmFsPEZsb2F0UmVjdD4+OwogICAgIHZvaWQgc2V0UHJvcGVydHkoQVhQcm9wZXJ0
eU5hbWUsIEF0dHJpYnV0ZVZhbHVlVmFyaWFudCYmLCBib29sIHNob3VsZFJlbW92ZSA9IGZhbHNl
KTsKQEAgLTEyOCwxMSArNjc1LDEyIEBAIHByaXZhdGU6CiAgICAgRmxvYXRSZWN0IHJlY3RBdHRy
aWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZSkgY29uc3Q7CiAKICAgICBBWElEIG1fcGFyZW50Owot
ICAgIEFYSUQgbV9pZGVudGlmaWVyOworICAgIEFYSUQgbV9pZDsKICAgICBib29sIG1faW5pdGlh
bGl6ZWQgeyBmYWxzZSB9OwogICAgIEFYSXNvbGF0ZWRUcmVlSUQgbV90cmVlSWRlbnRpZmllcjsK
ICAgICBSZWZQdHI8QVhJc29sYXRlZFRyZWU+IG1fY2FjaGVkVHJlZTsKLSAgICBWZWN0b3I8QVhJ
RD4gbV9jaGlsZHJlbjsKKyAgICBWZWN0b3I8QVhJRD4gbV9jaGlsZHJlbklEczsKKyAgICBWZWN0
b3I8UmVmUHRyPEFYQ29yZU9iamVjdD4+IG1fY2hpbGRyZW47CiAKICNpZiBQTEFURk9STShDT0NP
QSkKICAgICBSZXRhaW5QdHI8V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXI+IG1fd3JhcHBl
cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FYT2JqZWN0
Q2FjaGVNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BWE9iamVjdENh
Y2hlTWFjLm1tCmluZGV4IGM5YTg5M2JjMzA5OTZkOTlmZTQ1Y2IxYjcyMTllMzZhYzczYTBmZGIu
LmVhNGJkNWNkOTVlOTIzNWJjYzI3MWNiZTNhYzZmYThmMTMzOTY5ODEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FYT2JqZWN0Q2FjaGVNYWMubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvQVhPYmplY3RDYWNoZU1hYy5tbQpAQCAt
MjM4LDE3ICsyMzgsNyBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6OmRldGFjaFdyYXBwZXIoQWNjZXNz
aWJpbGl0eU9iamVjdCogb2JqLCBBY2Nlc3NpYmlsaXR5RGV0YWNobQogICAgIG9iai0+c2V0V3Jh
cHBlcihudWxscHRyKTsKIH0KIAotI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZX0lTT0xBVEVEX1RS
RUUpCi12b2lkIEFYT2JqZWN0Q2FjaGU6OmFzc29jaWF0ZUlzb2xhdGVkVHJlZU5vZGUoQWNjZXNz
aWJpbGl0eU9iamVjdCYgb2JqZWN0LCBBWElzb2xhdGVkVHJlZU5vZGUmIG5vZGUsIEFYSXNvbGF0
ZWRUcmVlSUQgdHJlZUlEKQotewotICAgIGF1dG8gd3JhcHBlciA9IG9iamVjdC53cmFwcGVyKCk7
Ci0gICAgQVNTRVJUKHdyYXBwZXIpOwotICAgIHdyYXBwZXIuaXNvbGF0ZWRUcmVlSWRlbnRpZmll
ciA9IHRyZWVJRDsKLSAgICBub2RlLnNldFdyYXBwZXIod3JhcHBlcik7Ci19Ci0jZW5kaWYKLQot
dm9pZCBBWE9iamVjdENhY2hlOjphdHRhY2hXcmFwcGVyKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9i
aikKK3ZvaWQgQVhPYmplY3RDYWNoZTo6YXR0YWNoV3JhcHBlcihBWENvcmVPYmplY3QqIG9iaikK
IHsKICAgICBSZXRhaW5QdHI8V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXI+IHdyYXBwZXIg
PSBhZG9wdE5TKFtbV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWxsb2NdIGluaXRXaXRo
QWNjZXNzaWJpbGl0eU9iamVjdDpvYmpdKTsKICAgICBvYmotPnNldFdyYXBwZXIod3JhcHBlci5n
ZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZS5oCmluZGV4IDg4NThi
ZWEzZDA4N2IxYmI2MjY1ZDc4N2ZkODgwNThkNzEyNjJmZmMuLjA1YTQ0ZmUyMDJlZWZhMmRmYmQ5
OTM1YjVlMmZhZjk0MDhlODNmNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
QmFzZS5oCkBAIC01MSwxNCArNTEsMTEgQEAgY2xhc3MgVmlzaWJsZVBvc2l0aW9uOwogfQogCiBA
aW50ZXJmYWNlIFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZSA6IE5TT2JqZWN0IHsK
LSAgICBXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0KiBtX29iamVjdDsKKyAgICBXZWJDb3Jl
OjpBWENvcmVPYmplY3QqIG1fb2JqZWN0OwogICAgIFdlYkNvcmU6OkFYSUQgX2lkZW50aWZpZXI7
Ci0jaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFlfSVNPTEFURURfVFJFRSkKLSAgICBSZWZQdHI8V2Vi
Q29yZTo6QVhJc29sYXRlZFRyZWVOb2RlPiBtX2lzb2xhdGVkVHJlZU5vZGU7Ci0jZW5kaWYKIH0K
LSAKLS0gKGlkKWluaXRXaXRoQWNjZXNzaWJpbGl0eU9iamVjdDooV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eU9iamVjdCopYXhPYmplY3Q7CisKKy0gKGlkKWluaXRXaXRoQWNjZXNzaWJpbGl0eU9iamVj
dDooV2ViQ29yZTo6QVhDb3JlT2JqZWN0KilheE9iamVjdDsKIAogI2lmIEVOQUJMRShBQ0NFU1NJ
QklMSVRZX0lTT0xBVEVEX1RSRUUpCiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFJl
ZlB0cjxXZWJDb3JlOjpBWElzb2xhdGVkVHJlZU5vZGU+IGlzb2xhdGVkVHJlZU5vZGU7CkBAIC02
OSw3ICs2Niw3IEBAIGNsYXNzIFZpc2libGVQb3NpdGlvbjsKIAogQHByb3BlcnR5IChub25hdG9t
aWMsIGFzc2lnbikgV2ViQ29yZTo6QVhJRCBpZGVudGlmaWVyOwogCi0tIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5T2JqZWN0KilhY2Nlc3NpYmlsaXR5T2JqZWN0OworLSAoV2ViQ29yZTo6QVhDb3Jl
T2JqZWN0KilhY2Nlc3NpYmlsaXR5T2JqZWN0OwogLSAoQk9PTCl1cGRhdGVPYmplY3RCYWNraW5n
U3RvcmU7CiAKIC8vIFRoaXMgY2FuIGJlIGVpdGhlciBhbiBBY2Nlc3NpYmlsaXR5T2JqZWN0IG9y
IGFuIEFYSXNvbGF0ZWRUcmVlTm9kZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlLm1tIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJC
YXNlLm1tCmluZGV4IGZhODliNmFkOTgwOTNiZGY3YTE4NTdmOTY3YjA3MDEyOWRhNjI1MzcuLmYw
ZmVhMjM4ZjAxMDFhNTM2YjRhNjc5MGFmNzI5ZDM5MmI0ZmFhNTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
QmFzZS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlckJhc2UubW0KQEAgLTMxLDggKzMxLDYgQEAKIAogI2lmIEVOQUJM
RShBQ0NFU1NJQklMSVRZKQogCi0jaW1wb3J0ICJBWElzb2xhdGVkVHJlZS5oIgotI2ltcG9ydCAi
QVhJc29sYXRlZFRyZWVOb2RlLmgiCiAjaW1wb3J0ICJBWE9iamVjdENhY2hlLmgiCiAjaW1wb3J0
ICJBY2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3cuaCIKICNpbXBvcnQgIkFjY2Vzc2liaWxpdHlMaXN0
LmgiCkBAIC0yNzUsMjAgKzI3MywxMCBAQCBzdGF0aWMgdm9pZCBhZGRDaGlsZFRvQXJyYXkoQVhD
b3JlT2JqZWN0JiBjaGlsZCwgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBhcnJheQogICAgICAg
ICBbYXJyYXkuZ2V0KCkgYWRkT2JqZWN0OndyYXBwZXJdOwogfQogCi0jaWYgRU5BQkxFKEFDQ0VT
U0lCSUxJVFlfSVNPTEFURURfVFJFRSkKLU5TQXJyYXkgKmNvbnZlcnRUb05TQXJyYXkoY29uc3Qg
VmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpBWElzb2xhdGVkVHJlZU5vZGU+PiYgY2hpbGRyZW4pCi17
Ci0gICAgTlNNdXRhYmxlQXJyYXkgKnJlc3VsdCA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGlu
aXRXaXRoQ2FwYWNpdHk6Y2hpbGRyZW4uc2l6ZSgpXTsKLSAgICBmb3IgKGF1dG8mIGNoaWxkIDog
Y2hpbGRyZW4pCi0gICAgICAgIGFkZENoaWxkVG9BcnJheSgqY2hpbGQsIHJlc3VsdCk7Ci0gICAg
cmV0dXJuIFtyZXN1bHQgYXV0b3JlbGVhc2VdOwotfQotI2VuZGlmCi0KLU5TQXJyYXkgKmNvbnZl
cnRUb05TQXJyYXkoY29uc3QgV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJp
bGl0eUNoaWxkcmVuVmVjdG9yJiBjaGlsZHJlbikKK05TQXJyYXkgKmNvbnZlcnRUb05TQXJyYXko
Y29uc3QgV2ViQ29yZTo6QVhDb3JlT2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Im
IGNoaWxkcmVuKQogewogICAgIE5TTXV0YWJsZUFycmF5ICpyZXN1bHQgPSBbW05TTXV0YWJsZUFy
cmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OmNoaWxkcmVuLnNpemUoKV07Ci0gICAgZm9yIChh
dXRvJiBjaGlsZCA6IGNoaWxkcmVuKQorICAgIGZvciAoY29uc3QgYXV0byYgY2hpbGQgOiBjaGls
ZHJlbikKICAgICAgICAgYWRkQ2hpbGRUb0FycmF5KCpjaGlsZCwgcmVzdWx0KTsKICAgICByZXR1
cm4gW3Jlc3VsdCBhdXRvcmVsZWFzZV07CiB9CkBAIC0yOTYsMTEgKzI4NCw4IEBAIE5TQXJyYXkg
KmNvbnZlcnRUb05TQXJyYXkoY29uc3QgV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6QWNj
ZXNzaWJpbGl0eUNoaWxkCiBAaW1wbGVtZW50YXRpb24gV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXJCYXNlCiAKIEBzeW50aGVzaXplIGlkZW50aWZpZXI9X2lkZW50aWZpZXI7Ci0jaWYgRU5B
QkxFKEFDQ0VTU0lCSUxJVFlfSVNPTEFURURfVFJFRSkKLUBzeW50aGVzaXplIGlzb2xhdGVkVHJl
ZUlkZW50aWZpZXI9X2lzb2xhdGVkVHJlZUlkZW50aWZpZXI7Ci0jZW5kaWYKIAotLSAoaWQpaW5p
dFdpdGhBY2Nlc3NpYmlsaXR5T2JqZWN0OihBY2Nlc3NpYmlsaXR5T2JqZWN0KilheE9iamVjdAor
LSAoaWQpaW5pdFdpdGhBY2Nlc3NpYmlsaXR5T2JqZWN0OihBWENvcmVPYmplY3QqKWF4T2JqZWN0
CiB7CiAgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCiAgICAgICAgIHJldHVybiBuaWw7
CkBAIC0zMTEsNDYgKzI5NiwxNCBAQCBOU0FycmF5ICpjb252ZXJ0VG9OU0FycmF5KGNvbnN0IFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZAogICAgIHJldHVy
biBzZWxmOwogfQogCi0jaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFlfSVNPTEFURURfVFJFRSkKLS0g
KFJlZlB0cjxXZWJDb3JlOjpBWElzb2xhdGVkVHJlZU5vZGU+KWlzb2xhdGVkVHJlZU5vZGUKLXsK
LSAgICBSRUxFQVNFX0FTU0VSVCghaXNNYWluVGhyZWFkKCkpOwotCi0gICAgaWYgKCFfaWRlbnRp
ZmllcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAobV9pc29sYXRlZFRyZWVO
b2RlKQotICAgICAgICByZXR1cm4gbV9pc29sYXRlZFRyZWVOb2RlOwotCi0gICAgbV9pc29sYXRl
ZFRyZWVOb2RlID0gQVhJc29sYXRlZFRyZWU6Om5vZGVJblRyZWVGb3JJRChfaXNvbGF0ZWRUcmVl
SWRlbnRpZmllciwgX2lkZW50aWZpZXIpOwotICAgIHJldHVybiBtX2lzb2xhdGVkVHJlZU5vZGU7
Ci19Ci0jZW5kaWYKLQogLSAodm9pZClkZXRhY2gKIHsKICAgICBtX29iamVjdCA9IG51bGxwdHI7
CiAgICAgX2lkZW50aWZpZXIgPSAwOwotCi0jaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFlfSVNPTEFU
RURfVFJFRSkKLSAgICBtX2lzb2xhdGVkVHJlZU5vZGUgPSBudWxscHRyOwotICAgIF9pc29sYXRl
ZFRyZWVJZGVudGlmaWVyID0gMDsKLSNlbmRpZgogfQogCiAtIChCT09MKXVwZGF0ZU9iamVjdEJh
Y2tpbmdTdG9yZQogewotI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZX0lTT0xBVEVEX1RSRUUpCi0g
ICAgaWYgKF9BWFVJRWxlbWVudFJlcXVlc3RTZXJ2aWNlZEJ5U2Vjb25kYXJ5QVhUaHJlYWQoKSkg
ewotICAgICAgICBSRUxFQVNFX0FTU0VSVCghaXNNYWluVGhyZWFkKCkpOwotICAgICAgICBpZiAo
YXV0byB0cmVlTm9kZSA9IHNlbGYuaXNvbGF0ZWRUcmVlTm9kZSkgewotICAgICAgICAgICAgaWYg
KGF1dG8gdHJlZSA9IHRyZWVOb2RlLT50cmVlKCkpCi0gICAgICAgICAgICAgICAgdHJlZS0+YXBw
bHlQZW5kaW5nQ2hhbmdlcygpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBfaWRlbnRpZmll
cjsKLSAgICB9Ci0jZW5kaWYKLSAgICAKICAgICAvLyBDYWxsaW5nIHVwZGF0ZUJhY2tpbmdTdG9y
ZSgpIGNhbiBpbnZhbGlkYXRlIHRoaXMgZWxlbWVudCBzbyBzZWxmIG11c3QgYmUgcmV0YWluZWQu
CiAgICAgLy8gSWYgaXQgZG9lcyBiZWNvbWUgaW52YWxpZGF0ZWQsIG1fb2JqZWN0IHdpbGwgYmUg
bmlsLgogICAgIENGUmV0YWluKChfX2JyaWRnZSBDRlR5cGVSZWYpc2VsZik7CkBAIC0zNzEsNyAr
MzI0LDcgQEAgTlNBcnJheSAqY29udmVydFRvTlNBcnJheShjb25zdCBXZWJDb3JlOjpBY2Nlc3Np
YmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGQKICAgICByZXR1cm4gbmlsOwogfQogCi0t
IChBY2Nlc3NpYmlsaXR5T2JqZWN0KilhY2Nlc3NpYmlsaXR5T2JqZWN0CistIChBWENvcmVPYmpl
Y3QqKWFjY2Vzc2liaWxpdHlPYmplY3QKIHsKICNpZiBFTkFCTEUoQUNDRVNTSUJJTElUWV9JU09M
QVRFRF9UUkVFKQogICAgIEFTU0VSVCghX0FYVUlFbGVtZW50UmVxdWVzdFNlcnZpY2VkQnlTZWNv
bmRhcnlBWFRocmVhZCgpKTsKQEAgLTM4OCwxMCArMzQxLDYgQEAgTlNBcnJheSAqY29udmVydFRv
TlNBcnJheShjb25zdCBXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5
Q2hpbGQKIAogLSAoV2ViQ29yZTo6QVhDb3JlT2JqZWN0KilheEJhY2tpbmdPYmplY3QKIHsKLSNp
ZiBFTkFCTEUoQUNDRVNTSUJJTElUWV9JU09MQVRFRF9UUkVFKQotICAgIGlmIChfQVhVSUVsZW1l
bnRSZXF1ZXN0U2VydmljZWRCeVNlY29uZGFyeUFYVGhyZWFkKCkpCi0gICAgICAgIHJldHVybiBz
ZWxmLmlzb2xhdGVkVHJlZU5vZGUuZ2V0KCk7Ci0jZW5kaWYKICAgICByZXR1cm4gbV9vYmplY3Q7
CiB9CiAKQEAgLTc4NSw3ICs3MzQsNyBAQCBBY2Nlc3NpYmlsaXR5U2VhcmNoQ3JpdGVyaWEgYWNj
ZXNzaWJpbGl0eVNlYXJjaENyaXRlcmlhRm9yU2VhcmNoUHJlZGljYXRlUGFyYW1ldAogICAgIGlm
IChbc2VhcmNoVGV4dFBhcmFtZXRlciBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKQog
ICAgICAgICBzZWFyY2hUZXh0ID0gc2VhcmNoVGV4dFBhcmFtZXRlcjsKICAgICAKLSAgICBBY2Nl
c3NpYmlsaXR5T2JqZWN0KiBzdGFydEVsZW1lbnQgPSBudWxscHRyOworICAgIEFYQ29yZU9iamVj
dCogc3RhcnRFbGVtZW50ID0gbnVsbHB0cjsKICAgICBpZiAoW3N0YXJ0RWxlbWVudFBhcmFtZXRl
ciBpc0tpbmRPZkNsYXNzOltXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UgY2xhc3Nd
XSkKICAgICAgICAgc3RhcnRFbGVtZW50ID0gW3N0YXJ0RWxlbWVudFBhcmFtZXRlciBhY2Nlc3Np
YmlsaXR5T2JqZWN0XTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMu
bW0KaW5kZXggYzU3MDk0OWM1NjBiNWZhMTFiYzQ0MzAwOTBlMjI1M2M2OTVjOGUzZC4uNjgwZDgw
MDhhYjEzY2M4NTAxNzM5YmJmY2FmOGQwNDEyNzYwMzg4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMu
bW0KKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXJNYWMubW0KQEAgLTEyODcsNyArMTI4Nyw3IEBAIHN0YXRpYyBOU1N0cmlu
ZyogbnNTdHJpbmdGb3JSZXBsYWNlZE5vZGUoTm9kZSogcmVwbGFjZWROb2RlKQogICAgICAgICAv
LyBub24temVybyBsZW5ndGggbWVhbnMgdGV4dHVhbCBub2RlLCB6ZXJvIGxlbmd0aCBtZWFucyBy
ZXBsYWNlZCBub2RlIChBS0EgImF0dGFjaG1lbnRzIiBpbiBBWCkKICAgICAgICAgaWYgKGl0LnRl
eHQoKS5sZW5ndGgoKSkgewogICAgICAgICAgICAgLy8gQWRkIHRoZSB0ZXh0IG9mIHRoZSBsaXN0
IG1hcmtlciBpdGVtIGlmIG5lY2Vzc2FyeS4KLSAgICAgICAgICAgIFN0cmluZyBsaXN0TWFya2Vy
VGV4dCA9IG1fb2JqZWN0LT5saXN0TWFya2VyVGV4dEZvck5vZGVBbmRQb3NpdGlvbigmbm9kZSwg
VmlzaWJsZVBvc2l0aW9uKGl0LnJhbmdlKCktPnN0YXJ0UG9zaXRpb24oKSkpOworICAgICAgICAg
ICAgU3RyaW5nIGxpc3RNYXJrZXJUZXh0ID0gQWNjZXNzaWJpbGl0eU9iamVjdDo6bGlzdE1hcmtl
clRleHRGb3JOb2RlQW5kUG9zaXRpb24oJm5vZGUsIFZpc2libGVQb3NpdGlvbihpdC5yYW5nZSgp
LT5zdGFydFBvc2l0aW9uKCkpKTsKICAgICAgICAgICAgIGlmICghbGlzdE1hcmtlclRleHQuaXNF
bXB0eSgpKQogICAgICAgICAgICAgICAgIEFYQXR0cmlidXRlZFN0cmluZ0FwcGVuZFRleHQoYXR0
clN0cmluZywgJm5vZGUsIGxpc3RNYXJrZXJUZXh0LCBzcGVsbENoZWNrKTsKICAgICAgICAgICAg
IEFYQXR0cmlidXRlZFN0cmluZ0FwcGVuZFRleHQoYXR0clN0cmluZywgJm5vZGUsIGl0LnRleHQo
KSwgc3BlbGxDaGVjayk7CkBAIC0xOTIyLDcgKzE5MjIsNyBAQCBzdGF0aWMgdm9pZCBjb252ZXJ0
VG9WZWN0b3IoTlNBcnJheSogYXJyYXksIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxp
dHlDaAogICAgIHVuc2lnbmVkIGxlbmd0aCA9IFthcnJheSBjb3VudF07CiAgICAgdmVjdG9yLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkobGVuZ3RoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqID0gW1th
cnJheSBvYmplY3RBdEluZGV4OmldIGFjY2Vzc2liaWxpdHlPYmplY3RdOworICAgICAgICBBWENv
cmVPYmplY3QqIG9iaiA9IFtbYXJyYXkgb2JqZWN0QXRJbmRleDppXSBhY2Nlc3NpYmlsaXR5T2Jq
ZWN0XTsKICAgICAgICAgaWYgKG9iaikKICAgICAgICAgICAgIHZlY3Rvci5hcHBlbmQob2JqKTsK
ICAgICB9CkBAIC0yMDA1LDI4ICsyMDA1LDExIEBAIHN0YXRpYyB2b2lkIFdlYlRyYW5zZm9ybUNH
UGF0aFRvTlNCZXppZXJQYXRoKHZvaWQqIGluZm8sIGNvbnN0IENHUGF0aEVsZW1lbnQgKmVsCiAK
IC0gKHNpemVfdCljaGlsZHJlblZlY3RvclNpemUKIHsKLSNpZiBFTkFCTEUoQUNDRVNTSUJJTElU
WV9JU09MQVRFRF9UUkVFKQotICAgIGlmIChfQVhVSUVsZW1lbnRSZXF1ZXN0U2VydmljZWRCeVNl
Y29uZGFyeUFYVGhyZWFkKCkpCi0gICAgICAgIHJldHVybiBzZWxmLmlzb2xhdGVkVHJlZU5vZGUt
PmNoaWxkcmVuKCkuc2l6ZSgpOwotI2VuZGlmCi0gICAgCiAgICAgcmV0dXJuIG1fb2JqZWN0LT5j
aGlsZHJlbigpLnNpemUoKTsKIH0KIAogLSAoTlNBcnJheTxXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlciAqPiAqKWNoaWxkcmVuVmVjdG9yQXJyYXkKIHsKLSNpZiBFTkFCTEUoQUNDRVNTSUJJ
TElUWV9JU09MQVRFRF9UUkVFKQotICAgIGlmIChfQVhVSUVsZW1lbnRSZXF1ZXN0U2VydmljZWRC
eVNlY29uZGFyeUFYVGhyZWFkKCkpIHsKLSAgICAgICAgYXV0byB0cmVlTm9kZSA9IHNlbGYuaXNv
bGF0ZWRUcmVlTm9kZTsKLSAgICAgICAgYXV0byBub2RlQ2hpbGRyZW4gPSB0cmVlTm9kZS0+Y2hp
bGRyZW4oKTsKLSAgICAgICAgVmVjdG9yPFJlZlB0cjxBWElzb2xhdGVkVHJlZU5vZGU+PiBjaGls
ZHJlbjsKLSAgICAgICAgY2hpbGRyZW4ucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShub2RlQ2hpbGRy
ZW4uc2l6ZSgpKTsKLSAgICAgICAgYXV0byB0cmVlID0gdHJlZU5vZGUtPnRyZWUoKTsKLSAgICAg
ICAgZm9yIChhdXRvIGNoaWxkSUQgOiBub2RlQ2hpbGRyZW4pCi0gICAgICAgICAgICBjaGlsZHJl
bi51bmNoZWNrZWRBcHBlbmQodHJlZS0+bm9kZUZvcklEKGNoaWxkSUQpKTsKLSAgICAgICAgcmV0
dXJuIGNvbnZlcnRUb05TQXJyYXkoY2hpbGRyZW4pOwotICAgIH0KLSNlbmRpZgogICAgIHJldHVy
biBjb252ZXJ0VG9OU0FycmF5KG1fb2JqZWN0LT5jaGlsZHJlbigpKTsKIH0KIApAQCAtMzExOCw3
ICszMTAxLDcgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgCiAg
ICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlJbmRl
eEF0dHJpYnV0ZV0pIHsKICAgICAgICAgaWYgKG1fb2JqZWN0LT5pc1RyZWVJdGVtKCkpIHsKLSAg
ICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudCA9IG1fb2JqZWN0LT5wYXJlbnRP
YmplY3QoKTsKKyAgICAgICAgICAgIEFYQ29yZU9iamVjdCogcGFyZW50ID0gbV9vYmplY3QtPnBh
cmVudE9iamVjdCgpOwogICAgICAgICAgICAgZm9yICg7IHBhcmVudCAmJiAhcGFyZW50LT5pc1Ry
ZWUoKTsgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRPYmplY3QoKSkKICAgICAgICAgICAgIHsgfQog
ICAgICAgICAgICAgCkBAIC0zMTU3LDcgKzMxNDAsNyBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExF
TUVOVEFUSU9OU19FTkQKICAgICAvLyBUaGUgcm93IHRoYXQgY29udGFpbnMgdGhpcyByb3cuIEl0
IHNob3VsZCBiZSB0aGUgc2FtZSBhcyB0aGUgZmlyc3QgcGFyZW50IHRoYXQgaXMgYSB0cmVlaXRl
bS4KICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0
eURpc2Nsb3NlZEJ5Um93QXR0cmlidXRlXSkgewogICAgICAgICBpZiAobV9vYmplY3QtPmlzVHJl
ZUl0ZW0oKSkgewotICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gbV9v
YmplY3QtPnBhcmVudE9iamVjdCgpOworICAgICAgICAgICAgQVhDb3JlT2JqZWN0KiBwYXJlbnQg
PSBtX29iamVjdC0+cGFyZW50T2JqZWN0KCk7CiAgICAgICAgICAgICB3aGlsZSAocGFyZW50KSB7
CiAgICAgICAgICAgICAgICAgaWYgKHBhcmVudC0+aXNUcmVlSXRlbSgpKQogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gcGFyZW50LT53cmFwcGVyKCk7CkBAIC0zMjI0LDggKzMyMDcsOCBAQCBB
TExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICBpZiAoW2F0dHJpYnV0ZU5h
bWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVRpdGxlVUlFbGVtZW50QXR0cmlidXRl
XSkgewogICAgICAgICBpZiAoIW1fb2JqZWN0LT5leHBvc2VzVGl0bGVVSUVsZW1lbnQoKSkKICAg
ICAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgICAgIAotICAgICAgICBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBvYmogPSBtX29iamVjdC0+dGl0bGVVSUVsZW1lbnQoKTsKKworICAgICAgICBBWENvcmVP
YmplY3QqIG9iaiA9IG1fb2JqZWN0LT50aXRsZVVJRWxlbWVudCgpOwogICAgICAgICBpZiAob2Jq
KQogICAgICAgICAgICAgcmV0dXJuIG9iai0+d3JhcHBlcigpOwogICAgICAgICByZXR1cm4gbmls
OwpAQCAtMzI0OSwxMyArMzIzMiwxMyBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9O
U19FTkQKICAgICB9CiAgICAgCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmlu
ZzpOU0FjY2Vzc2liaWxpdHlIb3Jpem9udGFsU2Nyb2xsQmFyQXR0cmlidXRlXSkgewotICAgICAg
ICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBzY3JvbGxCYXIgPSBtX29iamVjdC0+c2Nyb2xsQmFyKEFj
Y2Vzc2liaWxpdHlPcmllbnRhdGlvbjo6SG9yaXpvbnRhbCk7CisgICAgICAgIEFYQ29yZU9iamVj
dCogc2Nyb2xsQmFyID0gbV9vYmplY3QtPnNjcm9sbEJhcihBY2Nlc3NpYmlsaXR5T3JpZW50YXRp
b246Okhvcml6b250YWwpOwogICAgICAgICBpZiAoc2Nyb2xsQmFyKQogICAgICAgICAgICAgcmV0
dXJuIHNjcm9sbEJhci0+d3JhcHBlcigpOwogICAgICAgICByZXR1cm4gbmlsOwogICAgIH0KICAg
ICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVZlcnRp
Y2FsU2Nyb2xsQmFyQXR0cmlidXRlXSkgewotICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBz
Y3JvbGxCYXIgPSBtX29iamVjdC0+c2Nyb2xsQmFyKEFjY2Vzc2liaWxpdHlPcmllbnRhdGlvbjo6
VmVydGljYWwpOworICAgICAgICBBWENvcmVPYmplY3QqIHNjcm9sbEJhciA9IG1fb2JqZWN0LT5z
Y3JvbGxCYXIoQWNjZXNzaWJpbGl0eU9yaWVudGF0aW9uOjpWZXJ0aWNhbCk7CiAgICAgICAgIGlm
IChzY3JvbGxCYXIpCiAgICAgICAgICAgICByZXR1cm4gc2Nyb2xsQmFyLT53cmFwcGVyKCk7CiAg
ICAgICAgIHJldHVybiBuaWw7CkBAIC0zNDY2LDE3ICszNDQ5LDE3IEBAIEFMTE9XX0RFUFJFQ0FU
RURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgIH0KIAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBp
c0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5Rm9jdXNhYmxlQW5jZXN0b3JBdHRyaWJ1dGVd
KSB7Ci0gICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCA9IG1fb2JqZWN0LT5mb2N1
c2FibGVBbmNlc3RvcigpOworICAgICAgICBBWENvcmVPYmplY3QqIG9iamVjdCA9IG1fb2JqZWN0
LT5mb2N1c2FibGVBbmNlc3RvcigpOwogICAgICAgICByZXR1cm4gb2JqZWN0ID8gb2JqZWN0LT53
cmFwcGVyKCkgOiBuaWw7CiAgICAgfQogCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxU
b1N0cmluZzpOU0FjY2Vzc2liaWxpdHlFZGl0YWJsZUFuY2VzdG9yQXR0cmlidXRlXSkgewotICAg
ICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QgPSBtX29iamVjdC0+ZWRpdGFibGVBbmNl
c3RvcigpOworICAgICAgICBBWENvcmVPYmplY3QqIG9iamVjdCA9IG1fb2JqZWN0LT5lZGl0YWJs
ZUFuY2VzdG9yKCk7CiAgICAgICAgIHJldHVybiBvYmplY3QgPyBvYmplY3QtPndyYXBwZXIoKSA6
IG5pbDsKICAgICB9CiAKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5T
QWNjZXNzaWJpbGl0eUhpZ2hlc3RFZGl0YWJsZUFuY2VzdG9yQXR0cmlidXRlXSkgewotICAgICAg
ICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QgPSBtX29iamVjdC0+aGlnaGVzdEVkaXRhYmxl
QW5jZXN0b3IoKTsKKyAgICAgICAgQVhDb3JlT2JqZWN0KiBvYmplY3QgPSBtX29iamVjdC0+aGln
aGVzdEVkaXRhYmxlQW5jZXN0b3IoKTsKICAgICAgICAgcmV0dXJuIG9iamVjdCA/IG9iamVjdC0+
d3JhcHBlcigpIDogbmlsOwogICAgIH0KIApAQCAtMzc4MSw3ICszNzY0LDcgQEAgQUxMT1dfREVQ
UkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECiAgICAgLy8gT24gV0sxLCB3ZSBuZWVkIHRvIGNvbnZl
cnQgcmVjdCB0byB3aW5kb3cgc3BhY2UgdG8gbWF0Y2ggbW91c2UgY2xpY2tpbmcuCiAgICAgaWYg
KGZyYW1lVmlldykgewogICAgICAgICAvLyBGaW5kIHRoZSBhcHByb3ByaWF0ZSBzY3JvbGwgdmll
dyB0byB1c2UgdG8gY29udmVydCB0aGUgY29udGVudHMgdG8gdGhlIHdpbmRvdy4KLSAgICAgICAg
Zm9yIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBtX29iamVjdC0+cGFyZW50T2JqZWN0
KCk7IHBhcmVudDsgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRPYmplY3QoKSkgeworICAgICAgICBm
b3IgKGF1dG8qIHBhcmVudCA9IG1fb2JqZWN0LT5wYXJlbnRPYmplY3QoKTsgcGFyZW50OyBwYXJl
bnQgPSBwYXJlbnQtPnBhcmVudE9iamVjdCgpKSB7CiAgICAgICAgICAgICBpZiAoaXM8QWNjZXNz
aWJpbGl0eVNjcm9sbFZpZXc+KCpwYXJlbnQpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGF1dG8g
c2Nyb2xsVmlldyA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3PigqcGFyZW50KS5z
Y3JvbGxWaWV3KCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFmcmFtZVZpZXctPnBsYXRm
b3JtV2lkZ2V0KCkpCkBAIC00MTI2LDcgKzQxMDksNyBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExF
TUVOVEFUSU9OU19FTkQKICAgICBOU051bWJlciogbnVtYmVyID0gbmlsOwogICAgIE5TQXJyYXkq
IGFycmF5ID0gbmlsOwogICAgIE5TRGljdGlvbmFyeSogZGljdGlvbmFyeSA9IG5pbDsKLSAgICBS
ZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gdWlFbGVtZW50ID0gbnVsbHB0cjsKKyAgICBSZWZQ
dHI8QVhDb3JlT2JqZWN0PiB1aUVsZW1lbnQ7CiAgICAgTlNQb2ludCBwb2ludCA9IE5TWmVyb1Bv
aW50OwogICAgIGJvb2wgcG9pbnRTZXQgPSBmYWxzZTsKICAgICBOU1JhbmdlIHJhbmdlID0gezAs
IDB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS93aW4vQVhPYmpl
Y3RDYWNoZVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L3dpbi9BWE9iamVj
dENhY2hlV2luLmNwcAppbmRleCAzMTJiMDIwODQ1NzNmYzYwNDg3OTVhNTFlODQwMjM2YmIyODU3
ZmYxLi43OWJhYzQ3OTI5OTZlNTc2Yzg0ODc1NDIwOTBjNGY0MmNiYmNhYjMyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L3dpbi9BWE9iamVjdENhY2hlV2luLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L3dpbi9BWE9iamVjdENhY2hlV2luLmNw
cApAQCAtNTAsNyArNTAsNyBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6OmRldGFjaFdyYXBwZXIoQWNj
ZXNzaWJpbGl0eU9iamVjdCogb2JqLCBBY2Nlc3NpYmlsaXR5RGV0YWNobQogICAgICAgICB3cmFw
cGVyLT5kZXRhY2goKTsKIH0KIAotdm9pZCBBWE9iamVjdENhY2hlOjphdHRhY2hXcmFwcGVyKEFj
Y2Vzc2liaWxpdHlPYmplY3QqKQordm9pZCBBWE9iamVjdENhY2hlOjphdHRhY2hXcmFwcGVyKEFY
Q29yZU9iamVjdCopCiB7CiAgICAgLy8gT24gV2luZG93cywgQWNjZXNzaWJpbGl0eU9iamVjdHMg
YXJlIHdyYXBwZWQgd2hlbiB0aGUgYWNjZXNzaWJpbGl0eQogICAgIC8vIHNvZnR3YXJlIHJlcXVl
c3RzIHRoZW0gdmlhIGdldF9hY2NDaGlsZC4K
</data>

          </attachment>
      

    </bug>

</bugzilla>